Merge with 3.5

This commit is contained in:
Terry Jan Reedy 2015-11-12 15:03:30 -05:00
commit 4df5c7aa30
8 changed files with 48 additions and 25 deletions

View file

@ -56,7 +56,7 @@ class ClassBrowser:
self.settitle() self.settitle()
top.focus_set() top.focus_set()
# create scrolled canvas # create scrolled canvas
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
background = idleConf.GetHighlight(theme, 'normal')['background'] background = idleConf.GetHighlight(theme, 'normal')['background']
sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1) sc = ScrolledCanvas(top, bg=background, highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both") sc.frame.pack(expand=1, fill="both")

View file

@ -60,7 +60,7 @@ class ColorDelegator(Delegator):
self.tag_raise('sel') self.tag_raise('sel')
def LoadTagDefs(self): def LoadTagDefs(self):
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
self.tagdefs = { self.tagdefs = {
"COMMENT": idleConf.GetHighlight(theme, "comment"), "COMMENT": idleConf.GetHighlight(theme, "comment"),
"KEYWORD": idleConf.GetHighlight(theme, "keyword"), "KEYWORD": idleConf.GetHighlight(theme, "keyword"),

View file

@ -739,7 +739,7 @@ class EditorWindow(object):
# Called from self.filename_change_hook and from configDialog.py # Called from self.filename_change_hook and from configDialog.py
self._rmcolorizer() self._rmcolorizer()
self._addcolorizer() self._addcolorizer()
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
normal_colors = idleConf.GetHighlight(theme, 'normal') normal_colors = idleConf.GetHighlight(theme, 'normal')
cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg') cursor_color = idleConf.GetHighlight(theme, 'cursor', fgBg='fg')
select_colors = idleConf.GetHighlight(theme, 'hilite') select_colors = idleConf.GetHighlight(theme, 'hilite')

View file

@ -152,7 +152,7 @@ class PyShellEditorWindow(EditorWindow):
# possible due to update in restore_file_breaks # possible due to update in restore_file_breaks
return return
if color: if color:
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
cfg = idleConf.GetHighlight(theme, "break") cfg = idleConf.GetHighlight(theme, "break")
else: else:
cfg = {'foreground': '', 'background': ''} cfg = {'foreground': '', 'background': ''}
@ -338,7 +338,7 @@ class ModifiedColorDelegator(ColorDelegator):
def LoadTagDefs(self): def LoadTagDefs(self):
ColorDelegator.LoadTagDefs(self) ColorDelegator.LoadTagDefs(self)
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
self.tagdefs.update({ self.tagdefs.update({
"stdin": {'background':None,'foreground':None}, "stdin": {'background':None,'foreground':None},
"stdout": idleConf.GetHighlight(theme, "stdout"), "stdout": idleConf.GetHighlight(theme, "stdout"),
@ -621,7 +621,7 @@ class ModifiedInterpreter(InteractiveInterpreter):
item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid) item = RemoteObjectBrowser.StubObjectTreeItem(self.rpcclt, oid)
from idlelib.TreeWidget import ScrolledCanvas, TreeNode from idlelib.TreeWidget import ScrolledCanvas, TreeNode
top = Toplevel(self.tkconsole.root) top = Toplevel(self.tkconsole.root)
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
background = idleConf.GetHighlight(theme, 'normal')['background'] background = idleConf.GetHighlight(theme, 'normal')['background']
sc = ScrolledCanvas(top, bg=background, highlightthickness=0) sc = ScrolledCanvas(top, bg=background, highlightthickness=0)
sc.frame.pack(expand=1, fill="both") sc.frame.pack(expand=1, fill="both")

View file

@ -249,7 +249,7 @@ class TreeNode:
except AttributeError: except AttributeError:
# padding carefully selected (on Windows) to match Entry widget: # padding carefully selected (on Windows) to match Entry widget:
self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2) self.label = Label(self.canvas, text=text, bd=0, padx=2, pady=2)
theme = idleConf.GetOption('main','Theme','name') theme = idleConf.CurrentTheme()
if self.selected: if self.selected:
self.label.configure(idleConf.GetHighlight(theme, 'hilite')) self.label.configure(idleConf.GetHighlight(theme, 'hilite'))
else: else:

View file

@ -65,6 +65,8 @@ num-spaces= 4
[Theme] [Theme]
default= 1 default= 1
name= IDLE Classic name= IDLE Classic
name2=
# name2 set in user config-main.cfg for themes added after 2015 Oct 1
[Keys] [Keys]
default= 1 default= 1

View file

@ -263,6 +263,7 @@ class ConfigDialog(Toplevel):
self.buttonDeleteCustomTheme=Button( self.buttonDeleteCustomTheme=Button(
frameTheme, text='Delete Custom Theme', frameTheme, text='Delete Custom Theme',
command=self.DeleteCustomTheme) command=self.DeleteCustomTheme)
self.new_custom_theme = Label(frameTheme, bd=2)
##widget packing ##widget packing
#body #body
@ -286,6 +287,7 @@ class ConfigDialog(Toplevel):
self.optMenuThemeBuiltin.pack(side=TOP, fill=X, padx=5, pady=5) self.optMenuThemeBuiltin.pack(side=TOP, fill=X, padx=5, pady=5)
self.optMenuThemeCustom.pack(side=TOP, fill=X, anchor=W, padx=5, pady=5) self.optMenuThemeCustom.pack(side=TOP, fill=X, anchor=W, padx=5, pady=5)
self.buttonDeleteCustomTheme.pack(side=TOP, fill=X, padx=5, pady=5) self.buttonDeleteCustomTheme.pack(side=TOP, fill=X, padx=5, pady=5)
self.new_custom_theme.pack(side=TOP, fill=X, pady=5)
return frame return frame
def CreatePageKeys(self): def CreatePageKeys(self):
@ -503,20 +505,15 @@ class ConfigDialog(Toplevel):
def VarChanged_builtinTheme(self, *params): def VarChanged_builtinTheme(self, *params):
value = self.builtinTheme.get() value = self.builtinTheme.get()
if value == 'IDLE Dark': if value == 'IDLE Dark':
tkMessageBox.showwarning( if idleConf.GetOption('main', 'Theme', 'name') != 'IDLE New':
title="The 'IDLE Dark' Text Color Theme", self.AddChangedItem('main', 'Theme', 'name', 'IDLE Classic')
message="IDLE Dark is new in October, 2015. Trying to " self.AddChangedItem('main', 'Theme', 'name2', value)
"run earlier versions of IDLE with it selected " self.new_custom_theme.config(text='New theme, see Help',
"will disable colorizing, or worse.\n\n" fg='#500000')
"If you might ever run an earlier release of IDLE, " else:
"then before exiting this version, " self.AddChangedItem('main', 'Theme', 'name', value)
"either switch to another theme or " self.AddChangedItem('main', 'Theme', 'name2', '')
"hit the 'Save as New Custom Theme' button. " self.new_custom_theme.config(text='', fg='black')
"The latter requires a new name, such as "
"'Custom Dark', but the custom theme will work "
"with any IDLE release, and can be modified.",
parent=self)
self.AddChangedItem('main', 'Theme', 'name', value)
self.PaintThemeSample() self.PaintThemeSample()
def VarChanged_customTheme(self, *params): def VarChanged_customTheme(self, *params):
@ -1350,14 +1347,14 @@ help_common = '''\
When you click either the Apply or Ok buttons, settings in this When you click either the Apply or Ok buttons, settings in this
dialog that are different from IDLE's default are saved in dialog that are different from IDLE's default are saved in
a .idlerc directory in your home directory. Except as noted, a .idlerc directory in your home directory. Except as noted,
hese changes apply to all versions of IDLE installed on this these changes apply to all versions of IDLE installed on this
machine. Some do not take affect until IDLE is restarted. machine. Some do not take affect until IDLE is restarted.
[Cancel] only cancels changes made since the last save. [Cancel] only cancels changes made since the last save.
''' '''
help_pages = { help_pages = {
'Highlighting':''' 'Highlighting':'''
Highlighting: Highlighting:
The IDLE Dark color theme is new in Octover 2015. It can only The IDLE Dark color theme is new in October 2015. It can only
be used with older IDLE releases if it is saved as a custom be used with older IDLE releases if it is saved as a custom
theme, with a different name. theme, with a different name.
''' '''

View file

@ -372,8 +372,32 @@ class IdleConf:
return theme return theme
def CurrentTheme(self): def CurrentTheme(self):
"Return the name of the currently active theme." """Return the name of the currently active text color theme.
return self.GetOption('main', 'Theme', 'name', default='')
idlelib.config-main.def includes this section
[Theme]
default= 1
name= IDLE Classic
name2=
# name2 set in user config-main.cfg for themes added after 2015 Oct 1
Item name2 is needed because setting name to a new builtin
causes older IDLEs to display multiple error messages or quit.
See https://bugs.python.org/issue25313.
When default = True, name2 takes precedence over name,
while older IDLEs will just use name.
"""
default = self.GetOption('main', 'Theme', 'default',
type='bool', default=True)
if default:
theme = self.GetOption('main', 'Theme', 'name2', default='')
if default and not theme or not default:
theme = self.GetOption('main', 'Theme', 'name', default='')
source = self.defaultCfg if default else self.userCfg
if source['highlight'].has_section(theme):
return theme
else:
return "IDLE Classic"
def CurrentKeys(self): def CurrentKeys(self):
"Return the name of the currently active key set." "Return the name of the currently active key set."