OSDN Git Service

Editorのデータ構造変更前、一時保存。
[wordring-tm/wordring-tm.git] / proxy / tmeditorwidget.cpp
index c281604..d1fd421 100644 (file)
@@ -158,8 +158,6 @@ bool TM::EditorWidget::link_mode()
 
 /*!
  * \brief リンクボタンをグレーアウトします。
- *
- *
  */
 void TM::EditorWidget::set_link_mode_disabled(bool disable)
 {
@@ -185,19 +183,17 @@ int TM::EditorWidget::target_language()
        return m_tlang->data().toInt();
 }
 
-void TM::EditorWidget::set_string(QString source_, QString target_)
+void TM::EditorWidget::set_segment(TextSegment::pointer segment)
 {
        QMutexLocker lock(&m_mutex);
-       int code = m_slang->data().toInt();
+       m_edit->set_segment(segment);
+}
 
-       Text::pointer result = Text::create();
-       Text::pointer sentences = m_service->divide_into_sentences(code, source_);
-       for(Text::pointer s = sentences->begin(); s; s = s->next())
-       {
-               Text::pointer words = m_service->divide_into_words(code, s);
-               result->append(words);
-       }
-       m_edit->set_sentences(result);
+void TM::EditorWidget::save_sentence(int segment_id, int index,
+                                  Text::pointer target_sentence, QJsonArray link)
+{
+       qDebug() << "save: " << link;
+       m_socket->save_sentence(segment_id, index, target_sentence, link);
 }
 
 /*!
@@ -399,12 +395,17 @@ QColor TM::EditorPanel::color(int index) const
 
 TM::SourcePanel::SourcePanel(QWidget *parent)
        : EditorPanel(parent)
+       , m_index(-1)
        , m_target_panel(nullptr)
 {
        setUndoRedoEnabled(false);
        setContextMenuPolicy(Qt::NoContextMenu);
 }
 
+int TM::SourcePanel::index() const { return m_index; }
+
+void TM::SourcePanel::set_index(int index) { m_index = index; }
+
 TM::TargetPanel* TM::SourcePanel::target_panel() { return m_target_panel; }
 
 void TM::SourcePanel::set_target_panel(TargetPanel *target)
@@ -653,6 +654,7 @@ TM::Editor::Editor(Settings *settings, Service *service, QWidget *parent)
        : TextWidget(parent)
        , m_settings(settings)
        , m_service(service)
+       , m_segment_id(-1)
        , m_edit_mode(false)
        , m_link_mode(false)
        , m_current_source_panel(nullptr)
@@ -666,9 +668,8 @@ TM::Editor::Editor(Settings *settings, Service *service, QWidget *parent)
  */
 void TM::Editor::clear()
 {
-       if(!m_sentences) return; // 文を保持していない場合、何もしない。
+       if(m_segment_id < 0) return; // 文を保持していない場合、何もしない。
 
-       m_sentences.reset(); // 保持している文のメモリーを開放する。
        // パネルの終了処理。
        if(m_current_source_panel) do_panel_leave(m_current_source_panel);
        m_current_source_panel = nullptr;
@@ -678,27 +679,32 @@ void TM::Editor::clear()
        // リンクモードの解除。
        set_link_mode(false);
        parent_editor_widget()->set_link_mode_disabled(true);
+
+       m_segment_id = -1;
 }
 
-/*!
- * \brief エディタに文を設定します。
- *
- * 文は複数の場合があります。
- */
-void TM::Editor::set_sentences(Text::pointer sentences)
+void TM::Editor::set_segment(TextSegment::pointer segment)
 {
        clear();
-       m_sentences = sentences;
+       m_segment_id = segment->segment_id();
        TextArea *ta = text_area();
-       for(Text::pointer s = sentences->begin(); s; s = s->next()) // s: sentence
+       int i = 0;
+       for(TextSentence::pointer p : *segment)
        {
+               Text::pointer s = p->source_sentence();
+               Text::pointer t = p->target_sentence();
+
                SourcePanel *sp = ta->append<SourcePanel>();
                TargetPanel *tp = ta->append<TargetPanel>();
+               sp->set_index(i++);
                sp->set_target_panel(tp);
                sp->set_editor(this);
                tp->set_source_panel(sp);
                tp->set_editor(this);
+
                sp->set_sentence(s);
+               if(t) tp->set_sentence(t);
+
                sp->show();
        }
 }
@@ -794,7 +800,22 @@ void TM::Editor::do_panel_leave(SourcePanel *panel)
 
        if(!tp->is_text_saved())
        {
-               //qDebug() << m_service->si
+               int tcode = parent_editor_widget()->target_language();
+
+               if(tp->is_text_dirty())
+               {
+                       panel->linker()->clear();
+                       QString string = tp->toPlainText();
+                       Text::pointer sentences = m_service->divide_into_sentences(tcode, string);
+                       if(sentences->size())
+                       {
+                               Text::pointer words = m_service->divide_into_words(tcode, sentences->begin());
+                               tp->set_sentence(words); // ココで、text_dirtyがfalseになる。
+                       }
+               }
+
+               parent_editor_widget()->save_sentence(m_segment_id, panel->index(),
+                                                       tp->sentence(), panel->linker()->to_json_array());
                tp->set_text_saved(true);
        }
 }