# -*- coding: utf-8 -*-
"""
Модуль cerebro.actions предоставляет доступ к различным меню в приложении для работы с элементами меню.
.. rubric:: Классы
* :py:class:`cerebro.actions.Action`
* :py:class:`cerebro.actions.Actions`
* :py:class:`cerebro.actions.AttachmentEditorMenu`
* :py:class:`cerebro.actions.AttachmentForumMenu`
* :py:class:`cerebro.actions.AttachmentForumToolBar`
* :py:class:`cerebro.actions.AttachmentSearchMenu`
* :py:class:`cerebro.actions.AttachmentSearchToolBar`
* :py:class:`cerebro.actions.MainMenu`
* :py:class:`cerebro.actions.MessageForumMenu`
* :py:class:`cerebro.actions.MessageForumToolBar`
* :py:class:`cerebro.actions.TaskActiveMenu`
* :py:class:`cerebro.actions.TaskNavigatorMenu`
* :py:class:`cerebro.actions.TaskSearchMenu`
* :py:class:`cerebro.actions.TaskToDoListMenu`
* :py:class:`cerebro.actions.TaskToolBar`
"""
from cerebro.multimethods import multimethod
import py_cerebro_action
[docs]class Action:
"""
Класс, предоставляющий интерфейс для доступа к элементам действий.
.. rubric:: Методы
* :py:meth:`function() <cerebro.actions.Action.function>`
* :py:meth:`is_checkable() <cerebro.actions.Action.is_checkable>`
* :py:meth:`is_checked() <cerebro.actions.Action.is_checked>`
* :py:meth:`is_enabled() <cerebro.actions.Action.is_enabled>`
* :py:meth:`is_visible() <cerebro.actions.Action.is_visible>`
* :py:meth:`name() <cerebro.actions.Action.name>`
* :py:meth:`set_checkable() <cerebro.actions.Action.set_checkable>`
* :py:meth:`set_checked() <cerebro.actions.Action.set_checked>`
* :py:meth:`set_enabled() <cerebro.actions.Action.set_enabled>`
* :py:meth:`set_name() <cerebro.actions.Action.set_name>`
* :py:meth:`set_visible() <cerebro.actions.Action.set_visible>`
"""
def __init__(self, function, name, icon='', shortcut='', shortcut_context=0):
self.__function = py_cerebro_action.new_action(function, name, icon, shortcut, shortcut_context)
[docs] def name(self):
"""
:returns: имя элемента.
:rtype: string
Получает имя элемента.
.. seealso:: :py:meth:`set_name() <cerebro.actions.Action.set_name>`.
"""
return py_cerebro_action.action_name(self.__function)
#def icon(self):
# """
# :returns: путь к файлу иконки.
# :rtype: string
#
# Получает путь к файлу иконки элемента.
#
# .. seealso:: :py:meth:`set_icon() <cerebro.actions.Action.set_icon>`.
# """
#
# return self.__icon
[docs] def function(self):
"""
:returns: исполняемая функция элемента.
:rtype: string
Получает исполняемую функцию элемента. Пример функции: "examples.action.menu_action".
"""
return self.__function
#def shortcut_context(self):
# """
# :returns: shortcut context.
# :rtype: int
#
# Получает shortcut context.
#
# .. seealso:: :py:meth:`set_shortcut_context() <cerebro.actions.Action.set_shortcut_context>`.
# """
#
# return self.__shortcut_context
[docs] def set_name(self, name):
"""
:param string name: имя элемента.
Назначает имя элемента.
.. seealso:: :py:meth:`name() <cerebro.actions.Action.name>`.
"""
py_cerebro_action.action_set_name(self.__function, name)
#def set_icon(self, icon):
# """
# :param string icon: путь к иконке элемента.
#
# Назначает путь к иконке элемента.
#
# .. seealso:: :py:meth:`icon() <cerebro.actions.Action.icon>`.
# """
#
# self.__icon = icon
#def set_function(self, function):
# """
# :param string function: исполняемая функция элемента.
#
# Назначает исполняемую функцию элемента. Пример функции: "examples.action.menu_action".
#
# .. seealso:: :py:meth:`function() <cerebro.actions.Action.function>`.
# """
#
# self.__function = function
#def set_shortcut_context(self, shortcut_context):
# """
# :param int shortcut_context: shortcut context элемента.
#
# Назначает shortcut context элемента.
#
# .. seealso:: :py:meth:`shortcut_context() <cerebro.actions.Action.shortcut_context>`.
# """
#
# self.__shortcut_context = shortcut_context
[docs] def set_visible(self, isVisible):
"""
:param bool isVisible: видимость элемента.
Назначает видимость элемента.
.. seealso:: :py:meth:`is_visible() <cerebro.actions.Action.is_visible>`.
"""
py_cerebro_action.action_set_visible(self.__function, isVisible)
[docs] def set_enabled(self, isEnabled):
"""
:param bool isEnabled: активность элемента.
Назначает активность элемента.
.. seealso:: :py:meth:`is_enabled() <cerebro.actions.Action.is_enabled>`.
"""
py_cerebro_action.action_set_enabled(self.__function, isEnabled)
[docs] def set_checkable(self, isCheckable):
"""
:param bool isCheckable: возможность отметить элемент включенным/выключенным.
Назначает возможность отметить элемент включенным/выключенным.
.. seealso:: :py:meth:`is_checkable() <cerebro.actions.Action.is_checkable>`.
"""
py_cerebro_action.action_set_checkable(self.__function, isCheckable)
[docs] def set_checked(self, isChecked):
"""
:param bool isChecked: включенность/выключенность элемента.
Назначает включенность/выключенность элемента.
.. seealso:: :py:meth:`is_checked() <cerebro.actions.Action.is_checked>`.
"""
py_cerebro_action.action_set_checked(self.__function, isChecked)
[docs] def is_visible(self):
"""
:returns: видимость элемента.
:rtype: bool
Получает видимость элемента.
.. seealso:: :py:meth:`set_visible() <cerebro.actions.Action.set_visible>`.
"""
return py_cerebro_action.action_is_visible(self.__function)
[docs] def is_enabled(self):
"""
:returns: активность элемента.
:rtype: bool
Получает активность элемента.
.. seealso:: :py:meth:`set_enabled() <cerebro.actions.Action.set_enabled>`.
"""
return py_cerebro_action.action_is_enabled(self.__function)
[docs] def is_checkable(self):
"""
:returns: возможность отметить элемент включенным/выключенным.
:rtype: bool
Получает возможность отметить элемент включенным/выключенным.
.. seealso:: :py:meth:`set_checkable() <cerebro.actions.Action.set_checkable>`.
"""
return py_cerebro_action.action_is_checkable(self.__function)
[docs] def is_checked(self):
"""
:returns: включенность/выключенность элемента.
:rtype: bool
Получает включенность/выключенность элемента.
.. seealso:: :py:meth:`set_checked() <cerebro.actions.Action.set_checked>`.
"""
return py_cerebro_action.action_is_checked(self.__function)
#def toggle(self):
# """
# toggle
# """
# pass
#def trigger(self):
# """
# trigger
# """
# pass
[docs]class Actions():
"""
Класс, предоставляющий интерфейс для доступа к элементам меню.
.. rubric:: Методы
* :py:meth:`action() <cerebro.actions.Actions.action>`
* :py:meth:`add_action() <cerebro.actions.Actions.multimetod_add_action>`
* :py:meth:`add_menu() <cerebro.actions.Actions.add_menu>`
* :py:meth:`add_separator() <cerebro.actions.Actions.add_separator>`
* :py:meth:`has_action() <cerebro.actions.Actions.has_action>`
* :py:meth:`has_menu() <cerebro.actions.Actions.has_menu>`
* :py:meth:`insert_action() <cerebro.actions.Actions.multimetod_insert_action>`
* :py:meth:`insert_menu() <cerebro.actions.Actions.insert_menu>`
* :py:meth:`insert_separator() <cerebro.actions.Actions.insert_separator>`
* :py:meth:`menu() <cerebro.actions.Actions.menu>`
* :py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`
* :py:meth:`remove_menu() <cerebro.actions.Actions.remove_menu>`
* :py:meth:`size() <cerebro.actions.Actions.size>`
"""
[docs] def multimetod_add_action():
"""
add_action(function, name, icon = '', shortcut = '', shortcut_context = 0)
:param string function: исполняемая функция элемента.
:param string name: имя элемента.
:param string icon: путь до файла иконки элемента.
:param string shortcut: ярлык элемента.
:param int shortcut_context: shortcut context.
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
add_action(action)
:param action: действие.
:type action: :py:class:`cerebro.actions.Action`
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Добавляет действие.
::
my_action = cerebro.actions.TaskToolBar().add_action('function', 'name')
.. seealso:: :py:meth:`insert_action() <cerebro.actions.Actions.multimetod_insert_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
pass
[docs] def multimetod_insert_action():
"""
insert_action(pos, function, name, icon = '', shortcut = '', shortcut_context = 0)
:param int pos: позиция элемента.
:param string function: исполняемая функция элемента.
:param string name: имя элемента.
:param string icon: путь до файла иконки элемента.
:param string shortcut: ярлык элемента.
:param int shortcut_context: shortcut context.
:returns: вставленное действие.
:rtype: :py:class:`cerebro.actions.Action`
insert_action(action)
:param int pos: позиция элемента.
:param action: действие.
:type action: :py:class:`cerebro.actions.Action`
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Вставляет действие в определенную позицию.
::
my_action = cerebro.actions.TaskToolBar().insert_action(0, 'function', 'name')
.. seealso:: :py:meth:`add_action() <cerebro.actions.Actions.multimetod_add_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
pass
def __init__(self, type):
self.__type = type
def __add_action_by_args__(self, function, name, icon = '', shortcut = '', shortcut_context = 0):
act = Action(function, name, icon, shortcut, shortcut_context)
return Action(py_cerebro_action.add_action(self.__type, act.function()), name)
@multimethod(str, str)
def add_action(self, function, name, icon = '', shortcut = '', shortcut_context = 0):
"""
:param string function: исполняемая функция элемента.
:param string name: имя элемента.
:param string icon: путь до файла иконки элемента.
:param string shortcut: ярлык элемента.
:param int shortcut_context: shortcut context.
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Добавляет действие.
::
my_action = cerebro.actions.TaskToolBar()
.. seealso:: :py:meth:`insert_action() <cerebro.actions.Actions.insert_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
return self.__add_action_by_args__(function, name, icon, shortcut, shortcut_context)
@multimethod(str, str, str)
def add_action(self, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__add_action_by_args__(function, name, icon, shortcut, shortcut_context)
@multimethod(str, str, str, str)
def add_action(self, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__add_action_by_args__(function, name, icon, shortcut, shortcut_context)
@multimethod(str, str, str, str, int)
def add_action(self, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__add_action_by_args__(function, name, icon, shortcut, shortcut_context)
@multimethod(Action)
def add_action(self, action):
"""
:param :py:class:`cerebro.actions.Action` action: действие.
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Добавляет действие.
::
my_action = cerebro.actions.TaskToolBar()
.. seealso:: :py:meth:`insert_action() <cerebro.actions.Actions.insert_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
#nm = self.__name + py_cerebro_action.text_separator() + action.name()
#py_cerebro_action.add_action_item(False, self.__id, action.function(), nm, action.icon(), action.shortcut(), action.shortcut_context())
#return action
return Action(py_cerebro_action.add_action(self.__type, action.function()), action.name())
def __insert_action__(self, pos, function, name, icon = '', shortcut = '', shortcut_context = 0):
act = Action(function, name, icon, shortcut, shortcut_context)
return Action(py_cerebro_action.insert_action(pos, self.__type, act.function()), name)
@multimethod(int, str, str)
def insert_action(self, pos, function, name, icon = '', shortcut = '', shortcut_context = 0):
"""
:param int pos: позиция элемента.
:param string function: исполняемая функция элемента.
:param string name: имя элемента.
:param string icon: путь до файла иконки элемента.
:param string shortcut: ярлык элемента.
:param int shortcut_context: shortcut context.
:returns: вставленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Вставляет действие в определенную позицию.
::
my_action = cerebro.actions.TaskToolBar()
.. seealso:: :py:meth:`add_action() <cerebro.actions.Actions.add_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
return self.__insert_action__(pos, function, name, icon, shortcut, shortcut_context)
@multimethod(int, str, str, str)
def insert_action(self, pos, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__insert_action__(pos, function, name, icon, shortcut, shortcut_context)
@multimethod(int, str, str, str, str)
def insert_action(self, pos, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__insert_action__(pos, function, name, icon, shortcut, shortcut_context)
@multimethod(int, str, str, str, str, int)
def insert_action(self, pos, function, name, icon = '', shortcut = '', shortcut_context = 0):
return self.__insert_action__(pos, function, name, icon, shortcut, shortcut_context)
@multimethod(int, Action)
def insert_action(self, pos, action):
"""
:param int pos: позиция элемента.
:param :py:class:`cerebro.actions.Action` action: действие.
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Вставляет действие в определенную позицию.
::
my_action = cerebro.actions.TaskToolBar()
.. seealso:: :py:meth:`add_action() <cerebro.actions.Actions.add_action>`,
:py:meth:`remove_action() <cerebro.actions.Actions.remove_action>`.
"""
#nm = self.__name + py_cerebro_action.text_separator() + action.name()
#py_cerebro_action.insert_action_item(False, self.__id, pos, action.function(), nm, action.icon(), action.shortcut(), action.shortcut_context())
#return action
return Action(py_cerebro_action.insert_action(pos, self.__type, action.function()), action.name())
[docs] def remove_action(self, function):
"""
:param string function: исполняемая функция элемента.
Удаляет действие.
.. seealso:: :py:meth:`add_action() <cerebro.actions.Actions.multimetod_add_action>`,
:py:meth:`insert_action() <cerebro.actions.Actions.multimetod_insert_action>`.
"""
if py_cerebro_action.has_action(self.__type, function):
py_cerebro_action.remove_action(self.__type, function)
[docs] def action(self, function):
"""
:param string function: функция действия.
:param :py:class:`cerebro.actions.Action` action: действие.
:returns: добавленное действие.
:rtype: :py:class:`cerebro.actions.Action`
Возвращает действие по идентификатору.
"""
return Action(py_cerebro_action.action(function), '0')
[docs] def has_action(self, function):
"""
:param string function: функция действия.
:returns: существует ли действие.
:rtype: bool
Проверяет наличие действия.
"""
return py_cerebro_action.has_action(self.__type, function)
[docs] def add_separator(self):
"""
Adds a separator to a menu.
.. seealso:: :py:meth:`insert_separator() <cerebro.menus.Menu.insert_separator>`.
"""
#py_cerebro_action.add_action_item(True, self.__id, '', self.__name, '')
py_cerebro_action.add_separator(self.__type)
[docs] def insert_separator(self, pos):
"""
:param int pos: separator position.
Puts a separator into a certain position in the menu.
.. seealso:: :py:meth:`add_separator() <cerebro.menus.Menu.add_separator>`.
"""
#py_cerebro_action.insert_action_item(True, self.__id, pos, '', self.__name, '')
py_cerebro_action.insert_separator(pos, self.__type)
[docs] def size(self):
"""
:returns: menu size (number of items).
:rtype: int
"""
#return py_cerebro_action.action_size(self.__id, self.__name)
return py_cerebro_action.actions_size(self.__type)
[docs]class MainMenu(Actions):
"""
Класс, предоставляющий интерфейс для доступа к элементам главного меню.
Идентификаторы меню:
'cerebro' - Cerebro
'view' - View
'tools' - Tools
'conference'- Web conference
'help' - Help
::
# Добавление кнопки в пользовательское меню главного меню и в меню Help:
mainMenu = cerebro.actions.MainMenu() # Получили главное меню приложения
myMenu = mainmenu.add_menu('MyMenu') # Создали пользовательское меню
act = cerebro.actions.Action('action.msgbox', 'Сообщение') # создали действие (кнопку)
myMenu.add_action(act) # добавили кнопку в пользовательском меню
mHelp = mainMenu.menu('help') # получили меню Help
mHelp.insert_action(0, act) # Добавили кнопку в меню Help на первую позицию
"""
def __init__(self):
Actions.__init__(self, 'app.actions.mainmenu')