OSDN Git Service

Ver0.11
[gefu/Gefu.git] / filetablemodel.cpp
index 06d4424..4b89099 100644 (file)
@@ -26,6 +26,8 @@ FileTableModel::FileTableModel(QObject *parent) :
     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
@@ -54,7 +56,6 @@ bool FileTableModel::setPath(const QString &path)
     }\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
@@ -73,27 +74,24 @@ bool FileTableModel::setPath(const QString &path)
                 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
@@ -105,13 +103,14 @@ bool FileTableModel::setPath(const QString &path)
     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
+//    emit rootChanged(m_dir.absolutePath());\r
+//    stateChanged();\r
 \r
+    emit dataChanged(QModelIndex(), QModelIndex());\r
     return !m_fileInfoList.isEmpty();\r
 }\r
 \r
@@ -132,7 +131,7 @@ void FileTableModel::setCheckState(const QModelIndex &index, Qt::CheckState stat
     endResetModel();;\r
     emit dataChanged(index, this->index(index.row(), 3));\r
 \r
-    stateChanged();\r
+//    stateChanged();\r
 }\r
 \r
 void FileTableModel::setCheckStateAll(Qt::CheckState state)\r
@@ -145,40 +144,11 @@ void FileTableModel::setCheckStateAll(Qt::CheckState state)
         m_checkStates[0] = Qt::Unchecked;\r
     }\r
     endResetModel();\r
+    emit dataChanged(QModelIndex(), QModelIndex());\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
-}\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
+//    stateChanged();\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
@@ -207,26 +177,33 @@ void FileTableModel::updateAppearance()
     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
+//void FileTableModel::stateChanged()\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
+\r
+//    emit selectionChanged(numFolder, numFile, totalSize);\r
+//}\r
+\r
 QFileInfoList FileTableModel::checkedItems() const\r
 {\r
     QFileInfoList list;\r
@@ -386,7 +363,7 @@ bool FileTableModel::setData(const QModelIndex &index, const QVariant &value, in
         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
+//            stateChanged();\r
             return true;\r
         }\r
         break;\r