first commit

This commit is contained in:
2026-02-21 17:11:31 +09:00
commit 18b4338361
4001 changed files with 365464 additions and 0 deletions

View File

@@ -0,0 +1,185 @@
#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