00001
00010 #ifndef METHODWITHLINESEARCHPANEL_H
00011 #define METHODWITHLINESEARCHPANEL_H
00012
00013 #include "DoubleParameterValidator.h"
00014 #include "LineSearchControl.h"
00015 #include "LineSearchValidator.h"
00016 #include "MethodPanelInfo.h"
00017 #include "MethodPanelFactory.h"
00018 #include "PointControl.h"
00019 #include "StopConditionControl.h"
00020 #include "StopConditionValidator.h"
00021
00022 template <class T>
00023 class MethodWithLineSearchPanel
00024 : public wxPanel
00025 {
00026 public:
00027
00030 MethodWithLineSearchPanel(wxWindow* parent,
00031 int id,
00032 T* pMethod,
00033 const ProblemBase& problem,
00034 const wxPoint& pos=wxDefaultPosition,
00035 const wxSize& size=wxDefaultSize,
00036 long style=0);
00037
00042 static wxPanel* CreatePanel(MethodPanelInfo panelInfo);
00043
00044 private:
00045 protected:
00046
00047 void do_layout();
00048
00049 wxBoxSizer* mpMainSizer;
00050
00051 LineSearchControl* mpLineSearch;
00052 StopConditionControl* mpStopCondition;
00053 PointControl* mpStartingPoint;
00054 };
00055
00056 template <class T>
00057 MethodWithLineSearchPanel<T>::MethodWithLineSearchPanel
00058 (wxWindow* parent,
00059 int id,
00060 T* pMethod,
00061 const ProblemBase& problem,
00062 const wxPoint& pos,
00063 const wxSize& size,
00064 long style)
00065 : wxPanel(parent, id, pos, size, wxTAB_TRAVERSAL)
00066 {
00067
00068 mpLineSearch = new LineSearchControl(this, -1, problem);
00069 mpStopCondition = new StopConditionControl(this, -1);
00070 mpStartingPoint = new PointControl(this, -1, wxDefaultPosition,
00071 wxDefaultSize, 0, _("Starting point"));
00072
00073 do_layout();
00074
00075
00076 mpStopCondition->SetList(pMethod->AllowedStopConditions());
00077
00078
00079 mpLineSearch->SetValidator(LineSearchValidator(pMethod->mcpLineSearch,
00080 &problem));
00081 mpStopCondition->SetValidator(StopConditionValidator(
00082 reinterpret_cast<CountedPtr<const StopConditionBase>&>(
00083 pMethod->mcpStopCondition)));
00084
00085
00086 mpStartingPoint->Init(problem.Variables(),
00087 pMethod->mInitialStartingPoint);
00088
00089 }
00090
00091
00092 template <class T>
00093 wxPanel*
00094 MethodWithLineSearchPanel<T>::CreatePanel(MethodPanelInfo panelInfo)
00095 {
00096 return new MethodWithLineSearchPanel(
00097 panelInfo.pParent(),
00098 -1,
00099 dynamic_cast<T*>(panelInfo.pMethod()),
00100 *panelInfo.pProblem());
00101
00102 }
00103
00104 template <class T>
00105 void
00106 MethodWithLineSearchPanel<T>::do_layout()
00107 {
00108
00109 mpMainSizer = new wxBoxSizer(wxVERTICAL);
00110 mpMainSizer->Add(mpLineSearch, 0, wxEXPAND, 0);
00111 mpMainSizer->Add(mpStopCondition, 0, wxEXPAND, 0);
00112 mpMainSizer->Add(mpStartingPoint, 1, wxEXPAND, 0);
00113
00114 SetAutoLayout(true);
00115 SetSizer(mpMainSizer);
00116 mpMainSizer->Fit(this);
00117 mpMainSizer->SetSizeHints(this);
00118
00119 }
00120
00121 #endif // METHODWITHLINESEARCHPANEL_H