Fix overlays on document switching (#505)

* Fix overlays on document switching

* Fix generating new document

* Move messages

* Abort tool when deleteing active document

Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
0HyperCube
2022-02-03 19:08:39 +00:00
committed by Keavon Chambers
co-authored by Keavon Chambers
parent 23b9ce34b9
commit 5c5d3b0d1c
5 changed files with 23 additions and 3 deletions
+3
View File
@@ -60,6 +60,9 @@ pub enum PortfolioMessage {
SelectDocument { SelectDocument {
document_id: u64, document_id: u64,
}, },
SetActiveDcoument {
document_id: u64,
},
UpdateDocumentBar, UpdateDocumentBar,
UpdateOpenDocumentsList, UpdateOpenDocumentsList,
} }
@@ -56,6 +56,7 @@ impl PortfolioMessageHandler {
fn load_document(&mut self, new_document: DocumentMessageHandler, document_id: u64, replace_first_empty: bool, responses: &mut VecDeque<Message>) { fn load_document(&mut self, new_document: DocumentMessageHandler, document_id: u64, replace_first_empty: bool, responses: &mut VecDeque<Message>) {
// Special case when loading a document on an empty page // Special case when loading a document on an empty page
if replace_first_empty && self.active_document().is_unmodified_default() { if replace_first_empty && self.active_document().is_unmodified_default() {
responses.push_back(ToolMessage::AbortCurrentTool.into());
responses.push_back(PortfolioMessage::CloseDocument { document_id: self.active_document_id }.into()); responses.push_back(PortfolioMessage::CloseDocument { document_id: self.active_document_id }.into());
let active_document_index = self let active_document_index = self
@@ -215,6 +216,7 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
CloseDocumentWithConfirmation { document_id } => { CloseDocumentWithConfirmation { document_id } => {
let target_document = self.documents.get(&document_id).unwrap(); let target_document = self.documents.get(&document_id).unwrap();
if target_document.is_saved() { if target_document.is_saved() {
responses.push_back(ToolMessage::AbortCurrentTool.into());
responses.push_back(PortfolioMessage::CloseDocument { document_id }.into()); responses.push_back(PortfolioMessage::CloseDocument { document_id }.into());
} else { } else {
responses.push_back(FrontendMessage::DisplayConfirmationToCloseDocument { document_id }.into()); responses.push_back(FrontendMessage::DisplayConfirmationToCloseDocument { document_id }.into());
@@ -246,13 +248,14 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
let name = self.generate_new_document_name(); let name = self.generate_new_document_name();
let new_document = DocumentMessageHandler::with_name(name, ipp); let new_document = DocumentMessageHandler::with_name(name, ipp);
let document_id = generate_uuid(); let document_id = generate_uuid();
self.active_document_id = document_id; responses.push_back(ToolMessage::AbortCurrentTool.into());
self.load_document(new_document, document_id, false, responses); self.load_document(new_document, document_id, false, responses);
} }
NextDocument => { NextDocument => {
let current_index = self.document_index(self.active_document_id); let current_index = self.document_index(self.active_document_id);
let next_index = (current_index + 1) % self.document_ids.len(); let next_index = (current_index + 1) % self.document_ids.len();
let next_id = self.document_ids[next_index]; let next_id = self.document_ids[next_index];
responses.push_back(PortfolioMessage::SelectDocument { document_id: next_id }.into()); responses.push_back(PortfolioMessage::SelectDocument { document_id: next_id }.into());
} }
OpenDocument => { OpenDocument => {
@@ -363,16 +366,21 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
if !active_document.is_saved() { if !active_document.is_saved() {
responses.push_back(PortfolioMessage::AutoSaveDocument { document_id: self.active_document_id }.into()); responses.push_back(PortfolioMessage::AutoSaveDocument { document_id: self.active_document_id }.into());
} }
self.active_document_id = document_id; responses.push_back(ToolMessage::AbortCurrentTool.into());
responses.push_back(SetActiveDcoument { document_id }.into());
responses.push_back(FrontendMessage::UpdateActiveDocument { document_id }.into()); responses.push_back(FrontendMessage::UpdateActiveDocument { document_id }.into());
responses.push_back(RenderDocument.into()); responses.push_back(RenderDocument.into());
responses.push_back(DocumentMessage::DocumentStructureChanged.into()); responses.push_back(DocumentMessage::DocumentStructureChanged.into());
for layer in self.active_document().layer_metadata.keys() { for layer in self.documents.get(&document_id).unwrap().layer_metadata.keys() {
responses.push_back(DocumentMessage::LayerChanged { affected_layer_path: layer.clone() }.into()); responses.push_back(DocumentMessage::LayerChanged { affected_layer_path: layer.clone() }.into());
} }
responses.push_back(ToolMessage::DocumentIsDirty.into()); responses.push_back(ToolMessage::DocumentIsDirty.into());
responses.push_back(PortfolioMessage::UpdateDocumentBar.into()); responses.push_back(PortfolioMessage::UpdateDocumentBar.into());
} }
SetActiveDcoument { document_id } => {
self.active_document_id = document_id;
}
UpdateDocumentBar => { UpdateDocumentBar => {
let active_document = self.active_document(); let active_document = self.active_document();
active_document.register_properties(responses, LayoutTarget::DocumentBar) active_document.register_properties(responses, LayoutTarget::DocumentBar)
@@ -80,6 +80,7 @@ pub enum ToolMessage {
// Messages // Messages
#[remain::unsorted] #[remain::unsorted]
NoOp, NoOp,
AbortCurrentTool,
ActivateTool { ActivateTool {
tool_type: ToolType, tool_type: ToolType,
}, },
@@ -22,6 +22,11 @@ impl MessageHandler<ToolMessage, (&DocumentMessageHandler, &InputPreprocessorMes
#[remain::sorted] #[remain::sorted]
match message { match message {
// Messages // Messages
AbortCurrentTool => {
if let Some(tool_message) = standard_tool_message(self.tool_state.tool_data.active_tool_type, StandardToolMessageType::Abort) {
responses.push_front(tool_message.into());
}
}
ActivateTool { tool_type } => { ActivateTool { tool_type } => {
let tool_data = &mut self.tool_state.tool_data; let tool_data = &mut self.tool_state.tool_data;
let document_data = &self.tool_state.document_tool_data; let document_data = &self.tool_state.document_tool_data;
+3
View File
@@ -188,6 +188,9 @@ impl JsEditorHandle {
} }
pub fn close_document(&self, document_id: u64) { pub fn close_document(&self, document_id: u64) {
let message = ToolMessage::AbortCurrentTool;
self.dispatch(message);
let message = PortfolioMessage::CloseDocument { document_id }; let message = PortfolioMessage::CloseDocument { document_id };
self.dispatch(message); self.dispatch(message);
} }