1/*
2 * Copyright 2003-2014, Haiku, Inc.
3 * Distributed under the terms of the MIT license.
4 *
5 * Authors:
6 *		Sikosis, Jérôme Duval
7 *		yourpalal, Alex Wilson
8 */
9#ifndef MEDIA_WINDOW_H
10#define MEDIA_WINDOW_H
11
12
13#include <Alert.h>
14#include <ListView.h>
15#include <MediaAddOn.h>
16#include <ParameterWeb.h>
17#include <StringView.h>
18#include <Window.h>
19
20#include <ObjectList.h>
21
22#include "MediaIcons.h"
23#include "MediaListItem.h"
24#include "MediaViews.h"
25
26#define SETTINGS_FILE "MediaPrefs Settings"
27
28
29class BCardLayout;
30class BSeparatorView;
31class MidiSettingsView;
32
33class MediaWindow : public BWindow {
34public:
35								MediaWindow(BRect frame);
36								~MediaWindow();
37
38			status_t			InitCheck();
39
40	// methods to be called by MediaListItems...
41			void				SelectNode(const dormant_node_info* node);
42			void				SelectAudioSettings(const char* title);
43			void				SelectVideoSettings(const char* title);
44			void				SelectAudioMixer(const char* title);
45			void				SelectMidiSettings(const char* title);
46
47	// methods to be called by SettingsViews...
48			void				UpdateInputListItem(
49									MediaListItem::media_type type,
50									const dormant_node_info* node);
51			void				UpdateOutputListItem(
52									MediaListItem::media_type type,
53									const dormant_node_info* node);
54
55	virtual	bool 				QuitRequested();
56	virtual	void				MessageReceived(BMessage* message);
57
58private:
59	typedef BObjectList<dormant_node_info> NodeList;
60
61			void				_InitWindow();
62			status_t			_InitMedia(bool first);
63
64			void				_FindNodes();
65			void				_FindNodes(media_type type, uint64 kind,
66									NodeList& into);
67			void				_AddNodeItems(NodeList &from,
68									MediaListItem::media_type type);
69			void				_EmptyNodeLists();
70			void				_UpdateListViewMinWidth();
71
72			NodeListItem*		_FindNodeListItem(dormant_node_info* info);
73
74	static	status_t			_RestartMediaServices(void* data);
75
76			void				_ClearParamView();
77			void				_MakeParamView();
78			void				_MakeEmptyParamView();
79
80	struct SmartNode {
81								SmartNode(const BMessenger& notifyHandler);
82								~SmartNode();
83
84			void				SetTo(const dormant_node_info* node);
85			void				SetTo(const media_node& node);
86			bool				IsSet();
87								operator media_node();
88
89	private:
90			void				_FreeNode();
91			media_node*			fNode;
92			BMessenger			fMessenger;
93	};
94
95			BListView*			fListView;
96			BSeparatorView*		fTitleView;
97			BCardLayout*		fContentLayout;
98			AudioSettingsView*	fAudioView;
99			VideoSettingsView*	fVideoView;
100			MidiSettingsView*	fMidiView;
101
102			SmartNode			fCurrentNode;
103			BParameterWeb*		fParamWeb;
104
105
106			NodeList			fAudioInputs;
107			NodeList			fAudioOutputs;
108			NodeList			fVideoInputs;
109			NodeList			fVideoOutputs;
110
111			status_t			fInitCheck;
112			thread_id			fRestartThread;
113			BAlert*				fRestartAlert;
114};
115
116
117#endif	// MEDIA_WINDOW_H
118