2 newsettings = FontDialog(('Chicago', 0, 12, (0, 0, 0))) # font name or id, style flags, size, color (color is ignored)
4 fontsettings, tabsettings = newsettings
5 font, style, size, color = fontsettings # 'font' is always the font name, not the id number
11 from Carbon
import TextEdit
17 if hasattr(MacOS
, "SysBeep"):
18 SysBeep
= MacOS
.SysBeep
23 _stylenames
= ["Plain", "Bold", "Italic", "Underline", "Outline", "Shadow", "Condensed", "Extended"]
31 def __init__(self
, fontsettings
, tabsettings
):
33 leftmargin2
= leftmargin
- 16
34 self
.w
= W
.ModalDialog((440, 180), 'Font settings')
35 self
.w
.fonttitle
= W
.TextBox((10, 12, leftmargin2
, 14), "Font:", TextEdit
.teJustRight
)
36 self
.w
.pop
= W
.FontMenu((leftmargin
, 10, 16, 16), self
.setfont
)
37 self
.w
.fontname
= W
.TextBox((leftmargin
+ 20, 12, 150, 14))
38 self
.w
.sizetitle
= W
.TextBox((10, 38, leftmargin2
, 14), "Size:", TextEdit
.teJustRight
)
39 self
.w
.sizeedit
= W
.EditText((leftmargin
, 35, 40, 20), "", self
.checksize
)
41 self
.w
.styletitle
= W
.TextBox((10, styletop
+ 2, leftmargin2
, 14), "Style:", TextEdit
.teJustRight
)
42 for i
in range(len(_stylenames
)):
43 top
= styletop
+ (i
% 4) * 20
44 left
= leftmargin
+ 80 * (i
> 3) - 2
46 self
.w
[i
] = W
.CheckBox((left
, top
, 76, 16), _stylenames
[i
], self
.dostyle
)
48 self
.w
[i
] = W
.CheckBox((left
, top
, 70, 16), _stylenames
[i
], self
.doplain
)
51 self
.lasttab
, self
.tabmode
= tabsettings
52 self
.w
.tabsizetitle
= W
.TextBox((10, -26, leftmargin2
, 14), "Tabsize:", TextEdit
.teJustRight
)
53 self
.w
.tabsizeedit
= W
.EditText((leftmargin
, -29, 40, 20), "", self
.checktab
)
54 self
.w
.tabsizeedit
.set(`self
.lasttab`
)
56 self
.w
.tabsizechars
= W
.RadioButton((leftmargin
+ 48, -26, 55, 14), "Spaces",
57 radiobuttons
, self
.toggletabmode
)
58 self
.w
.tabsizepixels
= W
.RadioButton((leftmargin
+ 110, -26, 55, 14), "Pixels",
59 radiobuttons
, self
.toggletabmode
)
61 self
.w
.tabsizechars
.set(1)
63 self
.w
.tabsizepixels
.set(1)
67 self
.w
.cancelbutton
= W
.Button((-180, -26, 80, 16), "Cancel", self
.cancel
)
68 self
.w
.donebutton
= W
.Button((-90, -26, 80, 16), "Done", self
.done
)
70 sampletext
= "Sample text."
71 self
.w
.sample
= W
.EditText((230, 10, -10, 130), sampletext
,
72 fontsettings
= fontsettings
, tabsettings
= tabsettings
)
74 self
.w
.setdefaultbutton(self
.w
.donebutton
)
75 self
.w
.bind('cmd.', self
.w
.cancelbutton
.push
)
76 self
.w
.bind('cmdw', self
.w
.donebutton
.push
)
77 self
.lastsize
= fontsettings
[2]
79 self
.set(fontsettings
)
82 def toggletabmode(self
, onoff
):
83 if self
.w
.tabsizechars
.get():
87 if self
.tabmode
<> tabmode
:
88 port
= self
.w
.wid
.GetWindowPort()
89 (font
, style
, size
, color
), (tabsize
, dummy
) = self
.get()
90 savesettings
= W
.GetPortFontSettings(port
)
91 W
.SetPortFontSettings(port
, (font
, style
, size
))
92 spacewidth
= Qd
.StringWidth(' ')
93 W
.SetPortFontSettings(port
, savesettings
)
95 # convert pixels to spaces
96 self
.lasttab
= int(round(float(tabsize
) / spacewidth
))
98 # convert spaces to pixels
99 self
.lasttab
= spacewidth
* tabsize
100 self
.w
.tabsizeedit
.set(`self
.lasttab`
)
101 self
.tabmode
= tabmode
104 def set(self
, fontsettings
):
105 font
, style
, size
, color
= fontsettings
106 if type(font
) <> types
.StringType
:
107 from Carbon
import Res
108 res
= Res
.GetResource('FOND', font
)
109 font
= res
.GetResInfo()[2]
110 self
.w
.fontname
.set(font
)
111 self
.w
.sizeedit
.set(str(size
))
113 for i
in range(1, len(_stylenames
)):
114 self
.w
[i
].set(style
& 0x01)
120 font
= self
.w
.fontname
.get()
122 if not self
.w
[0].get():
124 for i
in range(1, len(_stylenames
)):
129 if self
.tabmode
is None:
130 return (font
, style
, size
, (0, 0, 0)), (32, 0)
132 return (font
, style
, size
, (0, 0, 0)), (self
.lasttab
, self
.tabmode
)
139 for i
in range(1, len(_stylenames
)):
141 style
= style |
2 ** (i
- 1)
142 #self.w.sample.set(`style`)
143 fontsettings
, tabsettings
= self
.get()
144 self
.w
.sample
.setfontsettings(fontsettings
)
145 self
.w
.sample
.settabsettings(tabsettings
)
148 tabsize
= self
.w
.tabsizeedit
.get()
152 tabsize
= string
.atoi(tabsize
)
153 except (ValueError, OverflowError):
155 sys
.exc_traceback
= None
157 good
= 1 <= tabsize
<= 500
159 if self
.lasttab
<> tabsize
:
160 self
.lasttab
= tabsize
164 self
.w
.tabsizeedit
.set(`self
.lasttab`
)
165 self
.w
.tabsizeedit
.selectall()
168 size
= self
.w
.sizeedit
.get()
172 size
= string
.atoi(size
)
173 except (ValueError, OverflowError):
175 sys
.exc_traceback
= None
177 good
= 1 <= size
<= 500
179 if self
.lastsize
<> size
:
184 self
.w
.sizeedit
.set(`self
.lastsize`
)
185 self
.w
.sizeedit
.selectall()
188 for i
in range(1, len(_stylenames
)):
194 for i
in range(1, len(_stylenames
)):
210 self
._rv
= self
.get()
213 def setfont(self
, fontname
):
214 self
.w
.fontname
.set(fontname
)
218 def FontDialog(fontsettings
, tabsettings
= (32, 0)):
219 fd
= _FontDialog(fontsettings
, tabsettings
)
223 print FontDialog(('Zapata-Light', 0, 25, (0, 0, 0)))