Skip to content

Commit de1d284

Browse files
add platinum type view toggling
1 parent c1ddee6 commit de1d284

File tree

1 file changed

+74
-31
lines changed

1 file changed

+74
-31
lines changed

src/main.py

+74-31
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,14 @@ def __init__(self, parent):
168168
'image': '',
169169
},
170170
},
171-
'visualization': {
171+
'view': {
172172
'radius': True,
173+
'PlatinumType': {
174+
'platinum': True,
175+
'normal': True,
176+
'note': True,
177+
'none': True,
178+
}
173179
}
174180
}
175181
)
@@ -608,31 +614,27 @@ def updateLayers(self):
608614
if len(objects) < 0:
609615
return
610616

617+
def raise_tag(bottom, top):
618+
objects = self.level_canvas.find_withtag(top)
619+
if len(objects):
620+
self.level_canvas.tag_raise(top, bottom)
621+
return top
622+
return bottom
623+
611624
last_tag = 'level'
612-
for visualization_tag in self.settings.get('visualization', {}):
613-
visualizations = self.level_canvas.find_withtag(visualization_tag)
614-
if len(visualizations):
615-
self.level_canvas.tag_raise(visualization_tag, last_tag)
616-
last_tag = visualization_tag
617-
618-
self.level_canvas.tag_raise('object', last_tag)
619-
620-
background = self.level_canvas.find_withtag('background')
621-
foreground = self.level_canvas.find_withtag('foreground')
622-
if len(background) > 0:
623-
background = 'background'
624-
else:
625-
background = 'level'
626625

627-
if len(foreground) > 0:
628-
foreground = 'foreground'
629-
else:
630-
return
626+
for obj in self.level.objects:
627+
obj_id = f'object-{obj.id}'
628+
last_tag = raise_tag(last_tag, obj_id)
629+
630+
last_tag = raise_tag(last_tag, 'background')
631+
last_tag = raise_tag(last_tag, 'foreground')
631632

632-
self.level_canvas.tag_raise(foreground, background)
633+
for visualization_tag in self.settings.get('view', {}):
634+
last_tag = raise_tag(last_tag, visualization_tag)
633635

634636
if len(self.level_canvas.find_withtag('selection')) > 0:
635-
self.level_canvas.tag_raise('selection', 'object')
637+
raise_tag('object', 'selection')
636638

637639
SELECTION_BORDER_WIDTH = 2
638640

@@ -644,6 +646,14 @@ def updateSelectionRectangle(self, obj : wmwpy.classes.Object = None):
644646
# logging.info('deleted selection')
645647
return
646648

649+
obj_id = f'object-{str(obj.id)}'
650+
651+
platinum_type = obj.properties.get('PlatinumType', obj.defaultProperties.get('PlatinumType', 'none'))
652+
653+
if not self.settings.get(['view.PlatinumType', platinum_type], True):
654+
self.level_canvas.delete('selection')
655+
return
656+
647657
pos = numpy.array(obj.pos)
648658
size = numpy.maximum(numpy.array(obj.size), [1,1])
649659
logging.debug(f'object size: {size}')
@@ -654,9 +664,9 @@ def updateSelectionRectangle(self, obj : wmwpy.classes.Object = None):
654664
logging.debug(f'rectangle size: {(0,0) + tuple(numpy.array(selectionImage.size) - (self.SELECTION_BORDER_WIDTH - 1))}')
655665
selectionImageDraw.rectangle(
656666
(0,0) + tuple(numpy.array(selectionImage.size) - (self.SELECTION_BORDER_WIDTH - 1)),
657-
fill='transparent',
658-
outline='black',
659-
width=self.SELECTION_BORDER_WIDTH,
667+
fill = 'transparent',
668+
outline = 'black',
669+
width = self.SELECTION_BORDER_WIDTH,
660670
)
661671
selectionImage = obj.rotateImage(selectionImage)
662672
self.selectionPhotoImage = ImageTk.PhotoImage(selectionImage)
@@ -679,8 +689,9 @@ def updateSelectionRectangle(self, obj : wmwpy.classes.Object = None):
679689
*pos
680690
)
681691

682-
self.bindObject(id, obj)
683692

693+
self.bindObject(id, obj)
694+
684695
def getObjectPosition(self, pos = (0,0), offset = (0,0)):
685696
pos = numpy.array(pos)
686697
offset = numpy.array(offset)
@@ -710,6 +721,12 @@ def updateObject(self, obj : wmwpy.classes.Object):
710721

711722
id = f'object-{str(obj.id)}'
712723

724+
platinum_type = obj.properties.get('PlatinumType', obj.defaultProperties.get('PlatinumType', 'none'))
725+
726+
if not self.settings.get(['view.PlatinumType', platinum_type], True):
727+
self.level_canvas.delete(id)
728+
return
729+
713730
items = self.level_canvas.find_withtag(id)
714731

715732
logging.debug(f'items: {items}')
@@ -768,7 +785,7 @@ def updateObject(self, obj : wmwpy.classes.Object):
768785
tags = ('object', 'foreground', id)
769786
)
770787

771-
if self.settings.get('visualization.radius', True) and obj.Type is not None:
788+
if self.settings.get('view.radius', True) and obj.Type is not None:
772789
properties = deepcopy(obj.defaultProperties)
773790
properties.update(obj.properties)
774791
for property in properties:
@@ -787,7 +804,7 @@ def updateObject(self, obj : wmwpy.classes.Object):
787804
radius_canvas_size,
788805
fill = '',
789806
outline = 'red',
790-
width = 1,
807+
width = self.OBJECT_MULTIPLIER,
791808
tags = ('radius', property, id)
792809
)
793810

@@ -1760,25 +1777,50 @@ def createMenubar(self):
17601777
self.view_menu: dict[
17611778
typing.Literal[
17621779
'menu',
1780+
'sub',
17631781
'vars',
17641782
],
17651783
tk.Menu | dict[typing.Literal[
1766-
'radius'
1767-
], tk.BooleanVar]
1784+
'radius',
1785+
'PlatinumType',
1786+
], tk.BooleanVar] | dict[str, tk.Menu]
17681787
] = {
17691788
'menu': tk.Menu(self.menubar, tearoff = 0),
1789+
'sub': {
1790+
'PlatinumType': None,
1791+
},
17701792
'vars': {
1771-
'radius': tk.BooleanVar(value = self.settings.get('visualization.radius', True))
1793+
'radius': tk.BooleanVar(value = self.settings.get('view.radius', True)),
1794+
'PlatinumType': {
1795+
'platinum': tk.BooleanVar(value = self.settings.get('view.PlatinumType.platinum', True)),
1796+
'normal': tk.BooleanVar(value = self.settings.get('view.PlatinumType.normal', True)),
1797+
'note': tk.BooleanVar(value = self.settings.get('view.PlatinumType.note', True)),
1798+
'none': tk.BooleanVar(value = self.settings.get('view.PlatinumType.none', True)),
1799+
}
17721800
}
17731801
}
17741802

17751803
self.view_menu['vars']['radius'].trace_add('write', lambda *args : self.updateView('radius', self.view_menu['vars']['radius'].get()))
17761804
self.view_menu['menu'].add_checkbutton(label = 'radius', onvalue = True, offvalue = False, variable = self.view_menu['vars']['radius'])
17771805

1806+
self.view_menu['sub']['PlatinumType'] = tk.Menu(self.view_menu['menu'], tearoff = 0)
1807+
1808+
self.view_menu['vars']['PlatinumType']['platinum'].trace_add('write', lambda *args : self.updateView('PlatinumType.platinum', self.view_menu['vars']['PlatinumType']['platinum'].get()))
1809+
self.view_menu['sub']['PlatinumType'].add_checkbutton(label = 'platinum', onvalue = True, offvalue = False, variable = self.view_menu['vars']['PlatinumType']['platinum'])
1810+
self.view_menu['vars']['PlatinumType']['normal'].trace_add('write', lambda *args : self.updateView('PlatinumType.normal', self.view_menu['vars']['PlatinumType']['normal'].get()))
1811+
self.view_menu['sub']['PlatinumType'].add_checkbutton(label = 'normal', onvalue = True, offvalue = False, variable = self.view_menu['vars']['PlatinumType']['normal'])
1812+
self.view_menu['vars']['PlatinumType']['note'].trace_add('write', lambda *args : self.updateView('PlatinumType.note', self.view_menu['vars']['PlatinumType']['note'].get()))
1813+
self.view_menu['sub']['PlatinumType'].add_checkbutton(label = 'note', onvalue = True, offvalue = False, variable = self.view_menu['vars']['PlatinumType']['note'])
1814+
self.view_menu['vars']['PlatinumType']['none'].trace_add('write', lambda *args : self.updateView('PlatinumType.none', self.view_menu['vars']['PlatinumType']['none'].get()))
1815+
self.view_menu['sub']['PlatinumType'].add_checkbutton(label = 'none', onvalue = True, offvalue = False, variable = self.view_menu['vars']['PlatinumType']['none'])
1816+
1817+
self.view_menu['menu'].add_cascade(label = 'platinum type', menu = self.view_menu['sub']['PlatinumType'])
1818+
1819+
17781820
self.menubar.add_cascade(label = 'View', menu = self.view_menu['menu'])
17791821

17801822
def updateView(self, view: str, state: bool = True):
1781-
self.settings.set(['visualization', view], state)
1823+
self.settings.set(['view', view], state)
17821824
self.updateLevel()
17831825

17841826
def showAbout(self):
@@ -1995,6 +2037,7 @@ def loadLevel(self, xml : str, image : str):
19952037

19962038
if isinstance(self.level, wmwpy.classes.Level):
19972039
self.level_canvas.delete('object')
2040+
self.level_canvas.delete('radius')
19982041
self.level_canvas.delete('selection')
19992042

20002043
self.resetProperties()

0 commit comments

Comments
 (0)