1+ // lib/features/workspace/widgets/node_editing_toolbox.dart
12import 'package:cookethflow/core/providers/supabase_provider.dart' ;
23import 'package:cookethflow/core/utils/enums.dart' ;
34import 'package:cookethflow/features/models/canvas_models/objects/connector_object.dart' ;
@@ -34,7 +35,7 @@ class NodeEditingToolbox extends StatelessWidget {
3435 return IconButton (
3536 icon: Icon (icon, size: 22 ),
3637 onPressed: onPressed,
37- color: color ?? (su.isDark? Colors .white: Colors .black87),
38+ color: color ?? (su.isDark ? Colors .white : Colors .black87),
3839 splashRadius: 20 ,
3940 tooltip: tooltip,
4041 padding: const EdgeInsets .all (8 ),
@@ -45,33 +46,30 @@ class NodeEditingToolbox extends StatelessWidget {
4546 @override
4647 Widget build (BuildContext context) {
4748 final provider = context.read <WorkspaceProvider >();
48- final provider2 = context.read <SupabaseService >();
49+ final su = context.read <SupabaseService >();
4950 final selectedObjectId = provider.currentlySelectedObjectId;
5051
5152 if (selectedObjectId == null ) {
5253 return const SizedBox .shrink ();
5354 }
54-
55+
5556 final object = provider.canvasObjects[selectedObjectId];
5657 if (object == null ) {
5758 return const SizedBox .shrink ();
5859 }
5960
60- final isConnector = object is ConnectorObject ;
61- final showShapeChanger =
62- object is ! TextBoxObject &&
63- object is ! ConnectorObject &&
64- object is ! StickyNoteObject ;
65- final showColorChanger =
66- object is ! TextBoxObject ;
67-
6861 final buttons = < Widget > [];
6962
63+ final isConnector = object is ConnectorObject ;
64+ final isShape =
65+ object is ! TextBoxObject && object is ! ConnectorObject && object is ! StickyNoteObject ;
66+ final canChangeColor = object is ! TextBoxObject && object is ! ConnectorObject ;
67+
7068 if (isConnector) {
7169 buttons.add (
7270 _buildIconButton (
7371 context,
74- icon: PhosphorIcons .database (),
72+ icon: PhosphorIcons .lineSegment (),
7573 onPressed: () {
7674 showDialog (
7775 context: context,
@@ -82,69 +80,110 @@ class NodeEditingToolbox extends StatelessWidget {
8280 onStyleSelected: (color, type, thickness) {
8381 provider.changeConnectorStyle (color, type, thickness);
8482 },
85- su: provider2 ,
83+ su: su ,
8684 ),
8785 );
8886 },
8987 tooltip: 'Change Connector Style' ,
90- su: provider2 ,
88+ su: su ,
9189 ),
9290 );
93- buttons.add (_buildDivider ());
94- }
95-
96- if (showShapeChanger) {
91+ if (canChangeColor) {
92+ buttons.add (_buildDivider ());
93+ buttons.add (
94+ _buildIconButton (
95+ context,
96+ icon: PhosphorIcons .paintBucket (),
97+ onPressed: () {
98+ showDialog (
99+ context: context,
100+ builder: (context) => NodeColourPicker (
101+ initialColor: object.color,
102+ onColorSelected: (color) {
103+ provider.changeConnectorStyle (
104+ color,
105+ object.connectionType,
106+ object.thickness,
107+ );
108+ Navigator .of (context).pop ();
109+ },
110+ ),
111+ );
112+ },
113+ tooltip: 'Change Color' ,
114+ su: su,
115+ ),
116+ );
117+ }
118+ } else if (isShape) {
97119 buttons.add (
98120 _buildIconButton (
99121 context,
100122 icon: PhosphorIcons .shapes (),
101123 onPressed: () {
102124 showDialog (
103125 context: context,
104- builder:
105- (context) => NodePicker (
106- onShapeSelected : (shapeType) {
107- provider. changeObjectShape (shapeType );
108- },
109- su: provider2 ,
110- ),
126+ builder: (context) => NodePicker (
127+ onShapeSelected : (shapeType) {
128+ provider. changeObjectShape (shapeType);
129+ Navigator . of (context). pop ( );
130+ },
131+ su: su ,
132+ ),
111133 );
112134 },
113135 tooltip: 'Change Shape' ,
114- su: provider2
136+ su: su,
115137 ),
116138 );
117- buttons.add (_buildDivider ());
118- }
119-
120- if (showColorChanger) {
139+ if (canChangeColor) {
140+ buttons.add (_buildDivider ());
141+ buttons.add (
142+ _buildIconButton (
143+ context,
144+ icon: PhosphorIcons .paintBucket (),
145+ onPressed: () {
146+ showDialog (
147+ context: context,
148+ builder: (context) => NodeColourPicker (
149+ initialColor: object.color,
150+ onColorSelected: (color) {
151+ provider.changeObjectColor (color);
152+ Navigator .of (context).pop ();
153+ },
154+ ),
155+ );
156+ },
157+ tooltip: 'Change Color' ,
158+ su: su,
159+ ),
160+ );
161+ }
162+ } else if (canChangeColor) {
121163 buttons.add (
122164 _buildIconButton (
123165 context,
124166 icon: PhosphorIcons .paintBucket (),
125167 onPressed: () {
126- final selectedObject =
127- provider.canvasObjects[selectedObjectId];
128168 showDialog (
129169 context: context,
130- builder:
131- (context) => NodeColourPicker (
132- initialColor: selectedObject? .color,
133- onColorSelected: (color) {
134- if (isConnector) {
135- provider.changeConnectorStyle (color, (object as ConnectorObject ).connectionType, (object as ConnectorObject ).thickness);
136- } else {
137- provider.changeObjectColor (color);
138- }
139- Navigator .of (context).pop ();
140- },
141- ),
170+ builder: (context) => NodeColourPicker (
171+ initialColor: object.color,
172+ onColorSelected: (color) {
173+ provider.changeObjectColor (color);
174+ Navigator .of (context).pop ();
175+ },
176+ ),
142177 );
143178 },
144179 tooltip: 'Change Color' ,
145- su: provider2
180+ su: su,
146181 ),
147182 );
183+ }
184+
185+ // Always add the delete button if there's an object selected
186+ if (buttons.isNotEmpty) {
148187 buttons.add (_buildDivider ());
149188 }
150189
@@ -157,7 +196,7 @@ class NodeEditingToolbox extends StatelessWidget {
157196 },
158197 tooltip: 'Delete Object' ,
159198 color: Colors .redAccent,
160- su: provider2
199+ su: su,
161200 ),
162201 );
163202
@@ -166,8 +205,7 @@ class NodeEditingToolbox extends StatelessWidget {
166205 child: Container (
167206 padding: const EdgeInsets .symmetric (horizontal: 8 , vertical: 6 ),
168207 decoration: BoxDecoration (
169- color:
170- provider2.isDark ? const Color .fromRGBO (48 , 48 , 48 , 1 ) : Colors .white,
208+ color: su.isDark ? const Color .fromRGBO (48 , 48 , 48 , 1 ) : Colors .white,
171209 borderRadius: BorderRadius .circular (10 ),
172210 border: Border .all (color: Colors .grey.shade300),
173211 boxShadow: [
@@ -182,4 +220,4 @@ class NodeEditingToolbox extends StatelessWidget {
182220 ),
183221 );
184222 }
185- }
223+ }
0 commit comments