| 133 | | self.sortFields = {} |
|---|
| 134 | | self.sortIndex = 0 |
|---|
| 135 | | |
|---|
| 136 | | |
|---|
| 137 | | def onSortLabelRClick(self, evt): |
|---|
| 138 | | obj = self.sortObj = evt.EventObject |
|---|
| 139 | | self.sortDS = obj.relatedDataField |
|---|
| 140 | | self.sortCap = obj.Caption |
|---|
| 141 | | mn = dabo.ui.dMenu() |
|---|
| 142 | | if self.sortFields: |
|---|
| 143 | | mn.append(_("Show sort order"), OnHit=self.handleSortOrder) |
|---|
| 144 | | if self.sortFields.has_key(self.sortDS): |
|---|
| 145 | | mn.append(_("Remove sort on ") + self.sortCap, |
|---|
| 146 | | OnHit=self.handleSortRemove) |
|---|
| 147 | | |
|---|
| 148 | | mn.append(_("Sort Ascending"), OnHit=self.handleSortAsc) |
|---|
| 149 | | mn.append(_("Sort Descending"), OnHit=self.handleSortDesc) |
|---|
| 150 | | self.PopupMenu(mn, obj.formCoordinates(evt.EventData["mousePosition"]) ) |
|---|
| 151 | | mn.release() |
|---|
| 152 | | |
|---|
| 153 | | def handleSortOrder(self, evt): |
|---|
| 154 | | self.handleSort(evt, "show") |
|---|
| 155 | | def handleSortRemove(self, evt): |
|---|
| 156 | | self.handleSort(evt, "remove") |
|---|
| 157 | | def handleSortAsc(self, evt): |
|---|
| 158 | | self.handleSort(evt, ASC) |
|---|
| 159 | | def handleSortDesc(self, evt): |
|---|
| 160 | | self.handleSort(evt, DESC) |
|---|
| 161 | | def handleSort(self, evt, action): |
|---|
| 162 | | if action == "remove": |
|---|
| 163 | | try: |
|---|
| 164 | | del self.sortFields[self.sortDS] |
|---|
| 165 | | except: |
|---|
| 166 | | pass |
|---|
| 167 | | elif action== "show": |
|---|
| 168 | | # Get the descrips and order |
|---|
| 169 | | sf = self.sortFields |
|---|
| 170 | | sfk = sf.keys() |
|---|
| 171 | | dd = [(sf[kk][0], kk, "%s %s" % (sf[kk][2], sf[kk][1])) |
|---|
| 172 | | for kk in sfk ] |
|---|
| 173 | | dd.sort() |
|---|
| 174 | | sortDesc = [itm[2] for itm in dd] |
|---|
| 175 | | sortedList = dabo.ui.sortList(sortDesc) |
|---|
| 176 | | newPos = 0 |
|---|
| 177 | | for itm in sortedList: |
|---|
| 178 | | origPos = sortDesc.index(itm) |
|---|
| 179 | | key = dd[origPos][1] |
|---|
| 180 | | self.sortFields[key] = (newPos, self.sortFields[key][1], self.sortFields[key][2]) |
|---|
| 181 | | newPos += 1 |
|---|
| 182 | | elif action != "show": |
|---|
| 183 | | if self.sortFields.has_key(self.sortDS): |
|---|
| 184 | | self.sortFields[self.sortDS] = (self.sortFields[self.sortDS][0], |
|---|
| 185 | | action, self.sortCap) |
|---|
| 186 | | else: |
|---|
| 187 | | self.sortFields[self.sortDS] = (self.sortIndex, action, self.sortCap) |
|---|
| 188 | | self.sortIndex += 1 |
|---|
| 189 | | self.sortCap = self.sortDS = "" |
|---|
| 190 | | |
|---|
| 191 | | |
|---|
| | 135 | |
|---|
| 212 | | biz.setOrderByClause(self._orderByClause()) |
|---|
| 213 | | |
|---|
| 214 | | def _orderByClause(self, infoOnly=False): |
|---|
| 215 | | sf = self.sortFields |
|---|
| 216 | | if infoOnly: |
|---|
| 217 | | parts = lambda (k): (sf[k][2], sf[k][1]) |
|---|
| 218 | | else: |
|---|
| 219 | | parts = lambda (k): (k, sf[k][1].upper()) |
|---|
| 220 | | |
|---|
| 221 | | flds = [(self.sortFields[k][0], k, " ".join(parts(k))) |
|---|
| 222 | | for k in self.sortFields.keys()] |
|---|
| 223 | | flds.sort() |
|---|
| 224 | | if infoOnly: |
|---|
| 225 | | return [e[1:] for e in flds] |
|---|
| 226 | | else: |
|---|
| 227 | | return ",".join([ k[2] for k in flds]) |
|---|
| 228 | | |
|---|
| | 155 | """Subclass hook.""" |
|---|
| | 156 | pass |
|---|