diff --git a/wafo/fig.py b/wafo/fig.py index 70284b1..a379349 100644 --- a/wafo/fig.py +++ b/wafo/fig.py @@ -41,12 +41,14 @@ import win32con import msvcrt import numpy -__all__ = ['close', 'cycle', 'hide', 'keep', 'maximize', 'minimize', 'pile', 'restore', 'stack', 'tile'] +__all__ = ['close', 'cycle', 'hide', 'keep', 'maximize', 'minimize', 'pile', + 'restore', 'stack', 'tile'] # Figure format strings to recognize in window title _FIG_FORMATS = ('Figure', 'TVTK Scene', 'Chaco Plot Window: Figure') _SCREENSIZE = None + def _getScreenSize(wnds): ''' Return screen size X,Y,W,H @@ -65,7 +67,7 @@ def _getScreenSize(wnds): ''' global _SCREENSIZE - if _SCREENSIZE == None: + if _SCREENSIZE is None: MoveWindow = win32gui.MoveWindow GetWindowRect = win32gui.GetWindowRect SW_MAXIMIZE = win32con.SW_SHOWMAXIMIZED @@ -74,7 +76,7 @@ def _getScreenSize(wnds): pos[3] -= pos[1] pos[2] -= pos[0] _show_windows(hwnd, SW_MAXIMIZE) - _SCREENSIZE = list(GetWindowRect(hwnd[0])) # Screen size + _SCREENSIZE = list(GetWindowRect(hwnd[0])) # Screen size _SCREENSIZE[3] -= _SCREENSIZE[1] _SCREENSIZE[2] -= _SCREENSIZE[0] _SCREENSIZE = tuple(_SCREENSIZE) @@ -83,11 +85,15 @@ def _getScreenSize(wnds): return list(_SCREENSIZE) + def _windowEnumerationHandler(hwnd, resultList): - '''Pass to win32gui.EnumWindows() to generate list of window handle, window text tuples.''' + '''Pass to win32gui.EnumWindows() to generate list of window handle, + window text tuples. + ''' resultList.append((hwnd, win32gui.GetWindowText(hwnd))) + def _findTopWindows(wantedTitle=None): ''' Return list of window handle and window title tuples @@ -95,10 +101,12 @@ def _findTopWindows(wantedTitle=None): ''' topWindows = [] win32gui.EnumWindows(_windowEnumerationHandler, topWindows) - if wantedTitle == None: + if wantedTitle is None: return topWindows else: - return [(hwnd, windowTxt) for hwnd, windowTxt in topWindows if windowTxt.startswith(wantedTitle)] + return [(hwnd, windowTxt) for hwnd, windowTxt in topWindows + if windowTxt.startswith(wantedTitle)] + def findallfigs(): ''' @@ -117,10 +125,11 @@ def findallfigs(): figs.sort() return figs + def _figparse(*args): figs = [] for arg in args: - if isinstance(arg, (list, tuple, set)): + if isinstance(arg, (list, tuple, set)): for val in arg: figs.append(int(val)) elif isinstance(arg, int): @@ -130,12 +139,13 @@ def _figparse(*args): break else: raise TypeError('Only integers arguments accepted!') - #raise TypeError('Unrecognized argument type (%s)!'%type(arg)) + # raise TypeError('Unrecognized argument type (%s)!'%type(arg)) if len(figs) == 0 or figs == 'all': figs = findallfigs() return figs + def _fig2wnd(figs): ''' Find figure handle from figure number ''' @@ -150,34 +160,44 @@ def _fig2wnd(figs): wnd_handles.append(hwnd) return wnd_handles + def _show_figure(figs, cmdshow): ''' sets the specified figure's show state. @param figs: vector for figure numbers @param cmdshow: one of following commands: - SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the window is not - responding. This flag should only be used when minimizing windows - from a different thread. + SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the + window is not responding. This flag should only be used + when minimizing windows from a different thread. SW_HIDE: Hides the window and activates another window. SW_MAXIMIZE: Maximizes the specified window. - SW_MINIMIZE: Minimizes the specified window and activates the next top-level window in the Z order. - SW_RESTORE: Activates and displays the window. If the window is minimized or maximized, - the system restores it to its original size and position. An application should - specify this flag when restoring a minimized window. - SW_SHOW: Activates the window and displays it in its current size and position. - SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in the STARTUPINFO - structure passed to the CreateProcess function by the program that started the application. - SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized window. - SW_SHOWMINIMIZED: Activates the window and displays it as a minimized window. - SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This value is similar to - SW_SHOWMINIMIZED, except the window is not activated. - SW_SHOWNA: Displays the window in its current size and position. This value is similar to - SW_SHOW, except the window is not activated. - SW_SHOWNOACTIVATE: Displays a window in its most recent size and position. - This value is similar to SW_SHOWNORMAL, except the window is not actived. - SW_SHOWNORMAL: Activates and displays a window. If the window is minimized or maximized, - the system restores it to its original size and position. An application should - specify this flag when displaying the window for the first time. + SW_MINIMIZE: Minimizes the specified window and activates the next + top-level window in the Z order. + SW_RESTORE: Activates and displays the window. If the window is + minimized or maximized, the system restores it to its + original size and position. An application should + specify this flag when restoring a minimized window. + SW_SHOW: Activates the window and displays it in its current size + and position. + SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in the + STARTUPINFO structure passed to the CreateProcess function + by the program that started the application. + SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized + window. + SW_SHOWMINIMIZED: Activates the window and displays it as a minimized + window. + SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This value + is similar to SW_SHOWMINIMIZED, except the window is not + activated. + SW_SHOWNA: Displays the window in its current size and position. This + value is similar to SW_SHOW, except the window is not activated. + SW_SHOWNOACTIVATE: Displays a window in its most recent size and position. + This value is similar to SW_SHOWNORMAL, except the window + is not actived. + SW_SHOWNORMAL: Activates and displays a window. If the window is minimized + or maximized, the system restores it to its original size and + position. An application should specify this flag when + displaying the window for the first time. ''' BringWindowToTop = win32gui.BringWindowToTop FindWindow = win32gui.FindWindow @@ -188,48 +208,59 @@ def _show_figure(figs, cmdshow): winTitle = format_ + ' %d' % fig hwnd = FindWindow(None, winTitle) if not hwnd == 0: - #ShowWindow(hwnd,cmdshow) + # ShowWindow(hwnd,cmdshow) BringWindowToTop(hwnd) ShowWindow(hwnd, cmdshow) + def _show_windows(wnds, cmdshow): ''' sets the specified window's show state. @param wnds: list of window handles numbers @param cmdshow: one of following commands: - SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the window is not - responding. This flag should only be used when minimizing windows - from a different thread. + SW_FORCEMINIMIZE: Minimizes a window, even if the thread that owns the + window is not responding. This flag should only be used + when minimizing windows from a different thread. SW_HIDE: Hides the window and activates another window. SW_MAXIMIZE: Maximizes the specified window. - SW_MINIMIZE: Minimizes the specified window and activates the next top-level window in the Z order. - SW_RESTORE: Activates and displays the window. If the window is minimized or maximized, - the system restores it to its original size and position. An application should - specify this flag when restoring a minimized window. - SW_SHOW: Activates the window and displays it in its current size and position. - SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in the STARTUPINFO - structure passed to the CreateProcess function by the program that started the application. - SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized window. - SW_SHOWMINIMIZED: Activates the window and displays it as a minimized window. - SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This value is similar to - SW_SHOWMINIMIZED, except the window is not activated. - SW_SHOWNA: Displays the window in its current size and position. This value is similar to - SW_SHOW, except the window is not activated. - SW_SHOWNOACTIVATE: Displays a window in its most recent size and position. - This value is similar to SW_SHOWNORMAL, except the window is not actived. - SW_SHOWNORMAL: Activates and displays a window. If the window is minimized or maximized, - the system restores it to its original size and position. An application should - specify this flag when displaying the window for the first time. + SW_MINIMIZE: Minimizes the specified window and activates the next + top-level window in the Z order. + SW_RESTORE: Activates and displays the window. If the window is + minimized or maximized, the system restores it to its original + size and position. An application should specify this flag when + restoring a minimized window. + SW_SHOW: Activates the window and displays it in its current size and + position. + SW_SHOWDEFAULT: Sets the show state based on the SW_ value specified in + the STARTUPINFO structure passed to the CreateProcess + function by the program that started the application. + SW_SHOWMAXIMIZED: Activates the window and displays it as a maximized + window. + SW_SHOWMINIMIZED: Activates the window and displays it as a minimized + window. + SW_SHOWMINNOACTIVE: Displays the window as a minimized window. This + value is similar to SW_SHOWMINIMIZED, except the window + is not activated. + SW_SHOWNA: Displays the window in its current size and position. This + value is similar to SW_SHOW, except the window is not activated. + SW_SHOWNOACTIVATE: Displays a window in its most recent size and position. + This value is similar to SW_SHOWNORMAL, except the + window is not actived. + SW_SHOWNORMAL: Activates and displays a window. If the window is minimized + or maximized, the system restores it to its original size and + position. An application should specify this flag when + displaying the window for the first time. ''' ShowWindow = win32gui.ShowWindow BringWindowToTop = win32gui.BringWindowToTop for hwnd in wnds: if not hwnd == 0: - #ShowWindow(hwnd,cmdshow) + # ShowWindow(hwnd,cmdshow) BringWindowToTop(hwnd) ShowWindow(hwnd, cmdshow) + def keep(*figs): ''' Keeps figure windows of your choice and closes the rest. @@ -255,7 +286,7 @@ def keep(*figs): ''' figs2keep = [] for fig in figs: - if isinstance(fig, (list, tuple, set)): + if isinstance(fig, (list, tuple, set)): for val in fig: figs2keep.append(int(val)) elif isinstance(fig, int): @@ -269,9 +300,10 @@ def keep(*figs): # Remove figure handles in the "keep" list figs2delete = allfigs.difference(figs2keep) close(figs2delete) - #for fig in figs2delete: + # for fig in figs2delete: # close(fig) + def close(*figs): """ Close figure window(s) @@ -337,9 +369,10 @@ def restore(*figs): figlist = _figparse(*figs) - SW_RESTORE = win32con.SW_SHOWNORMAL #SW_RESTORE + SW_RESTORE = win32con.SW_SHOWNORMAL # SW_RESTORE _show_figure(figlist, SW_RESTORE) + def hide(*figs): '''hide figure(s) window size @@ -372,9 +405,10 @@ def hide(*figs): figlist = _figparse(*figs) SW_HIDE = win32con.SW_HIDE - #SW_hide = win32con.SW_hide + # SW_hide = win32con.SW_hide _show_figure(figlist, SW_HIDE) + def minimize(*figs): '''Minimize figure(s) window size @@ -409,6 +443,7 @@ def minimize(*figs): SW_MINIMIZE = win32con.SW_SHOWMINIMIZED _show_figure(figlist, SW_MINIMIZE) + def maximize(*figs): '''Maximize figure(s) window size @@ -441,9 +476,10 @@ def maximize(*figs): figlist = _figparse(*figs) SW_MAXIMIZE = win32con.SW_SHOWMAXIMIZED - #SW_MAXIMIZE = win32con.SW_MAXIMIZE + # SW_MAXIMIZE = win32con.SW_MAXIMIZE _show_figure(figlist, SW_MAXIMIZE) + def pile(*figs): ''' Pile figure windows @@ -534,17 +570,18 @@ def stack(*figs): GetWindowRect = win32gui.GetWindowRect # # -#% tile figures by postiion -#% Location (1,1) is at bottom left corner +# tile figures by postiion +# Location (1,1) is at bottom left corner # - #print('Screensz = ',screenpos) + # print('Screensz = ',screenpos) for iy in range(numfigs): pos = list(GetWindowRect(wnds[iy])) pos[3] -= pos[1] pos[2] -= pos[0] - #print('[x, y, w, h] = ', pos) - ypos = screenpos[1] + iy * 20 #int(screenpos[3] - iy*20 -pos[3] -70) # figure location (row) - xpos = int(iy * 5 + 15 + screenpos[0]) # figure location (column) + # print('[x, y, w, h] = ', pos) + ypos = screenpos[1] + iy * 20 + # int(screenpos[3] - iy*20 -pos[3] -70) # figure location (row) + xpos = int(iy * 5 + 15 + screenpos[0]) # figure location (column) MoveWindow(wnds[iy], xpos, ypos, pos[2], pos[3], 1) BringWindowToTop(wnds[iy]) @@ -585,7 +622,7 @@ def tile(*figs, **kwds): figlist = _figparse(*figs) wnds = _fig2wnd(figlist) - nfigs = len(wnds); # Number of windows. + nfigs = len(wnds) # Number of windows. if nfigs > 0: nfigspertile = kwds.get('pairs', nfigs) @@ -596,62 +633,63 @@ def tile(*figs, **kwds): nlayers = int(ceil(nfigs / nfigspertile)) - nh = int(ceil(sqrt(nfigspertile))) # Number of figures horisontally. - nv = int(ceil(nfigspertile / nh)); # Number of figures vertically. - + nh = int(ceil(sqrt(nfigspertile))) # Number of figures horisontally. + nv = int(ceil(nfigspertile / nh)) # Number of figures vertically. - nh = maximum(nh, 2); - nv = maximum(nv, 2); + nh = maximum(nh, 2) + nv = maximum(nv, 2) -## Get the screen size. -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +# Get the screen size. +# -------------------- BringWindowToTop = win32gui.BringWindowToTop MoveWindow = win32gui.MoveWindow screenpos = _getScreenSize(wnds) - #scrdim = win32gui.GetWindowPlacement(h)[4] + # scrdim = win32gui.GetWindowPlacement(h)[4] scrwid = screenpos[2] # Screen width. scrhgt = screenpos[3] # Screen height. -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#% The elements in the vector specifying the position. -#% 1 - Window left position -#% 2 - Window top position -#% 3 - Window horizontal size -#% 4 - Window vertical size -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - +# +# The elements in the vector specifying the position. +# 1 - Window left position +# 2 - Window top position +# 3 - Window horizontal size +# 4 - Window vertical size +# ------------------------------------------ hspc = 10 # Horisontal space. - topspc = 20; # Space above top figure. - medspc = 10; # Space between figures. - botspc = 20; # Space below bottom figure. + topspc = 20 # Space above top figure. + medspc = 10 # Space between figures. + botspc = 20 # Space below bottom figure. - #print('scrwid = %d' % scrwid) + # print('scrwid = %d' % scrwid) figwid = (scrwid - (nh + 1) * hspc) / nh - #print('figwid = %d' % figwid) - fighgt = (scrhgt - (topspc + botspc) - (nv - 1) * medspc) / nv; + # print('figwid = %d' % figwid) + fighgt = (scrhgt - (topspc + botspc) - (nv - 1) * medspc) / nv figwid = int(numpy.round(figwid)) fighgt = int(numpy.round(fighgt)) -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -#% Put the figures where they belong. -#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +# +# Put the figures where they belong. +# ----------------------------------- idx = 0 for unused_ix in range(nlayers): for row in range(nv): for col in range(nh): - if (row) * nh + col < nfigspertile : + if (row) * nh + col < nfigspertile: if idx < nfigs: - figlft = int(screenpos[0] + (col + 1) * hspc + col * figwid) - figtop = int(screenpos[1] + topspc + row * (fighgt + medspc)) - #figpos = [ figlft figtop figwid fighgt ]; # Figure position. - #fighnd = FindWindow(0,'Figure %d' % figs[idx]) # Figure handle. + figlft = int(screenpos[0] + (col + 1) * hspc + + col * figwid) + figtop = int(screenpos[1] + topspc + + row * (fighgt + medspc)) + # figpos = [ figlft figtop figwid fighgt ]; # Figure position. + # fighnd = FindWindow(0,'Figure %d' % figs[idx]) # Figure handle. fighnd = wnds[idx] - MoveWindow(fighnd, figlft, figtop, figwid, fighgt, 1); # Set position. + MoveWindow(fighnd, figlft, figtop, figwid, fighgt, + 1) # Set position. BringWindowToTop(fighnd) - #figure(figs[idx]); # Raise figure. + # figure(figs[idx]) # Raise figure. idx += 1 @@ -673,7 +711,8 @@ def cycle(*figs, **kwds): figure(s) and press any other key to display next figure(s) When done, the figures are sorted in ascending order. - CYCLE(maximize=True) does the same thing, except that figures are maximized. + CYCLE(maximize=True) does the same thing, except that figures are + maximized. CYCLE(pairs=2) cycle through all figures in pairs of 2. Examples: @@ -681,11 +720,12 @@ def cycle(*figs, **kwds): >>> import wafo.fig as fig >>> for ix in range(4): f = p.figure(ix) - fig.cycle(range(3)) #Cycle trough figure 0 to 2 - fig.cycle(range(3) maximize=True) #Cycle trough figure 1 to 3 with figs maximized - fig.cycle() #Cycle through all figures one at a time + fig.cycle(range(3)) #Cycle trough figure 0 to 2 + fig.cycle(range(3) maximize=True) #Cycle trough figure 1 to 3 with figs + # maximized + fig.cycle() #Cycle through all figures one at a time fig.tile(pairs=2) - fig.cycle(pairs=2) #Cycle through all figures two at a time + fig.cycle(pairs=2) #Cycle through all figures two at a time >>> fig.close() See also @@ -702,16 +742,16 @@ def cycle(*figs, **kwds): maximize = kwds.get('maximize', False) pairs = kwds.get('pairs', 1) - if maximize or pairs == None: + if maximize or pairs is None: nfigspercycle = 1 else: nfigspercycle = pairs - #n = length(figs); - #nlayers = ceil(n/nfigspercycle); + # n = length(figs); + # nlayers = ceil(n/nfigspercycle); # Bring one figure up at a time. - i = 0; + i = 0 escape_key = chr(27) backspace_key = chr(8) while 0 <= i and i < numfigs: @@ -726,27 +766,28 @@ def cycle(*figs, **kwds): _show_windows(wnd, cmdshow) if i + nfigspercycle - 1 < numfigs: - print('Press escape to quit, backspace to display previous figure(s) and any other key to display next figure(s)'); + print('Press escape to quit, backspace to display previous ' + + 'figure(s) and any other key to display next figure(s)') - #time.sleep(0.5) + # time.sleep(0.5) B = msvcrt.getch() - if maximize: #, %restore window position + if maximize: # restore window position _show_windows(wnd, win32con.SW_RESTORE) - - if B == backspace_key: # Back space + if B == backspace_key: # Back space i -= nfigspercycle elif B == escape_key: break else: i += nfigspercycle - #% Sort the figures. + # Sort the figures. wnds.reverse() _show_windows(wnds, win32con.SW_SHOWNORMAL) + def test_docstrings(): import doctest doctest.testmod() @@ -754,18 +795,19 @@ def test_docstrings(): if __name__ == '__main__': test_docstrings() -#def _errcheck(result, func, args): + +# def _errcheck(result, func, args): # if not result: # raise WinError() # return args # -#def bring_window2top(): -##WINUSERAPI BOOL WINAPI -##GetWindowRect( -## HWND hWnd, -## LPRECT lpRect); -## -##Here is the wrapping with ctypes: +# def bring_window2top(): +# #WINUSERAPI BOOL WINAPI +# #GetWindowRect( +# # HWND hWnd, +# # LPRECT lpRect); +# # +# #Here is the wrapping with ctypes: # NULL = 0 # SW_HIDE = 0 # SW_NORMAL = 1 @@ -802,7 +844,8 @@ if __name__ == '__main__': # prototype2 = WINFUNCTYPE(BOOL,HWND) # paramflags = (1, "hwnd"), # #Not Ok. -# BringWindowToTop = prototype2(("BringWindowToTop", windll.user32), paramflags) +# BringWindowToTop = prototype2(("BringWindowToTop", windll.user32), +# paramflags) # # Ok # CloseWindow = prototype2(("CloseWindow", windll.user32), paramflags) # #Not ok