| "Zoom a window to maximum height." |
| |
| import re |
| import sys |
| |
| from idlelib import macosx |
| |
| |
| class ZoomHeight: |
| |
| def __init__(self, editwin): |
| self.editwin = editwin |
| |
| def zoom_height_event(self, event=None): |
| top = self.editwin.top |
| zoomed = zoom_height(top) |
| menu_status = 'Restore' if zoomed else 'Zoom' |
| self.editwin.update_menu_label(menu='options', index='* Height', |
| label=f'{menu_status} Height') |
| return "break" |
| |
| |
| def zoom_height(top): |
| geom = top.wm_geometry() |
| m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom) |
| if not m: |
| top.bell() |
| return |
| width, height, x, y = map(int, m.groups()) |
| newheight = top.winfo_screenheight() |
| |
| # The constants below for Windows and Mac Aqua are visually determined |
| # to avoid taskbar or menubar and app icons. |
| newy, bot_y = ((0, 72) if sys.platform == 'win32' else |
| (22, 88) if macosx.isAquaTk() else |
| (0, 88) ) # Guess for anything else. |
| newheight = newheight - newy - bot_y |
| newgeom = '' if height >= newheight else f"{width}x{newheight}+{x}+{newy}" |
| top.wm_geometry(newgeom) |
| return newgeom != "" |
| |
| |
| if __name__ == "__main__": |
| from unittest import main |
| main('idlelib.idle_test.test_zoomheight', verbosity=2, exit=False) |
| |
| # Add htest? |