From ef04bd11a3ae43f1f76252a72cd7ad8e0273fe10 Mon Sep 17 00:00:00 2001 From: Jose Medrano Date: Fri, 25 Jan 2019 18:55:16 +0100 Subject: [PATCH 1/4] [Gtk] Adds EditingFinished event to cell renderers --- TestApps/Samples/Samples/ListViewCombos.cs | 23 +++++++++++++++---- .../CustomCellRendererComboBox.cs | 2 ++ .../CustomCellRendererText.cs | 1 + .../CustomCellRendererToggle.cs | 2 ++ Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs | 7 +++++- Xwt/Xwt.Backends/ITextCellViewFrontend.cs | 2 +- Xwt/Xwt.Backends/IToggleCellViewFrontend.cs | 2 +- Xwt/Xwt/CheckBoxCellView.cs | 6 +++++ Xwt/Xwt/ComboBoxCellView.cs | 7 ++++++ Xwt/Xwt/RadioButtonCellView.cs | 7 ++++++ Xwt/Xwt/TextCellView.cs | 7 ++++++ 11 files changed, 58 insertions(+), 8 deletions(-) diff --git a/TestApps/Samples/Samples/ListViewCombos.cs b/TestApps/Samples/Samples/ListViewCombos.cs index 26d03fcf7..cf9e4f0f4 100644 --- a/TestApps/Samples/Samples/ListViewCombos.cs +++ b/TestApps/Samples/Samples/ListViewCombos.cs @@ -25,28 +25,33 @@ // THE SOFTWARE. using System; using Xwt; +using System.Linq; namespace Samples { public class ListViewCombos: VBox { + ListStore store; + ListView list; + DataField indexField; public ListViewCombos () { - ListView list = new ListView (); - var indexField = new DataField (); - + list = new ListView (); + indexField = new DataField (); var indexField2 = new DataField (); var itemsField = new DataField (); - ListStore store = new ListStore (indexField, indexField2, itemsField); + store = new ListStore (indexField, indexField2, itemsField); list.DataSource = store; list.GridLinesVisible = GridLines.Horizontal; - var comboCellView = new ComboBoxCellView { Editable = true, SelectedIndexField = indexField }; + ComboBoxCellView comboCellView = new ComboBoxCellView { Editable = true, SelectedIndexField = indexField }; comboCellView.Items.Add (1, "one"); comboCellView.Items.Add (2, "two"); comboCellView.Items.Add (3, "three"); + comboCellView.EditingFinished += ComboCellView_EditingFinished; + list.Columns.Add (new ListViewColumn ("List 1", comboCellView)); var comboCellView2 = new ComboBoxCellView { Editable = true, SelectedIndexField = indexField2, ItemsField = itemsField }; @@ -65,5 +70,13 @@ public ListViewCombos () } PackStart (list, true); } + + void ComboCellView_EditingFinished (object sender, EventArgs e) + { + var cellView = (ComboBoxCellView)sender; + var cellText = store.GetValue (list.SelectedRow, indexField); + + Console.WriteLine ($"Your real value is : {cellText}"); + } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs index 02746b0dc..031e87637 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs @@ -129,6 +129,8 @@ void HandleEdited (object o, Gtk.EditedArgs args) } if (view.SelectedTextField != null) CellUtil.SetModelValue (TreeModel, CurrentIter, view.SelectedTextField.Index, typeof (string), args.NewText); + + view.RaiseEditingFinished (); } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs index 98d2b1a87..0912e4a7a 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs @@ -72,6 +72,7 @@ void HandleEdited (object o, EditedArgs args) Gtk.TreeIter iter; if (TreeModel.GetIterFromString (out iter, args.Path)) CellUtil.SetModelValue (TreeModel, iter, view.TextField.Index, view.TextField.FieldType, args.NewText); + view.RaiseEditingFinished (); } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs index f935cc54b..86b615879 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs @@ -91,6 +91,8 @@ void HandleToggled (object o, ToggledArgs args) CellUtil.SetModelValue (TreeModel, iter, field.Index, type, newValue); } + + view.RaiseEditingFinished (); } } } diff --git a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs index a92994074..23c93f73d 100644 --- a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs @@ -27,7 +27,12 @@ namespace Xwt.Backends { - public interface IComboBoxCellViewFrontend: ICellViewFrontend + public interface IEditableCellViewFrontend + { + void RaiseEditingFinished (); + } + + public interface IComboBoxCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend { IDataField SelectedTextField { get; } IDataField SelectedIndexField { get; } diff --git a/Xwt/Xwt.Backends/ITextCellViewFrontend.cs b/Xwt/Xwt.Backends/ITextCellViewFrontend.cs index c53577266..da6b61b9b 100644 --- a/Xwt/Xwt.Backends/ITextCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/ITextCellViewFrontend.cs @@ -27,7 +27,7 @@ namespace Xwt.Backends { - public interface ITextCellViewFrontend: ICellViewFrontend + public interface ITextCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend { string Markup { get; } string Text { get; } diff --git a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs index b19f0b6cd..1459baf35 100644 --- a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs @@ -27,7 +27,7 @@ namespace Xwt.Backends { - public interface IToggleCellViewFrontend : ICellViewFrontend + public interface IToggleCellViewFrontend : ICellViewFrontend, IEditableCellViewFrontend { bool Active { get; } bool Editable { get; } diff --git a/Xwt/Xwt/CheckBoxCellView.cs b/Xwt/Xwt/CheckBoxCellView.cs index 258b3696c..47ad7dfda 100644 --- a/Xwt/Xwt/CheckBoxCellView.cs +++ b/Xwt/Xwt/CheckBoxCellView.cs @@ -101,6 +101,7 @@ public bool AllowMixed { } public event EventHandler Toggled; + public event EventHandler EditingFinished; /// /// Raises the toggled event @@ -115,5 +116,10 @@ public bool RaiseToggled () } return false; } + + public void RaiseEditingFinished () + { + EditingFinished?.Invoke (this, EventArgs.Empty); + } } } diff --git a/Xwt/Xwt/ComboBoxCellView.cs b/Xwt/Xwt/ComboBoxCellView.cs index 8da60423a..104071156 100644 --- a/Xwt/Xwt/ComboBoxCellView.cs +++ b/Xwt/Xwt/ComboBoxCellView.cs @@ -124,5 +124,12 @@ public bool RaiseSelectionChanged () } return false; } + + public event EventHandler EditingFinished; + + public void RaiseEditingFinished () + { + EditingFinished?.Invoke (this, EventArgs.Empty); + } } } diff --git a/Xwt/Xwt/RadioButtonCellView.cs b/Xwt/Xwt/RadioButtonCellView.cs index 9222fc690..a28697cf2 100644 --- a/Xwt/Xwt/RadioButtonCellView.cs +++ b/Xwt/Xwt/RadioButtonCellView.cs @@ -79,5 +79,12 @@ public bool RaiseToggled () } return false; } + + public event EventHandler EditingFinished; + + public void RaiseEditingFinished () + { + EditingFinished?.Invoke (this, EventArgs.Empty); + } } } diff --git a/Xwt/Xwt/TextCellView.cs b/Xwt/Xwt/TextCellView.cs index 11b94668b..309fa0f1b 100644 --- a/Xwt/Xwt/TextCellView.cs +++ b/Xwt/Xwt/TextCellView.cs @@ -116,5 +116,12 @@ bool ITextCellViewFrontend.RaiseTextChanged (string newText) } return false; } + + public event EventHandler EditingFinished; + + public void RaiseEditingFinished () + { + EditingFinished?.Invoke (this, EventArgs.Empty); + } } } From fb6dd935cb485820f9438418e2994e8f229b4f69 Mon Sep 17 00:00:00 2001 From: Jose Medrano Date: Sun, 10 Feb 2019 15:34:37 +0100 Subject: [PATCH 2/4] Adds EditableCellViewArgs to EditingFinished eventhandler --- TestApps/Samples/Samples/ListView2.cs | 23 ++++++++++++++++--- TestApps/Samples/Samples/ListViewCombos.cs | 7 ++---- TestApps/Samples/Samples/TreeViews.cs | 12 +++++++++- .../CustomCellRendererComboBox.cs | 7 ++++-- .../CustomCellRendererText.cs | 5 +++- .../CustomCellRendererToggle.cs | 7 +++++- Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs | 15 +++++++++++- Xwt/Xwt/CheckBoxCellView.cs | 6 ++--- Xwt/Xwt/ComboBoxCellView.cs | 6 ++--- Xwt/Xwt/RadioButtonCellView.cs | 6 ++--- Xwt/Xwt/TextCellView.cs | 6 ++--- 11 files changed, 74 insertions(+), 26 deletions(-) diff --git a/TestApps/Samples/Samples/ListView2.cs b/TestApps/Samples/Samples/ListView2.cs index 2dc06388c..985632e58 100644 --- a/TestApps/Samples/Samples/ListView2.cs +++ b/TestApps/Samples/Samples/ListView2.cs @@ -30,12 +30,24 @@ public ListView2 () store.SetValue(list.CurrentEventRow, textField, "Toggled"); } }; + checkCellView.EditingFinished += CellView_EditingFinished; list.Columns.Add (new ListViewColumn("Editable", checkCellView)); + list.Columns.Add (new ListViewColumn("Not Editable", new CheckBoxCellView { Editable = false, ActiveField = nonEditableActiveField })); - list.Columns.Add (new ListViewColumn("Editable", new TextCellView { Editable = true, TextField = textField })); - list.Columns.Add(new ListViewColumn("Somewhat Editable", new CheckBoxCellView { EditableField = editableField, ActiveField = somewhatEditableData })); - list.Columns.Add (new ListViewColumn("Somewhat Editable", new TextCellView { EditableField = editableField, TextField = textField2 })); + + Xwt.Backends.IEditableCellViewFrontend cellView = new TextCellView { Editable = true, TextField = textField }; + cellView.EditingFinished += CellView_EditingFinished; + list.Columns.Add (new ListViewColumn("Editable",(CellView) cellView)); + + cellView = new CheckBoxCellView { EditableField = editableField, ActiveField = somewhatEditableData }; + cellView.EditingFinished += CellView_EditingFinished; + list.Columns.Add(new ListViewColumn("Somewhat Editable",(CellView) cellView)); + + cellView = new TextCellView { EditableField = editableField, TextField = textField2 }; + cellView.EditingFinished += CellView_EditingFinished; + + list.Columns.Add (new ListViewColumn("Somewhat Editable", (CellView)cellView)); Random rand = new Random (); @@ -51,6 +63,11 @@ public ListView2 () } PackStart (list, true); } + + void CellView_EditingFinished(object sender, Xwt.Backends.EditableCellViewArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } } } diff --git a/TestApps/Samples/Samples/ListViewCombos.cs b/TestApps/Samples/Samples/ListViewCombos.cs index cf9e4f0f4..c50edeeb3 100644 --- a/TestApps/Samples/Samples/ListViewCombos.cs +++ b/TestApps/Samples/Samples/ListViewCombos.cs @@ -71,12 +71,9 @@ public ListViewCombos () PackStart (list, true); } - void ComboCellView_EditingFinished (object sender, EventArgs e) + void ComboCellView_EditingFinished (object sender, Xwt.Backends.EditableCellViewArgs e) { - var cellView = (ComboBoxCellView)sender; - var cellText = store.GetValue (list.SelectedRow, indexField); - - Console.WriteLine ($"Your real value is : {cellText}"); + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } } } diff --git a/TestApps/Samples/Samples/TreeViews.cs b/TestApps/Samples/Samples/TreeViews.cs index 1208a944d..736e26207 100644 --- a/TestApps/Samples/Samples/TreeViews.cs +++ b/TestApps/Samples/Samples/TreeViews.cs @@ -54,6 +54,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "TriState Toggled"); } }; + triStateCellView.EditingFinished += CellView_EditingFinished; var checkCellView = new CheckBoxCellView (check) { Editable = true }; checkCellView.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -63,6 +64,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "Toggled " + checkCellView.Active); } }; + checkCellView.EditingFinished += CellView_EditingFinished; var optionCellView1 = new RadioButtonCellView (option1) { Editable = true }; optionCellView1.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -71,6 +73,8 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option2, optionCellView1.Active); } }; + optionCellView1.EditingFinished += CellView_EditingFinished; + var optionCellView2 = new RadioButtonCellView (option2) { Editable = true }; optionCellView2.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -79,6 +83,7 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option1, optionCellView2.Active); } }; + optionCellView2.EditingFinished += CellView_EditingFinished; TreePosition initialActive = null; var optionCellView3 = new RadioButtonCellView (option3) { Editable = true }; @@ -91,7 +96,7 @@ public TreeViews () initialActive = view.CurrentEventRow; } }; - + optionCellView3.EditingFinished += CellView_EditingFinished; view.Columns.Add ("TriCheck", triStateCellView); view.Columns.Add ("Check", checkCellView); view.Columns.Add ("Radio", optionCellView1, optionCellView2, optionCellView3); @@ -230,6 +235,11 @@ public TreeViews () view.RowExpanded += (sender, e) => label.Text = "Row expanded: " + store.GetNavigatorAt (e.Position).GetValue (text); } + void CellView_EditingFinished(object sender, Xwt.Backends.EditableCellViewArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } + void HandleDragOver (object sender, DragOverEventArgs e) { e.AllowedAction = e.Action; diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs index 031e87637..50215c04f 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs @@ -76,7 +76,7 @@ public CustomCellRendererComboBox () protected override void OnLoadData () { var view = (IComboBoxCellViewFrontend)Frontend; - renderer.Text = view.SelectedText; + lastValue = renderer.Text = view.SelectedText; var source = view.ItemsSource; renderer.Model = GetListModel (source).Store; renderer.TextColumn = 0; @@ -102,6 +102,8 @@ void CleanCache () modelCache = newModel; } + string lastValue = string.Empty; + void HandleEdited (object o, Gtk.EditedArgs args) { Gtk.TreeIter iter; @@ -130,7 +132,8 @@ void HandleEdited (object o, Gtk.EditedArgs args) if (view.SelectedTextField != null) CellUtil.SetModelValue (TreeModel, CurrentIter, view.SelectedTextField.Index, typeof (string), args.NewText); - view.RaiseEditingFinished (); + view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, args.NewText)); + lastValue = args.NewText; } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs index 0912e4a7a..fd80a24c9 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs @@ -40,6 +40,8 @@ public CustomCellRendererText () cellRenderer.Edited += HandleEdited; } + string lastValue; + protected override void OnLoadData () { var view = (ITextCellViewFrontend) Frontend; @@ -57,6 +59,7 @@ protected override void OnLoadData () if (mixedMarkupText) cellRenderer.Attributes = new Pango.AttrList (); } + lastValue = cellRenderer.Text; cellRenderer.Editable = view.Editable; if (!cellRenderer.Editable) cellRenderer.Mode = CellRendererMode.Activatable; @@ -72,7 +75,7 @@ void HandleEdited (object o, EditedArgs args) Gtk.TreeIter iter; if (TreeModel.GetIterFromString (out iter, args.Path)) CellUtil.SetModelValue (TreeModel, iter, view.TextField.Index, view.TextField.FieldType, args.NewText); - view.RaiseEditingFinished (); + view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, args.NewText)); } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs index 86b615879..922150615 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs @@ -58,6 +58,8 @@ protected override void OnLoadData () } } + CheckBoxState lastValue; + void HandleToggled (object o, ToggledArgs args) { SetCurrentEventRow (); @@ -90,9 +92,12 @@ void HandleToggled (object o, ToggledArgs args) (object) newState : (object) (newState == CheckBoxState.On); CellUtil.SetModelValue (TreeModel, iter, field.Index, type, newValue); + view.RaiseEditingFinished(new EditableCellViewArgs(lastValue, newState)); + lastValue = newState; + return; } - view.RaiseEditingFinished (); + view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, lastValue)); } } } diff --git a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs index 23c93f73d..b51ba88e0 100644 --- a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs @@ -27,9 +27,22 @@ namespace Xwt.Backends { + public class EditableCellViewArgs : EventArgs + { + public EditableCellViewArgs(object oldValue, object newValue) + { + OldValue = oldValue; + NewValue = newValue; + } + + public object OldValue { get; set; } + public object NewValue { get; set; } + } + public interface IEditableCellViewFrontend { - void RaiseEditingFinished (); + event EventHandler EditingFinished; + void RaiseEditingFinished (EditableCellViewArgs args); } public interface IComboBoxCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend diff --git a/Xwt/Xwt/CheckBoxCellView.cs b/Xwt/Xwt/CheckBoxCellView.cs index 47ad7dfda..ab99e5f35 100644 --- a/Xwt/Xwt/CheckBoxCellView.cs +++ b/Xwt/Xwt/CheckBoxCellView.cs @@ -101,7 +101,7 @@ public bool AllowMixed { } public event EventHandler Toggled; - public event EventHandler EditingFinished; + public event EventHandler EditingFinished; /// /// Raises the toggled event @@ -117,9 +117,9 @@ public bool RaiseToggled () return false; } - public void RaiseEditingFinished () + public void RaiseEditingFinished (EditableCellViewArgs args) { - EditingFinished?.Invoke (this, EventArgs.Empty); + EditingFinished?.Invoke (this, args); } } } diff --git a/Xwt/Xwt/ComboBoxCellView.cs b/Xwt/Xwt/ComboBoxCellView.cs index 104071156..b2975566f 100644 --- a/Xwt/Xwt/ComboBoxCellView.cs +++ b/Xwt/Xwt/ComboBoxCellView.cs @@ -125,11 +125,11 @@ public bool RaiseSelectionChanged () return false; } - public event EventHandler EditingFinished; + public event EventHandler EditingFinished; - public void RaiseEditingFinished () + public void RaiseEditingFinished (EditableCellViewArgs args) { - EditingFinished?.Invoke (this, EventArgs.Empty); + EditingFinished?.Invoke (this, args); } } } diff --git a/Xwt/Xwt/RadioButtonCellView.cs b/Xwt/Xwt/RadioButtonCellView.cs index a28697cf2..58a8915be 100644 --- a/Xwt/Xwt/RadioButtonCellView.cs +++ b/Xwt/Xwt/RadioButtonCellView.cs @@ -80,11 +80,11 @@ public bool RaiseToggled () return false; } - public event EventHandler EditingFinished; + public event EventHandler EditingFinished; - public void RaiseEditingFinished () + public void RaiseEditingFinished (EditableCellViewArgs args) { - EditingFinished?.Invoke (this, EventArgs.Empty); + EditingFinished?.Invoke (this, args); } } } diff --git a/Xwt/Xwt/TextCellView.cs b/Xwt/Xwt/TextCellView.cs index 309fa0f1b..a482a4eec 100644 --- a/Xwt/Xwt/TextCellView.cs +++ b/Xwt/Xwt/TextCellView.cs @@ -117,11 +117,11 @@ bool ITextCellViewFrontend.RaiseTextChanged (string newText) return false; } - public event EventHandler EditingFinished; + public event EventHandler EditingFinished; - public void RaiseEditingFinished () + public void RaiseEditingFinished (EditableCellViewArgs args) { - EditingFinished?.Invoke (this, EventArgs.Empty); + EditingFinished?.Invoke (this, args); } } } From 92ee2a03108e3bc12c59e1a10856e38845f6fad1 Mon Sep 17 00:00:00 2001 From: Jose Medrano Date: Mon, 11 Feb 2019 10:28:47 +0100 Subject: [PATCH 3/4] EditableCellViewArgs to Xwt.CellEditingFinishedArgs and work with generics --- TestApps/Samples/Samples/ListView2.cs | 27 +++++++++++-------- TestApps/Samples/Samples/ListViewCombos.cs | 12 ++++++--- TestApps/Samples/Samples/TreeViews.cs | 17 +++++++----- .../CustomCellRendererComboBox.cs | 2 +- .../CustomCellRendererText.cs | 2 +- .../CustomCellRendererToggle.cs | 4 +-- Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs | 16 +++++------ Xwt/Xwt.Backends/ITextCellViewFrontend.cs | 2 +- Xwt/Xwt.Backends/IToggleCellViewFrontend.cs | 2 +- Xwt/Xwt/CheckBoxCellView.cs | 4 +-- Xwt/Xwt/ComboBoxCellView.cs | 4 +-- Xwt/Xwt/RadioButtonCellView.cs | 4 +-- Xwt/Xwt/TextCellView.cs | 4 +-- 13 files changed, 57 insertions(+), 43 deletions(-) diff --git a/TestApps/Samples/Samples/ListView2.cs b/TestApps/Samples/Samples/ListView2.cs index 985632e58..6fec8bc8e 100644 --- a/TestApps/Samples/Samples/ListView2.cs +++ b/TestApps/Samples/Samples/ListView2.cs @@ -20,8 +20,8 @@ public ListView2 () list.DataSource = store; list.GridLinesVisible = GridLines.Horizontal; - var checkCellView = new CheckBoxCellView { Editable = true, ActiveField = editableActiveField }; - checkCellView.Toggled += (sender, e) => { + var cellView = new CheckBoxCellView { Editable = true, ActiveField = editableActiveField }; + cellView.Toggled += (sender, e) => { if (list.CurrentEventRow == null) { MessageDialog.ShowError("CurrentEventRow is null. This is not supposed to happen"); @@ -30,24 +30,24 @@ public ListView2 () store.SetValue(list.CurrentEventRow, textField, "Toggled"); } }; - checkCellView.EditingFinished += CellView_EditingFinished; + cellView.EditingFinished += CellView_EditingFinished; - list.Columns.Add (new ListViewColumn("Editable", checkCellView)); + list.Columns.Add (new ListViewColumn("Editable", cellView)); list.Columns.Add (new ListViewColumn("Not Editable", new CheckBoxCellView { Editable = false, ActiveField = nonEditableActiveField })); - Xwt.Backends.IEditableCellViewFrontend cellView = new TextCellView { Editable = true, TextField = textField }; - cellView.EditingFinished += CellView_EditingFinished; - list.Columns.Add (new ListViewColumn("Editable",(CellView) cellView)); + Xwt.Backends.IEditableCellViewFrontend stringCellView = new TextCellView { Editable = true, TextField = textField }; + stringCellView.EditingFinished += StringCellView_EditingFinished; + list.Columns.Add (new ListViewColumn("Editable",(CellView) stringCellView)); cellView = new CheckBoxCellView { EditableField = editableField, ActiveField = somewhatEditableData }; cellView.EditingFinished += CellView_EditingFinished; list.Columns.Add(new ListViewColumn("Somewhat Editable",(CellView) cellView)); - cellView = new TextCellView { EditableField = editableField, TextField = textField2 }; - cellView.EditingFinished += CellView_EditingFinished; + stringCellView = new TextCellView { EditableField = editableField, TextField = textField2 }; + stringCellView.EditingFinished += StringCellView_EditingFinished; - list.Columns.Add (new ListViewColumn("Somewhat Editable", (CellView)cellView)); + list.Columns.Add (new ListViewColumn("Somewhat Editable", (CellView)stringCellView)); Random rand = new Random (); @@ -64,7 +64,12 @@ public ListView2 () PackStart (list, true); } - void CellView_EditingFinished(object sender, Xwt.Backends.EditableCellViewArgs e) + void CellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } + + void StringCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/TestApps/Samples/Samples/ListViewCombos.cs b/TestApps/Samples/Samples/ListViewCombos.cs index c50edeeb3..d026bc883 100644 --- a/TestApps/Samples/Samples/ListViewCombos.cs +++ b/TestApps/Samples/Samples/ListViewCombos.cs @@ -49,12 +49,11 @@ public ListViewCombos () comboCellView.Items.Add (1, "one"); comboCellView.Items.Add (2, "two"); comboCellView.Items.Add (3, "three"); - - comboCellView.EditingFinished += ComboCellView_EditingFinished; - + comboCellView.EditingFinished += TextCellView_EditingFinished; list.Columns.Add (new ListViewColumn ("List 1", comboCellView)); var comboCellView2 = new ComboBoxCellView { Editable = true, SelectedIndexField = indexField2, ItemsField = itemsField }; + comboCellView2.EditingFinished += TextCellView_EditingFinished; list.Columns.Add (new ListViewColumn ("List 2", comboCellView2)); int p = 0; @@ -71,7 +70,12 @@ public ListViewCombos () PackStart (list, true); } - void ComboCellView_EditingFinished (object sender, Xwt.Backends.EditableCellViewArgs e) + void ComboCellView_EditingFinished (object sender, Xwt.Backends.CellEditingFinishedArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } + + void TextCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/TestApps/Samples/Samples/TreeViews.cs b/TestApps/Samples/Samples/TreeViews.cs index 736e26207..a78e78b6b 100644 --- a/TestApps/Samples/Samples/TreeViews.cs +++ b/TestApps/Samples/Samples/TreeViews.cs @@ -54,7 +54,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "TriState Toggled"); } }; - triStateCellView.EditingFinished += CellView_EditingFinished; + triStateCellView.EditingFinished += CheckBoxCellView_EditingFinished; var checkCellView = new CheckBoxCellView (check) { Editable = true }; checkCellView.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -64,7 +64,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "Toggled " + checkCellView.Active); } }; - checkCellView.EditingFinished += CellView_EditingFinished; + checkCellView.EditingFinished += CheckBoxCellView_EditingFinished; var optionCellView1 = new RadioButtonCellView (option1) { Editable = true }; optionCellView1.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -73,7 +73,7 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option2, optionCellView1.Active); } }; - optionCellView1.EditingFinished += CellView_EditingFinished; + optionCellView1.EditingFinished += CheckBoxCellView_EditingFinished; var optionCellView2 = new RadioButtonCellView (option2) { Editable = true }; optionCellView2.Toggled += (object sender, WidgetEventArgs e) => { @@ -83,7 +83,7 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option1, optionCellView2.Active); } }; - optionCellView2.EditingFinished += CellView_EditingFinished; + optionCellView2.EditingFinished += CheckBoxCellView_EditingFinished; TreePosition initialActive = null; var optionCellView3 = new RadioButtonCellView (option3) { Editable = true }; @@ -96,7 +96,7 @@ public TreeViews () initialActive = view.CurrentEventRow; } }; - optionCellView3.EditingFinished += CellView_EditingFinished; + optionCellView3.EditingFinished += CheckBoxCellView_EditingFinished; view.Columns.Add ("TriCheck", triStateCellView); view.Columns.Add ("Check", checkCellView); view.Columns.Add ("Radio", optionCellView1, optionCellView2, optionCellView3); @@ -235,7 +235,12 @@ public TreeViews () view.RowExpanded += (sender, e) => label.Text = "Row expanded: " + store.GetNavigatorAt (e.Position).GetValue (text); } - void CellView_EditingFinished(object sender, Xwt.Backends.EditableCellViewArgs e) + void CheckBoxCellView_EditingFinished (object sender, Xwt.Backends.CellEditingFinishedArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } + + void StringCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs index 50215c04f..8336d2879 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererComboBox.cs @@ -132,7 +132,7 @@ void HandleEdited (object o, Gtk.EditedArgs args) if (view.SelectedTextField != null) CellUtil.SetModelValue (TreeModel, CurrentIter, view.SelectedTextField.Index, typeof (string), args.NewText); - view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, args.NewText)); + view.RaiseEditingFinished (new CellEditingFinishedArgs (lastValue, args.NewText)); lastValue = args.NewText; } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs index fd80a24c9..b614ebc27 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererText.cs @@ -75,7 +75,7 @@ void HandleEdited (object o, EditedArgs args) Gtk.TreeIter iter; if (TreeModel.GetIterFromString (out iter, args.Path)) CellUtil.SetModelValue (TreeModel, iter, view.TextField.Index, view.TextField.FieldType, args.NewText); - view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, args.NewText)); + view.RaiseEditingFinished (new CellEditingFinishedArgs (lastValue, args.NewText)); } } } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs index 922150615..b87bfeefb 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs @@ -92,12 +92,12 @@ void HandleToggled (object o, ToggledArgs args) (object) newState : (object) (newState == CheckBoxState.On); CellUtil.SetModelValue (TreeModel, iter, field.Index, type, newValue); - view.RaiseEditingFinished(new EditableCellViewArgs(lastValue, newState)); + view.RaiseEditingFinished(new CellEditingFinishedArgs (lastValue, newState)); lastValue = newState; return; } - view.RaiseEditingFinished (new EditableCellViewArgs (lastValue, lastValue)); + view.RaiseEditingFinished (new CellEditingFinishedArgs (lastValue, lastValue)); } } } diff --git a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs index b51ba88e0..bccc67b3e 100644 --- a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs @@ -27,25 +27,25 @@ namespace Xwt.Backends { - public class EditableCellViewArgs : EventArgs + public class CellEditingFinishedArgs : EventArgs { - public EditableCellViewArgs(object oldValue, object newValue) + public CellEditingFinishedArgs(T oldValue, T newValue) { OldValue = oldValue; NewValue = newValue; } - public object OldValue { get; set; } - public object NewValue { get; set; } + public T OldValue { get; set; } + public T NewValue { get; set; } } - public interface IEditableCellViewFrontend + public interface IEditableCellViewFrontend { - event EventHandler EditingFinished; - void RaiseEditingFinished (EditableCellViewArgs args); + event EventHandler> EditingFinished; + void RaiseEditingFinished (CellEditingFinishedArgs args); } - public interface IComboBoxCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend + public interface IComboBoxCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend { IDataField SelectedTextField { get; } IDataField SelectedIndexField { get; } diff --git a/Xwt/Xwt.Backends/ITextCellViewFrontend.cs b/Xwt/Xwt.Backends/ITextCellViewFrontend.cs index da6b61b9b..87dbb744b 100644 --- a/Xwt/Xwt.Backends/ITextCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/ITextCellViewFrontend.cs @@ -27,7 +27,7 @@ namespace Xwt.Backends { - public interface ITextCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend + public interface ITextCellViewFrontend: ICellViewFrontend, IEditableCellViewFrontend { string Markup { get; } string Text { get; } diff --git a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs index 1459baf35..0ba888a6f 100644 --- a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs @@ -27,7 +27,7 @@ namespace Xwt.Backends { - public interface IToggleCellViewFrontend : ICellViewFrontend, IEditableCellViewFrontend + public interface IToggleCellViewFrontend : ICellViewFrontend, IEditableCellViewFrontend { bool Active { get; } bool Editable { get; } diff --git a/Xwt/Xwt/CheckBoxCellView.cs b/Xwt/Xwt/CheckBoxCellView.cs index ab99e5f35..2b723b903 100644 --- a/Xwt/Xwt/CheckBoxCellView.cs +++ b/Xwt/Xwt/CheckBoxCellView.cs @@ -101,7 +101,7 @@ public bool AllowMixed { } public event EventHandler Toggled; - public event EventHandler EditingFinished; + public event EventHandler> EditingFinished; /// /// Raises the toggled event @@ -117,7 +117,7 @@ public bool RaiseToggled () return false; } - public void RaiseEditingFinished (EditableCellViewArgs args) + public void RaiseEditingFinished (CellEditingFinishedArgs args) { EditingFinished?.Invoke (this, args); } diff --git a/Xwt/Xwt/ComboBoxCellView.cs b/Xwt/Xwt/ComboBoxCellView.cs index b2975566f..40b6bc620 100644 --- a/Xwt/Xwt/ComboBoxCellView.cs +++ b/Xwt/Xwt/ComboBoxCellView.cs @@ -125,9 +125,9 @@ public bool RaiseSelectionChanged () return false; } - public event EventHandler EditingFinished; + public event EventHandler> EditingFinished; - public void RaiseEditingFinished (EditableCellViewArgs args) + public void RaiseEditingFinished (CellEditingFinishedArgs args) { EditingFinished?.Invoke (this, args); } diff --git a/Xwt/Xwt/RadioButtonCellView.cs b/Xwt/Xwt/RadioButtonCellView.cs index 58a8915be..3ad1cef2d 100644 --- a/Xwt/Xwt/RadioButtonCellView.cs +++ b/Xwt/Xwt/RadioButtonCellView.cs @@ -80,9 +80,9 @@ public bool RaiseToggled () return false; } - public event EventHandler EditingFinished; + public event EventHandler> EditingFinished; - public void RaiseEditingFinished (EditableCellViewArgs args) + public void RaiseEditingFinished (CellEditingFinishedArgs args) { EditingFinished?.Invoke (this, args); } diff --git a/Xwt/Xwt/TextCellView.cs b/Xwt/Xwt/TextCellView.cs index a482a4eec..8a4a4fc08 100644 --- a/Xwt/Xwt/TextCellView.cs +++ b/Xwt/Xwt/TextCellView.cs @@ -117,9 +117,9 @@ bool ITextCellViewFrontend.RaiseTextChanged (string newText) return false; } - public event EventHandler EditingFinished; + public event EventHandler> EditingFinished; - public void RaiseEditingFinished (EditableCellViewArgs args) + public void RaiseEditingFinished (CellEditingFinishedArgs args) { EditingFinished?.Invoke (this, args); } From f75231ae2bbda9ebc080548414aa151017e083a8 Mon Sep 17 00:00:00 2001 From: Jose Medrano Date: Mon, 11 Feb 2019 12:09:35 +0100 Subject: [PATCH 4/4] Differenciates between RadioButton and CheckBox frontend --- TestApps/Samples/Samples/ListView2.cs | 8 ++-- TestApps/Samples/Samples/ListViewCombos.cs | 8 ++-- TestApps/Samples/Samples/TreeViews.cs | 19 +++++---- .../CustomCellRendererToggle.cs | 14 ++++++- Xwt/Xwt.Backends/ICheckBoxCellViewFrontend.cs | 2 +- Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs | 12 ------ .../IRadioButtonCellViewFrontend.cs | 2 +- Xwt/Xwt.Backends/IToggleCellViewFrontend.cs | 3 +- Xwt/Xwt/CellEditingFinishedArgs.cs | 41 +++++++++++++++++++ Xwt/Xwt/RadioButtonCellView.cs | 4 +- 10 files changed, 78 insertions(+), 35 deletions(-) create mode 100644 Xwt/Xwt/CellEditingFinishedArgs.cs diff --git a/TestApps/Samples/Samples/ListView2.cs b/TestApps/Samples/Samples/ListView2.cs index 6fec8bc8e..c588578d9 100644 --- a/TestApps/Samples/Samples/ListView2.cs +++ b/TestApps/Samples/Samples/ListView2.cs @@ -37,7 +37,7 @@ public ListView2 () list.Columns.Add (new ListViewColumn("Not Editable", new CheckBoxCellView { Editable = false, ActiveField = nonEditableActiveField })); Xwt.Backends.IEditableCellViewFrontend stringCellView = new TextCellView { Editable = true, TextField = textField }; - stringCellView.EditingFinished += StringCellView_EditingFinished; + stringCellView.EditingFinished += CellView_EditingFinished; list.Columns.Add (new ListViewColumn("Editable",(CellView) stringCellView)); cellView = new CheckBoxCellView { EditableField = editableField, ActiveField = somewhatEditableData }; @@ -45,7 +45,7 @@ public ListView2 () list.Columns.Add(new ListViewColumn("Somewhat Editable",(CellView) cellView)); stringCellView = new TextCellView { EditableField = editableField, TextField = textField2 }; - stringCellView.EditingFinished += StringCellView_EditingFinished; + stringCellView.EditingFinished += CellView_EditingFinished; list.Columns.Add (new ListViewColumn("Somewhat Editable", (CellView)stringCellView)); @@ -64,12 +64,12 @@ public ListView2 () PackStart (list, true); } - void CellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished(object sender, Xwt.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } - void StringCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished(object sender, Xwt.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/TestApps/Samples/Samples/ListViewCombos.cs b/TestApps/Samples/Samples/ListViewCombos.cs index d026bc883..3fb2e4c78 100644 --- a/TestApps/Samples/Samples/ListViewCombos.cs +++ b/TestApps/Samples/Samples/ListViewCombos.cs @@ -49,11 +49,11 @@ public ListViewCombos () comboCellView.Items.Add (1, "one"); comboCellView.Items.Add (2, "two"); comboCellView.Items.Add (3, "three"); - comboCellView.EditingFinished += TextCellView_EditingFinished; + comboCellView.EditingFinished += CellView_EditingFinished; list.Columns.Add (new ListViewColumn ("List 1", comboCellView)); var comboCellView2 = new ComboBoxCellView { Editable = true, SelectedIndexField = indexField2, ItemsField = itemsField }; - comboCellView2.EditingFinished += TextCellView_EditingFinished; + comboCellView2.EditingFinished += CellView_EditingFinished; list.Columns.Add (new ListViewColumn ("List 2", comboCellView2)); int p = 0; @@ -70,12 +70,12 @@ public ListViewCombos () PackStart (list, true); } - void ComboCellView_EditingFinished (object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished (object sender, CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } - void TextCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished(object sender, CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/TestApps/Samples/Samples/TreeViews.cs b/TestApps/Samples/Samples/TreeViews.cs index a78e78b6b..db9ccb947 100644 --- a/TestApps/Samples/Samples/TreeViews.cs +++ b/TestApps/Samples/Samples/TreeViews.cs @@ -54,7 +54,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "TriState Toggled"); } }; - triStateCellView.EditingFinished += CheckBoxCellView_EditingFinished; + triStateCellView.EditingFinished += CellView_EditingFinished; var checkCellView = new CheckBoxCellView (check) { Editable = true }; checkCellView.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -64,7 +64,7 @@ public TreeViews () store.GetNavigatorAt(view.CurrentEventRow).SetValue(text, "Toggled " + checkCellView.Active); } }; - checkCellView.EditingFinished += CheckBoxCellView_EditingFinished; + checkCellView.EditingFinished += CellView_EditingFinished; var optionCellView1 = new RadioButtonCellView (option1) { Editable = true }; optionCellView1.Toggled += (object sender, WidgetEventArgs e) => { if (view.CurrentEventRow == null) { @@ -73,7 +73,7 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option2, optionCellView1.Active); } }; - optionCellView1.EditingFinished += CheckBoxCellView_EditingFinished; + optionCellView1.EditingFinished += CellView_EditingFinished; var optionCellView2 = new RadioButtonCellView (option2) { Editable = true }; optionCellView2.Toggled += (object sender, WidgetEventArgs e) => { @@ -83,7 +83,7 @@ public TreeViews () store.GetNavigatorAt (view.CurrentEventRow).SetValue (option1, optionCellView2.Active); } }; - optionCellView2.EditingFinished += CheckBoxCellView_EditingFinished; + optionCellView2.EditingFinished += CellView_EditingFinished; TreePosition initialActive = null; var optionCellView3 = new RadioButtonCellView (option3) { Editable = true }; @@ -96,7 +96,7 @@ public TreeViews () initialActive = view.CurrentEventRow; } }; - optionCellView3.EditingFinished += CheckBoxCellView_EditingFinished; + optionCellView3.EditingFinished += CellView_EditingFinished; view.Columns.Add ("TriCheck", triStateCellView); view.Columns.Add ("Check", checkCellView); view.Columns.Add ("Radio", optionCellView1, optionCellView2, optionCellView3); @@ -235,12 +235,17 @@ public TreeViews () view.RowExpanded += (sender, e) => label.Text = "Row expanded: " + store.GetNavigatorAt (e.Position).GetValue (text); } - void CheckBoxCellView_EditingFinished (object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished(object sender, Xwt.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } - void StringCellView_EditingFinished(object sender, Xwt.Backends.CellEditingFinishedArgs e) + void CellView_EditingFinished(object sender, Xwt.CellEditingFinishedArgs e) + { + Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); + } + + void CellView_EditingFinished(object sender, Xwt.CellEditingFinishedArgs e) { Console.WriteLine("Your old value was '{0}' and now is '{1}'", e.OldValue, e.NewValue); } diff --git a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs index b87bfeefb..e40600838 100644 --- a/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs +++ b/Xwt.Gtk/Xwt.GtkBackend.CellViews/CustomCellRendererToggle.cs @@ -92,12 +92,22 @@ void HandleToggled (object o, ToggledArgs args) (object) newState : (object) (newState == CheckBoxState.On); CellUtil.SetModelValue (TreeModel, iter, field.Index, type, newValue); - view.RaiseEditingFinished(new CellEditingFinishedArgs (lastValue, newState)); + + if (view is ICheckBoxCellViewFrontend) { + ((ICheckBoxCellViewFrontend)view).RaiseEditingFinished(new CellEditingFinishedArgs(lastValue, newState)); + } else if (view is IRadioButtonCellViewFrontend) { + ((IRadioButtonCellViewFrontend)view).RaiseEditingFinished(new CellEditingFinishedArgs(lastValue == CheckBoxState.On, newState == CheckBoxState.On)); + } + lastValue = newState; return; } - view.RaiseEditingFinished (new CellEditingFinishedArgs (lastValue, lastValue)); + if (view is ICheckBoxCellViewFrontend) { + ((ICheckBoxCellViewFrontend)view).RaiseEditingFinished(new CellEditingFinishedArgs(lastValue, lastValue)); + } else if (view is IRadioButtonCellViewFrontend) { + ((IRadioButtonCellViewFrontend)view).RaiseEditingFinished(new CellEditingFinishedArgs(lastValue == CheckBoxState.On, lastValue == CheckBoxState.On)); + } } } } diff --git a/Xwt/Xwt.Backends/ICheckBoxCellViewFrontend.cs b/Xwt/Xwt.Backends/ICheckBoxCellViewFrontend.cs index b7b79a137..714f3d433 100644 --- a/Xwt/Xwt.Backends/ICheckBoxCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/ICheckBoxCellViewFrontend.cs @@ -27,7 +27,7 @@ namespace Xwt.Backends { - public interface ICheckBoxCellViewFrontend: IToggleCellViewFrontend + public interface ICheckBoxCellViewFrontend: IToggleCellViewFrontend, IEditableCellViewFrontend { CheckBoxState State { get; } bool AllowMixed { get; } diff --git a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs index bccc67b3e..8aec8aa16 100644 --- a/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IComboBoxCellViewFrontend.cs @@ -27,18 +27,6 @@ namespace Xwt.Backends { - public class CellEditingFinishedArgs : EventArgs - { - public CellEditingFinishedArgs(T oldValue, T newValue) - { - OldValue = oldValue; - NewValue = newValue; - } - - public T OldValue { get; set; } - public T NewValue { get; set; } - } - public interface IEditableCellViewFrontend { event EventHandler> EditingFinished; diff --git a/Xwt/Xwt.Backends/IRadioButtonCellViewFrontend.cs b/Xwt/Xwt.Backends/IRadioButtonCellViewFrontend.cs index 3ce06296d..b82071911 100644 --- a/Xwt/Xwt.Backends/IRadioButtonCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IRadioButtonCellViewFrontend.cs @@ -26,7 +26,7 @@ namespace Xwt.Backends { - public interface IRadioButtonCellViewFrontend: IToggleCellViewFrontend + public interface IRadioButtonCellViewFrontend: IToggleCellViewFrontend, IEditableCellViewFrontend { } } diff --git a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs index 0ba888a6f..ed5e72440 100644 --- a/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs +++ b/Xwt/Xwt.Backends/IToggleCellViewFrontend.cs @@ -26,8 +26,7 @@ namespace Xwt.Backends { - - public interface IToggleCellViewFrontend : ICellViewFrontend, IEditableCellViewFrontend + public interface IToggleCellViewFrontend : ICellViewFrontend { bool Active { get; } bool Editable { get; } diff --git a/Xwt/Xwt/CellEditingFinishedArgs.cs b/Xwt/Xwt/CellEditingFinishedArgs.cs new file mode 100644 index 000000000..b282b4c88 --- /dev/null +++ b/Xwt/Xwt/CellEditingFinishedArgs.cs @@ -0,0 +1,41 @@ +// +// IComboBoxCellViewFrontend.cs +// +// Author: +// Lluis Sanchez Gual +// +// Copyright (c) 2016 Xamarin, Inc (http://www.xamarin.com) +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +using System; + +namespace Xwt +{ + public class CellEditingFinishedArgs : EventArgs + { + public CellEditingFinishedArgs(T oldValue, T newValue) + { + OldValue = oldValue; + NewValue = newValue; + } + + public T OldValue { get; set; } + public T NewValue { get; set; } + } +} diff --git a/Xwt/Xwt/RadioButtonCellView.cs b/Xwt/Xwt/RadioButtonCellView.cs index 3ad1cef2d..096df96f1 100644 --- a/Xwt/Xwt/RadioButtonCellView.cs +++ b/Xwt/Xwt/RadioButtonCellView.cs @@ -80,9 +80,9 @@ public bool RaiseToggled () return false; } - public event EventHandler> EditingFinished; + public event EventHandler> EditingFinished; - public void RaiseEditingFinished (CellEditingFinishedArgs args) + public void RaiseEditingFinished (CellEditingFinishedArgs args) { EditingFinished?.Invoke (this, args); }