/*========================================================================= 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 #include #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