OSDN Git Service

Ver0.10pre
[gefu/Gefu.git] / filetablemodel.cpp
index 9ff54ad..06d4424 100644 (file)
@@ -5,7 +5,7 @@
 #include <QDebug>\r
 #include <QApplication>\r
 #include <QSettings>\r
-#include <QMenuBar>\r
+#include <QPalette>\r
 #ifdef Q_OS_WIN32\r
     #include <windows.h>\r
 #endif\r
@@ -54,11 +54,8 @@ 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
-            if (it->fileName() == ".." && m_dir.isRoot()) {\r
-                it = m_fileInfoList.erase(it);\r
-                continue;\r
-            }\r
 #ifdef Q_OS_WIN32\r
             if (!(filter() & QDir::System)){\r
                 DWORD dwFlags = ::GetFileAttributes(\r
@@ -72,9 +69,33 @@ bool FileTableModel::setPath(const QString &path)
                 }\r
             }\r
 #endif\r
+            if (it->fileName() == "..") {\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
+            }\r
+        }\r
     }\r
+\r
     m_checkStates.resize(m_fileInfoList.size());\r
     m_checkStates.fill(Qt::Unchecked);\r
 \r
@@ -84,7 +105,7 @@ 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, SLOT(refresh()));\r
+            this, SIGNAL(listUpdated()));\r
 \r
     endResetModel();\r
 \r
@@ -128,38 +149,59 @@ void FileTableModel::setCheckStateAll(Qt::CheckState state)
     stateChanged();\r
 }\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
-    return m_dir.absoluteFilePath(m_fileInfoList[index.row()].fileName());\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
+        qDebug() << "fileInfo() : index is invalid.";\r
+        return QFileInfo();\r
+    }\r
     return m_fileInfoList[index.row()];\r
 }\r
 \r
-#define Brush(x, y, z)  QBrush((x).value((y), (z)).value<QColor>());\r
-\r
-\r
 void FileTableModel::updateAppearance()\r
 {\r
     QSettings settings;\r
     QPalette palette(QApplication::palette("QTableView"));\r
 \r
-    m_font = settings.value(IniKey_ViewFont, QApplication::font()).value<QFont>();\r
-    m_NormalBrush = Brush(settings, IniKey_ViewColorBgNormal, palette.base());\r
-    m_NormalTextBrush = Brush(settings, IniKey_ViewColorFgNormal, palette.text());\r
-    m_MarkBrush = Brush(settings, IniKey_ViewColorBgMark, DefaultMarkBgColor);\r
-    m_MarkTextBrush = Brush(settings, IniKey_ViewColorFgMark, DefaultMarkFgColor);\r
-    m_SystemBrush = Brush(settings, IniKey_ViewColorFgSystem, DefaultSystemColor);\r
-    m_HiddenBrush = Brush(settings, IniKey_ViewColorFgHidden, DefaultHiddenColor);\r
-    m_ReadonlyBrush = Brush(settings, IniKey_ViewColorFgReadonly, DefaultReadonlyColor);\r
+    m_font = settings.value(IniKey_ViewFont).value<QFont>();\r
+    m_NormalBrush = QBrush(settings.value(IniKey_ViewColorBgNormal).value<QColor>());\r
+    m_NormalTextBrush = QBrush(settings.value(IniKey_ViewColorFgNormal).value<QColor>());\r
+    m_MarkBrush = QBrush(settings.value(IniKey_ViewColorBgMark).value<QColor>());\r
+    m_MarkTextBrush = QBrush(settings.value(IniKey_ViewColorFgMark).value<QColor>());\r
+    m_SystemBrush = QBrush(settings.value(IniKey_ViewColorFgSystem).value<QColor>());\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
@@ -321,9 +363,14 @@ QVariant FileTableModel::headerData(int section, Qt::Orientation orientation, in
 Qt::ItemFlags FileTableModel::flags(const QModelIndex &index) const\r
 {\r
     Qt::ItemFlags flags = Qt::ItemIsEnabled | Qt::ItemIsSelectable;\r
-    if (index.column() == 0 && m_fileInfoList[index.row()].fileName() != "..")\r
-    {\r
-        flags |= Qt::ItemIsUserCheckable;\r
+    if (!index.isValid()) {\r
+        flags |= Qt::ItemIsDropEnabled;\r
+    }\r
+    else if (m_fileInfoList[index.row()].fileName() != "..") {\r
+        if (index.column() == 0) {\r
+            flags |= Qt::ItemIsUserCheckable;\r
+        }\r
+        flags |= Qt::ItemIsDropEnabled;\r
     }\r
     return flags;\r
 }\r
@@ -347,3 +394,17 @@ bool FileTableModel::setData(const QModelIndex &index, const QVariant &value, in
 \r
     return false;\r
 }\r
+\r
+Qt::DropActions FileTableModel::supportedDropActions() const\r
+{\r
+    return Qt::CopyAction | Qt::MoveAction;\r
+}\r
+\r
+QStringList FileTableModel::mimeTypes() const\r
+{\r
+    QStringList types;\r
+\r
+    types << "text/uri-list";\r
+\r
+    return types;\r
+}\r