first commit
This commit is contained in:
170
project/fm_viewer/ui/fm_thumbnail_dialog.h
Normal file
170
project/fm_viewer/ui/fm_thumbnail_dialog.h
Normal file
@@ -0,0 +1,170 @@
|
||||
#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
|
||||
Reference in New Issue
Block a user