commit-gnue
[Top][All Lists]
Advanced

[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',
! 
! 
    }
  




reply via email to

[Prev in Thread] Current Thread [Next in Thread]