edit-mode: added [Cancel] button

build: moved a bunch of constraints to use gproperty bindings
This commit is contained in:
Erick Pérez Castellanos 2014-06-07 09:35:36 -04:00
parent cbb437071e
commit 07c015655b
3 changed files with 122 additions and 60 deletions

View file

@ -236,6 +236,22 @@
<class name="contacts-right-header-bar"/> <class name="contacts-right-header-bar"/>
<class name="titlebar"/> <class name="titlebar"/>
</style> </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> <child>
<object class="GtkButton" id="edit_button"> <object class="GtkButton" id="edit_button">
<property name="visible">False</property> <property name="visible">False</property>

View file

@ -425,7 +425,7 @@ public class Contacts.ContactPane : Notebook {
set_current_page (0); 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) if (on_edit == on_edit_mode)
return; return;
@ -450,31 +450,33 @@ public class Contacts.ContactPane : Notebook {
} else { } else {
on_edit_mode = false; on_edit_mode = false;
/* saving changes */ /* saving changes */
foreach (var prop in editor.properties_changed ().entries) { if (!drop_changes) {
Contact.set_persona_property.begin (prop.value.persona, prop.key, prop.value.value, foreach (var prop in editor.properties_changed ().entries) {
(obj, result) => { Contact.set_persona_property.begin (prop.value.persona, prop.key, prop.value.value,
try { (obj, result) => {
Contact.set_persona_property.end (result); try {
} catch (Error e2) { Contact.set_persona_property.end (result);
App.app.show_message (e2.message); } catch (Error e2) {
update_sheet (); App.app.show_message (e2.message);
} update_sheet ();
}); }
} });
}
if (editor.name_changed ()) { if (editor.name_changed ()) {
var v = editor.get_full_name_value (); var v = editor.get_full_name_value ();
Contact.set_individual_property.begin (contact, Contact.set_individual_property.begin (contact,
"full-name", v, "full-name", v,
(obj, result) => { (obj, result) => {
try { try {
Contact.set_individual_property.end (result); Contact.set_individual_property.end (result);
} catch (Error e) { } catch (Error e) {
App.app.show_message (e.message); App.app.show_message (e.message);
/* FIXME: add this back */ /* FIXME: add this back */
/* l.set_markup (Markup.printf_escaped ("<span font='16'>%s</span>", contact.display_name)); */ /* l.set_markup (Markup.printf_escaped ("<span font='16'>%s</span>", contact.display_name)); */
} }
}); });
}
} }
editor.clear (); editor.clear ();

View file

@ -41,6 +41,8 @@ public class Contacts.Window : Gtk.ApplicationWindow {
[GtkChild] [GtkChild]
private Button edit_button; private Button edit_button;
[GtkChild] [GtkChild]
private Button cancel_button;
[GtkChild]
private Button done_button; private Button done_button;
[GtkChild] [GtkChild]
@ -85,12 +87,57 @@ public class Contacts.Window : Gtk.ApplicationWindow {
get; construct set; get; construct set;
} }
public bool selection_mode {
get; set;
}
public bool edit_mode {
get; set;
}
public Window (Gtk.Application app, Store contacts_store) { public Window (Gtk.Application app, Store contacts_store) {
Object (application: app, store: contacts_store); Object (application: app, store: contacts_store);
debug ("everyone creation: finalized already!!!"); debug ("everyone creation: finalized already!!!");
contact_pane.store = contacts_store; 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")) { if ((app as App).settings.get_boolean ("did-initial-setup")) {
view_switcher.visible_child_name = "content-view"; view_switcher.visible_child_name = "content-view";
set_titlebar (content_header_bar); set_titlebar (content_header_bar);
@ -164,64 +211,57 @@ public class Contacts.Window : Gtk.ApplicationWindow {
public void activate_selection_mode (bool active) { public void activate_selection_mode (bool active) {
if (active) { if (active) {
add_button.hide (); selection_mode = true;
edit_button.hide ();
left_toolbar.get_style_context ().add_class ("selection-mode"); left_toolbar.get_style_context ().add_class ("selection-mode");
right_toolbar.get_style_context ().add_class ("selection-mode"); right_toolbar.get_style_context ().add_class ("selection-mode");
left_toolbar.set_title (_("Select")); left_toolbar.set_title (_("Select"));
right_toolbar.show_close_button = false;
list_pane.show_selection (); list_pane.show_selection ();
} else { } else {
add_button.show (); selection_mode = false;
left_toolbar.get_style_context ().remove_class ("selection-mode"); left_toolbar.get_style_context ().remove_class ("selection-mode");
right_toolbar.get_style_context ().remove_class ("selection-mode"); right_toolbar.get_style_context ().remove_class ("selection-mode");
left_toolbar.set_title (_("All Contacts")); left_toolbar.set_title (_("All Contacts"));
right_toolbar.show_close_button = true;
list_pane.hide_selection (); list_pane.hide_selection ();
/* could be no contact selected whatsoever */ /* could be no contact selected whatsoever */
if (contact_pane.contact != null) if (contact_pane.contact == null)
edit_button.show (); edit_button.hide ();
} }
} }
public void activate_edit_mode (bool active) { public void enter_edit_mode () {
if (active) { if (contact_pane.contact == null)
if (contact_pane.contact == null) return;
return;
var name = contact_pane.contact.display_name; edit_mode = true;
right_title = _("Editing %s").printf (name);
left_toolbar.get_style_context ().add_class ("selection-mode"); var name = contact_pane.contact.display_name;
right_toolbar.get_style_context ().add_class ("selection-mode"); right_title = _("Editing %s").printf (name);
edit_button.hide (); left_toolbar.get_style_context ().add_class ("selection-mode");
done_button.show (); right_toolbar.get_style_context ().add_class ("selection-mode");
contact_pane.set_edit_mode (true);
} else {
done_button.hide ();
edit_button.show ();
contact_pane.set_edit_mode (false);
left_toolbar.get_style_context ().remove_class ("selection-mode"); contact_pane.set_edit_mode (true);
right_toolbar.get_style_context ().remove_class ("selection-mode"); }
if (contact_pane.contact != null) public void leave_edit_mode (bool drop_changes = false) {
right_title = contact_pane.contact.display_name; edit_mode = false;
else
right_title = "";
}
add_button.visible = !active; contact_pane.set_edit_mode (false, drop_changes);
select_button.visible = !active;
right_toolbar.show_close_button = !active; left_toolbar.get_style_context ().remove_class ("selection-mode");
right_toolbar.get_style_context ().remove_class ("selection-mode");
if (contact_pane.contact != null)
right_title = contact_pane.contact.display_name;
else
right_title = "";
} }
public void add_notification (Widget notification) { public void add_notification (Widget notification) {
@ -231,7 +271,7 @@ public class Contacts.Window : Gtk.ApplicationWindow {
public void set_shown_contact (Contact? c) { public void set_shown_contact (Contact? c) {
/* FIXME: ask the user to leave edit-mode and act accordingly */ /* FIXME: ask the user to leave edit-mode and act accordingly */
if (contact_pane.on_edit_mode) { if (contact_pane.on_edit_mode) {
activate_edit_mode (false); leave_edit_mode ();
} }
contact_pane.show_contact (c, false); contact_pane.show_contact (c, false);
@ -262,11 +302,15 @@ public class Contacts.Window : Gtk.ApplicationWindow {
}); });
edit_button.clicked.connect (() => { edit_button.clicked.connect (() => {
activate_edit_mode (true); enter_edit_mode ();
}); });
done_button.clicked.connect (() => { done_button.clicked.connect (() => {
activate_edit_mode (false); leave_edit_mode ();
});
cancel_button.clicked.connect (() => {
leave_edit_mode (true);
}); });
} }