Tooth/src/Views/Lists.vala

75 lines
1.6 KiB
Vala

using Gtk;
// TODO: Lists is borken
public class Tooth.Views.Lists : Views.Timeline {
[GtkTemplate (ui = "/dev/geopjr/tooth/ui/widgets/list_item.ui")]
public class Row : ListBoxRow {
API.List? list;
[GtkChild] unowned Stack stack;
[GtkChild] unowned Label title;
public Row (API.List? list) {
this.list = list;
if (list == null)
stack.visible_child_name = "add";
else
list.bind_property ("title", title, "label", BindingFlags.SYNC_CREATE);
}
[GtkCallback]
void on_edit_clicked () {
new Dialogs.ListEditor (this.list);
}
[GtkCallback]
void on_remove_clicked () {
var remove = app.question (
_("Delete \"%s\"?").printf (list.title),
_("This action cannot be reverted.")
);
if (remove) {
new Request.DELETE (@"/api/v1/lists/$(list.id)")
.with_account (accounts.active)
.then (() => { this.destroy (); })
.exec ();
}
}
public virtual signal void open () {
if (this.list == null)
return;
var view = new Views.List (list);
app.main_window.open_view (view);
}
}
public new bool empty {
get { return false; }
}
public Lists () {
Object (
url: @"/api/v1/lists",
label: _("Lists"),
icon: "view-list-symbolic"
);
accepts = typeof (API.List);
}
public override void on_request_finish () {
var add_row = new Row (null);
add_row.open.connect (() => {
var dlg = new Dialogs.ListEditor.empty ();
dlg.done.connect (on_refresh);
});
append (add_row);
on_content_changed ();
}
}