Wed, 25 May 2022 20:36:34 +0300
Fix pick() picking from weird places on the screen with high DPI scaling
glReadPixels reads data from the frame buffer, which contains data after
high DPI scaling, so any reads to that need to take this scaling into account
41
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
1 | #!/usr/bin/env python3 |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
2 | # coding: utf-8 |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
3 | # |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
4 | # Copyright 2015 - 2017 Teemu Piippo |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
5 | # All rights reserved. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
6 | # |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
7 | # Redistribution and use in source and binary forms, with or without |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
8 | # modification, are permitted provided that the following conditions |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
9 | # are met: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
10 | # |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
11 | # 1. Redistributions of source code must retain the above copyright |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
12 | # notice, this list of conditions and the following disclaimer. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
13 | # 2. Redistributions in binary form must reproduce the above copyright |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
14 | # notice, this list of conditions and the following disclaimer in the |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
15 | # documentation and/or other materials provided with the distribution. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
16 | # 3. Neither the name of the copyright holder nor the names of its |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
17 | # contributors may be used to endorse or promote products derived from |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
18 | # this software without specific prior written permission. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
19 | # |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
20 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
21 | # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
22 | # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
23 | # PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
24 | # OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
25 | # EXEMPLARY, OR CONSEQUENTIAL DAMAGES(INCLUDING, BUT NOT LIMITED TO, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
26 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
27 | # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
28 | # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT(INCLUDING |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
29 | # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
30 | # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
31 | # |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
32 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
33 | from argparse import ArgumentParser |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
34 | from collections import OrderedDict |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
35 | import caseconversions |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
36 | import outputfile |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
37 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
38 | # These types are passed by value |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
39 | passbyvalue = {'int', 'bool', 'float', 'double', 'qreal'} |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
40 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
41 | def deduce_type(value): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
42 | ''' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
43 | Try to determine the type of value from the value itself. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
44 | ''' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
45 | if value in('true', 'false'): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
46 | return 'bool' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
47 | elif value.startswith(('"', 'R"')) and value.endswith('"'): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
48 | return 'QString' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
49 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
50 | try: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
51 | int(value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
52 | return 'int' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
53 | except: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
54 | pass |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
55 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
56 | try: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
57 | float(value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
58 | return 'double' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
59 | except: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
60 | pass |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
61 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
62 | if value.endswith('f'): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
63 | try: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
64 | float(value[:-1]) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
65 | return 'float' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
66 | except: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
67 | pass |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
68 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
69 | raise ValueError('unable to deduce type of %r' % value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
70 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
71 | class ConfigCollector: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
72 | def __init__(self, args): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
73 | self.declarations = OrderedDict() |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
74 | self.qtTypes = set() |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
75 | self.args = args |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
76 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
77 | def collect(self, filename): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
78 | with open(filename) as file: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
79 | for linenumber, line in enumerate(file, 1): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
80 | try: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
81 | line = line.strip() |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
82 | if line and not line.startswith('#'): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
83 | from re import search |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
84 | match = search('^option (\w+) = (.+)$', line) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
85 | if not match: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
86 | raise ValueError('unable to parse: %r' % line) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
87 | name, value = match.groups() |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
88 | match = search(r'^([a-zA-Z0-9_<>]+)\s*\{(.*)\}$', value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
89 | try: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
90 | typename = match.group(1) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
91 | except: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
92 | typename = deduce_type(value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
93 | self.declare(name, typename, value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
94 | except ValueError as error: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
95 | from sys import stderr, exit |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
96 | print(str.format( |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
97 | '{file}:{line}: {error}', |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
98 | file = filename, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
99 | line = linenumber, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
100 | error = str(error), |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
101 | ), file = stderr) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
102 | exit(1) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
103 | # Sort the declarations in alphabetical order |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
104 | self.declarations = OrderedDict(sorted(self.declarations.items(), key = lambda t: t[1]['name'])) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
105 | # Fill in additional information |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
106 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
107 | declaration['readgate'] = caseconversions.convert_case(declaration['name'], style='java') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
108 | declaration['writegate'] = 'set' + caseconversions.convert_case(declaration['name'], style='camel') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
109 | declaration['togglefunction'] = 'toggle' + caseconversions.convert_case(declaration['name'], style='camel') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
110 | if declaration['type'] in passbyvalue: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
111 | declaration['typereference'] = declaration['type'] |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
112 | else: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
113 | declaration['typereference'] = 'const %s&' % declaration['type'] |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
114 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
115 | def declare(self, name, typename, default): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
116 | from re import findall |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
117 | if name in self.declarations: |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
118 | raise ValueError('Attempted to redeclare %r' % name) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
119 | self.declarations[name] = { |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
120 | 'name': name, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
121 | 'type': typename, |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
122 | 'default': default |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
123 | } |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
124 | # Keep a file of any Qt types, we'll need to #include them. |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
125 | self.qtTypes.update(findall(r'Q\w+', typename)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
126 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
127 | def writeHeader(self, device): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
128 | device.write('#pragma once\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
129 | device.write('#include <QMap>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
130 | device.write('#include <QSettings>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
131 | device.write('#include <glm/glm.hpp>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
132 | for qtType in sorted(self.qtTypes): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
133 | device.write('#include <%s>\n' % qtType) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
134 | device.write('#include "libraries.h"\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
135 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
136 | formatargs = {} |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
137 | write = lambda value: device.write(value) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
138 | write('class Configuration : private QSettings\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
139 | write('{\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
140 | write('public:\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
141 | write('\tusing QSettings::QSettings;\n'); |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
142 | write('\tbool exists(const QString& name);\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
143 | write('\tQVariant value(const QString& name);\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
144 | write('\tQVariant setValue(const QString& name);\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
145 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
146 | write('\t{type} {readgate}();\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
147 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
148 | write('\tvoid {writegate}({typereference} value);\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
149 | for declaration in filter(lambda declaration: declaration['type'] == 'bool', self.declarations.values()): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
150 | write('\tvoid {togglefunction}();\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
151 | write('private:\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
152 | write('\tusing QSettings::value;\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
153 | write('\tusing QSettings::setValue;\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
154 | write('\tstatic const QMap<QString, QVariant>& defaults();\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
155 | write('};\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
156 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
157 | def writeSource(self, device, headername): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
158 | device.write('#include <QSet>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
159 | device.write('#include <QSettings>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
160 | device.write('#include <QVariant>\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
161 | device.write('#include "%s/mainwindow.h"\n' % (self.args.sourcedir)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
162 | device.write('#include "%s"\n' % headername) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
163 | device.write( |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
164 | 'const QMap<QString, QVariant>& Configuration::defaults()\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
165 | '{\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
166 | '\tstatic const QMap<QString, QVariant> defaults {\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
167 | ) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
168 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
169 | device.write('\t\t{{"{name}", QVariant::fromValue<{type}>({default})}},\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
170 | device.write('\t};\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
171 | '\treturn defaults;\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
172 | '}\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
173 | '\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
174 | device.write('bool Configuration::exists(const QString& name)\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
175 | device.write('{\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
176 | device.write('\treturn defaults().contains(name);\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
177 | device.write('}\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
178 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
179 | device.write('QVariant Configuration::value(const QString& name)\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
180 | '{\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
181 | '\treturn this->value(name, Configuration::defaults().value(name));\n' |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
182 | '}\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
183 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
184 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
185 | device.write('{type} Configuration::{readgate}()\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
186 | device.write('{\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
187 | device.write('\tstatic const QVariant defaultvalue = QVariant::fromValue<{type}>({default});\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
188 | device.write('\treturn this->value("{name}", defaultvalue).value<{type}>();\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
189 | device.write('}\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
190 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
191 | for declaration in self.declarations.values(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
192 | device.write('void Configuration::{writegate}({typereference} value)\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
193 | device.write('{\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
194 | device.write('\tif (value != {default})\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
195 | device.write('\t\tthis->setValue("{name}", QVariant::fromValue<{type}>(value));\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
196 | device.write('\telse\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
197 | device.write('\t\tthis->remove("{name}");\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
198 | device.write('}\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
199 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
200 | for declaration in filter(lambda declaration: declaration['type'] == 'bool', self.declarations.values()): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
201 | device.write('void Configuration::{togglefunction}()\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
202 | device.write('{\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
203 | device.write('\t{writegate}(not {readgate}());\n'.format(**declaration)) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
204 | device.write('}\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
205 | device.write('\n') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
206 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
207 | def main(): |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
208 | parser = ArgumentParser(description='Collects a list of configuration objects') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
209 | parser.add_argument('input') |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
210 | parser.add_argument('--header', required=True) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
211 | parser.add_argument('--source', required=True) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
212 | parser.add_argument('--sourcedir', required=True) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
213 | args = parser.parse_args() |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
214 | collector = ConfigCollector(args) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
215 | collector.collect(args.input) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
216 | from outputfile import OutputFile |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
217 | header = OutputFile(args.header) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
218 | source = OutputFile(args.source) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
219 | collector.writeSource(source, headername=args.header) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
220 | collector.writeHeader(header) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
221 | header.save(verbose = True) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
222 | source.save(verbose = True) |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
223 | |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
224 | if __name__ == '__main__': |
0abada2a9802
added automated configuration collection
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
225 | main() |