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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: view_plugin.hpp,v $
  4.  * PRODUCTION Revision 1000.5  2004/06/01 19:47:09  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.27
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef GUI_CORE___VIEWPLUGIN__HPP
  10. #define GUI_CORE___VIEWPLUGIN__HPP
  11. /*  $Id: view_plugin.hpp,v 1000.5 2004/06/01 19:47:09 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software / database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software / database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Authors:  Mike DiCuccio
  37.  *
  38.  * File Description:
  39.  *    CViewPlugin -- intermediate abstract class to bridge abstract 
  40.  *                   plugins and views.
  41.  */
  42. #include <gui/utils/reporter.hpp>
  43. #include <gui/core/plugin.hpp>
  44. #include <gui/core/idocument.hpp>
  45. #include <gui/core/iview.hpp>
  46. #include <gui/core/doc_manager.hpp>
  47. #include <gui/core/view_exception.hpp>
  48. #include <gui/core/doc_manager.hpp>
  49. #include <gui/utils/message_box.hpp>
  50. #include <gui/plugin/PluginCommand.hpp>
  51. #include <gui/plugin/PluginReply.hpp>
  52. #include <gui/plugin/ViewCommand.hpp>
  53. BEGIN_NCBI_SCOPE
  54. template<typename ViewType>
  55. class CViewPlugin : public CPlugin<ViewType>
  56. {
  57. public:
  58.     virtual void RunCommand(objects::CPluginMessage& msg);
  59. };
  60. template <typename ViewType>
  61. inline
  62. void CViewPlugin<ViewType>::RunCommand(objects::CPluginMessage& msg)
  63. {
  64.     const objects::CPluginCommand& cmd = msg.GetRequest().GetCommand();
  65.     objects::CPluginReply& reply = msg.SetReply();
  66.     reply.SetStatus(objects::eMessageStatus_failed);
  67.     switch ( cmd.GetCommand() ) {
  68.     case objects::eViewCommand_new_view:
  69.         try {
  70.             // get the views meessage pool name stored in the
  71.             //  Plugin Message context field.
  72.             string pool_name ;
  73.             if (msg.CanGetContext()) {
  74.                 pool_name = msg.GetContext();
  75.             }
  76.             CRef<IView> view(new ViewType(msg, pool_name));
  77.             if ( !view ) {
  78.                 return;
  79.             }
  80.             
  81.             // retrieve the document for further processing
  82.             IDocument* doc = view->GetDocument();
  83.             if ( !doc ) {
  84.                 NCBI_THROW(CViewException, eInvalidView,
  85.                     "Failed to bind view to document");
  86.             }
  87.             // make sure our view receives (in order) the appropriate events
  88.             view->OnDocumentChanged();
  89.             doc->AttachView(view, pool_name);
  90.             CDocManager::UpdateAllViews();
  91.             view->Show();
  92.             
  93.             reply.SetStatus(objects::eMessageStatus_success);
  94.         }
  95.         catch (CException& e) {
  96.             NcbiMessageBox(string("Error creating view:n") + e.GetMsg());
  97.         }
  98.         catch (std::exception& e) {
  99.             NcbiMessageBox(string("Error creating view:n") + e.what());
  100.         }
  101. #ifndef _DEBUG
  102.         catch (...) {
  103.             NcbiMessageBox("Unknown error creating view");
  104.         }
  105. #endif
  106.         break;
  107.         
  108.     default:
  109.         break;
  110.     }
  111. }
  112. END_NCBI_SCOPE
  113. /*
  114. * ===========================================================================
  115. *
  116. * $Log: view_plugin.hpp,v $
  117. * Revision 1000.5  2004/06/01 19:47:09  gouriano
  118. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.27
  119. *
  120. * Revision 1.27  2004/04/26 17:34:09  ucko
  121. * Add headers needed by RunCommand's body, which G++ 3.4 always parses
  122. * immediately.
  123. *
  124. * Revision 1.26  2004/04/07 12:38:06  dicuccio
  125. * Pass CPluginMessage to derived view class constructor
  126. *
  127. * Revision 1.25  2004/01/06 20:46:36  dicuccio
  128. * Moved CFltkCursorGuard into CPlugin - broadly applied to all plugins
  129. *
  130. * Revision 1.24  2004/01/06 20:12:38  dicuccio
  131. * Use CFLtkCursorGuard to change to a waiting cursor
  132. *
  133. * Revision 1.23  2003/12/22 19:13:37  dicuccio
  134. * Call OnDocumentChanged() immediately after creation
  135. *
  136. * Revision 1.22  2003/12/09 15:52:46  dicuccio
  137. * Use CException::GetMsg() instead of what()
  138. *
  139. * Revision 1.21  2003/11/19 20:41:07  friedman
  140. * Added grouping views into group message pools
  141. *
  142. * Revision 1.20  2003/11/14 17:08:17  ucko
  143. * Add "std::" to exception in catch statement to resolve ambiguity
  144. * reported by Compaq's compiler.
  145. *
  146. * Revision 1.19  2003/11/06 19:59:12  dicuccio
  147. * Added #include for doc_manager.hpp
  148. *
  149. * Revision 1.18  2003/11/04 20:59:07  dicuccio
  150. * Use objects:: where required
  151. *
  152. * Revision 1.17  2003/11/04 17:09:04  dicuccio
  153. * Changed API to take a CPluginMessage instead of a paired command/reply
  154. *
  155. * Revision 1.16  2003/10/27 17:28:52  dicuccio
  156. * Removed unnecessary export specifier
  157. *
  158. * Revision 1.15  2003/10/16 15:48:07  dicuccio
  159. * Removed extraneous call to UpdateAllViews()
  160. *
  161. * Revision 1.14  2003/09/30 19:51:38  dicuccio
  162. * Cosmetic change to exception report
  163. *
  164. * Revision 1.13  2003/09/04 14:00:26  dicuccio
  165. * Introduce IDocument and IView as abstract base classes.  Use IDocument instead
  166. * of CDocument.
  167. *
  168. * Revision 1.12  2003/08/05 16:53:59  dicuccio
  169. * Removed member CRef<> - leads to leak of view and document on exit, resolves
  170. * issue of genome workbench not shutting down politely
  171. *
  172. * Revision 1.11  2003/07/14 10:52:45  shomrat
  173. * Initial Revision
  174. *
  175. *
  176. * ===========================================================================
  177. */
  178. #endif // GUI_CORE___VIEWPLUGIN__HPP