171 lines
4.6 KiB
C++
171 lines
4.6 KiB
C++
#ifndef FM_THUMBNAIL_H
|
|
#define FM_THUMBNAIL_H
|
|
#include "../rm_include.h"
|
|
#if (RM_MODEL == RM_MODEL_TYPE_TB4000)
|
|
#define DYNAMIC_THUMBNAIL 1
|
|
|
|
#define MULTI_THUMBNAIL_ONLY 1 // SINGLE 모드 제거
|
|
#define FIXED_SIZE_THUMBNAIL 1 // 고정 크기
|
|
#define THUMBNAIL_ITEM_CONNECT_EACH 1 // FMSIGNAL 로 연결
|
|
#define THUMBNAIL_DIALOG_SNAP 1 // 크기 조정
|
|
#include <QDialog>
|
|
#include <QObject>
|
|
#include <QWidget>
|
|
class QScrollArea;
|
|
class QVBoxLayout;
|
|
class RMVideoItem;
|
|
#include <QStyledItemDelegate>
|
|
#include <QDateTime>
|
|
class FMThumbnailDelegate;
|
|
class QItemSelection;
|
|
class FMButton;
|
|
|
|
class QTableWidget;
|
|
#if (DETECT_USB_CHANGE)
|
|
class rm_usb;
|
|
#endif
|
|
|
|
class FMThumbnailDialog : public QDialog
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
#if (USE_DATE_FILTER)
|
|
FMThumbnailDialog(QWidget *parent, QString folder);
|
|
#else // USE_DATE_FILTER
|
|
FMThumbnailDialog(QWidget *parent, bool bAll);
|
|
#endif // USE_DATE_FILTER
|
|
enum MODE {
|
|
MODE_SIMPLE, // 심플 아이템 표시
|
|
MODE_SUB // 심플 아이템에 포함된 모든 영상
|
|
};
|
|
|
|
QString selectedFile;
|
|
|
|
protected:
|
|
bool _bFirst;
|
|
|
|
#if (DETECT_USB_CHANGE)
|
|
rm_usb* _usb; // 메인 윈도우의 참조
|
|
#endif // #if (DETECT_USB_CHANGE)
|
|
|
|
#if (USE_DATE_FILTER)
|
|
QString _folder;
|
|
static QStringList _files;
|
|
QList<RMVideoItem*> _items; // 멀티에서만 사용
|
|
#endif // #if (USE_DATE_FILTER)
|
|
#if (USE_1HOUR_FILTER)
|
|
QDateTime _selectedDateTime; ///!< 선택된 영상 시간
|
|
static QList<RMVideoItem*> _items; ///!< 시간 및 재생처리를 위해..
|
|
static QList<QPair<QString,QString>> _thumbnails; ///!< 로딩된 Thumbnail 경로
|
|
FMButton* _backButton; ///!< 세부->1시간으로 돌아가기 버튼
|
|
QLabel* _titleBar; ///!< 1시간 및 세부 리스트에서 표시되는 타이틀
|
|
#endif
|
|
|
|
QModelIndex _lastIndex; // 1시간 리스트에서 전체 리스트로 이동시
|
|
//QString windowTitle;
|
|
MODE _mode;
|
|
QTableWidget* _tableView;
|
|
FMThumbnailDelegate* _delegate;
|
|
|
|
void createLayout(MODE mode,RMVideoItem* selected = NULL);
|
|
void closeEvent(QCloseEvent *event);
|
|
void showEvent(QShowEvent * event);
|
|
#if (USE_DATE_FILTER)
|
|
void loadThumbnails(QString folder);
|
|
#else
|
|
void loadThumbnails();
|
|
#endif // #if (USE_DATE_FILTER)
|
|
public slots:
|
|
void onLoadThumbnails();
|
|
|
|
//void onThumbnailLoaded(RMVideoItem* item); // FMThumbnail* thumbnail,
|
|
//void onProcessFinished();
|
|
#if (USE_1HOUR_FILTER)
|
|
void onBack();
|
|
#endif // #if (USE_1HOUR_FILTER)
|
|
|
|
void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
|
|
|
|
friend class FMThumbnailDelegate;
|
|
void scrollTo();
|
|
void onThumbnailUpdated(int);
|
|
|
|
void onDoubleClickItem(int row, int column);
|
|
|
|
void onEnableClick(); ///! 더블클릭 방지용
|
|
|
|
#if (DETECT_USB_CHANGE)
|
|
void onUSBChange(bool inserted, QString& drive);
|
|
#endif // #if (DETECT_USB_CHANGE)
|
|
};
|
|
|
|
|
|
class thumbnail_cache : public QObject
|
|
{
|
|
Q_OBJECT
|
|
private:
|
|
thumbnail_cache(QObject* parent = nullptr);
|
|
QMap<QString,QPixmap> cache;
|
|
QPixmap _load(QString path, const QSize& wh);
|
|
QPixmap _dummy;
|
|
public:
|
|
const QPixmap thumbnail(const QString path,int index, const QSize& wh);
|
|
|
|
static thumbnail_cache* instance() {
|
|
static thumbnail_cache _instance;
|
|
return &_instance;
|
|
}
|
|
void clear() {
|
|
cache.clear();
|
|
}
|
|
|
|
signals:
|
|
void thumbnailLoaded(int index);
|
|
};
|
|
|
|
class FMThumbnailDelegate : public QStyledItemDelegate
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit FMThumbnailDelegate(QObject *parent = 0);
|
|
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
|
const QModelIndex &index) const;
|
|
private:
|
|
QPersistentModelIndex currentEditedCellIndex;
|
|
FMThumbnailDialog* _dialog;
|
|
public slots:
|
|
void entered(const QModelIndex &index);
|
|
};
|
|
|
|
// PROCESS 강제 종료하기 위해 사용
|
|
class FMThumbnailSignal : public QObject {
|
|
Q_OBJECT
|
|
private:
|
|
static FMThumbnailSignal* _instance;
|
|
public:
|
|
enum SIGNAL_MODE {
|
|
MODE_REJECT, // 종료(닫기, 취소)
|
|
MODE_ACCEPT, // 선택됨
|
|
MODE_RESTART // 다른 썸네일 로딩
|
|
};
|
|
static FMThumbnailSignal* instance()
|
|
{
|
|
if(_instance == NULL)
|
|
{
|
|
_instance = new FMThumbnailSignal();
|
|
}
|
|
return _instance;
|
|
}
|
|
SIGNAL_MODE mode;
|
|
FMThumbnailDialog::MODE restartMode;
|
|
RMVideoItem* restartItem;
|
|
|
|
signals:
|
|
void finished();
|
|
void thumnbnailsLoaded(RMVideoItem* item);
|
|
};
|
|
|
|
|
|
#endif // #if (RM_MODEL == RM_MODEL_TYPE_TB4000)
|
|
#endif // FM_THUMBNAIL_H
|