OSDN Git Service

Ver0.12
[gefu/Gefu.git] / mainwindow.cpp
index 790717c..108d547 100644 (file)
@@ -1,4 +1,5 @@
 #include "common.h"\r
+#include "version.h"\r
 #include "mainwindow.h"\r
 #include "preferencedialog.h"\r
 #include "folderview.h"\r
@@ -69,11 +70,15 @@ MainWindow::MainWindow(QWidget *parent) :
 \r
         // シグナル&スロット\r
         connect(folderView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(open(QModelIndex)));\r
-        connect(folderView, SIGNAL(itemFound(FolderView*)), this, SLOT(itemFound(FolderView*)));\r
-        connect(folderView, SIGNAL(itemNotFound(FolderView*)), this, SLOT(itemNotFound(FolderView*)));\r
-        connect(folderView, SIGNAL(keyPressed(FolderView*,QKeyEvent*)), this, SLOT(keyPress(FolderView*,QKeyEvent*)));\r
+        connect(folderView, SIGNAL(dataChanged()), this, SLOT(dataChange()));\r
+        connect(folderView, SIGNAL(dropAccepted(QFileInfoList)), this, SLOT(dropAccept(QFileInfoList)));\r
+        connect(folderView, SIGNAL(currentChanged(QFileInfo)), this, SLOT(currentChange(QFileInfo)));\r
+        connect(folderView, SIGNAL(itemFound()), this, SLOT(itemFound()));\r
+        connect(folderView, SIGNAL(itemNotFound()), this, SLOT(itemNotFound()));\r
+        connect(folderView, SIGNAL(keyPressed(QKeyEvent*)), this, SLOT(keyPress(QKeyEvent*)));\r
         connect(folderView, SIGNAL(retrieveFinished()), this, SLOT(retrieveFinish()));\r
         connect(folderView, SIGNAL(retrieveStarted(QString)), this, SLOT(retrieveStart(QString)));\r
+        connect(folderView, SIGNAL(requestContextMenu(QContextMenuEvent*)), this, SLOT(showContextMenu(QContextMenuEvent*)));\r
         connect(searchBox, SIGNAL(textEdited(QString)), this, SLOT(searchItem(QString)));\r
         connect(searchBox, SIGNAL(returnPressed()), this, SLOT(returnPressInSearchBox()));\r
 \r
@@ -91,8 +96,6 @@ MainWindow::MainWindow(QWidget *parent) :
 \r
         // フォルダビューを初期化する\r
         folderView->initialize();\r
-\r
-        folderView->repaint();\r
     }\r
 \r
     QSettings settings;\r
@@ -113,16 +116,20 @@ MainWindow::MainWindow(QWidget *parent) :
     ui->action_Exec->setShortcuts(shortcuts);\r
 \r
     // MacだとShift+の形で認識されてしまうもの\r
+    shortcuts = ui->view_FontSizeUp->shortcuts();\r
+    shortcuts.append(QKeySequence("Shift++"));\r
+    ui->view_FontSizeUp->setShortcuts(shortcuts);\r
+\r
     shortcuts = ui->view_Filter->shortcuts();\r
-    shortcuts.append(QKeySequence("Shift+*"));  // マヂで!?\r
+    shortcuts.append(QKeySequence("Shift+*"));\r
     ui->view_Filter->setShortcuts(shortcuts);\r
 \r
     shortcuts = ui->action_OpenTerminal->shortcuts();\r
-    shortcuts.append(QKeySequence("Shift+>"));  // マヂで!?\r
+    shortcuts.append(QKeySequence("Shift+>"));\r
     ui->action_OpenTerminal->setShortcuts(shortcuts);\r
 \r
     shortcuts = ui->help_About->shortcuts();\r
-    shortcuts.append(QKeySequence("Shift+?"));  // マヂで!?\r
+    shortcuts.append(QKeySequence("Shift+?"));\r
     ui->help_About->setShortcuts(shortcuts);\r
 \r
     // ウィンドウタイトルを設定する\r
@@ -181,6 +188,9 @@ MainWindow::MainWindow(QWidget *parent) :
     if (settings.value(IniKey_CheckUpdates).toBool()) {\r
         checkUpdate(true);\r
     }\r
+\r
+    ui->folderView1->refresh();\r
+    ui->folderView2->refresh();\r
 }\r
 \r
 MainWindow::~MainWindow()\r
@@ -203,9 +213,16 @@ FolderView* MainWindow::otherSideView(const FolderView *view) const
 void MainWindow::focusChange(QWidget *old, QWidget *now)\r
 {\r
     Q_UNUSED(old);\r
-    Q_UNUSED(now);\r
     qDebug() << "MainWindow::focusChange";\r
 \r
+    if (now == ui->folderView1 || now == ui->folderView2) {\r
+        ui->statusBar->showMessage(folderView()->currentItem().absoluteFilePath());\r
+    }\r
+\r
+    if (old == ui->searchBox1 || old == ui->searchBox2) {\r
+        old->setVisible(false);\r
+    }\r
+\r
     updateActions();\r
 }\r
 \r
@@ -264,21 +281,21 @@ void MainWindow::historyForward()
     }\r
 }\r
 \r
-void MainWindow::itemFound(FolderView *view)\r
+void MainWindow::itemFound()\r
 {\r
     qDebug() << "MainWindow::itemFound";\r
 \r
-    SearchBox *box = searchBox(view);\r
+    SearchBox *box = searchBox(static_cast<FolderView*>(sender()));\r
     QPalette pal = box->palette();\r
     pal.setColor(QPalette::Text, QPalette().text().color());\r
     box->setPalette(pal);\r
 }\r
 \r
-void MainWindow::itemNotFound(FolderView *view)\r
+void MainWindow::itemNotFound()\r
 {\r
     qDebug() << "MainWindow::itemNotFound";\r
 \r
-    SearchBox *box = searchBox(view);\r
+    SearchBox *box = searchBox(static_cast<FolderView*>(sender()));\r
     QPalette pal = box->palette();\r
     pal.setColor(QPalette::Text, Qt::red);\r
     box->setPalette(pal);\r
@@ -365,7 +382,7 @@ void MainWindow::moveItems()
     ui->folderView2->refresh();\r
 }\r
 \r
-void MainWindow::keyPress(FolderView *view, QKeyEvent *event)\r
+void MainWindow::keyPress(QKeyEvent *event)\r
 {\r
     QString ksq = KeyEventToSequence(event);\r
     if (ksq == "") {\r
@@ -399,7 +416,9 @@ void MainWindow::keyPress(FolderView *view, QKeyEvent *event)
     }\r
 \r
     if (ksq == "Left" || ksq == "Right") {\r
+        FolderView *view = static_cast<FolderView*>(sender());\r
         if (view->side() == ksq) {\r
+            setPathToParent();\r
         }\r
         else {\r
             otherSideView(view)->setFocus();\r
@@ -473,6 +492,117 @@ void MainWindow::askOverWrite(QString *copyMethod,
     worker->endAsking();\r
 }\r
 \r
+void MainWindow::currentChange(const QFileInfo &info)\r
+{\r
+    qDebug() << "MainWindow::currentChange();";\r
+\r
+    ui->statusBar->showMessage(info.absoluteFilePath());\r
+    if (info.isDir()) {\r
+        ui->action_Open->setIcon(QIcon(":/images/Open.png"));\r
+        ui->action_Open->setText(tr("開く"));\r
+        ui->action_Open->setToolTip(tr("開く"));\r
+    }\r
+    else {\r
+        ui->action_Open->setIcon(QIcon(":/images/Search text.png"));\r
+        ui->action_Open->setText(tr("テキストビューアで開く"));\r
+        ui->action_Open->setToolTip(tr("テキストビューアで開く"));\r
+        ui->action_Open->setEnabled(true);\r
+\r
+        QSettings settings;\r
+        if (!settings.value(IniKey_ViewerForceOpen).toBool()) {\r
+            QStringList list = settings.value(IniKey_ViewerIgnoreExt).toString().split(",");\r
+            foreach (const QString &ext, list) {\r
+                if (ext.toLower() == info.suffix().toLower()) {\r
+                    ui->action_Open->setEnabled(false);\r
+                    break;\r
+                }\r
+            }\r
+        }\r
+    }\r
+\r
+}\r
+\r
+void MainWindow::dataChange()\r
+{\r
+    qDebug() << "MainWindow::dataChange();";\r
+\r
+    FolderView *view = static_cast<FolderView*>(sender());\r
+    QFileInfoList list = view->checkedItems();\r
+    if (list.isEmpty()) {\r
+        showNameFilters(view);\r
+    }\r
+    else {\r
+        int numFolders = 0;\r
+        int numFiles = 0;\r
+        quint64 size = 0;\r
+        foreach (const QFileInfo &info, list) {\r
+            if (info.isDir()) {\r
+                numFolders++;\r
+            }\r
+            else {\r
+                numFiles++;\r
+                size += info.size();\r
+            }\r
+        }\r
+\r
+        QString msg = QString::null;\r
+        if (numFolders > 0) {\r
+            msg += tr("%1個のフォルダ ").arg(numFolders);\r
+        }\r
+        if (numFiles > 0) {\r
+            msg += tr("%1個のファイル ").arg(numFiles);\r
+        }\r
+\r
+        if (!msg.isEmpty()) {\r
+            msg += tr("を選択 合計%1").arg(FilesizeToString(size));\r
+        }\r
+\r
+        filterLabel(view)->setText(msg);\r
+    }\r
+}\r
+\r
+void MainWindow::dropAccept(const QFileInfoList &list)\r
+{\r
+    copyItems(list, static_cast<FolderView*>(sender())->dir());\r
+}\r
+\r
+void MainWindow::copyItems(const QFileInfoList &list, const QString &tgtDir)\r
+{\r
+    QSettings settings;\r
+    if (settings.value(IniKey_ConfirmCopy).toBool()) {\r
+        if (QMessageBox::question(this, tr("確認"), tr("コピーを実行しますか?"))\r
+            != QMessageBox::Yes)\r
+        {\r
+            return;\r
+        }\r
+    }\r
+\r
+    // 上書き確認ダイアログを初期化する\r
+    m_overwriteDialog->reset();\r
+\r
+    // ワーカースレッドを作成する\r
+    CopyMoveWorker *worker = new CopyMoveWorker();\r
+    connect(worker, SIGNAL(askOverWrite(QString*,QString*,QString,QString)),\r
+            this, SLOT(askOverWrite(QString*,QString*,QString,QString)));\r
+    worker->setCopyList(&list);\r
+    worker->setTargetDir(tgtDir);\r
+    worker->setMoveMode(false);\r
+\r
+    // 進捗ダイアログを表示して、処理を開始する\r
+    OperationDialog opDlg(this);\r
+    opDlg.setWindowTitle(tr("コピー"));\r
+    opDlg.setWorker(worker);\r
+    opDlg.setAutoClose(settings.value(IniKey_AutoCloseCopy).toBool());\r
+\r
+    opDlg.exec();\r
+\r
+    settings.setValue(IniKey_AutoCloseCopy, opDlg.autoClose());\r
+\r
+    // 念のため、リフレッシュ\r
+    ui->folderView1->refresh();\r
+    ui->folderView2->refresh();\r
+}\r
+\r
 void MainWindow::copyItems()\r
 {\r
     qDebug() << "MainWindow::copyItems";\r
@@ -483,6 +613,9 @@ void MainWindow::copyItems()
         return;\r
     }\r
 \r
+    FolderView *other = otherSideView(v);\r
+    copyItems(list, other->dir());\r
+#if 0\r
     QSettings settings;\r
     if (settings.value(IniKey_ConfirmCopy).toBool()) {\r
         if (QMessageBox::question(this, tr("確認"), tr("コピーを実行しますか?"))\r
@@ -517,6 +650,7 @@ void MainWindow::copyItems()
     // 念のため、リフレッシュ\r
     ui->folderView1->refresh();\r
     ui->folderView2->refresh();\r
+#endif\r
 }\r
 \r
 void MainWindow::createFile()\r
@@ -944,6 +1078,11 @@ void MainWindow::setSorting(FolderView *view)
     view->setSorting(flags);\r
 }\r
 \r
+void MainWindow::showNameFilters(FolderView *view)\r
+{\r
+    filterLabel(view)->setText(tr("フィルタ:") + view->nameFilters().join(" "));\r
+}\r
+\r
 void MainWindow::searchItem(const QString &text)\r
 {\r
     qDebug() << "MainWindow::searchItem" << text;\r
@@ -1027,6 +1166,34 @@ void MainWindow::setCursorToEnd()
     v->setCurrentIndex(v->model()->index(row, 0));\r
 }\r
 \r
+void MainWindow::setFontSizeDown()\r
+{\r
+    qDebug() << "MainWindow::setFontSizeDown();";\r
+\r
+    QSettings settings;\r
+\r
+    QFont font = settings.value(IniKey_ViewFont).value<QFont>();\r
+    font.setPointSize(font.pointSize() - 1);\r
+    settings.setValue(IniKey_ViewFont, font);\r
+\r
+    ui->folderView1->updateAppearance();\r
+    ui->folderView2->updateAppearance();\r
+}\r
+\r
+void MainWindow::setFontSizeUp()\r
+{\r
+    qDebug() << "MainWindow::setFontSizeUp();";\r
+\r
+    QSettings settings;\r
+\r
+    QFont font = settings.value(IniKey_ViewFont).value<QFont>();\r
+    font.setPointSize(font.pointSize() + 1);\r
+    settings.setValue(IniKey_ViewFont, font);\r
+\r
+    ui->folderView1->updateAppearance();\r
+    ui->folderView2->updateAppearance();\r
+}\r
+\r
 void MainWindow::setPathFromOther()\r
 {\r
     qDebug() << "MainWindow::setPathFromOther();";\r
@@ -1144,6 +1311,7 @@ void MainWindow::showPreferenceDialog()
         ui->locationBox2->updateAppearance();\r
         ui->folderView1->updateAppearance();\r
         ui->folderView2->updateAppearance();\r
+        ui->textView->updateAppearance();\r
 \r
         updateActions();\r
     }\r
@@ -1171,6 +1339,37 @@ void MainWindow::toggleShowSystemFiles(bool checked)
     ui->folderView2->refresh();\r
 }\r
 \r
+void MainWindow::showContextMenu(QContextMenuEvent *event)\r
+{\r
+    qDebug() << "MainWindow::showContextMenu();";\r
+\r
+    FolderView *view = static_cast<FolderView*>(sender());\r
+    QModelIndex index = view->indexAt(event->pos());\r
+\r
+    QMenu menu(this);\r
+    if (index.isValid()) {\r
+        menu.addAction(ui->action_Open);\r
+        menu.addAction(ui->action_Exec);\r
+        menu.addAction(ui->action_OpenEditor);\r
+        menu.addAction(ui->action_OpenTerminal);\r
+        menu.addSeparator();\r
+        menu.addAction(ui->copy_Filename);\r
+        menu.addAction(ui->copy_Fullpath);\r
+    }\r
+    else {\r
+        menu.addAction(ui->move_Back);\r
+        menu.addAction(ui->move_Forward);\r
+        menu.addSeparator();\r
+        menu.addAction(ui->move_Parent);\r
+        menu.addAction(ui->move_Home);\r
+        menu.addAction(ui->move_Root);\r
+        menu.addAction(ui->move_Jump);\r
+    }\r
+\r
+    menu.exec(event->globalPos());\r
+\r
+}\r
+\r
 void MainWindow::checkUpdate(bool silent)\r
 {\r
     qDebug() << "MainWindow::checkUpdate()" << silent;\r
@@ -1278,6 +1477,8 @@ void MainWindow::initActionConnections()
     connect(ui->move_Root, SIGNAL(triggered()), this, SLOT(setPathToRoot()));\r
     connect(ui->move_Up, SIGNAL(triggered()), this, SLOT(cursorUp()));\r
     connect(ui->view_Filter, SIGNAL(triggered()), this, SLOT(showFilterDialog()));\r
+    connect(ui->view_FontSizeDown, SIGNAL(triggered()), this, SLOT(setFontSizeDown()));\r
+    connect(ui->view_FontSizeUp, SIGNAL(triggered()), this, SLOT(setFontSizeUp()));\r
     connect(ui->view_FromOther, SIGNAL(triggered()), this, SLOT(setPathFromOther()));\r
     connect(ui->view_Hidden, SIGNAL(toggled(bool)), this, SLOT(toggleShowHiddenFiles(bool)));\r
     connect(ui->view_Refresh, SIGNAL(triggered()), this, SLOT(refresh()));\r
@@ -1403,7 +1604,7 @@ void MainWindow::setNameFilters(FolderView *view, const QString &filters)
         list << "*";\r
     }\r
     view->setNameFilters(list);\r
-    filterLabel(view)->setText(tr("フィルタ:") + list.join(" "));\r
+    showNameFilters(view);\r
 }\r
 \r
 QLabel *MainWindow::filterLabel(const FolderView *view) const\r