1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549 |
- // cocoa.macos.m
- // blitzmax cocoa interface
- // by [email protected]
- #include <AppKit/AppKit.h>
- #include <WebKit/WebView.h>
- #include <WebKit/WebFrame.h>a
- #include <WebKit/WebPolicyDelegate.h>
- #include <WebKit/WebFrameLoadDelegate.h>
- #include <WebKit/WebDataSource.h>
- #include <ApplicationServices/ApplicationServices.h>
- #include <brl.mod/blitz.mod/blitz.h>
- #include <maxgui.mod/maxgui.mod/maxgui.h>
- #include <pub.mod/macos.mod/macos.h>
- #define STATUSBARHEIGHT 18
- // Custom Cursor Stuff
- const int curNoEntry = 0;
- const int curHelp = 1;
- const int curSizeAll = 2;
- const int curNESW = 3;
- const int curNWSE = 4;
- typedef struct { short bits[16]; short mask[16]; short hitpoint[2]; } ArrayCursor;
- ArrayCursor arrCursors[5] =
- {{{0x0000, 0x07E0, 0x1FF0, 0x3838, 0x3C0C, 0x6E0E, 0x6706, 0x6386, 0x61C6, 0x60E6, 0x7076, 0x303C, 0x1C1C, 0x0FF8, 0x07E0, 0x0000},
- {0x0540, 0x0FF0, 0x3FF8, 0x3C3C, 0x7E0E, 0xFF0F, 0x6F86, 0xE7C7, 0x63E6, 0xE1F7, 0x70FE, 0x707E, 0x3C3C, 0x1FFC, 0x0FF0, 0x0540},
- {0x0007, 0x0007}},
- {{0x0000, 0x4078, 0x60FC, 0x71CE, 0x7986, 0x7C06, 0x7E0E, 0x7F1C, 0x7FB8, 0x7C30, 0x6C30, 0x4600, 0x0630, 0x0330, 0x0300, 0x0000},
- {0xC078, 0xE0FC, 0xF1FE, 0xFBFF, 0xFFCF, 0xFF8F, 0xFF1F, 0xFFBE, 0xFFFC, 0xFE78, 0xFF78, 0xEFF8, 0xCFF8, 0x87F8, 0x07F8, 0x0300},
- {0x0001, 0x0001}},
- {{0x0000, 0x0080, 0x01C0, 0x03E0, 0x0080, 0x0888, 0x188C, 0x3FFE, 0x188C, 0x0888, 0x0080, 0x03E0, 0x01C0, 0x0080, 0x0000, 0x0000},
- {0x0080, 0x01C0, 0x03E0, 0x07F0, 0x0BE8, 0x1DDC, 0x3FFE, 0x7FFF, 0x3FFE, 0x1DDC, 0x0BE8, 0x07F0, 0x03E0, 0x01C0, 0x0080, 0x0000},
- {0x0007, 0x0008}},
- {{0x0000, 0x001E, 0x000E, 0x060E, 0x0712, 0x03A0, 0x01C0, 0x00E0, 0x0170, 0x1238, 0x1C18, 0x1C00, 0x1E00, 0x0000, 0x0000, 0x0000},
- {0x007F, 0x003F, 0x0E1F, 0x0F0F, 0x0F97, 0x07E3, 0x03E1, 0x21F0, 0x31F8, 0x3A7C, 0x3C3C, 0x3E1C, 0x3F00, 0x3F80, 0x0000, 0x0000},
- {0x0006, 0x0009}},
- {{0x0000, 0x7800, 0x7000, 0x7060, 0x48E0, 0x05C0, 0x0380, 0x0700, 0x0E80, 0x1C48, 0x1838, 0x0038, 0x0078, 0x0000, 0x0000, 0x0000},
- {0xFE00, 0xFC00, 0xF870, 0xF0F0, 0xE9F0, 0xC7E0, 0x87C0, 0x0F84, 0x1F8C, 0x3E5C, 0x3C3C, 0x387C, 0x00FC, 0x01FC, 0x0000, 0x0000},
- {0x0006, 0x0006}}};
- // End of Cursor Stuff
- void* NSActiveGadget();
- void brl_event_EmitEvent( BBObject *event );
- BBObject *maxgui_maxgui_HotKeyEvent( int key,int mods );
- void maxgui_maxgui_event_DispatchGuiEvents();
- void maxgui_cocoamaxgui_cocoagui_EmitCocoaOSEvent( NSEvent *event,void *handle,BBObject *gadget );
- int maxgui_cocoamaxgui_cocoagui_EmitCocoaMouseEvent( NSEvent *event,void *handle );
- int maxgui_cocoamaxgui_cocoagui_EmitCocoaKeyEvent( NSEvent *event,void *handle );
- #ifdef __x86_64
- void maxgui_cocoamaxgui_cocoagui_PostCocoaGuiEvent( int ev,void *handle,BBInt64 data,int mods,int x,int y,BBObject *extra );
- #else
- void maxgui_cocoamaxgui_cocoagui_PostCocoaGuiEvent( int ev,void *handle,int data,int mods,int x,int y,BBObject *extra );
- #endif
- int maxgui_cocoamaxgui_cocoagui_FilterChar( void *handle,int key,int mods );
- int maxgui_cocoamaxgui_cocoagui_FilterKeyDown( void *handle,int key,int mods );
- static void EmitOSEvent( NSEvent *event,void *handle ){
- //printf("EmitOSEvent\n");fflush(stdout);
- maxgui_cocoamaxgui_cocoagui_EmitCocoaOSEvent( event,handle,&bbNullObject );
- }
- int HaltMouseEvents;
- static int EmitMouseEvent( NSEvent *event,void *handle ){
- if(([event type] == NSScrollWheel) && ([event deltaY] == 0)) return 0;
- if(!HaltMouseEvents) return maxgui_cocoamaxgui_cocoagui_EmitCocoaMouseEvent( event,handle );
- }
- static int EmitKeyEvent( NSEvent *event,void *handle ){
- return maxgui_cocoamaxgui_cocoagui_EmitCocoaKeyEvent( event,handle );
- }
- #ifdef __x86_64
- static void PostGuiEvent( int ev,void *handle,BBInt64 data,int mods,int x,int y,BBObject *extra ){
- #else
- static void PostGuiEvent( int ev,void *handle,int data,int mods,int x,int y,BBObject *extra ){
- #endif
- //printf("PostGuiEvent\n");fflush(stdout);
- if (extra==0) extra=&bbNullObject;
- maxgui_cocoamaxgui_cocoagui_PostCocoaGuiEvent( ev,handle,data,mods,x,y,extra );
- }
- static int filterKeyDownEvent( NSEvent *event,id source ){
- int i,sz,res,key,mods;
- NSString *ch;
- key=bbSystemTranslateKey( [event keyCode] );
- mods=bbSystemTranslateMods( [event modifierFlags] );
- res=maxgui_cocoamaxgui_cocoagui_FilterKeyDown( source,key,mods );
- if (res==0) return 0;
- ch=[event characters];
- sz=[ch length];
- for( i=0;i<sz;++i ){
- key=[ch characterAtIndex:i];
- switch( key ){
- case 3:key=13;break; //Brucey's numberpad enter-key hack
- case 127:key=8;break;
- case 63272:key=127;break;
- }
- res=maxgui_cocoamaxgui_cocoagui_FilterChar( source,key,mods );
- if (res==0) return 0;
- }
- return 1;
- }
- void NSRelease( NSObject *obj ){[obj release];}
- typedef struct nsgadget nsgadget;
- void NSClearItems(nsgadget *gadget);
- struct nsgadget{
- // BBObject
- BBClass* clas;
- //int refs;
- // gadget
- BBObject *target;
- nsgadget *group;
- BBObject *kidlist;
- int x,y,w,h;
- BBString *textarg;
- void *extra;
- int style, sensitivity;
- int visible,total;
- int lockl,lockr,lockt,lockb;
- int lockx,locky,lockw,lockh,lockcw,lockch;
- void *filter,*context;
- void *items;
- int *arrPrevSelection;
- BBObject *datasource;
- void *datakeys;//$[]
- // nsGadget
- int internalclass, origclass;
- id handle;
- NSView *view;
- NSColor *textcolor;
- int intFontStyle;
- };
- // prototypes
- void NSSetSelection(nsgadget *gadget,int pos,int length,int units);
- @class CocoaApp;
- @class FlippedView;
- @class PanelView;
- @class CanvasView;
- @class ListView;
- @class TreeView;
- @class NodeItem;
- @class TextView;
- @class TabView;
- @class WindowView;
- @class ImageString;
- @class TableView;
- @class ToolView;
- @class Scroller;
- @interface CocoaApp:NSObject{
- NSMutableDictionary *toolbaritems;
- NSMutableArray *menuitems;
- }
- -(id)init;
- +(void)delayedGadgetAction:(NSNotification*)n;
- +(void)dispatchGuiEvents;
- -(BOOL)windowShouldClose:(id)sender;
- -(void)windowDidResize:(NSNotification *)aNotification;
- -(void)windowDidMove:(NSNotification *)aNotification;
- -(BOOL)windowShouldZoom:(NSWindow *)sender toFrame:(NSRect)newFrame;
- -(void)windowDidBecomeKey:(NSNotification *)aNotification;
- -(void)menuSelect:(id)sender;
- -(void)iconSelect:(id)sender;
- -(void)sliderSelect:(id)sender;
- -(void)scrollerSelect:(id)sender;
- -(void)buttonPush:(id)sender;
- -(void)textEdit:(id)sender;
- -(void)comboBoxSelectionDidChange:(NSNotification *)notification;
- -(void)addToolbarItem:(NSToolbarItem *)item;
- -(NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag;
- -(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar;
- -(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar;
- -(BOOL)validateToolbarItem:(NSToolbarItem *)theItem;
- -(void)addMenuItem:(NSMenuItem *)item;
- -(void)removeMenuItem:(NSMenuItem *)item;
- @end
- void ScheduleEventDispatch(){
- [CocoaApp performSelector:@selector(dispatchGuiEvents) withObject:nil afterDelay:0.0];
- }
- @interface Scroller:NSScroller{
- }
- -(id)init;
- //-(id)initWithFrame:(NSRect)rect;
- //-(void)drawParts;
- //-(void)drawKnob;
- //-(void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag;
- //-(void)drawArrow:(NSScrollerArrow)arrow highlight:(BOOL)flag;
- //-(void)highlight:(BOOL)flag;
- @end
- @interface FlippedView:NSView{
- }
- -(BOOL)isFlipped;
- -(BOOL)mouseDownCanMoveWindow;
- @end
- @interface PanelView:NSBox{
- int style;
- int enabled;
- nsgadget *gadget;
- }
- -(BOOL)isFlipped;
- -(BOOL)mouseDownCanMoveWindow;
- -(void)setColor:(NSColor*)rgb;
- -(void)setAlpha:(float)alpha;
- -(void)setGadget:(nsgadget*)_gadget;
- -(void)setStyle:(int)s;
- -(void)setImage:(NSImage *)image withFlags:(int)flags;
- -(BOOL)acceptsFirstResponder;
- -(BOOL)becomeFirstResponder;
- -(void)setEnabled:(BOOL)flag;
- -(BOOL)isEnabled;
- @end
- @interface PanelViewContent:NSView{
- NSColor *color;
- NSImage *image;
- int imageflags;
- float alpha;
- }
- -(BOOL)isFlipped;
- -(BOOL)mouseDownCanMoveWindow;
- -(void)setColor:(NSColor*)rgb;
- -(void)setAlpha:(float)alpha;
- -(void)setImage:(NSImage *)image withFlags:(int)flags;
- -(void)drawRect:(NSRect)rect;
- @end
- @interface CanvasView:PanelView{
- }
- -(void)drawRect:(NSRect)rect;
- -(BOOL)acceptsFirstResponder;
- -(BOOL)becomeFirstResponder;
- @end
- @interface ListView:NSScrollView{
- TableView *table;
- NSTableColumn *column;
- NSBrowserCell *cell;
- NSMutableArray *items;
- NSDictionary *textstyle;
- }
- -(id)initWithFrame:(NSRect)rect;
- -(id)table;
- -(id)items;
- -(void)removeItemAtIndex:(int)index;
- -(void)setColor:(NSColor*)color;
- -(void)setTextColor:(NSColor*)color;
- -(int)numberOfRowsInTableView:(NSTableView *)aTableView;
- -(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
- -(BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(int)rowIndex;
- -(void)clear;
- -(void)addItem:(NSString*)text atIndex:(unsigned)index withImage:(NSImage*)image withTip:(NSString*)tip withExtra:(BBObject*)extra;
- -(void)setItem:(NSString*)text atIndex:(unsigned)index withImage:(NSImage*)image withTip:(NSString*)tip withExtra:(BBObject*)extra;
- -(void)selectItem:(unsigned)index;
- -(void)deselectItem:(unsigned)index;
- -(void)tableViewSelectionDidChange:(NSNotification *)aNotification;
- -(void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
- -(void)setEnabled:(BOOL)flag;
- -(BOOL)isEnabled;
- -(void)updateWidthForString:(ImageString *) string;
- -(void)updateWidth;
- -(void)queueWidthUpdate;
- -(void)dealloc;
- -(void)setFont:(NSFont*)font;
- -(NSString *)view:(NSView *)view stringForToolTip:(NSToolTipTag)tag point:(NSPoint)point userData:( void *)data;
- @end
- @interface TableView:NSTableView{
- }
- -(NSMenu*)menuForEvent:(NSEvent *)theEvent;
- @end
- @interface OutlineView:NSOutlineView{
- }
- -(NSMenu*)menuForEvent:(NSEvent *)theEvent;
- @end
- @interface VerticalCenterAlignedBrowserCell : NSBrowserCell {
- }
- @end
- @interface NodeItem:NSObject{
- TreeView *owner;
- NodeItem *parent;
- NSMutableArray *kids;
- NSString *title;
- NSImage *icon;
- }
- -(void)dealloc;
- -(id)initWithTitle:(NSString*)text;
- -(void)updateWidth;
- -(void)setOwner:(TreeView*)treeview;
- -(id)getOwner;
- -(void)show;
- -(void)attach:(NodeItem*)parent_ atIndex:(unsigned)index_;
- -(void)remove;
- -(BOOL)canExpand;
- -(NSMutableArray*)kids;
- -(NSString *)value;
- -(NSImage *)icon;
- -(void)setTitle:(NSString*)text;
- -(void)setIcon:(NSImage*)image;
- -(unsigned)count;
- @end
- @interface TreeView:NSScrollView{
- @public
- NSOutlineView *outline;
- NSTableColumn *column,*colin;
- VerticalCenterAlignedBrowserCell *cell;
- NodeItem *rootNode;
- NSMutableDictionary *textstyle;
- }
- -(id)initWithFrame:(NSRect)rect;
- -(void)reloadItem:(id)item;
- -(void)refresh;
- -(int)outlineView:(NSOutlineView*)outlineView numberOfChildrenOfItem:(id)item;
- -(id)outlineView:(NSOutlineView*)outlineView child:(int)index ofItem:(id)item;
- -(BOOL)outlineView:(NSOutlineView*)outlineView isItemExpandable:(id)item;
- -(id)outlineView:(NSOutlineView*)outlineView objectValueForTableColumn:(NSTableColumn*)tableColumn byItem:(id)item;
- -(unsigned)count;
- -(id)rootNode;
- -(id)selectedNode;
- -(void)selectNode:(id)node;
- -(void)expandNode:(id)node;
- -(void)collapseNode:(id)node;
- -(void)outlineViewItemDidExpand:(NSNotification *)notification;
- -(void)outlineViewItemDidCollapse:(NSNotification *)notification;
- -(void)outlineViewSelectionDidChange:(NSNotification *)notification;
- -(BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- -(void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)dcell forTableColumn:(NSTableColumn *)tableColumn item:(id)item;
- -(void)setColor:(NSColor*)color;
- -(void)setTextColor:(NSColor*)color;
- -(void)setFont:(NSFont*)font;
- -(void)setEnabled:(BOOL)e;
- -(BOOL)isEnabled;
- -(void)dealloc;
- @end
- @interface TextView:NSTextView{
- @public
- NSScrollView *scroll;
- NSMutableParagraphStyle *style;
- NSMutableDictionary *styles;
- NSTextStorage *storage;
-
- int lockedNest;
- NSRange lockedRange;
- }
- -(NSSize)contentSize;
- -(id)storage;
- -(id)initWithFrame:(NSRect)rect;
- -(id)getScroll;
- -(void)setHidden:(BOOL)flag;
- -(void)setWordWrap:(BOOL)flag;
- -(void)setTabs:(int)tabs;
- -(void)setMargins:(int)leftmargin;
- -(void)setText:(NSString*)text;
- -(void)addText:(NSString*)text;
- -(void)setScrollFrame:(NSRect)rect;
- -(void)setTextColor:(NSColor*)color;
- -(void)setColor:(NSColor*)color;
- -(void)setFont:(NSFont*)font;
- -(NSMenu *)menuForEvent:(NSEvent*)theEvent;
- -(void)textDidChange:(NSNotification*)aNotification;
- -(void)textDidEndEditing:(NSNotification*)aNotification;
- -(void)textViewDidChangeSelection:(NSNotification *)aNotification;
- -(void)textStorageDidProcessEditing:(NSNotification *)aNotification;
- -(void)textStorageWillProcessEditing:(NSNotification *)aNotification;
- -(void)updateDragTypeRegistration;
- -(NSArray *)acceptableDragTypes;
- -(void)free;
- @end
- @interface TabView:NSTabView{
- id client;
- int user;
- }
- -(id)initWithFrame:(NSRect)rect;
- -(id)clientView;
- -(void)setFrame:(NSRect)frameRect;
- -(void)selectTabViewItemAtIndex:(int)index;
- -(BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem;
- -(void)dealloc;
- @end
- @interface WindowView:NSWindow{
- id view;
- id label[3];
- nsgadget *gadget;
- int enabled;
- int zooming;
- NSView *dragging;
- }
- -(id)textFirstResponder;
- -(id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)backing defer:(BOOL)flag withGadget:(nsgadget*)_gadget ;
- -(id)clientView;
- -(void)setStatus:(NSString*)text align:(int)pos;
- -(void)sendEvent:(NSEvent*)event;
- -(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;
- -(BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
- -(void)didResize;
- -(void)didMove;
- -(void)zoom;
- -(NSRect)localRect;
- -(BOOL)canBecomeKeyWindow;
- -(BOOL)canBecomeMainWindow;
- -(BOOL)becomeFirstResponder;
- -(void)setEnabled:(BOOL)flag;
- -(BOOL)isEnabled;
- -(void)dealloc;
- @end
- @interface ToolView:NSPanel{
- id view;
- id label[3];
- nsgadget *gadget;
- int enabled;
- int zooming;
- NSView *dragging;
- }
- -(id)textFirstResponder;
- -(id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)backing defer:(BOOL)flag withGadget:(nsgadget*)_gadget ;
- -(id)clientView;
- -(void)setStatus:(NSString*)text align:(int)pos;
- -(void)sendEvent:(NSEvent*)event;
- -(NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender;
- -(BOOL)performDragOperation:(id <NSDraggingInfo>)sender;
- -(void)didResize;
- -(void)didMove;
- -(void)zoom;
- -(NSRect)localRect;
- -(BOOL)canBecomeKeyWindow;
- -(BOOL)canBecomeMainWindow;
- -(BOOL)becomeFirstResponder;
- -(void)setEnabled:(BOOL)flag;
- -(BOOL)isEnabled;
- -(void)dealloc;
- @end
- static CocoaApp *GlobalApp;
- @class HTMLView;
- @interface HTMLView:WebView{
- int _state, _style;
- }
- -(id)initWithFrame:(NSRect)rect;
- -(int)loaded;
- -(void)setStyle:(int)style;
- -(void)setAddress:(NSString*)address;
- -(NSString*)address;
- @end
- @implementation HTMLView
- -(id)initWithFrame:(NSRect)rect{
- self=[super initWithFrame:rect];
- [self setAutoresizingMask:NSViewNotSizable];
- [self setPolicyDelegate:self];
- [self setFrameLoadDelegate:self];
- [self setUIDelegate:self];
- [self unregisterDraggedTypes];
- _state=0;
- return self;
- }
- -(int)loaded{
- return _state;
- }
- -(void)setStyle:(int)style{
- _style = style;
- }
- -(NSString*)address{
- WebDataSource *datasource;
- datasource = [[self mainFrame] provisionalDataSource];
- if(datasource==nil) datasource = [[self mainFrame] dataSource];
- if(datasource==nil) return [[NSString alloc] initWithString:@""];
- return [[[datasource request] URL] absoluteString];
- }
- -(void)setAddress:(NSString*)address{
- NSURL *url;
- NSURLRequest *request;
- WebFrame *frame;
-
- url=[NSURL URLWithString:address];
- if (url==nil) url=[NSURL fileURLWithPath:address];
- if (url==nil) return;
- _state=1;
- request=[NSURLRequest requestWithURL:url];
- frame=[self mainFrame];
- [frame loadRequest:request];
- }
- - (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame{
- int oldstate = _state;
- NSURLRequest *url;
- BBString*text;
-
- _state=0;
-
- url=[[frame dataSource]initialRequest];
- text=bbStringFromCString((char*)[[[url URL] relativePath] cString]);
-
- if(oldstate)
- PostGuiEvent( BBEVENT_GADGETDONE,sender,0,0,0,0,(BBObject*)text );
- }
- - (void)webView:(WebView *)sender didChangeLocationWithinPageForFrame:(WebFrame *)frame{
- int oldstate = _state;
- NSURLRequest *url;
- BBString*text;
-
- _state=0;
-
- url=[[frame dataSource]initialRequest];
- text=bbStringFromCString((char*)[[[url URL] relativePath] cString]);
-
- if(oldstate)
- PostGuiEvent( BBEVENT_GADGETDONE,sender,0,0,0,0,(BBObject*)text );
- }
- - (void)webView:(WebView *)sender decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)url frame:(WebFrame *)frame decisionListener:(id<WebPolicyDecisionListener>)listener{
- BBString*text;
- int key;
- key=(int)[[actionInformation objectForKey:WebActionNavigationTypeKey] intValue];
- switch (key){
- case WebNavigationTypeOther:
- case WebNavigationTypeLinkClicked:
- if ((_state==0) && (_style & HTMLVIEW_NONAVIGATE)) {
- [listener ignore];
- text=bbStringFromCString((char*)[[[url URL] absoluteString] cString]);
- PostGuiEvent( BBEVENT_GADGETACTION,sender,0,0,0,0,(BBObject*)text );
- }else{
- [listener use];
- }
- default:
- [listener use];
- }
- }
- - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems{
- if(_style&HTMLVIEW_NOCONTEXTMENU)
- return [NSArray array];
- else
- return defaultMenuItems;
- }
- @end
- //Toolbar
- @class Toolbar;
- @interface Toolbar:NSToolbar{
- NSMutableDictionary *items;
- }
- -(id)initWithIdentifier:(NSString *)string;
- -(void)addToolbarItem:(NSToolbarItem *)item;
- -(NSArray *)toolbarAllowedItemIdentifiers;
- -(NSArray *)toolbarDefaultItemIdentifiers;
- @end
- @implementation Toolbar
- -(id)initWithIdentifier:(NSString *)string{
- self=[super initWithIdentifier:string];
- items=[[NSMutableDictionary dictionaryWithCapacity:10] retain];
- return self;
- }
- -(void)addToolbarItem:(NSToolbarItem *)item{
- [items setObject:item forKey:[item itemIdentifier]];
- }
- -(NSArray *)toolbarAllowedItemIdentifiers{
- return [items allValues];
- }
- -(NSArray *)toolbarDefaultItemIdentifiers{
- return [items allValues];
- }
- @end
- // CocoaApp
- @implementation CocoaApp
- +(void)dispatchGuiEvents{
- maxgui_maxgui_event_DispatchGuiEvents();
- }
- +(void)delayedGadgetAction:(NSObject*)o{ // See controlTextDidChange
- PostGuiEvent( BBEVENT_GADGETACTION,
- o,
- [o respondsToSelector:@selector(indexOfSelectedItem)] ? [o indexOfSelectedItem] : 0,
- 0,0,0,0 );
- }
- -(void)controlTextDidEndEditing:(NSNotification*)n{
- PostGuiEvent( BBEVENT_GADGETLOSTFOCUS,[n object],0,0,0,0,0 );
- }
- -(void)controlTextDidChange:(NSNotification*)n{
- NSObject *o = [n object];
- [CocoaApp performSelector:@selector(delayedGadgetAction:) withObject:o afterDelay:0.0];
- }
- -(id)init{
- toolbaritems=[[NSMutableDictionary dictionaryWithCapacity:10] retain];
- menuitems=[[NSMutableArray arrayWithCapacity:10] retain];
- return self;
- }
- -(BOOL)windowShouldClose:(id)sender{
- PostGuiEvent( BBEVENT_WINDOWCLOSE,sender,0,0,0,0,0 );
- return NO;
- }
- -(void)windowDidResize:(NSNotification *)aNotification{
- WindowView *window;
- ToolView * panel;
- if ([[aNotification object] isKindOfClass:[WindowView class]]) {
- window=(WindowView*)[aNotification object];
- [window didResize];
- } else {
- panel =(ToolView*)[aNotification object];
- [panel didResize];
- }
- }
- -(void)windowDidMove:(NSNotification *)aNotification{
- WindowView *window;
- ToolView * panel;
- if ([[aNotification object] isKindOfClass:[WindowView class]]) {
- window=(WindowView*)[aNotification object];
- [window didMove];
- } else {
- panel =(ToolView*)[aNotification object];
- [panel didMove];
- }
- }
- -(BOOL)windowShouldZoom:(NSWindow *)sender toFrame:(NSRect)newFrame{
- [(WindowView*)sender zoom];
- return YES;
- }
- -(void)windowDidBecomeKey:(NSNotification *)aNotification{
- NSWindow *window;
- window=(NSWindow*)[aNotification object];
- PostGuiEvent( BBEVENT_WINDOWACTIVATE,window,0,0,0,0,0 );
- }
- -(void)menuSelect:(id)sender{
- PostGuiEvent( BBEVENT_MENUACTION,sender,[sender tag],0,0,0,0 );
- }
- -(void)iconSelect:(id)sender{
- NSToolbar *toolbar;
- int index;
- toolbar=[sender toolbar];
- index=[[toolbar items] indexOfObject:sender];
- PostGuiEvent( BBEVENT_GADGETACTION,toolbar,index,0,0,0,0 );
- }
- -(void)sliderSelect:(id)sender{
- PostGuiEvent( BBEVENT_GADGETACTION,sender,0,0,0,0,0 );
- }
- -(void)scrollerSelect:(id)sender{
- NSScroller *scroller;
- int delta=0;
- scroller=(NSScroller *)sender;
- switch([scroller hitPart]){
- case NSScrollerDecrementLine:
- delta=-1;
- break;
- case NSScrollerDecrementPage:
- delta=-2;
- break;
- case NSScrollerIncrementLine:
- delta=1;
- break;
- case NSScrollerIncrementPage:
- delta=2;
- break;
- }
- PostGuiEvent( BBEVENT_GADGETACTION,sender,delta,0,0,0,0 );
- }
- -(void)buttonPush:(id)sender{
- if([sender allowsMixedState]) [sender setAllowsMixedState:NO];
- PostGuiEvent( BBEVENT_GADGETACTION,sender,0,0,0,0,0 );
- }
- -(void)textEdit:(id)sender{
- PostGuiEvent( BBEVENT_GADGETACTION,sender,0,0,0,0,0 );
- }
- -(void)comboBoxSelectionDidChange:(NSNotification *)notification{
- NSControl *o=(NSComboBox*)[notification object];
- [CocoaApp performSelector:@selector(delayedGadgetAction:) withObject:o afterDelay:0.0];
- }
- -(void)comboBoxSelectionIsChanging:(NSNotification *)notification{
-
- }
- -(void)comboBoxWillPopUp:(NSNotification *)notification{
- HaltMouseEvents = 1;
- }
- -(void)comboBoxWillDismiss:(NSNotification *)notification{
- HaltMouseEvents = 0;
- }
- -(void)addToolbarItem:(NSToolbarItem *)item{
- [toolbaritems setObject:item forKey:[item itemIdentifier]];
- }
- -(NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag{
- return [toolbaritems objectForKey:itemIdentifier];
- }
- -(NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar{
- Toolbar *mytoolbar=(Toolbar*)toolbar;
- return [mytoolbar toolbarAllowedItemIdentifiers];
- }
- -(NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar{
- Toolbar *mytoolbar=(Toolbar*)toolbar;
- return [mytoolbar toolbarDefaultItemIdentifiers];
- }
- -(BOOL)validateToolbarItem:(NSToolbarItem *)item{
- return [item isEnabled];
- }
- -(void)addMenuItem:(NSMenuItem *)item{
- [menuitems addObject:item];
- }
- -(void)removeMenuItem:(NSMenuItem *)item{
- [menuitems removeObject:item];
- }
- @end
- // Scroller
- @implementation Scroller
- -(id)init{
- [super init];
- [self setAlphaValue:.5f];
- return self;
- }
- //-(void)drawKnob{}
- //-(void)drawParts{}
- //-(void)drawKnobSlotInRect:(NSRect)slotRect highlight:(BOOL)flag{}
- //-(void)drawArrow:(NSScrollerArrow)arrow highlight:(BOOL)flag{}
- //-(void)highlight:(BOOL)flag{}
- @end
- // FlippedView
- @implementation FlippedView
- -(BOOL)isFlipped{
- return YES;
- }
- -(BOOL)mouseDownCanMoveWindow{
- return YES;
- }
- @end
- // PanelView
- @implementation PanelView
- - (BOOL)acceptsFirstResponder{
- return YES;
- }
- -(BOOL)becomeFirstResponder{
- return [self isEnabled];
- }
- -(void)setColor:(NSColor *)rgb{
- [[self contentView] setColor:rgb];
- }
- -(void)setAlpha:(float)al{
- [[self contentView] setAlpha:al];
- }
- -(void)setImage:(NSImage *)img withFlags:(int)flags{
- [[self contentView] setImage:img withFlags:flags];
- }
- -(void)setEnabled:(BOOL)e{
- enabled=e;
- }
- -(BOOL)isEnabled{
- return (enabled)?YES:NO;
- }
- -(void)setStyle:(int)s{
-
- gadget->sensitivity |= (s & PANEL_ACTIVE) ? (SENSITIZE_MOUSE|SENSITIZE_KEYS) : 0;
-
- switch ( s & (PANEL_SUNKEN|PANEL_RAISED|PANEL_GROUP) ){
- case PANEL_GROUP:
- [self setContentViewMargins: NSMakeSize(4.0,4.0)];
- [self setBoxType:NSBoxPrimary];
- [self setBorderType: NSBezelBorder];
- [self setTitlePosition: NSAtTop];
- break;
- case PANEL_RAISED:
- case PANEL_SUNKEN:
- [self setContentViewMargins: NSMakeSize(0.0,0.0)];
- [self setBoxType: NSBoxOldStyle];
- [self setBorderType: NSLineBorder];
- [self setTitlePosition: NSNoTitle];
- break;
- default:
- [self setContentViewMargins: NSMakeSize(0.0,0.0)];
- [self setBorderType: NSNoBorder];
- [self setTitlePosition: NSNoTitle];
- }
-
- style=s;
- }
- -(void)setGadget:(nsgadget*)_gadget{
- gadget=_gadget;
- }
- -(BOOL)mouseDownCanMoveWindow{
- return NO;
- }
- @end
- //PanelViewContent
- @implementation PanelViewContent
- -(BOOL)isFlipped{
- return YES;
- }
- -(BOOL)mouseDownCanMoveWindow{
- return NO;
- }
- -(void)setColor:(NSColor *)rgb{
- if (color){
- [color release];
- color=0;
- }
- if(rgb){
- color=[rgb colorWithAlphaComponent:1.0];
- [color retain];
- }
- [self setNeedsDisplay:YES];
- }
- -(void)setImage:(NSImage *)img withFlags:(int)flags{
- if (img) [img retain];
- if (image) [image release];
- image=img;
- imageflags=flags;
- [self setNeedsDisplay:YES];
- }
- -(void)setAlpha:(float)al{
- alpha=al;
- if (color){
- [color release];
- color=[color colorWithAlphaComponent:alpha];
- [color retain];
- }
- [self setNeedsDisplay:YES];
- }
- -(void)drawRect:(NSRect)rect{
-
- NSRect dest = NSUnionRect(rect,[self frame]);
-
- if (color){
- [color set];
- if (alpha<1.0)
- NSRectFillUsingOperation( dest,NSCompositeSourceOver );
- else
- NSRectFill( dest );
- }
-
- if (image){
- int op,x,y,w,h;
- float a;
- float m,mm;
- NSRect src,tile;
- a=alpha;
- op=NSCompositeSourceOver;
- src.origin.x=0;
- src.origin.y=0;
- src.size=[image size];
- [image setFlipped:YES];
- switch (imageflags&(GADGETPIXMAP_ICON-1)){
- case PANELPIXMAP_TILE:
- tile.size=[image size];
- for (y=0;y<dest.size.height;y+=src.size.height){
- tile.origin.y=y;
- for (x=0;x<dest.size.width;x+=src.size.width){
- tile.origin.x=x;
- [image drawInRect:tile fromRect:src operation:op fraction:a];
- }
- }
- break;
- case PANELPIXMAP_CENTER:
- dest.origin.x=(dest.size.width-src.size.width)/2;
- dest.origin.y=(dest.size.height-src.size.height)/2;
- dest.size=src.size;
- [image drawInRect:dest fromRect:src operation:op fraction:a];
- break;
- case PANELPIXMAP_FIT:
- m=dest.size.width/src.size.width;
- mm=dest.size.height/src.size.height;
- if (m>mm) m=mm;
- dest.origin.x+=(dest.size.width-src.size.width*m)/2;
- dest.origin.y+=(dest.size.height-src.size.height*m)/2;
- dest.size.width=src.size.width*m;
- dest.size.height=src.size.height*m;
- [image drawInRect:dest fromRect:src operation:op fraction:a];
- break;
- case PANELPIXMAP_STRETCH:
- [image drawInRect:dest fromRect:src operation:op fraction:a];
- break;
- case PANELPIXMAP_FIT2:
- m = dest.size.width/dest.size.height;
-
- if ((dest.size.width/src.size.width)<(dest.size.height/src.size.height)){
- src.origin.x = (src.size.width-(src.size.height*m))/2;
- src.size.width = src.size.height*m;
- } else {
- src.origin.y = (src.size.height-(src.size.width/m))/2;
- src.size.height = src.size.width/m;
- }
-
- [image drawInRect:dest fromRect:src operation:op fraction:a];
- break;
- }
- [image setFlipped:NO];
- }
-
- [super drawRect:rect];
- }
- @end
- // CanvasView
- @implementation CanvasView
- -(void)drawRect:(NSRect)rect{
- [super drawRect:rect];
- PostGuiEvent( BBEVENT_GADGETPAINT,self,0,0,0,0,0 );
- }
- - (BOOL)acceptsFirstResponder{
- return YES;
- }
- -(BOOL)becomeFirstResponder{
- return [self isEnabled];
- }
- @end
- // ImageString
- @class ImageString;
- @interface ImageString:NSObject{
- NSString *_string;
- NSImage *_image;
- NSString *_tip;
- BBObject *_extra;
- }
- -(id)initWithString:(NSString *)text image:(NSImage *)image tip:(NSString *)tip extra:(BBObject*)extra;
- -(void)dealloc;
- -(id)copyWithZone:(NSZone *)zone;
- -(NSString*)string;
- -(NSImage*)image;
- -(NSString*)description;
- -(BBObject*)extra;
- @end
- @implementation ImageString
- -(id)initWithString:(NSString *)string image:(NSImage *)image tip:(NSString*)tip extra:(BBObject*)extra{
- _string=string;
- _image=image;
- _tip=tip;
- _extra=extra;
- if (string) [string retain];
- if (image) [image retain];
- if (tip) [tip retain];
- return self;
- }
- -(void)dealloc{
- if (_string) [_string release];
- if (_image) [_image release];
- if (_tip) [_tip release];
- [super dealloc];
- }
- -(id)copyWithZone:(NSZone *)zone{
- ImageString *copy=[[[self class] allocWithZone:zone] initWithString:_string image:_image tip:_tip extra:_extra];
- return copy;
- }
- -(NSString*)string{return _string;}
- -(NSImage*)image{return _image;}
- -(NSString*)description{return _tip;}
- -(BBObject*)extra{return _extra;}
- @end
- // ListView
- @implementation ListView
- -(id)initWithFrame:(NSRect)rect{
- [super initWithFrame:rect];
- [self setBorderType:NSNoBorder];
- [self setHasVerticalScroller:YES];
- [self setHasHorizontalScroller:YES];
- [self setAutohidesScrollers:YES];
- column=[[NSTableColumn alloc] init];
- cell=[[NSBrowserCell alloc] init];
- [cell setLeaf:YES];
- [column setDataCell:cell];
- NSSize contentSize = [self contentSize];
- table=[[TableView alloc] initWithFrame:NSMakeRect(0, 0,contentSize.width, contentSize.height)];
- [table setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- items=[[NSMutableArray alloc] initWithCapacity:10];
- [table setHeaderView:nil];
- [table setDataSource:self];
- [table setDelegate:self];
- [self setDocumentView:table];
- [table addTableColumn:column];
- [table sizeLastColumnToFit];
- return self;
- }
- -(id)table{
- return table;
- }
- -(id)items{
- return items;
- }
- -(void)removeItemAtIndex:(int)index{
- ImageString *item=(ImageString*)[items objectAtIndex:index];
- [items removeObjectAtIndex:index];
- [item release];
- [table reloadData];
- [self queueWidthUpdate];
- }
- -(void)setColor:(NSColor*)color{
- [table setBackgroundColor:color];
- }
- -(void)setEnabled:(BOOL)e{
- [table setEnabled:e];
- }
- -(BOOL)isEnabled{
- return [table isEnabled];
- }
- -(void)setTextColor:(NSColor*)color{
- if (textstyle) {[textstyle release];textstyle=nil;}
- if (color){
- textstyle=[NSDictionary dictionaryWithObjectsAndKeys:color,NSForegroundColorAttributeName,nil];
- [textstyle retain];
- }
- }
- -(int)numberOfRowsInTableView:(NSTableView *)aTableView{
- return [items count];
- }
- -(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex{
- return [items objectAtIndex:rowIndex];
- }
- -(BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(int)rowIndex{ /*new from BAH*/
- PostGuiEvent( BBEVENT_GADGETACTION,self,rowIndex,0,0,0,0 );
- return NO;
- }
- -(void)clear{
- [table setDelegate:nil];
- ImageString *item;
- int count,i;
- count=[items count];
- for (i=0;i<count;i++){
- item=(ImageString*)[items objectAtIndex:i];
- [item release];
- }
- [items removeAllObjects];
- [table reloadData];
- [table setDelegate:self];
- [self queueWidthUpdate];
- }
- -(void)addItem:(NSString*)text atIndex:(unsigned)index withImage:(NSImage*)image withTip:(NSString*)tip withExtra:(BBObject*)extra{
- ImageString *item;
- item=[[ImageString alloc] initWithString:text image:image tip:tip extra:extra];
- [items insertObject:item atIndex:index];
- [self updateWidthForString:item];
- [table noteNumberOfRowsChanged];
- }
- -(void)setItem:(NSString*)text atIndex:(unsigned)index withImage:(NSImage*)image withTip:(NSString*)tip withExtra:(BBObject*)extra{
- ImageString *item;
- item=(ImageString*)[items objectAtIndex:index];
- [item release];
- item=[[ImageString alloc] initWithString:text image:image tip:tip extra:extra];
- [items replaceObjectAtIndex:index withObject:item];
- [table reloadData];
- [self queueWidthUpdate];
- }
- -(void)selectItem:(unsigned)index{
- [table setDelegate:nil];
- [table selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO];
- [table setDelegate:self];
- }
- -(void)deselectItem:(unsigned)index{
- [table setDelegate:nil];
- [table deselectRow:index];
- [table setDelegate:self];
- }
- -(void)tableViewSelectionDidChange:(NSNotification *)aNotification{/*new from BAH*/
- int index=[table selectedRow];
- ImageString *item=nil;
- if (index>=0) item=(ImageString*)[items objectAtIndex:index]; else index=-1;
- if (item){
- PostGuiEvent( BBEVENT_GADGETSELECT,self,index,0,0,0,[item extra]);
- }else{
- PostGuiEvent( BBEVENT_GADGETSELECT,self,-1,0,0,0,&bbNullObject);
- }
- }
- -(void)tableView:(NSTableView *)table willDisplayCell:(id)aCell forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex{
- NSString *text=[[items objectAtIndex:rowIndex] string];
- if (textstyle){
- NSAttributedString *atext=[[[NSAttributedString alloc] initWithString:text attributes:textstyle] autorelease];
- [aCell setAttributedStringValue:atext];
- }else{
- [aCell setStringValue:text];
- }
- [aCell setImage:[[items objectAtIndex:rowIndex] image]];
- }
- -(void)updateWidthForString:(ImageString *) imgstring{
-
- NSCell* dcell;
- float cellWidth;
-
- dcell = [column dataCell];
- [dcell setStringValue:[imgstring string]];
- [dcell setImage:[imgstring image]];
- cellWidth = ((NSSize)[dcell cellSize]).width;
- if([column minWidth] < cellWidth){
- [column setMinWidth:cellWidth];
- [column setWidth:cellWidth];
- [table setNeedsDisplay:YES];
- }
-
- }
- -(void)updateWidth{
- int i, count;
- count = [items count];
- for (i=0;i<count;i++)
- [self updateWidthForString:(ImageString*)[items objectAtIndex:i]];
- }
- -(void)queueWidthUpdate{
- [NSObject cancelPreviousPerformRequestsWithTarget: self selector:@selector(updateWidth) object:nil];
- [self performSelector:@selector(updateWidth) withObject:nil afterDelay:0.0];
- }
- -(void)dealloc{
- ImageString *item;
- int count,i;
- count=[items count];
- for (i=0;i<count;i++){
- item=(ImageString*)[items objectAtIndex:i];
- [item release];
- }
- [table release];
- [column release];
- [cell release];
- [items release];
- if (textstyle) {
- [textstyle release];
- }
- [super dealloc];
- }
- -(void)setFont:(NSFont*)font{
- if (font) {
- NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init];
- [table setRowHeight:[layoutManager defaultLineHeightForFont:font]+2];
- [layoutManager release];
- [[column dataCell] setFont:font];
- [table reloadData];
- [self updateWidth];
- }
- }
- - (NSString *)tableView:(NSTableView *)aTableView toolTipForCell:(NSCell *)aCell rect:(NSRectPointer)rect
- tableColumn:(NSTableColumn *)aTableColumn row:(int)row mouseLocation:(NSPoint)mouseLocation{
-
- return [[items objectAtIndex:row] description];
- }
- @end
- // TableView
- @implementation TableView
- -(NSMenu*)menuForEvent:(NSEvent *)theEvent{
- int row = -1;
- NSPoint p=[self convertPoint:[theEvent locationInWindow] fromView:nil];
- row = [self rowAtPoint:p];
- if (row < [self numberOfRows]) {
- [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
- PostGuiEvent( BBEVENT_GADGETMENU,[self dataSource],row,0,0,0,0 );
- }
- return nil;
- }
- @end
- // OutlineView
- @implementation OutlineView
- -(NSMenu*)menuForEvent:(NSEvent *)theEvent{
- id node;
- NSPoint p=[self convertPoint:[theEvent locationInWindow] fromView:nil];
- int i=[self rowAtPoint:p];
- if (i>-1 && i<[self numberOfRows]){
- node=[self itemAtRow:i];
- #ifdef __x86_64
- PostGuiEvent( BBEVENT_GADGETMENU,[self dataSource],(BBInt64)node,0,0,0,0 ); //[self superview]
- #else
- PostGuiEvent( BBEVENT_GADGETMENU,[self dataSource],(int)node,0,0,0,0 ); //[self superview]
- #endif
- }
- return nil;
- }
- @end
- @implementation VerticalCenterAlignedBrowserCell
- - (NSRect)titleRectForBounds:(NSRect)theRect {
- NSRect titleFrame = [super titleRectForBounds:theRect];
- NSSize titleSize = [[self attributedStringValue] size];
- titleFrame.origin.x = theRect.origin.x + 2;
- titleFrame.origin.y = theRect.origin.y - .5 + (theRect.size.height - titleSize.height) / 2.0;
- return titleFrame;
- }
- - (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView {
- NSRect titleRect = [self titleRectForBounds:cellFrame];
- [[self attributedStringValue] drawInRect:titleRect];
- }
- @end
- // TreeView
- @implementation TreeView
- -(id)initWithFrame:(NSRect)rect{
- [super initWithFrame:rect];
- [self setBorderType:NSNoBorder];
- [self setHasVerticalScroller:YES];
- [self setHasHorizontalScroller:YES];
- [self setAutohidesScrollers:YES];
- rootNode=[[NodeItem alloc] initWithTitle:@"root"];
- [rootNode setOwner:self];
- NSSize contentSize = [self contentSize];
- outline=[[OutlineView alloc] initWithFrame:NSMakeRect(0, 0,contentSize.width, contentSize.height)];
- [outline setHeaderView:nil];
- [outline setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- [outline setDataSource:self];
- [outline setDelegate:self];
- column=[[NSTableColumn alloc] init];
- [outline addTableColumn:column];
- [outline setOutlineTableColumn:column];
- cell=[[VerticalCenterAlignedBrowserCell alloc] init];
- [cell setLeaf:YES];
- [cell setScrollable:YES];
- [column setDataCell:cell];
- [self setDocumentView:outline];
- [outline sizeLastColumnToFit];
- return self;
- }
- -(void)dealloc{
- [outline autorelease];
- [column autorelease];
- [cell autorelease];
- if (textstyle) {
- [textstyle release];
- }
- [super dealloc];
- }
- -(void)refresh{
- [rootNode updateWidth];
- [outline reloadData];
- }
- -(int)outlineView:(NSOutlineView*)outlineView numberOfChildrenOfItem:(id)item{
- if( !item ) item=rootNode;
- return [[item kids] count];
- }
- -(id)outlineView:(NSOutlineView*)outlineView child:(int)index ofItem:(id)item{
- if( !item ) item=rootNode;
- if (index>=[[item kids] count]) return 0;
- return [[item kids] objectAtIndex:index];
- }
- -(BOOL)outlineView:(NSOutlineView*)outlineView isItemExpandable:(id)item{
- if( !item ) item=rootNode;
- return [item canExpand];
- }
- -(id)outlineView:(NSOutlineView*)outlineView objectValueForTableColumn:(NSTableColumn*)tableColumn byItem:(id)item{
- if (tableColumn==colin) return @"";
- if( !item ) item=rootNode;
- return [item value];
- }
- -(unsigned)count{
- return [rootNode count];
- }
- -(id)rootNode{
- return rootNode;
- }
- -(id)selectedNode{
- int index;
- index=[outline selectedRow];
- if (index==-1) return nil;
- return [outline itemAtRow:index];
- }
- -(void)selectNode:(id)node{
- int index;
- [node show];
- [outline setDelegate:nil];
- index = [outline rowForItem:node];
- [outline selectRowIndexes:[NSIndexSet indexSetWithIndex:index] byExtendingSelection:NO];
- [outline setDelegate:self];
- [outline scrollRowToVisible:index];
- }
- -(void)expandNode:(id)node{
- [outline setDelegate:nil];
- [outline expandItem:node];
- [outline tile];
- [outline setDelegate:self];
- [node queueWidthUpdate];
- }
- -(void)collapseNode:(id)node{
- [outline setDelegate:nil];
- [outline collapseItem:node];
- [outline tile];
- [outline setDelegate:self];
- [rootNode queueWidthUpdate];
- }
- -(void)outlineViewItemDidExpand:(NSNotification *)notification{
- id node;
- node=[[notification userInfo] objectForKey:@"NSObject"];
- [node queueWidthUpdate];
- #ifdef __x86_64
- PostGuiEvent( BBEVENT_GADGETOPEN,self,(BBInt64)node,0,0,0,0 );
- #else
- PostGuiEvent( BBEVENT_GADGETOPEN,self,(int)node,0,0,0,0 );
- #endif
- }
- -(void)outlineViewItemDidCollapse:(NSNotification *)notification{
- id node;
- node=[[notification userInfo] objectForKey:@"NSObject"];
- [rootNode queueWidthUpdate];
- #ifdef __x86_64
- PostGuiEvent( BBEVENT_GADGETCLOSE,self,(BBInt64)node,0,0,0,0 );
- #else
- PostGuiEvent( BBEVENT_GADGETCLOSE,self,(int)node,0,0,0,0 );
- #endif
- }
- -(void)outlineViewSelectionDidChange:(NSNotification *)notification{
- id node;
- node=[self selectedNode];
- #ifdef __x86_64
- PostGuiEvent( BBEVENT_GADGETSELECT,self,(BBInt64)node,0,0,0,0 );
- #else
- PostGuiEvent( BBEVENT_GADGETSELECT,self,(int)node,0,0,0,0 );
- #endif
- }
- -(BOOL)outlineView:(NSOutlineView *)outlineView shouldEditTableColumn:(NSTableColumn *)tableColumn item:(id)item{
- #ifdef __x86_64
- PostGuiEvent( BBEVENT_GADGETACTION,self,(BBInt64)item,0,0,0,0 );
- #else
- PostGuiEvent( BBEVENT_GADGETACTION,self,(int)item,0,0,0,0 );
- #endif
- return NO;
- }
- -(void)setColor:(NSColor*)color{
- [outline setBackgroundColor:color];
- }
- -(void)setTextColor:(NSColor*)color{
- if (textstyle) {[textstyle release];textstyle=nil;}
- if (color){
- textstyle=[NSMutableDictionary dictionaryWithObjectsAndKeys:color,NSForegroundColorAttributeName,nil];
- [textstyle retain];
- }
- }
- - (void)setFont:(NSFont*)font{
- if (font) {
- NSLayoutManager* layoutManager = [[[NSLayoutManager alloc] init] autorelease];
- int i;
- NSArray *columnsArray = [outline tableColumns];
- for (i= 0; i < [columnsArray count]; i++) {
- [[[columnsArray objectAtIndex:i] dataCell] setFont:font];
- }
- [outline setRowHeight: [layoutManager defaultLineHeightForFont:font]+3];
-
- [cell setFont:font];
- [rootNode queueWidthUpdate];
- }
- }
- - (void)outlineView:(NSOutlineView *)outlineView willDisplayCell:(id)dcell forTableColumn:(NSTableColumn *)tableColumn item:(id)node{
- if (textstyle){
- [textstyle setValue:[cell font] forKey:NSFontAttributeName];
- NSAttributedString *atext=[[[NSAttributedString alloc] initWithString:[node value] attributes:textstyle] autorelease];
- [dcell setAttributedStringValue:atext];
- }
- else{
- [dcell setStringValue:[node value]];
- }
- [dcell setImage:[node icon]];
- }
- -(void)setEnabled:(BOOL)e{
- [outline setEnabled:e];
- }
- -(BOOL)isEnabled{
- return [outline isEnabled];
- }
- @end
- // NodeItem
- @implementation NodeItem
- -(void)dealloc{}
- -(id)initWithTitle:(NSString*)text{
- owner=nil;
- parent=nil;
- title=text;
- icon=nil;
- [title retain];
- kids=[[NSMutableArray alloc] initWithCapacity:10];
- [kids retain];
- return self;
- }
- -(void)updateWidth{
- int i;
- float cellWidth;
- float indentationWidth;
-
- NSCell* dcell;
- NSArray* columnsArray;
-
- if(owner==nil) return;
-
- NSOutlineView* outline = owner->outline;
- NSTableColumn* tableColumn = owner->column;
-
- if(tableColumn!=nil){
- dcell = [tableColumn dataCell];
- [dcell setStringValue:title];
- [dcell setImage:icon];
- cellWidth = ((NSSize)[dcell cellSize]).width;
- indentationWidth = [outline levelForItem: self];
- if(isnan(indentationWidth)) indentationWidth = 0; else indentationWidth=([outline indentationPerLevel]*(indentationWidth+1));
- if((owner->rootNode == self) || [outline isItemExpanded:self])
- for (i= 0; i < [kids count]; i++) [[kids objectAtIndex:i] updateWidth];
- if([tableColumn minWidth] < (cellWidth+indentationWidth)){
- [tableColumn setMinWidth:(cellWidth+indentationWidth)];
- [tableColumn setWidth:(cellWidth+indentationWidth+10)];
- }
- }
- }
- -(void)queueWidthUpdate{
- [NSObject cancelPreviousPerformRequestsWithTarget: self selector:@selector(updateWidth) object:nil];
- [self performSelector:@selector(updateWidth) withObject:nil afterDelay:0.0];
- }
- -(void)setOwner:(TreeView*)treeview{
- owner=treeview;
- }
- -(id)getOwner{
- return owner;
- }
- -(void)show{
- if (parent){
- [parent show];
- [owner expandNode:parent];
- }
- }
- -(void)attach:(NodeItem*)parent_ atIndex:(unsigned)index_{
- parent=parent_;
- if( parent ){
- owner=parent->owner;
- [[parent kids] insertObject:self atIndex:index_];
- [self release];
- }
- if (owner) [owner refresh];
- }
- -(void)remove{
- if( parent ) [[parent kids] removeObject:self];
- if (owner) [owner refresh];
- }
- -(BOOL)canExpand{
- return [kids count]>0;
- }
- -(NSMutableArray*)kids{
- return kids;
- }
- -(NSString *)value{return title;}
- -(NSImage *)icon{return icon;}
- -(void)setTitle:(NSString*)text{
- [title release];
- title=text;
- [title retain];
- if (owner){
- [owner->outline reloadItem:self];
- [owner->rootNode queueWidthUpdate];
- }
- }
- -(void)setIcon:(NSImage*)image{
- if (icon) [icon release];
- icon=image;
- if (icon) [icon retain];
- if (owner){
- [owner->outline reloadItem:self];
- [(icon ? self : owner->rootNode) queueWidthUpdate];
- }
- }
- -(unsigned)count{
- return [kids count];
- }
- @end
- // TextView
- @implementation TextView
- -(id)initWithFrame:(NSRect)rect{
-
- scroll=[[NSScrollView alloc] initWithFrame:rect];
- // [scroll setVerticalScroller:[[Scroller alloc] init]];
- // [scroll setHorizontalScroller:[[Scroller alloc] init]];
- [scroll setHasVerticalScroller:YES];
- [scroll setHasHorizontalScroller:YES];
- [scroll setDrawsBackground:NO];
- [scroll setRulersVisible:NO];
- [scroll setBorderType:NSNoBorder];
- [scroll setAutohidesScrollers:YES];
-
- NSSize contentSize = [scroll contentSize];
- self=[super initWithFrame:NSMakeRect(0, 0,contentSize.width,contentSize.height)];
- [self setMinSize:NSMakeSize(contentSize.width, contentSize.height)];
- [self setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)];
- [self setVerticallyResizable:YES];
- [self setHorizontallyResizable:YES];
- [self setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- [[self textContainer] setContainerSize:NSMakeSize(FLT_MAX,FLT_MAX)];
- [[self textContainer] setWidthTracksTextView:NO];
- [self setDelegate:self];
- [self setUsesRuler:NO];
- [scroll setDocumentView:self];
- style=[[NSParagraphStyle defaultParagraphStyle] mutableCopy];
- [style setLineBreakMode:NSLineBreakByClipping];
-
- styles=[NSMutableDictionary dictionaryWithObject:style forKey:NSParagraphStyleAttributeName];
- [styles retain];
- storage=[self textStorage];
- [storage setDelegate:self];
-
- lockedNest=0;
-
- [self setTabs: 4];
- if ([self respondsToSelector: @selector(setDefaultParagraphStyle)])
- [self setDefaultParagraphStyle: style];
-
- if ([self respondsToSelector: @selector(setAutomaticLinkDetectionEnabled)])
- [self setAutomaticLinkDetectionEnabled: NO];
- if ([self respondsToSelector: @selector(setAutomaticQuoteSubstitutionEnabled)])
- [self setAutomaticQuoteSubstitutionEnabled: NO];
- if ([self respondsToSelector: @selector(setAutomaticSpellingCorrectionEnabled)])
- [self setAutomaticSpellingCorrectionEnabled: NO];
- if ([self respondsToSelector: @selector(setAutomaticTextReplacementEnabled)])
- [self setAutomaticTextReplacementEnabled: NO];
- if ([self respondsToSelector: @selector(setAutomaticDataDetectionEnabled)])
- [self setAutomaticDataDetectionEnabled: NO];
-
- // on OS X 10.6+, disable all TextCheckingTypes, as the above code has no effect.
- #ifdef __MAC_OS_X_VERSION_MAX_ALLOWED
- #if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
- [self setEnabledTextCheckingTypes:0];
- #endif
- #endif
- return self;
- }
- -(void)free{
- [scroll setDocumentView:nil];
- [scroll release];
- [style release];
- [styles release];
- [storage release];
- }
- -(void)setHidden:(BOOL)flag{
- [scroll setHidden:flag];
- }
- -(id)storage{
- return storage;
- }
- -(NSSize)contentSize{
- return [scroll contentSize];
- }
- -(id)getScroll{
- return scroll;
- }
- -(void)setWordWrap:(BOOL)flag{
- NSSize contentSize=[self contentSize];
- if (flag){
- [scroll setHasHorizontalScroller:NO];
- [self setHorizontallyResizable:NO];
- [self setAutoresizingMask:NSViewWidthSizable];
- [[self textContainer] setContainerSize:NSMakeSize(contentSize.width, FLT_MAX)];
- [[self textContainer] setWidthTracksTextView:YES];
- [style setLineBreakMode:NSLineBreakByWordWrapping];
- }
- else{
- [scroll setHasHorizontalScroller:YES];
- [self setHorizontallyResizable:YES];
- [self setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
- [[self textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)];
- [[self textContainer] setWidthTracksTextView:NO];
- [style setLineBreakMode:NSLineBreakByClipping];
- }
- [storage addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0,[storage length])];
- }
- -(void)setTabs:(int)tabs{
- [style setTabStops:[NSArray array]]; //Clear any TabStops
- [style setDefaultTabInterval: tabs]; //Set recurring TabStops remembering to convert from twips->pixels
- [storage addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0,[storage length])];
- }
- -(void)setMargins:(int)leftmargin{
- [self setTextContainerInset:NSMakeSize( leftmargin, 0) ];
- // [style setFirstLineHeadIndent: leftmargin*8];
- // [style setHeadIndent: leftmargin*8];
- // [storage addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0,[storage length])];
- }
- -(void)setText:(NSString*)text{
- NSAttributedString *astring;
- astring=[[NSAttributedString alloc] initWithString:text attributes:styles];
- if (lockedNest) [storage endEditing];
- [storage setAttributedString:astring];
- if (lockedNest) [storage beginEditing]; else [self setSelectedRange:NSMakeRange(0,0)];
- }
- -(void)addText:(NSString*)text{
- NSAttributedString *astring;
- astring=[[NSAttributedString alloc] initWithString:text attributes:styles];
- if (lockedNest) [storage endEditing];
- [storage appendAttributedString:astring];
- if (lockedNest) [storage beginEditing];
- }
- -(void)setScrollFrame:(NSRect)rect{
- [scroll setFrame:rect];
- }
- -(void)setTextColor:(NSColor*)color{
- [styles setObject:color forKey:NSForegroundColorAttributeName];
- [storage addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0,[storage length])];
- [self setInsertionPointColor:color];
- }
- -(void)setColor:(NSColor*)color{
- if(color){
- [self setBackgroundColor:color];
- [self setDrawsBackground:true];
- [scroll setBackgroundColor:color];
- [scroll setDrawsBackground:true];
- }else{
- [self setDrawsBackground:false];
- [scroll setDrawsBackground:false];
- }
- }
- -(void)setFont:(NSFont*)font{
- [styles setObject:font forKey:NSFontAttributeName];
- [storage setFont:font];
- [super setFont:font];
- }
- -(NSMenu *)menuForEvent:(NSEvent *)event{
- NSPoint p;
- int x,y;
- p=[event locationInWindow];
- x=(int)p.x;y=(int)p.y;
- PostGuiEvent( BBEVENT_GADGETMENU,self,0,0,x,y,0 );
- return nil;
- }
- -(void)updateDragTypeRegistration{
- }
- -(NSArray *)acceptableDragTypes{
- return nil;
- }
- -(void)textDidBeginEditing:(NSNotification*)n{
- // printf( "textDidBeginEditing:%p\n",_textEditor );fflush(stdout);
- }
- -(void)textDidChange:(NSNotification*)n{
- PostGuiEvent( BBEVENT_GADGETACTION,self,0,0,0,0,0 );
- }
- -(void)textDidEndEditing:(NSNotification*)n{
- // printf( "textDidEndEditing:%p\n",_textEditor );fflush(stdout);
- PostGuiEvent( BBEVENT_GADGETLOSTFOCUS,[n object],0,0,0,0,0 );
- }
- -(void)textViewDidChangeSelection:(NSNotification *)aNotification{
- PostGuiEvent( BBEVENT_GADGETSELECT,self,0,0,0,0,0 );
- }
- -(void)textStorageDidProcessEditing:(NSNotification *)aNotification{
- }
- -(void)textStorageWillProcessEditing:(NSNotification *)aNotification{
- [storage removeAttribute:NSLinkAttributeName range:[storage editedRange]];
- }
- @end
- // TabViewItem
- @class TabViewItem;
- @interface TabViewItem:NSTabViewItem{
- NSImage *_image;
- }
- -(id)initWithIdentifier:(NSString *)text;
- -(void)setImage:(NSImage*)image;
- -(id)copyWithZone:(NSZone *)zone;
- -(NSImage*)image;
- -(NSSize)sizeOfLabel:(BOOL)shouldTruncateLabel;
- -(void)drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)tabRect;
- @end
- @implementation TabViewItem
- -(id)initWithIdentifier:(NSString *)string{
- self=[super initWithIdentifier:string];
- _image=nil;
- return self;
- }
- -(void)setImage:(NSImage*)image{
- _image=image;
- if (_image) [_image setScalesWhenResized:YES];
- }
- -(id)copyWithZone:(NSZone *)zone{
- TabViewItem *copy=[[[self class] allocWithZone:zone] initWithIdentifier:[self identifier]];
- return copy;
- }
- -(NSImage*)image{
- return _image;
- }
- -(NSSize)sizeOfLabel:(BOOL)shouldTruncateLabel{
- NSSize size;
- NSSize imageDimensions;
- float ratio;
- size=[super sizeOfLabel:shouldTruncateLabel];
-
- if (_image) {
- imageDimensions = [_image size];
- if (imageDimensions.height > size.height){
- ratio = size.height/imageDimensions.height;
- imageDimensions.width*=ratio;imageDimensions.height*=ratio;
- [_image setSize: imageDimensions];
- }
- size.width += imageDimensions.height;
- }
- return size;
- }
- -(void)drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)content{
- NSSize imageDimensions;
- NSPoint point;
- if (_image){
- imageDimensions = [_image size];
- point = NSMakePoint(content.origin.x,content.origin.y+imageDimensions.height);
- [_image compositeToPoint:point operation:NSCompositeSourceOver];
- content.origin.x+=imageDimensions.width;content.size.width-=imageDimensions.width;
- }
- [super drawLabel:shouldTruncateLabel inRect:content];
- }
- @end
- // TabView
- @implementation TabView
- -(id)initWithFrame:(NSRect)rect{
- rect.size.height+=8;
- self=[super initWithFrame:rect];
- [super setControlSize:NSSmallControlSize];
- [super setFont:[NSFont labelFontOfSize:[NSFont smallSystemFontSize]]];
- client=[[FlippedView alloc] initWithFrame:[self contentRect]];
- [client setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- [client retain];
- user=1;
- [self setDelegate:self];
- return self;
- }
- -(id)clientView{
- return client;
- }
- -(void)selectTabViewItemAtIndex:(int)index{
- user=0;
- [super selectTabViewItemAtIndex:index];
- user=1;
- }
- -(void)setFrame:(NSRect)rect{
- rect.size.height+=8;
- [super setFrame:rect];
- }
- -(BOOL)tabView:(NSTabView *)tabView shouldSelectTabViewItem:(NSTabViewItem *)tabViewItem{
- int index;
- [tabViewItem setView:client];
- [client setFrame:[self contentRect]];
- if (user){
- index=[self indexOfTabViewItem:tabViewItem];
- PostGuiEvent( BBEVENT_GADGETACTION,self,index,0,0,0,0);
- }
- return YES;
- }
- -(void)dealloc{
- NSArray *items;
- int i,n;
-
- items=[self tabViewItems];
- n=[items count];
- for (i=0;i<n;i++) [self removeTabViewItem:[items objectAtIndex:0]];
- [client release];
- [super dealloc];
- }
- -(NSMenu *)menuForEvent:(NSEvent *)event{
- int index;
- NSTabViewItem* tabItem;
- tabItem = [self tabViewItemAtPoint:[self convertPoint:[event locationInWindow] fromView:nil]];
- if (tabItem) index = [self indexOfTabViewItem:tabItem]; else index = -1;
- PostGuiEvent( BBEVENT_GADGETMENU,self,index,0,0,0,0);
- return [super menuForEvent:event];
- }
- @end
- // WindowView
- @implementation WindowView
- -(id)textFirstResponder{
- id r=[self firstResponder];
- //if ([r isKindOfClass:[PanelView class]]) return r;
- if ([r isKindOfClass:[NSTextView class]]){
- id d=[r delegate];
- if( [d isKindOfClass:[NSTextField class]] ) return d;
- }
- return r;
- }
- -(id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)backing defer:(BOOL)flag withGadget:(nsgadget*)_gadget{
- //withStatus:(BOOL)status{
- id client;
- int i;
- NSText *l;
- NSBox *box;
- dragging = nil;
- self=[super initWithContentRect:rect styleMask:mask backing:backing defer:flag];
- gadget=_gadget;
- view=[[FlippedView alloc] init];
- enabled=true;
- [self setContentView:view];
- [self setAcceptsMouseMovedEvents:YES];
- [self disableCursorRects]; //Fixes NSSetPointer not sticking.
- if (gadget->style&WINDOW_STATUS){
- rect.origin.x=rect.origin.y=0;
- rect.size.height-=STATUSBARHEIGHT;
- client=[[FlippedView alloc] initWithFrame:rect];
- [client setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- [view addSubview:client];
- // label for window status
- rect.origin.y=rect.size.height+3;
- rect.size.height=STATUSBARHEIGHT-4;
- rect.size.width-=[NSScroller scrollerWidth];
- for (i=0;i<3;i++){
- l=[[NSText alloc] initWithFrame:rect];
- [l setDrawsBackground:NO];
- [l setEditable:NO];
- [l setSelectable:NO];
- [l setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin];
- switch (i){
- case 0:[l setAlignment:NSLeftTextAlignment];break;
- case 1:[l setAlignment:NSCenterTextAlignment];break;
- case 2:[l setAlignment:NSRightTextAlignment];break;
- }
- if (view) [view addSubview:l];
- label[i]=l;
- }
-
- rect.origin.y-=3;
- rect.size.height=2;
- rect.size.width+=[NSScroller scrollerWidth];
-
- box=[[NSBox alloc] initWithFrame:rect];
- [box setBoxType:NSBoxSeparator];
- [box setTitlePosition:NSNoTitle];
- [box setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin];
- if (view) [view addSubview:box];
-
- // set clientview to inner view
- view=client;
- }
- return self;
- }
- -(id)clientView{
- return view;
- }
- -(void)setStatus:(NSString*)text align:(int)pos{
- if (label[pos]) [label[pos] setString:text];
- }
- -(void)sendEvent:(NSEvent*)event{
-
- static int lastHotKey;
- int key;
- id source;
-
- // Handling of Generic Key/Mouse Events
-
- switch( [event type] ){
- case NSMouseEntered:
- [self disableCursorRects];
- case NSLeftMouseDown:
- case NSRightMouseDown:
- case NSOtherMouseDown:
- if( [event type] != NSMouseEntered ){
- dragging = [[self contentView] hitTest:[event locationInWindow]];
- [self makeFirstResponder:dragging];
- }
- case NSMouseMoved:
- case NSMouseExited:
- case NSScrollWheel:
- {
- NSView *hitView = [[self contentView] hitTest:[event locationInWindow]];
- if (hitView) EmitMouseEvent( event, hitView );
- if(![self isEnabled]) return;
- break;
- }
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:
- {
- //fire event for the dragged view
- if (dragging) {
- EmitMouseEvent( event, dragging );
- dragging = nil;
- } else {
- //fire the event for the recieving view (if it exists)
- NSView *hitView = [[self contentView] hitTest:[event locationInWindow]];
- if (hitView) EmitMouseEvent( event, hitView );
- }
-
- if(![self isEnabled]) return;
- break;
- }
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- {
- if( dragging == nil ) dragging = [[self contentView] hitTest:[event locationInWindow]];
- if( dragging ) EmitMouseEvent( event, dragging );
- if(![self isEnabled]) return;
- break;
- }
- case NSKeyDown:
- case NSKeyUp:
- case NSFlagsChanged:
- {
- NSResponder *handle=(NSResponder*)NSActiveGadget();
- if( handle && EmitKeyEvent( event, handle )) return;
- break;
- }
- }
-
- // End of Generic Key/Mouse Events
-
- // Gadget Filterkey Processing
-
- switch( [event type] ){
- case NSKeyDown:
- if( key=bbSystemTranslateKey( [event keyCode] ) ){
- int mods=bbSystemTranslateMods( [event modifierFlags] );
- BBObject *event=maxgui_maxgui_HotKeyEvent( key,mods );
- if( event!=&bbNullObject ){
- lastHotKey=key;
- brl_event_EmitEvent( event );
- return;
- }
- }
- source=[self textFirstResponder];
- if( source && !filterKeyDownEvent( event,source ) ) return;
- if(![self isEnabled]) return;
- break;
- case NSKeyUp:
- key=bbSystemTranslateKey([event keyCode]);
- if( lastHotKey && (key==lastHotKey ) ){
- lastHotKey=0;
- return;
- }
- if(![self isEnabled]) return;
- break;
- }
- lastHotKey=0;
-
- // End of FilterKey Processing
-
- [super sendEvent:event];
- }
- - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender{
- // printf("windowview got dragenter\n");fflush(stdout);
- return YES;
- }
- - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender{
- NSPasteboard *pboard = [sender draggingPasteboard];
- if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
- NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
- int numberOfFiles = [files count];
- // Perform operation using the list of files
- // printf("windowview got drag\n");fflush(stdout);
- int i;
- for (i=0;i<numberOfFiles;i++)
- {
- BBString *name=bbStringFromNSString([files objectAtIndex:i]);
- maxgui_cocoamaxgui_cocoagui_PostCocoaGuiEvent( BBEVENT_WINDOWACCEPT,self,0,0,0,0,(BBObject*)name );
- }
-
- }
- return YES;
- }
- -(void)didResize{
- NSRect rect=[self localRect];
- [self didMove];
- PostGuiEvent( BBEVENT_WINDOWSIZE,self,0,0,rect.size.width,rect.size.height,0 );
- }
- -(void)didMove{
- NSRect rect=[self localRect];
- PostGuiEvent( BBEVENT_WINDOWMOVE,self,0,0,rect.origin.x,rect.origin.y,0 );
- }
- -(void)zoom{
- zooming = 1;
- }
- -(NSRect)localRect{
- NSRect rect,vis;
- int style;
- rect=[self frame];
- style=gadget->style;
- if (style&WINDOW_CLIENTCOORDS){
- rect=[self contentRectForFrameRect:rect];
- if (style&WINDOW_STATUS) {
- rect.size.height-=STATUSBARHEIGHT;
- rect.origin.y+=STATUSBARHEIGHT;
- }
- }
- vis=[[NSScreen deepestScreen] visibleFrame];
- rect.origin.x-=vis.origin.x;
- rect.origin.y=vis.size.height-(rect.origin.y-vis.origin.y)-rect.size.height;
- return rect;
- }
- -(BOOL)canBecomeKeyWindow{
- return ([self isEnabled]);
- }
- -(BOOL)canBecomeMainWindow{
- return ([self isEnabled] && [self isVisible] && ([self parentWindow]==nil));
- }
- -(BOOL)becomeFirstResponder{
- return ([self isEnabled] && [self isVisible]);
- }
- -(void)setEnabled:(BOOL)e{
- enabled=e;
- if (enabled) [self makeKeyWindow];
- }
- -(BOOL)isEnabled{
- return (enabled)?YES:NO;
- }
- -(void)dealloc{
- int i;
- id sview;
- if (gadget->style&WINDOW_STATUS) {
- for (i = 0; i < 3; i++) {
- if (label[i]) {
- [label[i] removeFromSuperview];
- [label[i] release];
- }
- }
-
- sview = [view superview];
- [view removeFromSuperview];
- [view release];
- [sview removeFromSuperview];
- [sview release];
- } else {
- [view removeFromSuperview];
- [view release];
- }
- [super dealloc];
- }
- @end
- // ToolView
- @implementation ToolView
- -(id)textFirstResponder{
- id r=[self firstResponder];
- //if ([r isKindOfClass:[PanelView class]]) return r;
- if ([r isKindOfClass:[NSTextView class]]){
- id d=[r delegate];
- if( [d isKindOfClass:[NSTextField class]] ) return d;
- }
- return r;
- }
- -(id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)backing defer:(BOOL)flag withGadget:(nsgadget*)_gadget{
- //withStatus:(BOOL)status{
- id client;
- int i;
- NSText *l;
- NSBox *box;
- dragging = nil;
- self=[super initWithContentRect:rect styleMask:mask backing:backing defer:flag];
- gadget=_gadget;
- view=[[FlippedView alloc] init];
- enabled=true;
- [self setContentView:view];
- [self setAcceptsMouseMovedEvents:YES];
- [self disableCursorRects]; //Fixes NSSetPointer not sticking.
- if (gadget->style&WINDOW_STATUS){ //status){ //mask&NSTexturedBackgroundWindowMask)
- rect.origin.x=rect.origin.y=0;
- rect.size.height-=STATUSBARHEIGHT;
- client=[[FlippedView alloc] initWithFrame:rect];
- [client setAutoresizingMask:(NSViewWidthSizable|NSViewHeightSizable)];
- [view addSubview:client];
- // label for window status
- rect.origin.y=rect.size.height+3;
- rect.size.height=STATUSBARHEIGHT-4;
- rect.size.width-=[NSScroller scrollerWidth];
- for (i=0;i<3;i++){
- l=[[NSText alloc] initWithFrame:rect];
- [l setDrawsBackground:NO];
- [l setEditable:NO];
- [l setSelectable:NO];
- [l setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin];
- switch (i){
- case 0:[l setAlignment:NSLeftTextAlignment];break;
- case 1:[l setAlignment:NSCenterTextAlignment];break;
- case 2:[l setAlignment:NSRightTextAlignment];break;
- }
- if (view) [view addSubview:l];
- label[i]=l;
- }
-
- rect.origin.y-=3;
- rect.size.height=2;
- rect.size.width+=[NSScroller scrollerWidth];
-
- box=[[NSBox alloc] initWithFrame:rect];
- [box setBoxType:NSBoxSeparator];
- [box setTitlePosition:NSNoTitle];
- [box setAutoresizingMask:NSViewWidthSizable|NSViewMinYMargin];
- if (view) [view addSubview:box];
-
- // set clientview to inner view
- view=client;
- }
- if ([self respondsToSelector: @selector(setShowsToolbarButton)]) [self setShowsToolbarButton: NO];
- return self;
- }
- -(id)clientView{
- return view;
- }
- -(void)setStatus:(NSString*)text align:(int)pos{
- if (label[pos]) [label[pos] setString:text];
- }
- -(void)sendEvent:(NSEvent*)event{
-
- static int lastHotKey;
- int key;
- id source;
-
- // Handling of Generic Key/Mouse Events
-
- switch( [event type] ){
- case NSMouseEntered:
- [self disableCursorRects];
- case NSLeftMouseDown:
- case NSRightMouseDown:
- case NSOtherMouseDown:
- {
- if( [event type] != NSMouseEntered ){
- dragging = [[self contentView] hitTest:[event locationInWindow]];
- [self makeFirstResponder:dragging];
- }
- }
- case NSMouseMoved:
- case NSMouseExited:
- case NSScrollWheel:
- {
- NSView *hitView = [[self contentView] hitTest:[event locationInWindow]];
- if (hitView) EmitMouseEvent( event, hitView );
- if(![self isEnabled]) return;
- break;
- }
- case NSLeftMouseUp:
- case NSRightMouseUp:
- case NSOtherMouseUp:
- {
- //fire event for the dragged view
- if (dragging) {
- EmitMouseEvent( event, dragging );
- dragging = nil;
- } else {
- //fire the event for the recieving view (if it exists)
- NSView *hitView = [[self contentView] hitTest:[event locationInWindow]];
- if (hitView) EmitMouseEvent( event, hitView );
- }
-
- if(![self isEnabled]) return;
- break;
- }
- case NSLeftMouseDragged:
- case NSRightMouseDragged:
- case NSOtherMouseDragged:
- {
- if( dragging == nil ) dragging = [[self contentView] hitTest:[event locationInWindow]];
- if( dragging ) EmitMouseEvent( event, dragging );
- if(![self isEnabled]) return;
- break;
- }
- case NSKeyDown:
- case NSKeyUp:
- case NSFlagsChanged:
- {
- NSResponder *handle=(NSResponder*)NSActiveGadget();
- if( handle && EmitKeyEvent( event, handle )) return;
- break;
- }
- }
-
- // End of Generic Key/Mouse Events
-
- // Gadget Filterkey Processing
-
- switch( [event type] ){
- case NSKeyDown:
- if( key=bbSystemTranslateKey( [event keyCode] ) ){
- int mods=bbSystemTranslateMods( [event modifierFlags] );
- BBObject *event=maxgui_maxgui_HotKeyEvent( key,mods );
- if( event!=&bbNullObject ){
- lastHotKey=key;
- brl_event_EmitEvent( event );
- return;
- }
- }
- source=[self textFirstResponder];
- if( source && !filterKeyDownEvent( event,source ) ) return;
- if(![self isEnabled]) return;
- break;
- case NSKeyUp:
- key=bbSystemTranslateKey([event keyCode]);
- if( lastHotKey && (key==lastHotKey ) ){
- lastHotKey=0;
- return;
- }
- if(![self isEnabled]) return;
- break;
- }
- lastHotKey=0;
-
- // End of FilterKey Processing
-
- [super sendEvent:event];
- }
- - (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender{
- // printf("windowview got dragenter\n");fflush(stdout);
- return YES;
- }
- - (BOOL)performDragOperation:(id <NSDraggingInfo>)sender{
- NSPasteboard *pboard = [sender draggingPasteboard];
- if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
- NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
- int numberOfFiles = [files count];
- // Perform operation using the list of files
- // printf("windowview got drag\n");fflush(stdout);
- int i;
- for (i=0;i<numberOfFiles;i++)
- {
- BBString *name=bbStringFromNSString([files objectAtIndex:i]);
- maxgui_cocoamaxgui_cocoagui_PostCocoaGuiEvent( BBEVENT_WINDOWACCEPT,self,0,0,0,0,(BBObject*)name );
- }
-
- }
- return YES;
- }
- -(void)didResize{
- if (zooming) {
- zooming = 0;
- [self didMove];
- }
- NSRect rect=[self localRect];
- PostGuiEvent( BBEVENT_WINDOWSIZE,self,0,0,rect.size.width,rect.size.height,0 );
- }
- -(void)didMove{
- NSRect rect=[self localRect];
- PostGuiEvent( BBEVENT_WINDOWMOVE,self,0,0,rect.origin.x,rect.origin.y,0 );
- }
- -(void)zoom{
- zooming = 1;
- }
- -(NSRect)localRect{
- NSRect rect,vis;
- int style;
- rect=[self frame];
- style=gadget->style;
- if (style&WINDOW_CLIENTCOORDS){
- rect=[self contentRectForFrameRect:rect];
- if (style&WINDOW_STATUS) {
- rect.size.height-=STATUSBARHEIGHT;
- rect.origin.y+=STATUSBARHEIGHT;
- }
- }
- vis=[[NSScreen deepestScreen] visibleFrame];
- rect.origin.x=rect.origin.x-vis.origin.x;
- rect.origin.y=vis.size.height-(rect.origin.y-vis.origin.y)-rect.size.height;
- return rect;
- }
- -(BOOL)canBecomeKeyWindow{
- return ([self isEnabled]);
- }
- -(BOOL)canBecomeMainWindow{
- return ([self isEnabled] && [self isVisible] && ([self parentWindow]==nil));
- }
- -(BOOL)becomeFirstResponder{
- return ([self isEnabled] && [self isVisible]);
- }
- -(void)setEnabled:(BOOL)e{
- enabled=e;
- if (enabled) [self makeKeyWindow];
- }
- -(BOOL)isEnabled{
- return (enabled)?YES:NO;
- }
- -(void)dealloc{
- int i;
- id sview;
- if (gadget->style&WINDOW_STATUS) {
- for (i = 0; i < 3; i++) {
- if (label[i]) {
- [label[i] removeFromSuperview];
- [label[i] release];
- }
- }
-
- sview = [view superview];
- [view removeFromSuperview];
- [view release];
- [sview removeFromSuperview];
- [sview release];
- } else {
- [view removeFromSuperview];
- [view release];
- }
- [super dealloc];
- }
- @end
- // global app stuff
- void NSBegin(){
- GlobalApp=[[CocoaApp alloc] init];
- HaltMouseEvents=0;
- }
- void NSEnd(){
- [GlobalApp release];
- }
- void* NSActiveGadget(){
- NSWindow *window;
- NSResponder *responder;
- window=[NSApp keyWindow];
- if (!window) return 0;
- responder=[window firstResponder];
- if (!responder) return window;
- if ([responder isKindOfClass:[NSTextView class]] &&
- [window fieldEditor:NO forObject:nil] != nil ) {
- NSTextView *view=(NSTextView*)responder;
- return [view delegate];
- }
- return responder;
- }
- void NSInitGadget(nsgadget *gadget){
- NSRect rect,vis;
- NSString *text;
- NSView *view;
- NSWindow *window;
- NSButton *button;
- NSTextField *textfield;
- TextView *textarea;
- NSControl *combobox;
- Toolbar *toolbar;
- TabView *tabber;
- TreeView *treeview;
- HTMLView *htmlview;
- PanelView *panel;
- PanelViewContent *pnlcontent;
- CanvasView *canvas;
- ListView *listbox;
- NSText *label;
- NSBox *box;
- NSSlider *slider;
- NSScroller *scroller;
- NSStepper *stepper;
- NSProgressIndicator *progbar;
- NSMenu *menu;
- NSMenuItem *menuitem;
- NodeItem *node,*parent;
- nsgadget *group;
- int style,flags;
- NSImage *image;
-
- rect=NSMakeRect(gadget->x,gadget->y,gadget->w,gadget->h);
- text=NSStringFromBBString(gadget->textarg);
- style=gadget->style;flags=0;
- group=gadget->group;
- if (group==(nsgadget*)&bbNullObject) group=0;
- if (group) view=gadget->group->view;
-
- switch (gadget->internalclass){
- case GADGET_DESKTOP:
- rect=[[NSScreen deepestScreen] frame];
- gadget->x=rect.origin.x;
- gadget->y=rect.origin.y;
- gadget->w=rect.size.width;
- gadget->h=rect.size.height;
- break;
- case GADGET_WINDOW:
- vis=[[NSScreen deepestScreen] visibleFrame];
- rect.origin.x+=vis.origin.x;
- rect.origin.y=vis.origin.y+vis.size.height-rect.origin.y-rect.size.height;
- if (style&WINDOW_TITLEBAR) flags|=NSTitledWindowMask|NSClosableWindowMask;
- if (style&WINDOW_RESIZABLE){
- flags|=NSResizableWindowMask;
- if (!(group && (group->internalclass==GADGET_WINDOW))) flags |=NSMiniaturizableWindowMask;
- }
- if (style&WINDOW_TOOL) flags|=NSUtilityWindowMask;
- [NSApp activateIgnoringOtherApps:YES];
- if (!(style&WINDOW_CLIENTCOORDS)){
- rect=[NSWindow contentRectForFrameRect:rect styleMask:flags];
- }else{
- if (style&WINDOW_STATUS) {
- rect.origin.y-=STATUSBARHEIGHT;
- rect.size.height+=STATUSBARHEIGHT;
- }
- }
- if (!(style&WINDOW_TOOL)) {
- window=[[WindowView alloc] initWithContentRect:rect styleMask:flags backing:NSBackingStoreBuffered defer:YES withGadget:gadget];
- } else {
- window=[[ToolView alloc] initWithContentRect:rect styleMask:flags backing:NSBackingStoreBuffered defer:YES withGadget:gadget];
- }
- [window setOpaque:NO];
- [window setAlphaValue:.999f];
-
- if (style&WINDOW_HIDDEN) [window orderOut:window]; else [window makeKeyAndOrderFront:NSApp];
-
- if (group && (group->internalclass==GADGET_WINDOW)){
- NSWindow *parent;
- parent=(NSWindow*)group->handle;
- if(!(style&WINDOW_HIDDEN)) [parent addChildWindow:window ordered:NSWindowAbove];
- [window setParentWindow:parent];
- }
-
- if (style&WINDOW_ACCEPTFILES)
- [window registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]];
-
- [window setTitle:text];
- [window setDelegate:GlobalApp];
- gadget->handle=window;
- gadget->view=[window clientView];
- break;
-
- case GADGET_BUTTON:
- button=[[NSButton alloc] initWithFrame:rect];
- [button setTitle:text];
-
- [button setBezelStyle:NSRoundedBezelStyle];
-
- switch (style&7){
- case 0:
- // Push Button Size Hack
- if (gadget->h > 30) {
- [button setBezelStyle:NSRegularSquareBezelStyle];
- } else {
- if (gadget->h < 24) [button setBezelStyle:NSShadowlessSquareBezelStyle];
- else [button setBezelStyle:NSRoundedBezelStyle];
- }
- break;
- case BUTTON_CHECKBOX:
- if (style&BUTTON_PUSH){
- [button setBezelStyle:NSShadowlessSquareBezelStyle];
- [button setButtonType:NSPushOnPushOffButton];
- } else {
- [button setButtonType:NSSwitchButton];
- }
- break;
- case BUTTON_RADIO:
- if (style&BUTTON_PUSH){
- [button setBezelStyle:NSShadowlessSquareBezelStyle];
- [button setButtonType:NSPushOnPushOffButton];
- } else {
- [button setButtonType:NSRadioButton];
- }
- break;
- case BUTTON_OK:
- [button setKeyEquivalent:@"\r"];
- break;
- case BUTTON_CANCEL:
- [button setKeyEquivalent:@"\x1b"];
- break;
- }
- [button setTarget:GlobalApp];
- [button setAction:@selector(buttonPush:)];
- if (view) [view addSubview:button];
- gadget->handle=button;
- gadget->view=button;
- break;
- case GADGET_PANEL:
- panel=[[PanelView alloc] initWithFrame:rect];
- [panel setContentViewMargins:NSMakeSize(0.0,0.0)];
- pnlcontent=[[PanelViewContent alloc] initWithFrame:[[panel contentView] frame]];
- [pnlcontent setAutoresizesSubviews:NO];
- [panel setContentView:pnlcontent];
- [panel setGadget:gadget];
- [panel setStyle:style];
- [panel setEnabled:true];
- [panel setTitle:text];
- [pnlcontent setAlpha:1.0];
- if (view) [view addSubview:panel];
- gadget->view=pnlcontent;
- gadget->handle=panel;
- break;
- case GADGET_CANVAS:
- canvas=[[CanvasView alloc] initWithFrame:rect];
- [canvas setAutoresizesSubviews:NO];
- [canvas setGadget:gadget];
- if (view) [view addSubview:canvas];
- [canvas setStyle:style|PANEL_ACTIVE];
- [canvas setEnabled:true];
- gadget->view=[canvas contentView];
- gadget->handle=canvas;
- break;
- case GADGET_TEXTFIELD:
- if (style==TEXTFIELD_PASSWORD){
- textfield=[[NSSecureTextField alloc] initWithFrame:rect];
- }else{
- textfield=[[NSTextField alloc] initWithFrame:rect];
- }
- [textfield setDelegate:GlobalApp];
- [textfield setEditable:YES];
- [[textfield cell] setWraps:NO];
- [[textfield cell] setScrollable:YES];
- if (view) [view addSubview:textfield];
- gadget->handle=textfield;
- gadget->view=textfield;
- break;
- case GADGET_TEXTAREA://http://developer.apple.com/documentation/Cocoa/Conceptual/TextUILayer/Tasks/TextInScrollView.html
- textarea=[[TextView alloc] initWithFrame:rect];
- if (style&TEXTAREA_READONLY) [textarea setEditable:NO];
- if (style&TEXTAREA_WORDWRAP) [textarea setWordWrap:YES];
- if (view) [view addSubview:[textarea getScroll]];
- gadget->handle=textarea;
- gadget->view=[textarea getScroll];// simon was here textarea;
- break;
- case GADGET_COMBOBOX:
- if (rect.size.height > 26) rect.size.height = 26;
- combobox=[[NSComboBox alloc] initWithFrame:rect];
- [combobox setUsesDataSource:NO];
- [combobox setCompletes:YES];
- [combobox setDelegate:GlobalApp];
- [combobox setEditable:(style&COMBOBOX_EDITABLE)?YES:NO];
- [combobox setSelectable:YES];
- if (view) [view addSubview:combobox];
- gadget->handle=combobox;
- gadget->view=combobox;
- break;
- case GADGET_LISTBOX:
- listbox=[[ListView alloc] initWithFrame:rect];
- if (view) [view addSubview:listbox];
- gadget->handle=listbox;
- gadget->view=listbox;
- break;
- case GADGET_TOOLBAR:
- toolbar=[[Toolbar alloc] initWithIdentifier:text];
- [toolbar setSizeMode:NSToolbarSizeModeSmall];
- [toolbar setDisplayMode:NSToolbarDisplayModeIconOnly];
- [toolbar setDelegate:GlobalApp];
- window=(WindowView*)group->handle;
- [window setToolbar:toolbar];
- gadget->handle=toolbar;
- gadget->view=[window clientView];
- break;
- case GADGET_TABBER:
- tabber=[[TabView alloc] initWithFrame:rect];
- [tabber setAutoresizesSubviews:NO];
- if (view) [view addSubview:tabber]; //[tabber hostView]];
- gadget->handle=tabber;
- gadget->view=[tabber clientView];
- break;
- case GADGET_TREEVIEW:
- treeview=[[TreeView alloc] initWithFrame:rect]; //NSOutlineView
- if (view) [view addSubview:treeview];
- gadget->handle=treeview;
- gadget->view=treeview;
- break;
- case GADGET_HTMLVIEW:
- htmlview=[[HTMLView alloc] initWithFrame:rect];
- if (view) [view addSubview:htmlview];
- [htmlview setStyle: style];
- gadget->handle=htmlview;
- gadget->view=htmlview;
- break;
- case GADGET_LABEL: /* BaH */
- switch (style&3) {
- case LABEL_SEPARATOR:
-
- box=[[NSBox alloc] initWithFrame:rect];
-
- [box setTitle:text];
- [box setBoxType:NSBoxSeparator];
- [box setTitlePosition:NSNoTitle];
-
- [box setContentView:[[FlippedView alloc] init]];
-
- if (view) [view addSubview:box];
- gadget->handle=box;
- gadget->view=[box contentView];
-
- break;
-
- default:
-
- textfield = [[NSTextField alloc] initWithFrame:rect];
-
- [textfield setEditable:NO];
- [textfield setDrawsBackground:NO];
-
- if ((style&3)==LABEL_SUNKENFRAME) {
- [textfield setBezeled:YES];
- [textfield setBezelStyle:NSTextFieldSquareBezel];
- } else {
- [textfield setBezeled:NO];
- if ((style&3)==LABEL_FRAME)
- [textfield setBordered:YES];
- else
- [textfield setBordered:NO];
- }
-
- [[textfield cell] setWraps:YES];
- [[textfield cell] setScrollable:NO];
- [textfield setStringValue:text];
-
- switch (style&24){
- case LABEL_LEFT:[textfield setAlignment:NSLeftTextAlignment];break;
- case LABEL_RIGHT:[textfield setAlignment:NSRightTextAlignment];break;
- case LABEL_CENTER:[textfield setAlignment:NSCenterTextAlignment];break;
- }
-
- if (view) [view addSubview: textfield];
- gadget->handle=textfield;
- gadget->view=textfield;
-
- break;
- }
- break;
- case GADGET_SLIDER:
- switch (style&12){
- case SLIDER_SCROLLBAR:
- if (rect.size.width>rect.size.height) {
- rect.size.height=[NSScroller scrollerWidth];
- }
- else{
- rect.size.width=[NSScroller scrollerWidth];
- }
- scroller=[[NSScroller alloc] initWithFrame:rect];
- [scroller setEnabled:YES];
- [scroller setArrowsPosition:NSScrollerArrowsDefaultSetting];
- [scroller setAction:@selector(scrollerSelect:)];
- if (view) [view addSubview:scroller];
- gadget->handle=scroller;
- gadget->view=scroller;
- break;
- case SLIDER_TRACKBAR:
- slider=[[NSSlider alloc] initWithFrame:rect];
- [slider setEnabled:YES];
- [slider setAction:@selector(sliderSelect:)];
- if (view) [view addSubview:slider];
- gadget->handle=slider;
- gadget->view=slider;
- break;
- case SLIDER_STEPPER:
- stepper=[[NSStepper alloc] initWithFrame:rect];
- [stepper setEnabled:YES];
- [stepper setAction:@selector(sliderSelect:)];
- [stepper setValueWraps:NO];
- if (view) [view addSubview:stepper];
- gadget->handle=stepper;
- gadget->view=stepper;
- break;
- }
- break;
- case GADGET_PROGBAR:
- progbar=[[NSProgressIndicator alloc] initWithFrame:rect];
- [progbar setStyle:NSProgressIndicatorBarStyle];
- [progbar setIndeterminate:NO];
- [progbar setMaxValue:1.0];
- if (view) [view addSubview:progbar];
- gadget->handle=progbar;
- gadget->view=progbar;
- break;
- case GADGET_MENUITEM:
- // Allows a popup-menu to be created with no text without crashing.
- if ([text length] || (group->internalclass == GADGET_DESKTOP)) {
- menuitem=[[NSMenuItem alloc] initWithTitle:text action:@selector(menuSelect:) keyEquivalent:@""];
- [menuitem setTag:style];
- [GlobalApp addMenuItem:menuitem];
- }
- else{
- menuitem=(NSMenuItem*)[NSMenuItem separatorItem];
- }
- if (group){
- switch (group->internalclass){
- case GADGET_WINDOW:
- menu=[[NSMenu alloc] initWithTitle:text];
- [menu setAutoenablesItems:NO];
- [menu setSubmenu:menu forItem:menuitem];
- [menu release];
- menu=[NSApp mainMenu];
- [menu addItem:menuitem];
- if ([text length]){
- [menuitem release];
- }
- break;
- case GADGET_MENUITEM:
- menu=(NSMenu*)[group->handle submenu];
- if (!menu){
- menu=(NSMenu*)[[NSMenu alloc] initWithTitle:text];
- [menu setAutoenablesItems:NO];
- [group->handle setSubmenu:menu];
- [menu addItem:menuitem];
- [menu release];
- } else {
- [menu addItem:menuitem];
- }
- if ([text length]){
- [menuitem release];
- }
- break;
- }
- }
- gadget->handle=menuitem;
- break;
- case GADGET_NODE:
- if (!group) break;
- parent=0;
- switch (group->internalclass){
- case GADGET_TREEVIEW:
- parent=[((TreeView*)group->handle) rootNode];
- break;
- case GADGET_NODE:
- parent=(NodeItem*)group->handle;
- break;
- }
- if (!parent) break;
- node=[[NodeItem alloc] initWithTitle:text];
- int index=style;
- if (index==-1) index=[parent count];
- if (index>[parent count]) index=[parent count];
- [node attach:parent atIndex:index];
- gadget->handle=node;
- break;
- }
- }
- @class color_delegate;
- @interface color_delegate:NSObject{}
- @end
- @implementation color_delegate
- - (void)windowWillClose:(NSNotification *)aNotification{[NSApp stopModal];}
- @end
- int NSColorRequester(int r,int g,int b){
- NSColorPanel *panel;
- NSColor *color;
- color_delegate *dele;
- dele=[[color_delegate alloc] init];
- color=[NSColor colorWithCalibratedRed:r/255.0L green:g/255.0L blue:b/255.0L alpha:1.0];
- panel=[NSColorPanel sharedColorPanel];
- [panel setColor:color];
- [panel setDelegate:dele];
- [NSApp runModalForWindow:panel];
- color=[panel color];
- if (color){
- color=[color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
- r=(int)((255*[color redComponent])+0.5);
- g=(int)((255*[color greenComponent])+0.5);
- b=(int)((255*[color blueComponent])+0.5);
- }
- return 0xff000000|(r<<16)|(g<<8)|b;
- }
- @class font_delegate;
- @interface font_delegate:NSObject{
- NSFont *_font;
- }
- -(id)initWithFont:(NSFont*)font;
- -(void)changeFont:(id)sender;
- -(id)font;
- -(void)windowWillClose:(NSNotification *)aNotification;
- -(unsigned int)validModesForFontPanel:(NSFontPanel *)fontPanel;
- @end
- @implementation font_delegate
- -(id)initWithFont:(NSFont*)font{
- _font=font;
- return self;
- }
- -(id)font{
- return _font;
- }
- -(void)changeFont:(id)sender{
- _font=[sender convertFont:_font];
- return;
- }
- - (void)windowWillClose:(NSNotification *)aNotification{
- [NSApp stopModal];
- }
- -(unsigned int)validModesForFontPanel:(NSFontPanel *)fontPanel{
- return NSFontPanelFaceModeMask|NSFontPanelSizeModeMask|NSFontPanelCollectionModeMask;//|NSFontPanelUnderlineEffectModeMask;
- }
- @end
- int NSGetSysColor( int colorindex, int* red, int* green, int* blue ){
-
- float r, g, b;
- NSColor* c;
- NSWindow* w;
-
- switch(colorindex){
- case GUICOLOR_WINDOWBG:
- w = [[NSWindow alloc] initWithContentRect:NSZeroRect styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:YES];
- c = [w backgroundColor];
- [w release];
- break;
- case GUICOLOR_GADGETBG:
- c = [NSColor controlBackgroundColor];
- break;
- case GUICOLOR_GADGETFG:
- c = [NSColor controlTextColor];
- break;
- case GUICOLOR_SELECTIONBG:
- c = [NSColor selectedTextBackgroundColor];
- break;
- default:
- return 0;
- break;
- }
-
- [[c colorUsingColorSpaceName:NSCalibratedRGBColorSpace] getRed:&r green:&g blue:&b alpha:NULL];
- *red = (int)(255 * r);
- *green = (int)(255 * g);
- *blue = (int)(255 * b);
-
- return 1;
- }
- NSFont *NSRequestFont(NSFont *font){
- NSFontPanel *panel;
- font_delegate *dele;
- if (!font) font=[NSFont userFontOfSize:0];
- dele=[[font_delegate alloc] initWithFont:font];
- panel=[NSFontPanel sharedFontPanel];
- if (font) [panel setPanelFont:font isMultiple:NO];
- [panel setEnabled:YES];
- [panel setDelegate:dele];
- [NSApp runModalForWindow:panel];
- return [dele font];
- }
- NSFont *NSLoadFont(BBString *name,double size,int flags){
- NSString *text;
- NSFont *font;
- NSFontManager *manager;
- text=NSStringFromBBString(name);
- font=[NSFont fontWithName:text size:size];
- if (!font) font=[NSFont systemFontOfSize:size];
- if (flags){
- manager=[NSFontManager sharedFontManager];
- if (flags&FONT_BOLD) font=[manager convertFont:font toHaveTrait:NSBoldFontMask];
- if (flags&FONT_ITALIC) font=[manager convertFont:font toHaveTrait:NSItalicFontMask];
- }
- [font retain];
- return font;
- }
- NSFont *NSGetDefaultFont(){
- return [NSFont systemFontOfSize:[NSFont systemFontSize]];
- }
- BBString *NSFontName(NSFont *font){
- return bbStringFromNSString([font displayName]);
- }
- int NSFontStyle(NSFont *font){
- int intBBStyleFlags;
- int intCocoaFontTraits;
- NSFontManager *manager;
-
- manager = [NSFontManager sharedFontManager];
- intCocoaFontTraits = [manager traitsOfFont: font];
-
- intBBStyleFlags = 0;
- if (intCocoaFontTraits & NSBoldFontMask) intBBStyleFlags|=FONT_BOLD;
- if (intCocoaFontTraits & NSItalicFontMask) intBBStyleFlags|=FONT_ITALIC;
-
- return intBBStyleFlags;
- }
- double NSFontSize(NSFont *font){
- return (double)[font pointSize];
- }
- void* NSSuperview(NSView* handle){
- if(handle) return [handle superview];
- return 0;
- }
- // generic gadget commands
- void NSFreeGadget(nsgadget *gadget){
- nsgadget *group;
- NSWindow *parent;
- TextView *textview;
- FlippedView * flipped;
- if (gadget->textcolor){
- [gadget->textcolor release];
- gadget->textcolor = 0;
- }
- if (gadget->handle){
- switch (gadget->internalclass){
- case GADGET_WINDOW:
- if ([gadget->handle parentWindow]!=nil){
- [[gadget->handle parentWindow] removeChildWindow:(NSWindow*)gadget->handle];
- }
- [gadget->handle close];
- break;
- case GADGET_NODE:
- [gadget->handle remove];
- [gadget->handle autorelease];
- break;
- case GADGET_MENUITEM:
- [GlobalApp removeMenuItem:gadget->handle];
- [[gadget->handle menu] removeItem:gadget->handle];
- break;
- case GADGET_TEXTAREA:
- textview=(TextView*)gadget->handle;
- [gadget->view removeFromSuperview];
- [textview free];
- [textview autorelease];
- break;
- case GADGET_LABEL:
- switch (gadget->style&3) {
- case LABEL_SEPARATOR:
- flipped=(FlippedView*)gadget->view;
- [flipped removeFromSuperview];
- [gadget->handle removeFromSuperview];
- [flipped release];
- break;
- default:
- [gadget->view removeFromSuperview];
- break;
- }
- [gadget->handle autorelease];
- break;
- case GADGET_TABBER:
- flipped=(FlippedView*)gadget->view;
- [flipped removeFromSuperview];
- [gadget->handle removeFromSuperview];
- [flipped release];
- //Cocoa throws an exception if items exist when handle is autoreleased.
- NSClearItems(gadget);
- [gadget->handle autorelease];
- break;
- case GADGET_PANEL:
- [gadget->handle setColor:nil];
- [gadget->handle removeFromSuperview];
- [gadget->handle autorelease];
- break;
- default:
- [[gadget->view superview] setNeedsDisplayInRect:[gadget->view frame]];
- [gadget->view removeFromSuperview];
- [gadget->handle autorelease];
- break;
- }
- }
- gadget->handle=0;
- }
- void NSEnable(nsgadget *gadget,int state){
- switch (gadget->internalclass){
- case GADGET_WINDOW:
- case GADGET_SLIDER:
- case GADGET_TEXTFIELD:
- case GADGET_MENUITEM:
- case GADGET_BUTTON:
- case GADGET_LISTBOX:
- case GADGET_COMBOBOX:
- case GADGET_TREEVIEW:
- case GADGET_PANEL:
- case GADGET_CANVAS:
- [gadget->handle setEnabled:state];
- break;
- case GADGET_TEXTAREA:
- [gadget->handle setSelectable:state];
- if (!(gadget->style&TEXTAREA_READONLY)) [gadget->handle setEditable:state];
- break;
- }
- }
- void NSShow(nsgadget *gadget,int state){
- switch (gadget->internalclass){
- case GADGET_WINDOW:
- if (state==[gadget->handle isVisible]) return;
- if (state) {
- if((gadget->group!=&bbNullObject) && (gadget->group->internalclass==GADGET_WINDOW) &&
- ([gadget->handle parentWindow]==nil)) [gadget->group->handle addChildWindow: gadget->handle ordered:NSWindowAbove];
- [gadget->handle makeKeyAndOrderFront:NSApp];
- } else {
- if([gadget->handle parentWindow]!=nil) [[gadget->handle parentWindow] removeChildWindow:(NSWindow*)gadget->handle];
- [gadget->handle orderOut:NSApp];
- }
- break;
- case GADGET_TOOLBAR:
- [gadget->handle setVisible:state];
- break;
- default:
- [gadget->handle setHidden:!state];
- }
- }
- void NSCheck(nsgadget *gadget,int state){
- NSButton *button;
- switch (gadget->internalclass){
- case GADGET_MENUITEM:
- [gadget->handle setState:state];
- break;
- case GADGET_BUTTON:
- button=(NSButton *)gadget->handle;
- if(state==NSMixedState) [button setAllowsMixedState:YES]; else [button setAllowsMixedState:NO];
- [button setState:state];
- break;
- }
- }
- void NSPopupMenu(nsgadget *gadget,nsgadget *menugadget){
- NSView *view;
- NSWindow *window;
- NSMenuItem *menuitem;
- NSEvent *event;
- NSPoint loc;
-
- window=(NSWindow*)gadget->handle;
- view=gadget->view;
- menuitem=(NSMenuItem*)menugadget->handle;
- event=[NSEvent
- mouseEventWithType:NSRightMouseUp
- location:[window convertScreenToBase:[NSEvent mouseLocation]]
- modifierFlags:(NSEventModifierFlags)nil
- timestamp:0
- windowNumber:[window windowNumber]
- context:nil
- eventNumber:(NSInteger)nil
- clickCount:1
- pressure:0];
- [NSMenu popUpContextMenu:[menuitem submenu] withEvent:event forView:view];
- // [event release];
- }
- int NSState(nsgadget *gadget){
- NSWindow *window;
- TextView *textview;
- NSButton *button;
- NSView *view;
- Toolbar *toolbar;
- HTMLView *browser;
- NSMenuItem *menuItem;
- int state;
- state=0;
- switch (gadget->internalclass){
- case GADGET_TEXTAREA:
- textview=(TextView*)gadget->handle;
- if ([textview isHidden]) state|=STATE_HIDDEN;
- if ((!(gadget->style&TEXTAREA_READONLY)) && (![textview isEditable])) state|=STATE_DISABLED;
- break;
- case GADGET_HTMLVIEW:
- browser=(HTMLView*)gadget->handle;
- return [browser loaded];
- case GADGET_WINDOW:
- window=(NSWindow*)gadget->handle;
- if ([window isMiniaturized]) state|=STATE_MINIMIZED;
- if ([window isZoomed]) state|=STATE_MAXIMIZED;
- if (![window isVisible]) state|=STATE_HIDDEN;
- break;
- case GADGET_MENUITEM:
- menuItem=(NSMenuItem*)gadget->handle;
- if ([menuItem state]==NSOnState) state|=STATE_SELECTED;
- if (![menuItem isEnabled]) state|=STATE_DISABLED;
- break;
- case GADGET_BUTTON:
- button=(NSButton *)gadget->handle;
- switch (gadget->style&7){
- case BUTTON_RADIO: case BUTTON_CHECKBOX:
- if ([button state]==NSOnState) state|=STATE_SELECTED;
- if ([button state]==NSMixedState) state|=STATE_INDETERMINATE;
- }
- if ([button isHidden]) state|=STATE_HIDDEN;
- if (![button isEnabled]) state|=STATE_DISABLED;
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- if ([toolbar isVisible]==NO) state|=STATE_HIDDEN;
- break;
- case GADGET_PROGBAR:
- view=(NSView*)gadget->handle;
- if ([view isHidden]) state|=STATE_HIDDEN;
- break;
- default:
- view=(NSView*)gadget->handle;
- if ([view isHidden]) state|=STATE_HIDDEN;
- if (![view isEnabled]) state|=STATE_DISABLED;
- break;
- }
- return state;
- }
- void NSSetMinimumSize(nsgadget *gadget,int width,int height){
- NSWindow *window;
- NSRect rect;
- int style;
- window=(NSWindow*)gadget->handle;
- rect.origin.x=0;
- rect.origin.y=0;
- rect.size.width=width;
- rect.size.height=height;
- style=gadget->style;
- if (!(style&WINDOW_CLIENTCOORDS)){
- rect=[window contentRectForFrameRect:rect];
- rect.size.width-=rect.origin.x;
- rect.size.height-=rect.origin.y;
- }else{
- if (style&WINDOW_STATUS) rect.size.height+=STATUSBARHEIGHT;
- }
- [window setContentMinSize:rect.size];
- }
- void NSSetMaximumSize(nsgadget *gadget,int width,int height){
- NSWindow *window;
- NSRect rect;
- int style;
- window=(NSWindow*)gadget->handle;
- rect.origin.x=0;
- rect.origin.y=0;
- rect.size.width=width;
- rect.size.height=height;
- style=gadget->style;
- if (!(style&WINDOW_CLIENTCOORDS)){
- rect=[window contentRectForFrameRect:rect];
- rect.size.width-=rect.origin.x;
- rect.size.height-=rect.origin.y;
- }else{
- if (style&WINDOW_STATUS) rect.size.height+=STATUSBARHEIGHT;
- }
- [window setContentMaxSize:rect.size];
- }
- void NSSetStatus(nsgadget *gadget,BBString *data,int pos){
- NSString *text;
- WindowView *window;
- ToolView *toolview;
- text=NSStringFromBBString(data);
- if ((gadget->style&WINDOW_TOOL) == 0) {
- window=(WindowView*)gadget->handle;
- [window setStatus:text align:pos];
- } else {
- toolview =(ToolView*)gadget->handle;
- [toolview setStatus:text align:pos];
- }
- }
- int NSClientWidth(nsgadget *gadget){
- NSRect frame;
- if (gadget->internalclass==GADGET_DESKTOP){
- frame=[[NSScreen deepestScreen] visibleFrame];
- return frame.size.width;
- }
- if (!gadget->view) return gadget->w;
- frame=[gadget->view frame];
- return frame.size.width;
- }
- int NSClientHeight(nsgadget *gadget){
- NSRect frame;
- if (gadget->internalclass==GADGET_DESKTOP){
- frame=[[NSScreen deepestScreen] visibleFrame];
- return frame.size.height;
- }
- if (!gadget->view) return gadget->h;
- frame=[gadget->view frame];
- return frame.size.height;
- }
- void NSRedraw(nsgadget *gadget){
- NSView *view;
-
- view=(NSView*)gadget->handle;
- [view display]; //Can just call the display method
- }
- void NSActivate(nsgadget *gadget,int code){
- NSWindow *window;
- NSView *view;
- NSRect frame;
- NodeItem *node;
- TreeView *treeview;
- HTMLView *browser;
- TextView *textview;
- NSTextField *textfield;
- NSText *text;
- NSComboBox *combo;
- // generic commands
- switch (code){
- case ACTIVATE_REDRAW:
- NSRedraw(gadget);
- return;
- }
-
- // gadget specific
- switch (gadget->internalclass){
- case GADGET_WINDOW:
- window=(NSWindow*)gadget->handle;
- switch (code){
- case ACTIVATE_FOCUS:
- if([window isVisible]) [window makeKeyAndOrderFront:NSApp];
- break;
- case ACTIVATE_CUT:
- break;
- case ACTIVATE_COPY:
- break;
- case ACTIVATE_PASTE:
- break;
- case ACTIVATE_MINIMIZE:
- NSShow(gadget,true);
- [window miniaturize:window];
- break;
- case ACTIVATE_MAXIMIZE:
- if ([window isMiniaturized]) [window deminiaturize:window];
- if ([window isZoomed]==NO) [window performZoom:window];
- NSShow(gadget,true);
- break;
- case ACTIVATE_RESTORE:
- if ([window isMiniaturized]) [window deminiaturize:window];
- if ([window isZoomed]) [window performZoom:window];
- NSShow(gadget,true);
- break;
- }
- break;
- case GADGET_TEXTFIELD:
- textfield=(NSTextField*)gadget->handle;
- window=[textfield window];
- if (window)
- switch (code){
- case ACTIVATE_FOCUS:
- [window makeFirstResponder:textfield];
- break;
- case ACTIVATE_CUT:
- text=[[textfield window] fieldEditor:YES forObject:textfield];
- [text cut:textfield];
- break;
- case ACTIVATE_COPY:
- text=[[textfield window] fieldEditor:YES forObject:textfield];
- [text copy:textfield];
- break;
- case ACTIVATE_PASTE:
- text=[[textfield window] fieldEditor:YES forObject:textfield];
- [text paste:textfield];
- break;
- }
- break;
- case GADGET_TEXTAREA:
- textview=(TextView*)gadget->handle;
- switch (code){
- case ACTIVATE_FOCUS:
- window=[textview window];
- if (window) [window makeFirstResponder:textview];
- break;
- case ACTIVATE_CUT:
- [textview cut:textview];
- break;
- case ACTIVATE_COPY:
- [textview copy:textview];
- break;
- case ACTIVATE_PASTE:
- [textview pasteAsPlainText:textview];//paste:textview];
- break;
- case ACTIVATE_PRINT:
- [textview print:textview];
- break;
- }
- break;
- case GADGET_NODE:
- node=(NodeItem*)gadget->handle;
- treeview=[node getOwner];
- switch (code){
- case ACTIVATE_SELECT:
- [treeview selectNode:node];
- break;
- case ACTIVATE_EXPAND:
- [treeview expandNode:node];
- break;
- case ACTIVATE_COLLAPSE:
- [treeview collapseNode:node];
- break;
- }
- break;
-
- case GADGET_COMBOBOX:
- switch (code){
- case ACTIVATE_FOCUS:
- combo=(NSComboBox*)gadget->handle;
- [combo selectText:nil];
- break;
- }
- break;
- case GADGET_HTMLVIEW:
- browser=(HTMLView*)gadget->handle;
- switch(code){
- case ACTIVATE_COPY:
- [browser copy:browser];
- break;
- case ACTIVATE_BACK:
- [browser goBack:browser];
- break;
- case ACTIVATE_FORWARD:
- [browser goForward:browser];
- break;
- case ACTIVATE_PRINT:
- view = [[[browser mainFrame] frameView] documentView];
- if (view != nil) [view print:view];
- break;
- }
-
- default:
- switch (code){
- case ACTIVATE_FOCUS:
- window=[gadget->handle window];
- if (window) [window makeFirstResponder:gadget->handle];
- break;
- }
- }
- }
- void NSRethink(nsgadget *gadget){
- NSView *view;
- NSRect rect,vis;
- TextView *textview;
- TabView *tabber;
- NSButton *button;
- NSControl *combobox;
- int shouldhide;
-
- view=(NSView*)gadget->handle;
- rect=NSMakeRect(gadget->x,gadget->y,gadget->w,gadget->h);
-
- shouldhide = FALSE;
-
- switch(gadget->internalclass){
- case GADGET_WINDOW:
- vis=[[NSScreen deepestScreen] visibleFrame];
- rect.origin.x+=vis.origin.x;
- rect.origin.y=vis.origin.y+vis.size.height-rect.origin.y-rect.size.height;
- if ((gadget->style&WINDOW_CLIENTCOORDS)!=0){
- if (gadget->style&WINDOW_STATUS) {
- rect.origin.y-=STATUSBARHEIGHT;
- rect.size.height+=STATUSBARHEIGHT;
- }
- rect = [(NSWindow*)view frameRectForContentRect:rect];
- }
-
- if(![view isVisible]) shouldhide = TRUE;
- [view setFrame:rect display:YES];
- if(shouldhide) [view orderOut:view];
- return;
- case GADGET_NODE:
- case GADGET_MENUITEM:
- case GADGET_TOOLBAR:
- return;
- case GADGET_TEXTAREA:
- textview=(TextView*)view;
- [textview setScrollFrame:rect];
- return;
- case GADGET_COMBOBOX:
- if (rect.size.height > 26) rect.size.height = 26;
- break;
- case GADGET_BUTTON:
- button=(NSButton*)view;
- // Push Button Size Hack
- if ((gadget->style&7)==0){
- if (gadget->h > 30) {
- [button setBezelStyle:NSRegularSquareBezelStyle];
- } else {
- if (gadget->h < 24) {
- [button setBezelStyle:NSShadowlessSquareBezelStyle];
- } else {
- [button setBezelStyle:NSRoundedBezelStyle];
- }
- }
- }
- break;
- case GADGET_SLIDER:
- switch (gadget->style&12){
- case SLIDER_SCROLLBAR:
- if (gadget->style & SLIDER_HORIZONTAL)
- rect.size.height = [NSScroller scrollerWidth];
- else
- rect.size.width = [NSScroller scrollerWidth];
- break;
- }
- }
- [[view superview] setNeedsDisplayInRect:[view frame]];
- [view setFrame:rect];
- [view setNeedsDisplay:YES];
- }
- void NSRemoveColor(nsgadget *gadget){
- switch (gadget->internalclass){
- case GADGET_BUTTON:
- if ([[gadget->handle cell] respondsToSelector:@selector(setDrawsBackground)]){
- [[gadget->handle cell] setDrawsBackground:false];
- }
- break;
- case GADGET_WINDOW:
- [gadget->handle setBackgroundColor:nil];
- [gadget->handle display];
- break;
- case GADGET_LABEL:
- if((gadget->style&3)==LABEL_SEPARATOR) break;
- case GADGET_COMBOBOX:
- case GADGET_TEXTFIELD:
- [gadget->handle setDrawsBackground:false];
- break;
- case GADGET_LISTBOX:
- case GADGET_TREEVIEW:
- case GADGET_PANEL:
- case GADGET_TEXTAREA:
- [gadget->handle setColor:nil];
- break;
- }
- }
- void NSSetColor(nsgadget *gadget,int r,int g,int b){
- NSColor *color;
- color=[NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0];
-
- switch (gadget->internalclass){
- case GADGET_BUTTON:
- if ([[gadget->handle cell] respondsToSelector:@selector(setBackgroundColor)]) [[gadget->handle cell] setBackgroundColor:color];
- break;
- case GADGET_COMBOBOX:
- case GADGET_WINDOW:
- [gadget->handle setBackgroundColor:color];
- [gadget->handle display];
- break;
- case GADGET_LABEL:
- if((gadget->style&3)==LABEL_SEPARATOR) break;
- [gadget->handle setDrawsBackground:YES];
- case GADGET_TEXTFIELD:
- [gadget->handle setBackgroundColor:color];
- break;
- case GADGET_LISTBOX:
- case GADGET_TREEVIEW:
- case GADGET_PANEL:
- case GADGET_TEXTAREA:
- [gadget->handle setColor:color];
- break;
- }
- }
- void NSSetAlpha(nsgadget *gadget,float alpha){
- NSWindow *window;
- PanelView *panel;
-
- switch (gadget->internalclass){
- case GADGET_WINDOW:
- window=(NSWindow*)gadget->handle;
- [window setAlphaValue:alpha];
- break;
- case GADGET_PANEL:
- panel=(PanelView*)gadget->handle;
- [panel setAlpha:alpha];
- break;
- }
- }
- BBString *NSGetUserName(){
- return bbStringFromNSString(CSCopyUserName(true));
- }
- BBString *NSGetComputerName(){
- return bbStringFromNSString(CSCopyMachineName());
- }
- BBString *NSRun(nsgadget *gadget,BBString *text){
- HTMLView *htmlview;
- NSString *script;
- BBString *result;
- result=&bbEmptyString;
- switch (gadget->internalclass){
- case GADGET_HTMLVIEW:
- htmlview=(HTMLView*)gadget->handle;
- script=NSStringFromBBString(text);
- script=[htmlview stringByEvaluatingJavaScriptFromString:script];
- result=bbStringFromNSString(script);
- break;
- }
- return result;
- }
- void NSSetText(nsgadget *gadget,BBString *data){
- NSString *text;
- NSMutableDictionary *textAttributes;
- NSMutableParagraphStyle *parastyle;
- NSAttributedString *attribtext;
- NSObject *nsobject;
-
- attribtext = nil;
-
- if(data == nil) data = &bbEmptyString;
-
- text = NSStringFromBBString(data);
-
- nsobject = (NSObject*)gadget->handle;
-
- //printf( "data->length: %d\n", data->length );fflush(stdout);
-
- switch (gadget->internalclass){
- case GADGET_TEXTAREA:
- [nsobject setText:text];
- break;
- case GADGET_HTMLVIEW:
- [nsobject setAddress:text];
- break;
- case GADGET_LABEL: /* BaH */
- switch (gadget->style&3) {
- case LABEL_SEPARATOR:
- return;
- default:
- [nsobject setStringValue:text];
- return;
- }
- break;
- case GADGET_BUTTON:
-
- //if ([nsobject respondsToSelector:@selector(setAttributedTitle)] /*&& [nsobject respondsToSelector:@selector(font)]*/){
-
- // Create attribute dictionary (autorelease'd)
- textAttributes = [NSMutableDictionary dictionary];
-
- // Font
- [textAttributes setObject: [nsobject font] forKey:NSFontAttributeName];
-
- // Paragraph style
- parastyle = [[NSMutableParagraphStyle alloc] init];
- [parastyle setParagraphStyle:[NSParagraphStyle defaultParagraphStyle]];
-
- if(gadget->internalclass == GADGET_BUTTON){
- if(((gadget->style & BUTTON_PUSH) == BUTTON_PUSH) ||
- (((gadget->style & 7) != BUTTON_RADIO) &&
- ((gadget->style & 7) != BUTTON_CHECKBOX)))
- [parastyle setAlignment:NSCenterTextAlignment];
- }
-
- [textAttributes setObject: parastyle forKey:NSParagraphStyleAttributeName];
- [parastyle release];
-
- // Text color
- if(gadget->textcolor) [textAttributes setObject: gadget->textcolor forKey: NSForegroundColorAttributeName];
-
- // Underline / strikethrough
- [textAttributes setObject: [NSNumber numberWithInt:0] forKey: NSUnderlineStyleAttributeName];
- [textAttributes setObject: [NSNumber numberWithInt:0] forKey: NSStrikethroughStyleAttributeName];
-
- if ((gadget->intFontStyle&FONT_UNDERLINE)!=0) [textAttributes setObject: [NSNumber numberWithInt:(NSUnderlineStyleSingle|NSUnderlinePatternSolid)] forKey: NSUnderlineStyleAttributeName];
- if ((gadget->intFontStyle&FONT_STRIKETHROUGH)!=0) [textAttributes setObject: [NSNumber numberWithInt:(NSUnderlineStyleSingle|NSUnderlinePatternSolid)] forKey: NSStrikethroughStyleAttributeName];
-
- // Create attibuted text
- attribtext = [[NSAttributedString alloc] initWithString: text attributes: textAttributes];
-
- [nsobject setAttributedTitle:attribtext];
- break;
- //}
- case GADGET_MENUITEM:
- [nsobject setTitle:text];
- // Required otherwise root window menus aren't updated.
- [[nsobject submenu] setTitle:text];
- break;
- case GADGET_PANEL:
- case GADGET_NODE:
- case GADGET_WINDOW:
- [nsobject setTitle:text];
- break;
- case GADGET_COMBOBOX:
- if(!(gadget->style & COMBOBOX_EDITABLE)) break;
- case GADGET_TEXTFIELD:
- [nsobject setStringValue:text];
- break;
- }
- }
- BBString *NSGetText(nsgadget *gadget){
-
- NSObject *nsobject;
- BBString *result;
- result=&bbEmptyString;
- nsobject=(NSObject*)gadget->handle;
-
- switch (gadget->internalclass){
- case GADGET_TEXTAREA:
- result=bbStringFromNSString([[nsobject storage] string]);
- break;
- case GADGET_TEXTFIELD:
- case GADGET_COMBOBOX:
- result=bbStringFromNSString([nsobject stringValue]);
- break;
- case GADGET_HTMLVIEW:
- result=bbStringFromNSString([nsobject address]);
- break;
- case GADGET_NODE:
- result=bbStringFromNSString([nsobject value]);
- break;
- case GADGET_LABEL: /* BaH */
- switch (gadget->style&3) {
- case 0:
- case LABEL_FRAME:
- case LABEL_SUNKENFRAME:
- result=bbStringFromNSString([nsobject stringValue]);
- }
- break;
- case GADGET_PANEL:
- case GADGET_WINDOW:
- case GADGET_BUTTON:
- case GADGET_MENUITEM:
- result=bbStringFromNSString([nsobject title]);
- break;
- }
- return result;
- }
- int NSCharWidth(NSFont *font,int charcode){
- NSSize size=[font advancementForGlyph:charcode];
- return (int)size.width;
- }
- void NSSetFont(nsgadget *gadget,NSFont *font){
- NSView *view;
-
- view = (NSView*)gadget->handle;
-
- switch (gadget->internalclass){
- case GADGET_LABEL:
- if ((gadget->style&3)==LABEL_SEPARATOR) break;
- case GADGET_BUTTON:
- [view setFont:font];
- NSSetText(gadget, NSGetText(gadget)); //Apply underline/strikethough formatting as attributed text in NSSetText().
- break;
- case GADGET_LISTBOX:
- case GADGET_TREEVIEW:
- case GADGET_COMBOBOX:
- case GADGET_TEXTAREA:
- case GADGET_TEXTFIELD:
- case GADGET_TABBER:
- [view setFont:font];
- break;
-
- }
- }
- BBString * NSGetTooltip(nsgadget *gadget){
- BBString *result;
- NSView *view;
-
- result=&bbEmptyString;
- view=(NSView*)gadget->handle;
-
- if(view) result=bbStringFromNSString([view toolTip]);
-
- return result;
- }
- int NSSetTooltip(nsgadget *gadget,BBString *data){
-
- NSString *text;
- NSView *view;
-
- view =(NSView*)gadget->handle;
- text=NSStringFromBBString(data);
-
- if(view){
- [view setToolTip:text];
- return 1;
- }
-
- return 0;
- }
- // gadgetitem commands
- void NSClearItems(nsgadget *gadget)
- {
- ListView *listbox;
- NSControl *combo;
- NSTabView *tabber;
- Toolbar *toolbar;
- NSToolbarItem *item;
- NSArray *items;
- int i,n;
-
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- [listbox clear];
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- [combo removeAllItems];
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- items=[tabber tabViewItems];
- n=[tabber numberOfTabViewItems];
- for (i=0;i<n;i++) [tabber removeTabViewItem:[tabber tabViewItemAtIndex:0]];
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- items=[toolbar items];
- n=[items count];
- for (i=0;i<n;i++) [toolbar removeItemAtIndex:0];
- break;
- }
- }
- void NSAddItem(nsgadget *gadget,int index,BBString *data,BBString *tip,NSImage *image,BBObject *extra){
- NSString *text,*tiptext;
- NSControl *combo;
- NSTabView *tabber;
- TabViewItem *tabitem;
- ListView *listbox;
- Toolbar *toolbar;
- NSToolbarItem *item;
- text=NSStringFromBBString(data);
- tiptext=NSStringFromBBString(tip);
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- [listbox addItem:text atIndex:index withImage:image withTip:tiptext withExtra:extra];
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- [combo insertItemWithObjectValue:text atIndex:index];
- // [[combo itemAtIndex:index] setImage:image];
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- tabitem=[[TabViewItem alloc] initWithIdentifier:text];
- [tabitem setLabel:text];
- [tabitem setImage:image];
- [tabber insertTabViewItem:tabitem atIndex:index];
- [tabitem release];
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- if (image==0){
- int v;
- Gestalt( 'sysv',&v );
- if( v>=0x1070 ){
- [toolbar insertItemWithItemIdentifier:NSToolbarSpaceItemIdentifier atIndex:index];
- }else{
- [toolbar insertItemWithItemIdentifier:NSToolbarSeparatorItemIdentifier atIndex:index];
- }
- }
- else{
- item=[[NSToolbarItem alloc] initWithItemIdentifier:text];
- [item setImage:image];
- // [item setLabel:text];
- [item setAction:@selector(iconSelect:)];
- [item setTarget:GlobalApp];
- [item setToolTip:tiptext];
- [item setTag:0];
- [GlobalApp addToolbarItem:item];
- [toolbar addToolbarItem:item];
- [toolbar insertItemWithItemIdentifier:text atIndex:index];
- }
- break;
- }
- }
- NSToolbarItem *FindToolbarItem(NSToolbar *toolbar,int index){
- return (NSToolbarItem*)[[toolbar items] objectAtIndex:index];
- }
- void NSSetItem(nsgadget *gadget,int index,BBString *data,BBString *tip,NSImage *image,BBObject *extra){
- NSString *text,*tiptext;
- NSControl *combo;
- NSTabView *tabber;
- TabViewItem *tabitem;
- ListView *listbox;
- Toolbar *toolbar;
- NSToolbarItem *item;
- text=NSStringFromBBString(data);
- tiptext=NSStringFromBBString(tip);
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- [listbox setItem:text atIndex:index withImage:image withTip:tiptext withExtra:extra];
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- [combo removeItemAtIndex:index];
- [combo insertItemWithObjectValue:text atIndex:index];
- // [[combo itemAtIndex:index] setImage:image];
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- tabitem=(TabViewItem*)[tabber tabViewItemAtIndex:index];
- [tabitem setLabel:text];
- [tabitem setImage:image];
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- item=FindToolbarItem(toolbar,index);
- if (item) {
- // [item setLabel:text];
- [item setImage:image];
- [item setToolTip:tiptext];
- [item setTag:0];
- }
- break;
- }
- }
- void NSRemoveItem(nsgadget *gadget,int index){
- ListView *listbox;
- NSControl *combo;
- NSTabView *tabber;
- TabViewItem *tabitem;
- Toolbar *toolbar;
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- [listbox removeItemAtIndex:index];
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- [combo removeItemAtIndex:index];
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- tabitem=(TabViewItem*)[tabber tabViewItemAtIndex:index];
- [tabber removeTabViewItem:tabitem];
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- [toolbar removeItemAtIndex:(int)index];
- break;
- }
- }
- void NSSelectItem(nsgadget *gadget,int index,int state){
- NSControl *combo;
- NSTabView *tabber;
- ListView *listbox;
- Toolbar *toolbar;
- NSToolbarItem *item;
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- if(state) [listbox selectItem:index]; else [listbox deselectItem:index];
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- [combo setDelegate:nil];
- [combo selectItemAtIndex:index];
- [combo setObjectValue:[combo objectValueOfSelectedItem]];
- [combo setDelegate:GlobalApp];
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- [tabber selectTabViewItemAtIndex:index];
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- item=FindToolbarItem(toolbar,index);
- BOOL enable=(state&STATE_DISABLED)?false:true;
- [item setEnabled:enable];
- int pressed=(state&STATE_SELECTED)?1:0;
- [item setTag:pressed];
- break;
- }
- }
- int NSSelectedItem(nsgadget *gadget,int index){
- NSComboBox *combo;
- NSTabView *tabber;
- ListView *listbox;
- Toolbar *toolbar;
- NSToolbarItem *item;
- int state;
- state=0;
- switch (gadget->internalclass){
- case GADGET_LISTBOX:
- listbox=(ListView*)gadget->handle;
- if ([[listbox table] selectedRow]==index) state|=STATE_SELECTED;
- break;
- case GADGET_COMBOBOX:
- combo=(NSControl*)gadget->handle;
- if ([combo indexOfSelectedItem]==index) state|=STATE_SELECTED;
- break;
- case GADGET_TABBER:
- tabber=(NSTabView*)gadget->handle;
- if ([tabber indexOfTabViewItem:[tabber selectedTabViewItem]]==index) state|=STATE_SELECTED;
- break;
- case GADGET_TOOLBAR:
- toolbar=(Toolbar*)gadget->handle;
- item=FindToolbarItem(toolbar,index);
- if (![item isEnabled]) state|=STATE_DISABLED;
- if ([item tag]!=0) state|=STATE_SELECTED;
- break;
- }
- return state;
- }
- // treeview commands
- int NSCountKids(nsgadget *gadget){
- TreeView *treeview;
- NodeItem *node;
- switch (gadget->internalclass){
- case GADGET_TREEVIEW:
- treeview=(TreeView*)gadget->handle;
- return [treeview count];
- case GADGET_NODE:
- node=(NodeItem*)gadget->handle;
- return [node count];
- }
- return 0;
- }
- id NSSelectedNode(nsgadget *gadget){
- TreeView *treeview;
- switch (gadget->internalclass){
- case GADGET_TREEVIEW:
- treeview=(TreeView*)gadget->handle;
- return [treeview selectedNode];
- }
- return 0;
- }
- // textarea commands
- int LinePos(NSString *text,int pos){
- int line,i;
- line=0;
- for (i=0;i<pos;i++) {if ([text characterAtIndex:i]=='\n' ) line++;}
- return line;
- }
- int CharPos(NSString *text,int line){
- int pos,n;
- pos=0;
- n=[text length];
- while (pos<n && line>0){
- if ([text characterAtIndex:pos]=='\n') line--;
- pos++;
- }
- return pos;
- }
- NSRange GetRange(NSTextStorage *storage,int pos,int count,int units){
-
- NSString *text;
- unsigned int max;
-
- if (units==TEXTAREA_LINES){
- text=[storage string];
- if (count==TEXTAREA_ALL)
- count=[storage length];
- else
- count=CharPos(text,pos+count);
- pos=CharPos(text,pos);
- max = [storage length]-pos;
- count-=pos;
- }
- else{
- max = [storage length]-pos;
- if (count==TEXTAREA_ALL) count=max;
- }
-
- if (count > max) count = max;
- if (count<0) count=0;
-
- //NSLog(@"GetRange() pos: %d, count: %d, length: %d\n", pos, count, [storage length]);
-
- return NSMakeRange(pos,count);
-
- }
- void NSReplaceText(nsgadget *gadget,int pos,int count,BBString *data,int units){
- NSString *text;
- TextView *textarea;
- NSRange range,snap;
- NSTextStorage *storage;
- unsigned int size;
-
- text=NSStringFromBBString(data);
- textarea=(TextView*)gadget->handle;
-
- if(([[textarea string] length] == 0) || ((pos == 0) && (count == TEXTAREA_ALL))){
-
- [textarea setText:text];
-
- } else {
-
- snap=[textarea selectedRange];
- range=GetRange([textarea storage],pos,count,units);
- storage=[textarea storage];
- [storage replaceCharactersInRange:range withString:text];
- size=[storage length];
- if (snap.location>size) snap.location=size;
- if (snap.location+snap.length>size) snap.length=size-snap.location;
- [textarea setSelectedRange:snap];
-
- }
-
- }
- void NSAddText(nsgadget *gadget,BBString *data){
- NSString *text;
- TextView *textarea;
- NSRange range;
- text=NSStringFromBBString(data);
- textarea=(TextView*)gadget->handle;
- [textarea addText:text];
- range=GetRange([textarea textStorage],[[textarea string] length],0,0);
- [textarea setSelectedRange:range];
- [textarea scrollRangeToVisible:range];
- }
- BBString *NSAreaText(nsgadget *gadget,int pos,int length,int units){
- TextView *textarea;
- NSRange range;
- NSAttributedString *astring;
- BBString *bstring;
- textarea=(TextView*)gadget->handle;
- range=GetRange([textarea storage],pos,length,units);
- astring=[[textarea storage] attributedSubstringFromRange:range];
- bstring=bbStringFromNSString([astring string]);
- return bstring;
- }
- int NSAreaLen(nsgadget *gadget,int units){
- TextView *textarea;
- NSTextStorage *storage;
- unsigned ulen;
- textarea=(TextView*)gadget->handle;
- storage=[textarea storage];
- ulen=[storage length];
- if (units==TEXTAREA_LINES) ulen=LinePos([storage string],ulen)+1;
- return ulen;
- }
- void NSSetSelection(nsgadget *gadget,int pos,int length,int units){
- TextView *textarea;
- NSRange range;
- textarea=(TextView*)gadget->handle;
- range=GetRange([textarea textStorage],pos,length,units);
- [textarea setSelectedRange:range];
- if( !textarea->lockedNest ) [textarea scrollRangeToVisible:range];
- }
- void NSLockText(nsgadget *gadget){
- TextView *textarea;
- textarea=(TextView*)gadget->handle;
-
- if( !textarea->lockedNest ){
- textarea->lockedRange=[textarea rangeForUserTextChange];
- [textarea->storage beginEditing];
- }
- ++textarea->lockedNest;
- }
- void NSUnlockText(nsgadget *gadget){
- TextView *textarea;
-
- textarea=(TextView*)gadget->handle;
-
- --textarea->lockedNest;
- if( !textarea->lockedNest ){
- NSRange range=textarea->lockedRange;
- [textarea->storage endEditing];
- if( range.location+range.length>[textarea->storage length] ) range=NSMakeRange( 0,0 );
- [textarea setSelectedRange:range];
- }
- }
- void NSSetTabs(nsgadget *gadget,int tabwidth){
- TextView *textarea;
- textarea=(TextView*)gadget->handle;
- [textarea setTabs:tabwidth];
- }
- void NSSetMargins(nsgadget *gadget,int leftmargin){
- TextView *textarea;
- textarea=(TextView*)gadget->handle;
- [textarea setMargins:leftmargin];
- }
- int NSCharAt(nsgadget *gadget,int line){
- TextView *textarea;
- NSString *text;
- int n,i;
- textarea=(TextView*)gadget->handle;
- text=[[textarea storage] string];
- n=[text length];i=0;
- while (line){
- if (i==n) break;
- if ([text characterAtIndex:i]=='\n' ) line--;
- i++;
- }
- return i;
- }
- int NSLineAt(nsgadget *gadget,int pos){
- TextView *textarea;
- textarea=(TextView*)gadget->handle;
- return LinePos([[textarea storage] string],pos);
- }
- int NSCharX(nsgadget *gadget,int pos){
- unsigned int rectCount;
- NSRectArray rectArray;
- TextView *textarea = (TextView*)gadget->handle;
- NSRange range = GetRange([textarea textStorage],pos,0,TEXTAREA_CHARS);
- rectArray = [[textarea layoutManager] rectArrayForCharacterRange:range withinSelectedCharacterRange:range inTextContainer: [textarea textContainer] rectCount:&rectCount];
- if(rectCount > 0) return (int)(((NSRect)rectArray[0]).origin.x-([textarea visibleRect].origin.x-[textarea textContainerOrigin].x));
- }
- int NSCharY(nsgadget *gadget,int pos){
- unsigned int rectCount;
- NSRectArray rectArray;
- TextView *textarea = (TextView*)gadget->handle;
- NSRange range = GetRange([textarea textStorage],pos,0,TEXTAREA_CHARS);
- rectArray = [[textarea layoutManager] rectArrayForCharacterRange:range withinSelectedCharacterRange:range inTextContainer: [textarea textContainer] rectCount:&rectCount];
- if(rectCount > 0) return (int)(((NSRect)rectArray[0]).origin.y-([textarea visibleRect].origin.y-[textarea textContainerOrigin].y));
- }
- int NSGetCursorPos(nsgadget *gadget,int units){
- TextView *textarea;
- NSRange range;
- textarea=(TextView*)gadget->handle;
- range=[textarea rangeForUserTextChange];
- if (range.location == NSNotFound) return 0; //KORIOLIS (avoids read-only text-area crash)
- if (units==TEXTAREA_LINES) return NSLineAt(gadget,range.location);
- return range.location;
- }
- int NSGetSelectionlength(nsgadget *gadget,int units){
- TextView *textarea;
- NSRange range;
- textarea=(TextView*)gadget->handle;
- range=[textarea rangeForUserTextChange];
- if (range.location == NSNotFound) return 0; //KORIOLIS (avoids read-only text-area crash)
- if (range.length == 0) return 0;
- if (units == TEXTAREA_LINES){
- int l0=NSLineAt(gadget,range.location);
- int l1=NSLineAt(gadget,range.location+range.length-1);
- return (l1-l0+1);
- }
- return range.length;
- }
- void NSSetTextColor(nsgadget *gadget,int r,int g,int b){
-
- if(gadget->textcolor) [gadget->textcolor release];
- gadget->textcolor = [[NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0] retain];
-
- switch (gadget->internalclass){
- case GADGET_LABEL:
- switch (gadget->style&3) {
- case LABEL_SEPARATOR:
- return;
- }
- case GADGET_TEXTFIELD:
- case GADGET_LISTBOX:
- case GADGET_TREEVIEW:
- case GADGET_TEXTAREA:
- [gadget->handle setTextColor:gadget->textcolor];
- break;
- default:
- NSSetText(gadget, NSGetText(gadget)); //Attempt to reset text with NSAttributedString
- break;
- }
- }
- void NSSetStyle(nsgadget *gadget,int r,int g,int b,int flags,int pos,int length,int units) {
- TextView *textarea;
- NSRange _range;
- NSColor *color;
- int traits = 0;
- textarea=(TextView*)gadget->handle;
- _range=GetRange([textarea storage],pos,length,units);
- color=[NSColor colorWithDeviceRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:1.0];
-
- [[textarea storage] removeAttribute:NSLinkAttributeName range:_range];
- [[textarea storage] addAttribute:NSForegroundColorAttributeName value:color range:_range];
- [[textarea storage] addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInt:(flags & 4)?NSUnderlineStyleSingle:NSUnderlineStyleNone] range:_range];
- [[textarea storage] addAttribute:NSStrikethroughStyleAttributeName value:[NSNumber numberWithInt:(flags & 8)?NSUnderlineStyleSingle:NSUnderlineStyleNone] range:_range];
- traits |= (flags & 1)?NSBoldFontMask:NSUnboldFontMask;
- traits |= (flags & 2)?NSItalicFontMask:NSUnitalicFontMask;
- [[textarea storage] applyFontTraits: traits range:_range];
- }
- void NSSetValue(nsgadget *gadget,float value){
- NSProgressIndicator *progbar;
- NSDate *date;
- NSValue *info;
- NSRunLoop *runloop;
-
- switch (gadget->internalclass){
- case GADGET_PROGBAR:
- progbar=(NSProgressIndicator*)gadget->handle;
- [progbar setDoubleValue:value];
- break;
- }
- }
- // slider / scrollbar
- void NSSetSlider(nsgadget *gadget,double value,double small,double big){
- NSScroller *scroller;
- NSSlider *slider;
- NSStepper *stepper;
- NSRect frame;
- float size;
-
- switch (gadget->style&12){
- case SLIDER_SCROLLBAR:
- scroller=(NSScroller*)gadget->handle;
- if(value > (big-small))
- value = 1.0L;
- else if(big-small)
- value/=(big-small);
- else
- value = 0.0L;
- [scroller setKnobProportion:(small/big)];
- [scroller setDoubleValue:value];
- break;
- case SLIDER_TRACKBAR:
- slider=(NSSlider*)gadget->handle;
- [slider setMinValue:small];
- [slider setMaxValue:big];
- [slider setDoubleValue:value];
- break;
- case SLIDER_STEPPER:
- stepper=(NSStepper*)gadget->handle;
- [stepper setMinValue:small];
- [stepper setMaxValue:big];
- [stepper setDoubleValue:value];
- break;
- }
- }
- double NSGetSlider(nsgadget *gadget){
- NSControl *control;
- control = (NSControl*)gadget->handle;
- return [control doubleValue];
- }
- NSCursor* NSCursorCreateStock(short sIndex)
- {
- // Adapted from wxWidgets - if you believe this contravenes wxWidget's licensing
- // agreements, please let the BRL team know and it will be removed.
-
- int i;
- ArrayCursor* tmpCursor = &arrCursors[sIndex];
- NSImage *tmpImage = [[NSImage alloc] initWithSize:NSMakeSize(16.0,16.0)];
-
- NSBitmapImageRep *tmpRep = [[NSBitmapImageRep alloc]
- initWithBitmapDataPlanes: NULL
- pixelsWide: 16
- pixelsHigh: 16
- bitsPerSample: 1
- samplesPerPixel: 2
- hasAlpha: YES
- isPlanar: YES
- colorSpaceName: NSCalibratedWhiteColorSpace
- bytesPerRow: 2
- bitsPerPixel: 1];
-
- unsigned char *planes[5];
- [tmpRep getBitmapDataPlanes:planes];
-
- for(i=0; i<16; ++i)
- {
- planes[0][2*i ] = (~tmpCursor->bits[i] & tmpCursor->mask[i]) >> 8 & 0xff;
- planes[1][2*i ] = tmpCursor->mask[i] >> 8 & 0xff;
- planes[0][2*i+1] = (~tmpCursor->bits[i] & tmpCursor->mask[i]) & 0xff;
- planes[1][2*i+1] = tmpCursor->mask[i] & 0xff;
- }
-
- [tmpImage addRepresentation:tmpRep];
-
- NSCursor* tmpNSCursor = [[NSCursor alloc] initWithImage:tmpImage hotSpot:NSMakePoint(tmpCursor->hitpoint[1], tmpCursor->hitpoint[0])];
-
- [tmpRep release];[tmpImage release];
-
- return tmpNSCursor;
- }
- void NSSetPointer(int shape){
- NSCursor *cursor;
- cursor=[NSCursor arrowCursor];
-
- switch (shape){
- // case POINTER_DEFAULT:cursor=[NSCursor ];break;
- case POINTER_ARROW:cursor=[NSCursor arrowCursor];break;
- case POINTER_IBEAM:cursor=[NSCursor IBeamCursor];break;
- // case POINTER_WAIT:cursor=[NSCursor ];break;
- case POINTER_CROSS:cursor=[NSCursor crosshairCursor];break;
- case POINTER_UPARROW:cursor=[NSCursor resizeUpCursor];break;
- case POINTER_SIZENWSE:cursor=NSCursorCreateStock(curNWSE);break;
- case POINTER_SIZENESW:cursor=NSCursorCreateStock(curNESW);break;
- case POINTER_SIZEWE:cursor=[NSCursor resizeLeftRightCursor];break;
- case POINTER_SIZENS:cursor=[NSCursor resizeUpDownCursor];break;
- case POINTER_SIZEALL:cursor=NSCursorCreateStock(curSizeAll);break;
- case POINTER_NO:cursor=NSCursorCreateStock(curNoEntry);break;
- case POINTER_HAND:cursor=[NSCursor pointingHandCursor];break;
- // case POINTER_APPSTARTING:cursor=[NSCursor ];break;
- case POINTER_HELP:cursor=NSCursorCreateStock(curHelp);break;
- }
- [cursor set];
- }
- typedef struct bbpixmap bbpixmap;
- struct bbpixmap{
- // BBObject
- void *class;
- // int refs;
- // pixmap
- unsigned char *pixels;
- int width,height,pitch,format,capacity;
- void *source;
- };
- #define PF_I8 1
- #define PF_A8 2
- #define PF_BGR888 3
- #define PF_RGB888 4
- #define PF_BGRA8888 5
- #define PF_RGBA8888 6
- #define PF_STDFORMAT PF_RGBA8888
- const static char BytesPerPixel[]={0,1,1,3,3,4,4};
- const static char BitsPerPixel[]={0,8,8,24,24,32,32};
- const static char RedBitsPerPixel[]={0,0,0,8,8,8,8};
- const static char GreenBitsPerPixel[]={0,0,0,8,8,8,8};
- const static char BlueBitsPerPixel[]={0,0,0,8,8,8,8};
- const static char AlphaBitsPerPixel[]={0,0,8,0,0,8,8};
- NSImage *NSPixmapImage(bbpixmap *pix){
- NSImage *image;
- NSBitmapImageRep *bitmap;
- int spp,bpp,i;
- int bytesperrow;
- BOOL alpha;
- unsigned char * data;
-
- alpha=AlphaBitsPerPixel[pix->format]?YES:NO;
- spp=BytesPerPixel[pix->format];
- bpp=BitsPerPixel[pix->format];
- bytesperrow=pix->width*spp;
-
- bitmap=[[[NSBitmapImageRep alloc]
- initWithBitmapDataPlanes:NULL
- pixelsWide:pix->width
- pixelsHigh:pix->height
- bitsPerSample:8
- samplesPerPixel:spp
- hasAlpha:alpha
- isPlanar:NO
- colorSpaceName:NSDeviceRGBColorSpace
- // bitmapFormat:NSAlphaNonpremultipliedBitmapFormat
- bytesPerRow:bytesperrow
- bitsPerPixel:bpp] autorelease];
-
- data = [bitmap bitmapData];
-
- for( i = 0; i < pix->height; i++) {
- memcpy( data + ( i * bytesperrow ), pix->pixels + ( i * pix->pitch ), bytesperrow );
- }
- image=[[NSImage alloc] initWithSize:NSMakeSize(pix->width, pix->height)];
- [image addRepresentation:bitmap];
- [image autorelease];
- return image;
- }
- void NSSetImage(nsgadget *gadget,NSImage *image,int flags){
- PanelView *panel;
- NSButton *button;
- NSMenuItem *menu;
-
- switch (gadget->internalclass){
- case GADGET_PANEL:
- panel=(PanelView*)gadget->handle;
- [panel setImage:image withFlags:flags];
- break;
- case GADGET_BUTTON:
- if ((flags & GADGETPIXMAP_ICON) && (gadget->style <= BUTTON_PUSH)){
- button=(NSButton *)gadget->handle;
- [button setImage:image];
- if (flags & GADGETPIXMAP_NOTEXT) {
- [button setImagePosition:NSImageOnly];
- } else {
- [button setImagePosition:NSImageLeft];
- }
- }
- break;
- case GADGET_MENUITEM:
- if (flags & GADGETPIXMAP_ICON){
- menu=(NSMenuItem*)gadget->handle;
- [menu setImage:image];
- }
- break;
- }
- }
- void NSSetIcon(nsgadget *gadget,NSImage *image){
- NodeItem *node;
-
- switch (gadget->internalclass){
- case GADGET_NODE:
- node=(NodeItem*)gadget->handle;
- [node setIcon:image];
- break;
- }
- }
- void NSSetNextView(nsgadget *gadget,nsgadget *nextgadget){
- NSView *view,*nextview;
- view=(NSView*)gadget->handle;
- nextview=(NSView*)nextgadget->handle;
- [view setNextKeyView:nextview];
- }
- static int keyToChar( int key ){
- if( key>=KEY_A && key<=KEY_Z ) return key-KEY_A+'a';
- if( key>=KEY_F1 && key<=KEY_F12 ) return key-KEY_F1+NSF1FunctionKey;
-
- switch( key ){
- case KEY_BACKSPACE:return 8;
- case KEY_TAB:return 9;
- case KEY_ESC:return 27;
- case KEY_SPACE:return 32;
- case KEY_PAGEUP:return NSPageUpFunctionKey;
- case KEY_PAGEDOWN:return NSPageDownFunctionKey;
- case KEY_END:return NSEndFunctionKey;
- case KEY_HOME:return NSHomeFunctionKey;
- case KEY_UP:return NSUpArrowFunctionKey;
- case KEY_DOWN:return NSDownArrowFunctionKey;
- case KEY_LEFT:return NSLeftArrowFunctionKey;
- case KEY_RIGHT:return NSRightArrowFunctionKey;
- case KEY_INSERT:return NSInsertFunctionKey;
- case KEY_DELETE:return NSDeleteFunctionKey;
- case KEY_TILDE:return '~';
- case KEY_MINUS:return '-';
- case KEY_EQUALS:return '=';
- case KEY_OPENBRACKET:return '[';
- case KEY_CLOSEBRACKET:return ']';
- case KEY_BACKSLASH:return '\\';
- case KEY_SEMICOLON:return ';';
- case KEY_QUOTES:return '\'';
- case KEY_COMMA:return ',';
- case KEY_PERIOD:return '.';
- case KEY_SLASH:return '/';
- }
- return 0;
- }
- void NSSetHotKey(nsgadget *gadget,int key,int modifier){
- int chr;
- unichar uchar[1];
- NSString *keyStr;
- int modMask;
- NSMenuItem *menuItem;
- if( gadget->internalclass!=GADGET_MENUITEM ) return;
- modMask=0;
- if( modifier & 1 ) modMask|=NSShiftKeyMask;
- if( modifier & 2 ) modMask|=NSControlKeyMask;
- if( modifier & 4 ) modMask|=NSAlternateKeyMask;
- if( modifier & 8 ) modMask|=NSCommandKeyMask;
- menuItem=(NSMenuItem*)gadget->handle;
- chr=keyToChar( key );
- if( !chr ) {
- [menuItem setKeyEquivalent:@""];
- [menuItem setKeyEquivalentModifierMask:0];
- return;
- }
- uchar[0]=chr;
- keyStr=[NSString stringWithCharacters:uchar length:1];
- [menuItem setKeyEquivalent:keyStr];
- [menuItem setKeyEquivalentModifierMask:modMask];
- }
|