xref: /haiku/src/apps/codycam/CodyCam.h (revision 4f2fd49bdc6078128b1391191e4edac647044c3d)
1 /* CodyCam.h */
2 #ifndef CODYCAM_H
3 #define CODYCAM_H
4 
5 
6 #include "Settings.h"
7 #include "VideoConsumer.h"
8 
9 #include <string.h>
10 
11 #include <Application.h>
12 #include <Box.h>
13 #include <CheckBox.h>
14 #include <Menu.h>
15 #include <MenuField.h>
16 #include <StringView.h>
17 #include <TextControl.h>
18 #include <Window.h>
19 
20 
21 
22 class BMediaRoster;
23 
24 
25 enum {
26 	msg_filename	= 'file',
27 
28 	msg_rate_15s	= 'r15s',
29 	msg_rate_30s	= 'r30s',
30 	msg_rate_1m		= 'r1m ',
31 	msg_rate_5m		= 'r5m ',
32 	msg_rate_10m	= 'r10m',
33 	msg_rate_15m	= 'r15m',
34 	msg_rate_30m	= 'r30m',
35 	msg_rate_1h		= 'r1h ',
36 	msg_rate_2h		= 'r2h ',
37 	msg_rate_4h		= 'r4h ',
38 	msg_rate_8h		= 'r8h ',
39 	msg_rate_24h	= 'r24h',
40 	msg_rate_never	= 'nevr',
41 
42 	msg_translate	= 'tran',
43 
44 	msg_upl_client	= 'ucli',
45 	msg_server		= 'srvr',
46 	msg_login		= 'lgin',
47 	msg_password	= 'pswd',
48 	msg_directory	= 'drct',
49 	msg_passiveftp	= 'pasv',
50 	msg_pswrd_text	= 'pstx',
51 
52 	msg_start		= 'strt',
53 	msg_stop		= 'stop',
54 
55 	msg_about		= 'abut',
56 	msg_setup		= 'setp',
57 	msg_video		= 'vdeo',
58 
59 	msg_control_win = 'ctlw'
60 };
61 
62 
63 const char* kCaptureRate[] = {
64 	"Every 15 seconds",
65 	"Every 30 seconds",
66 	"Every minute",
67 	"Every 5 minutes",
68 	"Every 10 minutes",
69 	"Every 15 minutes",
70 	"Every 30 minutes",
71 	"Every hour",
72 	"Every 2 hours",
73 	"Every 4 hours",
74 	"Every 8 hours",
75 	"Every 24 hours",
76 	"Never",
77 	0
78 };
79 
80 
81 const char* kUploadClient[] = {
82 	"FTP",
83 	"SFTP",
84 	0
85 };
86 
87 
88 class CodyCam : public BApplication {
89 	public:
90 		CodyCam();
91 		virtual ~CodyCam();
92 
93 		void ReadyToRun();
94 		virtual bool QuitRequested();
95 		virtual void MessageReceived(BMessage* message);
96 
97 	private:
98 		status_t		_SetUpNodes();
99 		void			_TearDownNodes();
100 
101 		BMediaRoster*	fMediaRoster;
102 		media_node		fTimeSourceNode;
103 		media_node		fProducerNode;
104 		VideoConsumer*	fVideoConsumer;
105 		media_output	fProducerOut;
106 		media_input		fConsumerIn;
107 		BWindow*		fWindow;
108 		port_id			fPort;
109 		BWindow*		fVideoControlWindow;
110 };
111 
112 
113 class VideoWindow : public BWindow {
114 	public:
115 		VideoWindow(BRect frame, const char* title, window_type type,
116 			uint32 flags, 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, 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 		StringValueSetting*		fServerSetting;
161 		StringValueSetting*		fLoginSetting;
162 		StringValueSetting*		fPasswordSetting;
163 		StringValueSetting*		fDirectorySetting;
164 		BooleanValueSetting*	fPassiveFtpSetting;
165 		StringValueSetting*		fFilenameSetting;
166 		StringValueSetting*		fImageFormatSettings;
167 		EnumeratedStringValueSetting* fUploadClientSetting;
168 		EnumeratedStringValueSetting* fCaptureRateSetting;
169 };
170 
171 
172 class ControlWindow : public BWindow {
173 	public:
174 		ControlWindow(const BRect& frame, BView* controls, media_node node);
175 		void MessageReceived(BMessage* message);
176 		bool QuitRequested();
177 
178 	private:
179 		BView*		fView;
180 		media_node	fNode;
181 };
182 
183 #endif	// CODYCAM_H
184