OSDN Git Service

サムネイルモードの実装
[gefu/Gefu.git] / simpletextview.cpp
index deadb64..d78482b 100644 (file)
@@ -1,6 +1,6 @@
-#include "common.h"
-#include "simpletextview.h"
 #include "mainwindow.h"
+#include "preferences.h"
+#include "simpletextview.h"
 
 #include <QDebug>
 #include <QMenu>
 #include <QApplication>
 
 ///////////////////////////////////////////////////////////////////////////////
-/// \brief KeyEventToSequence
-/// \param event キーイベントオブジェクト
-/// \return キーシーケンスの文字列(Ctrl+C等)
+/// \brief SimpleTextView::SimpleTextView
+/// \param parent   親ウィジェット
 ///
-/// ã\82­ã\83¼ã\82¤ã\83\99ã\83³ã\83\88ã\81§æ\8a¼ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\82­ã\83¼ã\82\92ã\82­ã\83¼ã\82·ã\83¼ã\82±ã\83³ã\82¹æ\96\87å­\97å\88\97ã\81«å¤\89æ\8f\9bã\81\97ã\81¾ã\81\99
+/// ã\82³ã\83³ã\82¹ã\83\88ã\83©ã\82¯ã\82¿
 ///
-QString KeyEventToSequence(const QKeyEvent *event)
+SimpleTextView::SimpleTextView(QWidget *parent) :
+    QPlainTextEdit(parent),
+    AbstractView(),
+    m_source()
 {
-    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();
-
-    return modifier + key;
+    setReadOnly(true);
+    setContextMenuPolicy(Qt::NoContextMenu);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-/// \brief IsKeyUpDown
-/// \param event キーイベントオブジェクト
-/// \return (Up/Down/Home/End)+(!Shift)の場合true
+/// \brief SimpleTextView::initialize
+/// \param w    メインウィンドウオブジェクト
 ///
-/// カーソル移動系のキーが押されたかを判定します
+/// 初期化処理を行います。
 ///
-bool IsKeyUpDown(const QKeyEvent *event)
-{
-    QString ksq = KeyEventToSequence(event);
-
-    switch (event->key()) {
-    case Qt::Key_Up:
-    case Qt::Key_Down:
-    case Qt::Key_Home:
-    case Qt::Key_End:
-        if (event->modifiers() & Qt::ShiftModifier) {
-            return false;
-        }
-        else {
-            return true;
-        }
-    }
-    return false;
-}
-
-SimpleTextView::SimpleTextView(QWidget *parent) :
-    QPlainTextEdit(parent),
-    m_convEUC(NULL),
-    m_convJIS(NULL),
-    m_convSJIS(NULL),
-    m_convUTF8(NULL),
-    m_convUTF16BE(NULL),
-    m_convUTF16LE(NULL),
-    m_copy(NULL),
-    m_back(NULL)
+void SimpleTextView::initialize(MainWindow *w)
 {
-    setReadOnly(true);
-    updateAppearance();
-
-    setContextMenuPolicy(Qt::DefaultContextMenu);
-    m_convEUC = new QAction(tr("EUC-JPで再読込"), this);
-    m_convJIS = new QAction(tr("ISO 2022-JP(JIS)で再読込"), this);
-    m_convSJIS = new QAction(tr("Shift-JISで再読込"), this);
-    m_convUTF8 = new QAction(tr("UTF-8で再読込"), this);
-    m_convUTF16 = new QAction(tr("UTF-16で再読込"), this);
-    m_convUTF16BE = new QAction(tr("UTF-16BEで再読込"), this);
-    m_convUTF16LE = new QAction(tr("UTF-16LEで再読込"), this);
-    m_copy = new QAction(tr("選択範囲をクリップボードにコピー"), this);
-    m_back = new QAction(tr("戻る"), this);
-
-    m_convEUC->setObjectName("convertFromEUC");
-    m_convJIS->setObjectName("convertFromJIS");
-    m_convSJIS->setObjectName("convertFromSJIS");
-    m_convUTF8->setObjectName("convertFromUTF8");
-    m_convUTF16->setObjectName("convertFromUTF16");
-    m_convUTF16BE->setObjectName("convertFromUTF16BE");
-    m_convUTF16LE->setObjectName("convertFromUTF16LE");
-    m_copy->setObjectName("copy");
-    m_back->setObjectName("back");
+    qDebug() << "SimpleTextView::initialize()";
 
-    m_convEUC->setShortcut(QKeySequence("Ctrl+E"));
-    m_convJIS->setShortcut(QKeySequence("Ctrl+J"));
-    m_convSJIS->setShortcut(QKeySequence("Ctrl+S"));
-    m_convUTF8->setShortcut(QKeySequence("Ctrl+U"));
-    m_convUTF16->setShortcut(QKeySequence("Ctrl+I"));
-    m_convUTF16BE->setShortcut(QKeySequence("Ctrl+O"));
-    m_convUTF16LE->setShortcut(QKeySequence("Ctrl+P"));
-    m_copy->setShortcut(QKeySequence::Copy);
+    connect(this, SIGNAL(statusChanged(QString)), w, SLOT(view_statusChanged(QString)));
+    connect(this, SIGNAL(copyAvailable(bool)), w, SLOT(view_copyAvailable(bool)));
 
-    QList<QKeySequence> shortcuts;
-    shortcuts << QKeySequence("Return");
-    shortcuts << QKeySequence("Backspace");
-    m_back->setShortcuts(shortcuts);
-
-    connect(m_convEUC, SIGNAL(triggered()), this, SLOT(convertFromEUC()));
-    connect(m_convJIS, SIGNAL(triggered()), this, SLOT(convertFromJIS()));
-    connect(m_convSJIS, SIGNAL(triggered()), this, SLOT(convertFromSJIS()));
-    connect(m_convUTF8, SIGNAL(triggered()), this, SLOT(convertFromUTF8()));
-    connect(m_convUTF16, SIGNAL(triggered()), this, SLOT(convertFromUTF16()));
-    connect(m_convUTF16BE, SIGNAL(triggered()), this, SLOT(convertFromUTF16BE()));
-    connect(m_convUTF16LE, SIGNAL(triggered()), this, SLOT(convertFromUTF16LE()));
-    connect(m_copy, SIGNAL(triggered()), this, SLOT(copy()));
-    connect(m_back, SIGNAL(triggered()), this, SLOT(back()));
-
-    connect(this, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));
-
-    m_copy->setEnabled(false);
+    installEventFilter(w);
 }
 
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleTextView::setSource
+/// \param source   表示するデータ
+///
+/// データを表示します。
+///
 void SimpleTextView::setSource(const QByteArray &source)
 {
+    qDebug() << "SimpleTextView::setSource()" << source.size();
+
     m_source = source;
     if (m_source.size() == 0) {
         setPlainText("");
-        emit fileInfo("");
+        emit statusChanged("");
         return;
     }
 
@@ -135,125 +63,56 @@ void SimpleTextView::setSource(const QByteArray &source)
 
     setPlainText(codec->toUnicode(m_source));
 
-    emit fileInfo(code.c_str());
-}
-
-void SimpleTextView::updateAppearance()
-{
-    QSettings settings;
-
-    QPalette pal = this->palette();
-    if (settings.value(IniKey_ViewerInherit).toBool()) {
-        pal.setColor(QPalette::Base,
-                     settings.value(IniKey_ViewColorBgNormal).value<QColor>());
-        pal.setColor(QPalette::Text,
-                     settings.value(IniKey_ViewColorFgNormal).value<QColor>());
-    }
-    else {
-        pal.setColor(QPalette::Base,
-                     settings.value(IniKey_ViewerColorBg).value<QColor>());
-        pal.setColor(QPalette::Text,
-                     settings.value(IniKey_ViewerColorFg).value<QColor>());
-    }
-    setPalette(pal);
-    setFont(settings.value(IniKey_ViewerFont).value<QFont>());
+    emit statusChanged(code.c_str());
 }
 
 void SimpleTextView::convertFromEUC()
 {
     QTextCodec *codec = QTextCodec::codecForName("EUC-JP");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("EUC-JP");
+    emit statusChanged("EUC-JP");
 }
 
 void SimpleTextView::convertFromJIS()
 {
     QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("ISO 2022-JP");
+    emit statusChanged("ISO 2022-JP");
 }
 
 void SimpleTextView::convertFromSJIS()
 {
     QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("Shift-JIS");
+    emit statusChanged("Shift-JIS");
 }
 
 void SimpleTextView::convertFromUTF8()
 {
     QTextCodec *codec = QTextCodec::codecForName("UTF-8");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("UTF-8");
+    emit statusChanged("UTF-8");
 }
 
 void SimpleTextView::convertFromUTF16()
 {
     QTextCodec *codec = QTextCodec::codecForName("UTF-16");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("UTF-16");
+    emit statusChanged("UTF-16");
 }
 
 void SimpleTextView::convertFromUTF16BE()
 {
     QTextCodec *codec = QTextCodec::codecForName("UTF-16BE");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("UTF-16BE");
+    emit statusChanged("UTF-16BE");
 }
 
 void SimpleTextView::convertFromUTF16LE()
 {
     QTextCodec *codec = QTextCodec::codecForName("UTF-16LE");
     setPlainText(codec->toUnicode(m_source));
-    emit fileInfo("UTF-16LE");
-}
-
-void SimpleTextView::onCopyAvailable(bool yes)
-{
-    m_copy->setEnabled(yes);
-}
-
-void SimpleTextView::back()
-{
-    emit viewFinished();
-}
-
-void SimpleTextView::keyPressEvent(QKeyEvent *event)
-{
-    QString ksq = KeyEventToSequence(event);
-
-    if (ProcessShortcut(ksq, this)) {
-        event->accept();
-        return;
-    }
-
-    QPlainTextEdit::keyPressEvent(event);
-    if (IsKeyUpDown(event)) {
-        event->accept();
-        return;
-    }
-
-    // MainWindowへ
-    event->ignore();
-}
-
-
-void SimpleTextView::contextMenuEvent(QContextMenuEvent *event)
-{
-    qDebug() << "SimpleTextView::contextMenuEvent();";
-
-    QMenu menu(this);
-    menu.addAction(m_convEUC);
-    menu.addAction(m_convJIS);
-    menu.addAction(m_convSJIS);
-    menu.addAction(m_convUTF8);
-    menu.addAction(m_convUTF16BE);
-    menu.addAction(m_convUTF16LE);
-    menu.addSeparator();
-    menu.addAction(m_copy);
-    menu.addSeparator();
-    menu.addAction(m_back);
-    menu.exec(event->globalPos());
+    emit statusChanged("UTF-16LE");
 }
 
 // http://dobon.net/vb/dotnet/string/detectcode.html より拝借
@@ -394,3 +253,24 @@ std::string SimpleTextView::detectCode(const QByteArray &bytes)
     return "UTF-8";
 #endif
 }
+
+
+void SimpleTextView::scaleUp()
+{
+    qDebug() << "SimpleTextView::scaleUp()";
+
+    Preferences prefs(this);
+    QFont font = prefs.getTextViewFont();
+    font.setPointSize(font.pointSize() + 1);
+    prefs.setTextViewFont(font);
+}
+
+void SimpleTextView::scaleDown()
+{
+    qDebug() << "SimpleTextView::scaleDown()";
+
+    Preferences prefs(this);
+    QFont font = prefs.getTextViewFont();
+    font.setPointSize(font.pointSize() - 1);
+    prefs.setTextViewFont(font);
+}