1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
// -*- Mode: C++; tab-width: 2; -*-
// vi: set ts=2:
//
// $Id: genericControl.C,v 1.17.16.1 2007/03/25 21:56:47 oliver Exp $
//
#include <BALL/VIEW/WIDGETS/genericControl.h>
#include <BALL/VIEW/KERNEL/mainControl.h>
#include <BALL/VIEW/KERNEL/message.h>
namespace BALL
{
namespace VIEW
{
TreeWidget::TreeWidget(QWidget* parent)
: QTreeWidget(parent)
{
}
void TreeWidget::selectItems(const list<QTreeWidgetItem*>& items)
{
QItemSelection qis;
list<QTreeWidgetItem*>::const_iterator cit = items.begin();
for (; cit != items.end(); cit++)
{
QItemSelectionRange qsr(indexFromItem(*cit));
qis.push_back(qsr);
}
selectionModel()->select(qis, QItemSelectionModel::Select
|QItemSelectionModel::Rows);
}
GenericControl::GenericControl(QWidget* parent, const char* name)
: DockWidget(parent, name),
context_item_(0),
listview(new TreeWidget(this)),
checkable_(false)
{
setGuest(*listview);
listview->setSelectionMode(QAbstractItemView::ExtendedSelection);
connect(listview, SIGNAL(itemSelectionChanged()), this, SLOT(updateSelection()));
connect(listview, SIGNAL(itemClicked(QTreeWidgetItem*, int)), this, SLOT(onItemClicked(QTreeWidgetItem*, int)));
}
GenericControl::~GenericControl()
{
#ifdef BALL_VIEW_DEBUG
Log.error() << "Destructing object " << this << " of class GenericControl" << std::endl;
#endif
}
GenericControl::ItemList GenericControl::getSelectedItems()
{
QList<QTreeWidgetItem*> result = listview->selectedItems();
if (result.size() > 0)
{
context_item_ = *result.begin();
}
else
{
context_item_ = 0;
}
return result;
}
void GenericControl::deselectOtherControls_()
{
notify_(new DeselectControlsMessage);
}
void GenericControl::updateSelection()
{
if (getSelectedItems().size() > 0) deselectOtherControls_();
}
void GenericControl::onNotify(Message *message)
{
if (!RTTI::isKindOf<DeselectControlsMessage>(message)) return;
listview->clearSelection();
}
void GenericControl::initializeWidget(MainControl& main_control)
{
main_control.insertDeleteEntry();
DockWidget::initializeWidget(main_control);
}
QTreeWidgetItem* GenericControl::addRow(const QStringList& entries)
{
QTreeWidgetItem* item = new QTreeWidgetItem(listview, entries);
if (checkable_) item->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsSelectable);
return item;
}
void GenericControl::removeItem_(QTreeWidgetItem* item)
{
while (item->child(0) != 0)
{
removeItem_(item->child(0));
}
delete item;
}
} // namespace VIEW
} // namespace BALL
|