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
00081 mpAlphaTextCtrl->SetValidator(DoubleParameterValidator(pMethod->mAlpha));
00082 mpGammaTextCtrl->SetValidator(DoubleParameterValidator(pMethod->mGamma));
00083 mpEpsilonTextCtrl->SetValidator(
00084 DoubleParameterValidator(pMethod->mEpsilon));
00085
00086 }
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 }
00110
00111 template <class T>
00112 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
00120
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->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 }
00137
00138 #endif // DERIVATIVELINESEARCHPANEL_H