From 3ff830102f4ea620431950ce69ba183f6b794e50 Mon Sep 17 00:00:00 2001 From: Matthew Dapena-Tretter Date: Thu, 9 Mar 2017 11:26:48 -0800 Subject: [PATCH] Serialize docks --- src/atom-environment.coffee | 2 ++ src/dock.js | 18 ++++++++++++++++++ src/workspace.js | 15 +++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/atom-environment.coffee b/src/atom-environment.coffee index 7594f5de9..9db5330d3 100644 --- a/src/atom-environment.coffee +++ b/src/atom-environment.coffee @@ -38,6 +38,7 @@ Panel = require './panel' PaneContainer = require './pane-container' PaneAxis = require './pane-axis' Pane = require './pane' +Dock = require './dock' Project = require './project' TextEditor = require './text-editor' TextBuffer = require 'text-buffer' @@ -254,6 +255,7 @@ class AtomEnvironment extends Model @deserializers.add(PaneContainer) @deserializers.add(PaneAxis) @deserializers.add(Pane) + @deserializers.add(Dock) @deserializers.add(Project) @deserializers.add(TextEditor) @deserializers.add(TextBuffer) diff --git a/src/dock.js b/src/dock.js index 9bcea6e57..e72b1415f 100644 --- a/src/dock.js +++ b/src/dock.js @@ -304,6 +304,24 @@ module.exports = class Dock { return initialSize == null ? DEFAULT_INITIAL_SIZE : initialSize } + serialize () { + return { + deserializer: 'Dock', + size: this.state.size, + paneContainer: this.paneContainer.serialize(), + open: this.state.open + } + } + + deserialize (serialized, deserializerManager) { + this.paneContainer.deserialize(serialized.paneContainer, deserializerManager) + this.setState({ + size: serialized.size, + // If no items could be deserialized, we don't want to show the dock (even if it was open last time) + open: serialized.open && (this.paneContainer.getPaneItems().length > 0) + }) + } + // PaneContainer-delegating methods getPanes () { diff --git a/src/workspace.js b/src/workspace.js index 98e945b18..33fec9d67 100644 --- a/src/workspace.js +++ b/src/workspace.js @@ -154,7 +154,12 @@ module.exports = class Workspace extends Model { deserializer: 'Workspace', paneContainer: this.paneContainer.serialize(), packagesWithActiveGrammars: this.getPackageNamesWithActiveGrammars(), - destroyedItemURIs: this.destroyedItemURIs.slice() + destroyedItemURIs: this.destroyedItemURIs.slice(), + docks: { + left: this.docks.left.serialize(), + right: this.docks.right.serialize(), + bottom: this.docks.bottom.serialize() + } } } @@ -170,7 +175,13 @@ module.exports = class Workspace extends Model { if (state.destroyedItemURIs != null) { this.destroyedItemURIs = state.destroyedItemURIs } - return this.paneContainer.deserialize(state.paneContainer, deserializerManager) + this.paneContainer.deserialize(state.paneContainer, deserializerManager) + for (let location in this.docks) { + const serialized = state.docks && state.docks[location] + if (serialized) { + this.docks[location].deserialize(serialized, deserializerManager) + } + } } getPackageNamesWithActiveGrammars () {