diff --git a/projects/GKCore/GKCore.csproj b/projects/GKCore/GKCore.csproj
index 9538b29e1..1e80b2a3c 100644
--- a/projects/GKCore/GKCore.csproj
+++ b/projects/GKCore/GKCore.csproj
@@ -373,6 +373,7 @@
+
diff --git a/projects/GKCore/GKCore/Controllers/RecordSelectDlgController.cs b/projects/GKCore/GKCore/Controllers/RecordSelectDlgController.cs
index 1fd7289dd..f9f770fa6 100644
--- a/projects/GKCore/GKCore/Controllers/RecordSelectDlgController.cs
+++ b/projects/GKCore/GKCore/Controllers/RecordSelectDlgController.cs
@@ -1,6 +1,6 @@
/*
* "GEDKeeper", the personal genealogical database editor.
- * Copyright (C) 2009-2023 by Sergey V. Zhdanovskih.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
*
* This file is part of "GEDKeeper".
*
@@ -197,6 +197,13 @@ public override void UpdateView()
}
recordsList.UpdateContents();
+
+ UpdateButtons();
+ }
+
+ private void UpdateButtons()
+ {
+ GetControl("btnSelect").Enabled = fView.RecordsList.ListMan.FilteredCount > 0;
}
public override void SetLocale()
diff --git a/projects/GKCore/GKCore/Lists/SourceListModel.cs b/projects/GKCore/GKCore/Lists/SourceListModel.cs
index 30ef8e24e..3fc698da5 100644
--- a/projects/GKCore/GKCore/Lists/SourceListModel.cs
+++ b/projects/GKCore/GKCore/Lists/SourceListModel.cs
@@ -95,11 +95,11 @@ protected override object GetColumnValueEx(int colType, int colSubtype, bool isV
break;
case ColumnType.ctAuthor:
- result = fFetchedRec.Originator.Lines.Text.Trim();
+ result = GKUtils.MergeStrings(fFetchedRec.Originator.Lines);
break;
case ColumnType.ctTitle:
- result = fFetchedRec.Title.Lines.Text.Trim();
+ result = GKUtils.MergeStrings(fFetchedRec.Title.Lines);
break;
//case ColumnType.ctPublication:
diff --git a/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.Designer.cs b/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.Designer.cs
index 07574c947..ed04ac55e 100644
--- a/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.Designer.cs
+++ b/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.Designer.cs
@@ -28,17 +28,17 @@ private void InitializeComponent()
this.btnSelect.Location = new System.Drawing.Point(280, 466);
this.btnSelect.Name = "btnSelect";
this.btnSelect.Size = new System.Drawing.Size(113, 31);
- this.btnSelect.TabIndex = 3;
+ this.btnSelect.TabIndex = 2;
this.btnSelect.Text = "btnSelect";
this.btnSelect.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.btnSelect.Click += new System.EventHandler(this.btnSelect_Click);
//
// btnCreate
- //
+ //
this.btnCreate.Location = new System.Drawing.Point(146, 466);
this.btnCreate.Name = "btnCreate";
this.btnCreate.Size = new System.Drawing.Size(113, 31);
- this.btnCreate.TabIndex = 2;
+ this.btnCreate.TabIndex = 3;
this.btnCreate.Text = "btnCreate";
this.btnCreate.Click += new System.EventHandler(this.btnCreate_Click);
//
@@ -78,6 +78,7 @@ private void InitializeComponent()
this.fltCtl.Name = "fltCtl";
this.fltCtl.Size = new System.Drawing.Size(36, 32);
this.fltCtl.TabIndex = 1;
+ this.fltCtl.TabStop = false;
//
// panList
//
diff --git a/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.cs b/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.cs
index 3fe7561d9..3a2a91119 100644
--- a/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.cs
+++ b/projects/GKv2/GEDKeeper2/GKUI/Forms/RecordSelectDlg.cs
@@ -1,6 +1,6 @@
/*
* "GEDKeeper", the personal genealogical database editor.
- * Copyright (C) 2009-2023 by Sergey V. Zhdanovskih.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
*
* This file is part of "GEDKeeper".
*
@@ -73,6 +73,8 @@ public RecordSelectDlg(IBaseWindow baseWin, GDMRecordType recType)
{
InitializeComponent();
+ TabIndexChanged += Form_TabIndexChanged;
+
btnSelect.Image = UIHelper.LoadResourceImage("Resources.btn_accept.gif");
btnCancel.Image = UIHelper.LoadResourceImage("Resources.btn_cancel.gif");
@@ -92,6 +94,14 @@ public RecordSelectDlg(IBaseWindow baseWin, GDMRecordType recType)
UpdateRecordsView();
}
+ private void Form_TabIndexChanged(object sender, EventArgs e)
+ {
+ if (fltCtl.Focused) {
+ fListRecords.Focus();
+ fListRecords.SelectItem(0);
+ }
+ }
+
protected override void Dispose(bool disposing)
{
if (disposing) {
diff --git a/projects/GKv2/GKComponents/GKUI/Components/GKListView.cs b/projects/GKv2/GKComponents/GKUI/Components/GKListView.cs
index 28674c636..c3dbac09b 100644
--- a/projects/GKv2/GKComponents/GKUI/Components/GKListView.cs
+++ b/projects/GKv2/GKComponents/GKUI/Components/GKListView.cs
@@ -1,6 +1,6 @@
/*
* "GEDKeeper", the personal genealogical database editor.
- * Copyright (C) 2009-2023 by Sergey V. Zhdanovskih.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
*
* This file is part of "GEDKeeper".
*
@@ -283,6 +283,10 @@ public BSDSortOrder SortOrder
set { fSortOrder = value; }
}
+
+ public event EventHandler ItemsUpdated;
+
+
public GKListView()
{
fAppearance = new ListViewAppearance(this);
@@ -558,6 +562,12 @@ public void SortModelColumn(int columnId)
}
}
+ private void DoItemsUpdated()
+ {
+ var eventHandler = ItemsUpdated;
+ if (eventHandler != null) eventHandler(this, new EventArgs());
+ }
+
public void UpdateContents(bool columnsChanged = false)
{
if (fListMan == null) return;
@@ -584,6 +594,8 @@ public void UpdateContents(bool columnsChanged = false)
} finally {
EndUpdate();
if (tempRec != null) SelectItem(tempRec);
+
+ DoItemsUpdated();
}
} catch (Exception ex) {
Logger.WriteError("GKListView.UpdateContents()", ex);
@@ -768,6 +780,10 @@ private void SelectItem(int index, GKListItem item)
public void SelectItem(int index)
{
+ if (index == -1) {
+ index = Items.Count - 1;
+ }
+
if (index >= 0 && index < Items.Count) {
var item = (GKListItem)Items[index];
SelectItem(index, item);
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/BaseWinSDI.cs b/projects/GKv3/GEDKeeper3/GKUI/Forms/BaseWinSDI.cs
index fb4b2519c..400bdb8fd 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/BaseWinSDI.cs
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/BaseWinSDI.cs
@@ -250,6 +250,7 @@ private void CreatePage(string pageText, GDMRecordType recType)
recView.AllowMultipleSelection = true;
recView.MouseDoubleClick += miRecordEdit_Click;
recView.SelectedItemsChanged += List_SelectedIndexChanged;
+ recView.KeyDown += Form_KeyDown;
recView.ContextMenu = contextMenu;
recView.ListMan = RecordsListModel.Create(fContext, recType, false);
recView.UpdateContents();
@@ -342,6 +343,43 @@ private void BaseContext_ModifiedChanged(object sender, EventArgs e)
private void Form_KeyDown(object sender, KeyEventArgs e)
{
+ switch (e.Key) {
+ /*case Keys.I:
+ ItemAdd();
+ break;
+ case Keys.D:
+ ItemDelete();
+ break;*/
+
+ case Keys.Enter:
+ if (e.Control) {
+ EditRecord();
+ e.Handled = true;
+ }
+ break;
+
+ case Keys.Home:
+ case Keys.End:
+ if (sender is GKListView) {
+ var listView = sender as GKListView;
+ if (e.Key == Keys.Home) {
+ listView.SelectedIndex = 0;
+ } else {
+ listView.SelectedIndex = -1;
+ }
+ e.Handled = true;
+ }
+ break;
+
+ case Keys.F12:
+ break;
+
+ /*case Keys.F:
+ if (e.Control) {
+ QuickFind();
+ }
+ break;*/
+ }
}
private void contextMenu_Opening(object sender, EventArgs e)
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/FilePropertiesDlg.xeto b/projects/GKv3/GEDKeeper3/GKUI/Forms/FilePropertiesDlg.xeto
index 95be7df6a..249674e83 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/FilePropertiesDlg.xeto
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/FilePropertiesDlg.xeto
@@ -16,7 +16,7 @@
-
+
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.cs b/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.cs
index 3dfb0adcf..53003d287 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.cs
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.cs
@@ -1,6 +1,6 @@
/*
* "GEDKeeper", the personal genealogical database editor.
- * Copyright (C) 2009-2023 by Sergey V. Zhdanovskih.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
*
* This file is part of "GEDKeeper".
*
@@ -84,6 +84,8 @@ public RecordSelectDlg(IBaseWindow baseWin, GDMRecordType recType)
{
XamlReader.Load(this);
+ txtFastFilter.KeyDown += Ctrl_KeyDown;
+
fController = new RecordSelectDlgController(this);
fController.Init(baseWin);
fController.RecType = recType;
@@ -108,15 +110,32 @@ protected override void Dispose(bool disposing)
base.Dispose(disposing);
}
+ private void Ctrl_KeyDown(object sender, KeyEventArgs e)
+ {
+ if (e.Key == Keys.Tab) {
+ if (sender == fListRecords) {
+ btnSelect.Focus();
+ e.Handled = true;
+ }
+ if (sender == txtFastFilter) {
+ fListRecords.Focus();
+ fListRecords.SelectItem(0);
+ e.Handled = true;
+ }
+ }
+ }
+
private void UpdateRecordsView()
{
if (fListRecords != null) {
+ fListRecords.KeyDown -= Ctrl_KeyDown;
fListRecords.ListMan = null;
fListRecords.Dispose();
fListRecords = null;
}
fListRecords = UIHelper.CreateRecordsView(panList, fController.Base.Context, fController.RecType, true);
fListRecords.ContextMenu = contextMenu;
+ fListRecords.KeyDown += Ctrl_KeyDown;
}
private void miDetails_Click(object sender, EventArgs e)
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.xeto b/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.xeto
index a0f01a03f..6d7b572c8 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.xeto
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/RecordSelectDlg.xeto
@@ -9,7 +9,7 @@
-
+
@@ -22,9 +22,9 @@
-
-
-
+
+
+
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/RelationshipCalculatorDlg.xeto b/projects/GKv3/GEDKeeper3/GKUI/Forms/RelationshipCalculatorDlg.xeto
index b60dc1829..a07a799cb 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/RelationshipCalculatorDlg.xeto
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/RelationshipCalculatorDlg.xeto
@@ -32,7 +32,7 @@
-
+
diff --git a/projects/GKv3/GEDKeeper3/GKUI/Forms/SourceEditDlg.xeto b/projects/GKv3/GEDKeeper3/GKUI/Forms/SourceEditDlg.xeto
index 3ea00daf4..177a2872a 100644
--- a/projects/GKv3/GEDKeeper3/GKUI/Forms/SourceEditDlg.xeto
+++ b/projects/GKv3/GEDKeeper3/GKUI/Forms/SourceEditDlg.xeto
@@ -20,21 +20,21 @@
-
+
-
+
-
+
-
+
diff --git a/projects/GKv3/GKComponents/GKComponents.csproj b/projects/GKv3/GKComponents/GKComponents.csproj
index f8781d2f3..bb3e84e72 100644
--- a/projects/GKv3/GKComponents/GKComponents.csproj
+++ b/projects/GKv3/GKComponents/GKComponents.csproj
@@ -38,7 +38,7 @@
-
+
diff --git a/projects/GKv3/GKComponents/GKUI/Components/GKListView.cs b/projects/GKv3/GKComponents/GKUI/Components/GKListView.cs
index d8efc7e07..37ad8a472 100644
--- a/projects/GKv3/GKComponents/GKUI/Components/GKListView.cs
+++ b/projects/GKv3/GKComponents/GKUI/Components/GKListView.cs
@@ -1,6 +1,6 @@
/*
* "GEDKeeper", the personal genealogical database editor.
- * Copyright (C) 2009-2023 by Sergey V. Zhdanovskih.
+ * Copyright (C) 2009-2024 by Sergey V. Zhdanovskih.
*
* This file is part of "GEDKeeper".
*
@@ -214,6 +214,8 @@ public BSDSortOrder SortOrder
public event ItemCheckEventHandler ItemCheck;
+ public event EventHandler ItemsUpdated;
+
public GKListView()
{
@@ -425,6 +427,12 @@ public void SortModelColumn(int columnId)
}
}
+ private void DoItemsUpdated()
+ {
+ var eventHandler = ItemsUpdated;
+ if (eventHandler != null) eventHandler(this, new EventArgs());
+ }
+
public void UpdateContents(bool columnsChanged = false)
{
if (fListMan == null) return;
@@ -444,6 +452,8 @@ public void UpdateContents(bool columnsChanged = false)
} finally {
EndUpdate();
if (tempRec != null) SelectItem(tempRec);
+
+ DoItemsUpdated();
}
} catch (Exception ex) {
Logger.WriteError("GKListView.UpdateContents()", ex);
@@ -612,6 +622,10 @@ public object GetSelectedData()
public void SelectItem(int index)
{
+ if (index == -1) {
+ index = ContentList.Count - 1;
+ }
+
if (index >= 0 && index < ContentList.Count) {
ScrollToRow(index);
UnselectAll();
diff --git a/projects/GKv3/GKComponents/GKUI/Components/GKSheetList.cs b/projects/GKv3/GKComponents/GKUI/Components/GKSheetList.cs
index 0d2ab2e4f..a97c7ca18 100644
--- a/projects/GKv3/GKComponents/GKUI/Components/GKSheetList.cs
+++ b/projects/GKv3/GKComponents/GKUI/Components/GKSheetList.cs
@@ -246,6 +246,7 @@ private void List_DoubleClick(object sender, EventArgs e)
private void List_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control) {
+ bool handled = true;
switch (e.Key) {
case Keys.I:
ItemAdd(sender, e);
@@ -266,7 +267,11 @@ private void List_KeyDown(object sender, KeyEventArgs e)
case Keys.V:
ItemPaste(sender, e);
break;
+ default:
+ handled = false;
+ break;
}
+ e.Handled = handled;
}
}