-#include "common.h"
-#include "simpletextview.h"
#include "mainwindow.h"
+#include "preferences.h"
+#include "simpletextview.h"
#include <QDebug>
#include <QMenu>
#include <QShortcut>
#include <QTextCodec>
#include <QStatusBar>
-
-QString KeyEventToSequence(const 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();
- return QKeySequence(modifier + key).toString();
-}
-
+#include <QApplication>
+
+///////////////////////////////////////////////////////////////////////////////
+/// \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_copy(NULL),
- m_back(NULL)
+ AbstractView(),
+ m_source()
{
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");
-
- m_convEUC->setShortcut(QKeySequence("Shift+E"));
- m_convJIS->setShortcut(QKeySequence("Shift+J"));
- m_convSJIS->setShortcut(QKeySequence("Shift+S"));
- m_convUTF8->setShortcut(QKeySequence("Shift+U"));
- m_convUTF16->setShortcut(QKeySequence("Shift+I"));
- m_convUTF16BE->setShortcut(QKeySequence("Shift+O"));
- m_convUTF16LE->setShortcut(QKeySequence("Shift+P"));
- m_copy->setShortcut(QKeySequence::Copy);
- m_back->setShortcut(QKeySequence("Return"));
-
- QList<QKeySequence> shortcuts;
- shortcuts = m_back->shortcuts();
- shortcuts.append(QKeySequence("Backspace"));
- m_back->setShortcuts(shortcuts);
+ setContextMenuPolicy(Qt::NoContextMenu);
+}
- 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()));
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleTextView::initialize
+/// \param w メインウィンドウオブジェクト
+///
+/// 初期化処理を行います。
+///
+void SimpleTextView::initialize(MainWindow *w)
+{
+ qDebug() << "SimpleTextView::initialize()";
- connect(this, SIGNAL(copyAvailable(bool)), this, SLOT(onCopyAvailable(bool)));
+ connect(this, SIGNAL(statusChanged(QString)), w, SLOT(view_statusChanged(QString)));
+ connect(this, SIGNAL(copyAvailable(bool)), w, SLOT(view_copyAvailable(bool)));
- m_copy->setEnabled(false);
+ installEventFilter(w);
}
+///////////////////////////////////////////////////////////////////////////////
+/// \brief SimpleTextView::setSource
+/// \param source 表示するデータ
+///
+/// データを表示します。
+///
void SimpleTextView::setSource(const QByteArray &source)
{
- m_source = source;
+ qDebug() << "SimpleTextView::setSource()" << source.size();
- // BOMで文字コードを判別する
- const char UTF8_BOM[] = { 0xEF, 0xBB, 0xBF };
- const char UTF16BE_BOM[] = { 0xFE, 0xFF };
- const char UTF16LE_BOM[] = { 0xFF, 0xFE };
-
- 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();
- }
-
- QByteArray first1KB = m_source.left(1024);
- // 文字コードを示す文字列で判別する
- 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();
+ m_source = source;
+ if (m_source.size() == 0) {
+ setPlainText("");
+ emit statusChanged("");
return;
}
- std::string code = detectCode(first1KB);
- codec = QTextCodec::codecForName(code.c_str());
- setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage(code.c_str());
-}
+ std::string code = detectCode(m_source.left(1024));
+ QTextCodec *codec = QTextCodec::codecForName(code.c_str());
-void SimpleTextView::updateAppearance()
-{
- QSettings settings;
+ setPlainText(codec->toUnicode(m_source));
- 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));
- getMainWnd()->statusBar()->showMessage("EUC-JP");
+ emit statusChanged("EUC-JP");
}
void SimpleTextView::convertFromJIS()
{
QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("ISO 2022-JP");
+ emit statusChanged("ISO 2022-JP");
}
void SimpleTextView::convertFromSJIS()
{
QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("Shift-JIS");
-
+ emit statusChanged("Shift-JIS");
}
void SimpleTextView::convertFromUTF8()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-8");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("UTF-8");
+ emit statusChanged("UTF-8");
}
void SimpleTextView::convertFromUTF16()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("UTF-16");
+ emit statusChanged("UTF-16");
}
void SimpleTextView::convertFromUTF16BE()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16BE");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("UTF-16BE");
+ emit statusChanged("UTF-16BE");
}
void SimpleTextView::convertFromUTF16LE()
{
QTextCodec *codec = QTextCodec::codecForName("UTF-16LE");
setPlainText(codec->toUnicode(m_source));
- getMainWnd()->statusBar()->showMessage("UTF-16LE");
-}
-
-void SimpleTextView::onCopyAvailable(bool yes)
-{
- m_copy->setEnabled(yes);
-}
-
-void SimpleTextView::back()
-{
- emit viewFinished(this);
-}
-
-void SimpleTextView::keyPressEvent(QKeyEvent *event)
-{
- QString ksq = KeyEventToSequence(event);
-
- if (ProcessShortcut(ksq, this)) {
- event->accept();
- return;
- }
-
- if (ProcessShortcut(ksq, getMainWnd())) {
- event->accept();
- return;
- }
-
- 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.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 より拝借
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);
+}