1// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
2//
3//	Copyright (c) 2003, Haiku
4//
5//  This software is part of the Haiku distribution and is covered
6//  by the MIT License.
7//
8//
9//  File:        MediaViews.h
10//  Author:      Sikosis, J��r��me Duval
11//  Description: Media Preferences
12//  Created :    June 25, 2003
13//
14// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
15#ifndef __MEDIAVIEWS_H__
16#define __MEDIAVIEWS_H__
17#include <GroupView.h>
18#include <MediaAddOn.h>
19#include <MenuItem.h>
20
21#include <ObjectList.h>
22
23
24class BBox;
25class BButton;
26class BCheckBox;
27class BMenu;
28class BMenuField;
29class BString;
30class BStringView;
31
32class MediaWindow;
33
34
35const uint32 ML_RESTART_MEDIA_SERVER = 'resr';
36const uint32 ML_DEFAULT_CHANNEL_CHANGED = 'chch';
37
38
39class NodeMenuItem : public BMenuItem
40{
41public:
42								NodeMenuItem(const dormant_node_info* info,
43									BMessage* message, char shortcut = 0,
44									uint32 modifiers = 0);
45	virtual	status_t			Invoke(BMessage* message = NULL);
46
47			const dormant_node_info* NodeInfo() const {return fInfo;}
48private:
49
50			const dormant_node_info* fInfo;
51};
52
53
54class ChannelMenuItem : public BMenuItem
55{
56public:
57								ChannelMenuItem(media_input* input,
58									BMessage* message, char shortcut = 0,
59									uint32 modifiers = 0);
60	virtual						~ChannelMenuItem();
61
62			int32				DestinationID();
63			media_input*		Input();
64
65	virtual	status_t			Invoke(BMessage* message = NULL);
66
67private:
68			media_input*		fInput;
69};
70
71
72class SettingsView : public BGroupView
73{
74public:
75	typedef BObjectList<dormant_node_info> NodeList;
76
77								SettingsView();
78			void				AddInputNodes(NodeList& nodes);
79			void				AddOutputNodes(NodeList& nodes);
80
81	virtual	void				SetDefaultInput(const dormant_node_info* info);
82	virtual	void				SetDefaultOutput(const dormant_node_info* info);
83
84	virtual	void				MessageReceived(BMessage* message);
85	virtual	void				AttachedToWindow();
86
87
88protected:
89
90			BMenu*				InputMenu() {return fInputMenu;}
91			BMenu*				OutputMenu() {return fOutputMenu;}
92
93			BButton*			MakeRestartButton();
94
95			void				_EmptyMenu(BMenu* menu);
96			MediaWindow*		_MediaWindow() const;
97
98private:
99			void				_PopulateMenu(BMenu* menu, NodeList& nodes,
100									const BMessage& message);
101			NodeMenuItem*		_FindNodeItem(BMenu* menu,
102									const dormant_node_info* nodeInfo);
103			void				_ClearMenuSelection(BMenu* menu);
104
105			BMenu* 				fInputMenu;
106			BMenu* 				fOutputMenu;
107};
108
109
110class AudioSettingsView : public SettingsView
111{
112public:
113								AudioSettingsView();
114
115			void				SetDefaultChannel(int32 channelID);
116
117	virtual	void				SetDefaultInput(const dormant_node_info* info);
118	virtual	void				SetDefaultOutput(const dormant_node_info* info);
119
120	virtual	void				MessageReceived(BMessage* message);
121	virtual	void				AttachedToWindow();
122
123private:
124			BMenuField*			_MakeChannelMenu();
125			BCheckBox*			_MakeVolumeCheckBox();
126			void				_FillChannelMenu(const dormant_node_info* info);
127
128			void				_ShowDeskbarVolumeControl();
129			void				_HideDeskbarVolumeControl();
130
131			ChannelMenuItem*	_ChannelMenuItemAt(int32 index);
132
133			BMenu*				fChannelMenu;
134			BCheckBox* 			fVolumeCheckBox;
135};
136
137
138class VideoSettingsView : public SettingsView
139{
140public:
141								VideoSettingsView();
142
143	virtual	void				SetDefaultInput(const dormant_node_info* info);
144	virtual	void				SetDefaultOutput(const dormant_node_info* info);
145};
146
147#endif
148