File indexing completed on 2024-05-12 16:42:34
0001 /* 0002 SPDX-FileCopyrightText: 2000-2001 Michael Edwardes <mte@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "mymoneycategory.h" 0008 0009 #include <QString> 0010 #include <QStringList> 0011 #include <QDataStream> 0012 0013 class MyMoneyCategoryPrivate 0014 { 0015 public: 0016 bool m_income; // if false, m_income == expense 0017 QString m_name; 0018 QStringList m_minorCategories; 0019 }; 0020 0021 MyMoneyCategory::MyMoneyCategory() : 0022 d_ptr(new MyMoneyCategoryPrivate) 0023 { 0024 Q_D(MyMoneyCategory); 0025 d->m_income = true; 0026 } 0027 0028 MyMoneyCategory::MyMoneyCategory(const bool income, const QString& name) : 0029 d_ptr(new MyMoneyCategoryPrivate) 0030 { 0031 Q_D(MyMoneyCategory); 0032 d->m_income = income; 0033 d->m_name = name; 0034 } 0035 0036 MyMoneyCategory::MyMoneyCategory(const bool income, const QString& name, QStringList minors) : 0037 d_ptr(new MyMoneyCategoryPrivate) 0038 { 0039 Q_D(MyMoneyCategory); 0040 d->m_income = income; 0041 d->m_name = name; 0042 d->m_minorCategories = minors; 0043 } 0044 0045 MyMoneyCategory::MyMoneyCategory(const MyMoneyCategory& other) : 0046 d_ptr(new MyMoneyCategoryPrivate(*other.d_func())) 0047 { 0048 } 0049 0050 MyMoneyCategory::~MyMoneyCategory() 0051 { 0052 Q_D(MyMoneyCategory); 0053 delete d; 0054 } 0055 0056 QString MyMoneyCategory::name() const 0057 { 0058 Q_D(const MyMoneyCategory); 0059 return d->m_name; 0060 } 0061 0062 QStringList& MyMoneyCategory::minorCategories() 0063 { 0064 Q_D(MyMoneyCategory); 0065 return d->m_minorCategories; 0066 } 0067 0068 bool MyMoneyCategory::isIncome() const 0069 { 0070 Q_D(const MyMoneyCategory); 0071 return d->m_income; 0072 } 0073 0074 void MyMoneyCategory::setIncome(const bool val) 0075 { 0076 Q_D(MyMoneyCategory); 0077 d->m_income = val; 0078 } 0079 0080 void MyMoneyCategory::setName(const QString& val) 0081 { 0082 Q_D(MyMoneyCategory); 0083 d->m_name = val; 0084 } 0085 0086 // Functions use the find method to search the list 0087 bool MyMoneyCategory::addMinorCategory(const QString& val) 0088 { 0089 Q_D(MyMoneyCategory); 0090 if (val.isEmpty() || val.isNull()) 0091 return false; 0092 0093 if (d->m_minorCategories.indexOf(val) == -1) { 0094 d->m_minorCategories.append(val); 0095 return true; 0096 } 0097 0098 return false; 0099 } 0100 0101 bool MyMoneyCategory::removeMinorCategory(const QString& val) 0102 { 0103 Q_D(MyMoneyCategory); 0104 if (val.isEmpty() || val.isNull()) 0105 return false; 0106 0107 if (d->m_minorCategories.indexOf(val) != -1) { 0108 d->m_minorCategories.removeOne(val); 0109 return true; 0110 } 0111 0112 return false; 0113 } 0114 0115 bool MyMoneyCategory::renameMinorCategory(const QString& oldVal, const QString& newVal) 0116 { 0117 Q_D(MyMoneyCategory); 0118 if (oldVal.isEmpty() || oldVal.isNull() || newVal.isEmpty() || newVal.isNull()) 0119 return false; 0120 0121 if ((d->m_minorCategories.indexOf(oldVal) != -1) && 0122 (d->m_minorCategories.indexOf(newVal) == -1)) { 0123 0124 d->m_minorCategories.removeOne(oldVal); 0125 return addMinorCategory(newVal); 0126 } 0127 0128 return false; 0129 } 0130 0131 bool MyMoneyCategory::addMinorCategory(QStringList values) 0132 { 0133 for (QStringList::Iterator it = values.begin(); it != values.end(); ++it) { 0134 addMinorCategory(*it); 0135 } 0136 0137 return true; 0138 } 0139 0140 bool MyMoneyCategory::setMinorCategories(QStringList values) 0141 { 0142 Q_D(MyMoneyCategory); 0143 d->m_minorCategories.clear(); 0144 return addMinorCategory(values); 0145 } 0146 0147 bool MyMoneyCategory::removeAllMinors() 0148 { 0149 Q_D(MyMoneyCategory); 0150 d->m_minorCategories.clear(); 0151 return true; 0152 } 0153 0154 QString MyMoneyCategory::firstMinor() 0155 { 0156 Q_D(MyMoneyCategory); 0157 return d->m_minorCategories.first(); 0158 } 0159 0160 QDataStream &operator<<(QDataStream &s, MyMoneyCategory &category) 0161 { 0162 if (category.d_func()->m_income) 0163 s << (qint32)1; 0164 else 0165 s << (qint32)0; 0166 0167 s << category.d_func()->m_name; 0168 0169 s << (quint32)category.d_func()->m_minorCategories.count(); 0170 for (QStringList::Iterator it = category.d_func()->m_minorCategories.begin(); it != category.d_func()->m_minorCategories.end(); ++it) { 0171 s << (*it); 0172 } 0173 0174 return s; 0175 } 0176 0177 QDataStream &operator>>(QDataStream &s, MyMoneyCategory &category) 0178 { 0179 qint32 inc; 0180 s >> inc; 0181 if (inc == 0) 0182 category.d_func()->m_income = false; 0183 else 0184 category.d_func()->m_income = true; 0185 0186 s >> category.d_func()->m_name; 0187 0188 quint32 minorCount; 0189 QString buffer; 0190 0191 s >> minorCount; 0192 category.d_func()->m_minorCategories.clear(); 0193 for (unsigned int i = 0; i < minorCount; i++) { 0194 s >> buffer; 0195 category.d_func()->m_minorCategories.append(buffer); 0196 } 0197 0198 return s; 0199 } 0200 0201 void MyMoneyCategory::clear() 0202 { 0203 Q_D(MyMoneyCategory); 0204 d->m_minorCategories.clear(); 0205 }