#include "common.h"
#include "mainwindow.h"
#include "folderpanel.h"
-#include "locationbox.h"
#include "folderview.h"
#include <QDebug>
{
setModel(&m_model);
connect(&m_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(dataChanged(QModelIndex,QModelIndex)));
+ connect(&m_model, SIGNAL(preReload()), this, SLOT(preReload()));
+ connect(&m_model, SIGNAL(postReload()), this, SLOT(postReload()));
setDragEnabled(true);
setAcceptDrops(true);
}
}
-void FolderView::initialize(MainWindow *mainWnd, bool left)
+void FolderView::initialize(MainWindow *mainWnd)
{
qDebug() << side() << "initialize";
// 前回終了時のパスを開く
QSettings settings;
setPath(settings.value(side() + slash + IniKey_Dir).toString(), true);
-
- // 色とフォントを設定する
- updateAppearance(!left);
-
- // 列のリサイズモードを設定する
- QHeaderView *header;
- header = horizontalHeader();
- header->setSectionResizeMode(0, QHeaderView::Fixed);
- header->setSectionResizeMode(1, QHeaderView::Stretch);
- header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(4, QHeaderView::ResizeToContents);
}
-void FolderView::updateAppearance(bool darker)
+void FolderView::refresh()
{
- qDebug() << side() << "updateAppearance";
- m_model.updateAppearance(darker);
-
- QSettings settings;
- QPalette pal = palette();
- int darkness = 100;
- if (darker) {
- darkness += settings.value(IniKey_Darkness).toInt();
- }
- pal.setColor(QPalette::Base, settings.value(IniKey_ViewColorBgNormal).value<QColor>().darker(darkness));
- setPalette(pal);
+ qDebug() << side() << "refresh";
- // 行の高さを設定する
- QHeaderView *header = verticalHeader();
- header->setDefaultSectionSize(QFontMetrics(m_model.font()).height() * 1.5);
+ preReload();
- // 列の幅を設定する
- header = horizontalHeader();
- header->setSectionResizeMode(0, QHeaderView::Fixed);
- header->setSectionResizeMode(1, QHeaderView::Stretch);
- header->setSectionResizeMode(2, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(3, QHeaderView::ResizeToContents);
- header->setSectionResizeMode(4, QHeaderView::ResizeToContents);
+ setPath(m_model.absolutePath(), false);
- repaint();
+ postReload();
}
-void FolderView::refresh()
+void FolderView::preReload()
{
- qDebug() << side() << "refresh";
-
- int row = currentIndex().row();
-
- setPath(m_model.absolutePath(), false);
+ // 現在行と名前を保存しておく
+ m_saveRow = currentIndex().row();
+ m_saveName = currentItem().fileName();
+}
- if (row < 0) {
- row = 0;
+void FolderView::postReload()
+{
+ // 保存した名前と同名アイテムが見つかれば、再選択する
+ for (int row = 0; row < m_model.rowCount(); row++) {
+ QModelIndex index = m_model.index(row, 1);
+ if (m_model.fileInfo(index).fileName().indexOf(m_saveName) != -1) {
+ setCurrentIndex(index);
+ return;
+ }
}
- else if (row >= m_model.rowCount()) {
- row = m_model.rowCount() - 1;
+
+ // 同名アイテムが見つからなければ、行を維持する
+ if (m_saveRow >= m_model.rowCount()) {
+ m_saveRow = m_model.rowCount() - 1;
}
- setCurrentIndex(m_model.index(row, 1));
-// selectRow(row);
+ setCurrentIndex(m_model.index(m_saveRow, 1));
}
void FolderView::searchItem(const QString &text)
QModelIndex current = currentIndex();
- setUpdatesEnabled(false);
for (int n = 0; n < m_model.rowCount(); n++) {
m_model.setData(m_model.index(n, 0), state, Qt::CheckStateRole);
}
- setUpdatesEnabled(true);
setCurrentIndex(current);
}
QModelIndex current = currentIndex();
- setUpdatesEnabled(false);
for (int n = 0; n < m_model.rowCount(); n++) {
QModelIndex index = m_model.index(n, 0);
QFileInfo info = m_model.fileInfo(index);
m_model.setData(index, Qt::Checked, Qt::CheckStateRole);
}
}
- setUpdatesEnabled(true);
setCurrentIndex(current);
}
QModelIndex current = currentIndex();
- setUpdatesEnabled(false);
for (int n = 0; n < m_model.rowCount(); n++) {
QModelIndex index = m_model.index(n, 0);
if (m_model.data(index, Qt::CheckStateRole).toInt() == Qt::Checked) {
m_model.setData(index, Qt::Checked, Qt::CheckStateRole);
}
}
- setUpdatesEnabled(true);
setCurrentIndex(current);
}
return list;
}
+FolderPanel *FolderView::parentPanel() const
+{
+ return qobject_cast<FolderPanel*>(parentWidget());
+}
+
void FolderView::setPath(const QString &path, bool addHistory)
{
qDebug() << side() << "setPath" << path << addHistory;
m_mainWnd->statusBar()->showMessage(tr("ファイルリストを取得しています..."));
emit retrieveStarted(path);
- setUpdatesEnabled(false);
m_model.setPath(path);
setCurrentIndex(m_model.index(0, 1));
- setUpdatesEnabled(true);
if (addHistory) {
m_history.add(path);
event->acceptProposedAction();
- emit dropAccepted(list);
+ emit dropAccepted(list, event);
}
emit requestContextMenu(event);
}
-
-
-void FolderView::focusInEvent(QFocusEvent *event)
-{
- if (!currentIndex().isValid()) {
- setCurrentIndex(m_model.index(0, 1));
- }
-
- this->updateAppearance();
-
- FolderPanel *fp = qobject_cast<FolderPanel*>(parentWidget());
- fp->locationBox()->updateAppearance();
-
- QTableView::focusInEvent(event);
-}
-
-void FolderView::focusOutEvent(QFocusEvent *event)
-{
- m_model.updateAppearance(true);
-
- this->updateAppearance(true);
-
- FolderPanel *fp = qobject_cast<FolderPanel*>(parentWidget());
- fp->locationBox()->updateAppearance(true);
-
- QTableView::focusOutEvent(event);
-}