ultimatepp/uppbox/uppweb/examples.tpp/HelloWorld_en-us.tpp
cxl f01ecccbd4 upp.src: Removing .tpp $
git-svn-id: svn://ultimatepp.org/upp/trunk@11511 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2017-12-02 14:09:28 +00:00

196 lines
No EOL
19 KiB
C++

topic "Slicing HelloWorld U++ example";
[2 $$0,0#00000000000000000000000000000000:Default]
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
[b83;*4 $$3,5#07864147445237544204411237157677:title]
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
[b42;a42;ph2 $$5,5#45413000475342174754091244180557:text]
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
[l321;t246;C@5;1 $$7,7#20902679421464641399138805415013:code]
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
[t4167;C2 $$10,0#37138531426314131251341829483380:class]
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
[l160;t4167;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
[2 $$19,0#53580023442335529039900623488521:gap]
[t4167;C2 $$20,20#70211524482531209251820423858195:class`-nested]
[b50;2 $$21,21#03324558446220344731010354752573:Par]
[{_}%EN-US
[s3; Description&]
[s5; Historically almost every program language or framework have
some kind of `"Hello world!`" example and Ultimate`+`+ framework
is not exception:). So in this short tutorial I will try to explain
you the basics of U`+`+ framework with the help of HelloWorld
U`+`+ example.&]
[s5; So when you start HelloWorld application, and go to `"File`->About`"
you will see somethings like this:&]
[s0; &]
[s0;=
@@image:2162&1572
(A2EDdQIAAIv9AAAAAHic7d13mGxnXcDx+VuxxK5YYxcUNFZQvEosIAiokWbBFpXebyiBSwIkIaEEUrihJCQhkNBDJ5SAjXLREIZAUBR7v/I8/uGf6zv77j05+Z0zZ96Znd2dd+bzez5PntnZ2Zmz885zzzdnyo5v+vCWMcYYY4wxW1tHjhw5dOjQ+KYPj7cTMZ8AAGCTdRPxSPE8q2zOKpuzy+bZZfOcsnlu2ZxTNueWzXll87ziOb9sLiib55fNC8rmhWXzorK5sGxeXDYvKZuLyubi4rmkbC4tm5eWzdGyuaxsXlY2Ly+bV5TNK8vm8uK5omxeVTZXls1VZXN12by6bK4pm9eUzWvL5tqyua54Xlc2ry+bN5TNG8vmTWXz5rJ5S9lcXzZvLZu3lc3bi+cdZfPOsnlX2by7bN5TNjeUzXvL5n1l8/6y+UDZ3LiLkYgSUSJKRIkoESWiRJSIElEiSkSJKBElokSUiBJRIm5OIs71+sPUhCER038lokSUiBJRIkpEiSgRJeL6JeJcLz4Mifh///vvElEiSkSJKBElokSUiBJRIkpEiSgRJaJElIgSUSJKxM1JxNH2tLOwfY5ElIgSUSJKRIkoESWiRNzARAxNGIpRIkpEiSgRJaJElIgSUSJuZiI2Zdg9oigRJaJElIgSUSJKRIkoETc2EXufcZaIElEiSkSJKBElokSUiJuciI4iSkSJKBElokSUiBJRIkpEr0WUiBJRIkpEiSgRJaJElIjTEtE7miWiRJSIElEiSkSJKBElos9FlIgSUSJKRIkoESWiRJSIElEiSkSJKBElokSUiBJRIpYkYnnaSUSJKBElokSUiBJRIkrETUjEQ3OORJSIElEiSkSJKBElokRc+0RcbCSiRJSIElEiSkSJKBElokQsSUQAADacRAQAIJCIAAAEEhEAgEAiAgAQSEQAAIKciDkOBxJxdPvJ5zT/BQBgneREzKeHE3Gu8wEAqJdEBAAgWDgRwxPN7eegAQCoWnkihgic9opElQgAULuciOm/410cRey+mQUAgHrlRMwHEneTiAf+iwAAsCzlH3rTe44nmgEA1s9SEnHs7SoAAGukMBEBANgcJYk4Gm0FB77ZAADsHUcRAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQ5ETMpyUiAABjRxEBAOhwFBEAgEAiAgAQSEQAAIKciOm/Y4kIAMC2nIjXX3/9WCICALBNIgIAEEhEAAACiQgAQCARAQAIJCIAAEFOxNGR0VgiAgCwzVFEAAACiQgAQCARAQAIJCIAAIG3qwAAEDiKCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAwF5LsXHg28BcJGLVtowxxpiVnxwbB77TZC4SsWqWDIDVJxFrJBGrlpfsi77j4Y0v/s7kERPf9Yg7TDzyDt/9yC/Z8agv+Z5HfWn2vY/+suz7ksd8eXanx5x0p8dO3HniK+78uK/4/omvTH7g8dlXJXd5QvLVyV2TJyZf84PZk742+aHsyV93yo6v/+HkcPYNP5KckdzxR7On3PHHnvKN2Y8/9ZsaP/G0b87u9rRvudvTJ+4+8a13P3PiJ8/8tolnfNtPTZyc3OOZybcnP50cSb4jOZQ86zuTn8nO+q6f3fHdyT3Pzr7n1OTZyff+XPac5Pt+PnvunX7hhF88587Zvc75/nudu+Pe5/7Avc+b+KXz7jLxvLvcZ+KuE+ff9b7n/2D2yxckP5TcL3n+Kcn9sxf8cPKAiR9JfuWF2Y/+avKi5MeSX0suTH78tOzFP/HrjZfc7YE77v6gi3Y8+KKffPDFEw+5+KcmLpl46CX3mLj0Hr9x6U9nv/nS5FD2W0d/Jvvt5LKfTR42cc+Jl93zdyZOTX735cnPJb+XvCL5+d/PXvkLyR9kl//i6Tvu9YdXNO79R6/KfumPkysnHn7lfSauus8jrrrvjqvv+8irfzl71Kvvlz06ueb+2WOuecDEax7w2IlfSR732uRXs8dfm/xa8oTkutOSJ2av+/Un7Xjgk17/wCfveNDhN+w44w0PPuON2UOekrxp4qlveujEmx/6tDf/Rvb0tyS/mZ15/W9lz0je+tvJMyceNvG2hx2Z+J3kWW9Pfjc5K3lH8nvJ2ck7fz95dvauP3jOjtOf++7GH57znuyPzk1umDjvhj+eeG/y8Odl73v4+e97RHbB+x+ZPT/5wKOyF3zg0RM3PvqFE49JXvTB5LHZhR9KHpe8OPmTxycvyf70CclFE0+86M+eePGOJ13y59mTL03+Ijv80uTDyRlHs4+ccdlHnrLjo0992Qkv/9jTsld87OkTxyZeeezMiY+fefnHn5Fd8ZfJM5NXJX91JLsyuelZyVUTZ131ibOu3nH21Tef/eqJZyfXfDJ7zmuScfLc12afSs65Nrvl3OtOeN2nzzvhea9PPjPxhs+cP3Hr+W+89YIdn73gTZ99fvbmv35B9pbkb16YXD/xous/N/HWiQvf+rcXvm3ixcnb/y57SfKOzycXJe9M/j65+F3ZP1zy7sY/XvqeHS+9Ifmniff+09GJf04ue1/2L5e9/19eln3gX1/euPHfXpF98N9e+cF/n/jQxOUf+o/L/2Tiion/vOJPJ16V/Nl/JVcmf578d3JV8hfJ8auTD2f/8+qP7Ljmo19Y2Fgi1kkiVk0iSkSJKBElokSUiOwFiVg1iSgRJaJElIgScd8Sca7XH6a6kIhVk4hVk4gSUSJKRIkoEfczEQt3T7kuJGLVJGLVFk7E/L94KRHziT1NxHwTIRHzmRJRIkpEiSgRJSKrSSJWrZ2IObqaRMxf7jIR83dzIubTORHzaYkoESWiRJSIG5uIo+1p75La50jENSARqyYRJaJElIgSUSIe1FHEdhOGYpSIa0AiVq0wEduvHx5IxPbFyhOx/VM5EfPpHIchEbduPxJRIkpEiSgR603E8Yky7B5RlIhrQCJWrZuIYVIi5hP5KGJTid1E3CnD7aOI+XR+LeJOJbYScacPt1+LmE/no4g7lXgiEduhmBMxn3AUUSJKRIkoEdcmEcd9zziPJeJakIhV6yZi9yhitxsXSMTuzEzE7hPNElEiSkSJKBHXLBEdRVxjErFq5Yk487WIMxMxv6NZIkpEiSgRJaJEzLwWcb1JxKrtQyK2n2u+7enmEx96IxElokSUiBJxMxPRO5rXnkSsWkkihrerbE15orn37SozE3H47SrddzSHLZGIElEiSkSJWGkiDpOIa0AiVm3LX1eRiBJRIkpEiSgR2QMSsWoSUSJKRIkoESXifibikeKRiLWTiFWTiBJRIkpEiSgR9y0RD805ErFqErFqElEiSkSJKBEl4r4l4mLGErFOErFqElEiSkSJKBElokRkL0jEqlkyAFafRKyRRKyaJQNg9UnEGknEqlkyAFafRKyRRKyaJQNg9UnEGknEqlkyAFafRKyRRKyaJQNg9UnEGknEqlkyAFafRKyRRKxavUs2MsYYszKz1//mS8QaScSq1btk6V+k9id+A3BQJCK9JGLV6l0yiQiwIiQivSRi1epdMokIsCIkIr0kYtXqXTKJCLAiJCK9JGLV6l0yiQiwIiQivSRi1epdMonIftraGnXl83svXH61i23Mgd8h0CYR6SURq1bvkklEDkTIs32rtfYNSURWjUSkl0SsWr1LJhE5EBIRuiQivSRi1fZiyY5MmeXeikTkQPQmYvO8c/cy7Welh69t4JLhW703OvO2YO9IRHpJxKotccmaFLzxxhu3OpPOXG4rSkQORG+VhW91T3R/cOFLzrzRadcAe0ci0ksiVm0pSzZQhgOtuMsblYgciIEnmoezbfjayi8580ZLrg2WSyLSSyJWbfdLVh6H3VDcze1KRA7EXIn4RUt6onnaDYUbDe+2hn0jEeklEau2yyVLqz+tAEejrca0htzNvyoSkQMxbyJO+8HdnFl+o7A/JCK9JGLVdrNk0/pwu/2i6Zdc8B8WiciBWPiJ5uW+FnGBa4C9IxHpJRGrtvCSDfThXIm4cCVKRA7EAT7RPLMGPcvMQZGI9JKIVVtsyWa+/rDwiebWhef+50UiAqwIiUgviVi1hRNx6LDg/JP+eZn33SsSEWBFSER6ScSqLbBki72FeXjygcS5KlEiAqwIiUgviVi1xRJx1iHB+V6LeOKnJCJAlSQivSRi1fYiEXtDsTARyytRIgKsCIlIL4lYtaoT0RhjzIrMXu+tJGKNJGLVqk7Eks0wxhiz1yMR6SURq7bAkklEY4wx7ZGI9JKIVVtgyQrf0TxXIjbvaJaIxhhT3UhEeknEqi22ZCUHEudKxKYPJaIxxlQ3EpFeErFqiy1ZyYHE8kRsH0KUiMYYU91IRHpJxKotvGQDBxJ7PxdxIBQX6MOxRDTGmJUZiUgviVi13SzZUiKt3Ye7TMT8wQsDN9T+bvvL48ePn3baaeVXtcTp3vSKzFx35rxXuG9371KmZGvr+o3CVL3xZkVGItIrr1p+eGxJxNrscsl2uWdZuA97b3rhROz+4L7tNFd27ywRm5GIxswciUgvRxGrtvslS/8yLPAnm8PrD+ftw/EeJ+K+zcrunSViMxLRmJkjEeklEau2lCXLu5jCUMxxuMs+HEvEOa9h3huSiM1IRGNmjkSkl0Ss2rKWLD0MRiemtxWbMgxxuFgfjpeXiKPbz/CFDx8+fNJJJ6XTJ5988nXXXZe/e+655zZnptPhdk8//fR0fr6GU0455YYbbghXG246T7pYunDzU81tzfy9dnmxwsv3fnd4m4cT8dixY6eddlq+G9N/0+l0zrRbTzeULhZew5nPbN+9adJl2mfOvJW8YcePH89Lduqpp/ZubfrV8m+ariQ9JGbeXc1N54vlmw6bujX4UNla9EHY/FRzgeGlae7MwoefMXlGEpE+ErFqS1yyJvma5mm34qhThrvpw/FBJGLaNYcLpz1ps99vpr2DzjvlMM0Ot/em0xw9erT7U6kfSn6vwl9/l5fvfnfmNg/cvekO6f5s+47qTr5j2+ek2+reS6PtHiu/lXxOKsP29oetzTfUnuYxMG1rc74O3/TwQ2Vr0QfhtJ+atjRbcz78jMkzkoj0kYhVW/qStfNvdPvKWlYcZt098vBuOny3/WX3B3svnHbizS47d8JJ2xPOPPnkk/OXeb+cjzK1zznllFMGtvnYsWOj2x9ESufkQzq9yTT8W897scLLh++WbPO0Ozz/bL6jjh8/vrX9Lu8mwz73uc/1bkC+J7uJ1QTh1okmzPd/4a3kL9OW58sMbG3qqOZWmrqbdnflY4PNj2ydyLAFHirzPgibn+pucHMEtfsLlj/8jMkjEeklEau2d0s2LRGXdf37n4jtXWRKiO6Z4QdzGLRjY3gz8uRdfPipfHP5ec/mp6ZNuPKZFxu4uwqvoXybu6d7j/5tnXiOeNrBqxR1o9ZzzfnLfIc3vZevIX9ZeCt5w6Y9w9tcT3g5QfpNu0c1p11D75Q/VOZ9EObT3dJOGxx+6/YvOLyUxnRnJBHpIxGrttdL1t5V1Z6Iw3vwgTOPHTuWduKHDx9uXt81cPnm1WgDVTZwge6Vz7zYwN1VeA3l29w9Hbqumab6pm1hvjPz6XzMLR+aa47FjVpH4Qpvpfee6W5teCSkyc9NT9vU/N38EsS0kdMOjW4VPFTmfRCObn8osr1Jvb91yVIa052RRKSPRKzaPizZ6MRL/mpPxJKbC2c27xGYtquddtPl++jCffe8u/gF7szhbS45Pdc25CDMB9By2OQfyeWTn2Vunl0tvJWZazrtetq92p3UhOFh0H1n0wIPlcIN7s3s5h7r/QWHl9KY7owkIn0kYtX2Z8ny/mXTEjHt9POXqR9OP/30fPho5jXPuy8uvPxyr7bk/hn4keE7v/xqR9vPNbefBs3H6/LfrBm1jrkV3srMNZ12PSX3QKrW8L6S5oDnYg+Vwg3uTcR20xYuhzEDM5KI9JGIVdu3JVvWu1Qa3R1Z3uv1flhK8yL89j9oA7vFpeyd84GagRe29V5JeCvBzCncp8+76x++fPhuyTZPu8MXfqJ5q/XKwNGJ1wc2p0e3/1ScZT3R3HuB5jWBA5vanuYDcJo31yz2UCnc4N7XEE57onneh58xeSQivSRi1fZzyfY6EXMw9P7J4+67FfYhEbsXaD53ZeBKcjyE36KbuMObsfDFCi8fvluyzdPumWmrNvx2lTz5w2Ta/2uQbzQXV/tNHIW3MnNN81HKUFDNMcCBTe3O7h8qJWfm0923n0x7u8q8Dz9j8khEeknEqtW7ZN09Y3MwJ+3gmuNF6UTz2SbTPskkn24fYlrK3jmHSvOSs95PR+nedPOxKs0ePJ2Tf3A/P3VkrkQs2eZpRdQ8o5p+tvtxNDMPZzVvrwjb1v70m/JbmbmmuQbbnyHT/hTB4Y1sf+hNvunm+F75Q2Vg23rPbO6NZiGaK+99Fn5FHn6muhlJRPpIxKrVu2S9e+RpH4/c3cG1d4vtd3F2v9v9svDM5uBSd5qnFLs3Pe232OfPLu797Qa+O3ObB+7eBT46u5nu5wfmA33du6v8o7OHf9nmvcbNNB9MPW0jez86O3VX878GJQ+Vkm3rnplPNx8GXvJbr8LDz1Q3I4lIH4lYtXqXbNoe+dixY+0/ZJZOpC+7L0Jr7xbTj+TLN4eewk5zsb3zVuttqs3fXMv73+bwUfem8+SDnwN/12+vZ7h5er87vM3dbml/d64/wNeefOi4/aHTObd6P1im8A/wzfxljx49Ou8f4Gv/DZR802ELZz5UdpOIW60/ClPyWx/4w89UNxKRXhKxavUu2fAe2Riz5R3KZr9GItJLIlat3iWz4zNm5khEsz8jEeklEatW75LZ8RkzcySi2Z+RiPSSiFWrd8ns+IyZORLR7M9IRHpJxKrVu2R2fMYYsyIjEeklEatW75JJRGOMWZGRiPSSiFWrd8kkojHGrMhIRHpJxKrVu2QS0RhjVmQkIr0kYtXqXbKRMcaYlZm9/jdfItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkgGw+iRijSRi1SwZAKtPItZIIlbNkrHeRhszB35Xw56SiDWSiFWzZKy31E5b6z4SkU0gEWskEatmyVhvORH/bn0n/QssEdkEErFGErFqloz11iTiX996y1qSiGwIiVgjiVg1S8Z6k4iwHiRijSRi1SwZ661JxM/e+qm1JBHZEBKxRhKxapaM9XZbIn5mvJYkIhtCItZIIlbNkrHeJCKsB4lYI4lYNUvGerstET/9yT3SfDJhOLN7sb24dYnIhpCINZKIVbNkrLcmEW/99M17IV3/zNPdL5dIIrIhJGKNJGLVLBnr7bZEvOXmpZuE35Rz2t/qXmyJJCIbQiLWSCJWzZKx3lqJ+Iml226//nO6J/aIRGRDSMQaScSqWTLWW5OIn7nlpqVLVz7tnHyie4Glk4hsCIlYI4lYNUvGerstET9109JNCnDKOTnbei+zXBKRDSERayQRq2bJWG+tRPyrpdvOv/5z2t/qXmyJJCIbQiLWSCJWzZKx3ppE/PT4L/dCuv6Zp7tfLpFEZENIxBpJxKpZMtbbXidizr88w024R5UoEdkQErFGErFqloz1dlsifvLja0kisiEkYo0kYtUsGeutScRbPnlsLUlENoRErJFErJolY71JRFgPErFGErFqloz1dlsi3vyxtSQR2RASsUYSsWqWjPXWJOKnbv7oWpKIbAiJWCOJWDVLxnq7LRE/8dG1JBHZEBKxRhKxapaM9ZYT8chaj0RkExyRiBU6IhFrZslYb6ONmQO/q2FPScQaScSqWTLW20GH2/7Ngd/VsKckYo0kYtUsGQCrTyLWSCJWzZIBsPokYo0kYtUsGQCrTyLWSCJWzZIBsPokYo3yquUXS+uN6lgyAFafRKyRo4hVs2QArD6JWCOJWDVLBsDqk4g1kohV29+/AmGMMcYsOBKxOkckYrUOGWOMMfXMge83mYtEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQ5ETMpyUiAADjE4mY41AiAgAwdhQRAIAOiQgAQJAT8dprrx1LRAAAtklEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQ+FxEAgEAiAgAQSEQAAAKJCABAIBEBAAi8oxkAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgQ+9AQAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAACCnIjpv2OJCADAtpyIOQ4lIgAAY080AwDQIREBAAgkIgAAgberAAAQ5EQcjUZjiQgAwDbvaAYAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIDA32gGACBwFBEAgEAiAgAQSEQAAIKciPm0RAQAYOwoIgAAHY4iAgAQSEQAAAKJCABAIBEBAAhyIqb/jiUiAADbvKMZAIDAE80AAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABDkREz/HUtEAAC25UQcjUZjiQgAwLaciF/4wiQOJSIAAGOJCABAh0QEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABBIRAAAAokIAEAgEQEACCQiAACBRAQAIJCIAAAEEhEAgEAiAgAQSEQAAAKJCABAIBEBAAgkIgAAgUQEACCQiAAABBIRAIBAIgIAEEhEAAACiQgAQCARAQAIJCIAAIFEBAAgkIgAAAQSEQCAQCICABDkRDwyGo0lIgAA2yQiAACBRAQAIJCIAAAE3q4CAEAgEQEACCQiAACBRAQAIJCIAAAEA4k4uv0sfBO7+VkAAPbfcCIOfFlOIgIA1EUiAgAQLJaI3WefB87JZzbfUowAACsuJ+LnP//5cfFrEaedbp/TvYxEBACoxXAi9n7Zm47TjhmOJSIAQG0WS8RwJQNB2D1HIgIArLhdJuLMIBx3Dj8e+K8MAMCwBRJxXPDmlGnnHPjvCwDATAOJuHQSEQCgCvuTiJ5iBgCoyH4eRQQAoAoSEQCAQCICABBIRAAAgnYiHjHGGGOMMWZ7ciIeMsYYY4wxpjUpEf8f9w7fjQ==)
&]
[s0; &]
[s5; Let as see actual code for HelloWorld U`+`+ application:&]
[s0; &]
[s7; #include <CtrlLib/CtrlLib.h>&]
[s7; &]
[s7; class HelloWorld : public TopWindow `{&]
[s7; -|MenuBar menu;&]
[s7; -|StatusBar status;&]
[s7; -|&]
[s7; -|void FileMenu(Bar`& bar);&]
[s7; -|void About();&]
[s7; &]
[s7; public:&]
[s7; -|typedef HelloWorld CLASSNAME;&]
[s7; &]
[s7; -|HelloWorld();&]
[s7; `};&]
[s7; &]
[s7; void HelloWorld`::About()&]
[s7; `{&]
[s7; -|PromptOK(`"`{`{1`@5 `[`@9`= This is the`]`::`@2 `[A5`@0 Ultimate```+```+
Hello world sample`}`}`");&]
[s7; `}&]
[s7; &]
[s7; void HelloWorld`::FileMenu(Bar`& bar)&]
[s7; `{&]
[s7; -|bar.Add(`"About..`", THISBACK(About));&]
[s7; -|bar.Separator();&]
[s7; -|bar.Add(`"Exit`", THISBACK(Close));&]
[s7; `}&]
[s7; &]
[s7; HelloWorld`::HelloWorld()&]
[s7; `{&]
[s7; -|AddFrame(menu);&]
[s7; -|AddFrame(status);&]
[s7; -|menu.Add(`"File`", THISBACK(FileMenu));&]
[s7; -|status `= `"Welcome to the Ultimate`+`+ !`";&]
[s7; `}&]
[s7; &]
[s7; GUI`_APP`_MAIN&]
[s7; `{&]
[s7; -|SetLanguage(LNG`_ENGLISH);&]
[s7; -|HelloWorld().Run();&]
[s7; `}&]
[s0;3 &]
[s5; OK, lots of unknown stuff here, but lets go slowly line by line.&]
[s5; First of all we include `"CtrlLib/CtrlLib.h`"; this header includes
most of the U`+`+ widgets. By the way all U`+`+ widgets have
the base class [^topic`:`/`/CtrlCore`/src`/Ctrl`$en`-us`#`:`:Ctrl`:`:class^ Ctrl]
and that`'s way U`+`+ widgets are also named `"Ctrls`".&]
[s5; Next we derived HelloWorld class from [^topic`:`/`/CtrlCore`/src`/TopWindow`$en`-us`#`:`:TopWindow`:`:class^ T
opWindow] which represent basic independent OS window with stuff
like caption, close/zoom/restore buttons etc. In plain English
it`'s our main window;)&]
[s5; Our HelloWorld window will have menu bar and status bar and
in class they are saved like two private members.&]
[s0; &]
[s7; MenuBar menu;&]
[s7; StatusBar status; &]
[s7; &]
[s0; &]
[s5; In constructor of HelloWorld with a help of [^topic`:`/`/CtrlCore`/src`/Ctrl`$en`-us`#`:`:Ctrl`:`:AddFrame`(`:`:CtrlFrame`&`)^ A
ddFrame] function we added menu bar and status bar. AddFrame
will add those elements as [^topic`:`/`/CtrlCore`/srcdoc`/AboutFrames`$en`-us^ Fram
es], placing them at border of TopWindow and reducing the view`-area
of window. Both MenuBar and StatusBar know where they should
place self when used as Frames (MenuBar at the top, StatusBar
at the bottom).&]
[s5; Next line in constructor is very interesting&]
[s0; &]
[s7; menu.Add(`"File`", THISBACK(FileMenu));&]
[s0; &]
[s5; and deserves more explanation. U`+`+ is using [^topic`:`/`/Core`/src`/Callbacks`$en`-us^ c
allbacks] `- callbacks can be described as a very generalized
form of function pointers. Each Callback represents some kind
of action (usually calling a certain function or a certain object
method) that can be invoked at any time. Now, &]
[s0; &]
[s7; THISBACK(x)&]
[s0; &]
[s5; is a macro that expands to&]
[s0; &]
[s7; callback(this, `&CLASSNAME`::[@3 x][@0 )]&]
[s0;*C@3 &]
[s5; [%- where x] is name of method we want to call with this action.
Function [^topic`:`/`/Core`/src`/Callbacks`$en`-us`#`:`:callback`(OBJECT`*`,void`(METHOD`:`:`*`)`(P1 p1`)`)^ c
allback] is a template function and in order to work you must
define CLASSNAME variable and thats way every U`+`+ class that
use [^topic`:`/`/Core`/src`/Callbacks`$en`-us`#`:`:THISBACK`(x`)^ THISBACK]
macros has next line of code&]
[s0; &]
[s7; typedef HelloWorld CLASSNAME;&]
[s0;3 &]
[s0;3 &]
[s5; So basically[3 ]&]
[s0;3 &]
[s7; menu.Add(`"File`", THISBACK(FileMenu));&]
[s0; &]
[s5; adds `"File`" menu in menu bar of our application and when a
user click on `"File`" U`+`+ will call corresponding FileMenu
function from our HelloWorld class&]
[s0;3 &]
[s7; void HelloWorld`::FileMenu(Bar`& bar)&]
[s7; `{&]
[s7; -|bar.Add(`"About..`", THISBACK(About));&]
[s7; -|bar.Separator();&]
[s7; -|bar.Add(`"Exit`", THISBACK(Close));&]
[s7; `}&]
[s0;3 &]
[s5; What happens here is that when a user clicks on `"File`" menu,
U`+`+ creates a pop up menu bar and than calls FileMenu function
which parameter is address of that created menu bar. Then FileMenu
adds `"About`" and `"Exit`" choices, adds separator between them
and binds actions to that choices to corresponding function calls
from our HelloWorld object (see more detailed dicussion of callbacks
involved [^topic`:`/`/CtrlLib`/srcdoc`/MenuCb`$en`-us^ here]).&]
[s5; Last line of constructor is &]
[s0;3 &]
[s7; status `= `"Welcome to the Ultimate`+`+ !`";&]
[s0; &]
[s5; Class StatusBar has overloaded operator `= which sets text of
our status bar. Nice and clean.&]
[s5; The last function from HelloWorld class is&]
[s0;3 &]
[s7; void HelloWorld`::About()&]
[s7; `{&]
[s7; -|PromptOK(`"`{`{1`@5 `[`@9`= This is the`]`::`@2 `[A5`@0 Ultimate```+```+
Hello world sample`}`}`");&]
[s7; `}&]
[s0;3 &]
[s5; Obviously when user click on `"File`"`->`"About`" in menu this
function is called. PromtOK is handy global function declared
in `"CtrlLib`\RichText.h`", and she pops up prompt dialog with
nice information icon and OK button. Also this dialog has some
information text displayed to user and this text is parameter
of PromtOK function. Notice some strange characters in our info
text, this are [^topic`:`/`/RichText`/srcdoc`/QTF`$en`-us^ QTF
codes] and QTF is the native format for U`+`+ rich texts (formatted
texts).&]
[s5; And on the end we have&]
[s0; &]
[s7; GUI`_APP`_MAIN&]
[s7; `{&]
[s7; -|SetLanguage(LNG`_ENGLISH);&]
[s7; -|HelloWorld().Run();&]
[s7; `}&]
[s0; &]
[s5; As you may guess, every program needs to have entry point where
it execution begins, and in U`+`+ this code begins with GUI`_APP`_MAIN
macro. This macro is tacking care of initialization of U`+`+
GUI application for appropriate OS platform, and on the end closing
and exiting from framework.&]
[s5; Like every good framework U`+`+ also have [^topic`:`/`/Core`/srcdoc`/i18n`$en`-us^ s
upport] for multi lingual programs, so first we set language
of our application to English.&]
[s5; Then we make one object from HelloWorld class and call appropriate
[^topic`:`/`/CtrlCore`/src`/TopWindow`$en`-us`#`:`:TopWindow`:`:Run`(bool`)^ Run]
method defined in TopWindow class which starts our application.&]
[s0; ]]