test_jsmenu.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:13k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: test_jsmenu.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 19:16:11  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: test_jsmenu.cpp,v 1000.2 2004/06/01 19:16:11 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Vladimir Ivanov, Denis Vakatov
  35.  *
  36.  * File Description:   Test Javascript popup menues
  37.  * 
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <corelib/ncbiapp.hpp>
  41. #include <corelib/ncbienv.hpp>
  42. #include <corelib/ncbiargs.hpp>
  43. #include <html/page.hpp>
  44. #include <html/jsmenu.hpp>
  45. #include <test/test_assert.h>  /* This header must go last */
  46. USING_NCBI_SCOPE;
  47. /////////////////////////////////
  48. // Create popup menu
  49. //
  50. enum EMenuType {
  51.     eSmithPlain,
  52.     eSmithHtml,
  53.     eKurdin,
  54.     eKurdinConf,
  55.     eKurdinSide
  56. };
  57. static CHTMLPopupMenu* CreatePopupMenu(EMenuType type)
  58. {
  59.     CHTMLPopupMenu* menu = 0;
  60.     static char index = '0';
  61.     index++;
  62.     switch (type) {
  63.     case eSmithPlain:
  64.         // Create Smith's popup menu
  65.         menu = new CHTMLPopupMenu(string("MenuSmith_") + index,
  66.                                   CHTMLPopupMenu::eSmith);
  67.         menu->AddItem("Red"  , "document.bgColor='red'");
  68.         menu->AddItem("Yellow","document.bgColor='yellow'");
  69.         menu->AddItem("Green", "document.bgColor='green'");
  70.         menu->AddSeparator();
  71.         menu->AddItem("White", "document.bgColor='white'");
  72.         menu->SetAttribute(eHTML_PM_fontColor, "black");
  73.         menu->SetAttribute(eHTML_PM_fontColorHilite,"white");
  74.         break;
  75.     case eSmithHtml:
  76.         {
  77.         // Create Smith's popup menu with HTML items
  78.         menu = new CHTMLPopupMenu(string("MenuSmithHtml_") + index);
  79.         menu->AddItem("<b>Bold item</b>");
  80.         menu->AddItem("<img src='http://www.ncbi.nlm.nih.gov/corehtml/help.gif'> Image item");
  81.         CHTML_a* anchor = new CHTML_a("some link...", "Link item");
  82.         menu->AddItem(*anchor);
  83.         }
  84.         break;
  85.     case eKurdin:
  86.         menu = new CHTMLPopupMenu(string("MenuKurdinPopup_") + index,
  87.                                   CHTMLPopupMenu::eKurdin);
  88.         menu->AddItem("NIH", "http://www.nih.gov");
  89.         menu->AddItem("NLM", "http://www.nlm.nih.gov");
  90.         menu->AddItem("NCBI","top.location='http://www.ncbi.nlm.nih.gov'");
  91.         menu->SetAttribute(eHTML_PM_disableHide, "true");
  92.         menu->SetAttribute(eHTML_PM_titleColor, "yellow");
  93.         menu->SetAttribute(eHTML_PM_alignV, "top");
  94.         break;
  95.     case eKurdinConf:
  96.         menu = new CHTMLPopupMenu(string("MenuKurdinConfPopup_") + index,
  97.                                   CHTMLPopupMenu::eKurdinConf);
  98.         menu->AddItem("NIH", "http://www.nih.gov");
  99.         menu->AddSeparator();
  100.         menu->AddItem("NLM", "http://www.nlm.nih.gov");
  101.         menu->AddSeparator("text");
  102.         menu->AddItem("NCBI","top.location='http://www.ncbi.nlm.nih.gov'");
  103.         menu->SetAttribute(eHTML_PM_TitleColor, "yellow");
  104.         menu->SetAttribute(eHTML_PM_ItemColor, "#000000");
  105.         menu->SetAttributeGlobal(eHTML_PM_AlignTB, "top");
  106.         menu->SetAttributeGlobal(eHTML_PM_AlignLR, "right");
  107.         break;
  108.     case eKurdinSide:
  109.         menu = new CHTMLPopupMenu("MenuKurdinSide_" + index,
  110.                                   CHTMLPopupMenu::eKurdinSide);
  111.         menu->AddItem("Web sites");
  112.         menu->AddItem("NIH", "http://www.nih.gov");
  113.         menu->AddItem("NLM", "http://www.nlm.nih.gov");
  114.         menu->AddItem("NCBI","http://www.ncbi.nlm.nih.gov");
  115.         menu->AddSeparator();
  116.         menu->AddItem("Netscape", "http://www.netscape.com");
  117.         menu->AddItem("Microsoft","http://www.microsoft.com");
  118.         //menu->SetAttribute(eHTML_PM_disableHide, "false");
  119.         menu->SetAttribute(eHTML_PM_menuWidth, "120");
  120.         menu->SetAttribute(eHTML_PM_peepOffset,"20");
  121.         menu->SetAttribute(eHTML_PM_topOffset, "10");
  122.         break;
  123.     default:
  124.         _TROUBLE;
  125.     }
  126.     return menu;
  127. }
  128. /////////////////////////////////
  129. // Standart HTML test
  130. //
  131. static void Test_Html(void)
  132. {
  133.     LOG_POST("HTML testn");
  134.     // Create HTML page skeleton with HEAD and BODY
  135.     CHTML_html* html = new CHTML_html;
  136.     CHTML_head* head = new CHTML_head;
  137.     CHTML_body* body = new CHTML_body;
  138.     html->AppendChild(head); 
  139.     html->AppendChild(body); 
  140.     // Create menues
  141.     CHTMLPopupMenu* menuSM = CreatePopupMenu(eSmithPlain);
  142.     CHTMLPopupMenu* menuSH = CreatePopupMenu(eSmithHtml);
  143.     CHTMLPopupMenu* menuKP = CreatePopupMenu(eKurdin);
  144.     CHTMLPopupMenu* menuKC = CreatePopupMenu(eKurdinConf);
  145.     CHTMLPopupMenu* menuKS = CreatePopupMenu(eKurdinSide);
  146.     // Add menues to the page
  147.     // !!! We can add Smith's and Kurdin's menu to the BODY only!
  148.     body->AppendChild(menuSM);
  149.     body->AppendChild(menuSH);
  150.     body->AppendChild(menuKP);
  151.     body->AppendChild(menuKC);
  152.     // !!! We can add Kurdin's Side menu to the HEAD only!
  153.     head->AppendChild(menuKS);
  154.     // Add menu calls
  155.     CHTML_a* anchorSM  = new CHTML_a("#","Smith's menu (click me)");
  156.     anchorSM->AttachPopupMenu(menuSM, eHTML_EH_Click);
  157.     CHTML_a* anchorSH  = new CHTML_a("#","Smith's menu with HTML (move mouse over me)");
  158.     anchorSH->AttachPopupMenu(menuSH, eHTML_EH_MouseOver);
  159.     CHTML_a* anchorKP  = new CHTML_a("#","Kurdin's popup menu (move mouse over me)");
  160.     anchorKP->AttachPopupMenu(menuKP);
  161.     CHTML_a* anchorKPc = new CHTML_a("#","Kurdin's popup menu (click me)");
  162.     anchorKPc->AttachPopupMenu(menuKP, eHTML_EH_Click);
  163.     CHTML_a* anchorKC  = new CHTML_a("#","Kurdin's popup menu with configurations (move mouse over me)");
  164.     anchorKC->AttachPopupMenu(menuKC);
  165.     CHTML_a* anchorKCc = new CHTML_a("#","Kurdin's popup menu with configurations (click me)");
  166.     anchorKCc->AttachPopupMenu(menuKC, eHTML_EH_Click);
  167.     CRef<CHTML_blockquote> bc(new CHTML_blockquote);
  168.     bc->AppendChild(anchorSM);
  169.     bc->AppendChild(new CHTML_br(2));
  170.     bc->AppendChild(anchorSH);
  171.     bc->AppendChild(new CHTML_br(2));
  172.     bc->AppendChild(anchorKP);
  173.     bc->AppendChild(new CHTML_br(2));
  174.     bc->AppendChild(anchorKPc);
  175.     bc->AppendChild(new CHTML_br(2));
  176.     bc->AppendChild(anchorKC);
  177.     bc->AppendChild(new CHTML_br(2));
  178.     bc->AppendChild(anchorKCc);
  179.     body->AppendChild(bc);
  180.     body->AttachPopupMenu(menuKS);
  181.     // Enable using popup menus (we can skip call this function)
  182. //  html->EnablePopupMenu(CHTMLPopupMenu::eSmith);
  183. //  html->EnablePopupMenu(CHTMLPopupMenu::eKurdin);
  184. //  html->EnablePopupMenu(CHTMLPopupMenu::eKurdinConf);
  185. //  html->EnablePopupMenu(CHTMLPopupMenu::eKurdinSide);
  186.     
  187.     // Print in HTML format
  188.     html->Print(cout);
  189.     LOG_POST("n");
  190. }
  191. /////////////////////////////////
  192. // Template test
  193. //
  194. static void Test_Template(void)
  195. {
  196.     LOG_POST("nTemplate testn");
  197.     CHTMLPage page("JSMenu test page","template_jsmenu.html"); 
  198.     CNCBINode* view_menues   = new CNCBINode();
  199.     CNCBINode* view_sidemenu = new CNCBINode();
  200.     // Create menues
  201.     CHTMLPopupMenu* menuSP = CreatePopupMenu(eSmithPlain);
  202.     CHTMLPopupMenu* menuSH = CreatePopupMenu(eSmithHtml);
  203.     CHTMLPopupMenu* menuKP = CreatePopupMenu(eKurdin);
  204.     CHTMLPopupMenu* menuKS = CreatePopupMenu(eKurdinSide);
  205.     // Add menues to the page
  206.     // !!! We can add Smith's and Kurdin's menu to the BODY only!
  207.     view_menues->AppendChild(menuSP);
  208.     view_menues->AppendChild(menuSH);
  209.     view_menues->AppendChild(menuKP);
  210.     // !!! We can add Kurdin's side menu to the HEAD only!
  211.     view_sidemenu->AppendChild(menuKS);
  212.     // Add menu calls
  213.     CHTML_a* anchorSP  = new CHTML_a("#","Smith's menu (click me)");
  214.     anchorSP->AttachPopupMenu(menuSP, eHTML_EH_Click);
  215.     CHTML_a* anchorSH  = new CHTML_a("#","Smith's menu with HTML (move mouse over me)");
  216.     anchorSH->AttachPopupMenu(menuSH, eHTML_EH_MouseOver);
  217.     CHTML_a* anchorKP  = new CHTML_a("#","Kurdin's popup menu (move mouse over me)");
  218.     anchorKP->AttachPopupMenu(menuKP);
  219.     CHTML_a* anchorKPC = new CHTML_a("#","Kurdin's popup menu (click me)");
  220.     anchorKPC->AttachPopupMenu(menuKP, eHTML_EH_Click);
  221.     view_menues->AppendChild(anchorSP);
  222.     view_menues->AppendChild(new CHTML_p(new CHTML_br(2)));
  223.     view_menues->AppendChild(anchorSH);
  224.     view_menues->AppendChild(new CHTML_p(new CHTML_br(2)));
  225.     view_menues->AppendChild(anchorKP);
  226.     view_menues->AppendChild(new CHTML_p(new CHTML_br(2)));
  227.     view_menues->AppendChild(anchorKPC);
  228.     view_sidemenu->AppendChild(menuKS);
  229.     page.AddTagMap("VIEW_MENUES",   view_menues);
  230.     page.AddTagMap("VIEW_SIDEMENU", view_sidemenu);
  231.     // Enable using popup menues (we can skip call this function)
  232.     page.EnablePopupMenu(CHTMLPopupMenu::eSmith);
  233.     page.EnablePopupMenu(CHTMLPopupMenu::eKurdin);
  234.     page.EnablePopupMenu(CHTMLPopupMenu::eKurdinSide);
  235.     // Print test result
  236.     page.Print(cout, CNCBINode::eHTML);
  237.     cout << endl << endl;
  238.     LOG_POST("n");
  239. }
  240. /////////////////////////////////
  241. // Test application
  242. //
  243. class CTestApplication : public CNcbiApplication
  244. {
  245. public:
  246.     virtual void Init(void);
  247.     virtual int  Run (void);
  248. };
  249. void CTestApplication::Init(void)
  250. {
  251.     // Set error posting and tracing on maximum
  252.     SetDiagTrace(eDT_Enable);
  253.     SetDiagPostFlag(eDPF_All);
  254.     SetDiagPostLevel(eDiag_Info);
  255.     // Create command-line argument descriptions class
  256.     auto_ptr<CArgDescriptions> arg_desc(new CArgDescriptions);
  257.     // Specify USAGE context
  258.     arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
  259.                               "Test JavaScript Menu");
  260.     // Describe the expected command-line arguments
  261.     arg_desc->AddPositional
  262.         ("feature", "HTML-specific feature to test",
  263.          CArgDescriptions::eString);
  264.     arg_desc->SetConstraint
  265.         ("feature", &(*new CArgAllow_Strings, "html", "template"));
  266.     // Setup arg.descriptions for this application
  267.     SetupArgDescriptions(arg_desc.release());
  268. }
  269. int CTestApplication::Run(void)
  270. {
  271.     // Get arguments
  272.     CArgs args = GetArgs();
  273.     if (args["feature"].AsString() == "html") {
  274.         Test_Html();
  275.     }
  276.     else if (args["feature"].AsString() == "template") {
  277.         Test_Template();
  278.     }
  279.     else {
  280.         _TROUBLE;
  281.     }
  282.     return 0;
  283. }
  284.   
  285. ///////////////////////////////////
  286. // APPLICATION OBJECT  and  MAIN
  287. //
  288. static CTestApplication theTestApplication;
  289. int main(int argc, const char* argv[])
  290. {
  291.     return theTestApplication.AppMain(argc, argv, 0, eDS_Default, 0);
  292. }
  293. /*
  294.  * ===========================================================================
  295.  *
  296.  * $Log: test_jsmenu.cpp,v $
  297.  * Revision 1000.2  2004/06/01 19:16:11  gouriano
  298.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.10
  299.  *
  300.  * Revision 1.10  2004/05/17 21:00:08  gorelenk
  301.  * Added include of PCH ncbi_pch.hpp
  302.  *
  303.  * Revision 1.9  2004/04/05 16:19:57  ivanov
  304.  * Added support for Sergey Kurdin's popup menu with configurations
  305.  *
  306.  * Revision 1.8  2003/12/02 14:29:22  ivanov
  307.  * Added demo for eKurdin menu with onClick event
  308.  *
  309.  * Revision 1.7  2003/10/01 15:57:40  ivanov
  310.  * Added support for Sergey Kurdin's side menu
  311.  *
  312.  * Revision 1.6  2002/12/09 22:13:30  ivanov
  313.  * Added tests for Sergey Kurdin's popup menu
  314.  *
  315.  * Revision 1.5  2002/04/16 19:05:21  ivanov
  316.  * Centralize threatment of assert() in tests.
  317.  * Added #include <test/test_assert.h>. CVS log moved to end of file.
  318.  *
  319.  * Revision 1.4  2002/02/13 20:19:44  ivanov
  320.  * Added support of dynamic popup menues
  321.  *
  322.  * Revision 1.3  2001/08/15 19:42:39  ivanov
  323.  * Added test for use method AddMenuItem( node, ...)
  324.  *
  325.  * Revision 1.2  2001/08/14 17:02:00  ivanov
  326.  * Changed tests for popup menu in connection with change means init menu.
  327.  * Added second test for use menu in HTML templates.
  328.  *
  329.  * Revision 1.1  2001/07/23 21:50:33  vakatov
  330.  * Initial revision
  331.  *
  332.  * ===========================================================================
  333.  */