Browse Source

Porting ResourceEditor context menu commands.

pull/517/head
Andreas Weizel 12 years ago
parent
commit
30b7002e33
  1. 32
      src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin
  2. 6
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddNewFileCommand.cs
  3. 6
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs
  4. 6
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs
  5. 29
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/EditCommentCommand.cs
  6. 12
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/RenameEntryCommand.cs
  7. 115
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/SaveEntryAsCommand.cs
  8. 45
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceEditorViewModel.cs
  9. 12
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceItem.cs
  10. 7
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/IResourceEditorView.cs
  11. 31
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml
  12. 25
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml.cs

32
src/AddIns/DisplayBindings/ResourceEditor/Project/ResourceEditor.addin

@ -30,30 +30,28 @@ @@ -30,30 +30,28 @@
<Path name="/SharpDevelop/ResourceEditor/ResourceList/ContextMenu">
<MenuItem id="AddStringEntry"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.AddStringEntry}"
class="ResourceEditor.AddStringCommand"
class="ResourceEditor.Commands.AddStringCommand"
shortcut = "Insert" />
<MenuItem id="AddFile"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.AddFiles}"
class="ResourceEditor.AddNewFileCommand" />
class="ResourceEditor.Commands.AddNewFileCommand" />
<MenuItem id="Separator1"
type = "Separator" />
<Condition name = "Ownerstate" ownerstate="ItemsSelected" action="Disable">
<MenuItem id="SaveAs"
label="${res:XML.MainMenu.FileMenu.SaveAs}"
class="ResourceEditor.SaveEntryAsCommand" />
<MenuItem id="Rename"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.Rename}"
class="ResourceEditor.RenameEntryCommand"
shortcut="F2" />
<MenuItem id="CopyResourceName"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.CopyResourceName}"
class="ResourceEditor.CopyResourceNameCommand" />
<MenuItem id="EditResourceComment"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}"
class="ResourceEditor.EditCommentCommand" />
</Condition>
<MenuItem id="SaveAs"
label="${res:XML.MainMenu.FileMenu.SaveAs}"
class="ResourceEditor.Commands.SaveEntryAsCommand" />
<MenuItem id="Rename"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.Rename}"
class="ResourceEditor.Commands.RenameEntryCommand"
shortcut="F2" />
<MenuItem id="CopyResourceName"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.CopyResourceName}"
class="ResourceEditor.Commands.CopyResourceNameCommand" />
<MenuItem id="EditResourceComment"
label="${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}"
class="ResourceEditor.Commands.EditCommentCommand" />
<Include id = "Delete" item = "/SharpDevelop/Workbench/MainMenu/Edit/Delete"/>
<MenuItem id = "Separator2" type = "Separator"/>

6
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddNewFileCommand.cs

@ -26,11 +26,11 @@ using ICSharpCode.SharpDevelop.Gui; @@ -26,11 +26,11 @@ using ICSharpCode.SharpDevelop.Gui;
using Microsoft.Win32;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class AddNewFileCommand : AbstractMenuCommand
class AddNewFileCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent) SD.Workbench.ActiveViewContent).ResourceEditor;

6
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs

@ -22,11 +22,11 @@ using ICSharpCode.Core; @@ -22,11 +22,11 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class AddStringCommand : AbstractMenuCommand
class AddStringCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;

6
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/CopyResourceNameCommand.cs

@ -23,11 +23,11 @@ using ICSharpCode.SharpDevelop; @@ -23,11 +23,11 @@ using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class CopyResourceNameCommand : AbstractMenuCommand
class CopyResourceNameCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;

29
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/EditCommentCommand.cs

@ -17,29 +17,28 @@ @@ -17,29 +17,28 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class EditCommentCommand : AbstractMenuCommand
class EditCommentCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent) SD.Workbench.ActiveViewContent).ResourceEditor;
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
// TODO Reactivate this
// if (editor.ResourceList.SelectedItems.Count != 0) {
// var item = editor.ResourceList.SelectedItems[0].SubItems[3];
// string resourceName = editor.ResourceList.SelectedItems[0].Text;
// string newValue = SD.MessageService.ShowInputBox("${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}",
// "${res:ResourceEditor.ResourceEdit.ContextMenu.EditCommentText}",
// item.Text);
// if (newValue != null && newValue != item.Text) {
// editor.ResourceList.SetCommentValue(resourceName, newValue);
// }
// }
if (editor.SelectedItems.Count != 0) {
var selectedItem = editor.SelectedItems.OfType<ResourceEditor.ViewModels.ResourceItem>().FirstOrDefault();
string newValue = SD.MessageService.ShowInputBox("${res:ResourceEditor.ResourceEdit.ContextMenu.EditComment}",
"${res:ResourceEditor.ResourceEdit.ContextMenu.EditCommentText}",
selectedItem.Comment);
if (newValue != null && newValue != selectedItem.Comment) {
selectedItem.Comment = newValue;
}
}
}
}
}

12
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/RenameEntryCommand.cs

@ -21,18 +21,14 @@ using ICSharpCode.Core; @@ -21,18 +21,14 @@ using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class RenameEntryCommand : AbstractMenuCommand
class RenameEntryCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
// TODO Reactivate this
// if(editor.ResourceList.SelectedItems.Count != 0) {
// editor.ResourceList.SelectedItems[0].BeginEdit();
// }
editor.StartEditing();
}
}
}

115
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/SaveEntryAsCommand.cs

@ -19,77 +19,72 @@ @@ -19,77 +19,72 @@
using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Gui;
using Microsoft.Win32;
using ResourceEditor.ViewModels;
namespace ResourceEditor
namespace ResourceEditor.Commands
{
class SaveEntryAsCommand : AbstractMenuCommand
class SaveEntryAsCommand : SimpleCommand
{
public override void Run()
public override void Execute(object parameter)
{
ResourceEditorViewModel editor = ((ResourceEditViewContent)SD.Workbench.ActiveViewContent).ResourceEditor;
// TODO Reactivate this
// ResourceList list = editor.ResourceList;
//
// if(list.SelectedItems.Count != 1) {
// return;
// }
//
// string key = list.SelectedItems[0].Text;
// if(! list.Resources.ContainsKey(key)) {
// return;
// }
//
// ResourceItem item = list.Resources[key];
// SaveFileDialog sdialog = new SaveFileDialog();
// sdialog.AddExtension = true;
// sdialog.FileName = key;
//
// if (item.ResourceValue is Bitmap) {
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ImageFiles} (*.png)|*.png");
// sdialog.DefaultExt = ".png";
// } else if (item.ResourceValue is Icon) {
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.Icons}|*.ico");
// sdialog.DefaultExt = ".ico";
// } else if (item.ResourceValue is Cursor) {
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.CursorFiles} (*.cur)|*.cur");
// sdialog.DefaultExt = ".cur";
// } else if (item.ResourceValue is byte[]){
// sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.BinaryFiles} (*.*)|*.*");
// sdialog.DefaultExt = ".bin";
// } else {
// return;
// }
//
// DialogResult dr = sdialog.ShowDialog(SD.WinForms.MainWin32Window);
// sdialog.Dispose();
// if (dr != DialogResult.OK) {
// return;
// }
//
// try {
// if (item.ResourceValue is Icon) {
// FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
// ((Icon)item.ResourceValue).Save(fstr);
// fstr.Close();
// } else if(item.ResourceValue is Image) {
// Image img = (Image)item.ResourceValue;
// img.Save(sdialog.FileName);
// } else {
// FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
// BinaryWriter wr = new BinaryWriter(fstr);
// wr.Write((byte[])item.ResourceValue);
// fstr.Close();
// }
// } catch(Exception ex) {
// MessageBox.Show(ex.Message, "Can't save resource to " + sdialog.FileName, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
// }
if (editor.SelectedItems.Count != 1) {
return;
}
ResourceItem firstSelectedItem = (editor.SelectedItems[0] as ResourceItem);
if (firstSelectedItem == null) {
return;
}
var sdialog = new Microsoft.Win32.SaveFileDialog();
sdialog.AddExtension = true;
sdialog.FileName = firstSelectedItem.Name;
if (firstSelectedItem.ResourceValue is System.Drawing.Bitmap) {
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.ImageFiles} (*.png)|*.png");
sdialog.DefaultExt = ".png";
} else if (firstSelectedItem.ResourceValue is System.Drawing.Icon) {
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.Icons}|*.ico");
sdialog.DefaultExt = ".ico";
} else if (firstSelectedItem.ResourceValue is System.Windows.Forms.Cursor) {
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.CursorFiles} (*.cur)|*.cur");
sdialog.DefaultExt = ".cur";
} else if (firstSelectedItem.ResourceValue is byte[]) {
sdialog.Filter = StringParser.Parse("${res:SharpDevelop.FileFilter.BinaryFiles} (*.*)|*.*");
sdialog.DefaultExt = ".bin";
} else {
return;
}
bool? dr = sdialog.ShowDialog();
if (dr.HasValue && dr.Value) {
return;
}
try {
if (firstSelectedItem.ResourceValue is Icon) {
FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
((Icon)firstSelectedItem.ResourceValue).Save(fstr);
fstr.Close();
} else if (firstSelectedItem.ResourceValue is Image) {
Image img = (Image)firstSelectedItem.ResourceValue;
img.Save(sdialog.FileName);
} else {
FileStream fstr = new FileStream(sdialog.FileName, FileMode.Create);
BinaryWriter wr = new BinaryWriter(fstr);
wr.Write((byte[])firstSelectedItem.ResourceValue);
fstr.Close();
}
} catch (Exception ex) {
SD.MessageService.ShowWarning("Can't save resource to " + sdialog.FileName + ": " + ex.Message);
}
}
}
}

45
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceEditorViewModel.cs

@ -60,6 +60,8 @@ namespace ResourceEditor.ViewModels @@ -60,6 +60,8 @@ namespace ResourceEditor.ViewModels
readonly ObservableCollection<ResourceItem> metadataItems;
readonly Dictionary<ResourceItemEditorType, IResourceItemView> itemViews;
bool longUpdateRunning;
ResourceItem editedResourceItem;
string originalNameOfEditedItem;
IResourceEditorView view;
@ -109,7 +111,9 @@ namespace ResourceEditor.ViewModels @@ -109,7 +111,9 @@ namespace ResourceEditor.ViewModels
}
set {
if (view != null) {
view.SelectionChanged += View_SelectionChanged;
view.SelectionChanged -= View_SelectionChanged;
view.EditingFinished -= View_EditingFinished;
view.EditingCancelled -= View_EditingCancelled;
ResourceItems.CollectionChanged -= ResourceItems_CollectionChanged;
}
@ -129,6 +133,8 @@ namespace ResourceEditor.ViewModels @@ -129,6 +133,8 @@ namespace ResourceEditor.ViewModels
return true;
};
view.SelectionChanged += View_SelectionChanged;
view.EditingFinished += View_EditingFinished;
view.EditingCancelled += View_EditingCancelled;
ResourceItems.CollectionChanged += ResourceItems_CollectionChanged;
}
}
@ -190,6 +196,43 @@ namespace ResourceEditor.ViewModels @@ -190,6 +196,43 @@ namespace ResourceEditor.ViewModels
OnChangedDirtyState(true);
}
public void StartEditing()
{
if (editedResourceItem != null) {
editedResourceItem.IsEditing = false;
editedResourceItem = null;
originalNameOfEditedItem = null;
}
// Start editing currently selected item
var firstSelectedItem = SelectedItems.OfType<ResourceItem>().FirstOrDefault();
if (firstSelectedItem != null) {
editedResourceItem = firstSelectedItem;
originalNameOfEditedItem = editedResourceItem.Name;
firstSelectedItem.IsEditing = true;
}
}
void View_EditingFinished(object sender, EventArgs e)
{
if (editedResourceItem != null) {
editedResourceItem.IsEditing = false;
editedResourceItem = null;
originalNameOfEditedItem = null;
MakeDirty();
}
}
void View_EditingCancelled(object sender, EventArgs e)
{
if (editedResourceItem != null) {
editedResourceItem.IsEditing = false;
editedResourceItem.Name = originalNameOfEditedItem;
editedResourceItem = null;
originalNameOfEditedItem = null;
}
}
void StartUpdate()
{
// When loading many items at once, temporarily unbind view from model

12
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceItem.cs

@ -46,6 +46,7 @@ namespace ResourceEditor.ViewModels @@ -46,6 +46,7 @@ namespace ResourceEditor.ViewModels
string comment;
ResourceItemEditorType resourceType;
ResourceEditorViewModel resourceEditor;
bool isEditing;
public ResourceItem(ResourceEditorViewModel resourceEditor, string name, object resourceValue)
{
@ -112,6 +113,16 @@ namespace ResourceEditor.ViewModels @@ -112,6 +113,16 @@ namespace ResourceEditor.ViewModels
}
}
public bool IsEditing {
get {
return isEditing;
}
set {
isEditing = value;
OnPropertyChanged("IsEditing");
}
}
ResourceItemEditorType GetResourceTypeFromValue(object val)
{
if (this.ResourceValue == null) {
@ -148,6 +159,7 @@ namespace ResourceEditor.ViewModels @@ -148,6 +159,7 @@ namespace ResourceEditor.ViewModels
set {
comment = value;
OnPropertyChanged("Comment");
resourceEditor.MakeDirty();
}
}

7
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/IResourceEditorView.cs

@ -39,6 +39,10 @@ namespace ResourceEditor.Views @@ -39,6 +39,10 @@ namespace ResourceEditor.Views
get;
}
event EventHandler EditingStarted;
event EventHandler EditingFinished;
event EventHandler EditingCancelled;
void SetItemView(IResourceItemView view);
object DataContext {
@ -46,8 +50,7 @@ namespace ResourceEditor.Views @@ -46,8 +50,7 @@ namespace ResourceEditor.Views
set;
}
Predicate<ResourceEditor.ViewModels.ResourceItem> FilterPredicate
{
Predicate<ResourceEditor.ViewModels.ResourceItem> FilterPredicate {
get;
set;
}

31
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml

@ -56,7 +56,32 @@ @@ -56,7 +56,32 @@
</Style>
</Image.Style>
</Image>
<TextBlock Grid.Column="1" Text="{Binding Name}" />
<TextBlock Grid.Column="1" Text="{Binding Name}" VerticalAlignment="Top" HorizontalAlignment="Stretch">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsEditing}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBox Grid.Column="1"
Text="{Binding Name}" VerticalAlignment="Top" HorizontalAlignment="Stretch"
HorizontalScrollBarVisibility="Hidden">
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsEditing}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</Border>
</DataTemplate>
@ -115,7 +140,9 @@ @@ -115,7 +140,9 @@
Grid.Row="1"
ItemsSource="{Binding Source={StaticResource resourceItemListViewSource}}"
ItemContainerStyle="{StaticResource listViewItemStyle}"
MouseRightButtonUp="ListView_MouseRightButtonUp">
MouseRightButtonUp="ListView_MouseRightButtonUp"
KeyUp="ResourceItemsListView_KeyUp"
SelectionChanged="ListView_SelectionChanged">
<ListView.View>
<GridView>
<GridViewColumn

25
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml.cs

@ -41,6 +41,9 @@ namespace ResourceEditor.Views @@ -41,6 +41,9 @@ namespace ResourceEditor.Views
readonly CollectionViewSource itemCollectionViewSource;
public event EventHandler SelectionChanged;
public event EventHandler EditingStarted;
public event EventHandler EditingFinished;
public event EventHandler EditingCancelled;
public ResourceEditorView()
{
@ -73,13 +76,6 @@ namespace ResourceEditor.Views @@ -73,13 +76,6 @@ namespace ResourceEditor.Views
void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
// // Update SelectedItems collection
// foreach (var item in e.RemovedItems.OfType<ResourceEditor.ViewModels.ResourceItem>()) {
// SelectedItems.Remove(item);
// }
// foreach (var item in e.AddedItems.OfType<ResourceEditor.ViewModels.ResourceItem>()) {
// SelectedItems.Add(item);
// }
if (SelectionChanged != null) {
SelectionChanged(this, new EventArgs());
}
@ -124,5 +120,20 @@ namespace ResourceEditor.Views @@ -124,5 +120,20 @@ namespace ResourceEditor.Views
// Update CollectionViewSource to re-evaluate filter predicate
itemCollectionViewSource.View.Refresh();
}
void ResourceItemsListView_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter) {
if (EditingFinished != null) {
EditingFinished(this, new EventArgs());
}
} else if (e.Key == Key.Escape) {
if (EditingCancelled != null) {
EditingCancelled(this, new EventArgs());
}
}
e.Handled = false;
}
}
}
Loading…
Cancel
Save