OSDN Git Service

テキストビューアを試し実装中
authorMasayuki Satoh <miyabi.satoh@gmail.com>
Sat, 23 Aug 2014 14:15:20 +0000 (23:15 +0900)
committerMasayuki Satoh <miyabi.satoh@gmail.com>
Sat, 23 Aug 2014 14:15:20 +0000 (23:15 +0900)
filetableview.cpp
mainwindow.cpp
simpletextview.cpp
simpletextview.h

index ce2cf51..f9f08e1 100644 (file)
@@ -1077,7 +1077,7 @@ void FileTableView::keyPressEvent(QKeyEvent *event)
     if (!ksq.isEmpty()) {\r
         foreach (QObject *obj, getMainWnd()->children()) {\r
             QAction *action = qobject_cast<QAction*>(obj);\r
-            if (action) {\r
+            if (action && action->isEnabled()) {\r
                 foreach (const QKeySequence &keySeq, action->shortcuts()) {\r
                     if (ksq == keySeq.toString()) {\r
                         qDebug() << "emit " << ksq << " " << action->objectName();\r
index 7c7bac9..f4ff2eb 100644 (file)
@@ -153,15 +153,34 @@ void MainWindow::openRequest(const QFileInfo &info)
     m_focusedView = QApplication::focusWidget();\r
 \r
     setUpdatesEnabled(false);\r
+\r
+    foreach (QObject *obj, this->children()) {\r
+        QAction *action = qobject_cast<QAction*>(obj);\r
+        if (action) {\r
+            if (action->objectName() == "help_About" ||\r
+                action->objectName() == "check_Update" ||\r
+                action->objectName() == "copy_Fullpath" ||\r
+                action->objectName() == "copy_Filename" ||\r
+                action->objectName() == "action_Quit" ||\r
+                action->objectName() == "action_Setting")\r
+            {\r
+                continue;\r
+            }\r
+            qDebug() << action->objectName();\r
+            action->setEnabled(false);\r
+        }\r
+    }\r
+\r
+    ui->menu_File->setVisible(false);\r
     ui->splitter->setVisible(false);\r
     ui->plainTextEdit->setVisible(true);\r
     ui->plainTextEdit->setFocus();\r
+\r
     setUpdatesEnabled(true);\r
 \r
     QFile file(info.absoluteFilePath());\r
-    if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {\r
-        QTextStream ts(&file);\r
-        ui->plainTextEdit->setPlainText(ts.readAll());\r
+    if (file.open(QIODevice::ReadOnly)) {\r
+        ui->plainTextEdit->setSource(file.readAll());\r
     }\r
 }\r
 \r
@@ -269,9 +288,18 @@ void MainWindow::checkUpdateFinishedSilent(QNetworkReply *reply)
 void MainWindow::viewFinish(QWidget *sender)\r
 {\r
     setUpdatesEnabled(false);\r
+\r
+    foreach (QObject *obj, this->children()) {\r
+        QAction *action = qobject_cast<QAction*>(obj);\r
+        if (action) {\r
+            action->setEnabled(true);\r
+        }\r
+    }\r
+\r
     sender->setVisible(false);\r
     ui->splitter->setVisible(true);\r
     m_focusedView->setFocus();\r
+\r
     setUpdatesEnabled(true);\r
 }\r
 \r
index 465a443..67a500c 100644 (file)
@@ -2,10 +2,18 @@
 #include "simpletextview.h"
 
 #include <QDebug>
+#include <QMenu>
 #include <QSettings>
+#include <QTextCodec>
 
 SimpleTextView::SimpleTextView(QWidget *parent) :
-    QPlainTextEdit(parent)
+    QPlainTextEdit(parent),
+    m_convEUC(NULL),
+    m_convJIS(NULL),
+    m_convSJIS(NULL),
+    m_convUTF8(NULL),
+    m_convUTF16BE(NULL),
+    m_convUTF16LE(NULL)
 {
     setReadOnly(true);
 
@@ -16,8 +24,37 @@ SimpleTextView::SimpleTextView(QWidget *parent) :
     palette.setColor(QPalette::Text,
                      settings.value(IniKey_ViewColorFgNormal).value<QColor>());
     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_convUTF16BE = new QAction(tr("UTF-16BEで再読込"), this);
+    m_convUTF16LE = new QAction(tr("UTF-16LEで再読込"), this);
+
+    connect(m_convSJIS, SIGNAL(triggered()), this, SLOT(convertFromSJIS()));
+}
+
+void SimpleTextView::convertFromSJIS()
+{
+    QTextCodec *codec = QTextCodec::codecForName("Shift-JIS");
+    setPlainText(codec->toUnicode(m_source));
 }
 
+void SimpleTextView::setSource(const QByteArray &source)
+{
+    m_source = source;
+    convertFromSJIS();
+}
 
 void SimpleTextView::keyPressEvent(QKeyEvent *event)
 {
@@ -41,3 +78,17 @@ void SimpleTextView::keyPressEvent(QKeyEvent *event)
     }
     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.exec(event->globalPos());
+}
index 2fefd7b..cec2497 100644 (file)
@@ -9,15 +9,29 @@ class SimpleTextView : public QPlainTextEdit
 public:
     explicit SimpleTextView(QWidget *parent = 0);
 
+    void setSource(const QByteArray &source);
+
+private:
+    QAction *m_convEUC;
+    QAction *m_convJIS;
+    QAction *m_convSJIS;
+    QAction *m_convUTF8;
+    QAction *m_convUTF16BE;
+    QAction *m_convUTF16LE;
+    QByteArray m_source;
+
 signals:
     void viewFinished(QWidget *sender);
 
 public slots:
 
+private slots:
+    void convertFromSJIS();
 
     // QWidget interface
 protected:
     void keyPressEvent(QKeyEvent *event);
+    void contextMenuEvent(QContextMenuEvent *event);
 };
 
 #endif // SIMPLETEXTVIEW_H