src/eric7/Preferences/ThemeManager.py

Tue, 18 Oct 2022 16:06:21 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 18 Oct 2022 16:06:21 +0200
branch
eric7
changeset 9413
80c06d472826
parent 9221
bf71ee032bb4
child 9448
ea215f7afab3
permissions
-rw-r--r--

Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.

8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
8881
54e42bc2437a Updated copyright for 2022.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8878
diff changeset
3 # Copyright (c) 2021 - 2022 Detlev Offenbach <detlev@die-offenbachs.de>
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a manager object for color themes.
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
10 import json
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
11 import os
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import re
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtCore import QObject
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
16 from eric7.EricWidgets import EricMessageBox, EricFileDialog
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
17
9413
80c06d472826 Changed the eric7 import statements to include the package name (i.e. eric7) in order to not fiddle with sys.path.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
18 from eric7 import Globals, Preferences
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
20 from eric7config import getConfig
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
21
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 class ThemeManager(QObject):
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 Class implementing a manager object for color themes.
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 """
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
27
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
28 ColorKeyPatternList = [
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 "Diff/.*Color",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 "Editor/Colour/",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 "IRC/.*Colou?r",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 "Project/Colour",
8842
80ce644a6067 Added some forgotten colors to the Theme Manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8820
diff changeset
33 "Python/.*Color",
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 "Scintilla/.*color",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 "Scintilla/.*paper",
8842
80ce644a6067 Added some forgotten colors to the Theme Manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8820
diff changeset
36 "Tasks/.*Color",
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 "WebBrowser/.*Colou?r",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 ]
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
39 ColorKeyList = [
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 "Debugger/BgColorChanged",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 "Debugger/BgColorNew",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 "UI/IconBarColor",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 "UI/LogStdErrColour",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 "UI/NotificationCriticalBackground",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 "UI/NotificationCriticalForeground",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 "UI/NotificationWarningBackground",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 "UI/NotificationWarningForeground",
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 ]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
49
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
50 def __init__(self: "ThemeManager", parent: QObject = None):
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 Constructor
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @param parent reference to the parent object (defaults to None)
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 @type QObject (optional)
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 super().__init__(parent)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
58
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
59 def importTheme(self: "ThemeManager") -> bool:
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 Public method to import a theme file and set the colors.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
62
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
63 @return flag indicating a successful import
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
64 @rtype bool
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
65 """
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
66 filename = EricFileDialog.getOpenFileName(
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
67 None,
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
68 self.tr("Import Theme"),
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
69 getConfig("ericThemesDir"),
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
70 self.tr("eric Theme Files (*.ethj);;All Files (*)"),
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
71 )
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
72 if filename:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
73 try:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
74 with open(filename, "r") as f:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
75 jsonString = f.read()
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
76 themeDict = json.loads(jsonString)
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
77 except (TypeError, OSError) as err:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
78 EricMessageBox.critical(
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
79 None,
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
80 self.tr("Import Theme"),
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
81 self.tr(
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
82 "<p>The theme file <b>{0}</b> could not"
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
83 " be read.</p><p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
84 ).format(filename, str(err)),
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
85 )
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
86 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
87
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
88 # step 1: process stylesheet data
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
89 stylesheetDict = themeDict["stylesheet"]
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
90 if stylesheetDict["name"]:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91 stylesheetsDir = os.path.join(Globals.getConfigDir(), "stylesheets")
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
92 if not os.path.exists(stylesheetsDir):
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
93 os.makedirs(stylesheetsDir)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94 stylesheetFile = os.path.join(stylesheetsDir, stylesheetDict["name"])
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 ok = (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96 EricMessageBox.yesNo(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
97 None,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 self.tr("Import Theme"),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 self.tr(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100 "The stylesheet file {0} exists already."
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
101 " Shall it be overwritten?"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
102 ).format(stylesheetDict["name"]),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
103 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104 if os.path.exists(stylesheetFile)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
105 else True
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
106 )
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
107 if ok:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
108 try:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
109 with open(stylesheetFile, "w") as f:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
110 f.write(stylesheetDict["contents"])
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
111 except OSError as err:
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
112 EricMessageBox.critical(
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
113 None,
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
114 self.tr("Import Theme"),
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
115 self.tr(
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
116 "<p>The stylesheet file <b>{0}</b> could"
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
117 " not be written.</p><p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
118 ).format(stylesheetFile, str(err)),
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
119 )
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
120 stylesheetFile = ""
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
121 Preferences.setUI("StyleSheet", stylesheetFile)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
122
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
123 # step 2: transfer the color entries
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
124 settings = Preferences.getSettings()
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
125 colorsDict = themeDict["colors"]
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
126 for key, value in colorsDict.items():
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
127 settings.setValue(key, value)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
128
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
129 Preferences.syncPreferences()
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
130 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
131
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
132 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
134 def exportTheme(self: "ThemeManager"):
8817
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 """
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 Public method to export the current colors to a theme file.
92214d84beef Started implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 """
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
138 filename, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
139 None,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
140 self.tr("Export Theme"),
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
141 os.path.expanduser("~"),
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
142 self.tr("eric Theme Files (*.ethj)"),
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
143 "",
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
144 EricFileDialog.DontConfirmOverwrite,
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
145 )
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
146 if filename:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
147 ext = os.path.splitext(filename)[1]
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
148 if not ext:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
149 filename = "{0}{1}".format(
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
150 filename, selectedFilter.rsplit(None, 1)[-1][2:-1]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
151 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
152
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
153 ok = (
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
154 EricMessageBox.yesNo(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
155 None,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
156 self.tr("Export Theme"),
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
157 self.tr(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
158 """<p>The theme file <b>{0}</b> exists"""
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
159 """ already. Overwrite it?</p>"""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
160 ).format(filename),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
161 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
162 if os.path.exists(filename)
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
163 else True
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
164 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
165
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
166 if ok:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
167 # step 1: generate a dictionary with all color settings
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
168 settings = Preferences.getSettings()
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
169 colorKeyFilterRe = re.compile(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
170 "|".join(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
171 ThemeManager.ColorKeyPatternList + ThemeManager.ColorKeyList
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
172 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
173 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
174
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
175 keys = [k for k in settings.allKeys() if colorKeyFilterRe.match(k)]
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
176 colorsDict = {}
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
177 for key in keys:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
178 colorsDict[key] = settings.value(key)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
179
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
180 # step 2: read the contents of the current stylesheet
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
181 stylesheetDict = {"contents": "", "name": ""}
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
182 stylesheet = Preferences.getUI("StyleSheet")
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
183 if stylesheet and os.path.exists(stylesheet):
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
184 try:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
185 with open(stylesheet, "r") as f:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
186 stylesheetDict["contents"] = f.read()
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
187 stylesheetDict["name"] = os.path.basename(stylesheet)
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
188 except OSError as err:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
189 EricMessageBox.critical(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
190 None,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
191 self.tr("Export Theme"),
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
192 self.tr(
8820
149f941d072e Finished implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8819
diff changeset
193 "<p>The stylesheet file <b>{0}</b> could not"
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
194 " be read.</p><p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
195 ).format(stylesheet, str(err)),
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
196 )
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
197
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
198 themeDict = {
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
199 "colors": colorsDict,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
200 "stylesheet": stylesheetDict,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
201 }
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
202
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
203 try:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
204 jsonString = json.dumps(themeDict, indent=2)
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
205 with open(filename, "w") as f:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
206 f.write(jsonString)
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
207 except (TypeError, OSError) as err:
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
208 EricMessageBox.critical(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
209 None,
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
210 self.tr("Export Theme"),
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
211 self.tr(
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
212 "<p>The theme file <b>{0}</b> could not"
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
213 " be written.</p><p>Reason: {1}</p>"
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
214 ).format(filename, str(err)),
8819
982fb074be98 Continued implementing a manager for color themes.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8817
diff changeset
215 )

eric ide

mercurial