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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: cdd_book_ref_dialog.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:27:57  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: cdd_book_ref_dialog.cpp,v 1000.2 2004/06/01 18:27:57 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:  Paul Thiessen
  35. *
  36. * File Description:
  37. *       dialog for editing CDD book references
  38. *
  39. * ===========================================================================
  40. */
  41. #ifdef _MSC_VER
  42. #pragma warning(disable:4018)   // disable signed/unsigned mismatch warning in MSVC
  43. #endif
  44. #include <ncbi_pch.hpp>
  45. #include <corelib/ncbistd.hpp>
  46. #include <objects/cdd/Cdd_descr.hpp>
  47. #include <objects/cdd/Cdd_book_ref.hpp>
  48. #include "cdd_book_ref_dialog.hpp"
  49. #include "structure_set.hpp"
  50. #include "cn3d_tools.hpp"
  51. #include <wx/clipbrd.h>
  52. #include <wx/tokenzr.h>
  53. ////////////////////////////////////////////////////////////////////////////////////////////////
  54. // The following is taken unmodified from wxDesigner's C++ header from cdd_book_ref_dialog.wdr
  55. ////////////////////////////////////////////////////////////////////////////////////////////////
  56. #include <wx/image.h>
  57. #include <wx/statline.h>
  58. #include <wx/spinbutt.h>
  59. #include <wx/spinctrl.h>
  60. #include <wx/splitter.h>
  61. #include <wx/listctrl.h>
  62. #include <wx/treectrl.h>
  63. #include <wx/notebook.h>
  64. #include <wx/grid.h>
  65. // Declare window functions
  66. #define ID_LISTBOX 10000
  67. #define ID_B_UP 10001
  68. #define ID_B_LAUNCH 10002
  69. #define ID_B_NEW 10003
  70. #define ID_B_SAVE 10004
  71. #define ID_B_DOWN 10005
  72. #define ID_B_EDIT 10006
  73. #define ID_B_PASTE 10007
  74. #define ID_B_DELETE 10008
  75. #define ID_LINE 10009
  76. #define ID_TEXT 10010
  77. #define ID_T_NAME 10011
  78. #define ID_C_TYPE 10012
  79. #define ID_T_ADDRESS 10013
  80. #define ID_T_SUBADDRESS 10014
  81. #define ID_B_DONE 10015
  82. wxSizer *SetupBookRefDialog( wxWindow *parent, bool call_fit = TRUE, bool set_sizer = TRUE );
  83. ////////////////////////////////////////////////////////////////////////////////////////////////
  84. USING_NCBI_SCOPE;
  85. USING_SCOPE(objects);
  86. BEGIN_SCOPE(Cn3D)
  87. #define DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(var, id, type) 
  88.     type *var; 
  89.     var = wxDynamicCast(FindWindow(id), type); 
  90.     if (!var) { 
  91.         ERRORMSG("Can't find window with id " << id); 
  92.         return; 
  93.     }
  94. BEGIN_EVENT_TABLE(CDDBookRefDialog, wxDialog)
  95.     EVT_CLOSE       (       CDDBookRefDialog::OnCloseWindow)
  96.     EVT_BUTTON      (-1,    CDDBookRefDialog::OnClick)
  97.     EVT_LISTBOX     (-1,    CDDBookRefDialog::OnClick)
  98. END_EVENT_TABLE()
  99. static TypeStringAssociator < CCdd_book_ref::ETextelement > enum2str;
  100. CDDBookRefDialog::CDDBookRefDialog(StructureSet *structureSet, CDDBookRefDialog **handle,
  101.     wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos) :
  102.         wxDialog(parent, id, title, pos, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
  103.         sSet(structureSet), dialogHandle(handle), selectedItem(-1), editOn(false)
  104. {
  105.     if (enum2str.Size() == 0) {
  106.         enum2str.Associate(CCdd_book_ref::eTextelement_unassigned, "unassigned");
  107.         enum2str.Associate(CCdd_book_ref::eTextelement_section, "section");
  108.         enum2str.Associate(CCdd_book_ref::eTextelement_figgrp, "figgrp");
  109.         enum2str.Associate(CCdd_book_ref::eTextelement_table, "table");
  110.         enum2str.Associate(CCdd_book_ref::eTextelement_chapter, "chapter");
  111.         enum2str.Associate(CCdd_book_ref::eTextelement_biblist, "biblist");
  112.         enum2str.Associate(CCdd_book_ref::eTextelement_box, "box");
  113.         enum2str.Associate(CCdd_book_ref::eTextelement_glossary, "glossary");
  114.         enum2str.Associate(CCdd_book_ref::eTextelement_appendix, "appendix");
  115.         enum2str.Associate(CCdd_book_ref::eTextelement_other, "other");
  116.     }
  117.     if (!structureSet || !(descrSet = structureSet->GetCDDDescrSet())) {
  118.         ERRORMSG("CDDBookRefDialog::CDDBookRefDialog() - error getting descr set data");
  119.         Destroy();
  120.         return;
  121.     }
  122.     // construct the dialog
  123.     wxSizer *topSizer = SetupBookRefDialog(this, false);
  124.     // fill in list box with available references
  125.     SetWidgetStates();
  126.     // call sizer stuff
  127.     topSizer->Fit(this);
  128.     topSizer->SetSizeHints(this);
  129. }
  130. CDDBookRefDialog::~CDDBookRefDialog(void)
  131. {
  132.     // so owner knows that this dialog has been destroyed
  133.     if (dialogHandle && *dialogHandle) *dialogHandle = NULL;
  134.     TRACEMSG("CDD book references dialog destroyed");
  135. }
  136. // same as hitting done
  137. void CDDBookRefDialog::OnCloseWindow(wxCloseEvent& event)
  138. {
  139.     // see what user wants to do about unsaved edit
  140.     if (editOn) {
  141.         int option = wxYES_NO | wxYES_DEFAULT | wxICON_EXCLAMATION | wxCENTRE;
  142.         if (event.CanVeto()) option |= wxCANCEL;
  143.         wxMessageDialog dialog(NULL, "Do you want to save your edited item?", "", option);
  144.         option = dialog.ShowModal();
  145.         if (option == wxID_CANCEL) {
  146.             event.Veto();
  147.             return;
  148.         }
  149.         if (option == wxID_YES) {
  150.             wxCommandEvent fake(wxEVT_COMMAND_BUTTON_CLICKED, ID_B_SAVE);
  151.             OnClick(fake);
  152.         }
  153.     }
  154.     Destroy();
  155. }
  156. static wxString MakeRID(const CCdd_book_ref& bref)
  157. {
  158.     wxString uid;
  159.     if (bref.IsSetSubelementid())
  160.         uid.Printf("%s.%s.%i#%i",
  161.             bref.GetBookname().c_str(), enum2str.Find(bref.GetTextelement())->c_str(),
  162.             bref.GetElementid(), bref.GetSubelementid());
  163.     else
  164.         uid.Printf("%s.%s.%i",
  165.             bref.GetBookname().c_str(), enum2str.Find(bref.GetTextelement())->c_str(), bref.GetElementid());
  166.     return uid;
  167. }
  168. void CDDBookRefDialog::SetWidgetStates(void)
  169. {
  170.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(listbox, ID_LISTBOX, wxListBox)
  171.     listbox->Clear();
  172.     // set items in listbox
  173.     CCdd_descr_set::Tdata::iterator d, de = descrSet->Set().end();
  174.     for (d=descrSet->Set().begin(); d!=de; ++d) {
  175.         if ((*d)->IsBook_ref()) {
  176.             // make client data of menu item a pointer to the CRef containing the CCdd_descr object
  177.             listbox->Append(MakeRID((*d)->GetBook_ref()), &(*d));
  178.         }
  179.     }
  180.     if (selectedItem < 0 && listbox->GetCount() > 0)
  181.         selectedItem = 0;
  182.     // set info fields
  183.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tName, ID_T_NAME, wxTextCtrl)
  184.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(cType, ID_C_TYPE, wxChoice)
  185.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tAddress, ID_T_ADDRESS, wxTextCtrl)
  186.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tSubaddress, ID_T_SUBADDRESS, wxTextCtrl)
  187.     if (selectedItem >= 0 && selectedItem < listbox->GetCount()) {
  188.         listbox->SetSelection(selectedItem, true);
  189.         const CCdd_book_ref& bref =
  190.             (*(reinterpret_cast<CRef<CCdd_descr>*>(listbox->GetClientData(selectedItem))))->GetBook_ref();
  191.         tName->SetValue(bref.GetBookname().c_str());
  192.         cType->SetStringSelection(enum2str.Find(bref.GetTextelement())->c_str());
  193.         wxString s;
  194.         s.Printf("%i", bref.GetElementid());
  195.         tAddress->SetValue(s);
  196.         if (bref.IsSetSubelementid())
  197.             s.Printf("%i", bref.GetSubelementid());
  198.         else
  199.             s.Clear();
  200.         tSubaddress->SetValue(s);
  201.     } else {
  202.         tName->Clear();
  203.         cType->SetSelection(0);
  204.         tAddress->Clear();
  205.         tSubaddress->Clear();
  206.         // special case for new but as yet unsaved item, always last item
  207.         if (editOn && selectedItem == listbox->GetCount()) {
  208.             listbox->Append(wxString("(new item - hit 'Save' when finished)"), (void *) NULL);
  209.             listbox->SetSelection(selectedItem, true);
  210.         }
  211.     }
  212.     // set widget states
  213.     listbox->Enable(!editOn);
  214.     tName->Enable(editOn);
  215.     cType->Enable(editOn);
  216.     tAddress->Enable(editOn);
  217.     tSubaddress->Enable(editOn);
  218.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bUp, ID_B_UP, wxButton)
  219.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bDown, ID_B_DOWN, wxButton)
  220.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bEdit, ID_B_EDIT, wxButton)
  221.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bSave, ID_B_SAVE, wxButton)
  222.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bNew, ID_B_NEW, wxButton)
  223.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bDelete, ID_B_DELETE, wxButton)
  224.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bLaunch, ID_B_LAUNCH, wxButton)
  225.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(bPaste, ID_B_PASTE, wxButton)
  226.     bool readOnly;
  227.     RegistryGetBoolean(REG_ADVANCED_SECTION, REG_CDD_ANNOT_READONLY, &readOnly);
  228.     bUp->Enable(!readOnly && !editOn && selectedItem > 0);
  229.     bDown->Enable(!readOnly && !editOn && selectedItem < listbox->GetCount() - 1);
  230.     bEdit->Enable(!readOnly && !editOn && selectedItem >= 0 && selectedItem < listbox->GetCount());
  231.     bSave->Enable(!readOnly && editOn);
  232.     bNew->Enable(!readOnly && !editOn);
  233.     bDelete->Enable(!readOnly && selectedItem >= 0 && selectedItem < listbox->GetCount());
  234.     bLaunch->Enable(!editOn);
  235.     bPaste->Enable(!readOnly && !editOn);
  236. }
  237. void CDDBookRefDialog::OnClick(wxCommandEvent& event)
  238. {
  239.     DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(listbox, ID_LISTBOX, wxListBox)
  240.     CRef < CCdd_descr > *selDescr = reinterpret_cast<CRef<CCdd_descr>*>(listbox->GetClientData(selectedItem));
  241.     if (event.GetId() == ID_B_DONE) {
  242.         Close(false);
  243.         return;
  244.     }
  245.     else if (event.GetId() == ID_B_LAUNCH) {
  246.         if (selDescr) {
  247.             wxString url;
  248.             url.Printf("http://www.ncbi.nlm.nih.gov/books/bv.fcgi?rid=%s",
  249.                 MakeRID((*selDescr)->GetBook_ref()).c_str());
  250.             LaunchWebPage(url.c_str());
  251.         }
  252.     }
  253.     else if (event.GetId() == ID_B_UP || event.GetId() == ID_B_DOWN) {
  254.         CRef < CCdd_descr > *switchWith = NULL;
  255.         if (event.GetId() == ID_B_UP && selectedItem > 0) {
  256.             switchWith = reinterpret_cast<CRef<CCdd_descr>*>(listbox->GetClientData(selectedItem - 1));
  257.             --selectedItem;
  258.         } else if (event.GetId() == ID_B_DOWN && selectedItem < listbox->GetCount() - 1){
  259.             switchWith = reinterpret_cast<CRef<CCdd_descr>*>(listbox->GetClientData(selectedItem + 1));
  260.             ++selectedItem;
  261.         } else {
  262.             WARNINGMSG("CDDBookRefDialog::OnClick() - invalid up/down request");
  263.             return;
  264.         }
  265.         CRef < CCdd_descr > tmp = *switchWith;
  266.         *switchWith = *selDescr;
  267.         *selDescr = tmp;
  268.         sSet->SetDataChanged(StructureSet::eCDDData);
  269.     }
  270.     else if (event.GetId() == ID_B_EDIT) {
  271.         editOn = true;
  272.     }
  273.     else if (event.GetId() == ID_B_SAVE) {
  274.         DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tName, ID_T_NAME, wxTextCtrl)
  275.         DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(cType, ID_C_TYPE, wxChoice)
  276.         DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tAddress, ID_T_ADDRESS, wxTextCtrl)
  277.         DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(tSubaddress, ID_T_SUBADDRESS, wxTextCtrl)
  278.         long address, subaddress;
  279.         if (!tAddress->GetValue().ToLong(&address) ||
  280.             (tSubaddress->GetValue().size() > 0 && !tSubaddress->GetValue().ToLong(&subaddress))) {
  281.             ERRORMSG("Address (required) and sub-address (optional) must be integers");
  282.             return;
  283.         }
  284.         CCdd_descr *descr;
  285.         if (selDescr) {
  286.             // editing existing item
  287.             descr = selDescr->GetPointer();
  288.         } else {
  289.             // create new item
  290.             CRef < CCdd_descr > newDescr(new CCdd_descr);
  291.             descrSet->Set().push_back(newDescr);
  292.             descr = newDescr.GetPointer();
  293.         }
  294.         descr->SetBook_ref().SetBookname(tName->GetValue().c_str());
  295.         descr->SetBook_ref().SetTextelement(*(enum2str.Find(string(cType->GetStringSelection().c_str()))));
  296.         descr->SetBook_ref().SetElementid((int) address);
  297.         if (tSubaddress->GetValue().size() > 0)
  298.             descr->SetBook_ref().SetSubelementid((int) subaddress);
  299.         else
  300.             descr->SetBook_ref().ResetSubelementid();
  301.         sSet->SetDataChanged(StructureSet::eCDDData);
  302.         editOn = false;
  303.     }
  304.     else if (event.GetId() == ID_B_NEW) {
  305.         selectedItem = listbox->GetCount();
  306.         editOn = true;
  307.     }
  308.     else if (event.GetId() == ID_B_PASTE) {
  309.         if (wxTheClipboard->Open()) {
  310.             if (wxTheClipboard->IsSupported(wxDF_TEXT)) {
  311.                 wxTextDataObject data;
  312.                 wxTheClipboard->GetData(data);
  313.                 wxStringTokenizer tkz(data.GetText(), ".#", wxTOKEN_STRTOK);
  314.                 if (tkz.CountTokens() == 3 || tkz.CountTokens() == 4) {
  315.                     bool haveSubaddr = (tkz.CountTokens() == 4);
  316.                     CRef < CCdd_descr > descr(new CCdd_descr);
  317.                     descr->SetBook_ref().SetBookname(tkz.GetNextToken().c_str());
  318.                     const CCdd_book_ref::ETextelement *type =
  319.                         enum2str.Find(string(tkz.GetNextToken().c_str()));
  320.                     long address, subaddress;
  321.                     bool
  322.                         gotAddr = tkz.GetNextToken().ToLong(&address),
  323.                         gotSubaddr = haveSubaddr ? tkz.GetNextToken().ToLong(&subaddress) : false;
  324.                     if (type && gotAddr && (!haveSubaddr || gotSubaddr)) {
  325.                         descr->SetBook_ref().SetTextelement(*type);
  326.                         descr->SetBook_ref().SetElementid((int) address);
  327.                         if (haveSubaddr)
  328.                             descr->SetBook_ref().SetSubelementid((int) subaddress);
  329.                         else
  330.                             descr->SetBook_ref().ResetSubelementid();
  331.                         descrSet->Set().push_back(descr);
  332.                         sSet->SetDataChanged(StructureSet::eCDDData);
  333.                         selectedItem = listbox->GetCount();
  334.                     }
  335.                 }
  336.             }
  337.             wxTheClipboard->Close();
  338.         }
  339.     }
  340.     else if (event.GetId() == ID_B_DELETE) {
  341.         if (selDescr) {
  342.             CCdd_descr_set::Tdata::iterator d, de = descrSet->Set().end();
  343.             for (d=descrSet->Set().begin(); d!=de; ++d) {
  344.                 if (&(*d) == selDescr) {
  345.                     descrSet->Set().erase(d);
  346.                     sSet->SetDataChanged(StructureSet::eCDDData);
  347.                     if (selectedItem == listbox->GetCount() - 1)
  348.                         --selectedItem;
  349.                     break;
  350.                 }
  351.             }
  352.         } else
  353.             --selectedItem;
  354.         editOn = false;
  355.     }
  356.     else if (event.GetId() == ID_LISTBOX) {
  357.         selectedItem = listbox->GetSelection();
  358.     }
  359.     SetWidgetStates();
  360. }
  361. END_SCOPE(Cn3D)
  362. //////////////////////////////////////////////////////////////////////////////////////////////////
  363. // The following is taken *without* modification from wxDesigner C++ code generated from
  364. // cdd_book_ref_dialog.wdr.
  365. //////////////////////////////////////////////////////////////////////////////////////////////////
  366. wxSizer *SetupBookRefDialog( wxWindow *parent, bool call_fit, bool set_sizer )
  367. {
  368.     wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
  369.     wxStaticBox *item2 = new wxStaticBox( parent, -1, wxT("Book References") );
  370.     wxStaticBoxSizer *item1 = new wxStaticBoxSizer( item2, wxVERTICAL );
  371.     wxString *strs3 = (wxString*) NULL;
  372.     wxListBox *item3 = new wxListBox( parent, ID_LISTBOX, wxDefaultPosition, wxSize(80,100), 0, strs3, wxLB_SINGLE );
  373.     item1->Add( item3, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  374.     wxGridSizer *item4 = new wxGridSizer( 2, 0, 0, 0 );
  375.     wxButton *item5 = new wxButton( parent, ID_B_UP, wxT("Move Up"), wxDefaultPosition, wxDefaultSize, 0 );
  376.     item4->Add( item5, 0, wxALIGN_CENTRE|wxALL, 5 );
  377.     wxButton *item6 = new wxButton( parent, ID_B_LAUNCH, wxT("Launch"), wxDefaultPosition, wxDefaultSize, 0 );
  378.     item4->Add( item6, 0, wxALIGN_CENTRE|wxALL, 5 );
  379.     wxButton *item7 = new wxButton( parent, ID_B_NEW, wxT("New"), wxDefaultPosition, wxDefaultSize, 0 );
  380.     item4->Add( item7, 0, wxALIGN_CENTRE|wxALL, 5 );
  381.     wxButton *item8 = new wxButton( parent, ID_B_SAVE, wxT("Save"), wxDefaultPosition, wxDefaultSize, 0 );
  382.     item4->Add( item8, 0, wxALIGN_CENTRE|wxALL, 5 );
  383.     wxButton *item9 = new wxButton( parent, ID_B_DOWN, wxT("Move Down"), wxDefaultPosition, wxDefaultSize, 0 );
  384.     item4->Add( item9, 0, wxALIGN_CENTRE|wxALL, 5 );
  385.     wxButton *item10 = new wxButton( parent, ID_B_EDIT, wxT("Edit"), wxDefaultPosition, wxDefaultSize, 0 );
  386.     item4->Add( item10, 0, wxALIGN_CENTRE|wxALL, 5 );
  387.     wxButton *item11 = new wxButton( parent, ID_B_PASTE, wxT("Paste"), wxDefaultPosition, wxDefaultSize, 0 );
  388.     item4->Add( item11, 0, wxALIGN_CENTRE|wxALL, 5 );
  389.     wxButton *item12 = new wxButton( parent, ID_B_DELETE, wxT("Delete"), wxDefaultPosition, wxDefaultSize, 0 );
  390.     item4->Add( item12, 0, wxALIGN_CENTRE|wxALL, 5 );
  391.     item1->Add( item4, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  392.     wxStaticLine *item13 = new wxStaticLine( parent, ID_LINE, wxDefaultPosition, wxSize(20,-1), wxLI_HORIZONTAL );
  393.     item1->Add( item13, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  394.     wxFlexGridSizer *item14 = new wxFlexGridSizer( 1, 0, 0, 0 );
  395.     item14->AddGrowableCol( 1 );
  396.     wxStaticText *item15 = new wxStaticText( parent, ID_TEXT, wxT("Name:"), wxDefaultPosition, wxDefaultSize, 0 );
  397.     item14->Add( item15, 0, wxALIGN_CENTRE|wxALL, 5 );
  398.     wxTextCtrl *item16 = new wxTextCtrl( parent, ID_T_NAME, wxT(""), wxDefaultPosition, wxSize(80,-1), 0 );
  399.     item14->Add( item16, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  400.     wxStaticText *item17 = new wxStaticText( parent, ID_TEXT, wxT("Type:"), wxDefaultPosition, wxDefaultSize, 0 );
  401.     item14->Add( item17, 0, wxALIGN_CENTRE|wxALL, 5 );
  402.     wxString strs18[] =
  403.     {
  404.         wxT("unassigned"),
  405.         wxT("section"),
  406.         wxT("figgrp"),
  407.         wxT("table"),
  408.         wxT("chapter"),
  409.         wxT("biblist"),
  410.         wxT("box"),
  411.         wxT("glossary"),
  412.         wxT("appendix"),
  413.         wxT("other")
  414.     };
  415.     wxChoice *item18 = new wxChoice( parent, ID_C_TYPE, wxDefaultPosition, wxSize(100,-1), 10, strs18, 0 );
  416.     item14->Add( item18, 0, wxALIGN_CENTRE|wxALL, 5 );
  417.     item1->Add( item14, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  418.     wxFlexGridSizer *item19 = new wxFlexGridSizer( 1, 0, 0, 0 );
  419.     wxStaticText *item20 = new wxStaticText( parent, ID_TEXT, wxT("Address:"), wxDefaultPosition, wxDefaultSize, 0 );
  420.     item19->Add( item20, 0, wxALIGN_CENTRE|wxALL, 5 );
  421.     wxTextCtrl *item21 = new wxTextCtrl( parent, ID_T_ADDRESS, wxT(""), wxDefaultPosition, wxSize(80,-1), 0 );
  422.     item19->Add( item21, 0, wxALIGN_CENTRE|wxALL, 5 );
  423.     wxStaticText *item22 = new wxStaticText( parent, ID_TEXT, wxT("Sub-address:"), wxDefaultPosition, wxDefaultSize, 0 );
  424.     item19->Add( item22, 0, wxALIGN_CENTRE|wxALL, 5 );
  425.     wxTextCtrl *item23 = new wxTextCtrl( parent, ID_T_SUBADDRESS, wxT(""), wxDefaultPosition, wxSize(80,-1), 0 );
  426.     item19->Add( item23, 0, wxALIGN_CENTRE|wxALL, 5 );
  427.     item1->Add( item19, 0, wxALIGN_CENTRE|wxALL, 5 );
  428.     item0->Add( item1, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
  429.     wxButton *item24 = new wxButton( parent, ID_B_DONE, wxT("Done"), wxDefaultPosition, wxDefaultSize, 0 );
  430.     item24->SetDefault();
  431.     item0->Add( item24, 0, wxALIGN_CENTRE|wxALL, 5 );
  432.     if (set_sizer)
  433.     {
  434.         parent->SetAutoLayout( TRUE );
  435.         parent->SetSizer( item0 );
  436.         if (call_fit)
  437.         {
  438.             item0->Fit( parent );
  439.             item0->SetSizeHints( parent );
  440.         }
  441.     }
  442.     return item0;
  443. }
  444. /*
  445. * ---------------------------------------------------------------------------
  446. * $Log: cdd_book_ref_dialog.cpp,v $
  447. * Revision 1000.2  2004/06/01 18:27:57  gouriano
  448. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.7
  449. *
  450. * Revision 1.7  2004/05/28 21:01:45  thiessen
  451. * namespace/typename fixes for GCC 3.4
  452. *
  453. * Revision 1.6  2004/05/21 21:41:38  gorelenk
  454. * Added PCH ncbi_pch.hpp
  455. *
  456. * Revision 1.5  2004/03/15 17:27:02  thiessen
  457. * prefer prefix vs. postfix ++/-- operators
  458. *
  459. * Revision 1.4  2004/02/19 17:04:45  thiessen
  460. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  461. *
  462. * Revision 1.3  2003/09/29 23:34:05  thiessen
  463. * add launch, paste buttons
  464. *
  465. * Revision 1.2  2003/09/26 17:39:14  thiessen
  466. * fixes for button states
  467. *
  468. * Revision 1.1  2003/09/26 17:12:46  thiessen
  469. * add book reference dialog
  470. *
  471. */