[MonoDevelop] Implemented Configurable Key Bindings

Balaji Rao balajirrao at gmail.com
Wed Jul 11 12:47:32 EDT 2007


On Fri, Jul 06, 2007 at 01:06:44PM +0200, Lluis Sanchez wrote:
> Hey, it looks like a good start ;)
> The only comment I can make now is that you should use Stetic instead of
> Glade for new windows.
> 
> Lluis.
> 
Hello, included as attachment is a patch whch implements conf key
bindings. I have used stetic for it. and now its almost stable. I
have fixed some bugs.

One question is that, should commands, which by default dont have a
shortcut, be allowed be assigned a shortcut?

Suggestions are welcome.

Regards,
Balaji Rao

> El dv 06 de 07 del 2007 a les 15:53 +0530, en/na Balaji Rao va escriure:
> > Hello ppl,
> > 
> > I have almost implemented Configurable Key Bindings with a Option Panel.
> > I have not tested it extensively. I just hacked this up quickly. 
> > 
> > I will make it perfect soon after getting your comments on this. 
> > 
> > Things i plan to include are,
> > 
> > * Configuration Profiles for some popular IDEs (eclipse, netbeans)
> > * Prevent conflicting configuiration
> > 
> > Any suggestions are welcome..
> > 
> > Regards,
> > 
> > Balaji Rao
> > _______________________________________________
> > Monodevelop-list mailing list
> > Monodevelop-list at lists.ximian.com
> > http://lists.ximian.com/mailman/listinfo/monodevelop-list
> 
-------------- next part --------------
Index: Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.OptionPanels/KeysBindingPanel.cs
===================================================================
--- Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.OptionPanels/KeysBindingPanel.cs	(revision 0)
+++ Core/src/MonoDevelop.Ide/MonoDevelop.Ide.Gui.OptionPanels/KeysBindingPanel.cs	(revision 0)
@@ -0,0 +1,215 @@
+
+
+using System;
+using System.Collections;
+
+using MonoDevelop.Core.Gui.Dialogs;
+using MonoDevelop.Components.Commands;
+using Mono.Addins;
+using Gtk;
+
+namespace MonoDevelop.Ide.Gui.OptionPanels
+{	
+	public partial class KeysBindingPanel : Gtk.Bin, IDialogPanel
+	{
+		ListStore keysStore; 
+		Hashtable commands = new Hashtable();
+		Command selectedCommand;
+		
+		/* Indicates whether the text in the accelEntry is a complete shortcut key */
+		private bool accelComplete=false; 		
+		
+		
+		bool ctrlActive=false;
+		bool altActive=false;
+		bool shiftActive=false;
+
+		
+		/* Indicates the current position of the iter in the keystore. Used while editing the 
+		 accelEntry to reflect the changes in the treeview*/
+		TreeIter editIter;
+		
+		public KeysBindingPanel()
+		{
+			this.Build();
+		}
+		public bool StorePanelContents()
+		{
+			return true;
+		}
+		
+		public void LoadPanelContents()			
+		{											
+			keysStore = new ListStore(typeof(string),typeof(string));
+			keysTreeView.Model = keysStore;			
+			keysTreeView.AppendColumn ("Command",new CellRendererText(),"text",0);
+			keysTreeView.AppendColumn ("Shortcut",new CellRendererText(),"text",1);
+			keysTreeView.Selection.Changed += new EventHandler(OnKeysTreeViewSelectionChange);
+			
+			accelEntry.KeyPressEvent += new KeyPressEventHandler(OnAccelEntryKeyPress);
+			accelEntry.KeyReleaseEvent += new KeyReleaseEventHandler(OnAccelEntryKeyRelease);
+			updateButton.Clicked += new EventHandler(OnUpdateButtonClick);
+			// Populate the TreeView
+			object[] cmds =
+				AddinManager.GetExtensionObjects("/SharpDevelop/Commands");
+			foreach(object c in cmds) {
+				if (c is Command && ((Command)c).AccelKey !=null ) {
+					Command cmd = c as Command;
+					string label = cmd.Text.Replace("_",String.Empty);
+					string accel=String.Empty;
+					if (((Command)c).AccelKey !=null )
+						accel= cmd.AccelKey.Replace('|','+');					
+					commands.Add(label,cmd);
+					keysStore.AppendValues(label,accel);						
+				}
+			}				
+		}
+		public void OnKeysTreeViewSelectionChange(object sender,EventArgs e) {				
+			TreeSelection sel = sender as TreeSelection;
+			if (sender != null)
+			{
+				TreeIter iter;
+				TreeModel model = (TreeModel)keysStore;
+				accelComplete = false;
+				if (sel.GetSelected (out model, out iter)) {										
+					accelEntry.Text  = (string)model.GetValue (iter, 1);		
+					string label = (string)model.GetValue (iter, 0);
+					selectedCommand = (Command)commands [label];
+					accelComplete = true;
+					editIter = iter;
+				}				
+			}
+		}
+		[GLib.ConnectBefore]
+		public void OnAccelEntryKeyPress(object sender,KeyPressEventArgs e) {
+			Gdk.EventKey key = e.Event;
+			Gdk.Key k = key.Key;
+			if (accelComplete) {					
+				accelEntry.Text = "";
+				altActive=false;
+				ctrlActive=false;
+				shiftActive=false;
+				accelComplete=false;
+				if (k.Equals(Gdk.Key.BackSpace)) {
+					e.RetVal=true;
+					return;
+				}
+			}
+			
+			if (k.Equals(Gdk.Key.Control_L) || k.Equals(Gdk.Key.Control_R)) {										
+				if (!ctrlActive) accelEntry.AppendText("Control+");								
+				accelComplete = false;
+			}	else if (k.Equals(Gdk.Key.Alt_L) || k.Equals(Gdk.Key.Alt_R)) {
+				if (!altActive)  accelEntry.AppendText("Alt+");
+				accelComplete = false;
+			} else if (k.Equals(Gdk.Key.Shift_L) || k.Equals(Gdk.Key.Shift_R)) {
+				if (!shiftActive) accelEntry.AppendText("Shift+");
+				accelComplete = false;
+			} else {
+				if (k.Equals(Gdk.Key.Page_Down)) 
+					accelEntry.AppendText("Page_Down");
+				else
+					accelEntry.AppendText(k.ToString());				
+				accelComplete=true;
+			}			
+			e.RetVal=true;			
+		}
+		public void OnAccelEntryKeyRelease(object sender,KeyReleaseEventArgs e) {
+			if (accelComplete == false) {
+				accelEntry.Text="";
+			}
+		}
+		public void OnUpdateButtonClick(object sender,EventArgs e) {
+			if (selectedCommand != null) {
+				selectedCommand.AccelKey = accelEntry.Text.Replace('+','|');
+				keysStore.SetValue(editIter,1,accelEntry.Text);
+			}
+		}	
+	
+#region Cut & Paste from abstract option panel
+		bool   wasActivated = false;
+		bool   isFinished   = true;
+		object customizationObject = null;
+		
+		public Widget Control {
+			get {
+				return this;
+			}
+		}
+		
+		public virtual Gtk.Image Icon {
+			get {
+				return null;
+			}
+		}
+		
+		public bool WasActivated {
+			get {
+				return wasActivated;
+			}
+		}
+		
+		public virtual object CustomizationObject {
+			get {
+				return customizationObject;
+			}
+			set {
+				customizationObject = value;
+				OnCustomizationObjectChanged();
+			}
+		}
+		
+		public virtual bool EnableFinish {
+			get {
+				return isFinished;
+			}
+			set {
+				if (isFinished != value) {
+					isFinished = value;
+					OnEnableFinishChanged();
+				}
+			}
+		}
+		
+		public virtual bool ReceiveDialogMessage(DialogMessage message)
+		{
+			try {
+				switch (message) {
+				case DialogMessage.Activated:
+					if (!wasActivated) {
+						LoadPanelContents();
+						wasActivated = true;
+					}
+					break;
+				case DialogMessage.OK:
+					if (wasActivated) {
+						return StorePanelContents();
+					}
+					break;
+				}
+			} catch (Exception ex) {
+				Services.MessageService.ShowError (ex);
+			}
+			
+			return true;
+		}
+		
+		
+		protected virtual void OnEnableFinishChanged()
+		{
+			if (EnableFinishChanged != null) {
+				EnableFinishChanged(this, null);
+			}
+		}
+		protected virtual void OnCustomizationObjectChanged()
+		{
+			if (CustomizationObjectChanged != null) {
+				CustomizationObjectChanged(this, null);
+			}
+		}
+		
+		public event EventHandler CustomizationObjectChanged;
+		public event EventHandler EnableFinishChanged;
+#endregion
+	}		
+}
\ No newline at end of file
Index: Core/src/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml
===================================================================
--- Core/src/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml	(revision 81663)
+++ Core/src/MonoDevelop.Ide/MonoDevelop.Ide.addin.xml	(working copy)
@@ -888,6 +888,9 @@
 			<DialogPanel id = "SelectStyle"
 				         _label = "Visual Style"
 				         class = "MonoDevelop.Ide.Gui.OptionPanels.SelectStylePanel"/>
+			<DialogPanel id = "KeysBinding"
+				         _label = "Key Bindings"
+				         class = "MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel"/>				         
 			<DialogPanel id = "LoadSave"
 			             _label = "Load/Save"
 			             class = "MonoDevelop.Ide.Gui.OptionPanels.LoadSavePanel"/>
Index: Core/src/MonoDevelop.Ide/MonoDevelop.Ide.mdp
===================================================================
--- Core/src/MonoDevelop.Ide/MonoDevelop.Ide.mdp	(revision 81663)
+++ Core/src/MonoDevelop.Ide/MonoDevelop.Ide.mdp	(working copy)
@@ -1,13 +1,13 @@
 <Project name="MonoDevelop.Ide" fileversion="2.0" language="C#" clr-version="Net_2_0" ctype="DotNetProject">
   <Configurations active="Debug">
     <Configuration name="Debug" ctype="DotNetProjectConfiguration">
-      <Output directory="../../../build/AddIns/" assembly="MonoDevelop.Ide" signAssembly="False" />
+      <Output directory="../../../build/AddIns/" assembly="MonoDevelop.Ide" />
       <Build debugmode="True" target="Library" />
       <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
       <CodeGeneration compiler="Csc" warninglevel="4" optimize="False" unsafecodeallowed="False" generateoverflowchecks="True" mainclass="" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
     </Configuration>
     <Configuration name="Release" ctype="DotNetProjectConfiguration">
-      <Output directory="../../../build/AddIns/" assembly="MonoDevelop.Ide" signAssembly="False" />
+      <Output directory="../../../build/AddIns/" assembly="MonoDevelop.Ide" />
       <Build debugmode="False" target="Library" />
       <Execution runwithwarnings="True" consolepause="True" runtime="MsNet" clr-version="Net_2_0" />
       <CodeGeneration compiler="Csc" warninglevel="4" optimize="True" unsafecodeallowed="False" generateoverflowchecks="True" mainclass="" generatexmldocumentation="False" ctype="CSharpCompilerParameters" />
@@ -299,6 +299,8 @@
     <File name="./MonoDevelop.Ide.CodeTemplates/EditTemplateDialog.cs" subtype="Code" buildaction="Compile" />
     <File name="./MonoDevelop.Ide.CodeTemplates/CodeTemplatePanel.cs" subtype="Code" buildaction="Compile" />
     <File name="./MonoDevelop.Ide.CodeTemplates/EditTemplateGroupDialog.cs" subtype="Code" buildaction="Compile" />
+    <File name="./MonoDevelop.Ide.Gui.OptionPanels/KeysBindingPanel.cs" subtype="Code" buildaction="Compile" />
+    <File name="./gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Gac" localcopy="False" refto="gecko-sharp, Version=2.0.0.0, Culture=neutral, PublicKeyToken=ccf7d78a55e9f021" />
@@ -313,13 +315,6 @@
     <ProjectReference type="Gac" localcopy="False" refto="Mono.GetOptions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" />
     <ProjectReference type="Gac" localcopy="False" refto="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
     <ProjectReference type="Gac" localcopy="False" refto="glade-sharp, Version=2.4.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Core" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Projects.Gui" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Documentation" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Components" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Dock" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Core.Gui" />
-    <ProjectReference type="Project" localcopy="False" refto="MonoDevelop.Projects" />
     <ProjectReference type="Assembly" localcopy="False" refto="../../../contrib/Mono.Addins.dll" />
     <ProjectReference type="Gac" localcopy="True" refto="gtk-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <ProjectReference type="Gac" localcopy="True" refto="gdk-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
@@ -329,10 +324,18 @@
     <ProjectReference type="Assembly" localcopy="False" refto="../../../contrib/Mono.Addins.Gui.dll" />
     <ProjectReference type="Assembly" localcopy="False" refto="../../../contrib/Mono.Addins.Setup.dll" />
     <ProjectReference type="Gac" localcopy="True" refto="gconf-sharp-peditors, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Gac" localcopy="True" refto="gconf-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Gac" localcopy="True" refto="gnome-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Gac" localcopy="True" refto="gnome-vfs-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
-    <ProjectReference type="Gac" localcopy="True" refto="gtkhtml-sharp, Version=2.8.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Projects.Gui.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Dock.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Projects.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/bin/MonoDevelop.Core.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Components.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Documentation.dll" />
+    <ProjectReference type="Assembly" localcopy="True" refto="../../../build/AddIns/MonoDevelop.Core.Gui.dll" />
+    <ProjectReference type="Gac" localcopy="True" refto="glib-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="gconf-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="gnome-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="gnome-vfs-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
+    <ProjectReference type="Gac" localcopy="True" refto="gtkhtml-sharp, Version=2.10.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
   </References>
   <MonoDevelop.Autotools.MakefileInfo IntegrationEnabled="True" RelativeMakefileName="./Makefile.am" BuildTargetName="" CleanTargetName="" SyncReferences="True" IsAutotoolsProject="True" RelativeConfigureInPath="../../../">
     <ExcludedFiles>
@@ -350,6 +353,7 @@
     <ExportedWidgets>
       <Widget>MonoDevelop.Ide.Gui.Dialogs.CombineEntryFeatureSelector</Widget>
       <Widget>MonoDevelop.Ide.StandardHeaders.StandardHeaderPanel</Widget>
+      <Widget>MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel</Widget>
     </ExportedWidgets>
   </GtkDesignInfo>
   <MonoDevelop.Gettext.TranslationInfo />
Index: Core/src/MonoDevelop.Ide/gtk-gui/objects.xml
===================================================================
--- Core/src/MonoDevelop.Ide/gtk-gui/objects.xml	(revision 81663)
+++ Core/src/MonoDevelop.Ide/gtk-gui/objects.xml	(working copy)
@@ -18,4 +18,17 @@
       </itemgroup>
     </signals>
   </object>
+  <object type="MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel" palette-category="widget" allow-children="false" base-type="Gtk.Bin">
+    <itemgroups>
+      <itemgroup label="KeysBindingPanel Properties">
+        <property name="EnableFinish" />
+      </itemgroup>
+    </itemgroups>
+    <signals>
+      <itemgroup label="KeysBindingPanel Signals">
+        <signal name="CustomizationObjectChanged" />
+        <signal name="EnableFinishChanged" />
+      </itemgroup>
+    </signals>
+  </object>
 </objects>
\ No newline at end of file
Index: Core/src/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.cs
===================================================================
--- Core/src/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.cs	(revision 0)
+++ Core/src/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.cs	(revision 0)
@@ -0,0 +1,118 @@
+// ------------------------------------------------------------------------------
+//  <autogenerated>
+//      This code was generated by a tool.
+//      Mono Runtime Version: 2.0.50727.42
+// 
+//      Changes to this file may cause incorrect behavior and will be lost if 
+//      the code is regenerated.
+//  </autogenerated>
+// ------------------------------------------------------------------------------
+
+namespace MonoDevelop.Ide.Gui.OptionPanels {
+    
+    
+    public partial class KeysBindingPanel {
+        
+        private Gtk.VBox vbox2;
+        
+        private Gtk.ScrolledWindow scrolledwindow1;
+        
+        private Gtk.TreeView keysTreeView;
+        
+        private Gtk.HBox hbox1;
+        
+        private Gtk.Label label1;
+        
+        private Gtk.Entry accelEntry;
+        
+        private Gtk.Button updateButton;
+        
+        protected virtual void Build() {
+            Stetic.Gui.Initialize();
+            // Widget MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel
+            Stetic.BinContainer.Attach(this);
+            this.Name = "MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel";
+            // Container child MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.Gtk.Container+ContainerChild
+            this.vbox2 = new Gtk.VBox();
+            this.vbox2.Name = "vbox2";
+            this.vbox2.Spacing = 6;
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.scrolledwindow1 = new Gtk.ScrolledWindow();
+            this.scrolledwindow1.CanFocus = true;
+            this.scrolledwindow1.Name = "scrolledwindow1";
+            this.scrolledwindow1.VscrollbarPolicy = ((Gtk.PolicyType)(1));
+            this.scrolledwindow1.HscrollbarPolicy = ((Gtk.PolicyType)(1));
+            this.scrolledwindow1.ShadowType = ((Gtk.ShadowType)(1));
+            // Container child scrolledwindow1.Gtk.Container+ContainerChild
+            this.keysTreeView = new Gtk.TreeView();
+            this.keysTreeView.CanFocus = true;
+            this.keysTreeView.Name = "keysTreeView";
+            this.scrolledwindow1.Add(this.keysTreeView);
+            this.vbox2.Add(this.scrolledwindow1);
+            Gtk.Box.BoxChild w2 = ((Gtk.Box.BoxChild)(this.vbox2[this.scrolledwindow1]));
+            w2.Position = 0;
+            // Container child vbox2.Gtk.Box+BoxChild
+            this.hbox1 = new Gtk.HBox();
+            this.hbox1.Name = "hbox1";
+            this.hbox1.Spacing = 6;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.label1 = new Gtk.Label();
+            this.label1.Name = "label1";
+            this.label1.LabelProp = Mono.Unix.Catalog.GetString("Edit Binding");
+            this.hbox1.Add(this.label1);
+            Gtk.Box.BoxChild w3 = ((Gtk.Box.BoxChild)(this.hbox1[this.label1]));
+            w3.Position = 0;
+            w3.Expand = false;
+            w3.Fill = false;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.accelEntry = new Gtk.Entry();
+            this.accelEntry.CanFocus = true;
+            this.accelEntry.Name = "accelEntry";
+            this.accelEntry.IsEditable = true;
+            this.accelEntry.InvisibleChar = '?';
+            this.hbox1.Add(this.accelEntry);
+            Gtk.Box.BoxChild w4 = ((Gtk.Box.BoxChild)(this.hbox1[this.accelEntry]));
+            w4.Position = 1;
+            // Container child hbox1.Gtk.Box+BoxChild
+            this.updateButton = new Gtk.Button();
+            this.updateButton.CanFocus = true;
+            this.updateButton.Name = "updateButton";
+            this.updateButton.UseUnderline = true;
+            // Container child updateButton.Gtk.Container+ContainerChild
+            Gtk.Alignment w5 = new Gtk.Alignment(0.5F, 0.5F, 0F, 0F);
+            w5.Name = "GtkAlignment";
+            // Container child GtkAlignment.Gtk.Container+ContainerChild
+            Gtk.HBox w6 = new Gtk.HBox();
+            w6.Name = "GtkHBox";
+            w6.Spacing = 2;
+            // Container child GtkHBox.Gtk.Container+ContainerChild
+            Gtk.Image w7 = new Gtk.Image();
+            w7.Name = "image15";
+            w7.Pixbuf = Stetic.IconLoader.LoadIcon("gtk-apply", 20);
+            w6.Add(w7);
+            // Container child GtkHBox.Gtk.Container+ContainerChild
+            Gtk.Label w9 = new Gtk.Label();
+            w9.Name = "GtkLabel";
+            w9.LabelProp = Mono.Unix.Catalog.GetString("Apply");
+            w9.UseUnderline = true;
+            w6.Add(w9);
+            w5.Add(w6);
+            this.updateButton.Add(w5);
+            this.hbox1.Add(this.updateButton);
+            Gtk.Box.BoxChild w13 = ((Gtk.Box.BoxChild)(this.hbox1[this.updateButton]));
+            w13.Position = 2;
+            w13.Expand = false;
+            w13.Fill = false;
+            this.vbox2.Add(this.hbox1);
+            Gtk.Box.BoxChild w14 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox1]));
+            w14.Position = 1;
+            w14.Expand = false;
+            w14.Fill = false;
+            this.Add(this.vbox2);
+            if ((this.Child != null)) {
+                this.Child.ShowAll();
+            }
+            this.Show();
+        }
+    }
+}
Index: Core/src/MonoDevelop.Ide/gtk-gui/gui.stetic
===================================================================
--- Core/src/MonoDevelop.Ide/gtk-gui/gui.stetic	(revision 81663)
+++ Core/src/MonoDevelop.Ide/gtk-gui/gui.stetic	(working copy)
@@ -1700,4 +1700,86 @@
       </widget>
     </child>
   </widget>
+  <widget class="Gtk.Bin" id="MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel" design-size="322 296">
+    <property name="MemberName" />
+    <child>
+      <widget class="Gtk.VBox" id="vbox2">
+        <property name="MemberName" />
+        <property name="Spacing">6</property>
+        <child>
+          <widget class="Gtk.ScrolledWindow" id="scrolledwindow1">
+            <property name="MemberName" />
+            <property name="CanFocus">True</property>
+            <property name="VscrollbarPolicy">Automatic</property>
+            <property name="HscrollbarPolicy">Automatic</property>
+            <property name="ShadowType">In</property>
+            <child>
+              <widget class="Gtk.TreeView" id="keysTreeView">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="HeadersClickable">True</property>
+              </widget>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">0</property>
+            <property name="AutoSize">True</property>
+          </packing>
+        </child>
+        <child>
+          <widget class="Gtk.HBox" id="hbox1">
+            <property name="MemberName" />
+            <property name="Spacing">6</property>
+            <child>
+              <widget class="Gtk.Label" id="label1">
+                <property name="MemberName" />
+                <property name="LabelProp" translatable="yes">Edit Binding</property>
+              </widget>
+              <packing>
+                <property name="Position">0</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Entry" id="accelEntry">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="IsEditable">True</property>
+                <property name="InvisibleChar">?</property>
+              </widget>
+              <packing>
+                <property name="Position">1</property>
+                <property name="AutoSize">True</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="Gtk.Button" id="updateButton">
+                <property name="MemberName" />
+                <property name="CanFocus">True</property>
+                <property name="Type">TextAndIcon</property>
+                <property name="Icon">stock:gtk-apply Button</property>
+                <property name="Label" translatable="yes">Apply</property>
+                <property name="UseUnderline">True</property>
+                <property name="IsDialogButton">False</property>
+              </widget>
+              <packing>
+                <property name="Position">2</property>
+                <property name="AutoSize">True</property>
+                <property name="Expand">False</property>
+                <property name="Fill">False</property>
+              </packing>
+            </child>
+          </widget>
+          <packing>
+            <property name="Position">1</property>
+            <property name="AutoSize">True</property>
+            <property name="Expand">False</property>
+            <property name="Fill">False</property>
+          </packing>
+        </child>
+      </widget>
+    </child>
+  </widget>
 </stetic-interface>
\ No newline at end of file
Index: Core/src/MonoDevelop.Ide/Makefile.am
===================================================================
--- Core/src/MonoDevelop.Ide/Makefile.am	(revision 81663)
+++ Core/src/MonoDevelop.Ide/Makefile.am	(working copy)
@@ -6,16 +6,16 @@
 	$(GLADE_SHARP_LIBS) \
 	$(GNOME_SHARP_LIBS) \
 	$(GNOME_VFS_SHARP_LIBS) \
-	$(GTK_SHARP_LIBS) \
 	$(GTKHTML_SHARP_LIBS) \
 	$(MONODOC_LIBS) \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Components.dll \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Core.Gui.dll \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Dock.dll \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Documentation.dll \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Projects.dll \
-	-r:$(top_builddir)/build/AddIns/MonoDevelop.Projects.Gui.dll \
-	-r:$(top_builddir)/build/bin/MonoDevelop.Core.dll \
+	-pkg:gtk-sharp \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Components.dll \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Core.Gui.dll \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Dock.dll \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Documentation.dll \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Projects.dll \
+	-r:$(top_srcdir)/build/AddIns/MonoDevelop.Projects.Gui.dll \
+	-r:$(top_srcdir)/build/bin/MonoDevelop.Core.dll \
 	-r:$(top_srcdir)/contrib/log4net.dll \
 	-r:$(top_srcdir)/contrib/Mono.Addins.dll \
 	-r:$(top_srcdir)/contrib/Mono.Addins.Gui.dll \
@@ -40,6 +40,7 @@
 	gtk-gui/MonoDevelop.Ide.Gui.Dialogs.NewProjectDialog.cs \
 	gtk-gui/MonoDevelop.Ide.Gui.Dialogs.OpenFileInSolutionDialog.cs \
 	gtk-gui/MonoDevelop.Ide.Gui.Dialogs.RenameItemDialog.cs \
+	gtk-gui/MonoDevelop.Ide.Gui.OptionPanels.KeysBindingPanel.cs \
 	gtk-gui/MonoDevelop.Ide.NewHeaderTemplateDialog.cs \
 	gtk-gui/MonoDevelop.Ide.StandardHeaders.StandardHeaderPanel.cs \
 	MonoDevelop.Ide.CodeTemplates/CodeTemplate.cs \
@@ -130,6 +131,7 @@
 	MonoDevelop.Ide.Gui.OptionPanels/BuildPanel.cs \
 	MonoDevelop.Ide.Gui.OptionPanels/CodeGenerationPanel.cs \
 	MonoDevelop.Ide.Gui.OptionPanels/ExternalToolPanel.cs \
+	MonoDevelop.Ide.Gui.OptionPanels/KeysBindingPanel.cs \
 	MonoDevelop.Ide.Gui.OptionPanels/LoadSavePanel.cs \
 	MonoDevelop.Ide.Gui.OptionPanels/SelectStylePanel.cs \
 	MonoDevelop.Ide.Gui.OptionPanels/TasksOptionsPanel.cs \


More information about the Monodevelop-list mailing list