From 245ddc4b88dffbe066ee222e0722faa6d6107fab Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Mon, 11 Jan 1999 14:51:32 +0000 Subject: [PATCH] Set the cursor to a watch when opening the class browser (which may take quite a while, browsing multiple files). Newer, better center() -- but assumes no wrapping. --- Tools/idle/EditorWindow.py | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/Tools/idle/EditorWindow.py b/Tools/idle/EditorWindow.py index ead0e8a4271..8c0ba00e72a 100644 --- a/Tools/idle/EditorWindow.py +++ b/Tools/idle/EditorWindow.py @@ -295,8 +295,12 @@ def open_class_browser(self, event=None): import pyclbr if pyclbr._modules.has_key(base): del pyclbr._modules[base] + save_cursor = self.text["cursor"] + self.text["cursor"] = "watch" + self.text.update_idletasks() import ClassBrowser ClassBrowser.ClassBrowser(self.flist, base, [head]) + self.text["cursor"] = save_cursor def gotoline(self, lineno): if lineno is not None and lineno > 0: @@ -393,13 +397,25 @@ def center_insert_event(self, event): self.center() def center(self, mark="insert"): - insert = float(self.text.index(mark + " linestart")) - end = float(self.text.index("end")) - if insert > end-insert: - self.text.see("1.0") - else: - self.text.see("end") - self.text.see(mark) + text = self.text + top, bot = self.getwindowlines() + lineno = self.getlineno(mark) + height = bot - top + newtop = max(1, lineno - height/2) + text.yview(float(newtop)) + + def getwindowlines(self): + text = self.text + top = self.getlineno("@0,0") + bot = self.getlineno("@0,65535") + if top == bot: + height = int(text['height']) + bot = top + height - 1 + return top, bot + + def getlineno(self, mark="insert"): + text = self.text + return int(float(text.index(mark))) def close_event(self, event): self.close()