PrEditor 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of PrEditor might be problematic. Click here for more details.
- preditor/__init__.py +322 -0
- preditor/__main__.py +13 -0
- preditor/about_module.py +161 -0
- preditor/cli.py +192 -0
- preditor/config.py +302 -0
- preditor/contexts.py +119 -0
- preditor/cores/__init__.py +0 -0
- preditor/cores/core.py +20 -0
- preditor/dccs/maya/PrEditor_maya.mod +2 -0
- preditor/dccs/maya/plug-ins/PrEditor_maya.py +110 -0
- preditor/debug.py +144 -0
- preditor/delayable_engine/__init__.py +302 -0
- preditor/delayable_engine/delayables.py +85 -0
- preditor/enum.py +728 -0
- preditor/excepthooks.py +131 -0
- preditor/gui/__init__.py +93 -0
- preditor/gui/app.py +160 -0
- preditor/gui/codehighlighter.py +209 -0
- preditor/gui/completer.py +226 -0
- preditor/gui/console.py +867 -0
- preditor/gui/dialog.py +178 -0
- preditor/gui/drag_tab_bar.py +190 -0
- preditor/gui/editor_chooser.py +57 -0
- preditor/gui/errordialog.py +68 -0
- preditor/gui/find_files.py +125 -0
- preditor/gui/fuzzy_search/__init__.py +0 -0
- preditor/gui/fuzzy_search/fuzzy_search.py +93 -0
- preditor/gui/group_tab_widget/__init__.py +325 -0
- preditor/gui/group_tab_widget/grouped_tab_menu.py +35 -0
- preditor/gui/group_tab_widget/grouped_tab_models.py +108 -0
- preditor/gui/group_tab_widget/grouped_tab_widget.py +78 -0
- preditor/gui/group_tab_widget/one_tab_widget.py +54 -0
- preditor/gui/level_buttons.py +343 -0
- preditor/gui/logger_window_handler.py +48 -0
- preditor/gui/logger_window_plugin.py +32 -0
- preditor/gui/loggerwindow.py +1385 -0
- preditor/gui/newtabwidget.py +69 -0
- preditor/gui/set_text_editor_path_dialog.py +59 -0
- preditor/gui/status_label.py +99 -0
- preditor/gui/suggest_path_quotes_dialog.py +50 -0
- preditor/gui/ui/editor_chooser.ui +93 -0
- preditor/gui/ui/errordialog.ui +74 -0
- preditor/gui/ui/find_files.ui +140 -0
- preditor/gui/ui/loggerwindow.ui +1105 -0
- preditor/gui/ui/set_text_editor_path_dialog.ui +189 -0
- preditor/gui/ui/suggest_path_quotes_dialog.ui +225 -0
- preditor/gui/window.py +161 -0
- preditor/gui/workbox_mixin.py +389 -0
- preditor/gui/workbox_text_edit.py +137 -0
- preditor/gui/workboxwidget.py +298 -0
- preditor/logging_config.py +52 -0
- preditor/osystem.py +401 -0
- preditor/plugins.py +118 -0
- preditor/prefs.py +74 -0
- preditor/resource/environment_variables.html +26 -0
- preditor/resource/error_mail.html +85 -0
- preditor/resource/error_mail_inline.html +41 -0
- preditor/resource/img/README.md +17 -0
- preditor/resource/img/arrow_forward.png +0 -0
- preditor/resource/img/check-bold.png +0 -0
- preditor/resource/img/chevron-down.png +0 -0
- preditor/resource/img/chevron-up.png +0 -0
- preditor/resource/img/close-thick.png +0 -0
- preditor/resource/img/comment-edit.png +0 -0
- preditor/resource/img/content-copy.png +0 -0
- preditor/resource/img/content-cut.png +0 -0
- preditor/resource/img/content-duplicate.png +0 -0
- preditor/resource/img/content-paste.png +0 -0
- preditor/resource/img/content-save.png +0 -0
- preditor/resource/img/debug_disabled.png +0 -0
- preditor/resource/img/eye-check.png +0 -0
- preditor/resource/img/file-plus.png +0 -0
- preditor/resource/img/file-remove.png +0 -0
- preditor/resource/img/format-align-left.png +0 -0
- preditor/resource/img/format-letter-case-lower.png +0 -0
- preditor/resource/img/format-letter-case-upper.png +0 -0
- preditor/resource/img/format-letter-case.svg +1 -0
- preditor/resource/img/information.png +0 -0
- preditor/resource/img/logging_critical.png +0 -0
- preditor/resource/img/logging_custom.png +0 -0
- preditor/resource/img/logging_debug.png +0 -0
- preditor/resource/img/logging_error.png +0 -0
- preditor/resource/img/logging_info.png +0 -0
- preditor/resource/img/logging_not_set.png +0 -0
- preditor/resource/img/logging_warning.png +0 -0
- preditor/resource/img/marker.png +0 -0
- preditor/resource/img/play.png +0 -0
- preditor/resource/img/playlist-play.png +0 -0
- preditor/resource/img/plus-minus-variant.png +0 -0
- preditor/resource/img/preditor.ico +0 -0
- preditor/resource/img/preditor.png +0 -0
- preditor/resource/img/preditor.psd +0 -0
- preditor/resource/img/preditor.svg +44 -0
- preditor/resource/img/regex.svg +1 -0
- preditor/resource/img/restart.svg +1 -0
- preditor/resource/img/skip-forward-outline.png +0 -0
- preditor/resource/img/skip-next-outline.png +0 -0
- preditor/resource/img/skip-next.png +0 -0
- preditor/resource/img/skip-previous.png +0 -0
- preditor/resource/img/subdirectory-arrow-right.png +0 -0
- preditor/resource/img/text-search-variant.png +0 -0
- preditor/resource/img/warning-big.png +0 -0
- preditor/resource/lang/python.json +30 -0
- preditor/resource/settings.ini +25 -0
- preditor/resource/stylesheet/Bright.css +65 -0
- preditor/resource/stylesheet/Dark.css +199 -0
- preditor/scintilla/__init__.py +22 -0
- preditor/scintilla/delayables/__init__.py +11 -0
- preditor/scintilla/delayables/smart_highlight.py +94 -0
- preditor/scintilla/delayables/spell_check.py +173 -0
- preditor/scintilla/documenteditor.py +2038 -0
- preditor/scintilla/finddialog.py +68 -0
- preditor/scintilla/lang/__init__.py +80 -0
- preditor/scintilla/lang/config/bash.ini +15 -0
- preditor/scintilla/lang/config/batch.ini +14 -0
- preditor/scintilla/lang/config/cpp.ini +19 -0
- preditor/scintilla/lang/config/css.ini +19 -0
- preditor/scintilla/lang/config/eyeonscript.ini +17 -0
- preditor/scintilla/lang/config/html.ini +21 -0
- preditor/scintilla/lang/config/javascript.ini +24 -0
- preditor/scintilla/lang/config/lua.ini +16 -0
- preditor/scintilla/lang/config/maxscript.ini +20 -0
- preditor/scintilla/lang/config/mel.ini +18 -0
- preditor/scintilla/lang/config/mu.ini +22 -0
- preditor/scintilla/lang/config/nsi.ini +19 -0
- preditor/scintilla/lang/config/perl.ini +19 -0
- preditor/scintilla/lang/config/puppet.ini +19 -0
- preditor/scintilla/lang/config/python.ini +28 -0
- preditor/scintilla/lang/config/ruby.ini +19 -0
- preditor/scintilla/lang/config/sql.ini +7 -0
- preditor/scintilla/lang/config/xml.ini +21 -0
- preditor/scintilla/lang/config/yaml.ini +18 -0
- preditor/scintilla/lang/language.py +240 -0
- preditor/scintilla/lexers/__init__.py +0 -0
- preditor/scintilla/lexers/cpplexer.py +21 -0
- preditor/scintilla/lexers/javascriptlexer.py +25 -0
- preditor/scintilla/lexers/maxscriptlexer.py +234 -0
- preditor/scintilla/lexers/mellexer.py +368 -0
- preditor/scintilla/lexers/mulexer.py +32 -0
- preditor/scintilla/lexers/pythonlexer.py +41 -0
- preditor/scintilla/ui/finddialog.ui +160 -0
- preditor/settings.py +71 -0
- preditor/stream/__init__.py +80 -0
- preditor/stream/director.py +73 -0
- preditor/stream/manager.py +74 -0
- preditor/streamhandler_helper.py +46 -0
- preditor/utils/__init__.py +0 -0
- preditor/utils/cute.py +30 -0
- preditor/utils/stylesheets.py +54 -0
- preditor/utils/text_search.py +342 -0
- preditor/version.py +21 -0
- preditor/weakref.py +363 -0
- preditor-1.0.0.dist-info/METADATA +224 -0
- preditor-1.0.0.dist-info/RECORD +158 -0
- preditor-1.0.0.dist-info/WHEEL +5 -0
- preditor-1.0.0.dist-info/entry_points.txt +18 -0
- preditor-1.0.0.dist-info/licenses/LICENSE +165 -0
- preditor-1.0.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from __future__ import absolute_import
|
|
2
|
+
|
|
3
|
+
from Qt.QtCore import QSize, Signal
|
|
4
|
+
from Qt.QtWidgets import QPushButton, QTabBar, QTabWidget
|
|
5
|
+
|
|
6
|
+
# This class is pulled from this example
|
|
7
|
+
# http://stackoverflow.com/a/20098415
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TabBarPlus(QTabBar):
|
|
11
|
+
plusClicked = Signal()
|
|
12
|
+
|
|
13
|
+
def __init__(self, parent=None):
|
|
14
|
+
super(TabBarPlus, self).__init__(parent)
|
|
15
|
+
# Plus Button
|
|
16
|
+
self.uiPlusBTN = QPushButton("+")
|
|
17
|
+
self.uiPlusBTN.setParent(self)
|
|
18
|
+
self.uiPlusBTN.setObjectName('uiPlusBTN')
|
|
19
|
+
self.uiPlusBTN.clicked.connect(self.plusClicked.emit)
|
|
20
|
+
self.movePlusButton()
|
|
21
|
+
|
|
22
|
+
def sizeHint(self):
|
|
23
|
+
sizeHint = QTabBar.sizeHint(self)
|
|
24
|
+
width = sizeHint.width()
|
|
25
|
+
height = sizeHint.height()
|
|
26
|
+
return QSize(width + 25, height)
|
|
27
|
+
|
|
28
|
+
def resizeEvent(self, event):
|
|
29
|
+
super(TabBarPlus, self).resizeEvent(event)
|
|
30
|
+
self.movePlusButton()
|
|
31
|
+
|
|
32
|
+
def tabLayoutChange(self):
|
|
33
|
+
super(TabBarPlus, self).tabLayoutChange()
|
|
34
|
+
|
|
35
|
+
self.movePlusButton()
|
|
36
|
+
|
|
37
|
+
def movePlusButton(self):
|
|
38
|
+
size = 0
|
|
39
|
+
for i in range(self.count()):
|
|
40
|
+
size += self.tabRect(i).width()
|
|
41
|
+
|
|
42
|
+
h = self.geometry().top()
|
|
43
|
+
w = self.width()
|
|
44
|
+
if size > w: # Show just to the left of the scroll buttons
|
|
45
|
+
self.uiPlusBTN.move(w - 54, h)
|
|
46
|
+
else:
|
|
47
|
+
self.uiPlusBTN.move(size, h)
|
|
48
|
+
# Resize the button to fit the height of the tab bar
|
|
49
|
+
hint = self.sizeHint().height()
|
|
50
|
+
self.uiPlusBTN.setMaximumSize(hint, hint)
|
|
51
|
+
self.uiPlusBTN.setMinimumSize(hint, hint)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
class NewTabWidget(QTabWidget):
|
|
55
|
+
addTabClicked = Signal()
|
|
56
|
+
|
|
57
|
+
def __init__(self, parent=None):
|
|
58
|
+
super(NewTabWidget, self).__init__(parent)
|
|
59
|
+
|
|
60
|
+
# Tab Bar
|
|
61
|
+
self._tab = TabBarPlus()
|
|
62
|
+
self.setTabBar(self._tab)
|
|
63
|
+
|
|
64
|
+
# Properties
|
|
65
|
+
self.setMovable(True)
|
|
66
|
+
self.setTabsClosable(True)
|
|
67
|
+
|
|
68
|
+
# Signals
|
|
69
|
+
self._tab.plusClicked.connect(self.addTabClicked.emit)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from __future__ import absolute_import
|
|
2
|
+
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
from Qt.QtWidgets import QDialog, QMessageBox
|
|
6
|
+
|
|
7
|
+
from . import loadUi
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SetTextEditorPathDialog(QDialog):
|
|
11
|
+
"""A dialog used to set the user's text editor executable path, as well as define a
|
|
12
|
+
'command template', which allows for the various ways text editor's may implement
|
|
13
|
+
opening a file at a given line number via Command Prompt.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, parent=None):
|
|
17
|
+
super(SetTextEditorPathDialog, self).__init__(parent)
|
|
18
|
+
loadUi(__file__, self)
|
|
19
|
+
|
|
20
|
+
# Retrieve existing data from LoggerWindow
|
|
21
|
+
path = self.parent().textEditorPath
|
|
22
|
+
cmdTempl = self.parent().textEditorCmdTempl
|
|
23
|
+
|
|
24
|
+
# If the data exists, place in the UI, otherwise use UI defaults
|
|
25
|
+
if path:
|
|
26
|
+
self.uiTextEditorExecutablePathLE.setText(path)
|
|
27
|
+
if cmdTempl:
|
|
28
|
+
self.uiTextEditorCommandPatternLE.setText(cmdTempl)
|
|
29
|
+
|
|
30
|
+
toolTip = (
|
|
31
|
+
"Examples:\n"
|
|
32
|
+
'SublimeText: "{exePath}" "{modulePath}":{lineNum}\n'
|
|
33
|
+
'notepad++: "{exePath}" "{modulePath}" -n{lineNum}\n'
|
|
34
|
+
'vim: "{exePath}" + {lineNum} "{modulePath}'
|
|
35
|
+
)
|
|
36
|
+
self.uiTextEditorCommandPatternLE.setToolTip(toolTip)
|
|
37
|
+
|
|
38
|
+
def accept(self):
|
|
39
|
+
"""Validate that the path exists and is executable.
|
|
40
|
+
Can't really validate the command template, so instead we use try/except when
|
|
41
|
+
issuing the command.
|
|
42
|
+
"""
|
|
43
|
+
path = self.uiTextEditorExecutablePathLE.text()
|
|
44
|
+
cmdTempl = self.uiTextEditorCommandPatternLE.text()
|
|
45
|
+
|
|
46
|
+
path = path.strip("\"")
|
|
47
|
+
|
|
48
|
+
# isExecutable is not very accurate, because on Windows, .jpg and .txt, etc
|
|
49
|
+
# files are returned as executable. Perhaps on other systems, it's actually
|
|
50
|
+
# relevant to whether the file is 'executable'.
|
|
51
|
+
isExecutable = os.access(path, os.X_OK)
|
|
52
|
+
if isExecutable:
|
|
53
|
+
self.parent().textEditorPath = path
|
|
54
|
+
self.parent().textEditorCmdTempl = cmdTempl
|
|
55
|
+
super(SetTextEditorPathDialog, self).accept()
|
|
56
|
+
else:
|
|
57
|
+
msg = "That path doesn't exists or isn't an executable file."
|
|
58
|
+
label = 'Incorrect Path'
|
|
59
|
+
QMessageBox.warning(self.window(), label, msg, QMessageBox.Ok)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
from __future__ import absolute_import
|
|
2
|
+
|
|
3
|
+
from collections import deque
|
|
4
|
+
from functools import partial
|
|
5
|
+
|
|
6
|
+
from Qt.QtCore import QPoint, QTimer
|
|
7
|
+
from Qt.QtWidgets import QApplication, QInputDialog, QLabel, QMenu
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class StatusLabel(QLabel):
|
|
11
|
+
"""A label that shows text and an average of code execution times in popup menu."""
|
|
12
|
+
|
|
13
|
+
def __init__(self, *args, limit=5, **kwargs):
|
|
14
|
+
self.render_as_href = False
|
|
15
|
+
super(StatusLabel, self).__init__(*args, **kwargs)
|
|
16
|
+
self.times = deque(maxlen=limit)
|
|
17
|
+
|
|
18
|
+
def clear(self):
|
|
19
|
+
self.setText("")
|
|
20
|
+
|
|
21
|
+
def clearTimes(self):
|
|
22
|
+
""""""
|
|
23
|
+
self.times.clear()
|
|
24
|
+
|
|
25
|
+
def chooseLimit(self):
|
|
26
|
+
limit, success = QInputDialog.getInt(
|
|
27
|
+
self,
|
|
28
|
+
"Choose Avg length",
|
|
29
|
+
"Choose how many execution time history to keep.",
|
|
30
|
+
value=self.limit(),
|
|
31
|
+
min=1,
|
|
32
|
+
max=100,
|
|
33
|
+
)
|
|
34
|
+
if limit:
|
|
35
|
+
self.setLimit(limit)
|
|
36
|
+
|
|
37
|
+
def copy_action_text(self, action):
|
|
38
|
+
"""Copy the text of the provided action into the clipboard."""
|
|
39
|
+
QApplication.clipboard().setText(action.text())
|
|
40
|
+
|
|
41
|
+
def mouseReleaseEvent(self, event):
|
|
42
|
+
QTimer.singleShot(0, self.showMenu)
|
|
43
|
+
super(StatusLabel, self).mouseReleaseEvent(event)
|
|
44
|
+
|
|
45
|
+
def secondsText(self, seconds):
|
|
46
|
+
"""Generates text to show seconds of exec time."""
|
|
47
|
+
return 'Exec: {:0.04f} Seconds'.format(seconds)
|
|
48
|
+
|
|
49
|
+
def limit(self):
|
|
50
|
+
return self.times.maxlen
|
|
51
|
+
|
|
52
|
+
def setLimit(self, limit):
|
|
53
|
+
self.times = deque(self.times, maxlen=limit)
|
|
54
|
+
|
|
55
|
+
def setText(self, text):
|
|
56
|
+
if self.render_as_href:
|
|
57
|
+
text = '<a href="showMenu">{}</a>'.format(text)
|
|
58
|
+
super(StatusLabel, self).setText(text)
|
|
59
|
+
|
|
60
|
+
def showSeconds(self, seconds):
|
|
61
|
+
self.times.append(seconds)
|
|
62
|
+
self.setText(self.secondsText(seconds[0]))
|
|
63
|
+
|
|
64
|
+
def showMenu(self):
|
|
65
|
+
menu = QMenu(self)
|
|
66
|
+
if self.times:
|
|
67
|
+
# Show the time it took to run the last X code calls
|
|
68
|
+
times = []
|
|
69
|
+
for seconds in self.times:
|
|
70
|
+
secs, cmd = seconds
|
|
71
|
+
times.append(secs)
|
|
72
|
+
|
|
73
|
+
# Add a simplified copy of the command that was run
|
|
74
|
+
cmd = cmd.strip()
|
|
75
|
+
cmds = cmd.split("\n")
|
|
76
|
+
if len(cmds) > 1 or len(cmds[0]) > 50:
|
|
77
|
+
cmd = "{} ...".format(cmds[0][:50])
|
|
78
|
+
# Escape &'s so they dont' get turned into a shortcut'
|
|
79
|
+
cmd = cmd.replace("&", "&&")
|
|
80
|
+
act = menu.addAction("{}: {}".format(self.secondsText(secs), cmd))
|
|
81
|
+
# Selecting this action should copy the time it took to run
|
|
82
|
+
act.triggered.connect(partial(self.copy_action_text, act))
|
|
83
|
+
|
|
84
|
+
menu.addSeparator()
|
|
85
|
+
avg = sum(times) / len(times)
|
|
86
|
+
act = menu.addAction("Average: {:0.04f}s".format(avg))
|
|
87
|
+
act.triggered.connect(partial(self.copy_action_text, act))
|
|
88
|
+
|
|
89
|
+
act = menu.addAction("Clear")
|
|
90
|
+
act.triggered.connect(self.clearTimes)
|
|
91
|
+
|
|
92
|
+
menu.addSeparator()
|
|
93
|
+
act = menu.addAction("Set limit...")
|
|
94
|
+
act.triggered.connect(self.chooseLimit)
|
|
95
|
+
|
|
96
|
+
# Position the menu at the bottom of the widget
|
|
97
|
+
height = self.geometry().height()
|
|
98
|
+
pos = self.mapToGlobal(QPoint(0, height))
|
|
99
|
+
menu.popup(pos)
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
from __future__ import absolute_import
|
|
2
|
+
|
|
3
|
+
from Qt.QtWidgets import QDialog
|
|
4
|
+
|
|
5
|
+
from . import loadUi
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class SuggestPathQuotesDialog(QDialog):
|
|
9
|
+
"""A dialog to suggest to enclose paths in double-quotes in the cmdTempl which is
|
|
10
|
+
used to launch an external text editor.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
def __init__(self, parent, oldCmdTempl, newCmdTempl):
|
|
14
|
+
super(SuggestPathQuotesDialog, self).__init__(parent)
|
|
15
|
+
loadUi(__file__, self)
|
|
16
|
+
|
|
17
|
+
self.parentWindow = self.parent().window()
|
|
18
|
+
|
|
19
|
+
self.uiTextEditorOldCommandPatternLE.setText(oldCmdTempl)
|
|
20
|
+
self.uiTextEditorNewCommandPatternLE.setText(newCmdTempl)
|
|
21
|
+
|
|
22
|
+
toolTip = (
|
|
23
|
+
"Examples:\n"
|
|
24
|
+
'SublimeText: "{exePath}" "{modulePath}":{lineNum}\n'
|
|
25
|
+
'notepad++: "{exePath}" "{modulePath}" -n{lineNum}\n'
|
|
26
|
+
'vim: "{exePath}" + {lineNum} "{modulePath}'
|
|
27
|
+
)
|
|
28
|
+
self.uiTextEditorNewCommandPatternLE.setToolTip(toolTip)
|
|
29
|
+
|
|
30
|
+
def accept(self):
|
|
31
|
+
"""Set the parentWindow's textEditorCmdTempl property from the dialog, and
|
|
32
|
+
optionally add dialog to parent's dont_ask_again list, and accept.
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
cmdTempl = self.uiTextEditorNewCommandPatternLE.text()
|
|
36
|
+
self.parentWindow.textEditorCmdTempl = cmdTempl
|
|
37
|
+
|
|
38
|
+
if self.uiDontAskAgainCHK.isChecked():
|
|
39
|
+
if hasattr(self.parentWindow, "dont_ask_again"):
|
|
40
|
+
self.parentWindow.dont_ask_again.append(self.objectName())
|
|
41
|
+
|
|
42
|
+
super(SuggestPathQuotesDialog, self).accept()
|
|
43
|
+
|
|
44
|
+
def reject(self):
|
|
45
|
+
"""Optionally add dialog to parentWindow's dont_ask_again list, and reject"""
|
|
46
|
+
if self.uiDontAskAgainCHK.isChecked():
|
|
47
|
+
if hasattr(self.parentWindow, "dont_ask_again"):
|
|
48
|
+
self.parentWindow.dont_ask_again.append(self.objectName())
|
|
49
|
+
|
|
50
|
+
super(SuggestPathQuotesDialog, self).reject()
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>Form</class>
|
|
4
|
+
<widget class="QWidget" name="Form">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>543</width>
|
|
10
|
+
<height>118</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QFormLayout" name="formLayout_2">
|
|
17
|
+
<property name="labelAlignment">
|
|
18
|
+
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
|
19
|
+
</property>
|
|
20
|
+
<item row="0" column="0">
|
|
21
|
+
<widget class="QLabel" name="uiWorkboxEditorLBL">
|
|
22
|
+
<property name="text">
|
|
23
|
+
<string>Editor Class:</string>
|
|
24
|
+
</property>
|
|
25
|
+
</widget>
|
|
26
|
+
</item>
|
|
27
|
+
<item row="0" column="1">
|
|
28
|
+
<widget class="QComboBox" name="uiWorkboxEditorDDL"/>
|
|
29
|
+
</item>
|
|
30
|
+
<item row="1" column="0">
|
|
31
|
+
<widget class="QLabel" name="uiWarningIconLBL">
|
|
32
|
+
<property name="layoutDirection">
|
|
33
|
+
<enum>Qt::RightToLeft</enum>
|
|
34
|
+
</property>
|
|
35
|
+
<property name="text">
|
|
36
|
+
<string>Warning</string>
|
|
37
|
+
</property>
|
|
38
|
+
</widget>
|
|
39
|
+
</item>
|
|
40
|
+
<item row="1" column="1">
|
|
41
|
+
<widget class="QLabel" name="uiWarningTextLBL">
|
|
42
|
+
<property name="text">
|
|
43
|
+
<string>Choose an editor to enable Workboxs.</string>
|
|
44
|
+
</property>
|
|
45
|
+
</widget>
|
|
46
|
+
</item>
|
|
47
|
+
<item row="2" column="1">
|
|
48
|
+
<widget class="QLabel" name="uiWorkboxInfoLBL">
|
|
49
|
+
<property name="sizePolicy">
|
|
50
|
+
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
|
51
|
+
<horstretch>0</horstretch>
|
|
52
|
+
<verstretch>0</verstretch>
|
|
53
|
+
</sizepolicy>
|
|
54
|
+
</property>
|
|
55
|
+
<property name="text">
|
|
56
|
+
<string><html><head/><body><p>New editors are added by pip packages. A list of known pip editors can be found at <a href="https://github.com/blurstudio/preditor"><span style=" text-decoration: underline; color:#0000ff;">https://github.com/blurstudio/preditor</span></a>.</p></body></html></string>
|
|
57
|
+
</property>
|
|
58
|
+
<property name="alignment">
|
|
59
|
+
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
|
60
|
+
</property>
|
|
61
|
+
<property name="wordWrap">
|
|
62
|
+
<bool>true</bool>
|
|
63
|
+
</property>
|
|
64
|
+
<property name="openExternalLinks">
|
|
65
|
+
<bool>true</bool>
|
|
66
|
+
</property>
|
|
67
|
+
</widget>
|
|
68
|
+
</item>
|
|
69
|
+
</layout>
|
|
70
|
+
</widget>
|
|
71
|
+
<resources/>
|
|
72
|
+
<connections>
|
|
73
|
+
<connection>
|
|
74
|
+
<sender>uiWorkboxEditorDDL</sender>
|
|
75
|
+
<signal>currentIndexChanged(int)</signal>
|
|
76
|
+
<receiver>Form</receiver>
|
|
77
|
+
<slot>refresh()</slot>
|
|
78
|
+
<hints>
|
|
79
|
+
<hint type="sourcelabel">
|
|
80
|
+
<x>506</x>
|
|
81
|
+
<y>23</y>
|
|
82
|
+
</hint>
|
|
83
|
+
<hint type="destinationlabel">
|
|
84
|
+
<x>535</x>
|
|
85
|
+
<y>32</y>
|
|
86
|
+
</hint>
|
|
87
|
+
</hints>
|
|
88
|
+
</connection>
|
|
89
|
+
</connections>
|
|
90
|
+
<slots>
|
|
91
|
+
<slot>refresh()</slot>
|
|
92
|
+
</slots>
|
|
93
|
+
</ui>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>uiPythonErrorMBOX</class>
|
|
4
|
+
<widget class="QDialog" name="uiPythonErrorMBOX">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>409</width>
|
|
10
|
+
<height>98</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Dialog</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QGridLayout" name="gridLayout">
|
|
17
|
+
<item row="0" column="0">
|
|
18
|
+
<layout class="QHBoxLayout" name="uiMainLYT">
|
|
19
|
+
<item>
|
|
20
|
+
<widget class="QLabel" name="uiIconLBL">
|
|
21
|
+
<property name="text">
|
|
22
|
+
<string>TextLabel</string>
|
|
23
|
+
</property>
|
|
24
|
+
</widget>
|
|
25
|
+
</item>
|
|
26
|
+
<item>
|
|
27
|
+
<layout class="QVBoxLayout" name="uiTextLYT">
|
|
28
|
+
<item>
|
|
29
|
+
<widget class="QLabel" name="uiErrorLBL">
|
|
30
|
+
<property name="text">
|
|
31
|
+
<string>TextLabel</string>
|
|
32
|
+
</property>
|
|
33
|
+
</widget>
|
|
34
|
+
</item>
|
|
35
|
+
<item>
|
|
36
|
+
<spacer name="uiHorizontalSPACE">
|
|
37
|
+
<property name="orientation">
|
|
38
|
+
<enum>Qt::Horizontal</enum>
|
|
39
|
+
</property>
|
|
40
|
+
<property name="sizeHint" stdset="0">
|
|
41
|
+
<size>
|
|
42
|
+
<width>40</width>
|
|
43
|
+
<height>20</height>
|
|
44
|
+
</size>
|
|
45
|
+
</property>
|
|
46
|
+
</spacer>
|
|
47
|
+
</item>
|
|
48
|
+
</layout>
|
|
49
|
+
</item>
|
|
50
|
+
</layout>
|
|
51
|
+
</item>
|
|
52
|
+
<item row="1" column="0">
|
|
53
|
+
<layout class="QHBoxLayout" name="uiButtonsLYT">
|
|
54
|
+
<item>
|
|
55
|
+
<widget class="QPushButton" name="uiLoggerBTN">
|
|
56
|
+
<property name="text">
|
|
57
|
+
<string>Show Logger</string>
|
|
58
|
+
</property>
|
|
59
|
+
</widget>
|
|
60
|
+
</item>
|
|
61
|
+
<item>
|
|
62
|
+
<widget class="QPushButton" name="uiIgnoreBTN">
|
|
63
|
+
<property name="text">
|
|
64
|
+
<string>Ignore</string>
|
|
65
|
+
</property>
|
|
66
|
+
</widget>
|
|
67
|
+
</item>
|
|
68
|
+
</layout>
|
|
69
|
+
</item>
|
|
70
|
+
</layout>
|
|
71
|
+
</widget>
|
|
72
|
+
<resources/>
|
|
73
|
+
<connections/>
|
|
74
|
+
</ui>
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<ui version="4.0">
|
|
3
|
+
<class>uiFindFilesWGT</class>
|
|
4
|
+
<widget class="QWidget" name="uiFindFilesWGT">
|
|
5
|
+
<property name="geometry">
|
|
6
|
+
<rect>
|
|
7
|
+
<x>0</x>
|
|
8
|
+
<y>0</y>
|
|
9
|
+
<width>636</width>
|
|
10
|
+
<height>41</height>
|
|
11
|
+
</rect>
|
|
12
|
+
</property>
|
|
13
|
+
<property name="windowTitle">
|
|
14
|
+
<string>Form</string>
|
|
15
|
+
</property>
|
|
16
|
+
<layout class="QGridLayout" name="gridLayout">
|
|
17
|
+
<item row="0" column="1">
|
|
18
|
+
<widget class="QLabel" name="uiFindLBL">
|
|
19
|
+
<property name="text">
|
|
20
|
+
<string>Find:</string>
|
|
21
|
+
</property>
|
|
22
|
+
</widget>
|
|
23
|
+
</item>
|
|
24
|
+
<item row="0" column="0">
|
|
25
|
+
<layout class="QHBoxLayout" name="uiFindOptionsLYT">
|
|
26
|
+
<item>
|
|
27
|
+
<widget class="QToolButton" name="uiRegexBTN">
|
|
28
|
+
<property name="toolTip">
|
|
29
|
+
<string>Regex (Alt + R)</string>
|
|
30
|
+
</property>
|
|
31
|
+
<property name="text">
|
|
32
|
+
<string>Regex</string>
|
|
33
|
+
</property>
|
|
34
|
+
<property name="checkable">
|
|
35
|
+
<bool>true</bool>
|
|
36
|
+
</property>
|
|
37
|
+
</widget>
|
|
38
|
+
</item>
|
|
39
|
+
<item>
|
|
40
|
+
<widget class="QToolButton" name="uiCaseSensitiveBTN">
|
|
41
|
+
<property name="toolTip">
|
|
42
|
+
<string>Case Sensitive (Alt + C)</string>
|
|
43
|
+
</property>
|
|
44
|
+
<property name="text">
|
|
45
|
+
<string>Case Sensitive</string>
|
|
46
|
+
</property>
|
|
47
|
+
<property name="checkable">
|
|
48
|
+
<bool>true</bool>
|
|
49
|
+
</property>
|
|
50
|
+
</widget>
|
|
51
|
+
</item>
|
|
52
|
+
<item>
|
|
53
|
+
<widget class="QSpinBox" name="uiContextSPN">
|
|
54
|
+
<property name="toolTip">
|
|
55
|
+
<string># of lines of context to show</string>
|
|
56
|
+
</property>
|
|
57
|
+
<property name="buttonSymbols">
|
|
58
|
+
<enum>QAbstractSpinBox::PlusMinus</enum>
|
|
59
|
+
</property>
|
|
60
|
+
<property name="value">
|
|
61
|
+
<number>2</number>
|
|
62
|
+
</property>
|
|
63
|
+
</widget>
|
|
64
|
+
</item>
|
|
65
|
+
</layout>
|
|
66
|
+
</item>
|
|
67
|
+
<item row="0" column="2">
|
|
68
|
+
<widget class="QLineEdit" name="uiFindTXT"/>
|
|
69
|
+
</item>
|
|
70
|
+
<item row="0" column="3">
|
|
71
|
+
<widget class="QPushButton" name="uiFindBTN">
|
|
72
|
+
<property name="text">
|
|
73
|
+
<string>Find</string>
|
|
74
|
+
</property>
|
|
75
|
+
</widget>
|
|
76
|
+
</item>
|
|
77
|
+
<item row="0" column="4">
|
|
78
|
+
<widget class="QToolButton" name="uiCloseBTN">
|
|
79
|
+
<property name="text">
|
|
80
|
+
<string>x</string>
|
|
81
|
+
</property>
|
|
82
|
+
</widget>
|
|
83
|
+
</item>
|
|
84
|
+
</layout>
|
|
85
|
+
</widget>
|
|
86
|
+
<resources/>
|
|
87
|
+
<connections>
|
|
88
|
+
<connection>
|
|
89
|
+
<sender>uiFindBTN</sender>
|
|
90
|
+
<signal>released()</signal>
|
|
91
|
+
<receiver>uiFindFilesWGT</receiver>
|
|
92
|
+
<slot>find()</slot>
|
|
93
|
+
<hints>
|
|
94
|
+
<hint type="sourcelabel">
|
|
95
|
+
<x>601</x>
|
|
96
|
+
<y>31</y>
|
|
97
|
+
</hint>
|
|
98
|
+
<hint type="destinationlabel">
|
|
99
|
+
<x>421</x>
|
|
100
|
+
<y>29</y>
|
|
101
|
+
</hint>
|
|
102
|
+
</hints>
|
|
103
|
+
</connection>
|
|
104
|
+
<connection>
|
|
105
|
+
<sender>uiFindTXT</sender>
|
|
106
|
+
<signal>returnPressed()</signal>
|
|
107
|
+
<receiver>uiFindFilesWGT</receiver>
|
|
108
|
+
<slot>find()</slot>
|
|
109
|
+
<hints>
|
|
110
|
+
<hint type="sourcelabel">
|
|
111
|
+
<x>488</x>
|
|
112
|
+
<y>23</y>
|
|
113
|
+
</hint>
|
|
114
|
+
<hint type="destinationlabel">
|
|
115
|
+
<x>501</x>
|
|
116
|
+
<y>65</y>
|
|
117
|
+
</hint>
|
|
118
|
+
</hints>
|
|
119
|
+
</connection>
|
|
120
|
+
<connection>
|
|
121
|
+
<sender>uiCloseBTN</sender>
|
|
122
|
+
<signal>released()</signal>
|
|
123
|
+
<receiver>uiFindFilesWGT</receiver>
|
|
124
|
+
<slot>hide()</slot>
|
|
125
|
+
<hints>
|
|
126
|
+
<hint type="sourcelabel">
|
|
127
|
+
<x>620</x>
|
|
128
|
+
<y>19</y>
|
|
129
|
+
</hint>
|
|
130
|
+
<hint type="destinationlabel">
|
|
131
|
+
<x>676</x>
|
|
132
|
+
<y>24</y>
|
|
133
|
+
</hint>
|
|
134
|
+
</hints>
|
|
135
|
+
</connection>
|
|
136
|
+
</connections>
|
|
137
|
+
<slots>
|
|
138
|
+
<slot>find()</slot>
|
|
139
|
+
</slots>
|
|
140
|
+
</ui>
|