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 20 years ago
parent
commit
71f2d912ec
  1. 15
      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. 157
      src/Main/Base/Project/Src/Commands/EditCommands.cs
  8. 6
      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. 25
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs
  17. 8
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs
  18. 12
      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. 19
      src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs
  22. 13
      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

15
AddIns/ICSharpCode.SharpDevelop.addin

@ -668,27 +668,33 @@ @@ -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 @@ @@ -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"
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"/>
</Condition>
<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">

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

@ -11,6 +11,7 @@ @@ -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 @@ @@ -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 @@ @@ -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" />

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

@ -1,4 +1,7 @@ @@ -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>

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

@ -6,6 +6,8 @@ @@ -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 @@ @@ -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" />

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

@ -1,3 +1,6 @@ @@ -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>

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

@ -183,7 +183,7 @@ @@ -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" />

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

@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -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 @@ -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();
}
}
}
}
@ -62,114 +72,151 @@ namespace ICSharpCode.SharpDevelop.Commands @@ -62,114 +72,151 @@ 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;
}
public override void Run()
private class TextBoxWrapper : IClipboardHandler
{
if (IsEnabled) {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
editable.Cut();
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 class Copy : AbstractMenuCommand
{
public override bool IsEnabled {
get {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
return editable.EnableCopy;
public bool EnableDelete {
get { return !textBox.ReadOnly && textBox.SelectionLength > 0; }
}
return false;
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.Copy();
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 Paste : 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.EnablePaste;
return GetEnabled(editable);
}
return false;
}
}
public override void Run()
{
if (IsEnabled) {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable == null)
editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl);
if (editable != null) {
editable.Paste();
Run(editable);
}
}
}
}
public class Delete : AbstractMenuCommand
public class Cut : AbstractClipboardCommand
{
public override bool IsEnabled {
get {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
return editable.EnableDelete;
protected override bool GetEnabled(IClipboardHandler editable) {
return editable.EnableCut;
}
return false;
protected override void Run(IClipboardHandler editable) {
editable.Cut();
}
}
public override void Run()
public class Copy : AbstractClipboardCommand
{
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
editable.Delete();
protected override bool GetEnabled(IClipboardHandler editable) {
return editable.EnableCopy;
}
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;
protected override bool GetEnabled(IClipboardHandler editable) {
return editable.EnablePaste;
}
return false;
protected override void Run(IClipboardHandler editable) {
editable.Paste();
}
}
public override void Run()
public class Delete : AbstractClipboardCommand
{
if (IsEnabled) {
IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
if (editable != null) {
editable.SelectAll();
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

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

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

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

@ -19,10 +19,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -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)

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

@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding @@ -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 {

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

@ -40,15 +40,13 @@ namespace ICSharpCode.SharpDevelop.Project @@ -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 @@ -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)));
}
}

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

@ -230,6 +230,11 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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) {

16
src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs

@ -38,9 +38,24 @@ namespace ICSharpCode.SharpDevelop.Gui @@ -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 @@ -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;

2
src/Main/Base/Project/Src/Services/File/FileService.cs

@ -222,6 +222,8 @@ namespace ICSharpCode.Core @@ -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)

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

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

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

@ -28,7 +28,8 @@ namespace ICSharpCode.Core @@ -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 @@ -40,7 +41,10 @@ namespace ICSharpCode.Core
foreach (object item in subItems) {
if (item is ToolStripItem) {
DropDownItems.Add((ToolStripItem)item);
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 @@ -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 @@ -81,8 +73,13 @@ namespace ICSharpCode.Core
ConditionFailedAction failedAction = codon.GetFailedAction(caller);
this.Visible = failedAction != ConditionFailedAction.Exclude;
}
}
public virtual void UpdateText()
{
if (codon != null) {
Text = StringParser.Parse(codon.Properties["label"]);
}
}
}
}

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

@ -52,6 +52,7 @@ namespace ICSharpCode.Core @@ -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,9 +80,14 @@ namespace ICSharpCode.Core @@ -79,9 +80,14 @@ namespace ICSharpCode.Core
if (codon != null) {
ConditionFailedAction failedAction = codon.GetFailedAction(caller);
this.Visible = failedAction != ConditionFailedAction.Exclude;
Checked = MenuCommand.IsChecked;
}
}
public virtual void UpdateText()
{
if (codon != null) {
Text = StringParser.Parse(codon.Properties["label"]);
Checked = MenuCommand.IsChecked;
}
}
}

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

@ -20,7 +20,6 @@ namespace ICSharpCode.Core @@ -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 @@ -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 @@ -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"]);
}
}
}

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

@ -39,5 +39,9 @@ namespace ICSharpCode.Core @@ -39,5 +39,9 @@ namespace ICSharpCode.Core
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 @@ -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":

19
src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs

@ -58,6 +58,7 @@ namespace ICSharpCode.Core @@ -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 @@ -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;
}
}
public virtual void UpdateText()
{
Text = StringParser.Parse(codon.Properties["label"]);
if (codon.Properties.Contains("tooltip")) {
ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
}
}
}

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

@ -57,6 +57,7 @@ namespace ICSharpCode.Core @@ -57,6 +57,7 @@ namespace ICSharpCode.Core
if (menuCommand == null) {
throw new NullReferenceException("Can't create combobox menu command");
}
UpdateText();
UpdateStatus();
}
@ -100,7 +101,14 @@ namespace ICSharpCode.Core @@ -100,7 +101,14 @@ namespace ICSharpCode.Core
if (codon != null) {
ConditionFailedAction failedAction = codon.GetFailedAction(caller);
isVisible &= failedAction != ConditionFailedAction.Exclude;
}
if (base.Visible != isVisible) {
Visible = isVisible;
}
}
public virtual void UpdateText()
{
if (codon.Properties.Contains("label")) {
Text = StringParser.Parse(codon.Properties["label"]);
}
@ -108,10 +116,5 @@ namespace ICSharpCode.Core @@ -108,10 +116,5 @@ namespace ICSharpCode.Core
ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
}
}
if (base.Visible != isVisible) {
Visible = isVisible;
}
}
}
}

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

@ -18,27 +18,16 @@ namespace ICSharpCode.Core @@ -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 @@ -46,6 +35,7 @@ namespace ICSharpCode.Core
}
UpdateStatus();
UpdateText();
}
protected override void OnClick(System.EventArgs e)
@ -97,8 +87,13 @@ namespace ICSharpCode.Core @@ -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"]);
}
}
}
}

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

@ -18,35 +18,21 @@ namespace ICSharpCode.Core @@ -18,35 +18,21 @@ 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 ToolBarDropDownButton(Codon codon, object caller)
{
this.RightToLeft = RightToLeft.Inherit;
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 @@ -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 @@ -89,7 +81,6 @@ namespace ICSharpCode.Core
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 @@ -39,5 +39,9 @@ namespace ICSharpCode.Core
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 @@ -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":

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

@ -42,9 +42,8 @@ namespace ICSharpCode.Core @@ -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 @@ -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 LoadLanguageResources()
static void OnPropertyChange(object sender, PropertyChangedEventArgs e)
{
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 {
Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
} catch (Exception) {
@ -205,8 +206,6 @@ namespace ICSharpCode.Core @@ -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 @@ -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();
}

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

@ -13,38 +13,38 @@ namespace ICSharpCode.Core @@ -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 @@ -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();
}
}
}
}
}

4
src/SharpDevelop.sln

@ -1,5 +1,5 @@ @@ -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 @@ -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

Loading…
Cancel
Save