Clean up things

This commit is contained in:
bleakgrey 2018-10-24 13:50:40 +03:00
parent 275436b779
commit adb44697bf
6 changed files with 107 additions and 105 deletions

View File

@ -8,6 +8,7 @@ public class Tootle.Status {
public string url; public string url;
public string? spoiler_text; public string? spoiler_text;
public string content; public string content;
public int64 replies_count;
public int64 reblogs_count; public int64 reblogs_count;
public int64 favourites_count; public int64 favourites_count;
public string created_at; public string created_at;
@ -36,6 +37,7 @@ public class Tootle.Status {
status.account = Account.parse (obj.get_object_member ("account")); status.account = Account.parse (obj.get_object_member ("account"));
status.uri = obj.get_string_member ("uri"); status.uri = obj.get_string_member ("uri");
status.created_at = obj.get_string_member ("created_at"); status.created_at = obj.get_string_member ("created_at");
status.replies_count = obj.get_int_member ("replies_count");
status.reblogs_count = obj.get_int_member ("reblogs_count"); status.reblogs_count = obj.get_int_member ("reblogs_count");
status.favourites_count = obj.get_int_member ("favourites_count"); status.favourites_count = obj.get_int_member ("favourites_count");
status.content = Html.simplify ( obj.get_string_member ("content")); status.content = Html.simplify ( obj.get_string_member ("content"));
@ -171,7 +173,7 @@ public class Tootle.Status {
msg.priority = Soup.MessagePriority.HIGH; msg.priority = Soup.MessagePriority.HIGH;
msg.finished.connect (() => { msg.finished.connect (() => {
app.toast (_("Poof!")); app.toast (_("Poof!"));
network.status_removed (this.id); network.status_removed (id);
}); });
network.queue (msg); network.queue (msg);
} }

View File

@ -74,6 +74,7 @@ public class Tootle.Notificator : GLib.Object {
} }
private void on_error (Error e) { private void on_error (Error e) {
if (!closing)
warning ("Error in %s: %s", get_name (), e.message); warning ("Error in %s: %s", get_name (), e.message);
} }

View File

@ -5,21 +5,13 @@ public abstract class Tootle.AbstractView : ScrolledWindow {
public int stack_pos = -1; public int stack_pos = -1;
public Image? image; public Image? image;
public Box view; public Box view;
protected Grid grid;
protected Box? empty; protected Box? empty;
protected Gtk.Grid? header;
construct { construct {
view = new Box (Orientation.VERTICAL, 0); view = new Box (Orientation.VERTICAL, 0);
view.valign = Align.START; add (view);
grid = new Grid ();
grid.hexpand = true;
grid.vexpand = true;
grid.attach (view, 0, 2);
hscrollbar_policy = PolicyType.NEVER; hscrollbar_policy = PolicyType.NEVER;
add (grid);
edge_reached.connect(pos => { edge_reached.connect(pos => {
if (pos == PositionType.BOTTOM) if (pos == PositionType.BOTTOM)
bottom_reached (); bottom_reached ();
@ -39,7 +31,10 @@ public abstract class Tootle.AbstractView : ScrolledWindow {
} }
public virtual void clear (){ public virtual void clear (){
view.forall (widget => widget.destroy ()); view.forall (widget => {
if (widget != header)
widget.destroy ();
});
} }
public virtual void bottom_reached (){} public virtual void bottom_reached (){}

View File

@ -4,44 +4,43 @@ using Granite;
public class Tootle.AccountView : TimelineView { public class Tootle.AccountView : TimelineView {
const int AVATAR_SIZE = 128; const int AVATAR_SIZE = 128;
Account account; protected Account account;
Gtk.Grid header; protected Grid header_image;
Gtk.Grid header_image; protected Box header_info;
Gtk.Box header_info; protected Granite.Widgets.Avatar avatar;
Granite.Widgets.Avatar avatar; protected RichLabel display_name;
RichLabel display_name; protected Label username;
Gtk.Label username; protected Label relationship;
Gtk.Label relationship; protected RichLabel note;
RichLabel note; protected Grid counters;
Gtk.Grid counters; protected Box actions;
Gtk.Box actions; protected Button button_follow;
Gtk.Button button_follow;
protected Gtk.Menu menu;
protected Gtk.MenuItem menu_edit;
protected Gtk.MenuItem menu_mention;
protected Gtk.MenuItem menu_mute;
protected Gtk.MenuItem menu_block;
protected Gtk.MenuItem menu_report;
protected Gtk.MenuButton button_menu;
Gtk.Menu menu;
Gtk.MenuItem menu_edit;
Gtk.MenuItem menu_mention;
Gtk.MenuItem menu_mute;
Gtk.MenuItem menu_block;
Gtk.MenuItem menu_report;
Gtk.MenuButton button_menu;
//public override void pre_construct () {
construct { construct {
header = new Gtk.Grid (); header = new Grid ();
header_info = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); header_info = new Box (Orientation.VERTICAL, 0);
header_info.margin = 12; header_info.margin = 12;
actions = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0); actions = new Box (Orientation.HORIZONTAL, 0);
actions.hexpand = false; actions.hexpand = false;
actions.halign = Gtk.Align.END; actions.halign = Align.END;
actions.vexpand = false; actions.vexpand = false;
actions.valign = Gtk.Align.START; actions.valign = Align.START;
actions.margin = 12; actions.margin = 12;
relationship = new Gtk.Label (""); relationship = new Label ("");
relationship.get_style_context ().add_class ("relationship"); relationship.get_style_context ().add_class ("relationship");
relationship.halign = Gtk.Align.START; relationship.halign = Align.START;
relationship.valign = Gtk.Align.START; relationship.valign = Align.START;
relationship.margin = 12; relationship.margin = 12;
header.attach (relationship, 0, 0, 1, 1); header.attach (relationship, 0, 0, 1, 1);
@ -62,17 +61,17 @@ public class Tootle.AccountView : TimelineView {
note.selectable = true; note.selectable = true;
note.margin_top = 12; note.margin_top = 12;
note.can_focus = false; note.can_focus = false;
note.justify = Gtk.Justification.CENTER; note.justify = Justification.CENTER;
header_info.pack_start (note, false, false, 0); header_info.pack_start (note, false, false, 0);
header_info.show_all (); header_info.show_all ();
header.attach (header_info, 0, 0, 1, 1); header.attach (header_info, 0, 0, 1, 1);
counters = new Gtk.Grid (); counters = new Grid ();
counters.column_homogeneous = true; counters.column_homogeneous = true;
counters.get_style_context ().add_class ("header-counters"); counters.get_style_context ().add_class ("header-counters");
header.attach (counters, 0, 1, 1, 1); header.attach (counters, 0, 1, 1, 1);
header_image = new Gtk.Grid (); header_image = new Grid ();
header_image.get_style_context ().add_class ("header"); header_image.get_style_context ().add_class ("header");
header.attach (header_image, 0, 0, 2, 2); header.attach (header_image, 0, 0, 2, 2);
@ -92,10 +91,10 @@ public class Tootle.AccountView : TimelineView {
button_follow = add_counter ("contact-new-symbolic"); button_follow = add_counter ("contact-new-symbolic");
button_menu = new Gtk.MenuButton (); button_menu = new Gtk.MenuButton ();
button_menu.image = new Gtk.Image.from_icon_name ("view-more-symbolic", Gtk.IconSize.LARGE_TOOLBAR); button_menu.image = new Image.from_icon_name ("view-more-symbolic", IconSize.LARGE_TOOLBAR);
button_menu.tooltip_text = _("More Actions"); button_menu.tooltip_text = _("More Actions");
button_menu.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); button_menu.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT);
(button_menu as Gtk.Widget).set_focus_on_click (false); (button_menu as Widget).set_focus_on_click (false);
button_menu.can_default = false; button_menu.can_default = false;
button_menu.can_focus = false; button_menu.can_focus = false;
button_menu.popup = menu; button_menu.popup = menu;
@ -105,8 +104,7 @@ public class Tootle.AccountView : TimelineView {
button_follow.hide (); button_follow.hide ();
header.attach (actions, 0, 0, 2, 2); header.attach (actions, 0, 0, 2, 2);
grid.attach (header, 0, 1); view.pack_start (header, false, false, 0);
//view.pack_start (header, false, false, 0);
} }
public AccountView (Account acc) { public AccountView (Account acc) {
@ -155,11 +153,11 @@ public class Tootle.AccountView : TimelineView {
button_follow.show (); button_follow.show ();
if (account.rs.following) { if (account.rs.following) {
button_follow.tooltip_text = _("Unfollow"); button_follow.tooltip_text = _("Unfollow");
(button_follow.get_image () as Gtk.Image).icon_name = "close-symbolic"; (button_follow.get_image () as Image).icon_name = "close-symbolic";
} }
else{ else{
button_follow.tooltip_text = _("Follow"); button_follow.tooltip_text = _("Follow");
(button_follow.get_image () as Gtk.Image).icon_name = "contact-new-symbolic"; (button_follow.get_image () as Image).icon_name = "contact-new-symbolic";
} }
} }
@ -186,20 +184,20 @@ public class Tootle.AccountView : TimelineView {
} }
private Gtk.Button add_counter (string name, int? i = null, int64? val = null) { private Gtk.Button add_counter (string name, int? i = null, int64? val = null) {
Gtk.Button btn; Button btn;
if (val != null){ if (val != null){
btn = new Gtk.Button (); btn = new Button ();
var label = new Gtk.Label ("<b>%s</b>\n%s".printf (name.up (), val.to_string ())); var label = new Label ("<b>%s</b>\n%s".printf (name.up (), val.to_string ()));
label.justify = Gtk.Justification.CENTER; label.justify = Justification.CENTER;
label.use_markup = true; label.use_markup = true;
label.margin = 8; label.margin = 8;
btn.add (label); btn.add (label);
} }
else else
btn = new Gtk.Button.from_icon_name (name, Gtk.IconSize.LARGE_TOOLBAR); btn = new Button.from_icon_name (name, IconSize.LARGE_TOOLBAR);
btn.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT); btn.get_style_context ().add_class (Gtk.STYLE_CLASS_FLAT);
(btn as Gtk.Widget).set_focus_on_click (false); (btn as Widget).set_focus_on_click (false);
btn.can_default = false; btn.can_default = false;
btn.can_focus = false; btn.can_focus = false;

View File

@ -64,8 +64,9 @@ public class Tootle.TimelineView : AbstractView {
view.pack_start (widget, false, false, 0); view.pack_start (widget, false, false, 0);
if (first || status.pinned) { if (first || status.pinned) {
view.reorder_child (widget, 0); var new_index = header == null ? 1 : 0;
view.reorder_child (separator, 0); view.reorder_child (widget, new_index);
view.reorder_child (separator, new_index);
} }
} }

View File

@ -8,36 +8,38 @@ public class Tootle.StatusWidget : Gtk.EventBox {
public bool is_notification = false; public bool is_notification = false;
public const int AVATAR_SIZE = 32; public const int AVATAR_SIZE = 32;
public Gtk.Separator? separator; public Separator? separator;
public Gtk.Grid grid;
public Granite.Widgets.Avatar avatar; public Granite.Widgets.Avatar avatar;
public RichLabel title_user; protected Grid grid;
public Gtk.Label title_date; protected RichLabel title_user;
public Gtk.Label title_acct; protected Label title_date;
public Gtk.Revealer revealer; protected Label title_acct;
public RichLabel content_label; protected Revealer revealer;
public RichLabel? content_spoiler; protected RichLabel content_label;
public Gtk.Button? spoiler_button; protected RichLabel? content_spoiler;
public Gtk.Box title_box; protected Button? spoiler_button;
public AttachmentBox attachments; protected Box title_box;
public Gtk.Box counters; protected AttachmentBox attachments;
public Gtk.Label reblogs; protected Image pin_indicator;
public Gtk.Label favorites;
private Image pin_indicator; protected Box counters;
public ImageToggleButton reblog; protected Label replies;
public ImageToggleButton favorite; protected Label reblogs;
public ImageToggleButton reply; protected Label favorites;
protected ImageToggleButton reblog;
protected ImageToggleButton favorite;
protected ImageToggleButton reply;
construct { construct {
grid = new Gtk.Grid (); grid = new Grid ();
avatar = new Granite.Widgets.Avatar.with_default_icon (AVATAR_SIZE); avatar = new Granite.Widgets.Avatar.with_default_icon (AVATAR_SIZE);
avatar.valign = Gtk.Align.START; avatar.valign = Align.START;
avatar.margin_top = 6; avatar.margin_top = 6;
avatar.margin_start = 6; avatar.margin_start = 6;
avatar.margin_end = 6; avatar.margin_end = 6;
title_box = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); title_box = new Box (Gtk.Orientation.HORIZONTAL, 6);
title_box.hexpand = true; title_box.hexpand = true;
title_box.margin_end = 12; title_box.margin_end = 12;
title_box.margin_top = 6; title_box.margin_top = 6;
@ -65,7 +67,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
attachments = new AttachmentBox (); attachments = new AttachmentBox ();
var revealer_box = new Gtk.Box (Gtk.Orientation.VERTICAL, 6); var revealer_box = new Box (Orientation.VERTICAL, 6);
revealer_box.margin_end = 12; revealer_box.margin_end = 12;
revealer_box.add (content_label); revealer_box.add (content_label);
revealer_box.add (attachments); revealer_box.add (attachments);
@ -73,8 +75,9 @@ public class Tootle.StatusWidget : Gtk.EventBox {
revealer.reveal_child = true; revealer.reveal_child = true;
revealer.add (revealer_box); revealer.add (revealer_box);
reblogs = new Gtk.Label ("0"); reblogs = new Label ("0");
favorites = new Gtk.Label ("0"); favorites = new Label ("0");
replies = new Label ("0");
reblog = new ImageToggleButton ("media-playlist-repeat-symbolic"); reblog = new ImageToggleButton ("media-playlist-repeat-symbolic");
reblog.set_action (); reblog.set_action ();
@ -98,7 +101,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
PostDialog.open_reply (status.get_formal ()); PostDialog.open_reply (status.get_formal ());
}); });
counters = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 6); counters = new Box (Orientation.HORIZONTAL, 6);
counters.margin_top = 6; counters.margin_top = 6;
counters.margin_bottom = 6; counters.margin_bottom = 6;
counters.add (reblog); counters.add (reblog);
@ -106,6 +109,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
counters.add (favorite); counters.add (favorite);
counters.add (favorites); counters.add (favorites);
counters.add (reply); counters.add (reply);
counters.add (replies);
counters.show_all (); counters.show_all ();
add (grid); add (grid);
@ -123,15 +127,15 @@ public class Tootle.StatusWidget : Gtk.EventBox {
this.status.updated.connect (rebind); this.status.updated.connect (rebind);
if (this.status.reblog != null) { if (this.status.reblog != null) {
var image = new Gtk.Image.from_icon_name("media-playlist-repeat-symbolic", Gtk.IconSize.BUTTON); var image = new Image.from_icon_name("media-playlist-repeat-symbolic", IconSize.BUTTON);
image.halign = Gtk.Align.END; image.halign = Align.END;
image.margin_end = 6; image.margin_end = 6;
image.margin_top = 6; image.margin_top = 6;
image.show (); image.show ();
var label_text = _("<a href=\"%s\"><b>%s</b></a> boosted").printf (this.status.account.url, this.status.account.display_name); var label_text = _("<a href=\"%s\"><b>%s</b></a> boosted").printf (this.status.account.url, this.status.account.display_name);
var label = new RichLabel (label_text); var label = new RichLabel (label_text);
label.halign = Gtk.Align.START; label.halign = Align.START;
label.margin_top = 6; label.margin_top = 6;
label.show (); label.show ();
@ -141,7 +145,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
if (is_spoiler ()) { if (is_spoiler ()) {
revealer.reveal_child = false; revealer.reveal_child = false;
var spoiler_box = new Box (Gtk.Orientation.HORIZONTAL, 6); var spoiler_box = new Box (Orientation.HORIZONTAL, 6);
spoiler_box.margin_end = 12; spoiler_box.margin_end = 12;
var spoiler_button_text = _("Toggle content"); var spoiler_button_text = _("Toggle content");
@ -155,7 +159,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
spoiler_button = new Button.with_label (spoiler_button_text); spoiler_button = new Button.with_label (spoiler_button_text);
} }
spoiler_button.hexpand = true; spoiler_button.hexpand = true;
spoiler_button.halign = Gtk.Align.END; spoiler_button.halign = Align.END;
spoiler_button.clicked.connect (() => revealer.set_reveal_child (!revealer.child_revealed)); spoiler_button.clicked.connect (() => revealer.set_reveal_child (!revealer.child_revealed));
var spoiler_text = _("[ This post contains sensitive content ]"); var spoiler_text = _("[ This post contains sensitive content ]");
@ -215,6 +219,7 @@ public class Tootle.StatusWidget : Gtk.EventBox {
reblogs.label = formal.reblogs_count.to_string (); reblogs.label = formal.reblogs_count.to_string ();
favorites.label = formal.favourites_count.to_string (); favorites.label = formal.favourites_count.to_string ();
replies.label = formal.replies_count.to_string ();
reblog.sensitive = false; reblog.sensitive = false;
reblog.active = formal.reblogged; reblog.active = formal.reblogged;