#ifndef FM_CALENDAR_H #define FM_CALENDAR_H #if (USE_DATE_TIME_LIST) #include #include #include #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 mMonthItems; ///!< 월별 아이템 리스트 QList mDayItems; ///!< 일별 아이템 리스트 bool mPressed; ///!< 마우스 눌린 상태 int mHoverDay; ///!< 마우스 위 날짜 int mSelectedDay; ///!< 선택된 날짜 (리스트에 표시되는) QSet 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* 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