Browse Source

Cut/Copy/Paste menu+toolbar commands now also work for normal text boxes and combo boxes (e.g. on the project's property pages).

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@339 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 21 years ago
parent
commit
71f2d912ec
  1. 39
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 21
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
  3. 3
      src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user
  4. 26
      src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj
  5. 3
      src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user
  6. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 183
      src/Main/Base/Project/Src/Commands/EditCommands.cs
  8. 10
      src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
  9. 5
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs
  10. 2
      src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs
  11. 10
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs
  12. 5
      src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs
  13. 16
      src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
  14. 2
      src/Main/Base/Project/Src/Services/File/FileService.cs
  15. 1
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs
  16. 29
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs
  17. 10
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs
  18. 14
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs
  19. 4
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs
  20. 6
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
  21. 21
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs
  22. 17
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs
  23. 25
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
  24. 23
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs
  25. 4
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs
  26. 4
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs
  27. 32
      src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
  28. 43
      src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs
  29. 4
      src/SharpDevelop.sln

39
AddIns/ICSharpCode.SharpDevelop.addin

@ -668,27 +668,33 @@
<ToolbarItem id = "Cut" <ToolbarItem id = "Cut"
icon = "Icons.16x16.CutIcon" icon = "Icons.16x16.CutIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Cut"/> class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
<ToolbarItem id = "Copy" <ToolbarItem id = "Copy"
icon = "Icons.16x16.CopyIcon" icon = "Icons.16x16.CopyIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Copy"/> class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
<ToolbarItem id = "Paste" <ToolbarItem id = "Paste"
icon = "Icons.16x16.PasteIcon" icon = "Icons.16x16.PasteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Paste"/> class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
<ToolbarItem id = "Delete" <ToolbarItem id = "Delete"
icon = "Icons.16x16.DeleteIcon" icon = "Icons.16x16.DeleteIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Delete"/> class = "ICSharpCode.SharpDevelop.Commands.Delete"/>
<ToolbarItem id = "UndoRedoSeparator" type = "Separator"/> <ToolbarItem id = "UndoRedoSeparator" type = "Separator"/>
<ToolbarItem id = "Undo" <ToolbarItem id = "Undo"
icon = "Icons.16x16.UndoIcon" icon = "Icons.16x16.UndoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Undo"/> class = "ICSharpCode.SharpDevelop.Commands.Undo"/>
<ToolbarItem id = "Redo" <ToolbarItem id = "Redo"
icon = "Icons.16x16.RedoIcon" icon = "Icons.16x16.RedoIcon"
tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}" tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Redo"/> class = "ICSharpCode.SharpDevelop.Commands.Redo"/>
<ToolbarItem id = "CompileSeparator" type = "Separator"/> <ToolbarItem id = "CompileSeparator" type = "Separator"/>
@ -1058,48 +1064,53 @@
</MenuItem> <!-- END File menu --> </MenuItem> <!-- END File menu -->
<MenuItem id = "Edit" label = "${res:XML.MainMenu.EditMenu}" type="Menu"> <MenuItem id = "Edit" label = "${res:XML.MainMenu.EditMenu}" type="Menu">
<Condition name = "WindowActive" activewindow="*" action="Disable"> <MenuItem id = "Undo"
<MenuItem id = "Undo" label = "${res:XML.MainMenu.EditMenu.Undo}"
label = "${res:XML.MainMenu.EditMenu.Undo}" icon = "Icons.16x16.UndoIcon"
icon = "Icons.16x16.UndoIcon" type = "Item"
type = "Item" shortcut = "Control|Z"
shortcut = "Control|Z" loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Undo"/> class = "ICSharpCode.SharpDevelop.Commands.Undo"/>
<MenuItem id = "Redo" <MenuItem id = "Redo"
label = "${res:XML.MainMenu.EditMenu.Redo}" label = "${res:XML.MainMenu.EditMenu.Redo}"
icon = "Icons.16x16.RedoIcon" icon = "Icons.16x16.RedoIcon"
type = "Item" type = "Item"
shortcut = "Control|Y" shortcut = "Control|Y"
class = "ICSharpCode.SharpDevelop.Commands.Redo"/> loadclasslazy = "false"
</Condition> class = "ICSharpCode.SharpDevelop.Commands.Redo"/>
<MenuItem id = "Separator1" type = "Separator" /> <MenuItem id = "Separator1" type = "Separator" />
<MenuItem id = "Cut" <MenuItem id = "Cut"
label = "${res:XML.MainMenu.EditMenu.Cut}" label = "${res:XML.MainMenu.EditMenu.Cut}"
icon = "Icons.16x16.CutIcon" icon = "Icons.16x16.CutIcon"
type = "Item" type = "Item"
shortcut = "Control|X" shortcut = "Control|X"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Cut"/> class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
<MenuItem id = "Copy" <MenuItem id = "Copy"
label = "${res:XML.MainMenu.EditMenu.Copy}" label = "${res:XML.MainMenu.EditMenu.Copy}"
icon = "Icons.16x16.CopyIcon" icon = "Icons.16x16.CopyIcon"
type = "Item" type = "Item"
shortcut = "Control|C" shortcut = "Control|C"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Copy"/> class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
<MenuItem id = "Paste" <MenuItem id = "Paste"
label = "${res:XML.MainMenu.EditMenu.Paste}" label = "${res:XML.MainMenu.EditMenu.Paste}"
icon = "Icons.16x16.PasteIcon" icon = "Icons.16x16.PasteIcon"
type = "Item" type = "Item"
shortcut = "Control|V" shortcut = "Control|V"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Paste"/> class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
<MenuItem id = "Delete" <MenuItem id = "Delete"
label = "${res:XML.MainMenu.EditMenu.Delete}" label = "${res:XML.MainMenu.EditMenu.Delete}"
icon = "Icons.16x16.DeleteIcon" icon = "Icons.16x16.DeleteIcon"
type = "Item" type = "Item"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.Delete"/> class = "ICSharpCode.SharpDevelop.Commands.Delete"/>
<MenuItem id = "SelectAll" <MenuItem id = "SelectAll"
label = "${res:XML.MainMenu.EditMenu.SelectAll}" label = "${res:XML.MainMenu.EditMenu.SelectAll}"
type = "Item" type = "Item"
shortcut = "Control|A" shortcut = "Control|A"
loadclasslazy = "false"
class = "ICSharpCode.SharpDevelop.Commands.SelectAll"/> class = "ICSharpCode.SharpDevelop.Commands.SelectAll"/>
<MenuItem id = "Separator4" type = "Separator" /> <MenuItem id = "Separator4" type = "Separator" />
<ComplexCondition action="Disable"> <ComplexCondition action="Disable">

21
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj

@ -11,6 +11,7 @@
<NoStdLib>False</NoStdLib> <NoStdLib>False</NoStdLib>
<NoConfig>False</NoConfig> <NoConfig>False</NoConfig>
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent> <RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
<ProductVersion>8.0.50215</ProductVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>True</DebugSymbols> <DebugSymbols>True</DebugSymbols>
@ -37,7 +38,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Configuration\AssemblyInfo.cs" /> <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\XmlCompletionDataProvider.cs" />
<Compile Include="Src\XmlCompletionData.cs" /> <Compile Include="Src\XmlCompletionData.cs" />
<Compile Include="Src\XmlCompletionDataImageList.cs" /> <Compile Include="Src\XmlCompletionDataImageList.cs" />
@ -54,15 +57,23 @@
<Compile Include="Src\XmlSchemaManager.cs" /> <Compile Include="Src\XmlSchemaManager.cs" />
<Compile Include="Src\Parser.cs" /> <Compile Include="Src\Parser.cs" />
<Compile Include="Src\ValidateXmlCommand.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\XmlSchemaListBoxItem.cs" />
<Compile Include="Src\CodeCompletionWindow.cs" /> <Compile Include="Src\CodeCompletionWindow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Src\XmlEditorAddInOptions.cs" /> <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\CodeCompletionPopupCommand.cs" />
<Compile Include="Src\XmlSchemaAssociation.cs" /> <Compile Include="Src\XmlSchemaAssociation.cs" />
<Compile Include="Src\XmlSchemaAssociationListBoxItem.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\CreateSchemaCommand.cs" />
<Compile Include="Src\EncodedStringWriter.cs" /> <Compile Include="Src\EncodedStringWriter.cs" />
<EmbeddedResource Include="Resources\XmlSchemasPanel.xfrm" /> <EmbeddedResource Include="Resources\XmlSchemasPanel.xfrm" />

3
src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user

@ -1,4 +1,7 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
<PropertyGroup>
<LastOpenVersion>8.0.50215</LastOpenVersion>
</PropertyGroup>
</Project> </Project>

26
src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj

@ -6,6 +6,8 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{918487B7-2153-4618-BBB3-344DBDDF2A2A}</ProjectGuid> <ProjectGuid>{918487B7-2153-4618-BBB3-344DBDDF2A2A}</ProjectGuid>
<ProductVersion>8.0.50215</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\HtmlHelp2\</OutputPath> <OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\HtmlHelp2\</OutputPath>
@ -35,24 +37,36 @@
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="src\BaseControls\TocPad.cs" /> <Compile Include="src\BaseControls\TocPad.cs">
<SubType>UserControl</SubType>
</Compile>
<None Include="src\BaseControls\DynamicHelpPad.cs" /> <None Include="src\BaseControls\DynamicHelpPad.cs" />
<Compile Include="src\BaseControls\FavoritesPad.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\IndexResultsPad.cs" />
<Compile Include="src\BaseControls\SearchPad.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" /> <Compile Include="src\BrowserControl\ShowHelpBrowser.cs" />
<None Include="HtmlHelp2.addin"> <None Include="HtmlHelp2.addin">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<Compile Include="src\Service\Help2RegistryWalker.cs" /> <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\HtmlHelp2Service.cs" />
<Compile Include="src\Service\ResourcesHelper.cs" /> <Compile Include="src\Service\ResourcesHelper.cs" />
<Compile Include="src\Service\Help2ControlsValidation.cs" /> <Compile Include="src\Service\Help2ControlsValidation.cs" />
<Compile Include="src\Service\AxMSHelpControls.cs" /> <Compile Include="src\Service\AxMSHelpControls.cs">
<Compile Include="src\Service\HtmlHelp2Options.cs" /> <SubType>Component</SubType>
</Compile>
<Compile Include="src\Service\HtmlHelp2Options.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Configuration\AssemblyInfo.cs" /> <Compile Include="Configuration\AssemblyInfo.cs" />
<EmbeddedResource Include="Resources\Favorites.16x16.Delete.bmp" /> <EmbeddedResource Include="Resources\Favorites.16x16.Delete.bmp" />
<EmbeddedResource Include="Resources\Favorites.16x16.MoveDown.bmp" /> <EmbeddedResource Include="Resources\Favorites.16x16.MoveDown.bmp" />

3
src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user

@ -1,3 +1,6 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " /> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
<PropertyGroup>
<LastOpenVersion>8.0.50215</LastOpenVersion>
</PropertyGroup>
</Project> </Project>

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -183,7 +183,7 @@
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\CommonAboutDialog.cs"> <Compile Include="Src\Gui\Dialogs\CommonAboutDialog.cs">
<SubType>UserControl</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Src\Gui\Dialogs\DirtyFilesDialog.cs" /> <Compile Include="Src\Gui\Dialogs\DirtyFilesDialog.cs" />
<Compile Include="Src\Gui\Dialogs\FolderDialog.cs" /> <Compile Include="Src\Gui\Dialogs\FolderDialog.cs" />

183
src/Main/Base/Project/Src/Commands/EditCommands.cs

@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Commands
IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler; IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler;
if (editable != null) { if (editable != null) {
return editable.EnableUndo; return editable.EnableUndo;
} else {
TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase;
if (textBox != null) {
return textBox.CanUndo;
}
} }
return false; return false;
} }
@ -37,6 +42,11 @@ namespace ICSharpCode.SharpDevelop.Commands
IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler; IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler;
if (editable != null) { if (editable != null) {
editable.Undo(); editable.Undo();
} else {
TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase;
if (textBox != null) {
textBox.Undo();
}
} }
} }
} }
@ -62,36 +72,85 @@ namespace ICSharpCode.SharpDevelop.Commands
} }
} }
public class Cut : AbstractMenuCommand public abstract class AbstractClipboardCommand : AbstractMenuCommand
{ {
public override bool IsEnabled { protected abstract bool GetEnabled(IClipboardHandler editable);
get { protected abstract void Run(IClipboardHandler editable);
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) { public static IClipboardHandler GetClipboardHandlerWrapper(Control ctl)
return editable.EnableCut; {
} TextBoxBase tb = ctl as TextBoxBase;
return false; 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) { ComboBox comboBox;
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; public ComboBoxWrapper(ComboBox comboBox) {
if (editable != null) { this.comboBox = comboBox;
editable.Cut(); }
} 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 { public override bool IsEnabled {
get { get {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable == null)
editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl);
if (editable != null) { if (editable != null) {
return editable.EnableCopy; return GetEnabled(editable);
} }
return false; return false;
} }
@ -101,74 +160,62 @@ namespace ICSharpCode.SharpDevelop.Commands
{ {
if (IsEnabled) { if (IsEnabled) {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable == null)
editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl);
if (editable != null) { if (editable != null) {
editable.Copy(); Run(editable);
} }
} }
} }
} }
public class Paste : AbstractMenuCommand public class Cut : AbstractClipboardCommand
{ {
public override bool IsEnabled { protected override bool GetEnabled(IClipboardHandler editable) {
get { return editable.EnableCut;
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
return editable.EnablePaste;
}
return false;
}
} }
public override void Run() protected override void Run(IClipboardHandler editable) {
{ editable.Cut();
if (IsEnabled) {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
editable.Paste();
}
}
} }
} }
public class Delete : AbstractMenuCommand public class Copy : AbstractClipboardCommand
{ {
public override bool IsEnabled { protected override bool GetEnabled(IClipboardHandler editable) {
get { return editable.EnableCopy;
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
return editable.EnableDelete;
}
return false;
}
} }
public override void Run() protected override void Run(IClipboardHandler editable) {
{ editable.Copy();
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
editable.Delete();
}
} }
} }
public class SelectAll : AbstractMenuCommand public class Paste : AbstractClipboardCommand
{ {
public override bool IsEnabled { protected override bool GetEnabled(IClipboardHandler editable) {
get { return editable.EnablePaste;
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
return editable.EnableSelectAll;
}
return false;
}
} }
public override void Run() protected override void Run(IClipboardHandler editable) {
{ editable.Paste();
if (IsEnabled) { }
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler; }
if (editable != null) {
editable.SelectAll(); 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();
} }
} }

10
src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs

@ -25,11 +25,15 @@ namespace ICSharpCode.SharpDevelop.Dom
BindingFlags.DeclaredOnly | BindingFlags.DeclaredOnly |
BindingFlags.Public; BindingFlags.Public;
List<IClass> innerClasses;
public override List<IClass> InnerClasses { public override List<IClass> InnerClasses {
get { get {
List<IClass> innerClasses = new List<IClass>(); if (innerClasses == null) {
foreach (Type nestedType in type.GetNestedTypes(flags)) { innerClasses = new List<IClass>();
innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this)); foreach (Type nestedType in type.GetNestedTypes(flags)) {
innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this));
}
} }
return innerClasses; return innerClasses;
} }

5
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs

@ -19,10 +19,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
public bool IsValid(object caller, Condition condition) public bool IsValid(object caller, Condition condition)
{ {
HtmlViewPane pane = (HtmlViewPane)caller; HtmlViewPane pane = (HtmlViewPane)caller;
Uri uri = pane.Url; string url = pane.Url.ToString();
if (uri == null)
return false;
string url = uri.ToString();
string pattern = condition.Properties["urlRegex"]; string pattern = condition.Properties["urlRegex"];
string options = condition.Properties["options"]; string options = condition.Properties["options"];
if (options != null && options.Length > 0) if (options != null && options.Length > 0)

2
src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs

@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
public Uri Url { public Uri Url {
get { get {
if (webBrowser.Url == null) if (webBrowser.Url == null)
return null; return new Uri("about:blank");
if (dummyUrl != null && webBrowser.Url.ToString() == "about:blank") { if (dummyUrl != null && webBrowser.Url.ToString() == "about:blank") {
return new Uri(dummyUrl); return new Uri(dummyUrl);
} else { } else {

10
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs

@ -40,15 +40,13 @@ namespace ICSharpCode.SharpDevelop.Project
projectBrowserControl.Dock = DockStyle.Fill; projectBrowserControl.Dock = DockStyle.Fill;
Controls.Add(projectBrowserControl); Controls.Add(projectBrowserControl);
toolStrip = new ToolStrip(); toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
toolStrip.ShowItemToolTips = true; toolStrip.ShowItemToolTips = true;
toolStrip.Dock = DockStyle.Top; toolStrip.Dock = DockStyle.Top;
toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
toolStrip.Stretch = true; toolStrip.Stretch = true;
standardItems = ToolbarService.CreateToolStripItems(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard"); standardItems = new ToolStripItem[toolStrip.Items.Count];
if (standardItems != null) { toolStrip.Items.CopyTo(standardItems, 0);
toolStrip.Items.AddRange(standardItems);
}
Controls.Add(toolStrip); Controls.Add(toolStrip);
projectBrowserControl.TreeView.AfterSelect += new TreeViewEventHandler(TreeViewAfterSelect); projectBrowserControl.TreeView.AfterSelect += new TreeViewEventHandler(TreeViewAfterSelect);
} }
@ -64,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Project
toolStrip.Items.AddRange(standardItems); toolStrip.Items.AddRange(standardItems);
if (node.ToolbarAddinTreePath != null) { if (node.ToolbarAddinTreePath != null) {
toolStrip.Items.Add(new ToolStripSeparator()); 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)));
} }
} }

5
src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs

@ -230,6 +230,11 @@ namespace ICSharpCode.SharpDevelop.Gui
{ {
RightToLeft = RightToLeftConverter.RightToLeft; RightToLeft = RightToLeftConverter.RightToLeft;
foreach (ToolStripItem item in TopMenu.Items) {
if (item is IStatusUpdate)
((IStatusUpdate)item).UpdateText();
}
foreach (IViewContent content in workbenchContentCollection) { foreach (IViewContent content in workbenchContentCollection) {
content.RedrawContent(); content.RedrawContent();
if (content.WorkbenchWindow != null) { if (content.WorkbenchWindow != null) {

16
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() static WorkbenchSingleton()
{ {
PropertyService.PropertyChanged += new PropertyChangedEventHandler(TrackPropertyChanges); PropertyService.PropertyChanged += new PropertyChangedEventHandler(TrackPropertyChanges);
ResourceService.LanguageChanged += delegate { workbench.RedrawAllComponents(); };
} }
/// <remarks> /// <remarks>
@ -52,7 +67,6 @@ namespace ICSharpCode.SharpDevelop.Gui
switch (e.Key) { switch (e.Key) {
case "ICSharpCode.SharpDevelop.Gui.StatusBarVisible": case "ICSharpCode.SharpDevelop.Gui.StatusBarVisible":
case "ICSharpCode.SharpDevelop.Gui.VisualStyle": case "ICSharpCode.SharpDevelop.Gui.VisualStyle":
case "CoreProperties.UILanguage":
case "ICSharpCode.SharpDevelop.Gui.ToolBarVisible": case "ICSharpCode.SharpDevelop.Gui.ToolBarVisible":
workbench.RedrawAllComponents(); workbench.RedrawAllComponents();
break; break;

2
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) public static void RenameFile(string oldName, string newName, bool isDirectory)
{ {
if (FileUtility.IsEqualFileName(oldName, newName))
return;
FileRenamingEventArgs eargs = new FileRenamingEventArgs(oldName, newName, isDirectory); FileRenamingEventArgs eargs = new FileRenamingEventArgs(oldName, newName, isDirectory);
OnFileRenaming(eargs); OnFileRenaming(eargs);
if (eargs.Cancel) if (eargs.Cancel)

1
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs

@ -12,5 +12,6 @@ namespace ICSharpCode.Core
public interface IStatusUpdate public interface IStatusUpdate
{ {
void UpdateStatus(); void UpdateStatus();
void UpdateText();
} }
} }

29
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs

@ -28,7 +28,8 @@ namespace ICSharpCode.Core
this.subItems = subItems; this.subItems = subItems;
this.RightToLeft = RightToLeft.Inherit; this.RightToLeft = RightToLeft.Inherit;
CreateDropDownItems(); UpdateText();
CreateDropDownItems(); // must be created to support shortcuts
if (DropDownItems.Count == 0 && subItems.Count > 0) { if (DropDownItems.Count == 0 && subItems.Count > 0) {
DropDownItems.Add(new ToolStripMenuItem()); DropDownItems.Add(new ToolStripMenuItem());
} }
@ -40,7 +41,10 @@ namespace ICSharpCode.Core
foreach (object item in subItems) { foreach (object item in subItems) {
if (item is ToolStripItem) { if (item is ToolStripItem) {
DropDownItems.Add((ToolStripItem)item); DropDownItems.Add((ToolStripItem)item);
((IStatusUpdate)item).UpdateStatus(); if (item is IStatusUpdate) {
((IStatusUpdate)item).UpdateStatus();
((IStatusUpdate)item).UpdateText();
}
} else { } else {
ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item; ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item;
DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller)); DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller));
@ -49,20 +53,8 @@ namespace ICSharpCode.Core
} }
protected override void OnDropDownShow(EventArgs e) protected override void OnDropDownShow(EventArgs e)
{ {
base.OnDropDownShow(e);
CreateDropDownItems(); CreateDropDownItems();
foreach (object item in subItems) { base.OnDropDownShow(e);
if (item is ToolStripItem) {
if (item is IStatusUpdate) {
((IStatusUpdate)item).UpdateStatus();
}
}
}
}
protected override void OnDropDownOpened(System.EventArgs e)
{
base.OnDropDownOpened(e);
} }
public override bool Enabled { public override bool Enabled {
@ -81,8 +73,13 @@ namespace ICSharpCode.Core
ConditionFailedAction failedAction = codon.GetFailedAction(caller); ConditionFailedAction failedAction = codon.GetFailedAction(caller);
this.Visible = failedAction != ConditionFailedAction.Exclude; this.Visible = failedAction != ConditionFailedAction.Exclude;
} }
}
Text = StringParser.Parse(codon.Properties["label"]); public virtual void UpdateText()
{
if (codon != null) {
Text = StringParser.Parse(codon.Properties["label"]);
}
} }
} }
} }

10
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs

@ -52,6 +52,7 @@ namespace ICSharpCode.Core
this.RightToLeft = RightToLeft.Inherit; this.RightToLeft = RightToLeft.Inherit;
this.caller = caller; this.caller = caller;
this.codon = codon; this.codon = codon;
UpdateText();
} }
protected override void OnClick(System.EventArgs e) protected override void OnClick(System.EventArgs e)
@ -79,10 +80,15 @@ namespace ICSharpCode.Core
if (codon != null) { if (codon != null) {
ConditionFailedAction failedAction = codon.GetFailedAction(caller); ConditionFailedAction failedAction = codon.GetFailedAction(caller);
this.Visible = failedAction != ConditionFailedAction.Exclude; this.Visible = failedAction != ConditionFailedAction.Exclude;
Text = StringParser.Parse(codon.Properties["label"]);
Checked = MenuCommand.IsChecked; Checked = MenuCommand.IsChecked;
} }
} }
public virtual void UpdateText()
{
if (codon != null) {
Text = StringParser.Parse(codon.Properties["label"]);
}
}
} }
} }

14
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs

@ -20,7 +20,6 @@ namespace ICSharpCode.Core
Codon codon; Codon codon;
ICommand menuCommand = null; ICommand menuCommand = null;
string description = ""; string description = "";
string localizedText = null;
public string Description { public string Description {
get { get {
@ -88,6 +87,7 @@ namespace ICSharpCode.Core
CreateCommand(); CreateCommand();
} }
UpdateText();
if (codon.Properties.Contains("shortcut")) { if (codon.Properties.Contains("shortcut")) {
ShortcutKeys = ParseShortcut(codon.Properties["shortcut"]); ShortcutKeys = ParseShortcut(codon.Properties["shortcut"]);
} }
@ -154,13 +154,13 @@ namespace ICSharpCode.Core
Image = ResourceService.GetBitmap(codon.Properties["icon"]); Image = ResourceService.GetBitmap(codon.Properties["icon"]);
} }
Visible = GetVisible(); 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"]);
} }
} }
} }

4
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs

@ -39,5 +39,9 @@ namespace ICSharpCode.Core
this.Visible = failedAction != ConditionFailedAction.Exclude; this.Visible = failedAction != ConditionFailedAction.Exclude;
} }
} }
public virtual void UpdateText()
{
}
} }
} }

6
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"; string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command";
bool createCommand = codon.Properties["loadclasslazy"] == "false";
switch (type) { switch (type) {
case "Separator": case "Separator":
return new MenuSeparator(codon, caller); return new MenuSeparator(codon, caller);
case "CheckBox": case "CheckBox":
return new MenuCheckBox(codon, caller); return new MenuCheckBox(codon, caller);
case "Item": case "Item":
return new MenuCommand(codon, caller); return new MenuCommand(codon, caller, createCommand);
case "Command": case "Command":
return new MenuCommand(codon, caller, false); return new MenuCommand(codon, caller, createCommand);
case "Menu": case "Menu":
return new Menu(codon, caller, subItems); return new Menu(codon, caller, subItems);
case "Builder": case "Builder":

21
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")) { if (Image == null && codon.Properties.Contains("icon")) {
Image = ResourceService.GetBitmap(codon.Properties["icon"]); Image = ResourceService.GetBitmap(codon.Properties["icon"]);
} }
UpdateText();
UpdateStatus(); UpdateStatus();
} }
@ -84,12 +85,22 @@ namespace ICSharpCode.Core
{ {
if (codon != null) { if (codon != null) {
ConditionFailedAction failedAction = codon.GetFailedAction(caller); ConditionFailedAction failedAction = codon.GetFailedAction(caller);
this.Visible = failedAction != ConditionFailedAction.Exclude; bool isVisible = failedAction != ConditionFailedAction.Exclude;
if (codon.Properties.Contains("tooltip")) { if (isVisible != Visible)
ToolTipText = StringParser.Parse(codon.Properties["tooltip"]); 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"]);
} }
} }
} }

17
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs

@ -57,6 +57,7 @@ namespace ICSharpCode.Core
if (menuCommand == null) { if (menuCommand == null) {
throw new NullReferenceException("Can't create combobox menu command"); throw new NullReferenceException("Can't create combobox menu command");
} }
UpdateText();
UpdateStatus(); UpdateStatus();
} }
@ -100,18 +101,20 @@ namespace ICSharpCode.Core
if (codon != null) { if (codon != null) {
ConditionFailedAction failedAction = codon.GetFailedAction(caller); ConditionFailedAction failedAction = codon.GetFailedAction(caller);
isVisible &= failedAction != ConditionFailedAction.Exclude; 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) { if (base.Visible != isVisible) {
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"]);
}
} }
} }
} }

25
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs

@ -18,27 +18,16 @@ namespace ICSharpCode.Core
{ {
object caller; object caller;
Codon codon; Codon codon;
string description = String.Empty;
string localizedText = String.Empty;
ICommand menuCommand = null; ICommand menuCommand = null;
public string Description { public ToolBarCommand(Codon codon, object caller, bool createCommand)
get {
return description;
}
set {
description = value;
}
}
public ToolBarCommand(Codon codon, object caller)
{ {
this.RightToLeft = RightToLeft.Inherit; this.RightToLeft = RightToLeft.Inherit;
this.caller = caller; this.caller = caller;
this.codon = codon; this.codon = codon;
if (codon.Properties.Contains("tooltip")) { if (createCommand) {
localizedText = codon.Properties["tooltip"]; menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]);
} }
if (Image == null && codon.Properties.Contains("icon")) { if (Image == null && codon.Properties.Contains("icon")) {
@ -46,6 +35,7 @@ namespace ICSharpCode.Core
} }
UpdateStatus(); UpdateStatus();
UpdateText();
} }
protected override void OnClick(System.EventArgs e) protected override void OnClick(System.EventArgs e)
@ -97,8 +87,13 @@ namespace ICSharpCode.Core
base.Visible = isVisible; base.Visible = isVisible;
} }
} }
}
ToolTipText = StringParser.Parse(localizedText); public virtual void UpdateText()
{
if (codon != null) {
ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
}
} }
} }
} }

23
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs

@ -18,35 +18,21 @@ namespace ICSharpCode.Core
{ {
object caller; object caller;
Codon codon; Codon codon;
string description = String.Empty;
string localizedText = String.Empty;
ICommand menuCommand = null; ICommand menuCommand = null;
public string Description {
get {
return description;
}
set {
description = value;
}
}
public ToolBarDropDownButton(Codon codon, object caller) public ToolBarDropDownButton(Codon codon, object caller)
{ {
this.RightToLeft = RightToLeft.Inherit; this.RightToLeft = RightToLeft.Inherit;
this.caller = caller; this.caller = caller;
this.codon = codon; this.codon = codon;
if (codon.Properties.Contains("tooltip")) {
localizedText = codon.Properties["tooltip"];
}
if (Image == null && codon.Properties.Contains("icon")) { if (Image == null && codon.Properties.Contains("icon")) {
Image = ResourceService.GetBitmap(codon.Properties["icon"]); Image = ResourceService.GetBitmap(codon.Properties["icon"]);
} }
menuCommand = codon.AddIn.CreateObject(codon.Properties["class"]) as ICommand; menuCommand = codon.AddIn.CreateObject(codon.Properties["class"]) as ICommand;
menuCommand.Owner = this; menuCommand.Owner = this;
UpdateStatus(); UpdateStatus();
UpdateText();
} }
protected override void OnClick(System.EventArgs e) 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() public virtual void UpdateStatus()
{ {
@ -89,7 +81,6 @@ namespace ICSharpCode.Core
base.Visible = isVisible; base.Visible = isVisible;
} }
} }
ToolTipText = StringParser.Parse(localizedText);
} }
} }
} }

4
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs

@ -39,5 +39,9 @@ namespace ICSharpCode.Core
this.Visible = failedAction != ConditionFailedAction.Exclude; this.Visible = failedAction != ConditionFailedAction.Exclude;
} }
} }
public virtual void UpdateText()
{
}
} }
} }

4
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"; string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Item";
bool createCommand = codon.Properties["loadclasslazy"] == "false";
switch (type) { switch (type) {
case "Separator": case "Separator":
return new ToolBarSeparator(codon, caller); return new ToolBarSeparator(codon, caller);
case "CheckBox": case "CheckBox":
return new ToolBarCheckBox(codon, caller); return new ToolBarCheckBox(codon, caller);
case "Item": case "Item":
return new ToolBarCommand(codon, caller); return new ToolBarCommand(codon, caller, createCommand);
case "ComboBox": case "ComboBox":
return new ToolBarComboBox(codon, caller); return new ToolBarComboBox(codon, caller);
case "DropDownButton": case "DropDownButton":

32
src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs

@ -42,9 +42,8 @@ namespace ICSharpCode.Core
RegisterAssembly(assembly); RegisterAssembly(assembly);
} }
// PropertyService.PropertyChanged += new PropertyChangedEventHandler(ChangeProperty); PropertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange);
LoadLanguageResources(PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name));
LoadLanguageResources();
} }
static Hashtable userStrings = null; static Hashtable userStrings = null;
@ -63,17 +62,19 @@ namespace ICSharpCode.Core
static ArrayList assemblies = new ArrayList(); static ArrayList assemblies = new ArrayList();
// static void ChangeProperty(object sender, PropertyChangedEventArgs e) static void OnPropertyChange(object sender, PropertyChangedEventArgs e)
// {
// if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) {
// LoadLanguageResources();
// }
// }
static void LoadLanguageResources()
{ {
string language = PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name); if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) {
LoadLanguageResources((string)e.NewValue);
if (LanguageChanged != null)
LanguageChanged(null, e);
}
}
public static event EventHandler LanguageChanged;
static void LoadLanguageResources(string language)
{
try { try {
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language); Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
} catch (Exception) { } catch (Exception) {
@ -205,8 +206,6 @@ namespace ICSharpCode.Core
} }
static string lastLanguage = "";
/// <summary> /// <summary>
/// Returns a string from the resource database, it handles localization /// Returns a string from the resource database, it handles localization
/// transparent for the user. /// transparent for the user.
@ -222,11 +221,6 @@ namespace ICSharpCode.Core
/// </exception> /// </exception>
public static string GetString(string name) 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) { if (localUserStrings != null && localUserStrings[name] != null) {
return localUserStrings[name].ToString(); return localUserStrings[name].ToString();
} }

43
src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs

@ -13,38 +13,38 @@ namespace ICSharpCode.Core
{ {
public static class ToolbarService public static class ToolbarService
{ {
// readonly static string toolBarPath = "/SharpDevelop/Workbench/ToolBar";
public static ToolStripItem[] CreateToolStripItems(object owner, AddInTreeNode treeNode) public static ToolStripItem[] CreateToolStripItems(object owner, AddInTreeNode treeNode)
{ {
return (ToolStripItem[])(treeNode.BuildChildItems(owner)).ToArray(typeof(ToolStripItem)); 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) public static ToolStrip CreateToolStrip(object owner, AddInTreeNode treeNode)
{ {
ToolStrip toolStrip = new ToolStrip(); ToolStrip toolStrip = new ToolStrip();
toolStrip.Items.AddRange(CreateToolStripItems(owner, treeNode)); toolStrip.Items.AddRange(CreateToolStripItems(owner, treeNode));
UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added
new LanguageChangeWatcher(toolStrip);
return 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) public static ToolStrip CreateToolStrip(object owner, string addInTreePath)
{ {
ToolStrip toolStrip = new ToolStrip(); return CreateToolStrip(owner, AddInTree.GetTreeNode(addInTreePath));
toolStrip.Items.AddRange(CreateToolStripItems(owner, addInTreePath));
UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added
return toolStrip;
} }
public static ToolStrip[] CreateToolbars(object owner, string addInTreePath) public static ToolStrip[] CreateToolbars(object owner, string addInTreePath)
@ -72,5 +72,14 @@ namespace ICSharpCode.Core
} }
toolStrip.Refresh(); toolStrip.Refresh();
} }
public static void UpdateToolbarText(ToolStrip toolStrip)
{
foreach (ToolStripItem item in toolStrip.Items) {
if (item is IStatusUpdate) {
((IStatusUpdate)item).UpdateText();
}
}
}
} }
} }

4
src/SharpDevelop.sln

@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00 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}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
ProjectSection(SolutionItems) = postProject ProjectSection(SolutionItems) = postProject
EndProjectSection EndProjectSection
@ -84,8 +84,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Co
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
EndProject EndProject
Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "{970116b0-f96b-4257-8579-986b9cf086f5}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU

Loading…
Cancel
Save