[GRASS-SVN] r39868 -
grass/branches/develbranch_6/gui/wxpython/gui_modules
svn_grass at osgeo.org
svn_grass at osgeo.org
Tue Dec 1 15:21:29 EST 2009
Author: martinl
Date: 2009-12-01 15:21:28 -0500 (Tue, 01 Dec 2009)
New Revision: 39868
Modified:
grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
Log:
wxGUI: atm: popup menu for columns (sorting, v.to.db)
(merge r39867 from trunk)
Modified: grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py
===================================================================
--- grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py 2009-12-01 20:15:12 UTC (rev 39867)
+++ grass/branches/develbranch_6/gui/wxpython/gui_modules/dbm.py 2009-12-01 20:21:28 UTC (rev 39868)
@@ -139,7 +139,8 @@
# events
self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
- self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumnClick) # sorting
+ self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumnSort)
+ self.Bind(wx.EVT_LIST_COL_RIGHT_CLICK, self.OnColumnMenu)
def Update(self, mapDBInfo):
"""!Update list according new mapDBInfo description"""
@@ -383,10 +384,112 @@
else:
return self.attr1
- def OnColumnClick(self, event):
- """!Column heading clicked -> sorting"""
+ def OnColumnMenu(self, event):
+ """!Column heading right mouse button -> pop-up menu"""
self._col = event.GetColumn()
+
+ popupMenu = wx.Menu()
+ 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()
+ self.popupID12 = wx.NewId()
+
+ popupMenu.Append(self.popupID1, text=_("Sort ascending"))
+ popupMenu.Append(self.popupID2, text=_("Sort descending"))
+ popupMenu.AppendSeparator()
+ subMenu = wx.Menu()
+ popupMenu.AppendMenu(self.popupID3, _("Calculate (only numeric columns)"),
+ subMenu)
+ if not self.log.parent.editable or \
+ self.columns[self.GetColumn(self._col).GetText()]['ctype'] not in (types.IntType, types.FloatType):
+ popupMenu.Enable(self.popupID3, False)
+
+ subMenu.Append(self.popupID4, text=_("Area size"))
+ subMenu.Append(self.popupID5, text=_("Line length"))
+ subMenu.Append(self.popupID6, text=_("Compactness of an area"))
+ subMenu.Append(self.popupID7, text=_("Fractal dimension of boundary defining a polygon"))
+ subMenu.Append(self.popupID8, text=_("Perimeter length of an area"))
+ subMenu.Append(self.popupID9, text=_("Number of features for each category"))
+ subMenu.Append(self.popupID10, text=_("Slope steepness of 3D line"))
+ subMenu.Append(self.popupID11, text=_("Line sinuousity"))
+ subMenu.Append(self.popupID12, text=_("Line azimuth"))
+
+ self.Bind (wx.EVT_MENU, self.OnColumnSortAsc, id=self.popupID1)
+ self.Bind (wx.EVT_MENU, self.OnColumnSortDesc, id=self.popupID2)
+ for id in (self.popupID4, self.popupID5, self.popupID6,
+ self.popupID7, self.popupID8, self.popupID9,
+ self.popupID10, self.popupID11, self.popupID12):
+ self.Bind(wx.EVT_MENU, self.OnColumnCompute, id = id)
+
+ self.PopupMenu(popupMenu)
+ popupMenu.Destroy()
+
+ def OnColumnSort(self, event):
+ """!Column heading left mouse button -> sorting"""
+ self._col = event.GetColumn()
+
+ self.ColumnSort()
+
+ event.Skip()
+
+ def OnColumnSortAsc(self, event):
+ """!Sort values of selected column (ascending)"""
+ self.SortListItems(col = self._col, ascending = True)
+ event.Skip()
+
+ def OnColumnSortDesc(self, event):
+ """!Sort values of selected column (descending)"""
+ self.SortListItems(col = self._col, ascending = False)
+ event.Skip()
+
+ def OnColumnCompute(self, event):
+ """!Compute values of selected column"""
+ id = event.GetId()
+
+ option = None
+ if id == self.popupID4:
+ option = 'area'
+ elif id == self.popupID5:
+ option = 'length'
+ elif id == self.popupID6:
+ option = 'compact'
+ elif id == self.popupID7:
+ option = 'fd'
+ elif id == self.popupID8:
+ option = 'perimeter'
+ elif id == self.popupID9:
+ option = 'count'
+ elif id == self.popupID10:
+ option = 'slope'
+ elif id == self.popupID11:
+ option = 'sinuous'
+ elif id == self.popupID12:
+ option = 'azimuth'
+
+ if not option:
+ return
+
+ gcmd.RunCommand('v.to.db',
+ parent = self.parent,
+ map = self.mapDBInfo.map,
+ layer = self.layer,
+ option = option,
+ columns = self.GetColumn(self._col).GetText())
+
+ self.LoadData(self.layer)
+
+ def ColumnSort(self):
+ """!Sort values of selected column (self._col)"""
# remove duplicated arrow symbol from column header
# FIXME: should be done automatically
info = wx.ListItem()
@@ -395,9 +498,7 @@
for column in range(self.GetColumnCount()):
info.m_text = self.GetColumn(column).GetText()
self.SetColumn(column, info)
-
- event.Skip()
-
+
def SortItems(self, sorter=cmp):
"""!Sort items"""
items = list(self.itemDataMap.keys())
@@ -426,7 +527,7 @@
# If the items are equal then pick something else to make the sort value unique
if cmpVal == 0:
cmpVal = apply(cmp, self.GetSecondarySortValues(self._col, key1, key2))
-
+
if ascending:
return cmpVal
else:
More information about the grass-commit
mailing list