OSDN Git Service

バイナリビューアを実装、他ビューアも自分描画に変更
[gefu/Gefu.git] / thumbnailview.cpp
index 172ab10..f5d5ada 100644 (file)
 /// コンストラクタ
 ///
 ThumbnailView::ThumbnailView(QWidget *parent) :
-    QListView(parent)
+    QListView(parent),
+    m_p(this)
 {
     setItemDelegate(new ThumbnailDelegate(this));
     setSpacing(12);
-    setDragEnabled(true);
-    setAcceptDrops(true);
-    setDropIndicatorShown(true);
-    setContextMenuPolicy(Qt::DefaultContextMenu);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -36,89 +33,25 @@ void ThumbnailView::initialize(MainWindow *w)
     qDebug() << "ThumbnailView::initialize()";
 
     connect(this, SIGNAL(doubleClicked(QModelIndex)), w, SLOT(onOpen(QModelIndex)));
+    connect(&m_p, SIGNAL(copyItems(QStringList,QString)), w, SLOT(copyItems(QStringList,QString)));
+    connect(&m_p, SIGNAL(moveItems(QStringList,QString)), w, SLOT(moveItems(QStringList,QString)));
 
     installEventFilter(w);
+    viewport()->installEventFilter(&m_p);
     viewport()->installEventFilter(w);
 }
-///////////////////////////////////////////////////////////////////////////////
-/// \brief ThumbnailView::selectedItems
-/// \return
-///
-QFileInfoList ThumbnailView::selectedItems() const
-{
-    QFileInfoList list = folderModel()->markedItems();
-    if (list.isEmpty()) {
-        list << folderModel()->fileInfo(currentIndex());
-    }
-
-    return list;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-/// \brief ThumbnailView::model_PreReset
-///
-/// モデルリセット前の処理
-///
-void ThumbnailView::model_PreReset()
-{
-    qDebug() << "ThumbnailView::model_PreReset()";
-
-    // 現在行と名前を保存しておく
-    if (model() && currentIndex().isValid()) {
-        m_saveRow = currentIndex().row();
-        m_saveName = folderModel()->fileName(currentIndex());
-        m_savePath = folderModel()->rootPath();
-    }
-    else {
-        m_saveRow = 0;
-        m_saveName = QString::null;
-        m_savePath = QString::null;
-    }
-}
 
-///////////////////////////////////////////////////////////////////////////////
-/// \brief ThumbnailView::model_PostReset
-///
-/// モデルリセット後の処理
-///
-void ThumbnailView::model_PostReset()
+void ThumbnailView::onScaleDown()
 {
-    qDebug() << "ThumbnailView::model_PostReset()";
-
-    // フォルダが変わった場合は先頭行を選択する
-    if (m_savePath != folderModel()->rootPath()) {
-        setCurrentIndex(model()->index(0, 0));
-        return;
-    }
-
-    // 保存した名前と同名アイテムが見つかれば、再選択する
-    for (int row = 0; row < model()->rowCount(); row++) {
-        QModelIndex index = model()->index(row, 0);
-        if (folderModel()->fileName(index) == m_saveName) {
-            setCurrentIndex(index);
-            return;
-        }
-    }
-
-    // 同名アイテムが見つからなければ、行を維持する
-    if (m_saveRow >= model()->rowCount()) {
-        m_saveRow = model()->rowCount() - 1;
-    }
-    setCurrentIndex(model()->index(m_saveRow, 1));
-
-}
-
-void ThumbnailView::scaleDown()
-{
-    qDebug() << "ThumbnailView::scaleDown()";
+    qDebug() << "ThumbnailView::onScaleDown()";
 
     static_cast<ThumbnailDelegate*>(itemDelegate())->scaleDown();
     folderModel()->clearPixmapCache();
 }
 
-void ThumbnailView::scaleUp()
+void ThumbnailView::onScaleUp()
 {
-    qDebug() << "ThumbnailView::scaleUp()";
+    qDebug() << "ThumbnailView::onScaleUp()";
 
     static_cast<ThumbnailDelegate*>(itemDelegate())->scaleUp();
     folderModel()->clearPixmapCache();
@@ -133,73 +66,9 @@ void ThumbnailView::setModel(QAbstractItemModel *model)
     QListView::setModel(model);
 
     if (this->model()) {
-        connect(this->model(), SIGNAL(modelAboutToBeReset()), this, SLOT(model_PreReset()));
-        connect(this->model(), SIGNAL(modelReset()), this, SLOT(model_PostReset()));
-    }
-}
-
-
-void ThumbnailView::mousePressEvent(QMouseEvent *event)
-{
-    m_dragStartPos = QPoint();
-    if ((event->buttons() & Qt::LeftButton) ||
-        (event->buttons() & Qt::RightButton))
-    {
-        QModelIndex index = indexAt(event->pos());
-        if (index.isValid() && folderModel()->fileName(index) != "..") {
-            m_dragStartPos = event->pos();
-        }
-    }
-
-    QListView::mousePressEvent(event);
-}
-
-void ThumbnailView::mouseMoveEvent(QMouseEvent *event)
-{
-    if (!(event->buttons() & Qt::LeftButton) &&
-        !(event->buttons() & Qt::RightButton))
-    {
-        QListView::mouseMoveEvent(event);
-        return;
-    }
-    if (m_dragStartPos.isNull() ||
-        (event->pos() - m_dragStartPos).manhattanLength() < qApp->startDragDistance())
-    {
-        QListView::mouseMoveEvent(event);
-        return;
+        connect(this->model(), SIGNAL(modelAboutToBeReset()), &m_p, SLOT(model_PreReset()));
+        connect(this->model(), SIGNAL(modelReset()), &m_p, SLOT(model_PostReset()));
     }
-
-    QFileInfoList list = selectedItems();
-    if (list.size() == 1 && list[0].fileName() == "..") {
-        QListView::mouseMoveEvent(event);
-        return;
-    }
-
-    QList<QUrl> urls;
-    foreach (const QFileInfo &info, list) {
-        urls << QUrl::fromLocalFile(info.absoluteFilePath());
-    }
-
-    QDrag *drag = new QDrag(this);
-    QMimeData *mimeData = new QMimeData;
-    mimeData->setUrls(urls);
-    drag->setMimeData(mimeData);
-
-    m_dragging = true;
-    drag->exec(Qt::CopyAction);
-    m_dragging = false;
-    m_dragStartPos = QPoint();
-
-}
-
-void ThumbnailView::dragEnterEvent(QDragEnterEvent *event)
-{
-    if (event->mimeData()->hasUrls()) {
-        event->acceptProposedAction();
-        return;
-    }
-
-    QListView::dragEnterEvent(event);
 }
 
 void ThumbnailView::setVisible(bool visible)