repository_infos: Enable automatic updates on the main Haiku repostiory.
[haiku.git] / src / apps / codycam / CodyCam.h
blobb54c734adb21e13543dd38bb9d34532c63bba5da
1 #ifndef CODYCAM_H
2 #define CODYCAM_H
5 #include "Settings.h"
6 #include "VideoConsumer.h"
8 #include <string.h>
10 #include <Application.h>
11 #include <Box.h>
12 #include <Catalog.h>
13 #include <CheckBox.h>
14 #include <Locale.h>
15 #include <Menu.h>
16 #include <MenuField.h>
17 #include <StringView.h>
18 #include <TextControl.h>
19 #include <Window.h>
22 class BMediaRoster;
25 enum {
26 msg_filename = 'file',
28 msg_rate_changed = 'rate',
30 msg_translate = 'tran',
32 msg_upl_client = 'ucli',
33 msg_server = 'srvr',
34 msg_login = 'lgin',
35 msg_password = 'pswd',
36 msg_directory = 'drct',
37 msg_passiveftp = 'pasv',
38 msg_pswrd_text = 'pstx',
40 msg_start = 'strt',
41 msg_stop = 'stop',
43 msg_setup = 'setp',
44 msg_video = 'vdeo',
46 msg_control_win = 'ctlw'
50 struct capture_rate {
51 const char* name;
52 time_t seconds;
56 // NOTE: These are translated once the app catalog is loaded.
57 capture_rate kCaptureRates[] = {
58 {"Every 15 seconds", 15 },
59 {"Every 30 seconds", 30 },
60 {"Every minute", 60 },
61 {"Every 5 minutes", 5 * 60 },
62 {"Every 10 minutes", 10 * 60 },
63 {"Every 15 minutes", 15 * 60 },
64 {"Every 30 minutes", 30 * 60 },
65 {"Every hour", 60 * 60 },
66 {"Every 2 hours", 2 * 60 * 60 },
67 {"Every 4 hours", 4 * 60 * 60 },
68 {"Every 8 hours", 8 * 60 * 60 },
69 {"Every 24 hours", 24 * 60 * 60 },
70 {"Never", 0 }
74 const int32 kCaptureRatesCount = sizeof(kCaptureRates) / sizeof(capture_rate);
77 const char* kUploadClients[] = {
78 // NOTE: These are translated once the app catalog is loaded.
79 "FTP",
80 "SFTP",
81 "Local"
85 const int32 kUploadClientsCount = sizeof(kUploadClients) / sizeof(char*);
87 class VideoWindow;
88 class ControlWindow;
90 class CodyCam : public BApplication {
91 public:
92 CodyCam();
93 virtual ~CodyCam();
95 void ReadyToRun();
96 virtual bool QuitRequested();
97 virtual void MessageReceived(BMessage* message);
99 private:
100 status_t _SetUpNodes();
101 void _TearDownNodes();
103 BMediaRoster* fMediaRoster;
104 media_node fTimeSourceNode;
105 media_node fProducerNode;
106 VideoConsumer* fVideoConsumer;
107 media_output fProducerOut;
108 media_input fConsumerIn;
109 VideoWindow* fWindow;
110 port_id fPort;
111 ControlWindow* fVideoControlWindow;
115 class VideoWindow : public BWindow {
116 public:
117 VideoWindow(const char* title,
118 window_type type, uint32 flags,
119 port_id* consumerport);
120 ~VideoWindow();
122 virtual bool QuitRequested();
123 virtual void MessageReceived(BMessage* message);
125 void ApplyControls();
127 BView* VideoView();
128 BStringView* StatusLine();
129 void ToggleMenuOnOff();
131 void ErrorAlert(const char*, status_t);
133 private:
134 void _BuildCaptureControls();
136 void _SetUpSettings(const char* filename,
137 const char* dirname);
138 void _UploadClientChanged();
139 void _QuitSettings();
141 private:
142 media_node* fProducer;
143 port_id* fPortPtr;
145 BView* fVideoView;
146 BTextView* fErrorView;
148 BTextControl* fFileName;
149 BBox* fCaptureSetupBox;
150 BMenu* fCaptureRateMenu;
151 BMenuField* fCaptureRateSelector;
152 BMenu* fImageFormatMenu;
153 BMenuField* fImageFormatSelector;
154 BMenu* fUploadClientMenu;
155 BMenuField* fUploadClientSelector;
156 BBox* fFtpSetupBox;
157 BTextControl* fServerName;
158 BTextControl* fLoginId;
159 BTextControl* fPassword;
160 BTextControl* fDirectory;
161 BCheckBox* fPassiveFtp;
162 BBox* fStatusBox;
163 BStringView* fStatusLine;
165 ftp_msg_info fFtpInfo;
167 Settings* fSettings;
169 BMenu* fMenu;
171 StringValueSetting* fServerSetting;
172 StringValueSetting* fLoginSetting;
173 StringValueSetting* fPasswordSetting;
174 StringValueSetting* fDirectorySetting;
175 BooleanValueSetting* fPassiveFtpSetting;
176 StringValueSetting* fFilenameSetting;
177 StringValueSetting* fImageFormatSettings;
179 EnumeratedStringValueSetting* fUploadClientSetting;
180 EnumeratedStringValueSetting* fCaptureRateSetting;
184 class ControlWindow : public BWindow {
185 public:
186 ControlWindow(BView* controls,
187 media_node node);
188 void MessageReceived(BMessage* message);
189 bool QuitRequested();
191 private:
192 BView* fView;
193 media_node fNode;
196 #endif // CODYCAM_H