OSDN Git Service

バイナリビューアを実装、他ビューアも自分描画に変更
[gefu/Gefu.git] / mainwindow.cpp
index ee3c458..99f79c7 100644 (file)
@@ -12,8 +12,6 @@
 #include "renameworker.h"\r
 #include "renamesingledialog.h"\r
 #include "renamemultidialog.h"\r
-#include "simpletextview.h"\r
-#include "simpleimageview.h"\r
 #include "sortdialog.h"\r
 #include "version.h"\r
 #include "mainwindow.h"\r
@@ -30,6 +28,7 @@
 #include <QMimeData>\r
 #include <QNetworkAccessManager>\r
 #include <QProcess>\r
+#include <QScrollArea>\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
 /// \brief MainWindow::MainWindow\r
@@ -108,10 +107,7 @@ MainWindow::MainWindow(QWidget *parent) :
         onCheckUpdate(true);\r
     }\r
 \r
-    ui->LPanel->updateAppearance(prefs);\r
-    ui->LPanel->model()->updateAppearance(prefs);\r
-    ui->RPanel->updateAppearance(prefs);\r
-    ui->RPanel->model()->updateAppearance(prefs);\r
+    prefs_updated();\r
 \r
     connect(ui->FPanel, SIGNAL(showed(QWidget*)), this, SLOT(view_showed(QWidget*)));\r
 }\r
@@ -331,6 +327,7 @@ void MainWindow::view_currentChanged(const QModelIndex &current, const QModelInd
     statusBar()->showMessage(activeModel()->filePath(current));\r
 \r
     if (m_viewMode == ModePreview) {\r
+        view_statusChanged();\r
         inactivePanel()->setViewItem(current);\r
     }\r
 \r
@@ -642,6 +639,15 @@ bool MainWindow::onContextMenuEvent(QObject *obj, QContextMenuEvent *e)
         menu.addAction(ui->text_ConvertFromUTF16BE);\r
         menu.addAction(ui->text_ConvertFromUTF16LE);\r
         menu.addSeparator();\r
+        menu.addAction(ui->view_SelectAll);\r
+        menu.addAction(ui->text_Copy);\r
+        if (m_viewMode == ModeView) {\r
+            menu.addSeparator();\r
+            menu.addAction(ui->view_Back);\r
+        }\r
+    }\r
+    else if (obj->objectName() == "hexView") {\r
+        menu.addAction(ui->view_SelectAll);\r
         menu.addAction(ui->text_Copy);\r
         if (m_viewMode == ModeView) {\r
             menu.addSeparator();\r
@@ -683,12 +689,9 @@ bool MainWindow::onContextMenuEvent(QObject *obj, QContextMenuEvent *e)
         return false;\r
     }\r
 \r
-    QAction *selected = menu.exec(e->globalPos());\r
-    if (selected == ui->action_ScaleDown || selected == ui->action_ScaleUp) {\r
-        ui->image_FitToWindow->blockSignals(true);\r
-        ui->image_FitToWindow->setChecked(false);\r
-        ui->image_FitToWindow->blockSignals(false);\r
-    }\r
+    QString statusText = statusBar()->currentMessage();\r
+    menu.exec(e->globalPos());\r
+    statusBar()->showMessage(statusText);\r
 \r
     return true;\r
 }\r
@@ -916,6 +919,19 @@ void MainWindow::onOpen(const QModelIndex &index)
 }\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
+/// \brief MainWindow::prefs_updated\r
+///\r
+/// 設定が変更された場合の処理を行います。\r
+///\r
+void MainWindow::prefs_updated()\r
+{\r
+    Preferences prefs(this);\r
+    ui->LPanel->updateAppearance(prefs);\r
+    ui->RPanel->updateAppearance(prefs);\r
+    ui->FPanel->updateAppearance(prefs);\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////\r
 /// \brief MainWindow::onOpenEditor\r
 /// \param path\r
 ///\r
@@ -1396,63 +1412,48 @@ void MainWindow::onKeyEndOther()
     sendEventOther(&event2);\r
 }\r
 \r
-///////////////////////////////////////////////////////////////////////////////\r
-/// \brief MainWindow::onScaleDown\r
-///\r
-/// 表示を縮小します。\r
-///\r
-void MainWindow::onScaleDown()\r
-{\r
-    qDebug() << "MainWindow::onScaleDown()";\r
-\r
-    AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
-    if (view) {\r
-        view->scaleDown();\r
-    }\r
-\r
-    Preferences prefs(this);\r
-    if (ui->LPanel->isVisible()) {\r
-        ui->LPanel->updateAppearance(prefs);\r
-        ui->LPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->RPanel->isVisible()) {\r
-        ui->RPanel->updateAppearance(prefs);\r
-        ui->RPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->FPanel->isVisible()) {\r
-        ui->FPanel->updateAppearance(prefs);\r
-        ui->FPanel->model()->updateAppearance(prefs);\r
-    }\r
-}\r
+/////////////////////////////////////////////////////////////////////////////////\r
+///// \brief MainWindow::onScaleDown\r
+/////\r
+///// 表示を縮小します。\r
+/////\r
+//void MainWindow::onScaleDown()\r
+//{\r
+//    qDebug() << "MainWindow::onScaleDown()";\r
 \r
-///////////////////////////////////////////////////////////////////////////////\r
-/// \brief MainWindow::onScaleUp\r
-///\r
-/// 表示を拡大します。\r
-///\r
-void MainWindow::onScaleUp()\r
-{\r
-    qDebug() << "MainWindow::onScaleUp()";\r
+//    AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
+//    if (view) {\r
+//        view->scaleDown();\r
+//    }\r
 \r
-    AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
-    if (view) {\r
-        view->scaleUp();\r
-    }\r
+//    Preferences prefs(this);\r
+//    ui->LPanel->updateAppearance(prefs);\r
+//    ui->RPanel->updateAppearance(prefs);\r
+//    ui->FPanel->updateAppearance(prefs);\r
+//}\r
+\r
+/////////////////////////////////////////////////////////////////////////////////\r
+///// \brief MainWindow::onScaleUp\r
+/////\r
+///// 表示を拡大します。\r
+/////\r
+//void MainWindow::onScaleUp()\r
+//{\r
+//    qDebug() << "MainWindow::onScaleUp()";\r
+\r
+//    AbstractView *view = dynamic_cast<AbstractView*>(qApp->focusWidget());\r
+//    if (view) {\r
+//        view->scaleUp();\r
+//    }\r
+//    else {\r
+//        qDebug() << qApp->focusWidget()->objectName();\r
+//    }\r
 \r
-    Preferences prefs(this);\r
-    if (ui->LPanel->isVisible()) {\r
-        ui->LPanel->updateAppearance(prefs);\r
-        ui->LPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->RPanel->isVisible()) {\r
-        ui->RPanel->updateAppearance(prefs);\r
-        ui->RPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->FPanel->isVisible()) {\r
-        ui->FPanel->updateAppearance(prefs);\r
-        ui->FPanel->model()->updateAppearance(prefs);\r
-    }\r
-}\r
+//    Preferences prefs(this);\r
+//    ui->LPanel->updateAppearance(prefs);\r
+//    ui->RPanel->updateAppearance(prefs);\r
+//    ui->FPanel->updateAppearance(prefs);\r
+//}\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
 /// \brief MainWindow::initBookmarkMenu\r
@@ -1495,7 +1496,7 @@ void MainWindow::initBookmarkMenu()
 void MainWindow::sendEventOther(QEvent *event)\r
 {\r
     qDebug() << "MainWindow::sendEventOther()";\r
-\r
+#if 0\r
     // フォーカスを持たない、可視状態のビューを検索する\r
     foreach (QWidget *w, findChildren<QWidget*>()) {\r
         AbstractView *view = dynamic_cast<AbstractView*>(w);\r
@@ -1506,6 +1507,8 @@ void MainWindow::sendEventOther(QEvent *event)
             }\r
         }\r
     }\r
+#endif\r
+    qApp->sendEvent(inactivePanel()->visibleView(), event);\r
 }\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
@@ -1578,19 +1581,7 @@ void MainWindow::showPreferenceDialog()
 \r
     PreferenceDialog dlg(this);\r
     if (dlg.exec() == QDialog::Accepted) {\r
-        Preferences prefs(this);\r
-        if (ui->LPanel->isVisible()) {\r
-            ui->LPanel->updateAppearance(prefs);\r
-            ui->LPanel->model()->updateAppearance(prefs);\r
-        }\r
-        if (ui->RPanel->isVisible()) {\r
-            ui->RPanel->updateAppearance(prefs);\r
-            ui->RPanel->model()->updateAppearance(prefs);\r
-        }\r
-        if (ui->FPanel->isVisible()) {\r
-            ui->FPanel->updateAppearance(prefs);\r
-            ui->FPanel->model()->updateAppearance(prefs);\r
-        }\r
+        prefs_updated();\r
     }\r
 }\r
 \r
@@ -1777,8 +1768,6 @@ void MainWindow::initActions()
     connect(ui->action_Rename, SIGNAL(triggered()), this, SLOT(onRename()));\r
     connect(ui->action_KeyRight, SIGNAL(triggered()), this, SLOT(onKeyRight()));\r
     connect(ui->action_RunCommand, SIGNAL(triggered()), this, SLOT(onRunCommand()));\r
-    connect(ui->action_ScaleDown, SIGNAL(triggered()), this, SLOT(onScaleDown()));\r
-    connect(ui->action_ScaleUp, SIGNAL(triggered()), this, SLOT(onScaleUp()));\r
     connect(ui->action_SearchNext, SIGNAL(triggered()), this, SLOT(onSearchNext()));\r
     connect(ui->action_SearchPrev, SIGNAL(triggered()), this, SLOT(onSearchPrev()));\r
     connect(ui->action_Setting, SIGNAL(triggered()), this, SLOT(showPreferenceDialog()));\r
@@ -1841,19 +1830,7 @@ void MainWindow::setActiveModel(FolderModel *m)
     connect(ui->action_MarkInvert, SIGNAL(triggered()), activeModel(), SLOT(onMarkInvert()));\r
     connect(ui->action_Refresh, SIGNAL(triggered()), activeModel(), SLOT(refresh()));\r
 \r
-    Preferences prefs(this);\r
-    if (ui->LPanel->isVisible()) {\r
-        ui->LPanel->updateAppearance(prefs);\r
-        ui->LPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->RPanel->isVisible()) {\r
-        ui->RPanel->updateAppearance(prefs);\r
-        ui->RPanel->model()->updateAppearance(prefs);\r
-    }\r
-    if (ui->FPanel->isVisible()) {\r
-        ui->FPanel->updateAppearance(prefs);\r
-        ui->FPanel->model()->updateAppearance(prefs);\r
-    }\r
+    prefs_updated();\r
 }\r
 \r
 ///////////////////////////////////////////////////////////////////////////////\r
@@ -1986,7 +1963,7 @@ void MainWindow::setViewMode(Mode mode)
         break;\r
 \r
     case ModeView:\r
-        ui->FPanel->updateAppearance(Preferences(this));\r
+//        ui->FPanel->updateAppearance(Preferences(this));\r
         ui->FPanel->setViewItem(focusItemView()->currentIndex());\r
         ui->splitter->setVisible(false);\r
         ui->FPanel->setVisible(true);\r
@@ -2041,6 +2018,10 @@ void MainWindow::updateActions()
     bool toggleSearch = true;\r
 \r
     QWidget *w = qApp->focusWidget();\r
+    if (w->objectName() == "scrollArea") {\r
+        w = static_cast<QScrollArea*>(w)->widget();\r
+    }\r
+\r
     if (w->objectName() == "folderView" || w->objectName() == "thumbnailView") {\r
         setEnabledAllActions(true);\r
         // 履歴\r
@@ -2101,35 +2082,45 @@ void MainWindow::updateActions()
         isView = false;\r
     }\r
     else if (w->objectName() == "textView") {\r
-        SimpleTextView *v = static_cast<SimpleTextView*>(w);\r
         setEnabledAllActions(false);\r
         toggleSearch = false;\r
 \r
-        reconnectAction(ui->text_ConvertFromEUC, SIGNAL(triggered()), v, SLOT(convertFromEUC()));\r
-        reconnectAction(ui->text_ConvertFromJIS, SIGNAL(triggered()), v, SLOT(convertFromJIS()));\r
-        reconnectAction(ui->text_ConvertFromSJIS, SIGNAL(triggered()), v, SLOT(convertFromSJIS()));\r
-        reconnectAction(ui->text_ConvertFromUTF8, SIGNAL(triggered()), v, SLOT(convertFromUTF8()));\r
-        reconnectAction(ui->text_ConvertFromUTF16, SIGNAL(triggered()), v, SLOT(convertFromUTF16()));\r
-        reconnectAction(ui->text_ConvertFromUTF16BE, SIGNAL(triggered()), v, SLOT(convertFromUTF16BE()));\r
-        reconnectAction(ui->text_ConvertFromUTF16LE, SIGNAL(triggered()), v, SLOT(convertFromUTF16LE()));\r
-        reconnectAction(ui->text_Copy, SIGNAL(triggered()), v, SLOT(copy()));\r
+        reconnectAction(ui->text_ConvertFromEUC, SIGNAL(triggered()), w, SLOT(onConvertFromEUC()));\r
+        reconnectAction(ui->text_ConvertFromJIS, SIGNAL(triggered()), w, SLOT(onConvertFromJIS()));\r
+        reconnectAction(ui->text_ConvertFromSJIS, SIGNAL(triggered()), w, SLOT(onConvertFromSJIS()));\r
+        reconnectAction(ui->text_ConvertFromUTF8, SIGNAL(triggered()), w, SLOT(onConvertFromUTF8()));\r
+        reconnectAction(ui->text_ConvertFromUTF16, SIGNAL(triggered()), w, SLOT(onConvertFromUTF16()));\r
+        reconnectAction(ui->text_ConvertFromUTF16BE, SIGNAL(triggered()), w, SLOT(onConvertFromUTF16BE()));\r
+        reconnectAction(ui->text_ConvertFromUTF16LE, SIGNAL(triggered()), w, SLOT(onConvertFromUTF16LE()));\r
+        reconnectAction(ui->view_SelectAll, SIGNAL(triggered()), w, SLOT(onSelectAll()));\r
+        reconnectAction(ui->text_Copy, SIGNAL(triggered()), w, SLOT(onCopy()));\r
     }\r
     else if (w->objectName() == "imageView") {\r
-        SimpleImageView *v = static_cast<SimpleImageView*>(w);\r
         setEnabledAllActions(false);\r
         toggleSearch = false;\r
         isImageView = true;\r
 \r
-        reconnectAction(ui->image_FitToWindow, SIGNAL(toggled(bool)), v, SLOT(fitToWindow(bool)));\r
-        reconnectAction(ui->image_ScaleNormal, SIGNAL(toggled(bool)), v, SLOT(scaleNormal()));\r
-        reconnectAction(ui->image_Rotate90, SIGNAL(triggered()), v, SLOT(rotate90()));\r
-        reconnectAction(ui->image_Rotate180, SIGNAL(triggered()), v, SLOT(rotate180()));\r
+        reconnectAction(ui->image_FitToWindow, SIGNAL(triggered()), w, SLOT(onFitToWindow()));\r
+        reconnectAction(ui->image_ScaleNormal, SIGNAL(triggered()), w, SLOT(onScaleNormal()));\r
+        reconnectAction(ui->image_Rotate90, SIGNAL(triggered()), w, SLOT(onRotate90()));\r
+        reconnectAction(ui->image_Rotate180, SIGNAL(triggered()), w, SLOT(onRotate180()));\r
+    }\r
+    else if (w->objectName() == "hexView") {\r
+        setEnabledAllActions(false);\r
+        toggleSearch = false;\r
+\r
+        reconnectAction(ui->view_SelectAll, SIGNAL(triggered()), w, SLOT(onSelectAll()));\r
+        reconnectAction(ui->text_Copy, SIGNAL(triggered()), w, SLOT(onCopy()));\r
     }\r
     else if (w->objectName() == "progressBar") {\r
         setEnabledAllActions(false);\r
         toggleSearch = false;\r
         isView = false;\r
     }\r
+    else {\r
+        toggleSearch = false;\r
+        isView = false;\r
+    }\r
 \r
     ui->toggle_Toolbar->blockSignals(true);\r
     ui->toggle_Toolbar->setChecked(ui->mainToolBar->isVisible());\r
@@ -2158,6 +2149,10 @@ void MainWindow::updateActions()
         ui->action_ScaleDown->setText(tr("文字を小さく"));\r
         ui->action_ScaleUp->setText(tr("文字を大きく"));\r
     }\r
+    if (isView) {\r
+        reconnectAction(ui->action_ScaleDown, SIGNAL(triggered()), w, SLOT(onScaleDown()));\r
+        reconnectAction(ui->action_ScaleUp, SIGNAL(triggered()), w, SLOT(onScaleUp()));\r
+    }\r
 \r
     ui->toggle_FullMode->setEnabled(m_viewMode == ModeBasic || m_viewMode == ModeFull);\r
 \r