diff options
author | fiaxh <git@lightrise.org> | 2019-04-12 17:43:47 +0200 |
---|---|---|
committer | fiaxh <git@lightrise.org> | 2019-04-14 09:46:54 +0200 |
commit | 6e1938b0893b47f0673bd773bdbfdbf6465ae018 (patch) | |
tree | 04ea42d63c7ef197923b49ebc5263371d4b81b9e /main/src/ui/conversation_selector/list.vala | |
parent | d9e45071d0d3cd5a7a162908267c98c6366038bf (diff) | |
download | dino-6e1938b0893b47f0673bd773bdbfdbf6465ae018.tar.gz dino-6e1938b0893b47f0673bd773bdbfdbf6465ae018.zip |
Clean up ConversationTitlebar
Diffstat (limited to 'main/src/ui/conversation_selector/list.vala')
-rw-r--r-- | main/src/ui/conversation_selector/list.vala | 167 |
1 files changed, 0 insertions, 167 deletions
diff --git a/main/src/ui/conversation_selector/list.vala b/main/src/ui/conversation_selector/list.vala deleted file mode 100644 index 95e5aae7..00000000 --- a/main/src/ui/conversation_selector/list.vala +++ /dev/null @@ -1,167 +0,0 @@ -using Gee; -using Gtk; - -using Xmpp; -using Dino.Entities; - -namespace Dino.Ui.ConversationSelector { - -public class List : ListBox { - - public signal void conversation_selected(Conversation conversation); - - private StreamInteractor stream_interactor; - private string[]? filter_values; - private HashMap<Conversation, ConversationRow> rows = new HashMap<Conversation, ConversationRow>(Conversation.hash_func, Conversation.equals_func); - - public List init(StreamInteractor stream_interactor) { - this.stream_interactor = stream_interactor; - - stream_interactor.get_module(ConversationManager.IDENTITY).conversation_activated.connect(add_conversation); - stream_interactor.get_module(ConversationManager.IDENTITY).conversation_deactivated.connect(remove_conversation); - stream_interactor.get_module(MessageProcessor.IDENTITY).message_received.connect(on_message_received); - stream_interactor.get_module(MessageProcessor.IDENTITY).message_sent.connect(on_message_received); - Timeout.add_seconds(60, () => { - foreach (ConversationRow row in rows.values) row.update(); - return true; - }); - - foreach (Conversation conversation in stream_interactor.get_module(ConversationManager.IDENTITY).get_active_conversations()) { - add_conversation(conversation); - } - return this; - } - - construct { - this.stream_interactor = stream_interactor; - - get_style_context().add_class("sidebar"); - set_filter_func(filter); - set_header_func(header); - set_sort_func(sort); - - realize.connect(() => { - ListBoxRow? first_row = get_row_at_index(0); - if (first_row != null) { - select_row(first_row); - row_activated(first_row); - } - }); - } - - public override void row_activated(ListBoxRow r) { - if (r.get_type().is_a(typeof(ConversationRow))) { - ConversationRow row = r as ConversationRow; - conversation_selected(row.conversation); - } - } - - public void set_filter_values(string[]? values) { - if (filter_values == values) { - return; - } - filter_values = values; - invalidate_filter(); - } - - public void on_conversation_selected(Conversation conversation) { - if (!rows.has_key(conversation)) { - add_conversation(conversation); - } - this.select_row(rows[conversation]); - } - - private void on_message_received(Entities.Message message, Conversation conversation) { - if (rows.has_key(conversation)) { - invalidate_sort(); - } - } - - private void add_conversation(Conversation conversation) { - ConversationRow row; - if (!rows.has_key(conversation)) { - row = new ConversationRow(stream_interactor, conversation); - rows[conversation] = row; - add(row); - row.closed.connect(() => { select_fallback_conversation(conversation); }); - row.main_revealer.set_reveal_child(true); - } - invalidate_sort(); - } - - private void select_fallback_conversation(Conversation conversation) { - if (get_selected_row() == rows[conversation]) { - int index = rows[conversation].get_index(); - ListBoxRow? next_select_row = get_row_at_index(index + 1); - if (next_select_row == null) { - next_select_row = get_row_at_index(index - 1); - } - if (next_select_row != null) { - select_row(next_select_row); - row_activated(next_select_row); - } - } - } - - private void remove_conversation(Conversation conversation) { - select_fallback_conversation(conversation); - if (rows.has_key(conversation) && !conversation.active) { - remove(rows[conversation]); - rows.unset(conversation); - } - } - - public void loop_conversations(bool backwards) { - int index = get_selected_row().get_index(); - int new_index = ((index + (backwards ? -1 : 1)) + rows.size) % rows.size; - ListBoxRow? next_select_row = get_row_at_index(new_index); - if (next_select_row != null) { - select_row(next_select_row); - row_activated(next_select_row); - } - } - - private void header(ListBoxRow row, ListBoxRow? before_row) { - if (row.get_header() == null && before_row != null) { - row.set_header(new Separator(Orientation.HORIZONTAL)); - } else if (row.get_header() != null && before_row == null) { - row.set_header(null); - } - } - - private bool filter(ListBoxRow r) { - if (r.get_type().is_a(typeof(ConversationRow))) { - ConversationRow row = r as ConversationRow; - if (filter_values != null && filter_values.length != 0) { - foreach (string filter in filter_values) { - if (!(Util.get_conversation_display_name(stream_interactor, row.conversation).down().contains(filter.down()) || - row.conversation.counterpart.to_string().down().contains(filter.down()))) { - return false; - } - } - } - } - return true; - } - - private int sort(ListBoxRow row1, ListBoxRow row2) { - ConversationRow cr1 = row1 as ConversationRow; - ConversationRow cr2 = row2 as ConversationRow; - if (cr1 != null && cr2 != null) { - Conversation c1 = cr1.conversation; - Conversation c2 = cr2.conversation; - if (c1.last_active == null) return -1; - if (c2.last_active == null) return 1; - int comp = c2.last_active.compare(c1.last_active); - if (comp == 0) { - return Util.get_conversation_display_name(stream_interactor, c1) - .collate(Util.get_conversation_display_name(stream_interactor, c2)); - } else { - return comp; - } - } - return 0; - } -} - -} |