1 #include "mainwindow.h"
2 #include "preferences.h"
3 #include "folderpanel.h"
4 #include "folderview.h"
6 #include <QApplication>
10 #include <QMouseEvent>
13 ///////////////////////////////////////////////////////////////////////////////
14 /// \brief FolderView::FolderView
15 /// \param parent 親ウィジェット
19 FolderView::FolderView(QWidget *parent) :
30 setDropIndicatorShown(true);
31 setContextMenuPolicy(Qt::DefaultContextMenu);
34 ///////////////////////////////////////////////////////////////////////////////
35 /// \brief FolderView::initialize
36 /// \param w メインウィンドウオブジェクト
40 void FolderView::initialize(MainWindow *w)
42 qDebug() << "FolderView::initialize()";
44 connect(this, SIGNAL(doubleClicked(QModelIndex)), w, SLOT(onOpen(QModelIndex)));
45 // connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)),
46 // w, SLOT(view_currentChanged(QModelIndex,QModelIndex)));
48 installEventFilter(w);
49 viewport()->installEventFilter(w);
52 ///////////////////////////////////////////////////////////////////////////////
53 /// \brief FolderView::selectedItems
56 QFileInfoList FolderView::selectedItems() const
58 QFileInfoList list = folderModel()->markedItems();
60 list << folderModel()->fileInfo(currentIndex());
66 ///////////////////////////////////////////////////////////////////////////////
67 /// \brief FolderView::model_PreReset
71 void FolderView::model_PreReset()
73 qDebug() << "FolderView::model_PreReset()";
76 if (model() && currentIndex().isValid()) {
77 m_saveRow = currentIndex().row();
78 m_saveName = folderModel()->fileName(currentIndex());
79 m_savePath = folderModel()->rootPath();
83 m_saveName = QString::null;
84 m_savePath = QString::null;
88 ///////////////////////////////////////////////////////////////////////////////
89 /// \brief FolderView::model_PostReset
93 void FolderView::model_PostReset()
95 qDebug() << "FolderView::model_PostReset()";
97 // フォルダが変わった場合は先頭行を選択する
98 if (m_savePath != folderModel()->rootPath()) {
99 setCurrentIndex(model()->index(0, 0));
103 // 保存した名前と同名アイテムが見つかれば、再選択する
104 for (int row = 0; row < model()->rowCount(); row++) {
105 QModelIndex index = model()->index(row, 0);
106 if (folderModel()->fileName(index) == m_saveName) {
107 setCurrentIndex(index);
112 // 同名アイテムが見つからなければ、行を維持する
113 if (m_saveRow >= model()->rowCount()) {
114 m_saveRow = model()->rowCount() - 1;
116 setCurrentIndex(model()->index(m_saveRow, 1));
119 ///////////////////////////////////////////////////////////////////////////////
120 /// \brief FolderView::mousePressEvent
123 void FolderView::mousePressEvent(QMouseEvent *event)
125 m_dragStartPos = QPoint();
126 if ((event->buttons() & Qt::LeftButton) ||
127 (event->buttons() & Qt::RightButton))
129 QModelIndex index = indexAt(event->pos());
130 if (index.isValid() && folderModel()->fileName(index) != "..") {
131 m_dragStartPos = event->pos();
135 QTableView::mousePressEvent(event);
138 ///////////////////////////////////////////////////////////////////////////////
139 /// \brief FolderView::mouseMoveEvent
142 void FolderView::mouseMoveEvent(QMouseEvent *event)
144 if (!(event->buttons() & Qt::LeftButton) &&
145 !(event->buttons() & Qt::RightButton))
147 QTableView::mouseMoveEvent(event);
150 if (m_dragStartPos.isNull() ||
151 (event->pos() - m_dragStartPos).manhattanLength() < qApp->startDragDistance())
153 QTableView::mouseMoveEvent(event);
157 QFileInfoList list = selectedItems();
158 if (list.size() == 1 && list[0].fileName() == "..") {
159 QTableView::mouseMoveEvent(event);
164 foreach (const QFileInfo &info, list) {
165 urls << QUrl::fromLocalFile(info.absoluteFilePath());
168 QDrag *drag = new QDrag(this);
169 QMimeData *mimeData = new QMimeData;
170 mimeData->setUrls(urls);
171 drag->setMimeData(mimeData);
174 drag->exec(Qt::CopyAction);
176 m_dragStartPos = QPoint();
179 void FolderView::dragEnterEvent(QDragEnterEvent *event)
181 qDebug() << "FolderView::dragEnterEvent()";
183 if (event->mimeData()->hasUrls()) {
184 event->acceptProposedAction();
188 QTableView::dragEnterEvent(event);
191 void FolderView::setModel(QAbstractItemModel *model)
194 this->model()->disconnect(this);
197 QTableView::setModel(model);
200 connect(this->model(), SIGNAL(modelAboutToBeReset()), this, SLOT(model_PreReset()));
201 connect(this->model(), SIGNAL(modelReset()), this, SLOT(model_PostReset()));
204 horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
205 horizontalHeader()->setSectionResizeMode(FolderModel::Name,
206 QHeaderView::Stretch);
210 void FolderView::scaleUp()
212 Preferences prefs(this);
213 QFont font = prefs.getFolderViewFont();
214 font.setPointSize(font.pointSize() + 1);
215 prefs.setFolderViewFont(font);
218 void FolderView::scaleDown()
220 Preferences prefs(this);
221 QFont font = prefs.getFolderViewFont();
222 font.setPointSize(font.pointSize() - 1);
223 prefs.setFolderViewFont(font);