From e496ca56ab8b85789e23932f064469eba1c6713e Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Tue, 17 Jun 2014 17:13:13 +0200 Subject: [PATCH] canvas.gui: Add MessageBox class. Use canvas.MessageBox.critical/warning/information/question to show a standard, but also customizable dialog box. --- Nasal/canvas/gui.nas | 7 +- Nasal/canvas/gui/Style.nas | 10 +- Nasal/canvas/gui/dialogs/MessageBox.nas | 170 +++++++++++++++++++++++ Nasal/canvas/gui/styles/DefaultStyle.nas | 7 +- gui/icons/Humanity/AUTHORS | 20 +++ gui/icons/Humanity/dialog-error.png | Bin 0 -> 2618 bytes gui/icons/Humanity/dialog-info.png | Bin 0 -> 2967 bytes gui/icons/Humanity/dialog-question.png | Bin 0 -> 3086 bytes gui/icons/Humanity/dialog-warning.png | Bin 0 -> 2080 bytes 9 files changed, 207 insertions(+), 7 deletions(-) create mode 100644 Nasal/canvas/gui/dialogs/MessageBox.nas create mode 100644 gui/icons/Humanity/AUTHORS create mode 100644 gui/icons/Humanity/dialog-error.png create mode 100644 gui/icons/Humanity/dialog-info.png create mode 100644 gui/icons/Humanity/dialog-question.png create mode 100644 gui/icons/Humanity/dialog-warning.png diff --git a/Nasal/canvas/gui.nas b/Nasal/canvas/gui.nas index 9bc469d71..cf6a1b2b8 100644 --- a/Nasal/canvas/gui.nas +++ b/Nasal/canvas/gui.nas @@ -16,8 +16,9 @@ loadGUIFile("styles/DefaultStyle.nas"); loadWidget("Button"); loadWidget("Label"); loadWidget("ScrollArea"); +loadDialog("MessageBox"); -var style = DefaultStyle.new("AmbianceClassic"); +var style = DefaultStyle.new("AmbianceClassic", "Humanity"); var WindowButton = { new: func(parent, name) { @@ -101,6 +102,10 @@ var Window = { me._node.remove(); me._node = nil; }, + setTitle: func(title) + { + return me.set("title", title); + }, # Create the canvas to be used for this Window # # @return The new canvas diff --git a/Nasal/canvas/gui/Style.nas b/Nasal/canvas/gui/Style.nas index 244177c26..5b7c1813b 100644 --- a/Nasal/canvas/gui/Style.nas +++ b/Nasal/canvas/gui/Style.nas @@ -1,14 +1,16 @@ gui.Style = { - new: func(name) + new: func(name, name_icon_theme) { var root_node = props.globals.getNode("/sim/gui/canvas", 1) .addChild("style"); - var path = getprop("/sim/fg-root") ~ "/gui/styles/" ~ name; + var gui_path = getprop("/sim/fg-root") ~ "/gui"; + var style_path = gui_path ~ "/styles/" ~ name; var m = { parents: [gui.Style], - _path: path, - _node: io.read_properties(path ~ "/style.xml", root_node), + _path: style_path, + _dir_icons: gui_path ~ "/icons/" ~ name_icon_theme, + _node: io.read_properties(style_path ~ "/style.xml", root_node), _colors: {} }; diff --git a/Nasal/canvas/gui/dialogs/MessageBox.nas b/Nasal/canvas/gui/dialogs/MessageBox.nas new file mode 100644 index 000000000..3dec44c20 --- /dev/null +++ b/Nasal/canvas/gui/dialogs/MessageBox.nas @@ -0,0 +1,170 @@ +var MessageBox = { + Ok: 0x0001, + Cancel: 0x0002, + Yes: 0x0004, + No: 0x0008, + new: func + { + return { + parents: [MessageBox], + _title: "Message", + _standard_buttons: MessageBox.Ok + }; + }, + setTitle: func(title) + { + me._title = title; + }, + setImage: func(img) + { + if( img != nil and img.find('/') < 0 ) + me._img = style._dir_icons ~ "/" ~ img ~ ".png"; + else + me._img = img; + return me; + }, + setText: func(text) + { + me._text = text; + return me; + }, + setStandardButtons: func(mask) + { + me._standard_buttons = mask; + return me; + }, + exec: func(cb = nil) + { + var MARGIN = 8; # TODO implement margin in C++ layouting code + var dlg = canvas.Window.new([250,100], "dialog") + .setTitle(me._title); + var root = dlg.getCanvas(1) + .set("background", style.getColor("bg_color")) + .createGroup(); + var vbox = VBoxLayout.new(); + dlg.setLayout(vbox); + vbox.addSpacing(MARGIN); + + var text_box = HBoxLayout.new(); + vbox.addItem(text_box); + + text_box.addSpacing(MARGIN); + + if( me._img != nil ) + { + text_box.addItem( + gui.widgets.Label.new(root, style, {}) + .setFixedSize(48, 48) + .setImage(me._img) + ); + } + + var label_text = gui.widgets.Label.new(root, style, {wordWrap: 1}) + .setText(me._text); + text_box.addItem(label_text, 1); + text_box.addSpacing(MARGIN); + + vbox.addStretch(1); + + var button_box = HBoxLayout.new(); + vbox.addItem(button_box); + + button_box.addStretch(1); + foreach(var button; [me.Ok, me.Cancel, me.Yes, me.No]) + { + if( !(me._standard_buttons & button) ) + continue; + + (func{ + var b_id = button; + button_box.addItem( + gui.widgets.Button.new(root, style, {}) + .setText(me._button_names[button]) + .listen("clicked", func { + dlg.del(); + if( cb != nil ) + cb(b_id); + }) + ); + })(); + } + button_box.addSpacing(MARGIN); + + vbox.addSpacing(MARGIN); + + return me; + }, + show: func(title, text, icon = nil, cb = nil, buttons = nil) + { + var msg_box = MessageBox.new(); + msg_box.setTitle(title); + msg_box.setText(text); + + if( buttons == nil ) + buttons = MessageBox.Ok; + msg_box.setStandardButtons(buttons); + + if( icon != nil ) + msg_box.setImage(icon); + + return msg_box.exec(cb); + }, + # Show an error/critical message in a message box + # + # @param title + # @param text + # @param cb Dialog close callback + # @param buttons Mask indicating the buttons to show + # (default: MessageBox.Ok) + critical: func(title, text, cb = nil, buttons = nil) + { + MessageBox.show(title, text, "dialog-error", cb, buttons); + }, + # Show a warning message in a message box + # + # @param title + # @param text + # @param cb Dialog close callback + # @param buttons Mask indicating the buttons to show + # (default: MessageBox.Ok) + warning: func(title, text, cb = nil, buttons = nil) + { + MessageBox.show(title, text, "dialog-warning", cb, buttons); + }, + # Show an informative message in a message box + # + # @param title + # @param text + # @param cb Dialog close callback + # @param buttons Mask indicating the buttons to show + # (default: MessageBox.Ok) + information: func(title, text, cb = nil, buttons = nil) + { + MessageBox.show(title, text, "dialog-info", cb, buttons); + }, + # Show a question in a message box + # + # @param title + # @param text + # @param cb Dialog close callback + # @param buttons Mask indicating the buttons to show + # (default: MessageBox.Yes | MessageBox.No) + question: func(title, text, cb = nil, buttons = nil) + { + MessageBox.show( + title, + text, + "dialog-question", + cb, + buttons or MessageBox.Yes | MessageBox.No + ); + }, +# private: + _button_names: {} +}; + +# Standard button names +MessageBox._button_names[ MessageBox.Ok ] = "Ok"; +MessageBox._button_names[ MessageBox.Cancel ] = "Cancel"; +MessageBox._button_names[ MessageBox.Yes ] = "Yes"; +MessageBox._button_names[ MessageBox.No ] = "No"; diff --git a/Nasal/canvas/gui/styles/DefaultStyle.nas b/Nasal/canvas/gui/styles/DefaultStyle.nas index 9663207fe..14a02b8ae 100644 --- a/Nasal/canvas/gui/styles/DefaultStyle.nas +++ b/Nasal/canvas/gui/styles/DefaultStyle.nas @@ -1,7 +1,10 @@ var DefaultStyle = { - new: func(name) + new: func(name, name_icon_theme) { - return { parents: [gui.Style.new(name), DefaultStyle] }; + return { + parents: [ gui.Style.new(name, name_icon_theme), + DefaultStyle ] + }; }, createWidget: func(parent, type, cfg) { diff --git a/gui/icons/Humanity/AUTHORS b/gui/icons/Humanity/AUTHORS new file mode 100644 index 000000000..7baeebe66 --- /dev/null +++ b/gui/icons/Humanity/AUTHORS @@ -0,0 +1,20 @@ +#################### +ABOUT: # +#################### + +Humanity is designed and developed by : + Daniel Foré , + K.Vishnoo Charan Reddy, + Jonian Guveli . + +GNOME icons and Humanity icons are all licensed under the GPL. + +This package is licensed under GNU General Public License version 2. + +Icons based or directly from GNOME and other GNOME projects, licensed GPL. + You can visit the GNOME website here: + http://www.gnome.org/ + +Icons based on Tango sources or taken from the Tango project are public domain. + You can visit the Tango project website here: + http://tango.freedesktop.org/Tango_Desktop_Project diff --git a/gui/icons/Humanity/dialog-error.png b/gui/icons/Humanity/dialog-error.png new file mode 100644 index 0000000000000000000000000000000000000000..60f29f0a424a8dc368858d516e0cbcb67a92df0a GIT binary patch literal 2618 zcmV-A3dQw_P)HMjr(3CBr9 zK~!ko?O9ulT~!(W{my52%-_gi6OdRN4vpYkl{``7Q-v-q(S*t_wX``|cF z)HZD>)~2R%2;1O=lMufRSO8fHWKj&>Bp?FO0?`a;fC^=((Mups5%uYR28~_2UD46E zKC^TG(;o|gT^lwyImdm%86CTC^Y`fsHx$ETKmVQV2eaTL5X z7lSsy!&0CWJP}L=A}Ij@bT<7apksQp0I}zD7WUGD6C$yY4nDvg7@|e#CK!BiABKzu^6NjL=i|aBn96^AR%Fd z5>hWD1lU`Gw{Hfc8#WfSA8sihJ@zXA-}%rUcysF0U&~c$zrFlR+ls-#0}!_bA_A$n z!7{=py{F>jjq|s|KoSC37_phu3`y>b2&hy+Zt`jzf8qIdP;cMAW!KD~E||cp*H5mr ztiqu+U))xe#Rcg3QyuVxEY33`32>y(sb}acgrwt%6nIKZkX>6VF9oV2IQrs?b=!*8 zZl2yh-w&r6%q;)-$i&ro59Un~et%%Xb56*-1_;E(s-YYi=&yC*G@SmRJ! z?5jAw*}9KsNhI zN4Sx63{1Tza`x0L-2zXf=iHdoU^{3wTV4q47@7kS$=}b^+der?Cf?Z4G`)H#7I}tf z%cQok+R`0?mgyqy7I@v~=~%J2Bges9!ws4F<)H+Q9oqAT7X*PDXprqBf84DgQ?bQe zMEa}HL8?@G1YT@}j9*E(k_(0*k4 zw|?*Tj%6By3Pqe;bp24PC#jDbokl`rUkH@l@-s+GT4s)B19`Xh&`c20=t6J*As% zY1YN7C?vg@I}zC{$ulwJGQdp9<_1B7phY1{daBiMyzcp}Ab9ej!*BiJLbg@ty+Hp^ zH`@193uAdFUxavGqM!xwnm(yO0uTh$rA7y@V2$Mfq*HjoLY;d8P_YP46HYf>?+CXZ zNlKaw^8h8J?AKc-!_SvizV8On9b=VhE(#f%CG!G{0t+RUQ(!3Q^mihq;cQyuFI zf$bb5U&Nt>Msrd74?cQ)-;5#NWe@>Mt}Or#0Q=?U$#-ulU9#2-d7@gbpu> zV=^gl78Qd@fH5e0o&sg#c?#Mj!O8-PWgMwDT8$`p`jO)^zeM*oS=WqW^@NjUG#h}m zr@6HKhT_;(Ut>k3SaBk)p&4M9o=_QJ4bvlWyYdXsaA2q1W=|Jyooq1+`adf;DMOWsnyrV1| zS|fIQ7hq+ClHmm-yx7PEh60=%JP?kx8*V)e|N8i;eGh-2+nxcI2b^aFl0ApcD!2E# z4K4p@oqTD+t{x?(n*$MY?7Ssp#o!oOTz5jLPfI;SHdxt+l!dv_59U3${eIB=!7t|j z^=ltG0-zJHY3q00l^E0;|AX3kXLRfvj_eVQ`+n~GOlzNNV0+a=|E)rL|z zW#@C`F!7Dgap;Bn*&ST{L*dZ#=0o7deBjvE#>``*ST_;V?D8U(su zjuZgU!g zPfS)%g;G69Pkr*I-`LXoxx+|E?m5@JvHnqgrA$3T7YP1*Nys2ef1F?HP0;<$`_}KC c^ACOe2ihP>;RB{5bN~PV07*qoM6N<$f;_XynE(I) literal 0 HcmV?d00001 diff --git a/gui/icons/Humanity/dialog-info.png b/gui/icons/Humanity/dialog-info.png new file mode 100644 index 0000000000000000000000000000000000000000..184eeda8840418f6e604456fe8e6714ded7764e5 GIT binary patch literal 2967 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 N002ovPDHLkV1kR3mBIi3 literal 0 HcmV?d00001 diff --git a/gui/icons/Humanity/dialog-question.png b/gui/icons/Humanity/dialog-question.png new file mode 100644 index 0000000000000000000000000000000000000000..ce7fdcd44e9009ad0530939da50973f102891505 GIT binary patch literal 3086 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 literal 0 HcmV?d00001 diff --git a/gui/icons/Humanity/dialog-warning.png b/gui/icons/Humanity/dialog-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..7247b3e25c6ae2f2bf50b6707529903835d37aa8 GIT binary patch literal 2080 zcmV+*2;cXKP)&;$J@ln6@-XNZK|MF2q@4|&9}YCPG)7W=nq#~P zCw~dizPof+EZ*uDGkdE#0~ep%8j*DOP}@V_@QUIG5cV_xKz3~ci4d;5_~MLZnGK&C zd?#C#8IU#o2a&EGl`#{-N&|ubLE!ljC@vkr))rOO^vA2xLKlvtl8}_Wq0U~-$^Cb3 z@v{-(2(@ojWLY~}RRC`s z?r8;6c8A(K6esr~AjB=@WUnCH-Qyy#y?^~)PeauJkV|?tmfEIMaS~*kH`!-i!peZ5 zfN*!0%9!*_RRCOkqI(-;?ejHlnrfOAi5-NAIvr~Qo$5;v}w*=1NHPp0hk)bH}UO2e5e=TcJ)>L_9=~QiBuZNqXAa2k7-LyD1 z-~B^Go3;Z0GUM-J?EDb~+%$X7I3~zWBi@&CkG%f(69DeM;~BVcuydE9``W#Ao0wya zfCSA+^0m$_9smNdcDSPbWn-M&b@-BvlA>#U7Y}vpyrTdFFerGwwy(z{j1hp_W#v-W zeT!mLy{2poITl1=46(jmFUitLs&HFV5x}{FZC}#@futuE0XIhhqH-0d76;kcMdP?J z0$)7N6tB18+@X#y-4TE@$L>*NNjg#6+vVZLFtFg}ydhSYT)b;6PA%>Y+yT#zA>P~N zmnEF|?QX~$4xr_R_voQW$QAU1=O;iyEE2ae5RO%DJL}eCo%|Twkr4DiFq&xCvS&j9 zP7k!{5@;}<>hy491R$~4J|z{6iSppW)UC$~4xS%HZBM(8No?@+K%2f{06`V|Jh7-( zb88Uh^paZ!2!frT2XL%hsmU#|#mG-V5BT7XggrqO`!)pN)gv8#BKB0QbBmiBqor!H zG=Q@Jz|K!BI~GEK8)JxdwtI>2)T>82{Ob-NJN)rLeXXYG4BVOlkyuuaxd6bJSaCcr zq@lQF`08Q`Y<_560nQyrhB@JIbjxNJH^x`^G-pNTd?j+ssa3^rV;r%LRu3Q!zV>Kq z?YaR7(vF6bb&4c&kY%iDF=By*_=*-PL0dT}5}_thr@)2puM5Dr1IYw{N5Y#Mb&;Q3 zvg$07HJ<@0q*oos%?U(Xn{{IJ&9nPk8`ca!!u52hu})zqLfH9R*792kg#{Tfr&b*& zig_?t2sPBJvLcSJ3E;JXhE{;S9%@XeVwE1_d=*_YTZNz!Kn@rWd>%x$HAp`4*V!g%{PfZ!Fyi^2^2@sOlw zYVThjOWe2WBc&qC&qbQzZrFLisr+HG@$Z+`cx2~5F^_0d+&}#8wUY#NGk})Oz{`&$ z?vrGtD-a1VVPz}w{(4GSIrxG;sJfaw`)KmPWi3PiQ)PB4+7$B%+XM-|;&Yy*G&WPj zrK<)mUo$YAE>=7b2@YZB5o@aTON^d7bFADoWxu?S65Kxer7fSI_?%GjIF?HJ-|zAyCnT$LELYb_K<7{T|?>U(RhZZ=CqP-4C@d5jef6 zr8cI>eDxAS6YFq-Y2=_ai&ht5C6*W z8x~>!q%Wu94{L5M;`ZqfwpDq`iBOYF0j&HXLonIBra6UUL3gWgd0d`uzw@0NYnK49 z-Tfh-N0E+4>qB0$trZU|D{A8M>~V9U4MzX5wmAiXiUmXyL9ZsWqlb3*A^?~SKt8@J zu&>6i-yg0GsN`6))?b5oW&}Jt3^m#g5)QJjzX0RX@76pogn*)|uuPj`UM7C^Pva~D zp#AAv@%I{9qKz((Jlk}t`o*w>qD8p+{@6!5Ul?mq05Awj=q?51*q?w`+Z?K@f`D28 zOaVZQVcasTO}a~7h z2mrBCFHlc?G4ym>MBXn0o@)K<34kMz{?C~6^8>%1{xJZXmHL2O>dHX?@zOQJ27Q;J z!nG3s2f!$R>C!c43*OjE3mRKBE&gT*0w78vw#3&CSQWdd?E3#V*sT89zTZ>;0000< KMNUMnLSTYtgX4Vw literal 0 HcmV?d00001