/// コンストラクタ
///
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);
}
///////////////////////////////////////////////////////////////////////////////
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();
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)