Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
35b50e26
Commit
35b50e26
authored
Jun 21, 2003
by
Just van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changed 8-space indentation to 4
parent
9e9a7c3d
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
1935 additions
and
1935 deletions
+1935
-1935
Lib/plat-mac/EasyDialogs.py
Lib/plat-mac/EasyDialogs.py
+711
-711
Lib/plat-mac/FrameWork.py
Lib/plat-mac/FrameWork.py
+967
-967
Lib/plat-mac/MiniAEFrame.py
Lib/plat-mac/MiniAEFrame.py
+159
-159
Lib/plat-mac/argvemulator.py
Lib/plat-mac/argvemulator.py
+98
-98
No files found.
Lib/plat-mac/EasyDialogs.py
View file @
35b50e26
...
@@ -38,302 +38,302 @@ import os
...
@@ -38,302 +38,302 @@ import os
import
sys
import
sys
__all__
=
[
'Message'
,
'AskString'
,
'AskPassword'
,
'AskYesNoCancel'
,
__all__
=
[
'Message'
,
'AskString'
,
'AskPassword'
,
'AskYesNoCancel'
,
'GetArgv'
,
'AskFileForOpen'
,
'AskFileForSave'
,
'AskFolder'
,
'GetArgv'
,
'AskFileForOpen'
,
'AskFileForSave'
,
'AskFolder'
,
'ProgressBar'
]
'ProgressBar'
]
_initialized
=
0
_initialized
=
0
def
_initialize
():
def
_initialize
():
global
_initialized
global
_initialized
if
_initialized
:
return
if
_initialized
:
return
macresource
.
need
(
"DLOG"
,
260
,
"dialogs.rsrc"
,
__name__
)
macresource
.
need
(
"DLOG"
,
260
,
"dialogs.rsrc"
,
__name__
)
def
_interact
():
def
_interact
():
"""Make sure the application is in the foreground"""
"""Make sure the application is in the foreground"""
AE
.
AEInteractWithUser
(
50000000
)
AE
.
AEInteractWithUser
(
50000000
)
def
cr2lf
(
text
):
def
cr2lf
(
text
):
if
'
\
r
'
in
text
:
if
'
\
r
'
in
text
:
text
=
string
.
join
(
string
.
split
(
text
,
'
\
r
'
),
'
\
n
'
)
text
=
string
.
join
(
string
.
split
(
text
,
'
\
r
'
),
'
\
n
'
)
return
text
return
text
def
lf2cr
(
text
):
def
lf2cr
(
text
):
if
'
\
n
'
in
text
:
if
'
\
n
'
in
text
:
text
=
string
.
join
(
string
.
split
(
text
,
'
\
n
'
),
'
\
r
'
)
text
=
string
.
join
(
string
.
split
(
text
,
'
\
n
'
),
'
\
r
'
)
if
len
(
text
)
>
253
:
if
len
(
text
)
>
253
:
text
=
text
[:
253
]
+
'
\
311
'
text
=
text
[:
253
]
+
'
\
311
'
return
text
return
text
def
Message
(
msg
,
id
=
260
,
ok
=
None
):
def
Message
(
msg
,
id
=
260
,
ok
=
None
):
"""Display a MESSAGE string.
"""Display a MESSAGE string.
Return when the user clicks the OK button or presses Return.
Return when the user clicks the OK button or presses Return.
The MESSAGE string can be at most 255 characters long.
The MESSAGE string can be at most 255 characters long.
"""
"""
_initialize
()
_initialize
()
_interact
()
_interact
()
d
=
GetNewDialog
(
id
,
-
1
)
d
=
GetNewDialog
(
id
,
-
1
)
if
not
d
:
if
not
d
:
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
return
return
h
=
d
.
GetDialogItemAsControl
(
2
)
h
=
d
.
GetDialogItemAsControl
(
2
)
SetDialogItemText
(
h
,
lf2cr
(
msg
))
SetDialogItemText
(
h
,
lf2cr
(
msg
))
if
ok
!=
None
:
if
ok
!=
None
:
h
=
d
.
GetDialogItemAsControl
(
1
)
h
=
d
.
GetDialogItemAsControl
(
1
)
h
.
SetControlTitle
(
ok
)
h
.
SetControlTitle
(
ok
)
d
.
SetDialogDefaultItem
(
1
)
d
.
SetDialogDefaultItem
(
1
)
d
.
AutoSizeDialog
()
d
.
AutoSizeDialog
()
d
.
GetDialogWindow
().
ShowWindow
()
d
.
GetDialogWindow
().
ShowWindow
()
while
1
:
while
1
:
n
=
ModalDialog
(
None
)
n
=
ModalDialog
(
None
)
if
n
==
1
:
if
n
==
1
:
return
return
def
AskString
(
prompt
,
default
=
""
,
id
=
261
,
ok
=
None
,
cancel
=
None
):
def
AskString
(
prompt
,
default
=
""
,
id
=
261
,
ok
=
None
,
cancel
=
None
):
"""Display a PROMPT string and a text entry field with a DEFAULT string.
"""Display a PROMPT string and a text entry field with a DEFAULT string.
Return the contents of the text entry field when the user clicks the
Return the contents of the text entry field when the user clicks the
OK button or presses Return.
OK button or presses Return.
Return None when the user clicks the Cancel button.
Return None when the user clicks the Cancel button.
If omitted, DEFAULT is empty.
If omitted, DEFAULT is empty.
The PROMPT and DEFAULT strings, as well as the return value,
The PROMPT and DEFAULT strings, as well as the return value,
can be at most 255 characters long.
can be at most 255 characters long.
"""
"""
_initialize
()
_initialize
()
_interact
()
_interact
()
d
=
GetNewDialog
(
id
,
-
1
)
d
=
GetNewDialog
(
id
,
-
1
)
if
not
d
:
if
not
d
:
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
return
return
h
=
d
.
GetDialogItemAsControl
(
3
)
h
=
d
.
GetDialogItemAsControl
(
3
)
SetDialogItemText
(
h
,
lf2cr
(
prompt
))
SetDialogItemText
(
h
,
lf2cr
(
prompt
))
h
=
d
.
GetDialogItemAsControl
(
4
)
h
=
d
.
GetDialogItemAsControl
(
4
)
SetDialogItemText
(
h
,
lf2cr
(
default
))
SetDialogItemText
(
h
,
lf2cr
(
default
))
d
.
SelectDialogItemText
(
4
,
0
,
999
)
d
.
SelectDialogItemText
(
4
,
0
,
999
)
# d.SetDialogItem(4, 0, 255)
# d.SetDialogItem(4, 0, 255)
if
ok
!=
None
:
if
ok
!=
None
:
h
=
d
.
GetDialogItemAsControl
(
1
)
h
=
d
.
GetDialogItemAsControl
(
1
)
h
.
SetControlTitle
(
ok
)
h
.
SetControlTitle
(
ok
)
if
cancel
!=
None
:
if
cancel
!=
None
:
h
=
d
.
GetDialogItemAsControl
(
2
)
h
=
d
.
GetDialogItemAsControl
(
2
)
h
.
SetControlTitle
(
cancel
)
h
.
SetControlTitle
(
cancel
)
d
.
SetDialogDefaultItem
(
1
)
d
.
SetDialogDefaultItem
(
1
)
d
.
SetDialogCancelItem
(
2
)
d
.
SetDialogCancelItem
(
2
)
d
.
AutoSizeDialog
()
d
.
AutoSizeDialog
()
d
.
GetDialogWindow
().
ShowWindow
()
d
.
GetDialogWindow
().
ShowWindow
()
while
1
:
while
1
:
n
=
ModalDialog
(
None
)
n
=
ModalDialog
(
None
)
if
n
==
1
:
if
n
==
1
:
h
=
d
.
GetDialogItemAsControl
(
4
)
h
=
d
.
GetDialogItemAsControl
(
4
)
return
cr2lf
(
GetDialogItemText
(
h
))
return
cr2lf
(
GetDialogItemText
(
h
))
if
n
==
2
:
return
None
if
n
==
2
:
return
None
def
AskPassword
(
prompt
,
default
=
''
,
id
=
264
,
ok
=
None
,
cancel
=
None
):
def
AskPassword
(
prompt
,
default
=
''
,
id
=
264
,
ok
=
None
,
cancel
=
None
):
"""Display a PROMPT string and a text entry field with a DEFAULT string.
"""Display a PROMPT string and a text entry field with a DEFAULT string.
The string is displayed as bullets only.
The string is displayed as bullets only.
Return the contents of the text entry field when the user clicks the
Return the contents of the text entry field when the user clicks the
OK button or presses Return.
OK button or presses Return.
Return None when the user clicks the Cancel button.
Return None when the user clicks the Cancel button.
If omitted, DEFAULT is empty.
If omitted, DEFAULT is empty.
The PROMPT and DEFAULT strings, as well as the return value,
The PROMPT and DEFAULT strings, as well as the return value,
can be at most 255 characters long.
can be at most 255 characters long.
"""
"""
_initialize
()
_initialize
()
_interact
()
_interact
()
d
=
GetNewDialog
(
id
,
-
1
)
d
=
GetNewDialog
(
id
,
-
1
)
if
not
d
:
if
not
d
:
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
return
return
h
=
d
.
GetDialogItemAsControl
(
3
)
h
=
d
.
GetDialogItemAsControl
(
3
)
SetDialogItemText
(
h
,
lf2cr
(
prompt
))
SetDialogItemText
(
h
,
lf2cr
(
prompt
))
pwd
=
d
.
GetDialogItemAsControl
(
4
)
pwd
=
d
.
GetDialogItemAsControl
(
4
)
bullets
=
'
\
245
'
*
len
(
default
)
bullets
=
'
\
245
'
*
len
(
default
)
## SetControlData(pwd, kControlEditTextPart, kControlEditTextTextTag, bullets)
## SetControlData(pwd, kControlEditTextPart, kControlEditTextTextTag, bullets)
SetControlData
(
pwd
,
kControlEditTextPart
,
kControlEditTextPasswordTag
,
default
)
SetControlData
(
pwd
,
kControlEditTextPart
,
kControlEditTextPasswordTag
,
default
)
d
.
SelectDialogItemText
(
4
,
0
,
999
)
d
.
SelectDialogItemText
(
4
,
0
,
999
)
Ctl
.
SetKeyboardFocus
(
d
.
GetDialogWindow
(),
pwd
,
kControlEditTextPart
)
Ctl
.
SetKeyboardFocus
(
d
.
GetDialogWindow
(),
pwd
,
kControlEditTextPart
)
if
ok
!=
None
:
if
ok
!=
None
:
h
=
d
.
GetDialogItemAsControl
(
1
)
h
=
d
.
GetDialogItemAsControl
(
1
)
h
.
SetControlTitle
(
ok
)
h
.
SetControlTitle
(
ok
)
if
cancel
!=
None
:
if
cancel
!=
None
:
h
=
d
.
GetDialogItemAsControl
(
2
)
h
=
d
.
GetDialogItemAsControl
(
2
)
h
.
SetControlTitle
(
cancel
)
h
.
SetControlTitle
(
cancel
)
d
.
SetDialogDefaultItem
(
Dialogs
.
ok
)
d
.
SetDialogDefaultItem
(
Dialogs
.
ok
)
d
.
SetDialogCancelItem
(
Dialogs
.
cancel
)
d
.
SetDialogCancelItem
(
Dialogs
.
cancel
)
d
.
AutoSizeDialog
()
d
.
AutoSizeDialog
()
d
.
GetDialogWindow
().
ShowWindow
()
d
.
GetDialogWindow
().
ShowWindow
()
while
1
:
while
1
:
n
=
ModalDialog
(
None
)
n
=
ModalDialog
(
None
)
if
n
==
1
:
if
n
==
1
:
h
=
d
.
GetDialogItemAsControl
(
4
)
h
=
d
.
GetDialogItemAsControl
(
4
)
return
cr2lf
(
GetControlData
(
pwd
,
kControlEditTextPart
,
kControlEditTextPasswordTag
))
return
cr2lf
(
GetControlData
(
pwd
,
kControlEditTextPart
,
kControlEditTextPasswordTag
))
if
n
==
2
:
return
None
if
n
==
2
:
return
None
def
AskYesNoCancel
(
question
,
default
=
0
,
yes
=
None
,
no
=
None
,
cancel
=
None
,
id
=
262
):
def
AskYesNoCancel
(
question
,
default
=
0
,
yes
=
None
,
no
=
None
,
cancel
=
None
,
id
=
262
):
"""Display a QUESTION string which can be answered with Yes or No.
"""Display a QUESTION string which can be answered with Yes or No.
Return 1 when the user clicks the Yes button.
Return 1 when the user clicks the Yes button.
Return 0 when the user clicks the No button.
Return 0 when the user clicks the No button.
Return -1 when the user clicks the Cancel button.
Return -1 when the user clicks the Cancel button.
When the user presses Return, the DEFAULT value is returned.
When the user presses Return, the DEFAULT value is returned.
If omitted, this is 0 (No).
If omitted, this is 0 (No).
The QUESTION string can be at most 255 characters.
The QUESTION string can be at most 255 characters.
"""
"""
_initialize
()
_initialize
()
_interact
()
_interact
()
d
=
GetNewDialog
(
id
,
-
1
)
d
=
GetNewDialog
(
id
,
-
1
)
if
not
d
:
if
not
d
:
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
return
return
# Button assignments:
# Button assignments:
# 1 = default (invisible)
# 1 = default (invisible)
# 2 = Yes
# 2 = Yes
# 3 = No
# 3 = No
# 4 = Cancel
# 4 = Cancel
# The question string is item 5
# The question string is item 5
h
=
d
.
GetDialogItemAsControl
(
5
)
h
=
d
.
GetDialogItemAsControl
(
5
)
SetDialogItemText
(
h
,
lf2cr
(
question
))
SetDialogItemText
(
h
,
lf2cr
(
question
))
if
yes
!=
None
:
if
yes
!=
None
:
if
yes
==
''
:
if
yes
==
''
:
d
.
HideDialogItem
(
2
)
d
.
HideDialogItem
(
2
)
else
:
else
:
h
=
d
.
GetDialogItemAsControl
(
2
)
h
=
d
.
GetDialogItemAsControl
(
2
)
h
.
SetControlTitle
(
yes
)
h
.
SetControlTitle
(
yes
)
if
no
!=
None
:
if
no
!=
None
:
if
no
==
''
:
if
no
==
''
:
d
.
HideDialogItem
(
3
)
d
.
HideDialogItem
(
3
)
else
:
else
:
h
=
d
.
GetDialogItemAsControl
(
3
)
h
=
d
.
GetDialogItemAsControl
(
3
)
h
.
SetControlTitle
(
no
)
h
.
SetControlTitle
(
no
)
if
cancel
!=
None
:
if
cancel
!=
None
:
if
cancel
==
''
:
if
cancel
==
''
:
d
.
HideDialogItem
(
4
)
d
.
HideDialogItem
(
4
)
else
:
else
:
h
=
d
.
GetDialogItemAsControl
(
4
)
h
=
d
.
GetDialogItemAsControl
(
4
)
h
.
SetControlTitle
(
cancel
)
h
.
SetControlTitle
(
cancel
)
d
.
SetDialogCancelItem
(
4
)
d
.
SetDialogCancelItem
(
4
)
if
default
==
1
:
if
default
==
1
:
d
.
SetDialogDefaultItem
(
2
)
d
.
SetDialogDefaultItem
(
2
)
elif
default
==
0
:
elif
default
==
0
:
d
.
SetDialogDefaultItem
(
3
)
d
.
SetDialogDefaultItem
(
3
)
elif
default
==
-
1
:
elif
default
==
-
1
:
d
.
SetDialogDefaultItem
(
4
)
d
.
SetDialogDefaultItem
(
4
)
d
.
AutoSizeDialog
()
d
.
AutoSizeDialog
()
d
.
GetDialogWindow
().
ShowWindow
()
d
.
GetDialogWindow
().
ShowWindow
()
while
1
:
while
1
:
n
=
ModalDialog
(
None
)
n
=
ModalDialog
(
None
)
if
n
==
1
:
return
default
if
n
==
1
:
return
default
if
n
==
2
:
return
1
if
n
==
2
:
return
1
if
n
==
3
:
return
0
if
n
==
3
:
return
0
if
n
==
4
:
return
-
1
if
n
==
4
:
return
-
1
screenbounds
=
Qd
.
GetQDGlobalsScreenBits
().
bounds
screenbounds
=
Qd
.
GetQDGlobalsScreenBits
().
bounds
screenbounds
=
screenbounds
[
0
]
+
4
,
screenbounds
[
1
]
+
4
,
\
screenbounds
=
screenbounds
[
0
]
+
4
,
screenbounds
[
1
]
+
4
,
\
screenbounds
[
2
]
-
4
,
screenbounds
[
3
]
-
4
screenbounds
[
2
]
-
4
,
screenbounds
[
3
]
-
4
kControlProgressBarIndeterminateTag
=
'inde'
# from Controls.py
kControlProgressBarIndeterminateTag
=
'inde'
# from Controls.py
class
ProgressBar
:
class
ProgressBar
:
def
__init__
(
self
,
title
=
"Working..."
,
maxval
=
0
,
label
=
""
,
id
=
263
):
def
__init__
(
self
,
title
=
"Working..."
,
maxval
=
0
,
label
=
""
,
id
=
263
):
self
.
w
=
None
self
.
w
=
None
self
.
d
=
None
self
.
d
=
None
_initialize
()
_initialize
()
self
.
d
=
GetNewDialog
(
id
,
-
1
)
self
.
d
=
GetNewDialog
(
id
,
-
1
)
self
.
w
=
self
.
d
.
GetDialogWindow
()
self
.
w
=
self
.
d
.
GetDialogWindow
()
self
.
label
(
label
)
self
.
label
(
label
)
self
.
title
(
title
)
self
.
title
(
title
)
self
.
set
(
0
,
maxval
)
self
.
set
(
0
,
maxval
)
self
.
d
.
AutoSizeDialog
()
self
.
d
.
AutoSizeDialog
()
self
.
w
.
ShowWindow
()
self
.
w
.
ShowWindow
()
self
.
d
.
DrawDialog
()
self
.
d
.
DrawDialog
()
def
__del__
(
self
):
def
__del__
(
self
):
if
self
.
w
:
if
self
.
w
:
self
.
w
.
BringToFront
()
self
.
w
.
BringToFront
()
self
.
w
.
HideWindow
()
self
.
w
.
HideWindow
()
del
self
.
w
del
self
.
w
del
self
.
d
del
self
.
d
def
title
(
self
,
newstr
=
""
):
def
title
(
self
,
newstr
=
""
):
"""title(text) - Set title of progress window"""
"""title(text) - Set title of progress window"""
self
.
w
.
BringToFront
()
self
.
w
.
BringToFront
()
self
.
w
.
SetWTitle
(
newstr
)
self
.
w
.
SetWTitle
(
newstr
)
def
label
(
self
,
*
newstr
):
def
label
(
self
,
*
newstr
):
"""label(text) - Set text in progress box"""
"""label(text) - Set text in progress box"""
self
.
w
.
BringToFront
()
self
.
w
.
BringToFront
()
if
newstr
:
if
newstr
:
self
.
_label
=
lf2cr
(
newstr
[
0
])
self
.
_label
=
lf2cr
(
newstr
[
0
])
text_h
=
self
.
d
.
GetDialogItemAsControl
(
2
)
text_h
=
self
.
d
.
GetDialogItemAsControl
(
2
)
SetDialogItemText
(
text_h
,
self
.
_label
)
SetDialogItemText
(
text_h
,
self
.
_label
)
def
_update
(
self
,
value
):
def
_update
(
self
,
value
):
maxval
=
self
.
maxval
maxval
=
self
.
maxval
if
maxval
==
0
:
# an indeterminate bar
if
maxval
==
0
:
# an indeterminate bar
Ctl
.
IdleControls
(
self
.
w
)
# spin the barber pole
Ctl
.
IdleControls
(
self
.
w
)
# spin the barber pole
else
:
# a determinate bar
else
:
# a determinate bar
if
maxval
>
32767
:
if
maxval
>
32767
:
value
=
int
(
value
/
(
maxval
/
32767.0
))
value
=
int
(
value
/
(
maxval
/
32767.0
))
maxval
=
32767
maxval
=
32767
maxval
=
int
(
maxval
)
maxval
=
int
(
maxval
)
value
=
int
(
value
)
value
=
int
(
value
)
progbar
=
self
.
d
.
GetDialogItemAsControl
(
3
)
progbar
=
self
.
d
.
GetDialogItemAsControl
(
3
)
progbar
.
SetControlMaximum
(
maxval
)
progbar
.
SetControlMaximum
(
maxval
)
progbar
.
SetControlValue
(
value
)
# set the bar length
progbar
.
SetControlValue
(
value
)
# set the bar length
# Test for cancel button
# Test for cancel button
ready
,
ev
=
Evt
.
WaitNextEvent
(
Events
.
mDownMask
,
1
)
ready
,
ev
=
Evt
.
WaitNextEvent
(
Events
.
mDownMask
,
1
)
if
ready
:
if
ready
:
what
,
msg
,
when
,
where
,
mod
=
ev
what
,
msg
,
when
,
where
,
mod
=
ev
part
=
Win
.
FindWindow
(
where
)[
0
]
part
=
Win
.
FindWindow
(
where
)[
0
]
if
Dlg
.
IsDialogEvent
(
ev
):
if
Dlg
.
IsDialogEvent
(
ev
):
ds
=
Dlg
.
DialogSelect
(
ev
)
ds
=
Dlg
.
DialogSelect
(
ev
)
if
ds
[
0
]
and
ds
[
1
]
==
self
.
d
and
ds
[
-
1
]
==
1
:
if
ds
[
0
]
and
ds
[
1
]
==
self
.
d
and
ds
[
-
1
]
==
1
:
self
.
w
.
HideWindow
()
self
.
w
.
HideWindow
()
self
.
w
=
None
self
.
w
=
None
self
.
d
=
None
self
.
d
=
None
raise
KeyboardInterrupt
,
ev
raise
KeyboardInterrupt
,
ev
else
:
else
:
if
part
==
4
:
# inDrag
if
part
==
4
:
# inDrag
self
.
w
.
DragWindow
(
where
,
screenbounds
)
self
.
w
.
DragWindow
(
where
,
screenbounds
)
else
:
else
:
MacOS
.
HandleEvent
(
ev
)
MacOS
.
HandleEvent
(
ev
)
def
set
(
self
,
value
,
max
=
None
):
def
set
(
self
,
value
,
max
=
None
):
"""set(value) - Set progress bar position"""
"""set(value) - Set progress bar position"""
if
max
!=
None
:
if
max
!=
None
:
self
.
maxval
=
max
self
.
maxval
=
max
bar
=
self
.
d
.
GetDialogItemAsControl
(
3
)
bar
=
self
.
d
.
GetDialogItemAsControl
(
3
)
if
max
<=
0
:
# indeterminate bar
if
max
<=
0
:
# indeterminate bar
bar
.
SetControlData
(
0
,
kControlProgressBarIndeterminateTag
,
'
\
x01
'
)
bar
.
SetControlData
(
0
,
kControlProgressBarIndeterminateTag
,
'
\
x01
'
)
else
:
# determinate bar
else
:
# determinate bar
bar
.
SetControlData
(
0
,
kControlProgressBarIndeterminateTag
,
'
\
x00
'
)
bar
.
SetControlData
(
0
,
kControlProgressBarIndeterminateTag
,
'
\
x00
'
)
if
value
<
0
:
if
value
<
0
:
value
=
0
value
=
0
elif
value
>
self
.
maxval
:
elif
value
>
self
.
maxval
:
value
=
self
.
maxval
value
=
self
.
maxval
self
.
curval
=
value
self
.
curval
=
value
self
.
_update
(
value
)
self
.
_update
(
value
)
def
inc
(
self
,
n
=
1
):
def
inc
(
self
,
n
=
1
):
"""inc(amt) - Increment progress bar position"""
"""inc(amt) - Increment progress bar position"""
self
.
set
(
self
.
curval
+
n
)
self
.
set
(
self
.
curval
+
n
)
ARGV_ID
=
265
ARGV_ID
=
265
ARGV_ITEM_OK
=
1
ARGV_ITEM_OK
=
1
...
@@ -353,487 +353,487 @@ ARGV_CMDLINE_DATA=14
...
@@ -353,487 +353,487 @@ ARGV_CMDLINE_DATA=14
##def _myModalDialog(d):
##def _myModalDialog(d):
## while 1:
## while 1:
##
ready, ev = Evt.WaitNextEvent(0xffff, -1)
## ready, ev = Evt.WaitNextEvent(0xffff, -1)
##
print 'DBG: WNE', ready, ev
## print 'DBG: WNE', ready, ev
##
if ready :
## if ready :
##
what,msg,when,where,mod = ev
## what,msg,when,where,mod = ev
##
part, window = Win.FindWindow(where)
## part, window = Win.FindWindow(where)
##
if Dlg.IsDialogEvent(ev):
## if Dlg.IsDialogEvent(ev):
##
didit, dlgdone, itemdone = Dlg.DialogSelect(ev)
## didit, dlgdone, itemdone = Dlg.DialogSelect(ev)
##
print 'DBG: DialogSelect', didit, dlgdone, itemdone, d
## print 'DBG: DialogSelect', didit, dlgdone, itemdone, d
##
if didit and dlgdone == d:
## if didit and dlgdone == d:
##
return itemdone
## return itemdone
##
elif window == d.GetDialogWindow():
## elif window == d.GetDialogWindow():
##
d.GetDialogWindow().SelectWindow()
## d.GetDialogWindow().SelectWindow()
##
if part == 4: # inDrag
## if part == 4: # inDrag
##
d.DragWindow(where, screenbounds)
## d.DragWindow(where, screenbounds)
##
else:
## else:
##
MacOS.HandleEvent(ev)
## MacOS.HandleEvent(ev)
##
else:
## else:
##
MacOS.HandleEvent(ev)
## MacOS.HandleEvent(ev)
##
##
def
_setmenu
(
control
,
items
):
def
_setmenu
(
control
,
items
):
mhandle
=
control
.
GetControlData_Handle
(
Controls
.
kControlMenuPart
,
mhandle
=
control
.
GetControlData_Handle
(
Controls
.
kControlMenuPart
,
Controls
.
kControlPopupButtonMenuHandleTag
)
Controls
.
kControlPopupButtonMenuHandleTag
)
menu
=
Menu
.
as_Menu
(
mhandle
)
menu
=
Menu
.
as_Menu
(
mhandle
)
for
item
in
items
:
for
item
in
items
:
if
type
(
item
)
==
type
(()):
if
type
(
item
)
==
type
(()):
label
=
item
[
0
]
label
=
item
[
0
]
else
:
else
:
label
=
item
label
=
item
if
label
[
-
1
]
==
'='
or
label
[
-
1
]
==
':'
:
if
label
[
-
1
]
==
'='
or
label
[
-
1
]
==
':'
:
label
=
label
[:
-
1
]
label
=
label
[:
-
1
]
menu
.
AppendMenu
(
label
)
menu
.
AppendMenu
(
label
)
##
mhandle, mid = menu.getpopupinfo()
## mhandle, mid = menu.getpopupinfo()
##
control.SetControlData_Handle(Controls.kControlMenuPart,
## control.SetControlData_Handle(Controls.kControlMenuPart,
##
Controls.kControlPopupButtonMenuHandleTag, mhandle)
## Controls.kControlPopupButtonMenuHandleTag, mhandle)
control
.
SetControlMinimum
(
1
)
control
.
SetControlMinimum
(
1
)
control
.
SetControlMaximum
(
len
(
items
)
+
1
)
control
.
SetControlMaximum
(
len
(
items
)
+
1
)
def
_selectoption
(
d
,
optionlist
,
idx
):
def
_selectoption
(
d
,
optionlist
,
idx
):
if
idx
<
0
or
idx
>=
len
(
optionlist
):
if
idx
<
0
or
idx
>=
len
(
optionlist
):
MacOS
.
SysBeep
()
MacOS
.
SysBeep
()
return
return
option
=
optionlist
[
idx
]
option
=
optionlist
[
idx
]
if
type
(
option
)
==
type
(()):
if
type
(
option
)
==
type
(()):
if
len
(
option
)
==
4
:
if
len
(
option
)
==
4
:
help
=
option
[
2
]
help
=
option
[
2
]
elif
len
(
option
)
>
1
:
elif
len
(
option
)
>
1
:
help
=
option
[
-
1
]
help
=
option
[
-
1
]
else
:
help
=
''
else
:
help
=
''
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_EXPLAIN
)
if
help
and
len
(
help
)
>
250
:
help
=
help
[:
250
]
+
'...'
Dlg
.
SetDialogItemText
(
h
,
help
)
hasvalue
=
0
if
type
(
option
)
==
type
(()):
label
=
option
[
0
]
else
:
else
:
label
=
option
help
=
''
if
label
[
-
1
]
==
'='
or
label
[
-
1
]
==
':'
:
else
:
hasvalue
=
1
help
=
''
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_VALUE
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_EXPLAIN
)
Dlg
.
SetDialogItemText
(
h
,
''
)
if
help
and
len
(
help
)
>
250
:
if
hasvalue
:
help
=
help
[:
250
]
+
'...'
d
.
ShowDialogItem
(
ARGV_OPTION_VALUE
)
Dlg
.
SetDialogItemText
(
h
,
help
)
d
.
SelectDialogItemText
(
ARGV_OPTION_VALUE
,
0
,
0
)
hasvalue
=
0
else
:
if
type
(
option
)
==
type
(()):
d
.
HideDialogItem
(
ARGV_OPTION_VALUE
)
label
=
option
[
0
]
else
:
label
=
option
if
label
[
-
1
]
==
'='
or
label
[
-
1
]
==
':'
:
hasvalue
=
1
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_VALUE
)
Dlg
.
SetDialogItemText
(
h
,
''
)
if
hasvalue
:
d
.
ShowDialogItem
(
ARGV_OPTION_VALUE
)
d
.
SelectDialogItemText
(
ARGV_OPTION_VALUE
,
0
,
0
)
else
:
d
.
HideDialogItem
(
ARGV_OPTION_VALUE
)
def
GetArgv
(
optionlist
=
None
,
commandlist
=
None
,
addoldfile
=
1
,
addnewfile
=
1
,
addfolder
=
1
,
id
=
ARGV_ID
):
def
GetArgv
(
optionlist
=
None
,
commandlist
=
None
,
addoldfile
=
1
,
addnewfile
=
1
,
addfolder
=
1
,
id
=
ARGV_ID
):
_initialize
()
_initialize
()
_interact
()
_interact
()
d
=
GetNewDialog
(
id
,
-
1
)
d
=
GetNewDialog
(
id
,
-
1
)
if
not
d
:
if
not
d
:
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
print
"EasyDialogs: Can't get DLOG resource with id ="
,
id
,
" (missing resource file?)"
return
return
# h = d.GetDialogItemAsControl(3)
# h = d.GetDialogItemAsControl(3)
# SetDialogItemText(h, lf2cr(prompt))
# SetDialogItemText(h, lf2cr(prompt))
# h = d.GetDialogItemAsControl(4)
# h = d.GetDialogItemAsControl(4)
# SetDialogItemText(h, lf2cr(default))
# SetDialogItemText(h, lf2cr(default))
# d.SelectDialogItemText(4, 0, 999)
# d.SelectDialogItemText(4, 0, 999)
# d.SetDialogItem(4, 0, 255)
# d.SetDialogItem(4, 0, 255)
if
optionlist
:
if
optionlist
:
_setmenu
(
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
),
optionlist
)
_setmenu
(
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
),
optionlist
)
_selectoption
(
d
,
optionlist
,
0
)
_selectoption
(
d
,
optionlist
,
0
)
else
:
else
:
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
DeactivateControl
()
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
DeactivateControl
()
if
commandlist
:
if
commandlist
:
_setmenu
(
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
),
commandlist
)
_setmenu
(
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
),
commandlist
)
if
type
(
commandlist
[
0
])
==
type
(())
and
len
(
commandlist
[
0
])
>
1
:
if
type
(
commandlist
[
0
])
==
type
(())
and
len
(
commandlist
[
0
])
>
1
:
help
=
commandlist
[
0
][
-
1
]
help
=
commandlist
[
0
][
-
1
]
h
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_EXPLAIN
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_EXPLAIN
)
Dlg
.
SetDialogItemText
(
h
,
help
)
Dlg
.
SetDialogItemText
(
h
,
help
)
else
:
else
:
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
DeactivateControl
()
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
DeactivateControl
()
if
not
addoldfile
:
if
not
addoldfile
:
d
.
GetDialogItemAsControl
(
ARGV_ADD_OLDFILE
).
DeactivateControl
()
d
.
GetDialogItemAsControl
(
ARGV_ADD_OLDFILE
).
DeactivateControl
()
if
not
addnewfile
:
if
not
addnewfile
:
d
.
GetDialogItemAsControl
(
ARGV_ADD_NEWFILE
).
DeactivateControl
()
d
.
GetDialogItemAsControl
(
ARGV_ADD_NEWFILE
).
DeactivateControl
()
if
not
addfolder
:
if
not
addfolder
:
d
.
GetDialogItemAsControl
(
ARGV_ADD_FOLDER
).
DeactivateControl
()
d
.
GetDialogItemAsControl
(
ARGV_ADD_FOLDER
).
DeactivateControl
()
d
.
SetDialogDefaultItem
(
ARGV_ITEM_OK
)
d
.
SetDialogDefaultItem
(
ARGV_ITEM_OK
)
d
.
SetDialogCancelItem
(
ARGV_ITEM_CANCEL
)
d
.
SetDialogCancelItem
(
ARGV_ITEM_CANCEL
)
d
.
GetDialogWindow
().
ShowWindow
()
d
.
GetDialogWindow
().
ShowWindow
()
d
.
DrawDialog
()
d
.
DrawDialog
()
if
hasattr
(
MacOS
,
'SchedParams'
):
if
hasattr
(
MacOS
,
'SchedParams'
):
appsw
=
MacOS
.
SchedParams
(
1
,
0
)
appsw
=
MacOS
.
SchedParams
(
1
,
0
)
try
:
try
:
while
1
:
while
1
:
stringstoadd
=
[]
stringstoadd
=
[]
n
=
ModalDialog
(
None
)
n
=
ModalDialog
(
None
)
if
n
==
ARGV_ITEM_OK
:
if
n
==
ARGV_ITEM_OK
:
break
break
elif
n
==
ARGV_ITEM_CANCEL
:
elif
n
==
ARGV_ITEM_CANCEL
:
raise
SystemExit
raise
SystemExit
elif
n
==
ARGV_OPTION_GROUP
:
elif
n
==
ARGV_OPTION_GROUP
:
idx
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
GetControlValue
()
-
1
idx
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
GetControlValue
()
-
1
_selectoption
(
d
,
optionlist
,
idx
)
_selectoption
(
d
,
optionlist
,
idx
)
elif
n
==
ARGV_OPTION_VALUE
:
elif
n
==
ARGV_OPTION_VALUE
:
pass
pass
elif
n
==
ARGV_OPTION_ADD
:
elif
n
==
ARGV_OPTION_ADD
:
idx
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
GetControlValue
()
-
1
idx
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_GROUP
).
GetControlValue
()
-
1
if
0
<=
idx
<
len
(
optionlist
):
if
0
<=
idx
<
len
(
optionlist
):
option
=
optionlist
[
idx
]
option
=
optionlist
[
idx
]
if
type
(
option
)
==
type
(()):
if
type
(
option
)
==
type
(()):
option
=
option
[
0
]
option
=
option
[
0
]
if
option
[
-
1
]
==
'='
or
option
[
-
1
]
==
':'
:
if
option
[
-
1
]
==
'='
or
option
[
-
1
]
==
':'
:
option
=
option
[:
-
1
]
option
=
option
[:
-
1
]
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_VALUE
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_OPTION_VALUE
)
value
=
Dlg
.
GetDialogItemText
(
h
)
value
=
Dlg
.
GetDialogItemText
(
h
)
else
:
else
:
value
=
''
value
=
''
if
len
(
option
)
==
1
:
if
len
(
option
)
==
1
:
stringtoadd
=
'-'
+
option
stringtoadd
=
'-'
+
option
else
:
else
:
stringtoadd
=
'--'
+
option
stringtoadd
=
'--'
+
option
stringstoadd
=
[
stringtoadd
]
stringstoadd
=
[
stringtoadd
]
if
value
:
if
value
:
stringstoadd
.
append
(
value
)
stringstoadd
.
append
(
value
)
else
:
else
:
MacOS
.
SysBeep
()
MacOS
.
SysBeep
()
elif
n
==
ARGV_COMMAND_GROUP
:
elif
n
==
ARGV_COMMAND_GROUP
:
idx
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
GetControlValue
()
-
1
idx
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
GetControlValue
()
-
1
if
0
<=
idx
<
len
(
commandlist
)
and
type
(
commandlist
[
idx
])
==
type
(())
and
\
if
0
<=
idx
<
len
(
commandlist
)
and
type
(
commandlist
[
idx
])
==
type
(())
and
\
len
(
commandlist
[
idx
])
>
1
:
len
(
commandlist
[
idx
])
>
1
:
help
=
commandlist
[
idx
][
-
1
]
help
=
commandlist
[
idx
][
-
1
]
h
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_EXPLAIN
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_EXPLAIN
)
Dlg
.
SetDialogItemText
(
h
,
help
)
Dlg
.
SetDialogItemText
(
h
,
help
)
elif
n
==
ARGV_COMMAND_ADD
:
elif
n
==
ARGV_COMMAND_ADD
:
idx
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
GetControlValue
()
-
1
idx
=
d
.
GetDialogItemAsControl
(
ARGV_COMMAND_GROUP
).
GetControlValue
()
-
1
if
0
<=
idx
<
len
(
commandlist
):
if
0
<=
idx
<
len
(
commandlist
):
command
=
commandlist
[
idx
]
command
=
commandlist
[
idx
]
if
type
(
command
)
==
type
(()):
if
type
(
command
)
==
type
(()):
command
=
command
[
0
]
command
=
command
[
0
]
stringstoadd
=
[
command
]
stringstoadd
=
[
command
]
else
:
else
:
MacOS
.
SysBeep
()
MacOS
.
SysBeep
()
elif
n
==
ARGV_ADD_OLDFILE
:
elif
n
==
ARGV_ADD_OLDFILE
:
pathname
=
AskFileForOpen
()
pathname
=
AskFileForOpen
()
if
pathname
:
if
pathname
:
stringstoadd
=
[
pathname
]
stringstoadd
=
[
pathname
]
elif
n
==
ARGV_ADD_NEWFILE
:
elif
n
==
ARGV_ADD_NEWFILE
:
pathname
=
AskFileForSave
()
pathname
=
AskFileForSave
()
if
pathname
:
if
pathname
:
stringstoadd
=
[
pathname
]
stringstoadd
=
[
pathname
]
elif
n
==
ARGV_ADD_FOLDER
:
elif
n
==
ARGV_ADD_FOLDER
:
pathname
=
AskFolder
()
pathname
=
AskFolder
()
if
pathname
:
if
pathname
:
stringstoadd
=
[
pathname
]
stringstoadd
=
[
pathname
]
elif
n
==
ARGV_CMDLINE_DATA
:
elif
n
==
ARGV_CMDLINE_DATA
:
pass
# Nothing to do
pass
# Nothing to do
else
:
else
:
raise
RuntimeError
,
"Unknown dialog item %d"
%
n
raise
RuntimeError
,
"Unknown dialog item %d"
%
n
for
stringtoadd
in
stringstoadd
:
for
stringtoadd
in
stringstoadd
:
if
'"'
in
stringtoadd
or
"'"
in
stringtoadd
or
" "
in
stringtoadd
:
if
'"'
in
stringtoadd
or
"'"
in
stringtoadd
or
" "
in
stringtoadd
:
stringtoadd
=
`stringtoadd`
stringtoadd
=
`stringtoadd`
h
=
d
.
GetDialogItemAsControl
(
ARGV_CMDLINE_DATA
)
oldstr
=
GetDialogItemText
(
h
)
if
oldstr
and
oldstr
[
-
1
]
!=
' '
:
oldstr
=
oldstr
+
' '
oldstr
=
oldstr
+
stringtoadd
if
oldstr
[
-
1
]
!=
' '
:
oldstr
=
oldstr
+
' '
SetDialogItemText
(
h
,
oldstr
)
d
.
SelectDialogItemText
(
ARGV_CMDLINE_DATA
,
0x7fff
,
0x7fff
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_CMDLINE_DATA
)
h
=
d
.
GetDialogItemAsControl
(
ARGV_CMDLINE_DATA
)
oldstr
=
GetDialogItemText
(
h
)
oldstr
=
GetDialogItemText
(
h
)
tmplist
=
string
.
split
(
oldstr
)
if
oldstr
and
oldstr
[
-
1
]
!=
' '
:
newlist
=
[]
oldstr
=
oldstr
+
' '
while
tmplist
:
oldstr
=
oldstr
+
stringtoadd
item
=
tmplist
[
0
]
if
oldstr
[
-
1
]
!=
' '
:
del
tmplist
[
0
]
oldstr
=
oldstr
+
' '
if
item
[
0
]
==
'"'
:
SetDialogItemText
(
h
,
oldstr
)
while
item
[
-
1
]
!=
'"'
:
d
.
SelectDialogItemText
(
ARGV_CMDLINE_DATA
,
0x7fff
,
0x7fff
)
if
not
tmplist
:
h
=
d
.
GetDialogItemAsControl
(
ARGV_CMDLINE_DATA
)
raise
RuntimeError
,
"Unterminated quoted argument"
oldstr
=
GetDialogItemText
(
h
)
item
=
item
+
' '
+
tmplist
[
0
]
tmplist
=
string
.
split
(
oldstr
)
del
tmplist
[
0
]
newlist
=
[]
item
=
item
[
1
:
-
1
]
while
tmplist
:
if
item
[
0
]
==
"'"
:
item
=
tmplist
[
0
]
while
item
[
-
1
]
!=
"'"
:
del
tmplist
[
0
]
if
not
tmplist
:
if
item
[
0
]
==
'"'
:
raise
RuntimeError
,
"Unterminated quoted argument"
while
item
[
-
1
]
!=
'"'
:
item
=
item
+
' '
+
tmplist
[
0
]
if
not
tmplist
:
del
tmplist
[
0
]
raise
RuntimeError
,
"Unterminated quoted argument"
item
=
item
[
1
:
-
1
]
item
=
item
+
' '
+
tmplist
[
0
]
newlist
.
append
(
item
)
del
tmplist
[
0
]
return
newlist
item
=
item
[
1
:
-
1
]
finally
:
if
item
[
0
]
==
"'"
:
if
hasattr
(
MacOS
,
'SchedParams'
):
while
item
[
-
1
]
!=
"'"
:
MacOS
.
SchedParams
(
*
appsw
)
if
not
tmplist
:
del
d
raise
RuntimeError
,
"Unterminated quoted argument"
item
=
item
+
' '
+
tmplist
[
0
]
del
tmplist
[
0
]
item
=
item
[
1
:
-
1
]
newlist
.
append
(
item
)
return
newlist
finally
:
if
hasattr
(
MacOS
,
'SchedParams'
):
MacOS
.
SchedParams
(
*
appsw
)
del
d
def
_process_Nav_args
(
dftflags
,
**
args
):
def
_process_Nav_args
(
dftflags
,
**
args
):
import
aepack
import
aepack
import
Carbon.AE
import
Carbon.AE
import
Carbon.File
import
Carbon.File
for
k
in
args
.
keys
():
for
k
in
args
.
keys
():
if
args
[
k
]
is
None
:
if
args
[
k
]
is
None
:
del
args
[
k
]
del
args
[
k
]
# Set some defaults, and modify some arguments
# Set some defaults, and modify some arguments
if
not
args
.
has_key
(
'dialogOptionFlags'
):
if
not
args
.
has_key
(
'dialogOptionFlags'
):
args
[
'dialogOptionFlags'
]
=
dftflags
args
[
'dialogOptionFlags'
]
=
dftflags
if
args
.
has_key
(
'defaultLocation'
)
and
\
if
args
.
has_key
(
'defaultLocation'
)
and
\
not
isinstance
(
args
[
'defaultLocation'
],
Carbon
.
AE
.
AEDesc
):
not
isinstance
(
args
[
'defaultLocation'
],
Carbon
.
AE
.
AEDesc
):
defaultLocation
=
args
[
'defaultLocation'
]
defaultLocation
=
args
[
'defaultLocation'
]
if
isinstance
(
defaultLocation
,
(
Carbon
.
File
.
FSSpec
,
Carbon
.
File
.
FSRef
)):
if
isinstance
(
defaultLocation
,
(
Carbon
.
File
.
FSSpec
,
Carbon
.
File
.
FSRef
)):
args
[
'defaultLocation'
]
=
aepack
.
pack
(
defaultLocation
)
args
[
'defaultLocation'
]
=
aepack
.
pack
(
defaultLocation
)
else
:
else
:
defaultLocation
=
Carbon
.
File
.
FSRef
(
defaultLocation
)
defaultLocation
=
Carbon
.
File
.
FSRef
(
defaultLocation
)
args
[
'defaultLocation'
]
=
aepack
.
pack
(
defaultLocation
)
args
[
'defaultLocation'
]
=
aepack
.
pack
(
defaultLocation
)
if
args
.
has_key
(
'typeList'
)
and
not
isinstance
(
args
[
'typeList'
],
Carbon
.
Res
.
ResourceType
):
if
args
.
has_key
(
'typeList'
)
and
not
isinstance
(
args
[
'typeList'
],
Carbon
.
Res
.
ResourceType
):
typeList
=
args
[
'typeList'
][:]
typeList
=
args
[
'typeList'
][:]
# Workaround for OSX typeless files:
# Workaround for OSX typeless files:
if
'TEXT'
in
typeList
and
not
'
\
0
\
0
\
0
\
0
'
in
typeList
:
if
'TEXT'
in
typeList
and
not
'
\
0
\
0
\
0
\
0
'
in
typeList
:
typeList
=
typeList
+
(
'
\
0
\
0
\
0
\
0
'
,)
typeList
=
typeList
+
(
'
\
0
\
0
\
0
\
0
'
,)
data
=
'Pyth'
+
struct
.
pack
(
"hh"
,
0
,
len
(
typeList
))
data
=
'Pyth'
+
struct
.
pack
(
"hh"
,
0
,
len
(
typeList
))
for
type
in
typeList
:
for
type
in
typeList
:
data
=
data
+
type
data
=
data
+
type
args
[
'typeList'
]
=
Carbon
.
Res
.
Handle
(
data
)
args
[
'typeList'
]
=
Carbon
.
Res
.
Handle
(
data
)
tpwanted
=
str
tpwanted
=
str
if
args
.
has_key
(
'wanted'
):
if
args
.
has_key
(
'wanted'
):
tpwanted
=
args
[
'wanted'
]
tpwanted
=
args
[
'wanted'
]
del
args
[
'wanted'
]
del
args
[
'wanted'
]
return
args
,
tpwanted
return
args
,
tpwanted
def
_dummy_Nav_eventproc
(
msg
,
data
):
def
_dummy_Nav_eventproc
(
msg
,
data
):
pass
pass
_default_Nav_eventproc
=
_dummy_Nav_eventproc
_default_Nav_eventproc
=
_dummy_Nav_eventproc
def
SetDefaultEventProc
(
proc
):
def
SetDefaultEventProc
(
proc
):
global
_default_Nav_eventproc
global
_default_Nav_eventproc
rv
=
_default_Nav_eventproc
rv
=
_default_Nav_eventproc
if
proc
is
None
:
if
proc
is
None
:
proc
=
_dummy_Nav_eventproc
proc
=
_dummy_Nav_eventproc
_default_Nav_eventproc
=
proc
_default_Nav_eventproc
=
proc
return
rv
return
rv
def
AskFileForOpen
(
def
AskFileForOpen
(
message
=
None
,
message
=
None
,
typeList
=
None
,
typeList
=
None
,
# From here on the order is not documented
# From here on the order is not documented
version
=
None
,
version
=
None
,
defaultLocation
=
None
,
defaultLocation
=
None
,
dialogOptionFlags
=
None
,
dialogOptionFlags
=
None
,
location
=
None
,
location
=
None
,
clientName
=
None
,
clientName
=
None
,
windowTitle
=
None
,
windowTitle
=
None
,
actionButtonLabel
=
None
,
actionButtonLabel
=
None
,
cancelButtonLabel
=
None
,
cancelButtonLabel
=
None
,
preferenceKey
=
None
,
preferenceKey
=
None
,
popupExtension
=
None
,
popupExtension
=
None
,
eventProc
=
_dummy_Nav_eventproc
,
eventProc
=
_dummy_Nav_eventproc
,
previewProc
=
None
,
previewProc
=
None
,
filterProc
=
None
,
filterProc
=
None
,
wanted
=
None
,
wanted
=
None
,
multiple
=
None
):
multiple
=
None
):
"""Display a dialog asking the user for a file to open.
"""Display a dialog asking the user for a file to open.
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
the other arguments can be looked up in Apple's Navigation Services documentation"""
the other arguments can be looked up in Apple's Navigation Services documentation"""
default_flags
=
0x56
# Or 0xe4?
default_flags
=
0x56
# Or 0xe4?
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
message
=
message
,
preferenceKey
=
preferenceKey
,
message
=
message
,
preferenceKey
=
preferenceKey
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
previewProc
=
previewProc
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
previewProc
=
previewProc
,
filterProc
=
filterProc
,
typeList
=
typeList
,
wanted
=
wanted
,
multiple
=
multiple
)
filterProc
=
filterProc
,
typeList
=
typeList
,
wanted
=
wanted
,
multiple
=
multiple
)
_interact
()
_interact
()
try
:
try
:
rr
=
Nav
.
NavChooseFile
(
args
)
rr
=
Nav
.
NavChooseFile
(
args
)
good
=
1
good
=
1
except
Nav
.
error
,
arg
:
except
Nav
.
error
,
arg
:
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
raise
Nav
.
error
,
arg
raise
Nav
.
error
,
arg
return
None
return
None
if
not
rr
.
validRecord
or
not
rr
.
selection
:
if
not
rr
.
validRecord
or
not
rr
.
selection
:
return
None
return
None
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
return
tpwanted
(
rr
.
selection_fsr
[
0
])
return
tpwanted
(
rr
.
selection_fsr
[
0
])
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
return
tpwanted
(
rr
.
selection
[
0
])
return
tpwanted
(
rr
.
selection
[
0
])
if
issubclass
(
tpwanted
,
str
):
if
issubclass
(
tpwanted
,
str
):
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
())
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
())
if
issubclass
(
tpwanted
,
unicode
):
if
issubclass
(
tpwanted
,
unicode
):
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
(),
'utf8'
)
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
(),
'utf8'
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
def
AskFileForSave
(
def
AskFileForSave
(
message
=
None
,
message
=
None
,
savedFileName
=
None
,
savedFileName
=
None
,
# From here on the order is not documented
# From here on the order is not documented
version
=
None
,
version
=
None
,
defaultLocation
=
None
,
defaultLocation
=
None
,
dialogOptionFlags
=
None
,
dialogOptionFlags
=
None
,
location
=
None
,
location
=
None
,
clientName
=
None
,
clientName
=
None
,
windowTitle
=
None
,
windowTitle
=
None
,
actionButtonLabel
=
None
,
actionButtonLabel
=
None
,
cancelButtonLabel
=
None
,
cancelButtonLabel
=
None
,
preferenceKey
=
None
,
preferenceKey
=
None
,
popupExtension
=
None
,
popupExtension
=
None
,
eventProc
=
_dummy_Nav_eventproc
,
eventProc
=
_dummy_Nav_eventproc
,
fileType
=
None
,
fileType
=
None
,
fileCreator
=
None
,
fileCreator
=
None
,
wanted
=
None
,
wanted
=
None
,
multiple
=
None
):
multiple
=
None
):
"""Display a dialog asking the user for a filename to save to.
"""Display a dialog asking the user for a filename to save to.
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
the other arguments can be looked up in Apple's Navigation Services documentation"""
the other arguments can be looked up in Apple's Navigation Services documentation"""
default_flags
=
0x07
default_flags
=
0x07
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
savedFileName
=
savedFileName
,
message
=
message
,
preferenceKey
=
preferenceKey
,
savedFileName
=
savedFileName
,
message
=
message
,
preferenceKey
=
preferenceKey
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
fileType
=
fileType
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
fileType
=
fileType
,
fileCreator
=
fileCreator
,
wanted
=
wanted
,
multiple
=
multiple
)
fileCreator
=
fileCreator
,
wanted
=
wanted
,
multiple
=
multiple
)
_interact
()
_interact
()
try
:
try
:
rr
=
Nav
.
NavPutFile
(
args
)
rr
=
Nav
.
NavPutFile
(
args
)
good
=
1
good
=
1
except
Nav
.
error
,
arg
:
except
Nav
.
error
,
arg
:
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
raise
Nav
.
error
,
arg
raise
Nav
.
error
,
arg
return
None
return
None
if
not
rr
.
validRecord
or
not
rr
.
selection
:
if
not
rr
.
validRecord
or
not
rr
.
selection
:
return
None
return
None
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
raise
TypeError
,
"Cannot pass wanted=FSRef to AskFileForSave"
raise
TypeError
,
"Cannot pass wanted=FSRef to AskFileForSave"
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
return
tpwanted
(
rr
.
selection
[
0
])
return
tpwanted
(
rr
.
selection
[
0
])
if
issubclass
(
tpwanted
,
(
str
,
unicode
)):
if
issubclass
(
tpwanted
,
(
str
,
unicode
)):
if
sys
.
platform
==
'mac'
:
if
sys
.
platform
==
'mac'
:
fullpath
=
rr
.
selection
[
0
].
as_pathname
()
fullpath
=
rr
.
selection
[
0
].
as_pathname
()
else
:
else
:
# This is gross, and probably incorrect too
# This is gross, and probably incorrect too
vrefnum
,
dirid
,
name
=
rr
.
selection
[
0
].
as_tuple
()
vrefnum
,
dirid
,
name
=
rr
.
selection
[
0
].
as_tuple
()
pardir_fss
=
Carbon
.
File
.
FSSpec
((
vrefnum
,
dirid
,
''
))
pardir_fss
=
Carbon
.
File
.
FSSpec
((
vrefnum
,
dirid
,
''
))
pardir_fsr
=
Carbon
.
File
.
FSRef
(
pardir_fss
)
pardir_fsr
=
Carbon
.
File
.
FSRef
(
pardir_fss
)
pardir_path
=
pardir_fsr
.
FSRefMakePath
()
# This is utf-8
pardir_path
=
pardir_fsr
.
FSRefMakePath
()
# This is utf-8
name_utf8
=
unicode
(
name
,
'macroman'
).
encode
(
'utf8'
)
name_utf8
=
unicode
(
name
,
'macroman'
).
encode
(
'utf8'
)
fullpath
=
os
.
path
.
join
(
pardir_path
,
name_utf8
)
fullpath
=
os
.
path
.
join
(
pardir_path
,
name_utf8
)
if
issubclass
(
tpwanted
,
unicode
):
if
issubclass
(
tpwanted
,
unicode
):
return
unicode
(
fullpath
,
'utf8'
)
return
unicode
(
fullpath
,
'utf8'
)
return
tpwanted
(
fullpath
)
return
tpwanted
(
fullpath
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
def
AskFolder
(
def
AskFolder
(
message
=
None
,
message
=
None
,
# From here on the order is not documented
# From here on the order is not documented
version
=
None
,
version
=
None
,
defaultLocation
=
None
,
defaultLocation
=
None
,
dialogOptionFlags
=
None
,
dialogOptionFlags
=
None
,
location
=
None
,
location
=
None
,
clientName
=
None
,
clientName
=
None
,
windowTitle
=
None
,
windowTitle
=
None
,
actionButtonLabel
=
None
,
actionButtonLabel
=
None
,
cancelButtonLabel
=
None
,
cancelButtonLabel
=
None
,
preferenceKey
=
None
,
preferenceKey
=
None
,
popupExtension
=
None
,
popupExtension
=
None
,
eventProc
=
_dummy_Nav_eventproc
,
eventProc
=
_dummy_Nav_eventproc
,
filterProc
=
None
,
filterProc
=
None
,
wanted
=
None
,
wanted
=
None
,
multiple
=
None
):
multiple
=
None
):
"""Display a dialog asking the user for select a folder.
"""Display a dialog asking the user for select a folder.
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
wanted is the return type wanted: FSSpec, FSRef, unicode or string (default)
the other arguments can be looked up in Apple's Navigation Services documentation"""
the other arguments can be looked up in Apple's Navigation Services documentation"""
default_flags
=
0x17
default_flags
=
0x17
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
args
,
tpwanted
=
_process_Nav_args
(
default_flags
,
version
=
version
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
defaultLocation
=
defaultLocation
,
dialogOptionFlags
=
dialogOptionFlags
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
location
=
location
,
clientName
=
clientName
,
windowTitle
=
windowTitle
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
actionButtonLabel
=
actionButtonLabel
,
cancelButtonLabel
=
cancelButtonLabel
,
message
=
message
,
preferenceKey
=
preferenceKey
,
message
=
message
,
preferenceKey
=
preferenceKey
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
filterProc
=
filterProc
,
popupExtension
=
popupExtension
,
eventProc
=
eventProc
,
filterProc
=
filterProc
,
wanted
=
wanted
,
multiple
=
multiple
)
wanted
=
wanted
,
multiple
=
multiple
)
_interact
()
_interact
()
try
:
try
:
rr
=
Nav
.
NavChooseFolder
(
args
)
rr
=
Nav
.
NavChooseFolder
(
args
)
good
=
1
good
=
1
except
Nav
.
error
,
arg
:
except
Nav
.
error
,
arg
:
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
if
arg
[
0
]
!=
-
128
:
# userCancelledErr
raise
Nav
.
error
,
arg
raise
Nav
.
error
,
arg
return
None
return
None
if
not
rr
.
validRecord
or
not
rr
.
selection
:
if
not
rr
.
validRecord
or
not
rr
.
selection
:
return
None
return
None
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSRef
):
return
tpwanted
(
rr
.
selection_fsr
[
0
])
return
tpwanted
(
rr
.
selection_fsr
[
0
])
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
if
issubclass
(
tpwanted
,
Carbon
.
File
.
FSSpec
):
return
tpwanted
(
rr
.
selection
[
0
])
return
tpwanted
(
rr
.
selection
[
0
])
if
issubclass
(
tpwanted
,
str
):
if
issubclass
(
tpwanted
,
str
):
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
())
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
())
if
issubclass
(
tpwanted
,
unicode
):
if
issubclass
(
tpwanted
,
unicode
):
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
(),
'utf8'
)
return
tpwanted
(
rr
.
selection_fsr
[
0
].
as_pathname
(),
'utf8'
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
raise
TypeError
,
"Unknown value for argument 'wanted': %s"
%
repr
(
tpwanted
)
def
test
():
def
test
():
import
time
import
time
Message
(
"Testing EasyDialogs."
)
Message
(
"Testing EasyDialogs."
)
optionlist
=
((
'v'
,
'Verbose'
),
(
'verbose'
,
'Verbose as long option'
),
optionlist
=
((
'v'
,
'Verbose'
),
(
'verbose'
,
'Verbose as long option'
),
(
'flags='
,
'Valued option'
),
(
'f:'
,
'Short valued option'
))
(
'flags='
,
'Valued option'
),
(
'f:'
,
'Short valued option'
))
commandlist
=
((
'start'
,
'Start something'
),
(
'stop'
,
'Stop something'
))
commandlist
=
((
'start'
,
'Start something'
),
(
'stop'
,
'Stop something'
))
argv
=
GetArgv
(
optionlist
=
optionlist
,
commandlist
=
commandlist
,
addoldfile
=
0
)
argv
=
GetArgv
(
optionlist
=
optionlist
,
commandlist
=
commandlist
,
addoldfile
=
0
)
Message
(
"Command line: %s"
%
' '
.
join
(
argv
))
Message
(
"Command line: %s"
%
' '
.
join
(
argv
))
for
i
in
range
(
len
(
argv
)):
for
i
in
range
(
len
(
argv
)):
print
'arg[%d] = %s'
%
(
i
,
`argv[i]`
)
print
'arg[%d] = %s'
%
(
i
,
`argv[i]`
)
ok
=
AskYesNoCancel
(
"Do you want to proceed?"
)
ok
=
AskYesNoCancel
(
"Do you want to proceed?"
)
ok
=
AskYesNoCancel
(
"Do you want to identify?"
,
yes
=
"Identify"
,
no
=
"No"
)
ok
=
AskYesNoCancel
(
"Do you want to identify?"
,
yes
=
"Identify"
,
no
=
"No"
)
if
ok
>
0
:
if
ok
>
0
:
s
=
AskString
(
"Enter your first name"
,
"Joe"
)
s
=
AskString
(
"Enter your first name"
,
"Joe"
)
s2
=
AskPassword
(
"Okay %s, tell us your nickname"
%
s
,
s
,
cancel
=
"None"
)
s2
=
AskPassword
(
"Okay %s, tell us your nickname"
%
s
,
s
,
cancel
=
"None"
)
if
not
s2
:
if
not
s2
:
Message
(
"%s has no secret nickname"
%
s
)
Message
(
"%s has no secret nickname"
%
s
)
else
:
Message
(
"Hello everybody!!
\
n
The secret nickname of %s is %s!!!"
%
(
s
,
s2
))
else
:
else
:
s
=
'Anonymous'
Message
(
"Hello everybody!!
\
n
The secret nickname of %s is %s!!!"
%
(
s
,
s2
))
rv
=
AskFileForOpen
(
message
=
"Gimme a file, %s"
%
s
,
wanted
=
Carbon
.
File
.
FSSpec
)
else
:
Message
(
"rv: %s"
%
rv
)
s
=
'Anonymous'
rv
=
AskFileForSave
(
wanted
=
Carbon
.
File
.
FSRef
,
savedFileName
=
"%s.txt"
%
s
)
rv
=
AskFileForOpen
(
message
=
"Gimme a file, %s"
%
s
,
wanted
=
Carbon
.
File
.
FSSpec
)
Message
(
"rv.as_pathname: %s"
%
rv
.
as_pathname
())
Message
(
"rv: %s"
%
rv
)
rv
=
AskFolder
()
rv
=
AskFileForSave
(
wanted
=
Carbon
.
File
.
FSRef
,
savedFileName
=
"%s.txt"
%
s
)
Message
(
"Folder name: %s"
%
rv
)
Message
(
"rv.as_pathname: %s"
%
rv
.
as_pathname
())
text
=
(
"Working Hard..."
,
"Hardly Working..."
,
rv
=
AskFolder
()
"So far, so good!"
,
"Keep on truckin'"
)
Message
(
"Folder name: %s"
%
rv
)
bar
=
ProgressBar
(
"Progress, progress..."
,
0
,
label
=
"Ramping up..."
)
text
=
(
"Working Hard..."
,
"Hardly Working..."
,
try
:
"So far, so good!"
,
"Keep on truckin'"
)
if
hasattr
(
MacOS
,
'SchedParams'
):
bar
=
ProgressBar
(
"Progress, progress..."
,
0
,
label
=
"Ramping up..."
)
appsw
=
MacOS
.
SchedParams
(
1
,
0
)
try
:
for
i
in
xrange
(
20
):
if
hasattr
(
MacOS
,
'SchedParams'
):
bar
.
inc
()
appsw
=
MacOS
.
SchedParams
(
1
,
0
)
time
.
sleep
(
0.05
)
for
i
in
xrange
(
20
):
bar
.
set
(
0
,
100
)
bar
.
inc
()
for
i
in
xrange
(
100
):
time
.
sleep
(
0.05
)
bar
.
set
(
i
)
bar
.
set
(
0
,
100
)
time
.
sleep
(
0.05
)
for
i
in
xrange
(
100
):
if
i
%
10
==
0
:
bar
.
set
(
i
)
bar
.
label
(
text
[(
i
/
10
)
%
4
])
time
.
sleep
(
0.05
)
bar
.
label
(
"Done."
)
if
i
%
10
==
0
:
time
.
sleep
(
1.0
)
# give'em a chance to see "Done."
bar
.
label
(
text
[(
i
/
10
)
%
4
])
finally
:
bar
.
label
(
"Done."
)
del
bar
time
.
sleep
(
1.0
)
# give'em a chance to see "Done."
if
hasattr
(
MacOS
,
'SchedParams'
):
finally
:
MacOS
.
SchedParams
(
*
appsw
)
del
bar
if
hasattr
(
MacOS
,
'SchedParams'
):
MacOS
.
SchedParams
(
*
appsw
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
try
:
try
:
test
()
test
()
except
KeyboardInterrupt
:
except
KeyboardInterrupt
:
Message
(
"Operation Canceled."
)
Message
(
"Operation Canceled."
)
Lib/plat-mac/FrameWork.py
View file @
35b50e26
...
@@ -29,12 +29,12 @@ import types
...
@@ -29,12 +29,12 @@ import types
import
EasyDialogs
import
EasyDialogs
try
:
try
:
MyFrontWindow
=
FrontNonFloatingWindow
MyFrontWindow
=
FrontNonFloatingWindow
except
NameError
:
except
NameError
:
MyFrontWindow
=
FrontWindow
MyFrontWindow
=
FrontWindow
kHighLevelEvent
=
23
# Don't know what header file this should come from
kHighLevelEvent
=
23
# Don't know what header file this should come from
SCROLLBARWIDTH
=
16
# Again, not a clue...
SCROLLBARWIDTH
=
16
# Again, not a clue...
# Trick to forestall a set of SIOUX menus being added to our menubar
# Trick to forestall a set of SIOUX menus being added to our menubar
SIOUX_APPLEMENU_ID
=
32000
SIOUX_APPLEMENU_ID
=
32000
...
@@ -70,1054 +70,1054 @@ partname[8] = 'inZoomOut'
...
@@ -70,1054 +70,1054 @@ partname[8] = 'inZoomOut'
# ## but what happens with multiple screens? jvr
# ## but what happens with multiple screens? jvr
screenbounds
=
GetQDGlobalsScreenBits
().
bounds
screenbounds
=
GetQDGlobalsScreenBits
().
bounds
screenbounds
=
screenbounds
[
0
]
+
4
,
screenbounds
[
1
]
+
4
,
\
screenbounds
=
screenbounds
[
0
]
+
4
,
screenbounds
[
1
]
+
4
,
\
screenbounds
[
2
]
-
4
,
screenbounds
[
3
]
-
4
screenbounds
[
2
]
-
4
,
screenbounds
[
3
]
-
4
next_window_x
=
16
# jvr
next_window_x
=
16
# jvr
next_window_y
=
44
# jvr
next_window_y
=
44
# jvr
def
windowbounds
(
width
,
height
):
def
windowbounds
(
width
,
height
):
"Return sensible window bounds"
"Return sensible window bounds"
global
next_window_x
,
next_window_y
global
next_window_x
,
next_window_y
r
,
b
=
next_window_x
+
width
,
next_window_y
+
height
r
,
b
=
next_window_x
+
width
,
next_window_y
+
height
if
r
>
screenbounds
[
2
]:
if
r
>
screenbounds
[
2
]:
next_window_x
=
16
next_window_x
=
16
if
b
>
screenbounds
[
3
]:
if
b
>
screenbounds
[
3
]:
next_window_y
=
44
next_window_y
=
44
l
,
t
=
next_window_x
,
next_window_y
l
,
t
=
next_window_x
,
next_window_y
r
,
b
=
next_window_x
+
width
,
next_window_y
+
height
r
,
b
=
next_window_x
+
width
,
next_window_y
+
height
next_window_x
,
next_window_y
=
next_window_x
+
8
,
next_window_y
+
20
# jvr
next_window_x
,
next_window_y
=
next_window_x
+
8
,
next_window_y
+
20
# jvr
return
l
,
t
,
r
,
b
return
l
,
t
,
r
,
b
_watch
=
None
_watch
=
None
def
setwatchcursor
():
def
setwatchcursor
():
global
_watch
global
_watch
if
_watch
==
None
:
if
_watch
==
None
:
_watch
=
GetCursor
(
4
).
data
_watch
=
GetCursor
(
4
).
data
SetCursor
(
_watch
)
SetCursor
(
_watch
)
def
setarrowcursor
():
def
setarrowcursor
():
SetCursor
(
GetQDGlobalsArrow
())
SetCursor
(
GetQDGlobalsArrow
())
class
Application
:
class
Application
:
"Application framework -- your application should be a derived class"
"Application framework -- your application should be a derived class"
def
__init__
(
self
,
nomenubar
=
0
):
def
__init__
(
self
,
nomenubar
=
0
):
self
.
_doing_asyncevents
=
0
self
.
_doing_asyncevents
=
0
self
.
quitting
=
0
self
.
quitting
=
0
self
.
needmenubarredraw
=
0
self
.
needmenubarredraw
=
0
self
.
_windows
=
{}
self
.
_windows
=
{}
self
.
_helpmenu
=
None
self
.
_helpmenu
=
None
if
nomenubar
:
if
nomenubar
:
self
.
menubar
=
None
self
.
menubar
=
None
else
:
else
:
self
.
makemenubar
()
self
.
makemenubar
()
def
__del__
(
self
):
def
__del__
(
self
):
if
self
.
_doing_asyncevents
:
if
self
.
_doing_asyncevents
:
self
.
_doing_asyncevents
=
0
self
.
_doing_asyncevents
=
0
MacOS
.
SetEventHandler
()
MacOS
.
SetEventHandler
()
def
makemenubar
(
self
):
def
makemenubar
(
self
):
self
.
menubar
=
MenuBar
(
self
)
self
.
menubar
=
MenuBar
(
self
)
AppleMenu
(
self
.
menubar
,
self
.
getabouttext
(),
self
.
do_about
)
AppleMenu
(
self
.
menubar
,
self
.
getabouttext
(),
self
.
do_about
)
self
.
makeusermenus
()
self
.
makeusermenus
()
def
makeusermenus
(
self
):
def
makeusermenus
(
self
):
self
.
filemenu
=
m
=
Menu
(
self
.
menubar
,
"File"
)
self
.
filemenu
=
m
=
Menu
(
self
.
menubar
,
"File"
)
self
.
_quititem
=
MenuItem
(
m
,
"Quit"
,
"Q"
,
self
.
_quit
)
self
.
_quititem
=
MenuItem
(
m
,
"Quit"
,
"Q"
,
self
.
_quit
)
def
gethelpmenu
(
self
):
def
gethelpmenu
(
self
):
if
self
.
_helpmenu
==
None
:
if
self
.
_helpmenu
==
None
:
self
.
_helpmenu
=
HelpMenu
(
self
.
menubar
)
self
.
_helpmenu
=
HelpMenu
(
self
.
menubar
)
return
self
.
_helpmenu
return
self
.
_helpmenu
def
_quit
(
self
,
*
args
):
def
_quit
(
self
,
*
args
):
self
.
quitting
=
1
self
.
quitting
=
1
def
cleanup
(
self
):
def
cleanup
(
self
):
for
w
in
self
.
_windows
.
values
():
for
w
in
self
.
_windows
.
values
():
w
.
do_close
()
w
.
do_close
()
return
self
.
_windows
==
{}
return
self
.
_windows
==
{}
def
appendwindow
(
self
,
wid
,
window
):
def
appendwindow
(
self
,
wid
,
window
):
self
.
_windows
[
wid
]
=
window
self
.
_windows
[
wid
]
=
window
def
removewindow
(
self
,
wid
):
def
removewindow
(
self
,
wid
):
del
self
.
_windows
[
wid
]
del
self
.
_windows
[
wid
]
def
getabouttext
(
self
):
def
getabouttext
(
self
):
return
"About %s..."
%
self
.
__class__
.
__name__
return
"About %s..."
%
self
.
__class__
.
__name__
def
do_about
(
self
,
id
,
item
,
window
,
event
):
def
do_about
(
self
,
id
,
item
,
window
,
event
):
EasyDialogs
.
Message
(
"Hello, world!"
+
"
\
015
(%s)"
%
self
.
__class__
.
__name__
)
EasyDialogs
.
Message
(
"Hello, world!"
+
"
\
015
(%s)"
%
self
.
__class__
.
__name__
)
# The main event loop is broken up in several simple steps.
# The main event loop is broken up in several simple steps.
# This is done so you can override each individual part,
# This is done so you can override each individual part,
# if you have a need to do extra processing independent of the
# if you have a need to do extra processing independent of the
# event type.
# event type.
# Normally, however, you'd just define handlers for individual
# Normally, however, you'd just define handlers for individual
# events.
# events.
schedparams
=
(
0
,
0
)
# By default disable Python's event handling
schedparams
=
(
0
,
0
)
# By default disable Python's event handling
default_wait
=
None
# By default we wait GetCaretTime in WaitNextEvent
default_wait
=
None
# By default we wait GetCaretTime in WaitNextEvent
def
mainloop
(
self
,
mask
=
everyEvent
,
wait
=
None
):
def
mainloop
(
self
,
mask
=
everyEvent
,
wait
=
None
):
self
.
quitting
=
0
self
.
quitting
=
0
if
hasattr
(
MacOS
,
'SchedParams'
):
if
hasattr
(
MacOS
,
'SchedParams'
):
saveparams
=
MacOS
.
SchedParams
(
*
self
.
schedparams
)
saveparams
=
MacOS
.
SchedParams
(
*
self
.
schedparams
)
try
:
while
not
self
.
quitting
:
try
:
try
:
while
not
self
.
quitting
:
self
.
do1event
(
mask
,
wait
)
try
:
except
(
Application
,
SystemExit
):
self
.
do1event
(
mask
,
wait
)
# Note: the raising of "self" is old-fashioned idiom to
except
(
Application
,
SystemExit
):
# exit the mainloop. Calling _quit() is better for new
# Note: the raising of "self" is old-fashioned idiom to
# applications.
# exit the mainloop. Calling _quit() is better for new
break
# applications.
finally
:
break
if
hasattr
(
MacOS
,
'SchedParams'
):
finally
:
MacOS
.
SchedParams
(
*
saveparams
)
if
hasattr
(
MacOS
,
'SchedParams'
):
MacOS
.
SchedParams
(
*
saveparams
)
def
dopendingevents
(
self
,
mask
=
everyEvent
):
"""dopendingevents - Handle all pending events"""
def
dopendingevents
(
self
,
mask
=
everyEvent
):
while
self
.
do1event
(
mask
,
wait
=
0
):
"""dopendingevents - Handle all pending events"""
pass
while
self
.
do1event
(
mask
,
wait
=
0
):
pass
def
do1event
(
self
,
mask
=
everyEvent
,
wait
=
None
):
ok
,
event
=
self
.
getevent
(
mask
,
wait
)
def
do1event
(
self
,
mask
=
everyEvent
,
wait
=
None
):
if
IsDialogEvent
(
event
):
ok
,
event
=
self
.
getevent
(
mask
,
wait
)
if
self
.
do_dialogevent
(
event
):
if
IsDialogEvent
(
event
):
return
if
self
.
do_dialogevent
(
event
):
if
ok
:
return
self
.
dispatch
(
event
)
if
ok
:
else
:
self
.
dispatch
(
event
)
self
.
idle
(
event
)
else
:
self
.
idle
(
event
)
def
idle
(
self
,
event
):
pass
def
idle
(
self
,
event
):
pass
def
getevent
(
self
,
mask
=
everyEvent
,
wait
=
None
):
if
self
.
needmenubarredraw
:
def
getevent
(
self
,
mask
=
everyEvent
,
wait
=
None
):
DrawMenuBar
()
if
self
.
needmenubarredraw
:
self
.
needmenubarredraw
=
0
DrawMenuBar
()
if
wait
is
None
:
self
.
needmenubarredraw
=
0
wait
=
self
.
default_wait
if
wait
is
None
:
if
wait
is
None
:
wait
=
self
.
default_wait
wait
=
GetCaretTime
()
if
wait
is
None
:
ok
,
event
=
WaitNextEvent
(
mask
,
wait
)
wait
=
GetCaretTime
()
return
ok
,
event
ok
,
event
=
WaitNextEvent
(
mask
,
wait
)
return
ok
,
event
def
dispatch
(
self
,
event
):
# The following appears to be double work (already done in do1event)
def
dispatch
(
self
,
event
):
# but we need it for asynchronous event handling
# The following appears to be double work (already done in do1event)
if
IsDialogEvent
(
event
):
# but we need it for asynchronous event handling
if
self
.
do_dialogevent
(
event
):
if
IsDialogEvent
(
event
):
return
if
self
.
do_dialogevent
(
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
return
if
eventname
.
has_key
(
what
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
name
=
"do_"
+
eventname
[
what
]
if
eventname
.
has_key
(
what
):
else
:
name
=
"do_"
+
eventname
[
what
]
name
=
"do_%d"
%
what
else
:
try
:
name
=
"do_%d"
%
what
handler
=
getattr
(
self
,
name
)
try
:
except
AttributeError
:
handler
=
getattr
(
self
,
name
)
handler
=
self
.
do_unknownevent
except
AttributeError
:
handler
(
event
)
handler
=
self
.
do_unknownevent
handler
(
event
)
def
asyncevents
(
self
,
onoff
):
"""asyncevents - Set asynchronous event handling on or off"""
def
asyncevents
(
self
,
onoff
):
if
MacOS
.
runtimemodel
==
'macho'
:
"""asyncevents - Set asynchronous event handling on or off"""
raise
'Unsupported in MachoPython'
if
MacOS
.
runtimemodel
==
'macho'
:
old
=
self
.
_doing_asyncevents
raise
'Unsupported in MachoPython'
if
old
:
old
=
self
.
_doing_asyncevents
MacOS
.
SetEventHandler
()
if
old
:
MacOS
.
SchedParams
(
*
self
.
schedparams
)
MacOS
.
SetEventHandler
()
if
onoff
:
MacOS
.
SchedParams
(
*
self
.
schedparams
)
MacOS
.
SetEventHandler
(
self
.
dispatch
)
if
onoff
:
doint
,
dummymask
,
benice
,
howoften
,
bgyield
=
\
MacOS
.
SetEventHandler
(
self
.
dispatch
)
self
.
schedparams
doint
,
dummymask
,
benice
,
howoften
,
bgyield
=
\
MacOS
.
SchedParams
(
doint
,
everyEvent
,
benice
,
self
.
schedparams
howoften
,
bgyield
)
MacOS
.
SchedParams
(
doint
,
everyEvent
,
benice
,
self
.
_doing_asyncevents
=
onoff
howoften
,
bgyield
)
return
old
self
.
_doing_asyncevents
=
onoff
return
old
def
do_dialogevent
(
self
,
event
):
gotone
,
dlg
,
item
=
DialogSelect
(
event
)
def
do_dialogevent
(
self
,
event
):
if
gotone
:
gotone
,
dlg
,
item
=
DialogSelect
(
event
)
window
=
dlg
.
GetDialogWindow
()
if
gotone
:
if
self
.
_windows
.
has_key
(
window
):
window
=
dlg
.
GetDialogWindow
()
self
.
_windows
[
window
].
do_itemhit
(
item
,
event
)
if
self
.
_windows
.
has_key
(
window
):
else
:
self
.
_windows
[
window
].
do_itemhit
(
item
,
event
)
print
'Dialog event for unknown dialog'
else
:
return
1
print
'Dialog event for unknown dialog'
return
0
return
1
return
0
def
do_mouseDown
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
def
do_mouseDown
(
self
,
event
):
partcode
,
wid
=
FindWindow
(
where
)
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
partcode
,
wid
=
FindWindow
(
where
)
#
# Find the correct name.
#
#
# Find the correct name.
if
partname
.
has_key
(
partcode
):
#
name
=
"do_"
+
partname
[
partcode
]
if
partname
.
has_key
(
partcode
):
else
:
name
=
"do_"
+
partname
[
partcode
]
name
=
"do_%d"
%
partcode
else
:
name
=
"do_%d"
%
partcode
if
wid
==
None
:
# No window, or a non-python window
if
wid
==
None
:
try
:
# No window, or a non-python window
handler
=
getattr
(
self
,
name
)
try
:
except
AttributeError
:
handler
=
getattr
(
self
,
name
)
# Not menubar or something, so assume someone
except
AttributeError
:
# else's window
# Not menubar or something, so assume someone
# else's window
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
return
elif
self
.
_windows
.
has_key
(
wid
):
# It is a window. Hand off to correct window.
window
=
self
.
_windows
[
wid
]
try
:
handler
=
getattr
(
window
,
name
)
except
AttributeError
:
handler
=
self
.
do_unknownpartcode
else
:
# It is a python-toolbox window, but not ours.
handler
=
self
.
do_unknownwindow
handler
(
partcode
,
wid
,
event
)
def
do_inSysWindow
(
self
,
partcode
,
window
,
event
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_inDesk
(
self
,
partcode
,
window
,
event
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
MacOS
.
HandleEvent
(
event
)
return
def
do_inMenuBar
(
self
,
partcode
,
window
,
event
):
elif
self
.
_windows
.
has_key
(
wid
):
# It is a window. Hand off to correct window.
window
=
self
.
_windows
[
wid
]
try
:
handler
=
getattr
(
window
,
name
)
except
AttributeError
:
handler
=
self
.
do_unknownpartcode
else
:
# It is a python-toolbox window, but not ours.
handler
=
self
.
do_unknownwindow
handler
(
partcode
,
wid
,
event
)
def
do_inSysWindow
(
self
,
partcode
,
window
,
event
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_inDesk
(
self
,
partcode
,
window
,
event
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_inMenuBar
(
self
,
partcode
,
window
,
event
):
if
not
self
.
menubar
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
return
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
result
=
MenuSelect
(
where
)
id
=
(
result
>>
16
)
&
0xffff
# Hi word
if
id
>=
0x8000
:
id
=
-
65536
+
id
item
=
result
&
0xffff
# Lo word
self
.
do_rawmenu
(
id
,
item
,
window
,
event
)
def
do_rawmenu
(
self
,
id
,
item
,
window
,
event
):
try
:
self
.
do_menu
(
id
,
item
,
window
,
event
)
finally
:
HiliteMenu
(
0
)
def
do_menu
(
self
,
id
,
item
,
window
,
event
):
if
hasattr
(
MacOS
,
'OutputSeen'
):
MacOS
.
OutputSeen
()
self
.
menubar
.
dispatch
(
id
,
item
,
window
,
event
)
def
do_unknownpartcode
(
self
,
partcode
,
window
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
DEBUG
:
print
"Mouse down at global:"
,
where
if
DEBUG
:
print
"
\
t
Unknown part code:"
,
partcode
if
DEBUG
:
print
"
\
t
Event:"
,
self
.
printevent
(
event
)
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_unknownwindow
(
self
,
partcode
,
window
,
event
):
if
DEBUG
:
print
'Unknown window:'
,
window
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_keyDown
(
self
,
event
):
self
.
do_key
(
event
)
def
do_autoKey
(
self
,
event
):
if
not
event
[
-
1
]
&
cmdKey
:
self
.
do_key
(
event
)
def
do_key
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
c
=
chr
(
message
&
charCodeMask
)
if
self
.
menubar
:
result
=
MenuEvent
(
event
)
id
=
(
result
>>
16
)
&
0xffff
# Hi word
item
=
result
&
0xffff
# Lo word
if
id
:
self
.
do_rawmenu
(
id
,
item
,
None
,
event
)
return
# Otherwise we fall-through
if
modifiers
&
cmdKey
:
if
c
==
'.'
:
raise
self
else
:
if
not
self
.
menubar
:
if
not
self
.
menubar
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
return
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
result
=
MenuSelect
(
where
)
id
=
(
result
>>
16
)
&
0xffff
# Hi word
if
id
>=
0x8000
:
id
=
-
65536
+
id
item
=
result
&
0xffff
# Lo word
self
.
do_rawmenu
(
id
,
item
,
window
,
event
)
def
do_rawmenu
(
self
,
id
,
item
,
window
,
event
):
try
:
self
.
do_menu
(
id
,
item
,
window
,
event
)
finally
:
HiliteMenu
(
0
)
def
do_menu
(
self
,
id
,
item
,
window
,
event
):
if
hasattr
(
MacOS
,
'OutputSeen'
):
MacOS
.
OutputSeen
()
self
.
menubar
.
dispatch
(
id
,
item
,
window
,
event
)
def
do_unknownpartcode
(
self
,
partcode
,
window
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
DEBUG
:
print
"Mouse down at global:"
,
where
if
DEBUG
:
print
"
\
t
Unknown part code:"
,
partcode
if
DEBUG
:
print
"
\
t
Event:"
,
self
.
printevent
(
event
)
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_unknownwindow
(
self
,
partcode
,
window
,
event
):
if
DEBUG
:
print
'Unknown window:'
,
window
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
MacOS
.
HandleEvent
(
event
)
return
def
do_keyDown
(
self
,
event
):
else
:
self
.
do_key
(
event
)
# See whether the front window wants it
w
=
MyFrontWindow
()
def
do_autoKey
(
self
,
event
):
if
w
and
self
.
_windows
.
has_key
(
w
):
if
not
event
[
-
1
]
&
cmdKey
:
window
=
self
.
_windows
[
w
]
self
.
do_key
(
event
)
def
do_key
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
c
=
chr
(
message
&
charCodeMask
)
if
self
.
menubar
:
result
=
MenuEvent
(
event
)
id
=
(
result
>>
16
)
&
0xffff
# Hi word
item
=
result
&
0xffff
# Lo word
if
id
:
self
.
do_rawmenu
(
id
,
item
,
None
,
event
)
return
# Otherwise we fall-through
if
modifiers
&
cmdKey
:
if
c
==
'.'
:
raise
self
else
:
if
not
self
.
menubar
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
return
else
:
# See whether the front window wants it
w
=
MyFrontWindow
()
if
w
and
self
.
_windows
.
has_key
(
w
):
window
=
self
.
_windows
[
w
]
try
:
do_char
=
window
.
do_char
except
AttributeError
:
do_char
=
self
.
do_char
do_char
(
c
,
event
)
# else it wasn't for us, sigh...
def
do_char
(
self
,
c
,
event
):
if
DEBUG
:
print
"Character"
,
`c`
def
do_updateEvt
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
wid
=
WhichWindow
(
message
)
if
wid
and
self
.
_windows
.
has_key
(
wid
):
window
=
self
.
_windows
[
wid
]
window
.
do_rawupdate
(
wid
,
event
)
else
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_activateEvt
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
wid
=
WhichWindow
(
message
)
if
wid
and
self
.
_windows
.
has_key
(
wid
):
window
=
self
.
_windows
[
wid
]
window
.
do_activate
(
modifiers
&
1
,
event
)
else
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_osEvt
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
which
=
(
message
>>
24
)
&
0xff
if
which
==
1
:
# suspend/resume
self
.
do_suspendresume
(
event
)
else
:
if
DEBUG
:
print
'unknown osEvt:'
,
self
.
printevent
(
event
)
def
do_suspendresume
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
wid
=
MyFrontWindow
()
if
wid
and
self
.
_windows
.
has_key
(
wid
):
window
=
self
.
_windows
[
wid
]
window
.
do_activate
(
message
&
1
,
event
)
def
do_kHighLevelEvent
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
DEBUG
:
print
"High Level Event:"
,
self
.
printevent
(
event
)
try
:
try
:
AEProcessAppleEvent
(
event
)
do_char
=
window
.
do_char
except
:
except
AttributeError
:
pass
do_char
=
self
.
do_char
#print "AEProcessAppleEvent error:"
do_char
(
c
,
event
)
#traceback.print_exc()
# else it wasn't for us, sigh...
def
do_unknownevent
(
self
,
event
):
def
do_char
(
self
,
c
,
event
):
if
DEBUG
:
if
DEBUG
:
print
"Character"
,
`c`
print
"Unhandled event:"
,
self
.
printevent
(
event
)
def
do_updateEvt
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
def
printevent
(
self
,
event
):
wid
=
WhichWindow
(
message
)
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
wid
and
self
.
_windows
.
has_key
(
wid
):
nicewhat
=
`what`
window
=
self
.
_windows
[
wid
]
if
eventname
.
has_key
(
what
):
window
.
do_rawupdate
(
wid
,
event
)
nicewhat
=
eventname
[
what
]
else
:
print
nicewhat
,
if
hasattr
(
MacOS
,
'HandleEvent'
):
if
what
==
kHighLevelEvent
:
MacOS
.
HandleEvent
(
event
)
h
,
v
=
where
print
`ostypecode(message)`
,
hex
(
when
),
`ostypecode(h | (v<<16))`
,
def
do_activateEvt
(
self
,
event
):
else
:
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
print
hex
(
message
),
hex
(
when
),
where
,
wid
=
WhichWindow
(
message
)
print
hex
(
modifiers
)
if
wid
and
self
.
_windows
.
has_key
(
wid
):
window
=
self
.
_windows
[
wid
]
window
.
do_activate
(
modifiers
&
1
,
event
)
else
:
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
def
do_osEvt
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
which
=
(
message
>>
24
)
&
0xff
if
which
==
1
:
# suspend/resume
self
.
do_suspendresume
(
event
)
else
:
if
DEBUG
:
print
'unknown osEvt:'
,
self
.
printevent
(
event
)
def
do_suspendresume
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
wid
=
MyFrontWindow
()
if
wid
and
self
.
_windows
.
has_key
(
wid
):
window
=
self
.
_windows
[
wid
]
window
.
do_activate
(
message
&
1
,
event
)
def
do_kHighLevelEvent
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
DEBUG
:
print
"High Level Event:"
,
self
.
printevent
(
event
)
try
:
AEProcessAppleEvent
(
event
)
except
:
pass
#print "AEProcessAppleEvent error:"
#traceback.print_exc()
def
do_unknownevent
(
self
,
event
):
if
DEBUG
:
print
"Unhandled event:"
,
self
.
printevent
(
event
)
def
printevent
(
self
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
nicewhat
=
`what`
if
eventname
.
has_key
(
what
):
nicewhat
=
eventname
[
what
]
print
nicewhat
,
if
what
==
kHighLevelEvent
:
h
,
v
=
where
print
`ostypecode(message)`
,
hex
(
when
),
`ostypecode(h | (v<<16))`
,
else
:
print
hex
(
message
),
hex
(
when
),
where
,
print
hex
(
modifiers
)
class
MenuBar
:
class
MenuBar
:
"""Represent a set of menus in a menu bar.
"""Represent a set of menus in a menu bar.
Interface:
Interface:
- (constructor)
- (constructor)
- (destructor)
- (destructor)
- addmenu
- addmenu
- addpopup (normally used internally)
- addpopup (normally used internally)
- dispatch (called from Application)
- dispatch (called from Application)
"""
"""
nextid
=
1
# Necessarily a class variable
nextid
=
1
# Necessarily a class variable
def
getnextid
(
self
):
def
getnextid
(
self
):
id
=
MenuBar
.
nextid
id
=
MenuBar
.
nextid
MenuBar
.
nextid
=
id
+
1
MenuBar
.
nextid
=
id
+
1
return
id
return
id
def
__init__
(
self
,
parent
=
None
):
def
__init__
(
self
,
parent
=
None
):
self
.
parent
=
parent
self
.
parent
=
parent
ClearMenuBar
()
ClearMenuBar
()
self
.
bar
=
GetMenuBar
()
self
.
bar
=
GetMenuBar
()
self
.
menus
=
{}
self
.
menus
=
{}
# XXX necessary?
# XXX necessary?
def
close
(
self
):
def
close
(
self
):
self
.
parent
=
None
self
.
parent
=
None
self
.
bar
=
None
self
.
bar
=
None
self
.
menus
=
None
self
.
menus
=
None
def
addmenu
(
self
,
title
,
after
=
0
,
id
=
None
):
def
addmenu
(
self
,
title
,
after
=
0
,
id
=
None
):
if
id
==
None
:
if
id
==
None
:
id
=
self
.
getnextid
()
id
=
self
.
getnextid
()
if
DEBUG
:
print
'Newmenu'
,
title
,
id
# XXXX
if
DEBUG
:
print
'Newmenu'
,
title
,
id
# XXXX
m
=
NewMenu
(
id
,
title
)
m
=
NewMenu
(
id
,
title
)
m
.
InsertMenu
(
after
)
m
.
InsertMenu
(
after
)
if
after
>=
0
:
if
after
>=
0
:
if
self
.
parent
:
if
self
.
parent
:
self
.
parent
.
needmenubarredraw
=
1
self
.
parent
.
needmenubarredraw
=
1
else
:
else
:
DrawMenuBar
()
DrawMenuBar
()
return
id
,
m
return
id
,
m
def
delmenu
(
self
,
id
):
def
delmenu
(
self
,
id
):
if
DEBUG
:
print
'Delmenu'
,
id
# XXXX
if
DEBUG
:
print
'Delmenu'
,
id
# XXXX
DeleteMenu
(
id
)
DeleteMenu
(
id
)
def
addpopup
(
self
,
title
=
''
):
def
addpopup
(
self
,
title
=
''
):
return
self
.
addmenu
(
title
,
-
1
)
return
self
.
addmenu
(
title
,
-
1
)
# Useless:
# Useless:
# def install(self):
# def install(self):
#
if not self.bar: return
# if not self.bar: return
#
SetMenuBar(self.bar)
# SetMenuBar(self.bar)
#
if self.parent:
# if self.parent:
#
self.parent.needmenubarredraw = 1
# self.parent.needmenubarredraw = 1
#
else:
# else:
#
DrawMenuBar()
# DrawMenuBar()
def
fixmenudimstate
(
self
):
def
fixmenudimstate
(
self
):
for
m
in
self
.
menus
.
keys
():
for
m
in
self
.
menus
.
keys
():
menu
=
self
.
menus
[
m
]
menu
=
self
.
menus
[
m
]
if
menu
.
__class__
==
FrameWork
.
AppleMenu
:
if
menu
.
__class__
==
FrameWork
.
AppleMenu
:
continue
continue
for
i
in
range
(
len
(
menu
.
items
)):
for
i
in
range
(
len
(
menu
.
items
)):
label
,
shortcut
,
callback
,
kind
=
menu
.
items
[
i
]
label
,
shortcut
,
callback
,
kind
=
menu
.
items
[
i
]
if
type
(
callback
)
==
types
.
StringType
:
if
type
(
callback
)
==
types
.
StringType
:
wid
=
MyFrontWindow
()
wid
=
MyFrontWindow
()
if
wid
and
self
.
parent
.
_windows
.
has_key
(
wid
):
if
wid
and
self
.
parent
.
_windows
.
has_key
(
wid
):
window
=
self
.
parent
.
_windows
[
wid
]
window
=
self
.
parent
.
_windows
[
wid
]
if
hasattr
(
window
,
"domenu_"
+
callback
):
if
hasattr
(
window
,
"domenu_"
+
callback
):
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
elif
hasattr
(
self
.
parent
,
"domenu_"
+
callback
):
elif
hasattr
(
self
.
parent
,
"domenu_"
+
callback
):
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
else
:
else
:
menu
.
menu
.
DisableMenuItem
(
i
+
1
)
menu
.
menu
.
DisableMenuItem
(
i
+
1
)
elif
hasattr
(
self
.
parent
,
"domenu_"
+
callback
):
elif
hasattr
(
self
.
parent
,
"domenu_"
+
callback
):
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
menu
.
menu
.
EnableMenuItem
(
i
+
1
)
else
:
else
:
menu
.
menu
.
DisableMenuItem
(
i
+
1
)
menu
.
menu
.
DisableMenuItem
(
i
+
1
)
elif
callback
:
elif
callback
:
pass
pass
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
if
self
.
menus
.
has_key
(
id
):
if
self
.
menus
.
has_key
(
id
):
self
.
menus
[
id
].
dispatch
(
id
,
item
,
window
,
event
)
self
.
menus
[
id
].
dispatch
(
id
,
item
,
window
,
event
)
else
:
else
:
if
DEBUG
:
print
"MenuBar.dispatch(%d, %d, %s, %s)"
%
\
if
DEBUG
:
print
"MenuBar.dispatch(%d, %d, %s, %s)"
%
\
(
id
,
item
,
window
,
event
)
(
id
,
item
,
window
,
event
)
# XXX Need a way to get menus as resources and bind them to callbacks
# XXX Need a way to get menus as resources and bind them to callbacks
class
Menu
:
class
Menu
:
"One menu."
"One menu."
def
__init__
(
self
,
bar
,
title
,
after
=
0
,
id
=
None
):
def
__init__
(
self
,
bar
,
title
,
after
=
0
,
id
=
None
):
self
.
bar
=
bar
self
.
bar
=
bar
self
.
id
,
self
.
menu
=
self
.
bar
.
addmenu
(
title
,
after
,
id
)
self
.
id
,
self
.
menu
=
self
.
bar
.
addmenu
(
title
,
after
,
id
)
bar
.
menus
[
self
.
id
]
=
self
bar
.
menus
[
self
.
id
]
=
self
self
.
items
=
[]
self
.
items
=
[]
self
.
_parent
=
None
self
.
_parent
=
None
def
delete
(
self
):
def
delete
(
self
):
self
.
bar
.
delmenu
(
self
.
id
)
self
.
bar
.
delmenu
(
self
.
id
)
del
self
.
bar
.
menus
[
self
.
id
]
del
self
.
bar
.
menus
[
self
.
id
]
self
.
menu
.
DisposeMenu
()
self
.
menu
.
DisposeMenu
()
del
self
.
bar
del
self
.
bar
del
self
.
items
del
self
.
items
del
self
.
menu
del
self
.
menu
del
self
.
id
del
self
.
id
del
self
.
_parent
del
self
.
_parent
def
additem
(
self
,
label
,
shortcut
=
None
,
callback
=
None
,
kind
=
None
):
def
additem
(
self
,
label
,
shortcut
=
None
,
callback
=
None
,
kind
=
None
):
self
.
menu
.
AppendMenu
(
'x'
)
# add a dummy string
self
.
menu
.
AppendMenu
(
'x'
)
# add a dummy string
self
.
items
.
append
((
label
,
shortcut
,
callback
,
kind
))
self
.
items
.
append
((
label
,
shortcut
,
callback
,
kind
))
item
=
len
(
self
.
items
)
item
=
len
(
self
.
items
)
if
isinstance
(
label
,
unicode
):
if
isinstance
(
label
,
unicode
):
self
.
menu
.
SetMenuItemTextWithCFString
(
item
,
label
)
self
.
menu
.
SetMenuItemTextWithCFString
(
item
,
label
)
else
:
else
:
self
.
menu
.
SetMenuItemText
(
item
,
label
)
self
.
menu
.
SetMenuItemText
(
item
,
label
)
if
shortcut
and
type
(
shortcut
)
==
type
(()):
if
shortcut
and
type
(
shortcut
)
==
type
(()):
modifiers
,
char
=
shortcut
[:
2
]
modifiers
,
char
=
shortcut
[:
2
]
self
.
menu
.
SetItemCmd
(
item
,
ord
(
char
))
self
.
menu
.
SetItemCmd
(
item
,
ord
(
char
))
self
.
menu
.
SetMenuItemModifiers
(
item
,
modifiers
)
self
.
menu
.
SetMenuItemModifiers
(
item
,
modifiers
)
if
len
(
shortcut
)
>
2
:
if
len
(
shortcut
)
>
2
:
self
.
menu
.
SetMenuItemKeyGlyph
(
item
,
shortcut
[
2
])
self
.
menu
.
SetMenuItemKeyGlyph
(
item
,
shortcut
[
2
])
elif
shortcut
:
elif
shortcut
:
self
.
menu
.
SetItemCmd
(
item
,
ord
(
shortcut
))
self
.
menu
.
SetItemCmd
(
item
,
ord
(
shortcut
))
return
item
return
item
def
delitem
(
self
,
item
):
def
delitem
(
self
,
item
):
if
item
!=
len
(
self
.
items
):
if
item
!=
len
(
self
.
items
):
raise
'Can only delete last item of a menu'
raise
'Can only delete last item of a menu'
self
.
menu
.
DeleteMenuItem
(
item
)
self
.
menu
.
DeleteMenuItem
(
item
)
del
self
.
items
[
item
-
1
]
del
self
.
items
[
item
-
1
]
def
addcheck
(
self
,
label
,
shortcut
=
None
,
callback
=
None
):
def
addcheck
(
self
,
label
,
shortcut
=
None
,
callback
=
None
):
return
self
.
additem
(
label
,
shortcut
,
callback
,
'check'
)
return
self
.
additem
(
label
,
shortcut
,
callback
,
'check'
)
def
addradio
(
self
,
label
,
shortcut
=
None
,
callback
=
None
):
def
addradio
(
self
,
label
,
shortcut
=
None
,
callback
=
None
):
return
self
.
additem
(
label
,
shortcut
,
callback
,
'radio'
)
return
self
.
additem
(
label
,
shortcut
,
callback
,
'radio'
)
def
addseparator
(
self
):
def
addseparator
(
self
):
self
.
menu
.
AppendMenu
(
'(-'
)
self
.
menu
.
AppendMenu
(
'(-'
)
self
.
items
.
append
((
''
,
None
,
None
,
'separator'
))
self
.
items
.
append
((
''
,
None
,
None
,
'separator'
))
def
addsubmenu
(
self
,
label
,
title
=
''
):
def
addsubmenu
(
self
,
label
,
title
=
''
):
sub
=
Menu
(
self
.
bar
,
title
,
-
1
)
sub
=
Menu
(
self
.
bar
,
title
,
-
1
)
item
=
self
.
additem
(
label
,
'
\
x1B
'
,
None
,
'submenu'
)
item
=
self
.
additem
(
label
,
'
\
x1B
'
,
None
,
'submenu'
)
self
.
menu
.
SetItemMark
(
item
,
sub
.
id
)
self
.
menu
.
SetItemMark
(
item
,
sub
.
id
)
sub
.
_parent
=
self
sub
.
_parent
=
self
sub
.
_parent_item
=
item
sub
.
_parent_item
=
item
return
sub
return
sub
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
title
,
shortcut
,
callback
,
mtype
=
self
.
items
[
item
-
1
]
title
,
shortcut
,
callback
,
mtype
=
self
.
items
[
item
-
1
]
if
callback
:
if
callback
:
if
not
self
.
bar
.
parent
or
type
(
callback
)
<>
types
.
StringType
:
if
not
self
.
bar
.
parent
or
type
(
callback
)
<>
types
.
StringType
:
menuhandler
=
callback
menuhandler
=
callback
else
:
else
:
# callback is string
# callback is string
wid
=
MyFrontWindow
()
wid
=
MyFrontWindow
()
if
wid
and
self
.
bar
.
parent
.
_windows
.
has_key
(
wid
):
if
wid
and
self
.
bar
.
parent
.
_windows
.
has_key
(
wid
):
window
=
self
.
bar
.
parent
.
_windows
[
wid
]
window
=
self
.
bar
.
parent
.
_windows
[
wid
]
if
hasattr
(
window
,
"domenu_"
+
callback
):
if
hasattr
(
window
,
"domenu_"
+
callback
):
menuhandler
=
getattr
(
window
,
"domenu_"
+
callback
)
menuhandler
=
getattr
(
window
,
"domenu_"
+
callback
)
elif
hasattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
):
elif
hasattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
):
menuhandler
=
getattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
)
menuhandler
=
getattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
)
else
:
else
:
# nothing we can do. we shouldn't have come this far
# nothing we can do. we shouldn't have come this far
# since the menu item should have been disabled...
# since the menu item should have been disabled...
return
return
elif
hasattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
):
elif
hasattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
):
menuhandler
=
getattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
)
menuhandler
=
getattr
(
self
.
bar
.
parent
,
"domenu_"
+
callback
)
else
:
# nothing we can do. we shouldn't have come this far
# since the menu item should have been disabled...
return
menuhandler
(
id
,
item
,
window
,
event
)
def
enable
(
self
,
onoff
):
if
onoff
:
self
.
menu
.
EnableMenuItem
(
0
)
if
self
.
_parent
:
self
.
_parent
.
menu
.
EnableMenuItem
(
self
.
_parent_item
)
else
:
else
:
self
.
menu
.
DisableMenuItem
(
0
)
# nothing we can do. we shouldn't have come this far
if
self
.
_parent
:
# since the menu item should have been disabled...
self
.
_parent
.
menu
.
DisableMenuItem
(
self
.
_parent_item
)
return
if
self
.
bar
and
self
.
bar
.
parent
:
menuhandler
(
id
,
item
,
window
,
event
)
self
.
bar
.
parent
.
needmenubarredraw
=
1
def
enable
(
self
,
onoff
):
if
onoff
:
self
.
menu
.
EnableMenuItem
(
0
)
if
self
.
_parent
:
self
.
_parent
.
menu
.
EnableMenuItem
(
self
.
_parent_item
)
else
:
self
.
menu
.
DisableMenuItem
(
0
)
if
self
.
_parent
:
self
.
_parent
.
menu
.
DisableMenuItem
(
self
.
_parent_item
)
if
self
.
bar
and
self
.
bar
.
parent
:
self
.
bar
.
parent
.
needmenubarredraw
=
1
class
PopupMenu
(
Menu
):
class
PopupMenu
(
Menu
):
def
__init__
(
self
,
bar
):
def
__init__
(
self
,
bar
):
Menu
.
__init__
(
self
,
bar
,
'(popup)'
,
-
1
)
Menu
.
__init__
(
self
,
bar
,
'(popup)'
,
-
1
)
def
popup
(
self
,
x
,
y
,
event
,
default
=
1
,
window
=
None
):
def
popup
(
self
,
x
,
y
,
event
,
default
=
1
,
window
=
None
):
# NOTE that x and y are global coordinates, and they should probably
# NOTE that x and y are global coordinates, and they should probably
# be topleft of the button the user clicked (not mouse-coordinates),
# be topleft of the button the user clicked (not mouse-coordinates),
# so the popup nicely overlaps.
# so the popup nicely overlaps.
reply
=
self
.
menu
.
PopUpMenuSelect
(
x
,
y
,
default
)
reply
=
self
.
menu
.
PopUpMenuSelect
(
x
,
y
,
default
)
if
not
reply
:
if
not
reply
:
return
return
id
=
(
reply
>>
16
)
&
0xffff
id
=
(
reply
>>
16
)
&
0xffff
item
=
reply
&
0xffff
item
=
reply
&
0xffff
if
not
window
:
if
not
window
:
wid
=
MyFrontWindow
()
wid
=
MyFrontWindow
()
try
:
try
:
window
=
self
.
bar
.
parent
.
_windows
[
wid
]
window
=
self
.
bar
.
parent
.
_windows
[
wid
]
except
:
except
:
pass
# If we can't find the window we pass None
pass
# If we can't find the window we pass None
self
.
dispatch
(
id
,
item
,
window
,
event
)
self
.
dispatch
(
id
,
item
,
window
,
event
)
class
MenuItem
:
class
MenuItem
:
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
,
kind
=
None
):
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
,
kind
=
None
):
self
.
item
=
menu
.
additem
(
title
,
shortcut
,
callback
)
self
.
item
=
menu
.
additem
(
title
,
shortcut
,
callback
)
self
.
menu
=
menu
self
.
menu
=
menu
def
delete
(
self
):
def
delete
(
self
):
self
.
menu
.
delitem
(
self
.
item
)
self
.
menu
.
delitem
(
self
.
item
)
del
self
.
menu
del
self
.
menu
del
self
.
item
del
self
.
item
def
check
(
self
,
onoff
):
def
check
(
self
,
onoff
):
self
.
menu
.
menu
.
CheckMenuItem
(
self
.
item
,
onoff
)
self
.
menu
.
menu
.
CheckMenuItem
(
self
.
item
,
onoff
)
def
enable
(
self
,
onoff
):
def
enable
(
self
,
onoff
):
if
onoff
:
if
onoff
:
self
.
menu
.
menu
.
EnableMenuItem
(
self
.
item
)
self
.
menu
.
menu
.
EnableMenuItem
(
self
.
item
)
else
:
else
:
self
.
menu
.
menu
.
DisableMenuItem
(
self
.
item
)
self
.
menu
.
menu
.
DisableMenuItem
(
self
.
item
)
def
settext
(
self
,
text
):
def
settext
(
self
,
text
):
self
.
menu
.
menu
.
SetMenuItemText
(
self
.
item
,
text
)
self
.
menu
.
menu
.
SetMenuItemText
(
self
.
item
,
text
)
def
setstyle
(
self
,
style
):
def
setstyle
(
self
,
style
):
self
.
menu
.
menu
.
SetItemStyle
(
self
.
item
,
style
)
self
.
menu
.
menu
.
SetItemStyle
(
self
.
item
,
style
)
def
seticon
(
self
,
icon
):
def
seticon
(
self
,
icon
):
self
.
menu
.
menu
.
SetItemIcon
(
self
.
item
,
icon
)
self
.
menu
.
menu
.
SetItemIcon
(
self
.
item
,
icon
)
def
setcmd
(
self
,
cmd
):
def
setcmd
(
self
,
cmd
):
self
.
menu
.
menu
.
SetItemCmd
(
self
.
item
,
cmd
)
self
.
menu
.
menu
.
SetItemCmd
(
self
.
item
,
cmd
)
def
setmark
(
self
,
cmd
):
def
setmark
(
self
,
cmd
):
self
.
menu
.
menu
.
SetItemMark
(
self
.
item
,
cmd
)
self
.
menu
.
menu
.
SetItemMark
(
self
.
item
,
cmd
)
class
RadioItem
(
MenuItem
):
class
RadioItem
(
MenuItem
):
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
):
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
):
MenuItem
.
__init__
(
self
,
menu
,
title
,
shortcut
,
callback
,
'radio'
)
MenuItem
.
__init__
(
self
,
menu
,
title
,
shortcut
,
callback
,
'radio'
)
class
CheckItem
(
MenuItem
):
class
CheckItem
(
MenuItem
):
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
):
def
__init__
(
self
,
menu
,
title
,
shortcut
=
None
,
callback
=
None
):
MenuItem
.
__init__
(
self
,
menu
,
title
,
shortcut
,
callback
,
'check'
)
MenuItem
.
__init__
(
self
,
menu
,
title
,
shortcut
,
callback
,
'check'
)
def
Separator
(
menu
):
def
Separator
(
menu
):
menu
.
addseparator
()
menu
.
addseparator
()
def
SubMenu
(
menu
,
label
,
title
=
''
):
def
SubMenu
(
menu
,
label
,
title
=
''
):
return
menu
.
addsubmenu
(
label
,
title
)
return
menu
.
addsubmenu
(
label
,
title
)
class
AppleMenu
(
Menu
):
class
AppleMenu
(
Menu
):
def
__init__
(
self
,
bar
,
abouttext
=
"About me..."
,
aboutcallback
=
None
):
def
__init__
(
self
,
bar
,
abouttext
=
"About me..."
,
aboutcallback
=
None
):
Menu
.
__init__
(
self
,
bar
,
"
\
024
"
,
id
=
SIOUX_APPLEMENU_ID
)
Menu
.
__init__
(
self
,
bar
,
"
\
024
"
,
id
=
SIOUX_APPLEMENU_ID
)
if
MacOS
.
runtimemodel
==
'ppc'
:
if
MacOS
.
runtimemodel
==
'ppc'
:
self
.
additem
(
abouttext
,
None
,
aboutcallback
)
self
.
additem
(
abouttext
,
None
,
aboutcallback
)
self
.
addseparator
()
self
.
addseparator
()
self
.
menu
.
AppendResMenu
(
'DRVR'
)
self
.
menu
.
AppendResMenu
(
'DRVR'
)
else
:
else
:
# Additem()'s tricks do not work for "apple" menu under Carbon
# Additem()'s tricks do not work for "apple" menu under Carbon
self
.
menu
.
InsertMenuItem
(
abouttext
,
0
)
self
.
menu
.
InsertMenuItem
(
abouttext
,
0
)
self
.
items
.
append
((
abouttext
,
None
,
aboutcallback
,
None
))
self
.
items
.
append
((
abouttext
,
None
,
aboutcallback
,
None
))
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
def
dispatch
(
self
,
id
,
item
,
window
,
event
):
if
item
==
1
:
if
item
==
1
:
Menu
.
dispatch
(
self
,
id
,
item
,
window
,
event
)
Menu
.
dispatch
(
self
,
id
,
item
,
window
,
event
)
elif
MacOS
.
runtimemodel
==
'ppc'
:
elif
MacOS
.
runtimemodel
==
'ppc'
:
name
=
self
.
menu
.
GetMenuItemText
(
item
)
name
=
self
.
menu
.
GetMenuItemText
(
item
)
OpenDeskAcc
(
name
)
OpenDeskAcc
(
name
)
class
HelpMenu
(
Menu
):
class
HelpMenu
(
Menu
):
def
__init__
(
self
,
bar
):
def
__init__
(
self
,
bar
):
# Note we don't call Menu.__init__, we do the necessary things by hand
# Note we don't call Menu.__init__, we do the necessary things by hand
self
.
bar
=
bar
self
.
bar
=
bar
self
.
menu
,
index
=
HMGetHelpMenu
()
self
.
menu
,
index
=
HMGetHelpMenu
()
self
.
id
=
self
.
menu
.
GetMenuID
()
self
.
id
=
self
.
menu
.
GetMenuID
()
bar
.
menus
[
self
.
id
]
=
self
bar
.
menus
[
self
.
id
]
=
self
# The next line caters for the entries the system already handles for us
# The next line caters for the entries the system already handles for us
self
.
items
=
[
None
]
*
(
index
-
1
)
self
.
items
=
[
None
]
*
(
index
-
1
)
self
.
_parent
=
None
self
.
_parent
=
None
class
Window
:
class
Window
:
"""A single window belonging to an application"""
"""A single window belonging to an application"""
def
__init__
(
self
,
parent
):
def
__init__
(
self
,
parent
):
self
.
wid
=
None
self
.
wid
=
None
self
.
parent
=
parent
self
.
parent
=
parent
def
open
(
self
,
bounds
=
(
40
,
40
,
400
,
400
),
resid
=
None
):
def
open
(
self
,
bounds
=
(
40
,
40
,
400
,
400
),
resid
=
None
):
if
resid
<>
None
:
if
resid
<>
None
:
self
.
wid
=
GetNewWindow
(
resid
,
-
1
)
self
.
wid
=
GetNewWindow
(
resid
,
-
1
)
else
:
else
:
self
.
wid
=
NewWindow
(
bounds
,
self
.
__class__
.
__name__
,
1
,
self
.
wid
=
NewWindow
(
bounds
,
self
.
__class__
.
__name__
,
1
,
8
,
-
1
,
1
,
0
)
# changed to proc id 8 to include zoom box. jvr
8
,
-
1
,
1
,
0
)
# changed to proc id 8 to include zoom box. jvr
self
.
do_postopen
()
self
.
do_postopen
()
def
do_postopen
(
self
):
def
do_postopen
(
self
):
"""Tell our parent we exist"""
"""Tell our parent we exist"""
self
.
parent
.
appendwindow
(
self
.
wid
,
self
)
self
.
parent
.
appendwindow
(
self
.
wid
,
self
)
def
close
(
self
):
def
close
(
self
):
self
.
do_postclose
()
self
.
do_postclose
()
def
do_postclose
(
self
):
def
do_postclose
(
self
):
self
.
parent
.
removewindow
(
self
.
wid
)
self
.
parent
.
removewindow
(
self
.
wid
)
self
.
parent
=
None
self
.
parent
=
None
self
.
wid
=
None
self
.
wid
=
None
def
SetPort
(
self
):
def
SetPort
(
self
):
# Convinience method
# Convinience method
SetPort
(
self
.
wid
)
SetPort
(
self
.
wid
)
def
GetWindow
(
self
):
def
GetWindow
(
self
):
return
self
.
wid
return
self
.
wid
def
do_inDrag
(
self
,
partcode
,
window
,
event
):
def
do_inDrag
(
self
,
partcode
,
window
,
event
):
where
=
event
[
3
]
where
=
event
[
3
]
window
.
DragWindow
(
where
,
self
.
draglimit
)
window
.
DragWindow
(
where
,
self
.
draglimit
)
draglimit
=
screenbounds
draglimit
=
screenbounds
def
do_inGoAway
(
self
,
partcode
,
window
,
event
):
def
do_inGoAway
(
self
,
partcode
,
window
,
event
):
where
=
event
[
3
]
where
=
event
[
3
]
if
window
.
TrackGoAway
(
where
):
if
window
.
TrackGoAway
(
where
):
self
.
close
()
self
.
close
()
def
do_inZoom
(
self
,
partcode
,
window
,
event
):
def
do_inZoom
(
self
,
partcode
,
window
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
if
window
.
TrackBox
(
where
,
partcode
):
if
window
.
TrackBox
(
where
,
partcode
):
window
.
ZoomWindow
(
partcode
,
1
)
window
.
ZoomWindow
(
partcode
,
1
)
rect
=
window
.
GetWindowUserState
()
# so that zoom really works... jvr
rect
=
window
.
GetWindowUserState
()
# so that zoom really works... jvr
self
.
do_postresize
(
rect
[
2
]
-
rect
[
0
],
rect
[
3
]
-
rect
[
1
],
window
)
# jvr
self
.
do_postresize
(
rect
[
2
]
-
rect
[
0
],
rect
[
3
]
-
rect
[
1
],
window
)
# jvr
def
do_inZoomIn
(
self
,
partcode
,
window
,
event
):
def
do_inZoomIn
(
self
,
partcode
,
window
,
event
):
SetPort
(
window
)
# !!!
SetPort
(
window
)
# !!!
self
.
do_inZoom
(
partcode
,
window
,
event
)
self
.
do_inZoom
(
partcode
,
window
,
event
)
def
do_inZoomOut
(
self
,
partcode
,
window
,
event
):
def
do_inZoomOut
(
self
,
partcode
,
window
,
event
):
SetPort
(
window
)
# !!!
SetPort
(
window
)
# !!!
self
.
do_inZoom
(
partcode
,
window
,
event
)
self
.
do_inZoom
(
partcode
,
window
,
event
)
def
do_inGrow
(
self
,
partcode
,
window
,
event
):
def
do_inGrow
(
self
,
partcode
,
window
,
event
):
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
result
=
window
.
GrowWindow
(
where
,
self
.
growlimit
)
result
=
window
.
GrowWindow
(
where
,
self
.
growlimit
)
if
result
:
if
result
:
height
=
(
result
>>
16
)
&
0xffff
# Hi word
height
=
(
result
>>
16
)
&
0xffff
# Hi word
width
=
result
&
0xffff
# Lo word
width
=
result
&
0xffff
# Lo word
self
.
do_resize
(
width
,
height
,
window
)
self
.
do_resize
(
width
,
height
,
window
)
growlimit
=
(
50
,
50
,
screenbounds
[
2
]
-
screenbounds
[
0
],
screenbounds
[
3
]
-
screenbounds
[
1
])
# jvr
growlimit
=
(
50
,
50
,
screenbounds
[
2
]
-
screenbounds
[
0
],
screenbounds
[
3
]
-
screenbounds
[
1
])
# jvr
def
do_resize
(
self
,
width
,
height
,
window
):
def
do_resize
(
self
,
width
,
height
,
window
):
l
,
t
,
r
,
b
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
# jvr, forGrowIcon
l
,
t
,
r
,
b
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
# jvr, forGrowIcon
self
.
SetPort
()
# jvr
self
.
SetPort
()
# jvr
self
.
wid
.
InvalWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
b
-
SCROLLBARWIDTH
+
1
,
r
,
b
))
# jvr
self
.
wid
.
InvalWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
b
-
SCROLLBARWIDTH
+
1
,
r
,
b
))
# jvr
window
.
SizeWindow
(
width
,
height
,
1
)
# changed updateFlag to true jvr
window
.
SizeWindow
(
width
,
height
,
1
)
# changed updateFlag to true jvr
self
.
do_postresize
(
width
,
height
,
window
)
self
.
do_postresize
(
width
,
height
,
window
)
def
do_postresize
(
self
,
width
,
height
,
window
):
def
do_postresize
(
self
,
width
,
height
,
window
):
SetPort
(
window
)
SetPort
(
window
)
self
.
wid
.
InvalWindowRect
(
window
.
GetWindowPort
().
GetPortBounds
())
self
.
wid
.
InvalWindowRect
(
window
.
GetWindowPort
().
GetPortBounds
())
def
do_inContent
(
self
,
partcode
,
window
,
event
):
def
do_inContent
(
self
,
partcode
,
window
,
event
):
#
#
# If we're not frontmost, select ourselves and wait for
# If we're not frontmost, select ourselves and wait for
# the activate event.
# the activate event.
#
#
if
MyFrontWindow
()
<>
window
:
if
MyFrontWindow
()
<>
window
:
window
.
SelectWindow
()
window
.
SelectWindow
()
return
return
# We are. Handle the event.
# We are. Handle the event.
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
SetPort
(
window
)
SetPort
(
window
)
local
=
GlobalToLocal
(
where
)
local
=
GlobalToLocal
(
where
)
self
.
do_contentclick
(
local
,
modifiers
,
event
)
self
.
do_contentclick
(
local
,
modifiers
,
event
)
def
do_contentclick
(
self
,
local
,
modifiers
,
event
):
def
do_contentclick
(
self
,
local
,
modifiers
,
event
):
if
DEBUG
:
if
DEBUG
:
print
'Click in contents at %s, modifiers %s'
%
(
local
,
modifiers
)
print
'Click in contents at %s, modifiers %s'
%
(
local
,
modifiers
)
def
do_rawupdate
(
self
,
window
,
event
):
def
do_rawupdate
(
self
,
window
,
event
):
if
DEBUG
:
print
"raw update for"
,
window
if
DEBUG
:
print
"raw update for"
,
window
SetPort
(
window
)
SetPort
(
window
)
window
.
BeginUpdate
()
window
.
BeginUpdate
()
self
.
do_update
(
window
,
event
)
self
.
do_update
(
window
,
event
)
window
.
EndUpdate
()
window
.
EndUpdate
()
def
do_update
(
self
,
window
,
event
):
def
do_update
(
self
,
window
,
event
):
if
DEBUG
:
if
DEBUG
:
import
time
import
time
for
i
in
range
(
8
):
for
i
in
range
(
8
):
time
.
sleep
(
0.1
)
time
.
sleep
(
0.1
)
InvertRgn
(
window
.
GetWindowPort
().
visRgn
)
InvertRgn
(
window
.
GetWindowPort
().
visRgn
)
FillRgn
(
window
.
GetWindowPort
().
visRgn
,
GetQDGlobalsGray
())
FillRgn
(
window
.
GetWindowPort
().
visRgn
,
GetQDGlobalsGray
())
else
:
else
:
EraseRgn
(
window
.
GetWindowPort
().
visRgn
)
EraseRgn
(
window
.
GetWindowPort
().
visRgn
)
def
do_activate
(
self
,
activate
,
event
):
def
do_activate
(
self
,
activate
,
event
):
if
DEBUG
:
print
'Activate %d for %s'
%
(
activate
,
self
.
wid
)
if
DEBUG
:
print
'Activate %d for %s'
%
(
activate
,
self
.
wid
)
class
ControlsWindow
(
Window
):
class
ControlsWindow
(
Window
):
def
do_rawupdate
(
self
,
window
,
event
):
def
do_rawupdate
(
self
,
window
,
event
):
if
DEBUG
:
print
"raw update for"
,
window
if
DEBUG
:
print
"raw update for"
,
window
SetPort
(
window
)
SetPort
(
window
)
window
.
BeginUpdate
()
window
.
BeginUpdate
()
self
.
do_update
(
window
,
event
)
self
.
do_update
(
window
,
event
)
#DrawControls(window)
# jvr
#DrawControls(window)
# jvr
UpdateControls
(
window
,
window
.
GetWindowPort
().
visRgn
)
# jvr
UpdateControls
(
window
,
window
.
GetWindowPort
().
visRgn
)
# jvr
window
.
DrawGrowIcon
()
window
.
DrawGrowIcon
()
window
.
EndUpdate
()
window
.
EndUpdate
()
def
do_controlhit
(
self
,
window
,
control
,
pcode
,
event
):
def
do_controlhit
(
self
,
window
,
control
,
pcode
,
event
):
if
DEBUG
:
print
"control hit in"
,
window
,
"on"
,
control
,
"; pcode ="
,
pcode
if
DEBUG
:
print
"control hit in"
,
window
,
"on"
,
control
,
"; pcode ="
,
pcode
def
do_inContent
(
self
,
partcode
,
window
,
event
):
def
do_inContent
(
self
,
partcode
,
window
,
event
):
if
MyFrontWindow
()
<>
window
:
if
MyFrontWindow
()
<>
window
:
window
.
SelectWindow
()
window
.
SelectWindow
()
return
return
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
(
what
,
message
,
when
,
where
,
modifiers
)
=
event
SetPort
(
window
)
# XXXX Needed?
SetPort
(
window
)
# XXXX Needed?
local
=
GlobalToLocal
(
where
)
local
=
GlobalToLocal
(
where
)
pcode
,
control
=
FindControl
(
local
,
window
)
pcode
,
control
=
FindControl
(
local
,
window
)
if
pcode
and
control
:
if
pcode
and
control
:
self
.
do_rawcontrolhit
(
window
,
control
,
pcode
,
local
,
event
)
self
.
do_rawcontrolhit
(
window
,
control
,
pcode
,
local
,
event
)
else
:
else
:
if
DEBUG
:
print
"FindControl(%s, %s) -> (%s, %s)"
%
\
if
DEBUG
:
print
"FindControl(%s, %s) -> (%s, %s)"
%
\
(
local
,
window
,
pcode
,
control
)
(
local
,
window
,
pcode
,
control
)
self
.
do_contentclick
(
local
,
modifiers
,
event
)
self
.
do_contentclick
(
local
,
modifiers
,
event
)
def
do_rawcontrolhit
(
self
,
window
,
control
,
pcode
,
local
,
event
):
def
do_rawcontrolhit
(
self
,
window
,
control
,
pcode
,
local
,
event
):
pcode
=
control
.
TrackControl
(
local
)
pcode
=
control
.
TrackControl
(
local
)
if
pcode
:
if
pcode
:
self
.
do_controlhit
(
window
,
control
,
pcode
,
event
)
self
.
do_controlhit
(
window
,
control
,
pcode
,
event
)
class
ScrolledWindow
(
ControlsWindow
):
class
ScrolledWindow
(
ControlsWindow
):
def
__init__
(
self
,
parent
):
def
__init__
(
self
,
parent
):
self
.
barx
=
self
.
bary
=
None
self
.
barx
=
self
.
bary
=
None
self
.
barx_enabled
=
self
.
bary_enabled
=
1
self
.
barx_enabled
=
self
.
bary_enabled
=
1
self
.
activated
=
1
self
.
activated
=
1
ControlsWindow
.
__init__
(
self
,
parent
)
ControlsWindow
.
__init__
(
self
,
parent
)
def
scrollbars
(
self
,
wantx
=
1
,
wanty
=
1
):
def
scrollbars
(
self
,
wantx
=
1
,
wanty
=
1
):
SetPort
(
self
.
wid
)
SetPort
(
self
.
wid
)
self
.
barx
=
self
.
bary
=
None
self
.
barx
=
self
.
bary
=
None
self
.
barx_enabled
=
self
.
bary_enabled
=
1
self
.
barx_enabled
=
self
.
bary_enabled
=
1
x0
,
y0
,
x1
,
y1
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
x0
,
y0
,
x1
,
y1
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
vx
,
vy
=
self
.
getscrollbarvalues
()
vx
,
vy
=
self
.
getscrollbarvalues
()
if
vx
==
None
:
self
.
barx_enabled
,
vx
=
0
,
0
if
vx
==
None
:
self
.
barx_enabled
,
vx
=
0
,
0
if
vy
==
None
:
self
.
bary_enabled
,
vy
=
0
,
0
if
vy
==
None
:
self
.
bary_enabled
,
vy
=
0
,
0
if
wantx
:
if
wantx
:
rect
=
x0
-
1
,
y1
-
(
SCROLLBARWIDTH
-
1
),
x1
-
(
SCROLLBARWIDTH
-
2
),
y1
+
1
rect
=
x0
-
1
,
y1
-
(
SCROLLBARWIDTH
-
1
),
x1
-
(
SCROLLBARWIDTH
-
2
),
y1
+
1
self
.
barx
=
NewControl
(
self
.
wid
,
rect
,
""
,
1
,
vx
,
0
,
32767
,
16
,
0
)
self
.
barx
=
NewControl
(
self
.
wid
,
rect
,
""
,
1
,
vx
,
0
,
32767
,
16
,
0
)
if
not
self
.
barx_enabled
:
self
.
barx
.
HiliteControl
(
255
)
if
not
self
.
barx_enabled
:
self
.
barx
.
HiliteControl
(
255
)
## self.wid.InvalWindowRect(rect)
## self.wid.InvalWindowRect(rect)
if
wanty
:
if
wanty
:
rect
=
x1
-
(
SCROLLBARWIDTH
-
1
),
y0
-
1
,
x1
+
1
,
y1
-
(
SCROLLBARWIDTH
-
2
)
rect
=
x1
-
(
SCROLLBARWIDTH
-
1
),
y0
-
1
,
x1
+
1
,
y1
-
(
SCROLLBARWIDTH
-
2
)
self
.
bary
=
NewControl
(
self
.
wid
,
rect
,
""
,
1
,
vy
,
0
,
32767
,
16
,
0
)
self
.
bary
=
NewControl
(
self
.
wid
,
rect
,
""
,
1
,
vy
,
0
,
32767
,
16
,
0
)
if
not
self
.
bary_enabled
:
self
.
bary
.
HiliteControl
(
255
)
if
not
self
.
bary_enabled
:
self
.
bary
.
HiliteControl
(
255
)
## self.wid.InvalWindowRect(rect)
## self.wid.InvalWindowRect(rect)
def
do_postclose
(
self
):
def
do_postclose
(
self
):
self
.
barx
=
self
.
bary
=
None
self
.
barx
=
self
.
bary
=
None
ControlsWindow
.
do_postclose
(
self
)
ControlsWindow
.
do_postclose
(
self
)
def
do_activate
(
self
,
onoff
,
event
):
def
do_activate
(
self
,
onoff
,
event
):
self
.
activated
=
onoff
self
.
activated
=
onoff
if
onoff
:
if
onoff
:
if
self
.
barx
and
self
.
barx_enabled
:
if
self
.
barx
and
self
.
barx_enabled
:
self
.
barx
.
ShowControl
()
# jvr
self
.
barx
.
ShowControl
()
# jvr
if
self
.
bary
and
self
.
bary_enabled
:
if
self
.
bary
and
self
.
bary_enabled
:
self
.
bary
.
ShowControl
()
# jvr
self
.
bary
.
ShowControl
()
# jvr
else
:
else
:
if
self
.
barx
:
if
self
.
barx
:
self
.
barx
.
HideControl
()
# jvr; An inactive window should have *hidden*
self
.
barx
.
HideControl
()
# jvr; An inactive window should have *hidden*
# scrollbars, not just dimmed (no matter what
# scrollbars, not just dimmed (no matter what
# BBEdit does... look at the Finder)
# BBEdit does... look at the Finder)
if
self
.
bary
:
if
self
.
bary
:
self
.
bary
.
HideControl
()
# jvr
self
.
bary
.
HideControl
()
# jvr
self
.
wid
.
DrawGrowIcon
()
# jvr
self
.
wid
.
DrawGrowIcon
()
# jvr
def
do_postresize
(
self
,
width
,
height
,
window
):
def
do_postresize
(
self
,
width
,
height
,
window
):
l
,
t
,
r
,
b
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
l
,
t
,
r
,
b
=
self
.
wid
.
GetWindowPort
().
GetPortBounds
()
self
.
SetPort
()
self
.
SetPort
()
if
self
.
barx
:
if
self
.
barx
:
self
.
barx
.
HideControl
()
# jvr
self
.
barx
.
HideControl
()
# jvr
self
.
barx
.
MoveControl
(
l
-
1
,
b
-
(
SCROLLBARWIDTH
-
1
))
self
.
barx
.
MoveControl
(
l
-
1
,
b
-
(
SCROLLBARWIDTH
-
1
))
self
.
barx
.
SizeControl
((
r
-
l
)
-
(
SCROLLBARWIDTH
-
3
),
SCROLLBARWIDTH
)
# jvr
self
.
barx
.
SizeControl
((
r
-
l
)
-
(
SCROLLBARWIDTH
-
3
),
SCROLLBARWIDTH
)
# jvr
if
self
.
bary
:
if
self
.
bary
:
self
.
bary
.
HideControl
()
# jvr
self
.
bary
.
HideControl
()
# jvr
self
.
bary
.
MoveControl
(
r
-
(
SCROLLBARWIDTH
-
1
),
t
-
1
)
self
.
bary
.
MoveControl
(
r
-
(
SCROLLBARWIDTH
-
1
),
t
-
1
)
self
.
bary
.
SizeControl
(
SCROLLBARWIDTH
,
(
b
-
t
)
-
(
SCROLLBARWIDTH
-
3
))
# jvr
self
.
bary
.
SizeControl
(
SCROLLBARWIDTH
,
(
b
-
t
)
-
(
SCROLLBARWIDTH
-
3
))
# jvr
if
self
.
barx
:
if
self
.
barx
:
self
.
barx
.
ShowControl
()
# jvr
self
.
barx
.
ShowControl
()
# jvr
self
.
wid
.
ValidWindowRect
((
l
,
b
-
SCROLLBARWIDTH
+
1
,
r
-
SCROLLBARWIDTH
+
2
,
b
))
# jvr
self
.
wid
.
ValidWindowRect
((
l
,
b
-
SCROLLBARWIDTH
+
1
,
r
-
SCROLLBARWIDTH
+
2
,
b
))
# jvr
if
self
.
bary
:
if
self
.
bary
:
self
.
bary
.
ShowControl
()
# jvr
self
.
bary
.
ShowControl
()
# jvr
self
.
wid
.
ValidWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
t
,
r
,
b
-
SCROLLBARWIDTH
+
2
))
# jvr
self
.
wid
.
ValidWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
t
,
r
,
b
-
SCROLLBARWIDTH
+
2
))
# jvr
self
.
wid
.
InvalWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
b
-
SCROLLBARWIDTH
+
1
,
r
,
b
))
# jvr, growicon
self
.
wid
.
InvalWindowRect
((
r
-
SCROLLBARWIDTH
+
1
,
b
-
SCROLLBARWIDTH
+
1
,
r
,
b
))
# jvr, growicon
def
do_rawcontrolhit
(
self
,
window
,
control
,
pcode
,
local
,
event
):
def
do_rawcontrolhit
(
self
,
window
,
control
,
pcode
,
local
,
event
):
if
control
==
self
.
barx
:
if
control
==
self
.
barx
:
which
=
'x'
which
=
'x'
elif
control
==
self
.
bary
:
elif
control
==
self
.
bary
:
which
=
'y'
which
=
'y'
else
:
else
:
return
0
return
0
if
pcode
in
(
inUpButton
,
inDownButton
,
inPageUp
,
inPageDown
):
if
pcode
in
(
inUpButton
,
inDownButton
,
inPageUp
,
inPageDown
):
# We do the work for the buttons and grey area in the tracker
# We do the work for the buttons and grey area in the tracker
dummy
=
control
.
TrackControl
(
local
,
self
.
do_controltrack
)
dummy
=
control
.
TrackControl
(
local
,
self
.
do_controltrack
)
else
:
else
:
# but the thumb is handled here
# but the thumb is handled here
pcode
=
control
.
TrackControl
(
local
)
pcode
=
control
.
TrackControl
(
local
)
if
pcode
==
inThumb
:
if
pcode
==
inThumb
:
value
=
control
.
GetControlValue
()
value
=
control
.
GetControlValue
()
print
'setbars'
,
which
,
value
#DBG
print
'setbars'
,
which
,
value
#DBG
self
.
scrollbar_callback
(
which
,
'set'
,
value
)
self
.
scrollbar_callback
(
which
,
'set'
,
value
)
self
.
updatescrollbars
()
else
:
print
'funny part'
,
pcode
#DBG
return
1
def
do_controltrack
(
self
,
control
,
pcode
):
if
control
==
self
.
barx
:
which
=
'x'
elif
control
==
self
.
bary
:
which
=
'y'
else
:
return
if
pcode
==
inUpButton
:
what
=
'-'
elif
pcode
==
inDownButton
:
what
=
'+'
elif
pcode
==
inPageUp
:
what
=
'--'
elif
pcode
==
inPageDown
:
what
=
'++'
else
:
return
self
.
scrollbar_callback
(
which
,
what
,
None
)
self
.
updatescrollbars
()
self
.
updatescrollbars
()
else
:
def
updatescrollbars
(
self
):
print
'funny part'
,
pcode
#DBG
SetPort
(
self
.
wid
)
return
1
vx
,
vy
=
self
.
getscrollbarvalues
()
if
self
.
barx
:
def
do_controltrack
(
self
,
control
,
pcode
):
if
vx
==
None
:
if
control
==
self
.
barx
:
self
.
barx
.
HiliteControl
(
255
)
which
=
'x'
self
.
barx_enabled
=
0
elif
control
==
self
.
bary
:
else
:
which
=
'y'
if
not
self
.
barx_enabled
:
else
:
self
.
barx_enabled
=
1
return
if
self
.
activated
:
self
.
barx
.
HiliteControl
(
0
)
if
pcode
==
inUpButton
:
self
.
barx
.
SetControlValue
(
vx
)
what
=
'-'
if
self
.
bary
:
elif
pcode
==
inDownButton
:
if
vy
==
None
:
what
=
'+'
self
.
bary
.
HiliteControl
(
255
)
elif
pcode
==
inPageUp
:
self
.
bary_enabled
=
0
what
=
'--'
else
:
elif
pcode
==
inPageDown
:
if
not
self
.
bary_enabled
:
what
=
'++'
self
.
bary_enabled
=
1
else
:
if
self
.
activated
:
return
self
.
bary
.
HiliteControl
(
0
)
self
.
scrollbar_callback
(
which
,
what
,
None
)
self
.
bary
.
SetControlValue
(
vy
)
self
.
updatescrollbars
()
# Auxiliary function: convert standard text/image/etc coordinate
def
updatescrollbars
(
self
):
# to something palatable as getscrollbarvalues() return
SetPort
(
self
.
wid
)
def
scalebarvalue
(
self
,
absmin
,
absmax
,
curmin
,
curmax
):
vx
,
vy
=
self
.
getscrollbarvalues
()
if
curmin
<=
absmin
and
curmax
>=
absmax
:
if
self
.
barx
:
return
None
if
vx
==
None
:
if
curmin
<=
absmin
:
self
.
barx
.
HiliteControl
(
255
)
return
0
self
.
barx_enabled
=
0
if
curmax
>=
absmax
:
else
:
return
32767
if
not
self
.
barx_enabled
:
perc
=
float
(
curmin
-
absmin
)
/
float
(
absmax
-
absmin
)
self
.
barx_enabled
=
1
return
int
(
perc
*
32767
)
if
self
.
activated
:
self
.
barx
.
HiliteControl
(
0
)
# To be overridden:
self
.
barx
.
SetControlValue
(
vx
)
if
self
.
bary
:
def
getscrollbarvalues
(
self
):
if
vy
==
None
:
return
0
,
0
self
.
bary
.
HiliteControl
(
255
)
self
.
bary_enabled
=
0
def
scrollbar_callback
(
self
,
which
,
what
,
value
):
else
:
print
'scroll'
,
which
,
what
,
value
if
not
self
.
bary_enabled
:
self
.
bary_enabled
=
1
if
self
.
activated
:
self
.
bary
.
HiliteControl
(
0
)
self
.
bary
.
SetControlValue
(
vy
)
# Auxiliary function: convert standard text/image/etc coordinate
# to something palatable as getscrollbarvalues() return
def
scalebarvalue
(
self
,
absmin
,
absmax
,
curmin
,
curmax
):
if
curmin
<=
absmin
and
curmax
>=
absmax
:
return
None
if
curmin
<=
absmin
:
return
0
if
curmax
>=
absmax
:
return
32767
perc
=
float
(
curmin
-
absmin
)
/
float
(
absmax
-
absmin
)
return
int
(
perc
*
32767
)
# To be overridden:
def
getscrollbarvalues
(
self
):
return
0
,
0
def
scrollbar_callback
(
self
,
which
,
what
,
value
):
print
'scroll'
,
which
,
what
,
value
class
DialogWindow
(
Window
):
class
DialogWindow
(
Window
):
"""A modeless dialog window"""
"""A modeless dialog window"""
def
open
(
self
,
resid
):
def
open
(
self
,
resid
):
self
.
dlg
=
GetNewDialog
(
resid
,
-
1
)
self
.
dlg
=
GetNewDialog
(
resid
,
-
1
)
self
.
wid
=
self
.
dlg
.
GetDialogWindow
()
self
.
wid
=
self
.
dlg
.
GetDialogWindow
()
self
.
do_postopen
()
self
.
do_postopen
()
def
close
(
self
):
def
close
(
self
):
self
.
do_postclose
()
self
.
do_postclose
()
def
do_postclose
(
self
):
def
do_postclose
(
self
):
self
.
dlg
=
None
self
.
dlg
=
None
Window
.
do_postclose
(
self
)
Window
.
do_postclose
(
self
)
def
do_itemhit
(
self
,
item
,
event
):
def
do_itemhit
(
self
,
item
,
event
):
print
'Dialog %s, item %d hit'
%
(
self
.
dlg
,
item
)
print
'Dialog %s, item %d hit'
%
(
self
.
dlg
,
item
)
def
do_rawupdate
(
self
,
window
,
event
):
def
do_rawupdate
(
self
,
window
,
event
):
pass
pass
def
ostypecode
(
x
):
def
ostypecode
(
x
):
"Convert a long int to the 4-character code it really is"
"Convert a long int to the 4-character code it really is"
s
=
''
s
=
''
for
i
in
range
(
4
):
for
i
in
range
(
4
):
x
,
c
=
divmod
(
x
,
256
)
x
,
c
=
divmod
(
x
,
256
)
s
=
chr
(
c
)
+
s
s
=
chr
(
c
)
+
s
return
s
return
s
class
TestApp
(
Application
):
class
TestApp
(
Application
):
"This class is used by the test() function"
"This class is used by the test() function"
def
makeusermenus
(
self
):
def
makeusermenus
(
self
):
self
.
filemenu
=
m
=
Menu
(
self
.
menubar
,
"File"
)
self
.
filemenu
=
m
=
Menu
(
self
.
menubar
,
"File"
)
self
.
saveitem
=
MenuItem
(
m
,
"Save"
,
"S"
,
self
.
save
)
self
.
saveitem
=
MenuItem
(
m
,
"Save"
,
"S"
,
self
.
save
)
Separator
(
m
)
Separator
(
m
)
self
.
optionsmenu
=
mm
=
SubMenu
(
m
,
"Options"
)
self
.
optionsmenu
=
mm
=
SubMenu
(
m
,
"Options"
)
self
.
opt1
=
CheckItem
(
mm
,
"Arguments"
,
"A"
)
self
.
opt1
=
CheckItem
(
mm
,
"Arguments"
,
"A"
)
self
.
opt2
=
CheckItem
(
mm
,
"Being hit on the head lessons"
,
(
kMenuOptionModifier
,
"A"
))
self
.
opt2
=
CheckItem
(
mm
,
"Being hit on the head lessons"
,
(
kMenuOptionModifier
,
"A"
))
self
.
opt3
=
CheckItem
(
mm
,
"Complaints"
,
(
kMenuOptionModifier
|
kMenuNoCommandModifier
,
"A"
))
self
.
opt3
=
CheckItem
(
mm
,
"Complaints"
,
(
kMenuOptionModifier
|
kMenuNoCommandModifier
,
"A"
))
Separator
(
m
)
Separator
(
m
)
self
.
itemeh
=
MenuItem
(
m
,
"Enable Help"
,
None
,
self
.
enablehelp
)
self
.
itemeh
=
MenuItem
(
m
,
"Enable Help"
,
None
,
self
.
enablehelp
)
self
.
itemdbg
=
MenuItem
(
m
,
"Debug"
,
None
,
self
.
debug
)
self
.
itemdbg
=
MenuItem
(
m
,
"Debug"
,
None
,
self
.
debug
)
Separator
(
m
)
Separator
(
m
)
self
.
quititem
=
MenuItem
(
m
,
"Quit"
,
"Q"
,
self
.
quit
)
self
.
quititem
=
MenuItem
(
m
,
"Quit"
,
"Q"
,
self
.
quit
)
def
save
(
self
,
*
args
):
def
save
(
self
,
*
args
):
print
"Save"
print
"Save"
def
quit
(
self
,
*
args
):
def
quit
(
self
,
*
args
):
raise
self
raise
self
def
enablehelp
(
self
,
*
args
):
def
enablehelp
(
self
,
*
args
):
hm
=
self
.
gethelpmenu
()
hm
=
self
.
gethelpmenu
()
self
.
nohelpitem
=
MenuItem
(
hm
,
"There isn't any"
,
None
,
self
.
nohelp
)
self
.
nohelpitem
=
MenuItem
(
hm
,
"There isn't any"
,
None
,
self
.
nohelp
)
def
nohelp
(
self
,
*
args
):
def
nohelp
(
self
,
*
args
):
print
"I told you there isn't any!"
print
"I told you there isn't any!"
def
debug
(
self
,
*
args
):
def
debug
(
self
,
*
args
):
import
pdb
import
pdb
pdb
.
set_trace
()
pdb
.
set_trace
()
def
test
():
def
test
():
"Test program"
"Test program"
app
=
TestApp
()
app
=
TestApp
()
app
.
mainloop
()
app
.
mainloop
()
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
test
()
test
()
Lib/plat-mac/MiniAEFrame.py
View file @
35b50e26
"""MiniAEFrame - A minimal AppleEvent Application framework.
"""MiniAEFrame - A minimal AppleEvent Application framework.
There are two classes:
There are two classes:
AEServer -- a mixin class offering nice AE handling.
AEServer -- a mixin class offering nice AE handling.
MiniApplication -- a very minimal alternative to FrameWork.py,
MiniApplication -- a very minimal alternative to FrameWork.py,
only suitable for the simplest of AppleEvent servers.
only suitable for the simplest of AppleEvent servers.
"""
"""
import
sys
import
sys
...
@@ -21,179 +21,179 @@ from Carbon import Qd
...
@@ -21,179 +21,179 @@ from Carbon import Qd
import
aetools
import
aetools
import
EasyDialogs
import
EasyDialogs
kHighLevelEvent
=
23
# Not defined anywhere for Python yet?
kHighLevelEvent
=
23
# Not defined anywhere for Python yet?
class
MiniApplication
:
class
MiniApplication
:
"""A minimal FrameWork.Application-like class"""
"""A minimal FrameWork.Application-like class"""
def
__init__
(
self
):
def
__init__
(
self
):
self
.
quitting
=
0
self
.
quitting
=
0
# Initialize menu
# Initialize menu
self
.
appleid
=
1
self
.
appleid
=
1
self
.
quitid
=
2
self
.
quitid
=
2
Menu
.
ClearMenuBar
()
Menu
.
ClearMenuBar
()
self
.
applemenu
=
applemenu
=
Menu
.
NewMenu
(
self
.
appleid
,
"
\
024
"
)
self
.
applemenu
=
applemenu
=
Menu
.
NewMenu
(
self
.
appleid
,
"
\
024
"
)
applemenu
.
AppendMenu
(
"%s;(-"
%
self
.
getaboutmenutext
())
applemenu
.
AppendMenu
(
"%s;(-"
%
self
.
getaboutmenutext
())
if
MacOS
.
runtimemodel
==
'ppc'
:
if
MacOS
.
runtimemodel
==
'ppc'
:
applemenu
.
AppendResMenu
(
'DRVR'
)
applemenu
.
AppendResMenu
(
'DRVR'
)
applemenu
.
InsertMenu
(
0
)
applemenu
.
InsertMenu
(
0
)
self
.
quitmenu
=
Menu
.
NewMenu
(
self
.
quitid
,
"File"
)
self
.
quitmenu
=
Menu
.
NewMenu
(
self
.
quitid
,
"File"
)
self
.
quitmenu
.
AppendMenu
(
"Quit"
)
self
.
quitmenu
.
AppendMenu
(
"Quit"
)
self
.
quitmenu
.
SetItemCmd
(
1
,
ord
(
"Q"
))
self
.
quitmenu
.
SetItemCmd
(
1
,
ord
(
"Q"
))
self
.
quitmenu
.
InsertMenu
(
0
)
self
.
quitmenu
.
InsertMenu
(
0
)
Menu
.
DrawMenuBar
()
Menu
.
DrawMenuBar
()
def
__del__
(
self
):
def
__del__
(
self
):
self
.
close
()
self
.
close
()
def
close
(
self
):
def
close
(
self
):
pass
pass
def
mainloop
(
self
,
mask
=
everyEvent
,
timeout
=
60
*
60
):
def
mainloop
(
self
,
mask
=
everyEvent
,
timeout
=
60
*
60
):
while
not
self
.
quitting
:
while
not
self
.
quitting
:
self
.
dooneevent
(
mask
,
timeout
)
self
.
dooneevent
(
mask
,
timeout
)
def
_quit
(
self
):
def
_quit
(
self
):
self
.
quitting
=
1
self
.
quitting
=
1
def
dooneevent
(
self
,
mask
=
everyEvent
,
timeout
=
60
*
60
):
def
dooneevent
(
self
,
mask
=
everyEvent
,
timeout
=
60
*
60
):
got
,
event
=
Evt
.
WaitNextEvent
(
mask
,
timeout
)
got
,
event
=
Evt
.
WaitNextEvent
(
mask
,
timeout
)
if
got
:
if
got
:
self
.
lowlevelhandler
(
event
)
self
.
lowlevelhandler
(
event
)
def
lowlevelhandler
(
self
,
event
):
def
lowlevelhandler
(
self
,
event
):
what
,
message
,
when
,
where
,
modifiers
=
event
what
,
message
,
when
,
where
,
modifiers
=
event
h
,
v
=
where
h
,
v
=
where
if
what
==
kHighLevelEvent
:
if
what
==
kHighLevelEvent
:
msg
=
"High Level Event: %s %s"
%
\
msg
=
"High Level Event: %s %s"
%
\
(
`code(message)`
,
`code(h | (v<<16))`
)
(
`code(message)`
,
`code(h | (v<<16))`
)
try
:
try
:
AE
.
AEProcessAppleEvent
(
event
)
AE
.
AEProcessAppleEvent
(
event
)
except
AE
.
Error
,
err
:
except
AE
.
Error
,
err
:
print
'AE error: '
,
err
print
'AE error: '
,
err
print
'in'
,
msg
print
'in'
,
msg
traceback
.
print_exc
()
traceback
.
print_exc
()
return
return
elif
what
==
keyDown
:
elif
what
==
keyDown
:
c
=
chr
(
message
&
charCodeMask
)
c
=
chr
(
message
&
charCodeMask
)
if
modifiers
&
cmdKey
:
if
modifiers
&
cmdKey
:
if
c
==
'.'
:
if
c
==
'.'
:
raise
KeyboardInterrupt
,
"Command-period"
raise
KeyboardInterrupt
,
"Command-period"
if
c
==
'q'
:
if
c
==
'q'
:
if
hasattr
(
MacOS
,
'OutputSeen'
):
if
hasattr
(
MacOS
,
'OutputSeen'
):
MacOS
.
OutputSeen
()
MacOS
.
OutputSeen
()
self
.
quitting
=
1
self
.
quitting
=
1
return
return
elif
what
==
mouseDown
:
elif
what
==
mouseDown
:
partcode
,
window
=
Win
.
FindWindow
(
where
)
partcode
,
window
=
Win
.
FindWindow
(
where
)
if
partcode
==
inMenuBar
:
if
partcode
==
inMenuBar
:
result
=
Menu
.
MenuSelect
(
where
)
result
=
Menu
.
MenuSelect
(
where
)
id
=
(
result
>>
16
)
&
0xffff
# Hi word
id
=
(
result
>>
16
)
&
0xffff
# Hi word
item
=
result
&
0xffff
# Lo word
item
=
result
&
0xffff
# Lo word
if
id
==
self
.
appleid
:
if
id
==
self
.
appleid
:
if
item
==
1
:
if
item
==
1
:
EasyDialogs
.
Message
(
self
.
getabouttext
())
EasyDialogs
.
Message
(
self
.
getabouttext
())
elif
item
>
1
and
hasattr
(
Menu
,
'OpenDeskAcc'
):
elif
item
>
1
and
hasattr
(
Menu
,
'OpenDeskAcc'
):
name
=
self
.
applemenu
.
GetMenuItemText
(
item
)
name
=
self
.
applemenu
.
GetMenuItemText
(
item
)
Menu
.
OpenDeskAcc
(
name
)
Menu
.
OpenDeskAcc
(
name
)
elif
id
==
self
.
quitid
and
item
==
1
:
elif
id
==
self
.
quitid
and
item
==
1
:
if
hasattr
(
MacOS
,
'OutputSeen'
):
if
hasattr
(
MacOS
,
'OutputSeen'
):
MacOS
.
OutputSeen
()
MacOS
.
OutputSeen
()
self
.
quitting
=
1
self
.
quitting
=
1
Menu
.
HiliteMenu
(
0
)
Menu
.
HiliteMenu
(
0
)
return
return
# Anything not handled is passed to Python/SIOUX
# Anything not handled is passed to Python/SIOUX
if
hasattr
(
MacOS
,
'HandleEvent'
):
if
hasattr
(
MacOS
,
'HandleEvent'
):
MacOS
.
HandleEvent
(
event
)
MacOS
.
HandleEvent
(
event
)
else
:
else
:
print
"Unhandled event:"
,
event
print
"Unhandled event:"
,
event
def
getabouttext
(
self
):
def
getabouttext
(
self
):
return
self
.
__class__
.
__name__
return
self
.
__class__
.
__name__
def
getaboutmenutext
(
self
):
def
getaboutmenutext
(
self
):
return
"About %s
\
311
"
%
self
.
__class__
.
__name__
return
"About %s
\
311
"
%
self
.
__class__
.
__name__
class
AEServer
:
class
AEServer
:
def
__init__
(
self
):
def
__init__
(
self
):
self
.
ae_handlers
=
{}
self
.
ae_handlers
=
{}
def
installaehandler
(
self
,
classe
,
type
,
callback
):
def
installaehandler
(
self
,
classe
,
type
,
callback
):
AE
.
AEInstallEventHandler
(
classe
,
type
,
self
.
callback_wrapper
)
AE
.
AEInstallEventHandler
(
classe
,
type
,
self
.
callback_wrapper
)
self
.
ae_handlers
[(
classe
,
type
)]
=
callback
self
.
ae_handlers
[(
classe
,
type
)]
=
callback
def
close
(
self
):
def
close
(
self
):
for
classe
,
type
in
self
.
ae_handlers
.
keys
():
for
classe
,
type
in
self
.
ae_handlers
.
keys
():
AE
.
AERemoveEventHandler
(
classe
,
type
)
AE
.
AERemoveEventHandler
(
classe
,
type
)
def
callback_wrapper
(
self
,
_request
,
_reply
):
def
callback_wrapper
(
self
,
_request
,
_reply
):
_parameters
,
_attributes
=
aetools
.
unpackevent
(
_request
)
_parameters
,
_attributes
=
aetools
.
unpackevent
(
_request
)
_class
=
_attributes
[
'evcl'
].
type
_class
=
_attributes
[
'evcl'
].
type
_type
=
_attributes
[
'evid'
].
type
_type
=
_attributes
[
'evid'
].
type
if
self
.
ae_handlers
.
has_key
((
_class
,
_type
)):
if
self
.
ae_handlers
.
has_key
((
_class
,
_type
)):
_function
=
self
.
ae_handlers
[(
_class
,
_type
)]
_function
=
self
.
ae_handlers
[(
_class
,
_type
)]
elif
self
.
ae_handlers
.
has_key
((
_class
,
'****'
)):
elif
self
.
ae_handlers
.
has_key
((
_class
,
'****'
)):
_function
=
self
.
ae_handlers
[(
_class
,
'****'
)]
_function
=
self
.
ae_handlers
[(
_class
,
'****'
)]
elif
self
.
ae_handlers
.
has_key
((
'****'
,
'****'
)):
elif
self
.
ae_handlers
.
has_key
((
'****'
,
'****'
)):
_function
=
self
.
ae_handlers
[(
'****'
,
'****'
)]
_function
=
self
.
ae_handlers
[(
'****'
,
'****'
)]
else
:
else
:
raise
'Cannot happen: AE callback without handler'
,
(
_class
,
_type
)
raise
'Cannot happen: AE callback without handler'
,
(
_class
,
_type
)
# XXXX Do key-to-name mapping here
# XXXX Do key-to-name mapping here
_parameters
[
'_attributes'
]
=
_attributes
_parameters
[
'_attributes'
]
=
_attributes
_parameters
[
'_class'
]
=
_class
_parameters
[
'_class'
]
=
_class
_parameters
[
'_type'
]
=
_type
_parameters
[
'_type'
]
=
_type
if
_parameters
.
has_key
(
'----'
):
if
_parameters
.
has_key
(
'----'
):
_object
=
_parameters
[
'----'
]
_object
=
_parameters
[
'----'
]
del
_parameters
[
'----'
]
del
_parameters
[
'----'
]
# The try/except that used to be here can mask programmer errors.
# The try/except that used to be here can mask programmer errors.
# Let the program crash, the programmer can always add a **args
# Let the program crash, the programmer can always add a **args
# to the formal parameter list.
# to the formal parameter list.
rv
=
_function
(
_object
,
**
_parameters
)
rv
=
_function
(
_object
,
**
_parameters
)
else
:
else
:
#Same try/except comment as above
#Same try/except comment as above
rv
=
_function
(
**
_parameters
)
rv
=
_function
(
**
_parameters
)
if
rv
==
None
:
if
rv
==
None
:
aetools
.
packevent
(
_reply
,
{})
aetools
.
packevent
(
_reply
,
{})
else
:
else
:
aetools
.
packevent
(
_reply
,
{
'----'
:
rv
})
aetools
.
packevent
(
_reply
,
{
'----'
:
rv
})
def
code
(
x
):
def
code
(
x
):
"Convert a long int to the 4-character code it really is"
"Convert a long int to the 4-character code it really is"
s
=
''
s
=
''
for
i
in
range
(
4
):
for
i
in
range
(
4
):
x
,
c
=
divmod
(
x
,
256
)
x
,
c
=
divmod
(
x
,
256
)
s
=
chr
(
c
)
+
s
s
=
chr
(
c
)
+
s
return
s
return
s
class
_Test
(
AEServer
,
MiniApplication
):
class
_Test
(
AEServer
,
MiniApplication
):
"""Mini test application, handles required events"""
"""Mini test application, handles required events"""
def
__init__
(
self
):
def
__init__
(
self
):
MiniApplication
.
__init__
(
self
)
MiniApplication
.
__init__
(
self
)
AEServer
.
__init__
(
self
)
AEServer
.
__init__
(
self
)
self
.
installaehandler
(
'aevt'
,
'oapp'
,
self
.
open_app
)
self
.
installaehandler
(
'aevt'
,
'oapp'
,
self
.
open_app
)
self
.
installaehandler
(
'aevt'
,
'quit'
,
self
.
quit
)
self
.
installaehandler
(
'aevt'
,
'quit'
,
self
.
quit
)
self
.
installaehandler
(
'****'
,
'****'
,
self
.
other
)
self
.
installaehandler
(
'****'
,
'****'
,
self
.
other
)
self
.
mainloop
()
self
.
mainloop
()
def
quit
(
self
,
**
args
):
def
quit
(
self
,
**
args
):
self
.
_quit
()
self
.
_quit
()
def
open_app
(
self
,
**
args
):
def
open_app
(
self
,
**
args
):
pass
pass
def
other
(
self
,
_object
=
None
,
_class
=
None
,
_type
=
None
,
**
args
):
def
other
(
self
,
_object
=
None
,
_class
=
None
,
_type
=
None
,
**
args
):
print
'AppleEvent'
,
(
_class
,
_type
),
'for'
,
_object
,
'Other args:'
,
args
print
'AppleEvent'
,
(
_class
,
_type
),
'for'
,
_object
,
'Other args:'
,
args
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
_Test
()
_Test
()
Lib/plat-mac/argvemulator.py
View file @
35b50e26
...
@@ -12,103 +12,103 @@ import aetools
...
@@ -12,103 +12,103 @@ import aetools
class
ArgvCollector
:
class
ArgvCollector
:
"""A minimal FrameWork.Application-like class"""
"""A minimal FrameWork.Application-like class"""
def
__init__
(
self
):
def
__init__
(
self
):
self
.
quitting
=
0
self
.
quitting
=
0
self
.
ae_handlers
=
{}
self
.
ae_handlers
=
{}
# Remove the funny -psn_xxx_xxx argument
# Remove the funny -psn_xxx_xxx argument
if
len
(
sys
.
argv
)
>
1
and
sys
.
argv
[
1
][:
4
]
==
'-psn'
:
if
len
(
sys
.
argv
)
>
1
and
sys
.
argv
[
1
][:
4
]
==
'-psn'
:
del
sys
.
argv
[
1
]
del
sys
.
argv
[
1
]
self
.
installaehandler
(
'aevt'
,
'oapp'
,
self
.
open_app
)
self
.
installaehandler
(
'aevt'
,
'oapp'
,
self
.
open_app
)
self
.
installaehandler
(
'aevt'
,
'odoc'
,
self
.
open_file
)
self
.
installaehandler
(
'aevt'
,
'odoc'
,
self
.
open_file
)
def
installaehandler
(
self
,
classe
,
type
,
callback
):
def
installaehandler
(
self
,
classe
,
type
,
callback
):
AE
.
AEInstallEventHandler
(
classe
,
type
,
self
.
callback_wrapper
)
AE
.
AEInstallEventHandler
(
classe
,
type
,
self
.
callback_wrapper
)
self
.
ae_handlers
[(
classe
,
type
)]
=
callback
self
.
ae_handlers
[(
classe
,
type
)]
=
callback
def
close
(
self
):
def
close
(
self
):
for
classe
,
type
in
self
.
ae_handlers
.
keys
():
for
classe
,
type
in
self
.
ae_handlers
.
keys
():
AE
.
AERemoveEventHandler
(
classe
,
type
)
AE
.
AERemoveEventHandler
(
classe
,
type
)
def
mainloop
(
self
,
mask
=
highLevelEventMask
,
timeout
=
1
*
60
):
def
mainloop
(
self
,
mask
=
highLevelEventMask
,
timeout
=
1
*
60
):
stoptime
=
Evt
.
TickCount
()
+
timeout
stoptime
=
Evt
.
TickCount
()
+
timeout
while
not
self
.
quitting
and
Evt
.
TickCount
()
<
stoptime
:
while
not
self
.
quitting
and
Evt
.
TickCount
()
<
stoptime
:
self
.
dooneevent
(
mask
,
timeout
)
self
.
dooneevent
(
mask
,
timeout
)
self
.
close
()
self
.
close
()
def
_quit
(
self
):
def
_quit
(
self
):
self
.
quitting
=
1
self
.
quitting
=
1
def
dooneevent
(
self
,
mask
=
highLevelEventMask
,
timeout
=
1
*
60
):
def
dooneevent
(
self
,
mask
=
highLevelEventMask
,
timeout
=
1
*
60
):
got
,
event
=
Evt
.
WaitNextEvent
(
mask
,
timeout
)
got
,
event
=
Evt
.
WaitNextEvent
(
mask
,
timeout
)
if
got
:
if
got
:
self
.
lowlevelhandler
(
event
)
self
.
lowlevelhandler
(
event
)
def
lowlevelhandler
(
self
,
event
):
def
lowlevelhandler
(
self
,
event
):
what
,
message
,
when
,
where
,
modifiers
=
event
what
,
message
,
when
,
where
,
modifiers
=
event
h
,
v
=
where
h
,
v
=
where
if
what
==
kHighLevelEvent
:
if
what
==
kHighLevelEvent
:
try
:
try
:
AE
.
AEProcessAppleEvent
(
event
)
AE
.
AEProcessAppleEvent
(
event
)
except
AE
.
Error
,
err
:
except
AE
.
Error
,
err
:
msg
=
"High Level Event: %s %s"
%
\
msg
=
"High Level Event: %s %s"
%
\
(
`hex(message)`
,
`hex(h | (v<<16))`
)
(
`hex(message)`
,
`hex(h | (v<<16))`
)
print
'AE error: '
,
err
print
'AE error: '
,
err
print
'in'
,
msg
print
'in'
,
msg
traceback
.
print_exc
()
traceback
.
print_exc
()
return
return
else
:
else
:
print
"Unhandled event:"
,
event
print
"Unhandled event:"
,
event
def
callback_wrapper
(
self
,
_request
,
_reply
):
def
callback_wrapper
(
self
,
_request
,
_reply
):
_parameters
,
_attributes
=
aetools
.
unpackevent
(
_request
)
_parameters
,
_attributes
=
aetools
.
unpackevent
(
_request
)
_class
=
_attributes
[
'evcl'
].
type
_class
=
_attributes
[
'evcl'
].
type
_type
=
_attributes
[
'evid'
].
type
_type
=
_attributes
[
'evid'
].
type
if
self
.
ae_handlers
.
has_key
((
_class
,
_type
)):
if
self
.
ae_handlers
.
has_key
((
_class
,
_type
)):
_function
=
self
.
ae_handlers
[(
_class
,
_type
)]
_function
=
self
.
ae_handlers
[(
_class
,
_type
)]
elif
self
.
ae_handlers
.
has_key
((
_class
,
'****'
)):
elif
self
.
ae_handlers
.
has_key
((
_class
,
'****'
)):
_function
=
self
.
ae_handlers
[(
_class
,
'****'
)]
_function
=
self
.
ae_handlers
[(
_class
,
'****'
)]
elif
self
.
ae_handlers
.
has_key
((
'****'
,
'****'
)):
elif
self
.
ae_handlers
.
has_key
((
'****'
,
'****'
)):
_function
=
self
.
ae_handlers
[(
'****'
,
'****'
)]
_function
=
self
.
ae_handlers
[(
'****'
,
'****'
)]
else
:
else
:
raise
'Cannot happen: AE callback without handler'
,
(
_class
,
_type
)
raise
'Cannot happen: AE callback without handler'
,
(
_class
,
_type
)
# XXXX Do key-to-name mapping here
# XXXX Do key-to-name mapping here
_parameters
[
'_attributes'
]
=
_attributes
_parameters
[
'_attributes'
]
=
_attributes
_parameters
[
'_class'
]
=
_class
_parameters
[
'_class'
]
=
_class
_parameters
[
'_type'
]
=
_type
_parameters
[
'_type'
]
=
_type
if
_parameters
.
has_key
(
'----'
):
if
_parameters
.
has_key
(
'----'
):
_object
=
_parameters
[
'----'
]
_object
=
_parameters
[
'----'
]
del
_parameters
[
'----'
]
del
_parameters
[
'----'
]
# The try/except that used to be here can mask programmer errors.
# The try/except that used to be here can mask programmer errors.
# Let the program crash, the programmer can always add a **args
# Let the program crash, the programmer can always add a **args
# to the formal parameter list.
# to the formal parameter list.
rv
=
_function
(
_object
,
**
_parameters
)
rv
=
_function
(
_object
,
**
_parameters
)
else
:
else
:
#Same try/except comment as above
#Same try/except comment as above
rv
=
_function
(
**
_parameters
)
rv
=
_function
(
**
_parameters
)
if
rv
==
None
:
if
rv
==
None
:
aetools
.
packevent
(
_reply
,
{})
aetools
.
packevent
(
_reply
,
{})
else
:
else
:
aetools
.
packevent
(
_reply
,
{
'----'
:
rv
})
aetools
.
packevent
(
_reply
,
{
'----'
:
rv
})
def
open_app
(
self
,
**
args
):
def
open_app
(
self
,
**
args
):
self
.
_quit
()
self
.
_quit
()
def
open_file
(
self
,
_object
=
None
,
**
args
):
def
open_file
(
self
,
_object
=
None
,
**
args
):
for
alias
in
_object
:
for
alias
in
_object
:
fsr
=
alias
.
FSResolveAlias
(
None
)[
0
]
fsr
=
alias
.
FSResolveAlias
(
None
)[
0
]
pathname
=
fsr
.
as_pathname
()
pathname
=
fsr
.
as_pathname
()
sys
.
argv
.
append
(
pathname
)
sys
.
argv
.
append
(
pathname
)
self
.
_quit
()
self
.
_quit
()
def
other
(
self
,
_object
=
None
,
_class
=
None
,
_type
=
None
,
**
args
):
def
other
(
self
,
_object
=
None
,
_class
=
None
,
_type
=
None
,
**
args
):
print
'Ignore AppleEvent'
,
(
_class
,
_type
),
'for'
,
_object
,
'Other args:'
,
args
print
'Ignore AppleEvent'
,
(
_class
,
_type
),
'for'
,
_object
,
'Other args:'
,
args
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
ArgvCollector
().
mainloop
()
ArgvCollector
().
mainloop
()
print
"sys.argv="
,
sys
.
argv
print
"sys.argv="
,
sys
.
argv
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment