File indexing completed on 2024-05-12 16:44:00
0001 /* 0002 SPDX-FileCopyrightText: 2004-2017 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 "kmymoneyaccountcompletion.h" 0008 #include "kmymoneycompletion_p.h" 0009 0010 // ---------------------------------------------------------------------------- 0011 // QT Includes 0012 0013 #include <QRegExp> 0014 #include <QLayout> 0015 0016 // ---------------------------------------------------------------------------- 0017 // KDE Includes 0018 0019 // ---------------------------------------------------------------------------- 0020 // Project Includes 0021 0022 #include "mymoneyfile.h" 0023 #include "kmymoneyaccountselector.h" 0024 #include "mymoneyenums.h" 0025 0026 KMyMoneyAccountCompletion::KMyMoneyAccountCompletion(QWidget *parent) : 0027 KMyMoneyCompletion(parent) 0028 { 0029 Q_D(KMyMoneyCompletion); 0030 delete d->m_selector; 0031 d->m_selector = new KMyMoneyAccountSelector(this, 0, false); 0032 d->m_selector->listView()->setFocusProxy(parent); 0033 layout()->addWidget(d->m_selector); 0034 0035 #ifndef KMM_DESIGNER 0036 // Default is to show all accounts 0037 // FIXME We should leave this also to the caller 0038 AccountSet set; 0039 set.addAccountGroup(eMyMoney::Account::Type::Asset); 0040 set.addAccountGroup(eMyMoney::Account::Type::Liability); 0041 set.addAccountGroup(eMyMoney::Account::Type::Income); 0042 set.addAccountGroup(eMyMoney::Account::Type::Expense); 0043 set.load(selector()); 0044 #endif 0045 0046 connectSignals(d->m_selector, d->m_selector->listView()); 0047 } 0048 0049 KMyMoneyAccountCompletion::~KMyMoneyAccountCompletion() 0050 { 0051 } 0052 0053 QStringList KMyMoneyAccountCompletion::accountList(const QList<eMyMoney::Account::Type>& list = QList<eMyMoney::Account::Type>()) const 0054 { 0055 return selector()->accountList(list); 0056 } 0057 0058 QStringList KMyMoneyAccountCompletion::accountList() const 0059 { 0060 return accountList(QList<eMyMoney::Account::Type>()); 0061 } 0062 0063 KMyMoneyAccountSelector* KMyMoneyAccountCompletion::selector() const 0064 { 0065 Q_D(const KMyMoneyCompletion); 0066 // return nullptr; 0067 return dynamic_cast<KMyMoneyAccountSelector*>(d->m_selector); 0068 } 0069 0070 void KMyMoneyAccountCompletion::slotMakeCompletion(const QString& txt) 0071 { 0072 Q_D(KMyMoneyCompletion); 0073 // if(txt.isEmpty() || txt.length() == 0) 0074 // return; 0075 0076 auto cnt = 0; 0077 if (txt.contains(MyMoneyFile::AccountSeparator) == 0) { 0078 d->m_lastCompletion = QRegExp(QRegExp::escape(txt), Qt::CaseInsensitive); 0079 cnt = selector()->slotMakeCompletion(txt); 0080 } else { 0081 QStringList parts = txt.split(MyMoneyFile::AccountSeparator, QString::SkipEmptyParts); 0082 QString pattern("^"); 0083 QStringList::iterator it; 0084 for (it = parts.begin(); it != parts.end(); ++it) { 0085 if (pattern.length() > 1) 0086 pattern += MyMoneyFile::AccountSeparator; 0087 pattern += QRegExp::escape(QString(*it).trimmed()) + ".*"; 0088 } 0089 pattern += '$'; 0090 d->m_lastCompletion = QRegExp(pattern, Qt::CaseInsensitive); 0091 cnt = selector()->slotMakeCompletion(d->m_lastCompletion); 0092 // if we don't have a match, we try it again, but this time 0093 // we add a wildcard for the top level 0094 if (cnt == 0) { 0095 pattern = pattern.insert(1, QString(".*") + MyMoneyFile::AccountSeparator); 0096 d->m_lastCompletion = QRegExp(pattern, Qt::CaseInsensitive); 0097 cnt = selector()->slotMakeCompletion(d->m_lastCompletion); 0098 } 0099 } 0100 0101 if (d->m_parent && d->m_parent->isVisible() && !isVisible() && cnt) 0102 show(false); 0103 else { 0104 if (cnt != 0) { 0105 adjustSize(); 0106 } else { 0107 hide(); 0108 } 0109 } 0110 }