def onKey(self, event): """Catch key events in the panel.""" key = event.GetKeyCode() # Select All # Ctrl A if event.ControlDown() and key == 65: rows = self.gridAtoms.GetNumberRows() cols = self.gridAtoms.GetNumberCols() self.gridAtoms.SelectBlock(0,0,rows,cols) # context menu key elif key == wx.WXK_MENU: self.popupMenu(self.gridAtoms, event.GetPosition().x, event.GetPosition().y) # Vim-like search for atom selection elif key == 47: self.onPopupSelect(event) # Delete an atom # Delete elif key == 127: selected = self.gridAtoms.GetSelectedRows() if selected: self.structure.deleteAtoms(selected) self.refresh() self.mainFrame.needsSave() # Ctrl - elif event.ControlDown() and key == 45: indices = gridutils.getSelectionRows(self.gridAtoms) self.structure.deleteAtoms(indices) self.refresh() self.mainFrame.needsSave() # Append an atom # Ctrl + or Ctrl = elif event.ControlDown() and (key == 61 or key == 43): indices = gridutils.getSelectionRows(self.gridAtoms) pos = 0 if indices: pos = 1+indices[-1] elif self.structure: pos = len(self.structure) # insert "rows" atoms into the structure atoms = [Atom("C",[0.0,0.0,0.0], U=[[0.003,0,0],[0,0.003,0],[0,0,0.003]])] self.structure.insertAtoms(pos, atoms) self.refresh() self.mainFrame.needsSave() else: event.Skip() return
def onKey(self, event): """Catch key events in the panel.""" key = event.GetKeyCode() # Select All # Ctrl A if event.ControlDown() and key == 65: rows = self.gridAtoms.GetNumberRows() cols = self.gridAtoms.GetNumberCols() self.gridAtoms.SelectBlock(0,0,rows,cols) # context menu key elif key == wx.WXK_MENU: self.popupMenu(self.gridAtoms, event.GetPosition().x, event.GetPosition().y) # Vim-like search for atom selection elif key == 47: self.onPopupSelect(event) # Delete an atom # Delete elif key == 127: selected = self.gridAtoms.GetSelectedRows() if selected: self.structure.deleteAtoms(selected) self.refresh() self.mainFrame.needsSave() # Ctrl - elif event.ControlDown() and key == 45: indices = gridutils.getSelectionRows(self.gridAtoms) self.structure.deleteAtoms(indices) self.refresh() self.mainFrame.needsSave() # Append an atom # Ctrl + or Ctrl = elif event.ControlDown() and (key == 61 or key == 43): indices = gridutils.getSelectionRows(self.gridAtoms) pos = 0 if indices: pos = 1+indices[-1] elif self.structure: pos = len(self.structure) # insert "rows" atoms into the structure atoms = [_defaultNewAtom()] self.structure.insertAtoms(pos, atoms) self.refresh() self.mainFrame.needsSave() else: event.Skip() return
def onPopupDelete(self, event): """Deletes the row under mouse pointer from the grid.""" if self.structure is not None: indices = gridutils.getSelectionRows(self.gridAtoms) self.structure.deleteAtoms(indices) self.refresh() self.mainFrame.needsSave() return
def onPopupDelete(self, event): """Deletes the row under mouse pointer from the grid.""" if self.structure is not None: indices = gridutils.getSelectionRows(self.gridAtoms) self.structure.deleteAtoms(indices) self.refresh() self.mainFrame.needsSave() return
def popupMenu(self, window, x, y): """Creates the popup menu window -- window, where to popup a menu x -- x coordinate y -- y coordinate """ # only do this part the first time so the events are only bound once if not hasattr(self, "spaceGroupID"): self.spaceGroupID = wx12.NewIdRef() self.selectID = wx12.NewIdRef() self.copyID = wx12.NewIdRef() self.pasteID = wx12.NewIdRef() self.Bind(wx.EVT_MENU, self.onPopupSpaceGroup, id=self.spaceGroupID) self.Bind(wx.EVT_MENU, self.onPopupSelect, id=self.selectID) self.Bind(wx.EVT_MENU, self.onPopupCopy, id=self.copyID) self.Bind(wx.EVT_MENU, self.onPopupPaste, id=self.pasteID) # make a menu menu = wx.Menu() # add some other items menu.Append(self.spaceGroupID, "&Symmetry constraints...") menu.AppendSeparator() menu.Append(self.selectID, "Select &atoms...") menu.Append(self.copyID, "&Copy") menu.Append(self.pasteID, "&Paste") # Disable some items if there are no atoms selected indices = gridutils.getSelectionRows(self.gridAtoms) if not indices: menu.Enable(self.spaceGroupID, False) # Check for copy/paste if not phasepanelutils.canCopySelectedCells(self): menu.Enable(self.copyID, False) if not phasepanelutils.canPasteIntoCells(self): menu.Enable(self.pasteID, False) # Popup the menu. If an item is selected then its handler # will be called before PopupMenu returns. window.PopupMenu(menu, wx.Point(x, y)) menu.Destroy() return
def popupMenu(self, window, x, y): """Creates the popup menu window -- window, where to popup a menu x -- x coordinate y -- y coordinate """ # only do this part the first time so the events are only bound once if not hasattr(self, "spaceGroupID"): self.spaceGroupID = wx.NewId() self.selectID = wx.NewId() self.copyID = wx.NewId() self.pasteID = wx.NewId() self.Bind(wx.EVT_MENU, self.onPopupSpaceGroup, id=self.spaceGroupID) self.Bind(wx.EVT_MENU, self.onPopupSelect, id=self.selectID) self.Bind(wx.EVT_MENU, self.onPopupCopy, id=self.copyID) self.Bind(wx.EVT_MENU, self.onPopupPaste, id=self.pasteID) # make a menu menu = wx.Menu() # add some other items menu.Append(self.spaceGroupID, "&Symmetry constraints...") menu.AppendSeparator() menu.Append(self.selectID, "Select &atoms...") menu.Append(self.copyID, "&Copy") menu.Append(self.pasteID, "&Paste") # Disable some items if there are no atoms selected indices = gridutils.getSelectionRows(self.gridAtoms) if not indices: menu.Enable(self.spaceGroupID, False); # Check for copy/paste if not phasepanelutils.canCopySelectedCells(self): menu.Enable(self.copyID, False) if not phasepanelutils.canPasteIntoCells(self): menu.Enable(self.pasteID, False) # Popup the menu. If an item is selected then its handler # will be called before PopupMenu returns. window.PopupMenu(menu, wx.Point(x,y)) menu.Destroy() return
def onPopupSpaceGroup(self, event): """Create a supercell with the supercell dialog.""" from diffpy.pdfgui.gui.sgstructuredialog import SGStructureDialog if self.structure is not None: indices = gridutils.getSelectionRows(self.gridAtoms) dlg = SGStructureDialog(self) dlg.mainFrame = self.mainFrame dlg.indices = indices dlg.setStructure(self.structure) if dlg.ShowModal() == wx.ID_OK: spcgrp = dlg.getSpaceGroup() offset = dlg.getOffset() self.structure.expandAsymmetricUnit(spcgrp, indices, offset) self.refresh() self.mainFrame.needsSave() dlg.Destroy() return
def onPopupSpaceGroup(self, event): """Create a supercell with the supercell dialog.""" from diffpy.pdfgui.gui.sgstructuredialog import SGStructureDialog if self.structure is not None: indices = gridutils.getSelectionRows(self.gridAtoms) dlg = SGStructureDialog(self) dlg.mainFrame = self.mainFrame dlg.indices = indices dlg.setStructure(self.structure) if dlg.ShowModal() == wx.ID_OK: spcgrp = dlg.getSpaceGroup() offset = dlg.getOffset() self.structure.expandAsymmetricUnit(spcgrp, indices, offset) self.refresh() self.mainFrame.needsSave() dlg.Destroy() return
def onPopupSpaceGroup(self, event): """Create a supercell with the supercell dialog.""" if self.structure is not None: indices = gridutils.getSelectionRows(self.gridAtoms) dlg = SGConstrainDialog(self) dlg.mainFrame = self.mainFrame dlg.indices = indices dlg.setStructure(self.structure) dlg.updateWidgets() if dlg.ShowModal() == wx.ID_OK: spcgrp = dlg.getSpaceGroup() offset = dlg.getOffset() posflag = dlg.getPosFlag() tempflag = dlg.getTempFlag() self.structure.applySymmetryConstraints(spcgrp, indices, posflag, tempflag, offset) self.refresh() dlg.Destroy() self.mainFrame.needsSave() return