diff options
| author | Dongxiao Xu <dongxiao.xu@intel.com> | 2012-03-20 15:49:44 +0800 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2012-03-22 14:40:39 +0000 |
| commit | 5b98b26d75262c9d0a27616be2a1eacfde93f1dd (patch) | |
| tree | b5cc123cb479d9b6761c9e4c14cea9d89c8c5ec5 | |
| parent | 8683fa2d6302f37c12730ba872da778873939037 (diff) | |
| download | poky-5b98b26d75262c9d0a27616be2a1eacfde93f1dd.tar.gz | |
Hob: change package classes selection GUI
This commit change the GUI for package classes selection in advanced
setting dialog, which conforms with UI team's design.
(From Poky rev: 7bbcabdb71d76cdb2ec1de15618d1e47f1149a21)
(Bitbake rev: 4ebce01dde18e67e01ff7c4736c229a3364c04b0)
Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rw-r--r-- | bitbake/lib/bb/ui/crumbs/hig.py | 181 |
1 files changed, 45 insertions, 136 deletions
diff --git a/bitbake/lib/bb/ui/crumbs/hig.py b/bitbake/lib/bb/ui/crumbs/hig.py index bd27375ea5..e675f39bd4 100644 --- a/bitbake/lib/bb/ui/crumbs/hig.py +++ b/bitbake/lib/bb/ui/crumbs/hig.py | |||
| @@ -191,146 +191,58 @@ class AdvancedSettingDialog (CrumbsDialog): | |||
| 191 | hbox.show_all() | 191 | hbox.show_all() |
| 192 | return hbox, entry | 192 | return hbox, entry |
| 193 | 193 | ||
| 194 | def pkgfmt_widget_sort_func(self, model, iter1, iter2, data): | 194 | def rootfs_combo_changed_cb(self, rootfs_combo, all_package_format, check_hbox): |
| 195 | val1 = model.get_value(iter1, 0) | 195 | combo_item = self.rootfs_combo.get_active_text() |
| 196 | val2 = model.get_value(iter2, 0) | 196 | for child in check_hbox.get_children(): |
| 197 | inc1 = model.get_value(iter1, 2) | 197 | if isinstance(child, gtk.CheckButton): |
| 198 | inc2 = model.get_value(iter2, 2) | 198 | check_hbox.remove(child) |
| 199 | if inc1 != inc2: | 199 | for format in all_package_format: |
| 200 | return inc2 - inc1 | 200 | if format != combo_item: |
| 201 | else: | 201 | check_button = gtk.CheckButton(format) |
| 202 | return val1 - val2 | 202 | check_hbox.pack_start(check_button, expand=False, fill=False) |
| 203 | 203 | check_hbox.show_all() | |
| 204 | def pkgfmt_widget_tree_selection_changed_cb(self, tree_selection, button1, button2): | ||
| 205 | (model, it) = tree_selection.get_selected() | ||
| 206 | inc = model.get_value(it, 2) | ||
| 207 | if inc: | ||
| 208 | button1.set_sensitive(True) | ||
| 209 | button2.set_sensitive(True) | ||
| 210 | else: | ||
| 211 | button1.set_sensitive(False) | ||
| 212 | button2.set_sensitive(False) | ||
| 213 | |||
| 214 | def pkgfmt_widget_up_clicked_cb(self, button, tree_selection): | ||
| 215 | (model, it) = tree_selection.get_selected() | ||
| 216 | if not it: | ||
| 217 | return | ||
| 218 | path = model.get_path(it) | ||
| 219 | if path[0] <= 0: | ||
| 220 | return | ||
| 221 | |||
| 222 | pre_it = model.get_iter_first() | ||
| 223 | if not pre_it: | ||
| 224 | return | ||
| 225 | else: | ||
| 226 | while model.iter_next(pre_it) : | ||
| 227 | if model.get_value(model.iter_next(pre_it), 1) != model.get_value(it, 1): | ||
| 228 | pre_it = model.iter_next(pre_it) | ||
| 229 | else: | ||
| 230 | break | ||
| 231 | |||
| 232 | cur_index = model.get_value(it, 0) | ||
| 233 | pre_index = cur_index | ||
| 234 | if pre_it: | ||
| 235 | model.set(pre_it, 0, pre_index) | ||
| 236 | cur_index = cur_index - 1 | ||
| 237 | model.set(it, 0, cur_index) | ||
| 238 | |||
| 239 | def pkgfmt_widget_down_clicked_cb(self, button, tree_selection): | ||
| 240 | (model, it) = tree_selection.get_selected() | ||
| 241 | if not it: | ||
| 242 | return | ||
| 243 | next_it = model.iter_next(it) | ||
| 244 | if not next_it: | ||
| 245 | return | ||
| 246 | cur_index = model.get_value(it, 0) | ||
| 247 | next_index = cur_index | ||
| 248 | model.set(next_it, 0, next_index) | ||
| 249 | cur_index = cur_index + 1 | ||
| 250 | model.set(it, 0, cur_index) | ||
| 251 | |||
| 252 | def pkgfmt_widget_toggle_cb(self, cell, path, model, column): | ||
| 253 | it = model.get_iter(path) | ||
| 254 | val = model.get_value(it, column) | ||
| 255 | val = not val | ||
| 256 | model.set(it, column, val) | ||
| 257 | 204 | ||
| 258 | def gen_pkgfmt_widget(self, curr_package_format, all_package_format, tooltip=""): | 205 | def gen_pkgfmt_widget(self, curr_package_format, all_package_format, tooltip=""): |
| 259 | pkgfmt_hbox = gtk.HBox(False, 12) | 206 | pkgfmt_hbox = gtk.HBox(False, 24) |
| 260 | 207 | ||
| 261 | pkgfmt_store = gtk.ListStore(int, str, gobject.TYPE_BOOLEAN) | 208 | rootfs_vbox = gtk.VBox(False, 6) |
| 262 | for format in curr_package_format.split(): | 209 | pkgfmt_hbox.pack_start(rootfs_vbox, expand=False, fill=False) |
| 263 | pkgfmt_store.set(pkgfmt_store.append(), 1, format, 2, True) | ||
| 264 | for format in all_package_format: | ||
| 265 | if format not in curr_package_format: | ||
| 266 | pkgfmt_store.set(pkgfmt_store.append(), 1, format, 2, False) | ||
| 267 | pkgfmt_tree = gtk.TreeView(pkgfmt_store) | ||
| 268 | pkgfmt_tree.set_headers_clickable(True) | ||
| 269 | pkgfmt_tree.set_headers_visible(False) | ||
| 270 | tree_selection = pkgfmt_tree.get_selection() | ||
| 271 | tree_selection.set_mode(gtk.SELECTION_SINGLE) | ||
| 272 | 210 | ||
| 273 | col = gtk.TreeViewColumn('NO') | 211 | label = self.gen_label_widget("Root file system package format") |
| 274 | col.set_sort_column_id(0) | 212 | rootfs_vbox.pack_start(label, expand=False, fill=False) |
| 275 | col.set_sort_order(gtk.SORT_ASCENDING) | ||
| 276 | col.set_clickable(False) | ||
| 277 | col1 = gtk.TreeViewColumn('TYPE') | ||
| 278 | col1.set_min_width(130) | ||
| 279 | col1.set_max_width(140) | ||
| 280 | col2 = gtk.TreeViewColumn('INCLUDED') | ||
| 281 | col2.set_min_width(60) | ||
| 282 | col2.set_max_width(70) | ||
| 283 | pkgfmt_tree.append_column(col1) | ||
| 284 | pkgfmt_tree.append_column(col2) | ||
| 285 | cell = gtk.CellRendererText() | ||
| 286 | cell1 = gtk.CellRendererText() | ||
| 287 | cell1.set_property('width-chars', 10) | ||
| 288 | cell2 = gtk.CellRendererToggle() | ||
| 289 | cell2.set_property('activatable', True) | ||
| 290 | cell2.connect("toggled", self.pkgfmt_widget_toggle_cb, pkgfmt_store, 2) | ||
| 291 | col.pack_start(cell, True) | ||
| 292 | col1.pack_start(cell1, True) | ||
| 293 | col2.pack_end(cell2, True) | ||
| 294 | col.set_attributes(cell, text=0) | ||
| 295 | col1.set_attributes(cell1, text=1) | ||
| 296 | col2.set_attributes(cell2, active=2) | ||
| 297 | 213 | ||
| 298 | pkgfmt_store.set_sort_func(0, self.pkgfmt_widget_sort_func, None) | 214 | rootfs_format = "" |
| 299 | pkgfmt_store.set_sort_column_id(0, gtk.SORT_ASCENDING) | 215 | if curr_package_format: |
| 216 | rootfs_format = curr_package_format.split()[0] | ||
| 300 | 217 | ||
| 301 | scroll = gtk.ScrolledWindow() | 218 | tooltip = "Package format that is used to generate rootfs" |
| 302 | scroll.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) | 219 | rootfs_format_widget, rootfs_combo = self.gen_combo_widget(rootfs_format, all_package_format, tooltip) |
| 303 | scroll.set_shadow_type(gtk.SHADOW_IN) | 220 | rootfs_vbox.pack_start(rootfs_format_widget, expand=False, fill=False) |
| 304 | scroll.add(pkgfmt_tree) | ||
| 305 | scroll.set_size_request(200,60) | ||
| 306 | pkgfmt_hbox.pack_start(scroll, False, False, 0) | ||
| 307 | 221 | ||
| 308 | vbox = gtk.VBox(False, 6) | 222 | extra_vbox = gtk.VBox(False, 6) |
| 309 | pkgfmt_hbox.pack_start(vbox, False, False, 15) | 223 | pkgfmt_hbox.pack_start(extra_vbox, expand=False, fill=False) |
| 310 | 224 | ||
| 311 | up = gtk.Button() | 225 | label = self.gen_label_widget("Additional package formats") |
| 312 | image = gtk.Image() | 226 | extra_vbox.pack_start(label, expand=False, fill=False) |
| 313 | image.set_from_stock(gtk.STOCK_GO_UP, gtk.ICON_SIZE_MENU) | ||
| 314 | up.set_image(image) | ||
| 315 | up.set_size_request(50,30) | ||
| 316 | up.connect("clicked", self.pkgfmt_widget_up_clicked_cb, tree_selection) | ||
| 317 | vbox.pack_start(up, False, False, 5) | ||
| 318 | 227 | ||
| 319 | down = gtk.Button() | 228 | check_hbox = gtk.HBox(False, 12) |
| 320 | image = gtk.Image() | 229 | extra_vbox.pack_start(check_hbox, expand=False, fill=False) |
| 321 | image.set_from_stock(gtk.STOCK_GO_DOWN, gtk.ICON_SIZE_MENU) | 230 | for format in all_package_format: |
| 322 | down.set_image(image) | 231 | if format != rootfs_format: |
| 323 | down.set_size_request(50,30) | 232 | check_button = gtk.CheckButton(format) |
| 324 | down.connect("clicked", self.pkgfmt_widget_down_clicked_cb, tree_selection) | 233 | is_active = (format in curr_package_format.split()) |
| 325 | vbox.pack_start(down, False, False, 5) | 234 | check_button.set_active(is_active) |
| 326 | tree_selection.connect("changed", self.pkgfmt_widget_tree_selection_changed_cb, up, down) | 235 | check_hbox.pack_start(check_button, expand=False, fill=False) |
| 327 | 236 | ||
| 237 | tooltip = "Extra package formats to build" | ||
| 328 | info = HobInfoButton(tooltip, self) | 238 | info = HobInfoButton(tooltip, self) |
| 329 | pkgfmt_hbox.pack_start(info, expand=False, fill=False) | 239 | check_hbox.pack_end(info, expand=False, fill=False) |
| 240 | |||
| 241 | rootfs_combo.connect("changed", self.rootfs_combo_changed_cb, all_package_format, check_hbox) | ||
| 330 | 242 | ||
| 331 | pkgfmt_hbox.show_all() | 243 | pkgfmt_hbox.show_all() |
| 332 | 244 | ||
| 333 | return pkgfmt_hbox, pkgfmt_store | 245 | return pkgfmt_hbox, rootfs_combo, check_hbox |
| 334 | 246 | ||
| 335 | def editable_settings_cell_edited(self, cell, path_string, new_text, model): | 247 | def editable_settings_cell_edited(self, cell, path_string, new_text, model): |
| 336 | it = model.get_iter_from_string(path_string) | 248 | it = model.get_iter_from_string(path_string) |
| @@ -431,7 +343,6 @@ class AdvancedSettingDialog (CrumbsDialog): | |||
| 431 | self.max_threads = max_threads | 343 | self.max_threads = max_threads |
| 432 | 344 | ||
| 433 | # class members for internal use | 345 | # class members for internal use |
| 434 | self.pkgfmt_store = None | ||
| 435 | self.distro_combo = None | 346 | self.distro_combo = None |
| 436 | self.dldir_text = None | 347 | self.dldir_text = None |
| 437 | self.sstatedir_text = None | 348 | self.sstatedir_text = None |
| @@ -509,7 +420,7 @@ class AdvancedSettingDialog (CrumbsDialog): | |||
| 509 | label = self.gen_label_widget("<span weight=\"bold\">Packaging Format:</span>") | 420 | label = self.gen_label_widget("<span weight=\"bold\">Packaging Format:</span>") |
| 510 | tooltip = "Select package formats that will be used. " | 421 | tooltip = "Select package formats that will be used. " |
| 511 | tooltip += "The first format will be used for final image" | 422 | tooltip += "The first format will be used for final image" |
| 512 | pkgfmt_widget, self.pkgfmt_store = self.gen_pkgfmt_widget(self.configuration.curr_package_format, self.all_package_formats, tooltip) | 423 | pkgfmt_widget, self.rootfs_combo, self.check_hbox = self.gen_pkgfmt_widget(self.configuration.curr_package_format, self.all_package_formats, tooltip) |
| 513 | sub_vbox.pack_start(label, expand=False, fill=False) | 424 | sub_vbox.pack_start(label, expand=False, fill=False) |
| 514 | sub_vbox.pack_start(pkgfmt_widget, expand=False, fill=False) | 425 | sub_vbox.pack_start(pkgfmt_widget, expand=False, fill=False) |
| 515 | 426 | ||
| @@ -621,14 +532,12 @@ class AdvancedSettingDialog (CrumbsDialog): | |||
| 621 | def response_cb(self, dialog, response_id): | 532 | def response_cb(self, dialog, response_id): |
| 622 | self.variables = {} | 533 | self.variables = {} |
| 623 | 534 | ||
| 624 | self.configuration.curr_package_format = "" | 535 | package_format = [] |
| 625 | it = self.pkgfmt_store.get_iter_first() | 536 | package_format.append(self.rootfs_combo.get_active_text()) |
| 626 | while it: | 537 | for child in self.check_hbox: |
| 627 | value = self.pkgfmt_store.get_value(it, 2) | 538 | if isinstance(child, gtk.CheckButton) and child.get_active(): |
| 628 | if value: | 539 | package_format.append(child.get_label()) |
| 629 | self.configuration.curr_package_format += (self.pkgfmt_store.get_value(it, 1) + " ") | 540 | self.configuration.curr_package_format = " ".join(package_format) |
| 630 | it = self.pkgfmt_store.iter_next(it) | ||
| 631 | self.configuration.curr_package_format = self.configuration.curr_package_format.strip() | ||
| 632 | self.variables["PACKAGE_FORMAT"] = self.configuration.curr_package_format | 541 | self.variables["PACKAGE_FORMAT"] = self.configuration.curr_package_format |
| 633 | 542 | ||
| 634 | self.configuration.curr_distro = self.distro_combo.get_active_text() | 543 | self.configuration.curr_distro = self.distro_combo.get_active_text() |
