Serialize docks

This commit is contained in:
Matthew Dapena-Tretter
2017-03-09 11:26:48 -08:00
parent bf39947eee
commit 3ff830102f
3 changed files with 33 additions and 2 deletions

View File

@@ -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)

View File

@@ -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 () {

View File

@@ -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 () {