4599 lines
120 KiB
Plaintext
4599 lines
120 KiB
Plaintext
SIBO 'C' Software Development Kit
|
||||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Version 2.11
|
|||
|
|
|
|||
|
|
|
|||
|
|
February 3, 1995
|
|||
|
|
|
|||
|
|
|
|||
|
|
(C) Copyright Psion PLC 1990-95
|
|||
|
|
|
|||
|
|
|
|||
|
|
All rights reserved. This manual and the programs referred to herein are copyrighted works of Psion PLC,
|
|||
|
|
London, England. Reproduction in whole or in part, including utilization in machines capable of
|
|||
|
|
reproduction or retrieval, without express written permission of Psion PLC, is prohibited. Reverse
|
|||
|
|
engineering is also prohibited.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The information in this document is subject to change without notice.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Psion and the Psion logo are registered trademarks, and Psion, Psion MC, Psion HC, Psion Series 3, Psion
|
|||
|
|
Series 3a amd Psion Workabout are trademarks of Psion PLC.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TopSpeed is a registered trademark of Clarion Software Corporation. Intel 8086 and 80286 are registered
|
|||
|
|
trademarks of Intel Corporation. IBM, IBM XT and IBM AT are registered trademarks of International
|
|||
|
|
Business Machines Corp. Microsoft and MS-DOS are registered trademarks of Microsoft Corporation.
|
|||
|
|
Apple and Macintosh are registered trademarks of Apple Computer Inc. VAX and VMS are registered
|
|||
|
|
trademarks of Digital Equipment Corporation. Brief is a registered trademark of Underware Inc. Psion PLC
|
|||
|
|
acknowledges that some other names referred to are registered trademarks.
|
|||
|
|
|
|||
|
|
|
|||
|
|
CONTENTS
|
|||
|
|
|
|||
|
|
|
|||
|
|
M Van CeO ue tO an seis a sccazg oS vos ca casa sanseacssiccatceases oattesostveisavdesaatesciseens tee Sctacdin ieee ES 1-1
|
|||
|
|
MISIN ADDClasSes teseic:t 9 cbasats tec cores Aad Oi cciea sth ohaals eae cect cg mee ee 1-1
|
|||
|
|
DOTA Ns 5 8222s gest GE Neots te cue, Senses ics aoa ged dees Mae he get cace anita, SOR ct 1-2
|
|||
|
|
INAMIES 5 sus ctaresranesss tsspasteesacttat scoala 2 tawileet vases tesa eee aMie et m 1-2
|
|||
|
|
Method fumetion prototypes . sccc.censiniedsccceavseasovcteeoesiasdvatdeaveee nl Oe aA cs >. 1-2
|
|||
|
|
|
|||
|
|
Tile MOP edvie- SYM x. 2202: cs, sors cyeue bndiacnaeachcoreeavees SUA weld, ote ke MN 1-2
|
|||
|
|
CTBSS eA TATE costs cys cainaageedes op uacshuesses tony es outesdena leans aa RN NM, 1-3
|
|||
|
|
GlASS METAL CW an acssseineqerbiascne ss Gverciiisanasiusesyecdc ee ac ee 1-3
|
|||
|
|
Siuichuredse ror Recovery 271... 2065 see tvssts da cdsssnd ce eestlonesiniaseteeseoteteedene: Galen cach, samtecks 1-4
|
|||
|
|
Use: of theip leave mechamisinn...5- cic) ccndssscscoecsksstetvacsccectuseatvitvessecsscaceecisatgestiasievevescs 1-4
|
|||
|
|
FPBIVIC TOMI daeg tae gaatn sscec ance uae vaesrt va acd inseie tacts aha RON ee 1-4
|
|||
|
|
|
|||
|
|
|
|||
|
|
SO OO eo
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 Brant Preview CLASSES secs neaisesonsseeosccctssenscasine yuseati cases besa satesivesestosehtisesies tina Ae 2-1
|
|||
|
|
BPE CUT GOS acs overs p tin cds toc Shar peeissst cousin 'eatedib Gattasos see Anan coun tase eae Ne oc 2-1
|
|||
|
|
Classidid gram «0... icics tects ances sxereetireicerestrstee eet oNo TTC e aT 2-2
|
|||
|
|
|
|||
|
|
TS PPRUIN TER oes feet insect ils acd docu rin de vrueha canes tery seta oot tis cc nae oe ets eo 2-2
|
|||
|
|
ELAS 5 CEPT OM 36s sasisiived Ae cosstcatans wp eagencesst AG dees Maced tcciaadesiwea orivatiene atone See 2-3
|
|||
|
|
PRODGMY cxdis cactstaas sass Phissn atau ca naceectinns es ited vpicas viaabccsiilings tla piece hag d MME es otis 2-3
|
|||
|
|
|
|||
|
|
PIE V DGG eno dS scictecc ht iatie eects gis Manes tere alee chat ce tren Beeee pace fs 2-3
|
|||
|
|
DGS TROY ida ante carta Irenaita ac tesa abet ee Mat cl tac eh to A Eh oa eh, OG 2-3
|
|||
|
|
TIWELGNS sc Sietateestczisiguse sean sayac sonicated luli a ticked ecas edithnss pdag athe amie ah oxo eRe ea a 2-3
|
|||
|
|
|
|||
|
|
BRYN UE Wide setcay oy ccutatstd tedtteiesssccsesa ee enn Mya lol Ne Gioia a ene ee eet on. 3 2-4
|
|||
|
|
PASS He Mtg ENON 35st co eta ncadeseeitrlcd vines Mecsas Shag AON AMRE ets 2-5
|
|||
|
|
ROBT eh oieta Secenh et tncasctaista ctukate cS ENG sik vaste pieat shes dotoga cei tealuieie: cone pula ng 2-6
|
|||
|
|
ESOMICES uta nec ee ee ete ann tt iettiiiae 2-10
|
|||
|
|
|
|||
|
|
TPIS V VEE Ws OV CUA aon tn chans Ove ase Se vasdistt nas cucusasac ch aod easier imcacteanvstvar tive Machen, 2-10
|
|||
|
|
WD OSOY 9 erase BRITE se oak erate es caldulet Mth ita can Lah Sayan ha le ek te St ete 2-10
|
|||
|
|
Wann ese RES Sse c2etac a at oa cetera sade cas cevadicssdenabsad Mee teats etl che clacton 2-11
|
|||
|
|
TOGA cs cnthatacwcst ist oll wages eases less, wena ta Mei lava elaohd pubs enceasan aaa es AO 2-12
|
|||
|
|
SEE GISPIAY MOE fe :caa2, Fete teciasccncisaats stop dan aves goth saa settee anes due MO ROE ke 2-12
|
|||
|
|
PAVED MTS a sass ah aan eua les taal cae abavaittandinetAosaete cata saeuennrenican mavcsooce ith cite aeeics 2-12
|
|||
|
|
COMPpleMOn Cal DACK: occa jcsdvusns-cishsesseaeayieoneodivins nanan sie aaumncanlas Sc ilecieso state 2-14
|
|||
|
|
CoOninpletroni:c all DAC 2.65 cata ncn-se-ecgst cogent pyseed sonata si avdovpactseestecustuation at actibeacssale hes 2-15
|
|||
|
|
MiG Geman S:5728. 6 Stata oaise Nata es OI i eco ee eth Mae Pe ete a 2-15
|
|||
|
|
MOVE TODA vcev certs cecasts Gist dint orks hateraua oa obtain Bias tdi Gnas dan teed amieade ee eae 2-15
|
|||
|
|
Tine oy fees wes. pees tpesnatesasr vacate catego tastier, Slabs echo sheteetatiaiad SR eam sco otis! 2-15
|
|||
|
|
|
|||
|
|
RS VAINE Ostet nese ac so aad a OT a asuhsbat oud oa ee ie ta ce oe een 2-16
|
|||
|
|
TASS GEMMA OM rates vis Haste sat on dstah oes ctec ceacna hance adel aaah oa teh teak 2-16
|
|||
|
|
TOP GIy eM sere cardiandclabinttidnatharwntieae we eai cuca ada Ravinia eA ein CER, DARA 2-17
|
|||
|
|
WRESO MICO Sin aScrascreeecesce dite ve pctasates vy tail cas eae eater ae tatiana eV: 2-17
|
|||
|
|
|
|||
|
|
RW DINE O iC BO sas inch Best tuebts casesaiancauva ioe ao decteaiviatiloalown taba sco aes tacengee 2-17
|
|||
|
|
1 Ly) C DES aren y A oN ean RPE ND EOE OO rte ERR RED Anas aaa 2-17
|
|||
|
|
DOUUIMDER OF PARES sa: erat crscatce leacivocnatsravcioer Denso vidas tawdddnslaeseotatkoon ec ookeosnacde atdes 2-17
|
|||
|
|
DNA W ie, cress scan ek Mts MEAT, Muiiabe gee vii sc oe ta et ne maa 2-17
|
|||
|
|
|
|||
|
|
|
|||
|
|
CEVASS se TIME ON cata tts os Mana ben aragthGoindicls luo dessMndsleniessased adenec' ei, We ee gk oer 2-19
|
|||
|
|
PMO PUL cose estat: d2s hu panies ed cupetoenee pesevte vise testnasicedce sant ccxah sees’ cea ae aa 2-19
|
|||
|
|
BROLIN CES 5c cs races auasatgeiaussrs isan acacidet mncsrauvittalaacat toa emia ae ae ee 2-19
|
|||
|
|
PRY PAGE re MOds izle 2 bic cetenesd, At teacd cde UB aa eaeTks vecige nari eee helenae 2-20
|
|||
|
|
MNO TANG EE Ws Siesta te tees ache th ce EN Peres iti io ee a Serre Leesa NEDEIR Sj oatrh 2-20
|
|||
|
|
Ma Week sscessevaisittd tee ine peas intense eGcieeatent a Mh a een ee Re Re eta 2-20
|
|||
|
|
PROMI S Gots si cseeho Meche tacraasetes canadtyaaulscees nadeasaat halted cabs ae adocsisnc ee le Peaks 2-21
|
|||
|
|
PUTA LIN Seca cs ccs ie cast wig cpdcanbsean ee a eitaa ab atactase ie css nenassd hese Rude heist ananete 2-21
|
|||
|
|
RVC OMIM 4 sucess cesessuniy puashaclultee ts ite was aasete statue tans Rlgettee repceatne ala wsia cas wy, uate 2-21
|
|||
|
|
Ae TSS yA CHIMAENONE dc ccc tesa cides a osece ah das Oavncl otis viandrascaus meee each ee edhe. Deed 2-22
|
|||
|
|
PU OI Scrat cs Ua vianntencl aida hh ae GAC atigets on ot Sees Mua cchins tact stasuese meals 2-22
|
|||
|
|
FPSO COS enuf wwszrns Mo buvanuacens Pics sts We azas neuicna tenant sees aa ep can ee 2-22
|
|||
|
|
PRY COMM Methods 2 tannins Aamo atid nese cea uti esata 2-22
|
|||
|
|
Ta pet LIS 6 25 scarce soe: castndaess ende var tae Soceses sei rsniienlnidinchceseed deem: Oe ok ee ee 2-22
|
|||
|
|
GL MGM EMD LENE 22h caida loca savant sins vores waclvcssaate eesti adatercied meee. 2-22
|
|||
|
|
ERIE OPPMCAUOM 9g soya sets ccttcskatteetes attiss edd ads heal oe ee ss 2-23
|
|||
|
|
IPA ses sak Bi hiantea cai nap cans hoe bugiasstityase vedas ce ayers krack oe OI eM fe OR 2-23
|
|||
|
|
MOG BLE MAR SANS 5s Soveiyb ts siecose ice ywlgssayegiahyacasvencescaTsanaviiotsa lac ckvs ciel SR oes 2-23
|
|||
|
|
Launch Preview options dialog ............cessscsssssssesesssssssssessecssesesesssessesesucsessssesssecscseasans 2-23
|
|||
|
|
Launch Jumip to. page lala sc. aiesos2dcass: doAaiasasnlus tavensreotpaaseaavane@ccost tatecteesa ns 2-23
|
|||
|
|
ERIDPMIME PLEVIEW sncceh et ieestc ctor esate anal Gotti tease os sentence akc lars 2-24
|
|||
|
|
PR VOR TIOINS TOG ics cas couse bspeshaet sta sign telecastaxcRiaresasadsiatdh dist os desae eee ROO teers 2-24
|
|||
|
|
TASS GE LIM EMOM cts s5, dese x vacua loc ecoacuseonavteSea cvedtaecds cui vaoahne ecgetices A Peecvede nas esecee, , b 2-24
|
|||
|
|
PL ODOREY Seccrscsaiee hiserbscpssbcvon tr tases arstaslavertvsonlecous seeing basmeianee tent ie Gawain a 2-25
|
|||
|
|
FR SOUE COS cae saccneit canes rst re eggs nat are sassy. <t-esgics sn facuessanconseatasclssdeapsitvsk are ae Oe 2-25
|
|||
|
|
PRVORTIONS: DEG mretnOds:. i ssc.is 26 Shieh canst eaenetesan in aatacetae et ius 2-25
|
|||
|
|
ID Yrarnic ally ANITA MSE sets. ccicsadirsec aden aeds aust eotsaioieh et eae ket eee ehaes 2-25
|
|||
|
|
TAN GIG Key WAU is ccas oc eivciascacatsta yh iaiee x scsavhctateNerauiivaviens bed aceerareae adore te eee. 2-25
|
|||
|
|
EY TONE SUES fo ecpedesabsttvatec ee scaeis caer eaten ear aarateed, solccieie e Aceot caeite acthc 2-26
|
|||
|
|
CRASS AG PAINTED css er eea dca as tvac esky teaas ye sas alee sass wre duct twet cues ie twee Re ors Manes 2-26
|
|||
|
|
PROP RUEY <ccaustshd Gators tease evs ia suablanssn Stele 85h ivnerna fcainateeatbedagieeests tice keene Mt aie 2-26
|
|||
|
|
PRES OUNCES 4.02 aeciia nist dopants taster int cater, cainrs aia tanusaics Sattar Ca ivaashvetign Semen a8 2-27
|
|||
|
|
PROV JIMIP aI 1SG Meth OGS asi ciias hretvesninas a ade dete oluind tee sen Sidharth eb 2-27
|
|||
|
|
Dyribraric ally Waa MSC acess puyacdtarsdechaaceseuscutziianien- dacisbeasieacn ds aecacinadeds wiekecu Maceo 2-27
|
|||
|
|
Plan le Key iam sista laisse Gas daguetect Vent ne pieaih ees atic Dia eet pa eee tely, mao 2-27
|
|||
|
|
5, Calendar Glasses 23,202.25. aictcpinccctiastores-ueasossgesadinons nates auachtoaR tclasiithaed. vi evckodaaw el hic ee 3-]
|
|||
|
|
PTS CUPS OLS itis cain iaa delet atoasctaedsais ai taaadalesntloarncatea Wau Mteu as iedehcuad awe eetahees 3-1
|
|||
|
|
MLAS Ciaran Acsloraiee svat et Ata caves ac au Wecesleantad a grea nceialce micas mites: 3-1
|
|||
|
|
ROPING WIN eaten satis case taste reettanuataatteea tivity Reed neha a meme ) SOME 3-2
|
|||
|
|
RVASS AST UEON 9 22 ccesnacs Seed ecas evans peta stitaaddualip tiatinanids Ha eteadladoc a ate ero aot eae 3-2
|
|||
|
|
IPO POLY ces cep coeds ci iasnicev casi cataean tacit naa dus euwtusivecaateaiietanes wan ane uieh Uae ae Ae 3-2
|
|||
|
|
CAE TIVUG WIN SOS is epktsas spd ost as acs saedsn stele ucts t Rs patee desks ooh at, Deane RAE MENG ecco 3-2
|
|||
|
|
Rednaw the: calendar sisibctcscis tao: tcscctsccdss cious reluiasescsavlactugpianatenietasee vind we haces 3-2
|
|||
|
|
PTL WING 2 sacha snceuh apt ctl t icra tea tae tc cian ae Ld cca a ete See oe 3-3
|
|||
|
|
CTS She TRAIN la Ssctete Pa ceieies a Ooh ane oth es scat acetal edMievcasouctn oe Mom nla 3-4
|
|||
|
|
EEO PETRY, 525 ta cosine eahacdoch sss sane haben aista tet tu aan ad ti apheh ad dt Racal tee tn 3-4
|
|||
|
|
SAIL WIIN SEN OGS: coh actirassnanatesnupietnte ila Ai chatsacs nea Rn ee ea de 3-4
|
|||
|
|
Diestysoy thtecal etna toy isi ce sedcc ected te sovaeatacyeolinsgesoesch oe pute so oe es see 3-4
|
|||
|
|
MCIANSE the ‘ealen dat seco h atescscaticl io latsecdemeravat wtruransscnniodeleagesmaccatinst teak 3-5
|
|||
|
|
Plane a Rey ress: coisa ligt ecicgcnexsactonsaien ee ettasesgch dhdessresush iecebeneciee ten Mate ngtthak Mocc 0S 3-7
|
|||
|
|
SETS CUNO mnt Mabe S51 tas anwies oltelsucdh abu tbawdavog cisaiybin cia aise Vere aeiadiidennsd RR Mee 3-9
|
|||
|
|
BP WASIS Os fess Avegeasvices eater cstyd seasteausencoioty picts nda cal eaten immu MEMS ee wcts 3-9
|
|||
|
|
Examplescr oss Mee Aiact tit sa ak eo hte kee hy) ae Ce 3-10
|
|||
|
|
Creating. a CAL WIN Componentii.3 tue aedatesviadiea cts earn ick icudhilee abe. 3-10
|
|||
|
|
Plandlinprkeypr esses: 26 c.ieMees octet che hans ies ren essa eae ga ale 3-10
|
|||
|
|
|
|||
|
|
|
|||
|
|
or eee
|
|||
|
|
4
|
|||
|
|
|
|||
|
|
|
|||
|
|
Altoniatic Test System Classes isescdise.cc:sisscsdeavechucissinanectastioessitnuasssciacresdeincisien le hon 4-1
|
|||
|
|
PTE CUIS ODS sccrcsres Cue, Cactl any esteet esad enw Baca Sed ie eA cotta 4-1]
|
|||
|
|
NMG AI Fe ssc, eat cs Durie te orcipatctoeadsM s ttsnck OY me oe na stg 4-]
|
|||
|
|
|
|||
|
|
POLSON ee Natit A tase ha bene a betes Eat at eats (eatin Meee a le oe 4-2
|
|||
|
|
CS NaSSAEAMEOM Fe secectaccoapatort ces telat ae tohiocas a ek tel ce cen OG oe Ue ate Manee 4-2
|
|||
|
|
PLOY RC Cie ty all od nthe hati tee Le ons, Sam Ost eA ola!) seaman hans Meg 4-3
|
|||
|
|
URINE Y SIMU CLUES jedcesitint eM cals OR A oe re. ct Wee, et Ve ee als 4-3
|
|||
|
|
|
|||
|
|
POTS S Vette OS 26 2dr todays Zadenaaca dia auto chee Maca Meena ees 4-4
|
|||
|
|
EMCI ALIS iaseeeh ots os ac aceon eae Masten dial et iene ea eee ea eae 4-4
|
|||
|
|
PIOCESSra A TS ESSERE i. .cin, cee saystytetcacecapus exis voskesandssutsd tsedien @racialseivaba thee dee ace 4-4
|
|||
|
|
BY OCOSS GR ERDOR 0B sMaitti rah sti telicvasustect ct eens rctkactr aon ita cnet ape ee dette 4-6
|
|||
|
|
Bree Miter Process MieSSa Ber. 5-24 c.suis ccsiertt.teivecssovsrvnay auelss cvansdoveosaiadousica ion ces Meboacaats 4-6
|
|||
|
|
RGDONt a KEV PEESS 03 ciccicc-c cuasieecrenientas asvasrntion aiefidiereth alee noah oesttenabnecad, eee’ 4-6
|
|||
|
|
|
|||
|
|
OT SS BUI M ss Sis cttecatas Sensei segtita tt anv Me cM Ati ite on tem Gh eS eo a ie NUS 4-7
|
|||
|
|
TASS A CTUNT ON fio css dearespastanid cesta: dubale cores cocaabivyaeiioit dudwpeatslastaecd Lat ticren tu inte ton, 4-7
|
|||
|
|
PORE LUY 28-080 sap Oconee aladieales Mavcace etal st dngite tar Me al, ian iihee yee rar. 4-7
|
|||
|
|
|
|||
|
|
PT eM ane GOS Be Gite. cree ienitettba, ttre te OE son nlp as aidodsae amen iatee tol oe oes 4-7
|
|||
|
|
ANGLAIS rs eco ae aati nets ra nc te ome, Pita ace anccadle 4-7
|
|||
|
|
BIGCeSS COMPIENON 2 5: ituavact ce tesitca Mantes ue pied cd cieice -apschaas Noclon, Suatrctoriosacctyee’, 4-7
|
|||
|
|
|
|||
|
|
|
|||
|
|
5 Additional Active Object Classes
|
|||
|
|
|
|||
|
|
|
|||
|
|
ovsavensoosesessoneasentnassnssovescsasseussvosscsusssesessacnsacsarscsscocssnssccenseacescensas 5-1
|
|||
|
|
|
|||
|
|
PRCCUPSORS M ciacese conti tia ISM ates sans iatlincte dnd Untualinincide: wcslstiatnaddecgedinee 5-1
|
|||
|
|
|
|||
|
|
4. CIS LC UE Toa: eRe ear Peo na SOO RE 5-1
|
|||
|
|
|
|||
|
|
TO OTN sry con ae avis alse sk Rat consol Meets wea dea ba a al easih Sc tanta 5-2
|
|||
|
|
FASS AC MANION y oe caecesit eo uncenteren cine erased robe de eesti eq tot bea hdc eons 5-2
|
|||
|
|
TENOR eee Fa cee bac a dancer ted pau ohsghiav is OSs ob boos Homhoc 5-2
|
|||
|
|
LOGONA Methods sccraccsine faiad aps Ate cuca d basalt Ridhadedope vscllRa doedec tua eceaantameecteatle 5-2
|
|||
|
|
PGI © cease vactseechi teas S atrssreib aaa eee teas Ocak iad Maa ieg MpcStar At ean tn 5-2
|
|||
|
|
NS Be RS INES a cas wiasecaaacha sas ok ana alnencenat tee eee ea dtad ca sunnier corto tegtacsed he ache 5-3
|
|||
|
|
CANCEL TeQ US tit hais sec sctinn taei satiate, Wala dees eet os pes geno chi tgs 5-3
|
|||
|
|
Report process temmimation .c.sscssssancueveasssunchacivssevataslouessbives dseedechaeuvscacscssolccicescaccecy 5-3
|
|||
|
|
TINT OBI ree ei le acon snarls Dale Ai eckson Meche alalancleS cs Bien auton asst 8 5-3
|
|||
|
|
CASS LOMO 53 dons yodassc As caeasgsdasgend eiivececst nach caarsetuaadell ail ahid rcessia tieccae aca Mt 5-4
|
|||
|
|
|
|||
|
|
BY GPE UEY seis cits crates savcawscastavasediehccaueae eitina unit deo hlag cates IM ie ck eects iM att acne 5-4
|
|||
|
|
WIND OAD tise Od Sica ccssscseniacesteiclen abot aianh tte a Sates e Soice ola an MT 5-4
|
|||
|
|
eS) 5-4
|
|||
|
|
NOMS estas Pte ten nk salinsesctidaas ace epesanonesicasd sscesaex taki payeatesack ie tabaoudteecsdatea ts eceton sed 5-4
|
|||
|
|
PROCESS COMIPIE TION ia, cirssietd stabs aca Suadh ccstsaacsth cbcasatgnou deta hiutesaoeostss Shee devel faldatnachet 5-4
|
|||
|
|
|
|||
|
|
|
|||
|
|
CHAPTER 1
|
|||
|
|
|
|||
|
|
|
|||
|
|
INTRODUCTION
|
|||
|
|
|
|||
|
|
|
|||
|
|
This manual is a reference document for Psion's XKADD library. It provides a guide to the library and
|
|||
|
|
documents the classes, methods, properties, inheritance hierarchies and other information essential for
|
|||
|
|
understanding and using the library.
|
|||
|
|
|
|||
|
|
|
|||
|
|
It assumes familiarity with the concepts of Object Oriented Programming.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The Object Oriented Programming Guide is a useful pre-requisite as it provides the necessary background
|
|||
|
|
to Object Oriented Programming as implemented at Psion. It can, of course, be read in conjunction with the
|
|||
|
|
XADD Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The XADD library is supplied as the xadd.dy/ dynamic link library in the ROM of the Series 3a and
|
|||
|
|
Workabout machines. It is not present on Series 3 machines.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Because of their different screen sizes, the Series 3a and Workabout machines contain slightly differing
|
|||
|
|
versions of the XADD library. The only difference, however, is in the implementation of the cawin
|
|||
|
|
calendar window class. On the Series 3a , this can be set to display one, three or twelve months, but on the
|
|||
|
|
Workabout the display is restricted to a single month.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD contains classes that extend the functionality of the HWIM and FORM user interface, notably to
|
|||
|
|
provide print preview facilities.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Some classes in the XADD library are designed solely for internal use by system code and are not
|
|||
|
|
documented in this manual. The undocumented classes are:
|
|||
|
|
|
|||
|
|
|
|||
|
|
OPRINTER Implements WDR printing for OPL.
|
|||
|
|
|
|||
|
|
OHELPDLG Implements Help dialogs for OPL.
|
|||
|
|
|
|||
|
|
RUNMEMO Implements Memo editing from the Agenda application.
|
|||
|
|
|
|||
|
|
IPCSTAT Used for inter-process communicaton of status data during Memo editing.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Some of the documented XADD classes contain features that are intended only to be used by system code.
|
|||
|
|
Any feature that is not explicitly documented as being usable by application programmers should be
|
|||
|
|
considered to be for system use and should not be accessed by application code.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Using XADD classes
|
|||
|
|
|
|||
|
|
|
|||
|
|
An application (or DYL) that either subclasses or creates an instance of an XADD class must declare an
|
|||
|
|
external reference to the XADD library (and the OLIB library) in its category file. If, for example, an
|
|||
|
|
application's category file has the name myprog.cat, the content of this category file must start with the
|
|||
|
|
following lines:
|
|||
|
|
|
|||
|
|
|
|||
|
|
IMAGE myprog
|
|||
|
|
|
|||
|
|
|
|||
|
|
EXTERNAL olib
|
|||
|
|
EXTERNAL xadd
|
|||
|
|
|
|||
|
|
|
|||
|
|
This ensures that, amongst other things, the defined constants representing the external category numbers
|
|||
|
|
for the XADD and OLIB categories (in this case, caT_MyAPP_xapp and CAT_MYAPP_OLIB, respectively) are
|
|||
|
|
available to application code.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eS eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
Since the XADD library contains extensions to FORM and HWIM, it is likely that access will also be
|
|||
|
|
needed to these libraries, so the category file will also need to contain exrERNAL references to one or both
|
|||
|
|
of the FORM and HWIM libraries.
|
|||
|
|
|
|||
|
|
|
|||
|
|
In the source code of the MYPROG application, an instance of an XADD class - say, of Locona - would be
|
|||
|
|
created with p_new (or £_new) as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
p_new(CAT_MYPROG_HWIM, C_LOGONA) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
-If myprog.cat defines a subclass of an XADD class (say, the class susLocona) this would exist in the local
|
|||
|
|
category. An instance is created using the local category number caT_myproc_myprRoe, as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
P_new(CAT_MYPROG_MYPROG, C_SUBLOGONA) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Similar consideratons apply to instances created by means of £_newsend.
|
|||
|
|
|
|||
|
|
|
|||
|
|
a SS a ee ee a aaa
|
|||
|
|
Notation
|
|||
|
|
|
|||
|
|
|
|||
|
|
Names
|
|||
|
|
|
|||
|
|
|
|||
|
|
Except in class diagrams, a class name is always given in upper case, for example PRvvIEW.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method name in the title line of the description of each method is the defined symbol for the method
|
|||
|
|
number, without its leading o_. In the body of the text this name, in lower case letters, is used to refer to the
|
|||
|
|
method function (or more simply, the method) whereas the upper case name refers to the corresponding
|
|||
|
|
message. Thus, an object's destroy method is executed when the object receives a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Method function prototypes
|
|||
|
|
|
|||
|
|
|
|||
|
|
The description of each method contains a function prototype that specifies the nature of any return value
|
|||
|
|
and the parameters with which the method is called. The parameters exclude the object handle and the
|
|||
|
|
method number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
For example, a method for the class prvview with the title line:
|
|||
|
|
|
|||
|
|
|
|||
|
|
and prototyped as:
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT pvv_done (INT event) ;
|
|||
|
|
would be invoked by, for example:
|
|||
|
|
p_send3 (hand, 0_PVV_DONE, PAGES _DONE_PAGE) ;
|
|||
|
|
where hand is the handle of an object of the class in question.
|
|||
|
|
This corresponds to a method function declared in C source code as:
|
|||
|
|
|
|||
|
|
|
|||
|
|
METHOD INT prvview_pvv_done (PR_WSERV *self, INT event)
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
The © symbol
|
|||
|
|
|
|||
|
|
|
|||
|
|
The enter and leave mechanism (which uses p_enter and p_leave) is commonly used to implement
|
|||
|
|
structured error recovery. See the Error Handling and Error Recovery chapter of the Object Oriented
|
|||
|
|
Programming Guide and the Error Handling chapter of the PLIB Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Some methods (the vast majority of destroy methods, for example) can never fail and will therefore never
|
|||
|
|
call p_leave. The title line of a number of the more significant methods of this type are marked with a
|
|||
|
|
leading © symbol.
|
|||
|
|
|
|||
|
|
|
|||
|
|
With the enter and leave mechanism, a call to p_leave should only occur within the protection of a
|
|||
|
|
p_enter harness. If p_1eave is called outside a p_enter harness, the process will be panicked with panic
|
|||
|
|
number 47,
|
|||
|
|
|
|||
|
|
|
|||
|
|
The p_1leave mechanism and its use in method functions is discussed briefly in the section on Structured
|
|||
|
|
Error Recovery later in this chapter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
SSS
|
|||
|
|
1-2
|
|||
|
|
|
|||
|
|
|
|||
|
|
1 INTRODUCTION
|
|||
|
|
|
|||
|
|
|
|||
|
|
___, eee oh — Ne a aa
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class diagrams
|
|||
|
|
|
|||
|
|
|
|||
|
|
To illustrate the inheritance and using relationships between classes, most chapters will contain at least one
|
|||
|
|
class diagram.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The notation is a subset of that used by Grady Booch and described in his book Object-oriented Analysis
|
|||
|
|
and Design with applications (2nd edition) with two minor changes;
|
|||
|
|
|
|||
|
|
|
|||
|
|
e classes which are referenced, but not described, within a chapter (i.e. classes whose full
|
|||
|
|
description lies in other chapters of this manual or in a different manual), are underlined,
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ the diagrams do not distinguish between ‘has' (aggregation) and ‘using’ (client/supplier)
|
|||
|
|
relationships.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Also note that ultimate inheritance from the root class is assumed and is not shown.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class hierarchy
|
|||
|
|
|
|||
|
|
|
|||
|
|
In understanding the structure of a specific class, remember that methods and property are often inherited
|
|||
|
|
from a superclass (or superclasses).
|
|||
|
|
|
|||
|
|
|
|||
|
|
While a class may contain new methods and property, it may also re-define methods inherited from a
|
|||
|
|
superclass (or superclasses). Note that methods in a superclass can be what are known as deferred methods.
|
|||
|
|
|
|||
|
|
|
|||
|
|
To help illustrate these relationships, each class description in this manual is accompanied by a diagram
|
|||
|
|
which shows that class and its superclass(es) in hierarchical order. This diagram is placed at the beginning
|
|||
|
|
of the class description.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The diagram consists of a series of adjacent columns. The rightmost column represents the class being
|
|||
|
|
described and will be marked by a double line border while the column to its left represents its immediate
|
|||
|
|
superclass (if any) marked by a single line border and so on up the hierarchy. Each column is headed by
|
|||
|
|
the class name followed by two boxes; the first lists that class's property and the second lists its methods.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Deferred methods are separated from the preceding methods by a blank line and are printed in italics. If a
|
|||
|
|
class re-defines an inherited method, the method name in the appropriate superclass is written with a line
|
|||
|
|
through it.
|
|||
|
|
|
|||
|
|
|
|||
|
|
For example, the following diagram would be included in a description of class cccc subclassed from BBBB
|
|||
|
|
|
|||
|
|
|
|||
|
|
which itself is subclasses aaaa.
|
|||
|
|
|
|||
|
|
a ieee 4
|
|||
|
|
property 4
|
|||
|
|
property 5
|
|||
|
|
|
|||
|
|
|
|||
|
|
property _1 property _3
|
|||
|
|
property 2
|
|||
|
|
|
|||
|
|
|
|||
|
|
method_a methed—b
|
|||
|
|
methed—b methed—e
|
|||
|
|
method_d
|
|||
|
|
|
|||
|
|
|
|||
|
|
method_e
|
|||
|
|
|
|||
|
|
|
|||
|
|
In this illustration, method_a is supplied by the superclass aaaa, while method_b is replaced in class BBBB
|
|||
|
|
and further replaced in class cccc. Another method, method_c, is introduced in class pass but replaced in
|
|||
|
|
cece, and so on. Note that method_u is a deferred method.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The roor class from which all classes are derived is assumed and will not be shown in the diagrams.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Methods and property inherited from a superclass will be described in the appropriate class description.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Structured Error Recovery
|
|||
|
|
|
|||
|
|
|
|||
|
|
As mentioned earlier, the enter and leave mechanism is commonly used to implement structured error
|
|||
|
|
recovery.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Use of the p_leave mechanism
|
|||
|
|
|
|||
|
|
|
|||
|
|
In general, you should assume that all methods NOT marked with the & symbol (as discussed in the
|
|||
|
|
section on Notation) are capable of calling p_leave, even if this is not explicitly mentioned in the method
|
|||
|
|
description. In some cases, such as where a method calls, directly or indirectly, a deferred method (which is
|
|||
|
|
supplied by a subclasser) it is not possible to specify whether the method may result in p_1eave being
|
|||
|
|
called.
|
|||
|
|
|
|||
|
|
|
|||
|
|
In the event of an error (such as out of system memory) occurring a method may:
|
|||
|
|
© call p_leave, passing the (negative) error number,
|
|||
|
|
e return the error number,
|
|||
|
|
e either call p_leave or return an error number, depending on the nature of the error.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Some methods call p_leave (0), which has the effect of returning from the p_enter harness (with the
|
|||
|
|
retum value zero) without signalling an error. This is used, for example, to provide a normal exit from a
|
|||
|
|
deeply nested function call, without the need for a zero return value to be passed back through the chain of
|
|||
|
|
calls. Intermediate functions in the chain may then be declared as vorp.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Some method functions that may call p_leave are declared as vorp. One reason for this may be that the
|
|||
|
|
method forms part of a chain, as described in the preceding paragraph. If user code were to send such a
|
|||
|
|
message within a p_enter harness, the value returned from p_enter would be indeterminate if no error
|
|||
|
|
arose. The solution is to construct a shell function which sends the message and then returns zero, and call
|
|||
|
|
this shell within a p_enter harness. The call to p_enter will then return either zero (if the method calls
|
|||
|
|
p_leave(0) or it executes to completion) or a negative error number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Panic numbers
|
|||
|
|
|
|||
|
|
|
|||
|
|
See the Error Handling and Error Recovery chapter of the Object Oriented Programming Guide and the
|
|||
|
|
Error Handling chapter of the PLIB Reference manual for a discussion of panics and panic numbers.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD does not have its own unique panic numbers, but panics a client that attempts an illegal operation
|
|||
|
|
using PLIB, OLIB and Window Server panic numbers, defined in the respective SDK manuals.
|
|||
|
|
|
|||
|
|
|
|||
|
|
CHAPTER 2
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
The classes described in this chapter are as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
the xPRINTER Class which provides the basic framework for both printing and print preview
|
|||
|
|
operations. The xpRINTER class must be subclassed to be useful.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the pRvview class which implements print preview operations. A PRVvIEw object is used as a
|
|||
|
|
component by the xprintER class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the prvinro class which implements an information window indicating the number of pages being
|
|||
|
|
print previewed. A prvINFo object is used as a component by the prvvzew class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the prvpace class which decompresses a page image stored in an external memory segment and
|
|||
|
|
then draws the page image in a print preview window. Multiple prvpace objects are used as
|
|||
|
|
components by the prvvrew class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the pRvcomm class which provides the print preview command manager. The print preview
|
|||
|
|
command manager is installed by the prvvzew class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the PRvopTIons_puc class which implements the Preview options dialog: this allows the user to
|
|||
|
|
select the number of pages displayed during the print preview operation. A Preview options dialog
|
|||
|
|
is used by the prvcomm class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the prvsumPp_puc class which implements the Jump to page dialog: this allows the user to select
|
|||
|
|
the first page displayed on screen during the print preview operation. A Jump to page dialog is
|
|||
|
|
used by the prvcomm class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note that an application would normally only create an instance of the xPRInTER class (and perhaps
|
|||
|
|
exceptionally, of the prvvzew class): the other component classes are intimately associated with the
|
|||
|
|
PRVVIEW Class and are thus not expected to be either directly instanced or subclassed.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Precursors
|
|||
|
|
|
|||
|
|
|
|||
|
|
Familiarity with the following topics will aid the understanding of this chapter:
|
|||
|
|
|
|||
|
|
|
|||
|
|
the LPRinTER Class described in the Print Classes chapter of the HWIM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the paces class described in the Document Printing Classes chapter of the FORM Reference
|
|||
|
|
manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the pRvppr class described in the Print Preview Class chapter of the FORM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the pi¢sox class described in the Dialog Boxes chapter of the HWIM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class diagram
|
|||
|
|
|
|||
|
|
|
|||
|
|
: rvoptions’
|
|||
|
|
dig: Ce pcdigics uf
|
|||
|
|
|
|||
|
|
|
|||
|
|
oe Pees ae oe pod, i eal!
|
|||
|
|
a — xprinter ; ¥, peeomin: ake a
|
|||
|
|
|
|||
|
|
|
|||
|
|
XPRINTER
|
|||
|
|
|
|||
|
|
|
|||
|
|
defer
|
|||
|
|
wtab
|
|||
|
|
lheight
|
|||
|
|
width
|
|||
|
|
subsqind
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
lpr_init
|
|||
|
|
lpr_read
|
|||
|
|
lpr_sense_buf_width
|
|||
|
|
lpr_sense_text
|
|||
|
|
|
|||
|
|
|
|||
|
|
The xpRInTER Class provides the basic framework that allows an application to perform both printing and
|
|||
|
|
print preview operations using the services provided by the prrwrer and paces classes.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The xpRINTER Class provides a deferred method - the 1pr_sense_text method - which is supplied as a call-
|
|||
|
|
back to the pacgs active object: this method must be replaced so that it obtains the next fragment of text to
|
|||
|
|
print.
|
|||
|
|
|
|||
|
|
|
|||
|
|
For further details of printing see the prinTer class in the Print Classes chapter of the HWIM Reference
|
|||
|
|
manual and the Printing chapter in the Object Oriented Programming manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
ee ENINT PREVIEW CLASSES |
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file xprinter.cl (generated header file xprinter.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS xprinter lprinter
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE destroy
|
|||
|
|
REPLACE lpr_init
|
|||
|
|
PROPERTY
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
WORD locked;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
|
|||
|
|
xprinter.locked TRUE if an extra level of locking has been added to the application by tbe xPRINTER
|
|||
|
|
object, otherwise raLse.
|
|||
|
|
|
|||
|
|
|
|||
|
|
eae Se a ee eee
|
|||
|
|
XPRINTER methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
Destroy
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID destroy (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Destroy the xPRINTER object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If xprinter . locked is non-zero, removes one level of locking by sending a ws_Lock message to w_ws with
|
|||
|
|
an argument of FALSE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Supersends a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID lpr_init (INT commid) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise the xPRINTER component and, if commid is zero, start a printing operation, otherwise start a print
|
|||
|
|
preview operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If commid is zero, adds a level of locking by sending a ws_Locx message to w_ws with an argument of TRUE
|
|||
|
|
and then writing TRUE to xprinter. locked.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Either starts a printing operation, or initialises a print preview operation, by writing commid to
|
|||
|
|
lprinter.subsqind and then supersending an LPR_INIT message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If commid is zero, returns.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise creates an instance of the prvvrew class and initialises the pRvvrew object by sending a pvv_init
|
|||
|
|
message with an argument of self, commid and the address of iprinter. pages:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ the se1f argument specifies that the 1pr_read call-back method required by the pacEs active
|
|||
|
|
object is to be supplied by the xPrrnTER object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
® the commid argument should specify the method number of a print method in the current
|
|||
|
|
application manager.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the address of 1printer. pages is supplied so that it may receive the handle of the paces active
|
|||
|
|
object which is handling the print preview.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVVIEW
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_calc_position
|
|||
|
|
wn_connect
|
|||
|
|
wn_dodraw
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn—-sense—heip
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
pPages
|
|||
|
|
pPrviInfo
|
|||
|
|
pPageView
|
|||
|
|
pOldMenu
|
|||
|
|
pOldComman
|
|||
|
|
Started
|
|||
|
|
PrintMethod
|
|||
|
|
hdone
|
|||
|
|
|
|||
|
|
mdone
|
|||
|
|
NoPageViews
|
|||
|
|
MaxNoPageViews
|
|||
|
|
ScrollArea
|
|||
|
|
Pv
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
wn_key
|
|||
|
|
wn_draw
|
|||
|
|
wn_set
|
|||
|
|
wn_init
|
|||
|
|
wn_sense_help
|
|||
|
|
pvv_done
|
|||
|
|
pvv_pages_done
|
|||
|
|
pvv_new_page
|
|||
|
|
pvv_Margins
|
|||
|
|
pvv_init
|
|||
|
|
pvv_false
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvview class supports the print preview of one or more pages in a document. An example print
|
|||
|
|
|
|||
|
|
|
|||
|
|
preview display is shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
The number of pages that may be displayed is determined by the dimensions of the screen up to a limit of
|
|||
|
|
PVV_MAX_PAGEVIEWwS. The page images are drawn to the screen by an array of PRVPAGE components.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The text in the top left of the screen is an information window that indicates the number of pages in the
|
|||
|
|
preview range. This information window is provided by a prvINFo component.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The print preview is carried out by means of paces and prvepr objects. These treat the pages as a sequence
|
|||
|
|
of fragments or print elements each of which contains no more than one line of text.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The print elements are passed to the paces object by means of a so-called read-call-back: when the pacEs
|
|||
|
|
object requires the next print element it sends an LPR_READ message to the supplier object. The handle of
|
|||
|
|
the supplier object is passed to the paces object on initialisation and in turn must be passed to the PRVVIEW
|
|||
|
|
object on its initialisation. This object is usually an instance of an xpRINTER subclass.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvview object is notified by the paces object of the completion of each stage of the print preview by
|
|||
|
|
means of a so-called completion call-back: when the next stage is complete the pacss object simply sends a
|
|||
|
|
|
|||
|
|
|
|||
|
|
2-4
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
RIN PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_PAGES_DONE message to the prvvrEw object. This message is only significant when the preview is
|
|||
|
|
about to terminate.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvvrew object is also notified by the prvppr object of the completion of each stage of the print
|
|||
|
|
preview by means of a completion call-back: when the next stage is complete the PRvPDR object simply
|
|||
|
|
sends pvv_DONE messages to the pRvvrew object. In this case the message updates the page count and then
|
|||
|
|
updates the display to include any newly created page image.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The paces class is described in the Document Printing Classes chapter of the FORM Reference manual.
|
|||
|
|
The prvppr class is described in the Print Preview Class chapter of the FORM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
It is assumed that the global variable patcate specifies the handle of an instance of the cars class. In the
|
|||
|
|
description of the methods this cars instance is simply referred to as the caTz object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
It is also assumed that w->am.appman.spare1 contains the handle of an instance of the printer class: the
|
|||
|
|
PRINTER Class automatically writes its handle to w->am. appman. spare1 on initialisation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prev.cl (generated header file prev.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS prvview digchain
|
|||
|
|
{
|
|||
|
|
REPLACE destroy
|
|||
|
|
REPLACE wn_key
|
|||
|
|
REPLACE wn_draw
|
|||
|
|
REPLACE wn_set
|
|||
|
|
REPLACE wn_init
|
|||
|
|
REPLACE wn_sense_help
|
|||
|
|
ADD pvv_done
|
|||
|
|
ADD pvv_pages_done
|
|||
|
|
ADD pvv_new_page
|
|||
|
|
ADD pvv_margins
|
|||
|
|
ADD pvv_init
|
|||
|
|
ADD pvv_false=p_ false
|
|||
|
|
|
|||
|
|
|
|||
|
|
CONSTANTS
|
|||
|
|
{
|
|||
|
|
PVV_INTERPAGE_GAP 6
|
|||
|
|
PVV_TOP_GAP 4
|
|||
|
|
PVV_FOOTER_GAP 12
|
|||
|
|
PVV_PAGE_SHADOW 1
|
|||
|
|
PVV_SIDE_GAP 12
|
|||
|
|
PVV_PAGENO_DISP GAP 60
|
|||
|
|
PVV_DISP_FACING 0
|
|||
|
|
PVV_DISP1 1
|
|||
|
|
PVV_DISP2 2
|
|||
|
|
PVV_DISP3 3
|
|||
|
|
PVV_DISP4 4
|
|||
|
|
PVV_MARGINS_ON 0x01
|
|||
|
|
PVV_PREVIEW_SET 0x80
|
|||
|
|
PVV_VIEW_MAX PAGEVIEWS 4
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
—— ee SSSSSSSSSSSSSsSssssssSSSSSSSsssssssssesssesee
|
|||
|
|
|
|||
|
|
|
|||
|
|
TYPES
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
PAGES_CALLS Calls;
|
|||
|
|
WORD PrintMethod;
|
|||
|
|
WORD Sparel;
|
|||
|
|
WORD Spare2;
|
|||
|
|
} IN_PRVVIEW;
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
P_RECT Margins; Margin area
|
|||
|
|
|
|||
|
|
INT HeadTop;
|
|||
|
|
|
|||
|
|
INT HeadBot;
|
|||
|
|
|
|||
|
|
P_RECT Border; area in which to draw greeked page
|
|||
|
|
P_RECT Footer; area in which to print page number
|
|||
|
|
|
|||
|
|
|
|||
|
|
} PVV_PAGE_DATA;
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
PR_ROOT *pArray; varray containing page index into preview segment
|
|||
|
|
|
|||
|
|
INT NoPages; number of pages (so far)
|
|||
|
|
|
|||
|
|
INT FirstPage; zero for FACING PAGES, one otherwise
|
|||
|
|
|
|||
|
|
INT LastPage; =NoPages if not FACING _PAGES, or rounded up to odd number
|
|||
|
|
INT PageOffset; page number of first page displayed
|
|||
|
|
|
|||
|
|
INT PageNo; current page no
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_DISPLAY Disp;
|
|||
|
|
INT UseGrey;
|
|||
|
|
INT LeftOffset;
|
|||
|
|
INT PageViewWidth; width of PageView (pixels)
|
|||
|
|
PVV_PAGE_DATA Page;
|
|||
|
|
|
|||
|
|
! Following are scratch areas used by all pageviews
|
|||
|
|
UBYTE *pBitRow; current row from bitmap
|
|||
|
|
UBYTE *pLastRow; previous row from bitmap
|
|||
|
|
BMP_RASTER_ROW_REC *pRowRec; compressed data from preview segment
|
|||
|
|
HANDLE PrvSegHandle; handle of preveiw segment
|
|||
|
|
PRV_BITMAP Bmp; bitmap, loaded from preview segment
|
|||
|
|
} PVV_PAGEVIEW_DATA;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
PROPERTY 6
|
|||
|
|
{
|
|||
|
|
PR_PAGES *pPages; Pages active object, destroy on error
|
|||
|
|
PR_PRVINFO *pPrvinfo; Info window
|
|||
|
|
PR_ROOT *pPageView[PVV_VIEW_MAX PAGEVIEWS]; PageView objects
|
|||
|
|
WSERV_INFO *pOQldMenu; holds ptr of old Menu when in preview mode
|
|||
|
|
PR_COMMAN *pOldComman ; holds ptr of old Comman when in preview mode
|
|||
|
|
WORD Started; set if am_start called
|
|||
|
|
WORD PrintMethod; command manager print method
|
|||
|
|
VOID *hdone; Callback handle for tdone & completion
|
|||
|
|
WORD mdone; Callback method for %done & completion
|
|||
|
|
INT NoPageViews; number of PageViews on display
|
|||
|
|
INT MaxNoPageViews; max no of PageViews that will fit in view
|
|||
|
|
P_RECT ScrollArea; area in which pages are displayed
|
|||
|
|
PVV_PAGEVIEW_DATA Pv; property that can be peeked by constituent pageviews
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.pPages The handle of a paces active object, used to create compressed page images
|
|||
|
|
for all pages in the print preview range. For details see the Document
|
|||
|
|
Printing Classes chapter of the FORM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.pPrvinfo The handle of a prvinro object that provides an information window
|
|||
|
|
indicating the total number of pages in the print preview range.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
—.——S eS PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.pPageView An array of up to Pvv_MAX_PAGEVIEWs elements, each of which may be a
|
|||
|
|
PRVPAGE object handle. The prvpace objects are used to draw the page
|
|||
|
|
images in the print preview window - the page images are read from an
|
|||
|
|
external memory segment whose handle is stored in
|
|||
|
|
prvview. Pv. PrvSegHandle
|
|||
|
|
|
|||
|
|
|
|||
|
|
On initialisation of each prvpacE object:
|
|||
|
|
the win. id property is set to that of the parent prvvrew object,
|
|||
|
|
|
|||
|
|
|
|||
|
|
the prvpage .init.Pos property is set to the index of the object in
|
|||
|
|
the prvview.pPageView alTay,
|
|||
|
|
|
|||
|
|
|
|||
|
|
the prvpage. init .pPrvview property is set to the handle of the
|
|||
|
|
parent pRvvieEw object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.pOldMenu The address of a memory cell containing the original command manager
|
|||
|
|
menu data: this is organised as a WSERV_INFo resource struct.
|
|||
|
|
prvview.pOldcomman The handle of the original command manager of the application: the
|
|||
|
|
PRVVIEW Class installs a print preview command manager on initialisation.
|
|||
|
|
prvview.Started Set to TRUE if an AM_START message was sent to w_am on initialisation.
|
|||
|
|
prvview.PrintMethod The method number of a print method in the original command manager: it
|
|||
|
|
|
|||
|
|
|
|||
|
|
is used to allow printing during print preview operations.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.hdone The handle of the object to which the pvv_pacEs_pone method sends a
|
|||
|
|
prvview.hdone message on completion of either a page or the document.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.mdone The method number of the message sent by the pvv_pacEs_pong method on
|
|||
|
|
completion of either a page or the document.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.NoPageViews The number of page images displayed in the print preview window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.MaxNoPageViews The maximum number of page images that may be displayed in the print
|
|||
|
|
preview window. It is set to four on initialisation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.ScrollArea Specifies a rectangle enclosing the page views and the page numbers.
|
|||
|
|
prvview. Pv Contains information about the page views, as described below.
|
|||
|
|
The pvv_PAGEVIEW_para struct is defined as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
PR_ROOT *pArray;
|
|||
|
|
|
|||
|
|
INT NoPages;
|
|||
|
|
|
|||
|
|
INT FirstPage;
|
|||
|
|
|
|||
|
|
INT LastPage;
|
|||
|
|
|
|||
|
|
INT PageOffset;
|
|||
|
|
|
|||
|
|
INT PageNo;
|
|||
|
|
PVV_DISPLAY Disp;
|
|||
|
|
INT UseGrey;
|
|||
|
|
|
|||
|
|
INT LeftOffset;
|
|||
|
|
|
|||
|
|
INT PageViewWidth;
|
|||
|
|
PVV_PAGE_DATA Page;
|
|||
|
|
UBYTE *pBitRow;
|
|||
|
|
UBYTE *pLastRow;
|
|||
|
|
BMP_RASTER_ROW_REC *pRowRec;
|
|||
|
|
HANDLE PrvSegHandle;
|
|||
|
|
PRV_BITMAP Bmp;
|
|||
|
|
|
|||
|
|
} PVV_PAGEVIEW_DATA;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The significance of the members of the pvv_pacEvIew_ pata struct is as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
pArray The handle of a variar object, used to store the offsets in an external memory
|
|||
|
|
segment of the compressed page images: the memory segment handle is stored in
|
|||
|
|
prvview.Pv.PrvSegHandle
|
|||
|
|
|
|||
|
|
|
|||
|
|
Each offset is stored as Lone data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
OOO rr SSS
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
NoPages The number of pages in the print preview range: may be less than the number of
|
|||
|
|
pages in the document.
|
|||
|
|
|
|||
|
|
FirstPage For internal use only.
|
|||
|
|
|
|||
|
|
LastPage For internal use only.
|
|||
|
|
|
|||
|
|
PageOffset The page offset of the first page in the print preview range. It is zero when the
|
|||
|
|
|
|||
|
|
|
|||
|
|
preview range starts from the first page in the document.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PageNo The page offset of the first page displayed in the print preview window. The offset is
|
|||
|
|
with respect to the first page in the preview range and is thus zero when the first
|
|||
|
|
page is visible.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Disp The current print preview settings.
|
|||
|
|
The pvv_pisp.ay struct is defined as follows:
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
UBYTE Mode;
|
|||
|
|
UBYTE Flags;
|
|||
|
|
} PVV_DISPLAY;
|
|||
|
|
the Mode member may contain one of the following:
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_DISP_FACING specifies that an odd page is to be displayed first followed by
|
|||
|
|
|
|||
|
|
|
|||
|
|
an even page.
|
|||
|
|
PVV_DISP1 specifies that one page is to be displayed.
|
|||
|
|
PVV_DISP2 specifies that two pages are to be displayed.
|
|||
|
|
PVV_DISP3 specifies that three pages are to be displayed.
|
|||
|
|
PVV_DISP4 specifies that four pages are to be displayed.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the Flags member may contain:
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_MARGINS_ON specifies that margins are to be visible during print preview
|
|||
|
|
|
|||
|
|
|
|||
|
|
operations.
|
|||
|
|
UseGrey set to TRUE to specify that the grey plane may be used, set to rauss otherwise.
|
|||
|
|
Leftoffset specifies the horizontal separation of the left edge of the first page view from the left
|
|||
|
|
|
|||
|
|
|
|||
|
|
edge of the window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PageViewWidth — specifies the width of a page view in units of pixels.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
——————_—. $$ Na eee ERINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Page specifies the layout of a generic page view on the screen: this generic page view has
|
|||
|
|
zero horizontal offset from the left edge of the main window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The pvv_pace_pata struct is defined as follows:
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
P_RECT Margins;
|
|||
|
|
INT HeadTop;
|
|||
|
|
INT HeadBot;
|
|||
|
|
P_RECT Border;
|
|||
|
|
P_RECT Footer;
|
|||
|
|
} PVV_PAGE_DATA;
|
|||
|
|
Margins - specifies the rectangle that is enclosed by the page margins.
|
|||
|
|
HeadTop - specifies the distance of the header text from the top margin.
|
|||
|
|
HeadBot - specifies the distance of the footer text from the bottom margin.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Border - specifies a rectangle enclosing the page view i.e. the physical page
|
|||
|
|
border.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Footer ~- specifies a rectangle enclosing the page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note: in all cases the units are pixels.
|
|||
|
|
|
|||
|
|
|
|||
|
|
pBitRow for internal use.
|
|||
|
|
|
|||
|
|
pLastRow for internal use.
|
|||
|
|
|
|||
|
|
pRowRec for internal use.
|
|||
|
|
|
|||
|
|
PrvSegHandle specifies the handle of an external memory segment that is used to store compressed
|
|||
|
|
page images.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The memory segment is created and written to by pR_PREVIEW_START and
|
|||
|
|
PR_PREVIEW messages that are sent on initialisation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Bmp contains information about an external bitmap that is used internally when
|
|||
|
|
transferring compressed page images to the print preview window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prv_Brrmap struct is defined as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
INT Id;
|
|||
|
|
HANDLE SegHandle;
|
|||
|
|
UPOINT Size;
|
|||
|
|
UWORD ByteWidth;
|
|||
|
|
UWORD BitWidth;
|
|||
|
|
} PRV_BITMAP;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The significance of the members of the above struct is as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Id specifies the ID of the bitmap.
|
|||
|
|
SegHandle specifies the handle of a memory segment that contains the bitmap.
|
|||
|
|
Size the x member specifies the width of the bitmap in units of pixels.
|
|||
|
|
|
|||
|
|
|
|||
|
|
the y member specifies the height of the bitmap in units of pixels.
|
|||
|
|
|
|||
|
|
|
|||
|
|
ByteWidth specifies the number of bytes required to store one horizontal line from the bitmap i.e.
|
|||
|
|
size.x divided by eight, plus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
BitWidth specifies the number of horizontal bits needed to draw a page in the correct proportion.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
Resources
|
|||
|
|
|
|||
|
|
|
|||
|
|
Defined in the system resource file sx_.ra.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE WSERV_INFO sys_preview_acc
|
|||
|
|
{
|
|||
|
|
menbar_id=sys_preview_menubar;
|
|||
|
|
first_com=0_PVC_PREVIEW_PRINT;
|
|||
|
|
accel=
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
‘p', /* Print */
|
|||
|
|
|
|||
|
|
|
|||
|
|
'm', /* Margins */
|
|||
|
|
|
|||
|
|
'a', /* Pages to display */
|
|||
|
|
'j', /* Jump to page */
|
|||
|
|
|
|||
|
|
ter /* Exit preview */
|
|||
|
|
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
BS a ee a, a
|
|||
|
|
PRVVIEW methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
ow
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT wn_sense_help (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sense print help resource
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sense the ID of the print help resource.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method simply returns -sys HELP PRINT.
|
|||
|
|
|
|||
|
|
|
|||
|
|
‘Destroy
|
|||
|
|
VOID destroy (VOID) ;
|
|||
|
|
|
|||
|
|
Free any resources and destroy the prvvrew object.
|
|||
|
|
|
|||
|
|
Cancels any busy messages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If prvview.poldMenu is non-zero, resets the application's menu bar by sending a ws_RESET_MENUBAR
|
|||
|
|
message to w_ws specifying an argument of prvview.oldmenu.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If prvview.pOldcomman, destroys the print preview command manager by sending a pEsTRoy message to
|
|||
|
|
w_ws->wserv.com and then writes prvview.pOldComman to w_ws->wserv.com.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Terminates the print preview by sending a pR_PREVIEW_END message to w_am->appman.sparel.
|
|||
|
|
Frees the bitmap specified by prvview.Pv.Bmp.Id.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If prwview. Pv. Bmp.SegHandle is non-zero, closes the memory segment with handle
|
|||
|
|
prvview.Pv.Bmp.SegHandle.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Frees the memory cell at address prvview.Pv.pBitRow.
|
|||
|
|
If prvwview. Pv.parray is non-zero, sends a DESTROY message to prvview. Pv.pArray.
|
|||
|
|
If win. flags contains PR_WIN_INITIALISED, sends a WS_REMOVE_DIAL message to w_ws.
|
|||
|
|
If prvview. Started is non-zero:
|
|||
|
|
|
|||
|
|
e sends self a DESTROY message.
|
|||
|
|
|
|||
|
|
e sends an AM_sToP message to w_am.
|
|||
|
|
Otherwise:
|
|||
|
|
|
|||
|
|
|
|||
|
|
® sends self a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
WN KEY >
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT wn_key (INT keycode, INT modifiers) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Handle a keypress that might terminate the print preview, or scroll the page view.
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_ESCAPE:
|
|||
|
|
¢ ifprvview.pPages is non-zero, sends a DESTROY message to prvview.pPages.
|
|||
|
|
® writes NULL tO prvview.pPages.
|
|||
|
|
e returns TRUE.
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_UP:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ attempts to scroll backwards prvview.NoPageViews pages by sending self a PVV_NEW_PAGE
|
|||
|
|
message with as argument prvview.Pv.PageNo minus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_DOWN:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ attempts to scroll forwards prvview.NoPageViews pages by sending self a PVV_NEW_PAGE
|
|||
|
|
message with as argument prvview.Pv.PageNo plus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode iS W_KEY_PAGE_DOWN:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ ifmodifiers contains W_CTRL MODIFIER, attempts to display the last pages in the allowed preview
|
|||
|
|
range by sending self a Pvv_NEW_PAGE message with as argument prvview. Pv.LastPage minus
|
|||
|
|
prvview.NoPageViews plus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e otherwise, if prvview. Pv.Disp.Mode contains Pvv_DISP_FACING, attempts to move forwards by
|
|||
|
|
prvview.Pv.PageNo pages by sending self a PVV_NEW_PAGE message with as argument
|
|||
|
|
prvview.Pv.PageNo plus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ otherwise, attempts to moves forward one page by sending self a pvv_NEW_PAGE message with as
|
|||
|
|
argument prvview. Pv. PageNo plus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode iS W_KEY_RIGHT:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ ifprvview.Pv.Disp.Mode contains Pvv_DISP_FACING, attempts to move forwards by
|
|||
|
|
prvview.Pv.PageNo pages by sending self a Pvv_NEW_PAGE message with as argument
|
|||
|
|
prvview.Pv.PageNo plus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ otherwise, attempts to moves forward one page by sending self a Pvv_NEW_PAGE message with as
|
|||
|
|
argument prvview. Pv. PageNo plus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode iS W_KEY_PAGE_UP:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ ifmodifiers contains w_CTRL_MODIFTER, attempts to display the first pages in the allowed preview
|
|||
|
|
range by sending self a pvv_NEW_PAGE message with as argument zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e otherwise, if prvview.Pv.Disp.Mode contains Pvv_DISP_FACING, attempts to move forwards by
|
|||
|
|
prvview.Pv.PageNo pages by sending self a PVV_NEW_PAGE message with as argument
|
|||
|
|
prvview.Pv.PageNo minus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ otherwise, attempts to moves backwards one page by sending self a PvV_NEW_PAGE message with
|
|||
|
|
as argument prvview.Pv.PageNo minus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_LEFT:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ if prvview.Pv.Disp.Mode contains Pvv_DISP_FACING, attempts to move forwards by
|
|||
|
|
prvview.Pv.PageNo pages by sending self a pvv_NEW_PAGE message with as argument
|
|||
|
|
prvview.Pv.PageNo minus prvview.NoPageViews.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ otherwise, attempts to moves backwards one page by sending self a Pvv_NEW_PAGE message with
|
|||
|
|
as argument prvview.Pv.PageNo minus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_HOME:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves to the first page(s) in the preview range by sending self a Pvv_NEW_PAGE message with as
|
|||
|
|
argument zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_END:
|
|||
|
|
|
|||
|
|
|
|||
|
|
* moves to the last pages in the preview range by sending self a Pvv_NEW_PAGE message with as
|
|||
|
|
argument prvview. Pv. LastPage minuUS prvwview.NoPageViews plus one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Retums FALSE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_draw(VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draw
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draw the page views on screen.
|
|||
|
|
Draws a border by calling gsorder with as argument win. flags.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a wN_pRaw message to each pRvpacE object - the handles of the prvpacE objects are stored in the first
|
|||
|
|
prvview.NoPageViews elements of prvview -pPageView.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Set display made
|
|||
|
|
VOID wn_set (INT mode) ;
|
|||
|
|
|
|||
|
|
Set the number of pages to display during the print preview as specified by mode.
|
|||
|
|
|
|||
|
|
The allowed values of mode are as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_DISP_FACING specifies that two facing pages are to be displayed i.e. the first page must always
|
|||
|
|
have and odd page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_DISP1 specifies that one page is to be displayed.
|
|||
|
|
PVV_DISP2 specifies that two pages are to be displayed.
|
|||
|
|
PVV_DISP3 specifies that three pages are to be displayed.
|
|||
|
|
PVV_DISP4 specifies that four pages are to be displayed.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If mode is equal to prvview.Pv.Disp.Mode, and thus the display mode is already set, returns.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes appropriate values into property including prvview.NoPageviews: note that if mode specifies more
|
|||
|
|
pages than can be displayed, mode is reset to the limit.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes mode to prvview. Pv.Disp.Mode.
|
|||
|
|
Sets Pvv_PREVIEW_SET in prvview.Pv.Disp.Flags.
|
|||
|
|
Writes prvview.Pv.Disp tO DatGate->gate.prevdisp.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If necessary the print preview window is resized whilst ensuring that it remains centred on screen.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Si te
|
|||
|
|
_ Initialise
|
|||
|
|
VOID wn_init(IN_PRVVIEW *pIn, INT DoAmStart) ;
|
|||
|
|
Initialise the pRvvrew object and then start the print preview operation.
|
|||
|
|
The In_PRVvIEw struct is defined as follows:
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
PAGES_CALLS Calls;
|
|||
|
|
WORD PrintMethod;
|
|||
|
|
WORD Sparel;
|
|||
|
|
WORD Spare2;
|
|||
|
|
} IN_PRVVIEW;
|
|||
|
|
The members of the 1n_pRvview struct have the following significance:
|
|||
|
|
Calls .hread specifies the handle of an object that is to be sent read call-back messages by the
|
|||
|
|
|
|||
|
|
|
|||
|
|
PAGES active object when it requires the next print element.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
——_— eee RINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Calls.mread specifies the read call-back message that is sent by the paczs active object when it
|
|||
|
|
requires the next print element.
|
|||
|
|
|
|||
|
|
Calls .hdone specifies the value that is written to prvview.hdone.
|
|||
|
|
|
|||
|
|
Calls.mdone specifies the value that is written to prvview.mdone.
|
|||
|
|
|
|||
|
|
PrintMethod specifies the value that is written to prvview. PrintMethod.
|
|||
|
|
|
|||
|
|
Sparel this member is not used.
|
|||
|
|
|
|||
|
|
Spare2 this member is not used.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If the gate. prevdisp.Flags property of the cars object is non-zero, writes the gate .prevdisp property to
|
|||
|
|
prvview.Pv.Disp.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes a default display mode to prvview. Pv.Disp .Mode: the default is PVV_DISP2,
|
|||
|
|
If the psp environment variable exists - this environment variable is four bytes long:
|
|||
|
|
¢ — subtracts '0' from the value in the first byte and writes the result to prvview. pv.Disp .Mode.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if prvview.Pv.Disp.Mode is greater than pvv_prsp4, resets prvview. Pv.Disp.Mode to
|
|||
|
|
PVV_DISP_FACING.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if the second byte contains '1', writes pvv_MARGINS_oN to prvview.Pv.Disp.Flags.
|
|||
|
|
e otherwise writes zero to prvview.Pv.Disp. Flags.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes TRUE to prvview.Pv.UseGrey and then connects to the window server by sending self a
|
|||
|
|
WN_CONNECT message. Sets the dimensions of the print preview window ensuring that it is centred on
|
|||
|
|
screen.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creates an instance of the prvinro class and writes its handle to prvview.pPrvinfo. Connects the PRVINFO
|
|||
|
|
object to the window server and then initialises it.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets various items of property as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
© — sets property associated with the page range: this property is prvview. Pv. PageOffset,
|
|||
|
|
prvview.MaxNoPageViews, prvview.NoPageViews and prvview.Pv.FirstPage.
|
|||
|
|
|
|||
|
|
|
|||
|
|
© — sets property associated with the layout of the page views: this property is
|
|||
|
|
prvview.Pv.Page.Border, prvview.Pv.Page.Header, prvview.Pv. Page .Footer,
|
|||
|
|
prvview.Pv.Page.Margins, prvview.Pv.Page.HeadTop, prvview.Pv. Page .HeadBot,
|
|||
|
|
prvview.Pv.Scrollarea and prvview.ScrollaArea.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e sets the content of the prvview. Pv. Bmp property.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creates an instance of the variar class and writes its handle to prvview.Pv.parray. Initialises and sets the
|
|||
|
|
capacity of the varLar component.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialises the current printer object for a print preview operation by sending a PR_PREVIEW_START message
|
|||
|
|
tO w_am->appman.sparei with as argument the address of a PREVIEW_INIT struct initialised as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
pSegName _— specifies a pointer to a buffer containing the name to be given to an external memory
|
|||
|
|
segment that will contain the page images. The name supplied is "PRV.ext" where the ext
|
|||
|
|
component is the extension in the name of the current process.
|
|||
|
|
|
|||
|
|
|
|||
|
|
pArray this is set to prvview. Pv. pArray.
|
|||
|
|
PrvSize set tO prvview.Pv.Bmp.Size.
|
|||
|
|
BitwWidth set to prvview.Pv.Bmp.BitWidth.
|
|||
|
|
|
|||
|
|
|
|||
|
|
hPrvDone _ set to sel £: specifies the handle of the object to which the prvepr object sends mprvDone
|
|||
|
|
messages after the completion of each stage of the print preview operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
mPrvDone —_ Set to O_Pvv_DONE: specifies the message to be sent by the prvppr object after completion
|
|||
|
|
of each stage of the print preview.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes the return value from the pr_PREVIEW_START message to to prvview. Pv. PrvSegHandle.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Installs the print preview command manager as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
e sends a Ws_sET_MENUBAR message to w_ws with an argument of -sys_PREVIEW_ACC system
|
|||
|
|
resource and writes the address of the original menu to prvview.poldMenu.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ creates an instance of the prvcomm class and writes its handle to w_ws->wserv.com and writes the
|
|||
|
|
handle of the original command manager to prvview.pOldComman.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ — initialises the print preview command manager by sending a com_1nIT message to
|
|||
|
|
w_ws->wserv.com with an argument of self.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialises the page images as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e creates and initialises pvv_vIEW_MAX_PAGEVIEWS instances of the prvpace class and writes the
|
|||
|
|
handles to the prvview.pPageView array.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e draws the page images in the print preview window by sending a wn_popraw message to each
|
|||
|
|
element of prvview. pPageView.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Starts the print preview operation by sending a PR_PREVIEW Message to w_am->appman.spare1 with as
|
|||
|
|
argument the address of a PAGES_cCALLs struct initialised as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
hread set to pIn->Calls.hread: specifies the handle of an object that is to be sent read call-back
|
|||
|
|
messages by the paczs active object when it requires the next print element.
|
|||
|
|
|
|||
|
|
|
|||
|
|
mread set to pIn->Calls.mread: specifies the read call-back message that is sent by the pacEs
|
|||
|
|
active object when it requires the next print element.
|
|||
|
|
|
|||
|
|
|
|||
|
|
hdone this is set to se1£: specifies the handle of an object that is to be sent an mdone message by
|
|||
|
|
the pacgs active object after the completion of each stage of the print preview operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
mdone this is set to pvv_PAGES_pons. specifies the message that is to be sent the paces active object
|
|||
|
|
after the completion of each stage of the print preview operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes the handle of the current paczs active object - i.e. the return value from the pR_pREVIEW message -
|
|||
|
|
to prvview. pPages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Makes the print preview window visible by sending self a wN_INITVIS message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Displays an information message containing the text in the sys_susy system resource: on English
|
|||
|
|
language machines this is "Busy".
|
|||
|
|
|
|||
|
|
|
|||
|
|
Adds the preview object as a dialog with an associated menu by sending a ws_app DIAL message to w_ws
|
|||
|
|
with an argument of self.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets PR_WIN_INITIALISED, DLGCHAIN_WIH_MENU and PR_WIN_NO_ppP in win. flags.
|
|||
|
|
If DoAmstart is non-zero:
|
|||
|
|
e writes TRUE to prvview.Started.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ allows queued active objects to run by sending an aM_sTART message to w_am.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Completion call-back
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT pvv_done (INT event) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Complete procesing of the current stage in the print preview operation: this call-back method is called by
|
|||
|
|
the prvpprR object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If event is PAGES_DONE_PAGE indicating that the current page image has been completed:
|
|||
|
|
* increments the page count i.e. prvview. Pv.NoPages and updates prvview. Pv. LastPage.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ updates the number of pages in the preview display by sending a w_sET message to
|
|||
|
|
prvview.pPrvinfo with an argument of prvview. Pv .NoPages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if the page is visible, then draws the page by sending a wn_DoDRAw message to the appropriate
|
|||
|
|
element of the prvview.pPageView altay.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise if event is either PAGES_DONE_ERROR OF PAGES_DONE_END, cancels any busy message and writes
|
|||
|
|
NULL tO prvview.pPages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2-14
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Returns TRUE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVV_PAGES Di
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT pvv_pages_done (PAGES_DONE *d,PAGES_INIT *par) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
étion call-back
|
|||
|
|
|
|||
|
|
|
|||
|
|
Complete processing of the current stage in the print preview operation: this call-back method is called by
|
|||
|
|
the pacss active object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If d->event is either PAGES_DONE_ERROR OF PAGES_DONE_END, the method simply cancels any busy message
|
|||
|
|
and then writes NULL to prvview.pPages since the pags active object is about to destroy itself.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise if prvview.hdone is non-zero, the method sends a prvview.mdone message to prvview.hdone
|
|||
|
|
with as arguments d and par and then returns the return value.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the method returns FALSE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note: when d->event is equal to PAGES_DONE_PaGE indicating completion of the current page, it is not
|
|||
|
|
guaranteed that the page image is complete.
|
|||
|
|
|
|||
|
|
|
|||
|
|
“margins
|
|||
|
|
VOID pvv_margins (VOID) ;
|
|||
|
|
|
|||
|
|
Toggle the visibility of the margins in the print preview display.
|
|||
|
|
|
|||
|
|
If prvview.Pv.Disp.Flags contains Pvv_MARGINS_oN, clears Pvv_MARGINS_oN in prvview.Pv.Disp. Flags.
|
|||
|
|
Otherwise sets pvv_MARGINS_ON in prvview.Pv.Disp.Flags.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a PvP_MARGINS message to each of the prvpace objects specified in the prvview. ppageView array.
|
|||
|
|
|
|||
|
|
|
|||
|
|
to page
|
|||
|
|
VOID pvv_new_page (INT NewPage) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Move to page offset Newpage in the print preview range: a page offset of zero corresponds to the first page
|
|||
|
|
in the print preview range.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draws the pages on screen using scrolling whenever possible to ensure speed.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If necessary, rounds NewPage down, or up, to ensure that the pages on screen do not extend beyond the
|
|||
|
|
allowed range and then writes the possibly modified value of newPage to prvview. Pv.PageNo.
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID pvv_INIT(VOID *xp,INT commid, VOID **ppages) ;
|
|||
|
|
Initialise the pRvview object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialises the pRvv1Ew object and starts the print preview operation by sending self a wN_INIT message
|
|||
|
|
with as argument the address of an In_PRvvIEw Struct and FaLsE: the IN_PRVvVIEW struct is set as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Calls. hread specifies the handle of an object that is to be sent read call-back messages by the paces
|
|||
|
|
active object when it requires the next print element: set to xp.
|
|||
|
|
|
|||
|
|
Calls.mread specifies the read call-back message that is sent by the pacgs active object when it
|
|||
|
|
requires the next print element: set to 0 LPR_READ.
|
|||
|
|
|
|||
|
|
Calls.hdone specifies the value that is written to prvview.hdone: set to self.
|
|||
|
|
|
|||
|
|
Calls.mdone specifies the value that is written to prvview.mdone: set to 0_PVV_FALSE.
|
|||
|
|
|
|||
|
|
PrintMethod specifies the value that is written to prvview. PrintMethod: set to commid.
|
|||
|
|
|
|||
|
|
Sparel this is set to zero.
|
|||
|
|
|
|||
|
|
Spare2 this is set to zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes the handle of the pacgs active object i.e. prvview.pPages tO *ppages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Indicates that an aM_sTART message has been sent by writing TRUE to prvview. Started.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Allows queued active objects to run by sending an am_sTaRT message to w_am.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVINFO
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVINFO
|
|||
|
|
|
|||
|
|
|
|||
|
|
NoPages
|
|||
|
|
FontHeight
|
|||
|
|
FontAscent
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
wn_calc_position
|
|||
|
|
wn_connect
|
|||
|
|
wn_dodraw
|
|||
|
|
wn_emphasise
|
|||
|
|
wn_key
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
wn_sense_help
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvinro class provides a borderless window containing the page number and either "page" or "pages"
|
|||
|
|
as appropriate. An example of such a window is shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
4
|
|||
|
|
pages
|
|||
|
|
|
|||
|
|
|
|||
|
|
The class is normally used as a component in a print preview window as shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prev.c/ (generated header file prev.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS prvinfo win
|
|||
|
|
{
|
|||
|
|
REPLACE wn_draw
|
|||
|
|
REPLACE wn_set
|
|||
|
|
REPLACE wn_init
|
|||
|
|
PROPERTY
|
|||
|
|
{
|
|||
|
|
INT NoPages;
|
|||
|
|
UWORD FontHeight;
|
|||
|
|
UWORD FontAscent;
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvinfo.NoPages specifies the number of pages: a textual representation of this value is displayed
|
|||
|
|
in the information window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvinfo.FontHeight specifies the height of the boxes in which the page number and associated text
|
|||
|
|
is drawn.
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvinfo.FontAscent specifies the ascent used when drawing text in the boxes.
|
|||
|
|
Resources
|
|||
|
|
|
|||
|
|
|
|||
|
|
Defined in the system resource file.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE STRING sys_page
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
str="page";
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE STRING sys_pages
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
str="pages";
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
BS ee ee a ee ee Ee
|
|||
|
|
PRVINFO methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_init (VOID) ;
|
|||
|
|
|
|||
|
|
Initialise property.
|
|||
|
|
|
|||
|
|
Obtains the height and ascent of the font specified by ID ronr_rp_swrss_13 and style c_sTy_NoRMAL.
|
|||
|
|
Writes the height of the font to prvinfo.FontHeight.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes the ascent of the font to prvinfo.FontAscent.
|
|||
|
|
|
|||
|
|
|
|||
|
|
of pages
|
|||
|
|
VOID wn_set (INT NoPages) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Set the number of pages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method simply writes nopages to prvinfo.NoPages and then forces a redraw by invalidating the entire
|
|||
|
|
content of the window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
ee Draw
|
|||
|
|
VOID wn_draw (VOID) ;
|
|||
|
|
Draw the entire display.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draws a textual representation of the decimal value in prvinfo.NoPages in a box in the top left corner of
|
|||
|
|
the window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draws text in a box immediately beneath the first one. If prvinfo.NoPages is one, the text is loaded from
|
|||
|
|
the sys_PaGE system resource: on English language machines this is "page". Otherwise the text is loaded
|
|||
|
|
from the sys_PacEs system resource: on English language machines this is "pages".
|
|||
|
|
|
|||
|
|
|
|||
|
|
The width and height of each box are pvv_PAGENo_DIsP_cap and prvinfo.FontHeight respectively.
|
|||
|
|
|
|||
|
|
|
|||
|
|
In both cases the text is centre aligned with an ascent of prvinfo.FontAscent.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVPAGE
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
wn_calc_position
|
|||
|
|
wn_connect
|
|||
|
|
wn—dedzraw
|
|||
|
|
wn_emphasise
|
|||
|
|
wn_key
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
wn_sense_help
|
|||
|
|
|
|||
|
|
|
|||
|
|
Pvp_margins
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
wn_set
|
|||
|
|
wn_sense
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvpace draws an image of a page and the associated page number. An example page view is shown in
|
|||
|
|
the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Notice the margins and the header and footer text. Page views are used as components in the print preview
|
|||
|
|
window as shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
In the above picture two prvpace objects were used as components in order to create and maintain the two
|
|||
|
|
page images.
|
|||
|
|
|
|||
|
|
|
|||
|
|
In normal use the prvpacE object shares the window ID of the main print preview window. The owning
|
|||
|
|
object is responsible for supplying the prvpacE object with the window ID and its position on screen.
|
|||
|
|
|
|||
|
|
|
|||
|
|
A PRVPAGE object loads the page image from an external memory segment the address of which is read
|
|||
|
|
from the property of the parent prvview object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Similarly the rectangles that define the layout of the page image are read from the property of the parent
|
|||
|
|
PRVVIEW object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
SSeS TERINE PREVIEW CLASSES |
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prev.c/ (generated header file prev.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS prvpage win
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE wn_dodraw
|
|||
|
|
REPLACE wn_draw
|
|||
|
|
REPLACE wn_init
|
|||
|
|
ADD pvp_margins
|
|||
|
|
TYPES
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
PR_PRVVIEW *pPrvView;
|
|||
|
|
INT Pos;
|
|||
|
|
|
|||
|
|
UWORD wid;
|
|||
|
|
|
|||
|
|
} IN_PRVPAGE;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
PROPERTY
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
IN_PRVPAGE init;;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
prvpage.init this is an IN_PRvPAGE struct which is passed on initialisation of the PRVPAGE
|
|||
|
|
object i.e. by sending it a ww_InrT message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The IN_PRVPAGE struct is defined as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
PR_PRVVIEW *pPrvView;
|
|||
|
|
INT Pos;
|
|||
|
|
|
|||
|
|
UWORD wid;
|
|||
|
|
|
|||
|
|
} IN_PRVPAGE;
|
|||
|
|
|
|||
|
|
|
|||
|
|
the significance of the members of the 1n_prvpacz struct is as follows:
|
|||
|
|
pPrvView this is the handle of a parent prvvrew object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Pos this is an index which determines the offset of the page image in the main window.
|
|||
|
|
The offset, in pixels, is equal to the sum of the prvview. Pv.Leftoffset property of
|
|||
|
|
the PRVVIEw object and the product of prvpage. Pos and the
|
|||
|
|
prvview. Pv. PageViewWidth property of the prvvrew object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
wid this specifies the ID of the main window in which the page view and the page number
|
|||
|
|
are drawn.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Resources
|
|||
|
|
Defined in the system resource file.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE STRING sys_page
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
str="page";
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE STRING sys_pages
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
str="pages";
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRV
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dodraw
|
|||
|
|
VOID wn_dodraw (VOID) ;
|
|||
|
|
|
|||
|
|
Create an appropriate graphics context and then draw the page view and the page number.
|
|||
|
|
|
|||
|
|
Validates the rectangles enclosing the page image and the page number.
|
|||
|
|
|
|||
|
|
Creates a temporary graphics context.
|
|||
|
|
|
|||
|
|
Draws the page view by sending self a WN_DRAW message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Releases the temporary graphics context.
|
|||
|
|
|
|||
|
|
|
|||
|
|
=~ Draw
|
|||
|
|
VOID wn_draw(VOID) ;
|
|||
|
|
Draw on screen the current page view and the associated page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If the prvview. Pv.NoPages property of the prvview object - i.e. the number of pages to preview - is zero,
|
|||
|
|
clears the rectangle enclosing the page view and the page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If the current page number is out of the preview range, clears the retangle enclosing the page view and the
|
|||
|
|
page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The layout of page views is shown schematically in the following picture.
|
|||
|
|
|
|||
|
|
|
|||
|
|
page offset of page 2
|
|||
|
|
|
|||
|
|
|
|||
|
|
left offset
|
|||
|
|
page view width
|
|||
|
|
The quantities of relevance to the prvpacs class are as follows:
|
|||
|
|
left offset specified by the prwview. Pv.Leftoffset property of the parent PRvVIEW object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
page view width _ specified by the prvview. pv. Pageviewwidth property of the parent pRvvIEw object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
page offset equal to the sum of the left offset and prvpage.Pos multiplied by the page view
|
|||
|
|
width.
|
|||
|
|
page number equal to the sum of prvpage.init.Pos and the prvview. Pv. PageNo and
|
|||
|
|
|
|||
|
|
|
|||
|
|
prvview.Pv.PageOffset property of the parent prvview object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draws the page number in the rectangle specified by the prvview. pv. Page. Footer property of the parent
|
|||
|
|
PRVVIEW object offset horizontally by the page offset.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Draws the page image in the rectangle specified by the prvview. Pv. Page .Border property of the parent
|
|||
|
|
PRVVIEW object offset horizontally by the page offset.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If the prvview. Pv. Disp. Flags property of the prvview object contains pvv_MARGINS_ON:
|
|||
|
|
|
|||
|
|
|
|||
|
|
2-20
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
e draws the margins as specified by the prvview. Pv. Page .Margins property of the parent PRVVIEW
|
|||
|
|
object offset by the page offset.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Special note: the page image is loaded from an external memory segment - the handle of this memory
|
|||
|
|
segment is read from the prvview. Pv. PrvSegHandle property of the parent pRvVIEw object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
WNLINIT oo Initiatise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_init (IN_PRVPAGE *pinit) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise the pRvpaGE object.
|
|||
|
|
Writes *pinit to prvpage. init.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes pinit->wid tO win.id.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVP{MARGINS _ ) : Margins
|
|||
|
|
VOID pvp_margins (INT flag) ;
|
|||
|
|
Create a graphics context and the draw the page view and the page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends self a WN_DODRAW message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVCOMM
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVCOMM
|
|||
|
|
|
|||
|
|
|
|||
|
|
com_init
|
|||
|
|
com_menu
|
|||
|
|
com_file_ change
|
|||
|
|
|
|||
|
|
|
|||
|
|
com_statwin
|
|||
|
|
com_accl_check
|
|||
|
|
|
|||
|
|
|
|||
|
|
Commend
|
|||
|
|
|
|||
|
|
|
|||
|
|
com_mode_change
|
|||
|
|
|
|||
|
|
|
|||
|
|
com_exit
|
|||
|
|
pvc_preview_print
|
|||
|
|
pvc_preview_margins
|
|||
|
|
pvc_preview_options
|
|||
|
|
pvc_preview_jump
|
|||
|
|
pvc_preview_exit
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvcomm class provides the print preview command manager. An example print preview menu is
|
|||
|
|
shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
eae (Print
|
|||
|
|
Show margins
|
|||
|
|
Pages to display
|
|||
|
|
|
|||
|
|
|
|||
|
|
Jump to page S
|
|||
|
|
Exit preview Pe
|
|||
|
|
|
|||
|
|
|
|||
|
|
The menu items supplied are as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ Print - this allows the user to print during print preview operations: this option uses the print
|
|||
|
|
command in the original command manager of the application.
|
|||
|
|
|
|||
|
|
|
|||
|
|
° Show margins/Hide margins - this allows the user to simply toggle the display of margins during
|
|||
|
|
print preview operations.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ Pages to display - this allows the user to set the total number of pages displayed during print
|
|||
|
|
preview operations: this is a system wide setting stored in the psp environment variable.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ Jump to page - this allows the user to simply set the first page displayed during the print preview
|
|||
|
|
operation. This is a local, i.e. not system wide, setting.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e Exit preview - this allows the user to terminate the print preview operation thus restoring the
|
|||
|
|
original command manager.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prev.cl (generated header file prev.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS prvcomm comman
|
|||
|
|
{
|
|||
|
|
REPLACE com_init
|
|||
|
|
REPLACE com_menu
|
|||
|
|
REPLACE com_file_change
|
|||
|
|
REPLACE com_exit
|
|||
|
|
ADD pvc_preview_print
|
|||
|
|
ADD pvc_preview_margins
|
|||
|
|
ADD pvc_preview_options
|
|||
|
|
ADD pvc_preview_jump
|
|||
|
|
ADD pvc_preview_exit
|
|||
|
|
PROPERTY
|
|||
|
|
{
|
|||
|
|
PR_PRVVIEW *pPrvView
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
prvcomm.pPrvView this stores the handle of a prvvrew object.
|
|||
|
|
Resources
|
|||
|
|
|
|||
|
|
Defined in the system resource file.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE WSERV_INFO sys_preview_acc
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
menbar_id=sys_preview_menubar;
|
|||
|
|
first_com=0_PVC_PREVIEW_PRINT;
|
|||
|
|
|
|||
|
|
|
|||
|
|
accel=
|
|||
|
|
{
|
|||
|
|
'p', /* Print */
|
|||
|
|
'm', /* Margins */
|
|||
|
|
'd', /* Pages to display */
|
|||
|
|
'j', /* Jump to page */
|
|||
|
|
tet /* Exit preview */
|
|||
|
|
|
|||
|
|
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
|
|||
|
|
a a a a eal
|
|||
|
|
PRVCOMM methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID com_init (PR_PRVVIEW *pPreView) ;
|
|||
|
|
Initialise the prvviEw object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method simply writes pprvview to prvcomm. pPrwView.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Set menu item text
|
|||
|
|
VOID com_menu(WORD menunum, VOID *pArray) ;
|
|||
|
|
Set appropriate text for the Margins menu item.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If the prevview. Pv.Disp.Flags property of the prvview object contains pvv_MARGINS_ON:
|
|||
|
|
|
|||
|
|
|
|||
|
|
2-22
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
eee NNT PREVIEW CLASSES |
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ sets the text in the Margins menu item from the sys_HIDE_MARGINs system resource: on English
|
|||
|
|
language machines this is "Hide margins".
|
|||
|
|
Otherwise:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e sets the text in the Margins menu item from the sys_DISPLAY_MARGINs system resource: on
|
|||
|
|
English language machines this is "Show margins".
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note: this method is called immediately before the menu is displayed.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Edt application
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT com_exit (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Exit the print preview and the application.
|
|||
|
|
Destroys the current prvview object by sending a pestroy message to prvcomm. pPrvView.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a com_EXIT message to w_ws->wserv.com.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Print
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID pvc_preview_print (WORD menunum, VOID *pArray) ;
|
|||
|
|
Print all of the pages in the print preview range.
|
|||
|
|
If the prvview.pPages property of the pRvviEw object specified by prvcomm. pPrvview is non-zero:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e displays an information message containing the text in the sys_PREVIEW_BUSY system resource: on
|
|||
|
|
English language machines this is "Busy, cannot print yet".
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ — it is assumed that the message number of an appropriate print method is specified by the
|
|||
|
|
prvview.PrintMethod property of the prvvrew object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
* it is also assumed that the handle of the original command manager is specified by the
|
|||
|
|
prvview.pOldComman property of the prvvieEw object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e — starts a printing operation by sending the appropriate print message to the original command
|
|||
|
|
manager.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Toggle margins
|
|||
|
|
VOID pvc_preview_margins (VOID) ;
|
|||
|
|
Toggle the visibility of margins in the print preview window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method simply sends a pvv_marcins message to the pRvvIEw object i.e. prvcomm. pPrvview.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PVGEPRI
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID pvc_preview_options (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
IEW_OPTIONS —_—_—s Launch Preview options dialog
|
|||
|
|
|
|||
|
|
|
|||
|
|
Launch a Preview options dialog allowing the user to edit the current print preview display mode. The
|
|||
|
|
dialog is passed prvcomm. pPrvView as data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
For details of the Preview options dialog see the description of the prvoprions_puc class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Laur
|
|||
|
|
|
|||
|
|
|
|||
|
|
h Jump to page dialog
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID pvc_preview_jump (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Launch a Jump to page dialog allowing the user to select the number of the current page in the print
|
|||
|
|
preview operation. The dialog is passed prvcomm. pPrvview as data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
For details of the Jump to page dialog see the description of the prvsump_puc class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
PYC PREVIEW EXIT” : Exit print preview
|
|||
|
|
VOID pvc_preview_exit (VOID) ;
|
|||
|
|
Exit the print preview operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a DEsTRoy message to prvcomm. pPrvView.
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVOPTIONS_DLG
|
|||
|
|
|
|||
|
|
|
|||
|
|
flags next item count
|
|||
|
|
id rbuf current
|
|||
|
|
dimrid underline
|
|||
|
|
helprid absorb
|
|||
|
|
changed
|
|||
|
|
destroy wrh—dzaw
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy dl_item_replace
|
|||
|
|
wn_key dl_item_append
|
|||
|
|
wn_emphasise dl_init
|
|||
|
|
wn_sense_ help dl_dimmed_message
|
|||
|
|
wn_set dal_item_add
|
|||
|
|
wn_sense dl_set_size
|
|||
|
|
wn_draw dl_ing minsize
|
|||
|
|
dl_item_lock di—dyn—init
|
|||
|
|
dl_item_dim di—-key
|
|||
|
|
dl_set_item_flags
|
|||
|
|
|
|||
|
|
dl_set_prompt dl_changed
|
|||
|
|
dl_take_focus dl_focus
|
|||
|
|
dl_handle_to_index dl_launch_sub
|
|||
|
|
dl_index_to_handle dl_item_new
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVOPTIONS_DLG
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
|
|||
|
|
|
|||
|
|
wa—sense—heip
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
The pRvoptTions_pic implements the Preview options dialog which allows the user to select the number of
|
|||
|
|
pages that are displayed during a print preview operation. An example Preview options dialog is shown in
|
|||
|
|
|
|||
|
|
|
|||
|
|
the following picture:
|
|||
|
|
i Display
|
|||
|
|
¢2 pages
|
|||
|
|
|
|||
|
|
|
|||
|
|
The allowed options are shown in the following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
A
|
|||
|
|
|
|||
|
|
|
|||
|
|
The Facing pages option allows the display of two pages whereby the first page has an odd page number.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The Preview options dialog is used by the prvcomm print preview command manager described in the
|
|||
|
|
present chapter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prvdigs.cl (generated header file prvdlgs.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS prvoptions_dlg dlgbox
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE dl_dyn_init
|
|||
|
|
REPLACE dl_key
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
|
|||
|
|
There is no property associated with the pRvopTIoNs_puG class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Resources
|
|||
|
|
|
|||
|
|
|
|||
|
|
Defined in the system resource file.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE MENU sys_preview_options_chlist
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
items=
|
|||
|
|
{
|
|||
|
|
CHOICE_ITEM {str="Facing pages";},
|
|||
|
|
CHOICE_ITEM {str="1 page";},
|
|||
|
|
CHOICE _ITEM {str="2 pages";},
|
|||
|
|
CHOICE_ITEM {str="3 pages";},
|
|||
|
|
CHOICE_ITEM {str="4 pages"; }
|
|||
|
|
be
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE DIALOG sys_preview_options_dialog
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
title="Display";
|
|||
|
|
|
|||
|
|
f£lags=DLGBOX_NOTIFY_ENTER |DLGBOX_RBUF_FILLED|DLGBOX_NO_DDP;
|
|||
|
|
controls=
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
CONTROL
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
class=C_CHLIST;
|
|||
|
|
|
|||
|
|
prompt= ti ;
|
|||
|
|
info=CHLIST{rid=sys_preview_options_chlist;};
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVOPTIONS_DLG methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID dl_dyn_init (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dynamically initialise the content of the dialog: it is assumed that algbox. rbuf contains the handle of a
|
|||
|
|
PRVVIEW object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Reads the maximum number of pages from the prvview.MaxNoPageViews property of the prvvrEw object
|
|||
|
|
and if the maximum number of pages is less than pvv_vIEW_MAX_PAGEVIEWS:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e deletes the items from the data for the Mode control that specify more than the maximum number
|
|||
|
|
of pages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e — sets the index of the item selected in the Mode control to the smaller of the
|
|||
|
|
prvview.Pv.Disp.Mode property of the prvview object and the maximum number of pages.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise:
|
|||
|
|
|
|||
|
|
|
|||
|
|
© — sets the index of the item selected in the Mode control to the prvview.Pv.Disp.Mode property of
|
|||
|
|
the pRvview object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
DEKEY Handle key input
|
|||
|
|
INT dl_key (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Save the content of the dialog: it is assumed that aigbox. rbuf contains the handle of a prvvrew print
|
|||
|
|
preview object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets the number of pages displayed in the print preview by sending a w_seT message to dlgbox.rbuf with
|
|||
|
|
as argument the index of the item selected in the Mode control.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Returns WN_KEY_CHANGED.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVJUMP_DLG
|
|||
|
|
|
|||
|
|
|
|||
|
|
flags next item count
|
|||
|
|
id rbuf current
|
|||
|
|
dimrid underline
|
|||
|
|
helprid absorb
|
|||
|
|
changed
|
|||
|
|
destrey wh—draw
|
|||
|
|
|
|||
|
|
|
|||
|
|
PRVOPTIONS_DLG
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy dl_item_replace
|
|||
|
|
wn_key dl_item_append
|
|||
|
|
wn_emphasise dl_init
|
|||
|
|
wn_sense_help dl_dimmed_message
|
|||
|
|
wn_set dl_item_add
|
|||
|
|
wn_sense dl_set_size
|
|||
|
|
wn_draw dl_ing_ minsize
|
|||
|
|
dl_item_lock di—dyn—init
|
|||
|
|
dl_item_dim di—key
|
|||
|
|
di_set_item_flags
|
|||
|
|
|
|||
|
|
dl_set_prompt dl_changed
|
|||
|
|
dl_take_focus dl_focus
|
|||
|
|
dl_handle_to_index dl_launch_sub
|
|||
|
|
dl_index_to_handle dl_item_new
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
|
|||
|
|
|
|||
|
|
wa-sencse—heip
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
The prvsump_puc class implements the Jump to page dialog which allows the user to select the first page
|
|||
|
|
on the screen during the print preview operation. An example Jump to page dialog is shown in the
|
|||
|
|
following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Jump to page
|
|||
|
|
|
|||
|
|
|
|||
|
|
[Page number iE]
|
|||
|
|
|
|||
|
|
|
|||
|
|
The Jump to page dialog is used by the prvcomm print preview command manager described in the present
|
|||
|
|
chapter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file prvdigs.cl (generated header file prvdlgs.g).
|
|||
|
|
CLASS prvjump_dlg dlgbox
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE dl_dyn_init
|
|||
|
|
REPLACE dl_key
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
There is no property associated with the prvgump_puc class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
2 PRINT PREVIEW CLASSES
|
|||
|
|
SSeS RINT PREVIEW CLASSES ©
|
|||
|
|
|
|||
|
|
|
|||
|
|
Resources
|
|||
|
|
|
|||
|
|
|
|||
|
|
Defined in the system resource file.
|
|||
|
|
|
|||
|
|
|
|||
|
|
RESOURCE DIALOG sys_preview_jump_dialog
|
|||
|
|
{
|
|||
|
|
title="Jump to page";
|
|||
|
|
flags=DLGBOX_NOTIFY_ENTER |DLGBOX_RBUF_FILLED |DLGBOX_NO_DDP;
|
|||
|
|
controls=
|
|||
|
|
{
|
|||
|
|
CONTROL
|
|||
|
|
{
|
|||
|
|
class=C_NCEDIT;
|
|||
|
|
prompt="Page number";
|
|||
|
|
infosNCEDIT
|
|||
|
|
{
|
|||
|
|
low=1;
|
|||
|
|
high=9999;
|
|||
|
|
|
|||
|
|
|
|||
|
|
i
|
|||
|
|
|
|||
|
|
|
|||
|
|
ae re ee ae ey
|
|||
|
|
PRVJUMP_DLG methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID dl_dyn_init (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Dynamically initialise the content of the dialog: it is assumed that digbox.rbuf contains the handle of a
|
|||
|
|
PRVVIEW object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets the page number of the first page in the preview range as the minimum value in the Page number
|
|||
|
|
control: this is equal to one plus the prvview. Pv. PageOffset property of the PRvvzEw object:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets the page number of the first page on screen as the current value in the Page number control: this is
|
|||
|
|
equal to the sum of the prvview.Pv.Pagecffset and prvview. Pv. PageNo property of the pRvv1ew object
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT dl_key(VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
_ Handie key input
|
|||
|
|
|
|||
|
|
|
|||
|
|
Save the content of the dialog: it is assumed that digbox. rbuf contains the handle of a prvvrew object.
|
|||
|
|
If the current value in the Page number control exceeds the number of the last page in the preview range:
|
|||
|
|
|
|||
|
|
|
|||
|
|
® — sets the current value in the Page number control to the number of the last page in the preview
|
|||
|
|
range: this is equal to the sum of the prwiew. Pv. PageOffset and prvview. Pv.NoPages property
|
|||
|
|
of the prvvrew object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e displays an information message containing text from the sys_RANGE_RESET system resource: on
|
|||
|
|
English language machines this is "Out of range - reset to limit".
|
|||
|
|
|
|||
|
|
|
|||
|
|
© returns WN_KEY_NO_CHANGE.
|
|||
|
|
Otherwise:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ — sets the first page displayed on screen by sending a pvv_NEW_PAGE message tO digbox.rbuf with
|
|||
|
|
as argument the current value in the Page number control minus the page offset i.e. the
|
|||
|
|
prvview.Pv.PageOffset property of the prvvrew object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e returms WN_KEY_ CHANGED.
|
|||
|
|
|
|||
|
|
|
|||
|
|
o—
|
|||
|
|
|
|||
|
|
|
|||
|
|
CHAPTER 3
|
|||
|
|
|
|||
|
|
|
|||
|
|
CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
This chapter describes the following two classes:
|
|||
|
|
e the canimewn class which is designed to be used with the canwzn class.
|
|||
|
|
e the canwrn class which provides a convenient means to create and use a graphical calendar view.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note that both the ca.tmewn and canwin classes are included in the xapp category and thus an instance of
|
|||
|
|
each class should be created as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
self->demo.calwin=f_new(CAT_MYAPP_XADD,C_CALWIN) ;
|
|||
|
|
self->demo.calimgwn=f_new(CAT_MYAPP_XADD,C_CALIMGWN) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
It is expected that applications that wish to display a calendar window are more likely to create an instance
|
|||
|
|
of cauwrn, rather than the more primitive caLIMGwIN.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Since caLWIN's component cALIMGWIN expects to receive redraw message, an instance of caLwrn is not
|
|||
|
|
suited to being created from OPL or HWIF programs.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Precursors
|
|||
|
|
|
|||
|
|
|
|||
|
|
An understanding of the caLwrn and caLImGwn classes will be helped by a knowledge of:
|
|||
|
|
e the graphical calendar display in the Series 3a Agenda application.
|
|||
|
|
e the cauime class described in The Calendar Image Class chapter of the FORM Reference manual.
|
|||
|
|
e the wn and Bwzrn classes.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class diagram
|
|||
|
|
|
|||
|
|
|
|||
|
|
calwin
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
CALIMGWN
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
|
|||
|
|
wn_calic_ position
|
|||
|
|
wn_connect
|
|||
|
|
wn_dodraw
|
|||
|
|
wn_emphasise
|
|||
|
|
wn_key
|
|||
|
|
wn_position
|
|||
|
|
wncredzaw
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_sense_help
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_set
|
|||
|
|
wn_sense
|
|||
|
|
wn_draw
|
|||
|
|
wn_init
|
|||
|
|
|
|||
|
|
|
|||
|
|
The caLimewn class is intended to be used by the catwrn class described in the next section. It does no
|
|||
|
|
more than provide a borderless window suitable for holding a calendar view drawn by an instance of the
|
|||
|
|
CALIMG class.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
|
|||
|
|
|
|||
|
|
The caLincwn class subclasses win and is defined in the sub-category file calwin.cl (with generated header
|
|||
|
|
file calimgwn.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS calimgwn win
|
|||
|
|
{
|
|||
|
|
REPLACE wn_redraw
|
|||
|
|
PROPERTY 1
|
|||
|
|
{
|
|||
|
|
VOID *calimg;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
Property
|
|||
|
|
calimgwn.calimg an instance of the canrme class responsible for drawing and maintaining a calendar
|
|||
|
|
view. A description of the cauime class may be found in the FORM Reference
|
|||
|
|
manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
a a ee
|
|||
|
|
CALIMGWN methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
WN_REDRAW Redraw
|
|||
|
|
VOID wn_redraw(P_RECT *prect);
|
|||
|
|
|
|||
|
|
|
|||
|
|
Redraw the part of the calendar view which overlaps the region defined by the p_REct struct pointed to by
|
|||
|
|
prect.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The code is as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
wBeginRedrawGCo (self->win.id,prect) ;
|
|||
|
|
p_send3 (self->calimgwn.calimg,O_CI_REDRAW,prect) ;
|
|||
|
|
wEndRedraw () ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
3 CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
CALWIN
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_init
|
|||
|
|
wn_emphasise
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_position
|
|||
|
|
wn_redraw
|
|||
|
|
wn_sense_help
|
|||
|
|
wn_visible
|
|||
|
|
|
|||
|
|
|
|||
|
|
wn_set
|
|||
|
|
|
|||
|
|
|
|||
|
|
The canwin class provides a bordered and shadowed window containing a graphical calendar view. An
|
|||
|
|
example caLwin display is shown in the following diagram, which indicates some of the components of the
|
|||
|
|
window:
|
|||
|
|
|
|||
|
|
|
|||
|
|
month title calendar title
|
|||
|
|
|
|||
|
|
|
|||
|
|
days of the week title
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note that today's date - i.e. the fourteenth - is indicated in a bold font.
|
|||
|
|
|
|||
|
|
|
|||
|
|
On the Series 3a, the calendar also supports multiple rows and columns of months, as illustrated in the
|
|||
|
|
following picture:
|
|||
|
|
|
|||
|
|
|
|||
|
|
7
|
|||
|
|
3
|
|||
|
|
16
|
|||
|
|
|
|||
|
|
|
|||
|
|
GON) =
|
|||
|
|
= fw
|
|||
|
|
|
|||
|
|
|
|||
|
|
An owning object may allow the canwrn class to determine approriate fonts, font styles and spacings in
|
|||
|
|
which case the calendar view may contain either one, three or twelve months. Alternatively the owning
|
|||
|
|
object may explicitly specify the fonts, font styles, spacings and the number of rows and columns. Clearly
|
|||
|
|
the first mode of use is the simplest and is thus recommended.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
ee
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note that, on the Workabout, a calendar window may only display a single month.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
|
|||
|
|
|
|||
|
|
The canwrn class subclasses bwin and is defined in the sub-category file calwin.cl (with generated header
|
|||
|
|
file calwin.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS calwin bwin
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
REPLACE destroy
|
|||
|
|
REPLACE wn_init initialise to 1 of 3 types of calendar window
|
|||
|
|
REPLACE wn_emphasise deals with cursor drawing & erasing
|
|||
|
|
REPLACE wn_key
|
|||
|
|
REPLACE wn_sense
|
|||
|
|
CONSTANTS
|
|||
|
|
{
|
|||
|
|
IN_CALWIN_1_ MONTH 0x0001
|
|||
|
|
IN_CALWIN_3_MONTH 0x0002
|
|||
|
|
IN_CALWIN_12 MONTH 0x0004
|
|||
|
|
IN_CALWIN_STD_FLAGS 0x0007 above three ORed together
|
|||
|
|
IN_CALWIN_USER_SPEC 0x0010 none of the above but user specified
|
|||
|
|
PR_CALWIN TODAY _HOOKED 0x0020
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
TYPES (
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
UWORD flags;
|
|||
|
|
ULONG days;
|
|||
|
|
P_POINT pos;
|
|||
|
|
VOID *calimg; in_calimg struct (see calimg.cl)
|
|||
|
|
VOID **self ptr; where to write self to (in owner's property)
|
|||
|
|
} IN_CALWIN;
|
|||
|
|
}
|
|||
|
|
PROPERTY 1
|
|||
|
|
{
|
|||
|
|
PR_CALIMGWN *calimgwn;
|
|||
|
|
VOID *calimg; allows direct call to calimg eg goto_date() etc
|
|||
|
|
UWORD flags;
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID **self ptr;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
calwin.calimgwn the handle of an instance of the cau rmewn class described in the first section of the current chapter.
|
|||
|
|
|
|||
|
|
calwin.calimg the handle of an instance of the canine class described in The Calendar Image Classes chapter of
|
|||
|
|
the FORM Reference manual.
|
|||
|
|
|
|||
|
|
calwin.flags contains an ored combination of flags as described for the wn_init method.
|
|||
|
|
|
|||
|
|
calimg.self ptr assumed to point to the address at which the owning application stores the canwrn object handle.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Se eee ee ee a a ee
|
|||
|
|
CALWIN methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
DESTROY sit a Destroy
|
|||
|
|
VOID destroy (VOID) ;
|
|||
|
|
Destroy the caLwin instance.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If calwin. flags contains PR_CALWIN_TODAY_HOOKEn, the method sends a WS_HOOK_TODAY_CHANGED message
|
|||
|
|
to the wsErv object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method then supersends a pestroy message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
3 CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_init (IN_CALWIN *init);
|
|||
|
|
Initialise the instance of caLwin according to the content of the 1n_canwrn struct pointed to by init.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If w_ws->wserv. flags does not contain PR_WSERV_FULLSCREEN, the method calls p leave with an
|
|||
|
|
argument of RUN_ACTIVE_CLEANUP_NONOTIFY.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the method creates, initialises and displays a calendar view.
|
|||
|
|
The appearance of the calendar view is specified by means of an 1n_caLIne struct defined as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
UWORD flags;
|
|||
|
|
ULONG days;
|
|||
|
|
P_POINT pos;
|
|||
|
|
VOID *calimg;
|
|||
|
|
VOID **self ptr;
|
|||
|
|
} IN_CALWIN;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The significance of the members of the in_ca.wrn struct is as follows:
|
|||
|
|
flags the allowed values are:
|
|||
|
|
|
|||
|
|
|
|||
|
|
IN_CALWIN_USER_SPEC in which case the initialisation data for the caLrmc instance is read
|
|||
|
|
from init->calimg. Note that this flags takes precedence over the remaining three.
|
|||
|
|
|
|||
|
|
|
|||
|
|
IN_CALWIN_12_MoNnTH in which case appropriate initialisation data is created for a calendar
|
|||
|
|
view containing twelve months arranged in two rows of six months each. On the
|
|||
|
|
Workabout, this flag, if present, will be removed from the initialisation data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
IN_CALWIN_3 MONTH in which case appropriate initialisation data is created for a calendar
|
|||
|
|
view containing three months arranged as one row of three months. On the Workabout, this
|
|||
|
|
flag, if present, will be removed from the initialisation data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
IN_CALWIN_1_MonTH in which case appropriate initialisation data is created for a calendar
|
|||
|
|
view containing one month. On the Workabout, this flag will be forced to be present in the
|
|||
|
|
initialisation data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
days specifies the initial value for the current date and is expressed as the number of days elapsed
|
|||
|
|
since 1/1/1900.
|
|||
|
|
|
|||
|
|
|
|||
|
|
pos specifies the initial position of the main bordered window and is modified if necessary to
|
|||
|
|
ensure that the calendar is not clipped by the edges of the screen. In the latter case the
|
|||
|
|
modified value is such that the calendar view is centred in the window.
|
|||
|
|
|
|||
|
|
|
|||
|
|
calimg the address of an In_cALIMe struct containing initialisation data for the caLIMe instance.
|
|||
|
|
This is ignored unless the flags member contains IN_CALWIN_USER_SPEC. The IN_CALIMG
|
|||
|
|
struct is described in The Calendar Image Class chapter of the FORM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
self ptr specifies an address in the owning application where the handle of the canwin instance is
|
|||
|
|
stored.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Writes init->flags to calwin. flags and writes init->self->ptr tO calwin.self->ptr.
|
|||
|
|
|
|||
|
|
|
|||
|
|
On the Workadour, the flags IN_CALWIN_3_MONTH and IN_CALWIN_12_MONTH are cleared from the
|
|||
|
|
initialisation data and the flag 1n_caLwin_1_MonTH is forced to be set. before the data is copied to
|
|||
|
|
calwin. flags. Note that this also automatically guarantees that Iv_CALWIN_USER_SPEC is not present.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Unless init->flags contains IN_CALWIN_USER_SPEC, an IN_CALIMG Struct is created and initialised with
|
|||
|
|
appropriate values for the required calendar view. These values are as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
wid specifies the window ID of the borderless window: this is set to calwin. calimgwn->win.id.
|
|||
|
|
|
|||
|
|
|
|||
|
|
width specifies the width of the borderless window corresponding to the caLrimcwn component.
|
|||
|
|
This window is of the exact size required to hold the calendar view. If the calendar view is
|
|||
|
|
too wide for the screen the method calls p_leave with an argument of E_GEN_TOOwIDE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
EEE
|
|||
|
|
|
|||
|
|
|
|||
|
|
tl specifies the gutter dimensions. The x member specifies the width of the left and right
|
|||
|
|
gutters and is set to seven. The y member specifies the height of the top and bottom gutters.
|
|||
|
|
If init->flags contains IN_CALWIN_12_monTus, the y member is set to five. Otherwise it is
|
|||
|
|
set to seven,
|
|||
|
|
|
|||
|
|
|
|||
|
|
mrow specifies the number of rows. If init->£1ags contains IN_CALWIN_12 MONTHS, mrow is set to
|
|||
|
|
two, otherwise it is set to one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
mcol specifies the number of columns. If init->£1ags contains IN_CALWIN_12_ MONTHS, mcol is
|
|||
|
|
set to six, or if init->flags contains IN_CALWIN_3_MONTHS, mcol is set to three, otherwise it
|
|||
|
|
is set to one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
flags set to zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
title specifies the font characteristics of the main title. The leading, style and f£id members are
|
|||
|
|
set to one, G_STY_NORMAL and FoNT_ID_13_s respectively (on the Workabour, the title font
|
|||
|
|
ID is set to Font_1D_S3BOLD).
|
|||
|
|
|
|||
|
|
|
|||
|
|
month specifies the font characteristics of the month title. The 1eading and style members are set
|
|||
|
|
to one and G_sTy_norat respectively. If init->£1ags contains IN_CALWIN_12_monTus, the
|
|||
|
|
£id member is set to FoNT_ID_s3BOLD, otherwise it is set to FONT_ID_11B Ss
|
|||
|
|
(FONT_ID_s3BoLD on the Workabout).
|
|||
|
|
|
|||
|
|
|
|||
|
|
dow specifies the font characteristics of the days of the week title. The leading and style
|
|||
|
|
members are set to one and G_sTy_Normat respectively. If init->flags contains
|
|||
|
|
IN_CALWIN_12_MonTuS, the fid member is set to FonT_1p_s3, otherwise it is set to
|
|||
|
|
FONT_ID_11_S (FONT_ID_s3 on the Workabou?).
|
|||
|
|
|
|||
|
|
|
|||
|
|
day specifies the font characteristics of the day of the month numbers. The leading and style
|
|||
|
|
members are set to one and G_sTy_NorMat respectively. If init->f£1ags contains
|
|||
|
|
IN_CALWIN_12_MONTHS, the fid member is set to FonT_ID_pIGITs_s*4, otherwise it is set to
|
|||
|
|
FONT_ID_11_S (FonT_zD_s3 on the Workabout).
|
|||
|
|
|
|||
|
|
|
|||
|
|
daygap specifies a character the width of which in the day number font and style defines the
|
|||
|
|
spacing between the day numbers and is set to osPacE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
mthgapx specifies the horizontal pixel separation between adjacent months. If init->£lags contains
|
|||
|
|
IN_CALWIN_12_MONTHS, mthgapx is set to six, otherwise it is set to twelve.
|
|||
|
|
|
|||
|
|
|
|||
|
|
hserlm specifies the default granularity for scrolling horizontally by month. If init->flags
|
|||
|
|
contains IN_CALWIN_12_ MONTHS, hscr1m is set to six, otherwise it is set to one.
|
|||
|
|
|
|||
|
|
|
|||
|
|
startm specifies the month number of the first month in the calendar view. If init->£1ags contains
|
|||
|
|
IN_CALWIN_12_MONTHS, startm is set to zero, otherwise it is determined from the value
|
|||
|
|
implicitly specified in init->days.
|
|||
|
|
|
|||
|
|
|
|||
|
|
days specifies the current date expressed as days elapsed since 1/1/1990 and is set to init->days.
|
|||
|
|
|
|||
|
|
|
|||
|
|
font specifies additional font information for the month, day of week, title and day text. For
|
|||
|
|
example, the ascent of the month text, which is font -mth_ascent, is calculated from the
|
|||
|
|
font ID and the style specified in month. fia and month. style respectively.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise (i.e. if init->£1ags contains IN_CALWIN_USER_SPEC) it is assumed that init->calimg points to
|
|||
|
|
an IN_CALING struct initialised by the owner.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creates the main bordered window by sending se1¢ a wn_connecT message with appropriate arguments.
|
|||
|
|
The position is set to the pos member of the 1n_ca.wrn struct as described above. The width is set to the
|
|||
|
|
width of the calendar plus the width of the left and right gutters, and similarly the height is set to the height
|
|||
|
|
of the calendar plus the height of the top and bottom gutters. On the Series 3a, but not on the Workabout, if
|
|||
|
|
the window is too large to fit on the screen, the method calls p_leave(E_GEN_TOOWIDE).
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creates an instance of the caLImGwn class and writes the handle to calwin.calimgwn. Creates the calendar
|
|||
|
|
window by sending a wN_ConnEcT message to calwin.calimgwn with a background attribute of
|
|||
|
|
W_WIN_BACK_NoNnE. The window dimensions are set to those of the calendar view.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creates an instance of the cane class and writes the handle to both calwin. calimg and
|
|||
|
|
calwin.calimgwn->calimgwn.calimg.
|
|||
|
|
|
|||
|
|
|
|||
|
|
a.
|
|||
|
|
|
|||
|
|
|
|||
|
|
3 CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
If init->flags contains IN_CALWIN_USER_SPEC, initialises the caLimc instance by sending a c1_INIT
|
|||
|
|
message to calwin.calimg with init->calimg as argument.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise initialises the caLzMc instance by sending a c1_INIT message to calwin.calimg with the
|
|||
|
|
address of an appropriately set 1n_ca.zne struct as described above.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If init->flags contains IN_CALWIN_12_ MONTHS:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e loads the resource with ID sys_catenpar and sets this as the calendar title by sending a
|
|||
|
|
CI_SET_TITLE message to calwin.calimg.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a ws_HOOK_TODAY_CHANGED message to w_ws with arguments of calwin.calimg and
|
|||
|
|
O_CI_TODAY_CHANGED.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets PR_CALWIN_TODAY_HOOKED in calwin. flags.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Makes the calendar view visible by calling the htnitvis utility routine with an argument of se.
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT wn_key(UINT keycode, UINT modifiers) ;
|
|||
|
|
Handle a keypress.
|
|||
|
|
If keycode is W_KEY_ESCAPE:
|
|||
|
|
e returns WN_KEY_CANCELLED.
|
|||
|
|
If keycode is W_KEY_RETURN:
|
|||
|
|
e returms WN_KEY_CHANGED.
|
|||
|
|
If keycode is W_KEY_TAB:
|
|||
|
|
e ifcalwin.flags contains IN_CALWIN_USER_SPEC, the method returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e ifmodifiers contains W_CTRL_MODIFIER and calwin.flags contains IN_CALWIN_12_ MONTH, the
|
|||
|
|
method returns WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e otherwise the method creates a new caLwin object and initialises it as described for the wn_init
|
|||
|
|
method. If modifiers contains w_CTRL_mMopIFIER, the new calendar contains twelve months.
|
|||
|
|
Otherwise if modifiers contains W_SHIFT_MODIFIER, and calwin. flags contains
|
|||
|
|
IN_CALWIN_1_MONTH, the new calendar contains twelve months. Otherwise if modifiers contains
|
|||
|
|
W_SHIFT_MODIFIER, the new calendar calendar contains half the current number of months.
|
|||
|
|
Otherwise if calwin. flags contains IN. CALWIN_12_MontTH, the new calendar contains one month.
|
|||
|
|
Otherwise, the new calendar contains twice the current number of months.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e de-emphasises the current calendar view by sending self a WN_EMPHASISE message and
|
|||
|
|
emphasises the new calendar view by sending a wN_EMPHASISE message to the new CALWIN object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
* writes the handle of the new cawrn object to the location pointed to by calwin.self_ptr and
|
|||
|
|
then destroys the current calendar view by sending self a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
@ retums WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is less than ox100 and corresponds to either the special keycode stored at address
|
|||
|
|
&W_ws->wserv.sc[H_SC_ILEss] or the special keycode stored at address ew_ws->wserv.sc [H_SC_ICOMMA]
|
|||
|
|
(on English language machines these are the less than symbol and the comma respectively):
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ ifmodifers contains W_CTRL_MODIFIER, moves the cursor backwards in time by seven days by
|
|||
|
|
sending a CI_MOVE_CURSOR message to calwin.calimg with an argument of CALIMG_PREV_WEEK.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e otherwise, moves the cursor backwards in time one day by sending a c1_movE_cuRsoR message to
|
|||
|
|
calwin.calimg with an argument of cALIMG PREV_DAY.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is less than ox100 and corresponds to either the special keycode stored at address
|
|||
|
|
&w_ws->wserv.sc [H_SC_IMORE] or the special keycode stored at addess ew_ws->wserv.sc{H_SC_IDOT] (on
|
|||
|
|
English language machines these are the greater than symbol and the full stop respectively):
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eee eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ ifmodifers contains W_CTRL_MODIFIER, moves the cursor forwards in time seven days by sending
|
|||
|
|
a CI_MOVE_CURSOR message to calwin.calimg with an argument of CALIMG_NEXT_WEEK.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ otherwise, moves the cursor forwards in time one day by sending a cr_move_cursor message to
|
|||
|
|
calwin.calimg with an argument of CALIMG_NEXT_DAY.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_UP and calwin. flags contains IN CALWIN_1_MONTH:
|
|||
|
|
|
|||
|
|
|
|||
|
|
* moves the cursor backwards in time one week - i.e. seven days - by sending a cl_MOVE_CURSOR
|
|||
|
|
message to calwin.calimg with an argument of cALIMG_PREV_WEEX and then returns
|
|||
|
|
WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_RIGHT and calwin. flags contains IN_CALWIN_1_MONTH:
|
|||
|
|
|
|||
|
|
|
|||
|
|
* moves the cursor forwards in time one day by sending a cr_mov=E_curRsoR message to
|
|||
|
|
calwin.calimg with an argument of caLIMc_NExT_pay and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_LEFT and modifiers contains W_SHIFT MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor backwards in time one day by sending a cr_MovE_cURSOR message to
|
|||
|
|
calwin.calimg with an argument of cALIMG_PREV_pay and then returns WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_LEFT and modifiers contains W_CTRL_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor backwards in time one month by sending a c1_Move_cuRsoR message to
|
|||
|
|
calwin.calimg with an argument of caLIMG_PREV_pay and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise, if keycode is W_KEY_LEFT:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor to the left by one day in the calendar view by sending a ct_mMovE_cURSOR
|
|||
|
|
message to calwin.calimg with an argument of caLImG_LeFr and then returns
|
|||
|
|
WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_RIGHT and modifiers contains W_SHIFT_ MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor forwards in time one day by sending a cr_move_cuRsoR message to
|
|||
|
|
calwin.calimg with an argument of caLIMG_wexT_pay and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_RIGHT and modifiers contains W_CTRL_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
* moves the cursor forwards in time one month by sending a cr_MovE_cURSOR message to
|
|||
|
|
calwin.calimg with an argument of CALIMG_NEXT_MONTH and then returns WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_RIGHT:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor to the right one day in the calendar view by sending a cr_Move_cuRSOR message
|
|||
|
|
to calwin.calimg with an argument of caLimc_RiGHT and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_uP and modifiers contains W_SHIFT_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
* moves the cursor backwards in time one week by sending a c1_MovE_cursoR message to
|
|||
|
|
calwin.calimg with an argument of cALIMG_PREV_WEEK and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_UP and modifiers contains W_CTRL_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor backwards in time one year by sending a cI_MOVE_CURSOR message to
|
|||
|
|
calwin.calimg with an argument of caLIMG_PREV_yEaR and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is w_KEY_UP:
|
|||
|
|
|
|||
|
|
|
|||
|
|
° moves the cursor upwards in the calendar view by one day by sending a cr_Move_cURSOR message
|
|||
|
|
to calwin.calimg with an argument of caLimc_up.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e retumms WN_KEY_NO_CHANGE.
|
|||
|
|
If keycode is W_KEY_DowN and modifiers contains W_SHIFT_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ moves the cursor forwards in time one week - i.e. seven days - by sending a cr_MOVE_CURSOR
|
|||
|
|
message to calwin.calimg with an argument of caLimG_NEX?T_weExK and then returns
|
|||
|
|
WN_KEY_NO_ CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_DOWN and modifiers contains W_CTRL_MODIFIER:
|
|||
|
|
|
|||
|
|
|
|||
|
|
ee ee
|
|||
|
|
3-8
|
|||
|
|
|
|||
|
|
|
|||
|
|
3 CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor forwards in time one year by sending a c1_MovE_cURSOR message to
|
|||
|
|
calwin.calimg with an argument of caLIMG_NEXT_YEAR and then returns wN_KEY_NO_ CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is w_KEY DOWN:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor downwards one day in the calendar view by sending a cr_MovE_CURSOR message
|
|||
|
|
to calwin.calimg with an argument of caLIMG_pown and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode iS W_KEY_SPACE:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor to today's date by sending a cr_MovE_cuRSoR message to calwin.calimg with an
|
|||
|
|
argument of caLIMG_GoTO_Topay and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode iS W_KEY_PAGE_UP:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor to the previous calendar page by sending a c1_MovE_cursoR message to
|
|||
|
|
calwin.calimg with an argument of cALIMG_PAGEUP.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_PAGE_DOWN:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor to the next calendar page by sending a cr_Move_cursor message to
|
|||
|
|
calwin.calimg with an argument of CALIMG_PAGEDN.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is W_KEY_HOME:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e moves the cursor horizontally to the left edge of the calendar view by sending a cr_mMovE_cuURSOR
|
|||
|
|
message tO calwin.calimg with an argument of caLIMG_HomE and then returns
|
|||
|
|
WN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If keycode is w_KEY_END:
|
|||
|
|
|
|||
|
|
|
|||
|
|
© moves the cursor horizontally to the right edge of the calendar view by sending a cI_MoVE_CURSOR
|
|||
|
|
message to calwin.calimg with an argument of caLIMGc_snp and then returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the method returns wN_KEY_NO_CHANGE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
& WN_SENS
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_sense(ULONG *psense) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
rent date
|
|||
|
|
|
|||
|
|
|
|||
|
|
Write the current date expressed as days elapsed since 1/1/1900 to the uLonc pointed to by psense.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends a cI_SENSE message to calwin.calimg.
|
|||
|
|
|
|||
|
|
|
|||
|
|
hasise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID wn_emphasise(UINT flag) ;
|
|||
|
|
Emphasise the display if £1ag is TRUE, otherwise de-emphasise the display.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sets the emphasis of the calendar view by sending a c1_EMPHASISE message to calwin.calimg With an
|
|||
|
|
argument of f1ag and then sets the emphasis of the bordered window by supersending a wN_EMPHASISE
|
|||
|
|
message with an argument of flag.
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
es eee SSSSSeSSSSSSSSSSSSSSSSSNSe
|
|||
|
|
|
|||
|
|
|
|||
|
|
EE SS ee SS aay
|
|||
|
|
Examples
|
|||
|
|
|
|||
|
|
|
|||
|
|
The following section provides some useful information on using the cazwrn class as a component in an
|
|||
|
|
application.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Creating a CALWIN component
|
|||
|
|
|
|||
|
|
|
|||
|
|
A CALWIN object may be created and initialised as follows:
|
|||
|
|
IN_CALWIN init;
|
|||
|
|
|
|||
|
|
|
|||
|
|
init .flags=IN_CALWIN_1_ MONTH;
|
|||
|
|
|
|||
|
|
p_send (self->kalwin.time,O_TO_SENSE,SENSE_TIME_DAYSEC, &ds) ;
|
|||
|
|
init.days=ds.day;
|
|||
|
|
|
|||
|
|
init .pos.x=400;
|
|||
|
|
|
|||
|
|
init.pos.y=180;
|
|||
|
|
|
|||
|
|
init .calimg=NULL;
|
|||
|
|
|
|||
|
|
init.self_ptr=&self->kalwin.calwin;
|
|||
|
|
self->kalwin.calwin=f_newsend(CAT_KAL_XADD,C_CALWIN,O_WN_INIT, &init) ;
|
|||
|
|
p_send(self->kalwin.calwin,O WN_EMPHASISE, TRUE) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The above code creates a calendar view containing one month with the current date set to the date stored in
|
|||
|
|
a TIME object. Note that large values are specified for the x and y screen coordinates to force centering of
|
|||
|
|
the image.
|
|||
|
|
|
|||
|
|
|
|||
|
|
A description of the rrme class may be found in the OLIB Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Handling keypresses
|
|||
|
|
|
|||
|
|
|
|||
|
|
The following wn_key method is suitable for an application that wishes to use a CALWIN component. It
|
|||
|
|
carries out the following operations:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if the keypress is a Tab key, and a calendar view is not present, the method launches a calendar
|
|||
|
|
window and disables the Menu and accelerator keys by writing self to w_ws->wserv. filter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e otherwise the method sends the keypress directly to the calendar view and the return value
|
|||
|
|
determines the next action.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if the return value is ww_xey_canceLLED the method destroys the catwrn object and re-enables the
|
|||
|
|
Menu and accelerator keys by writing NULL to w_ws->wserv. filter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e if the return value is ww_key_cHaNncep the method senses the current date is sensed and stores it in
|
|||
|
|
the TIME object. The method then destroys the canwrn object and re-enables the Menu and
|
|||
|
|
accelerator keys by writing NULL to w_ws->wserv. filter.
|
|||
|
|
|
|||
|
|
|
|||
|
|
3 CALENDAR CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
LOCAL_C VOID DestroyCalwin(PR_KALWIN *self)
|
|||
|
|
{
|
|||
|
|
w_ws->wserv.filter=NULL;
|
|||
|
|
hDestroy(self->kalwin.calwin) ;
|
|||
|
|
self->kalwin.calwin=NULL;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
#pragma METHOD _CALL
|
|||
|
|
|
|||
|
|
|
|||
|
|
METHOD INT kalwin_wn_key(PR_KALWIN *self,UINT keycode,UINT modifiers)
|
|||
|
|
{
|
|||
|
|
IN_CALWIN init;
|
|||
|
|
P_DAYSEC ds;
|
|||
|
|
INT ret;
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (self->kalwin.calwin)
|
|||
|
|
{
|
|||
|
|
ret=p_send4 (self->kalwin.calwin,O_WN_KEY, keycode,modifiers) ;
|
|||
|
|
if (ret==WN_KEY_CANCELLED)
|
|||
|
|
{
|
|||
|
|
DestroyCalwin (self) ;
|
|||
|
|
}
|
|||
|
|
else if (ret==WN_KEY_CHANGED)
|
|||
|
|
{
|
|||
|
|
ds.sec=0;
|
|||
|
|
p_send3 (self->kalwin.calwin,O_WN_SENSE, &ds.day) ;
|
|||
|
|
if ((ret=p_send4 (self->kalwin.time,O_TO_SET,SET_TIME_DAYSEC, &ds) ) <0}
|
|||
|
|
p_exit (ret);
|
|||
|
|
DestroyCalwin (self) ;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (keycode==W_KEY TAB)
|
|||
|
|
{
|
|||
|
|
init .flags=IN_CALWIN_1_MONTH;
|
|||
|
|
if ((ret=p_send(self->kalwin.time,O_TO_SENSE,SENSE_TIME_DAYSEC, &ds) ) <0)
|
|||
|
|
p_exit (ret) ;
|
|||
|
|
init.days=ds.day;
|
|||
|
|
init .pos.x=400;
|
|||
|
|
init.pos.y=180;
|
|||
|
|
init .calimg=NULL;
|
|||
|
|
init.self_ptr=&self->kalwin.calwin;
|
|||
|
|
self->kalwin.calwin=f_newsend(CAT_KAL XADD,C_CALWIN,O WN_INIT, &init) ;
|
|||
|
|
p_send(self->kalwin.calwin,O_WN_EMPHASISE, TRUE) ;
|
|||
|
|
w_ws->wserv.filter=(PR_WIN *)self;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return (WN_KEY CHANGED) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
CHAPTER 4
|
|||
|
|
|
|||
|
|
|
|||
|
|
AUTOMATIC TEST SYSTEM CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
This chapter documents the arssv and atst1m classes that are used to provide Series 3a automatic
|
|||
|
|
application test mechanisms, driven from another process.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Although primarily designed for application testing, the mechanism can be used for other purposes. An
|
|||
|
|
example is its use by the Series 3a Agenda application, when using the Word application to edit a memo, to
|
|||
|
|
force Word to display the dialog shown in the following illustration:
|
|||
|
|
|
|||
|
|
|
|||
|
|
Appointment
|
|||
|
|
|
|||
|
|
|
|||
|
|
ar Normal
|
|||
|
|
This is a memo Outline
|
|||
|
|
|
|||
|
|
|
|||
|
|
Change memo of repeating item
|
|||
|
|
|
|||
|
|
|
|||
|
|
‘Change which occurrencesRwig
|
|||
|
|
|
|||
|
|
|
|||
|
|
Thu 23
|
|||
|
|
|
|||
|
|
|
|||
|
|
For examples of the use of the ATS mechanism, see the Series 3a Automatic Test System chapter of the
|
|||
|
|
Object Oriented Programming Guide. See also the description of the arsptat class in the Dialog Boxes
|
|||
|
|
chapter of the HWIM Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Precursors
|
|||
|
|
Familiarity with the following topics will aid the understanding of this chapter:
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ inter-process messaging, as described in the Processes and Inter-process Messaging chapter of the
|
|||
|
|
PLIB Reference manual
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the pcs and server classes, described in the Inter-process Communication chapter of the OLIB
|
|||
|
|
Reference manual
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the timer class, described in the Timer Active Object Classes chapter of the OLIB Reference
|
|||
|
|
manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class diagram
|
|||
|
|
|
|||
|
|
|
|||
|
|
/ atssv ae a Bae
|
|||
|
|
|
|||
|
|
|
|||
|
|
> atstim >
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
ATSSV
|
|||
|
|
|
|||
|
|
|
|||
|
|
sv_init
|
|||
|
|
sv_run
|
|||
|
|
|
|||
|
|
|
|||
|
|
sv_abrun
|
|||
|
|
sv_free
|
|||
|
|
sv_key
|
|||
|
|
|
|||
|
|
|
|||
|
|
The arssv class subclasses server to provide an application with the ability to respond to inter-process
|
|||
|
|
messages with message types in the range Ty_ATS START_RANGE (0x30) to TY_ATS_END_RANGE (0x3f)
|
|||
|
|
inclusive. The following ATS inter-process message types are defined in the header file ats. h:
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_CLIENT_POS ox30 A ClientPos message, to set the application's client position in the task
|
|||
|
|
|
|||
|
|
|
|||
|
|
order.
|
|||
|
|
|
|||
|
|
TY_ATS KEY ox31 A Key message, to send a keypress to the application.
|
|||
|
|
|
|||
|
|
TY_ATS PAUSE 0x32 A Pause message, to pause the application for a specified period of
|
|||
|
|
time.
|
|||
|
|
|
|||
|
|
TY_ATS_ MESSAGE ox33 An InfoPrint message, to cause the application to display
|
|||
|
|
|
|||
|
|
|
|||
|
|
informational text.
|
|||
|
|
TY_ATS_ DIALOG ox34 A Dialog message, to cause the application to run a specified dialog.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_SELF_CHECK ox35 A SelfCheck message, to cause the application to run a self-
|
|||
|
|
consistency check.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_WINDOW_xSUM 0x36 = A Checksum message, to run a checksum on the application's display.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_RECORD ox37 A Record message, to start or stop external recording of keypresses
|
|||
|
|
received by the application.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_GET_KEY ox38 A GetKey message, used with Record, to request notification of the
|
|||
|
|
next keypress received by the application.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_ALLCOUNT ox39 An AllocCheck message, to walk the allocated cells in application's
|
|||
|
|
heap and report on the results.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
|
|||
|
|
|
|||
|
|
Defined in sub-category file atssv.cl (generated header file atssv.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS atssv server
|
|||
|
|
{
|
|||
|
|
REPLACE sv_init
|
|||
|
|
REPLACE sv_run
|
|||
|
|
REPLACE sv_abrun
|
|||
|
|
ADD sv_free
|
|||
|
|
ADD sv_key
|
|||
|
|
PROPERTY 1
|
|||
|
|
{
|
|||
|
|
PR_TIMER *timer;
|
|||
|
|
VOID *pm;
|
|||
|
|
WORD freed;
|
|||
|
|
VOID *pm_key;
|
|||
|
|
|
|||
|
|
|
|||
|
|
4 AUTOMATIC TEST SYSTEM CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
|
|||
|
|
atssv.timer Either nuut or the handle of an instance of the arst1m timer class, used to implement the
|
|||
|
|
pause facility.
|
|||
|
|
|
|||
|
|
atssv.pm A pointer to an ars_MEss struct, containing the current ATS message data.
|
|||
|
|
|
|||
|
|
|
|||
|
|
atssv.freed Set to FALSE on receipt of an inter-process ATS message, and only set to rRuE when the
|
|||
|
|
ATS message buffer is freed (by a call to p_mfree).
|
|||
|
|
|
|||
|
|
|
|||
|
|
atssv.pm_key Ifnot NULL, a pointer to the ATS message data for a Getkey message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Auxiliary structures
|
|||
|
|
|
|||
|
|
|
|||
|
|
As well as the ATS inter-process message types given earlier in this chapter, the header file ats.h contains
|
|||
|
|
the declarations of the following structures, used to construct the message buffer for an ATS inter-process
|
|||
|
|
message. An application (referred to here as the controlling process) can include azts.h to allow it to use the
|
|||
|
|
ATS mechanism, without having to have any knowledge of the ATS classes themselves (such as would be
|
|||
|
|
given by including atssv.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
The ats_DIAL_DEF struct is used to specify a dialog to be run:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
UWORD main;
|
|||
|
|
UWORD mainlen;
|
|||
|
|
UWORD buts;
|
|||
|
|
WORD butslen;
|
|||
|
|
} ATS_DIAL_DEF;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The meanings of the members of this struct are as follows:
|
|||
|
|
|
|||
|
|
|
|||
|
|
main The offset within the controlling process to a buffer containing the loaded resource for
|
|||
|
|
the dialog.
|
|||
|
|
|
|||
|
|
mainlen The length of the main resource.
|
|||
|
|
|
|||
|
|
buts Either nuuu or the offset within the controlling process to a buffer containing data for
|
|||
|
|
|
|||
|
|
|
|||
|
|
one of the dialog's controls. The data may be a choice list resource, a action list
|
|||
|
|
resource or a text string (up to 256 characters, including the terminating zero) for an
|
|||
|
|
edit box.
|
|||
|
|
|
|||
|
|
|
|||
|
|
butslen The length of the buts resource.
|
|||
|
|
|
|||
|
|
|
|||
|
|
See the Series 3a Automatic Test System chapter of the Object Oriented Programming Guide and the
|
|||
|
|
description of the arspzat class in the Dialog Boxes chapter of the HWIM Reference manual for further
|
|||
|
|
information on the ars_DIAL_DEF struct.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The ats_key_per struct contains the keycode and the modifier flags for a keypress sent by means of a
|
|||
|
|
TY_ATS_KEY inter-process message:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
UWORD key;
|
|||
|
|
UWORD mod;
|
|||
|
|
} ATS_KEY_DEF;
|
|||
|
|
|
|||
|
|
|
|||
|
|
The data of an ATS inter-process message is contained in an ats_MESS_Bopy struct:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef union
|
|||
|
|
{
|
|||
|
|
UWORD position; /* used for TY_ATS_CLIENT_POS messages */
|
|||
|
|
ATS_KEY_DEF k; /* used for TY_ATS_KEY messages */
|
|||
|
|
ATS_DIAL_DEF d; /* used for TY_ATS_ DIALOG messages */
|
|||
|
|
|
|||
|
|
|
|||
|
|
UWORD delay; /* used for TY_ATS PAUSE messages */
|
|||
|
|
|
|||
|
|
VOID toffs; /* used for TY_ATS_MESSAGE messages */
|
|||
|
|
|
|||
|
|
WORD par; /* used for TY_ATS_SELF_CHECK and TY_ATS RECORD messages */
|
|||
|
|
UWORD wid; /* used for TY_ATS_WINDOW_XSUM messages */
|
|||
|
|
|
|||
|
|
|
|||
|
|
} ATS_MESS_BODY;
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
ae eee SSS
|
|||
|
|
|
|||
|
|
|
|||
|
|
and the ATS inter-process message buffer is an ars_mess struct:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
E_MESSAGE mess;
|
|||
|
|
ATS_MESS_ BODY u;
|
|||
|
|
} ATS_MESS;
|
|||
|
|
|
|||
|
|
|
|||
|
|
See the following description of the sv_run method for the usage of the various message buffer members.
|
|||
|
|
|
|||
|
|
|
|||
|
|
When ATS is being used to record keypresses the data for each keypress, in response to a TY_ATS_GET_KEY
|
|||
|
|
message, is contained in an ats_xevy struct:
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
UWORD time;
|
|||
|
|
UWORD keycode;
|
|||
|
|
UBYTE modifiers;
|
|||
|
|
UBYTE count;
|
|||
|
|
|
|||
|
|
} ATS_KEY;
|
|||
|
|
|
|||
|
|
|
|||
|
|
This struct corresponds to the keypress event part of a window server ws_EvENT_x struct, defined in wiib. h,
|
|||
|
|
starting with its time member (that is, omitting its leading handle member).
|
|||
|
|
|
|||
|
|
|
|||
|
|
SSS SS EE SS ey
|
|||
|
|
ATSSV methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise
|
|||
|
|
VOID sv_init (VOID) ;
|
|||
|
|
Initialise the arssv object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Supersends the sv_inz7r message, passing the start and end of the range of acceptable message types as
|
|||
|
|
TY_ATS_START_RANGE and Ty_ATS_END_RANGE respectively.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note that the superclass method sends an 1P_app_sERvER to the instance of (a subclass of) the OLIB recs
|
|||
|
|
class whose handle is stored in w_am->appman.ipces. This object must therefore have been created before
|
|||
|
|
the instance of arssv is initialised. On the Series 3a an instance of rpcs and an instance of arssv are
|
|||
|
|
always created and initialised during the initialisation of the wrmman application manager.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Process an
|
|||
|
|
|
|||
|
|
|
|||
|
|
ino sssage
|
|||
|
|
VOID sv_run(ATS MESS *pm) ;
|
|||
|
|
Process the ATS inter-process message whose message buffer is pointed to by pm.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The value of atssv. freed is set to FALSE and the pointer pm is copied to atssv.pm. Further processing
|
|||
|
|
depends on the inter-process message type, stored in pm->mess.type:
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_CLIENT_POS
|
|||
|
|
Sets the application's client position by calling:
|
|||
|
|
wClientPosition(pm->u.position, 0) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
and then frees the ATS inter-process message by sending itself an sv_FREE message, with a return value of
|
|||
|
|
zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_KEY
|
|||
|
|
Processes a keypress received from another process.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The ATS inter-process message is first freed by means of an sv_FREE message, with a return value of zero.
|
|||
|
|
The method then sends w_ws a Ws_PROCESS_KEY message, with a keycode of pm->u.key keycode and a
|
|||
|
|
modifiers value of pm->u.k.mod.
|
|||
|
|
|
|||
|
|
|
|||
|
|
4 AUTOMATIC TEST SYSTEM CLASSES
|
|||
|
|
—— OEE PE OP STS TEM CLASSES |
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_PAUSE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Pauses the application.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If pm->u.delay is zero the method sends w_am an AM_YIELD message and then frees the ATS inter-process
|
|||
|
|
message by sending itself an sv_FREE message, with a return value of zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If pm->u.delay is non-zero, atssv.timer (an instance of atsTiM) is sent an AO_QUEUE message to generate
|
|||
|
|
a relative timeout with a time interval of pm->u.delay tenths of a second. If atssv.timer is NULL, an
|
|||
|
|
instance of arst1m is created and initialised, and its handle is written to atssv. timer, before the ao_QuEvE
|
|||
|
|
message is sent. If the creation or initialisation fails, p_1eave is called, resulting in atssv receiving an
|
|||
|
|
SV_ABRUN message. Otherwise, the freeing of the ATS inter-process message is handled by arstxm, at the
|
|||
|
|
completion of the pause.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_MESSAGE
|
|||
|
|
|
|||
|
|
|
|||
|
|
Displays an information message copied from another process.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The message to be displayed is copied from offset pm->u.of¢s in the process with process ID
|
|||
|
|
pm->mess.pid. This message should be a zero terminated string and may be up to 128 bytes in length,
|
|||
|
|
including the terminating zero. Before being displayed in the top left corner of the screen, by means of a
|
|||
|
|
call to the window server function winfoMsgcorner, the message is padded with two leading and two
|
|||
|
|
trailing spaces.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method finally frees the ATS inter-process message by sending itself an sv_FREE message, with a
|
|||
|
|
retum value of zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_DIALOG
|
|||
|
|
Runs an ATS dialog.
|
|||
|
|
Creates an instance of arsprat (see the Dialog Boxes chapter of the HWIM Reference manual). If the
|
|||
|
|
|
|||
|
|
|
|||
|
|
creation fails, the method frees the ATS inter-process message by sending itself an SV_FREE message, with
|
|||
|
|
a return value of &_GEN_NOMEMORY.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the dialog is sent, under the protection of p_enter, a DL_DYN_INIT message, passing the pointer
|
|||
|
|
pm and the handle, seif, of this instance of arssv. If the return value from the DL_DYN_INIT message is
|
|||
|
|
non-zero (indicating that p_leave was called) the return value is copied into the dialog's atsdial.ret
|
|||
|
|
property and the dialog is sent an o_DESTRoy message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
In all cases where the instance of arspza was successfully created, the freeing of the ATS inter-process
|
|||
|
|
message is handled by arsprat on destruction of the dialog.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_SELF_CHECK
|
|||
|
|
|
|||
|
|
|
|||
|
|
Performs an application-specific self-consistency check.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends w_ws a WS_SELF_CHECK message, passing pm->u.par and then frees the ATS inter-process message
|
|||
|
|
by sending itself an sv_FREE message, with a return value of the result returned by the WS_SELF_CHECK
|
|||
|
|
message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
It is the responsibility of the application's subclass of wseRv to provide a meaningful ws_self_check
|
|||
|
|
method.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_WINDOW_XSUM
|
|||
|
|
Performs a checksum on a specific window or on the whole screen.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Calls the window server function ginquirechecksum for the window with ID pm->u.wid (an ID of zero
|
|||
|
|
performs a checksum on the whole screen).
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method finally frees the ATS inter-process message by sending itself an SV_FREE message, with a
|
|||
|
|
return value containing the result of the checksum calculation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_RECORD
|
|||
|
|
|
|||
|
|
Starts (if pm->u.par is non-zero) or stops (if pm->u.par is FALSE) Keypress recording.
|
|||
|
|
|
|||
|
|
If attempting to start keypress recording when recording is already in progress, the method simply frees the
|
|||
|
|
ATS inter-process message by sending itself an sv_FREE message, with a return value of E_GEN_INUSE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the method sets the keypress recording state (by storing the handle of this instance of arssv in
|
|||
|
|
DatGate->gate.getkeys) and sends itself an sv_FREE message, with a return value of zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
rs er ee
|
|||
|
|
4-5
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
a ss SSS
|
|||
|
|
|
|||
|
|
|
|||
|
|
If stopping keypress recording the keypress recording state is cleared (by clearing
|
|||
|
|
DatGate->gate.getkeys). If atssv.pm_key is non-zero, indicating that a Ty_ATS_GET_KEY inter-process
|
|||
|
|
message is outstanding, that message is freed by a call to p_mfree, passing a return value of
|
|||
|
|
E_FILE_CANCEL and atssv.pm_key is set to NULL. regardless of the initial value of atssv.pm_key, the
|
|||
|
|
method finally frees the Ty_ars_Recorp inter-process message by sending itself an sv_FREE message, with
|
|||
|
|
a return value of zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_GET_KEY
|
|||
|
|
|
|||
|
|
|
|||
|
|
Transmits the next keypress to another process when in the keypress recording state.
|
|||
|
|
|
|||
|
|
|
|||
|
|
It is a programming error if an inter-process message of this type is received when the application is not in
|
|||
|
|
the keypress recording state, as set by the earlier receipt of a ry_ars_REcorD inter-process message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If atssv.pm_key is not wuLL, indicating that an inter-process message of this type is already waiting to be
|
|||
|
|
processed, the method frees the ry_ars_RECoRD inter-process message by sending itself an SV_FREE
|
|||
|
|
message, with a return value of E_GEN_INUSE.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise the method simply copies the message pointer pm to atssv.pm_key. The message will be freed
|
|||
|
|
by the execution of the sv_key method, when the application next receives a keypress.
|
|||
|
|
|
|||
|
|
|
|||
|
|
TY_ATS_ALLCOUNT
|
|||
|
|
Checks the application's heap.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Sends w_ws a WS_GET_ALLOC_INFo message, which walks the application's heap and displays an
|
|||
|
|
information message showing the number of allocated cells and the total number of bytes of allocated
|
|||
|
|
memory. The method then frees the ATS inter-process message by sending itself an sv_FREE message, with
|
|||
|
|
a return value of zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
an error
|
|||
|
|
VOID sv_abrun(ATS_MESS *pm, INT ret) ;
|
|||
|
|
Provide additional, specific, error processing.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If atssv. freed is FALSE, indicating that the ATS inter-process message has not yet been freed, the method
|
|||
|
|
frees the message by calling:
|
|||
|
|
|
|||
|
|
|
|||
|
|
p_mfree (pm, ret) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID sv_free(INT ret);
|
|||
|
|
Provide the normal means of freeing an ATS inter-process message after its processing.
|
|||
|
|
Sets atssv. freed tO TRUE, Calls:
|
|||
|
|
|
|||
|
|
|
|||
|
|
p_mfree (self->atssv.pm, ret) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
and then sends w_am->appman.ipcs aN AO_QUEUE message to queue a read for the next ATS inter-process
|
|||
|
|
message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
ypress
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID sv_key(ATS_KEY *pkey) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Report a keypress to the process that has previously registered an interest by sending an ATS inter-process
|
|||
|
|
message of type Ty_ATS_RECORD. An sv_kEy message is received from the ao_run method of the
|
|||
|
|
application's instance of a subclass of wsERv.
|
|||
|
|
|
|||
|
|
|
|||
|
|
If atssv.pm_key is NULL, the method simply returns. Otherwise, the ATS_KEY struct pointed to by pkey is
|
|||
|
|
copied to the offset atssv.pm_key->u.offs in the process with process ID atssv.pm_key->mess. pid.
|
|||
|
|
Following this, the current ATS inter-process message is freed by calling:
|
|||
|
|
|
|||
|
|
|
|||
|
|
p_mfree (self->atssv.pm_key, 0);
|
|||
|
|
|
|||
|
|
|
|||
|
|
and atssv.pm_key is set to NULL.
|
|||
|
|
|
|||
|
|
|
|||
|
|
4-6
|
|||
|
|
|
|||
|
|
|
|||
|
|
4 AUTOMATIC TEST SYSTEM CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
ATSTIM
|
|||
|
|
|
|||
|
|
|
|||
|
|
priority
|
|||
|
|
isactive
|
|||
|
|
pcb
|
|||
|
|
|
|||
|
|
stat
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy ae—tadte
|
|||
|
|
|
|||
|
|
|
|||
|
|
ao_init
|
|||
|
|
ao_run
|
|||
|
|
|
|||
|
|
|
|||
|
|
ae init ao_queue
|
|||
|
|
ao_cancel tm_qabsolute
|
|||
|
|
ao_abrun
|
|||
|
|
|
|||
|
|
ao—quere
|
|||
|
|
|
|||
|
|
ae—sen
|
|||
|
|
|
|||
|
|
|
|||
|
|
The atstim class is specifically designed for use by arssv to implement its Pause function. It is not
|
|||
|
|
expected that application code will explicitly create an instance or send messages to any instance.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file atssv.cl (generated header file atssv.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS atstim timer
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE ao_init
|
|||
|
|
REPLACE ao_run
|
|||
|
|
PROPERTY
|
|||
|
|
|
|||
|
|
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID *owner;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
atstim.owner The handle of the owning instance of arssv.
|
|||
|
|
|
|||
|
|
|
|||
|
|
ATSTIM methods
|
|||
|
|
AQINT 28 x
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_init(VOID *owner) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialise the ATS timer.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Supersends the ao_inrT message to open a channel to the Tm: device and then copies owner, the handle of
|
|||
|
|
the owning instnce of arssv to atstim.owner. The final action is to add itself to the application manager's
|
|||
|
|
task list, with priority zero, by sending w_am an AM_ADD_TASK message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
CORRE ; Pr
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT ao_run(VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
mpletion
|
|||
|
|
|
|||
|
|
|
|||
|
|
Process completion of the timer interval.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Frees the ATS inter-process message by sending atstim.ownex an SV_FREE message, with a return value of
|
|||
|
|
zero.
|
|||
|
|
|
|||
|
|
|
|||
|
|
CHAPTER 5
|
|||
|
|
|
|||
|
|
|
|||
|
|
ADDITIONAL ACTIVE OBJECT CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
This chapter documents the tocona and unLoap active object classes.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Precursors
|
|||
|
|
|
|||
|
|
|
|||
|
|
Familiarity with the following topics will aid the understanding of this chapter:
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the active class described in the ACTIVE Class and Active Objects chapter of the OLIB Reference
|
|||
|
|
|
|||
|
|
|
|||
|
|
manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the p_logona and p_logoffa PLIB routines described in the Error Handling chapter of the PLIB
|
|||
|
|
|
|||
|
|
|
|||
|
|
Reference manual.
|
|||
|
|
|
|||
|
|
|
|||
|
|
e the use of dynamic link libraries: see for example the Object Oriented Programming chapter in the
|
|||
|
|
|
|||
|
|
|
|||
|
|
PLIB Reference manual and the Building a Dynamic Library chapter in the Object Oriented
|
|||
|
|
|
|||
|
|
|
|||
|
|
Programming Guide.
|
|||
|
|
Class diagram
|
|||
|
|
si active” ;
|
|||
|
|
v tb faye
|
|||
|
|
|
|||
|
|
|
|||
|
|
7 a
|
|||
|
|
|
|||
|
|
|
|||
|
|
logona > ” unload >
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
|
|||
|
|
|
|||
|
|
LOGONA
|
|||
|
|
|
|||
|
|
|
|||
|
|
q
|
|||
|
|
priority
|
|||
|
|
isactive
|
|||
|
|
pcb
|
|||
|
|
|
|||
|
|
stat
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy ao_init
|
|||
|
|
ind ao_cancel
|
|||
|
|
ao_queue
|
|||
|
|
|
|||
|
|
|
|||
|
|
ao_run
|
|||
|
|
|
|||
|
|
|
|||
|
|
The Locona class is used to queue a request for the termination of a process to be reported. The report is
|
|||
|
|
implemented by sending a specified message to a specified owning object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Locona adds value to the PLIB p_1ogona routine by packaging the mechanism into an active object,
|
|||
|
|
thereby simplifying the detection of the completion of the asynchronous request.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file xactive.cl (generated header file xactive.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS logona active
|
|||
|
|
{
|
|||
|
|
REPLACE ao_init
|
|||
|
|
REPLACE ao_queue
|
|||
|
|
REPLACE ao_cancel
|
|||
|
|
REPLACE ao_run
|
|||
|
|
PROPERTY
|
|||
|
|
{
|
|||
|
|
UWORD pid;
|
|||
|
|
VOID *owner;
|
|||
|
|
UWORD mess;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
logona.pid The process ID of the process whose termination is to be reported.
|
|||
|
|
|
|||
|
|
|
|||
|
|
legona.owner The handle of the object to which a message should be sent on termination of the
|
|||
|
|
process.
|
|||
|
|
|
|||
|
|
|
|||
|
|
legona.mess | The method number of the message that is to be sent to logona. owner.
|
|||
|
|
|
|||
|
|
|
|||
|
|
i ee SS ee Se ee eS ee SS EE Ee
|
|||
|
|
LOGONA methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
lnitialise
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_init(UWORD pid, VOID *owner,UWORD mess};
|
|||
|
|
Initialise the Locona object.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Initialises property by writing pid to logona. pid, writing owner to logona.owner and writing mess to
|
|||
|
|
logona.mess.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Adds se1£ to the task queue by sending an am_app_TAsK message to w_am.
|
|||
|
|
|
|||
|
|
|
|||
|
|
> eS
|
|||
|
|
§-2
|
|||
|
|
|
|||
|
|
|
|||
|
|
5 THE LOGONA AND UNLOADA CLASSES
|
|||
|
|
|
|||
|
|
|
|||
|
|
Queues a request by sending self an Ao_QUEUE message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
AO_QUEUE
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_queue (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
tuest
|
|||
|
|
|
|||
|
|
|
|||
|
|
Queue a request for a report of process termination.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Queues the request by calling the p_logona PLIB routine with as arguments logona.pid and the address of
|
|||
|
|
active.stat. The call is made under the protection of the f_1eave PLIB routine.
|
|||
|
|
|
|||
|
|
|
|||
|
|
AQ_CANCEL |
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_cancel (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Cancel a queued request.
|
|||
|
|
If active .isactive is non-zero indicating that a request is active:
|
|||
|
|
° cancels the request by calling the p_logoffa PLIB routine with an argument of logona.pid.
|
|||
|
|
|
|||
|
|
|
|||
|
|
¢ — ensures that the cancel has completed by calling the p_waitstat PLIB routine with, as argument,
|
|||
|
|
the address of active. stat. :
|
|||
|
|
|
|||
|
|
|
|||
|
|
e — indicates that no request is now outstanding, by writing FALSE to active. stat.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Note: this method may safely be called if no requests are outstanding.
|
|||
|
|
|
|||
|
|
|
|||
|
|
AQ_
|
|||
|
|
|
|||
|
|
|
|||
|
|
INT ao_xrun (VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Report process.termination
|
|||
|
|
|
|||
|
|
|
|||
|
|
Report process termination.
|
|||
|
|
Reports process termination as follows:
|
|||
|
|
p_send2 (logona.owner, logona.mess) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Indicates that the event has been consumed by returning RuN_ACTIVE_USED.
|
|||
|
|
|
|||
|
|
|
|||
|
|
UNLOAD
|
|||
|
|
|
|||
|
|
|
|||
|
|
UNLOAD
|
|||
|
|
|
|||
|
|
|
|||
|
|
cathand
|
|||
|
|
|
|||
|
|
|
|||
|
|
gq
|
|||
|
|
priority
|
|||
|
|
isactive
|
|||
|
|
peb
|
|||
|
|
|
|||
|
|
stat
|
|||
|
|
|
|||
|
|
|
|||
|
|
destroy
|
|||
|
|
ao_init
|
|||
|
|
ao_run
|
|||
|
|
|
|||
|
|
|
|||
|
|
ao_cancel
|
|||
|
|
ao_abrun
|
|||
|
|
|
|||
|
|
|
|||
|
|
ao_queue
|
|||
|
|
BO—FR
|
|||
|
|
|
|||
|
|
|
|||
|
|
The untoap class is used to queue a request to unload a dynamic library. It provides a convenient means of
|
|||
|
|
ensuring that a dynamic library is not unloaded until completion of the current task - or until the next
|
|||
|
|
AM_START message is sent to the application manager.
|
|||
|
|
|
|||
|
|
|
|||
|
|
An UNLOAD object automatically assigns itself a very high priority in order to ensure rapid completion of the
|
|||
|
|
request.
|
|||
|
|
|
|||
|
|
|
|||
|
|
SSE
|
|||
|
|
5-3
|
|||
|
|
|
|||
|
|
|
|||
|
|
XADD REFERENCE
|
|||
|
|
eee
|
|||
|
|
|
|||
|
|
|
|||
|
|
The unzoap class is intended to be used in a DYL that is loaded by a mechanism such as that provided by
|
|||
|
|
the WSERV ws_launch_dy1 method - that is, where an instance of a single class in the DYL is created and
|
|||
|
|
initialised immediately after the DYL is loaded. The untoan class should be made a component of the class
|
|||
|
|
in the DYL that is created and initialised and should receive a pesTRoy message when that class is
|
|||
|
|
destroyed. Since initialisation failures are handled by the mechanism of the ws_1launch_ay1 method, the
|
|||
|
|
instance of unLoap should not be created and initialised until all other initialisation is complete. Doing this
|
|||
|
|
ensures that the instance of untoap will only receive a pesTRoy message in circumstances where unloading
|
|||
|
|
the DYL is a valid operation.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Class definition
|
|||
|
|
Defined in sub-category file xactive.cl (generated header file xactive.g).
|
|||
|
|
|
|||
|
|
|
|||
|
|
CLASS unload active
|
|||
|
|
|
|||
|
|
|
|||
|
|
REPLACE destroy
|
|||
|
|
REPLACE ao_init
|
|||
|
|
REPLACE ao_run
|
|||
|
|
PROPERTY
|
|||
|
|
|
|||
|
|
|
|||
|
|
HANDLE cathand;
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
Property
|
|||
|
|
unload.cathand The handle of the category to be unloaded.
|
|||
|
|
|
|||
|
|
|
|||
|
|
UNLOAD methods
|
|||
|
|
|
|||
|
|
|
|||
|
|
_ Destroy
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID destroy (VOID) ;
|
|||
|
|
Destroy the untoap object.
|
|||
|
|
If unload. cathand is non-zero, sends self an AO_QUEUE message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Otherwise sends self a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_init (HANDLE cathand) ;
|
|||
|
|
Initialise the untoap object.
|
|||
|
|
Writes cathana, the handle of the category to be unloaded, to unload. cathand.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Assigns itself a high priority by writing pRIORITY_ACTIVE_POSTER tO active.priority and then adds itself
|
|||
|
|
to the application manager's task queue by sending w_am an AM_ADD_TASK message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
A
|
|||
|
|
|
|||
|
|
|
|||
|
|
VOID ao_run(VOID) ;
|
|||
|
|
|
|||
|
|
|
|||
|
|
Process completion
|
|||
|
|
|
|||
|
|
|
|||
|
|
Unload the target category.
|
|||
|
|
|
|||
|
|
|
|||
|
|
Unloads the category specified by unload. cathand by calling the p_unloadiib PLIB routine and then
|
|||
|
|
sends self a DESTROY message.
|
|||
|
|
|
|||
|
|
|
|||
|
|
The method returns RUN_ACTIVE_USED.
|
|||
|
|
|
|||
|
|
|
|||
|
|
INDEX
|
|||
|
|
|
|||
|
|
|
|||
|
|
AO_CANCEL, 5-3
|
|||
|
|
AO_INIT, 4-7, 5-2, 5-4
|
|||
|
|
AO_QUEUE, 5-3
|
|||
|
|
|
|||
|
|
AO_RUN, 4-7, 5-3, 5-4
|
|||
|
|
|
|||
|
|
COM _EXIT, 2-23
|
|||
|
|
COM_INIT, 2-22
|
|||
|
|
COM_MENU, 2-22
|
|||
|
|
DESTROY, 2-3, 2-10, 3-4, 5-4
|
|||
|
|
DL_DYN_INIT, 2-25, 2-27
|
|||
|
|
DL_KEY, 2-25, 2-27
|
|||
|
|
LPR_INIT, 2-3
|
|||
|
|
PVC_PREVIEW EXIT, 2-24
|
|||
|
|
PVC_PREVIEW_JUMP, 2-23
|
|||
|
|
PVC_PREVIEW_MARGINS, 2-23
|
|||
|
|
PVC_PREVIEW_ OPTIONS, 2-23
|
|||
|
|
PVC_PREVIEW PRINT, 2-23
|
|||
|
|
PVV_DONE, 2-14
|
|||
|
|
PVV_INIT, 2-15
|
|||
|
|
PVV_MARGINS, 2-15
|
|||
|
|
PVV_NEW_PAGE, 2-15
|
|||
|
|
PVV_PAGES DONE, 2-15
|
|||
|
|
SV_ABRUN, 4-6
|
|||
|
|
|
|||
|
|
SV_FREE, 4-6
|
|||
|
|
|
|||
|
|
SV_INIT, 4-4
|
|||
|
|
|
|||
|
|
SV_KEY, 4-6
|
|||
|
|
|
|||
|
|
SV_RUN, 4-4
|
|||
|
|
WN_DODRAW, 2-20
|
|||
|
|
WN_DRAW, 2-12, 2-17, 2-20
|
|||
|
|
WN_EMPHASISE, 3-9
|
|||
|
|
WN_INIT,-2-12, 2-17, 2-21, 3-5
|
|||
|
|
WN_KEY, 2-11, 3-7
|
|||
|
|
WN_REDRAW, 3-2
|
|||
|
|
WN_SENSE, 3-9
|
|||
|
|
WN_SENSE_HELP, 2-10
|
|||
|
|
WN_SET, 2-12, 2-17
|
|||
|
|
|
|||
|
|
|
|||
|
|
kab
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|
|||
|
|
ee
|
|||
|
|
|
|||
|
|
ss cemeel heron
|
|||
|
|
b « BP Bhs ia,
|
|||
|
|
‘ EP Te MOT A
|
|||
|
|
; 2Pe PO |! Wa
|
|||
|
|
; She Tih wax
|
|||
|
|
|
|||
|
|
ese Ata a2
|
|||
|
|
|
|||
|
|
|
|||
|
|
fe fe hear MC fee gn
|
|||
|
|
7a TE TAL ON eS |
|
|||
|
|
fet HE NA io
|
|||
|
|
|
|||
|
|
|
|||
|
|
Get f
|
|||
|
|
|
|||
|
|
bf, 1 RNS oe ©
|
|||
|
|
tes an WAR V4
|
|||
|
|
|
|||
|
|
‘T eat AM WarzaaT ov
|
|||
|
|
|
|||
|
|
re £. Slag we v4
|
|||
|
|
|
|||
|
|
|
|||
|
|
£1 VEN a re
|
|||
|
|
Ab AM
|
|||
|
|
> e Sans
|
|||
|
|
fe ee
|
|||
|
|
we 77 *
|
|||
|
|
ph gilt
|
|||
|
|
|
|||
|
|
|