18 #include <QWebSocketServer>
32 class HtmlData : public RangeData
35 typedef std::shared_ptr<HtmlData> pointer;
37 enum : int { Type = UserData::User + 1, };
40 HtmlData(HtmlNode node_, int begin_, int tail_);
45 static pointer create(HtmlNode node_, int begin_, int tail_);
52 * \brief HtmlRangeから構造化テキストに変換するためのクラスです。
57 Text::pointer to_text(HtmlRange range);
58 Text::pointer stuff_text(Text::pointer parent, QString const &string);
60 bool is_ignorable_white_space(QChar const &ch);
62 static bool is_white_space(QChar const &ch);
71 typedef std::shared_ptr<TextSentence> pointer;
74 TextSentence(Text::pointer source_sentence);
76 Text::pointer source_sentence();
77 Text::pointer target_sentence();
78 void set_terget_sentence(Text::pointer target_sentence);
80 QJsonArray link_data();
81 void set_link_data(QJsonArray json);
83 static pointer create(Text::pointer source_sentence);
88 Text::pointer m_source_sentence;
89 Text::pointer m_target_sentence;
90 QJsonArray m_link_data;
96 typedef std::shared_ptr<TextSegment> pointer;
97 typedef QList<TextSentence::pointer> storage_type;
98 typedef storage_type::iterator iterator;
101 TextSegment(Service *service, int scode, int segment_id, QString source);
104 int segment_id() const;
106 TextSentence::pointer at(int index);
110 static pointer create(
111 Service *service, int scode, int segment_id, QString source);
114 int m_segment_id; /*!< data-wordring-segmentの値によるセグメントのID。 */
115 HtmlDocument m_document; /*!< セグメントのHtmlDocument。 */
116 Text::pointer m_text; /*!< セグメントのHtmlData付テキスト。 */
118 storage_type m_sentences; /*!< 編集用センテンスのリスト。 */
121 class SocketConnection : public QObject
126 typedef QMap<int, TextSegment::pointer> segment_map_type;
127 typedef segment_map_type::iterator segment_map_iterator;
130 SocketConnection(Settings *settings, Service *service,
131 EditorWidget *editor_widget, QWebSocket *socket);
132 virtual ~SocketConnection();
134 QWebSocket* socket();
135 void send_message(QString const &message);
136 void send_message(QJsonObject const &json);
138 void set_edit_mode(bool edit_mode);
140 void save_sentence(int segment_id, int index,
141 Text::pointer target_sentence, QJsonArray link);
144 void editCmd(int id, QString html);
147 void changeEditMode(bool edit_mode);
150 void do_edit(QJsonObject const &json);
151 void do_focus(QJsonObject const &json);
152 void do_blur(QJsonObject const &json);
153 void do_load(QJsonObject const &json);
155 Text::pointer to_text(HtmlRange range) const;
156 TextSegment::pointer find_segment(int segment_id);
157 void insert_segment(int segment_id, TextSegment::pointer segment);
160 void onTextMessageReceived(QString const &message);
161 void onBinaryMessageReceived(QByteArray const &message);
164 Settings *m_settings;
170 int m_source_language;
171 int m_target_language;
173 EditorWidget *m_editor_widget;
175 QMap<int, TextSegment::pointer> m_segments;
176 TextSegment::pointer m_current_segment;
179 class SocketServer : public QObject
183 SocketServer(Settings *settings, Service* service,
184 EditorWidget *editor_widget, QObject *parent);
187 quint16 port() const;
193 void onNewConnection();
194 void onDisconnected();
197 void attachConnections(QWebSocket* socket);
198 void detachConnections(QWebSocket* socket);
202 Settings *m_settings;
205 QWebSocketServer *m_server;
206 QList<QWebSocket*> m_sockets;
208 EditorWidget *m_editor_widget;