Esempio n. 1
0
    def __init__(self):
        """!
        1. Создает объект открываемых файлов в редакторе.
        2. Настраивает положение, размер, название окна.
        3. Создает объект конфигураций.
        4. Создает виджет настроект области редактирования
            и подсветки текста.
        5. Показывает окно.
        """
        super().__init__()
        self.setLayout(Qt.QHBoxLayout())

        ## Название окна
        self.window_title = 'EpiPy'

        self.configure_window()
        ## Конфигурации приложения
        self.config = Config()

        ## Главное меню приложения
        self.menu = menu_bar.Menu(self)

        self.setMenuBar(self.menu)

        ## Анализатор текста для обновления виджета инфорации о тексте
        self.analyzer = analyzer.Analyzer()
        self.analyzer.count = int(self.config.data['NFollowing']['value'])
        self.analyzer.delimiter = self.config.data['Delimiters']['value']
        self.analyzer.phrase = self.config.data['Phrases']['value']

        ## Виджет редактора текста с подсветкой
        self.tabbed_text_edit = TabbedTextEdit(
            self,
            self.config.data,
            self.statusBar())
        self.tabbed_text_edit.text_changed.connect(self.text_updated)
        self.configure_text_edit()

        ## Виджет настроек отображения и обработки текста
        self.table = settings_widget.SettingsWidget(self.config.data)
        self.table.equal_areas_colors_changed.connect(self.equal_areas_colors_changed)
        self.table.area_bg_color_changed.connect(self.area_bg_color_changed)
        self.table.area_size_changed.connect(self.area_size_changed)
        self.table.current_phrase_color_changed.connect(self.current_phrase_color_changed)
        self.table.max_difflen_changed.connect(self.max_difflen_changed)
        self.table.delimiters_changed.connect(self.delimiters_changed)
        self.table.phrases_changed.connect(self.phrases_changed)
        self.sync_table_with_config()

        ## Виджет с настройками, который можно перемещать
        self.settings_dockwidget = QtWidgets.QDockWidget(self)
        self.configure_settings_dockwidget()

        ## Виджет информации о обрабатываемом тексте
        self.info_widget = InfoWidget()
        ## Виджет с информацией о обрабатываемом тексте
        self.info_dockwidget = QtWidgets.QDockWidget(self)
        self.configure_info_dockwidget()

        ## Окно помощи написания названий цветов
        self.color_help = color.ColorHelp(self)

        self.show()
Esempio n. 2
0
class Window(QtWidgets.QMainWindow):
    def __init__(self):
        """!
        1. Создает объект открываемых файлов в редакторе.
        2. Настраивает положение, размер, название окна.
        3. Создает объект конфигураций.
        4. Создает виджет настроект области редактирования
            и подсветки текста.
        5. Показывает окно.
        """
        super().__init__()
        self.setLayout(Qt.QHBoxLayout())

        ## Название окна
        self.window_title = 'EpiPy'

        self.configure_window()
        ## Конфигурации приложения
        self.config = Config()

        ## Главное меню приложения
        self.menu = menu_bar.Menu(self)

        self.setMenuBar(self.menu)

        ## Анализатор текста для обновления виджета инфорации о тексте
        self.analyzer = analyzer.Analyzer()
        self.analyzer.count = int(self.config.data['NFollowing']['value'])
        self.analyzer.delimiter = self.config.data['Delimiters']['value']
        self.analyzer.phrase = self.config.data['Phrases']['value']

        ## Виджет редактора текста с подсветкой
        self.tabbed_text_edit = TabbedTextEdit(
            self,
            self.config.data,
            self.statusBar())
        self.tabbed_text_edit.text_changed.connect(self.text_updated)
        self.configure_text_edit()

        ## Виджет настроек отображения и обработки текста
        self.table = settings_widget.SettingsWidget(self.config.data)
        self.table.equal_areas_colors_changed.connect(self.equal_areas_colors_changed)
        self.table.area_bg_color_changed.connect(self.area_bg_color_changed)
        self.table.area_size_changed.connect(self.area_size_changed)
        self.table.current_phrase_color_changed.connect(self.current_phrase_color_changed)
        self.table.max_difflen_changed.connect(self.max_difflen_changed)
        self.table.delimiters_changed.connect(self.delimiters_changed)
        self.table.phrases_changed.connect(self.phrases_changed)
        self.sync_table_with_config()

        ## Виджет с настройками, который можно перемещать
        self.settings_dockwidget = QtWidgets.QDockWidget(self)
        self.configure_settings_dockwidget()

        ## Виджет информации о обрабатываемом тексте
        self.info_widget = InfoWidget()
        ## Виджет с информацией о обрабатываемом тексте
        self.info_dockwidget = QtWidgets.QDockWidget(self)
        self.configure_info_dockwidget()

        ## Окно помощи написания названий цветов
        self.color_help = color.ColorHelp(self)

        self.show()

    def configure_window(self):
        """!
        Изменяет размер окна.

        Устанавливает название окна.

        По окончанию настройки выводит сообщение готовности к работе.
        """
        self.resize(850, 550)
        self.setWindowTitle(self.window_title)
        self.__window_centred()
        self.statusBar().showMessage('Ready')

    def __window_centred(self):
        """!
        Перемещает главное окно в центр экрана.
        """
        q_rect = self.frameGeometry()
        widget = QtWidgets.QDesktopWidget()
        center_position = widget.availableGeometry().center()
        q_rect.moveCenter(center_position)
        self.move(q_rect.topLeft())

    def configure_text_edit(self):
        """!
        Конфигурирует виджет редактирования и подсветки текста.
        """
        self.setCentralWidget(self.tabbed_text_edit)
        conf = self.config.data
        self.tabbed_text_edit.equal_areas_colors(conf['Selections']['value'])
        self.tabbed_text_edit.parsed_text_background(conf['Selections_color']['value'])

    def configure_settings_dockwidget(self):
        """!
        Конфигурирует виджет настроек подсветки и обработки текста.
        """
        self.settings_dockwidget.setWindowTitle('Settings')
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.settings_dockwidget)
        self.settings_dockwidget.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable)
        scroll = QtWidgets.QScrollArea(self)
        scroll.setWidgetResizable(True)
        scroll.setWidget(self.table)
        self.settings_dockwidget.setWidget(scroll)
        self.settings_dockwidget.hide()

    def sync_table_with_config(self):
        """!
        Загружает все конфигурации в виджет настроек.
        """
        self.table.colors_of_equal_areas = self.config.data['Selections']['value']
        self.table.area_bg = self.config.data['Selections_color']['value']
        self.table.area_size = self.config.data['NFollowing']['value']
        self.table.phrase_color = self.config.data['Current_phrase_color']['value']
        self.table.phrase_pattern = self.config.data['Phrases']['value']
        self.table.max_diff_len = self.config.data['MaxDifLenPhrases']['value']
        self.table.delimiters_pattern = self.config.data['Delimiters']['value']

    def configure_info_dockwidget(self):
        """!
        Конфигурирует виджет информации о обрабатываемом тексте.
        """
        self.info_dockwidget.setWindowTitle('Information')
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.info_dockwidget)
        self.info_dockwidget.setFeatures(QtWidgets.QDockWidget.DockWidgetMovable)
        scroll = QtWidgets.QScrollArea(self)
        scroll.setWidgetResizable(True)
        scroll.setWidget(self.info_widget)
        self.info_dockwidget.setWidget(scroll)
        self.info_dockwidget.hide()

    def visibility_settings_dockwidget(self, b):
        """!
        Скрывает и показывает виджет настроек подсветки и обработки текста.
        @param b показать настройки, если True, иначе скрыть.
        """
        if b:
            self.settings_dockwidget.show()
        else:
            self.settings_dockwidget.hide()

    def visibility_info_dockwidget(self, b):
        """!
        Скрывает и показывает виджет настроек подсветки и обработки текста.
        @param b показать настройки, если True, иначе скрыть.
        """
        if b:
            self.info_dockwidget.show()
        else:
            self.info_dockwidget.hide()

    def text_updated(self, text):
        """!
        Обновляет текст в экземпляре класса File.
        @param text обновленный текст.
        """
        self.analyzer.recalculation(text)

        self.info_widget.count_graphemes = self.analyzer.count_graphemes
        self.info_widget.count_phrases = self.analyzer.count_phrases
        self.info_widget.table_of_graphemes = self.analyzer.table_of_graphemes

    def open_a_new_file(self):
        """!
        Запрашивает создание нового файла.
        """
        self.tabbed_text_edit.open_new_file()

    def open_a_file(self):
        """!
        Запрашивает открытие нового файла.
        """
        self.tabbed_text_edit.open_file()

    def save_a_file(self):
        """!
        СЗапрашивает сохранение открытого файла.
        """
        self.tabbed_text_edit.save_file()

    def save_a_file_as(self):
        """!
        Запрашивает сохранение открытого файла по задаваемому пути.
        """
        self.tabbed_text_edit.save_file_as()

    def close_a_file(self):
        """!
        Запрашивает закрытие открытого файла.
        """
        self.tabbed_text_edit.close_file()

    def choice_font(self):
        """!
        Открывает окно с выбором нового шрифта.

        Устанавливает новый выбранный шрифт
        в виджет редактирования открытого файла.
        """
        font, ok = QtWidgets.QFontDialog.getFont(self.tabbed_text_edit.font())
        if ok:
            self.tabbed_text_edit.set_font(font)

    def equal_areas_colors_changed(self, colors):
        """!
        Обновляет цвета используемые для выделения эквивалентных областей текста.

        @param colors строка с цветами разделёнными пробелами.
        """
        self.config.data['Selections']['value'] = colors
        self.tabbed_text_edit.equal_areas_colors(colors)
        self.tabbed_text_edit.update_selections()
        self.tabbed_text_edit.highlights()
        self.tabbed_text_edit.repaint()

    def area_bg_color_changed(self, color):
        """!
        Обновляет фоновый цвет обрабатываемых областей текста.

        @param color: строка с цветом областей.
        """
        self.config.data['Selections_color']['value'] = color
        self.tabbed_text_edit.parsed_text_background(color)

    def area_size_changed(self, value):
        """!
        Обновляет размер обрабатываемых областей.

        @param value целое число, указывающее на количество обрабатываемых фраз
        по сторонам от фразы на которой стоит курсор.
        """
        self.config.data['NFollowing']['value'] = value
        self.tabbed_text_edit.parser_count(value)
        self.tabbed_text_edit.update_selections()
        self.tabbed_text_edit.highlights()
        self.tabbed_text_edit.repaint()

    def current_phrase_color_changed(self, color):
        """!
        Цвет выделения фразы на которой стоит курсор.

        @param color строка с цветом фразы на которой стоит курсор.
        """
        self.config.data['Current_phrase_color']['value'] = color
        self.tabbed_text_edit.current_phrase_color(color)

    def max_difflen_changed(self, value):
        """!
        Изменяет максимальное различие размера обрабатываемых фраз в порядках.

        @param value рациональное число,
        задающее максимальное различие размеров обрабатываемых фраз.
        Если длинна меньшей фразы умноженная на *value* меньше, чем длинна большей фразы,
        тогда не будет производиться поиск эквивалентности.
        """
        self.config.data['MaxDifLenPhrases']['value'] = value
        # TODO: update parser settings

    def delimiters_changed(self, value):
        """!
        Изменяет паттерн поиска разделителей фраз в тексте.

        @param value строка, которая может быть регулярным выражением.
        """
        self.config.data['Delimiters']['value'] = value
        self.tabbed_text_edit.parser_delimiter(value)

    def phrases_changed(self, value):
        """!
        Изменяет паттерн поиска фраз в тексте.

        @param value строка, которая может быть регулярным выражением.
        """
        self.config.data['Phrases']['value'] = value
        self.tabbed_text_edit.parser_phrase(value)

    def show_color_help(self):
        """!
        Показать окно справки по написанию названий цветов.
        """
        self.color_help.show()

    def closeEvent(self, event):
        """!
        Запрашивает подтверждение на выход.
        При пложительном ответе сохраняет настройки и закрывает окно.

        @param event: при отрицательном ответе пользователя событие игнорируется
        """
        question = QtWidgets.QMessageBox.question
        reply = question(self, 'Oh, quit?',
                         "Are you sure to quit?",
                         QtWidgets.QMessageBox.Yes |
                         QtWidgets.QMessageBox.No,
                         QtWidgets.QMessageBox.No)

        if reply == QtWidgets.QMessageBox.Yes:
            self.config.save()
            event.accept()
        else:
            event.ignore()