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 + -
显示快捷键?