00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00030 
00031 
00032 
00033 
00034 #ifdef __GNUG__
00035    #pragma implementation "SymPropPanel.h"
00036 #endif
00037 
00038 
00039 #include "mg/mgprec.h"
00040 
00041 #ifndef mgPRECOMP
00042    #include "mg/GUIUtils.h"
00043    #include "mg/SymbolDlg.h"
00044    #include "mg/SymPropPanel.h"
00045 #endif
00046 
00047 
00048 
00049 
00050 IMPLEMENT_CLASS(mgSymPropPanel, wxPanel)
00051 BEGIN_EVENT_TABLE(mgSymPropPanel, wxPanel)
00052 
00053    
00054    EVT_BUTTON(IDC_SYMPROP_ADD, mgSymPropPanel::OnAddSymbolBtn)
00055    EVT_BUTTON(IDC_SYMPROP_SET, mgSymPropPanel::OnSetSymbolBtn)
00056 END_EVENT_TABLE()
00057 
00058 
00059 IMPLEMENT_CLASS(mgSymVarPropPanel, mgSymPropPanel)
00060 BEGIN_EVENT_TABLE(mgSymVarPropPanel, mgSymPropPanel)
00061 END_EVENT_TABLE()
00062 
00063 IMPLEMENT_CLASS(mgSymConstPropPanel, mgSymPropPanel)
00064 BEGIN_EVENT_TABLE(mgSymConstPropPanel, mgSymPropPanel)
00065 END_EVENT_TABLE()
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 mgSymPropPanel::mgSymPropPanel(wxWindow *parent,
00077       wxWindowID id, 
00078       const wxString &title,
00079       const wxPoint& pos,
00080       const wxSize& size,
00081       long style) :
00082       wxPanel(parent, id, pos, size, style)
00083 {
00084    m_pList = NULL;
00085    
00086 }
00087       
00088 mgSymPropPanel::~mgSymPropPanel()
00089 {
00090    
00091    mcSAFE_DELETE(mdata_pFilter);
00092 }
00093 
00094 void mgSymPropPanel::BuildCtrls()
00095 {
00096    m_pNameBox = new mgMathBox(this, -1);
00097 
00098    m_pNameBox->DisableContextMenu();
00099    m_pNameBox->SetStyleArray(mcMathMngHelpers::sgui_pSmallStyles);
00100    m_pNameBox->DisableSelection();
00101    m_pNameBox->SetSizeHintsToFitContents();
00102 
00103    
00104    mdata_pFilter = new mcFilter(mcFILTER_INCLUDE_ELEMENT_LIST, mcET_SYMBOL, 1);
00105    mdata_pFilter->SetMaxInstancesFor(mcET_MONOMIAL, 1);
00106    m_pNameBox->GetMathObj().data_SetFilter(mdata_pFilter);
00107 }
00108 
00109 void mgSymPropPanel::BuildAll()
00110 {
00111    wxBoxSizer *main = new wxBoxSizer(wxVERTICAL);
00112 
00113    
00114    BuildCtrls();
00115 
00116    
00117    wxBoxSizer *name = new wxBoxSizer(wxHORIZONTAL);
00118    name->Add(new wxStaticText(this, -1, wxT("Symbol:")), 0, wxALIGN_CENTER | wxALL, 5);
00119    name->Add(m_pNameBox, 1, wxGROW | wxALL, 5);
00120    
00121    
00122    main->Add(name, 1, wxGROW);
00123    AddSpecificCtrlsSizer(main);
00124 
00125    
00126    wxBoxSizer *btn = new wxBoxSizer(wxHORIZONTAL);
00127    btn->Add(new wxButton(this, IDC_SYMPROP_SET, wxT("Save")), 
00128       1, wxALL, 5);
00129    btn->Add(new wxButton(this, IDC_SYMPROP_ADD, wxT("Add as new")), 
00130       1, wxRIGHT | wxTOP | wxBOTTOM, 5);
00131    main->Add(btn, 0, wxGROW);    
00132 
00133    SetSizer(main);
00134    main->SetSizeHints(this);
00135 }
00136 
00137 void mgSymPropPanel::OnAddSymbolBtn(wxCommandEvent &ev)
00138 {
00139    mgLogDebug(wxT("mgSymPropPanel::OnAddSymbol()"));
00140 
00141    
00142    OnAddSymbol();
00143 }
00144 
00145 void mgSymPropPanel::OnSetSymbolBtn(wxCommandEvent &ev)
00146 {
00147    mgLogDebug(wxT("mgSymPropPanel::OnSetSymbol()"));
00148 
00149    
00150    OnSetSymbol();
00151 }
00152 
00153 void mgSymPropPanel::LinkWithSymbol(mcSymbolProperties *s)
00154 {
00155    
00156    m_pSymbol = s;
00157 
00158    
00159    Update();
00160 }
00161 
00162 void mgSymPropPanel::LinkWithList(wxListCtrl *p)
00163 {
00164    m_pList = p;
00165 
00166    
00167 }
00168 
00169 void mgSymPropPanel::Update()
00170 {
00171    wxKeyEvent ev(wxEVT_CHAR);
00172    ev.m_keyCode = m_pSymbol->m_strSymbol.GetChar(0);
00173    
00174    
00175    m_pNameBox->Clean();
00176 
00177    
00178    m_pNameBox->GetMathObj().data_SetFilter(mdata_pFilter);
00179    m_pNameBox->SetStyleArray(mcMathMngHelpers::sgui_pSmallStyles);
00180 
00181    if (m_pSymbol->m_fEncoding != wxFONTENCODING_DEFAULT)
00182       m_pNameBox->OnSpecialChar(ev);
00183    else
00184       m_pNameBox->OnChar(ev);
00185 }
00186 
00187 wxString mgSymPropPanel::GetName()
00188 {
00189    return m_pNameBox->GetInlinedExpr();
00190 }
00191 
00192 
00193 
00194 
00195 
00196 
00197 
00198 
00199 void mgSymVarPropPanel::AddSpecificCtrlsSizer(wxSizer *p)
00200 {
00201    
00202    m_pRangeBox = new mgMathBox(this, -1);
00203    p->Add(new wxStaticText(this, -1, wxT("Domain:")), 0, wxGROW | wxALL, 5);
00204    p->Add(m_pRangeBox, 1, wxGROW | wxALL, 5);
00205 }
00206 
00207 void mgSymVarPropPanel::OnAddSymbol()
00208 {
00209 }
00210 
00211 void mgSymVarPropPanel::OnSetSymbol()
00212 {
00213 }
00214 
00215 
00216 
00217 
00218 
00219 
00220 
00221 
00222 void mgSymConstPropPanel::AddSpecificCtrlsSizer(wxSizer *p)
00223 {
00224    
00225    
00226    wxTextValidator tv(wxFILTER_NUMERIC, &m_strValue);
00227 
00228    m_pValue = new wxTextCtrl(this, -1, wxT(""), wxDefaultPosition, 
00229       wxDefaultSize, wxTE_CENTRE, tv);
00230    m_pValue->SetMaxLength(SYMCONSTPROP_MAX_VALUE_LENGHT);      
00231 
00232    
00233    p->Add(new wxStaticText(this, -1, wxT("Value:")), 0, wxGROW | wxALL, 5);
00234    p->Add(m_pValue, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5);
00235 }
00236 
00237 void mgSymConstPropPanel::Update()
00238 {
00239    
00240    wxString fmt = wxString::Format(wxT("%%.%df"), SYMCONSTPROP_MAX_VALUE_LENGHT);
00241    wxString str = wxString::Format(fmt, m_pSymbol->m_fValue.GetSmartStr().c_str());
00242    m_pValue->SetValue(str.Left(SYMCONSTPROP_MAX_VALUE_LENGHT));
00243 
00244    
00245    mgSymPropPanel::Update();
00246 }
00247 
00248 void mgSymConstPropPanel::OnAddSymbol()
00249 {
00250    if (m_pList == NULL)
00251       return;
00252 
00253    m_pList->InsertItem(m_pList->GetItemCount(), GetName());
00254 }
00255 
00256 void mgSymConstPropPanel::OnSetSymbol()
00257 {
00258    double tmp;
00259    m_pValue->GetValue().ToDouble(&tmp);
00260 
00261    
00262    m_pSymbol->m_fValue = tmp;
00263 }
00264 
00265 
00266