makepad_studio/
studio_editor.rs1
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 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}