1 #include "mainwindow.h"
2 #include "thumbnaildelegate.h"
3 #include "thumbnailview.h"
5 #include <QApplication>
11 ///////////////////////////////////////////////////////////////////////////////
12 /// \brief ThumbnailView::ThumbnailView
13 /// \param parent 親ウィジェット
17 ThumbnailView::ThumbnailView(QWidget *parent) :
20 setItemDelegate(new ThumbnailDelegate(this));
24 setDropIndicatorShown(true);
25 setContextMenuPolicy(Qt::DefaultContextMenu);
28 ///////////////////////////////////////////////////////////////////////////////
29 /// \brief ThumbnailView::initialize
30 /// \param w メインウィンドウオブジェクト
34 void ThumbnailView::initialize(MainWindow *w)
36 qDebug() << "ThumbnailView::initialize()";
38 connect(this, SIGNAL(doubleClicked(QModelIndex)), w, SLOT(onOpen(QModelIndex)));
39 connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
40 w, SLOT(view_currentChanged(QModelIndex,QModelIndex)));
42 installEventFilter(w);
43 viewport()->installEventFilter(w);
45 ///////////////////////////////////////////////////////////////////////////////
46 /// \brief ThumbnailView::selectedItems
49 QFileInfoList ThumbnailView::selectedItems() const
51 QFileInfoList list = folderModel()->markedItems();
53 list << folderModel()->fileInfo(currentIndex());
59 ///////////////////////////////////////////////////////////////////////////////
60 /// \brief ThumbnailView::model_PreReset
64 void ThumbnailView::model_PreReset()
66 qDebug() << "ThumbnailView::model_PreReset()";
69 if (model() && currentIndex().isValid()) {
70 m_saveRow = currentIndex().row();
71 m_saveName = folderModel()->fileName(currentIndex());
72 m_savePath = folderModel()->rootPath();
76 m_saveName = QString::null;
77 m_savePath = QString::null;
81 ///////////////////////////////////////////////////////////////////////////////
82 /// \brief ThumbnailView::model_PostReset
86 void ThumbnailView::model_PostReset()
88 qDebug() << "ThumbnailView::model_PostReset()";
90 // フォルダが変わった場合は先頭行を選択する
91 if (m_savePath != folderModel()->rootPath()) {
92 setCurrentIndex(model()->index(0, 0));
96 // 保存した名前と同名アイテムが見つかれば、再選択する
97 for (int row = 0; row < model()->rowCount(); row++) {
98 QModelIndex index = model()->index(row, 0);
99 if (folderModel()->fileName(index) == m_saveName) {
100 setCurrentIndex(index);
105 // 同名アイテムが見つからなければ、行を維持する
106 if (m_saveRow >= model()->rowCount()) {
107 m_saveRow = model()->rowCount() - 1;
109 setCurrentIndex(model()->index(m_saveRow, 1));
113 void ThumbnailView::scaleDown()
115 qDebug() << "ThumbnailView::scaleDown()";
117 static_cast<ThumbnailDelegate*>(itemDelegate())->scaleDown();
118 folderModel()->clearPixmapCache();
121 void ThumbnailView::scaleUp()
123 qDebug() << "ThumbnailView::scaleUp()";
125 static_cast<ThumbnailDelegate*>(itemDelegate())->scaleUp();
126 folderModel()->clearPixmapCache();
129 void ThumbnailView::setModel(QAbstractItemModel *model)
132 this->model()->disconnect(this);
135 QListView::setModel(model);
138 connect(this->model(), SIGNAL(modelAboutToBeReset()), this, SLOT(model_PreReset()));
139 connect(this->model(), SIGNAL(modelReset()), this, SLOT(model_PostReset()));
144 void ThumbnailView::mousePressEvent(QMouseEvent *event)
146 m_dragStartPos = QPoint();
147 if ((event->buttons() & Qt::LeftButton) ||
148 (event->buttons() & Qt::RightButton))
150 QModelIndex index = indexAt(event->pos());
151 if (index.isValid() && folderModel()->fileName(index) != "..") {
152 m_dragStartPos = event->pos();
156 QListView::mousePressEvent(event);
159 void ThumbnailView::mouseMoveEvent(QMouseEvent *event)
161 if (!(event->buttons() & Qt::LeftButton) &&
162 !(event->buttons() & Qt::RightButton))
164 QListView::mouseMoveEvent(event);
167 if (m_dragStartPos.isNull() ||
168 (event->pos() - m_dragStartPos).manhattanLength() < qApp->startDragDistance())
170 QListView::mouseMoveEvent(event);
174 QFileInfoList list = selectedItems();
175 if (list.size() == 1 && list[0].fileName() == "..") {
176 QListView::mouseMoveEvent(event);
181 foreach (const QFileInfo &info, list) {
182 urls << QUrl::fromLocalFile(info.absoluteFilePath());
185 QDrag *drag = new QDrag(this);
186 QMimeData *mimeData = new QMimeData;
187 mimeData->setUrls(urls);
188 drag->setMimeData(mimeData);
191 drag->exec(Qt::CopyAction);
193 m_dragStartPos = QPoint();
197 void ThumbnailView::dragEnterEvent(QDragEnterEvent *event)
199 if (event->mimeData()->hasUrls()) {
200 event->acceptProposedAction();
204 QListView::dragEnterEvent(event);
207 void ThumbnailView::setVisible(bool visible)
210 static_cast<ThumbnailDelegate*>(itemDelegate())->resetScale();
211 folderModel()->clearPixmapCache();
214 QListView::setVisible(visible);