#include <QString>
#include <QList>
+#include <QMap>
+#include <QJsonArray>
+#include <QThread>
#include <QMutex>
#include <QWebSocket>
#include <QWebSocketServer>
QT_BEGIN_NAMESPACE
-class QSettings;
+//class QSettings;
QT_END_NAMESPACE
+class Settings;
+
namespace TM
{
-class Widget;
+class Service;
+class EditorWidget;
class HtmlData : public RangeData
{
HtmlNode m_node;
};
+/*!
+ * \brief HtmlRangeから構造化テキストに変換するためのクラスです。
+ */
class TextConverter
{
public:
- //TextConverter();
-
Text::pointer to_text(HtmlRange range);
Text::pointer stuff_text(Text::pointer parent, QString const &string);
int m_state;
};
+class TextSentence
+{
+public:
+ typedef std::shared_ptr<TextSentence> pointer;
+
+private:
+ TextSentence(Text::pointer source_sentence);
+public:
+ Text::pointer source_sentence();
+ Text::pointer target_sentence();
+ void set_terget_sentence(Text::pointer target_sentence);
+
+ QJsonArray link_data();
+ void set_link_data(QJsonArray json);
+
+ static pointer create(Text::pointer source_sentence);
+
+ QString debug_dump();
+
+private:
+ Text::pointer m_source_sentence;
+ Text::pointer m_target_sentence;
+ QJsonArray m_link_data;
+};
+
+class TextSegment
+{
+public:
+ typedef std::shared_ptr<TextSegment> pointer;
+ typedef QList<TextSentence::pointer> storage_type;
+ typedef storage_type::iterator iterator;
+
+private:
+ TextSegment(Service *service, int scode, int segment_id, QString source);
+public:
+
+ int segment_id() const;
+
+ TextSentence::pointer at(int index);
+ iterator begin();
+ iterator end();
+
+ static pointer create(
+ Service *service, int scode, int segment_id, QString source);
+
+private:
+ int m_segment_id; /*!< data-wordring-segmentの値によるセグメントのID。 */
+ HtmlDocument m_document; /*!< セグメントのHtmlDocument。 */
+ Text::pointer m_text; /*!< セグメントのHtmlData付テキスト。 */
+
+ storage_type m_sentences; /*!< 編集用センテンスのリスト。 */
+};
+
class SocketConnection : public QObject
{
Q_OBJECT
public:
- SocketConnection(Widget *widget, QWebSocket *socket);
+ typedef QMap<int, TextSegment::pointer> segment_map_type;
+ typedef segment_map_type::iterator segment_map_iterator;
+
+public:
+ SocketConnection(Settings *settings, Service *service,
+ EditorWidget *editor_widget, QWebSocket *socket);
virtual ~SocketConnection();
- //quint16 port() const;
QWebSocket* socket();
void send_message(QString const &message);
void send_message(QJsonObject const &json);
void set_edit_mode(bool edit_mode);
- //void set_source_language(int code);
- //void set_target_language(int code);
+
+ void save_sentence(int segment_id, int index,
+ Text::pointer target_sentence, QJsonArray link);
signals:
void editCmd(int id, QString html);
void do_load(QJsonObject const &json);
Text::pointer to_text(HtmlRange range) const;
+ TextSegment::pointer find_segment(int segment_id);
+ void insert_segment(int segment_id, TextSegment::pointer segment);
private slots:
void onTextMessageReceived(QString const &message);
void onBinaryMessageReceived(QByteArray const &message);
private:
+ Settings *m_settings;
+ Service *m_service;
+
QMutex m_mutex;
bool m_edit_mode;
int m_source_language;
int m_target_language;
- Widget *m_widget;
+ EditorWidget *m_editor_widget;
- HtmlDocument m_document; /*!< 現在処理中のHTML文書パラグラフを保持 */
- Text::pointer m_text; /*!< HtmlData付のパラグラフをテキストとして保持 */
- //QJsonArray m_json; /*!< */
+ QMap<int, TextSegment::pointer> m_segments;
+ TextSegment::pointer m_current_segment;
};
class SocketServer : public QObject
{
Q_OBJECT
public:
- SocketServer(QSettings *settings, Widget *widget, QObject *parent);
+ SocketServer(Settings *settings, Service* service,
+ EditorWidget *editor_widget, QObject *parent);
+ ~SocketServer();
quint16 port() const;
signals:
public slots:
+ void abort();
void onNewConnection();
void onDisconnected();
signals:
private:
- QSettings *m_settings;
+ Settings *m_settings;
+ Service *m_service;
+
QWebSocketServer *m_server;
- Widget *m_widget;
+ QList<QWebSocket*> m_sockets;
+
+ EditorWidget *m_editor_widget;
};
} // namespace TM