Move HeaderBar to separate class
This commit is contained in:
parent
bc5cef17ac
commit
ed5d79d6ea
|
@ -29,6 +29,7 @@ executable(
|
||||||
'src/API/StatusVisibility.vala',
|
'src/API/StatusVisibility.vala',
|
||||||
'src/API/Notification.vala',
|
'src/API/Notification.vala',
|
||||||
'src/API/NotificationType.vala',
|
'src/API/NotificationType.vala',
|
||||||
|
'src/Widgets/HeaderBar.vala',
|
||||||
'src/Widgets/AlignedLabel.vala',
|
'src/Widgets/AlignedLabel.vala',
|
||||||
'src/Widgets/AccountsButton.vala',
|
'src/Widgets/AccountsButton.vala',
|
||||||
'src/Widgets/StatusWidget.vala',
|
'src/Widgets/StatusWidget.vala',
|
||||||
|
|
|
@ -2,7 +2,7 @@ using GLib;
|
||||||
|
|
||||||
public class Tootle.AccountManager : Object{
|
public class Tootle.AccountManager : Object{
|
||||||
|
|
||||||
public abstract signal void changed_current(Account? account);
|
public abstract signal void switched(Account? account);
|
||||||
public abstract signal void added(Account account);
|
public abstract signal void added(Account account);
|
||||||
public abstract signal void removed(Account account);
|
public abstract signal void removed(Account account);
|
||||||
|
|
||||||
|
@ -105,7 +105,7 @@ public class Tootle.AccountManager : Object{
|
||||||
try{
|
try{
|
||||||
var root = NetManager.parse (mess);
|
var root = NetManager.parse (mess);
|
||||||
current = Account.parse(root);
|
current = Account.parse(root);
|
||||||
changed_current (current);
|
switched (current);
|
||||||
}
|
}
|
||||||
catch (GLib.Error e) {
|
catch (GLib.Error e) {
|
||||||
warning ("Can't get current user");
|
warning ("Can't get current user");
|
||||||
|
@ -117,7 +117,7 @@ public class Tootle.AccountManager : Object{
|
||||||
|
|
||||||
public void logout (){
|
public void logout (){
|
||||||
current = null;
|
current = null;
|
||||||
changed_current (null);
|
switched (null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace Tootle{
|
||||||
if(has_token)
|
if(has_token)
|
||||||
AccountManager.instance.update_current ();
|
AccountManager.instance.update_current ();
|
||||||
else
|
else
|
||||||
AccountManager.instance.changed_current (null);
|
AccountManager.instance.switched (null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,32 +2,15 @@ using Gtk;
|
||||||
|
|
||||||
public class Tootle.MainWindow: Gtk.Window {
|
public class Tootle.MainWindow: Gtk.Window {
|
||||||
|
|
||||||
HeaderBar header;
|
Tootle.HeaderBar header;
|
||||||
Stack primary_stack;
|
public Stack primary_stack;
|
||||||
Stack secondary_stack;
|
public Stack secondary_stack;
|
||||||
AccountsButton button_accounts;
|
|
||||||
Granite.Widgets.ModeButton button_mode;
|
|
||||||
Spinner spinner;
|
|
||||||
Button button_toot;
|
|
||||||
Button button_back;
|
|
||||||
|
|
||||||
public HomeView home = new HomeView ();
|
public HomeView home = new HomeView ();
|
||||||
public LocalView feed_local = new LocalView ();
|
public LocalView feed_local = new LocalView ();
|
||||||
public FederatedView feed_federated = new FederatedView ();
|
public FederatedView feed_federated = new FederatedView ();
|
||||||
public NotificationsView notifications = new NotificationsView ();
|
public NotificationsView notifications = new NotificationsView ();
|
||||||
|
|
||||||
public MainWindow (Gtk.Application application) {
|
|
||||||
Object (application: application,
|
|
||||||
icon_name: "com.github.bleakgrey.tootle",
|
|
||||||
title: "Tootle",
|
|
||||||
resizable: true
|
|
||||||
);
|
|
||||||
set_titlebar (header);
|
|
||||||
window_position = WindowPosition.CENTER;
|
|
||||||
|
|
||||||
AccountManager.instance.changed_current.connect(on_account_changed);
|
|
||||||
}
|
|
||||||
|
|
||||||
construct {
|
construct {
|
||||||
var provider = new Gtk.CssProvider ();
|
var provider = new Gtk.CssProvider ();
|
||||||
provider.load_from_resource ("/com/github/bleakgrey/tootle/Application.css");
|
provider.load_from_resource ("/com/github/bleakgrey/tootle/Application.css");
|
||||||
|
@ -42,53 +25,25 @@ public class Tootle.MainWindow: Gtk.Window {
|
||||||
primary_stack.show ();
|
primary_stack.show ();
|
||||||
primary_stack.add_named (secondary_stack, "modes");
|
primary_stack.add_named (secondary_stack, "modes");
|
||||||
|
|
||||||
spinner = new Spinner ();
|
header = new Tootle.HeaderBar ();
|
||||||
spinner.active = true;
|
|
||||||
|
|
||||||
button_accounts = new AccountsButton ();
|
|
||||||
|
|
||||||
button_back = new Button ();
|
|
||||||
button_back.label = _("Back");
|
|
||||||
button_back.get_style_context ().add_class (Granite.STYLE_CLASS_BACK_BUTTON);
|
|
||||||
button_back.clicked.connect (() => {
|
|
||||||
primary_stack.set_visible_child_name ("modes");
|
|
||||||
var child = primary_stack.get_child_by_name ("details");
|
|
||||||
child.destroy ();
|
|
||||||
update_header (true);
|
|
||||||
});
|
|
||||||
|
|
||||||
button_toot = new Button ();
|
|
||||||
button_toot.tooltip_text = "Toot";
|
|
||||||
button_toot.image = new Gtk.Image.from_icon_name ("edit-symbolic", Gtk.IconSize.LARGE_TOOLBAR);
|
|
||||||
button_toot.clicked.connect (() => {
|
|
||||||
PostDialog.open (this);
|
|
||||||
});
|
|
||||||
|
|
||||||
button_mode = new Granite.Widgets.ModeButton ();
|
|
||||||
button_mode.get_style_context ().add_class ("mode");
|
|
||||||
button_mode.mode_changed.connect(widget => {
|
|
||||||
secondary_stack.set_visible_child_name(widget.tooltip_text);
|
|
||||||
});
|
|
||||||
button_mode.show ();
|
|
||||||
|
|
||||||
header = new HeaderBar ();
|
|
||||||
header.custom_title = button_mode;
|
|
||||||
header.show_close_button = true;
|
|
||||||
header.pack_start (button_back);
|
|
||||||
header.pack_start (button_toot);
|
|
||||||
header.pack_end (button_accounts);
|
|
||||||
header.pack_end (spinner);
|
|
||||||
button_mode.valign = Gtk.Align.FILL;
|
|
||||||
header.show ();
|
|
||||||
|
|
||||||
add (primary_stack);
|
add (primary_stack);
|
||||||
show_all ();
|
show_all ();
|
||||||
|
|
||||||
NetManager.instance.started.connect (() => spinner.show ());
|
|
||||||
NetManager.instance.finished.connect (() => spinner.hide ());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void on_account_changed(Account? account){
|
public MainWindow (Gtk.Application application) {
|
||||||
|
Object (application: application,
|
||||||
|
icon_name: "com.github.bleakgrey.tootle",
|
||||||
|
title: "Tootle",
|
||||||
|
resizable: true
|
||||||
|
);
|
||||||
|
set_titlebar (header);
|
||||||
|
window_position = WindowPosition.CENTER;
|
||||||
|
|
||||||
|
AccountManager.instance.switched.connect(on_account_switched);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void on_account_switched(Account? account){
|
||||||
secondary_stack.forall (widget => secondary_stack.remove (widget));
|
secondary_stack.forall (widget => secondary_stack.remove (widget));
|
||||||
|
|
||||||
if(account == null)
|
if(account == null)
|
||||||
|
@ -97,43 +52,27 @@ public class Tootle.MainWindow: Gtk.Window {
|
||||||
show_main_views ();
|
show_main_views ();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void update_header (bool primary_mode, bool hide_all = false){
|
|
||||||
if (hide_all){
|
|
||||||
button_mode.opacity = 0;
|
|
||||||
button_mode.sensitive = false;
|
|
||||||
button_toot.hide ();
|
|
||||||
button_back.hide ();
|
|
||||||
button_accounts.hide ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
button_mode.opacity = primary_mode ? 1 : 0;
|
|
||||||
button_mode.sensitive = primary_mode ? true : false;
|
|
||||||
button_toot.set_visible (primary_mode);
|
|
||||||
button_back.set_visible (!primary_mode);
|
|
||||||
button_accounts.set_visible (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void show_setup_views (){
|
private void show_setup_views (){
|
||||||
var add_account = new AddAccountView ();
|
var add_account = new AddAccountView ();
|
||||||
secondary_stack.add_named (add_account, add_account.get_name ());
|
secondary_stack.add_named (add_account, add_account.get_name ());
|
||||||
update_header (false, true);
|
header.update (false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void show_main_views (){
|
private void show_main_views (){
|
||||||
button_mode.clear_children ();
|
header.button_mode.clear_children ();
|
||||||
add_view (home);
|
add_view (home);
|
||||||
add_view (notifications);
|
add_view (notifications);
|
||||||
add_view (feed_local);
|
add_view (feed_local);
|
||||||
add_view (feed_federated);
|
add_view (feed_federated);
|
||||||
button_mode.set_active (0);
|
header.button_mode.set_active (0);
|
||||||
update_header (true);
|
header.update (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void add_view (AbstractView view) {
|
private void add_view (AbstractView view) {
|
||||||
if (view.show_in_header){
|
if (view.show_in_header){
|
||||||
var img = new Gtk.Image.from_icon_name(view.get_icon (), Gtk.IconSize.LARGE_TOOLBAR);
|
var img = new Gtk.Image.from_icon_name(view.get_icon (), Gtk.IconSize.LARGE_TOOLBAR);
|
||||||
img.tooltip_text = view.get_name ();
|
img.tooltip_text = view.get_name ();
|
||||||
button_mode.append (img);
|
header.button_mode.append (img);
|
||||||
view.image = img;
|
view.image = img;
|
||||||
secondary_stack.add_named(view, view.get_name ());
|
secondary_stack.add_named(view, view.get_name ());
|
||||||
}
|
}
|
||||||
|
@ -143,7 +82,7 @@ public class Tootle.MainWindow: Gtk.Window {
|
||||||
widget.show ();
|
widget.show ();
|
||||||
primary_stack.add_named (widget, "details");
|
primary_stack.add_named (widget, "details");
|
||||||
primary_stack.set_visible_child_name ("details");
|
primary_stack.set_visible_child_name ("details");
|
||||||
update_header (false);
|
header.update (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@ public class Tootle.HomeView : Tootle.AbstractView {
|
||||||
show_all();
|
show_all();
|
||||||
|
|
||||||
view.remove.connect (on_remove);
|
view.remove.connect (on_remove);
|
||||||
AccountManager.instance.changed_current.connect(on_account_changed);
|
AccountManager.instance.switched.connect(on_account_changed);
|
||||||
|
|
||||||
// var s = new Status(1);
|
// var s = new Status(1);
|
||||||
// s.content = "Test content, wow!";
|
// s.content = "Test content, wow!";
|
||||||
|
|
|
@ -24,7 +24,7 @@ public class Tootle.NotificationsView : Tootle.AbstractView {
|
||||||
show_all();
|
show_all();
|
||||||
|
|
||||||
view.remove.connect (on_remove);
|
view.remove.connect (on_remove);
|
||||||
AccountManager.instance.changed_current.connect(on_account_changed);
|
AccountManager.instance.switched.connect(on_account_changed);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string get_icon () {
|
public override string get_icon () {
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class Tootle.AccountsButton : Gtk.MenuButton{
|
||||||
add(avatar);
|
add(avatar);
|
||||||
show_all ();
|
show_all ();
|
||||||
|
|
||||||
AccountManager.instance.changed_current.connect (account => {
|
AccountManager.instance.switched.connect (account => {
|
||||||
if (account != null){
|
if (account != null){
|
||||||
CacheManager.instance.load_avatar (account.avatar, avatar, 24);
|
CacheManager.instance.load_avatar (account.avatar, avatar, 24);
|
||||||
default_account.display_name.label = "<b>"+account.display_name+"</b>";
|
default_account.display_name.label = "<b>"+account.display_name+"</b>";
|
||||||
|
|
|
@ -0,0 +1,74 @@
|
||||||
|
using Gtk;
|
||||||
|
|
||||||
|
public class Tootle.HeaderBar : Gtk.HeaderBar{
|
||||||
|
|
||||||
|
public Granite.Widgets.ModeButton button_mode;
|
||||||
|
AccountsButton button_accounts;
|
||||||
|
Spinner spinner;
|
||||||
|
Button button_toot;
|
||||||
|
Button button_back;
|
||||||
|
|
||||||
|
construct {
|
||||||
|
spinner = new Spinner ();
|
||||||
|
spinner.active = true;
|
||||||
|
|
||||||
|
button_accounts = new AccountsButton ();
|
||||||
|
|
||||||
|
button_back = new Button ();
|
||||||
|
button_back.label = _("Back");
|
||||||
|
button_back.get_style_context ().add_class (Granite.STYLE_CLASS_BACK_BUTTON);
|
||||||
|
button_back.clicked.connect (() => {
|
||||||
|
var primary_stack = Tootle.window.primary_stack;
|
||||||
|
primary_stack.set_visible_child_name ("modes");
|
||||||
|
var child = primary_stack.get_child_by_name ("details");
|
||||||
|
child.destroy ();
|
||||||
|
update (true);
|
||||||
|
});
|
||||||
|
|
||||||
|
button_toot = new Button ();
|
||||||
|
button_toot.tooltip_text = "Toot";
|
||||||
|
button_toot.image = new Gtk.Image.from_icon_name ("edit-symbolic", Gtk.IconSize.LARGE_TOOLBAR);
|
||||||
|
button_toot.clicked.connect (() => {
|
||||||
|
PostDialog.open (Tootle.window);
|
||||||
|
});
|
||||||
|
|
||||||
|
button_mode = new Granite.Widgets.ModeButton ();
|
||||||
|
button_mode.get_style_context ().add_class ("mode");
|
||||||
|
button_mode.mode_changed.connect(widget => {
|
||||||
|
Tootle.window.secondary_stack.set_visible_child_name(widget.tooltip_text);
|
||||||
|
});
|
||||||
|
button_mode.show ();
|
||||||
|
|
||||||
|
NetManager.instance.started.connect (() => spinner.show ());
|
||||||
|
NetManager.instance.finished.connect (() => spinner.hide ());
|
||||||
|
|
||||||
|
pack_start (button_back);
|
||||||
|
pack_start (button_toot);
|
||||||
|
pack_end (button_accounts);
|
||||||
|
pack_end (spinner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HeaderBar () {
|
||||||
|
custom_title = button_mode;
|
||||||
|
show_close_button = true;
|
||||||
|
show ();
|
||||||
|
button_mode.valign = Gtk.Align.FILL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update (bool primary_mode, bool hide_all = false){
|
||||||
|
if (hide_all){
|
||||||
|
button_mode.opacity = 0;
|
||||||
|
button_mode.sensitive = false;
|
||||||
|
button_toot.hide ();
|
||||||
|
button_back.hide ();
|
||||||
|
button_accounts.hide ();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
button_mode.opacity = primary_mode ? 1 : 0;
|
||||||
|
button_mode.sensitive = primary_mode ? true : false;
|
||||||
|
button_toot.set_visible (primary_mode);
|
||||||
|
button_back.set_visible (!primary_mode);
|
||||||
|
button_accounts.set_visible (true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue