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

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: multitext_dialog.cpp,v $
  4.  * PRODUCTION Revision 1000.2  2004/06/01 18:28:48  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: multitext_dialog.cpp,v 1000.2 2004/06/01 18:28:48 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. *       generic multi-line text entry dialog
  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 "multitext_dialog.hpp"
  47. USING_NCBI_SCOPE;
  48. BEGIN_SCOPE(Cn3D)
  49. BEGIN_EVENT_TABLE(MultiTextDialog, wxDialog)
  50.     EVT_CLOSE       (       MultiTextDialog::OnCloseWindow)
  51.     EVT_BUTTON      (-1,    MultiTextDialog::OnButton)
  52.     EVT_TEXT        (-1,    MultiTextDialog::OnTextChange)
  53. END_EVENT_TABLE()
  54. MultiTextDialog::MultiTextDialog(MultiTextDialogOwner *owner,
  55.         const TextLines& initialText,
  56.         wxWindow* parent, wxWindowID id, const wxString& title,
  57.         const wxPoint& pos, const wxSize& size) :
  58.     wxDialog(parent, id, title, pos, size,
  59.         wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxDIALOG_MODELESS | wxFRAME_NO_TASKBAR),
  60.     myOwner(owner)
  61. {
  62.     textCtrl = new wxTextCtrl(this, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE | wxHSCROLL);
  63.     bDone = new wxButton(this, -1, "Done");
  64.     wxLayoutConstraints *c = new wxLayoutConstraints;
  65.     c->bottom.SameAs    (this, wxBottom, 10);
  66.     c->centreX.SameAs   (this, wxCentreX, 10);
  67.     c->width.AsIs       ();
  68.     c->height.AsIs      ();
  69.     bDone->SetConstraints(c);
  70.     c = new wxLayoutConstraints;
  71.     c->top.SameAs       (this, wxTop);
  72.     c->left.SameAs      (this, wxLeft);
  73.     c->right.SameAs     (this, wxRight);
  74.     c->bottom.SameAs    (bDone, wxTop, 10);
  75.     textCtrl->SetConstraints(c);
  76.     // set initial text - if single line, break up into smaller lines, otherwise leave as-is
  77.     if (initialText.size() == 1) {
  78.         int i, j;
  79.         for (i=j=0; i<initialText[0].size(); ++i, ++j) {
  80.             if (j > 60 && initialText[0][i] == ' ') {
  81.                 *textCtrl << 'n';
  82.                 j = 0;
  83.             } else
  84.                 *textCtrl << initialText[0][i];
  85.         }
  86.     } else {
  87.         for (int i=0; i<initialText.size(); ++i)
  88.             *textCtrl << initialText[i].c_str() << 'n';
  89.     }
  90.     SetClientSize(size);
  91.     SetSizeHints(200, 150); // min size
  92.     SetAutoLayout(true);
  93.     Layout();
  94. }
  95. MultiTextDialog::~MultiTextDialog(void)
  96. {
  97.     if (myOwner) myOwner->DialogDestroyed(this);
  98. }
  99. void MultiTextDialog::OnCloseWindow(wxCloseEvent& event)
  100. {
  101.     Destroy();
  102. }
  103. // these two are possibly temporary kludges to keep text area from coming up initially all selected
  104. int MultiTextDialog::ShowModalDialog(void)
  105. {
  106.     Show(true);
  107.     textCtrl->SetSelection(0, 0);
  108.     textCtrl->SetInsertionPointEnd();
  109.     return ShowModal();
  110. }
  111. bool MultiTextDialog::ShowDialog(bool show)
  112. {
  113.     bool retval = Show(show);
  114.     textCtrl->SetSelection(0, 0);
  115.     textCtrl->SetInsertionPointEnd();
  116.     return retval;
  117. }
  118. void MultiTextDialog::OnButton(wxCommandEvent& event)
  119. {
  120.     if (event.GetEventObject() == bDone) Destroy();
  121. }
  122. void MultiTextDialog::OnTextChange(wxCommandEvent& event)
  123. {
  124.     if (myOwner) myOwner->DialogTextChanged(this);
  125. }
  126. bool MultiTextDialog::GetLines(TextLines *lines) const
  127. {
  128.     if (!lines) return false;
  129.     lines->clear();
  130.     for (int i=0; i<textCtrl->GetNumberOfLines(); ++i)
  131.         // don't append empty last line
  132.         if (i < textCtrl->GetNumberOfLines() - 1 || textCtrl->GetLineText(i).size() > 0)
  133.             lines->push_back(textCtrl->GetLineText(i).c_str());
  134.     return true;
  135. }
  136. bool MultiTextDialog::GetLine(string *singleString) const
  137. {
  138.     singleString->erase();
  139.     for (int i=0; i<textCtrl->GetNumberOfLines(); ++i) {
  140.         // don't append empty last line
  141.         if (i < textCtrl->GetNumberOfLines() - 1 || textCtrl->GetLineText(i).size() > 0) {
  142.             if (i > 0) singleString->append(1, ' ');
  143.             singleString->append(textCtrl->GetLineText(i).Strip(wxString::both).c_str());
  144.         }
  145.     }
  146.     return true;
  147. }
  148. END_SCOPE(Cn3D)
  149. /*
  150. * ---------------------------------------------------------------------------
  151. * $Log: multitext_dialog.cpp,v $
  152. * Revision 1000.2  2004/06/01 18:28:48  gouriano
  153. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.12
  154. *
  155. * Revision 1.12  2004/05/21 21:41:39  gorelenk
  156. * Added PCH ncbi_pch.hpp
  157. *
  158. * Revision 1.11  2004/03/15 18:25:36  thiessen
  159. * prefer prefix vs. postfix ++/-- operators
  160. *
  161. * Revision 1.10  2004/02/19 17:04:59  thiessen
  162. * remove cn3d/ from include paths; add pragma to disable annoying msvc warning
  163. *
  164. * Revision 1.9  2003/02/03 19:20:04  thiessen
  165. * format changes: move CVS Log to bottom of file, remove std:: from .cpp files, and use new diagnostic macros
  166. *
  167. * Revision 1.8  2002/09/18 19:46:54  thiessen
  168. * don't use wxTE_RICH for this
  169. *
  170. * Revision 1.7  2002/09/18 13:19:32  thiessen
  171. * use wxTE_RICH style for big textctrls
  172. *
  173. * Revision 1.6  2002/08/15 22:13:14  thiessen
  174. * update for wx2.3.2+ only; add structure pick dialog; fix MultitextDialog bug
  175. *
  176. * Revision 1.5  2002/06/12 15:09:15  thiessen
  177. * kludge to avoid initial selected-all state
  178. *
  179. * Revision 1.4  2001/10/16 21:49:07  thiessen
  180. * restructure MultiTextDialog; allow virtual bonds for alpha-only PDB's
  181. *
  182. * Revision 1.3  2001/10/11 14:18:57  thiessen
  183. * make MultiTextDialog non-modal
  184. *
  185. * Revision 1.2  2001/08/06 20:22:00  thiessen
  186. * add preferences dialog ; make sure OnCloseWindow get wxCloseEvent
  187. *
  188. * Revision 1.1  2001/07/10 16:39:54  thiessen
  189. * change selection control keys; add CDD name/notes dialogs
  190. *
  191. */