Added GreenshotComboBox, this binds to a ini configuration (enum) and fills the values depending on the type of the enum, including translations!

git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@1769 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4
This commit is contained in:
RKrom 2012-04-11 09:17:06 +00:00
commit 4e13e13f47
5 changed files with 129 additions and 18 deletions

View file

@ -57,7 +57,7 @@ namespace Greenshot {
this.textbox_screenshotname = new GreenshotPlugin.Controls.GreenshotTextBox(); this.textbox_screenshotname = new GreenshotPlugin.Controls.GreenshotTextBox();
this.label_language = new GreenshotPlugin.Controls.GreenshotLabel(); this.label_language = new GreenshotPlugin.Controls.GreenshotLabel();
this.combobox_language = new System.Windows.Forms.ComboBox(); this.combobox_language = new System.Windows.Forms.ComboBox();
this.combobox_primaryimageformat = new System.Windows.Forms.ComboBox(); this.combobox_primaryimageformat = new GreenshotPlugin.Controls.GreenshotComboBox();
this.label_primaryimageformat = new GreenshotPlugin.Controls.GreenshotLabel(); this.label_primaryimageformat = new GreenshotPlugin.Controls.GreenshotLabel();
this.groupbox_preferredfilesettings = new GreenshotPlugin.Controls.GreenshotGroupBox(); this.groupbox_preferredfilesettings = new GreenshotPlugin.Controls.GreenshotGroupBox();
this.btnPatternHelp = new System.Windows.Forms.Button(); this.btnPatternHelp = new System.Windows.Forms.Button();
@ -243,6 +243,7 @@ namespace Greenshot {
this.combobox_primaryimageformat.FormattingEnabled = true; this.combobox_primaryimageformat.FormattingEnabled = true;
this.combobox_primaryimageformat.Location = new System.Drawing.Point(138, 64); this.combobox_primaryimageformat.Location = new System.Drawing.Point(138, 64);
this.combobox_primaryimageformat.Name = "combobox_primaryimageformat"; this.combobox_primaryimageformat.Name = "combobox_primaryimageformat";
this.combobox_primaryimageformat.PropertyName = "OutputFileFormat";
this.combobox_primaryimageformat.Size = new System.Drawing.Size(268, 21); this.combobox_primaryimageformat.Size = new System.Drawing.Size(268, 21);
this.combobox_primaryimageformat.TabIndex = 4; this.combobox_primaryimageformat.TabIndex = 4;
// //
@ -313,7 +314,6 @@ namespace Greenshot {
this.checkbox_autostartshortcut.LanguageKey = "settings_autostartshortcut"; this.checkbox_autostartshortcut.LanguageKey = "settings_autostartshortcut";
this.checkbox_autostartshortcut.Location = new System.Drawing.Point(8, 39); this.checkbox_autostartshortcut.Location = new System.Drawing.Point(8, 39);
this.checkbox_autostartshortcut.Name = "checkbox_autostartshortcut"; this.checkbox_autostartshortcut.Name = "checkbox_autostartshortcut";
this.checkbox_autostartshortcut.PropertyName = null;
this.checkbox_autostartshortcut.Size = new System.Drawing.Size(397, 25); this.checkbox_autostartshortcut.Size = new System.Drawing.Size(397, 25);
this.checkbox_autostartshortcut.TabIndex = 15; this.checkbox_autostartshortcut.TabIndex = 15;
this.checkbox_autostartshortcut.Text = "Launch Greenshot on startup"; this.checkbox_autostartshortcut.Text = "Launch Greenshot on startup";
@ -955,7 +955,6 @@ namespace Greenshot {
this.groupbox_plugins.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; this.groupbox_plugins.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.groupbox_plugins.Controls.Add(this.listview_plugins); this.groupbox_plugins.Controls.Add(this.listview_plugins);
this.groupbox_plugins.Controls.Add(this.button_pluginconfigure); this.groupbox_plugins.Controls.Add(this.button_pluginconfigure);
this.groupbox_plugins.LanguageKey = null;
this.groupbox_plugins.Location = new System.Drawing.Point(0, 0); this.groupbox_plugins.Location = new System.Drawing.Point(0, 0);
this.groupbox_plugins.Name = "groupbox_plugins"; this.groupbox_plugins.Name = "groupbox_plugins";
this.groupbox_plugins.Size = new System.Drawing.Size(423, 314); this.groupbox_plugins.Size = new System.Drawing.Size(423, 314);
@ -992,7 +991,6 @@ namespace Greenshot {
// tab_expert // tab_expert
// //
this.tab_expert.Controls.Add(this.groupbox_expert); this.tab_expert.Controls.Add(this.groupbox_expert);
this.tab_expert.LanguageKey = null;
this.tab_expert.Location = new System.Drawing.Point(4, 22); this.tab_expert.Location = new System.Drawing.Point(4, 22);
this.tab_expert.Name = "tab_expert"; this.tab_expert.Name = "tab_expert";
this.tab_expert.Size = new System.Drawing.Size(423, 320); this.tab_expert.Size = new System.Drawing.Size(423, 320);
@ -1006,7 +1004,6 @@ namespace Greenshot {
this.groupbox_expert.Controls.Add(this.label_clipboardformats); this.groupbox_expert.Controls.Add(this.label_clipboardformats);
this.groupbox_expert.Controls.Add(this.checkbox_enableexpert); this.groupbox_expert.Controls.Add(this.checkbox_enableexpert);
this.groupbox_expert.Controls.Add(this.listView1); this.groupbox_expert.Controls.Add(this.listView1);
this.groupbox_expert.LanguageKey = null;
this.groupbox_expert.Location = new System.Drawing.Point(5, 5); this.groupbox_expert.Location = new System.Drawing.Point(5, 5);
this.groupbox_expert.Name = "groupbox_expert"; this.groupbox_expert.Name = "groupbox_expert";
this.groupbox_expert.Size = new System.Drawing.Size(412, 311); this.groupbox_expert.Size = new System.Drawing.Size(412, 311);
@ -1028,7 +1025,6 @@ namespace Greenshot {
// label_clipboardformats // label_clipboardformats
// //
this.label_clipboardformats.AutoSize = true; this.label_clipboardformats.AutoSize = true;
this.label_clipboardformats.LanguageKey = null;
this.label_clipboardformats.Location = new System.Drawing.Point(7, 45); this.label_clipboardformats.Location = new System.Drawing.Point(7, 45);
this.label_clipboardformats.Name = "label_clipboardformats"; this.label_clipboardformats.Name = "label_clipboardformats";
this.label_clipboardformats.Size = new System.Drawing.Size(88, 13); this.label_clipboardformats.Size = new System.Drawing.Size(88, 13);
@ -1037,10 +1033,8 @@ namespace Greenshot {
// //
// checkbox_enableexpert // checkbox_enableexpert
// //
this.checkbox_enableexpert.LanguageKey = null;
this.checkbox_enableexpert.Location = new System.Drawing.Point(6, 14); this.checkbox_enableexpert.Location = new System.Drawing.Point(6, 14);
this.checkbox_enableexpert.Name = "checkbox_enableexpert"; this.checkbox_enableexpert.Name = "checkbox_enableexpert";
this.checkbox_enableexpert.PropertyName = null;
this.checkbox_enableexpert.Size = new System.Drawing.Size(394, 24); this.checkbox_enableexpert.Size = new System.Drawing.Size(394, 24);
this.checkbox_enableexpert.TabIndex = 19; this.checkbox_enableexpert.TabIndex = 19;
this.checkbox_enableexpert.Text = "I know what I am doing!"; this.checkbox_enableexpert.Text = "I know what I am doing!";
@ -1178,7 +1172,7 @@ namespace Greenshot {
private GreenshotPlugin.Controls.GreenshotGroupBox groupbox_preferredfilesettings; private GreenshotPlugin.Controls.GreenshotGroupBox groupbox_preferredfilesettings;
private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_playsound; private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_playsound;
private GreenshotPlugin.Controls.GreenshotLabel label_primaryimageformat; private GreenshotPlugin.Controls.GreenshotLabel label_primaryimageformat;
private System.Windows.Forms.ComboBox combobox_primaryimageformat; private GreenshotPlugin.Controls.GreenshotComboBox combobox_primaryimageformat;
private System.Windows.Forms.ComboBox combobox_language; private System.Windows.Forms.ComboBox combobox_language;
private GreenshotPlugin.Controls.GreenshotLabel label_language; private GreenshotPlugin.Controls.GreenshotLabel label_language;
private GreenshotPlugin.Controls.GreenshotTextBox textbox_screenshotname; private GreenshotPlugin.Controls.GreenshotTextBox textbox_screenshotname;

View file

@ -66,7 +66,6 @@ namespace Greenshot {
} }
DisplayPluginTab(); DisplayPluginTab();
this.combobox_primaryimageformat.Items.AddRange(new object[] { OutputFormat.bmp, OutputFormat.gif, OutputFormat.jpg, OutputFormat.png, OutputFormat.tiff });
UpdateUI(); UpdateUI();
DisplaySettings(); DisplaySettings();
CheckSettings(); CheckSettings();
@ -260,7 +259,6 @@ namespace Greenshot {
combobox_language.SelectedValue = language.CurrentLanguage; combobox_language.SelectedValue = language.CurrentLanguage;
} }
textbox_storagelocation.Text = FilenameHelper.FillVariables(coreConfiguration.OutputFilePath, false); textbox_storagelocation.Text = FilenameHelper.FillVariables(coreConfiguration.OutputFilePath, false);
combobox_primaryimageformat.SelectedItem = coreConfiguration.OutputFileFormat;
SetWindowCaptureMode(coreConfiguration.WindowCaptureMode); SetWindowCaptureMode(coreConfiguration.WindowCaptureMode);
@ -297,12 +295,6 @@ namespace Greenshot {
if (!FilenameHelper.FillVariables(coreConfiguration.OutputFilePath, false).Equals(textbox_storagelocation.Text)) { if (!FilenameHelper.FillVariables(coreConfiguration.OutputFilePath, false).Equals(textbox_storagelocation.Text)) {
coreConfiguration.OutputFilePath = textbox_storagelocation.Text; coreConfiguration.OutputFilePath = textbox_storagelocation.Text;
} }
if (combobox_primaryimageformat.SelectedItem != null) {
coreConfiguration.OutputFileFormat = (OutputFormat)combobox_primaryimageformat.SelectedItem;
} else {
coreConfiguration.OutputFileFormat = OutputFormat.png;
}
coreConfiguration.OutputFileJpegQuality = trackBarJpegQuality.Value; coreConfiguration.OutputFileJpegQuality = trackBarJpegQuality.Value;
List<string> destinations = new List<string>(); List<string> destinations = new List<string>();

View file

@ -0,0 +1,103 @@
/*
* Greenshot - a free and open source screenshot tool
* Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom
*
* For more information see: http://getgreenshot.org/
* The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/
*
* 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 1 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 System.ComponentModel;
using System.Windows.Forms;
using GreenshotPlugin.Core;
namespace GreenshotPlugin.Controls {
public class GreenshotComboBox : ComboBox, IGreenshotConfigBindable {
private string sectionName = "Core";
[Category("Greenshot"), DefaultValue("Core"), Description("Specifies the Ini-Section to map this control with.")]
public string SectionName {
get {
return sectionName;
}
set {
sectionName = value;
}
}
[Category("Greenshot"), DefaultValue(null), Description("Specifies the property name to map the configuration.")]
public string PropertyName {
get;
set;
}
/// <summary>
/// This is a method to popululate the ComboBox
/// with the items from the enumeration
/// </summary>
/// <param name="enumType">TEnum to populate with</param>
public void Populate(ILanguage language, Type enumType, object currentValue) {
var availableValues = Enum.GetValues(enumType);
this.Items.Clear();
string enumTypeName = enumType.Name;
foreach (var enumValue in availableValues) {
string enumKey = enumTypeName + "." + enumValue.ToString();
if (language.hasKey(enumKey)) {
string translation = language.GetString(enumKey);
this.Items.Add(translation);
} else {
this.Items.Add(enumValue.ToString());
}
}
if (currentValue != null) {
string selectedEnumKey = enumTypeName + "." + currentValue.ToString();
if (language.hasKey(selectedEnumKey)) {
this.SelectedItem = language.GetString(selectedEnumKey);
} else {
this.SelectedItem = currentValue.ToString();
}
}
}
/// <summary>
/// Get the selected enum value from the combobox, uses generics
/// </summary>
/// <param name="comboBox">Combobox to get the value from</param>
/// <returns>The generics value of the combobox</returns>
public object GetSelectedEnum(ILanguage language, Type enumType) {
string enumTypeName = enumType.Name;
string selectedValue = this.SelectedItem as string;
var availableValues = Enum.GetValues(enumType);
object returnValue = null;
try {
returnValue = Enum.Parse(enumType, selectedValue);
return returnValue;
} catch (Exception) {
}
foreach (Enum enumValue in availableValues) {
string enumKey = enumTypeName + "." + enumValue.ToString();
if (language.hasKey(enumKey)) {
string translation = language.GetString(enumTypeName + "." + enumValue.ToString());
if (translation.Equals(selectedValue)) {
return enumValue;
}
}
}
return returnValue;
}
}
}

View file

@ -52,7 +52,7 @@ namespace GreenshotPlugin.Controls {
if (!string.IsNullOrEmpty(LanguageKey)) { if (!string.IsNullOrEmpty(LanguageKey)) {
this.Text = language.GetString(LanguageKey); this.Text = language.GetString(LanguageKey);
} }
// Reset the text values for all GreenshotControls
foreach (FieldInfo field in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) { foreach (FieldInfo field in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)) {
if (!field.FieldType.IsSubclassOf(typeof(Control))) { if (!field.FieldType.IsSubclassOf(typeof(Control))) {
continue; continue;
@ -71,6 +71,21 @@ namespace GreenshotPlugin.Controls {
LOG.WarnFormat("Greenshot control without language key: {0}", field.Name); LOG.WarnFormat("Greenshot control without language key: {0}", field.Name);
} }
} }
// Repopulate the combox boxes
if (typeof(IGreenshotConfigBindable).IsAssignableFrom(field.FieldType)) {
if (typeof(GreenshotComboBox).IsAssignableFrom(field.FieldType)) {
IGreenshotConfigBindable configBindable = controlObject as IGreenshotConfigBindable;
if (!string.IsNullOrEmpty(configBindable.SectionName) && !string.IsNullOrEmpty(configBindable.PropertyName)) {
IniSection section = IniConfig.GetIniSection(configBindable.SectionName);
if (section != null) {
GreenshotComboBox comboxBox = controlObject as GreenshotComboBox;
// Only update the language, so get the actual value and than repopulate
object currentValue = comboxBox.GetSelectedEnum(language, section.Values[configBindable.PropertyName].ValueType);
comboxBox.Populate(language, section.Values[configBindable.PropertyName].ValueType, currentValue);
}
}
}
}
} }
} }
@ -99,6 +114,9 @@ namespace GreenshotPlugin.Controls {
} else if (typeof(TextBox).IsAssignableFrom(field.FieldType)) { } else if (typeof(TextBox).IsAssignableFrom(field.FieldType)) {
TextBox textBox = controlObject as TextBox; TextBox textBox = controlObject as TextBox;
textBox.Text = (string)section.Values[configBindable.PropertyName].Value; textBox.Text = (string)section.Values[configBindable.PropertyName].Value;
} else if (typeof(GreenshotComboBox).IsAssignableFrom(field.FieldType)) {
GreenshotComboBox comboxBox = controlObject as GreenshotComboBox;
comboxBox.Populate(language, section.Values[configBindable.PropertyName].ValueType, (Enum)section.Values[configBindable.PropertyName].Value);
} }
} }
} }
@ -136,6 +154,9 @@ namespace GreenshotPlugin.Controls {
TextBox textBox = controlObject as TextBox; TextBox textBox = controlObject as TextBox;
section.Values[configBindable.PropertyName].Value = textBox.Text; section.Values[configBindable.PropertyName].Value = textBox.Text;
iniDirty = true; iniDirty = true;
} else if (typeof(GreenshotComboBox).IsAssignableFrom(field.FieldType)) {
GreenshotComboBox comboxBox = controlObject as GreenshotComboBox;
section.Values[configBindable.PropertyName].Value = comboxBox.GetSelectedEnum(language, section.Values[configBindable.PropertyName].ValueType);
} }
} }
} }

View file

@ -177,6 +177,7 @@
</Compile> </Compile>
<Compile Include="Controls\GreenshotButton.cs" /> <Compile Include="Controls\GreenshotButton.cs" />
<Compile Include="Controls\GreenshotCheckBox.cs" /> <Compile Include="Controls\GreenshotCheckBox.cs" />
<Compile Include="Controls\GreenshotComboBox.cs" />
<Compile Include="Controls\GreenshotForm.cs" /> <Compile Include="Controls\GreenshotForm.cs" />
<Compile Include="Controls\GreenshotGroupBox.cs" /> <Compile Include="Controls\GreenshotGroupBox.cs" />
<Compile Include="Controls\GreenshotLabel.cs" /> <Compile Include="Controls\GreenshotLabel.cs" />