From a70374449c168ad84ce455ed39e4341d84858b5c Mon Sep 17 00:00:00 2001 From: anwinged Date: Fri, 4 May 2012 18:34:03 +0000 Subject: [PATCH] plot and duplications fixes --- trunk/forms.py | 26 ++++++++++++++++++++++++-- trunk/opal.py | 8 ++++---- trunk/plot.png | Bin 15348 -> 0 bytes trunk/server.py | 4 +--- trunk/share/cursor-closedhand.png | Bin 0 -> 147 bytes trunk/share/cursor-openhand.png | Bin 0 -> 928 bytes trunk/share/model-dup-tree.png | Bin 0 -> 535 bytes 7 files changed, 29 insertions(+), 9 deletions(-) delete mode 100644 trunk/plot.png create mode 100644 trunk/share/cursor-closedhand.png create mode 100644 trunk/share/cursor-openhand.png create mode 100644 trunk/share/model-dup-tree.png diff --git a/trunk/forms.py b/trunk/forms.py index 7ef7001..02a70a7 100644 --- a/trunk/forms.py +++ b/trunk/forms.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- -import sys import wx import wx.gizmos import wx.grid @@ -230,9 +229,10 @@ class MainFrame(wx.Frame): tb1.AddSimpleTool(ID_ADD_MODEL_SELECTED, "model-new", wx.Bitmap('share/model-add.png'), 'Add spacification to selected model') - tb1.AddSeparator() tb1.AddSimpleTool(ID_DUPLICATE_MODEL, "model-dup", wx.Bitmap('share/model-dup.png'), 'Duplicate selected model') + tb1.AddSimpleTool(ID_DUPLICATE_TREE, "model-dup-tree", wx.Bitmap('share/model-dup-tree.png'), + 'Duplicate selected model and all submodels') tb1.AddSimpleTool(ID_DELETE_MODEL, "model-del", wx.Bitmap('share/model-delete.png'), 'Delete selected model') tb1.AddSeparator() @@ -352,16 +352,29 @@ class SizeSelector(wx.Dialog): def GetValues(self): return self.width.GetValue(), self.height.GetValue() +HandCursorImage = wx.Image('share/cursor-openhand.png') +GrabHandCursorImage = wx.Image('share/cursor-closedhand.png') + class PlotFrame(wx.Frame): def __init__(self, parent, title): wx.Frame.__init__ (self, parent, -1, title, size = wx.Size(600, 400)) self.plot = wxplot.PlotCanvas(self) + + # стандартные курсоры компонента настолько монстроуозные, + # что их просто необходимо заменить на что-нибудь приличное + self.plot.canvas.SetCursor(wx.STANDARD_CURSOR) + self.plot.HandCursor = wx.CursorFromImage(HandCursorImage) + self.plot.GrabHandCursor = wx.CursorFromImage(GrabHandCursorImage) + # все равно не используется + # self.plot.MagCursor = wx.StockCursor(wx.CURSOR_MAGNIFIER) + self.plot.SetGridColour(wx.Color(200, 200, 200)) self.plot.SetEnableGrid(True) self.plot.SetEnableAntiAliasing(True) self.plot.SetEnableHiRes(True) self.plot.SetEnableLegend(True) + self.plot.SetEnableDrag(True) self.Centre(wx.BOTH) @@ -371,6 +384,15 @@ class PlotFrame(wx.Frame): menubar.Append(menu, 'Plot') self.SetMenuBar(menubar) + self.plot.Bind(wx.EVT_MOUSEWHEEL, self.OnZoom) + + def OnZoom(self, event): + x = event.GetX() + y = event.GetY() + r = event.GetWheelRotation() + x, y = self.plot.PositionScreenToUser((x, y)) + delta = 0.8/1.0 if r > 0 else 1.0/0.8 + self.plot.Zoom((x, y), (delta, delta)) class AboutDialog(wx.Dialog): def __init__(self, parent): diff --git a/trunk/opal.py b/trunk/opal.py index 6b0ca5a..73522e2 100644 --- a/trunk/opal.py +++ b/trunk/opal.py @@ -18,8 +18,6 @@ import wx.propgrid as wxpg import wx.lib.plot as wxplot import forms import time -import datetime -import os import threading import re from wx.lib.embeddedimage import PyEmbeddedImage @@ -85,7 +83,7 @@ class MainFrame(forms.MainFrame): # События компонентов self.m_user_models.Bind(wx.EVT_TREE_SEL_CHANGED, - self.OnModelActivated) + self.OnModelSelected) self.m_user_models.Bind(wx.EVT_TREE_DELETE_ITEM, self.OnDeleteModelsItem) self.m_params.Bind(wxpg.EVT_PG_CHANGING, @@ -441,7 +439,7 @@ class MainFrame(forms.MainFrame): pg.Append(wxpg.StringProperty(label, value = str(param.GetValue()))) pg.SetSplitterLeft() - def OnModelActivated(self, event): + def OnModelSelected(self, event): item = event.GetItem() data = self.m_user_models.GetPyData(item) if data: @@ -474,6 +472,8 @@ class MainFrame(forms.MainFrame): param = prop.GetClientData() item, data = self.GetSelectedItemData(um) data.mdef[param] = value + # так как значение параметра изменилось, + # то все субмодели должны быть пересчитаны Walk(item) diff --git a/trunk/plot.png b/trunk/plot.png deleted file mode 100644 index 416591ca78608821ab17aae0c17ba2bf43d90b85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15348 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 bzjw*Z4&ND56jzOe?T5(8DBsAvhWGp*BXtsi diff --git a/trunk/server.py b/trunk/server.py index 8b7c255..a16f73b 100644 --- a/trunk/server.py +++ b/trunk/server.py @@ -12,13 +12,11 @@ # -*- coding: UTF-8 -*- import os -import sys import json import time import datetime import threading import subprocess -import logging import task @@ -327,7 +325,7 @@ class Job: #------------------------------------------------------------------------------- -import time, random +import random from pprint import pprint def main(): diff --git a/trunk/share/cursor-closedhand.png b/trunk/share/cursor-closedhand.png new file mode 100644 index 0000000000000000000000000000000000000000..b78dd1dac5a827fa698f1993718f22c282019505 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6I14-?iy0WWJ3*My{N(AiKtWee z7sn8d^J_1j=3-FbaJl&N|NMQrDg{-+lDl3uEOL6iyxxIhJsV5IbqBU04WsP|EmPEI sG+%tqc!TF=!@MiLH_pW!e7ccq3Qxekuk)up2O7xW>FVdQ&MBb@057mJumAu6 literal 0 HcmV?d00001 diff --git a/trunk/share/cursor-openhand.png b/trunk/share/cursor-openhand.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b9078a6cde3e20eb6a30d92a3c8ab62f02d294 GIT binary patch literal 928 zcmV;R17G}!P)6ciK{6%`g178e&67#J8C85tTH8XFrM92^`S9UUGX9v>ecARr(iAt53nA|oRs zBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7EiEoCE-x=HFfcGNF)=bSGBYzXG&D3d zH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}?K0iM{KtMo2K|w-7LPJACL_|bIMMXwN zMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuyP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7 zSXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?WjVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@ zX=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2Ta&vQYbaZreb#-=jc6WDoczAeud3kzz zdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyDgoK2Jg@uNOhKGlTh=_=ZiHVAeii?Yj zjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z}m6ev3mY0{8n3$NEnVFiJnwy)OoSdAU zot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5(rl+T;sHmu^si~@}s;jH3tgNi9t*x%E zuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#pxVX5vxw*Q!y1To(yu7@dCU$jHda$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD) z(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa z^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg={r&#_{{R2~IYDF%00001bW%=J06^y0 zW&i*HPDw;TRCwBD&H)ai^$7Rtv~*1QR(T0*iooT~y$)Wio;a9;W{Qt|w8+ z*90bVq(YDrDg?VzHHV_x0Yh%!X8G-eBe{A@!zW%M)+rU789b)|00002T?Dsw(ZNx0Q=CPR>LM;8{u?eT7DUiRClSF>2RG-UwzMH6z4Kk#w3R06 zgK){+z3+bSeHWH2UR}ln&nqbW7MwBEU0F)U%tH6P(8&jdSxCyKJ)yy9L2!nhi-){a z$`@-3G?c_}ybo)qPjH=TxPT_$943j-IjWmPG$b&R=!b1raI&({K9Pl%K?w%`K_WbQ znHv*u8w!@-*gSuR=hh;7Vdx|hp^}yD$&!$=xj^~&v>iB34adv#G^4;GWf%++*}Z(s zi}oBTY|M^g>r5gOGqHX9PK`s4i1x~(LywlmX_V*)sHTmQgs4H7$_x^2uQPg^rcDo+ zB%mOAtfQ_jPQ>WR;;(RtL}+VT-RUq=yuQ3ZMO+L<7}GN|&`t=iR=FSAzs~iUM#ppt zE18UJBkQ`gqI$HtPGc&yclFdXoBP9HA`TfLzykpqME3CJO@Drr%RY(GB1u`6->fhj zf@*bzBA^aPtYVAA5HS8|qDgmw5y20SiR6yOlR1~%kSglWY$mIE