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]