now main window is managed by aui
This commit is contained in:
parent
fe4748ba2a
commit
c24a76d476
93
forms.py
93
forms.py
@ -5,6 +5,8 @@ import wx.gizmos
|
|||||||
import wx.grid
|
import wx.grid
|
||||||
import wx.propgrid as wxpg
|
import wx.propgrid as wxpg
|
||||||
import wx.lib.plot as wxplot
|
import wx.lib.plot as wxplot
|
||||||
|
import wx.lib.agw.aui as aui
|
||||||
|
# import wx.aui as aui
|
||||||
|
|
||||||
ID_NEW = wx.NewId()
|
ID_NEW = wx.NewId()
|
||||||
ID_SAVE = wx.NewId()
|
ID_SAVE = wx.NewId()
|
||||||
@ -55,27 +57,40 @@ class Icons:
|
|||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class PropertyCtrl(wxpg.PropertyGrid):
|
||||||
|
|
||||||
|
def GetPosition(self):
|
||||||
|
return self.GetPanel().GetPosition()
|
||||||
|
|
||||||
|
def Clear(self):
|
||||||
|
wxpg.PropertyGrid.Clear(self)
|
||||||
|
|
||||||
class MainFrame(wx.Frame):
|
class MainFrame(wx.Frame):
|
||||||
def __init__(self, parent):
|
def __init__(self, parent):
|
||||||
wx.Frame.__init__ (self, parent, title = 'Opal', size = wx.Size(873,594))
|
wx.Frame.__init__ (self, parent, title = 'Opal', size = wx.Size(873,594))
|
||||||
|
|
||||||
|
self.auimgr = aui.AuiManager()
|
||||||
|
self.auimgr.SetManagedWindow(self)
|
||||||
|
self.auimgr.GetArtProvider().SetMetric(aui.AUI_DOCKART_SASH_SIZE, 3)
|
||||||
|
|
||||||
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
|
self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)
|
||||||
|
|
||||||
self.ilist, self.icons = self.LoadIcons()
|
self.ilist, self.icons = self.LoadIcons()
|
||||||
|
|
||||||
bSizer3 = wx.BoxSizer(wx.HORIZONTAL)
|
# Спецификации
|
||||||
|
|
||||||
self.m_specs = wx.TreeCtrl(self, style = wx.TR_DEFAULT_STYLE)
|
self.m_specs = wx.TreeCtrl(self, size = (200, -1), style = wx.TR_DEFAULT_STYLE)
|
||||||
self.m_specs.SetMinSize(wx.Size(200,-1))
|
# self.m_specs.SetMinSize(wx.Size(200,-1))
|
||||||
|
|
||||||
bSizer3.Add(self.m_specs, 0, wx.ALL|wx.EXPAND, 1)
|
self.auimgr.AddPane(self.m_specs,
|
||||||
|
aui.AuiPaneInfo().Name("m_specs").Caption("Templates").
|
||||||
|
Left().Layer(1).CloseButton(False))
|
||||||
|
|
||||||
bSizer4 = wx.BoxSizer(wx.VERTICAL)
|
# Пользовательские модели
|
||||||
|
|
||||||
self.m_user_models = TreeListCtrl(self,
|
self.m_user_models = TreeListCtrl(self, size = (200, -1),
|
||||||
style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT
|
style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT
|
||||||
| wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_ROW_LINES | wx.TR_MULTIPLE)
|
| wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_ROW_LINES | wx.TR_MULTIPLE)
|
||||||
self.m_user_models.SetMinSize(wx.Size(-1, 300))
|
|
||||||
self.m_user_models.AddColumn("Model name")
|
self.m_user_models.AddColumn("Model name")
|
||||||
self.m_user_models.AddColumn("Status")
|
self.m_user_models.AddColumn("Status")
|
||||||
self.m_user_models.AddColumn("Progress")
|
self.m_user_models.AddColumn("Progress")
|
||||||
@ -83,42 +98,49 @@ class MainFrame (wx.Frame):
|
|||||||
self.m_user_models.SetMainColumn(0)
|
self.m_user_models.SetMainColumn(0)
|
||||||
self.m_user_models.SetImageList(self.ilist)
|
self.m_user_models.SetImageList(self.ilist)
|
||||||
|
|
||||||
bSizer4.Add(self.m_user_models, 0, wx.ALL | wx.EXPAND, 1)
|
self.auimgr.AddPane(self.m_user_models,
|
||||||
|
aui.AuiPaneInfo().Name("m_user_models").Caption("Models").
|
||||||
|
CenterPane().Position(1))
|
||||||
|
|
||||||
# WARNING: wxPython code generation isn't supported for this widget yet.
|
# Параметры модели
|
||||||
self.m_params = wxpg.PropertyGridManager(self)
|
|
||||||
self.m_params.AddPage('fp')
|
|
||||||
bSizer4.Add(self.m_params, 1, wx.EXPAND | wx.ALL, 1)
|
|
||||||
|
|
||||||
bSizer3.Add(bSizer4, 1, wx.EXPAND, 5)
|
self.m_params = PropertyCtrl(self, size = (-1, 300))
|
||||||
|
|
||||||
bSizer5 = wx.BoxSizer(wx.VERTICAL)
|
self.auimgr.AddPane(self.m_params,
|
||||||
|
aui.AuiPaneInfo().Name("m_params").Caption("Parameters").CloseButton(False).
|
||||||
|
CenterPane().Bottom().Position(2))
|
||||||
|
|
||||||
self.m_quick_result = wxpg.PropertyGridManager(self)
|
# Быстрые результаты
|
||||||
self.m_quick_result.AddPage('fp')
|
|
||||||
self.m_quick_result.SetMinSize(wx.Size(200, -1))
|
|
||||||
bSizer5.Add(self.m_quick_result, 1, wx.EXPAND | wx.ALL, 1)
|
|
||||||
|
|
||||||
self.m_plots = wx.TreeCtrl(self,
|
self.m_quick_result = PropertyCtrl(self, size = (200, -1))
|
||||||
|
|
||||||
|
self.auimgr.AddPane(self.m_quick_result,
|
||||||
|
aui.AuiPaneInfo().Name("m_quick_result").Caption("Quick results").CloseButton(False).
|
||||||
|
Right().Position(1).Layer(1))
|
||||||
|
|
||||||
|
# Графики
|
||||||
|
|
||||||
|
self.m_plots = wx.TreeCtrl(self, size = (200, -1),
|
||||||
style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS)
|
style = wx.TR_DEFAULT_STYLE | wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS)
|
||||||
bSizer5.Add(self.m_plots, 1, wx.EXPAND | wx.ALL, 1)
|
|
||||||
self.m_plots.SetImageList(self.ilist)
|
self.m_plots.SetImageList(self.ilist)
|
||||||
|
|
||||||
bSizer3.Add(bSizer5, 0, wx.ALL | wx.EXPAND, 1)
|
self.auimgr.AddPane(self.m_plots,
|
||||||
|
aui.AuiPaneInfo().Name("m_plots").Caption("Plots").CloseButton(False).
|
||||||
|
Right().Position(2).Layer(1))
|
||||||
|
|
||||||
|
# Меню, панель инструментов и панель статуса
|
||||||
|
|
||||||
sbar = wx.StatusBar(self)
|
sbar = wx.StatusBar(self)
|
||||||
self.SetStatusBar(sbar)
|
self.SetStatusBar(sbar)
|
||||||
|
|
||||||
mbar = self.BuildMenu()
|
self.SetMenuBar(self.BuildMenu())
|
||||||
self.SetMenuBar(mbar)
|
|
||||||
self.BuildContextMenu()
|
self.BuildContextMenu()
|
||||||
|
|
||||||
# tbar = self.BuildToolBar()
|
# tbar = self.BuildToolBar()
|
||||||
# self.SetToolBar(tbar)
|
# self.SetToolBar(tbar)
|
||||||
|
|
||||||
self.SetSizer(bSizer3)
|
self.auimgr.Update()
|
||||||
self.Layout()
|
|
||||||
self.Centre(wx.BOTH)
|
|
||||||
|
|
||||||
def LoadIcons(self):
|
def LoadIcons(self):
|
||||||
icons = Icons()
|
icons = Icons()
|
||||||
@ -217,8 +239,8 @@ class ResultFrame(wx.Frame):
|
|||||||
|
|
||||||
sizer = wx.BoxSizer(wx.VERTICAL)
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
||||||
|
|
||||||
self.scalar = wxpg.PropertyGridManager(self)
|
self.scalar = PropertyCtrl(self)
|
||||||
self.scalar.AddPage('fp')
|
self.scalar.SetMinSize((-1, 200))
|
||||||
|
|
||||||
self.table = wx.grid.Grid(self)
|
self.table = wx.grid.Grid(self)
|
||||||
self.table.SetDefaultCellAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
|
self.table.SetDefaultCellAlignment(wx.ALIGN_CENTER, wx.ALIGN_CENTER)
|
||||||
@ -226,10 +248,23 @@ class ResultFrame(wx.Frame):
|
|||||||
sizer.Add(self.scalar, 0, wx.EXPAND | wx.ALL, 1)
|
sizer.Add(self.scalar, 0, wx.EXPAND | wx.ALL, 1)
|
||||||
sizer.Add(self.table, 1, wx.EXPAND | wx.ALL, 1)
|
sizer.Add(self.table, 1, wx.EXPAND | wx.ALL, 1)
|
||||||
|
|
||||||
|
self.SetMenuBar(self.BuildMenu())
|
||||||
|
|
||||||
self.SetSizer(sizer)
|
self.SetSizer(sizer)
|
||||||
self.Layout()
|
self.Layout()
|
||||||
self.Centre(wx.BOTH)
|
self.Centre(wx.BOTH)
|
||||||
|
|
||||||
|
def BuildMenu(self):
|
||||||
|
|
||||||
|
menubar = wx.MenuBar()
|
||||||
|
|
||||||
|
menu = wx.Menu()
|
||||||
|
menu.Append(wx.NewId(), 'CSV\tCtrl+E')
|
||||||
|
menu.Append(wx.NewId(), 'TeX')
|
||||||
|
menubar.Append(menu, 'Export to')
|
||||||
|
|
||||||
|
return menubar
|
||||||
|
|
||||||
class LineSelectDialog(wx.Dialog):
|
class LineSelectDialog(wx.Dialog):
|
||||||
def __init__(self, parent, title):
|
def __init__(self, parent, title):
|
||||||
wx.Dialog.__init__ (self, parent, -1, title, size = wx.Size(400, 300))
|
wx.Dialog.__init__ (self, parent, -1, title, size = wx.Size(400, 300))
|
||||||
@ -262,3 +297,5 @@ class PlotFrame(wx.Frame):
|
|||||||
self.plot.SetEnableAntiAliasing(True)
|
self.plot.SetEnableAntiAliasing(True)
|
||||||
self.plot.SetEnableHiRes(True)
|
self.plot.SetEnableHiRes(True)
|
||||||
self.plot.SetEnableLegend(True)
|
self.plot.SetEnableLegend(True)
|
||||||
|
|
||||||
|
self.Centre(wx.BOTH)
|
||||||
|
39
opal.py
39
opal.py
@ -40,7 +40,6 @@ class ModelData:
|
|||||||
|
|
||||||
self.res = None
|
self.res = None
|
||||||
|
|
||||||
|
|
||||||
LINE_CURVE = 1
|
LINE_CURVE = 1
|
||||||
LINE_MARKER = 2
|
LINE_MARKER = 2
|
||||||
LINE_HISTOGRAM = 3
|
LINE_HISTOGRAM = 3
|
||||||
@ -87,6 +86,8 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED,
|
self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED,
|
||||||
self.OnModelActivated)
|
self.OnModelActivated)
|
||||||
|
self.m_user_models.Bind(wx.EVT_TREE_DELETE_ITEM,
|
||||||
|
self.OnDeleteModelsItem)
|
||||||
self.m_params.Bind(wxpg.EVT_PG_CHANGING,
|
self.m_params.Bind(wxpg.EVT_PG_CHANGING,
|
||||||
self.OnParamChanging)
|
self.OnParamChanging)
|
||||||
self.m_params.Bind(wxpg.EVT_PG_CHANGED,
|
self.m_params.Bind(wxpg.EVT_PG_CHANGED,
|
||||||
@ -97,7 +98,8 @@ class MainFrame(forms.MainFrame):
|
|||||||
self.OnModelProcess)
|
self.OnModelProcess)
|
||||||
self.m_plots.Bind(wx.EVT_TREE_ITEM_ACTIVATED,
|
self.m_plots.Bind(wx.EVT_TREE_ITEM_ACTIVATED,
|
||||||
self.OnPlotProcess)
|
self.OnPlotProcess)
|
||||||
|
self.m_plots.Bind(wx.EVT_CHAR,
|
||||||
|
self.OnPlotsKeyPressed)
|
||||||
|
|
||||||
# События меню
|
# События меню
|
||||||
|
|
||||||
@ -253,8 +255,8 @@ class MainFrame(forms.MainFrame):
|
|||||||
"""
|
"""
|
||||||
self.m_specs.DeleteAllItems()
|
self.m_specs.DeleteAllItems()
|
||||||
self.m_user_models.DeleteAllItems()
|
self.m_user_models.DeleteAllItems()
|
||||||
self.m_params.ClearPage(0)
|
self.m_params.Clear()
|
||||||
self.m_quick_result.ClearPage(0)
|
self.m_quick_result.Clear()
|
||||||
self.m_plots.DeleteAllItems()
|
self.m_plots.DeleteAllItems()
|
||||||
# Строим спецификации
|
# Строим спецификации
|
||||||
self.BuildSpecs(model)
|
self.BuildSpecs(model)
|
||||||
@ -392,7 +394,7 @@ class MainFrame(forms.MainFrame):
|
|||||||
raise KeyError()
|
raise KeyError()
|
||||||
|
|
||||||
pg = self.m_params
|
pg = self.m_params
|
||||||
pg.ClearPage(0)
|
pg.Clear()
|
||||||
for label, value in model_def.params.iteritems():
|
for label, value in model_def.params.iteritems():
|
||||||
param = model_def.DD[label]
|
param = model_def.DD[label]
|
||||||
title = param.GetTitle()
|
title = param.GetTitle()
|
||||||
@ -405,7 +407,7 @@ class MainFrame(forms.MainFrame):
|
|||||||
if not result:
|
if not result:
|
||||||
return
|
return
|
||||||
pg = self.m_quick_result
|
pg = self.m_quick_result
|
||||||
pg.ClearPage(0)
|
pg.Clear()
|
||||||
for label, param in result.data.iteritems():
|
for label, param in result.data.iteritems():
|
||||||
pg.Append(wxpg.StringProperty(label, value = str(param.GetValue())))
|
pg.Append(wxpg.StringProperty(label, value = str(param.GetValue())))
|
||||||
pg.SetSplitterLeft()
|
pg.SetSplitterLeft()
|
||||||
@ -486,9 +488,14 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
# Удаление модели
|
# Удаление модели
|
||||||
|
|
||||||
def OnDeleteModel(self, event):
|
def OnDeleteModelsItem(self, event):
|
||||||
item, data = self.GetSelectedItemData(self.m_user_models)
|
item = event.GetItem()
|
||||||
|
data = self.m_user_models.GetPyData(item)
|
||||||
|
if data:
|
||||||
self.server.DeleteJob(data.jid)
|
self.server.DeleteJob(data.jid)
|
||||||
|
|
||||||
|
def OnDeleteModel(self, event):
|
||||||
|
item = self.GetSelectedItem(self.m_user_models)
|
||||||
self.m_user_models.Delete(item)
|
self.m_user_models.Delete(item)
|
||||||
|
|
||||||
# Функции запуска модели на выполнение и управления очередью
|
# Функции запуска модели на выполнение и управления очередью
|
||||||
@ -528,7 +535,7 @@ class MainFrame(forms.MainFrame):
|
|||||||
item, data = self.GetSelectedItemData(um)
|
item, data = self.GetSelectedItemData(um)
|
||||||
title = um.GetItemText(item)
|
title = um.GetItemText(item)
|
||||||
if not data.res:
|
if not data.res:
|
||||||
self.SetStatusText("There is no results in model")
|
wx.MessageBox('There is no any result data', 'Warning', wx.OK | wx.ICON_EXCLAMATION)
|
||||||
return []
|
return []
|
||||||
f = LineSelectDialog(self, 'Select lines for "{}"'.format(title))
|
f = LineSelectDialog(self, 'Select lines for "{}"'.format(title))
|
||||||
for index, col in enumerate(data.res.columns):
|
for index, col in enumerate(data.res.columns):
|
||||||
@ -579,6 +586,7 @@ class MainFrame(forms.MainFrame):
|
|||||||
self.AddLines(LINE_MARKER)
|
self.AddLines(LINE_MARKER)
|
||||||
|
|
||||||
def ShowPlot(self, lines, plot_title = ''):
|
def ShowPlot(self, lines, plot_title = ''):
|
||||||
|
if lines:
|
||||||
p = PlotFrame(self, 'Plot', lines)
|
p = PlotFrame(self, 'Plot', lines)
|
||||||
p.Show()
|
p.Show()
|
||||||
|
|
||||||
@ -613,6 +621,13 @@ class MainFrame(forms.MainFrame):
|
|||||||
|
|
||||||
self.ShowPlot(lines)
|
self.ShowPlot(lines)
|
||||||
|
|
||||||
|
def OnPlotsKeyPressed(self, event):
|
||||||
|
keycode = event.GetKeyCode()
|
||||||
|
item = self.GetSelectedItem(self.m_plots)
|
||||||
|
if keycode == wx.WXK_DELETE:
|
||||||
|
self.m_plots.Delete(item)
|
||||||
|
event.Skip()
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Форма с выбором модели из представленного списка
|
# Форма с выбором модели из представленного списка
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
@ -653,7 +668,7 @@ class ResultFrame(forms.ResultFrame):
|
|||||||
self.UpdateResults()
|
self.UpdateResults()
|
||||||
|
|
||||||
def UpdateResults(self):
|
def UpdateResults(self):
|
||||||
self.scalar.ClearPage(0)
|
self.scalar.Clear()
|
||||||
self.table.ClearGrid()
|
self.table.ClearGrid()
|
||||||
if not self.result:
|
if not self.result:
|
||||||
return
|
return
|
||||||
@ -681,6 +696,9 @@ class ResultFrame(forms.ResultFrame):
|
|||||||
pg.Append(wxpg.StringProperty(label,
|
pg.Append(wxpg.StringProperty(label,
|
||||||
value = str(param.GetValue())))
|
value = str(param.GetValue())))
|
||||||
|
|
||||||
|
def OnExportToCSV(self, event):
|
||||||
|
pass
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Форма с выбором наборов значений для построения графика
|
# Форма с выбором наборов значений для построения графика
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
@ -723,7 +741,6 @@ class LineSelectDialog(forms.LineSelectDialog):
|
|||||||
|
|
||||||
return [ (x, y) for y in ys ]
|
return [ (x, y) for y in ys ]
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# Форма с изображением графика
|
# Форма с изображением графика
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user