프로젝트

일반

사용자정보

개정판 c693d70b

IDc693d70b2e394d532e35034753ecc9fd30e4068f
상위 3ffa3e12
하위 cfac6784

백흠경이(가) 약 2년 전에 추가함

Feature: 도면 검색 기능 추가

Change-Id: I891a1f7396090407b5d8370a5119a442eb6647e9

차이점 보기:

DTI_PID/DTI_PID/DrawingTreeWidget.py
1
# coding: utf-8
2
""" This is Drawing Tree Widget module """
3

  
4
try:
5
    from PyQt5.QtCore import *
6
    from PyQt5.QtGui import *
7
    from PyQt5.QtWidgets import *
8
except ImportError:
9
    try:
10
        from PyQt4.QtCore import *
11
        from PyQt4.QtGui import *
12
    except ImportError:
13
        raise ImportError("DrawingTreeWidget: Requires PyQt5 or PyQt4.")
14
from AppDocData import *
15

  
16
class SearchProxyModel(QSortFilterProxyModel):
17
    def setFilterRegExp(self, pattern):
18
        if isinstance(pattern, str):
19
            pattern = QRegExp( pattern, Qt.CaseInsensitive, QRegExp.FixedString)
20
        super(SearchProxyModel, self).setFilterRegExp(pattern)
21

  
22
    def _accept_index(self, idx):
23
        if idx.isValid():
24
            text = idx.data(Qt.DisplayRole)
25
            if self.filterRegExp().indexIn(text) >= 0:
26
                return True
27
            for row in range(idx.model().rowCount(idx)):
28
                if self._accept_index(idx.model().index(row, 0, idx)):
29
                    return True
30
        return False
31

  
32
    def filterAcceptsRow(self, source_row, source_parent):
33
        idx = self.sourceModel().index(source_row, 0, source_parent)
34
        return self._accept_index(idx)
35

  
36
class QDrawingTreeWidget(QTreeWidget):
37
    def __init__(self):
38
        QTreeWidget.__init__(self)
39

  
40
    def load_drawing_list(self, reverse=False):
41
        """load p&id drawing list"""
42
        from Drawing import Drawing
43

  
44
        app_doc_data = AppDocData.instance()
45
        drawings = app_doc_data.getDrawings()
46
        new_drawings = []
47

  
48
        self.clear()
49
        self.root = QTreeWidgetItem(self, [self.tr('P&ID Drawings'), ''])
50
        self.root.setFlags(self.root.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
51
        self.root.setCheckState(0, Qt.Unchecked)
52
        files = app_doc_data.getDrawingFileList()
53

  
54
        count = 0
55
        for file in files if not reverse else reversed(files):
56
            x = [drawing for drawing in drawings if drawing.name == file]
57
            if not x or not x[0].UID:
58
                drawing = Drawing(None, file, None)
59
                new_drawings.append(drawing)
60
            else:
61
                drawing = x[0]
62

  
63
            item = QTreeWidgetItem(self.root, [file, drawing.datetime])
64
            item.setIcon(0, QIcon(':newPrefix/image.png'))
65
            item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
66
            item.setCheckState(0, Qt.Unchecked)
67
            item.setData(Qt.UserRole, 0, drawing)
68

  
69
            count += 1
70

  
71
        self.root.setText(0, self.tr('P&ID Drawings') + f"({self.root.childCount()})")
72
        self.expandItem(self.root)
73
        self.resizeColumnToContents(0)
74

  
75
        app_doc_data.saveDrawings(new_drawings)
76

  
77
    def set_filter_regexp(self, regexp: QRegExp) -> None:
78
        """set filter string which is regular expression"""
79

  
80
        if isinstance(regexp, QRegExp):
81
            for i in range(0, self.root.childCount()):
82
                item = self.root.child(i)
83
                drawing_name = item.text(0)
84
                item.setHidden(regexp.indexIn(drawing_name) < 0)
DTI_PID/DTI_PID/License.py
70 70

  
71 71
        msg = QMessageBox()
72 72
        msg.setIcon(QMessageBox.Critical)
73
        msg.setText('Process check fail \nRunnung Process List : ' + '\n' + '\n'.join(names))
73
        msg.setText('Process check fail \nRunning Process List : ' + '\n' + '\n'.join(names))
74 74
        msg.setWindowTitle('License')
75 75
        msg.setStandardButtons(QMessageBox.Ok)
76 76
        msg.exec_()
DTI_PID/DTI_PID/MainWindow.py
56 56
from AppDocData import *
57 57
import SymbolTreeWidget, SymbolPropertyTableWidget
58 58
import SymbolEditorDialog
59
from DrawingTreeWidget import QDrawingTreeWidget
59 60
import ItemTreeWidget
60 61
import ItemPropertyTableWidget
61 62
from UserInputAttribute import UserInputAttribute
......
137 138
        self.graphicsView.setScene(self._scene)
138 139
        self.verticalLayout.addWidget(self.graphicsView)
139 140

  
140
        # Add Custom TreeWidget
141
        # Add Symbol TreeWidget
141 142
        self.symbolTreeWidget = SymbolTreeWidget.QSymbolTreeWidget()
142 143
        self.symbolTreeWidget.header().hide()
143 144
        self.verticalLayoutSymbolTree.addWidget(self.symbolTreeWidget)
......
242 243
        self.resizeDocks({self.dockWidget}, {self.dockWidgetObjectExplorer.sizeHint().width()}, Qt.Horizontal)
243 244

  
244 245
        # drawing list
246
        self.verticalLayoutSymbolTree.addWidget(self.symbolTreeWidget)
247

  
248
        self.treeWidgetDrawingList = QDrawingTreeWidget()
245 249
        self.treeWidgetDrawingList.setHeaderHidden(False)
246 250
        self.treeWidgetDrawingList.header().setStretchLastSection(False)
247 251
        self.treeWidgetDrawingList.setHeaderLabels([self.tr('Name'), self.tr('DateTime')])
......
251 255
        self.treeWidgetDrawingList.header().sectionClicked.connect(self.sort_drawing_list)
252 256
        self.treeWidgetDrawingList.itemDoubleClicked.connect(self.open_selected_drawing)
253 257
        self.load_drawing_list()
258
        self.drawingFilter.textChanged.connect(self.on_drawing_filter_changed)
259
        self.drawingLayout.addWidget(self.treeWidgetDrawingList)
254 260

  
255 261
        self.ribbon = AppRibbon()
256 262
        self.setMenuWidget(self.ribbon)
......
602 608
            else:
603 609
                self.load_drawing_list(reverse=True)
604 610

  
605

  
606 611
    def load_drawing_list(self, reverse=False):
607 612
        """load p&id drawing list"""
608
        from Drawing import Drawing
609

  
610 613
        try:
611
            app_doc_data = AppDocData.instance()
612
            drawings = app_doc_data.getDrawings()
613
            new_drawings = []
614

  
615
            self.treeWidgetDrawingList.clear()
616
            self.treeWidgetDrawingList.root = QTreeWidgetItem(self.treeWidgetDrawingList,
617
                                                              [self.tr('P&ID Drawings'), ''])
618
            self.treeWidgetDrawingList.root.setFlags(
619
                self.treeWidgetDrawingList.root.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable)
620
            self.treeWidgetDrawingList.root.setCheckState(0, Qt.Unchecked)
621
            files = app_doc_data.getDrawingFileList()
622

  
623
            # self.progress_bar.setMaximum(len(files))
624
            count = 0
625
            # self.progress_bar.setValue(count)
626
            self.drawing_reverse = reverse
627
            for file in files if not self.drawing_reverse else reversed(files):
628
                x = [drawing for drawing in drawings if drawing.name == file]
629
                if not x or not x[0].UID:
630
                    drawing = Drawing(None, file, None)
631
                    new_drawings.append(drawing)
632
                else:
633
                    drawing = x[0]
634

  
635
                item = QTreeWidgetItem(self.treeWidgetDrawingList.root, [file, drawing.datetime])
636
                item.setIcon(0, QIcon(':newPrefix/image.png'))
637
                item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
638
                item.setCheckState(0, Qt.Unchecked)
639
                item.setData(Qt.UserRole, 0, drawing)
640

  
641
                count += 1
642
                # self.progress_bar.setValue(count)
643
                # QApplication.processEvents()
644

  
645
            self.treeWidgetDrawingList.root.setText(0, self.tr('P&ID Drawings') +
646
                                                    f"({self.treeWidgetDrawingList.root.childCount()})")
647
            self.treeWidgetDrawingList.expandItem(self.treeWidgetDrawingList.root)
648
            #self.treeWidgetDrawingList.root.sortChildren(0, Qt.AscendingOrder)
649
            self.treeWidgetDrawingList.resizeColumnToContents(0)
650

  
651
            app_doc_data.saveDrawings(new_drawings)
614
            self.treeWidgetDrawingList.load_drawing_list(reverse)
652 615
        except Exception as ex:
653
            message = 'error occurred({}) in {}:{}'.format(repr(ex), sys.exc_info()[-1].tb_frame.f_code.co_filename,
654
                                                           sys.exc_info()[-1].tb_lineno)
616
            message = f'error occurred({repr(ex)}) in {sys.exc_info()[-1].tb_frame.f_code.co_filename}:' \
617
                      f'{sys.exc_info()[-1].tb_lineno}'
655 618
            self.addMessage.emit(MessageType.Error, message)
656 619
        finally:
657 620
            self.progress_bar.setValue(self.progress_bar.maximum())
......
2185 2148
    def showImageSelectionMessageBox(self):
2186 2149
        QMessageBox.about(self.graphicsView, self.tr("Notice"), self.tr("First Select Drawing"))
2187 2150

  
2151
    def on_drawing_filter_changed(self):
2152
        """filter drawing tree view"""
2153
        regexp = QRegExp(self.drawingFilter.text(), Qt.CaseInsensitive, QRegExp.FixedString)
2154

  
2155
        self.treeWidgetDrawingList.set_filter_regexp(regexp)
2156

  
2157
        self.treeWidgetDrawingList.expandAll()
2158

  
2188 2159
    def on_search_text_changed(self):
2189 2160
        """filter symbol tree view"""
2190 2161
        regexp = QRegExp(self.lineEditFilter.text(), Qt.CaseInsensitive, QRegExp.FixedString)
DTI_PID/DTI_PID/MainWindow_UI.py
1 1
# -*- coding: utf-8 -*-
2 2

  
3
# Form implementation generated from reading ui file './UI/MainWindow.ui'
3
# Form implementation generated from reading ui file '.\UI\MainWindow.ui'
4 4
#
5
# Created by: PyQt5 UI code generator 5.9.2
5
# Created by: PyQt5 UI code generator 5.15.4
6 6
#
7
# WARNING! All changes made in this file will be lost!
7
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
8
# run again.  Do not edit this file unless you know what you are doing.
9

  
8 10

  
9 11
from PyQt5 import QtCore, QtGui, QtWidgets
10 12

  
13

  
11 14
class Ui_MainWindow(object):
12 15
    def setupUi(self, MainWindow):
13 16
        MainWindow.setObjectName("MainWindow")
......
159 162
        self.verticalLayoutDrawingList.setObjectName("verticalLayoutDrawingList")
160 163
        self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
161 164
        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
162
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
163
        self.horizontalLayout_4.addItem(spacerItem1)
165
        self.drawingFilter = QtWidgets.QLineEdit(self.tabDrawingList)
166
        self.drawingFilter.setObjectName("drawingFilter")
167
        self.horizontalLayout_4.addWidget(self.drawingFilter)
164 168
        self.pushButtonRefreshDrawings = QtWidgets.QPushButton(self.tabDrawingList)
165 169
        self.pushButtonRefreshDrawings.setObjectName("pushButtonRefreshDrawings")
166 170
        self.horizontalLayout_4.addWidget(self.pushButtonRefreshDrawings)
167 171
        self.verticalLayoutDrawingList.addLayout(self.horizontalLayout_4)
168
        self.treeWidgetDrawingList = QtWidgets.QTreeWidget(self.tabDrawingList)
169
        self.treeWidgetDrawingList.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
170
        self.treeWidgetDrawingList.setColumnCount(2)
171
        self.treeWidgetDrawingList.setObjectName("treeWidgetDrawingList")
172
        self.treeWidgetDrawingList.headerItem().setText(0, "1")
173
        self.treeWidgetDrawingList.headerItem().setText(1, "2")
174
        self.treeWidgetDrawingList.header().setVisible(False)
175
        self.verticalLayoutDrawingList.addWidget(self.treeWidgetDrawingList)
176 172
        self.gridLayout_7.addLayout(self.verticalLayoutDrawingList, 0, 0, 1, 1)
173
        self.drawingLayout = QtWidgets.QVBoxLayout()
174
        self.drawingLayout.setObjectName("drawingLayout")
175
        self.gridLayout_7.addLayout(self.drawingLayout, 1, 0, 1, 1)
177 176
        self.tabWidgetItemExplorer.addTab(self.tabDrawingList, "")
178 177
        self.gridLayout_4.addWidget(self.tabWidgetItemExplorer, 0, 0, 1, 1)
179 178
        self.dockWidgetObjectExplorer.setWidget(self.dockWidgetContents_2)
......
198 197
        self.verticalLayout_3.setObjectName("verticalLayout_3")
199 198
        self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
200 199
        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
201
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
202
        self.horizontalLayout_5.addItem(spacerItem2)
200
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
201
        self.horizontalLayout_5.addItem(spacerItem1)
203 202
        self.toolButtonClearLog = QtWidgets.QToolButton(self.tabTerminal)
204 203
        self.toolButtonClearLog.setText("")
205 204
        icon1 = QtGui.QIcon()
......
239 238
        self.verticalLayout_4.setObjectName("verticalLayout_4")
240 239
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
241 240
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
242
        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
243
        self.horizontalLayout_3.addItem(spacerItem3)
241
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
242
        self.horizontalLayout_3.addItem(spacerItem2)
244 243
        self.pushButtonMemoRefresh = QtWidgets.QPushButton(self.tabMemo)
245 244
        self.pushButtonMemoRefresh.setObjectName("pushButtonMemoRefresh")
246 245
        self.horizontalLayout_3.addWidget(self.pushButtonMemoRefresh)
......
648 647
        self.dockWidgetObjectExplorer.setWindowTitle(_translate("MainWindow", "Object Explorer"))
649 648
        self.pushButtonRefreshTree.setText(_translate("MainWindow", "Refresh Item List"))
650 649
        self.tabWidgetItemExplorer.setTabText(self.tabWidgetItemExplorer.indexOf(self.tabItemProperty), _translate("MainWindow", "Topology Manager"))
650
        self.drawingFilter.setPlaceholderText(_translate("MainWindow", "Search..."))
651 651
        self.pushButtonRefreshDrawings.setText(_translate("MainWindow", "Refresh Drawing List"))
652 652
        self.tabWidgetItemExplorer.setTabText(self.tabWidgetItemExplorer.indexOf(self.tabDrawingList), _translate("MainWindow", "Drawing List"))
653 653
        self.dockWidgetOutputWnd.setWindowTitle(_translate("MainWindow", "Output Window"))
......
748 748
        self.actionReadme.setText(_translate("MainWindow", "Readme"))
749 749
        self.actionImport_Text_from_CAD_for_Instrument.setText(_translate("MainWindow", "Import Text from PDF for Instrument"))
750 750
        self.actionStreamline.setText(_translate("MainWindow", "Streamline"))
751

  
752 751
import MainWindow_rc
753

  
754
if __name__ == "__main__":
755
    import sys
756
    app = QtWidgets.QApplication(sys.argv)
757
    MainWindow = QtWidgets.QMainWindow()
758
    ui = Ui_MainWindow()
759
    ui.setupUi(MainWindow)
760
    MainWindow.show()
761
    sys.exit(app.exec_())
762

  
DTI_PID/DTI_PID/UI/MainWindow.ui
289 289
           <item>
290 290
            <layout class="QHBoxLayout" name="horizontalLayout_4">
291 291
             <item>
292
              <spacer name="horizontalSpacer_2">
293
               <property name="orientation">
294
                <enum>Qt::Horizontal</enum>
295
               </property>
296
               <property name="sizeHint" stdset="0">
297
                <size>
298
                 <width>40</width>
299
                 <height>20</height>
300
                </size>
292
              <widget class="QLineEdit" name="drawingFilter">
293
               <property name="placeholderText">
294
                <string>Search...</string>
301 295
               </property>
302
              </spacer>
296
              </widget>
303 297
             </item>
304 298
             <item>
305 299
              <widget class="QPushButton" name="pushButtonRefreshDrawings">
......
310 304
             </item>
311 305
            </layout>
312 306
           </item>
313
           <item>
314
            <widget class="QTreeWidget" name="treeWidgetDrawingList">
315
             <property name="editTriggers">
316
              <set>QAbstractItemView::NoEditTriggers</set>
317
             </property>
318
             <property name="columnCount">
319
              <number>2</number>
320
             </property>
321
             <attribute name="headerVisible">
322
              <bool>false</bool>
323
             </attribute>
324
             <column>
325
              <property name="text">
326
               <string notr="true">1</string>
327
              </property>
328
             </column>
329
             <column>
330
              <property name="text">
331
               <string notr="true">2</string>
332
              </property>
333
             </column>
334
            </widget>
335
           </item>
336 307
          </layout>
337 308
         </item>
309
         <item row="1" column="0">
310
          <layout class="QVBoxLayout" name="drawingLayout"/>
311
         </item>
338 312
        </layout>
339 313
       </widget>
340 314
      </widget>

내보내기 Unified diff

클립보드 이미지 추가 (최대 크기: 500 MB)