/* * abakuslistview.cpp - part of abakus * Copyright (C) 2004, 2005 Michael Pyne * * 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. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include #include #include #include #include #include #include "dragsupport.h" #include "abakuslistview.h" #include "valuemanager.h" #include "function.h" ListView::ListView(TQWidget *parent, const char *name) : TDEListView(parent, name), m_menu(0), m_usePopup(false), m_removeSingleId(0), m_removeAllId(0) { setResizeMode(LastColumn); setDragEnabled(true); connect(this, TQ_SIGNAL(contextMenuRequested(TQListViewItem *, const TQPoint &, int)), TQ_SLOT(rightClicked(TQListViewItem *, const TQPoint &))); } TQDragObject *ListView::dragObject() { TQPoint viewportPos = viewport()->mapFromGlobal(TQCursor::pos()); TQListViewItem *item = itemAt(viewportPos); if(!item) return 0; int column = header()->sectionAt(viewportPos.x()); TQString dragText = item->text(column); TQDragObject *drag = new TQTextDrag(dragText, this, "list item drag"); drag->setPixmap(DragSupport::makePixmap(dragText, font())); return drag; } void ListView::enablePopupHandler(bool enable) { if(enable == m_usePopup) return; m_usePopup = enable; if(m_usePopup) { if(m_menu) kdError() << "ListView menu shouldn't exist here!\n"; m_menu = new TDEPopupMenu(this); m_removeSingleId = m_menu->insertItem(removeItemString(), this, TQ_SLOT(removeSelected())); m_removeAllId = m_menu->insertItem("Placeholder", this, TQ_SLOT(removeAllItems())); } else { delete m_menu; m_menu = 0; } } TQString ListView::removeItemString() const { return TQString(); } TQString ListView::removeAllItemsString(unsigned count) const { Q_UNUSED(count); return TQString(); } void ListView::removeSelectedItem(TQListViewItem *item) { Q_UNUSED(item); } void ListView::removeAllItems() { } bool ListView::isItemRemovable(TQListViewItem *item) const { Q_UNUSED(item); return false; } void ListView::rightClicked(TQListViewItem *item, const TQPoint &pt) { if(!m_usePopup) return; m_menu->setItemEnabled(m_removeSingleId, item && isItemRemovable(item)); m_menu->changeItem(m_removeAllId, removeAllItemsString(childCount())); m_menu->popup(pt); } void ListView::removeSelected() { removeSelectedItem(selectedItem()); } ValueListViewItem::ValueListViewItem(TQListView *listView, const TQString &name, const Abakus::number_t &value) : TDEListViewItem(listView, name), m_value(value) { valueChanged(); } void ValueListViewItem::valueChanged() { setText(1, m_value.toString()); repaint(); } void ValueListViewItem::valueChanged(const Abakus::number_t &newValue) { m_value = newValue; valueChanged(); } Abakus::number_t ValueListViewItem::itemValue() const { return m_value; } VariableListView::VariableListView(TQWidget *parent, const char *name) : ListView(parent, name) { enablePopupHandler(true); } TQString VariableListView::removeItemString() const { return i18n("Remove selected variable"); } TQString VariableListView::removeAllItemsString(unsigned count) const { // count is unreliable because not all of the elements in the list view // can be removed. count = 0; TQStringList values = ValueManager::instance()->valueNames(); for(TQStringList::ConstIterator value = values.constBegin(); value != values.constEnd(); ++value) if(!ValueManager::instance()->isValueReadOnly(*value)) ++count; return i18n("Remove all variables (1 variable)", "Remove all variables (%n variables)", count); } bool VariableListView::isItemRemovable(TQListViewItem *item) const { return !ValueManager::instance()->isValueReadOnly(item->text(0)); } void VariableListView::removeSelectedItem(TQListViewItem *item) { ValueManager::instance()->removeValue(item->text(0)); } void VariableListView::removeAllItems() { ValueManager::instance()->slotRemoveUserVariables(); } FunctionListView::FunctionListView(TQWidget *parent, const char *name) : ListView(parent, name) { enablePopupHandler(true); } TQString FunctionListView::removeItemString() const { return i18n("Remove selected function"); } TQString FunctionListView::removeAllItemsString(unsigned count) const { return i18n("Remove all functions (1 function)", "Remove all functions (%n functions)", count); } bool FunctionListView::isItemRemovable(TQListViewItem *item) const { return true; } void FunctionListView::removeSelectedItem(TQListViewItem *item) { // Use section to get the beginning of the string up to (and not // including) the first ( TQString name = item->text(0).section('(', 0, 0); FunctionManager::instance()->removeFunction(name); } void FunctionListView::removeAllItems() { TQStringList fns = FunctionManager::instance()->functionList(FunctionManager::UserDefined); for(TQStringList::ConstIterator fn = fns.constBegin(); fn != fns.constEnd(); ++fn) FunctionManager::instance()->removeFunction(*fn); } #include "abakuslistview.moc"