Files
fmviewer3/project/fm_viewer/ui/fm_calendar.h
2026-02-21 17:11:31 +09:00

102 lines
2.8 KiB
C++

#ifndef FM_CALENDAR_H
#define FM_CALENDAR_H
#if (USE_DATE_TIME_LIST)
#include <QWidget>
#include <QDate>
#include <QSet>
#include "../fm_event_types.h"
class FMCalendar;
class QVBoxLayout;
class QLabel;
class FMButton;
class RMVideoItem;
class FMCalendarFrame : public QWidget
{
Q_OBJECT
public:
explicit FMCalendarFrame(QWidget *parent = nullptr);
FMCalendar* mCalendar;
QVBoxLayout* mLayout;
QLabel* mYearLabel;
//! \brief 년/월 변경
void refreshMonth();
private:
FMButton* next;
FMButton* before;
QDateTime playTime;
bool bLoadStarted; //!< 업데이트 강제 달력 갱신하기 위해 사용
public slots:
void onChangeMonth();
//! \brief 로딩시 강제로 달력을 업데이트 하기위해 사용
void onListUpdateStarted(bool bLoading);
//void onListUpdateEnd(bool bLoading,RMVideoItem* selected);
void onPlayEvent(PLAY_EVENT event,RMVideoItem* item);
};
class FMCalendar : public QWidget
{
friend class FMCalendarFrame;
Q_OBJECT
public:
explicit FMCalendar(QWidget *parent = nullptr);
QDate date;
QList<RMVideoItem*> mMonthItems; ///!< 월별 아이템 리스트
QList<RMVideoItem*> mDayItems; ///!< 일별 아이템 리스트
bool mPressed; ///!< 마우스 눌린 상태
int mHoverDay; ///!< 마우스 위 날짜
int mSelectedDay; ///!< 선택된 날짜 (리스트에 표시되는)
QSet<int> mExists; ///!< 영상 존재하는 날짜
//! \brief 초기화
void reset();
private:
//! \brief 영역 지점에서 날짜 확인
//! \param xy: 좌표
//! \return 날짜, 없을 경우 -1
int getDay(QPoint xy);
protected:
//! \brief 날짜선택
//! \param day: 선택할 날짜(데이터가 존재하는 날짜만 지정가능)
//void selectDay(int day);
//! \brief 현재 선택된 날짜 리스트 업데이트
void updateDayItems();
void paintEvent(QPaintEvent *) override;
//void mouseMoveEvent(QMouseEvent* event) override;
void mousePressEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
bool eventFilter(QObject *watched, QEvent *event);
signals:
//! \brief 날짜 변경됨
//! \param dayItems: 변경된 날짜 데이터
//! \param playTime: 달력에서 변경 또는 loop 방지를 위해 사용
// //! \param bSelectFirst: 강제로 최초 시/분을 선택하도록 지정
void dateSelected(QList<RMVideoItem*>* dayItems, QDateTime* playTime,bool moveList);
//! \brief 해당 월에 날짜가 없을 경우 시간,분 그래프 초기화
void clearDate();
// //! \brief 날짜 선택시 리스트 이동
// //! \param selected
// void listMove(RMVideoItem* selected);
void playTime(QDateTime*,bool listMove);
};
#endif // #if (USE_DATE_TIME_LIST)
#endif // FM_CALENDAR_H