OSDN Git Service

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