mirror of
https://github.com/python/cpython.git
synced 2025-08-03 00:23:06 +00:00
minsize->getminsize
Keyboard focus policy more?
This commit is contained in:
parent
e11d4ccbb6
commit
e825f15900
2 changed files with 102 additions and 62 deletions
|
@ -2,23 +2,23 @@
|
||||||
# It is the root of the tree.
|
# It is the root of the tree.
|
||||||
# It should have exactly one child when realized.
|
# It should have exactly one child when realized.
|
||||||
#
|
#
|
||||||
# There is also some support for a standard main loop here.
|
# There is also an alternative interface to "mainloop" here.
|
||||||
|
|
||||||
import stdwin
|
import stdwin
|
||||||
from stdwinevents import *
|
from stdwinevents import *
|
||||||
|
import mainloop
|
||||||
|
|
||||||
from TransParent import ManageOneChild
|
from TransParent import ManageOneChild
|
||||||
|
|
||||||
Error = 'WindowParent.Error' # Exception
|
Error = 'WindowParent.Error' # Exception
|
||||||
|
|
||||||
WindowList = [] # List containing all windows
|
|
||||||
|
|
||||||
class WindowParent() = ManageOneChild():
|
class WindowParent() = ManageOneChild():
|
||||||
#
|
#
|
||||||
def create(self, (title, size)):
|
def create(self, (title, size)):
|
||||||
self.title = title
|
self.title = title
|
||||||
self.size = size # (width, height)
|
self.size = size # (width, height)
|
||||||
self._reset()
|
self._reset()
|
||||||
|
self.close_hook = WindowParent.delayed_destroy
|
||||||
return self
|
return self
|
||||||
#
|
#
|
||||||
def _reset(self):
|
def _reset(self):
|
||||||
|
@ -31,10 +31,10 @@ class WindowParent() = ManageOneChild():
|
||||||
self.do_altdraw = 0
|
self.do_altdraw = 0
|
||||||
self.pending_destroy = 0
|
self.pending_destroy = 0
|
||||||
self.close_hook = None
|
self.close_hook = None
|
||||||
|
self.menu_hook = None
|
||||||
#
|
#
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
if self.win in WindowList:
|
mainloop.unregister(self.win)
|
||||||
WindowList.remove(self.win)
|
|
||||||
if self.child: self.child.destroy()
|
if self.child: self.child.destroy()
|
||||||
self._reset()
|
self._reset()
|
||||||
#
|
#
|
||||||
|
@ -47,11 +47,19 @@ class WindowParent() = ManageOneChild():
|
||||||
def close_trigger(self):
|
def close_trigger(self):
|
||||||
if self.close_hook: self.close_hook(self)
|
if self.close_hook: self.close_hook(self)
|
||||||
#
|
#
|
||||||
|
def menu_trigger(self, (menu, item)):
|
||||||
|
if self.menu_hook:
|
||||||
|
self.menu_hook(self, menu, item)
|
||||||
|
#
|
||||||
def need_mouse(self, child): self.do_mouse = 1
|
def need_mouse(self, child): self.do_mouse = 1
|
||||||
def no_mouse(self, child): self.do_mouse = 0
|
def no_mouse(self, child): self.do_mouse = 0
|
||||||
#
|
#
|
||||||
def need_keybd(self, child): self.do_keybd = 1
|
def need_keybd(self, child):
|
||||||
def no_keybd(self, child): self.do_keybd = 0
|
self.do_keybd = 1
|
||||||
|
self.child.activate()
|
||||||
|
def no_keybd(self, child):
|
||||||
|
self.do_keybd = 0
|
||||||
|
self.child.deactivate()
|
||||||
#
|
#
|
||||||
def need_timer(self, child): self.do_timer = 1
|
def need_timer(self, child): self.do_timer = 1
|
||||||
def no_timer(self, child): self.do_timer = 0
|
def no_timer(self, child): self.do_timer = 0
|
||||||
|
@ -64,28 +72,46 @@ class WindowParent() = ManageOneChild():
|
||||||
raise Error, 'realize(): called twice'
|
raise Error, 'realize(): called twice'
|
||||||
if not self.child:
|
if not self.child:
|
||||||
raise Error, 'realize(): no child'
|
raise Error, 'realize(): no child'
|
||||||
size = self.child.minsize(self.beginmeasuring())
|
# Compute suggested size
|
||||||
self.size = max(self.size[0], size[0]), \
|
self.size = self.child.getminsize(self.beginmeasuring(), \
|
||||||
max(self.size[1], size[1])
|
self.size)
|
||||||
# XXX Don't... stdwin.setdefscrollbars(0, 0)
|
save_defsize = stdwin.getdefwinsize()
|
||||||
stdwin.setdefwinsize(self.size)
|
scrwidth, scrheight = stdwin.getscrsize()
|
||||||
|
width, height = self.size
|
||||||
|
if width > scrwidth:
|
||||||
|
width = scrwidth * 2/3
|
||||||
|
if height > scrheight:
|
||||||
|
height = scrheight * 2/3
|
||||||
|
stdwin.setdefwinsize(width, height)
|
||||||
|
self.hbar, self.vbar = stdwin.getdefscrollbars()
|
||||||
self.win = stdwin.open(self.title)
|
self.win = stdwin.open(self.title)
|
||||||
|
stdwin.setdefwinsize(save_defsize)
|
||||||
self.win.setdocsize(self.size)
|
self.win.setdocsize(self.size)
|
||||||
if self.itimer:
|
if self.itimer:
|
||||||
self.win.settimer(self.itimer)
|
self.win.settimer(self.itimer)
|
||||||
bounds = (0, 0), self.win.getwinsize()
|
width, height = self.win.getwinsize()
|
||||||
self.child.setbounds(bounds)
|
if self.hbar:
|
||||||
|
width = self.size[0]
|
||||||
|
if self.vbar:
|
||||||
|
height = self.size[1]
|
||||||
|
self.child.setbounds((0, 0), (width, height))
|
||||||
self.child.realize()
|
self.child.realize()
|
||||||
self.win.dispatch = self.dispatch
|
self.win.dispatch = self.dispatch
|
||||||
WindowList.append(self.win)
|
mainloop.register(self.win)
|
||||||
#
|
#
|
||||||
def fixup(self):
|
def fixup(self):
|
||||||
self.size = self.child.minsize(self.beginmeasuring())
|
# XXX This could share code with realize() above
|
||||||
|
self.size = self.child.getminsize(self.beginmeasuring(), \
|
||||||
|
self.win.getwinsize())
|
||||||
self.win.setdocsize(self.size)
|
self.win.setdocsize(self.size)
|
||||||
bounds = (0, 0), self.win.getwinsize()
|
width, height = self.win.getwinsize()
|
||||||
self.child.setbounds(bounds)
|
if self.hbar:
|
||||||
|
width = self.size[0]
|
||||||
|
if self.vbar:
|
||||||
|
height = self.size[1]
|
||||||
|
self.child.setbounds((0, 0), (width, height))
|
||||||
# Force a redraw of the entire window:
|
# Force a redraw of the entire window:
|
||||||
self.win.change((0, 0), (10000, 10000))
|
self.win.change((0, 0), self.size)
|
||||||
#
|
#
|
||||||
def beginmeasuring(self):
|
def beginmeasuring(self):
|
||||||
# Return something with which a child can measure text
|
# Return something with which a child can measure text
|
||||||
|
@ -142,28 +168,22 @@ class WindowParent() = ManageOneChild():
|
||||||
self.fixup()
|
self.fixup()
|
||||||
elif type = WE_CLOSE:
|
elif type = WE_CLOSE:
|
||||||
self.close_trigger()
|
self.close_trigger()
|
||||||
|
elif type = WE_MENU:
|
||||||
|
self.menu_trigger(detail)
|
||||||
if self.pending_destroy:
|
if self.pending_destroy:
|
||||||
self.destroy()
|
self.destroy()
|
||||||
#
|
#
|
||||||
|
|
||||||
def MainLoop():
|
def MainLoop():
|
||||||
while WindowList:
|
mainloop.mainloop()
|
||||||
Dispatch(stdwin.getevent())
|
|
||||||
|
|
||||||
def Dispatch(event):
|
def Dispatch(event):
|
||||||
window = event[1]
|
mainloop.dispatch(event)
|
||||||
if window in WindowList:
|
|
||||||
window.dispatch(event)
|
|
||||||
else:
|
|
||||||
stdwin.fleep()
|
|
||||||
|
|
||||||
# Interface used by WindowSched:
|
# Interface used by WindowSched:
|
||||||
|
|
||||||
def CountWindows():
|
def CountWindows():
|
||||||
return len(WindowList)
|
return mainloop.countwindows()
|
||||||
|
|
||||||
def AnyWindow():
|
def AnyWindow():
|
||||||
if not WindowList:
|
return mainloop.anywindow()
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return WindowList[0]
|
|
||||||
|
|
|
@ -2,23 +2,23 @@
|
||||||
# It is the root of the tree.
|
# It is the root of the tree.
|
||||||
# It should have exactly one child when realized.
|
# It should have exactly one child when realized.
|
||||||
#
|
#
|
||||||
# There is also some support for a standard main loop here.
|
# There is also an alternative interface to "mainloop" here.
|
||||||
|
|
||||||
import stdwin
|
import stdwin
|
||||||
from stdwinevents import *
|
from stdwinevents import *
|
||||||
|
import mainloop
|
||||||
|
|
||||||
from TransParent import ManageOneChild
|
from TransParent import ManageOneChild
|
||||||
|
|
||||||
Error = 'WindowParent.Error' # Exception
|
Error = 'WindowParent.Error' # Exception
|
||||||
|
|
||||||
WindowList = [] # List containing all windows
|
|
||||||
|
|
||||||
class WindowParent() = ManageOneChild():
|
class WindowParent() = ManageOneChild():
|
||||||
#
|
#
|
||||||
def create(self, (title, size)):
|
def create(self, (title, size)):
|
||||||
self.title = title
|
self.title = title
|
||||||
self.size = size # (width, height)
|
self.size = size # (width, height)
|
||||||
self._reset()
|
self._reset()
|
||||||
|
self.close_hook = WindowParent.delayed_destroy
|
||||||
return self
|
return self
|
||||||
#
|
#
|
||||||
def _reset(self):
|
def _reset(self):
|
||||||
|
@ -31,10 +31,10 @@ class WindowParent() = ManageOneChild():
|
||||||
self.do_altdraw = 0
|
self.do_altdraw = 0
|
||||||
self.pending_destroy = 0
|
self.pending_destroy = 0
|
||||||
self.close_hook = None
|
self.close_hook = None
|
||||||
|
self.menu_hook = None
|
||||||
#
|
#
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
if self.win in WindowList:
|
mainloop.unregister(self.win)
|
||||||
WindowList.remove(self.win)
|
|
||||||
if self.child: self.child.destroy()
|
if self.child: self.child.destroy()
|
||||||
self._reset()
|
self._reset()
|
||||||
#
|
#
|
||||||
|
@ -47,11 +47,19 @@ class WindowParent() = ManageOneChild():
|
||||||
def close_trigger(self):
|
def close_trigger(self):
|
||||||
if self.close_hook: self.close_hook(self)
|
if self.close_hook: self.close_hook(self)
|
||||||
#
|
#
|
||||||
|
def menu_trigger(self, (menu, item)):
|
||||||
|
if self.menu_hook:
|
||||||
|
self.menu_hook(self, menu, item)
|
||||||
|
#
|
||||||
def need_mouse(self, child): self.do_mouse = 1
|
def need_mouse(self, child): self.do_mouse = 1
|
||||||
def no_mouse(self, child): self.do_mouse = 0
|
def no_mouse(self, child): self.do_mouse = 0
|
||||||
#
|
#
|
||||||
def need_keybd(self, child): self.do_keybd = 1
|
def need_keybd(self, child):
|
||||||
def no_keybd(self, child): self.do_keybd = 0
|
self.do_keybd = 1
|
||||||
|
self.child.activate()
|
||||||
|
def no_keybd(self, child):
|
||||||
|
self.do_keybd = 0
|
||||||
|
self.child.deactivate()
|
||||||
#
|
#
|
||||||
def need_timer(self, child): self.do_timer = 1
|
def need_timer(self, child): self.do_timer = 1
|
||||||
def no_timer(self, child): self.do_timer = 0
|
def no_timer(self, child): self.do_timer = 0
|
||||||
|
@ -64,28 +72,46 @@ class WindowParent() = ManageOneChild():
|
||||||
raise Error, 'realize(): called twice'
|
raise Error, 'realize(): called twice'
|
||||||
if not self.child:
|
if not self.child:
|
||||||
raise Error, 'realize(): no child'
|
raise Error, 'realize(): no child'
|
||||||
size = self.child.minsize(self.beginmeasuring())
|
# Compute suggested size
|
||||||
self.size = max(self.size[0], size[0]), \
|
self.size = self.child.getminsize(self.beginmeasuring(), \
|
||||||
max(self.size[1], size[1])
|
self.size)
|
||||||
# XXX Don't... stdwin.setdefscrollbars(0, 0)
|
save_defsize = stdwin.getdefwinsize()
|
||||||
stdwin.setdefwinsize(self.size)
|
scrwidth, scrheight = stdwin.getscrsize()
|
||||||
|
width, height = self.size
|
||||||
|
if width > scrwidth:
|
||||||
|
width = scrwidth * 2/3
|
||||||
|
if height > scrheight:
|
||||||
|
height = scrheight * 2/3
|
||||||
|
stdwin.setdefwinsize(width, height)
|
||||||
|
self.hbar, self.vbar = stdwin.getdefscrollbars()
|
||||||
self.win = stdwin.open(self.title)
|
self.win = stdwin.open(self.title)
|
||||||
|
stdwin.setdefwinsize(save_defsize)
|
||||||
self.win.setdocsize(self.size)
|
self.win.setdocsize(self.size)
|
||||||
if self.itimer:
|
if self.itimer:
|
||||||
self.win.settimer(self.itimer)
|
self.win.settimer(self.itimer)
|
||||||
bounds = (0, 0), self.win.getwinsize()
|
width, height = self.win.getwinsize()
|
||||||
self.child.setbounds(bounds)
|
if self.hbar:
|
||||||
|
width = self.size[0]
|
||||||
|
if self.vbar:
|
||||||
|
height = self.size[1]
|
||||||
|
self.child.setbounds((0, 0), (width, height))
|
||||||
self.child.realize()
|
self.child.realize()
|
||||||
self.win.dispatch = self.dispatch
|
self.win.dispatch = self.dispatch
|
||||||
WindowList.append(self.win)
|
mainloop.register(self.win)
|
||||||
#
|
#
|
||||||
def fixup(self):
|
def fixup(self):
|
||||||
self.size = self.child.minsize(self.beginmeasuring())
|
# XXX This could share code with realize() above
|
||||||
|
self.size = self.child.getminsize(self.beginmeasuring(), \
|
||||||
|
self.win.getwinsize())
|
||||||
self.win.setdocsize(self.size)
|
self.win.setdocsize(self.size)
|
||||||
bounds = (0, 0), self.win.getwinsize()
|
width, height = self.win.getwinsize()
|
||||||
self.child.setbounds(bounds)
|
if self.hbar:
|
||||||
|
width = self.size[0]
|
||||||
|
if self.vbar:
|
||||||
|
height = self.size[1]
|
||||||
|
self.child.setbounds((0, 0), (width, height))
|
||||||
# Force a redraw of the entire window:
|
# Force a redraw of the entire window:
|
||||||
self.win.change((0, 0), (10000, 10000))
|
self.win.change((0, 0), self.size)
|
||||||
#
|
#
|
||||||
def beginmeasuring(self):
|
def beginmeasuring(self):
|
||||||
# Return something with which a child can measure text
|
# Return something with which a child can measure text
|
||||||
|
@ -142,28 +168,22 @@ class WindowParent() = ManageOneChild():
|
||||||
self.fixup()
|
self.fixup()
|
||||||
elif type = WE_CLOSE:
|
elif type = WE_CLOSE:
|
||||||
self.close_trigger()
|
self.close_trigger()
|
||||||
|
elif type = WE_MENU:
|
||||||
|
self.menu_trigger(detail)
|
||||||
if self.pending_destroy:
|
if self.pending_destroy:
|
||||||
self.destroy()
|
self.destroy()
|
||||||
#
|
#
|
||||||
|
|
||||||
def MainLoop():
|
def MainLoop():
|
||||||
while WindowList:
|
mainloop.mainloop()
|
||||||
Dispatch(stdwin.getevent())
|
|
||||||
|
|
||||||
def Dispatch(event):
|
def Dispatch(event):
|
||||||
window = event[1]
|
mainloop.dispatch(event)
|
||||||
if window in WindowList:
|
|
||||||
window.dispatch(event)
|
|
||||||
else:
|
|
||||||
stdwin.fleep()
|
|
||||||
|
|
||||||
# Interface used by WindowSched:
|
# Interface used by WindowSched:
|
||||||
|
|
||||||
def CountWindows():
|
def CountWindows():
|
||||||
return len(WindowList)
|
return mainloop.countwindows()
|
||||||
|
|
||||||
def AnyWindow():
|
def AnyWindow():
|
||||||
if not WindowList:
|
return mainloop.anywindow()
|
||||||
return None
|
|
||||||
else:
|
|
||||||
return WindowList[0]
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue