Welcome screen, refactor to allow zero documents, and add TS typing to widgets (#702)

* unfinished implementation

* Add frontend for the empty panel screen

* Add an icon for Folder based on NodeFolder

* fixed messages causing peicees of ui not to render on new document

* Standardize nextTick syntax

* WIP generisization of component subscriptions (not compiling yet)

* Fix crash when loading font and there is no active document

* Only advertise tool actions with a document

* Fix failure to create new document

* Initalise the properties panel

* Fix highlight tab, canvas jump, warns and layer tree

* Fix tests

* Possibly fix some things?

* Move WorkingColors layout definition to backend

* Standardize action macro formatting

* Provide typing for widgets in TS/Vue and associated cleanup

* Fix viewport positioning initialization

* Fix menu bar init at startup not document creation

* Fix no viewport bounds bug

* Change !=0 to >0

* Simplify the init system

Closes #656

Co-authored-by: Keavon Chambers <keavon@keavon.com>
Co-authored-by: 0hypercube <0hypercube@gmail.com>
This commit is contained in:
mfish33
2022-07-22 16:09:13 -06:00
committed by Keavon Chambers
co-authored by Keavon Chambers 0hypercube
parent b4b667ded6
commit a0c22d20b6
77 changed files with 1859 additions and 1136 deletions
@@ -12,7 +12,7 @@ impl PropertyHolder for CloseAllDocuments {
min_width: 96,
on_update: WidgetCallback::new(|_| {
DialogMessage::CloseDialogAndThen {
followup: Box::new(PortfolioMessage::CloseAllDocuments.into()),
followups: vec![PortfolioMessage::CloseAllDocuments.into()],
}
.into()
}),
@@ -1,5 +1,5 @@
use crate::layout::widgets::*;
use crate::message_prelude::{DialogMessage, DocumentMessage, FrontendMessage, PortfolioMessage};
use crate::message_prelude::*;
/// A dialog for confirming the closing a document with unsaved changes.
pub struct CloseDocument {
@@ -18,7 +18,7 @@ impl PropertyHolder for CloseDocument {
emphasized: true,
on_update: WidgetCallback::new(|_| {
DialogMessage::CloseDialogAndThen {
followup: Box::new(DocumentMessage::SaveDocument.into()),
followups: vec![DocumentMessage::SaveDocument.into()],
}
.into()
}),
@@ -29,7 +29,7 @@ impl PropertyHolder for CloseDocument {
min_width: 96,
on_update: WidgetCallback::new(move |_| {
DialogMessage::CloseDialogAndThen {
followup: Box::new(PortfolioMessage::CloseDocument { document_id }.into()),
followups: vec![BroadcastSignal::ToolAbort.into(), PortfolioMessage::CloseDocument { document_id }.into()],
}
.into()
}),
+2 -1
View File
@@ -33,6 +33,7 @@ impl PropertyHolder for Export {
WidgetHolder::new(Widget::TextInput(TextInput {
value: self.file_name.clone(),
on_update: WidgetCallback::new(|text_input: &TextInput| ExportDialogUpdate::FileName(text_input.value.clone()).into()),
..Default::default()
})),
];
@@ -123,7 +124,7 @@ impl PropertyHolder for Export {
emphasized: true,
on_update: WidgetCallback::new(|_| {
DialogMessage::CloseDialogAndThen {
followup: Box::new(ExportDialogUpdate::Submit.into()),
followups: vec![ExportDialogUpdate::Submit.into()],
}
.into()
}),
@@ -34,6 +34,7 @@ impl PropertyHolder for NewDocument {
WidgetHolder::new(Widget::TextInput(TextInput {
value: self.name.clone(),
on_update: WidgetCallback::new(|text_input: &TextInput| NewDocumentDialogUpdate::Name(text_input.value.clone()).into()),
..Default::default()
})),
];
@@ -98,7 +99,7 @@ impl PropertyHolder for NewDocument {
emphasized: true,
on_update: WidgetCallback::new(|_| {
DialogMessage::CloseDialogAndThen {
followup: Box::new(NewDocumentDialogUpdate::Submit.into()),
followups: vec![NewDocumentDialogUpdate::Submit.into()],
}
.into()
}),
@@ -131,9 +132,6 @@ pub enum NewDocumentDialogUpdate {
DimensionsY(f64),
Submit,
BufferArtboard,
AddArtboard,
FitCanvas,
}
impl MessageHandler<NewDocumentDialogUpdate, ()> for NewDocument {
@@ -147,27 +145,18 @@ impl MessageHandler<NewDocumentDialogUpdate, ()> for NewDocument {
NewDocumentDialogUpdate::Submit => {
responses.push_back(PortfolioMessage::NewDocumentWithName { name: self.name.clone() }.into());
responses.push_back(NewDocumentDialogUpdate::BufferArtboard.into());
}
NewDocumentDialogUpdate::BufferArtboard => {
if !self.infinite {
responses.push_back(NewDocumentDialogUpdate::AddArtboard.into());
if !self.infinite && self.dimensions.x > 0 && self.dimensions.y > 0 {
responses.push_back(
ArtboardMessage::AddArtboard {
id: None,
position: (0., 0.),
size: (self.dimensions.x as f64, self.dimensions.y as f64),
}
.into(),
);
responses.push_back(DocumentMessage::ZoomCanvasToFitAll.into());
}
}
NewDocumentDialogUpdate::AddArtboard => {
responses.push_back(
ArtboardMessage::AddArtboard {
id: None,
position: (0., 0.),
size: (self.dimensions.x as f64, self.dimensions.y as f64),
}
.into(),
);
responses.push_back(NewDocumentDialogUpdate::FitCanvas.into());
}
NewDocumentDialogUpdate::FitCanvas => {
responses.push_back(DocumentMessage::ZoomCanvasToFitAll.into());
}
}
self.register_properties(responses, LayoutTarget::DialogDetails);