a243869605ebb1374fe1886de5961b63951f8f25
[moonshot-ui.git] / src / moonshot-custom-vbox.vala
1 using Gtk;
2
3 class CustomVBox : VBox
4 {
5     public IdCardWidget current_idcard { get; set; default = null; }
6
7     private ListStore listmodel;
8     private TreeModelFilter filter;
9
10     private enum Columns
11     {
12         IDCARD_COL,
13         LOGO_COL,
14         ISSUER_COL,
15         USERNAME_COL,
16         PASSWORD_COL,
17         N_COLUMNS
18     }
19
20     private bool visible_func (TreeModel model, TreeIter iter)
21     {
22         string search_text;
23         string issuer;
24         string issuer_casefold;
25         string search_text_casefold;
26
27         model.get (iter,
28                    Columns.ISSUER_COL, out issuer);
29
30         issuer_casefold = issuer.casefold ();
31         search_text_casefold = search_text.casefold ();
32
33         if (issuer_casefold.contains (search_text_casefold))
34             return true;
35
36         return false;
37     }
38
39     private void setup_identities_list ()
40     {
41        this.listmodel = new ListStore (Columns.N_COLUMNS, typeof (IdCard),
42                                                           typeof (Gdk.Pixbuf),
43                                                           typeof (string),
44                                                           typeof (string),
45                                                           typeof (string));
46       this.filter = new TreeModelFilter (listmodel, null);
47
48       filter.set_visible_func (visible_func);
49     }
50
51     public CustomVBox (bool homogeneous, int spacing)
52     {
53         this.set_homogeneous (homogeneous);
54         this.set_spacing (spacing);
55
56         setup_identities_list();
57     }
58
59     public void receive_expanded_event (IdCardWidget id_card_widget)
60     {
61         var list = this.get_children ();
62         foreach (Widget id_card in list)
63         {
64             if (id_card != id_card_widget)
65                 ((IdCardWidget) id_card).collapse ();
66         }
67     }
68
69     public void add_id_card_widget (IdCardWidget id_card_widget)
70     {
71         TreeIter iter;
72
73         this.pack_start (id_card_widget, false, false);
74
75         var id_card = id_card_widget.id_card;
76
77         this.listmodel.append (out iter);
78         listmodel.set (iter,
79                        Columns.IDCARD_COL, id_card,
80                        Columns.LOGO_COL, id_card.pixbuf,
81                        Columns.ISSUER_COL, id_card.issuer,
82                        Columns.USERNAME_COL, id_card.username,
83                        Columns.PASSWORD_COL, id_card.password);
84     }
85
86     public void remove_id_card_widget (IdCardWidget id_card_widget)
87     {
88         TreeIter iter;
89         string issuer;
90
91         this.remove (id_card_widget);
92
93         if (listmodel.get_iter_first (out iter))
94         {
95             do
96             {
97                 listmodel.get (iter,
98                                Columns.ISSUER_COL, out issuer);
99
100                 if (id_card_widget.id_card.issuer == issuer)
101                 {
102                     listmodel.remove (iter);
103                     break;
104                 }
105             }
106             while (listmodel.iter_next (ref iter));
107         }
108     }
109 }