-#include "folderpanel.h"\r
-#include "mainwindow.h"\r
-#include "ui_folderpanel.h"\r
-#include <QCheckBox>\r
-#include <QMessageBox>\r
-#include <QKeyEvent>\r
-#include <QDebug>\r
-#include <QDateTime>\r
-#include <QDesktopServices>\r
-\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
-{\r
- ui->setupUi(this);\r
-\r
- // MainWindowのスロットに接続する\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- connect(ui->fileTable, SIGNAL(cellDoubleClicked(int,int)), mainWnd, SLOT(onActionOpen()));\r
- }\r
-\r
- // ヘッダーラベルを設定する\r
- QStringList labels;\r
- labels << tr("") << tr("名前") << tr("サイズ") << tr("更新日時");\r
- ui->fileTable->setHorizontalHeaderLabels(labels);\r
-\r
- // イベントフィルタを設定する\r
- ui->fileTable->installEventFilter(this);\r
-\r
- // リサイズ時の動作を設定する\r
- ui->fileTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents);\r
- ui->fileTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);\r
- ui->fileTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeToContents);\r
- ui->fileTable->horizontalHeader()->setSectionResizeMode(3, QHeaderView::ResizeToContents);\r
-\r
- // フォルダの要素を表示\r
- m_dir.setFilter(QDir::NoDot | QDir::AllEntries);\r
- m_dir.setSorting(QDir::DirsFirst | QDir::Name);\r
-}\r
-\r
-FolderPanel::~FolderPanel()\r
-{\r
- UninstallWatcher();\r
- delete ui;\r
-}\r
-\r
-QTableWidget* FolderPanel::fileTable()\r
-{\r
- return ui->fileTable;\r
-}\r
-\r
-const QTableWidget* FolderPanel::fileTable() const\r
-{\r
- return ui->fileTable;\r
-}\r
-\r
-MainWindow* FolderPanel::mainWindow()\r
-{\r
- foreach (QWidget *w, qApp->topLevelWidgets()) {\r
- if (w->objectName() == "MainWindow") {\r
- return static_cast<MainWindow*>(w);\r
- }\r
- }\r
- return NULL;\r
-}\r
-\r
-bool FolderPanel::eventFilter(QObject *obj, QEvent *event)\r
-{\r
- if (event->type() == QEvent::KeyPress) {\r
- QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);\r
- switch (keyEvent->key()) {\r
- case Qt::Key_A: {\r
- // A すべてのファイルをマーク\r
- // Shift + A すべてマーク\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onMarkAll();\r
- }\r
- else {\r
- mainWnd->onMarkAllFiles();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_D: {\r
- // Ctrl + D ファイルを削除\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ControlModifier) {\r
- mainWnd->onCmdDelete();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_E: {\r
- // E エディタで開く\r
- // Ctrl + E ファイルを作成\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ControlModifier) {\r
- mainWnd->onCmdNewFile();\r
- }\r
- else {\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_G: {\r
- // G カーソルを先頭に移動\r
- // Shift + G カーソルを末尾に移動\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onMoveCursorEnd();\r
- }\r
- else {\r
- mainWnd->onMoveCursorBegin();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_H: {\r
- // H ホームフォルダに移動\r
- // Shift + H 隠しファイルを表示/非表示\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onViewHidden();\r
- }\r
- else {\r
- mainWnd->onMoveHome();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_I: {\r
- // I マークを反転\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onMarkInvert();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_J: {\r
- // J カーソルを下に移動\r
- // Shift + J フォルダを選択して移動\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onMoveJump();\r
- }\r
- else {\r
- mainWnd->onMoveCursorDown();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_K: {\r
- // K カーソルを上に移動\r
- // Ctrl + K フォルダを作成\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ControlModifier) {\r
- mainWnd->onCmdNewFolder();\r
- }\r
- else {\r
- mainWnd->onMoveCursorUp();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_O: {\r
- // O 隣のパネルと同じフォルダを表示\r
- // Shift + O 隣のパネルに同じフォルダを表示\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onViewToOther();\r
- }\r
- else {\r
- mainWnd->onViewFromOther();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Q: {\r
- // Q アプリケーションを終了\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onActionQuit();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_R: {\r
- // R 履歴を表示\r
- // Ctrl + R 名前を変更\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ControlModifier) {\r
- mainWnd->onCmdRename();\r
- }\r
- else {\r
-\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_U: {\r
- // U すべてのマークを解除\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onMarkAllOff();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_W: {\r
- // W 表示フォルダを交換\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onViewSwap();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_X: {\r
- // X コマンドを実行\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onActionCommand();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Question: {\r
- // ? アプリケーション情報を表示\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onHelpAbout();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Space: {\r
- // マーク/解除\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onMarkToggle();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Tab: {\r
- // 隣のパネルに移動\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- mainWnd->onMoveOther();\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Backspace: {\r
- // BS 親フォルダに移動\r
- // Shift + BS ルートフォルダに移動\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onMoveRoot();\r
- }\r
- else {\r
- mainWnd->onMoveParent();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
-\r
- case Qt::Key_Return: {\r
- // RET 開く\r
- // Shift + RET アプリケーションで開く\r
- MainWindow *mainWnd = this->mainWindow();\r
- if (mainWnd) {\r
- if (keyEvent->modifiers() & Qt::ShiftModifier) {\r
- mainWnd->onActionExec();\r
- }\r
- else {\r
- mainWnd->onActionOpen();\r
- }\r
- }\r
- keyEvent->accept();\r
- return true; }\r
- }\r
- }\r
-\r
- return QWidget::eventFilter(obj, event);\r
-}\r
-\r
-void FolderPanel::setCurrentFolder(const QString &path)\r
-{\r
- mainWindow()->setStatusText(tr("ファイルリストを更新中..."));\r
- QString curDir = m_dir.absolutePath();\r
- m_dir.setPath(QDir::cleanPath(path));\r
- m_dir.canonicalPath();\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
- mainWindow()->setStatusText(tr("レディ"));\r
- return;\r
- }\r
-\r
- // フォルダの変更監視\r
- InstallWatcher();\r
-\r
- m_bUpdating = true;\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
- 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 if (info.size() >= 1024 * 1024 * 1024) {\r
- str = tr("%1GB").arg(int(info.size() / (1024 * 1024 * 1024)));\r
- }\r
- else if (info.size() >= 1024 * 1024) {\r
- str = tr("%1MB").arg(int(info.size() / (1024 * 1024)));\r
- }\r
- else if (info.size() >= 1024) {\r
- str = tr("%1KB").arg(int(info.size() / 1024));\r
- }\r
- else {\r
- str = tr("%1B").arg(info.size());\r
- }\r
- QTableWidgetItem *iSize = new QTableWidgetItem(str);\r
- iSize->setFlags(iSize->flags() ^ Qt::ItemIsEditable);\r
- iSize->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);\r
-\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
- mainWindow()->setStatusText(tr("レディ"));\r
- m_bUpdating = false;\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
-void FolderPanel::on_fileTable_cellChanged(int row, int column)\r
-{\r
- if (column == 0) {\r
- if (ui->fileTable->item(row, 0)->checkState() == Qt::Checked) {\r
- for (int n = 0; n < 4; n++) {\r
- ui->fileTable->item(row, n)->setForeground(Qt::red);\r
- ui->fileTable->item(row, n)->setBackground(Qt::green);\r
- }\r
- }\r
- else {\r
- for (int n = 0; n < 4; n++) {\r
- ui->fileTable->item(row, n)->setForeground(Qt::black);\r
- ui->fileTable->item(row, n)->setBackground(Qt::white);\r
- }\r
- }\r
- ui->fileTable->selectRow(row);\r
- }\r
-}\r
-\r
-void FolderPanel::on_locationField_editingFinished()\r
-{\r
- ui->locationField->blockSignals(true);\r
-\r
- QString path = ui->locationField->text();\r
- setCurrentFolder(path);\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 (m_bUpdating) {\r
- return;\r
- }\r
-\r
- int row = ui->fileTable->currentRow();\r
- if (0 <= row && row < ui->fileTable->rowCount()) {\r
- mainWindow()->setStatusText(ui->fileTable->item(row, 1)->text());\r
- }\r
-}\r
+#include "global.h"
+#include "preferences.h"
+#include "mainwindow.h"
+#include "folderpanel.h"
+#include "ui_folderpanel.h"
+
+#include <QDebug>
+#include <QSettings>
+#include <QStatusBar>
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::FolderPanel
+/// \param parent 親ウィジェット
+///
+/// コンストラクタ
+///
+FolderPanel::FolderPanel(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::FolderPanel),
+ m_mainWnd(NULL)
+{
+ ui->setupUi(this);
+ ui->searchBox->setText("");
+ ui->searchBox->setVisible(false);
+ ui->thumbnailView->setVisible(false);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::~FolderPanel
+///
+/// デストラクタ
+///
+FolderPanel::~FolderPanel()
+{
+ delete ui;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void FolderPanel::initialize(MainWindow *w)
+{
+ qDebug() << "FolderPanel::initialize();";
+
+ // フォルダビューを初期化する
+ ui->folderView->initialize(w);
+ // サムネイルビューを初期化する
+ ui->thumbnailView->initialize(w);
+
+ connect(ui->bookmarkBtn, SIGNAL(clicked()), w, SLOT(onAddBookmark()));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::itemView
+/// \return アイテムビューを返します。
+///
+QAbstractItemView *FolderPanel::itemView() const
+{
+ if (ui->thumbnailView->isVisible()) {
+ return ui->thumbnailView;
+ }
+ return ui->folderView;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model
+/// \return 関連付けられたフォルダモデルを返します。
+///
+FolderModel *FolderPanel::model() const
+{
+ return static_cast<FolderModel*>(ui->folderView->model());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::setModel
+/// \param m 設定するモデル
+///
+/// モデルを設定します。
+///
+void FolderPanel::setModel(FolderModel *m)
+{
+ qDebug() << "FolderPanel::setModel()" << m;
+ if (model()) {
+ model()->disconnect(this);
+ }
+
+ ui->folderView->setModel(m);
+ ui->thumbnailView->setModel(m);
+
+ if (model()) {
+ connect(model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
+ this, SLOT(model_dataChanged(QModelIndex,QModelIndex)));
+ connect(model(), SIGNAL(modelReset()), this, SLOT(model_Reset()));
+
+ model_Reset();
+ model_dataChanged(QModelIndex(), QModelIndex());
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::toggleSearch
+/// \param checked メニューのチェック状態
+///
+/// 検索ボックスの表示/非表示を切り替えます。
+///
+void FolderPanel::toggleSearch(bool checked)
+{
+ qDebug() << "FolderPanel::toggleSearch()" << checked;
+ if (!isVisible()) {
+ return;
+ }
+
+ if (checked) {
+ if (!model()->isActive()) {
+ return;
+ }
+
+ ui->searchBox->setVisible(true);
+ ui->searchBox->setFocus();
+ ui->searchBox->selectAll();
+ }
+ else {
+ if (!ui->searchBox->isVisible()) {
+ return;
+ }
+
+ if (ui->searchBox->hasFocus()) {
+ itemView()->setFocus();
+ }
+ ui->searchBox->setVisible(false);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::toggleView
+/// \param checked メニューのチェック状態
+///
+/// リスト/サムネイルを切り替えます。
+///
+void FolderPanel::toggleView(bool checked)
+{
+ QModelIndex index = itemView()->currentIndex();
+ if (checked) {
+ ui->folderView->setVisible(false);
+ ui->thumbnailView->setVisible(true);
+ ui->thumbnailView->setFocus();
+ }
+ else {
+ ui->thumbnailView->setVisible(false);
+ ui->folderView->setVisible(true);
+ ui->folderView->setFocus();
+ }
+ itemView()->setCurrentIndex(index);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::updateAppearance
+///
+/// 外観を変更します。
+///
+void FolderPanel::updateAppearance(const Preferences &prefs)
+{
+ qDebug() << "FolderPanel::updateAppearance()";
+
+ QPalette pal;
+
+ pal = ui->filterLabel->palette();
+ pal.setColor(ui->filterLabel->backgroundRole(), prefs.folderViewBgColor(model()->isActive()));
+ pal.setColor(ui->filterLabel->foregroundRole(), prefs.folderViewFgColor(model()->isActive()));
+ ui->filterLabel->setAutoFillBackground(true);
+ ui->filterLabel->setPalette(pal);
+
+ pal = ui->locationBox->palette();
+ pal.setColor(QPalette::Base, prefs.locationBoxBgColor(model()->isActive()));
+ pal.setColor(QPalette::Text, prefs.locationBoxFgColor(model()->isActive()));
+ ui->locationBox->setPalette(pal);
+ ui->locationBox->setFont(prefs.getLocationBoxFont());
+
+ pal = ui->searchBox->palette();
+ pal.setColor(QPalette::Base, prefs.getSearchBoxBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxFgColor());
+ ui->searchBox->setPalette(pal);
+ ui->searchBox->setFont(prefs.getSearchBoxFont());
+
+ pal = ui->folderView->palette();
+ pal.setColor(QPalette::Base, prefs.folderViewBgColor(model()->isActive()));
+ ui->folderView->setPalette(pal);
+
+ pal = ui->thumbnailView->palette();
+ pal.setColor(QPalette::Base, prefs.folderViewBgColor(model()->isActive()));
+ ui->thumbnailView->setPalette(pal);
+
+ QHeaderView *header = ui->folderView->verticalHeader();
+ QFont font = prefs.getFolderViewFont();
+ header->setDefaultSectionSize(QFontMetrics(font).height() * prefs.getLineHeight());
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::searchNext
+/// \param step 次なら1, 前なら-1
+///
+/// 次または前のアイテムを検索します。
+///
+void FolderPanel::searchNext(int step)
+{
+ qDebug() << "FolderPanel::searchNext()" << step;
+
+ QModelIndex index = model()->search(ui->searchBox->text(),
+ itemView()->currentIndex(),
+ step);
+ showSearchResult(index);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::setItemView
+/// \param name "folderView"または"thumbnailView"
+///
+/// 指定されたビューを可視状態にします。
+///
+void FolderPanel::setItemView(const QString &name)
+{
+ ui->folderView->setVisible(false);
+ ui->thumbnailView->setVisible(false);
+ findChild<QWidget*>(name)->setVisible(true);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::showSearchResult
+/// \param index 検索されたアイテム
+///
+/// 検索結果を表示します。
+///
+void FolderPanel::showSearchResult(const QModelIndex &index)
+{
+ Preferences prefs(this);
+
+ QPalette pal = ui->searchBox->palette();
+ if (index.isValid()) {
+ itemView()->setCurrentIndex(index);
+ pal.setColor(QPalette::Base, prefs.getSearchBoxBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxFgColor());
+ }
+ else {
+ pal.setColor(QPalette::Base, prefs.getSearchBoxUnmatchBgColor());
+ pal.setColor(QPalette::Text, prefs.getSearchBoxUnmatchFgColor());
+ }
+ ui->searchBox->setPalette(pal);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model_dataChanged
+/// \param topLeft (使用しません)
+/// \param bottomRight (使用しません)
+///
+/// アイテムの選択状態変更に伴う処理を行います。
+///
+void FolderPanel::model_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{
+ Q_UNUSED(topLeft);
+ Q_UNUSED(bottomRight);
+
+ QFileInfoList list = model()->markedItems();
+ if (list.isEmpty()) {
+ ui->filterLabel->setText(tr("フィルタ:%1").arg(model()->nameFilters().join(" ")));
+ }
+ else {
+ int numFolders = 0;
+ int numFiles = 0;
+ qint64 totalSize = 0;
+ foreach (const QFileInfo &fi, list) {
+ if (fi.isDir()) {
+ ++numFolders;
+ }
+ else {
+ ++numFiles;
+ totalSize += fi.size();
+ }
+ }
+
+ QString text;
+ if (numFolders > 0) {
+ text += tr("%1個のフォルダ ").arg(numFolders);
+ }
+ if (numFiles > 0) {
+ text += tr("%1個のファイル ").arg(numFiles);
+ }
+ if (!text.isEmpty()) {
+ text += tr("を選択 合計%1").arg(fileSizeToString(totalSize));
+ }
+ ui->filterLabel->setText(text);
+ }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::model_Reset
+///
+/// モデルリセット後の処理を行います。
+///
+void FolderPanel::model_Reset()
+{
+ ui->locationBox->setText(model()->rootPath());
+ ui->filterLabel->setText(tr("フィルタ:%1").arg(model()->nameFilters().join(" ")));
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/// \brief FolderPanel::on_searchBox_textEdited
+/// \param arg1 入力テキスト
+///
+/// 検索ボックスのテキストが変更された場合の処理を行います。
+///
+void FolderPanel::on_searchBox_textEdited(const QString &arg1)
+{
+ if (arg1.right(1) == "/") {
+ ui->searchBox->setText(arg1.left(arg1.size() - 1));
+ // 検索終了
+ itemView()->setFocus();
+ }
+ else {
+ showSearchResult(model()->search(arg1));
+ }
+}