File indexing completed on 2024-05-12 16:44:02
0001 /* 0002 SPDX-FileCopyrightText: 2004-2011 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-FileCopyrightText: 2017 Łukasz Wojniłowicz <lukasz.wojnilowicz@gmail.com> 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kmymoneycurrencyselector.h" 0008 0009 // ---------------------------------------------------------------------------- 0010 // QT Includes 0011 0012 #include <QPixmap> 0013 #include <QIcon> 0014 0015 // ---------------------------------------------------------------------------- 0016 // KDE Includes 0017 0018 // ---------------------------------------------------------------------------- 0019 // Project Includes 0020 0021 #include "mymoneyfile.h" 0022 #include "mymoneysecurity.h" 0023 #include "icons/icons.h" 0024 0025 using namespace Icons; 0026 0027 class KMyMoneySecuritySelectorPrivate 0028 { 0029 Q_DISABLE_COPY(KMyMoneySecuritySelectorPrivate) 0030 Q_DECLARE_PUBLIC(KMyMoneySecuritySelector) 0031 0032 public: 0033 enum displayItemE { 0034 Symbol = 0, 0035 FullName 0036 }; 0037 0038 enum displayTypeE { 0039 TypeCurrencies = 0x01, 0040 TypeSecurities = 0x02, 0041 TypeAll = 0x03 0042 }; 0043 0044 explicit KMyMoneySecuritySelectorPrivate(KMyMoneySecuritySelector *qq): 0045 q_ptr(qq), 0046 m_displayItem(FullName), 0047 m_selectedItemId(0), 0048 m_displayOnly(false), 0049 m_displayType(TypeAll) 0050 { 0051 } 0052 0053 void selectDisplayItem(displayItemE item) 0054 { 0055 Q_Q(KMyMoneySecuritySelector); 0056 m_displayItem = item; 0057 q->update(QString()); 0058 } 0059 0060 void setDisplayType(displayTypeE type) 0061 { 0062 m_displayType = type; 0063 } 0064 0065 KMyMoneySecuritySelector *q_ptr; 0066 MyMoneySecurity m_currency; 0067 displayItemE m_displayItem; 0068 int m_selectedItemId; 0069 bool m_displayOnly; 0070 displayTypeE m_displayType; 0071 QList<MyMoneySecurity> m_list; 0072 }; 0073 0074 KMyMoneySecuritySelector::KMyMoneySecuritySelector(QWidget *parent) : 0075 KComboBox(parent), 0076 d_ptr(new KMyMoneySecuritySelectorPrivate(this)) 0077 { 0078 // update(QString()); 0079 } 0080 0081 KMyMoneySecuritySelector::~KMyMoneySecuritySelector() 0082 { 0083 Q_D(KMyMoneySecuritySelector); 0084 delete d; 0085 } 0086 0087 void KMyMoneySecuritySelector::update(const QString& id) 0088 { 0089 Q_D(KMyMoneySecuritySelector); 0090 MyMoneySecurity curr = MyMoneyFile::instance()->baseCurrency(); 0091 QString baseCurrency = curr.id(); 0092 0093 if (!id.isEmpty()) 0094 curr = d->m_currency; 0095 0096 this->clear(); 0097 d->m_list.clear(); 0098 if (d->m_displayType & KMyMoneySecuritySelectorPrivate::TypeCurrencies) 0099 d->m_list += MyMoneyFile::instance()->currencyList(); 0100 if (d->m_displayType & KMyMoneySecuritySelectorPrivate::TypeSecurities) 0101 d->m_list += MyMoneyFile::instance()->securityList(); 0102 0103 // sort 0104 qSort(d->m_list); 0105 0106 QList<MyMoneySecurity>::ConstIterator it; 0107 0108 // construct a transparent 16x16 pixmap 0109 // clang-format off 0110 static unsigned char empty_png[] = { 0111 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0112 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, 0113 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0114 0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0xF3, 0xFF, 0115 0x61, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0116 0x42, 0x00, 0xAE, 0xCE, 0x1C, 0xE9, 0x00, 0x00, 0117 0x00, 0x06, 0x62, 0x4B, 0x47, 0x44, 0x00, 0xFF, 0118 0x00, 0xFF, 0x00, 0xFF, 0xA0, 0xBD, 0xA7, 0x93, 0119 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0120 0x00, 0x00, 0x0B, 0x13, 0x00, 0x00, 0x0B, 0x13, 0121 0x01, 0x00, 0x9A, 0x9C, 0x18, 0x00, 0x00, 0x00, 0122 0x07, 0x74, 0x49, 0x4D, 0x45, 0x07, 0xDB, 0x07, 0123 0x08, 0x0B, 0x16, 0x09, 0xAA, 0xA8, 0x50, 0x21, 0124 0x00, 0x00, 0x00, 0x12, 0x49, 0x44, 0x41, 0x54, 0125 0x38, 0xCB, 0x63, 0x60, 0x18, 0x05, 0xA3, 0x60, 0126 0x14, 0x8C, 0x02, 0x08, 0x00, 0x00, 0x04, 0x10, 0127 0x00, 0x01, 0x85, 0x3F, 0xAA, 0x72, 0x00, 0x00, 0128 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0129 0x60, 0x82 0130 }; 0131 // clang-format on 0132 0133 QPixmap empty; 0134 empty.loadFromData(empty_png, sizeof(empty_png), 0, Qt::AutoColor); 0135 QIcon emptyIcon(empty); 0136 0137 int itemId = 0; 0138 int m_selectedItemId = 0; 0139 for (it = d->m_list.constBegin(); it != d->m_list.constEnd(); ++it) { 0140 QString display; 0141 switch (d->m_displayItem) { 0142 default: 0143 case KMyMoneySecuritySelectorPrivate::FullName: 0144 if ((*it).isCurrency()) { 0145 display = QString("%2 (%1)").arg((*it).id()).arg((*it).name()); 0146 } else 0147 display = QString("%2 (%1)").arg((*it).tradingSymbol()).arg((*it).name()); 0148 break; 0149 break; 0150 0151 case KMyMoneySecuritySelectorPrivate::Symbol: 0152 if ((*it).isCurrency()) 0153 display = (*it).id(); 0154 else 0155 display = (*it).tradingSymbol(); 0156 break; 0157 } 0158 if ((*it).id() == baseCurrency) { 0159 insertItem(itemId, Icons::get(Icon::BankAccount), display); 0160 } else { 0161 insertItem(itemId, emptyIcon, display); 0162 } 0163 0164 if (curr.id() == (*it).id()) { 0165 m_selectedItemId = itemId; 0166 d->m_currency = (*it); 0167 } 0168 0169 itemId++; 0170 } 0171 setCurrentIndex(m_selectedItemId); 0172 } 0173 0174 const MyMoneySecurity& KMyMoneySecuritySelector::security() const 0175 { 0176 Q_D(const KMyMoneySecuritySelector); 0177 int index = currentIndex(); 0178 if ((0 <= index) && (index < d->m_list.size())) 0179 return d->m_list[index]; 0180 else 0181 return d->m_currency; 0182 } 0183 0184 void KMyMoneySecuritySelector::setSecurity(const MyMoneySecurity& currency) 0185 { 0186 Q_D(KMyMoneySecuritySelector); 0187 d->m_currency = currency; 0188 update(QString("x")); 0189 } 0190 0191 KMyMoneyCurrencySelector::KMyMoneyCurrencySelector(QWidget *parent) : 0192 KMyMoneySecuritySelector(parent) 0193 { 0194 Q_D(KMyMoneySecuritySelector); 0195 d->setDisplayType(KMyMoneySecuritySelectorPrivate::TypeCurrencies); 0196 } 0197 0198 KMyMoneyCurrencySelector::~KMyMoneyCurrencySelector() 0199 { 0200 }