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