aboutsummaryrefslogtreecommitdiff
path: root/client/src/ui/conversation_selector/view.vala
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/ui/conversation_selector/view.vala')
-rw-r--r--client/src/ui/conversation_selector/view.vala56
1 files changed, 56 insertions, 0 deletions
diff --git a/client/src/ui/conversation_selector/view.vala b/client/src/ui/conversation_selector/view.vala
new file mode 100644
index 00000000..72e8bbec
--- /dev/null
+++ b/client/src/ui/conversation_selector/view.vala
@@ -0,0 +1,56 @@
+using Gee;
+using Gtk;
+using Gdk;
+
+using Dino.Entities;
+
+namespace Dino.Ui.ConversationSelector {
+
+[GtkTemplate (ui = "/org/dino-im/conversation_selector/view.ui")]
+public class View : Grid {
+ public List conversation_list;
+
+ [GtkChild]
+ public SearchEntry search_entry;
+
+ [GtkChild]
+ public SearchBar search_bar;
+
+ [GtkChild]
+ private ScrolledWindow scrolled;
+
+ public View(StreamInteractor stream_interactor) {
+ conversation_list = new List(stream_interactor);
+ scrolled.add(conversation_list);
+ search_entry.key_press_event.connect(search_key_press_event);
+ search_entry.search_changed.connect(search_changed);
+ }
+
+ public void conversation_selected(Conversation? conversation) {
+ search_entry.set_text("");
+ }
+
+ private void refilter() {
+ string[]? values = null;
+ string str = search_entry.get_text ();
+ if (str != "") values = str.split(" ");
+ conversation_list.set_filter_values(values);
+ }
+
+ private void search_changed(Editable editable) {
+ refilter();
+ }
+
+ private bool search_key_press_event(EventKey event) {
+ conversation_list.select_row(conversation_list.get_row_at_y(0));
+ if (event.keyval == Key.Down) {
+ ConversationRow? row = (ConversationRow) conversation_list.get_row_at_index(0);
+ if (row != null) {
+ conversation_list.select_row(row);
+ row.grab_focus();
+ }
+ }
+ return false;
+ }
+}
+} \ No newline at end of file