2018-04-14 12:09:06 +00:00
|
|
|
using Gtk;
|
|
|
|
|
|
|
|
public class Tootle.AccountsButton : Gtk.MenuButton{
|
|
|
|
|
|
|
|
Granite.Widgets.Avatar avatar;
|
|
|
|
Gtk.Grid grid;
|
|
|
|
Gtk.Popover menu;
|
2018-05-27 16:25:16 +00:00
|
|
|
Gtk.ListBox list;
|
2018-05-02 12:28:46 +00:00
|
|
|
Gtk.ModelButton item_settings;
|
2018-05-03 08:11:31 +00:00
|
|
|
Gtk.ModelButton item_refresh;
|
2018-05-14 14:43:10 +00:00
|
|
|
Gtk.ModelButton item_search;
|
2018-05-02 12:28:46 +00:00
|
|
|
Gtk.ModelButton item_favs;
|
2018-04-15 10:03:40 +00:00
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
private class AccountView : Gtk.ListBoxRow{
|
2018-04-15 10:03:40 +00:00
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
private Gtk.Grid grid;
|
2018-04-15 11:29:55 +00:00
|
|
|
public Gtk.Label display_name;
|
2018-05-27 16:25:16 +00:00
|
|
|
public Gtk.Label instance;
|
|
|
|
public Gtk.Button button;
|
|
|
|
public int id = -1;
|
|
|
|
|
2018-04-15 10:03:40 +00:00
|
|
|
construct {
|
2018-05-27 16:25:16 +00:00
|
|
|
can_default = false;
|
|
|
|
|
|
|
|
grid = new Gtk.Grid ();
|
|
|
|
grid.margin = 6;
|
|
|
|
grid.margin_start = 14;
|
2018-04-15 10:03:40 +00:00
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
display_name = new Gtk.Label ("");
|
2018-04-15 11:29:55 +00:00
|
|
|
display_name.hexpand = true;
|
|
|
|
display_name.halign = Gtk.Align.START;
|
|
|
|
display_name.use_markup = true;
|
2018-05-27 16:25:16 +00:00
|
|
|
instance = new Gtk.Label ("");
|
|
|
|
instance.halign = Gtk.Align.START;
|
|
|
|
button = new Gtk.Button.from_icon_name ("close-symbolic", Gtk.IconSize.SMALL_TOOLBAR);
|
|
|
|
button.receives_default = false;
|
|
|
|
button.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT);
|
2018-04-15 10:03:40 +00:00
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
grid.attach(display_name, 1, 0, 1, 1);
|
|
|
|
grid.attach(instance, 1, 1, 1, 1);
|
|
|
|
grid.attach(button, 2, 0, 2, 2);
|
|
|
|
add (grid);
|
|
|
|
show_all ();
|
2018-04-15 10:03:40 +00:00
|
|
|
}
|
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
public AccountView (){
|
|
|
|
button.clicked.connect (() => Tootle.accounts.remove (id));
|
|
|
|
}
|
2018-04-15 10:03:40 +00:00
|
|
|
|
|
|
|
}
|
2018-04-14 12:09:06 +00:00
|
|
|
|
|
|
|
construct{
|
|
|
|
avatar = new Granite.Widgets.Avatar.with_default_icon (24);
|
|
|
|
avatar.button_press_event.connect(event => {
|
|
|
|
return false;
|
|
|
|
});
|
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
list = new Gtk.ListBox ();
|
2018-04-15 10:03:40 +00:00
|
|
|
|
2018-04-14 12:09:06 +00:00
|
|
|
var item_separator = new Gtk.Separator (Gtk.Orientation.HORIZONTAL);
|
|
|
|
item_separator.hexpand = true;
|
|
|
|
|
2018-05-03 08:11:31 +00:00
|
|
|
item_refresh = new Gtk.ModelButton ();
|
|
|
|
item_refresh.text = _("Refresh");
|
2018-05-05 15:38:01 +00:00
|
|
|
item_refresh.clicked.connect (() => Tootle.app.refresh ());
|
2018-05-03 08:11:31 +00:00
|
|
|
|
2018-05-02 12:28:46 +00:00
|
|
|
item_favs = new Gtk.ModelButton ();
|
|
|
|
item_favs.text = _("Favorites");
|
2018-05-05 15:38:01 +00:00
|
|
|
item_favs.clicked.connect (() => Tootle.window.open_view (new FavoritesView ()));
|
2018-05-02 12:28:46 +00:00
|
|
|
|
2018-05-14 14:43:10 +00:00
|
|
|
item_search = new Gtk.ModelButton ();
|
|
|
|
item_search.text = _("Search");
|
|
|
|
item_search.clicked.connect (() => Tootle.window.open_view (new SearchView ()));
|
|
|
|
|
2018-05-02 12:28:46 +00:00
|
|
|
item_settings = new Gtk.ModelButton ();
|
2018-04-14 17:53:09 +00:00
|
|
|
item_settings.text = _("Settings");
|
2018-05-20 12:43:42 +00:00
|
|
|
item_settings.clicked.connect (() => SettingsDialog.open ());
|
2018-04-14 12:09:06 +00:00
|
|
|
|
|
|
|
grid = new Gtk.Grid ();
|
|
|
|
grid.orientation = Gtk.Orientation.VERTICAL;
|
|
|
|
grid.width_request = 200;
|
2018-05-27 16:25:16 +00:00
|
|
|
grid.attach(list, 0, 1, 1, 1);
|
|
|
|
grid.attach(item_separator, 0, 3, 1, 1);
|
|
|
|
grid.attach(item_favs, 0, 4, 1, 1);
|
|
|
|
grid.attach(new Gtk.Separator (Gtk.Orientation.HORIZONTAL), 0, 5, 1, 1);
|
|
|
|
grid.attach(item_refresh, 0, 6, 1, 1);
|
|
|
|
grid.attach(item_search, 0, 7, 1, 1);
|
2018-05-20 12:43:42 +00:00
|
|
|
grid.attach(item_settings, 0, 8, 1, 1);
|
2018-04-14 12:09:06 +00:00
|
|
|
grid.show_all ();
|
|
|
|
|
|
|
|
menu = new Gtk.Popover (null);
|
|
|
|
menu.add (grid);
|
|
|
|
|
|
|
|
get_style_context ().add_class ("button_avatar");
|
|
|
|
popover = menu;
|
|
|
|
add(avatar);
|
|
|
|
show_all ();
|
2018-04-14 17:18:42 +00:00
|
|
|
|
2018-05-27 16:25:16 +00:00
|
|
|
Tootle.accounts.updated.connect (accounts_updated);
|
|
|
|
Tootle.accounts.switched.connect (account_switched);
|
|
|
|
list.row_activated.connect (row => {
|
|
|
|
var widget = row as AccountView;
|
|
|
|
if (widget.id == -1) {
|
|
|
|
NewAccountDialog.open ();
|
|
|
|
return;
|
2018-04-15 10:03:40 +00:00
|
|
|
}
|
2018-05-27 16:25:16 +00:00
|
|
|
if (widget.id == Tootle.settings.current_account)
|
|
|
|
return;
|
|
|
|
else
|
|
|
|
Tootle.accounts.switch_account (widget.id);
|
2018-04-14 17:18:42 +00:00
|
|
|
});
|
2018-04-14 12:09:06 +00:00
|
|
|
}
|
2018-05-27 16:25:16 +00:00
|
|
|
|
|
|
|
private void accounts_updated (GenericArray<InstanceAccount> accounts) {
|
|
|
|
list.forall (widget => widget.destroy ());
|
|
|
|
int i = -1;
|
|
|
|
accounts.foreach (account => {
|
|
|
|
i++;
|
|
|
|
var widget = new AccountView ();
|
|
|
|
widget.id = i;
|
|
|
|
widget.display_name.label = "<b>@"+account.username+"</b>";
|
|
|
|
widget.instance.label = account.instance;
|
|
|
|
list.add (widget);
|
|
|
|
});
|
|
|
|
|
|
|
|
var add_account = new AccountView ();
|
|
|
|
add_account.display_name.label = _("<b>New Account</b>");
|
|
|
|
add_account.instance.label = _("Click to add");
|
|
|
|
add_account.button.hide ();
|
|
|
|
list.add (add_account);
|
|
|
|
update_selection ();
|
|
|
|
}
|
|
|
|
|
|
|
|
private void account_switched (Account? account) {
|
|
|
|
if (account == null)
|
|
|
|
avatar.show_default (24);
|
|
|
|
else
|
|
|
|
Tootle.network.load_avatar (account.avatar, avatar, 24);
|
2018-04-14 12:09:06 +00:00
|
|
|
}
|
2018-05-27 16:25:16 +00:00
|
|
|
|
|
|
|
private void update_selection () {
|
|
|
|
var id = Tootle.settings.current_account;
|
|
|
|
var row = list.get_row_at_index (id);
|
|
|
|
if (row != null)
|
|
|
|
list.select_row (row);
|
|
|
|
}
|
|
|
|
|
|
|
|
public AccountsButton() {}
|
2018-04-14 12:09:06 +00:00
|
|
|
|
|
|
|
}
|