diff options
author | Liming An <limingx.l.an@intel.com> | 2012-06-04 18:52:13 +0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-06-08 12:13:15 +0100 |
commit | e91f1e28bc1742f010225c49410e49b1257c15c7 (patch) | |
tree | cdeaf695ae78a191e8685ac2c8ac530f3d827be8 /bitbake/lib/bb/ui/crumbs/imagedetailspage.py | |
parent | c0b92702d367466641f88371fbcbc0fdebdbbb96 (diff) | |
download | poky-e91f1e28bc1742f010225c49410e49b1257c15c7.tar.gz |
Hob: Change 'run image' work flow and image detail screen as ui design
Added the qemu_image_kernel selection view box to image detail screen GUI, and
changed the 'run image' button clicked work flow.
[YOCTO #2155]
(Bitbake rev: d548eb8a03cfba5c64c018898972bc0a0bdb280c)
Signed-off-by: Liming An <limingx.l.an@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/bb/ui/crumbs/imagedetailspage.py')
-rwxr-xr-x | bitbake/lib/bb/ui/crumbs/imagedetailspage.py | 201 |
1 files changed, 157 insertions, 44 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py index 1ab80f8277..ba0ad7ed47 100755 --- a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py +++ b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py | |||
@@ -26,7 +26,7 @@ from bb.ui.crumbs.hobcolor import HobColors | |||
26 | from bb.ui.crumbs.hobwidget import hic, HobViewTable, HobAltButton, HobButton | 26 | from bb.ui.crumbs.hobwidget import hic, HobViewTable, HobAltButton, HobButton |
27 | from bb.ui.crumbs.hobpages import HobPage | 27 | from bb.ui.crumbs.hobpages import HobPage |
28 | import subprocess | 28 | import subprocess |
29 | 29 | from bb.ui.crumbs.hig import CrumbsDialog | |
30 | # | 30 | # |
31 | # ImageDetailsPage | 31 | # ImageDetailsPage |
32 | # | 32 | # |
@@ -101,9 +101,23 @@ class ImageDetailsPage (HobPage): | |||
101 | return | 101 | return |
102 | self.line_widgets[variable].set_markup(self.format_line(variable, value)) | 102 | self.line_widgets[variable].set_markup(self.format_line(variable, value)) |
103 | 103 | ||
104 | def wrap_line(self, inputs): | ||
105 | # wrap the long text of inputs | ||
106 | wrap_width_chars = 75 | ||
107 | outputs = "" | ||
108 | tmps = inputs | ||
109 | less_chars = len(inputs) | ||
110 | while (less_chars - wrap_width_chars) > 0: | ||
111 | less_chars -= wrap_width_chars | ||
112 | outputs += tmps[:wrap_width_chars] + "\n " | ||
113 | tmps = inputs[less_chars:] | ||
114 | outputs += tmps | ||
115 | return outputs | ||
116 | |||
104 | def format_line(self, variable, value): | 117 | def format_line(self, variable, value): |
118 | wraped_value = self.wrap_line(value) | ||
105 | markup = "<span weight=\'bold\'>%s</span>" % variable | 119 | markup = "<span weight=\'bold\'>%s</span>" % variable |
106 | markup += "<span weight=\'normal\' foreground=\'#1c1c1c\' font_desc=\'14px\'>%s</span>" % value | 120 | markup += "<span weight=\'normal\' foreground=\'#1c1c1c\' font_desc=\'14px\'>%s</span>" % wraped_value |
107 | return markup | 121 | return markup |
108 | 122 | ||
109 | def text2label(self, variable, value): | 123 | def text2label(self, variable, value): |
@@ -117,7 +131,7 @@ class ImageDetailsPage (HobPage): | |||
117 | def __init__(self, builder): | 131 | def __init__(self, builder): |
118 | super(ImageDetailsPage, self).__init__(builder, "Image details") | 132 | super(ImageDetailsPage, self).__init__(builder, "Image details") |
119 | 133 | ||
120 | self.image_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) | 134 | self.image_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN, gobject.TYPE_STRING) |
121 | self.button_ids = {} | 135 | self.button_ids = {} |
122 | self.details_bottom_buttons = gtk.HBox(False, 6) | 136 | self.details_bottom_buttons = gtk.HBox(False, 6) |
123 | self.create_visual_elements() | 137 | self.create_visual_elements() |
@@ -162,10 +176,10 @@ class ImageDetailsPage (HobPage): | |||
162 | self.details_bottom_buttons.remove(child) | 176 | self.details_bottom_buttons.remove(child) |
163 | 177 | ||
164 | def show_page(self, step): | 178 | def show_page(self, step): |
165 | build_succeeded = (step == self.builder.IMAGE_GENERATED) | 179 | self.build_succeeded = (step == self.builder.IMAGE_GENERATED) |
166 | image_addr = self.builder.parameters.image_addr | 180 | image_addr = self.builder.parameters.image_addr |
167 | image_names = self.builder.parameters.image_names | 181 | image_names = self.builder.parameters.image_names |
168 | if build_succeeded: | 182 | if self.build_succeeded: |
169 | machine = self.builder.configuration.curr_mach | 183 | machine = self.builder.configuration.curr_mach |
170 | base_image = self.builder.recipe_model.get_selected_image() | 184 | base_image = self.builder.recipe_model.get_selected_image() |
171 | layers = self.builder.configuration.layers | 185 | layers = self.builder.configuration.layers |
@@ -183,7 +197,7 @@ class ImageDetailsPage (HobPage): | |||
183 | self.pack_start(self.group_align, expand=True, fill=True) | 197 | self.pack_start(self.group_align, expand=True, fill=True) |
184 | 198 | ||
185 | self.build_result = None | 199 | self.build_result = None |
186 | if build_succeeded: | 200 | if self.build_succeeded: |
187 | # building is the previous step | 201 | # building is the previous step |
188 | icon = gtk.Image() | 202 | icon = gtk.Image() |
189 | pixmap_path = hic.ICON_INDI_CONFIRM_FILE | 203 | pixmap_path = hic.ICON_INDI_CONFIRM_FILE |
@@ -196,38 +210,40 @@ class ImageDetailsPage (HobPage): | |||
196 | self.box_group_area.pack_start(self.build_result, expand=False, fill=False) | 210 | self.box_group_area.pack_start(self.build_result, expand=False, fill=False) |
197 | 211 | ||
198 | # create the buttons at the bottom first because the buttons are used in apply_button_per_image() | 212 | # create the buttons at the bottom first because the buttons are used in apply_button_per_image() |
199 | if build_succeeded: | 213 | if self.build_succeeded: |
200 | self.buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"] | 214 | self.buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"] |
201 | else: # get to this page from "My images" | 215 | else: # get to this page from "My images" |
202 | self.buttonlist = ["Build new image", "Run image", "Deploy image"] | 216 | self.buttonlist = ["Build new image", "Run image", "Deploy image"] |
203 | 217 | ||
204 | # Name | 218 | # Name |
205 | self.image_store.clear() | 219 | self.image_store.clear() |
206 | default_toggled = "" | 220 | self.toggled_image = "" |
207 | default_image_size = 0 | 221 | default_image_size = 0 |
208 | num_toggled = 0 | 222 | self.num_toggled = 0 |
209 | i = 0 | 223 | i = 0 |
210 | for image_name in image_names: | 224 | for image_name in image_names: |
211 | image_size = HobPage._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size) | 225 | image_size = HobPage._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size) |
212 | is_toggled = (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) \ | ||
213 | or self.test_deployable(image_name) | ||
214 | 226 | ||
215 | if not default_toggled: | 227 | image_attr = ("runnable" if (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) else \ |
228 | ("deploy" if self.test_deployable(image_name) else "")) | ||
229 | is_toggled = (image_attr != "") | ||
230 | |||
231 | if not self.toggled_image: | ||
216 | if i == (len(image_names) - 1): | 232 | if i == (len(image_names) - 1): |
217 | is_toggled = True | 233 | is_toggled = True |
218 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, is_toggled) | 234 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, is_toggled, 3, image_attr) |
219 | if is_toggled: | 235 | if is_toggled: |
220 | default_image_size = image_size | 236 | default_image_size = image_size |
221 | default_toggled = image_name | 237 | self.toggled_image = image_name |
222 | 238 | ||
223 | else: | 239 | else: |
224 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False) | 240 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False, 3, image_attr) |
225 | i = i + 1 | 241 | i = i + 1 |
226 | num_toggled += is_toggled | 242 | self.num_toggled += is_toggled |
227 | 243 | ||
228 | self.create_bottom_buttons(self.buttonlist, default_toggled) | 244 | is_runnable = self.create_bottom_buttons(self.buttonlist, self.toggled_image) |
229 | 245 | ||
230 | if build_succeeded and (num_toggled < 2): | 246 | if self.build_succeeded: |
231 | varlist = ["Name: ", "Directory: "] | 247 | varlist = ["Name: ", "Directory: "] |
232 | vallist = [] | 248 | vallist = [] |
233 | vallist.append(image_name.split('.')[0]) | 249 | vallist.append(image_name.split('.')[0]) |
@@ -247,12 +263,27 @@ class ImageDetailsPage (HobPage): | |||
247 | self.image_detail = self.DetailBox(widget=image_table, varlist=varlist, vallist=vallist, button=view_files_button) | 263 | self.image_detail = self.DetailBox(widget=image_table, varlist=varlist, vallist=vallist, button=view_files_button) |
248 | self.box_group_area.pack_start(self.image_detail, expand=True, fill=True) | 264 | self.box_group_area.pack_start(self.image_detail, expand=True, fill=True) |
249 | 265 | ||
266 | # The default kernel box for the qemu images | ||
267 | self.sel_kernel = "" | ||
268 | if 'qemu' in image_name: | ||
269 | self.sel_kernel = self.get_kernel_file_name() | ||
270 | |||
271 | varlist = ["Kernel: "] | ||
272 | vallist = [] | ||
273 | vallist.append(self.sel_kernel) | ||
274 | |||
275 | change_kernel_button = HobAltButton("Change") | ||
276 | change_kernel_button.connect("clicked", self.change_kernel_cb) | ||
277 | change_kernel_button.set_tooltip_text("Change qemu kernel file") | ||
278 | self.kernel_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=change_kernel_button) | ||
279 | self.box_group_area.pack_start(self.kernel_detail, expand=False, fill=False) | ||
280 | |||
250 | # Machine, Base image and Layers | 281 | # Machine, Base image and Layers |
251 | layer_num_limit = 15 | 282 | layer_num_limit = 15 |
252 | varlist = ["Machine: ", "Base image: ", "Layers: "] | 283 | varlist = ["Machine: ", "Base image: ", "Layers: "] |
253 | vallist = [] | 284 | vallist = [] |
254 | self.setting_detail = None | 285 | self.setting_detail = None |
255 | if build_succeeded: | 286 | if self.build_succeeded: |
256 | vallist.append(machine) | 287 | vallist.append(machine) |
257 | vallist.append(base_image) | 288 | vallist.append(base_image) |
258 | i = 0 | 289 | i = 0 |
@@ -283,7 +314,7 @@ class ImageDetailsPage (HobPage): | |||
283 | vallist = [] | 314 | vallist = [] |
284 | vallist.append(pkg_num) | 315 | vallist.append(pkg_num) |
285 | vallist.append(default_image_size) | 316 | vallist.append(default_image_size) |
286 | if build_succeeded: | 317 | if self.build_succeeded: |
287 | edit_packages_button = HobAltButton("Edit packages") | 318 | edit_packages_button = HobAltButton("Edit packages") |
288 | edit_packages_button.set_tooltip_text("Edit the packages included in your image") | 319 | edit_packages_button.set_tooltip_text("Edit the packages included in your image") |
289 | edit_packages_button.connect("clicked", self.edit_packages_button_clicked_cb) | 320 | edit_packages_button.connect("clicked", self.edit_packages_button_clicked_cb) |
@@ -296,6 +327,8 @@ class ImageDetailsPage (HobPage): | |||
296 | self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False) | 327 | self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False) |
297 | 328 | ||
298 | self.show_all() | 329 | self.show_all() |
330 | if not is_runnable: | ||
331 | self.kernel_detail.hide() | ||
299 | 332 | ||
300 | def view_files_clicked_cb(self, button, image_addr): | 333 | def view_files_clicked_cb(self, button, image_addr): |
301 | subprocess.call("xdg-open /%s" % image_addr, shell=True) | 334 | subprocess.call("xdg-open /%s" % image_addr, shell=True) |
@@ -327,24 +360,63 @@ class ImageDetailsPage (HobPage): | |||
327 | break | 360 | break |
328 | return deployable | 361 | return deployable |
329 | 362 | ||
330 | def table_selected_cb(self, selection): | 363 | def get_kernel_file_name(self, kernel_addr=""): |
331 | model, paths = selection.get_selected_rows() | 364 | kernel_name = "" |
332 | if (not model) or (not paths): | ||
333 | return | ||
334 | 365 | ||
335 | path = paths[0] | 366 | if not kernel_addr: |
336 | columnid = 2 | 367 | kernel_addr = self.builder.parameters.image_addr |
337 | iter = model.get_iter_first() | ||
338 | while iter: | ||
339 | rowpath = model.get_path(iter) | ||
340 | model[rowpath][columnid] = False | ||
341 | iter = model.iter_next(iter) | ||
342 | 368 | ||
343 | model[path][columnid] = True | 369 | files = [f for f in os.listdir(kernel_addr) if f[0] <> '.'] |
344 | self.refresh_package_detail_box(model[path][1]) | 370 | for check_file in files: |
371 | if check_file.endswith(".bin"): | ||
372 | name_splits = check_file.split(".")[0] | ||
373 | if self.builder.parameters.kernel_image_type in name_splits.split("-"): | ||
374 | kernel_name = check_file | ||
375 | break | ||
345 | 376 | ||
346 | image_name = model[path][0] | 377 | return kernel_name |
378 | |||
379 | def show_builded_images_dialog(self, widget): | ||
380 | dialog = CrumbsDialog("Your builded images", self.builder, | ||
381 | gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) | ||
382 | dialog.set_size_request(-1, 350) | ||
383 | |||
384 | label = gtk.Label() | ||
385 | label.set_use_markup(True) | ||
386 | label.set_alignment(0.0, 0.5) | ||
387 | label.set_markup("<span font_desc='12'>Please select a image to run or deploy</span>") | ||
388 | dialog.vbox.pack_start(label, expand=False, fill=False) | ||
389 | |||
390 | image_table = HobViewTable(self.__columns__) | ||
391 | image_table.set_model(self.image_store) | ||
392 | image_table.connect("row-activated", self.row_activated_cb) | ||
393 | image_table.connect_group_selection(self.table_selected_cb) | ||
394 | dialog.vbox.pack_start(image_table, expand=True, fill=True) | ||
395 | |||
396 | button = dialog.add_button(" OK ", gtk.RESPONSE_YES) | ||
397 | HobButton.style_button(button) | ||
347 | 398 | ||
399 | dialog.show_all() | ||
400 | |||
401 | response = dialog.run() | ||
402 | dialog.destroy() | ||
403 | |||
404 | if response != gtk.RESPONSE_YES: | ||
405 | return | ||
406 | |||
407 | it = self.image_store.get_iter_first() | ||
408 | while it: | ||
409 | image_attr = self.image_store.get_value(it, 3) | ||
410 | is_select = self.image_store.get_value(it, 2) | ||
411 | if is_select: | ||
412 | image_name = self.image_store.get_value(it, 0) | ||
413 | if image_attr == 'runnable': | ||
414 | self.builder.runqemu_image(image_name, self.sel_kernel) | ||
415 | elif image_attr == 'deploy': | ||
416 | self.builder.deploy_image(image_name) | ||
417 | it = self.image_store.iter_next(it) | ||
418 | |||
419 | def repack_box_group(self, image_name=None): | ||
348 | # remove | 420 | # remove |
349 | for button_id, button in self.button_ids.items(): | 421 | for button_id, button in self.button_ids.items(): |
350 | button.disconnect(button_id) | 422 | button.disconnect(button_id) |
@@ -355,27 +427,59 @@ class ImageDetailsPage (HobPage): | |||
355 | if self.build_result: | 427 | if self.build_result: |
356 | self.box_group_area.pack_start(self.build_result, expand=False, fill=False) | 428 | self.box_group_area.pack_start(self.build_result, expand=False, fill=False) |
357 | self.box_group_area.pack_start(self.image_detail, expand=True, fill=True) | 429 | self.box_group_area.pack_start(self.image_detail, expand=True, fill=True) |
430 | if self.kernel_detail: | ||
431 | self.box_group_area.pack_start(self.kernel_detail, expand=False, fill=False) | ||
358 | if self.setting_detail: | 432 | if self.setting_detail: |
359 | self.box_group_area.pack_start(self.setting_detail, expand=False, fill=False) | 433 | self.box_group_area.pack_start(self.setting_detail, expand=False, fill=False) |
360 | self.box_group_area.pack_start(self.package_detail, expand=False, fill=False) | 434 | self.box_group_area.pack_start(self.package_detail, expand=False, fill=False) |
361 | self.create_bottom_buttons(self.buttonlist, image_name) | 435 | is_runnable = self.create_bottom_buttons(self.buttonlist, image_name) |
362 | self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False) | 436 | self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False) |
363 | self.show_all() | 437 | self.show_all() |
438 | if not is_runnable: | ||
439 | self.kernel_detail.hide() | ||
440 | |||
441 | def table_selected_cb(self, selection): | ||
442 | model, paths = selection.get_selected_rows() | ||
443 | if (not model) or (not paths): | ||
444 | return | ||
445 | |||
446 | path = paths[0] | ||
447 | columnid = 2 | ||
448 | iter = model.get_iter_first() | ||
449 | while iter: | ||
450 | rowpath = model.get_path(iter) | ||
451 | model[rowpath][columnid] = False | ||
452 | iter = model.iter_next(iter) | ||
453 | |||
454 | model[path][columnid] = True | ||
455 | self.refresh_package_detail_box(model[path][1]) | ||
456 | |||
457 | self.toggled_image = model[path][0] | ||
458 | self.repack_box_group(self.toggled_image) | ||
459 | |||
460 | def change_kernel_cb(self, widget): | ||
461 | kernel_path = self.builder.show_load_kernel_dialog() | ||
462 | if kernel_path and self.kernel_detail: | ||
463 | import os.path | ||
464 | self.sel_kernel = os.path.basename(kernel_path) | ||
465 | markup = self.kernel_detail.format_line("Kernel: ", self.sel_kernel) | ||
466 | label = ((self.kernel_detail.get_children()[0]).get_children()[0]).get_children()[0] | ||
467 | label.set_markup(markup) | ||
364 | 468 | ||
365 | def row_activated_cb(self, table, model, path): | 469 | def row_activated_cb(self, table, model, path): |
366 | if not model: | 470 | if not model: |
367 | return | 471 | return |
368 | iter = model.get_iter(path) | 472 | iter = model.get_iter(path) |
369 | image_name = model[path][0] | 473 | image_name = model[path][0] |
370 | if iter and model[path][2] == 'runnable': | 474 | if iter and model[path][2] == True: |
371 | kernel_name, kernel_number = self.builder.parameters.get_kernel_file_name() | 475 | self.builder.runqemu_image(image_name, self.sel_kernel) |
372 | self.builder.runqemu_image(image_name, kernel_name, kernel_number) | ||
373 | 476 | ||
374 | def create_bottom_buttons(self, buttonlist, image_name): | 477 | def create_bottom_buttons(self, buttonlist, image_name): |
375 | # Create the buttons at the bottom | 478 | # Create the buttons at the bottom |
376 | created = False | 479 | created = False |
377 | packed = False | 480 | packed = False |
378 | self.button_ids = {} | 481 | self.button_ids = {} |
482 | is_runnable = False | ||
379 | 483 | ||
380 | # create button "Deploy image" | 484 | # create button "Deploy image" |
381 | name = "Deploy image" | 485 | name = "Deploy image" |
@@ -384,7 +488,7 @@ class ImageDetailsPage (HobPage): | |||
384 | deploy_button.set_size_request(205, 49) | 488 | deploy_button.set_size_request(205, 49) |
385 | deploy_button.set_tooltip_text("Burn a live image to a USB drive or flash memory") | 489 | deploy_button.set_tooltip_text("Burn a live image to a USB drive or flash memory") |
386 | deploy_button.set_flags(gtk.CAN_DEFAULT) | 490 | deploy_button.set_flags(gtk.CAN_DEFAULT) |
387 | button_id = deploy_button.connect("clicked", self.deploy_button_clicked_cb, image_name) | 491 | button_id = deploy_button.connect("clicked", self.deploy_button_clicked_cb) |
388 | self.button_ids[button_id] = deploy_button | 492 | self.button_ids[button_id] = deploy_button |
389 | self.details_bottom_buttons.pack_end(deploy_button, expand=False, fill=False) | 493 | self.details_bottom_buttons.pack_end(deploy_button, expand=False, fill=False) |
390 | created = True | 494 | created = True |
@@ -406,10 +510,11 @@ class ImageDetailsPage (HobPage): | |||
406 | run_button.set_flags(gtk.CAN_DEFAULT) | 510 | run_button.set_flags(gtk.CAN_DEFAULT) |
407 | packed = True | 511 | packed = True |
408 | run_button.set_tooltip_text("Start up an image with qemu emulator") | 512 | run_button.set_tooltip_text("Start up an image with qemu emulator") |
409 | button_id = run_button.connect("clicked", self.run_button_clicked_cb, image_name) | 513 | button_id = run_button.connect("clicked", self.run_button_clicked_cb) |
410 | self.button_ids[button_id] = run_button | 514 | self.button_ids[button_id] = run_button |
411 | self.details_bottom_buttons.pack_end(run_button, expand=False, fill=False) | 515 | self.details_bottom_buttons.pack_end(run_button, expand=False, fill=False) |
412 | created = True | 516 | created = True |
517 | is_runnable = True | ||
413 | 518 | ||
414 | name = "Save as template" | 519 | name = "Save as template" |
415 | if name in buttonlist: | 520 | if name in buttonlist: |
@@ -446,14 +551,22 @@ class ImageDetailsPage (HobPage): | |||
446 | button_id = build_new_button.connect("clicked", self.build_new_button_clicked_cb) | 551 | button_id = build_new_button.connect("clicked", self.build_new_button_clicked_cb) |
447 | self.button_ids[button_id] = build_new_button | 552 | self.button_ids[button_id] = build_new_button |
448 | 553 | ||
554 | return is_runnable | ||
555 | |||
449 | def save_button_clicked_cb(self, button): | 556 | def save_button_clicked_cb(self, button): |
450 | self.builder.show_save_template_dialog() | 557 | self.builder.show_save_template_dialog() |
451 | 558 | ||
452 | def deploy_button_clicked_cb(self, button, image_name): | 559 | def deploy_button_clicked_cb(self, button): |
453 | self.builder.deploy_image(image_name) | 560 | if self.build_succeeded and self.num_toggled > 1: |
561 | self.show_builded_images_dialog() | ||
562 | return | ||
563 | self.builder.deploy_image(self.toggled_image) | ||
454 | 564 | ||
455 | def run_button_clicked_cb(self, button, image_name): | 565 | def run_button_clicked_cb(self, button): |
456 | self.builder.runqemu_image(image_name) | 566 | if self.build_succeeded and self.num_toggled > 1: |
567 | self.show_builded_images_dialog() | ||
568 | return | ||
569 | self.builder.runqemu_image(self.toggled_image, self.sel_kernel) | ||
457 | 570 | ||
458 | def build_new_button_clicked_cb(self, button): | 571 | def build_new_button_clicked_cb(self, button): |
459 | self.builder.initiate_new_build_async() | 572 | self.builder.initiate_new_build_async() |