2024-11-27 15:22:55 +01:00
|
|
|
mod application_header_bar ;
|
2024-11-26 17:20:53 +01:00
|
|
|
mod collatable_container ;
|
2024-11-27 15:22:55 +01:00
|
|
|
mod collection_view_stack ;
|
|
|
|
mod component ;
|
2024-11-20 16:32:37 +01:00
|
|
|
mod utility ;
|
|
|
|
|
2024-11-27 15:22:55 +01:00
|
|
|
use {
|
|
|
|
gtk4 :: { Orientation :: * , prelude :: * } ,
|
|
|
|
libadwaita :: * ,
|
|
|
|
} ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
2024-11-20 17:18:22 +01:00
|
|
|
use crate :: {
|
|
|
|
collection :: * ,
|
2024-11-27 15:22:55 +01:00
|
|
|
ui :: {
|
|
|
|
application_header_bar :: * ,
|
|
|
|
collatable_container :: * ,
|
|
|
|
collection_view_stack :: * ,
|
|
|
|
component :: * ,
|
|
|
|
} ,
|
2024-11-20 17:18:22 +01:00
|
|
|
} ;
|
2024-11-20 16:32:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pub struct UI {
|
|
|
|
window : ApplicationWindow ,
|
2024-11-27 15:22:55 +01:00
|
|
|
films_component : CollatableFilmsContainer ,
|
|
|
|
series_component : CollatableSeriesContainer ,
|
2024-11-20 16:32:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
impl UI {
|
|
|
|
pub fn new ( application : & Application ) -> UI {
|
2024-11-27 15:22:55 +01:00
|
|
|
let films_component = CollatableFilmsContainer :: new ( vec ! () ) ;
|
|
|
|
let series_component = CollatableSeriesContainer :: new ( vec ! () ) ;
|
|
|
|
let switch_component = CollectionViewStack :: new (
|
|
|
|
& films_component , & series_component ) ;
|
|
|
|
let header_bar = ApplicationHeaderBar :: new ( & switch_component ) ;
|
|
|
|
|
|
|
|
let window = create_window (
|
|
|
|
application ,
|
|
|
|
header_bar . get_widget () ,
|
|
|
|
switch_component . get_widget () ,
|
2024-11-20 16:32:37 +01:00
|
|
|
) ;
|
|
|
|
|
2024-11-27 15:22:55 +01:00
|
|
|
UI { window , films_component , series_component }
|
2024-11-20 16:32:37 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
pub fn show_window ( & self ) { self . window . set_visible (true) }
|
|
|
|
|
2024-11-29 21:06:14 +01:00
|
|
|
pub fn close_window ( & self ) { self . window . close () }
|
|
|
|
|
2024-11-27 11:47:20 +01:00
|
|
|
pub fn render_collection ( & self , collection : Collection ) {
|
2024-11-27 15:22:55 +01:00
|
|
|
self . films_component . set_films ( collection . films ) ;
|
|
|
|
self . series_component . set_series ( collection . series ) ;
|
2024-11-20 16:32:37 +01:00
|
|
|
}
|
|
|
|
}
|
2024-11-27 15:22:55 +01:00
|
|
|
|
|
|
|
fn create_window (
|
|
|
|
application : & Application ,
|
|
|
|
header_bar : & HeaderBar ,
|
|
|
|
collection_view_stack : & ViewStack ,
|
|
|
|
) -> ApplicationWindow {
|
|
|
|
let content = gtk4 :: Box :: builder () . orientation (Vertical) . build () ;
|
|
|
|
content . append (header_bar) ;
|
|
|
|
content . append (collection_view_stack) ;
|
|
|
|
|
|
|
|
ApplicationWindow :: builder ()
|
|
|
|
. application (application)
|
|
|
|
. content ( & content )
|
|
|
|
. title ("Zoödex")
|
|
|
|
. build ()
|
|
|
|
}
|