From 48c98cddba1cd68b78dca5d1c1449301a74304ce Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Fri, 22 Mar 2024 17:07:13 +0100
Subject: [PATCH] Study: Switch rich text to markdown.

---
 src/View/MainWindow.py       |   3 +
 src/View/Study/Window.py     |  41 ++++++-----
 src/View/Tools/ASubWindow.py |   4 +-
 src/View/ui/NewStudy.ui      | 137 +++++++----------------------------
 4 files changed, 54 insertions(+), 131 deletions(-)

diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py
index 1b9ebddf..eb6fa68e 100644
--- a/src/View/MainWindow.py
+++ b/src/View/MainWindow.py
@@ -436,6 +436,9 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
         if Modules.CONFIG in keys:
             self._do_update_config()
 
+        if Modules.STUDY in keys:
+            self._tab_widget_info.update()
+
         logger.debug(f"Propagation of {keys}")
         for _, window in self.sub_win_list:
             window._propagated_update(key=keys)
diff --git a/src/View/Study/Window.py b/src/View/Study/Window.py
index a903caa7..fc7e83aa 100644
--- a/src/View/Study/Window.py
+++ b/src/View/Study/Window.py
@@ -16,6 +16,9 @@
 
 # -*- coding: utf-8 -*-
 
+import logging
+
+from Modules import Modules
 from Model.Study import Study
 from View.Tools.PamhyrWindow import PamhyrDialog
 
@@ -27,11 +30,14 @@ from PyQt5.QtGui import (
 
 from PyQt5.QtWidgets import (
     QRadioButton, QLabel, QDateTimeEdit,
-    QTextEdit, QPushButton,
+    QTextEdit, QPlainTextEdit, QTextBrowser,
+    QPushButton,
 )
 
 _translate = QCoreApplication.translate
 
+logger = logging.getLogger()
+
 
 class NewStudyWindow(PamhyrDialog):
     _pamhyr_ui = "NewStudy"
@@ -56,8 +62,11 @@ class NewStudyWindow(PamhyrDialog):
 
         if self._study is not None:
             self.set_line_edit_text("lineEdit_name", self._study.name)
+            self.set_plaintext_edit_text(
+                "plainTextEdit_description", self._study.description
+            )
             self.set_text_edit_text(
-                "textEdit_description", self._study.description
+                "textBrowser_description", self._study.description
             )
             self.set_datetime_edit("dateTimeEdit_date", self._study.date)
 
@@ -82,22 +91,14 @@ class NewStudyWindow(PamhyrDialog):
         time.toggled.connect(self.set_time)
         date.toggled.connect(self.set_date)
 
-        self._desc = self.find(QTextEdit, "textEdit_description")
-        self._bold = self.find(QPushButton, "pushButton_bold")
-        self._italic = self.find(QPushButton, "pushButton_italic")
-        self._underline = self.find(QPushButton, "pushButton_underline")
-        self._highlight = self.find(QPushButton, "pushButton_highlight")
-
-        self._bold.clicked.connect(
-            lambda x: self._desc.setFontWeight(
-                QFont.Bold if x else QFont.Normal
-            )
-        )
-        self._italic.clicked.connect(self._desc.setFontItalic)
-        self._underline.clicked.connect(self._desc.setFontUnderline)
-        self._highlight.clicked.connect(
-            lambda x: self._desc.setTextBackgroundColor(
-                QColor("yellow") if x else QColor("white")
+        md_edit = self.find(QPlainTextEdit, "plainTextEdit_description")
+        #md_previou = self.find(QTextBrowser, "textBrowser_description")
+        md_edit.textChanged.connect(
+            lambda: self.set_text_edit_text(
+                "textBrowser_description",
+                self.get_plaintext_edit_text(
+                    "plainTextEdit_description"
+                )
             )
         )
 
@@ -113,7 +114,8 @@ class NewStudyWindow(PamhyrDialog):
 
     def accept(self):
         name = self.get_line_edit_text("lineEdit_name")
-        description = self.get_text_edit_text("textEdit_description")
+        description = self.get_plaintext_edit_text("plainTextEdit_description")
+        logger.info(description)
 
         if self._study is None:
             study = Study.new(name, description)
@@ -132,4 +134,5 @@ class NewStudyWindow(PamhyrDialog):
             else:
                 self._study.use_time()
 
+        self._propagate_update(key=Modules.STUDY)
         self.done(True)
diff --git a/src/View/Tools/ASubWindow.py b/src/View/Tools/ASubWindow.py
index 234be532..7dc57b0d 100644
--- a/src/View/Tools/ASubWindow.py
+++ b/src/View/Tools/ASubWindow.py
@@ -218,7 +218,7 @@ class ASubWindowFeatures(object):
         Returns:
             Nothing
         """
-        self.find(QTextEdit, name).setText(text)
+        self.find(QTextEdit, name).setMarkdown(text)
 
     def get_text_edit_text(self, name: str):
         """Get text of text edit component
@@ -229,7 +229,7 @@ class ASubWindowFeatures(object):
         Returns:
             Text
         """
-        return self.find(QTextEdit, name).toHtml()
+        return self.find(QTextEdit, name).toMarkdown()
 
     def set_plaintext_edit_text(self, name: str, text: str):
         """Set text of text edit component
diff --git a/src/View/ui/NewStudy.ui b/src/View/ui/NewStudy.ui
index 680e9e2b..f257dc5f 100644
--- a/src/View/ui/NewStudy.ui
+++ b/src/View/ui/NewStudy.ui
@@ -48,117 +48,34 @@
    <item row="2" column="1">
     <layout class="QVBoxLayout" name="verticalLayout">
      <item>
-      <widget class="Line" name="line_2">
-       <property name="orientation">
-        <enum>Qt::Horizontal</enum>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="horizontalLayout">
-       <item>
-        <widget class="QPushButton" name="pushButton_bold">
-         <property name="maximumSize">
-          <size>
-           <width>32</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="font">
-          <font>
-           <weight>75</weight>
-           <bold>true</bold>
-          </font>
-         </property>
-         <property name="text">
-          <string>B</string>
-         </property>
-         <property name="checkable">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="pushButton_italic">
-         <property name="maximumSize">
-          <size>
-           <width>32</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="font">
-          <font>
-           <italic>true</italic>
-          </font>
-         </property>
-         <property name="text">
-          <string>I</string>
-         </property>
-         <property name="checkable">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="pushButton_underline">
-         <property name="maximumSize">
-          <size>
-           <width>32</width>
-           <height>16777215</height>
-          </size>
-         </property>
-         <property name="font">
-          <font>
-           <underline>true</underline>
-          </font>
-         </property>
-         <property name="text">
-          <string>U</string>
-         </property>
-         <property name="checkable">
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="pushButton_highlight">
-         <property name="text">
-          <string>Highlight</string>
-         </property>
-         <property name="checkable">
-          <bool>true</bool>
-         </property>
-         <property name="autoDefault">
-          <bool>true</bool>
-         </property>
-         <property name="flat">
-          <bool>false</bool>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <spacer name="horizontalSpacer">
-         <property name="orientation">
-          <enum>Qt::Horizontal</enum>
-         </property>
-         <property name="sizeHint" stdset="0">
-          <size>
-           <width>40</width>
-           <height>20</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </item>
-     <item>
-      <widget class="QTextEdit" name="textEdit_description">
-       <property name="autoFillBackground">
-        <bool>false</bool>
-       </property>
-       <property name="tabChangesFocus">
-        <bool>false</bool>
+      <widget class="QTabWidget" name="tabWidget">
+       <property name="currentIndex">
+        <number>0</number>
        </property>
+       <widget class="QWidget" name="tab">
+        <attribute name="title">
+         <string>Markdown</string>
+        </attribute>
+        <layout class="QGridLayout" name="gridLayout_3">
+         <item row="0" column="0">
+          <widget class="QPlainTextEdit" name="plainTextEdit_description">
+           <property name="autoFillBackground">
+            <bool>false</bool>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+       <widget class="QWidget" name="tab_2">
+        <attribute name="title">
+         <string>Preview</string>
+        </attribute>
+        <layout class="QGridLayout" name="gridLayout_4">
+         <item row="0" column="0">
+          <widget class="QTextBrowser" name="textBrowser_description"/>
+         </item>
+        </layout>
+       </widget>
       </widget>
      </item>
     </layout>
-- 
GitLab