Beispiel #1
0
    def on_mouse_right_click(self, event, state_machine_m, result):

        menu = Gtk.Menu()
        for sm_id, sm_m in self.model.state_machines.items():
            menu_item = create_menu_item(
                sm_m.root_state.state.name,
                constants.BUTTON_EXCHANGE,
                callback=self.change_selected_state_machine_id,
                callback_args=[sm_id])
            menu.append(menu_item)

        menu_item = create_menu_item("New State Machine",
                                     constants.BUTTON_ADD,
                                     callback=new_state_machine)
        menu.append(menu_item)

        if self.model.state_machines:
            menu_item = create_menu_item("Close State Machine",
                                         constants.BUTTON_CLOSE,
                                         callback=self.on_close_clicked,
                                         callback_args=[state_machine_m, None])
            menu.append(menu_item)

        menu.show_all()
        menu.popup(None, None, None, None, event.get_button()[1], event.time)
        return True
Beispiel #2
0
 def insert_execution_sub_menu_in_menu(self, menu, shortcuts_dict,
                                       accel_group):
     execution_sub_menu_item, execution_sub_menu = append_sub_menu_to_parent_menu(
         "Execution", menu, constants.BUTTON_START)
     execution_sub_menu.append(
         create_menu_item(
             "from here",
             constants.BUTTON_START_FROM_SELECTED_STATE,
             self.on_run_from_selected_state_activate,
             accel_code=shortcuts_dict['start_from_selected'][0],
             accel_group=accel_group))
     execution_sub_menu.append(
         create_menu_item("stop here",
                          constants.BUTTON_RUN_TO_SELECTED_STATE,
                          self.on_run_to_selected_state_activate,
                          accel_code=shortcuts_dict['run_to_selected'][0],
                          accel_group=accel_group))
     execution_sub_menu.append(
         create_menu_item("run this state",
                          constants.BUTTON_RUN_SELECTED_STATE,
                          self.on_run_selected_state_activate,
                          accel_code=shortcuts_dict['run_selected'][0],
                          accel_group=accel_group))
     execution_sub_menu.append(
         create_menu_item("only run this state",
                          constants.BUTTON_ONLY_RUN_SELECTED_STATE,
                          self.on_run_only_selected_state_activate,
                          accel_code=shortcuts_dict['only_run_selected'][0],
                          accel_group=accel_group))
Beispiel #3
0
    def generate_right_click_menu_library(self):
        menu = Gtk.Menu()
        accel_group = self.accel_group
        shortcuts_dict = global_gui_config.get_config_value('SHORTCUTS')

        self.insert_show_library_content_in_menu(menu, shortcuts_dict, accel_group)

        self.insert_is_start_state_in_menu(menu, shortcuts_dict, accel_group)

        self.insert_execution_sub_menu_in_menu(menu, shortcuts_dict, accel_group)

        self.insert_copy_cut_paste_in_menu(menu, shortcuts_dict, accel_group, no_paste=True)

        menu.append(create_menu_item("Group states", constants.BUTTON_GROUP, self.on_group_states_activate,
                                     accel_code=shortcuts_dict['group'][0], accel_group=accel_group))

        menu.append(create_menu_item("Open separately", constants.BUTTON_OPEN,
                                     self.on_open_library_state_separately_activate,
                                     accel_code=shortcuts_dict['open_library_state_separately'][0],
                                     accel_group=accel_group))

        menu.append(create_menu_item("Substitute state with library", constants.BUTTON_REFR,
                                     self.on_substitute_state_activate,
                                     accel_code=shortcuts_dict['substitute_state'][0], accel_group=accel_group))

        sub_menu_item, sub_menu = append_sub_menu_to_parent_menu("Substitute library with template", menu,
                                                                 constants.BUTTON_REFR)
        sub_menu.append(create_menu_item("Keep state name", constants.BUTTON_LEFTA,
                                         partial(self.on_substitute_library_with_template_activate, keep_name=True)))

        sub_menu.append(create_menu_item("Take name from library", constants.BUTTON_EXCHANGE,
                                         partial(self.on_substitute_library_with_template_activate, keep_name=False)))

        return menu
Beispiel #4
0
 def insert_copy_cut_paste_in_menu(self, menu, shortcuts_dict, accel_group, no_paste=False):
     menu.append(create_menu_item("Copy selection", constants.BUTTON_COPY, self.on_copy_activate,
                                  accel_code=shortcuts_dict['copy'][0], accel_group=accel_group))
     menu.append(create_menu_item("Paste selection", constants.BUTTON_PASTE, self.on_paste_activate,
                                  accel_code=shortcuts_dict['paste'][0], accel_group=accel_group))
     if not no_paste:
         menu.append(create_menu_item("Cut selection", constants.BUTTON_CUT, self.on_cut_activate,
                                      accel_code=shortcuts_dict['cut'][0], accel_group=accel_group))
Beispiel #5
0
 def add_clear_menu_item(self, widget, menu):
     clear_item = create_menu_item("Clear Logging View",
                                   constants.BUTTON_DEL,
                                   callback=self._clear_buffer)
     menu.append(Gtk.SeparatorMenuItem())
     menu.append(clear_item)
     menu.show_all()
Beispiel #6
0
    def insert_show_library_content_in_menu(self, menu, shortcuts_dict, accel_group):

        selection = gui_singletons.state_machine_manager_model.get_selected_state_machine_model().selection
        selected_state_m = selection.get_selected_state()
        if len(selection.states) == 1 and isinstance(selected_state_m, LibraryStateModel):
            menu.append(create_check_menu_item("Show library content", selected_state_m.meta['gui']['show_content'],
                                               partial(self.on_toggle_show_library_content, state_m=selected_state_m)))
            menu.append(create_menu_item("Show library tree element", constants.SIGN_LIB,
                                         partial(self.on_select_library_tree_element, state_m=selected_state_m)))
Beispiel #7
0
    def _update_recently_opened_state_machines(self):
        """Update the sub menu Open Recent in File menu

        Method clean's first all menu items of the sub menu 'recent open', then insert the user menu item to clean
        recent opened state machine paths and finally insert menu items for all elements in recent opened state machines
        list.
        """
        if not self.registered_view:
            return

        for item in self.view.sub_menu_open_recently.get_children():
            self.view.sub_menu_open_recently.remove(item)

        menu_item = gui_helper_label.create_menu_item(
            "remove invalid paths", constants.ICON_ERASE,
            global_runtime_config.clean_recently_opened_state_machines)
        self.view.sub_menu_open_recently.append(menu_item)
        self.view.sub_menu_open_recently.append(Gtk.SeparatorMenuItem())

        for sm_path in global_runtime_config.get_config_value(
                "recently_opened_state_machines", []):
            # define label string
            root_state_name = gui_helper_state_machine.get_root_state_name_of_sm_file_system_path(
                sm_path)
            if root_state_name is None and not os.path.isdir(sm_path):
                root_state_name = 'NOT_ACCESSIBLE'
            label_string = "'{0}' in {1}".format(
                root_state_name,
                sm_path) if root_state_name is not None else sm_path

            # define icon of menu item
            is_in_libs = library_manager.is_os_path_within_library_root_paths(
                sm_path)
            button_image = constants.SIGN_LIB if is_in_libs else constants.BUTTON_OPEN

            # prepare state machine open call_back function
            sm_open_function = partial(self.on_open_activate, path=sm_path)

            # create and insert new menu item
            menu_item = gui_helper_label.create_menu_item(
                label_string, button_image, sm_open_function)
            self.view.sub_menu_open_recently.append(menu_item)

        self.view.sub_menu_open_recently.show_all()
Beispiel #8
0
    def generate_right_click_menu_state(self):
        menu = Gtk.Menu()
        accel_group = self.accel_group
        shortcuts_dict = global_gui_config.get_config_value('SHORTCUTS')

        self.insert_is_start_state_in_menu(menu, shortcuts_dict, accel_group)

        self.insert_execution_sub_menu_in_menu(menu, shortcuts_dict,
                                               accel_group)

        menu.append(Gtk.SeparatorMenuItem())

        add_sub_menu_item, add_sub_menu = append_sub_menu_to_parent_menu(
            "Add", menu, constants.BUTTON_ADD)

        add_state_sub_menu_item, add_state_sub_menu = append_sub_menu_to_parent_menu(
            "State", add_sub_menu, constants.BUTTON_ADD)

        add_state_sub_menu.append(
            create_menu_item(
                "Execution State",
                constants.BUTTON_ADD,
                self.on_add_execution_state_activate,
                accel_code=shortcuts_dict['add_execution_state'][0],
                accel_group=accel_group))
        add_state_sub_menu.append(
            create_menu_item(
                "Hierarchy State",
                constants.BUTTON_ADD,
                self.on_add_hierarchy_state_activate,
                accel_code=shortcuts_dict['add_hierarchy_state'][0],
                accel_group=accel_group))
        add_state_sub_menu.append(
            create_menu_item(
                "Preemptive State",
                constants.BUTTON_ADD,
                self.on_add_preemptive_state_activate,
                accel_code=shortcuts_dict['add_preemptive_state'][0],
                accel_group=accel_group))
        add_state_sub_menu.append(
            create_menu_item("Barrier State",
                             constants.BUTTON_ADD,
                             self.on_add_barrier_state_activate,
                             accel_code=shortcuts_dict['add_barrier_state'][0],
                             accel_group=accel_group))

        add_sub_menu.append(Gtk.SeparatorMenuItem())

        add_sub_menu.append(
            create_menu_item("Outcome",
                             constants.BUTTON_ADD,
                             self.on_add_outcome,
                             accel_code=shortcuts_dict['add_outcome'][0],
                             accel_group=accel_group))
        add_sub_menu.append(
            create_menu_item("Output Port",
                             constants.BUTTON_ADD,
                             self.on_add_output,
                             accel_code=shortcuts_dict['add_output'][0],
                             accel_group=accel_group))
        add_sub_menu.append(
            create_menu_item("Input Port",
                             constants.BUTTON_ADD,
                             self.on_add_input,
                             accel_code=shortcuts_dict['add_input'][0],
                             accel_group=accel_group))
        add_sub_menu.append(
            create_menu_item(
                "Scoped Variable",
                constants.BUTTON_ADD,
                self.on_add_scoped_variable,
                accel_code=shortcuts_dict['add_scoped_variable'][0],
                accel_group=accel_group))
        menu.append(
            create_menu_item("Delete",
                             constants.BUTTON_DEL,
                             self.on_delete,
                             accel_code=shortcuts_dict['delete'][0],
                             accel_group=accel_group))
        menu.append(Gtk.SeparatorMenuItem())

        self.insert_copy_cut_paste_in_menu(menu, shortcuts_dict, accel_group)

        from rafcon.core.states.barrier_concurrency_state import DeciderState
        selection = gui_singletons.state_machine_manager_model.get_selected_state_machine_model(
        ).selection
        selected_state_m = selection.get_selected_state()
        all_m_list = gui_singletons.state_machine_manager_model.get_selected_state_machine_model(
        ).selection.get_all()
        if any([isinstance(elem, (AbstractStateModel, ScopedVariableModel)) for elem in all_m_list]) and \
                all([isinstance(elem, (AbstractStateModel, ScopedVariableModel, TransitionModel, DataFlowModel))
                     for elem in all_m_list]) and \
                all([not state_m.state.is_root_state for state_m in selection.states]):
            menu.append(
                create_menu_item("Group states",
                                 constants.BUTTON_GROUP,
                                 self.on_group_states_activate,
                                 accel_code=shortcuts_dict['group'][0],
                                 accel_group=accel_group))
        if len(selection.states) == 1:
            if isinstance(selected_state_m, ContainerStateModel
                          ) and not selected_state_m.state.is_root_state:
                menu.append(
                    create_menu_item("Ungroup states",
                                     constants.BUTTON_UNGR,
                                     self.on_ungroup_state_activate,
                                     accel_code=shortcuts_dict['ungroup'][0],
                                     accel_group=accel_group))
            if not isinstance(
                    selected_state_m.state,
                    DeciderState) and not selected_state_m.state.is_root_state:
                menu.append(
                    create_menu_item(
                        "Substitute state",
                        constants.BUTTON_REFR,
                        self.on_substitute_state_activate,
                        accel_code=shortcuts_dict['substitute_state'][0],
                        accel_group=accel_group))

            from rafcon.gui.controllers.state_editor.overview import StateOverviewController
            allowed_state_classes = StateOverviewController.get_allowed_state_classes(
                selected_state_m.state)
            if len(allowed_state_classes) > 1:
                change_type_sub_menu_item, change_type_sub_menu = append_sub_menu_to_parent_menu(
                    "Change state type", menu, constants.BUTTON_EXCHANGE)
                for state_class in allowed_state_classes:
                    callback_function = partial(self.on_type_change_activate,
                                                target_class=state_class)
                    class_item = create_menu_item(state_class.__name__,
                                                  constants.SIGN_LIB,
                                                  callback_function,
                                                  accel_code=None,
                                                  accel_group=accel_group)

                    if isinstance(selected_state_m.state, state_class):
                        class_item.set_sensitive(False)
                    change_type_sub_menu.append(class_item)
        menu.append(Gtk.SeparatorMenuItem())

        # save state as but not for root state, therefore the user should use save state machine as
        if len(selection.states
               ) == 1 and not selected_state_m.state.is_root_state:
            _, save_as_sub_menu = append_sub_menu_to_parent_menu(
                "Save state as", menu, constants.BUTTON_SAVE)
            callback_function = partial(
                self.on_save_as_activate,
                save_as_function=gui_helper_state_machine.
                save_selected_state_as)
            save_as_sub_menu.append(
                create_menu_item("State machine",
                                 constants.BUTTON_SAVE,
                                 callback_function,
                                 accel_code=shortcuts_dict['save_state_as'][0],
                                 accel_group=accel_group))
            save_as_library_sub_menu_item, save_as_library_sub_menu = append_sub_menu_to_parent_menu(
                "Library", save_as_sub_menu, constants.SIGN_LIB)
            library_root_paths = core_singletons.library_manager.library_root_paths
            for library_root_key in library_root_paths.keys():
                callback_function = partial(
                    self.on_save_as_activate,
                    path=library_root_paths[library_root_key],
                    save_as_function=gui_helper_state_machine.
                    save_selected_state_as)
                save_as_library_sub_menu.append(
                    create_menu_item(library_root_key,
                                     constants.SIGN_LIB,
                                     callback_function,
                                     accel_code=None,
                                     accel_group=accel_group))
        else:
            _, save_as_sub_menu = append_sub_menu_to_parent_menu(
                "Save state machine as", menu, constants.BUTTON_SAVE)
            callback_function = partial(
                self.on_save_as_activate,
                save_as_function=gui_helper_state_machine.save_state_machine_as
            )
            save_as_sub_menu.append(
                create_menu_item("State machine",
                                 constants.BUTTON_SAVE,
                                 callback_function,
                                 accel_code=shortcuts_dict['save_as'][0],
                                 accel_group=accel_group))
            save_as_library_sub_menu_item, save_as_library_sub_menu = append_sub_menu_to_parent_menu(
                "Library", save_as_sub_menu, constants.SIGN_LIB)
            library_root_paths = core_singletons.library_manager.library_root_paths
            for library_root_key in library_root_paths.keys():
                callback_function = partial(
                    self.on_save_as_activate,
                    path=library_root_paths[library_root_key],
                    save_as_function=gui_helper_state_machine.
                    save_state_machine_as)
                save_as_library_sub_menu.append(
                    create_menu_item(library_root_key,
                                     constants.SIGN_LIB,
                                     callback_function,
                                     accel_code=None,
                                     accel_group=accel_group))
        menu.append(Gtk.SeparatorMenuItem())
        callback_function = partial(self.on_change_background_color,
                                    state_model=selected_state_m)
        menu.append(
            create_menu_item("Change Background Color",
                             constants.BUTTON_CHANGE_BACKGROUND_COLOR,
                             callback_function,
                             accel_group=accel_group))
        return menu
Beispiel #9
0
    def generate_right_click_menu(self, kind='library'):
        menu = Gtk.Menu()
        if kind == 'library':
            menu.append(create_menu_item("Add as library (link)", constants.BUTTON_ADD,
                                         partial(self.insert_button_clicked, as_template=False)))
            menu.append(create_menu_item("Add as template (copy)", constants.BUTTON_COPY,
                                         partial(self.insert_button_clicked, as_template=True)))
            menu.append(Gtk.SeparatorMenuItem())
            menu.append(create_menu_item("Open", constants.BUTTON_OPEN, self.open_button_clicked))
            menu.append(create_menu_item("Open and run", constants.BUTTON_START, self.open_run_button_clicked))
            menu.append(Gtk.SeparatorMenuItem())
            menu.append(create_menu_item("Rename library", constants.BUTTON_RENAME,
                                         self.menu_item_rename_libraries_or_root_clicked))
            menu.append(create_menu_item("Remove library", constants.BUTTON_DEL,
                                         self.menu_item_remove_libraries_or_root_clicked))
            menu.append(create_menu_item("Relocate library", constants.BUTTON_RELOCATE,
                                         self.menu_item_relocate_libraries_or_root_clicked))

            sub_menu_item, sub_menu = append_sub_menu_to_parent_menu("Substitute as library", menu,
                                                                     constants.BUTTON_REFR)

            sub_menu.append(create_menu_item("Keep state name", constants.BUTTON_LEFTA,
                                             partial(self.substitute_as_library_clicked, keep_name=True)))
            sub_menu.append(create_menu_item("Take name from Library", constants.BUTTON_EXCHANGE,
                                             partial(self.substitute_as_library_clicked, keep_name=False)))

            sub_menu_item, sub_menu = append_sub_menu_to_parent_menu("Substitute as template", menu,
                                                                     constants.BUTTON_REFR)

            sub_menu.append(create_menu_item("Keep state name", constants.BUTTON_LEFTA,
                                             partial(self.substitute_as_template_clicked, keep_name=True)))
            sub_menu.append(create_menu_item("Take name from Library", constants.BUTTON_EXCHANGE,
                                             partial(self.substitute_as_template_clicked, keep_name=False)))

            menu.append(create_menu_item("Find usages in libraries", constants.ICON_FIND_USAGES,
                                         self.menu_item_find_usages_clicked))

        elif kind in ['library root', 'library tree']:
            menu.append(create_menu_item("Add library root", constants.BUTTON_NEW,
                                         self.menu_item_add_library_root_clicked))
            if kind == 'library root':
                menu.append(create_menu_item("Rename library root", constants.BUTTON_RENAME,
                                             self.menu_item_rename_libraries_or_root_clicked))
                menu.append(create_menu_item("Remove library root", constants.BUTTON_DEL,
                                             self.menu_item_remove_libraries_or_root_clicked))
                menu.append(create_menu_item("Relocate library root", constants.BUTTON_RELOCATE,
                                             self.menu_item_relocate_libraries_or_root_clicked))
        elif kind == 'libraries':
            menu.append(create_menu_item("Remove libraries", constants.BUTTON_DEL,
                                         self.menu_item_remove_libraries_or_root_clicked))
            menu.append(create_menu_item("Relocate libraries", constants.BUTTON_RELOCATE,
                                         self.menu_item_relocate_libraries_or_root_clicked))

        return menu
Beispiel #10
0
    def generate_right_click_menu(self, kind='library'):
        menu = Gtk.Menu()
        if kind == 'library':
            menu.append(
                create_menu_item(
                    "Add as library (link)", constants.BUTTON_ADD,
                    partial(self.insert_button_clicked, as_template=False)))
            menu.append(
                create_menu_item(
                    "Add as template (copy)", constants.BUTTON_COPY,
                    partial(self.insert_button_clicked, as_template=True)))
            menu.append(Gtk.SeparatorMenuItem())
            menu.append(
                create_menu_item("Open", constants.BUTTON_OPEN,
                                 self.open_button_clicked))
            menu.append(
                create_menu_item("Open and run", constants.BUTTON_START,
                                 self.open_run_button_clicked))
            menu.append(Gtk.SeparatorMenuItem())
            menu.append(
                create_menu_item("Remove library", constants.BUTTON_DEL,
                                 self.delete_button_clicked))

            sub_menu_item, sub_menu = append_sub_menu_to_parent_menu(
                "Substitute as library", menu, constants.BUTTON_REFR)

            sub_menu.append(
                create_menu_item(
                    "Keep state name", constants.BUTTON_LEFTA,
                    partial(self.substitute_as_library_clicked,
                            keep_name=True)))
            sub_menu.append(
                create_menu_item(
                    "Take name from Library", constants.BUTTON_EXCHANGE,
                    partial(self.substitute_as_library_clicked,
                            keep_name=False)))

            sub_menu_item, sub_menu = append_sub_menu_to_parent_menu(
                "Substitute as template", menu, constants.BUTTON_REFR)

            sub_menu.append(
                create_menu_item(
                    "Keep state name", constants.BUTTON_LEFTA,
                    partial(self.substitute_as_template_clicked,
                            keep_name=True)))
            sub_menu.append(
                create_menu_item(
                    "Take name from Library", constants.BUTTON_EXCHANGE,
                    partial(self.substitute_as_template_clicked,
                            keep_name=False)))
        elif kind == 'library root':
            menu.append(
                create_menu_item("Add library root", constants.BUTTON_DEL,
                                 self.add_button_clicked))
            menu.append(
                create_menu_item("Remove library root", constants.BUTTON_DEL,
                                 self.delete_button_clicked))
        elif kind == 'libraries':
            menu.append(
                create_menu_item("Remove libraries", constants.BUTTON_DEL,
                                 self.delete_button_clicked))
        elif kind == 'library tree':
            menu.append(
                create_menu_item("Add library root", constants.BUTTON_DEL,
                                 self.add_button_clicked))

        return menu