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:
parent
96d3ef2650
commit
794980fb33
|
|
@ -60,6 +60,9 @@ pub enum PortfolioMessage {
|
|||
SelectDocument {
|
||||
document_id: u64,
|
||||
},
|
||||
SetActiveDcoument {
|
||||
document_id: u64,
|
||||
},
|
||||
UpdateDocumentBar,
|
||||
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>) {
|
||||
// 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)
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@ pub enum ToolMessage {
|
|||
// Messages
|
||||
#[remain::unsorted]
|
||||
NoOp,
|
||||
AbortCurrentTool,
|
||||
ActivateTool {
|
||||
tool_type: ToolType,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue