Skip to content

Commit 06abf54

Browse files
add sash and some other improvements
1 parent 5912c11 commit 06abf54

File tree

2 files changed

+60
-16
lines changed

2 files changed

+60
-16
lines changed

src/crossplatform.py

+12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import platform
2+
import subprocess
3+
import os
24
import typing
35
from tkinter import ttk
46
import tkinter.font as tkFont
@@ -39,3 +41,13 @@ def shortModifier() -> typing.Literal['Ctrl', 'Cmd']:
3941
return 'Cmd'
4042
else:
4143
return 'Ctrl'
44+
45+
def open_file(filepath : str):
46+
filepath = os.path.abspath(filepath)
47+
48+
if platform.system() == 'Darwin': # macOS
49+
subprocess.call(('open', filepath))
50+
elif platform.system() == 'Windows': # Windows
51+
os.startfile(filepath)
52+
else: # linux variants
53+
subprocess.call(('xdg-open', filepath))

src/main.py

+48-16
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
__links__ = {
2121
'discord' : 'https://discord.gg/eRVfbgwNku',
2222
'releases' : 'https://github.com/wmw-modding/wheres-my-editor/releases/latest',
23+
'bugs' : 'https://github.com/wmw-modding/wheres-my-editor/issues',
2324
}
2425

2526
__min_wmwpy_version__ = "0.5.0-beta"
@@ -149,8 +150,36 @@ def __init__(self, parent):
149150
self.updateSettings()
150151

151152
self.selection_rect = None
152-
153+
154+
self.panedGrip : dict[typing.Literal['image', 'horizontal', 'vertical'], Image.Image | ImageTk.PhotoImage] = {
155+
'image' : Image.open(self.getAsset('assets/images/grip.gif')).convert('RGBA'),
156+
}
157+
158+
self.panedGrip['horizontal'] = ImageTk.PhotoImage(self.panedGrip['image'])
159+
self.panedGrip['vertical'] = ImageTk.PhotoImage(self.panedGrip['image'].rotate(90, expand = True))
160+
153161
self.style = ttk.Style()
162+
# self.style.theme_use('clam')
163+
164+
self.style.element_create("Sash.Horizontal", "image", self.panedGrip['horizontal'], sticky='we')
165+
self.style.layout("Horizontal.TPanedWindow", [('Sash.Horizontal', {})])
166+
167+
self.style.element_create("Sash.Vertical", "image", self.panedGrip['vertical'], sticky='ns')
168+
self.style.layout("Vertical.TPanedWindow", [('Sash.Vertical', {})])
169+
170+
# self.style.layout("Clicked.TPanedWindow", [('Sash.xsash', {})])
171+
172+
self.style.configure('TPanedwindow', opaqueresize=False)
173+
# self.style.configure('Clicked.TPanedwindow', background='blue')
174+
self.style.configure('Sash', sashthickness = 5)
175+
176+
# ttk.PanedWindow(orient='horizontal').cget('orient')
177+
178+
# self.bind_class('TPanedwindow', '<Button-1>', lambda e : print(e.widget.configure(style = 'Clicked.TPanedwindow')))
179+
# self.bind_class('TPanedwindow', '<B1-Motion>', lambda e : e.widget.tk.call(e.widget, "sash", 0, (e.x if str(e.widget["orient"]) == "horizontal" else e.y)))
180+
# self.bind_class('TPanedwindow', '<ButtonRelease-1>', lambda e : e.widget.configure(style = 'TPanedwindow'))
181+
# self.bind_class('Sash.TPanedWindow', '<Leave>', lambda e : e.widget.configure(style = 'TPanedwindow'))
182+
# self.bind_class('Sash.TPanedWindow', '<Enter>', lambda e : e.widget.configure(style = 'Clicked.TPanedwindow'))
154183

155184
self.active = True
156185

@@ -189,11 +218,11 @@ def findIcons(self):
189218
return self.windowIcons
190219

191220
def createWindow(self):
192-
self.seperator = ttk.PanedWindow(orient='horizontal')
193-
self.seperator.pack(fill=tk.BOTH, expand=1)
221+
self.separator = ttk.PanedWindow(orient='horizontal', style = 'Horizontal.TPanedWindow')
222+
self.separator.pack(fill=tk.BOTH, expand=1)
194223

195-
self.side_pane = ttk.PanedWindow(self.seperator, orient='vertical')
196-
self.seperator.add(self.side_pane)
224+
self.side_pane = ttk.PanedWindow(self.separator, orient='vertical', style = "Vertical.TPanedWindow")
225+
self.separator.add(self.side_pane)
197226

198227
side_pane_width = 250
199228
side_pane_height = 300
@@ -203,7 +232,7 @@ def createWindow(self):
203232

204233
self.object_selector : dict[typing.Literal[
205234
'labelFrame',
206-
'treeviewe',
235+
'treeview',
207236
'y_scroll',
208237
'x_scroll',
209238
], tk.Widget | ttk.Treeview] = {
@@ -259,8 +288,8 @@ def createWindow(self):
259288
self.properties['scrollFrame'].pack(fill='both', expand=True)
260289
self.properties['frame'] = self.properties['scrollFrame'].viewPort
261290

262-
self.level_canvas = tk.Canvas(self.seperator, width=90*self.scale, height=120*self.scale)
263-
self.seperator.add(self.level_canvas, weight=1)
291+
self.level_canvas = tk.Canvas(self.separator, width=90*self.scale, height=120*self.scale)
292+
self.separator.add(self.level_canvas, weight=1)
264293

265294
self.level_images = {
266295
'background': self.level_canvas.create_image(
@@ -373,7 +402,7 @@ def disableWindow(self):
373402
self.menubar.entryconfig(item + 1, state = 'disabled')
374403

375404
def bindKeyboardShortcuts(self, *args):
376-
logging.debug('Binding keyboard shotcuts')
405+
logging.debug('Binding keyboard shortcuts')
377406

378407
self.bind(f'<{crossplatform.modifier()}-v>', self.pasteObject)
379408
self.bind(f'<{crossplatform.modifier()}-c>', self.copyObject)
@@ -401,7 +430,7 @@ def bindKeyboardShortcuts(self, *args):
401430
self.bind(f'<Shift-Right>', lambda *args : self.moveObject(amount = (4,0)))
402431

403432
def unbindKeyboardShortcuts(self, *args):
404-
logging.debug('unbinding keyboard shotcuts')
433+
logging.debug('unbinding keyboard shortcuts')
405434

406435
self.unbind(f'<{crossplatform.modifier()}-v>')
407436
self.unbind(f'<{crossplatform.modifier()}-c>')
@@ -484,7 +513,7 @@ def state(self, state : typing.Literal['enabled', 'normal', 'disabled']):
484513
if state == 'enabled':
485514
state = 'normal'
486515
elif state not in ['enabled', 'normal', 'disabled']:
487-
raise ValueError(f'uknown state {state}')
516+
raise ValueError(f'unknown state {state}')
488517

489518
self._state = state
490519

@@ -1017,7 +1046,7 @@ def inputType(type, value):
10171046
for t in type:
10181047
t = t.lower()
10191048
input, var = inputType(t, value[column])
1020-
input.grid(column = column, row=row, sticky='ew')
1049+
input.grid(column = column, row=row, sticky='ew', padx=2)
10211050
if callable(entry_callback):
10221051
var.trace('w', lambda *args, value = var.get, col = column: entry_callback(value(), col))
10231052

@@ -1038,7 +1067,7 @@ def inputType(type, value):
10381067
type = type.lower()
10391068

10401069
input, var = inputType(type, value)
1041-
input.grid(column = 0, row=row, sticky = 'ew', columnspan=2)
1070+
input.grid(column = 0, row=row, sticky = 'ew', columnspan=2, padx=2)
10421071

10431072
if entry_callback:
10441073
var.trace('w', lambda *args: entry_callback(var.get()))
@@ -1082,7 +1111,7 @@ def inputType(type, value):
10821111
'var' : vars,
10831112
}
10841113

1085-
def removePropety(property):
1114+
def removeProperty(property):
10861115
if property in obj.properties:
10871116
del obj.properties[property]
10881117
self.updateObject(obj)
@@ -1188,7 +1217,7 @@ def updatePosition(value, column):
11881217
logging.debug(f'{property = }')
11891218
prefix = ''
11901219
button_text = '-'
1191-
button_callback = lambda *args, prop = property : removePropety(prop)
1220+
button_callback = lambda *args, prop = property : removeProperty(prop)
11921221

11931222
if property in obj.defaultProperties:
11941223
prefix = '*'
@@ -1272,7 +1301,8 @@ def resetProperties(self):
12721301
if not 'panned' in self.properties:
12731302
self.properties['panned'] = ttk.PanedWindow(
12741303
self.properties['frame'],
1275-
orient='horizontal'
1304+
orient='horizontal',
1305+
style = 'Horizontal.TPanedWindow'
12761306
)
12771307
self.properties['panned'].pack(expand=True, fill='both')
12781308

@@ -1464,6 +1494,8 @@ def createMenubar(self):
14641494
self.help_menu.add_command(label = 'Discord', command = lambda *args : webbrowser.open(__links__['discord']))
14651495
self.help_menu.add_command(label = 'About', command = self.showAbout)
14661496
self.help_menu.add_command(label = 'Check for update', command = lambda *args : webbrowser.open(__links__['releases']))
1497+
self.help_menu.add_command(label = 'Bug report', command = lambda *args : webbrowser.open(__links__['bugs']))
1498+
self.help_menu.add_command(label = 'Open log', command = lambda *args : crossplatform.open_file(_log_filename))
14671499

14681500
self.menubar.add_cascade(label = 'Help', menu = self.help_menu)
14691501

0 commit comments

Comments
 (0)