2 #include "copymoveworker.h"
\r
3 #include "deleteworker.h"
\r
4 #include "filetablemodel.h"
\r
5 #include "filetableview.h"
\r
6 #include "historydialog.h"
\r
7 #include "mainwindow.h"
\r
8 #include "operationdialog.h"
\r
9 #include "overwritedialog.h"
\r
10 #include "renamemultidialog.h"
\r
11 #include "renamesingledialog.h"
\r
12 #include "renameworker.h"
\r
13 #include "sortdialog.h"
\r
16 #include <QDesktopServices>
\r
17 #include <QInputDialog>
\r
18 #include <QMessageBox>
\r
22 #include <QSettings>
\r
23 #include <QFileDialog>
\r
24 #include <QKeyEvent>
\r
25 #include <QStatusBar>
\r
27 #define CHECK_FOCUS { \
\r
28 if (!hasFocus()) { return; } \
\r
31 #define MENU_TRRIGGERED(x) \
\r
32 getMainWnd()->findChild<QAction*>(#x), SIGNAL(triggered())
\r
33 #define MENU_TOGGLED(x) \
\r
34 getMainWnd()->findChild<QAction*>(#x), SIGNAL(toggled(bool))
\r
36 FileTableView::FileTableView(QWidget *parent) :
\r
42 connect(MENU_TRRIGGERED(action_Open), this, SLOT(setPath()));
\r
43 connect(MENU_TRRIGGERED(action_Exec), this, SLOT(openUrl()));
\r
44 connect(MENU_TRRIGGERED(action_OpenEditor), this, SLOT(XXX()));
\r
45 connect(MENU_TRRIGGERED(action_Command), this, SLOT(kickProcess()));
\r
47 connect(MENU_TRRIGGERED(mark_Toggle), this, SLOT(toggleChecked()));
\r
48 connect(MENU_TRRIGGERED(mark_All), this, SLOT(checkAllItems()));
\r
49 connect(MENU_TRRIGGERED(mark_AllFiles), this, SLOT(checkAllFiles()));
\r
50 connect(MENU_TRRIGGERED(mark_AllOff), this, SLOT(uncheckAllItems()));
\r
51 connect(MENU_TRRIGGERED(mark_Invert), this, SLOT(invertAllChecked()));
\r
53 connect(MENU_TRRIGGERED(view_FromOther), this, SLOT(setPathFromOther()));
\r
54 connect(MENU_TRRIGGERED(view_ToOther), this, SLOT(setPathToOther()));
\r
55 connect(MENU_TRRIGGERED(view_Swap), this, SLOT(swapPath()));
\r
56 connect(MENU_TRRIGGERED(view_Sort), this, SLOT(setSort()));
\r
58 connect(MENU_TRRIGGERED(move_Back), this, SLOT(back()));
\r
59 connect(MENU_TRRIGGERED(move_Forward), this, SLOT(forward()));
\r
60 connect(MENU_TRRIGGERED(move_History), this, SLOT(showHidtory()));
\r
61 connect(MENU_TRRIGGERED(move_Home), this, SLOT(jumpToHome()));
\r
62 connect(MENU_TRRIGGERED(move_Parent), this, SLOT(jumpToParent()));
\r
63 connect(MENU_TRRIGGERED(move_Root), this, SLOT(jumpToRoot()));
\r
64 connect(MENU_TRRIGGERED(move_Jump), this, SLOT(jumpTo()));
\r
65 connect(MENU_TRRIGGERED(move_Down), this, SLOT(cursorDown()));
\r
66 connect(MENU_TRRIGGERED(move_Up), this, SLOT(cursorUp()));
\r
67 connect(MENU_TRRIGGERED(move_Begin), this, SLOT(cursorToBegin()));
\r
68 connect(MENU_TRRIGGERED(move_End), this, SLOT(cursorToEnd()));
\r
70 connect(MENU_TRRIGGERED(cmd_Copy), this, SLOT(cmdCopy()));
\r
71 connect(MENU_TRRIGGERED(cmd_Move), this, SLOT(cmdMove()));
\r
72 connect(MENU_TRRIGGERED(cmd_Delete), this, SLOT(cmdDelete()));
\r
73 connect(MENU_TRRIGGERED(cmd_Rename), this, SLOT(cmdRename()));
\r
74 connect(MENU_TRRIGGERED(cmd_NewFile), this, SLOT(newFile()));
\r
75 connect(MENU_TRRIGGERED(cmd_NewFolder), this, SLOT(newFolder()));
\r
77 connect(getMainWnd(), SIGNAL(showHiddenFiles(bool)),
\r
78 this, SLOT(showHiddenFiles(bool)));
\r
79 connect(getMainWnd(), SIGNAL(showSystemFiles(bool)),
\r
80 this, SLOT(showSystemFiles(bool)));
\r
82 connect(this, SIGNAL(doubleClicked(QModelIndex)),
\r
83 this, SLOT(setRootIndex(QModelIndex)));
\r
86 FileTableView::~FileTableView()
\r
89 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
91 settings.setValue(side() + slash + IniKey_Dir, m->absolutePath());
\r
94 QString FileTableView::side() const
\r
99 void FileTableView::setSide(const QString &side)
\r
103 // コンストラクタではステータスバーが生成されていないため
\r
104 // このタイミングでconnectする
\r
105 connect(this, SIGNAL(indexChanged(QString)),
\r
106 getMainWnd()->statusBar(), SLOT(showMessage(QString)));
\r
109 void FileTableView::setRootPath(const QString &path, bool addHistory)
\r
111 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
112 QFileInfo info(path);
\r
113 if (info.isDir()) {
\r
114 setUpdatesEnabled(false);
\r
115 m->setPath(info.absoluteFilePath());
\r
116 setUpdatesEnabled(true);
\r
119 m_history.add(info.absoluteFilePath());
\r
123 setCurrentIndex(m->index(0, 0));
\r
127 QFileInfoList FileTableView::selectedItems() const
\r
129 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
130 QFileInfoList list = m->checkedItems();
\r
131 if (list.isEmpty()) {
\r
132 QFileInfo info = m->fileInfo(currentIndex());
\r
133 if (info.fileName() != "..") {
\r
141 void FileTableView::updateMenu()
\r
143 if (m_history.isEmpty()) {
\r
144 getMainWnd()->findChild<QAction*>("move_Back")->setEnabled(false);
\r
145 getMainWnd()->findChild<QAction*>("move_Forward")->setEnabled(false);
\r
149 getMainWnd()->findChild<QAction*>("move_Back")
\r
150 ->setEnabled(!m_history.isBegin());
\r
151 getMainWnd()->findChild<QAction*>("move_Forward")
\r
152 ->setEnabled(!m_history.isEnd());
\r
156 void FileTableView::setPath()
\r
160 setRootIndex(currentIndex());
\r
163 void FileTableView::openUrl()
\r
167 QFileInfoList list = selectedItems();
\r
168 foreach (const QFileInfo &info, list) {
\r
169 QString path = QDir::toNativeSeparators(info.absoluteFilePath());
\r
170 QDesktopServices::openUrl(QUrl("file:///" + path));
\r
174 void FileTableView::kickProcess()
\r
178 QFileInfoList list = selectedItems();
\r
179 QString command = QString::null;
\r
180 foreach (const QFileInfo &info, list) {
\r
181 if (info.isExecutable()) {
\r
182 command = QQ(info.fileName()) + " " + command;
\r
185 command += " " + QQ(info.fileName());
\r
189 QInputDialog dlg(this);
\r
190 dlg.setInputMode(QInputDialog::TextInput);
\r
191 dlg.setWindowTitle(tr("コマンドを実行"));
\r
192 dlg.setLabelText(tr("コマンド:"));
\r
193 dlg.setTextValue(command);
\r
195 QSize szMainWnd = getMainWnd()->size();
\r
196 QSize szDialog = dlg.size();
\r
197 szDialog.setWidth(szMainWnd.width() * 0.8);
\r
198 dlg.resize(szDialog);
\r
200 int ret = dlg.exec();
\r
201 command = dlg.textValue();
\r
202 if (ret == QDialog::Accepted && !command.isEmpty()) {
\r
203 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
204 QProcess process(this);
\r
205 process.setWorkingDirectory(m->absolutePath());
\r
206 if (!process.startDetached(command)) {
\r
207 QMessageBox::critical(
\r
209 tr("コマンドの実行に失敗しました。<br/>") + command);
\r
214 void FileTableView::toggleChecked()
\r
218 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
220 QModelIndex index = currentIndex();
\r
222 QFileInfo info = m->fileInfo(index);
\r
223 if (info.fileName() != "..") {
\r
224 if (m->checkState(index) == Qt::Checked) {
\r
225 m->setCheckState(index, Qt::Unchecked);
\r
228 m->setCheckState(index, Qt::Checked);
\r
231 // 最終行でなければ、次のアイテムに移動する
\r
232 if (index.row() == m->rowCount() - 1) {
\r
233 setCurrentIndex(index);
\r
235 else if (index.row() < m->rowCount() - 1) {
\r
236 qDebug() << "set = " << index.row() + 1;
\r
237 setCurrentIndex(m->index(index.row() + 1, 1));
\r
241 void FileTableView::checkAllItems()
\r
245 QModelIndex index = currentIndex();
\r
246 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
247 setUpdatesEnabled(false);
\r
248 m->setCheckStateAll(Qt::Checked);
\r
249 setUpdatesEnabled(true);
\r
250 setCurrentIndex(index);
\r
253 void FileTableView::checkAllFiles()
\r
257 QModelIndex index = currentIndex();
\r
258 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
259 setUpdatesEnabled(false);
\r
260 for (int n = 0; n < m->rowCount(); n++) {
\r
261 QModelIndex index = m->index(n, 0);
\r
262 QFileInfo info = m->fileInfo(index);
\r
263 if (info.isDir()) {
\r
264 m->setCheckState(index, Qt::Unchecked);
\r
267 m->setCheckState(index, Qt::Checked);
\r
271 setUpdatesEnabled(true);
\r
272 setCurrentIndex(index);
\r
275 void FileTableView::uncheckAllItems()
\r
279 QModelIndex index = currentIndex();
\r
280 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
281 setUpdatesEnabled(false);
\r
282 m->setCheckStateAll(Qt::Unchecked);
\r
283 setUpdatesEnabled(true);
\r
284 setCurrentIndex(index);
\r
287 void FileTableView::invertAllChecked()
\r
291 QModelIndex index = currentIndex();
\r
292 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
293 setUpdatesEnabled(false);
\r
294 for (int n = 0; n < m->rowCount(); n++) {
\r
295 QModelIndex index = m->index(n, 0);
\r
296 if (m->checkState(index) == Qt::Checked) {
\r
297 m->setCheckState(index, Qt::Unchecked);
\r
300 m->setCheckState(index, Qt::Checked);
\r
304 setUpdatesEnabled(true);
\r
305 setCurrentIndex(index);
\r
308 void FileTableView::setPathFromOther()
\r
312 FileTableView *other = getMainWnd()->otherSideView(this);
\r
313 if (other == NULL) {
\r
317 FileTableModel *mOther = static_cast<FileTableModel*>(other->model());
\r
319 setRootPath(mOther->absolutePath(), true);
\r
322 void FileTableView::setPathToOther()
\r
326 FileTableView *other = getMainWnd()->otherSideView(this);
\r
327 if (other == NULL) {
\r
331 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
333 other->setRootPath(m->absolutePath(), true);
\r
336 void FileTableView::swapPath()
\r
340 FileTableView *other = getMainWnd()->otherSideView(this);
\r
341 if (other == NULL) {
\r
345 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
346 FileTableModel *mOther = static_cast<FileTableModel*>(other->model());
\r
348 QString path = m->absolutePath();
\r
349 QString pathOther = mOther->absolutePath();
\r
351 setRootPath(pathOther, true);
\r
352 other->setRootPath(path, true);
\r
355 void FileTableView::showHiddenFiles(bool show)
\r
357 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
359 m->setFilter(m->filter() | QDir::Hidden);
\r
362 m->setFilter(m->filter() ^ QDir::Hidden);
\r
365 setUpdatesEnabled(false);
\r
367 setUpdatesEnabled(true);
\r
370 void FileTableView::showSystemFiles(bool show)
\r
372 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
374 m->setFilter(m->filter() | QDir::System);
\r
377 m->setFilter(m->filter() ^ QDir::System);
\r
380 setUpdatesEnabled(false);
\r
382 setUpdatesEnabled(true);
\r
385 void FileTableView::setSort()
\r
389 SortDialog dlg(this);
\r
390 dlg.setRightOrLeft(side());
\r
391 if (dlg.exec() == QDialog::Accepted) {
\r
392 QSettings settings;
\r
393 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
394 m->setSorting(QDir::Name); // 0
\r
396 int sortBy = settings.value(side() + slash + IniKey_SortBy, 0).toInt();
\r
398 case SortByDate: m->setSorting(m->sorting() | QDir::Time); break;
\r
399 case SortBySize: m->setSorting(m->sorting() | QDir::Size); break;
\r
400 case SortByType: m->setSorting(m->sorting() | QDir::Type); break;
\r
401 default: m->setSorting(m->sorting() | QDir::Name); break;
\r
404 // デフォルトだと文字列は昇順で、数値は降順…orz
\r
405 int orderBy = settings.value(side() + slash + IniKey_OrderBy, 0).toInt();
\r
406 if (((sortBy == SortByName || sortBy == SortByType) && orderBy == OrderByDesc) ||
\r
407 ((sortBy == SortByDate || sortBy == SortBySize) && orderBy == OrderByAsc))
\r
409 m->setSorting(m->sorting() | QDir::Reversed);
\r
412 switch (settings.value(side() + slash + IniKey_PutDirs, 0).toInt()) {
\r
413 case PutDirsFirst: m->setSorting(m->sorting() | QDir::DirsFirst); break;
\r
414 case PutDirsLast: m->setSorting(m->sorting() | QDir::DirsLast); break;
\r
417 if (settings.value(side() + slash + IniKey_IgnoreCase, true).toBool()) {
\r
418 m->setSorting(m->sorting() | QDir::IgnoreCase);
\r
421 setUpdatesEnabled(false);
\r
423 setUpdatesEnabled(true);
\r
427 void FileTableView::back()
\r
431 if (!m_history.isBegin()) {
\r
432 const QString &path = m_history.back();
\r
433 setRootPath(path, false);
\r
439 void FileTableView::forward()
\r
443 if (!m_history.isEnd()) {
\r
444 const QString &path = m_history.forward();
\r
445 setRootPath(path, false);
\r
451 void FileTableView::showHidtory()
\r
455 FileTableView *other = getMainWnd()->otherSideView(this);
\r
457 HistoryDialog dlg(this);
\r
458 if (side() == "Left") {
\r
459 dlg.setDefaultLeft(true);
\r
460 dlg.setHistory(&m_history, other->history());
\r
463 dlg.setDefaultLeft(false);
\r
464 dlg.setHistory(other->history(), &m_history);
\r
467 QSize szMainWnd = getMainWnd()->size();
\r
468 QSize szDialog = dlg.size();
\r
469 szDialog.setWidth(szMainWnd.width() * 0.8);
\r
470 dlg.resize(szDialog);
\r
471 if (dlg.exec() == QDialog::Accepted) {
\r
472 if (side() == dlg.selectedSide()) {
\r
473 m_history.setAt(dlg.selectedIndex());
\r
474 setRootPath(m_history.current(), false);
\r
477 setRootPath(other->history()->at(dlg.selectedIndex()), true);
\r
480 qDebug() << dlg.selectedIndex();
\r
484 void FileTableView::jumpToHome()
\r
488 setRootPath(QDir::homePath(), true);
\r
491 void FileTableView::jumpToParent()
\r
495 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
496 QDir dir(m->absolutePath());
\r
499 setRootPath(dir.absolutePath(), true);
\r
502 void FileTableView::jumpToRoot()
\r
506 setRootPath(QDir::rootPath(), true);
\r
509 void FileTableView::jumpTo()
\r
513 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
514 QString path = QFileDialog::getExistingDirectory(
\r
515 this, tr("フォルダを選択"), m->absolutePath());
\r
516 if (!path.isEmpty()) {
\r
517 setRootPath(path, true);
\r
521 void FileTableView::cursorDown()
\r
525 int row = currentIndex().row();
\r
526 if (row < model()->rowCount() - 1) {
\r
527 setCurrentIndex(model()->index(row + 1, 1));
\r
531 void FileTableView::cursorUp()
\r
535 int row = currentIndex().row();
\r
537 setCurrentIndex(model()->index(row - 1, 1));
\r
541 void FileTableView::cursorToBegin()
\r
545 setCurrentIndex(model()->index(0, 1));
\r
548 void FileTableView::cursorToEnd()
\r
552 setCurrentIndex(model()->index(model()->rowCount() - 1, 1));
\r
555 void FileTableView::cmdCopy()
\r
559 QFileInfoList list = selectedItems();
\r
560 if (list.isEmpty()) {
\r
564 FileTableView *other = getMainWnd()->otherSideView(this);
\r
565 FileTableModel *mOther = static_cast<FileTableModel*>(other->model());
\r
566 CopyMoveWorker *worker = new CopyMoveWorker();
\r
567 connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),
\r
568 this, SLOT(askOverWrite(bool*,int*,int*,QString*,QString,QString)));
\r
569 worker->setCopyList(&list);
\r
570 worker->setTargetDir(mOther->absolutePath());
\r
571 worker->setMoveMode(false);
\r
573 OperationDialog opDlg(this);
\r
574 opDlg.setWindowTitle(tr("コピー"));
\r
575 opDlg.setWorker(worker);
\r
580 void FileTableView::cmdMove()
\r
584 QFileInfoList list = selectedItems();
\r
585 if (list.isEmpty()) {
\r
589 FileTableView *other = getMainWnd()->otherSideView(this);
\r
590 FileTableModel *mOther = static_cast<FileTableModel*>(other->model());
\r
591 CopyMoveWorker *worker = new CopyMoveWorker();
\r
592 connect(worker, SIGNAL(askOverWrite(bool*,int*,int*,QString*,QString,QString)),
\r
593 this, SLOT(askOverWrite(bool*,int*,int*,QString*,QString,QString)));
\r
594 worker->setCopyList(&list);
\r
595 worker->setTargetDir(mOther->absolutePath());
\r
596 worker->setMoveMode(true);
\r
598 OperationDialog opDlg(this);
\r
599 opDlg.setWindowTitle(tr("移動"));
\r
600 opDlg.setWorker(worker);
\r
605 void FileTableView::cmdDelete()
\r
609 QFileInfoList list = selectedItems();
\r
610 if (list.isEmpty()) {
\r
615 if (list.size() == 1) {
\r
616 msg = list[0].fileName();
\r
619 msg = tr("%1個のアイテム").arg(list.size());
\r
621 int ret = QMessageBox::question(
\r
623 msg + tr("を削除します<br/>よろしいですか?"));
\r
624 if (ret == QMessageBox::Yes) {
\r
625 DeleteWorker *worker = new DeleteWorker();
\r
626 worker->setDeleteList(&list);
\r
628 OperationDialog opDlg(this);
\r
629 opDlg.setWindowTitle(tr("削除"));
\r
630 opDlg.setWorker(worker);
\r
635 void FileTableView::cmdRename()
\r
639 QFileInfoList list = selectedItems();
\r
640 if (list.isEmpty()) {
\r
644 IRenameDialog *dlg;
\r
645 if (list.size() == 1) {
\r
646 dlg = new RenameSingleDialog(this);
\r
649 dlg = new RenameMultiDialog(this);
\r
651 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
652 dlg->setWorkingDirectory(m->absolutePath());
\r
653 dlg->setNames(list);
\r
654 int dlgResult = dlg->exec();
\r
655 if (dlgResult == QDialog::Accepted && !dlg->renameMap().isEmpty()) {
\r
656 RenameWorker *worker = new RenameWorker();
\r
657 worker->setRenameMap(&dlg->renameMap());
\r
659 OperationDialog opDlg(this);
\r
660 opDlg.setWindowTitle(tr("名前を変更"));
\r
661 opDlg.setWorker(worker);
\r
666 void FileTableView::newFile()
\r
671 QString name = QInputDialog::getText(
\r
672 this, tr("ファイルを作成"), tr("ファイル名:"),
\r
673 QLineEdit::Normal, "", &bOk);
\r
674 if (bOk && !name.isEmpty()) {
\r
675 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
676 QDir dir(m->absolutePath());
\r
677 QFile file(dir.absoluteFilePath(name));
\r
678 if (!file.open(QIODevice::WriteOnly)) {
\r
679 QMessageBox::critical(
\r
681 tr("ファイルの作成に失敗しました。"));
\r
689 void FileTableView::newFolder()
\r
694 QString name = QInputDialog::getText(
\r
695 this, tr("フォルダを作成"), tr("フォルダ名:"),
\r
696 QLineEdit::Normal, "", &bOk);
\r
697 if (bOk && !name.isEmpty()) {
\r
698 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
699 QDir dir(m->absolutePath());
\r
700 if (!dir.mkpath(name)) {
\r
701 QMessageBox::critical(
\r
703 tr("フォルダの作成に失敗しました。"));
\r
708 void FileTableView::XXX()
\r
712 qDebug() << sender()->objectName() << "に対するスロットは未実装です。";
\r
715 void FileTableView::askOverWrite(bool *bOk, int *prevCopyMethod, int *copyMethod,
\r
716 QString *alias, const QString &srcPath,
\r
717 const QString &tgtPath)
\r
719 OverWriteDialog dlg;
\r
720 dlg.setCopyMethod(*prevCopyMethod);
\r
721 dlg.setSameMethodChecked(*copyMethod != OverWriteDialog::Undefined);
\r
722 dlg.setFileInfo(srcPath, tgtPath);
\r
723 if (dlg.exec() == QDialog::Rejected) {
\r
727 *prevCopyMethod = dlg.copyMethod();
\r
728 if (dlg.isSameMethodChecked()) {
\r
729 *copyMethod = *prevCopyMethod;
\r
731 *alias = dlg.alias();
\r
734 CopyMoveWorker *worker = static_cast<CopyMoveWorker*>(sender());
\r
735 worker->endAsking();
\r
738 void FileTableView::setRootIndex(const QModelIndex &index)
\r
740 if (!index.isValid()) {
\r
744 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
746 if (m->isDir(index)) {
\r
747 setRootPath(m->absoluteFilePath(index), true);
\r
751 void FileTableView::keyPressEvent(QKeyEvent *event)
\r
753 // Macでアクションが処理されないケースがあるため、
\r
754 // キーイベントを拾ってアクションシグナルを起動する
\r
755 QString modifier = QString::null;
\r
756 if (event->modifiers() & Qt::ShiftModifier) { modifier += "Shift+"; }
\r
757 if (event->modifiers() & Qt::ControlModifier) { modifier += "Ctrl+"; }
\r
758 if (event->modifiers() & Qt::AltModifier) { modifier += "Alt+"; }
\r
759 if (event->modifiers() & Qt::MetaModifier) { modifier += "Meta+"; }
\r
761 QString key = QKeySequence(event->key()).toString();
\r
762 QString ksq = QKeySequence(modifier + key).toString();
\r
764 if (!ksq.isEmpty()) {
\r
765 foreach (QObject *obj, getMainWnd()->children()) {
\r
766 QAction *action = qobject_cast<QAction*>(obj);
\r
768 foreach (const QKeySequence &keySeq, action->shortcuts()) {
\r
769 if (ksq == keySeq.toString()) {
\r
770 qDebug() << "emit " << ksq << " " << action->objectName();
\r
771 emit action->triggered();
\r
780 if (!ksq.isEmpty()) {
\r
783 QTableView::keyPressEvent(event);
\r
786 void FileTableView::focusInEvent(QFocusEvent *event)
\r
790 QTableView::focusInEvent(event);
\r
793 void FileTableView::currentChanged(const QModelIndex ¤t, const QModelIndex &previous)
\r
795 Q_UNUSED(previous);
\r
796 // qDebug() << "CurrentChanged";
\r
797 // qDebug() << " row = " << current.row();
\r
799 FileTableModel *m = static_cast<FileTableModel*>(model());
\r
800 // qDebug() << m->absoluteFilePath(current);
\r
801 emit indexChanged(m->absoluteFilePath(current));
\r
803 QTableView::currentChanged(current, previous);
\r