]> git.saurik.com Git - wxWidgets.git/blame - utils/configtool/src/property.cpp
synching down and up events for the synthetic right mouse handling
[wxWidgets.git] / utils / configtool / src / property.cpp
CommitLineData
d7463f75
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: property.cpp
3// Purpose: ctProperty objects represent name/value pairs,
4// for properties of a configuration item.
5// Author: Julian Smart
6// Modified by:
7// Created: 2003-06-03
8// RCS-ID: $Id$
9// Copyright: (c) Julian Smart
4fe30bce 10// Licence:
d7463f75
JS
11/////////////////////////////////////////////////////////////////////////////
12
71ada1a5 13#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
d7463f75
JS
14#pragma implementation "property.h"
15#endif
16
17#include "wx/wx.h"
18
19#include "property.h"
20
21IMPLEMENT_CLASS(ctProperty, wxObject)
22IMPLEMENT_CLASS(ctProperties, wxObject)
23
24void ctProperties::AddProperty(ctProperty* property, const wxString& insertAfter)
25{
26 ctProperty* oldProp = FindProperty(property->GetName());
27 if (oldProp)
28 m_list.DeleteObject(oldProp);
29
30 wxNode* insertBeforeNode = NULL;
31 if (insertAfter)
32 {
33 ctProperty* insertAfterProp = FindProperty(insertAfter);
34 if (insertAfterProp)
35 {
36 wxNode* node = m_list.Member(insertAfterProp);
37 if (node)
38 insertBeforeNode = node->GetNext();
39 }
40 }
41 if (insertBeforeNode)
42 m_list.Insert(insertBeforeNode, property);
43 else
44 m_list.Append(property);
45
46 if (oldProp)
47 {
48 property->GetVariant() = oldProp->GetVariant();
49
50 delete oldProp;
51 }
52}
53
54void ctProperties::RemoveProperty(ctProperty* property)
55{
56 m_list.DeleteObject(property);
57}
58
59void ctProperties::DeleteProperty(const wxString& name)
60{
61 ctProperty* prop = FindProperty(name);
62 if (prop)
63 {
64 m_list.DeleteObject(prop);
65 delete prop;
66 }
67}
68
69ctProperty* ctProperties::FindProperty(const wxString& name) const
70{
71 wxNode* node = m_list.GetFirst();
72 while (node)
73 {
74 ctProperty* prop = (ctProperty*) node->GetData();
75 if (prop->GetName() == name)
76 return prop;
77
78 node = node->GetNext();
79 }
80 return (ctProperty*) NULL;
81}
82
83wxVariant ctProperties::FindPropertyValue(const wxString& name) const
84{
85 ctProperty* prop = FindProperty(name);
86 if (prop)
87 return prop->m_variant;
88 else
89 return wxEmptyString;
90}
91
92wxString ctProperties::FindPropertyValueString(const wxString& name) const
93{
94 ctProperty* prop = FindProperty(name);
95 if (prop)
96 return prop->m_variant.GetString();
97 else
98 return wxEmptyString;
99}
100
101ctProperty* ctProperties::FindOrCreateProperty(const wxString& name)
102{
103 ctProperty* prop = FindProperty(name);
104 if (!prop)
105 {
106 prop = new ctProperty(name);
107 AddProperty(prop);
108 }
109 return prop;
110}
111
112void ctProperties::Clear()
113{
4fe30bce 114 m_list.DeleteContents(true);
d7463f75 115 m_list.Clear();
4fe30bce 116 m_list.DeleteContents(false);
d7463f75
JS
117}
118
119void ctProperties::Copy(const ctProperties& properties)
120{
121 wxNode* node = properties.m_list.GetFirst();
122 while (node)
123 {
124 ctProperty* prop = (ctProperty*) node->GetData();
125
126 AddProperty(new ctProperty(* prop));
127
128 node = node->GetNext();
129 }
130}
131
132void ctProperties::SetProperty(const wxString& name, const wxString& value)
133{
134 ctProperty* prop = FindOrCreateProperty(name);
135 prop->SetValue(value);
136}
137
138void ctProperties::SetProperty(const wxString& name, long value)
139{
140 ctProperty* prop = FindOrCreateProperty(name);
141 prop->GetVariant() = value;
142}
143
144void ctProperties::SetProperty(const wxString& name, bool value)
145{
146 ctProperty* prop = FindOrCreateProperty(name);
4fe30bce 147 prop->GetVariant() = value;
d7463f75
JS
148}
149
150void ctProperties::SetProperty(const wxString& name, const wxVariant& value)
151{
152 ctProperty* prop = FindOrCreateProperty(name);
153 prop->SetValue(value);
154}
155
156ctProperty* ctProperties::GetNth(int i) const
157{
158 wxASSERT( i < (int) GetCount() );
159 if (i < (int) GetCount())
160 {
f8105809 161 wxNode* node = m_list.Item(i);
d7463f75
JS
162 return (ctProperty*) node->GetData();
163 }
164 return NULL;
165}
166
167#if 0
168/// Combine the styles of all selected properties
169/// with this group name.
170long ctProperties::CombineStyles(const wxString& groupName)
171{
172 long styleValue = 0;
173
174 wxNode* node = m_list.GetFirst();
175 while (node)
176 {
177 ctProperty* prop = (ctProperty*) node->GetData();
178
179 if (prop->GetGroupName() == groupName && prop->GetVariant().GetBool())
180 {
181 styleValue |= prop->GetStyleValue();
182 }
183
184 node = node->GetNext();
185 }
186 return styleValue;
187}
188
189/// Combine the styles of all selected properties
190/// with this group name.
191wxString ctProperties::CombineStylesString(const wxString& groupName)
192{
193 wxString styleList;
194
195 wxNode* node = m_list.GetFirst();
196 while (node)
197 {
198 ctProperty* prop = (ctProperty*) node->GetData();
199
200 if (prop->GetGroupName() == groupName && prop->GetVariant().GetBool())
201 {
202 if (styleList.IsEmpty())
203 styleList = prop->GetName();
204 else
205 styleList = styleList + _T("|") + prop->GetName();
206 }
207
208 node = node->GetNext();
209 }
210 return styleList;
211}
212
213// Remove any spurious properties that need garbage
214// collecting.
215void ctProperties::RemoveHiddenProperties()
216{
217 wxNode* node = m_list.GetFirst();
218 while (node)
219 {
220 ctProperty* prop = (ctProperty*) node->GetData();
221 wxNode* next = node->GetNext();
222
223 if (!prop->IsShown())
224 {
225 delete node;
226 delete prop;
227 }
228
229 node = next;
230 }
231}
f8105809 232#endif