def __create_widgets(self): self.timeline = HIGFrame(_("Timeline Settings")) self.tl_mode_lbl = gtk.Label(_("Timeline view mode")) self.tl_kind_lbl = gtk.Label(_("Timeline view kind")) self.tl_mode = gtk.combo_box_new_text() self.tl_kind = gtk.combo_box_new_text() self.tabs = HIGFrame(_("Devices tab")) self.tabs_cbtn = gtk.CheckButton(_("Place close button")) self.sbar = HIGFrame(_("Statusbar")) self.sbar_tips = gtk.CheckButton(_("Show tips"))
def __create_widgets(self): self.vbox_main = HIGVBox() self.main_frame = HIGFrame("Profiles") #self.main_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.align = gtk.Alignment(0.0, 0.0, 1.0, 1.0) self.align.set_padding(0, 0, 12, 0) self.vbox = HIGVBox() self.profiles_sw = HIGScrolledWindow() #TreeView self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) #self.modelfilter = self.model.filter_new() self.profiles_tv = gtk.TreeView(self.model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Name"), renderer, text=0) self.profiles_tv.append_column(column) renderer_hint = gtk.CellRendererText() column_hint = gtk.TreeViewColumn(_("Hint"), renderer_hint, text=1) self.profiles_tv.append_column(column_hint) #self.profiles_tv.set_model(self.modelfilter) #Info self.hbox_info = HIGHBox() self.command_label = HIGEntryLabel('Command: ') self.command_entry = HIGTextEntry() self.command_entry.set_editable(False) #Buttons self.hbox_buttons = HIGHBox() self.wiz_button = HIGButton(title='Wizard', stock='gtk-convert') self.wiz_button.connect("clicked", self.new_wiz) self.edit_button = HIGButton(stock='gtk-edit') self.edit_button.connect("clicked", self.open_peditor) self.new_button = HIGButton(stock='gtk-new') self.new_button.connect("clicked", self.open_peditor) self.copy_button = HIGButton(stock='gtk-copy') self.copy_button.connect("clicked", self.copy_profiles) self.delete_button = HIGButton(stock=gtk.STOCK_DELETE) self.delete_button.connect('clicked', self.delete_profile) #Apply Buttons self.cancel_button = HIGButton(stock='gtk-close') self.cancel_button.connect("clicked", self.quit) self.connect("delete-event", self.quit)
def __create_widgets(self): """ Create widgets """ self.main_vbox = gtk.VBox() self.widgets = {} # UI Manager self.__create_ui_manager() # Table - contains menubar and toolbar # Menubar self.__create_menubar() # Toolbar self.__create_toolbar() self.display_frame = HIGFrame() self.display_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.display_frame.set_border_width(6) self.hbox_edit = gtk.HBox() self.hspacer = gtk.HPaned() self.hspacer.set_border_width(0) self.vbox_right = HIGVBox() self.vbox_left = HIGVBox() self.edit_mode_exp = gtk.Expander(_("Edit Modes")) self.edit_mode_box = self.create_edit_mode() self.notebook.set_scrollable(True) self.notebook.append_page(self.list_options_box, HIGEntryLabel(_("Option List"))) self.list_options_box.reload() self.__create_status_bar()
def __create_widgets(self): """ Create widgets """ self.main_vbox = gtk.VBox() self.widgets = {} #UI Manager self.__create_ui_manager() #Table - contains menubar and toolbar #Menubar self.__create_menubar() #Toolbar self.__create_toolbar() self.display_frame = HIGFrame() self.display_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.display_frame.set_border_width(6) self.hbox_edit = gtk.HBox() self.hspacer = gtk.HPaned() self.hspacer.set_border_width(0) self.vbox_right = HIGVBox() self.vbox_left = HIGVBox() self.edit_mode_exp = gtk.Expander(_('Edit Modes')) self.edit_mode_box = self.create_edit_mode() self.notebook.set_scrollable(True) self.notebook.append_page(self.list_options_box, HIGEntryLabel(_('Option List'))) self.list_options_box.reload() self.__create_status_bar()
def __create_widgets(self): self.vbox_main = HIGVBox() self.main_frame = HIGFrame("Profiles") #self.main_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.align = gtk.Alignment(0.0, 0.0, 1.0, 1.0) self.align.set_padding(0,0,12,0) self.vbox = HIGVBox() self.profiles_sw = HIGScrolledWindow() #TreeView self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) #self.modelfilter = self.model.filter_new() self.profiles_tv = gtk.TreeView(self.model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Name"), renderer, text=0) self.profiles_tv.append_column(column) renderer_hint = gtk.CellRendererText() column_hint = gtk.TreeViewColumn(_("Hint"), renderer_hint, text=1) self.profiles_tv.append_column(column_hint) #self.profiles_tv.set_model(self.modelfilter) #Info self.hbox_info = HIGHBox() self.command_label = HIGEntryLabel('Command: ') self.command_entry = HIGTextEntry() self.command_entry.set_editable(False) #Buttons self.hbox_buttons = HIGHBox() self.wiz_button = HIGButton(title='Wizard', stock='gtk-convert') self.wiz_button.connect("clicked", self.new_wiz) self.edit_button = HIGButton(stock='gtk-edit') self.edit_button.connect("clicked", self.open_peditor) self.new_button = HIGButton(stock='gtk-new') self.new_button.connect("clicked", self.open_peditor) self.copy_button = HIGButton(stock='gtk-copy') self.copy_button.connect("clicked", self.copy_profiles) self.delete_button = HIGButton(stock=gtk.STOCK_DELETE) self.delete_button.connect('clicked', self.delete_profile) #Apply Buttons self.cancel_button = HIGButton(stock='gtk-close') self.cancel_button.connect("clicked", self.quit) self.connect("delete-event", self.quit)
def __init__(self, daddy, profile=None): HIGWindow.__init__(self) self.daddy = daddy self.wtitle = _("Scheduling Profiles Editor") self.start_profile = profile # header self.title_markup = "<span size='16500' weight='heavy'>%s</span>" self.ttitle = HIGEntryLabel("") self.ttitle.set_line_wrap(False) self.ttitle.set_markup(self.title_markup % self.wtitle) self.umit_logo = gtk.Image() self.umit_logo.set_from_file(logo) # profiles name self.schedp_name_lbl = HIGEntryLabel(_("Scheduling Profile")) self.schedp_name = gtk.combo_box_entry_new_text() self.schedp_name.connect('changed', self._check_profile) # cron format self.cron_frame = HIGFrame(_("Schedule")) self.cron_minute_lbl = HIGEntryLabel(_("Minute")) self.cron_minute = gtk.Entry() self.cron_hour_lbl = HIGEntryLabel(_("Hour")) self.cron_hour = gtk.Entry() self.cron_day_lbl = HIGEntryLabel(_("Day of month")) self.cron_day = gtk.Entry() self.cron_month_lbl = HIGEntryLabel(_("Month")) self.cron_month = gtk.Entry() self.cron_weekday_lbl = HIGEntryLabel(_("Weekday")) self.cron_weekday = gtk.Entry() # bottom buttons self.help = HIGButton(stock=gtk.STOCK_HELP) self.help.connect('clicked', self._show_help) self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.apply.connect('clicked', self._save_profile) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.cancel.connect('clicked', self._exit) self.ok = HIGButton(stock=gtk.STOCK_OK) self.ok.connect('clicked', self._save_profile_and_leave) self.load_profiles() self.__set_props() self.__do_layout() self.connect('destroy', self._exit)
def __init__(self, name): HIGFrame.__init__(self, name) self.set_shadow_type(gtk.SHADOW_IN)
class ProfileManager(HIGWindow): """ Create a Profile Manager """ def __init__(self, daddy=None): HIGWindow.__init__(self, type=gtk.WINDOW_TOPLEVEL) self.set_title('Profile Manager') self.set_position(gtk.WIN_POS_CENTER) self.__create_widgets() self.add(self.vbox_main) self.__fill_widgets() self.__pack_widgets() self.__scan_notebook = None self.daddy = daddy def __create_widgets(self): self.vbox_main = HIGVBox() self.main_frame = HIGFrame("Profiles") #self.main_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.align = gtk.Alignment(0.0, 0.0, 1.0, 1.0) self.align.set_padding(0,0,12,0) self.vbox = HIGVBox() self.profiles_sw = HIGScrolledWindow() #TreeView self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) #self.modelfilter = self.model.filter_new() self.profiles_tv = gtk.TreeView(self.model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Name"), renderer, text=0) self.profiles_tv.append_column(column) renderer_hint = gtk.CellRendererText() column_hint = gtk.TreeViewColumn(_("Hint"), renderer_hint, text=1) self.profiles_tv.append_column(column_hint) #self.profiles_tv.set_model(self.modelfilter) #Info self.hbox_info = HIGHBox() self.command_label = HIGEntryLabel('Command: ') self.command_entry = HIGTextEntry() self.command_entry.set_editable(False) #Buttons self.hbox_buttons = HIGHBox() self.wiz_button = HIGButton(title='Wizard', stock='gtk-convert') self.wiz_button.connect("clicked", self.new_wiz) self.edit_button = HIGButton(stock='gtk-edit') self.edit_button.connect("clicked", self.open_peditor) self.new_button = HIGButton(stock='gtk-new') self.new_button.connect("clicked", self.open_peditor) self.copy_button = HIGButton(stock='gtk-copy') self.copy_button.connect("clicked", self.copy_profiles) self.delete_button = HIGButton(stock=gtk.STOCK_DELETE) self.delete_button.connect('clicked', self.delete_profile) #Apply Buttons self.cancel_button = HIGButton(stock='gtk-close') self.cancel_button.connect("clicked", self.quit) self.connect("delete-event", self.quit) def __fill_widgets(self): self.profiles = CommandProfile() self._reload_profile_list() #selection = self.profiles_tv.get_selection() #selection.connect("changed", self.change_nmap_command) self.profiles_tv.connect("cursor-changed", self.change_nmap_command) def __pack_widgets(self): """ Pack all widgets of windows """ self.vbox_main.pack_start(self.main_frame, True, True) self.main_frame.add(self.align) self.align.add(self.vbox) self.vbox.set_border_width(6) self.vbox.pack_start(self.profiles_sw, True, True, 0) self.hbox_info.pack_start(self.command_label, False,False,0) self.hbox_info.pack_start(self.command_entry, True, True, 0) self.vbox.pack_start(self.hbox_info, False,False,0) self.hbox_buttons.pack_end(self.cancel_button) self.hbox_buttons.pack_end(self.copy_button, True, True) self.hbox_buttons.pack_end(self.edit_button, True, True) self.hbox_buttons.pack_end(self.delete_button, True, True) self.hbox_buttons.pack_end(self.new_button, True, True) self.hbox_buttons.pack_end(self.wiz_button, True, True) self.hbox_buttons.set_spacing(6) self.vbox_main.pack_start(self.hbox_buttons, False, False) self.profiles_sw.set_size_request(400,170) self.profiles_sw.add(self.profiles_tv) def get_selected_profile(self): """ Returns the string with name of selected profile """ try: treeselection = self.profiles_tv.get_selection() (model,iter) = treeselection.get_selected() return model.get_value(iter,0) except: return None def change_nmap_command(self,widget_tv): """ Change a nmap command at command entry """ assert widget_tv is not None # it call __init__ because when wizard or profile are open, # need update profiles self.profiles.__init__() # update text entry of command self.command_entry.set_text(self.profiles.get_command( self.get_selected_profile())) def new_wiz(self,widget): w = Wizard() w.set_notebook(None) w.set_profilemanager(self.model) w.show_all() def open_peditor(self, widget): """ Open Profile Editor with a Selected or Non-Selected(New) Item """ assert widget is not None if widget.get_label() == "gtk-edit": # Edit profile selected if self.get_selected_profile() is not None: pe = ProfileEditor(self.get_selected_profile()) pe.set_notebook(self.__scan_notebook) pe.set_profilemanager(self.model) pe.show_all() else: # New Profile pe = ProfileEditor() pe.set_notebook(self.__scan_notebook) pe.set_profilemanager(self.model) pe.show_all() self._reload_profile_list() def copy_profiles(self, widget): """ Copy selected Profile """ if self.get_selected_profile() is None: return None d = ProfileName(_("Insert a profile name")) profile_name = d.run() if profile_name is None or profile_name=="": return None #get commands of selected profile profile_selected = self.get_selected_profile() command = self.profiles.get_command(profile_selected) hint = self.profiles.get_hint(profile_selected) description = self.profiles.get_description(profile_selected) annotation = self.profiles.get_annotation(profile_selected) #Options prof = self.profiles.get_profile(profile_selected) options_used = prof['options'] options = CommandConstructor(options_used) self.profiles.add_profile(profile_name,\ command=command,\ hint=hint,\ description=description,\ annotation=annotation,\ options=options.get_options()) myiter = self.model.insert_before(None, None) self.model.set_value(myiter, 0, profile_name) self.model.set_value(myiter,1, self.profiles.get_hint(profile_name)) treeselection = self.profiles_tv.get_selection() treeselection.select_iter(myiter) #(model,iter) = treeselection.get_selected() #model.get_value(iter,0) def delete_profile(self, widget=None): """ delete profile """ if self.get_selected_profile() is None: return None self.profiles.remove_profile(self.get_selected_profile()) #Update treeview treeselection = self.profiles_tv.get_selection() (model,iter) = treeselection.get_selected() model.remove(iter) # update text entry of command self.command_entry.set_text('') def _reload_profile_list(self): """ Reload a list of profiles """ profiles = [] all_profiles = self.profiles.sections() for profile in all_profiles: if self.profiles.get(profile, 'tool') == 'nmap': profiles.append(profile) profiles.sort() self.model.clear() for command in profiles: myiter = self.model.insert_before(None, None) self.model.set_value(myiter, 0, command) self.model.set_value(myiter,1, self.profiles.get_hint(command)) #self.model.append([command,self.profiles.get_hint(command)]) def set_notebook(self, notebook): self.__scan_notebook = notebook def quit(self, widget): self.destroy() def quit(self, widget, data=None): if self.daddy: self.daddy.running_pm = False self.destroy() else: gtk.main_quit()
def __init__(self, daddy=None): HIGWindow.__init__(self) self.daddy = daddy self.wtitle = _("Scan Scheduler Editor") # header self.title_markup = "<span size='16500' weight='heavy'>%s</span>" self.ttitle = HIGEntryLabel("") self.ttitle.set_line_wrap(False) self.ttitle.set_markup(self.title_markup % self.wtitle) self.umit_logo = gtk.Image() self.umit_logo.set_from_file(logo) # schemas name self.schema_name_lbl = HIGEntryLabel(_("Schema Name")) self.schema_name = gtk.combo_box_entry_new_text() self.schema_name.connect("changed", self._check_schema) # target and scan profiles # self.target_lbl = HIGEntryLabel(_("Target")) # self.target = gtk.Entry() self.scan_name_lbl = HIGEntryLabel(_("Scan Profile")) self.scan_name = ProfileCombo() self.scan_name.update() self.scan_name.set_active(0) self.scan_name.connect("changed", self._set_scan_command) # scan command self.scan_command_lbl = HIGEntryLabel(_("Command")) self.scan_command = gtk.Entry() # scheduling profile self.sched_name_lbl = HIGEntryLabel(_("Scheduling Profile")) self.sched_name = gtk.combo_box_new_text() self.sched_name_edit = gtk.Button(stock=gtk.STOCK_EDIT) blbl = self.sched_name_edit.get_children()[0].get_children()[0].get_children()[1] blbl.set_text(_("Edit Profiles")) self.sched_name_edit.connect("clicked", self._edit_schedprofiles) # schema settings self.schema_sett_frame = HIGFrame() self.setting_saveto = gtk.CheckButton(_("Save outputs to")) self.setting_saveto_entry = gtk.Entry() self.setting_saveto_browse = gtk.Button(_("...")) self.setting_saveto_browse.connect("clicked", self._select_saveto) self.setting_mailto = gtk.CheckButton(_("Send output to email")) self.setting_mailto_entry = gtk.Entry() self.setting_smtp_lbl = HIGEntryLabel(_("SMTP Schema")) self.setting_smtp = gtk.combo_box_new_text() self.setting_addtoinv = gtk.CheckButton(_("Add to the Inventory")) self.setting_enabled = gtk.CheckButton(_("Enabled")) # bottom buttons self.help = HIGButton(stock=gtk.STOCK_HELP) self.help.connect("clicked", self._show_help) self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.apply.connect("clicked", self._save_schema) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.cancel.connect("clicked", self._exit) self.ok = HIGButton(stock=gtk.STOCK_OK) self.ok.connect("clicked", self._save_schema_and_leave) self.load_smtp_schemas() self._set_scan_command(None) self.profile_running = None # no SchedProfileEditor instance is running. self._load_pscheds() self.load_schemas() self.__set_props() self.__do_layout() self.connect("destroy", self._exit)
class InterfaceEditor(HIGMainWindow): def __init__(self, daddy=None): HIGMainWindow.__init__(self) self._proprieties = None self.profile_box = None self.wizard_box = None self._current_edit_mode = None self._tooldesign = None self.profile_box_b = None self.wizard_box_b = None self.edit_mode_opt = None self._show_bar = True self.set_title(_("Interface Editor")) self.set_size_request(800, 400) self.set_position(gtk.WIN_POS_CENTER) # self.maximize() self.list_options_box = OptionList() self.notebook = HIGNotebook() self._proprieties = Proprieties() self.create_profile_edit() self.create_wizard_edit() self.obj = self.profile_box # Create Widgets self.__create_widgets() # Packing - Group of widgets self.__pack_widgets() self.__option_display() self.edit_mode_opt = "Options" self.connect("delete_event", self._destroy) self.opt_display.set_profile(self.profile_box) self.opt_display.set_wizard(self.wizard_box) self.profile_box.notebook.connect_after("need-save", self._update_menu_s) self.wizard_box.notebook.connect_after("need-save", self._update_menu_s) self.profile_box.notebook.connect_after("changed", self._update_menu) self.wizard_box.notebook.connect_after("changed", self._update_menu) self.opt_display.connect_after("need-save", self._update_menu_s) self.daddy = daddy def _update_menu(self, actions, others, page): obj = None if self.edit_mode_opt == "Profile": obj = self.profile_box elif self.edit_mode_opt == "Wizard": obj = self.wizard_box if obj == None: return # Check if there is something selected: current_page = obj.notebook.get_nth_page(obj.notebook.get_current_page()) if obj.notebook._old_select != None: # Section is Selected log.debug("Section is selected << updating toolbar") pass elif current_page._old_selected != None: # Item Selected log.debug("Item is selected << updating toolbar") pass def _update_menu_s(self, action, others, page): log.debug("<<< Update Main menubar ") save = self.main_action_group.get_action("Save") save_all = False if self.edit_mode_opt == "Profile": log.debug("profile updating menubar save") value = self.profile_box.is_changed() save.set_sensitive(value) elif self.edit_mode_opt == "Wizard": log.debug("wizard updating menubar save") value = self.wizard_box.is_changed() save.set_sensitive(value) elif self.edit_mode_opt == "Options": log.debug("options updating menubar save") value = self.opt_display.is_changed() save.set_sensitive(value) save_all = self.opt_display.is_changed() or self.wizard_box.is_changed() or self.profile_box.is_changed() self.main_action_group.get_action("Save all").set_sensitive(save_all) def _destroy(self, widget, event): self.quit(widget) def create_wizard_edit(self): """ create a profile area editing and connect to Undo Redo Manager to update the buttons """ if self.wizard_box != None: self.wizard_box.set_proprieties(self._proprieties) if self.wizard_box == None: self.wizard_box = WizardEdit(self.list_options_box.get_list_option()) self.wizard_box.set_notebook(self.notebook) def create_profile_edit(self): """ create a profile area editing and connect to Undo Redo Manager to update the buttons """ if self.profile_box != None: self.profile_box.set_proprieties(self._proprieties) if self.profile_box == None: self.profile_box = ProfileEdit(self.list_options_box.get_list_option()) command_manager.connect_after("changed", self._update_undo_redo_cb) self.profile_box.set_notebook(self.notebook) def _update_undo_redo_cb(self, action, other): """ Verify if exists undo and redo and update the buttons on the toolbar/menubar #DO: - sensitive -> True/False - Ajust tips #### """ can_undo = command_manager.can_undo() can_redo = command_manager.can_redo() self.main_action_group.get_action("Undo").set_sensitive(can_undo) self.main_action_group.get_action("Redo").set_sensitive(can_redo) if can_undo: self.main_action_group.get_action("Undo").tooltip = "sss" self.main_action_group.get_action("Undo").create_menu_item() def __create_widgets(self): """ Create widgets """ self.main_vbox = gtk.VBox() self.widgets = {} # UI Manager self.__create_ui_manager() # Table - contains menubar and toolbar # Menubar self.__create_menubar() # Toolbar self.__create_toolbar() self.display_frame = HIGFrame() self.display_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.display_frame.set_border_width(6) self.hbox_edit = gtk.HBox() self.hspacer = gtk.HPaned() self.hspacer.set_border_width(0) self.vbox_right = HIGVBox() self.vbox_left = HIGVBox() self.edit_mode_exp = gtk.Expander(_("Edit Modes")) self.edit_mode_box = self.create_edit_mode() self.notebook.set_scrollable(True) self.notebook.append_page(self.list_options_box, HIGEntryLabel(_("Option List"))) self.list_options_box.reload() self.__create_status_bar() def __option_display(self): self.display_frame.set_label("Options") self.opt_display = OptionDisplayMainFrame() self.opt_display.set_options_list(self.list_options_box) self.list_options_box.set_option_display(self.opt_display) self.display_frame.add_with_properties(self.opt_display) self.vbox_left.pack_start(self.display_frame, False, False) def __pack_widgets(self): """ Packing widgets of mainly windows """ self.add(self.main_vbox) # Pack widgets to main_box self.main_vbox.pack_start(self.hbox_edit, True, True) # Paned self.hbox_edit.pack_start(self.hspacer) separator = gtk.VSeparator() self.hspacer.pack1(self.vbox_left, False, False) self.hspacer.set_position(580) self.hspacer.pack2(self.vbox_right, False, True) # Edit Mode self.edit_mode_exp.add(self.edit_mode_box) self.edit_mode_exp.set_expanded(True) # Frame right self.vbox_right.pack_start(self.edit_mode_exp, False, False) self.vbox_right.pack_end(self.notebook, True, True) # Status bar self.main_vbox.pack_start(self.statusbar, False, False) def create_edit_mode(self): """ Create a treeview that contains a three edit modes returns vbox contains a treeview @return: returns the treeview with list of edit modes @rtype: vbox """ model = gtk.TreeStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING) self.edit_mode_tv = gtk.TreeView(model) self.edit_mode_tv.set_headers_visible(False) renderer = gtk.CellRendererText() cell_renderer_pix = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn() column.set_title(_("Name")) column.pack_start(cell_renderer_pix, False) column.add_attribute(cell_renderer_pix, "pixbuf", 0) column.pack_start(renderer, True) column.add_attribute(renderer, "text", 1) self.edit_mode_tv.append_column(column) myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon("gtk-edit", gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Profile") myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon("gtk-convert", gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Wizard") myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon(gtk.STOCK_DND_MULTIPLE, gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Options") selection = self.edit_mode_tv.get_selection() selection.select_iter(myiter) self.edit_mode_tv.connect("cursor-changed", self.change_edit_mode) vbox = HIGVBox() vbox.pack_start(self.edit_mode_tv, False, False) return vbox def change_edit_mode(self, widget): """ Change box of main screen and others changes at toolbar """ selection = self.edit_mode_tv.get_selection() (model, iter) = selection.get_selected() edit = model.get_value(iter, 1) if edit == "Options" and not self.edit_mode_opt == "Options": self._remove_previews() self.edit_mode_opt = "Options" self.display_frame.show_all() if self.notebook.get_n_pages > 1: self.notebook.remove_page(-1) self.notebook.remove_page(-1) self._set_menus_editor(False) elif edit == "Profile" and not self.edit_mode_opt == "Profile": self._remove_previews() self.edit_mode_opt = "Profile" bool = self.profile_box_b == None self.create_profile_edit() if bool: self.vbox_left.pack_start(self.profile_box, True, True) self.profile_box_b = True log.debug("<<< show :: Profile Edit Mode :: ") self.profile_box.show_all() self.profile_box.notebook.put_on_page() self._create_tooldesign() self._set_menus_editor(True) self.profile_box.show() self.obj = self.profile_box elif edit == "Wizard" and not self.edit_mode_opt == "Wizard": log.debug("<<< show :: Wizard Edit Mode - basic mode ") self._remove_previews() self.edit_mode_opt = "Wizard" self._set_menus_editor(True) bool = self.wizard_box_b == None self.create_wizard_edit() if bool: self.vbox_left.pack_start(self.wizard_box, True, True) self.wizard_box_b = True self.wizard_box.show_all() self.wizard_box.notebook.put_on_page() self._create_tooldesign() self.wizard_box.show() self.obj = self.wizard_box def _remove_previews(self): """ Remove the previews Edit mode """ # XXX Lack the toolbars and some ajusts if self.edit_mode_opt == "Profile": # self.vbox_left.remove(self.profile_box) self.profile_box.hide_all() elif self.edit_mode_opt == "Options": # self.vbox_left.remove(self.display_frame) self.display_frame.hide_all() elif self.edit_mode_opt == "Wizard": self.wizard_box.hide_all() def _create_tooldesign(self): """ create tooldesign that contains widgets to put in work area of edit profile """ if self._tooldesign == None: self._tooldesign = ToolDesign() if self._proprieties == None: self._proprieties = Proprieties() if self.notebook.get_n_pages() < 2: self.notebook.append_page(self._tooldesign, HIGEntryLabel(_("Design"))) self.notebook.append_page(self._proprieties, HIGEntryLabel(_("Proprieties"))) self.notebook.show_all() if self.edit_mode_opt == "Profile": obj = self.profile_box elif self.edit_mode_opt == "Wizard": obj = self.wizard_box obj.set_proprieties(self._proprieties) profilecore = obj.get_profilecore() self._proprieties.set_profilecore(profilecore) def __optinlist_from_group(self): """ After Select a Option from a group this treeview refresh options lists that each group contains """ model = gtk.TreeStore(gobject.TYPE_STRING) self.profile_optionlist_tvw = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) self.profile_optionlist_tvw.append_column(column) self.wizard_file = PWOptions(profile_editor) group_list = self.wizard_file.read("group", "name", "group") for i, v in group_list: myiter = model.insert_after(None, None) model.set_value(myiter, 0, i) def __proprieties(self): """ Create a editable options - Proprieties of Options """ # Create a listview with options self.prop_frame_option = gtk.Frame() self.prop_frame_option.set_label("List Options") self.prop_frame_option.set_shadow_type(gtk.SHADOW_ETCHED_OUT) prop_sw = HIGScrolledWindow() prop_sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) prop_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) model = gtk.TreeStore(gobject.TYPE_STRING) treeview = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) treeview.append_column(column) self.prop_frame_option.add(treeview) self.prop_frame_option.add(prop_sw) """ Box Edit """ # Frame self.prop_frame = gtk.Frame() self.prop_frame.set_label("Edit Option") self.prop_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.prop_exp = HIGExpander("Proprieties") label = gtk.Label("s") self.prop_exp.add(label) self.prop_frame.add(self.prop_exp) def __grouplist(self): """ Group List, Tree view """ model = gtk.TreeStore(gobject.TYPE_STRING) self.treeview = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) self.treeview.append_column(column) self.wizard_file = PWOptions(profile_editor) group_list = self.wizard_file.read("group", "name", "group") for i, v in group_list: myiter = model.insert_after(None, None) model.set_value(myiter, 0, i) def __create_toolbar(self): """ Create a Main Toolbar of Profile Wizard Editor """ self.toolbar = self.ui_manager.get_widget("/toolbar") self.toolbar.set_style(gtk.TOOLBAR_BOTH) self.main_vbox.pack_start(self.toolbar, False, True, 0) self.toolbar.show_all() def save_all(self, widget): # if self.opt_display.is_changed(): # XXX BUG (is_changed method is in OptionList) self.list_options_box.save() if self.profile_box.is_changed(): self.profile_box.save() if self.wizard_box.is_changed(): self.wizard_box.save() def _set_menus_editor(self, value): self.main_action_group.get_action("Items").set_sensitive(value) self.main_action_group.get_action("Section").set_sensitive(value) if self.edit_mode_opt != None: self._update_menu_s(None, None, None) def save(self, widget): if self.edit_mode_opt == "Options": obj = self.list_options_box elif self.edit_mode_opt == "Profile": obj = self.profile_box elif self.edit_mode_opt == "Wizard": obj = self.wizard_box obj.save() def quit(self, widget): """ Leaving of Interface Editor """ if self.daddy: # Run from Umit Network Scanner by menus self.daddy.running_ie = False self.destroy() else: # Run from command line directly gtk.main_quit() def np(self, widget): print "Don't work yet" def __create_ui_manager(self): """ Create a UI Manager """ self.ui_manager = gtk.UIManager() self.main_action_group = gtk.ActionGroup("MainActionGroup") self.main_actions = [ ("File", None, _("_File"), None), ("Save", gtk.STOCK_SAVE, _("_Save"), None, _("Save"), self.save), ("Save all", gtk.STOCK_SAVE, _("_Save all"), None, _("Save all"), self.save_all), ("Quit", gtk.STOCK_QUIT, _("_Quit"), None, _("Quit"), self.quit), ("Edit", None, _("Edit"), None), ("Undo", gtk.STOCK_UNDO, _("_Undo"), "<Control>z", _("Undo"), self._undo_cb), ("Redo", gtk.STOCK_REDO, _("_Redo"), "<Control>r", _("Redo"), self._redo_cb), ("View", None, _("View"), None), ("Right Bar", None, _("_Right Bar"), None, _("Right Bar"), self._hide_right), ("Tools", None, _("Tools"), None), ("Section", None, _("Section"), None), ("Items", None, _("Items"), None), ("Insert label", None, _("_Label"), None, _("Insert label"), self.np), ("New Section", None, _("_New Section"), None, _("New Section"), self._add_section), ( "Remove Section Label", None, _("_Remove Section Label"), None, _("Remove Section Label"), self._remove_section, ), ("Remove Section", None, _("_Remove Section"), None, _("Remove Section"), self._remove_section), ("Add new voidplace", None, _("_Add new voidplace"), None, _("Add new voidplace"), self._add_place), ("Remove option", None, _("_Remove Option"), None, _("Remove option"), self._remove_option), ("Remove voidplace", None, _("_Remove voidplace"), None, _("Remove voidplace"), self._remove_option), ("Add option selected", None, _("_Add option selected"), None, _("Add option selected"), self.np), ("Move Section Left", None, _("_Move Section Left"), None, _("Move Section Left"), self._move_section_left), ( "Move Section Right", None, _("_Move Section Right"), None, _("Move Section Right"), self._move_section_right, ), ("Move Item Down", None, _("_Move Item Down"), None, _("Move Item Down"), self._move_item_down), ("Move Item Up", None, _("_Move Item Up"), None, _("Move Item Up"), self._move_item_up), ("Help", None, _("Help"), None), ("About", gtk.STOCK_PASTE, _("_About"), None, _("About"), self.np), ] self.ui_info = """ <menubar> <menu action='File'> <menuitem action='Save'/> <menuitem action='Save all'/> <separator/> <menuitem action='Quit'/> </menu> <menu action='Edit'> <menuitem action='Undo'/> <menuitem action='Redo'/> </menu> <menu action='View'> <menuitem action='Right Bar'/> </menu> <menu action='Section'> <menuitem action='Insert label'/> <menuitem action='New Section'/> <menuitem action='Remove Section Label'/> <menuitem action='Remove Section'/> <menuitem action='Move Section Left'/> <menuitem action='Move Section Right'/> </menu> <menu action='Items'> <menuitem action='Add new voidplace'/> <menuitem action='Remove option'/> <menuitem action='Remove voidplace'/> <menuitem action='Move Item Up'/> <menuitem action='Move Item Down'/> </menu> </menubar> <toolbar> <toolitem action='Save'/> <toolitem action='Save all'/> <separator/> <toolitem action='Undo'/> <toolitem action='Redo'/> <separator/> <toolitem action='Quit'/> </toolbar> """ self.main_action_group.add_actions(self.main_actions) self.main_accel_group = gtk.AccelGroup() for action in self.main_action_group.list_actions(): action.set_accel_group(self.main_accel_group) action.connect_accelerator() # ENABLE = FALSE self.main_action_group.get_action("Save all").set_sensitive(False) self.main_action_group.get_action("Save").set_sensitive(False) self.main_action_group.get_action("Undo").set_sensitive(False) self.main_action_group.get_action("Redo").set_sensitive(False) self._set_menus_editor(False) # END ENABLE self.ui_manager.insert_action_group(self.main_action_group, 0) self.ui_manager.add_ui_from_string(self.ui_info) self.add_accel_group(self.main_accel_group) # ACTIONS def _add_section(self, widget): self.obj._toolbar._add_section(widget) def _remove_section(self, widget): self.obj._toolbar._remove_section(widget) def _add_place(self, widget): self.obj._toolbar._add_place(widget) def _move_item_up(self, widget): self.obj._toolbar._move_item_down(widget) def _move_item_down(self, widget): self.obj._toolbar._move_item_down(widget) def _move_section_left(self, widget): self.obj._toolbar._move_section_left(widget) def _move_section_right(self, widget): self.obj._toolbar._move_section_right(widget) def _remove_option(self, widget): self.obj._toolbar._remove_option(widget) def _hide_right(self, widget): if self._show_bar: self.vbox_right.hide_all() else: self.vbox_right.show_all() self._show_bar = not self._show_bar def _undo_cb(self, widget): command_manager.do_undo() def _redo_cb(self, widget): command_manager.do_redo() def __create_menubar(self): """ Create a menubar """ self.menubar = self.ui_manager.get_widget("/menubar") self.main_vbox.pack_start(self.menubar, False, True, 0) self.menubar.show_all() def __create_status_bar(self): """ create status bar """ self.statusbar = gtk.Statusbar() context_id = self.statusbar.push(1, " ") self.statusbar.show()
def __layout(self): """ Layout widgets """ main_vbox = HIGVBox() main_vbox.set_border_width(5) main_vbox.set_spacing(12) main_hpaned = gtk.HPaned() btns_hbox = HIGHBox() left_box = HIGVBox() right_box = gtk.VBox() header_hbox = HIGHBox() hostdetect_hbox = HIGHBox() targetl_hbox = HIGHBox() targetv_hbox = HIGHBox() targetr_hbox = HIGHBox() # header header_hbox._pack_expand_fill(self.ttitle) header_hbox._pack_noexpand_nofill(self.umit_logo) # network list netframe = HIGFrame(_("Network list")) settings_align = gtk.Alignment(0.5, 0.5, 1, 1) settings_align.set_padding(6, 0, 12, 0) nbox = HIGVBox() entry = gtk.Entry() entry.set_text(_("Sample 192.168.254.0/24")) nbox._pack_noexpand_nofill(entry) addnw_hbox = HIGHBox() addnw_hbox._pack_noexpand_nofill(self.addnetworks) nbox.pack_end(addnw_hbox, False, False, 0) self.networks_box = nbox settings_align.add(nbox) netframe.add(settings_align) # detection hostdetect_hbox._pack_noexpand_nofill(self.netdetect_btn) hostdetect_hbox._pack_noexpand_nofill(self.hostdetect_btn) # target list targetl_hbox._pack_noexpand_nofill(self.target_lbl) targetv_hbox._pack_expand_fill(self.tview) targetr_hbox.pack_end(self.target_remove, False, False, 0) # bottom buttons btns_hbox.set_homogeneous(True) btns_hbox._pack_expand_fill(self.help) btns_hbox._pack_expand_fill(hig_box_space_holder()) btns_hbox._pack_expand_fill(self.cancel) btns_hbox._pack_expand_fill(self.apply) # change apply button stock text lbl = self.apply.get_children()[0].get_children()[0].get_children()[1] lbl.set_text(_("Use target list")) left_box._pack_noexpand_nofill(netframe) left_box.pack_end(hostdetect_hbox, False, False, 0) right_box.pack_start(targetl_hbox, False, False, 0) right_box.pack_start(targetv_hbox, True, True, 6) right_box.pack_start(targetr_hbox, False, False, 0) left_align = gtk.Alignment(0.5, 0.5, 1, 1) left_align.set_padding(0, 0, 0, 6) left_align.add(left_box) right_align = gtk.Alignment(0.5, 0.5, 1, 1) right_align.set_padding(0, 0, 6, 0) right_align.add(right_box) main_hpaned.add1(left_align) main_hpaned.add2(right_align) main_vbox._pack_noexpand_nofill(header_hbox) main_vbox._pack_noexpand_nofill(gtk.HSeparator()) main_vbox._pack_expand_fill(main_hpaned) main_vbox.pack_end(btns_hbox, False, False, 0) self.add(main_vbox)
class ProfileManager(HIGWindow): """ Create a Profile Manager """ def __init__(self, daddy=None): HIGWindow.__init__(self, type=gtk.WINDOW_TOPLEVEL) self.set_title('Profile Manager') self.set_position(gtk.WIN_POS_CENTER) self.__create_widgets() self.add(self.vbox_main) self.__fill_widgets() self.__pack_widgets() self.__scan_notebook = None self.daddy = daddy def __create_widgets(self): self.vbox_main = HIGVBox() self.main_frame = HIGFrame("Profiles") #self.main_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.align = gtk.Alignment(0.0, 0.0, 1.0, 1.0) self.align.set_padding(0, 0, 12, 0) self.vbox = HIGVBox() self.profiles_sw = HIGScrolledWindow() #TreeView self.model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING) #self.modelfilter = self.model.filter_new() self.profiles_tv = gtk.TreeView(self.model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn(_("Name"), renderer, text=0) self.profiles_tv.append_column(column) renderer_hint = gtk.CellRendererText() column_hint = gtk.TreeViewColumn(_("Hint"), renderer_hint, text=1) self.profiles_tv.append_column(column_hint) #self.profiles_tv.set_model(self.modelfilter) #Info self.hbox_info = HIGHBox() self.command_label = HIGEntryLabel('Command: ') self.command_entry = HIGTextEntry() self.command_entry.set_editable(False) #Buttons self.hbox_buttons = HIGHBox() self.wiz_button = HIGButton(title='Wizard', stock='gtk-convert') self.wiz_button.connect("clicked", self.new_wiz) self.edit_button = HIGButton(stock='gtk-edit') self.edit_button.connect("clicked", self.open_peditor) self.new_button = HIGButton(stock='gtk-new') self.new_button.connect("clicked", self.open_peditor) self.copy_button = HIGButton(stock='gtk-copy') self.copy_button.connect("clicked", self.copy_profiles) self.delete_button = HIGButton(stock=gtk.STOCK_DELETE) self.delete_button.connect('clicked', self.delete_profile) #Apply Buttons self.cancel_button = HIGButton(stock='gtk-close') self.cancel_button.connect("clicked", self.quit) self.connect("delete-event", self.quit) def __fill_widgets(self): self.profiles = CommandProfile() self._reload_profile_list() #selection = self.profiles_tv.get_selection() #selection.connect("changed", self.change_nmap_command) self.profiles_tv.connect("cursor-changed", self.change_nmap_command) def __pack_widgets(self): """ Pack all widgets of windows """ self.vbox_main.pack_start(self.main_frame, True, True) self.main_frame.add(self.align) self.align.add(self.vbox) self.vbox.set_border_width(6) self.vbox.pack_start(self.profiles_sw, True, True, 0) self.hbox_info.pack_start(self.command_label, False, False, 0) self.hbox_info.pack_start(self.command_entry, True, True, 0) self.vbox.pack_start(self.hbox_info, False, False, 0) self.hbox_buttons.pack_end(self.cancel_button) self.hbox_buttons.pack_end(self.copy_button, True, True) self.hbox_buttons.pack_end(self.edit_button, True, True) self.hbox_buttons.pack_end(self.delete_button, True, True) self.hbox_buttons.pack_end(self.new_button, True, True) self.hbox_buttons.pack_end(self.wiz_button, True, True) self.hbox_buttons.set_spacing(6) self.vbox_main.pack_start(self.hbox_buttons, False, False) self.profiles_sw.set_size_request(400, 170) self.profiles_sw.add(self.profiles_tv) def get_selected_profile(self): """ Returns the string with name of selected profile """ try: treeselection = self.profiles_tv.get_selection() (model, iter) = treeselection.get_selected() return model.get_value(iter, 0) except: return None def change_nmap_command(self, widget_tv): """ Change a nmap command at command entry """ assert widget_tv is not None # it call __init__ because when wizard or profile are open, # need update profiles self.profiles.__init__() # update text entry of command self.command_entry.set_text( self.profiles.get_command(self.get_selected_profile())) def new_wiz(self, widget): w = Wizard() w.set_notebook(None) w.set_profilemanager(self.model) w.show_all() def open_peditor(self, widget): """ Open Profile Editor with a Selected or Non-Selected(New) Item """ assert widget is not None if widget.get_label() == "gtk-edit": # Edit profile selected if self.get_selected_profile() is not None: pe = ProfileEditor(self.get_selected_profile()) pe.set_notebook(self.__scan_notebook) pe.set_profilemanager(self.model) pe.show_all() else: # New Profile pe = ProfileEditor() pe.set_notebook(self.__scan_notebook) pe.set_profilemanager(self.model) pe.show_all() self._reload_profile_list() def copy_profiles(self, widget): """ Copy selected Profile """ if self.get_selected_profile() is None: return None d = ProfileName(_("Insert a profile name")) profile_name = d.run() if profile_name is None or profile_name == "": return None #get commands of selected profile profile_selected = self.get_selected_profile() command = self.profiles.get_command(profile_selected) hint = self.profiles.get_hint(profile_selected) description = self.profiles.get_description(profile_selected) annotation = self.profiles.get_annotation(profile_selected) #Options prof = self.profiles.get_profile(profile_selected) options_used = prof['options'] options = CommandConstructor(options_used) self.profiles.add_profile(profile_name,\ command=command,\ hint=hint,\ description=description,\ annotation=annotation,\ options=options.get_options()) myiter = self.model.insert_before(None, None) self.model.set_value(myiter, 0, profile_name) self.model.set_value(myiter, 1, self.profiles.get_hint(profile_name)) treeselection = self.profiles_tv.get_selection() treeselection.select_iter(myiter) #(model,iter) = treeselection.get_selected() #model.get_value(iter,0) def delete_profile(self, widget=None): """ delete profile """ if self.get_selected_profile() is None: return None self.profiles.remove_profile(self.get_selected_profile()) #Update treeview treeselection = self.profiles_tv.get_selection() (model, iter) = treeselection.get_selected() model.remove(iter) # update text entry of command self.command_entry.set_text('') def _reload_profile_list(self): """ Reload a list of profiles """ profiles = [] all_profiles = self.profiles.sections() for profile in all_profiles: if self.profiles.get(profile, 'tool') == 'nmap': profiles.append(profile) profiles.sort() self.model.clear() for command in profiles: myiter = self.model.insert_before(None, None) self.model.set_value(myiter, 0, command) self.model.set_value(myiter, 1, self.profiles.get_hint(command)) #self.model.append([command,self.profiles.get_hint(command)]) def set_notebook(self, notebook): self.__scan_notebook = notebook def quit(self, widget): self.destroy() def quit(self, widget, data=None): if self.daddy: self.daddy.running_pm = False self.destroy() else: gtk.main_quit()
class InterfaceEditor(HIGMainWindow): def __init__(self, daddy=None): HIGMainWindow.__init__(self) self._proprieties = None self.profile_box = None self.wizard_box = None self._current_edit_mode = None self._tooldesign = None self.profile_box_b = None self.wizard_box_b = None self.edit_mode_opt = None self._show_bar = True self.set_title(_('Interface Editor')) self.set_size_request(800, 400) self.set_position(gtk.WIN_POS_CENTER) #self.maximize() self.list_options_box = OptionList() self.notebook = HIGNotebook() self._proprieties = Proprieties() self.create_profile_edit() self.create_wizard_edit() self.obj = self.profile_box #Create Widgets self.__create_widgets() #Packing - Group of widgets self.__pack_widgets() self.__option_display() self.edit_mode_opt = "Options" self.connect("delete_event", self._destroy) self.opt_display.set_profile(self.profile_box) self.opt_display.set_wizard(self.wizard_box) self.profile_box.notebook.connect_after('need-save', self._update_menu_s) self.wizard_box.notebook.connect_after('need-save', self._update_menu_s) self.profile_box.notebook.connect_after('changed', self._update_menu) self.wizard_box.notebook.connect_after('changed', self._update_menu) self.opt_display.connect_after('need-save', self._update_menu_s) self.daddy = daddy def _update_menu(self, actions, others, page): obj = None if self.edit_mode_opt == "Profile": obj = self.profile_box elif self.edit_mode_opt == "Wizard": obj = self.wizard_box if obj == None: return #Check if there is something selected: current_page = obj.notebook.get_nth_page( obj.notebook.get_current_page()) if obj.notebook._old_select != None: #Section is Selected log.debug('Section is selected << updating toolbar') pass elif current_page._old_selected != None: #Item Selected log.debug('Item is selected << updating toolbar') pass def _update_menu_s(self, action, others, page): log.debug('<<< Update Main menubar ') save = self.main_action_group.get_action('Save') save_all = False if self.edit_mode_opt == "Profile": log.debug('profile updating menubar save') value = self.profile_box.is_changed() save.set_sensitive(value) elif self.edit_mode_opt == "Wizard": log.debug('wizard updating menubar save') value = self.wizard_box.is_changed() save.set_sensitive(value) elif self.edit_mode_opt == 'Options': log.debug('options updating menubar save') value = self.opt_display.is_changed() save.set_sensitive(value) save_all = self.opt_display.is_changed() or \ self.wizard_box.is_changed() or self.profile_box.is_changed() self.main_action_group.get_action('Save all').set_sensitive(save_all) def _destroy(self, widget, event): self.quit(widget) def create_wizard_edit(self): ''' create a profile area editing and connect to Undo Redo Manager to update the buttons ''' if self.wizard_box != None: self.wizard_box.set_proprieties(self._proprieties) if self.wizard_box == None: self.wizard_box = WizardEdit( self.list_options_box.get_list_option()) self.wizard_box.set_notebook(self.notebook) def create_profile_edit(self): ''' create a profile area editing and connect to Undo Redo Manager to update the buttons ''' if self.profile_box != None: self.profile_box.set_proprieties(self._proprieties) if self.profile_box == None: self.profile_box = ProfileEdit( self.list_options_box.get_list_option()) command_manager.connect_after('changed', self._update_undo_redo_cb) self.profile_box.set_notebook(self.notebook) def _update_undo_redo_cb(self, action, other): ''' Verify if exists undo and redo and update the buttons on the toolbar/menubar #DO: - sensitive -> True/False - Ajust tips #### ''' can_undo = command_manager.can_undo() can_redo = command_manager.can_redo() self.main_action_group.get_action('Undo').set_sensitive(can_undo) self.main_action_group.get_action('Redo').set_sensitive(can_redo) if can_undo: self.main_action_group.get_action('Undo').tooltip = 'sss' self.main_action_group.get_action('Undo').create_menu_item() def __create_widgets(self): """ Create widgets """ self.main_vbox = gtk.VBox() self.widgets = {} #UI Manager self.__create_ui_manager() #Table - contains menubar and toolbar #Menubar self.__create_menubar() #Toolbar self.__create_toolbar() self.display_frame = HIGFrame() self.display_frame.set_shadow_type(gtk.SHADOW_ETCHED_IN) self.display_frame.set_border_width(6) self.hbox_edit = gtk.HBox() self.hspacer = gtk.HPaned() self.hspacer.set_border_width(0) self.vbox_right = HIGVBox() self.vbox_left = HIGVBox() self.edit_mode_exp = gtk.Expander(_('Edit Modes')) self.edit_mode_box = self.create_edit_mode() self.notebook.set_scrollable(True) self.notebook.append_page(self.list_options_box, HIGEntryLabel(_('Option List'))) self.list_options_box.reload() self.__create_status_bar() def __option_display(self): self.display_frame.set_label('Options') self.opt_display = OptionDisplayMainFrame() self.opt_display.set_options_list(self.list_options_box) self.list_options_box.set_option_display(self.opt_display) self.display_frame.add_with_properties(self.opt_display) self.vbox_left.pack_start(self.display_frame, False, False) def __pack_widgets(self): """ Packing widgets of mainly windows """ self.add(self.main_vbox) #Pack widgets to main_box self.main_vbox.pack_start(self.hbox_edit, True, True) #Paned self.hbox_edit.pack_start(self.hspacer) separator = gtk.VSeparator() self.hspacer.pack1(self.vbox_left, False, False) self.hspacer.set_position(580) self.hspacer.pack2(self.vbox_right, False, True) #Edit Mode self.edit_mode_exp.add(self.edit_mode_box) self.edit_mode_exp.set_expanded(True) #Frame right self.vbox_right.pack_start(self.edit_mode_exp, False, False) self.vbox_right.pack_end(self.notebook, True, True) #Status bar self.main_vbox.pack_start(self.statusbar, False, False) def create_edit_mode(self): """ Create a treeview that contains a three edit modes returns vbox contains a treeview @return: returns the treeview with list of edit modes @rtype: vbox """ model = gtk.TreeStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING) self.edit_mode_tv = gtk.TreeView(model) self.edit_mode_tv.set_headers_visible(False) renderer = gtk.CellRendererText() cell_renderer_pix = gtk.CellRendererPixbuf() column = gtk.TreeViewColumn() column.set_title(_('Name')) column.pack_start(cell_renderer_pix, False) column.add_attribute(cell_renderer_pix, 'pixbuf', 0) column.pack_start(renderer, True) column.add_attribute(renderer, 'text', 1) self.edit_mode_tv.append_column(column) myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon('gtk-edit', gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Profile") myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon('gtk-convert', gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Wizard") myiter = model.insert_before(None, None) icon = gtk.Image() icon = icon.render_icon(gtk.STOCK_DND_MULTIPLE, gtk.ICON_SIZE_MENU) model.set_value(myiter, 0, icon) model.set_value(myiter, 1, "Options") selection = self.edit_mode_tv.get_selection() selection.select_iter(myiter) self.edit_mode_tv.connect("cursor-changed", self.change_edit_mode) vbox = HIGVBox() vbox.pack_start(self.edit_mode_tv, False, False) return vbox def change_edit_mode(self, widget): """ Change box of main screen and others changes at toolbar """ selection = self.edit_mode_tv.get_selection() (model, iter) = selection.get_selected() edit = model.get_value(iter, 1) if edit == "Options" and not self.edit_mode_opt == "Options": self._remove_previews() self.edit_mode_opt = "Options" self.display_frame.show_all() if self.notebook.get_n_pages > 1: self.notebook.remove_page(-1) self.notebook.remove_page(-1) self._set_menus_editor(False) elif edit == "Profile" and not self.edit_mode_opt == "Profile": self._remove_previews() self.edit_mode_opt = "Profile" bool = self.profile_box_b == None self.create_profile_edit() if bool: self.vbox_left.pack_start(self.profile_box, True, True) self.profile_box_b = True log.debug('<<< show :: Profile Edit Mode :: ') self.profile_box.show_all() self.profile_box.notebook.put_on_page() self._create_tooldesign() self._set_menus_editor(True) self.profile_box.show() self.obj = self.profile_box elif edit == "Wizard" and not self.edit_mode_opt == "Wizard": log.debug('<<< show :: Wizard Edit Mode - basic mode ') self._remove_previews() self.edit_mode_opt = "Wizard" self._set_menus_editor(True) bool = self.wizard_box_b == None self.create_wizard_edit() if bool: self.vbox_left.pack_start(self.wizard_box, True, True) self.wizard_box_b = True self.wizard_box.show_all() self.wizard_box.notebook.put_on_page() self._create_tooldesign() self.wizard_box.show() self.obj = self.wizard_box def _remove_previews(self): ''' Remove the previews Edit mode ''' #XXX Lack the toolbars and some ajusts if self.edit_mode_opt == "Profile": #self.vbox_left.remove(self.profile_box) self.profile_box.hide_all() elif self.edit_mode_opt == "Options": #self.vbox_left.remove(self.display_frame) self.display_frame.hide_all() elif self.edit_mode_opt == "Wizard": self.wizard_box.hide_all() def _create_tooldesign(self): ''' create tooldesign that contains widgets to put in work area of edit profile ''' if self._tooldesign == None: self._tooldesign = ToolDesign() if self._proprieties == None: self._proprieties = Proprieties() if self.notebook.get_n_pages() < 2: self.notebook.append_page(self._tooldesign, HIGEntryLabel(_('Design'))) self.notebook.append_page(self._proprieties, HIGEntryLabel(_('Proprieties'))) self.notebook.show_all() if self.edit_mode_opt == "Profile": obj = self.profile_box elif self.edit_mode_opt == "Wizard": obj = self.wizard_box obj.set_proprieties(self._proprieties) profilecore = obj.get_profilecore() self._proprieties.set_profilecore(profilecore) def __optinlist_from_group(self): """ After Select a Option from a group this treeview refresh options lists that each group contains """ model = gtk.TreeStore(gobject.TYPE_STRING) self.profile_optionlist_tvw = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) self.profile_optionlist_tvw.append_column(column) self.wizard_file = PWOptions(profile_editor) group_list = self.wizard_file.read("group", "name", "group") for i, v in group_list: myiter = model.insert_after(None, None) model.set_value(myiter, 0, i) def __proprieties(self): """ Create a editable options - Proprieties of Options """ #Create a listview with options self.prop_frame_option = gtk.Frame() self.prop_frame_option.set_label("List Options") self.prop_frame_option.set_shadow_type(gtk.SHADOW_ETCHED_OUT) prop_sw = HIGScrolledWindow() prop_sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) prop_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) model = gtk.TreeStore(gobject.TYPE_STRING) treeview = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) treeview.append_column(column) self.prop_frame_option.add(treeview) self.prop_frame_option.add(prop_sw) """ Box Edit """ #Frame self.prop_frame = gtk.Frame() self.prop_frame.set_label("Edit Option") self.prop_frame.set_shadow_type(gtk.SHADOW_ETCHED_OUT) self.prop_exp = HIGExpander("Proprieties") label = gtk.Label('s') self.prop_exp.add(label) self.prop_frame.add(self.prop_exp) def __grouplist(self): """ Group List, Tree view """ model = gtk.TreeStore(gobject.TYPE_STRING) self.treeview = gtk.TreeView(model) renderer = gtk.CellRendererText() column = gtk.TreeViewColumn("Name", renderer, text=0) self.treeview.append_column(column) self.wizard_file = PWOptions(profile_editor) group_list = self.wizard_file.read("group", "name", "group") for i, v in group_list: myiter = model.insert_after(None, None) model.set_value(myiter, 0, i) def __create_toolbar(self): """ Create a Main Toolbar of Profile Wizard Editor """ self.toolbar = self.ui_manager.get_widget('/toolbar') self.toolbar.set_style(gtk.TOOLBAR_BOTH) self.main_vbox.pack_start(self.toolbar, False, True, 0) self.toolbar.show_all() def save_all(self, widget): #if self.opt_display.is_changed(): #XXX BUG (is_changed method is in OptionList) self.list_options_box.save() if self.profile_box.is_changed(): self.profile_box.save() if self.wizard_box.is_changed(): self.wizard_box.save() def _set_menus_editor(self, value): self.main_action_group.get_action('Items').set_sensitive(value) self.main_action_group.get_action('Section').set_sensitive(value) if self.edit_mode_opt != None: self._update_menu_s(None, None, None) def save(self, widget): if self.edit_mode_opt == 'Options': obj = self.list_options_box elif self.edit_mode_opt == 'Profile': obj = self.profile_box elif self.edit_mode_opt == 'Wizard': obj = self.wizard_box obj.save() def quit(self, widget): """ Leaving of Interface Editor """ if self.daddy: # Run from Umit Network Scanner by menus self.daddy.running_ie = False self.destroy() else: # Run from command line directly gtk.main_quit() def np(self, widget): print "Don't work yet" def __create_ui_manager(self): """ Create a UI Manager """ self.ui_manager = gtk.UIManager() self.main_action_group = gtk.ActionGroup('MainActionGroup') self.main_actions = [ \ ('File', None, _('_File'), None), ('Save', gtk.STOCK_SAVE, _('_Save'), None, _('Save'), self.save), ('Save all', gtk.STOCK_SAVE, _('_Save all'), None, _('Save all'), self.save_all), ('Quit', gtk.STOCK_QUIT, _('_Quit'), None, _('Quit'), self.quit), ('Edit', None, _('Edit'), None), ('Undo', gtk.STOCK_UNDO, _('_Undo'), '<Control>z', _('Undo'), self._undo_cb), ('Redo', gtk.STOCK_REDO, _('_Redo'), '<Control>r', _('Redo'), self._redo_cb), ('View', None, _('View'), None), ('Right Bar', None, _('_Right Bar'), None, _('Right Bar'), self._hide_right), ('Tools', None, _('Tools'), None), ('Section', None, _('Section'), None), ('Items', None, _('Items'), None), ('Insert label', None, _('_Label'), None, _('Insert label'), self.np), ('New Section', None, _('_New Section'), None, _('New Section'), self._add_section), ('Remove Section Label', None, _('_Remove Section Label'), None, _('Remove Section Label'), self._remove_section), ('Remove Section', None, _('_Remove Section'), None, _('Remove Section'), self._remove_section), ('Add new voidplace', None, _('_Add new voidplace'), None, _('Add new voidplace'), self._add_place), ('Remove option', None, _('_Remove Option'), None, _('Remove option'), self._remove_option), ('Remove voidplace', None, _('_Remove voidplace'), None, _('Remove voidplace'), self._remove_option), ('Add option selected', None, _('_Add option selected'), None, _('Add option selected'), self.np), ('Move Section Left', None, _('_Move Section Left'), None, _('Move Section Left'), self._move_section_left), ('Move Section Right', None, _('_Move Section Right'), None, _('Move Section Right'), self._move_section_right), ('Move Item Down', None, _('_Move Item Down'), None, _('Move Item Down'), self._move_item_down), ('Move Item Up', None, _('_Move Item Up'), None, _('Move Item Up'), self._move_item_up), ('Help', None, _('Help'), None), ('About', gtk.STOCK_PASTE, _('_About'), None, _('About'), self.np), ] self.ui_info = """ <menubar> <menu action='File'> <menuitem action='Save'/> <menuitem action='Save all'/> <separator/> <menuitem action='Quit'/> </menu> <menu action='Edit'> <menuitem action='Undo'/> <menuitem action='Redo'/> </menu> <menu action='View'> <menuitem action='Right Bar'/> </menu> <menu action='Section'> <menuitem action='Insert label'/> <menuitem action='New Section'/> <menuitem action='Remove Section Label'/> <menuitem action='Remove Section'/> <menuitem action='Move Section Left'/> <menuitem action='Move Section Right'/> </menu> <menu action='Items'> <menuitem action='Add new voidplace'/> <menuitem action='Remove option'/> <menuitem action='Remove voidplace'/> <menuitem action='Move Item Up'/> <menuitem action='Move Item Down'/> </menu> </menubar> <toolbar> <toolitem action='Save'/> <toolitem action='Save all'/> <separator/> <toolitem action='Undo'/> <toolitem action='Redo'/> <separator/> <toolitem action='Quit'/> </toolbar> """ self.main_action_group.add_actions(self.main_actions) self.main_accel_group = gtk.AccelGroup() for action in self.main_action_group.list_actions(): action.set_accel_group(self.main_accel_group) action.connect_accelerator() #ENABLE = FALSE self.main_action_group.get_action('Save all').set_sensitive(False) self.main_action_group.get_action('Save').set_sensitive(False) self.main_action_group.get_action('Undo').set_sensitive(False) self.main_action_group.get_action('Redo').set_sensitive(False) self._set_menus_editor(False) #END ENABLE self.ui_manager.insert_action_group(self.main_action_group, 0) self.ui_manager.add_ui_from_string(self.ui_info) self.add_accel_group(self.main_accel_group) # ACTIONS def _add_section(self, widget): self.obj._toolbar._add_section(widget) def _remove_section(self, widget): self.obj._toolbar._remove_section(widget) def _add_place(self, widget): self.obj._toolbar._add_place(widget) def _move_item_up(self, widget): self.obj._toolbar._move_item_down(widget) def _move_item_down(self, widget): self.obj._toolbar._move_item_down(widget) def _move_section_left(self, widget): self.obj._toolbar._move_section_left(widget) def _move_section_right(self, widget): self.obj._toolbar._move_section_right(widget) def _remove_option(self, widget): self.obj._toolbar._remove_option(widget) def _hide_right(self, widget): if self._show_bar: self.vbox_right.hide_all() else: self.vbox_right.show_all() self._show_bar = not self._show_bar def _undo_cb(self, widget): command_manager.do_undo() def _redo_cb(self, widget): command_manager.do_redo() def __create_menubar(self): """ Create a menubar """ self.menubar = self.ui_manager.get_widget('/menubar') self.main_vbox.pack_start(self.menubar, False, True, 0) self.menubar.show_all() def __create_status_bar(self): ''' create status bar ''' self.statusbar = gtk.Statusbar() context_id = self.statusbar.push(1, " ") self.statusbar.show()
class SchedSchemaEditor(HIGWindow): """ Scheduler Schemas Editor """ def __init__(self, daddy=None): HIGWindow.__init__(self) self.daddy = daddy self.wtitle = _("Scan Scheduler Editor") # header self.title_markup = "<span size='16500' weight='heavy'>%s</span>" self.ttitle = HIGEntryLabel("") self.ttitle.set_line_wrap(False) self.ttitle.set_markup(self.title_markup % self.wtitle) self.umit_logo = gtk.Image() self.umit_logo.set_from_file(logo) # schemas name self.schema_name_lbl = HIGEntryLabel(_("Schema Name")) self.schema_name = gtk.combo_box_entry_new_text() self.schema_name.connect("changed", self._check_schema) # target and scan profiles # self.target_lbl = HIGEntryLabel(_("Target")) # self.target = gtk.Entry() self.scan_name_lbl = HIGEntryLabel(_("Scan Profile")) self.scan_name = ProfileCombo() self.scan_name.update() self.scan_name.set_active(0) self.scan_name.connect("changed", self._set_scan_command) # scan command self.scan_command_lbl = HIGEntryLabel(_("Command")) self.scan_command = gtk.Entry() # scheduling profile self.sched_name_lbl = HIGEntryLabel(_("Scheduling Profile")) self.sched_name = gtk.combo_box_new_text() self.sched_name_edit = gtk.Button(stock=gtk.STOCK_EDIT) blbl = self.sched_name_edit.get_children()[0].get_children()[0].get_children()[1] blbl.set_text(_("Edit Profiles")) self.sched_name_edit.connect("clicked", self._edit_schedprofiles) # schema settings self.schema_sett_frame = HIGFrame() self.setting_saveto = gtk.CheckButton(_("Save outputs to")) self.setting_saveto_entry = gtk.Entry() self.setting_saveto_browse = gtk.Button(_("...")) self.setting_saveto_browse.connect("clicked", self._select_saveto) self.setting_mailto = gtk.CheckButton(_("Send output to email")) self.setting_mailto_entry = gtk.Entry() self.setting_smtp_lbl = HIGEntryLabel(_("SMTP Schema")) self.setting_smtp = gtk.combo_box_new_text() self.setting_addtoinv = gtk.CheckButton(_("Add to the Inventory")) self.setting_enabled = gtk.CheckButton(_("Enabled")) # bottom buttons self.help = HIGButton(stock=gtk.STOCK_HELP) self.help.connect("clicked", self._show_help) self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.apply.connect("clicked", self._save_schema) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.cancel.connect("clicked", self._exit) self.ok = HIGButton(stock=gtk.STOCK_OK) self.ok.connect("clicked", self._save_schema_and_leave) self.load_smtp_schemas() self._set_scan_command(None) self.profile_running = None # no SchedProfileEditor instance is running. self._load_pscheds() self.load_schemas() self.__set_props() self.__do_layout() self.connect("destroy", self._exit) def load_smtp_schemas(self): """ Load smtp profiles. """ schemas = ConfigParser() schemas.read(Path.smtp_schemas) self.smtp_sections = [] self.setting_smtp.get_model().clear() for section in schemas.sections(): self.smtp_sections.append(section) self.setting_smtp.append_text(section) self.setting_smtp.set_active(0) def load_schemas(self): """ Load schemas profiles. """ schemas = ConfigParser() schemas.read(Path.sched_schemas) self.sections = [] self.schema_name.get_model().clear() for section in schemas.sections(): self.sections.append(section) self.schema_name.append_text(section) self.schema_name.set_active(0) self._check_schema(None) def _load_schema(self): """ Load current set schedule schema. """ schema = ConfigParser() schema.read(Path.sched_schemas) values = { "command": self.scan_command.set_text, "saveto": self.setting_saveto_entry.set_text, "mailto": self.setting_mailto_entry.set_text, } enable = {"saveto": self.setting_saveto.set_active, "mailto": self.setting_mailto.set_active} for item in schema.items(self.schema_name.get_active_text()): if item[0] == "addtoinv": self.setting_addtoinv.set_active(int(item[1])) if item[1] == "2": self.apply.set_sensitive(False) self.ok.set_sensitive(False) else: self.apply.set_sensitive(True) self.ok.set_sensitive(True) elif item[0] == "enabled": self.setting_enabled.set_active(int(item[1])) elif item[0] == "profile": pindx = self.profiles.index(item[1]) self.sched_name.set_active(pindx) elif item[0] == "smtp": if item[1]: pindx = self.smtp_sections.index(item[1]) self.setting_smtp.set_active(pindx) else: values[item[0]](item[1]) if item[0] in ("saveto", "mailto"): if len(item[1]): enable[item[0]](True) else: enable[item[0]](False) def _check_schema(self, event): """ Check if current text in schema_name combobox is a schema name. """ if self.schema_name.get_active_text() in self.sections: # load schema self._load_schema() else: # reset to default values self.apply.set_sensitive(True) self.ok.set_sensitive(True) self.setting_addtoinv.set_active(False) self.setting_enabled.set_active(False) self.setting_mailto.set_active(False) self.setting_mailto_entry.set_text("") self.setting_saveto.set_active(False) self.setting_saveto_entry.set_text("") self.schema_sett_frame._set_label(self.schema_name.get_active_text() + " - Settings") def _set_scan_command(self, event): """ Set scan command based on chosen profile. """ profile = self.scan_name.get_selected_profile() cmd_profile = CommandProfile() command = cmd_profile.get_command(profile) self.scan_command.set_text(command % "<target>") def _load_pscheds(self): """ Load scheduling profiles. """ pscheds = ConfigParser() pscheds.read(Path.sched_profiles) self.profiles = [] self.sched_name.get_model().clear() for section in pscheds.sections(): self.sched_name.append_text(section) self.profiles.append(section) self.sched_name.set_active(0) def _edit_schedprofiles(self, event): """ Open Scheduling Profiles Editor. """ if self.profile_running: return win = SchedProfileEditor(self, self.sched_name.get_active_text()) win.show_all() self.profile_running = win def _select_saveto(self, event): """ Select directory to save file. """ dir_chooser = DirectoryChooserDialog(_("Select a directory")) dir_chooser.run() dir_chosen = dir_chooser.get_filename() dir_chooser.destroy() self.setting_saveto_entry.set_text(dir_chosen) def _save_schema(self, event): """ Save current schema. """ schema = self.schema_name.get_active_text() command = self.scan_command.get_text() schedule = self.sched_name.get_active_text() mailto = self.setting_mailto.get_active() if not schema or not schedule or not command or "<target>" in command: dlg = HIGAlertDialog( self, message_format=_( "Scheduling Schema - Error\ while saving." ), secondary_text=_( 'There is some error in at \ least one of the following fields: "Schema name", "Command" or "Scheduling\ Profile"\n\nCheck if "Schema name" is not empty.\nCheck if "Command" does\ contain "<target>" on it.\nCheck if there is some "Scheduling Profile" \ selected.' ), ) dlg.run() dlg.destroy() return if mailto and not self.setting_smtp.get_active_text(): dlg = HIGAlertDialog( self, message_format=_( "Scheduling Schema - Error\ while saving." ), secondary_text=_( "You need to create a \ a SMTP Schema for sending email." ), ) dlg.run() dlg.destroy() return # check for output existance if self.setting_saveto.get_active() and not os.path.isdir(self.setting_saveto_entry.get_text()): dlg = HIGAlertDialog( self, message_format=_( "Scheduling Schema - Error\ while saving." ), secondary_text=_( "You especified an invalid \ directory to save scans output." ), ) dlg.run() dlg.destroy() return # write schema to file s_cfg = ConfigParser() s_cfg.read(Path.sched_schemas) if not s_cfg.has_section(schema): new_sec = True s_cfg.add_section(schema) else: new_sec = False s_cfg.set(schema, "profile", schedule) s_cfg.set(schema, "command", command) if self.setting_enabled.get_active(): s_cfg.set(schema, "enabled", "1") else: s_cfg.set(schema, "enabled", "0") if self.setting_addtoinv.get_active(): s_cfg.set(schema, "addtoinv", "1") else: s_cfg.set(schema, "addtoinv", "0") if self.setting_saveto.get_active(): s_cfg.set(schema, "saveto", self.setting_saveto_entry.get_text()) else: s_cfg.set(schema, "saveto", "") if mailto: s_cfg.set(schema, "mailto", self.setting_mailto_entry.get_text()) s_cfg.set(schema, "smtp", self.setting_smtp.get_active_text()) else: s_cfg.set(schema, "mailto", "") s_cfg.set(schema, "smtp", "") s_cfg.write(open(Path.sched_schemas, "w")) if new_sec: self.load_schemas() if self.daddy: self.daddy.load_schemas() def _save_schema_and_leave(self, event): """ Save current schema and close editor. """ self._save_schema(None) self._exit(None) def _show_help(self, event): """ Show help for Scan Scheduler Editor. """ show_help(self, "scheduler.html#setting-up-a-schedule") def __set_props(self): """ Set window properties. """ self.set_title(self.wtitle) self.set_default_size(440, -1) def __do_layout(self): """ Layout widgets in window. """ main_vbox = HIGVBox() main_vbox.set_border_width(5) main_vbox.set_spacing(12) header_hbox = HIGHBox() schema_table = HIGTable() schedsn_hbox = HIGHBox() sett_table = HIGTable() btns_hbox = HIGHBox() header_hbox._pack_expand_fill(self.ttitle) header_hbox._pack_noexpand_nofill(self.umit_logo) # schema name schema_table.attach_label(self.schema_name_lbl, 0, 1, 0, 1) schema_table.attach_entry(self.schema_name, 1, 2, 0, 1) # target and scan profile schema_table.attach_label(self.scan_name_lbl, 0, 1, 1, 2) schema_table.attach_entry(self.scan_name, 1, 2, 1, 2) # scan command schema_table.attach_label(self.scan_command_lbl, 0, 1, 2, 3) schema_table.attach_label(self.scan_command, 1, 2, 2, 3) # scheduling profile schedsn_hbox._pack_expand_fill(self.sched_name) schedsn_hbox._pack_noexpand_nofill(self.sched_name_edit) schema_table.attach_label(self.sched_name_lbl, 0, 1, 3, 4) schema_table.attach_entry(schedsn_hbox, 1, 2, 3, 4) # settings frame settings_align = gtk.Alignment(0.5, 0.5, 1, 1) settings_align.set_padding(6, 0, 12, 0) schemasett_hbox = HIGVBox() # saveto sett_hbox = HIGHBox() sett_hbox._pack_expand_fill(self.setting_saveto_entry) sett_hbox._pack_noexpand_nofill(self.setting_saveto_browse) sett_table.attach_label(self.setting_saveto, 0, 1, 0, 1) sett_table.attach_entry(sett_hbox, 1, 2, 0, 1) # mailto, smtp sett_hbox = HIGHBox() sett_hbox._pack_expand_fill(self.setting_mailto_entry) sett_hbox._pack_noexpand_nofill(self.setting_smtp_lbl) sett_hbox._pack_expand_fill(self.setting_smtp) sett_table.attach_label(self.setting_mailto, 0, 1, 1, 2) sett_table.attach_entry(sett_hbox, 1, 2, 1, 2) schemasett_hbox._pack_noexpand_nofill(sett_table) # add to inventory sett_hbox = HIGHBox() sett_hbox._pack_noexpand_nofill(self.setting_addtoinv) schemasett_hbox._pack_noexpand_nofill(sett_hbox) # enabled/disabled sett_hbox = HIGHBox() sett_hbox._pack_noexpand_nofill(self.setting_enabled) schemasett_hbox._pack_noexpand_nofill(sett_hbox) settings_align.add(schemasett_hbox) self.schema_sett_frame.add(settings_align) # bottom buttons btns_hbox.set_homogeneous(True) btns_hbox._pack_expand_fill(self.help) btns_hbox._pack_expand_fill(hig_box_space_holder()) btns_hbox._pack_expand_fill(self.apply) btns_hbox._pack_expand_fill(self.cancel) btns_hbox._pack_expand_fill(self.ok) main_vbox._pack_noexpand_nofill(header_hbox) main_vbox._pack_noexpand_nofill(gtk.HSeparator()) main_vbox._pack_noexpand_nofill(schema_table) main_vbox._pack_noexpand_nofill(gtk.HSeparator()) main_vbox._pack_noexpand_nofill(self.schema_sett_frame) main_vbox.pack_end(btns_hbox, False, False, 0) self.add(main_vbox) def _exit(self, event): """ Close current and window and profile editor if it is running. """ if self.profile_running: self.profile_running._exit(None) if self.daddy: self.daddy.schemawin = None self.destroy() def _get_profile_running(self): """ Get profile editor running instance. """ return self.__profilerunning def _set_profile_running(self, running): """ Set profile editor instance. """ self.__profilerunning = running # Properties profile_running = property(_get_profile_running, _set_profile_running)
class SchedSchemaEditor(HIGWindow): """ Scheduler Schemas Editor """ def __init__(self, daddy=None): HIGWindow.__init__(self) self.daddy = daddy self.wtitle = _("Scan Scheduler Editor") # header self.title_markup = "<span size='16500' weight='heavy'>%s</span>" self.ttitle = HIGEntryLabel("") self.ttitle.set_line_wrap(False) self.ttitle.set_markup(self.title_markup % self.wtitle) self.umit_logo = gtk.Image() self.umit_logo.set_from_file(logo) # schemas name self.schema_name_lbl = HIGEntryLabel(_("Schema Name")) self.schema_name = gtk.combo_box_entry_new_text() self.schema_name.connect('changed', self._check_schema) # target and scan profiles #self.target_lbl = HIGEntryLabel(_("Target")) #self.target = gtk.Entry() self.scan_name_lbl = HIGEntryLabel(_("Scan Profile")) self.scan_name = ProfileCombo() self.scan_name.update() self.scan_name.set_active(0) self.scan_name.connect('changed', self._set_scan_command) # scan command self.scan_command_lbl = HIGEntryLabel(_("Command")) self.scan_command = gtk.Entry() # scheduling profile self.sched_name_lbl = HIGEntryLabel(_("Scheduling Profile")) self.sched_name = gtk.combo_box_new_text() self.sched_name_edit = gtk.Button(stock=gtk.STOCK_EDIT) blbl = self.sched_name_edit.get_children()[0].get_children( )[0].get_children()[1] blbl.set_text(_("Edit Profiles")) self.sched_name_edit.connect('clicked', self._edit_schedprofiles) # schema settings self.schema_sett_frame = HIGFrame() self.setting_saveto = gtk.CheckButton(_("Save outputs to")) self.setting_saveto_entry = gtk.Entry() self.setting_saveto_browse = gtk.Button(_("...")) self.setting_saveto_browse.connect('clicked', self._select_saveto) self.setting_mailto = gtk.CheckButton(_("Send output to email")) self.setting_mailto_entry = gtk.Entry() self.setting_smtp_lbl = HIGEntryLabel(_("SMTP Schema")) self.setting_smtp = gtk.combo_box_new_text() self.setting_addtoinv = gtk.CheckButton(_("Add to the Inventory")) self.setting_enabled = gtk.CheckButton(_("Enabled")) # bottom buttons self.help = HIGButton(stock=gtk.STOCK_HELP) self.help.connect('clicked', self._show_help) self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.apply.connect('clicked', self._save_schema) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.cancel.connect('clicked', self._exit) self.ok = HIGButton(stock=gtk.STOCK_OK) self.ok.connect('clicked', self._save_schema_and_leave) self.load_smtp_schemas() self._set_scan_command(None) self.profile_running = None # no SchedProfileEditor instance is running. self._load_pscheds() self.load_schemas() self.__set_props() self.__do_layout() self.connect('destroy', self._exit) def load_smtp_schemas(self): """ Load smtp profiles. """ schemas = ConfigParser() schemas.read(Path.smtp_schemas) self.smtp_sections = [] self.setting_smtp.get_model().clear() for section in schemas.sections(): self.smtp_sections.append(section) self.setting_smtp.append_text(section) self.setting_smtp.set_active(0) def load_schemas(self): """ Load schemas profiles. """ schemas = ConfigParser() schemas.read(Path.sched_schemas) self.sections = [] self.schema_name.get_model().clear() for section in schemas.sections(): self.sections.append(section) self.schema_name.append_text(section) self.schema_name.set_active(0) self._check_schema(None) def _load_schema(self): """ Load current set schedule schema. """ schema = ConfigParser() schema.read(Path.sched_schemas) values = { 'command': self.scan_command.set_text, 'saveto': self.setting_saveto_entry.set_text, 'mailto': self.setting_mailto_entry.set_text } enable = { 'saveto': self.setting_saveto.set_active, 'mailto': self.setting_mailto.set_active } for item in schema.items(self.schema_name.get_active_text()): if item[0] == 'addtoinv': self.setting_addtoinv.set_active(int(item[1])) if item[1] == '2': self.apply.set_sensitive(False) self.ok.set_sensitive(False) else: self.apply.set_sensitive(True) self.ok.set_sensitive(True) elif item[0] == 'enabled': self.setting_enabled.set_active(int(item[1])) elif item[0] == 'profile': pindx = self.profiles.index(item[1]) self.sched_name.set_active(pindx) elif item[0] == 'smtp': if item[1]: pindx = self.smtp_sections.index(item[1]) self.setting_smtp.set_active(pindx) else: values[item[0]](item[1]) if item[0] in ('saveto', 'mailto'): if len(item[1]): enable[item[0]](True) else: enable[item[0]](False) def _check_schema(self, event): """ Check if current text in schema_name combobox is a schema name. """ if self.schema_name.get_active_text() in self.sections: # load schema self._load_schema() else: # reset to default values self.apply.set_sensitive(True) self.ok.set_sensitive(True) self.setting_addtoinv.set_active(False) self.setting_enabled.set_active(False) self.setting_mailto.set_active(False) self.setting_mailto_entry.set_text('') self.setting_saveto.set_active(False) self.setting_saveto_entry.set_text('') self.schema_sett_frame._set_label(self.schema_name.get_active_text() \ + " - Settings") def _set_scan_command(self, event): """ Set scan command based on chosen profile. """ profile = self.scan_name.get_selected_profile() cmd_profile = CommandProfile() command = cmd_profile.get_command(profile) self.scan_command.set_text(command % '<target>') def _load_pscheds(self): """ Load scheduling profiles. """ pscheds = ConfigParser() pscheds.read(Path.sched_profiles) self.profiles = [] self.sched_name.get_model().clear() for section in pscheds.sections(): self.sched_name.append_text(section) self.profiles.append(section) self.sched_name.set_active(0) def _edit_schedprofiles(self, event): """ Open Scheduling Profiles Editor. """ if self.profile_running: return win = SchedProfileEditor(self, self.sched_name.get_active_text()) win.show_all() self.profile_running = win def _select_saveto(self, event): """ Select directory to save file. """ dir_chooser = DirectoryChooserDialog(_("Select a directory")) dir_chooser.run() dir_chosen = dir_chooser.get_filename() dir_chooser.destroy() self.setting_saveto_entry.set_text(dir_chosen) def _save_schema(self, event): """ Save current schema. """ schema = self.schema_name.get_active_text() command = self.scan_command.get_text() schedule = self.sched_name.get_active_text() mailto = self.setting_mailto.get_active() if not schema or not schedule or not command or '<target>' in command: dlg = HIGAlertDialog(self, message_format=_('Scheduling Schema - Error\ while saving.'), secondary_text=_("There is some error in at \ least one of the following fields: \"Schema name\", \"Command\" or \"Scheduling\ Profile\"\n\nCheck if \"Schema name\" is not empty.\nCheck if \"Command\" does\ contain \"<target>\" on it.\nCheck if there is some \"Scheduling Profile\" \ selected.")) dlg.run() dlg.destroy() return if mailto and not self.setting_smtp.get_active_text(): dlg = HIGAlertDialog(self, message_format=_('Scheduling Schema - Error\ while saving.'), secondary_text=_("You need to create a \ a SMTP Schema for sending email.")) dlg.run() dlg.destroy() return # check for output existance if self.setting_saveto.get_active() and \ not os.path.isdir(self.setting_saveto_entry.get_text()): dlg = HIGAlertDialog(self, message_format=_('Scheduling Schema - Error\ while saving.'), secondary_text=_("You especified an invalid \ directory to save scans output.")) dlg.run() dlg.destroy() return # write schema to file s_cfg = ConfigParser() s_cfg.read(Path.sched_schemas) if not s_cfg.has_section(schema): new_sec = True s_cfg.add_section(schema) else: new_sec = False s_cfg.set(schema, 'profile', schedule) s_cfg.set(schema, 'command', command) if self.setting_enabled.get_active(): s_cfg.set(schema, 'enabled', '1') else: s_cfg.set(schema, 'enabled', '0') if self.setting_addtoinv.get_active(): s_cfg.set(schema, 'addtoinv', '1') else: s_cfg.set(schema, 'addtoinv', '0') if self.setting_saveto.get_active(): s_cfg.set(schema, 'saveto', self.setting_saveto_entry.get_text()) else: s_cfg.set(schema, 'saveto', '') if mailto: s_cfg.set(schema, 'mailto', self.setting_mailto_entry.get_text()) s_cfg.set(schema, 'smtp', self.setting_smtp.get_active_text()) else: s_cfg.set(schema, 'mailto', '') s_cfg.set(schema, 'smtp', '') s_cfg.write(open(Path.sched_schemas, 'w')) if new_sec: self.load_schemas() if self.daddy: self.daddy.load_schemas() def _save_schema_and_leave(self, event): """ Save current schema and close editor. """ self._save_schema(None) self._exit(None) def _show_help(self, event): """ Show help for Scan Scheduler Editor. """ show_help(self, "scheduler.html#setting-up-a-schedule") def __set_props(self): """ Set window properties. """ self.set_title(self.wtitle) self.set_default_size(440, -1) def __do_layout(self): """ Layout widgets in window. """ main_vbox = HIGVBox() main_vbox.set_border_width(5) main_vbox.set_spacing(12) header_hbox = HIGHBox() schema_table = HIGTable() schedsn_hbox = HIGHBox() sett_table = HIGTable() btns_hbox = HIGHBox() header_hbox._pack_expand_fill(self.ttitle) header_hbox._pack_noexpand_nofill(self.umit_logo) # schema name schema_table.attach_label(self.schema_name_lbl, 0, 1, 0, 1) schema_table.attach_entry(self.schema_name, 1, 2, 0, 1) # target and scan profile schema_table.attach_label(self.scan_name_lbl, 0, 1, 1, 2) schema_table.attach_entry(self.scan_name, 1, 2, 1, 2) # scan command schema_table.attach_label(self.scan_command_lbl, 0, 1, 2, 3) schema_table.attach_label(self.scan_command, 1, 2, 2, 3) # scheduling profile schedsn_hbox._pack_expand_fill(self.sched_name) schedsn_hbox._pack_noexpand_nofill(self.sched_name_edit) schema_table.attach_label(self.sched_name_lbl, 0, 1, 3, 4) schema_table.attach_entry(schedsn_hbox, 1, 2, 3, 4) # settings frame settings_align = gtk.Alignment(0.5, 0.5, 1, 1) settings_align.set_padding(6, 0, 12, 0) schemasett_hbox = HIGVBox() # saveto sett_hbox = HIGHBox() sett_hbox._pack_expand_fill(self.setting_saveto_entry) sett_hbox._pack_noexpand_nofill(self.setting_saveto_browse) sett_table.attach_label(self.setting_saveto, 0, 1, 0, 1) sett_table.attach_entry(sett_hbox, 1, 2, 0, 1) # mailto, smtp sett_hbox = HIGHBox() sett_hbox._pack_expand_fill(self.setting_mailto_entry) sett_hbox._pack_noexpand_nofill(self.setting_smtp_lbl) sett_hbox._pack_expand_fill(self.setting_smtp) sett_table.attach_label(self.setting_mailto, 0, 1, 1, 2) sett_table.attach_entry(sett_hbox, 1, 2, 1, 2) schemasett_hbox._pack_noexpand_nofill(sett_table) # add to inventory sett_hbox = HIGHBox() sett_hbox._pack_noexpand_nofill(self.setting_addtoinv) schemasett_hbox._pack_noexpand_nofill(sett_hbox) # enabled/disabled sett_hbox = HIGHBox() sett_hbox._pack_noexpand_nofill(self.setting_enabled) schemasett_hbox._pack_noexpand_nofill(sett_hbox) settings_align.add(schemasett_hbox) self.schema_sett_frame.add(settings_align) # bottom buttons btns_hbox.set_homogeneous(True) btns_hbox._pack_expand_fill(self.help) btns_hbox._pack_expand_fill(hig_box_space_holder()) btns_hbox._pack_expand_fill(self.apply) btns_hbox._pack_expand_fill(self.cancel) btns_hbox._pack_expand_fill(self.ok) main_vbox._pack_noexpand_nofill(header_hbox) main_vbox._pack_noexpand_nofill(gtk.HSeparator()) main_vbox._pack_noexpand_nofill(schema_table) main_vbox._pack_noexpand_nofill(gtk.HSeparator()) main_vbox._pack_noexpand_nofill(self.schema_sett_frame) main_vbox.pack_end(btns_hbox, False, False, 0) self.add(main_vbox) def _exit(self, event): """ Close current and window and profile editor if it is running. """ if self.profile_running: self.profile_running._exit(None) if self.daddy: self.daddy.schemawin = None self.destroy() def _get_profile_running(self): """ Get profile editor running instance. """ return self.__profilerunning def _set_profile_running(self, running): """ Set profile editor instance. """ self.__profilerunning = running # Properties profile_running = property(_get_profile_running, _set_profile_running)
class NISettingsBox(): def __init__(self, create_buttons=True): self.__create_widgets() if(create_buttons): self.__create_buttons() self._fill_comboboxes() self._load_settings() self.main_vbox = self.__do_layout(create_buttons) def __create_widgets(self): self.timeline = HIGFrame(_("Timeline Settings")) self.tl_mode_lbl = gtk.Label(_("Timeline view mode")) self.tl_kind_lbl = gtk.Label(_("Timeline view kind")) self.tl_mode = gtk.combo_box_new_text() self.tl_kind = gtk.combo_box_new_text() self.tabs = HIGFrame(_("Devices tab")) self.tabs_cbtn = gtk.CheckButton(_("Place close button")) self.sbar = HIGFrame(_("Statusbar")) self.sbar_tips = gtk.CheckButton(_("Show tips")) def __create_buttons(self): # bottom buttons self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.ok = HIGButton(stock=gtk.STOCK_OK) self.apply.connect("clicked", self._apply_settings) self.ok.connect("clicked", self._apply_settings_exit) self.cancel.connect("clicked", self._exit) def _fill_comboboxes(self): """ Fill timeline mode and timeline kind combo boxes with available options. """ self.tl_kind_opts = { } self.tl_mode_opts = { } for opt, value in view_kind.items(): self.tl_kind.append_text(value) self.tl_kind_opts[opt] = value for opt, value in view_mode.items(): self.tl_mode.append_text(value) self.tl_mode_opts[opt] = value def _load_settings(self): """ Load current settings values. """ options = startup_options() start_tlkind = self.tl_kind_opts[options['kind']] start_tlmode = self.tl_mode_opts[options['mode']] store = self.tl_kind.get_model() for indx, item in enumerate(store): if item[0] == start_tlkind: self.tl_kind.set_active(indx) break store = self.tl_mode.get_model() for indx, item in enumerate(store): if item[0] == start_tlmode: self.tl_mode.set_active(indx) break self.tabs_cbtn.set_active(options['tabs_close_btn']) self.sbar_tips.set_active(options['tips']) def _apply_settings(self, event): """ Apply current settings. """ curr_kind = self.tl_kind.get_active_text() for kind, value in self.tl_kind_opts.items(): if value == curr_kind: curr_kind = kind break curr_mode = self.tl_mode.get_active_text() for mode, value in self.tl_mode_opts.items(): if value == curr_mode: curr_mode = mode break write_startup_setting(TL_SECTION, "mode", curr_mode) write_startup_setting(TL_SECTION, "kind", curr_kind) write_startup_setting(INV_SECTION, "tabs_close_btn", self.tabs_cbtn.get_active()) write_startup_setting(INV_SECTION, "tips", self.sbar_tips.get_active()) def _apply_settings_exit(self, event): """ Apply current settings and leave. """ self._apply_settings(None) self._exit(None) def _exit(self, event): """ Close this window. """ self.destroy() def __set_props(self): """ Window properties. """ self.set_title(_("Network Inventory Settings")) self.set_default_size(305, -1) def __do_layout(self, create_buttons): main_vbox = HIGVBox() # timeline frame tl_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) tl_settings_align.set_padding(6, 0, 12, 0) tl_settings_vbox = HIGVBox() mode_hbox = HIGHBox() mode_hbox._pack_noexpand_nofill(self.tl_mode_lbl) mode_hbox._pack_expand_fill(self.tl_mode) kind_hbox = HIGHBox() kind_hbox._pack_noexpand_nofill(self.tl_kind_lbl) kind_hbox._pack_expand_fill(self.tl_kind) tl_settings_vbox._pack_noexpand_nofill(mode_hbox) tl_settings_vbox._pack_noexpand_nofill(kind_hbox) tl_settings_align.add(tl_settings_vbox) self.timeline.add(tl_settings_align) main_vbox._pack_noexpand_nofill(self.timeline) # end timeline frame # statusbar frame sbar_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) sbar_settings_align.set_padding(6, 0, 12, 0) sbar_settings_vbox = HIGVBox() sbar_settings_vbox._pack_noexpand_nofill(self.sbar_tips) sbar_settings_align.add(sbar_settings_vbox) self.sbar.add(sbar_settings_align) main_vbox._pack_noexpand_nofill(self.sbar) # end statusbar frame # tabs frame tabs_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) tabs_settings_align.set_padding(6, 0, 12, 0) tabs_settings_vbox = HIGVBox() tabs_settings_vbox._pack_noexpand_nofill(self.tabs_cbtn) tabs_settings_align.add(tabs_settings_vbox) self.tabs.add(tabs_settings_align) main_vbox._pack_noexpand_nofill(self.tabs) # end tabs frame if create_buttons: # buttons box btnsbox = HIGHBox() btnsbox._pack_noexpand_nofill(self.apply) btnsbox._pack_noexpand_nofill(self.cancel) btnsbox._pack_noexpand_nofill(self.ok) bbox = gtk.HBox() bbox.pack_end(btnsbox, False, False, 0) main_vbox.pack_end(bbox, False, False, 0) main_vbox.pack_end(gtk.HSeparator(), False, False, 0) # end buttons box return main_vbox def get_layout(self): return self.main_vbox
def __init__(self, daddy=None): HIGWindow.__init__(self) self.daddy = daddy self.wtitle = _("Scan Scheduler Editor") # header self.title_markup = "<span size='16500' weight='heavy'>%s</span>" self.ttitle = HIGEntryLabel("") self.ttitle.set_line_wrap(False) self.ttitle.set_markup(self.title_markup % self.wtitle) self.umit_logo = gtk.Image() self.umit_logo.set_from_file(logo) # schemas name self.schema_name_lbl = HIGEntryLabel(_("Schema Name")) self.schema_name = gtk.combo_box_entry_new_text() self.schema_name.connect('changed', self._check_schema) # target and scan profiles #self.target_lbl = HIGEntryLabel(_("Target")) #self.target = gtk.Entry() self.scan_name_lbl = HIGEntryLabel(_("Scan Profile")) self.scan_name = ProfileCombo() self.scan_name.update() self.scan_name.set_active(0) self.scan_name.connect('changed', self._set_scan_command) # scan command self.scan_command_lbl = HIGEntryLabel(_("Command")) self.scan_command = gtk.Entry() # scheduling profile self.sched_name_lbl = HIGEntryLabel(_("Scheduling Profile")) self.sched_name = gtk.combo_box_new_text() self.sched_name_edit = gtk.Button(stock=gtk.STOCK_EDIT) blbl = self.sched_name_edit.get_children()[0].get_children( )[0].get_children()[1] blbl.set_text(_("Edit Profiles")) self.sched_name_edit.connect('clicked', self._edit_schedprofiles) # schema settings self.schema_sett_frame = HIGFrame() self.setting_saveto = gtk.CheckButton(_("Save outputs to")) self.setting_saveto_entry = gtk.Entry() self.setting_saveto_browse = gtk.Button(_("...")) self.setting_saveto_browse.connect('clicked', self._select_saveto) self.setting_mailto = gtk.CheckButton(_("Send output to email")) self.setting_mailto_entry = gtk.Entry() self.setting_smtp_lbl = HIGEntryLabel(_("SMTP Schema")) self.setting_smtp = gtk.combo_box_new_text() self.setting_addtoinv = gtk.CheckButton(_("Add to the Inventory")) self.setting_enabled = gtk.CheckButton(_("Enabled")) # bottom buttons self.help = HIGButton(stock=gtk.STOCK_HELP) self.help.connect('clicked', self._show_help) self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.apply.connect('clicked', self._save_schema) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.cancel.connect('clicked', self._exit) self.ok = HIGButton(stock=gtk.STOCK_OK) self.ok.connect('clicked', self._save_schema_and_leave) self.load_smtp_schemas() self._set_scan_command(None) self.profile_running = None # no SchedProfileEditor instance is running. self._load_pscheds() self.load_schemas() self.__set_props() self.__do_layout() self.connect('destroy', self._exit)
def __init__(self, name): HIGFrame.__init__(self,name) self.set_shadow_type(gtk.SHADOW_IN)
class NISettingsBox(): def __init__(self, create_buttons=True): self.__create_widgets() if (create_buttons): self.__create_buttons() self._fill_comboboxes() self._load_settings() self.main_vbox = self.__do_layout(create_buttons) def __create_widgets(self): self.timeline = HIGFrame(_("Timeline Settings")) self.tl_mode_lbl = gtk.Label(_("Timeline view mode")) self.tl_kind_lbl = gtk.Label(_("Timeline view kind")) self.tl_mode = gtk.combo_box_new_text() self.tl_kind = gtk.combo_box_new_text() self.tabs = HIGFrame(_("Devices tab")) self.tabs_cbtn = gtk.CheckButton(_("Place close button")) self.sbar = HIGFrame(_("Statusbar")) self.sbar_tips = gtk.CheckButton(_("Show tips")) def __create_buttons(self): # bottom buttons self.apply = HIGButton(stock=gtk.STOCK_APPLY) self.cancel = HIGButton(stock=gtk.STOCK_CANCEL) self.ok = HIGButton(stock=gtk.STOCK_OK) self.apply.connect("clicked", self._apply_settings) self.ok.connect("clicked", self._apply_settings_exit) self.cancel.connect("clicked", self._exit) def _fill_comboboxes(self): """ Fill timeline mode and timeline kind combo boxes with available options. """ self.tl_kind_opts = {} self.tl_mode_opts = {} for opt, value in view_kind.items(): self.tl_kind.append_text(value) self.tl_kind_opts[opt] = value for opt, value in view_mode.items(): self.tl_mode.append_text(value) self.tl_mode_opts[opt] = value def _load_settings(self): """ Load current settings values. """ options = startup_options() start_tlkind = self.tl_kind_opts[options['kind']] start_tlmode = self.tl_mode_opts[options['mode']] store = self.tl_kind.get_model() for indx, item in enumerate(store): if item[0] == start_tlkind: self.tl_kind.set_active(indx) break store = self.tl_mode.get_model() for indx, item in enumerate(store): if item[0] == start_tlmode: self.tl_mode.set_active(indx) break self.tabs_cbtn.set_active(options['tabs_close_btn']) self.sbar_tips.set_active(options['tips']) def _apply_settings(self, event): """ Apply current settings. """ curr_kind = self.tl_kind.get_active_text() for kind, value in self.tl_kind_opts.items(): if value == curr_kind: curr_kind = kind break curr_mode = self.tl_mode.get_active_text() for mode, value in self.tl_mode_opts.items(): if value == curr_mode: curr_mode = mode break write_startup_setting(TL_SECTION, "mode", curr_mode) write_startup_setting(TL_SECTION, "kind", curr_kind) write_startup_setting(INV_SECTION, "tabs_close_btn", self.tabs_cbtn.get_active()) write_startup_setting(INV_SECTION, "tips", self.sbar_tips.get_active()) def _apply_settings_exit(self, event): """ Apply current settings and leave. """ self._apply_settings(None) self._exit(None) def _exit(self, event): """ Close this window. """ self.destroy() def __set_props(self): """ Window properties. """ self.set_title(_("Network Inventory Settings")) self.set_default_size(305, -1) def __do_layout(self, create_buttons): main_vbox = HIGVBox() # timeline frame tl_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) tl_settings_align.set_padding(6, 0, 12, 0) tl_settings_vbox = HIGVBox() mode_hbox = HIGHBox() mode_hbox._pack_noexpand_nofill(self.tl_mode_lbl) mode_hbox._pack_expand_fill(self.tl_mode) kind_hbox = HIGHBox() kind_hbox._pack_noexpand_nofill(self.tl_kind_lbl) kind_hbox._pack_expand_fill(self.tl_kind) tl_settings_vbox._pack_noexpand_nofill(mode_hbox) tl_settings_vbox._pack_noexpand_nofill(kind_hbox) tl_settings_align.add(tl_settings_vbox) self.timeline.add(tl_settings_align) main_vbox._pack_noexpand_nofill(self.timeline) # end timeline frame # statusbar frame sbar_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) sbar_settings_align.set_padding(6, 0, 12, 0) sbar_settings_vbox = HIGVBox() sbar_settings_vbox._pack_noexpand_nofill(self.sbar_tips) sbar_settings_align.add(sbar_settings_vbox) self.sbar.add(sbar_settings_align) main_vbox._pack_noexpand_nofill(self.sbar) # end statusbar frame # tabs frame tabs_settings_align = gtk.Alignment(0.5, 0.5, 1, 1) tabs_settings_align.set_padding(6, 0, 12, 0) tabs_settings_vbox = HIGVBox() tabs_settings_vbox._pack_noexpand_nofill(self.tabs_cbtn) tabs_settings_align.add(tabs_settings_vbox) self.tabs.add(tabs_settings_align) main_vbox._pack_noexpand_nofill(self.tabs) # end tabs frame if create_buttons: # buttons box btnsbox = HIGHBox() btnsbox._pack_noexpand_nofill(self.apply) btnsbox._pack_noexpand_nofill(self.cancel) btnsbox._pack_noexpand_nofill(self.ok) bbox = gtk.HBox() bbox.pack_end(btnsbox, False, False, 0) main_vbox.pack_end(bbox, False, False, 0) main_vbox.pack_end(gtk.HSeparator(), False, False, 0) # end buttons box return main_vbox def get_layout(self): return self.main_vbox