#define GROUP_RECORD_FIELD "record_field"
#define GROUP_BTN_STOP "btn_stop"
#define GROUP_BTN_RECORD "btn_record"
+#define GROUP_BTN_PLAY "btn_play"
#define PART_BTN_STOP "swallow.btn_stop"
#define PART_BTN_REC_PLAY "swallow.btn_rec_play"
#define SIGNAL_BTN_STOP_HIDE "btn_stop,state,hide"
#define SIGNAL_BTN_STOP_SHOW "btn_stop,state,show"
-#define SIGNAL_BTN_RECORD "btn,state,record"
+#define SIGNAL_BTN_RESUME "btn,state,resume"
#define SIGNAL_BTN_PAUSE "btn,state,pause"
-#define BTN_RECORD_CLICKED "btn,state,rec_clicked"
+#define BTN_RESUME_CLICKED "btn,state,resume_clicked"
#define BTN_PAUSE_CLICKED "btn,state,pause_clicked"
#define SIGNAL_ICON_HIDE "icon,state,hide"
#define SIGNAL_ICON_REC "icon,state,rec"
#define SIGNAL_ICON_PAUSE "icon,state,pause"
+#define SIGNAL_RECORD_TIME_SHOW "record_time,state,show"
+#define SIGNAL_RECORD_TIME_HIDE "record_time,state,hide"
+
#endif /* RECORD_FIELD_LAYOUT_H */
#include "Utils/Callback.h"
#include "Utils/Logger.h"
+#include "Common/Player.h"
#include "Common/Recorder.h"
#include "RecordFieldLayout.h"
RecordField::RecordField(std::string path, Mode mode)
: m_Path(path)
- , m_StopBtn(nullptr)
- , m_RecordBtn(nullptr)
+ , m_Mode(mode)
+ , m_PlayBtn(nullptr)
, m_Recorder(nullptr)
+ , m_Player(nullptr)
{
- setMode(mode);
}
RecordField::~RecordField()
m_Recorder->save();
delete m_Recorder;
}
+ delete m_Player;
}
void RecordField::setDeleteCallback(DeleteCallback callback)
{
Evas_Object *layout = elm_layout_add(parent);
elm_layout_file_set(layout, layoutFilePath.c_str(), GROUP_RECORD_FIELD);
-
- elm_layout_content_set(layout, PART_BTN_STOP, createStopBtn(layout));
- elm_layout_content_set(layout, PART_BTN_REC_PLAY, createRecordBtn(layout));
- elm_layout_text_set(layout, PART_RECORD_TIME, DEFAULT_TIME);
elm_layout_signal_callback_add(layout, "mouse,clicked,*", PART_CLOSE_BTN,
(Edje_Signal_Cb) makeCallback(&RecordField::onClosePressed), this);
return layout;
}
-void RecordField::onRecording(unsigned long long elapsedTime, unsigned long long fileSize)
+void RecordField::onCreated()
{
- char str[MAX_TEXT_LEN];
- snprintf(str, MAX_TEXT_LEN, "%02d:%02d", (int)((elapsedTime/1000)/60), (int)((elapsedTime/1000)%60));
- elm_layout_text_set(getEvasObject(), PART_RECORD_TIME, str);
+ setMode(m_Mode);
+}
+
+void RecordField::setMode(Mode mode)
+{
+ m_Mode = mode;
+
+ switch (m_Mode) {
+ case ModeRecorder:
+ m_Recorder = new Recorder(m_Path.c_str());
+ m_Recorder->setRecordingCallback(std::bind(&RecordField::onRecording, this, _1, _2));
+ createRecorderView();
+ break;
+ case ModePlayer:
+ if (m_Recorder) {
+ delete m_Recorder;
+ m_Recorder = nullptr;
+ }
+ m_Player = new Player(m_Path.c_str());
+ m_Player->setCompleteCallback(std::bind(&RecordField::onPlayCompleted, this));
+ createPlayerView();
+ break;
+ }
+}
+
+void RecordField::createRecorderView()
+{
+ elm_layout_content_set(getEvasObject(), PART_BTN_STOP, createStopBtn(getEvasObject()));
+ elm_layout_content_set(getEvasObject(), PART_BTN_REC_PLAY, createRecordBtn(getEvasObject()));
+ elm_layout_text_set(getEvasObject(), PART_RECORD_TIME, DEFAULT_TIME);
+}
+
+void RecordField::createPlayerView()
+{
+ elm_layout_content_set(getEvasObject(), PART_BTN_STOP, nullptr);
+ elm_layout_content_set(getEvasObject(), PART_BTN_REC_PLAY, createPlayBtn(getEvasObject()));
+ elm_layout_text_set(getEvasObject(), PART_RECORD_TIME, formatTime(m_Player->getDuration()).c_str());
}
Evas_Object *RecordField::createStopBtn(Evas_Object *parent)
{
- m_StopBtn = elm_layout_add(parent);
- elm_layout_file_set(m_StopBtn, layoutFilePath.c_str(), GROUP_BTN_STOP);
- elm_layout_signal_callback_add(m_StopBtn, "mouse,clicked,*", "*",
+ Evas_Object *stopBtn = elm_layout_add(parent);
+ elm_layout_file_set(stopBtn, layoutFilePath.c_str(), GROUP_BTN_STOP);
+ elm_layout_signal_callback_add(stopBtn, "mouse,clicked,*", "*",
(Edje_Signal_Cb) makeCallback(&RecordField::onStopPressed), this);
- return m_StopBtn;
+ return stopBtn;
}
Evas_Object *RecordField::createRecordBtn(Evas_Object *parent)
{
- m_RecordBtn = elm_layout_add(parent);
- elm_layout_file_set(m_RecordBtn, layoutFilePath.c_str(), GROUP_BTN_RECORD);
- elm_layout_signal_callback_add(m_RecordBtn, BTN_RECORD_CLICKED, "*",
+ Evas_Object *recordBtn = elm_layout_add(parent);
+ elm_layout_file_set(recordBtn, layoutFilePath.c_str(), GROUP_BTN_RECORD);
+ elm_layout_signal_callback_add(recordBtn, BTN_RESUME_CLICKED, "*",
(Edje_Signal_Cb) makeCallback(&RecordField::onRecordPressed), this);
- elm_layout_signal_callback_add(m_RecordBtn, BTN_PAUSE_CLICKED, "*",
- (Edje_Signal_Cb) makeCallback(&RecordField::onPausePressed), this);
+ elm_layout_signal_callback_add(recordBtn, BTN_PAUSE_CLICKED, "*",
+ (Edje_Signal_Cb) makeCallback(&RecordField::onRecordPausePressed), this);
+
+ return recordBtn;
+}
+
+Evas_Object *RecordField::createPlayBtn(Evas_Object *parent)
+{
+ m_PlayBtn = elm_layout_add(parent);
+ elm_layout_file_set(m_PlayBtn, layoutFilePath.c_str(), GROUP_BTN_PLAY);
+ elm_layout_signal_callback_add(m_PlayBtn, BTN_RESUME_CLICKED, "*",
+ (Edje_Signal_Cb) makeCallback(&RecordField::onPlayPressed), this);
+ elm_layout_signal_callback_add(m_PlayBtn, BTN_PAUSE_CLICKED, "*",
+ (Edje_Signal_Cb) makeCallback(&RecordField::onPlayPausePressed), this);
- return m_RecordBtn;
+ return m_PlayBtn;
+}
+
+void RecordField::onRecording(unsigned long long elapsedTime, unsigned long long fileSize)
+{
+ elm_layout_text_set(getEvasObject(), PART_RECORD_TIME, formatTime(elapsedTime).c_str());
}
void RecordField::onStopPressed()
m_Recorder->save();
elm_object_signal_emit(getEvasObject(), SIGNAL_BTN_STOP_HIDE, "*");
elm_object_signal_emit(getEvasObject(), SIGNAL_ICON_HIDE, "*");
+ setMode(ModePlayer);
}
void RecordField::onRecordPressed()
elm_object_signal_emit(getEvasObject(), SIGNAL_BTN_STOP_SHOW, "*");
}
-void RecordField::onPausePressed()
+void RecordField::onRecordPausePressed()
{
m_Recorder->pause();
elm_object_signal_emit(getEvasObject(), SIGNAL_ICON_PAUSE, "*");
}
+void RecordField::onPlayCompleted()
+{
+ m_Player->stop();
+ elm_object_signal_emit(m_PlayBtn, SIGNAL_BTN_RESUME, "*");
+ elm_object_signal_emit(getEvasObject(), SIGNAL_RECORD_TIME_SHOW, "*");
+}
+
+void RecordField::onPlayPressed()
+{
+ m_Player->start();
+ elm_object_signal_emit(getEvasObject(), SIGNAL_RECORD_TIME_HIDE, "*");
+}
+
+void RecordField::onPlayPausePressed()
+{
+ m_Player->pause();
+}
+
void RecordField::onClosePressed()
{
switch(m_Mode) {
popup->show();
}
-void RecordField::setMode(Mode mode)
+std::string RecordField::formatTime(int time)
{
- m_Mode = mode;
-
- if (m_Recorder) {
- delete m_Recorder;
- m_Recorder = nullptr;
- }
- switch (m_Mode) {
- case ModeRecorder:
- m_Recorder = new Recorder(m_Path.c_str());
- m_Recorder->setRecordingCallback(std::bind(&RecordField::onRecording, this, _1, _2));
- break;
- case ModePlayer:
- break;
- }
+ char str[MAX_TEXT_LEN];
+ snprintf(str, MAX_TEXT_LEN, "%02d:%02d", (time/1000)/60, (time/1000)%60);
+ return str;
}