using Gtk; using Granite; public class Tootle.AddAccountView : Tootle.AbstractView { AccountManager manager; public Stack stack; GridInstance grid_instance; GridCode grid_code; protected class GridInstance : Grid{ Image image; public Button button_next; public Entry entry; construct{ column_spacing = 12; row_spacing = 6; hexpand = true; halign = Gtk.Align.CENTER; image = new Image.from_resource ("/com/github/bleakgrey/tootle/elephant1.png"); image.halign = Gtk.Align.CENTER; image.hexpand = true; image.margin_bottom = 24; entry = new Entry (); entry.text = "https://myinstance.com/"; entry.set_placeholder_text ("https://myinstance.com/"); entry.width_chars = 30; button_next = new Button.with_label ("Next"); button_next.halign = Gtk.Align.END; var register = new Label ("What's an instance?"); register.halign = Gtk.Align.END; register.set_use_markup (true); attach (image, 0, 1, 2, 1); attach (new AlignedLabel ("Instance:"), 0, 2, 1, 1); attach (entry, 1, 2, 1, 1); attach (button_next, 0, 3, 2, 1); attach (register, 0, 4, 2, 1); } public GridInstance(){} } protected class GridCode : Grid{ Granite.Widgets.Avatar image; public Button button_back; public Button button_next; public Entry code; construct{ column_spacing = 12; row_spacing = 6; hexpand = true; halign = Gtk.Align.CENTER; valign = Gtk.Align.CENTER; image = new Granite.Widgets.Avatar.with_default_icon (128); image.halign = Gtk.Align.CENTER; image.hexpand = true; image.margin_bottom = 24; code = new Entry (); code.width_chars = 30; button_next = new Button.with_label ("Add Account"); button_next.halign = Gtk.Align.END; button_back = new Button.with_label ("Back"); button_back.halign = Gtk.Align.START; attach (image, 0, 1, 2, 1); attach (new AlignedLabel ("Authorization Code:"), 0, 2, 1, 1); attach (code, 1, 2, 1, 1); attach (button_back, 0, 3, 1, 1); attach (button_next, 1, 3, 1, 1); } public GridCode(){} } construct { manager = AccountManager.instance; stack = new Stack (); stack.valign = Gtk.Align.CENTER; stack.transition_type = StackTransitionType.SLIDE_LEFT_RIGHT; grid_instance = new GridInstance (); grid_instance.button_next.clicked.connect(on_next_click); grid_code = new GridCode (); grid_code.button_back.clicked.connect(() => stack.set_visible_child_name ("instance")); grid_code.button_next.clicked.connect(on_add_click); var header1 = new Gtk.Label ("Enter Your Instance URL:"); header1.get_style_context ().add_class (Granite.STYLE_CLASS_H2_LABEL); header1.halign = Gtk.Align.CENTER; header1.hexpand = true; stack.add_named (grid_instance, "instance"); stack.add_named (grid_code, "code"); add (stack); show_all (); } public AddAccountView () { base (false); } public override string get_name () { return "add_account"; } private void on_next_click(){ Settings.instance.clear_account (); Settings.instance.instance_url = grid_instance.entry.text; grid_instance.sensitive = false; if(!manager.has_client_tokens ()){ var msg = manager.request_client_tokens (); msg.finished.connect(() => { grid_instance.sensitive = true; stack.set_visible_child_name ("code"); }); } else{ grid_instance.sensitive = true; stack.set_visible_child_name ("code"); manager.request_auth_code (Settings.instance.client_id); } } private void on_add_click (){ var code = grid_code.code.text; manager.try_auth (code); } }