@@ -67,6 +67,24 @@ pub enum Message {
67
67
ShowOverlay ,
68
68
#[ strum( to_string = "Hide Command Palatte" ) ]
69
69
HideOverlay ,
70
+ #[ strum( to_string = "Toggle Tab Bar" ) ]
71
+ ToggleTabBar ,
72
+ #[ strum( to_string = "Show Tab Bar" ) ]
73
+ ShowTabBar ,
74
+ #[ strum( to_string = "Hide Tab Bar" ) ]
75
+ HideTabBar ,
76
+ #[ strum( to_string = "Toggle Nav Bar" ) ]
77
+ ToggleNavBar ,
78
+ #[ strum( to_string = "Show Nav Bar" ) ]
79
+ ShowNavBar ,
80
+ #[ strum( to_string = "Hide Nav Bar" ) ]
81
+ HideNavBar ,
82
+ #[ strum( to_string = "Toggle Bookmark Bar" ) ]
83
+ ToggleBookmarkBar ,
84
+ #[ strum( to_string = "Show Bookmark Bar" ) ]
85
+ ShowBookmarkBar ,
86
+ #[ strum( to_string = "Hide Bookmark Bar" ) ]
87
+ HideBookmarkBar ,
70
88
71
89
// Internal only - for widgets
72
90
Update ,
@@ -95,10 +113,11 @@ impl Default for TabSelectionType {
95
113
pub struct IcyBrowser < Engine : BrowserEngine > {
96
114
engine : Engine ,
97
115
home : Url ,
98
- nav_bar_state : Option < NavBarState > ,
116
+ nav_bar_state : NavBarState ,
99
117
command_window_state : CommandWindowState ,
100
118
with_tab_bar : bool ,
101
119
with_nav_bar : bool ,
120
+ with_bookmark_bar : bool ,
102
121
bookmarks : Option < Bookmarks > ,
103
122
show_overlay : bool ,
104
123
shortcuts : Shortcuts ,
@@ -111,10 +130,11 @@ impl<Engine: BrowserEngine> Default for IcyBrowser<Engine> {
111
130
Self {
112
131
engine : Engine :: new ( ) ,
113
132
home,
114
- nav_bar_state : None ,
133
+ nav_bar_state : NavBarState :: new ( ) ,
115
134
command_window_state : CommandWindowState :: new ( None ) ,
116
135
with_tab_bar : false ,
117
136
with_nav_bar : false ,
137
+ with_bookmark_bar : false ,
118
138
bookmarks : None ,
119
139
show_overlay : false ,
120
140
shortcuts : Shortcuts :: default ( ) ,
@@ -142,16 +162,21 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
142
162
143
163
pub fn with_nav_bar ( mut self ) -> Self {
144
164
self . with_nav_bar = true ;
145
- self . nav_bar_state = Some ( NavBarState :: new ( ) ) ;
165
+ self . nav_bar_state = NavBarState :: new ( ) ;
146
166
self
147
167
}
148
168
149
- pub fn with_bookmark_bar ( mut self , bookmarks : & [ Bookmark ] ) -> Self {
169
+ pub fn bookmarks ( mut self , bookmarks : & [ Bookmark ] ) -> Self {
150
170
self . bookmarks = Some ( bookmarks. to_vec ( ) ) ;
151
171
self . command_window_state = CommandWindowState :: new ( self . bookmarks . clone ( ) ) ;
152
172
self
153
173
}
154
174
175
+ pub fn with_bookmark_bar ( mut self ) -> Self {
176
+ self . with_bookmark_bar = true ;
177
+ self
178
+ }
179
+
155
180
pub fn with_custom_shortcuts ( mut self , shortcuts : Shortcuts ) -> Self {
156
181
self . shortcuts = shortcuts;
157
182
self
@@ -235,9 +260,7 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
235
260
TabSelectionType :: Index ( index) => self . engine . get_tabs ( ) . index_to_id ( index) ,
236
261
} ;
237
262
self . engine . get_tabs_mut ( ) . set_current_id ( id) ;
238
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
239
- state. 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
240
- }
263
+ self . nav_bar_state . 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
241
264
Task :: none ( )
242
265
}
243
266
Message :: CloseCurrentTab => Task :: done ( Message :: CloseTab ( TabSelectionType :: Id (
@@ -254,15 +277,11 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
254
277
TabSelectionType :: Index ( index) => self . engine . get_tabs ( ) . index_to_id ( index) ,
255
278
} ;
256
279
self . engine . get_tabs_mut ( ) . remove ( id) ;
257
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
258
- state. 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
259
- }
280
+ self . nav_bar_state . 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
260
281
Task :: none ( )
261
282
}
262
283
Message :: CreateTab => {
263
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
264
- state. 0 = self . home . to_string ( ) ;
265
- }
284
+ self . nav_bar_state . 0 = self . home . to_string ( ) ;
266
285
let home = self . home . clone ( ) ;
267
286
let bounds = self . view_size ;
268
287
let tab = self . engine . new_tab (
@@ -278,16 +297,12 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
278
297
}
279
298
Message :: GoBackward => {
280
299
self . engine . go_back ( ) ;
281
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
282
- state. 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
283
- }
300
+ self . nav_bar_state . 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
284
301
Task :: none ( )
285
302
}
286
303
Message :: GoForward => {
287
304
self . engine . go_forward ( ) ;
288
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
289
- state. 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
290
- }
305
+ self . nav_bar_state . 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
291
306
Task :: none ( )
292
307
}
293
308
Message :: Refresh => {
@@ -303,17 +318,61 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
303
318
Task :: none ( )
304
319
}
305
320
Message :: UpdateUrl => {
306
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
307
- state. 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
308
- }
321
+ self . nav_bar_state . 0 = self . engine . get_tabs ( ) . get_current ( ) . url ( ) ;
309
322
Task :: none ( )
310
323
}
311
324
Message :: UrlChanged ( url) => {
312
- if let Some ( state) = self . nav_bar_state . as_mut ( ) {
313
- state. 0 = url;
325
+ self . nav_bar_state . 0 = url;
326
+ Task :: none ( )
327
+ }
328
+ Message :: ToggleTabBar => {
329
+ if self . with_tab_bar {
330
+ self . with_tab_bar = false ;
331
+ } else {
332
+ self . with_tab_bar = true ;
314
333
}
315
334
Task :: none ( )
316
335
}
336
+ Message :: ShowTabBar => {
337
+ self . with_tab_bar = true ;
338
+ Task :: none ( )
339
+ }
340
+ Message :: HideTabBar => {
341
+ self . with_tab_bar = false ;
342
+ Task :: none ( )
343
+ }
344
+ Message :: ToggleNavBar => {
345
+ if self . with_nav_bar {
346
+ self . with_nav_bar = false ;
347
+ } else {
348
+ self . with_nav_bar = true ;
349
+ }
350
+ Task :: none ( )
351
+ }
352
+ Message :: ShowNavBar => {
353
+ self . with_nav_bar = true ;
354
+ Task :: none ( )
355
+ }
356
+ Message :: HideNavBar => {
357
+ self . with_nav_bar = false ;
358
+ Task :: none ( )
359
+ }
360
+ Message :: ToggleBookmarkBar => {
361
+ if self . with_bookmark_bar {
362
+ self . with_bookmark_bar = false ;
363
+ } else {
364
+ self . with_bookmark_bar = true ;
365
+ }
366
+ Task :: none ( )
367
+ }
368
+ Message :: ShowBookmarkBar => {
369
+ self . with_bookmark_bar = true ;
370
+ Task :: none ( )
371
+ }
372
+ Message :: HideBookmarkBar => {
373
+ self . with_bookmark_bar = false ;
374
+ Task :: none ( )
375
+ }
317
376
Message :: CommandPalatteQueryChanged ( query) => {
318
377
self . command_window_state . query = query. clone ( ) ;
319
378
self . command_window_state . filtered_results = self
@@ -501,13 +560,13 @@ impl<Engine: BrowserEngine> IcyBrowser<Engine> {
501
560
column = column. push ( tab_bar ( self . engine . get_tabs ( ) ) )
502
561
}
503
562
if self . with_nav_bar {
504
- column = column. push (
505
- hoverable ( nav_bar ( self . nav_bar_state . as_ref ( ) . unwrap ( ) ) )
506
- . on_focus_change ( Message :: UpdateUrl ) ,
507
- )
563
+ column = column
564
+ . push ( hoverable ( nav_bar ( & self . nav_bar_state ) ) . on_focus_change ( Message :: UpdateUrl ) )
508
565
}
509
- if let Some ( bookmarks) = self . bookmarks . as_ref ( ) {
510
- column = column. push ( bookmark_bar ( bookmarks) )
566
+ if self . with_bookmark_bar {
567
+ if let Some ( bookmarks) = self . bookmarks . as_ref ( ) {
568
+ column = column. push ( bookmark_bar ( bookmarks) )
569
+ }
511
570
}
512
571
513
572
let browser_view = browser_view ( self . engine . get_tabs ( ) . get_current ( ) . get_view ( ) ) ;
0 commit comments