m_HiddenBrush(),\r
m_ReadonlyBrush()\r
{\r
+ // デフォルトフィルタを設定する\r
+ setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
}\r
\r
bool FileTableModel::setPath(const QString &path)\r
}\r
else {\r
QFileInfoList::iterator it;\r
- bool removeDotDot = false;\r
for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); ) {\r
#ifdef Q_OS_WIN32\r
if (!(filter() & QDir::System)){\r
if (m_dir.isRoot()) {\r
qDebug() << m_dir.absolutePath() << " is root.";\r
it = m_fileInfoList.erase(it);\r
- removeDotDot = true;\r
continue;\r
}\r
}\r
it++;\r
}\r
// ソート方法によらず、".."は必ず先頭にする\r
- if (!removeDotDot) {\r
- QFileInfoList::iterator itRoot = m_fileInfoList.end();\r
- for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); it++) {\r
- if (it->fileName() == "..") {\r
- itRoot = it;\r
- break;\r
- }\r
- }\r
- if (itRoot != m_fileInfoList.end()) {\r
- QFileInfo info(*itRoot);\r
- m_fileInfoList.erase(itRoot);\r
- m_fileInfoList.push_front(info);\r
+ QFileInfoList::iterator itRoot = m_fileInfoList.end();\r
+ for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); it++) {\r
+ if (it->fileName() == "..") {\r
+ itRoot = it;\r
+ break;\r
}\r
}\r
+ if (itRoot != m_fileInfoList.end()) {\r
+ QFileInfo info(*itRoot);\r
+ m_fileInfoList.erase(itRoot);\r
+ m_fileInfoList.push_front(info);\r
+ }\r
}\r
\r
m_checkStates.resize(m_fileInfoList.size());\r
m_fsWatcher = new QFileSystemWatcher(this);\r
m_fsWatcher->addPath(path);\r
connect(m_fsWatcher, SIGNAL(directoryChanged(QString)),\r
- this, SIGNAL(listUpdated()));\r
+ this, SLOT(directoryChange(QString)));\r
\r
endResetModel();\r
\r
- emit rootChanged(m_dir.absolutePath());\r
- stateChanged();\r
-\r
+ emit dataChanged(QModelIndex(), QModelIndex());\r
return !m_fileInfoList.isEmpty();\r
}\r
\r
}\r
endResetModel();;\r
emit dataChanged(index, this->index(index.row(), 3));\r
-\r
- stateChanged();\r
}\r
\r
void FileTableModel::setCheckStateAll(Qt::CheckState state)\r
m_checkStates[0] = Qt::Unchecked;\r
}\r
endResetModel();\r
-\r
- stateChanged();\r
-}\r
-\r
-#if 0\r
-bool FileTableModel::isDir(const QModelIndex &index) const\r
-{\r
- if (!index.isValid()) {\r
- qDebug() << "isDir() : index is invalid.";\r
- return QString();\r
- }\r
- return m_fileInfoList[index.row()].isDir();\r
+ emit dataChanged(QModelIndex(), QModelIndex());\r
}\r
\r
-const QString FileTableModel::absoluteFilePath(const QModelIndex &index) const\r
-{\r
- if (!index.isValid()) {\r
- qDebug() << "absoluteFilePath() : index is invalid.";\r
- return QString();\r
- }\r
-// return m_dir.absoluteFilePath(m_fileInfoList[index.row()].fileName());\r
- return m_fileInfoList[index.row()].absoluteFilePath();\r
-}\r
-\r
-const QString FileTableModel::fileName(const QModelIndex &index) const\r
-{\r
- if (!index.isValid()) {\r
- qDebug() << "fileName() : index is invalid.";\r
- return QString();\r
- }\r
- return m_fileInfoList[index.row()].fileName();\r
-}\r
-#endif\r
-\r
QFileInfo FileTableModel::fileInfo(const QModelIndex &index) const\r
{\r
if (!index.isValid()) {\r
m_HiddenBrush = QBrush(settings.value(IniKey_ViewColorFgHidden).value<QColor>());\r
m_ReadonlyBrush = QBrush(settings.value(IniKey_ViewColorFgReadonly).value<QColor>());\r
m_ReadonlyBrush = QBrush(settings.value(IniKey_ViewColorFgReadonly).value<QColor>());\r
-\r
- beginResetModel();\r
- endResetModel();\r
}\r
\r
-void FileTableModel::stateChanged()\r
+void FileTableModel::directoryChange(const QString &path)\r
{\r
- int numFolder = 0;\r
- int numFile = 0;\r
- quint64 totalSize = 0;\r
- for (int n = 0; n < m_checkStates.size(); n++) {\r
- if (m_checkStates[n] == Qt::Checked) {\r
- if (m_fileInfoList[n].isDir()) {\r
- numFolder++;\r
- }\r
- else {\r
- numFile++;\r
- totalSize += m_fileInfoList[n].size();\r
- }\r
- }\r
- }\r
+ qDebug() << "FileTableModel::directoryChange";\r
\r
- emit stateChanged(numFolder, numFile, totalSize);\r
+ setPath(path);\r
}\r
\r
QFileInfoList FileTableModel::checkedItems() const\r
int FileTableModel::columnCount(const QModelIndex &parent) const\r
{\r
Q_UNUSED(parent);\r
- return 4;\r
+ return 5;\r
}\r
\r
QVariant FileTableModel::data(const QModelIndex &index, int role) const\r
case 0: // チェックボックス\r
return QString("");\r
case 1: // ファイル名\r
- return info.fileName();\r
- case 2: // サイズ\r
+ if (info.isDir()) {\r
+ return info.fileName();\r
+ }\r
+ if (info.fileName().left(1) == ".") { // "."で始まるファイル\r
+ int pos = info.fileName().lastIndexOf(".");\r
+ if (pos == 0) {\r
+ return info.fileName();\r
+ }\r
+ }\r
+ return info.completeBaseName();\r
+\r
+ case 2: // 拡張子\r
+ if (info.isDir()) {\r
+ return QString();\r
+ }\r
+ if (info.fileName().left(1) == ".") { // "."で始まるファイル\r
+ int pos = info.fileName().lastIndexOf(".");\r
+ if (pos == 0) {\r
+ return QString();\r
+ }\r
+ }\r
+ return info.suffix();\r
+\r
+ case 3: // サイズ\r
if (info.isDir()) {\r
return QString("<DIR>");\r
}\r
return FilesizeToString(info.size());\r
}\r
break;\r
- case 3:\r
+\r
+ case 4: // 更新日時\r
return info.lastModified().toString("yy/MM/dd hh:mm");\r
}\r
break;\r
\r
case Qt::TextAlignmentRole:\r
switch (index.column()) {\r
- case 0:\r
- case 1:\r
- return Qt::AlignLeft + Qt::AlignVCenter;\r
- case 2:\r
case 3:\r
+ case 4:\r
return Qt::AlignRight + Qt::AlignVCenter;\r
+ default:\r
+ return Qt::AlignLeft + Qt::AlignVCenter;\r
}\r
break;\r
\r
switch (section) {\r
case 0: return QString("");\r
case 1: return tr("名前");\r
- case 2: return tr("サイズ");\r
- case 3: return tr("更新日時");\r
+ case 2: return tr("拡張子");\r
+ case 3: return tr("サイズ");\r
+ case 4: return tr("更新日時");\r
}\r
}\r
}\r
if (index.column() == 0) {\r
m_checkStates[index.row()] = static_cast<Qt::CheckState>(value.toInt());\r
emit dataChanged(index, this->index(index.row(), 3));\r
- stateChanged();\r
return true;\r
}\r
break;\r