dabo Commit
Revision 3380
Date: 2007-09-17 12:11:35 -0700 (Mon, 17 Sep 2007)
Author: Paul
Trac: http://svn.dabodev.com/trac/dabo/changeset/3380

Changed:
U   trunk/dabo/lib/datanav2/Form.py
U   trunk/dabo/lib/datanav2/Page.py

Log:
Removed deprecation of SortLabel. Added property ShowSortFields to
datanav2.Form, defaulted to True. Added code to only override the
bizobj's ORDER BY clause if the user has set a custom sort.
 


Diff:
Modified: trunk/dabo/lib/datanav2/Form.py
===================================================================
--- trunk/dabo/lib/datanav2/Form.py     2007-09-17 18:52:01 UTC (rev 3379)
+++ trunk/dabo/lib/datanav2/Form.py     2007-09-17 19:11:35 UTC (rev 3380)
@@ -950,6 +950,13 @@
                self._showExpandedQuickReport = bool(val)
 
 
+       def _getShowSortFields(self):
+               return getattr(self, "_showSortFields", True)
+
+       def _setShowSortFields(self, val):
+               self._showSortFields = bool(val)
+
+
        def _getTesting(self):
                return getattr(self, "_testing", False)
 
@@ -1024,6 +1031,9 @@
                        _setShowExpandedQuickReport, None,
                        _("""Can the user choose the 'expanded' quick 
report?"""))
 
+       ShowSortFields = property(_getShowSortFields, _setShowSortFields, None,
+                       _("""Can the user sort fields in the select page?"""))
+
        Testing = property(_getTesting, _setTesting, None, 
                        "Flag for use when testing elements of the form.")
 

Modified: trunk/dabo/lib/datanav2/Page.py
===================================================================
--- trunk/dabo/lib/datanav2/Page.py     2007-09-17 18:52:01 UTC (rev 3379)
+++ trunk/dabo/lib/datanav2/Page.py     2007-09-17 19:11:35 UTC (rev 3380)
@@ -1,7 +1,6 @@
 # -*- coding: utf-8 -*-
 import os
 import sys
-import warnings
 import dabo
 import dabo.dException as dException
 import dabo.dEvents as dEvents
@@ -107,17 +106,14 @@
                
 
 class SortLabel(dabo.ui.dLabel):
-       ## Deprecated; older AppWizard apps use this.
-       def __init__(self, *args, **kwargs):
-               warnings.warn("SortLabel deprecated; use dabo.ui.dLabel 
instead.", DeprecationWarning)
-               super(SortLabel, self).__init__(*args, **kwargs)
+       def initEvents(self):
+               super(SortLabel, self).initEvents()
+               self.bindEvent(dEvents.MouseRightClick, 
self.Parent.Parent.onSortLabelRClick)
+               # Add a property for the related field
+               self.relatedDataField = ""
 
 
 class SelectPage(Page):
-       def onSortLabelRClick(self, evt):
-               # Only here to keep from breaking old AppWizard apps.
-               pass
- 
        def _createItems(self):
                self.super()
 
@@ -134,7 +130,68 @@
                # Holds info which will be used to create the dynamic
                # WHERE clause based on user input
                self.selectFields = {}
+               self.sortFields = {}
+               self.sortIndex = 0
 
+
+       def onSortLabelRClick(self, evt):
+               obj = self.sortObj = evt.EventObject
+               sortDS = getattr(obj, "relatedDataField", None)
+               if not self.Form.ShowSortFields or not sortDS:
+                       return
+               self.sortDS = sortDS
+               self.sortCap = obj.Caption
+               mn = dabo.ui.dMenu()
+               if self.sortFields:
+                       mn.append(_("Show sort order"), 
OnHit=self.handleSortOrder)
+               if self.sortFields.has_key(self.sortDS):
+                       mn.append(_("Remove sort on ") + self.sortCap, 
+                                       OnHit=self.handleSortRemove)
+
+               mn.append(_("Sort Ascending"), OnHit=self.handleSortAsc)
+               mn.append(_("Sort Descending"), OnHit=self.handleSortDesc)
+               self.PopupMenu(mn, 
obj.formCoordinates(evt.EventData["mousePosition"]) )
+               mn.release()
+
+       def handleSortOrder(self, evt): 
+               self.handleSort(evt, "show")
+       def handleSortRemove(self, evt): 
+               self.handleSort(evt, "remove")
+       def handleSortAsc(self, evt):
+               self.handleSort(evt, ASC)
+       def handleSortDesc(self, evt):
+               self.handleSort(evt, DESC)
+       def handleSort(self, evt, action):
+               if action == "remove":
+                       try:
+                               del self.sortFields[self.sortDS]
+                       except:
+                               pass
+               elif action== "show":
+                       # Get the descrips and order
+                       sf = self.sortFields
+                       sfk = sf.keys()
+                       dd = [(sf[kk][0], kk, "%s %s" % (sf[kk][2], sf[kk][1]))
+                                       for kk in sfk ]
+                       dd.sort()
+                       sortDesc = [itm[2] for itm in dd]
+                       sortedList = dabo.ui.sortList(sortDesc)
+                       newPos = 0
+                       for itm in sortedList:
+                               origPos = sortDesc.index(itm)
+                               key = dd[origPos][1]
+                               self.sortFields[key] = (newPos, 
self.sortFields[key][1], self.sortFields[key][2])
+                               newPos += 1
+               elif action != "show":
+                       if self.sortFields.has_key(self.sortDS):
+                               self.sortFields[self.sortDS] = 
(self.sortFields[self.sortDS][0], 
+                                               action, self.sortCap)
+                       else:
+                               self.sortFields[self.sortDS] = (self.sortIndex, 
action, self.sortCap)
+                               self.sortIndex += 1
+               self.sortCap = self.sortDS = ""
+                               
+                       
                
        def createItems(self):
                if not self.Sizer:
@@ -153,10 +210,29 @@
                """Subclass hook."""
                pass
 
+
        def setOrderBy(self, biz):
-               """Subclass hook."""
-               pass
+               orderBy = self._orderByClause()
+               if orderBy:
+                       # Only set (overriding the bizobj) if the user 
specified a sort
+                       biz.setOrderByClause(orderBy)
 
+       def _orderByClause(self, infoOnly=False):
+               sf = self.sortFields
+               if infoOnly: 
+                       parts = lambda (k): (sf[k][2], sf[k][1])
+               else:
+                       parts = lambda (k): (k, sf[k][1].upper())
+
+               flds = [(self.sortFields[k][0], k, " ".join(parts(k)))
+                       for k in self.sortFields.keys()]
+               flds.sort()
+               if infoOnly:
+                       return [e[1:] for e in flds]
+               else:
+                       return ",".join([ k[2] for k in flds])
+
+
        def setWhere(self, biz):
                try:
                        baseWhere = biz.getBaseWhereClause()




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: http://leafe.com/archives/byMID/dabo-dev/[EMAIL PROTECTED]

Reply via email to