OSDN Git Service

c6eb52aaa57c3d4eef074d4b197c1b1d8fd33cd9
[gefu/Gefu.git] / simpletextview.cpp
1 #include "common.h"
2 #include "simpletextview.h"
3 #include "mainwindow.h"
4
5 #include <QDebug>
6 #include <QMenu>
7 #include <QSettings>
8 #include <QShortcut>
9 #include <QTextCodec>
10
11 SimpleTextView::SimpleTextView(QWidget *parent) :
12     QPlainTextEdit(parent),
13     m_convEUC(NULL),
14     m_convJIS(NULL),
15     m_convSJIS(NULL),
16     m_convUTF8(NULL),
17     m_convUTF16BE(NULL),
18     m_convUTF16LE(NULL)
19 {
20     setReadOnly(true);
21
22     QSettings settings;
23     QPalette palette = this->palette();
24     palette.setColor(QPalette::Base,
25                      settings.value(IniKey_ViewColorBgNormal).value<QColor>());
26     palette.setColor(QPalette::Text,
27                      settings.value(IniKey_ViewColorFgNormal).value<QColor>());
28     setPalette(palette);
29
30     QFont font = this->font();
31 #ifdef Q_OS_MAC
32     font.setFamily("Menlo");
33 #else
34     font.setFamily("MS ゴシック");
35 #endif
36     setFont(font);
37
38     setContextMenuPolicy(Qt::DefaultContextMenu);
39     m_convEUC = new QAction(tr("EUC-JPで再読込"), this);
40     m_convJIS = new QAction(tr("ISO 2022-JP(JIS)で再読込"), this);
41     m_convSJIS = new QAction(tr("Shift-JISで再読込"), this);
42     m_convUTF8 = new QAction(tr("UTF-8で再読込"), this);
43     m_convUTF16BE = new QAction(tr("UTF-16BEで再読込"), this);
44     m_convUTF16LE = new QAction(tr("UTF-16LEで再読込"), this);
45
46     m_convEUC->setShortcut(QKeySequence("E"));
47     m_convJIS->setShortcut(QKeySequence("J"));
48     m_convSJIS->setShortcut(QKeySequence("S"));
49     m_convUTF8->setShortcut(QKeySequence("U"));
50     m_convUTF16BE->setShortcut(QKeySequence("B"));
51     m_convUTF16LE->setShortcut(QKeySequence("L"));
52
53     connect(m_convEUC, SIGNAL(triggered()), this, SLOT(convertFromEUC()));
54     connect(m_convJIS, SIGNAL(triggered()), this, SLOT(convertFromJIS()));
55     connect(m_convSJIS, SIGNAL(triggered()), this, SLOT(convertFromSJIS()));
56     connect(m_convUTF8, SIGNAL(triggered()), this, SLOT(convertFromUTF8()));
57     connect(m_convUTF16BE, SIGNAL(triggered()), this, SLOT(convertFromUTF16BE()));
58     connect(m_convUTF16LE, SIGNAL(triggered()), this, SLOT(convertFromUTF16LE()));
59 }
60
61 void SimpleTextView::setSource(const QByteArray &source)
62 {
63     m_source = source;
64 #ifdef Q_OS_MAC
65     convertFromUTF8();
66 #else
67     convertFromSJIS();
68 #endif
69 }
70
71 void SimpleTextView::convertFromEUC()
72 {
73     QTextCodec *codec = QTextCodec::codecForName("EUC-JP");
74     setPlainText(codec->toUnicode(m_source));
75 }
76
77 void SimpleTextView::convertFromJIS()
78 {
79     QTextCodec *codec = QTextCodec::codecForName("ISO 2022-JP");
80     setPlainText(codec->toUnicode(m_source));
81 }
82
83 void SimpleTextView::convertFromSJIS()
84 {
85     QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
86     setPlainText(codec->toUnicode(m_source));
87 }
88
89 void SimpleTextView::convertFromUTF8()
90 {
91     QTextCodec *codec = QTextCodec::codecForName("UTF-8");
92     setPlainText(codec->toUnicode(m_source));
93 }
94
95 void SimpleTextView::convertFromUTF16BE()
96 {
97     QTextCodec *codec = QTextCodec::codecForName("UTF-16BE");
98     setPlainText(codec->toUnicode(m_source));
99 }
100
101 void SimpleTextView::convertFromUTF16LE()
102 {
103     QTextCodec *codec = QTextCodec::codecForName("UTF-16LE");
104     setPlainText(codec->toUnicode(m_source));
105 }
106
107 void SimpleTextView::keyPressEvent(QKeyEvent *event)
108 {
109     QString modifier = QString::null;
110     if (event->modifiers() & Qt::ShiftModifier)     { modifier += "Shift+"; }
111     if (event->modifiers() & Qt::ControlModifier)   { modifier += "Ctrl+"; }
112     if (event->modifiers() & Qt::AltModifier)       { modifier += "Alt+"; }
113     if (event->modifiers() & Qt::MetaModifier)      { modifier += "Meta+"; }
114
115     QString key = QKeySequence(event->key()).toString();
116     QString ksq = QKeySequence(modifier + key).toString();
117
118     if (ksq == "Return" || ksq == "Backspace" || ksq == "W") {
119         emit viewFinished(this);
120         event->accept();
121         return;
122     }
123
124     if (!ksq.isEmpty()) {
125         foreach (QObject *obj, this->children()) {
126             QAction *action = qobject_cast<QAction*>(obj);
127             if (action && action->isEnabled()) {
128                 foreach (const QKeySequence &keySeq, action->shortcuts()) {
129                     if (ksq == keySeq.toString()) {
130                         qDebug() << "emit " << ksq << " " << action->objectName();
131                         emit action->triggered();
132                         event->accept();
133                         return;
134                     }
135                 }
136             }
137         }
138
139         foreach (QObject *obj, getMainWnd()->children()) {
140             QAction *action = qobject_cast<QAction*>(obj);
141             if (action && action->isEnabled()) {
142                 foreach (const QKeySequence &keySeq, action->shortcuts()) {
143                     if (ksq == keySeq.toString()) {
144                         qDebug() << "emit " << ksq << " " << action->objectName();
145                         emit action->triggered();
146                         event->accept();
147                         return;
148                     }
149                 }
150             }
151         }
152     }
153
154     if (ksq != "Down" && ksq != "Up") {
155         qDebug() << ksq;
156     }
157
158     QPlainTextEdit::keyPressEvent(event);
159 }
160
161
162 void SimpleTextView::contextMenuEvent(QContextMenuEvent *event)
163 {
164     qDebug() << "contextMenuEvent();";
165     QMenu menu(this);
166     menu.addAction(m_convEUC);
167     menu.addAction(m_convJIS);
168     menu.addAction(m_convSJIS);
169     menu.addAction(m_convUTF8);
170     menu.addAction(m_convUTF16BE);
171     menu.addAction(m_convUTF16LE);
172     menu.exec(event->globalPos());
173 }