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 "SymbolDlg.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 #ifdef mgUSE_PALETTEFRM
00046 #include "wx/palettefrm.h"
00047 #include "wx/minibtn.h"
00048 #endif
00049 #endif
00050
00051
00052
00053
00054 IMPLEMENT_CLASS(mgSymbolPanel, wxPanel)
00055 BEGIN_EVENT_TABLE(mgSymbolPanel, wxPanel)
00056
00057
00058 EVT_BUTTON(IDC_SYMBOLDLG_DELETE, mgSymbolPanel::OnDeleteSymbol)
00059 EVT_NOTEBOOK_PAGE_CHANGED(IDC_SYMBOLDLG_LIST, mgSymbolPanel::OnPageChanged)
00060
00061 END_EVENT_TABLE()
00062
00063
00064
00065 IMPLEMENT_CLASS(mgSymListPage, wxPanel)
00066 BEGIN_EVENT_TABLE(mgSymListPage, wxPanel)
00067
00068 EVT_LIST_ITEM_SELECTED(IDC_SYMLISTPAGE_LISTCTRL, mgSymListPage::OnSelectionChanged)
00069
00070 END_EVENT_TABLE()
00071
00072
00073
00074
00075
00076
00077
00078
00079 mgSymbolPanel::mgSymbolPanel(wxWindow *parent, mgMathWnd *mathwnd,
00080 mgMathBox *mathbox, mcSymbolArray *arr,
00081 wxWindowID id, const wxString &title,
00082 const wxPoint &position,
00083 const wxSize& size, long style) :
00084 wxPanel(parent, id, position, size, style),
00085 mgMathBoxWndUser(mathwnd, mathbox)
00086 {
00087
00088 m_pArray = arr;
00089 BuildAll();
00090 }
00091
00092 mgSymbolPanel::~mgSymbolPanel()
00093 {
00094 }
00095
00096
00097 void mgSymbolPanel::AddDefaultLists()
00098 {
00099
00100 mgSymVarPropPanel *m_pVarPanel = new mgSymVarPropPanel(this, -1);
00101 mgSymConstPropPanel *m_pConstPanel = new mgSymConstPropPanel(this, -1);
00102 m_pVarPanel->BuildAll();
00103 m_pConstPanel->BuildAll();
00104
00105
00106 m_pList->AddPage(new mgSymListPage(m_pList, m_pVarPanel,
00107 &mcSymbol::arrUnknowns, -1), wxT("Unknowns"), TRUE);
00108 m_pList->AddPage(new mgSymListPage(m_pList, m_pVarPanel,
00109 &mcSymbol::arrParameters, -1), wxT("Parameters"), TRUE);
00110 m_pList->AddPage(new mgSymListPage(m_pList, m_pConstPanel,
00111 &mcSymbol::arrConstants, -1), wxT("Constants"), TRUE);
00112
00113
00114 if (GetSizer()) GetSizer()->Layout();
00115 }
00116
00117 void mgSymbolPanel::BuildCtrls()
00118 {
00119
00120 m_pList = new wxNotebook(this, IDC_SYMBOLDLG_LIST);
00121 }
00122
00123 void mgSymbolPanel::BuildAll()
00124 {
00125
00126 BuildCtrls();
00127
00128
00129 wxStaticBox *sb = new wxStaticBox(this, -1, wxT("Properties"));
00130 m_pPropertySizer = new wxStaticBoxSizer(sb, wxHORIZONTAL);
00131
00132
00133
00134
00135 wxBoxSizer *buttons = new wxBoxSizer(wxHORIZONTAL);
00136 buttons->Add(new wxButton(this, IDC_SYMBOLDLG_DELETE,
00137 wxT("Delete selected")), 1, wxGROW, 5);
00138
00139
00140 wxBoxSizer *column = new wxBoxSizer(wxVERTICAL);
00141 column->Add(m_pList, 1, wxGROW | wxALL, 5);
00142 column->Add(buttons, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5);
00143
00144
00145
00146 wxSize sz = column->GetMinSize();
00147
00148
00149
00150 wxBoxSizer *main = new wxBoxSizer(wxHORIZONTAL);
00151
00152 main->Add(column, 2, wxGROW);
00153 main->Add(m_pPropertySizer, 2, wxGROW | wxALL, 5);
00154
00155
00156 SetSizer(main);
00157 main->SetSizeHints(this);
00158
00159 }
00160
00161 void mgSymbolPanel::OnDeleteSymbol(wxCommandEvent &ev)
00162 {
00163 mgLogDebug(wxT("mgSymbolPanel::OnDeleteSymbol()"));
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175 }
00176
00177 void mgSymbolPanel::Sync()
00178 {
00179
00180
00181
00182
00183 }
00184
00185 void mgSymbolPanel::OnPageChanged(wxNotebookEvent &ev)
00186 {
00187 mgLogDebug(wxT("mgSymbolPanel::OnPageChanged()"));
00188
00189
00190 int i = ev.GetOldSelection();
00191 if (i != -1) {
00192
00193 mgSymListPage *p = (mgSymListPage *)m_pList->GetPage(i);
00194 m_pPropertySizer->Hide(p->GetLinkedPropPanel());
00195 m_pPropertySizer->Remove(p->GetLinkedPropPanel());
00196 }
00197
00198 int n = ev.GetSelection();
00199 mgSymListPage *p = (mgSymListPage *)m_pList->GetPage(n);
00200 m_pPropertySizer->Add(p->GetLinkedPropPanel(), 1, wxGROW);
00201 m_pPropertySizer->Show(p->GetLinkedPropPanel());
00202
00203
00204
00205 GetSizer()->Layout();
00206 m_pList->Layout();
00207 m_pPropertySizer->Layout();
00208 GetSizer()->SetSizeHints(this);
00209 }
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219 mgSymListPage::mgSymListPage(wxWindow *parent,
00220 mgSymPropPanel *prop,
00221 mcSymbolArray *array,
00222 wxWindowID id,
00223 const wxString &title,
00224 const wxPoint& pos,
00225 const wxSize& size,
00226 long style) :
00227 wxPanel(parent, id, pos, size, style)
00228 {
00229
00230
00231 m_pPropPanel = prop;
00232 m_pArray = array;
00233
00234 BuildAll();
00235 }
00236
00237
00238 void mgSymListPage::BuildCtrls()
00239 {
00240 m_pList = new wxListCtrl(this, IDC_SYMLISTPAGE_LISTCTRL, wxDefaultPosition,
00241 wxDefaultSize, wxLC_LIST | wxLC_SINGLE_SEL |
00242 wxSUNKEN_BORDER | wxLC_EDIT_LABELS);
00243
00244 for (int i=0; i < m_pArray->data_GetCount(); i++)
00245 m_pList->InsertItem(i, m_pArray->data_GetSymbolName(i));
00246 }
00247
00248 void mgSymListPage::BuildAll()
00249 {
00250 wxBoxSizer *main = new wxBoxSizer(wxVERTICAL);
00251
00252 BuildCtrls();
00253
00254 main->Add(new wxStaticText(this, -1, wxT("Symbol list:")), 0, wxGROW | wxLEFT | wxTOP, 5);
00255 main->Add(m_pList, 1, wxGROW | wxALL, 5);
00256
00257 SetSizer(main);
00258 main->SetSizeHints(this);
00259 }
00260
00261 void mgSymListPage::OnSelectionChanged(wxListEvent &ev)
00262 {
00263 m_pPropPanel->LinkWithList(m_pList);
00264 m_pPropPanel->LinkWithSymbol(m_pArray->data_GetSymbol(ev.GetIndex()));
00265 }
00266
00267
00268
00269
00270
00271
00272
00273
00274 mgSymbolPalette::mgSymbolPalette(
00275 wxMainFrame *parent, wxWindow *client, mgMathWnd *mathwnd,
00276 mgMathBox *mathbox, mcSymbolArray *arr, wxWindowID id,
00277 const wxString &title, const wxPoint &pos, const wxSize &size,
00278 long style, const wxString &name)
00279 : wxPaletteFrame(parent, id, title, pos, size, style, name)
00280 {
00281
00282
00283
00284 #ifdef mgUSE_PALETTEFRM
00285 SetClient(new mgSymbolPanel(this, mathwnd, mathbox, arr));
00286 AddMiniButton(new wxCollapseBox(this));
00287 SetSizeHintsUsingClientHints();
00288 #else
00289 m_pPanel = new mgSymbolPanel(this, mathwnd, mathbox, arr);
00290 SetSize(330, 220);
00291 Update();
00292 SendSizeEvent();
00293 #endif
00294 }
00295
00296 mgSymbolPanel *mgSymbolPalette::GetPanel()
00297 {
00298 #ifdef mgUSE_PALETTEFRM
00299 return (mgSymbolPanel*)GetClient();
00300 #else
00301 return (mgSymbolPanel*)m_pPanel;
00302 #endif
00303 }