X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=simpletextview.cpp;h=d78482b034f1a5bad0e05f67875d604468bff88e;hb=d8cd764fae2f020d6ff5d84227500681904710d5;hp=8b2815e7d57e4ccd644be42fd5a61ab9ee9f6152;hpb=d75512112a439f5b95e4d9ecec5ec2796a01996c;p=gefu%2FGefu.git diff --git a/simpletextview.cpp b/simpletextview.cpp index 8b2815e..d78482b 100644 --- a/simpletextview.cpp +++ b/simpletextview.cpp @@ -1,6 +1,6 @@ -#include "common.h" -#include "simpletextview.h" #include "mainwindow.h" +#include "preferences.h" +#include "simpletextview.h" #include #include @@ -8,113 +8,111 @@ #include #include #include - +#include + +/////////////////////////////////////////////////////////////////////////////// +/// \brief SimpleTextView::SimpleTextView +/// \param parent 親ウィジェット +/// +/// コンストラクタ +/// 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_back(NULL) + AbstractView(), + m_source() { setReadOnly(true); + setContextMenuPolicy(Qt::NoContextMenu); +} - QSettings settings; - QPalette palette = this->palette(); - palette.setColor(QPalette::Base, - settings.value(IniKey_ViewColorBgNormal).value()); - palette.setColor(QPalette::Text, - settings.value(IniKey_ViewColorFgNormal).value()); - setPalette(palette); - - QFont font = this->font(); -#ifdef Q_OS_MAC - font.setFamily("Menlo"); -#else - font.setFamily("MS ゴシック"); -#endif - setFont(font); - - 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_back = new QAction(tr("戻る"), this); +/////////////////////////////////////////////////////////////////////////////// +/// \brief SimpleTextView::initialize +/// \param w メインウィンドウオブジェクト +/// +/// 初期化処理を行います。 +/// +void SimpleTextView::initialize(MainWindow *w) +{ + qDebug() << "SimpleTextView::initialize()"; - m_convEUC->setShortcut(QKeySequence("E")); - m_convJIS->setShortcut(QKeySequence("J")); - m_convSJIS->setShortcut(QKeySequence("S")); - m_convUTF8->setShortcut(QKeySequence("U")); - m_convUTF8->setShortcut(QKeySequence("I")); - m_convUTF16BE->setShortcut(QKeySequence("J")); - m_convUTF16LE->setShortcut(QKeySequence("N")); - m_back->setShortcut(QKeySequence("Return")); + connect(this, SIGNAL(statusChanged(QString)), w, SLOT(view_statusChanged(QString))); + connect(this, SIGNAL(copyAvailable(bool)), w, SLOT(view_copyAvailable(bool))); - 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_back, SIGNAL(triggered()), this, SLOT(back())); + 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 statusChanged(""); + return; + } - // BOMで文字コードを判別する - const char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF }; - const char UTF16BE_BOM[] = { 0xFE, 0xFF }; - const char UTF16LE_BOM[] = { 0xFF, 0xFE }; + std::string code = detectCode(m_source.left(1024)); + QTextCodec *codec = QTextCodec::codecForName(code.c_str()); - if (m_source.indexOf(QByteArray(UTF8_BOM)) == 0) { - qDebug() << "Detect UTF-8 BOM"; - convertFromUTF8(); - } - else if (m_source.indexOf(QByteArray(UTF16BE_BOM)) == 0 || - m_source.indexOf(QByteArray(UTF16LE_BOM)) == 0) - { - qDebug() << "Detect UTF-16 BOM"; - convertFromUTF16(); - } + setPlainText(codec->toUnicode(m_source)); - QByteArray first1KB = m_source.left(1024); - // 文字コードを示す文字列で判別する + emit statusChanged(code.c_str()); +} + +void SimpleTextView::convertFromEUC() +{ + QTextCodec *codec = QTextCodec::codecForName("EUC-JP"); + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("EUC-JP"); +} + +void SimpleTextView::convertFromJIS() +{ + QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP"); + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("ISO 2022-JP"); +} + +void SimpleTextView::convertFromSJIS() +{ + QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("Shift-JIS"); +} + +void SimpleTextView::convertFromUTF8() +{ QTextCodec *codec = QTextCodec::codecForName("UTF-8"); - QString text = codec->toUnicode(first1KB).toLower(); - if (text.indexOf("utf8") != -1 || text.indexOf("utf-8") != -1) { - convertFromUTF8(); - return; - } - if (text.indexOf("sjis") != -1 || text.indexOf("shift-jis") != -1 || - text.indexOf("shift_jis") != -1) - { - convertFromSJIS(); - return; - } - if (text.indexOf("euc") != -1 || text.indexOf("euc-jp") != -1 || - text.indexOf("euc_jp") != -1) - { - convertFromEUC(); - return; - } - if (text.indexOf("jis") != -1 || text.indexOf("iso 2022-jp") != -1) { - convertFromJIS(); - return; - } + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("UTF-8"); +} + +void SimpleTextView::convertFromUTF16() +{ + QTextCodec *codec = QTextCodec::codecForName("UTF-16"); + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("UTF-16"); +} - std::string code = detectCode(first1KB); - codec = QTextCodec::codecForName(code.c_str()); +void SimpleTextView::convertFromUTF16BE() +{ + QTextCodec *codec = QTextCodec::codecForName("UTF-16BE"); + setPlainText(codec->toUnicode(m_source)); + emit statusChanged("UTF-16BE"); +} + +void SimpleTextView::convertFromUTF16LE() +{ + QTextCodec *codec = QTextCodec::codecForName("UTF-16LE"); setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage(code.c_str()); + emit statusChanged("UTF-16LE"); } // http://dobon.net/vb/dotnet/string/detectcode.html より拝借 @@ -256,126 +254,23 @@ std::string SimpleTextView::detectCode(const QByteArray &bytes) #endif } -void SimpleTextView::convertFromEUC() -{ - QTextCodec *codec = QTextCodec::codecForName("EUC-JP"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("EUC-JP"); -} - -void SimpleTextView::convertFromJIS() -{ - QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("ISO 2022-JP"); -} -void SimpleTextView::convertFromSJIS() +void SimpleTextView::scaleUp() { - QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("Shift-JIS"); + qDebug() << "SimpleTextView::scaleUp()"; + Preferences prefs(this); + QFont font = prefs.getTextViewFont(); + font.setPointSize(font.pointSize() + 1); + prefs.setTextViewFont(font); } -void SimpleTextView::convertFromUTF8() +void SimpleTextView::scaleDown() { - QTextCodec *codec = QTextCodec::codecForName("UTF-8"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("UTF-8"); -} - -void SimpleTextView::convertFromUTF16() -{ - QTextCodec *codec = QTextCodec::codecForName("UTF-16"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("UTF-16"); -} - -void SimpleTextView::convertFromUTF16BE() -{ - QTextCodec *codec = QTextCodec::codecForName("UTF-16BE"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("UTF-16BE"); -} + qDebug() << "SimpleTextView::scaleDown()"; -void SimpleTextView::convertFromUTF16LE() -{ - QTextCodec *codec = QTextCodec::codecForName("UTF-16LE"); - setPlainText(codec->toUnicode(m_source)); - getMainWnd()->statusBar()->showMessage("UTF-16LE"); -} - -void SimpleTextView::back() -{ - emit viewFinished(this); -} - -void SimpleTextView::keyPressEvent(QKeyEvent *event) -{ - 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(); - QString ksq = QKeySequence(modifier + key).toString(); - - if (ksq == "Return" || ksq == "Backspace" || ksq == "W") { - emit viewFinished(this); - event->accept(); - return; - } - - if (!ksq.isEmpty()) { - foreach (QObject *obj, this->children()) { - QAction *action = qobject_cast(obj); - if (action && action->isEnabled()) { - foreach (const QKeySequence &keySeq, action->shortcuts()) { - if (ksq == keySeq.toString()) { - qDebug() << "emit " << ksq << " " << action->objectName(); - emit action->triggered(); - event->accept(); - return; - } - } - } - } - - foreach (QObject *obj, getMainWnd()->children()) { - QAction *action = qobject_cast(obj); - if (action && action->isEnabled()) { - foreach (const QKeySequence &keySeq, action->shortcuts()) { - if (ksq == keySeq.toString()) { - qDebug() << "emit " << ksq << " " << action->objectName(); - emit action->triggered(); - event->accept(); - return; - } - } - } - } - } - - if (ksq != "Down" && ksq != "Up") { - qDebug() << ksq; - } - - QPlainTextEdit::keyPressEvent(event); -} - - -void SimpleTextView::contextMenuEvent(QContextMenuEvent *event) -{ - qDebug() << "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.addAction(m_back); - menu.exec(event->globalPos()); + Preferences prefs(this); + QFont font = prefs.getTextViewFont(); + font.setPointSize(font.pointSize() - 1); + prefs.setTextViewFont(font); }