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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: records_table.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 20:48:47  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.23
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: records_table.cpp,v 1000.2 2004/06/01 20:48:47 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.  *    CGBenchApp -- main application class for GBENCH
  38.  */
  39. #include <ncbi_pch.hpp>
  40. #include "records_table.hpp"
  41. #include <gui/core/doc_manager.hpp>
  42. #include <gui/core/idocument.hpp>
  43. #include <gui/utils/fltk_utils.hpp>
  44. #include <objects/seq/Seq_hist.hpp>
  45. #include <objects/seq/Seq_inst.hpp>
  46. #include <objects/seqloc/Seq_id.hpp>
  47. #include <objmgr/util/sequence.hpp>
  48. #include <FL/fl_draw.H>
  49. BEGIN_NCBI_SCOPE
  50. //
  51. // requirement for the tabe: sort by underlying data structure
  52. //
  53. bool operator< (const IDocument& doc0, const IDocument& doc1)
  54. {
  55.     return (&doc0 < &doc1);
  56. }
  57. //
  58. // default ctor
  59. //
  60. CRecordsTable::CRecordsTable(int x, int y, int w, int h, const char* label)
  61.     : CTablePanel<IDocument*>(x, y, w, h, label)
  62. {
  63.     //
  64.     // set up the actual columns for our internal data
  65.     //
  66.     SetColumn(eBriefTitle, "Brief",         eString, FL_ALIGN_LEFT,  1.0f);
  67.     SetColumn(eTitle,      "Title",         eString, FL_ALIGN_LEFT,  4.0f);
  68.     SetColumn(eViews,      "Views",         eString, FL_ALIGN_RIGHT, 1.0f);
  69.     //SetColumn(eOrganism,   "Organism",      eString, FL_ALIGN_LEFT,  0.1f);
  70.     /**
  71.     // set the default virtual columns
  72.     // this defines the order in which all the columns appear
  73.     m_VirtCols.push_back(eBriefTitle);
  74.     m_VirtCols.push_back(eTitle);
  75.     m_VirtCols.push_back(eViews);
  76.     **/
  77.     Update(fAllEvents);
  78. }
  79. //
  80. // dtor
  81. //
  82. CRecordsTable::~CRecordsTable()
  83. {
  84. }
  85. //
  86. // Update()
  87. // Here we fill our internal data structures with information from the document
  88. // manager.
  89. //
  90. void CRecordsTable::Update(TUpdateFlags flags)
  91. {
  92.     if ( (flags & fDocumentChanged)  ||  (flags & fDocumentCreated)  ||
  93.          (flags & fDocumentReleased) ) {
  94.         int row = 0;
  95.         NON_CONST_ITERATE(CDocManager::TDocList, iter,
  96.                           CDocManager::GetDocuments()) {
  97.             IDocument* doc = *iter;
  98.             if ( !doc ) {
  99.                 return;
  100.             }
  101.             SetCell(row, eTitle, doc->GetTitle());
  102.             SetCell(row, eBriefTitle, doc->GetShortTitle());
  103.             SetCell(row, eViews, NStr::IntToString(doc->GetViews().size()));
  104.             SetData(row, doc);
  105.             ++row;
  106.         }
  107.         /**
  108.         m_Data.clear();
  109.         NON_CONST_ITERATE(CDocManager::TDocList, iter,
  110.                           CDocManager::GetDocuments()) {
  111.             IDocument* doc = *iter;
  112.             if ( !doc ) {
  113.                 return;
  114.             }
  115.             TColumns cols(eMaxCols);
  116.             cols[eTitle     ] = doc->GetTitle();
  117.             cols[eBriefTitle] = doc->GetShortTitle();
  118.             cols[eViews     ] = NStr::IntToString(doc->GetViews().size());
  119.             TRow row;
  120.             row.m_Data = doc;
  121.             row.m_Columns = cols;
  122.             m_Data.push_back(row);
  123.         }
  124.         // make sure that the added document appears in sorted order!
  125.         int sort_idx = -1;
  126.         ITERATE (TColInfo, col_iter, m_ColInfo) {
  127.             if (col_iter->m_SortState != eNotSorted) {
  128.                 sort_idx = col_iter - m_ColInfo.begin();
  129.                 break;
  130.             }
  131.         }
  132.         if (sort_idx != -1) {
  133.             if (m_ColInfo[sort_idx].m_SortState == eAscending) {
  134.                 m_ColInfo[sort_idx].m_SortState = eDescending;
  135.             } else {
  136.                 m_ColInfo[sort_idx].m_SortState = eAscending;
  137.             }
  138.             SortByCol(sort_idx);
  139.         }
  140.         **/
  141.     }
  142.     if ( flags & fViewCreated ) {
  143.         for (size_t i = 0;  i < GetRows();  ++i) {
  144.             SetCell(i, eViews,
  145.                     NStr::IntToString(GetData(i)->GetViews().size()));
  146.         }
  147.     }
  148.     // finalize the view
  149.     redraw();
  150. }
  151. //
  152. // handle()
  153. // generic FLTK event handler
  154. //
  155. int CRecordsTable::handle(int event)
  156. {
  157.     switch (event)
  158.     {
  159.     case FL_PUSH:
  160.         {{
  161.             CFltkEvent::EEvent ev = CFltkEvent::GetProcessedEvent();
  162.             // we ignore events bound to our internal popup state
  163.             // this removes an artifact with selection mode - it protects our
  164.             // selections when we popup our context menu
  165.             if (ev == CFltkEvent::ePopupState) {
  166.                 break;
  167.             }
  168.             int ev_y = Fl::event_y();
  169.             int widget_y = y();
  170.             int hdr_ht = col_header_height();
  171.             if (ev_y >= y()  &&  ev_y <= y() + col_header_height()  &&
  172.                 ev == CFltkEvent::eMultiSelectState) {
  173.                 //ShowColSelectDlg();
  174.                 return 1;
  175.             }
  176.         }}
  177.         break;
  178.     default:
  179.         break;
  180.     };
  181.     return CTablePanel<IDocument*>::handle(event);
  182. }
  183. END_NCBI_SCOPE
  184. /*
  185.  * ===========================================================================
  186.  * $Log: records_table.cpp,v $
  187.  * Revision 1000.2  2004/06/01 20:48:47  gouriano
  188.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.23
  189.  *
  190.  * Revision 1.23  2004/05/21 22:27:42  gorelenk
  191.  * Added PCH ncbi_pch.hpp
  192.  *
  193.  * Revision 1.22  2004/05/07 15:34:37  dicuccio
  194.  * Fixed unsigned/signed comparison
  195.  *
  196.  * Revision 1.21  2004/01/20 18:15:52  dicuccio
  197.  * Changed to match new API in CTablePanel
  198.  *
  199.  * Revision 1.20  2003/12/04 18:12:55  dicuccio
  200.  * Changed to match API change in CTablePanel
  201.  *
  202.  * Revision 1.19  2003/09/29 15:43:01  dicuccio
  203.  * Deprecated gui/scope.hpp.  Merged gui/core/types.hpp into gui/types.hpp
  204.  *
  205.  * Revision 1.18  2003/09/04 14:02:36  dicuccio
  206.  * Introduce IDocument as abstract base class for CDocument; replace use of
  207.  * CDocument with IDocument
  208.  *
  209.  * Revision 1.17  2003/08/06 13:24:31  dicuccio
  210.  * Deprecated old main window; introduced new, compact window for multiple
  211.  * document management
  212.  *
  213.  * Revision 1.16  2003/07/28 11:51:47  dicuccio
  214.  * Rewrote CTablePanel<> to be more flexible and better contained.  Added standard
  215.  * multicolumn list dialog.  Deprecated use of COutputDlg.
  216.  *
  217.  * Revision 1.15  2003/07/25 13:43:40  dicuccio
  218.  * Replaced Flv_Table with Fl_Table
  219.  *
  220.  * Revision 1.14  2003/06/02 16:06:19  dicuccio
  221.  * Rearranged src/objects/ subtree.  This includes the following shifts:
  222.  *     - src/objects/asn2asn --> arc/app/asn2asn
  223.  *     - src/objects/testmedline --> src/objects/ncbimime/test
  224.  *     - src/objects/objmgr --> src/objmgr
  225.  *     - src/objects/util --> src/objmgr/util
  226.  *     - src/objects/alnmgr --> src/objtools/alnmgr
  227.  *     - src/objects/flat --> src/objtools/flat
  228.  *     - src/objects/validator --> src/objtools/validator
  229.  *     - src/objects/cddalignview --> src/objtools/cddalignview
  230.  * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  231.  * replaces the three libmmdb? libs.
  232.  *
  233.  * Revision 1.13  2003/04/24 16:36:49  dicuccio
  234.  * Removed unnecessary / unavailable columns from display.  Updated to reflect
  235.  * changes in IDocument API
  236.  *
  237.  * Revision 1.12  2003/03/21 17:02:17  dicuccio
  238.  * Moved fltk_utils.hpp --> gui/utils.  Added link against libgui_utils
  239.  *
  240.  * Revision 1.11  2003/03/11 15:18:57  kuznets
  241.  * iterate -> ITERATE
  242.  *
  243.  * Revision 1.10  2003/02/28 20:42:29  lebedev
  244.  * Popup bug fixed
  245.  *
  246.  * Revision 1.9  2003/02/26 14:30:15  dicuccio
  247.  * Fixed thinko in handling of mouse clicks and pop-up events - was preventing
  248.  * selecting multiple documents and using the pop-up menu with these multiple
  249.  * documents
  250.  *
  251.  * Revision 1.8  2003/02/05 19:57:34  dicuccio
  252.  * Make sure that records added to the table don't upset the sort order for the table
  253.  *
  254.  * Revision 1.7  2003/01/15 21:12:49  dicuccio
  255.  * Added update flags - allows partial updates, for example, when a view is created
  256.  *
  257.  * Revision 1.6  2003/01/13 13:10:10  dicuccio
  258.  * Namespace clean-up.  Retired namespace gui -> converted all to namespace ncbi.
  259.  * Moved all FLUID-generated code into namespace ncbi.
  260.  *
  261.  * Revision 1.5  2003/01/08 15:02:26  dicuccio
  262.  * Moved column selection dialog into base class.  Added ability to sort columns
  263.  * based on column type (string vs. numeric)
  264.  *
  265.  * Revision 1.4  2003/01/03 17:29:06  dicuccio
  266.  * Added ability to select columns for viewing and sorting
  267.  *
  268.  * Revision 1.3  2002/12/30 20:51:43  dicuccio
  269.  * Tweak to avoid compiler warnings in Windows
  270.  *
  271.  * Revision 1.2  2002/12/30 18:51:53  dicuccio
  272.  * Updated to support new table widget base class.  Updated to add new tabular
  273.  * views.
  274.  *
  275.  * Revision 1.1  2002/12/23 16:40:13  dicuccio
  276.  * Initial revision
  277.  *
  278.  * ===========================================================================
  279.  */