@@ -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
0 commit comments