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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: registry_item_panel.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 20:47:16  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: registry_item_panel.cpp,v 1000.1 2004/06/01 20:47:16 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 "registry_item_panel.hpp"
  41. #include <FL/fl_draw.H>
  42. BEGIN_NCBI_SCOPE
  43. CRegistryItemPanel::CRegistryItemPanel(int x, int y, int w, int h,
  44.                                        const char* label)
  45.     : Fl_Table_Row(x, y, w, h, label)
  46. {
  47.     col_header(true);
  48.     cols(2);
  49.     col_width(0, w / 3);
  50.     col_width(1, w - col_width(0) - 2);
  51. }
  52. void CRegistryItemPanel::SetData(IRegistryData& data)
  53. {
  54.     m_Registry.Reset(&data);
  55. }
  56. void CRegistryItemPanel::Update(const list<string>& kvs)
  57. {
  58.     m_Data.clear();
  59.     m_Data.reserve(kvs.size());
  60.     if (m_Registry) {
  61.         ITERATE (list<string>, iter, kvs) {
  62.             IRegistryData::SKeyVal kv;
  63.             kv.key   = *iter;
  64.             kv.value = m_Registry->GetValue(*iter);
  65.             string::size_type pos = kv.key.find_last_of(".");
  66.             if (pos != string::npos) {
  67.                 kv.key.erase(0, pos + 1);
  68.             }
  69.             m_Data.push_back(kv);
  70.         }
  71.     }
  72.     rows(m_Data.size());
  73.     redraw();
  74. }
  75. void CRegistryItemPanel::resize(int x, int y, int w, int h)
  76. {
  77.     Fl_Table_Row::resize(x, y, w, h);
  78.     col_width(0, w / 3);
  79.     col_width(1, w - col_width(0) - 2);
  80. }
  81. void CRegistryItemPanel::draw_cell(TableContext ctx, int row, int col,
  82.                                    int x, int y, int w, int h)
  83. {
  84.     switch (ctx) {
  85.     case CONTEXT_STARTPAGE:
  86.         fl_font(labelfont(), labelsize());
  87.         break;
  88.     case CONTEXT_ROW_HEADER:
  89.         // we have no row headers
  90.         break;
  91.     case CONTEXT_COL_HEADER:
  92.         fl_push_clip(x, y, w, h);
  93.         fl_draw_box(FL_UP_BOX, x, y, w, h, col_header_color());
  94.         fl_color(labelcolor());
  95.         switch (col) {
  96.         case 0:
  97.             fl_draw("Key", x, y, w, h, FL_ALIGN_CENTER);
  98.             break;
  99.         case 1:
  100.             fl_draw("Value", x, y, w, h, FL_ALIGN_CENTER);
  101.             break;
  102.         }
  103.         fl_pop_clip();
  104.         break;
  105.     case CONTEXT_CELL:
  106.         fl_push_clip(x, y, w, h);
  107.         fl_draw_box(FL_FLAT_BOX, x, y, w, h,
  108.                     row_selected(row) ?
  109.                     selection_color() : FL_BACKGROUND2_COLOR);
  110.         fl_color(row_selected(row) ? FL_YELLOW : labelcolor());
  111.         switch (col) {
  112.         case 0:
  113.             fl_draw(m_Data[row].key.c_str(), x, y, w, h, FL_ALIGN_LEFT);
  114.             break;
  115.         case 1:
  116.             fl_draw(m_Data[row].value.c_str(), x, y, w, h, FL_ALIGN_LEFT);
  117.             break;
  118.         }
  119.         fl_pop_clip();
  120.         break;
  121.     case CONTEXT_ENDPAGE:
  122.         fl_push_clip(this->x(), this->y(), this->w(), this->h());
  123.         fl_draw_box(box(), this->x(), this->y(), this->w(), this->h(), color());
  124.         fl_pop_clip();
  125.         break;
  126.     default:
  127.         break;
  128.     }
  129. }
  130. END_NCBI_SCOPE
  131. /*
  132.  * ===========================================================================
  133.  * $Log: registry_item_panel.cpp,v $
  134.  * Revision 1000.1  2004/06/01 20:47:16  gouriano
  135.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  136.  *
  137.  * Revision 1.2  2004/05/21 22:27:42  gorelenk
  138.  * Added PCH ncbi_pch.hpp
  139.  *
  140.  * Revision 1.1  2003/09/12 19:48:43  dicuccio
  141.  * Initial revision
  142.  *
  143.  * ===========================================================================
  144.  */