From ee8859be70286c4b78ed9ff7ded79ede5a5dd645 Mon Sep 17 00:00:00 2001 From: Luis Ibanez Date: Tue, 22 May 2001 10:41:15 -0400 Subject: [PATCH] Class to manage the list of properties displayed on the scroller --- Source/FLTKDialog/FLTKPropertyList.cpp | 196 +++++++++++++++++++++++++ Source/FLTKDialog/FLTKPropertyList.h | 118 +++++++++++++++ 2 files changed, 314 insertions(+) create mode 100644 Source/FLTKDialog/FLTKPropertyList.cpp create mode 100644 Source/FLTKDialog/FLTKPropertyList.h diff --git a/Source/FLTKDialog/FLTKPropertyList.cpp b/Source/FLTKDialog/FLTKPropertyList.cpp new file mode 100644 index 000000000..8f5208b7d --- /dev/null +++ b/Source/FLTKDialog/FLTKPropertyList.cpp @@ -0,0 +1,196 @@ +// FLTKPropertyList.cpp : implementation file +// + +#include "FLTKPropertyList.h" +#include "../cmCacheManager.h" +#include "Fl/filename.H" +#include "Fl/fl_file_chooser.H" +#include "Fl/fl_color_chooser.H" +#include "Fl/fl_ask.H" + +namespace fltk { + +///////////////////////////////////////////////////////////////////////////// +// PropertyList + +PropertyList::PropertyList() +{ + m_Dirty = false; + m_curSel = -1; +} + +PropertyList::~PropertyList() +{ + for(std::set::iterator i = m_PropertyItems.begin(); + i != m_PropertyItems.end(); ++i) + { + delete *i; + } +} + + + + +int PropertyList::AddItem(string txt) +{ + int nIndex =0;// = AddString(txt); + return nIndex; +} + +int PropertyList::AddPropItem(PropertyItem* pItem) +{ + int nIndex =0; //= AddString(_T("")); + // SetItemDataPtr(nIndex,pItem); + m_PropertyItems.insert(pItem); + return nIndex; +} + +int PropertyList::AddProperty(const char* name, + const char* value, + const char* helpString, + int type, + const char* comboItems) +{ + std::cout << "Adding property type: " << type; + std::cout << " Name " << name; + std::cout << " = " << value << std::endl; + + PropertyItem* pItem = 0; + for(int i =0; i < this->GetCount(); ++i) + { + PropertyItem* item = this->GetItem(i); + if(item->m_propName == name) + { + pItem = item; + if(pItem->m_curValue != value) + { + pItem->m_curValue = value; + pItem->m_HelpString = helpString; + m_Dirty = true; + Invalidate(); + } + return i; + } + } + // if it is not found, then create a new one + if(!pItem) + { + pItem = new PropertyItem(name, value, helpString, type, comboItems); + } + return this->AddPropItem(pItem); +} + + + + +void PropertyList::OnButton() +{ + PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel); + + //display the appropriate common dialog depending on what type + //of chooser is associated with the property + if (pItem->m_nItemType == PropertyList::COLOR) + { + unsigned char red = 0; + unsigned char blue = 0; + unsigned char green = 0; + fl_color_chooser("Please pick a color",red,green,blue); + char buffer[300]; + sprintf(buffer,"RGB(%d,%d,%d)",red,green,blue); + pItem->m_curValue = buffer; + m_Dirty = true; + Invalidate(); + } + else if (pItem->m_nItemType == PropertyList::FILE) + { + string currPath = pItem->m_curValue; + + const char * SelectedFile + = fl_file_chooser("Choose a file", + "*",currPath.c_str() ); + + if( SelectedFile ) + { + pItem->m_curValue = SelectedFile; + m_Dirty = true; + Invalidate(); + } + } + else if (pItem->m_nItemType == PropertyList::PATH) + { + string currPath = pItem->m_curValue; + string initialDir = currPath; + + const char * SelectedFile + = fl_file_chooser("Choose a directory", + "*/",initialDir.c_str() ); + + if( SelectedFile && filename_isdir( SelectedFile ) ) + { + pItem->m_curValue = SelectedFile; + m_Dirty = true; + Invalidate(); + } + } + else if (pItem->m_nItemType == PropertyList::FONT) + { + } +} + + + + +void PropertyList::OnHelp() +{ + if(m_curSel == -1 || this->GetCount() <= 0) + { + return; + } + PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(m_curSel); + fl_message(pItem->m_HelpString.c_str()); +} + + +void PropertyList::RemoveAll() +{ + int c = this->GetCount(); + for(int i =0; i < c; ++i) + { + PropertyItem* pItem = (PropertyItem*) GetItemDataPtr(0); + cmCacheManager::GetInstance()->RemoveCacheEntry(pItem->m_propName.c_str()); + m_PropertyItems.erase(pItem); + delete pItem; + // this->DeleteString(0); + } + Invalidate(); +} + + + +PropertyItem * PropertyList::GetItemDataPtr(int index) +{ + std::set::iterator it = m_PropertyItems.begin(); + for(int i=0; it != m_PropertyItems.end() && i::iterator it = m_PropertyItems.begin(); + for(int i=0; it != m_PropertyItems.end() && i + + +namespace fltk { + +using std::string; + +///////////////////////////////////////////////////////////////////////////// +//PropertyList Items +class PropertyItem +{ +// Attributes +public: + string m_HelpString; + string m_propName; + string m_curValue; + int m_nItemType; + string m_cmbItems; + bool m_Removed; +public: + PropertyItem(string propName, string curValue, + string helpString, + int nItemType, string cmbItems) + { + m_HelpString = helpString; + m_Removed = false; + m_propName = propName; + m_curValue = curValue; + m_nItemType = nItemType; + m_cmbItems = cmbItems; + } +}; + +///////////////////////////////////////////////////////////////////////////// +// PropertyList window + +class PropertyList +{ +// Construction +public: + enum ItemType + { + COMBO = 0, + EDIT, + COLOR, + FONT, + FILE, + CHECKBOX, + PATH + }; + PropertyList(); + +// Attributes +public: + +// Operations +public: + int AddItem(string txt); + int AddProperty(const char* name, + const char* value, + const char* helpString, + int type, + const char* comboItems); + std::set GetItems() + { + return m_PropertyItems; + } + void Invalidate(void) + { + // fltk redraw(); + } + + int GetCount(void) const + { + return m_PropertyItems.size(); + } + void OnButton(void); + void OnHelp(void); + void RemoveAll(); + PropertyItem* GetItem(int index); + PropertyItem* GetItemDataPtr(int m_curSel); + +// Implementation +public: + virtual ~PropertyList(); + + // Generated message map functions +protected: + + int AddPropItem(PropertyItem* pItem); + +// CComboBox m_cmbBox; +// CEdit m_editBox; +// CButton m_btnCtrl; +// CButton m_CheckBoxControl; + + + bool m_Dirty; + int m_curSel; + int m_prevSel; + int m_nDivider; + int m_nDivTop; + int m_nDivBtm; + int m_nOldDivX; + int m_nLastBox; + + std::set m_PropertyItems; + +}; + + +} // end namespace fltk + +#endif