def __init__(self, lcm_obj, config, spawn_deputy, script_name, script_done_action): self.sheriff = Sheriff(lcm_obj) self.script_manager = ScriptManager(self.sheriff) self.spawn_deputy = spawn_deputy self.spawned_deputy = None self.config = config self.script_name = script_name self.script = None self.mainloop = None self.lcm_obj = lcm_obj self._should_exit = False if script_done_action is None: self.script_done_action = "exit" else: self.script_done_action = script_done_action
def __init__(self, lcm_obj): self.lcm_obj = lcm_obj self.cmds_update_scheduled = False self.config_filename = None self.script_done_action = None # deputy spawned by the sheriff self.spawned_deputy = None # create sheriff and subscribe to events self.sheriff = Sheriff(self.lcm_obj) self.sheriff.add_listener(self) self.script_manager = ScriptManager(self.sheriff) self.script_manager.add_listener(self) # update very soon gobject.timeout_add(100, lambda *s: self.deputies_ts.update() and False) gobject.timeout_add(100, lambda *s: self._schedule_cmds_update() and False) # and then periodically gobject.timeout_add(1000, self._check_spawned_deputy) gobject.timeout_add(1000, lambda *s: self._schedule_cmds_update() or True) # setup GUI self.builder = gtk.Builder() self.builder.add_from_file(find_procman_glade()) self.builder.connect_signals(self) self.window = self.builder.get_object("main_window") self.cmds_ts = cm.SheriffCommandModel(self.sheriff) self.cmds_tv = ctv.SheriffCommandTreeView(self.sheriff, self.script_manager, self.cmds_ts) # load save menu self.load_cfg_mi = self.builder.get_object("load_cfg_mi") self.save_cfg_mi = self.builder.get_object("save_cfg_mi") self.load_dlg = None self.save_dlg = None self.load_save_dir = None self.cfg_to_load = None if BUILD_PREFIX and os.path.exists("%s/data/procman" % BUILD_PREFIX): self.load_save_dir = "%s/data/procman" % BUILD_PREFIX # options menu self.is_observer_cmi = self.builder.get_object("is_observer_cmi") self.spawn_deputy_mi = self.builder.get_object("spawn_deputy_mi") self.terminate_spawned_deputy_mi = self.builder.get_object( "terminate_spawned_deputy_mi") self.procman_deputy_cmd = find_procman_deputy_cmd() if not self.procman_deputy_cmd: sys.stderr.write( "Can't find procman-deputy. Spawn Deputy disabled") self.spawn_deputy_mi.set_sensitive(False) # commands menu self.start_cmd_mi = self.builder.get_object("start_cmd_mi") self.stop_cmd_mi = self.builder.get_object("stop_cmd_mi") self.restart_cmd_mi = self.builder.get_object("restart_cmd_mi") self.remove_cmd_mi = self.builder.get_object("remove_cmd_mi") self.edit_cmd_mi = self.builder.get_object("edit_cmd_mi") self.new_cmd_mi = self.builder.get_object("new_cmd_mi") # scripts menu self.abort_script_mi = self.builder.get_object("abort_script_mi") self.edit_script_mi = self.builder.get_object("edit_script_mi") self.remove_script_mi = self.builder.get_object("remove_script_mi") self.scripts_menu = self.builder.get_object("scripts_menu") self.edit_scripts_menu = self.builder.get_object("edit_scripts_menu") self.remove_scripts_menu = self.builder.get_object( "remove_scripts_menu") vpane = self.builder.get_object("vpaned") sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) hpane = self.builder.get_object("hpaned") hpane.pack1(sw, resize=True) sw.add(self.cmds_tv) cmds_sel = self.cmds_tv.get_selection() cmds_sel.connect("changed", self._on_cmds_selection_changed) # create a checkable item in the View menu for each column to toggle # its visibility in the treeview view_menu = self.builder.get_object("view_menu") for col in self.cmds_tv.get_columns(): name = col.get_title() col_cmi = gtk.CheckMenuItem(name) col_cmi.set_active(col.get_visible()) def on_activate(cmi, col_): should_be_visible = cmi.get_active() if col_.get_visible() != should_be_visible: col_.set_visible(should_be_visible) if col_ == self.cmds_tv.columns[0]: self.cmds_ts.set_populate_exec_with_group_name( not should_be_visible) self.cmds_ts.repopulate() def on_visibility_changed(col_, param, cmi_): is_visible = col_.get_visible() if is_visible != cmi_.get_active(): cmi_.set_active(is_visible) col_cmi.connect("activate", on_activate, col) col.connect("notify::visible", on_visibility_changed, col_cmi) view_menu.append(col_cmi) # setup the deputies treeview self.deputies_ts = ht.DeputyModel(self.sheriff) self.deputies_tv = ht.DeputyTreeView(self.sheriff, self.deputies_ts) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) hpane.pack2(sw, resize=False) sw.add(self.deputies_tv) gobject.timeout_add(1000, lambda *s: self.deputies_ts.update() or True) # stdout textview self.cmd_console = cc.SheriffCommandConsole(self.sheriff, self.lcm_obj) vpane.add2(self.cmd_console) # status bar self.statusbar = self.builder.get_object("statusbar") self.statusbar_context_script = self.statusbar.get_context_id("script") self.statusbar_context_main = self.statusbar.get_context_id("main") self.statusbar_context_script_msg = None config_dir = os.path.join(glib.get_user_config_dir(), "procman-sheriff") if not os.path.exists(config_dir): os.makedirs(config_dir) self.config_fname = os.path.join(config_dir, "config") self.load_settings() self.window.show_all()