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
parent 96d3ef2650
commit 794980fb33
5 changed files with 23 additions and 3 deletions

View File

@ -60,6 +60,9 @@ pub enum PortfolioMessage {
SelectDocument {
document_id: u64,
},
SetActiveDcoument {
document_id: u64,
},
UpdateDocumentBar,
UpdateOpenDocumentsList,
}

View File

@ -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>) {
// Special case when loading a document on an empty page
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());
let active_document_index = self
@ -215,6 +216,7 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
CloseDocumentWithConfirmation { document_id } => {
let target_document = self.documents.get(&document_id).unwrap();
if target_document.is_saved() {
responses.push_back(ToolMessage::AbortCurrentTool.into());
responses.push_back(PortfolioMessage::CloseDocument { document_id }.into());
} else {
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 new_document = DocumentMessageHandler::with_name(name, ipp);
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);
}
NextDocument => {
let current_index = self.document_index(self.active_document_id);
let next_index = (current_index + 1) % self.document_ids.len();
let next_id = self.document_ids[next_index];
responses.push_back(PortfolioMessage::SelectDocument { document_id: next_id }.into());
}
OpenDocument => {
@ -363,16 +366,21 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
if !active_document.is_saved() {
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(RenderDocument.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(ToolMessage::DocumentIsDirty.into());
responses.push_back(PortfolioMessage::UpdateDocumentBar.into());
}
SetActiveDcoument { document_id } => {
self.active_document_id = document_id;
}
UpdateDocumentBar => {
let active_document = self.active_document();
active_document.register_properties(responses, LayoutTarget::DocumentBar)

View File

@ -80,6 +80,7 @@ pub enum ToolMessage {
// Messages
#[remain::unsorted]
NoOp,
AbortCurrentTool,
ActivateTool {
tool_type: ToolType,
},

View File

@ -22,6 +22,11 @@ impl MessageHandler<ToolMessage, (&DocumentMessageHandler, &InputPreprocessorMes
#[remain::sorted]
match message {
// 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 } => {
let tool_data = &mut self.tool_state.tool_data;
let document_data = &self.tool_state.document_tool_data;

View File

@ -188,6 +188,9 @@ impl JsEditorHandle {
}
pub fn close_document(&self, document_id: u64) {
let message = ToolMessage::AbortCurrentTool;
self.dispatch(message);
let message = PortfolioMessage::CloseDocument { document_id };
self.dispatch(message);
}