Пример #1
0
 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
Пример #2
0
    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()