diff options
Diffstat (limited to 'Source/WXDialog/PropertyList.h')
-rw-r--r-- | Source/WXDialog/PropertyList.h | 339 |
1 files changed, 339 insertions, 0 deletions
diff --git a/Source/WXDialog/PropertyList.h b/Source/WXDialog/PropertyList.h new file mode 100644 index 0000000..8dbf4da --- /dev/null +++ b/Source/WXDialog/PropertyList.h @@ -0,0 +1,339 @@ +/*========================================================================= + + Program: WXDialog - wxWidgets X-platform GUI Front-End for CMake + Module: $RCSfile$ + Language: C++ + Date: $Date$ + Version: $Revision$ + + Author: Jorgen Bodde + + Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. + See Copyright.txt or http://www.cmake.org/HTML/Copyright.html for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notices for more information. + +=========================================================================*/ + +#ifndef __WXPROPERTYLIST_H +#define __WXPROPERTYLIST_H + + +#ifndef WX_PRECOMP + #include "wx/wx.h" +#endif + +#include <wx/dynarray.h> +#include <wx/grid.h> + +#include "../cmStandardIncludes.h" + +#ifdef __LINUX__ + #define MC_DEFAULT_WILDCARD "*" +#else + #define MC_DEFAULT_WILDCARD "*.*" +#endif + +#if 0 + +// the editor for string/text data +class wxGridCellPathEditor : public wxGridCellEditor +{ +public: + wxGridCellPathEditor(); + + virtual void Create(wxWindow* parent, + wxWindowID id, + wxEvtHandler* evtHandler); + virtual void SetSize(const wxRect& rect); + + virtual void PaintBackground(const wxRect& rectCell, wxGridCellAttr *attr); + + virtual bool IsAcceptedKey(wxKeyEvent& event); + virtual void BeginEdit(int row, int col, wxGrid* grid); + virtual bool EndEdit(int row, int col, wxGrid* grid); + + virtual void Reset(); + virtual void StartingKey(wxKeyEvent& event); + virtual void HandleReturn(wxKeyEvent& event); + + // parameters string format is "max_width" + virtual void SetParameters(const wxString& params); + + virtual wxGridCellEditor *Clone() const + { return new wxGridCellPathEditor; } + + // DJC MAPTEK + // added GetValue so we can get the value which is in the control + virtual wxString GetValue() const; +protected: + wxTextCtrl *Text() const { return (wxTextCtrl *)m_control; } + + // parts of our virtual functions reused by the derived classes + void DoBeginEdit(const wxString& startValue); + void DoReset(const wxString& startValue); + +private: + size_t m_maxChars; // max number of chars allowed + wxString m_startValue; + + DECLARE_NO_COPY_CLASS(wxGridCellPathEditor) +}; + +#endif + +///////////////////////////////////////////////////////////////////////////// +//wxPropertyItem Items +class wxPropertyItem +{ +public: + wxPropertyItem(const wxString &propName, const wxString &curValue, + const wxString &helpString, int nItemType, const wxString &cmbItems) + : m_NewValue(true) + , m_HelpString(helpString) + , m_Removed(false) + , m_propName(propName) + , m_curValue(curValue) + , m_nItemType(nItemType) + , m_cmbItems(cmbItems) + , m_Advanced(false) + { + //m_NewValue = true; + //m_HelpString = helpString; + //m_Removed = false; + //m_propName = propName; + //m_curValue = curValue; + //m_nItemType = nItemType; + //m_cmbItems = cmbItems; + //m_Advanced = false; + } + + const wxString &GetCurValue() const { + return m_curValue; + }; + + const wxString &GetPropName() const { + return m_propName; + }; + + void SetCurValue(const char *str) { + m_curValue = str; + }; + + void SetPropName(const char *str) { + m_propName = str; + }; + + void SetAdvanced(bool value) { + m_Advanced = value; + }; + + void SetHelpString(const char *str) { + m_HelpString = str; + }; + + bool GetAdvanced() const { + return m_Advanced; + }; + + void SetNewValue(bool value) { + m_NewValue = value; + }; + + bool GetNewValue() const { + return m_NewValue; + }; + + int GetItemType() const { + return m_nItemType; + }; + + const wxString &GetHelpString() const { + return m_HelpString; + }; + + // returns true when this property item is a filepath + bool IsFilePath(); + + // returns true when this property item is a dir path + bool IsDirPath(); + +private: + wxString m_HelpString; + wxString m_propName; + wxString m_curValue; + int m_nItemType; + wxString m_cmbItems; + bool m_NewValue; + bool m_Removed; + bool m_Advanced; +}; + +WX_DEFINE_ARRAY(wxPropertyItem *, wxPropertyItems); + +///////////////////////////////////////////////////////////////////////////// +// wxPropertyList Grid +class wxPropertyList : public wxGrid +{ +// Construction +public: + wxPropertyList(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxWANTS_CHARS, + const wxString& name = wxPanelNameStr) + : wxGrid(parent, id, pos, size, style, name) + { + }; + + enum ItemType + { + COMBO = 0, + EDIT, + COLOR, + FONT, + FILE, + CHECKBOX, + PATH + }; + + virtual ~wxPropertyList(); + +public: + bool GetShowAdvanced() const { + return m_ShowAdvanced; + }; + + void SetProjectGenerated(bool value) { + m_generatedProjects = value; + }; + + bool IsGenerated() { + return m_generatedProjects; + }; + + int AddItem(const wxString &txt); + + void AddProperty(const char* name, const char* value, const char* helpString, int type, + const char* comboItems, bool reverseOrder, bool advanced); + + void RemoveProperty(wxPropertyItem *pItem); + + void HideControls(); + void ShowAdvanced(); + void HideAdvanced(); + + void RemoveAll(); + + wxPropertyItem* GetItem(size_t index) { + wxCHECK(index < GetCount(), 0); + return m_PropertyItems[index]; + }; + + size_t GetCount() const { + return m_PropertyItems.Count(); + }; + + const wxPropertyItems &GetItems() { + return m_PropertyItems; + }; + + void SetShowAdvanced(bool value) { + m_ShowAdvanced = value; + }; + + bool UpdatePropertyItem(wxPropertyItem *pItem, int row); + + /** Returns the row of the grid on which the item is found. -1 is returned when not found */ + int FindProperty(wxPropertyItem *pItem); + + /** Returns true when the cache is still dirty, which means + after a configuration run, there are still new items */ + bool IsCacheDirty() { + // check if we have items that are new + for(size_t i = 0; i < m_PropertyItems.Count(); i++) + { + //if((m_PropertyItems[i]->GetNewValue() && m_ShowAdvanced && m_PropertyItems[i]->GetAdvanced()) || + // (m_PropertyItems[i]->GetNewValue() && !m_ShowAdvanced)) + if(m_PropertyItems[i]->GetNewValue()) + return true; + } + + // return flag if generated cache or not + return false; + }; + + /** Returns the property item from the current row. 0 if no property item found */ + wxPropertyItem *GetPropertyItemFromRow(int row); + + /** Finds the property by name and returns the property item */ + wxPropertyItem *FindPropertyByName(const wxString &name); + + /** Sets the search filter. Making sure that the items currently displayed + match this substring query */ + void SetQuery(const wxString &query) { + m_strQuery = query; + UpdateGridView(); + }; + + /** Returns the last used query. */ + const wxString &GetQuery() { + return m_strQuery; + }; + + /** Function that tries to browse for the item that is selected */ + void BrowseSelectedItem(); + + /** Returns true when the item is browsable (file or path) and only one item is + selected */ + bool IsSelectedItemBrowsable(int row = -1); + +private: + // order = 0 sorted + // order = 1 add to top + // order = 2 add to bottom + int AddPropItem(wxPropertyItem* pItem, int order); + + /** Adds the property item to the grid. */ + int AddPropertyToGrid(wxPropertyItem *pItem, int order) ; + + /** Adds / removes all the items that are currently (not) matching the + query filter */ + void UpdateGridView(); + + void OnSelectCell( wxGridEvent& event ); + + void OnCellChange( wxGridEvent& event ); + + void OnCellPopup( wxGridEvent& event ); + + void OnIgnoreCache( wxCommandEvent& event ); + + void OnDeleteCache( wxCommandEvent& event ); + + void OnSizeGrid( wxSizeEvent &event ); + + void OnBrowseItem( wxCommandEvent& event ); + + void OnKeyPressed( wxKeyEvent &event ); + + int m_curSel; + int m_prevSel; + int m_nDivider; + int m_nDivTop; + int m_nDivBtm; + int m_nOldDivX; + int m_nLastBox; + bool m_bTracking; + bool m_bDivIsSet; + bool m_ShowAdvanced; + // flag to indicate the last cache load has resulted + // in generating a valid project + bool m_generatedProjects; + wxString m_strQuery; + wxPropertyItems m_PropertyItems; + + DECLARE_EVENT_TABLE() +}; + +#endif |