File: genericControl.C

package info (click to toggle)
ball 1.5.0%2Bgit20180813.37fc53c-6
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 239,888 kB
  • sloc: cpp: 326,149; ansic: 4,208; python: 2,303; yacc: 1,778; lex: 1,099; xml: 958; sh: 322; makefile: 95
file content (113 lines) | stat: -rw-r--r-- 2,696 bytes parent folder | download | duplicates (4)
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