22
33use std:: collections:: HashMap ;
44
5- use crate :: pages:: clone;
65use crate :: { fl, pages} ;
76use cosmic:: app:: { Command , Core } ;
87use cosmic:: iced:: alignment:: { Horizontal , Vertical } ;
@@ -19,6 +18,9 @@ pub struct Devmode {
1918 context_page : ContextPage ,
2019 page : Page ,
2120 clone : pages:: clone:: ClonePage ,
21+ workspaces : pages:: workspaces:: WorkspacesPage ,
22+ open : pages:: open:: OpenPage ,
23+ config : pages:: config:: ConfigPage ,
2224 key_binds : HashMap < menu:: KeyBind , MenuAction > ,
2325 nav : nav_bar:: Model ,
2426}
@@ -30,10 +32,14 @@ pub struct Devmode {
3032pub enum Message {
3133 LaunchUrl ( String ) ,
3234 ToggleContextPage ( ContextPage ) ,
33- Clone ( clone:: Message ) ,
35+ Clone ( pages:: clone:: Message ) ,
36+ Workspaces ( pages:: workspaces:: Message ) ,
37+ Open ( pages:: open:: Message ) ,
38+ Config ( pages:: config:: Message ) ,
3439}
3540
3641/// Identifies a page in the application.
42+ #[ derive( Debug , Clone , Copy ) ]
3743pub enum Page {
3844 Clone ,
3945 Workspaces ,
@@ -137,6 +143,9 @@ impl Application for Devmode {
137143 context_page : ContextPage :: default ( ) ,
138144 page : Page :: Clone ,
139145 clone : pages:: clone:: ClonePage :: new ( ) ,
146+ workspaces : pages:: workspaces:: WorkspacesPage :: new ( ) ,
147+ open : pages:: open:: OpenPage :: new ( ) ,
148+ config : pages:: config:: ConfigPage :: new ( ) ,
140149 key_binds : HashMap :: new ( ) ,
141150 nav,
142151 } ;
@@ -162,9 +171,9 @@ impl Application for Devmode {
162171
163172 let page: Element < Self :: Message > = match self . page {
164173 Page :: Clone => self . clone . view ( ) . map ( Message :: Clone ) ,
165- Page :: Workspaces => todo ! ( ) ,
166- Page :: Open => todo ! ( ) ,
167- Page :: Config => todo ! ( ) ,
174+ Page :: Workspaces => self . workspaces . view ( ) . map ( Message :: Workspaces ) ,
175+ Page :: Open => self . open . view ( ) . map ( Message :: Open ) ,
176+ Page :: Config => self . config . view ( ) . map ( Message :: Config ) ,
168177 } ;
169178
170179 widget:: container ( page)
@@ -185,16 +194,18 @@ impl Application for Devmode {
185194 Message :: Clone ( message) => {
186195 for command in self . clone . update ( message) {
187196 match command {
188- clone:: Command :: Clone ( _repository, _workspace) => {
197+ pages :: clone:: Command :: Clone ( _repository, _workspace) => {
189198 todo ! ( "Implement cloning mechanism." )
190199 }
191200 }
192201 }
193202 }
203+ Message :: Workspaces ( message) => for command in self . workspaces . update ( message) { } ,
204+ Message :: Open ( message) => for command in self . open . update ( message) { } ,
205+ Message :: Config ( message) => for command in self . config . update ( message) { } ,
194206 Message :: LaunchUrl ( url) => {
195207 let _result = open:: that_detached ( url) ;
196208 }
197-
198209 Message :: ToggleContextPage ( context_page) => {
199210 if self . context_page == context_page {
200211 // Close the context drawer if the toggled context page is the same.
@@ -228,6 +239,10 @@ impl Application for Devmode {
228239 // Activate the page in the model.
229240 self . nav . activate ( id) ;
230241
242+ if let Some ( page) = self . nav . active_data :: < Page > ( ) {
243+ self . page = * page;
244+ }
245+
231246 Command :: none ( )
232247 }
233248}
0 commit comments