AccountsList: reworked flow, refactore code
Renamed to AccountsList to match the filename Reorgnized the file a bit Prepared to use in SetupWindow
This commit is contained in:
parent
693ee080bf
commit
3e7ad72f18
2 changed files with 50 additions and 33 deletions
|
@ -19,20 +19,22 @@
|
||||||
using Gtk;
|
using Gtk;
|
||||||
using Folks;
|
using Folks;
|
||||||
|
|
||||||
public class Contacts.AccountsGrid : Frame {
|
public class Contacts.AccountsList : Frame {
|
||||||
ListBox accounts_view;
|
ListBox accounts_view;
|
||||||
ListBoxRow last_selected_row;
|
ListBoxRow last_selected_row;
|
||||||
Button add_account_button;
|
Button add_account_button;
|
||||||
|
|
||||||
public PersonaStore selected_store;
|
public PersonaStore selected_store;
|
||||||
|
|
||||||
public AccountsGrid () {
|
public signal void account_selected ();
|
||||||
|
|
||||||
|
public AccountsList () {
|
||||||
selected_store = null;
|
selected_store = null;
|
||||||
|
|
||||||
accounts_view = new ListBox ();
|
accounts_view = new ListBox ();
|
||||||
accounts_view.set_selection_mode (SelectionMode.BROWSE);
|
accounts_view.set_selection_mode (SelectionMode.BROWSE);
|
||||||
accounts_view.set_size_request (400, -1);
|
accounts_view.set_size_request (400, -1);
|
||||||
accounts_view.set_activate_on_single_click (true);
|
accounts_view.set_header_func (update_header_func);
|
||||||
|
|
||||||
var scrolled = new ScrolledWindow(null, null);
|
var scrolled = new ScrolledWindow(null, null);
|
||||||
scrolled.set_size_request (-1, 200);
|
scrolled.set_size_request (-1, 200);
|
||||||
|
@ -80,10 +82,46 @@ public class Contacts.AccountsGrid : Frame {
|
||||||
add (box);
|
add (box);
|
||||||
show_all ();
|
show_all ();
|
||||||
|
|
||||||
update_contents ();
|
/* signal handling */
|
||||||
|
accounts_view.row_selected.connect (row_selected);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void update_contents () {
|
private void row_selected (ListBoxRow? row) {
|
||||||
|
if (row == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
var row_data = (row as Bin).get_child ();
|
||||||
|
var account_label = (row_data as Grid).get_child_at (1, 0);
|
||||||
|
if (account_label != null)
|
||||||
|
account_label.get_style_context ().remove_class ("dim-label");
|
||||||
|
|
||||||
|
if (last_selected_row != null) {
|
||||||
|
var last_row_data = (last_selected_row as Bin).get_child ();
|
||||||
|
var last_account_label = (last_row_data as Grid).get_child_at (1, 0);
|
||||||
|
if (last_account_label != null)
|
||||||
|
last_account_label.get_style_context ().add_class ("dim-label");
|
||||||
|
}
|
||||||
|
|
||||||
|
last_selected_row = row;
|
||||||
|
|
||||||
|
selected_store = row_data.get_data<PersonaStore> ("store");
|
||||||
|
|
||||||
|
account_selected ();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update_header_func (ListBoxRow row, ListBoxRow? before) {
|
||||||
|
if (row.get_header () == null) {
|
||||||
|
row.set_header (new Separator (Orientation.HORIZONTAL));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
row.set_header (null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update_contents (bool select_active) {
|
||||||
|
foreach (var child in accounts_view.get_children ()) {
|
||||||
|
child.destroy ();
|
||||||
|
}
|
||||||
|
|
||||||
PersonaStore local_store = null;
|
PersonaStore local_store = null;
|
||||||
foreach (var persona_store in App.get_eds_address_books ()) {
|
foreach (var persona_store in App.get_eds_address_books ()) {
|
||||||
if (persona_store.id == "system-address-book") {
|
if (persona_store.id == "system-address-book") {
|
||||||
|
@ -111,7 +149,8 @@ public class Contacts.AccountsGrid : Frame {
|
||||||
|
|
||||||
accounts_view.add (row_data);
|
accounts_view.add (row_data);
|
||||||
|
|
||||||
if (persona_store == App.app.contacts_store.aggregator.primary_store) {
|
if (select_active &&
|
||||||
|
persona_store == App.app.contacts_store.aggregator.primary_store) {
|
||||||
var row = row_data.get_parent () as ListBoxRow;
|
var row = row_data.get_parent () as ListBoxRow;
|
||||||
accounts_view.select_row (row);
|
accounts_view.select_row (row);
|
||||||
}
|
}
|
||||||
|
@ -123,35 +162,12 @@ public class Contacts.AccountsGrid : Frame {
|
||||||
var local_label = new Label (_("Keep contacts on this computer only"));
|
var local_label = new Label (_("Keep contacts on this computer only"));
|
||||||
local_data.add (local_label);
|
local_data.add (local_label);
|
||||||
accounts_view.add (local_data);
|
accounts_view.add (local_data);
|
||||||
if (local_store == App.app.contacts_store.aggregator.primary_store) {
|
if (select_active &&
|
||||||
|
local_store == App.app.contacts_store.aggregator.primary_store) {
|
||||||
var row = local_data.get_parent () as ListBoxRow;
|
var row = local_data.get_parent () as ListBoxRow;
|
||||||
accounts_view.select_row (row);
|
accounts_view.select_row (row);
|
||||||
}
|
}
|
||||||
|
|
||||||
accounts_view.set_header_func ((row) => {
|
accounts_view.show_all ();
|
||||||
if (row.get_header () == null)
|
|
||||||
row.set_header (new Separator (Orientation.HORIZONTAL));
|
|
||||||
});
|
|
||||||
|
|
||||||
accounts_view.row_selected.connect ((row) => {
|
|
||||||
if (row == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var row_data = (row as Bin).get_child ();
|
|
||||||
var account_label = (row_data as Grid).get_child_at (1, 0);
|
|
||||||
if (account_label != null)
|
|
||||||
account_label.get_style_context ().remove_class ("dim-label");
|
|
||||||
|
|
||||||
if (last_selected_row != null) {
|
|
||||||
var last_row_data = (last_selected_row as Bin).get_child ();
|
|
||||||
var last_account_label = (last_row_data as Grid).get_child_at (1, 0);
|
|
||||||
if (last_account_label != null)
|
|
||||||
last_account_label.get_style_context ().add_class ("dim-label");
|
|
||||||
}
|
|
||||||
|
|
||||||
last_selected_row = row;
|
|
||||||
|
|
||||||
selected_store = row_data.get_data<PersonaStore> ("store");
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -137,7 +137,8 @@ public class Contacts.App : Gtk.Application {
|
||||||
|
|
||||||
dialog.set_titlebar (header);
|
dialog.set_titlebar (header);
|
||||||
|
|
||||||
var acc = new AccountsGrid ();
|
var acc = new AccountsList ();
|
||||||
|
acc.update_contents (true);
|
||||||
|
|
||||||
(dialog.get_content_area () as Box).add (acc);
|
(dialog.get_content_area () as Box).add (acc);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue