antoine-source/appleworksgs/PL/Src/PMOUSE.S

1 line
8.7 KiB
ArmAsm
Executable File

load 'macros.dump'
include 'driver.equ'
include 'pl.equ'
;-----------------------------------------------
;
; Imported addresses
;
;-----------------------------------------------
IMPORT P_PIconRect
IMPORT P_IconPalette
IMPORT P_GrowRect
IMPORT P_ActionProc
IMPORT P_ContentRect
IMPORT P_CurrentWin
IMPORT P_DblPage
IMPORT P_DeselectAll
IMPORT P_DrawHandles
IMPORT P_Entry
IMPORT P_FindObject
IMPORT P_FixMenus
IMPORT P_FixRect
IMPORT P_GrewDoc
IMPORT P_HRulRect
IMPORT P_ImportHdl
IMPORT P_ImportType
IMPORT P_KillUndo
IMPORT P_Local2PL
IMPORT P_MDInTools
IMPORT P_MakeFigure
IMPORT P_MakeObj
IMPORT P_MoveGuide
IMPORT P_MoveObject
IMPORT P_MoveTabs
IMPORT P_NewGuide
IMPORT P_NewTool
IMPORT P_ObjList
IMPORT P_Page
IMPORT P_PageMode
IMPORT P_PastePt
IMPORT P_Placing
IMPORT P_PortRect
IMPORT P_ScrollPages
IMPORT P_SelectRect
IMPORT P_StretchObj
IMPORT P_ThreadDir
IMPORT P_ThreadHdl
IMPORT P_ToolType
IMPORT P_TrackCursor
IMPORT P_VRulRect
IMPORT P_VisPalette
IMPORT P_VisRuler
IMPORT T_Activate
IMPORT T_Click
IMPORT T_CurParHdl
IMPORT T_Deactivate
IMPORT T_DotObj
IMPORT T_Editing
;-----------------------------------------------
;
; Forward addresses and entries
;
;-----------------------------------------------
ENTRY P_FindTextObj
ENTRY P_MouseContent
;------------------------------------------------------------------------------
;
; P_MouseDown (Click:w,TaskRec:l,CLickPt2:l,ClickPt3:l)
;
; Click - the number of the click 1 - single click, 2 for double, 3 for triple
; TaskRec - a pointer to an Event Record for you to look at.
; ClickPt2 - the Q_Point(global) where the first click of this sequence was
;
; Single click (click=1) look at the TaskRec as before, ClickPts are undefined.
; Double click (click=2) look at the pt in the TaskRec(global) and see if it
; is D_Close enough to ClickPt2(global) to be a double click. ClickPt3 is undefin
; Triple click (click=3) check that ClickPt3 is D_Close enough to ClickPt2
; and the pt in TaskRec.
; If you don't support a type of click, or it isn't D_Close enough together
; just do the same thing you would do for single clicking
P_MouseDown PROC EXPORT
;Using P_IconData
;Using P_Data
;Using P_ObjData
;Using P_RulerData
;Using T_Data
;Using T_TextEqu
INPUT Click:w,TaskRec:l,ClickPt2:l,ClickPt3:l
LOCAL ThePt:l,tmprect:r,tmpctl:l
BEGIN +b
cpzl P_CurrentWin
jeq Exit ; Just in case
jsl P_Entry
movelong [TaskRec]:#owhere,ThePt
tool _GlobalToLocal,in=(!ThePt:l)
CkContent
tool _PtInRect,in=(!ThePt:l,#P_ContentRect:l),out=(a:w)
beq CkPages
call P_MouseContent,in=(TaskRec:l,click:w)
brl Exit
CkPages
tool _ClipRect,in=(#P_PortRect:l)
tool _PtInRect,in=(!ThePt:l,#P_PIconRect:l),out=(a:w)
beq CkTools
call P_ScrollPages,in=(ThePt+2:w)
brl SetClip
CkTools
lda P_VisPalette
beq CkControls
tool _PtInRect,in=(!ThePt:l,#P_IconPalette:l),out=(a:w)
beq CkControls
call P_MDInTools,in=(ThePt:l)
brl SetClip
CkControls
in !tmpctl:l,[TaskRec]:#owhere:l,P_CurrentWin:l
out a:w
xtool _FindControl
beq CkGrow
in [TaskRec]:#owhere:l,#P_ActionProc:l,tmpctl:l
out a:w
xtool _TrackControl
brl SetClip
CkGrow
tool _PtInRect,in=(!ThePt:l,#P_GrowRect:l),out=(a:w)
beq CkTabs
spacelong
addword #11,P_DblPage,a
asl a
asl a
asl a
asl a
asl a
pushword a
pushword #P_MinHeight
pushlong [TaskRec]:#owhere
pushlong P_CurrentWin
xtool _GrowWindow
lda 1,s
bne CleanUp
lda 3,s
bne CleanUp
pla
pla
brl SetClip
CleanUp lda 3,s
and #$FFFE ; Q_Mask odd bit off.
sta 3,s
tool _SizeWindow,in=(P_CurrentWin:l)
call P_GrewDoc,in=(P_CurrentWin:l)
brl SetClip
CkTabs
lda P_VisRuler
jeq SetClip
; Check if in tab area
moverect P_HRulRect,tmprect
moveword #10,tmprect
tool _PtInRect,in=(!ThePt:l,!tmprect:l),out=(a:w)
bne DoTabs
; Check if in tab well
moveword P_HRulRect,tmprect
moveword P_VRulRect+2,tmprect+2
movelong P_ContentRect,tmprect+4
tool _PtInRect,in=(!ThePt:l,!tmprect:l),out=(a:w)
beq CkHGuide
DoTabs
lda T_Editing
beq CkVGuide
call P_MoveTabs,in=(ThePt:l),out=(a:w)
brl SetClip
CkHGuide
tool _PtInRect,in=(!ThePt:l,#P_HRulRect:l),out=(a:w)
beq CkVGuide
call P_TrackCursor,in=(!ThePt:l)
call P_NewGuide,in=(#0:w)
brl SetClip
CkVGuide
tool _PtInRect,in=(!ThePt:l,#P_VRulRect:l),out=(a:w)
beq SetClip
call P_TrackCursor,in=(!ThePt:l)
call P_NewGuide,in=(#1:w)
SetClip
tool _ClipRect,in=(#P_ContentRect:l)
Exit
call P_FixMenus
RETURN
ENDP
;---------------------------------------------------------------------------
;
; P_MouseUp
;
P_MouseUp PROC EXPORT
input TaskRec:l
begin
return
ENDP
;--------------------------------------------------------------------------
;
; P_MouseContent (TaskRecPtr:l,Click:w)
;
P_MouseContent PROC EXPORT
;Using P_ObjData
;Using P_Data
;Using T_Data
INPUT TaskRecPtr:l,Click:w
LOCAL ObjHdl:l,ObjPtr:l,ScrPt:l,Pt:l
LOCAL ObjType:w,ModFlags:w,Q_Rect:r,Handle:w,Flag:w
BEGIN
movelong [TaskRecPtr]:#10,ScrPt
moveword [TaskRecPtr]:#14,ModFlags
tool _GlobalToLocal,in=(!ScrPt:l)
rcall P_Local2PL,in=(ScrPt:ax),out=(Pt:ax)
movelong Pt,P_PastePt
lda P_Placing
beq NotPlacing
lda P_ImportType
bne PlacePict
moveword #P_ALPHA,ObjType
bra DoPlace
PlacePict moveword #P_PICTURE,ObjType
DoPlace
call P_MakeObj,in=(ObjType:w,Pt:l,P_ImportHdl:l,#0:w)
call P_NewTool,in=(#P_ARROW:w,#0:w)
stzl P_ImportHdl
stz P_Placing
brl Exit
NotPlacing
lda P_ToolType
cmp #P_Arrow
beq DoArrow
cmp #P_Alpha
jeq DoAlpha
;-------------------------------------------------------------------------------
NewObject
call P_MakeObj,in=(P_ToolType:w,Pt:l,#0:l,#0:w)
brl Exit
;-------------------------------------------------------------------------------
DoArrow
call P_FindObject,in=(P_ObjList:l,ScrPt:l),out=(ObjHdl:l,Handle:w)
cpzl ObjHdl
bne Hit
; Check guides here
call P_MoveGuide,in=(Pt:l),out=(a:w)
bne ToExit
; Multiple selection code
call P_MakeFigure,in=(#0:w,Pt:l),out=(Q_Rect+4:l)
movelong Pt,Q_Rect
lda ModFlags
and #shiftKey
bne ShiftDown
jsl P_DeselectAll
ShiftDown
call P_SelectRect,in=(Q_Rect+4:l,Q_Rect:l)
ToExit brl Exit
Hit
lda Handle
bne InHandle
movelong [ObjHdl],ObjPtr
lda ModFlags
and #shiftKey
bne ShiftDown2
; Shift is up
moveword [ObjPtr]:#P_Selected,a
bne DoMove
jsl P_DeselectAll
call P_DrawHandles,in=(ObjPtr:l)
bra DoMove
ShiftDown2
ldy #P_Selected
moveword [ObjPtr]:y,a
eor #1
moveword a,[ObjPtr]:y
call P_DrawHandles,in=(ObjPtr:l)
moveword [ObjPtr]:#P_Selected,a
beq ToExit2
DoMove moveword #1,[ObjPtr]:#P_Selected
call P_MoveObject,in=(ObjHdl:l,Pt:l)
ToExit2 brl Exit
InHandle
cmpw Handle,#5
blt NotThread
jsl P_KillUndo
inc P_Placing
stz P_ImportType
movelong ObjHdl,P_ThreadHdl
movelong [ObjHdl],ObjPtr
movelong [ObjPtr]:#P_ParagHdl,P_ImportHdl
subword Handle,#5,P_ThreadDir
brl Exit
NotThread
jsl P_DeselectAll
call P_StretchObj,in=(ObjHdl:l,Handle:w,Pt:l,ModFlags:w)
brl Exit
;-------------------------------------------------------------------------------
DoAlpha
lda T_Editing
beq NotSame
movelong T_DotObj,ObjHdl
movelong [ObjHdl],ObjPtr
cmpw [ObjPtr]:#P_PageNo,P_Page
bne NotSame
moverect [ObjPtr]:#P_ObjRect,Q_Rect
call P_FixRect,in=(!Q_Rect:l,#P_RECTANGLE:w,P_PageMode:w,#0:w)
tool _PtInRect,in=(!Pt:l,!Q_Rect:l),out=(a:w)
bne AlphaClick
NotSame
call P_FindTextObj,in=(Pt:l),out=(ObjHdl:l)
cpzl ObjHdl
bne AlphaClick
moveword T_Editing,Flag
call T_Deactivate,in=(#1:w,#1:w)
call P_MakeObj,in=(P_ToolType:w,Pt:l,#0:l,Flag:w)
bra Exit
AlphaClick
lda P_PageMode
bne Exit
movelong [ObjHdl],ObjPtr
moveword [ObjPtr]:#P_StartParag,a
bmi Exit
cmpl [ObjPtr]:#P_ParagHdl,T_CurParHdl
bne D_Activate
call T_Click,in=(ObjHdl:l,Pt:l,ModFlags:w,Click:w)
bra Exit
D_Activate
call T_Deactivate,in=(#1:w,#1:w)
call T_Activate,in=(ObjHdl:l,Pt:l),out=(a:w)
Exit RETURN
ENDP
;------------------------------------------------------------------------------
;
; P_FindTextObj (Pt:l) : ObjHdl:l
;
P_FindTextObj PROC EXPORT
;Using P_Data
;Using P_ObjData
INPUT Pt:l
OUTPUT ObjHdl:l
LOCAL ObjPtr:l,Q_Rect:r
BEGIN
lda P_PageMode
beq NormalMode
addword Pt,P_ContentRect,Pt
addword Pt+2,P_ContentRect+2,Pt+2
NormalMode
movelong P_ObjList,ObjHdl
While cpzl ObjHdl
jeq Exit
movelong [ObjHdl],ObjPtr
moveword [ObjPtr]:#P_Deleted,a
bne TryNext
cmpw [ObjPtr]:#P_Type,#P_ALPHA
bne TryNext
moverect [ObjPtr]:#P_ObjRect,Q_Rect
call P_FixRect,in=(!Q_Rect:l,#P_RECTANGLE:w,P_PageMode:w,#0:w)
tool _PtInRect,in=(!Pt:l,!Q_Rect:l),out=(a:w)
bne Exit
movelong [ObjHdl],ObjPtr
TryNext movelong [ObjPtr]:#P_Next,ObjHdl
brl While
Exit RETURN
ENDP
END