makepad_studio/
studio_editor.rs

1
2use {
3    crate::{
4        app::{AppData},
5        makepad_widgets::*,
6        makepad_code_editor::CodeEditor,
7        file_system::file_system::EditSession,
8    },
9    std::{
10        env,
11    },
12};
13
14live_design!{
15    use makepad_code_editor::code_editor::CodeEditor;
16    
17    pub StudioCodeEditor = {{StudioCodeEditor}}{
18        editor: <CodeEditor>{
19        }
20    }
21} 
22 
23#[derive(Live, LiveHook, Widget)] 
24pub struct StudioCodeEditor{
25    #[wrap] #[live] pub editor: CodeEditor
26}
27
28impl Widget for StudioCodeEditor {
29    fn draw_walk(&mut self, cx: &mut Cx2d, scope:&mut Scope, walk:Walk)->DrawStep{
30        // alright we have a scope, and an id, so now we can properly draw the editor.
31        let session_id = scope.path.from_end(1);
32        let app_scope = scope.data.get_mut::<AppData>().unwrap();
33        if let Some(EditSession::Code(session)) = app_scope.file_system.get_session_mut(session_id){
34            self.editor.draw_walk_editor(cx, session, walk);
35        }
36        else{
37            self.editor.draw_empty_editor(cx, walk);
38        }
39        DrawStep::done()
40    }
41    
42    fn handle_event(&mut self, cx: &mut Cx, event: &Event, scope: &mut Scope){
43        let session_id = scope.path.from_end(1);
44        let data = scope.data.get_mut::<AppData>().unwrap();
45        let uid = self.widget_uid();
46        if let Some(EditSession::Code(session)) = data.file_system.get_session_mut(session_id){
47            for action in self.editor.handle_event(cx, event, &mut Scope::empty(), session){
48                cx.widget_action(uid, &scope.path, action);
49            }
50            data.file_system.handle_sessions();
51        }
52    }
53}