186 lines
6.1 KiB
C++
186 lines
6.1 KiB
C++
|
|
#ifndef FM_DAYTIME_H
|
|
#define FM_DAYTIME_H
|
|
#if (USE_DATE_TIME_LIST)
|
|
#include <QWidget>
|
|
#include <QDate>
|
|
#include <QSet>
|
|
#include "../fm_event_types.h"
|
|
|
|
class FMDayTime;
|
|
class RMVideoItem;
|
|
class FMTimeBar : public QWidget
|
|
{
|
|
friend class FMDayTime;
|
|
Q_OBJECT
|
|
public:
|
|
explicit FMTimeBar(int min, int max, int unit, int labelUnit, QWidget *parent = nullptr);
|
|
bool bDisabled; ///!< 파일 로딩시 잠김
|
|
protected:
|
|
|
|
int mMin; ///!< 시간/분 모두 0,
|
|
int mMax; ///!< 시간일 경우 24, 분일경우 60
|
|
int mUnit; ///!< 시간:1 분:5
|
|
int mLabelUnit; ///!< 시간:3(시간에 한번 표시), 분:5(분에 한번 표시)
|
|
int mMarginLR; ///!< 좌우 최소 마진 (+ 소숫점 오차가 최종 마진이 됨)
|
|
|
|
void showEvent(QShowEvent*) override;
|
|
|
|
void drawGrid(QPainter& p);
|
|
|
|
void paintEvent(QPaintEvent *) override;
|
|
virtual void mousePressEvent(QMouseEvent* event) override;
|
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
|
|
|
bool eventFilter(QObject *watched, QEvent *event);
|
|
bool mPressed; ///!< 마우스 눌린 상태
|
|
int mHoverTime; ///!< 마우스 HOVER 시간(분)
|
|
int mSelectedTime; ///!< 선택 시간(분)
|
|
|
|
QSet<int> mExists; ///!< 영상이 존재하는 시작시간(분)
|
|
|
|
|
|
|
|
//! \brief 초기화
|
|
virtual void reset();
|
|
|
|
//! \brief 마우스 좌표에서 선택된 시간(분) 확인
|
|
//! \param xy: 마우스 좌표
|
|
//! \return 선택된 시간
|
|
virtual int getTime(QPoint xy);
|
|
signals:
|
|
//! \brief 시간 또는 분 선택됨
|
|
//! \param nSelected: 선택된 시간, 분
|
|
//! \param playTime: 리스트 또는 다음파일로 재생된 경우
|
|
//! \parma moveList: 리스트 업데이트
|
|
void timeSelected(int nSelected, QDateTime* playTime,bool moveList);
|
|
};
|
|
|
|
class FMTimeBarMinute : public FMTimeBar
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit FMTimeBarMinute(QWidget *parent = nullptr);
|
|
QList<QPair<QSize,RMVideoItem*>> mFiles; ///!< 0~3600 초로 구성된 재생시간 영역
|
|
|
|
QList<QPair<QRect,RMVideoItem*>> mAreas;
|
|
void createAreaBox();
|
|
void reset() override;
|
|
|
|
//! \brief 시간과 동일한 AREA INDEX 리턴
|
|
//! \param time
|
|
//! \return
|
|
int findAreaFromTime(QDateTime* time);
|
|
protected:
|
|
bool mMenu; ///!< 메뉴 표시 여부
|
|
|
|
int mStartBackup;
|
|
int mEndBackup;
|
|
QList<RMVideoItem*> backups;
|
|
|
|
//! \brief XY 로 시간확인하는 방식이 다름
|
|
//! \param xy: 좌표
|
|
//! \return 선택된 mAreas 리스트
|
|
int getTime(QPoint xy) override;
|
|
void mousePressEvent(QMouseEvent* event) override;
|
|
|
|
//! \brief 우측 메뉴 클릭을 위해 처리
|
|
//! \param event
|
|
void mouseReleaseEvent(QMouseEvent* event) override;
|
|
|
|
//! \brief 백업 메뉴 표시
|
|
//! \param pos: 좌표
|
|
void showMenu(QPoint pos);
|
|
|
|
void paintEvent(QPaintEvent *) override;
|
|
signals:
|
|
void backupSelected(QList<RMVideoItem*>&);
|
|
|
|
public slots:
|
|
void onSetBackup();
|
|
};
|
|
|
|
//! \brief 시간/분 통합 컨트롤
|
|
class FMDayTime : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit FMDayTime(QWidget *parent = nullptr);
|
|
protected:
|
|
FMTimeBar* mHours;
|
|
FMTimeBarMinute* mMinutes;
|
|
|
|
QDateTime mLastPlayTime; ///!< 재생시간을 확인하여 분으로 선택된 경우 LOOP 방지
|
|
|
|
//! \brief 파일 리스트 중 지정된 날짜에 포함된 시간리스트 리턴
|
|
//! \param hours<out>: 영상이 존재하는 시간(0~23) 리스트
|
|
void getHour(QSet<int>& hours);
|
|
|
|
//! \brief 파일 리스트 중 지정된 날짜, 시간에 포함된 분리스트 리턴
|
|
//! \param hours<out>: 영상이 존재하는 분(0~59) 리스트
|
|
//void getMinute(QSet<int>& minutes);
|
|
|
|
//! \brief 파일 리스트 확인하여 시작분(초), 끝분(초) 영역 생성
|
|
void loadMinutes(QList<QPair<QSize,RMVideoItem*>>& files);
|
|
|
|
//QDate mDate; ///!< 선택된 날짜
|
|
QList<RMVideoItem*> mDayList; ///!< 날짜에 포함된 아이템 리스트
|
|
|
|
RMVideoItem* findSelectedItem();
|
|
|
|
//! \brief 선택된 시간의 최초 아이템 리턴
|
|
//! \return
|
|
RMVideoItem* findFirstSelectedHourItem();
|
|
|
|
//! \brief 시간선택 (영상이 존재하는 시간만 선택됨)
|
|
//! \param tihourme: 선택할 시간
|
|
//! \param fromCalendar: 캘린더 UI 에서 선택됨
|
|
//! \param moveList: 리스트 업데이트
|
|
void selectHour(int hour, QDateTime* playTime, bool moveList);
|
|
|
|
signals:
|
|
//! \brief 시간선택시 리스트 이동
|
|
//! \param selected
|
|
void listMove(RMVideoItem* selected);
|
|
|
|
public slots:
|
|
|
|
//! \brief 재생시작 완료까지 비활성화
|
|
void onEnable();
|
|
|
|
//! \brief 날짜 변경되어 시간/분 그래프 업데이트 필요
|
|
//! 리스트에서 파일 선택시에도 호출됨??
|
|
//! \param playTime: 다음파일, 리스트 등에서 재생되어 지정된 시간이 존재할 경우
|
|
//! \param bSelectFirst: 최초의 시간/분 강제 선택 (달력 컨트롤에서 요청)
|
|
//! \param moveList: 리스트 이동
|
|
void onDateSelected(QList<RMVideoItem*>*,QDateTime* playTime, bool moveList);
|
|
|
|
//! \brief 날짜 변경없이 다음파일, 리스트 등에서 재생되어 시간이 업데이트 된 경우
|
|
//! \param playTime: 재생된 파일의 시간
|
|
void onPlayTime(QDateTime* playTime, bool moveList);
|
|
|
|
//! \brief 시간 선택됨-> 분(BAR) 업데이트
|
|
//! \param hour
|
|
//! \param playTime: 다음파일, 리스트 등에서 재생되어 지정된 시간이 존재할 경우
|
|
//! \param moveList: 리스트 위치 이동
|
|
void onHourSelected(int hour,QDateTime* playTime,bool moveList);
|
|
|
|
//! \brief 분 선택됨-> 분(BAR) 업데이트
|
|
//! \param minute
|
|
//! \param playTime: 다음파일, 리스트 등에서 재생되어 지정된 시간이 존재할 경우
|
|
//! \param moveList: 리스트 위치 이동
|
|
void onMinuteSelected(int minute,QDateTime* playTime,bool moveList);
|
|
|
|
void onBackupSelected(QList<RMVideoItem*>& lst);
|
|
|
|
//! \brief 선택된 월에 영상이 존재하지 않아 초기화
|
|
void onClearDate();
|
|
|
|
void onPlayEvent(PLAY_EVENT event,RMVideoItem* item);
|
|
|
|
};
|
|
|
|
|
|
#endif // #if (USE_DATE_TIME_LIST)
|
|
#endif // FM_DAYTIME_H
|