프로젝트

일반

사용자정보

통계
| 개정판:

hytos / DTI_PID / DTI_PID / TextItemEditDialog.py @ 7e2d59db

이력 | 보기 | 이력해설 | 다운로드 (5.44 KB)

1
# coding: utf-8
2
""" This is text item edit dialog module """
3

    
4
import os
5
import sys
6
from PyQt5.QtCore import *
7
from PyQt5.QtGui import *
8
from PyQt5.QtWidgets import *
9
import sqlite3
10
from AppDocData import AppDocData
11
from AppDocData import Config
12
import TextItemEdit_UI
13
from EngineeringTextItem import QEngineeringTextItem
14
from SymbolSvgItem import SymbolSvgItem
15
from EngineeringLineItem import QEngineeringLineItem
16

    
17

    
18
class QTextItemEditDialog(QDialog):
19
    """ This is text item edit dialog class """
20

    
21
    def __init__(self, parent):
22
        QDialog.__init__(self, parent)
23

    
24
        self.mainWindow = parent
25
        self.ui = TextItemEdit_UI.Ui_TextItemEditDialog()
26
        self.ui.setupUi(self)
27

    
28
        self.ui.pushButtonFindText.clicked.connect(self.find_text)
29
        self.ui.pushButtonReplaceText.clicked.connect(self.replaceTextClicked)
30
        self.ui.checkBoxUID.stateChanged.connect(self.checkBoxChanged)
31

    
32
        self.ui.lineEditFindText.setFocus()
33

    
34
    def is_valid_uuid(self, text, version=4):
35
        """ Check if uuid_to_test is a valid UUID. """
36
        import uuid
37

    
38
        try:
39
            uuid_obj = uuid.UUID(text)  # , version=version)
40
        except:
41
            return False
42

    
43
        return str(uuid_obj) == text
44

    
45
    def checkBoxChanged(self, checkState):
46
        if checkState is int(Qt.Checked):
47
            self.ui.pushButtonReplaceText.setEnabled(False)
48
            self.ui.lineEditReplaceText.setEnabled(False)
49
        else:
50
            self.ui.pushButtonReplaceText.setEnabled(True)
51
            self.ui.lineEditReplaceText.setEnabled(True)
52

    
53
    def find_text(self):
54
        """find user input text"""
55

    
56
        self.ui.tableViewResult.setModel(None)
57

    
58
        text = self.ui.lineEditFindText.text()
59
        if not text: return
60

    
61
        text_items = []
62
        if int(self.ui.checkBoxUID.checkState()) is int(Qt.Checked):
63
            text_items = [item for item in self.mainWindow.graphicsView.scene.items()
64
                              if hasattr(item, 'uid') and str(item.uid).count(text)]
65
        else:
66
            text_items = [item for item in self.mainWindow.graphicsView.scene.items()
67
                              if issubclass(type(item), QEngineeringTextItem) and item.text().count(text)]
68

    
69
        if not text_items:
70
            QMessageBox.about(self, self.tr("Notice"), self.tr('Nothing Found.'))
71
            return
72

    
73
        model = QStandardItemModel(len(text_items), 1)
74
        model.setHorizontalHeaderLabels(['UID'])
75
        for row in range(len(text_items)):
76
            item = QStandardItem(str(text_items[row]))
77
            item.setData(text_items[row])
78
            model.setItem(row, 0, item)
79
        self.ui.tableViewResult.setModel(model)
80
        self.ui.tableViewResult.selectionModel().selectionChanged.connect(self.selection_changed)
81
        self.selectTextItem(text_items[0])
82

    
83
    def replaceTextClicked(self):
84
        """replace text"""
85
        self.find_text()
86

    
87
        text_find = self.ui.lineEditFindText.text()
88
        replace = self.ui.lineEditReplaceText.text()
89
        model = self.ui.tableViewResult.model()
90
        if replace and model.rowCount():
91
            messages = []
92
            for row in range(model.rowCount()):
93
                item = self.ui.tableViewResult.model().item(row, 0)
94
                data = item.data()
95
                if data and data.text() != replace:
96
                    text = data.text()
97
                    messages.append(f"replaced: {text} --> {text.replace(text_find, replace)}")
98
                    data.setPlainText(text.replace(text_find, replace))
99

    
100
            if messages:
101
                QMessageBox.information(self, self.tr('Information'), '\r\n'.join(messages))
102

    
103
    '''
104
        @brief      key press event
105
        @author     kyouho 
106
        @date       2018.08.27
107
    '''
108

    
109
    def selectTextItem(self, item):
110
        rect = item.sceneBoundingRect()
111
        self.mainWindow.graphicsView.centerOn(rect.center())
112
        self.mainWindow.graphicsView.zoomImage(True, QMouseEvent(QEvent.MouseButtonPress,
113
                                                                 self.mainWindow.graphicsView.mapFromScene(
114
                                                                     QPointF(rect.left(), rect.top())), Qt.LeftButton,
115
                                                                 Qt.LeftButton, Qt.NoModifier), 3)
116
        item.setSelected(True)
117

    
118
    def replaceTextItem(self, item):
119
        pass
120

    
121
    def keyPressEvent(self, event):
122
        """key press event"""
123
        if event.key() == Qt.Key_Return:
124
            if self.ui.lineEditFindText.hasFocus():
125
                self.find_text()
126
            elif self.ui.lineEditReplaceText.hasFocus():
127
                self.replaceTextClicked()
128
        elif event.key() == Qt.Key_Escape:
129
            self.reject()
130

    
131
    def selection_changed(self, selection):
132
        """row selection is changed"""
133

    
134
        try:
135
            if selection.indexes():
136
                row = selection.indexes()[0].row()
137
                item = self.ui.tableViewResult.model().item(row, 0)
138
                data = item.data()
139
                self.selectTextItem(data)
140
        except Exception as ex:
141
            from App import App
142
            from AppDocData import MessageType
143

    
144
            message = 'error occurred({}) in {}:{}'.format(repr(ex), sys.exc_info()[-1].tb_frame.f_code.co_filename,
145
                                                           sys.exc_info()[-1].tb_lineno)
146
            App.mainWnd().addMessage.emit(MessageType.Error, message)
147

    
148
    def reject(self):
149
        """close a dialog"""
150
        QDialog.reject(self)
클립보드 이미지 추가 (최대 크기: 500 MB)