xref: /haiku/src/apps/codycam/CodyCam.h (revision 9760dcae2038d47442f4658c2575844c6cf92c40)
1 #ifndef CODYCAM_H
2 #define CODYCAM_H
3 
4 
5 #include "Settings.h"
6 #include "VideoConsumer.h"
7 
8 #include <string.h>
9 
10 #include <Application.h>
11 #include <Box.h>
12 #include <CheckBox.h>
13 #include <Menu.h>
14 #include <MenuField.h>
15 #include <StringView.h>
16 #include <TextControl.h>
17 #include <Window.h>
18 
19 
20 class BMediaRoster;
21 
22 
23 enum {
24 	msg_filename	= 'file',
25 
26 	msg_rate_15s	= 'r15s',
27 	msg_rate_30s	= 'r30s',
28 	msg_rate_1m		= 'r1m ',
29 	msg_rate_5m		= 'r5m ',
30 	msg_rate_10m	= 'r10m',
31 	msg_rate_15m	= 'r15m',
32 	msg_rate_30m	= 'r30m',
33 	msg_rate_1h		= 'r1h ',
34 	msg_rate_2h		= 'r2h ',
35 	msg_rate_4h		= 'r4h ',
36 	msg_rate_8h		= 'r8h ',
37 	msg_rate_24h	= 'r24h',
38 	msg_rate_never	= 'nevr',
39 
40 	msg_translate	= 'tran',
41 
42 	msg_upl_client	= 'ucli',
43 	msg_server		= 'srvr',
44 	msg_login		= 'lgin',
45 	msg_password	= 'pswd',
46 	msg_directory	= 'drct',
47 	msg_passiveftp	= 'pasv',
48 	msg_pswrd_text	= 'pstx',
49 
50 	msg_start		= 'strt',
51 	msg_stop		= 'stop',
52 
53 	msg_about		= 'abut',
54 	msg_setup		= 'setp',
55 	msg_video		= 'vdeo',
56 
57 	msg_control_win = 'ctlw'
58 };
59 
60 
61 const char* kCaptureRate[] = {
62 	"Every 15 seconds",
63 	"Every 30 seconds",
64 	"Every minute",
65 	"Every 5 minutes",
66 	"Every 10 minutes",
67 	"Every 15 minutes",
68 	"Every 30 minutes",
69 	"Every hour",
70 	"Every 2 hours",
71 	"Every 4 hours",
72 	"Every 8 hours",
73 	"Every 24 hours",
74 	"Never",
75 	0
76 };
77 
78 
79 const char* kUploadClient[] = {
80 	"FTP",
81 	"SFTP",
82 	"Local",
83 	0
84 };
85 
86 
87 class CodyCam : public BApplication {
88 public:
89 							CodyCam();
90 	virtual					~CodyCam();
91 
92 			void			ReadyToRun();
93 	virtual	bool			QuitRequested();
94 	virtual	void			MessageReceived(BMessage* message);
95 
96 private:
97 			status_t		_SetUpNodes();
98 			void			_TearDownNodes();
99 
100 			BMediaRoster*	fMediaRoster;
101 			media_node		fTimeSourceNode;
102 			media_node		fProducerNode;
103 			VideoConsumer*	fVideoConsumer;
104 			media_output	fProducerOut;
105 			media_input		fConsumerIn;
106 			BWindow*		fWindow;
107 			port_id			fPort;
108 			BWindow*		fVideoControlWindow;
109 };
110 
111 
112 class VideoWindow : public BWindow {
113 public:
114 							VideoWindow(BRect frame, const char* title,
115 								window_type type, uint32 flags,
116 								port_id* consumerport);
117 							~VideoWindow();
118 
119 	virtual	bool			QuitRequested();
120 	virtual	void			MessageReceived(BMessage* message);
121 
122 			void			ApplyControls();
123 
124 			BView*			VideoView();
125 			BStringView*	StatusLine();
126 
127 private:
128 			void			_BuildCaptureControls(BView* theView);
129 
130 			void			_SetUpSettings(const char* filename,
131 								const char* dirname);
132 			void			_UploadClientChanged();
133 			void			_QuitSettings();
134 
135 private:
136 			media_node*		fProducer;
137 			port_id*		fPortPtr;
138 
139 			BView*			fView;
140 			BView*			fVideoView;
141 
142 			BTextControl*	fFileName;
143 			BBox*			fCaptureSetupBox;
144 			BMenu*			fCaptureRateMenu;
145 			BMenuField*		fCaptureRateSelector;
146 			BMenu*			fImageFormatMenu;
147 			BMenuField*		fImageFormatSelector;
148 			BMenu*			fUploadClientMenu;
149 			BMenuField*		fUploadClientSelector;
150 			BBox*			fFtpSetupBox;
151 			BTextControl*	fServerName;
152 			BTextControl*	fLoginId;
153 			BTextControl*	fPassword;
154 			BTextControl*	fDirectory;
155 			BCheckBox*		fPassiveFtp;
156 			BBox*			fStatusBox;
157 			BStringView*	fStatusLine;
158 
159 			ftp_msg_info	fFtpInfo;
160 
161 			Settings*		fSettings;
162 
163 			StringValueSetting*		fServerSetting;
164 			StringValueSetting*		fLoginSetting;
165 			StringValueSetting*		fPasswordSetting;
166 			StringValueSetting*		fDirectorySetting;
167 			BooleanValueSetting*	fPassiveFtpSetting;
168 			StringValueSetting*		fFilenameSetting;
169 			StringValueSetting*		fImageFormatSettings;
170 
171 			EnumeratedStringValueSetting*	fUploadClientSetting;
172 			EnumeratedStringValueSetting*	fCaptureRateSetting;
173 };
174 
175 
176 class ControlWindow : public BWindow {
177 public:
178 							ControlWindow(const BRect& frame, BView* controls,
179 								media_node node);
180 			void			MessageReceived(BMessage* message);
181 			bool			QuitRequested();
182 
183 private:
184 			BView*			fView;
185 			media_node		fNode;
186 };
187 
188 #endif	// CODYCAM_H
189 
190