Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 77 additions & 57 deletions Container.py
Original file line number Diff line number Diff line change
Expand Up @@ -1867,6 +1867,13 @@ def GetNodeLists(self, source, target):

return (sourceNodeList, targetNodeList)

def GetBlockModel(self):
""" Return the generator of block model (not ConnectionShape)
"""
for m in self.diagram.shapes:
if not isinstance(m, ConnectionShape):
yield m

def OnConnectTo(self, event):
"""
"""
Expand All @@ -1881,7 +1888,7 @@ def OnConnectTo(self, event):
sourceName = source.label

# get target model from its name
for s in [m for m in self.diagram.shapes if not isinstance(m, ConnectionShape)]:
for s in self.GetBlockModel():
if s.label == targetName:
target = s
break
Expand Down Expand Up @@ -1983,8 +1990,8 @@ def OnConnect(self, event):
except:
pass
else:
sn = self.sourceNodeList[sp]
tn = self.targetNodeList[tp]
sn = self.sourceNodeList[sp-1]
tn = self.targetNodeList[tp-1]
self.makeConnectionShape(sn,tn)

modify_flag = True
Expand Down Expand Up @@ -2207,6 +2214,17 @@ def OnPaste(self, event):
newShape.x[1] += 35
newShape.y[0] += 35
newShape.y[1] += 35

#rename new model with number
if re.match(r'^([A-Za-z_])+([0-9]+)', newShape.label):
number_part = re.findall(r'\d+', newShape.label)[-1]

### increment the number
newShape.label = re.sub(r'([0-9]+)', str(int(number_part)+1), newShape.label)
### label has not number and we add it
else:
newShape.label = ''.join([newShape.label,'_1'])

### adding model
self.AddShape(newShape)

Expand All @@ -2218,7 +2236,7 @@ def OnPaste(self, event):

# specify the operation in status bar
printOnStatusBar(self.GetTopLevelParent().statusbar, {0:_('Paste'), 1:''})

def OnCut(self, event):
""" Cut menu has been clicked. Copy and delete event.
"""
Expand Down Expand Up @@ -2580,16 +2598,16 @@ def DiagramModified(self):

D = {label : win}

#nb.SetPageText(nb.GetSelection(), "*%s"%label.replace('*',''))
# nb2.SetPageText(nb2.GetSelection(), "%s*"%label)

### statusbar printing
for string,win in list(D.items()):
printOnStatusBar(win.statusbar, {0:"%s %s"%(string ,_("modified")), 1:os.path.basename(diagram.last_name_saved), 2:''})
printOnStatusBar(win.statusbar, {0:"%s %s"%(string.replace('*','') ,_("modified")), 1:diagram.last_name_saved, 2:''})

tb = win.GetToolBar()
tb.EnableTool(Menu.ID_SAVE, self.diagram.modify)

def ShowQuickAttributeEditor(self):
def ShowQuickAttributeEditor(self, selectedShape:list)->None:
"""
"""

Expand All @@ -2610,7 +2628,7 @@ def ShowQuickAttributeEditor(self):
xwindow, ywindow = wx.GetMousePosition()
xm,ym = self.ScreenToClient(wx.Point(xwindow, ywindow))

for s in {m for m in self.diagram.GetShapeList() if isinstance(m, Block) and self.isSelected(m)}:
for s in {m for m in selectedShape if isinstance(m, Block)}:
x = s.x[0]*self.scalex
y = s.y[0]*self.scaley
w = s.x[1]*self.scalex-x
Expand Down Expand Up @@ -2639,11 +2657,11 @@ def OnMotion(self, event):
### current cursor
cursor = self.GetCursor()

sc = self.getSelectedShapes()

if event.Dragging() and event.LeftIsDown():

self.diagram.modify = False

sc = self.getSelectedShapes()

if len(sc) == 0:
# User is dragging the mouse, check if
Expand Down Expand Up @@ -2732,7 +2750,10 @@ def OnMotion(self, event):

### update the cursor
self.SetCursor(cursor)
self.ShowQuickAttributeEditor()

if len(sc) != 0:
### show the quick attribut editor
self.ShowQuickAttributeEditor(sc)

#self.DiagramModified()

Expand Down Expand Up @@ -2842,7 +2863,18 @@ def select(self, item=None):
### display the label of output ports if exist
for n in range(item.output):
self.nodes.append(ONode(item, n, self, item.getOutputLabel(n)))


### display the label of port attahced to the connection shape (make more easy the correspondance of the link)
if isinstance(item, ConnectionShape):
if item.input:
block, n = item.input
self.nodes.append(ONode(block, n, self, block.getInputLabel(n)))

if item.output:
block, n = item.output
self.nodes.append(INode(block, n, self, block.getInputLabel(n)))
# print(item.input, item.output)

if isinstance(item, Resizeable):
self.nodes.extend([ResizeableNode(item, n, self) for n in range(len(item.x))])

Expand Down Expand Up @@ -4193,6 +4225,30 @@ def OnLeftDown(self, event):
self.cf.deselect(self.item)
event.Skip()

def OnEditLabel(self, event):
""" Function called by the OnRightDown call event function.
"""
### old label
old_label = self.label

### is INode ?
isINode = isinstance(self, INode)

### ask tne new label
d = wx.TextEntryDialog(None, _('New label for the %s port %d:'%("input" if isINode else "output",self.index)), value = old_label, style=wx.OK)
d.ShowModal()

### new label
new_label = d.GetValue()

### only if new and old label are different
if new_label != old_label:
self.label = new_label
if isINode:
self.item.addInputLabels(self.index, self.label)
else:
self.item.addOutputLabels(self.index, self.label)

def HitTest(self,x,y):
""" Collision detection method.
"""
Expand Down Expand Up @@ -4244,24 +4300,6 @@ def OnRightDown(self, event):

event.Skip()

def OnEditLabel(self, event):
""" Function called by the OnRightDown call event function.
"""
### old label
old_label = self.label

### ask tne new label
d = wx.TextEntryDialog(None, _('New input port label:'), value = old_label, style=wx.OK)
d.ShowModal()

### new label
new_label = d.GetValue()

### only if new and old label are different
if new_label != old_label:
self.label = new_label
self.item.addInputLabels(self.index, self.label)

def leftUp(self, items):
""" Left up action has been invocked.
"""
Expand Down Expand Up @@ -4295,11 +4333,11 @@ def draw(self, dc):
if not isinstance(self.item, Port):
### prepare label position
if self.item.input_direction == 'ouest':
xl = x-30
yl = y
xl = x-self.graphic.r-8*len(self.label)
yl = y-8
elif self.item.input_direction == 'est':
xl = x+2
yl = y
xl = x+6
yl = y-8
elif self.item.input_direction == 'nord':
xl = x
yl = y-18
Expand Down Expand Up @@ -4349,24 +4387,6 @@ def OnRightDown(self, event):

event.Skip()

def OnEditLabel(self, event):
""" Function called by the OnRightDown call event function.
"""
### old label
old_label = self.label

### ask tne new label
d = wx.TextEntryDialog(None, _('New output port label:'), value = old_label, style=wx.OK)
d.ShowModal()

### new label
new_label = d.GetValue()

### only if new and old label are different
if new_label != old_label:
self.label = new_label
self.item.addOutputLabels(self.index, self.label)

def leftUp(self, items):
""" Left up action has been invocked.
"""
Expand Down Expand Up @@ -4398,11 +4418,11 @@ def draw(self, dc):
if not isinstance(self.item, Port):
### perapre label position
if self.item.output_direction == 'est':
xl = x+2
yl = y
xl = x+6
yl = y-8
elif self.item.output_direction == 'ouest':
xl = x-40
yl = y
xl = x-self.graphic.r-8*len(self.label)
yl = y-8
elif self.item.output_direction == 'nord':
xl = x
yl = y-20
Expand Down Expand Up @@ -4580,7 +4600,7 @@ def OnRightDown(self, event):
def OnLeftDown(self, event):
""" Left down event has been invoked.
"""

### Rename the shape with CtrL+LeftDown
if event.ControlDown():
Selectable.OnRenameFromClick(self, event)
event.Skip()
Expand Down
68 changes: 35 additions & 33 deletions ControlNotebook.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,40 +65,40 @@ def __init__(self, *args, **kwargs):
self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.__PageChanged)

def __set_properties(self):
"""
"""
imgList = wx.ImageList(16, 16)
for img in [os.path.join(ICON_PATH_16_16,'db.png'), os.path.join(ICON_PATH_16_16, 'properties.png'), os.path.join(ICON_PATH_16_16,'simulation.png')]:
imgList.Add(wx.Bitmap(img))
self.AssignImageList(imgList)
"""
"""
imgList = wx.ImageList(16, 16)
for img in [os.path.join(ICON_PATH_16_16,'db.png'), os.path.join(ICON_PATH_16_16, 'properties.png'), os.path.join(ICON_PATH_16_16,'simulation.png')]:
imgList.Add(wx.Bitmap(img))
self.AssignImageList(imgList)

def __PageChanged(self, evt):
"""
"""
if evt.GetSelection() == 1:
pass
evt.Skip()
"""
"""
if evt.GetSelection() == 1:
pass
evt.Skip()

def GetLibPanel(self):
""" Get Libraries panel if exist
"""
### list of label of all existing panel
labelList = [self.GetPageText(a) for a in [i for i in range(self.GetPageCount())]]
try:
### try to find if panel exist from label
index = labelList.index(self.labelList[0])
except ValueError as info:
### index not match, panel not existing
return None
else:
### return the Panel object from the founded index
return self.GetPage(index)
""" Get Libraries panel if exist
"""
### list of label of all existing panel
labelList = [self.GetPageText(a) for a in iter(range(self.GetPageCount()))]
try:
### try to find if panel exist from label
index = labelList.index(self.labelList[0])
except ValueError as info:
### index not match, panel not existing
return None
else:
### return the Panel object from the founded index
return self.GetPage(index)

def GetPropPanel(self):
""" Get Properties panel if exist
"""
### list of label of all existing panel
labelList = [self.GetPageText(a) for a in [i for i in range(self.GetPageCount())]]
labelList = [self.GetPageText(a) for a in iter(range(self.GetPageCount()))]
try:
### try to find if panel exist from label
index = labelList.index(self.labelList[1])
Expand All @@ -113,7 +113,7 @@ def GetSimPanel(self):
""" Get Simulation panel if exist
"""
### list of label of all existing panel
labelList = [self.GetPageText(a) for a in [i for i in range(self.GetPageCount())]]
labelList = [self.GetPageText(a) for a in iter(range(self.GetPageCount()))]
try:
### try to find if panel exist from label
index = labelList.index(self.labelList[2])
Expand Down Expand Up @@ -169,7 +169,6 @@ def update(self, concret_subject=None):

if str : propPanel.SetToolTipString(str) if wx.VERSION_STRING < '4.0' else propPanel.SetToolTip(str)


### ---------------------------------------------
### if flatnotebook can be imported, we work with it
### more information about FlatNotebook http://wiki.wxpython.org/Flatnotebook%20(AGW)
Expand Down Expand Up @@ -214,8 +213,8 @@ def __init__(self, *args, **kwargs):
self.SetRightClickMenu(self._rmenu)

def __OnClosingPage(self, evt):
""" The close button of FlatNotebook has been invoked
We update the Show menu depending on the deleted tab
""" The close button of FlatNotebook has been invoked.
We update the Show menu depending on the deleted tab.
"""

mainW = wx.GetApp().GetTopWindow()
Expand All @@ -233,15 +232,19 @@ def __OnClosingPage(self, evt):
### for all items (Simulation, Properties, Libraries)
for item in items_list:
### if label that will be deleted is equal to the label of current item, we deselect it
if item.GetLabel() == label:
if item.GetItemLabel() == label:
item.Check(False)

def __OnClosePage(self, evt):
"""
"""
self.DeletePage(self.GetSelection())

def CreateRightClickMenu(self):
"""
"""
self._rmenu = wx.Menu()
item = wx.MenuItem(self._rmenu, MENU_EDIT_DELETE_PAGE, _("Close Tab\tCtrl+F4"), _("Close Tab"))
item = wx.MenuItem(self._rmenu, MENU_EDIT_DELETE_PAGE, _("Close\tCtrl+F4"), _("Close Tab"))
if wx.VERSION_STRING < '4.0':
self._rmenu.AppendItem(item)
else:
Expand All @@ -257,8 +260,7 @@ class ControlNotebook(wx.Notebook, GeneralNotebook):

def __init__(self, *args, **kwargs):
"""
Notebook class that allows overriding and adding methods for the left pane of DEVSimPy

Notebook class that allows overriding and adding methods for the left pane of DEVSimPy.
"""

wx.Notebook.__init__(self, *args, **kwargs)
Expand Down
2 changes: 1 addition & 1 deletion Decorators.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def wrapper(*args):
txt = arg

mainW.statusbar.SetStatusText('%s %sed'%(fn, txt), 0)
mainW.statusbar.SetStatusText(os.path.basename(diagram.last_name_saved), 1)
mainW.statusbar.SetStatusText(diagram.last_name_saved, 1)
mainW.statusbar.SetStatusText('', 2)

return r
Expand Down
Binary file added Domain/Collector.7z
Binary file not shown.
Loading