[gnome-contacts] edit-mode: added [Cancel] button
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts] edit-mode: added [Cancel] button
- Date: Sat, 7 Jun 2014 13:49:58 +0000 (UTC)
commit 07c015655bfbb9656b5df5bc0472ab68b32cc61a
Author: Erick Pérez Castellanos <erick red gmail com>
Date: Sat Jun 7 09:35:36 2014 -0400
edit-mode: added [Cancel] button
build: moved a bunch of constraints to use gproperty bindings
data/ui/contacts-window.ui | 16 ++++++
src/contacts-contact-pane.vala | 54 ++++++++++---------
src/contacts-window.vala | 114 +++++++++++++++++++++++++++------------
3 files changed, 123 insertions(+), 61 deletions(-)
---
diff --git a/data/ui/contacts-window.ui b/data/ui/contacts-window.ui
index 9316c72..46b0f4d 100644
--- a/data/ui/contacts-window.ui
+++ b/data/ui/contacts-window.ui
@@ -237,6 +237,22 @@
<class name="titlebar"/>
</style>
<child>
+ <object class="GtkButton" id="cancel_button">
+ <property name="visible">False</property>
+ <property name="can_focus">True</property>
+ <property name="focus_on_click">False</property>
+ <property name="label" translatable="yes">Cancel</property>
+ <property name="width_request">70</property>
+ <property name="valign">center</property>
+ <style>
+ <class name="text-button"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkButton" id="edit_button">
<property name="visible">False</property>
<property name="can_focus">True</property>
diff --git a/src/contacts-contact-pane.vala b/src/contacts-contact-pane.vala
index 01ae08f..8dd633e 100644
--- a/src/contacts-contact-pane.vala
+++ b/src/contacts-contact-pane.vala
@@ -425,7 +425,7 @@ public class Contacts.ContactPane : Notebook {
set_current_page (0);
}
- public void set_edit_mode (bool on_edit) {
+ public void set_edit_mode (bool on_edit, bool drop_changes = false) {
if (on_edit == on_edit_mode)
return;
@@ -450,31 +450,33 @@ public class Contacts.ContactPane : Notebook {
} else {
on_edit_mode = false;
/* saving changes */
- foreach (var prop in editor.properties_changed ().entries) {
- Contact.set_persona_property.begin (prop.value.persona, prop.key, prop.value.value,
- (obj, result) => {
- try {
- Contact.set_persona_property.end (result);
- } catch (Error e2) {
- App.app.show_message (e2.message);
- update_sheet ();
- }
- });
- }
-
- if (editor.name_changed ()) {
- var v = editor.get_full_name_value ();
- Contact.set_individual_property.begin (contact,
- "full-name", v,
- (obj, result) => {
- try {
- Contact.set_individual_property.end (result);
- } catch (Error e) {
- App.app.show_message (e.message);
- /* FIXME: add this back */
- /* l.set_markup (Markup.printf_escaped ("<span
font='16'>%s</span>", contact.display_name)); */
- }
- });
+ if (!drop_changes) {
+ foreach (var prop in editor.properties_changed ().entries) {
+ Contact.set_persona_property.begin (prop.value.persona, prop.key, prop.value.value,
+ (obj, result) => {
+ try {
+ Contact.set_persona_property.end (result);
+ } catch (Error e2) {
+ App.app.show_message (e2.message);
+ update_sheet ();
+ }
+ });
+ }
+
+ if (editor.name_changed ()) {
+ var v = editor.get_full_name_value ();
+ Contact.set_individual_property.begin (contact,
+ "full-name", v,
+ (obj, result) => {
+ try {
+ Contact.set_individual_property.end (result);
+ } catch (Error e) {
+ App.app.show_message (e.message);
+ /* FIXME: add this back */
+ /* l.set_markup (Markup.printf_escaped ("<span
font='16'>%s</span>", contact.display_name)); */
+ }
+ });
+ }
}
editor.clear ();
diff --git a/src/contacts-window.vala b/src/contacts-window.vala
index a5c0dbd..df88990 100644
--- a/src/contacts-window.vala
+++ b/src/contacts-window.vala
@@ -41,6 +41,8 @@ public class Contacts.Window : Gtk.ApplicationWindow {
[GtkChild]
private Button edit_button;
[GtkChild]
+ private Button cancel_button;
+ [GtkChild]
private Button done_button;
[GtkChild]
@@ -85,12 +87,57 @@ public class Contacts.Window : Gtk.ApplicationWindow {
get; construct set;
}
+ public bool selection_mode {
+ get; set;
+ }
+
+ public bool edit_mode {
+ get; set;
+ }
+
public Window (Gtk.Application app, Store contacts_store) {
Object (application: app, store: contacts_store);
debug ("everyone creation: finalized already!!!");
contact_pane.store = contacts_store;
+ /* stablishing constraints */
+ this.bind_property ("selection-mode",
+ right_toolbar, "show-close-button",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+ this.bind_property ("selection-mode",
+ add_button, "visible",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+ this.bind_property ("selection-mode",
+ edit_button, "visible",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+
+ this.bind_property ("edit-mode",
+ edit_button, "visible",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+ this.bind_property ("edit-mode",
+ done_button, "visible",
+ BindingFlags.DEFAULT);
+ this.bind_property ("edit-mode",
+ cancel_button, "visible",
+ BindingFlags.DEFAULT);
+ this.bind_property ("edit-mode",
+ add_button, "visible",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+ this.bind_property ("edit-mode",
+ select_button, "visible",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+ this.bind_property ("edit-mode",
+ right_toolbar, "show-close-button",
+ BindingFlags.DEFAULT |
+ BindingFlags.INVERT_BOOLEAN);
+
if ((app as App).settings.get_boolean ("did-initial-setup")) {
view_switcher.visible_child_name = "content-view";
set_titlebar (content_header_bar);
@@ -164,64 +211,57 @@ public class Contacts.Window : Gtk.ApplicationWindow {
public void activate_selection_mode (bool active) {
if (active) {
- add_button.hide ();
- edit_button.hide ();
+ selection_mode = true;
left_toolbar.get_style_context ().add_class ("selection-mode");
right_toolbar.get_style_context ().add_class ("selection-mode");
left_toolbar.set_title (_("Select"));
- right_toolbar.show_close_button = false;
list_pane.show_selection ();
} else {
- add_button.show ();
+ selection_mode = false;
left_toolbar.get_style_context ().remove_class ("selection-mode");
right_toolbar.get_style_context ().remove_class ("selection-mode");
left_toolbar.set_title (_("All Contacts"));
- right_toolbar.show_close_button = true;
list_pane.hide_selection ();
/* could be no contact selected whatsoever */
- if (contact_pane.contact != null)
- edit_button.show ();
+ if (contact_pane.contact == null)
+ edit_button.hide ();
}
}
- public void activate_edit_mode (bool active) {
- if (active) {
- if (contact_pane.contact == null)
- return;
+ public void enter_edit_mode () {
+ if (contact_pane.contact == null)
+ return;
- var name = contact_pane.contact.display_name;
- right_title = _("Editing %s").printf (name);
+ edit_mode = true;
- left_toolbar.get_style_context ().add_class ("selection-mode");
- right_toolbar.get_style_context ().add_class ("selection-mode");
+ var name = contact_pane.contact.display_name;
+ right_title = _("Editing %s").printf (name);
- edit_button.hide ();
- done_button.show ();
- contact_pane.set_edit_mode (true);
- } else {
- done_button.hide ();
- edit_button.show ();
- contact_pane.set_edit_mode (false);
+ left_toolbar.get_style_context ().add_class ("selection-mode");
+ right_toolbar.get_style_context ().add_class ("selection-mode");
- left_toolbar.get_style_context ().remove_class ("selection-mode");
- right_toolbar.get_style_context ().remove_class ("selection-mode");
+ contact_pane.set_edit_mode (true);
+ }
- if (contact_pane.contact != null)
- right_title = contact_pane.contact.display_name;
- else
- right_title = "";
- }
+ public void leave_edit_mode (bool drop_changes = false) {
+ edit_mode = false;
+
+ contact_pane.set_edit_mode (false, drop_changes);
+
+ left_toolbar.get_style_context ().remove_class ("selection-mode");
+ right_toolbar.get_style_context ().remove_class ("selection-mode");
- add_button.visible = !active;
- select_button.visible = !active;
- right_toolbar.show_close_button = !active;
+ if (contact_pane.contact != null)
+ right_title = contact_pane.contact.display_name;
+ else
+ right_title = "";
}
public void add_notification (Widget notification) {
@@ -231,7 +271,7 @@ public class Contacts.Window : Gtk.ApplicationWindow {
public void set_shown_contact (Contact? c) {
/* FIXME: ask the user to leave edit-mode and act accordingly */
if (contact_pane.on_edit_mode) {
- activate_edit_mode (false);
+ leave_edit_mode ();
}
contact_pane.show_contact (c, false);
@@ -262,11 +302,15 @@ public class Contacts.Window : Gtk.ApplicationWindow {
});
edit_button.clicked.connect (() => {
- activate_edit_mode (true);
+ enter_edit_mode ();
});
done_button.clicked.connect (() => {
- activate_edit_mode (false);
+ leave_edit_mode ();
+ });
+
+ cancel_button.clicked.connect (() => {
+ leave_edit_mode (true);
});
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]