BTRFS: Implement BTree::Path and change _Find.
[haiku.git] / src / apps / soundrecorder / RecorderWindow.h
blob898dc5042cd148fae3b2dca42e152bb872a6aa46
1 /*
2 * Copyright 2005, Jérôme Duval. All rights reserved.
3 * Distributed under the terms of the MIT License.
5 * Inspired by SoundCapture from Be newsletter (Media Kit Basics: Consumers and Producers)
6 */
7 #ifndef RECORDERWINDOW_H
8 #define RECORDERWINDOW_H
11 #include <Catalog.h>
12 #include <Directory.h>
13 #include <Entry.h>
14 #include <File.h>
15 #include <FilePanel.h>
16 #include <Locale.h>
17 #include <MediaFile.h>
18 #include <MediaNode.h>
19 #include <MediaRecorder.h>
20 #include <MediaTrack.h>
21 #include <SoundPlayer.h>
22 #include <Window.h>
24 #include "DrawButton.h"
25 #include "ScopeView.h"
26 #include "SoundListView.h"
27 #include "TransportButton.h"
28 #include "TrackSlider.h"
29 #include "UpDownButton.h"
30 #include "VolumeSlider.h"
31 #include "VUView.h"
34 class BMediaRoster;
35 class BBox;
36 class BButton;
37 class BCheckBox;
38 class BMenuField;
39 class SoundListView;
40 class BScrollView;
41 class BSlider;
42 class BStringView;
45 class RecorderWindow : public BWindow {
46 public:
47 RecorderWindow();
48 virtual ~RecorderWindow();
49 status_t InitCheck();
52 virtual bool QuitRequested();
53 virtual void MessageReceived(BMessage * message);
55 enum {
56 RECORD = 'cw00', // command messages
57 PLAY,
58 STOP,
59 REWIND,
60 FORWARD,
61 SAVE,
62 VIEW_LIST,
63 LOOP,
64 INPUT_SELECTED = 'cW00', // control messages
65 SOUND_SELECTED,
66 STOP_PLAYING,
67 STOP_RECORDING,
68 RECORD_PERIOD,
69 PLAY_PERIOD,
70 UPDATE_TRACKSLIDER,
71 POSITION_CHANGED
74 void AddSoundItem(const BEntry& entry, bool temp = false);
76 void RemoveCurrentSoundItem();
78 private:
79 BMediaRoster * fRoster;
80 VUView *fVUView;
81 ScopeView *fScopeView;
82 RecordButton * fRecordButton;
83 PlayPauseButton * fPlayButton;
84 TransportButton * fStopButton;
85 TransportButton * fRewindButton;
86 TransportButton * fForwardButton;
87 TransportButton * fSaveButton;
88 DrawButton * fLoopButton;
89 VolumeSlider *fVolumeSlider;
90 TrackSlider *fTrackSlider;
91 UpDownButton * fUpDownButton;
92 BMenuField * fInputField;
93 BMediaRecorder * fRecorder;
94 BSoundPlayer * fPlayer;
95 bool fRecording;
96 bool fExternalConnection;
97 SoundListView * fSoundList;
98 BDirectory fTempDir;
99 int fTempCount;
101 float fDeployedHeight;
103 BBox * fBottomBox;
104 BBox * fFileInfoBox;
105 BStringView *fFilename;
106 BStringView *fFormat;
107 BStringView *fCompression;
108 BStringView *fChannels;
109 BStringView *fSampleSize;
110 BStringView *fSampleRate;
111 BStringView *fDuration;
113 enum BtnState {
114 btnPaused,
115 btnRecording,
116 btnPlaying
118 BtnState fButtonState;
119 BEntry fRecEntry;
121 media_format fRecordFormat;
123 BFile fRecFile;
124 off_t fRecSize;
126 media_node fAudioInputNode;
128 BMediaFile *fPlayFile;
129 media_format fPlayFormat;
130 BMediaTrack *fPlayTrack;
131 int64 fPlayLimit;
132 int64 fPlayFrame;
133 int64 fPlayFrames;
135 bool fLooping;
137 media_node fAudioMixerNode;
139 BFilePanel *fSavePanel;
140 status_t fInitCheck;
142 status_t InitWindow();
144 void Record(BMessage * message);
145 void Play(BMessage * message);
146 void Stop(BMessage * message);
147 void Save(BMessage * message);
148 void DoSave(BMessage * message);
149 void Input(BMessage * message);
150 void Length(BMessage * message);
151 void Selected(BMessage * message);
153 status_t MakeRecordConnection(const media_node & input);
154 status_t BreakRecordConnection();
155 status_t StopRecording();
157 status_t MakePlayConnection(const media_multi_audio_format & format);
158 status_t BreakPlayConnection();
159 status_t StopPlaying();
161 status_t NewTempName(char * buffer);
162 void CalcSizes(float min_width, float min_height);
163 void SetButtonState(BtnState state);
164 void UpdateButtons();
165 status_t UpdatePlayFile(SoundListItem *item, bool updateDisplay = false);
166 void ErrorAlert(const char * action, status_t err);
168 static void RecordFile(void * cookie, bigtime_t timestamp, void * data, size_t size, const media_format & format);
169 static void NotifyRecordFile(void * cookie, BMediaRecorder::notification code, ...);
171 static void PlayFile(void * cookie, void * data, size_t size, const media_raw_audio_format & format);
172 static void NotifyPlayFile(void * cookie, BSoundPlayer::sound_player_notification code, ...);
174 void RefsReceived(BMessage *msg);
175 void CopyTarget(BMessage *msg);
178 #endif /* RECORDERWINDOW_H */