Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 10def64

Browse files
committed
Visual improvements in ResourceEditor: Resortable columns, better performance.
1 parent 7e3dd53 commit 10def64

File tree

6 files changed

+73
-46
lines changed

6 files changed

+73
-46
lines changed

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

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,26 +32,7 @@ public override bool EmptySelectionAllowed {
3232

3333
public override void ExecuteWithResourceItems(System.Collections.Generic.IEnumerable<ResourceItem> resourceItems)
3434
{
35-
var editor = ResourceEditor;
36-
int count = 1;
37-
string newNameBase = "New string entry ";
38-
string newName = newNameBase + count;
39-
40-
while (editor.ContainsResourceName(newName)) {
41-
count++;
42-
newName = newNameBase + count;
43-
}
44-
45-
var selectedItem = GetSelectedItems().FirstOrDefault();
46-
ResourceItem item = new ResourceItem(editor, newName, "");
47-
item.IsNew = true;
48-
if (selectedItem != null)
49-
item.SortingCriteria = selectedItem.Name;
50-
else
51-
item.SortingCriteria = item.Name;
52-
editor.ResourceItems.Add(item);
53-
editor.SelectItem(item);
54-
editor.StartEditing();
35+
ResourceEditor.AddStringEntry();
5536
}
5637
}
5738
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected IEnumerable<ResourceItem> GetSelectedItems()
109109
{
110110
var editor = ResourceEditor;
111111
if (editor != null)
112-
return editor.SelectedItems.OfType<ResourceItem>() ?? new ResourceItem[0];
112+
return editor.GetSelectedItems();
113113
return new ResourceItem[0];
114114
}
115115
}

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

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ public ObservableCollection<ResourceItem> ResourceItems {
100100
}
101101
}
102102

103+
public IEnumerable<ResourceItem> GetSelectedItems()
104+
{
105+
return SelectedItems.OfType<ResourceItem>() ?? new ResourceItem[0];
106+
}
107+
103108
/// <summary>
104109
/// Checks whether a resource name is existing in currently open file.
105110
/// </summary>
@@ -122,7 +127,8 @@ public IResourceEditorView View {
122127
set {
123128
if (view != null) {
124129
view.SelectionChanged -= View_SelectionChanged;
125-
view.EditingStarted -= View_EditingStarted;
130+
view.EditingStartRequested -= View_EditingStartRequested;
131+
view.AddingNewItemRequested -= View_AddingNewItemRequested;
126132
ResourceItems.CollectionChanged -= ResourceItems_CollectionChanged;
127133
}
128134

@@ -142,7 +148,8 @@ public IResourceEditorView View {
142148
return true;
143149
};
144150
view.SelectionChanged += View_SelectionChanged;
145-
view.EditingStarted += View_EditingStarted;
151+
view.EditingStartRequested += View_EditingStartRequested;
152+
view.AddingNewItemRequested += View_AddingNewItemRequested;
146153
ResourceItems.CollectionChanged += ResourceItems_CollectionChanged;
147154
}
148155
}
@@ -227,10 +234,38 @@ public void StartEditing()
227234
}
228235
}
229236

230-
void View_EditingStarted(object sender, EventArgs e)
237+
void View_EditingStartRequested(object sender, EventArgs e)
231238
{
232239
StartEditing();
233240
}
241+
242+
void View_AddingNewItemRequested(object sender, EventArgs e)
243+
{
244+
AddStringEntry();
245+
}
246+
247+
public void AddStringEntry()
248+
{
249+
int count = 1;
250+
string newNameBase = "New string entry ";
251+
string newName = newNameBase + count;
252+
253+
while (ContainsResourceName(newName)) {
254+
count++;
255+
newName = newNameBase + count;
256+
}
257+
258+
var selectedItem = GetSelectedItems().FirstOrDefault();
259+
ResourceItem item = new ResourceItem(this, newName, "");
260+
item.IsNew = true;
261+
if (selectedItem != null)
262+
item.SortingCriteria = selectedItem.Name;
263+
else
264+
item.SortingCriteria = item.Name;
265+
ResourceItems.Add(item);
266+
SelectItem(item);
267+
StartEditing();
268+
}
234269

235270
void StartUpdate()
236271
{
@@ -352,8 +387,6 @@ public bool EnableSelectAll {
352387

353388
public void Cut()
354389
{
355-
// if (resourceEditor.ResourceList.WriteProtected || resourceEditor.ResourceList.SelectedItems.Count < 1)
356-
// return;
357390
if (SelectedItems.Count == 0)
358391
return;
359392

@@ -380,10 +413,6 @@ public void Copy()
380413

381414
public void Paste()
382415
{
383-
// if (resourceEditor.ResourceList.WriteProtected) {
384-
// return;
385-
// }
386-
387416
IDataObject dob = Clipboard.GetDataObject();
388417
if (dob == null)
389418
return;
@@ -408,7 +437,7 @@ public void Paste()
408437
item = new ResourceItem(this, newName, resourceValue);
409438
}
410439
resourceItems.Add(item);
411-
// TODO Set selection to new element?
440+
SelectItem(item);
412441
}
413442
}
414443
}
@@ -437,15 +466,18 @@ object GetClonedResource(object resource)
437466

438467
public void Delete()
439468
{
440-
// if (resourceList.WriteProtected || resourceList.SelectedItems.Count == 0)
441-
// return;
442-
443469
if (SelectedItems.Count > 0) {
444470
if (!SD.MessageService.AskQuestion("${res:ResourceEditor.DeleteEntry.Confirm}", "${res:ResourceEditor.DeleteEntry.Title}"))
445471
return;
446472

447-
foreach (var item in SelectedItems.OfType<ResourceItem>().ToList()) {
448-
resourceItems.Remove(item);
473+
if (SelectedItems.Count == resourceItems.Count) {
474+
// Little performance improvement for the case "Select All" + "Delete"
475+
SelectedItems.Clear();
476+
resourceItems.Clear();
477+
} else {
478+
foreach (var item in SelectedItems.OfType<ResourceItem>().ToList()) {
479+
resourceItems.Remove(item);
480+
}
449481
}
450482
}
451483
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ IList SelectedItems {
4242

4343
void SelectItem(ResourceItem item);
4444

45-
event EventHandler EditingStarted;
45+
event EventHandler EditingStartRequested;
46+
event EventHandler AddingNewItemRequested;
4647

4748
void SetItemView(IResourceItemView view);
4849

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,26 @@
128128
ItemContainerStyle="{StaticResource listViewItemStyle}"
129129
MouseRightButtonUp="ListView_MouseRightButtonUp"
130130
KeyUp="ResourceItemsListView_KeyUp"
131-
SelectionChanged="ListView_SelectionChanged">
131+
SelectionChanged="ListView_SelectionChanged"
132+
VirtualizingStackPanel.IsVirtualizing="True"
133+
core:SortableGridViewColumn.SortMode="Automatic"
134+
core:GridViewColumnAutoSize.AutoWidth="40%;15%;30%;15%">
132135
<ListView.View>
133-
<GridView>
134-
<GridViewColumn
136+
<GridView AllowsColumnReorder="False">
137+
<core:SortableGridViewColumn
138+
SortBy="SortingCriteria"
135139
Header="{core:Localize Global.Name}"
136140
CellTemplate="{StaticResource resourceItemNameTemplate}" />
137-
<GridViewColumn
141+
<core:SortableGridViewColumn
142+
SortBy="ResourceType"
138143
Header="{core:Localize ResourceEditor.ResourceEdit.TypeColumn}"
139144
CellTemplate="{StaticResource resourceItemTypeTemplate}" />
140-
<GridViewColumn
145+
<core:SortableGridViewColumn
146+
SortBy="Content"
141147
Header="{core:Localize ResourceEditor.ResourceEdit.ContentColumn}"
142148
CellTemplate="{StaticResource resourceItemContentTemplate}" />
143-
<GridViewColumn
149+
<core:SortableGridViewColumn
150+
SortBy="Comment"
144151
Header="{core:Localize ResourceEditor.ResourceEdit.CommentColumn}"
145152
CellTemplate="{StaticResource resourceItemCommentTemplate}" />
146153
</GridView>

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ public partial class ResourceEditorView : UserControl, IResourceEditorView
3636
readonly CollectionViewSource itemCollectionViewSource;
3737

3838
public event EventHandler SelectionChanged;
39-
public event EventHandler EditingStarted;
39+
public event EventHandler EditingStartRequested;
40+
public event EventHandler AddingNewItemRequested;
4041

4142
public ResourceEditorView()
4243
{
@@ -126,8 +127,13 @@ void UpdateFilter()
126127
void ResourceItemsListView_KeyUp(object sender, KeyEventArgs e)
127128
{
128129
if (e.Key == Key.F2) {
129-
if (EditingStarted != null) {
130-
EditingStarted(this, new EventArgs());
130+
if (EditingStartRequested != null) {
131+
EditingStartRequested(this, new EventArgs());
132+
}
133+
}
134+
if (e.Key == Key.Insert) {
135+
if (AddingNewItemRequested != null) {
136+
AddingNewItemRequested(this, new EventArgs());
131137
}
132138
}
133139

0 commit comments

Comments
 (0)