|
21 | 21 |
|
22 | 22 | public class MainWindow : Gtk.Window { |
23 | 23 | Gtk.Stack stack; |
| 24 | + Gtk.SearchBar search_bar; |
24 | 25 | public MainWindow (Gtk.Application application) { |
25 | 26 | Object (application: application, |
26 | 27 | icon_name: "com.github.mdh34.quickdocs", |
@@ -135,7 +136,13 @@ public class MainWindow : Gtk.Window { |
135 | 136 | header.pack_end (theme_switch); |
136 | 137 | header.pack_end (offline_button); |
137 | 138 |
|
138 | | - add (stack); |
| 139 | + search_bar = create_search_bar (); |
| 140 | + |
| 141 | + var vbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); |
| 142 | + vbox.pack_start (stack, true, true, 0); |
| 143 | + vbox.pack_start (search_bar, false, true, 0); |
| 144 | + |
| 145 | + add (vbox); |
139 | 146 | init_theme (); |
140 | 147 |
|
141 | 148 | string style = "@define-color colorPrimary #403757;"; |
@@ -187,6 +194,74 @@ public class MainWindow : Gtk.Window { |
187 | 194 | } |
188 | 195 | } |
189 | 196 |
|
| 197 | + public void toggle_search () { |
| 198 | + var disabled = !search_bar.search_mode_enabled; |
| 199 | + search_bar.search_mode_enabled = disabled; |
| 200 | + if (disabled) { |
| 201 | + var view = get_current_view (); |
| 202 | + view.search_finish (); |
| 203 | + } |
| 204 | + } |
| 205 | + |
| 206 | + private View? get_current_view () { |
| 207 | + var v = stack.get_visible_child (); |
| 208 | + return (v is View) |
| 209 | + ? v as View |
| 210 | + : null; |
| 211 | + } |
| 212 | + |
| 213 | + private Gtk.SearchBar create_search_bar () { |
| 214 | + var search_entry = new Gtk.SearchEntry(); |
| 215 | + search_entry.placeholder_text = _("Find in page..."); |
| 216 | + search_entry.set_width_chars(60); |
| 217 | + |
| 218 | + search_entry.search_changed.connect (() => { |
| 219 | + var v = get_current_view (); |
| 220 | + if (v != null) { |
| 221 | + v.search (search_entry.text); |
| 222 | + } |
| 223 | + }); |
| 224 | + |
| 225 | + search_entry.activate.connect (() => { |
| 226 | + var v = get_current_view (); |
| 227 | + if (v != null ) { |
| 228 | + v.search_next (); |
| 229 | + } |
| 230 | + }); |
| 231 | + search_entry.show(); |
| 232 | + |
| 233 | + var next_search = new Gtk.Button.from_icon_name ("go-down-symbolic", Gtk.IconSize.MENU); |
| 234 | + next_search.clicked.connect (() => { |
| 235 | + var v = get_current_view (); |
| 236 | + if (v != null ) { |
| 237 | + v.search_next (); |
| 238 | + } |
| 239 | + }); |
| 240 | + |
| 241 | + next_search.show(); |
| 242 | + |
| 243 | + var previous_search = new Gtk.Button.from_icon_name ("go-up-symbolic", Gtk.IconSize.MENU); |
| 244 | + previous_search.clicked.connect (() => { |
| 245 | + var v = get_current_view (); |
| 246 | + if (v != null ) { |
| 247 | + v.search_previous (); |
| 248 | + } |
| 249 | + }); |
| 250 | + previous_search.show(); |
| 251 | + |
| 252 | + var hbox = new Gtk.Box(Gtk.Orientation.HORIZONTAL, 5); |
| 253 | + hbox.pack_start (search_entry, false, false, 0); |
| 254 | + hbox.pack_start (previous_search, false, false, 0); |
| 255 | + hbox.pack_start (next_search, false, false, 0); |
| 256 | + hbox.show(); |
| 257 | + |
| 258 | + var search_bar = new Gtk.SearchBar(); |
| 259 | + search_bar.connect_entry(search_entry); |
| 260 | + search_bar.add(hbox); |
| 261 | + |
| 262 | + return search_bar; |
| 263 | + } |
| 264 | + |
190 | 265 | private bool check_online () { |
191 | 266 | var host = "valadoc.org"; |
192 | 267 | try { |
|
0 commit comments