1/*
2 * Copyright 2008-2009 Haiku Inc. All rights reserved.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 *		Pieter Panman
7 */
8#ifndef DEVICESVIEW_H
9#define DEVICESVIEW_H
10
11
12#include <MenuField.h>
13#include <MenuItem.h>
14#include <OutlineListView.h>
15#include <PopUpMenu.h>
16#include <TabView.h>
17#include <View.h>
18
19#include <map>
20
21#include "Device.h"
22#include "DevicePCI.h"
23#include "DeviceACPI.h"
24#include "DeviceSCSI.h"
25#include "PropertyList.h"
26#include "PropertyListPlain.h"
27
28static const uint32 kMsgRefresh				= 'refr';
29static const uint32 kMsgReportCompatibility	= 'repo';
30static const uint32 kMsgGenerateSysInfo		= 'sysi';
31static const uint32 kMsgSelectionChanged	= 'selc';
32static const uint32 kMsgOrderCategory		= 'ocat';
33static const uint32 kMsgOrderConnection		= 'ocon';
34
35typedef enum {
36	ORDER_BY_CONNECTION,
37	ORDER_BY_CATEGORY
38} OrderByType;
39
40typedef std::map<Category, Device*> CategoryMap;
41typedef std::map<Category, Device*>::const_iterator CategoryMapIterator;
42
43typedef std::vector<Device*> Devices;
44
45
46class DevicesView : public BView {
47	public:
48				DevicesView();
49				~DevicesView();
50
51		virtual void CreateLayout();
52
53		virtual void MessageReceived(BMessage* msg);
54		virtual void RescanDevices();
55		virtual void CreateCategoryMap();
56		virtual void DeleteCategoryMap();
57
58		virtual void DeleteDevices();
59		virtual void RebuildDevicesOutline();
60		virtual void AddChildrenToOutlineByConnection(Device* parent);
61		virtual void AddDeviceAndChildren(device_node_cookie* node,
62						Device* parent);
63		static int   SortItemsCompare(const BListItem*, const BListItem*);
64
65	private:
66		BOutlineListView*	fDevicesOutline;
67		PropertyListPlain*	fBasicView;
68		PropertyListPlain*	fBusView;
69		PropertyList*		fAttributesView;
70		BMenuField*			fOrderByMenu;
71		BTabView*			fTabView;
72		Devices				fDevices;
73		OrderByType			fOrderBy;
74		CategoryMap			fCategoryMap;
75		BTab*				fBasicTab;
76		BTab*				fDeviceTypeTab;
77		BTab*				fDetailedTab;
78
79};
80
81#endif /* DEVICESVIEW_H */
82