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