WingCloudHexExplorer/HexExplorer/FrmSetting.cs

207 lines
7.7 KiB
C#

using System.Windows.Forms;
using System.ComponentModel;
using Be.Windows.Forms;
using System.Drawing;
using Microsoft.Win32;
using System.Collections.Generic;
using System;
namespace HexExplorer
{
public partial class FrmSetting : ToolWindowBase
{
private static FrmSetting frmSetting=null;
public static bool UseShell = false;
private readonly List<WSPlugin.PluginInfo> pluginInfos;
private readonly WSPlugin plugin = WSPlugin.Instance;
private static string app= Application.ExecutablePath;
private string appp = $"\"{app}\" \"%1\"";
public static FrmSetting Instance
{
get
{
if (frmSetting == null || frmSetting.IsDisposed)
{
frmSetting = new FrmSetting();
}
return frmSetting;
}
}
[DefaultValue(false)]
public bool IsPluginShow { get; set; }
private FrmSetting()
{
InitializeComponent();
//创建绑定,少些重复性代码
DataBindings.Add(BindingEnum.Setting.ProgramFont);
btnFont.DataBindings.Add(BindingEnum.Setting.ProgramFontName);
cbEncoding.DataBindings.Add(BindingEnum.Setting.StringViewEncoding);
ntScaling.DataBindings.Add(BindingEnum.Setting.ScalingPercent);
cbEnableString.DataBindings.Add(BindingEnum.Setting.EnableStringView);
cbAdmin.DataBindings.Add(BindingEnum.Setting.AdminStart);
btnSelBackColor.DataBindings.Add(BindingEnum.Setting.SelBackColor);
btnSelTextColor.DataBindings.Add(BindingEnum.Setting.SelTextColor);
cbLineInfo.DataBindings.Add(BindingEnum.Setting.EnableLineInfo);
cbColInfo.DataBindings.Add(BindingEnum.Setting.EnableColInfo);
cbGroupLine.DataBindings.Add(BindingEnum.Setting.EnableGroupLine);
cbStringLine.DataBindings.Add(BindingEnum.Setting.EnableHexStringLine);
btnIMAGE_DOS_HEADER.DataBindings.Add(BindingEnum.Setting.IMAGE_DOS_HEADER_Color);
btnIMAGE_NT_HEADERS.DataBindings.Add(BindingEnum.Setting.IMAGE_NT_HEADERS_Color);
btnIMAGE_FILE_HEADER.DataBindings.Add(BindingEnum.Setting.IMAGE_FILE_HEADER_Color);
btnIMAGE_OPTIONAL_HEADER.DataBindings.Add(BindingEnum.Setting.IMAGE_OPTIONAL_HEADER_Color);
btnIMAGE_IMPORT_DESCRIPTOR.DataBindings.Add(BindingEnum.Setting.IMAGE_IMPORT_DESCRIPTOR_Color);
btnIMAGE_EXPORT_DIRECTORY.DataBindings.Add(BindingEnum.Setting.IMAGE_EXPORT_DIRECTORY_Color);
btnIMAGE_DATA_DIRECTORY.DataBindings.Add(BindingEnum.Setting.IMAGE_DATA_DIRECTORY_Color);
btnIMAGE_BASE_RELOCATION.DataBindings.Add(BindingEnum.Setting.IMAGE_BASE_RELOCATION_Color);
btnIMAGE_SECTION_HEADER.DataBindings.Add(BindingEnum.Setting.IMAGE_SECTION_HEADER_Color);
btnOther.DataBindings.Add(BindingEnum.Setting.Image_OtherColor);
cbEnablePE.DataBindings.Add(BindingEnum.Setting.EnablePE);
cbEnablePlugin.DataBindings.Add(BindingEnum.Setting.EnablePlugin);
cbEnableBookMark.DataBindings.Add(BindingEnum.Setting.EnableAdvBookMark);
btnLineInfo.DataBindings.Add(BindingEnum.Setting.LineInfoBtnForeColor);
btnColInfo.DataBindings.Add(BindingEnum.Setting.ColInfoBtnForeColor);
btnGroupLine.DataBindings.Add(BindingEnum.Setting.GroupLinePen);
btnGroupLine.DataBindings.Add(BindingEnum.Setting.GroupLinePenFore);
btnStringLine.DataBindings.Add(BindingEnum.Setting.HexStringLinePen);
btnStringLine.DataBindings.Add(BindingEnum.Setting.HexStringLinePenFore);
cbShellRight.DataBindings.Add(BindingEnum.UseShell);
if (AdminLib.Instance.IsAdmin)
{
gpNeedAdmin.Enabled = true;
}
else
{
gpNeedAdmin.BackgroundImage = Program.AdminIconP;
}
MUserProfile mUser = UserSetting.UserProfile;
var dplugin = mUser.DisableGuid;
if (mUser.EnablePlugin)
{
pluginInfos = new List<WSPlugin.PluginInfo>();
foreach (var item in plugin.plugins.Value)
{
clbPlugin.Items.Add(item.PluginName);
bool ebable = dplugin == null || !dplugin.Contains(item.Puid);
pluginInfos.Add(new WSPlugin.PluginInfo(item, ebable));
}
}
}
private void FrmSetting_VisibleChanged(object sender, EventArgs e)
{
if (Visible)
{
if (IsPluginShow)
{
tabSetting.SelectedIndex = 3;
IsPluginShow = false;
}
else
{
tabSetting.SelectedIndex = 0;
}
}
}
private void BtnSelectColor_Click(object sender, EventArgs e)
{
if (cD.ShowDialog() == DialogResult.OK)
{
if (cD.Color == Color.Black)
{
MessageBox.Show("所选颜色不能为黑色!", Program.AppName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
(sender as Button).ForeColor = cD.Color;
}
}
private void BtnPenFEdit_Click(object sender, EventArgs e)
{
using (FrmPenFEdit frmPenF = FrmPenFEdit.Instance)
{
frmPenF.PenF = (sender as Button).Tag as PenF;
frmPenF.ShowDialog();
frmPenF.Dispose();
}
}
private void ClbPlugin_SelectedIndexChanged(object sender, EventArgs e)
{
var sel = clbPlugin.SelectedIndex;
if (sel >= 0)
{
pgPlugin.SelectedObject = pluginInfos[sel];
}
}
private void FrmSetting_Load(object sender, EventArgs e)
{
RegistryKey key = Registry.ClassesRoot.OpenSubKey(@"*\shell");
if ((key = key.OpenSubKey("WCHexExplorer")) != null)
{
if (!key.GetValue("Icon", null).Equals(app))
goto endl;
if ((key = key.OpenSubKey("command")) != null)
{
if (key.GetValue("").Equals(appp))
{
UseShell = true;
}
else
{
goto endl;
}
}
else
{
goto endl;
}
return;
}
endl:
UseShell = false;
}
private void CbShellRight_CheckedChanged(object sender, EventArgs e)
{
if (cbShellRight.Checked)
{
var app = Application.ExecutablePath;
using (var key = Registry.ClassesRoot.OpenSubKey(@"*\shell", true))
{
using (var key0 = key.CreateSubKey("WCHexExplorer"))
{
key0.SetValue("", "用羽云十六进制浏览器打开");
key0.SetValue("Icon", app);
using (var key1 = key0.CreateSubKey("command"))
{
key1.SetValue("", appp);
}
}
}
}
else
{
using (var key = Registry.ClassesRoot.OpenSubKey(@"*\shell", true))
{
key.DeleteSubKeyTree("WCHexExplorer");
}
}
}
}
}