[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
gnue-pos doc/technotes/00001.txt src/Handler.py...
From: |
Jason Cater |
Subject: |
gnue-pos doc/technotes/00001.txt src/Handler.py... |
Date: |
Fri, 04 Jul 2003 01:37:40 -0400 |
CVSROOT: /cvsroot/gnue
Module name: gnue-pos
Branch:
Changes by: Jason Cater <address@hidden> 03/07/04 01:37:40
Modified files:
doc/technotes : 00001.txt
src : Handler.py POSClient.py
src/backends/Base: Driver.py
src/backends/gnue_sb: Driver.py
src/frontends/wx: Driver.py
Log message:
* Support for external/custom backend drivers
* More work on UI integration
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/doc/technotes/00001.txt.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/Handler.py.diff?tr1=1.4&tr2=1.5&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/POSClient.py.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/backends/Base/Driver.py.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/backends/gnue_sb/Driver.py.diff?tr1=1.2&tr2=1.3&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/gnue/gnue-pos/src/frontends/wx/Driver.py.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
Patches:
Index: gnue-pos/doc/technotes/00001.txt
diff -c gnue-pos/doc/technotes/00001.txt:1.3
gnue-pos/doc/technotes/00001.txt:1.4
*** gnue-pos/doc/technotes/00001.txt:1.3 Thu Jul 3 00:30:32 2003
--- gnue-pos/doc/technotes/00001.txt Fri Jul 4 01:37:40 2003
***************
*** 14,19 ****
--- 14,20 ----
RequestAddItem
RequestRemoveItem
RequestCancelLastItem
+ RequestCancelItem
RequestDuplicateLastItem
RequestDiscount
RequestExit
Index: gnue-pos/src/Handler.py
diff -c gnue-pos/src/Handler.py:1.4 gnue-pos/src/Handler.py:1.5
*** gnue-pos/src/Handler.py:1.4 Thu Jul 3 00:30:33 2003
--- gnue-pos/src/Handler.py Fri Jul 4 01:37:40 2003
***************
*** 26,32 ****
# NOTES:
#
! import os, sys
from gnue.common.apps import GDebug
from gnue.common.apps import GConfig
--- 26,32 ----
# NOTES:
#
! import os, sys, types
from gnue.common.apps import GDebug
from gnue.common.apps import GConfig
***************
*** 47,58 ****
self.__loggedin = 0
self.__quantityRequestedFlag = 0
self.__ticket = 0
!
! self.__taxTotal = 0
! self.__subTotal = 0
! self.__payments = 0
! self.__taxExempt = 0
! self.__layaway = 0
self.registerEventListeners( {
'BeginTicket': self._BeginTicket,
--- 47,53 ----
self.__loggedin = 0
self.__quantityRequestedFlag = 0
self.__ticket = 0
! self.__quantity = 1
self.registerEventListeners( {
'BeginTicket': self._BeginTicket,
***************
*** 67,72 ****
--- 62,68 ----
'PasswordEntered': self._PasswordEntered,
'SKUEntered': self._SKUEntered,
'QuantityEntered': self._QuantityEntered,
+ 'CancelItemEntered': self._CancelItemEntered,
'RequestLogin': self._RequestLogin,
'RequestPassword': self._RequestPassword,
***************
*** 79,85 ****
'RequestPriceLookup': self._RequestPriceLookup,
'RequestTender': self._RequestTender,
'RequestRemoveItem': self._RequestRemoveItem,
! 'RequestCancelLastItem': self._RequestCancelLastItem,
'RequestDuplicateLastItem': self._RequestDuplicateLastItem,
'RequestDiscount': self._RequestDiscount,
'RequestLogOut': self._RequestLogOut,
--- 75,81 ----
'RequestPriceLookup': self._RequestPriceLookup,
'RequestTender': self._RequestTender,
'RequestRemoveItem': self._RequestRemoveItem,
! 'RequestCancelItem': self._RequestCancelItem,
'RequestDuplicateLastItem': self._RequestDuplicateLastItem,
'RequestDiscount': self._RequestDiscount,
'RequestLogOut': self._RequestLogOut,
***************
*** 112,132 ****
response="PasswordEntered")
def _PasswordEntered(self, event):
self.__loggedin = 1
self.dispatchEvent('RequestSKU')
- def _SKUEntered(self, event):
- self.__quantityRequestedFlag = 0
if not hasattr(event,'next'):
event.next = 'RequestSKU'
! print event.next
! if event.value:
if not self.__ticket:
self.dispatchEvent('RequestBeginTicket')
! rs = self.dispatchEvent('ProcessSKU', sku=event.value, origEvent=event)
else:
if not self.__ticket and event.next in ('RequestTaxExemption',):
self.dispatchEvent('RequestBeginTicket')
--- 108,135 ----
response="PasswordEntered")
def _PasswordEntered(self, event):
+ rs = self.dispatchEvent('VerifyLogin', login=self.__login,
password=event.value)
+ if rs:
+ self.dispatchEvent('RequestLogin')
+ return
self.__loggedin = 1
self.dispatchEvent('RequestSKU')
+ def _SKUEntered(self, event):
if not hasattr(event,'next'):
event.next = 'RequestSKU'
! if event.next == 'RequestQuantity':
! rs = 0
! if not self.__ticket:
! self.dispatchEvent('RequestBeginTicket')
! self.dispatchEvent('RequestQuantity')
! elif event.value:
if not self.__ticket:
self.dispatchEvent('RequestBeginTicket')
! rs = self.dispatchEvent('ProcessSKU', sku=event.value, origEvent=event,
quantity=self.__quantity)
else:
if not self.__ticket and event.next in ('RequestTaxExemption',):
self.dispatchEvent('RequestBeginTicket')
***************
*** 138,151 ****
def _QuantityEntered(self, event):
! self.__loggedin = 1
! self.__quantityRequestedFlag = 1
! self.dispatchEvent('UpdateQuantity', quantity=float(event.value))
try:
self.__quantity = float(event.value)
except ValueError:
self.dispatchEvent('RequestQuantity')
def _BeginManualItem(self, event):
self.__manualSKU = event.sku
if self.__ManualItemSKUisDepartment:
--- 141,174 ----
def _QuantityEntered(self, event):
! if not event.value:
! self.dispatchEvent('RequestSKU')
try:
self.__quantity = float(event.value)
+ self.dispatchEvent('RequestSKU')
except ValueError:
self.dispatchEvent('RequestQuantity')
+ def _CancelItemEntered(self, event):
+ if not event.value:
+ self.dispatchEvent('RequestSKU')
+ return
+ v = int(event.value) - 1
+ if v >= len(self.__items):
+ self.dispatchEvent('RequestCancelItem')
+ elif not hasattr(self.__items[v],'CANCELED'):
+ attrs = {}
+ for attr, value in event.__dict__.items():
+ if attr[0] != '_' and type(value) != types.MethodType:
+ attrs[attr] = value
+ attrs['origlineitem'] = v + 1
+ attrs['lineitem'] = len(self.__items)
+ attrs['extended'] *= -1
+ attrs['each'] *= -1
+ self.__items[v].CANCELED = 1
+ self.dispatchEvent('CancelItem', **attrs)
+
+
def _BeginManualItem(self, event):
self.__manualSKU = event.sku
if self.__ManualItemSKUisDepartment:
***************
*** 196,215 ****
def _RequestSKU(self, event):
! self.dispatchEvent('Prompt', label='Enter %s:' % gConfig('SKULabel'),
response='SKUEntered',
! endingEvents=('RequestQuantity',
! 'RequestSuspendTicket',
! 'RequestResumeTicket',
'RequestCancelTicket',
- 'RequestPriceLookup',
'RequestTender',
'RequestRemoveItem',
! 'RequestCancelLastItem',
'RequestDuplicateLastItem',
! 'RequestDiscount',
! 'RequestTaxExemption',
! 'RequestLogOut',
! 'RequestExit'))
def _RequestQuantity(self, event):
self.dispatchEvent('Prompt', response='QuantityEntered', label='Enter
Quantity:')
--- 219,242 ----
def _RequestSKU(self, event):
! endingEvents = [ 'RequestQuantity',
! 'RequestPriceLookup',
! 'RequestResumeTicket',
! 'RequestTaxExemption',
! 'RequestLogOut',
! 'RequestExit' ]
!
! if self.__ticket:
! endingEvents += ['RequestSuspendTicket',
'RequestCancelTicket',
'RequestTender',
'RequestRemoveItem',
! 'RequestCancelItem',
'RequestDuplicateLastItem',
! 'RequestDiscount']
!
! self.dispatchEvent('Prompt', label='Enter %s:' % gConfig('SKULabel'),
response='SKUEntered',
! endingEvents=endingEvents)
def _RequestQuantity(self, event):
self.dispatchEvent('Prompt', response='QuantityEntered', label='Enter
Quantity:')
***************
*** 232,239 ****
def _RequestRemoveItem(self, event):
pass
! def _RequestCancelLastItem(self, event):
! pass
def _RequestDuplicateLastItem(self, event):
pass
--- 259,266 ----
def _RequestRemoveItem(self, event):
pass
! def _RequestCancelItem(self, event):
! self.dispatchEvent('Prompt', response='CancelItemEntered', label='Enter
Line # to Cancel:', default=len(self.__items))
def _RequestDuplicateLastItem(self, event):
pass
***************
*** 261,284 ****
self.dispatchEvent('Prompt', label='Enter Base Price:',
response='ManualBasePriceEntered')
def _RequestManualPrice(self, event):
! self.dispatchEvent('Prompt', label='Enter Sales Price:',
response='ManualPriceEntered')
def _RequestEndManualItem(self, event):
self.dispatchEvent('EndManualItem', sku=self.__manualSKU,
description=self.__manualDescription,
department=self.__manualDepartment,
baseprice=self.__manualBasePrice,
price=self.__manualPrice,
taxable=1)
self.dispatchEvent('AddTicketItem', department=self.__manualDepartment,
sku=self.__manualSKU,
! quantity=1,
description=self.__manualDescription,
base=self.__manualBasePrice,
each=self.__manualPrice,
! extended=self.__manualPrice,
! taxable=1)
self.dispatchEvent('RequestSKU')
def _BeginTicket(self, event):
--- 288,318 ----
self.dispatchEvent('Prompt', label='Enter Base Price:',
response='ManualBasePriceEntered')
def _RequestManualPrice(self, event):
! if hasattr(event,'default'):
! self.dispatchEvent('Prompt', label='Enter Sales Price:',
response='ManualPriceEntered', default=event.default)
! else:
! self.dispatchEvent('Prompt', label='Enter Sales Price:',
response='ManualPriceEntered')
!
def _RequestEndManualItem(self, event):
self.dispatchEvent('EndManualItem', sku=self.__manualSKU,
description=self.__manualDescription,
department=self.__manualDepartment,
baseprice=self.__manualBasePrice,
+ quantity=self.__quantity,
price=self.__manualPrice,
taxable=1)
self.dispatchEvent('AddTicketItem', department=self.__manualDepartment,
sku=self.__manualSKU,
! quantity=self.__quantity,
description=self.__manualDescription,
base=self.__manualBasePrice,
each=self.__manualPrice,
! extended=round(self.__manualPrice *
self.__quantity,2),
! taxable=1,
! lineitem=len(self.__items)+1)
! self.__quantity = 1
self.dispatchEvent('RequestSKU')
def _BeginTicket(self, event):
***************
*** 288,293 ****
--- 322,328 ----
self.__payments = 0
self.__taxExempt = 0
self.__layaway = 0
+ self.__items = []
self.dispatchEvent('UpdateTotal', field="subtotal", amount=0.0)
self.dispatchEvent('UpdateTotal', field="tax", amount=0.0)
self.dispatchEvent('UpdateTotal', field="total", amount=0.0)
***************
*** 304,309 ****
--- 339,345 ----
self.__subTotal += event.extended
if event.taxable:
self.__taxTotal += event.extended
+ self.__items.append(event)
self._updateTotals()
def _CancelTicketItem(self, event):
Index: gnue-pos/src/POSClient.py
diff -c gnue-pos/src/POSClient.py:1.10 gnue-pos/src/POSClient.py:1.11
*** gnue-pos/src/POSClient.py:1.10 Wed Jul 2 11:13:06 2003
--- gnue-pos/src/POSClient.py Fri Jul 4 01:37:40 2003
***************
*** 70,76 ****
# Initialize interfaces
#
self.frontend = dyn_import("gnue.pointofsale.frontends.wx").Driver(self)
! self.backend =
dyn_import("gnue.pointofsale.backends.gnue_sb").Driver(self)
if hasattr(self.frontend,'handleStartupError') and not
self.OPTIONS['debug_level']:
self.handleStartupError = self.frontend.handleStartupError
--- 70,83 ----
# Initialize interfaces
#
self.frontend = dyn_import("gnue.pointofsale.frontends.wx").Driver(self)
! try:
! self.backend = dyn_import("gnue.pointofsale.backends.%s" %
gConfig('BackendProvider')).Driver(self)
! except ImportError, mesg1:
! try:
! self.backend = dyn_import(gConfig('BackendProvider')).Driver(self)
! except ImportError, mesg2:
! self.handleStartupError('Unable to load backend
provider:\n\n%s\n\n%s' % (mesg1, mesg2))
!
if hasattr(self.frontend,'handleStartupError') and not
self.OPTIONS['debug_level']:
self.handleStartupError = self.frontend.handleStartupError
Index: gnue-pos/src/backends/Base/Driver.py
diff -c gnue-pos/src/backends/Base/Driver.py:1.1
gnue-pos/src/backends/Base/Driver.py:1.2
*** gnue-pos/src/backends/Base/Driver.py:1.1 Tue Jun 17 18:30:52 2003
--- gnue-pos/src/backends/Base/Driver.py Fri Jul 4 01:37:40 2003
***************
*** 28,33 ****
--- 28,37 ----
#
from gnue.common.events.EventAware import EventAware
+ from gnue.common.datasources import GConditions
+ from gnue.common.datasources.GDataSource import DataSourceWrapper
+
+ CONN = gConfig('BackendConnection')
class Driver(EventAware):
***************
*** 52,55 ****
--- 56,79 ----
self.init()
+
+ def _getResultSet(self, table, fields, conditions={}):
+ datasource = DataSourceWrapper(self.instance.connections,
+ fields=fields,
+ attributes={'connection': CONN,
+ 'name': 'dts%s' % table,
+ 'table': table } )
+ resultset = datasource.createResultSet(
+ conditions=conditions,
+ readOnly=1)
+ return resultset
+
+ def _createResultSet(self, table, fields):
+ datasource = DataSourceWrapper(self.instance.connections,
+ fields=fields,
+ attributes={'connection': CONN,
+ 'name': 'dts%s' % table,
+ 'table': table } )
+ resultset = datasource.createEmptyResultSet()
+ return resultset
Index: gnue-pos/src/backends/gnue_sb/Driver.py
diff -c gnue-pos/src/backends/gnue_sb/Driver.py:1.2
gnue-pos/src/backends/gnue_sb/Driver.py:1.3
*** gnue-pos/src/backends/gnue_sb/Driver.py:1.2 Mon Jun 30 19:59:03 2003
--- gnue-pos/src/backends/gnue_sb/Driver.py Fri Jul 4 01:37:40 2003
***************
*** 29,42 ****
#
from gnue.pointofsale.backends.Base.Driver import Driver as BaseDriver
! from gnue.common.datasources import GConditions, GDataSource
class Driver(BaseDriver):
def init(self):
self.registerEventListeners({
'ProcessSKU': self._ProcessSKU,
'EndManualItem': self._EndManualItem,
! 'RequestBeginTicket': self._RequestBeginTicket })
def _ProcessSKU(self, event):
sku = event.sku
--- 29,48 ----
#
from gnue.pointofsale.backends.Base.Driver import Driver as BaseDriver
! from gnue.common.datasources import GConditions
! from gnue.common.datasources.GDataSource import DataSourceWrapper
!
! CONN = gConfig('BackendConnection')
class Driver(BaseDriver):
def init(self):
self.registerEventListeners({
'ProcessSKU': self._ProcessSKU,
'EndManualItem': self._EndManualItem,
! 'RequestBeginTicket': self._RequestBeginTicket,
! ## 'EndTicket': self._EndTicket,
! ## 'CancelTicket': self._CancelTicket
! })
def _ProcessSKU(self, event):
sku = event.sku
***************
*** 44,62 ****
event.setResult(1)
if 1: # Manually Keyed Item
! origEvent.dispatchAfter('BeginManualItem', sku=sku)
event.setResult(0)
else:
! self.dispatchEvent('AddItem', sku=123, description='Foobar', price=10,
taxable=1)
if 0: # requiresQuantity
origEvent.dispatchAfter('RequestQuantity')
-
def _RequestBeginTicket(self, event):
self.dispatchEvent('BeginTicket', serial=123456)
def _EndManualItem(self, event):
! pass
\ No newline at end of file
--- 50,67 ----
event.setResult(1)
if 1: # Manually Keyed Item
! origEvent.dispatchAfter('BeginManualItem', sku=sku,
quantity=event.quantity)
event.setResult(0)
else:
! self.dispatchEvent('AddItem', sku=123, description='Foobar',
quantity=event.quantity, price=10, taxable=1)
if 0: # requiresQuantity
origEvent.dispatchAfter('RequestQuantity')
def _RequestBeginTicket(self, event):
self.dispatchEvent('BeginTicket', serial=123456)
def _EndManualItem(self, event):
! pass
Index: gnue-pos/src/frontends/wx/Driver.py
diff -c gnue-pos/src/frontends/wx/Driver.py:1.10
gnue-pos/src/frontends/wx/Driver.py:1.11
*** gnue-pos/src/frontends/wx/Driver.py:1.10 Thu Jul 3 11:53:45 2003
--- gnue-pos/src/frontends/wx/Driver.py Fri Jul 4 01:37:40 2003
***************
*** 48,54 ****
LOGIN_COLOR = wxColour(255,220,220)
LOGIN_EVENTS = ('LoginEntered','PasswordEntered')
SPECIAL_COLOR = wxColour(220,255,220)
! SPECIAL_EVENTS = ('TaxExemptionEntered',)
class Driver(BaseDriver):
--- 48,54 ----
LOGIN_COLOR = wxColour(255,220,220)
LOGIN_EVENTS = ('LoginEntered','PasswordEntered')
SPECIAL_COLOR = wxColour(220,255,220)
! SPECIAL_EVENTS = ('TaxExemptionEntered','CancelItemEntered',
'QuantityEntered')
class Driver(BaseDriver):
***************
*** 58,71 ****
('total',_('Total')),
('balance',_('Balance')) )
! self.receiptColumns = ( ('department',_('Dept'), '%s', 0),
! ('sku',_('Code'), '%s', 0),
! ('quantity',_('Units'), '%s', 0),
! ('description',_('Description'), '%s', 0),
! ('base',_('Base Price'), dollarFormat, 1),
! ('each',_('Price/Unit'), dollarFormat, 1),
! ('extended',_('Extended'), dollarFormat, 1),
! ('taxable','T', '%s', 0) )
self.totalFieldMapping = {}
--- 58,72 ----
('total',_('Total')),
('balance',_('Balance')) )
! self.receiptColumns = ( ('lineitem',_('#'), '%s', 1, 1),
! ('department',_('Dept'), '%s', 0, 0),
! ('sku',_('Code'), '%s', 0, 0),
! ('quantity',_('Units'), '%s', 0, 0),
! ('description',_('Description'), '%s', 0, 0),
! ('base',_('Base Price'), dollarFormat, 1, 0),
! ('each',_('Price/Unit'), dollarFormat, 1, 0),
! ('extended',_('Extended'), dollarFormat, 1, 0),
! ('taxable',_('Tax?'), 'bool', 0, 1) )
self.totalFieldMapping = {}
***************
*** 73,78 ****
--- 74,80 ----
self.registerEventListeners( {
'Prompt': self._Prompt,
+ 'EmployeeLogin': self._EmployeeLogin,
'BeginTicket': self._BeginTicket,
'EndTicket': self._EndTicket,
'AddTicketItem': self._AddTicketItem,
***************
*** 102,108 ****
self.inputField.SetBackgroundColour(BASE_COLOR)
try:
! default = event.default
except:
default = ""
--- 104,110 ----
self.inputField.SetBackgroundColour(BASE_COLOR)
try:
! default = str(event.default)
except:
default = ""
***************
*** 130,138 ****
# And set each column
j = 0
! for field, foo, format, bar in self.receiptColumns:
try:
! self.receiptList.SetStringItem(i, j, format % event.__dict__[field])
except KeyError:
pass
j += 1
--- 132,144 ----
# And set each column
j = 0
! for field, foo, format, bar, none in self.receiptColumns:
try:
! v = event.__dict__[field]
! if format == 'bool':
! format = '%s'
! v = v and 'Yes' or 'No'
! self.receiptList.SetStringItem(i, j, format % v)
except KeyError:
pass
j += 1
***************
*** 154,160 ****
EVT_SIZE(frame, self.__OnSize)
self.statusbar = frame.CreateStatusBar(3)
! self.statusbar.SetStatusText ('Clerk: 100 (Jason)', STATUS_USER)
topPanel = wxPanel(frame, -1)
topSizer = wxBoxSizer(wxHORIZONTAL)
--- 160,166 ----
EVT_SIZE(frame, self.__OnSize)
self.statusbar = frame.CreateStatusBar(3)
! self.statusbar.SetStatusText ('Not Logged In', STATUS_USER)
topPanel = wxPanel(frame, -1)
topSizer = wxBoxSizer(wxHORIZONTAL)
***************
*** 171,179 ****
# Add the columns for our receipt list
i = 0
! for field, description, format, rightJustify in self.receiptColumns:
self.receiptList.InsertColumn(i, description,
format = wxLIST_FORMAT_RIGHT and rightJustify or wxLIST_FORMAT_LEFT)
i += 1
totalPanel2 = wxPanel(bottomPanel, -1, style=wxRAISED_BORDER)
--- 177,188 ----
# Add the columns for our receipt list
i = 0
! for field, description, format, rightJustify, small in
self.receiptColumns:
self.receiptList.InsertColumn(i, description,
format = wxLIST_FORMAT_RIGHT and rightJustify or wxLIST_FORMAT_LEFT)
+ if small:
+ self.receiptList.SetColumnWidth(i,
self.receiptList.GetColumnWidth(i)/2)
+
i += 1
totalPanel2 = wxPanel(bottomPanel, -1, style=wxRAISED_BORDER)
***************
*** 234,239 ****
--- 243,253 ----
self.__intext = 1
EVT_CHAR(self.inputField, self.__ontext)
+
+ def _EmployeeLogin(self, event):
+ self.statusbar.SetStatusText ('Clerk: %s (%s)' % (event.name,
event.login), STATUS_USER)
+
+
def __OnSize(self, event):
self.frame.Layout()
w = self.receiptList.GetClientSizeTuple()[0]
***************
*** 257,270 ****
self.inputField.Clear()
elif _specialKeys.has_key(key) and _specialKeys[key] in
self.__endingEvents:
self.dispatchEvent(self.__event, value=self.inputField.GetValue(),
next=_specialKeys[key])
else:
event.Skip()
def __ontext(self, event):
! if event.GetKeyCode() != 32:
wxCallAfter(self.__fixtext)
event.Skip()
def __fixtext(self):
ip = self.inputField.GetInsertionPoint()
self.inputField.SetValue(string.capwords(self.inputField.GetValue()))
--- 271,309 ----
self.inputField.Clear()
elif _specialKeys.has_key(key) and _specialKeys[key] in
self.__endingEvents:
self.dispatchEvent(self.__event, value=self.inputField.GetValue(),
next=_specialKeys[key])
+ elif self.__event == 'CancelItemEntered' and key in (WXK_UP, WXK_DOWN):
+ c = self.receiptList.GetItemCount()
+ for r in range(c):
+ if self.receiptList.GetItemState(r,wxLIST_STATE_SELECTED):
+ break
+
+ st = ""
+
self.receiptList.SetItemState(r,0,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED)
+ if key == WXK_UP:
+ if r > 0:
+ st = "%d" % (r)
+ else:
+ st = "1"
+ elif key == WXK_DOWN:
+ if r < c - 1:
+ st = "%d" % (r + 2)
+ else:
+ st = "%d" % (c)
+ if len(st):
+ self.inputField.SetValue(st)
+ self.inputField.SetSelection(0, len(st))
+
self.receiptList.SetItemState(int(st)-1,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED,wxLIST_STATE_SELECTED|wxLIST_STATE_FOCUSED)
+
else:
event.Skip()
def __ontext(self, event):
! key = event.GetKeyCode()
! if key != 32:
wxCallAfter(self.__fixtext)
event.Skip()
+
def __fixtext(self):
ip = self.inputField.GetInsertionPoint()
self.inputField.SetValue(string.capwords(self.inputField.GetValue()))
***************
*** 272,281 ****
_specialKeys = {
WXK_MULTIPLY: 'RequestQuantity',
! WXK_DIVIDE: 'RequestTender',
WXK_SUBTRACT: 'RequestCancelLastItem',
WXK_ADD: 'RequestDuplicateLastItem',
! WXK_F12: 'RequestTaxExemption',
}
--- 311,329 ----
_specialKeys = {
+ WXK_F12: 'RequestTaxExemption',
+
WXK_MULTIPLY: 'RequestQuantity',
! WXK_DIVIDE: 'RequestCancelItem',
WXK_SUBTRACT: 'RequestCancelLastItem',
WXK_ADD: 'RequestDuplicateLastItem',
!
! # Grrrrr.... WX's keymaps above don't seem to be right
! 391: 'RequestQuantity',
! 396: 'RequestCancelItem',
! 394: 'RequestCancelLastItem',
! 392: 'RequestDuplicateLastItem',
!
!
}