diff options
author | Just van Rossum <just@lettererror.com> | 1999-01-30 22:39:17 (GMT) |
---|---|---|
committer | Just van Rossum <just@lettererror.com> | 1999-01-30 22:39:17 (GMT) |
commit | 40f9b7bd7cb54645a7c15668b683a8d830ba5219 (patch) | |
tree | baea660d6ef599cd9c4ecc72d009fa75853de577 /Mac/Tools/IDE/FontSettings.py | |
parent | f59a89b5e34ac7db9e69b02a5b558c7cb49a4d9a (diff) | |
download | cpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.zip cpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.tar.gz cpython-40f9b7bd7cb54645a7c15668b683a8d830ba5219.tar.bz2 |
First Checked In.
Diffstat (limited to 'Mac/Tools/IDE/FontSettings.py')
-rw-r--r-- | Mac/Tools/IDE/FontSettings.py | 223 |
1 files changed, 223 insertions, 0 deletions
diff --git a/Mac/Tools/IDE/FontSettings.py b/Mac/Tools/IDE/FontSettings.py new file mode 100644 index 0000000..09886ae --- /dev/null +++ b/Mac/Tools/IDE/FontSettings.py @@ -0,0 +1,223 @@ +"""usage: +newsettings = FontDialog(('Chicago', 0, 12, (0, 0, 0))) # font name or id, style flags, size, color (color is ignored) +if newsettings: + fontsettings, tabsettings = newsettings + font, style, size, color = fontsettings # 'font' is always the font name, not the id number + # do something +""" + +import W +import PyEdit +import TextEdit +import Qd +import string +import types +import sys +import MacOS +if hasattr(MacOS, "SysBeep"): + SysBeep = MacOS.SysBeep +else: + def SysBeep(*args): + pass + +_stylenames = ["Plain", "Bold", "Italic", "Underline", "Outline", "Shadow", "Condensed", "Extended"] + + +class _FontDialog: + + #def __del__(self): + # print "doei!" + + def __init__(self, fontsettings, tabsettings): + leftmargin = 60 + leftmargin2 = leftmargin - 16 + self.w = W.ModalDialog((440, 180), 'Font settings') + self.w.fonttitle = W.TextBox((10, 12, leftmargin2, 14), "Font:", TextEdit.teJustRight) + self.w.pop = W.FontMenu((leftmargin, 10, 16, 16), self.setfont) + self.w.fontname = W.TextBox((leftmargin + 20, 12, 150, 14)) + self.w.sizetitle = W.TextBox((10, 38, leftmargin2, 14), "Size:", TextEdit.teJustRight) + self.w.sizeedit = W.EditText((leftmargin, 35, 40, 20), "", self.checksize) + styletop = 64 + self.w.styletitle = W.TextBox((10, styletop + 2, leftmargin2, 14), "Style:", TextEdit.teJustRight) + for i in range(len(_stylenames)): + top = styletop + (i % 4) * 20 + left = leftmargin + 80 * (i > 3) - 2 + if i: + self.w[i] = W.CheckBox((left, top, 76, 16), _stylenames[i], self.dostyle) + else: + self.w[i] = W.CheckBox((left, top, 70, 16), _stylenames[i], self.doplain) + + if tabsettings: + self.lasttab, self.tabmode = tabsettings + self.w.tabsizetitle = W.TextBox((10, -26, leftmargin2, 14), "Tabsize:", TextEdit.teJustRight) + self.w.tabsizeedit = W.EditText((leftmargin, -29, 40, 20), "", self.checktab) + self.w.tabsizeedit.set(`self.lasttab`) + radiobuttons = [] + self.w.tabsizechars = W.RadioButton((leftmargin + 48, -26, 55, 14), "Spaces", + radiobuttons, self.toggletabmode) + self.w.tabsizepixels = W.RadioButton((leftmargin + 110, -26, 55, 14), "Pixels", + radiobuttons, self.toggletabmode) + if self.tabmode: + self.w.tabsizechars.set(1) + else: + self.w.tabsizepixels.set(1) + else: + self.tabmode = None + + self.w.cancelbutton = W.Button((-180, -26, 80, 16), "Cancel", self.cancel) + self.w.donebutton = W.Button((-90, -26, 80, 16), "Done", self.done) + + sampletext = "Sample text." + self.w.sample = W.EditText((230, 10, -10, 130), sampletext, + fontsettings = fontsettings, tabsettings = tabsettings) + + self.w.setdefaultbutton(self.w.donebutton) + self.w.bind('cmd.', self.w.cancelbutton.push) + self.w.bind('cmdw', self.w.donebutton.push) + self.lastsize = fontsettings[2] + self._rv = None + self.set(fontsettings) + self.w.open() + + def toggletabmode(self, onoff): + if self.w.tabsizechars.get(): + tabmode = 1 + else: + tabmode = 0 + if self.tabmode <> tabmode: + port = self.w.wid.GetWindowPort() + (font, style, size, color), (tabsize, dummy) = self.get() + savesettings = W.GetPortFontSettings(port) + W.SetPortFontSettings(port, (font, style, size)) + spacewidth = Qd.StringWidth(' ') + W.SetPortFontSettings(port, savesettings) + if tabmode: + # convert pixels to spaces + self.lasttab = int(round(float(tabsize) / spacewidth)) + else: + # convert spaces to pixels + self.lasttab = spacewidth * tabsize + self.w.tabsizeedit.set(`self.lasttab`) + self.tabmode = tabmode + self.doit() + + def set(self, fontsettings): + font, style, size, color = fontsettings + if type(font) <> types.StringType: + import Res + res = Res.GetResource('FOND', font) + font = res.GetResInfo()[2] + self.w.fontname.set(font) + self.w.sizeedit.set(str(size)) + if style: + for i in range(1, len(_stylenames)): + self.w[i].set(style & 0x01) + style = style >> 1 + else: + self.w[0].set(1) + + def get(self): + font = self.w.fontname.get() + style = 0 + if not self.w[0].get(): + flag = 0x01 + for i in range(1, len(_stylenames)): + if self.w[i].get(): + style = style | flag + flag = flag << 1 + size = self.lastsize + if self.tabmode is None: + return (font, style, size, (0, 0, 0)), (32, 0) + else: + return (font, style, size, (0, 0, 0)), (self.lasttab, self.tabmode) + + def doit(self): + if self.w[0].get(): + style = 0 + else: + style = 0 + for i in range(1, len(_stylenames)): + if self.w[i].get(): + style = style | 2 ** (i - 1) + #self.w.sample.set(`style`) + fontsettings, tabsettings = self.get() + self.w.sample.setfontsettings(fontsettings) + self.w.sample.settabsettings(tabsettings) + + def checktab(self): + tabsize = self.w.tabsizeedit.get() + if not tabsize: + return + try: + tabsize = string.atoi(tabsize) + except (ValueError, OverflowError): + good = 0 + sys.exc_traceback = None + else: + good = 1 <= tabsize <= 500 + if good: + if self.lasttab <> tabsize: + self.lasttab = tabsize + self.doit() + else: + SysBeep(0) + self.w.tabsizeedit.set(`self.lasttab`) + self.w.tabsizeedit.selectall() + + def checksize(self): + size = self.w.sizeedit.get() + if not size: + return + try: + size = string.atoi(size) + except (ValueError, OverflowError): + good = 0 + sys.exc_traceback = None + else: + good = 1 <= size <= 500 + if good: + if self.lastsize <> size: + self.lastsize = size + self.doit() + else: + SysBeep(0) + self.w.sizeedit.set(`self.lastsize`) + self.w.sizeedit.selectall() + + def doplain(self): + for i in range(1, len(_stylenames)): + self.w[i].set(0) + self.w[0].set(1) + self.doit() + + def dostyle(self): + for i in range(1, len(_stylenames)): + if self.w[i].get(): + self.w[0].set(0) + break + else: + self.w[0].set(1) + self.doit() + + def close(self): + self.w.close() + del self.w + + def cancel(self): + self.close() + + def done(self): + self._rv = self.get() + self.close() + + def setfont(self, fontname): + self.w.fontname.set(fontname) + self.doit() + + +def FontDialog(fontsettings, tabsettings = (32, 0)): + fd = _FontDialog(fontsettings, tabsettings) + return fd._rv + +def test(): + print FontDialog(('Zapata-Light', 0, 25, (0, 0, 0))) |