git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@28522 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
240 lines
5.6 KiB
C++
240 lines
5.6 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: property.cpp
|
|
// Purpose: ctProperty objects represent name/value pairs,
|
|
// for properties of a configuration item.
|
|
// Author: Julian Smart
|
|
// Modified by:
|
|
// Created: 2003-06-03
|
|
// RCS-ID: $Id$
|
|
// Copyright: (c) Julian Smart
|
|
// Licence:
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
|
|
#pragma implementation "property.h"
|
|
#endif
|
|
|
|
// For compilers that support precompilation, includes "wx/wx.h".
|
|
#include "wx/wxprec.h"
|
|
|
|
#ifdef __BORLANDC__
|
|
#pragma hdrstop
|
|
#endif
|
|
|
|
#include "property.h"
|
|
|
|
IMPLEMENT_CLASS(ctProperty, wxObject)
|
|
IMPLEMENT_CLASS(ctProperties, wxObject)
|
|
|
|
void ctProperties::AddProperty(ctProperty* property, const wxString& insertAfter)
|
|
{
|
|
ctProperty* oldProp = FindProperty(property->GetName());
|
|
if (oldProp)
|
|
m_list.DeleteObject(oldProp);
|
|
|
|
if (insertAfter)
|
|
{
|
|
ctProperty* insertAfterProp = FindProperty(insertAfter);
|
|
if (insertAfterProp)
|
|
{
|
|
wxObjectList::compatibility_iterator node = m_list.Member(insertAfterProp);
|
|
if (node)
|
|
{
|
|
wxObjectList::compatibility_iterator insertBeforeNode = node->GetNext();
|
|
m_list.Insert(insertBeforeNode, property);
|
|
}
|
|
else
|
|
m_list.Append(property);
|
|
}
|
|
else
|
|
m_list.Append(property);
|
|
}
|
|
else
|
|
m_list.Append(property);
|
|
|
|
if (oldProp)
|
|
{
|
|
property->GetVariant() = oldProp->GetVariant();
|
|
|
|
delete oldProp;
|
|
}
|
|
}
|
|
|
|
void ctProperties::RemoveProperty(ctProperty* property)
|
|
{
|
|
m_list.DeleteObject(property);
|
|
}
|
|
|
|
void ctProperties::DeleteProperty(const wxString& name)
|
|
{
|
|
ctProperty* prop = FindProperty(name);
|
|
if (prop)
|
|
{
|
|
m_list.DeleteObject(prop);
|
|
delete prop;
|
|
}
|
|
}
|
|
|
|
ctProperty* ctProperties::FindProperty(const wxString& name) const
|
|
{
|
|
wxObjectList::compatibility_iterator node = m_list.GetFirst();
|
|
while (node)
|
|
{
|
|
ctProperty* prop = (ctProperty*) node->GetData();
|
|
if (prop->GetName() == name)
|
|
return prop;
|
|
|
|
node = node->GetNext();
|
|
}
|
|
return (ctProperty*) NULL;
|
|
}
|
|
|
|
wxVariant ctProperties::FindPropertyValue(const wxString& name) const
|
|
{
|
|
ctProperty* prop = FindProperty(name);
|
|
if (prop)
|
|
return prop->m_variant;
|
|
else
|
|
return wxEmptyString;
|
|
}
|
|
|
|
wxString ctProperties::FindPropertyValueString(const wxString& name) const
|
|
{
|
|
ctProperty* prop = FindProperty(name);
|
|
if (prop)
|
|
return prop->m_variant.GetString();
|
|
else
|
|
return wxEmptyString;
|
|
}
|
|
|
|
ctProperty* ctProperties::FindOrCreateProperty(const wxString& name)
|
|
{
|
|
ctProperty* prop = FindProperty(name);
|
|
if (!prop)
|
|
{
|
|
prop = new ctProperty(name);
|
|
AddProperty(prop);
|
|
}
|
|
return prop;
|
|
}
|
|
|
|
void ctProperties::Clear()
|
|
{
|
|
WX_CLEAR_LIST(wxObjectList,m_list);
|
|
}
|
|
|
|
void ctProperties::Copy(const ctProperties& properties)
|
|
{
|
|
wxObjectList::compatibility_iterator node = properties.m_list.GetFirst();
|
|
while (node)
|
|
{
|
|
ctProperty* prop = (ctProperty*) node->GetData();
|
|
|
|
AddProperty(new ctProperty(* prop));
|
|
|
|
node = node->GetNext();
|
|
}
|
|
}
|
|
|
|
void ctProperties::SetProperty(const wxString& name, const wxString& value)
|
|
{
|
|
ctProperty* prop = FindOrCreateProperty(name);
|
|
prop->SetValue(value);
|
|
}
|
|
|
|
void ctProperties::SetProperty(const wxString& name, long value)
|
|
{
|
|
ctProperty* prop = FindOrCreateProperty(name);
|
|
prop->GetVariant() = value;
|
|
}
|
|
|
|
void ctProperties::SetProperty(const wxString& name, bool value)
|
|
{
|
|
ctProperty* prop = FindOrCreateProperty(name);
|
|
prop->GetVariant() = value;
|
|
}
|
|
|
|
void ctProperties::SetProperty(const wxString& name, const wxVariant& value)
|
|
{
|
|
ctProperty* prop = FindOrCreateProperty(name);
|
|
prop->SetValue(value);
|
|
}
|
|
|
|
ctProperty* ctProperties::GetNth(int i) const
|
|
{
|
|
wxASSERT( i < (int) GetCount() );
|
|
if (i < (int) GetCount())
|
|
{
|
|
wxObjectList::compatibility_iterator node = m_list.Item(i);
|
|
return (ctProperty*) node->GetData();
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
#if 0
|
|
/// Combine the styles of all selected properties
|
|
/// with this group name.
|
|
long ctProperties::CombineStyles(const wxString& groupName)
|
|
{
|
|
long styleValue = 0;
|
|
|
|
wxNode* node = m_list.GetFirst();
|
|
while (node)
|
|
{
|
|
ctProperty* prop = (ctProperty*) node->GetData();
|
|
|
|
if (prop->GetGroupName() == groupName && prop->GetVariant().GetBool())
|
|
{
|
|
styleValue |= prop->GetStyleValue();
|
|
}
|
|
|
|
node = node->GetNext();
|
|
}
|
|
return styleValue;
|
|
}
|
|
|
|
/// Combine the styles of all selected properties
|
|
/// with this group name.
|
|
wxString ctProperties::CombineStylesString(const wxString& groupName)
|
|
{
|
|
wxString styleList;
|
|
|
|
wxNode* node = m_list.GetFirst();
|
|
while (node)
|
|
{
|
|
ctProperty* prop = (ctProperty*) node->GetData();
|
|
|
|
if (prop->GetGroupName() == groupName && prop->GetVariant().GetBool())
|
|
{
|
|
if (styleList.IsEmpty())
|
|
styleList = prop->GetName();
|
|
else
|
|
styleList = styleList + _T("|") + prop->GetName();
|
|
}
|
|
|
|
node = node->GetNext();
|
|
}
|
|
return styleList;
|
|
}
|
|
|
|
// Remove any spurious properties that need garbage
|
|
// collecting.
|
|
void ctProperties::RemoveHiddenProperties()
|
|
{
|
|
wxNode* node = m_list.GetFirst();
|
|
while (node)
|
|
{
|
|
ctProperty* prop = (ctProperty*) node->GetData();
|
|
wxNode* next = node->GetNext();
|
|
|
|
if (!prop->IsShown())
|
|
{
|
|
delete node;
|
|
delete prop;
|
|
}
|
|
|
|
node = next;
|
|
}
|
|
}
|
|
#endif
|