deleteworker.cpp \\r
overwritedialog.cpp \\r
copymoveworker.cpp \\r
- filetablewidget.cpp \\r
- sortdialog.cpp\r
+ sortdialog.cpp \\r
+ filetablemodel.cpp \\r
+ filetableview.cpp\r
\r
HEADERS += mainwindow.h \\r
folderpanel.h \\r
deleteworker.h \\r
overwritedialog.h \\r
copymoveworker.h \\r
- filetablewidget.h \\r
- sortdialog.h\r
+ sortdialog.h \\r
+ filetablemodel.h \\r
+ filetableview.h\r
\r
FORMS += mainwindow.ui \\r
folderpanel.ui \\r
#define VERSION_VALUE 0.01\r
\r
#define slash QString("/")\r
+#define QQ(x) ("\"" + (x) + "\"")\r
\r
#define IniKey_ShowHidden "Common/ShowHidden"\r
#define IniKey_ShowSystem "Common/ShowSystem"\r
{\r
m_progressText->setText(tr("削除準備中..."));\r
\r
- foreach (const QString &path, *m_DeleteList) {\r
+ foreach (const QFileInfo &info, *m_DeleteList) {\r
if (isStopRequested()) {\r
emit canceled();\r
return;\r
}\r
- Listup(path);\r
+ Listup(info.absolutePath());\r
}\r
\r
bool ret;\r
\r
#include "iworker.h"\r
\r
+#include <QFileInfoList>\r
+\r
class DeleteWorker : public IWorker\r
{\r
Q_OBJECT\r
public:\r
explicit DeleteWorker(QObject *parent = 0);\r
\r
- void setDeleteList(const QStringList *list) {\r
+ void setDeleteList(const QFileInfoList *list) {\r
m_DeleteList = list;\r
}\r
\r
void operate();\r
\r
private:\r
- const QStringList *m_DeleteList;\r
+ const QFileInfoList *m_DeleteList;\r
QStringList m_Targets;\r
\r
void Listup(const QString &path);\r
--- /dev/null
+#include "common.h"\r
+#include "filetablemodel.h"\r
+\r
+#include <QDateTime>\r
+#include <QDebug>\r
+#ifdef Q_OS_WIN32\r
+ #include <windows.h>\r
+#endif\r
+\r
+FileTableModel::FileTableModel(QObject *parent) :\r
+ QAbstractTableModel(parent),\r
+ m_dir(),\r
+ m_fileInfoList(),\r
+ m_checkStates(),\r
+ m_IconFactory(),\r
+ m_fsWatcher(NULL)\r
+{\r
+}\r
+\r
+bool FileTableModel::setPath(const QString &path)\r
+{\r
+ if (!QFileInfo::exists(path)) {\r
+ qDebug() << "パスが存在しません";\r
+ qDebug() << path;\r
+ return false;\r
+ }\r
+ QFileInfo info(path);\r
+ if (!info.isDir()) {\r
+ qDebug() << "フォルダではありません";\r
+ qDebug() << path;\r
+ return false;\r
+ }\r
+\r
+ beginResetModel();\r
+\r
+ m_dir.setPath(path);\r
+ m_fileInfoList = m_dir.entryInfoList();\r
+ m_checkStates.clear();\r
+\r
+ if (m_fileInfoList.isEmpty()) {\r
+ qDebug() << "ファイルリストを取得できません";\r
+ qDebug() << path;\r
+ }\r
+#ifdef Q_OS_WIN32\r
+ else if (!(filter() & QDir::System)){\r
+ QFileInfoList::iterator it;\r
+ for (it = m_fileInfoList.begin(); it != m_fileInfoList.end(); ) {\r
+ DWORD dwFlags = ::GetFileAttributes(\r
+ it->absoluteFilePath().toStdWString().c_str());\r
+ if (dwFlags != DWORD(-1) && it->fileName() != ".." &&\r
+ ((dwFlags & FILE_ATTRIBUTE_SYSTEM) == FILE_ATTRIBUTE_SYSTEM))\r
+ {\r
+ qDebug() << it->fileName() << " is system file.";\r
+ it = m_fileInfoList.erase(it);\r
+ }\r
+ else {\r
+ it++;\r
+ }\r
+ }\r
+ }\r
+#endif\r
+ m_checkStates.resize(m_fileInfoList.size());\r
+ m_checkStates.fill(Qt::Unchecked);\r
+\r
+ if (m_fsWatcher) {\r
+ delete m_fsWatcher;\r
+ }\r
+ m_fsWatcher = new QFileSystemWatcher(this);\r
+ m_fsWatcher->addPath(path);\r
+ connect(m_fsWatcher, SIGNAL(directoryChanged(QString)),\r
+ this, SLOT(refresh()));\r
+\r
+ endResetModel();\r
+\r
+ emit rootChanged(m_dir.absolutePath());\r
+ stateChanged();\r
+\r
+ return !m_fileInfoList.isEmpty();\r
+}\r
+\r
+Qt::CheckState FileTableModel::checkState(const QModelIndex &index) const\r
+{\r
+ return m_checkStates[index.row()];\r
+}\r
+\r
+void FileTableModel::setCheckState(const QModelIndex &index, Qt::CheckState state)\r
+{\r
+ m_checkStates[index.row()] = state;\r
+ stateChanged();\r
+}\r
+\r
+void FileTableModel::setCheckStateAll(Qt::CheckState state)\r
+{\r
+ beginResetModel();\r
+ m_checkStates.fill(state);\r
+ endResetModel();\r
+\r
+ stateChanged();\r
+}\r
+\r
+\r
+bool FileTableModel::isDir(const QModelIndex &index) const\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
+}\r
+\r
+QFileInfo FileTableModel::fileInfo(const QModelIndex &index) const\r
+{\r
+ return m_fileInfoList[index.row()];\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 stateChanged(numFolder, numFile, totalSize);\r
+}\r
+\r
+QFileInfoList FileTableModel::checkedItems() const\r
+{\r
+ QFileInfoList list;\r
+ for (int n = 0; n < m_checkStates.size(); n++) {\r
+ if (m_fileInfoList[n].fileName() != ".." &&\r
+ m_checkStates[n] == Qt::Checked)\r
+ {\r
+ list.append(m_fileInfoList[n]);\r
+ }\r
+ }\r
+ return list;\r
+}\r
+\r
+int FileTableModel::rowCount(const QModelIndex &parent) const\r
+{\r
+ Q_UNUSED(parent);\r
+ return m_fileInfoList.size();\r
+}\r
+\r
+int FileTableModel::columnCount(const QModelIndex &parent) const\r
+{\r
+ Q_UNUSED(parent);\r
+ return 4;\r
+}\r
+\r
+QVariant FileTableModel::data(const QModelIndex &index, int role) const\r
+{\r
+ if (!index.isValid()) {\r
+ return QVariant();\r
+ }\r
+\r
+ const QFileInfo &info = m_fileInfoList.at(index.row());\r
+ int checked = m_checkStates.at(index.row());\r
+\r
+ switch (role) {\r
+ case Qt::DisplayRole:\r
+ switch (index.column()) {\r
+ case 0: // チェックボックス\r
+ return QString("");\r
+ case 1: // ファイル名\r
+ return info.fileName();\r
+ case 2: // サイズ\r
+ if (info.isDir()) {\r
+ return QString("<DIR>");\r
+ }\r
+ else {\r
+ return FilesizeToString(info.size());\r
+ }\r
+ break;\r
+ case 3:\r
+ return info.lastModified().toString("yy/MM/dd hh:mm");\r
+ }\r
+ break;\r
+\r
+ case Qt::DecorationRole:\r
+ if (index.column() == 1) {\r
+ if (info.fileName() == "..") {\r
+ return QIcon(":/images/Up.png");\r
+ }\r
+ else {\r
+ // infoを使うと、正しいアイコンが取れない場合がある…なぜ?\r
+ return m_IconFactory.icon(QFileInfo(info.absoluteFilePath()));\r
+ }\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
+ return Qt::AlignRight + Qt::AlignVCenter;\r
+ }\r
+ break;\r
+\r
+ case Qt::CheckStateRole:\r
+ if (index.column() == 0 && info.fileName() != "..") {\r
+ return checked;\r
+ }\r
+ break;\r
+ }\r
+\r
+ return QVariant();\r
+}\r
+\r
+QVariant FileTableModel::headerData(int section, Qt::Orientation orientation, int role) const\r
+{\r
+ if (role == Qt::DisplayRole) {\r
+ if (orientation == Qt::Horizontal) {\r
+ switch (section) {\r
+ case 0: return QString("");\r
+ case 1: return tr("名前");\r
+ case 2: return tr("サイズ");\r
+ case 3: return tr("更新日時");\r
+ }\r
+ }\r
+ }\r
+ return QVariant();\r
+}\r
+\r
+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
+ }\r
+ return flags;\r
+}\r
+\r
+bool FileTableModel::setData(const QModelIndex &index, const QVariant &value, int role)\r
+{\r
+ switch (role) {\r
+ case Qt::CheckStateRole:\r
+ if (index.column() == 0) {\r
+ m_checkStates[index.row()] = static_cast<Qt::CheckState>(value.toInt());\r
+ stateChanged();\r
+ return true;\r
+ }\r
+ break;\r
+ }\r
+\r
+ return false;\r
+}\r
--- /dev/null
+#ifndef FILETABLEMODEL_H\r
+#define FILETABLEMODEL_H\r
+\r
+#include <QAbstractTableModel>\r
+#include <QDir>\r
+#include <QFileIconProvider>\r
+#include <QFileSystemWatcher>\r
+\r
+class FileTableModel : public QAbstractTableModel\r
+{\r
+ Q_OBJECT\r
+public:\r
+ explicit FileTableModel(QObject *parent = 0);\r
+\r
+ bool setPath(const QString &path);\r
+\r
+ QDir::Filters filter() const { return m_dir.filter(); }\r
+ void setFilter(QDir::Filters filters) { m_dir.setFilter(filters); }\r
+\r
+ QDir::SortFlags sorting() const { return m_dir.sorting(); }\r
+ void setSorting(QDir::SortFlags sort) { m_dir.setSorting(sort); }\r
+\r
+ Qt::CheckState checkState(const QModelIndex &index) const;\r
+ void setCheckState(const QModelIndex &index, Qt::CheckState state);\r
+ void setCheckStateAll(Qt::CheckState state);\r
+\r
+ bool isDir(const QModelIndex &index) const;\r
+ const QString absolutePath() const { return m_dir.absolutePath(); }\r
+ const QString absoluteFilePath(const QModelIndex &index) const;\r
+ QFileInfoList checkedItems() const;\r
+ QFileInfo fileInfo(const QModelIndex &index) const;\r
+\r
+signals:\r
+ void rootChanged(const QString &root);\r
+ void stateChanged(int checkedFoldrs, int checkedFiles, quint64 totalSize);\r
+\r
+public slots:\r
+ void refresh() { setPath(m_dir.absolutePath()); }\r
+\r
+private:\r
+ QDir m_dir;\r
+ QFileInfoList m_fileInfoList;\r
+ QVector<Qt::CheckState> m_checkStates;\r
+ QFileIconProvider m_IconFactory;\r
+ QFileSystemWatcher *m_fsWatcher;\r
+\r
+ void stateChanged();\r
+\r
+ // QAbstractItemModel interface\r
+public:\r
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;\r
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;\r
+ QVariant data(const QModelIndex &index, int role) const;\r
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const;\r
+ Qt::ItemFlags flags(const QModelIndex &index) const;\r
+ bool setData(const QModelIndex &index, const QVariant &value, int role);\r
+};\r
+\r
+#endif // FILETABLEMODEL_H\r
--- /dev/null
+#include "common.h"\r
+#include "deleteworker.h"\r
+#include "filetablemodel.h"\r
+#include "filetableview.h"\r
+#include "mainwindow.h"\r
+#include "operationdialog.h"\r
+#include "renamemultidialog.h"\r
+#include "renamesingledialog.h"\r
+#include "renameworker.h"\r
+#include "sortdialog.h"\r
+\r
+#include <QDebug>\r
+#include <QDesktopServices>\r
+#include <QInputDialog>\r
+#include <QMessageBox>\r
+#include <QProcess>\r
+#include <QUrl>\r
+#include <QAction>\r
+#include <QSettings>\r
+#include <QFileDialog>\r
+#include <QKeyEvent>\r
+\r
+#define CHECK_FOCUS { \\r
+ if (!hasFocus()) { return; } \\r
+ }\r
+\r
+#define MENU_TRRIGGERED(x) \\r
+ getMainWnd()->findChild<QAction*>(#x), SIGNAL(triggered())\r
+#define MENU_TOGGLED(x) \\r
+ getMainWnd()->findChild<QAction*>(#x), SIGNAL(toggled(bool))\r
+\r
+FileTableView::FileTableView(QWidget *parent) :\r
+ QTableView(parent)\r
+{\r
+ // シグナル/スロットを設定する\r
+ connect(MENU_TRRIGGERED(action_Open), this, SLOT(setPath()));\r
+ connect(MENU_TRRIGGERED(action_Exec), this, SLOT(openUrl()));\r
+ connect(MENU_TRRIGGERED(action_OpenEditor), this, SLOT(XXX()));\r
+ connect(MENU_TRRIGGERED(action_Command), this, SLOT(kickProcess()));\r
+\r
+ connect(MENU_TRRIGGERED(mark_Toggle), this, SLOT(toggleChecked()));\r
+ connect(MENU_TRRIGGERED(mark_All), this, SLOT(checkAllItems()));\r
+ connect(MENU_TRRIGGERED(mark_AllFiles), this, SLOT(checkAllFiles()));\r
+ connect(MENU_TRRIGGERED(mark_AllOff), this, SLOT(uncheckAllItems()));\r
+ connect(MENU_TRRIGGERED(mark_Invert), this, SLOT(invertAllChecked()));\r
+\r
+ connect(MENU_TOGGLED(view_Hidden), this, SLOT(showHiddenFiles(bool)));\r
+ connect(MENU_TOGGLED(view_System), this, SLOT(showSystemFiles(bool)));\r
+ connect(MENU_TRRIGGERED(view_Sort), this, SLOT(setSort()));\r
+\r
+ connect(MENU_TRRIGGERED(move_Back), this, SLOT(back()));\r
+ connect(MENU_TRRIGGERED(move_Forward), this, SLOT(forward()));\r
+ connect(MENU_TRRIGGERED(move_History), this, SLOT(showHidtory()));\r
+ connect(MENU_TRRIGGERED(move_Home), this, SLOT(jumpToHome()));\r
+ connect(MENU_TRRIGGERED(move_Parent), this, SLOT(jumpToParent()));\r
+ connect(MENU_TRRIGGERED(move_Root), this, SLOT(jumpToRoot()));\r
+ connect(MENU_TRRIGGERED(move_Jump), this, SLOT(jumpTo()));\r
+ connect(MENU_TRRIGGERED(move_Down), this, SLOT(cursorDown()));\r
+ connect(MENU_TRRIGGERED(move_Up), this, SLOT(cursorUp()));\r
+ connect(MENU_TRRIGGERED(move_Begin), this, SLOT(cursorToBegin()));\r
+ connect(MENU_TRRIGGERED(move_End), this, SLOT(cursorToEnd()));\r
+\r
+ connect(MENU_TRRIGGERED(cmd_Delete), this, SLOT(cmdDelete()));\r
+ connect(MENU_TRRIGGERED(cmd_Rename), this, SLOT(cmdRename()));\r
+ connect(MENU_TRRIGGERED(cmd_NewFile), this, SLOT(newFile()));\r
+ connect(MENU_TRRIGGERED(cmd_NewFolder), this, SLOT(newFolder()));\r
+\r
+ connect(this, SIGNAL(doubleClicked(QModelIndex)),\r
+ this, SLOT(setRootIndex(QModelIndex)));\r
+\r
+}\r
+QString FileTableView::side() const\r
+{\r
+ return m_side;\r
+}\r
+\r
+void FileTableView::setSide(const QString &side)\r
+{\r
+ m_side = side;\r
+}\r
+\r
+\r
+QFileInfoList FileTableView::selectedItems() const\r
+{\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QFileInfoList list = m->checkedItems();\r
+ if (list.isEmpty()) {\r
+ QFileInfo info = m->fileInfo(currentIndex());\r
+ if (info.fileName() != "..") {\r
+ list.append(info);\r
+ }\r
+ }\r
+\r
+ return list;\r
+}\r
+\r
+void FileTableView::setPath()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ setRootIndex(currentIndex());\r
+}\r
+\r
+void FileTableView::openUrl()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ QFileInfoList list = selectedItems();\r
+ foreach (const QFileInfo &info, list) {\r
+ QString path = QDir::toNativeSeparators(info.absoluteFilePath());\r
+ QDesktopServices::openUrl(QUrl("file:///" + path));\r
+ }\r
+}\r
+\r
+void FileTableView::kickProcess()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ QFileInfoList list = selectedItems();\r
+ QString command = QString::null;\r
+ foreach (const QFileInfo &info, list) {\r
+ if (info.isExecutable()) {\r
+ command = QQ(info.fileName()) + " " + command;\r
+ }\r
+ else {\r
+ command += " " + QQ(info.fileName());\r
+ }\r
+ }\r
+\r
+ QInputDialog dlg(this);\r
+ dlg.setInputMode(QInputDialog::TextInput);\r
+ dlg.setWindowTitle(tr("コマンドを実行"));\r
+ dlg.setLabelText(tr("コマンド:"));\r
+ dlg.setTextValue(command);\r
+ dlg.resize(500, 100);\r
+ int ret = dlg.exec();\r
+ command = dlg.textValue();\r
+ if (ret == QDialog::Accepted && !command.isEmpty()) {\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QProcess process(this);\r
+ process.setWorkingDirectory(m->absolutePath());\r
+ if (!process.startDetached(command)) {\r
+ QMessageBox::critical(\r
+ this, tr("エラー"),\r
+ tr("コマンドの実行に失敗しました。<br/>") + command);\r
+ }\r
+ }\r
+}\r
+\r
+void FileTableView::toggleChecked()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ QModelIndex index = currentIndex();\r
+ QFileInfo info = m->fileInfo(index);\r
+ if (info.fileName() != "..") {\r
+ if (m->checkState(index) == Qt::Checked) {\r
+ m->setCheckState(index, Qt::Unchecked);\r
+ }\r
+ else {\r
+ m->setCheckState(index, Qt::Checked);\r
+ }\r
+ update(index);\r
+ }\r
+ // 最終行でなければ、次のアイテムに移動する\r
+ if (index.row() < m->rowCount() - 1) {\r
+ setCurrentIndex(m->index(index.row() + 1, 1));\r
+ }\r
+}\r
+\r
+void FileTableView::checkAllItems()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ setUpdatesEnabled(false);\r
+ m->setCheckStateAll(Qt::Checked);\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::checkAllFiles()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ setUpdatesEnabled(false);\r
+ for (int n = 0; n < m->rowCount(); n++) {\r
+ QModelIndex index = m->index(n, 0);\r
+ QFileInfo info = m->fileInfo(index);\r
+ if (info.isDir()) {\r
+ m->setCheckState(index, Qt::Unchecked);\r
+ }\r
+ else {\r
+ m->setCheckState(index, Qt::Checked);\r
+ }\r
+ update(index);\r
+ }\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::uncheckAllItems()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ setUpdatesEnabled(false);\r
+ m->setCheckStateAll(Qt::Unchecked);\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::invertAllChecked()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ setUpdatesEnabled(false);\r
+ for (int n = 0; n < m->rowCount(); n++) {\r
+ QModelIndex index = m->index(n, 0);\r
+ if (m->checkState(index) == Qt::Checked) {\r
+ m->setCheckState(index, Qt::Unchecked);\r
+ }\r
+ else {\r
+ m->setCheckState(index, Qt::Checked);\r
+ }\r
+ update(index);\r
+ }\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::showHiddenFiles(bool show)\r
+{\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ if (show) {\r
+ m->setFilter(m->filter() | QDir::Hidden);\r
+ }\r
+ else {\r
+ m->setFilter(m->filter() ^ QDir::Hidden);\r
+ }\r
+\r
+ setUpdatesEnabled(false);\r
+ m->refresh();\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::showSystemFiles(bool show)\r
+{\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ if (show) {\r
+ m->setFilter(m->filter() | QDir::System);\r
+ }\r
+ else {\r
+ m->setFilter(m->filter() ^ QDir::System);\r
+ }\r
+\r
+ setUpdatesEnabled(false);\r
+ m->refresh();\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::setSort()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ SortDialog dlg(this);\r
+ dlg.setRightOrLeft(side());\r
+ if (dlg.exec() == QDialog::Accepted) {\r
+ QSettings settings;\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ m->setSorting(QDir::Name); // 0\r
+\r
+ int sortBy = settings.value(side() + slash + IniKey_SortBy, 0).toInt();\r
+ switch (sortBy) {\r
+ case SortByDate: m->setSorting(m->sorting() | QDir::Time); break;\r
+ case SortBySize: m->setSorting(m->sorting() | QDir::Size); break;\r
+ case SortByType: m->setSorting(m->sorting() | QDir::Type); break;\r
+ default: m->setSorting(m->sorting() | QDir::Name); break;\r
+ }\r
+\r
+ // デフォルトだと文字列は昇順で、数値は降順…orz\r
+ int orderBy = settings.value(side() + slash + IniKey_OrderBy, 0).toInt();\r
+ if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
+ ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
+ {\r
+ m->setSorting(m->sorting() | QDir::Reversed);\r
+ }\r
+\r
+ switch (settings.value(side() + slash + IniKey_PutDirs, 0).toInt()) {\r
+ case PutDirsFirst: m->setSorting(m->sorting() | QDir::DirsFirst); break;\r
+ case PutDirsLast: m->setSorting(m->sorting() | QDir::DirsLast); break;\r
+ }\r
+\r
+ if (settings.value(side() + slash + IniKey_IgnoreCase, true).toBool()) {\r
+ m->setSorting(m->sorting() | QDir::IgnoreCase);\r
+ }\r
+\r
+ setUpdatesEnabled(false);\r
+ m->refresh();\r
+ setUpdatesEnabled(true);\r
+ }\r
+}\r
+\r
+void FileTableView::back()\r
+{\r
+ CHECK_FOCUS;\r
+}\r
+\r
+void FileTableView::forward()\r
+{\r
+ CHECK_FOCUS;\r
+}\r
+\r
+void FileTableView::showHidtory()\r
+{\r
+ CHECK_FOCUS;\r
+}\r
+\r
+void FileTableView::jumpToHome()\r
+{\r
+ CHECK_FOCUS;\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ setUpdatesEnabled(false);\r
+ m->setPath(QDir::homePath());\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::jumpToParent()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QDir dir(m->absolutePath());\r
+ dir.cdUp();\r
+\r
+ setUpdatesEnabled(false);\r
+ m->setPath(dir.absolutePath());\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::jumpToRoot()\r
+{\r
+ CHECK_FOCUS;\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ setUpdatesEnabled(false);\r
+ m->setPath(QDir::rootPath());\r
+ setUpdatesEnabled(true);\r
+}\r
+\r
+void FileTableView::jumpTo()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QString path = QFileDialog::getExistingDirectory(\r
+ this, tr("フォルダを選択"), m->absolutePath());\r
+ if (!path.isEmpty()) {\r
+ setUpdatesEnabled(false);\r
+ m->setPath(path);\r
+ setUpdatesEnabled(true);\r
+ }\r
+}\r
+\r
+void FileTableView::cursorDown()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ int row = currentIndex().row();\r
+ if (row < model()->rowCount() - 1) {\r
+ setCurrentIndex(model()->index(row + 1, 1));\r
+ }\r
+}\r
+\r
+void FileTableView::cursorUp()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ int row = currentIndex().row();\r
+ if (row > 0) {\r
+ setCurrentIndex(model()->index(row - 1, 1));\r
+ }\r
+}\r
+\r
+void FileTableView::cursorToBegin()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ setCurrentIndex(model()->index(0, 1));\r
+}\r
+\r
+void FileTableView::cursorToEnd()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ setCurrentIndex(model()->index(model()->rowCount() - 1, 1));\r
+}\r
+\r
+void FileTableView::cmdDelete()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ QFileInfoList list = selectedItems();\r
+ if (list.isEmpty()) {\r
+ return;\r
+ }\r
+\r
+ QString msg;\r
+ if (list.size() == 1) {\r
+ msg = list[0].fileName();\r
+ }\r
+ else {\r
+ msg = tr("%1個のアイテム").arg(list.size());\r
+ }\r
+ int ret = QMessageBox::question(\r
+ this, tr("確認"),\r
+ msg + tr("を削除します<br/>よろしいですか?"));\r
+ if (ret == QMessageBox::Yes) {\r
+ DeleteWorker worker;\r
+ worker.setDeleteList(&list);\r
+\r
+ OperationDialog opDlg(this);\r
+ opDlg.setWindowTitle(tr("削除"));\r
+ opDlg.setWorker(&worker);\r
+ opDlg.exec();\r
+ }\r
+}\r
+\r
+void FileTableView::cmdRename()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ QFileInfoList list = selectedItems();\r
+ if (list.isEmpty()) {\r
+ return;\r
+ }\r
+\r
+ IRenameDialog *dlg;\r
+ if (list.size() == 1) {\r
+ dlg = new RenameSingleDialog(this);\r
+ }\r
+ else {\r
+ dlg = new RenameMultiDialog(this);\r
+ }\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ dlg->setWorkingDirectory(m->absolutePath());\r
+ dlg->setNames(list);\r
+ int dlgResult = dlg->exec();\r
+ if (dlgResult == QDialog::Accepted && !dlg->renameMap().isEmpty()) {\r
+ RenameWorker worker;\r
+ worker.setRenameMap(&dlg->renameMap());\r
+\r
+ OperationDialog opDlg(this);\r
+ opDlg.setWindowTitle(tr("名前を変更"));\r
+ opDlg.setWorker(&worker);\r
+ opDlg.exec();\r
+ }\r
+}\r
+\r
+void FileTableView::newFile()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ bool bOk;\r
+ QString name = QInputDialog::getText(\r
+ this, tr("ファイルを作成"), tr("ファイル名:"),\r
+ QLineEdit::Normal, "", &bOk);\r
+ if (bOk && !name.isEmpty()) {\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QDir dir(m->absolutePath());\r
+ QFile file(dir.absoluteFilePath(name));\r
+ if (!file.open(QIODevice::WriteOnly)) {\r
+ QMessageBox::critical(\r
+ this, tr("エラー"),\r
+ tr("ファイルの作成に失敗しました。"));\r
+ }\r
+ else {\r
+ file.close();\r
+ }\r
+ }\r
+}\r
+\r
+void FileTableView::newFolder()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ bool bOk;\r
+ QString name = QInputDialog::getText(\r
+ this, tr("フォルダを作成"), tr("フォルダ名:"),\r
+ QLineEdit::Normal, "", &bOk);\r
+ if (bOk && !name.isEmpty()) {\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+ QDir dir(m->absolutePath());\r
+ if (!dir.mkpath(name)) {\r
+ QMessageBox::critical(\r
+ this, tr("エラー"),\r
+ tr("フォルダの作成に失敗しました。"));\r
+ }\r
+ }\r
+}\r
+\r
+void FileTableView::XXX()\r
+{\r
+ CHECK_FOCUS;\r
+\r
+ qDebug() << sender()->objectName() << "に対するスロットは未実装です。";\r
+}\r
+\r
+void FileTableView::setRootIndex(const QModelIndex &index)\r
+{\r
+ if (!index.isValid()) {\r
+ return;\r
+ }\r
+\r
+ FileTableModel *m = static_cast<FileTableModel*>(model());\r
+\r
+ if (m->isDir(index)) {\r
+ setUpdatesEnabled(false);\r
+ m->setPath(m->absoluteFilePath(index));\r
+ selectRow(0);\r
+ setUpdatesEnabled(true);\r
+ }\r
+}\r
+\r
+void FileTableView::keyPressEvent(QKeyEvent *event)\r
+{\r
+ // Macでアクションが処理されないケースがあるため、\r
+ // キーイベントを拾ってアクションシグナルを起動する\r
+ QString modifier = QString::null;\r
+ if (event->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; }\r
+ if (event->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; }\r
+ if (event->modifiers() & Qt::AltModifier) { modifier += "Alt+"; }\r
+ if (event->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; }\r
+\r
+ QString key = QKeySequence(event->key()).toString();\r
+ QString ksq = QKeySequence(modifier + key).toString();\r
+\r
+ if (!ksq.isEmpty()) {\r
+ foreach (QObject *obj, getMainWnd()->children()) {\r
+ QAction *action = qobject_cast<QAction*>(obj);\r
+ if (action) {\r
+ if (ksq == action->shortcut().toString()) {\r
+ qDebug() << "emit " << ksq << " " << action->objectName();\r
+ emit action->triggered();\r
+ event->accept();\r
+ return;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ qDebug() << ksq;\r
+ QTableView::keyPressEvent(event);\r
+\r
+}\r
--- /dev/null
+#ifndef FILETABLEVIEW_H\r
+#define FILETABLEVIEW_H\r
+\r
+#include <QFileInfoList>\r
+#include <QTableView>\r
+\r
+class FileTableView : public QTableView\r
+{\r
+ Q_OBJECT\r
+public:\r
+ explicit FileTableView(QWidget *parent = 0);\r
+\r
+ QString side() const;\r
+ void setSide(const QString &side);\r
+\r
+private:\r
+ QString m_side;\r
+\r
+ QFileInfoList selectedItems() const;\r
+\r
+signals:\r
+\r
+public slots:\r
+ void setPath();\r
+ void openUrl();\r
+ void kickProcess();\r
+\r
+ void toggleChecked();\r
+ void checkAllItems();\r
+ void checkAllFiles();\r
+ void uncheckAllItems();\r
+ void invertAllChecked();\r
+\r
+ void showHiddenFiles(bool show);\r
+ void showSystemFiles(bool show);\r
+ void setSort();\r
+\r
+ void back();\r
+ void forward();\r
+ void showHidtory();\r
+ void jumpToHome();\r
+ void jumpToParent();\r
+ void jumpToRoot();\r
+ void jumpTo();\r
+ void cursorDown();\r
+ void cursorUp();\r
+ void cursorToBegin();\r
+ void cursorToEnd();\r
+\r
+ void cmdDelete();\r
+ void cmdRename();\r
+ void newFile();\r
+ void newFolder();\r
+\r
+ void XXX();\r
+\r
+ // QAbstractItemView interface\r
+public slots:\r
+ void setRootIndex(const QModelIndex &index);\r
+\r
+ // QWidget interface\r
+protected:\r
+ void keyPressEvent(QKeyEvent *event);\r
+};\r
+\r
+#endif // FILETABLEVIEW_H\r
+++ /dev/null
-#include "common.h"\r
-#include "mainwindow.h"\r
-#include "filetablewidget.h"\r
-#include <QKeyEvent>\r
-#include <QHeaderView>\r
-#include <folderpanel.h>\r
-#include <QAction>\r
-#include <QDebug>\r
-#include <QMenuBar>\r
-\r
-FileTableWidget::FileTableWidget(QWidget *parent) :\r
- QTableWidget(parent)\r
-{\r
- connect(this, SIGNAL(cellChanged(int,int)), this, SLOT(onCellChanged(int,int)));\r
-\r
- // ダブルクリック → 開く\r
- MainWindow *mainWnd = getMainWnd();\r
- connect(this, SIGNAL(cellDoubleClicked(int,int)), mainWnd, SLOT(onActionOpen()));\r
-}\r
-\r
-void FileTableWidget::keyPressEvent(QKeyEvent *event)\r
-{\r
- // Macでアクションが処理されないケースがあるため、\r
- // キーイベントを拾ってアクションシグナルを起動する\r
- QString modifier = QString::null;\r
- if (event->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; }\r
- if (event->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; }\r
- if (event->modifiers() & Qt::AltModifier) { modifier += "Alt+"; }\r
- if (event->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; }\r
-\r
- QString key = QKeySequence(event->key()).toString();\r
- QString ksq = QKeySequence(modifier + key).toString();\r
-\r
- if (!ksq.isEmpty()) {\r
- foreach (QObject *obj, getMainWnd()->children()) {\r
- QAction *action = qobject_cast<QAction*>(obj);\r
- if (action) {\r
- if (ksq == action->shortcut().toString()) {\r
- qDebug() << "emit " << ksq << " " << action->objectName();\r
- emit action->triggered();\r
- event->accept();\r
- return;\r
- }\r
- }\r
- }\r
- }\r
-\r
- qDebug() << ksq;\r
- QTableWidget::keyPressEvent(event);\r
-}\r
-\r
-void FileTableWidget::onCellChanged(int row, int column)\r
-{\r
- if (column == 0) { // マーク状態が変更された\r
- if (item(row, 0)->checkState() == Qt::Checked) {\r
- for (int n = 0; n < 4; n++) {\r
- item(row, n)->setForeground(Qt::red);\r
- item(row, n)->setBackground(Qt::green);\r
- }\r
- }\r
- else {\r
- for (int n = 0; n < 4; n++) {\r
- item(row, n)->setForeground(Qt::black);\r
- item(row, n)->setBackground(Qt::white);\r
- }\r
- }\r
- selectRow(row);\r
- }\r
-}\r
-\r
-const QString& FileTableWidget::side() const\r
-{\r
- FolderPanel *fp = static_cast<FolderPanel*>(parentWidget());\r
- return fp->side();\r
-}\r
+++ /dev/null
-#ifndef FILETABLEWIDGET_H\r
-#define FILETABLEWIDGET_H\r
-\r
-#include <QTableWidget>\r
-\r
-class FileTableWidget : public QTableWidget\r
-{\r
- Q_OBJECT\r
-public:\r
- explicit FileTableWidget(QWidget *parent = 0);\r
-\r
-signals:\r
-\r
-public slots:\r
- void onCellChanged(int row, int column);\r
-\r
-protected:\r
- void keyPressEvent(QKeyEvent *event);\r
-\r
-private:\r
- const QString& side() const;\r
-};\r
-\r
-#endif // FILETABLEWIDGET_H\r
#include "common.h"\r
+#include "filetablemodel.h"\r
#include "folderpanel.h"\r
#include "mainwindow.h"\r
#include "ui_folderpanel.h"\r
m_bUpdating(false)\r
{\r
ui->setupUi(this);\r
- qDebug() << objectName();\r
-\r
- // セル(チェックボックス)の変更\r
- connect(ui->fileTable, SIGNAL(cellChanged(int,int)),\r
- this, SLOT(onUpdateMark(int,int)));\r
+ ui->fileTable->setModel(new FileTableModel(this));\r
\r
// リサイズ時の動作を設定する\r
QHeaderView *header = ui->fileTable->horizontalHeader();\r
header->setSectionResizeMode(1, QHeaderView::Stretch);\r
header->setSectionResizeMode(2, QHeaderView::ResizeToContents);\r
header->setSectionResizeMode(3, QHeaderView::ResizeToContents);\r
-\r
- QSettings settings;\r
- // フィルタ初期化\r
- m_dir.setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
- if (settings.value(IniKey_ShowHidden, false).toBool()) {\r
- m_dir.setFilter(m_dir.filter() | QDir::Hidden);\r
- }\r
- if (settings.value(IniKey_ShowSystem, false).toBool()) {\r
- m_dir.setFilter(m_dir.filter() | QDir::System);\r
- }\r
-\r
- // ソート順初期化\r
- m_dir.setSorting(QDir::DirsFirst | QDir::IgnoreCase);\r
}\r
\r
FolderPanel::~FolderPanel()\r
delete ui;\r
}\r
\r
-FileTableWidget* FolderPanel::fileTable()\r
+QTableView* FolderPanel::fileTable()\r
{\r
return ui->fileTable;\r
}\r
\r
-const FileTableWidget *FolderPanel::fileTable() const\r
+const QTableView *FolderPanel::fileTable() const\r
{\r
return ui->fileTable;\r
}\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->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
m_fsWatcher = NULL;\r
}\r
\r
-void FolderPanel::onUpdateMark(int, int column)\r
+const QString FolderPanel::side() const\r
{\r
- if (column != 0 || isUpdating()) {\r
- return;\r
- }\r
+ return ui->fileTable->side();\r
+}\r
\r
- // マークフォルダ数、ファイル数、サイズを計算する\r
- int numFolders = 0;\r
- int numFiles = 0;\r
- quint64 sizeTotal = 0;\r
- for (int n = 0; n < ui->fileTable->rowCount(); n++) {\r
- if (ui->fileTable->item(n, 0)->checkState() != Qt::Checked) {\r
- continue;\r
- }\r
- QString name = ui->fileTable->item(n, 1)->text();\r
- QFileInfo info(m_dir.absoluteFilePath(name));\r
- if (info.isDir()) {\r
- numFolders++;\r
- }\r
- else {\r
- numFiles++;\r
- sizeTotal += info.size();\r
- }\r
+void FolderPanel::setSide(const QString &side)\r
+{\r
+ ui->fileTable->setSide(side);\r
+\r
+ QSettings settings;\r
+ FileTableModel *model = new FileTableModel();\r
+ connect(model, SIGNAL(rootChanged(QString)),\r
+ ui->locationField, SLOT(setText(QString)));\r
+ connect(model, SIGNAL(stateChanged(int,int,quint64)),\r
+ this, SLOT(onStateChanged(int,int,quint64)));\r
+\r
+ //>>>>> フィルタ初期化\r
+ model->setFilter(QDir::NoDot | QDir::AllDirs | QDir::Files);\r
+ if (settings.value(IniKey_ShowHidden, false).toBool()) {\r
+ model->setFilter(model->filter() | QDir::Hidden);\r
+ }\r
+ if (settings.value(IniKey_ShowSystem, false).toBool()) {\r
+ model->setFilter(model->filter() | QDir::System);\r
+ }\r
+ //>>>>> ソート順初期化\r
+ model->setSorting(QDir::Name); // 0\r
+ int sortBy = settings.value(side + slash + IniKey_SortBy, SortByName).toInt();\r
+ switch (sortBy) {\r
+ case SortByDate: model->setSorting(model->sorting() | QDir::Time); break;\r
+ case SortBySize: model->setSorting(model->sorting() | QDir::Size); break;\r
+ case SortByType: model->setSorting(model->sorting() | QDir::Type); break;\r
+ default: model->setSorting(model->sorting() | QDir::Name); break;\r
+ }\r
+ // デフォルトだと文字列は昇順で、数値は降順…orz\r
+ int orderBy = settings.value(side + slash + IniKey_OrderBy, OrderByDesc).toInt();\r
+ if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
+ ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
+ {\r
+ model->setSorting(model->sorting() | QDir::Reversed);\r
}\r
+ // フォルダの位置\r
+ switch (settings.value(side + slash + IniKey_PutDirs, PutDirsFirst).toInt()) {\r
+ case PutDirsFirst: model->setSorting(model->sorting() | QDir::DirsFirst); break;\r
+ case PutDirsLast: model->setSorting(model->sorting() | QDir::DirsLast); break;\r
+ }\r
+ // 大文字小文字の区別\r
+ if (settings.value(side + slash + IniKey_IgnoreCase, true).toBool()) {\r
+ model->setSorting(model->sorting() | QDir::IgnoreCase);\r
+ }\r
+ //>>>>> 監視フォルダ初期化\r
+ QString key = side + slash + IniKey_Dir;\r
+ QString path = settings.value(key, QDir::homePath()).toString();\r
+ model->setPath(path);\r
+\r
+ ui->fileTable->setModel(model);\r
+ ui->fileTable->selectRow(0);\r
+ ui->fileTable->resizeColumnsToContents();\r
+ ui->fileTable->resizeRowsToContents();\r
+}\r
\r
+void FolderPanel::onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize)\r
+{\r
QString msg = "";\r
- if (numFolders > 0) {\r
- msg += tr("%1個のフォルダ ").arg(numFolders);\r
+ if (checkedFolders > 0) {\r
+ msg += tr("%1個のフォルダ ").arg(checkedFolders);\r
}\r
- if (numFiles > 0) {\r
- msg += tr("%1個のファイル ").arg(numFiles);\r
+ if (checkedFiles > 0) {\r
+ msg += tr("%1個のファイル ").arg(checkedFiles);\r
}\r
if (msg.length() > 0) {\r
msg += "を選択 合計 ";\r
- msg += FilesizeToString(sizeTotal);\r
+ msg += FilesizeToString(totalSize);\r
}\r
\r
ui->label->setText(msg);\r
+\r
}\r
\r
void FolderPanel::on_locationField_editingFinished()\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
+// 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
+//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
#include <QTableWidget>\r
#include <QFileIconProvider>\r
#include <QFileSystemWatcher>\r
-#include "filetablewidget.h"\r
+#include "filetableview.h"\r
class MainWindow;\r
\r
namespace Ui {\r
explicit FolderPanel(QWidget *parent = 0);\r
~FolderPanel();\r
\r
- FileTableWidget* fileTable();\r
- const FileTableWidget* fileTable() const;\r
+ QTableView *fileTable();\r
+ const QTableView* fileTable() const;\r
\r
QDir* dir() { return &m_dir; }\r
const QDir* dir() const { return &m_dir; }\r
void endUpdate() {\r
m_bUpdating = false;\r
// setUpdatesEnabled(true);\r
- onUpdateMark(0, 0);\r
+ //onUpdateMark(0, 0);\r
}\r
bool isUpdating() const { return m_bUpdating; }\r
\r
- void setSide(const QString &side) { m_Side = side; }\r
- const QString& side() const { return m_Side; }\r
+ const QString side() const;\r
+ void setSide(const QString &side);\r
\r
private:\r
Ui::FolderPanel *ui;\r
QFileIconProvider m_IconFactory;\r
QFileSystemWatcher *m_fsWatcher;\r
bool m_bUpdating;\r
- QString m_Side; // "Left" or "Right"\r
\r
private slots:\r
- void onUpdateMark(int, int);\r
+ void onStateChanged(int checkedFolders, int checkedFiles, quint64 totalSize);\r
void on_locationField_editingFinished();\r
void on_directoryChanged(QString);\r
- void on_fileTable_itemSelectionChanged();\r
+// void on_fileTable_itemSelectionChanged();\r
};\r
\r
#endif // FOLDERPANEL_H\r
</layout>\r
</item>\r
<item>\r
- <widget class="FileTableWidget" name="fileTable">\r
+ <widget class="FileTableView" name="fileTable">\r
<property name="horizontalScrollBarPolicy">\r
<enum>Qt::ScrollBarAlwaysOff</enum>\r
</property>\r
<property name="wordWrap">\r
<bool>false</bool>\r
</property>\r
- <property name="columnCount">\r
- <number>4</number>\r
- </property>\r
<attribute name="horizontalHeaderHighlightSections">\r
<bool>false</bool>\r
</attribute>\r
<attribute name="verticalHeaderVisible">\r
<bool>false</bool>\r
</attribute>\r
- <column>\r
- <property name="text">\r
- <string/>\r
- </property>\r
- </column>\r
- <column>\r
- <property name="text">\r
- <string>名前</string>\r
- </property>\r
- </column>\r
- <column>\r
- <property name="text">\r
- <string>サイズ</string>\r
- </property>\r
- </column>\r
- <column>\r
- <property name="text">\r
- <string>更新日時</string>\r
- </property>\r
- </column>\r
</widget>\r
</item>\r
<item>\r
</widget>\r
<customwidgets>\r
<customwidget>\r
- <class>FileTableWidget</class>\r
- <extends>QTableWidget</extends>\r
- <header>filetablewidget.h</header>\r
+ <class>FileTableView</class>\r
+ <extends>QTableView</extends>\r
+ <header>filetableview.h</header>\r
</customwidget>\r
</customwidgets>\r
<tabstops>\r
const StringMap& renameMap() const { return m_RenameMap; }\r
\r
void setWorkingDirectory(const QString &path);\r
- virtual void setNames(const QStringList &names) = 0;\r
+ virtual void setNames(const QFileInfoList &names) = 0;\r
\r
signals:\r
\r
ui->RPanel->setSide("Right");\r
\r
QSettings settings;\r
+ // メニュー項目のチェック状態を初期化する\r
if (settings.value(IniKey_ShowHidden, false).toBool()) {\r
ui->view_Hidden->setChecked(true);\r
}\r
if (settings.value(IniKey_ShowSystem, false).toBool()) {\r
ui->view_System->setChecked(true);\r
}\r
+ // 追加のショートカットキーを設定する\r
+ QList<QKeySequence> shortcuts;\r
+ shortcuts = ui->action_Open->shortcuts();\r
+ shortcuts.append(QKeySequence("M"));\r
+ ui->action_Open->setShortcuts(shortcuts);\r
\r
- // メニューのシグナル/スロットを設定する\r
- connect(ui->action_Command, SIGNAL(triggered()), this, SLOT(onActionCommand()));\r
- connect(ui->action_Exec, SIGNAL(triggered()), this, SLOT(onActionExec()));\r
- connect(ui->action_Open, SIGNAL(triggered()), this, SLOT(onActionOpen()));\r
- connect(ui->action_Quit, SIGNAL(triggered()), this, SLOT(onActionQuit()));\r
- connect(ui->action_Setting, SIGNAL(triggered()), this, SLOT(onActionSetting()));\r
+ shortcuts = ui->action_Exec->shortcuts();\r
+ shortcuts.append(QKeySequence("Shift+M"));\r
+ ui->action_Exec->setShortcuts(shortcuts);\r
\r
- connect(ui->mark_All, SIGNAL(triggered()), this, SLOT(onMarkAll()));\r
- connect(ui->mark_AllFiles, SIGNAL(triggered()), this, SLOT(onMarkAllFiles()));\r
- connect(ui->mark_AllOff, SIGNAL(triggered()), this, SLOT(onMarkAllOff()));\r
- connect(ui->mark_Invert, SIGNAL(triggered()), this, SLOT(onMarkInvert()));\r
- connect(ui->mark_Toggle, SIGNAL(triggered()), this, SLOT(onMarkToggle()));\r
+ // シグナル/スロットを設定する\r
+ connect(ui->action_Setting, SIGNAL(triggered()), this, SLOT(onActionSetting()));\r
+ connect(ui->action_Quit, SIGNAL(triggered()), qApp, SLOT(quit()));\r
+ connect(ui->help_About, SIGNAL(triggered()), this, SLOT(onHelpAbout()));\r
\r
- connect(ui->move_Down, SIGNAL(triggered()), this, SLOT(onMoveCursorDown()));\r
- connect(ui->move_Up, SIGNAL(triggered()), this, SLOT(onMoveCursorUp()));\r
- connect(ui->move_Begin, SIGNAL(triggered()), this, SLOT(onMoveCursorBegin()));\r
- connect(ui->move_End, SIGNAL(triggered()), this, SLOT(onMoveCursorEnd()));\r
- connect(ui->move_Back, SIGNAL(triggered()), this, SLOT(onMoveBack()));\r
- connect(ui->move_Forward, SIGNAL(triggered()), this, SLOT(onMoveForward()));\r
- connect(ui->move_Home, SIGNAL(triggered()), this, SLOT(onMoveHome()));\r
- connect(ui->move_Jump, SIGNAL(triggered()), this, SLOT(onMoveJump()));\r
- connect(ui->move_Parent, SIGNAL(triggered()), this, SLOT(onMoveParent()));\r
- connect(ui->move_Root, SIGNAL(triggered()), this, SLOT(onMoveRoot()));\r
\r
- connect(ui->view_FromOther, SIGNAL(triggered()), this, SLOT(onViewFromOther()));\r
- connect(ui->view_ToOther, SIGNAL(triggered()), this, SLOT(onViewToOther()));\r
- connect(ui->view_Hidden, SIGNAL(triggered()), this, SLOT(onViewHidden()));\r
- connect(ui->view_Sort, SIGNAL(triggered()), this, SLOT(onViewSort()));\r
- connect(ui->view_Swap, SIGNAL(triggered()), this, SLOT(onViewSwap()));\r
- connect(ui->view_System, SIGNAL(triggered()), this, SLOT(onViewSystem()));\r
+// connect(ui->view_FromOther, SIGNAL(triggered()), this, SLOT(onViewFromOther()));\r
+// connect(ui->view_ToOther, SIGNAL(triggered()), this, SLOT(onViewToOther()));\r
+// connect(ui->view_Swap, SIGNAL(triggered()), this, SLOT(onViewSwap()));\r
\r
- connect(ui->cmd_Copy, SIGNAL(triggered()), this, SLOT(onCmdCopy()));\r
- connect(ui->cmd_Delete, SIGNAL(triggered()), this, SLOT(onCmdDelete()));\r
- connect(ui->cmd_Move, SIGNAL(triggered()), this, SLOT(onCmdMove()));\r
- connect(ui->cmd_NewFile, SIGNAL(triggered()), this, SLOT(onCmdNewFile()));\r
- connect(ui->cmd_NewFolder, SIGNAL(triggered()), this, SLOT(onCmdNewFolder()));\r
- connect(ui->cmd_Rename, SIGNAL(triggered()), this, SLOT(onCmdRename()));\r
+// connect(ui->cmd_Copy, SIGNAL(triggered()), this, SLOT(onCmdCopy()));\r
+// connect(ui->cmd_Move, SIGNAL(triggered()), this, SLOT(onCmdMove()));\r
\r
- connect(ui->help_About, SIGNAL(triggered()), this, SLOT(onHelpAbout()));\r
\r
// ウィンドウタイトルを設定する\r
setWindowTitle(tr("げふぅ v%1").arg(VERSION_VALUE));\r
// ウィンドウ初期サイズを設定する\r
resize(800, 600);\r
\r
-\r
- int sortBy, orderBy;\r
- // 左ペインのソート初期値\r
- QDir *dir;\r
- dir = ui->LPanel->dir();\r
- dir->setSorting(QDir::Name); // 0\r
-\r
- sortBy = settings.value(IniKey_LeftSortBy, SortByName).toInt();\r
- switch (sortBy) {\r
- case SortByDate: dir->setSorting(dir->sorting() | QDir::Time); break;\r
- case SortBySize: dir->setSorting(dir->sorting() | QDir::Size); break;\r
- case SortByType: dir->setSorting(dir->sorting() | QDir::Type); break;\r
- default: dir->setSorting(dir->sorting() | QDir::Name); break;\r
- }\r
-\r
- // デフォルトだと文字列は昇順で、数値は降順…orz\r
- orderBy = settings.value(IniKey_LeftOrderBy, OrderByDesc).toInt();\r
- if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
- ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
- {\r
- dir->setSorting(dir->sorting() | QDir::Reversed);\r
- }\r
-\r
- switch (settings.value(IniKey_LeftPutDirs, PutDirsFirst).toInt()) {\r
- case PutDirsFirst: dir->setSorting(dir->sorting() | QDir::DirsFirst); break;\r
- case PutDirsLast: dir->setSorting(dir->sorting() | QDir::DirsLast); break;\r
- }\r
-\r
- if (settings.value(IniKey_LeftIgnoreCase, true).toBool()) {\r
- dir->setSorting(dir->sorting() | QDir::IgnoreCase);\r
- }\r
-\r
- // 右ペインのソート初期値\r
- dir = ui->RPanel->dir();\r
- dir->setSorting(QDir::Name); // 0\r
-\r
- sortBy = settings.value(IniKey_RightSortBy, SortByName).toInt();\r
- switch (sortBy) {\r
- case SortByDate: dir->setSorting(dir->sorting() | QDir::Time); break;\r
- case SortBySize: dir->setSorting(dir->sorting() | QDir::Size); break;\r
- case SortByType: dir->setSorting(dir->sorting() | QDir::Type); break;\r
- default: dir->setSorting(dir->sorting() | QDir::Name); break;\r
- }\r
-\r
- // デフォルトだと文字列は昇順で、数値は降順…orz\r
- orderBy = settings.value(IniKey_RightOrderBy, OrderByDesc).toInt();\r
- if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
- ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
- {\r
- dir->setSorting(dir->sorting() | QDir::Reversed);\r
- }\r
-\r
- switch (settings.value(IniKey_RightPutDirs, PutDirsFirst).toInt()) {\r
- case PutDirsFirst: dir->setSorting(dir->sorting() | QDir::DirsFirst); break;\r
- case PutDirsLast: dir->setSorting(dir->sorting() | QDir::DirsLast); break;\r
- }\r
-\r
- if (settings.value(IniKey_RightIgnoreCase, true).toBool()) {\r
- dir->setSorting(dir->sorting() | QDir::IgnoreCase);\r
- }\r
-\r
- QString path;\r
-\r
- path = settings.value(IniKey_LeftDir, QDir::homePath()).toString();\r
- ui->LPanel->setCurrentFolder(path);\r
-\r
- path = settings.value(IniKey_RightDir, QDir::homePath()).toString();\r
- ui->RPanel->setCurrentFolder(path);\r
}\r
\r
MainWindow::~MainWindow()\r
ui->statusBar->showMessage(str);\r
}\r
\r
+FileTableView *MainWindow::otherSideView(const FileTableView *view) const\r
+{\r
+ QWidget *w = view->parentWidget();\r
+ if (ui->LPanel == w) {\r
+ return ui->RPanel->findChild<FileTableView*>("fileTable");\r
+ }\r
+ else if (ui->RPanel == w) {\r
+ return ui->LPanel->findChild<FileTableView*>("fileTable");\r
+ }\r
+\r
+ qDebug() << w->objectName();\r
+ return NULL;\r
+}\r
+\r
FolderPanel* MainWindow::activePanel()\r
{\r
if (ui->LPanel->fileTable()->hasFocus()) {\r
}\r
\r
///\r
-/// \brief MainWindow::onActionCommand\r
-///\r
-/// コマンドを実行します(X)\r
-///\r
-void MainWindow::onActionCommand()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- QString command = "";\r
- for (int n = 0; n < fp->fileTable()->rowCount(); n++) {\r
- if (fp->fileTable()->item(n, 0)->checkState() == Qt::Checked) {\r
- QString path = fp->fileTable()->item(n, 1)->text();\r
- path = fp->dir()->absoluteFilePath(path);\r
- path = QDir::cleanPath(path);\r
- path = QDir::toNativeSeparators(path);\r
-\r
- QFileInfo info(path);\r
- if (info.isExecutable()) {\r
- command = "\"" + path + "\" " + command;\r
- }\r
- else {\r
- command += " \"" + path + "\"";\r
- }\r
- }\r
- }\r
-\r
- if (command.isEmpty()) {\r
- int row = fp->fileTable()->currentRow();\r
- QString path = fp->fileTable()->item(row, 1)->text();\r
- path = fp->dir()->absoluteFilePath(path);\r
- path = QDir::cleanPath(path);\r
- path = QDir::toNativeSeparators(path);\r
-\r
- command = "\"" + path + "\"";\r
- }\r
-\r
- QInputDialog dlg(this);\r
- dlg.setInputMode(QInputDialog::TextInput);\r
- dlg.setLabelText(tr("コマンドを入力:"));\r
- dlg.setWindowTitle(tr("コマンドを実行"));\r
- dlg.setTextValue(command);\r
- dlg.resize(500, 100);\r
- int ret = dlg.exec();\r
- command = dlg.textValue();\r
- if (ret == QDialog::Accepted && !command.isEmpty()) {\r
- QProcess process(this);\r
- process.setWorkingDirectory(fp->dir()->absolutePath());\r
- if (!process.startDetached(command)) {\r
- QMessageBox::critical(\r
- this,\r
- tr("エラー"),\r
- tr("コマンドの実行に失敗しました。<br/>") + command);\r
- }\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onActionExec\r
-///\r
-/// アプリケーションで開きます(Shift + Enter)\r
-///\r
-void MainWindow::onActionExec()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- QStringList list = selectedItems(fp);\r
- foreach (const QString &path, list) {\r
- QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(path)));\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onActionOpen\r
-///\r
-/// フォルダを開きます(Enter)\r
-///\r
-void MainWindow::onActionOpen()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- int row = fp->fileTable()->currentRow();\r
- QString path = fp->fileTable()->item(row, 1)->text();\r
- path = fp->dir()->absoluteFilePath(path);\r
- QFileInfo info(path);\r
-\r
- if (info.isDir()) {\r
- fp->setCurrentFolder(path);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onActionQuit\r
-///\r
-/// アプリケーションを終了します(Q)\r
-///\r
-void MainWindow::onActionQuit()\r
-{\r
- qApp->quit();\r
-}\r
-\r
-///\r
/// \brief MainWindow::onActionSetting\r
///\r
/// 環境設定ダイアログを表示します(Z)\r
QMessageBox::information(this, tr("情報"), tr("環境設定機能は未実装です。"));\r
}\r
\r
-///\r
-/// \brief MainWindow::on_mark_All_triggered\r
-///\r
-/// すべてマークします(Shift + A)\r
-///\r
-void MainWindow::onMarkAll()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = 0;\r
- if (fp->fileTable()->item(row, 1)->text() == "..") {\r
- row++;\r
- }\r
-\r
- fp->beginUpdate();\r
- int curRow = fp->fileTable()->currentRow();\r
- int rowCount = fp->fileTable()->rowCount();\r
- for (; row < rowCount; row++) {\r
- fp->fileTable()->item(row, 0)->setCheckState(Qt::Checked);\r
- }\r
- fp->fileTable()->setCurrentIndex(\r
- fp->fileTable()->model()->index(curRow, 1));\r
- fp->endUpdate();\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMarkAllFiles\r
-///\r
-/// すべての「ファイル」をマークします(A)\r
-///\r
-void MainWindow::onMarkAllFiles()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = 0;\r
- if (fp->fileTable()->item(row, 1)->text() == "..") {\r
- row++;\r
- }\r
-\r
- fp->beginUpdate();\r
- int curRow = fp->fileTable()->currentRow();\r
- int rowCount = fp->fileTable()->rowCount();\r
- for (; row < rowCount; row++) {\r
- QString path = fp->fileTable()->item(row, 1)->text();\r
- path = fp->dir()->absoluteFilePath(path);\r
-\r
- QFileInfo info(path);\r
- if (info.isDir()) {\r
- fp->fileTable()->item(row, 0)->setCheckState(Qt::Unchecked);\r
- }\r
- else {\r
- fp->fileTable()->item(row, 0)->setCheckState(Qt::Checked);\r
- }\r
- }\r
- fp->fileTable()->setCurrentIndex(\r
- fp->fileTable()->model()->index(curRow, 1));\r
- fp->endUpdate();\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMarkAllOff\r
-///\r
-/// すべてのマークを解除します(U)\r
-///\r
-void MainWindow::onMarkAllOff()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = 0;\r
- if (fp->fileTable()->item(row, 1)->text() == "..") {\r
- row++;\r
- }\r
-\r
- fp->beginUpdate();\r
- int curRow = fp->fileTable()->currentRow();\r
- int rowCount = fp->fileTable()->rowCount();\r
- for (; row < rowCount; row++) {\r
- fp->fileTable()->item(row, 0)->setCheckState(Qt::Unchecked);\r
- }\r
- fp->fileTable()->setCurrentIndex(\r
- fp->fileTable()->model()->index(curRow, 1));\r
- fp->endUpdate();\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMarkInvert\r
-///\r
-/// マークを反転します(I)\r
-///\r
-void MainWindow::onMarkInvert()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = 0;\r
- if (fp->fileTable()->item(row, 1)->text() == "..") {\r
- row++;\r
- }\r
-\r
- fp->beginUpdate();\r
- int curRow = fp->fileTable()->currentRow();\r
- int rowCount = fp->fileTable()->rowCount();\r
- for (; row < rowCount; row++) {\r
- QTableWidgetItem *item = fp->fileTable()->item(row, 0);\r
- if (item->checkState() == Qt::Checked) {\r
- item->setCheckState(Qt::Unchecked);\r
- }\r
- else {\r
- item->setCheckState(Qt::Checked);\r
- }\r
- }\r
- fp->fileTable()->setCurrentIndex(\r
- fp->fileTable()->model()->index(curRow, 1));\r
- fp->endUpdate();\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMarkToggle\r
-///\r
-/// マークを設定または解除します(Space)\r
-///\r
-void MainWindow::onMarkToggle()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = fp->fileTable()->currentRow();\r
- QTableWidgetItem *item = fp->fileTable()->item(row, 0);\r
- if (fp->fileTable()->item(row, 1)->text() != "..") {\r
- if (item->checkState() == Qt::Checked) {\r
- item->setCheckState(Qt::Unchecked);\r
- }\r
- else {\r
- item->setCheckState(Qt::Checked);\r
- }\r
- }\r
- // 最終行でなければ、次のアイテムに移動する\r
- if (row < fp->fileTable()->rowCount() - 1) {\r
- QModelIndex nextIndex = fp->fileTable()->model()->index(row + 1, 1);\r
- fp->fileTable()->setCurrentIndex(nextIndex);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveCursorDown\r
-///\r
-/// カーソルを下に移動します(J)\r
-///\r
-void MainWindow::onMoveCursorDown()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = fp->fileTable()->currentRow();\r
- if (row < fp->fileTable()->rowCount() - 1) {\r
- QModelIndex nextIndex = fp->fileTable()->model()->index(row + 1, 1);\r
- fp->fileTable()->setCurrentIndex(nextIndex);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveCursorUp\r
-///\r
-/// カーソルを上に移動します(K)\r
-///\r
-void MainWindow::onMoveCursorUp()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = fp->fileTable()->currentRow();\r
- if (row > 0) {\r
- QModelIndex nextIndex = fp->fileTable()->model()->index(row - 1, 1);\r
- fp->fileTable()->setCurrentIndex(nextIndex);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveCursorBegin\r
-///\r
-/// カーソルを先頭に移動します(G)\r
-///\r
-void MainWindow::onMoveCursorBegin()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- QModelIndex nextIndex = fp->fileTable()->model()->index(0, 1);\r
- fp->fileTable()->setCurrentIndex(nextIndex);\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveCursorEnd\r
-///\r
-/// カーソルを末尾に移動します(Shift + G)\r
-void MainWindow::onMoveCursorEnd()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- int row = fp->fileTable()->rowCount() - 1;\r
- QModelIndex nextIndex = fp->fileTable()->model()->index(row, 1);\r
- fp->fileTable()->setCurrentIndex(nextIndex);\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveBack\r
-///\r
-/// 前の履歴に戻ります(Alt + ←)\r
-///\r
-void MainWindow::onMoveBack()\r
-{\r
- QMessageBox::information(this, tr("情報"), tr("履歴機能は未実装です。"));\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveForward\r
-///\r
-/// 次の履歴に進みます(Alt + →)\r
-///\r
-void MainWindow::onMoveForward()\r
-{\r
- QMessageBox::information(this, tr("情報"), tr("履歴機能は未実装です。"));\r
-\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveHome\r
-///\r
-/// ホームフォルダに移動します(H)\r
-///\r
-void MainWindow::onMoveHome()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- fp->setCurrentFolder(QDir::homePath());\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveJump\r
-///\r
-/// フォルダを選択して移動します(Shift + J)\r
-void MainWindow::onMoveJump()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- QString path = QFileDialog::getExistingDirectory(\r
- this,\r
- tr("フォルダを選択"),\r
- fp->dir()->absolutePath());\r
- if (!path.isEmpty()) {\r
- fp->setCurrentFolder(path);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveOther\r
-///\r
-/// キーボードフォーカスを他方のパネルに移動します(TAB)\r
-///\r
-void MainWindow::onMoveOther()\r
-{\r
- FolderPanel *fp = this->inactivePanel();\r
- if (fp) {\r
- fp->fileTable()->setFocus();\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveParent\r
-///\r
-/// 親フォルダに移動します(Backspace)\r
-///\r
-void MainWindow::onMoveParent()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- if (!fp->dir()->isRoot()) {\r
- QString path = fp->dir()->absoluteFilePath("..");\r
- fp->setCurrentFolder(path);\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onMoveRoot\r
-///\r
-/// ルートフォルダに移動します()\r
-void MainWindow::onMoveRoot()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (fp == NULL) {\r
- return;\r
- }\r
-\r
- if (!fp->dir()->isRoot()) {\r
- fp->setCurrentFolder(QDir::rootPath());\r
- }\r
-}\r
\r
///\r
/// \brief MainWindow::onViewFromOther\r
fp2->setCurrentFolder(fp1->dir()->absolutePath());\r
}\r
\r
-///\r
-/// \brief MainWindow::onViewHidden\r
-///\r
-/// 隠しファイルの表示/非表示を切り替えます(Shift + H)\r
-///\r
-void MainWindow::onViewHidden()\r
-{\r
- QSettings settings;\r
- bool checked = !settings.value(IniKey_ShowHidden, false).toBool();\r
- settings.setValue(IniKey_ShowHidden, checked);\r
- ui->view_Hidden->setChecked(checked);\r
-#if 1\r
- if (checked) {\r
- ui->LPanel->dir()->setFilter(ui->LPanel->dir()->filter() | QDir::Hidden);\r
- ui->RPanel->dir()->setFilter(ui->RPanel->dir()->filter() | QDir::Hidden);\r
- }\r
- else {\r
- ui->LPanel->dir()->setFilter(ui->LPanel->dir()->filter() ^ QDir::Hidden);\r
- ui->RPanel->dir()->setFilter(ui->RPanel->dir()->filter() ^ QDir::Hidden);\r
- }\r
-#endif\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
-}\r
-\r
-void MainWindow::onViewSort()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- QString iniSec;\r
- SortDialog dlg(this);\r
- if (fp == ui->LPanel) {\r
- iniSec = IniSec_Left;\r
- }\r
- else {\r
- iniSec = IniSec_Right;\r
- }\r
-\r
- dlg.setRightOrLeft(iniSec);\r
- if (dlg.exec() == QDialog::Accepted) {\r
- QSettings settings;\r
- QDir *dir = fp->dir();\r
- dir->setSorting(QDir::Name); // 0\r
-\r
- int sortBy = settings.value(iniSec + slash + IniKey_SortBy, 0).toInt();\r
- switch (sortBy) {\r
- case SortByDate: dir->setSorting(dir->sorting() | QDir::Time); break;\r
- case SortBySize: dir->setSorting(dir->sorting() | QDir::Size); break;\r
- case SortByType: dir->setSorting(dir->sorting() | QDir::Type); break;\r
- default: dir->setSorting(dir->sorting() | QDir::Name); break;\r
- }\r
-\r
- // デフォルトだと文字列は昇順で、数値は降順…orz\r
- int orderBy = settings.value(iniSec + slash + IniKey_OrderBy, 0).toInt();\r
- if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||\r
- ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))\r
- {\r
- dir->setSorting(dir->sorting() | QDir::Reversed);\r
- }\r
-\r
- switch (settings.value(iniSec + slash + IniKey_PutDirs, 0).toInt()) {\r
- case PutDirsFirst: dir->setSorting(dir->sorting() | QDir::DirsFirst); break;\r
- case PutDirsLast: dir->setSorting(dir->sorting() | QDir::DirsLast); break;\r
- }\r
-\r
- if (settings.value(iniSec + slash + IniKey_IgnoreCase, true).toBool()) {\r
- dir->setSorting(dir->sorting() | QDir::IgnoreCase);\r
- }\r
-\r
- fp->setCurrentFolder(fp->dir()->absolutePath());\r
- }\r
-}\r
\r
///\r
/// \brief MainWindow::onViewSwap\r
fp2->setCurrentFolder(path1);\r
}\r
\r
-///\r
-/// \brief MainWindow::onViewSystem\r
-///\r
-/// システムファイルの表示/非表示を切り替えます(Shift + H)\r
-///\r
-void MainWindow::onViewSystem()\r
-{\r
- QSettings settings;\r
- bool checked = !settings.value(IniKey_ShowSystem, false).toBool();\r
- settings.setValue(IniKey_ShowSystem, checked);\r
- ui->view_System->setChecked(checked);\r
-#if 1\r
- QDir *dirs[2];\r
- dirs[0] = ui->LPanel->dir();\r
- dirs[1] = ui->RPanel->dir();\r
- for (int n = 0; n < 2; n++) {\r
- if (checked) {\r
- dirs[n]->setFilter(dirs[n]->filter() | QDir::System);\r
- }\r
- else {\r
- dirs[n]->setFilter(dirs[n]->filter() ^ QDir::System);\r
- }\r
- }\r
-#endif\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
-}\r
\r
///\r
/// \brief MainWindow::onCmdMove\r
return;\r
}\r
\r
- QStringList list = selectedItems(fp);\r
- if (list.isEmpty()) {\r
- return;\r
- }\r
+// QStringList list = selectedItems(fp);\r
+// if (list.isEmpty()) {\r
+// return;\r
+// }\r
\r
- CopyMoveWorker *worker = new CopyMoveWorker();\r
- connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
- this, SLOT(onAskOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
- worker->setCopyList(&list);\r
- worker->setTargetDir(inactivePanel()->dir()->absolutePath());\r
- worker->setMoveMode(true);\r
+// CopyMoveWorker *worker = new CopyMoveWorker();\r
+// connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
+// this, SLOT(onAskOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
+// worker->setCopyList(&list);\r
+// worker->setTargetDir(inactivePanel()->dir()->absolutePath());\r
+// worker->setMoveMode(true);\r
\r
- OperationDialog opDlg(this);\r
- opDlg.setWindowTitle(tr("移動"));\r
- opDlg.setWorker(worker);\r
+// OperationDialog opDlg(this);\r
+// opDlg.setWindowTitle(tr("移動"));\r
+// opDlg.setWorker(worker);\r
\r
- ui->LPanel->UninstallWatcher();\r
- ui->RPanel->UninstallWatcher();\r
- opDlg.exec();\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
+// ui->LPanel->UninstallWatcher();\r
+// ui->RPanel->UninstallWatcher();\r
+// opDlg.exec();\r
+// ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
+// ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
\r
}\r
\r
return;\r
}\r
\r
- QStringList list = selectedItems(fp);\r
- if (list.isEmpty()) {\r
- return;\r
- }\r
+// QStringList list = selectedItems(fp);\r
+// if (list.isEmpty()) {\r
+// return;\r
+// }\r
\r
- CopyMoveWorker *worker = new CopyMoveWorker();\r
- connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
- this, SLOT(onAskOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
- worker->setCopyList(&list);\r
- worker->setTargetDir(inactivePanel()->dir()->absolutePath());\r
- worker->setMoveMode(false);\r
+// CopyMoveWorker *worker = new CopyMoveWorker();\r
+// connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),\r
+// this, SLOT(onAskOverWrite(bool*,int*,int*,QString*,QString,QString)));\r
+// worker->setCopyList(&list);\r
+// worker->setTargetDir(inactivePanel()->dir()->absolutePath());\r
+// worker->setMoveMode(false);\r
\r
- OperationDialog opDlg(this);\r
- opDlg.setWindowTitle(tr("コピー"));\r
- opDlg.setWorker(worker);\r
+// OperationDialog opDlg(this);\r
+// opDlg.setWindowTitle(tr("コピー"));\r
+// opDlg.setWorker(worker);\r
\r
- ui->LPanel->UninstallWatcher();\r
- ui->RPanel->UninstallWatcher();\r
- opDlg.exec();\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
+// ui->LPanel->UninstallWatcher();\r
+// ui->RPanel->UninstallWatcher();\r
+// opDlg.exec();\r
+// ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
+// ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
\r
}\r
\r
}\r
\r
///\r
-/// \brief MainWindow::onCmdDelete\r
-///\r
-/// ファイルを削除します\r
-///\r
-void MainWindow::onCmdDelete()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- QStringList list = selectedItems(fp);\r
- if (list.isEmpty()) {\r
- return;\r
- }\r
-\r
- QString msg;\r
- if (list.size() == 1) {\r
- msg = QFileInfo(list.at(0)).fileName();\r
- }\r
- else {\r
- msg = tr("%1個のアイテム").arg(list.size());\r
- }\r
- int ret = QMessageBox::question(\r
- this,\r
- tr("確認"),\r
- msg + tr("を削除します<br/>よろしいですか?"));\r
- if (ret == QMessageBox::Yes) {\r
- DeleteWorker *worker = new DeleteWorker();\r
- worker->setDeleteList(&list);\r
-\r
- OperationDialog opDlg(this);\r
- opDlg.setWindowTitle(tr("削除"));\r
- opDlg.setWorker(worker);\r
-\r
- ui->LPanel->UninstallWatcher();\r
- ui->RPanel->UninstallWatcher();\r
- opDlg.exec();\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onCmdNewFile\r
-///\r
-/// ファイルを作成します\r
-///\r
-void MainWindow::onCmdNewFile()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- bool bOk;\r
- QString name = QInputDialog::getText(\r
- this,\r
- tr("ファイルを作成"),\r
- tr("ファイル名"),\r
- QLineEdit::Normal,\r
- "",\r
- &bOk);\r
- if (bOk && !name.isEmpty()) {\r
- QFile file(fp->dir()->absoluteFilePath(name));\r
- if (!file.open(QIODevice::WriteOnly)) {\r
- QMessageBox::critical(this,\r
- tr("エラー"),\r
- tr("ファイルの作成に失敗しました。"));\r
- }\r
- else {\r
- file.close();\r
- }\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onCmdNewFolder\r
-///\r
-/// フォルダを作成します\r
-///\r
-void MainWindow::onCmdNewFolder()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- bool bOk;\r
- QString name = QInputDialog::getText(\r
- this,\r
- tr("フォルダを作成"),\r
- tr("フォルダ名"),\r
- QLineEdit::Normal,\r
- "",\r
- &bOk);\r
- if (bOk && !name.isEmpty()) {\r
- if (!fp->dir()->mkpath(name)) {\r
- QMessageBox::critical(this,\r
- tr("エラー"),\r
- tr("フォルダの作成に失敗しました。"));\r
- }\r
- }\r
-}\r
-\r
-///\r
-/// \brief MainWindow::onCmdRename\r
-///\r
-/// 名前を変更します\r
-///\r
-void MainWindow::onCmdRename()\r
-{\r
- FolderPanel *fp = activePanel();\r
- if (!fp) {\r
- return;\r
- }\r
-\r
- QStringList list = selectedItems(fp);\r
- if (list.isEmpty()) {\r
- return;\r
- }\r
-\r
- IRenameDialog *dlg;\r
- if (list.size() == 1) {\r
- dlg = new RenameSingleDialog(this);\r
- }\r
- else {\r
- dlg = new RenameMultiDialog(this);\r
- }\r
- dlg->setWorkingDirectory(fp->dir()->absolutePath());\r
- dlg->setNames(list);\r
- int dlgResult = dlg->exec();\r
- if (dlgResult == QDialog::Accepted && !dlg->renameMap().isEmpty()) {\r
- RenameWorker *worker = new RenameWorker();\r
- worker->setRenameMap(&dlg->renameMap());\r
-\r
- OperationDialog opDlg(this);\r
- opDlg.setWindowTitle(tr("名前を変更"));\r
- opDlg.setWorker(worker);\r
-\r
- ui->LPanel->UninstallWatcher();\r
- ui->RPanel->UninstallWatcher();\r
- opDlg.exec();\r
- ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath());\r
- ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath());\r
- }\r
-}\r
-\r
-///\r
/// \brief MainWindow::onHelpAbout\r
///\r
/// アプリケーションの概要を表示します(?)\r
}\r
\r
///\r
-/// \brief MainWindow::selectedItems\r
-/// \param fp フォルダパネルへのポインタ\r
-/// \return 選択アイテムのフルパスのリスト\r
-///\r
-/// 選択アイテムのフルパスのリストを取得します\r
-///\r
-QStringList MainWindow::selectedItems(FolderPanel *fp)\r
-{\r
- QStringList list;\r
- for (int n = 0; n < fp->fileTable()->rowCount(); n++) {\r
- if (fp->fileTable()->item(n, 0)->checkState() == Qt::Checked) {\r
- list << fp->dir()->absoluteFilePath(fp->fileTable()->item(n, 1)->text());\r
- }\r
- }\r
-\r
- if (list.isEmpty()) {\r
- int row = fp->fileTable()->currentRow();\r
- QString name = fp->fileTable()->item(row, 1)->text();\r
- if (name != "..") {\r
- list << fp->dir()->absoluteFilePath(name);\r
- }\r
- }\r
-\r
- return list;\r
-}\r
-\r
-///\r
/// \brief getMainWnd\r
/// \return メインウィンドウのポインタ\r
///\r
#include <QFileInfo>\r
#include <QMainWindow>\r
class FolderPanel;\r
+class FileTableView;\r
\r
namespace Ui {\r
class MainWindow;\r
~MainWindow();\r
\r
void setStatusText(const QString &str);\r
+ FileTableView* otherSideView(const FileTableView *view) const;\r
\r
public slots:\r
- void onActionCommand();\r
- void onActionExec();\r
- void onActionOpen();\r
- void onActionQuit();\r
void onActionSetting();\r
-\r
- void onMarkAll();\r
- void onMarkAllFiles();\r
- void onMarkAllOff();\r
- void onMarkInvert();\r
- void onMarkToggle();\r
-\r
- void onMoveCursorDown();\r
- void onMoveCursorUp();\r
- void onMoveCursorBegin();\r
- void onMoveCursorEnd();\r
- void onMoveBack();\r
- void onMoveForward();\r
- void onMoveHome();\r
- void onMoveJump();\r
- void onMoveOther();\r
- void onMoveParent();\r
- void onMoveRoot();\r
-\r
void onViewFromOther();\r
void onViewToOther();\r
- void onViewHidden();\r
- void onViewSort();\r
void onViewSwap();\r
- void onViewSystem();\r
-\r
void onCmdMove();\r
void onCmdCopy();\r
- void onCmdDelete();\r
- void onCmdNewFile();\r
- void onCmdNewFolder();\r
- void onCmdRename();\r
-\r
void onHelpAbout();\r
\r
private slots:\r
\r
FolderPanel* activePanel();\r
FolderPanel* inactivePanel();\r
- QStringList selectedItems(FolderPanel *fp);\r
};\r
\r
\r
<height>0</height>\r
</size>\r
</property>\r
+ <property name="focusPolicy">\r
+ <enum>Qt::NoFocus</enum>\r
+ </property>\r
<property name="text">\r
<string>PushButton</string>\r
</property>\r
<height>0</height>\r
</size>\r
</property>\r
+ <property name="focusPolicy">\r
+ <enum>Qt::NoFocus</enum>\r
+ </property>\r
<property name="text">\r
<string>PushButton</string>\r
</property>\r
<height>0</height>\r
</size>\r
</property>\r
+ <property name="focusPolicy">\r
+ <enum>Qt::NoFocus</enum>\r
+ </property>\r
<property name="text">\r
<string>PushButton</string>\r
</property>\r
<height>0</height>\r
</size>\r
</property>\r
+ <property name="focusPolicy">\r
+ <enum>Qt::NoFocus</enum>\r
+ </property>\r
<property name="text">\r
<string>PushButton</string>\r
</property>\r
<x>0</x>\r
<y>0</y>\r
<width>662</width>\r
- <height>22</height>\r
+ <height>24</height>\r
</rect>\r
</property>\r
<widget class="QMenu" name="menu_File">\r
<addaction name="separator"/>\r
<addaction name="move_Down"/>\r
<addaction name="move_Up"/>\r
+ <addaction name="move_Begin"/>\r
+ <addaction name="move_End"/>\r
</widget>\r
<widget class="QMenu" name="menu_Operate">\r
<property name="title">\r
delete ui;\r
}\r
\r
-void RenameMultiDialog::setNames(const QStringList &names)\r
+void RenameMultiDialog::setNames(const QFileInfoList &names)\r
{\r
- foreach (const QString &name, names) {\r
- QFileInfo info(name);\r
-\r
+ foreach (const QFileInfo &info, names) {\r
int row = ui->tableWidget->rowCount();\r
ui->tableWidget->insertRow(row);\r
\r
explicit RenameMultiDialog(QWidget *parent = 0);\r
~RenameMultiDialog();\r
\r
- void setNames(const QStringList &names);\r
+ void setNames(const QFileInfoList &names);\r
\r
private slots:\r
void on_btn_UpperAll_clicked();\r
delete ui;\r
}\r
\r
-void RenameSingleDialog::setNames(const QStringList &names)\r
+void RenameSingleDialog::setNames(const QFileInfoList &names)\r
{\r
- QFileInfo info(names.at(0));\r
- ui->nameBefore->setText(info.fileName());\r
- ui->nameAfter->setText(info.fileName());\r
+ ui->nameBefore->setText(names[0].fileName());\r
+ ui->nameAfter->setText(names[0].fileName());\r
}\r
\r
void RenameSingleDialog::on_btn_UpperAll_clicked()\r
explicit RenameSingleDialog(QWidget *parent = 0);\r
~RenameSingleDialog();\r
\r
- void setNames(const QStringList &names);\r
+ void setNames(const QFileInfoList &names);\r
\r
private slots:\r
void on_btn_UpperAll_clicked();\r