4
4
# TODO
5
5
# Put documentation on code, its a wasteland out there
6
6
# Remove multi-project support in favor of in-line AOD editing (through a toggle)
7
+ # Serialize fprj widgets to improve speed when querying
7
8
# Fix themes
8
9
# Bundle SVG icons
9
10
@@ -73,6 +74,7 @@ def __init__(self):
73
74
self .fileChanged = False
74
75
self .clipboard = []
75
76
self .stagedChanges = []
77
+ self .resourceImages = []
76
78
self .selectionDebounce = False
77
79
78
80
# Setup Settings
@@ -171,7 +173,7 @@ def accepted():
171
173
if self .currentCompileState == 0 :
172
174
currentProject = self .getCurrentProject ()
173
175
currentProject ["data" ]["FaceProject" ]["Screen" ]["@Title" ] = self .compileUi .watchfaceName .text ()
174
- currentProject ["data" ]["FaceProject" ]["Screen" ]["@Bitmap" ] = self .compileUi .thumbnailLocation .text ()
176
+ currentProject ["data" ]["FaceProject" ]["Screen" ]["@Bitmap" ] = self .compileUi .thumbnailLocation .currentText ()
175
177
176
178
reply = QMessageBox .question (self , 'Mi Create' , _ ("Save project before building?" ), QMessageBox .StandardButton .Yes , QMessageBox .StandardButton .No )
177
179
if reply == QMessageBox .StandardButton .Yes :
@@ -410,14 +412,16 @@ def reloadImages(self, imageFolder):
410
412
self .ui .resourceList .clear ()
411
413
else :
412
414
self .ui .resourceList .clear ()
415
+ self .resourceImages .clear ()
413
416
for filename in os .listdir (imageFolder ):
414
417
file = os .path .join (imageFolder , filename )
415
418
if os .path .isfile (file ):
416
419
logging .debug ("Creating file entry for " + os .path .basename (file ))
417
420
item = QListWidgetItem (QIcon (file ), os .path .basename (file ))
418
421
item .setData (0 , os .path .basename (file ))
419
422
item .setSizeHint (QSize (64 , 64 ))
420
-
423
+
424
+ self .resourceImages .append (os .path .basename (file ))
421
425
self .ui .resourceList .addItem (item )
422
426
423
427
def setupWorkspace (self ):
@@ -507,7 +511,7 @@ def addResource():
507
511
if currentProject == None or not currentProject .get ("imageFolder" ):
508
512
return
509
513
510
- files = QFileDialog .getOpenFileNames (self , ' Add Image...' , "%userprofile%\\ " , "Image File (*.png *.jpeg *.jpg)" )
514
+ files = QFileDialog .getOpenFileNames (self , _ ( " Add Image..." ) , "%userprofile%\\ " , "Image File (*.png *.jpeg *.jpg)" )
511
515
512
516
if not files [0 ]:
513
517
return
@@ -531,7 +535,8 @@ def openResourceFolder():
531
535
return
532
536
533
537
if platform .system () == "Windows" :
534
- os .startfile (currentProject ["imageFolder" ])
538
+ path = str .replace (currentProject ["imageFolder" ], "/" , "\\ " )
539
+ os .startfile (path )
535
540
elif platform .system () == "Darwin" :
536
541
subprocess .Popen (["open" , currentProject ["imageFolder" ]])
537
542
else :
@@ -597,6 +602,9 @@ def updateProperty(widgetName, property, value):
597
602
else :
598
603
self .showDialogue ("warning" , "Invalid source name!" )
599
604
return
605
+ elif property == "@Alignment" :
606
+ alignmentList = ["Left" , "Center" , "Right" ]
607
+ currentItem [property ] = str (alignmentList .index (value ))
600
608
elif property == "@Name" :
601
609
if value == widgetName :
602
610
return
@@ -629,6 +637,8 @@ def updateProperty(widgetName, property, value):
629
637
self .ignoreHistoryInvoke = False
630
638
updateProperty (currentSelected .data (0 ,101 ), args [0 ], args [1 ])
631
639
else :
640
+ if not currentItem .get (args [0 ]):
641
+ currentItem [args [0 ]] = ""
632
642
command = CommandModifyProperty (currentItem ["@Name" ], args [0 ], currentItem [args [0 ]], args [1 ], updateProperty , f"Change property { args [0 ]} to { args [1 ]} " )
633
643
self .historySystem .undoStack .push (command )
634
644
self .ignoreHistoryInvoke = False
@@ -647,7 +657,7 @@ def updateProperties(self, item, itemType=None):
647
657
currentProject = self .getCurrentProject ()
648
658
for index , object in enumerate (currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ]):
649
659
if object ["@Name" ] == item :
650
- self .propertiesWidget .loadProperties (self .propertyJson [itemType ], currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ][index ], currentProject ["data" ]["FaceProject" ]["@DeviceType" ])
660
+ self .propertiesWidget .loadProperties (self .propertyJson [itemType ], currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ][index ], self . resourceImages , currentProject ["data" ]["FaceProject" ]["@DeviceType" ])
651
661
break
652
662
else :
653
663
return
@@ -791,7 +801,6 @@ def deleteSelectedWatchfaceWidgets(self):
791
801
self .ignoreHistoryInvoke = False
792
802
else :
793
803
def commandFunc (data ):
794
- projectWidgets = currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ]
795
804
currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ] = data
796
805
currentProject ["canvas" ].loadObjects (currentProject ["data" ], currentProject ["imageFolder" ], self .settings ["Canvas" ]["Antialiasing" ]["value" ])
797
806
self .Explorer .updateExplorer (currentProject ["data" ])
@@ -825,6 +834,9 @@ def pasteWatchfaceWidgets(self):
825
834
826
835
for item in self .clipboard :
827
836
print (item )
837
+ prevData = currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ]
838
+ newData = prevData .copy ()
839
+
828
840
sameNameWidgets = list (filter (lambda widget : widget ["@Name" ] == item ["@Name" ], currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ]))
829
841
count = len (sameNameWidgets )
830
842
@@ -839,10 +851,16 @@ def pasteWatchfaceWidgets(self):
839
851
840
852
modifiedItem ["@Name" ] = f"{ item ['@Name' ]} { name_suffix * index } "
841
853
842
- currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ].append (modifiedItem )
843
- currentProject ["canvas" ].loadObjects (currentProject ["data" ], currentProject ["imageFolder" ], self .settings ["Canvas" ]["Antialiasing" ]["value" ])
844
- self .Explorer .updateExplorer (currentProject ["data" ])
845
- currentProject ["canvas" ].selectObject (modifiedItem ["@Name" ])
854
+ newData .append (modifiedItem )
855
+
856
+ def commandFunc (data ):
857
+ currentProject ["data" ]["FaceProject" ]["Screen" ]["Widget" ] = data
858
+ currentProject ["canvas" ].loadObjects (currentProject ["data" ], currentProject ["imageFolder" ], self .settings ["Canvas" ]["Antialiasing" ]["value" ])
859
+ self .Explorer .updateExplorer (currentProject ["data" ])
860
+ currentProject ["canvas" ].selectObject (modifiedItem ["@Name" ])
861
+
862
+ command = CommandModifyProjectData (prevData , newData , commandFunc , f"Paste objects through ModifyProjectData command" )
863
+ self .historySystem .undoStack .push (command )
846
864
847
865
def zoomCanvas (self , zoom ):
848
866
currentProject = self .getCurrentProject ()
@@ -1233,7 +1251,8 @@ def compileProject(self):
1233
1251
self .compileUi .buttonBox .addButton ("Cancel" , QDialogButtonBox .ButtonRole .RejectRole )
1234
1252
1235
1253
self .compileUi .watchfaceName .setText (currentProject ["data" ]["FaceProject" ]["Screen" ]["@Title" ])
1236
- self .compileUi .thumbnailLocation .setText (currentProject ["data" ]["FaceProject" ]["Screen" ]["@Bitmap" ])
1254
+ self .compileUi .thumbnailLocation .addItems (self .resourceImages )
1255
+ self .compileUi .thumbnailLocation .setCurrentText (currentProject ["data" ]["FaceProject" ]["Screen" ]["@Bitmap" ])
1237
1256
1238
1257
self .compileDialog .setModal (True )
1239
1258
self .compileDialog .show ()
0 commit comments