5 from ost
import io, mol, seq, geom, conop, gui, settings, gfx
18 from PyQt5
import QtGui, QtWidgets, QtCore
31 QtWidgets.QApplication.instance().quit()
32 gui.GostyApp.Instance().ProcessEvents()
38 def _InitRuleBasedProcessor():
40 if os.path.exists(compound_lib_path):
41 conop_inst=conop.Conopology.Instance()
42 compound_lib=conop.CompoundLib.Load(compound_lib_path)
43 conop_inst.SetDefaultLib(compound_lib)
48 _InitRuleBasedProcessor()
51 settings = QtCore.QSettings()
52 restore = settings.value(
"restore_settings",QtCore.QVariant(
False))
55 settings.setValue(
"restore_settings",QtCore.QVariant(
True))
58 panels = app.perspective.panels
59 panels.AddWidgetToPool(
'ost.gui.FileBrowser', -1)
60 panels.AddWidgetToPool(
'ost.gui.PythonShell', 1)
61 panels.AddWidgetToPool(
'ost.gui.SceneWin', 1)
62 panels.AddWidgetToPool(
'ost.gui.SequenceViewer', 1)
63 panels.AddWidgetToPool(
'ost.gui.MessageWidget', 1)
64 if not panels.Restore(
"ui/perspective/panels"):
65 panels.AddWidget(gui.PanelPosition.LEFT_PANEL, app.scene_win)
66 panels.AddWidgetByName(gui.PanelPosition.LEFT_PANEL,
67 'ost.gui.FileBrowser',
False)
68 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.seq_viewer)
69 panels.AddWidget(gui.PanelPosition.BOTTOM_PANEL, app.py_shell)
70 panels.AddWidget(gui.PanelPosition.RIGHT_PANEL, app.message_widget)
75 def _InitFrontEnd(try_stereo):
77 app=gui.GostyApp.Instance()
78 app.SetAppTitle(
"DNG")
79 app.TryStereo(try_stereo)
80 main_area=app.perspective.main_area
83 main_area.AddPersistentWidget(
"3D Scene",
"gl_win" , app.gl_win,
84 int(QtCore.Qt.WindowMaximized))
87 app.perspective.Restore()
88 additional_modules=getattr(__main__,
'ADDITIONAL_GUI_MODULES', [])
89 for module_name
in additional_modules:
90 __import__(module_name)
95 if not _InitPanels(app):
99 input_files=[_SplitIDSel(arg)
for arg
in loading_list]
100 for f
in input_files:
101 selection=_get_selection_query(f[1])
102 gui.FileLoader.LoadObject(f[0],selection)
104 def _get_selection_query(sel):
105 if len(options.query)>0:
107 return '(%s) and (%s)' % (options.query, sel)
114 def _execute_script():
115 script=script_argv[0]
116 sys_argv_backup=sys.argv
119 exec(compile(open(script).read(), script,
'exec'), __main__.__dict__)
121 sys.argv=sys_argv_backup
125 QtWidgets.QApplication.instance().exit()
129 script_argv.append(value)
130 for arg
in parser.rargs:
131 script_argv.append(arg)
132 del parser.rargs[0:len(parser.rargs)]
134 def _SplitIDSel(name):
137 return name[:pos], name[pos+1:-1]
141 gui.GostyApp.Instance().StopScript()
148 usage =
'usage: dng [options] [files to load]'
151 optparse.OptionParser.__init__(self, **kwargs)
152 def exit(self, status_code, error_message):
153 print(error_message, end=
' ')
154 QtWidgets.QApplication.instance().
exit()
158 parser.add_option(
"-h",
"--help", action=
"callback", callback=show_help, help=
"show this help message and exit")
159 parser.add_option(
"-v",
"--verbosity_level", action=
"store", type=
"int", dest=
"vlevel", default=2,
160 help=
"sets the verbosity level [default: %default]")
161 parser.add_option(
"-s",
"--script", action=
"callback", default=[], dest=
"script", type=
"string", callback=parse_script_option, help=
"executes a script (syntax: -s SCRIPT [options] [args]) Anything that follows this option is passed to the script")
162 parser.add_option(
"-p",
"--processor", dest=
"processor", default=
"HEURISTIC", help=
"Type of processor used by the progam (either RULE_BASED or HEURISTIC) [default: %default]")
163 parser.add_option(
"-c",
"--compound_library", dest=
"complib", default=
"compounds.chemlib", help=
"Compound library for the RULE_BASED processor (only used if --processor option is set to RULE_BASED, otherwise ignored [default: %default]")
164 parser.add_option(
"-q",
"--query", dest=
"query", default=
"", help=
"Selection query to be highlighted automatically upon loading (only used when a PDB file is loaded, otherwise ignored [default: None]")
165 parser.add_option(
"-S",
"--stereo", dest=
"try_stereo", default=
False, action=
"store_true",help=
"try to get a quad-buffer stereo visual")
166 parser.disable_interspersed_args()
167 (options, args) = parser.parse_args()
169 if len(parser.rargs)!=0:
170 for rargs_string
in parser.rargs:
171 if not rargs_string.endswith(
'.py'):
172 loading_list.append(rargs_string)
174 print(
'Error: one of the files to load is a Python script, use -s flag to execute it\n')
175 QtWidgets.QApplication.instance().
exit()
178 if len(options.script)!=0:
179 script_argv=options.script
181 if options.processor==
"RULE_BASED":
182 from ost
import conop
183 if os.path.exists(options.complib):
184 compound_lib=conop.CompoundLib.Load(options.complib)
185 conop.SetDefaultLib(compound_lib)
188 home = os.getenv(
'HOME')
or os.getenv(
'USERPROFILE')
189 _ostrc=os.path.join(home,
'.ostrc')
190 if os.path.exists(_ostrc):
192 exec(compile(open(_ostrc).read(), _ostrc,
'exec'))
193 except Exception
as e:
196 rcfile=open(_ostrc,
"w")
197 print(
'# This python file is parsed by ost and dng at startup', file=rcfile)
198 print(
'# Its content is made available in the global namespace', file=rcfile)
199 print(
'# It can be used to define custom variables and functions', file=rcfile)
200 print(
'# For example:', file=rcfile)
201 print(
'# IMPORTANT_DIR="path/to/important/dir"', file=rcfile)
205 working_dir=settings.GetValue(
"DNG_WORKING_DIR",
None)
207 if working_dir !=
None and os.path.isdir(working_dir):
208 os.chdir(working_dir)
210 _InitFrontEnd(options.try_stereo)
212 if len(loading_list)!=0:
215 if len(script_argv)!=0:
main class for organization and root for the graphical display
def __init__(self, **kwargs)
def exit(self, status_code, error_message)
def parse_script_option(option, opt, value, parser)
def show_help(option, opt, value, parser)
def PushVerbosityLevel(value)
String DLLEXPORT_OST_BASE GetSharedDataPath()