diff options
Diffstat (limited to 'bitbake')
-rwxr-xr-x | bitbake/lib/bb/ui/crumbs/imagedetailspage.py | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py index 276281d8a8..7d06124048 100755 --- a/bitbake/lib/bb/ui/crumbs/imagedetailspage.py +++ b/bitbake/lib/bb/ui/crumbs/imagedetailspage.py | |||
@@ -176,14 +176,30 @@ class ImageDetailsPage (HobPage): | |||
176 | build_result = self.DetailBox(varlist=varlist, vallist=vallist, icon=icon, color=color) | 176 | build_result = self.DetailBox(varlist=varlist, vallist=vallist, icon=icon, color=color) |
177 | self.box_group_area.pack_start(build_result, expand=False, fill=False) | 177 | self.box_group_area.pack_start(build_result, expand=False, fill=False) |
178 | 178 | ||
179 | # create the buttons at the bottom first because the buttons are used in apply_button_per_image() | ||
180 | if build_succeeded: | ||
181 | buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"] | ||
182 | else: # get to this page from "My images" | ||
183 | buttonlist = ["Build new image", "Run image", "Deploy image"] | ||
184 | details_bottom_buttons = self.create_bottom_buttons(buttonlist) | ||
185 | |||
179 | # Name | 186 | # Name |
180 | self.image_store.clear() | 187 | self.image_store.clear() |
188 | default_toggled = False | ||
189 | default_image_size = 0 | ||
181 | for image_name in image_names: | 190 | for image_name in image_names: |
182 | image_size = self._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size) | 191 | image_size = self._size_to_string(os.stat(os.path.join(image_addr, image_name)).st_size) |
183 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False) | 192 | if not default_toggled: |
193 | default_toggled = (self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) \ | ||
194 | or self.test_deployable(image_name) | ||
195 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, default_toggled) | ||
196 | if default_toggled: | ||
197 | default_image_size = image_size | ||
198 | self.apply_buttons_per_image(image_name) | ||
199 | else: | ||
200 | self.image_store.set(self.image_store.append(), 0, image_name, 1, image_size, 2, False) | ||
184 | image_table = HobViewTable(self.__columns__) | 201 | image_table = HobViewTable(self.__columns__) |
185 | image_table.set_model(self.image_store) | 202 | image_table.set_model(self.image_store) |
186 | image_size = self._size_to_string(os.stat(os.path.join(image_addr, image_names[0])).st_size) | ||
187 | image_table.connect("toggled", self.toggled_cb) | 203 | image_table.connect("toggled", self.toggled_cb) |
188 | view_files_button = HobAltButton("View files") | 204 | view_files_button = HobAltButton("View files") |
189 | view_files_button.connect("clicked", self.view_files_clicked_cb, image_addr) | 205 | view_files_button.connect("clicked", self.view_files_clicked_cb, image_addr) |
@@ -222,7 +238,7 @@ class ImageDetailsPage (HobPage): | |||
222 | varlist = ["Packages included: ", "Total image size: "] | 238 | varlist = ["Packages included: ", "Total image size: "] |
223 | vallist = [] | 239 | vallist = [] |
224 | vallist.append(pkg_num) | 240 | vallist.append(pkg_num) |
225 | vallist.append(image_size) | 241 | vallist.append(default_image_size) |
226 | if build_succeeded: | 242 | if build_succeeded: |
227 | edit_packages_button = HobAltButton("Edit packages") | 243 | edit_packages_button = HobAltButton("Edit packages") |
228 | edit_packages_button.connect("clicked", self.edit_packages_button_clicked_cb) | 244 | edit_packages_button.connect("clicked", self.edit_packages_button_clicked_cb) |
@@ -231,11 +247,7 @@ class ImageDetailsPage (HobPage): | |||
231 | self.package_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=edit_packages_button) | 247 | self.package_detail = self.DetailBox(varlist=varlist, vallist=vallist, button=edit_packages_button) |
232 | self.box_group_area.pack_start(self.package_detail, expand=False, fill=False) | 248 | self.box_group_area.pack_start(self.package_detail, expand=False, fill=False) |
233 | 249 | ||
234 | if build_succeeded: | 250 | # pack the buttons at the bottom, at this time they are already created. |
235 | buttonlist = ["Build new image", "Save as template", "Run image", "Deploy image"] | ||
236 | else: # get to this page from "My images" | ||
237 | buttonlist = ["Build new image", "Run image", "Deploy image"] | ||
238 | details_bottom_buttons = self.create_bottom_buttons(buttonlist) | ||
239 | self.box_group_area.pack_end(details_bottom_buttons, expand=False, fill=False) | 251 | self.box_group_area.pack_end(details_bottom_buttons, expand=False, fill=False) |
240 | 252 | ||
241 | self.show_all() | 253 | self.show_all() |
@@ -246,41 +258,49 @@ class ImageDetailsPage (HobPage): | |||
246 | def refresh_package_detail_box(self, image_size): | 258 | def refresh_package_detail_box(self, image_size): |
247 | self.package_detail.update_line_widgets("Total image size: ", image_size) | 259 | self.package_detail.update_line_widgets("Total image size: ", image_size) |
248 | 260 | ||
249 | def toggled_cb(self, table, cell, path, columnid, tree): | 261 | def test_type_runnable(self, image_name): |
250 | model = tree.get_model() | ||
251 | if not model: | ||
252 | return | ||
253 | iter = model.get_iter_first() | ||
254 | while iter: | ||
255 | rowpath = model.get_path(iter) | ||
256 | model[rowpath][columnid] = False | ||
257 | iter = model.iter_next(iter) | ||
258 | |||
259 | model[path][columnid] = True | ||
260 | self.refresh_package_detail_box(model[path][1]) | ||
261 | |||
262 | type_runnable = False | 262 | type_runnable = False |
263 | mach_runnable = False | ||
264 | image_name = model[path][0] | ||
265 | for t in self.builder.parameters.runnable_image_types: | 263 | for t in self.builder.parameters.runnable_image_types: |
266 | if image_name.endswith(t): | 264 | if image_name.endswith(t): |
267 | type_runnable = True | 265 | type_runnable = True |
268 | break | 266 | break |
267 | return type_runnable | ||
269 | 268 | ||
269 | def test_mach_runnable(self, image_name): | ||
270 | mach_runnable = False | ||
270 | for t in self.builder.parameters.runnable_machine_patterns: | 271 | for t in self.builder.parameters.runnable_machine_patterns: |
271 | if t in image_name: | 272 | if t in image_name: |
272 | mach_runnable = True | 273 | mach_runnable = True |
273 | break | 274 | break |
275 | return mach_runnable | ||
274 | 276 | ||
275 | self.run_button.set_sensitive(type_runnable and mach_runnable) | 277 | def test_deployable(self, image_name): |
276 | |||
277 | deployable = False | 278 | deployable = False |
278 | for t in self.builder.parameters.deployable_image_types: | 279 | for t in self.builder.parameters.deployable_image_types: |
279 | if image_name.endswith(t): | 280 | if image_name.endswith(t): |
280 | deployable = True | 281 | deployable = True |
281 | break | 282 | break |
283 | return deployable | ||
282 | 284 | ||
283 | self.deploy_button.set_sensitive(deployable) | 285 | def apply_buttons_per_image(self, image_name): |
286 | self.run_button.set_sensitive(self.test_type_runnable(image_name) and self.test_mach_runnable(image_name)) | ||
287 | self.deploy_button.set_sensitive(self.test_deployable(image_name)) | ||
288 | |||
289 | def toggled_cb(self, table, cell, path, columnid, tree): | ||
290 | model = tree.get_model() | ||
291 | if not model: | ||
292 | return | ||
293 | iter = model.get_iter_first() | ||
294 | while iter: | ||
295 | rowpath = model.get_path(iter) | ||
296 | model[rowpath][columnid] = False | ||
297 | iter = model.iter_next(iter) | ||
298 | |||
299 | model[path][columnid] = True | ||
300 | self.refresh_package_detail_box(model[path][1]) | ||
301 | |||
302 | image_name = model[path][0] | ||
303 | self.apply_buttons_per_image(image_name) | ||
284 | 304 | ||
285 | def create_bottom_buttons(self, buttonlist): | 305 | def create_bottom_buttons(self, buttonlist): |
286 | # Create the buttons at the bottom | 306 | # Create the buttons at the bottom |