diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py |
Initial commit
Diffstat (limited to 'support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py')
-rw-r--r-- | support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py b/support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py new file mode 100644 index 0000000000..454d2583d4 --- /dev/null +++ b/support/autolatex/libs/gtk3/autolatex/config/figure_assignment_panel.py @@ -0,0 +1,202 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (C) 2013-14 Stephane Galland <galland@arakhne.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. + +#--------------------------------- +# IMPORTS +#--------------------------------- + +# Standard libraries +import os +import re +import configparser +# Include the Glib, Gtk and Gedit libraries +from gi.repository import Gtk +# AutoLaTeX internal libs +from ..utils import utils +from . import abstract_panel + +#--------------------------------- +# INTERNATIONALIZATION +#--------------------------------- + +import gettext +_T = gettext.gettext + +#--------------------------------- +# CLASS Panel +#--------------------------------- + +# Gtk panel that is managing the configuration of the figure assignments +class Panel(abstract_panel.AbstractPanel): + __gtype_name__ = "AutoLaTeXFigureAssignmentPanel" + + def __init__(self, is_document_level, directory, window): + abstract_panel.AbstractPanel.__init__(self, is_document_level, directory, window) + + + # + # Fill the grid + # + def _init_widgets(self): + # Comment + ui_label = self._create_label(_T("List of the figures detected in your document's directory.\nYou can edit the second column to set the translator used for a particular figure.")) + self._insert_row(ui_label, None, False) + # List of figures + self._ui_figure_edit_store = Gtk.ListStore(str) + self._ui_figure_store = Gtk.ListStore(str, str) + ui_figure_widget = Gtk.TreeView() + ui_figure_widget.set_model(self._ui_figure_store) + ui_figure_widget.append_column(Gtk.TreeViewColumn(_T("Figure"), Gtk.CellRendererText(), text=0)) + renderer_combo = Gtk.CellRendererCombo() + renderer_combo.set_property("editable", True) + renderer_combo.set_property("model", self._ui_figure_edit_store) + renderer_combo.set_property("text-column", 0) + renderer_combo.set_property("has-entry", False) + renderer_combo.connect("edited", self.on_figure_translator_changed) + ui_figure_widget.append_column(Gtk.TreeViewColumn(_T("Translator"), renderer_combo, text=1)) + ui_figure_widget.set_headers_clickable(False) + ui_figure_widget.set_headers_visible(True) + self._ui_figure_selection = ui_figure_widget.get_selection() + self._ui_figure_selection.set_mode(Gtk.SelectionMode.SINGLE) + # Scroll + ui_figure_scroll = self._create_scroll_for(ui_figure_widget) + self._insert_row(ui_figure_scroll, None, False) + + + # + # Initialize the content + # + def _init_content(self): + self._settings = utils.backend_get_translators(self._directory) + self._translators = {} + self._regex = re.compile('^([^2]+)') + for translator in self._settings.sections(): + result = re.match(self._regex, translator) + if result: + source = result.group(1) + if source not in self._translators: + self._translators[source] = [] + self._translators[source].append(translator) + + self._settings = utils.backend_get_images(self._directory) + self._file_list = {} + for translator in self._settings.sections(): + if self._settings.has_option(translator, 'automatic assignment'): + data = self._settings.get(translator, 'automatic assignment') + files = data.split(os.pathsep) + for afile in files: + if afile not in self._file_list: + self._file_list[afile] = {} + self._file_list[afile]['translator'] = translator + self._file_list[afile]['override'] = False + self._file_list[afile]['selected'] = translator + if self._settings.has_option(translator, 'files to convert'): + data = self._settings.get(translator, 'files to convert') + files = data.split(os.pathsep) + for afile in files: + if afile not in self._file_list: + self._file_list[afile] = {} + self._file_list[afile]['translator'] = translator + self._file_list[afile]['override'] = True + self._file_list[afile]['selected'] = translator + if self._settings.has_option(translator, 'overriden assignment'): + data = self._settings.get(translator, 'overriden assignment') + files = data.split(os.pathsep) + for afile in files: + if afile not in self._file_list: + self._file_list[afile] = {} + self._file_list[afile]['auto-translator'] = translator + + for filename in sorted(self._file_list): + if 'translator' in self._file_list[filename]: + self._ui_figure_store.append( [ filename, self._file_list[filename]['translator'] ] ) + + + # + # Connect signals + # + def _connect_signals(self): + self._ui_figure_selection.connect('changed',self.on_figure_selection_changed) + + + def update_widget_states(self): + pass + + # Invoked when the selection in the lsit of figure paths has changed + def on_figure_selection_changed(self, selection, data=None): + n_sel = self._ui_figure_selection.count_selected_rows() + if n_sel > 0: + path = self._ui_figure_selection.get_selected_rows()[1][0] + sel_iter = self._ui_figure_store.get_iter(path) + value = self._ui_figure_store.get_value(sel_iter, 1) + afile = self._ui_figure_store.get_value(sel_iter, 0) + self._ui_figure_edit_store.clear() + result = re.match(self._regex, value) + if result: + source = result.group(1) + if afile in self._file_list and self._file_list[afile]['override']: + auto_translator = self._file_list[afile]['auto-translator'] + else: + auto_translator = self._file_list[afile]['translator'] + for translator in self._translators[source]: + label = translator + if translator == auto_translator: + label = label+' (default)' + self._ui_figure_edit_store.append( [label] ) + + # Invoked when the selection in the lsit of figure paths has changed + def on_figure_translator_changed(self, combo, path, new_text, data=None): + if new_text: + if new_text.endswith(' (default)'): + new_text = new_text[0:len(new_text)-10] + sel_iter = self._ui_figure_store.get_iter(path) + self._ui_figure_store.set_value(sel_iter, 1, new_text) + afile = self._ui_figure_store.get_value(sel_iter, 0) + self._file_list[afile]['selected'] = new_text + + def _append_file(self, config, section, option, afile): + if config.has_option(section, option): + path = config.get(section, option) + if path: + path = path+os.pathsep+afile + else: + path = afile + else: + path = afile + config.set(section, option, path) + + # Invoked when the changes in the panel must be saved + def save(self): + config = configparser.ConfigParser() + for source in self._translators: + for translator in self._translators[source]: + config.add_section(translator) + for afile in self._file_list: + current = self._file_list[afile]['selected'] + if self._file_list[afile]['override']: + std = self._file_list[afile]['auto-translator'] + else: + std = self._file_list[afile]['translator'] + if current == std: + self._append_file(config, current, 'automatic assignment', afile) + else: + self._append_file(config, current, 'files to convert', afile) + self._append_file(config, std, 'overriden assignment', afile) + return utils.backend_set_images(self._directory, config) |