1 |
# Preferences module for ASCPY. |
2 |
|
3 |
import ConfigParser, os |
4 |
import re |
5 |
import platform |
6 |
|
7 |
## @TODO implement this differently; the __del__ stuff is not working correctly |
8 |
## in the context of the extpy extension. |
9 |
|
10 |
class Preferences: |
11 |
__sharedstate = {} |
12 |
|
13 |
def __init__(self): |
14 |
self.__dict__ = self.__sharedstate |
15 |
|
16 |
if not hasattr(self,'n'): |
17 |
self.n = 0; |
18 |
if platform.system()=="Windows": |
19 |
self.fname = os.path.join(os.environ['APPDATA'],".ascend.ini") |
20 |
else: |
21 |
self.fname = os.path.expanduser("~/.ascend.ini"); |
22 |
|
23 |
#print "PREFERENCES FILE =",self.fname |
24 |
|
25 |
self.n = self.n + 1; |
26 |
|
27 |
if not hasattr(self,'ini'): |
28 |
#print "READING/CREATING CONFIG" |
29 |
self.ini = ConfigParser.SafeConfigParser(); |
30 |
self.ini.read( [ self.fname ] ); |
31 |
|
32 |
def __del__(self): |
33 |
self.n = self.n - 1; |
34 |
if self.n==0: |
35 |
print "\rSaving preferences in ",self.fname |
36 |
f = open(self.fname, "w"); |
37 |
self.ini.write( f ); |
38 |
|
39 |
def getGeometrySizePosition(self,displayname,key): |
40 |
try: |
41 |
_g = self.ini.get("Geometry:"+str(displayname),key) |
42 |
except ConfigParser.NoSectionError: |
43 |
return None |
44 |
except ConfigParser.NoOptionError: |
45 |
return None |
46 |
_p = re.compile('^\s*(\d+)[Xx](\d+)\+(-?\d+)\+(-?\d+)\s*$'); |
47 |
|
48 |
_m = _p.match(_g) |
49 |
#print "MATCH: ",_m.groups() |
50 |
if not _m: |
51 |
return None |
52 |
return [int(i) for i in _m.groups()] |
53 |
|
54 |
def setGeometrySizePosition(self,displayname,key,width,height,top,left): |
55 |
if not self.ini.has_section("Geometry:"+str(displayname)): |
56 |
self.ini.add_section("Geometry:"+str(displayname)) |
57 |
self.ini.set("Geometry:"+str(displayname),key, "%dx%d+%d+%d" % (width, height, top, left) ); |
58 |
|
59 |
def getGeometryValue(self,displayname,key): |
60 |
try: |
61 |
_g = self.ini.get("Geometry:"+str(displayname),key) |
62 |
except ConfigParser.NoSectionError: |
63 |
return None |
64 |
except ConfigParser.NoOptionError: |
65 |
return None |
66 |
return int(_g) |
67 |
|
68 |
def setGeometryValue(self,displayname,key,value): |
69 |
if not self.ini.has_section("Geometry:"+str(displayname)): |
70 |
self.ini.add_section("Geometry:"+str(displayname)) |
71 |
self.ini.set("Geometry:"+str(displayname),key,str(value)) |
72 |
|
73 |
def getPreferredUnits(self,key): |
74 |
try: |
75 |
_u = self.ini.get("PreferredUnits",key); |
76 |
except ConfigParser.NoSectionError: |
77 |
return None |
78 |
except ConfigParser.NoOptionError: |
79 |
return None |
80 |
return _u |
81 |
|
82 |
def setPreferredUnits(self,key,val): |
83 |
if not self.ini.has_section("PreferredUnits"): |
84 |
self.ini.add_section("PreferredUnits") |
85 |
self.ini.set("PreferredUnits",key,val) |
86 |
#print "SET PREFERRED UNITS FOR %s TO %s" % ( key, val ) |
87 |
|
88 |
def getBoolPref(self,sect,key,default=None): |
89 |
try: |
90 |
_u = self.ini.get(sect,key) |
91 |
except ConfigParser.NoSectionError: |
92 |
return default |
93 |
except ConfigParser.NoOptionError: |
94 |
return default |
95 |
if _u: |
96 |
return True |
97 |
return False |
98 |
|
99 |
def setBoolPref(self,sect,key,val): |
100 |
if not self.ini.has_section(sect): |
101 |
self.ini.add_section(sect) |
102 |
if val: |
103 |
val = "1" |
104 |
else: |
105 |
val = "" |
106 |
self.ini.set(sect,key,val) |
107 |
|
108 |
def getStringPref(self,sect,key,default=None): |
109 |
try: |
110 |
_u = self.ini.get(sect,key) |
111 |
except ConfigParser.NoSectionError: |
112 |
return default |
113 |
except ConfigParser.NoOptionError: |
114 |
return default |
115 |
return _u; |
116 |
|
117 |
def setStringPref(self,sect,key,value): |
118 |
if not self.ini.has_section(sect): |
119 |
self.ini.add_section(sect) |
120 |
self.ini.set(sect,key,str(value)) |
121 |
|
122 |
|
123 |
|
124 |
# Test script: |
125 |
def main(): |
126 |
x = Preferences(); |
127 |
y = Preferences(); |
128 |
|
129 |
print "Units for length: ",x.getPreferredUnits("length"); |
130 |
print "Units for time: ",x.getPreferredUnits("time"); |
131 |
|
132 |
x.setPreferredUnits("length","m"); |
133 |
y.setPreferredUnits("time","hr"); |
134 |
print "Units for length: ",y.getPreferredUnits("length"); |
135 |
print "Units for time: ",y.getPreferredUnits("time"); |
136 |
|
137 |
print "About to delete x" |
138 |
del x; |
139 |
print "Deleted x" |
140 |
|
141 |
y.setPreferredUnits("length","cm"); |
142 |
|
143 |
print "About to delete y" |
144 |
del y; |
145 |
|
146 |
print "Deleted y" |
147 |
|
148 |
if __name__ == "__main__": |
149 |
main() |