Spaces:
Sleeping
Sleeping
# The property page to define generic IDE options for Pythonwin | |
import win32con | |
import win32ui | |
from pywin.framework import interact | |
from pywin.mfc import dialog | |
buttonControlMap = { | |
win32ui.IDC_BUTTON1: win32ui.IDC_EDIT1, | |
win32ui.IDC_BUTTON2: win32ui.IDC_EDIT2, | |
win32ui.IDC_BUTTON3: win32ui.IDC_EDIT3, | |
} | |
class OptionsPropPage(dialog.PropertyPage): | |
def __init__(self): | |
dialog.PropertyPage.__init__(self, win32ui.IDD_PP_IDE) | |
self.AddDDX(win32ui.IDC_CHECK1, "bShowAtStartup") | |
self.AddDDX(win32ui.IDC_CHECK2, "bDocking") | |
self.AddDDX(win32ui.IDC_EDIT4, "MRUSize", "i") | |
def OnInitDialog(self): | |
edit = self.GetDlgItem(win32ui.IDC_EDIT1) | |
format = eval( | |
win32ui.GetProfileVal( | |
interact.sectionProfile, | |
interact.STYLE_INTERACTIVE_PROMPT, | |
str(interact.formatInput), | |
) | |
) | |
edit.SetDefaultCharFormat(format) | |
edit.SetWindowText("Input Text") | |
edit = self.GetDlgItem(win32ui.IDC_EDIT2) | |
format = eval( | |
win32ui.GetProfileVal( | |
interact.sectionProfile, | |
interact.STYLE_INTERACTIVE_OUTPUT, | |
str(interact.formatOutput), | |
) | |
) | |
edit.SetDefaultCharFormat(format) | |
edit.SetWindowText("Output Text") | |
edit = self.GetDlgItem(win32ui.IDC_EDIT3) | |
format = eval( | |
win32ui.GetProfileVal( | |
interact.sectionProfile, | |
interact.STYLE_INTERACTIVE_ERROR, | |
str(interact.formatOutputError), | |
) | |
) | |
edit.SetDefaultCharFormat(format) | |
edit.SetWindowText("Error Text") | |
self["bShowAtStartup"] = interact.LoadPreference("Show at startup", 1) | |
self["bDocking"] = interact.LoadPreference("Docking", 0) | |
self["MRUSize"] = win32ui.GetProfileVal("Settings", "Recent File List Size", 10) | |
# Hook the button clicks. | |
self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON1) | |
self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON2) | |
self.HookCommand(self.HandleCharFormatChange, win32ui.IDC_BUTTON3) | |
# Ensure the spin control remains in range. | |
spinner = self.GetDlgItem(win32ui.IDC_SPIN1) | |
spinner.SetRange(1, 16) | |
return dialog.PropertyPage.OnInitDialog(self) | |
# Called to save away the new format tuple for the specified item. | |
def HandleCharFormatChange(self, id, code): | |
if code == win32con.BN_CLICKED: | |
editId = buttonControlMap.get(id) | |
assert editId is not None, "Format button has no associated edit control" | |
editControl = self.GetDlgItem(editId) | |
existingFormat = editControl.GetDefaultCharFormat() | |
flags = win32con.CF_SCREENFONTS | |
d = win32ui.CreateFontDialog(existingFormat, flags, None, self) | |
if d.DoModal() == win32con.IDOK: | |
cf = d.GetCharFormat() | |
editControl.SetDefaultCharFormat(cf) | |
self.SetModified(1) | |
return 0 # We handled this fully! | |
def OnOK(self): | |
# Handle the edit controls - get all the fonts, put them back into interact, then | |
# get interact to save its stuff! | |
controlAttrs = [ | |
(win32ui.IDC_EDIT1, interact.STYLE_INTERACTIVE_PROMPT), | |
(win32ui.IDC_EDIT2, interact.STYLE_INTERACTIVE_OUTPUT), | |
(win32ui.IDC_EDIT3, interact.STYLE_INTERACTIVE_ERROR), | |
] | |
for id, key in controlAttrs: | |
control = self.GetDlgItem(id) | |
fmt = control.GetDefaultCharFormat() | |
win32ui.WriteProfileVal(interact.sectionProfile, key, str(fmt)) | |
# Save the other interactive window options. | |
interact.SavePreference("Show at startup", self["bShowAtStartup"]) | |
interact.SavePreference("Docking", self["bDocking"]) | |
# And the other options. | |
win32ui.WriteProfileVal("Settings", "Recent File List Size", self["MRUSize"]) | |
return 1 | |
def ChangeFormat(self, fmtAttribute, fmt): | |
dlg = win32ui.CreateFontDialog(fmt) | |
if dlg.DoModal() != win32con.IDOK: | |
return None | |
return dlg.GetCharFormat() | |
def OnFormatTitle(self, command, code): | |
fmt = self.GetFormat(interact.formatTitle) | |
if fmt: | |
formatTitle = fmt | |
SaveFontPreferences() | |
def OnFormatInput(self, command, code): | |
global formatInput | |
fmt = self.GetFormat(formatInput) | |
if fmt: | |
formatInput = fmt | |
SaveFontPreferences() | |
def OnFormatOutput(self, command, code): | |
global formatOutput | |
fmt = self.GetFormat(formatOutput) | |
if fmt: | |
formatOutput = fmt | |
SaveFontPreferences() | |
def OnFormatError(self, command, code): | |
global formatOutputError | |
fmt = self.GetFormat(formatOutputError) | |
if fmt: | |
formatOutputError = fmt | |
SaveFontPreferences() | |