class ExternalActionView(ActionView): builder_file = 'action_external' def create_ui(self): self.action = None self.system_types.set_choices(external_system_types, None) self.proxy = GtkComboBoxProxy(self.system_types) self.proxy.connect_widget() def set_action(self, action): self.proxy.update(action.options.get('system', 'make')) self.external_name.set_text(action.value) self.build_args.set_text(action.options.get('build_args', '')) def on_proxy__changed(self, cmb, obj): if self.action is None: return self.action.options['system'] = obj def on_external_name__changed(self, entry): self.action.value = entry.get_text() def on_build_args__changed(self, entry): self.action.options['build_args'] = entry.get_text()
def create_ui(self): def format_default(obj): return obj and _('<i>default</i>') or '' self.targets_list.set_columns([ Column('name', editable=True, expand=True), Column('is_default', format_func=format_default, use_markup=True, title='Default'), Column('action_count', title='Actions'), ]) self.targets_list.set_headers_visible(False) self.acts_list.set_columns([ Column('type', expand=False), Column('value', expand=True, ellipsize=True), ]) self.acts_list.set_headers_visible(False) self.acts_type.set_choices(action_types, None) self.proxy = GtkComboBoxProxy(self.acts_type) self.proxy.connect_widget() self.target_changed(None) self.action_changed(None) self.action_views = {} self.create_action_views() m = self._create_menu(self.TargetMenu, self.AddTarget, None, self.AddShellTarget, self.AddPythonTarget, None, self.AddImportTarget, None, self.ExecuteTargets) self.menu.add(m) for mi in self.AddImportTarget.get_proxies(): menu = gtk.Menu() for (name, key) in external_system_types: m = gtk.MenuItem(name) menu.append(m) m.connect('activate', self._on_import_target_activate, key) menu.show_all() mi.set_submenu(menu) m = self._create_menu(self.ActsMenu, self.AddActs) self.menu.add(m) self.menu.show_all()
class AttrSortCombo(gtk.HBox): """ A evil utility class that hijacks a objectlist and forces ordering onto its model. """ def __init__(self, objectlist, attribute_list, default): gtk.HBox.__init__(self, spacing=3) self.set_border_width(3) from pygtkhelpers.ui.widgets import SimpleComboBox from pygtkhelpers.proxy import GtkComboBoxProxy self._objectlist = objectlist self._combo = SimpleComboBox(attribute_list, default) self._proxy = GtkComboBoxProxy(self._combo) self._proxy.connect_widget() self._proxy.connect('changed', self._on_configuration_changed) self._order_button = gtk.ToggleToolButton( stock_id=gtk.STOCK_SORT_DESCENDING) self._order_button.connect('toggled', self._on_configuration_changed) self._label = gtk.Label('Sort') self.pack_start(self._label, expand=False) self.pack_start(self._combo) self.pack_start(self._order_button, expand=False) self._on_configuration_changed() self.show_all() def _on_configuration_changed(self, *k): order_descending = self._order_button.get_active() if order_descending: order = gtk.SORT_DESCENDING else: order = gtk.SORT_ASCENDING attribute = self._proxy.read() try: self._objectlist.sort_by(attribute, order) except AttributeError: model = self._objectlist.get_model() model.set_default_sort_func(_attr_sort_func, attribute) model.set_sort_column_id(-1, order)
class TargetActionView(ActionView): builder_file = 'action_target' def create_ui(self): self.block = False self.proxy = GtkComboBoxProxy(self.targets_combo) self.proxy.connect_widget() def set_action(self, action): self.block = True items = [('', '')] + [(t.name, t.name) for t in self.build.targets] self.targets_combo.set_choices(items, '') try: self.proxy.update(action.value) except KeyError: self.proxy.update(None) self.block = False def on_proxy__changed(self, cmb, obj): if self.action is None: return if self.block: return self.action.value = obj
def __init__(self, objectlist, attribute_list, default): gtk.HBox.__init__(self, spacing=3) self.set_border_width(3) from pygtkhelpers.ui.widgets import SimpleComboBox from pygtkhelpers.proxy import GtkComboBoxProxy self._objectlist = objectlist self._combo = SimpleComboBox(attribute_list, default) self._proxy = GtkComboBoxProxy(self._combo) self._proxy.connect_widget() self._proxy.connect('changed', self._on_configuration_changed) self._order_button = gtk.ToggleToolButton( stock_id=gtk.STOCK_SORT_DESCENDING) self._order_button.connect('toggled', self._on_configuration_changed) self._label = gtk.Label('Sort') self.pack_start(self._label, expand=False) self.pack_start(self._combo) self.pack_start(self._order_button, expand=False) self._on_configuration_changed() self.show_all()
def create_ui(self): self.block = False self.proxy = GtkComboBoxProxy(self.targets_combo) self.proxy.connect_widget()
def create_ui(self): self.action = None self.system_types.set_choices(external_system_types, None) self.proxy = GtkComboBoxProxy(self.system_types) self.proxy.connect_widget()
class PuilderView(SlaveView): builder_file = 'puild_properties' parent_window = None gsignal('cancel-request') gsignal('project-saved', gobject.TYPE_PYOBJECT) def create_ui(self): def format_default(obj): return obj and _('<i>default</i>') or '' self.targets_list.set_columns([ Column('name', editable=True, expand=True), Column('is_default', format_func=format_default, use_markup=True, title='Default'), Column('action_count', title='Actions'), ]) self.targets_list.set_headers_visible(False) self.acts_list.set_columns([ Column('type', expand=False), Column('value', expand=True, ellipsize=True), ]) self.acts_list.set_headers_visible(False) self.acts_type.set_choices(action_types, None) self.proxy = GtkComboBoxProxy(self.acts_type) self.proxy.connect_widget() self.target_changed(None) self.action_changed(None) self.action_views = {} self.create_action_views() m = self._create_menu(self.TargetMenu, self.AddTarget, None, self.AddShellTarget, self.AddPythonTarget, None, self.AddImportTarget, None, self.ExecuteTargets) self.menu.add(m) for mi in self.AddImportTarget.get_proxies(): menu = gtk.Menu() for (name, key) in external_system_types: m = gtk.MenuItem(name) menu.append(m) m.connect('activate', self._on_import_target_activate, key) menu.show_all() mi.set_submenu(menu) m = self._create_menu(self.ActsMenu, self.AddActs) self.menu.add(m) self.menu.show_all() def _on_import_target_activate(self, menuitem, type): t = self.build.create_new_target() t.name = 'External Build' self.targets_list.append(t, select=True) a = t.create_new_action() a.type = 'external' a.options['system'] = type self.acts_list.append(a, select=True) def set_execute_method(self, f): self.execute_method = f def on_SetDefault__activate(self, action): t = self.targets_list.get_selected() self.build.default = t self.targets_list.refresh() def on_ExecuteTargets__activate(self, action): t = self.targets_list.get_selected() if t is not None: self.execute_method(t, self.project) def _create_menu(self, base_act, *actions): newitem = base_act.create_menu_item() newitem.show() newmenu = gtk.Menu() newmenu.show() for act in actions: if act is None: m = gtk.SeparatorMenuItem() else: m = act.create_menu_item() m.show_all() newmenu.add(m) newitem.set_submenu(newmenu) return newitem def _create_popup(self, event, *actions): menu = gtk.Menu() for act in actions: if act is not None: mi = act.create_menu_item() else: mi = gtk.SeparatorMenuItem() menu.add(mi) menu.show_all() menu.popup(None, None, None, event.button, event.time) def on_targets_list__item_right_clicked(self, ol, target, event): self._create_popup(event, self.AddTarget, None, self.SetDefault, self.ExecuteTargets, None, self.DelCurrentTarget) def on_acts_list__item_right_clicked(self, ol, action, event): self.act_up_act.set_sensitive(action is not self.acts_list[0]) self.act_down_act.set_sensitive(action is not self.acts_list[-1]) self._create_popup(event, self.AddActs, None, self.act_up_act, self.act_down_act, None, self.DelCurrentActs) def create_action_views(self): for name in action_views: v = self.action_views[name] = action_views[name]() self.acts_holder.append_page(v.widget) noview = gtk.Label() self.acts_holder.append_page(noview) self.action_views['noview'] = noview def switch_action_view(self, name): n = self.acts_holder.page_num(self.action_views[name].widget) self.acts_holder.set_current_page(n) #XXX: block off a endless recursion WHY? if self.proxy.read() != name: self.proxy.update(name) def set_build(self, build): self.build = build self.targets_list.clear() self.targets_list.extend(self.build.targets) if len(self.targets_list): self.targets_list.selected_item = self.targets_list[0] for v in self.action_views.values(): v.build = build @staticmethod def format_project(proj): return '<b>%s</b>\n%s' % (proj.display_name, proj.source_directory) def set_project(self, project): self.project = project self.project_label.set_markup(self.format_project(project)) self.project_name_entry.set_text(project.display_name) def target_changed(self, target): selected = target is not None self.DelCurrentTarget.set_sensitive(selected) self.action_holder.set_sensitive(selected) self.acts_list.set_sensitive(selected) if selected: self.acts_list.clear() self.acts_list.extend(target.actions) if len(self.acts_list): self.acts_list.selected_item = self.acts_list[0] else: self.acts_list.clear() def action_changed(self, action): selected = action is not None self.action_holder.set_sensitive(selected) self.DelCurrentActs.set_sensitive(selected) #self.up_ac.set_sensitive(selected) #self.down_acts.set_sensitive(selected) if selected: self.action_type_changed(action) def action_type_changed(self, action): self.action_views[action.type]._set_action(action) self.switch_action_view(action.type) self.acts_list.update(action) def _clear_acts_holder(self): children = self.acts_holder.get_children() for c in children: self.acts_holder.remove(c) def revert(self): if self.project: self.project.reload() self.set_project(self.project) self.set_build(self.project.build) def on_save_button__clicked(self, button): self.build.dumpf(self.project.project_file) self.emit('project-saved', self.project) def on_close_button__clicked(self, button): self.revert() self.emit('cancel-request') def on_revert_button__clicked(self, button): self.revert() def on_targets_list__selection_changed(self, ol): self.target_changed(ol.selected_item) def on_AddTarget__activate(self, button): t = self.build.create_new_target('New Target') self.targets_list.append(t, select=True) start_editing_tv(self.targets_list) def on_AddPythonTarget__activate(self, action): t = self.build.create_new_target('New Target') self.targets_list.append(t, select=True) a = t.create_new_action() a.type = 'python' self.acts_list.append(a, select=True) def on_AddShellTarget__activate(self, action): t = self.build.create_new_target('New Target') self.targets_list.append(t, select=True) a = t.create_new_action() self.acts_list.append(a, select=True) def on_DelCurrentTarget__activate(self, button): t = self.targets_list.selected_item if self.confirm('Are you sure you want to delete target "%s"' % t.name): self.build.targets.remove(t) self.targets_list.remove(t) def on_AddActs__activate(self, button): target = self.targets_list.selected_item if target is None: return act = target.create_new_action() self.acts_list.append(act, select=True) def on_DelCurrentActs__activate(self, button): act = self.acts_list.selected_item target = self.targets_list.selected_item if act is None or target is None: return if self.confirm('Are you sure you want to remove this action?'): target.actions.remove(act) self.acts_list.remove(act) def on_act_up_act__activate(self, action): act = self.acts_list.selected_item self.acts_list.move_item_up(act) def on_act_down_act__activate(self, action): act = self.acts_list.selected_item self.acts_list.move_item_down(act) def on_acts_list__selection_changed(self, ol): self.action_changed(ol.selected_item) def on_proxy__changed(self, cmb, obj): act = self.acts_list.selected_item if not act: return print obj print cmb act.type = obj self.action_type_changed(act) def on_name_edit_button__clicked(self, button): if self.project is None: return if button.get_label() == gtk.STOCK_EDIT: self.project_name_entry.set_sensitive(True) button.set_label(gtk.STOCK_OK) self.project_name_entry.grab_focus() else: display_name = self.project_name_entry.get_text() if display_name: self.project.set_display_name(display_name) self.project_label.set_markup(self.project.markup) self.project_name_entry.set_sensitive(False) button.set_label(gtk.STOCK_EDIT) else: self.project_name_entry.set_text(self.project.display_name) self.project_name_entry.grab_focus() self.svc.error_dlg(_('Do not set empty project names')) def confirm(self, question): return yesno(question, parent=self.parent_window)