OSDN Git Service

[dennco] implemented the running mode which work with denncoCreator. To run dennco...
authortkawata <tkawata@users.sourceforge.jp>
Tue, 23 Oct 2012 15:06:25 +0000 (00:06 +0900)
committertkawata <tkawata@users.sourceforge.jp>
Tue, 23 Oct 2012 15:06:25 +0000 (00:06 +0900)
Source/Source.pro
Source/layer3/DNSettings.cpp
Source/layer3/DNSettings.h
Source/layer3/QtDennco/mainwindow.cpp
Source/layer3/QtDennco/mainwindow.h

index 46c7cc8..3b7adcf 100644 (file)
@@ -4,7 +4,7 @@
 #
 #-------------------------------------------------
 
-QT       += core gui webkit script xml sql
+QT       += core gui webkit script xml sql network
 
 TARGET = QtDennco
 TEMPLATE = app
index 31aa719..0f9cb0f 100644 (file)
@@ -29,6 +29,9 @@ const char *DNSettings::SERIAL_PARITY       = "serial parity";
 const char *DNSettings::SERIAL_STOPBITS     = "serial stopbits";
 const char *DNSettings::SERIAL_FLOWCONTROL  = "serial flowControl";
 
+const char *DNSettings::CREATORCONTROLLED_WINDOWLAYOUT      = "creatorcontrolled_windowlayout";
+const char *DNSettings::CREATORCONTROLLED_WINDOWGEOMETORY   = "creatorcontrolled_windowgeometory";
+
 //static
 std::string DNSettings::getValue(const char *key, std::string defaultValue)
 {
index f1d4e43..17b7c66 100644 (file)
@@ -35,6 +35,9 @@ public:
     static const char *SERIAL_STOPBITS;
     static const char *SERIAL_FLOWCONTROL;
 
+    static const char *CREATORCONTROLLED_WINDOWLAYOUT;
+    static const char *CREATORCONTROLLED_WINDOWGEOMETORY;
+
     static std::string getValue(const char *key, std::string defaultValue = "");
     static void setValue(const char *key, std::string value);
 
index 34f3243..1f3eed7 100644 (file)
@@ -23,6 +23,7 @@
 #include <QDir>
 #include <QDebug>
 #include <QWebFrame>
+#include <QLocalSocket>
 
 #include "TKLog.h"
 #include "DNGlobal.h"
@@ -45,8 +46,25 @@ QWidget *MainWindow::instance = NULL;
 MainWindow::MainWindow(QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::MainWindow),
-    mEngine(NULL), mWebInterface(NULL)
+    mEngine(NULL), mWebInterface(NULL), mControlledByCreator(false), mCreatorIPCServer(NULL)
 {
+    QStringList arguments = qApp->arguments();
+    for (int i = 0; i < arguments.length(); i++)
+    {
+        if (!mControlledByCreator && arguments.at(i) == "-creatorControlled")
+        {
+            i++;
+            if (i < arguments.length() && arguments.at(i).indexOf("denncoCreator_") == 0)
+            {
+                mCreatorIPCServer = new QLocalServer(this);
+                if (mCreatorIPCServer->listen(arguments.at(i)))
+                {
+                    mControlledByCreator = true;
+                }
+            }
+        }
+    }
+
     instance = this;
     ui->setupUi(this);
 
@@ -55,40 +73,80 @@ MainWindow::MainWindow(QWidget *parent) :
 
     this->setWindowTitle(windowTitle);
 
-    QString defaultPath(QDir::homePath());
-    QString contentPath = QString::fromStdString(DNSettings::getValue(DNSettings::CONTEXT_PATH, defaultPath.toStdString()));
+    if (!mControlledByCreator)
+    {
+        QString defaultPath(QDir::homePath());
+        QString contentPath = QString::fromStdString(DNSettings::getValue(DNSettings::CONTEXT_PATH, defaultPath.toStdString()));
 
-    ui->filePath->setText(contentPath);
+        ui->filePath->setText(contentPath);
 
-    ui->console->document()->setMaximumBlockCount(500);
-    QFont monofont("Courier");
-    monofont.setStyleHint(QFont::Monospace);
-    ui->console->setFont(monofont);
-    TKLog::setDestination(this);
-    connect(this, SIGNAL(consoleUpdated()), this, SLOT(update()), Qt::AutoConnection);
+        ui->console->document()->setMaximumBlockCount(500);
+        QFont monofont("Courier");
+        monofont.setStyleHint(QFont::Monospace);
+        ui->console->setFont(monofont);
+        TKLog::setDestination(this);
+        connect(this, SIGNAL(consoleUpdated()), this, SLOT(update()), Qt::AutoConnection);
 
-    std::string savedWindowStateStr = DNSettings::getValue(DNSettings::WINDOWLAYOUT,"");
-    QByteArray savedWindowStateQArray(savedWindowStateStr.c_str());
-    restoreState(QByteArray::fromHex(savedWindowStateQArray));
+        std::string savedWindowStateStr = DNSettings::getValue(DNSettings::WINDOWLAYOUT,"");
+        QByteArray savedWindowStateQArray(savedWindowStateStr.c_str());
+        restoreState(QByteArray::fromHex(savedWindowStateQArray));
 
-    std::string savedWindowGeometoryStr = DNSettings::getValue(DNSettings::WINDOWGEOMETORY,"");
-    QByteArray savedWindowGeometoryQArray(savedWindowGeometoryStr.c_str());
-    restoreGeometry(QByteArray::fromHex(savedWindowGeometoryQArray));
+        std::string savedWindowGeometoryStr = DNSettings::getValue(DNSettings::WINDOWGEOMETORY,"");
+        QByteArray savedWindowGeometoryQArray(savedWindowGeometoryStr.c_str());
+        restoreGeometry(QByteArray::fromHex(savedWindowGeometoryQArray));
+    }
+    else
+    {
+        ui->filePath->setText("");
+        ui->filePath->setEnabled(false);
+        ui->chooseDirButton->setVisible(false);
+
+        ui->console->document()->setMaximumBlockCount(500);
+        QFont monofont("Courier");
+        monofont.setStyleHint(QFont::Monospace);
+        ui->console->setFont(monofont);
+        TKLog::setDestination(this);
+        connect(this, SIGNAL(consoleUpdated()), this, SLOT(update()), Qt::AutoConnection);
+
+        std::string savedWindowStateStr = DNSettings::getValue(DNSettings::CREATORCONTROLLED_WINDOWLAYOUT,"");
+        QByteArray savedWindowStateQArray(savedWindowStateStr.c_str());
+        restoreState(QByteArray::fromHex(savedWindowStateQArray));
+
+        std::string savedWindowGeometoryStr = DNSettings::getValue(DNSettings::CREATORCONTROLLED_WINDOWGEOMETORY,"");
+        QByteArray savedWindowGeometoryQArray(savedWindowGeometoryStr.c_str());
+        restoreGeometry(QByteArray::fromHex(savedWindowGeometoryQArray));
+
+        connect(mCreatorIPCServer, SIGNAL(newConnection()), this, SLOT(on_newRequestFromCreator()));
+    }
 }
 
 MainWindow::~MainWindow()
 {
+    if (mCreatorIPCServer)
+        delete mCreatorIPCServer;
+
     instance = 0;
     delete ui;
 }
 
 void MainWindow::closeEvent(QCloseEvent *event)
 {
-    QByteArray savingWindowStateQArray = saveState().toHex();
-    DNSettings::setValue(DNSettings::WINDOWLAYOUT, savingWindowStateQArray.constData());
+    if (!mControlledByCreator)
+    {
+        QByteArray savingWindowStateQArray = saveState().toHex();
+        DNSettings::setValue(DNSettings::WINDOWLAYOUT, savingWindowStateQArray.constData());
+
+        QByteArray savingWindowGeometoryQArray = saveGeometry().toHex();
+        DNSettings::setValue(DNSettings::WINDOWGEOMETORY, savingWindowGeometoryQArray.constData());
+    }
+    else
+    {
+        QByteArray savingWindowStateQArray = saveState().toHex();
+        DNSettings::setValue(DNSettings::CREATORCONTROLLED_WINDOWLAYOUT, savingWindowStateQArray.constData());
 
-    QByteArray savingWindowGeometoryQArray = saveGeometry().toHex();
-    DNSettings::setValue(DNSettings::WINDOWGEOMETORY, savingWindowGeometoryQArray.constData());
+        QByteArray savingWindowGeometoryQArray = saveGeometry().toHex();
+        DNSettings::setValue(DNSettings::CREATORCONTROLLED_WINDOWGEOMETORY, savingWindowGeometoryQArray.constData());
+    }
 
     stopEngine();
     deleteCurrentEngine();
@@ -268,4 +326,47 @@ void MainWindow::vDebugPrintf(const char *fmt, va_list ap)
 #endif
 }
 
+void MainWindow::on_newRequestFromCreator()
+{
+    QLocalSocket *clientConnection = mCreatorIPCServer->nextPendingConnection();
+    connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
+
+    while(clientConnection->state() == QLocalSocket::ConnectedState || clientConnection->state() == QLocalSocket::ConnectingState)
+    {
+        clientConnection->waitForReadyRead();
+        QString readString = clientConnection->readAll();
+        QStringList requestData = readString.split(",");
+
+        if (requestData.length() < 1)
+            continue;
+
+        if (requestData.at(0) == "load" && requestData.length() == 2)
+        {
+    #ifdef DEBUG
+            qDebug() << "DEBUG: recieved load  request from denncoCreator. New contant path:" << requestData.at(1) << endl;
+    #endif
+            ui->filePath->setText(requestData.at(1));
+
+            clientConnection->disconnectFromServer();
+
+            if (QString::compare(ui->startButton->text(), "Start", Qt::CaseInsensitive) != 0)
+            {
+                stopEngine();
+            }
+
+            deleteCurrentEngine();
+
+            if (startEngine())
+            {
+                ui->startButton->setText("Stop");
+            }
+            break;
+        }
+        else if (requestData.at(0) == "close")
+        {
+            close();
+            break;
+        }
+    }
+}
 
index 58b6eac..42a34a9 100644 (file)
@@ -21,6 +21,7 @@
 
 #include <QMainWindow>
 #include <QQueue>
+#include <QLocalServer>
 
 #include "TKConsole.h"
 #include "TKLock.h"
@@ -53,6 +54,8 @@ private slots:
     void attachWebInterface();
     void adjustWindowSize();
 
+    void on_newRequestFromCreator();
+
 private:
     bool  startEngine();
     bool  stopEngine();
@@ -80,6 +83,9 @@ private:
     TKLock       mConsoleLock;
     QQueue<PendingConsoleMessage> mPendingConsoleMessages;
 
+    bool            mControlledByCreator;
+    QLocalServer    *mCreatorIPCServer;
+
 signals:
     void consoleUpdated();