Browse Source

Visual improvements in ResourceEditor: Resortable columns, better performance.

pull/517/head
Andreas Weizel 11 years ago
parent
commit
10def646f4
  1. 21
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/AddStringEntryCommand.cs
  2. 2
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/ResourceItemCommand.cs
  3. 62
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/ViewModels/ResourceEditorViewModel.cs
  4. 3
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/IResourceEditorView.cs
  5. 19
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml
  6. 12
      src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Views/ResourceEditorView.xaml.cs

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

@ -32,26 +32,7 @@ namespace ResourceEditor.Commands @@ -32,26 +32,7 @@ namespace ResourceEditor.Commands
public override void ExecuteWithResourceItems(System.Collections.Generic.IEnumerable<ResourceItem> resourceItems)
{
var editor = ResourceEditor;
int count = 1;
string newNameBase = "New string entry ";
string newName = newNameBase + count;
while (editor.ContainsResourceName(newName)) {
count++;
newName = newNameBase + count;
}
var selectedItem = GetSelectedItems().FirstOrDefault();
ResourceItem item = new ResourceItem(editor, newName, "");
item.IsNew = true;
if (selectedItem != null)
item.SortingCriteria = selectedItem.Name;
else
item.SortingCriteria = item.Name;
editor.ResourceItems.Add(item);
editor.SelectItem(item);
editor.StartEditing();
ResourceEditor.AddStringEntry();
}
}
}

2
src/AddIns/DisplayBindings/ResourceEditor/Project/Src/Commands/ResourceItemCommand.cs

@ -109,7 +109,7 @@ namespace ResourceEditor.Commands @@ -109,7 +109,7 @@ namespace ResourceEditor.Commands
{
var editor = ResourceEditor;
if (editor != null)
return editor.SelectedItems.OfType<ResourceItem>() ?? new ResourceItem[0];
return editor.GetSelectedItems();
return new ResourceItem[0];
}
}

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

@ -100,6 +100,11 @@ namespace ResourceEditor.ViewModels @@ -100,6 +100,11 @@ namespace ResourceEditor.ViewModels
}
}
public IEnumerable<ResourceItem> GetSelectedItems()
{
return SelectedItems.OfType<ResourceItem>() ?? new ResourceItem[0];
}
/// <summary>
/// Checks whether a resource name is existing in currently open file.
/// </summary>
@ -122,7 +127,8 @@ namespace ResourceEditor.ViewModels @@ -122,7 +127,8 @@ namespace ResourceEditor.ViewModels
set {
if (view != null) {
view.SelectionChanged -= View_SelectionChanged;
view.EditingStarted -= View_EditingStarted;
view.EditingStartRequested -= View_EditingStartRequested;
view.AddingNewItemRequested -= View_AddingNewItemRequested;
ResourceItems.CollectionChanged -= ResourceItems_CollectionChanged;
}
@ -142,7 +148,8 @@ namespace ResourceEditor.ViewModels @@ -142,7 +148,8 @@ namespace ResourceEditor.ViewModels
return true;
};
view.SelectionChanged += View_SelectionChanged;
view.EditingStarted += View_EditingStarted;
view.EditingStartRequested += View_EditingStartRequested;
view.AddingNewItemRequested += View_AddingNewItemRequested;
ResourceItems.CollectionChanged += ResourceItems_CollectionChanged;
}
}
@ -227,10 +234,38 @@ namespace ResourceEditor.ViewModels @@ -227,10 +234,38 @@ namespace ResourceEditor.ViewModels
}
}
void View_EditingStarted(object sender, EventArgs e)
void View_EditingStartRequested(object sender, EventArgs e)
{
StartEditing();
}
void View_AddingNewItemRequested(object sender, EventArgs e)
{
AddStringEntry();
}
public void AddStringEntry()
{
int count = 1;
string newNameBase = "New string entry ";
string newName = newNameBase + count;
while (ContainsResourceName(newName)) {
count++;
newName = newNameBase + count;
}
var selectedItem = GetSelectedItems().FirstOrDefault();
ResourceItem item = new ResourceItem(this, newName, "");
item.IsNew = true;
if (selectedItem != null)
item.SortingCriteria = selectedItem.Name;
else
item.SortingCriteria = item.Name;
ResourceItems.Add(item);
SelectItem(item);
StartEditing();
}
void StartUpdate()
{
@ -352,8 +387,6 @@ namespace ResourceEditor.ViewModels @@ -352,8 +387,6 @@ namespace ResourceEditor.ViewModels
public void Cut()
{
// if (resourceEditor.ResourceList.WriteProtected || resourceEditor.ResourceList.SelectedItems.Count < 1)
// return;
if (SelectedItems.Count == 0)
return;
@ -380,10 +413,6 @@ namespace ResourceEditor.ViewModels @@ -380,10 +413,6 @@ namespace ResourceEditor.ViewModels
public void Paste()
{
// if (resourceEditor.ResourceList.WriteProtected) {
// return;
// }
IDataObject dob = Clipboard.GetDataObject();
if (dob == null)
return;
@ -408,7 +437,7 @@ namespace ResourceEditor.ViewModels @@ -408,7 +437,7 @@ namespace ResourceEditor.ViewModels
item = new ResourceItem(this, newName, resourceValue);
}
resourceItems.Add(item);
// TODO Set selection to new element?
SelectItem(item);
}
}
}
@ -437,15 +466,18 @@ namespace ResourceEditor.ViewModels @@ -437,15 +466,18 @@ namespace ResourceEditor.ViewModels
public void Delete()
{
// if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0)
// return;
if (SelectedItems.Count > 0) {
if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}"))
return;
foreach (var item in SelectedItems.OfType<ResourceItem>().ToList()) {
resourceItems.Remove(item);
if (SelectedItems.Count == resourceItems.Count) {
// Little performance improvement for the case "Select All" + "Delete"
SelectedItems.Clear();
resourceItems.Clear();
} else {
foreach (var item in SelectedItems.OfType<ResourceItem>().ToList()) {
resourceItems.Remove(item);
}
}
}
}

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

@ -42,7 +42,8 @@ namespace ResourceEditor.Views @@ -42,7 +42,8 @@ namespace ResourceEditor.Views
void SelectItem(ResourceItem item);
event EventHandler EditingStarted;
event EventHandler EditingStartRequested;
event EventHandler AddingNewItemRequested;
void SetItemView(IResourceItemView view);

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

@ -128,19 +128,26 @@ @@ -128,19 +128,26 @@
ItemContainerStyle="{StaticResource listViewItemStyle}"
MouseRightButtonUp="ListView_MouseRightButtonUp"
KeyUp="ResourceItemsListView_KeyUp"
SelectionChanged="ListView_SelectionChanged">
SelectionChanged="ListView_SelectionChanged"
VirtualizingStackPanel.IsVirtualizing="True"
core:SortableGridViewColumn.SortMode="Automatic"
core:GridViewColumnAutoSize.AutoWidth="40%;15%;30%;15%">
<ListView.View>
<GridView>
<GridViewColumn
<GridView AllowsColumnReorder="False">
<core:SortableGridViewColumn
SortBy="SortingCriteria"
Header="{core:Localize Global.Name}"
CellTemplate="{StaticResource resourceItemNameTemplate}" />
<GridViewColumn
<core:SortableGridViewColumn
SortBy="ResourceType"
Header="{core:Localize ResourceEditor.ResourceEdit.TypeColumn}"
CellTemplate="{StaticResource resourceItemTypeTemplate}" />
<GridViewColumn
<core:SortableGridViewColumn
SortBy="Content"
Header="{core:Localize ResourceEditor.ResourceEdit.ContentColumn}"
CellTemplate="{StaticResource resourceItemContentTemplate}" />
<GridViewColumn
<core:SortableGridViewColumn
SortBy="Comment"
Header="{core:Localize ResourceEditor.ResourceEdit.CommentColumn}"
CellTemplate="{StaticResource resourceItemCommentTemplate}" />
</GridView>

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

@ -36,7 +36,8 @@ namespace ResourceEditor.Views @@ -36,7 +36,8 @@ namespace ResourceEditor.Views
readonly CollectionViewSource itemCollectionViewSource;
public event EventHandler SelectionChanged;
public event EventHandler EditingStarted;
public event EventHandler EditingStartRequested;
public event EventHandler AddingNewItemRequested;
public ResourceEditorView()
{
@ -126,8 +127,13 @@ namespace ResourceEditor.Views @@ -126,8 +127,13 @@ namespace ResourceEditor.Views
void ResourceItemsListView_KeyUp(object sender, KeyEventArgs e)
{
if (e.Key == Key.F2) {
if (EditingStarted != null) {
EditingStarted(this, new EventArgs());
if (EditingStartRequested != null) {
EditingStartRequested(this, new EventArgs());
}
}
if (e.Key == Key.Insert) {
if (AddingNewItemRequested != null) {
AddingNewItemRequested(this, new EventArgs());
}
}

Loading…
Cancel
Save