CVS: anygui/lib/anygui/backends dwgui.py,1.5,1.6

Robin Becker <[email protected]> Wed, 06 Nov 2002 00:42:24 -0800
Newsgroups gmane.comp.python.anygui.cvs
Message-ID <[email protected]>
Update of /cvsroot/anygui/anygui/lib/anygui/backends
In directory usw-pr-cvs1:/tmp/cvs-serv29356

Modified Files:
	dwgui.py 
Log Message:
Clean up dispatch, search for the leak ;(

Index: dwgui.py
===================================================================
RCS file: /cvsroot/anygui/anygui/lib/anygui/backends/dwgui.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -r1.5 -r1.6
*** dwgui.py	4 Nov 2002 19:47:25 -0000	1.5
--- dwgui.py	6 Nov 2002 08:42:22 -0000	1.6
***************
*** 13,16 ****
--- 13,20 ----
    RadioButtonWrapper
    CheckBoxWrapper
+   ProgressBarWrapper
+   ImageWrapper
+   Resource
+   inlineResource
  '''.split()
  
***************
*** 90,94 ****
  
  GetLastError = kernel32.GetLastError
! _verbose=0
  if _verbose:
      setLogFile('/tmp/dbg.txt')
--- 94,98 ----
  
  GetLastError = kernel32.GetLastError
! _verbose=1
  if _verbose:
      setLogFile('/tmp/dbg.txt')
***************
*** 203,207 ****
              pass
          except:
!             logTraceback(1)
          return l,t,w,h
  
--- 207,211 ----
              pass
          except:
!             logTraceback(None)
          return l,t,w,h
  
***************
*** 325,329 ****
          if (wParam >> 16) == BN_CLICKED:
              #self.do_action()
!             send(self.proxy, 'click')
  
  ##################################################################
--- 329,333 ----
          if (wParam >> 16) == BN_CLICKED:
              #self.do_action()
!             return send(self.proxy, 'click')
  
  ##################################################################
***************
*** 364,379 ****
          if wParam >> 16 == LBN_SELCHANGE:
              #self.do_action()
!             send(self.proxy, 'select')
  
  ##################################################################
! class ToggleButtonWrapper(ComponentWrapper):
! 
!     def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
!         # lParam: handle of control (or NULL, if not from a control)
!         # HIWORD(wParam): notification code
!         # LOWORD(wParam): id of menu item, control, or accelerator
!         if (wParam >> 16) == BN_CLICKED:
!             #self.do_action()
!             send(self.proxy, 'click')
  
      def setOn(self,on):
--- 368,375 ----
          if wParam >> 16 == LBN_SELCHANGE:
              #self.do_action()
!             return send(self.proxy, 'select')
  
  ##################################################################
! class ToggleButtonWrapper(ButtonWrapper):
  
      def setOn(self,on):
***************
*** 393,404 ****
          return 0
  
-     def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
-         # lParam: handle of control (or NULL, if not from a control)
-         # HIWORD(wParam): notification code
-         # LOWORD(wParam): id of menu item, control, or accelerator
-         if (wParam >> 16) != BN_CLICKED:
-             return
-         send(self.proxy, 'click')
- 
  class CheckBoxWrapper(ToggleButtonWrapper):
      _wndclass = "BUTTON"
--- 389,392 ----
***************
*** 429,435 ****
          # HIWORD(wParam): notification code
          # LOWORD(wParam): id of menu item, control, or accelerator
!         if (wParam >> 16) != BN_CLICKED:
!             return
!         send(self.proxy, 'click')
  
  ##################################################################
--- 417,422 ----
          # HIWORD(wParam): notification code
          # LOWORD(wParam): id of menu item, control, or accelerator
!         if (wParam >> 16) != BN_CLICKED: return -1
!         return send(self.proxy, 'click')
  
  ##################################################################
***************
*** 495,507 ****
              user32.SendMessage(self.widget, EM_SETREADONLY, not editable and 1 or 0, 0)
  
- ##    def _ensure_events(self):
- ##        if self.widget:
- ##            EVT_TEXT_ENTER(self.widget, self._msw_id, self._msw_enterkey)
- 
- ##    def _msw_enterkey(self, event):
- ##        self.do_action()
- 
      def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
!         pass
  
  # FIXME: Inheriting TextField overrides TextArea defaults.
--- 482,487 ----
              user32.SendMessage(self.widget, EM_SETREADONLY, not editable and 1 or 0, 0)
  
      def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
!         return 0
  
  # FIXME: Inheriting TextField overrides TextArea defaults.
***************
*** 517,535 ****
  
      def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
!         #log("ContainerMixin _WM_COMMAND called for %s"%self)
          # lParam: handle of control (or NULL, if not from a control)
          # HIWORD(wParam): notification code
          # LOWORD(wParam): id of menu item, control, or accelerator
-         app = application()
          try:
              child_window = self.widget_map[lParam]
          except KeyError:
!             #log("NO SUCH CHILD WINDOW %s"%lParam)
              # we receive (when running test_textfield.py)
              # EN_CHANGE (0x300) and EN_UPDATE (0x400) notifications
              # here even before the call to CreateWindow returns.
!             return
!         #log("Dispatching to child %s"%child_window)
!         child_window._WM_COMMAND(hwnd, msg, wParam, lParam)
  
  class FrameWrapper(ComponentWrapper,ContainerMixin):
--- 497,517 ----
  
      def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
!         if _verbose: log("ContainerMixin _WM_COMMAND called for %s"%self)
          # lParam: handle of control (or NULL, if not from a control)
          # HIWORD(wParam): notification code
          # LOWORD(wParam): id of menu item, control, or accelerator
          try:
+             app = application()
              child_window = self.widget_map[lParam]
          except KeyError:
!             if _verbose: log("NO SUCH CHILD WINDOW %s"%lParam)
              # we receive (when running test_textfield.py)
              # EN_CHANGE (0x300) and EN_UPDATE (0x400) notifications
              # here even before the call to CreateWindow returns.
!             return None
!         except:
!             logTraceback(None)
!         if _verbose: log("Dispatching to child %s"%child_window)
!         return child_window._WM_COMMAND(hwnd, msg, wParam, lParam)
  
  class FrameWrapper(ComponentWrapper,ContainerMixin):
***************
*** 559,563 ****
      def _WM_SIZE(self, hwnd, msg, wParam, lParam):
          # Proxy handles resizing.
!         pass
  
  
--- 541,545 ----
      def _WM_SIZE(self, hwnd, msg, wParam, lParam):
          # Proxy handles resizing.
!         return 0
  
  
***************
*** 576,580 ****
                      IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE)
              except:
!                 logTraceback(0)
                  from anygui.backends.dwgui import _lastErrorMessage 
                  log(_lastErrorMessage())
--- 558,562 ----
                      IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE)
              except:
!                 logTraceback(None)
                  from anygui.backends.dwgui import _lastErrorMessage 
                  log(_lastErrorMessage())
***************
*** 607,611 ****
  class ImageWrapper(ComponentWrapper):
      _win_style = WS_CHILD | WS_VISIBLE
!     _wndclass = "dw.anygui.PythonWindow"
  
      def _WM_PAINT(self, hwnd, msg, wParam, lParam):
--- 589,593 ----
  class ImageWrapper(ComponentWrapper):
      _win_style = WS_CHILD | WS_VISIBLE
!     _wndclass = "dw.anygui.Image"
  
      def _WM_PAINT(self, hwnd, msg, wParam, lParam):
***************
*** 639,646 ****
--- 621,630 ----
  
      def __init__(self,*args,**kws):
+         ContainerMixin.__init__(self)
          ComponentWrapper.__init__(self,*args,**kws)
          self.widget_map = {}
  
      def getGeometry(self):
+         if not self.widget: return 0,0,0,0
          r = t_rect()
          user32.GetWindowRect(self.widget,r)
***************
*** 682,693 ****
  
      def getTitle(self):
          return ComponentWrapper.getText(self)
  
      def widgetSetUp(self):
!         Application.widget_map[self.widget] = self
!         user32.SendMessage(self.widget,
!                              WM_SETFONT,
!                              self._hfont,
!                              0)
      def _WM_SIZE(self, hwnd, msg, wParam, lParam):
          w, h = lParam & 0xFFFF, lParam >> 16
--- 666,681 ----
  
      def getTitle(self):
+         if not self.widget: return
          return ComponentWrapper.getText(self)
  
      def widgetSetUp(self):
!         if _verbose: log('Windowwrapper widgetSetup',str(self),'application()',application(),'isRunning()',application().isRunning(),'widget',getattr(self,'widget',None))
!         application().widget_map[self.widget] = self
!         user32.SendMessage(self.widget, WM_SETFONT, self._hfont, 0)
! 
!     def internalProd(self):
!         if _verbose: log('internalProd',str(self))
!         self.proxy.push(blocked=['container'])
! 
      def _WM_SIZE(self, hwnd, msg, wParam, lParam):
          w, h = lParam & 0xFFFF, lParam >> 16
***************
*** 709,712 ****
--- 697,701 ----
          if (dw,dh) == (0,0): return
          self.proxy.resized(dw,dh)
+         return 0
  
      def _WM_CLOSE(self, hwnd, msg, wParam, lParam):
***************
*** 715,724 ****
--- 704,746 ----
          return 1
  
+     def _WM_COMMAND(self, hwnd, msg, wParam, lParam):
+         if _verbose: log('WindowWrapper: _WM_COMMAND',self,hwnd,msg,wParam,lParam)
+         ContainerMixin._WM_COMMAND(self, hwnd, msg, wParam, lParam)
+ 
  ################################################################
+ def _dispatch_WM_DESTROY(window,hwnd,msg,wParam,lParam):
+     app = application()
+     app.remove(window)
+     app.internalRemove()
+     return 0
+ 
+ def _dispatch_WM_CLOSE(window,hwnd,msg,wParam,lParam):
+     return window._WM_CLOSE(hwnd, msg, wParam, lParam)
+ 
+ def _dispatch_WM_SIZE(window,hwnd,msg,wParam,lParam):
+     return window._WM_SIZE(hwnd, msg, wParam, lParam)
+ 
+ def _dispatch_WM_COMMAND(window,hwnd,msg,wParam,lParam):
+     return window._WM_COMMAND(hwnd, msg, wParam, lParam)
+ 
+ def _dispatch_WM_PAINT(window,hwnd,msg,wParam,lParam):
+     return window._WM_PAINT(hwnd, msg, wParam, lParam)
+ 
+ def _dispatch_DEFAULT(window,hwnd,msg,wParam,lParam):
+     return user32.DefWindowProc(hwnd, msg, wParam, lParam)
+ 
  class Application(AbstractApplication):
      widget_map = {} # maps top level window handles to window instances
      _wndclass = None
+     _dispatch = {
+                 WM_DESTROY: _dispatch_WM_DESTROY,
+                 WM_CLOSE: _dispatch_WM_CLOSE,
+                 WM_SIZE: _dispatch_WM_SIZE,
+                 WM_COMMAND: _dispatch_WM_COMMAND,
+                 WM_DESTROY: _dispatch_WM_PAINT,
+                 }
  
      def __init__(self):
+         if _verbose: log('Application.__init__:start',self)
          AbstractApplication.__init__(self)
          if not self._wndclass: self._register_class()
***************
*** 727,732 ****
--- 749,756 ----
          global _app
          _app = self
+         if _verbose: log('Application.__init__:end',self)
  
      def _register_class(self):
+         if _verbose: log('Application._register_class:start',self)
          class WNDCLASS(structob.struct_object):
              oracle = structob.Oracle (
***************
*** 759,762 ****
--- 783,787 ----
          self.__class__._wndclass = user32.RegisterClass(wc)
          assert self.__class__._wndclass, "RegisterClass --> %d=%s ie\n%s" % (GetLastError(), hex(GetLastError()), _lastErrorMessage())
+         if _verbose: log('Application._register_class:end',self)
  
      def _wndproc(self, hwnd, msg, wParam, lParam):
***************
*** 767,792 ****
              if _verbose: log("\tNO WINDOW TO DISPATCH???")
              return user32.DefWindowProc(hwnd, msg, wParam, lParam)
!         # there should probably be a better way to dispatch messages
!         if msg == WM_DESTROY:
!             app = application()
!             app.remove(window)
!             app.internalRemove()
!         if msg == WM_CLOSE:
!             if _verbose: log("\t_WM_COMMAND to %s %s" % (window.__class__.__name__,window))
!             return window._WM_CLOSE(hwnd, msg, wParam, lParam)
!         if msg == WM_SIZE:
!             if _verbose: log("\t_WM_SIZE to %s %s" % (window.__class__.__name__,window))
!             return window._WM_SIZE(hwnd, msg, wParam, lParam)
!         if msg == WM_COMMAND:
!             if _verbose: log("\t_WM_COMMAND to %s %s" % (window.__class__.__name__,window))
!             return window._WM_COMMAND(hwnd, msg, wParam, lParam)
!         if msg == WM_PAINT:
!             if _verbose: log("\t_WM_PAINT to %s %s" % (window.__class__.__name__,window))
!             return window._WM_PAINT(hwnd, msg, wParam, lParam)
!         if _verbose: log("\tDefaultProc() %s %s" % (window.__class__.__name__,window))
!         return user32.DefWindowProc(hwnd, msg, wParam, lParam)
  
      def internalRun(self):
!         class MSG (structob.struct_object):
              oracle = structob.Oracle (
                  'windows message',
--- 792,804 ----
              if _verbose: log("\tNO WINDOW TO DISPATCH???")
              return user32.DefWindowProc(hwnd, msg, wParam, lParam)
!         _dispatch = self._dispatch.get(msg,_dispatch_DEFAULT)
!         x = _dispatch(window,hwnd,msg,wParam,lParam)
!         if _verbose: log("\tdispatch %s to %s %s\n" % (_dispatch.__name__[9:],window.__class__.__name__,window),"\t ==>",x)
!         return x
! 
  
      def internalRun(self):
!         if _verbose: log('internalRun:Begin',str(self))
!         class MSG(structob.struct_object):
              oracle = structob.Oracle (
                  'windows message',
***************
*** 801,807 ****
                  )
          msg = MSG()
!         while self._windows and user32.GetMessage(msg, 0, 0, 0):
!             user32.TranslateMessage(msg)
!             user32.DispatchMessage(msg)
  
      def internalRemove(self):
--- 813,825 ----
                  )
          msg = MSG()
!         while user32.GetMessage(msg, 0, 0, 0):
!             try:
!                 if _verbose: log('internalRun: loopstart',msg)
!                 user32.TranslateMessage(msg)
!                 user32.DispatchMessage(msg)
!                 log('internalRun: loopend')
!             except:
!                 logTraceback(None)
!         log('internalRun: finish')
  
      def internalRemove(self):



-------------------------------------------------------
This sf.net email is sponsored by: See the NEW Palm 
Tungsten T handheld. Power & Color in a compact size!
http://ads.sourceforge.net/cgi-bin/redirect.pl?palm0001en