89
95
add_button(self, self.box1, self.button_text['snapshot'], None,
90
96
self.event_radio_button_select, None, None)
98
self.cp = wx.CollapsiblePane(self, label="Advanced Options",
99
style=wx.CP_DEFAULT_STYLE |
101
self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.event_on_pane_changed,
103
self.make_pane_content(self.cp.GetPane())
104
self.box2 = wx.BoxSizer(wx.VERTICAL)
105
self.box2.Add(self.cp)
92
107
self.sizer.Add(header)
93
108
self.sizer.Add(self.box1, 0, wx.ALIGN_LEFT | wx.ALL, 5)
109
self.sizer.Add(self.box2, 0, wx.ALIGN_LEFT | wx.ALL, 5)
94
110
self.SetSizerAndFit(self.sizer)
95
111
self.sizer.Fit(self)
96
112
self.Move((50, 50))
114
def make_pane_content(self, pane):
115
self.adv_box = wx.BoxSizer(wx.VERTICAL)
117
message = ("You have the option of selecting from several OS images "
119
header = wx.StaticText(pane, -1, message)
120
header.Wrap(self.width - 10) # -10 because boarder below is 5 px wide
121
self.adv_box.Add(header)
122
self.grid1 = wx.FlexGridSizer(0, 2, 0, 0)
123
self.grid2 = wx.FlexGridSizer(0, 2, 0, 0)
125
# TODO: Put in table with explainations!
126
# TODO: Needs to be different (OS name only) if selecting snapshot!
129
for key, value in self.settings['choice']['platform'].items():
130
platforms.append(key)
132
style = wx.CB_DROPDOWN | wx.CB_READONLY
133
self.settings['platform'] = None
135
self.cb_release = wx.ComboBox(pane, style=style)
136
self.Bind(wx.EVT_COMBOBOX, self.event_cb_release, self.cb_release)
138
self.cb_build = wx.ComboBox(pane, style=style)
139
self.Bind(wx.EVT_COMBOBOX, self.event_combo_box_build, self.cb_build)
141
self.cb_image = wx.ComboBox(pane, style=style)
142
self.Bind(wx.EVT_COMBOBOX, self.event_combo_box_os, self.cb_image)
144
self.help_text = wx.StaticText(pane, -1, "")
146
alignment = wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT | wx.TOP
147
align_text = alignment | wx.ALIGN_CENTER_VERTICAL
148
self.grid1.Add(self.cb_image, 0, alignment, 5)
149
self.grid1.Add(wx.StaticText(pane, -1, "The OS to run"),
152
self.grid2.Add(self.cb_release, 0, alignment, 5)
153
self.grid2.Add(wx.StaticText(pane, -1, "Available Linaro releases"),
156
self.grid2.Add(self.cb_build, 0, alignment, 5)
157
self.grid2.Add(wx.StaticText(pane, -1, "Available milestones"),
160
self.adv_box.Add(self.grid1, 0, alignment, 0)
161
self.adv_box.Add(self.grid2, 0, alignment, 0)
162
self.update_visibility()
163
self.adv_box.Add(self.help_text, 0, alignment, 5)
165
pane.SetSizer(self.adv_box)
166
self.adv_box.Fit(pane)
168
def update_visibility(self):
169
if self.settings['release_or_snapshot'] == "snapshot":
170
self.adv_box.Hide(self.grid2, True)
172
self.adv_box.Show(self.grid2, True)
177
def update_next_active(self):
178
if self.build_available and self.os_selected:
179
self.wizard.FindWindowById(wx.ID_FORWARD).Enable()
181
self.wizard.FindWindowById(wx.ID_FORWARD).Disable()
183
def update_build_box(self):
184
"""Depending on what hardware has been chosen, the OS list may be
185
restricted. Filter out anything that is unavailable."""
186
self.cb_build.Clear()
188
if self.settings['release_or_snapshot'] == "snapshot":
189
# This combo box is not used by snapshot builds
190
self.cb_build.SetValue("Not applicable")
191
self.build_available = True
194
builds = self.db.get_builds(self.settings['platform'])
195
self.cb_build.SetValue("No build available")
198
if(self.db.hardware_is_available_for_platform_build(
199
self.settings['compatable_hwpacks'],
200
self.settings['platform'],
202
and self.db.build_is_available_for_platform_image(
204
self.settings['platform'],
205
self.settings['image'],
208
self.cb_build.Append(build)
209
self.cb_build.SetValue(build)
210
self.settings['release_build'] = build
212
available_hwpacks = (
213
self.db.get_available_hwpacks_for_hardware_build_plaform(
214
self.settings['compatable_hwpacks'],
215
self.settings['platform'],
216
self.settings['release_build']))
218
if len(available_hwpacks):
219
self.settings['hwpack'] = available_hwpacks[0]
220
self.build_available = True
222
self.build_available = False
224
self.update_next_active()
226
def update_release_and_build_boxes(self):
227
"""Depending on what hardware has been chosen, some builds may be
229
self.cb_release.Clear()
231
if self.settings['release_or_snapshot'] == "snapshot":
232
# This combo box is not used by snapshot builds
233
self.cb_release.SetValue("Not applicable")
236
if not self.os_selected:
237
self.cb_release.SetValue("-")
238
self.update_build_box()
239
self.update_next_active()
242
default_release = None
243
for platform, value in self.settings['choice']['platform'].items():
244
if(self.db.hardware_is_available_for_platform(
245
self.settings['compatable_hwpacks'],
247
and len(self.db.execute_return_list(
248
'select * from release_binaries '
249
'where platform == ? and image == ?',
250
(platform, self.settings['image'])))):
252
if platform in self.settings['UI']['translate']:
253
platform = self.settings['UI']['translate'][platform]
255
self.cb_release.Append(platform, platform.upper())
256
if not default_release or default_release < platform:
257
default_release = platform
259
if default_release in self.settings['UI']['reverse-translate']:
260
default = self.settings['UI']['reverse-translate'][default_release]
262
default = default_release
264
if not self.settings['platform']:
265
# No platform has been chose, go with the default
266
self.settings['platform'] = default
267
self.cb_release.SetValue(default_release)
269
# Don't change the value of platform if it is set.
270
pf = self.settings['UI']['translate'][self.settings['platform']]
271
self.cb_release.SetValue(pf)
273
self.update_build_box()
274
self.update_next_active()
276
def get_human_os_name(self, item):
277
"""Given an OS name from the database, return a human name (either
278
translated from the YAML settings, or just prettified) and if it is a
281
item = re.sub("linaro-", "", item) # Remove any linaro- decoration
283
if item in self.settings['UI']['descriptions']:
284
human_name = self.settings['UI']['descriptions'][item]
286
# Make human_name look nicer...
287
human_name = string.capwords(item)
289
leb_search = re.search("^LEB:\s*(.*)$", human_name)
292
return leb_search.group(1), True
294
return human_name, False
296
def fill_os_list(self):
297
"""Filter the list of OS's from the config file based on the users
298
preferences so all choices in the list are valid (i.e. their hardware
299
is supported for the build they have chosen)."""
301
# select unique image from snapshot_binaries/release_binaries to
304
if self.settings['release_or_snapshot'] == "release":
305
os_list = self.db.get_os_list_from('release_binaries')
307
os_list = self.db.get_os_list_from('snapshot_binaries')
309
self.cb_image.Clear()
313
current_image_setting_valid = False
315
for state in ["LEB", "other"]:
318
# Old is a directory that sometimes hangs around,
319
# but isn't one we want to display
322
# Save the original, untouched image name for use later.
323
# We give it a more human name for display
325
item = re.sub("linaro-", "", item)
327
os_hardware_combo_available = (
328
self.db.image_hardware_combo_available(
329
self.settings['release_or_snapshot'],
331
self.settings['compatable_hwpacks']))
333
if os_hardware_combo_available:
334
human_name, is_LEB = self.get_human_os_name(item)
336
if item == self.settings['image']:
337
current_image_setting_valid = True
339
if state == "LEB" and is_LEB:
341
if printed_tag != state:
342
self.cb_image.Append(
343
"- Linaro Supported Releases -")
346
self.cb_image.Append(human_name, original)
348
if self.settings['image'] == None:
349
self.settings['image'] = original
350
self.os_selected = True
352
elif state != "LEB" and not is_LEB:
353
if printed_tag != state:
354
self.cb_image.Append(
355
"- Community Supported Releases -")
358
self.cb_image.Append(human_name, original)
362
if( self.settings['image'] != None
363
and current_image_setting_valid == False):
364
# If we have an image setting, but it doesn't match the OS list, we
365
# have switched OS list. It may be that adding/removing "linaro-"
366
# from the name will get a match.
368
if re.search("linaro-", self.settings['image']):
369
test_name = re.sub("linaro-", "", self.settings['image'])
371
test_name = "linaro-" + self.settings['image']
373
if test_name in os_list:
374
# Success! We have translated the name and can retain the
376
self.settings['image'] = test_name
377
current_image_setting_valid = True
378
self.os_selected = True
380
if( self.settings['image'] == None
381
or current_image_setting_valid == False):
382
# This should only get hit if there are no LEBs available
383
self.settings['image'] = last_name
384
self.os_selected = True
386
assert self.settings['image']
388
# Make sure the visible selected value matches the saved setting
389
self.cb_image.SetValue(
390
self.get_human_os_name(self.settings['image'])[0])
393
if self.settings['release_or_snapshot'] == "release":
394
return self.pages['lmc_settings']
396
return self.pages['select_snapshot']
399
return self.pages['hardware_details']
98
402
def event_radio_button_select(self, event):
403
# The radio button can be release or snapshot
99
404
self.radio_selected = event.GetEventObject().GetLabel()
100
# The radio button can be release, snapshot or "latest snapshot"
101
if(self.radio_selected == self.button_text['release']):
406
if self.radio_selected == self.button_text['release']:
102
407
self.settings['release_or_snapshot'] = "release"
104
409
self.settings['release_or_snapshot'] = "snapshot"
411
self.update_release_and_build_boxes()
412
self.update_visibility()
413
self.update_next_active()
415
def event_on_pane_changed(self, event):
417
self.update_release_and_build_boxes()
418
self.update_visibility()
420
self.update_next_active()
422
def event_cb_release(self, evt):
423
str = evt.GetString().encode('ascii').lower()
424
if str in self.settings['UI']['reverse-translate']:
425
str = self.settings['UI']['reverse-translate'][str]
426
self.settings['platform'] = str
428
self.update_build_box()
430
def event_combo_box_build(self, evt):
431
self.settings['release_build'] = evt.GetString().encode('ascii')
433
def event_combo_box_os(self, evt):
434
self.settings['image'] = self.cb_image.GetClientData(
437
if self.settings['image']: # Is None for items that aren't an OS
438
self.os_selected = True
439
image = re.sub("linaro-", "", self.settings['image'])
441
if image + "::long" in self.settings['UI']['descriptions']:
442
self.help_text.SetLabel(self.settings['UI']
446
self.help_text.SetLabel("")
448
else: # Have selected help text
449
self.os_selected = False
450
self.help_text.SetLabel("Please select an operating system to run "
451
"on your chosen hardware.")
453
self.help_text.Wrap(self.width - 10)
454
self.update_release_and_build_boxes()
455
self.update_next_active()
456
#--- END event(s) ---
107
459
class AboutMyHardwarePage(wiz.PyWizardPage):
108
460
"""Ask the user about their hardware. This only asks about the board, not
229
581
def GetNext(self):
232
class SelectStableRelease(wiz.WizardPageSimple):
233
"""Ask the user which Linaro release they would like to run."""
234
def __init__(self, parent, config, db, width):
235
wiz.WizardPageSimple.__init__(self, parent)
236
self.settings = config.settings
238
self.sizer = wx.BoxSizer(wx.VERTICAL)
241
header = wx.StaticText(self, label="Please select the stable Linaro "
242
"release you would like to use")
244
header.Wrap(width - 10) # -10 because boarder below is 5 pixels wide
246
self.sizer.Add(header)
247
self.box1 = wx.BoxSizer(wx.VERTICAL)
250
for key, value in self.settings['choice']['platform'].items():
251
platforms.append(key)
253
default_release = self.settings['UI']['translate'][platforms[-1]]
254
self.cb_release = wx.ComboBox(self,
255
value=default_release,
256
style=wx.CB_DROPDOWN | wx.CB_READONLY)
257
self.Bind(wx.EVT_COMBOBOX,
258
self.event_combo_box_release,
261
if(default_release in self.settings['UI']['translate']):
262
default_release = self.settings['UI']['translate'][default_release]
263
self.settings['platform'] = (
264
self.settings['UI']['reverse-translate'][default_release])
266
for item in platforms:
267
if(item in self.settings['UI']['translate']):
268
new_item = self.settings['UI']['translate'][item]
271
self.cb_release.Append(item, item.upper())
273
self.cb_build = wx.ComboBox(self,
274
style=wx.CB_DROPDOWN | wx.CB_READONLY)
275
self.Bind(wx.EVT_COMBOBOX, self.event_combo_box_build, self.cb_build)
277
self.box1.Add(self.cb_release, 0,
278
wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT | wx.TOP, 5)
279
self.box1.Add(self.cb_build, 0,
280
wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT | wx.TOP, 5)
281
self.sizer.Add(self.box1, 0, wx.ALIGN_LEFT | wx.ALL, 5)
282
self.SetSizerAndFit(self.sizer)
286
def update_build_box(self):
287
"""Depending on what hardware has been chosen, the OS list may be
288
restricted. Filter out anything that is unavailable."""
289
self.cb_build.Clear()
291
builds = self.db.get_builds(self.settings['platform'])
292
self.cb_build.SetValue("No build available")
295
if(self.db.hardware_is_available_for_platform_build(
296
self.settings['compatable_hwpacks'],
297
self.settings['platform'],
299
and self.db.build_is_available_for_platform_image(
301
self.settings['platform'],
302
self.settings['image'],
305
self.cb_build.Append(build)
306
self.cb_build.SetValue(build)
307
self.settings['release_build'] = build
309
available_hwpacks = (
310
self.db.get_available_hwpacks_for_hardware_build_plaform(
311
self.settings['compatable_hwpacks'],
312
self.settings['platform'],
313
self.settings['release_build']))
315
if len(available_hwpacks):
316
self.settings['hwpack'] = available_hwpacks[0]
317
self.wizard.FindWindowById(wx.ID_FORWARD).Enable()
319
self.wizard.FindWindowById(wx.ID_FORWARD).Disable()
321
def update_release_and_build_boxes(self):
322
"""Depending on what hardware has been chosen, some builds may be
324
self.cb_release.Clear()
326
default_release = None
327
for platform, value in self.settings['choice']['platform'].items():
328
if(self.db.hardware_is_available_for_platform(
329
self.settings['compatable_hwpacks'],
331
and len(self.db.execute_return_list(
332
'select * from release_binaries '
333
'where platform == ? and image == ?',
334
(platform, self.settings['image'])))):
336
if(platform in self.settings['UI']['translate']):
337
platform = self.settings['UI']['translate'][platform]
339
self.cb_release.Append(platform, platform.upper())
340
if not default_release or default_release < platform:
341
default_release = platform
343
self.settings['platform'] = (
344
self.settings['UI']['reverse-translate'][default_release])
345
self.cb_release.SetValue(default_release)
346
self.update_build_box()
349
def event_combo_box_release(self, evt):
350
str = evt.GetString().encode('ascii').lower()
351
if(str in self.settings['UI']['reverse-translate']):
352
str = self.settings['UI']['reverse-translate'][str]
353
self.settings['platform'] = str
355
self.update_build_box()
357
def event_combo_box_build(self, evt):
358
self.settings['release_build'] = evt.GetString().encode('ascii')
359
#--- END event(s) ---
362
584
class SelectSnapshot(wiz.WizardPageSimple):
363
585
"""Present the user with a calendar widget and a list of builds available
364
586
on the selected date so they can chose a snapshot. Filter out days when
518
740
#--- END event(s) ---
521
class SelectOS(wiz.WizardPageSimple):
522
"""Ask the user which OS they would like to run. Filter out any choices
523
that are unavailable due to previous choices."""
524
def __init__(self, parent, config, db, width):
525
wiz.WizardPageSimple.__init__(self, parent)
526
self.settings = config.settings
530
self.sizer = wx.BoxSizer(wx.VERTICAL)
531
self.settings['image'] = None
533
header = wx.StaticText(self, label="Please select the operating "
534
"system you would like to run on "
536
header.Wrap(width - 10) # -10 because boarder below is 5 pixels wide
538
self.box1 = wx.BoxSizer(wx.VERTICAL)
539
self.sizer.Add(header)
541
self.cb_image = wx.ComboBox(self,
542
style=wx.CB_DROPDOWN | wx.CB_READONLY)
543
self.Bind(wx.EVT_COMBOBOX, self.event_combo_box_os, self.cb_image)
546
# -- Combo boxes for hardware and image selection --
547
self.box1.Add(self.cb_image, 0, wx.ALIGN_LEFT | wx.ALL, 5)
549
self.sizer.Add(self.box1, 0, wx.ALIGN_LEFT | wx.ALL, 5)
551
self.help_text = wx.StaticText(self)
552
self.sizer.Add(self.help_text, 1, wx.EXPAND, 5)
554
self.SetSizer(self.sizer)
558
def get_human_os_name(self, item):
559
"""Given an OS name from the database, return a human name (either
560
translated from the YAML settings, or just prettified) and if it is a
563
item = re.sub("linaro-", "", item) # Remove any linaro- decoration
567
if item in self.settings['UI']['descriptions']:
568
human_name = self.settings['UI']['descriptions'][item]
570
# Make human_name look nicer...
571
human_name = string.capwords(item)
573
leb_search = re.search("^LEB:\s*(.*)$", human_name)
576
return leb_search.group(1), True
578
return human_name, False
580
def fill_os_list(self):
581
"""Filter the list of OS's from the config file based on the users
582
preferences so all choices in the list are valid (i.e. their hardware
583
is supported for the build they have chosen)."""
585
# select unique image from snapshot_binaries/release_binaries to
588
if self.settings['release_or_snapshot'] == "release":
589
os_list = self.db.get_os_list_from('release_binaries')
591
os_list = self.db.get_os_list_from('snapshot_binaries')
593
self.cb_image.Clear()
597
current_image_setting_valid = False
599
for state in ["LEB", "other"]:
602
# Old is a directory that sometimes hangs around,
603
# but isn't one we want to display
606
# Save the original, untouched image name for use later.
607
# We give it a more human name for display
609
item = re.sub("linaro-", "", item)
611
os_hardware_combo_available = (
612
self.db.image_hardware_combo_available(
613
self.settings['release_or_snapshot'],
615
self.settings['compatable_hwpacks']))
617
if os_hardware_combo_available:
618
human_name, is_LEB = self.get_human_os_name(item)
620
if item == self.settings['image']:
621
current_image_setting_valid = True
623
if state == "LEB" and is_LEB:
625
if printed_tag != state:
626
self.cb_image.Append(
627
"- Linaro Supported Releases -")
630
self.cb_image.Append(human_name, original)
632
if self.settings['image'] == None:
633
self.settings['image'] = original
635
elif state != "LEB" and not is_LEB:
636
if printed_tag != state:
637
self.cb_image.Append(
638
"- Community Supported Releases -")
641
self.cb_image.Append(human_name, original)
645
if( self.settings['image'] != None
646
and current_image_setting_valid == False):
647
# If we have an image setting, but it doesn't match the OS list, we
648
# have switched OS list. It may be that adding/removing "linaro-"
649
# from the name will get a match.
651
if re.search("linaro-", self.settings['image']):
652
test_name = re.sub("linaro-", "", self.settings['image'])
654
test_name = "linaro-" + self.settings['image']
656
if test_name in os_list:
657
# Success! We have translated the name and can retain the
659
self.settings['image'] = test_name
660
current_image_setting_valid = True
662
if( self.settings['image'] == None
663
or current_image_setting_valid == False):
664
# This should only get hit if there are no LEBs available
665
self.settings['image'] = last_name
667
assert self.settings['image']
669
# Make sure the visible selected value matches the saved setting
670
self.cb_image.SetValue(
671
self.get_human_os_name(self.settings['image'])[0])
674
def event_combo_box_os(self, evt):
675
self.settings['image'] = self.cb_image.GetClientData(
678
if self.settings['image']: # Is None for items that aren't an OS
679
self.wizard.FindWindowById(wx.ID_FORWARD).Enable()
680
image = re.sub("linaro-", "", self.settings['image'])
682
if image + "::long" in self.settings['UI']['descriptions']:
683
self.help_text.SetLabel(self.settings['UI']
687
self.help_text.SetLabel("")
689
else: # Have selected help text
690
self.wizard.FindWindowById(wx.ID_FORWARD).Disable()
691
self.help_text.SetLabel("Please select an operating system to run "
692
"on your chosen hardware.")
694
self.help_text.Wrap(self.width - 10)
695
#--- END event(s) ---
698
743
class LMC_settings(wiz.WizardPageSimple):
699
744
"""Present the user with, intially, the choice of writing the file system
700
745
they are going to have created to a file, or directly to a device. Ask
1472
1520
# If going from a select snapshot or select release page, record
1473
1521
# which we were on so the back button of the next page works
1474
if(self.config.settings['release_or_snapshot'] == "release"):
1475
self.pages['select_os'].SetNext(self.pages['select_release'])
1476
self.pages['select_release'].SetPrev(self.pages['select_os'])
1478
self.pages['select_release'].SetNext(self.pages['lmc_settings'])
1479
self.pages['lmc_settings'].SetPrev(self.pages['select_release'])
1522
if self.config.settings['release_or_snapshot'] == "release":
1523
lmc_settings_pg.SetPrev(rel_or_snap_pg)
1481
self.pages['select_os'].SetNext(self.pages['select_snapshot'])
1482
self.pages['select_snapshot'].SetPrev(self.pages['select_os'])
1484
if(page == self.pages['select_os']):
1485
self.pages['select_snapshot'].fill_build_combo_box_for_date(
1525
select_snap_pg.SetNext(lmc_settings_pg)
1527
lmc_settings_pg.SetPrev(select_snap_pg)
1528
select_snap_pg.SetPrev(rel_or_snap_pg)
1530
if page == rel_or_snap_pg:
1531
select_snap_pg.fill_build_combo_box_for_date(
1486
1532
self.config.settings['build_date'])
1488
self.pages['select_snapshot'].SetNext(self.pages['lmc_settings'])
1489
self.pages['lmc_settings'].SetPrev(self.pages['select_snapshot'])
1491
if page == self.pages['hardware_details']:
1492
self.pages['select_os'].fill_os_list()
1494
# If about to move into the release selection, make sure the list
1495
# is populated only with releases that are valid with our current
1497
if( page == self.pages['select_os']
1498
and self.config.settings['release_or_snapshot'] == "release"):
1499
self.pages['select_release'].update_release_and_build_boxes()
1501
if page == self.pages['select_snapshot']:
1534
if page == hw_details_pg:
1535
rel_or_snap_pg.fill_os_list()
1536
rel_or_snap_pg.update_release_and_build_boxes()
1538
if page == select_snap_pg:
1502
1539
# Execute when exiting page
1503
self.pages['select_snapshot'].update_platform()
1505
if( page == self.pages['select_snapshot']
1506
or page == self.pages['select_release']):
1507
self.pages['lmc_settings'].on_activate()
1509
if page == self.pages['lmc_settings']:
1540
select_snap_pg.update_platform()
1542
if( page == select_snap_pg
1543
or (page == rel_or_snap_pg and
1544
self.config.settings['release_or_snapshot'] == "release")):
1545
lmc_settings_pg.on_activate()
1547
if page == lmc_settings_pg:
1510
1548
# Forward stays disabled until LMC has finished running
1511
1549
self.wizard.FindWindowById(wx.ID_FORWARD).Disable()
1512
1550
self.pages['run_lmc'].on_activate()