# -*- coding: utf-8 -*-
"""
Модуль cerebro.gui предоставляет доступ к простым графическим интерфейсам,
таким как диалоги ввода, выбора файлов, индикатор прогресса и т.д.
.. rubric:: Функции
* :py:func:`critical_box() <cerebro.gui.critical_box>`
* :py:func:`get_existing_directory() <cerebro.gui.get_existing_directory>`
* :py:func:`get_open_file_name() <cerebro.gui.get_open_file_name>`
* :py:func:`get_open_file_names() <cerebro.gui.get_open_file_names>`
* :py:func:`get_save_file_name() <cerebro.gui.get_save_file_name>`
* :py:func:`information_box() <cerebro.gui.information_box>`
* :py:func:`message_editor() <cerebro.gui.message_editor>`
* :py:func:`question_box() <cerebro.gui.question_box>`
* :py:func:`warning_box() <cerebro.gui.warning_box>`
.. rubric:: Классы
* :py:class:`AccountDialog <cerebro.gui.AccountDialog>`
* :py:class:`InputDialog <cerebro.gui.InputDialog>`
* :py:class:`ProgressBox <cerebro.gui.ProgressBox>`
"""
import py_cerebro_gui
[документация]def get_existing_directory(title):
"""
:param string title: заголовок диалога выбора.
:returns: путь до выбранной директории.
:rtype: string
Показывает пользователю диалог выбора директории и возвращает выбранную.
Если пользователь отменил выбор, возвратиться None.
::
dir = cerebro.gui.get_existing_directory('Выберите директорию')
if dir != None:
print('Выбранная директория', dir)
"""
return py_cerebro_gui.get_existing_directory(title)
[документация]def get_open_file_name(title, filter = ''):
"""
:param string title: заголовок диалога выбора.
:param string filter: фильтр файлов по типу, например ``'*.txt'``.
Если вы хотите использовать несколько фильтров, разделяйте их ';;', например::
'Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)'
:returns: путь до выбранного файла.
:rtype: string
Показывает пользователю диалог выбора файла и возвращает выбранный.
Если пользователь отменил выбор, возвратиться None.
::
file = cerebro.gui.get_open_file_name('Выберите файл', '*.txt')
if file != None:
print('Выбранный файл', file)
.. seealso:: :py:func:`get_open_file_names() <cerebro.gui.get_open_file_names>`.
"""
return py_cerebro_gui.get_open_file_name(title, filter)
[документация]def get_open_file_names(title, filter = ''):
"""
:param string title: заголовок диалога выбора.
:param string filter: фильтр файлов по типу, например ``'*.txt'``.
Если вы хотите использовать несколько фильтров, разделяйте их ';;', например::
'Images (*.png *.xpm *.jpg);;Text files (*.txt);;XML files (*.xml)'
:returns: список путей до выбранных файлов.
:rtype: list(string,)
Показывает пользователю диалог выбора одного и более файлов и возвращает выбранные.
Если пользователь отменил выбор, возвратиться None.
::
files = cerebro.gui.get_open_file_names('Выберите файлы', '*.txt')
if files != None:
print('Выбранные файлы', files)
.. seealso:: :py:func:`get_open_file_name() <cerebro.gui.get_open_file_name>`.
"""
return py_cerebro_gui.get_open_file_names(title, filter)
[документация]def get_save_file_name(title, suffix, filename = ''):
"""
:param string title: заголовок диалога выбора.
:param string suffix: суффикс(расширение) файла.
:param string filename: имя файла по умолчанию.
:returns: путь до выбранного файла.
:rtype: string
Показывает пользователю диалог выбора файла для сохранения и возвращает выбранный.
Если пользователь отменил выбор, возвратиться None.
::
file = cerebro.gui.get_save_file_name('Сохранить файл', 'txt')
if file != None:
print('Файл для сохранения', file)
"""
return py_cerebro_gui.get_save_file_name(title, suffix, filename)
[документация]def critical_box(title, text):
"""
:param string title: заголовок окна.
:param string text: текст сообщения.
Показывает пользователю окно c ошибкой.
.. image:: ../img/capi_gui_error.png
:align: center
"""
py_cerebro_gui.critical_box(title, text)
[документация]def question_box(title, text):
"""
:param string title: заголовок окна.
:param string text: текст вопроса.
:returns: True, если пользователь нажал кнопку "Да".
:rtype: bool
Показывает пользователю диалог с вопросом.
.. image:: ../img/capi_gui_question.png
:align: center
"""
return py_cerebro_gui.question_box(title, text) != 0
[документация]def warning_box(title, text):
"""
:param string title: заголовок окна.
:param string text: текст сообщения.
Показывает пользователю окно с предупреждением.
"""
py_cerebro_gui.warning_box(title, text)
[документация]def message_editor(type, task_id, parent_message_id = None, html_text = None, attachments = None, attachment_as_links = None, work_time = None, status_id = None, client_visible = None):
"""
:param int type: :py:const:`тип сообщения <cerebro.aclasses.AbstractMessage.TYPE_>`.
:param int task_id: идентификатор задачи, к которой будет добавлено сообщение.
:param int parent_message_id: идентификатор родительского сообщения, то есть сообщения на которое это сообщение является ответом.
:param string html_text: текст сообщения в формате html. Текст может быть и без форматирования.
:param list(string,) attachments: список файлов, которые будут приложены к сообщению.
:param list(string,) attachment_as_links: список файлов, которые будут добавлены к сообщению как сссылки.
:param float work_time: время в минутах.
:param int status_id: идентификатор статуса задачи, в который перейдет задача после отправки сообщения.
:param bool client_visible: Если равен True, сообщение устанавливается как видимое для клиентов.
Открывает стандартное неблокирующее окно редактора сообщения для последующей отправки нового сообщения к задаче.
Все аргументы, кроме типа сообщения и идентификатора задачи, необязательны. Если какие-то из параметров сообщения не нужно изменять, передавайте вместо нех None.
Файлы или линки на файлы в списках attachments и attachment_as_links должны иметь полный путь.
Чтобы задать статус задачи в 'Нет статуса', передайте арнумент status_id равный 0.
Аргумент work_time имеет смысл задавать только для отчетов или рецензий.
Если тип сообщения :py:const:`"Отчет" <cerebro.aclasses.AbstractMessage.TYPE_REPORT>`
или :py:const:`"Отчет за ресурс" <cerebro.aclasses.AbstractMessage.TYPE_RESOURCE_REPORT>`,
рабочее время означает заявленное время работы.
Если тип сообщения :py:const:`"Рецензия" <cerebro.aclasses.AbstractMessage.TYPE_REVIEW>`,
рабочее время означает принятое время работы за предыдущий отчет.
::
current_task = cerebro.core.current_task()
cerebro.gui.message_editor(cerebro.aclasses.AbstractMessage.TYPE_NOTE, current_task.id(), None, 'Test')
"""
if html_text == None:
html_text = ''
if parent_message_id == None:
parent_message_id = -2
if attachments == None:
attachments = []
if attachment_as_links == None:
attachment_as_links = []
if work_time == None:
work_time = -1
if status_id == None:
status_id = -2
if client_visible == None:
client_visible = -1
py_cerebro_gui.message_editor(type, task_id, parent_message_id, html_text, attachments, attachment_as_links, work_time, status_id, int(client_visible))
[документация]class ProgressBox():
"""
:param string title: заголовок окна прогресса.
:param int min: минимальное значение прогресса.
:param int max: максимальное значение прогресса.
Класс окна индикации прогреса.
.. rubric:: Методы
* :py:meth:`close() <cerebro.gui.ProgressBox.close>`
* :py:meth:`hide_cancel_button() <cerebro.gui.ProgressBox.hide_cancel_button>`
* :py:meth:`label() <cerebro.gui.ProgressBox.label>`
* :py:meth:`max() <cerebro.gui.ProgressBox.max>`
* :py:meth:`min() <cerebro.gui.ProgressBox.min>`
* :py:meth:`reset() <cerebro.gui.ProgressBox.reset>`
* :py:meth:`set_label() <cerebro.gui.ProgressBox.set_label>`
* :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>`
* :py:meth:`set_title() <cerebro.gui.ProgressBox.set_title>`
* :py:meth:`set_value() <cerebro.gui.ProgressBox.set_value>`
* :py:meth:`show() <cerebro.gui.ProgressBox.show>`
* :py:meth:`title() <cerebro.gui.ProgressBox.title>`
* :py:meth:`value() <cerebro.gui.ProgressBox.value>`
* :py:meth:`was_canceled() <cerebro.gui.ProgressBox.was_canceled>`
.. image:: ../img/capi_gui_progress.png
:align: center
::
prgbar = cerebro.gui.ProgressBox('Окно прогресса', 0, 100)
prgbar.set_label('Прогресс...')
prgbar.show()
for i in range(0,100):
if prgbar.was_canceled() == True: # проверяем, не отменил ли пользователь операцию
break
prgbar.set_value(i)
prgbar.close()
"""
def __init__(self, title, min = 0, max = 100):
self.__id = py_cerebro_gui.progress_bar(title, min, max)
[документация] def set_title(self, title):
"""
:param string title: заголовок окна.
Задает заголовок окна прогресса.
.. seealso:: :py:meth:`title() <cerebro.gui.ProgressBox.title>`.
"""
py_cerebro_gui.progress_bar_set_title(self.__id, title)
[документация] def title(self):
"""
:returns: заголовок окна прогресса.
:rtype: string
.. seealso:: :py:meth:`set_title() <cerebro.gui.ProgressBox.set_title>`.
"""
return py_cerebro_gui.progress_bar_title(self.__id)
[документация] def set_label(self, label):
"""
:param string label: текстовая метка.
Задает текстовую метку.
.. seealso:: :py:meth:`label() <cerebro.gui.ProgressBox.label>`.
"""
py_cerebro_gui.progress_bar_set_label(self.__id, label)
[документация] def label(self):
"""
:returns: текстовая метка.
:rtype: string
.. seealso:: :py:meth:`set_label() <cerebro.gui.ProgressBox.set_label>`.
"""
return py_cerebro_gui.progress_bar_label(self.__id)
[документация] def set_value(self, value):
"""
:param int value: значение прогресса.
Устанавливает значение прогресса.
.. seealso:: :py:meth:`value() <cerebro.gui.ProgressBox.value>`.
"""
py_cerebro_gui.progress_bar_set_value(self.__id, value)
[документация] def value(self):
"""
:returns: значение прогресса.
:rtype: int
.. seealso:: :py:meth:`set_value() <cerebro.gui.ProgressBox.set_value>`.
"""
return py_cerebro_gui.progress_bar_value(self.__id)
[документация] def set_range(self, min, max):
"""
:param int min: минималное значение прогресса.
:param int max: максимальное значение прогресса.
Устанавливает минималное и максимальное значения прогресса.
.. seealso:: :py:meth:`max() <cerebro.gui.ProgressBox.max>`, :py:meth:`min() <cerebro.gui.ProgressBox.min>`.
"""
py_cerebro_gui.progress_bar_set_range(self.__id, min, max)
[документация] def min(self):
"""
:returns: минимальное значение прогресса.
:rtype: int
.. seealso:: :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>`.
"""
return py_cerebro_gui.progress_bar_min(self.__id)
[документация] def max(self):
"""
:returns: максимальное значение прогресса.
:rtype: int
.. seealso:: :py:meth:`set_range() <cerebro.gui.ProgressBox.set_range>`.
"""
return py_cerebro_gui.progress_bar_max(self.__id)
[документация] def reset(self):
"""
Сбрасывает значение прогресса в минимальное значение.
"""
py_cerebro_gui.progress_bar_reset(self.__id)
[документация] def show(self):
"""
Показывыает окно прогресса.
.. seealso:: :py:meth:`close() <cerebro.gui.ProgressBox.close>`.
"""
py_cerebro_gui.progress_bar_show(self.__id)
[документация] def close(self):
"""
Закрывает окно прогресса.
.. seealso:: :py:meth:`show() <cerebro.gui.ProgressBox.show>`.
"""
py_cerebro_gui.progress_bar_close(self.__id)
[документация] def was_canceled(self):
"""
:returns: True, если пользователь нажал кнопку отмены.
:rtype: bool
"""
return py_cerebro_gui.progress_bar_was_canceled(self.__id) != 0
[документация]class AccountDialog():
"""
:param string title: заголовок диалога.
:param string label: текстовая метка.
:param string store_key: ключ для восстановления раннее сохраненного логина и пароля.
Класс диалога ввода логина и пароля.
.. rubric:: Методы
* :py:meth:`execute() <cerebro.gui.AccountDialog.execute>`
* :py:meth:`login() <cerebro.gui.AccountDialog.login>`
* :py:meth:`password() <cerebro.gui.AccountDialog.password>`
* :py:meth:`set_login() <cerebro.gui.AccountDialog.set_login>`
* :py:meth:`store() <cerebro.gui.AccountDialog.store>`
.. image:: ../img/capi_gui_account.png
:align: center
::
daccount = cerebro.gui.account_dialog('Пример', 'Введите ваш логин и пароль', 'store_key')
res = daccount.execute()
if res == True:
print('Введенные пользователем логин и пароль', daccount.login(), daccount.password())
daccount.store('store_key') # сохраняем пароль для последующих вызовов
"""
def __init__(self, title, label = '', store_key = ''):
self.__id = py_cerebro_gui.daccount(title, label, store_key)
[документация] def set_login(self, login):
"""
:param string login: логин.
Устанавливает значение логина.
.. seealso:: :py:meth:`login() <cerebro.gui.AccountDialog.login>`.
"""
py_cerebro_gui.daccount_set_login(self.__id, login)
[документация] def execute(self):
"""
:returns: True, если пользователь ввел логин и пароль и нажал кнопку Ok, либо логин и пароль были сохранены ранее.
:rtype: bool
Показывает диалог пользователю.
Если логин и пароль были сохранены при прошлом вызове, диалог не будет показан,
вернётся значение True и далее вы можете получить логин и пароль воспользовавшись методами
:py:meth:`login() <cerebro.gui.AccountDialog.login>` и :py:meth:`password() <cerebro.gui.AccountDialog.password>`.
"""
return py_cerebro_gui.daccount_exec(self.__id) != 0
[документация] def login(self):
"""
:returns: введенный пользователем логин.
:rtype: string
.. seealso:: :py:meth:`set_login() <cerebro.gui.AccountDialog.set_login>`.
"""
return py_cerebro_gui.daccount_login(self.__id)
[документация] def password(self):
"""
:returns: введенный пользователем пароль.
:rtype: string
"""
return py_cerebro_gui.daccount_pass(self.__id)
[документация] def store(self, store_key, expires = 7): # сохраняется по ключу на текущего пользователя, если -1 - навсегда
"""
:param string store_key: ключ для сохранения логина и пароля.
:param int expires: срок хранения пароля в днях. Установка этого аргумента в -1 будет означать сохранение пароля навсегда.
Диалог позволяет сохранять логин и пароль на определенное вами время по текстовому ключу.
Для восстановления раннее сохраненного палоля передайте в конструктор диалога тот же ключ,
что и при сохранении.
.. note:: Все пароли сохраняются в зашифрованном виде.
"""
py_cerebro_gui.daccount_save(self.__id, store_key, expires)