📄 frame.tpl
字号:
REM Frame for OplER1
INCLUDE "Const.oph"
INCLUDE "system.oxh"
INCLUDE "Toolbar.oph"
REM For convience sake, frame.tph is included inline:
REM INCLUDE "frame.tph"
REM Must get a real Uid from Symbian sometime!
CONST KUidFrame& = &153112B5
CONST KApprsc$ = ".rsc"
CONST KAppEng$ = "Frame"
CONST KAppName$ = "Frame"
REM CONST KRSCroot$ = "Frame"
CONST KAppdir$ = "\system\apps\frame\"
CONST KAppini$ = ".ini"
CONST KApphlp$ = ".hlp"
REM Events
CONST KCSystemEvent%=0
CONST KCUserEvent%=1
REM Menu unassigned options.
CONST KCMenuNoKey1%=1
REM For OpenINIFile%:
REM CONST KCRead%=1
REM CONST KCWrite%=2
REM Debug values
REM Debug window rank.
CONST KCDebugTopRank%=2
REM Color stuff.
CONST kColorMode%=5
REM End of frame.tph inline inclusion.
CONST KReadMode%=0
CONST KWriteMode%=1
CONST KOplAlignment%=1 rem 0 for lbc1, 1 for LBC2.
CONST KUnicodeCharLen%=2 rem 1 for ASCII, 2 for Unicode machines.
REM 7Sep98 Added pointerfilter.
DECLARE EXTERNAL
EXTERNAL Frame:
EXTERNAL FrameMain:
EXTERNAL GetEv%:
EXTERNAL MoveCur%:(akey%,aKeyMod%)
EXTERNAL HandAct%:(aCmd$)
EXTERNAL NewFile:(aEventType%)
EXTERNAL OpenFile:(aEventType%)
EXTERNAL GetName%:(aTitle$,aType%)
EXTERNAL Revert:
EXTERNAL Init:
EXTERNAL Read_Ini:
EXTERNAL ReadINIRec$:(aDefaultValue$)
EXTERNAL Write_Ini:
EXTERNAL WriteINIRec%:(aDefaultValue$)
EXTERNAL OpenINIFile%:(aAppUid&,aMode%)
EXTERNAL GetLang:
EXTERNAL InitTBar:
EXTERNAL InitTopTbar:
EXTERNAL StatVis:
EXTERNAL initStat:
EXTERNAL TopToolVis:
EXTERNAL Help:
EXTERNAL KillHelp:
EXTERNAL WhereIs$:(aPath$)
EXTERNAL UpdateTBarTitle:
EXTERNAL InitScr:
EXTERNAL Pref:
EXTERNAL DebugPref:
EXTERNAL PointerFilterPref:
EXTERNAL Save:
EXTERNAL SaveAs:
EXTERNAL LowSave:(aName$,aInformF%)
EXTERNAL LowLoad%:(aName$)
EXTERNAL CmdE%:
EXTERNAL CmdA%:
EXTERNAL CmdC:
EXTERNAL CmdTBDownP%:
EXTERNAL ToolVis:
EXTERNAL DemoA:
EXTERNAL DemoC:
EXTERNAL DoSomething:
EXTERNAL SelectAll:
EXTERNAL About:
EXTERNAL Copy:
EXTERNAL Delete:
EXTERNAL Export:
EXTERNAL MergeIn:
EXTERNAL Print:
EXTERNAL PrintSetup:
EXTERNAL PageSetup:
EXTERNAL Paste:
EXTERNAL PrintPreview:
EXTERNAL Cut:
EXTERNAL Redo:
EXTERNAL Undo:
EXTERNAL CutPaste:
EXTERNAL IrTrans:
EXTERNAL ZoomIn:
EXTERNAL ZoomOut:
EXTERNAL Color:
EXTERNAL Setcolor:(aR%,aG%,aB%)
CONST NYI$ = " Not yet implemented"
APP Frame, KUidFrame&
ICON "frameIcon.mbm"
ICON "frameIconMask.mbm"
CAPTION KAppName$, KLangEnglish%
FLAGS 1
ENDA
PROC Frame:
GLOBAL gScrHt%, gScrWid%
gScrWid% = gWIDTH
gScrHt% = gHEIGHT
REM Enable the receipt of machine switch-on events
SETFLAGS KSendSwitchOnMessage&
REM Maybe disable this in future?
Getlang:
LOADM "Z:\System\Opl\Toolbar.opo"
TBarLink:("FrameMain")
dINIT "Abnormal exit from TBarLink"
DIALOG
ENDP
PROC FrameMain:
EXTERNAL TbVis%
GLOBAL gFile$(255), gNFile$(255), gLUFile$(255)
GLOBAL gExit%
GLOBAL gEvent&(16)
GLOBAL gWId%
GLOBAL gHelpId&, gHStatus&
GLOBAL gINIfile$(255)
GLOBAL gDebugF%
GLOBAL gDeltaF% REM Bool flag true if a change has been made.
GLOBAL gFileDeltaF% REM Bool flag true if the file has changed since loading.
GLOBAL gTopTBVis% REM Top toolbar visible flag.
GLOBAL gStatVis% REM Status window visible.
REM Pointer Filter stuff
GLOBAL gPointerFilterF%, gPFFilter%, gPFMask%
LOCAL EventType&
LOCAL justInF%
LOCAL key%, kmod%, menu%
LOCAL menuPos%
LOCAL TBon% REM simple bool flag menu toolbar.
LOCAL TopTBon% REM Top toolbar bool flag.
LOCAL SWon% REM Status window on.
LOCAL RevertDim% REM Grey out revert in menu.
LOCAL HotF% REM Hotkey flag.
LOCAL scrDbg% REM toggle debug screen.
scrDbg%=1
justInF%=KTrue%
Init:
REM Process command line.
gNFile$ = CMD$(KCmdUsedFile%)
HandAct%:( CMD$(KCmdLetter%) )
REM the main loop.
DO
REM Check the change flag.
IF gDeltaF%
gFileDeltaF% = KTrue%
gDeltaF% = KFalse%
rem if Zoom on
rem update zoom window
rem endif
ENDIF
GetEv%:
REM In the future, this functionality will be somewhere
REM else, so calling GetEv%: will return a key press.
EventType& = gEvent&(KEvaType%)
IF gDebugF%
PRINT "FrameMain: evt="; HEX$(EventType&),
ENDIF
IF EventType&=KEvPtr&
REM PRINT "KEvPtr"
IF gEvent&(KEvAPtrType%)=KEvPtrDrag&
IF JustInF%
gAT gEvent&(KEvAPtrScreenPosX%), gEvent&(KEvAPtrScreenPosY%)
justInF%=KFalse%
ENDIF
gLINETO gEvent&(KEvAPtrScreenPosX%), gEvent&(KEvAPtrScreenPosY%)
gDeltaF%=KTrue%
ELSEIF gEvent&(KEvAPtrType%) = KEvPtrPenDown&
justInF%=KFalse%
gAT gEvent&(KEvAPtrScreenPosX%), gEvent&(KEvAPtrScreenPosY%)
gLINEBY 0,0
gDeltaF%=KTrue%
ENDIF
CONTINUE
ELSEIF EventType&=KEvPtrEnter&
REM PRINT "KEvPtrEnter&"
justInF%=KTrue%
CONTINUE
ELSEIF EventType&=KevPtrExit&
REM PRINT "KEvPtrExit&"
CONTINUE
ENDIF
REM To get this far, it must be a keypress.
key% = gEvent&(KEvaType%) REM AND $FF
kmod% = gEvent&(KEvAKMod%)
PRINT "Key=";key%, "KMod=";kmod%
REM If its the sidebar (anything other than menu...)
IF (key%>KKeySidebarMenu%) AND (key%<=KKeySidebarMenu%+4)
IF key%=KKeySidebarMenu%+1 :CutPaste:
ELSEIF key%=KKeySidebarMenu%+2 :Irtrans:
ELSEIF key%=KKeySidebarMenu%+3 :ZoomIn:
ELSEIF key%=KKeySidebarMenu%+4 :ZoomOut:
ENDIF
CONTINUE
ENDIF
HotF%=KFalse%
IF (key%<=26)
IF kMod% AND 4 REM Ctrl
HotF%=KTrue%
ENDIF
ENDIF
REM Check for Menu or hotkey.
IF ( (key%=KKeyMenu%) OR (key%=KKeySidebarMenu%) OR (HotF%=KTrue%) )
IF key%=KKeyMenu% OR key%=KKeySidebarMenu%
PRINT "MENU"
ELSE
PRINT "HOT"
ENDIF
IF ( (key%=KKeyMenu%) OR (key%=KKeySidebarMenu%) )
REM Build menu ctors.
IF TbVis% :TbOn%=$2000 :ELSE :TbOn%=0 :ENDIF
IF gTopTbVis% :TopTbOn%=$2000 :ELSE :TopTbOn%=0 :ENDIF
IF gStatVis% :SWOn%=$2000 :ELSE :SWOn%=0 :ENDIF
IF gFileDeltaF% :RevertDim%=0 :ELSE :RevertDim%=KMenuDimmed% :ENDIF
mINIT
mCASC "Printing", "Page setup"+CHR$(KEllipsis&), %U, "Print setup"+CHR$(KEllipsis&), %P, "Print preview"+CHR$(KEllipsis&), %V, "Print"+CHR$(KEllipsis&), %p
mCASC "More", "Save as"+CHR$(KEllipsis&), %S, "Save", %s, "Revert to saved", %r OR RevertDim%, "Merge in"+CHR$(KEllipsis&), %I, "Export"+CHR$(KEllipsis&), %E
mCARD "File", "Create new file"+CHR$(KEllipsis&),%n, "Open file"+CHR$(KEllipsis&), %o, "Printing>",16, "More>",-16, "Close", %e
mCARD "Edit","Undo", %z, "Redo", -%y, "Cut", %x, "Copy", %c, "Paste", -%v, "Delete all", %d, "Select all", %a
mCARD "View", "Zoom in", %m, "Zoom out", -%M, "Show toolbar",%t OR KMenuCheckBox% OR TbOn%,"Show top toolbar",%T OR KMenuCheckBox% OR TopTbOn%, "Show status window", %C OR KMenuCheckBox% OR SWOn%
mCARD "Tools", "Preferences"+CHR$(KEllipsis&), %k, "Some other stuff here", -KCMenuNokey1%, "Colour", -%u, "About", %A, "Help", %H
LOCK ON
menu%=MENU(MenuPos%)
LOCK OFF
IF menu%=0
REM Esc hit.
CONTINUE
ENDIF
key%=menu%
ELSE
REM Must be hotkey.
key% = key% - 1 + %a
IF kmod% AND 2
key% = key% + (%A - %a)
ENDIF
ENDIF
PRINT "Now key=";key%
IF key%=KCMenuNokey1% REM Unassigned menu option #1
DoSomething:
ELSEIF key%=%a :SelectAll:
ELSEIF key%=%A :About:
ELSEIF key%=%c :Copy:
ELSEIF key%=%C :StatVis:
ELSEIF key%=%d :Delete:
ELSEIF key%=%e :gExit%=KTrue%
ELSEIF key%=%E :Export:
ELSEIF key%=%H :Help:
ELSEIF key%=%I :MergeIn:
ELSEIF key%=%k :Pref:
ELSEIF key%=%m :ZoomIn:
ELSEIF key%=%M :ZoomOut:
ELSEIF key%=%n :NewFile:(KCUserEvent%)
ELSEIF key%=%o :OpenFile:(KCUserEvent%)
ELSEIF key%=%p :Print:
ELSEIF key%=%P :PrintSetup:
ELSEIF key%=%r :Revert:
ELSEIF key%=%s :Save:
ELSEIF key%=%S :SaveAs:
ELSEIF key%=%t :ToolVis:
ELSEIF key%=%T :TopToolVis:
ELSEIF key%=%u :Color:
ELSEIF key%=%U :PageSetup:
ELSEIF key%=%v :Paste:
ELSEIF key%=%V :PrintPreview:
ELSEIF key%=%x :Cut:
ELSEIF key%=%y :Redo:
ELSEIF key%=%z :Undo:
ENDIF REM End of huge if statement.
REM End of hotkey processing.
ELSEIF MoveCur%:(key%, kmod%)
ELSEIF key%=9 REM Tab
REM Toggle the debug screen.
IF scrDbg%=KCDebugTopRank%
scrDbg%=255
ELSE
scrDbg%=KCDebugTopRank%
ENDIF
gORDER 1,scrDbg%
ENDIF REM Of key pressing.
REM Can't put much here because pen actions
REM don't get down here these days...
UNTIL gExit%=KTrue%
IF gFileDeltaF% = KTrue%
Save:
ENDIF
REM Close INI etc.
Write_INI:
KillHelp:
REM If debug window is top, let me see the final
REM debug trace, otherwise exit.
IF scrDbg%=KCDebugTopRank%
PRINT "Exit."
GET
ENDIF
STOP
ENDP
PROC GetEv%:
EXTERNAL gDebugF%,gPointerFilterF%,gPFFilter%,gPFMask%
EXTERNAL gExit%,gEvent&(),gWid%,gNFile$
LOCAL type$(1)
LOCAL proF% REM Processed flag.
LOCAL EventType&
IF gDebugF%
PRINT "[";
ENDIF
IF gDebugF%
IF gPointerFilterF%
POINTERFILTER gPFFilter%, gPFMask%
ENDIF
ENDIF
WHILE gExit% = KFalse%
GETEVENT32 gEvent&()
EventType& = gEvent&( KEvaType% )
IF gDebugF%
PRINT ">";
ENDIF
REM PRINT "Event=";HEX$(EventType&),
REM Examine eventType
IF eventType& = KEvPtr&
REM For Pointer events...
proF%=TBarOffer%:(gEvent&(KEvAPtrOplWindowId%), gEvent&(KEvAPtrType%), gEvent&(KEvAPtrPositionX%), gEvent&(KEvAPtrPositionY%))
IF proF%
REM TB handled it.
ELSE
REM Pass it to our handler to check the window...
IF gDebugF%
PRINT "KEvPtr",
ENDIF
IF gEvent&(KEvAPtrOplWindowId%) = gWId%
BREAK
ENDIF
ENDIF
ELSEIF eventType& = KEvPtrEnter&
IF gDebugF%
PRINT "KEvPtrEnter",
ENDIF
IF gEvent&(KEvAPtrOplWindowId%) = gWId%
BREAK
ENDIF
ELSEIF eventType& = KEvCommand&
gNFile$ = GETCMD$
type$ = LEFT$(gNFile$,1)
gNFile$ = MID$(gNFile$,2,255)
HandAct%:( type$ )
ELSEIF eventType&=0
REM Null event.
CONTINUE
ELSEIF ( (eventType&=KEvKeyDown&) OR (eventType&=KEvKeyUp&) )
CONTINUE
ELSEIF ( (eventType& = KEvFocusGained&) OR (eventType& = KEvFocusLost&) )
IF gDebugF%
PRINT "Focus!",
ENDIF
CONTINUE
ELSEIF eventType& = KEvSwitchOn&
CONTINUE
ELSEIF (eventType& AND KKeySidebarMenu%)
REM PRINT "sidebar",
BREAK
ELSEIF (eventType& AND $400)=0
REM PRINT "event_keypress",
REM keypress.
BREAK
ELSE
PRINT "Ignored event=0x";HEX$(eventType&), EventType&,
ENDIF
ENDWH
IF gDebugF%
PRINT "]"
ENDIF
ENDP
PROC MoveCur%:(key%, kmod%)
PRINT "^",
ENDP
PROC HandAct%:(e$)
REM Process EPOC command events, using
REM the new filename to allow old one
REM to be saved etc.
REM The new name always (ends up in) gNFile$.
EXTERNAL gExit%,gNFile$,gLUFile$
LOCAL file$(255)
LOCAL command$(1)
command$ = e$
IF e$="X"
gExit% = KTrue%
RETURN
ELSEIF e$=KCmdLetterRun$
PRINT "HandAct: Info - gNFile$="; gNFile$
REM Now ignore gNFile$
file$=gLUFile$ REM GetLastUsedFile$:(KUidFrame&)
PRINT "HandAct: LU File$ is", file$
IF file$<>"" AND EXIST(file$)
gNFile$ = file$
OpenFile:(KCSystemEvent%)
RETURN
ENDIF
REM If not found, try using the command line arg.
IF EXIST( gNFile$ )
command$ = KCmdLetterOpen$
ELSE
command$ = KCmdLetterCreate$
ENDIF
REM And fall through into next bit...
ENDIF
IF command$ = KCmdLetterOpen$
OpenFile:( KCSystemEvent% )
ELSEIF command$ = KCmdLetterCreate$
NewFile:( KCSystemEvent% )
ENDIF
ENDP
PROC NewFile:( eventType% )
EXTERNAL gFile$,gWId%,gNFile$
EXTERNAL gScrWid%,gScrHt%
PRINT "NewFile:";
REM First things first. Save the old file
REM before even talking to the user.
IF gFile$ = ""
PRINT "No old file to save"
ELSE
PRINT "Saving old file ["; gFile$; "]"
IF gWId%
LowSave:( gFile$, KTrue% ) REM Let user know.
ELSE
PRINT "NewFile: no gWId to save"
ENDIF
ENDIF
IF eventType%=KCUserEvent%
PRINT "User event: get name"
IF GetName%:("Create new file",KDFileEditBox%+KDFileEditorQueryExisting%)
ELSE
RETURN
ENDIF
ELSE
PRINT "System event"
ENDIF
PRINT "["; gNFile$; "]"
IF EXIST(gNFile$)
PRINT "Created file ["; gNFile$;
PRINT "] already exists"
ENDIF
gFile$ = gNFile$
SETDOC gFile$
IF gWId%
gCLOSE gWId% :gWId%=0
ENDIF
gWId% = gCREATE(0,0, gScrWid%, gScrHt%, 1, kColorMode%)
UpdateTBarTitle:
InitScr:
REM Save it here, to match fn of Sketch.
REM This also provides something to Revert to.
LowSave:( gFile$, KFalse% ) REM Don't tell user.
REM It's safe to not tell because this new
REM file can't be very big, therefore it won't
REM take long to save!
ENDP
PROC OpenFile:(eventType%)
REM Opens the file in gNFile$, but trys to save
REM the file in gFile$ first.
EXTERNAL gFileDeltaF%,gFile$,gNFile$,gWId%
LOCAL newId%
PRINT "OpenFile:";
REM Save the current one if it needs it.
IF gFileDeltaF%=KTrue%
IF gFile$ = ""
PRINT "No old file to save"
ELSE
PRINT "Saving old file ["; gFile$; "]"
LowSave:( gFile$, KTrue% ) REM tell user.
ENDIF
ENDIF
IF eventType%=KCUserEvent%
PRINT "User event: get name"
IF GetName%:("Open file",0)
ELSE
RETURN
ENDIF
ELSE
PRINT "System event"
ENDIF
PRINT "["; gNFile$; "]"
IF NOT EXIST(gNFile$)
GIPRINT "File does not exist"
RETURN
ENDIF
REM Attempt to load it before changing names etc.
REM OK, for a second you need 2x memory for bitmaps
REM but with a 8MB machine...
REM One day, make this an option.
REM Untrusted new file.
newId% = LowLoad%:( gNFile$ )
IF newId%=0
GIPRINT "Error loading file"
ELSE
gFile$ = gNFile$
IF gWid%
gCLOSE gWId% :gWId%=0
ENDIF
gWId% = newId%
SETDOC gFile$
UpdateTBarTitle:
InitScr:
ENDIF
ENDP
PROC GetName%:(title$, type%)
EXTERNAL gNFile$
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -