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);
70 void remove_sentence(int segment_id, int index);
73 void editModeChanged(bool mode_);
74 void linkModeChanged(bool mode_);
75 void sourceLanguageChanged();
76 void targetLanguageChanged();
79 void onLanguageLoaded(int code, QString name, QIcon icon);
80 void onEditModeTriggered(bool);
81 void onLinkModeTriggered(bool checked);
82 void onSourceLanguageTriggered(bool);
83 void onTargetLanguageTriggered(bool);
84 void onBrowserTriggered(bool);
91 SocketConnection *m_socket;
102 class EditorPanel : public TextPanel
106 enum : int { Word = QTextFormat::UserProperty };
109 explicit EditorPanel(QWidget *parent);
111 Editor* parent_editor();
112 void set_parent_editor(Editor *editor);
114 virtual Text::pointer sentence() = 0;
115 virtual void ensure_sentence();
117 bool is_empty() const;
119 QTextCursor select_cursor(Text::pointer word);
120 Text::pointer select_word(QPoint const &pos);
121 void highlight(Text::pointer word, QColor color);
122 void highlight(WordLink::storage_type *link, QColor color);
123 void clear_highlight();
125 QColor color(int index) const;
128 Editor *m_parent_editor;
131 class SourcePanel : public EditorPanel
135 explicit SourcePanel(QWidget *parent);
138 void set_index(int index);
140 Text::pointer sentence();
141 Text::pointer source_sentence();
142 Text::pointer target_sentence();
143 void set_target_sentence(Text::pointer sentence);
145 TextSentence::pointer text_sentence();
146 void set_text_sentence(TextSentence::pointer text_sentence);
148 TargetPanel* target_panel();
149 void set_target_panel(TargetPanel *target);
152 WordLinker* linker();
154 void ensure_highlight();
157 bool canInsertFromMimeData(QMimeData const *source) const;
158 void insertFromMimeData(QMimeData const *source);
160 void inputMethodEvent(QInputMethodEvent *ev);
161 void keyPressEvent(QKeyEvent *ev);
163 void do_click(QPoint const &pos);
164 void do_click_in_link_mode(QPoint const &pos);
167 int m_index; /*!< Editor上での位置を示す索引 */
168 TargetPanel *m_target_panel;
169 TextSentence::pointer m_text_sentence;
172 class TargetPanel: public EditorPanel
176 explicit TargetPanel(QWidget *parent);
178 SourcePanel* source_panel();
179 void set_source_panel(SourcePanel *source);
181 Text::pointer sentence();
182 void save_sentence();
183 void ensure_sentence();
185 bool is_text_saved() const;
186 void set_text_saved(bool saved);
188 bool is_text_dirty() const;
189 void set_text_dirty(bool dirty);
192 bool canInsertFromMimeData(QMimeData const *source) const;
193 void insertFromMimeData(QMimeData const *source);
195 void inputMethodEvent(QInputMethodEvent *ev);
196 void keyPressEvent(QKeyEvent *ev);
198 void do_click(QPoint const &pos);
199 void do_click_in_link_mode(QPoint const &pos);
201 void do_key_press_in_link_mode(QKeyEvent *ev);
204 SourcePanel *m_source_panel;
205 bool m_text_dirty; /*!< 内容の変更を示すフラグ */
206 bool m_text_saved; /*!< データベース登録の必要性を示すフラグ */
209 class Editor : public TextWidget
213 Editor(Settings *settings, Service *service, QWidget *parent);
216 void set_segment(TextSegment::pointer segment);
218 bool edit_mode() const;
219 void set_edit_mode(bool mode_);
220 bool link_mode() const;
221 void set_link_mode(bool mode_);
223 bool can_link_mode() const;
225 EditorWidget* parent_editor_widget();
227 TargetPanel* current_target_panel();
228 TargetPanel const* current_target_panel() const;
231 void onFocusInChild(TextPanel *new_, TextPanel *old_);
234 SourcePanel* find_source_panel(TextPanel *panel);
236 void do_panel_enter(SourcePanel *panel);
237 void do_panel_leave(SourcePanel *panel);
238 void do_link_mode_enter(SourcePanel *panel);
239 void do_link_mode_leave(SourcePanel *panel);
242 void divide_target_sentence(SourcePanel *source_panel);
245 Settings *m_settings;
249 bool m_edit_mode; /*!< 編集モードのときtrue */
250 bool m_link_mode; /*!< リンクモードのときtrue */
252 SourcePanel *m_current_source_panel;