WIP

Antonio Scandurra created

Change summary

crates/workspace/src/persistence.rs       | 68 +++++++++---------------
crates/workspace/src/persistence/model.rs |  9 +-
crates/workspace/src/workspace.rs         | 52 +++++++++---------
3 files changed, 56 insertions(+), 73 deletions(-)

Detailed changes

crates/workspace/src/persistence.rs 🔗

@@ -20,7 +20,6 @@ use model::{
 
 use self::model::DockStructure;
 
-
 define_connection! {
     // Current schema shape using pseudo-rust syntax:
     //
@@ -158,11 +157,11 @@ define_connection! {
     // Add panels related information
     sql!(
         ALTER TABLE workspaces ADD COLUMN left_dock_visible INTEGER; //bool
-        ALTER TABLE workspaces ADD COLUMN left_dock_size REAL;
+        ALTER TABLE workspaces ADD COLUMN left_dock_active_panel TEXT;
         ALTER TABLE workspaces ADD COLUMN right_dock_visible INTEGER; //bool
-        ALTER TABLE workspaces ADD COLUMN right_dock_size REAL;
+        ALTER TABLE workspaces ADD COLUMN right_dock_active_panel TEXT;
         ALTER TABLE workspaces ADD COLUMN bottom_dock_visible INTEGER; //bool
-        ALTER TABLE workspaces ADD COLUMN bottom_dock_size REAL;
+        ALTER TABLE workspaces ADD COLUMN bottom_dock_active_panel TEXT;
     )];
 }
 
@@ -178,19 +177,17 @@ impl WorkspaceDb {
 
         // Note that we re-assign the workspace_id here in case it's empty
         // and we've grabbed the most recent workspace
-        let (workspace_id, workspace_location, left_sidebar_open, bounds, display, docks): (
+        let (workspace_id, workspace_location, bounds, display, docks): (
             WorkspaceId,
             WorkspaceLocation,
-            bool,
             Option<WindowBounds>,
             Option<Uuid>,
-            DockStructure
+            DockStructure,
         ) = self
             .select_row_bound(sql! {
                 SELECT
                     workspace_id,
                     workspace_location,
-                    left_sidebar_open,
                     window_state,
                     window_x,
                     window_y,
@@ -198,11 +195,11 @@ impl WorkspaceDb {
                     window_height,
                     display,
                     left_dock_visible,
-                    left_dock_size,
+                    left_dock_active_panel,
                     right_dock_visible,
-                    right_dock_size,
+                    right_dock_active_panel,
                     bottom_dock_visible,
-                    bottom_dock_size
+                    bottom_dock_active_panel
                 FROM workspaces
                 WHERE workspace_location = ?
             })
@@ -218,10 +215,9 @@ impl WorkspaceDb {
                 .get_center_pane_group(workspace_id)
                 .context("Getting center group")
                 .log_err()?,
-            left_sidebar_open,
             bounds,
             display,
-            docks
+            docks,
         })
     }
 
@@ -246,28 +242,26 @@ impl WorkspaceDb {
                     INSERT INTO workspaces(
                         workspace_id,
                         workspace_location,
-                        left_sidebar_open,
                         left_dock_visible,
-                        left_dock_size,
+                        left_dock_active_panel,
                         right_dock_visible,
-                        right_dock_size,
+                        right_dock_active_panel,
                         bottom_dock_visible,
-                        bottom_dock_size,
+                        bottom_dock_active_panel,
                         timestamp
                     )
-                    VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, ?9, CURRENT_TIMESTAMP)
+                    VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7, ?8, CURRENT_TIMESTAMP)
                     ON CONFLICT DO
                     UPDATE SET
                         workspace_location = ?2,
-                        left_sidebar_open = ?3,
-                        left_dock_visible = ?4,
-                        left_dock_size = ?5,
-                        right_dock_visible = ?6,
-                        right_dock_size = ?7,
-                        bottom_dock_visible = ?8,
-                        bottom_dock_size = ?9,
+                        left_dock_visible = ?3,
+                        left_dock_active_panel = ?4,
+                        right_dock_visible = ?5,
+                        right_dock_active_panel = ?6,
+                        bottom_dock_visible = ?7,
+                        bottom_dock_active_panel = ?8,
                         timestamp = CURRENT_TIMESTAMP
-                ))?((workspace.id, &workspace.location, workspace.left_sidebar_open, workspace.docks))
+                ))?((workspace.id, &workspace.location, workspace.docks))
                 .context("Updating workspace")?;
 
                 // Save center pane group
@@ -581,22 +575,19 @@ mod tests {
         let mut workspace_1 = SerializedWorkspace {
             id: 1,
             location: (["/tmp", "/tmp2"]).into(),
-            left_sidebar_open: true,
             center_group: Default::default(),
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         };
 
         let mut _workspace_2 = SerializedWorkspace {
             id: 2,
             location: (["/tmp"]).into(),
-            left_sidebar_open: false,
             center_group: Default::default(),
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
-
+            docks: Default::default(),
         };
 
         db.save_workspace(workspace_1.clone()).await;
@@ -691,10 +682,9 @@ mod tests {
             id: 5,
             location: (["/tmp", "/tmp2"]).into(),
             center_group,
-            left_sidebar_open: true,
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         };
 
         db.save_workspace(workspace.clone()).await;
@@ -720,20 +710,18 @@ mod tests {
             id: 1,
             location: (["/tmp", "/tmp2"]).into(),
             center_group: Default::default(),
-            left_sidebar_open: true,
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         };
 
         let mut workspace_2 = SerializedWorkspace {
             id: 2,
             location: (["/tmp"]).into(),
             center_group: Default::default(),
-            left_sidebar_open: false,
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         };
 
         db.save_workspace(workspace_1.clone()).await;
@@ -767,10 +755,9 @@ mod tests {
             id: 3,
             location: (&["/tmp", "/tmp2"]).into(),
             center_group: Default::default(),
-            left_sidebar_open: false,
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         };
 
         db.save_workspace(workspace_3.clone()).await;
@@ -801,10 +788,9 @@ mod tests {
             id: 4,
             location: workspace_id.into(),
             center_group: center_group.clone(),
-            left_sidebar_open: true,
             bounds: Default::default(),
             display: Default::default(),
-            docks: Default::default()
+            docks: Default::default(),
         }
     }
 

crates/workspace/src/persistence/model.rs 🔗

@@ -60,7 +60,6 @@ pub struct SerializedWorkspace {
     pub id: WorkspaceId,
     pub location: WorkspaceLocation,
     pub center_group: SerializedPaneGroup,
-    pub left_sidebar_open: bool,
     pub bounds: Option<WindowBounds>,
     pub display: Option<Uuid>,
     pub docks: DockStructure,
@@ -100,17 +99,17 @@ impl Bind for DockStructure {
 #[derive(Debug, PartialEq, Clone, Default)]
 pub struct DockData {
     pub(crate) visible: bool,
-    pub(crate) size: Option<f32>,
+    pub(crate) active_panel: Option<String>,
 }
 
 impl Column for DockData {
     fn column(statement: &mut Statement, start_index: i32) -> Result<(Self, i32)> {
         let (visible, next_index) = Option::<bool>::column(statement, start_index)?;
-        let (size, next_index) = Option::<f32>::column(statement, next_index)?;
+        let (active_panel, next_index) = Option::<String>::column(statement, next_index)?;
         Ok((
             DockData {
                 visible: visible.unwrap_or(false),
-                size,
+                active_panel,
             },
             next_index,
         ))
@@ -120,7 +119,7 @@ impl Column for DockData {
 impl Bind for DockData {
     fn bind(&self, statement: &Statement, start_index: i32) -> Result<i32> {
         let next_index = statement.bind(&self.visible, start_index)?;
-        statement.bind(&self.size, next_index)
+        statement.bind(&self.active_panel, next_index)
     }
 }
 

crates/workspace/src/workspace.rs 🔗

@@ -2580,39 +2580,45 @@ impl Workspace {
         fn build_serialized_docks(this: &Workspace, cx: &AppContext) -> DockStructure {
             let left_dock = this.left_dock.read(cx);
             let left_visible = left_dock.is_open();
-            let left_size = left_dock
-                .active_panel()
-                .map(|panel| left_dock.panel_size(panel.as_ref()))
-                .flatten();
+            let left_active_panel = left_dock.active_panel().and_then(|panel| {
+                Some(
+                    cx.view_ui_name(panel.as_any().window_id(), panel.id())?
+                        .to_string(),
+                )
+            });
 
             let right_dock = this.right_dock.read(cx);
             let right_visible = right_dock.is_open();
-            let right_size = right_dock
-                .active_panel()
-                .map(|panel| right_dock.panel_size(panel.as_ref()))
-                .flatten();
+            let right_active_panel = right_dock.active_panel().and_then(|panel| {
+                Some(
+                    cx.view_ui_name(panel.as_any().window_id(), panel.id())?
+                        .to_string(),
+                )
+            });
 
             let bottom_dock = this.bottom_dock.read(cx);
             let bottom_visible = bottom_dock.is_open();
-            let bottom_size = bottom_dock
-                .active_panel()
-                .map(|panel| bottom_dock.panel_size(panel.as_ref()))
-                .flatten();
+            let bottom_active_panel = bottom_dock.active_panel().and_then(|panel| {
+                Some(
+                    cx.view_ui_name(panel.as_any().window_id(), panel.id())?
+                        .to_string(),
+                )
+            });
 
-            DockStructure {
+            dbg!(DockStructure {
                 left: DockData {
                     visible: left_visible,
-                    size: left_size,
+                    active_panel: left_active_panel,
                 },
                 right: DockData {
                     visible: right_visible,
-                    size: right_size,
+                    active_panel: right_active_panel,
                 },
                 bottom: DockData {
                     visible: bottom_visible,
-                    size: bottom_size,
+                    active_panel: bottom_active_panel,
                 },
-            }
+            })
         }
 
         if let Some(location) = self.location(cx) {
@@ -2627,7 +2633,6 @@ impl Workspace {
                     id: self.database_id,
                     location,
                     center_group,
-                    left_sidebar_open: self.left_dock.read(cx).is_open(),
                     bounds: Default::default(),
                     display: Default::default(),
                     docks,
@@ -2686,22 +2691,15 @@ impl Workspace {
 
                 let docks = serialized_workspace.docks;
                 workspace.left_dock.update(cx, |dock, cx| {
+                    dbg!(docks.left.visible);
                     dock.set_open(docks.left.visible, cx);
-                    if let Some(size) = docks.left.size {
-                        dock.resize_active_panel(size, cx);
-                    }
+                    dbg!(dock.is_open());
                 });
                 workspace.right_dock.update(cx, |dock, cx| {
                     dock.set_open(docks.right.visible, cx);
-                    if let Some(size) = docks.right.size {
-                        dock.resize_active_panel(size, cx);
-                    }
                 });
                 workspace.bottom_dock.update(cx, |dock, cx| {
                     dock.set_open(docks.bottom.visible, cx);
-                    if let Some(size) = docks.bottom.size {
-                        dock.resize_active_panel(size, cx);
-                    }
                 });
 
                 cx.notify();