toolbar.p 508 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480
  1. &ANALYZE-SUSPEND _VERSION-NUMBER AB_v10r12
  2. &ANALYZE-RESUME
  3. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS Procedure
  4. /***********************************************************************
  5. * Copyright (C) 2005-2007 by Progress Software Corporation. All rights *
  6. * reserved. Prior versions of this work may contain portions *
  7. * contributed by participants of Possenet. *
  8. * *
  9. ***********************************************************************/
  10. /*--------------------------------------------------------------------------
  11. File : toolbar.p
  12. Purpose : Super procedure for toolbar class.
  13. Syntax : RUN start-super-proc("adm2/toolbar.p":U).
  14. Notes : The toolbar currently only creates one Band per instance while
  15. the repository allows multiple instances of the same band on
  16. a toolbar.
  17. This is mainly due to the fact that the key to various
  18. construct* APIs uses the Band as parameter. The fact that there
  19. also is an action created for each band is also relying on
  20. the band name being unique.
  21. - Supporting multiple Bands per toolbar would require that
  22. the Bandinstance key is changed to something unique. It could
  23. possibly just use the menukey, but this complicates things
  24. when it comes to the action name and also when building the
  25. menukey as the menukey is parentmenukey + action. This would
  26. not work very well if the action is the menukey.
  27. - (Although this sounds complicated it is likely that a fix
  28. to support this would/could end up simplifying the
  29. relationships)
  30. -------------------------------------------------------------------------- */
  31. /* *************************** Definitions ************************** */
  32. &SCOP ADMSuper toolbar.p
  33. &SCOP adm-panel-type toolbar
  34. /* Support customization of action class, which no longer exists */
  35. {src/adm2/custom/actionexclcustom.i}
  36. /* Custom exclude file */
  37. {src/adm2/custom/toolbarexclcustom.i}
  38. /**** action definitions ****/
  39. {src/adm2/ttaction.i}
  40. /* delimiter used between action names in unique menukey */
  41. &SCOPED-DEFINE pathdlm CHR(1)
  42. /* menu widget-pool prefix (menus need to survive their constructor) */
  43. &SCOPED-DEFINE menuwidgetpool 'menubar-':U
  44. /* This variable is needed at least temporarily in 9.1B so that a called
  45. fn can tell who the actual source was. */
  46. DEFINE VARIABLE ghTargetProcedure AS HANDLE NO-UNDO.
  47. /* class property */
  48. DEFINE VARIABLE glActionsLoaded AS LOG NO-UNDO.
  49. /* Used in resizeObject to determine when initialization is complete */
  50. DEFINE VARIABLE glInitComplete AS LOGICAL NO-UNDO.
  51. /* Used to store the image directory */
  52. DEFINE VARIABLE gcImageDirectory AS CHAR NO-UNDO.
  53. DEFINE VARIABLE xcNoCategory AS CHARACTER NO-UNDO INIT '<none>':U.
  54. DEFINE VARIABLE xcWindowBand AS CHARACTER NO-UNDO INIT 'Window':U.
  55. /* We define a dynamic table and buffer to store all functions that are basis of a
  56. rule, in the case where some of the fields are not found we try again each time
  57. the link changes, but we do not want to go on and do this forever, so we have a
  58. predefined limit of attempted tries (2 may be sufficient.. )*/
  59. DEFINE VARIABLE xiMaxLinkChecks AS INTEGER INIT 3 NO-UNDO.
  60. /* This manages the various dynamic temptables created to store func names and
  61. values for a linked target */
  62. DEFINE TEMP-TABLE ttLinkRuleTable NO-UNDO
  63. FIELD ProcedureHandle AS HANDLE
  64. FIELD LinkName AS CHAR
  65. FIELD TableHandle AS HANDLE
  66. FIELD BufferHandle AS HANDLE
  67. FIELD LinkHandles AS CHAR
  68. FIELD NumErrors AS INTEGER
  69. INDEX Link LinkName ProcedureHandle.
  70. /* For performance purposes, we do the find directly in action.
  71. pcAction is a mandatory variable name for the action
  72. &scop-define targetproc must define a handle if used where target-procedure
  73. cannot be used. Note that this is undefined as soon as it is used */
  74. &SCOPED-DEFINE findAction ~
  75. IF (AVAIL ttAction AND ttAction.Action <> pcAction) OR NOT AVAIL ttAction THEN DO: ~
  76. FIND FIRST ttAction WHERE ttAction.Action = pcAction ~
  77. AND ttAction.ProcedureHandle = THIS-PROCEDURE NO-ERROR. ~
  78. IF NOT AVAILABLE ttAction THEN ~
  79. FIND ttAction WHERE ttAction.Action = pcAction~
  80. AND ttAction.ProcedureHandle =~
  81. &IF DEFINED(targetproc) <> 0 &THEN~
  82. ~{&targetproc~}~
  83. &UNDEFINE targetproc~
  84. &ELSE~
  85. TARGET-PROCEDURE~
  86. &ENDIF~
  87. NO-ERROR. ~
  88. END.
  89. {src/adm2/tttoolbar.i}
  90. /* The main purpose of this TT is to link Repository Bands to physical bands
  91. Repository bands are unique, but 'File-x' and 'File-z' may both really be
  92. File at runtime. There is some redundancy as most of the info also is in
  93. tMenu, but the Band is not. */
  94. DEFINE TEMP-TABLE tBandInstance NO-UNDO
  95. FIELD hTarget AS HANDLE
  96. FIELD Band AS CHAR /* repository key. API key. */
  97. /* logical key and also join to the tMenu.name. many instances can have the
  98. same name i.e be in the same band */
  99. FIELD MenuName AS CHAR
  100. /* Unique within a menubar join to tMenu children with parentmenukey */
  101. FIELD LastSeq AS INT
  102. FIELD MenuKey AS CHAR
  103. FIELD Hdl AS HANDLE
  104. FIELD RefreshBand AS LOG
  105. FIELD MenuBarHdl AS HANDLE /* currently only set for objectbands */
  106. FIELD ObjectName AS CHAR /* object of objectband */
  107. /* Used to identify bands whose items is added directly on the placeholder's
  108. position (InsertSubMenu = FALSE) */
  109. FIELD PlaceHolder AS CHAR
  110. /* Used to sort items added directly on the placeholder's position */
  111. FIELD PlaceholderSeq AS INT
  112. INDEX Hdl Hdl hTarget
  113. INDEX hTarget as unique hTarget Band
  114. INDEX menubarhdl MenuBarHdl ObjectName Band
  115. INDEX menuname MenuName hTarget
  116. INDEX menukey MenuKey hTarget
  117. INDEX placeholder PlaceHolder PlaceholderSeq
  118. INDEX targetplaceholder hTarget PlaceHolder.
  119. DEFINE TEMP-TABLE tMenu NO-UNDO
  120. FIELD hTarget AS HANDLE
  121. FIELD Name AS CHARACTER
  122. FIELD MergeOrder AS INTEGER
  123. FIELD Caption AS CHARACTER
  124. FIELD Link AS CHARACTER
  125. FIELD HasLink AS LOGICAL
  126. FIELD Hdl AS HANDLE
  127. FIELD ChildLinks AS CHARACTER
  128. FIELD ChildLabels AS CHARACTER
  129. FIELD SubHdls AS CHARACTER
  130. FIELD MenuBarHdl AS HANDLE
  131. FIELD PageNo AS INTEGER
  132. FIELD Parent AS CHARACTER
  133. FIELD ParentMenuKey AS CHARACTER
  134. FIELD Seq AS INTEGER
  135. FIELD Refresh AS LOGICAL
  136. FIELD Sensitive AS LOGICAL
  137. FIELD Disabled AS LOGICAL
  138. FIELD CaptionSubst AS LOGICAL
  139. INDEX Name Name hTarget Parent Seq
  140. INDEX Link hTarget Link Seq
  141. INDEX Disabled hTarget Disabled
  142. INDEX Hdl Hdl hTarget
  143. INDEX BandSort MenuBarHdl ParentMenuKey MergeOrder PageNo hTarget Seq
  144. INDEX MenuSiblingKey MenuBarHdl ParentMenuKey NAME
  145. INDEX Parent AS PRIMARY hTarget Parent Seq.
  146. DEFINE TEMP-TABLE tButton NO-UNDO
  147. FIELD hTarget AS HANDLE
  148. FIELD Name AS CHAR
  149. FIELD Band AS CHAR
  150. FIELD Link AS CHAR
  151. FIELD ImageAlt AS LOG INIT ?
  152. FIELD Position AS INT /* initial position, used for sorting */
  153. FIELD Hdl AS HANDLE
  154. FIELD Disabled AS LOG
  155. FIELD Sensitive AS LOG
  156. FIELD LabelSubst AS LOG
  157. FIELD TooltipSubst AS LOG
  158. INDEX Target AS PRIMARY hTarget Position
  159. INDEX Band Band hTarget Position
  160. INDEX Link hTarget Link Position
  161. INDEX Name Name Band hTarget.
  162. DEFINE TEMP-TABLE ttSubMergeTarget
  163. FIELD BandROWID AS ROWID
  164. FIELD hTarget AS HANDLE.
  165. /* _UIB-CODE-BLOCK-END */
  166. &ANALYZE-RESUME
  167. &ANALYZE-SUSPEND _UIB-PREPROCESSOR-BLOCK
  168. /* ******************** Preprocessor Definitions ******************** */
  169. &Scoped-define PROCEDURE-TYPE Procedure
  170. &Scoped-define DB-AWARE no
  171. /* _UIB-PREPROCESSOR-BLOCK-END */
  172. &ANALYZE-RESUME
  173. /* ************************ Function Prototypes ********************** */
  174. &IF DEFINED(EXCLUDE-actionAccelerator) = 0 &THEN
  175. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionAccelerator Procedure
  176. FUNCTION actionAccelerator RETURNS CHARACTER
  177. (pcAction AS CHAR) FORWARD.
  178. /* _UIB-CODE-BLOCK-END */
  179. &ANALYZE-RESUME
  180. &ENDIF
  181. &IF DEFINED(EXCLUDE-actionAccessType) = 0 &THEN
  182. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionAccessType Procedure
  183. FUNCTION actionAccessType RETURNS CHARACTER
  184. (pcAction AS CHAR) FORWARD.
  185. /* _UIB-CODE-BLOCK-END */
  186. &ANALYZE-RESUME
  187. &ENDIF
  188. &IF DEFINED(EXCLUDE-actionCanLaunch) = 0 &THEN
  189. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCanLaunch Procedure
  190. FUNCTION actionCanLaunch RETURNS LOGICAL
  191. ( pcAction AS CHAR ) FORWARD.
  192. /* _UIB-CODE-BLOCK-END */
  193. &ANALYZE-RESUME
  194. &ENDIF
  195. &IF DEFINED(EXCLUDE-actionCanRun) = 0 &THEN
  196. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCanRun Procedure
  197. FUNCTION actionCanRun RETURNS LOGICAL
  198. (pcAction AS CHAR) FORWARD.
  199. /* _UIB-CODE-BLOCK-END */
  200. &ANALYZE-RESUME
  201. &ENDIF
  202. &IF DEFINED(EXCLUDE-actionCaption) = 0 &THEN
  203. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCaption Procedure
  204. FUNCTION actionCaption RETURNS CHARACTER
  205. ( pcAction AS CHAR ) FORWARD.
  206. /* _UIB-CODE-BLOCK-END */
  207. &ANALYZE-RESUME
  208. &ENDIF
  209. &IF DEFINED(EXCLUDE-actionCategory) = 0 &THEN
  210. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCategory Procedure
  211. FUNCTION actionCategory RETURNS CHARACTER
  212. (pcAction AS CHAR) FORWARD.
  213. /* _UIB-CODE-BLOCK-END */
  214. &ANALYZE-RESUME
  215. &ENDIF
  216. &IF DEFINED(EXCLUDE-actionCategoryIsHidden) = 0 &THEN
  217. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCategoryIsHidden Procedure
  218. FUNCTION actionCategoryIsHidden RETURNS LOGICAL
  219. (pcAction AS CHAR) FORWARD.
  220. /* _UIB-CODE-BLOCK-END */
  221. &ANALYZE-RESUME
  222. &ENDIF
  223. &IF DEFINED(EXCLUDE-actionChecked) = 0 &THEN
  224. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionChecked Procedure
  225. FUNCTION actionChecked RETURNS LOGICAL
  226. (pcAction AS CHAR) FORWARD.
  227. /* _UIB-CODE-BLOCK-END */
  228. &ANALYZE-RESUME
  229. &ENDIF
  230. &IF DEFINED(EXCLUDE-actionChildren) = 0 &THEN
  231. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionChildren Procedure
  232. FUNCTION actionChildren RETURNS CHARACTER
  233. (pcAction AS CHAR) FORWARD.
  234. /* _UIB-CODE-BLOCK-END */
  235. &ANALYZE-RESUME
  236. &ENDIF
  237. &IF DEFINED(EXCLUDE-actionControlType) = 0 &THEN
  238. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionControlType Procedure
  239. FUNCTION actionControlType RETURNS CHARACTER
  240. (pcAction AS CHAR) FORWARD.
  241. /* _UIB-CODE-BLOCK-END */
  242. &ANALYZE-RESUME
  243. &ENDIF
  244. &IF DEFINED(EXCLUDE-actionCreateEvent) = 0 &THEN
  245. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionCreateEvent Procedure
  246. FUNCTION actionCreateEvent RETURNS CHARACTER
  247. (pcAction AS CHAR) FORWARD.
  248. /* _UIB-CODE-BLOCK-END */
  249. &ANALYZE-RESUME
  250. &ENDIF
  251. &IF DEFINED(EXCLUDE-actionDescription) = 0 &THEN
  252. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionDescription Procedure
  253. FUNCTION actionDescription RETURNS CHARACTER
  254. (pcAction AS CHAR) FORWARD.
  255. /* _UIB-CODE-BLOCK-END */
  256. &ANALYZE-RESUME
  257. &ENDIF
  258. &IF DEFINED(EXCLUDE-actionDisabled) = 0 &THEN
  259. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionDisabled Procedure
  260. FUNCTION actionDisabled RETURNS LOGICAL
  261. (pcAction AS CHAR) FORWARD.
  262. /* _UIB-CODE-BLOCK-END */
  263. &ANALYZE-RESUME
  264. &ENDIF
  265. &IF DEFINED(EXCLUDE-actionEnableRule) = 0 &THEN
  266. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionEnableRule Procedure
  267. FUNCTION actionEnableRule RETURNS CHARACTER
  268. (pcAction AS CHAR) FORWARD.
  269. /* _UIB-CODE-BLOCK-END */
  270. &ANALYZE-RESUME
  271. &ENDIF
  272. &IF DEFINED(EXCLUDE-actionGroups) = 0 &THEN
  273. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionGroups Procedure
  274. FUNCTION actionGroups RETURNS CHARACTER
  275. () FORWARD.
  276. /* _UIB-CODE-BLOCK-END */
  277. &ANALYZE-RESUME
  278. &ENDIF
  279. &IF DEFINED(EXCLUDE-actionHideRule) = 0 &THEN
  280. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionHideRule Procedure
  281. FUNCTION actionHideRule RETURNS CHARACTER
  282. (pcAction AS CHAR) FORWARD.
  283. /* _UIB-CODE-BLOCK-END */
  284. &ANALYZE-RESUME
  285. &ENDIF
  286. &IF DEFINED(EXCLUDE-actionImage) = 0 &THEN
  287. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionImage Procedure
  288. FUNCTION actionImage RETURNS CHARACTER
  289. (pcAction AS CHAR) FORWARD.
  290. /* _UIB-CODE-BLOCK-END */
  291. &ANALYZE-RESUME
  292. &ENDIF
  293. &IF DEFINED(EXCLUDE-actionImageAlternate) = 0 &THEN
  294. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionImageAlternate Procedure
  295. FUNCTION actionImageAlternate RETURNS CHARACTER
  296. (pcAction AS CHAR) FORWARD.
  297. /* _UIB-CODE-BLOCK-END */
  298. &ANALYZE-RESUME
  299. &ENDIF
  300. &IF DEFINED(EXCLUDE-actionImageAlternateRule) = 0 &THEN
  301. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionImageAlternateRule Procedure
  302. FUNCTION actionImageAlternateRule RETURNS CHARACTER
  303. (pcAction AS CHAR) FORWARD.
  304. /* _UIB-CODE-BLOCK-END */
  305. &ANALYZE-RESUME
  306. &ENDIF
  307. &IF DEFINED(EXCLUDE-actionInitCode) = 0 &THEN
  308. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionInitCode Procedure
  309. FUNCTION actionInitCode RETURNS CHARACTER
  310. (pcAction AS CHAR) FORWARD.
  311. /* _UIB-CODE-BLOCK-END */
  312. &ANALYZE-RESUME
  313. &ENDIF
  314. &IF DEFINED(EXCLUDE-actionIsMenu) = 0 &THEN
  315. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionIsMenu Procedure
  316. FUNCTION actionIsMenu RETURNS LOGICAL
  317. (pcAction AS CHAR) FORWARD.
  318. /* _UIB-CODE-BLOCK-END */
  319. &ANALYZE-RESUME
  320. &ENDIF
  321. &IF DEFINED(EXCLUDE-actionIsParent) = 0 &THEN
  322. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionIsParent Procedure
  323. FUNCTION actionIsParent RETURNS LOGICAL
  324. (pcAction AS CHAR) FORWARD.
  325. /* _UIB-CODE-BLOCK-END */
  326. &ANALYZE-RESUME
  327. &ENDIF
  328. &IF DEFINED(EXCLUDE-actionLabel) = 0 &THEN
  329. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionLabel Procedure
  330. FUNCTION actionLabel RETURNS CHARACTER
  331. ( pcAction AS CHAR ) FORWARD.
  332. /* _UIB-CODE-BLOCK-END */
  333. &ANALYZE-RESUME
  334. &ENDIF
  335. &IF DEFINED(EXCLUDE-actionLink) = 0 &THEN
  336. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionLink Procedure
  337. FUNCTION actionLink RETURNS CHARACTER
  338. (pcAction AS CHAR) FORWARD.
  339. /* _UIB-CODE-BLOCK-END */
  340. &ANALYZE-RESUME
  341. &ENDIF
  342. &IF DEFINED(EXCLUDE-actionLogicalObjectName) = 0 &THEN
  343. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionLogicalObjectName Procedure
  344. FUNCTION actionLogicalObjectName RETURNS CHARACTER
  345. (pcAction AS CHAR) FORWARD.
  346. /* _UIB-CODE-BLOCK-END */
  347. &ANALYZE-RESUME
  348. &ENDIF
  349. &IF DEFINED(EXCLUDE-actionName) = 0 &THEN
  350. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionName Procedure
  351. FUNCTION actionName RETURNS CHARACTER
  352. (pcAction AS CHAR) FORWARD.
  353. /* _UIB-CODE-BLOCK-END */
  354. &ANALYZE-RESUME
  355. &ENDIF
  356. &IF DEFINED(EXCLUDE-actionOnChoose) = 0 &THEN
  357. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionOnChoose Procedure
  358. FUNCTION actionOnChoose RETURNS CHARACTER
  359. (pcAction AS CHAR) FORWARD.
  360. /* _UIB-CODE-BLOCK-END */
  361. &ANALYZE-RESUME
  362. &ENDIF
  363. &IF DEFINED(EXCLUDE-actionParameter) = 0 &THEN
  364. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionParameter Procedure
  365. FUNCTION actionParameter RETURNS CHARACTER
  366. (pcAction AS CHAR) FORWARD.
  367. /* _UIB-CODE-BLOCK-END */
  368. &ANALYZE-RESUME
  369. &ENDIF
  370. &IF DEFINED(EXCLUDE-actionParent) = 0 &THEN
  371. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionParent Procedure
  372. FUNCTION actionParent RETURNS CHARACTER
  373. (pcAction AS CHAR) FORWARD.
  374. /* _UIB-CODE-BLOCK-END */
  375. &ANALYZE-RESUME
  376. &ENDIF
  377. &IF DEFINED(EXCLUDE-actionPhysicalObjectName) = 0 &THEN
  378. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionPhysicalObjectName Procedure
  379. FUNCTION actionPhysicalObjectName RETURNS CHARACTER
  380. (pcAction AS CHAR) FORWARD.
  381. /* _UIB-CODE-BLOCK-END */
  382. &ANALYZE-RESUME
  383. &ENDIF
  384. &IF DEFINED(EXCLUDE-actionPublishCreate) = 0 &THEN
  385. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionPublishCreate Procedure
  386. FUNCTION actionPublishCreate RETURNS LOGICAL
  387. ( pcAction AS CHAR) FORWARD.
  388. /* _UIB-CODE-BLOCK-END */
  389. &ANALYZE-RESUME
  390. &ENDIF
  391. &IF DEFINED(EXCLUDE-actionRefresh) = 0 &THEN
  392. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionRefresh Procedure
  393. FUNCTION actionRefresh RETURNS LOGICAL
  394. (pcAction AS CHAR) FORWARD.
  395. /* _UIB-CODE-BLOCK-END */
  396. &ANALYZE-RESUME
  397. &ENDIF
  398. &IF DEFINED(EXCLUDE-actionRunAttribute) = 0 &THEN
  399. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionRunAttribute Procedure
  400. FUNCTION actionRunAttribute RETURNS CHARACTER
  401. (pcAction AS CHAR) FORWARD.
  402. /* _UIB-CODE-BLOCK-END */
  403. &ANALYZE-RESUME
  404. &ENDIF
  405. &IF DEFINED(EXCLUDE-actions) = 0 &THEN
  406. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actions Procedure
  407. FUNCTION actions RETURNS CHARACTER
  408. (INPUT pcActionType AS CHARACTER) FORWARD.
  409. /* _UIB-CODE-BLOCK-END */
  410. &ANALYZE-RESUME
  411. &ENDIF
  412. &IF DEFINED(EXCLUDE-actionSecondImage) = 0 &THEN
  413. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionSecondImage Procedure
  414. FUNCTION actionSecondImage RETURNS CHARACTER
  415. (pcAction AS CHAR) FORWARD.
  416. /* _UIB-CODE-BLOCK-END */
  417. &ANALYZE-RESUME
  418. &ENDIF
  419. &IF DEFINED(EXCLUDE-actionSecuredToken) = 0 &THEN
  420. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionSecuredToken Procedure
  421. FUNCTION actionSecuredToken RETURNS CHARACTER
  422. (pcAction AS CHAR) FORWARD.
  423. /* _UIB-CODE-BLOCK-END */
  424. &ANALYZE-RESUME
  425. &ENDIF
  426. &IF DEFINED(EXCLUDE-actionSubstituteProperty) = 0 &THEN
  427. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionSubstituteProperty Procedure
  428. FUNCTION actionSubstituteProperty RETURNS CHARACTER
  429. (pcAction AS CHAR) FORWARD.
  430. /* _UIB-CODE-BLOCK-END */
  431. &ANALYZE-RESUME
  432. &ENDIF
  433. &IF DEFINED(EXCLUDE-actionTarget) = 0 &THEN
  434. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionTarget Procedure
  435. FUNCTION actionTarget RETURNS HANDLE
  436. (pcAction AS CHAR) FORWARD.
  437. /* _UIB-CODE-BLOCK-END */
  438. &ANALYZE-RESUME
  439. &ENDIF
  440. &IF DEFINED(EXCLUDE-actionTooltip) = 0 &THEN
  441. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionTooltip Procedure
  442. FUNCTION actionTooltip RETURNS CHARACTER
  443. ( pcAction AS CHAR ) FORWARD.
  444. /* _UIB-CODE-BLOCK-END */
  445. &ANALYZE-RESUME
  446. &ENDIF
  447. &IF DEFINED(EXCLUDE-actionType) = 0 &THEN
  448. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD actionType Procedure
  449. FUNCTION actionType RETURNS CHARACTER
  450. (pcAction AS CHAR) FORWARD.
  451. /* _UIB-CODE-BLOCK-END */
  452. &ANALYZE-RESUME
  453. &ENDIF
  454. &IF DEFINED(EXCLUDE-activeTarget) = 0 &THEN
  455. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD activeTarget Procedure
  456. FUNCTION activeTarget RETURNS HANDLE
  457. ( pcLink AS CHAR ) FORWARD.
  458. /* _UIB-CODE-BLOCK-END */
  459. &ANALYZE-RESUME
  460. &ENDIF
  461. &IF DEFINED(EXCLUDE-adjustActions) = 0 &THEN
  462. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD adjustActions Procedure
  463. FUNCTION adjustActions RETURNS LOGICAL
  464. ( ) FORWARD.
  465. /* _UIB-CODE-BLOCK-END */
  466. &ANALYZE-RESUME
  467. &ENDIF
  468. &IF DEFINED(EXCLUDE-assignActionAccelerator) = 0 &THEN
  469. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionAccelerator Procedure
  470. FUNCTION assignActionAccelerator RETURNS LOGICAL
  471. (pcId AS CHAR,
  472. pcValue AS CHAR) FORWARD.
  473. /* _UIB-CODE-BLOCK-END */
  474. &ANALYZE-RESUME
  475. &ENDIF
  476. &IF DEFINED(EXCLUDE-assignActionAccessType) = 0 &THEN
  477. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionAccessType Procedure
  478. FUNCTION assignActionAccessType RETURNS LOGICAL
  479. (pcId AS CHAR,
  480. pcValue AS CHAR) FORWARD.
  481. /* _UIB-CODE-BLOCK-END */
  482. &ANALYZE-RESUME
  483. &ENDIF
  484. &IF DEFINED(EXCLUDE-assignActionCaption) = 0 &THEN
  485. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionCaption Procedure
  486. FUNCTION assignActionCaption RETURNS LOGICAL
  487. (pcId AS CHAR,
  488. pcValue AS CHAR) FORWARD.
  489. /* _UIB-CODE-BLOCK-END */
  490. &ANALYZE-RESUME
  491. &ENDIF
  492. &IF DEFINED(EXCLUDE-assignActionDescription) = 0 &THEN
  493. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionDescription Procedure
  494. FUNCTION assignActionDescription RETURNS LOGICAL
  495. (pcId AS CHAR,
  496. pcValue AS CHAR) FORWARD.
  497. /* _UIB-CODE-BLOCK-END */
  498. &ANALYZE-RESUME
  499. &ENDIF
  500. &IF DEFINED(EXCLUDE-assignActionEnableRule) = 0 &THEN
  501. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionEnableRule Procedure
  502. FUNCTION assignActionEnableRule RETURNS LOGICAL
  503. (pcId AS CHAR,
  504. pcValue AS CHAR) FORWARD.
  505. /* _UIB-CODE-BLOCK-END */
  506. &ANALYZE-RESUME
  507. &ENDIF
  508. &IF DEFINED(EXCLUDE-assignActionHideRule) = 0 &THEN
  509. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionHideRule Procedure
  510. FUNCTION assignActionHideRule RETURNS LOGICAL
  511. (pcId AS CHAR,
  512. pcValue AS CHAR) FORWARD.
  513. /* _UIB-CODE-BLOCK-END */
  514. &ANALYZE-RESUME
  515. &ENDIF
  516. &IF DEFINED(EXCLUDE-assignActionImage) = 0 &THEN
  517. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionImage Procedure
  518. FUNCTION assignActionImage RETURNS LOGICAL
  519. (pcId AS CHAR,
  520. pcValue AS CHAR) FORWARD.
  521. /* _UIB-CODE-BLOCK-END */
  522. &ANALYZE-RESUME
  523. &ENDIF
  524. &IF DEFINED(EXCLUDE-assignActionImageAlternateRule) = 0 &THEN
  525. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionImageAlternateRule Procedure
  526. FUNCTION assignActionImageAlternateRule RETURNS LOGICAL
  527. (pcId AS CHAR,
  528. pcValue AS CHAR) FORWARD.
  529. /* _UIB-CODE-BLOCK-END */
  530. &ANALYZE-RESUME
  531. &ENDIF
  532. &IF DEFINED(EXCLUDE-assignActionLabel) = 0 &THEN
  533. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionLabel Procedure
  534. FUNCTION assignActionLabel RETURNS LOGICAL
  535. (pcId AS CHAR,
  536. pcValue AS CHAR) FORWARD.
  537. /* _UIB-CODE-BLOCK-END */
  538. &ANALYZE-RESUME
  539. &ENDIF
  540. &IF DEFINED(EXCLUDE-assignActionName) = 0 &THEN
  541. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionName Procedure
  542. FUNCTION assignActionName RETURNS LOGICAL
  543. (pcId AS CHAR,
  544. pcValue AS CHAR) FORWARD.
  545. /* _UIB-CODE-BLOCK-END */
  546. &ANALYZE-RESUME
  547. &ENDIF
  548. &IF DEFINED(EXCLUDE-assignActionOrder) = 0 &THEN
  549. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionOrder Procedure
  550. FUNCTION assignActionOrder RETURNS LOGICAL
  551. (pcId AS CHAR,
  552. piValue AS INT) FORWARD.
  553. /* _UIB-CODE-BLOCK-END */
  554. &ANALYZE-RESUME
  555. &ENDIF
  556. &IF DEFINED(EXCLUDE-assignActionParent) = 0 &THEN
  557. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionParent Procedure
  558. FUNCTION assignActionParent RETURNS LOGICAL
  559. (pcId AS CHAR,
  560. pcValue AS CHAR) FORWARD.
  561. /* _UIB-CODE-BLOCK-END */
  562. &ANALYZE-RESUME
  563. &ENDIF
  564. &IF DEFINED(EXCLUDE-assignActionRefresh) = 0 &THEN
  565. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionRefresh Procedure
  566. FUNCTION assignActionRefresh RETURNS LOGICAL
  567. (pcId AS CHAR,
  568. plValue AS LOGICAL) FORWARD.
  569. /* _UIB-CODE-BLOCK-END */
  570. &ANALYZE-RESUME
  571. &ENDIF
  572. &IF DEFINED(EXCLUDE-assignActionSecondImage) = 0 &THEN
  573. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionSecondImage Procedure
  574. FUNCTION assignActionSecondImage RETURNS LOGICAL
  575. (pcId AS CHAR,
  576. pcValue AS CHAR) FORWARD.
  577. /* _UIB-CODE-BLOCK-END */
  578. &ANALYZE-RESUME
  579. &ENDIF
  580. &IF DEFINED(EXCLUDE-assignActionTooltip) = 0 &THEN
  581. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignActionTooltip Procedure
  582. FUNCTION assignActionTooltip RETURNS LOGICAL
  583. (pcId AS CHAR,
  584. pcValue AS CHAR) FORWARD.
  585. /* _UIB-CODE-BLOCK-END */
  586. &ANALYZE-RESUME
  587. &ENDIF
  588. &IF DEFINED(EXCLUDE-assignColumn) = 0 &THEN
  589. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD assignColumn Procedure
  590. FUNCTION assignColumn RETURNS LOGICAL PRIVATE
  591. (pcObject AS CHAR,
  592. pcId AS CHAR,
  593. pcColumn AS CHAR,
  594. pcValue AS CHAR) FORWARD.
  595. /* _UIB-CODE-BLOCK-END */
  596. &ANALYZE-RESUME
  597. &ENDIF
  598. &IF DEFINED(EXCLUDE-bandActions) = 0 &THEN
  599. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD bandActions Procedure
  600. FUNCTION bandActions RETURNS CHARACTER
  601. ( pcParentBand AS CHAR ) FORWARD.
  602. /* _UIB-CODE-BLOCK-END */
  603. &ANALYZE-RESUME
  604. &ENDIF
  605. &IF DEFINED(EXCLUDE-bandSubmenuLabel) = 0 &THEN
  606. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD bandSubmenuLabel Procedure
  607. FUNCTION bandSubmenuLabel RETURNS CHARACTER
  608. ( pcBand AS CHARACTER,
  609. pcChildBand AS CHARACTER) FORWARD.
  610. /* _UIB-CODE-BLOCK-END */
  611. &ANALYZE-RESUME
  612. &ENDIF
  613. &IF DEFINED(EXCLUDE-bandSubmenus) = 0 &THEN
  614. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD bandSubmenus Procedure
  615. FUNCTION bandSubmenus RETURNS CHARACTER
  616. ( pcParentBand AS CHAR) FORWARD.
  617. /* _UIB-CODE-BLOCK-END */
  618. &ANALYZE-RESUME
  619. &ENDIF
  620. &IF DEFINED(EXCLUDE-bufferHandle) = 0 &THEN
  621. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD bufferHandle Procedure
  622. FUNCTION bufferHandle RETURNS HANDLE
  623. (pcObject AS CHAR) FORWARD.
  624. /* _UIB-CODE-BLOCK-END */
  625. &ANALYZE-RESUME
  626. &ENDIF
  627. &IF DEFINED(EXCLUDE-buildMenu) = 0 &THEN
  628. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD buildMenu Procedure
  629. FUNCTION buildMenu RETURNS LOGICAL
  630. (pcParent AS CHAR) FORWARD.
  631. /* _UIB-CODE-BLOCK-END */
  632. &ANALYZE-RESUME
  633. &ENDIF
  634. &IF DEFINED(EXCLUDE-buildMenuBand) = 0 &THEN
  635. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD buildMenuBand Procedure
  636. FUNCTION buildMenuBand RETURNS LOGICAL
  637. ( phParent AS HANDLE,
  638. pcMenuKey AS CHAR) FORWARD.
  639. /* _UIB-CODE-BLOCK-END */
  640. &ANALYZE-RESUME
  641. &ENDIF
  642. &IF DEFINED(EXCLUDE-canFindAction) = 0 &THEN
  643. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD canFindAction Procedure
  644. FUNCTION canFindAction RETURNS LOGICAL
  645. (pcAction AS CHAR) FORWARD.
  646. /* _UIB-CODE-BLOCK-END */
  647. &ANALYZE-RESUME
  648. &ENDIF
  649. &IF DEFINED(EXCLUDE-canFindCategory) = 0 &THEN
  650. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD canFindCategory Procedure
  651. FUNCTION canFindCategory RETURNS LOGICAL
  652. (pcCategory AS CHAR) FORWARD.
  653. /* _UIB-CODE-BLOCK-END */
  654. &ANALYZE-RESUME
  655. &ENDIF
  656. &IF DEFINED(EXCLUDE-categoryActions) = 0 &THEN
  657. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD categoryActions Procedure
  658. FUNCTION categoryActions RETURNS CHARACTER
  659. ( pcCategory AS CHAR ) FORWARD.
  660. /* _UIB-CODE-BLOCK-END */
  661. &ANALYZE-RESUME
  662. &ENDIF
  663. &IF DEFINED(EXCLUDE-categoryLink) = 0 &THEN
  664. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD categoryLink Procedure
  665. FUNCTION categoryLink RETURNS CHARACTER
  666. (pcCategory AS CHAR) FORWARD.
  667. /* _UIB-CODE-BLOCK-END */
  668. &ANALYZE-RESUME
  669. &ENDIF
  670. &IF DEFINED(EXCLUDE-checkRule) = 0 &THEN
  671. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD checkRule Procedure
  672. FUNCTION checkRule RETURNS LOGICAL
  673. ( pcRule AS CHAR,
  674. phHandle AS HANDLE,
  675. plDefault AS LOG) FORWARD.
  676. /* _UIB-CODE-BLOCK-END */
  677. &ANALYZE-RESUME
  678. &ENDIF
  679. &IF DEFINED(EXCLUDE-constructMenu) = 0 &THEN
  680. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD constructMenu Procedure
  681. FUNCTION constructMenu RETURNS LOGICAL
  682. ( ) FORWARD.
  683. /* _UIB-CODE-BLOCK-END */
  684. &ANALYZE-RESUME
  685. &ENDIF
  686. &IF DEFINED(EXCLUDE-constructMenuBand) = 0 &THEN
  687. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD constructMenuBand Procedure
  688. FUNCTION constructMenuBand RETURNS LOGICAL
  689. (pcBand AS CHARACTER) FORWARD.
  690. /* _UIB-CODE-BLOCK-END */
  691. &ANALYZE-RESUME
  692. &ENDIF
  693. &IF DEFINED(EXCLUDE-constructObjectMenus) = 0 &THEN
  694. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD constructObjectMenus Procedure
  695. FUNCTION constructObjectMenus RETURNS LOGICAL
  696. ( pcBand AS CHAR,
  697. pcPlaceholder AS CHAR,
  698. plBlank AS LOG ) FORWARD.
  699. /* _UIB-CODE-BLOCK-END */
  700. &ANALYZE-RESUME
  701. &ENDIF
  702. &IF DEFINED(EXCLUDE-constructToolbar) = 0 &THEN
  703. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD constructToolbar Procedure
  704. FUNCTION constructToolbar RETURNS LOGICAL
  705. ( ) FORWARD.
  706. /* _UIB-CODE-BLOCK-END */
  707. &ANALYZE-RESUME
  708. &ENDIF
  709. &IF DEFINED(EXCLUDE-create3DRule) = 0 &THEN
  710. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD create3DRule Procedure
  711. FUNCTION create3DRule RETURNS HANDLE
  712. ( phParent AS HANDLE, /* handle to the parent frame */
  713. INPUT-OUTPUT piXY AS INTEGER /* the x - posistion */
  714. ) FORWARD.
  715. /* _UIB-CODE-BLOCK-END */
  716. &ANALYZE-RESUME
  717. &ENDIF
  718. &IF DEFINED(EXCLUDE-createButton) = 0 &THEN
  719. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createButton Procedure
  720. FUNCTION createButton RETURNS HANDLE
  721. ( phFrame AS HANDLE,
  722. INPUT-OUTPUT piXY AS INTEGER,
  723. pcName AS CHARACTER,
  724. pcLabel AS CHARACTER,
  725. pcTooltip AS CHARACTER,
  726. pcImage AS CHARACTER,
  727. plSensitive AS LOGICAL ) FORWARD.
  728. /* _UIB-CODE-BLOCK-END */
  729. &ANALYZE-RESUME
  730. &ENDIF
  731. &IF DEFINED(EXCLUDE-createMenuAction) = 0 &THEN
  732. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createMenuAction Procedure
  733. FUNCTION createMenuAction RETURNS HANDLE
  734. ( pcParent AS CHAR,
  735. pcAction AS CHAR) FORWARD.
  736. /* _UIB-CODE-BLOCK-END */
  737. &ANALYZE-RESUME
  738. &ENDIF
  739. &IF DEFINED(EXCLUDE-createMenuBar) = 0 &THEN
  740. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createMenuBar Procedure
  741. FUNCTION createMenuBar RETURNS HANDLE
  742. ( ) FORWARD.
  743. /* _UIB-CODE-BLOCK-END */
  744. &ANALYZE-RESUME
  745. &ENDIF
  746. &IF DEFINED(EXCLUDE-createMenuItem) = 0 &THEN
  747. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createMenuItem Procedure
  748. FUNCTION createMenuItem /**
  749. * @desc Creates a menuitem
  750. * @param <code>input pihParent handle</code> handle to (sub)menu
  751. * @param <code>input picName character</code> Name of menuitem
  752. * @param <code>input picCaption character</code> Caption
  753. * @param <code>input pilSensitive logical</code> Item sensitive or not
  754. * @returns handle to menuitem
  755. */
  756. RETURNS HANDLE
  757. ( phParent AS HANDLE,
  758. pcName AS CHARACTER,
  759. pcCaption AS CHARACTER,
  760. pcAccelerator AS CHARACTER,
  761. plSensitive AS LOGICAL ) FORWARD.
  762. /* _UIB-CODE-BLOCK-END */
  763. &ANALYZE-RESUME
  764. &ENDIF
  765. &IF DEFINED(EXCLUDE-createMenuTempTable) = 0 &THEN
  766. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createMenuTempTable Procedure
  767. FUNCTION createMenuTempTable RETURNS ROWID PRIVATE
  768. (pcParent AS CHAR,
  769. pcName AS CHAR) FORWARD.
  770. /* _UIB-CODE-BLOCK-END */
  771. &ANALYZE-RESUME
  772. &ENDIF
  773. &IF DEFINED(EXCLUDE-createMenuToggle) = 0 &THEN
  774. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createMenuToggle Procedure
  775. FUNCTION createMenuToggle /**
  776. * @desc Creates a menuitem
  777. * @param <code>input pihParent handle</code> handle to (sub)menu
  778. * @param <code>input picName character</code> Name of menuitem
  779. * @param <code>input picCaption character</code> Caption
  780. * @param <code>input pilSensitive logical</code> Item sensitive or not
  781. * @returns handle to menuitem
  782. */
  783. RETURNS HANDLE
  784. ( phParent AS HANDLE,
  785. pcName AS CHARACTER,
  786. pcCaption AS CHARACTER,
  787. pcAccelerator AS CHARACTER,
  788. plSensitive AS LOGICAL) FORWARD.
  789. /* _UIB-CODE-BLOCK-END */
  790. &ANALYZE-RESUME
  791. &ENDIF
  792. &IF DEFINED(EXCLUDE-createRule) = 0 &THEN
  793. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createRule Procedure
  794. FUNCTION createRule /**
  795. * @desc Creates a rule
  796. * @param <code>input pihParent handle</code> handle to (sub)menu
  797. * @returns handle to rule
  798. */
  799. RETURNS HANDLE
  800. ( phParent AS HANDLE /* Handle of the Parent */
  801. ) FORWARD.
  802. /* _UIB-CODE-BLOCK-END */
  803. &ANALYZE-RESUME
  804. &ENDIF
  805. &IF DEFINED(EXCLUDE-createSubMenu) = 0 &THEN
  806. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createSubMenu Procedure
  807. FUNCTION createSubMenu RETURNS HANDLE
  808. ( phParent AS HANDLE, /* Handle of the parent */
  809. pcName AS CHARACTER, /* Name of the to be created submenu */
  810. pcCaption AS CHARACTER, /* Caption of the be created submenu */
  811. plSensitive AS LOGICAL /* If the submenu has to be sensitive */ ) FORWARD.
  812. /* _UIB-CODE-BLOCK-END */
  813. &ANALYZE-RESUME
  814. &ENDIF
  815. &IF DEFINED(EXCLUDE-createToolbar) = 0 &THEN
  816. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createToolbar Procedure
  817. FUNCTION createToolbar RETURNS LOGICAL
  818. (pcActions AS CHARACTER) FORWARD.
  819. /* _UIB-CODE-BLOCK-END */
  820. &ANALYZE-RESUME
  821. &ENDIF
  822. &IF DEFINED(EXCLUDE-createToolbarAction) = 0 &THEN
  823. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createToolbarAction Procedure
  824. FUNCTION createToolbarAction RETURNS HANDLE
  825. (pcBand AS CHAR,
  826. pcAction AS CHAR,
  827. INPUT-OUTPUT piXY AS INT) FORWARD.
  828. /* _UIB-CODE-BLOCK-END */
  829. &ANALYZE-RESUME
  830. &ENDIF
  831. &IF DEFINED(EXCLUDE-createToolbarBorder) = 0 &THEN
  832. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD createToolbarBorder Procedure
  833. FUNCTION createToolbarBorder RETURNS LOGICAL
  834. ( ) FORWARD.
  835. /* _UIB-CODE-BLOCK-END */
  836. &ANALYZE-RESUME
  837. &ENDIF
  838. &IF DEFINED(EXCLUDE-defineAction) = 0 &THEN
  839. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD defineAction Procedure
  840. FUNCTION defineAction RETURNS LOGICAL
  841. (pcAction AS CHAR,
  842. pcColumns AS CHAR,
  843. pcValues AS CHAR) FORWARD.
  844. /* _UIB-CODE-BLOCK-END */
  845. &ANALYZE-RESUME
  846. &ENDIF
  847. &IF DEFINED(EXCLUDE-deleteMenu) = 0 &THEN
  848. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD deleteMenu Procedure
  849. FUNCTION deleteMenu RETURNS LOGICAL
  850. () FORWARD.
  851. /* _UIB-CODE-BLOCK-END */
  852. &ANALYZE-RESUME
  853. &ENDIF
  854. &IF DEFINED(EXCLUDE-deleteToolbar) = 0 &THEN
  855. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD deleteToolbar Procedure
  856. FUNCTION deleteToolbar RETURNS LOGICAL
  857. () FORWARD.
  858. /* _UIB-CODE-BLOCK-END */
  859. &ANALYZE-RESUME
  860. &ENDIF
  861. &IF DEFINED(EXCLUDE-disableActions) = 0 &THEN
  862. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD disableActions Procedure
  863. FUNCTION disableActions RETURNS LOGICAL
  864. (pcActions AS CHAR) FORWARD.
  865. /* _UIB-CODE-BLOCK-END */
  866. &ANALYZE-RESUME
  867. &ENDIF
  868. &IF DEFINED(EXCLUDE-enableActions) = 0 &THEN
  869. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD enableActions Procedure
  870. FUNCTION enableActions RETURNS LOGICAL
  871. (pcActions AS CHAR) FORWARD.
  872. /* _UIB-CODE-BLOCK-END */
  873. &ANALYZE-RESUME
  874. &ENDIF
  875. &IF DEFINED(EXCLUDE-errorMessage) = 0 &THEN
  876. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD errorMessage Procedure
  877. FUNCTION errorMessage RETURNS LOGICAL
  878. ( pcError AS char) FORWARD.
  879. /* _UIB-CODE-BLOCK-END */
  880. &ANALYZE-RESUME
  881. &ENDIF
  882. &IF DEFINED(EXCLUDE-findAction) = 0 &THEN
  883. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD findAction Procedure
  884. FUNCTION findAction RETURNS LOGICAL
  885. (pcAction AS CHAR,
  886. phTarget AS HANDLE) FORWARD.
  887. /* _UIB-CODE-BLOCK-END */
  888. &ANALYZE-RESUME
  889. &ENDIF
  890. &IF DEFINED(EXCLUDE-findCategory) = 0 &THEN
  891. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD findCategory Procedure
  892. FUNCTION findCategory RETURNS LOGICAL
  893. (pcCategory AS CHAR,
  894. phTarget AS HANDLE) FORWARD.
  895. /* _UIB-CODE-BLOCK-END */
  896. &ANALYZE-RESUME
  897. &ENDIF
  898. &IF DEFINED(EXCLUDE-getActionBuffer) = 0 &THEN
  899. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getActionBuffer Procedure
  900. FUNCTION getActionBuffer RETURNS HANDLE
  901. ( /* parameter-definitions */ ) FORWARD.
  902. /* _UIB-CODE-BLOCK-END */
  903. &ANALYZE-RESUME
  904. &ENDIF
  905. &IF DEFINED(EXCLUDE-getActionGroups) = 0 &THEN
  906. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getActionGroups Procedure
  907. FUNCTION getActionGroups RETURNS CHARACTER
  908. ( /* parameter-definitions */ ) FORWARD.
  909. /* _UIB-CODE-BLOCK-END */
  910. &ANALYZE-RESUME
  911. &ENDIF
  912. &IF DEFINED(EXCLUDE-getActionsLoaded) = 0 &THEN
  913. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getActionsLoaded Procedure
  914. FUNCTION getActionsLoaded RETURNS LOGICAL
  915. ( ) FORWARD.
  916. /* _UIB-CODE-BLOCK-END */
  917. &ANALYZE-RESUME
  918. &ENDIF
  919. &IF DEFINED(EXCLUDE-getActionWidgetIDs) = 0 &THEN
  920. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getActionWidgetIDs Procedure
  921. FUNCTION getActionWidgetIDs RETURNS CHARACTER
  922. ( ) FORWARD.
  923. /* _UIB-CODE-BLOCK-END */
  924. &ANALYZE-RESUME
  925. &ENDIF
  926. &IF DEFINED(EXCLUDE-getAvailMenuActions) = 0 &THEN
  927. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getAvailMenuActions Procedure
  928. FUNCTION getAvailMenuActions RETURNS CHARACTER
  929. ( ) FORWARD.
  930. /* _UIB-CODE-BLOCK-END */
  931. &ANALYZE-RESUME
  932. &ENDIF
  933. &IF DEFINED(EXCLUDE-getAvailToolbarActions) = 0 &THEN
  934. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getAvailToolbarActions Procedure
  935. FUNCTION getAvailToolbarActions RETURNS CHARACTER
  936. ( ) FORWARD.
  937. /* _UIB-CODE-BLOCK-END */
  938. &ANALYZE-RESUME
  939. &ENDIF
  940. &IF DEFINED(EXCLUDE-getAvailToolbarBands) = 0 &THEN
  941. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getAvailToolbarBands Procedure
  942. FUNCTION getAvailToolbarBands RETURNS CHARACTER
  943. ( /* parameter-definitions */ ) FORWARD.
  944. /* _UIB-CODE-BLOCK-END */
  945. &ANALYZE-RESUME
  946. &ENDIF
  947. &IF DEFINED(EXCLUDE-getBoxRectangle) = 0 &THEN
  948. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getBoxRectangle Procedure
  949. FUNCTION getBoxRectangle RETURNS HANDLE
  950. ( ) FORWARD.
  951. /* _UIB-CODE-BLOCK-END */
  952. &ANALYZE-RESUME
  953. &ENDIF
  954. &IF DEFINED(EXCLUDE-getBoxRectangle2) = 0 &THEN
  955. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getBoxRectangle2 Procedure
  956. FUNCTION getBoxRectangle2 RETURNS HANDLE
  957. ( /* parameter-definitions */ ) FORWARD.
  958. /* _UIB-CODE-BLOCK-END */
  959. &ANALYZE-RESUME
  960. &ENDIF
  961. &IF DEFINED(EXCLUDE-getCommitTarget) = 0 &THEN
  962. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getCommitTarget Procedure
  963. FUNCTION getCommitTarget RETURNS CHARACTER
  964. ( ) FORWARD.
  965. /* _UIB-CODE-BLOCK-END */
  966. &ANALYZE-RESUME
  967. &ENDIF
  968. &IF DEFINED(EXCLUDE-getCommitTargetEvents) = 0 &THEN
  969. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getCommitTargetEvents Procedure
  970. FUNCTION getCommitTargetEvents RETURNS CHARACTER
  971. ( ) FORWARD.
  972. /* _UIB-CODE-BLOCK-END */
  973. &ANALYZE-RESUME
  974. &ENDIF
  975. &IF DEFINED(EXCLUDE-getContainerToolbarTarget) = 0 &THEN
  976. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerToolbarTarget Procedure
  977. FUNCTION getContainerToolbarTarget RETURNS CHARACTER
  978. ( ) FORWARD.
  979. /* _UIB-CODE-BLOCK-END */
  980. &ANALYZE-RESUME
  981. &ENDIF
  982. &IF DEFINED(EXCLUDE-getContainerToolbarTargetEvents) = 0 &THEN
  983. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getContainerToolbarTargetEvents Procedure
  984. FUNCTION getContainerToolbarTargetEvents RETURNS CHARACTER
  985. ( ) FORWARD.
  986. /* _UIB-CODE-BLOCK-END */
  987. &ANALYZE-RESUME
  988. &ENDIF
  989. &IF DEFINED(EXCLUDE-getCreateSubMenuOnConflict) = 0 &THEN
  990. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getCreateSubMenuOnConflict Procedure
  991. FUNCTION getCreateSubMenuOnConflict RETURNS LOGICAL
  992. ( ) FORWARD.
  993. /* _UIB-CODE-BLOCK-END */
  994. &ANALYZE-RESUME
  995. &ENDIF
  996. &IF DEFINED(EXCLUDE-getDeactivateTargetOnHide) = 0 &THEN
  997. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDeactivateTargetOnHide Procedure
  998. FUNCTION getDeactivateTargetOnHide RETURNS LOGICAL
  999. ( ) FORWARD.
  1000. /* _UIB-CODE-BLOCK-END */
  1001. &ANALYZE-RESUME
  1002. &ENDIF
  1003. &IF DEFINED(EXCLUDE-getDisabledActions) = 0 &THEN
  1004. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getDisabledActions Procedure
  1005. FUNCTION getDisabledActions RETURNS CHARACTER
  1006. ( ) FORWARD.
  1007. /* _UIB-CODE-BLOCK-END */
  1008. &ANALYZE-RESUME
  1009. &ENDIF
  1010. &IF DEFINED(EXCLUDE-getEdgePixels) = 0 &THEN
  1011. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getEdgePixels Procedure
  1012. FUNCTION getEdgePixels RETURNS INTEGER
  1013. ( /* parameter-definitions */ ) FORWARD.
  1014. /* _UIB-CODE-BLOCK-END */
  1015. &ANALYZE-RESUME
  1016. &ENDIF
  1017. &IF DEFINED(EXCLUDE-getFlatButtons) = 0 &THEN
  1018. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getFlatButtons Procedure
  1019. FUNCTION getFlatButtons RETURNS LOGICAL
  1020. ( /* parameter-definitions */ ) FORWARD.
  1021. /* _UIB-CODE-BLOCK-END */
  1022. &ANALYZE-RESUME
  1023. &ENDIF
  1024. &IF DEFINED(EXCLUDE-getHiddenActions) = 0 &THEN
  1025. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getHiddenActions Procedure
  1026. FUNCTION getHiddenActions RETURNS CHARACTER
  1027. ( /* parameter-definitions */ ) FORWARD.
  1028. /* _UIB-CODE-BLOCK-END */
  1029. &ANALYZE-RESUME
  1030. &ENDIF
  1031. &IF DEFINED(EXCLUDE-getHiddenMenuBands) = 0 &THEN
  1032. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getHiddenMenuBands Procedure
  1033. FUNCTION getHiddenMenuBands RETURNS CHARACTER
  1034. ( /* parameter-definitions */ ) FORWARD.
  1035. /* _UIB-CODE-BLOCK-END */
  1036. &ANALYZE-RESUME
  1037. &ENDIF
  1038. &IF DEFINED(EXCLUDE-getHiddenToolbarBands) = 0 &THEN
  1039. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getHiddenToolbarBands Procedure
  1040. FUNCTION getHiddenToolbarBands RETURNS CHARACTER
  1041. ( /* parameter-definitions */ ) FORWARD.
  1042. /* _UIB-CODE-BLOCK-END */
  1043. &ANALYZE-RESUME
  1044. &ENDIF
  1045. &IF DEFINED(EXCLUDE-getImagePath) = 0 &THEN
  1046. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getImagePath Procedure
  1047. FUNCTION getImagePath RETURNS CHARACTER
  1048. ( ) FORWARD.
  1049. /* _UIB-CODE-BLOCK-END */
  1050. &ANALYZE-RESUME
  1051. &ENDIF
  1052. &IF DEFINED(EXCLUDE-getLinkTargetNames) = 0 &THEN
  1053. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getLinkTargetNames Procedure
  1054. FUNCTION getLinkTargetNames RETURNS CHARACTER
  1055. ( ) FORWARD.
  1056. /* _UIB-CODE-BLOCK-END */
  1057. &ANALYZE-RESUME
  1058. &ENDIF
  1059. &IF DEFINED(EXCLUDE-getMenu) = 0 &THEN
  1060. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMenu Procedure
  1061. FUNCTION getMenu /**
  1062. * @desc Get attribute
  1063. * @return attribute value true/false
  1064. */
  1065. RETURNS LOGICAL
  1066. ( /* parameter-definitions */ ) FORWARD.
  1067. /* _UIB-CODE-BLOCK-END */
  1068. &ANALYZE-RESUME
  1069. &ENDIF
  1070. &IF DEFINED(EXCLUDE-getMenuMergeOrder) = 0 &THEN
  1071. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMenuMergeOrder Procedure
  1072. FUNCTION getMenuMergeOrder RETURNS INTEGER
  1073. ( ) FORWARD.
  1074. /* _UIB-CODE-BLOCK-END */
  1075. &ANALYZE-RESUME
  1076. &ENDIF
  1077. &IF DEFINED(EXCLUDE-getMinHeight) = 0 &THEN
  1078. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMinHeight Procedure
  1079. FUNCTION getMinHeight RETURNS DECIMAL
  1080. ( /* parameter-definitions */ ) FORWARD.
  1081. /* _UIB-CODE-BLOCK-END */
  1082. &ANALYZE-RESUME
  1083. &ENDIF
  1084. &IF DEFINED(EXCLUDE-getMinWidth) = 0 &THEN
  1085. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getMinWidth Procedure
  1086. FUNCTION getMinWidth RETURNS DECIMAL
  1087. ( /* parameter-definitions */ ) FORWARD.
  1088. /* _UIB-CODE-BLOCK-END */
  1089. &ANALYZE-RESUME
  1090. &ENDIF
  1091. &IF DEFINED(EXCLUDE-getNavigationTarget) = 0 &THEN
  1092. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getNavigationTarget Procedure
  1093. FUNCTION getNavigationTarget RETURNS CHARACTER
  1094. ( ) FORWARD.
  1095. /* _UIB-CODE-BLOCK-END */
  1096. &ANALYZE-RESUME
  1097. &ENDIF
  1098. &IF DEFINED(EXCLUDE-getNavigationTargetEvents) = 0 &THEN
  1099. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getNavigationTargetEvents Procedure
  1100. FUNCTION getNavigationTargetEvents RETURNS CHARACTER
  1101. ( ) FORWARD.
  1102. /* _UIB-CODE-BLOCK-END */
  1103. &ANALYZE-RESUME
  1104. &ENDIF
  1105. &IF DEFINED(EXCLUDE-getNavigationTargetName) = 0 &THEN
  1106. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getNavigationTargetName Procedure
  1107. FUNCTION getNavigationTargetName RETURNS CHARACTER
  1108. ( ) FORWARD.
  1109. /* _UIB-CODE-BLOCK-END */
  1110. &ANALYZE-RESUME
  1111. &ENDIF
  1112. &IF DEFINED(EXCLUDE-getPanelState) = 0 &THEN
  1113. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPanelState Procedure
  1114. FUNCTION getPanelState RETURNS CHARACTER
  1115. ( ) FORWARD.
  1116. /* _UIB-CODE-BLOCK-END */
  1117. &ANALYZE-RESUME
  1118. &ENDIF
  1119. &IF DEFINED(EXCLUDE-getPanelType) = 0 &THEN
  1120. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getPanelType Procedure
  1121. FUNCTION getPanelType RETURNS CHARACTER
  1122. ( ) FORWARD.
  1123. /* _UIB-CODE-BLOCK-END */
  1124. &ANALYZE-RESUME
  1125. &ENDIF
  1126. &IF DEFINED(EXCLUDE-getRemoveMenuOnHide) = 0 &THEN
  1127. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getRemoveMenuOnHide Procedure
  1128. FUNCTION getRemoveMenuOnHide RETURNS LOGICAL
  1129. ( ) FORWARD.
  1130. /* _UIB-CODE-BLOCK-END */
  1131. &ANALYZE-RESUME
  1132. &ENDIF
  1133. &IF DEFINED(EXCLUDE-getShowBorder) = 0 &THEN
  1134. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getShowBorder Procedure
  1135. FUNCTION getShowBorder RETURNS LOGICAL
  1136. ( /* parameter-definitions */ ) FORWARD.
  1137. /* _UIB-CODE-BLOCK-END */
  1138. &ANALYZE-RESUME
  1139. &ENDIF
  1140. &IF DEFINED(EXCLUDE-getSubModules) = 0 &THEN
  1141. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getSubModules Procedure
  1142. FUNCTION getSubModules RETURNS CHARACTER
  1143. ( ) FORWARD.
  1144. /* _UIB-CODE-BLOCK-END */
  1145. &ANALYZE-RESUME
  1146. &ENDIF
  1147. &IF DEFINED(EXCLUDE-getTableioTarget) = 0 &THEN
  1148. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTableioTarget Procedure
  1149. FUNCTION getTableioTarget RETURNS CHARACTER
  1150. ( ) FORWARD.
  1151. /* _UIB-CODE-BLOCK-END */
  1152. &ANALYZE-RESUME
  1153. &ENDIF
  1154. &IF DEFINED(EXCLUDE-getTableioTargetEvents) = 0 &THEN
  1155. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTableioTargetEvents Procedure
  1156. FUNCTION getTableioTargetEvents RETURNS CHARACTER
  1157. ( ) FORWARD.
  1158. /* _UIB-CODE-BLOCK-END */
  1159. &ANALYZE-RESUME
  1160. &ENDIF
  1161. &IF DEFINED(EXCLUDE-getTableIOType) = 0 &THEN
  1162. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTableIOType Procedure
  1163. FUNCTION getTableIOType RETURNS CHARACTER
  1164. ( ) FORWARD.
  1165. /* _UIB-CODE-BLOCK-END */
  1166. &ANALYZE-RESUME
  1167. &ENDIF
  1168. &IF DEFINED(EXCLUDE-getTableioUndoNew) = 0 &THEN
  1169. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTableioUndoNew Procedure
  1170. FUNCTION getTableioUndoNew RETURNS LOGICAL
  1171. ( ) FORWARD.
  1172. /* _UIB-CODE-BLOCK-END */
  1173. &ANALYZE-RESUME
  1174. &ENDIF
  1175. &IF DEFINED(EXCLUDE-getTargetProcedure) = 0 &THEN
  1176. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getTargetProcedure Procedure
  1177. FUNCTION getTargetProcedure RETURNS HANDLE
  1178. ( ) FORWARD.
  1179. /* _UIB-CODE-BLOCK-END */
  1180. &ANALYZE-RESUME
  1181. &ENDIF
  1182. &IF DEFINED(EXCLUDE-getToolbar) = 0 &THEN
  1183. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbar Procedure
  1184. FUNCTION getToolbar /**
  1185. * @desc Get attribute
  1186. * @return attribute value true/false
  1187. */
  1188. RETURNS LOGICAL
  1189. ( /* parameter-definitions */ ) FORWARD.
  1190. /* _UIB-CODE-BLOCK-END */
  1191. &ANALYZE-RESUME
  1192. &ENDIF
  1193. &IF DEFINED(EXCLUDE-getToolbarAutoSize) = 0 &THEN
  1194. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarAutoSize Procedure
  1195. FUNCTION getToolbarAutoSize RETURNS LOGICAL
  1196. ( /* parameter-definitions */ ) FORWARD.
  1197. /* _UIB-CODE-BLOCK-END */
  1198. &ANALYZE-RESUME
  1199. &ENDIF
  1200. &IF DEFINED(EXCLUDE-getToolbarBands) = 0 &THEN
  1201. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarBands Procedure
  1202. FUNCTION getToolbarBands RETURNS CHARACTER
  1203. ( /* parameter-definitions */ ) FORWARD.
  1204. /* _UIB-CODE-BLOCK-END */
  1205. &ANALYZE-RESUME
  1206. &ENDIF
  1207. &IF DEFINED(EXCLUDE-getToolbarDrawDirection) = 0 &THEN
  1208. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarDrawDirection Procedure
  1209. FUNCTION getToolbarDrawDirection RETURNS CHARACTER
  1210. ( /* parameter-definitions */ ) FORWARD.
  1211. /* _UIB-CODE-BLOCK-END */
  1212. &ANALYZE-RESUME
  1213. &ENDIF
  1214. &IF DEFINED(EXCLUDE-getToolbarHeightPxl) = 0 &THEN
  1215. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarHeightPxl Procedure
  1216. FUNCTION getToolbarHeightPxl RETURNS INTEGER
  1217. ( ) FORWARD.
  1218. /* _UIB-CODE-BLOCK-END */
  1219. &ANALYZE-RESUME
  1220. &ENDIF
  1221. &IF DEFINED(EXCLUDE-getToolbarMinWidth) = 0 &THEN
  1222. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarMinWidth Procedure
  1223. FUNCTION getToolbarMinWidth RETURNS CHARACTER
  1224. ( ) FORWARD.
  1225. /* _UIB-CODE-BLOCK-END */
  1226. &ANALYZE-RESUME
  1227. &ENDIF
  1228. &IF DEFINED(EXCLUDE-getToolbarParentMenu) = 0 &THEN
  1229. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarParentMenu Procedure
  1230. FUNCTION getToolbarParentMenu RETURNS CHARACTER
  1231. ( /* parameter-definitions */ ) FORWARD.
  1232. /* _UIB-CODE-BLOCK-END */
  1233. &ANALYZE-RESUME
  1234. &ENDIF
  1235. &IF DEFINED(EXCLUDE-getToolbarTarget) = 0 &THEN
  1236. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarTarget Procedure
  1237. FUNCTION getToolbarTarget RETURNS CHARACTER
  1238. ( ) FORWARD.
  1239. /* _UIB-CODE-BLOCK-END */
  1240. &ANALYZE-RESUME
  1241. &ENDIF
  1242. &IF DEFINED(EXCLUDE-getToolbarTargetEvents) = 0 &THEN
  1243. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarTargetEvents Procedure
  1244. FUNCTION getToolbarTargetEvents RETURNS CHARACTER
  1245. ( ) FORWARD.
  1246. /* _UIB-CODE-BLOCK-END */
  1247. &ANALYZE-RESUME
  1248. &ENDIF
  1249. &IF DEFINED(EXCLUDE-getToolbarWidthPxl) = 0 &THEN
  1250. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolbarWidthPxl Procedure
  1251. FUNCTION getToolbarWidthPxl RETURNS INTEGER
  1252. ( ) FORWARD.
  1253. /* _UIB-CODE-BLOCK-END */
  1254. &ANALYZE-RESUME
  1255. &ENDIF
  1256. &IF DEFINED(EXCLUDE-getToolHeightPxl) = 0 &THEN
  1257. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolHeightPxl Procedure
  1258. FUNCTION getToolHeightPxl RETURNS INTEGER
  1259. ( /* parameter-definitions */ ) FORWARD.
  1260. /* _UIB-CODE-BLOCK-END */
  1261. &ANALYZE-RESUME
  1262. &ENDIF
  1263. &IF DEFINED(EXCLUDE-getToolMarginPxl) = 0 &THEN
  1264. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolMarginPxl Procedure
  1265. FUNCTION getToolMarginPxl RETURNS INTEGER
  1266. ( /* parameter-definitions */ ) FORWARD.
  1267. /* _UIB-CODE-BLOCK-END */
  1268. &ANALYZE-RESUME
  1269. &ENDIF
  1270. &IF DEFINED(EXCLUDE-getToolMaxWidthPxl) = 0 &THEN
  1271. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolMaxWidthPxl Procedure
  1272. FUNCTION getToolMaxWidthPxl RETURNS INTEGER
  1273. ( /* parameter-definitions */ ) FORWARD.
  1274. /* _UIB-CODE-BLOCK-END */
  1275. &ANALYZE-RESUME
  1276. &ENDIF
  1277. &IF DEFINED(EXCLUDE-getToolSeparatorPxl) = 0 &THEN
  1278. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolSeparatorPxl Procedure
  1279. FUNCTION getToolSeparatorPxl RETURNS INTEGER
  1280. ( /* parameter-definitions */ ) FORWARD.
  1281. /* _UIB-CODE-BLOCK-END */
  1282. &ANALYZE-RESUME
  1283. &ENDIF
  1284. &IF DEFINED(EXCLUDE-getToolSpacingPxl) = 0 &THEN
  1285. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolSpacingPxl Procedure
  1286. FUNCTION getToolSpacingPxl RETURNS INTEGER
  1287. ( /* parameter-definitions */ ) FORWARD.
  1288. /* _UIB-CODE-BLOCK-END */
  1289. &ANALYZE-RESUME
  1290. &ENDIF
  1291. &IF DEFINED(EXCLUDE-getToolWidthPxl) = 0 &THEN
  1292. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getToolWidthPxl Procedure
  1293. FUNCTION getToolWidthPxl RETURNS INTEGER
  1294. ( /* parameter-definitions */ ) FORWARD.
  1295. /* _UIB-CODE-BLOCK-END */
  1296. &ANALYZE-RESUME
  1297. &ENDIF
  1298. &IF DEFINED(EXCLUDE-getWindow) = 0 &THEN
  1299. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD getWindow Procedure
  1300. FUNCTION getWindow RETURNS HANDLE
  1301. ( ) FORWARD.
  1302. /* _UIB-CODE-BLOCK-END */
  1303. &ANALYZE-RESUME
  1304. &ENDIF
  1305. &IF DEFINED(EXCLUDE-hasActiveGATarget) = 0 &THEN
  1306. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD hasActiveGATarget Procedure
  1307. FUNCTION hasActiveGATarget RETURNS LOGICAL
  1308. (phObject AS HANDLE) FORWARD.
  1309. /* _UIB-CODE-BLOCK-END */
  1310. &ANALYZE-RESUME
  1311. &ENDIF
  1312. &IF DEFINED(EXCLUDE-imageName) = 0 &THEN
  1313. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD imageName Procedure
  1314. FUNCTION imageName RETURNS CHARACTER
  1315. ( pcAction AS CHAR,
  1316. piNumber AS INT) FORWARD.
  1317. /* _UIB-CODE-BLOCK-END */
  1318. &ANALYZE-RESUME
  1319. &ENDIF
  1320. &IF DEFINED(EXCLUDE-insertMenu) = 0 &THEN
  1321. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD insertMenu Procedure
  1322. FUNCTION insertMenu RETURNS LOGICAL
  1323. (pcParent AS CHARACTER,
  1324. pcActions AS CHARACTER,
  1325. plExpand AS LOGICAL,
  1326. pcBefore AS CHARACTER) FORWARD.
  1327. /* _UIB-CODE-BLOCK-END */
  1328. &ANALYZE-RESUME
  1329. &ENDIF
  1330. &IF DEFINED(EXCLUDE-insertMenuTempTable) = 0 &THEN
  1331. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD insertMenuTempTable Procedure
  1332. FUNCTION insertMenuTempTable RETURNS LOGICAL PRIVATE
  1333. (pcParent AS CHAR,
  1334. pcName AS CHAR,
  1335. pcBefore AS CHAR) FORWARD.
  1336. /* _UIB-CODE-BLOCK-END */
  1337. &ANALYZE-RESUME
  1338. &ENDIF
  1339. &IF DEFINED(EXCLUDE-linkRuleBuffer) = 0 &THEN
  1340. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD linkRuleBuffer Procedure
  1341. FUNCTION linkRuleBuffer RETURNS HANDLE
  1342. (pcLink AS CHAR,
  1343. phTarget AS HANDLE) FORWARD.
  1344. /* _UIB-CODE-BLOCK-END */
  1345. &ANALYZE-RESUME
  1346. &ENDIF
  1347. &IF DEFINED(EXCLUDE-loadImage) = 0 &THEN
  1348. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD loadImage Procedure
  1349. FUNCTION loadImage RETURNS LOGICAL PRIVATE
  1350. ( phObject AS HANDLE,
  1351. pcImage AS CHARACTER ) FORWARD.
  1352. /* _UIB-CODE-BLOCK-END */
  1353. &ANALYZE-RESUME
  1354. &ENDIF
  1355. &IF DEFINED(EXCLUDE-menuHandle) = 0 &THEN
  1356. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD menuHandle Procedure
  1357. FUNCTION menuHandle RETURNS HANDLE PRIVATE
  1358. (pcName AS CHAR) FORWARD.
  1359. /* _UIB-CODE-BLOCK-END */
  1360. &ANALYZE-RESUME
  1361. &ENDIF
  1362. &IF DEFINED(EXCLUDE-modifyDisabledActions) = 0 &THEN
  1363. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD modifyDisabledActions Procedure
  1364. FUNCTION modifyDisabledActions RETURNS LOGICAL
  1365. ( pcMode AS CHAR,
  1366. pcActions AS CHAR) FORWARD.
  1367. /* _UIB-CODE-BLOCK-END */
  1368. &ANALYZE-RESUME
  1369. &ENDIF
  1370. &IF DEFINED(EXCLUDE-moveMenu) = 0 &THEN
  1371. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD moveMenu Procedure
  1372. FUNCTION moveMenu RETURNS HANDLE
  1373. ( phMenu AS HANDLE,
  1374. phNewParent AS HANDLE) FORWARD.
  1375. /* _UIB-CODE-BLOCK-END */
  1376. &ANALYZE-RESUME
  1377. &ENDIF
  1378. &IF DEFINED(EXCLUDE-moveMenuChildren) = 0 &THEN
  1379. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD moveMenuChildren Procedure
  1380. FUNCTION moveMenuChildren RETURNS LOGICAL
  1381. ( phOldParent AS HANDLE,
  1382. phNewParent AS HANDLE ) FORWARD.
  1383. /* _UIB-CODE-BLOCK-END */
  1384. &ANALYZE-RESUME
  1385. &ENDIF
  1386. &IF DEFINED(EXCLUDE-normalizeActionData) = 0 &THEN
  1387. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD normalizeActionData Procedure
  1388. FUNCTION normalizeActionData RETURNS LOGICAL
  1389. ( ) FORWARD.
  1390. /* _UIB-CODE-BLOCK-END */
  1391. &ANALYZE-RESUME
  1392. &ENDIF
  1393. &IF DEFINED(EXCLUDE-prepareRuleTable) = 0 &THEN
  1394. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD prepareRuleTable Procedure
  1395. FUNCTION prepareRuleTable RETURNS CHARACTER
  1396. ( phTable AS HANDLE,
  1397. pcLink AS CHAR ) FORWARD.
  1398. /* _UIB-CODE-BLOCK-END */
  1399. &ANALYZE-RESUME
  1400. &ENDIF
  1401. &IF DEFINED(EXCLUDE-removeMenuBand) = 0 &THEN
  1402. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD removeMenuBand Procedure
  1403. FUNCTION removeMenuBand RETURNS LOGICAL
  1404. ( pcBand AS CHARACTER ) FORWARD.
  1405. /* _UIB-CODE-BLOCK-END */
  1406. &ANALYZE-RESUME
  1407. &ENDIF
  1408. &IF DEFINED(EXCLUDE-retrieveBandsAndActions) = 0 &THEN
  1409. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD retrieveBandsAndActions Procedure
  1410. FUNCTION retrieveBandsAndActions RETURNS LOGICAL
  1411. ( input pcToolbarList as character,
  1412. input pcObjectList as character,
  1413. input pcBandList as character ) FORWARD.
  1414. /* _UIB-CODE-BLOCK-END */
  1415. &ANALYZE-RESUME
  1416. &ENDIF
  1417. &IF DEFINED(EXCLUDE-sensitizeActions) = 0 &THEN
  1418. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD sensitizeActions Procedure
  1419. FUNCTION sensitizeActions RETURNS LOGICAL
  1420. (pcActions AS CHAR,
  1421. plSensitive AS LOG) FORWARD.
  1422. /* _UIB-CODE-BLOCK-END */
  1423. &ANALYZE-RESUME
  1424. &ENDIF
  1425. &IF DEFINED(EXCLUDE-setActionGroups) = 0 &THEN
  1426. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setActionGroups Procedure
  1427. FUNCTION setActionGroups RETURNS LOGICAL
  1428. (pcActionGroups AS CHARACTER) FORWARD.
  1429. /* _UIB-CODE-BLOCK-END */
  1430. &ANALYZE-RESUME
  1431. &ENDIF
  1432. &IF DEFINED(EXCLUDE-setActionsLoaded) = 0 &THEN
  1433. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setActionsLoaded Procedure
  1434. FUNCTION setActionsLoaded RETURNS LOGICAL
  1435. ( plIsLoaded AS LOG ) FORWARD.
  1436. /* _UIB-CODE-BLOCK-END */
  1437. &ANALYZE-RESUME
  1438. &ENDIF
  1439. &IF DEFINED(EXCLUDE-setActionWidgetIDs) = 0 &THEN
  1440. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setActionWidgetIDs Procedure
  1441. FUNCTION setActionWidgetIDs RETURNS LOGICAL
  1442. (INPUT pcActionWidgetIDs AS CHARACTER) FORWARD.
  1443. /* _UIB-CODE-BLOCK-END */
  1444. &ANALYZE-RESUME
  1445. &ENDIF
  1446. &IF DEFINED(EXCLUDE-setAvailMenuActions) = 0 &THEN
  1447. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setAvailMenuActions Procedure
  1448. FUNCTION setAvailMenuActions RETURNS LOGICAL
  1449. (pcAvailMenuActions AS CHARACTER) FORWARD.
  1450. /* _UIB-CODE-BLOCK-END */
  1451. &ANALYZE-RESUME
  1452. &ENDIF
  1453. &IF DEFINED(EXCLUDE-setAvailToolbarActions) = 0 &THEN
  1454. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setAvailToolbarActions Procedure
  1455. FUNCTION setAvailToolbarActions RETURNS LOGICAL
  1456. (pcAvailToolbarActions AS CHARACTER) FORWARD.
  1457. /* _UIB-CODE-BLOCK-END */
  1458. &ANALYZE-RESUME
  1459. &ENDIF
  1460. &IF DEFINED(EXCLUDE-setBoxRectangle) = 0 &THEN
  1461. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setBoxRectangle Procedure
  1462. FUNCTION setBoxRectangle RETURNS LOGICAL
  1463. ( phRectangle AS HANDLE) FORWARD.
  1464. /* _UIB-CODE-BLOCK-END */
  1465. &ANALYZE-RESUME
  1466. &ENDIF
  1467. &IF DEFINED(EXCLUDE-setBoxRectangle2) = 0 &THEN
  1468. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setBoxRectangle2 Procedure
  1469. FUNCTION setBoxRectangle2 RETURNS LOGICAL
  1470. ( hValue AS HANDLE ) FORWARD.
  1471. /* _UIB-CODE-BLOCK-END */
  1472. &ANALYZE-RESUME
  1473. &ENDIF
  1474. &IF DEFINED(EXCLUDE-setBuffer) = 0 &THEN
  1475. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setBuffer Procedure
  1476. FUNCTION setBuffer RETURNS LOGICAL PRIVATE
  1477. (pcObject AS CHAR,
  1478. pcAction AS CHAR,
  1479. pcColumns AS CHAR,
  1480. pcValues AS CHAR,
  1481. phTarget AS HANDLE) FORWARD.
  1482. /* _UIB-CODE-BLOCK-END */
  1483. &ANALYZE-RESUME
  1484. &ENDIF
  1485. &IF DEFINED(EXCLUDE-setCommitTarget) = 0 &THEN
  1486. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setCommitTarget Procedure
  1487. FUNCTION setCommitTarget RETURNS LOGICAL
  1488. ( pcObject AS CHARACTER ) FORWARD.
  1489. /* _UIB-CODE-BLOCK-END */
  1490. &ANALYZE-RESUME
  1491. &ENDIF
  1492. &IF DEFINED(EXCLUDE-setCommitTargetEvents) = 0 &THEN
  1493. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setCommitTargetEvents Procedure
  1494. FUNCTION setCommitTargetEvents RETURNS LOGICAL
  1495. ( pcEvents AS CHARACTER ) FORWARD.
  1496. /* _UIB-CODE-BLOCK-END */
  1497. &ANALYZE-RESUME
  1498. &ENDIF
  1499. &IF DEFINED(EXCLUDE-setContainerToolbarTarget) = 0 &THEN
  1500. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setContainerToolbarTarget Procedure
  1501. FUNCTION setContainerToolbarTarget RETURNS LOGICAL
  1502. ( pcTarget AS CHARACTER ) FORWARD.
  1503. /* _UIB-CODE-BLOCK-END */
  1504. &ANALYZE-RESUME
  1505. &ENDIF
  1506. &IF DEFINED(EXCLUDE-setContainerToolbarTargetEvents) = 0 &THEN
  1507. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setContainerToolbarTargetEvents Procedure
  1508. FUNCTION setContainerToolbarTargetEvents RETURNS LOGICAL
  1509. ( pcEvents AS CHARACTER ) FORWARD.
  1510. /* _UIB-CODE-BLOCK-END */
  1511. &ANALYZE-RESUME
  1512. &ENDIF
  1513. &IF DEFINED(EXCLUDE-setCreateSubMenuOnConflict) = 0 &THEN
  1514. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setCreateSubMenuOnConflict Procedure
  1515. FUNCTION setCreateSubMenuOnConflict RETURNS LOGICAL
  1516. ( plCreateSubMenu AS LOG ) FORWARD.
  1517. /* _UIB-CODE-BLOCK-END */
  1518. &ANALYZE-RESUME
  1519. &ENDIF
  1520. &IF DEFINED(EXCLUDE-setDeactivateTargetOnHide) = 0 &THEN
  1521. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDeactivateTargetOnHide Procedure
  1522. FUNCTION setDeactivateTargetOnHide RETURNS LOGICAL
  1523. ( plDeactivateTargetOnHide AS LOGICAL ) FORWARD.
  1524. /* _UIB-CODE-BLOCK-END */
  1525. &ANALYZE-RESUME
  1526. &ENDIF
  1527. &IF DEFINED(EXCLUDE-setDisabledActions) = 0 &THEN
  1528. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setDisabledActions Procedure
  1529. FUNCTION setDisabledActions RETURNS LOGICAL
  1530. ( pcActions AS CHARACTER ) FORWARD.
  1531. /* _UIB-CODE-BLOCK-END */
  1532. &ANALYZE-RESUME
  1533. &ENDIF
  1534. &IF DEFINED(EXCLUDE-setEdgePixels) = 0 &THEN
  1535. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setEdgePixels Procedure
  1536. FUNCTION setEdgePixels RETURNS LOGICAL
  1537. (piPixels AS INTEGER ) FORWARD.
  1538. /* _UIB-CODE-BLOCK-END */
  1539. &ANALYZE-RESUME
  1540. &ENDIF
  1541. &IF DEFINED(EXCLUDE-setFlatButtons) = 0 &THEN
  1542. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setFlatButtons Procedure
  1543. FUNCTION setFlatButtons RETURNS LOGICAL
  1544. ( plFlatButtons AS LOGICAL ) FORWARD.
  1545. /* _UIB-CODE-BLOCK-END */
  1546. &ANALYZE-RESUME
  1547. &ENDIF
  1548. &IF DEFINED(EXCLUDE-setHiddenActions) = 0 &THEN
  1549. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setHiddenActions Procedure
  1550. FUNCTION setHiddenActions RETURNS LOGICAL
  1551. ( pcActions AS CHAR) FORWARD.
  1552. /* _UIB-CODE-BLOCK-END */
  1553. &ANALYZE-RESUME
  1554. &ENDIF
  1555. &IF DEFINED(EXCLUDE-setHiddenMenuBands) = 0 &THEN
  1556. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setHiddenMenuBands Procedure
  1557. FUNCTION setHiddenMenuBands RETURNS LOGICAL
  1558. (pcHiddenBands AS CHARACTER ) FORWARD.
  1559. /* _UIB-CODE-BLOCK-END */
  1560. &ANALYZE-RESUME
  1561. &ENDIF
  1562. &IF DEFINED(EXCLUDE-setHiddenToolbarBands) = 0 &THEN
  1563. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setHiddenToolbarBands Procedure
  1564. FUNCTION setHiddenToolbarBands RETURNS LOGICAL
  1565. (pcHiddenBands AS CHARACTER ) FORWARD.
  1566. /* _UIB-CODE-BLOCK-END */
  1567. &ANALYZE-RESUME
  1568. &ENDIF
  1569. &IF DEFINED(EXCLUDE-setImagePath) = 0 &THEN
  1570. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setImagePath Procedure
  1571. FUNCTION setImagePath RETURNS LOGICAL
  1572. ( pcImagePath AS CHAR ) FORWARD.
  1573. /* _UIB-CODE-BLOCK-END */
  1574. &ANALYZE-RESUME
  1575. &ENDIF
  1576. &IF DEFINED(EXCLUDE-setLinkTargetNames) = 0 &THEN
  1577. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setLinkTargetNames Procedure
  1578. FUNCTION setLinkTargetNames RETURNS LOGICAL
  1579. ( pcLinkList AS CHARACTER ) FORWARD.
  1580. /* _UIB-CODE-BLOCK-END */
  1581. &ANALYZE-RESUME
  1582. &ENDIF
  1583. &IF DEFINED(EXCLUDE-setMenu) = 0 &THEN
  1584. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setMenu Procedure
  1585. FUNCTION setMenu RETURNS LOGICAL
  1586. ( plMenu AS LOGICAL ) FORWARD.
  1587. /* _UIB-CODE-BLOCK-END */
  1588. &ANALYZE-RESUME
  1589. &ENDIF
  1590. &IF DEFINED(EXCLUDE-setMenuMergeOrder) = 0 &THEN
  1591. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setMenuMergeOrder Procedure
  1592. FUNCTION setMenuMergeOrder RETURNS LOGICAL
  1593. ( piOrder AS INT ) FORWARD.
  1594. /* _UIB-CODE-BLOCK-END */
  1595. &ANALYZE-RESUME
  1596. &ENDIF
  1597. &IF DEFINED(EXCLUDE-setNavigationButtons) = 0 &THEN
  1598. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setNavigationButtons Procedure
  1599. FUNCTION setNavigationButtons RETURNS LOGICAL
  1600. ( pcState AS CHAR ) FORWARD.
  1601. /* _UIB-CODE-BLOCK-END */
  1602. &ANALYZE-RESUME
  1603. &ENDIF
  1604. &IF DEFINED(EXCLUDE-setNavigationTarget) = 0 &THEN
  1605. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setNavigationTarget Procedure
  1606. FUNCTION setNavigationTarget RETURNS LOGICAL
  1607. ( pcObject AS CHARACTER ) FORWARD.
  1608. /* _UIB-CODE-BLOCK-END */
  1609. &ANALYZE-RESUME
  1610. &ENDIF
  1611. &IF DEFINED(EXCLUDE-setNavigationTargetEvents) = 0 &THEN
  1612. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setNavigationTargetEvents Procedure
  1613. FUNCTION setNavigationTargetEvents RETURNS LOGICAL
  1614. ( pcEvents AS CHARACTER ) FORWARD.
  1615. /* _UIB-CODE-BLOCK-END */
  1616. &ANALYZE-RESUME
  1617. &ENDIF
  1618. &IF DEFINED(EXCLUDE-setNavigationTargetName) = 0 &THEN
  1619. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setNavigationTargetName Procedure
  1620. FUNCTION setNavigationTargetName RETURNS LOGICAL
  1621. ( pcTargetName AS CHARACTER ) FORWARD.
  1622. /* _UIB-CODE-BLOCK-END */
  1623. &ANALYZE-RESUME
  1624. &ENDIF
  1625. &IF DEFINED(EXCLUDE-setPanelState) = 0 &THEN
  1626. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setPanelState Procedure
  1627. FUNCTION setPanelState RETURNS LOGICAL
  1628. ( pcPanelState AS CHARACTER ) FORWARD.
  1629. /* _UIB-CODE-BLOCK-END */
  1630. &ANALYZE-RESUME
  1631. &ENDIF
  1632. &IF DEFINED(EXCLUDE-setPanelType) = 0 &THEN
  1633. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setPanelType Procedure
  1634. FUNCTION setPanelType RETURNS LOGICAL
  1635. ( pcPanelType AS CHARACTER ) FORWARD.
  1636. /* _UIB-CODE-BLOCK-END */
  1637. &ANALYZE-RESUME
  1638. &ENDIF
  1639. &IF DEFINED(EXCLUDE-setRemoveMenuOnHide) = 0 &THEN
  1640. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setRemoveMenuOnHide Procedure
  1641. FUNCTION setRemoveMenuOnHide RETURNS LOGICAL
  1642. ( plRemoveMenu AS LOG ) FORWARD.
  1643. /* _UIB-CODE-BLOCK-END */
  1644. &ANALYZE-RESUME
  1645. &ENDIF
  1646. &IF DEFINED(EXCLUDE-setShowBorder) = 0 &THEN
  1647. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setShowBorder Procedure
  1648. FUNCTION setShowBorder RETURNS LOGICAL
  1649. ( plShowBorder AS LOGICAL ) FORWARD.
  1650. /* _UIB-CODE-BLOCK-END */
  1651. &ANALYZE-RESUME
  1652. &ENDIF
  1653. &IF DEFINED(EXCLUDE-setSubModules) = 0 &THEN
  1654. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setSubModules Procedure
  1655. FUNCTION setSubModules RETURNS LOGICAL
  1656. ( pcSubModules AS CHARACTER ) FORWARD.
  1657. /* _UIB-CODE-BLOCK-END */
  1658. &ANALYZE-RESUME
  1659. &ENDIF
  1660. &IF DEFINED(EXCLUDE-setTableIOButtons) = 0 &THEN
  1661. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTableIOButtons Procedure
  1662. FUNCTION setTableIOButtons RETURNS LOGICAL
  1663. ( pcState AS CHAR ) FORWARD.
  1664. /* _UIB-CODE-BLOCK-END */
  1665. &ANALYZE-RESUME
  1666. &ENDIF
  1667. &IF DEFINED(EXCLUDE-setTableIOTarget) = 0 &THEN
  1668. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTableIOTarget Procedure
  1669. FUNCTION setTableIOTarget RETURNS LOGICAL
  1670. ( pcObject AS CHARACTER ) FORWARD.
  1671. /* _UIB-CODE-BLOCK-END */
  1672. &ANALYZE-RESUME
  1673. &ENDIF
  1674. &IF DEFINED(EXCLUDE-setTableIOTargetEvents) = 0 &THEN
  1675. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTableIOTargetEvents Procedure
  1676. FUNCTION setTableIOTargetEvents RETURNS LOGICAL
  1677. ( pcEvents AS CHARACTER ) FORWARD.
  1678. /* _UIB-CODE-BLOCK-END */
  1679. &ANALYZE-RESUME
  1680. &ENDIF
  1681. &IF DEFINED(EXCLUDE-setTableioType) = 0 &THEN
  1682. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setTableioType Procedure
  1683. FUNCTION setTableioType RETURNS LOGICAL
  1684. ( pcType AS CHARACTER ) FORWARD.
  1685. /* _UIB-CODE-BLOCK-END */
  1686. &ANALYZE-RESUME
  1687. &ENDIF
  1688. &IF DEFINED(EXCLUDE-setToolbar) = 0 &THEN
  1689. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbar Procedure
  1690. FUNCTION setToolbar RETURNS LOGICAL
  1691. ( plToolbar AS LOGICAL ) FORWARD.
  1692. /* _UIB-CODE-BLOCK-END */
  1693. &ANALYZE-RESUME
  1694. &ENDIF
  1695. &IF DEFINED(EXCLUDE-setToolbarAutosize) = 0 &THEN
  1696. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarAutosize Procedure
  1697. FUNCTION setToolbarAutosize RETURNS LOGICAL
  1698. ( plToolbarAutoSize AS LOGICAL ) FORWARD.
  1699. /* _UIB-CODE-BLOCK-END */
  1700. &ANALYZE-RESUME
  1701. &ENDIF
  1702. &IF DEFINED(EXCLUDE-setToolbarBands) = 0 &THEN
  1703. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarBands Procedure
  1704. FUNCTION setToolbarBands RETURNS LOGICAL
  1705. (pcToolbarBands AS CHARACTER) FORWARD.
  1706. /* _UIB-CODE-BLOCK-END */
  1707. &ANALYZE-RESUME
  1708. &ENDIF
  1709. &IF DEFINED(EXCLUDE-setToolbarDrawDirection) = 0 &THEN
  1710. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarDrawDirection Procedure
  1711. FUNCTION setToolbarDrawDirection RETURNS LOGICAL
  1712. (pcToolbarDrawDirection AS CHARACTER) FORWARD.
  1713. /* _UIB-CODE-BLOCK-END */
  1714. &ANALYZE-RESUME
  1715. &ENDIF
  1716. &IF DEFINED(EXCLUDE-setToolbarMinWidth) = 0 &THEN
  1717. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarMinWidth Procedure
  1718. FUNCTION setToolbarMinWidth RETURNS LOGICAL
  1719. ( pdMinWidth AS DEC ) FORWARD.
  1720. /* _UIB-CODE-BLOCK-END */
  1721. &ANALYZE-RESUME
  1722. &ENDIF
  1723. &IF DEFINED(EXCLUDE-setToolbarParentMenu) = 0 &THEN
  1724. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarParentMenu Procedure
  1725. FUNCTION setToolbarParentMenu RETURNS LOGICAL
  1726. (pcToolbarParentMenu AS CHARACTER) FORWARD.
  1727. /* _UIB-CODE-BLOCK-END */
  1728. &ANALYZE-RESUME
  1729. &ENDIF
  1730. &IF DEFINED(EXCLUDE-setToolbarTarget) = 0 &THEN
  1731. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarTarget Procedure
  1732. FUNCTION setToolbarTarget RETURNS LOGICAL
  1733. ( pcTarget AS CHARACTER ) FORWARD.
  1734. /* _UIB-CODE-BLOCK-END */
  1735. &ANALYZE-RESUME
  1736. &ENDIF
  1737. &IF DEFINED(EXCLUDE-setToolbarTargetEvents) = 0 &THEN
  1738. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolbarTargetEvents Procedure
  1739. FUNCTION setToolbarTargetEvents RETURNS LOGICAL
  1740. ( pcEvents AS CHARACTER ) FORWARD.
  1741. /* _UIB-CODE-BLOCK-END */
  1742. &ANALYZE-RESUME
  1743. &ENDIF
  1744. &IF DEFINED(EXCLUDE-setToolHeightPxl) = 0 &THEN
  1745. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolHeightPxl Procedure
  1746. FUNCTION setToolHeightPxl RETURNS LOGICAL
  1747. ( iValue AS INTEGER ) FORWARD.
  1748. /* _UIB-CODE-BLOCK-END */
  1749. &ANALYZE-RESUME
  1750. &ENDIF
  1751. &IF DEFINED(EXCLUDE-setToolMarginPxl) = 0 &THEN
  1752. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolMarginPxl Procedure
  1753. FUNCTION setToolMarginPxl RETURNS LOGICAL
  1754. ( iValue AS INTEGER ) FORWARD.
  1755. /* _UIB-CODE-BLOCK-END */
  1756. &ANALYZE-RESUME
  1757. &ENDIF
  1758. &IF DEFINED(EXCLUDE-setToolMaxWidthPxl) = 0 &THEN
  1759. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolMaxWidthPxl Procedure
  1760. FUNCTION setToolMaxWidthPxl RETURNS LOGICAL
  1761. ( iValue AS INTEGER ) FORWARD.
  1762. /* _UIB-CODE-BLOCK-END */
  1763. &ANALYZE-RESUME
  1764. &ENDIF
  1765. &IF DEFINED(EXCLUDE-setToolSeparatorPxl) = 0 &THEN
  1766. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolSeparatorPxl Procedure
  1767. FUNCTION setToolSeparatorPxl RETURNS LOGICAL
  1768. ( iValue AS INTEGER ) FORWARD.
  1769. /* _UIB-CODE-BLOCK-END */
  1770. &ANALYZE-RESUME
  1771. &ENDIF
  1772. &IF DEFINED(EXCLUDE-setToolSpacingPxl) = 0 &THEN
  1773. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolSpacingPxl Procedure
  1774. FUNCTION setToolSpacingPxl RETURNS LOGICAL
  1775. ( iValue AS INTEGER ) FORWARD.
  1776. /* _UIB-CODE-BLOCK-END */
  1777. &ANALYZE-RESUME
  1778. &ENDIF
  1779. &IF DEFINED(EXCLUDE-setToolWidthPxl) = 0 &THEN
  1780. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD setToolWidthPxl Procedure
  1781. FUNCTION setToolWidthPxl RETURNS LOGICAL
  1782. ( iValue AS INTEGER ) FORWARD.
  1783. /* _UIB-CODE-BLOCK-END */
  1784. &ANALYZE-RESUME
  1785. &ENDIF
  1786. &IF DEFINED(EXCLUDE-substituteActionText) = 0 &THEN
  1787. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD substituteActionText Procedure
  1788. FUNCTION substituteActionText RETURNS CHARACTER
  1789. ( pcAction AS CHAR,
  1790. pcText AS CHAR ) FORWARD.
  1791. /* _UIB-CODE-BLOCK-END */
  1792. &ANALYZE-RESUME
  1793. &ENDIF
  1794. &IF DEFINED(EXCLUDE-supportedObjects) = 0 &THEN
  1795. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD supportedObjects Procedure
  1796. FUNCTION supportedObjects RETURNS CHARACTER
  1797. (plLoaded AS LOG) FORWARD.
  1798. /* _UIB-CODE-BLOCK-END */
  1799. &ANALYZE-RESUME
  1800. &ENDIF
  1801. &IF DEFINED(EXCLUDE-targetActions) = 0 &THEN
  1802. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD targetActions Procedure
  1803. FUNCTION targetActions RETURNS CHARACTER
  1804. ( pcLinkType AS CHAR ) FORWARD.
  1805. /* _UIB-CODE-BLOCK-END */
  1806. &ANALYZE-RESUME
  1807. &ENDIF
  1808. &IF DEFINED(EXCLUDE-validateBuffer) = 0 &THEN
  1809. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD validateBuffer Procedure
  1810. FUNCTION validateBuffer RETURNS LOGICAL PRIVATE
  1811. ( pcBuffer AS CHAR,
  1812. pcKey AS CHAR ) FORWARD.
  1813. /* _UIB-CODE-BLOCK-END */
  1814. &ANALYZE-RESUME
  1815. &ENDIF
  1816. &IF DEFINED(EXCLUDE-windowDropDownList) = 0 &THEN
  1817. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION-FORWARD windowDropDownList Procedure
  1818. FUNCTION windowDropDownList RETURNS LOGICAL
  1819. ( pcAction AS CHARACTER ) FORWARD.
  1820. /* _UIB-CODE-BLOCK-END */
  1821. &ANALYZE-RESUME
  1822. &ENDIF
  1823. /* *********************** Procedure Settings ************************ */
  1824. &ANALYZE-SUSPEND _PROCEDURE-SETTINGS
  1825. /* Settings for THIS-PROCEDURE
  1826. Type: Procedure
  1827. Allow:
  1828. Frames: 0
  1829. Add Fields to: Neither
  1830. Other Settings: CODE-ONLY COMPILE
  1831. */
  1832. &ANALYZE-RESUME _END-PROCEDURE-SETTINGS
  1833. /* ************************* Create Window ************************** */
  1834. &ANALYZE-SUSPEND _CREATE-WINDOW
  1835. /* DESIGN Window definition (used by the UIB)
  1836. CREATE WINDOW Procedure ASSIGN
  1837. HEIGHT = 34.05
  1838. WIDTH = 57.6.
  1839. /* END WINDOW DEFINITION */
  1840. */
  1841. &ANALYZE-RESUME
  1842. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _INCLUDED-LIB Procedure
  1843. /* ************************* Included-Libraries *********************** */
  1844. {src/adm2/toolprop.i}
  1845. /* _UIB-CODE-BLOCK-END */
  1846. &ANALYZE-RESUME
  1847. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _MAIN-BLOCK Procedure
  1848. /* *************************** Main Block *************************** */
  1849. IF VALID-HANDLE(gshSessionManager) THEN
  1850. SUBSCRIBE TO "clearToolbarCache" IN gshSessionManager.
  1851. /* _UIB-CODE-BLOCK-END */
  1852. &ANALYZE-RESUME
  1853. /* ********************** Internal Procedures *********************** */
  1854. &IF DEFINED(EXCLUDE-assignActionWidgetIDs) = 0 &THEN
  1855. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE assignActionWidgetIDs Procedure
  1856. PROCEDURE assignActionWidgetIDs :
  1857. /*------------------------------------------------------------------------------
  1858. Purpose: Assigns widget-ids for the toolbar buttons.
  1859. Parameters: <none>
  1860. Notes: This procedure is called from the createToolbar function, only if the
  1861. -usewidgetid session parameter is being used.
  1862. ------------------------------------------------------------------------------*/
  1863. DEFINE VARIABLE cActionWidgetIDs AS CHARACTER NO-UNDO.
  1864. DEFINE VARIABLE iActions AS INTEGER NO-UNDO.
  1865. DEFINE VARIABLE iAction AS INTEGER NO-UNDO.
  1866. DEFINE VARIABLE iActionPos AS INTEGER NO-UNDO.
  1867. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  1868. {get ActionWidgetIDs cActionWidgetIDs}.
  1869. ASSIGN iActions = NUM-ENTRIES(cActionWidgetIDs).
  1870. REPEAT iAction = 1 TO iActions:
  1871. ASSIGN cAction = ENTRY(iAction, cActionWidgetIDs)
  1872. iActionPos = LOOKUP(cAction, cActionWidgetIDs).
  1873. IF iActionPos > 0 THEN DO:
  1874. FIND FIRST tButton WHERE tButton.hTarget = TARGET-PROCEDURE AND
  1875. tButton.name = cAction
  1876. NO-LOCK NO-ERROR.
  1877. IF AVAILABLE(tButton) THEN
  1878. ASSIGN tButton.hdl:WIDGET-ID = INT(ENTRY(iAction + 1, cActionWidgetIDs)).
  1879. END. /* IF iActionPos > 0 THEN */
  1880. END. /* REPEAT iAction = 1 TO iActions: */
  1881. RETURN.
  1882. END PROCEDURE.
  1883. /* _UIB-CODE-BLOCK-END */
  1884. &ANALYZE-RESUME
  1885. &ENDIF
  1886. &IF DEFINED(EXCLUDE-bandActionList) = 0 &THEN
  1887. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE bandActionList Procedure
  1888. PROCEDURE bandActionList PRIVATE :
  1889. /*------------------------------------------------------------------------------
  1890. Purpose: Retrieve all actions for specified category and band recursively
  1891. through all child bands
  1892. Parameters: pcCategory - category name
  1893. - blank is valid as it is used to find uncategorized
  1894. actions
  1895. - '*' All actions.
  1896. I-O pcActionList - collect actions
  1897. Notes: PRIVATE - Used by categoryActions, which is used by the
  1898. Instance Property dialog to select MenuBands
  1899. ------------------------------------------------------------------------------*/
  1900. DEFINE INPUT PARAMETER pcBand AS CHARACTER NO-UNDO.
  1901. DEFINE INPUT PARAMETER pcCategory AS CHARACTER NO-UNDO.
  1902. DEFINE INPUT-OUTPUT PARAMETER pcActionList AS CHARACTER NO-UNDO.
  1903. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  1904. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  1905. DEFINE BUFFER bttBandAction FOR ttBandAction.
  1906. DEFINE BUFFER bttBand FOR ttBand.
  1907. FOR EACH bttBandAction WHERE bttBandAction.Band = pcBand
  1908. BY bttBandAction.Sequence:
  1909. IF bttBandAction.ChildBand = '':U THEN
  1910. DO:
  1911. IF pcCategory <> '*':U THEN
  1912. cCategory = {fnarg actionCategory bttBandAction.Action}.
  1913. cType = {fnarg actionType bttBandAction.Action}.
  1914. IF (pcCategory = '*':U OR pcCategory = cCategory)
  1915. AND LOOKUP(cType,'Separator,Placeholder':U) = 0
  1916. AND LOOKUP(bttBandAction.Action,pcActionList) = 0 THEN
  1917. pcActionList = pcActionList
  1918. + (IF pcActionList <> '':U THEN ',':U ELSE '':U)
  1919. + bttBandAction.Action.
  1920. END.
  1921. ELSE RUN bandActionList IN TARGET-PROCEDURE
  1922. (bttBandAction.ChildBand,
  1923. pcCategory,
  1924. INPUT-OUTPUT pcActionList).
  1925. END.
  1926. END PROCEDURE.
  1927. /* _UIB-CODE-BLOCK-END */
  1928. &ANALYZE-RESUME
  1929. &ENDIF
  1930. &IF DEFINED(EXCLUDE-buildAllMenus) = 0 &THEN
  1931. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE buildAllMenus Procedure
  1932. PROCEDURE buildAllMenus :
  1933. /*------------------------------------------------------------------------------
  1934. Purpose: Builds all branches of submenus before the persistent trigger
  1935. On MENU-DROP creates them on mouse click.
  1936. This will enables shortcuts (accelerators) from the very beginning.
  1937. Parameters: <none>
  1938. Notes:
  1939. ------------------------------------------------------------------------------*/
  1940. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  1941. DEFINE BUFFER btMenu FOR tMenu.
  1942. FOR EACH btMenu WHERE btMenu.htarget = TARGET-PROCEDURE
  1943. AND btMenu.PARENT = '':
  1944. lOK = DYNAMIC-FUNCTION('BuildMenu' IN TARGET-PROCEDURE, btMenu.NAME).
  1945. END.
  1946. END PROCEDURE.
  1947. /* _UIB-CODE-BLOCK-END */
  1948. &ANALYZE-RESUME
  1949. &ENDIF
  1950. &IF DEFINED(EXCLUDE-clearActionCache) = 0 &THEN
  1951. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE clearActionCache Procedure
  1952. PROCEDURE clearActionCache :
  1953. /*------------------------------------------------------------------------------
  1954. Purpose: Clear cached data by Emptying temp-tables
  1955. Parameters: <none>
  1956. Notes: Called from instance clearCache but also directly from
  1957. session manager
  1958. ------------------------------------------------------------------------------*/
  1959. EMPTY TEMP-TABLE ttCategory.
  1960. EMPTY TEMP-TABLE ttAction.
  1961. END PROCEDURE.
  1962. /* _UIB-CODE-BLOCK-END */
  1963. &ANALYZE-RESUME
  1964. &ENDIF
  1965. &IF DEFINED(EXCLUDE-clearCache) = 0 &THEN
  1966. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE clearCache Procedure
  1967. PROCEDURE clearCache :
  1968. /*------------------------------------------------------------------------------
  1969. Purpose: Clear cached data by Emptying temp-tables
  1970. Parameters: <none>
  1971. Notes:
  1972. ------------------------------------------------------------------------------*/
  1973. RUN clearToolbarCache IN TARGET-PROCEDURE.
  1974. RUN SUPER.
  1975. END PROCEDURE.
  1976. /* _UIB-CODE-BLOCK-END */
  1977. &ANALYZE-RESUME
  1978. &ENDIF
  1979. &IF DEFINED(EXCLUDE-clearToolbarCache) = 0 &THEN
  1980. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE clearToolbarCache Procedure
  1981. PROCEDURE clearToolbarCache :
  1982. /*------------------------------------------------------------------------------
  1983. Purpose: Clear cached data by Empty temp-tables
  1984. Parameters:
  1985. Notes: Called from instance clearCache but also directly from
  1986. session manager
  1987. ------------------------------------------------------------------------------*/
  1988. EMPTY TEMP-TABLE ttToolbarBand.
  1989. EMPTY TEMP-TABLE ttObjectBand.
  1990. EMPTY TEMP-TABLE ttBand.
  1991. EMPTY TEMP-TABLE ttBandAction.
  1992. END PROCEDURE.
  1993. /* _UIB-CODE-BLOCK-END */
  1994. &ANALYZE-RESUME
  1995. &ENDIF
  1996. &IF DEFINED(EXCLUDE-createObjects) = 0 &THEN
  1997. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE createObjects Procedure
  1998. PROCEDURE createObjects :
  1999. /*------------------------------------------------------------------------------
  2000. Purpose: Load the toolbar and actions if necessary.
  2001. Parameters: <none>
  2002. Notes: This is NOT currently a create of actions for the instance.
  2003. This is published from the container to ensure that toolbar
  2004. actions are loaded before ANY object is initialized to avoid
  2005. errors if any objects call action methods in the toolbar before
  2006. it is initialized.
  2007. ------------------------------------------------------------------------------*/
  2008. IF {fn getUseRepository} THEN
  2009. RUN loadToolbar IN TARGET-PROCEDURE.
  2010. /* If not repository, init (load) all actions in the toolbar class. */
  2011. ELSE IF NOT {fn getActionsLoaded} THEN
  2012. RUN initAction IN TARGET-PROCEDURE.
  2013. run super.
  2014. return.
  2015. END PROCEDURE.
  2016. /* _UIB-CODE-BLOCK-END */
  2017. &ANALYZE-RESUME
  2018. &ENDIF
  2019. &IF DEFINED(EXCLUDE-destroyObject) = 0 &THEN
  2020. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE destroyObject Procedure
  2021. PROCEDURE destroyObject :
  2022. /*------------------------------------------------------------------------------
  2023. Purpose: Destroy dynamic widgets when the object is destroyed and
  2024. delete the toolbars instance actions when it is destroyed
  2025. Parameters: <none>
  2026. Notes:
  2027. ------------------------------------------------------------------------------*/
  2028. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  2029. DEFINE VARIABLE cWidgetPool AS CHARACTER NO-UNDO.
  2030. PUBLISH 'unRegisterObject':U FROM TARGET-PROCEDURE. /* iz 996*/
  2031. RUN SUPER.
  2032. {fn deleteToolbar}.
  2033. {fn deleteMenu}.
  2034. FOR EACH ttAction WHERE ttAction.ProcedureHandle = TARGET-PROCEDURE:
  2035. DELETE ttAction.
  2036. END.
  2037. FOR EACH ttLinkRuleTable WHERE ttLinkRuleTable.ProcedureHandle = TARGET-PROCEDURE:
  2038. IF VALID-HANDLE(ttLinkRuleTable.TableHandle) THEN
  2039. DELETE OBJECT ttLinkRuleTable.TableHandle.
  2040. DELETE ttLinkRuleTable.
  2041. END.
  2042. {get MenuBarHandle hMenubar}.
  2043. IF VALID-HANDLE(hMenuBar) THEN
  2044. DO:
  2045. IF NOT CAN-FIND(FIRST tMenu WHERE tMenu.Menubarhdl = hMenubar) THEN
  2046. DO:
  2047. /* get rid of the menu bar widget pool
  2048. (create in createMenuBar, needed because some menus survive their
  2049. constructor)
  2050. Non repository toolbars will recreate menu bars for each toolbar, so
  2051. we need to check if it the expression is valid (OWNER is valid) before
  2052. we try to delete the widget-pool.
  2053. */
  2054. cWidgetPool = {&menuwidgetpool} + STRING(hMenuBar:OWNER).
  2055. IF cWidgetPool > '':U THEN
  2056. DELETE WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER).
  2057. /* Really not needed as it went away with the widget-pool.. */
  2058. DELETE OBJECT hMenubar NO-ERROR.
  2059. {set MenuBarHandle ?}.
  2060. END.
  2061. END.
  2062. ERROR-STATUS:ERROR = NO.
  2063. RETURN.
  2064. END PROCEDURE.
  2065. /* _UIB-CODE-BLOCK-END */
  2066. &ANALYZE-RESUME
  2067. &ENDIF
  2068. &IF DEFINED(EXCLUDE-displayActions) = 0 &THEN
  2069. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE displayActions Procedure
  2070. PROCEDURE displayActions :
  2071. /*------------------------------------------------------------------------------
  2072. Purpose: Utility procedure to put up a dialog showing all the Actions
  2073. currently defined.
  2074. Parameters: <none>
  2075. Notes: Can be executed by selecting displayActions from the ProTools
  2076. procedure object viewer for the desired SmartContainer.
  2077. ------------------------------------------------------------------------------*/
  2078. DEFINE QUERY qAction FOR ttAction SCROLLING.
  2079. DEFINE VARIABLE Radio-Sort AS CHARACTER LABEL "Sort By" INIT "Type":U
  2080. VIEW-AS RADIO-SET HORIZONTAL
  2081. RADIO-BUTTONS
  2082. "Parent", "Parent":U,
  2083. "Name", "Name":U,
  2084. "Action", "Action":U
  2085. SIZE 32 BY 1 NO-UNDO.
  2086. DEFINE BUTTON Btn_OK AUTO-GO
  2087. LABEL "OK"
  2088. SIZE 12 BY 1.08
  2089. BGCOLOR 8 .
  2090. DEFINE BROWSE bAction QUERY qAction
  2091. DISPLAY
  2092. Action FORMAT "x(16)":U
  2093. Parent FORMAT "x(16)":U
  2094. Order
  2095. Name FORMAT "x(18)":U
  2096. Caption
  2097. Image FORMAT "x(14)":U
  2098. Accelerator FORMAT "x(10)":U
  2099. Link FORMAT "x(18)":U
  2100. Type FORMAT "x(14)":U
  2101. CreateEvent FORMAT "x(14)":U
  2102. OnChoose
  2103. CreateEvent
  2104. initCode
  2105. WITH 12 DOWN SIZE 120 BY 10 SEPARATORS.
  2106. DEFINE FRAME Dialog-Frame
  2107. Radio-Sort AT ROW 1.5 COL 30
  2108. Btn_OK AT ROW 14 COL 32
  2109. bAction AT ROW 3 COL 1
  2110. WITH VIEW-AS DIALOG-BOX KEEP-TAB-ORDER
  2111. SIDE-LABELS NO-UNDERLINE THREE-D SCROLLABLE
  2112. TITLE "Actions":U.
  2113. ON VALUE-CHANGED OF Radio-Sort
  2114. DO:
  2115. CLOSE QUERY qAction.
  2116. ASSIGN Radio-Sort.
  2117. CASE Radio-sort:
  2118. WHEN "parent" THEN OPEN QUERY qAction FOR EACH ttAction BY PARENT BY order.
  2119. WHEN "name" THEN OPEN QUERY qAction FOR EACH ttAction BY Name.
  2120. WHEN "Action" THEN OPEN QUERY qAction FOR EACH ttAction BY Action.
  2121. OTHERWISE OPEN QUERY qAction FOR EACH ttAction BY Action.
  2122. END CASE.
  2123. END.
  2124. ENABLE Radio-Sort bAction Btn_OK
  2125. WITH FRAME Dialog-Frame.
  2126. OPEN QUERY qAction FOR EACH ttAction BY PARENT BY order.
  2127. WAIT-FOR GO OF FRAME Dialog-Frame.
  2128. END PROCEDURE.
  2129. /* _UIB-CODE-BLOCK-END */
  2130. &ANALYZE-RESUME
  2131. &ENDIF
  2132. &IF DEFINED(EXCLUDE-displayMenu) = 0 &THEN
  2133. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE displayMenu Procedure
  2134. PROCEDURE displayMenu :
  2135. DEFINE BUFFER btMenu FOR tMenu.
  2136. DEFINE QUERY qMenu FOR btMenu SCROLLING.
  2137. DEFINE VARIABLE Radio-Sort AS CHARACTER LABEL "Sort By" INIT "Type":U
  2138. VIEW-AS RADIO-SET HORIZONTAL
  2139. RADIO-BUTTONS
  2140. "Parent", "Parent":U,
  2141. "Name", "Name":U,
  2142. "Toolbar", "Toolbar",
  2143. "Caption", "Caption":U
  2144. SIZE 70 BY 1 NO-UNDO.
  2145. DEFINE BUTTON Btn_OK AUTO-GO
  2146. LABEL "OK"
  2147. SIZE 12 BY 1.08
  2148. BGCOLOR 8 .
  2149. DEFINE BROWSE bMenu QUERY qMenu
  2150. DISPLAY
  2151. Parent FORMAT "x(16)":U
  2152. NAME FORMAT "x(16)":U
  2153. Caption FORMAT "x(35)":U
  2154. STRING(hTarget) @ hTarget
  2155. Seq
  2156. MergeOrder
  2157. Link FORMAT "x(25)"
  2158. WITH 12 DOWN SIZE 120 BY 10 SEPARATORS .
  2159. DEFINE FRAME Dialog-Frame
  2160. Radio-Sort AT ROW 1.5 COL 30
  2161. Btn_OK AT ROW 14 COL 32
  2162. bMenu AT ROW 3 COL 1
  2163. WITH VIEW-AS DIALOG-BOX KEEP-TAB-ORDER
  2164. SIDE-LABELS NO-UNDERLINE THREE-D SCROLLABLE
  2165. TITLE "Actions":U.
  2166. bMenu:COLUMN-RESIZABLE = TRUE.
  2167. ON VALUE-CHANGED OF Radio-Sort
  2168. DO:
  2169. CLOSE QUERY qMenu.
  2170. ASSIGN Radio-Sort.
  2171. CASE Radio-sort:
  2172. WHEN "parent" THEN OPEN QUERY qMenu FOR EACH btMenu
  2173. BY PARENT.
  2174. WHEN "name" THEN OPEN QUERY qMenu FOR EACH btMenu
  2175. BY Name.
  2176. WHEN "toolbar" THEN OPEN QUERY qMenu FOR EACH btMenu
  2177. BY hTarget.
  2178. WHEN "Caption" THEN OPEN QUERY qMenu FOR EACH btMenu
  2179. BY Caption.
  2180. OTHERWISE OPEN QUERY qMenu FOR EACH btMenu BY hTarget
  2181. BY PARENT BY name.
  2182. END CASE.
  2183. END.
  2184. ENABLE Radio-Sort bmENU Btn_OK
  2185. WITH FRAME Dialog-Frame.
  2186. OPEN QUERY qMenu FOR EACH btMenu BY Name.
  2187. WAIT-FOR GO OF FRAME Dialog-Frame.
  2188. END PROCEDURE.
  2189. /* _UIB-CODE-BLOCK-END */
  2190. &ANALYZE-RESUME
  2191. &ENDIF
  2192. &IF DEFINED(EXCLUDE-filterState) = 0 &THEN
  2193. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE filterState Procedure
  2194. PROCEDURE filterState :
  2195. /*------------------------------------------------------------------------------
  2196. Purpose: published from Navigation-Target to tell the panel when to enable
  2197. filter action (when its linked).
  2198. Parameters: INPUT pcState AS CHARACTER - 'FilterAvailable'
  2199. Notes:
  2200. ------------------------------------------------------------------------------*/
  2201. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  2202. IF pcState = 'FilterAvailable':U THEN
  2203. RUN setButtons IN TARGET-PROCEDURE ('enable-filter':U).
  2204. RETURN.
  2205. END PROCEDURE.
  2206. /* _UIB-CODE-BLOCK-END */
  2207. &ANALYZE-RESUME
  2208. &ENDIF
  2209. &IF DEFINED(EXCLUDE-hideObject) = 0 &THEN
  2210. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE hideObject Procedure
  2211. PROCEDURE hideObject :
  2212. /*----------------------------------------------------------------------------
  2213. Purpose: Hide the object
  2214. The purpose for the override is to remove the menu bar handle
  2215. from the window for non-repository objects.
  2216. Parameters: <none>
  2217. Notes: This somewhat strange removal of the menu bar on hide was
  2218. implemented mostly because we did not support
  2219. Repository objects allows different toolbars to share the menubar
  2220. and does not need to hide it when the object is hidden.
  2221. -----------------------------------------------------------------------------*/
  2222. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  2223. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  2224. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  2225. DEFINE VARIABLE lMenu AS LOGICAL NO-UNDO.
  2226. DEFINE VARIABLE lRemoveMenu AS LOGICAL NO-UNDO.
  2227. {get UseRepository lUseRepository}.
  2228. IF NOT lUseRepository THEN
  2229. DO:
  2230. {get Window hWindow}.
  2231. {get MenubarHandle hMenu}.
  2232. IF VALID-HANDLE(hMenu) AND VALID-HANDLE(hWindow) THEN
  2233. DO:
  2234. /* Only remove if it is our own menubar */
  2235. IF hWindow:MENUBAR = hMenu THEN
  2236. hWindow:MENUBAR = ?.
  2237. END.
  2238. END.
  2239. ELSE DO:
  2240. &SCOPED-DEFINE xp-assign
  2241. {get Menu lMenu}
  2242. {get RemoveMenuOnhide lRemoveMenu}
  2243. .
  2244. &UNDEFINE xp-assign
  2245. /* if remove on hide then remove */
  2246. IF lRemoveMenu AND lMenu THEN
  2247. RUN removeMenu IN TARGET-PROCEDURE.
  2248. END.
  2249. RUN SUPER.
  2250. END PROCEDURE.
  2251. /* _UIB-CODE-BLOCK-END */
  2252. &ANALYZE-RESUME
  2253. &ENDIF
  2254. &IF DEFINED(EXCLUDE-initAction) = 0 &THEN
  2255. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initAction Procedure
  2256. PROCEDURE initAction :
  2257. /*------------------------------------------------------------------------------
  2258. Purpose: Defines all default actions for the adm when running without a
  2259. repository.
  2260. Parameters: <none>
  2261. Notes: The actions defined here are class actions and are available for all
  2262. objects (toolbars) that inherits from this class.
  2263. This procedure is called from initializeObject, but ONLY the first
  2264. time it's been called.
  2265. ------------------------------------------------------------------------------*/
  2266. DEF VAR xcColumns AS CHAR INIT
  2267. "Name,Caption,Image,Type,OnChoose,AccessType,Parent,EnableRule":U.
  2268. &SCOP dlmt + CHR(1) +
  2269. defineAction("FILE":U,"Name,Caption,Type":U,
  2270. "File" {&dlmt}
  2271. "File" {&dlmt}
  2272. "Menu":U).
  2273. defineAction("TABLEIO":U,"Name,Caption,Link":U,
  2274. "Tableio" {&dlmt}
  2275. "Tableio" {&dlmt}
  2276. "Tableio-target":U ).
  2277. /* The function currently has one child, filter, but it's defined as a
  2278. group/parent to make it appear in the Inst Props and to be able to add
  2279. other actions later. */
  2280. defineAction("FUNCTION":U,"Name,Caption":U,
  2281. "Functions" {&dlmt}
  2282. "Functions" ).
  2283. defineAction("NAVIGATION":U,"Name,Caption,Link":U,
  2284. "Navigation" {&dlmt}
  2285. "Navigation" {&dlmt}
  2286. "Navigation-target":U ).
  2287. defineAction("TRANSACTION","Name,Caption,Link":U,
  2288. "Commit" {&dlmt}
  2289. "Transaction" {&dlmt}
  2290. "Commit-target":U ).
  2291. defineAction("ADD",xcColumns,
  2292. "Add" {&dlmt}
  2293. "Datensatz zufügen" {&dlmt}
  2294. "add.bmp":U {&dlmt}
  2295. "PUBLISH":U {&dlmt}
  2296. "addRecord":U {&dlmt}
  2297. "CREATE":U {&dlmt}
  2298. "TABLEIO":U {&dlmt}
  2299. "RecordState=RecordAvailable,NoRecordAvailable and Editable and DataModified=no and canNavigate() and canUpdate()":U
  2300. ).
  2301. defineAction("UPDATE":U,xcColumns,
  2302. "Update" {&dlmt}
  2303. "Datensatz mutieren" {&dlmt}
  2304. "update.bmp":U {&dlmt}
  2305. "PUBLISH":U {&dlmt}
  2306. "updateMode('updateBegin')":U {&dlmt}
  2307. "WRITE":U {&dlmt}
  2308. "TABLEIO":U {&dlmt}
  2309. "RecordState=RecordAvailable and Editable and ObjectMode=View and canUpdate()":U
  2310. ).
  2311. defineAction("COPY":U,xcColumns,
  2312. "Copy" {&dlmt}
  2313. "Datensatz kopieren" {&dlmt}
  2314. "copyrec.bmp":U {&dlmt}
  2315. "PUBLISH":U {&dlmt}
  2316. "copyRecord":U {&dlmt}
  2317. "CREATE":U {&dlmt}
  2318. "TABLEIO":U {&dlmt}
  2319. "RecordState=RecordAvailable and Editable and DataModified=no and canNavigate() and canUpdate()":U
  2320. ).
  2321. defineAction("DELETE":U,xcColumns,
  2322. "Delete" {&dlmt}
  2323. "Datensatz löschen" {&dlmt}
  2324. "deleterec.bmp":U {&dlmt}
  2325. "PUBLISH":U {&dlmt}
  2326. "deleteRecord":U {&dlmt}
  2327. "DELETE":U {&dlmt}
  2328. "TABLEIO":U {&dlmt}
  2329. "RecordState=RecordAvailable and DataModified=no and canNavigate() and canUpdate()":U
  2330. ).
  2331. defineAction("SAVE":U,xcColumns,
  2332. "Save" {&dlmt}
  2333. "Daten speichern" {&dlmt}
  2334. "saverec.bmp":U {&dlmt}
  2335. "PUBLISH":U {&dlmt}
  2336. "updateRecord":U {&dlmt}
  2337. "WRITE":U {&dlmt}
  2338. "TABLEIO":U {&dlmt}
  2339. "NewRecord=add,copy or DataModified":U
  2340. ).
  2341. defineAction("RESET":U,xcColumns,
  2342. "Reset" {&dlmt}
  2343. "Änderungen rückgängig" {&dlmt}
  2344. "reset.bmp":U {&dlmt}
  2345. "PUBLISH":U {&dlmt}
  2346. "resetRecord":U {&dlmt}
  2347. "":U {&dlmt}
  2348. "TABLEIO":U {&dlmt}
  2349. "DataModified":U
  2350. ).
  2351. defineAction("UndoChange":U,xcColumns + "," + "SubstituteProperty",
  2352. "Undo &1" {&dlmt}
  2353. "Undo &1" {&dlmt}
  2354. "reset.bmp":U {&dlmt}
  2355. "PUBLISH":U {&dlmt}
  2356. "undoChange":U {&dlmt}
  2357. "":U {&dlmt}
  2358. "TABLEIO":U {&dlmt}
  2359. "CanUndoChanges AND ObjectMode=View,Modify OR DataModified":U {&dlmt}
  2360. "UndoChangeCaption":U
  2361. ).
  2362. defineAction("CANCEL":U,xcColumns,
  2363. "Cance&l" {&dlmt}
  2364. "Abbrechen" {&dlmt}
  2365. "cancel.bmp":U {&dlmt}
  2366. "PUBLISH":u {&dlmt}
  2367. "cancelRecord":U {&dlmt}
  2368. "":U {&dlmt}
  2369. "TABLEIO":U {&dlmt}
  2370. "ObjectMode=Modify and SaveSource=no and DataModified or ObjectMode=Update or NewRecord=add,copy":U
  2371. ).
  2372. defineAction("UNDO":U,xcColumns,
  2373. "U&ndo" {&dlmt}
  2374. "U&ndo" {&dlmt}
  2375. "rollback.bmp":U {&dlmt}
  2376. "PUBLISH":U {&dlmt}
  2377. "undoTransaction":U {&dlmt}
  2378. "":U {&dlmt}
  2379. "TRANSACTION":U {&dlmt}
  2380. "RowObjectState=RowUpdated"
  2381. ).
  2382. defineAction("COMMIT":U,xcColumns,
  2383. "Co&mmit" {&dlmt}
  2384. "Co&mmit" {&dlmt}
  2385. "commit.bmp":U {&dlmt}
  2386. "PUBLISH":U {&dlmt}
  2387. "commitTransaction":U {&dlmt}
  2388. "WRITE":U {&dlmt}
  2389. "TRANSACTION":U {&dlmt}
  2390. "RowObjectState=RowUpdated"
  2391. ).
  2392. defineAction("FIRST":U,xcColumns,
  2393. "First" {&dlmt}
  2394. "First" {&dlmt}
  2395. "first.bmp":U {&dlmt}
  2396. "PUBLISH":U {&dlmt}
  2397. "fetchFirst":U {&dlmt}
  2398. "READ":U {&dlmt}
  2399. "NAVIGATION":U {&dlmt}
  2400. "QueryPosition=LastRecord,NotFirstOrlast and canNavigate()":U
  2401. ).
  2402. defineAction("PREV":U,xcColumns,
  2403. "Prev" {&dlmt}
  2404. "Prev" {&dlmt}
  2405. "prev.bmp":U {&dlmt}
  2406. "PUBLISH":U {&dlmt}
  2407. "fetchPrev":U {&dlmt}
  2408. "READ":U {&dlmt}
  2409. "NAVIGATION":U {&dlmt}
  2410. "QueryPosition=LastRecord,NotFirstOrlast and canNavigate()":U
  2411. ).
  2412. defineAction("NEXT":U,xcColumns,
  2413. "Next" {&dlmt}
  2414. "Next" {&dlmt}
  2415. "next.bmp":U {&dlmt}
  2416. "PUBLISH":U {&dlmt}
  2417. "fetchNext":U {&dlmt}
  2418. "READ":U {&dlmt}
  2419. "NAVIGATION":U {&dlmt}
  2420. "QueryPosition=FirstRecord,NotFirstOrlast and canNavigate()":U
  2421. ).
  2422. defineAction("LAST":U,xcColumns,
  2423. "Last" {&dlmt}
  2424. "Last" {&dlmt}
  2425. "last.bmp":U {&dlmt}
  2426. "PUBLISH":U {&dlmt}
  2427. "fetchLast":U {&dlmt}
  2428. "READ":U {&dlmt}
  2429. "NAVIGATION":U {&dlmt}
  2430. "QueryPosition=FirstRecord,NotFirstOrlast and canNavigate()":U
  2431. ).
  2432. defineAction("EXIT":U,xcColumns,
  2433. "Exit" {&dlmt}
  2434. "Exit" {&dlmt}
  2435. "exit.bmp":U {&dlmt}
  2436. "PUBLISH":U {&dlmt}
  2437. "exitObject":U {&dlmt}
  2438. "":U {&dlmt}
  2439. "":U
  2440. ).
  2441. defineAction("FILTER":U,xcColumns + ",":U + 'Link':U,
  2442. "Filter" {&dlmt}
  2443. "Filter" {&dlmt}
  2444. "filter.bmp":U {&dlmt}
  2445. "PUBLISH":U {&dlmt}
  2446. "startFilter":U {&dlmt}
  2447. "READ":U {&dlmt}
  2448. "FUNCTION":U {&dlmt}
  2449. "FilterAvailable=yes and QueryPosition=NoRecordAvailable,RecordAvailable,FirstRecord,LastRecord,OnlyRecord,NotFirstOrLast":U {&dlmt}
  2450. "navigation-target":U
  2451. ).
  2452. &UNDEFINE dlmt
  2453. /* set class property */
  2454. {set ActionsLoaded TRUE}.
  2455. END PROCEDURE.
  2456. /* _UIB-CODE-BLOCK-END */
  2457. &ANALYZE-RESUME
  2458. &ENDIF
  2459. &IF DEFINED(EXCLUDE-initializeObject) = 0 &THEN
  2460. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE initializeObject Procedure
  2461. PROCEDURE initializeObject :
  2462. /*------------------------------------------------------------------------------
  2463. Purpose: initialize the toolbar by creating all dynmaic buttons and menues.
  2464. Parameters: <none>
  2465. Notes:
  2466. ------------------------------------------------------------------------------*/
  2467. DEFINE VARIABLE lToolBar AS LOG NO-UNDO.
  2468. DEFINE VARIABLE lMenu AS LOG NO-UNDO.
  2469. DEFINE VARIABLE cBlank AS CHAR NO-UNDO.
  2470. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  2471. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  2472. DEFINE VARIABLE hPopupFrame AS HANDLE NO-UNDO.
  2473. DEFINE VARIABLE cUIBMode AS CHAR NO-UNDO.
  2474. DEFINE VARIABLE lInit AS LOG NO-UNDO.
  2475. DEFINE VARIABLE cInfo AS CHAR NO-UNDO.
  2476. DEFINE VARIABLE lHideOnInit AS LOGICAL NO-UNDO.
  2477. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  2478. DEFINE VARIABLE cTableioType AS CHARACTER NO-UNDO.
  2479. DEFINE VARIABLE cHidden AS CHARACTER NO-UNDO.
  2480. DEFINE VARIABLE cPanelType AS CHARACTER NO-UNDO.
  2481. DEFINE VARIABLE cTableioTarget AS CHARACTER NO-UNDO.
  2482. define variable hContainerSource as handle no-undo.
  2483. &SCOPED-DEFINE xp-assign
  2484. {get TableioType cTableioType}
  2485. {get HiddenActions cHidden}
  2486. {get UIBMode cUIBmode}
  2487. {get Menu lMenu}
  2488. {get UseRepository lUseRepository}
  2489. {get PanelType cPanelType}
  2490. {get TableioTarget cTableioTarget}
  2491. {get ContainerSource hContainerSource}
  2492. .
  2493. &UNDEFINE xp-assign
  2494. /* Assign var to determine in resizeObject when initialization is complete */
  2495. ASSIGN glInitComplete = NO.
  2496. IF NOT cUIBMode BEGINS "DESIGN":U THEN
  2497. DO:
  2498. /* The sbo subscribes to this event in order to update ObjectMapping */
  2499. PUBLISH 'registerObject':U FROM TARGET-PROCEDURE.
  2500. {get ObjectInitialized lInit}.
  2501. IF lInit THEN RETURN "ADM-ERROR":U.
  2502. END.
  2503. /* allow standalone (simulation?) */
  2504. IF NOT valid-handle(hContainerSource) then
  2505. RUN createObjects IN TARGET-PROCEDURE.
  2506. /* Ensure tableio toolbar 'Update' action is hidden if TableioType is "Save"
  2507. and ensure that only one of 'Reset' or 'UndoChange' is present */
  2508. IF (cTableioTarget > '' OR cUIBMode = "DESIGN":U) AND cPanelType = 'toolbar':U THEN
  2509. DO:
  2510. /* Tableiotype is managed by HiddenActions in toolbar from 9.1D */
  2511. IF cTableioType = 'Save':U AND LOOKUP('update':U,cHidden) = 0
  2512. AND {fnarg canFindAction 'Update':U} THEN
  2513. cHidden = cHidden
  2514. + (IF cHidden = '':U THEN '':U ELSE ',':U)
  2515. + 'Update':U.
  2516. IF LOOKUP('Reset':U,cHidden) = 0 AND LOOKUP('UndoChange':U,cHidden) = 0
  2517. AND {fnarg canFindAction 'UndoChange':U} THEN
  2518. cHidden = cHidden
  2519. + (IF cHidden = '':U THEN '':U ELSE ',':U)
  2520. + 'Reset':U.
  2521. {set HiddenActions cHidden}.
  2522. END. /* tableio toolbar */
  2523. RUN SUPER.
  2524. {get ContainerHandle hFrame}.
  2525. ASSIGN
  2526. hFrame:SCROLLABLE = FALSE
  2527. hFrame:HIDDEN = TRUE.
  2528. IF cPanelType = 'toolbar' THEN
  2529. DO:
  2530. IF cUIBMode BEGINS "DESIGN":U THEN
  2531. DO:
  2532. IF lMenu THEN
  2533. DO:
  2534. RUN adeuib/_uibinfo.p (?,"PROCEDURE ?","CONTEXT",OUTPUT cInfo).
  2535. RUN adeuib/_uibinfo.p (INT(cInfo),?,"TYPE":U,OUTPUT cInfo).
  2536. IF cinfo = "DIALOG-BOX":U THEN
  2537. DO:
  2538. MESSAGE
  2539. "A dialog-box cannot have a menu interface."
  2540. "The menu option will be turned off."
  2541. VIEW-AS ALERT-BOX.
  2542. lMenu = FALSE.
  2543. {set Menu lMenu}.
  2544. END. /* cInfo = dialog */
  2545. /* Find the windows context (we could have used WINDOW ? in the next call,
  2546. but this makes it safe if this should be called when not current) */
  2547. {get Window hWindow}.
  2548. RUN adeuib/_uibinfo.p
  2549. (?,"HANDLE " + STRING(hWindow),"CONTEXT",OUTPUT cInfo).
  2550. RUN adeuib/_uibinfo.p
  2551. (INT(cInfo),?,"CONTAINS MENU RETURN CONTEXT", OUTPUT cInfo).
  2552. IF cInfo <> "":U THEN
  2553. DO:
  2554. MESSAGE
  2555. "This window already has a menu that has been created with the AppBuilder."
  2556. SKIP
  2557. "That menu must be deleted before the SmartToolbar menu can be created."
  2558. SKIP
  2559. "The SmartToolbar menu option will be turned off."
  2560. SKIP
  2561. VIEW-AS ALERT-BOX INFORMATION.
  2562. lMenu = FALSE.
  2563. {set Menu lMenu}.
  2564. END. /* cInfo <> '' */
  2565. {fn deleteMenu}.
  2566. {fn deleteToolbar}.
  2567. {get Toolbar lToolbar}.
  2568. IF NOT lToolbar THEN
  2569. {set ToolbarAutoSize FALSE}.
  2570. /* Find the ventilator frame */
  2571. hPopupFrame = hFrame:FIRST-CHILD.
  2572. hPopupFrame = hPopupframe:FIRST-CHILD.
  2573. &SCOPED-DEFINE xp-assign
  2574. {set AvailMenuActions cBlank}
  2575. {set AvailToolbarActions cBlank}.
  2576. &UNDEFINE xp-assign
  2577. END. /* If lMenu */
  2578. END.
  2579. IF lUseRepository THEN
  2580. DO:
  2581. {fn constructToolbar}.
  2582. {fn constructMenu}.
  2583. END.
  2584. ELSE DO:
  2585. {fn initializeMenu}.
  2586. {fn initializeToolBar}.
  2587. END.
  2588. END.
  2589. {get HideOnInit lHideOnInit}.
  2590. IF NOT lHideOnInit then
  2591. DO:
  2592. RUN viewObject IN TARGET-PROCEDURE.
  2593. IF cUIBmode = "DESIGN":U AND ERROR-STATUS:GET-NUMBER(1) = 6491 THEN
  2594. DO:
  2595. MESSAGE
  2596. "The toolbar is too small to show all buttons. "
  2597. "This will typically occur when the container is too small. " SKIP
  2598. "The container must be resized manually before the toolbar can be resized." SKIP
  2599. "The toolbar may be resized manually or by applying the Instance Properties." SKIP
  2600. VIEW-AS ALERT-BOX INFORMATION.
  2601. END. /* if error */
  2602. IF VALID-HANDLE(hPopupFrame) THEN
  2603. hPopupframe:MOVE-TO-TOP().
  2604. END.
  2605. IF cUIBmode = '':U THEN
  2606. RUN resetAllTargetActions IN TARGET-PROCEDURE.
  2607. ASSIGN glInitComplete = YES
  2608. hFrame:SCROLLABLE = YES.
  2609. END PROCEDURE.
  2610. /* _UIB-CODE-BLOCK-END */
  2611. &ANALYZE-RESUME
  2612. &ENDIF
  2613. &IF DEFINED(EXCLUDE-linkState) = 0 &THEN
  2614. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE linkState Procedure
  2615. PROCEDURE linkState :
  2616. /*------------------------------------------------------------------------------
  2617. Purpose: Receives messages when an object linked to this one becomes
  2618. "active" or "activeTarget" (normally when it's viewed) or
  2619. "inactive" or "inactiveTarget" (Hidden).
  2620. resets panel buttons accordingly.
  2621. Parameters: pcState AS CHARACTER -- 'active*'/'inactive*'
  2622. The activeTarget function is very important in the event
  2623. procedures called by this to identify which object to reset.
  2624. ------------------------------------------------------------------------------*/
  2625. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  2626. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  2627. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  2628. DEFINE VARIABLE cLinkType AS CHARACTER NO-UNDO.
  2629. DEFINE VARIABLE cTargets AS CHARACTER NO-UNDO.
  2630. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  2631. DEFINE VARIABLE lDeactivateTargetOnHide AS LOGICAL NO-UNDO.
  2632. DEFINE VARIABLE iTarget AS INTEGER NO-UNDO.
  2633. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  2634. DEFINE VARIABLE cLinkTargetNames AS CHARACTER NO-UNDO.
  2635. DEFINE VARIABLE cSources AS CHARACTER NO-UNDO.
  2636. DEFINE VARIABLE cDataTargets AS CHARACTER NO-UNDO.
  2637. DEFINE VARIABLE lQuery AS LOGICAL NO-UNDO.
  2638. DEFINE VARIABLE lHidden AS LOGICAL NO-UNDO.
  2639. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  2640. DEFINE VARIABLE hTargetContainer AS HANDLE NO-UNDO.
  2641. DEFINE VARIABLE cContainerType AS CHARACTER NO-UNDO.
  2642. /* Data objects that receive 'active' message from child data objects
  2643. appends 'data' as a signal to not activate the navigation toolbar */
  2644. if pcState = 'ActiveData':U then
  2645. return.
  2646. &SCOPED-DEFINE xp-assign
  2647. {get LinkTargetNames cLinkTargetNames}
  2648. {get DeactivateTargetOnHide lDeactivateTargetOnHide}.
  2649. &UNDEFINE xp-assign
  2650. DO iLink = 1 TO NUM-ENTRIES(cLinkTargetNames):
  2651. ASSIGN
  2652. cLink = ENTRY(iLink,cLinkTargetNames)
  2653. cLinkType = ENTRY(1,cLink,'-':U)
  2654. cLink = REPLACE(cLink,'-':U,'':U)
  2655. cTargets = DYNAMIC-FUNCTION('get':U + cLink IN TARGET-PROCEDURE)
  2656. cLink = REPLACE(cLink,"Target":U,"Source":U)
  2657. NO-ERROR.
  2658. IF cLinkType = 'ContainerToolbar':U THEN NEXT.
  2659. IF CAN-DO(cTargets,STRING(SOURCE-PROCEDURE)) THEN
  2660. DO:
  2661. IF pcState BEGINS 'active':U
  2662. AND NOT lDeactivateTargetOnHide
  2663. AND NUM-ENTRIES(cTargets) > 1 THEN
  2664. DO:
  2665. TargetLoop:
  2666. DO iTarget = 1 TO NUM-ENTRIES(cTargets):
  2667. hTarget = WIDGET-HANDLE(ENTRY(iTarget,cTargets)).
  2668. IF hTarget <> SOURCE-PROCEDURE then
  2669. RUN linkStateHandler IN hTarget ('inactive':U,
  2670. TARGET-PROCEDURE,
  2671. cLink) NO-ERROR.
  2672. END.
  2673. END.
  2674. IF (pcState BEGINS 'active':U OR lDeactivateTargetOnHide) THEN
  2675. DO:
  2676. /* If an indirect message from a Target of our Target, we check
  2677. the if the visual data targets of the publisher is truly
  2678. hidden before we disable the link.
  2679. This is to deal with the case were a datasource has multiple
  2680. navtargets. In that case we only disable the navtarget on
  2681. the window where the visual object is hidden. */
  2682. IF pcstate = 'InActiveTarget':U THEN
  2683. DO:
  2684. {get DataTarget cDataTargets SOURCE-PROCEDURE} NO-ERROR.
  2685. DO iTarget = 1 TO NUM-ENTRIES(cDataTargets):
  2686. hTarget = WIDGET-HANDLE(ENTRY(iTarget,cDataTargets)).
  2687. {get QueryObject lQuery hTarget}.
  2688. IF NOT lQuery THEN
  2689. DO:
  2690. lHidden = ?.
  2691. {get GroupAssignHidden lHidden hTarget} NO-ERROR.
  2692. IF lHidden = FALSE THEN
  2693. DO:
  2694. /* Get the window of the target */
  2695. {get ContainerHandle hTargetContainer hTarget}.
  2696. DO WHILE VALID-HANDLE(hTargetContainer):
  2697. IF hTargetContainer:TYPE = 'WINDOW':U THEN
  2698. LEAVE.
  2699. hTargetContainer = hTargetContainer:PARENT.
  2700. END.
  2701. /* Get our window */
  2702. {get ContainerHandle hContainer}.
  2703. DO WHILE VALID-HANDLE(hContainer):
  2704. IF hContainer:TYPE = 'WINDOW':U THEN
  2705. LEAVE.
  2706. hContainer = hContainer:PARENT.
  2707. END.
  2708. /* We are in the same window as a visible target of the publisher,
  2709. ignore the request */
  2710. IF VALID-HANDLE(hContainer) AND hContainer = hTargetContainer then
  2711. RETURN.
  2712. END. /* not hidden */
  2713. END. /* not query (visual) */
  2714. END. /* loop through targets of publisher */
  2715. END.
  2716. RUN linkStateHandler IN SOURCE-PROCEDURE (REPLACE(pcState,'Target':U,'':U),
  2717. TARGET-PROCEDURE,
  2718. cLink) NO-ERROR.
  2719. RUN VALUE('reset':U + cLinkType) IN TARGET-PROCEDURE.
  2720. END.
  2721. END.
  2722. END.
  2723. RETURN.
  2724. END PROCEDURE.
  2725. /* _UIB-CODE-BLOCK-END */
  2726. &ANALYZE-RESUME
  2727. &ENDIF
  2728. &IF DEFINED(EXCLUDE-loadActions) = 0 &THEN
  2729. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadActions Procedure
  2730. PROCEDURE loadActions :
  2731. /*------------------------------------------------------------------------------
  2732. Purpose: Load specified actions.
  2733. Parameters:
  2734. Notes: LoadPanel in panel.p uses this to load actions for panels
  2735. ------------------------------------------------------------------------------*/
  2736. DEFINE INPUT PARAMETER pcActionList AS CHARACTER NO-UNDO.
  2737. DEFINE VARIABLE cProperties AS CHARACTER NO-UNDO.
  2738. DEFINE VARIABLE dUserObj AS DECIMAL NO-UNDO.
  2739. DEFINE VARIABLE dOrganizationObj AS DECIMAL NO-UNDO.
  2740. /* gshAstraAppserver will only be valid if we're running Dynamics */
  2741. IF VALID-HANDLE(gshAstraAppserver)
  2742. AND VALID-HANDLE(gshSessionManager) THEN
  2743. DO:
  2744. ASSIGN cProperties = DYNAMIC-FUNCTION("getPropertyList":U IN gshSessionManager,
  2745. INPUT "currentUserObj,currentOrganisationObj":U,INPUT NO)
  2746. dUserObj = DECIMAL(ENTRY(1, cProperties, CHR(3)))
  2747. dOrganizationObj = DECIMAL(ENTRY(2, cProperties, CHR(3)))
  2748. NO-ERROR.
  2749. RUN ry/app/rygetitemp.p ON gshAstraAppserver (INPUT '':U,
  2750. INPUT pcActionList,
  2751. INPUT dUserObj,
  2752. INPUT dOrganizationObj,
  2753. OUTPUT TABLE ttAction APPEND,
  2754. OUTPUT TABLE ttCategory APPEND).
  2755. {fn normalizeActionData}.
  2756. END.
  2757. RETURN.
  2758. END PROCEDURE.
  2759. /* _UIB-CODE-BLOCK-END */
  2760. &ANALYZE-RESUME
  2761. &ENDIF
  2762. &IF DEFINED(EXCLUDE-loadBands) = 0 &THEN
  2763. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadBands Procedure
  2764. PROCEDURE loadBands :
  2765. /*------------------------------------------------------------------------------
  2766. Purpose: Load data for one or more band.
  2767. Parameters:
  2768. Notes:
  2769. ------------------------------------------------------------------------------*/
  2770. DEFINE INPUT PARAMETER pcBandList AS CHARACTER NO-UNDO.
  2771. DEFINE OUTPUT PARAMETER TABLE-HANDLE hBand.
  2772. DEFINE OUTPUT PARAMETER TABLE-HANDLE hBandAction.
  2773. /* gshAstraAppserver will only be valid if we're running Dynamics */
  2774. IF VALID-HANDLE(gshAstraAppserver)
  2775. AND VALID-HANDLE(gshSessionManager) THEN
  2776. /* Get the band data. */
  2777. dynamic-function('retrieveBandsAndActions':U in target-procedure,
  2778. input '', input '', input pcBandList).
  2779. RETURN.
  2780. END PROCEDURE.
  2781. /* _UIB-CODE-BLOCK-END */
  2782. &ANALYZE-RESUME
  2783. &ENDIF
  2784. &IF DEFINED(EXCLUDE-loadCategories) = 0 &THEN
  2785. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadCategories Procedure
  2786. PROCEDURE loadCategories :
  2787. /*------------------------------------------------------------------------------
  2788. Purpose: Load specified actions.
  2789. Parameters:
  2790. Notes:
  2791. ------------------------------------------------------------------------------*/
  2792. DEFINE INPUT PARAMETER pcCategoryList AS CHARACTER NO-UNDO.
  2793. IF VALID-HANDLE(gshRepositoryManager) THEN
  2794. RUN getActions IN gshRepositoryManager
  2795. (INPUT pcCategoryList,
  2796. INPUT '':U,
  2797. OUTPUT TABLE ttAction APPEND,
  2798. OUTPUT TABLE ttCategory APPEND).
  2799. {fn normalizeActionData}.
  2800. END PROCEDURE.
  2801. /* _UIB-CODE-BLOCK-END */
  2802. &ANALYZE-RESUME
  2803. &ENDIF
  2804. &IF DEFINED(EXCLUDE-loadObjectBands) = 0 &THEN
  2805. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadObjectBands Procedure
  2806. PROCEDURE loadObjectBands :
  2807. /*------------------------------------------------------------------------------
  2808. Purpose: Load bands and actions for one or more objects object
  2809. Parameters:
  2810. Notes:
  2811. ------------------------------------------------------------------------------*/
  2812. DEFINE INPUT PARAMETER pcObjectList AS CHARACTER NO-UNDO.
  2813. /* gshAstraAppserver will only be valid if we're running Dynamics */
  2814. IF VALID-HANDLE(gshAstraAppserver)
  2815. AND VALID-HANDLE(gshSessionManager) THEN
  2816. dynamic-function('retrieveBandsAndActions' in target-procedure,
  2817. input '', input pcObjectList, input '').
  2818. return.
  2819. END PROCEDURE.
  2820. /* _UIB-CODE-BLOCK-END */
  2821. &ANALYZE-RESUME
  2822. &ENDIF
  2823. &IF DEFINED(EXCLUDE-loadToolbar) = 0 &THEN
  2824. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadToolbar Procedure
  2825. PROCEDURE loadToolbar :
  2826. /*------------------------------------------------------------------------------
  2827. Purpose: Load toolbar, bands and actions for the toolbar object
  2828. Parameters: <none>
  2829. Notes:
  2830. ------------------------------------------------------------------------------*/
  2831. DEFINE VARIABLE cToolbar AS CHARACTER NO-UNDO.
  2832. DEFINE VARIABLE cLoadToolbar AS CHARACTER NO-UNDO.
  2833. DEFINE VARIABLE cObjectList AS CHARACTER NO-UNDO.
  2834. DEFINE VARIABLE cUIBmode AS CHARACTER NO-UNDO.
  2835. DEFINE VARIABLE cAvailableMenuActions AS CHARACTER NO-UNDO.
  2836. DEFINE VARIABLE cAvailableToolbarActions AS CHARACTER NO-UNDO.
  2837. /* Toolbar name? */
  2838. {get LogicalObjectName cToolbar}.
  2839. IF cToolbar = '':U OR cToolbar = ? THEN
  2840. DO:
  2841. &SCOPED-DEFINE xp-assign
  2842. {get ObjectName cToolbar}
  2843. {set LogicalObjectName cToolbar}
  2844. .
  2845. &UNDEFINE xp-assign
  2846. END.
  2847. /* Check if this toolbar is in the cache. If not we need to load it */
  2848. IF NOT CAN-FIND(FIRST ttToolbarBand
  2849. WHERE ttToolbarBand.Toolbar = cToolbar) THEN
  2850. cLoadToolbar = cToolbar.
  2851. cObjectList = {fnarg supportedObjects NO}. /* no=Only return unloaded bands */
  2852. IF cLoadToolbar > '' OR cObjectList > '' THEN
  2853. /* Extract the toolbar and object bands */
  2854. RUN loadToolbarBands IN TARGET-PROCEDURE ( cLoadToolbar, cObjectList).
  2855. {get UIBMode cUIBMode}.
  2856. /* If we're in design mode, update category lists for Instance Dialog */
  2857. IF cUIBmode = 'Design':U THEN
  2858. DO:
  2859. FOR EACH ttToolbarBand
  2860. WHERE ttToolbarBand.Toolbar = cToolbar,
  2861. EACH ttBand
  2862. WHERE ttBand.Band = ttToolbarBand.Band:
  2863. RUN updateCategoryLists IN TARGET-PROCEDURE
  2864. (ttBand.Band,
  2865. ttBand.BandType,
  2866. INPUT-OUTPUT cAvailableMenuActions,
  2867. INPUT-OUTPUT cAvailableToolbarActions).
  2868. END. /* for each*/
  2869. &SCOPED-DEFINE xp-assign
  2870. {set AvailMenuActions cAvailableMenuActions}
  2871. {set AvailToolbarActions cAvailableToolbarActions}.
  2872. &UNDEFINE xp-assign
  2873. END.
  2874. END PROCEDURE.
  2875. /* _UIB-CODE-BLOCK-END */
  2876. &ANALYZE-RESUME
  2877. &ENDIF
  2878. &IF DEFINED(EXCLUDE-loadToolbarBands) = 0 &THEN
  2879. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE loadToolbarBands Procedure
  2880. PROCEDURE loadToolbarBands :
  2881. /*------------------------------------------------------------------------------
  2882. Purpose: Load bands and actions for a toolbar
  2883. Parameters:
  2884. Notes:
  2885. ------------------------------------------------------------------------------*/
  2886. DEFINE INPUT PARAMETER pcToolbarList AS CHARACTER NO-UNDO.
  2887. DEFINE INPUT PARAMETER pcObjectList AS CHARACTER NO-UNDO.
  2888. /* gshAstraAppserver will only be valid if we're running Dynamics */
  2889. IF VALID-HANDLE(gshAstraAppserver)
  2890. AND VALID-HANDLE(gshSessionManager) THEN
  2891. dynamic-function('retrieveBandsAndActions' in target-procedure,
  2892. input pcToolbarList, input pcObjectList, input '').
  2893. END PROCEDURE.
  2894. /* _UIB-CODE-BLOCK-END */
  2895. &ANALYZE-RESUME
  2896. &ENDIF
  2897. &IF DEFINED(EXCLUDE-movebuttons) = 0 &THEN
  2898. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE movebuttons Procedure
  2899. PROCEDURE movebuttons :
  2900. /*------------------------------------------------------------------------------
  2901. Purpose: Calculate start positions for left, right, and centre aligned
  2902. bands in the toolbar according to the current width of the toolbar
  2903. frame, then move the existing buttons into their new positions.
  2904. This is called from resizeObject so it is always current for the
  2905. actual size of the toolbar frame.
  2906. Parameters: input plForceMove to force buttons to be moved if set to YES.
  2907. Notes: We only work on already built buttons.
  2908. The first thing we must do is see if there are any right and centre
  2909. aligned bands and if not, we can just exist as there is nothing to do.
  2910. Also if all buttons are left aligned there is nothing to do.
  2911. We must ignore hidden buttons.
  2912. When called from viewHideActions procedure after buttons have been
  2913. viewed/hidden, then we must force this procedure to run in order to
  2914. correctly position buttons and not leave any gaps.
  2915. ------------------------------------------------------------------------------*/
  2916. DEFINE INPUT PARAMETER pcForceMove AS LOGICAL NO-UNDO.
  2917. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  2918. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  2919. DEFINE VARIABLE cLogicalObjectName AS CHARACTER NO-UNDO.
  2920. DEFINE VARIABLE iBeginXpxl AS INT NO-UNDO.
  2921. DEFINE VARIABLE iBeginYpxl AS INT NO-UNDO.
  2922. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  2923. DEFINE VARIABLE iToolSpacingPxl AS INTEGER NO-UNDO.
  2924. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  2925. DEFINE VARIABLE dMinWidth AS DEC NO-UNDO.
  2926. DEFINE VARIABLE dMinHeight AS DEC NO-UNDO.
  2927. DEFINE VARIABLE lToolbarAutoSize AS LOGICAL NO-UNDO.
  2928. DEFINE VARIABLE cToolbarDrawDirection AS CHAR NO-UNDO.
  2929. DEFINE VARIABLE iLeftBeginXpxl AS INT NO-UNDO.
  2930. DEFINE VARIABLE iLeftBeginYpxl AS INT NO-UNDO.
  2931. DEFINE VARIABLE iRightBeginXpxl AS INT NO-UNDO.
  2932. DEFINE VARIABLE iRightBeginYpxl AS INT NO-UNDO.
  2933. DEFINE VARIABLE iCentreBeginXpxl AS INT NO-UNDO.
  2934. DEFINE VARIABLE iCentreBeginYpxl AS INT NO-UNDO.
  2935. DEFINE VARIABLE iLeftHeightPxl AS DEC NO-UNDO.
  2936. DEFINE VARIABLE iLeftWidthPxl AS DEC NO-UNDO.
  2937. DEFINE VARIABLE iRightHeightPxl AS DEC NO-UNDO.
  2938. DEFINE VARIABLE iRightWidthPxl AS DEC NO-UNDO.
  2939. DEFINE VARIABLE iCentreHeightPxl AS DEC NO-UNDO.
  2940. DEFINE VARIABLE iCentreWidthPxl AS DEC NO-UNDO.
  2941. DEFINE BUFFER btButton FOR tButton.
  2942. {get LogicalObjectName cLogicalObjectName}.
  2943. /* 1st see if any right or centre alignment options selected and if not, exit */
  2944. IF NOT pcForceMove AND
  2945. NOT CAN-FIND(FIRST ttToolbarBand
  2946. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  2947. AND ttToolbarBand.Alignment <> "left":U) THEN RETURN.
  2948. &SCOPED-DEFINE xp-assign
  2949. {get ContainerHandle hFrame}
  2950. {get ShowBorder lShowBorder}
  2951. {get ToolSpacingPxl iToolSpacingPxl}
  2952. {get ToolSeparatorPxl iToolSeparatorPxl}
  2953. {get ToolbarAutoSize lToolbarAutoSize}
  2954. {get ToolbarDrawDirection cToolbarDrawDirection}
  2955. {get Window hWindow}
  2956. {get MinWidth dMinWidth}
  2957. {get MinHeight dMinHeight}
  2958. .
  2959. &UNDEFINE xp-assign
  2960. /* 1st check if any room to move */
  2961. IF NOT pcForceMove AND cToolbarDrawDirection BEGINS "v":U
  2962. AND hFrame:HEIGHT < dMinHeight THEN
  2963. RETURN.
  2964. IF NOT pcForceMove AND cToolbarDrawDirection BEGINS "h":U
  2965. AND hFrame:WIDTH < dMinWidth THEN
  2966. RETURN.
  2967. /* Work out where to start putting buttons */
  2968. ASSIGN
  2969. iBeginXpxl = iToolSeparatorPxl + (If lShowBorder THEN 2 ELSE 0)
  2970. iBeginYpxl = iToolSeparatorPxl + (If lShowBorder THEN 2 ELSE 0)
  2971. .
  2972. /* room to move or being forced to, so work out width/height of each alignment option */
  2973. ASSIGN
  2974. iLeftHeightPxl = 0
  2975. iLeftWidthPxl = 0
  2976. iCentreHeightPxl = 0
  2977. iCentreWidthPxl = 0
  2978. iRightHeightPxl = 0
  2979. iRightWidthPxl = 0
  2980. .
  2981. FOR EACH ttToolbarBand
  2982. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  2983. AND ttToolbarBand.Alignment = "Left":U,
  2984. EACH btButton
  2985. WHERE btButton.Band = ttToolbarBand.Band
  2986. AND btButton.hTarget = TARGET-PROCEDURE
  2987. BY btButton.Position:
  2988. /* hidden in where clause does not return any records... */
  2989. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  2990. ASSIGN
  2991. iLeftHeightPxl = iLeftHeightPxl + (iToolSpacingPxl + btButton.Hdl:HEIGHT-PIXELS)
  2992. iLeftWidthPxl = iLeftWidthPxl + (iToolSpacingPxl + btButton.Hdl:WIDTH-PIXELS)
  2993. .
  2994. END.
  2995. FOR EACH ttToolbarBand
  2996. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  2997. AND ttToolbarBand.Alignment = "Center":U,
  2998. EACH btButton
  2999. WHERE btButton.Band = ttToolbarBand.Band
  3000. AND btButton.hTarget = TARGET-PROCEDURE
  3001. BY btButton.Position:
  3002. /* hidden in where clause does not return any records... */
  3003. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  3004. ASSIGN
  3005. iCentreHeightPxl = iCentreHeightPxl + (iToolSpacingPxl + btButton.Hdl:HEIGHT-PIXELS)
  3006. iCentreWidthPxl = iCentreWidthPxl + (iToolSpacingPxl + btButton.Hdl:WIDTH-PIXELS)
  3007. .
  3008. END.
  3009. FOR EACH ttToolbarBand
  3010. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  3011. AND ttToolbarBand.Alignment = "Right":U,
  3012. EACH btButton
  3013. WHERE btButton.Band = ttToolbarBand.Band
  3014. AND btButton.hTarget = TARGET-PROCEDURE
  3015. BY btButton.Position:
  3016. /* hidden in where clause does not return any records... */
  3017. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  3018. ASSIGN
  3019. iRightHeightPxl = iRightHeightPxl + (iToolSpacingPxl + btButton.Hdl:HEIGHT-PIXELS)
  3020. iRightWidthPxl = iRightWidthPxl + (iToolSpacingPxl + btButton.Hdl:WIDTH-PIXELS)
  3021. .
  3022. END.
  3023. /* Now work out the start column position in pixels for each section */
  3024. ASSIGN
  3025. iLeftBeginXpxl = iBeginXpxl
  3026. iLeftBeginYpxl = iBeginYpxl
  3027. .
  3028. ASSIGN
  3029. iCentreBeginXpxl = ((hFrame:WIDTH-PIXELS - (iLeftWidthPxl + iCentreWidthPxl + iRightWidthPxl)) / 2) + iLeftWidthpxl - (iToolSpacingPxl + (If lShowBorder THEN 2 ELSE 0))
  3030. iCentreBeginYpxl = ((hFrame:HEIGHT-PIXELS - (iLeftHeightPxl + iCentreHeightPxl + iRightHeightPxl)) / 2) + iLeftHeightpxl - (iToolSpacingPxl + (If lShowBorder THEN 2 ELSE 0))
  3031. .
  3032. ASSIGN
  3033. iRightBeginXpxl = (hFrame:WIDTH-PIXELS - iRightWidthPxl) - (iToolSpacingPxl + (If lShowBorder THEN 2 ELSE 0))
  3034. iRightBeginYpxl = (hFrame:HEIGHT-PIXELS - iRightHeightPxl) - (iToolSpacingPxl + (If lShowBorder THEN 2 ELSE 0))
  3035. .
  3036. /* Now read each section of buttons and put in new positions, starting with new start position in each case */
  3037. /* left alignment */
  3038. ASSIGN
  3039. iBeginXpxl = iLeftBeginXpxl
  3040. iBeginYpxl = iLeftBeginYpxl
  3041. .
  3042. FOR EACH ttToolbarBand
  3043. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  3044. AND ttToolbarBand.Alignment = "Left":U,
  3045. EACH btButton
  3046. WHERE btButton.Band = ttToolbarBand.Band
  3047. AND btButton.hTarget = TARGET-PROCEDURE
  3048. BY btButton.Position:
  3049. /* hidden in where clause does not return any records... */
  3050. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  3051. DO:
  3052. IF cToolbarDrawDirection BEGINS "v":U THEN
  3053. /* vertical reposition */
  3054. ASSIGN
  3055. btButton.hdl:Y = iBeginYpxl
  3056. iBeginYpxl = iBeginYpxl + iToolSpacingPxl + btButton.hdl:HEIGHT-PIXELS
  3057. NO-ERROR.
  3058. ELSE
  3059. /* horizontal reposition */
  3060. ASSIGN
  3061. btButton.hdl:X = iBeginXpxl
  3062. iBeginXpxl = iBeginXpxl + iToolSpacingPxl + btButton.hdl:WIDTH-PIXELS
  3063. NO-ERROR.
  3064. END.
  3065. END.
  3066. /* centre alignment */
  3067. ASSIGN
  3068. iBeginXpxl = iCentreBeginXpxl
  3069. iBeginYpxl = iCentreBeginYpxl
  3070. .
  3071. FOR EACH ttToolbarBand
  3072. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  3073. AND ttToolbarBand.Alignment = "Center":U,
  3074. EACH btButton
  3075. WHERE btButton.Band = ttToolbarBand.Band
  3076. AND btButton.hTarget = TARGET-PROCEDURE
  3077. BY btButton.Position:
  3078. /* hidden in where clause does not return any records... */
  3079. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  3080. DO:
  3081. IF cToolbarDrawDirection BEGINS "v":U THEN
  3082. /* vertical reposition */
  3083. ASSIGN
  3084. btButton.hdl:Y = iBeginYpxl
  3085. iBeginYpxl = iBeginYpxl + iToolSpacingPxl + btButton.hdl:HEIGHT-PIXELS
  3086. NO-ERROR.
  3087. ELSE
  3088. /* horizontal reposition */
  3089. ASSIGN
  3090. btButton.hdl:X = iBeginXpxl
  3091. iBeginXpxl = iBeginXpxl + iToolSpacingPxl + btButton.hdl:WIDTH-PIXELS
  3092. NO-ERROR.
  3093. END.
  3094. END.
  3095. /* right alignment */
  3096. ASSIGN
  3097. iBeginXpxl = iRightBeginXpxl
  3098. iBeginYpxl = iRightBeginYpxl
  3099. .
  3100. FOR EACH ttToolbarBand
  3101. WHERE ttToolbarBand.ToolbarName = cLogicalObjectName
  3102. AND ttToolbarBand.Alignment = "Right":U,
  3103. EACH btButton
  3104. WHERE btButton.Band = ttToolbarBand.Band
  3105. AND btButton.hTarget = TARGET-PROCEDURE
  3106. BY btButton.Position:
  3107. /* hidden in where clause does not return any records... */
  3108. IF VALID-HANDLE(btButton.hdl) AND btButton.hdl:HIDDEN = FALSE THEN
  3109. DO:
  3110. IF cToolbarDrawDirection BEGINS "v":U THEN
  3111. /* vertical reposition */
  3112. ASSIGN
  3113. btButton.hdl:Y = iBeginYpxl
  3114. iBeginYpxl = iBeginYpxl + iToolSpacingPxl + btButton.hdl:HEIGHT-PIXELS
  3115. NO-ERROR.
  3116. ELSE
  3117. /* horizontal reposition */
  3118. ASSIGN
  3119. btButton.hdl:X = iBeginXpxl
  3120. iBeginXpxl = iBeginXpxl + iToolSpacingPxl + btButton.hdl:WIDTH-PIXELS
  3121. NO-ERROR.
  3122. END.
  3123. END.
  3124. RETURN.
  3125. END PROCEDURE.
  3126. /* _UIB-CODE-BLOCK-END */
  3127. &ANALYZE-RESUME
  3128. &ENDIF
  3129. &IF DEFINED(EXCLUDE-onChoose) = 0 &THEN
  3130. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE onChoose Procedure
  3131. PROCEDURE onChoose :
  3132. /*------------------------------------------------------------------------------
  3133. Purpose: Persistent trigger code for dynamic menu and toolbar objects.
  3134. Parameters: INPUT pcName - The Action identifier
  3135. Notes:
  3136. ------------------------------------------------------------------------------*/
  3137. DEFINE INPUT PARAMETER pcAction AS CHAR NO-UNDO.
  3138. DEFINE VARIABLE itime AS INTEGER NO-UNDO.
  3139. DEFINE VARIABLE cType AS CHAR NO-UNDO.
  3140. DEFINE VARIABLE cOnChoose AS CHAR NO-UNDO.
  3141. DEFINE VARIABLE cCall AS CHAR NO-UNDO.
  3142. DEFINE VARIABLE cObject AS CHAR NO-UNDO.
  3143. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  3144. DEFINE VARIABLE cParam AS CHAR NO-UNDO.
  3145. DEFINE VARIABLE cParent AS CHAR NO-UNDO.
  3146. DEFINE VARIABLE cSignature AS CHAR NO-UNDO.
  3147. DEFINE VARIABLE cDataType AS CHAR NO-UNDO.
  3148. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  3149. DEFINE VARIABLE hContainerWindow AS HANDLE NO-UNDO.
  3150. DEFINE VARIABLE lMultiInstanceActivated AS LOGICAL NO-UNDO.
  3151. DEFINE VARIABLE cChildDataKey AS CHARACTER NO-UNDO.
  3152. DEFINE VARIABLE hRunContainer AS HANDLE NO-UNDO.
  3153. DEFINE VARIABLE cRunContainerType AS CHARACTER NO-UNDO.
  3154. IF {fnarg canFindAction pcAction} THEN
  3155. DO:
  3156. RUN runInfo IN TARGET-PROCEDURE
  3157. (INPUT pcAction,
  3158. OUTPUT cOnChoose,
  3159. OUTPUT cParam).
  3160. cType = {fnarg actionType pcAction}.
  3161. IF CAN-DO("RUN,LAUNCH":U,cType) THEN
  3162. hObject = {fnarg actionTarget pcAction}.
  3163. END. /* if findAction */
  3164. ELSE /* added by initCode so there's no defined action only two
  3165. key and text in the menu. The key is : separated and stores
  3166. the parent <action id>:<parameter> */
  3167. ASSIGN
  3168. cParent = ENTRY(1,pcAction,":":U)
  3169. cParam = (IF NUM-ENTRIES(pcAction,":":U) > 1
  3170. THEN ENTRY(2,pcAction,":":U)
  3171. ELSE "":U)
  3172. cOnChoose = {fnarg actionOnChoose cParent}
  3173. hObject = {fnarg actionTarget cParent}
  3174. cType = "RUN":U.
  3175. cCall = ENTRY(1,cOnChoose).
  3176. CASE cType:
  3177. WHEN "LAUNCH":U THEN
  3178. DO:
  3179. {get ContainerSource hContainerSource}.
  3180. IF VALID-HANDLE(hContainerSource) THEN
  3181. {get MultiInstanceActivated lMultiInstanceActivated hContainerSource}.
  3182. {get Window hContainerWindow}.
  3183. IF VALID-HANDLE(hObject) THEN
  3184. {get ChildDataKey cChildDataKey hObject}.
  3185. IF VALID-HANDLE(gshSessionManager) THEN
  3186. RUN launchContainer IN gshSessionManager
  3187. (/* This will be resolved into logical and physical parts by launchContainer() */
  3188. INPUT {fnarg actionLogicalObjectName pcAction},
  3189. INPUT "":U,
  3190. INPUT "":U,
  3191. INPUT NOT lMultiInstanceActivated,
  3192. INPUT "":U,
  3193. INPUT cChildDataKey,
  3194. INPUT {fnarg actionRunAttribute pcAction},
  3195. INPUT "":U, /* container mode */
  3196. INPUT hContainerWindow,
  3197. INPUT hContainerSource,
  3198. INPUT hObject,
  3199. OUTPUT hRunContainer,
  3200. OUTPUT cRunContainerType).
  3201. END. /* launch */
  3202. WHEN "PUBLISH":U THEN
  3203. DO:
  3204. IF cParam = "":U THEN
  3205. PUBLISH cCall FROM TARGET-PROCEDURE.
  3206. ELSE
  3207. PUBLISH cCall FROM TARGET-PROCEDURE (cParam).
  3208. END.
  3209. WHEN "RUN":U THEN
  3210. DO:
  3211. /* Currently we just give default errors for invalid handles */
  3212. IF cParam = "":U THEN
  3213. RUN VALUE(cCall) IN hObject.
  3214. ELSE DO:
  3215. cSignature = {fnarg Signature cCall hObject}.
  3216. IF cSignature <> "":U THEN
  3217. DO:
  3218. ASSIGN
  3219. cDataType = ENTRY(3,cSignature)
  3220. cDataType = ENTRY(NUM-ENTRIES(cDataType," ":U),cDataType," ":U).
  3221. CASE cDataType:
  3222. WHEN "CHARACTER":U THEN
  3223. RUN VALUE(cCall) IN hObject (cParam).
  3224. WHEN "INTEGER":U THEN
  3225. RUN VALUE(cCall) IN hObject (INT(cParam)).
  3226. WHEN "DECIMAL":U THEN
  3227. RUN VALUE(cCall) IN hObject (DEC(cParam)).
  3228. WHEN "LOGICAL":U THEN
  3229. RUN VALUE(cCall) IN hObject(CAN-DO("YES,TRUE":U,cParam)).
  3230. WHEN "HANDLE":U THEN
  3231. RUN VALUE(cCall) IN hObject(WIDGET-HANDLE(cParam)).
  3232. END CASE. /* datatype */
  3233. END. /* signature <> '' */
  3234. END. /* else (param) */
  3235. END. /* when RUN */
  3236. END CASE.
  3237. END PROCEDURE.
  3238. /* _UIB-CODE-BLOCK-END */
  3239. &ANALYZE-RESUME
  3240. &ENDIF
  3241. &IF DEFINED(EXCLUDE-onMenuDrop) = 0 &THEN
  3242. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE onMenuDrop Procedure
  3243. PROCEDURE onMenuDrop :
  3244. /*------------------------------------------------------------------------------
  3245. Purpose: Logic to execute when a sub-menu is "dropped"
  3246. Parameters: INPUT pcAction - The action's unique identifier.
  3247. Notes: added as a persistent trigger when the sub-menu is created
  3248. ------------------------------------------------------------------------------*/
  3249. DEFINE INPUT PARAMETER pcAction AS CHAR NO-UNDO.
  3250. DEFINE BUFFER btBandInstance FOR tBandInstance.
  3251. DEFINE BUFFER btMenu FOR tMenu.
  3252. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  3253. DEFINE VARIABLE cBand AS CHARACTER NO-UNDO.
  3254. {get UseRepository lUseRepository}.
  3255. IF lUseRepository THEN
  3256. DO:
  3257. IF {fnarg actionInitCode pcAction} > "" THEN
  3258. DO:
  3259. DYNAMIC-FUNCTION("assignActionRefresh" IN TARGET-PROCEDURE, pcAction, YES).
  3260. {fnarg buildMenu pcAction}.
  3261. END.
  3262. IF pcAction = xcWindowBand THEN
  3263. {fnarg windowDropdownList pcAction}.
  3264. END.
  3265. ELSE
  3266. {fnarg buildMenu pcAction}.
  3267. END PROCEDURE.
  3268. /* _UIB-CODE-BLOCK-END */
  3269. &ANALYZE-RESUME
  3270. &ENDIF
  3271. &IF DEFINED(EXCLUDE-onValueChanged) = 0 &THEN
  3272. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE onValueChanged Procedure
  3273. PROCEDURE onValueChanged :
  3274. /*------------------------------------------------------------------------------
  3275. Purpose : Persistent trigger for toggle menu-items
  3276. Parameters: PcAction - Name of action
  3277. Notes Added as a persistent trigger when the sub-menu is created.
  3278. Currently we support only logical properties.
  3279. ------------------------------------------------------------------------------*/
  3280. DEFINE INPUT PARAMETER pcAction AS CHAR NO-UNDO.
  3281. DEFINE VARIABLE cOnChoose AS CHAR NO-UNDO.
  3282. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  3283. ASSIGN
  3284. cOnChoose = "set":U + {fnarg actionOnChoose pcAction}.
  3285. hObject = {fnarg actionTarget pcAction}.
  3286. IF VALID-HANDLE(hObject) THEN
  3287. DYNAMIC-FUNCTION(cOnChoose IN hObject, SELF:CHECKED).
  3288. END PROCEDURE.
  3289. /* _UIB-CODE-BLOCK-END */
  3290. &ANALYZE-RESUME
  3291. &ENDIF
  3292. &IF DEFINED(EXCLUDE-preloadToolbar) = 0 &THEN
  3293. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE preloadToolbar Procedure
  3294. PROCEDURE preloadToolbar :
  3295. /*------------------------------------------------------------------------------
  3296. Purpose: In a Dynamics environment, this API is run to pre-cache all the
  3297. toolbar and object bands for a container in one Appserver hit.
  3298. By the time the toolbars are constructed, their information is in
  3299. the cache already.
  3300. Parameters: <none>
  3301. Notes: The toolbars extracted depend on how the container was extracted
  3302. from the repository. If the whole container was extracted, all
  3303. toolbars on the container will be cached. If only certain pages
  3304. were extracted, only the toolbars on those pages will be extracted.
  3305. ------------------------------------------------------------------------------*/
  3306. DEFINE INPUT PARAMETER pcToolbarList AS CHARACTER NO-UNDO.
  3307. DEFINE INPUT PARAMETER pcObjectList AS CHARACTER NO-UNDO.
  3308. DEFINE VARIABLE cUIBmode AS CHARACTER NO-UNDO.
  3309. DEFINE VARIABLE lDelete AS LOGICAL NO-UNDO.
  3310. DEFINE VARIABLE iCnt AS INTEGER NO-UNDO.
  3311. DEFINE VARIABLE cObjectName AS CHARACTER NO-UNDO.
  3312. DEFINE VARIABLE cRunAttribute AS CHARACTER NO-UNDO.
  3313. /* If we got a list of toolbars from the container, remove any toolbars already cached */
  3314. IF pcToolbarList > "":U THEN
  3315. DO:
  3316. /* Remove any toolbars in the cache from the toolbar list */
  3317. DO iCnt = 1 TO NUM-ENTRIES(pcToolbarList):
  3318. IF CAN-FIND(FIRST ttToolbarBand
  3319. WHERE ttToolbarBand.Toolbar = ENTRY(iCnt, pcToolbarList)) THEN
  3320. ASSIGN ENTRY(iCnt, pcToolbarList) = "":U.
  3321. END.
  3322. ASSIGN pcToolbarList = TRIM(pcToolbarList, ",":U).
  3323. END.
  3324. /* Work out which object bands we need from the repository. */
  3325. IF pcObjectList > "":U THEN
  3326. DO:
  3327. /* Remove any objects already cached from the list */
  3328. DO iCnt = 1 TO NUM-ENTRIES(pcObjectList):
  3329. ASSIGN
  3330. cObjectName = ENTRY(iCnt, pcObjectList)
  3331. cRunAttribute = (IF NUM-ENTRIES(cObjectName,';':U) > 1
  3332. THEN ENTRY(2,cObjectName,';':U)
  3333. ELSE '':U)
  3334. cObjectName = ENTRY(1,cObjectName,';':U).
  3335. IF CAN-FIND(FIRST ttObjectBand
  3336. WHERE ttObjectBand.ObjectName = cObjectName
  3337. AND ttObjectBand.RunAttribute = cRunAttribute) THEN
  3338. ASSIGN ENTRY(iCnt, pcObjectList) = "":U.
  3339. END.
  3340. ASSIGN pcObjectList = TRIM(pcObjectList, ",":U).
  3341. END.
  3342. /* If any toolbars or objects not have been cached then load the toolbarbands */
  3343. IF pcToolbarList > "":U OR pcObjectList > "":U THEN
  3344. /* Extract bands and actions from the repository. */
  3345. RUN loadToolbarBands IN TARGET-PROCEDURE (pcToolbarList,
  3346. pcObjectList).
  3347. END PROCEDURE.
  3348. /* _UIB-CODE-BLOCK-END */
  3349. &ANALYZE-RESUME
  3350. &ENDIF
  3351. &IF DEFINED(EXCLUDE-queryPosition) = 0 &THEN
  3352. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE queryPosition Procedure
  3353. PROCEDURE queryPosition :
  3354. /*------------------------------------------------------------------------------
  3355. Purpose: Captures "state" events for the associated Query in the Panel's
  3356. NavigationTarget. Invokes the setPanelState function which stores
  3357. the new state in the object's PanelState property and then
  3358. invokes the setButtons procedure to change the Panel.
  3359. Parameters: pcState AS CHARACTER -- Panel State
  3360. Notes: Because some states may be published from different links
  3361. the source-procedure is always checked.
  3362. This means that this only will work when run/published from
  3363. the appropriate target !!!
  3364. NB! We do check the special getTargetProcedure in order to identify
  3365. the real NavigationTarget since SBO's uses a RUN.
  3366. This MUST NOT be used to identify TableioTargets.
  3367. As a TableioSource may set this before a call that may end up
  3368. here. So a parent may do addRow and set this global property,
  3369. which then will point to that parent also when children calls
  3370. this as part of that add.
  3371. ------------------------------------------------------------------------------*/
  3372. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  3373. DEFINE VARIABLE hNavTarget AS HANDLE NO-UNDO.
  3374. DEFINE VARIABLE hIOTarget AS HANDLE NO-UNDO.
  3375. DEFINE VARIABLE hSource AS HANDLE NO-UNDO.
  3376. /* Is this an active Tableio state? */
  3377. hIOTarget = {fnarg activeTarget 'TableIO':U}.
  3378. IF hIOTarget = SOURCE-PROCEDURE THEN
  3379. RUN resetTableio IN TARGET-PROCEDURE.
  3380. ELSE DO:
  3381. hSource = SOURCE-PROCEDURE.
  3382. /* Is this a NavigationTarget state? */
  3383. hNavTarget = {fnarg activeTarget 'Navigation':U}.
  3384. /* Check if this is a RUN from an SBO where the super is source, so we
  3385. need to get the target from a special function. */
  3386. IF hNavTarget <> hSource THEN
  3387. {get TargetProcedure hSource SOURCE-PROCEDURE} NO-ERROR.
  3388. IF hNavTarget = hSource THEN
  3389. RUN resetNavigation IN TARGET-PROCEDURE.
  3390. END.
  3391. RETURN.
  3392. END PROCEDURE.
  3393. /* _UIB-CODE-BLOCK-END */
  3394. &ANALYZE-RESUME
  3395. &ENDIF
  3396. &IF DEFINED(EXCLUDE-rebuildMenu) = 0 &THEN
  3397. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE rebuildMenu Procedure
  3398. PROCEDURE rebuildMenu :
  3399. /*------------------------------------------------------------------------------
  3400. Purpose: rebuild a menu after it has been removed or not built on init
  3401. Parameters: <none>
  3402. Notes: The toolbar manages this based on its own RemoveMenuOnHide property,
  3403. but it is also added as one of the ContainerSourceEvents and
  3404. published from container based on its RemoveMenuOnHide property.
  3405. ------------------------------------------------------------------------------*/
  3406. IF {fn constructMenu} THEN
  3407. RUN resetAllTargetActions IN TARGET-PROCEDURE.
  3408. END PROCEDURE.
  3409. /* _UIB-CODE-BLOCK-END */
  3410. &ANALYZE-RESUME
  3411. &ENDIF
  3412. &IF DEFINED(EXCLUDE-removeMenu) = 0 &THEN
  3413. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE removeMenu Procedure
  3414. PROCEDURE removeMenu :
  3415. /*------------------------------------------------------------------------------
  3416. Purpose: Remove this object's menu from the menubar
  3417. Parameters: <none>
  3418. Notes: The toolbar manages this based on its own RemoveMenuOnHide property,
  3419. but it is also added as one of the ContainerSourceEvents and
  3420. published from container based on its RemoveMenuOnHide property.
  3421. ------------------------------------------------------------------------------*/
  3422. DEFINE BUFFER btBandInstance FOR tBandInstance.
  3423. FIND btBandInstance WHERE btBandInstance.MenuName = '':U
  3424. AND btBandInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  3425. IF AVAIL btBandInstance THEN
  3426. DO:
  3427. {fnarg removeMenuBand btBandInstance.Band}.
  3428. /* we currently don't rebuild the upper level here as it gives extra flashing
  3429. for very little benefit..
  3430. We currently assume that rebuildMenu or constructMenu will be called
  3431. from another object if menus are removed and the window stays, in which
  3432. case this is unnecessary
  3433. There are two reasons why this could be useful
  3434. - If this toolbar rearranged the top level and pushed a common item
  3435. after its items, this call would put that item back to the place it had.
  3436. (very academic... )
  3437. - Under certain circumstances unremovable rules ends up on the top
  3438. of a submenu, this would have been cleaned up by this call.
  3439. (core bug or limitation... )
  3440. {get Menubarhandle hMenubar}.
  3441. {fnarg buildMenuBand hMenubar,btBandInstance.Menukey}.
  3442. */
  3443. DELETE btBandInstance.
  3444. END.
  3445. RETURN.
  3446. END PROCEDURE.
  3447. /* _UIB-CODE-BLOCK-END */
  3448. &ANALYZE-RESUME
  3449. &ENDIF
  3450. &IF DEFINED(EXCLUDE-repositionObject) = 0 &THEN
  3451. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE repositionObject Procedure
  3452. PROCEDURE repositionObject :
  3453. /*------------------------------------------------------------------------------
  3454. Purpose: Override default reposition.
  3455. Because the coordinates is NOT assigned in DESIGN.
  3456. The position only changes through direct manipulation and not
  3457. when dropped in the contaner.
  3458. Parameters: pdRow
  3459. pdCol
  3460. Notes: toolbar.i defines EXCLUDE-repositionObject (for smart.i)
  3461. ------------------------------------------------------------------------------*/
  3462. DEFINE INPUT PARAMETER pdRow AS DECIMAL NO-UNDO.
  3463. DEFINE INPUT PARAMETER pdCol AS DECIMAL NO-UNDO.
  3464. DEFINE VARIABLE cUIBMode AS CHARACTER NO-UNDO.
  3465. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  3466. DEFINE VARIABLE lToolbarAutosize AS LOGICAL NO-UNDO.
  3467. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  3468. {get UIBMode cUIBMode}.
  3469. /* Keep the default 1 1 position when dropped from Appbuilder's Palette */
  3470. IF cUIBMode <> "DESIGN":U OR LAST-EVENT:FUNCTION <> "MOUSE-SELECT-CLICK":U THEN
  3471. DO:
  3472. &SCOPED-DEFINE xp-assign
  3473. {get ContainerHandle hFrame}
  3474. {get ToolbarAutoSize lToolbarAutoSize}
  3475. {get ToolbarDrawDirection cToolbarDrawDirection}.
  3476. &UNDEFINE xp-assign
  3477. /* ignore col if autosize horizontal and row id autosize vertical
  3478. repositionObject handles this */
  3479. ASSIGN
  3480. hFrame:ROW = pdRow WHEN NOT lToolbarAutoSize
  3481. OR NOT cToolbarDrawDirection BEGINS 'v':U
  3482. hFrame:COL = pdCol WHEN NOT lToolbarAutoSize
  3483. OR cToolbarDrawDirection BEGINS 'v':U NO-ERROR.
  3484. END.
  3485. END PROCEDURE.
  3486. /* _UIB-CODE-BLOCK-END */
  3487. &ANALYZE-RESUME
  3488. &ENDIF
  3489. &IF DEFINED(EXCLUDE-resetAllTargetActions) = 0 &THEN
  3490. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetAllTargetActions Procedure
  3491. PROCEDURE resetAllTargetActions :
  3492. /*------------------------------------------------------------------------------
  3493. Purpose: Refresh all actions for all links
  3494. Parameters: <none>
  3495. Notes: Called from initializeObject and rebuildMenu
  3496. ------------------------------------------------------------------------------*/
  3497. DEFINE VARIABLE cLinkTargetNames AS CHARACTER NO-UNDO.
  3498. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  3499. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  3500. {get LinkTargetNames cLinkTargetNames}.
  3501. DO iLink = 1 TO NUM-ENTRIES(cLinkTargetNames):
  3502. ASSIGN
  3503. cLink = ENTRY(iLink,cLinkTargetNames)
  3504. cLink = ENTRY(1,cLink,'-':U).
  3505. RUN VALUE('reset':U + cLink) IN TARGET-PROCEDURE NO-ERROR.
  3506. /* if reset<LinkType> doesn't exist run the generic reset */
  3507. IF ERROR-STATUS:ERROR THEN
  3508. RUN resetTargetActions IN TARGET-PROCEDURE (cLink).
  3509. END.
  3510. END PROCEDURE.
  3511. /* _UIB-CODE-BLOCK-END */
  3512. &ANALYZE-RESUME
  3513. &ENDIF
  3514. &IF DEFINED(EXCLUDE-resetCommit) = 0 &THEN
  3515. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetCommit Procedure
  3516. PROCEDURE resetCommit :
  3517. /*------------------------------------------------------------------------------
  3518. Purpose: Reset all actions for the commit link
  3519. Parameters: <none>
  3520. Notes: Defined as CommitTargetEvents so that a commit-target can publish the
  3521. event to reset/refresh its actions.
  3522. ------------------------------------------------------------------------------*/
  3523. RUN resetTargetActions IN TARGET-PROCEDURE ('commit':U).
  3524. RETURN.
  3525. END PROCEDURE.
  3526. /* _UIB-CODE-BLOCK-END */
  3527. &ANALYZE-RESUME
  3528. &ENDIF
  3529. &IF DEFINED(EXCLUDE-resetContainerToolbar) = 0 &THEN
  3530. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetContainerToolbar Procedure
  3531. PROCEDURE resetContainerToolbar :
  3532. /*------------------------------------------------------------------------------
  3533. Purpose: reset containertoolbar actions
  3534. Parameters: <none>
  3535. Notes: Defined as ContainerToolbarTargetEvents so that a ContainerToolbar-target
  3536. can publish the event to reset/refresh its actions.
  3537. ------------------------------------------------------------------------------*/
  3538. RUN resetTargetActions IN TARGET-PROCEDURE ('ContainerToolbar':U).
  3539. RETURN.
  3540. END PROCEDURE.
  3541. /* _UIB-CODE-BLOCK-END */
  3542. &ANALYZE-RESUME
  3543. &ENDIF
  3544. &IF DEFINED(EXCLUDE-resetNavigation) = 0 &THEN
  3545. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetNavigation Procedure
  3546. PROCEDURE resetNavigation :
  3547. /*------------------------------------------------------------------------------
  3548. Purpose: Reset all navigation actions
  3549. Parameters: <none>
  3550. Notes: Defined as NavigationTargetEvents so that a navigation-target can
  3551. publish the event to reset/refresh its actions.
  3552. ------------------------------------------------------------------------------*/
  3553. RUN resetTargetActions IN TARGET-PROCEDURE ('Navigation':U).
  3554. RETURN.
  3555. END PROCEDURE.
  3556. /* _UIB-CODE-BLOCK-END */
  3557. &ANALYZE-RESUME
  3558. &ENDIF
  3559. &IF DEFINED(EXCLUDE-resetTableio) = 0 &THEN
  3560. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetTableio Procedure
  3561. PROCEDURE resetTableio :
  3562. /*------------------------------------------------------------------------------
  3563. Purpose: Reset all tableio actions
  3564. Parameters: <none>
  3565. Notes: Defined as TableioTargetEvents so that a tableio-target can publish
  3566. the event to reset/refresh its actions.
  3567. - Can probably replace ALL other events except
  3568. - linkChanged('inactive').
  3569. ------------------------------------------------------------------------------*/
  3570. RUN resetTargetActions IN TARGET-PROCEDURE ('Tableio':U).
  3571. RETURN.
  3572. END PROCEDURE.
  3573. /* _UIB-CODE-BLOCK-END */
  3574. &ANALYZE-RESUME
  3575. &ENDIF
  3576. &IF DEFINED(EXCLUDE-resetTargetActions) = 0 &THEN
  3577. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetTargetActions Procedure
  3578. PROCEDURE resetTargetActions :
  3579. /*------------------------------------------------------------------------------
  3580. Purpose: reset the actions of a specific link (disable, hide, image, checked)
  3581. Parameters: pcLink - Link type
  3582. Notes: Called from all reset<Link> methods.
  3583. ------------------------------------------------------------------------------*/
  3584. DEFINE INPUT PARAMETER pcLink AS CHARACTER NO-UNDO.
  3585. DEFINE VARIABLE cEnableActions AS CHARACTER NO-UNDO.
  3586. DEFINE VARIABLE cDisableActions AS CHARACTER NO-UNDO.
  3587. DEFINE VARIABLE cHideActions AS CHARACTER NO-UNDO.
  3588. DEFINE VARIABLE cViewActions AS CHARACTER NO-UNDO.
  3589. DEFINE VARIABLE cImage1Actions AS CHARACTER NO-UNDO.
  3590. DEFINE VARIABLE cImage2Actions AS CHARACTER NO-UNDO.
  3591. DEFINE VARIABLE cCheckedActions AS CHARACTER NO-UNDO.
  3592. DEFINE VARIABLE cUncheckedActions AS CHARACTER NO-UNDO.
  3593. DEFINE VARIABLE cLabelActions AS CHARACTER NO-UNDO.
  3594. DEFINE VARIABLE cCaptionActions AS CHARACTER NO-UNDO.
  3595. DEFINE VARIABLE cTooltipActions AS CHARACTER NO-UNDO.
  3596. DEFINE VARIABLE lInitialized AS LOGICAL NO-UNDO.
  3597. DEFINE VARIABLE cLinkActions AS CHARACTER NO-UNDO.
  3598. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  3599. DEFINE VARIABLE cLinkName AS CHARACTER NO-UNDO.
  3600. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  3601. DEFINE VARIABLE iAction AS INTEGER NO-UNDO.
  3602. DEFINE VARIABLE cImage AS CHARACTER NO-UNDO.
  3603. DEFINE BUFFER btButton FOR tButton.
  3604. DEFINE BUFFER btMenu FOR tMenu.
  3605. {get ObjectInitialized lInitialized}.
  3606. IF NOT lInitialized THEN
  3607. RETURN.
  3608. IF pcLink <> '':U THEN
  3609. hTarget = {fnarg activeTarget pcLink}.
  3610. ELSE
  3611. {get ContainerSource hTarget}.
  3612. IF NOT VALID-HANDLE(hTarget) THEN
  3613. DO:
  3614. cLinkActions = {fnarg targetActions pcLink}.
  3615. {fnarg disableActions cLinkActions}.
  3616. RETURN.
  3617. END.
  3618. cLinkName = pcLink + '-target':U.
  3619. FOR EACH btButton WHERE btButton.hTarget = TARGET-PROCEDURE
  3620. AND btButton.Link = cLinkName:
  3621. IF VALID-HANDLE(btButton.hdl) THEN
  3622. DO:
  3623. ASSIGN
  3624. cEnableActions = cEnableActions
  3625. + (IF btButton.hdl:SENSITIVE
  3626. THEN ',':U + btButton.Name
  3627. ELSE '':U)
  3628. cDisableActions = cDisableActions
  3629. + (IF NOT btButton.hdl:SENSITIVE
  3630. THEN ',':U + btButton.Name
  3631. ELSE '':U)
  3632. cViewActions = cViewActions
  3633. + (IF NOT btButton.hdl:HIDDEN
  3634. THEN ',':U + btButton.Name
  3635. ELSE '':U)
  3636. cHideActions = cHideActions
  3637. + (IF btButton.hdl:HIDDEN
  3638. THEN ',':U + btButton.Name
  3639. ELSE '':U)
  3640. cImage1Actions = cImage1Actions
  3641. + (IF btButton.imageAlt = FALSE
  3642. THEN ',':U + btButton.Name
  3643. ELSE '':U)
  3644. cImage2Actions = cImage2Actions
  3645. + (IF btButton.imageAlt = TRUE
  3646. THEN ',':U + btButton.Name
  3647. ELSE '':U)
  3648. cLabelActions = cLabelActions
  3649. + (IF btButton.LabelSubst
  3650. THEN ',':U + btButton.Name
  3651. ELSE '':U)
  3652. cTooltipActions = cTooltipActions
  3653. + (IF btButton.TooltipSubst
  3654. THEN ',':U + btButton.Name
  3655. ELSE '':U)
  3656. .
  3657. END.
  3658. END.
  3659. FOR EACH btMenu WHERE btMenu.hTarget = TARGET-PROCEDURE
  3660. AND btMenu.Link = cLinkName:
  3661. IF VALID-HANDLE(btMenu.hdl) THEN
  3662. DO:
  3663. /* We must allow for discrepancies as menus may have been rebuilt
  3664. so we add to this list also if already in disabledActions */
  3665. IF NOT CAN-DO(cEnableActions,btMenu.Name) THEN
  3666. ASSIGN
  3667. cEnableActions = cEnableActions
  3668. + (IF btMenu.hdl:SENSITIVE
  3669. THEN ',':U + btMenu.Name
  3670. ELSE '':U).
  3671. /* We must allow for discrepancies as menus may have been rebuilt
  3672. so we add to this list also if already in enabledActions */
  3673. IF NOT CAN-DO(cDisableActions,btMenu.Name) THEN
  3674. cDisableActions = cDisableActions
  3675. + (IF NOT btMenu.hdl:SENSITIVE
  3676. THEN ',':U + btMenu.Name
  3677. ELSE '':U)
  3678. .
  3679. IF CAN-QUERY(btMenu.Hdl,'TOGGLE-BOX':U) AND btMenu.hdl:TOGGLE-BOX THEN
  3680. ASSIGN
  3681. cCheckedActions = cCheckedActions
  3682. + (IF btMenu.hdl:CHECKED
  3683. THEN ',':U + btMenu.Name
  3684. ELSE '':U)
  3685. cUncheckedActions = cUnCheckedActions
  3686. + (IF NOT btMenu.hdl:CHECKED
  3687. THEN ',':U + btMenu.Name
  3688. ELSE '':U).
  3689. cCaptionActions = cCaptionActions
  3690. + (IF btMenu.CaptionSubst
  3691. THEN ',':U + btMenu.Name
  3692. ELSE '':U).
  3693. END.
  3694. IF NOT CAN-DO(cViewActions + cHideActions,btMenu.Name) THEN
  3695. ASSIGN
  3696. cViewActions = cViewActions
  3697. + (IF VALID-HANDLE(btMenu.hdl)
  3698. THEN ',':U + btMenu.Name
  3699. ELSE '':U)
  3700. cHideActions = cHideActions
  3701. + (IF NOT VALID-HANDLE(btMenu.hdl)
  3702. THEN ',':U + btMenu.Name
  3703. ELSE '':U).
  3704. END.
  3705. ASSIGN
  3706. cEnableActions = TRIM(cEnableActions,',':U)
  3707. cDisableActions = TRIM(cDisableActions,',':U)
  3708. cViewActions = TRIM(cViewActions,',':U)
  3709. cHideActions = TRIM(cHideActions,',':U)
  3710. cImage1Actions = TRIM(cImage1Actions,',':U)
  3711. cImage2Actions = TRIM(cImage2Actions,',':U)
  3712. cUncheckedActions = TRIM(cUncheckedActions,',':U)
  3713. cCheckedActions = TRIM(cCheckedActions,',':U)
  3714. cLabelActions = TRIM(cLabelActions)
  3715. cCaptionActions = TRIM(cCaptionActions)
  3716. cTooltipActions = TRIM(cTooltipActions)
  3717. .
  3718. RUN ruleStatechanges IN TARGET-PROCEDURE
  3719. (cLinkName,
  3720. hTarget,
  3721. INPUT-OUTPUT cEnableActions,
  3722. INPUT-OUTPUT cDisableActions,
  3723. INPUT-OUTPUT cViewActions,
  3724. INPUT-OUTPUT cHideActions,
  3725. INPUT-OUTPUT cImage1Actions,
  3726. INPUT-OUTPUT cImage2Actions,
  3727. INPUT-OUTPUT cUncheckedActions,
  3728. INPUT-OUTPUT cCheckedActions).
  3729. DO iAction = 1 TO NUM-ENTRIES(cUncheckedactions):
  3730. cAction = ENTRY(iAction,cUncheckedactions).
  3731. FIND btMenu WHERE btMenu.Name = cAction
  3732. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  3733. IF AVAIL btMenu AND VALID-HANDLE(btMenu.hdl) THEN
  3734. btMenu.hdl:CHECKED = FALSE.
  3735. END.
  3736. DO iAction = 1 TO NUM-ENTRIES(cCheckedactions):
  3737. cAction = ENTRY(iAction,cCheckedactions).
  3738. FIND btMenu WHERE btMenu.Name = cAction
  3739. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  3740. IF AVAIL btMenu AND VALID-HANDLE(btMenu.hdl) THEN
  3741. btMenu.hdl:CHECKED = TRUE.
  3742. END.
  3743. DO iAction = 1 TO NUM-ENTRIES(cImage1actions):
  3744. cAction = ENTRY(iAction,cImage1actions).
  3745. FIND btButton WHERE btButton.Name = cAction
  3746. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  3747. IF AVAIL btButton THEN
  3748. DO:
  3749. cImage = DYNAMIC-FUNCTION('imageName':U IN TARGET-PROCEDURE,
  3750. cAction,
  3751. 1).
  3752. IF cImage > "" AND VALID-HANDLE(btButton.hdl) THEN
  3753. loadImage(INPUT btButton.hdl, INPUT cImage).
  3754. btButton.imageALt = FALSE.
  3755. END.
  3756. END.
  3757. DO iAction = 1 TO NUM-ENTRIES(cImage2actions):
  3758. cAction = ENTRY(iAction,cImage2actions).
  3759. FIND btButton WHERE btButton.Name = cAction
  3760. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  3761. IF AVAIL btButton THEN
  3762. DO:
  3763. cImage = DYNAMIC-FUNCTION('imageName':U IN TARGET-PROCEDURE,
  3764. cAction,
  3765. 2).
  3766. IF cImage > "" AND VALID-HANDLE(btButton.hdl) THEN
  3767. loadImage(INPUT btButton.hdl, INPUT cImage).
  3768. btButton.imageALt = TRUE.
  3769. END.
  3770. END.
  3771. DO iAction = 1 TO NUM-ENTRIES(cLabelActions):
  3772. cAction = ENTRY(iAction,cLabelActions).
  3773. FIND btButton WHERE btButton.Name = cAction
  3774. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  3775. IF AVAIL btButton AND VALID-HANDLE(btButton.hdl) THEN
  3776. btButton.hdl:LABEL = {fnarg actionLabel btButton.Name}.
  3777. END.
  3778. DO iAction = 1 TO NUM-ENTRIES(cTooltipActions):
  3779. cAction = ENTRY(iAction,cTooltipActions).
  3780. FIND btButton WHERE btButton.Name = cAction
  3781. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  3782. IF AVAIL btButton AND VALID-HANDLE(btButton.hdl) THEN
  3783. btButton.hdl:TOOLTIP = {fnarg actionTooltip btButton.Name}.
  3784. END.
  3785. DO iAction = 1 TO NUM-ENTRIES(cCaptionActions):
  3786. cAction = ENTRY(iAction,cCaptionActions).
  3787. FIND btMenu WHERE btMenu.Name = cAction
  3788. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  3789. IF AVAIL btMenu AND VALID-HANDLE(btMenu.hdl) THEN
  3790. btMenu.hdl:LABEL = {fnarg actionCaption btMenu.Name}.
  3791. END.
  3792. IF cEnableActions <> '':U THEN
  3793. {fnarg EnableActions cEnableActions}.
  3794. IF cDisableActions <> '':U THEN
  3795. {fnarg disableActions cDisableActions}.
  3796. IF cViewActions <> '':U OR cHideActions <> '':U THEN
  3797. RUN viewHideActions IN TARGET-PROCEDURE (cViewActions,cHideactions).
  3798. RETURN.
  3799. END PROCEDURE.
  3800. /* _UIB-CODE-BLOCK-END */
  3801. &ANALYZE-RESUME
  3802. &ENDIF
  3803. &IF DEFINED(EXCLUDE-resetToolbar) = 0 &THEN
  3804. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resetToolbar Procedure
  3805. PROCEDURE resetToolbar :
  3806. /*------------------------------------------------------------------------------
  3807. Purpose: reset toolbar actions
  3808. Parameters: <none>
  3809. Notes: Defined as ToolbarTargetEvents so that a toolbar-target can publish
  3810. the event to reset/refresh its actions.
  3811. ------------------------------------------------------------------------------*/
  3812. RUN resetTargetActions IN TARGET-PROCEDURE ('Toolbar':U).
  3813. RETURN.
  3814. END PROCEDURE.
  3815. /* _UIB-CODE-BLOCK-END */
  3816. &ANALYZE-RESUME
  3817. &ENDIF
  3818. &IF DEFINED(EXCLUDE-resizeObject) = 0 &THEN
  3819. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE resizeObject Procedure
  3820. PROCEDURE resizeObject :
  3821. /*------------------------------------------------------------------------------
  3822. Purpose: Overrides the size after a resize to ensure width is big enough to
  3823. fit all buttons on, and that the height is not accidentally changed.
  3824. This is a design time event that sorts out things when the object is
  3825. manually sized in the Appbuilder.
  3826. Parameters:
  3827. pd_height AS DECIMAL - the desired height (in rows)
  3828. pd_width AS DECIMAL - the desired width (in columns)
  3829. Notes: Used internally. Calls to resizeObject are generated by the
  3830. AppBuilder in adm-create-objects for objects which implement it.
  3831. Having a resizeObject procedure is also the signal to the AppBuilder
  3832. to allow the object to be resized at design time.
  3833. ------------------------------------------------------------------------------*/
  3834. DEFINE INPUT PARAMETER pdHeight AS DECIMAL NO-UNDO.
  3835. DEFINE INPUT PARAMETER pdWidth AS DECIMAL NO-UNDO.
  3836. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  3837. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  3838. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  3839. DEFINE VARIABLE dMinWidth AS DECIMAL NO-UNDO.
  3840. DEFINE VARIABLE dMinHeight AS DECIMAL NO-UNDO.
  3841. DEFINE VARIABLE hRectangle AS HANDLE NO-UNDO.
  3842. DEFINE VARIABLE hRectangle2 AS HANDLE NO-UNDO.
  3843. DEFINE VARIABLE lShowBorder AS LOGICAL NO-UNDO.
  3844. DEFINE VARIABLE iDummy AS INTEGER NO-UNDO.
  3845. DEFINE VARIABLE lToolbarAutoSize AS LOGICAL NO-UNDO.
  3846. DEFINE VARIABLE cToolbarDrawDirection AS CHAR NO-UNDO.
  3847. DEFINE VARIABLE hPopupFrame AS HANDLE NO-UNDO.
  3848. DEFINE VARIABLE cUIBMode AS CHAR NO-UNDO.
  3849. DEFINE VARIABLE lPreviouslyHidden AS LOGICAL NO-UNDO.
  3850. DEFINE VARIABLE lWindowResize AS LOGICAL NO-UNDO.
  3851. DEFINE VARIABLE cFrame AS CHARACTER NO-UNDO.
  3852. DEFINE VARIABLE hWindowFrame AS HANDLE NO-UNDO.
  3853. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  3854. DEFINE VARIABLE hFolder AS HANDLE NO-UNDO.
  3855. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  3856. DEFINE VARIABLE dRow AS DECIMAL NO-UNDO.
  3857. DEFINE VARIABLE dCol AS DECIMAL NO-UNDO.
  3858. DEFINE VARIABLE dOldWidth AS DECIMAL NO-UNDO.
  3859. DEFINE VARIABLE dOldHeight AS DECIMAL NO-UNDO.
  3860. DEFINE VARIABLE dNewWidth AS DECIMAL NO-UNDO.
  3861. DEFINE VARIABLE dNewHeight AS DECIMAL NO-UNDO.
  3862. &SCOPED-DEFINE xp-assign
  3863. {get UIBMode cUIBmode}
  3864. {get ContainerHandle hFrame}
  3865. {get ContainerSource hContainerSource}
  3866. {get BoxRectangle hRectangle}
  3867. {get BoxRectangle2 hRectangle2}
  3868. {get ShowBorder lShowBorder}
  3869. {get ToolbarAutoSize lToolbarAutoSize}
  3870. {get ToolbarDrawDirection cToolbarDrawDirection}
  3871. {get MinWidth dMinWidth}
  3872. {get MinHeight dMinHeight}
  3873. {get Window hWindow}
  3874. .
  3875. &UNDEFINE xp-assign
  3876. hFrame:SCROLLABLE = FALSE.
  3877. lPreviouslyHidden = hFrame:HIDDEN.
  3878. hFrame:HIDDEN = TRUE.
  3879. /* If autosize turned on - always resize according to the window or folder size */
  3880. IF lToolbarAutoSize THEN
  3881. DO:
  3882. IF VALID-HANDLE(hContainerSource) THEN
  3883. DO:
  3884. /* Set height or width from container.
  3885. we check pageSource for inner values later, but the page device
  3886. may not exist or have these functions so we must always set values
  3887. here first */
  3888. IF cToolbarDrawDirection BEGINS "v":U THEN
  3889. DO:
  3890. dRow = 1.
  3891. {get Height pdHeight hContainerSource}.
  3892. END.
  3893. ELSE
  3894. DO:
  3895. dCol = 1.
  3896. {get Width pdWidth hContainerSource}.
  3897. END.
  3898. iPage = {fnarg targetPage TARGET-PROCEDURE hContainerSource}.
  3899. IF iPage > 0 THEN
  3900. DO:
  3901. {get PageSource hFolder hContainerSource}.
  3902. IF VALID-HANDLE(hFolder) THEN
  3903. DO:
  3904. IF cToolbarDrawDirection BEGINS "v":U THEN
  3905. ASSIGN
  3906. dRow = {fn getInnerRow hFolder}
  3907. pdHeight = {fn getInnerHeight hFolder} NO-ERROR.
  3908. ELSE
  3909. ASSIGN
  3910. dCol = {fn getInnerCol hFolder}
  3911. pdWidth = {fn getInnerWidth hFolder} NO-ERROR.
  3912. END.
  3913. END.
  3914. END.
  3915. ELSE DO:
  3916. IF cToolbarDrawDirection BEGINS "v":U THEN
  3917. ASSIGN
  3918. dRow = 1
  3919. pdHeight = hWindow:HEIGHT.
  3920. ELSE
  3921. ASSIGN
  3922. dCol = 1
  3923. pdWidth = hWindow:WIDTH.
  3924. END.
  3925. IF cToolbarDrawDirection BEGINS "v":U THEN
  3926. ASSIGN
  3927. hFrame:ROW = dRow
  3928. hFrame:HEIGHT = pdHeight
  3929. NO-ERROR.
  3930. ELSE
  3931. ASSIGN
  3932. hframe:COL = dCol
  3933. hFrame:WIDTH = pdWidth
  3934. NO-ERROR.
  3935. END.
  3936. ELSE /* Ensure that the frame is sized to stored values on open
  3937. otherwise the max logic further down would use the frame's initial
  3938. size */
  3939. ASSIGN
  3940. hFrame:HEIGHT = pdHeight WHEN dMinHeight < pdHeight
  3941. hFrame:WIDTH = pdWidth WHEN dMinWidth < pdWidth.
  3942. IF dMinHeight > 0 AND dMinHeight < (SESSION:HEIGHT - 1) AND
  3943. dMinWidth > 0 AND dMinWidth < (SESSION:WIDTH - 1) AND
  3944. (hWindow:WIDTH < dMinWidth OR hWindow:HEIGHT < dMinHeight) THEN
  3945. DO:
  3946. IF hWindow:HEIGHT < dMinHeight THEN
  3947. ASSIGN
  3948. hWindow:HEIGHT = dMinHeight
  3949. hWindow:MIN-HEIGHT = dMinHeight NO-ERROR.
  3950. IF hWindow:WIDTH < dMinWidth THEN
  3951. ASSIGN
  3952. hWindow:WIDTH = dMinWidth
  3953. hWindow:MIN-WIDTH = dMinWidth NO-ERROR.
  3954. RUN resizeWindow IN hContainerSource NO-ERROR.
  3955. lWindowResize = TRUE. /* flag for design mode further down */
  3956. END.
  3957. /* Ensure frame height / width is not smaller than minimum allowed to fit buttons, plus reset to 1 column/row
  3958. depending on horizontal / vertical alignment
  3959. - Also ensure that height/width is not changed on horizontal/vertical
  3960. - Avoiding query of frame:width or height avoids window realization.
  3961. - Hwnd = ? if the window is not realized.
  3962. */
  3963. IF cToolbarDrawDirection BEGINS "v":U THEN
  3964. ASSIGN
  3965. hFrame:WIDTH = dMinWidth
  3966. dOldHeight = (if hWindow:Hwnd = ? then 0 else hFrame:HEIGHT)
  3967. dNewHeight = MAX(dOldHeight,dMinHeight)
  3968. hFrame:HEIGHT = dNewHeight
  3969. hRectangle:HEIGHT = dNewHeight WHEN VALID-HANDLE(hRectangle)
  3970. hRectangle2:HEIGHT = dNewHeight WHEN VALID-HANDLE(hRectangle2)
  3971. NO-ERROR.
  3972. ELSE DO:
  3973. ASSIGN
  3974. hFrame:HEIGHT = dMinHeight
  3975. dOldWidth = (if hWindow:Hwnd = ? then 0 else hFrame:WIDTH)
  3976. dNewWidth = MAX(dOldWidth,dMinWidth)
  3977. hFrame:WIDTH = dNewWidth
  3978. hRectangle:WIDTH = dNewWidth WHEN VALID-HANDLE(hRectangle)
  3979. hRectangle2:WIDTH = dNewWidth WHEN VALID-HANDLE(hRectangle2)
  3980. NO-ERROR.
  3981. END.
  3982. /* reposition buttons according to new size of frame */
  3983. RUN moveButtons IN TARGET-PROCEDURE (INPUT NO).
  3984. /* bring ventilator back onto top */
  3985. IF cUIBMode BEGINS "DESIGN":U THEN
  3986. DO:
  3987. /* If the window was resized the frame is not resized accordingly
  3988. in Design mode as there is no persistent ContainerSource */
  3989. IF lWindowResize THEN
  3990. DO:
  3991. RUN adeuib/_uibinfo.p (?,'frame ?':U,'handle':U, OUTPUT cFrame).
  3992. hWindowFrame = WIDGET-HANDLE(cFrame).
  3993. hWindowFrame:WIDTH = MAX(hWindow:WIDTH,hWindowFrame:WIDTH).
  3994. hWindowFrame:HEIGHT = MAX(hWindow:HEIGHT,hWindowFrame:HEIGHT).
  3995. END.
  3996. /* Find the ventilator frame */
  3997. hPopupFrame = hFrame:FIRST-CHILD.
  3998. hPopupFrame = hPopupframe:FIRST-CHILD.
  3999. IF VALID-HANDLE(hPopupFrame) THEN
  4000. hPopupframe:MOVE-TO-TOP().
  4001. IF program-name(2) <> 'adeuib/_setsize.p':u AND glInitComplete THEN
  4002. DO:
  4003. APPLY "end-resize":U TO hFrame.
  4004. APPLY "end-resize":U TO hWindow.
  4005. END.
  4006. END.
  4007. ASSIGN hFrame:HIDDEN = lPreviouslyHidden
  4008. hFrame:SCROLLABLE = TRUE NO-ERROR.
  4009. END PROCEDURE.
  4010. /* _UIB-CODE-BLOCK-END */
  4011. &ANALYZE-RESUME
  4012. &ENDIF
  4013. &IF DEFINED(EXCLUDE-rowObjectState) = 0 &THEN
  4014. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE rowObjectState Procedure
  4015. PROCEDURE rowObjectState :
  4016. /*------------------------------------------------------------------------------
  4017. Purpose: published from Commit-Target to tell the panel when to enable
  4018. itself (when there are uncommitted changes) and disable itself
  4019. (when those changes are committed or undone).
  4020. Parameters: INPUT pcState AS CHARACTER - 'NoUpdates' or 'RowUpdated'
  4021. Notes: This could be a property, but for now we just check the state
  4022. of the Commit button to see if we're already enabled/disabled.
  4023. ------------------------------------------------------------------------------*/
  4024. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  4025. RUN resetCommit IN TARGET-PROCEDURE.
  4026. RETURN.
  4027. END PROCEDURE.
  4028. /* _UIB-CODE-BLOCK-END */
  4029. &ANALYZE-RESUME
  4030. &ENDIF
  4031. &IF DEFINED(EXCLUDE-ruleStateChanges) = 0 &THEN
  4032. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE ruleStateChanges Procedure
  4033. PROCEDURE ruleStateChanges :
  4034. /*------------------------------------------------------------------------------
  4035. Purpose: Check rules for all passed actions
  4036. Parameters: pcLink - link name
  4037. phTarget
  4038. Notes: The purpose is to retrieve only the actions that have changed
  4039. so the OUTPUT values must be found in the opposite INPUT list.
  4040. - The performance of this is extremely important since it is called
  4041. for almost any event in order to reset the toolbar states correctly
  4042. so the Hide, Enable and ImageAlternate rules are read from the
  4043. temp-table and not through the API.
  4044. - The exception is the case where the corresponding action* function
  4045. is overidden in an instance. This allows for example the panel
  4046. to have a different hide rule than the toolbar, but an override of
  4047. these action* functions in a custom super-procedure will have no
  4048. effect.
  4049. ------------------------------------------------------------------------------*/
  4050. DEFINE INPUT PARAMETER pcLink AS CHARACTER NO-UNDO.
  4051. DEFINE INPUT PARAMETER phTarget AS HANDLE NO-UNDO.
  4052. DEFINE INPUT-OUTPUT PARAMETER piocEnable AS CHARACTER NO-UNDO.
  4053. DEFINE INPUT-OUTPUT PARAMETER piocDisable AS CHARACTER NO-UNDO.
  4054. DEFINE INPUT-OUTPUT PARAMETER piocVisible AS CHARACTER NO-UNDO.
  4055. DEFINE INPUT-OUTPUT PARAMETER piocHidden AS CHARACTER NO-UNDO.
  4056. DEFINE INPUT-OUTPUT PARAMETER piocImage1 AS CHARACTER NO-UNDO.
  4057. DEFINE INPUT-OUTPUT PARAMETER piocImage2 AS CHARACTER NO-UNDO.
  4058. DEFINE INPUT-OUTPUT PARAMETER piocFalse AS CHARACTER NO-UNDO.
  4059. DEFINE INPUT-OUTPUT PARAMETER piocTrue AS CHARACTER NO-UNDO.
  4060. DEFINE VARIABLE lok AS LOGICAL NO-UNDO.
  4061. DEFINE VARIABLE cEnable AS CHARACTER NO-UNDO.
  4062. DEFINE VARIABLE cDisable AS CHARACTER NO-UNDO.
  4063. DEFINE VARIABLE cHidden AS CHARACTER NO-UNDO.
  4064. DEFINE VARIABLE cVisible AS CHARACTER NO-UNDO.
  4065. DEFINE VARIABLE cImage1 AS CHARACTER NO-UNDO.
  4066. DEFINE VARIABLE cImage2 AS CHARACTER NO-UNDO.
  4067. DEFINE VARIABLE cTrue AS CHARACTER NO-UNDO.
  4068. DEFINE VARIABLE cFalse AS CHARACTER NO-UNDO.
  4069. DEFINE VARIABLE iFunc AS INTEGER NO-UNDO.
  4070. DEFINE VARIABLE hFunc AS HANDLE NO-UNDO.
  4071. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  4072. DEFINE VARIABLE lEnablerule AS LOGICAL NO-UNDO.
  4073. DEFINE VARIABLE lHiderule AS LOGICAL NO-UNDO.
  4074. DEFINE VARIABLE lImagerule AS LOGICAL NO-UNDO.
  4075. DEFINE VARIABLE cEnablerule AS CHARACTER NO-UNDO.
  4076. DEFINE VARIABLE cHiderule AS CHARACTER NO-UNDO.
  4077. DEFINE VARIABLE cImagerule AS CHARACTER NO-UNDO.
  4078. DEFINE VARIABLE lIsOn AS LOGICAL NO-UNDO.
  4079. DEFINE VARIABLE lIsOff AS LOGICAL NO-UNDO.
  4080. DEFINE BUFFER bttAction FOR ttAction.
  4081. hBuffer = DYNAMIC-FUNCTION('linkRuleBuffer':U IN TARGET-PROCEDURE,
  4082. pcLink,
  4083. phTarget).
  4084. IF NOT VALID-HANDLE(hBuffer) THEN
  4085. RETURN.
  4086. /* Check if any of the rules have local overrides in an object in which case
  4087. we read the rules from the API instead of from the temp-table.
  4088. The reason for this logic is that we do not want the overhead of the
  4089. function call unless it really is needed. */
  4090. ASSIGN
  4091. lEnableRule = CAN-DO(TARGET-PROCEDURE:INTERNAL-ENTRIES,'actionEnableRule':u)
  4092. lHideRule = CAN-DO(TARGET-PROCEDURE:INTERNAL-ENTRIES,'actionHideRule':u)
  4093. lImageRule = CAN-DO(TARGET-PROCEDURE:INTERNAL-ENTRIES,'actionImageAlternateRule':u).
  4094. DO iFunc = 1 TO hBuffer:NUM-FIELDS.
  4095. hFunc = hBuffer:BUFFER-FIELD(iFunc).
  4096. ghTargetProcedure = TARGET-PROCEDURE.
  4097. hFunc:BUFFER-VALUE = DYNAMIC-FUNCTION(hFunc:NAME IN phTarget) NO-ERROR.
  4098. END.
  4099. ghTargetProcedure = ?.
  4100. FOR EACH bttAction WHERE bttAction.link = pcLink
  4101. and
  4102. (lookup(bttAction.Action,piocEnable) > 0
  4103. or
  4104. lookup(bttAction.Action,piocDisable) > 0
  4105. or
  4106. lookup(bttAction.Action,piocVisible) > 0
  4107. or
  4108. lookup(bttAction.Action,piocHidden) > 0
  4109. or
  4110. lookup(bttAction.Action,piocImage1) > 0
  4111. or
  4112. lookup(bttAction.Action,piocImage2) > 0
  4113. or
  4114. lookup(bttAction.Action,piocTrue) > 0
  4115. or
  4116. lookup(bttAction.Action,piocFalse) > 0
  4117. ):
  4118. assign
  4119. lIsOn = ?
  4120. lIsOff = ?
  4121. lIsOn = CAN-DO(piocEnable,bttAction.Action)
  4122. lIsOff = CAN-DO(piocDisable,bttAction.Action).
  4123. if lIsOn or lIsOff then
  4124. do:
  4125. cEnableRule = IF NOT lEnableRule
  4126. THEN bttAction.EnableRule
  4127. ELSE {fnarg actionEnableRule bttAction.Action}.
  4128. IF cEnableRule = '':U OR DYNAMIC-FUNCTION('checkRule':U IN TARGET-PROCEDURE,
  4129. cEnableRule,
  4130. /* If the rule is overidden we may not have
  4131. the property in the linkRulebuffer so
  4132. we check the object directly
  4133. (checkRule checks the type of the handle)*/
  4134. IF NOT lEnableRule THEN hBuffer ELSE phTarget,
  4135. FALSE
  4136. ) THEN
  4137. DO:
  4138. IF lIsOff THEN
  4139. cEnable = cEnable + ",":U + bttAction.Action.
  4140. END.
  4141. ELSE DO:
  4142. IF lIsOn THEN
  4143. cDisable = cDisable + ",":U + bttAction.Action.
  4144. END.
  4145. end. /* on or off */
  4146. /* hidden is ON (rule) */
  4147. assign
  4148. lIsOn = ?
  4149. lIsOff = ?
  4150. lIsOn = CAN-DO(piocHidden,bttAction.Action)
  4151. lIsOff = CAN-DO(piocVisible,bttAction.Action).
  4152. if lIsOn or lIsOff then
  4153. do:
  4154. cHideRule = IF NOT lHideRule
  4155. THEN bttAction.HideRule
  4156. ELSE {fnarg actionHideRule bttAction.Action}.
  4157. IF cHideRule <> '':U THEN
  4158. DO:
  4159. IF DYNAMIC-FUNCTION('checkRule':U IN TARGET-PROCEDURE,
  4160. cHideRule,
  4161. /* if the rule is overidden we may not have
  4162. the property in the linkrulebuffer so
  4163. we check the object directly
  4164. (checkRule checks the type of the handle)*/
  4165. IF NOT lHideRule THEN hBuffer ELSE phTarget,
  4166. FALSE
  4167. ) THEN
  4168. DO:
  4169. IF lIsOff THEN
  4170. cHidden = cHidden + ",":U + bttAction.Action.
  4171. END.
  4172. ELSE DO:
  4173. IF lIsOn THEN
  4174. cVisible = cVisible + "," + bttAction.Action.
  4175. END.
  4176. END.
  4177. end. /* on or off */
  4178. assign
  4179. lIsOn = ?
  4180. lIsOff = ?
  4181. lIsOn = CAN-DO(piocImage2,bttAction.Action)
  4182. lIsOff = CAN-DO(piocImage1,bttAction.Action).
  4183. if lIsOn or lIsOff then
  4184. do:
  4185. cImageRule = IF NOT lImageRule
  4186. THEN bttAction.ImageAlternateRule
  4187. ELSE {fnarg actionImageAlternateRule bttAction.Action}.
  4188. IF cImageRule <> '':U THEN
  4189. DO:
  4190. IF DYNAMIC-FUNCTION('checkRule':U IN TARGET-PROCEDURE,
  4191. cImageRule,
  4192. /* If the rule is overidden we may not have
  4193. the property in the linkRulebuffer so
  4194. we check the object directly
  4195. (checkRule checks the type of the handle)*/
  4196. IF NOT lImageRule THEN hBuffer ELSE phTarget,
  4197. FALSE) THEN
  4198. DO:
  4199. IF lIsOff THEN
  4200. cImage2 = cImage2 + ",":U + bttAction.Action.
  4201. END.
  4202. ELSE DO:
  4203. IF lIsOn THEN
  4204. cImage1 = cImage1 + "," + bttAction.Action.
  4205. END.
  4206. END.
  4207. end. /* on or off */
  4208. assign
  4209. lIsOn = ?
  4210. lIsOff = ?
  4211. lIsOn = CAN-DO(piocTrue,bttAction.Action)
  4212. lIsOff = CAN-DO(piocFalse,bttAction.Action).
  4213. if lIsOn or lIsOff then
  4214. do:
  4215. IF bttAction.Type = 'PROPERTY':U THEN
  4216. DO:
  4217. IF DYNAMIC-FUNCTION('checkRule':U IN TARGET-PROCEDURE,
  4218. bttAction.OnChoose,
  4219. hBuffer,
  4220. FALSE) THEN
  4221. DO:
  4222. IF lIsOff THEN
  4223. cTrue = cTrue + ",":U + bttAction.Action.
  4224. END.
  4225. ELSE DO:
  4226. IF lIsOn THEN
  4227. cFalse = cFalse + ",":U + bttAction.Action.
  4228. END.
  4229. END.
  4230. end. /* on or off */
  4231. END. /* for each bttAtction */
  4232. ASSIGN
  4233. piocEnable = TRIM(cEnable,',':U)
  4234. piocDisable = TRIM(cDisable,',':U)
  4235. piocVisible = TRIM(cVisible,',':U)
  4236. piocHidden = TRIM(cHidden,',':U)
  4237. piocImage1 = TRIM(cImage1,',':U)
  4238. piocImage2 = TRIM(cImage2,',':U)
  4239. piocFalse = TRIM(cFalse,',':U)
  4240. piocTrue = TRIM(cTrue,',':U).
  4241. END PROCEDURE.
  4242. /* _UIB-CODE-BLOCK-END */
  4243. &ANALYZE-RESUME
  4244. &ENDIF
  4245. &IF DEFINED(EXCLUDE-runInfo) = 0 &THEN
  4246. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE runInfo Procedure
  4247. PROCEDURE runInfo :
  4248. /*------------------------------------------------------------------------------
  4249. Purpose: Return the necessary information for RUN or PROERTY
  4250. Parameters: INPUT pcAction - Action Id where type = RUN.
  4251. OUTPUT pohTarget - Target handle
  4252. OUTPUT pocProcedure - Target Procedure
  4253. Notes: This encapsulates the logic to look for this info in the parent if
  4254. it's not defined in the action itself.
  4255. -----------------------------------------------------------------------------*/
  4256. DEFINE INPUT PARAMETER pcAction AS CHAR NO-UNDO.
  4257. DEFINE OUTPUT PARAMETER pocProcedure AS CHAR NO-UNDO.
  4258. DEFINE OUTPUT PARAMETER pocParam AS CHAR NO-UNDO.
  4259. DEFINE VARIABLE cParent AS CHAR NO-UNDO.
  4260. DEFINE VARIABLE cOnChoose AS CHAR NO-UNDO.
  4261. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  4262. cOnChoose = {fnarg actionOnChoose pcAction}.
  4263. {get UseRepository lUseRepository}.
  4264. IF lUseRepository THEN
  4265. DO:
  4266. ASSIGN
  4267. pocProcedure = cOnChoose
  4268. pocParam = {fnarg actionParameter pcAction}.
  4269. END.
  4270. ELSE
  4271. DO:
  4272. /* Find the procedure on the parent and use the action as input. */
  4273. IF cOnChoose = "":U THEN
  4274. ASSIGN
  4275. cParent = {fnarg actionParent pcAction}
  4276. pocProcedure = {fnarg actionOnChoose cParent}
  4277. pocParam = pcAction.
  4278. ELSE /* we allow harcoded parameter on the action */
  4279. ASSIGN
  4280. pocProcedure = TRIM(ENTRY(1,cOnChoose,"(":U))
  4281. pocParam = IF NUM-ENTRIES(cOnChoose,"(":U) > 1
  4282. THEN TRIM(ENTRY(2,cOnChoose,"(":U),"')":U)
  4283. ELSE "":U.
  4284. END.
  4285. RETURN.
  4286. END PROCEDURE.
  4287. /* _UIB-CODE-BLOCK-END */
  4288. &ANALYZE-RESUME
  4289. &ENDIF
  4290. &IF DEFINED(EXCLUDE-setButtons) = 0 &THEN
  4291. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE setButtons Procedure
  4292. PROCEDURE setButtons :
  4293. /*-----------------------------------------------------------------------
  4294. Purpose: DEPRECATED - enable/disable actions according to state.
  4295. Parameters: INPUT pcPanelState - State
  4296. - onlyRecord
  4297. - disable-nav
  4298. - first
  4299. - last
  4300. - initial-tableio
  4301. - update
  4302. - add-only
  4303. - disable-commit
  4304. - enable-commit
  4305. - enable-filter
  4306. Notes: Called directly or indirectly from procedures that subscribes to
  4307. linked objects;
  4308. queryPosition, updateState, rowObjectState or LinkState.
  4309. - DEPRECATED in the sense that the toolbar disabling/enabling
  4310. has been replaced by rule based state management. The procedure
  4311. is still callable and works on the predefined set of states
  4312. and may still be called in odd cases.
  4313. ---------------------------------------------------------------------------*/
  4314. DEFINE INPUT PARAMETER pcPanelState AS CHARACTER NO-UNDO.
  4315. DEF VAR cParam AS CHAR NO-UNDO.
  4316. DEF VAR cTableIoType AS CHAR NO-UNDO.
  4317. {get TableIoType cTableIoType}.
  4318. DO WITH FRAME Panel-Frame:
  4319. CASE pcPanelState:
  4320. WHEN 'OnlyRecord':U THEN
  4321. DO:
  4322. cParam = "Next,Prev,First,Last":U.
  4323. {fnarg disableActions cparam}.
  4324. END.
  4325. WHEN 'Disable-Nav':U THEN
  4326. DO:
  4327. cParam = "Next,Prev,First,Last":U.
  4328. {fnarg disableActions cParam}.
  4329. END.
  4330. WHEN 'first':U THEN
  4331. DO:
  4332. cParam = "First,Prev":U.
  4333. {fnarg disableActions cParam}.
  4334. cParam = "Last,Next":U.
  4335. {fnarg enableActions cParam}.
  4336. END. /* first */
  4337. WHEN 'last':U THEN
  4338. DO:
  4339. cParam = "Last,Next":U.
  4340. {fnarg disableActions cParam}.
  4341. cParam = "First,Prev":U.
  4342. {fnarg enableActions cParam}.
  4343. END.
  4344. WHEN 'NotFirstOrLast':U THEN
  4345. DO:
  4346. cParam = "Next,Prev,First,Last":U.
  4347. {fnarg enableActions cparam}.
  4348. END.
  4349. WHEN 'Enable-Nav':U THEN
  4350. DO:
  4351. cParam = "Next,Prev,First,Last":U.
  4352. {fnarg enableActions cparam}.
  4353. END.
  4354. WHEN 'Initial-TableIo':U THEN
  4355. DO:
  4356. cParam = "Save,Cancel,Reset":U.
  4357. {fnarg disableActions cParam}.
  4358. cParam = "add,update,delete,copy":U.
  4359. {fnarg enableActions cparam}.
  4360. END.
  4361. WHEN 'Update':U THEN
  4362. DO:
  4363. cParam = "Add,Update,Delete,Copy,Cancel":U.
  4364. {fnarg disableActions cParam}.
  4365. cParam = "Save,Reset".
  4366. {fnarg enableActions cparam}.
  4367. END.
  4368. WHEN 'Modal-Update':U THEN
  4369. DO:
  4370. cParam = "Add,Update,Delete,Copy,Reset":U.
  4371. {fnarg disableActions cParam}.
  4372. cParam = "Save,Cancel".
  4373. {fnarg enableActions cparam}.
  4374. END.
  4375. WHEN 'Modal-Update-Modified':U THEN
  4376. DO:
  4377. cParam = "Add,Update,Delete,Copy":U.
  4378. {fnarg disableActions cParam}.
  4379. cParam = "Save,Reset,Cancel".
  4380. {fnarg enableActions cparam}.
  4381. END.
  4382. WHEN 'Delete-Only':U THEN
  4383. DO:
  4384. cParam = "Add,Copy,Update,Save,Cancel,Reset":U.
  4385. {fnarg disableActions cParam}.
  4386. cParam = "Delete".
  4387. {fnarg enableActions cparam}.
  4388. END.
  4389. WHEN 'Add-Only':U THEN
  4390. DO:
  4391. cParam = "Copy,Update,Delete,Save,Cancel,Reset":U.
  4392. {fnarg disableActions cParam}.
  4393. cParam = "Add".
  4394. {fnarg enableActions cparam}.
  4395. END.
  4396. WHEN 'Update-Only':U THEN
  4397. DO:
  4398. cParam = "Add,Copy,Delete,Save,Cancel,Reset":U.
  4399. {fnarg disableActions cParam}.
  4400. cParam = "Update".
  4401. {fnarg enableActions cparam}.
  4402. END.
  4403. WHEN 'Disable-tableio':U THEN
  4404. DO:
  4405. cParam = "Add,Copy,Edit,Update,Delete,Save,Cancel,Reset".
  4406. {fnarg disableActions cParam}.
  4407. END.
  4408. WHEN 'Disable-commit':U THEN
  4409. DO:
  4410. cParam = "commit,undo".
  4411. {fnarg disableActions cParam}.
  4412. END.
  4413. WHEN 'Enable-commit':U THEN
  4414. DO:
  4415. cParam = "commit,undo".
  4416. {fnarg enableActions cParam}.
  4417. END.
  4418. WHEN 'Enable-filter':U THEN
  4419. DO:
  4420. cParam = "filter".
  4421. {fnarg enableActions cParam}.
  4422. END.
  4423. OTHERWISE RETURN "ADM-ERROR":U.
  4424. END. /* END CASE */
  4425. END. /* END DO WITH FRAME */
  4426. RETURN.
  4427. END PROCEDURE.
  4428. /* _UIB-CODE-BLOCK-END */
  4429. &ANALYZE-RESUME
  4430. &ENDIF
  4431. &IF DEFINED(EXCLUDE-updateActive) = 0 &THEN
  4432. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE updateActive Procedure
  4433. PROCEDURE updateActive :
  4434. /*------------------------------------------------------------------------------
  4435. Purpose: published from toolbar-target (container) to signal that
  4436. some of its objects have changed state
  4437. Parameters: <none>
  4438. Notes:
  4439. ------------------------------------------------------------------------------*/
  4440. DEFINE INPUT PARAMETER plActive AS LOGICAL NO-UNDO.
  4441. RUN resetToolbar IN TARGET-PROCEDURE.
  4442. END PROCEDURE.
  4443. /* _UIB-CODE-BLOCK-END */
  4444. &ANALYZE-RESUME
  4445. &ENDIF
  4446. &IF DEFINED(EXCLUDE-updateCategoryLists) = 0 &THEN
  4447. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE updateCategoryLists Procedure
  4448. PROCEDURE updateCategoryLists :
  4449. /*------------------------------------------------------------------------------
  4450. Purpose: Update the lists of available categories for the toolbar.
  4451. Parameters: pcBand - Band name
  4452. pcTopLevelBand - The Type of the band that are directly connected
  4453. to the toolbar. (Used to figure out which lists
  4454. to update)
  4455. Notes: This is called from loadToolbar at design time only and the result
  4456. are currently stored in AvailMenuActions and AvailToolbarActions,
  4457. which has their names from pre-repository when the actions groups
  4458. also were actions.
  4459. ------------------------------------------------------------------------------*/
  4460. DEFINE INPUT PARAMETER pcBand AS CHARACTER NO-UNDO.
  4461. DEFINE INPUT PARAMETER pcTopLevelType AS CHARACTER NO-UNDO.
  4462. DEFINE INPUT-OUTPUT PARAMETER pcMenuCategories AS CHARACTER NO-UNDO.
  4463. DEFINE INPUT-OUTPUT PARAMETER pcToolbarCategories AS CHARACTER NO-UNDO.
  4464. DEFINE BUFFER bttBandAction FOR ttBandAction.
  4465. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  4466. FOR EACH bttBandAction
  4467. WHERE bttBandAction.Band = pcBand:
  4468. IF bttBandAction.Action <> '':U THEN
  4469. DO:
  4470. cCategory = {fnarg ActionCategory bttBandAction.Action}.
  4471. IF cCategory = '':U THEN
  4472. cCategory = xcNocategory.
  4473. /* include blank for uncategorized */
  4474. IF cCategory = xcNocategory OR {fnarg CategoryLink cCategory} <> '':U THEN
  4475. DO:
  4476. IF pcTopLevelType = 'Menubar':U
  4477. AND NOT CAN-DO(pcMenuCategories,cCategory) THEN
  4478. ASSIGN pcMenuCategories = pcMenuCategories
  4479. + (IF pcMenuCategories <> '':U THEN ',':U ELSE '':U)
  4480. + cCategory.
  4481. ELSE
  4482. IF NOT CAN-DO(pcToolbarCategories,cCategory) THEN
  4483. ASSIGN pcToolbarCategories = pcToolbarCategories
  4484. + (IF pcToolbarCategories <> '':U THEN ',':U ELSE '':U)
  4485. + cCategory .
  4486. END.
  4487. END.
  4488. IF bttBandAction.ChildBand <> '':U THEN
  4489. RUN updateCategoryLists IN TARGET-PROCEDURE
  4490. (bttBandAction.ChildBand,
  4491. pcTopLevelType,
  4492. INPUT-OUTPUT pcMenuCategories,
  4493. INPUT-OUTPUT pcToolbarCategories).
  4494. END.
  4495. END PROCEDURE.
  4496. /* _UIB-CODE-BLOCK-END */
  4497. &ANALYZE-RESUME
  4498. &ENDIF
  4499. &IF DEFINED(EXCLUDE-updateState) = 0 &THEN
  4500. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE updateState Procedure
  4501. PROCEDURE updateState :
  4502. /*------------------------------------------------------------------------------
  4503. Purpose: Receives state message events related to record updates.
  4504. Parameters: pcState AS CHARACTER -- upstate state
  4505. Notes: Because some states may be published from different links
  4506. the source-procedure is always checked.
  4507. This means that this only will work when run/published from
  4508. the appropriate target !!!
  4509. NB! We do check the special getTargetProcedure in order to identify
  4510. the real NavigationTarget since SBO's uses a RUN.
  4511. This MUST NOT be used to identify TableioTarg
  4512. ets.
  4513. As a TableioSource may set this before a call that may end up
  4514. here for a child. (This is not so very likely for updatestate)
  4515. ------------------------------------------------------------------------------*/
  4516. DEFINE INPUT PARAMETER pcState AS CHARACTER NO-UNDO.
  4517. DEFINE VARIABLE hIOTarget AS HANDLE NO-UNDO.
  4518. DEFINE VARIABLE hNavTarget AS HANDLE NO-UNDO.
  4519. DEFINE VARIABLE hSource AS HANDLE NO-UNDO.
  4520. hSource = SOURCE-PROCEDURE.
  4521. /* Is this from the tableio-target? */
  4522. hIoTarget = {fnarg activeTarget 'Tableio':U}.
  4523. IF hSource = hIOTarget THEN
  4524. /* From 9.1C we don't care what state, but check the linked object's state
  4525. instead */
  4526. RUN resetTableio IN TARGET-PROCEDURE.
  4527. ELSE DO:
  4528. /* is this from a navtarget ?*/
  4529. hNavTarget = {fnarg activeTarget 'Navigation':U}.
  4530. IF hSource <> hNavTarget THEN
  4531. /* The SBO does not publish, so we need to do this trick to find the actual
  4532. source-procedure. This is only an issue for navigationTarget */
  4533. {get TargetProcedure hSource SOURCE-PROCEDURE} NO-ERROR.
  4534. /* From 9.1C we don't care what state, but check the linked object's state
  4535. instead */
  4536. IF hSource = hNavTarget THEN
  4537. RUN resetNavigation IN TARGET-PROCEDURE.
  4538. END.
  4539. RETURN.
  4540. END PROCEDURE.
  4541. /* _UIB-CODE-BLOCK-END */
  4542. &ANALYZE-RESUME
  4543. &ENDIF
  4544. &IF DEFINED(EXCLUDE-viewHideActions) = 0 &THEN
  4545. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE viewHideActions Procedure
  4546. PROCEDURE viewHideActions :
  4547. /*------------------------------------------------------------------------------
  4548. Purpose: To view and hide actions according to state (called from setbuttons)
  4549. Parameter: input comma seperated list of actions to view
  4550. input comma seperated list of actions to hide
  4551. Notes: For buttons we simply hide/view existing buttons and then remove them
  4552. into new positions.
  4553. For menu items we must reconstruct any submenus that have been
  4554. modified as menu items do not have a hidden attribute.
  4555. ------------------------------------------------------------------------------*/
  4556. DEFINE INPUT PARAMETER pcViewActions AS CHARACTER NO-UNDO.
  4557. DEFINE INPUT PARAMETER pcHideActions AS CHARACTER NO-UNDO.
  4558. DEFINE VARIABLE iLoop AS INTEGER NO-UNDO.
  4559. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  4560. DEFINE VARIABLE cRebuildBands AS CHARACTER NO-UNDO.
  4561. DEFINE VARIABLE lButtonsChanged AS LOGICAL NO-UNDO.
  4562. DEFINE BUFFER btMenu FOR tMenu.
  4563. DEFINE BUFFER btButton FOR tButton.
  4564. DO iLoop = 1 TO NUM-ENTRIES(pcViewActions):
  4565. cAction = ENTRY(iLoop,pcViewActions).
  4566. /*
  4567. FIND btMenu WHERE btMenu.Name = cAction
  4568. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  4569. IF AVAILABLE btMenu AND btMenu.hdl:HIDDEN = TRUE THEN
  4570. DO:
  4571. IF LOOKUP(btMenu.PARENT,cRebuildBands) = 0 THEN
  4572. ASSIGN cRebuildBands = cRebuildBands + (IF cRebuildBands = "":U THEN "":U ELSE ",":U) + btMenu.PARENT.
  4573. END.
  4574. */
  4575. FIND btButton WHERE btButton.Name = cAction
  4576. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  4577. IF AVAILABLE btButton AND VALID-HANDLE(btButton.Hdl)
  4578. AND btButton.hdl:HIDDEN = TRUE THEN
  4579. DO:
  4580. /* no-error - could be in wrong position,
  4581. moveButtons has not been called yet (relies on HIDDEN true) */
  4582. btButton.Hdl:HIDDEN = FALSE no-error.
  4583. IF NOT lButtonsChanged THEN ASSIGN lButtonsChanged = TRUE.
  4584. END.
  4585. END. /* do iLoop = 1 to num-entries(pcViewActions) */
  4586. DO iLoop = 1 TO NUM-ENTRIES(pcHideActions):
  4587. cAction = ENTRY(iLoop,pcHideActions).
  4588. /*
  4589. FIND btMenu WHERE btMenu.Name = cAction
  4590. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  4591. IF AVAILABLE btMenu AND btMenu.hdl.HIDDEN = FALSE THEN
  4592. DO:
  4593. btMenu.HIDDEN = TRUE.
  4594. IF LOOKUP(btMenu.PARENT,cRebuildBands) = 0 THEN
  4595. ASSIGN cRebuildBands = cRebuildBands + (IF cRebuildBands = "":U THEN "":U ELSE ",":U) + btMenu.PARENT.
  4596. END.
  4597. */
  4598. FIND btButton WHERE btButton.Name = cAction
  4599. AND btButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  4600. IF AVAILABLE btButton AND VALID-HANDLE(btButton.Hdl)
  4601. AND btButton.Hdl:HIDDEN = FALSE THEN
  4602. DO:
  4603. btButton.Hdl:HIDDEN = TRUE.
  4604. IF NOT lButtonsChanged THEN ASSIGN lButtonsChanged = TRUE.
  4605. END.
  4606. END. /* do iLoop = 1 to num-entries(pcViewActions) */
  4607. /* If any buttons have changed, fix button positions */
  4608. IF lButtonsChanged THEN
  4609. RUN moveButtons IN TARGET-PROCEDURE (INPUT YES).
  4610. /*
  4611. /* If any menu items have changed, rebuild appropriate band submenus */
  4612. IF cRebuildBands <> "":U THEN
  4613. DO iLoop = 1 TO NUM-ENTRIES(cRebuildBands):
  4614. /* 1st zap existing items on toolbar band */
  4615. FOR EACH btMenu
  4616. WHERE btMenu.hTarget = TARGET-PROCEDURE
  4617. AND btMenu.PARENT = ENTRY(iLoop,cRebuildBands):
  4618. IF VALID-HANDLE(btMenu.hdl) THEN
  4619. DELETE WIDGET btMenu.hdl.
  4620. ASSIGN btMenu.hdl = ?.
  4621. END.
  4622. /* then reconstruct toolbar band */
  4623. DYNAMIC-FUNCTION("constructMenuItems":U IN TARGET-PROCEDURE,
  4624. ENTRY(iLoop,cRebuildBands),
  4625. "":U).
  4626. END.
  4627. */
  4628. RETURN.
  4629. END PROCEDURE.
  4630. /* _UIB-CODE-BLOCK-END */
  4631. &ANALYZE-RESUME
  4632. &ENDIF
  4633. &IF DEFINED(EXCLUDE-viewObject) = 0 &THEN
  4634. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE viewObject Procedure
  4635. PROCEDURE viewObject :
  4636. /*------------------------------------------------------------------------------
  4637. Purpose: View the object
  4638. The purpose for the override is to add the menu bar handle
  4639. to the window.
  4640. Parameters: <none>
  4641. Notes: we do not call super, but make sure objecthidden is managed here
  4642. ------------------------------------------------------------------------------*/
  4643. DEFINE VARIABLE lToolBar AS LOGICAL NO-UNDO.
  4644. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  4645. DEFINE VARIABLE cUIBmode AS CHARACTER NO-UNDO.
  4646. DEFINE VARIABLE hPopupFrame AS HANDLE NO-UNDO.
  4647. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  4648. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  4649. DEFINE VARIABLE lNoMenu AS LOGICAL NO-UNDO.
  4650. DEFINE VARIABLE lMenu AS LOGICAL NO-UNDO.
  4651. DEFINE VARIABLE lUseRepos AS LOGICAL NO-UNDO.
  4652. DEFINE VARIABLE lRemoveMenu AS LOGICAL NO-UNDO.
  4653. &SCOPED-DEFINE xp-assign
  4654. {get Window hWindow}
  4655. {get ContainerHandle hFrame}
  4656. {get Toolbar lToolbar}
  4657. {get UIBMode cUIBMode}
  4658. {get UseRepository lUseRepos}
  4659. .
  4660. &UNDEFINE xp-assign
  4661. /* Keep frame hidden if no toolbar and runtime */
  4662. IF lToolbar or cUIBMode = 'Design':U THEN
  4663. hFrame:HIDDEN = FALSE NO-ERROR.
  4664. IF cUIBMode ='Design':U THEN
  4665. DO:
  4666. /* check this special designtime property in design.p that is set from
  4667. Appbuilder to avoid 'viewing' menus on hidden pages, because this
  4668. will override the visible ones and hideObject will remove it.*/
  4669. IF NOT lUseRepos THEN
  4670. lNoMenu = DYNAMIC-FUNCTION('getDesignTimeHideMenu':U IN TARGET-PROCEDURE)
  4671. NO-ERROR.
  4672. /* Find the ventilator frame */
  4673. hPopupFrame = hFrame:FIRST-CHILD.
  4674. hPopupFrame = hPopupframe:FIRST-CHILD.
  4675. IF VALID-HANDLE(hPopupFrame) THEN
  4676. hPopupframe:MOVE-TO-TOP().
  4677. END.
  4678. IF NOT lUseRepos THEN
  4679. DO:
  4680. {get MenubarHandle hMenu}.
  4681. IF VALID-HANDLE(hMenu) AND VALID-HANDLE(hMenu:FIRST-CHILD) AND NOT (lNoMenu = TRUE) THEN
  4682. hWindow:MENUBAR = hMenu.
  4683. /* This is only done to enable accellerators, before the menus are dropped */
  4684. IF cUIBMode = '':U THEN
  4685. RUN buildAllMenus IN TARGET-PROCEDURE.
  4686. {fnarg enableActions 'Exit':U}.
  4687. END.
  4688. ELSE DO:
  4689. &SCOPED-DEFINE xp-assign
  4690. {get Menu lMenu}
  4691. {get RemoveMenuOnhide lRemoveMenu}
  4692. .
  4693. &UNDEFINE xp-assign
  4694. /* if remove on hide , ensure the memu is added back
  4695. (nothing will happen if is there already) */
  4696. IF lRemoveMenu AND lMenu THEN
  4697. RUN rebuildMenu IN TARGET-PROCEDURE.
  4698. END.
  4699. &SCOPED-DEFINE xp-assign
  4700. {set ObjectHidden NO}
  4701. {set HideOnInit NO}.
  4702. &UNDEFINE xp-assign
  4703. END PROCEDURE.
  4704. /* _UIB-CODE-BLOCK-END */
  4705. &ANALYZE-RESUME
  4706. &ENDIF
  4707. &IF DEFINED(EXCLUDE-windowEnabled) = 0 &THEN
  4708. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE windowEnabled Procedure
  4709. PROCEDURE windowEnabled :
  4710. /*------------------------------------------------------------------------------
  4711. Purpose: To check if window enabled (for window drop down list)
  4712. Parameters: <none>
  4713. Notes:
  4714. ------------------------------------------------------------------------------*/
  4715. DEFINE INPUT PARAMETER phHandle AS HANDLE NO-UNDO.
  4716. DEFINE OUTPUT PARAMETER plEnabled AS LOGICAL NO-UNDO.
  4717. DEFINE VARIABLE lEnabled AS LOGICAL.
  4718. IF phHandle = ? THEN
  4719. DO:
  4720. lEnabled = NO.
  4721. RETURN.
  4722. END.
  4723. IF NOT phHandle:SENSITIVE THEN
  4724. DO:
  4725. ASSIGN
  4726. lEnabled = NO.
  4727. RETURN.
  4728. END.
  4729. phHandle = phHandle:FIRST-CHILD.
  4730. DO WHILE phHandle <> ?:
  4731. IF phHandle:SENSITIVE THEN
  4732. DO:
  4733. plEnabled = YES.
  4734. RETURN.
  4735. END.
  4736. RUN WindowEnabled IN TARGET-PROCEDURE (INPUT phHandle, OUTPUT lEnabled).
  4737. IF lEnabled THEN
  4738. DO:
  4739. plEnabled = YES.
  4740. RETURN.
  4741. END.
  4742. phHandle = phHandle:NEXT-SIBLING.
  4743. END.
  4744. END PROCEDURE.
  4745. /* _UIB-CODE-BLOCK-END */
  4746. &ANALYZE-RESUME
  4747. &ENDIF
  4748. &IF DEFINED(EXCLUDE-windowFocus) = 0 &THEN
  4749. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE windowFocus Procedure
  4750. PROCEDURE windowFocus :
  4751. /*------------------------------------------------------------------------------
  4752. Purpose: Focus window
  4753. Parameters: input window handle
  4754. Notes:
  4755. ------------------------------------------------------------------------------*/
  4756. DEFINE INPUT PARAMETER phHandle AS HANDLE NO-UNDO.
  4757. IF VALID-HANDLE(phHandle) THEN
  4758. DO:
  4759. APPLY "ENTRY":U TO phHandle.
  4760. phHandle:MOVE-TO-TOP().
  4761. IF phHandle:WINDOW-STATE = WINDOW-MINIMIZED
  4762. THEN phHandle:WINDOW-STATE = WINDOW-NORMAL.
  4763. END.
  4764. END PROCEDURE.
  4765. /* _UIB-CODE-BLOCK-END */
  4766. &ANALYZE-RESUME
  4767. &ENDIF
  4768. &IF DEFINED(EXCLUDE-windowListMenu) = 0 &THEN
  4769. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _PROCEDURE windowListMenu Procedure
  4770. PROCEDURE windowListMenu :
  4771. /*------------------------------------------------------------------------------
  4772. Purpose: Build drop down list of session windows menu
  4773. Parameters: input submenu handle to build list in
  4774. input toolbar container procedure handle
  4775. input start handle (first time = session).
  4776. input window count
  4777. Notes: Recursive procedure !
  4778. ------------------------------------------------------------------------------*/
  4779. DEFINE INPUT PARAMETER pcParent AS CHAR NO-UNDO.
  4780. DEFINE INPUT PARAMETER phContainer AS HANDLE NO-UNDO.
  4781. DEFINE INPUT PARAMETER phStart AS HANDLE NO-UNDO.
  4782. DEFINE INPUT-OUTPUT PARAMETER piCount AS INTEGER NO-UNDO.
  4783. DEFINE BUFFER btMenu FOR tMenu.
  4784. DEFINE BUFFER btParent FOR tMenu.
  4785. DEFINE VARIABLE hHandle AS HANDLE NO-UNDO.
  4786. DEFINE VARIABLE lEnabled AS LOGICAL INITIAL YES NO-UNDO.
  4787. DEFINE VARIABLE istartAlpha AS INTEGER NO-UNDO.
  4788. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  4789. FIND btParent WHERE btParent.Name = pcParent
  4790. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  4791. IF NOT AVAIL btParent THEN
  4792. RETURN.
  4793. ASSIGN
  4794. hHandle = phStart:FIRST-CHILD.
  4795. DO WHILE VALID-HANDLE(hHandle):
  4796. IF hHandle:TYPE = "WINDOW" AND
  4797. hHandle:VISIBLE AND
  4798. LENGTH(TRIM(hHandle:TITLE)) > 1 AND
  4799. hHandle <> phContainer:CURRENT-WINDOW THEN
  4800. DO:
  4801. ASSIGN piCount = piCount + 1.
  4802. RUN WindowEnabled IN TARGET-PROCEDURE (INPUT hHandle, OUTPUT lEnabled).
  4803. IF piCount > 9 THEN
  4804. ASSIGN
  4805. iStartAlpha = ASC("a":U)
  4806. iStartAlpha = iStartAlpha + piCount - 10
  4807. cLabel = "&":U + CHR(iStartAlpha) + " ":U + hHandle:TITLE
  4808. .
  4809. ELSE cLabel = "&":U + TRIM(STRING(piCount)) + " ":U + hHandle:TITLE.
  4810. CREATE btMenu.
  4811. ASSIGN
  4812. btMenu.hTarget = TARGET-PROCEDURE
  4813. btMenu.NAME = pcParent + ":":U + STRING(hHandle)
  4814. btMenu.PARENT = pcParent
  4815. btMenu.seq = piCount
  4816. btMenu.REFRESH = NO
  4817. btMenu.Sensitive = lEnabled.
  4818. CREATE MENU-ITEM btMenu.hdl
  4819. ASSIGN
  4820. LABEL = cLabel
  4821. PARENT = btParent.hdl
  4822. SENSITIVE = lEnabled
  4823. TRIGGERS:
  4824. ON "CHOOSE":U PERSISTENT RUN WindowFocus IN TARGET-PROCEDURE (INPUT hHandle).
  4825. END.
  4826. END.
  4827. IF hHandle:TYPE = "WINDOW":U THEN
  4828. DO:
  4829. RUN WindowListMenu IN TARGET-PROCEDURE
  4830. (INPUT pcParent,
  4831. INPUT phContainer,
  4832. INPUT hHandle,
  4833. INPUT-OUTPUT piCount).
  4834. END.
  4835. ASSIGN hHandle = hHandle:NEXT-SIBLING.
  4836. END.
  4837. END PROCEDURE.
  4838. /* _UIB-CODE-BLOCK-END */
  4839. &ANALYZE-RESUME
  4840. &ENDIF
  4841. /* ************************ Function Implementations ***************** */
  4842. &IF DEFINED(EXCLUDE-actionAccelerator) = 0 &THEN
  4843. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionAccelerator Procedure
  4844. FUNCTION actionAccelerator RETURNS CHARACTER
  4845. (pcAction AS CHAR) :
  4846. /*------------------------------------------------------------------------------
  4847. Purpose:
  4848. Notes:
  4849. ------------------------------------------------------------------------------*/
  4850. {&findaction}
  4851. RETURN IF AVAIL ttAction THEN ttAction.ACCELERATOR ELSE ?.
  4852. END FUNCTION.
  4853. /* _UIB-CODE-BLOCK-END */
  4854. &ANALYZE-RESUME
  4855. &ENDIF
  4856. &IF DEFINED(EXCLUDE-actionAccessType) = 0 &THEN
  4857. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionAccessType Procedure
  4858. FUNCTION actionAccessType RETURNS CHARACTER
  4859. (pcAction AS CHAR) :
  4860. /*------------------------------------------------------------------------------
  4861. Purpose:
  4862. Notes:
  4863. ------------------------------------------------------------------------------*/
  4864. {&findaction}
  4865. RETURN IF AVAIL ttAction THEN ttAction.AccessType ELSE ?.
  4866. END FUNCTION.
  4867. /* _UIB-CODE-BLOCK-END */
  4868. &ANALYZE-RESUME
  4869. &ENDIF
  4870. &IF DEFINED(EXCLUDE-actionCanLaunch) = 0 &THEN
  4871. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCanLaunch Procedure
  4872. FUNCTION actionCanLaunch RETURNS LOGICAL
  4873. ( pcAction AS CHAR ) :
  4874. /*------------------------------------------------------------------------------
  4875. Purpose: Check for the existence of the object to launch
  4876. Notes:
  4877. ------------------------------------------------------------------------------*/
  4878. DEFINE VARIABLE cFileName AS CHARACTER NO-UNDO.
  4879. DEFINE VARIABLE cRCodeName AS CHARACTER NO-UNDO.
  4880. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  4881. DEFINE VARIABLE iPeriod AS INTEGER NO-UNDO.
  4882. ASSIGN
  4883. cFileName = {fnarg actionPhysicalObjectName pcAction}
  4884. iPeriod = NUM-ENTRIES(cFileName,'.':U)
  4885. cRCodeName = cFileName.
  4886. /* set RcodeName */
  4887. IF iPeriod > 0 THEN
  4888. ENTRY(iPeriod,cRCodeName,'.':U) = 'r':U.
  4889. ELSE
  4890. cFileName = cRCodeName + '.r':U.
  4891. lOk = SEARCH(cRCodeName) <> ?.
  4892. /* if rcode not found search for repository stored name (assuming source)*/
  4893. IF NOT lok THEN
  4894. lOk = SEARCH(cFileName) <> ?.
  4895. RETURN lOk.
  4896. END FUNCTION.
  4897. /* _UIB-CODE-BLOCK-END */
  4898. &ANALYZE-RESUME
  4899. &ENDIF
  4900. &IF DEFINED(EXCLUDE-actionCanRun) = 0 &THEN
  4901. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCanRun Procedure
  4902. FUNCTION actionCanRun RETURNS LOGICAL
  4903. (pcAction AS CHAR) :
  4904. /*------------------------------------------------------------------------------
  4905. Purpose: Returns true if the target is valid and the procedure exists in it.
  4906. Parameter: pcAction - Action id of an action of type 'RUN'
  4907. Notes: Use to enable/disable 'run' and 'property' actions
  4908. ------------------------------------------------------------------------------*/
  4909. DEFINE VARIABLE cProcedure AS CHAR NO-UNDO.
  4910. DEFINE VARIABLE cParam AS CHAR NO-UNDO.
  4911. DEFINE VARIABLE hobject AS HANDLE NO-UNDO.
  4912. DEFINE VARIABLE cDisabledActions AS CHAR NO-UNDO.
  4913. {get DisabledActions cDisabledActions}.
  4914. IF CAN-DO(cDisabledActions,pcAction) THEN
  4915. RETURN FALSE.
  4916. RUN runInfo IN TARGET-PROCEDURE
  4917. (INPUT pcAction,
  4918. OUTPUT cProcedure,
  4919. OUTPUT cParam).
  4920. hObject = {fnarg actionTarget pcAction}.
  4921. IF VALID-HANDLE(hObject) THEN
  4922. RETURN {fnarg Signature cProcedure hObject} <> "":U.
  4923. ELSE RETURN FALSE.
  4924. END FUNCTION.
  4925. /* _UIB-CODE-BLOCK-END */
  4926. &ANALYZE-RESUME
  4927. &ENDIF
  4928. &IF DEFINED(EXCLUDE-actionCaption) = 0 &THEN
  4929. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCaption Procedure
  4930. FUNCTION actionCaption RETURNS CHARACTER
  4931. ( pcAction AS CHAR ) :
  4932. /*------------------------------------------------------------------------------
  4933. Purpose: Override action class for substitution
  4934. Notes:
  4935. ------------------------------------------------------------------------------*/
  4936. DEFINE BUFFER btMenu FOR tMenu.
  4937. DEFINE VARIABLE cCaption AS CHARACTER NO-UNDO.
  4938. {&findaction}
  4939. cCaption = IF AVAIL ttAction AND ttAction.Caption <> "":U
  4940. THEN ttAction.Caption
  4941. ELSE IF AVAIL ttAction AND ttAction.Name <> "":U
  4942. THEN ttAction.Name
  4943. ELSE IF AVAIL ttAction
  4944. THEN ttAction.Action
  4945. ELSE pcAction.
  4946. /* If the Caption is substitutable we log it here before it is
  4947. substituted. This allows us to only call this for required cases in
  4948. resetTargetAction */
  4949. IF INDEX(cCaption,'&1':U) > 0 THEN
  4950. DO:
  4951. FIND btMenu WHERE btMenu.NAME = pcAction
  4952. AND btMenu.hTARGET = TARGET-PROCEDURE NO-ERROR.
  4953. IF AVAIL btMenu THEN
  4954. ASSIGN btMenu.CaptionSubst = TRUE.
  4955. cCaption = DYNAMIC-FUNCTION('substituteActionText':U IN TARGET-PROCEDURE,
  4956. pcAction,
  4957. cCaption).
  4958. END.
  4959. RETURN cCaption.
  4960. END FUNCTION.
  4961. /* _UIB-CODE-BLOCK-END */
  4962. &ANALYZE-RESUME
  4963. &ENDIF
  4964. &IF DEFINED(EXCLUDE-actionCategory) = 0 &THEN
  4965. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCategory Procedure
  4966. FUNCTION actionCategory RETURNS CHARACTER
  4967. (pcAction AS CHAR) :
  4968. /*------------------------------------------------------------------------------
  4969. Purpose:
  4970. Notes:
  4971. ------------------------------------------------------------------------------*/
  4972. {&findaction}
  4973. RETURN IF AVAIL ttAction THEN ttAction.Category ELSE ?.
  4974. END FUNCTION.
  4975. /* _UIB-CODE-BLOCK-END */
  4976. &ANALYZE-RESUME
  4977. &ENDIF
  4978. &IF DEFINED(EXCLUDE-actionCategoryIsHidden) = 0 &THEN
  4979. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCategoryIsHidden Procedure
  4980. FUNCTION actionCategoryIsHidden RETURNS LOGICAL
  4981. (pcAction AS CHAR) :
  4982. /*------------------------------------------------------------------------------
  4983. Purpose: Check if the action's category is hidden
  4984. Notes:
  4985. ------------------------------------------------------------------------------*/
  4986. DEFINE VARIABLE cGroups AS CHARACTER NO-UNDO.
  4987. {&findaction}
  4988. IF AVAIL ttAction AND ttAction.Category <> '' THEN
  4989. DO:
  4990. FIND FIRST ttCategory WHERE ttCategory.Category = ttAction.Category NO-ERROR.
  4991. /* Currently only link categories are manageable */
  4992. IF AVAIL ttCategory AND ttCategory.link > '':U THEN
  4993. DO:
  4994. {get ActionGroups cGroups}.
  4995. RETURN NOT CAN-DO(cGroups,ttCategory.Category).
  4996. END.
  4997. END.
  4998. RETURN FALSE.
  4999. END FUNCTION.
  5000. /* _UIB-CODE-BLOCK-END */
  5001. &ANALYZE-RESUME
  5002. &ENDIF
  5003. &IF DEFINED(EXCLUDE-actionChecked) = 0 &THEN
  5004. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionChecked Procedure
  5005. FUNCTION actionChecked RETURNS LOGICAL
  5006. (pcAction AS CHAR) :
  5007. /*------------------------------------------------------------------------------
  5008. Purpose: Returns true if the get<Property> returns a value that matches
  5009. the actions checked.
  5010. Parameter: pcAction - Action id of an action of type 'RUN'
  5011. Notes: Currently we only support logical values.
  5012. returns unknown when the function does not exist or the object is
  5013. not valid.
  5014. ------------------------------------------------------------------------------*/
  5015. DEFINE VARIABLE cProperty AS CHAR NO-UNDO.
  5016. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  5017. DEFINE VARIABLE cChecked AS LOG NO-UNDO INIT ?.
  5018. ASSIGN
  5019. cProperty = "get":U + {fnarg actionOnChoose pcAction}.
  5020. hObject = {fnarg actionTarget pcAction}.
  5021. IF VALID-HANDLE(hObject) THEN
  5022. cChecked = DYNAMIC-FUNCTION(cProperty IN hObject) NO-ERROR.
  5023. RETURN cChecked.
  5024. END FUNCTION.
  5025. /* _UIB-CODE-BLOCK-END */
  5026. &ANALYZE-RESUME
  5027. &ENDIF
  5028. &IF DEFINED(EXCLUDE-actionChildren) = 0 &THEN
  5029. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionChildren Procedure
  5030. FUNCTION actionChildren RETURNS CHARACTER
  5031. (pcAction AS CHAR) :
  5032. /*------------------------------------------------------------------------------
  5033. Purpose: Return a comma separated list of all child actions of an action.
  5034. Parameter: Parent action id.
  5035. Notes: We return the class actions first.
  5036. This is done to keep a consistent order of actions in subsequent
  5037. realizations of the same objects. All objects share the class
  5038. actions, while instance actions are created for each object
  5039. so instance classes will eventually have a higher order, but
  5040. as they may be defined before the class actions they could have
  5041. a lower order in the first realization.
  5042. The order of actions can be manipulated in the toolbar.p insertMenu()
  5043. and createToolbar().
  5044. ------------------------------------------------------------------------------*/
  5045. DEFINE BUFFER bttChild FOR ttAction.
  5046. DEFINE VARIABLE cActions AS CHAR NO-UNDO.
  5047. {&findAction}
  5048. IF AVAIL ttAction THEN
  5049. DO:
  5050. FOR EACH bttChild WHERE bttChild.Parent = pcAction
  5051. AND bttChild.ProcedureHandle = THIS-PROCEDURE
  5052. BY bttChild.order:
  5053. cActions = cActions + ",":U + bttChild.Action.
  5054. END.
  5055. FOR EACH bttChild WHERE bttChild.Parent = pcAction
  5056. AND bttChild.ProcedureHandle = TARGET-PROCEDURE
  5057. BY bttChild.order:
  5058. cActions = cActions + ",":U + bttChild.Action.
  5059. END.
  5060. END.
  5061. RETURN LEFT-TRIM(cActions,",":U).
  5062. END FUNCTION.
  5063. /* _UIB-CODE-BLOCK-END */
  5064. &ANALYZE-RESUME
  5065. &ENDIF
  5066. &IF DEFINED(EXCLUDE-actionControlType) = 0 &THEN
  5067. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionControlType Procedure
  5068. FUNCTION actionControlType RETURNS CHARACTER
  5069. (pcAction AS CHAR) :
  5070. /*------------------------------------------------------------------------------
  5071. Purpose: Return the action's control type
  5072. - The repository supports 'Action','Label','placeholder' or 'separator'
  5073. - For non repository actions we return 'Action' if onchoose <> ''
  5074. otherwise it is a 'label' (this is set in defineAction)
  5075. (RULE is not defined in action for non-repository toolbars)
  5076. Notes: Used in targetActions to retrieve actions for a link
  5077. and in createMenuAction to ensure that a submenu NOT is created
  5078. for a placeholder.
  5079. ------------------------------------------------------------------------------*/
  5080. {&findaction}
  5081. RETURN IF AVAIL ttAction THEN ttAction.ControlType ELSE ?.
  5082. END FUNCTION.
  5083. /* _UIB-CODE-BLOCK-END */
  5084. &ANALYZE-RESUME
  5085. &ENDIF
  5086. &IF DEFINED(EXCLUDE-actionCreateEvent) = 0 &THEN
  5087. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionCreateEvent Procedure
  5088. FUNCTION actionCreateEvent RETURNS CHARACTER
  5089. (pcAction AS CHAR) :
  5090. /*------------------------------------------------------------------------------
  5091. Purpose: Returns the createEvent
  5092. (published when the action is created/realized in the interface)
  5093. Notes: Cannot be changed.
  5094. ------------------------------------------------------------------------------*/
  5095. {&findaction}
  5096. RETURN IF AVAIL ttAction THEN ttAction.CreateEvent ELSE ?.
  5097. END FUNCTION.
  5098. /* _UIB-CODE-BLOCK-END */
  5099. &ANALYZE-RESUME
  5100. &ENDIF
  5101. &IF DEFINED(EXCLUDE-actionDescription) = 0 &THEN
  5102. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionDescription Procedure
  5103. FUNCTION actionDescription RETURNS CHARACTER
  5104. (pcAction AS CHAR) :
  5105. /*------------------------------------------------------------------------------
  5106. Purpose:
  5107. Notes:
  5108. ------------------------------------------------------------------------------*/
  5109. {&findaction}
  5110. RETURN IF AVAIL ttAction THEN ttAction.Description ELSE ?.
  5111. END FUNCTION.
  5112. /* _UIB-CODE-BLOCK-END */
  5113. &ANALYZE-RESUME
  5114. &ENDIF
  5115. &IF DEFINED(EXCLUDE-actionDisabled) = 0 &THEN
  5116. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionDisabled Procedure
  5117. FUNCTION actionDisabled RETURNS LOGICAL
  5118. (pcAction AS CHAR) :
  5119. /*------------------------------------------------------------------------------
  5120. Purpose:
  5121. Notes:
  5122. ------------------------------------------------------------------------------*/
  5123. {&findaction}
  5124. RETURN IF AVAIL ttAction THEN ttAction.Disabled ELSE ?.
  5125. END FUNCTION.
  5126. /* _UIB-CODE-BLOCK-END */
  5127. &ANALYZE-RESUME
  5128. &ENDIF
  5129. &IF DEFINED(EXCLUDE-actionEnableRule) = 0 &THEN
  5130. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionEnableRule Procedure
  5131. FUNCTION actionEnableRule RETURNS CHARACTER
  5132. (pcAction AS CHAR) :
  5133. /*------------------------------------------------------------------------------
  5134. Purpose: Return the ImageEnableRule for a given action as stored in the
  5135. repository
  5136. Parameters: pcAction - Action name
  5137. Notes: The rules are evaluated in ruleStateChanges, which for performance
  5138. reasons normally does not call the method, but instead uses the
  5139. value as stored in the temp-table.
  5140. This means that overriding this in a custom super procedure will
  5141. have no effect.
  5142. It may, however, be overridden in an instance since ruleStateChanges
  5143. does a specific check of internal-entries and uses the function in
  5144. that case.
  5145. IMPORTANT: This function is duplicated in the Panel super proc panel.p
  5146. ------------------------------------------------------------------------------*/
  5147. {&findaction}
  5148. RETURN IF AVAIL ttAction THEN ttAction.EnableRule ELSE ?.
  5149. END FUNCTION.
  5150. /* _UIB-CODE-BLOCK-END */
  5151. &ANALYZE-RESUME
  5152. &ENDIF
  5153. &IF DEFINED(EXCLUDE-actionGroups) = 0 &THEN
  5154. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionGroups Procedure
  5155. FUNCTION actionGroups RETURNS CHARACTER
  5156. () :
  5157. /*------------------------------------------------------------------------------
  5158. Purpose:
  5159. Notes:
  5160. ------------------------------------------------------------------------------*/
  5161. DEFINE BUFFER bttChild FOR ttAction.
  5162. DEFINE VARIABLE cActions AS CHAR NO-UNDO.
  5163. FOR EACH ttCategory:
  5164. ASSIGN cActions = cActions + ",":U + ttCategory.Category.
  5165. END.
  5166. FOR
  5167. EACH ttAction,
  5168. FIRST bttChild WHERE bttChild.Parent = ttAction.Action:
  5169. ASSIGN cActions = cActions + ",":U + ttAction.Action.
  5170. END.
  5171. RETURN LEFT-TRIM(cActions,",":U).
  5172. END FUNCTION.
  5173. /* _UIB-CODE-BLOCK-END */
  5174. &ANALYZE-RESUME
  5175. &ENDIF
  5176. &IF DEFINED(EXCLUDE-actionHideRule) = 0 &THEN
  5177. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionHideRule Procedure
  5178. FUNCTION actionHideRule RETURNS CHARACTER
  5179. (pcAction AS CHAR) :
  5180. /*------------------------------------------------------------------------------
  5181. Purpose: Return the HideRule for a given action as stored in the repository
  5182. Parameters: pcAction - Action name
  5183. Notes: The rules are evaluated in ruleStateChanges, which for performance
  5184. reasons normally does not call the method, but instead uses the
  5185. value as stored in the temp-table.
  5186. It may, however, be overridden in an instance since ruleStateChanges
  5187. does a specific check of internal-entries and uses the function in
  5188. that case.
  5189. This means that overriding this in a custom super procedure will
  5190. have no effect.
  5191. IMPORTANT: This function is duplicated in the Panel super proc panel.p
  5192. ------------------------------------------------------------------------------*/
  5193. {&findaction}
  5194. RETURN IF AVAIL ttAction THEN ttAction.HideRule ELSE ?.
  5195. END FUNCTION.
  5196. /* _UIB-CODE-BLOCK-END */
  5197. &ANALYZE-RESUME
  5198. &ENDIF
  5199. &IF DEFINED(EXCLUDE-actionImage) = 0 &THEN
  5200. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionImage Procedure
  5201. FUNCTION actionImage RETURNS CHARACTER
  5202. (pcAction AS CHAR) :
  5203. /*------------------------------------------------------------------------------
  5204. Purpose:
  5205. Notes: PicClip images are defined in the Down Image and are used if
  5206. the offsets are defined in the image as a comma delimited list
  5207. containing image, x-offset, y-offset, width, height
  5208. ------------------------------------------------------------------------------*/
  5209. {&findaction}
  5210. RETURN IF AVAIL ttAction AND NUM-ENTRIES(ttAction.ImageDown) > 1
  5211. THEN ttAction.ImageDown
  5212. ELSE IF AVAIL ttAction THEN ttAction.Image
  5213. ELSE ?.
  5214. END FUNCTION.
  5215. /* _UIB-CODE-BLOCK-END */
  5216. &ANALYZE-RESUME
  5217. &ENDIF
  5218. &IF DEFINED(EXCLUDE-actionImageAlternate) = 0 &THEN
  5219. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionImageAlternate Procedure
  5220. FUNCTION actionImageAlternate RETURNS CHARACTER
  5221. (pcAction AS CHAR) :
  5222. /*------------------------------------------------------------------------------
  5223. Purpose:
  5224. Notes: PicClip images are defined in the Down Image and are used if
  5225. the offsets are defined in the image as a comma delimited list
  5226. containing image, x-offset, y-offset, width, height
  5227. ------------------------------------------------------------------------------*/
  5228. {&findaction}
  5229. RETURN IF AVAIL ttAction AND NUM-ENTRIES(ttAction.Image2Down) > 1
  5230. THEN ttAction.Image2Down
  5231. ELSE IF AVAIL ttAction THEN ttAction.Image2
  5232. ELSE ?.
  5233. END FUNCTION.
  5234. /* _UIB-CODE-BLOCK-END */
  5235. &ANALYZE-RESUME
  5236. &ENDIF
  5237. &IF DEFINED(EXCLUDE-actionImageAlternateRule) = 0 &THEN
  5238. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionImageAlternateRule Procedure
  5239. FUNCTION actionImageAlternateRule RETURNS CHARACTER
  5240. (pcAction AS CHAR) :
  5241. /*------------------------------------------------------------------------------
  5242. Purpose: Return the ImageAlternateRule for a given action as stored in the
  5243. repository
  5244. Parameters: pcAction - Action name
  5245. Notes: The rules are evaluated in ruleStateChanges, which for performance
  5246. reasons normally does not call the method, but instead uses the
  5247. value as stored in the temp-table.
  5248. This means that overriding this in a custom super procedure will
  5249. have no effect.
  5250. It may, however, be overridden in an instance since ruleStateChanges
  5251. does a specific check of internal-entries and uses the function in
  5252. that case.
  5253. IMPORTANT: This function is duplicated in the Panel super proc panel.p
  5254. ------------------------------------------------------------------------------*/
  5255. {&findaction}
  5256. RETURN IF AVAIL ttAction THEN ttAction.ImageAlternateRule ELSE ?.
  5257. END FUNCTION.
  5258. /* _UIB-CODE-BLOCK-END */
  5259. &ANALYZE-RESUME
  5260. &ENDIF
  5261. &IF DEFINED(EXCLUDE-actionInitCode) = 0 &THEN
  5262. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionInitCode Procedure
  5263. FUNCTION actionInitCode RETURNS CHARACTER
  5264. (pcAction AS CHAR) :
  5265. /*------------------------------------------------------------------------------
  5266. Purpose:
  5267. Notes:
  5268. ------------------------------------------------------------------------------*/
  5269. {&findaction}
  5270. RETURN IF AVAIL ttAction THEN ttAction.InitCode ELSE ?.
  5271. END FUNCTION.
  5272. /* _UIB-CODE-BLOCK-END */
  5273. &ANALYZE-RESUME
  5274. &ENDIF
  5275. &IF DEFINED(EXCLUDE-actionIsMenu) = 0 &THEN
  5276. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionIsMenu Procedure
  5277. FUNCTION actionIsMenu RETURNS LOGICAL
  5278. (pcAction AS CHAR) :
  5279. /*------------------------------------------------------------------------------
  5280. Purpose: Returns true if an action is Menu.
  5281. Action defined as menu is considered to be a constant part of
  5282. the toolbar and are not selectable.
  5283. This means that it's always available (It needs to be added to a
  5284. toolbar with createToolbar or insertMenu().
  5285. It will NOI appear as a selectable action in the instance property
  5286. dialog even if it isParent
  5287. Notes:
  5288. ------------------------------------------------------------------------------*/
  5289. {&findaction}
  5290. RETURN AVAIL ttAction AND ttAction.Type = "MENU":U .
  5291. END FUNCTION.
  5292. /* _UIB-CODE-BLOCK-END */
  5293. &ANALYZE-RESUME
  5294. &ENDIF
  5295. &IF DEFINED(EXCLUDE-actionIsParent) = 0 &THEN
  5296. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionIsParent Procedure
  5297. FUNCTION actionIsParent RETURNS LOGICAL
  5298. (pcAction AS CHAR) :
  5299. /*------------------------------------------------------------------------------
  5300. Purpose:
  5301. Notes:
  5302. ------------------------------------------------------------------------------*/
  5303. {&findaction}
  5304. RETURN AVAIL ttAction
  5305. AND (ttAction.InitCode <> "":U
  5306. OR
  5307. ttAction.CreateEvent <> "":U
  5308. OR
  5309. CAN-FIND(FIRST ttAction WHERE ttAction.parent = pcAction)
  5310. ).
  5311. END FUNCTION.
  5312. /* _UIB-CODE-BLOCK-END */
  5313. &ANALYZE-RESUME
  5314. &ENDIF
  5315. &IF DEFINED(EXCLUDE-actionLabel) = 0 &THEN
  5316. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionLabel Procedure
  5317. FUNCTION actionLabel RETURNS CHARACTER
  5318. ( pcAction AS CHAR ) :
  5319. /*------------------------------------------------------------------------------
  5320. Purpose: Override action class and caption
  5321. Notes:
  5322. ------------------------------------------------------------------------------*/
  5323. DEFINE BUFFER btButton FOR tButton.
  5324. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  5325. {&findaction}
  5326. cLabel = IF AVAIL ttAction AND ttAction.Name <> '':U THEN ttAction.Name
  5327. ELSE IF AVAIL ttAction THEN ttAction.Action
  5328. ELSE ?.
  5329. /* If the label is substitutable we log it here before it is
  5330. substituted. This allows us to only call this for required cases in
  5331. resetTargetAction */
  5332. IF INDEX(cLabel,'&1':U) > 0 THEN
  5333. DO:
  5334. FIND btButton WHERE btButton.NAME = pcAction
  5335. AND btButton.hTARGET = TARGET-PROCEDURE NO-ERROR.
  5336. IF AVAIL btButton THEN
  5337. ASSIGN btButton.LabelSubst = TRUE.
  5338. cLabel = DYNAMIC-FUNCTION('substituteActionText':U IN TARGET-PROCEDURE,
  5339. pcAction,
  5340. cLabel).
  5341. END.
  5342. RETURN cLabel.
  5343. END FUNCTION.
  5344. /* _UIB-CODE-BLOCK-END */
  5345. &ANALYZE-RESUME
  5346. &ENDIF
  5347. &IF DEFINED(EXCLUDE-actionLink) = 0 &THEN
  5348. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionLink Procedure
  5349. FUNCTION actionLink RETURNS CHARACTER
  5350. (pcAction AS CHAR) :
  5351. /*------------------------------------------------------------------------------
  5352. Purpose:
  5353. Notes:
  5354. ------------------------------------------------------------------------------*/
  5355. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  5356. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  5357. DEFINE VARIABLE cParent AS CHARACTER NO-UNDO.
  5358. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  5359. {&findaction}
  5360. cLink = IF AVAIL ttAction THEN ttAction.Link ELSE ?.
  5361. IF cLink = '':U THEN
  5362. DO:
  5363. {get UseRepository lUseRepository}.
  5364. IF lUseRepository THEN
  5365. DO:
  5366. cCategory = ttAction.Category.
  5367. IF cCategory <> '':U THEN
  5368. cLink = {fnarg categoryLink cCategory}.
  5369. END.
  5370. ELSE DO:
  5371. cParent = {fnarg actionParent pcAction}.
  5372. IF cParent <> '':u THEN
  5373. cLink = {fnarg actionLink cParent}.
  5374. END.
  5375. END.
  5376. RETURN cLink.
  5377. END FUNCTION.
  5378. /* _UIB-CODE-BLOCK-END */
  5379. &ANALYZE-RESUME
  5380. &ENDIF
  5381. &IF DEFINED(EXCLUDE-actionLogicalObjectName) = 0 &THEN
  5382. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionLogicalObjectName Procedure
  5383. FUNCTION actionLogicalObjectName RETURNS CHARACTER
  5384. (pcAction AS CHAR) :
  5385. /*------------------------------------------------------------------------------
  5386. Purpose:
  5387. Notes:
  5388. ------------------------------------------------------------------------------*/
  5389. {&findaction}
  5390. RETURN IF AVAIL ttAction THEN ttAction.LogicalObjectName ELSE ?.
  5391. END FUNCTION.
  5392. /* _UIB-CODE-BLOCK-END */
  5393. &ANALYZE-RESUME
  5394. &ENDIF
  5395. &IF DEFINED(EXCLUDE-actionName) = 0 &THEN
  5396. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionName Procedure
  5397. FUNCTION actionName RETURNS CHARACTER
  5398. (pcAction AS CHAR) :
  5399. /*------------------------------------------------------------------------------
  5400. Purpose:
  5401. Notes:
  5402. ------------------------------------------------------------------------------*/
  5403. {&findaction}
  5404. RETURN IF AVAIL ttAction AND ttAction.Name <> '':U THEN ttAction.Name
  5405. ELSE IF AVAIL ttAction THEN ttAction.Action
  5406. ELSE ?.
  5407. END FUNCTION.
  5408. /* _UIB-CODE-BLOCK-END */
  5409. &ANALYZE-RESUME
  5410. &ENDIF
  5411. &IF DEFINED(EXCLUDE-actionOnChoose) = 0 &THEN
  5412. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionOnChoose Procedure
  5413. FUNCTION actionOnChoose RETURNS CHARACTER
  5414. (pcAction AS CHAR) :
  5415. /*------------------------------------------------------------------------------
  5416. Purpose:
  5417. Notes:
  5418. ------------------------------------------------------------------------------*/
  5419. {&findaction}
  5420. RETURN IF AVAIL ttAction THEN ttAction.OnChoose ELSE ?.
  5421. END FUNCTION.
  5422. /* _UIB-CODE-BLOCK-END */
  5423. &ANALYZE-RESUME
  5424. &ENDIF
  5425. &IF DEFINED(EXCLUDE-actionParameter) = 0 &THEN
  5426. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionParameter Procedure
  5427. FUNCTION actionParameter RETURNS CHARACTER
  5428. (pcAction AS CHAR) :
  5429. /*------------------------------------------------------------------------------
  5430. Purpose:
  5431. Notes:
  5432. ------------------------------------------------------------------------------*/
  5433. {&findaction}
  5434. RETURN IF AVAIL ttAction THEN ttAction.RunParameter ELSE ?.
  5435. END FUNCTION.
  5436. /* _UIB-CODE-BLOCK-END */
  5437. &ANALYZE-RESUME
  5438. &ENDIF
  5439. &IF DEFINED(EXCLUDE-actionParent) = 0 &THEN
  5440. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionParent Procedure
  5441. FUNCTION actionParent RETURNS CHARACTER
  5442. (pcAction AS CHAR) :
  5443. /*------------------------------------------------------------------------------
  5444. Purpose: Parent can be another action or an actionCategory
  5445. Notes:
  5446. ------------------------------------------------------------------------------*/
  5447. {&findaction}
  5448. RETURN IF AVAIL ttAction THEN ttAction.Parent ELSE ?.
  5449. END FUNCTION.
  5450. /* _UIB-CODE-BLOCK-END */
  5451. &ANALYZE-RESUME
  5452. &ENDIF
  5453. &IF DEFINED(EXCLUDE-actionPhysicalObjectName) = 0 &THEN
  5454. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionPhysicalObjectName Procedure
  5455. FUNCTION actionPhysicalObjectName RETURNS CHARACTER
  5456. (pcAction AS CHAR) :
  5457. /*------------------------------------------------------------------------------
  5458. Purpose:
  5459. Notes:
  5460. ------------------------------------------------------------------------------*/
  5461. {&findaction}
  5462. RETURN IF AVAIL ttAction THEN ttAction.PhysicalObjectName ELSE ?.
  5463. END FUNCTION.
  5464. /* _UIB-CODE-BLOCK-END */
  5465. &ANALYZE-RESUME
  5466. &ENDIF
  5467. &IF DEFINED(EXCLUDE-actionPublishCreate) = 0 &THEN
  5468. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionPublishCreate Procedure
  5469. FUNCTION actionPublishCreate RETURNS LOGICAL
  5470. ( pcAction AS CHAR) :
  5471. /*------------------------------------------------------------------------------
  5472. Purpose: Subscribe create events to objects
  5473. Notes: Subscribes both active and inactive (hidden) objects
  5474. -target links are considered as multiple.
  5475. -source as single.
  5476. The reason why subscribe and publish is used is mostly to be able
  5477. to reference source-procedure in the events, but it also makes it
  5478. possible to just subscribe without linking.
  5479. ------------------------------------------------------------------------------*/
  5480. DEFINE VARIABLE cLink AS CHAR NO-UNDO.
  5481. DEFINE VARIABLE cEvent AS CHAR NO-UNDO.
  5482. DEFINE VARIABLE cLinkHandles AS CHAR NO-UNDO.
  5483. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  5484. DEFINE VARIABLE i AS INT NO-UNDO.
  5485. cEvent = {fnarg actionCreateEvent pcAction}.
  5486. IF cEvent = "":U THEN
  5487. RETURN FALSE.
  5488. cLink = {fnarg actionLink pcAction}.
  5489. IF cLink <> "":U THEN
  5490. DO:
  5491. IF ENTRY(2,cLink,"-":U) = "target":U THEN
  5492. cLinkHandles = DYNAMIC-FUNCTION("get":U + REPLACE(cLink,"-":U,"":U)
  5493. IN TARGET-PROCEDURE).
  5494. ELSE
  5495. hObject = DYNAMIC-FUNCTION("get":U + REPLACE(cLink,"-":U,"":U)
  5496. IN TARGET-PROCEDURE).
  5497. END. /* clink <> '' */
  5498. ELSE /* container is default */
  5499. {get ContainerSource hObject}.
  5500. DO i = 1 TO IF cLinkHandles <> "":U THEN NUM-ENTRIES(clinkHandles)
  5501. ELSE 1:
  5502. IF cLinkHandles <> "":U THEN
  5503. hObject = WIDGET-HANDLE(ENTRY(i,cLinkHandles)).
  5504. SUBSCRIBE PROCEDURE hObject TO cEvent IN TARGET-PROCEDURE NO-ERROR.
  5505. END.
  5506. PUBLISH cEvent FROM TARGET-PROCEDURE (pcAction).
  5507. RETURN TRUE.
  5508. END FUNCTION.
  5509. /* _UIB-CODE-BLOCK-END */
  5510. &ANALYZE-RESUME
  5511. &ENDIF
  5512. &IF DEFINED(EXCLUDE-actionRefresh) = 0 &THEN
  5513. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionRefresh Procedure
  5514. FUNCTION actionRefresh RETURNS LOGICAL
  5515. (pcAction AS CHAR) :
  5516. /*------------------------------------------------------------------------------
  5517. Purpose:
  5518. Notes:
  5519. ------------------------------------------------------------------------------*/
  5520. {&findaction}
  5521. RETURN IF AVAIL ttAction THEN ttAction.Refresh ELSE ?.
  5522. END FUNCTION.
  5523. /* _UIB-CODE-BLOCK-END */
  5524. &ANALYZE-RESUME
  5525. &ENDIF
  5526. &IF DEFINED(EXCLUDE-actionRunAttribute) = 0 &THEN
  5527. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionRunAttribute Procedure
  5528. FUNCTION actionRunAttribute RETURNS CHARACTER
  5529. (pcAction AS CHAR) :
  5530. /*------------------------------------------------------------------------------
  5531. Purpose:
  5532. Notes:
  5533. ------------------------------------------------------------------------------*/
  5534. {&findaction}
  5535. RETURN IF AVAIL ttAction THEN ttAction.RunAttribute ELSE ?.
  5536. END FUNCTION.
  5537. /* _UIB-CODE-BLOCK-END */
  5538. &ANALYZE-RESUME
  5539. &ENDIF
  5540. &IF DEFINED(EXCLUDE-actions) = 0 &THEN
  5541. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actions Procedure
  5542. FUNCTION actions RETURNS CHARACTER
  5543. (INPUT pcActionType AS CHARACTER):
  5544. /*------------------------------------------------------------------------------
  5545. Purpose:Returns the actions for the selected action type.
  5546. Notes: pcActionType values could be 'Menu', 'Toolbar', 'all' or blank.
  5547. 'Menu' will return only menu action, and 'Toolbar' will return
  5548. only toolbar actions. 'All' or blank will return all action types.
  5549. ------------------------------------------------------------------------------*/
  5550. DEFINE BUFFER btMenu FOR tMenu.
  5551. DEFINE BUFFER btButton FOR tButton.
  5552. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  5553. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  5554. DEFINE VARIABLE cControlType AS CHARACTER NO-UNDO.
  5555. IF pcActionType = "":U THEN
  5556. ASSIGN pcActionType = "all":U.
  5557. IF pcActionType = 'Toolbar':U OR pcActionType = 'all':U THEN
  5558. FOR EACH btButton WHERE btButton.hTarget = TARGET-PROCEDURE:
  5559. IF VALID-HANDLE(btButton.hdl) THEN
  5560. DO:
  5561. cControlType = {fnarg actionControlType btButton.Name}.
  5562. IF cControlType = 'Action':U THEN
  5563. cActions = cActions + btButton.Name + ",":U.
  5564. END.
  5565. END.
  5566. IF pcActionType = 'Menu':U OR pcActionType = 'all':U THEN
  5567. FOR EACH btMenu WHERE btMenu.hTarget = TARGET-PROCEDURE:
  5568. IF NOT CAN-DO(cActions,btMenu.Name) AND VALID-HANDLE(btMenu.hdl) THEN
  5569. DO:
  5570. cControlType = {fnarg actionControlType btMenu.Name}.
  5571. IF cControlType = 'Action':U THEN
  5572. cActions = cActions + btMenu.Name + ",":U.
  5573. END.
  5574. END.
  5575. ASSIGN cActions = TRIM(cActions, ",":U).
  5576. RETURN cActions.
  5577. END FUNCTION.
  5578. /* _UIB-CODE-BLOCK-END */
  5579. &ANALYZE-RESUME
  5580. &ENDIF
  5581. &IF DEFINED(EXCLUDE-actionSecondImage) = 0 &THEN
  5582. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionSecondImage Procedure
  5583. FUNCTION actionSecondImage RETURNS CHARACTER
  5584. (pcAction AS CHAR) :
  5585. /*------------------------------------------------------------------------------
  5586. Purpose:
  5587. Notes:
  5588. ------------------------------------------------------------------------------*/
  5589. {&findaction}
  5590. RETURN IF AVAIL ttAction THEN ttAction.Image2 ELSE ?.
  5591. END FUNCTION.
  5592. /* _UIB-CODE-BLOCK-END */
  5593. &ANALYZE-RESUME
  5594. &ENDIF
  5595. &IF DEFINED(EXCLUDE-actionSecuredToken) = 0 &THEN
  5596. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionSecuredToken Procedure
  5597. FUNCTION actionSecuredToken RETURNS CHARACTER
  5598. (pcAction AS CHAR) :
  5599. /*------------------------------------------------------------------------------
  5600. Purpose:
  5601. Notes:
  5602. ------------------------------------------------------------------------------*/
  5603. {&findaction}
  5604. RETURN IF AVAIL ttAction THEN ttAction.SecurityToken ELSE ?.
  5605. END FUNCTION.
  5606. /* _UIB-CODE-BLOCK-END */
  5607. &ANALYZE-RESUME
  5608. &ENDIF
  5609. &IF DEFINED(EXCLUDE-actionSubstituteProperty) = 0 &THEN
  5610. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionSubstituteProperty Procedure
  5611. FUNCTION actionSubstituteProperty RETURNS CHARACTER
  5612. (pcAction AS CHAR) :
  5613. /*------------------------------------------------------------------------------
  5614. Purpose:
  5615. Notes:
  5616. ------------------------------------------------------------------------------*/
  5617. {&findaction}
  5618. RETURN IF AVAIL ttAction THEN ttAction.SubstituteProperty ELSE ?.
  5619. END FUNCTION.
  5620. /* _UIB-CODE-BLOCK-END */
  5621. &ANALYZE-RESUME
  5622. &ENDIF
  5623. &IF DEFINED(EXCLUDE-actionTarget) = 0 &THEN
  5624. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionTarget Procedure
  5625. FUNCTION actionTarget RETURNS HANDLE
  5626. (pcAction AS CHAR) :
  5627. /*------------------------------------------------------------------------------
  5628. Purpose: Returns the handle of the target.
  5629. Used by actions of Type RUN or PROPERTY.
  5630. Parameter: pcAction - Action id
  5631. Notes: The container-Source is the default target.
  5632. ------------------------------------------------------------------------------*/
  5633. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  5634. DEFINE VARIABLE cParent AS CHARACTER NO-UNDO.
  5635. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  5636. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  5637. cLink = {fnarg actionLink pcAction}.
  5638. IF cLink <> "":U THEN
  5639. DO:
  5640. IF ENTRY(2,cLink,"-":U) = "target":U THEN
  5641. ASSIGN
  5642. cLink = ENTRY(1,cLink,"-":U)
  5643. hObject = {fnarg activeTarget cLink}.
  5644. ELSE
  5645. hObject = DYNAMIC-FUNCTION("get":U + REPLACE(cLink,"-":U,"":U) IN TARGET-PROCEDURE) NO-ERROR.
  5646. END. /* if link <> "" */
  5647. ELSE
  5648. {get ContainerSource hObject} NO-ERROR.
  5649. RETURN hObject.
  5650. END FUNCTION.
  5651. /* _UIB-CODE-BLOCK-END */
  5652. &ANALYZE-RESUME
  5653. &ENDIF
  5654. &IF DEFINED(EXCLUDE-actionTooltip) = 0 &THEN
  5655. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionTooltip Procedure
  5656. FUNCTION actionTooltip RETURNS CHARACTER
  5657. ( pcAction AS CHAR ) :
  5658. /*------------------------------------------------------------------------------
  5659. Purpose: Override action class and caption
  5660. Notes:
  5661. ------------------------------------------------------------------------------*/
  5662. DEFINE BUFFER btButton FOR tButton.
  5663. DEFINE VARIABLE cTooltip AS CHARACTER NO-UNDO.
  5664. {&findaction}
  5665. cTooltip = IF AVAIL ttAction AND ttAction.Tooltip <> "":U THEN ttAction.Tooltip
  5666. ELSE IF AVAIL ttAction AND ttAction.Caption <> "":U THEN ttAction.Caption
  5667. ELSE IF AVAIL ttAction AND ttAction.NAME <> "":U THEN ttAction.Name
  5668. ELSE IF AVAIL ttAction THEN ttAction.Action
  5669. ELSE ?.
  5670. /* If the tooltip is substitutable we log it here before it is
  5671. substituted. This allows us to only call this for required cases in
  5672. resetTargetAction */
  5673. IF INDEX(cTooltip,'&1':U) > 0 THEN
  5674. DO:
  5675. FIND btButton WHERE btButton.NAME = pcAction
  5676. AND btButton.hTARGET = TARGET-PROCEDURE NO-ERROR.
  5677. IF AVAIL btButton THEN
  5678. ASSIGN btButton.TooltipSubst = TRUE.
  5679. cTooltip = DYNAMIC-FUNCTION('substituteActionText':U IN TARGET-PROCEDURE,
  5680. pcAction,
  5681. cTooltip).
  5682. END.
  5683. RETURN cTooltip.
  5684. END FUNCTION.
  5685. /* _UIB-CODE-BLOCK-END */
  5686. &ANALYZE-RESUME
  5687. &ENDIF
  5688. &IF DEFINED(EXCLUDE-actionType) = 0 &THEN
  5689. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION actionType Procedure
  5690. FUNCTION actionType RETURNS CHARACTER
  5691. (pcAction AS CHAR) :
  5692. /*------------------------------------------------------------------------------
  5693. Purpose:
  5694. Notes:
  5695. ------------------------------------------------------------------------------*/
  5696. {&findaction}
  5697. RETURN IF AVAIL ttAction THEN ttAction.Type ELSE ?.
  5698. END FUNCTION.
  5699. /* _UIB-CODE-BLOCK-END */
  5700. &ANALYZE-RESUME
  5701. &ENDIF
  5702. &IF DEFINED(EXCLUDE-activeTarget) = 0 &THEN
  5703. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION activeTarget Procedure
  5704. FUNCTION activeTarget RETURNS HANDLE
  5705. ( pcLink AS CHAR ) :
  5706. /*------------------------------------------------------------------------------
  5707. Purpose: Return the active target linked object.
  5708. pcLink: pcLink - "Tableio", "Navigation" "Commit"
  5709. Notes: The toolbar only supports one active object in these, but it may
  5710. be linked to inactive objects on hidden pages.
  5711. If more than one target this procedure returns the object where
  5712. IsLinkInActive = false or a GaTarget is not hidden.
  5713. ------------------------------------------------------------------------------*/
  5714. DEFINE VARIABLE cLinkHandles AS CHAR NO-UNDO.
  5715. DEFINE VARIABLE iLink AS INT NO-UNDO.
  5716. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  5717. cLinkHandles = DYNAMIC-FUNCTION("get":U + pcLink + "Target":U IN TARGET-PROCEDURE) NO-ERROR.
  5718. /* This addition is to incorporate user-defined links. If the function does not exist, cLinkHandles will be ? */
  5719. IF ERROR-STATUS:ERROR OR
  5720. cLinkHandles = ? THEN
  5721. cLinkHandles = DYNAMIC-FUNCTION("linkHandles":U IN TARGET-PROCEDURE, pcLink + "-Target":U) NO-ERROR.
  5722. DO iLink = 1 TO NUM-ENTRIES(cLinkHandles):
  5723. hObject = WIDGET-HANDLE(ENTRY(iLink,cLinkHandles)).
  5724. IF VALID-HANDLE(hObject) THEN
  5725. DO:
  5726. IF NOT DYNAMIC-FUNCTION('isLinkInactive':U IN hObject,
  5727. pcLink + "Source":U,
  5728. TARGET-PROCEDURE) THEN
  5729. RETURN hObject.
  5730. END. /* valid(hObject) */
  5731. END.
  5732. RETURN ?.
  5733. END FUNCTION.
  5734. /* _UIB-CODE-BLOCK-END */
  5735. &ANALYZE-RESUME
  5736. &ENDIF
  5737. &IF DEFINED(EXCLUDE-adjustActions) = 0 &THEN
  5738. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION adjustActions Procedure
  5739. FUNCTION adjustActions RETURNS LOGICAL
  5740. ( ) :
  5741. /*------------------------------------------------------------------------------
  5742. Purpose: Called after realization of toolbar to adjust sizes
  5743. Notes: Returns true if changes happened
  5744. Currently changes width of all actions in a horizontal toolbar
  5745. to maxwidth encountered during realization
  5746. ------------------------------------------------------------------------------*/
  5747. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  5748. DEFINE VARIABLE iToolMaxWidthPxl AS INTEGER NO-UNDO.
  5749. DEFINE VARIABLE iToolWidthPxl AS INTEGER NO-UNDO.
  5750. DEFINE BUFFER btButton FOR tButton.
  5751. {get ToolbarDrawDirection cToolbarDrawDirection}.
  5752. IF cToolbarDrawDirection BEGINS 'v':U THEN
  5753. DO:
  5754. &SCOPED-DEFINE xp-assign
  5755. {get ToolMaxWidthPxl iToolMaxWidthPxl}
  5756. {get ToolWidthPxl iToolWidthPxl}.
  5757. &UNDEFINE xp-assign
  5758. IF iToolMaxWidthPxl > iToolWidthPxl THEN
  5759. DO:
  5760. FOR EACH btButton WHERE btbutton.hTarget = TARGET-PROCEDURE:
  5761. IF VALID-HANDLE(btButton.hdl) THEN
  5762. btButton.hdl:WIDTH-P = iToolMaxWidthPxl.
  5763. END.
  5764. END.
  5765. END.
  5766. RETURN iToolMaxWidthPxl > iToolWidthPxl.
  5767. END FUNCTION.
  5768. /* _UIB-CODE-BLOCK-END */
  5769. &ANALYZE-RESUME
  5770. &ENDIF
  5771. &IF DEFINED(EXCLUDE-assignActionAccelerator) = 0 &THEN
  5772. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionAccelerator Procedure
  5773. FUNCTION assignActionAccelerator RETURNS LOGICAL
  5774. (pcId AS CHAR,
  5775. pcValue AS CHAR) :
  5776. /*------------------------------------------------------------------------------
  5777. Purpose:
  5778. Notes:
  5779. ------------------------------------------------------------------------------*/
  5780. RETURN dynamic-function("assignColumn":U in target-procedure,
  5781. "Action":U,pcId,"Accelerator":U,pcValue).
  5782. END FUNCTION.
  5783. /* _UIB-CODE-BLOCK-END */
  5784. &ANALYZE-RESUME
  5785. &ENDIF
  5786. &IF DEFINED(EXCLUDE-assignActionAccessType) = 0 &THEN
  5787. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionAccessType Procedure
  5788. FUNCTION assignActionAccessType RETURNS LOGICAL
  5789. (pcId AS CHAR,
  5790. pcValue AS CHAR) :
  5791. /*------------------------------------------------------------------------------
  5792. Purpose:
  5793. Notes:
  5794. ------------------------------------------------------------------------------*/
  5795. RETURN dynamic-function("assignColumn":U in target-procedure,
  5796. "Action":U,pcId,"AccessType":U,pcValue).
  5797. END FUNCTION.
  5798. /* _UIB-CODE-BLOCK-END */
  5799. &ANALYZE-RESUME
  5800. &ENDIF
  5801. &IF DEFINED(EXCLUDE-assignActionCaption) = 0 &THEN
  5802. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionCaption Procedure
  5803. FUNCTION assignActionCaption RETURNS LOGICAL
  5804. (pcId AS CHAR,
  5805. pcValue AS CHAR) :
  5806. /*------------------------------------------------------------------------------
  5807. Purpose:
  5808. Notes:
  5809. ------------------------------------------------------------------------------*/
  5810. RETURN dynamic-function("assignColumn":U in target-procedure,
  5811. "Action":U,pcId,"Caption":U,pcValue).
  5812. END FUNCTION.
  5813. /* _UIB-CODE-BLOCK-END */
  5814. &ANALYZE-RESUME
  5815. &ENDIF
  5816. &IF DEFINED(EXCLUDE-assignActionDescription) = 0 &THEN
  5817. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionDescription Procedure
  5818. FUNCTION assignActionDescription RETURNS LOGICAL
  5819. (pcId AS CHAR,
  5820. pcValue AS CHAR) :
  5821. /*------------------------------------------------------------------------------
  5822. Purpose:
  5823. Notes:
  5824. ------------------------------------------------------------------------------*/
  5825. RETURN dynamic-function("assignColumn":U in target-procedure,
  5826. "Action":U,pcId,"Description":U,pcValue).
  5827. END FUNCTION.
  5828. /* _UIB-CODE-BLOCK-END */
  5829. &ANALYZE-RESUME
  5830. &ENDIF
  5831. &IF DEFINED(EXCLUDE-assignActionEnableRule) = 0 &THEN
  5832. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionEnableRule Procedure
  5833. FUNCTION assignActionEnableRule RETURNS LOGICAL
  5834. (pcId AS CHAR,
  5835. pcValue AS CHAR) :
  5836. /*------------------------------------------------------------------------------
  5837. Purpose:
  5838. Notes:
  5839. ------------------------------------------------------------------------------*/
  5840. RETURN dynamic-function("assignColumn":U in target-procedure,
  5841. "Action":U,pcId,"EnableRule":U,pcValue).
  5842. END FUNCTION.
  5843. /* _UIB-CODE-BLOCK-END */
  5844. &ANALYZE-RESUME
  5845. &ENDIF
  5846. &IF DEFINED(EXCLUDE-assignActionHideRule) = 0 &THEN
  5847. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionHideRule Procedure
  5848. FUNCTION assignActionHideRule RETURNS LOGICAL
  5849. (pcId AS CHAR,
  5850. pcValue AS CHAR) :
  5851. /*------------------------------------------------------------------------------
  5852. Purpose:
  5853. Notes:
  5854. ------------------------------------------------------------------------------*/
  5855. RETURN dynamic-function("assignColumn":U in target-procedure,
  5856. "Action":U,pcId,"HideRule":U,pcValue).
  5857. END FUNCTION.
  5858. /* _UIB-CODE-BLOCK-END */
  5859. &ANALYZE-RESUME
  5860. &ENDIF
  5861. &IF DEFINED(EXCLUDE-assignActionImage) = 0 &THEN
  5862. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionImage Procedure
  5863. FUNCTION assignActionImage RETURNS LOGICAL
  5864. (pcId AS CHAR,
  5865. pcValue AS CHAR) :
  5866. /*------------------------------------------------------------------------------
  5867. Purpose:
  5868. Notes:
  5869. ------------------------------------------------------------------------------*/
  5870. RETURN dynamic-function("assignColumn":U in target-procedure,
  5871. "Action":U,pcId,"Image":U,pcValue).
  5872. END FUNCTION.
  5873. /* _UIB-CODE-BLOCK-END */
  5874. &ANALYZE-RESUME
  5875. &ENDIF
  5876. &IF DEFINED(EXCLUDE-assignActionImageAlternateRule) = 0 &THEN
  5877. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionImageAlternateRule Procedure
  5878. FUNCTION assignActionImageAlternateRule RETURNS LOGICAL
  5879. (pcId AS CHAR,
  5880. pcValue AS CHAR) :
  5881. /*------------------------------------------------------------------------------
  5882. Purpose:
  5883. Notes:
  5884. ------------------------------------------------------------------------------*/
  5885. RETURN dynamic-function("assignColumn":U in target-procedure,
  5886. "Action":U,pcId,"ImageAlternateRule":U,pcValue).
  5887. END FUNCTION.
  5888. /* _UIB-CODE-BLOCK-END */
  5889. &ANALYZE-RESUME
  5890. &ENDIF
  5891. &IF DEFINED(EXCLUDE-assignActionLabel) = 0 &THEN
  5892. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionLabel Procedure
  5893. FUNCTION assignActionLabel RETURNS LOGICAL
  5894. (pcId AS CHAR,
  5895. pcValue AS CHAR) :
  5896. /*------------------------------------------------------------------------------
  5897. Purpose:
  5898. Notes: actionLabel is an alias for actionName
  5899. ------------------------------------------------------------------------------*/
  5900. RETURN DYNAMIC-FUNCTION ('assignActionName':U IN TARGET-PROCEDURE,
  5901. pcId,
  5902. pcValue).
  5903. END FUNCTION.
  5904. /* _UIB-CODE-BLOCK-END */
  5905. &ANALYZE-RESUME
  5906. &ENDIF
  5907. &IF DEFINED(EXCLUDE-assignActionName) = 0 &THEN
  5908. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionName Procedure
  5909. FUNCTION assignActionName RETURNS LOGICAL
  5910. (pcId AS CHAR,
  5911. pcValue AS CHAR) :
  5912. /*------------------------------------------------------------------------------
  5913. Purpose:
  5914. Notes:
  5915. ------------------------------------------------------------------------------*/
  5916. RETURN dynamic-function("assignColumn":U in target-procedure,
  5917. "Action":U,pcId,"Name":U,pcValue).
  5918. END FUNCTION.
  5919. /* _UIB-CODE-BLOCK-END */
  5920. &ANALYZE-RESUME
  5921. &ENDIF
  5922. &IF DEFINED(EXCLUDE-assignActionOrder) = 0 &THEN
  5923. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionOrder Procedure
  5924. FUNCTION assignActionOrder RETURNS LOGICAL
  5925. (pcId AS CHAR,
  5926. piValue AS INT) :
  5927. /*------------------------------------------------------------------------------
  5928. Purpose:
  5929. Notes:
  5930. ------------------------------------------------------------------------------*/
  5931. RETURN dynamic-function("assignColumn":U in target-procedure,
  5932. "Action":U,pcId,"Order":U,STRING(piValue)).
  5933. END FUNCTION.
  5934. /* _UIB-CODE-BLOCK-END */
  5935. &ANALYZE-RESUME
  5936. &ENDIF
  5937. &IF DEFINED(EXCLUDE-assignActionParent) = 0 &THEN
  5938. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionParent Procedure
  5939. FUNCTION assignActionParent RETURNS LOGICAL
  5940. (pcId AS CHAR,
  5941. pcValue AS CHAR) :
  5942. /*------------------------------------------------------------------------------
  5943. Purpose:
  5944. Notes:
  5945. ------------------------------------------------------------------------------*/
  5946. RETURN dynamic-function("assignColumn":U in target-procedure,
  5947. "Action":U,pcId,"Parent":U,pcValue).
  5948. END FUNCTION.
  5949. /* _UIB-CODE-BLOCK-END */
  5950. &ANALYZE-RESUME
  5951. &ENDIF
  5952. &IF DEFINED(EXCLUDE-assignActionRefresh) = 0 &THEN
  5953. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionRefresh Procedure
  5954. FUNCTION assignActionRefresh RETURNS LOGICAL
  5955. (pcId AS CHAR,
  5956. plValue AS LOGICAL) :
  5957. /*------------------------------------------------------------------------------
  5958. Purpose:
  5959. Notes:
  5960. ------------------------------------------------------------------------------*/
  5961. RETURN dynamic-function("assignColumn":U in target-procedure,
  5962. "Action":U,pcId,"Refresh":U,STRING(plValue)).
  5963. END FUNCTION.
  5964. /* _UIB-CODE-BLOCK-END */
  5965. &ANALYZE-RESUME
  5966. &ENDIF
  5967. &IF DEFINED(EXCLUDE-assignActionSecondImage) = 0 &THEN
  5968. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionSecondImage Procedure
  5969. FUNCTION assignActionSecondImage RETURNS LOGICAL
  5970. (pcId AS CHAR,
  5971. pcValue AS CHAR) :
  5972. /*------------------------------------------------------------------------------
  5973. Purpose:
  5974. Notes:
  5975. ------------------------------------------------------------------------------*/
  5976. RETURN dynamic-function("assignColumn":U in target-procedure,
  5977. "Action":U,pcId,"Image2":U,pcValue).
  5978. END FUNCTION.
  5979. /* _UIB-CODE-BLOCK-END */
  5980. &ANALYZE-RESUME
  5981. &ENDIF
  5982. &IF DEFINED(EXCLUDE-assignActionTooltip) = 0 &THEN
  5983. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignActionTooltip Procedure
  5984. FUNCTION assignActionTooltip RETURNS LOGICAL
  5985. (pcId AS CHAR,
  5986. pcValue AS CHAR) :
  5987. /*------------------------------------------------------------------------------
  5988. Purpose:
  5989. Notes:
  5990. ------------------------------------------------------------------------------*/
  5991. RETURN dynamic-function("assignColumn":U in target-procedure,
  5992. "Action":U,pcId,"Tooltip":U,pcValue).
  5993. END FUNCTION.
  5994. /* _UIB-CODE-BLOCK-END */
  5995. &ANALYZE-RESUME
  5996. &ENDIF
  5997. &IF DEFINED(EXCLUDE-assignColumn) = 0 &THEN
  5998. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION assignColumn Procedure
  5999. FUNCTION assignColumn RETURNS LOGICAL PRIVATE
  6000. (pcObject AS CHAR,
  6001. pcId AS CHAR,
  6002. pcColumn AS CHAR,
  6003. pcValue AS CHAR) :
  6004. /*------------------------------------------------------------------------------
  6005. Purpose:
  6006. Notes:
  6007. ------------------------------------------------------------------------------*/
  6008. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  6009. DEFINE VARIABLE hColumn AS HANDLE NO-UNDO.
  6010. define variable cMessage as character no-undo.
  6011. IF DYNAMIC-FUNCTION("find":U + pcObject, pcId,?) THEN
  6012. DO:
  6013. ASSIGN
  6014. hBuffer = bufferHandle(pcObject)
  6015. hColumn = hBuffer:BUFFER-FIELD(pcColumn)
  6016. hColumn:BUFFER-VALUE = pcValue.
  6017. RETURN TRUE.
  6018. END.
  6019. ELSE do: /* error (design time...) */
  6020. cMessage = (SUBSTITUTE({fnarg messageNumber 40},
  6021. 'assign' + pcObject + pcColumn + "()":U,
  6022. pcId)).
  6023. {fnarg errorMessage cMessage}.
  6024. end.
  6025. RETURN FALSE.
  6026. END FUNCTION.
  6027. /* _UIB-CODE-BLOCK-END */
  6028. &ANALYZE-RESUME
  6029. &ENDIF
  6030. &IF DEFINED(EXCLUDE-bandActions) = 0 &THEN
  6031. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION bandActions Procedure
  6032. FUNCTION bandActions RETURNS CHARACTER
  6033. ( pcParentBand AS CHAR ) :
  6034. /*------------------------------------------------------------------------------
  6035. Purpose: Returns available actions for a specific band
  6036. Notes: Used in the Instance Property dialog to select MenuBands
  6037. ------------------------------------------------------------------------------*/
  6038. DEFINE BUFFER bttBand FOR ttBand.
  6039. DEFINE BUFFER bttBandAction FOR ttBandAction.
  6040. DEFINE VARIABLE cActionList AS CHARACTER NO-UNDO.
  6041. FOR EACH bttBandAction
  6042. WHERE bttBandAction.Band = pcParentBand
  6043. BY bttBandAction.Sequence:
  6044. IF bttBandAction.ChildBand = '':U THEN
  6045. DO:
  6046. IF NOT CAN-DO('Separator,Placeholder':U,bttBandAction.Action) THEN
  6047. DO:
  6048. cActionList = cActionList
  6049. + (IF cActionList <> '':U THEN ',':U ELSE '':U)
  6050. + bttBandAction.Action.
  6051. END.
  6052. END.
  6053. END.
  6054. RETURN cActionList.
  6055. END FUNCTION.
  6056. /* _UIB-CODE-BLOCK-END */
  6057. &ANALYZE-RESUME
  6058. &ENDIF
  6059. &IF DEFINED(EXCLUDE-bandSubmenuLabel) = 0 &THEN
  6060. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION bandSubmenuLabel Procedure
  6061. FUNCTION bandSubmenuLabel RETURNS CHARACTER
  6062. ( pcBand AS CHARACTER,
  6063. pcChildBand AS CHARACTER) :
  6064. /*------------------------------------------------------------------------------
  6065. Purpose: Return the label for a specific childband
  6066. Notes: Currently used for instance property dialog
  6067. ------------------------------------------------------------------------------*/
  6068. DEFINE BUFFER bttChildBand FOR ttBand.
  6069. DEFINE BUFFER bttBandAction FOR ttBandAction.
  6070. DEFINE BUFFER bttToolbarBand FOR ttToolbarBand.
  6071. DEFINE BUFFER bttBand FOR ttBand.
  6072. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  6073. IF pcBand = '':U THEN
  6074. DO:
  6075. {get LogicalObjectName cLogicalObject}.
  6076. FOR EACH bttToolbarBand
  6077. WHERE bttToolbarBand.Toolbar = cLogicalObject,
  6078. EACH bttBand
  6079. WHERE bttBand.Band = bttToolbarBand.Band
  6080. AND bttBand.BandType = 'Menubar':U :
  6081. pcBand = bttBand.Band.
  6082. LEAVE. /* there should be only one, but let's leave and use the first
  6083. no matter what */
  6084. END.
  6085. END.
  6086. FIND bttBandAction
  6087. WHERE bttBandAction.Band = pcBand
  6088. AND bttBandAction.ChildBand = pcChildBand NO-ERROR.
  6089. IF AVAIL bttBandAction THEN
  6090. DO:
  6091. IF bttBandAction.Action <> '':U THEN
  6092. RETURN {fnarg actionLabel bttBandAction.Action}.
  6093. /* Find the default label of the band */
  6094. FIND bttChildBand WHERE bttChildBand.Band = bttBandAction.ChildBand.
  6095. IF bttChildBand.BandLabelAction <> '':U THEN
  6096. RETURN {fnarg actionLabel bttChildBand.BandLabelAction}.
  6097. ELSE RETURN bttBandAction.ChildBand.
  6098. END.
  6099. /* If there's more than one child band (??) just return the band name */
  6100. ELSE IF AMBIGUOUS bttBandAction THEN
  6101. RETURN pcBand.
  6102. RETURN "":U. /* Function return value. */
  6103. END FUNCTION.
  6104. /* _UIB-CODE-BLOCK-END */
  6105. &ANALYZE-RESUME
  6106. &ENDIF
  6107. &IF DEFINED(EXCLUDE-bandSubmenus) = 0 &THEN
  6108. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION bandSubmenus Procedure
  6109. FUNCTION bandSubmenus RETURNS CHARACTER
  6110. ( pcParentBand AS CHAR) :
  6111. /*------------------------------------------------------------------------------
  6112. Purpose: Returns the available child bands on a specific band
  6113. Parameter: pcParentBand - Band name
  6114. - Blank - The menubar of the Toolbar master
  6115. plLabels - Return the action labels if defined
  6116. Notes: Used in the Instance Property dialog to select MenuBands
  6117. ------------------------------------------------------------------------------*/
  6118. DEFINE BUFFER bttBand FOR ttBand.
  6119. DEFINE BUFFER bttBandAction FOR ttBandAction.
  6120. DEFINE BUFFER bttToolbarBand FOR ttToolbarBand.
  6121. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  6122. DEFINE VARIABLE cBandList AS CHARACTER NO-UNDO.
  6123. /* if no parent specified find and use the menubar */
  6124. IF pcParentBand = '':U THEN
  6125. DO:
  6126. {get LogicalObjectName cLogicalObject}.
  6127. FOR EACH bttToolbarBand
  6128. WHERE bttToolbarBand.Toolbar = cLogicalObject,
  6129. EACH bttBand
  6130. WHERE bttBand.Band = bttToolbarBand.Band
  6131. AND bttBand.BandType = 'Menubar':U :
  6132. pcParentBand = bttBand.Band.
  6133. LEAVE. /* there should be only one, but let's leave and use the first
  6134. no matter what */
  6135. END.
  6136. END.
  6137. FOR EACH bttBandAction
  6138. WHERE bttBandAction.Band = pcParentBand
  6139. BY bttBandAction.Sequence:
  6140. IF bttBandAction.ChildBand <> '':U THEN
  6141. DO:
  6142. cBandList = cBandList
  6143. + (IF cBandList <> '':U THEN ',':U ELSE '':U)
  6144. + bttBandAction.ChildBand.
  6145. END.
  6146. END.
  6147. RETURN cBandList.
  6148. END FUNCTION.
  6149. /* _UIB-CODE-BLOCK-END */
  6150. &ANALYZE-RESUME
  6151. &ENDIF
  6152. &IF DEFINED(EXCLUDE-bufferHandle) = 0 &THEN
  6153. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION bufferHandle Procedure
  6154. FUNCTION bufferHandle RETURNS HANDLE
  6155. (pcObject AS CHAR) :
  6156. /*------------------------------------------------------------------------------
  6157. Purpose:
  6158. Notes:
  6159. ------------------------------------------------------------------------------*/
  6160. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  6161. CASE pcObject:
  6162. WHEN "Action":U THEN
  6163. hBuffer = BUFFER ttAction:HANDLE.
  6164. WHEN "Category":U THEN
  6165. hBuffer = BUFFER ttCategory:HANDLE.
  6166. END.
  6167. RETURN hBuffer.
  6168. END FUNCTION.
  6169. /* _UIB-CODE-BLOCK-END */
  6170. &ANALYZE-RESUME
  6171. &ENDIF
  6172. &IF DEFINED(EXCLUDE-buildMenu) = 0 &THEN
  6173. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION buildMenu Procedure
  6174. FUNCTION buildMenu RETURNS LOGICAL
  6175. (pcParent AS CHAR) :
  6176. /*------------------------------------------------------------------------------
  6177. Purpose: Build one branch of a menu.
  6178. Parameters: INPUT pcParent - The name of the sub-menu that this menu will use
  6179. as its parent
  6180. Blank - means that we are creating a menu-bar.
  6181. Notes: Called from onMenuDrop
  6182. ------------------------------------------------------------------------------*/
  6183. DEFINE BUFFER tChild FOR tMenu.
  6184. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  6185. DEFINE VARIABLE cType AS CHAR NO-UNDO.
  6186. DEFINE VARIABLE cBuildInitCode AS CHAR NO-UNDO.
  6187. DEFINE VARIABLE cMenuItems AS CHAR NO-UNDO.
  6188. DEFINE VARIABLE lRefresh AS LOG NO-UNDO.
  6189. DEFINE VARIABLE lMenu AS LOG NO-UNDO.
  6190. DEFINE VARIABLE lDefined AS LOG NO-UNDO.
  6191. DEFINE VARIABLE i AS INT NO-UNDO.
  6192. DEFINE VARIABLE lCanAddRule AS LOG NO-UNDO.
  6193. DEFINE VARIABLE hActionTarget AS HANDLE NO-UNDO.
  6194. DEFINE VARIABLE lChecked AS LOG NO-UNDO.
  6195. DEFINE VARIABLE cDisabledActions AS CHAR NO-UNDO.
  6196. &SCOPED-DEFINE xp-assign
  6197. {get Menu lMenu}
  6198. {get DisabledActions cDisabledActions}.
  6199. &UNDEFINE xp-assign
  6200. IF NOT lMenu THEN
  6201. RETURN FALSE.
  6202. If pcParent = "":U THEN
  6203. hMenu = {fn createMenuBar}.
  6204. ELSE
  6205. DO:
  6206. FIND tMenu WHERE tMenu.Name = pcParent
  6207. AND tMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  6208. IF NOT AVAIL tMenu THEN
  6209. RETURN FALSE.
  6210. hMenu = tMenu.Hdl.
  6211. END.
  6212. /* Initcode menues are always recreated */
  6213. cBuildInitCode = {fnarg ActionInitCode pcParent}.
  6214. IF cBuildInitCode <> "":U THEN
  6215. FOR EACH tMenu WHERE tMenu.Parent = pcParent
  6216. AND tMenu.hTarget = TARGET-PROCEDURE
  6217. AND tMenu.NAME BEGINS pcParent + ":":U:
  6218. IF VALID-HANDLE(tMenu.Hdl) THEN
  6219. DELETE WIDGET tMenu.Hdl.
  6220. DELETE tMenu.
  6221. END.
  6222. /* If refresh then delete all */
  6223. lRefresh = {fnarg ActionRefresh pcParent}.
  6224. IF lRefresh THEN
  6225. FOR EACH tMenu WHERE tMenu.Parent = pcParent
  6226. AND tMenu.hTarget = TARGET-PROCEDURE:
  6227. IF VALID-HANDLE(tMenu.Hdl) THEN
  6228. DELETE WIDGET tMenu.Hdl.
  6229. DELETE tMenu.
  6230. END.
  6231. IF VALID-HANDLE(hMenu) AND NOT VALID-HANDLE(hMenu:FIRST-CHILD) THEN
  6232. DO:
  6233. FOR EACH tMenu WHERE tMenu.Parent = pcParent
  6234. AND tMenu.hTarget = TARGET-PROCEDURE:
  6235. IF tMenu.Name <> "RULE":U OR lCanAddRule THEN
  6236. DO:
  6237. DYNAMIC-FUNCTION('createMenuAction':U IN TARGET-PROCEDURE,
  6238. pcParent,
  6239. tMenu.Name).
  6240. lCanAddRule = tMenu.Name <> "RULE":U.
  6241. END. /* if rule */
  6242. END. /* for each tMenu */
  6243. END. /* if not valid handle first tmenu */
  6244. /* initCode procedures can create a poor-mans menu
  6245. that just creates key and text based on the CHR(1) separated list
  6246. returned from the function. The key will be passed as input parameter
  6247. to the parents onChoose */
  6248. IF cBuildInitCode <> "":U THEN
  6249. DO:
  6250. ASSIGN
  6251. hActionTarget = {fnarg actionTarget pcParent}.
  6252. IF VALID-HANDLE(hActionTarget) THEN
  6253. cMenuItems = DYNAMIC-FUNCTION(cBuildInitCode IN hActionTarget).
  6254. DO i = 1 TO NUM-ENTRIES(cMenuItems,CHR(1)) BY 2:
  6255. DYNAMIC-FUNCTION('insertMenuTempTable':U IN TARGET-PROCEDURE,
  6256. pcParent,
  6257. /* add parent in order to make it identifiable */
  6258. pcParent + ":" + ENTRY(i,cMenuItems,CHR(1)),
  6259. ?).
  6260. tMenu.Sensitive = TRUE.
  6261. tMenu.Hdl = DYNAMIC-FUNCTION("createMenuItem":U IN TARGET-PROCEDURE,
  6262. hMenu,
  6263. tMenu.Name,
  6264. ENTRY(i + 1,cMenuItems,CHR(1)),
  6265. "":U,
  6266. tMenu.Sensitive
  6267. ).
  6268. END. /* do i = 1 to num-entries(cMenuItems,CHR(1)) */
  6269. END. /* cInitCode <> "":U */
  6270. FIND LAST tMenu WHERE tMenu.Parent = pcParent
  6271. AND tMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  6272. /* make sure that we don't have a RULE as the last entry */
  6273. IF AVAIL tMenu AND tMenu.Name = "RULE":U AND VALID-HANDLE(tMenu.Hdl) THEN
  6274. DELETE WIDGET tMenu.Hdl.
  6275. RETURN TRUE. /* Function return value. */
  6276. END FUNCTION.
  6277. /* _UIB-CODE-BLOCK-END */
  6278. &ANALYZE-RESUME
  6279. &ENDIF
  6280. &IF DEFINED(EXCLUDE-buildMenuBand) = 0 &THEN
  6281. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION buildMenuBand Procedure
  6282. FUNCTION buildMenuBand RETURNS LOGICAL
  6283. ( phParent AS HANDLE,
  6284. pcMenuKey AS CHAR) :
  6285. /*------------------------------------------------------------------------------
  6286. Purpose: Build a submenu for a band for the target or across the entire
  6287. menubar.
  6288. Parameters:
  6289. phParent - Parent handle to add menus to
  6290. - unknown - add menus to target's parent
  6291. Notes: Called from constructMenuband with unknown parent to add menus
  6292. to the recently created parent
  6293. Called from removeMenuBand to move menus to the menu that took
  6294. over the removed menu's position.
  6295. -----------------------------------------------------------------------------*/
  6296. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  6297. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  6298. DEFINE VARIABLE lCreateSub AS LOGICAL NO-UNDO.
  6299. DEFINE VARIABLE cTargetList AS CHARACTER NO-UNDO.
  6300. DEFINE VARIABLE lRule AS LOGICAL NO-UNDO.
  6301. DEFINE VARIABLE hUseParent AS HANDLE NO-UNDO.
  6302. DEFINE VARIABLE hCurrentTarget AS HANDLE NO-UNDO.
  6303. DEFINE VARIABLE lLinkAdded AS LOGICAL NO-UNDO.
  6304. DEFINE VARIABLE lSubAdded AS LOGICAL NO-UNDO.
  6305. DEFINE VARIABLE cSubList AS CHARACTER NO-UNDO.
  6306. DEFINE VARIABLE iSub AS INTEGER NO-UNDO.
  6307. DEFINE VARIABLE hToolbar AS HANDLE NO-UNDO.
  6308. DEFINE VARIABLE hSubMenu AS HANDLE NO-UNDO.
  6309. DEFINE VARIABLE hSubParent AS HANDLE NO-UNDO.
  6310. DEFINE VARIABLE lContainerLink AS LOGICAL NO-UNDO.
  6311. DEFINE VARIABLE lRebuild AS LOGICAL NO-UNDO.
  6312. DEFINE VARIABLE cParentMenuKey AS CHARACTER NO-UNDO.
  6313. DEFINE VARIABLE cParent AS CHARACTER NO-UNDO.
  6314. DEFINE VARIABLE cMenuKey AS CHARACTER NO-UNDO.
  6315. DEFINE VARIABLE lNoAccelerator AS LOGICAL NO-UNDO.
  6316. DEFINE VARIABLE hRuleDel AS HANDLE NO-UNDO.
  6317. DEFINE VARIABLE hRule AS HANDLE NO-UNDO.
  6318. DEFINE VARIABLE cCurrentLabel AS CHARACTER NO-UNDO.
  6319. DEFINE VARIABLE iLabel AS INTEGER NO-UNDO.
  6320. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  6321. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  6322. DEFINE VARIABLE cSubLabels AS CHARACTER NO-UNDO.
  6323. DEFINE VARIABLE cSubLabelHdls AS CHARACTER NO-UNDO.
  6324. DEFINE VARIABLE cSubHdls AS CHARACTER NO-UNDO.
  6325. DEFINE VARIABLE cLinkToolbarId AS CHARACTER NO-UNDO.
  6326. DEFINE VARIABLE hSubHdl AS HANDLE NO-UNDO.
  6327. DEFINE BUFFER btMenu FOR tMenu.
  6328. DEFINE BUFFER btBandMenu FOR tMenu.
  6329. DEFINE BUFFER btFirstBandMenu FOR tMenu.
  6330. DEFINE BUFFER btParentInstance FOR tBandInstance.
  6331. DEFINE BUFFER btInsertInstance FOR tBandInstance.
  6332. {get MenuBarHandle hMenuBar}.
  6333. IF NOT VALID-HANDLE(phParent) THEN
  6334. DO:
  6335. FIND btParentInstance WHERE btParentInstance.MenuKey = pcMenuKey
  6336. AND btParentInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  6337. IF NOT AVAIL btParentInstance THEN
  6338. RETURN FALSE.
  6339. IF NOT VALID-HANDLE(btParentInstance.hdl) THEN
  6340. hParent = hMenubar.
  6341. ELSE
  6342. hParent = btParentInstance.hdl.
  6343. END.
  6344. ELSE DO:
  6345. lRebuild = TRUE.
  6346. hParent = phParent.
  6347. END.
  6348. ASSIGN
  6349. lRule = TRUE
  6350. hUseParent = hParent.
  6351. FOR EACH btMenu WHERE btMenu.MenubarHdl = hMenuBar
  6352. AND btMenu.ParentMenuKey = pcMenuKey
  6353. BY btMenu.MenubarHdl
  6354. BY btMenu.ParentMenuKey
  6355. BY btMenu.Mergeorder
  6356. BY btMenu.Pageno
  6357. BY btMenu.hTarget
  6358. BY btMenu.seq:
  6359. IF NOT VALID-HANDLE(btMenu.Hdl) THEN
  6360. DO:
  6361. IF {fnarg actionControlType btMenu.NAME} = 'Placeholder' THEN
  6362. DO:
  6363. FOR EACH btInsertInstance
  6364. WHERE btInsertInstance.PlaceHolder = btMenu.Name
  6365. BY btInsertInstance.PlaceHolderSeq:
  6366. DYNAMIC-FUNCTION('buildMenuBand':U IN TARGET-PROCEDURE,
  6367. hUseParent,
  6368. btInsertInstance.MenuKey).
  6369. END.
  6370. END.
  6371. ELSE
  6372. /* Add a rule back if */
  6373. IF NOT lRule
  6374. AND btMenu.NAME = 'RULE':U
  6375. AND btMenu.hTarget = hCurrentTarget
  6376. AND hUseParent:TYPE = 'sub-menu'
  6377. AND hCurrentTarget <> ? THEN
  6378. ASSIGN
  6379. btMenu.Hdl = {fnarg createRule hUseParent}
  6380. lRule = TRUE.
  6381. END.
  6382. ELSE
  6383. DO:
  6384. IF hParent:TYPE = 'sub-menu':U
  6385. AND btMenu.hTarget <> hCurrentTarget AND hcurrentTarget <> ? THEN
  6386. DO:
  6387. IF NOT lRule THEN
  6388. {fnarg createRule hParent}.
  6389. IF lLinkAdded AND NOT lSubAdded THEN
  6390. DO:
  6391. IF pcMenuKey > '' THEN
  6392. DO:
  6393. IF NUM-ENTRIES(pcMenuKey,{&pathDlm}) > 1 THEN
  6394. ASSIGN
  6395. cParentMenuKey = SUBSTR(pcMenuKey,1,R-INDEX(pcMenuKey,{&pathDlm}) - 1)
  6396. cParent = SUBSTR(pcMenuKey,R-INDEX(pcMenuKey,{&pathDlm}) + 1).
  6397. ELSE
  6398. ASSIGN
  6399. cParentMenuKey = ''
  6400. cParent = pcMenuKey.
  6401. /* Find this band in the current/first toolbar and its label */
  6402. FIND btBandMenu WHERE btBandMenu.MenubarHdl = hMenuBar
  6403. AND btBandMenu.ParentMenuKey = cParentMenuKey
  6404. AND btBandMenu.NAME = cParent
  6405. AND btBandMenu.hTarget = hCurrentTarget
  6406. NO-ERROR.
  6407. IF AVAIL btBandMenu THEN
  6408. DO:
  6409. /* If the current toolbar has non-ambiguous Label then
  6410. we use it to identify conflicts when adding subbands below
  6411. (The label entry is set to blank if more than one target
  6412. exists for a link) */
  6413. cCurrentLabel = ENTRY(1,btBandMenu.ChildLabels).
  6414. /* all links must have same label to be non-ambiguous */
  6415. IF cCurrentLabel <> '':U THEN
  6416. DO iLabel = 2 TO NUM-ENTRIES(btBandMenu.ChildLabels):
  6417. /* set to blank if different labels to signal ambiguity */
  6418. IF ENTRY(iLabel,btBandMenu.ChildLabels) <> cCurrentLabel THEN
  6419. DO:
  6420. cCurrentLabel = ''.
  6421. LEAVE.
  6422. END.
  6423. END. /* do ilabel = 2 to numo1 */
  6424. END. /* if avail btBandMenu */
  6425. /* Loop through sibling bands and create submenus for conflicts */
  6426. FOR EACH btBandMenu WHERE btBandMenu.MenubarHdl = hMenuBar
  6427. AND btBandMenu.ParentMenuKey = cParentMenuKey
  6428. AND btBandMenu.NAME = cParent
  6429. AND btBandMenu.hTarget <> hCurrentTarget
  6430. BY btBandMenu.Mergeorder
  6431. BY btBandMenu.Pageno
  6432. BY btBandMenu.hTarget:
  6433. /* BY btBandMenu.seq (not needed, one record per hTarget) */
  6434. IF btBandMenu.HasLink AND VALID-HANDLE(btBandMenu.hTarget) THEN
  6435. DO:
  6436. {get createSubMenuOnConflict lCreateSub btBandMenu.hTarget}.
  6437. IF lCreateSub THEN
  6438. DO:
  6439. /* loop through labels and create submenus for each label
  6440. that conflicts with current/first */
  6441. DO iLabel = 1 TO NUM-ENTRIES(btBandMenu.ChildLabels):
  6442. ASSIGN
  6443. cLabel = ENTRY(iLabel,btBandMenu.ChildLabels)
  6444. cLink = ENTRY(iLabel,btBandMenu.ChildLinks).
  6445. /* We set label to blank to indicate multi-targets, as
  6446. w do not support submenuing for those toolbars. In
  6447. any case if the link-label is blank we cannot create a
  6448. sub menu.. (cLink check issanity, should most
  6449. definitely be set)*/
  6450. IF cLabel > '':U AND cLink > '':U THEN
  6451. DO:
  6452. /* If the label matches the current label then there
  6453. is no conflict */
  6454. IF cCurrentLabel <> cLabel THEN
  6455. DO:
  6456. /* link + target is used as the id to find the subband
  6457. handle when we traverse the items in the outer
  6458. for each */
  6459. ASSIGN
  6460. cLinkToolbarId = cLink
  6461. + '-':U
  6462. + STRING(btBandMenu.hTarget)
  6463. iSub = LOOKUP(cLabel,cSubLabels).
  6464. .
  6465. IF iSub = 0 THEN
  6466. DO:
  6467. /* create the submenu in the owner so trigger stays
  6468. in synch. Then name is used to redefine the
  6469. trigger correctly in moveMenu */
  6470. hSubHdl = DYNAMIC-FUNCTION("createSubMenu":U IN btBandMenu.hTarget,
  6471. hParent,
  6472. cLabel + ':' + STRING(btBandMenu.hTarget),
  6473. cLabel,
  6474. TRUE).
  6475. /* avoid double entries of subs with same labels */
  6476. cSubLabels = cSubLabels
  6477. + (IF cSubLabels = '':U THEN '' ELSE ',')
  6478. + cLabel.
  6479. cSubLabelHdls = cSubLabelHdls
  6480. + (IF cSubLabelHdls = '':U THEN '' ELSE ',')
  6481. + STRING(hSubHdl).
  6482. END.
  6483. ELSE
  6484. hSubHdl = WIDGET-HANDLE(ENTRY(iSub,cSubLabelHdls)).
  6485. ASSIGN
  6486. cSubList = cSubList
  6487. + (IF cSubList = '' THEN '' ELSE ',')
  6488. + cLinkToolbarId
  6489. cSubHdls = cSubHdls
  6490. + (IF cSubHdls = '' THEN '' ELSE ',')
  6491. + STRING(hSubHdl).
  6492. END. /* current <> label */
  6493. END. /* label > '' and link > '' */
  6494. END. /* loop through link labels */
  6495. btBandMenu.SubHdls = cSubHdls.
  6496. END. /* CreateSubMenuOnConflict */
  6497. END. /* btBandMenu.hasLink */
  6498. END. /* for each */
  6499. END. /* pcMenuKey > '' */
  6500. IF cSubList <> '' AND btMenu.NAME <> 'RULE':U THEN
  6501. {fnarg createRule hParent}.
  6502. lSubAdded = TRUE.
  6503. END. /* if lLinkAdded and not lSubAdded */
  6504. END. /* hCurrentTarget ne btMenu.hTarget */
  6505. ASSIGN
  6506. hCurrentTarget = btMenu.hTarget
  6507. lNoAccelerator = FALSE
  6508. lContainerLink = IF (btMenu.Link > '':U AND btMenu.Link <> 'ContainerToolbar-Target':U)
  6509. THEN FALSE
  6510. ELSE TRUE.
  6511. IF NOT lContainerLink THEN
  6512. DO:
  6513. ASSIGN
  6514. lLinkAdded = TRUE
  6515. hUseParent = hParent.
  6516. IF lSubAdded THEN
  6517. DO:
  6518. ASSIGN
  6519. cLinkToolbarId = btMenu.Link + '-':U + STRING(btMenu.hTarget)
  6520. iSub = LOOKUP(cLinkToolbarId,cSubList).
  6521. IF iSub > 0 THEN
  6522. ASSIGN
  6523. hUseParent = WIDGET-HANDLE(ENTRY(iSub,cSubHdls))
  6524. lNoAccelerator = TRUE.
  6525. END.
  6526. END.
  6527. ELSE IF btMenu.NAME = 'RULE':U THEN
  6528. DO:
  6529. IF lRule THEN
  6530. DO:
  6531. DELETE OBJECT btMenu.Hdl.
  6532. btMenu.Hdl = ?.
  6533. NEXT.
  6534. END.
  6535. END.
  6536. /* if containerlink use the origianal parent */
  6537. ELSE
  6538. hUseParent = hParent.
  6539. IF NOT lRebuild AND btMenu.hTarget = TARGET-PROCEDURE THEN
  6540. btMenu.hdl:PARENT = hUseParent NO-ERROR.
  6541. ELSE
  6542. DYNAMIC-FUNCTION('moveMenu':U IN TARGET-PROCEDURE,btMenu.Hdl,hUseParent).
  6543. /* Turn off accelerators for link */
  6544. IF lNoAccelerator AND btMenu.Hdl:ACCELERATOR <> '' THEN
  6545. btMenu.Hdl:ACCELERATOR = ''.
  6546. ASSIGN
  6547. lRule = (btMenu.NAME = 'RULE':U).
  6548. END. /* valid btMenu.hdl*/
  6549. END. /* for each */
  6550. hRule = hParent:LAST-CHILD NO-ERROR.
  6551. DO WHILE VALID-HANDLE(hRule) AND hRule:TYPE = 'menu-item':U AND hRule:SUBTYPE = 'rule':
  6552. hRuleDel = hRule.
  6553. hRule = hRule:PREV-SIBLING.
  6554. DELETE OBJECT hRuleDel.
  6555. END.
  6556. DO iSub = 1 TO NUM-ENTRIES(cSubHdls):
  6557. hSubMenu = WIDGET-HANDLE(ENTRY(isub,cSubHdls)) NO-ERROR.
  6558. IF VALID-HANDLE(hSubMenu) THEN
  6559. DO:
  6560. hRule = hSubMenu:LAST-CHILD NO-ERROR.
  6561. DO WHILE VALID-HANDLE(hRule) AND hRule:TYPE = 'menu-item':U AND hRule:SUBTYPE = 'rule':
  6562. hRuleDel = hRule.
  6563. hRule = hRule:PREV-SIBLING.
  6564. DELETE OBJECT hRuleDel NO-ERROR.
  6565. END.
  6566. END.
  6567. END.
  6568. /** Keep this for debugging...
  6569. (it's also educational, demonstrates sorting as long as the BY matches the
  6570. real one above that is)
  6571. DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
  6572. IF hparent = hMenubar THEN
  6573. DO:
  6574. FOR EACH btMenu WHERE btMenu.MenubarHdl = hMenuBar
  6575. AND btMenu.ParentMenuKey = pcMenuKey
  6576. BY btMenu.MenubarHdl
  6577. BY btMenu.ParentMenuKey
  6578. BY btMenu.Mergeorder
  6579. BY btMenu.Pageno
  6580. BY btMenu.hTarget
  6581. BY btMenu.seq:
  6582. cList = cList
  6583. + (IF VALID-HANDLE(btMenu.hdl) THEN '' ELSE '->')
  6584. + (IF btMenu.hTarget = TARGET-PROCEDURE THEN 'New ' ELSE 'Old ')
  6585. + btMenu.Caption
  6586. + ' menukey: ' + (IF btMenu.ParentMenuKey= ? THEN '?' ELSE btMenu.Parentmenukey)
  6587. + ' mrg: ' + (IF btMenu.mergeorder = ? THEN '?' ELSE string(btMenu.Mergeorder))
  6588. + ' pg: ' + (IF btMenu.PAgeno = ? THEN '?' ELSE string(btMenu.pageno))
  6589. + ' hdl ' + STRING(btMenu.hTarget)
  6590. + ' seq: ' + STRING(btMenu.seq)
  6591. + (' ' + IF VALID-HANDLE(btMenu.hdl) THEN STRING(btMenu.hdl) ELSE '')
  6592. + CHR(10)
  6593. .
  6594. END.
  6595. MESSAGE
  6596. 'MENUBAR' STRING(hMenubar) SKIP
  6597. cList VIEW-AS ALERT-BOX.
  6598. END.
  6599. **/
  6600. RETURN TRUE.
  6601. END FUNCTION.
  6602. /* _UIB-CODE-BLOCK-END */
  6603. &ANALYZE-RESUME
  6604. &ENDIF
  6605. &IF DEFINED(EXCLUDE-canFindAction) = 0 &THEN
  6606. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION canFindAction Procedure
  6607. FUNCTION canFindAction RETURNS LOGICAL
  6608. (pcAction AS CHAR):
  6609. /*------------------------------------------------------------------------------
  6610. Purpose: Check if an action exist.
  6611. Notes:
  6612. ------------------------------------------------------------------------------*/
  6613. {&findaction}
  6614. RETURN AVAIL ttAction.
  6615. END FUNCTION.
  6616. /* _UIB-CODE-BLOCK-END */
  6617. &ANALYZE-RESUME
  6618. &ENDIF
  6619. &IF DEFINED(EXCLUDE-canFindCategory) = 0 &THEN
  6620. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION canFindCategory Procedure
  6621. FUNCTION canFindCategory RETURNS LOGICAL
  6622. (pcCategory AS CHAR):
  6623. /*------------------------------------------------------------------------------
  6624. Purpose: Check if an action exist.
  6625. Notes:
  6626. ------------------------------------------------------------------------------*/
  6627. RETURN findCategory(pcCategory,TARGET-PROCEDURE).
  6628. END FUNCTION.
  6629. /* _UIB-CODE-BLOCK-END */
  6630. &ANALYZE-RESUME
  6631. &ENDIF
  6632. &IF DEFINED(EXCLUDE-categoryActions) = 0 &THEN
  6633. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION categoryActions Procedure
  6634. FUNCTION categoryActions RETURNS CHARACTER
  6635. ( pcCategory AS CHAR ) :
  6636. /*------------------------------------------------------------------------------
  6637. Purpose: Returns the available actions for a specific category on this
  6638. toolbar master.
  6639. Parameters: pcCategory - category name
  6640. - blank is valid as it is used to find uncategorized
  6641. actions
  6642. - '*' All actions.
  6643. Notes: Used in the Instance Property dialog
  6644. ------------------------------------------------------------------------------*/
  6645. DEFINE BUFFER bttBand FOR ttBand.
  6646. DEFINE BUFFER bttBandAction FOR ttBandAction.
  6647. DEFINE BUFFER bttToolbarBand FOR ttToolbarBand.
  6648. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  6649. DEFINE VARIABLE cActionList AS CHARACTER NO-UNDO.
  6650. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  6651. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  6652. IF pcCategory = xcNoCategory THEN
  6653. pcCategory = '':U.
  6654. {get LogicalObjectName cLogicalObject}.
  6655. FOR
  6656. EACH bttToolbarband WHERE bttToolbarBand.toolbar = cLogicalObject,
  6657. EACH bttBand WHERE bttBand.band = bttToolbarband.Band
  6658. BY (IF bttBand.Bandtype = 'Toolbar' OR bttBand.Bandtype = 'Menu&Toolbar'
  6659. THEN IF bttToolbarBand.alignment = 'Left'
  6660. THEN 1
  6661. ELSE IF bttToolbarBand.alignment = 'Center'
  6662. THEN 2
  6663. ELSE 3
  6664. ELSE 4):
  6665. RUN bandActionList IN TARGET-PROCEDURE
  6666. (bttBand.Band,
  6667. pcCategory,
  6668. INPUT-OUTPUT cActionList).
  6669. END.
  6670. RETURN cActionList.
  6671. END FUNCTION.
  6672. /* _UIB-CODE-BLOCK-END */
  6673. &ANALYZE-RESUME
  6674. &ENDIF
  6675. &IF DEFINED(EXCLUDE-categoryLink) = 0 &THEN
  6676. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION categoryLink Procedure
  6677. FUNCTION categoryLink RETURNS CHARACTER
  6678. (pcCategory AS CHAR) :
  6679. /*------------------------------------------------------------------------------
  6680. Purpose:
  6681. Notes:
  6682. ------------------------------------------------------------------------------*/
  6683. FIND FIRST ttCategory WHERE ttCategory.Category = pcCategory NO-ERROR.
  6684. RETURN IF AVAIL ttCategory THEN ttCategory.Link ELSE ?.
  6685. END FUNCTION.
  6686. /* _UIB-CODE-BLOCK-END */
  6687. &ANALYZE-RESUME
  6688. &ENDIF
  6689. &IF DEFINED(EXCLUDE-checkRule) = 0 &THEN
  6690. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION checkRule Procedure
  6691. FUNCTION checkRule RETURNS LOGICAL
  6692. ( pcRule AS CHAR,
  6693. phHandle AS HANDLE,
  6694. plDefault AS LOG) :
  6695. /*------------------------------------------------------------------------------
  6696. Purpose: Check the rule of an action against the target
  6697. Parameters: pcrule - The rule
  6698. phHandle - Handle of the dynamic Buffer with the rules OR
  6699. the handle of the target.
  6700. plDefault - Default is used when function/property is not found
  6701. or if the function returns ?.
  6702. Notes:
  6703. IMPORTANT: This function is duplicated in the Panel super proc adm2/panel.p
  6704. ------------------------------------------------------------------------------*/
  6705. DEFINE VARIABLE cAndDlm AS CHARACTER NO-UNDO.
  6706. DEFINE VARIABLE cOrDlm AS CHARACTER NO-UNDO.
  6707. DEFINE VARIABLE iAnd AS INTEGER NO-UNDO.
  6708. DEFINE VARIABLE iOr AS INTEGER NO-UNDO.
  6709. DEFINE VARIABLE cAndRule AS CHARACTER NO-UNDO.
  6710. DEFINE VARIABLE cOrRule AS CHARACTER NO-UNDO.
  6711. DEFINE VARIABLE cFuncOp AS CHARACTER NO-UNDO.
  6712. DEFINE VARIABLE cCall AS CHARACTER NO-UNDO.
  6713. DEFINE VARIABLE cValueList AS CHARACTER NO-UNDO.
  6714. DEFINE VARIABLE cValue AS CHARACTER NO-UNDO.
  6715. DEFINE VARIABLE lOk AS LOGICAL NO-UNDO.
  6716. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  6717. DEFINE VARIABLE hField AS HANDLE NO-UNDO.
  6718. DEFINE VARIABLE cCheckType AS CHARACTER NO-UNDO.
  6719. ASSIGN
  6720. cCheckType = phHandle:TYPE
  6721. cFuncOp = '=':U
  6722. cAndDlm = CHR(1)
  6723. cOrDlm = CHR(2)
  6724. pcRule = REPLACE(pcRule,' and ':U,cAndDlm)
  6725. pcRule = REPLACE(pcRule,' or ':U,cOrDlm).
  6726. OrLOOP:
  6727. DO iOr = 1 TO NUM-ENTRIES(pcRule,cOrDlm):
  6728. cOrRule = TRIM(ENTRY(iOr,pcRule,cOrDlm)).
  6729. Andloop:
  6730. DO iAnd = 1 TO NUM-ENTRIES(cOrRule,cAndDlm):
  6731. ASSIGN
  6732. cAndRule = TRIM(ENTRY(iAnd,cOrRule,cAndDlm))
  6733. cValuelist = (IF NUM-ENTRIES(cAndRule,cFuncOp) > 1 THEN
  6734. ENTRY(2,cAndRule,cFuncOp)
  6735. ELSE 'YES':U)
  6736. cCall = ENTRY(1,cAndRule,cFuncOp)
  6737. cCall = (IF INDEX(cCall,'(':U) > 0
  6738. THEN ENTRY(1,cCall,'(':U)
  6739. ELSE 'get':U + cCall).
  6740. IF cCheckType = 'BUFFER':U THEN
  6741. DO:
  6742. ASSIGN
  6743. hField = phHandle:BUFFER-FIELD(cCall)
  6744. cValue = hField:BUFFER-VALUE NO-ERROR.
  6745. END.
  6746. ELSE
  6747. cValue = STRING(DYNAMIC-FUNCTION(cCall IN phHandle)) NO-ERROR.
  6748. lOk = IF cValue <> ?
  6749. THEN CAN-DO(cValueList,cValue)
  6750. ELSE plDefault.
  6751. IF cCheckType = 'BUFFER':U AND NOT lok AND VALID-HANDLE(hField) AND hField:DATA-TYPE = 'logical':U THEN
  6752. DO:
  6753. IF cValue = 'YES':U THEN
  6754. lok = CAN-DO(cValueList,'TRUE':U).
  6755. ELSE IF cValue = 'NO':U THEN
  6756. lok = CAN-DO(cValueList,'FALSE':U).
  6757. END.
  6758. IF lOk = FALSE THEN
  6759. LEAVE andloop.
  6760. END.
  6761. IF lOk THEN
  6762. LEAVE orLoop.
  6763. END.
  6764. RETURN lOk.
  6765. END FUNCTION.
  6766. /* _UIB-CODE-BLOCK-END */
  6767. &ANALYZE-RESUME
  6768. &ENDIF
  6769. &IF DEFINED(EXCLUDE-constructMenu) = 0 &THEN
  6770. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION constructMenu Procedure
  6771. FUNCTION constructMenu RETURNS LOGICAL
  6772. ( ):
  6773. /*------------------------------------------------------------------------------
  6774. Purpose: Construct the toolbar from loaded data.
  6775. Notes: This will realize bands read from the repository
  6776. Non-repository toolbars are created with createToolbar.
  6777. Both uses createToolbarAction to realize the actions/widgets.
  6778. ------------------------------------------------------------------------------*/
  6779. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  6780. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  6781. DEFINE VARIABLE lMenu AS LOGICAL NO-UNDO.
  6782. DEFINE VARIABLE cHiddenMenuBands AS CHARACTER NO-UNDO.
  6783. &SCOPED-DEFINE xp-assign
  6784. {get Menu lMenu}
  6785. {get LogicalObjectName cLogicalObject}
  6786. {get HiddenMenuBands cHiddenMenuBands}.
  6787. &UNDEFINE xp-assign
  6788. /* run only once, (unless removed..) */
  6789. FIND tBandInstance WHERE tBandInstance.MenuName = '':U
  6790. AND tBandInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  6791. IF lMenu AND NOT AVAIL tBandInstance THEN
  6792. DO:
  6793. /* The toolbar bands stores data for a toolbar object (master) and
  6794. are loaded for the first instance */
  6795. FOR
  6796. EACH ttToolbarBand
  6797. WHERE ttToolbarBand.Toolbar = cLogicalObject
  6798. AND (LOOKUP (ttToolbarBand.Band,cHiddenMenuBands) = 0),
  6799. EACH ttBand
  6800. WHERE ttBand.Band = ttToolbarBand.Band
  6801. AND (ttBand.BandType = 'Menubar':U):
  6802. CREATE tBandInstance.
  6803. ASSIGN
  6804. tBandInstance.hdl = {fn createMenuBar}
  6805. tBandInstance.Band = ttBand.Band
  6806. tBandInstance.MenuName = '':U /* tells menu APIs to use menubar as
  6807. parent */
  6808. tBandInstance.MenuKey = '':U /* menubar is parent */
  6809. tBandInstance.hTarget = TARGET-PROCEDURE.
  6810. {fnarg constructMenuBand ttBand.Band}.
  6811. END.
  6812. RETURN TRUE.
  6813. END.
  6814. RETURN FALSE.
  6815. END FUNCTION.
  6816. /* _UIB-CODE-BLOCK-END */
  6817. &ANALYZE-RESUME
  6818. &ENDIF
  6819. &IF DEFINED(EXCLUDE-constructMenuBand) = 0 &THEN
  6820. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION constructMenuBand Procedure
  6821. FUNCTION constructMenuBand RETURNS LOGICAL
  6822. (pcBand AS CHARACTER) :
  6823. /*------------------------------------------------------------------------------
  6824. Purpose: Create all items/subbandd for a band
  6825. Notes: Bands are only supported for Repository toolbars
  6826. ------------------------------------------------------------------------------*/
  6827. DEFINE BUFFER bttBand FOR ttBand.
  6828. DEFINE BUFFER bttChildBand FOR ttBand.
  6829. DEFINE BUFFER btParentInstance FOR tBandInstance.
  6830. DEFINE BUFFER btBandInstance FOR tBandInstance.
  6831. DEFINE BUFFER bttBandAction FOR ttBandAction.
  6832. DEFINE BUFFER btMenu FOR tMenu.
  6833. DEFINE BUFFER btOldMenu FOR tMenu.
  6834. DEFINE BUFFER btParent FOR tMenu.
  6835. DEFINE BUFFER btBandMenu FOR tMenu.
  6836. DEFINE BUFFER btSubMenu FOR tMenu.
  6837. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  6838. DEFINE VARIABLE cHiddenMenuBands AS CHARACTER NO-UNDO.
  6839. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  6840. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  6841. DEFINE VARIABLE cControlType AS CHAR NO-UNDO.
  6842. DEFINE VARIABLE cSecuredTokens AS CHARACTER NO-UNDO.
  6843. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  6844. DEFINE VARIABLE iSeq AS INTEGER NO-UNDO.
  6845. DEFINE VARIABLE lUseParent AS LOGICAL NO-UNDO.
  6846. DEFINE VARIABLE iMergeOrder AS INTEGER NO-UNDO.
  6847. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  6848. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  6849. DEFINE VARIABLE lContainerLink AS LOGICAL NO-UNDO.
  6850. DEFINE VARIABLE hSubParent AS HANDLE NO-UNDO.
  6851. DEFINE VARIABLE cTargetList AS CHARACTER NO-UNDO.
  6852. DEFINE VARIABLE hToolbar AS HANDLE NO-UNDO.
  6853. DEFINE VARIABLE cLabel AS CHARACTER NO-UNDO.
  6854. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  6855. DEFINE VARIABLE hUseParent AS HANDLE NO-UNDO.
  6856. DEFINE VARIABLE cLinkHandles AS CHARACTER NO-UNDO.
  6857. DEFINE VARIABLE lUseOld AS LOGICAL NO-UNDO.
  6858. DEFINE VARIABLE lUseNew AS LOGICAL NO-UNDO.
  6859. DEFINE VARIABLE cDeleteList AS HANDLE NO-UNDO.
  6860. DEFINE VARIABLE hDelete AS HANDLE NO-UNDO.
  6861. DEFINE VARIABLE cNavigationTarget AS CHARACTER NO-UNDO.
  6862. DEFINE VARIABLE hContainerSrc AS HANDLE NO-UNDO.
  6863. &SCOPED-DEFINE xp-assign
  6864. {get MenuMergeOrder iMergeOrder}
  6865. {get ObjectPage iPage}
  6866. {get HiddenMenuBands cHiddenMenuBands}
  6867. {get MenuBarHandle hMenuBar}
  6868. .
  6869. &UNDEFINE xp-assign
  6870. DEFINE VARIABLE ldebug AS LOGICAL NO-UNDO.
  6871. FIND bttBand WHERE bttBand.Band = pcBand NO-ERROR.
  6872. IF NOT AVAIL bttBand THEN
  6873. RETURN FALSE.
  6874. FIND btParentInstance WHERE btParentInstance.Band = pcBand
  6875. AND btParentInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  6876. IF NOT AVAIL btParentInstance THEN
  6877. RETURN FALSE.
  6878. IF NOT VALID-HANDLE(btParentInstance.hdl) THEN
  6879. hParent = hMenubar.
  6880. ELSE
  6881. hParent = btParentInstance.hdl.
  6882. IF btParentInstance.MenuName > '':U THEN
  6883. DO:
  6884. FIND btParent WHERE btParent.Name = btParentInstance.MenuName
  6885. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  6886. END.
  6887. FOR EACH bttBandAction WHERE bttBandAction.Band = bttBand.Band
  6888. BY bttBandAction.Sequence:
  6889. IF bttBandAction.Childband <> '':U then
  6890. do:
  6891. if CAN-DO(cHiddenMenuBands,bttBandAction.ChildBand) THEN
  6892. NEXT.
  6893. /* Ensure band are only added once for each toolbar (See notes) */
  6894. if can-find(btBandInstance where btBandInstance.Band = bttBandAction.ChildBand
  6895. and btBandInstance.hTarget = Target-procedure) then
  6896. NEXT.
  6897. end.
  6898. ASSIGN cAction = bttBandAction.Action.
  6899. /* Publish Event */
  6900. {fnarg actionPublishCreate cAction}.
  6901. /* use default label if no label defined */
  6902. IF cAction = '':U AND bttBandAction.ChildBand <> '':U THEN
  6903. DO:
  6904. FIND bttChildBand WHERE bttChildBand.Band = bttBandAction.ChildBand NO-ERROR.
  6905. IF AVAIL bttChildBand THEN
  6906. cAction = bttChildBand.BandLabelAction.
  6907. /* The use of the band as action is a last resort and may have
  6908. undesired effects if a real action has the same name.
  6909. ( not likely to be a problem, as they probablky are similar
  6910. if the names are... )
  6911. This will/should be removed when tools and/or repository ensures
  6912. this cannot happen */
  6913. IF cAction = '' THEN
  6914. cAction = bttBandAction.ChildBand.
  6915. END.
  6916. /* This does not happen.. with current data and tools.
  6917. the check was really added to make the code above complete. */
  6918. IF cAction = '':U THEN
  6919. NEXT.
  6920. /* We log LastControlType during the loop to avoid double rules */
  6921. cControlType = {fnarg actionControlType cAction}.
  6922. cLink = {fnarg actionLink cAction}.
  6923. ASSIGN
  6924. iSeq = iSeq + 1
  6925. lUseParent = FALSE
  6926. lContainerLink = cLink = '' OR cLink = ? OR cLink = 'ContainerToolbar-Target':U
  6927. lUseOld = FALSE
  6928. lUseNew = FALSE.
  6929. IF cAction <> 'RULE':U THEN
  6930. DO:
  6931. IF lContainerLink THEN
  6932. DO:
  6933. FIND FIRST btOldMenu WHERE btOldMenu.MenubarHdl = hMenuBar
  6934. AND btOldMenu.ParentMenuKey = btParentInstance.MenuKey
  6935. AND btOldMenu.NAME = cAction
  6936. AND VALID-HANDLE(btOldMenu.Hdl) NO-ERROR.
  6937. IF AVAIL btOldMenu THEN
  6938. DO:
  6939. /* A newer/later (this) toolbar decides the position, unless it is
  6940. the first item on the toolbar in which case it should stay where it
  6941. is
  6942. --
  6943. The code below is simply a GE expression.. (simply..NOT...)
  6944. The main issue is that mergeorder 0 is stored as ? in order
  6945. to sort high.... (Possible improvement is to store 0 as 999999
  6946. or whatever the highest integer is. or use a for each and leave,
  6947. but then we would lose the unofficial record of having the longest
  6948. GE expression ever written.) */
  6949. IF ((btOldMenu.MergeOrder > iMergeOrder OR btOldMenu.Mergeorder = ?)
  6950. AND
  6951. iMergeOrder <> 0
  6952. ) THEN
  6953. DO:
  6954. IF iSeq = 1 THEN
  6955. lUseNew = TRUE.
  6956. ELSE
  6957. lUseold = TRUE.
  6958. END.
  6959. ELSE
  6960. IF (btOldMenu.MergeOrder = iMergeOrder
  6961. OR (btOldMenu.MergeOrder = ? AND iMergeOrder = 0)
  6962. )
  6963. AND btOldMenu.Pageno > iPage THEN
  6964. DO:
  6965. IF iSeq = 1 THEN
  6966. lUseNew = TRUE.
  6967. ELSE
  6968. lUseold = TRUE.
  6969. END.
  6970. ELSE
  6971. IF (btOldMenu.MergeOrder = iMergeOrder
  6972. OR (btOldMenu.MergeOrder = ? AND iMergeOrder = 0)
  6973. )
  6974. AND btOldMenu.Pageno = iPage
  6975. AND INT(btOldMenu.htarget) > INT(TARGET-PROCEDURE) THEN
  6976. DO:
  6977. IF iSeq = 1 THEN
  6978. lUseNew = TRUE.
  6979. ELSE
  6980. lUseold = TRUE.
  6981. END.
  6982. ELSE IF iSeq = 1 THEN
  6983. lUseOld = TRUE.
  6984. ELSE
  6985. lUseNew = TRUE.
  6986. END.
  6987. END. /* container link */
  6988. END.
  6989. hMenu = DYNAMIC-FUNCTION('createMenuAction':U IN TARGET-PROCEDURE,
  6990. btParentInstance.Band,
  6991. cAction).
  6992. IF VALID-HANDLE(hMenu) THEN
  6993. DO:
  6994. IF AVAIL btParent AND NOT lContainerLink THEN
  6995. DO:
  6996. btParent.HasLink = TRUE.
  6997. IF LOOKUP(cLink,btParent.ChildLinks) = 0 THEN
  6998. DO:
  6999. /* Default in case no link etc (design time).. */
  7000. {get ObjectName cLabel}.
  7001. cLinkHandles = DYNAMIC-FUNCTION("linkHandles":U IN TARGET-PROCEDURE, cLink) NO-ERROR.
  7002. IF NUM-ENTRIES(cLinkHandles) = 1 THEN
  7003. DO:
  7004. hTarget = WIDGET-HANDLE(cLinkHandles).
  7005. IF cLink = 'Navigation-target':U THEN
  7006. DO:
  7007. {get NavigationTargetName cNavigationTarget}.
  7008. IF cNavigationtarget > '':U THEN
  7009. hTarget = {fnarg DataObjectHandle cNavigationTarget hTarget} NO-ERROR.
  7010. END.
  7011. IF VALID-HANDLE(hTarget) THEN
  7012. {get LABEL cLabel hTarget}.
  7013. /* labels and links are synchronized, so ChildLinks is used
  7014. to identify first entry in both cases .. */
  7015. END.
  7016. /* Blank out the label for multi-targets, we're not going to add
  7017. sun menus for it */
  7018. ELSE IF NUM-ENTRIES(cLinkHandles) > 1 THEN
  7019. cLabel = ''.
  7020. ASSIGN
  7021. btParent.ChildLabels = btParent.ChildLabels
  7022. + (IF btParent.ChildLinks = '' THEN '' ELSE ',':U)
  7023. + cLabel
  7024. btParent.ChildLinks = btParent.ChildLinks
  7025. + (IF btParent.ChildLinks = '' THEN '' ELSE ',':U)
  7026. + cLink.
  7027. END. /* lookup(clink,childLinks) = 0 */
  7028. END. /* avail parent */
  7029. IF bttBandAction.Childband <> '':U THEN
  7030. DO:
  7031. IF VALID-HANDLE(hMenu) THEN
  7032. DO:
  7033. CREATE tBandInstance.
  7034. ASSIGN
  7035. tBandInstance.Band = bttBandAction.Childband
  7036. tBandInstance.hdl = hMenu
  7037. tBandInstance.MenuName = cAction
  7038. tBandInstance.MenuKey = btParentinstance.MenuKey
  7039. + (IF btParentInstance.MenuKey = ''
  7040. THEN ''
  7041. ELSE {&pathdlm})
  7042. + cAction
  7043. tBandInstance.hTarget = TARGET-PROCEDURE.
  7044. DYNAMIC-FUNCTION('constructMenuBand':U IN TARGET-PROCEDURE,
  7045. bttBandAction.ChildBand).
  7046. END.
  7047. END.
  7048. /* We have a duplicate .. get rid of the old widget */
  7049. IF lUseOld OR lUseNew THEN
  7050. DO:
  7051. /* Postpone delete of the last menu on the menubar to avoid
  7052. earthquake eh. screenquake .. windowquake*/
  7053. IF btOldMenu.Hdl:PARENT = hMenuBar
  7054. AND hMenuBar:FIRST-CHILD = btOldMenu.Hdl
  7055. AND hMenuBar:LAST-CHILD = btOldMenu.Hdl THEN
  7056. hDelete = btOldMenu.Hdl.
  7057. ELSE
  7058. DELETE OBJECT btOldMenu.Hdl.
  7059. /* Keep the old position, so give the new handle to the old record */
  7060. IF lUseold THEN
  7061. DO:
  7062. FIND btMenu WHERE btMenu.NAME = cAction
  7063. AND btMenu.hTarget = TARGET-PROCEDURE.
  7064. ASSIGN
  7065. btOldMenu.Hdl = btMenu.Hdl
  7066. btMenu.Hdl = ?.
  7067. /* We currently add the trigger back to match the target in the tMenu
  7068. TT. This will probably be moved into createMenuAction where it
  7069. will be easier to avoid creating the new if old is to be used */
  7070. IF btOldMenu.Hdl:TYPE = 'menu-item':U AND btOldMenu.Hdl:SUBTYPE = 'normal':U THEN
  7071. DO:
  7072. IF btOldMenu.Hdl:TOGGLE-BOX THEN
  7073. ON VALUE-CHANGED OF btOldMenu.Hdl
  7074. PERSISTENT RUN OnValueChanged IN btOldMenu.hTarget(btOldMenu.Hdl:NAME).
  7075. ELSE
  7076. ON CHOOSE OF btOldMenu.Hdl
  7077. PERSISTENT RUN OnChoose IN btOldMenu.hTarget(btOldMenu.Hdl:NAME).
  7078. END.
  7079. ELSE IF btOldMenu.Hdl:TYPE = 'sub-menu':U THEN
  7080. ON MENU-DROP OF btOldMenu.Hdl
  7081. PERSISTENT RUN OnMenuDrop IN btOldMenu.hTarget(btOldMenu.Hdl:NAME).
  7082. END. /* use old */
  7083. /* else if keep new, set the old handle invalid */
  7084. ELSE
  7085. btOldMenu.Hdl = ?.
  7086. END.
  7087. END. /* if valid-handle */
  7088. ELSE IF cControlType = 'placeholder':U THEN
  7089. DYNAMIC-FUNCTION('constructObjectMenus':U IN TARGET-PROCEDURE,
  7090. pcBand,
  7091. bttBandAction.Action,
  7092. TRUE).
  7093. END. /* for each btBandaction */
  7094. /* Build the physical menus, unless this is a band directly inserted on a
  7095. placeholder (These bands will be built when buildMenuBand is called for
  7096. the parent of the placeholder) */
  7097. IF btParentInstance.placeholder = '' THEN
  7098. /* use menukey as this builds menus for all targets in menubar*/
  7099. DYNAMIC-FUNCTION('buildMenuBand':U IN TARGET-PROCEDURE,?,btParentInstance.MenuKey).
  7100. IF VALID-HANDLE(hDelete) THEN
  7101. DELETE OBJECT hDelete.
  7102. RETURN TRUE.
  7103. END FUNCTION.
  7104. /* _UIB-CODE-BLOCK-END */
  7105. &ANALYZE-RESUME
  7106. &ENDIF
  7107. &IF DEFINED(EXCLUDE-constructObjectMenus) = 0 &THEN
  7108. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION constructObjectMenus Procedure
  7109. FUNCTION constructObjectMenus RETURNS LOGICAL
  7110. ( pcBand AS CHAR,
  7111. pcPlaceholder AS CHAR,
  7112. plBlank AS LOG ) :
  7113. /*------------------------------------------------------------------------------
  7114. Purpose:
  7115. Notes:
  7116. ------------------------------------------------------------------------------*/
  7117. DEFINE BUFFER bttObjectBand FOR ttObjectBand.
  7118. DEFINE BUFFER bttBand FOR ttBand.
  7119. DEFINE BUFFER btParentInstance FOR tBandInstance.
  7120. DEFINE BUFFER btBandInstance FOR tBandInstance.
  7121. DEFINE VARIABLE cObjectList AS CHARACTER NO-UNDO.
  7122. DEFINE VARIABLE cObjectName AS CHARACTER NO-UNDO.
  7123. DEFINE VARIABLE cRunAttribute AS CHARACTER NO-UNDO.
  7124. DEFINE VARIABLE i AS INTEGER NO-UNDO.
  7125. DEFINE VARIABLE iPlaceholder AS INTEGER NO-UNDO.
  7126. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  7127. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  7128. FIND bttBand WHERE bttBand.Band = pcBand NO-ERROR.
  7129. IF NOT AVAIL bttBand THEN
  7130. RETURN FALSE.
  7131. FIND btParentInstance WHERE btParentInstance.Band = pcBand
  7132. AND btParentInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  7133. cObjectList = {fnarg supportedObjects YES}.
  7134. {get MenuBarHandle hMenuBar}.
  7135. DO i = 1 TO NUM-ENTRIES(cObjectList):
  7136. ASSIGN
  7137. cObjectName = ENTRY(i,cObjectList)
  7138. cRunAttribute = (IF NUM-ENTRIES(cObjectName,';':U) > 1
  7139. THEN ENTRY(2,cObjectName,';':U)
  7140. ELSE '':U)
  7141. cObjectName = ENTRY(1,cObjectName,';':U).
  7142. DO iPlaceHolder = 1 TO IF plBLank THEN 2 ELSE 1:
  7143. FOR EACH bttObjectBand
  7144. WHERE bttObjectBand.Action = (IF iPlaceHolder = 1
  7145. THEN pcPlaceholder
  7146. ELSE '':U)
  7147. AND bttObjectBand.ObjectName = cObjectName
  7148. AND bttObjectBand.RunAttribute = cRunAttribute,
  7149. EACH bttBand WHERE bttBand.Band = bttObjectBand.Band
  7150. BY bttObjectBand.ObjectName
  7151. BY bttObjectBand.Sequence:
  7152. /* Ensure band are only added once for each toolbar (See notes) */
  7153. if not can-find (btBandInstance where btBandInstance.Band = bttBand.Band
  7154. and btBandInstance.hTarget = TARGET-PROCEDURE)
  7155. /* if we add support for band multiple times per toolbar then we might
  7156. still need the below as customers may rely on it as it existed before
  7157. the stricter check above was added */
  7158. /* (two toolbars could have placeholders) */
  7159. and NOT CAN-FIND(FIRST btBandInstance
  7160. WHERE btBandInstance.MenubarHdl = hMenubar
  7161. AND btBandInstance.ObjectName = bttObjectBand.ObjectName
  7162. AND btBandInstance.Band = bttObjectBand.Band) THEN
  7163. DO:
  7164. /* separate with rule if on submenu */
  7165. IF btParentInstance.Hdl:TYPE <> 'menu':U THEN
  7166. DYNAMIC-FUNCTION('createMenuAction':U IN TARGET-PROCEDURE,
  7167. bttBand.Band,
  7168. 'RULE':U).
  7169. /* The use of the band as action is a last resort and may have
  7170. undesired effects if a real action has the same name.
  7171. ( not likely to be a problem, as they probablky are similar
  7172. if the names are... )
  7173. This will/should be removed when tools and/or repository ensures
  7174. this cannot happen */
  7175. cAction = IF bttBand.BandLabelAction <> ''
  7176. THEN bttBand.BandLabelAction
  7177. ELSE bttBand.Band.
  7178. CREATE btBandInstance.
  7179. ASSIGN
  7180. btBandInstance.Band = bttBand.Band
  7181. btBandInstance.hTarget = TARGET-PROCEDURE
  7182. btBandInstance.MenuName = bttBand.BandLabelAction
  7183. btBandInstance.MenuKey = btParentinstance.MenuKey
  7184. + (IF btParentInstance.MenuKey = ''
  7185. THEN ''
  7186. ELSE {&pathdlm})
  7187. + cAction
  7188. /* for the can-find above */
  7189. btBandInstance.MenubarHdl = hMenubar
  7190. btBandInstance.ObjectName = bttObjectBand.ObjectName
  7191. .
  7192. /* If insertSubMenu add the Band on the place holder as a submenu */
  7193. IF bttObjectBand.InsertSubmenu THEN
  7194. btBandInstance.Hdl = DYNAMIC-FUNCTION('createMenuAction':U IN TARGET-PROCEDURE,
  7195. btParentinstance.Band,
  7196. cAction).
  7197. ELSE
  7198. ASSIGN
  7199. btBandInstance.Placeholder = pcPlaceHolder
  7200. btBandInstance.PlaceholderSeq = bttObjectBand.Sequence
  7201. btBandInstance.Hdl = btParentInstance.hdl.
  7202. DYNAMIC-FUNCTION('constructMenuBand':U IN TARGET-PROCEDURE,
  7203. bttBand.Band).
  7204. END. /* not can-find (band object menubar) */
  7205. END. /* for each bttObjectband */
  7206. END. /* do loop twice (unamed and named place holders) */
  7207. END.
  7208. RETURN TRUE.
  7209. END FUNCTION.
  7210. /* _UIB-CODE-BLOCK-END */
  7211. &ANALYZE-RESUME
  7212. &ENDIF
  7213. &IF DEFINED(EXCLUDE-constructToolbar) = 0 &THEN
  7214. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION constructToolbar Procedure
  7215. FUNCTION constructToolbar RETURNS LOGICAL
  7216. ( ):
  7217. /*------------------------------------------------------------------------------
  7218. Purpose: Construct the toolbar from loaded repository data.
  7219. Notes: This will realize bands read from the repository
  7220. Non-repository toolbars are created with createToolbar.
  7221. Both uses createToolbarAction to realize the actions/widgets.
  7222. ------------------------------------------------------------------------------*/
  7223. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  7224. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  7225. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  7226. DEFINE VARIABLE iPosition AS INTEGER NO-UNDO.
  7227. DEFINE VARIABLE iToolbarHeightPxl AS INTEGER NO-UNDO.
  7228. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  7229. DEFINE VARIABLE lToolbar AS LOGICAL NO-UNDO.
  7230. DEFINE VARIABLE lActions AS LOGICAL NO-UNDO.
  7231. DEFINE VARIABLE lAnyActions AS LOGICAL NO-UNDO.
  7232. DEFINE VARIABLE dMinWidth AS DECIMAL NO-UNDO.
  7233. DEFINE VARIABLE dMinHeight AS DECIMAL NO-UNDO.
  7234. DEFINE VARIABLE cHiddenToolbarBands AS CHARACTER NO-UNDO.
  7235. DEFINE VARIABLE hButton AS HANDLE NO-UNDO.
  7236. DEFINE VARIABLE cSecuredTokens AS CHARACTER NO-UNDO.
  7237. &SCOPED-DEFINE xp-assign
  7238. {get Toolbar lToolbar}
  7239. {get ToolSeparatorPxl iToolSeparatorPxl}
  7240. {get LogicalObjectName cLogicalObject}
  7241. {get ToolBarHeightPxl iToolBarHeightPxl}
  7242. {get ShowBorder lShowBorder}
  7243. {get HiddenToolbarBands cHiddenToolbarBands}
  7244. {get SecuredTokens cSecuredTokens}
  7245. {set MinWidth 0}
  7246. {set MinHeight 0}
  7247. {set ToolMaxWidthPxl 0}.
  7248. &UNDEFINE xp-assign
  7249. ASSIGN
  7250. iPosition = iToolSeparatorPxl
  7251. + (If lShowBorder THEN 2 ELSE 0).
  7252. /* The toolbar bands stores data for a toolbar object (master) and are loaded
  7253. for the first instance */
  7254. IF lToolbar THEN
  7255. DO:
  7256. FOR
  7257. EACH ttToolbarBand
  7258. WHERE ttToolbarBand.toolbar = cLogicalObject
  7259. AND (LOOKUP (ttToolbarBand.Band,cHiddenToolbarBands) = 0),
  7260. EACH ttBand
  7261. WHERE ttBand.Band = ttToolbarBand.Band
  7262. AND (ttBand.BandType = 'Toolbar':U
  7263. OR
  7264. ttBand.BandType = 'Menu&Toolbar':U)
  7265. BY (IF ttToolbarBand.Alignment = 'Left':U THEN 1
  7266. ELSE IF ttToolbarBand.Alignment = 'Center':U THEN 2
  7267. ELSE 3)
  7268. BY ttToolbarBand.Sequence:
  7269. IF lActions AND ttToolbarBand.InsertRule THEN
  7270. DO:
  7271. IF lShowborder THEN
  7272. DYNAMIC-FUNCTION('createToolbarAction':U IN TARGET-PROCEDURE,
  7273. ttToolbarBand.Band,
  7274. 'RULE':U,
  7275. INPUT-OUTPUT iPosition).
  7276. ELSE
  7277. iPosition = iPosition + iToolSeparatorPxl.
  7278. lActions = FALSE.
  7279. END.
  7280. FOR EACH ttBandAction
  7281. WHERE ttBandAction.Band = ttBand.Band
  7282. BY ttBandAction.Sequence:
  7283. IF cSecuredTokens <> '':U
  7284. AND CAN-DO(cSecuredTokens,{fnarg actionSecuredToken ttBandAction.Action})
  7285. OR CAN-DO(cSecuredTokens,ttBandAction.Action) THEN
  7286. NEXT.
  7287. /* Publish Event */
  7288. {fnarg actionPublishCreate ttBandAction.Action}.
  7289. hButton = DYNAMIC-FUNCTION('createToolbarAction':U IN TARGET-PROCEDURE,
  7290. ttToolbarBand.Band,
  7291. ttBandAction.Action,
  7292. INPUT-OUTPUT iPosition).
  7293. IF NOT lActions THEN
  7294. lActions = VALID-HANDLE(hButton).
  7295. IF NOT lAnyActions THEN
  7296. lAnyActions = VALID-HANDLE(hButton).
  7297. END.
  7298. END.
  7299. IF DYNAMIC-FUNCTION('getUseWidgetID':U IN TARGET-PROCEDURE) THEN
  7300. RUN assignActionWidgetIDs IN TARGET-PROCEDURE.
  7301. IF lAnyActions THEN
  7302. DO:
  7303. {fn createToolbarBorder}.
  7304. &SCOPED-DEFINE xp-assign
  7305. {get MinWidth dMinWidth}
  7306. {get MinHeight dMinHeight}.
  7307. &UNDEFINE xp-assign
  7308. RUN resizeObject IN TARGET-PROCEDURE(dMinHeight,dMinWidth).
  7309. {fn adjustActions}.
  7310. END.
  7311. END.
  7312. RETURN TRUE.
  7313. END FUNCTION.
  7314. /* _UIB-CODE-BLOCK-END */
  7315. &ANALYZE-RESUME
  7316. &ENDIF
  7317. &IF DEFINED(EXCLUDE-create3DRule) = 0 &THEN
  7318. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION create3DRule Procedure
  7319. FUNCTION create3DRule RETURNS HANDLE
  7320. ( phParent AS HANDLE, /* handle to the parent frame */
  7321. INPUT-OUTPUT piXY AS INTEGER /* the x - posistion */
  7322. ) :
  7323. /*------------------------------------------------------------------------------
  7324. Purpose: Create a separator between toolbasr actions in the forma of a rectangle
  7325. Parameters: INPUT phParent - Frame handle.
  7326. INPUT-OUTPUT piX - in X position - out used X and + height-p
  7327. Notes:
  7328. ------------------------------------------------------------------------------*/
  7329. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  7330. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  7331. DEFINE VARIABLE iToolWidthPxl AS INTEGER NO-UNDO.
  7332. DEFINE VARIABLE iToolHeightPxl AS INTEGER NO-UNDO.
  7333. DEFINE VARIABLE iToolSpacingPxl AS INTEGER NO-UNDO.
  7334. DEFINE VARIABLE iToolMarginPxl AS INTEGER NO-UNDO.
  7335. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  7336. DEFINE VARIABLE iEdgePixels AS INTEGER NO-UNDO.
  7337. DEFINE VARIABLE lShowBorder AS LOGICAL NO-UNDO.
  7338. &SCOPED-DEFINE xp-assign
  7339. {get ToolbarDrawDirection cToolbarDrawDirection}
  7340. {get ToolSeparatorPxl iToolSeparatorPxl}
  7341. {get ToolWidthPxl iToolWidthPxl}
  7342. {get ToolHeightPxl iToolHeightPxl}
  7343. {get ToolMarginPxl iToolMarginPxl}
  7344. {get EdgePixels iEdgePixels}
  7345. {get ShowBorder lShowBorder}.
  7346. &UNDEFINE xp-assign
  7347. CREATE RECTANGLE hTmp
  7348. ASSIGN FRAME = phParent
  7349. GRAPHIC-EDGE = TRUE
  7350. FILLED = FALSE
  7351. X = 0
  7352. Y = 0
  7353. EDGE-PIXELS = 2
  7354. WIDTH-PIXELS = (IF cToolbarDrawDirection BEGINS "v":U
  7355. THEN iToolWidthPxl
  7356. ELSE (IF iEdgePixels = 1 THEN 1 ELSE 2))
  7357. HEIGHT-PIXELS = (IF cToolbarDrawDirection BEGINS "v":U
  7358. THEN (IF iEdgePixels = 1 THEN 1 ELSE 2)
  7359. ELSE iToolHeightPxl)
  7360. HIDDEN = TRUE.
  7361. /* piX + iToolWidthPxl > phParent:WIDTH-PIXELS */
  7362. IF cToolbarDrawDirection BEGINS "v":U THEN
  7363. DO:
  7364. ASSIGN
  7365. hTmp:X = (IF iToolMarginPxl < 2 AND lShowBorder
  7366. THEN 2
  7367. ELSE iToolMarginPxl)
  7368. hTmp:Y = piXY + iToolSeparatorPxl
  7369. hTmp:HIDDEN = FALSE NO-ERROR.
  7370. piXY = hTmp:Y + hTmp:HEIGHT-P + iToolSeparatorPxl.
  7371. END.
  7372. ELSE
  7373. DO:
  7374. ASSIGN
  7375. hTmp:Y = (IF iToolMarginPxl < 2 AND lShowBorder
  7376. THEN 2
  7377. ELSE iToolMarginPxl)
  7378. hTmp:X = piXY + iToolSeparatorPxl
  7379. hTmp:HIDDEN = FALSE NO-ERROR.
  7380. piXY = hTmp:X + hTmp:WIDTH-P + iToolSeparatorPxl.
  7381. END.
  7382. RETURN hTmp.
  7383. END FUNCTION.
  7384. /* _UIB-CODE-BLOCK-END */
  7385. &ANALYZE-RESUME
  7386. &ENDIF
  7387. &IF DEFINED(EXCLUDE-createButton) = 0 &THEN
  7388. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createButton Procedure
  7389. FUNCTION createButton RETURNS HANDLE
  7390. ( phFrame AS HANDLE,
  7391. INPUT-OUTPUT piXY AS INTEGER,
  7392. pcName AS CHARACTER,
  7393. pcLabel AS CHARACTER,
  7394. pcTooltip AS CHARACTER,
  7395. pcImage AS CHARACTER,
  7396. plSensitive AS LOGICAL ) :
  7397. /*------------------------------------------------------------------------------
  7398. Purpose: Create a button
  7399. Parameters:
  7400. INPUT phParent - handle - parent frame
  7401. INPUT-OUTPUT piX - integer - in X position - out X + height-p
  7402. INPUT pcName - character - the name of the button
  7403. INPUT pcLabel - character - the label
  7404. INPUT pcCaption - character - the tooltip of the button
  7405. INPUT pcBitmap - character - the bitmap of the button
  7406. INPUT plSensitive - logical - Yes if the button should be sensitive
  7407. Notes: Creates a persistent trigger ON CHOOSE that runs onChoose(pcName).
  7408. ------------------------------------------------------------------------------*/
  7409. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  7410. DEFINE VARIABLE iTextWidthPxl AS INTEGER NO-UNDO.
  7411. DEFINE VARIABLE iToolSpacingPxl AS INTEGER NO-UNDO.
  7412. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  7413. DEFINE VARIABLE iToolWidthPxl AS INTEGER NO-UNDO.
  7414. DEFINE VARIABLE iToolHeightPxl AS INTEGER NO-UNDO.
  7415. DEFINE VARIABLE iToolMaxWidthPxl AS INTEGER NO-UNDO.
  7416. DEFINE VARIABLE iToolMarginPxl AS INTEGER NO-UNDO.
  7417. DEFINE VARIABLE lShowBorder AS LOGICAL NO-UNDO.
  7418. DEFINE VARIABLE cUIBmode AS CHAR NO-UNDO.
  7419. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  7420. DEFINE VARIABLE lImageLoad AS LOGICAL NO-UNDO.
  7421. &SCOPED-DEFINE xp-assign
  7422. {get ToolSpacingPxl iToolSpacingPxl}
  7423. {get ToolSeparatorPxl iToolSeparatorPxl}
  7424. {get ToolWidthPxl iToolWidthPxl}
  7425. {get ToolHeightPxl iToolHeightPxl}
  7426. {get ToolMarginPxl iToolMarginPxl}
  7427. {get ShowBorder lShowBorder}
  7428. {get ToolbarDrawDirection cToolbarDrawDirection}.
  7429. &UNDEFINE xp-assign
  7430. CREATE BUTTON hTmp
  7431. ASSIGN NO-FOCUS = TRUE
  7432. FRAME = phFrame
  7433. NAME = pcName
  7434. LABEL = pcLabel
  7435. FLAT-BUTTON = TRUE /*GetFlatButtons()*/
  7436. HEIGHT-PIXELS = iToolHeightPxl
  7437. TOOLTIP = pcTooltip
  7438. WIDTH-PIXELS = iToolWidthPxl
  7439. SENSITIVE = plSensitive
  7440. HIDDEN = FALSE.
  7441. IF pcImage > "" THEN
  7442. lImageLoad = LoadImage(INPUT hTmp, INPUT pcImage).
  7443. /* If this is a text button, reset the width to be the width of text and if
  7444. necessary, reset toolbar max width to width of this label */
  7445. IF NOT lImageLoad or pcImage = ? OR pcImage = "" THEN
  7446. DO:
  7447. /* Work out width of text */
  7448. iTextWidthPxl = FONT-TABLE:GET-TEXT-WIDTH-PIXELS(pcLabel) + 6.
  7449. /* Ensure not smaller than normal button */
  7450. IF iTextWidthPxl < iToolWidthPxl THEN
  7451. iTextWidthPxl = iToolWidthPxl.
  7452. /* set this width equal to text width */
  7453. iToolWidthPxl = iTextWidthPxl.
  7454. /* get current max tool width */
  7455. {get ToolMaxWidthPxl iToolMaxWidthPxl}.
  7456. /* and reset to this width if this width is greater */
  7457. IF iTextWidthPxl > iToolMaxWidthPxl THEN
  7458. DO:
  7459. iToolMaxWidthPxl = iTextWidthPxl.
  7460. {set ToolMaxWidthPxl iToolMaxWidthPxl}.
  7461. END.
  7462. ASSIGN hTmp:HEIGHT-PIXELS = iToolHeightPxl
  7463. hTmp:WIDTH-PIXELS = iToolWidthPxl NO-ERROR.
  7464. END.
  7465. IF cToolbarDrawDirection BEGINS "v":U THEN
  7466. DO:
  7467. ASSIGN hTmp:Y = piXY
  7468. hTmp:X = IF iToolMarginPxl < 2 AND lShowBorder
  7469. THEN 2
  7470. ELSE iToolMarginPxl
  7471. hTmp:SENSITIVE = plSensitive
  7472. piXY = piXY + iToolHeightPxl + iToolSpacingPxl
  7473. NO-ERROR. /* Error will be checked when frame:hidden = false in
  7474. initializeobject */
  7475. END.
  7476. ELSE
  7477. DO:
  7478. ASSIGN hTmp:X = piXY
  7479. hTmp:Y = IF iToolMarginPxl < 2 AND lShowBorder
  7480. THEN 2
  7481. ELSE iToolMarginPxl
  7482. hTmp:SENSITIVE = plSensitive
  7483. piXY = piXY + iToolWidthPxl + iToolSpacingPxl
  7484. NO-ERROR. /* Error will be checked when frame:hidden = false in
  7485. initializeobject */
  7486. END. /* horizontal */
  7487. /* No triggers or sensitive actions at design time */
  7488. {get UIBMode cUIBMode}.
  7489. IF cUIBMode <> "Design":U THEN
  7490. ON CHOOSE OF hTmp
  7491. PERSISTENT RUN OnChoose IN TARGET-PROCEDURE (pcName).
  7492. ELSE /* disable at design time */
  7493. hTmp:SENSITIVE = FALSE.
  7494. RETURN hTmp.
  7495. END FUNCTION.
  7496. /* _UIB-CODE-BLOCK-END */
  7497. &ANALYZE-RESUME
  7498. &ENDIF
  7499. &IF DEFINED(EXCLUDE-createMenuAction) = 0 &THEN
  7500. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createMenuAction Procedure
  7501. FUNCTION createMenuAction RETURNS HANDLE
  7502. ( pcParent AS CHAR,
  7503. pcAction AS CHAR) :
  7504. /*------------------------------------------------------------------------------
  7505. Purpose: Create a menu action widget
  7506. Parameters: pcParent
  7507. Repository - The name of the created parent band
  7508. Non repository - The unique action name of an already created
  7509. parent
  7510. - Blank means that this is the top level(menu-bar)
  7511. pcAction - action name
  7512. Notes: For non-repository objects this is called from buildMenu inside
  7513. a for each tMenu.
  7514. Repository objects calls this from constructMenuBand before the
  7515. TT is created and createFindMenuTT finds or creates the tMenu record
  7516. ------------------------------------------------------------------------------*/
  7517. DEFINE BUFFER btMenu FOR tMenu.
  7518. DEFINE BUFFER btParent FOR tMenu.
  7519. DEFINE BUFFER btChild FOR tMenu.
  7520. DEFINE BUFFER btParentInstance FOR tBandInstance.
  7521. DEFINE BUFFER btBandInstance FOR tBandInstance.
  7522. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  7523. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  7524. DEFINE VARIABLE lChecked AS LOGICAL NO-UNDO.
  7525. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  7526. DEFINE VARIABLE cDisabledActions AS CHARACTER NO-UNDO.
  7527. DEFINE VARIABLE cHiddenActions AS CHARACTER NO-UNDO.
  7528. DEFINE VARIABLE cControlType AS CHARACTER NO-UNDO.
  7529. DEFINE VARIABLE cParentMenu AS CHARACTER NO-UNDO.
  7530. DEFINE VARIABLE cLinkTargetNames AS CHARACTER NO-UNDO.
  7531. DEFINE VARIABLE cCaption AS CHARACTER NO-UNDO.
  7532. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  7533. DEFINE VARIABLE iMergeOrder AS INTEGER NO-UNDO.
  7534. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  7535. DEFINE VARIABLE cSecuredTokens AS CHARACTER NO-UNDO.
  7536. {get HiddenActions cHiddenActions}.
  7537. IF CAN-DO(cHiddenActions,pcAction) THEN
  7538. RETURN ?.
  7539. {get UseRepository lUseRepository}.
  7540. IF lUseRepository THEN
  7541. DO:
  7542. IF {fnarg actionCategoryIsHidden pcAction} THEN
  7543. RETURN ?.
  7544. FIND btParentInstance WHERE btParentInstance.Band = pcParent
  7545. AND btParentInstance.hTarget = TARGET-PROCEDURE
  7546. NO-ERROR.
  7547. IF NOT AVAIL btParentInstance THEN
  7548. RETURN ?.
  7549. &SCOPED-DEFINE xp-assign
  7550. {get MenubarHandle hMenuBar}
  7551. {get menuMergeOrder iMergeOrder}
  7552. {get ObjectPage iPage}
  7553. {get SecuredTokens cSecuredTokens}
  7554. .
  7555. &UNDEFINE xp-assign
  7556. {&findaction}
  7557. IF cSecuredTokens <> '':U
  7558. AND (CAN-DO(cSecuredTokens,(IF AVAIL ttAction THEN ttAction.SecurityToken ELSE ''))
  7559. OR
  7560. CAN-DO(cSecuredTokens,pcAction)) THEN
  7561. RETURN ?.
  7562. /* Only ONE entry of each action per band per toolbar, except for RULE. */
  7563. IF pcAction <> "RULE":U THEN
  7564. DO:
  7565. FIND btMenu WHERE btMenu.hTarget = TARGET-PROCEDURE
  7566. AND btMenu.NAME = pcAction
  7567. AND btMenu.PARENT = btParentInstance.MenuName
  7568. /* parent and parentmenukey is somewhat reduntant, but parentmenukey
  7569. could be more precise as it would ensure that children with similar
  7570. parents, but different grandparents does not see each other
  7571. as duplicates. But as long as this API is using Parent,name
  7572. this decides what's unique across the toolbar.
  7573. AND btMenu.ParentMenukey = btParentInstance.MenuName
  7574. */
  7575. NO-ERROR.
  7576. /* valid or not.. return unknown */
  7577. IF AVAIL btMenu THEN
  7578. RETURN ?.
  7579. END. /* not rule */
  7580. CREATE btMenu.
  7581. ASSIGN
  7582. btMenu.Caption = {fnarg actionCaption pcAction}
  7583. btMenu.hTarget = TARGET-PROCEDURE
  7584. btMenu.Name = pcAction
  7585. btMenu.Sensitive = FALSE
  7586. btMenu.ParentMenuKey = btParentInstance.MenuKey
  7587. btMenu.Parent = pcParent /*btParentInstance.MenuName*/
  7588. btMenu.Seq = btParentInstance.LastSeq + 1
  7589. btParentInstance.LastSeq = btMenu.Seq
  7590. btMenu.Link = (IF AVAIL ttAction THEN ttAction.Link ELSE '')
  7591. btMenu.PageNo = iPage
  7592. btMenu.MergeOrder = (IF iMergeOrder > 0 THEN iMergeOrder ELSE ?)
  7593. btMenu.MenuBarhdl = hMenuBar
  7594. hParent = ?.
  7595. END.
  7596. ELSE DO:
  7597. IF pcParent = '':U THEN
  7598. {get menubarHandle hParent}.
  7599. ELSE
  7600. DO:
  7601. FIND btParent WHERE btParent.Name = pcParent
  7602. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  7603. IF NOT AVAIL btParent THEN
  7604. RETURN ?.
  7605. hParent = btParent.Hdl.
  7606. END.
  7607. /* 'Rule' is not unique so find last that has not been created as a
  7608. widget (index has sequence as last component) */
  7609. FIND LAST btMenu WHERE btMenu.Parent = pcParent
  7610. AND btMenu.Name = pcAction
  7611. AND btMenu.hTarget = TARGET-PROCEDURE
  7612. AND btMenu.hdl = ? NO-ERROR.
  7613. {&findaction}
  7614. END.
  7615. IF AVAIL btMenu AND btMenu.Link > "":U THEN
  7616. DO:
  7617. {get LinkTargetNames cLinkTargetNames}.
  7618. IF NUM-ENTRIES(btMenu.Link,"-":U) > 1
  7619. AND ENTRY(2,btMenu.Link,"-":U) = "target":U
  7620. AND NOT CAN-DO(cLinkTargetNames,btMenu.Link) THEN
  7621. DO:
  7622. cLinkTargetNames = cLinkTargetNames
  7623. + (IF cLinkTargetNames = "":U THEN "":U ELSE ",":U)
  7624. + btMenu.Link.
  7625. {set LinkTargetNames cLinkTargetNames}.
  7626. END.
  7627. END.
  7628. {get DisabledActions cDisabledActions}.
  7629. IF pcAction = "RULE":U THEN
  7630. ASSIGN
  7631. btMenu.Hdl = DYNAMIC-FUNCTION("createRule":U IN TARGET-PROCEDURE,
  7632. hParent).
  7633. ELSE
  7634. DO:
  7635. ASSIGN /* non existing actions are treated as labels for repository */
  7636. cControlType = (IF AVAIL ttAction
  7637. THEN ttAction.ControlType
  7638. ELSE IF lUseRepository THEN 'Label' ELSE ?)
  7639. cType = (IF AVAIL ttAction THEN ttAction.Type ELSE ?)
  7640. btMenu.Disabled = (IF AVAIL ttAction THEN ttAction.DISABLED ELSE FALSE)
  7641. btMenu.Refresh = CAN-DO("run,property":U,cType).
  7642. IF CAN-DO("RUN,PUBLISH,LAUNCH":U, cType)
  7643. /* if it don't exist it has just been added wih insertMenu,
  7644. in that case we make it a menu-item if it has a parent.
  7645. (the user must override onChoose to react on it) */
  7646. OR (pcParent <> "":U AND NOT AVAIL ttAction AND NOT lUseRepository) THEN
  7647. DO:
  7648. ASSIGN
  7649. btMenu.Sensitive = IF btMenu.Disabled OR CAN-DO(cDisabledActions,btMenu.Name)
  7650. THEN FALSE
  7651. /* keep value if already sensitized */
  7652. ELSE IF btMenu.Sensitive THEN TRUE
  7653. ELSE IF cType = "RUN":U
  7654. /* CanRun checks disabled actions */
  7655. THEN {fnarg actionCanRun btMenu.Name}
  7656. ELSE IF cType = "LAUNCH":U
  7657. THEN TRUE
  7658. /* This has really nothing to do with repository, it's just that we use a
  7659. different default since non-repository need strict backwards compatibility
  7660. while the use of repository makes it so easy to override this with no code
  7661. that it makes sense to have a more sensible default.
  7662. NOTE: the default must match the craatetoolbarAction setting of tbutton as
  7663. resetTargetActions just checks tButton to see if this is a change */
  7664. ELSE lUseRepository
  7665. btMenu.Hdl = DYNAMIC-FUNCTION
  7666. ("createMenuItem":U IN TARGET-PROCEDURE,
  7667. hParent,
  7668. btMenu.Name,
  7669. DYNAMIC-FUNCTION ("actionCaption":U IN TARGET-PROCEDURE,
  7670. btMenu.Name),
  7671. IF AVAIL ttAction THEN ttAction.ACCELERATOR ELSE ?,
  7672. btMenu.Sensitive
  7673. ).
  7674. END.
  7675. ELSE IF cType = "PROPERTY":U THEN
  7676. DO:
  7677. ASSIGN
  7678. lChecked = {fnarg actionChecked btMenu.Name}
  7679. btMenu.Sensitive = (lChecked <> ?) AND NOT btMenu.Disabled
  7680. btMenu.Hdl = DYNAMIC-FUNCTION
  7681. ("createMenuToggle":U IN TARGET-PROCEDURE,
  7682. hParent,
  7683. btMenu.Name,
  7684. DYNAMIC-FUNCTION ("actionCaption":U IN TARGET-PROCEDURE,
  7685. btMenu.Name),
  7686. IF AVAIL ttAction THEN ttAction.ACCELERATOR ELSE ?,
  7687. btMenu.Sensitive).
  7688. IF VALID-HANDLE(btMenu.hdl) THEN
  7689. btMenu.Hdl:CHECKED = lChecked = TRUE.
  7690. END.
  7691. ELSE IF cControlType = 'Label':U THEN
  7692. ASSIGN
  7693. btMenu.Sensitive = IF lUseRepository THEN TRUE
  7694. ELSE
  7695. (CAN-FIND
  7696. (FIRST btChild WHERE btChild.PARENT = btMenu.NAME
  7697. AND btChild.hTarget = TARGET-PROCEDURE)
  7698. OR {fnarg actionInitCode btMenu.Name} <> "":U
  7699. )
  7700. btMenu.Hdl = DYNAMIC-FUNCTION
  7701. ("createSubMenu":U IN TARGET-PROCEDURE,
  7702. hParent,
  7703. btMenu.Name,
  7704. DYNAMIC-FUNCTION ("actionCaption":U IN TARGET-PROCEDURE,
  7705. btMenu.Name),
  7706. btMenu.Sensitive).
  7707. END. /* else (ie: tMeny <> rule) */
  7708. RETURN IF AVAIL btMenu THEN btMenu.Hdl ELSE ?.
  7709. END FUNCTION.
  7710. /* _UIB-CODE-BLOCK-END */
  7711. &ANALYZE-RESUME
  7712. &ENDIF
  7713. &IF DEFINED(EXCLUDE-createMenuBar) = 0 &THEN
  7714. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createMenuBar Procedure
  7715. FUNCTION createMenuBar RETURNS HANDLE
  7716. ( ) :
  7717. /*------------------------------------------------------------------------------
  7718. Purpose: Create a menubar object on the window if it does not already exist
  7719. and return the handle of the menu bar.
  7720. Notes: No data is added
  7721. Repository toolbars calls this all the time because the window's
  7722. menu-bar is reused.
  7723. non-repository objects does not have this capability, so they
  7724. only call this once from buildMenu when the parameter is blank
  7725. to create the menubar and uses getMenubarHandle to get the
  7726. existing handle.
  7727. ------------------------------------------------------------------------------*/
  7728. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  7729. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  7730. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  7731. &SCOPED-DEFINE xp-assign
  7732. {get UseRepository lUseRepository}
  7733. {get Window hWindow}
  7734. .
  7735. &UNDEFINE xp-assign
  7736. IF NOT lUseRepository OR NOT VALID-HANDLE(hWindow:MENU-BAR) THEN
  7737. DO:
  7738. /* CREATE a WIDGET-POOL for all menus since the toolbar may need to delete
  7739. and recreate menus in order to merge them, they may end up in different
  7740. default widget-pools and subsequently get detroyed too early
  7741. (non-repository just recreates menubars for each toolbar..)
  7742. */
  7743. IF lUseRepository OR NOT VALID-HANDLE(hWindow:MENU-BAR) THEN
  7744. CREATE WIDGET-POOL {&menuwidgetpool} + STRING(hWindow) PERSISTENT NO-ERROR.
  7745. CREATE MENU hMenu IN WIDGET-POOL {&menuwidgetpool} + STRING(hWindow)
  7746. ASSIGN
  7747. NAME = "MainMenu":U.
  7748. hWindow:MENU-BAR = hMenu.
  7749. END.
  7750. ELSE hMenu = hWindow:MENU-BAR.
  7751. {set menubarHandle hMenu}.
  7752. RETURN hMenu.
  7753. END FUNCTION.
  7754. /* _UIB-CODE-BLOCK-END */
  7755. &ANALYZE-RESUME
  7756. &ENDIF
  7757. &IF DEFINED(EXCLUDE-createMenuItem) = 0 &THEN
  7758. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createMenuItem Procedure
  7759. FUNCTION createMenuItem /**
  7760. * @desc Creates a menuitem
  7761. * @param <code>input pihParent handle</code> handle to (sub)menu
  7762. * @param <code>input picName character</code> Name of menuitem
  7763. * @param <code>input picCaption character</code> Caption
  7764. * @param <code>input pilSensitive logical</code> Item sensitive or not
  7765. * @returns handle to menuitem
  7766. */
  7767. RETURNS HANDLE
  7768. ( phParent AS HANDLE,
  7769. pcName AS CHARACTER,
  7770. pcCaption AS CHARACTER,
  7771. pcAccelerator AS CHARACTER,
  7772. plSensitive AS LOGICAL ) :
  7773. /*------------------------------------------------------------------------------
  7774. Purpose: Create and return a new menu-item with an on choose trigger.
  7775. Parameters:
  7776. INPUT phParent - handle - parent frame
  7777. INPUT pcName - character - the name of the button
  7778. INPUT pcCaption - character - the tooltip of the button
  7779. INPUT pcAccelerator - character - the action accelerator
  7780. INPUT plSensitive - logical - Yes if the item should be sensitive
  7781. Notes: Creates a persistent trigger ON CHOOSE that runs onChoose(pcName).
  7782. ------------------------------------------------------------------------------*/
  7783. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  7784. DEFINE VARIABLE cUIBMode AS CHAR NO-UNDO.
  7785. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  7786. &SCOPED-DEFINE xp-assign
  7787. {get UIBMode cUIBMode}
  7788. {get MenuBarHandle hMenubar}
  7789. .
  7790. &UNDEFINE xp-assign
  7791. CREATE MENU-ITEM hTmp IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  7792. ASSIGN
  7793. LABEL = IF pcCaption <> "":U THEN pcCaption ELSE pcName
  7794. NAME = pcName
  7795. SENSITIVE = plSensitive
  7796. ACCELERATOR = pcAccelerator.
  7797. IF phParent <> ? THEN
  7798. hTmp:PARENT = phParent.
  7799. IF cUIBMode <> "Design":U THEN
  7800. ON CHOOSE OF hTmp
  7801. PERSISTENT RUN OnChoose IN TARGET-PROCEDURE (pcName).
  7802. ELSE /* disable at design time */
  7803. hTmp:SENSITIVE = FALSE.
  7804. RETURN hTmp. /* Function return value. */
  7805. END FUNCTION.
  7806. /* _UIB-CODE-BLOCK-END */
  7807. &ANALYZE-RESUME
  7808. &ENDIF
  7809. &IF DEFINED(EXCLUDE-createMenuTempTable) = 0 &THEN
  7810. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createMenuTempTable Procedure
  7811. FUNCTION createMenuTempTable RETURNS ROWID PRIVATE
  7812. (pcParent AS CHAR,
  7813. pcName AS CHAR) :
  7814. /*------------------------------------------------------------------------------
  7815. Purpose: Create the temp-table for the menu.
  7816. Parameters:
  7817. INPUT pcParent - The unique Band name of an already created parent
  7818. INPUT pcName - A unique name
  7819. Notes: PRIVATE (we do not want to support this as an API, but rather
  7820. create a combination of insertMenuTempTable and this one)
  7821. ------------------------------------------------------------------------------*/
  7822. DEFINE BUFFER btMenu FOR tMenu.
  7823. DEFINE BUFFER btParent FOR tMenu.
  7824. DEFINE BUFFER btBandInstance FOR tBandInstance.
  7825. DEFINE VARIABLE iSeq AS INTEGER NO-UNDO.
  7826. DEFINE VARIABLE cCaption AS CHARACTER NO-UNDO.
  7827. DEFINE VARIABLE clink AS CHARACTER NO-UNDO.
  7828. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  7829. DEFINE VARIABLE iMergeOrder AS INTEGER NO-UNDO.
  7830. DEFINE VARIABLE lSubstitute AS LOGICAL NO-UNDO.
  7831. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  7832. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  7833. DEFINE VARIABLE iPage AS INTEGER NO-UNDO.
  7834. &SCOPED-DEFINE xp-assign
  7835. {get menuMergeOrder iMergeOrder}
  7836. {get ObjectPage iPage}
  7837. {get menubarHandle hMenuBar}
  7838. .
  7839. &UNDEFINE xp-assign
  7840. IF pcParent <> '':U THEN
  7841. DO:
  7842. FIND btParent WHERE btParent.Name = pcParent
  7843. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  7844. IF NOT AVAIL btParent THEN
  7845. RETURN ?.
  7846. hParent = btParent.Hdl.
  7847. END.
  7848. ELSE
  7849. hParent = hMenuBar.
  7850. /*
  7851. FIND btBandInstance WHERE btBandInstance.Band = pcParent
  7852. AND btBandInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  7853. */
  7854. cCaption = {fnarg actionCaption pcName}.
  7855. cLink = {fnarg actionLink pcName}.
  7856. /**
  7857. IF AVAIL btBandInstance AND cLink = '':U
  7858. AND pcName <> "RULE":U THEN
  7859. DO:
  7860. FIND FIRST btMenu WHERE btMenu.ParentHdl = btBandInstance.hdl
  7861. AND btMenu.Caption = cCaption
  7862. AND btMenu.Link = '':U NO-ERROR.
  7863. IF AVAIL btmenu THEN
  7864. DO:
  7865. hMenu = btMenu.hdl.
  7866. END.
  7867. END.
  7868. **/
  7869. FIND LAST btMenu WHERE btMenu.Parent = pcParent
  7870. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  7871. iSeq = IF AVAIL btMenu THEN btMenu.Seq + 1 ELSE 1.
  7872. /*
  7873. IF iSeq > 1 AND VALID-HANDLE(hMenu) THEN
  7874. hMenu = DYNAMIC-FUNCTION('moveMenu':U IN TARGET-PROCEDURE,
  7875. hMenu,
  7876. hMenu:PARENT).
  7877. */
  7878. /* If this is this object's first menu on this Band and another object
  7879. already has menus here create a rule first */
  7880. /**
  7881. IF iSeq = 1 AND pcName <> 'RULE':U AND btBandInstance.hdl:TYPE <> 'MENU':U
  7882. AND NOT VALID-HANDLE(hMenu) THEN
  7883. DO:
  7884. IF CAN-FIND(FIRST btMenu WHERE btMenu.ParentHdl = btBandInstance.hdl) THEN
  7885. DO:
  7886. DYNAMIC-FUNCTION ('createMenuTempTable':U IN TARGET-PROCEDURE,
  7887. pcParent,
  7888. 'RULE':U).
  7889. FIND LAST btMenu WHERE btMenu.Parent = pcParent
  7890. AND btMenu.Name = 'RULE':U
  7891. AND btMenu.hTarget = TARGET-PROCEDURE.
  7892. btMenu.hdl = DYNAMIC-FUNCTION("createRule":U IN TARGET-PROCEDURE,
  7893. btBandInstance.hdl).
  7894. END.
  7895. END.
  7896. **/
  7897. /* Only ONE entry of each action, except for RULE.
  7898. The last entry will potentially change the parent.
  7899. The menu may also exist with "*" as parent because it was enabled/disabled
  7900. before insert */
  7901. IF pcName <> "RULE":U THEN
  7902. FIND btMenu WHERE btMenu.hTarget = TARGET-PROCEDURE
  7903. AND btMenu.NAME = pcName NO-ERROR.
  7904. ELSE RELEASE btMenu.
  7905. IF NOT AVAIL btMenu OR pcName = "RULE":U THEN
  7906. DO:
  7907. CREATE btMenu.
  7908. ASSIGN
  7909. btMenu.hTarget = TARGET-PROCEDURE
  7910. /* Caption is stored because its used to identify the Menu when merging */
  7911. btMenu.Caption = cCaption
  7912. /* btMenu.ParentHdl = hParent /*btBandInstance.hdl*/ */
  7913. btMenu.Name = pcName
  7914. btMenu.Sensitive = FALSE.
  7915. END.
  7916. ASSIGN
  7917. btMenu.Parent = pcParent
  7918. btMenu.Seq = iSeq
  7919. btMenu.Link = cLink
  7920. btMenu.PageNo = iPage
  7921. btMenu.MergeOrder = IF iMergeOrder > 0 THEN iMergeOrder ELSE ?
  7922. btMenu.MenuBarhdl = hMenuBar
  7923. btMenu.hdl = hMenu.
  7924. /* return true if a btMenu was created with*/
  7925. RETURN ROWID(btMenu).
  7926. END FUNCTION.
  7927. /* _UIB-CODE-BLOCK-END */
  7928. &ANALYZE-RESUME
  7929. &ENDIF
  7930. &IF DEFINED(EXCLUDE-createMenuToggle) = 0 &THEN
  7931. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createMenuToggle Procedure
  7932. FUNCTION createMenuToggle /**
  7933. * @desc Creates a menuitem
  7934. * @param <code>input pihParent handle</code> handle to (sub)menu
  7935. * @param <code>input picName character</code> Name of menuitem
  7936. * @param <code>input picCaption character</code> Caption
  7937. * @param <code>input pilSensitive logical</code> Item sensitive or not
  7938. * @returns handle to menuitem
  7939. */
  7940. RETURNS HANDLE
  7941. ( phParent AS HANDLE,
  7942. pcName AS CHARACTER,
  7943. pcCaption AS CHARACTER,
  7944. pcAccelerator AS CHARACTER,
  7945. plSensitive AS LOGICAL) :
  7946. /*------------------------------------------------------------------------------
  7947. Purpose: Creates and return a new toggle menu-item with an on choose trigger.
  7948. Parameters:
  7949. INPUT phParent - handle - parent frame
  7950. INPUT pcName - character - the name of the button
  7951. INPUT pcCaption - character - the tooltip of the button
  7952. INPUT pcAccelerator - character - the action accelerator
  7953. INPUT plSensitive - logical - Yes sensitive, no disabled
  7954. Notes: Creates a persistent trigger
  7955. ON VALUE-CHANGED that runs onValueChanged(pcName).
  7956. ------------------------------------------------------------------------------*/
  7957. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  7958. DEFINE VARIABLE cUIBmode AS CHAR NO-UNDO.
  7959. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  7960. &SCOPED-DEFINE xp-assign
  7961. {get UIBMode cUIBMode}
  7962. {get MenuBarHandle hMenubar}
  7963. .
  7964. &UNDEFINE xp-assign
  7965. CREATE MENU-ITEM hTmp IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  7966. ASSIGN
  7967. TOGGLE-BOX = TRUE
  7968. LABEL = IF pcCaption <> "":U THEN pcCaption ELSE pcName
  7969. NAME = pcName
  7970. SENSITIVE = plSensitive
  7971. ACCELERATOR = pcAccelerator.
  7972. IF phParent <> ? THEN
  7973. hTmp:PARENT = phParent.
  7974. IF cUIBMode <> "Design":U THEN
  7975. ON VALUE-CHANGED OF hTmp
  7976. PERSISTENT RUN OnValueChanged IN TARGET-PROCEDURE (pcName).
  7977. ELSE /* Always disable at design time */
  7978. hTmp:SENSITIVE = FALSE.
  7979. RETURN hTmp. /* Function return value. */
  7980. END FUNCTION.
  7981. /* _UIB-CODE-BLOCK-END */
  7982. &ANALYZE-RESUME
  7983. &ENDIF
  7984. &IF DEFINED(EXCLUDE-createRule) = 0 &THEN
  7985. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createRule Procedure
  7986. FUNCTION createRule /**
  7987. * @desc Creates a rule
  7988. * @param <code>input pihParent handle</code> handle to (sub)menu
  7989. * @returns handle to rule
  7990. */
  7991. RETURNS HANDLE
  7992. ( phParent AS HANDLE /* Handle of the Parent */
  7993. ) :
  7994. /*------------------------------------------------------------------------------
  7995. Purpose: Create and return the handle of a RULE menu-item.
  7996. Parameters: INPUT phParent - handle - parent frame
  7997. Notes:
  7998. ------------------------------------------------------------------------------*/
  7999. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  8000. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  8001. {get MenuBarHandle hMenubar}.
  8002. CREATE MENU-ITEM hTmp IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  8003. ASSIGN
  8004. SUBTYPE = 'RULE':U.
  8005. IF phParent <> ? THEN
  8006. hTmp:PARENT = phParent.
  8007. RETURN hTmp.
  8008. END FUNCTION.
  8009. /* _UIB-CODE-BLOCK-END */
  8010. &ANALYZE-RESUME
  8011. &ENDIF
  8012. &IF DEFINED(EXCLUDE-createSubMenu) = 0 &THEN
  8013. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createSubMenu Procedure
  8014. FUNCTION createSubMenu RETURNS HANDLE
  8015. ( phParent AS HANDLE, /* Handle of the parent */
  8016. pcName AS CHARACTER, /* Name of the to be created submenu */
  8017. pcCaption AS CHARACTER, /* Caption of the be created submenu */
  8018. plSensitive AS LOGICAL /* If the submenu has to be sensitive */ ) :
  8019. /*------------------------------------------------------------------------------
  8020. Purpose: Create and return a new sub-menu-item with an on menu-drop trigger.
  8021. Parameters:
  8022. INPUT phParent - handle - parent frame
  8023. INPUT pcName - character - the name of the button
  8024. INPUT pcCaption - character - the tooltip of the button
  8025. INPUT plSensitive - logical - Yes if the item should be sensitive
  8026. Notes: Creates a persistent trigger ON MENU-DROP that runs
  8027. onMenuDrop(pcName).
  8028. ------------------------------------------------------------------------------*/
  8029. DEFINE VARIABLE hTmp AS HANDLE NO-UNDO.
  8030. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  8031. {get MenuBarHandle hMenubar}.
  8032. CREATE SUB-MENU hTmp IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  8033. ASSIGN
  8034. NAME = pcName
  8035. LABEL = IF pcCaption <> "":U THEN pcCaption ELSE pcName
  8036. SENSITIVE = plSensitive
  8037. TRIGGERS:
  8038. ON MENU-DROP PERSISTENT RUN onMenuDrop IN TARGET-PROCEDURE (pcName).
  8039. END TRIGGERS.
  8040. IF phParent <> ? THEN
  8041. hTmp:PARENT = phParent.
  8042. RETURN hTmp. /* Function return value. */
  8043. END FUNCTION.
  8044. /* _UIB-CODE-BLOCK-END */
  8045. &ANALYZE-RESUME
  8046. &ENDIF
  8047. &IF DEFINED(EXCLUDE-createToolbar) = 0 &THEN
  8048. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createToolbar Procedure
  8049. FUNCTION createToolbar RETURNS LOGICAL
  8050. (pcActions AS CHARACTER) :
  8051. /*------------------------------------------------------------------------------
  8052. Purpose: Create a toolbar
  8053. Parameters: INPUT pcActions - A comma seaparted list of actions or actionGroups
  8054. - RULE specifies a delimiter.
  8055. Notes:
  8056. ------------------------------------------------------------------------------*/
  8057. DEFINE VARIABLE i AS INT NO-UNDO.
  8058. DEFINE VARIABLE cAction AS CHAR NO-UNDO.
  8059. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  8060. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  8061. DEFINE VARIABLE cChildren AS CHAR NO-UNDO.
  8062. DEFINE VARIABLE cTableIOType AS CHAR NO-UNDO.
  8063. DEFINE VARIABLE cName AS CHAR NO-UNDO.
  8064. DEFINE VARIABLE iBtn AS INT NO-UNDO.
  8065. DEFINE VARIABLE iBegin AS INT NO-UNDO.
  8066. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  8067. DEFINE VARIABLE cParent AS CHAR NO-UNDO .
  8068. DEFINE VARIABLE cActionGroups AS CHAR NO-UNDO.
  8069. DEFINE VARIABLE cAvailToolbarActions AS CHAR NO-UNDO.
  8070. DEFINE VARIABLE lToolbar AS LOG NO-UNDO.
  8071. DEFINE VARIABLE lRule AS LOG NO-UNDO.
  8072. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  8073. DEFINE VARIABLE hBtn AS HANDLE NO-UNDO.
  8074. DEFINE VARIABLE dMinWidth AS DEC NO-UNDO.
  8075. DEFINE VARIABLE dMinHeight AS DEC NO-UNDO.
  8076. &SCOPED-DEFINE xp-assign
  8077. {get ShowBorder lShowBorder}
  8078. {get ActionGroups cActionGroups}
  8079. {get AvailToolbarActions cAvailToolbarActions}
  8080. {get ContainerHandle hFrame}
  8081. {get TableIOType cTableIoType}
  8082. {get Window hWindow}
  8083. {get Toolbar lToolbar}
  8084. {get ToolSeparatorPxl iToolSeparatorPxl}
  8085. {get MinWidth dMinWidth}.
  8086. &UNDEFINE xp-assign
  8087. ASSIGN
  8088. iBegin = INT((dMinWidth * SESSION:PIXELS-PER-COLUMN))
  8089. + iToolSeparatorPxl
  8090. + (If lShowBorder THEN 2 ELSE 0)
  8091. lRule = TRUE.
  8092. DO i = 1 TO NUM-ENTRIES(pcActions):
  8093. cAction = ENTRY(i,pcActions).
  8094. /* Logic to avoid double RULEs if some of the groups are skipped */
  8095. IF cAction = "RULE":U AND lRule THEN
  8096. NEXT.
  8097. /* We might give birth to children so do this before checking isParent */
  8098. IF (CAN-DO(cActionGroups,cAction) OR {fnarg actionIsMenu cAction}) THEN
  8099. {fnarg actionPublishCreate cAction}.
  8100. /* If this is a parent we logg and check it as a group and find children */
  8101. IF {fnarg actionIsParent cAction} THEN
  8102. DO:
  8103. IF NOT {fnarg actionIsMenu cAction} THEN
  8104. DO:
  8105. /* logg this as available for the Instance Property dialog */
  8106. IF NOT CAN-DO(cAvailToolbarActions,cAction) THEN
  8107. ASSIGN cAvailToolbarActions =
  8108. cAvailToolbarActions
  8109. + (IF cAvailToolbarActions = "":U THEN "":U ELSE ",":U)
  8110. + cAction.
  8111. /* Skip it if not amongst the selected actionGroups */
  8112. IF NOT lToolbar OR NOT CAN-DO(cActionGroups,cAction) THEN
  8113. NEXT.
  8114. END.
  8115. ELSE
  8116. IF NOT lToolbar THEN NEXT.
  8117. ASSIGN
  8118. cChildren = {fnarg actionChildren cAction}
  8119. cAction = cChildren.
  8120. END. /* if actionIsParent */
  8121. DO iBtn = 1 TO NUM-ENTRIES(cAction):
  8122. cName = ENTRY(iBtn,cAction).
  8123. /* if this is not children found above logg and check the parent */
  8124. IF cChildren = "":U THEN
  8125. DO:
  8126. cParent = {fnarg actionParent cAction}.
  8127. IF cParent <> "":U THEN
  8128. DO:
  8129. IF NOT {fnarg actionIsMenu cAction} THEN
  8130. DO:
  8131. /* logg the parent as available for the Instance Property dialog */
  8132. IF NOT CAN-DO(cAvailToolbarActions,cParent) THEN
  8133. ASSIGN cAvailToolbarActions =
  8134. cAvailToolbarActions
  8135. + (IF cAvailToolbarActions = "":U THEN "":U ELSE ",":U)
  8136. + cAction.
  8137. /* Skip it if the parent is not amongst the selected actionGroups */
  8138. IF NOT CAN-DO(cActionGroups,cParent) THEN
  8139. NEXT.
  8140. END.
  8141. END. /* if cParent <> "" */
  8142. END.
  8143. IF NOT lToolbar
  8144. OR (cName = "UPDATE":U AND cTableIoType <> "UPDATE":U) THEN
  8145. NEXT.
  8146. IF cName = "RULE":U AND NOT lShowBorder THEN
  8147. ASSIGN iBegin = iBegin + iToolSeparatorPxl
  8148. lRule = TRUE.
  8149. ELSE DO:
  8150. hBtn = DYNAMIC-FUNCTION ("createToolbarAction":U IN TARGET-PROCEDURE,
  8151. '':U,
  8152. cName,
  8153. INPUT-OUTPUT iBegin).
  8154. IF VALID-HANDLE(hBtn) THEN
  8155. lRule = (cName = 'RULE':U).
  8156. END. /* else (border or button) */
  8157. END. /* do iBtn = 1 to num-entries(cAction) */
  8158. END. /* do i = 1 to num-entries(pcActions) */
  8159. IF DYNAMIC-FUNCTION('getUseWidgetID':U IN TARGET-PROCEDURE) THEN
  8160. RUN assignActionWidgetIDs IN TARGET-PROCEDURE.
  8161. /* Set the available actionsgroups for the Instance Property dialog */
  8162. {set AvailToolbarActions cAvailToolbarActions}.
  8163. IF lToolbar AND VALID-HANDLE(hWindow) THEN
  8164. DO:
  8165. {fn createToolbarBorder}.
  8166. &SCOPED-DEFINE xp-assign
  8167. {get MinWidth dMinWidth}
  8168. {get MinHeight dMinHeight}.
  8169. &UNDEFINE xp-assign
  8170. RUN resizeObject IN TARGET-PROCEDURE(dMinHeight,dMinWidth).
  8171. {fn adjustActions}.
  8172. END. /* lToolbar and valid-handle(hWindow) */
  8173. RETURN TRUE.
  8174. END FUNCTION.
  8175. /* _UIB-CODE-BLOCK-END */
  8176. &ANALYZE-RESUME
  8177. &ENDIF
  8178. &IF DEFINED(EXCLUDE-createToolbarAction) = 0 &THEN
  8179. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createToolbarAction Procedure
  8180. FUNCTION createToolbarAction RETURNS HANDLE
  8181. (pcBand AS CHAR,
  8182. pcAction AS CHAR,
  8183. INPUT-OUTPUT piXY AS INT):
  8184. /*------------------------------------------------------------------------------
  8185. Purpose: Create a toolbar button.
  8186. Parameters: pcName - Action name
  8187. (the button will be created also if no Action is available
  8188. in the action class)
  8189. pcBand - Optional Band
  8190. Used when created from Repository.
  8191. io-piXY - X or Y Position depending on toolbarDrawDirection
  8192. Notes: Create the local temp-table record and call
  8193. createButton or create3dRule to create the actual widget.
  8194. ------------------------------------------------------------------------------*/
  8195. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  8196. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  8197. DEFINE VARIABLE cImagePath AS CHAR NO-UNDO.
  8198. DEFINE VARIABLE cImage AS CHARACTER NO-UNDO.
  8199. DEFINE VARIABLE dMinWidth AS DECIMAL NO-UNDO.
  8200. DEFINE VARIABLE dMinHeight AS DECIMAL NO-UNDO.
  8201. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  8202. DEFINE VARIABLE cDisabledActions AS CHARACTER NO-UNDO.
  8203. DEFINE VARIABLE cHiddenActions AS CHARACTER NO-UNDO.
  8204. DEFINE VARIABLE cGroups AS CHARACTER NO-UNDO.
  8205. DEFINE VARIABLE cControlType AS CHARACTER NO-UNDO.
  8206. DEFINE VARIABLE cCategory AS CHARACTER NO-UNDO.
  8207. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  8208. DEFINE VARIABLE cLinkTargetNames AS CHARACTER NO-UNDO.
  8209. {get HiddenActions cHiddenActions}.
  8210. IF CAN-DO(cHiddenActions,pcAction) THEN
  8211. RETURN ?.
  8212. IF {fnarg actionCategoryIsHidden pcAction} THEN
  8213. RETURN ?.
  8214. &SCOPED-DEFINE xp-assign
  8215. {get DisabledActions cDisabledActions}
  8216. {get UseRepository lUseRepository}.
  8217. &UNDEFINE xp-assign
  8218. {&findaction}
  8219. IF AVAIL ttAction THEN
  8220. ASSIGN
  8221. cType = ttAction.TYPE /*{fnarg actionType pcAction}*/
  8222. cControlType = ttAction.ControlType.
  8223. /* If no repository the 'RULE' is not found in action, and if repository is
  8224. used it should only have one separator and its name is 'rule', but just in
  8225. case someone messed up let's name it here */
  8226. IF cControlType = 'Separator':U THEN
  8227. pcAction = 'RULE':U.
  8228. IF pcAction <> 'RULE':U THEN
  8229. DO:
  8230. FIND FIRST tButton WHERE tButton.Name = pcAction
  8231. AND tButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  8232. /* non repository object still may create buttons
  8233. when a message is received before initialization so check handle */
  8234. IF AVAIL tButton AND VALID-HANDLE(tButton.hdl) THEN
  8235. RETURN ?.
  8236. END.
  8237. {get ContainerHandle hFrame}.
  8238. IF NOT AVAIL tButton OR pcAction = "RULE":U THEN
  8239. CREATE tButton.
  8240. ASSIGN
  8241. tButton.imageAlt = (IF AVAIL ttAction AND ttAction.ImageAlternateRule <> '':U
  8242. THEN FALSE
  8243. ELSE ?)
  8244. tButton.Link = {fnarg actionLink pcAction}
  8245. tButton.Name = pcAction
  8246. tbutton.Band = pcBand
  8247. tButton.hTarget = TARGET-PROCEDURE
  8248. tButton.Position = piXY.
  8249. IF pcAction = "RULE":U THEN
  8250. ASSIGN
  8251. tButton.Hdl = DYNAMIC-FUNCTION("create3DRule":U IN TARGET-PROCEDURE,
  8252. hFrame,
  8253. INPUT-OUTPUT piXY).
  8254. ELSE
  8255. ASSIGN
  8256. tButton.Disabled = IF AVAIL ttAction THEN ttAction.Disabled ELSE ?
  8257. tButton.Sensitive = IF tButton.Disabled OR CAN-DO(cDisabledActions,pcAction)
  8258. THEN FALSE
  8259. /* keep value if already sensitized */
  8260. ELSE IF tButton.Sensitive THEN TRUE
  8261. ELSE IF cType = "RUN":U
  8262. /* CanRun checks disabled actions */
  8263. THEN {fnarg actionCanRun tButton.Name}
  8264. ELSE IF cType = "LAUNCH":U
  8265. THEN TRUE
  8266. /* This has really nothing to do with repository, it's just that we use a
  8267. different default since non-repository need strict backwards compatibility
  8268. while the use of repository makes it so easy to override this with no code
  8269. that it makes sense to have a more sensible default.
  8270. NOTE: the default must match the craatetoolbarAction setting of tbutton as
  8271. resetTargetActions just checks tButton to see if this is a change */
  8272. ELSE lUseRepository
  8273. tButton.Hdl = DYNAMIC-FUNCTION ("createButton":U IN TARGET-PROCEDURE,
  8274. hFrame,
  8275. INPUT-OUTPUT piXY,
  8276. tButton.Name,
  8277. {fnarg actionLabel tButton.Name},
  8278. {fnarg actionTooltip tButton.Name},
  8279. DYNAMIC-FUNCTION('imageName':U IN TARGET-PROCEDURE,
  8280. tButton.Name,1),
  8281. tButton.Sensitive).
  8282. IF VALID-HANDLE(tButton.Hdl) THEN
  8283. DO:
  8284. &SCOPED-DEFINE xp-assign
  8285. {get MinWidth dMinWidth}
  8286. {get MinHeight dMinHeight}.
  8287. &UNDEFINE xp-assign
  8288. ASSIGN
  8289. dMinWidth = MAX(dMinWidth,tButton.Hdl:COL + tButton.Hdl:WIDTH - 1)
  8290. dMinHeight = MAX(dMinHeight,tButton.Hdl:ROW + tButton.Hdl:HEIGHT - 1).
  8291. &SCOPED-DEFINE xp-assign
  8292. {set MinWidth dMinWidth}
  8293. {set MinHeight dMinHeight}.
  8294. &UNDEFINE xp-assign
  8295. END.
  8296. /* Add Target link to LinkTargetNames property */
  8297. IF tButton.Link > "":U THEN
  8298. DO:
  8299. {get LinkTargetNames cLinkTargetNames}.
  8300. IF NUM-ENTRIES(tButton.Link,"-":U) > 1
  8301. AND ENTRY(2,tButton.Link,"-":U) = "target":U
  8302. AND NOT CAN-DO(cLinkTargetNames,tButton.Link) THEN
  8303. DO:
  8304. cLinkTargetNames = cLinkTargetNames + (IF cLinkTargetNames = "" THEN "" ELSE ",") + tButton.Link.
  8305. {set LinkTargetNames cLinkTargetNames}.
  8306. END.
  8307. END.
  8308. RETURN tButton.Hdl.
  8309. END FUNCTION.
  8310. /* _UIB-CODE-BLOCK-END */
  8311. &ANALYZE-RESUME
  8312. &ENDIF
  8313. &IF DEFINED(EXCLUDE-createToolbarBorder) = 0 &THEN
  8314. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION createToolbarBorder Procedure
  8315. FUNCTION createToolbarBorder RETURNS LOGICAL
  8316. ( ) :
  8317. /*------------------------------------------------------------------------------
  8318. Purpose: Add the border on the toolbar
  8319. Notes:
  8320. ------------------------------------------------------------------------------*/
  8321. DEFINE VARIABLE hFrame AS HANDLE NO-UNDO.
  8322. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  8323. DEFINE VARIABLE lToolbarAutoSize AS LOGICAL NO-UNDO.
  8324. DEFINE VARIABLE hRect AS HANDLE NO-UNDO.
  8325. DEFINE VARIABLE hRect2 AS HANDLE NO-UNDO.
  8326. DEFINE VARIABLE iEdgePixels AS INTEGER NO-UNDO.
  8327. DEFINE VARIABLE iToolMarginPxl AS INTEGER NO-UNDO.
  8328. DEFINE VARIABLE dMinWidth AS DECIMAL NO-UNDO.
  8329. DEFINE VARIABLE dMinHeight AS DECIMAL NO-UNDO.
  8330. DEFINE VARIABLE iToolSeparatorPxl AS INTEGER NO-UNDO.
  8331. DEFINE VARIABLE cDrawDirection AS CHARACTER NO-UNDO.
  8332. &SCOPED-DEFINE xp-assign
  8333. {get ContainerHandle hframe}
  8334. {get ShowBorder lShowBorder}
  8335. {get ToolbarAutosize lToolbarAutosize}
  8336. {get EdgePixels iEdgePixels}
  8337. {get ToolMarginPxl iToolMarginPxl}
  8338. {get ToolbarDrawDirection cDrawDirection}
  8339. {get MinWidth dMinWidth}
  8340. {get MinHeight dMinHeight}.
  8341. &UNDEFINE xp-assign
  8342. iEdgePixels = IF iEdgePixels = 1 THEN 1 ELSE 2.
  8343. IF lShowBorder THEN
  8344. DO:
  8345. CREATE RECTANGLE hRect
  8346. ASSIGN
  8347. GRAPHIC-EDGE = TRUE
  8348. Y = 0
  8349. X = 0
  8350. FILLED = FALSE
  8351. EDGE-PIXELS = iEdgePixels
  8352. HIDDEN = FALSE
  8353. FRAME = hFrame.
  8354. {set BoxRectangle hRect}.
  8355. /* If not autosize draw a border around the toolbar */
  8356. IF NOT lToolbarAutoSize THEN
  8357. DO:
  8358. ASSIGN
  8359. hRect:HEIGHT = dMinHeight
  8360. hRect:WIDTH = dMinWidth
  8361. NO-ERROR.
  8362. /* Add Margin, but include border size in margin size */
  8363. IF cDrawDirection BEGINS 'v':U THEN
  8364. hRect:WIDTH-P = hRect:WIDTH-P
  8365. + iToolMarginPxl NO-ERROR.
  8366. ELSE
  8367. hRect:HEIGHT-P = hRect:HEIGHT-P
  8368. + iToolMarginPxl NO-ERROR.
  8369. /* If a 'rule' is the last 'button' we keep the current size and just
  8370. hide it with this rectangle, but otherwise we add the separator so
  8371. both sides are equal */
  8372. FIND LAST tButton WHERE tButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  8373. IF tButton.NAME <> 'RULE' THEN
  8374. DO:
  8375. {get ToolSeparatorPxl iToolSeparatorPxl}.
  8376. IF cDrawDirection BEGINS 'v':U THEN
  8377. hRect:HEIGHT-P = hRect:HEIGHT-P + iToolSeparatorPxl + iEdgePixels
  8378. NO-ERROR.
  8379. ELSE
  8380. hRect:WIDTH-P = hRect:WIDTH-P + iToolSeparatorPxl + iEdgePixels
  8381. NO-ERROR.
  8382. END.
  8383. ASSIGN
  8384. dMinHeight = hRect:HEIGHT
  8385. dMinWidth = hRect:WIDTH.
  8386. &SCOPED-DEFINE xp-assign
  8387. {set MinWidth dMinWidth}
  8388. {set MinHeight dMinHeight}.
  8389. &UNDEFINE xp-assign
  8390. END.
  8391. /* otherwise we draw one rectangle over and one under (or left right ) */
  8392. ELSE
  8393. IF cDrawDirection BEGINS 'v':U THEN
  8394. ASSIGN
  8395. hRect:HEIGHT = dMinHeight
  8396. hRect:WIDTH-P = 2
  8397. NO-ERROR.
  8398. ELSE
  8399. ASSIGN
  8400. hRect:HEIGHT-P = 2
  8401. hRect:WIDTH = dMinWidth
  8402. NO-ERROR.
  8403. IF lToolbarAutoSize THEN
  8404. DO:
  8405. CREATE RECTANGLE hRect2
  8406. ASSIGN
  8407. GRAPHIC-EDGE = TRUE
  8408. FILLED = FALSE
  8409. EDGE-PIXELS = IF iEdgePixels = 1 THEN 1 ELSE 2
  8410. HIDDEN = FALSE
  8411. FRAME = hFrame.
  8412. {set BoxRectangle2 hRect2}.
  8413. /* override errors. initializeObject will give an error message
  8414. if frame hidden = false gives error. */
  8415. IF cDrawDirection BEGINS 'v':U THEN
  8416. ASSIGN
  8417. hRect2:ROW = 1
  8418. hRect2:HEIGHT = dMinHeight
  8419. hRect2:COL = dMinWidth + 1
  8420. hRect2:WIDTH-P = iEdgePixels
  8421. /* Add Margin, but include border size in margin size */
  8422. hRect2:X = hRect2:X
  8423. + MAX(iToolMarginPxl,hRect2:WIDTH-P)
  8424. - hRect2:WIDTH-P
  8425. NO-ERROR.
  8426. ELSE
  8427. ASSIGN
  8428. hRect2:ROW = dMinHeight + 1
  8429. hRect2:HEIGHT-P = iEdgePixels
  8430. hRect2:COL = 1
  8431. hRect2:WIDTH = dMinWidth
  8432. /* Add Margin, but include border size in margin size */
  8433. hRect2:Y = hRect2:Y
  8434. + MAX(iToolMarginPxl,hRect2:HEIGHT-P)
  8435. - hRect2:HEIGHT-P
  8436. NO-ERROR.
  8437. ASSIGN
  8438. dMinHeight = hRect2:ROW + hRect2:HEIGHT - 1
  8439. dMinWidth = hRect2:COL + hRect2:WIDTH - 1.
  8440. &SCOPED-DEFINE xp-assign
  8441. {set MinWidth dMinWidth}
  8442. {set MinHeight dMinHeight}.
  8443. &UNDEFINE xp-assign
  8444. END.
  8445. ELSE
  8446. {set BoxRectangle2 ?}.
  8447. END. /* showBorder */
  8448. ELSE DO:
  8449. &SCOPED-DEFINE xp-assign
  8450. {set BoxRectangle ?}
  8451. {set BoxRectangle2 ?}.
  8452. &UNDEFINE xp-assign
  8453. END.
  8454. RETURN TRUE.
  8455. END FUNCTION.
  8456. /* _UIB-CODE-BLOCK-END */
  8457. &ANALYZE-RESUME
  8458. &ENDIF
  8459. &IF DEFINED(EXCLUDE-defineAction) = 0 &THEN
  8460. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION defineAction Procedure
  8461. FUNCTION defineAction RETURNS LOGICAL
  8462. (pcAction AS CHAR,
  8463. pcColumns AS CHAR,
  8464. pcValues AS CHAR) :
  8465. /*------------------------------------------------------------------------------
  8466. Purpose: API used to define Actions for the class or a particalar instance
  8467. Notes:
  8468. ------------------------------------------------------------------------------*/
  8469. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  8470. DEFINE VARIABLE lOK AS LOGICAL NO-UNDO.
  8471. DEFINE BUFFER bttBand FOR ttBand.
  8472. DEFINE BUFFER bttBandAction FOR ttBandAction.
  8473. IF TARGET-PROCEDURE = THIS-PROCEDURE THEN
  8474. lUseRepository = DYNAMIC-FUNCTION('isICFRunning':U IN THIS-PROCEDURE) NO-ERROR.
  8475. ELSE /* minimize risk of the above and use the normal call in other cases */
  8476. {get UseRepository lUseRepository}.
  8477. lOK = setBuffer("Action":U,pcAction,pcColumns,PcValues,TARGET-PROCEDURE).
  8478. /* For customized createEvent, set repository bands and actions */
  8479. IF lUseRepository AND lOK THEN
  8480. DO:
  8481. {&findaction}
  8482. IF AVAIL ttAction AND ttAction.Parent > "" THEN
  8483. DO:
  8484. FIND bttBand WHERE bttBand.Band = ttAction.Parent
  8485. AND bttBand.ProcedureHandle = THIS-PROCEDURE NO-ERROR.
  8486. IF NOT AVAIL bttBand THEN
  8487. DO:
  8488. CREATE bttBand.
  8489. ASSIGN bttBand.Band = ttAction.Parent
  8490. bttBand.BandType = 'Menu&Toolbar'
  8491. bttBand.ProcedureHandle = THIS-PROCEDURE.
  8492. END.
  8493. FIND bttBandAction WHERE bttBandAction.Band = ttAction.Parent
  8494. AND bttBandAction.action = pcAction
  8495. AND bttBandAction.ProcedureHandle = THIS-PROCEDURE NO-ERROR.
  8496. IF NOT AVAIL bttBandAction THEN
  8497. DO:
  8498. CREATE bttBandAction.
  8499. ASSIGN bttBandAction.Band = bttBand.Band
  8500. bttBandAction.Action = pcAction
  8501. bttBandAction.sequence = ttAction.Order
  8502. bttBandAction.ProcedureHandle = THIS-PROCEDURE.
  8503. END.
  8504. /* Now specify the child band for all instances*/
  8505. FOR EACH bttBandAction WHERE bttBandAction.Action = ttAction.Parent
  8506. AND bttBandAction.ProcedureHandle = THIS-PROCEDURE:
  8507. ASSIGN bttBandAction.ChildBand = bttBand.Band.
  8508. END.
  8509. END.
  8510. END.
  8511. RETURN lOK.
  8512. END FUNCTION.
  8513. /* _UIB-CODE-BLOCK-END */
  8514. &ANALYZE-RESUME
  8515. &ENDIF
  8516. &IF DEFINED(EXCLUDE-deleteMenu) = 0 &THEN
  8517. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION deleteMenu Procedure
  8518. FUNCTION deleteMenu RETURNS LOGICAL
  8519. () :
  8520. /*------------------------------------------------------------------------------
  8521. Purpose: Delete the dynamic menu included all menu-items and sub-menues.
  8522. Notes:
  8523. ------------------------------------------------------------------------------*/
  8524. DEFINE BUFFER btMenu FOR tMenu.
  8525. DEFINE BUFFER btBandInstance FOR tBandInstance.
  8526. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  8527. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  8528. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  8529. DEFINE VARIABLE cInfo AS CHAR NO-UNDO.
  8530. DEFINE VARIABLE lOk AS LOG NO-UNDO.
  8531. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  8532. DEFINE VARIABLE cType AS CHAR NO-UNDO.
  8533. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  8534. /* Don't attempt to delete menu if toolbar is in a dialog box,
  8535. as it may delete the menu from the parent window. */
  8536. {get ContainerSource hContainer}.
  8537. IF VALID-HANDLE(hContainer) THEN /* not valid when selecting from palette */
  8538. cType = DYNAMIC-FUNCTION("getContainerType":U IN hContainer).
  8539. IF cType = "DIALOG-BOX":U THEN
  8540. RETURN FALSE.
  8541. {get Window hWindow}.
  8542. IF VALID-HANDLE(hWindow) THEN
  8543. hMenu = hWindow:MENU-BAR.
  8544. {get UseRepository lUseRepository}.
  8545. IF lUseRepository THEN
  8546. RUN removeMenu IN TARGET-PROCEDURE.
  8547. ELSE DO:
  8548. FOR EACH tBandInstance WHERE tBandInstance.hTarget = TARGET-PROCEDURE:
  8549. IF VALID-HANDLE(tBandInstance.hdl) THEN
  8550. DO:
  8551. IF NOT CAN-FIND(FIRST btBandInstance
  8552. WHERE btBandInstance.hdl = tBandInstance.hdl
  8553. AND btBandInstance.hTarget <> tBandInstance.hTarget) THEN
  8554. DO:
  8555. DELETE WIDGET tBandInstance.hdl.
  8556. IF tBandInstance.Hdl = hMenubar THEN {set MenuBarHandle ?}.
  8557. END.
  8558. END.
  8559. DELETE tBandInstance.
  8560. END.
  8561. FOR EACH tMenu WHERE tMenu.hTarget = TARGET-PROCEDURE:
  8562. IF VALID-HANDLE(tMenu.hdl) THEN
  8563. DO:
  8564. IF NOT CAN-FIND(FIRST btMenu WHERE btMenu.Hdl = tMenu.hdl
  8565. AND btMenu.hTarget <> tMenu.hTarget) THEN
  8566. DELETE WIDGET tmenu.hdl.
  8567. END.
  8568. DELETE tMenu.
  8569. END.
  8570. END. /* End if non-dynamics */
  8571. RETURN TRUE.
  8572. END FUNCTION.
  8573. /* _UIB-CODE-BLOCK-END */
  8574. &ANALYZE-RESUME
  8575. &ENDIF
  8576. &IF DEFINED(EXCLUDE-deleteToolbar) = 0 &THEN
  8577. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION deleteToolbar Procedure
  8578. FUNCTION deleteToolbar RETURNS LOGICAL
  8579. () :
  8580. /*------------------------------------------------------------------------------
  8581. Purpose: Delete the dynamic toolbar and its buttons
  8582. Notes:
  8583. ------------------------------------------------------------------------------*/
  8584. DEFINE VARIABLE hRect AS HANDLE NO-UNDO.
  8585. DEFINE VARIABLE hRect2 AS HANDLE NO-UNDO.
  8586. FOR EACH tButton WHERE tButton.hTarget = TARGET-PROCEDURE:
  8587. IF VALID-HANDLE(tButton.Hdl) THEN
  8588. DELETE WIDGET tButton.Hdl.
  8589. DELETE tButton.
  8590. END.
  8591. &SCOPED-DEFINE xp-assign
  8592. {set MinWidth 0}
  8593. {set MinHeight 0}
  8594. {get BoxRectangle hRect}
  8595. {get BoxRectangle2 hRect2}.
  8596. &UNDEFINE xp-assign
  8597. DELETE OBJECT hRect NO-ERROR.
  8598. DELETE OBJECT hRect2 NO-ERROR.
  8599. &SCOPED-DEFINE xp-assign
  8600. {set BoxRectangle ?}
  8601. {set BoxRectangle2 ?}.
  8602. &UNDEFINE xp-assign
  8603. RETURN TRUE.
  8604. END FUNCTION.
  8605. /* _UIB-CODE-BLOCK-END */
  8606. &ANALYZE-RESUME
  8607. &ENDIF
  8608. &IF DEFINED(EXCLUDE-disableActions) = 0 &THEN
  8609. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION disableActions Procedure
  8610. FUNCTION disableActions RETURNS LOGICAL
  8611. (pcActions AS CHAR) :
  8612. /*------------------------------------------------------------------------------
  8613. Purpose: Disable a list of actions
  8614. Parameters: INPUT pcActions - A comma separated list of actions to disable
  8615. "*" - means disable all
  8616. Notes: This function is used internally to turn actions on/off depending
  8617. of the state.
  8618. Use modifyDisabledActions or setDisabledActions to override
  8619. enabling.
  8620. ------------------------------------------------------------------------------*/
  8621. RETURN DYNAMIC-FUNC("sensitizeActions":U IN TARGET-PROCEDURE,pcActions,FALSE).
  8622. END FUNCTION.
  8623. /* _UIB-CODE-BLOCK-END */
  8624. &ANALYZE-RESUME
  8625. &ENDIF
  8626. &IF DEFINED(EXCLUDE-enableActions) = 0 &THEN
  8627. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION enableActions Procedure
  8628. FUNCTION enableActions RETURNS LOGICAL
  8629. (pcActions AS CHAR) :
  8630. /*------------------------------------------------------------------------------
  8631. Purpose: Enable a list of actions
  8632. Parameters: INPUT pcActions - A comma separated list of actions to enable
  8633. "*" - means enable all
  8634. Notes: This function is used internally to turn actions on/off depending
  8635. of the state.
  8636. Use modifyDisabledActions or setDisabledActions to override
  8637. enabling.
  8638. ------------------------------------------------------------------------------*/
  8639. RETURN DYNAMIC-FUNC("sensitizeActions" IN TARGET-PROCEDURE,pcActions,TRUE).
  8640. END FUNCTION.
  8641. /* _UIB-CODE-BLOCK-END */
  8642. &ANALYZE-RESUME
  8643. &ENDIF
  8644. &IF DEFINED(EXCLUDE-errorMessage) = 0 &THEN
  8645. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION errorMessage Procedure
  8646. FUNCTION errorMessage RETURNS LOGICAL
  8647. ( pcError AS char) :
  8648. /*------------------------------------------------------------------------------
  8649. Purpose: Display an error message
  8650. Notes: The object is generally forgiving, but some errors are captured.
  8651. ------------------------------------------------------------------------------*/
  8652. MESSAGE {fnarg messageNumber 36} SKIP
  8653. pcError
  8654. VIEW-AS ALERT-BOX WARNING.
  8655. RETURN FALSE. /* Function return value. */
  8656. END FUNCTION.
  8657. /* _UIB-CODE-BLOCK-END */
  8658. &ANALYZE-RESUME
  8659. &ENDIF
  8660. &IF DEFINED(EXCLUDE-findAction) = 0 &THEN
  8661. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION findAction Procedure
  8662. FUNCTION findAction RETURNS LOGICAL
  8663. (pcAction AS CHAR,
  8664. phTarget AS HANDLE) :
  8665. /*------------------------------------------------------------------------------
  8666. Purpose: Find the action override to ensure panel class accesses this class
  8667. static ttAction.
  8668. Notes:
  8669. ------------------------------------------------------------------------------*/
  8670. &SCOPED-DEFINE targetproc phTarget /* undefined in findaction*/
  8671. {&findaction}
  8672. RETURN AVAILABLE ttAction.
  8673. END FUNCTION.
  8674. /* _UIB-CODE-BLOCK-END */
  8675. &ANALYZE-RESUME
  8676. &ENDIF
  8677. &IF DEFINED(EXCLUDE-findCategory) = 0 &THEN
  8678. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION findCategory Procedure
  8679. FUNCTION findCategory RETURNS LOGICAL
  8680. (pcCategory AS CHAR,
  8681. phTarget AS HANDLE) :
  8682. /*------------------------------------------------------------------------------
  8683. Purpose:
  8684. Notes:
  8685. ------------------------------------------------------------------------------*/
  8686. FIND FIRST ttCategory WHERE ttCategory.Category = pcCategory NO-ERROR.
  8687. RETURN AVAILABLE ttCategory.
  8688. END FUNCTION.
  8689. /* _UIB-CODE-BLOCK-END */
  8690. &ANALYZE-RESUME
  8691. &ENDIF
  8692. &IF DEFINED(EXCLUDE-getActionBuffer) = 0 &THEN
  8693. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getActionBuffer Procedure
  8694. FUNCTION getActionBuffer RETURNS HANDLE
  8695. ( /* parameter-definitions */ ) :
  8696. /*------------------------------------------------------------------------------
  8697. Purpose:
  8698. Notes:
  8699. ------------------------------------------------------------------------------*/
  8700. RETURN BUFFER ttAction:HANDLE.
  8701. END FUNCTION.
  8702. /* _UIB-CODE-BLOCK-END */
  8703. &ANALYZE-RESUME
  8704. &ENDIF
  8705. &IF DEFINED(EXCLUDE-getActionGroups) = 0 &THEN
  8706. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getActionGroups Procedure
  8707. FUNCTION getActionGroups RETURNS CHARACTER
  8708. ( /* parameter-definitions */ ) :
  8709. /*------------------------------------------------------------------------------
  8710. Purpose: Returns the action groups selected in the Instance Properties.
  8711. Notes: Repository toolbar uses categories while non-repository objects
  8712. uses parent actions
  8713. ------------------------------------------------------------------------------*/
  8714. DEFINE VARIABLE cActionGroups AS CHARACTER NO-UNDO.
  8715. {get ActionGroups cActionGroups}.
  8716. RETURN cActionGroups.
  8717. END FUNCTION.
  8718. /* _UIB-CODE-BLOCK-END */
  8719. &ANALYZE-RESUME
  8720. &ENDIF
  8721. &IF DEFINED(EXCLUDE-getActionsLoaded) = 0 &THEN
  8722. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getActionsLoaded Procedure
  8723. FUNCTION getActionsLoaded RETURNS LOGICAL
  8724. ( ) :
  8725. /*------------------------------------------------------------------------------
  8726. Purpose: Check class flag that tells whether actions have been loaded
  8727. Notes: Considered PRIVATE, but not defined as private since
  8728. custom initAction may need to call the SET.
  8729. - Non repository only
  8730. ------------------------------------------------------------------------------*/
  8731. RETURN glActionsLoaded.
  8732. END FUNCTION.
  8733. /* _UIB-CODE-BLOCK-END */
  8734. &ANALYZE-RESUME
  8735. &ENDIF
  8736. &IF DEFINED(EXCLUDE-getActionWidgetIDs) = 0 &THEN
  8737. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getActionWidgetIDs Procedure
  8738. FUNCTION getActionWidgetIDs RETURNS CHARACTER
  8739. ( ):
  8740. /*------------------------------------------------------------------------------
  8741. Purpose:
  8742. Notes:
  8743. ------------------------------------------------------------------------------*/
  8744. DEFINE VARIABLE cActionWidgetIDs AS CHARACTER NO-UNDO.
  8745. {get ActionWidgetIDs cActionWidgetIDs}.
  8746. RETURN cActionWidgetIDs.
  8747. END FUNCTION.
  8748. /* _UIB-CODE-BLOCK-END */
  8749. &ANALYZE-RESUME
  8750. &ENDIF
  8751. &IF DEFINED(EXCLUDE-getAvailMenuActions) = 0 &THEN
  8752. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getAvailMenuActions Procedure
  8753. FUNCTION getAvailMenuActions RETURNS CHARACTER
  8754. ( ) :
  8755. /*------------------------------------------------------------------------------
  8756. Purpose: Returns the actions that are available in this toolbar
  8757. Notes: The Instance Property dialog shows these and AvailToolbarActions.
  8758. The actions/categories that are selected will be saved as
  8759. ActionGroups.
  8760. ------------------------------------------------------------------------------*/
  8761. DEFINE VARIABLE cAvailMenuActions AS CHARACTER NO-UNDO.
  8762. {get AvailMenuActions cAvailMenuActions}.
  8763. RETURN cAvailMenuActions.
  8764. END FUNCTION.
  8765. /* _UIB-CODE-BLOCK-END */
  8766. &ANALYZE-RESUME
  8767. &ENDIF
  8768. &IF DEFINED(EXCLUDE-getAvailToolbarActions) = 0 &THEN
  8769. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getAvailToolbarActions Procedure
  8770. FUNCTION getAvailToolbarActions RETURNS CHARACTER
  8771. ( ) :
  8772. /*------------------------------------------------------------------------------
  8773. Purpose: Returns the actions that are available in the menu of this toolbar
  8774. Notes: The Instance Property dialog shows these and AvailMenuActions.
  8775. The actions/categories that are selected will be saved as
  8776. ActionGroups.
  8777. ------------------------------------------------------------------------------*/
  8778. DEFINE VARIABLE cAvailToolbarActions AS CHARACTER NO-UNDO.
  8779. {get AvailToolbarActions cAvailToolbarActions}.
  8780. RETURN cAvailToolbarActions.
  8781. END FUNCTION.
  8782. /* _UIB-CODE-BLOCK-END */
  8783. &ANALYZE-RESUME
  8784. &ENDIF
  8785. &IF DEFINED(EXCLUDE-getAvailToolbarBands) = 0 &THEN
  8786. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getAvailToolbarBands Procedure
  8787. FUNCTION getAvailToolbarBands RETURNS CHARACTER
  8788. ( /* parameter-definitions */ ) :
  8789. /*------------------------------------------------------------------------------
  8790. Purpose: Returns the available toolbar bands for this toolbar master
  8791. Notes: Used in the Instance Property dialog to select ToolbarBands
  8792. ------------------------------------------------------------------------------*/
  8793. DEFINE BUFFER bttToolbarBand FOR ttToolbarBand.
  8794. DEFINE BUFFER bttBand FOR ttBand.
  8795. DEFINE VARIABLE cLogicalObject AS CHARACTER NO-UNDO.
  8796. DEFINE VARIABLE cBandList AS CHARACTER NO-UNDO.
  8797. {get LogicalObjectName cLogicalObject}.
  8798. FOR EACH bttToolbarBand
  8799. WHERE bttToolbarBand.toolbar = cLogicalObject,
  8800. EACH bttBand
  8801. WHERE bttBand.Band = bttToolbarBand.Band
  8802. AND (bttBand.BandType = 'Toolbar':U
  8803. OR
  8804. bttBand.BandType = 'Menu&Toolbar':U)
  8805. BY (IF bttToolbarBand.Alignment = 'Left':U THEN 1
  8806. ELSE IF bttToolbarBand.Alignment = 'Center':U THEN 2
  8807. ELSE 3)
  8808. BY bttToolbarBand.Sequence:
  8809. IF NOT CAN-DO(cBandList,bttBand.Band) THEN
  8810. cBandList = cBandList
  8811. + (IF cBandList <> '':U THEN ',':U ELSE '':U)
  8812. + bttBand.Band.
  8813. END.
  8814. RETURN cBandList.
  8815. END FUNCTION.
  8816. /* _UIB-CODE-BLOCK-END */
  8817. &ANALYZE-RESUME
  8818. &ENDIF
  8819. &IF DEFINED(EXCLUDE-getBoxRectangle) = 0 &THEN
  8820. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getBoxRectangle Procedure
  8821. FUNCTION getBoxRectangle RETURNS HANDLE
  8822. ( ) :
  8823. /*------------------------------------------------------------------------------
  8824. Purpose: Returns the handle to the rectangle, if any, which draws a
  8825. "box" around the buttons in the toolbar
  8826. -- used by resizeObject.
  8827. Params: <none>
  8828. ------------------------------------------------------------------------------*/
  8829. DEFINE VARIABLE hBox AS HANDLE NO-UNDO.
  8830. {get BoxRectangle hBox}.
  8831. RETURN hBox.
  8832. END FUNCTION.
  8833. /* _UIB-CODE-BLOCK-END */
  8834. &ANALYZE-RESUME
  8835. &ENDIF
  8836. &IF DEFINED(EXCLUDE-getBoxRectangle2) = 0 &THEN
  8837. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getBoxRectangle2 Procedure
  8838. FUNCTION getBoxRectangle2 RETURNS HANDLE
  8839. ( /* parameter-definitions */ ) :
  8840. /*------------------------------------------------------------------------------
  8841. Purpose: Used for bottom rectangle on toolbars with toolbarautosize true
  8842. Notes:
  8843. ------------------------------------------------------------------------------*/
  8844. DEFINE VARIABLE hValue AS HANDLE NO-UNDO.
  8845. {get BoxRectangle2 hValue}.
  8846. RETURN hValue. /* Function return value. */
  8847. END FUNCTION.
  8848. /* _UIB-CODE-BLOCK-END */
  8849. &ANALYZE-RESUME
  8850. &ENDIF
  8851. &IF DEFINED(EXCLUDE-getCommitTarget) = 0 &THEN
  8852. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getCommitTarget Procedure
  8853. FUNCTION getCommitTarget RETURNS CHARACTER
  8854. ( ) :
  8855. /*------------------------------------------------------------------------------
  8856. Purpose: Returns in character format the handle(s) of this object's
  8857. Commit-Target(s)
  8858. Params: none
  8859. ------------------------------------------------------------------------------*/
  8860. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  8861. {get CommitTarget cTarget}.
  8862. RETURN cTarget.
  8863. END FUNCTION.
  8864. /* _UIB-CODE-BLOCK-END */
  8865. &ANALYZE-RESUME
  8866. &ENDIF
  8867. &IF DEFINED(EXCLUDE-getCommitTargetEvents) = 0 &THEN
  8868. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getCommitTargetEvents Procedure
  8869. FUNCTION getCommitTargetEvents RETURNS CHARACTER
  8870. ( ) :
  8871. /*------------------------------------------------------------------------------
  8872. Purpose: Returns a comma-separated list of the events this object wants
  8873. to subscribe to in its CommitTarget
  8874. Params: <none>
  8875. ------------------------------------------------------------------------------*/
  8876. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  8877. {get CommitTargetEvents cEvents}.
  8878. RETURN cEvents.
  8879. END FUNCTION.
  8880. /* _UIB-CODE-BLOCK-END */
  8881. &ANALYZE-RESUME
  8882. &ENDIF
  8883. &IF DEFINED(EXCLUDE-getContainerToolbarTarget) = 0 &THEN
  8884. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerToolbarTarget Procedure
  8885. FUNCTION getContainerToolbarTarget RETURNS CHARACTER
  8886. ( ):
  8887. /*------------------------------------------------------------------------------
  8888. Purpose: Returns the handle of the object's containertoolbar-target.
  8889. Params: <none>
  8890. Notes:
  8891. ------------------------------------------------------------------------------*/
  8892. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  8893. {get ContainerToolbarTarget cTarget}.
  8894. RETURN cTarget.
  8895. END FUNCTION.
  8896. /* _UIB-CODE-BLOCK-END */
  8897. &ANALYZE-RESUME
  8898. &ENDIF
  8899. &IF DEFINED(EXCLUDE-getContainerToolbarTargetEvents) = 0 &THEN
  8900. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getContainerToolbarTargetEvents Procedure
  8901. FUNCTION getContainerToolbarTargetEvents RETURNS CHARACTER
  8902. ( ) :
  8903. /*------------------------------------------------------------------------------
  8904. Purpose: Returns the list of events to be subscribed to in the
  8905. ContainerToolbar-Target.
  8906. Params: <none>
  8907. Notes:
  8908. ------------------------------------------------------------------------------*/
  8909. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  8910. {get ContainerToolbarTargetEvents cEvents}.
  8911. RETURN cEvents.
  8912. END FUNCTION.
  8913. /* _UIB-CODE-BLOCK-END */
  8914. &ANALYZE-RESUME
  8915. &ENDIF
  8916. &IF DEFINED(EXCLUDE-getCreateSubMenuOnConflict) = 0 &THEN
  8917. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getCreateSubMenuOnConflict Procedure
  8918. FUNCTION getCreateSubMenuOnConflict RETURNS LOGICAL
  8919. ( ) :
  8920. /*------------------------------------------------------------------------------
  8921. Purpose: Decides whether to create submenu for conflicting bands
  8922. Parameters: INPUT plCreateSubMenu
  8923. Yes - Create a submenu when a band already has linked actions for another toolbar.
  8924. No - Insert conflicting bands in same submenu
  8925. Notes:
  8926. ------------------------------------------------------------------------------*/
  8927. DEFINE VARIABLE lCreateSubMenu AS LOGICAL NO-UNDO.
  8928. {get CreateSubMenuOnConflict lCreateSubMenu}.
  8929. RETURN lCreateSubMenu.
  8930. END FUNCTION.
  8931. /* _UIB-CODE-BLOCK-END */
  8932. &ANALYZE-RESUME
  8933. &ENDIF
  8934. &IF DEFINED(EXCLUDE-getDeactivateTargetOnHide) = 0 &THEN
  8935. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDeactivateTargetOnHide Procedure
  8936. FUNCTION getDeactivateTargetOnHide RETURNS LOGICAL
  8937. ( ) :
  8938. /*------------------------------------------------------------------------------
  8939. Purpose: Returns true if a target should be deactivated immediately on hide
  8940. If false the hidden targets are deactivated on view of another
  8941. target.
  8942. Notes:
  8943. ------------------------------------------------------------------------------*/
  8944. DEFINE VARIABLE lDeactivateTargetOnHide AS LOGICAL NO-UNDO.
  8945. {get DeactivateTargetOnHide lDeactivateTargetOnHide}.
  8946. RETURN lDeactivateTargetOnHide.
  8947. END FUNCTION.
  8948. /* _UIB-CODE-BLOCK-END */
  8949. &ANALYZE-RESUME
  8950. &ENDIF
  8951. &IF DEFINED(EXCLUDE-getDisabledActions) = 0 &THEN
  8952. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getDisabledActions Procedure
  8953. FUNCTION getDisabledActions RETURNS CHARACTER
  8954. ( ) :
  8955. /*------------------------------------------------------------------------------
  8956. Purpose: RETURNS a comma separated list of disabled actions.
  8957. Params: <NONE>
  8958. Notes: - The actions will be immediately disabled and subsequent calls
  8959. to enableActions will not enable them again. This makes it
  8960. possible to permanently disable actions independent of state
  8961. changes.
  8962. - If you remove actions from the list they will be enabled the next
  8963. time enableActions is used on them.
  8964. - Use the modifyDisabledActions to add or remove actions.
  8965. -----------------------------------------------------------------------------*/
  8966. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  8967. &SCOPED-DEFINE xpDisabledActions
  8968. {get DisabledActions cActions}.
  8969. &UNDEFINE xpDisabledActions
  8970. RETURN cActions.
  8971. END FUNCTION.
  8972. /* _UIB-CODE-BLOCK-END */
  8973. &ANALYZE-RESUME
  8974. &ENDIF
  8975. &IF DEFINED(EXCLUDE-getEdgePixels) = 0 &THEN
  8976. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getEdgePixels Procedure
  8977. FUNCTION getEdgePixels RETURNS INTEGER
  8978. ( /* parameter-definitions */ ) :
  8979. /*------------------------------------------------------------------------------
  8980. Purpose: Returns the number of pixels that should be used to draw the
  8981. rectangle around the buttons on a SmartPanel/toolbar.
  8982. (max 2 on toolbar...)
  8983. Params: <none>
  8984. ------------------------------------------------------------------------------*/
  8985. DEFINE VARIABLE iValue AS INTEGER NO-UNDO.
  8986. &SCOPED-DEFINE xpEdgePixels
  8987. {get EdgePixels iValue}.
  8988. &UNDEFINE xpEdgePixels
  8989. RETURN iValue.
  8990. END FUNCTION.
  8991. /* _UIB-CODE-BLOCK-END */
  8992. &ANALYZE-RESUME
  8993. &ENDIF
  8994. &IF DEFINED(EXCLUDE-getFlatButtons) = 0 &THEN
  8995. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getFlatButtons Procedure
  8996. FUNCTION getFlatButtons RETURNS LOGICAL
  8997. ( /* parameter-definitions */ ) :
  8998. /**
  8999. * @desc Get attribute
  9000. * @return attribute value true/false
  9001. */
  9002. /*------------------------------------------------------------------------------
  9003. Purpose: Use flat buttons
  9004. Notes: NOT IN USE
  9005. ------------------------------------------------------------------------------*/
  9006. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  9007. {get FlatButtons lValue}.
  9008. RETURN lValue.
  9009. END FUNCTION.
  9010. /* _UIB-CODE-BLOCK-END */
  9011. &ANALYZE-RESUME
  9012. &ENDIF
  9013. &IF DEFINED(EXCLUDE-getHiddenActions) = 0 &THEN
  9014. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getHiddenActions Procedure
  9015. FUNCTION getHiddenActions RETURNS CHARACTER
  9016. ( /* parameter-definitions */ ) :
  9017. /*------------------------------------------------------------------------------
  9018. Purpose: RETURNS a comma separated list of hidden actions.
  9019. Params: <NONE>
  9020. Notes: - The actions will be immediately hidden or viewed.
  9021. ------------------------------------------------------------------------------*/
  9022. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  9023. &SCOPED-DEFINE xpHiddenActions
  9024. {get HiddenActions cActions}.
  9025. &UNDEFINE xpHiddenActions
  9026. RETURN cActions.
  9027. END FUNCTION.
  9028. /* _UIB-CODE-BLOCK-END */
  9029. &ANALYZE-RESUME
  9030. &ENDIF
  9031. &IF DEFINED(EXCLUDE-getHiddenMenuBands) = 0 &THEN
  9032. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getHiddenMenuBands Procedure
  9033. FUNCTION getHiddenMenuBands RETURNS CHARACTER
  9034. ( /* parameter-definitions */ ) :
  9035. /*------------------------------------------------------------------------------
  9036. Purpose:
  9037. Notes:
  9038. ------------------------------------------------------------------------------*/
  9039. DEFINE VARIABLE cHiddenBands AS CHARACTER NO-UNDO.
  9040. {get HiddenMenuBands cHiddenBands}.
  9041. RETURN cHiddenBands.
  9042. END FUNCTION.
  9043. /* _UIB-CODE-BLOCK-END */
  9044. &ANALYZE-RESUME
  9045. &ENDIF
  9046. &IF DEFINED(EXCLUDE-getHiddenToolbarBands) = 0 &THEN
  9047. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getHiddenToolbarBands Procedure
  9048. FUNCTION getHiddenToolbarBands RETURNS CHARACTER
  9049. ( /* parameter-definitions */ ) :
  9050. /*------------------------------------------------------------------------------
  9051. Purpose:
  9052. Notes:
  9053. ------------------------------------------------------------------------------*/
  9054. DEFINE VARIABLE cHiddenBands AS CHARACTER NO-UNDO.
  9055. {get HiddenToolbarBands cHiddenBands}.
  9056. RETURN cHiddenBands.
  9057. END FUNCTION.
  9058. /* _UIB-CODE-BLOCK-END */
  9059. &ANALYZE-RESUME
  9060. &ENDIF
  9061. &IF DEFINED(EXCLUDE-getImagePath) = 0 &THEN
  9062. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getImagePath Procedure
  9063. FUNCTION getImagePath RETURNS CHARACTER
  9064. ( ) :
  9065. /*------------------------------------------------------------------------------
  9066. Purpose: Returns the opsys path of the images
  9067. Notes:
  9068. ------------------------------------------------------------------------------*/
  9069. DEFINE VARIABLE cImagePath AS CHARACTER NO-UNDO.
  9070. {get ImagePath cImagePath}.
  9071. RETURN cImagePath.
  9072. END FUNCTION.
  9073. /* _UIB-CODE-BLOCK-END */
  9074. &ANALYZE-RESUME
  9075. &ENDIF
  9076. &IF DEFINED(EXCLUDE-getLinkTargetNames) = 0 &THEN
  9077. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getLinkTargetNames Procedure
  9078. FUNCTION getLinkTargetNames RETURNS CHARACTER
  9079. ( ) :
  9080. /*------------------------------------------------------------------------------
  9081. Purpose: Returns a list of the supported toolbar links. This is based on
  9082. either the tool's specified item-Link, or the Category the tools
  9083. belong to.
  9084. Params: <none>
  9085. Returns: CHARACTER
  9086. ------------------------------------------------------------------------------*/
  9087. DEFINE VARIABLE cLinks AS CHARACTER NO-UNDO.
  9088. {get LinkTargetNames cLinks}.
  9089. RETURN cLinks.
  9090. END FUNCTION.
  9091. /* _UIB-CODE-BLOCK-END */
  9092. &ANALYZE-RESUME
  9093. &ENDIF
  9094. &IF DEFINED(EXCLUDE-getMenu) = 0 &THEN
  9095. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMenu Procedure
  9096. FUNCTION getMenu /**
  9097. * @desc Get attribute
  9098. * @return attribute value true/false
  9099. */
  9100. RETURNS LOGICAL
  9101. ( /* parameter-definitions */ ) :
  9102. /*------------------------------------------------------------------------------
  9103. Purpose: Returns TRUE if a menu is to be generated
  9104. Notes:
  9105. ------------------------------------------------------------------------------*/
  9106. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  9107. {get Menu lValue}.
  9108. RETURN lValue.
  9109. END FUNCTION.
  9110. /* _UIB-CODE-BLOCK-END */
  9111. &ANALYZE-RESUME
  9112. &ENDIF
  9113. &IF DEFINED(EXCLUDE-getMenuMergeOrder) = 0 &THEN
  9114. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMenuMergeOrder Procedure
  9115. FUNCTION getMenuMergeOrder RETURNS INTEGER
  9116. ( ) :
  9117. /*------------------------------------------------------------------------------
  9118. Purpose: Decides the order of which the menus will be merged with other
  9119. toolbar instances.
  9120. Parameters: INPUT piOrder
  9121. Notes:
  9122. ------------------------------------------------------------------------------*/
  9123. DEFINE VARIABLE iOrder AS INTEGER NO-UNDO.
  9124. {get MenuMergeOrder iOrder}.
  9125. RETURN iOrder.
  9126. END FUNCTION.
  9127. /* _UIB-CODE-BLOCK-END */
  9128. &ANALYZE-RESUME
  9129. &ENDIF
  9130. &IF DEFINED(EXCLUDE-getMinHeight) = 0 &THEN
  9131. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMinHeight Procedure
  9132. FUNCTION getMinHeight RETURNS DECIMAL
  9133. ( /* parameter-definitions */ ) :
  9134. /*------------------------------------------------------------------------------
  9135. Purpose:
  9136. Notes:
  9137. ------------------------------------------------------------------------------*/
  9138. DEFINE VARIABLE dHeight AS DECIMAL NO-UNDO.
  9139. &SCOPED-DEFINE xpMinHeight
  9140. {get MinHeight dHeight}.
  9141. &UNDEFINE xpMinHeight
  9142. RETURN dHeight.
  9143. END FUNCTION.
  9144. /* _UIB-CODE-BLOCK-END */
  9145. &ANALYZE-RESUME
  9146. &ENDIF
  9147. &IF DEFINED(EXCLUDE-getMinWidth) = 0 &THEN
  9148. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getMinWidth Procedure
  9149. FUNCTION getMinWidth RETURNS DECIMAL
  9150. ( /* parameter-definitions */ ) :
  9151. /*------------------------------------------------------------------------------
  9152. Purpose:
  9153. Notes:
  9154. ------------------------------------------------------------------------------*/
  9155. DEFINE VARIABLE dWidth AS DECIMAL NO-UNDO.
  9156. &SCOPED-DEFINE xpMinWidth
  9157. {get MinWidth dWidth}.
  9158. &UNDEFINE xpMinWidth
  9159. RETURN dWidth.
  9160. END FUNCTION.
  9161. /* _UIB-CODE-BLOCK-END */
  9162. &ANALYZE-RESUME
  9163. &ENDIF
  9164. &IF DEFINED(EXCLUDE-getNavigationTarget) = 0 &THEN
  9165. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getNavigationTarget Procedure
  9166. FUNCTION getNavigationTarget RETURNS CHARACTER
  9167. ( ) :
  9168. /**
  9169. * @desc Get attribute
  9170. * @return attribute value true/false
  9171. */
  9172. /*------------------------------------------------------------------------------
  9173. Purpose: Returns in character format the handle(s) of this object's
  9174. Navigation-Target(s)
  9175. Params: none
  9176. ------------------------------------------------------------------------------*/
  9177. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  9178. {get NavigationTarget cTarget}.
  9179. RETURN cTarget.
  9180. END FUNCTION.
  9181. /* _UIB-CODE-BLOCK-END */
  9182. &ANALYZE-RESUME
  9183. &ENDIF
  9184. &IF DEFINED(EXCLUDE-getNavigationTargetEvents) = 0 &THEN
  9185. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getNavigationTargetEvents Procedure
  9186. FUNCTION getNavigationTargetEvents RETURNS CHARACTER
  9187. ( ) :
  9188. /*------------------------------------------------------------------------------
  9189. Purpose: Returns a comma-separated list of the events this object wants
  9190. to subscribe to in its NavigationTarget
  9191. Params: <none>
  9192. ------------------------------------------------------------------------------*/
  9193. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  9194. {get NavigationTargetEvents cEvents}.
  9195. RETURN cEvents.
  9196. END FUNCTION.
  9197. /* _UIB-CODE-BLOCK-END */
  9198. &ANALYZE-RESUME
  9199. &ENDIF
  9200. &IF DEFINED(EXCLUDE-getNavigationTargetName) = 0 &THEN
  9201. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getNavigationTargetName Procedure
  9202. FUNCTION getNavigationTargetName RETURNS CHARACTER
  9203. ( ) :
  9204. /*------------------------------------------------------------------------------
  9205. Purpose: Returns the ObjectName of the Data Object to be navigated by this
  9206. panel. This would be set if the Navigation-Target is an SBO
  9207. or other Container with DataObjects.
  9208. Params: <none>
  9209. ------------------------------------------------------------------------------*/
  9210. DEFINE VARIABLE cTargetName AS CHAR NO-UNDO.
  9211. {get NavigationTargetName cTargetName}.
  9212. RETURN cTargetName.
  9213. END FUNCTION.
  9214. /* _UIB-CODE-BLOCK-END */
  9215. &ANALYZE-RESUME
  9216. &ENDIF
  9217. &IF DEFINED(EXCLUDE-getPanelState) = 0 &THEN
  9218. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPanelState Procedure
  9219. FUNCTION getPanelState RETURNS CHARACTER
  9220. ( ) :
  9221. /*------------------------------------------------------------------------------
  9222. Purpose: DEPRECATED -- Returns the current state of the SmartPanel.
  9223. Params: <none>
  9224. Notes: DEPRECATED in the sense that the toolbar disabling/enabling
  9225. has been replaced by rule based state management. The function
  9226. is still callable and may still be called in odd cases.
  9227. ------------------------------------------------------------------------------*/
  9228. DEFINE VARIABLE cState AS CHARACTER NO-UNDO.
  9229. &SCOPED-DEFINE xpPanelState
  9230. {get PanelState cState}.
  9231. &UNDEFINE xpPanelState
  9232. RETURN cState.
  9233. END FUNCTION.
  9234. /* _UIB-CODE-BLOCK-END */
  9235. &ANALYZE-RESUME
  9236. &ENDIF
  9237. &IF DEFINED(EXCLUDE-getPanelType) = 0 &THEN
  9238. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getPanelType Procedure
  9239. FUNCTION getPanelType RETURNS CHARACTER
  9240. ( ) :
  9241. /*------------------------------------------------------------------------------
  9242. Purpose: Returns the type of Panel: Navigation, Save, Update
  9243. Notes: Is defined in toolbar class for backwards compatibility since it
  9244. was defined as an instance property.
  9245. - The value for the toolbar is 'toolbar'.
  9246. ------------------------------------------------------------------------------*/
  9247. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  9248. {get PanelType cType}.
  9249. RETURN cType.
  9250. END FUNCTION.
  9251. /* _UIB-CODE-BLOCK-END */
  9252. &ANALYZE-RESUME
  9253. &ENDIF
  9254. &IF DEFINED(EXCLUDE-getRemoveMenuOnHide) = 0 &THEN
  9255. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getRemoveMenuOnHide Procedure
  9256. FUNCTION getRemoveMenuOnHide RETURNS LOGICAL
  9257. ( ) :
  9258. /*------------------------------------------------------------------------------
  9259. Purpose: Decides whether the the menus should be removed from the menubar
  9260. on hide of the toolbar.
  9261. Parameters: INPUT plRemove
  9262. Notes:
  9263. ------------------------------------------------------------------------------*/
  9264. DEFINE VARIABLE lRemoveMenu AS LOGICAL NO-UNDO.
  9265. {get RemoveMenuOnhide lRemoveMenu}.
  9266. RETURN lRemoveMenu.
  9267. END FUNCTION.
  9268. /* _UIB-CODE-BLOCK-END */
  9269. &ANALYZE-RESUME
  9270. &ENDIF
  9271. &IF DEFINED(EXCLUDE-getShowBorder) = 0 &THEN
  9272. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getShowBorder Procedure
  9273. FUNCTION getShowBorder RETURNS LOGICAL
  9274. ( /* parameter-definitions */ ) :
  9275. /*------------------------------------------------------------------------------
  9276. Purpose: True if a three-d border is to be used around the buttons
  9277. and as a delimiter when "RULE" is specified in createToolbar
  9278. Notes:
  9279. ------------------------------------------------------------------------------*/
  9280. DEFINE VARIABLE lShowBorder AS LOGICAL NO-UNDO.
  9281. {get ShowBorder lShowBorder}.
  9282. RETURN lShowBorder.
  9283. END FUNCTION.
  9284. /* _UIB-CODE-BLOCK-END */
  9285. &ANALYZE-RESUME
  9286. &ENDIF
  9287. &IF DEFINED(EXCLUDE-getSubModules) = 0 &THEN
  9288. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getSubModules Procedure
  9289. FUNCTION getSubModules RETURNS CHARACTER
  9290. ( ) :
  9291. /*------------------------------------------------------------------------------
  9292. Purpose:
  9293. Notes: NOT USED
  9294. ------------------------------------------------------------------------------*/
  9295. DEFINE VARIABLE cSubModules AS CHAR NO-UNDO.
  9296. {get SubModules cSubModules}.
  9297. RETURN cSubModules.
  9298. END FUNCTION.
  9299. /* _UIB-CODE-BLOCK-END */
  9300. &ANALYZE-RESUME
  9301. &ENDIF
  9302. &IF DEFINED(EXCLUDE-getTableioTarget) = 0 &THEN
  9303. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTableioTarget Procedure
  9304. FUNCTION getTableioTarget RETURNS CHARACTER
  9305. ( ) :
  9306. /*------------------------------------------------------------------------------
  9307. Purpose: Returns in CHARACTER form a list of the handles of the object's
  9308. TableIO Targets
  9309. Params: <none>
  9310. ------------------------------------------------------------------------------*/
  9311. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  9312. {get TableIOTarget cTarget}.
  9313. RETURN cTarget.
  9314. END FUNCTION.
  9315. /* _UIB-CODE-BLOCK-END */
  9316. &ANALYZE-RESUME
  9317. &ENDIF
  9318. &IF DEFINED(EXCLUDE-getTableioTargetEvents) = 0 &THEN
  9319. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTableioTargetEvents Procedure
  9320. FUNCTION getTableioTargetEvents RETURNS CHARACTER
  9321. ( ) :
  9322. /*------------------------------------------------------------------------------
  9323. Purpose: Returns a comma-separated list of the events this object wants
  9324. to subscribe to in its TableIO Target
  9325. Params: <none>
  9326. ------------------------------------------------------------------------------*/
  9327. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  9328. {get TableIOTargetEvents cEvents}.
  9329. RETURN cEvents.
  9330. END FUNCTION.
  9331. /* _UIB-CODE-BLOCK-END */
  9332. &ANALYZE-RESUME
  9333. &ENDIF
  9334. &IF DEFINED(EXCLUDE-getTableIOType) = 0 &THEN
  9335. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTableIOType Procedure
  9336. FUNCTION getTableIOType RETURNS CHARACTER
  9337. ( ) :
  9338. /*------------------------------------------------------------------------------
  9339. Purpose: Returns in CHARACTER form a list of the handles of the object's
  9340. TableIO Targets
  9341. Params: <none>
  9342. Notes: This is the same as PanelType in the update panel
  9343. ------------------------------------------------------------------------------*/
  9344. DEFINE VARIABLE cType AS CHARACTER NO-UNDO.
  9345. {get TableIOType cType}.
  9346. RETURN cType.
  9347. END FUNCTION.
  9348. /* _UIB-CODE-BLOCK-END */
  9349. &ANALYZE-RESUME
  9350. &ENDIF
  9351. &IF DEFINED(EXCLUDE-getTableioUndoNew) = 0 &THEN
  9352. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTableioUndoNew Procedure
  9353. FUNCTION getTableioUndoNew RETURNS LOGICAL
  9354. ( ) :
  9355. /*------------------------------------------------------------------------------
  9356. Purpose: Returns true if undochange also should undo new records instead
  9357. of cancel.
  9358. Notes: True if the CANCEL action does not exists or is hidden
  9359. in the toolbar.
  9360. ------------------------------------------------------------------------------*/
  9361. DEFINE VARIABLE cHiddenActions AS CHARACTER NO-UNDO.
  9362. IF {fnarg canFindAction 'CANCEL':U} THEN
  9363. DO:
  9364. {get HiddenActions cHiddenActions}.
  9365. RETURN LOOKUP('CANCEL',cHiddenActions) > 0.
  9366. END.
  9367. RETURN TRUE.
  9368. END FUNCTION.
  9369. /* _UIB-CODE-BLOCK-END */
  9370. &ANALYZE-RESUME
  9371. &ENDIF
  9372. &IF DEFINED(EXCLUDE-getTargetProcedure) = 0 &THEN
  9373. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getTargetProcedure Procedure
  9374. FUNCTION getTargetProcedure RETURNS HANDLE
  9375. ( ) :
  9376. /*------------------------------------------------------------------------------
  9377. Purpose: Temporary fn to return the source-procedure's target-procedure
  9378. to a function such as colValues in an SBO who needs to know who
  9379. the *real* caller object is.
  9380. Notes:
  9381. ------------------------------------------------------------------------------*/
  9382. RETURN ghTargetProcedure.
  9383. END FUNCTION.
  9384. /* _UIB-CODE-BLOCK-END */
  9385. &ANALYZE-RESUME
  9386. &ENDIF
  9387. &IF DEFINED(EXCLUDE-getToolbar) = 0 &THEN
  9388. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbar Procedure
  9389. FUNCTION getToolbar /**
  9390. * @desc Get attribute
  9391. * @return attribute value true/false
  9392. */
  9393. RETURNS LOGICAL
  9394. ( /* parameter-definitions */ ) :
  9395. /*------------------------------------------------------------------------------
  9396. Purpose: Return TRUE if the toolbar is to be created
  9397. Notes:
  9398. ------------------------------------------------------------------------------*/
  9399. DEFINE VARIABLE lValue AS LOGICAL NO-UNDO.
  9400. {get Toolbar lValue}.
  9401. RETURN lValue.
  9402. END FUNCTION.
  9403. /* _UIB-CODE-BLOCK-END */
  9404. &ANALYZE-RESUME
  9405. &ENDIF
  9406. &IF DEFINED(EXCLUDE-getToolbarAutoSize) = 0 &THEN
  9407. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarAutoSize Procedure
  9408. FUNCTION getToolbarAutoSize RETURNS LOGICAL
  9409. ( /* parameter-definitions */ ) :
  9410. /*------------------------------------------------------------------------------
  9411. Purpose: Returns whether the toolbar should be auto-sized to the width of
  9412. the window at run-time.
  9413. Notes:
  9414. ------------------------------------------------------------------------------*/
  9415. DEFINE VARIABLE lToolbarAutoSize AS LOGICAL NO-UNDO.
  9416. {get ToolbarAutoSize lToolbarAutoSize}.
  9417. RETURN lToolbarAutoSize.
  9418. END FUNCTION.
  9419. /* _UIB-CODE-BLOCK-END */
  9420. &ANALYZE-RESUME
  9421. &ENDIF
  9422. &IF DEFINED(EXCLUDE-getToolbarBands) = 0 &THEN
  9423. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarBands Procedure
  9424. FUNCTION getToolbarBands RETURNS CHARACTER
  9425. ( /* parameter-definitions */ ) :
  9426. /*------------------------------------------------------------------------------
  9427. Purpose: Returns the toolbar bands selected in the Instance Properties.
  9428. Notes: NOt in use
  9429. ------------------------------------------------------------------------------*/
  9430. DEFINE VARIABLE cToolbarBands AS CHARACTER NO-UNDO.
  9431. {get ToolbarBands cToolbarBands}.
  9432. RETURN cToolbarBands.
  9433. END FUNCTION.
  9434. /* _UIB-CODE-BLOCK-END */
  9435. &ANALYZE-RESUME
  9436. &ENDIF
  9437. &IF DEFINED(EXCLUDE-getToolbarDrawDirection) = 0 &THEN
  9438. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarDrawDirection Procedure
  9439. FUNCTION getToolbarDrawDirection RETURNS CHARACTER
  9440. ( /* parameter-definitions */ ) :
  9441. /*------------------------------------------------------------------------------
  9442. Purpose: Returns the draw direction of the toolbar (horizontal or vertical).
  9443. Notes:
  9444. ------------------------------------------------------------------------------*/
  9445. DEFINE VARIABLE cToolbarDrawDirection AS CHARACTER NO-UNDO.
  9446. {get ToolbarDrawDirection cToolbarDrawDirection}.
  9447. RETURN cToolbarDrawDirection.
  9448. END FUNCTION.
  9449. /* _UIB-CODE-BLOCK-END */
  9450. &ANALYZE-RESUME
  9451. &ENDIF
  9452. &IF DEFINED(EXCLUDE-getToolbarHeightPxl) = 0 &THEN
  9453. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarHeightPxl Procedure
  9454. FUNCTION getToolbarHeightPxl RETURNS INTEGER
  9455. ( ) :
  9456. /*------------------------------------------------------------------------------
  9457. Purpose: Calculate the toolbar height from the three Properties
  9458. ToolHeightPXL, ToolbarMarginPxl and ShowBorder.
  9459. Notes:
  9460. ------------------------------------------------------------------------------*/
  9461. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  9462. DEFINE VARIABLE iToolHeightPxl AS INTEGER NO-UNDO.
  9463. DEFINE VARIABLE iToolMarginPxl AS INTEGER NO-UNDO.
  9464. &SCOPED-DEFINE xp-assign
  9465. {get ToolMarginPxl iToolMarginPxl}
  9466. {get ToolHeightPxl iToolHeightPxl}.
  9467. &UNDEFINE xp-assign
  9468. /* If margin is less than 2, we must make space for the border */
  9469. IF iToolMarginPxl < 2 THEN
  9470. DO:
  9471. {get ShowBorder lShowBorder}.
  9472. IF lShowBorder THEN
  9473. iToolMarginPxl = 2.
  9474. END. /* if ToolMargin < 2 */
  9475. RETURN (iToolMarginPxl * 2) + iToolHeightPxl.
  9476. END FUNCTION.
  9477. /* _UIB-CODE-BLOCK-END */
  9478. &ANALYZE-RESUME
  9479. &ENDIF
  9480. &IF DEFINED(EXCLUDE-getToolbarMinWidth) = 0 &THEN
  9481. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarMinWidth Procedure
  9482. FUNCTION getToolbarMinWidth RETURNS CHARACTER
  9483. ( ) :
  9484. /*------------------------------------------------------------------------------
  9485. Purpose: Min width
  9486. Notes: Use getMinWidth - Kept for backwards compatibility
  9487. ------------------------------------------------------------------------------*/
  9488. RETURN {fn getMinWidth}.
  9489. END FUNCTION.
  9490. /* _UIB-CODE-BLOCK-END */
  9491. &ANALYZE-RESUME
  9492. &ENDIF
  9493. &IF DEFINED(EXCLUDE-getToolbarParentMenu) = 0 &THEN
  9494. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarParentMenu Procedure
  9495. FUNCTION getToolbarParentMenu RETURNS CHARACTER
  9496. ( /* parameter-definitions */ ) :
  9497. /*------------------------------------------------------------------------------
  9498. Purpose: Returns the toolbar parent menu selected in the Instance Properties.
  9499. Notes: Only required if any toolbar menus need to be added under a specific
  9500. submenu, which will also be created if it does not exist.
  9501. ------------------------------------------------------------------------------*/
  9502. DEFINE VARIABLE cToolbarParentMenu AS CHARACTER NO-UNDO.
  9503. {get ToolbarParentMenu cToolbarParentMenu}.
  9504. RETURN cToolbarParentMenu.
  9505. END FUNCTION.
  9506. /* _UIB-CODE-BLOCK-END */
  9507. &ANALYZE-RESUME
  9508. &ENDIF
  9509. &IF DEFINED(EXCLUDE-getToolbarTarget) = 0 &THEN
  9510. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarTarget Procedure
  9511. FUNCTION getToolbarTarget RETURNS CHARACTER
  9512. ( ):
  9513. /*------------------------------------------------------------------------------
  9514. Purpose: Returns the handle of the object's toolbar-target.
  9515. Params: <none>
  9516. Notes:
  9517. ------------------------------------------------------------------------------*/
  9518. DEFINE VARIABLE cTarget AS CHARACTER NO-UNDO.
  9519. {get ToolbarTarget cTarget}.
  9520. RETURN cTarget.
  9521. END FUNCTION.
  9522. /* _UIB-CODE-BLOCK-END */
  9523. &ANALYZE-RESUME
  9524. &ENDIF
  9525. &IF DEFINED(EXCLUDE-getToolbarTargetEvents) = 0 &THEN
  9526. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarTargetEvents Procedure
  9527. FUNCTION getToolbarTargetEvents RETURNS CHARACTER
  9528. ( ) :
  9529. /*------------------------------------------------------------------------------
  9530. Purpose: Returns the list of events to be subscribed to in the
  9531. Toolbar-Target.
  9532. Params: <none>
  9533. Notes:
  9534. ------------------------------------------------------------------------------*/
  9535. DEFINE VARIABLE cEvents AS CHARACTER NO-UNDO.
  9536. {get ToolbarTargetEvents cEvents}.
  9537. RETURN cEvents.
  9538. END FUNCTION.
  9539. /* _UIB-CODE-BLOCK-END */
  9540. &ANALYZE-RESUME
  9541. &ENDIF
  9542. &IF DEFINED(EXCLUDE-getToolbarWidthPxl) = 0 &THEN
  9543. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolbarWidthPxl Procedure
  9544. FUNCTION getToolbarWidthPxl RETURNS INTEGER
  9545. ( ) :
  9546. /*------------------------------------------------------------------------------
  9547. Purpose: Calculate the toolbar width from the three Properties
  9548. ToolMaxWidthPXL, ToolbarMarginPxl and ShowBorder.
  9549. Notes: Used if toolbar is vertical aligned and assumes a single column.
  9550. ------------------------------------------------------------------------------*/
  9551. DEFINE VARIABLE lShowBorder AS LOG NO-UNDO.
  9552. DEFINE VARIABLE iToolWidthPxl AS INTEGER NO-UNDO.
  9553. DEFINE VARIABLE iToolMarginPxl AS INTEGER NO-UNDO.
  9554. DEFINE VARIABLE iToolMaxWidthPxl AS INTEGER NO-UNDO.
  9555. &SCOPED-DEFINE xp-assign
  9556. {get ToolMarginPxl iToolMarginPxl}
  9557. {get ToolWidthPxl iToolWidthPxl}
  9558. {get ToolMaxWidthPxl iToolMaxWidthPxl}.
  9559. &UNDEFINE xp-assign
  9560. /* If margin is less than 2, we must make space for the border */
  9561. IF iToolMarginPxl < 2 THEN
  9562. DO:
  9563. {get ShowBorder lShowBorder}.
  9564. IF lShowBorder THEN
  9565. iToolMarginPxl = 2.
  9566. END. /* if ToolMargin < 2 */
  9567. RETURN (iToolMarginPxl * 2) + (IF iToolMaxWidthPxl > iToolWidthPxl THEN iToolMaxWidthPxl ELSE iToolWidthPxl).
  9568. END FUNCTION.
  9569. /* _UIB-CODE-BLOCK-END */
  9570. &ANALYZE-RESUME
  9571. &ENDIF
  9572. &IF DEFINED(EXCLUDE-getToolHeightPxl) = 0 &THEN
  9573. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolHeightPxl Procedure
  9574. FUNCTION getToolHeightPxl RETURNS INTEGER
  9575. ( /* parameter-definitions */ ) :
  9576. /*------------------------------------------------------------------------------
  9577. Purpose:
  9578. Notes:
  9579. ------------------------------------------------------------------------------*/
  9580. DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
  9581. {get ToolHeightPxl iVar}.
  9582. RETURN iVar.
  9583. END FUNCTION.
  9584. /* _UIB-CODE-BLOCK-END */
  9585. &ANALYZE-RESUME
  9586. &ENDIF
  9587. &IF DEFINED(EXCLUDE-getToolMarginPxl) = 0 &THEN
  9588. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolMarginPxl Procedure
  9589. FUNCTION getToolMarginPxl RETURNS INTEGER
  9590. ( /* parameter-definitions */ ) :
  9591. /*------------------------------------------------------------------------------
  9592. Purpose:
  9593. Notes:
  9594. ------------------------------------------------------------------------------*/
  9595. DEFINE VARIABLE iMargin AS INTEGER NO-UNDO.
  9596. &SCOPED-DEFINE xpToolMarginPxl
  9597. {get ToolMarginPxl iMargin}.
  9598. &UNDEFINE xpToolMarginPxl
  9599. RETURN iMargin.
  9600. END FUNCTION.
  9601. /* _UIB-CODE-BLOCK-END */
  9602. &ANALYZE-RESUME
  9603. &ENDIF
  9604. &IF DEFINED(EXCLUDE-getToolMaxWidthPxl) = 0 &THEN
  9605. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolMaxWidthPxl Procedure
  9606. FUNCTION getToolMaxWidthPxl RETURNS INTEGER
  9607. ( /* parameter-definitions */ ) :
  9608. /*------------------------------------------------------------------------------
  9609. Purpose:
  9610. Notes:
  9611. ------------------------------------------------------------------------------*/
  9612. DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
  9613. {get ToolMaxWidthPxl iVar}.
  9614. RETURN iVar.
  9615. END FUNCTION.
  9616. /* _UIB-CODE-BLOCK-END */
  9617. &ANALYZE-RESUME
  9618. &ENDIF
  9619. &IF DEFINED(EXCLUDE-getToolSeparatorPxl) = 0 &THEN
  9620. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolSeparatorPxl Procedure
  9621. FUNCTION getToolSeparatorPxl RETURNS INTEGER
  9622. ( /* parameter-definitions */ ) :
  9623. /*------------------------------------------------------------------------------
  9624. Purpose:
  9625. Notes:
  9626. ------------------------------------------------------------------------------*/
  9627. DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
  9628. {get ToolSeparatorPxl iVar}.
  9629. RETURN iVar.
  9630. END FUNCTION.
  9631. /* _UIB-CODE-BLOCK-END */
  9632. &ANALYZE-RESUME
  9633. &ENDIF
  9634. &IF DEFINED(EXCLUDE-getToolSpacingPxl) = 0 &THEN
  9635. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolSpacingPxl Procedure
  9636. FUNCTION getToolSpacingPxl RETURNS INTEGER
  9637. ( /* parameter-definitions */ ) :
  9638. /*------------------------------------------------------------------------------
  9639. Purpose:
  9640. Notes:
  9641. ------------------------------------------------------------------------------*/
  9642. DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
  9643. {get ToolSpacingPxl iVar}.
  9644. RETURN iVar.
  9645. END FUNCTION.
  9646. /* _UIB-CODE-BLOCK-END */
  9647. &ANALYZE-RESUME
  9648. &ENDIF
  9649. &IF DEFINED(EXCLUDE-getToolWidthPxl) = 0 &THEN
  9650. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getToolWidthPxl Procedure
  9651. FUNCTION getToolWidthPxl RETURNS INTEGER
  9652. ( /* parameter-definitions */ ) :
  9653. /*------------------------------------------------------------------------------
  9654. Purpose:
  9655. Notes:
  9656. ------------------------------------------------------------------------------*/
  9657. DEFINE VARIABLE iVar AS INTEGER NO-UNDO.
  9658. {get ToolWidthPxl iVar}.
  9659. RETURN iVar.
  9660. END FUNCTION.
  9661. /* _UIB-CODE-BLOCK-END */
  9662. &ANALYZE-RESUME
  9663. &ENDIF
  9664. &IF DEFINED(EXCLUDE-getWindow) = 0 &THEN
  9665. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION getWindow Procedure
  9666. FUNCTION getWindow RETURNS HANDLE
  9667. ( ) :
  9668. /*------------------------------------------------------------------------------
  9669. Purpose: Return the Window handle where the toolbar is
  9670. Notes:
  9671. ------------------------------------------------------------------------------*/
  9672. DEFINE VARIABLE hContainer AS HANDLE NO-UNDO.
  9673. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  9674. DEFINE VARIABLE cUIBMode AS CHARACTER NO-UNDO.
  9675. &SCOPED-DEFINE xp-assign
  9676. {get ContainerHandle hContainer}
  9677. {get UIBMode cUIBMode}.
  9678. &UNDEFINE xp-assign
  9679. IF cUIBmode = "":U THEN
  9680. DO:
  9681. {get ContainerSource hContainerSource}.
  9682. IF VALID-HANDLE(hContainerSource) THEN
  9683. DO:
  9684. {get ContainerHandle hContainer hContainerSource}.
  9685. /* If this is not a window loop thru the parents until a window is found */
  9686. DO WHILE VALID-HANDLE(hContainer) AND hContainer:TYPE <> "WINDOW":U:
  9687. hContainer = hContainer:PARENT.
  9688. END.
  9689. IF VALID-HANDLE(hContainer) THEN
  9690. CURRENT-WINDOW = hContainer.
  9691. RETURN hContainer.
  9692. END.
  9693. END.
  9694. ELSE
  9695. DO WHILE VALID-HANDLE(hContainer):
  9696. IF hContainer:TYPE = "WINDOW":U THEN
  9697. RETURN hContainer.
  9698. hContainer = hContainer:PARENT.
  9699. END.
  9700. RETURN ?.
  9701. END FUNCTION.
  9702. /* _UIB-CODE-BLOCK-END */
  9703. &ANALYZE-RESUME
  9704. &ENDIF
  9705. &IF DEFINED(EXCLUDE-hasActiveGATarget) = 0 &THEN
  9706. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION hasActiveGATarget Procedure
  9707. FUNCTION hasActiveGATarget RETURNS LOGICAL
  9708. (phObject AS HANDLE) :
  9709. /*------------------------------------------------------------------------------
  9710. Purpose: Check if any group assign targets are active.
  9711. Pparameters: phObject - Procedure object that is tableioTarget and potential
  9712. GroupAssignTarget
  9713. Notes:
  9714. ------------------------------------------------------------------------------*/
  9715. DEFINE VARIABLE cLinkHandles AS CHAR NO-UNDO.
  9716. DEFINE VARIABLE iLink AS INT NO-UNDO.
  9717. DEFINE VARIABLE lHidden AS LOG NO-UNDO.
  9718. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  9719. cLinkHandles = DYNAMIC-FUNCTION("getGroupAssignTarget":U IN phObject)
  9720. NO-ERROR.
  9721. IF cLinkHandles <> "":U THEN
  9722. DO iLink = 1 TO NUM-ENTRIES(cLinkHandles):
  9723. hObject = WIDGET-HANDLE(ENTRY(iLink,cLinkHandles)).
  9724. IF VALID-HANDLE(hObject) THEN
  9725. DO:
  9726. {get ObjectHidden lHidden hObject}.
  9727. IF NOT lHidden THEN
  9728. RETURN TRUE.
  9729. ELSE IF {fnarg hasActiveGATarget hObject} THEN
  9730. RETURN TRUE.
  9731. END. /* valid(hObject) */
  9732. END.
  9733. RETURN FALSE.
  9734. END FUNCTION.
  9735. /* _UIB-CODE-BLOCK-END */
  9736. &ANALYZE-RESUME
  9737. &ENDIF
  9738. &IF DEFINED(EXCLUDE-imageName) = 0 &THEN
  9739. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION imageName Procedure
  9740. FUNCTION imageName RETURNS CHARACTER
  9741. ( pcAction AS CHAR,
  9742. piNumber AS INT) :
  9743. /*------------------------------------------------------------------------------
  9744. Purpose: Return the image name
  9745. Parameters: pcaction - action name
  9746. piNumber - Image number 1 or 2
  9747. Notes:
  9748. ------------------------------------------------------------------------------*/
  9749. DEFINE VARIABLE cImagePath AS CHARACTER NO-UNDO.
  9750. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  9751. DEFINE VARIABLE cImage AS CHARACTER NO-UNDO.
  9752. {get UseRepository lUseRepository}.
  9753. IF NOT lUseRepository THEN
  9754. DO:
  9755. {get ImagePath cImagePath}.
  9756. cImagePath = (IF cImagePath <> "":U
  9757. THEN cImagePath + "/":U
  9758. ELSE "":U).
  9759. END.
  9760. RETURN cImagePath
  9761. + IF piNumber = 1
  9762. THEN {fnarg actionImage pcAction}
  9763. ELSE {fnarg actionImageAlternate pcAction}.
  9764. END FUNCTION.
  9765. /* _UIB-CODE-BLOCK-END */
  9766. &ANALYZE-RESUME
  9767. &ENDIF
  9768. &IF DEFINED(EXCLUDE-insertMenu) = 0 &THEN
  9769. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION insertMenu Procedure
  9770. FUNCTION insertMenu RETURNS LOGICAL
  9771. (pcParent AS CHARACTER,
  9772. pcActions AS CHARACTER,
  9773. plExpand AS LOGICAL,
  9774. pcBefore AS CHARACTER) :
  9775. /*------------------------------------------------------------------------------
  9776. Purpose: Create a set of menu-items or sub-menues under a parent menu
  9777. RETURNS true if ANY of the passed actions or its children
  9778. where added to the menu.
  9779. Parameters:
  9780. INPUT pcParent char - The unique action name of an already inserted action.
  9781. Blank means that this is the top level (menu-bar)
  9782. INPUT pcActions char - A comma separated list of actions or actionGroups
  9783. RULE specifies a delimiter.
  9784. INPUT plExpand log - TRUE - actions that are parents is expanded.
  9785. i.e that all the actions of the action group is added
  9786. as entries directly under this parent.
  9787. FALSE actions that are parents is created as
  9788. sub-menues and all their children is added as items
  9789. under it.
  9790. INPUT pcBefore - The unique action name of an already inserted sibling
  9791. of the same parent.
  9792. Notes: Menus are allowed based on whether their parent is allowed.
  9793. Parent is allowed if they are in the ActionGroups or actionIsMenu
  9794. if not actionIsMenu the action is added to the availmenuActions
  9795. At design time this procedure needs to run even if
  9796. getMenu() is false add the parent to the the AvailMenuActions
  9797. so they can be selected in the Instance Property dialog.
  9798. We always look up the parent (Note: the actionParent is the defined
  9799. parent not necessary the pcParent) and check if it's allowed and
  9800. add it to the AvailMenuActions if not actionIsMenu.
  9801. The function is called recursively for each action in the list
  9802. that isParent.
  9803. The function prevents double RULEs from being entered. This is to
  9804. avoid double RULEs where menus did not have any children, this will
  9805. will prevent double RULEs also when opassed in as parameters.
  9806. RULEs will be added first or last in case we are appending or
  9807. other calls are appending to the list. buildMenu() does the final
  9808. filtering to ensure that no RULE is first,last or double.
  9809. ------------------------------------------------------------------------------*/
  9810. DEFINE VARIABLE i AS INT NO-UNDO.
  9811. DEFINE VARIABLE cAction AS CHAR NO-UNDO.
  9812. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  9813. DEFINE VARIABLE hWindow AS HANDLE NO-UNDO.
  9814. DEFINE VARIABLE cChild AS CHAR NO-UNDO.
  9815. DEFINE VARIABLE cChildren AS CHAR NO-UNDO.
  9816. DEFINE VARIABLE cParent AS CHAR NO-UNDO.
  9817. DEFINE VARIABLE lParentIsMenu AS LOG NO-UNDO.
  9818. DEFINE VARIABLE cActionGroups AS CHAR NO-UNDO.
  9819. DEFINE VARIABLE cAvailMenuActions AS CHAR NO-UNDO.
  9820. DEFINE VARIABLE lRule AS LOG NO-UNDO.
  9821. DEFINE VARIABLE lMenu AS LOG NO-UNDO.
  9822. DEFINE VARIABLE lIsParent AS LOG NO-UNDO.
  9823. DEFINE VARIABLE cTableIOType AS CHAR NO-UNDO.
  9824. DEFINE VARIABLE cUIBMode AS CHAR NO-UNDO.
  9825. DEFINE VARIABLE lParentOK AS LOG NO-UNDO.
  9826. DEFINE VARIABLE lReturnOK AS LOG NO-UNDO.
  9827. &SCOPED-DEFINE xp-assign
  9828. {get TableIOType cTableIoType}
  9829. {get Menu lMenu}
  9830. {get UIBMode cUIBMode}.
  9831. &UNDEFINE xp-assign
  9832. /* No need to do this at run-time if menues is not used */
  9833. IF NOT lMenu AND cUIBMode <> "Design":U THEN
  9834. RETURN FALSE.
  9835. {get ActionGroups cActionGroups}.
  9836. DO i = 1 TO NUM-ENTRIES(pcActions):
  9837. cAction = ENTRY(i,pcActions).
  9838. /* Avoid double RULEs if some of the groups are skipped */
  9839. IF cAction = "RULE":U AND lRule THEN
  9840. NEXT.
  9841. cParent = {fnarg actionParent cAction}.
  9842. /* If the parent is a defined action we add it to the availableGroups
  9843. and check if it is allowed */
  9844. IF {fnarg canFindAction cParent} THEN
  9845. DO:
  9846. IF {fnarg actionIsMenu cParent} THEN
  9847. lParentOk = TRUE.
  9848. ELSE
  9849. DO:
  9850. lParentOk = CAN-DO(cActionGroups,cParent).
  9851. {get AvailMenuActions cAvailMenuActions}.
  9852. IF NOT CAN-DO(cAvailMenuActions,cParent) THEN
  9853. DO:
  9854. ASSIGN cAvailMenuActions =
  9855. cAvailMenuActions
  9856. + (IF cAvailMenuActions = "":U THEN "":U ELSE ",":U)
  9857. + cParent.
  9858. /* Set the available actionsgroups for the Instance Property dialog */
  9859. {set AvailMenuActions cAvailMenuActions}.
  9860. END. /* not in availMenu actions */
  9861. END.
  9862. END. /* if findAction(parent) */
  9863. ELSE /* Undefined parents are always inserted. */
  9864. lParentOk = TRUE.
  9865. /* Don't bother if this menu is not going to be added */
  9866. IF (CAN-DO(cActionGroups,cAction) OR {fnarg actionIsMenu cAction}) THEN
  9867. {fnarg actionPublishCreate cAction}.
  9868. lIsParent = {fnarg actionIsParent cAction}.
  9869. IF lMenu AND lParentOK
  9870. AND (cAction <> "UPDATE":U OR cTableIoType = "UPDATE":U)
  9871. AND ((NOT lIsParent)
  9872. OR
  9873. (lIsParent AND
  9874. (CAN-DO(cActionGroups,cAction) OR {fnarg actionIsMenu cAction}) AND
  9875. NOT plExpand)) THEN
  9876. DO:
  9877. DYNAMIC-FUNCTION("insertMenuTempTable":U IN TARGET-PROCEDURE,
  9878. pcParent,cAction,pcBefore).
  9879. ASSIGN
  9880. lReturnOK = TRUE
  9881. lRule = (cAction = "RULE":U).
  9882. END. /* if lmenu and parentok ...*/
  9883. /* If this is a parent we need to add the children */
  9884. IF lIsParent THEN
  9885. DO:
  9886. IF DYNAMIC-FUNCTION("insertMenu":U IN TARGET-PROCEDURE,
  9887. IF plExpand THEN pcParent ELSE cAction,
  9888. {fnarg actionChildren cAction},
  9889. NO,
  9890. ?) THEN
  9891. DO:
  9892. ASSIGN
  9893. lRule = FALSE
  9894. lReturnOK = TRUE.
  9895. END. /* if insertMenu */
  9896. /* This is the rare situation where the action is parent, but don't
  9897. have children at design-time so it did not get added in the recursive
  9898. call */
  9899. IF NOT {fnarg actionIsMenu cAction} THEN
  9900. DO:
  9901. {get AvailMenuActions cAvailMenuActions}.
  9902. IF NOT CAN-DO(cAvailMenuActions,cAction) THEN
  9903. DO:
  9904. ASSIGN cAvailMenuActions =
  9905. cAvailMenuActions
  9906. + (IF cAvailMenuActions = "":U THEN "":U ELSE ",":U)
  9907. + cAction.
  9908. /* Set the available actionsgroups for the Instance Property dialog */
  9909. {set AvailMenuActions cAvailMenuActions}.
  9910. END. /* not in availMenu actions */
  9911. END.
  9912. END. /* if lIsParent */
  9913. END. /* i = 1 to num-entries */
  9914. RETURN lReturnOk.
  9915. END FUNCTION.
  9916. /* _UIB-CODE-BLOCK-END */
  9917. &ANALYZE-RESUME
  9918. &ENDIF
  9919. &IF DEFINED(EXCLUDE-insertMenuTempTable) = 0 &THEN
  9920. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION insertMenuTempTable Procedure
  9921. FUNCTION insertMenuTempTable RETURNS LOGICAL PRIVATE
  9922. (pcParent AS CHAR,
  9923. pcName AS CHAR,
  9924. pcBefore AS CHAR) :
  9925. /*------------------------------------------------------------------------------
  9926. Purpose: Create the temp-table for the menu.
  9927. Parameters:
  9928. INPUT pcParent - The unique action name of an already created parent
  9929. - Blank means that this is the top level (menu-bar)
  9930. INPUT pcName - A unique name
  9931. INPUT pcBefore - The unique action name of an already created sibling
  9932. Notes: PRIVATE
  9933. This is called before the menu is built in order to be able to insert
  9934. actions.
  9935. Because some disable and enable actions may take place BEFORE
  9936. initialize some tmenu record may exist with "*" as parent.
  9937. ------------------------------------------------------------------------------*/
  9938. DEFINE BUFFER btMenu FOR tMenu.
  9939. DEFINE VARIABLE iSeq AS INT NO-UNDO.
  9940. FIND LAST btMenu WHERE btMenu.Parent = pcParent
  9941. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  9942. iSeq = IF AVAIL btMenu THEN btMenu.Seq + 1 ELSE 1.
  9943. /* loop from the end to increase the sequence of everyone
  9944. we are supposed to be before.
  9945. (If before is not found we will add the entry first ) */
  9946. DO WHILE AVAIL btMenu AND pcBefore <> ? :
  9947. ASSIGN
  9948. iSeq = btMenu.Seq
  9949. btMenu.Seq = btMenu.Seq + 1.
  9950. IF btMenu.Name = pcBefore THEN LEAVE.
  9951. FIND PREV btMenu WHERE btMenu.Parent = pcParent
  9952. AND btMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  9953. END. /* do while avail btMenu */
  9954. /* Only ONE entry of each action, except for RULE.
  9955. The last entry will potentially change the parent.
  9956. The menu may also exist with "*" as parent because it was enabled/disabled
  9957. before insert */
  9958. IF pcName <> "RULE":U THEN
  9959. FIND tMenu WHERE tMenu.hTarget = TARGET-PROCEDURE
  9960. AND tMenu.NAME = pcName NO-ERROR.
  9961. IF NOT AVAIL tMenu OR pcName = "RULE":U THEN
  9962. DO:
  9963. CREATE tMenu.
  9964. ASSIGN
  9965. tMenu.Link = {fnarg actionLink pcName}
  9966. tMenu.hTarget = TARGET-PROCEDURE
  9967. tMenu.Name = pcName
  9968. tMenu.Sensitive = FALSE.
  9969. END.
  9970. ASSIGN
  9971. tMenu.Parent = pcParent
  9972. tMenu.Seq = iSeq.
  9973. RETURN TRUE.
  9974. END FUNCTION.
  9975. /* _UIB-CODE-BLOCK-END */
  9976. &ANALYZE-RESUME
  9977. &ENDIF
  9978. &IF DEFINED(EXCLUDE-linkRuleBuffer) = 0 &THEN
  9979. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION linkRuleBuffer Procedure
  9980. FUNCTION linkRuleBuffer RETURNS HANDLE
  9981. (pcLink AS CHAR,
  9982. phTarget AS HANDLE) :
  9983. /*------------------------------------------------------------------------------
  9984. Purpose: Create the dynamic table used to check the rules against a target
  9985. Parameters: pcLink - Linkname
  9986. phTarget - Handle of any Target
  9987. we do not create this again if the link is switched
  9988. but assume that all objects of same type have the same
  9989. api. (if not found the data-type will be set to
  9990. character)
  9991. Notes:
  9992. ------------------------------------------------------------------------------*/
  9993. DEFINE VARIABLE cDlm AS CHARACTER NO-UNDO.
  9994. DEFINE VARIABLE iLoop AS INTEGER NO-UNDO.
  9995. DEFINE VARIABLE cRule AS CHARACTER NO-UNDO.
  9996. DEFINE VARIABLE cRuleEntry AS CHARACTER NO-UNDO.
  9997. DEFINE VARIABLE cFuncOp AS CHARACTER NO-UNDO.
  9998. DEFINE VARIABLE cFunction AS CHARACTER NO-UNDO.
  9999. DEFINE VARIABLE cProp AS CHARACTER NO-UNDO.
  10000. DEFINE VARIABLE cFuncList AS CHARACTER NO-UNDO.
  10001. DEFINE VARIABLE cDataTypeList AS CHARACTER NO-UNDO.
  10002. DEFINE VARIABLE iRule AS INTEGER NO-UNDO.
  10003. DEFINE VARIABLE cDatatype AS CHARACTER NO-UNDO.
  10004. DEFINE VARIABLE hTable AS HANDLE NO-UNDO.
  10005. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  10006. DEFINE VARIABLE lFieldsAdded AS LOGICAL NO-UNDO.
  10007. DEFINE VARIABLE iNumErrors AS INTEGER NO-UNDO.
  10008. DEFINE BUFFER bttAction FOR ttAction.
  10009. FIND ttLinkRuleTable WHERE ttLinkRuleTable.Linkname = pcLink
  10010. AND ttLinkRuleTable.ProcedureHandle = TARGET-PROCEDURE
  10011. NO-ERROR.
  10012. IF AVAIL ttLinkRuleTable THEN
  10013. DO:
  10014. /* If we have a buffer with no field errors just return the handle
  10015. OR
  10016. if we already have attempted to find the methods in this target
  10017. then return it whether it is valid or not
  10018. OR
  10019. if we already have tried the predefined number of attempts
  10020. then also return it whether it is valid or not */
  10021. IF (VALID-HANDLE(ttLinkRuleTable.BufferHandle)
  10022. AND ttLinkRuleTable.NumErrors = 0)
  10023. OR CAN-DO(ttLinkRuleTable.LinkHandles,STRING(phTarget))
  10024. OR NUM-ENTRIES(ttLinkRuleTable.LinkHandles) >= xiMaxLinkChecks THEN
  10025. RETURN ttLinkRuleTable.BufferHandle.
  10026. END.
  10027. ELSE DO:
  10028. CREATE ttLinkRuleTable.
  10029. ASSIGN
  10030. ttLinkRuleTable.Linkname = pcLink
  10031. ttLinkRuleTable.ProcedureHandle = TARGET-PROCEDURE.
  10032. END.
  10033. /* Log the target handle so the check above can find it the next time */
  10034. ASSIGN
  10035. ttlinkRuleTable.LinkHandles = ttlinkRuleTable.LinkHandles
  10036. + (IF ttlinkRuleTable.LinkHandles = '':U
  10037. THEN '':U
  10038. ELSE ',':U)
  10039. + STRING(phTarget)
  10040. cFuncOp = '=':U
  10041. cDlm = CHR(1).
  10042. CREATE TEMP-TABLE hTable.
  10043. FOR EACH bttAction WHERE bttAction.link = pcLink
  10044. AND (bttAction.EnableRule <> '':U
  10045. OR
  10046. bttAction.HideRule <> '':U
  10047. OR
  10048. bttAction.ImageAlternateRule <> '':U
  10049. OR
  10050. bttAction.Type = 'PROPERTY':U):
  10051. DO iRule = 1 TO 4:
  10052. ASSIGN
  10053. cProp = '':U
  10054. cRule = '':U.
  10055. CASE iRule:
  10056. WHEN 1 THEN
  10057. cRule = bttAction.EnableRule.
  10058. WHEN 2 THEN
  10059. cRule = bttAction.HideRule.
  10060. WHEN 3 THEN
  10061. cRule = bttAction.ImageAlternateRule.
  10062. OTHERWISE
  10063. cProp = IF bttAction.Type = 'PROPERTY':U
  10064. THEN bttAction.OnChoose
  10065. ELSE '':U.
  10066. END.
  10067. IF cRule <> '':U OR cProp <> '':U THEN
  10068. DO:
  10069. IF cRule <> '':U THEN
  10070. ASSIGN
  10071. cRule = REPLACE(cRule,' and ':U,cDlm)
  10072. cRule = REPLACE(cRule,' or ':U,cDlm).
  10073. DO iLoop = 1 TO IF cRule = '':U THEN 1 ELSE NUM-ENTRIES(cRule,cDlm):
  10074. /* 1 2 3 = Rules */
  10075. IF cRule <> '':U THEN
  10076. ASSIGN
  10077. cRuleEntry = TRIM(ENTRY(iLoop,cRule,cDlm))
  10078. cFunction = ENTRY(1,cRuleEntry,cFuncOp)
  10079. cProp = (IF INDEX(cFunction,'(':U) = 0 THEN cFunction ELSE '')
  10080. cFunction = (IF INDEX(cFunction,'(':U) > 0
  10081. THEN ENTRY(1,cFunction,'(':U)
  10082. ELSE 'get':U + cFunction).
  10083. ELSE
  10084. cFunction = 'get':U + cProp.
  10085. IF cFunction <> '':U AND NOT CAN-DO(cFuncList,cFunction) THEN
  10086. DO:
  10087. ASSIGN
  10088. cFuncList = cFuncList + ",":U + cFunction
  10089. cDataType = {fnarg propertyType cProp phTarget}
  10090. lFieldsAdded = TRUE.
  10091. IF cDataType = ? THEN
  10092. DO:
  10093. cDataType = ENTRY(2,{fnarg signature cFunction phTarget}) NO-ERROR.
  10094. IF cDataType = ? THEN
  10095. ASSIGN iNumErrors = iNumErrors + 1.
  10096. END.
  10097. hTable:ADD-NEW-FIELD(cFunction,(IF cDataType <> ? THEN cdataType ELSE 'CHARACTER':U),0,?,?).
  10098. END.
  10099. END. /* loop through the function in rules or prop */
  10100. END. /* rule or property found */
  10101. END. /* do i loop 1 to 4 */
  10102. END. /* for each tAction */
  10103. /* If any fields found and this is new or has less errors than the old
  10104. then prepare the temp-table */
  10105. IF lFieldsAdded
  10106. AND (NOT VALID-HANDLE(ttlinkRuleTable.TableHandle)
  10107. OR
  10108. iNumErrors < ttlinkRuleTable.NumErrors) THEN
  10109. DO:
  10110. /* Delete the old if it exists */
  10111. IF VALID-HANDLE(ttlinkRuleTable.TableHandle) THEN
  10112. DELETE OBJECT ttlinkRuleTable.TableHandle NO-ERROR.
  10113. /* prepare the TT */
  10114. hTable:TEMP-TABLE-PREPARE(pcLink).
  10115. ASSIGN
  10116. ttLinkRuleTable.NumErrors = iNumErrors
  10117. ttlinkRuleTable.TableHandle = hTable
  10118. ttlinkRuleTable.BufferHandle = ttlinkRuleTable.TableHandle:DEFAULT-BUFFER-HANDLE.
  10119. /* and create a record in the buffer */
  10120. ttlinkRuleTable.BufferHandle:BUFFER-CREATE().
  10121. END.
  10122. ELSE
  10123. DELETE OBJECT hTable NO-ERROR.
  10124. RETURN ttlinkRuleTable.BufferHandle.
  10125. END FUNCTION.
  10126. /* _UIB-CODE-BLOCK-END */
  10127. &ANALYZE-RESUME
  10128. &ENDIF
  10129. &IF DEFINED(EXCLUDE-loadImage) = 0 &THEN
  10130. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION loadImage Procedure
  10131. FUNCTION loadImage RETURNS LOGICAL PRIVATE
  10132. ( phObject AS HANDLE,
  10133. pcImage AS CHARACTER ) :
  10134. /*------------------------------------------------------------------------------
  10135. ACCESS_LEVEL=PRIVATE
  10136. Purpose: Loads the image into the object, typically a button
  10137. Params: phObject Handle of object (i.e. button)
  10138. pcImage: Relative name of image with optional offsets.
  10139. <image>, <X offset>, <Y offset>, <width>, <height>
  10140. Notes: The image may contain a delimited list specifying the offsets, width
  10141. and height.
  10142. This is a utility that should not access object properties.
  10143. ------------------------------------------------------------------------------*/
  10144. DEFINE VARIABLE cSearchImage AS CHARACTER NO-UNDO.
  10145. DEFINE VARIABLE lImageLoad AS LOGICAL NO-UNDO.
  10146. DEFINE VARIABLE iImageOffsetX AS INTEGER NO-UNDO.
  10147. DEFINE VARIABLE iImageOffsetY AS INTEGER NO-UNDO.
  10148. DEFINE VARIABLE iImageWidth AS INTEGER NO-UNDO.
  10149. DEFINE VARIABLE iImageHeight AS INTEGER NO-UNDO.
  10150. DEFINE VARIABLE cImage AS CHARACTER NO-UNDO.
  10151. IF pcImage = ? OR pcImage = "" THEN
  10152. RETURN FALSE.
  10153. /* Calculate the image directory and load all subsequent images specifying the full
  10154. path and assuming the same directory for the images. This eliminates the need to
  10155. redo a SEARCH for each image. If the image load fails, only then is a search done again. */
  10156. IF gcImageDirectory = "" THEN
  10157. DO:
  10158. ASSIGN cSearchImage = REPLACE(SEARCH(ENTRY(1,pcImage)),"~\","/")
  10159. pcImage = REPLACE(pcImage,"~\","/").
  10160. IF cSearchImage <> ? THEN
  10161. ASSIGN gcImageDirectory = SUBSTRING(cSearchImage,1,R-INDEX(cSearchImage,ENTRY(1,pcImage)) - 1)
  10162. gcImageDirectory = REPLACE(gcImageDirectory,"~\":U, "/")
  10163. gcImageDirectory = RIGHT-TRIM(gcImageDirectory,"/":U) NO-ERROR.
  10164. END.
  10165. /* Test whether offsets are specified in the image file, if yes load with specified offsets */
  10166. IF NUM-ENTRIES(pcImage) > 1 THEN
  10167. DO:
  10168. ASSIGN cImage = ENTRY(1,pcImage)
  10169. iImageOffsetX = INT(ENTRY(2,pcImage))
  10170. iImageOffsetY = INT(ENTRY(3,pcImage))
  10171. iImageWidth = INT(ENTRY(4,pcImage))
  10172. iImageHeight = INT(ENTRY(5,pcImage))
  10173. NO-ERROR.
  10174. IF iImageWidth = 0 THEN iImageWidth = 16.
  10175. IF iImageHeight = 0 THEN iImageHeight = 16.
  10176. lImageLoad = phObject:LOAD-IMAGE( gcImageDirectory + (IF gcImageDirectory > "" THEN "/":U ELSE "")
  10177. + cImage,
  10178. iImageOffsetX, iImageOffsetY, iImageWidth,iImageHeight) NO-ERROR.
  10179. END.
  10180. ELSE
  10181. lImageLoad = phObject:LOAD-IMAGE( gcImageDirectory + (IF gcImageDirectory > "" THEN "/":U ELSE "")
  10182. + pcImage ) NO-ERROR.
  10183. /* If image fails to load, it may be a result of the imageDirectory being invalid for the specified image.
  10184. Perform a SEARCH to find whether the image is in the Propath and re-calculate the Full Path and assign to
  10185. the imageDirectory variable for later use */
  10186. IF NOT lImageLoad THEN
  10187. DO:
  10188. cSearchImage = REPLACE(SEARCH(ENTRY(1,pcImage)),"~\":U,"/").
  10189. IF cSearchImage <> ? THEN
  10190. DO:
  10191. ASSIGN gcImageDirectory = SUBSTRING(cSearchImage,1,R-INDEX(cSearchImage,ENTRY(1,pcImage)) - 1)
  10192. gcImageDirectory = REPLACE(gcImageDirectory,"~\":U, "/")
  10193. gcImageDirectory = RIGHT-TRIM(gcImageDirectory,"/":U) NO-ERROR.
  10194. IF NUM-ENTRIES(pcImage) > 1 THEN
  10195. lImageLoad = phObject:LOAD-IMAGE(cSearchImage,iImageOffsetX, iImageOffsetY, iImageWidth,iImageHeight) NO-ERROR.
  10196. ELSE
  10197. lImageLoad = phObject:LOAD-IMAGE(cSearchImage) NO-ERROR.
  10198. END.
  10199. END.
  10200. RETURN lImageLoad. /* Function return value. */
  10201. END FUNCTION.
  10202. /* _UIB-CODE-BLOCK-END */
  10203. &ANALYZE-RESUME
  10204. &ENDIF
  10205. &IF DEFINED(EXCLUDE-menuHandle) = 0 &THEN
  10206. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION menuHandle Procedure
  10207. FUNCTION menuHandle RETURNS HANDLE PRIVATE
  10208. (pcName AS CHAR) :
  10209. /*------------------------------------------------------------------------------
  10210. Purpose: Return the handle of a menu.
  10211. PArameters: INPUT pcName - The action name of a menu.
  10212. Notes: PRIVATE
  10213. ------------------------------------------------------------------------------*/
  10214. FIND tMenu WHERE tMenu.hTarget = TARGET-PROCEDURE
  10215. AND tMenu.Name = pcName NO-ERROR.
  10216. IF AVAIL tMenu THEN RETURN tMenu.Hdl.
  10217. RETURN ?.
  10218. END FUNCTION.
  10219. /* _UIB-CODE-BLOCK-END */
  10220. &ANALYZE-RESUME
  10221. &ENDIF
  10222. &IF DEFINED(EXCLUDE-modifyDisabledActions) = 0 &THEN
  10223. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION modifyDisabledActions Procedure
  10224. FUNCTION modifyDisabledActions RETURNS LOGICAL
  10225. ( pcMode AS CHAR,
  10226. pcActions AS CHAR) :
  10227. /*------------------------------------------------------------------------------
  10228. Purpose: Modify the DisabledActions property and make it possible to
  10229. permanently disable actions independent of state changes.
  10230. Parameters: pcMode
  10231. - "ADD" - Adds the actions to the DisabledActions.
  10232. - "REMOVE" - Removes the actions from the DisabledActions.
  10233. pcActions - Comma separated list of actions
  10234. Notes: - ADD: The actions will be immediately disabled and subsequent calls
  10235. to enableActions will not enable them again.
  10236. REMOVE: Actions that are removed from the list will be enabled
  10237. the next time they are called with enableActions.
  10238. ------------------------------------------------------------------------------*/
  10239. DEFINE VARIABLE cDisabledActions AS CHAR NO-UNDO.
  10240. DEFINE VARIABLE cAction AS CHAR NO-UNDO.
  10241. DEFINE VARIABLE iLoop AS INT NO-UNDO.
  10242. DEFINE VARIABLE iNum AS INT NO-UNDO.
  10243. DEFINE VARIABLE iAction AS INT NO-UNDO.
  10244. {get DisabledActions cDisabledActions}.
  10245. DO iLoop = 1 TO NUM-ENTRIES(pcActions):
  10246. ASSIGN
  10247. cAction = ENTRY(iLoop,pcActions)
  10248. iNum = LOOKUP(cAction,cDisabledActions).
  10249. IF iNum = 0 AND pcMode = 'ADD':U THEN
  10250. cDisabledActions = cDisabledActions
  10251. + (IF cDisabledActions = "":U THEN "":U ELSE ",":U)
  10252. + cAction.
  10253. ELSE IF iNum <> 0 AND pcMode = 'REMOVE':U THEN
  10254. /* Add comma before and after entry to make sure we replace
  10255. a complete action.
  10256. Add comma before and after the list to replace first,last.
  10257. Trim any leading or trailing commas away */
  10258. cDisabledActions = TRIM(REPLACE(",":U + cDisabledActions + ",":U,
  10259. ",":U + cAction + ",":U,","),
  10260. ",":U).
  10261. END. /* do iloop = 1 to num-entries */
  10262. RETURN {set DisabledActions cDisabledActions}.
  10263. END FUNCTION.
  10264. /* _UIB-CODE-BLOCK-END */
  10265. &ANALYZE-RESUME
  10266. &ENDIF
  10267. &IF DEFINED(EXCLUDE-moveMenu) = 0 &THEN
  10268. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION moveMenu Procedure
  10269. FUNCTION moveMenu RETURNS HANDLE
  10270. ( phMenu AS HANDLE,
  10271. phNewParent AS HANDLE) :
  10272. /*------------------------------------------------------------------------------
  10273. Purpose: Move a menu
  10274. Parameter: phMenu - menu to move.
  10275. phNewParent - new parent
  10276. Notes: creates a new tree and deletes the existing so make sure
  10277. the next-sibling is available before this is called if this is
  10278. done in a widget-tree loop. (or use moveMenuChildren)
  10279. ------------------------------------------------------------------------------*/
  10280. DEFINE BUFFER btMenu FOR tMenu.
  10281. DEFINE BUFFER btBandInstance FOR tBandInstance.
  10282. DEFINE VARIABLE hNewMenu AS HANDLE NO-UNDO.
  10283. DEFINE VARIABLE hRule AS HANDLE NO-UNDO.
  10284. DEFINE VARIABLE cUIBmode AS CHARACTER NO-UNDO.
  10285. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  10286. DEFINE VARIABLE hMenubar AS HANDLE NO-UNDO.
  10287. &SCOPED-DEFINE xp-assign
  10288. {get UIBMode cUIBMode}
  10289. {get MenuBarHandle hMenuBar}
  10290. .
  10291. &UNDEFINE xp-assign
  10292. CASE phMenu:TYPE:
  10293. WHEN 'menu-item':U THEN
  10294. DO:
  10295. /* We create the menu-item in a widget-pool as they may belong to
  10296. other toolbars and must not go away with whatever toolbar created
  10297. the last widget-pool
  10298. */
  10299. CREATE MENU-ITEM hNewMenu IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  10300. ASSIGN
  10301. SUBTYPE = phMenu:SUBTYPE
  10302. SENSITIVE = phMenu:SENSITIVE.
  10303. FIND btMenu WHERE btMenu.hdl = phMenu NO-ERROR.
  10304. ASSIGN
  10305. /* if the hdl is not unique in btMenu then another target has reused
  10306. it and it should not matter which toolbar that fires the trigger */
  10307. hTarget = IF AVAIL btMenu THEN btMenu.hTarget ELSE TARGET-PROCEDURE
  10308. hNewMenu:LABEL = phMenu:LABEL WHEN CAN-SET(hNewMenu,'LABEL':U)
  10309. hNewMenu:ACCELERATOR = phMenu:ACCELERATOR WHEN CAN-SET(hNewMenu,'ACCELERATOR':U)
  10310. hNewMenu:TOGGLE-BOX = phMenu:TOGGLE-BOX WHEN CAN-QUERY(hNewMenu,'TOGGLE-BOX':U)
  10311. hNewMenu:NAME = phMenu:NAME WHEN phMenu:NAME <> ?
  10312. .
  10313. IF cUIBMode <> "Design":U AND CAN-QUERY(hNewMenu,'TOGGLE-BOX':U) THEN
  10314. DO:
  10315. IF hNewMenu:TOGGLE-BOX THEN
  10316. ON VALUE-CHANGED OF hNewMenu
  10317. PERSISTENT RUN OnValueChanged IN hTarget(phMenu:NAME).
  10318. ELSE
  10319. ON CHOOSE OF hNewMenu
  10320. PERSISTENT RUN OnChoose IN hTarget(phMenu:NAME).
  10321. END.
  10322. END.
  10323. WHEN 'sub-menu':U THEN
  10324. DO:
  10325. FIND btMenu WHERE btMenu.hdl = phMenu NO-ERROR.
  10326. /* if the hdl is not unique in btMenu then another target has reused
  10327. it and it should not matter which toolbar that fires the trigger */
  10328. IF AVAIL btMenu THEN
  10329. hTarget = btMenu.hTarget.
  10330. ELSE /* ad-hoc merge-conflict submenus have name label:target */
  10331. hTarget = WIDGET-HANDLE(ENTRY(2,phMenu:NAME,':')) NO-ERROR.
  10332. IF NOT VALID-HANDLE(hTarget) THEN
  10333. hTarget = TARGET-PROCEDURE.
  10334. /* We create the submenu in a widget-pool as they may belong to other toolbars
  10335. and must not go away with whatever toolbar created the last widget-pool
  10336. */
  10337. CREATE SUB-MENU hNewMenu IN WIDGET-POOL {&menuwidgetpool} + STRING(hMenuBar:OWNER)
  10338. ASSIGN
  10339. LABEL = phMenu:LABEL
  10340. SENSITIVE = phMenu:SENSITIVE
  10341. TRIGGERS :
  10342. ON MENU-DROP PERSISTENT RUN onMenuDrop IN hTarget (phMenu:Name).
  10343. END.
  10344. ASSIGN hNewMenu:NAME = phMenu:NAME WHEN phMenu:NAME <> ?.
  10345. DYNAMIC-FUNCTION('moveMenuChildren':U IN TARGET-PROCEDURE,
  10346. phMenu,
  10347. hNewMenu).
  10348. END.
  10349. END CASE.
  10350. hNewMenu:PARENT = phNewParent.
  10351. FOR EACH btMenu WHERE btMenu.Hdl = phMenu:
  10352. ASSIGN btMenu.Hdl = hNewMenu.
  10353. END.
  10354. FOR EACH btBandInstance WHERE btBandInstance.Hdl = phMenu:
  10355. ASSIGN btBandInstance.Hdl = hNewMenu.
  10356. END.
  10357. /* remove duplicate rules */
  10358. IF phNewParent = phMenu:PARENT THEN
  10359. DO:
  10360. hRule = phMenu:PREV-SIBLING.
  10361. IF VALID-HANDLE(hRule) AND hRule:TYPE = 'menu-item':U AND hRule:SUBTYPE = 'RULE' THEN
  10362. DO:
  10363. hRule = phMenu:NEXT-SIBLING.
  10364. IF VALID-HANDLE(hRule) AND hRule:TYPE = 'menu-item':U AND hRule:SUBTYPE = 'RULE' THEN
  10365. DO:
  10366. FOR EACH btMenu WHERE btMenu.Hdl = hRule:
  10367. ASSIGN btMenu.Hdl = ?.
  10368. END.
  10369. DELETE OBJECT hRule.
  10370. END. /* next.. if valid-handle(hRule) AND hRule:SUBTYPE = */
  10371. END. /* prev.. if valid-handle(hRule) AND hRule:SUBTYPE = 'RULE' */
  10372. END. /*phNewParent = phMenu:parent */
  10373. DELETE OBJECT phMenu.
  10374. RETURN hNewMenu.
  10375. END FUNCTION.
  10376. /* _UIB-CODE-BLOCK-END */
  10377. &ANALYZE-RESUME
  10378. &ENDIF
  10379. &IF DEFINED(EXCLUDE-moveMenuChildren) = 0 &THEN
  10380. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION moveMenuChildren Procedure
  10381. FUNCTION moveMenuChildren RETURNS LOGICAL
  10382. ( phOldParent AS HANDLE,
  10383. phNewParent AS HANDLE ) :
  10384. /*------------------------------------------------------------------------------
  10385. Purpose:
  10386. Notes:
  10387. ------------------------------------------------------------------------------*/
  10388. DEFINE VARIABLE hMoveMenu AS HANDLE NO-UNDO.
  10389. DEFINE VARIABLE hMenu AS HANDLE NO-UNDO.
  10390. hMenu = phOldParent:FIRST-CHILD.
  10391. DO WHILE VALID-HANDLE(hMenu):
  10392. ASSIGN
  10393. hMoveMenu = hMenu /* we must get next before we call moveMenu because
  10394. it will be deleted */
  10395. hMenu = hMenu:NEXT-SIBLING.
  10396. DYNAMIC-FUNCTION('moveMenu':U IN TARGET-PROCEDURE,
  10397. hMoveMenu,
  10398. phNewParent).
  10399. END.
  10400. RETURN TRUE.
  10401. END FUNCTION.
  10402. /* _UIB-CODE-BLOCK-END */
  10403. &ANALYZE-RESUME
  10404. &ENDIF
  10405. &IF DEFINED(EXCLUDE-normalizeActionData) = 0 &THEN
  10406. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION normalizeActionData Procedure
  10407. FUNCTION normalizeActionData RETURNS LOGICAL
  10408. ( ) :
  10409. /*------------------------------------------------------------------------------
  10410. Purpose: Remove duplicate entries of temp-tables after load
  10411. Notes: The procedurehandle is used to identify data that has just been
  10412. added
  10413. ------------------------------------------------------------------------------*/
  10414. DEFINE BUFFER bttAction FOR ttAction.
  10415. DEFINE BUFFER bttCategory FOR ttCategory.
  10416. /* For actions, always use the extracted record to ensure we're up to date */
  10417. FOR EACH ttAction WHERE ttAction.ProcedureHandle = ?:
  10418. FIND bttAction
  10419. WHERE bttAction.Action = ttAction.Action
  10420. AND bttAction.ProcedureHandle <> ?
  10421. NO-ERROR.
  10422. IF AVAILABLE bttAction THEN
  10423. DELETE bttAction.
  10424. ASSIGN ttAction.ProcedureHandle = THIS-PROCEDURE.
  10425. END.
  10426. FOR EACH ttCategory WHERE ttCategory.ProcedureHandle = ?:
  10427. IF CAN-FIND(FIRST bttCategory
  10428. WHERE bttCategory.Category = ttCategory.Category
  10429. AND bttCategory.ProcedureHandle <> ?) THEN
  10430. DELETE ttCategory.
  10431. ELSE
  10432. ttCategory.ProcedureHandle = THIS-PROCEDURE.
  10433. END.
  10434. RETURN TRUE.
  10435. END FUNCTION.
  10436. /* _UIB-CODE-BLOCK-END */
  10437. &ANALYZE-RESUME
  10438. &ENDIF
  10439. &IF DEFINED(EXCLUDE-prepareRuleTable) = 0 &THEN
  10440. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION prepareRuleTable Procedure
  10441. FUNCTION prepareRuleTable RETURNS CHARACTER
  10442. ( phTable AS HANDLE,
  10443. pcLink AS CHAR ) :
  10444. /*------------------------------------------------------------------------------
  10445. Purpose:
  10446. Notes:
  10447. ------------------------------------------------------------------------------*/
  10448. RETURN "". /* Function return value. */
  10449. END FUNCTION.
  10450. /* _UIB-CODE-BLOCK-END */
  10451. &ANALYZE-RESUME
  10452. &ENDIF
  10453. &IF DEFINED(EXCLUDE-removeMenuBand) = 0 &THEN
  10454. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION removeMenuBand Procedure
  10455. FUNCTION removeMenuBand RETURNS LOGICAL
  10456. ( pcBand AS CHARACTER ) :
  10457. /*------------------------------------------------------------------------------
  10458. Purpose: Remove the menu of the band from the menubar.
  10459. Notes: Called from removeMenu
  10460. Calls buildMenuBand to refresh menus after removal
  10461. ------------------------------------------------------------------------------*/
  10462. DEFINE VARIABLE cGrandParent AS CHARACTER NO-UNDO.
  10463. DEFINE VARIABLE hMenuBar AS HANDLE NO-UNDO.
  10464. DEFINE VARIABLE hParent AS HANDLE NO-UNDO.
  10465. DEFINE VARIABLE hSubMenu AS HANDLE NO-UNDO.
  10466. DEFINE VARIABLE hRule AS HANDLE NO-UNDO.
  10467. DEFINE VARIABLE hRuleDel AS HANDLE NO-UNDO.
  10468. DEFINE VARIABLE hStale AS HANDLE NO-UNDO.
  10469. DEFINE VARIABLE hStaleDel AS HANDLE NO-UNDO.
  10470. DEFINE VARIABLE rRowid AS ROWID NO-UNDO.
  10471. DEFINE VARIABLE iSub AS INTEGER NO-UNDO.
  10472. DEFINE VARIABLE cParentMenuKey AS CHARACTER NO-UNDO.
  10473. DEFINE VARIABLE cMenuName AS CHARACTER NO-UNDO.
  10474. DEFINE VARIABLE cMenuKey AS CHARACTER NO-UNDO.
  10475. DEFINE BUFFER btThisMenu FOR tMenu.
  10476. DEFINE BUFFER btMenu FOR tMenu.
  10477. DEFINE BUFFER btParent FOR tMenu.
  10478. DEFINE BUFFER btBandMenu FOR tMenu.
  10479. DEFINE BUFFER btParentInstance FOR tBandInstance.
  10480. DEFINE BUFFER btThisBandInstance FOR tBandInstance.
  10481. DEFINE BUFFER btBandInstance FOR tBandInstance.
  10482. {get MenuBarHandle hMenuBar}.
  10483. FIND btParentInstance WHERE btParentInstance.Band = pcBand
  10484. AND btParentInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  10485. IF NOT AVAIL btParentInstance THEN
  10486. RETURN FALSE.
  10487. IF btParentInstance.MenuName > '':U THEN
  10488. DO:
  10489. FIND btParent WHERE btParent.Name = btParentInstance.MenuName
  10490. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  10491. IF AVAIL btParent THEN
  10492. DO:
  10493. cGrandParent = btParent.PARENT.
  10494. END.
  10495. END.
  10496. FOR EACH btThisMenu WHERE btThisMenu.MenubarHdl = hMenuBar
  10497. AND btThisMenu.ParentMenuKey = btParentInstance.MenuKey
  10498. AND btThisMenu.hTarget = TARGET-PROCEDURE:
  10499. hSubMenu = ?.
  10500. /* Remove directly inserted placeholder items (InsertSubMenu = No) */
  10501. IF {fnarg actionControlType btThisMenu.NAME} = 'Placeholder':U THEN
  10502. DO:
  10503. FOR EACH btThisBandInstance
  10504. WHERE btThisBandInstance.hTarget = TARGET-PROCEDURE
  10505. AND btThisBandInstance.PlaceHolder = btThisMenu.Name:
  10506. {fnarg removeMenuBand btThisBandInstance.Band}.
  10507. DELETE btThisBandInstance.
  10508. END.
  10509. END.
  10510. FIND btThisBandInstance WHERE btThisBandInstance.MenuKey = btParentinstance.MenuKey
  10511. + (IF btParentInstance.MenuKey = ''
  10512. THEN ''
  10513. ELSE {&pathdlm})
  10514. + btThisMenu.NAME
  10515. AND btThisBandInstance.hTarget = TARGET-PROCEDURE NO-ERROR.
  10516. IF AVAIL btThisBandInstance THEN
  10517. DO:
  10518. {fnarg removeMenuBand btThisBandInstance.Band}.
  10519. END.
  10520. ELSE
  10521. RELEASE btThisBandInstance.
  10522. IF VALID-HANDLE(btThisMenu.hdl) THEN
  10523. DO:
  10524. rRowid = ?.
  10525. FOR EACH btMenu WHERE btMenu.MenubarHdl = hMenuBar
  10526. AND btMenu.ParentMenuKey = btThisMenu.ParentMenuKey
  10527. AND btMenu.NAME = btThisMenu.Name
  10528. AND NOT VALID-HANDLE(btMenu.hdl)
  10529. BY btMenu.MenubarHdl
  10530. BY btMenu.ParentMenuKey
  10531. BY btMenu.Mergeorder
  10532. BY btMenu.Pageno
  10533. BY btMenu.hTarget
  10534. BY btMenu.seq:
  10535. rRowid = ROWID(btMenu).
  10536. IF btThisMenu.Seq = 1 THEN
  10537. LEAVE.
  10538. END.
  10539. /* If we found the menu that should take the place of the one that
  10540. is being deleted then give the handle and triggers to it. */
  10541. IF rRowid <> ? THEN
  10542. DO:
  10543. FIND btMenu WHERE ROWID(btMenu) = rRowid.
  10544. ASSIGN
  10545. btMenu.Hdl = btThisMenu.Hdl
  10546. btThisMenu.Hdl = ?.
  10547. IF AVAIL btThisBandInstance THEN
  10548. DO:
  10549. ON MENU-DROP OF btMenu.Hdl
  10550. PERSISTENT RUN OnMenuDrop IN btMenu.hTarget(btMenu.Hdl:NAME).
  10551. FIND btBandInstance
  10552. WHERE btBandInstance.MenuName = btThisBandInstance.MenuName
  10553. AND btBandInstance.hTarget = btMenu.htarget.
  10554. ASSIGN
  10555. btBandInstance.hdl = btMenu.Hdl
  10556. hSubMenu = btMenu.hdl.
  10557. END.
  10558. ELSE IF btMenu.hdl:TYPE = 'menu-item':U AND btMenu.Hdl:SUBTYPE = 'normal':U THEN
  10559. DO:
  10560. IF btMenu.Hdl:TOGGLE-BOX THEN
  10561. ON VALUE-CHANGED OF btMenu.Hdl
  10562. PERSISTENT RUN OnValueChanged IN btMenu.hTarget(btMenu.Hdl:NAME).
  10563. ELSE
  10564. ON CHOOSE OF btMenu.Hdl
  10565. PERSISTENT RUN OnChoose IN btMenu.hTarget(btMenu.Hdl:NAME).
  10566. END.
  10567. END.
  10568. IF VALID-HANDLE(btThisMenu.Hdl) THEN
  10569. DELETE OBJECT btThisMenu.hdl.
  10570. END. /* for each */
  10571. ELSE IF AVAIL btThisBandInstance THEN
  10572. DO:
  10573. FIND FIRST btMenu WHERE btMenu.MenubarHdl = hMenuBar
  10574. AND btMenu.ParentMenuKey = btThisMenu.ParentMenuKey
  10575. AND btMenu.NAME = btThisMenu.Name
  10576. AND VALID-HANDLE(btMenu.hdl) NO-ERROR.
  10577. IF AVAIL btMenu THEN
  10578. hSubMenu = btMenu.Hdl.
  10579. END.
  10580. /* Delete the temp-tables for this item.
  10581. We do this BEFORE the build to ensure that merge sub-menus are not
  10582. added for non-existing bands, so we need to store the keys to use */
  10583. IF AVAIL btThisBandInstance THEN
  10584. DO:
  10585. cMenuKey = btThisBandInstance.MenuKey.
  10586. DELETE btThisBandInstance.
  10587. END.
  10588. ELSE
  10589. cMenuKey = '':U.
  10590. cMenuName = btThisMenu.NAME.
  10591. DELETE btThisMenu.
  10592. IF cMenuKey <> '':U THEN
  10593. DO:
  10594. IF VALID-HANDLE(hSubMenu) THEN
  10595. DO:
  10596. DYNAMIC-FUNCTION('buildMenuBand':U IN TARGET-PROCEDURE,
  10597. hSubMenu, cMenuKey).
  10598. /* submenus are recreated on each build. We need to keep them until
  10599. their children have been moved in buildMenuband above, but since
  10600. they have no tMenu record they end up as empty submenus at top, so
  10601. get rid if them */
  10602. hStale = hSubMenu:FIRST-CHILD.
  10603. DO WHILE VALID-HANDLE(hStale):
  10604. FIND FIRST btMenu WHERE btMenu.Hdl = hStale NO-ERROR.
  10605. IF AVAIL btMenu AND btMenu.NAME <> 'RULE' THEN
  10606. LEAVE.
  10607. hStaleDel = hStale.
  10608. hStale = hStale:NEXT-SIBLING.
  10609. DELETE WIDGET hStaleDel.
  10610. END.
  10611. END.
  10612. END.
  10613. hRule = hParent:FIRST-CHILD NO-ERROR.
  10614. DO WHILE VALID-HANDLE(hRule) AND hRule:TYPE = 'menu-item':U AND hRule:SUBTYPE = 'rule':
  10615. hRuleDel = hRule.
  10616. hRule = hRule:NEXT-SIBLING.
  10617. DELETE OBJECT hRuleDel NO-ERROR.
  10618. END.
  10619. END.
  10620. RETURN TRUE.
  10621. END FUNCTION.
  10622. /* _UIB-CODE-BLOCK-END */
  10623. &ANALYZE-RESUME
  10624. &ENDIF
  10625. &IF DEFINED(EXCLUDE-retrieveBandsAndActions) = 0 &THEN
  10626. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION retrieveBandsAndActions Procedure
  10627. FUNCTION retrieveBandsAndActions RETURNS LOGICAL
  10628. ( input pcToolbarList as character,
  10629. input pcObjectList as character,
  10630. input pcBandList as character ):
  10631. /*------------------------------------------------------------------------------
  10632. Purpose: Retrieves menu data (actions, bands, etc) and makes them available
  10633. to this toolbar.
  10634. Notes: * this function only retrieves data. it does not ensure uniqueness
  10635. of the data. there are normalize* functions that ensure that the data
  10636. is unique.
  10637. ------------------------------------------------------------------------------*/
  10638. DEFINE BUFFER bttBand FOR ttBand.
  10639. DEFINE BUFFER bttBandAction FOR ttBandAction.
  10640. DEFINE BUFFER bttObjectBand FOR ttObjectBand.
  10641. define variable hContainer as handle no-undo.
  10642. define variable hBuffer as handle no-undo.
  10643. define variable cProperties as character no-undo.
  10644. define variable cActions as character no-undo extent 64.
  10645. define variable cBands as character no-undo extent 64.
  10646. define variable cHiddenActions as character no-undo.
  10647. define variable cDisabledActions as character no-undo.
  10648. define variable cHiddenStructures as character no-undo.
  10649. define variable cLanguageCode as character no-undo.
  10650. define variable iLoop as integer no-undo.
  10651. define variable dUserObj as decimal no-undo.
  10652. define variable dOrganisationObj as decimal no-undo.
  10653. define variable lSecurityEnabled as logical no-undo.
  10654. define variable lHidden as logical no-undo.
  10655. define variable lDisabled as logical no-undo.
  10656. define variable lApplySecurity as logical no-undo.
  10657. define variable lApplyTranslation as logical no-undo.
  10658. DEFINE VARIABLE lDelete AS LOGICAL NO-UNDO.
  10659. DEFINE VARIABLE iObject AS INTEGER NO-UNDO.
  10660. DEFINE VARIABLE cObject AS CHARACTER NO-UNDO.
  10661. define variable iActionExtent as integer no-undo.
  10662. define variable iBandExtent as integer no-undo.
  10663. define variable iExtentLoop as integer no-undo.
  10664. if pcToolbarList eq ? then pcToolbarList = ''.
  10665. if pcObjectList eq ? then pcObjectList = ''.
  10666. if pcBandList eq ? then pcBandList = ''.
  10667. lApplySecurity = no.
  10668. /* Check whether there's an adm-loadToolbar procedure in the toolbar.
  10669. We can use internal-entries because the adm-loadToolbar procedure
  10670. is generated into the object itself.
  10671. Only attempt to retrive the toolbar information if it has been
  10672. requested (i.e. the toolbarlist parameter is non-empty).
  10673. */
  10674. if pcToolbarList ne '' and
  10675. can-do(target-procedure:internal-entries, 'adm-loadToolbar') then
  10676. do:
  10677. /* The adm-loadToolbar procedures implcitly contain
  10678. information for one specific object or toolbar.
  10679. If bands are requested separately, outside of the context of an
  10680. object (either toolbar or container object), they need to be
  10681. retrieved by calling the standard api rygetmensp.p.
  10682. */
  10683. assign pcToolbarList = ''
  10684. lApplySecurity = yes.
  10685. /* Get the toolbar information */
  10686. run adm-loadToolbar in target-procedure (output table ttToolbarBand append,
  10687. output table ttObjectBand append,
  10688. output table ttBand append,
  10689. output table ttBandAction append,
  10690. output table ttAction append,
  10691. output table ttCategory append ) no-error.
  10692. /* Check whether translations have been generated into the toolbar.
  10693. If not, we need to apply translations here.
  10694. */
  10695. {get ObjectTranslated lApplyTranslation}.
  10696. lApplyTranslation = not lApplyTranslation.
  10697. /* At this stage, the only actions that are not yet normalised are
  10698. those that have just been retrieved from the toolbar object.
  10699. We can operate on these without fear.
  10700. */
  10701. if lApplyTranslation then
  10702. for each ttAction where ttAction.ProcedureHandle = ?:
  10703. if not can-find(ttActionTranslation where
  10704. ttActionTranslation.Action = ttAction.Action) then
  10705. do:
  10706. create ttActionTranslation.
  10707. ttActionTranslation.Action = ttAction.Action.
  10708. end. /* no action translation available */
  10709. end. /* each action */
  10710. end. /* this is a generated toolbar. */
  10711. /* Get the object menu information.
  10712. Check whether there's an adm-loadToolbar procedure in the container.
  10713. We can use internal-entries because the adm-loadToolbar procedure
  10714. is generated into the object itself.
  10715. These checks are separate because the container may be generated
  10716. but the toolbar not. We need to get the correct items.
  10717. Only attempt to retrive the object menu information if it has been
  10718. requested (i.e. the objectlist parameter is non-empty).
  10719. */
  10720. {get ContainerSource hContainer} no-error.
  10721. if valid-handle(hContainer) and
  10722. pcObjectList ne '' and
  10723. can-do(hContainer:internal-entries, 'adm-loadToolbar') then
  10724. do:
  10725. assign pcObjectList = ''
  10726. lApplySecurity = yes.
  10727. run adm-loadToolbar in hContainer (output table ttToolbarBand append,
  10728. output table ttObjectBand append,
  10729. output table ttBand append,
  10730. output table ttBandAction append,
  10731. output table ttAction append,
  10732. output table ttCategory append ) no-error.
  10733. /* Only check whether we need to do translations here if
  10734. no translations have been generated.
  10735. */
  10736. {get ObjectTranslated lApplyTranslation hContainer}.
  10737. lApplyTranslation = not lApplyTranslation.
  10738. /* We only want to worry about the actions that were retrieved
  10739. from the container in the call above. We don't care here about
  10740. those actions retrieved from the toolbar object; those are
  10741. catered for by their own code. The query below gets just those
  10742. actions that were retrieved by the call above.
  10743. */
  10744. if lApplyTranslation then
  10745. for each ttObjectBand,
  10746. each ttBand where ttBand.Band = ttObjectBand.Band,
  10747. each ttBandAction where ttBandAction.Band = ttBand.Band,
  10748. each ttAction where
  10749. ttAction.Action = ttBandAction.Action and
  10750. ttAction.ProcedureHandle = ?:
  10751. if not can-find(ttActionTranslation where
  10752. ttActionTranslation.Action = ttAction.Action) then
  10753. do:
  10754. create ttActionTranslation.
  10755. ttActionTranslation.Action = ttAction.Action.
  10756. end. /* no action translation available */
  10757. end. /* each action */
  10758. end. /* the container has generated menu items. */
  10759. /* Apply security (for objects loaded with adm-loadToolbar above).
  10760. If the toolbar information is retrieved from the repository,
  10761. security is applied as part of the retrieval process on the server
  10762. and we don't need to do it again.
  10763. When toolbar information is retrieved from the object via adm-loadToolbar
  10764. no security has yet been applied and so we must ensure that all
  10765. toolbar information is secured before use. */
  10766. if lApplySecurity then
  10767. do:
  10768. if valid-handle(gshSessionManager) and valid-handle(gshSecurityManager) then
  10769. do:
  10770. assign cProperties = dynamic-function('getPropertyList':U in gshSessionManager,
  10771. 'SecurityEnabled':U, No)
  10772. lSecurityEnabled = logical(entry(1, cProperties, CHR(3)))
  10773. no-error.
  10774. if lSecurityEnabled eq ? then
  10775. lSecurityEnabled = yes.
  10776. if lSecurityEnabled then
  10777. do:
  10778. /* Only run security against the actions just received. These
  10779. actions will have a ProcedureHandle of ? (this is set in
  10780. normalizeActionData).
  10781. */
  10782. iActionExtent = 1.
  10783. for each ttAction where ttAction.ProcedureHandle = ?:
  10784. /* Don't blow up with REPACE/CONCAT error. */
  10785. if length(cActions[iActionExtent]) + length(ttAction.Action) > 31000 then
  10786. assign cActions[iActionExtent] = left-trim(cActions[iActionExtent], ',')
  10787. iActionExtent = iActionExtent + 1.
  10788. cActions[iActionExtent] = cActions[iActionExtent] + ',' + ttAction.Action.
  10789. end. /* build action list */
  10790. iBandExtent = 1.
  10791. for each ttBand where ttBand.ProcedureHandle = ?:
  10792. /* Don't blow up with REPACE/CONCAT error. */
  10793. if length(cBands[iBandExtent]) + length(ttBand.Band) > 31000 then
  10794. assign cBands[iBandExtent] = left-trim(cBands[iBandExtent], ',')
  10795. iBandExtent = iBandExtent + 1.
  10796. cBands[iBandExtent] = cBands[iBandExtent] + ',' + ttBand.Band.
  10797. end. /* build band list */
  10798. assign cActions[iActionExtent] = left-trim(cActions[iActionExtent], ',')
  10799. cBands[iBandExtent] = left-trim(cBands[iBandExtent], ',').
  10800. /* Loop through extents */
  10801. do iExtentLoop = 1 to max(iActionExtent, iBandExtent):
  10802. run menuItemStructureSecurityCheck in gshSecurityManager (input cActions[iExtentLoop],
  10803. input cBands[iExtentLoop],
  10804. output cHiddenActions,
  10805. output cDisabledActions,
  10806. output cHiddenStructures ) no-error.
  10807. /* Secure hidden actions */
  10808. do iLoop = 1 to num-entries(cHiddenActions):
  10809. find ttAction where
  10810. ttAction.Action = entry(iLoop, cHiddenActions)
  10811. no-error.
  10812. if available ttAction then
  10813. do:
  10814. for each ttBandAction where
  10815. ttBandAction.Action = ttAction.Action:
  10816. delete ttBandAction.
  10817. end. /* remove the band actions */
  10818. delete ttAction.
  10819. end. /* action hidden */
  10820. end. /* loop through hidden actions */
  10821. /* Secure disabled actions */
  10822. do iLoop = 1 to num-entries(cDisabledActions):
  10823. find ttAction where
  10824. ttAction.Action = entry(iLoop, cDisabledActions)
  10825. no-error.
  10826. if available ttAction then
  10827. ttAction.Disabled = yes.
  10828. end. /* loop through disabled actions */
  10829. /* Secure hidden bands */
  10830. do iLoop = 1 to num-entries(cHiddenStructures):
  10831. find ttBand where
  10832. ttBand.Band = entry(iLoop, cHiddenStructures)
  10833. no-error.
  10834. if available ttBand then
  10835. do:
  10836. for each ttBandAction where
  10837. ttBandAction.Band = ttBand.Band:
  10838. /* Keep any actions that appear on on the band actions,
  10839. since they may be used by other bands. The action security
  10840. above will make sure that actions are cleaned up OK if
  10841. the actions are secured.
  10842. */
  10843. delete ttBandAction.
  10844. end. /* each band action */
  10845. for each ttObjectBand where
  10846. ttObjectBand.Band = ttBand.Band:
  10847. delete ttObjectBand.
  10848. end. /* object band */
  10849. for each ttToolbarBand where
  10850. ttToolbarBand.Band = ttband.Band:
  10851. delete ttToolbarBand.
  10852. end. /* toolbar band */
  10853. /* now delete the band */
  10854. delete ttBand.
  10855. end. /* band to secure */
  10856. end. /* loop through hidden bands */
  10857. end. /* loop through action extents */
  10858. end. /* security enabled*/
  10859. end. /* valid security and session managers */
  10860. end. /* apply security */
  10861. /* Apply Translations.
  10862. We have no way of knowing whether the actions were translated
  10863. for the container or the toolbar, so we attempt to translate
  10864. them all.
  10865. */
  10866. if can-find(first ttActionTranslation) then
  10867. do:
  10868. hBuffer = buffer ttActionTranslation:handle.
  10869. /* Get login language */
  10870. cLanguageCode = dynamic-function('getPropertyList' in gshSessionManager,
  10871. 'CurrentLanguageObj', no).
  10872. cLanguageCode = 'OBJ|' + cLanguageCode.
  10873. /* Do the translations in one hit. */
  10874. run translateToolbar in gshTranslationManager ( input cLanguageCode,
  10875. input-output hBuffer ) no-error.
  10876. /* No error handling. If the translation
  10877. fails for some reason, fall back to the design language.
  10878. */
  10879. /* Now apply the translations */
  10880. for each ttActionTranslation,
  10881. each ttAction where
  10882. ttAction.Action = ttActionTranslation.Action and
  10883. ttAction.ProcedureHandle = ?:
  10884. /* The unknown value signifies that there is no translation for the field. */
  10885. if ttActionTranslation.Name ne ? then ttAction.Name = ttActionTranslation.Name.
  10886. if ttActionTranslation.Caption ne ? then ttAction.Caption = ttActionTranslation.Caption.
  10887. if ttActionTranslation.Tooltip ne ? then ttAction.Tooltip = ttActionTranslation.Tooltip.
  10888. if ttActionTranslation.Accelerator ne ? then ttAction.Accelerator = ttActionTranslation.Accelerator.
  10889. if ttActionTranslation.Image ne ? then ttAction.Image = ttActionTranslation.Image.
  10890. if ttActionTranslation.ImageDown ne ? then ttAction.ImageDown = ttActionTranslation.ImageDown.
  10891. if ttActionTranslation.ImageInsensitive ne ? then ttAction.ImageInsensitive = ttActionTranslation.ImageInsensitive.
  10892. if ttActionTranslation.Image2 ne ? then ttAction.Image2 = ttActionTranslation.Image2.
  10893. if ttActionTranslation.Image2Down ne ? then ttAction.Image2Down = ttActionTranslation.Image2Down.
  10894. if ttActionTranslation.Image2Insensitive ne ? then ttAction.Image2Insensitive = ttActionTranslation.Image2Insensitive.
  10895. end. /* each translation */
  10896. /* We don't need these records anymore. Get rid of them, they're taking up space. */
  10897. empty temp-table ttActionTranslation.
  10898. end. /* apply translation */
  10899. if pcObjectList ne '' or pcToolbarList ne '' or pcBandList ne '' then
  10900. do:
  10901. ASSIGN cProperties = DYNAMIC-FUNCTION("getPropertyList":U IN gshSessionManager,
  10902. "currentUserObj,currentOrganisationObj":U,
  10903. Yes)
  10904. dUserObj = DECIMAL(ENTRY(1, cProperties, CHR(3)))
  10905. dOrganisationObj = DECIMAL(ENTRY(2, cProperties, CHR(3)))
  10906. NO-ERROR.
  10907. RUN ry/app/rygetmensp.p ON gshAstraAppserver
  10908. (INPUT pcToolbarList,
  10909. INPUT pcObjectList,
  10910. INPUT pcBandList,
  10911. INPUT dUserObj,
  10912. INPUT dOrganisationObj,
  10913. OUTPUT TABLE ttToolbarBand APPEND,
  10914. OUTPUT TABLE ttObjectBand APPEND,
  10915. OUTPUT TABLE ttBand APPEND,
  10916. OUTPUT TABLE ttBandAction APPEND,
  10917. OUTPUT TABLE ttAction APPEND,
  10918. OUTPUT TABLE ttCategory APPEND).
  10919. end. /* get toolbars, objects or bands */
  10920. /* Remove any duplicated actions and action categories */
  10921. {fn normalizeActionData}.
  10922. /* Remove duplicates from the band and bandAction tables */
  10923. FOR EACH ttBand WHERE ttBand.ProcedureHandle = ?:
  10924. lDelete = CAN-FIND(FIRST bttBand WHERE bttBand.Band = ttBand.Band
  10925. AND bttBand.ProcedureHandle <> ?).
  10926. FOR EACH ttBandAction WHERE ttBandAction.ProcedureHandle = ?
  10927. AND ttBandAction.Band = ttBand.Band:
  10928. IF lDelete THEN
  10929. DELETE ttBandAction.
  10930. ELSE DO:
  10931. /* Check whether there exists an action containing the same band name, sequence and procedureHandle
  10932. This could occur if the same band is used twice in the same position (sequence) */
  10933. IF CAN-FIND (FIRST bttBandAction
  10934. WHERE bttBandAction.Band = ttBandAction.Band
  10935. AND bttbandAction.Sequence = ttBandAction.Sequence
  10936. AND bttBandAction.ProcedureHandle = THIS-PROCEDURE) THEN
  10937. DELETE ttBandAction.
  10938. ELSE
  10939. ttBandAction.ProcedureHandle = THIS-PROCEDURE.
  10940. END.
  10941. END. /* for each ttBand */
  10942. IF lDelete THEN
  10943. DELETE ttBand.
  10944. ELSE
  10945. ttBand.ProcedureHandle = THIS-PROCEDURE.
  10946. END.
  10947. /* Remove duplicate objectband/runattribute:
  10948. If runattributes is used then we check retrieved objectbands for
  10949. invalid runattributes, which are returned with unknown value in
  10950. order not to clash with blank. Invalid runattribute is treated as
  10951. no runattribute, so we delete it if it already exists and set the
  10952. runattribute to blank if this is the first retrieval. */
  10953. IF INDEX(';',pcObjectList) > 0 THEN
  10954. DO:
  10955. DO iObject = 1 TO NUM-ENTRIES(pcObjectList):
  10956. cObject = ENTRY(iObject,pcObjectList).
  10957. IF NUM-ENTRIES(cObject,';') > 1 THEN
  10958. DO:
  10959. FOR EACH ttObjectBand WHERE ttObjectBand.ObjectName = cObject
  10960. AND ttObjectBand.RunAttribute = ?:
  10961. IF CAN-FIND (bttObjectBand
  10962. WHERE bttObjectBand.ObjectName = cObject
  10963. AND bttObjectBand.RunAttribute = ''
  10964. AND bttObjectBand.Resultcode = ttObjectBand.Resultcode
  10965. AND bttObjectband.Sequence = ttObjectBand.Sequence) THEN
  10966. DELETE ttObjectBand.
  10967. ELSE
  10968. ttObjectBand.RunAttribute = ''.
  10969. END. /* for each where ObjectName = cObject and runattribute = ? */
  10970. END. /* if runattribute defined */
  10971. END. /* loop through pcObjectList */
  10972. END. /* INDEX(';',pcObjectList) > 0 (runattribute used) */
  10973. return true.
  10974. END FUNCTION. /* retrieveBandsAndActions */
  10975. /* _UIB-CODE-BLOCK-END */
  10976. &ANALYZE-RESUME
  10977. &ENDIF
  10978. &IF DEFINED(EXCLUDE-sensitizeActions) = 0 &THEN
  10979. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION sensitizeActions Procedure
  10980. FUNCTION sensitizeActions RETURNS LOGICAL
  10981. (pcActions AS CHAR,
  10982. plSensitive AS LOG) :
  10983. /*------------------------------------------------------------------------------
  10984. Purpose: Set actions sensitive attibute
  10985. (The main ourpose ia to have the same logic for disableActions and
  10986. enableActions)
  10987. Parameters: INPUT pcActions - A comma separated list of actions to disable
  10988. "*" - means disable all
  10989. INPUT plSensitive - Logical value that specifies sensitive.
  10990. Notes:
  10991. Actions may be created in other procedures, but this is the only place
  10992. that they are enabled. except that submenues are currently set to true
  10993. when created.
  10994. This procedure will probably need to be public in order to call the
  10995. canDo function.
  10996. ------------------------------------------------------------------------------*/
  10997. DEFINE VARIABLE cAction AS CHAR NO-UNDO.
  10998. DEFINE VARIABLE i AS INTEGER NO-UNDO.
  10999. DEFINE VARIABLE cDisabled AS CHAR NO-UNDO.
  11000. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  11001. IF plSensitive THEN
  11002. {get DisabledActions cDisabled}.
  11003. {get UseRepository lUseRepository}.
  11004. IF pcActions = "*":U THEN
  11005. DO:
  11006. FOR EACH tMenu WHERE tMenu.hTarget = TARGET-PROCEDURE
  11007. AND tMenu.Disabled = FALSE
  11008. AND NOT CAN-DO(cDisabled,tMenu.Name):
  11009. IF plSensitive
  11010. AND {fnarg ActionType tMenu.Name} = 'RUN':U
  11011. AND {fnarg actionCanRun tMenu.Name} = FALSE THEN
  11012. NEXT.
  11013. IF VALID-HANDLE(tMenu.Hdl) THEN
  11014. tMenu.Hdl:SENSITIVE = plSensitive.
  11015. tMenu.Sensitive = plSensitive.
  11016. END.
  11017. FOR EACH tButton WHERE tButton.hTarget = TARGET-PROCEDURE
  11018. AND tbutton.Disabled = FALSE
  11019. AND NOT CAN-DO(cDisabled,tButton.Name):
  11020. IF plSensitive
  11021. AND {fnarg ActionType tButton.Name} = 'RUN':U
  11022. AND {fnarg actionCanRun tButton.Name} = FALSE THEN
  11023. NEXT.
  11024. IF VALID-HANDLE(tButton.Hdl) THEN
  11025. tButton.Hdl:SENSITIVE = plSensitive.
  11026. END.
  11027. END.
  11028. ELSE DO i = 1 TO NUM-ENTRIES(pcActions):
  11029. cAction = ENTRY(i,pcActions).
  11030. IF plSensitive THEN
  11031. DO:
  11032. IF CAN-DO(cDisabled,cAction) THEN
  11033. NEXT. /* -----> */
  11034. IF {fnarg actionType cAction} = 'RUN':U
  11035. AND {fnarg actionCanRun cAction} = FALSE THEN
  11036. NEXT. /* -----> */
  11037. END.
  11038. IF NOT lUseRepository THEN
  11039. DO:
  11040. FIND tMenu WHERE tMenu.Name = cAction
  11041. AND tMenu.hTarget = TARGET-PROCEDURE NO-ERROR.
  11042. IF NOT AVAIL tMenu THEN
  11043. /* '*' means that the parent may be changed by this function later */
  11044. DYNAMIC-FUNCTION('insertMenuTempTable':U IN TARGET-PROCEDURE,
  11045. "*":U,cAction,?).
  11046. IF AVAIL tMenu AND tMenu.Disabled = FALSE THEN
  11047. DO:
  11048. IF VALID-HANDLE(tMenu.Hdl)THEN
  11049. tMenu.Hdl:SENSITIVE = plSensitive.
  11050. tMenu.Sensitive = plSensitive.
  11051. END.
  11052. END.
  11053. ELSE DO:
  11054. /* We only prevent multiple items of same action under the same parent when Repository,
  11055. so use FOR EACH just in case there are duplicates under different parents */
  11056. FOR EACH tMenu WHERE tMenu.Name = cAction
  11057. AND tMenu.hTarget = TARGET-PROCEDURE
  11058. AND tMenu.Disabled = FALSE:
  11059. IF VALID-HANDLE(tMenu.Hdl) THEN
  11060. tMenu.Hdl:SENSITIVE = plSensitive.
  11061. tMenu.Sensitive = plSensitive.
  11062. END.
  11063. END. /* else (i.e. UseRepository) */
  11064. FIND tButton WHERE tButton.Name = cAction
  11065. AND tButton.hTarget = TARGET-PROCEDURE NO-ERROR.
  11066. IF NOT AVAIL tButton AND NOT lUseRepository THEN
  11067. DO:
  11068. CREATE tButton.
  11069. ASSIGN
  11070. tButton.Name = cAction
  11071. tButton.hTarget = TARGET-PROCEDURE.
  11072. END. /* if not avail */
  11073. IF AVAIL tButton AND tButton.Disabled = FALSE THEN
  11074. DO:
  11075. tButton.Sensitive = plSensitive.
  11076. IF VALID-HANDLE(tButton.Hdl) THEN
  11077. tButton.Hdl:SENSITIVE = plSensitive.
  11078. END.
  11079. END. /* do i = 1 to num-entries(cAction) */
  11080. RETURN TRUE.
  11081. END FUNCTION.
  11082. /* _UIB-CODE-BLOCK-END */
  11083. &ANALYZE-RESUME
  11084. &ENDIF
  11085. &IF DEFINED(EXCLUDE-setActionGroups) = 0 &THEN
  11086. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setActionGroups Procedure
  11087. FUNCTION setActionGroups RETURNS LOGICAL
  11088. (pcActionGroups AS CHARACTER) :
  11089. /*------------------------------------------------------------------------------
  11090. Purpose: Sets the action groups selected in the Instance Properties.
  11091. Parameters: INPUT pcActionGroups - Comma separated list of actionGroups
  11092. Notes: Repository toolbar uses categories while non-repository objects
  11093. uses parent actions
  11094. ----------------------------------------------------------------------------*/
  11095. {set ActionGroups pcActionGroups}.
  11096. RETURN TRUE.
  11097. END FUNCTION.
  11098. /* _UIB-CODE-BLOCK-END */
  11099. &ANALYZE-RESUME
  11100. &ENDIF
  11101. &IF DEFINED(EXCLUDE-setActionsLoaded) = 0 &THEN
  11102. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setActionsLoaded Procedure
  11103. FUNCTION setActionsLoaded RETURNS LOGICAL
  11104. ( plIsLoaded AS LOG ) :
  11105. /*------------------------------------------------------------------------------
  11106. Purpose: Set class flag that actions have been loaded
  11107. Notes: Called from initActions
  11108. Considered PRIVATE, but not defined as private since
  11109. custom initAction may need to call it if it does not call SUPER
  11110. ------------------------------------------------------------------------------*/
  11111. glActionsLoaded = plIsLoaded.
  11112. END FUNCTION.
  11113. /* _UIB-CODE-BLOCK-END */
  11114. &ANALYZE-RESUME
  11115. &ENDIF
  11116. &IF DEFINED(EXCLUDE-setActionWidgetIDs) = 0 &THEN
  11117. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setActionWidgetIDs Procedure
  11118. FUNCTION setActionWidgetIDs RETURNS LOGICAL
  11119. (INPUT pcActionWidgetIDs AS CHARACTER):
  11120. /*------------------------------------------------------------------------------
  11121. Purpose:
  11122. Notes:
  11123. ------------------------------------------------------------------------------*/
  11124. {set ActionWidgetIDs pcActionWidgetIDs}.
  11125. END FUNCTION.
  11126. /* _UIB-CODE-BLOCK-END */
  11127. &ANALYZE-RESUME
  11128. &ENDIF
  11129. &IF DEFINED(EXCLUDE-setAvailMenuActions) = 0 &THEN
  11130. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setAvailMenuActions Procedure
  11131. FUNCTION setAvailMenuActions RETURNS LOGICAL
  11132. (pcAvailMenuActions AS CHARACTER) :
  11133. /*------------------------------------------------------------------------------
  11134. Purpose: Sets the actions that are available in the menu of the toolbar object
  11135. Parameters: INPUT pcAvailMenuActions - Comma separated list of actionGroups
  11136. Notes: Updated internally from insertMenu
  11137. The Instance Property dialog shows these and AvailToolbarActions.
  11138. The actions that are selected will be saved as ActionGroups.
  11139. ------------------------------------------------------------------------------*/
  11140. {set AvailMenuActions pcAvailMenuActions}.
  11141. RETURN TRUE.
  11142. END FUNCTION.
  11143. /* _UIB-CODE-BLOCK-END */
  11144. &ANALYZE-RESUME
  11145. &ENDIF
  11146. &IF DEFINED(EXCLUDE-setAvailToolbarActions) = 0 &THEN
  11147. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setAvailToolbarActions Procedure
  11148. FUNCTION setAvailToolbarActions RETURNS LOGICAL
  11149. (pcAvailToolbarActions AS CHARACTER) :
  11150. /*------------------------------------------------------------------------------
  11151. Purpose: Sets the actions that are available in the toolbar.
  11152. Parameters: INPUT pcAvailToolbarActions - Comma separated list of actionGroups
  11153. Notes: Updated internally from createToolbar
  11154. The Instance Property dialog shows these and AvailMenuActions.
  11155. The actions that are selected will be saved as ActionGroups.
  11156. ------------------------------------------------------------------------------*/
  11157. {set AvailToolbarActions pcAvailToolbarActions}.
  11158. RETURN TRUE.
  11159. END FUNCTION.
  11160. /* _UIB-CODE-BLOCK-END */
  11161. &ANALYZE-RESUME
  11162. &ENDIF
  11163. &IF DEFINED(EXCLUDE-setBoxRectangle) = 0 &THEN
  11164. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setBoxRectangle Procedure
  11165. FUNCTION setBoxRectangle RETURNS LOGICAL
  11166. ( phRectangle AS HANDLE) :
  11167. /*------------------------------------------------------------------------------
  11168. Purpose: Store the handle to the rectangle, if any "box" is used around the
  11169. buttons in the toolbar, or the top rectangle if toolbarAutoSize.
  11170. Params: hRectangle - handle
  11171. ------------------------------------------------------------------------------*/
  11172. {set BoxRectangle phRectangle}.
  11173. RETURN TRUE.
  11174. END FUNCTION.
  11175. /* _UIB-CODE-BLOCK-END */
  11176. &ANALYZE-RESUME
  11177. &ENDIF
  11178. &IF DEFINED(EXCLUDE-setBoxRectangle2) = 0 &THEN
  11179. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setBoxRectangle2 Procedure
  11180. FUNCTION setBoxRectangle2 RETURNS LOGICAL
  11181. ( hValue AS HANDLE ) :
  11182. /*------------------------------------------------------------------------------
  11183. Purpose: bottom rectangle if toolbarautosize
  11184. Notes:
  11185. ------------------------------------------------------------------------------*/
  11186. {set BoxRectangle2 hValue}.
  11187. RETURN TRUE.
  11188. END FUNCTION.
  11189. /* _UIB-CODE-BLOCK-END */
  11190. &ANALYZE-RESUME
  11191. &ENDIF
  11192. &IF DEFINED(EXCLUDE-setBuffer) = 0 &THEN
  11193. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setBuffer Procedure
  11194. FUNCTION setBuffer RETURNS LOGICAL PRIVATE
  11195. (pcObject AS CHAR,
  11196. pcAction AS CHAR,
  11197. pcColumns AS CHAR,
  11198. pcValues AS CHAR,
  11199. phTarget AS HANDLE) :
  11200. /*------------------------------------------------------------------------------
  11201. Purpose: Creates or assigns properties for an action.
  11202. Notes: PRIVATE -
  11203. ------------------------------------------------------------------------------*/
  11204. DEFINE BUFFER bttAction FOR ttACTION.
  11205. DEFINE VARIABLE hBuffer AS HANDLE NO-UNDO.
  11206. DEFINE VARIABLE cColumn AS CHARACTER NO-UNDO.
  11207. DEFINE VARIABLE hColumn AS HANDLE NO-UNDO.
  11208. DEFINE VARIABLE iOrder AS INTEGER NO-UNDO.
  11209. DEFINE VARIABLE i AS INTEGER NO-UNDO.
  11210. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  11211. DEFINE VARIABLE lUseRepository AS LOGICAL NO-UNDO.
  11212. define variable cMessage as character no-undo.
  11213. /* Tell findAction to use phTarget (this is undefined in findaction) */
  11214. &SCOPED-DEFINE TargetProc phTarget
  11215. {&findaction}
  11216. IF NOT AVAIL ttAction THEN
  11217. DO:
  11218. /* If we are creating a class make sure there's no instance defined */
  11219. IF NOT CAN-DO(pcColumns,"Instance":U)
  11220. AND CAN-FIND(FIRST bttAction WHERE bttAction.Action = pcAction) THEN
  11221. DO:
  11222. cMessage = SUBSTITUTE({fnarg messageNumber 38 phTarget}, pcAction).
  11223. {fnarg errorMessage cMessage phTarget}.
  11224. RETURN FALSE.
  11225. END.
  11226. CREATE ttAction.
  11227. ASSIGN
  11228. ttAction.Action = pcAction.
  11229. /* Set target to class in order to check for duplicates when reading
  11230. data from repository */
  11231. IF NOT CAN-DO(pcColumns,"Instance":U) THEN
  11232. ASSIGN
  11233. ttAction.ProcedureHandle = THIS-PROCEDURE.
  11234. END. /* not findAction */
  11235. /* If the action exists and this is the definition of an instance
  11236. action, check that the one we have found is not a class action. */
  11237. ELSE IF CAN-DO(pcColumns,"Instance":U) THEN
  11238. DO:
  11239. IF ttAction.ProcedureHandle <> phTarget THEN
  11240. DO:
  11241. cMessage = SUBSTITUTE({fnarg messageNumber 39 phTarget}, pcAction).
  11242. {fnarg errorMessage cMessage phTarget}.
  11243. RETURN FALSE.
  11244. END.
  11245. END. /* else (avail action) can-do(pccolumns,'instance') */
  11246. hBuffer = BUFFER ttAction:HANDLE.
  11247. DO i = 1 TO NUM-ENTRIES(pcColumns):
  11248. cColumn = ENTRY(i,pcColumns).
  11249. /* If instance assign toolbarhandle = target, we don't care about the
  11250. value. */
  11251. IF cColumn = 'Instance':U THEN
  11252. ASSIGN
  11253. hColumn = hBuffer:BUFFER-FIELD('ProcedureHandle':U)
  11254. hColumn:BUFFER-VALUE = phTarget.
  11255. ELSE
  11256. ASSIGN
  11257. hColumn = hBuffer:BUFFER-FIELD(cColumn)
  11258. hColumn:BUFFER-VALUE = IF NUM-ENTRIES(pcValues,CHR(1)) >= i
  11259. THEN ENTRY(i,pcValues,CHR(1))
  11260. ELSE ?.
  11261. IF cColumn = "Order":U THEN
  11262. iOrder = hColumn:BUFFER-VALUE.
  11263. IF cColumn = "Link":U THEN
  11264. cLink = hColumn:BUFFER-VALUE.
  11265. /* Here we should probably loop through the siblings and increase
  11266. their order. () */
  11267. END. /* do i = 1 to num-entries(pccolumns) */
  11268. /* If order has not been assigned assign default order */
  11269. IF iOrder = 0 THEN
  11270. DO:
  11271. FIND LAST bttAction WHERE bttAction.Parent = ttAction.Parent NO-ERROR.
  11272. ASSIGN
  11273. iOrder = IF AVAIL bttAction
  11274. THEN bttAction.Order + 1
  11275. ELSE 1
  11276. /* This could be changed to static now: ttAction.Order = iorder */
  11277. hColumn = hBuffer:BUFFER-FIELD("ORDER":U)
  11278. hColumn:BUFFER-VALUE = iOrder.
  11279. END.
  11280. /* If cLink has not been assigned assign the default link from the parent */
  11281. IF cLink = '':U THEN
  11282. DO:
  11283. FIND bttAction WHERE bttAction.Action = ttAction.Parent NO-ERROR.
  11284. IF AVAIL bttAction THEN
  11285. /* This could be changed to static now: ttAction.Link = bttAction.Link */
  11286. ASSIGN
  11287. hColumn = hBuffer:BUFFER-FIELD("Link":U)
  11288. hColumn:BUFFER-VALUE = bttAction.Link.
  11289. END.
  11290. /* Non repository calls defineAction without target from initAction,
  11291. so we use the direct check if super is target as getUseRepository will
  11292. not be found */
  11293. IF phTarget = THIS-PROCEDURE THEN
  11294. lUseRepository = DYNAMIC-FUNCTION('isICFRunning':U IN THIS-PROCEDURE) NO-ERROR.
  11295. ELSE /* minimize risk of the above and use the normal call in other cases */
  11296. lUseRepository = DYNAMIC-FUNCTION("getUseRepository":U IN phTarget).
  11297. /* Set controlType for non-repository actions to 'Action' if onChoose is
  11298. defined, UNLESS a createEvent is defined, in which case the OnChoose is
  11299. defined to be inherited by the items being added in that event.
  11300. The ControlType is used in createMenuAction to decide whether to create
  11301. a menu-item or submenu.
  11302. - Ensure that Unknown is handled as FALSE (if isICFRunning will be unknown
  11303. if the function is not there) */
  11304. IF NOT (lUseRepository = TRUE) THEN
  11305. ttAction.ControlType = IF ttAction.OnChoose <> '' AND ttAction.createEvent = ''
  11306. THEN 'Action':U
  11307. ELSE 'Label':U.
  11308. RETURN hBuffer:AVAILABLE.
  11309. END FUNCTION.
  11310. /* _UIB-CODE-BLOCK-END */
  11311. &ANALYZE-RESUME
  11312. &ENDIF
  11313. &IF DEFINED(EXCLUDE-setCommitTarget) = 0 &THEN
  11314. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setCommitTarget Procedure
  11315. FUNCTION setCommitTarget RETURNS LOGICAL
  11316. ( pcObject AS CHARACTER ) :
  11317. /*------------------------------------------------------------------------------
  11318. Purpose: Sets the CommitTarget link value.
  11319. Params: pcObject AS CHARACTER -- CHARACTER string form of the procedure
  11320. handle(s) which should be made Commit-Target(s)
  11321. Notes: Because the value can be a list, it should be changed using
  11322. modifyListProperty
  11323. ------------------------------------------------------------------------------*/
  11324. {set CommitTarget pcObject}.
  11325. RETURN TRUE.
  11326. END FUNCTION.
  11327. /* _UIB-CODE-BLOCK-END */
  11328. &ANALYZE-RESUME
  11329. &ENDIF
  11330. &IF DEFINED(EXCLUDE-setCommitTargetEvents) = 0 &THEN
  11331. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setCommitTargetEvents Procedure
  11332. FUNCTION setCommitTargetEvents RETURNS LOGICAL
  11333. ( pcEvents AS CHARACTER ) :
  11334. /*------------------------------------------------------------------------------
  11335. Purpose: Sets the list of events to subscribe to in the CommitTarget.
  11336. Params: pcEvents AS CHARACTER -- CHARACTER string form of the event names.
  11337. Notes: Because the value can be a list, it should be changed using
  11338. modifyListProperty
  11339. ------------------------------------------------------------------------------*/
  11340. {set CommitTargetEvents pcEvents}.
  11341. RETURN TRUE.
  11342. END FUNCTION.
  11343. /* _UIB-CODE-BLOCK-END */
  11344. &ANALYZE-RESUME
  11345. &ENDIF
  11346. &IF DEFINED(EXCLUDE-setContainerToolbarTarget) = 0 &THEN
  11347. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setContainerToolbarTarget Procedure
  11348. FUNCTION setContainerToolbarTarget RETURNS LOGICAL
  11349. ( pcTarget AS CHARACTER ):
  11350. /*------------------------------------------------------------------------------
  11351. Purpose: Sets the handle of the object's containertoolbar-target. This
  11352. may be a delimited list of handles.
  11353. Params:
  11354. Notes:
  11355. ------------------------------------------------------------------------------*/
  11356. {set ContainerToolbarTarget pcTarget}.
  11357. RETURN TRUE.
  11358. END FUNCTION.
  11359. /* _UIB-CODE-BLOCK-END */
  11360. &ANALYZE-RESUME
  11361. &ENDIF
  11362. &IF DEFINED(EXCLUDE-setContainerToolbarTargetEvents) = 0 &THEN
  11363. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setContainerToolbarTargetEvents Procedure
  11364. FUNCTION setContainerToolbarTargetEvents RETURNS LOGICAL
  11365. ( pcEvents AS CHARACTER ) :
  11366. /*------------------------------------------------------------------------------
  11367. Purpose: Sets the list of events to be subscribed to in the
  11368. ContainerToolbar-target.
  11369. Params: <none>
  11370. Notes:
  11371. ------------------------------------------------------------------------------*/
  11372. {set ContainerToolbarTargetEvents pcEvents}.
  11373. RETURN TRUE.
  11374. END FUNCTION.
  11375. /* _UIB-CODE-BLOCK-END */
  11376. &ANALYZE-RESUME
  11377. &ENDIF
  11378. &IF DEFINED(EXCLUDE-setCreateSubMenuOnConflict) = 0 &THEN
  11379. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setCreateSubMenuOnConflict Procedure
  11380. FUNCTION setCreateSubMenuOnConflict RETURNS LOGICAL
  11381. ( plCreateSubMenu AS LOG ) :
  11382. /*------------------------------------------------------------------------------
  11383. Purpose: Decides whether to create submenu for conflicting bands
  11384. Parameters: INPUT plCreateSubMenu
  11385. Yes - Create a submenu when a band already has linked actions for another toolbar.
  11386. No - Insert conflicting bands in same submenu
  11387. Notes:
  11388. ------------------------------------------------------------------------------*/
  11389. {set CreateSubMenuOnConflict plCreateSubMenu}.
  11390. RETURN TRUE.
  11391. END FUNCTION.
  11392. /* _UIB-CODE-BLOCK-END */
  11393. &ANALYZE-RESUME
  11394. &ENDIF
  11395. &IF DEFINED(EXCLUDE-setDeactivateTargetOnHide) = 0 &THEN
  11396. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDeactivateTargetOnHide Procedure
  11397. FUNCTION setDeactivateTargetOnHide RETURNS LOGICAL
  11398. ( plDeactivateTargetOnHide AS LOGICAL ) :
  11399. /*------------------------------------------------------------------------------
  11400. Purpose: Set to true if a target should be deactivated immediately on hide
  11401. False indicates that the hidden targets are deactivated on view of
  11402. another target.
  11403. Notes: True should be used to disable a toolbar when the object is hidden
  11404. also when the object has only one target or to disable the toolbar
  11405. when the current page is a page that does not have any target.
  11406. False (default) ensures that the targets always are active if
  11407. only one link even if they are hidden and avoids the disabling
  11408. in a paged container when switching pages.
  11409. ------------------------------------------------------------------------------*/
  11410. {set DeactivateTargetOnHide plDeactivateTargetOnHide}.
  11411. RETURN plDeactivateTargetOnHide.
  11412. END FUNCTION.
  11413. /* _UIB-CODE-BLOCK-END */
  11414. &ANALYZE-RESUME
  11415. &ENDIF
  11416. &IF DEFINED(EXCLUDE-setDisabledActions) = 0 &THEN
  11417. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setDisabledActions Procedure
  11418. FUNCTION setDisabledActions RETURNS LOGICAL
  11419. ( pcActions AS CHARACTER ) :
  11420. /*------------------------------------------------------------------------------
  11421. Purpose: Stores a comma separated list of disabled actions.
  11422. Params: pcActions AS CHARACTER -- Comma separated list of actions
  11423. Notes: - The actions will be immediately disabled and subsequent calls
  11424. to enableActions will not enable them again. This makes it
  11425. possible to permanently disable actions independent of state
  11426. changes.
  11427. - Use the modifyDisabledActions to add or remove actions.
  11428. ------------------------------------------------------------------------------*/
  11429. DEFINE VARIABLE cEnabledActions AS CHARACTER NO-UNDO.
  11430. DEFINE VARIABLE cDisabledActions AS CHARACTER NO-UNDO.
  11431. DEFINE VARIABLE lInitialized AS LOGICAL NO-UNDO.
  11432. DEFINE VARIABLE iLoop AS INTEGER NO-UNDO.
  11433. DEFINE VARIABLE cOldActions AS CHARACTER NO-UNDO.
  11434. DEFINE VARIABLE cAction AS CHARACTER NO-UNDO.
  11435. DEFINE VARIABLE hTarget AS HANDLE NO-UNDO.
  11436. DEFINE VARIABLE cEnableRule AS CHARACTER NO-UNDO.
  11437. DEFINE VARIABLE lEnable AS LOGICAL NO-UNDO.
  11438. {get ObjectInitialized lInitialized}.
  11439. cDisabledActions = pcActions.
  11440. /* If initialized then check if states should be enabled */
  11441. IF lInitialized THEN
  11442. DO:
  11443. {get DisabledActions cOldActions}.
  11444. DO iLoop = 1 TO NUM-ENTRIES(cOldActions):
  11445. cAction = ENTRY(iLoop,cOldActions).
  11446. /* Removed from list, potential candidate for enabling */
  11447. IF NOT CAN-DO(pcActions,cAction) THEN
  11448. cEnabledActions = cEnabledActions
  11449. + (IF cEnabledActions = "":U THEN "":U ELSE ",":U)
  11450. + cAction.
  11451. ELSE /* Already in list noneed to disable */
  11452. cDisabledActions = TRIM(REPLACE(",":U + cDisabledActions + ",":U,
  11453. ",":U + cAction + ",":U,","),
  11454. ",":U).
  11455. END.
  11456. /* loop through enable candidates and check if the Enablerule allows
  11457. immediate enabling */
  11458. DO iLoop = 1 TO NUM-ENTRIES(cEnabledActions):
  11459. cAction = ENTRY(iLoop,cEnabledActions).
  11460. hTarget = {fnarg actionTarget cAction}.
  11461. IF VALID-HANDLE(hTarget) THEN
  11462. DO:
  11463. ASSIGN
  11464. cEnableRule = {fnarg actionEnableRule cAction}
  11465. lEnable = TRUE.
  11466. IF cEnableRule > "":U THEN
  11467. lEnable = DYNAMIC-FUNCTION('checkRule':U IN TARGET-PROCEDURE,
  11468. cEnableRule,
  11469. hTarget,
  11470. lEnable).
  11471. IF lEnable THEN
  11472. {fnarg EnableActions cAction}.
  11473. END.
  11474. END.
  11475. END.
  11476. /* This could possibly also be done only if initializated, but we do it
  11477. always to ensure that old behavior is not broken
  11478. (this could possibly be used for unsupported/unlinked actions ) */
  11479. {fnarg disableActions cDisabledActions}.
  11480. &SCOPED-DEFINE xpDisabledActions
  11481. {set DisabledActions pcActions}.
  11482. &UNDEFINE xpDisabledActions
  11483. RETURN TRUE.
  11484. END FUNCTION.
  11485. /* _UIB-CODE-BLOCK-END */
  11486. &ANALYZE-RESUME
  11487. &ENDIF
  11488. &IF DEFINED(EXCLUDE-setEdgePixels) = 0 &THEN
  11489. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setEdgePixels Procedure
  11490. FUNCTION setEdgePixels RETURNS LOGICAL
  11491. (piPixels AS INTEGER ) :
  11492. /*------------------------------------------------------------------------------
  11493. Purpose: Sets the number of edge-pixels in the enclosing rectangle
  11494. Params: piPixels AS INTEGER
  11495. (xp because panel has override)
  11496. ------------------------------------------------------------------------------*/
  11497. &SCOPED-DEFINE xpEdgePixels
  11498. {set EdgePixels piPixels}.
  11499. &UNDEFINE xpEdgePixels
  11500. RETURN TRUE.
  11501. END FUNCTION.
  11502. /* _UIB-CODE-BLOCK-END */
  11503. &ANALYZE-RESUME
  11504. &ENDIF
  11505. &IF DEFINED(EXCLUDE-setFlatButtons) = 0 &THEN
  11506. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setFlatButtons Procedure
  11507. FUNCTION setFlatButtons RETURNS LOGICAL
  11508. ( plFlatButtons AS LOGICAL ) :
  11509. /*------------------------------------------------------------------------------
  11510. Purpose:
  11511. Params: NOT IN USE
  11512. ------------------------------------------------------------------------------*/
  11513. {set FlatButtons plFlatButtons}.
  11514. RETURN TRUE.
  11515. END FUNCTION.
  11516. /* _UIB-CODE-BLOCK-END */
  11517. &ANALYZE-RESUME
  11518. &ENDIF
  11519. &IF DEFINED(EXCLUDE-setHiddenActions) = 0 &THEN
  11520. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setHiddenActions Procedure
  11521. FUNCTION setHiddenActions RETURNS LOGICAL
  11522. ( pcActions AS CHAR) :
  11523. /*------------------------------------------------------------------------------
  11524. Purpose:
  11525. Notes:
  11526. ------------------------------------------------------------------------------*/
  11527. &SCOPED-DEFINE xpHiddenActions
  11528. {set HiddenActions pcActions}.
  11529. &UNDEFINE xpHiddenActions
  11530. RETURN TRUE.
  11531. END FUNCTION.
  11532. /* _UIB-CODE-BLOCK-END */
  11533. &ANALYZE-RESUME
  11534. &ENDIF
  11535. &IF DEFINED(EXCLUDE-setHiddenMenuBands) = 0 &THEN
  11536. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setHiddenMenuBands Procedure
  11537. FUNCTION setHiddenMenuBands RETURNS LOGICAL
  11538. (pcHiddenBands AS CHARACTER ) :
  11539. /*------------------------------------------------------------------------------
  11540. Purpose: This must be set before initialization
  11541. Notes:
  11542. ------------------------------------------------------------------------------*/
  11543. {set HiddenMenuBands pcHiddenBands}.
  11544. RETURN TRUE.
  11545. END FUNCTION.
  11546. /* _UIB-CODE-BLOCK-END */
  11547. &ANALYZE-RESUME
  11548. &ENDIF
  11549. &IF DEFINED(EXCLUDE-setHiddenToolbarBands) = 0 &THEN
  11550. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setHiddenToolbarBands Procedure
  11551. FUNCTION setHiddenToolbarBands RETURNS LOGICAL
  11552. (pcHiddenBands AS CHARACTER ) :
  11553. /*------------------------------------------------------------------------------
  11554. Purpose: This must be set before initialization
  11555. Notes:
  11556. ------------------------------------------------------------------------------*/
  11557. {set HiddenToolbarBands pcHiddenBands}.
  11558. RETURN TRUE.
  11559. END FUNCTION.
  11560. /* _UIB-CODE-BLOCK-END */
  11561. &ANALYZE-RESUME
  11562. &ENDIF
  11563. &IF DEFINED(EXCLUDE-setImagePath) = 0 &THEN
  11564. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setImagePath Procedure
  11565. FUNCTION setImagePath RETURNS LOGICAL
  11566. ( pcImagePath AS CHAR ) :
  11567. /*------------------------------------------------------------------------------
  11568. Purpose: Set the opsys path of the images
  11569. Notes:
  11570. ------------------------------------------------------------------------------*/
  11571. {set ImagePath pcImagePath}.
  11572. RETURN TRUE.
  11573. END FUNCTION.
  11574. /* _UIB-CODE-BLOCK-END */
  11575. &ANALYZE-RESUME
  11576. &ENDIF
  11577. &IF DEFINED(EXCLUDE-setLinkTargetNames) = 0 &THEN
  11578. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setLinkTargetNames Procedure
  11579. FUNCTION setLinkTargetNames RETURNS LOGICAL
  11580. ( pcLinkList AS CHARACTER ) :
  11581. /*------------------------------------------------------------------------------
  11582. Purpose: Modifies the list of the supported toolbar links. This is based on
  11583. either the tool's specified item-Link, or the Category the tools
  11584. belong to.
  11585. Params: pcLinkList AS CHARACTER -- comma-separated list of links.
  11586. Returns: LOGICAL (true)
  11587. Notes: Because this is a comma-separated list, it should normally be
  11588. invoked indirectly, through modifyListProperty.
  11589. ------------------------------------------------------------------------------*/
  11590. {set LinkTargetNames pcLinkList}.
  11591. RETURN TRUE.
  11592. END FUNCTION.
  11593. /* _UIB-CODE-BLOCK-END */
  11594. &ANALYZE-RESUME
  11595. &ENDIF
  11596. &IF DEFINED(EXCLUDE-setMenu) = 0 &THEN
  11597. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setMenu Procedure
  11598. FUNCTION setMenu RETURNS LOGICAL
  11599. ( plMenu AS LOGICAL ) :
  11600. /*------------------------------------------------------------------------------
  11601. Purpose: set to TRUE if a menu is to be generated
  11602. Parameters: INPUT plMenu - log
  11603. Notes:
  11604. ------------------------------------------------------------------------------*/
  11605. {set Menu plMenu}.
  11606. RETURN TRUE.
  11607. END FUNCTION.
  11608. /* _UIB-CODE-BLOCK-END */
  11609. &ANALYZE-RESUME
  11610. &ENDIF
  11611. &IF DEFINED(EXCLUDE-setMenuMergeOrder) = 0 &THEN
  11612. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setMenuMergeOrder Procedure
  11613. FUNCTION setMenuMergeOrder RETURNS LOGICAL
  11614. ( piOrder AS INT ) :
  11615. /*------------------------------------------------------------------------------
  11616. Purpose: Decides the order of which the menus will be merged with other
  11617. toolbar instances.
  11618. Parameters: INPUT piOrder
  11619. Notes:
  11620. ------------------------------------------------------------------------------*/
  11621. {set MenuMergeOrder piOrder}.
  11622. RETURN TRUE.
  11623. END FUNCTION.
  11624. /* _UIB-CODE-BLOCK-END */
  11625. &ANALYZE-RESUME
  11626. &ENDIF
  11627. &IF DEFINED(EXCLUDE-setNavigationButtons) = 0 &THEN
  11628. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setNavigationButtons Procedure
  11629. FUNCTION setNavigationButtons RETURNS LOGICAL
  11630. ( pcState AS CHAR ) :
  11631. /*------------------------------------------------------------------------------
  11632. Purpose: DEPRECATED -- Did convert a navigation QueryPosition to setButton
  11633. parameter..
  11634. pcState: State from QueryPosition
  11635. Notes: Will still set PanelState, which is also DEPRECATED .
  11636. ------------------------------------------------------------------------------*/ /* Navigation states */
  11637. DEF VAR cPanelState AS CHAR NO-UNDO.
  11638. CASE pcState:
  11639. WHEN 'FirstRecord':U THEN
  11640. cPanelState = 'first':U.
  11641. WHEN 'LastRecord':U THEN
  11642. cPanelState = 'last':U.
  11643. WHEN 'NotFirstOrLast':U THEN
  11644. cPanelState = 'enable-nav':U.
  11645. WHEN 'OnlyRecord':U OR
  11646. WHEN 'NoRecordAvailable':U OR
  11647. WHEN 'NoRecordAvailableExt':U THEN
  11648. cPanelState = 'disable-nav':U.
  11649. END CASE.
  11650. IF cPanelState NE "":U THEN
  11651. {set PanelState cPanelState}. /* runs setButtons */
  11652. RETURN TRUE.
  11653. END FUNCTION.
  11654. /* _UIB-CODE-BLOCK-END */
  11655. &ANALYZE-RESUME
  11656. &ENDIF
  11657. &IF DEFINED(EXCLUDE-setNavigationTarget) = 0 &THEN
  11658. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setNavigationTarget Procedure
  11659. FUNCTION setNavigationTarget RETURNS LOGICAL
  11660. ( pcObject AS CHARACTER ) :
  11661. /*------------------------------------------------------------------------------
  11662. Purpose: Sets the NavigationTarget link value.
  11663. Params: pcObject AS CHARACTER -- CHARACTER string form of the procedure
  11664. handle(s) which should be made Navigation-Target(s)
  11665. Notes: Because the value can be a list, it should be changed using
  11666. modifyListProperty
  11667. ------------------------------------------------------------------------------*/
  11668. {set NavigationTarget pcObject}.
  11669. RETURN TRUE.
  11670. END FUNCTION.
  11671. /* _UIB-CODE-BLOCK-END */
  11672. &ANALYZE-RESUME
  11673. &ENDIF
  11674. &IF DEFINED(EXCLUDE-setNavigationTargetEvents) = 0 &THEN
  11675. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setNavigationTargetEvents Procedure
  11676. FUNCTION setNavigationTargetEvents RETURNS LOGICAL
  11677. ( pcEvents AS CHARACTER ) :
  11678. /*------------------------------------------------------------------------------
  11679. Purpose: Sets the list of events to subscribe to in the NavigationTarget.
  11680. Params: pcEvents AS CHARACTER -- CHARACTER string form of the event names.
  11681. Notes: Because the value can be a list, it should be changed using
  11682. modifyListProperty
  11683. ------------------------------------------------------------------------------*/
  11684. {set NavigationTargetEvents pcEvents}.
  11685. RETURN TRUE.
  11686. END FUNCTION.
  11687. /* _UIB-CODE-BLOCK-END */
  11688. &ANALYZE-RESUME
  11689. &ENDIF
  11690. &IF DEFINED(EXCLUDE-setNavigationTargetName) = 0 &THEN
  11691. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setNavigationTargetName Procedure
  11692. FUNCTION setNavigationTargetName RETURNS LOGICAL
  11693. ( pcTargetName AS CHARACTER ) :
  11694. /*------------------------------------------------------------------------------
  11695. Purpose: Sets the ObjectName of the Data Object to be navigated by this
  11696. panel. This would be set if the Navigation-Target is an SBO
  11697. or other Container with DataObjects.
  11698. Params: pcTargetName AS CHARACTER
  11699. ------------------------------------------------------------------------------*/
  11700. {set NavigationTargetName pcTargetName}.
  11701. RETURN TRUE.
  11702. END FUNCTION.
  11703. /* _UIB-CODE-BLOCK-END */
  11704. &ANALYZE-RESUME
  11705. &ENDIF
  11706. &IF DEFINED(EXCLUDE-setPanelState) = 0 &THEN
  11707. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setPanelState Procedure
  11708. FUNCTION setPanelState RETURNS LOGICAL
  11709. ( pcPanelState AS CHARACTER ) :
  11710. /*------------------------------------------------------------------------------
  11711. Purpose: DEPRECATED - Set the state of the Panel's buttons.
  11712. Params: pcPanelState AS CHARACTER
  11713. Notes: Also runs the panel procedure setButtons, which changes which
  11714. buttons are enabled and disabled based on the state.
  11715. - DEPRECATED in the sense that the toolbar disabling/enabling
  11716. has been replaced by rule based state management. The function
  11717. is still callable and may still be called in odd cases.
  11718. ------------------------------------------------------------------------------*/
  11719. RUN setButtons IN TARGET-PROCEDURE (pcPanelState).
  11720. IF RETURN-VALUE NE "ADM-ERROR":U THEN
  11721. DO:
  11722. &SCOPED-DEFINE xpPanelState
  11723. {set PanelState pcPanelState}.
  11724. &UNDEFINE xpPanelState
  11725. RETURN TRUE.
  11726. END.
  11727. ELSE
  11728. RETURN FALSE. /* new state was invalid somehow. */
  11729. END FUNCTION.
  11730. /* _UIB-CODE-BLOCK-END */
  11731. &ANALYZE-RESUME
  11732. &ENDIF
  11733. &IF DEFINED(EXCLUDE-setPanelType) = 0 &THEN
  11734. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setPanelType Procedure
  11735. FUNCTION setPanelType RETURNS LOGICAL
  11736. ( pcPanelType AS CHARACTER ) :
  11737. /*------------------------------------------------------------------------------
  11738. Purpose: Sets the type of Panel: Navigation, Save, Update
  11739. Params: pcPanelType AS CHARACTER
  11740. Notes: Is defined in toolbar class for backwards compatibility since it
  11741. was defined as an instance property.
  11742. - The value for the toolbar is 'toolbar'.
  11743. ------------------------------------------------------------------------------*/
  11744. {set PanelType pcPanelType}.
  11745. RETURN TRUE.
  11746. END FUNCTION.
  11747. /* _UIB-CODE-BLOCK-END */
  11748. &ANALYZE-RESUME
  11749. &ENDIF
  11750. &IF DEFINED(EXCLUDE-setRemoveMenuOnHide) = 0 &THEN
  11751. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setRemoveMenuOnHide Procedure
  11752. FUNCTION setRemoveMenuOnHide RETURNS LOGICAL
  11753. ( plRemoveMenu AS LOG ) :
  11754. /*------------------------------------------------------------------------------
  11755. Purpose: Decides whether the the menus should be removed from the menubar
  11756. on hide of the toolbar.
  11757. Parameters: INPUT plRemove
  11758. Notes:
  11759. ------------------------------------------------------------------------------*/
  11760. {set RemoveMenuOnhide plRemoveMenu}.
  11761. RETURN TRUE.
  11762. END FUNCTION.
  11763. /* _UIB-CODE-BLOCK-END */
  11764. &ANALYZE-RESUME
  11765. &ENDIF
  11766. &IF DEFINED(EXCLUDE-setShowBorder) = 0 &THEN
  11767. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setShowBorder Procedure
  11768. FUNCTION setShowBorder RETURNS LOGICAL
  11769. ( plShowBorder AS LOGICAL ) :
  11770. /*------------------------------------------------------------------------------
  11771. Purpose: set to True if a three-d border is to be used around the buttons
  11772. and as a delimiter when "RULE" is specified in createToolbar
  11773. Parameters: INPUT plShowBorder - logical
  11774. Notes:
  11775. ------------------------------------------------------------------------------*/
  11776. {set ShowBorder plShowBorder}.
  11777. RETURN TRUE.
  11778. END FUNCTION.
  11779. /* _UIB-CODE-BLOCK-END */
  11780. &ANALYZE-RESUME
  11781. &ENDIF
  11782. &IF DEFINED(EXCLUDE-setSubModules) = 0 &THEN
  11783. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setSubModules Procedure
  11784. FUNCTION setSubModules RETURNS LOGICAL
  11785. ( pcSubModules AS CHARACTER ) :
  11786. /*------------------------------------------------------------------------------
  11787. Purpose: Sets the SubModules.
  11788. Params:
  11789. Notes: NOT IN USE ()
  11790. ------------------------------------------------------------------------------*/
  11791. {set SubModules pcSubModules}.
  11792. RETURN TRUE.
  11793. END FUNCTION.
  11794. /* _UIB-CODE-BLOCK-END */
  11795. &ANALYZE-RESUME
  11796. &ENDIF
  11797. &IF DEFINED(EXCLUDE-setTableIOButtons) = 0 &THEN
  11798. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTableIOButtons Procedure
  11799. FUNCTION setTableIOButtons RETURNS LOGICAL
  11800. ( pcState AS CHAR ) :
  11801. /*------------------------------------------------------------------------------
  11802. Purpose: Convert a tableio recordState to setButton parameter
  11803. pcState: State received from QueryPosition or tableioTarget's RecordState
  11804. Notes: Not actively used anymore
  11805. ------------------------------------------------------------------------------*/
  11806. DEFINE VARIABLE cPanelState AS CHARACTER NO-UNDO.
  11807. CASE pcState:
  11808. WHEN 'FirstRecord':U OR /* All these amount to RecordAvailable update*/
  11809. WHEN 'LastRecord':U OR
  11810. WHEN 'NotFirstOrLast':U OR
  11811. WHEN 'OnlyRecord':U OR
  11812. WHEN 'RecordAvailable':U THEN
  11813. cPanelState = 'initial-tableio':U.
  11814. WHEN 'NoRecordAvailable':U THEN
  11815. cPanelState = 'add-only':U.
  11816. WHEN 'NoRecordAvailableExt':U THEN
  11817. cPanelState = 'disable-tableio':U.
  11818. END CASE. /* pcState */
  11819. /* If we found a case for the state, reset it. */
  11820. IF cPanelState NE "":U THEN
  11821. RUN setButtons IN TARGET-PROCEDURE(cPanelState).
  11822. RETURN TRUE.
  11823. END FUNCTION.
  11824. /* _UIB-CODE-BLOCK-END */
  11825. &ANALYZE-RESUME
  11826. &ENDIF
  11827. &IF DEFINED(EXCLUDE-setTableIOTarget) = 0 &THEN
  11828. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTableIOTarget Procedure
  11829. FUNCTION setTableIOTarget RETURNS LOGICAL
  11830. ( pcObject AS CHARACTER ) :
  11831. /*------------------------------------------------------------------------------
  11832. Purpose: Sets the TableIOTarget link value.
  11833. Params: pcObject AS CHARACTER -- handle or handles of object(s) which
  11834. should be made TableIOTargets of the current object.1
  11835. Notes: Because this value can be a list, it should be changed using
  11836. modifyListProperty
  11837. ------------------------------------------------------------------------------*/
  11838. {set TableIOTarget pcObject}.
  11839. RETURN TRUE.
  11840. END FUNCTION.
  11841. /* _UIB-CODE-BLOCK-END */
  11842. &ANALYZE-RESUME
  11843. &ENDIF
  11844. &IF DEFINED(EXCLUDE-setTableIOTargetEvents) = 0 &THEN
  11845. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTableIOTargetEvents Procedure
  11846. FUNCTION setTableIOTargetEvents RETURNS LOGICAL
  11847. ( pcEvents AS CHARACTER ) :
  11848. /*------------------------------------------------------------------------------
  11849. Purpose: Sets the list of events to subscribe to in the TableIOTarget.
  11850. Params: pcEvents AS CHARACTER -- CHARACTER string form of the event names.
  11851. Notes: Because the value can be a list, it should be changed using
  11852. modifyListProperty
  11853. ------------------------------------------------------------------------------*/
  11854. {set TableIOTargetEvents pcEvents}.
  11855. RETURN TRUE.
  11856. END FUNCTION.
  11857. /* _UIB-CODE-BLOCK-END */
  11858. &ANALYZE-RESUME
  11859. &ENDIF
  11860. &IF DEFINED(EXCLUDE-setTableioType) = 0 &THEN
  11861. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setTableioType Procedure
  11862. FUNCTION setTableioType RETURNS LOGICAL
  11863. ( pcType AS CHARACTER ) :
  11864. /*------------------------------------------------------------------------------
  11865. Purpose: Sets the TableIOType link value.
  11866. Params: pcObject AS CHARACTER -- "Save" or "Update"
  11867. Notes: This is the same as PanelType in the update panel
  11868. ------------------------------------------------------------------------------*/
  11869. {set TableIOType pcType}.
  11870. RETURN TRUE.
  11871. END FUNCTION.
  11872. /* _UIB-CODE-BLOCK-END */
  11873. &ANALYZE-RESUME
  11874. &ENDIF
  11875. &IF DEFINED(EXCLUDE-setToolbar) = 0 &THEN
  11876. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbar Procedure
  11877. FUNCTION setToolbar RETURNS LOGICAL
  11878. ( plToolbar AS LOGICAL ) :
  11879. /*------------------------------------------------------------------------------
  11880. Purpose: set to TRUE if the toolbar is to be created
  11881. Parameters: INPUT plToolbar - logical
  11882. Notes:
  11883. ------------------------------------------------------------------------------*/
  11884. {set Toolbar plToolbar}.
  11885. RETURN TRUE.
  11886. END FUNCTION.
  11887. /* _UIB-CODE-BLOCK-END */
  11888. &ANALYZE-RESUME
  11889. &ENDIF
  11890. &IF DEFINED(EXCLUDE-setToolbarAutosize) = 0 &THEN
  11891. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarAutosize Procedure
  11892. FUNCTION setToolbarAutosize RETURNS LOGICAL
  11893. ( plToolbarAutoSize AS LOGICAL ) :
  11894. /*------------------------------------------------------------------------------
  11895. Purpose: Set to True if the toolbar should be automatically sized to the full
  11896. width of the window at run-time.
  11897. Parameters: INPUT plToolbarAutoSize - logical
  11898. Notes:
  11899. ------------------------------------------------------------------------------*/
  11900. {set ToolbarAutoSize plToolbarAutoSize}.
  11901. RETURN TRUE.
  11902. END FUNCTION.
  11903. /* _UIB-CODE-BLOCK-END */
  11904. &ANALYZE-RESUME
  11905. &ENDIF
  11906. &IF DEFINED(EXCLUDE-setToolbarBands) = 0 &THEN
  11907. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarBands Procedure
  11908. FUNCTION setToolbarBands RETURNS LOGICAL
  11909. (pcToolbarBands AS CHARACTER) :
  11910. /*------------------------------------------------------------------------------
  11911. Purpose: Sets the toolbar bands selected in the Instance Properties.
  11912. Parameters: INPUT pcToolbarBands - Comma separated list of Toolbar Bands
  11913. Notes: NOT USED
  11914. ----------------------------------------------------------------------------*/
  11915. {set ToolbarBands pcToolbarBands}.
  11916. RETURN TRUE.
  11917. END FUNCTION.
  11918. /* _UIB-CODE-BLOCK-END */
  11919. &ANALYZE-RESUME
  11920. &ENDIF
  11921. &IF DEFINED(EXCLUDE-setToolbarDrawDirection) = 0 &THEN
  11922. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarDrawDirection Procedure
  11923. FUNCTION setToolbarDrawDirection RETURNS LOGICAL
  11924. (pcToolbarDrawDirection AS CHARACTER) :
  11925. /*------------------------------------------------------------------------------
  11926. Purpose: Sets the toolbar draw direction.
  11927. Parameters: INPUT pcToolbarDrawDirection - horizontal or vertical
  11928. Notes:
  11929. ----------------------------------------------------------------------------*/
  11930. {set ToolbarDrawDirection pcToolbarDrawDirection}.
  11931. RETURN TRUE.
  11932. END FUNCTION.
  11933. /* _UIB-CODE-BLOCK-END */
  11934. &ANALYZE-RESUME
  11935. &ENDIF
  11936. &IF DEFINED(EXCLUDE-setToolbarMinWidth) = 0 &THEN
  11937. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarMinWidth Procedure
  11938. FUNCTION setToolbarMinWidth RETURNS LOGICAL
  11939. ( pdMinWidth AS DEC ) :
  11940. /*------------------------------------------------------------------------------
  11941. Purpose: set min width
  11942. Notes: Use setMinWidth -- Kept for backwards compatibility
  11943. ------------------------------------------------------------------------------*/
  11944. RETURN {fnarg setMinWidth pdMinWidth}.
  11945. END FUNCTION.
  11946. /* _UIB-CODE-BLOCK-END */
  11947. &ANALYZE-RESUME
  11948. &ENDIF
  11949. &IF DEFINED(EXCLUDE-setToolbarParentMenu) = 0 &THEN
  11950. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarParentMenu Procedure
  11951. FUNCTION setToolbarParentMenu RETURNS LOGICAL
  11952. (pcToolbarParentMenu AS CHARACTER) :
  11953. /*------------------------------------------------------------------------------
  11954. Purpose: Sets the toolbar parent menu selected in the Instance Properties.
  11955. Parameters: INPUT pcToolbarParentMenu
  11956. Notes: Only required if any toolbar menus need to be added under a specific
  11957. submenu, which will also be created if it does not exist.
  11958. ----------------------------------------------------------------------------*/
  11959. {set ToolbarParentMenu pcToolbarParentMenu}.
  11960. RETURN TRUE.
  11961. END FUNCTION.
  11962. /* _UIB-CODE-BLOCK-END */
  11963. &ANALYZE-RESUME
  11964. &ENDIF
  11965. &IF DEFINED(EXCLUDE-setToolbarTarget) = 0 &THEN
  11966. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarTarget Procedure
  11967. FUNCTION setToolbarTarget RETURNS LOGICAL
  11968. ( pcTarget AS CHARACTER ):
  11969. /*------------------------------------------------------------------------------
  11970. Purpose: Sets the handle of the object's toolbar-target. This may be a
  11971. delimited list of handles.
  11972. Params:
  11973. Notes:
  11974. ------------------------------------------------------------------------------*/
  11975. {set ToolbarTarget pcTarget}.
  11976. RETURN TRUE.
  11977. END FUNCTION.
  11978. /* _UIB-CODE-BLOCK-END */
  11979. &ANALYZE-RESUME
  11980. &ENDIF
  11981. &IF DEFINED(EXCLUDE-setToolbarTargetEvents) = 0 &THEN
  11982. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolbarTargetEvents Procedure
  11983. FUNCTION setToolbarTargetEvents RETURNS LOGICAL
  11984. ( pcEvents AS CHARACTER ) :
  11985. /*------------------------------------------------------------------------------
  11986. Purpose: Sets the list of events to be subscribed to in the
  11987. Toolbar-target.
  11988. Params: <none>
  11989. Notes:
  11990. ------------------------------------------------------------------------------*/
  11991. {set ToolbarTargetEvents pcEvents}.
  11992. RETURN TRUE.
  11993. END FUNCTION.
  11994. /* _UIB-CODE-BLOCK-END */
  11995. &ANALYZE-RESUME
  11996. &ENDIF
  11997. &IF DEFINED(EXCLUDE-setToolHeightPxl) = 0 &THEN
  11998. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolHeightPxl Procedure
  11999. FUNCTION setToolHeightPxl RETURNS LOGICAL
  12000. ( iValue AS INTEGER ) :
  12001. /*------------------------------------------------------------------------------
  12002. Purpose:
  12003. Notes:
  12004. ------------------------------------------------------------------------------*/
  12005. {set ToolHeightPxl iValue}.
  12006. RETURN TRUE.
  12007. END FUNCTION.
  12008. /* _UIB-CODE-BLOCK-END */
  12009. &ANALYZE-RESUME
  12010. &ENDIF
  12011. &IF DEFINED(EXCLUDE-setToolMarginPxl) = 0 &THEN
  12012. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolMarginPxl Procedure
  12013. FUNCTION setToolMarginPxl RETURNS LOGICAL
  12014. ( iValue AS INTEGER ) :
  12015. /*------------------------------------------------------------------------------
  12016. Purpose:
  12017. Notes:
  12018. ------------------------------------------------------------------------------*/
  12019. &SCOPED-DEFINE xpToolMarginPxl
  12020. {set ToolMarginPxl iValue}.
  12021. &UNDEFINE xpToolMarginPxl
  12022. RETURN TRUE.
  12023. END FUNCTION.
  12024. /* _UIB-CODE-BLOCK-END */
  12025. &ANALYZE-RESUME
  12026. &ENDIF
  12027. &IF DEFINED(EXCLUDE-setToolMaxWidthPxl) = 0 &THEN
  12028. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolMaxWidthPxl Procedure
  12029. FUNCTION setToolMaxWidthPxl RETURNS LOGICAL
  12030. ( iValue AS INTEGER ) :
  12031. /*------------------------------------------------------------------------------
  12032. Purpose:
  12033. Notes:
  12034. ------------------------------------------------------------------------------*/
  12035. {set ToolMaxWidthPxl iValue}.
  12036. RETURN TRUE.
  12037. END FUNCTION.
  12038. /* _UIB-CODE-BLOCK-END */
  12039. &ANALYZE-RESUME
  12040. &ENDIF
  12041. &IF DEFINED(EXCLUDE-setToolSeparatorPxl) = 0 &THEN
  12042. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolSeparatorPxl Procedure
  12043. FUNCTION setToolSeparatorPxl RETURNS LOGICAL
  12044. ( iValue AS INTEGER ) :
  12045. /*------------------------------------------------------------------------------
  12046. Purpose:
  12047. Notes:
  12048. ------------------------------------------------------------------------------*/
  12049. {set ToolSeparatorPxl iValue}.
  12050. RETURN TRUE.
  12051. END FUNCTION.
  12052. /* _UIB-CODE-BLOCK-END */
  12053. &ANALYZE-RESUME
  12054. &ENDIF
  12055. &IF DEFINED(EXCLUDE-setToolSpacingPxl) = 0 &THEN
  12056. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolSpacingPxl Procedure
  12057. FUNCTION setToolSpacingPxl RETURNS LOGICAL
  12058. ( iValue AS INTEGER ) :
  12059. /*------------------------------------------------------------------------------
  12060. Purpose:
  12061. Notes:
  12062. ------------------------------------------------------------------------------*/
  12063. {set ToolSpacingPxl iValue}.
  12064. RETURN TRUE.
  12065. END FUNCTION.
  12066. /* _UIB-CODE-BLOCK-END */
  12067. &ANALYZE-RESUME
  12068. &ENDIF
  12069. &IF DEFINED(EXCLUDE-setToolWidthPxl) = 0 &THEN
  12070. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION setToolWidthPxl Procedure
  12071. FUNCTION setToolWidthPxl RETURNS LOGICAL
  12072. ( iValue AS INTEGER ) :
  12073. /*------------------------------------------------------------------------------
  12074. Purpose:
  12075. Notes:
  12076. ------------------------------------------------------------------------------*/
  12077. {set ToolWidthPxl iValue}.
  12078. RETURN TRUE.
  12079. END FUNCTION.
  12080. /* _UIB-CODE-BLOCK-END */
  12081. &ANALYZE-RESUME
  12082. &ENDIF
  12083. &IF DEFINED(EXCLUDE-substituteActionText) = 0 &THEN
  12084. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION substituteActionText Procedure
  12085. FUNCTION substituteActionText RETURNS CHARACTER
  12086. ( pcAction AS CHAR,
  12087. pcText AS CHAR ) :
  12088. /*------------------------------------------------------------------------------
  12089. Purpose: Substitute &1 in the passed text with the substitute property.
  12090. Parameters: pcAction - action name
  12091. pcText - Text to substitute
  12092. Notes: Used by actionLabel, actionCaption and actionTooltip overrrides
  12093. ------------------------------------------------------------------------------*/
  12094. DEFINE VARIABLE cProperty AS CHARACTER NO-UNDO.
  12095. DEFINE VARIABLE cSubstitute AS CHARACTER NO-UNDO.
  12096. DEFINE VARIABLE hLink AS HANDLE NO-UNDO.
  12097. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  12098. IF INDEX(pcText,'&1':U) > 0 THEN
  12099. DO:
  12100. ASSIGN
  12101. hObject = {fnarg actionTarget pcAction}
  12102. cProperty = {fnarg actionSubstituteProperty pcAction}.
  12103. IF VALID-HANDLE(hObject) AND cProperty > '':U THEN
  12104. cSubstitute = DYNAMIC-FUNCTION('get':U + cProperty IN hObject) NO-ERROR.
  12105. IF cSubstitute = ? THEN
  12106. cSubstitute = '':U.
  12107. pcText = REPLACE(pcText,'&1':U,cSubstitute).
  12108. END.
  12109. RETURN pctext.
  12110. END FUNCTION.
  12111. /* _UIB-CODE-BLOCK-END */
  12112. &ANALYZE-RESUME
  12113. &ENDIF
  12114. &IF DEFINED(EXCLUDE-supportedObjects) = 0 &THEN
  12115. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION supportedObjects Procedure
  12116. FUNCTION supportedObjects RETURNS CHARACTER
  12117. (plLoaded AS LOG) :
  12118. /*------------------------------------------------------------------------------
  12119. Purpose: Returns a comma separated list of object names for object linked
  12120. with supported links.
  12121. Semi-colon is used to separate a potential RunAtttribute
  12122. Parameter: plLoaded - Yes - return all objects
  12123. No - return objects with unloaded ObjectBands
  12124. Notes: Currently only returns the container since this is the only
  12125. object that supports ObjectBands.
  12126. ------------------------------------------------------------------------------*/
  12127. DEFINE VARIABLE cObjectName AS CHARACTER NO-UNDO.
  12128. DEFINE VARIABLE cRunAttribute AS CHARACTER NO-UNDO.
  12129. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  12130. DEFINE VARIABLE cObjectList AS CHARACTER NO-UNDO.
  12131. DEFINE VARIABLE lHasObjectMenu AS LOGICAL NO-UNDO.
  12132. DEFINE VARIABLE cLinkTargetNames AS CHARACTER NO-UNDO.
  12133. DEFINE VARIABLE iLink AS INTEGER NO-UNDO.
  12134. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  12135. DEFINE VARIABLE hObject AS HANDLE NO-UNDO.
  12136. {get ContainerSource hContainerSource}.
  12137. IF VALID-HANDLE(hContainerSource) THEN
  12138. DO:
  12139. &SCOPED-DEFINE xp-assign
  12140. {get LogicalObjectName cObjectName hContainerSource}
  12141. {get RunAttribute cRunAttribute hContainerSource}
  12142. {get HasObjectMenu lHasObjectMenu hContainerSource}
  12143. .
  12144. &UNDEFINE xp-assign
  12145. IF plLoaded
  12146. OR (lHasObjectMenu = TRUE
  12147. AND NOT CAN-FIND(FIRST ttObjectBand
  12148. WHERE ttObjectBand.ObjectName = cObjectName
  12149. AND ttObjectBand.Runattribute = cRunAttribute)) THEN
  12150. cObjectList = cObjectName +
  12151. (IF cRunattribute = '':U THEN '':U ELSE ';':U + cRunattribute).
  12152. END.
  12153. /** We currently do not support ObjectMenus on linked objects
  12154. {get LinkTargetNames cLinkTargetNames}.
  12155. DO iLink = 1 TO NUM-ENTRIES(cLinkTargetNames):
  12156. ASSIGN
  12157. cLink = ENTRY(iLink,cLinkTargetNames)
  12158. hObject = DYNAMIC-FUNCTION('get':U + cLink) NO-ERROR.
  12159. IF VALID-HANDLE(hObject) THEN
  12160. DO:
  12161. {get LogicalObjectName cObjectName hObject}.
  12162. lHasObjectMenu = NO.
  12163. {get HasObjectMenu lHasObjectMenu hObject} NO-ERROR.
  12164. IF plLoaded
  12165. OR (lHasObjectMenu = TRUE
  12166. AND
  12167. NOT CAN-FIND(FIRST ttObjectBand
  12168. WHERE ttObjectBand.ObjectName = cObjectName)) THEN
  12169. cObjectList = cObjectList
  12170. + (IF cObjectList <> '':U THEN ',':U ELSE '':U)
  12171. + cObjectName.
  12172. END.
  12173. END.
  12174. END.
  12175. **/
  12176. RETURN cObjectList.
  12177. END FUNCTION.
  12178. /* _UIB-CODE-BLOCK-END */
  12179. &ANALYZE-RESUME
  12180. &ENDIF
  12181. &IF DEFINED(EXCLUDE-targetActions) = 0 &THEN
  12182. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION targetActions Procedure
  12183. FUNCTION targetActions RETURNS CHARACTER
  12184. ( pcLinkType AS CHAR ) :
  12185. /*------------------------------------------------------------------------------
  12186. Purpose: Returns the actions that applies to a specific target
  12187. Parameter: LinkType
  12188. Notes:
  12189. ------------------------------------------------------------------------------*/
  12190. DEFINE BUFFER btMenu FOR tMenu.
  12191. DEFINE BUFFER btButton FOR tButton.
  12192. DEFINE VARIABLE cLink AS CHARACTER NO-UNDO.
  12193. DEFINE VARIABLE cActions AS CHARACTER NO-UNDO.
  12194. DEFINE VARIABLE cControlType AS CHARACTER NO-UNDO.
  12195. IF pcLinkType <> '':U THEN
  12196. cLink = pcLinkType + '-target':U.
  12197. FOR EACH btButton WHERE btButton.hTarget = TARGET-PROCEDURE
  12198. AND btButton.Link = cLink:
  12199. IF VALID-HANDLE(btButton.hdl) THEN
  12200. DO:
  12201. cControlType = {fnarg actionControlType btButton.Name}.
  12202. IF cControlType = 'Action':U THEN
  12203. cActions = cActions
  12204. + (IF cActions <> '':U THEN ',':U ELSE '':U)
  12205. + btButton.Name.
  12206. END.
  12207. END.
  12208. FOR EACH btMenu WHERE btMenu.hTarget = TARGET-PROCEDURE
  12209. AND btMenu.Link = cLink:
  12210. IF NOT CAN-DO(cActions,btMenu.Name) AND VALID-HANDLE(btMenu.hdl) THEN
  12211. DO:
  12212. cControlType = {fnarg actionControlType btMenu.Name}.
  12213. IF cControlType = 'Action':U THEN
  12214. cActions = cActions
  12215. + (IF cActions <> '':U THEN ',':U ELSE '':U)
  12216. + btMenu.Name.
  12217. END.
  12218. END.
  12219. RETURN cActions.
  12220. END FUNCTION.
  12221. /* _UIB-CODE-BLOCK-END */
  12222. &ANALYZE-RESUME
  12223. &ENDIF
  12224. &IF DEFINED(EXCLUDE-validateBuffer) = 0 &THEN
  12225. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION validateBuffer Procedure
  12226. FUNCTION validateBuffer RETURNS LOGICAL PRIVATE
  12227. ( pcBuffer AS CHAR,
  12228. pcKey AS CHAR ) :
  12229. /*------------------------------------------------------------------------------
  12230. Purpose: Validate the data of a buffer (Action is the only buffer)
  12231. Notes: this is done after create
  12232. ------------------------------------------------------------------------------*/
  12233. IF pcKey = "delete" THEN
  12234. DO:
  12235. MESSAGE {fnarg messageNumber 37} TRANSACTION VIEW-AS ALERT-BOX.
  12236. RETURN FALSE. /* Function return value. */
  12237. END.
  12238. ELSE RETURN TRUE.
  12239. END FUNCTION.
  12240. /* _UIB-CODE-BLOCK-END */
  12241. &ANALYZE-RESUME
  12242. &ENDIF
  12243. &IF DEFINED(EXCLUDE-windowDropDownList) = 0 &THEN
  12244. &ANALYZE-SUSPEND _UIB-CODE-BLOCK _FUNCTION windowDropDownList Procedure
  12245. FUNCTION windowDropDownList RETURNS LOGICAL
  12246. ( pcAction AS CHARACTER ) :
  12247. /*------------------------------------------------------------------------------
  12248. Purpose: (re)build drop down list of session windows
  12249. Parameters: input submenu to build list in
  12250. Notes:
  12251. ------------------------------------------------------------------------------*/
  12252. DEFINE VARIABLE cUIBMode AS CHARACTER NO-UNDO.
  12253. DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
  12254. DEFINE VARIABLE hwindowRule AS HANDLE NO-UNDO.
  12255. DEFINE VARIABLE hContainerSource AS HANDLE NO-UNDO.
  12256. {get UIBMode cUIBMode}.
  12257. IF cUIBMode = "Design":U THEN
  12258. RETURN FALSE.
  12259. DEFINE BUFFER btParent FOR tMenu.
  12260. DEFINE BUFFER btMenu FOR tMenu.
  12261. FIND btParent WHERE btParent.Name = pcAction
  12262. AND btParent.hTarget = TARGET-PROCEDURE NO-ERROR.
  12263. IF NOT AVAIL btparent OR NOT VALID-HANDLE(btParent.Hdl) THEN
  12264. RETURN FALSE.
  12265. /* 1st zap existing window drop down list entries () */
  12266. FOR EACH btMenu
  12267. WHERE btMenu.PARENT = pcAction
  12268. AND btMenu.NAME BEGINS pcAction + ':':U.
  12269. IF VALID-HANDLE(btMenu.hdl) THEN
  12270. DELETE WIDGET btMenu.hdl.
  12271. DELETE btMenu.
  12272. END.
  12273. /* Add a rule if there is a fixed item on the menu and no rule */
  12274. FIND LAST btMenu WHERE btMenu.Parent = pcAction
  12275. AND btMenu.hTarget = btParent.hTarget NO-ERROR.
  12276. IF AVAIL btMenu AND btMenu.Name <> 'RULE':U OR NOT VALID-HANDLE(btMenu.Hdl) THEN
  12277. DO:
  12278. hWindowRule = DYNAMIC-FUNCTION ('createMenuAction':U IN TARGET-PROCEDURE,
  12279. pcAction,
  12280. 'RULE':U).
  12281. hWindowRule:PARENT = btParent.Hdl.
  12282. END.
  12283. {get ContainerSource hContainerSource}.
  12284. /* And build new list */
  12285. RUN WindowListMenu IN TARGET-PROCEDURE (INPUT pcAction,
  12286. INPUT hContainerSource,
  12287. INPUT SESSION,
  12288. INPUT-OUTPUT iCount).
  12289. /* Remove the rule added above if no windows were added */
  12290. IF iCount = 0 AND VALID-HANDLE(hWindowRule) THEN
  12291. DO:
  12292. FIND btMenu WHERE btMenu.hdl = hWindowRule NO-ERROR.
  12293. IF AVAIL btMenu THEN
  12294. DELETE btMenu.
  12295. DELETE OBJECT hWindowRule.
  12296. END.
  12297. RETURN iCount > 0.
  12298. END FUNCTION.
  12299. /* _UIB-CODE-BLOCK-END */
  12300. &ANALYZE-RESUME
  12301. &ENDIF