def OnCopy( self,event ): #print "copy" item = self.GetSelection() parent = self.GetItemParent(item) pText = self.GetItemText(parent) name = self.GetCopyName(item) if pText == "Raster Map" : cmdflag = 'rast=' + self.GetItemText(item) + ',' + name self.PrependItem(parent=parent,text=name,ct_type=1) elif pText == "Vector Map" : cmdflag = 'vect=' + self.GetItemText(item) + ',' + name self.PrependItem(parent=parent,text=name,ct_type=1) if cmdflag: command = ["g.copy", cmdflag] gcmd.CommandThread(command,stdout=None,stderr=None).run()
def OnButtonDClick(self, event): try: e, n = self.MapWindow.Pixel2Cell(event.GetPositionTuple()) print e, n except AttributeError: return self.counter = self.counter + 1 coord = ("%f %f" % (e, n)) self.coords.append(coord) if self.counter == 2: self.points.append("1 ") for p in self.coords: self.points.append(p) f = open("tmp", 'w') for p in self.points: f.write("%s " % p) f.close() command = [ "v.net.path", 'input=roads', 'output=path', 'file=tmp', '--overwrite' ] gcmd.CommandThread(command, stdout=None, stderr=None).run() self.mapname = 'path@' + grass.gisenv()['MAPSET'] self.cmd = [ 'd.vect', str("map=" + self.mapname), 'col=red', 'width=2' ] self.Map.AddLayer(type='vector', name=self.mapname, command=self.cmd) self.MapWindow.UpdateMap(render=True) self.counter = 0 self.coords = [] self.points = []
class LayerTree(layertree): def __init__(self, parent, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(300,300), style=wx.SUNKEN_BORDER, ctstyle=CT.TR_HAS_BUTTONS | CT.TR_HAS_VARIABLE_ROW_HEIGHT | CT.TR_HIDE_ROOT | CT.TR_FULL_ROW_HIGHLIGHT | CT.TR_MULTIPLE,**kwargs): if 'style' in kwargs: ctstyle |= kwargs['style'] del kwargs['style'] self.frame = kwargs['frame'] del kwargs['frame'] self.Map = kwargs['Map'] del kwargs['Map'] self.lmgr = kwargs['lmgr'] self.gisdbase = kwargs['gisdbase'] del kwargs['gisdbase'] if globalvar.hasAgw: CT.CustomTreeCtrl.__init__(self,parent, id, agwStyle = ctstyle) else: CT.CustomTreeCtrl.__init__(self,parent,id,style=ctstyle) self.SetName("LayerTree") self.layer_selected = None self.rerender = False # layer change requires a rerendering if auto render self.reorder = False il = wx.ImageList(16, 16, mask=False) trart = wx.ArtProvider.GetBitmap(wx.ART_FOLDER_OPEN, wx.ART_OTHER, (16, 16)) self.folder_open = il.Add(trart) trart = wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16, 16)) self.folder = il.Add(trart) bmpsize = (16, 16) trgif = Icons["addrast"].GetBitmap(bmpsize) self.rast_icon = il.Add(trgif) trgif = Icons["addrast3d"].GetBitmap(bmpsize) self.rast3d_icon = il.Add(trgif) trgif = Icons["addrgb"].GetBitmap(bmpsize) self.rgb_icon = il.Add(trgif) trgif = Icons["addhis"].GetBitmap(bmpsize) self.his_icon = il.Add(trgif) trgif = Icons["addshaded"].GetBitmap(bmpsize) self.shaded_icon = il.Add(trgif) trgif = Icons["addrarrow"].GetBitmap(bmpsize) self.rarrow_icon = il.Add(trgif) trgif = Icons["addrnum"].GetBitmap(bmpsize) self.rnum_icon = il.Add(trgif) trgif = Icons["addvect"].GetBitmap(bmpsize) self.vect_icon = il.Add(trgif) trgif = Icons["addthematic"].GetBitmap(bmpsize) self.theme_icon = il.Add(trgif) trgif = Icons["addchart"].GetBitmap(bmpsize) self.chart_icon = il.Add(trgif) trgif = Icons["addgrid"].GetBitmap(bmpsize) self.grid_icon = il.Add(trgif) trgif = Icons["addgeodesic"].GetBitmap(bmpsize) self.geodesic_icon = il.Add(trgif) trgif = Icons["addrhumb"].GetBitmap(bmpsize) self.rhumb_icon = il.Add(trgif) trgif = Icons["addlabels"].GetBitmap(bmpsize) self.labels_icon = il.Add(trgif) trgif = Icons["addcmd"].GetBitmap(bmpsize) self.cmd_icon = il.Add(trgif) self.AssignImageList(il) self.ID_COPY = wx.NewId() self.ID_OSSIM = wx.NewId() self.ID_OSSIM2 = wx.NewId() self.ID_INFO = wx.NewId() self.ID_REPORT = wx.NewId() self.ID_AREA = 200 self.ID_LENGTH = 201 self.ID_COOR = 202 self.ID_REN = wx.NewId() self.ID_DEL = wx.NewId() self.root = self.AddRoot("Map Layers") self.SetPyData(self.root, (None,None)) d = self.GetParent() notebook = d.GetParent() child=notebook.GetChildren() for panel in child: if panel.GetName() == "MapWindow": self.mapdisplay = panel self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnLayerChecked) # self.Bind(CT.EVT_TREE_ITEM_ACTIVATED, self.ChooseColour) #self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK,self.OnTreePopUp) self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnEndRename) self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, self.OnBeginRename) #Event bindings for tree menu self.Bind(wx.EVT_MENU,self.OnCopy,id=self.ID_COPY) self.Bind(wx.EVT_MENU,self.OnRenameMap,id=self.ID_REN) self.Bind(wx.EVT_MENU,self.OnDeleteMap,id=self.ID_DEL) self.Bind(wx.EVT_MENU,self.OnOssim,id=self.ID_OSSIM) self.Bind(wx.EVT_MENU,self.OnOssim2,id=self.ID_OSSIM2) self.Bind(wx.EVT_TREE_ITEM_EXPANDING, self.OnExpandNode) self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnCollapseNode) self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivateLayer) self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnChangeSel) self.Bind(wx.EVT_TREE_DELETE_ITEM, self.OnDeleteMap) self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnLayerContextMenu) self.Bind(wx.EVT_TREE_END_DRAG, self.OnEndDrag) self.Bind(wx.EVT_KEY_UP, self.OnKeyUp) self.Bind(wx.EVT_IDLE, self.OnIdle) self.addon = os.getenv("integrated-gui") def Minimal(self,item): print "here" mnuCopy = self.popupMenu.Append(self.ID_COPY,'&Copy Map\tCtrl+C') mnuRename = self.popupMenu.Append(self.ID_REN,'&Rename Map\tCtrl-R') mnuDel = self.popupMenu.Append(self.ID_DEL,'&Delete Map\tDEL') self.popupMenu.AppendSeparator() mnuOssim = self.popupMenu.Append(self.ID_OSSIM,'&Send to OssimPlanet') mnuOssim = self.popupMenu.Append(self.ID_OSSIM2,'&Remove from OssimPlanet') def OnLayerContextMenu (self, event): """!Contextual menu for item/layer""" if not self.layer_selected: event.Skip() return self.popupMenu = wx.Menu() item = event.GetItem() if self.IsItemChecked(item) == False: if self.addon == "True": self.Minimal(item) else: if self.addon == "True": self.Minimal(item) ltype = self.GetPyData(self.layer_selected)[0]['type'] Debug.msg (4, "LayerTree.OnContextMenu: layertype=%s" % \ ltype) if not hasattr (self, "popupID1"): self.popupID1 = wx.NewId() self.popupID2 = wx.NewId() self.popupID3 = wx.NewId() self.popupID4 = wx.NewId() self.popupID5 = wx.NewId() self.popupID6 = wx.NewId() self.popupID7 = wx.NewId() self.popupID8 = wx.NewId() self.popupID9 = wx.NewId() self.popupID10 = wx.NewId() self.popupID11 = wx.NewId() # nviz self.popupID12 = wx.NewId() self.popupID13 = wx.NewId() self.popupID14 = wx.NewId() self.popupID15 = wx.NewId() numSelected = len(self.GetSelections()) # general item self.popupMenu.Append(self.popupID1, text=_("Remove from MapTree")) self.Bind(wx.EVT_MENU, self.lmgr.OnDeleteLayer, id=self.popupID1) if ltype != "command": # rename self.popupMenu.Append(self.popupID2, text=_("Rename")) self.Bind(wx.EVT_MENU, self.RenameLayer, id=self.popupID2) if numSelected > 1: self.popupMenu.Enable(self.popupID2, False) # map layer items if ltype != "group" and \ ltype != "command": self.popupMenu.AppendSeparator() self.popupMenu.Append(self.popupID8, text=_("Change opacity level")) self.Bind(wx.EVT_MENU, self.OnPopupOpacityLevel, id=self.popupID8) self.popupMenu.Append(self.popupID3, text=_("Properties")) self.Bind(wx.EVT_MENU, self.OnPopupProperties, id=self.popupID3) if ltype in ('raster', 'vector', 'raster3d') and self.mapdisplay.toolbars['nviz']: self.popupMenu.Append(self.popupID11, _("3D view properties")) self.Bind (wx.EVT_MENU, self.OnNvizProperties, id=self.popupID11) if ltype in ('raster', 'vector', 'rgb'): self.popupMenu.Append(self.popupID9, text=_("Zoom to selected map(s)")) self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToMap, id=self.popupID9) self.popupMenu.Append(self.popupID10, text=_("Set computational region from selected map(s)")) self.Bind(wx.EVT_MENU, self.OnSetCompRegFromMap, id=self.popupID10) if numSelected > 1: self.popupMenu.Enable(self.popupID8, False) self.popupMenu.Enable(self.popupID3, False) # specific items try: mltype = self.GetPyData(self.layer_selected)[0]['type'] except: mltype = None # # vector layers (specific items) # if mltype and mltype == "vector": self.popupMenu.AppendSeparator() self.popupMenu.Append(self.popupID4, text=_("Show attribute data")) self.Bind (wx.EVT_MENU, self.lmgr.OnShowAttributeTable, id=self.popupID4) self.popupMenu.Append(self.popupID5, text=_("Start editing")) self.popupMenu.Append(self.popupID6, text=_("Stop editing")) self.popupMenu.Enable(self.popupID6, False) self.Bind (wx.EVT_MENU, self.OnStartEditing, id=self.popupID5) self.Bind (wx.EVT_MENU, self.OnStopEditing, id=self.popupID6) layer = self.GetPyData(self.layer_selected)[0]['maplayer'] # enable editing only for vector map layers available in the current mapset digitToolbar = self.mapdisplay.toolbars['vdigit'] if digitToolbar: # background vector map self.popupMenu.Append(self.popupID14, text=_("Use as background vector map"), kind=wx.ITEM_CHECK) self.Bind(wx.EVT_MENU, self.OnSetBgMap, id=self.popupID14) if UserSettings.Get(group='vdigit', key='bgmap', subkey='value', internal=True) == layer.GetName(): self.popupMenu.Check(self.popupID14, True) if layer.GetMapset() != grass.gisenv()['MAPSET']: # only vector map in current mapset can be edited self.popupMenu.Enable (self.popupID5, False) self.popupMenu.Enable (self.popupID6, False) elif digitToolbar and digitToolbar.GetLayer(): # vector map already edited vdigitLayer = digitToolbar.GetLayer() if vdigitLayer is layer: # disable 'start editing' self.popupMenu.Enable (self.popupID5, False) # enable 'stop editing' self.popupMenu.Enable(self.popupID6, True) # disable 'remove' self.popupMenu.Enable(self.popupID1, False) # disable 'bgmap' self.popupMenu.Enable(self.popupID14, False) else: # disable 'start editing' self.popupMenu.Enable(self.popupID5, False) # disable 'stop editing' self.popupMenu.Enable(self.popupID6, False) # enable 'bgmap' self.popupMenu.Enable(self.popupID14, True) self.popupMenu.Append(self.popupID7, _("Metadata")) self.Bind (wx.EVT_MENU, self.OnMetadata, id=self.popupID7) if numSelected > 1: self.popupMenu.Enable(self.popupID4, False) self.popupMenu.Enable(self.popupID5, False) self.popupMenu.Enable(self.popupID6, False) self.popupMenu.Enable(self.popupID7, False) self.popupMenu.Enable(self.popupID14, False) # # raster layers (specific items) # elif mltype and mltype == "raster": self.popupMenu.Append(self.popupID12, text=_("Zoom to selected map(s) (ignore NULLs)")) self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToRaster, id=self.popupID12) self.popupMenu.Append(self.popupID13, text=_("Set computational region from selected map(s) (ignore NULLs)")) self.Bind(wx.EVT_MENU, self.OnSetCompRegFromRaster, id=self.popupID13) self.popupMenu.AppendSeparator() self.popupMenu.Append(self.popupID15, _("Set color table")) self.Bind (wx.EVT_MENU, self.OnColorTable, id=self.popupID15) self.popupMenu.Append(self.popupID4, _("Histogram")) self.Bind (wx.EVT_MENU, self.OnHistogram, id=self.popupID4) self.popupMenu.Append(self.popupID5, _("Profile")) self.Bind (wx.EVT_MENU, self.OnProfile, id=self.popupID5) self.popupMenu.Append(self.popupID6, _("Metadata")) self.Bind (wx.EVT_MENU, self.OnMetadata, id=self.popupID6) if numSelected > 1: self.popupMenu.Enable(self.popupID12, False) self.popupMenu.Enable(self.popupID13, False) self.popupMenu.Enable(self.popupID15, False) self.popupMenu.Enable(self.popupID4, False) self.popupMenu.Enable(self.popupID5, False) self.popupMenu.Enable(self.popupID6, False) self.popupMenu.Enable(self.popupID11, False) ## self.PopupMenu(self.popupMenu, pos) self.PopupMenu(self.popupMenu) self.popupMenu.Destroy() def ChooseColour(self,event): colourdialog = wx.ColourDialog(self) colourdialog.ShowModal() rgb = colourdialog.GetColourData().GetColour() rgb = str(rgb) self.colour = rgb.replace(',',':') self.colour = self.colour.strip('(') self.colour = self.colour.strip(')') item = event.GetItem() col = colourdialog.GetColourData().GetColour() self.SetHilightFocusColour(col) self.SetItemTextColour(item,col) item = event.GetItem() parent = self.GetItemParent(item) if self.IsItemChecked(parent): self.colour_selected = True self.CheckItem(parent) else: self.CheckItem(parent) def OnEndRename(self,event): """ Rename mapset using grass commands """ item = event.GetItem() oldName = self.GetItemText(item) try: newName = self.GetEditControl().GetValue() except: return def OnBeginRename(self,event): item = self.GetItemText(event.GetItem()) def OnReport(self,event): item = self.GetSelection() mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer'] mltype = self.GetPyData(self.layer_selected)[0]['type'] if mltype == 'raster': cmd = ['r.info'] elif mltype == 'vector': cmd = ['v.info'] cmd.append('map=%s' % mapLayer.name) # print output to command log area self.lmgr.goutput.RunCmd(cmd, switchPage=True) def OnCopy( self,event ): #print "copy" item = self.GetSelection() parent = self.GetItemParent(item) pText = self.GetItemText(parent) name = self.GetCopyName(item) if pText == "Raster Map" : cmdflag = 'rast=' + self.GetItemText(item) + ',' + name self.PrependItem(parent=parent,text=name,ct_type=1) elif pText == "Vector Map" : cmdflag = 'vect=' + self.GetItemText(item) + ',' + name self.PrependItem(parent=parent,text=name,ct_type=1) if cmdflag: command = ["g.copy", cmdflag] gcmd.CommandThread(command,stdout=None,stderr=None).run() def GetCopyName(self, item): """ Returns unique name depending on the mapname to be copied. """ def GetPrefix(prefix): """ This returns a prefix to the given map name prefix applied here is _copy_x. """ prefix = "_copy_" + str(self.count) self.count = self.count + 1 return prefix #end of GetPrefix def CheckName(parent,prefix,name): """ Checks all silbings of the parent wheather the name already exists. """ ncount = self.GetChildrenCount(parent, False) ck = 1 current , ck = self.GetFirstChild(parent) for i in range(ncount): if str(self.GetItemText(current)) == str(name + prefix): return False else: current,ck = self.GetNextChild(parent,ck) return True #End of CheckName #GetCopyName function starts here ext = None self.count = 1 ext = GetPrefix(ext) name = str(self.GetItemText(item)) parent = self.GetItemParent(item) while CheckName(parent,ext,name) == False: ext = GetPrefix(ext) CheckName(parent,ext,name) name = str(name + ext) return name def OnRenameMap( self,event ): item = self.GetSelection() self.EditLabel( self.GetSelection()) mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer'] mltype = self.GetPyData(self.layer_selected)[0]['type'] try: newName = self.GetEditControl().GetValue() except: newName = mapLayer.name if mltype == 'raster': cmd = ['g.rename rast='] elif mltype == 'vector': cmd = ['g.rename vect='] cmd.append('%s,%s' % mapLayer.name,newName) # print output to command log area self.lmgr.goutput.RunCmd(cmd, switchPage=True) def OnDeleteMap( self,event ): """ Performs grass command for deleting a map """ item = self.GetSelection() if item is not None: dlg = wx.MessageDialog(self, message=_( "Do you want to delete selected map ?"), caption=_("Delete Map"), style=wx.YES_NO | wx.YES_DEFAULT | \ wx.CANCEL | wx.ICON_QUESTION) ret = dlg.ShowModal() if ret == wx.ID_YES: dlg.Destroy() mapLayer = self.GetPyData(self.layer_selected)[0]['maplayer'] mltype = self.GetPyData(self.layer_selected)[0]['type'] if mltype == 'raster': cmd = ['g.remove rast='] elif mltype == 'vector': cmd = ['g.remove vect='] cmd.append('%s' % mapLayer.name) # print output to command log area self.lmgr.goutput.RunCmd(cmd, switchPage=True) parent =self.GetItemParent(item) if self.GetItemText(parent) == "Raster Map" : cmdflag = 'rast=' + str(self.GetItemText(item)) elif self.GetItemText(parent) == "Vector Map" : cmdflag = 'vect=' + str(self.GetItemText(item)) if cmdflag: command = ["g.remove", cmdflag] gcmd.CommandThread(command,stdout=None,stderr=None).run() select = self.GetPrevSibling(item) self.Delete(item)