OSDN Git Service

ReadMe更新
[gefu/Gefu.git] / folderpanel.cpp
index 231f3cd..f9c3e7b 100644 (file)
@@ -30,11 +30,7 @@ QString FilesizeToString(quint64 size)
 \r
 FolderPanel::FolderPanel(QWidget *parent) :\r
     QWidget(parent),\r
-    ui(new Ui::FolderPanel),\r
-    m_dir(),\r
-    m_IconFactory(),\r
-    m_fsWatcher(new QFileSystemWatcher(this)),\r
-    m_bUpdating(false)\r
+    ui(new Ui::FolderPanel)\r
 {\r
     ui->setupUi(this);\r
     ui->fileTable->setModel(new FileTableModel(this));\r
@@ -45,11 +41,14 @@ FolderPanel::FolderPanel(QWidget *parent) :
     header->setSectionResizeMode(1, QHeaderView::Stretch);\r
     header->setSectionResizeMode(2, QHeaderView::ResizeToContents);\r
     header->setSectionResizeMode(3, QHeaderView::ResizeToContents);\r
+    header->setDefaultSectionSize(header->minimumSectionSize());\r
+\r
+    QHeaderView *vHeader = ui->fileTable->verticalHeader();\r
+    vHeader->setDefaultSectionSize(vHeader->defaultSectionSize() * 0.75);\r
 }\r
 \r
 FolderPanel::~FolderPanel()\r
 {\r
-    UninstallWatcher();\r
     delete ui;\r
 }\r
 \r
@@ -63,120 +62,6 @@ const QTableView *FolderPanel::fileTable() const
     return ui->fileTable;\r
 }\r
 \r
-void FolderPanel::setCurrentFolder(const QString &path)\r
-{\r
-    QSettings settings;\r
-\r
-    getMainWnd()->setStatusText(tr("ファイルリストを更新中..."));\r
-    QString curDir = m_dir.absolutePath();\r
-    m_dir.setPath(QDir::cleanPath(path));\r
-    m_dir.canonicalPath();\r
-\r
-    QFileInfoList list = m_dir.entryInfoList();\r
-\r
-    if (list.empty()) {\r
-        QMessageBox::critical(\r
-                    this,\r
-                    tr("エラー"),\r
-                    tr("フォルダが存在しないか利用できません。"));\r
-        m_dir.setPath(curDir);\r
-        ui->locationField->setText(curDir);\r
-        getMainWnd()->setStatusText(tr("レディ"));\r
-        return;\r
-    }\r
-\r
-    // フォルダの変更監視\r
-    InstallWatcher();\r
-\r
-    // QtはWindowsのシステムファイル属性をうまく判定できていないため、\r
-    // GetFileAttributes APIを使ってフィルタする\r
-    bool showSystem;\r
-    showSystem = settings.value(IniKey_ShowSystem, false).toBool();\r
-\r
-    beginUpdate();\r
-//    ui->fileTable->model()->removeRows(0, ui->fileTable->rowCount());\r
-//    for (int i = 0; i < list.size(); i++) {\r
-//        QFileInfo info = list.at(i);\r
-//        if (info.fileName() == ".." && m_dir.isRoot()) {\r
-//            continue;\r
-//        }\r
-\r
-//#ifdef Q_OS_WIN32\r
-//        DWORD dwFlags = ::GetFileAttributes(info.absoluteFilePath().toStdWString().c_str());\r
-//        if (!showSystem && dwFlags != DWORD(-1) && (dwFlags & FILE_ATTRIBUTE_SYSTEM)) {\r
-//            continue;\r
-//        }\r
-//#endif\r
-\r
-//        int row = ui->fileTable->rowCount();\r
-//        ui->fileTable->insertRow(row);\r
-\r
-//        // ファイル名とアイコン\r
-//        QTableWidgetItem *iName = new QTableWidgetItem(info.fileName());\r
-//        iName->setFlags(iName->flags() ^ Qt::ItemIsEditable);\r
-//        if (info.fileName() == "..") {\r
-//            iName->setIcon(QIcon(":/images/Up.png"));\r
-//        }\r
-//        else {\r
-//            iName->setIcon(m_IconFactory.icon(info));\r
-//        }\r
-//        ui->fileTable->setItem(row, 1, iName);\r
-\r
-//        // サイズ\r
-//        QString str;\r
-//        if (info.isDir()) {\r
-//            str = tr("<DIR>");\r
-//        }\r
-//        else {\r
-//            str = FilesizeToString(info.size());\r
-//        }\r
-//        QTableWidgetItem *iSize = new QTableWidgetItem(str);\r
-//        iSize->setFlags(iSize->flags() ^ Qt::ItemIsEditable);\r
-//        iSize->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);\r
-//        ui->fileTable->setItem(row, 2, iSize);\r
-\r
-//        // 最終更新日時\r
-//        QTableWidgetItem *iDateTime = new QTableWidgetItem(\r
-//                    info.lastModified().toString("yy/MM/dd hh:mm"));\r
-//        iDateTime->setFlags(iDateTime->flags() ^ Qt::ItemIsEditable);\r
-//        ui->fileTable->setItem(row, 3, iDateTime);\r
-\r
-//        // シグナル処理の関係で、チェックボックスは最後に追加する\r
-//        QTableWidgetItem *iCheck = new QTableWidgetItem(tr(""));\r
-//        iCheck->setFlags(iCheck->flags() ^ Qt::ItemIsEditable);\r
-//        if (info.fileName() != "..") {\r
-//            iCheck->setFlags(iCheck->flags() | Qt::ItemIsUserCheckable);\r
-//            iCheck->setCheckState(Qt::Unchecked);\r
-//        }\r
-//        ui->fileTable->setItem(row, 0, iCheck);\r
-\r
-//    }\r
-    ui->fileTable->selectRow(0);\r
-    ui->fileTable->resizeRowsToContents();\r
-\r
-    ui->locationField->setText(m_dir.absolutePath());\r
-    getMainWnd()->setStatusText(tr("レディ"));\r
-    endUpdate();\r
-}\r
-\r
-void FolderPanel::InstallWatcher()\r
-{\r
-    UninstallWatcher();\r
-\r
-    m_fsWatcher = new QFileSystemWatcher(this);\r
-    m_fsWatcher->addPath(m_dir.absolutePath());\r
-    connect(m_fsWatcher, SIGNAL(directoryChanged(QString)),\r
-            this, SLOT(on_directoryChanged(QString)));\r
-}\r
-\r
-void FolderPanel::UninstallWatcher()\r
-{\r
-    if (m_fsWatcher != NULL) {\r
-        delete m_fsWatcher;\r
-    }\r
-    m_fsWatcher = NULL;\r
-}\r
-\r
 const QString FolderPanel::side() const\r
 {\r
     return ui->fileTable->side();\r
@@ -192,6 +77,8 @@ void FolderPanel::setSide(const QString &side)
             ui->locationField, SLOT(setText(QString)));\r
     connect(model, SIGNAL(stateChanged(int,int,quint64)),\r
             this, SLOT(onStateChanged(int,int,quint64)));\r
+    connect(model, SIGNAL(listUpdated()),\r
+            ui->fileTable, SLOT(refresh()));\r
 \r
     //>>>>> フィルタ初期化\r
     model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
@@ -211,7 +98,7 @@ void FolderPanel::setSide(const QString &side)
     default:            model->setSorting(model->sorting() | QDir::Name); break;\r
     }\r
     // デフォルトだと文字列は昇順で、数値は降順…orz\r
-    int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByDesc).toInt();\r
+    int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByAsc).toInt();\r
     if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
         ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
     {\r
@@ -229,12 +116,40 @@ void FolderPanel::setSide(const QString &side)
     //>>>>> 監視フォルダ初期化\r
     QString key = side + slash + IniKey_Dir;\r
     QString path = settings.value(key, QDir::homePath()).toString();\r
-    model->setPath(path);\r
 \r
+    model->updateAppearance();\r
     ui->fileTable->setModel(model);\r
-    ui->fileTable->selectRow(0);\r
-    ui->fileTable->resizeColumnsToContents();\r
-    ui->fileTable->resizeRowsToContents();\r
+    ui->fileTable->setRootPath(path, true);\r
+}\r
+\r
+void FolderPanel::updateAppearance()\r
+{\r
+    QSettings settings;\r
+    QPalette palette;\r
+    QFont font;\r
+\r
+    font = ui->locationField->font();\r
+    font = settings.value(IniKey_BoxFont, font).value<QFont>();\r
+    palette = ui->locationField->palette();\r
+    palette.setColor(\r
+                QPalette::Base,\r
+                settings.value(IniKey_BoxColorBg, palette.base()).value<QColor>());\r
+    palette.setColor(\r
+                QPalette::Text,\r
+                settings.value(IniKey_BoxColorFg, palette.text()).value<QColor>());\r
+    ui->locationField->setFont(font);\r
+    ui->locationField->setPalette(palette);\r
+\r
+    palette = ui->fileTable->palette();\r
+    palette.setColor(\r
+                QPalette::Base,\r
+                settings.value(IniKey_ViewColorBgNormal, palette.base()).value<QColor>());\r
+    ui->fileTable->setPalette(palette);\r
+\r
+    FileTableModel *model = static_cast<FileTableModel*>(ui->fileTable->model());\r
+    if (model) {\r
+        model->updateAppearance();\r
+    }\r
 }\r
 \r
 void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)\r
@@ -260,29 +175,8 @@ void FolderPanel::on_locationField_editingFinished()
     ui->locationField->blockSignals(true);\r
 \r
     QString path = ui->locationField->text();\r
-    setCurrentFolder(path);\r
+    ui->fileTable->setRootPath(path, true);\r
 \r
     ui->locationField->blockSignals(false);\r
 }\r
 \r
-void FolderPanel::on_directoryChanged(QString)\r
-{\r
-//    int row = ui->fileTable->currentRow();\r
-//    this->setCurrentFolder(m_dir.absolutePath());\r
-//    if (row >= ui->fileTable->rowCount()) {\r
-//        row = ui->fileTable->rowCount() - 1;\r
-//    }\r
-//    ui->fileTable->selectRow(row);\r
-}\r
-\r
-//void FolderPanel::on_fileTable_itemSelectionChanged()\r
-//{\r
-//    if (isUpdating()) {\r
-//        return;\r
-//    }\r
-\r
-//    int row = ui->fileTable->currentRow();\r
-//    if (0 <= row && row < ui->fileTable->rowCount()) {\r
-//        getMainWnd()->setStatusText(ui->fileTable->item(row, 1)->text());\r
-//    }\r
-//}\r