Переглянути джерело

Ajoute la boite de dialogue 'Details'

olivier.massot 7 роки тому
батько
коміт
8f9d0ff548
6 змінених файлів з 202 додано та 70 видалено
  1. 80 5
      Viewer.py
  2. 104 63
      qt_details.ui
  3. 18 2
      qt_viewer.ui
  4. BIN
      rsc/add_16.png
  5. BIN
      rsc/del_16.png
  6. BIN
      rsc/edit_16.png

+ 80 - 5
Viewer.py

@@ -8,7 +8,7 @@ from PyQt5.Qt import Qt, QEvent, QGraphicsScene, QPointF, QFileDialog, \
     QGraphicsTextItem, QGraphicsItem, QGraphicsRectItem, \
     QBrush, QColor, QGraphicsLineItem, QLineF, \
     QPen, QPainter, QSvgGenerator, QSize, QRect, QGraphicsItemGroup, \
-    QGraphicsColorizeEffect, QFont, QDialog
+    QGraphicsColorizeEffect, QFont, QDialog, QTableWidgetItem
 from PyQt5.QtWidgets import QMainWindow, QGraphicsView
 from path import Path
 
@@ -278,6 +278,7 @@ class Viewer(QMainWindow):
         self.ui.btn_zoom_view.clicked.connect(self.fit_in_view)
         self.ui.btn_svg.clicked.connect(self.to_png)
         self.ui.treeWidget.itemClicked.connect(self.treeItemSelected)
+        self.ui.btn_edit_item.clicked.connect(self.edit_selected_item)
 
         self._title = "<unknown>"
 
@@ -448,9 +449,23 @@ class Viewer(QMainWindow):
     def treeItemSelected(self, item):
         index = item.data(1, 0)
         if index is None:
+            self.ui.btn_edit_item.setEnabled(False)
             return
         obj = core.Analyse.objects[index]
         self.maj_scene_with(obj)
+        self.ui.btn_edit_item.setEnabled(True)
+
+    def edit_selected_item(self):
+        index = self.ui.treeWidget.currentItem().data(1, 0)
+
+        obj = core.Analyse.objects[index]
+
+        dlg = DetailsDialog(obj, self)
+
+        dlg.show()
+        r = dlg.exec_()
+        if r:
+            pass
 
     def test(self):
         self.run(Path(__file__).parent / r"test\source")
@@ -464,16 +479,76 @@ class Viewer(QMainWindow):
         if e.key() == Qt.Key_Control:
             self.ui.view.setDragMode(QGraphicsView.RubberBandDrag)
 
-class Details(QDialog):
+class DetailsDialog(QDialog):
 
-    def __init__(self, access_object, parent=None):
-        self.access_object = access_object
-        super (Details, self).__init__(parent)
+    def __init__(self, obj, parent=None):
+        self.obj = obj
+        super (DetailsDialog, self).__init__(parent)
         self.createWidgets()
 
     def createWidgets(self):
         self.ui = Ui_details()
         self.ui.setupUi(self)
 
+        self.ui.tbl_mentions.itemClicked.connect(self.itemClicked)
+        self.ui.btn_add.clicked.connect(self.add_mention)
+        self.ui.btn_edit.clicked.connect(self.edit_mention)
+        self.ui.btn_del.clicked.connect(self.del_mention)
+
+        self.ui.lbl_title.setText("{}: {}".format(self.obj.type_, self.obj.name_))
+
+        self.ui.tbl_mentions.hideColumn(0)
+        self.ui.tbl_mentions.setColumnWidth(1, 50)
+        self.ui.tbl_mentions.setColumnWidth(2, 200)
+        self.ui.tbl_mentions.setColumnWidth(3, 70)
+
+        self.load_table()
+
+
+    def load_table(self):
+        self.ui.tbl_mentions.setSortingEnabled(False)
+        self.ui.tbl_mentions.clearContents()
+        self.ui.tbl_mentions.setRowCount(len(self.obj.mentions))
+
+        for index, mention in enumerate(self.obj.mentions):
+
+            item = QTableWidgetItem("")
+            item.setData(0, index)
+            self.ui.tbl_mentions.setItem(index, 0, item)
+
+            item = QTableWidgetItem("{}".format(mention.line))
+            self.ui.tbl_mentions.setItem(index, 1, item)
+
+            item = QTableWidgetItem("{}".format(mention.objname))
+            self.ui.tbl_mentions.setItem(index, 2, item)
+
+            item = QTableWidgetItem("{}".format(mention.obj.type_))
+            self.ui.tbl_mentions.setItem(index, 3, item)
+
+            item = QTableWidgetItem("{}".format(mention.quote))
+            item.setFont(QFont("Consolas", 8))
+            self.ui.tbl_mentions.setItem(index, 4, item)
+
+        self.ui.tbl_mentions.setSortingEnabled(True)
+
+    def itemClicked(self):
+        self.ui.btn_edit.setEnabled(True)
+        self.ui.btn_del.setEnabled(True)
+
+    def add_mention(self):
+        pass
+
+    def selected_index(self):
+        return self.ui.tbl_mentions.item(self.ui.tbl_mentions.currentRow(), 0).data(0)
+
+    def edit_mention(self):
+        pass
+
+    def del_mention(self):
+        index = self.selected_index()
+        if not QMessageBox.question(self, "Confirmation", "Etes-vous sûr de vouloir supprimer la référence sélectionnée?") == QMessageBox.Yes:
+            return
+        del self.obj.mentions[index]
+        self.load_table()
 
 

+ 104 - 63
qt_details.ui

@@ -2,12 +2,15 @@
 <ui version="4.0">
  <class>Dialog</class>
  <widget class="QDialog" name="Dialog">
+  <property name="windowModality">
+   <enum>Qt::ApplicationModal</enum>
+  </property>
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>665</width>
-    <height>699</height>
+    <height>572</height>
    </rect>
   </property>
   <property name="font">
@@ -16,7 +19,14 @@
    </font>
   </property>
   <property name="windowTitle">
-   <string>Dialog</string>
+   <string>Détails de l'objet</string>
+  </property>
+  <property name="windowIcon">
+   <iconset>
+    <normaloff>rsc/icon.svg</normaloff>rsc/icon.svg</iconset>
+  </property>
+  <property name="modal">
+   <bool>true</bool>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
@@ -84,74 +94,45 @@
       </spacer>
      </item>
      <item>
-      <widget class="QToolButton" name="btn_add_dep">
+      <widget class="QToolButton" name="btn_add">
+       <property name="minimumSize">
+        <size>
+         <width>28</width>
+         <height>28</height>
+        </size>
+       </property>
+       <property name="toolTip">
+        <string>Ajouter une mention</string>
+       </property>
        <property name="text">
-        <string>+</string>
+        <string/>
+       </property>
+       <property name="icon">
+        <iconset>
+         <normaloff>rsc/add_16.png</normaloff>rsc/add_16.png</iconset>
        </property>
       </widget>
      </item>
-    </layout>
-   </item>
-   <item>
-    <widget class="QTableWidget" name="tbl_deps">
-     <property name="minimumSize">
-      <size>
-       <width>600</width>
-       <height>231</height>
-      </size>
-     </property>
-     <attribute name="horizontalHeaderCascadingSectionResizes">
-      <bool>false</bool>
-     </attribute>
-     <attribute name="horizontalHeaderStretchLastSection">
-      <bool>true</bool>
-     </attribute>
-     <column>
-      <property name="text">
-       <string>Ligne</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Nom</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Type</string>
-      </property>
-     </column>
-     <column>
-      <property name="text">
-       <string>Extrait</string>
-      </property>
-     </column>
-    </widget>
-   </item>
-   <item>
-    <layout class="QHBoxLayout" name="horizontalLayout_2">
-     <property name="topMargin">
-      <number>0</number>
-     </property>
-     <property name="bottomMargin">
-      <number>5</number>
-     </property>
      <item>
-      <widget class="QLabel" name="label_3">
+      <widget class="QToolButton" name="btn_edit">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
        <property name="minimumSize">
         <size>
-         <width>311</width>
-         <height>21</height>
+         <width>28</width>
+         <height>28</height>
         </size>
        </property>
-       <property name="maximumSize">
-        <size>
-         <width>16777215</width>
-         <height>21</height>
-        </size>
+       <property name="toolTip">
+        <string>Editer la mention</string>
        </property>
        <property name="text">
-        <string>Est mentionné par les objets suivants dans leur code-source:</string>
+        <string>edit</string>
+       </property>
+       <property name="icon">
+        <iconset>
+         <normaloff>rsc/edit_16.png</normaloff>rsc/edit_16.png</iconset>
        </property>
       </widget>
      </item>
@@ -160,30 +141,80 @@
        <property name="orientation">
         <enum>Qt::Horizontal</enum>
        </property>
+       <property name="sizeType">
+        <enum>QSizePolicy::Fixed</enum>
+       </property>
        <property name="sizeHint" stdset="0">
         <size>
-         <width>40</width>
-         <height>20</height>
+         <width>20</width>
+         <height>0</height>
         </size>
        </property>
       </spacer>
      </item>
+     <item>
+      <widget class="QToolButton" name="btn_del">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
+       <property name="minimumSize">
+        <size>
+         <width>28</width>
+         <height>28</height>
+        </size>
+       </property>
+       <property name="toolTip">
+        <string>Supprimer la mention</string>
+       </property>
+       <property name="text">
+        <string>...</string>
+       </property>
+       <property name="icon">
+        <iconset>
+         <normaloff>rsc/del_16.png</normaloff>rsc/del_16.png</iconset>
+       </property>
+      </widget>
+     </item>
     </layout>
    </item>
    <item>
-    <widget class="QTableWidget" name="tbl_refs">
+    <widget class="QTableWidget" name="tbl_mentions">
      <property name="minimumSize">
       <size>
        <width>600</width>
        <height>231</height>
       </size>
      </property>
+     <property name="font">
+      <font>
+       <family>Verdana</family>
+       <pointsize>8</pointsize>
+      </font>
+     </property>
+     <property name="editTriggers">
+      <set>QAbstractItemView::NoEditTriggers</set>
+     </property>
+     <property name="showDropIndicator" stdset="0">
+      <bool>false</bool>
+     </property>
+     <property name="dragDropOverwriteMode">
+      <bool>false</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::SingleSelection</enum>
+     </property>
+     <property name="selectionBehavior">
+      <enum>QAbstractItemView::SelectRows</enum>
+     </property>
      <attribute name="horizontalHeaderStretchLastSection">
       <bool>true</bool>
      </attribute>
+     <attribute name="verticalHeaderVisible">
+      <bool>false</bool>
+     </attribute>
      <column>
       <property name="text">
-       <string>Fichier</string>
+       <string>index</string>
       </property>
      </column>
      <column>
@@ -208,6 +239,16 @@
      </column>
     </widget>
    </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <property name="topMargin">
+      <number>0</number>
+     </property>
+     <property name="bottomMargin">
+      <number>5</number>
+     </property>
+    </layout>
+   </item>
    <item>
     <layout class="QHBoxLayout" name="horizontalLayout_3">
      <property name="bottomMargin">

+ 18 - 2
qt_viewer.ui

@@ -121,6 +121,13 @@
            </property>
           </widget>
          </item>
+         <item>
+          <widget class="QPushButton" name="btn_test">
+           <property name="text">
+            <string>test</string>
+           </property>
+          </widget>
+         </item>
          <item>
           <spacer name="horizontalSpacer_3">
            <property name="orientation">
@@ -410,9 +417,18 @@
          </spacer>
         </item>
         <item>
-         <widget class="QPushButton" name="btn_test">
+         <widget class="QPushButton" name="btn_edit_item">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
+          <property name="minimumSize">
+           <size>
+            <width>200</width>
+            <height>0</height>
+           </size>
+          </property>
           <property name="text">
-           <string>test</string>
+           <string>Modifier l'item sélectionné</string>
           </property>
          </widget>
         </item>

BIN
rsc/add_16.png


BIN
rsc/del_16.png


BIN
rsc/edit_16.png