/*
 * portlistview.h
 *
 * Copyright (c) 2002, 2003 Frerich Raabe <raabe@kde.org>
 *
 * 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. For licensing and distribution details, check the
 * accompanying file 'COPYING'.
 */
#ifndef PORTLISTVIEW_H
#define PORTLISTVIEW_H

#include "port.h"

#include <klistview.h>

#include <qdatetime.h>
#include <qdict.h>
#include <qmap.h>

class QListViewItem;
class QTimer;

namespace Barry
{
	class CategoryItem : public KListViewItem
	{
		friend class PortListView;
		public:
			CategoryItem( PortListView *parent, const QString &name );

			virtual void setOpen( bool open );

			QString name() const { return m_name; }

		private:
			void populate();

			QString m_name;
	};

	class PortItem : public KListViewItem
	{
		public:
			PortItem( KListView *parent, const Port &port );
			PortItem( CategoryItem *parent, const Port &port );

			Port port() const { return m_port; }

		private:
			void init();

			Port m_port;
	};

	class PortListView : public KListView
	{
		friend class CategoryItem;
		friend class PortItem;
		friend class PortSelectCommand;
		Q_OBJECT
		public:
			PortListView( QWidget *parent );

			void populate();

		signals:
			void portNameRegistered( const QString &name );
			void portSelected( const Port &port );

		public slots:
			void selectPort( const QString &port );
			void selectPort( const Port &port );
			
		private slots:
			void itemSelected( QListViewItem *item );

		private:
			QDict<KListViewItem> m_nameDict;
			QMap<Port, KListViewItem *> m_portMap;
			QListViewItem *m_oldItem;
	};
};

#endif // PORTLISTVIEW_H
// vim:ts=4:sw=4:noet:list
