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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: obj_clipboard.cpp,v $
  4.  * PRODUCTION Revision 1000.0  2004/06/01 21:21:01  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: obj_clipboard.cpp,v 1000.0 2004/06/01 21:21:01 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.  * Authors:  Mike DiCuccio
  35.  *
  36.  * File Description:
  37.  *
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include <gui/objutils/obj_clipboard.hpp>
  41. #include <gui/objutils/label.hpp>
  42. #include <FL/Fl.H>
  43. #include <connect/ncbi_conn_stream.hpp>
  44. #include <serial/objostr.hpp>
  45. #include <corelib/ncbimtx.hpp>
  46. BEGIN_NCBI_SCOPE
  47. USING_SCOPE(objects);
  48. // our current objects
  49. TConstScopedObjects CObjClipboard::sm_Objects;
  50. // the mode of text copy
  51. CObjClipboard::ECopyMode CObjClipboard::sm_Mode = CObjClipboard::eCopy_ASN;
  52. void CObjClipboard::Add(CScope& scope, const CObject& obj)
  53. {
  54.     CMutexGuard LOCK(sm_ClipboardMutex);
  55.     SConstScopedObject clip_object(obj, scope);
  56.     sm_Objects.push_back(clip_object);
  57.     string str;
  58.     x_GetText(scope, obj, &str);
  59.     CClipboard::Add(str);
  60. }
  61. void CObjClipboard::Add(CScope& scope, const CObject& obj, const string& text)
  62. {
  63.     CMutexGuard LOCK(sm_ClipboardMutex);
  64.     SConstScopedObject clip_object(obj, scope);
  65.     sm_Objects.push_back(clip_object);
  66.     CClipboard::Add(text);
  67. }
  68. void CObjClipboard::Add(const string& text)
  69. {
  70.     CMutexGuard LOCK(sm_ClipboardMutex);
  71.     CClipboard::Add(text);
  72. }
  73. void CObjClipboard::Clear()
  74. {
  75.     CMutexGuard LOCK(sm_ClipboardMutex);
  76.     sm_Objects.clear();
  77.     CClipboard::Clear();
  78. }
  79. void CObjClipboard::Copy()
  80. {
  81.     CMutexGuard LOCK(sm_ClipboardMutex);
  82.     CClipboard::Copy();
  83. }
  84. void CObjClipboard::Paste(TConstScopedObjects* objects, string* text)
  85. {
  86.     CMutexGuard LOCK(sm_ClipboardMutex);
  87.     if (objects) {
  88.         *objects = sm_Objects;
  89.     }
  90.     CClipboard::Paste(text);
  91. }
  92. void CObjClipboard::x_GetText(CScope& scope, const CObject& object,
  93.                               string* text)
  94. {
  95.     if ( !text ) {
  96.         return;
  97.     }
  98.     switch (sm_Mode) {
  99.     case eCopy_Label:
  100.         CLabel::GetLabel(object, text, CLabel::eDefault, &scope);
  101.         break;
  102.     case eCopy_ASN:
  103.     case eCopy_XML:
  104.         {{
  105.             const CSerialObject* obj =
  106.                 dynamic_cast<const CSerialObject*>(&object);
  107.             if (obj) {
  108.                 CConn_MemoryStream ostr;
  109.                 {{
  110.                     auto_ptr<CObjectOStream> os
  111.                         (CObjectOStream::Open(eSerial_AsnText, ostr));
  112.                     os->Write(obj, obj->GetThisTypeInfo());
  113.                 }}
  114.                 string str;
  115.                 str.resize(ostr.tellp() - CT_POS_TYPE(0));
  116.                 ostr.read(const_cast<char*>(str.data()), str.size());
  117.                 *text += str;
  118.             }
  119.         }}
  120.         break;
  121.     }
  122. }
  123. END_NCBI_SCOPE
  124. /*
  125.  * ===========================================================================
  126.  * $Log: obj_clipboard.cpp,v $
  127.  * Revision 1000.0  2004/06/01 21:21:01  gouriano
  128.  * PRODUCTION: IMPORTED [GCC34_MSVC7] Dev-tree R1.2
  129.  *
  130.  * Revision 1.2  2004/05/21 22:27:44  gorelenk
  131.  * Added PCH ncbi_pch.hpp
  132.  *
  133.  * Revision 1.1  2004/05/07 15:39:54  dicuccio
  134.  * Rearranged clipboard classes - renamed CClipboard -> CObjClipboard to reflect
  135.  * its specialized function
  136.  *
  137.  * Revision 1.1  2004/04/30 11:48:15  dicuccio
  138.  * Initial commit - split out from src/gui/utils
  139.  *
  140.  * Revision 1.4  2004/04/07 13:05:46  dicuccio
  141.  * Reworked to use TConstScopedObjects
  142.  *
  143.  * Revision 1.3  2004/02/20 20:03:27  ucko
  144.  * Fix to compile with stricter implementations of CT_POS_TYPE
  145.  *
  146.  * Revision 1.2  2004/01/30 21:08:36  dicuccio
  147.  * Added default text interpretation of copied items
  148.  *
  149.  * Revision 1.1  2004/01/30 17:13:56  dicuccio
  150.  * Initial revision
  151.  *
  152.  * ===========================================================================
  153.  */