123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- # 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()
|