11use super :: clipboards:: Clipboard ;
22use super :: layer_panel:: { layer_panel_entry, LayerDataTypeDiscriminant , LayerMetadata , LayerPanelEntry , RawBuffer } ;
33use super :: utility_types:: { AlignAggregate , AlignAxis , DocumentSave , FlipAxis } ;
4- use super :: vectorize_layer_metadata;
4+ use super :: { vectorize_layer_metadata, PropertiesPanelMessageHandler } ;
55use super :: { ArtboardMessageHandler , MovementMessageHandler , OverlaysMessageHandler , TransformLayerMessageHandler } ;
66use crate :: consts:: {
77 ASYMPTOTIC_EFFECT , DEFAULT_DOCUMENT_NAME , FILE_EXPORT_SUFFIX , FILE_SAVE_SUFFIX , GRAPHITE_DOCUMENT_VERSION , SCALE_EFFECT , SCROLLBAR_SPACING , VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR ,
@@ -45,6 +45,7 @@ pub struct DocumentMessageHandler {
4545 pub artboard_message_handler : ArtboardMessageHandler ,
4646 #[ serde( skip) ]
4747 transform_layer_handler : TransformLayerMessageHandler ,
48+ properties_panel_message_handler : PropertiesPanelMessageHandler ,
4849 pub overlays_visible : bool ,
4950 pub snapping_enabled : bool ,
5051 pub view_mode : ViewMode ,
@@ -65,6 +66,7 @@ impl Default for DocumentMessageHandler {
6566 overlays_message_handler : OverlaysMessageHandler :: default ( ) ,
6667 artboard_message_handler : ArtboardMessageHandler :: default ( ) ,
6768 transform_layer_handler : TransformLayerMessageHandler :: default ( ) ,
69+ properties_panel_message_handler : PropertiesPanelMessageHandler :: default ( ) ,
6870 snapping_enabled : true ,
6971 overlays_visible : true ,
7072 view_mode : ViewMode :: default ( ) ,
@@ -676,16 +678,28 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
676678 self . transform_layer_handler
677679 . process_action ( message, ( & mut self . layer_metadata , & mut self . graphene_document , ipp) , responses) ;
678680 }
681+ #[ remain:: unsorted]
682+ PropertiesPanel ( message) => {
683+ self . properties_panel_message_handler . process_action ( message, & self . graphene_document , responses) ;
684+ }
679685
680686 // Messages
681687 AbortTransaction => {
682688 self . undo ( responses) . unwrap_or_else ( |e| log:: warn!( "{}" , e) ) ;
683689 responses. extend ( [ RenderDocument . into ( ) , DocumentStructureChanged . into ( ) ] ) ;
684690 }
685691 AddSelectedLayers { additional_layers } => {
686- for layer_path in additional_layers {
687- responses. extend ( self . select_layer ( & layer_path) ) ;
692+ for layer_path in & additional_layers {
693+ responses. extend ( self . select_layer ( layer_path) ) ;
688694 }
695+
696+ let selected_paths: Vec < Vec < u64 > > = self . selected_layers ( ) . map ( |path| path. to_vec ( ) ) . collect ( ) ;
697+ if selected_paths. is_empty ( ) {
698+ responses. push_back ( PropertiesPanelMessage :: ClearSelection . into ( ) )
699+ } else {
700+ responses. push_back ( PropertiesPanelMessage :: SetActiveLayers { paths : selected_paths } . into ( ) )
701+ }
702+
689703 // TODO: Correctly update layer panel in clear_selection instead of here
690704 responses. push_back ( FolderChanged { affected_folder_path : vec ! [ ] } . into ( ) ) ;
691705 responses. push_back ( DocumentMessage :: SelectionChanged . into ( ) ) ;
@@ -743,12 +757,15 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
743757 DebugPrintDocument => {
744758 log:: debug!( "{:#?}\n {:#?}" , self . graphene_document, self . layer_metadata) ;
745759 }
746- DeleteLayer { layer_path } => responses. push_front ( DocumentOperation :: DeleteLayer { path : layer_path } . into ( ) ) ,
760+ DeleteLayer { layer_path } => {
761+ responses. push_front ( DocumentOperation :: DeleteLayer { path : layer_path. clone ( ) } . into ( ) ) ;
762+ responses. push_back ( PropertiesPanelMessage :: CheckSelectedWasDeleted { path : layer_path } . into ( ) ) ;
763+ }
747764 DeleteSelectedLayers => {
748765 self . backup ( responses) ;
749766
750767 for path in self . selected_layers_without_children ( ) {
751- responses. push_front ( DocumentOperation :: DeleteLayer { path : path. to_vec ( ) } . into ( ) ) ;
768+ responses. push_front ( DocumentMessage :: DeleteLayer { layer_path : path. to_vec ( ) } . into ( ) ) ;
752769 }
753770
754771 responses. push_front ( DocumentMessage :: SelectionChanged . into ( ) ) ;
@@ -861,9 +878,10 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
861878 ) ;
862879 }
863880 LayerChanged { affected_layer_path } => {
864- if let Ok ( layer_entry) = self . layer_panel_entry ( affected_layer_path) {
881+ if let Ok ( layer_entry) = self . layer_panel_entry ( affected_layer_path. clone ( ) ) {
865882 responses. push_back ( FrontendMessage :: UpdateDocumentLayer { data : layer_entry } . into ( ) ) ;
866883 }
884+ responses. push_back ( PropertiesPanelMessage :: CheckSelectedWasUpdated { path : affected_layer_path } . into ( ) ) ;
867885 }
868886 MoveSelectedLayersTo {
869887 folder_path,
0 commit comments