##// END OF EJS Templates
category axis magic
sauimone -
r1605:61a8c8f8b102
parent child
Show More
@@ -46,6 +46,11 QCategoriesAxis::QCategoriesAxis(QCategoriesAxisPrivate &d,QObject *parent):QAbs
46 46 void QCategoriesAxis::append(const QStringList &categories)
47 47 {
48 48 Q_D(QCategoriesAxis);
49 if (d->m_categories.isEmpty()) {
50 d->m_minCategory = categories.first();
51 d->m_maxCategory = categories.last();
52 }
53
49 54 d->m_categories.append(categories);
50 55 emit categoriesChanged();
51 56 }
@@ -56,6 +61,11 void QCategoriesAxis::append(const QStringList &categories)
56 61 void QCategoriesAxis::append(const QString &category)
57 62 {
58 63 Q_D(QCategoriesAxis);
64 if (d->m_categories.isEmpty()) {
65 d->m_minCategory = category;
66 d->m_maxCategory = category;
67 }
68
59 69 d->m_categories.append(category);
60 70 emit categoriesChanged();
61 71 }
@@ -68,6 +78,8 void QCategoriesAxis::remove(const QString &category)
68 78 Q_D(QCategoriesAxis);
69 79 if (d->m_categories.contains(category)) {
70 80 d->m_categories.removeAt(d->m_categories.indexOf(category));
81 d->m_minCategory = d->m_categories.first();
82 d->m_maxCategory = d->m_categories.last();
71 83 emit categoriesChanged();
72 84 }
73 85 }
@@ -78,6 +90,10 void QCategoriesAxis::remove(const QString &category)
78 90 void QCategoriesAxis::insert(int index, const QString &category)
79 91 {
80 92 Q_D(QCategoriesAxis);
93 if (d->m_categories.isEmpty()) {
94 d->m_minCategory = category;
95 d->m_maxCategory = category;
96 }
81 97 d->m_categories.insert(index,category);
82 98 emit categoriesChanged();
83 99 }
@@ -89,6 +105,8 void QCategoriesAxis::clear()
89 105 {
90 106 Q_D(QCategoriesAxis);
91 107 d->m_categories.clear();
108 d->m_minCategory.clear();
109 d->m_maxCategory.clear();
92 110 emit categoriesChanged();
93 111 }
94 112
@@ -96,6 +114,8 void QCategoriesAxis::setCategories(const QStringList &categories)
96 114 {
97 115 Q_D(QCategoriesAxis);
98 116 d->m_categories = categories;
117 d->m_minCategory = categories.first();
118 d->m_maxCategory = categories.last();
99 119 emit categoriesChanged();
100 120 }
101 121
@@ -124,36 +144,36 QString QCategoriesAxis::at(int index) const
124 144 }
125 145
126 146 /*!
127 Sets minimum category to \a minCategory.
147 Sets minimum category to \a min.
128 148 */
129 void QCategoriesAxis::setMinCategory(const QString& minCategory)
149 void QCategoriesAxis::setMin(const QString& min)
130 150 {
131 151 Q_D(QCategoriesAxis);
132 d->setMinCategory(minCategory);
152 setRange(min,d->m_maxCategory);
133 153 }
134 154
135 155 /*!
136 156 Returns minimum category.
137 157 */
138 QString QCategoriesAxis::minCategory() const
158 QString QCategoriesAxis::min() const
139 159 {
140 160 Q_D(const QCategoriesAxis);
141 161 return d->m_minCategory;
142 162 }
143 163
144 164 /*!
145 Sets maximum category to \a maxCategory.
165 Sets maximum category to \a max.
146 166 */
147 void QCategoriesAxis::setMaxCategory(const QString& maxCategory)
167 void QCategoriesAxis::setMax(const QString& max)
148 168 {
149 169 Q_D(QCategoriesAxis);
150 d->setMaxCategory(maxCategory);
170 setRange(d->m_minCategory,max);
151 171 }
152 172
153 173 /*!
154 174 Returns maximum category
155 175 */
156 QString QCategoriesAxis::maxCategory() const
176 QString QCategoriesAxis::max() const
157 177 {
158 178 Q_D(const QCategoriesAxis);
159 179 return d->m_maxCategory;
@@ -162,10 +182,44 QString QCategoriesAxis::maxCategory() const
162 182 /*!
163 183 Sets range from \a minCategory to \a maxCategory
164 184 */
165 void QCategoriesAxis::setCategoryRange(const QString& minCategory, const QString& maxCategory)
185 void QCategoriesAxis::setRange(const QString& minCategory, const QString& maxCategory)
166 186 {
167 187 Q_D(QCategoriesAxis);
168 d->setRangeCategory(minCategory,maxCategory);
188
189 int minIndex = d->m_categories.indexOf(minCategory);
190 if (minIndex == -1) {
191 return;
192 }
193 int maxIndex = d->m_categories.indexOf(maxCategory);
194 if (maxIndex == -1) {
195 return;
196 }
197
198 if (maxIndex <= minIndex) {
199 // max must be greater than min
200 return;
201 }
202
203 d->m_minCategory = minCategory;
204 d->m_maxCategory = maxCategory;
205
206 bool changed = false;
207 if (!qFuzzyIsNull(d->m_min - (minIndex))) {
208 d->m_min = minIndex;
209 changed = true;
210 }
211
212 if (!qFuzzyIsNull(d->m_max - (maxIndex))) {
213 d->m_max = maxIndex;
214 changed = true;
215 }
216
217 if ((changed)) {
218 if(!signalsBlocked()){
219 emit d->changed(d->m_min -0.5, d->m_max +0.5, qCeil(d->m_max + 0.5) -qCeil(d->m_min - 0.5) +1, false);
220 }
221 emit categoriesChanged();
222 }
169 223 }
170 224
171 225 /*!
@@ -189,88 +243,23 QCategoriesAxisPrivate::~QCategoriesAxisPrivate()
189 243
190 244 }
191 245
192 void QCategoriesAxisPrivate::setMinCategory(const QString& minCategory)
193 {
194 // Convert the category to value
195 int minIndex = m_categories.indexOf(minCategory);
196 if (minIndex == -1) {
197 return;
198 }
199
200 int maxIndex = qFloor(m_max);
201 if (minIndex > maxIndex) {
202 maxIndex = m_categories.count()-1;
203 }
204 setRange(minIndex - 0.5, maxIndex + 0.5);
205 }
206
207 void QCategoriesAxisPrivate::setMaxCategory(const QString& maxCategory)
208 {
209 // Convert the category to value
210 int maxIndex = m_categories.indexOf(maxCategory);
211 if (maxIndex == -1) {
212 return;
213 }
214
215 int minIndex = qCeil(m_min);
216 if (maxIndex < minIndex) {
217 minIndex = 0;
218 }
219 setRange(minIndex - 0.5, maxIndex + 0.5);
220 }
221
222 void QCategoriesAxisPrivate::setRangeCategory(const QString& minCategory, const QString& maxCategory)
223 {
224 // TODO:
225 int minIndex = m_categories.indexOf(minCategory);
226 if (minIndex == -1) {
227 return;
228 }
229 int maxIndex = m_categories.indexOf(maxCategory);
230 if (maxIndex == -1) {
231 return;
232 }
233 setRange(minIndex -0.5, maxIndex + 0.5);
234 }
235
236 246 void QCategoriesAxisPrivate::setMin(const QVariant &min)
237 247 {
238 setRange(min,m_max);
248 setRange(min,m_maxCategory);
239 249 }
240 250
241 251 void QCategoriesAxisPrivate::setMax(const QVariant &max)
242 252 {
243 setRange(m_min,max);
253 setRange(m_minCategory,max);
244 254 }
245 255
246 256 void QCategoriesAxisPrivate::setRange(const QVariant &min, const QVariant &max, bool force)
247 257 {
248 Q_UNUSED(min);
249 Q_UNUSED(max);
250 Q_UNUSED(force);
251 // TODO: refactor
252 /*
253 if (max <= min) {
254 // max must be greater than min
255 return;
256 }
258 Q_UNUSED(force); // TODO: use this?
257 259 Q_Q(QCategoriesAxis);
258 bool changed = false;
259 if (!qFuzzyIsNull(m_min - min)) {
260 m_min = min;
261 changed = true;
262 }
263
264 if (!qFuzzyIsNull(m_max - max)) {
265 m_max = max;
266 changed = true;
267 }
268
269 if ((changed) ||(force)) {
270 emit this->changed(m_min, m_max, qCeil(m_max) -qCeil(m_min) +1, false);
271 emit q->categoriesChanged();
272 }
273 */
260 QString value1 = min.toString();
261 QString value2 = max.toString();
262 q->setRange(value1,value2);
274 263 }
275 264
276 265 int QCategoriesAxisPrivate::ticksCount() const
@@ -49,19 +49,14 public:
49 49 void setCategories(const QStringList &categories);
50 50 QStringList categories();
51 51 int count() const;
52
53 52 QString at(int index) const;
54 53
55 //range handling convenience functions
56 void setMinCategory(const QString& minCategory);
57 QString minCategory() const;
58 void setMaxCategory(const QString& maxCategory);
59 QString maxCategory() const;
60 void setCategoryRange(const QString& minCategory, const QString& maxCategory);
61
62 void setMin(const QVariant &min);
63 void setMax(const QVariant &max);
64 void setRange(const QVariant &min, const QVariant &max);
54 //range handling
55 void setMin(const QString& minCategory);
56 QString min() const;
57 void setMax(const QString& maxCategory);
58 QString max() const;
59 void setRange(const QString& minCategory, const QString& maxCategory);
65 60
66 61 Q_SIGNALS:
67 62 void categoriesChanged();
@@ -48,10 +48,6 public:
48 48 void updateRange();
49 49
50 50 private:
51 void setMinCategory(const QString& minCategory);
52 void setMaxCategory(const QString& maxCategory);
53 void setRangeCategory(const QString& minCategory, const QString& maxCategory);
54
55 51 //range handling
56 52 void setMin(const QVariant &min);
57 53 void setMax(const QVariant &max);
General Comments 0
You need to be logged in to leave comments. Login now