From d41dbeac75bcc42c5554d9902d4dbecf3833a3c8 Mon Sep 17 00:00:00 2001 From: div0 Date: Sat, 27 Oct 2007 09:43:30 +0000 Subject: [PATCH] added checkbox, radio button; removed unnecessary setFocus override in Nexposee and ModalController git-svn-id: svn://svn.icculus.org/nexuiz/trunk@2855 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/menu-div0test/basecheckbox_c0.tga | Bin 0 -> 3942 bytes data/qcsrc/menu-div0test/basecheckbox_c1.tga | Bin 0 -> 3942 bytes data/qcsrc/menu-div0test/basecheckbox_f0.tga | Bin 0 -> 3388 bytes data/qcsrc/menu-div0test/basecheckbox_f1.tga | Bin 0 -> 3938 bytes data/qcsrc/menu-div0test/basecheckbox_n0.tga | Bin 0 -> 2911 bytes data/qcsrc/menu-div0test/basecheckbox_n1.tga | Bin 0 -> 3693 bytes .../menu-div0test/baseradiobutton_c0.tga | Bin 0 -> 3777 bytes .../menu-div0test/baseradiobutton_c1.tga | Bin 0 -> 3777 bytes .../menu-div0test/baseradiobutton_f0.tga | Bin 0 -> 3550 bytes .../menu-div0test/baseradiobutton_f1.tga | Bin 0 -> 3811 bytes .../menu-div0test/baseradiobutton_n0.tga | Bin 0 -> 2814 bytes .../menu-div0test/baseradiobutton_n1.tga | Bin 0 -> 3302 bytes data/qcsrc/menu-div0test/classes.c | 2 + data/qcsrc/menu-div0test/item/button.c | 49 +++++++++------ data/qcsrc/menu-div0test/item/checkbox.c | 56 ++++++++++++++++++ data/qcsrc/menu-div0test/item/label.c | 4 +- .../menu-div0test/item/modalcontroller.c | 7 --- data/qcsrc/menu-div0test/item/nexposee.c | 25 -------- data/qcsrc/menu-div0test/item/radiobutton.c | 37 ++++++++++++ data/qcsrc/menu-div0test/nexuiz/mainwindow.c | 19 +++++- data/qcsrc/menu-div0test/oo/constructors.h | 10 ++-- 21 files changed, 150 insertions(+), 59 deletions(-) create mode 100644 data/qcsrc/menu-div0test/basecheckbox_c0.tga create mode 100644 data/qcsrc/menu-div0test/basecheckbox_c1.tga create mode 100644 data/qcsrc/menu-div0test/basecheckbox_f0.tga create mode 100644 data/qcsrc/menu-div0test/basecheckbox_f1.tga create mode 100644 data/qcsrc/menu-div0test/basecheckbox_n0.tga create mode 100644 data/qcsrc/menu-div0test/basecheckbox_n1.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_c0.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_c1.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_f0.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_f1.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_n0.tga create mode 100644 data/qcsrc/menu-div0test/baseradiobutton_n1.tga create mode 100644 data/qcsrc/menu-div0test/item/checkbox.c create mode 100644 data/qcsrc/menu-div0test/item/radiobutton.c diff --git a/data/qcsrc/menu-div0test/basecheckbox_c0.tga b/data/qcsrc/menu-div0test/basecheckbox_c0.tga new file mode 100644 index 0000000000000000000000000000000000000000..ca97309454e02db4ec7fc983c87eab77c7079680 GIT binary patch literal 3942 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 Q=-#bfAOC`6Td;kCd literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/basecheckbox_c1.tga b/data/qcsrc/menu-div0test/basecheckbox_c1.tga new file mode 100644 index 0000000000000000000000000000000000000000..ca97309454e02db4ec7fc983c87eab77c7079680 GIT binary patch literal 3942 zcmbVP2Xswa8Ya11C3&KTgapx|WWv*XOGZQqi6HvQ^1{w zb!ktci|&aTgLtG7Az1%>-yYX9YvwJpCRzKQeah_1$m`dyCt%IU zw{PEua!>5-h30~0GANYNDAgq|FYiw;Uc3mubLY<5U+{P8)Ty-N$B(BcB_(AXJ9aEH zF)=ZdPrPT&WXIv_F9yF9gfPet0TD7WFtXNUp+}xyGxpGpeQY9%< zri^~Ny1I(N0n;Cj6t$0(En8M<)v6^;n>Lkc)27MMqep*z{`~nQ$gGKGc7mh7fAr{) zEiNuDH#j(0xVe*)lawx9S}Ihi@c#%eNa0l8C|R(@`OV|e`h{G?{h zn&RT(B9$vwmdMCRId|?{Do{883b=X#hC$b_Uq3rz#tf-my}CF%JByExk3>gD3*aQD zPoK^QcyiFsvV-mOlfcSAG_&x`hEucl@86%jckkY;!-o%NpEz+M@8rpovUu@g>C~x{ zFbMP|v4r(cGcz;CKmm^mP#_ozBu||>RclzhcyVdcq=~FuyH?WE)6<~oR(NS1az~*b zh1{EhHW{fFjeNAedi846?c2BG5)u;PR;^kUw`kF#xPu1|?nXfOLdYd#fP{pEh(YK$ zhK7bR{+U=c5#qh<;(sv=LkED4YTmrL#Ky+bQD=~RRsb{Xt=1-xUscfy?WLWBSyrWKY!i|_141=?->}QeEIU?$Q~5Uh9Q%+ zcx=->H8u6z+_`fFOEu)Mjf@;QQYKBBl(1mIf>>BE`N4w+fv|?6E5l>HP^<5b9Xkxf z+Nf5ongO+q5+zC)fSrLXK0!f2 zM>=%qU>h@LjOEawLsQ_;9@x?k_#M1%-8$8yM-PRlDzn+F0CH8kc5MYOsAbER8JP0} z0yGDa&KNjw;J;GUkv$R;=~Ihm>@hW&;Hy!ihJ5$kcUnA21=}aUBQ`Y4=+UDU9IY^S z`pT6n71%)mOv=&GQ9)(ZwryL5Jruw<_2R{gp@?orU?v(~cr|qBP%#L7NA~dLH#k2M z;x+U_k$jiz&|~ru`%Dr9AQ2gBb9Z;Q`1<;)@#DuUU|E456p*CgaE1I-7cP~7m8(^ha^p5nwZ42rYwF7_AtZHy~z3 z8h+^7wW|g-`H+N!F#ZE$!!gI53IxLg$@b(US0a|ObLUQhGxuM(aKScV!UPK-seo=( zs8AstbC9#@*s-J9wQH9GM+`!8*1?9foC-LjeGjOv*tTt(v})B#uvV&6sUqXXjgw24 zE~O$!{V>PX6Y1CM)~#D9#6KfXmLgjLNCG!)!X}dr95`U<)vK36HPFHf7A&YkKo6j% zsWWHJM5m>t1){97oRmVNC)(iKZg@!Q)TtxL5zQ`Et5p!LlaTvo%yIGj@Zm#Wgy1?e z015O(fqnb-eL@V^z*Xbod2sAqD6dZvENpGsv=L;CfFFK_aAu6zftgBH(mcgHapPGBUvhzrJrgHR zjPdmJ)JX^jDx1xw03n6kR&(aeQSg<*K}7-IioQW28{mq0n6n9onZJ`unB2ra*pX)C z!{om}w6_+IC`ZBmObR7^iyJ)wqId(>??G4=!m^pjdkcvep^AdSB;xKVDJehVn5MtC zYuC==;o)I{{xd;QF(|=1P_kdrC>B0?mPZ?W&jqk85UtNX4tDV*3Von*V-Hn74}5J^)%HzS0 zsNzY8m7nDZ>!PrphhFm+@uY^|#e*c6|MziPJ$?D|<)oW8Zzci@@c`sTSiTY#{1wmD zh~s9=iwDq-9yxL(0c9x(7M@1n9s-E^1VxwfKu7<=BVURS#G5>6JwMXroW#k2fq@be z6Qhy3b?a6ki4e8ylbHB!f5Jbyzj^a!&6+rX$olo`bsy-^nWSS13g%G_hNVM!ee$6K zMOX~rlxN}L;R2Xxu4et`SrrT?JO>(tt*J$e7Sg_bdp*MEml0=t4usXWL} zpFUl9uK+IuL%2Tm7XcLfQLneHUcLG)VMo`Ken}XlO)fO}Vq%Z{NcH&q#t2Wcg}IQJ zM~>tIAuDm`X$;Z&W@kpn3kVMfd+z~x{%!Z}-S2rjnLmHN%$_}4X7cjmK=z{MeE#Pb z3+EK(3Sc7#C%!|tR`6KufoA5lstDy#6pBLt5c|`!XU}4QK%IR8|g*My&LVEV{3k?Vk Q=-#bfAOC`6Td;kCd literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/basecheckbox_f0.tga b/data/qcsrc/menu-div0test/basecheckbox_f0.tga new file mode 100644 index 0000000000000000000000000000000000000000..c0d328b9aca923875d190bb546446fd30fd464b5 GIT binary patch literal 3388 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 literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/basecheckbox_n1.tga b/data/qcsrc/menu-div0test/basecheckbox_n1.tga new file mode 100644 index 0000000000000000000000000000000000000000..0612bb7ad38413e245877eb90704e7780cd7b0b4 GIT binary patch literal 3693 zcma*qduWzb9KiAS-ObHqc?-*Qo230=Xjyqlow91Pkvf`gni?vVQV3-fSTHZ!il7w2 z%8<~xxp~P7%ajuH7HLX_sg;+xaK1J*Elnl5(f9kj&$~7Z=Nq5rIq!4MbAIRi&N;6u z5@{bvd~zcEmtNu5bVQMi6r>_8EVm2qX$!2dw(S~QBq3VKCE|-gmxi#a3wmP!23tGS z#=|XOm_us)q}(SCY6$K@4m!aBN3D$q=}N)z+Ib1)V+pEIi{+@pvhZHby#`mUbAZcI zxRhZE`lBPF)>>AIk9nhQaOBdRv*R5h%boOu|^? zVI*c@6U@4ksls5GiAW|4n~h31u8Y`>$IuNPB^#$9#j&J%;{4{8xdVoDy02p@`oK+e zKi;+CjB{LrT=-^iXbqf&xiH-(#&vlGMKC!X5I+uyq29=oQFs~KaRf1}gqd-0<|9~u zpA5VzeB$nGUhp22=ipnMgWVj&7F590dH8}fakr!HC`BEP!39ce&9#)Bo%1&QnpX4n zNigrkerp;2S1Qlq54h#_V=?mK5S&pjnA-Po8o$F~JLL6nFW(B!*-)%7e9S?w2%iKK zF?=HJ^C%yJGiZXdaqT^5-@(<)!|iw+8*vhU!QpO&eT;^o-Rq`!5SALg!SGANC(X$> zd=4tn0B3CSci?NBz$tu#S1}9ga0c#>M!bjVFs#|JPd{yh??MxsX2bADaUOe60cW!l zE{Mee_&F918Sp!=+i7NQ(9wfdqg_fb6xyk+l({L}$nIWB} zYiqJC+s@29g`1G%Sc9;x_9%P^m(9FYV<1|E&EmmaI1{_xit*?QckM##hckB@y2kE{ z%@_wydbByLD?I@_;2X#A8v4LV20x}z?ulK#kFvXV6N+F5oiG|};n)rN4@|VPErUDR z%>9>W-!cye;2Cg2&!HQP7|h5*4qVTJNQ53k*_7RYvG@S)7N@zmOOJ4z9ZFNp4<4?!Ky!qxd0g~-87xaEBA_Oge!upD2(L*`;Q^1bl% zJ`8uetNRk_;i$Kv81a9)U3ZV4OBVe2oG@3l$iv-Of*8)jygh@vFcL4oEZMi4*!~;v zCURlBMK}uU*W*D1f5HWOE|qV_u3f<8l(Ef$eGkV<_@3{(GJ{}7Gtn25;qx6ZFXrJh zOhP_Zz-Q)k9qz-Gv1^PSGj%BcX<4#OP1st#AF~6%}-kMO0VMq;P+k-jx zNgZrq%MEZQrM7yc3zrF)2 zJUbWQ`LYMg?wQND);iz01V`Z{dL!9F@ROg!y$2@4UA6(6a0mxbZ_7g|mT(Y`&3hX) zhkeIh+~37;?V>^4c9i^Npcis622=1nUUb{ccVuPom9i_Jl-nkmi*FRcp3;08yb=6) zWEW|0TXw`PaI#tUne71G#66J{-rK4%V0YM?J;(o+tfUltq8@sqhW}&dK5PDrFD}V1 TEgV-^G`8Qwg2K`H{UiSZj~>LU literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/baseradiobutton_c0.tga b/data/qcsrc/menu-div0test/baseradiobutton_c0.tga new file mode 100644 index 0000000000000000000000000000000000000000..da391af38e364ff5084690c87fa48bd268bd4e7b GIT binary patch literal 3777 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 literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/baseradiobutton_f1.tga b/data/qcsrc/menu-div0test/baseradiobutton_f1.tga new file mode 100644 index 0000000000000000000000000000000000000000..5ef088aeb20ea576fd6c0cff62a7f0a6776bc3ce GIT binary patch literal 3811 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 literal 0 HcmV?d00001 diff --git a/data/qcsrc/menu-div0test/classes.c b/data/qcsrc/menu-div0test/classes.c index 45db05ae6..9883252f9 100644 --- a/data/qcsrc/menu-div0test/classes.c +++ b/data/qcsrc/menu-div0test/classes.c @@ -6,4 +6,6 @@ #include "item/image.c" #include "item/label.c" #include "item/button.c" +#include "item/checkbox.c" +#include "item/radiobutton.c" #include "nexuiz/mainwindow.c" diff --git a/data/qcsrc/menu-div0test/item/button.c b/data/qcsrc/menu-div0test/item/button.c index 8e5ccf925..503e80c8f 100644 --- a/data/qcsrc/menu-div0test/item/button.c +++ b/data/qcsrc/menu-div0test/item/button.c @@ -10,6 +10,7 @@ CLASS(Button) EXTENDS(Label) ATTRIB(Button, onClick, void(entity, entity), SUB_Null) ATTRIB(Button, onClickEntity, entity, NULL) ATTRIB(Button, src, string, "") + ATTRIB(Button, srcMulti, float, 1) ATTRIB(Button, focusable, float, 1) ATTRIB(Button, pressed, float, 0) ATTRIB(Button, clickTime, float, 0) @@ -68,28 +69,40 @@ float mouseReleaseButton(entity me, vector pos) } void drawButton(entity me) { - float division; - division = min(0.5, 0.5 * me.size_y / me.size_x); - if(me.forcePressed || me.pressed || me.clickTime > 0) + if(me.srcMulti) { - draw_Picture('0 0 0', strcat(me.src, "_cl"), eX * division + eY, '1 1 1', 1); - if(division < 0.5) - draw_Picture('0 0 0' + eX * division, strcat(me.src, "_cm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); - draw_Picture(eX * (1 - division), strcat(me.src, "_cr"), eX * division + eY, '1 1 1', 1); - } - else if(me.focused) - { - draw_Picture('0 0 0', strcat(me.src, "_fl"), eX * division + eY, '1 1 1', 1); - if(division < 0.5) - draw_Picture('0 0 0' + eX * division, strcat(me.src, "_fm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); - draw_Picture(eX * (1 - division), strcat(me.src, "_fr"), eX * division + eY, '1 1 1', 1); + float division; + division = min(0.5, 0.5 * me.size_y / me.size_x); + if(me.forcePressed || me.pressed || me.clickTime > 0) + { + draw_Picture('0 0 0', strcat(me.src, "_cl"), eX * division + eY, '1 1 1', 1); + if(division < 0.5) + draw_Picture('0 0 0' + eX * division, strcat(me.src, "_cm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); + draw_Picture(eX * (1 - division), strcat(me.src, "_cr"), eX * division + eY, '1 1 1', 1); + } + else if(me.focused) + { + draw_Picture('0 0 0', strcat(me.src, "_fl"), eX * division + eY, '1 1 1', 1); + if(division < 0.5) + draw_Picture('0 0 0' + eX * division, strcat(me.src, "_fm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); + draw_Picture(eX * (1 - division), strcat(me.src, "_fr"), eX * division + eY, '1 1 1', 1); + } + else + { + draw_Picture('0 0 0', strcat(me.src, "_nl"), eX * division + eY, '1 1 1', 1); + if(division < 0.5) + draw_Picture('0 0 0' + eX * division, strcat(me.src, "_nm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); + draw_Picture(eX * (1 - division), strcat(me.src, "_nr"), eX * division + eY, '1 1 1', 1); + } } else { - draw_Picture('0 0 0', strcat(me.src, "_nl"), eX * division + eY, '1 1 1', 1); - if(division < 0.5) - draw_Picture('0 0 0' + eX * division, strcat(me.src, "_nm"), eX * (1 - 2 * division) + eY, '1 1 1', 1); - draw_Picture(eX * (1 - division), strcat(me.src, "_nr"), eX * division + eY, '1 1 1', 1); + if(me.forcePressed || me.pressed || me.clickTime > 0) + draw_Picture('0 0 0', strcat(me.src, "_c"), '1 1 0', '1 1 1', 1); + else if(me.focused) + draw_Picture('0 0 0', strcat(me.src, "_f"), '1 1 0', '1 1 1', 1); + else + draw_Picture('0 0 0', strcat(me.src, "_n"), '1 1 0', '1 1 1', 1); } me.clickTime -= frametime; drawLabel(me); diff --git a/data/qcsrc/menu-div0test/item/checkbox.c b/data/qcsrc/menu-div0test/item/checkbox.c new file mode 100644 index 000000000..3ce59ab08 --- /dev/null +++ b/data/qcsrc/menu-div0test/item/checkbox.c @@ -0,0 +1,56 @@ +#ifdef INTERFACE +void CheckBox_Click(entity me, entity other); +CLASS(CheckBox) EXTENDS(Button) + METHOD(CheckBox, configureCheckBox, void(entity, string, float, string)) + METHOD(CheckBox, resizeNotify, void(entity, vector, vector, vector, vector)) + METHOD(CheckBox, draw, void(entity)) + ATTRIB(CheckBox, checked, float, 0) + ATTRIB(CheckBox, onClick, void(entity, entity), CheckBox_Click) + ATTRIB(CheckBox, srcMulti, float, 0) +ENDCLASS(CheckBox) +#endif + +#ifdef IMPLEMENTATION +void CheckBox_Click(entity me, entity other) +{ + me.checked = !me.checked; +} +void configureCheckBoxCheckBox(entity me, string txt, float sz, string gfx) +{ + me.configureButton(me, txt, sz, gfx); + me.align = 0; +} +void resizeNotifyCheckBox(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) +{ + me.keepspaceLeft = min(0.8, absSize_y / absSize_x); + resizeNotifyButton(me, relOrigin, relSize, absOrigin, absSize); +} +void drawCheckBox(entity me) +{ + vector cbOrigin; + vector cbSize; + + cbOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x)); + cbSize = me.realFontSize; + if(me.checked) + { + if(me.forcePressed || me.pressed || me.clickTime > 0) + draw_Picture(cbOrigin, strcat(me.src, "_c1"), cbSize, '1 1 1', 1); + else if(me.focused) + draw_Picture(cbOrigin, strcat(me.src, "_f1"), cbSize, '1 1 1', 1); + else + draw_Picture(cbOrigin, strcat(me.src, "_n1"), cbSize, '1 1 1', 1); + } + else + { + if(me.forcePressed || me.pressed || me.clickTime > 0) + draw_Picture(cbOrigin, strcat(me.src, "_c0"), cbSize, '1 1 1', 1); + else if(me.focused) + draw_Picture(cbOrigin, strcat(me.src, "_f0"), cbSize, '1 1 1', 1); + else + draw_Picture(cbOrigin, strcat(me.src, "_n0"), cbSize, '1 1 1', 1); + } + me.clickTime -= frametime; + drawLabel(me); // skip drawButton! +} +#endif diff --git a/data/qcsrc/menu-div0test/item/label.c b/data/qcsrc/menu-div0test/item/label.c index 04a5cf776..2ce9ab0b6 100644 --- a/data/qcsrc/menu-div0test/item/label.c +++ b/data/qcsrc/menu-div0test/item/label.c @@ -7,6 +7,8 @@ CLASS(Label) EXTENDS(Item) ATTRIB(Label, text, string, "Big Red Button") ATTRIB(Label, fontSize, float, 8) ATTRIB(Label, align, float, 0.5) + ATTRIB(Label, keepspaceLeft, float, 0) // for use by subclasses (radiobuttons for example) + ATTRIB(Label, keepspaceRight, float, 0) ATTRIB(Label, realFontSize, vector, '0 0 0') ATTRIB(Label, realOrigin, vector, '0 0 0') ENDCLASS(Label) @@ -23,7 +25,7 @@ void resizeNotifyLabel(entity me, vector relOrigin, vector relSize, vector absOr // absSize_y is height of label me.realFontSize_y = me.fontSize / absSize_y; me.realFontSize_x = me.fontSize / absSize_x; - me.realOrigin_x = me.align * (1 - me.realFontSize_x * draw_TextWidth(me.text)); + me.realOrigin_x = me.align * (1 - me.keepspaceLeft - me.keepspaceRight - me.realFontSize_x * draw_TextWidth(me.text)) + me.keepspaceLeft; me.realOrigin_y = 0.5 * (1 - me.realFontSize_y); } void configureLabelLabel(entity me, string txt, float sz, float algn) diff --git a/data/qcsrc/menu-div0test/item/modalcontroller.c b/data/qcsrc/menu-div0test/item/modalcontroller.c index a629e2dce..461c1aebc 100644 --- a/data/qcsrc/menu-div0test/item/modalcontroller.c +++ b/data/qcsrc/menu-div0test/item/modalcontroller.c @@ -3,7 +3,6 @@ CLASS(ModalController) EXTENDS(Container) METHOD(ModalController, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(ModalController, draw, void(entity)) METHOD(ModalController, addItem, void(entity, entity, vector, vector, float)) - METHOD(ModalController, setFocus, void(entity, entity)) METHOD(ModalController, showChild, void(entity, entity, vector, vector, float)) METHOD(ModalController, hideChild, void(entity, entity, float)) METHOD(ModalController, hideAll, void(entity, float)) @@ -242,12 +241,6 @@ void addItemModalController(entity me, entity other, vector theOrigin, vector th other.Container_alpha = 0; } -void setFocusModalController(entity me, entity other) -{ - //print("focus to ", etos(other), "\n"); - setFocusContainer(me, other); -} - void showChildModalController(entity me, entity other, vector theOrigin, vector theSize, float skipAnimation) { if(other.ModalController_state == 0) diff --git a/data/qcsrc/menu-div0test/item/nexposee.c b/data/qcsrc/menu-div0test/item/nexposee.c index a4abd3c1c..d82a80741 100644 --- a/data/qcsrc/menu-div0test/item/nexposee.c +++ b/data/qcsrc/menu-div0test/item/nexposee.c @@ -8,7 +8,6 @@ CLASS(Nexposee) EXTENDS(Container) METHOD(Nexposee, mouseRelease, float(entity, vector)) METHOD(Nexposee, mouseDrag, float(entity, vector)) METHOD(Nexposee, resizeNotify, void(entity, vector, vector, vector, vector)) - //METHOD(Nexposee, setFocus, void(entity, entity)) METHOD(Nexposee, focusEnter, void(entity)) ATTRIB(Nexposee, animationState, float, -1) @@ -322,28 +321,4 @@ void focusEnterNexposee(entity me) if(me.animationState == 2) setFocusContainer(me, me.selectedChild); } - -void setFocusNexposee(entity me, entity other) -{ -/* - if(me.animationState == 0) - { - if(other != NULL) - { - setFocusContainer(me, other); - me.selectedChild = other; - me.animationState = 1; - } - } - else if(me.animationState == 2) - { - if(other == NULL) - { - me.selectedChild = me.focusedChild; - setFocusContainer(me, NULL); - me.animationState = 3; - } - } -*/ -} #endif diff --git a/data/qcsrc/menu-div0test/item/radiobutton.c b/data/qcsrc/menu-div0test/item/radiobutton.c new file mode 100644 index 000000000..82672ec86 --- /dev/null +++ b/data/qcsrc/menu-div0test/item/radiobutton.c @@ -0,0 +1,37 @@ +#ifdef INTERFACE +void RadioButton_Click(entity me, entity other); +CLASS(RadioButton) EXTENDS(CheckBox) + METHOD(RadioButton, configureRadioButton, void(entity, string, float, string, float, float)) + ATTRIB(RadioButton, checked, float, 0) + ATTRIB(RadioButton, group, float, 0) + ATTRIB(RadioButton, allowDeselect, float, 0) + ATTRIB(RadioButton, onClick, void(entity, entity), RadioButton_Click) +ENDCLASS(RadioButton) +#endif + +#ifdef IMPLEMENTATION +void configureRadioButtonRadioButton(entity me, string txt, float sz, string gfx, float theGroup, float doAllowDeselect) +{ + me.configureCheckBox(me, txt, sz, gfx); + me.align = 0; + me.group = theGroup; + me.allowDeselect = doAllowDeselect; +} +void RadioButton_Click(entity me, entity other) +{ + if(me.checked) + { + if(me.allowDeselect) + me.checked = 0; + } + else + { + entity e; + for(e = me.parent.firstChild; e; e = e.Container_nextSibling) + if(e != me) + if(e.group == me.group) + e.checked = 0; + me.checked = 1; + } +} +#endif diff --git a/data/qcsrc/menu-div0test/nexuiz/mainwindow.c b/data/qcsrc/menu-div0test/nexuiz/mainwindow.c index e76511c80..13a75c88d 100644 --- a/data/qcsrc/menu-div0test/nexuiz/mainwindow.c +++ b/data/qcsrc/menu-div0test/nexuiz/mainwindow.c @@ -31,13 +31,26 @@ void configureMainWindowMainWindow(entity me) dlg.addItem(dlg, i, '0 0 0', '1 0.2 0', 1); i = spawnLabel(); - i.configureLabel(i, "Swim swim hungry, swim swim hungry...", 12, 0.5); - dlg.addItem(dlg, i, '0 0.3 0', '1 0.2 0', 1); + i.configureLabel(i, "Swim swim hungry, swim swim hungry...", 8, 0.5); + dlg.addItem(dlg, i, '0 0.3 0', '1 0.1 0', 1); + + i = spawnRadioButton(); + i.configureRadioButton(i, "RadioButton1", 12, "qcsrc/menu-div0test/baseradiobutton", 1, 0); + dlg.addItem(dlg, i, '0.1 0.4 0', '0.4 0.1 0', 1); + + i = spawnRadioButton(); + i.configureRadioButton(i, "RadioButton2", 12, "qcsrc/menu-div0test/baseradiobutton", 1, 1); + dlg.addItem(dlg, i, '0.5 0.4 0', '0.8 0.1 0', 1); + + i = spawnCheckBox(); + i.configureCheckBox(i, "Do not show this dialog again", 12, "qcsrc/menu-div0test/basecheckbox"); + i.checked = 1; + dlg.addItem(dlg, i, '0.1 0.5 0', '0.8 0.1 0', 1); i = spawnButton(); i.configureButton(i, "Close", 12, "qcsrc/menu-div0test/basebutton"); i.onClick = DialogCloseButton_Click; i.onClickEntity = dlg; - dlg.addItem(dlg, i, '0.3 0.6 0', '0.4 0.3 0', 1); + dlg.addItem(dlg, i, '0.3 0.7 0', '0.4 0.2 0', 1); me.addItem(me, dlg, '0.2 0.3 0', '0.6 0.4 0', 1); i = spawnImage(); diff --git a/data/qcsrc/menu-div0test/oo/constructors.h b/data/qcsrc/menu-div0test/oo/constructors.h index b936307cf..ba2238ce5 100644 --- a/data/qcsrc/menu-div0test/oo/constructors.h +++ b/data/qcsrc/menu-div0test/oo/constructors.h @@ -14,8 +14,8 @@ #undef ENDCLASS #endif -#define CLASS(cname) entity spawn##cname() { entity e; -#define EXTENDS(base) e = spawn##base (); -#define METHOD(cname,name,prototype) e.name = name##cname; -#define ATTRIB(cname,name,type,val) e.name = val; -#define ENDCLASS(cname) e.instanceOf##cname = 1; e.classname = #cname; return e; } +#define CLASS(cname) entity spawn##cname() { entity me; +#define EXTENDS(base) me = spawn##base (); +#define METHOD(cname,name,prototype) me.name = name##cname; +#define ATTRIB(cname,name,type,val) me.name = val; +#define ENDCLASS(cname) me.instanceOf##cname = 1; me.classname = #cname; return me; } -- 2.39.2