dload_menu.cpp

来自「ncbi源码」· C++ 代码 · 共 812 行 · 第 1/2 页

CPP
812
字号
/* * =========================================================================== * PRODUCTION $Log: dload_menu.cpp,v $ * PRODUCTION Revision 1000.3  2004/06/01 20:43:46  gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.30 * PRODUCTION * =========================================================================== *//*  $Id: dload_menu.cpp,v 1000.3 2004/06/01 20:43:46 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:  Mike DiCuccio * * File Description: * *    CDLoadMenuData_Impl -- Abstract class to hold callback information *                          necessary to spawn a document / data loader plugin *                          from an FLTK callback * *    COpenMenuData      -- Class to hold / launch plugin to open a new *                          document *    CImportMenuData    -- Class to hold / launch plugin to import data into *                          an existing record *    CSaveAsMenuData    -- Class to hold / launch plugin to save the current *                          record *    CUnloadMenuData    -- Class to unload a document from memory * *    CDocLoaderMenuMgr  -- Manager for dynamic FLTK document laoder plugin *                          menu + callback data */#include <ncbi_pch.hpp>#include <gui/plugin/PluginMessage.hpp>#include <gui/plugin/PluginMRUList.hpp>#include <gui/plugin/PluginMRUEntry.hpp>#include <gui/core/dload_factory.hpp>#include <gui/core/dload_menu.hpp>#include <gui/core/doc_manager.hpp>#include <gui/core/idocument.hpp>#include <gui/core/plugin_registry.hpp>#include <gui/core/plugin_utils.hpp>#include <gui/core/plugin_handle.hpp>#include <gui/core/plugin_dlg.hpp>#include <gui/utils/message_box.hpp>BEGIN_NCBI_SCOPEUSING_SCOPE(objects);//// internal base class used by suclasses.  This class exists to keep// CPluginHandle private within the context of this header.//class CDLoadMenuData_Impl : public IDLoadMenuData{public:    //CDLoadMenuData_Impl(CPluginHandle plugin);    CDLoadMenuData_Impl(const string& plugin_name);    virtual ~CDLoadMenuData_Impl() {}protected:    string        m_Plugin;};//// concrete data class for loading new documents//class COpenMenuData : public CDLoadMenuData_Impl{public:    COpenMenuData(const string& plugin)        : CDLoadMenuData_Impl(plugin)    {    }    COpenMenuData(CPluginHandle plugin)        : CDLoadMenuData_Impl(plugin.GetClassName())    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( m_Plugin.empty() ) {            return;        }        // we create a dummy selection buffer to hold our single document        CPluginUtils::CallPlugin(m_Plugin, eDataCommand_load);    }};class COpenMenuDataEx : public IDLoadMenuData{public:    COpenMenuDataEx()    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( !m_Dlg.get() ) {            m_Dlg.reset(new CPluginDlg(eDataCommand_load));        }        m_Dlg->Show();    }private:    auto_ptr<CPluginDlg> m_Dlg;};//// concrete data class for loading new documents//class CSearchMenuData : public CDLoadMenuData_Impl{public:    CSearchMenuData(const string& plugin)        : CDLoadMenuData_Impl(plugin)    {    }    CSearchMenuData(CPluginHandle plugin)        : CDLoadMenuData_Impl(plugin.GetClassName())    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( m_Plugin.empty() ) {            return;        }        CPluginUtils::CallPlugin(m_Plugin, eDataCommand_search);    }};//// concrete data class for loading new documents//class CManageMenuData : public CDLoadMenuData_Impl{public:    CManageMenuData(const string& plugin)        : CDLoadMenuData_Impl(plugin)    {    }    CManageMenuData(CPluginHandle plugin)        : CDLoadMenuData_Impl(plugin.GetClassName())    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( m_Plugin.empty() ) {            return;        }        CPluginUtils::CallPlugin(m_Plugin, eDataCommand_manage);    }};//// concrete data class for importing into current documents//class CImportMenuData : public CDLoadMenuData_Impl{public:    CImportMenuData(CPluginHandle plugin, IDocument* doc)        : CDLoadMenuData_Impl(plugin.GetClassName()),          m_Doc(doc)    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( m_Plugin.empty()  ||  !m_Doc ) {            return;        }        CPluginUtils::CallPlugin(m_Plugin, eDataCommand_import, m_Doc);    }private:    IDocument* m_Doc;};//// concrete data class for saving current documents//class CSaveMenuData : public CDLoadMenuData_Impl{public:    CSaveMenuData(const string& plugin_name, IDocument* doc)        : CDLoadMenuData_Impl(plugin_name),          m_Doc(doc)    {    }        CSaveMenuData(CPluginHandle plugin, IDocument* doc)        : CDLoadMenuData_Impl(plugin.GetClassName()),          m_Doc(doc)    {    }        //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( m_Plugin.empty()  ||  !m_Doc ) {            return;        }        CPluginUtils::CallPlugin(m_Plugin, eDataCommand_save, m_Doc);    }private:    IDocument* m_Doc;};//// concrete data class for unloading documents//class CUnloadMenuData : public CDLoadMenuData_Impl{public:    CUnloadMenuData(IDocument* doc)        : CDLoadMenuData_Impl(kEmptyStr),          m_Doc(doc)    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( !m_Doc ) {            return;        }        if (CDocManager::ReleaseDocument(m_Doc)) {            m_Doc = NULL;        }    }private:    IDocument* m_Doc;};//// concrete data class for most recently used documents//class CRecentMenuData : public CDLoadMenuData_Impl{public:    CRecentMenuData(CPluginMessage& msg)        : CDLoadMenuData_Impl(kEmptyStr),          m_Msg(&msg)    {    }    //    // DoCallback()    // here we handle the meat of creating a new view    //    void DoCallback()    {        if ( !m_Msg ) {            return;        }        CPluginUtils::CallPlugin(*m_Msg);    }private:    CPluginMessage* m_Msg;};//// default ctor for our base menu data class//CDLoadMenuData_Impl::CDLoadMenuData_Impl(const string& plugin_name)    : m_Plugin(plugin_name){}//// default ctor for the view menu manager class//CDocLoaderMenuMgr::CDocLoaderMenuMgr(Fl_Menu_* menu, const string& base)    : CFltkMenuMgrBase<IDLoadMenuData>(menu){    SetMenuBase(base);}//// Clear()// this clears the contents of our two submenus//void CDocLoaderMenuMgr::Clear(){    // Do our base class clear    x_ClearData();    if ( !m_Menu ) {        return;    }    string base = m_Base;    if ( !base.empty() ) {        base += "/";    }    x_RemoveSubitems(base + "Open");    x_RemoveSubitems(base + "Import");    x_RemoveSubitems(base + "Save as");    x_RemoveSubitems(base + "Unload");    x_RemoveSubitems(base + "Recent Documents");}//// AddOpenMenu()// This fills out a new menu to hold the //void CDocLoaderMenuMgr::AddOpenMenu(){    string menu_base = m_Base;    if ( !menu_base.empty() ) {        menu_base += "/";    }    menu_base += "Open";#if 0

⌨️ 快捷键说明

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