OSDN Git Service

HTTPリクエストパーサがフィールド値のクォートで遷移を間違えていた問題を修正。
[wordring-tm/wordring-tm.git] / proxy / tmeditorwidget.cpp
index 1f5adc3..daf44a5 100644 (file)
@@ -35,7 +35,6 @@
 
 TM::EditorWidget::EditorWidget(Settings *settings, Service *service, QWidget *parent)
        : QWidget(parent)
-       , m_mutex(QMutex::Recursive)
        , m_service(service)
        , m_settings(settings)
        , m_http_port(80)
@@ -91,9 +90,8 @@ void TM::EditorWidget::attach(SocketConnection *socket)
        if(m_socket == socket) return;
        if(m_socket) detach(m_socket);
 
-       QMutexLocker lock(&m_mutex);
        m_socket = socket;
-       connect(this, SIGNAL(editModeChanged(bool)), m_socket, SLOT(changeEditMode(bool)));
+//     connect(this, SIGNAL(editModeChanged(bool)), m_socket, SLOT(changeEditMode(bool)));
        set_link_mode_disabled(true);
        connect(this, SIGNAL(sourceLanguageChanged()), m_socket, SLOT(changeLanguage()));
        connect(this, SIGNAL(targetLanguageChanged()), m_socket, SLOT(changeLanguage()));
@@ -103,10 +101,11 @@ void TM::EditorWidget::attach(SocketConnection *socket)
  * \brief ブラウザ上でドキュメントがフォーカスを取得することで、
  * 現在のSocketConnectionがフォーカスを失った時に呼び出されます。
  */
-void TM::EditorWidget::detach(SocketConnection *)
+void TM::EditorWidget::detach(SocketConnection *connection)
 {
-       QMutexLocker lock(&m_mutex);
-       disconnect(this, SIGNAL(editModeChanged(bool)), m_socket, SLOT(changeEditMode(bool)));
+       if(m_socket != connection) return;
+
+//     disconnect(this, SIGNAL(editModeChanged(bool)), m_socket, SLOT(changeEditMode(bool)));
        disconnect(this, SIGNAL(sourceLanguageChanged()), m_socket, SLOT(changeLanguage()));
        disconnect(this, SIGNAL(targetLanguageChanged()), m_socket, SLOT(changeLanguage()));
 
@@ -117,23 +116,10 @@ void TM::EditorWidget::detach(SocketConnection *)
 void TM::EditorWidget::set_http_port(quint16 http_port) { m_http_port = http_port; }
 
 /*!
- * \brief 編集モードを変更します。
- */
-void TM::EditorWidget::set_edit_mode(bool mode)
-{
-       QMutexLocker lock(&m_mutex);
-       bool old_mode = m_edit_mode->isChecked();
-       if(old_mode == mode) return;
-
-       m_edit_mode->setChecked(mode);
-}
-
-/*!
  * \brief 編集モードの場合trueを返します。
  */
 bool TM::EditorWidget::edit_mode()
 {
-       QMutexLocker lock(&m_mutex);
        return m_edit_mode->isChecked();
 }
 
@@ -142,7 +128,6 @@ bool TM::EditorWidget::edit_mode()
  */
 void TM::EditorWidget::set_link_mode(bool mode)
 {
-       QMutexLocker lock(&m_mutex);
        bool old_mode = m_link->isChecked();
        if(old_mode == mode) return;
 
@@ -154,7 +139,6 @@ void TM::EditorWidget::set_link_mode(bool mode)
  */
 bool TM::EditorWidget::link_mode()
 {
-       QMutexLocker lock(&m_mutex);
        return m_link->isChecked();
 }
 
@@ -163,7 +147,6 @@ bool TM::EditorWidget::link_mode()
  */
 void TM::EditorWidget::set_link_mode_disabled(bool disable)
 {
-       QMutexLocker lock(&m_mutex);
        m_link->setDisabled(disable);
 }
 
@@ -172,7 +155,6 @@ void TM::EditorWidget::set_link_mode_disabled(bool disable)
  */
 int TM::EditorWidget::source_language()
 {
-       QMutexLocker lock(&m_mutex);
        return m_slang->data().toInt();
 }
 
@@ -181,13 +163,11 @@ int TM::EditorWidget::source_language()
  */
 int TM::EditorWidget::target_language()
 {
-       QMutexLocker lock(&m_mutex);
        return m_tlang->data().toInt();
 }
 
 void TM::EditorWidget::set_segment(TextSegment::pointer segment)
 {
-       QMutexLocker lock(&m_mutex);
        m_edit->set_segment(segment);
 }
 
@@ -198,9 +178,9 @@ void TM::EditorWidget::set_segment(TextSegment::pointer segment)
  *
  * 結果としてデータベース、サーバ、ブラウザを更新します。
  */
-void TM::EditorWidget::save_sentence(int segment_id, int index)
+void TM::EditorWidget::save_sentence(TextSentence::pointer text_sentence)
 {
-       m_socket->save_sentence(segment_id, index);
+       m_socket->save_sentence(text_sentence);
 }
 
 /*!
@@ -212,9 +192,25 @@ void TM::EditorWidget::save_sentence(int segment_id, int index)
  *
  * チケット #35438 訳文を元に戻せない 対応
  */
-void TM::EditorWidget::remove_sentence(int segment_id, int index)
+void TM::EditorWidget::remove_sentence(TextSentence::pointer text_sentence)
+{
+       m_socket->remove_sentence(text_sentence);
+}
+
+void TM::EditorWidget::do_panel_entered(SourcePanel *panel)
 {
-       m_socket->remove_sentence(segment_id, index);
+       //assert(m_socket);
+       if(!m_socket) return;
+
+       m_socket->segment_list()->set_current_sentence(panel->text_sentence());
+}
+
+void TM::EditorWidget::do_panel_leaved(SourcePanel *)
+{
+       assert(m_socket);
+       if(!m_socket) return;
+
+       m_socket->segment_list()->set_current_sentence(TextSentence::pointer());
 }
 
 /*!
@@ -260,7 +256,10 @@ void TM::EditorWidget::onEditModeTriggered(bool)
        m_link->setDisabled(true);
        //m_slang->setDisabled(!checked);
        //m_tlang->setDisabled(!checked);
-       emit editModeChanged(checked);
+       //emit editModeChanged(checked);
+
+       m_service->change_edit_mode(checked);
+       if(!checked) m_edit->clear();
 
        m_edit->set_edit_mode(checked);
 }
@@ -437,17 +436,17 @@ Text::pointer TM::SourcePanel::sentence() { return source_sentence(); }
 
 Text::pointer TM::SourcePanel::source_sentence()
 {
-       return m_text_sentence->source_sentence();
+       return m_text_sentence->ssentence();
 }
 
 Text::pointer TM::SourcePanel::target_sentence()
 {
-       return m_text_sentence->target_sentence();
+       return m_text_sentence->tsentence();
 }
 
 void TM::SourcePanel::set_target_sentence(Text::pointer sentence)
 {
-       m_text_sentence->set_target_sentence(sentence);
+       m_text_sentence->set_tsentence(sentence);
 }
 
 TM::TextSentence::pointer TM::SourcePanel::text_sentence()
@@ -835,6 +834,9 @@ void TM::Editor::do_panel_enter(SourcePanel *panel)
        assert(tp);
        tp->show();
        if(can_link_mode()) parent_editor_widget()->set_link_mode_disabled(false);
+
+       // 編集ウィジェットに通知。
+       parent_editor_widget()->do_panel_entered(panel);
 }
 
 /*!
@@ -849,20 +851,22 @@ void TM::Editor::do_panel_leave(SourcePanel *panel)
        set_link_mode(false);
        parent_editor_widget()->set_link_mode_disabled(true);
 
-       int index = panel->index(); // センテンスのインデックス。
+       TextSentence::pointer text_sentence = panel->text_sentence();
        // チケット #35438 訳文を元に戻せない
        bool need_clear_target = (!tp->is_text_saved()) && tp->is_text_dirty() && tp->is_empty();
        if(need_clear_target)
        {
-               parent_editor_widget()->remove_sentence(m_segment_id, index);
+               parent_editor_widget()->remove_sentence(text_sentence);
        }
        else if(!tp->is_text_saved())
        {
                if(tp->is_text_dirty()) divide_target_sentence(panel);
                if(!tp->is_empty())
-                       parent_editor_widget()->save_sentence(m_segment_id, index);
+                       parent_editor_widget()->save_sentence(text_sentence);
                tp->set_text_saved(true);
        }
+       // 編集ウィジェットに通知。
+       parent_editor_widget()->do_panel_leaved(panel);
 }
 
 /*!