summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbitbake/lib/bb/ui/crumbs/imagedetailspage.py122
1 files changed, 84 insertions, 38 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py
index b4fc15c6fd..ac631b6a20 100755
--- a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py
+++ b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py
@@ -113,6 +113,8 @@ class ImageDetailsPage (HobPage):
113 super(ImageDetailsPage, self).__init__(builder, "Image details") 113 super(ImageDetailsPage, self).__init__(builder, "Image details")
114 114
115 self.image_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) 115 self.image_store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
116 self.button_ids = {}
117 self.details_bottom_buttons = gtk.HBox(False, 6)
116 self.create_visual_elements() 118 self.create_visual_elements()
117 119
118 def create_visual_elements(self): 120 def create_visual_elements(self):
@@ -150,6 +152,9 @@ class ImageDetailsPage (HobPage):
150 children = self.box_group_area.get_children() or [] 152 children = self.box_group_area.get_children() or []
151 for child in children: 153 for child in children:
152 self.box_group_area.remove(child) 154 self.box_group_area.remove(child)
155 children = self.details_bottom_buttons.get_children() or []
156 for child in children:
157 self.details_bottom_buttons.remove(child)
153 158
154 def show_page(self, step): 159 def show_page(self, step):
155 build_succeeded = (step == self.builder.IMAGE_GENERATED) 160 build_succeeded = (step == self.builder.IMAGE_GENERATED)
@@ -163,10 +168,15 @@ class ImageDetailsPage (HobPage):
163 else: 168 else:
164 pkg_num = "N/A" 169 pkg_num = "N/A"
165 170
171 # remove
172 for button_id, button in self.button_ids.items():
173 button.disconnect(button_id)
166 self._remove_all_widget() 174 self._remove_all_widget()
175 # repack
167 self.pack_start(self.details_top_buttons, expand=False, fill=False) 176 self.pack_start(self.details_top_buttons, expand=False, fill=False)
168 self.pack_start(self.group_align, expand=True, fill=True) 177 self.pack_start(self.group_align, expand=True, fill=True)
169 178
179 self.build_result = None
170 if build_succeeded: 180 if build_succeeded:
171 # building is the previous step 181 # building is the previous step
172 icon = gtk.Image() 182 icon = gtk.Image()
@@ -176,43 +186,48 @@ class ImageDetailsPage (HobPage):
176 icon.set_from_pixbuf(pix_buffer) 186 icon.set_from_pixbuf(pix_buffer)
177 varlist = [""] 187 varlist = [""]
178 vallist = ["Your image is ready"] 188 vallist = ["Your image is ready"]
179 build_result = self.DetailBox(varlist=varlist, vallist=vallist, icon=icon, color=color) 189 self.build_result = self.DetailBox(varlist=varlist, vallist=vallist, icon=icon, color=color)
180 self.box_group_area.pack_start(build_result, expand=False, fill=False) 190 self.box_group_area.pack_start(self.build_result, expand=False, fill=False)
181 191
182 # create the buttons at the bottom first because the buttons are used in apply_button_per_image() 192 # create the buttons at the bottom first because the buttons are used in apply_button_per_image()
183 if build_succeeded: 193 if build_succeeded:
184 buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"] 194 self.buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"]
185 else: # get to this page from "My images" 195 else: # get to this page from "My images"
186 buttonlist = ["Build new image", "Run image", "Deploy image"] 196 self.buttonlist = ["Build new image", "Run image", "Deploy image"]
187 details_bottom_buttons = self.create_bottom_buttons(buttonlist)
188 197
189 # Name 198 # Name
190 self.image_store.clear() 199 self.image_store.clear()
191 default_toggled = False 200 default_toggled = False
192 default_image_size = 0 201 default_image_size = 0
202 i = 0
193 for image_name in image_names: 203 for image_name in image_names:
194 image_size = HobPage._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size) 204 image_size = HobPage._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size)
195 if not default_toggled: 205 if not default_toggled:
196 default_toggled = (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) \ 206 default_toggled = (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) \
197 or self.test_deployable(image_name) 207 or self.test_deployable(image_name)
208 if i == (len(image_names) - 1):
209 default_toggled = True
198 self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, default_toggled) 210 self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, default_toggled)
199 if default_toggled: 211 if default_toggled:
200 default_image_size = image_size 212 default_image_size = image_size
201 self.apply_buttons_per_image(image_name) 213 self.create_bottom_buttons(self.buttonlist, image_name)
202 else: 214 else:
203 self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False) 215 self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False)
216 i = i + 1
204 image_table = HobViewTable(self.__columns__) 217 image_table = HobViewTable(self.__columns__)
205 image_table.set_model(self.image_store) 218 image_table.set_model(self.image_store)
206 image_table.connect("toggled", self.toggled_cb) 219 image_table.connect("toggled", self.toggled_cb)
207 view_files_button = HobAltButton("View files") 220 view_files_button = HobAltButton("View files")
208 view_files_button.connect("clicked", self.view_files_clicked_cb, image_addr) 221 view_files_button.connect("clicked", self.view_files_clicked_cb, image_addr)
209 view_files_button.set_tooltip_text("Open the directory containing the image files") 222 view_files_button.set_tooltip_text("Open the directory containing the image files")
210 self.box_group_area.pack_start(self.DetailBox(widget=image_table, button=view_files_button), expand=True, fill=True) 223 self.image_detail = self.DetailBox(widget=image_table, button=view_files_button)
224 self.box_group_area.pack_start(self.image_detail, expand=True, fill=True)
211 225
212 # Machine, Base image and Layers 226 # Machine, Base image and Layers
213 layer_num_limit = 15 227 layer_num_limit = 15
214 varlist = ["Machine: ", "Base image: ", "Layers: "] 228 varlist = ["Machine: ", "Base image: ", "Layers: "]
215 vallist = [] 229 vallist = []
230 self.setting_detail = None
216 if build_succeeded: 231 if build_succeeded:
217 vallist.append(machine) 232 vallist.append(machine)
218 vallist.append(base_image) 233 vallist.append(base_image)
@@ -236,8 +251,8 @@ class ImageDetailsPage (HobPage):
236 edit_config_button = HobAltButton("Edit configuration") 251 edit_config_button = HobAltButton("Edit configuration")
237 edit_config_button.set_tooltip_text("Edit machine, base image and recipes") 252 edit_config_button.set_tooltip_text("Edit machine, base image and recipes")
238 edit_config_button.connect("clicked", self.edit_config_button_clicked_cb) 253 edit_config_button.connect("clicked", self.edit_config_button_clicked_cb)
239 setting_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=edit_config_button) 254 self.setting_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=edit_config_button)
240 self.box_group_area.pack_start(setting_detail, expand=False, fill=False) 255 self.box_group_area.pack_start(self.setting_detail, expand=False, fill=False)
241 256
242 # Packages included, and Total image size 257 # Packages included, and Total image size
243 varlist = ["Packages included: ", "Total image size: "] 258 varlist = ["Packages included: ", "Total image size: "]
@@ -254,7 +269,7 @@ class ImageDetailsPage (HobPage):
254 self.box_group_area.pack_start(self.package_detail, expand=False, fill=False) 269 self.box_group_area.pack_start(self.package_detail, expand=False, fill=False)
255 270
256 # pack the buttons at the bottom, at this time they are already created. 271 # pack the buttons at the bottom, at this time they are already created.
257 self.box_group_area.pack_end(details_bottom_buttons, expand=False, fill=False) 272 self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False)
258 273
259 self.show_all() 274 self.show_all()
260 275
@@ -288,10 +303,6 @@ class ImageDetailsPage (HobPage):
288 break 303 break
289 return deployable 304 return deployable
290 305
291 def apply_buttons_per_image(self, image_name):
292 self.run_button.set_sensitive(self.test_type_runnable(image_name) and self.test_mach_runnable(image_name))
293 self.deploy_button.set_sensitive(self.test_deployable(image_name))
294
295 def toggled_cb(self, table, cell, path, columnid, tree): 306 def toggled_cb(self, table, cell, path, columnid, tree):
296 model = tree.get_model() 307 model = tree.get_model()
297 if not model: 308 if not model:
@@ -306,50 +317,86 @@ class ImageDetailsPage (HobPage):
306 self.refresh_package_detail_box(model[path][1]) 317 self.refresh_package_detail_box(model[path][1])
307 318
308 image_name = model[path][0] 319 image_name = model[path][0]
309 self.apply_buttons_per_image(image_name)
310 320
311 def create_bottom_buttons(self, buttonlist): 321 # remove
322 for button_id, button in self.button_ids.items():
323 button.disconnect(button_id)
324 self._remove_all_widget()
325 # repack
326 self.pack_start(self.details_top_buttons, expand=False, fill=False)
327 self.pack_start(self.group_align, expand=True, fill=True)
328 if self.build_result:
329 self.box_group_area.pack_start(self.build_result, expand=False, fill=False)
330 self.box_group_area.pack_start(self.image_detail, expand=True, fill=True)
331 if self.setting_detail:
332 self.box_group_area.pack_start(self.setting_detail, expand=False, fill=False)
333 self.box_group_area.pack_start(self.package_detail, expand=False, fill=False)
334 self.create_bottom_buttons(self.buttonlist, image_name)
335 self.box_group_area.pack_end(self.details_bottom_buttons, expand=False, fill=False)
336 self.show_all()
337
338 def create_bottom_buttons(self, buttonlist, image_name):
312 # Create the buttons at the bottom 339 # Create the buttons at the bottom
313 bottom_buttons = gtk.HBox(False, 6)
314 created = False 340 created = False
341 packed = False
342 self.button_ids = {}
315 343
316 # create button "Deploy image" 344 # create button "Deploy image"
317 name = "Deploy image" 345 name = "Deploy image"
318 if name in buttonlist: 346 if name in buttonlist and self.test_deployable(image_name):
319 self.deploy_button = HobButton('Deploy image') 347 deploy_button = HobButton('Deploy image')
320 self.deploy_button.set_size_request(205, 49) 348 deploy_button.set_size_request(205, 49)
321 self.deploy_button.set_tooltip_text("Burn a live image to a USB drive or flash memory") 349 deploy_button.set_tooltip_text("Burn a live image to a USB drive or flash memory")
322 self.deploy_button.set_flags(gtk.CAN_DEFAULT) 350 deploy_button.set_flags(gtk.CAN_DEFAULT)
323 self.deploy_button.connect("clicked", self.deploy_button_clicked_cb) 351 button_id = deploy_button.connect("clicked", self.deploy_button_clicked_cb)
324 bottom_buttons.pack_end(self.deploy_button, expand=False, fill=False) 352 self.button_ids[button_id] = deploy_button
353 self.details_bottom_buttons.pack_end(deploy_button, expand=False, fill=False)
325 created = True 354 created = True
355 packed = True
326 356
327 name = "Run image" 357 name = "Run image"
328 if name in buttonlist: 358 if name in buttonlist and self.test_type_runnable(image_name) and self.test_mach_runnable(image_name):
329 if created == True: 359 if created == True:
330 # separator 360 # separator
331 label = gtk.Label(" or ") 361 label = gtk.Label(" or ")
332 bottom_buttons.pack_end(label, expand=False, fill=False) 362 self.details_bottom_buttons.pack_end(label, expand=False, fill=False)
333 363
334 # create button "Run image" 364 # create button "Run image"
335 self.run_button = HobAltButton("Run image") 365 run_button = HobAltButton("Run image")
336 self.run_button.set_tooltip_text("Start up an image with qemu emulator") 366 else:
337 self.run_button.connect("clicked", self.run_button_clicked_cb) 367 # create button "Run image" as the primary button
338 bottom_buttons.pack_end(self.run_button, expand=False, fill=False) 368 run_button = HobButton("Run image")
369 run_button.set_size_request(205, 49)
370 run_button.set_flags(gtk.CAN_DEFAULT)
371 packed = True
372 run_button.set_tooltip_text("Start up an image with qemu emulator")
373 button_id = run_button.connect("clicked", self.run_button_clicked_cb)
374 self.button_ids[button_id] = run_button
375 self.details_bottom_buttons.pack_end(run_button, expand=False, fill=False)
339 created = True 376 created = True
340 377
378 if not packed:
379 box = gtk.HBox(False, 6)
380 box.show()
381 subbox = gtk.HBox(False, 0)
382 subbox.set_size_request(205, 49)
383 subbox.show()
384 box.add(subbox)
385 self.details_bottom_buttons.pack_end(box, False, False)
386
341 name = "Save as template" 387 name = "Save as template"
342 if name in buttonlist: 388 if name in buttonlist:
343 if created == True: 389 if created == True:
344 # separator 390 # separator
345 label = gtk.Label(" or ") 391 label = gtk.Label(" or ")
346 bottom_buttons.pack_end(label, expand=False, fill=False) 392 self.details_bottom_buttons.pack_end(label, expand=False, fill=False)
347 393
348 # create button "Save as template" 394 # create button "Save as template"
349 save_button = HobAltButton("Save as template") 395 save_button = HobAltButton("Save as template")
350 save_button.set_tooltip_text("Save the image configuration for reuse") 396 save_button.set_tooltip_text("Save the image configuration for reuse")
351 save_button.connect("clicked", self.save_button_clicked_cb) 397 button_id = save_button.connect("clicked", self.save_button_clicked_cb)
352 bottom_buttons.pack_end(save_button, expand=False, fill=False) 398 self.button_ids[button_id] = save_button
399 self.details_bottom_buttons.pack_end(save_button, expand=False, fill=False)
353 create = True 400 create = True
354 401
355 name = "Build new image" 402 name = "Build new image"
@@ -357,10 +404,9 @@ class ImageDetailsPage (HobPage):
357 # create button "Build new image" 404 # create button "Build new image"
358 build_new_button = HobAltButton("Build new image") 405 build_new_button = HobAltButton("Build new image")
359 build_new_button.set_tooltip_text("Create a new image from scratch") 406 build_new_button.set_tooltip_text("Create a new image from scratch")
360 build_new_button.connect("clicked", self.build_new_button_clicked_cb) 407 button_id = build_new_button.connect("clicked", self.build_new_button_clicked_cb)
361 bottom_buttons.pack_start(build_new_button, expand=False, fill=False) 408 self.button_ids[button_id] = build_new_button
362 409 self.details_bottom_buttons.pack_start(build_new_button, expand=False, fill=False)
363 return bottom_buttons
364 410
365 def _get_selected_image(self): 411 def _get_selected_image(self):
366 image_name = "" 412 image_name = ""