@@ -80,6 +80,7 @@ def make_gui(self):
80
80
self .Bind (wx .EVT_CLOSE , self .OnClose )
81
81
82
82
def make_menubar (self ):
83
+ self .disabled_items = []
83
84
# File menu
84
85
file_menu = wx .Menu ()
85
86
new_item = file_menu .Append (wx .ID_NEW , "&New...\t Ctrl+N" ,
@@ -90,9 +91,11 @@ def make_menubar(self):
90
91
self .Bind (wx .EVT_MENU , self .OnFileOpen , open_item )
91
92
save_item = file_menu .Append (wx .ID_SAVE , "&Save\t Ctrl+S" ,
92
93
"Save the current keymap" )
94
+ self .disabled_items .append (save_item )
93
95
self .Bind (wx .EVT_MENU , self .OnFileSave , save_item )
94
96
saveas_item = file_menu .Append (wx .ID_SAVEAS , "Save &As..." ,
95
97
"Save the current keymap with a new file name" )
98
+ self .disabled_items .append (saveas_item )
96
99
self .Bind (wx .EVT_MENU , self .OnFileSaveAs , saveas_item )
97
100
file_menu .AppendSeparator ()
98
101
newboard_item = file_menu .Append (wx .ID_ANY , "&Define Keyboard..." ,
@@ -105,20 +108,25 @@ def make_menubar(self):
105
108
edit_menu = wx .Menu ()
106
109
copy_item = edit_menu .Append (wx .ID_COPY , "Copy Layer\t Ctrl+C" ,
107
110
"Copy from the selected layer to the clipboard" )
111
+ self .disabled_items .append (copy_item )
108
112
self .Bind (wx .EVT_MENU , self .OnCopy , copy_item )
109
113
paste_item = edit_menu .Append (wx .ID_PASTE , "Paste Layer\t Ctrl+V" ,
110
114
"Paste to the selected layer from the clipboard" )
115
+ self .disabled_items .append (paste_item )
111
116
self .Bind (wx .EVT_MENU , self .OnPaste , paste_item )
112
117
# Build menu
113
118
build_menu = wx .Menu ()
114
119
build_item = build_menu .Append (wx .ID_ANY , "&Build...\t F7" ,
115
120
"Build a loadable file using the current keymap" )
121
+ self .disabled_items .append (build_item )
116
122
self .Bind (wx .EVT_MENU , self .OnBuild , build_item )
117
123
buildas_item = build_menu .Append (wx .ID_ANY , "Build As...\t Shift+F7" ,
118
124
"Build a loadable file with a new file name" )
125
+ self .disabled_items .append (buildas_item )
119
126
self .Bind (wx .EVT_MENU , self .OnBuildAs , buildas_item )
120
127
reprog_item = build_menu .Append (wx .ID_ANY , "Build and &Reprogram...\t F5" ,
121
128
"Build a loadable file and open the reprogramming tool" )
129
+ self .disabled_items .append (reprog_item )
122
130
self .Bind (wx .EVT_MENU , self .OnBuildAndReprogram , reprog_item )
123
131
# Help menu
124
132
help_menu = wx .Menu ()
@@ -135,6 +143,12 @@ def make_menubar(self):
135
143
menubar .Append (build_menu , "&Build" )
136
144
menubar .Append (help_menu , "&Help" )
137
145
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 )
138
152
139
153
def make_statusbar (self ):
140
154
self .statusbar = self .CreateStatusBar (NUM_STATUS_FIELDS )
@@ -173,6 +187,9 @@ def set_title(self):
173
187
self .Title = title
174
188
175
189
def set_status (self ):
190
+ if self .user_data is None :
191
+ return
192
+
176
193
sb = self .GetStatusBar ()
177
194
178
195
text = "" if (self .op_msg is None ) else self .op_msg
@@ -253,8 +270,6 @@ def OnFileOpen(self, event):
253
270
self .load_config ()
254
271
255
272
def OnFileSave (self , event ):
256
- if not self .check_loaded ('save' ):
257
- return
258
273
if self .user_data .path is None :
259
274
return self .OnFileSaveAs (event )
260
275
try :
@@ -269,8 +284,6 @@ def OnFileSave(self, event):
269
284
self .set_status ()
270
285
271
286
def OnFileSaveAs (self , event ):
272
- if not self .check_loaded ('save' ):
273
- return
274
287
wildcard = "EasyAVR keymaps (*.json)|*.json"
275
288
with wx .FileDialog (self , message = "Save" , wildcard = wildcard ,
276
289
style = wx .FD_SAVE | wx .FD_OVERWRITE_PROMPT ) as file_dialog :
@@ -320,37 +333,27 @@ def load_config(self):
320
333
self .main_nb .Fit ()
321
334
self .main_sizer .SetSizeHints (self )
322
335
336
+ self .enable_menus ()
323
337
self .unsaved_changes = False
324
338
self .build_path = None
325
339
self .op_msg = "Keymap loaded successfully."
326
340
self .set_title ()
327
341
self .set_status ()
328
342
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
-
336
343
#
337
344
# Edit methods
338
345
#
339
346
340
347
def OnCopy (self , event ):
341
- if not self .check_loaded ('copy' ):
342
- return
343
348
layer = self .layout_panel .copy_layer ()
344
349
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 )
346
351
self .set_status ()
347
352
348
353
def OnPaste (self , event ):
349
- if not self .check_loaded ('paste' ):
350
- return
351
354
layer = self .layout_panel .paste_layer ()
352
355
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 )
354
357
self .set_status ()
355
358
356
359
#
@@ -392,8 +395,6 @@ def get_build_path(self, override=False):
392
395
self .set_status ()
393
396
394
397
def do_build (self , override = False , reprogram = False ):
395
- if not self .check_loaded ('build' ):
396
- return
397
398
if not self .boot_check ():
398
399
return
399
400
self .get_build_path (override = override )
0 commit comments