# # BitBake Graphical GTK User Interface # # Copyright (C) 2011-2012 Intel Corporation # # Authored by Joshua Lock # Authored by Dongxiao Xu # Authored by Shane Wang # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. import gtk import os from bb.ui.crumbs.hobwidget import HobInfoButton, HobButton, HobAltButton """ The following are convenience classes for implementing GNOME HIG compliant BitBake GUI's In summary: spacing = 12px, border-width = 6px """ class SettingsUIHelper(): def gen_label_widget(self, content): label = gtk.Label() label.set_alignment(0, 0) label.set_markup(content) label.show() return label def gen_label_info_widget(self, content, tooltip): table = gtk.Table(1, 10, False) label = self.gen_label_widget(content) info = HobInfoButton(tooltip, self) table.attach(label, 0, 1, 0, 1, xoptions=gtk.FILL) table.attach(info, 1, 2, 0, 1, xoptions=gtk.FILL, xpadding=10) return table def gen_spinner_widget(self, content, lower, upper, tooltip=""): hbox = gtk.HBox(False, 12) adjust = gtk.Adjustment(value=content, lower=lower, upper=upper, step_incr=1) spinner = gtk.SpinButton(adjustment=adjust, climb_rate=1, digits=0) spinner.set_value(content) hbox.pack_start(spinner, expand=False, fill=False) info = HobInfoButton(tooltip, self) hbox.pack_start(info, expand=False, fill=False) hbox.show_all() return hbox, spinner def gen_combo_widget(self, curr_item, all_item, tooltip=""): hbox = gtk.HBox(False, 12) combo = gtk.combo_box_new_text() hbox.pack_start(combo, expand=False, fill=False) index = 0 for item in all_item or []: combo.append_text(item) if item == curr_item: combo.set_active(index) index += 1 info = HobInfoButton(tooltip, self) hbox.pack_start(info, expand=False, fill=False) hbox.show_all() return hbox, combo def entry_widget_select_path_cb(self, action, parent, entry): dialog = gtk.FileChooserDialog("", parent, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER) text = entry.get_text() dialog.set_current_folder(text if len(text) > 0 else os.getcwd()) button = dialog.add_button("Cancel", gtk.RESPONSE_NO) HobAltButton.style_button(button) button = dialog.add_button("Open", gtk.RESPONSE_YES) HobButton.style_button(button) response = dialog.run() if response == gtk.RESPONSE_YES: path = dialog.get_filename() entry.set_text(path) dialog.destroy() def gen_entry_widget(self, content, parent, tooltip="", need_button=True): hbox = gtk.HBox(False, 12) entry = gtk.Entry() entry.set_text(content) entry.set_size_request(350,30) if need_button: table = gtk.Table(1, 10, False) hbox.pack_start(table, expand=True, fill=True) table.attach(entry, 0, 9, 0, 1, xoptions=gtk.SHRINK) image = gtk.Image() image.set_from_stock(gtk.STOCK_OPEN,gtk.ICON_SIZE_BUTTON) open_button = gtk.Button() open_button.set_image(image) open_button.connect("clicked", self.entry_widget_select_path_cb, parent, entry) table.attach(open_button, 9, 10, 0, 1, xoptions=gtk.SHRINK) else: hbox.pack_start(entry, expand=True, fill=True) if tooltip != "": info = HobInfoButton(tooltip, self) hbox.pack_start(info, expand=False, fill=False) hbox.show_all() return hbox, entry