Skip to content

Commit d52fc9b

Browse files
committed
Fix #168: Create readonly mode
1 parent e8b51f9 commit d52fc9b

File tree

3 files changed

+46
-24
lines changed

3 files changed

+46
-24
lines changed

command_line.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ def __init__(self, quiet=False):
6666
self._extract_error = ''
6767
self._project_name = None
6868
self.original_packagejson = {}
69+
self.readonly = True
70+
self.update_json = True
6971

7072
def init(self):
7173
self.logger = config.logger
@@ -645,18 +647,21 @@ def write_package_json(self):
645647

646648
global_json = utils.get_data_file_path(config.GLOBAL_JSON_FILE)
647649

648-
# Write package json
649-
if self.output_package_json:
650-
with codecs.open(json_file, 'w+', encoding='utf-8') as f:
651-
f.write(self.generate_project_json())
650+
if not self.readonly and self.update_json:
651+
# Write package json
652+
if self.output_package_json:
653+
with codecs.open(json_file, 'w+', encoding='utf-8') as f:
654+
f.write(self.generate_project_json())
655+
656+
if self.update_json:
652657
with codecs.open(w2e_json_file,
653658
'w+', encoding='utf-8') as f:
654659
f.write(self.generate_web2exe_json())
655660

656-
# Write global settings that are kept when installing new
657-
# versions
658-
with codecs.open(global_json, 'w+', encoding='utf-8') as f:
659-
f.write(self.generate_web2exe_json(global_json=True))
661+
# Write global settings that are kept when installing new
662+
# versions
663+
with codecs.open(global_json, 'w+', encoding='utf-8') as f:
664+
f.write(self.generate_web2exe_json(global_json=True))
660665

661666
def clean_dirs(self, *dirs):
662667
"""

main.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ def __init__(self, width, height, app, parent=None):
106106
self.original_packagejson = {}
107107

108108
self.thread = None
109+
self.readonly = False
109110

110111
self.recent_file_actions = []
111112
self.project_path = ''
@@ -164,10 +165,19 @@ def __init__(self, width, height, app, parent=None):
164165
def setup_project_menu(self):
165166
"""Set up the project menu bar with actions."""
166167
self.project_menu = self.menuBar().addMenu('File')
168+
self.edit_menu = self.menuBar().addMenu('Edit')
169+
167170
browse_action = QtGui.QAction('Open Project', self.project_menu,
168171
shortcut=QtGui.QKeySequence.Open,
169172
statusTip='Open an existing or new project.',
170173
triggered=self.browse_dir)
174+
175+
toggle_readonly_action = QtGui.QAction('Toggle Readonly', self.edit_menu,
176+
shortcut="Ctrl+R",
177+
statusTip='Toggle Readonly',
178+
triggered=self.toggle_readonly)
179+
180+
self.edit_menu.addAction(toggle_readonly_action)
171181
self.project_menu.addAction(browse_action)
172182
self.project_menu.addSeparator()
173183

@@ -269,6 +279,12 @@ def add_widgets_to_main_layout(self):
269279
self.main_layout.addWidget(self.tab_widget)
270280
self.main_layout.addLayout(self.download_bar_widget)
271281

282+
def toggle_readonly(self):
283+
self.readonly = not self.readonly
284+
285+
self.app_settings_widget.setEnabled(not self.readonly)
286+
self.win_settings_widget.setEnabled(not self.readonly)
287+
272288
def option_settings_enabled(self, is_enabled):
273289
"""
274290
Set all settings widgets to either be enabled or disabled.
@@ -279,6 +295,9 @@ def option_settings_enabled(self, is_enabled):
279295
self.ex_button.setEnabled(is_enabled)
280296
self.app_settings_widget.setEnabled(is_enabled)
281297
self.win_settings_widget.setEnabled(is_enabled)
298+
if self.readonly:
299+
self.app_settings_widget.setEnabled(False)
300+
self.win_settings_widget.setEnabled(False)
282301
self.ex_settings_widget.setEnabled(is_enabled)
283302
self.comp_settings_widget.setEnabled(is_enabled)
284303
self.dl_settings_widget.setEnabled(is_enabled)
@@ -926,9 +945,10 @@ def browse_dir(self):
926945
if directory:
927946
self.load_project(directory)
928947

929-
def load_project(self, directory):
948+
def load_project(self, directory, readonly=False):
930949
"""Load a new project from a directory."""
931950
self.update_json = False
951+
self.readonly = readonly
932952
self.project_path = directory
933953

934954
utils.save_recent_project(directory)
@@ -1481,21 +1501,7 @@ def setting_changed(self, obj, setting, *args):
14811501
if callable(action):
14821502
action()
14831503

1484-
# Generate json file
1485-
if self.update_json:
1486-
json_file = utils.path_join(self.project_dir(), 'package.json')
1487-
w2e_json_file = utils.path_join(self.project_dir(), config.WEB2EXE_JSON_FILE)
1488-
global_json = utils.get_data_file_path(config.GLOBAL_JSON_FILE)
1489-
1490-
with codecs.open(json_file, 'w+', encoding='utf-8') as f:
1491-
f.write(self.generate_project_json())
1492-
1493-
with codecs.open(w2e_json_file,
1494-
'w+', encoding='utf-8') as f:
1495-
f.write(self.generate_web2exe_json())
1496-
1497-
with codecs.open(global_json, 'w+', encoding='utf-8') as f:
1498-
f.write(self.generate_web2exe_json(global_json=True))
1504+
self.write_package_json()
14991505

15001506
self.ex_button.setEnabled(self.required_settings_filled())
15011507

util_classes.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,15 @@ def __init__(self, recent_projects, directory_callback, parent=None):
3636

3737
self.cancel = QtGui.QPushButton('Cancel')
3838
self.open = QtGui.QPushButton('Open Selected')
39+
self.open_readonly = QtGui.QPushButton('Open Read-only')
3940
self.browse = QtGui.QPushButton('Browse...')
4041

4142
self.open.setEnabled(False)
4243
self.open.clicked.connect(self.open_clicked)
4344

45+
self.open_readonly.setEnabled(False)
46+
self.open_readonly.clicked.connect(self.open_readonly_clicked)
47+
4448
self.browse.clicked.connect(self.browse_clicked)
4549

4650
buttons = QtGui.QWidget()
@@ -49,6 +53,7 @@ def __init__(self, recent_projects, directory_callback, parent=None):
4953
button_layout.addWidget(self.cancel)
5054
button_layout.addWidget(QtGui.QWidget())
5155
button_layout.addWidget(self.browse)
56+
button_layout.addWidget(self.open_readonly)
5257
button_layout.addWidget(self.open)
5358

5459
buttons.setLayout(button_layout)
@@ -76,8 +81,14 @@ def open_clicked(self):
7681
self.callback(self.projects[pos])
7782
self.close()
7883

84+
def open_readonly_clicked(self):
85+
pos = self.project_list.currentRow()
86+
self.callback(self.projects[pos], readonly=True)
87+
self.close()
88+
7989
def project_clicked(self, _):
8090
self.open.setEnabled(True)
91+
self.open_readonly.setEnabled(True)
8192

8293
def cancelled(self):
8394
self.close()

0 commit comments

Comments
 (0)