5 #include "textwidget.h"
12 #include <QPlainTextEdit>
13 #include <QTextCursor>
20 #include <QJsonDocument>
21 #include <QJsonObject>
44 //class SocketConnection;
48 class EditorWidget : public QWidget
52 EditorWidget(Settings *settings, Service *service, QWidget *parent = 0);
54 void attach(SocketConnection *socket);
55 void detach(SocketConnection *socket);
57 void set_http_port(quint16 http_port);
59 void set_edit_mode(bool mode);
61 void set_link_mode(bool mode);
63 void set_link_mode_disabled(bool disable);
65 int source_language();
66 int target_language();
68 void set_segment(TextSegment::pointer segment);
69 void save_sentence(int segment_id, int index);
72 void editModeChanged(bool mode_);
73 void linkModeChanged(bool mode_);
75 void contentsEdited();
78 void onLanguageLoaded(int code, QString name, QIcon icon);
79 void onEditModeTriggered(bool);
80 void onLinkModeTriggered(bool checked);
81 void onSourceLanguageTriggered(bool);
82 void onTargetLanguageTriggered(bool);
83 void onBrowserTriggered(bool);
90 SocketConnection *m_socket;
101 class EditorPanel : public TextPanel
105 enum : int { Word = QTextFormat::UserProperty };
108 explicit EditorPanel(QWidget *parent);
110 Editor* parent_editor();
111 void set_parent_editor(Editor *editor);
113 virtual Text::pointer sentence() = 0;
114 virtual void ensure_sentence();
116 bool is_empty() const;
118 QTextCursor select_cursor(Text::pointer word);
119 Text::pointer select_word(QPoint const &pos);
120 void highlight(Text::pointer word, QColor color);
121 void highlight(WordLink::storage_type *link, QColor color);
122 void clear_highlight();
124 QColor color(int index) const;
127 Editor *m_parent_editor;
130 class SourcePanel : public EditorPanel
134 explicit SourcePanel(QWidget *parent);
137 void set_index(int index);
139 Text::pointer sentence();
140 Text::pointer source_sentence();
141 Text::pointer target_sentence();
142 void set_target_sentence(Text::pointer sentence);
144 TextSentence::pointer text_sentence();
145 void set_text_sentence(TextSentence::pointer text_sentence);
147 TargetPanel* target_panel();
148 void set_target_panel(TargetPanel *target);
151 WordLinker* linker();
153 void ensure_highlight();
156 bool canInsertFromMimeData(QMimeData const *source) const;
157 void insertFromMimeData(QMimeData const *source);
159 void inputMethodEvent(QInputMethodEvent *ev);
160 void keyPressEvent(QKeyEvent *ev);
162 void do_click(QPoint const &pos);
163 void do_click_in_link_mode(QPoint const &pos);
166 int m_index; /*!< Editor上での位置を示す索引 */
167 TargetPanel *m_target_panel;
168 TextSentence::pointer m_text_sentence;
171 class TargetPanel: public EditorPanel
175 explicit TargetPanel(QWidget *parent);
177 SourcePanel* source_panel();
178 void set_source_panel(SourcePanel *source);
180 Text::pointer sentence();
181 void save_sentence();
182 void ensure_sentence();
184 bool is_text_saved() const;
185 void set_text_saved(bool saved);
187 bool is_text_dirty() const;
188 void set_text_dirty(bool dirty);
191 bool canInsertFromMimeData(QMimeData const *source) const;
192 void insertFromMimeData(QMimeData const *source);
194 void inputMethodEvent(QInputMethodEvent *ev);
195 void keyPressEvent(QKeyEvent *ev);
197 void do_click(QPoint const &pos);
198 void do_click_in_link_mode(QPoint const &pos);
200 void do_key_press_in_link_mode(QKeyEvent *ev);
203 SourcePanel *m_source_panel;
204 bool m_text_dirty; /*!< 内容の変更を示すフラグ */
205 bool m_text_saved; /*!< データベース登録の必要性を示すフラグ */
208 class Editor : public TextWidget
212 Editor(Settings *settings, Service *service, QWidget *parent);
215 void set_segment(TextSegment::pointer segment);
217 bool edit_mode() const;
218 void set_edit_mode(bool mode_);
219 bool link_mode() const;
220 void set_link_mode(bool mode_);
222 bool can_link_mode() const;
224 EditorWidget* parent_editor_widget();
226 TargetPanel* current_target_panel();
227 TargetPanel const* current_target_panel() const;
230 void onFocusInChild(TextPanel *new_, TextPanel *old_);
233 SourcePanel* find_source_panel(TextPanel *panel);
235 void do_panel_enter(SourcePanel *panel);
236 void do_panel_leave(SourcePanel *panel);
237 void do_link_mode_enter(SourcePanel *panel);
238 void do_link_mode_leave(SourcePanel *panel);
241 void divide_target_sentence(SourcePanel *source_panel);
244 Settings *m_settings;
248 bool m_edit_mode; /*!< 編集モードのときtrue */
249 bool m_link_mode; /*!< リンクモードのときtrue */
251 SourcePanel *m_current_source_panel;