PrEditor 0.0.0.dev1__py2.py3-none-any.whl → 0.1.0__py2.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.

Files changed (363) hide show
  1. PrEditor-0.1.0.dist-info/LICENSE +165 -0
  2. PrEditor-0.1.0.dist-info/METADATA +212 -0
  3. PrEditor-0.1.0.dist-info/RECORD +149 -0
  4. {PrEditor-0.0.0.dev1.dist-info → PrEditor-0.1.0.dist-info}/WHEEL +1 -1
  5. PrEditor-0.1.0.dist-info/entry_points.txt +18 -0
  6. PrEditor-0.1.0.dist-info/top_level.txt +1 -0
  7. preditor/__init__.py +301 -0
  8. {blurdev → preditor}/__main__.py +13 -13
  9. preditor/about_module.py +166 -0
  10. preditor/cli.py +192 -0
  11. {blurdev → preditor}/contexts.py +119 -119
  12. preditor/cores/core.py +65 -0
  13. preditor/dccs/maya/PrEditor_maya.mod +2 -0
  14. preditor/dccs/maya/plug-ins/PrEditor_maya.py +108 -0
  15. preditor/debug.py +294 -0
  16. blurdev/scintilla/delayable_engine.py → preditor/delayable_engine/__init__.py +310 -299
  17. blurdev/scintilla/delayables/base.py → preditor/delayable_engine/delayables.py +85 -85
  18. {blurdev → preditor}/enum.py +728 -1003
  19. {blurdev → preditor}/gui/__init__.py +84 -125
  20. preditor/gui/app.py +159 -0
  21. {blurdev → preditor}/gui/codehighlighter.py +209 -219
  22. {blurdev → preditor}/gui/completer.py +226 -236
  23. {blurdev → preditor}/gui/console.py +801 -858
  24. {blurdev → preditor}/gui/dialog.py +200 -216
  25. preditor/gui/drag_tab_bar.py +190 -0
  26. preditor/gui/editor_chooser.py +57 -0
  27. {blurdev → preditor}/gui/errordialog.py +100 -97
  28. preditor/gui/fuzzy_search/fuzzy_search.py +93 -0
  29. preditor/gui/group_tab_widget/__init__.py +319 -0
  30. preditor/gui/group_tab_widget/grouped_tab_menu.py +35 -0
  31. preditor/gui/group_tab_widget/grouped_tab_models.py +108 -0
  32. preditor/gui/group_tab_widget/grouped_tab_widget.py +75 -0
  33. preditor/gui/group_tab_widget/one_tab_widget.py +54 -0
  34. preditor/gui/level_buttons.py +349 -0
  35. {blurdev → preditor}/gui/logger_window_handler.py +46 -45
  36. {blurdev → preditor}/gui/loggerwindow.py +1205 -1417
  37. {blurdev → preditor}/gui/newtabwidget.py +69 -68
  38. {blurdev → preditor}/gui/redmine_login_dialog.py +63 -61
  39. {blurdev → preditor}/gui/set_text_editor_path_dialog.py +59 -57
  40. preditor/gui/ui/editor_chooser.ui +93 -0
  41. {blurdev → preditor}/gui/ui/errordialog.ui +81 -81
  42. {blurdev → preditor}/gui/ui/loggerwindow.ui +1030 -864
  43. {blurdev → preditor}/gui/ui/redmine_login_dialog.ui +124 -124
  44. {blurdev → preditor}/gui/ui/set_text_editor_path_dialog.ui +149 -149
  45. {blurdev → preditor}/gui/window.py +183 -199
  46. preditor/gui/workbox_mixin.py +357 -0
  47. preditor/gui/workbox_text_edit.py +117 -0
  48. preditor/gui/workboxwidget.py +276 -0
  49. preditor/logging_config.py +52 -0
  50. preditor/osystem.py +401 -0
  51. preditor/plugins.py +65 -0
  52. preditor/prefs.py +74 -0
  53. {blurdev → preditor}/resource/environment_variables.html +26 -38
  54. {blurdev → preditor}/resource/error_mail.html +85 -85
  55. {blurdev → preditor}/resource/error_mail_inline.html +41 -41
  56. preditor/resource/img/README.md +7 -0
  57. preditor/resource/img/arrow_forward.png +0 -0
  58. preditor/resource/img/check-bold.png +0 -0
  59. preditor/resource/img/chevron-down.png +0 -0
  60. preditor/resource/img/chevron-up.png +0 -0
  61. preditor/resource/img/close-thick.png +0 -0
  62. preditor/resource/img/comment-edit.png +0 -0
  63. preditor/resource/img/content-copy.png +0 -0
  64. preditor/resource/img/content-cut.png +0 -0
  65. preditor/resource/img/content-duplicate.png +0 -0
  66. preditor/resource/img/content-paste.png +0 -0
  67. preditor/resource/img/content-save.png +0 -0
  68. preditor/resource/img/debug_disabled.png +0 -0
  69. preditor/resource/img/eye-check.png +0 -0
  70. preditor/resource/img/file-plus.png +0 -0
  71. preditor/resource/img/file-remove.png +0 -0
  72. preditor/resource/img/format-align-left.png +0 -0
  73. preditor/resource/img/format-letter-case-lower.png +0 -0
  74. preditor/resource/img/format-letter-case-upper.png +0 -0
  75. preditor/resource/img/information.png +0 -0
  76. preditor/resource/img/logging_critical.png +0 -0
  77. preditor/resource/img/logging_custom.png +0 -0
  78. preditor/resource/img/logging_debug.png +0 -0
  79. preditor/resource/img/logging_error.png +0 -0
  80. preditor/resource/img/logging_info.png +0 -0
  81. preditor/resource/img/logging_not_set.png +0 -0
  82. preditor/resource/img/logging_warning.png +0 -0
  83. preditor/resource/img/marker.png +0 -0
  84. preditor/resource/img/play.png +0 -0
  85. preditor/resource/img/playlist-play.png +0 -0
  86. preditor/resource/img/plus-minus-variant.png +0 -0
  87. preditor/resource/img/preditor.ico +0 -0
  88. preditor/resource/img/preditor.png +0 -0
  89. preditor/resource/img/preditor.psd +0 -0
  90. preditor/resource/img/preditor.svg +44 -0
  91. preditor/resource/img/restart.svg +1 -0
  92. preditor/resource/img/skip-forward-outline.png +0 -0
  93. preditor/resource/img/skip-next-outline.png +0 -0
  94. preditor/resource/img/skip-next.png +0 -0
  95. preditor/resource/img/skip-previous.png +0 -0
  96. preditor/resource/img/subdirectory-arrow-right.png +0 -0
  97. preditor/resource/img/text-search-variant.png +0 -0
  98. {blurdev → preditor}/resource/lang/python.json +30 -30
  99. preditor/resource/settings.ini +25 -0
  100. {blurdev/resource/stylesheet/logger → preditor/resource/stylesheet}/Bright.css +56 -61
  101. {blurdev → preditor}/resource/stylesheet/Dark.css +190 -132
  102. {blurdev → preditor}/scintilla/__init__.py +22 -28
  103. preditor/scintilla/delayables/__init__.py +11 -0
  104. {blurdev → preditor}/scintilla/delayables/smart_highlight.py +94 -93
  105. {blurdev → preditor}/scintilla/delayables/spell_check.py +173 -172
  106. {blurdev → preditor}/scintilla/documenteditor.py +2039 -2115
  107. {blurdev → preditor}/scintilla/finddialog.py +68 -81
  108. {blurdev → preditor}/scintilla/lang/__init__.py +80 -93
  109. {blurdev → preditor}/scintilla/lang/config/bash.ini +15 -15
  110. {blurdev → preditor}/scintilla/lang/config/batch.ini +14 -14
  111. {blurdev → preditor}/scintilla/lang/config/cpp.ini +19 -19
  112. {blurdev → preditor}/scintilla/lang/config/css.ini +19 -19
  113. {blurdev → preditor}/scintilla/lang/config/eyeonscript.ini +17 -17
  114. {blurdev → preditor}/scintilla/lang/config/html.ini +21 -21
  115. {blurdev → preditor}/scintilla/lang/config/javascript.ini +24 -24
  116. {blurdev → preditor}/scintilla/lang/config/lua.ini +16 -16
  117. {blurdev → preditor}/scintilla/lang/config/maxscript.ini +20 -20
  118. {blurdev → preditor}/scintilla/lang/config/mel.ini +18 -18
  119. {blurdev → preditor}/scintilla/lang/config/mu.ini +22 -22
  120. {blurdev → preditor}/scintilla/lang/config/nsi.ini +5 -5
  121. {blurdev → preditor}/scintilla/lang/config/perl.ini +19 -19
  122. {blurdev → preditor}/scintilla/lang/config/puppet.ini +19 -19
  123. {blurdev → preditor}/scintilla/lang/config/python.ini +28 -28
  124. {blurdev → preditor}/scintilla/lang/config/ruby.ini +19 -19
  125. {blurdev → preditor}/scintilla/lang/config/sql.ini +7 -7
  126. {blurdev → preditor}/scintilla/lang/config/xml.ini +21 -21
  127. {blurdev → preditor}/scintilla/lang/config/yaml.ini +18 -18
  128. {blurdev → preditor}/scintilla/lang/language.py +240 -250
  129. preditor/scintilla/lexers/__init__.py +0 -0
  130. {blurdev → preditor}/scintilla/lexers/cpplexer.py +21 -30
  131. {blurdev → preditor}/scintilla/lexers/javascriptlexer.py +25 -34
  132. {blurdev → preditor}/scintilla/lexers/maxscriptlexer.py +234 -253
  133. {blurdev → preditor}/scintilla/lexers/mellexer.py +368 -376
  134. {blurdev → preditor}/scintilla/lexers/mulexer.py +32 -41
  135. {blurdev → preditor}/scintilla/lexers/pythonlexer.py +41 -50
  136. {blurdev → preditor}/scintilla/ui/finddialog.ui +160 -160
  137. preditor/settings.py +71 -0
  138. preditor/stream/__init__.py +80 -0
  139. preditor/stream/director.py +56 -0
  140. preditor/stream/manager.py +74 -0
  141. preditor/streamhandler_helper.py +46 -0
  142. preditor/utils/__init__.py +0 -0
  143. preditor/utils/cute.py +30 -0
  144. preditor/utils/stylesheets.py +54 -0
  145. {blurdev → preditor}/version.py +5 -5
  146. preditor/weakref.py +363 -0
  147. PrEditor-0.0.0.dev1.dist-info/METADATA +0 -51
  148. PrEditor-0.0.0.dev1.dist-info/RECORD +0 -279
  149. PrEditor-0.0.0.dev1.dist-info/top_level.txt +0 -1
  150. blurdev/__init__.py +0 -356
  151. blurdev/cores/__init__.py +0 -98
  152. blurdev/cores/application.py +0 -26
  153. blurdev/cores/core.py +0 -634
  154. blurdev/debug.py +0 -593
  155. blurdev/external.py +0 -391
  156. blurdev/gui/level_buttons.py +0 -585
  157. blurdev/gui/workboxwidget.py +0 -205
  158. blurdev/logger.py +0 -238
  159. blurdev/osystem.py +0 -813
  160. blurdev/prefs.py +0 -33
  161. blurdev/protocols/__init__.py +0 -71
  162. blurdev/protocols/write_std_output_handler.py +0 -83
  163. blurdev/resource/designer_plugins.xml +0 -9
  164. blurdev/resource/error_email_old.html +0 -41
  165. blurdev/resource/img/add.png +0 -0
  166. blurdev/resource/img/ajax-loader.gif +0 -0
  167. blurdev/resource/img/application.png +0 -0
  168. blurdev/resource/img/applications.png +0 -0
  169. blurdev/resource/img/assburner.png +0 -0
  170. blurdev/resource/img/assfreezer.png +0 -0
  171. blurdev/resource/img/bar.gif +0 -0
  172. blurdev/resource/img/blank.png +0 -0
  173. blurdev/resource/img/blurdev.png +0 -0
  174. blurdev/resource/img/calendar_disabled.png +0 -0
  175. blurdev/resource/img/calendar_enabled.png +0 -0
  176. blurdev/resource/img/cancel.png +0 -0
  177. blurdev/resource/img/custom.png +0 -0
  178. blurdev/resource/img/debug_high.png +0 -0
  179. blurdev/resource/img/debug_low.png +0 -0
  180. blurdev/resource/img/debug_mid.png +0 -0
  181. blurdev/resource/img/debug_off.png +0 -0
  182. blurdev/resource/img/django.png +0 -0
  183. blurdev/resource/img/doc.png +0 -0
  184. blurdev/resource/img/edit.png +0 -0
  185. blurdev/resource/img/elemental.png +0 -0
  186. blurdev/resource/img/explore.png +0 -0
  187. blurdev/resource/img/favorite.png +0 -0
  188. blurdev/resource/img/file.png +0 -0
  189. blurdev/resource/img/folder.png +0 -0
  190. blurdev/resource/img/ide/add.png +0 -0
  191. blurdev/resource/img/ide/add_note.png +0 -0
  192. blurdev/resource/img/ide/arrow_down.png +0 -0
  193. blurdev/resource/img/ide/arrow_up.png +0 -0
  194. blurdev/resource/img/ide/check.png +0 -0
  195. blurdev/resource/img/ide/class.png +0 -0
  196. blurdev/resource/img/ide/clean.png +0 -0
  197. blurdev/resource/img/ide/clearlog.png +0 -0
  198. blurdev/resource/img/ide/close.png +0 -0
  199. blurdev/resource/img/ide/comment_add.png +0 -0
  200. blurdev/resource/img/ide/comment_remove.png +0 -0
  201. blurdev/resource/img/ide/comment_toggle.png +0 -0
  202. blurdev/resource/img/ide/console.png +0 -0
  203. blurdev/resource/img/ide/copy.png +0 -0
  204. blurdev/resource/img/ide/copylstrip.png +0 -0
  205. blurdev/resource/img/ide/cut.png +0 -0
  206. blurdev/resource/img/ide/edit.png +0 -0
  207. blurdev/resource/img/ide/find.png +0 -0
  208. blurdev/resource/img/ide/find_replace.png +0 -0
  209. blurdev/resource/img/ide/findnext.png +0 -0
  210. blurdev/resource/img/ide/findprev.png +0 -0
  211. blurdev/resource/img/ide/folder_find.png +0 -0
  212. blurdev/resource/img/ide/function.png +0 -0
  213. blurdev/resource/img/ide/git-bash.png +0 -0
  214. blurdev/resource/img/ide/git-gui.png +0 -0
  215. blurdev/resource/img/ide/gitk.png +0 -0
  216. blurdev/resource/img/ide/goto.png +0 -0
  217. blurdev/resource/img/ide/goto_def.png +0 -0
  218. blurdev/resource/img/ide/help.png +0 -0
  219. blurdev/resource/img/ide/highlighter.png +0 -0
  220. blurdev/resource/img/ide/lowercase.png +0 -0
  221. blurdev/resource/img/ide/newfile.png +0 -0
  222. blurdev/resource/img/ide/newfolder.png +0 -0
  223. blurdev/resource/img/ide/newproject.png +0 -0
  224. blurdev/resource/img/ide/newwizard.png +0 -0
  225. blurdev/resource/img/ide/open.png +0 -0
  226. blurdev/resource/img/ide/paste.png +0 -0
  227. blurdev/resource/img/ide/pdb_continue.png +0 -0
  228. blurdev/resource/img/ide/pdb_down.png +0 -0
  229. blurdev/resource/img/ide/pdb_next.png +0 -0
  230. blurdev/resource/img/ide/pdb_step.png +0 -0
  231. blurdev/resource/img/ide/pdb_up.png +0 -0
  232. blurdev/resource/img/ide/plus_minus.png +0 -0
  233. blurdev/resource/img/ide/preferences.png +0 -0
  234. blurdev/resource/img/ide/project_find.png +0 -0
  235. blurdev/resource/img/ide/python.png +0 -0
  236. blurdev/resource/img/ide/pyular.png +0 -0
  237. blurdev/resource/img/ide/qt.png +0 -0
  238. blurdev/resource/img/ide/quit.png +0 -0
  239. blurdev/resource/img/ide/redo.png +0 -0
  240. blurdev/resource/img/ide/refresh.png +0 -0
  241. blurdev/resource/img/ide/remove.png +0 -0
  242. blurdev/resource/img/ide/ruler.png +0 -0
  243. blurdev/resource/img/ide/run.png +0 -0
  244. blurdev/resource/img/ide/runall.png +0 -0
  245. blurdev/resource/img/ide/runallclear.png +0 -0
  246. blurdev/resource/img/ide/runselected.png +0 -0
  247. blurdev/resource/img/ide/runselectedclear.png +0 -0
  248. blurdev/resource/img/ide/save.png +0 -0
  249. blurdev/resource/img/ide/saveas.png +0 -0
  250. blurdev/resource/img/ide/sdk.png +0 -0
  251. blurdev/resource/img/ide/separator.png +0 -0
  252. blurdev/resource/img/ide/tabbed.png +0 -0
  253. blurdev/resource/img/ide/tile.png +0 -0
  254. blurdev/resource/img/ide/toolbar.png +0 -0
  255. blurdev/resource/img/ide/undo.png +0 -0
  256. blurdev/resource/img/ide/uppercase.png +0 -0
  257. blurdev/resource/img/ide/view_as.png +0 -0
  258. blurdev/resource/img/ide/windowed.png +0 -0
  259. blurdev/resource/img/ide.ico +0 -0
  260. blurdev/resource/img/ide.png +0 -0
  261. blurdev/resource/img/ide48.png +0 -0
  262. blurdev/resource/img/info.png +0 -0
  263. blurdev/resource/img/legacy tool.png +0 -0
  264. blurdev/resource/img/library.png +0 -0
  265. blurdev/resource/img/logger/about.png +0 -0
  266. blurdev/resource/img/logger/arrow_forward.png +0 -0
  267. blurdev/resource/img/logger/clear.png +0 -0
  268. blurdev/resource/img/logger/close.png +0 -0
  269. blurdev/resource/img/logger/debug_disabled.png +0 -0
  270. blurdev/resource/img/logger/debug_high.png +0 -0
  271. blurdev/resource/img/logger/debug_low.png +0 -0
  272. blurdev/resource/img/logger/debug_mid.png +0 -0
  273. blurdev/resource/img/logger/down.png +0 -0
  274. blurdev/resource/img/logger/find.png +0 -0
  275. blurdev/resource/img/logger/logging_critical.png +0 -0
  276. blurdev/resource/img/logger/logging_debug.png +0 -0
  277. blurdev/resource/img/logger/logging_error.png +0 -0
  278. blurdev/resource/img/logger/logging_info.png +0 -0
  279. blurdev/resource/img/logger/logging_not_set.png +0 -0
  280. blurdev/resource/img/logger/logging_warning.png +0 -0
  281. blurdev/resource/img/logger/next.png +0 -0
  282. blurdev/resource/img/logger/play.png +0 -0
  283. blurdev/resource/img/logger/playlist_play.png +0 -0
  284. blurdev/resource/img/logger/previous.png +0 -0
  285. blurdev/resource/img/logger/return.png +0 -0
  286. blurdev/resource/img/logger/save.png +0 -0
  287. blurdev/resource/img/logger/subdirectory_arrow_right.png +0 -0
  288. blurdev/resource/img/logger/up.png +0 -0
  289. blurdev/resource/img/lovebar.png +0 -0
  290. blurdev/resource/img/new.png +0 -0
  291. blurdev/resource/img/new_selected.png +0 -0
  292. blurdev/resource/img/node.png +0 -0
  293. blurdev/resource/img/ok.png +0 -0
  294. blurdev/resource/img/options.png +0 -0
  295. blurdev/resource/img/packages.png +0 -0
  296. blurdev/resource/img/preview/add.png +0 -0
  297. blurdev/resource/img/preview/brush.png +0 -0
  298. blurdev/resource/img/preview/delete.png +0 -0
  299. blurdev/resource/img/preview/delte.png +0 -0
  300. blurdev/resource/img/preview/fill.png +0 -0
  301. blurdev/resource/img/preview/layers.png +0 -0
  302. blurdev/resource/img/preview/media.png +0 -0
  303. blurdev/resource/img/preview/navigate.png +0 -0
  304. blurdev/resource/img/preview/pencil.png +0 -0
  305. blurdev/resource/img/preview/select.png +0 -0
  306. blurdev/resource/img/preview/type.png +0 -0
  307. blurdev/resource/img/preview/visible.png +0 -0
  308. blurdev/resource/img/project.png +0 -0
  309. blurdev/resource/img/python_logger.ico +0 -0
  310. blurdev/resource/img/python_logger.png +0 -0
  311. blurdev/resource/img/refresh.png +0 -0
  312. blurdev/resource/img/remove.png +0 -0
  313. blurdev/resource/img/reset.png +0 -0
  314. blurdev/resource/img/richtext/font_bold.png +0 -0
  315. blurdev/resource/img/richtext/font_italic.png +0 -0
  316. blurdev/resource/img/richtext/link_image.png +0 -0
  317. blurdev/resource/img/richtext/spell_check.png +0 -0
  318. blurdev/resource/img/richtext/unordered_list.png +0 -0
  319. blurdev/resource/img/save.png +0 -0
  320. blurdev/resource/img/savesettings.png +0 -0
  321. blurdev/resource/img/settings.png +0 -0
  322. blurdev/resource/img/tool.png +0 -0
  323. blurdev/resource/img/toolbarHandleHorizontal.png +0 -0
  324. blurdev/resource/img/toolbarHandleVertical.png +0 -0
  325. blurdev/resource/img/trash.png +0 -0
  326. blurdev/resource/img/trax.png +0 -0
  327. blurdev/resource/img/tree.png +0 -0
  328. blurdev/resource/img/treegrunt.ico +0 -0
  329. blurdev/resource/img/treegrunt.png +0 -0
  330. blurdev/resource/img/treegruntedit.png +0 -0
  331. blurdev/resource/img/user interface.png +0 -0
  332. blurdev/resource/img/warning.png +0 -0
  333. blurdev/resource/img/watermark.png +0 -0
  334. blurdev/resource/sdk/blurdev.sdk +0 -3
  335. blurdev/resource/settings.ini +0 -82
  336. blurdev/resource/softimage/BlurApplication.dll +0 -0
  337. blurdev/resource/softimage/BlurApplication64.dll +0 -0
  338. blurdev/resource/stylesheet/Carbon.css +0 -35
  339. blurdev/resource/stylesheet/logger/Dark.css +0 -62
  340. blurdev/resource/templ/py_comment.templ +0 -1
  341. blurdev/resource/templ/py_debug_raise_error.templ +0 -7
  342. blurdev/resource/templ/py_doc_string.templ +0 -10
  343. blurdev/resource/templ/py_header.templ +0 -9
  344. blurdev/resource/templ/py_line_comment.templ +0 -1
  345. blurdev/resource/templ/py_log_to_file.templ +0 -22
  346. blurdev/resource/templ/py_module_path.templ +0 -1
  347. blurdev/resource/templ/py_pyqt_core.templ +0 -1
  348. blurdev/resource/templ/py_pyqt_gui.templ +0 -1
  349. blurdev/resource/templ/py_splashscreen.templ +0 -6
  350. blurdev/resource/templ/py_testing_note.templ +0 -1
  351. blurdev/resource/templ/py_testing_note_end.templ +0 -1
  352. blurdev/resource/tools_environments.json +0 -72
  353. blurdev/resource/tools_environments.xml +0 -11
  354. blurdev/resource/tools_environments_linux.xml +0 -11
  355. blurdev/resource/tools_environments_offline.xml +0 -7
  356. blurdev/runtimes/__init__.py +0 -2
  357. blurdev/runtimes/logger.py +0 -44
  358. blurdev/scintilla/delayables/__init__.py +0 -9
  359. blurdev/settings.py +0 -312
  360. blurdev/utils/error.py +0 -389
  361. {blurdev/scintilla/lexers → preditor/cores}/__init__.py +0 -0
  362. {blurdev/utils → preditor/gui/fuzzy_search}/__init__.py +0 -0
  363. {blurdev → preditor}/resource/img/warning-big.png +0 -0
@@ -0,0 +1,276 @@
1
+ from __future__ import absolute_import, print_function
2
+
3
+ import io
4
+ import re
5
+ import time
6
+
7
+ from Qt.QtCore import Qt
8
+ from Qt.QtGui import QIcon
9
+ from Qt.QtWidgets import QAction
10
+
11
+ from .. import core, resourcePath
12
+ from ..gui.workbox_mixin import WorkboxMixin
13
+ from ..scintilla.documenteditor import DocumentEditor, SearchOptions
14
+ from ..scintilla.finddialog import FindDialog
15
+
16
+
17
+ class WorkboxWidget(WorkboxMixin, DocumentEditor):
18
+ def __init__(
19
+ self, parent=None, console=None, delayable_engine='default', core_name=None
20
+ ):
21
+ self.__set_console__(console)
22
+ self._searchFlags = 0
23
+ self._searchText = ''
24
+ self._searchDialog = None
25
+
26
+ # initialize the super class
27
+ super(WorkboxWidget, self).__init__(
28
+ parent, delayable_engine=delayable_engine, core_name=core_name
29
+ )
30
+
31
+ # Store the software name so we can handle custom keyboard shortcuts based on
32
+ # software
33
+ self._software = core.objectName()
34
+ # Used to remove any trailing whitespace when running selected text
35
+ self.regex = re.compile(r'\s+$')
36
+ self.initShortcuts()
37
+ self.setLanguage('Python')
38
+ # Default to unix newlines
39
+ self.setEolMode(self.EolUnix)
40
+
41
+ def __auto_complete_enabled__(self):
42
+ return self.autoCompletionSource() == self.AcsAll
43
+
44
+ def __set_auto_complete_enabled__(self, state):
45
+ state = self.AcsAll if state else self.AcsNone
46
+ self.setAutoCompletionSource(state)
47
+
48
+ def __clear__(self):
49
+ self.clear()
50
+
51
+ def __comment_toggle__(self):
52
+ self.commentToggle()
53
+
54
+ def __copy_indents_as_spaces__(self):
55
+ return self.copyIndentsAsSpaces
56
+
57
+ def __set_copy_indents_as_spaces__(self, state):
58
+ self.copyIndentsAsSpaces = state
59
+
60
+ def __cursor_position__(self):
61
+ """Returns the line and index of the cursor."""
62
+ return self.getCursorPosition()
63
+
64
+ def __set_cursor_position__(self, line, index):
65
+ """Set the cursor to this line number and index"""
66
+ self.setCursorPosition(line, index)
67
+
68
+ def __exec_all__(self):
69
+ txt = self.__unix_end_lines__(self.text()).rstrip()
70
+ filename = self.__workbox_filename__()
71
+ self.__console__().executeString(txt, filename=filename)
72
+
73
+ def __file_monitoring_enabled__(self):
74
+ return self._fileMonitoringActive
75
+
76
+ def __set_file_monitoring_enabled__(self, state):
77
+ self.setAutoReloadOnChange(state)
78
+ self.enableFileWatching(state)
79
+
80
+ def __filename__(self):
81
+ return self.filename()
82
+
83
+ def __font__(self):
84
+ if self.lexer():
85
+ return self.lexer().font(0)
86
+ else:
87
+ self.font()
88
+
89
+ def __set_font__(self, font):
90
+ self.documentFont = font
91
+ if self.lexer():
92
+ self.lexer().setFont(font)
93
+ else:
94
+ self.setFont(font)
95
+
96
+ def __goto_line__(self, line):
97
+ self.goToLine(line)
98
+
99
+ def __indentations_use_tabs__(self):
100
+ return self.indentationsUseTabs()
101
+
102
+ def __set_indentations_use_tabs__(self, state):
103
+ self.setIndentationsUseTabs(state)
104
+
105
+ def __insert_text__(self, txt):
106
+ self.insert(txt)
107
+
108
+ def __load__(self, filename):
109
+ self.load(filename)
110
+
111
+ def __margins_font__(self):
112
+ return self.marginsFont()
113
+
114
+ def __set_margins_font__(self, font):
115
+ self.setMarginsFont(font)
116
+
117
+ def __marker_add__(self, line):
118
+ try:
119
+ marker = self._marker
120
+ except AttributeError:
121
+ self._marker = self.markerDefine(self.Circle)
122
+ marker = self._marker
123
+ self.markerAdd(line, marker)
124
+
125
+ def __marker_clear_all__(self):
126
+ try:
127
+ self.markerDeleteAll(self._marker)
128
+ except AttributeError:
129
+ # self._marker has not been created yet
130
+ pass
131
+
132
+ def __reload_file__(self):
133
+ # loading the file too quickly misses any changes
134
+ time.sleep(0.1)
135
+ font = self.__font__()
136
+ self.reloadChange()
137
+ self.__set_font__(font)
138
+
139
+ def __remove_selected_text__(self):
140
+ self.removeSelectedText()
141
+
142
+ def __save__(self):
143
+ self.save()
144
+
145
+ def __selected_text__(self, start_of_line=False):
146
+ line, s, end, e = self.getSelection()
147
+ if line == -1:
148
+ # Nothing is selected, return the current line of text
149
+ line, index = self.getCursorPosition()
150
+ txt = self.text(line)
151
+ elif start_of_line:
152
+ ss = self.positionFromLineIndex(line, 0)
153
+ ee = self.positionFromLineIndex(end, e)
154
+ txt = self.text(ss, ee)
155
+ else:
156
+ txt = self.selectedText()
157
+ return self.regex.split(txt)[0]
158
+
159
+ def __tab_width__(self):
160
+ return self.tabWidth()
161
+
162
+ def __set_tab_width__(self, width):
163
+ self.setTabWidth(width)
164
+
165
+ def __text__(self, line=None, start=None, end=None):
166
+ """Returns the text in this widget, possibly limited in scope.
167
+
168
+ Note: Only pass line, or (start and end) to this method.
169
+
170
+ Args:
171
+ line (int, optional): Limit the returned scope to just this line number.
172
+ start (int, optional): Limit the scope to text between this and end.
173
+ end (int, optional): Limit the scope to text between start and this.
174
+
175
+ Returns:
176
+ str: The requested text.
177
+ """
178
+ if line:
179
+ return self.text(line)
180
+ elif (start is None) != (end is None):
181
+ raise ValueError('You must pass start and end if you pass either.')
182
+ elif start is not None:
183
+ self.text(start, end)
184
+ return self.text()
185
+
186
+ def __set_text__(self, txt):
187
+ """Replace all of the current text with txt."""
188
+ self.setText(txt)
189
+
190
+ @classmethod
191
+ def __write_file__(cls, filename, txt):
192
+ with io.open(filename, 'w', newline='\n') as fle:
193
+ # Save unix newlines for simplicity
194
+ fle.write(cls.__unix_end_lines__(txt))
195
+
196
+ def keyPressEvent(self, event):
197
+ if self._software == 'softimage':
198
+ DocumentEditor.keyPressEvent(self, event)
199
+ else:
200
+ if self.process_shortcut(event):
201
+ return
202
+ else:
203
+ DocumentEditor.keyPressEvent(self, event)
204
+
205
+ def initShortcuts(self):
206
+ """Use this to set up shortcuts when the DocumentEditor"""
207
+ icon = QIcon(resourcePath('img/text-search-variant.png'))
208
+ self.uiFindACT = QAction(icon, 'Find...', self)
209
+ self.uiFindACT.setShortcut("Ctrl+F")
210
+ self.addAction(self.uiFindACT)
211
+
212
+ icon = QIcon(resourcePath('img/skip-previous.png'))
213
+ self.uiFindPrevACT = QAction(icon, 'Find Prev', self)
214
+ self.uiFindPrevACT.setShortcut("Ctrl+F3")
215
+ self.addAction(self.uiFindPrevACT)
216
+
217
+ icon = QIcon(resourcePath('img/skip-next.png'))
218
+ self.uiFindNextACT = QAction(icon, 'Find Next', self)
219
+ self.uiFindNextACT.setShortcut("F3")
220
+ self.addAction(self.uiFindNextACT)
221
+
222
+ self.uiSelectCurrentLineACT = QAction(icon, 'Select Line', self)
223
+ self.uiSelectCurrentLineACT.triggered.connect(self.expandCursorToLineSelection)
224
+ self.uiSelectCurrentLineACT.setShortcut('Ctrl+L')
225
+ self.addAction(self.uiSelectCurrentLineACT)
226
+
227
+ # create the search dialog and connect actions
228
+ self._searchDialog = FindDialog(self)
229
+ self._searchDialog.setAttribute(Qt.WA_DeleteOnClose, False)
230
+ self.uiFindACT.triggered.connect(
231
+ lambda: self._searchDialog.search(self.searchText())
232
+ )
233
+ self.uiFindPrevACT.triggered.connect(
234
+ lambda: self.findPrev(self.searchText(), self.searchFlags())
235
+ )
236
+ self.uiFindNextACT.triggered.connect(
237
+ lambda: self.findNext(self.searchText(), self.searchFlags())
238
+ )
239
+
240
+ def searchFlags(self):
241
+ return self._searchFlags
242
+
243
+ def searchText(self):
244
+ if not self._searchDialog:
245
+ return ''
246
+ # refresh the search text unless we are using regular expressions
247
+ if (
248
+ not self._searchDialog.isVisible()
249
+ and not self._searchFlags & SearchOptions.QRegExp
250
+ ):
251
+ txt = self.selectedText()
252
+ if txt:
253
+ self._searchText = txt
254
+ return self._searchText
255
+
256
+ def setSearchFlags(self, flags):
257
+ self._searchFlags = flags
258
+
259
+ def setSearchText(self, txt):
260
+ self._searchText = txt
261
+
262
+ def showMenu(self, pos):
263
+ menu = super(WorkboxWidget, self).showMenu(pos, popup=False)
264
+ menu.addSeparator()
265
+ submenu = menu.addMenu('Options')
266
+ act = submenu.addAction('Toggle end line visibility')
267
+ act.setCheckable(True)
268
+ act.setChecked(self.eolVisibility())
269
+ act.triggered.connect(self.setEolVisibility)
270
+
271
+ act = submenu.addAction('Show Whitespace')
272
+ act.setCheckable(True)
273
+ act.setChecked(self.showWhitespaces())
274
+ act.triggered.connect(self.setShowWhitespaces)
275
+
276
+ menu.popup(self._clickPos)
@@ -0,0 +1,52 @@
1
+ from __future__ import absolute_import
2
+
3
+ import json
4
+ import logging
5
+ import logging.config
6
+ import os
7
+
8
+ from .prefs import prefs_path
9
+
10
+
11
+ class LoggingConfig(object):
12
+ def __init__(self, core_name, version=1):
13
+ self._filename = None
14
+ self.cfg = {'version': version}
15
+ self.core_name = core_name
16
+
17
+ def add_logger(self, name, logger):
18
+ if not logger.level:
19
+ # No need to record a logger that is inheriting its logging level
20
+ return
21
+
22
+ # Build the required dictionaries
23
+ loggers = self.cfg.setdefault('loggers', {})
24
+ log = loggers.setdefault(name, {})
25
+ log['level'] = logger.level
26
+
27
+ def build(self):
28
+ self.add_logger("", logging.root)
29
+ for name, logger in logging.root.manager.loggerDict.items():
30
+ if not isinstance(logger, logging.PlaceHolder):
31
+ self.add_logger(name, logger)
32
+
33
+ @property
34
+ def filename(self):
35
+ if self._filename:
36
+ return self._filename
37
+
38
+ self._filename = prefs_path('logging_prefs.json', core_name=self.core_name)
39
+ return self._filename
40
+
41
+ def load(self):
42
+ if not os.path.exists(self.filename):
43
+ return False
44
+
45
+ with open(self.filename) as fle:
46
+ self.cfg = json.load(fle)
47
+ logging.config.dictConfig(self.cfg)
48
+ return True
49
+
50
+ def save(self):
51
+ with open(self.filename, 'w') as fle:
52
+ json.dump(self.cfg, fle, indent=4)