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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: auth_form.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 21:02:09  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.3
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*
  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:  Lou Friedman
  35.  *
  36.  * File Description:
  37.  *      Implementation of a author name entry form table (CAuthEntryFormTable).
  38.  *
  39.  */
  40. #include <ncbi_pch.hpp>
  41. #include <gui/types.hpp>
  42. #include <FL/Fl_Window.H>
  43. #include <FL/Fl_Group.H>
  44. #include <FL/Fl_Input.H>
  45. #include <FL/Fl_Button.H>
  46. #include <FL/Fl_Pack.H>
  47. #include "auth_form.hpp"
  48. #define LABEL_WIDTH     75
  49. #define MIDDLE_WIDTH    25
  50. #define GAP             5
  51. #define COL_NUM         5
  52. #define TOTAL_GAP       (COL_NUM - 1) * GAP
  53. #define BUTTON_WIDTH    15
  54. BEGIN_NCBI_SCOPE
  55. Fl_Group* CAuthEntryFormTable::AddAuthRow()
  56. {
  57.     int row_ht = 25;
  58.     int x_place = 0;
  59.     int name_width = (m_Pack->w() - TOTAL_GAP - LABEL_WIDTH - 
  60.                       MIDDLE_WIDTH - BUTTON_WIDTH)/2;
  61.     // stringstream label;
  62.     Fl_Group* row = new Fl_Group(0, 0, m_Pack->w(), row_ht);
  63.     // Author label
  64.     Fl_Box* label = new Fl_Box(0, 0, LABEL_WIDTH, row_ht);
  65.     label->label("Author:");
  66.     label->labeltype(FL_NORMAL_LABEL);
  67.     label->align(FL_ALIGN_INSIDE | FL_ALIGN_RIGHT);
  68.     label->box(FL_BORDER_FRAME);
  69.     x_place = LABEL_WIDTH + GAP;
  70.     // Add Name Cols
  71.     // First
  72.     new Fl_Input(x_place, 0, name_width, row_ht);
  73.     x_place += name_width + GAP;
  74.     // Middle
  75.     new Fl_Input(x_place, 0, MIDDLE_WIDTH, row_ht);
  76.     x_place += MIDDLE_WIDTH + GAP;
  77.     
  78.     // Last
  79.     new Fl_Input(x_place, 0, name_width, row_ht);
  80.     x_place += name_width + GAP;
  81.     
  82.     // Delete Button
  83.     Fl_Button* button = new Fl_Button(x_place, 5, 15, 15);
  84.     button->label("X");
  85.     button->callback(&cb_DeleteRow, (void*) this);
  86.     button->tooltip("Delete Author");
  87.     row->end();
  88.     
  89.     // add to table pack
  90.     int h = m_Pack->h() + row_ht;
  91.     m_Pack->size(m_Pack->w(), h);
  92.     m_Pack->insert(*row, m_AddButton);
  93.     return row;
  94. }
  95. void CAuthEntryFormTable::cb_DeleteRow (Fl_Widget* w, void* u) 
  96. {
  97.     // Get the delete buttons parent. 
  98.     // This is the row to be deleted.
  99.     Fl_Group* row = w->parent();
  100.     ((CAuthEntryFormTable*) u)->x_DeleteRow(row);
  101. }
  102. void CAuthEntryFormTable::x_DeleteRow(Fl_Group *row) 
  103. {
  104.     int row_ht = 25;
  105.     m_Pack->remove(row);
  106.     delete row;
  107.     int h = m_Pack->h() - row_ht - m_Pack->spacing();
  108.     resize(0, 0, w(), h);
  109.     window()->redraw();
  110. }
  111. void CAuthEntryFormTable::AddButtonRow()
  112. {
  113.     int button_w = 100;
  114.     int x_pos = (m_Pack->w() - button_w)/2;
  115.     int row_ht = 25;
  116.     Fl_Group* row = new Fl_Group(0, 0, m_Pack->w(), row_ht);
  117.     Fl_Button* button = new Fl_Button(x_pos, 0, button_w, row_ht);
  118.     button->label("Add Author");
  119.     button->callback(&cb_AddNewRow, (void*) this);
  120.     
  121.     row->end();
  122.     m_AddButton = row;
  123.     // add to table pack
  124.     int h = m_Pack->h() + row_ht;
  125.     m_Pack->size(m_Pack->w(), h);
  126.     m_Pack->add(row);
  127. }
  128. void CAuthEntryFormTable::x_AddNewAuthRow() {
  129.     AddAuthRow();
  130.     int ht = m_Pack->h() + m_Pack->spacing();
  131.     resize(0, 0, w(), ht);
  132.     window()->redraw();
  133. }
  134. END_NCBI_SCOPE