OSDN Git Service

Ver0.25
[gefu/Gefu.git] / panel.cpp
index 3482122..2e909fe 100644 (file)
--- a/panel.cpp
+++ b/panel.cpp
@@ -1,12 +1,17 @@
 #include "filereadworker.h"
 #include "foldermodel.h"
 #include "folderview.h"
+#include "global.h"
+#include "hexview.h"
+#include "imageview.h"
 #include "mainwindow.h"
 #include "preferences.h"
+#include "textview.h"
 #include "panel.h"
 #include "ui_panel.h"
 
 #include <QDebug>
+#include <QTextCodec>
 
 ///////////////////////////////////////////////////////////////////////////////
 /// \brief Panel::Panel
@@ -20,9 +25,8 @@ Panel::Panel(QWidget *parent) :
     m_worker()
 {
     ui->setupUi(this);
-    ui->imageView->setVisible(false);
-    ui->textView->setVisible(false);
     ui->progressBar->setVisible(false);
+    ui->scrollArea->setVisible(false);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -54,10 +58,9 @@ void Panel::initialize(MainWindow *w)
 {
     qDebug() << "Panel::initialize()";
 
-    ui->imageView->initialize(w);
     ui->folderPanel->initialize(w);
-    ui->textView->initialize(w);
     ui->progressBar->installEventFilter(w);
+    ui->scrollArea->installEventFilter(w);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -97,9 +100,9 @@ void Panel::setViewItem(const QModelIndex &index)
     }
 
     ui->progressBar->setVisible(false);
+    ui->scrollArea->setVisible(false);
+    ui->folderPanel->setVisible(false);
     if (!index.isValid()) {
-        ui->imageView->setVisible(false);
-        ui->textView->setVisible(false);
         ui->folderPanel->setVisible(true);
         return;
     }
@@ -108,8 +111,6 @@ void Panel::setViewItem(const QModelIndex &index)
     QString path = m->filePath(index);
     if (m->isDir(index)) {
         model()->setRootPath(path);
-        ui->imageView->setVisible(false);
-        ui->textView->setVisible(false);
         ui->folderPanel->setVisible(true);
         return;
     }
@@ -120,9 +121,6 @@ void Panel::setViewItem(const QModelIndex &index)
     connect(m_worker, SIGNAL(resultReady(QByteArray)), this, SLOT(onReady(QByteArray)));
     ui->progressBar->setValue(0);
     ui->progressBar->setVisible(true);
-    ui->imageView->setVisible(false);
-    ui->textView->setVisible(false);
-    ui->folderPanel->setVisible(false);
 
     m_worker->open(path);
     m_worker->start();
@@ -139,17 +137,15 @@ void Panel::updateAppearance(const Preferences &prefs)
 
     QPalette pal;
 
-    pal = ui->imageView->palette();
-    pal.setColor(QPalette::Base, prefs.getImageViewBgColor());
-    ui->imageView->setPalette(pal);
-
-    pal = ui->textView->palette();
-    pal.setColor(QPalette::Base, prefs.getTextViewBgColor());
-    pal.setColor(QPalette::Text, prefs.getTextViewFgColor());
-    ui->textView->setPalette(pal);
-    ui->textView->setFont(prefs.getTextViewFont());
+    pal = this->palette();
+    pal.setColor(this->backgroundRole(), prefs.folderViewBgColor(objectName() == "FPanel"));
+    this->setAutoFillBackground(true);
+    this->setPalette(pal);
 
     ui->folderPanel->updateAppearance(prefs);
+    if (model()) {
+        model()->updateAppearance(prefs);
+    }
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -158,11 +154,8 @@ void Panel::updateAppearance(const Preferences &prefs)
 ///
 QWidget *Panel::visibleView() const
 {
-    if (ui->textView->isVisible()) {
-        return ui->textView;
-    }
-    if (ui->imageView->isVisible()) {
-        return ui->imageView;
+    if (ui->scrollArea->isVisible()) {
+        return ui->scrollArea/*->widget()*/;
     }
     if (ui->folderPanel->isVisible()) {
         return ui->folderPanel->itemView();
@@ -183,21 +176,47 @@ QWidget *Panel::visibleView() const
 ///
 void Panel::onReady(const QByteArray &data)
 {
+    MainWindow *mainWnd;
+    if (parent()->objectName() == "splitter") {
+        mainWnd = static_cast<MainWindow*>(parent()->parent()->parent());
+    }
+    else {
+        mainWnd = static_cast<MainWindow*>(parent()->parent());
+    }
     ui->progressBar->setVisible(false);
+    ui->folderPanel->setVisible(false);
+    ui->scrollArea->setVisible(true);
+    QWidget *w = ui->scrollArea->widget();
+    if (w) {
+        delete w;
+    }
 
     QPixmap pixmap;
     if (pixmap.loadFromData(data)) {
-        ui->imageView->setSource(pixmap);
-        ui->folderPanel->setVisible(false);
-        ui->textView->setVisible(false);
-        ui->imageView->setVisible(true);
-        ui->imageView->setFocus();
+        ImageView *view = new ImageView(ui->scrollArea);
+        connect(view, SIGNAL(statusChanged(QString)), mainWnd, SLOT(view_statusChanged(QString)));
+        view->installEventFilter(mainWnd);
+        view->setData(pixmap);
+        emit showed(ui->scrollArea);
         return;
     }
 
-    ui->textView->setSource(data);
-    ui->folderPanel->setVisible(false);
-    ui->imageView->setVisible(false);
-    ui->textView->setVisible(true);
-    ui->textView->setFocus();
+    std::string code = detectCode(data.left(1024));
+    QTextCodec *codec = QTextCodec::codecForName(code.c_str());
+    if (codec) {
+        TextView *view = new TextView(ui->scrollArea);
+        connect(view, SIGNAL(copyAvailable(bool)), mainWnd, SLOT(view_copyAvailable(bool)));
+        connect(view, SIGNAL(statusChanged(QString)), mainWnd, SLOT(view_statusChanged(QString)));
+        view->installEventFilter(mainWnd);
+        view->setData(data);
+        emit showed(ui->scrollArea);
+        return;
+    }
+
+    HexView *view = new HexView(ui->scrollArea);
+    connect(view, SIGNAL(copyAvailable(bool)), mainWnd, SLOT(view_copyAvailable(bool)));
+    connect(view, SIGNAL(statusChanged(QString)), mainWnd, SLOT(view_statusChanged(QString)));
+    view->installEventFilter(mainWnd);
+    view->setData(data);
+    emit showed(ui->scrollArea);
 }