From 5c59c70803f50d1c9bbf2b3a9bb637c747ca9053 Mon Sep 17 00:00:00 2001 From: Masayuki Satoh Date: Tue, 19 Aug 2014 15:26:02 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B7=E3=83=A7=E3=83=BC=E3=83=88=E3=82=AB?= =?utf8?q?=E3=83=83=E3=83=88=E3=82=AD=E3=83=BC=E3=81=AEMac=E5=AF=BE?= =?utf8?q?=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- filetablewidget.cpp | 277 +++++++--------------------------------------------- filetablewidget.h | 3 + folderpanel.cpp | 1 + folderpanel.h | 4 + mainwindow.cpp | 84 ++++++++-------- mainwindow.ui | 6 +- 6 files changed, 88 insertions(+), 287 deletions(-) diff --git a/filetablewidget.cpp b/filetablewidget.cpp index 56e845f..ad28ddd 100644 --- a/filetablewidget.cpp +++ b/filetablewidget.cpp @@ -3,6 +3,10 @@ #include "filetablewidget.h" #include #include +#include +#include +#include +#include FileTableWidget::FileTableWidget(QWidget *parent) : QTableWidget(parent) @@ -16,252 +20,33 @@ FileTableWidget::FileTableWidget(QWidget *parent) : void FileTableWidget::keyPressEvent(QKeyEvent *event) { - bool accepted = false; - switch (event->key()) { - case Qt::Key_A: - // A すべてのファイルをマーク - // Shift + A すべてマーク - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMarkAllFiles(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onMarkAll(); - accepted = true; - } - break; - - case Qt::Key_C: - // Ctrl + C ファイルをコピー - if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdCopy(); - accepted = true; - } - break; - - case Qt::Key_D: - // Ctrl + D ファイルを削除 - if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdDelete(); - accepted = true; - } - break; - - case Qt::Key_E: - // E エディタで開く - // Ctrl + E ファイルを作成 - if (event->modifiers() == Qt::NoModifier) { - } - else if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdNewFile(); - accepted = true; - } - break; - - case Qt::Key_G: - // G カーソルを先頭に移動 - // Shift + G カーソルを末尾に移動 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveCursorBegin(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onMoveCursorEnd(); - accepted = true; - } - break; - - case Qt::Key_H: - // H ホームフォルダに移動 - // Shift + H 隠しファイルを表示/非表示 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveHome(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onViewHidden(); - accepted = true; - } - break; - - case Qt::Key_I: - // I マークを反転 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMarkInvert(); - accepted = true; - } - break; - - case Qt::Key_J: - // J カーソルを下に移動 - // Shift + J フォルダを選択して移動 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveCursorDown(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onMoveJump(); - accepted = true; - } - break; - - case Qt::Key_K: - // K カーソルを上に移動 - // Ctrl + K フォルダを作成 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveCursorUp(); - accepted = true; - } - else if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdNewFolder(); - accepted = true; - } - break; - - case Qt::Key_M: - // M 開く - // Shift + M アプリケーションで開く - // Ctrl + M ファイルの移動 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onActionOpen(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onActionExec(); - accepted = true; - } - else if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdMove(); - accepted = true; - } - break; - - case Qt::Key_O: - // O 隣のパネルと同じフォルダを表示 - // Shift + O 隣のパネルに同じフォルダを表示 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onViewFromOther(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onViewToOther(); - accepted = true; - } - break; - - case Qt::Key_Q: - // Q アプリケーションを終了 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onActionQuit(); - accepted = true; - } - break; - - case Qt::Key_R: - // R 履歴を表示 - // Ctrl + R 名前を変更 - if (event->modifiers() == Qt::NoModifier) { - } - else if (event->modifiers() == Qt::ControlModifier) { - getMainWnd()->onCmdRename(); - accepted = true; - } - break; - - case Qt::Key_S: - // S ソート方法を選択 - // Shift + S システムファイルを表示/非表示 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onViewSort(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onViewSystem(); - accepted = true; - } - break; - - case Qt::Key_U: - // U すべてのマークを解除 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMarkAllOff(); - accepted = true; - } - break; - - case Qt::Key_W: - // W 表示フォルダを交換 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onViewSwap(); - accepted = true; - } - break; - - case Qt::Key_X: - // X コマンドを実行 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onActionCommand(); - accepted = true; - } - break; - - case Qt::Key_Question: - // ? アプリケーション情報を表示 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onHelpAbout(); - accepted = true; - } - break; - - case Qt::Key_Space: - // マーク/解除 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMarkToggle(); - accepted = true; - } - break; - - case Qt::Key_Tab: - // 隣のパネルに移動 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveOther(); - accepted = true; - } - break; - - case Qt::Key_Backspace: - // BS 親フォルダに移動 - // Shift + BS ルートフォルダに移動 - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onMoveParent(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onMoveRoot(); - accepted = true; - } - break; - - case Qt::Key_Return: - // RET 開く - // Shift + RET アプリケーションで開く - if (event->modifiers() == Qt::NoModifier) { - getMainWnd()->onActionOpen(); - accepted = true; - } - else if (event->modifiers() == Qt::ShiftModifier) { - getMainWnd()->onActionExec(); - accepted = true; + // Macでアクションが処理されないケースがあるため、 + // キーイベントを拾ってアクションシグナルを起動する + QString modifier = QString::null; + if (event->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; } + if (event->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; } + if (event->modifiers() & Qt::AltModifier) { modifier += "Alt+"; } + if (event->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; } + + QString key = QKeySequence(event->key()).toString(); + QString ksq = QKeySequence(modifier + key).toString(); + + if (!ksq.isEmpty()) { + foreach (QObject *obj, getMainWnd()->children()) { + QAction *action = qobject_cast(obj); + if (action) { + if (ksq == action->shortcut().toString()) { + qDebug() << "emit " << ksq << " " << action->objectName(); + emit action->triggered(); + event->accept(); + return; + } + } } - break; } - if (accepted) { - event->accept(); - } - else { - QTableWidget::keyPressEvent(event); - } + qDebug() << ksq; + QTableWidget::keyPressEvent(event); } void FileTableWidget::onCellChanged(int row, int column) @@ -282,3 +67,9 @@ void FileTableWidget::onCellChanged(int row, int column) selectRow(row); } } + +const QString& FileTableWidget::side() const +{ + FolderPanel *fp = static_cast(parentWidget()); + return fp->side(); +} diff --git a/filetablewidget.h b/filetablewidget.h index 60c6c68..7af8987 100644 --- a/filetablewidget.h +++ b/filetablewidget.h @@ -16,6 +16,9 @@ public slots: protected: void keyPressEvent(QKeyEvent *event); + +private: + const QString& side() const; }; #endif // FILETABLEWIDGET_H diff --git a/folderpanel.cpp b/folderpanel.cpp index 1a5bff7..91ceaff 100644 --- a/folderpanel.cpp +++ b/folderpanel.cpp @@ -36,6 +36,7 @@ FolderPanel::FolderPanel(QWidget *parent) : m_bUpdating(false) { ui->setupUi(this); + qDebug() << objectName(); // セル(チェックボックス)の変更 connect(ui->fileTable, SIGNAL(cellChanged(int,int)), diff --git a/folderpanel.h b/folderpanel.h index 673a9a7..af50d82 100644 --- a/folderpanel.h +++ b/folderpanel.h @@ -42,12 +42,16 @@ public: } bool isUpdating() const { return m_bUpdating; } + void setSide(const QString &side) { m_Side = side; } + const QString& side() const { return m_Side; } + private: Ui::FolderPanel *ui; QDir m_dir; QFileIconProvider m_IconFactory; QFileSystemWatcher *m_fsWatcher; bool m_bUpdating; + QString m_Side; // "Left" or "Right" private slots: void onUpdateMark(int, int); diff --git a/mainwindow.cpp b/mainwindow.cpp index e45287f..fd3a878 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -24,6 +24,8 @@ MainWindow::MainWindow(QWidget *parent) : ui(new Ui::MainWindow) { ui->setupUi(this); + ui->LPanel->setSide("Left"); + ui->RPanel->setSide("Right"); QSettings settings; if (settings.value(IniKey_ShowHidden, false).toBool()) { @@ -85,7 +87,7 @@ MainWindow::MainWindow(QWidget *parent) : int sortBy, orderBy; // 左ペインのソート初期値 QDir *dir; - dir = ui->folderPanel_L->dir(); + dir = ui->LPanel->dir(); dir->setSorting(QDir::Name); // 0 sortBy = settings.value(IniKey_LeftSortBy, SortByName).toInt(); @@ -114,7 +116,7 @@ MainWindow::MainWindow(QWidget *parent) : } // 右ペインのソート初期値 - dir = ui->folderPanel_R->dir(); + dir = ui->RPanel->dir(); dir->setSorting(QDir::Name); // 0 sortBy = settings.value(IniKey_RightSortBy, SortByName).toInt(); @@ -145,18 +147,18 @@ MainWindow::MainWindow(QWidget *parent) : QString path; path = settings.value(IniKey_LeftDir, QDir::homePath()).toString(); - ui->folderPanel_L->setCurrentFolder(path); + ui->LPanel->setCurrentFolder(path); path = settings.value(IniKey_RightDir, QDir::homePath()).toString(); - ui->folderPanel_R->setCurrentFolder(path); + ui->RPanel->setCurrentFolder(path); } MainWindow::~MainWindow() { QSettings settings; - settings.setValue(IniKey_LeftDir, ui->folderPanel_L->dir()->absolutePath()); - settings.setValue(IniKey_RightDir, ui->folderPanel_R->dir()->absolutePath()); + settings.setValue(IniKey_LeftDir, ui->LPanel->dir()->absolutePath()); + settings.setValue(IniKey_RightDir, ui->RPanel->dir()->absolutePath()); delete ui; } @@ -168,11 +170,11 @@ void MainWindow::setStatusText(const QString &str) FolderPanel* MainWindow::activePanel() { - if (ui->folderPanel_L->fileTable()->hasFocus()) { - return ui->folderPanel_L; + if (ui->LPanel->fileTable()->hasFocus()) { + return ui->LPanel; } - if (ui->folderPanel_R->fileTable()->hasFocus()) { - return ui->folderPanel_R; + if (ui->RPanel->fileTable()->hasFocus()) { + return ui->RPanel; } return NULL; @@ -181,11 +183,11 @@ FolderPanel* MainWindow::activePanel() FolderPanel* MainWindow::inactivePanel() { FolderPanel *fp = activePanel(); - if (fp == ui->folderPanel_L) { - return ui->folderPanel_R; + if (fp == ui->LPanel) { + return ui->RPanel; } - if (fp == ui->folderPanel_R) { - return ui->folderPanel_L; + if (fp == ui->RPanel) { + return ui->LPanel; } return NULL; @@ -685,16 +687,16 @@ void MainWindow::onViewHidden() ui->view_Hidden->setChecked(checked); #if 1 if (checked) { - ui->folderPanel_L->dir()->setFilter(ui->folderPanel_L->dir()->filter() | QDir::Hidden); - ui->folderPanel_R->dir()->setFilter(ui->folderPanel_R->dir()->filter() | QDir::Hidden); + ui->LPanel->dir()->setFilter(ui->LPanel->dir()->filter() | QDir::Hidden); + ui->RPanel->dir()->setFilter(ui->RPanel->dir()->filter() | QDir::Hidden); } else { - ui->folderPanel_L->dir()->setFilter(ui->folderPanel_L->dir()->filter() ^ QDir::Hidden); - ui->folderPanel_R->dir()->setFilter(ui->folderPanel_R->dir()->filter() ^ QDir::Hidden); + ui->LPanel->dir()->setFilter(ui->LPanel->dir()->filter() ^ QDir::Hidden); + ui->RPanel->dir()->setFilter(ui->RPanel->dir()->filter() ^ QDir::Hidden); } #endif - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } void MainWindow::onViewSort() @@ -706,7 +708,7 @@ void MainWindow::onViewSort() QString iniSec; SortDialog dlg(this); - if (fp == ui->folderPanel_L) { + if (fp == ui->LPanel) { iniSec = IniSec_Left; } else { @@ -781,8 +783,8 @@ void MainWindow::onViewSystem() ui->view_System->setChecked(checked); #if 1 QDir *dirs[2]; - dirs[0] = ui->folderPanel_L->dir(); - dirs[1] = ui->folderPanel_R->dir(); + dirs[0] = ui->LPanel->dir(); + dirs[1] = ui->RPanel->dir(); for (int n = 0; n < 2; n++) { if (checked) { dirs[n]->setFilter(dirs[n]->filter() | QDir::System); @@ -792,8 +794,8 @@ void MainWindow::onViewSystem() } } #endif - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } /// @@ -824,11 +826,11 @@ void MainWindow::onCmdMove() opDlg.setWindowTitle(tr("移動")); opDlg.setWorker(worker); - ui->folderPanel_L->UninstallWatcher(); - ui->folderPanel_R->UninstallWatcher(); + ui->LPanel->UninstallWatcher(); + ui->RPanel->UninstallWatcher(); opDlg.exec(); - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } @@ -860,11 +862,11 @@ void MainWindow::onCmdCopy() opDlg.setWindowTitle(tr("コピー")); opDlg.setWorker(worker); - ui->folderPanel_L->UninstallWatcher(); - ui->folderPanel_R->UninstallWatcher(); + ui->LPanel->UninstallWatcher(); + ui->RPanel->UninstallWatcher(); opDlg.exec(); - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } @@ -938,11 +940,11 @@ void MainWindow::onCmdDelete() opDlg.setWindowTitle(tr("削除")); opDlg.setWorker(worker); - ui->folderPanel_L->UninstallWatcher(); - ui->folderPanel_R->UninstallWatcher(); + ui->LPanel->UninstallWatcher(); + ui->RPanel->UninstallWatcher(); opDlg.exec(); - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } } @@ -1043,11 +1045,11 @@ void MainWindow::onCmdRename() opDlg.setWindowTitle(tr("名前を変更")); opDlg.setWorker(worker); - ui->folderPanel_L->UninstallWatcher(); - ui->folderPanel_R->UninstallWatcher(); + ui->LPanel->UninstallWatcher(); + ui->RPanel->UninstallWatcher(); opDlg.exec(); - ui->folderPanel_L->setCurrentFolder(ui->folderPanel_L->dir()->absolutePath()); - ui->folderPanel_R->setCurrentFolder(ui->folderPanel_R->dir()->absolutePath()); + ui->LPanel->setCurrentFolder(ui->LPanel->dir()->absolutePath()); + ui->RPanel->setCurrentFolder(ui->RPanel->dir()->absolutePath()); } } diff --git a/mainwindow.ui b/mainwindow.ui index d26cf96..49a0d61 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -24,7 +24,7 @@ Qt::Horizontal - + 0 @@ -32,7 +32,7 @@ - + 0 @@ -210,7 +210,7 @@ 0 0 662 - 24 + 22 -- 2.11.0