From 17ad1f6aff5ab5ba534cdf0a86987d37cb6aa512 Mon Sep 17 00:00:00 2001 From: "Joel A. Kulesza" Date: Mon, 27 Mar 2017 17:07:20 -0600 Subject: [PATCH] Allow \begin/\end tikzpicture tag selection --- tikz_editor/controllers/preferences.py | 3 ++ tikz_editor/globals/defaults.py | 1 + tikz_editor/models/preferences.py | 19 ++++++++++ tikz_editor/views/document/content.py | 49 ++++++++++++++----------- tikz_editor/views/preferences/editor.py | 15 ++++++++ 5 files changed, 65 insertions(+), 22 deletions(-) diff --git a/tikz_editor/controllers/preferences.py b/tikz_editor/controllers/preferences.py index 2eed41d..905f3e2 100644 --- a/tikz_editor/controllers/preferences.py +++ b/tikz_editor/controllers/preferences.py @@ -45,6 +45,7 @@ def _connectViewAndModel(self): self.view.editor.autoWrapChangedSignal.connect(Preferences.setAutoWrap) self.view.editor.errorMarkersChangedSignal.connect(Preferences.setShowErrorMarkers) self.view.editor.errorAnnotationsChangedSignal.connect(Preferences.setShowErrorAnnotations) + self.view.editor.selectTagsChangedSignal.connect(Preferences.setSelectTags) self.view.editor.autoPreviewChangedSignal.connect(Preferences.setAutoPreview) self.view.editor.previewThresholdChangedSignal.connect(Preferences.setPreviewThreshold) @@ -56,6 +57,7 @@ def _connectViewAndModel(self): self.view.editor.autoWrapChangedSignal.connect(EditorView.reloadUserPreferences) self.view.editor.errorMarkersChangedSignal.connect(ErrorsController.reloadUserPreferences) self.view.editor.errorAnnotationsChangedSignal.connect(ErrorsController.reloadUserPreferences) + self.view.editor.selectTagsChangedSignal.connect(EditorView.reloadUserPreferences) self.view.document.preambleTemplateChangedSignal.connect(Preferences.setPreambleTemplate) self.view.document.latexFileTemplateChangedSignal.connect(Preferences.setLatexFileTemplate) @@ -77,6 +79,7 @@ def _syncViewAndModel(self): self.view.editor.auto_wrap = Preferences.getAutoWrap() self.view.editor.error_markers = Preferences.getShowErrorMarkers() self.view.editor.error_annotations = Preferences.getShowErrorAnnotations() + self.view.editor.select_tags = Preferences.getSelectTags() self.view.editor.auto_preview = Preferences.getAutoPreview() self.view.editor.preview_threshold = Preferences.getPreviewThreshold() diff --git a/tikz_editor/globals/defaults.py b/tikz_editor/globals/defaults.py index 25147ad..2049439 100644 --- a/tikz_editor/globals/defaults.py +++ b/tikz_editor/globals/defaults.py @@ -21,6 +21,7 @@ AUTO_WRAP = True SHOW_ERROR_MARKERS = True SHOW_ERROR_ANNOTATIONS = True +SELECT_TAGS = False PREVIEW_THRESHOLD = 500 # times in ms before previewing when the user stop typing AUTO_PREVIEW = True diff --git a/tikz_editor/models/preferences.py b/tikz_editor/models/preferences.py index e798b83..b6eaa7c 100644 --- a/tikz_editor/models/preferences.py +++ b/tikz_editor/models/preferences.py @@ -43,6 +43,7 @@ class PreferencesModel(object): AUTO_WRAP = "AutoWrap" SHOW_ERROR_MARKERS = "ShowErrorMarkers" SHOW_ERROR_ANNOTATIONS = "ShowErrorAnnotations" + SELECT_TAGS = "SelectTags" SNIPPETS = "Snippets" PREVIEW_THRESHOLD = "PreviewThreshold" AUTO_PREVIEW = "AutoPreview" @@ -320,6 +321,24 @@ def setShowErrorAnnotations(value): def defaultShowErrorAnnotations(): return defaults.SHOW_ERROR_MARKERS + + @staticmethod + def hasSelectTags(): + return PreferencesModel.containsKey(PreferencesModel.SELECT_TAGS) + + @staticmethod + def getSelectTags(): + return PreferencesModel.getValueOrDefault(PreferencesModel.SELECT_TAGS, PreferencesModel.defaultSelectTags()).toBool() + + @staticmethod + def setSelectTags(value): + PreferencesModel.setValue(PreferencesModel.SELECT_TAGS, value) + + @staticmethod + def defaultSelectTags(): + return defaults.SELECT_TAGS + + @staticmethod def hasPreviewThreshold(): return PreferencesModel.containsKey(PreferencesModel.PREVIEW_THRESHOLD) diff --git a/tikz_editor/views/document/content.py b/tikz_editor/views/document/content.py index 5c3ef1d..fc9033c 100644 --- a/tikz_editor/views/document/content.py +++ b/tikz_editor/views/document/content.py @@ -16,6 +16,7 @@ from PyQt4.QtCore import * from PyQt4.QtGui import * +from tikz_editor.models import Preferences import tikz_editor.globals.actions as actions from tikz_editor.tools.qt import ActionFactory, ToolBarFactory @@ -103,27 +104,31 @@ def _sourceModificationAttemptedWhileReadOnly(self): QApplication.beep() def _sourceCursorPositionChanged(self, line, index): - source = self.source_editor_view - content = source.content - if not (content.startswith("\\begin{tikzpicture}") and content.startswith("\\begin{tikzpicture")): - source.content = "\\begin{tikzpicture}" + content[18:] - if line == 0 and index < 20: - source.setCursorPosition(0, 19) - source.setReadOnly(True) - elif line == source.lines() - 1: - source.setCursorPosition(source.lines() - 2, source.lineSize(source.lines() - 1)) - source.setReadOnly(True) + select_tags = Preferences.getSelectTags() + if(not select_tags): + source = self.source_editor_view + content = source.content + if not (content.startswith("\\begin{tikzpicture}") and content.startswith("\\begin{tikzpicture")): + source.content = "\\begin{tikzpicture}" + content[18:] + if line == 0 and index < 20: + source.setCursorPosition(0, 19) + source.setReadOnly(True) + elif line == source.lines() - 1: + source.setCursorPosition(source.lines() - 2, source.lineSize(source.lines() - 1)) + source.setReadOnly(True) def _sourceSelectionChanged(self): - source = self.source_editor_view - (line_from, index_from, line_to, index_to) = source.getSelection() - selection_changed = False - if line_from == 0 and index_from < 19: - index_from = 19 - selection_changed = True - if line_to == source.lines() - 1: - line_to = source.lines() - 2 - index_to = source.lineSize(line_to + 1) - selection_changed = True - if selection_changed: - source.setSelection(line_from, index_from, line_to, index_to) + select_tags = Preferences.getSelectTags() + if(not select_tags): + source = self.source_editor_view + (line_from, index_from, line_to, index_to) = source.getSelection() + selection_changed = False + if line_from == 0 and index_from < 19: + index_from = 19 + selection_changed = True + if line_to == source.lines() - 1: + line_to = source.lines() - 2 + index_to = source.lineSize(line_to + 1) + selection_changed = True + if selection_changed: + source.setSelection(line_from, index_from, line_to, index_to) diff --git a/tikz_editor/views/preferences/editor.py b/tikz_editor/views/preferences/editor.py index 38e3098..72911dd 100644 --- a/tikz_editor/views/preferences/editor.py +++ b/tikz_editor/views/preferences/editor.py @@ -34,6 +34,7 @@ class EditorPreferencesView(QWidget): autoWrapChangedSignal = pyqtSignal(bool) errorMarkersChangedSignal = pyqtSignal(bool) errorAnnotationsChangedSignal = pyqtSignal(bool) + selectTagsChangedSignal = pyqtSignal(bool) autoPreviewChangedSignal = pyqtSignal(bool) previewThresholdChangedSignal = pyqtSignal(int) @@ -61,6 +62,7 @@ def __init__(self, parent=None): self.wrap_choice = QCheckBox("Auto-wrap lines") self.error_markers_choice = QCheckBox("Show error marker in margin of erroneous lines") self.error_annotations_choice = QCheckBox("Show error annotations beneath erroneous lines") + self.select_tags_choice = QCheckBox("Allow selection of \\begin/\\end tikzpicture tags") self.preview_choice = QCheckBox("Trigger preview after stopping edition for") self.preview_threshold_choice = QSpinBox() @@ -80,6 +82,7 @@ def _initConnections(self): self.wrap_choice.stateChanged.connect(self._autoWrapChanged) self.error_markers_choice.stateChanged.connect(self._errorMarkersChanged) self.error_annotations_choice.stateChanged.connect(self._errorAnnotationsChanged) + self.select_tags_choice.stateChanged.connect(self._selectTagsChanged) self.preview_choice.stateChanged.connect(self._autoPreviewChanged) self.preview_threshold_choice.valueChanged.connect(self._previewThresholdChanged) @@ -124,6 +127,7 @@ def _initLayout(self): layout.addRow(self.wrap_choice) layout.addRow(self.error_markers_choice) layout.addRow(self.error_annotations_choice) + layout.addRow(self.select_tags_choice) layout.addRow(tikz_editor.views.factory.ViewFactory.createLineSeparator()) sublayout2 = QHBoxLayout() sublayout2.addWidget(self.preview_choice) @@ -160,6 +164,9 @@ def _errorMarkersChanged(self, state): def _errorAnnotationsChanged(self, state): self.errorAnnotationsChangedSignal.emit(state) + def _selectTagsChanged(self, state): + self.selectTagsChangedSignal.emit(state) + def _autoPreviewChanged(self, state): self.autoPreviewChangedSignal.emit(state) @@ -234,6 +241,14 @@ def error_annotations(self): def error_annotations(self, value): self.error_annotations_choice.setChecked(value) + @property + def select_tags(self): + return self.select_tags_choice.isChecked() + + @auto_wrap.setter + def select_tags(self, value): + self.select_tags_choice.setChecked(value) + @property def auto_preview(self): return self.preview_choice.isChecked()