Skip to content

Commit fd013f9

Browse files
committed
Disable menu items that are unavailable before creating a layout
This is a much cleaner approach than the message box that was carried over from the 2.x code. This change also fixes a runtime error in the copy/paste functions.
1 parent a667827 commit fd013f9

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

keymapper/easykeymap/gui/mainframe.py

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ def make_gui(self):
8080
self.Bind(wx.EVT_CLOSE, self.OnClose)
8181

8282
def make_menubar(self):
83+
self.disabled_items = []
8384
# File menu
8485
file_menu = wx.Menu()
8586
new_item = file_menu.Append(wx.ID_NEW, "&New...\tCtrl+N",
@@ -90,9 +91,11 @@ def make_menubar(self):
9091
self.Bind(wx.EVT_MENU, self.OnFileOpen, open_item)
9192
save_item = file_menu.Append(wx.ID_SAVE, "&Save\tCtrl+S",
9293
"Save the current keymap")
94+
self.disabled_items.append(save_item)
9395
self.Bind(wx.EVT_MENU, self.OnFileSave, save_item)
9496
saveas_item = file_menu.Append(wx.ID_SAVEAS, "Save &As...",
9597
"Save the current keymap with a new file name")
98+
self.disabled_items.append(saveas_item)
9699
self.Bind(wx.EVT_MENU, self.OnFileSaveAs, saveas_item)
97100
file_menu.AppendSeparator()
98101
newboard_item = file_menu.Append(wx.ID_ANY, "&Define Keyboard...",
@@ -105,20 +108,25 @@ def make_menubar(self):
105108
edit_menu = wx.Menu()
106109
copy_item = edit_menu.Append(wx.ID_COPY, "Copy Layer\tCtrl+C",
107110
"Copy from the selected layer to the clipboard")
111+
self.disabled_items.append(copy_item)
108112
self.Bind(wx.EVT_MENU, self.OnCopy, copy_item)
109113
paste_item = edit_menu.Append(wx.ID_PASTE, "Paste Layer\tCtrl+V",
110114
"Paste to the selected layer from the clipboard")
115+
self.disabled_items.append(paste_item)
111116
self.Bind(wx.EVT_MENU, self.OnPaste, paste_item)
112117
# Build menu
113118
build_menu = wx.Menu()
114119
build_item = build_menu.Append(wx.ID_ANY, "&Build...\tF7",
115120
"Build a loadable file using the current keymap")
121+
self.disabled_items.append(build_item)
116122
self.Bind(wx.EVT_MENU, self.OnBuild, build_item)
117123
buildas_item = build_menu.Append(wx.ID_ANY, "Build As...\tShift+F7",
118124
"Build a loadable file with a new file name")
125+
self.disabled_items.append(buildas_item)
119126
self.Bind(wx.EVT_MENU, self.OnBuildAs, buildas_item)
120127
reprog_item = build_menu.Append(wx.ID_ANY, "Build and &Reprogram...\tF5",
121128
"Build a loadable file and open the reprogramming tool")
129+
self.disabled_items.append(reprog_item)
122130
self.Bind(wx.EVT_MENU, self.OnBuildAndReprogram, reprog_item)
123131
# Help menu
124132
help_menu = wx.Menu()
@@ -135,6 +143,12 @@ def make_menubar(self):
135143
menubar.Append(build_menu, "&Build")
136144
menubar.Append(help_menu, "&Help")
137145
self.SetMenuBar(menubar)
146+
# Disable menu items that can't be used until a file is loaded
147+
self.enable_menus(False)
148+
149+
def enable_menus(self, enable=True):
150+
for menu_item in self.disabled_items:
151+
menu_item.Enable(enable=enable)
138152

139153
def make_statusbar(self):
140154
self.statusbar = self.CreateStatusBar(NUM_STATUS_FIELDS)
@@ -173,6 +187,9 @@ def set_title(self):
173187
self.Title = title
174188

175189
def set_status(self):
190+
if self.user_data is None:
191+
return
192+
176193
sb = self.GetStatusBar()
177194

178195
text = "" if (self.op_msg is None) else self.op_msg
@@ -253,8 +270,6 @@ def OnFileOpen(self, event):
253270
self.load_config()
254271

255272
def OnFileSave(self, event):
256-
if not self.check_loaded('save'):
257-
return
258273
if self.user_data.path is None:
259274
return self.OnFileSaveAs(event)
260275
try:
@@ -269,8 +284,6 @@ def OnFileSave(self, event):
269284
self.set_status()
270285

271286
def OnFileSaveAs(self, event):
272-
if not self.check_loaded('save'):
273-
return
274287
wildcard = "EasyAVR keymaps (*.json)|*.json"
275288
with wx.FileDialog(self, message="Save", wildcard=wildcard,
276289
style=wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) as file_dialog:
@@ -320,37 +333,27 @@ def load_config(self):
320333
self.main_nb.Fit()
321334
self.main_sizer.SetSizeHints(self)
322335

336+
self.enable_menus()
323337
self.unsaved_changes = False
324338
self.build_path = None
325339
self.op_msg = "Keymap loaded successfully."
326340
self.set_title()
327341
self.set_status()
328342

329-
def check_loaded(self, op='continue'):
330-
if self.user_data is None:
331-
wx.MessageBox("Create a keymap first!", caption="Can't {0}".format(op),
332-
style=wx.ICON_EXCLAMATION|wx.OK|wx.CENTRE, parent=self)
333-
return False
334-
return True
335-
336343
#
337344
# Edit methods
338345
#
339346

340347
def OnCopy(self, event):
341-
if not self.check_loaded('copy'):
342-
return
343348
layer = self.layout_panel.copy_layer()
344349
if layer is not None:
345-
self.op_msg = "Copied layer {1} to the clipboard".format(layer)
350+
self.op_msg = "Copied layer {0} to the clipboard".format(layer)
346351
self.set_status()
347352

348353
def OnPaste(self, event):
349-
if not self.check_loaded('paste'):
350-
return
351354
layer = self.layout_panel.paste_layer()
352355
if layer is not None:
353-
self.op_msg = "Pasted layer {1} from the clipboard".format(layer)
356+
self.op_msg = "Pasted layer {0} from the clipboard".format(layer)
354357
self.set_status()
355358

356359
#
@@ -392,8 +395,6 @@ def get_build_path(self, override=False):
392395
self.set_status()
393396

394397
def do_build(self, override=False, reprogram=False):
395-
if not self.check_loaded('build'):
396-
return
397398
if not self.boot_check():
398399
return
399400
self.get_build_path(override=override)

0 commit comments

Comments
 (0)