xref: /haiku/src/apps/codycam/CodyCam.h (revision 18ba9ea5c9078b4919958d4ebe96ae1ea8cb9a13)
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 	0
83 };
84 
85 
86 class CodyCam : public BApplication {
87 public:
88 							CodyCam();
89 	virtual					~CodyCam();
90 
91 			void			ReadyToRun();
92 	virtual	bool			QuitRequested();
93 	virtual	void			MessageReceived(BMessage* message);
94 
95 private:
96 			status_t		_SetUpNodes();
97 			void			_TearDownNodes();
98 
99 			BMediaRoster*	fMediaRoster;
100 			media_node		fTimeSourceNode;
101 			media_node		fProducerNode;
102 			VideoConsumer*	fVideoConsumer;
103 			media_output	fProducerOut;
104 			media_input		fConsumerIn;
105 			BWindow*		fWindow;
106 			port_id			fPort;
107 			BWindow*		fVideoControlWindow;
108 };
109 
110 
111 class VideoWindow : public BWindow {
112 public:
113 							VideoWindow(BRect frame, const char* title,
114 								window_type type, uint32 flags,
115 								port_id* consumerport);
116 							~VideoWindow();
117 
118 	virtual	bool			QuitRequested();
119 	virtual	void			MessageReceived(BMessage* message);
120 
121 			void			ApplyControls();
122 
123 			BView*			VideoView();
124 			BStringView*	StatusLine();
125 
126 private:
127 			void			_BuildCaptureControls(BView* theView);
128 
129 			void			_SetUpSettings(const char* filename,
130 								const char* dirname);
131 			void			_QuitSettings();
132 
133 private:
134 			media_node*		fProducer;
135 			port_id*		fPortPtr;
136 
137 			BView*			fView;
138 			BView*			fVideoView;
139 
140 			BTextControl*	fFileName;
141 			BBox*			fCaptureSetupBox;
142 			BMenu*			fCaptureRateMenu;
143 			BMenuField*		fCaptureRateSelector;
144 			BMenu*			fImageFormatMenu;
145 			BMenuField*		fImageFormatSelector;
146 			BMenu*			fUploadClientMenu;
147 			BMenuField*		fUploadClientSelector;
148 			BBox*			fFtpSetupBox;
149 			BTextControl*	fServerName;
150 			BTextControl*	fLoginId;
151 			BTextControl*	fPassword;
152 			BTextControl*	fDirectory;
153 			BCheckBox*		fPassiveFtp;
154 			BBox*			fStatusBox;
155 			BStringView*	fStatusLine;
156 
157 			ftp_msg_info	fFtpInfo;
158 
159 			Settings*		fSettings;
160 
161 			StringValueSetting*		fServerSetting;
162 			StringValueSetting*		fLoginSetting;
163 			StringValueSetting*		fPasswordSetting;
164 			StringValueSetting*		fDirectorySetting;
165 			BooleanValueSetting*	fPassiveFtpSetting;
166 			StringValueSetting*		fFilenameSetting;
167 			StringValueSetting*		fImageFormatSettings;
168 
169 			EnumeratedStringValueSetting*	fUploadClientSetting;
170 			EnumeratedStringValueSetting*	fCaptureRateSetting;
171 };
172 
173 
174 class ControlWindow : public BWindow {
175 public:
176 							ControlWindow(const BRect& frame, BView* controls,
177 								media_node node);
178 			void			MessageReceived(BMessage* message);
179 			bool			QuitRequested();
180 
181 private:
182 			BView*			fView;
183 			media_node		fNode;
184 };
185 
186 #endif	// CODYCAM_H
187 
188