You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmymoney/kmymoney2/widgets/transactionsortoption.ui.h

244 lines
7.9 KiB

/****************************************************************************
** ui.h extension file, included from the uic-generated form implementation.
**
** If you wish to add, delete or rename functions or slots use
** TQt Designer which will update this file, preserving your code. Create an
** init() function in place of a constructor, and a destroy() function in
** place of a destructor.
*****************************************************************************/
// ----------------------------------------------------------------------------
// QT Includes
// ----------------------------------------------------------------------------
// KDE Includes
#include <kiconloader.h>
#include <klocale.h>
#include <kpushbutton.h>
// ----------------------------------------------------------------------------
// Project Includes
#include <kmymoney/register.h>
#include "sortoptionlistitem.h"
void TransactionSortOption::init()
{
KIconLoader* il = KGlobal::iconLoader();
m_addButton->setIconSet(TQIconSet(il->loadIcon("1rightarrow", KIcon::Small, KIcon::SizeSmall)));
m_removeButton->setIconSet(TQIconSet(il->loadIcon("1leftarrow", KIcon::Small, KIcon::SizeSmall)));
m_upButton->setIconSet(TQIconSet(il->loadIcon("1uparrow", KIcon::Small, KIcon::SizeSmall)));
m_downButton->setIconSet(TQIconSet(il->loadIcon("1downarrow", KIcon::Small, KIcon::SizeSmall)));
// don't allow sorting of the selected entries
m_selectedList->setSortColumn(-1);
// defaults to "post date, value" sorting
// setSettings(TQString("1,4"));
setSettings(TQString());
TQListViewItem* p;
if((p = m_availableList->firstChild()) != 0) {
m_availableList->setSelected(p, true);
}
}
/**
* Setup the two lists according to the elements found in @a list.
* If an item is negative, it will show up in the available list,
* if positive, it shows up in the selected list.
*
* Special care is taken about the two values @a EntryDateSort and
* @a EntryOrderSort. These two entries cannot (should not) exist
* alone. Inside this widget, only the @a EntryOrderSort is used.
*
* setSettings() takes care of hiding the @a EntryDateSort item and if
* it exists in @p settings without @a EntryOrderSort being present, it
* will add @a EntryOrderSort.
*/
void TransactionSortOption::setSettings(const TQString& settings)
{
m_availableList->clear();
m_selectedList->clear();
TQStringList list = TQStringList::split(',', settings);
TQMap<int, bool> selectedMap;
// fill selected list
TQStringList::const_iterator it_s;
TQListViewItem* last = 0;
int dateSign = 1;
for(it_s = list.begin(); it_s != list.end(); ++it_s) {
int val = (*it_s).toInt();
selectedMap[abs(val)] = true;
// skip EntryDateSort but keep sign
if(abs(val) == static_cast<int>(KMyMoneyRegister::EntryDateSort)) {
dateSign = (val < 0) ? -1 : 1;
continue;
}
last = addEntry(m_selectedList, last, val);
}
// make sure to create EntryOrderSort if missing but required
if(selectedMap.tqfind(static_cast<int>(KMyMoneyRegister::EntryDateSort)) != selectedMap.end()
&& selectedMap.tqfind(static_cast<int>(KMyMoneyRegister::EntryOrderSort)) == selectedMap.end()) {
int val = dateSign * static_cast<int>(KMyMoneyRegister::EntryOrderSort);
selectedMap[static_cast<int>(KMyMoneyRegister::EntryOrderSort)] = true;
last = addEntry(m_selectedList, last, val);
}
// fill available list
TQMap<int, bool>::const_iterator it_m;
for(int i = static_cast<int>(KMyMoneyRegister::PostDateSort);
i < static_cast<int>(KMyMoneyRegister::MaxSortFields); ++i) {
// Never add EntryDateSort
if(i == static_cast<int>(KMyMoneyRegister::EntryDateSort))
continue;
// Only add those, that are not present in the list of selected items
if(selectedMap.tqfind(i) == selectedMap.end()) {
int val = i;
if(i == static_cast<int>(KMyMoneyRegister::ValueSort))
val = -val;
addEntry(m_availableList, 0, val);
}
}
}
TQListViewItem* TransactionSortOption::addEntry( KListView * p, TQListViewItem* after, int idx )
{
TQString txt = KMyMoneyRegister::sortOrderToText(static_cast<KMyMoneyRegister::TransactionSortField>(abs(idx)));
if(txt.isEmpty())
txt = "Unknown"; // i18n should be handled in sortOptionToText()
return new SortOptionListItem(p, after, txt, idx);
}
void TransactionSortOption::toggleDirection(TQListViewItem* item)
{
SortOptionListItem* p = dynamic_cast<SortOptionListItem*>(item);
if(p) {
p->toggleDirection();
emit settingsChanged(settings());
}
}
TQString TransactionSortOption::settings( void ) const
{
TQString rc;
SortOptionListItem* item = dynamic_cast<SortOptionListItem*>(m_selectedList->firstChild());
while(item) {
int option = KMyMoneyRegister::textToSortOrder(item->text(0));
// if we look at the EntryOrderSort option, we have to make
// sure, that the EntryDateSort is prepended
if(option == KMyMoneyRegister::EntryOrderSort) {
rc += TQString::number(static_cast<int>(KMyMoneyRegister::EntryDateSort)*item->direction())+",";
}
rc += TQString::number(KMyMoneyRegister::textToSortOrder(item->text(0))*item->direction());
item = dynamic_cast<SortOptionListItem*>(item->itemBelow());
if(item != 0)
rc += ",";
}
return rc;
}
void TransactionSortOption::slotAvailableSelected( TQListViewItem * item )
{
m_addButton->setEnabled(item != 0);
m_removeButton->setDisabled(true);
m_upButton->setDisabled(true);
m_downButton->setDisabled(true);
TQListViewItem* p = m_selectedList->currentItem();
if(p) {
m_selectedList->setSelected(p, false);
}
}
void TransactionSortOption::slotSelectedSelected( TQListViewItem * item )
{
m_addButton->setDisabled(true);
m_removeButton->setEnabled(item != 0);
if(item) {
m_upButton->setEnabled(item->itemAbove() != 0);
m_downButton->setEnabled(item->itemBelow() != 0);
} else {
m_upButton->setEnabled(false);
m_downButton->setEnabled(false);
}
TQListViewItem* p = m_availableList->currentItem();
if(p) {
m_availableList->setSelected(p, false);
}
}
void TransactionSortOption::slotAddItem( void )
{
TQListViewItem* item;
if((item = m_availableList->currentItem()) != 0) {
TQListViewItem* next = item->itemBelow();
if(!next)
next = item->itemAbove();
m_availableList->takeItem(item);
m_selectedList->insertItem(item);
m_addButton->setEnabled(m_availableList->firstChild() != 0);
if(next) {
m_availableList->setCurrentItem(next);
m_availableList->setSelected(next, true);
}
emit settingsChanged(settings());
}
}
void TransactionSortOption::slotRemoveItem( void )
{
TQListViewItem* item;
if((item = m_selectedList->currentItem()) != 0) {
TQListViewItem* next = item->itemBelow();
if(!next)
next = item->itemAbove();
m_selectedList->takeItem(item);
m_availableList->insertItem(item);
m_removeButton->setEnabled(m_selectedList->firstChild() != 0);
if(next) {
m_selectedList->setCurrentItem(next);
m_selectedList->setSelected(next, true);
}
emit settingsChanged(settings());
}
}
void TransactionSortOption::slotUpItem( void )
{
TQListViewItem* item;
if((item = m_selectedList->currentItem()) != 0) {
TQListViewItem* prev = item->itemAbove();
if(prev) {
prev->moveItem(item);
m_selectedList->setCurrentItem(item);
m_selectedList->setSelected(item, true);
m_upButton->setEnabled(item->itemAbove() != 0);
m_downButton->setEnabled(item->itemBelow() != 0);
emit settingsChanged(settings());
}
}
}
void TransactionSortOption::slotDownItem( void )
{
TQListViewItem* item;
if((item = m_selectedList->currentItem()) != 0) {
TQListViewItem* next = item->itemBelow();
if(next) {
item->moveItem(next);
m_selectedList->setCurrentItem(item);
m_selectedList->setSelected(item, true);
m_upButton->setEnabled(item->itemAbove() != 0);
m_downButton->setEnabled(item->itemBelow() != 0);
emit settingsChanged(settings());
}
}
}