diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin index f5fef28e96..974be6fc3a 100644 --- a/AddIns/ICSharpCode.SharpDevelop.addin +++ b/AddIns/ICSharpCode.SharpDevelop.addin @@ -668,27 +668,33 @@ <ToolbarItem id = "Cut" icon = "Icons.16x16.CutIcon" tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Cut"/> <ToolbarItem id = "Copy" icon = "Icons.16x16.CopyIcon" tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Copy"/> <ToolbarItem id = "Paste" icon = "Icons.16x16.PasteIcon" tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Paste"/> <ToolbarItem id = "Delete" icon = "Icons.16x16.DeleteIcon" tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Delete"/> <ToolbarItem id = "UndoRedoSeparator" type = "Separator"/> <ToolbarItem id = "Undo" icon = "Icons.16x16.UndoIcon" tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Undo"/> <ToolbarItem id = "Redo" icon = "Icons.16x16.RedoIcon" tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Redo"/> <ToolbarItem id = "CompileSeparator" type = "Separator"/> @@ -1058,48 +1064,53 @@ </MenuItem> <!-- END File menu --> <MenuItem id = "Edit" label = "${res:XML.MainMenu.EditMenu}" type="Menu"> - <Condition name = "WindowActive" activewindow="*" action="Disable"> - <MenuItem id = "Undo" - label = "${res:XML.MainMenu.EditMenu.Undo}" - icon = "Icons.16x16.UndoIcon" - type = "Item" - shortcut = "Control|Z" - class = "ICSharpCode.SharpDevelop.Commands.Undo"/> - <MenuItem id = "Redo" - label = "${res:XML.MainMenu.EditMenu.Redo}" - icon = "Icons.16x16.RedoIcon" - type = "Item" - shortcut = "Control|Y" - class = "ICSharpCode.SharpDevelop.Commands.Redo"/> - </Condition> + <MenuItem id = "Undo" + label = "${res:XML.MainMenu.EditMenu.Undo}" + icon = "Icons.16x16.UndoIcon" + type = "Item" + shortcut = "Control|Z" + loadclasslazy = "false" + class = "ICSharpCode.SharpDevelop.Commands.Undo"/> + <MenuItem id = "Redo" + label = "${res:XML.MainMenu.EditMenu.Redo}" + icon = "Icons.16x16.RedoIcon" + type = "Item" + shortcut = "Control|Y" + loadclasslazy = "false" + class = "ICSharpCode.SharpDevelop.Commands.Redo"/> <MenuItem id = "Separator1" type = "Separator" /> <MenuItem id = "Cut" label = "${res:XML.MainMenu.EditMenu.Cut}" icon = "Icons.16x16.CutIcon" type = "Item" shortcut = "Control|X" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Cut"/> <MenuItem id = "Copy" label = "${res:XML.MainMenu.EditMenu.Copy}" icon = "Icons.16x16.CopyIcon" type = "Item" shortcut = "Control|C" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Copy"/> <MenuItem id = "Paste" label = "${res:XML.MainMenu.EditMenu.Paste}" icon = "Icons.16x16.PasteIcon" type = "Item" shortcut = "Control|V" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Paste"/> <MenuItem id = "Delete" label = "${res:XML.MainMenu.EditMenu.Delete}" icon = "Icons.16x16.DeleteIcon" type = "Item" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.Delete"/> <MenuItem id = "SelectAll" label = "${res:XML.MainMenu.EditMenu.SelectAll}" type = "Item" shortcut = "Control|A" + loadclasslazy = "false" class = "ICSharpCode.SharpDevelop.Commands.SelectAll"/> <MenuItem id = "Separator4" type = "Separator" /> <ComplexCondition action="Disable"> diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj index 0dcd4feb1c..95fb4c504f 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj @@ -11,6 +11,7 @@ <NoStdLib>False</NoStdLib> <NoConfig>False</NoConfig> <RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent> + <ProductVersion>8.0.50215</ProductVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>True</DebugSymbols> @@ -37,7 +38,9 @@ </ItemGroup> <ItemGroup> <Compile Include="Configuration\AssemblyInfo.cs" /> - <Compile Include="Src\XmlEditorControl.cs" /> + <Compile Include="Src\XmlEditorControl.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="Src\XmlCompletionDataProvider.cs" /> <Compile Include="Src\XmlCompletionData.cs" /> <Compile Include="Src\XmlCompletionDataImageList.cs" /> @@ -54,15 +57,23 @@ <Compile Include="Src\XmlSchemaManager.cs" /> <Compile Include="Src\Parser.cs" /> <Compile Include="Src\ValidateXmlCommand.cs" /> - <Compile Include="Src\XmlSchemasPanel.cs" /> + <Compile Include="Src\XmlSchemasPanel.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="Src\XmlSchemaListBoxItem.cs" /> - <Compile Include="Src\CodeCompletionWindow.cs" /> + <Compile Include="Src\CodeCompletionWindow.cs"> + <SubType>Form</SubType> + </Compile> <Compile Include="Src\XmlEditorAddInOptions.cs" /> - <Compile Include="Src\SelectXmlSchemaForm.cs" /> + <Compile Include="Src\SelectXmlSchemaForm.cs"> + <SubType>Form</SubType> + </Compile> <Compile Include="Src\CodeCompletionPopupCommand.cs" /> <Compile Include="Src\XmlSchemaAssociation.cs" /> <Compile Include="Src\XmlSchemaAssociationListBoxItem.cs" /> - <Compile Include="Src\XmlEditorOptionsPanel.cs" /> + <Compile Include="Src\XmlEditorOptionsPanel.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="Src\CreateSchemaCommand.cs" /> <Compile Include="Src\EncodedStringWriter.cs" /> <EmbeddedResource Include="Resources\XmlSchemasPanel.xfrm" /> diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user index ef111b3b5e..33f1bf7309 100644 --- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user +++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user @@ -1,4 +1,7 @@ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> + <PropertyGroup> + <LastOpenVersion>8.0.50215</LastOpenVersion> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj index 0e239d4c76..22d4fdbde1 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj +++ b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj @@ -6,6 +6,8 @@ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProjectGuid>{918487B7-2153-4618-BBB3-344DBDDF2A2A}</ProjectGuid> + <ProductVersion>8.0.50215</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\HtmlHelp2\</OutputPath> @@ -35,24 +37,36 @@ <Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </ItemGroup> <ItemGroup> - <Compile Include="src\BaseControls\TocPad.cs" /> + <Compile Include="src\BaseControls\TocPad.cs"> + <SubType>UserControl</SubType> + </Compile> <None Include="src\BaseControls\DynamicHelpPad.cs" /> <Compile Include="src\BaseControls\FavoritesPad.cs" /> - <Compile Include="src\BaseControls\IndexPad.cs" /> + <Compile Include="src\BaseControls\IndexPad.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="src\BaseControls\IndexResultsPad.cs" /> <Compile Include="src\BaseControls\SearchPad.cs" /> - <Compile Include="src\BaseControls\SearchResultsPad.cs" /> + <Compile Include="src\BaseControls\SearchResultsPad.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="src\BrowserControl\ShowHelpBrowser.cs" /> <None Include="HtmlHelp2.addin"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </None> <Compile Include="src\Service\Help2RegistryWalker.cs" /> - <Compile Include="src\Service\HtmlHelp2Dialog.cs" /> + <Compile Include="src\Service\HtmlHelp2Dialog.cs"> + <SubType>Component</SubType> + </Compile> <Compile Include="src\Service\HtmlHelp2Service.cs" /> <Compile Include="src\Service\ResourcesHelper.cs" /> <Compile Include="src\Service\Help2ControlsValidation.cs" /> - <Compile Include="src\Service\AxMSHelpControls.cs" /> - <Compile Include="src\Service\HtmlHelp2Options.cs" /> + <Compile Include="src\Service\AxMSHelpControls.cs"> + <SubType>Component</SubType> + </Compile> + <Compile Include="src\Service\HtmlHelp2Options.cs"> + <SubType>UserControl</SubType> + </Compile> <Compile Include="Configuration\AssemblyInfo.cs" /> <EmbeddedResource Include="Resources\Favorites.16x16.Delete.bmp" /> <EmbeddedResource Include="Resources\Favorites.16x16.MoveDown.bmp" /> diff --git a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user index c439b83dc4..7b8f1b2e86 100644 --- a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user +++ b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user @@ -1,3 +1,6 @@ <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> + <PropertyGroup> + <LastOpenVersion>8.0.50215</LastOpenVersion> + </PropertyGroup> </Project> \ No newline at end of file diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 35c681b5f3..f51d575af4 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -183,7 +183,7 @@ <SubType>UserControl</SubType> </Compile> <Compile Include="Src\Gui\Dialogs\CommonAboutDialog.cs"> - <SubType>UserControl</SubType> + <SubType>Form</SubType> </Compile> <Compile Include="Src\Gui\Dialogs\DirtyFilesDialog.cs" /> <Compile Include="Src\Gui\Dialogs\FolderDialog.cs" /> diff --git a/src/Main/Base/Project/Src/Commands/EditCommands.cs b/src/Main/Base/Project/Src/Commands/EditCommands.cs index 294f1ea066..5ba6f1af59 100644 --- a/src/Main/Base/Project/Src/Commands/EditCommands.cs +++ b/src/Main/Base/Project/Src/Commands/EditCommands.cs @@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Commands IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler; if (editable != null) { return editable.EnableUndo; + } else { + TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase; + if (textBox != null) { + return textBox.CanUndo; + } } return false; } @@ -37,6 +42,11 @@ namespace ICSharpCode.SharpDevelop.Commands IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler; if (editable != null) { editable.Undo(); + } else { + TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase; + if (textBox != null) { + textBox.Undo(); + } } } } @@ -61,37 +71,86 @@ namespace ICSharpCode.SharpDevelop.Commands } } } - - public class Cut : AbstractMenuCommand + + public abstract class AbstractClipboardCommand : AbstractMenuCommand { - public override bool IsEnabled { - get { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - return editable.EnableCut; - } - return false; + protected abstract bool GetEnabled(IClipboardHandler editable); + protected abstract void Run(IClipboardHandler editable); + + public static IClipboardHandler GetClipboardHandlerWrapper(Control ctl) + { + TextBoxBase tb = ctl as TextBoxBase; + if (tb != null) + return new TextBoxWrapper(tb); + ComboBox cb = ctl as ComboBox; + if (cb != null && cb.DropDownStyle != ComboBoxStyle.DropDownList) + return new ComboBoxWrapper(cb); + return null; + } + + private class TextBoxWrapper : IClipboardHandler + { + TextBoxBase textBox; + public TextBoxWrapper(TextBoxBase textBox) { + this.textBox = textBox; + } + public bool EnableCut { + get { return !textBox.ReadOnly && textBox.SelectionLength > 0; } + } + public bool EnableCopy { + get { return textBox.SelectionLength > 0; } } + public bool EnablePaste { + get { return !textBox.ReadOnly; } + } + public bool EnableDelete { + get { return !textBox.ReadOnly && textBox.SelectionLength > 0; } + } + public bool EnableSelectAll { + get { return textBox.TextLength > 0; } + } + public void Cut() { textBox.Cut(); } + public void Copy() { textBox.Copy(); } + public void Paste() { textBox.Paste(); } + public void Delete() { textBox.SelectedText = ""; } + public void SelectAll() { textBox.SelectAll(); } } - public override void Run() + private class ComboBoxWrapper : IClipboardHandler { - if (IsEnabled) { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - editable.Cut(); - } + ComboBox comboBox; + public ComboBoxWrapper(ComboBox comboBox) { + this.comboBox = comboBox; + } + public bool EnableCut { + get { return comboBox.SelectionLength > 0; } + } + public bool EnableCopy { + get { return comboBox.SelectionLength > 0; } + } + public bool EnablePaste { + get { return Clipboard.ContainsText(); } } + public bool EnableDelete { + get { return true; } + } + public bool EnableSelectAll { + get { return comboBox.Text.Length > 0; } + } + public void Cut() { Clipboard.SetText(comboBox.SelectedText); comboBox.SelectedText = ""; } + public void Copy() { Clipboard.SetText(comboBox.SelectedText); } + public void Paste() { comboBox.SelectedText = Clipboard.GetText(); } + public void Delete() { comboBox.SelectedText = ""; } + public void SelectAll() { comboBox.SelectAll(); } } - } - - public class Copy : AbstractMenuCommand - { + public override bool IsEnabled { get { IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; + if (editable == null) + editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl); if (editable != null) { - return editable.EnableCopy; + return GetEnabled(editable); } return false; } @@ -101,77 +160,65 @@ namespace ICSharpCode.SharpDevelop.Commands { if (IsEnabled) { IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; + if (editable == null) + editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl); if (editable != null) { - editable.Copy(); + Run(editable); } } } } - public class Paste : AbstractMenuCommand + public class Cut : AbstractClipboardCommand { - public override bool IsEnabled { - get { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - return editable.EnablePaste; - } - return false; - } + protected override bool GetEnabled(IClipboardHandler editable) { + return editable.EnableCut; } - public override void Run() - { - if (IsEnabled) { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - editable.Paste(); - } - } + protected override void Run(IClipboardHandler editable) { + editable.Cut(); } } - public class Delete : AbstractMenuCommand + public class Copy : AbstractClipboardCommand { - public override bool IsEnabled { - get { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - return editable.EnableDelete; - } - return false; - } + protected override bool GetEnabled(IClipboardHandler editable) { + return editable.EnableCopy; } - public override void Run() - { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - editable.Delete(); - } + protected override void Run(IClipboardHandler editable) { + editable.Copy(); } } - public class SelectAll : AbstractMenuCommand + public class Paste : AbstractClipboardCommand { - public override bool IsEnabled { - get { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - return editable.EnableSelectAll; - } - return false; - } + protected override bool GetEnabled(IClipboardHandler editable) { + return editable.EnablePaste; } - public override void Run() - { - if (IsEnabled) { - IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; - if (editable != null) { - editable.SelectAll(); - } - } + protected override void Run(IClipboardHandler editable) { + editable.Paste(); } } - + + public class Delete : AbstractClipboardCommand + { + protected override bool GetEnabled(IClipboardHandler editable) { + return editable.EnableDelete; + } + protected override void Run(IClipboardHandler editable) { + editable.Delete(); + } + } + + public class SelectAll : AbstractClipboardCommand + { + protected override bool GetEnabled(IClipboardHandler editable) { + return editable.EnableSelectAll; + } + protected override void Run(IClipboardHandler editable) { + editable.SelectAll(); + } + } + public class WordCount : AbstractMenuCommand { public override void Run() diff --git a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs index 73f8ba4b94..f9d6581922 100644 --- a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs +++ b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs @@ -24,12 +24,16 @@ namespace ICSharpCode.SharpDevelop.Dom BindingFlags.NonPublic | BindingFlags.DeclaredOnly | BindingFlags.Public; - + + List<IClass> innerClasses; + public override List<IClass> InnerClasses { get { - List<IClass> innerClasses = new List<IClass>(); - foreach (Type nestedType in type.GetNestedTypes(flags)) { - innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this)); + if (innerClasses == null) { + innerClasses = new List<IClass>(); + foreach (Type nestedType in type.GetNestedTypes(flags)) { + innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this)); + } } return innerClasses; } diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs index 488f9e0c8f..8fbf5208c5 100644 --- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs +++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs @@ -19,10 +19,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding public bool IsValid(object caller, Condition condition) { HtmlViewPane pane = (HtmlViewPane)caller; - Uri uri = pane.Url; - if (uri == null) - return false; - string url = uri.ToString(); + string url = pane.Url.ToString(); string pattern = condition.Properties["urlRegex"]; string options = condition.Properties["options"]; if (options != null && options.Length > 0) diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs index 3b2e93b89a..e27a54c636 100644 --- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs +++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs @@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding public Uri Url { get { if (webBrowser.Url == null) - return null; + return new Uri("about:blank"); if (dummyUrl != null && webBrowser.Url.ToString() == "about:blank") { return new Uri(dummyUrl); } else { diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs index fc1452593e..1918fdff50 100644 --- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs +++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs @@ -40,15 +40,13 @@ namespace ICSharpCode.SharpDevelop.Project projectBrowserControl.Dock = DockStyle.Fill; Controls.Add(projectBrowserControl); - toolStrip = new ToolStrip(); + toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard"); toolStrip.ShowItemToolTips = true; toolStrip.Dock = DockStyle.Top; toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; toolStrip.Stretch = true; - standardItems = ToolbarService.CreateToolStripItems(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard"); - if (standardItems != null) { - toolStrip.Items.AddRange(standardItems); - } + standardItems = new ToolStripItem[toolStrip.Items.Count]; + toolStrip.Items.CopyTo(standardItems, 0); Controls.Add(toolStrip); projectBrowserControl.TreeView.AfterSelect += new TreeViewEventHandler(TreeViewAfterSelect); } @@ -64,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Project toolStrip.Items.AddRange(standardItems); if (node.ToolbarAddinTreePath != null) { toolStrip.Items.Add(new ToolStripSeparator()); - toolStrip.Items.AddRange(ToolbarService.CreateToolStripItems(node, node.ToolbarAddinTreePath)); + toolStrip.Items.AddRange((ToolStripItem[])AddInTree.BuildItems(node.ToolbarAddinTreePath, node, false).ToArray(typeof(ToolStripItem))); } } diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs index e90d2f9b80..ec735a85c5 100644 --- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs +++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs @@ -230,6 +230,11 @@ namespace ICSharpCode.SharpDevelop.Gui { RightToLeft = RightToLeftConverter.RightToLeft; + foreach (ToolStripItem item in TopMenu.Items) { + if (item is IStatusUpdate) + ((IStatusUpdate)item).UpdateText(); + } + foreach (IViewContent content in workbenchContentCollection) { content.RedrawContent(); if (content.WorkbenchWindow != null) { diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs index a502333e93..cd67d4ebd0 100644 --- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs +++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs @@ -38,9 +38,24 @@ namespace ICSharpCode.SharpDevelop.Gui } } + public static Control ActiveControl { + get { + ContainerControl container = WorkbenchSingleton.MainForm; + Control ctl; + do { + ctl = container.ActiveControl; + if (ctl == null) + return container; + container = ctl as ContainerControl; + } while(container != null); + return ctl; + } + } + static WorkbenchSingleton() { PropertyService.PropertyChanged += new PropertyChangedEventHandler(TrackPropertyChanges); + ResourceService.LanguageChanged += delegate { workbench.RedrawAllComponents(); }; } /// <remarks> @@ -52,7 +67,6 @@ namespace ICSharpCode.SharpDevelop.Gui switch (e.Key) { case "ICSharpCode.SharpDevelop.Gui.StatusBarVisible": case "ICSharpCode.SharpDevelop.Gui.VisualStyle": - case "CoreProperties.UILanguage": case "ICSharpCode.SharpDevelop.Gui.ToolBarVisible": workbench.RedrawAllComponents(); break; diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs index 038b0a0053..8892d342f4 100644 --- a/src/Main/Base/Project/Src/Services/File/FileService.cs +++ b/src/Main/Base/Project/Src/Services/File/FileService.cs @@ -222,6 +222,8 @@ namespace ICSharpCode.Core public static void RenameFile(string oldName, string newName, bool isDirectory) { + if (FileUtility.IsEqualFileName(oldName, newName)) + return; FileRenamingEventArgs eargs = new FileRenamingEventArgs(oldName, newName, isDirectory); OnFileRenaming(eargs); if (eargs.Cancel) diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs index 110a97f3be..8ee0dddfa3 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs @@ -12,5 +12,6 @@ namespace ICSharpCode.Core public interface IStatusUpdate { void UpdateStatus(); + void UpdateText(); } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs index feb7a00ee5..a5fc4be876 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs @@ -28,7 +28,8 @@ namespace ICSharpCode.Core this.subItems = subItems; this.RightToLeft = RightToLeft.Inherit; - CreateDropDownItems(); + UpdateText(); + CreateDropDownItems(); // must be created to support shortcuts if (DropDownItems.Count == 0 && subItems.Count > 0) { DropDownItems.Add(new ToolStripMenuItem()); } @@ -40,7 +41,10 @@ namespace ICSharpCode.Core foreach (object item in subItems) { if (item is ToolStripItem) { DropDownItems.Add((ToolStripItem)item); - ((IStatusUpdate)item).UpdateStatus(); + if (item is IStatusUpdate) { + ((IStatusUpdate)item).UpdateStatus(); + ((IStatusUpdate)item).UpdateText(); + } } else { ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller)); @@ -49,20 +53,8 @@ namespace ICSharpCode.Core } protected override void OnDropDownShow(EventArgs e) { - base.OnDropDownShow(e); CreateDropDownItems(); - foreach (object item in subItems) { - if (item is ToolStripItem) { - if (item is IStatusUpdate) { - ((IStatusUpdate)item).UpdateStatus(); - } - } - } - } - - protected override void OnDropDownOpened(System.EventArgs e) - { - base.OnDropDownOpened(e); + base.OnDropDownShow(e); } public override bool Enabled { @@ -81,8 +73,13 @@ namespace ICSharpCode.Core ConditionFailedAction failedAction = codon.GetFailedAction(caller); this.Visible = failedAction != ConditionFailedAction.Exclude; } - - Text = StringParser.Parse(codon.Properties["label"]); + } + + public virtual void UpdateText() + { + if (codon != null) { + Text = StringParser.Parse(codon.Properties["label"]); + } } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs index ed4c56b8d1..54a1b5e288 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs @@ -52,6 +52,7 @@ namespace ICSharpCode.Core this.RightToLeft = RightToLeft.Inherit; this.caller = caller; this.codon = codon; + UpdateText(); } protected override void OnClick(System.EventArgs e) @@ -79,10 +80,15 @@ namespace ICSharpCode.Core if (codon != null) { ConditionFailedAction failedAction = codon.GetFailedAction(caller); this.Visible = failedAction != ConditionFailedAction.Exclude; - - Text = StringParser.Parse(codon.Properties["label"]); Checked = MenuCommand.IsChecked; } } + + public virtual void UpdateText() + { + if (codon != null) { + Text = StringParser.Parse(codon.Properties["label"]); + } + } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs index 11a3686b48..107bce42b3 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs @@ -20,7 +20,6 @@ namespace ICSharpCode.Core Codon codon; ICommand menuCommand = null; string description = ""; - string localizedText = null; public string Description { get { @@ -88,6 +87,7 @@ namespace ICSharpCode.Core CreateCommand(); } + UpdateText(); if (codon.Properties.Contains("shortcut")) { ShortcutKeys = ParseShortcut(codon.Properties["shortcut"]); } @@ -154,13 +154,13 @@ namespace ICSharpCode.Core Image = ResourceService.GetBitmap(codon.Properties["icon"]); } Visible = GetVisible(); - - if (localizedText == null) { - localizedText = codon.Properties["label"]; - } } - if (localizedText != null) { - Text = StringParser.Parse(localizedText); + } + + public virtual void UpdateText() + { + if (codon != null) { + Text = StringParser.Parse(codon.Properties["label"]); } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs index bf35845ebc..0ed26efc86 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs @@ -39,5 +39,9 @@ namespace ICSharpCode.Core this.Visible = failedAction != ConditionFailedAction.Exclude; } } + + public virtual void UpdateText() + { + } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs index 28f32ffef4..fab0b970f9 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs @@ -27,15 +27,17 @@ namespace ICSharpCode.Core { string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command"; + bool createCommand = codon.Properties["loadclasslazy"] == "false"; + switch (type) { case "Separator": return new MenuSeparator(codon, caller); case "CheckBox": return new MenuCheckBox(codon, caller); case "Item": - return new MenuCommand(codon, caller); + return new MenuCommand(codon, caller, createCommand); case "Command": - return new MenuCommand(codon, caller, false); + return new MenuCommand(codon, caller, createCommand); case "Menu": return new Menu(codon, caller, subItems); case "Builder": diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs index 055bcfd53e..58424d9708 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs @@ -58,6 +58,7 @@ namespace ICSharpCode.Core if (Image == null && codon.Properties.Contains("icon")) { Image = ResourceService.GetBitmap(codon.Properties["icon"]); } + UpdateText(); UpdateStatus(); } @@ -84,12 +85,22 @@ namespace ICSharpCode.Core { if (codon != null) { ConditionFailedAction failedAction = codon.GetFailedAction(caller); - this.Visible = failedAction != ConditionFailedAction.Exclude; - if (codon.Properties.Contains("tooltip")) { - ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); + bool isVisible = failedAction != ConditionFailedAction.Exclude; + if (isVisible != Visible) + Visible = isVisible; + if (menuCommand != null) { + bool isChecked = menuCommand.IsChecked; + if (isChecked != Checked) + Checked = isChecked; } - Checked = menuCommand.IsChecked; - Text = StringParser.Parse(codon.Properties["label"]); + } + } + + public virtual void UpdateText() + { + Text = StringParser.Parse(codon.Properties["label"]); + if (codon.Properties.Contains("tooltip")) { + ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs index 964de2995c..291ce32031 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs @@ -57,6 +57,7 @@ namespace ICSharpCode.Core if (menuCommand == null) { throw new NullReferenceException("Can't create combobox menu command"); } + UpdateText(); UpdateStatus(); } @@ -100,18 +101,20 @@ namespace ICSharpCode.Core if (codon != null) { ConditionFailedAction failedAction = codon.GetFailedAction(caller); isVisible &= failedAction != ConditionFailedAction.Exclude; - - if (codon.Properties.Contains("label")) { - Text = StringParser.Parse(codon.Properties["label"]); - } - if (codon.Properties.Contains("tooltip")) { - ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); - } } if (base.Visible != isVisible) { Visible = isVisible; } - + } + + public virtual void UpdateText() + { + if (codon.Properties.Contains("label")) { + Text = StringParser.Parse(codon.Properties["label"]); + } + if (codon.Properties.Contains("tooltip")) { + ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); + } } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs index c8bda4661e..545e208c0a 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs @@ -18,27 +18,16 @@ namespace ICSharpCode.Core { object caller; Codon codon; - string description = String.Empty; - string localizedText = String.Empty; ICommand menuCommand = null; - public string Description { - get { - return description; - } - set { - description = value; - } - } - - public ToolBarCommand(Codon codon, object caller) + public ToolBarCommand(Codon codon, object caller, bool createCommand) { this.RightToLeft = RightToLeft.Inherit; this.caller = caller; this.codon = codon; - if (codon.Properties.Contains("tooltip")) { - localizedText = codon.Properties["tooltip"]; + if (createCommand) { + menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]); } if (Image == null && codon.Properties.Contains("icon")) { @@ -46,6 +35,7 @@ namespace ICSharpCode.Core } UpdateStatus(); + UpdateText(); } protected override void OnClick(System.EventArgs e) @@ -97,8 +87,13 @@ namespace ICSharpCode.Core base.Visible = isVisible; } } - - ToolTipText = StringParser.Parse(localizedText); + } + + public virtual void UpdateText() + { + if (codon != null) { + ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); + } } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs index 2e674a61fe..d868da786d 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs @@ -11,25 +11,14 @@ using System.Diagnostics; using System.Drawing.Text; using System.Drawing.Imaging; using System.Windows.Forms; - + namespace ICSharpCode.Core { public class ToolBarDropDownButton : ToolStripDropDownButton , IStatusUpdate { object caller; Codon codon; - string description = String.Empty; - string localizedText = String.Empty; ICommand menuCommand = null; - - public string Description { - get { - return description; - } - set { - description = value; - } - } public ToolBarDropDownButton(Codon codon, object caller) { @@ -37,16 +26,13 @@ namespace ICSharpCode.Core this.caller = caller; this.codon = codon; - if (codon.Properties.Contains("tooltip")) { - localizedText = codon.Properties["tooltip"]; - } - if (Image == null && codon.Properties.Contains("icon")) { Image = ResourceService.GetBitmap(codon.Properties["icon"]); } menuCommand = codon.AddIn.CreateObject(codon.Properties["class"]) as ICommand; menuCommand.Owner = this; UpdateStatus(); + UpdateText(); } protected override void OnClick(System.EventArgs e) @@ -79,6 +65,12 @@ namespace ICSharpCode.Core } } + public virtual void UpdateText() + { + if (codon != null) { + ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); + } + } public virtual void UpdateStatus() { @@ -89,7 +81,6 @@ namespace ICSharpCode.Core base.Visible = isVisible; } } - ToolTipText = StringParser.Parse(localizedText); } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs index 4bcb3a4c2e..935775b1e5 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs @@ -39,5 +39,9 @@ namespace ICSharpCode.Core this.Visible = failedAction != ConditionFailedAction.Exclude; } } + + public virtual void UpdateText() + { + } } } diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs index aa14054732..e4d3b1ad14 100644 --- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs +++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs @@ -27,13 +27,15 @@ namespace ICSharpCode.Core { string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Item"; + bool createCommand = codon.Properties["loadclasslazy"] == "false"; + switch (type) { case "Separator": return new ToolBarSeparator(codon, caller); case "CheckBox": return new ToolBarCheckBox(codon, caller); case "Item": - return new ToolBarCommand(codon, caller); + return new ToolBarCommand(codon, caller, createCommand); case "ComboBox": return new ToolBarComboBox(codon, caller); case "DropDownButton": diff --git a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs index 34792389d3..3fb4abcae8 100644 --- a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs +++ b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs @@ -42,9 +42,8 @@ namespace ICSharpCode.Core RegisterAssembly(assembly); } -// PropertyService.PropertyChanged += new PropertyChangedEventHandler(ChangeProperty); - - LoadLanguageResources(); + PropertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange); + LoadLanguageResources(PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name)); } static Hashtable userStrings = null; @@ -63,17 +62,19 @@ namespace ICSharpCode.Core static ArrayList assemblies = new ArrayList(); -// static void ChangeProperty(object sender, PropertyChangedEventArgs e) -// { -// if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) { -// LoadLanguageResources(); -// } -// } + static void OnPropertyChange(object sender, PropertyChangedEventArgs e) + { + if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) { + LoadLanguageResources((string)e.NewValue); + if (LanguageChanged != null) + LanguageChanged(null, e); + } + } - static void LoadLanguageResources() + public static event EventHandler LanguageChanged; + + static void LoadLanguageResources(string language) { - string language = PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name); - try { Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); } catch (Exception) { @@ -205,8 +206,6 @@ namespace ICSharpCode.Core } - static string lastLanguage = ""; - /// <summary> /// Returns a string from the resource database, it handles localization /// transparent for the user. @@ -222,11 +221,6 @@ namespace ICSharpCode.Core /// </exception> public static string GetString(string name) { - string currentLanguage = PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name); - if (currentLanguage != lastLanguage) { - LoadLanguageResources(); - lastLanguage = currentLanguage; - } if (localUserStrings != null && localUserStrings[name] != null) { return localUserStrings[name].ToString(); } diff --git a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs index 3797cc216f..46527c22b2 100644 --- a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs +++ b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs @@ -13,38 +13,38 @@ namespace ICSharpCode.Core { public static class ToolbarService { -// readonly static string toolBarPath = "/SharpDevelop/Workbench/ToolBar"; - public static ToolStripItem[] CreateToolStripItems(object owner, AddInTreeNode treeNode) { return (ToolStripItem[])(treeNode.BuildChildItems(owner)).ToArray(typeof(ToolStripItem)); } - public static ToolStripItem[] CreateToolStripItems(object owner, string addInTreePath) - { - AddInTreeNode treeNode; - try { - treeNode = AddInTree.GetTreeNode(addInTreePath); - } catch (TreePathNotFoundException) { - return null; - } - return CreateToolStripItems(owner, treeNode); - } - public static ToolStrip CreateToolStrip(object owner, AddInTreeNode treeNode) { ToolStrip toolStrip = new ToolStrip(); toolStrip.Items.AddRange(CreateToolStripItems(owner, treeNode)); UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added + new LanguageChangeWatcher(toolStrip); return toolStrip; } + class LanguageChangeWatcher { + ToolStrip toolStrip; + public LanguageChangeWatcher(ToolStrip toolStrip) { + this.toolStrip = toolStrip; + toolStrip.Disposed += Disposed; + ResourceService.LanguageChanged += LanguageChanged; + } + void LanguageChanged(object sender, EventArgs e) { + ToolbarService.UpdateToolbarText(toolStrip); + } + void Disposed(object sender, EventArgs e) { + ResourceService.LanguageChanged -= LanguageChanged; + } + } + public static ToolStrip CreateToolStrip(object owner, string addInTreePath) { - ToolStrip toolStrip = new ToolStrip(); - toolStrip.Items.AddRange(CreateToolStripItems(owner, addInTreePath)); - UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added - return toolStrip; + return CreateToolStrip(owner, AddInTree.GetTreeNode(addInTreePath)); } public static ToolStrip[] CreateToolbars(object owner, string addInTreePath) @@ -72,5 +72,14 @@ namespace ICSharpCode.Core } toolStrip.Refresh(); } + + public static void UpdateToolbarText(ToolStrip toolStrip) + { + foreach (ToolStripItem item in toolStrip.Items) { + if (item is IStatusUpdate) { + ((IStatusUpdate)item).UpdateText(); + } + } + } } } diff --git a/src/SharpDevelop.sln b/src/SharpDevelop.sln index 3f1f59bba9..c4f02084f5 100644 --- a/src/SharpDevelop.sln +++ b/src/SharpDevelop.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 9.00 -# SharpDevelop 2.0.0.326 +# SharpDevelop 2.0.0.336 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}" ProjectSection(SolutionItems) = postProject EndProjectSection @@ -84,8 +84,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Co EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" EndProject -Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "{970116b0-f96b-4257-8579-986b9cf086f5}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU