DerivativeLineSearchPanel.h

00001 
00010 #ifndef DERIVATIVELINESEARCHPANEL_H
00011 #define DERIVATIVELINESEARCHPANEL_H
00012 
00013 #include "../Symbols.h"
00014 #include "../text-util.h"
00015 
00016 #include "DoubleParameterValidator.h"
00017 #include "MethodPanelInfo.h"
00018 #include "PointControl.h"
00019 #include "ui_util.h"
00020 
00021 template <class T>
00022 class DerivativeLineSearchPanel: public wxPanel
00023 {
00024 public:
00025 
00026     DerivativeLineSearchPanel(wxWindow*     parent,
00027                               int           id,
00028                               T*            pMethod,
00029                               const         wxPoint& pos=wxDefaultPosition,
00030                               const         wxSize& size=wxDefaultSize,
00031                               long          style=0);
00032 
00037     static wxPanel*         CreatePanel(MethodPanelInfo     panelInfo);
00038 
00039 private:
00040     void do_layout();
00041 
00042 protected:
00043     wxStaticText* mpAlphaLabel;
00044     wxTextCtrl* mpAlphaTextCtrl;
00045     wxStaticText* mpGammaLabel;
00046     wxTextCtrl* mpGammaTextCtrl;
00047     wxStaticText* mpEpsilonLabel;
00048     wxTextCtrl* mpEpsilonTextCtrl;
00049 
00050 };
00051 
00052 template <class T>
00053 DerivativeLineSearchPanel<T>::DerivativeLineSearchPanel
00054             (wxWindow*            parent,
00055              int                  id,
00056              T*                   pMethod,
00057              const                wxPoint& pos,
00058              const                wxSize& size,
00059              long                 style)
00060             : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL)
00061 {
00062     const Symbols& symbols = Symbols::GetInstance();
00063     mpAlphaLabel = new wxStaticText(this, -1,
00064             _("Initial point shift factor")
00065             + LabelSymbol(symbols[Symbols::ALPHA]));
00066     mpAlphaTextCtrl = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition,
00067             wxDefaultSize, wxTE_RIGHT);
00068     mpGammaLabel = new wxStaticText(this, -1,
00069             EmbedString(_("Decrease of %s factor"), symbols[Symbols::ALPHA])
00070             + LabelSymbol(symbols[Symbols::GAMMA]));
00071     mpGammaTextCtrl = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition,
00072             wxDefaultSize, wxTE_RIGHT);
00073     mpEpsilonLabel = new wxStaticText(this, -1,
00074             _("Stop condition") + LabelSymbol(symbols[Symbols::EPSILON]));
00075     mpEpsilonTextCtrl = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition,
00076             wxDefaultSize, wxTE_RIGHT);
00077 
00078     do_layout();
00079 
00080     // Walidatory
00081     mpAlphaTextCtrl->SetValidator(DoubleParameterValidator(pMethod->mAlpha));
00082     mpGammaTextCtrl->SetValidator(DoubleParameterValidator(pMethod->mGamma));
00083     mpEpsilonTextCtrl->SetValidator(
00084             DoubleParameterValidator(pMethod->mEpsilon));
00085 
00086 }// DerivativeLineSearchPanel
00087 
00088 template <class T>
00089 void DerivativeLineSearchPanel<T>::do_layout()
00090 {
00091     wxBoxSizer* p_main_sizer = new wxBoxSizer(wxVERTICAL);
00092     wxGridSizer* p_grid_sizer = new wxGridSizer(3, 2, 0, 0);
00093     p_grid_sizer->Add(mpAlphaLabel, 0,
00094                     wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);
00095     p_grid_sizer->Add(mpAlphaTextCtrl, 0,
00096                     wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);
00097     p_grid_sizer->Add(mpGammaLabel, 0,
00098                     wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);
00099     p_grid_sizer->Add(mpGammaTextCtrl, 0,
00100                     wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);    p_grid_sizer->Add(mpEpsilonLabel, 0,
00101                     wxALL|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);
00102     p_grid_sizer->Add(mpEpsilonTextCtrl, 0,
00103                     wxALL|wxEXPAND|wxALIGN_CENTER_VERTICAL|wxADJUST_MINSIZE, 2);
00104     p_main_sizer->Add(p_grid_sizer, 0, wxEXPAND, 0);
00105     SetAutoLayout(true);
00106     SetSizer(p_main_sizer);
00107     p_main_sizer->Fit(this);
00108     p_main_sizer->SetSizeHints(this);
00109 }// do_layout
00110 
00111 template <class T>
00112 /* static */ wxPanel*
00113 DerivativeLineSearchPanel<T>::CreatePanel(MethodPanelInfo   panelInfo)
00114 {
00115     T* p_method = dynamic_cast<T*>(panelInfo.pMethod());
00116 
00117     if (panelInfo.PanelType() == MethodPanelInfo::STANDALONE)
00118     {
00119         // Tworzy panel z panelu metody w kierunku oraz kontrolki
00120         // ustawiania odcinka początkowego.
00121         PointControl* p_starting_point = new PointControl(panelInfo.pParent(),
00122                 -1, wxDefaultPosition, wxDefaultSize, 0, _("Starting point"));
00123         p_starting_point->Init((panelInfo.pProblem())->Variables(),
00124                /*p_method->mStartingPoint*/p_method->mInitialStartingPoint);
00125 
00126         return CreatePanelOfTwo(
00127                 panelInfo.pParent(),
00128                 new DerivativeLineSearchPanel<T>(panelInfo.pParent(), -1,
00129                                                  p_method),
00130                 p_starting_point);
00131     }
00132     else
00133     {
00134         return new DerivativeLineSearchPanel(panelInfo.pParent(), -1, p_method);
00135     }
00136 }// CreatePanel
00137 
00138 #endif // DERIVATIVELINESEARCHPANEL_H

Wygenerowano Fri Sep 29 21:04:48 2006 dla EduOptim2 programem  doxygen 1.4.6