/*************************************************************************** kfindtransactiondlg.cpp ------------------- copyright : (C) 2003, 2007 by Thomas Baumgart email : ipwizard@users.sourceforge.net ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H #include #endif // ---------------------------------------------------------------------------- // TQt Includes #include #include #include #include #include #include // ---------------------------------------------------------------------------- // TDE Includes #include #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // Project Includes #include "kfindtransactiondlg.h" #include #include #include #include #include #include #include #include #include #include #include "ksortoptiondlg.h" KFindTransactionDlg::KFindTransactionDlg(TQWidget *parent, const char *name) : KFindTransactionDlgDecl(parent, name, false), m_needReload(false) { m_register->installEventFilter(this); m_tabWidget->setTabEnabled(m_resultPage, false); // 'cause we don't have a separate setupTextPage connect(m_textEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); setupAccountsPage(); setupCategoriesPage(); setupDatePage(); setupAmountPage(); setupPayeesPage(); setupDetailsPage(); // We don't need to add the default into the list (see ::slotShowHelp() why) // m_helpAnchor[m_textTab] = TQString("details.search"); m_helpAnchor[m_accountTab] = TQString("details.search.account"); m_helpAnchor[m_dateTab] = TQString("details.search.date"); m_helpAnchor[m_amountTab] = TQString("details.search.amount"); m_helpAnchor[m_categoryTab] = TQString("details.search.category"); m_helpAnchor[m_payeeTab] = TQString("details.search.payee"); m_helpAnchor[m_detailsTab] = TQString("details.search.details"); // setup the register TQValueList cols; cols << KMyMoneyRegister::DateColumn; cols << KMyMoneyRegister::AccountColumn; cols << KMyMoneyRegister::DetailColumn; cols << KMyMoneyRegister::ReconcileFlagColumn; cols << KMyMoneyRegister::PaymentColumn; cols << KMyMoneyRegister::DepositColumn; m_register->setupRegister(MyMoneyAccount(), cols); m_register->setSelectionMode(TQTable::Single); connect(m_register, TQ_SIGNAL(editTransaction()), this, TQ_SLOT(slotSelectTransaction())); connect(m_register, TQ_SIGNAL(headerClicked()), this, TQ_SLOT(slotSortOptions())); slotUpdateSelections(); // setup the connections connect(m_searchButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotSearch())); connect(m_resetButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotReset())); connect(m_resetButton, TQ_SIGNAL(clicked()), m_accountsView, TQ_SLOT(slotSelectAllAccounts())); connect(m_resetButton, TQ_SIGNAL(clicked()), m_categoriesView, TQ_SLOT(slotSelectAllAccounts())); connect(m_closeButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(deleteLater())); connect(m_helpButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotShowHelp())); // only allow searches when a selection has been made connect(this, TQ_SIGNAL(selectionEmpty(bool)), m_searchButton, TQ_SLOT(setDisabled(bool))); // get signal about engine changes connect(MyMoneyFile::instance(), TQ_SIGNAL(dataChanged()), this, TQ_SLOT(slotRefreshView())); slotUpdateSelections(); m_textEdit->setFocus(); } void KFindTransactionDlg::slotReset(void) { m_textEdit->setText(TQString()); m_regExp->setChecked(false); m_caseSensitive->setChecked(false); m_textNegate->setCurrentItem(0); m_amountEdit->setEnabled(true); m_amountFromEdit->setEnabled(false); m_amountToEdit->setEnabled(false); m_amountEdit->loadText(TQString()); m_amountFromEdit->loadText(TQString()); m_amountToEdit->loadText(TQString()); m_amountButton->setChecked(true); m_amountRangeButton->setChecked(false); m_emptyPayeesButton->setChecked(false); selectAllItems(m_payeesView, true); m_typeBox->setCurrentItem(MyMoneyTransactionFilter::allTypes); m_stateBox->setCurrentItem(MyMoneyTransactionFilter::allStates); m_validityBox->setCurrentItem(MyMoneyTransactionFilter::anyValidity); m_nrEdit->setEnabled(true); m_nrFromEdit->setEnabled(false); m_nrToEdit->setEnabled(false); m_nrEdit->setText(TQString()); m_nrFromEdit->setText(TQString()); m_nrToEdit->setText(TQString()); m_nrButton->setChecked(true); m_nrRangeButton->setChecked(false); m_tabWidget->setTabEnabled(m_resultPage, false); m_tabWidget->setCurrentPage(m_tabWidget->indexOf(m_criteriaTab)); // the following call implies a call to slotUpdateSelections, // that's why we call it last m_dateRange->setCurrentItem(MyMoneyTransactionFilter::allDates); slotDateRangeChanged(MyMoneyTransactionFilter::allDates); } void KFindTransactionDlg::slotUpdateSelections(void) { TQString txt; // Text tab if(!m_textEdit->text().isEmpty()) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Text"); m_regExp->setEnabled(TQRegExp(m_textEdit->text()).isValid()); } else m_regExp->setEnabled(false); m_caseSensitive->setEnabled(!m_textEdit->text().isEmpty()); m_textNegate->setEnabled(!m_textEdit->text().isEmpty()); // Account tab if(!m_accountsView->allItemsSelected()) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Account"); } // Date tab if(m_dateRange->currentItem() != 0) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Date"); } // Amount tab if((m_amountButton->isChecked() && m_amountEdit->isValid()) || (m_amountRangeButton->isChecked() && (m_amountFromEdit->isValid() || m_amountToEdit->isValid()))) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Amount"); } // Categories tab if(!m_categoriesView->allItemsSelected()) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Category"); } // Payees tab if(!allItemsSelected(m_payeesView) || m_emptyPayeesButton->isChecked()) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Payees"); } m_payeesView->setEnabled(!m_emptyPayeesButton->isChecked()); // Details tab if(m_typeBox->currentItem() != 0 || m_stateBox->currentItem() != 0 || m_validityBox->currentItem() != 0 || (m_nrButton->isChecked() && m_nrEdit->text().length() != 0) || (m_nrRangeButton->isChecked() && (m_nrFromEdit->text().length() != 0 || m_nrToEdit->text().length() != 0))) { if(!txt.isEmpty()) txt += ", "; txt += i18n("Details"); } //Show a warning about transfers if Categories are filtered - bug #1523508 if(!m_categoriesView->allItemsSelected()) { m_transferWarning->setText( i18n("Warning: Filtering by Category will exclude all transfers from the results.") ); } else { m_transferWarning->setText(""); } // disable the search button if no selection is made emit selectionEmpty(txt.isEmpty()); if(txt.isEmpty()) { txt = i18n("(None)"); } m_selectedCriteria->setText(i18n("Current selections: ") + txt); } bool KFindTransactionDlg::allItemsSelected(const TQListViewItem *item) const { TQListViewItem* it_v; for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { if(it_v->rtti() == 1) { TQCheckListItem* it_c = static_cast(it_v); if(!(it_c->isOn() && allItemsSelected(it_v))) return false; } } return true; } bool KFindTransactionDlg::allItemsSelected(const TQListView* view) const { TQListViewItem* it_v; for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { if(it_v->rtti() == 1) { TQCheckListItem* it_c = static_cast(it_v); if(it_c->type() == TQCheckListItem::CheckBox) { if(!(it_c->isOn() && allItemsSelected(it_v))) return false; } else { if(!allItemsSelected(it_v)) return false; } } } return true; } void KFindTransactionDlg::setupAccountsPage(void) { m_accountsView->setSelectionMode(TQListView::Multi); AccountSet accountSet; accountSet.addAccountGroup(MyMoneyAccount::Asset); accountSet.addAccountGroup(MyMoneyAccount::Liability); //set the accountset to show closed account if the settings say so accountSet.setHideClosedAccounts(KMyMoneyGlobalSettings::hideClosedAccounts()); accountSet.load(m_accountsView); connect(m_accountsView, TQ_SIGNAL(stateChanged()), this, TQ_SLOT(slotUpdateSelections())); } void KFindTransactionDlg::selectAllItems(TQListView* view, const bool state) { TQListViewItem* it_v; for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { TQCheckListItem* it_c = static_cast(it_v); if(it_c->type() == TQCheckListItem::CheckBox) { it_c->setOn(state); } selectAllSubItems(it_v, state); } slotUpdateSelections(); } void KFindTransactionDlg::selectItems(TQListView* view, const TQStringList& list, const bool state) { TQListViewItem* it_v; for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { KMyMoneyCheckListItem* it_c = static_cast(it_v); if(it_c->type() == TQCheckListItem::CheckBox && list.contains(it_c->id())) { it_c->setOn(state); } selectSubItems(it_v, list, state); } slotUpdateSelections(); } void KFindTransactionDlg::setupCategoriesPage(void) { m_categoriesView->setSelectionMode(TQListView::Multi); AccountSet categorySet; categorySet.addAccountGroup(MyMoneyAccount::Income); categorySet.addAccountGroup(MyMoneyAccount::Expense); categorySet.load(m_categoriesView); connect(m_categoriesView, TQ_SIGNAL(stateChanged()), this, TQ_SLOT(slotUpdateSelections())); } void KFindTransactionDlg::selectAllSubItems(TQListViewItem* item, const bool state) { TQListViewItem* it_v; for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { static_cast(it_v)->setOn(state); selectAllSubItems(it_v, state); } } void KFindTransactionDlg::selectSubItems(TQListViewItem* item, const TQStringList& list, const bool state) { TQListViewItem* it_v; for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { KMyMoneyCheckListItem* it_c = static_cast(it_v); if(list.contains(it_c->id())) it_c->setOn(state); selectSubItems(it_v, list, state); } } void KFindTransactionDlg::setupDatePage(void) { int i; for(i = MyMoneyTransactionFilter::allDates; i < MyMoneyTransactionFilter::dateOptionCount; ++i) { MyMoneyTransactionFilter::translateDateRange(static_cast(i), m_startDates[i], m_endDates[i]); } connect(m_dateRange, TQ_SIGNAL(itemSelected(int)), this, TQ_SLOT(slotDateRangeChanged(int))); connect(m_fromDate, TQ_SIGNAL(dateChanged(const TQDate&)), this, TQ_SLOT(slotDateChanged())); connect(m_toDate, TQ_SIGNAL(dateChanged(const TQDate&)), this, TQ_SLOT(slotDateChanged())); slotDateRangeChanged(MyMoneyTransactionFilter::allDates); } void KFindTransactionDlg::slotDateRangeChanged(int idx) { switch(idx) { case MyMoneyTransactionFilter::allDates: case MyMoneyTransactionFilter::userDefined: m_fromDate->loadDate(TQDate()); m_toDate->loadDate(TQDate()); break; default: m_fromDate->loadDate(m_startDates[idx]); m_toDate->loadDate(m_endDates[idx]); break; } slotUpdateSelections(); } void KFindTransactionDlg::slotDateChanged(void) { int idx; for(idx = MyMoneyTransactionFilter::asOfToday; idx < MyMoneyTransactionFilter::dateOptionCount; ++idx) { if(m_fromDate->date() == m_startDates[idx] && m_toDate->date() == m_endDates[idx]) { break; } } //if no filter matched, set to user defined if(idx == MyMoneyTransactionFilter::dateOptionCount) idx = MyMoneyTransactionFilter::userDefined; m_dateRange->blockSignals(true); m_dateRange->setCurrentItem(static_cast(idx)); m_dateRange->blockSignals(false); slotUpdateSelections(); } void KFindTransactionDlg::setupAmountPage(void) { connect(m_amountButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotAmountSelected())); connect(m_amountRangeButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotAmountRangeSelected())); connect(m_amountEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); connect(m_amountFromEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); connect(m_amountToEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); m_amountButton->setChecked(true); slotAmountSelected(); } void KFindTransactionDlg::slotAmountSelected(void) { m_amountEdit->setEnabled(true); m_amountFromEdit->setEnabled(false); m_amountToEdit->setEnabled(false); slotUpdateSelections(); } void KFindTransactionDlg::slotAmountRangeSelected(void) { m_amountEdit->setEnabled(false); m_amountFromEdit->setEnabled(true); m_amountToEdit->setEnabled(true); slotUpdateSelections(); } void KFindTransactionDlg::setupPayeesPage(void) { m_payeesView->setSelectionMode(TQListView::Single); m_payeesView->header()->hide(); loadPayees(); m_emptyPayeesButton->setChecked(false); connect(m_allPayeesButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotSelectAllPayees())); connect(m_clearPayeesButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotDeselectAllPayees())); connect(m_emptyPayeesButton, TQ_SIGNAL(stateChanged(int)), this, TQ_SLOT(slotUpdateSelections())); } void KFindTransactionDlg::loadPayees(void) { MyMoneyFile* file = MyMoneyFile::instance(); TQValueList list; TQValueList::Iterator it_l; list = file->payeeList(); // load view for(it_l = list.begin(); it_l != list.end(); ++it_l) { KMyMoneyCheckListItem* item = new KMyMoneyCheckListItem(m_payeesView, (*it_l).name(), TQString(), (*it_l).id()); connect(item, TQ_SIGNAL(stateChanged(bool)), this, TQ_SLOT(slotUpdateSelections())); item->setOn(true); } } void KFindTransactionDlg::slotSelectAllPayees(void) { selectAllItems(m_payeesView, true); } void KFindTransactionDlg::slotDeselectAllPayees(void) { selectAllItems(m_payeesView, false); } void KFindTransactionDlg::setupDetailsPage(void) { connect(m_typeBox, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotUpdateSelections())); connect(m_stateBox, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotUpdateSelections())); connect(m_validityBox, TQ_SIGNAL(activated(int)), this, TQ_SLOT(slotUpdateSelections())); connect(m_nrButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotNrSelected())); connect(m_nrRangeButton, TQ_SIGNAL(clicked()), this, TQ_SLOT(slotNrRangeSelected())); connect(m_nrEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); connect(m_nrFromEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); connect(m_nrToEdit, TQ_SIGNAL(textChanged(const TQString&)), this, TQ_SLOT(slotUpdateSelections())); m_nrButton->setChecked(true); slotNrSelected(); } void KFindTransactionDlg::slotNrSelected(void) { m_nrEdit->setEnabled(true); m_nrFromEdit->setEnabled(false); m_nrToEdit->setEnabled(false); slotUpdateSelections(); } void KFindTransactionDlg::slotNrRangeSelected(void) { m_nrEdit->setEnabled(false); m_nrFromEdit->setEnabled(true); m_nrToEdit->setEnabled(true); slotUpdateSelections(); } void KFindTransactionDlg::addItemToFilter(const opTypeE op, const TQString& id) { switch(op) { case addAccountToFilter: m_filter.addAccount(id); break; case addCategoryToFilter: m_filter.addCategory(id); break; case addPayeeToFilter: m_filter.addPayee(id); break; } } void KFindTransactionDlg::scanCheckListItems(const TQListViewItem* item, const opTypeE op) { TQListViewItem* it_v; for(it_v = item->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { if(it_v->rtti() == 1) { KMyMoneyCheckListItem* it_c = static_cast(it_v); if(it_c->type() == TQCheckListItem::CheckBox) { if(it_c->isOn()) addItemToFilter(op, (*it_c).id()); } scanCheckListItems(it_v, op); } } } void KFindTransactionDlg::scanCheckListItems(const TQListView* view, const opTypeE op) { TQListViewItem* it_v; for(it_v = view->firstChild(); it_v != 0; it_v = it_v->nextSibling()) { if(it_v->rtti() == 1) { KMyMoneyCheckListItem* it_c = static_cast(it_v); if(it_c->type() == TQCheckListItem::CheckBox) { if(it_c->isOn()) addItemToFilter(op, (*it_c).id()); } scanCheckListItems(it_v, op); } } } void KFindTransactionDlg::setupFilter(void) { m_filter.clear(); // Text tab if(!m_textEdit->text().isEmpty()) { TQRegExp exp(m_textEdit->text(), m_caseSensitive->isChecked(), !m_regExp->isChecked()); m_filter.setTextFilter(exp, m_textNegate->currentItem() != 0); } // Account tab if(!m_accountsView->allItemsSelected()) { // retrieve a list of selected accounts TQStringList list; m_accountsView->selectedItems(list); // if we're not in expert mode, we need to make sure // that all stock accounts for the selected investment // account are also selected if(!KMyMoneyGlobalSettings::expertMode()) { TQStringList missing; TQStringList::const_iterator it_a, it_b; for(it_a = list.begin(); it_a != list.end(); ++it_a) { MyMoneyAccount acc = MyMoneyFile::instance()->account(*it_a); if(acc.accountType() == MyMoneyAccount::Investment) { for(it_b = acc.accountList().begin(); it_b != acc.accountList().end(); ++it_b) { if(!list.contains(*it_b)) { missing.append(*it_b); } } } } list += missing; } m_filter.addAccount(list); } // Date tab if(m_dateRange->currentItem() != 0) { m_filter.setDateFilter(m_fromDate->date(), m_toDate->date()); } // Amount tab if((m_amountButton->isChecked() && m_amountEdit->isValid())) { m_filter.setAmountFilter(m_amountEdit->value(), m_amountEdit->value()); } else if((m_amountRangeButton->isChecked() && (m_amountFromEdit->isValid() || m_amountToEdit->isValid()))) { MyMoneyMoney from(MyMoneyMoney::minValue), to(MyMoneyMoney::maxValue); if(m_amountFromEdit->isValid()) from = m_amountFromEdit->value(); if(m_amountToEdit->isValid()) to = m_amountToEdit->value(); m_filter.setAmountFilter(from, to); } // Categories tab if(!m_categoriesView->allItemsSelected()) { m_filter.addCategory(m_categoriesView->selectedItems()); } // Payees tab if(m_emptyPayeesButton->isChecked()) { m_filter.addPayee(TQString()); } else if(!allItemsSelected(m_payeesView)) { scanCheckListItems(m_payeesView, addPayeeToFilter); } // Details tab if(m_typeBox->currentItem() != 0) m_filter.addType(m_typeBox->currentItem()); if(m_stateBox->currentItem() != 0) m_filter.addState(m_stateBox->currentItem()); if(m_validityBox->currentItem() != 0) m_filter.addValidity(m_validityBox->currentItem()); if(m_nrButton->isChecked() && !m_nrEdit->text().isEmpty()) m_filter.setNumberFilter(m_nrEdit->text(), m_nrEdit->text()); if(m_nrRangeButton->isChecked() && (!m_nrFromEdit->text().isEmpty() || !m_nrToEdit->text().isEmpty())) { m_filter.setNumberFilter(m_nrFromEdit->text(), m_nrToEdit->text()); } } void KFindTransactionDlg::slotSearch(void) { // setup the filter from the dialog widgets setupFilter(); // filter is setup, now fill the register slotRefreshView(); m_register->setFocus(); } void KFindTransactionDlg::slotRefreshView(void) { m_needReload = true; if(isVisible()) { loadView(); m_needReload = false; } } void KFindTransactionDlg::show(void) { if(m_needReload) { loadView(); m_needReload = false; } KFindTransactionDlgDecl::show(); } void KFindTransactionDlg::loadView(void) { // setup sort order m_register->setSortOrder(KMyMoneyGlobalSettings::sortSearchView()); // clear out old data m_register->clear(); // retrieve the list from the engine MyMoneyFile::instance()->transactionList(m_transactionList, m_filter); // create the elements for the register TQValueList >::const_iterator it; TQMapuniqueMap; MyMoneyMoney deposit, payment; int splitCount = 0; for(it = m_transactionList.begin(); it != m_transactionList.end(); ++it) { const MyMoneySplit& split = (*it).second; MyMoneyAccount acc = MyMoneyFile::instance()->account(split.accountId()); ++splitCount; uniqueMap[(*it).first.id()]++; KMyMoneyRegister::Register::transactionFactory(m_register, (*it).first, (*it).second, uniqueMap[(*it).first.id()]); { // debug stuff if(split.shares().isNegative()) { payment += split.shares().abs(); } else { deposit += split.shares().abs(); } } } // add the group markers m_register->addGroupMarkers(); // sort the transactions according to the sort setting m_register->sortItems(); // remove trailing and adjacent markers m_register->removeUnwantedGroupMarkers(); // turn on the ledger lens for the register m_register->setLedgerLensForced(); m_register->updateRegister(true); m_register->setFocusToTop(); m_register->selectItem(m_register->focusItem()); #if KMM_DEBUG m_foundText->setText(i18n("Found %1 matching transactions (D %2 / P %3 = %4)") .arg(splitCount).arg(deposit.formatMoney("", 2)).arg(payment.formatMoney("", 2)).arg((deposit-payment).formatMoney("", 2))); #else m_foundText->setText(i18n("Found %1 matching transactions") .arg(splitCount)); #endif m_tabWidget->setTabEnabled(m_resultPage, true); m_tabWidget->setCurrentPage(m_tabWidget->indexOf(m_resultPage)); TQTimer::singleShot(10, this, TQ_SLOT(slotRightSize())); } void KFindTransactionDlg::slotRightSize(void) { m_register->updateContents(); } void KFindTransactionDlg::resizeEvent(TQResizeEvent* ev) { // Columns // 1 = Date // 2 = Account // 4 = Detail // 5 = C // 6 = Payment // 7 = Deposit // don't forget the resizer KFindTransactionDlgDecl::resizeEvent(ev); if(!m_register->isVisible()) return; // resize the register int w = m_register->visibleWidth(); int m_debitWidth = 80; int m_creditWidth = 80; m_register->adjustColumn(1); m_register->adjustColumn(2); m_register->adjustColumn(5); m_register->setColumnWidth(6, m_debitWidth); m_register->setColumnWidth(7, m_creditWidth); for(int i = 0; i < m_register->numCols(); ++i) { switch(i) { case 4: // skip the one, we want to set break; default: w -= m_register->columnWidth(i); break; } } m_register->setColumnWidth(4, w); } void KFindTransactionDlg::slotSelectTransaction(void) { TQValueList list = m_register->selectedItems(); if(!list.isEmpty()) { KMyMoneyRegister::Transaction* t = dynamic_cast(list[0]); if(t) { emit transactionSelected(t->split().accountId(), t->transaction().id()); hide(); } } } bool KFindTransactionDlg::eventFilter(TQObject* o, TQEvent* e) { bool rc = false; if(o->isWidgetType()) { if(e->type() == TQEvent::KeyPress) { const TQWidget* w = dynamic_cast(o); TQKeyEvent *k = static_cast (e); if(w == m_register) { switch(k->key()) { default: break; case TQt::Key_Return: case TQt::Key_Enter: rc = true; slotSelectTransaction(); break; } } } } return rc; } void KFindTransactionDlg::slotShowHelp(void) { TQString anchor = m_helpAnchor[m_criteriaTab->currentPage()]; if(anchor.isEmpty()) anchor = TQString("details.search"); kapp->invokeHelp(anchor); } void KFindTransactionDlg::slotSortOptions(void) { KSortOptionDlg* dlg = new KSortOptionDlg(this); dlg->setSortOption(KMyMoneyGlobalSettings::sortSearchView(), TQString()); dlg->hideDefaultButton(); if(dlg->exec() == TQDialog::Accepted) { TQString sortOrder = dlg->sortOption(); if(sortOrder != KMyMoneyGlobalSettings::sortSearchView()) { KMyMoneyGlobalSettings::setSortSearchView(sortOrder); slotRefreshView(); } } delete dlg; } #include "kfindtransactiondlg.moc"