menu_demo_window.cpp

来自「ncbi源码」· C++ 代码 · 共 358 行

CPP
358
字号
/* * =========================================================================== * PRODUCTION $Log: menu_demo_window.cpp,v $ * PRODUCTION Revision 1000.0  2004/06/01 21:30:49  gouriano * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4 * PRODUCTION * =========================================================================== *//*  $Id: menu_demo_window.cpp,v 1000.0 2004/06/01 21:30:49 gouriano Exp $ * =========================================================================== * *                            PUBLIC DOMAIN NOTICE *               National Center for Biotechnology Information * *  This software/database is a "United States Government Work" under the *  terms of the United States Copyright Act.  It was written as part of *  the author's official duties as a United States Government employee and *  thus cannot be copyrighted.  This software/database is freely available *  to the public for use. The National Library of Medicine and the U.S. *  Government have not placed any restriction on its use or reproduction. * *  Although all reasonable efforts have been taken to ensure the accuracy *  and reliability of the software and data, the NLM and the U.S. *  Government do not and cannot warrant the performance or results that *  may be obtained by using this software or data. The NLM and the U.S. *  Government disclaim all warranties, express or implied, including *  warranties of performance, merchantability or fitness for any particular *  purpose. * *  Please cite the author in any work or product based on this material. * * =========================================================================== * * Authors:  Andrey Yazhuk       * * File Description: * */#include <ncbi_pch.hpp>#include <corelib/ncbidiag.hpp>#include "menu_demo.hpp"#include <FL/Fl_Tile.H>USING_NCBI_SCOPE;enum ETestCommands  {    eCmdFirst = 5000,    eCmdSecond,    eCmdThird,    eCmdRadioA,    eCmdRadioB,    eCmdRadioC,    eCmdCheck1,    eCmdCheck2};staticDEFINE_MENU(Menu)       SUBMENU("&Zoom")        MENU_ITEM_IM(eCmdZoomIn, "Zoom &In", "menu::zoom_in")        MENU_ITEM_IM(eCmdZoomIn, "Zoom &Out", "menu::zoom_out")        MENU_ITEM_IM(eCmdZoomIn, "Zoom &All", "menu::zoom_all")        MENU_ITEM_IM(eCmdZoomSel, "Zoom &Sel", "menu::zoom_sel")        MENU_SEPARATOR()            SUBMENU("&More...")            MENU_ITEM(eCmdZoomIn, "Zoom &In")            MENU_ITEM(eCmdZoomOut, "Zoom &Out")            MENU_ITEM(eCmdZoomAll, "Zoom &All")            MENU_ITEM(eCmdZoomSel, "Zoom &Sel")                END_SUBMENU()        SUBMENU("&Even More...")            MENU_ITEM(eCmdZoomIn, "Zoom &In")            MENU_ITEM(eCmdZoomOut, "Zoom &Out")            MENU_ITEM(eCmdZoomAll, "Zoom &All")            MENU_ITEM(eCmdZoomSel, "Zoom &Sel")                END_SUBMENU()    END_SUBMENU()    SUBMENU("&Updates")        MENU_ITEM(eCmdFirst, "&First")        MENU_ITEM(eCmdSecond, "&Second")        MENU_ITEM(eCmdThird, "&Third")        MENU_SEPARATOR()        MENU_ITEM(eCmdRadioA, "Radio A")        MENU_ITEM(eCmdRadioB, "Radio B")        MENU_ITEM(eCmdRadioC, "Radio C")            MENU_SEPARATOR()        MENU_ITEM(eCmdCheck1, "Check 1")            MENU_ITEM(eCmdCheck2, "Check 2")        END_SUBMENU()       MENU_SEPARATOR()    MENU_ITEM_IM(eCmdZoomIn, "Zoom &In", "menu::zoom_in")    MENU_ITEM_IM(eCmdZoomIn, "Zoom &Out", "menu::zoom_out")END_MENU()staticDEFINE_MENU(ToolBar)       MENU_ITEM_IM(eCmdZoomIn, "Zoom In", "menu::zoom_in")    MENU_ITEM_IM(eCmdZoomOut, "Zoom Out", "menu::zoom_out")    MENU_ITEM_IM(eCmdZoomAll, "Zoom All", "menu::zoom_all")          MENU_ITEM_IM(eCmdZoomSel, "Zoom &Sel", "menu::zoom_sel")     MENU_SEPARATOR()    MENU_ITEM_IM(eCmdZoomIn, "", "menu::zoom_in")    MENU_ITEM_IM(eCmdZoomOut, "", "menu::zoom_out")    MENU_ITEM_IM(eCmdZoomAll, "", "menu::zoom_all")           MENU_ITEM_IM(eCmdZoomSel, "", "menu::zoom_sel")    MENU_SEPARATOR()    MENU_ITEM(eCmdZoomIn, "Zoom In")    MENU_ITEM(eCmdZoomOut, "Zoom Out")    MENU_ITEM(eCmdZoomAll, "Zoom All")           MENU_ITEM(eCmdZoomSel, "Zoom &Sel")END_MENU()///////////////////////////////////////////////////////////////////////////////////CMenuDemoClient::CMenuDemoClient(int x, int y, int w, int h): CDiagPanel(x, y, w, h){    m_Index = 3;    m_Radio = 'A';    m_Check1 = true;    m_Check1 = false;}BEGIN_CMD_MAP(CMenuDemoClient, CCommandTarget)    ON_COMMAND(eCmdZoomIn, &CMenuDemoClient::OnZoomIn)    ON_COMMAND(eCmdZoomOut, &CMenuDemoClient::OnZoomOut)    ON_COMMAND(eCmdZoomAll, &CMenuDemoClient::OnZoomAll)    ON_COMMAND(eCmdZoomSel, &CMenuDemoClient::OnZoomSel)        ON_COMMAND(eCmdFirst, &CMenuDemoClient::OnFirst)    ON_COMMAND(eCmdSecond, &CMenuDemoClient::OnSecond)    ON_COMMAND(eCmdThird, &CMenuDemoClient::OnThird)        // register update handler enabling/disabling commands    ON_UPDATE_COMMAND_UI(eCmdFirst, &CMenuDemoClient::OnUpdateFirst)    ON_UPDATE_COMMAND_UI(eCmdSecond, &CMenuDemoClient::OnUpdateSecond)    ON_UPDATE_COMMAND_UI(eCmdThird, &CMenuDemoClient::OnUpdateThird)        // register one command handler and one update handler for     // [eCmdRadioA..eCmdRadioC] command range    ON_COMMAND_RANGE(eCmdRadioA, eCmdRadioC, &CMenuDemoClient::OnRadio)    ON_UPDATE_COMMAND_UI_RANGE(eCmdRadioA, eCmdRadioC, &CMenuDemoClient::OnUpdateRadio)        ON_COMMAND(eCmdCheck1, &CMenuDemoClient::OnCheck1)    ON_COMMAND(eCmdCheck2, &CMenuDemoClient::OnCheck2)        // register update handler checkin/unchecking items    ON_UPDATE_COMMAND_UI(eCmdCheck1, &CMenuDemoClient::OnUpdateCheck1)    ON_UPDATE_COMMAND_UI(eCmdCheck2, &CMenuDemoClient::OnUpdateCheck2)        END_CMD_MAP()int     CMenuDemoClient::handle(int event){    // Popup menu should be shown on CGUIEvent::ePopupSignal, however it is not     // possible in this example, so we use FL_PUSH    if(event == FL_PUSH) {                        CPopupMenu1 menu(Fl::event_x_root(), Fl::event_y_root(), Menu, this);        menu.Popup();                return 1;    }    return CDiagPanel::handle(event);}void    CMenuDemoClient::PostMessage(const char* message){    Post(SDiagMessage(eDiag_Info, message, strlen(message)));}void    CMenuDemoClient::OnZoomIn(){    PostMessage("OnZoomIn()");}void    CMenuDemoClient::OnZoomOut(){    PostMessage("OnZoomOut()");}void    CMenuDemoClient::OnZoomAll(){    PostMessage("OnZoomAll()");}void    CMenuDemoClient::OnZoomSel(){    PostMessage("OnZoomSel()");}void    CMenuDemoClient::OnFirst(){    m_Index = 1;    PostMessage("OnFirst()");}void    CMenuDemoClient::OnSecond(){    m_Index = 2;    PostMessage("OnSecond()");}void    CMenuDemoClient::OnThird(){    m_Index = 3;    PostMessage("OnThird()");}void    CMenuDemoClient::OnUpdateFirst(ICmdUI* pCmdUI){    pCmdUI->Enable(m_Index != 1);    PostMessage("OnUpdateFirst()");}void    CMenuDemoClient::OnUpdateSecond(ICmdUI* pCmdUI){    pCmdUI->Enable(m_Index != 2);    PostMessage("OnUpdateSecond()");}void    CMenuDemoClient::OnUpdateThird(ICmdUI* pCmdUI){    pCmdUI->Enable(m_Index != 3);    PostMessage("OnUpdateThird()");}void    CMenuDemoClient::OnRadio(TCmdID cmd){    switch(cmd)    {    case eCmdRadioA: m_Radio = 'A'; break;    case eCmdRadioB: m_Radio = 'B'; break;    case eCmdRadioC: m_Radio = 'C'; break;    };    string s = "OnRadio() for ";    s += m_Radio;    PostMessage(s.c_str());}// here we are handling 3 commands in one handlervoid    CMenuDemoClient::OnUpdateRadio(ICmdUI* pCmdUI){    char ch = 0;    switch(pCmdUI->GetCommand())    {    case eCmdRadioA: ch = 'A'; break;    case eCmdRadioB: ch = 'B'; break;    case eCmdRadioC: ch = 'C'; break;    };    pCmdUI->SetRadio(m_Radio == ch);        string s = "OnUpdateRadio() for ";    s += ch;    PostMessage(s.c_str());}void    CMenuDemoClient::OnCheck1(){    m_Check1 = ! m_Check1;    PostMessage("OnCheck1()");}void    CMenuDemoClient::OnCheck2(){    m_Check2 = ! m_Check2;    PostMessage("OnCheck2()");}void    CMenuDemoClient::OnUpdateCheck1(ICmdUI* pCmdUI){    pCmdUI->SetCheck(m_Check1);    PostMessage("OnUpdateCheck1");}void    CMenuDemoClient::OnUpdateCheck2(ICmdUI* pCmdUI){    pCmdUI->SetCheck(m_Check2);    PostMessage("OnUpdateCheck2");}///////////////////////////////////////////////////////////////////////////////////CMenuDemoWindow::CMenuDemoWindow(){    //CRef<CResourceManager> manager(new CResourceManager("E:\\Projects\\c++\\src\\gui\\res\\"));    CRef<CResourceManager> manager(new CResourceManager("<std> ; <home>"));    manager->RegisterAlias("menu::zoom", "zoom.png");    manager->RegisterAlias("menu::zoom_in", "zoom_in.png");    manager->RegisterAlias("menu::zoom_out", "zoom_out.png");    manager->RegisterAlias("menu::zoom_all", "zoom_all.png");    manager->RegisterAlias("menu::zoom_sel", "zoom_sel.png");    CMenu::SetResourceManager(manager);    m_Window.reset(x_CreateWindow());}CMenuDemoWindow::~CMenuDemoWindow(){    CRef<CResourceManager> empty;    CMenu::SetResourceManager(empty);}const static int kWidth = 600;const static int kHeight = 400;Fl_Double_Window* CMenuDemoWindow::x_CreateWindow() {    Fl_Double_Window* window = new Fl_Double_Window(kWidth, kHeight, "Menu Demo");    window->user_data((void*)(this));        m_Client = new CMenuDemoClient(0, 0, kWidth, kHeight);    m_Client->end();    m_MenuBar = new CMenuBar1(0, 0, kWidth, 0);    m_MenuBar->SetItems(Menu);    m_MenuBar->SetCmdTarget(m_Client);       CPoint sz = m_MenuBar->GetPreferredSize();    m_MenuBar->size(kWidth, sz.Y());        m_ToolBar = new CMenuBar1(0, sz.Y(), kWidth, 0);    m_ToolBar->SetItems(ToolBar);    m_ToolBar->SetCmdTarget(m_Client);        sz = m_ToolBar->GetPreferredSize();    m_ToolBar->size(sz.X(), sz.Y());        int off = m_MenuBar->h() + m_ToolBar->h();    m_Client->resize(0, off, kWidth, kHeight - off);        Fl_Group::current()->resizable(m_Client);    window->end();      m_Client->PostMessage("Started...");    m_Client->PostMessage("Press mouse button in empty space to display Popup menu");    return window;}/* * =========================================================================== * $Log: menu_demo_window.cpp,v $ * Revision 1000.0  2004/06/01 21:30:49  gouriano * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.4 * * Revision 1.4  2004/05/21 22:27:53  gorelenk * Added PCH ncbi_pch.hpp * * Revision 1.3  2004/05/13 17:59:18  yazhuk * Replaced CDiagPanel1 with CDiagPanel * * Revision 1.2  2004/05/03 19:51:37  yazhuk * Implemented command updates, pluged-in new resources * * Revision 1.1  2004/04/22 17:05:15  yazhuk * Initial revision * * =========================================================================== */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?