open/save projects
This commit is contained in:
parent
1d05a67a89
commit
17f28e5848
80
opal.py
80
opal.py
@ -220,7 +220,7 @@ class MainFrame(forms.MainFrame):
|
||||
ov.daemon = True
|
||||
ov.start()
|
||||
|
||||
self.NewProject(self.models[0])
|
||||
# self.NewProject(self.models[0])
|
||||
|
||||
# Функции приложения и обработки сервера
|
||||
|
||||
@ -372,27 +372,47 @@ class MainFrame(forms.MainFrame):
|
||||
def OnOpenProject(self, event):
|
||||
|
||||
def WalkModels(source, root, models, model_def = None):
|
||||
|
||||
for key, value in source.iteritems():
|
||||
# for имя-модели, параметры-модели
|
||||
for mname, value in source.iteritems():
|
||||
label = value['model']
|
||||
|
||||
if label not in models:
|
||||
raise KeyError, 'no "{}"'.format(label)
|
||||
|
||||
data = ModelData(self.server, models[label], model_def)
|
||||
data.mdef.params = value['data']
|
||||
data.state = value['state']
|
||||
if 'result' in value:
|
||||
data.res = task.ResultData(value['result'])
|
||||
# тут надо проверить все добавленные параметры
|
||||
|
||||
item = um.AppendItem(root, key)
|
||||
um.SetPyData(item, data)
|
||||
model_items[key] = item
|
||||
item = self.AddModel(root, mname, data)
|
||||
model_items[mname] = item
|
||||
|
||||
WalkModels(value['um'], item, models[label].GetSpecs(), data)
|
||||
|
||||
def WalkPlots(source, root):
|
||||
for plot in source:
|
||||
item = self.m_plots.AppendItem(root, plot[0])
|
||||
self.m_plots.SetPyData(item, 'plot')
|
||||
self.m_plots.SetItemImage(item, self.icons.porg)
|
||||
for line in plot[1]:
|
||||
model_label = line['model']
|
||||
data = LineData(
|
||||
ums_ptr = (um, model_items[model_label]),
|
||||
plots_ptr = None,
|
||||
type = line['type'],
|
||||
columns = (line['colx'], line['coly'])
|
||||
)
|
||||
self.AddLine(item, line['title'], data)
|
||||
|
||||
try:
|
||||
infile = 'data.opl'
|
||||
data = {}
|
||||
with open(infile, 'rb') as f:
|
||||
data = json.loads(zlib.decompress(f.read()))
|
||||
# with open(infile, 'rb') as f:
|
||||
# data = json.loads(zlib.decompress(f.read()))
|
||||
with open(infile, 'r') as f:
|
||||
data = json.loads(f.read())
|
||||
|
||||
pprint(data)
|
||||
|
||||
@ -406,19 +426,29 @@ class MainFrame(forms.MainFrame):
|
||||
|
||||
um = self.m_user_models
|
||||
model_items = {}
|
||||
|
||||
root = um.GetRootItem()
|
||||
WalkModels(data['um'], root, {model.GetLabel(): model})
|
||||
um.ExpandAll(root)
|
||||
|
||||
root = self.m_plots.GetRootItem()
|
||||
WalkPlots(data['plots'], root)
|
||||
self.m_plots.ExpandAll(root)
|
||||
|
||||
# except KeyError, e:
|
||||
# wx.MessageBox("Can't parse saved file!", 'Error!')
|
||||
# except ValueError, e:
|
||||
# wx.MessageBox("Can't parse saved file!", 'Error!')
|
||||
except Exception, e:
|
||||
# wx.MessageBox("Can't load file", 'Error')
|
||||
print 'Oops', type(e), e
|
||||
|
||||
def OnSaveProject(self, event):
|
||||
|
||||
def WalkModels(item, dest):
|
||||
"""
|
||||
Сохраняем информацию о каждой модели
|
||||
"""
|
||||
if item != um.GetRootItem():
|
||||
data = um.GetPyData(item)
|
||||
title = um.GetItemText(item)
|
||||
@ -439,6 +469,9 @@ class MainFrame(forms.MainFrame):
|
||||
child = um.GetNextSibling(child)
|
||||
|
||||
def WalkPlots(root, dest):
|
||||
"""
|
||||
Сохраняем информацию о каждом графике
|
||||
"""
|
||||
# по всеи элементам первого уровня
|
||||
item1, _ = self.m_plots.GetFirstChild(root)
|
||||
while item1.IsOk():
|
||||
@ -460,7 +493,6 @@ class MainFrame(forms.MainFrame):
|
||||
dest.append([title, lines])
|
||||
item1 = self.m_plots.GetNextSibling(item1)
|
||||
|
||||
|
||||
wx.BeginBusyCursor()
|
||||
|
||||
data = {}
|
||||
@ -860,8 +892,8 @@ class MainFrame(forms.MainFrame):
|
||||
@item_protector
|
||||
def AddLines(self, line_type):
|
||||
"""
|
||||
Добавляет линии в выделенный график компонента с графиками
|
||||
(m_plots)
|
||||
Добавляет линии в выделенный график
|
||||
(компонента с графиками m_plots)
|
||||
"""
|
||||
# получаем указатель на индекс и данные элемента, который выделен
|
||||
item, data = self.GetSelectedItemData(self.m_plots)
|
||||
@ -870,21 +902,19 @@ class MainFrame(forms.MainFrame):
|
||||
return
|
||||
# получаем указанные пользователем линии
|
||||
lines = self.GetLines(line_type)
|
||||
# if not lines:
|
||||
# return
|
||||
for line in lines:
|
||||
title = line.GetTitle()
|
||||
child = self.m_plots.AppendItem(item, title)
|
||||
# указываем на только что созданный новый элемент
|
||||
line.plots_ptr = (self.m_plots, child)
|
||||
# заполняем элемент данными
|
||||
self.m_plots.SetPyData(child, line)
|
||||
self.m_plots.SetItemImage(child, self.icons.pline)
|
||||
self.m_plots.Expand(item)
|
||||
if line.type == LINE_MARKER:
|
||||
self.m_plots.SetItemImage(child, self.icons.pmarker)
|
||||
else:
|
||||
self.m_plots.SetItemImage(child, self.icons.pline)
|
||||
self.AddLine(item, line.GetTitle(), line)
|
||||
|
||||
def AddLine(self, root, title, line_data):
|
||||
item = self.m_plots.AppendItem(root, title)
|
||||
self.m_plots.SetPyData(item, line_data)
|
||||
line_data.plots_ptr = (self.m_plots, item)
|
||||
if line_data.type == LINE_MARKER:
|
||||
self.m_plots.SetItemImage(item, self.icons.pmarker)
|
||||
else:
|
||||
self.m_plots.SetItemImage(item, self.icons.pline)
|
||||
self.m_plots.Expand(root)
|
||||
return item
|
||||
|
||||
def OnAddCurves(self, event):
|
||||
self.AddLines(LINE_CURVE)
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
"n": {
|
||||
"type": "int",
|
||||
"default": 10,
|
||||
"default": 20,
|
||||
"title": "Steps",
|
||||
"comment": "Number of steps for algorithm"
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user