xref: /haiku/src/apps/codycam/CodyCam.h (revision d9cebac2b77547b7064f22497514eecd2d047160)
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_server		= 'srvr',
45 	msg_login		= 'lgin',
46 	msg_password	= 'pswd',
47 	msg_directory	= 'drct',
48 	msg_passiveftp	= 'pasv',
49 	msg_pswrd_text	= 'pstx',
50 
51 	msg_start		= 'strt',
52 	msg_stop		= 'stop',
53 
54 	msg_about		= 'abut',
55 	msg_setup		= 'setp',
56 	msg_video		= 'vdeo',
57 
58 	msg_control_win = 'ctlw'
59 };
60 
61 
62 const char* kCaptureRate[] = {
63 	"Every 15 seconds",
64 	"Every 30 seconds",
65 	"Every minute",
66 	"Every 5 minutes",
67 	"Every 10 minutes",
68 	"Every 15 minutes",
69 	"Every 30 minutes",
70 	"Every hour",
71 	"Every 2 hours",
72 	"Every 4 hours",
73 	"Every 8 hours",
74 	"Every 24 hours",
75 	"Never",
76 	0
77 };
78 
79 
80 class CodyCam : public BApplication {
81 	public:
82 		CodyCam();
83 		virtual ~CodyCam();
84 
85 		void ReadyToRun();
86 		virtual bool QuitRequested();
87 		virtual void MessageReceived(BMessage* message);
88 
89 	private:
90 		status_t		_SetUpNodes();
91 		void			_TearDownNodes();
92 
93 		BMediaRoster*	fMediaRoster;
94 		media_node		fTimeSourceNode;
95 		media_node		fProducerNode;
96 		VideoConsumer*	fVideoConsumer;
97 		media_output	fProducerOut;
98 		media_input		fConsumerIn;
99 		BWindow*		fWindow;
100 		port_id			fPort;
101 		BWindow*		fVideoControlWindow;
102 };
103 
104 
105 class VideoWindow : public BWindow {
106 	public:
107 		VideoWindow(BRect frame, const char* title, window_type type,
108 			uint32 flags, port_id* consumerport);
109 		~VideoWindow();
110 
111 		virtual	bool QuitRequested();
112 		virtual void MessageReceived(BMessage* message);
113 
114 		void ApplyControls();
115 
116 		BView* VideoView();
117 		BStringView* StatusLine();
118 
119 	private:
120 		void _BuildCaptureControls(BView* theView);
121 
122 		void _SetUpSettings(const char* filename, const char* dirname);
123 		void _QuitSettings();
124 
125 	private:
126 		media_node*				fProducer;
127 		port_id*				fPortPtr;
128 
129 		BView*					fView;
130 		BView*					fVideoView;
131 
132 		BTextControl*			fFileName;
133 		BBox*					fCaptureSetupBox;
134 		BMenu*					fCaptureRateMenu;
135 		BMenuField*				fCaptureRateSelector;
136 		BMenu*					fImageFormatMenu;
137 		BMenuField*				fImageFormatSelector;
138 		BBox*					fFtpSetupBox;
139 		BTextControl*			fServerName;
140 		BTextControl*			fLoginId;
141 		BTextControl*			fPassword;
142 		BTextControl*			fDirectory;
143 		BCheckBox*				fPassiveFtp;
144 		BBox*					fStatusBox;
145 		BStringView*			fStatusLine;
146 
147 		ftp_msg_info			fFtpInfo;
148 
149 		Settings*				fSettings;
150 		StringValueSetting*		fServerSetting;
151 		StringValueSetting*		fLoginSetting;
152 		StringValueSetting*		fPasswordSetting;
153 		StringValueSetting*		fDirectorySetting;
154 		BooleanValueSetting*	fPassiveFtpSetting;
155 		StringValueSetting*		fFilenameSetting;
156 		EnumeratedStringValueSetting* fCaptureRateSetting;
157 };
158 
159 
160 class ControlWindow : public BWindow {
161 	public:
162 		ControlWindow(const BRect& frame, BView* controls, media_node node);
163 		void MessageReceived(BMessage* message);
164 		bool QuitRequested();
165 
166 	private:
167 		BView*		fView;
168 		media_node	fNode;
169 };
170 
171 #endif	// CODYCAM_H
172