code review
This commit is contained in:
parent
9741fc36e3
commit
360e1de5d9
@ -120,7 +120,6 @@ class MainFrame (wx.Frame):
|
|||||||
self.Layout()
|
self.Layout()
|
||||||
self.Centre(wx.BOTH)
|
self.Centre(wx.BOTH)
|
||||||
|
|
||||||
|
|
||||||
def LoadIcons(self):
|
def LoadIcons(self):
|
||||||
icons = Icons()
|
icons = Icons()
|
||||||
ilist = wx.ImageList(16, 16)
|
ilist = wx.ImageList(16, 16)
|
||||||
@ -143,7 +142,7 @@ class MainFrame (wx.Frame):
|
|||||||
menu.Append(ID_NEW, "&New\tCtrl+N")
|
menu.Append(ID_NEW, "&New\tCtrl+N")
|
||||||
menu.Append(ID_OPEN, "&Open\tCtrl+O")
|
menu.Append(ID_OPEN, "&Open\tCtrl+O")
|
||||||
menu.Append(ID_SAVE, "&Save\tCtrl+S")
|
menu.Append(ID_SAVE, "&Save\tCtrl+S")
|
||||||
menubar.Append(menu, '&Model')
|
menubar.Append(menu, '&Project')
|
||||||
|
|
||||||
menu = wx.Menu()
|
menu = wx.Menu()
|
||||||
menu.Append(ID_ADD_MODEL_ROOT, 'Add model to root')
|
menu.Append(ID_ADD_MODEL_ROOT, 'Add model to root')
|
||||||
@ -154,7 +153,7 @@ class MainFrame (wx.Frame):
|
|||||||
menu.Append(ID_DELETE_MODEL, 'Delete\tCtrl+E')
|
menu.Append(ID_DELETE_MODEL, 'Delete\tCtrl+E')
|
||||||
menu.AppendSeparator()
|
menu.AppendSeparator()
|
||||||
menu.Append(ID_TEST, "&Test\tCtrl+T")
|
menu.Append(ID_TEST, "&Test\tCtrl+T")
|
||||||
menubar.Append(menu, '&Edit')
|
menubar.Append(menu, '&Model')
|
||||||
|
|
||||||
menu = wx.Menu()
|
menu = wx.Menu()
|
||||||
menu.Append(ID_PROCESS_MODEL, 'Process\tF5')
|
menu.Append(ID_PROCESS_MODEL, 'Process\tF5')
|
||||||
@ -253,7 +252,6 @@ class LineSelectDialog(wx.Dialog):
|
|||||||
self.Layout()
|
self.Layout()
|
||||||
self.Centre(wx.BOTH)
|
self.Centre(wx.BOTH)
|
||||||
|
|
||||||
|
|
||||||
class PlotFrame(wx.Frame):
|
class PlotFrame(wx.Frame):
|
||||||
def __init__(self, parent, title):
|
def __init__(self, parent, title):
|
||||||
wx.Frame.__init__ (self, parent, -1, title, size = wx.Size(600, 400))
|
wx.Frame.__init__ (self, parent, -1, title, size = wx.Size(600, 400))
|
||||||
|
375
trunk/opal.py
375
trunk/opal.py
@ -79,12 +79,11 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
s = server.LocalServer()
|
s = server.LocalServer()
|
||||||
s.LoadModels()
|
s.LoadModels()
|
||||||
models = s.GetModels()
|
self.models = s.GetModels()
|
||||||
self.models = models
|
|
||||||
s.Start()
|
s.Start()
|
||||||
self.server = s
|
self.server = s
|
||||||
|
|
||||||
model = models[0]
|
# События компонентов
|
||||||
|
|
||||||
self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED,
|
self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED,
|
||||||
self.OnModelActivated)
|
self.OnModelActivated)
|
||||||
@ -100,7 +99,9 @@ class MainFrame(forms.MainFrame):
|
|||||||
self.OnPlotProcess)
|
self.OnPlotProcess)
|
||||||
|
|
||||||
|
|
||||||
self.Bind(wx.EVT_MENU, self.OnNewModel,
|
# События меню
|
||||||
|
|
||||||
|
self.Bind(wx.EVT_MENU, self.OnNewProject,
|
||||||
id = forms.ID_NEW)
|
id = forms.ID_NEW)
|
||||||
|
|
||||||
self.Bind(wx.EVT_MENU, self.OnTest,
|
self.Bind(wx.EVT_MENU, self.OnTest,
|
||||||
@ -130,6 +131,8 @@ class MainFrame(forms.MainFrame):
|
|||||||
self.Bind(wx.EVT_MENU, self.OnAddMarkers,
|
self.Bind(wx.EVT_MENU, self.OnAddMarkers,
|
||||||
id = forms.ID_ADD_MARKERS)
|
id = forms.ID_ADD_MARKERS)
|
||||||
|
|
||||||
|
# События приложения
|
||||||
|
|
||||||
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
self.Bind(wx.EVT_CLOSE, self.OnClose)
|
||||||
self.Bind(wx.EVT_IDLE, self.OnIdle)
|
self.Bind(wx.EVT_IDLE, self.OnIdle)
|
||||||
|
|
||||||
@ -145,13 +148,17 @@ class MainFrame(forms.MainFrame):
|
|||||||
ov.daemon = True
|
ov.daemon = True
|
||||||
ov.start()
|
ov.start()
|
||||||
|
|
||||||
self.NewProject(model)
|
self.NewProject(self.models[0])
|
||||||
|
|
||||||
|
# Функции приложения и обработки сервера
|
||||||
|
|
||||||
def OnClose(self, event):
|
def OnClose(self, event):
|
||||||
self.server.Stop()
|
self.server.Stop()
|
||||||
self.Destroy()
|
self.Destroy()
|
||||||
|
|
||||||
|
def OnIdle(self, event):
|
||||||
|
pass
|
||||||
|
|
||||||
def Overseer(self):
|
def Overseer(self):
|
||||||
"""
|
"""
|
||||||
Функция-надсмотрщик, которая периодически проверяет состояние
|
Функция-надсмотрщик, которая периодически проверяет состояние
|
||||||
@ -217,6 +224,67 @@ class MainFrame(forms.MainFrame):
|
|||||||
except Exception, e:
|
except Exception, e:
|
||||||
print 'Error in overseer: ', e
|
print 'Error in overseer: ', e
|
||||||
|
|
||||||
|
# Функции создания модели, сохранения и загрузки
|
||||||
|
|
||||||
|
def BuildSpecs(self, model):
|
||||||
|
"""
|
||||||
|
Выстраивает иерархию спецификаций для выбранной модели
|
||||||
|
"""
|
||||||
|
def DoItem(item, model):
|
||||||
|
sp.SetPyData(item, model)
|
||||||
|
for spec in model.GetSpecs():
|
||||||
|
child = sp.AppendItem(item, spec.GetTitle())
|
||||||
|
DoItem(child, spec)
|
||||||
|
|
||||||
|
sp = self.m_specs
|
||||||
|
sp.DeleteAllItems()
|
||||||
|
root = sp.AddRoot(model.GetTitle())
|
||||||
|
DoItem(root, model)
|
||||||
|
sp.ExpandAll()
|
||||||
|
sp.SortChildren(root)
|
||||||
|
|
||||||
|
def NewProject(self, model):
|
||||||
|
"""
|
||||||
|
Начать новый проект:
|
||||||
|
0. Очичтить все компоненты
|
||||||
|
1. Построить дерево спецификаций
|
||||||
|
2. Создать одну пользовательскую модель (по умолчанию)
|
||||||
|
3. Сделать заготовки для графиков/отчетов/прочего
|
||||||
|
"""
|
||||||
|
self.m_specs.DeleteAllItems()
|
||||||
|
self.m_user_models.DeleteAllItems()
|
||||||
|
self.m_params.ClearPage(0)
|
||||||
|
self.m_quick_result.ClearPage(0)
|
||||||
|
self.m_plots.DeleteAllItems()
|
||||||
|
# Строим спецификации
|
||||||
|
self.BuildSpecs(model)
|
||||||
|
# Очищаем окно пользовательских моделей
|
||||||
|
# и создаем там одну
|
||||||
|
um = self.m_user_models
|
||||||
|
um.DeleteAllItems()
|
||||||
|
um.AddRoot('root')
|
||||||
|
self.AddModelToRoot(model)
|
||||||
|
# Создаем корневой элемент для окна с графиками
|
||||||
|
self.m_plots.AddRoot('root')
|
||||||
|
|
||||||
|
self.SetStatusText('Model "{}" selected'.format(model.GetTitle()), 0)
|
||||||
|
|
||||||
|
return True # Project(model)
|
||||||
|
|
||||||
|
def OnNewProject(self, event):
|
||||||
|
self.do_nothing = True
|
||||||
|
f = SelectModelDialog(self, self.models)
|
||||||
|
if f.ShowModal() == wx.ID_OK:
|
||||||
|
model = f.GetSelectedModel()
|
||||||
|
if model:
|
||||||
|
self.NewProject(model)
|
||||||
|
self.do_nothing = False
|
||||||
|
|
||||||
|
# Функции непосредственной работы с моделями:
|
||||||
|
# создание, изменение, дублирование и прочее
|
||||||
|
|
||||||
|
# Работа с именами моделей
|
||||||
|
|
||||||
def CheckName(self, name):
|
def CheckName(self, name):
|
||||||
"""
|
"""
|
||||||
Проверяет имя на уникальность в иерархии пользовательских моделей.
|
Проверяет имя на уникальность в иерархии пользовательских моделей.
|
||||||
@ -242,22 +310,7 @@ class MainFrame(forms.MainFrame):
|
|||||||
return name
|
return name
|
||||||
self.name_id += 1
|
self.name_id += 1
|
||||||
|
|
||||||
def BuildSpecs(self, model):
|
# Добавление новых моделей
|
||||||
"""
|
|
||||||
Выстраивает иерархию спецификаций для выбранной модели
|
|
||||||
"""
|
|
||||||
def DoItem(item, model):
|
|
||||||
sp.SetPyData(item, model)
|
|
||||||
for spec in model.GetSpecs():
|
|
||||||
child = sp.AppendItem(item, spec.GetTitle())
|
|
||||||
DoItem(child, spec)
|
|
||||||
|
|
||||||
sp = self.m_specs
|
|
||||||
sp.DeleteAllItems()
|
|
||||||
root = sp.AddRoot(model.GetTitle())
|
|
||||||
DoItem(root, model)
|
|
||||||
sp.ExpandAll()
|
|
||||||
sp.SortChildren(root)
|
|
||||||
|
|
||||||
def AddModelToRoot(self, model):
|
def AddModelToRoot(self, model):
|
||||||
"""
|
"""
|
||||||
@ -288,130 +341,6 @@ class MainFrame(forms.MainFrame):
|
|||||||
if root:
|
if root:
|
||||||
um.Expand(root)
|
um.Expand(root)
|
||||||
|
|
||||||
def NewProject(self, model):
|
|
||||||
"""
|
|
||||||
Начать новый проект:
|
|
||||||
1. Построить дерево спецификаций
|
|
||||||
2. Создать одну пользовательскую модель (по умолчанию)
|
|
||||||
3. Сделать заготовки для графиков/отчетов/прочего
|
|
||||||
"""
|
|
||||||
# Строим спецификации
|
|
||||||
self.BuildSpecs(model)
|
|
||||||
# Очищаем окно пользовательских моделей
|
|
||||||
# и создаем там одну
|
|
||||||
um = self.m_user_models
|
|
||||||
um.DeleteAllItems()
|
|
||||||
um.AddRoot('root')
|
|
||||||
self.AddModelToRoot(model)
|
|
||||||
# Создаем корневой элемент для окна с графиками
|
|
||||||
self.m_plots.AddRoot('root')
|
|
||||||
|
|
||||||
return True # Project(model)
|
|
||||||
|
|
||||||
def SelectUserModel(self, model_def):
|
|
||||||
|
|
||||||
def SelectProperty(param_type):
|
|
||||||
"""
|
|
||||||
По указанному имени типа возвращает "свойство" для списка "свойств"
|
|
||||||
|
|
||||||
Смотри руководство пользователя для того, чтобы получить полную
|
|
||||||
информацию о всех типах данных, используемых в Opal.
|
|
||||||
"""
|
|
||||||
if param_type == 'bool' or param_type == 'boolean':
|
|
||||||
return wxpg.BoolProperty
|
|
||||||
elif param_type == 'int':
|
|
||||||
return wxpg.IntProperty
|
|
||||||
elif param_type == 'float' or param_type == 'double':
|
|
||||||
return wxpg.FloatProperty
|
|
||||||
elif param_type == 'str' or param_type == 'string':
|
|
||||||
return wxpg.StringProperty
|
|
||||||
elif param_type == 'list':
|
|
||||||
return wxpg.ArrayStringProperty
|
|
||||||
else:
|
|
||||||
# очень плохо, если это произошло
|
|
||||||
raise KeyError()
|
|
||||||
|
|
||||||
msg = model_def.PackParams()
|
|
||||||
pg = self.m_params
|
|
||||||
pg.ClearPage(0)
|
|
||||||
for label, value in model_def.params.iteritems():
|
|
||||||
param = model_def.DD[label]
|
|
||||||
title = param.GetTitle()
|
|
||||||
prop = SelectProperty(param.GetType())
|
|
||||||
pid = pg.Append(prop(title, value = value))
|
|
||||||
pg.SetPropertyClientData(pid, label)
|
|
||||||
pg.SetPropertyHelpString(pid, param.GetComment())
|
|
||||||
|
|
||||||
self.SetStatusText(model_def.PackParams(), 0)
|
|
||||||
|
|
||||||
def ShowQuickResult(self, result):
|
|
||||||
if not result:
|
|
||||||
return
|
|
||||||
pg = self.m_quick_result
|
|
||||||
pg.ClearPage(0)
|
|
||||||
for label, param in result.data.iteritems():
|
|
||||||
pg.Append(wxpg.StringProperty(label, value = str(param.GetValue())))
|
|
||||||
pg.SetSplitterLeft()
|
|
||||||
|
|
||||||
def GetSelectedItem(self, source):
|
|
||||||
item = source.GetSelection()
|
|
||||||
if not item.IsOk():
|
|
||||||
raise ItemError('Invalid item')
|
|
||||||
return item
|
|
||||||
|
|
||||||
def GetSelectedData(self, source):
|
|
||||||
item = self.GetSelectedItem(source)
|
|
||||||
data = source.GetPyData(item)
|
|
||||||
if not data:
|
|
||||||
raise ItemError('Empty data')
|
|
||||||
return data
|
|
||||||
|
|
||||||
def GetSelectedItemData(self, source):
|
|
||||||
item = self.GetSelectedItem(source)
|
|
||||||
data = source.GetPyData(item)
|
|
||||||
if not data:
|
|
||||||
raise ItemError('Empty data')
|
|
||||||
return (item, data)
|
|
||||||
|
|
||||||
|
|
||||||
def OnModelActivated(self, event):
|
|
||||||
item = event.GetItem()
|
|
||||||
data = self.m_user_models.GetPyData(item)
|
|
||||||
if data:
|
|
||||||
self.SelectUserModel(data.mdef)
|
|
||||||
self.ShowQuickResult(data.res)
|
|
||||||
|
|
||||||
def OnParamChanging(self, event):
|
|
||||||
#value = event.GetValue()
|
|
||||||
#print repr(value)
|
|
||||||
#wx.MessageBox(value, 'changing')
|
|
||||||
#event.Veto()
|
|
||||||
pass
|
|
||||||
|
|
||||||
def OnParamChanged(self, event):
|
|
||||||
prop = event.GetProperty()
|
|
||||||
if not prop:
|
|
||||||
return
|
|
||||||
value = prop.GetValue()
|
|
||||||
param = prop.GetClientData()
|
|
||||||
item, data = self.GetSelectedItemData(self.m_user_models)
|
|
||||||
data.mdef[param] = value
|
|
||||||
self.m_user_models.SetItemImage(item, self.icons.mready)
|
|
||||||
|
|
||||||
def OnTest(self, event):
|
|
||||||
um = self.m_user_models
|
|
||||||
|
|
||||||
def OnNewModel(self, event):
|
|
||||||
self.do_nothing = True
|
|
||||||
f = SelectModelDialog(self, self.models)
|
|
||||||
if f.ShowModal() == wx.ID_OK:
|
|
||||||
model = f.GetSelectedModel()
|
|
||||||
if model:
|
|
||||||
print model.GetTitle()
|
|
||||||
else:
|
|
||||||
print 'Bad :('
|
|
||||||
self.do_nothing = False
|
|
||||||
|
|
||||||
def OnAddModelToRoot(self, event):
|
def OnAddModelToRoot(self, event):
|
||||||
model = self.GetSelectedData(self.m_specs)
|
model = self.GetSelectedData(self.m_specs)
|
||||||
self.AddModelToRoot(model)
|
self.AddModelToRoot(model)
|
||||||
@ -437,6 +366,103 @@ class MainFrame(forms.MainFrame):
|
|||||||
else:
|
else:
|
||||||
wx.MessageBox('It\'s impossible to append model', 'Error')
|
wx.MessageBox('It\'s impossible to append model', 'Error')
|
||||||
|
|
||||||
|
# Реакция на выбор модели
|
||||||
|
|
||||||
|
def SelectUserModel(self, model_def):
|
||||||
|
|
||||||
|
def SelectProperty(param_type):
|
||||||
|
"""
|
||||||
|
По указанному имени типа возвращает "свойство" для списка "свойств"
|
||||||
|
|
||||||
|
Смотри руководство пользователя для того, чтобы получить полную
|
||||||
|
информацию о всех типах данных, используемых в Opal.
|
||||||
|
"""
|
||||||
|
if param_type == 'bool' or param_type == 'boolean':
|
||||||
|
return wxpg.BoolProperty
|
||||||
|
elif param_type == 'int':
|
||||||
|
return wxpg.IntProperty
|
||||||
|
elif param_type == 'float' or param_type == 'double':
|
||||||
|
return wxpg.FloatProperty
|
||||||
|
elif param_type == 'str' or param_type == 'string':
|
||||||
|
return wxpg.StringProperty
|
||||||
|
elif param_type == 'list':
|
||||||
|
return wxpg.ArrayStringProperty
|
||||||
|
else:
|
||||||
|
# очень плохо, если это произошло
|
||||||
|
raise KeyError()
|
||||||
|
|
||||||
|
pg = self.m_params
|
||||||
|
pg.ClearPage(0)
|
||||||
|
for label, value in model_def.params.iteritems():
|
||||||
|
param = model_def.DD[label]
|
||||||
|
title = param.GetTitle()
|
||||||
|
prop = SelectProperty(param.GetType())
|
||||||
|
pid = pg.Append(prop(title, value = value))
|
||||||
|
pg.SetPropertyClientData(pid, label)
|
||||||
|
pg.SetPropertyHelpString(pid, param.GetComment())
|
||||||
|
|
||||||
|
def ShowQuickResult(self, result):
|
||||||
|
if not result:
|
||||||
|
return
|
||||||
|
pg = self.m_quick_result
|
||||||
|
pg.ClearPage(0)
|
||||||
|
for label, param in result.data.iteritems():
|
||||||
|
pg.Append(wxpg.StringProperty(label, value = str(param.GetValue())))
|
||||||
|
pg.SetSplitterLeft()
|
||||||
|
|
||||||
|
def OnModelActivated(self, event):
|
||||||
|
item = event.GetItem()
|
||||||
|
data = self.m_user_models.GetPyData(item)
|
||||||
|
if data:
|
||||||
|
self.SelectUserModel(data.mdef)
|
||||||
|
self.ShowQuickResult(data.res)
|
||||||
|
|
||||||
|
# Изменение параметров модели
|
||||||
|
|
||||||
|
def OnParamChanging(self, event):
|
||||||
|
#value = event.GetValue()
|
||||||
|
#print repr(value)
|
||||||
|
#wx.MessageBox(value, 'changing')
|
||||||
|
#event.Veto()
|
||||||
|
pass
|
||||||
|
|
||||||
|
def OnParamChanged(self, event):
|
||||||
|
prop = event.GetProperty()
|
||||||
|
if not prop:
|
||||||
|
return
|
||||||
|
value = prop.GetValue()
|
||||||
|
param = prop.GetClientData()
|
||||||
|
item, data = self.GetSelectedItemData(self.m_user_models)
|
||||||
|
data.mdef[param] = value
|
||||||
|
self.m_user_models.SetItemImage(item, self.icons.mready)
|
||||||
|
|
||||||
|
def OnTest(self, event):
|
||||||
|
um = self.m_user_models
|
||||||
|
|
||||||
|
# Получение данных выбранной модели
|
||||||
|
|
||||||
|
def GetSelectedItem(self, source):
|
||||||
|
item = source.GetSelection()
|
||||||
|
if not item.IsOk():
|
||||||
|
raise ItemError('Invalid item')
|
||||||
|
return item
|
||||||
|
|
||||||
|
def GetSelectedData(self, source):
|
||||||
|
item = self.GetSelectedItem(source)
|
||||||
|
data = source.GetPyData(item)
|
||||||
|
if not data:
|
||||||
|
raise ItemError('Empty data')
|
||||||
|
return data
|
||||||
|
|
||||||
|
def GetSelectedItemData(self, source):
|
||||||
|
item = self.GetSelectedItem(source)
|
||||||
|
data = source.GetPyData(item)
|
||||||
|
if not data:
|
||||||
|
raise ItemError('Empty data')
|
||||||
|
return (item, data)
|
||||||
|
|
||||||
|
# Дублирование модели
|
||||||
|
|
||||||
def OnDuplicate(self, event):
|
def OnDuplicate(self, event):
|
||||||
"""
|
"""
|
||||||
Обработчик события "дублирование модели"
|
Обработчик события "дублирование модели"
|
||||||
@ -458,17 +484,23 @@ class MainFrame(forms.MainFrame):
|
|||||||
def OnDuplicateTree(self, event):
|
def OnDuplicateTree(self, event):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# Удаление модели
|
||||||
|
|
||||||
def OnDeleteModel(self, event):
|
def OnDeleteModel(self, event):
|
||||||
item, data = self.GetSelectedItemData(self.m_user_models)
|
item, data = self.GetSelectedItemData(self.m_user_models)
|
||||||
self.server.DeleteJob(data.jid)
|
self.server.DeleteJob(data.jid)
|
||||||
self.m_user_models.Delete(item)
|
self.m_user_models.Delete(item)
|
||||||
|
|
||||||
|
# Функции запуска модели на выполнение и управления очередью
|
||||||
|
|
||||||
def OnModelProcess(self, event):
|
def OnModelProcess(self, event):
|
||||||
um = self.m_user_models
|
um = self.m_user_models
|
||||||
for i in um.GetSelections():
|
for i in um.GetSelections():
|
||||||
data = um.GetItemPyData(i)
|
data = um.GetItemPyData(i)
|
||||||
self.server.LaunchJob(data.jid, data.mdef)
|
self.server.LaunchJob(data.jid, data.mdef)
|
||||||
|
|
||||||
|
# Функции управления таблицами и отчетами
|
||||||
|
|
||||||
def OnShowResult(self, event):
|
def OnShowResult(self, event):
|
||||||
item, data = self.GetSelectedItemData(self.m_user_models)
|
item, data = self.GetSelectedItemData(self.m_user_models)
|
||||||
title = self.m_user_models.GetItemText(item)
|
title = self.m_user_models.GetItemText(item)
|
||||||
@ -476,6 +508,15 @@ class MainFrame(forms.MainFrame):
|
|||||||
rframe = ResultFrame(self, title, data.res)
|
rframe = ResultFrame(self, title, data.res)
|
||||||
rframe.Show()
|
rframe.Show()
|
||||||
|
|
||||||
|
# Функции управления графиками
|
||||||
|
|
||||||
|
def OnAddPlot(self, event):
|
||||||
|
root = self.m_plots.GetRootItem()
|
||||||
|
child = self.m_plots.AppendItem(root, 'New plot')
|
||||||
|
self.m_plots.SetPyData(child, 'plot')
|
||||||
|
self.m_plots.SetItemImage(child, self.icons.porg)
|
||||||
|
self.m_plots.SelectItem(child)
|
||||||
|
|
||||||
def GetLines(self, line_type):
|
def GetLines(self, line_type):
|
||||||
"""
|
"""
|
||||||
Возвращает набор линий, которые пользователь указал для
|
Возвращает набор линий, которые пользователь указал для
|
||||||
@ -507,30 +548,6 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
def ShowPlot(self, lines, plot_title = ''):
|
|
||||||
if lines:
|
|
||||||
p = PlotFrame(self, 'Plot', lines)
|
|
||||||
p.Show()
|
|
||||||
|
|
||||||
def OnQuickShowPlot(self, event):
|
|
||||||
lines = self.GetLines(LINE_CURVE)
|
|
||||||
um = self.m_user_models
|
|
||||||
item, data = self.GetSelectedItemData(um)
|
|
||||||
title = um.GetItemText(item)
|
|
||||||
for line in lines:
|
|
||||||
colx, coly = line.columns
|
|
||||||
title_x = data.res.columns[colx].GetTitle()
|
|
||||||
title_y = data.res.columns[coly].GetTitle()
|
|
||||||
line.title = "{}: {}({})".format(title, title_y, title_x)
|
|
||||||
self.ShowPlot(lines, title)
|
|
||||||
|
|
||||||
def OnAddPlot(self, event):
|
|
||||||
root = self.m_plots.GetRootItem()
|
|
||||||
child = self.m_plots.AppendItem(root, 'New plot')
|
|
||||||
self.m_plots.SetPyData(child, 'plot')
|
|
||||||
self.m_plots.SetItemImage(child, self.icons.porg)
|
|
||||||
self.m_plots.SelectItem(child)
|
|
||||||
|
|
||||||
def AddLines(self, line_type):
|
def AddLines(self, line_type):
|
||||||
item, data = self.GetSelectedItemData(self.m_plots)
|
item, data = self.GetSelectedItemData(self.m_plots)
|
||||||
if data != 'plot':
|
if data != 'plot':
|
||||||
@ -555,13 +572,28 @@ class MainFrame(forms.MainFrame):
|
|||||||
else:
|
else:
|
||||||
self.m_plots.SetItemImage(child, self.icons.pline)
|
self.m_plots.SetItemImage(child, self.icons.pline)
|
||||||
|
|
||||||
|
|
||||||
def OnAddCurves(self, event):
|
def OnAddCurves(self, event):
|
||||||
self.AddLines(LINE_CURVE)
|
self.AddLines(LINE_CURVE)
|
||||||
|
|
||||||
def OnAddMarkers(self, event):
|
def OnAddMarkers(self, event):
|
||||||
self.AddLines(LINE_MARKER)
|
self.AddLines(LINE_MARKER)
|
||||||
|
|
||||||
|
def ShowPlot(self, lines, plot_title = ''):
|
||||||
|
p = PlotFrame(self, 'Plot', lines)
|
||||||
|
p.Show()
|
||||||
|
|
||||||
|
def OnQuickShowPlot(self, event):
|
||||||
|
lines = self.GetLines(LINE_CURVE)
|
||||||
|
um = self.m_user_models
|
||||||
|
item, data = self.GetSelectedItemData(um)
|
||||||
|
title = um.GetItemText(item)
|
||||||
|
for line in lines:
|
||||||
|
colx, coly = line.columns
|
||||||
|
title_x = data.res.columns[colx].GetTitle()
|
||||||
|
title_y = data.res.columns[coly].GetTitle()
|
||||||
|
line.title = "{}: {}({})".format(title, title_y, title_x)
|
||||||
|
self.ShowPlot(lines, title)
|
||||||
|
|
||||||
def OnPlotProcess(self, event):
|
def OnPlotProcess(self, event):
|
||||||
item = self.m_plots.GetSelection()
|
item = self.m_plots.GetSelection()
|
||||||
data = self.m_plots.GetItemPyData(item)
|
data = self.m_plots.GetItemPyData(item)
|
||||||
@ -581,9 +613,6 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
self.ShowPlot(lines)
|
self.ShowPlot(lines)
|
||||||
|
|
||||||
def OnIdle(self, event):
|
|
||||||
pass
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Форма с выбором модели из представленного списка
|
# Форма с выбором модели из представленного списка
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user