mirror of https://github.com/chriskiehl/Gooey.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.2 KiB
118 lines
3.2 KiB
import json
|
|
import sys
|
|
from collections import OrderedDict
|
|
from uuid import uuid4
|
|
|
|
from PyQt5.QtWidgets import QApplication
|
|
|
|
from copy import deepcopy
|
|
from rx.subjects import Subject
|
|
|
|
from gooey.gui.lang import i18n
|
|
|
|
|
|
def app_reducer(state, action):
|
|
if action['type'] == 'pass':
|
|
pass
|
|
|
|
def gooey1to2(buildspec):
|
|
'''
|
|
Still figuring out exactly how I want everything arranged..
|
|
'''
|
|
root_commands = OrderedDict()
|
|
widgets = []
|
|
|
|
for parent_name, val in buildspec['widgets'].items():
|
|
root_commands[parent_name] = val['command']
|
|
|
|
for index, widget in enumerate(val['contents']):
|
|
new_widget = deepcopy(widget)
|
|
new_widget['parent'] = parent_name
|
|
if widget['type'] == 'MultiDirChooser':
|
|
print('Ignoring MultiDirChooser')
|
|
continue
|
|
if widget['type'] == 'RadioGroup':
|
|
print('Ignoring RadioGroup')
|
|
continue
|
|
|
|
if not widget['type'] == 'RadioGroup':
|
|
if new_widget['type'] == 'DirChooser':
|
|
new_widget['type'] = 'DirectoryChooser'
|
|
new_widget['value'] = widget['data']['default']
|
|
else:
|
|
new_widget['value'] = None
|
|
new_widget['id'] = str(uuid4())
|
|
new_widget['order'] = index
|
|
widgets.append(new_widget)
|
|
|
|
widget_map = OrderedDict((widget['id'], widget) for widget in widgets)
|
|
new_buildspec = deepcopy(buildspec)
|
|
new_buildspec['view'] = 'configuration'
|
|
new_buildspec['activeGroup'] = list(root_commands.keys())[0]
|
|
new_buildspec['groups'] = root_commands
|
|
new_buildspec['widgets'] = widget_map
|
|
new_buildspec['title'] = 'Settings'
|
|
new_buildspec['subtitle'] = new_buildspec['program_description']
|
|
new_buildspec['icon'] = '../images/config_icon.png'
|
|
new_buildspec['gooey_state'] = {
|
|
'icon': '../images/config_icon.png',
|
|
'title': 'Settings',
|
|
'subtitle': new_buildspec['program_description'],
|
|
'window': 0,
|
|
'buttonGroup': 0
|
|
}
|
|
return new_buildspec
|
|
|
|
|
|
def load_initial_state():
|
|
with open('gooey_config.json', 'r') as f:
|
|
data = json.loads(f.read(), object_pairs_hook=OrderedDict)
|
|
return gooey1to2(data)
|
|
|
|
|
|
class StateContainer(Subject):
|
|
def __init__(self, initialState=None):
|
|
super(StateContainer, self).__init__()
|
|
self._state = initialState or {}
|
|
|
|
def __getitem__(self, item):
|
|
return self._state[item]
|
|
|
|
def __setitem__(self, key, value):
|
|
self._state[key] = value
|
|
self.on_next(self._state)
|
|
|
|
|
|
|
|
|
|
sys._excepthook = sys.excepthook
|
|
|
|
def my_exception_hook(exctype, value, traceback):
|
|
# Print the error and traceback
|
|
print(exctype, value, traceback)
|
|
# Call the normal Exception hook after
|
|
sys._excepthook(exctype, value, traceback)
|
|
sys.exit(1)
|
|
|
|
# Set the exception hook to our wrapping function
|
|
sys.excepthook = my_exception_hook
|
|
|
|
|
|
|
|
state = StateContainer(load_initial_state())
|
|
|
|
i18n.load(state['language_dir'], state['language'])
|
|
|
|
from gooey.new_hotness.containers.application import MainWindow
|
|
|
|
app = QApplication(sys.argv)
|
|
form = MainWindow(state)
|
|
|
|
state['title'] = 'Foobar'
|
|
state['title'] = 'Settings'
|
|
state['icon'] = '../images/config_icon.png'
|
|
|
|
# show
|
|
form.show()
|
|
|
|
app.exec_()
|