320 lines
9.9 KiB
C#
320 lines
9.9 KiB
C#
//
|
|
// DocumentPropertiesDialogV2.cs
|
|
//
|
|
// Author:
|
|
// Mike Becker <alcexhim@gmail.com>
|
|
//
|
|
// Copyright (c) 2019 Mike Becker
|
|
//
|
|
// This program is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
using System;
|
|
using MBS.Framework.UserInterface.Controls;
|
|
using MBS.Framework.UserInterface;
|
|
using MBS.Framework.Drawing;
|
|
using MBS.Framework.UserInterface.Layouts;
|
|
using MBS.Framework.UserInterface.Controls.FileBrowser;
|
|
using MBS.Framework.UserInterface.Dialogs;
|
|
using UniversalEditor.UserInterface.Controls;
|
|
using MBS.Framework;
|
|
using MBS.Framework.Settings;
|
|
|
|
namespace UniversalEditor.UserInterface.Dialogs
|
|
{
|
|
public class DocumentPropertiesDialogV2 : Dialog
|
|
{
|
|
public DocumentPropertiesDialogV2 ()
|
|
{
|
|
this.InitializeComponent ();
|
|
this.Buttons [0].Click += cmdOK_Click;
|
|
}
|
|
|
|
protected override void OnCreating (EventArgs e)
|
|
{
|
|
base.OnCreating (e);
|
|
this.Buttons [0].ResponseValue = (int)DialogResult.OK;
|
|
this.Buttons [1].ResponseValue = (int)DialogResult.Cancel;
|
|
|
|
switch (Mode)
|
|
{
|
|
case DocumentPropertiesDialogMode.Open:
|
|
{
|
|
this.Text = "Open Document";
|
|
this.Buttons [0].StockType = StockType.Open;
|
|
break;
|
|
}
|
|
case DocumentPropertiesDialogMode.Save:
|
|
{
|
|
this.Text = "Save Document";
|
|
this.Buttons [0].StockType = StockType.Save;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void cmdOK_Click (object sender, EventArgs e)
|
|
{
|
|
TabPage pnl = sidebar.SelectedTab;
|
|
if (pnl == null) return;
|
|
|
|
Container ct = (pnl as Container);
|
|
|
|
AccessorReference accref = pnl.GetExtraData<AccessorReference> ("ar");
|
|
CustomOptionCompatSettingsProvider coll = new CustomOptionCompatSettingsProvider();
|
|
foreach (Control ctl in ct.Controls) {
|
|
Setting eo = (ctl.GetExtraData ("eo") as Setting);
|
|
if (eo == null)
|
|
continue;
|
|
|
|
if (ctl is CheckBox) {
|
|
CheckBox itm = (ctl as CheckBox);
|
|
(eo as BooleanSetting).SetValue<bool>(itm.Checked);
|
|
}
|
|
/*
|
|
else if (ctl is ComboBox)
|
|
{
|
|
ChoiceSetting.ChoiceSettingValue choice = ((ctl as ComboBox).SelectedItem as ChoiceSetting.ChoiceSettingValue);
|
|
(eo as ChoiceSetting).Value = choice;
|
|
}
|
|
*/
|
|
else if (ctl is TextBox) {
|
|
TextBox itm = (ctl as TextBox);
|
|
if (eo is TextSetting) {
|
|
(eo as TextSetting).SetValue<string>(itm.Text);
|
|
}
|
|
} else if (ctl is UniversalEditorFileBrowserControl) {
|
|
UniversalEditorFileBrowserControl fbc = (ctl as UniversalEditorFileBrowserControl);
|
|
if (eo is FileSetting)
|
|
{
|
|
(eo as FileSetting).SetValue<string>(fbc.SelectedFileNames[0]);
|
|
}
|
|
}
|
|
|
|
coll.SettingsGroups[0].Settings.Add(eo);
|
|
}
|
|
|
|
Accessor acc = accref.Create ();
|
|
((EditorApplication)Application.Instance).ApplyCustomOptions(acc, coll);
|
|
|
|
Accessor = acc;
|
|
|
|
this.DialogResult = DialogResult.OK;
|
|
this.Close ();
|
|
}
|
|
|
|
public DocumentPropertiesDialogMode Mode { get; set; } = DocumentPropertiesDialogMode.Open;
|
|
|
|
private ObjectModel mvarInitialObjectModel = null;
|
|
|
|
private ObjectModel mvarObjectModel = null;
|
|
public ObjectModel ObjectModel { get { return mvarObjectModel; } set { mvarObjectModel = value; mvarInitialObjectModel = value; } }
|
|
|
|
private DataFormat mvarInitialDataFormat = null;
|
|
|
|
private DataFormat mvarDataFormat = null;
|
|
public DataFormat DataFormat { get { return mvarDataFormat; } set { mvarDataFormat = value; mvarInitialDataFormat = value; } }
|
|
|
|
private Accessor mvarInitialAccesor = null;
|
|
|
|
private Accessor mvarAccessor = null;
|
|
public Accessor Accessor { get { return mvarAccessor; } set { mvarAccessor = value; mvarInitialAccesor = value; } }
|
|
|
|
private TabContainer sidebar = null;
|
|
|
|
private void fbc_ItemActivated (object sender, EventArgs e)
|
|
{
|
|
cmdOK_Click (sender, e);
|
|
}
|
|
|
|
private void InitializeComponent()
|
|
{
|
|
sidebar = new TabContainer();
|
|
sidebar.TabStyle = TabContainerTabStyle.Sidebar;
|
|
this.Layout = new BoxLayout (Orientation.Vertical);
|
|
|
|
AccessorReference[] accessors = UniversalEditor.Common.Reflection.GetAvailableAccessors ();
|
|
foreach (AccessorReference acc in accessors) {
|
|
if (String.IsNullOrEmpty (acc.Title)) {
|
|
// the accessor doesn't have a title - interpret this to
|
|
// mean we shouldn't be showing it in the UI
|
|
continue;
|
|
}
|
|
TabPage ct = new TabPage();
|
|
ct.SetExtraData<AccessorReference> ("ar", acc);
|
|
|
|
ct.Layout = new GridLayout ();
|
|
ct.Name = acc.AccessorType.FullName;
|
|
ct.Text = acc.Title;
|
|
|
|
SettingsProvider coll = null;
|
|
switch (Mode)
|
|
{
|
|
case DocumentPropertiesDialogMode.Open:
|
|
{
|
|
coll = acc.ImportOptions;
|
|
break;
|
|
}
|
|
case DocumentPropertiesDialogMode.Save:
|
|
{
|
|
coll = acc.ExportOptions;
|
|
break;
|
|
}
|
|
}
|
|
|
|
int iRow = 0;
|
|
foreach (SettingsGroup sg in coll.SettingsGroups)
|
|
{
|
|
foreach (Setting eo in sg.Settings)
|
|
{
|
|
// do not render the CustomOption if it's supposed to be invisible
|
|
if (!eo.Visible) continue;
|
|
|
|
if (!(eo is BooleanSetting) && (!(eo is FileSetting)))
|
|
{
|
|
Label lbl = new Label();
|
|
// lbl.FlatStyle = FlatStyle.System;
|
|
// lbl.AutoSize = true;
|
|
// lbl.Dock = DockStyle.None;
|
|
// lbl.Anchor = AnchorStyles.Left;
|
|
lbl.UseMnemonic = true;
|
|
lbl.Text = eo.Title; // .Replace("_", "&"); // only for WinForms
|
|
ct.Controls.Add(lbl, new GridLayout.Constraints(iRow, 0, 1, 1, ExpandMode.None));
|
|
}
|
|
|
|
if (eo is ChoiceSetting)
|
|
{
|
|
ChoiceSetting option = (eo as ChoiceSetting);
|
|
|
|
ComboBox cbo = new ComboBox();
|
|
cbo.Model = new DefaultTreeModel(new Type[] { typeof(string) });
|
|
cbo.Renderers.Add(new CellRendererText(cbo.Model.Columns[0]));
|
|
|
|
// if (option.RequireChoice) cbo.DropDownStyle = ComboBoxStyle.DropDownList;
|
|
|
|
foreach (ChoiceSetting.ChoiceSettingValue choice in option.ValidValues)
|
|
{
|
|
TreeModelRow row = new TreeModelRow(new TreeModelRowColumn[]
|
|
{
|
|
new TreeModelRowColumn((cbo.Model as DefaultTreeModel).Columns[0], choice.Title)
|
|
});
|
|
row.SetExtraData<ChoiceSetting.ChoiceSettingValue>("choice", choice);
|
|
(cbo.Model as DefaultTreeModel).Rows.Add(row);
|
|
}
|
|
|
|
ct.Controls.Add(cbo, new GridLayout.Constraints(iRow, 1, 1, 1, ExpandMode.Horizontal));
|
|
}
|
|
else if (eo is RangeSetting)
|
|
{
|
|
RangeSetting option = (eo as RangeSetting);
|
|
|
|
TextBox txt = new TextBox(); // NumericUpDown txt = new NumericUpDown();
|
|
txt.SetExtraData("eo", option);
|
|
if (option.MaximumValue.HasValue)
|
|
{
|
|
// txt.Maximum = option.MaximumValue.Value;
|
|
}
|
|
else
|
|
{
|
|
// txt.Maximum = Decimal.MaxValue;
|
|
}
|
|
if (option.MinimumValue.HasValue)
|
|
{
|
|
// txt.Minimum = option.MinimumValue.Value;
|
|
}
|
|
else
|
|
{
|
|
// txt.Minimum = Decimal.MinValue;
|
|
}
|
|
// txt.Value = option.DefaultValue;
|
|
|
|
ct.Controls.Add(txt, new GridLayout.Constraints(iRow, 1, 1, 1, ExpandMode.Horizontal));
|
|
}
|
|
else if (eo is TextSetting)
|
|
{
|
|
TextSetting option = (eo as TextSetting);
|
|
|
|
TextBox txt = new TextBox();
|
|
txt.SetExtraData("eo", option);
|
|
txt.Text = (string)option.DefaultValue;
|
|
if (option.MaximumLength.HasValue) txt.MaxLength = option.MaximumLength.Value;
|
|
ct.Controls.Add(txt, new GridLayout.Constraints(iRow, 1, 1, 1, ExpandMode.Horizontal));
|
|
}
|
|
else if (eo is BooleanSetting)
|
|
{
|
|
BooleanSetting option = (eo as BooleanSetting);
|
|
|
|
CheckBox chk = new CheckBox();
|
|
chk.SetExtraData("eo", option);
|
|
chk.Text = option.Title;
|
|
|
|
ct.Controls.Add(chk, new GridLayout.Constraints(iRow, 0, 1, 2, ExpandMode.Horizontal));
|
|
}
|
|
else if (eo is FileSetting)
|
|
{
|
|
FileSetting option = (eo as FileSetting);
|
|
|
|
UniversalEditorFileBrowserControl fbc = new UniversalEditorFileBrowserControl();
|
|
fbc.SetExtraData("eo", option);
|
|
fbc.ItemActivated += fbc_ItemActivated;
|
|
// TextBox cmd = new TextBox();
|
|
// AwesomeControls.FileTextBox.FileTextBoxControl cmd = new AwesomeControls.FileTextBox.FileTextBoxControl();
|
|
// cmd.Click += cmdFileBrowse_Click;
|
|
// cmd.Dock = DockStyle.Fill;
|
|
fbc.SetExtraData<Setting>("eo", eo);
|
|
switch (option.Mode)
|
|
{
|
|
case FileSettingMode.CreateFolder: fbc.Mode = FileBrowserMode.CreateFolder; break;
|
|
case FileSettingMode.Open: fbc.Mode = FileBrowserMode.Open; break;
|
|
case FileSettingMode.Save: fbc.Mode = FileBrowserMode.Save; break;
|
|
case FileSettingMode.SelectFolder: fbc.Mode = FileBrowserMode.SelectFolder; break;
|
|
}
|
|
ct.Controls.Add(fbc, new GridLayout.Constraints(iRow, 0, 1, 2, ExpandMode.Both));
|
|
}
|
|
|
|
// tbl.ColumnCount = 2;
|
|
// tbl.RowCount = CustomOptionControls.Count;
|
|
iRow++;
|
|
}
|
|
}
|
|
|
|
sidebar.TabPages.Add(ct);
|
|
}
|
|
this.Controls.Add (sidebar, new BoxLayout.Constraints(true, true));
|
|
|
|
this.Buttons.Add (new Button (StockType.OK));
|
|
this.Buttons [0].ResponseValue = (int)DialogResult.OK;
|
|
this.Buttons.Add (new Button (StockType.Cancel));
|
|
this.Buttons [1].ResponseValue = (int)DialogResult.Cancel;
|
|
|
|
switch (Mode)
|
|
{
|
|
case DocumentPropertiesDialogMode.Open:
|
|
{
|
|
this.Text = "Open Document";
|
|
this.Buttons [0].StockType = StockType.Open;
|
|
break;
|
|
}
|
|
case DocumentPropertiesDialogMode.Save:
|
|
{
|
|
this.Text = "Save Document";
|
|
this.Buttons [0].StockType = StockType.Save;
|
|
break;
|
|
}
|
|
}
|
|
|
|
MinimumSize = new Dimension2D (300, 200);
|
|
Size = new Dimension2D (600, 400);
|
|
}
|
|
}
|
|
}
|