102 lines
2.8 KiB
C++
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
|