E5Gui/E5LineEdit.py

changeset 2293
ec6c1459f5b3
parent 2206
b2da5a8d7f15
child 2302
f29e9405c851
equal deleted inserted replaced
2292:1e29752b51d7 2293:ec6c1459f5b3
63 if qVersion() < "4.7.0": 63 if qVersion() < "4.7.0":
64 self.__inactiveText = inactiveText 64 self.__inactiveText = inactiveText
65 else: 65 else:
66 self.setPlaceholderText(inactiveText) 66 self.setPlaceholderText(inactiveText)
67 67
68 self.__mainLayout = QHBoxLayout(self)
69 self.__mainLayout.setContentsMargins(0, 0, 0, 0)
70 self.__mainLayout.setSpacing(0)
71
72 self.__leftMargin = 0
68 self.__leftWidget = E5LineEditSideWidget(self) 73 self.__leftWidget = E5LineEditSideWidget(self)
69 self.__leftWidget.resize(0, 0) 74 self.__leftWidget.resize(0, 0)
70 self.__leftLayout = QHBoxLayout(self.__leftWidget) 75 self.__leftLayout = QHBoxLayout(self.__leftWidget)
71 self.__leftLayout.setContentsMargins(0, 0, 0, 0) 76 self.__leftLayout.setContentsMargins(0, 0, 2, 0)
72 if QApplication.isRightToLeft(): 77 if QApplication.isRightToLeft():
73 self.__leftLayout.setDirection(QBoxLayout.RightToLeft) 78 self.__leftLayout.setDirection(QBoxLayout.RightToLeft)
74 else: 79 else:
75 self.__leftLayout.setDirection(QBoxLayout.LeftToRight) 80 self.__leftLayout.setDirection(QBoxLayout.LeftToRight)
76 self.__leftLayout.setSizeConstraint(QLayout.SetFixedSize) 81 self.__leftLayout.setSizeConstraint(QLayout.SetFixedSize)
77 82
78 self.__rightWidget = E5LineEditSideWidget(self) 83 self.__rightWidget = E5LineEditSideWidget(self)
79 self.__rightWidget.resize(0, 0) 84 self.__rightWidget.resize(0, 0)
80 self.__rightLayout = QHBoxLayout(self.__rightWidget) 85 self.__rightLayout = QHBoxLayout(self.__rightWidget)
81 self.__rightLayout.setContentsMargins(0, 0, 0, 0) 86 self.__rightLayout.setContentsMargins(0, 0, 2, 0)
82 if self.isRightToLeft(): 87 if self.isRightToLeft():
83 self.__rightLayout.setDirection(QBoxLayout.RightToLeft) 88 self.__rightLayout.setDirection(QBoxLayout.RightToLeft)
84 else: 89 else:
85 self.__rightLayout.setDirection(QBoxLayout.LeftToRight) 90 self.__rightLayout.setDirection(QBoxLayout.LeftToRight)
91
86 horizontalSpacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum) 92 horizontalSpacer = QSpacerItem(0, 0, QSizePolicy.Expanding, QSizePolicy.Minimum)
87 self.__rightLayout.addItem(horizontalSpacer) 93 self.__mainLayout.addWidget(
94 self.__leftWidget, 0, Qt.AlignVCenter | Qt.AlignLeft)
95 self.__mainLayout.addItem(horizontalSpacer)
96 self.__mainLayout.addWidget(
97 self.__rightWidget, 0, Qt.AlignVCenter | Qt.AlignRight)
98 if self.isRightToLeft():
99 self.__mainLayout.setDirection(QBoxLayout.RightToLeft)
100 else:
101 self.__mainLayout.setDirection(QBoxLayout.LeftToRight)
88 102
89 self.setWidgetSpacing(3) 103 self.setWidgetSpacing(3)
90 self.__leftWidget.sizeHintChanged.connect(self._updateTextMargins) 104 self.__leftWidget.sizeHintChanged.connect(self._updateTextMargins)
91 self.__rightWidget.sizeHintChanged.connect(self._updateTextMargins) 105 self.__rightWidget.sizeHintChanged.connect(self._updateTextMargins)
92 106
107 def setLeftMargin(self, margin):
108 """
109 Public method to set the left margin.
110
111 @param margin left margin in pixel (integer)
112 """
113 self.__leftMargin = margin
114
115 def leftMargin(self):
116 """
117 Public method to get the size of the left margin.
118
119 @return left margin in pixel (integer)
120 """
121 return self.__leftMargin
122
93 def event(self, evt): 123 def event(self, evt):
94 """ 124 """
95 Protected method to handle events. 125 Protected method to handle events.
96 126
97 @param reference to the event (QEvent) 127 @param reference to the event (QEvent)
98 @return flag indicating, whether the event was recognized (boolean) 128 @return flag indicating, whether the event was recognized (boolean)
99 """ 129 """
100 if evt.type() == QEvent.LayoutDirectionChange: 130 if evt.type() == QEvent.LayoutDirectionChange:
101 if self.isRightToLeft(): 131 if self.isRightToLeft():
132 self.__mainLayout.setDirection(QBoxLayout.RightToLeft)
102 self.__leftLayout.setDirection(QBoxLayout.RightToLeft) 133 self.__leftLayout.setDirection(QBoxLayout.RightToLeft)
103 self.__rightLayout.setDirection(QBoxLayout.RightToLeft) 134 self.__rightLayout.setDirection(QBoxLayout.RightToLeft)
104 else: 135 else:
136 self.__mainLayout.setDirection(QBoxLayout.LeftToRight)
105 self.__leftLayout.setDirection(QBoxLayout.LeftToRight) 137 self.__leftLayout.setDirection(QBoxLayout.LeftToRight)
106 self.__rightLayout.setDirection(QBoxLayout.LeftToRight) 138 self.__rightLayout.setDirection(QBoxLayout.LeftToRight)
107 return QLineEdit.event(self, evt) 139 return QLineEdit.event(self, evt)
108
109 def resizeEvent(self, evt):
110 """
111 Protected method to handle resize events.
112
113 @param evt reference to the resize event (QResizeEvent)
114 """
115 self.__updateSideWidgetLocations()
116 super().resizeEvent(evt)
117 140
118 def paintEvent(self, evt): 141 def paintEvent(self, evt):
119 """ 142 """
120 Protected method handling a paint event. 143 Protected method handling a paint event.
121 144
139 painter.setPen(self.palette().brush( 162 painter.setPen(self.palette().brush(
140 QPalette.Disabled, QPalette.Text).color()) 163 QPalette.Disabled, QPalette.Text).color())
141 painter.drawText( 164 painter.drawText(
142 textRect, Qt.AlignLeft | Qt.AlignVCenter, self.__inactiveText) 165 textRect, Qt.AlignLeft | Qt.AlignVCenter, self.__inactiveText)
143 166
144 def __updateSideWidgetLocations(self):
145 """
146 Private method to update the side widget locations.
147 """
148 opt = QStyleOptionFrameV2()
149 self.initStyleOption(opt)
150 textRect = \
151 self.style().subElementRect(QStyle.SE_LineEditContents, opt, self)
152 textRect.adjust(2, 0, 0, 0)
153
154 left = self.textMargin(self.LeftSide)
155
156 midHeight = textRect.center().y() + 1
157
158 if self.__leftLayout.count() > 0:
159 leftHeight = midHeight - self.__leftWidget.height() // 2
160 leftWidth = self.__leftWidget.width()
161 if leftWidth == 0:
162 leftHeight = midHeight - self.__leftWidget.sizeHint().height() // 2
163 self.__leftWidget.move(textRect.x(), leftHeight)
164
165 textRect.setX(left)
166 textRect.setY(midHeight - self.__rightWidget.sizeHint().height() // 2)
167 textRect.setHeight(self.__rightWidget.sizeHint().height())
168 self.__rightWidget.setGeometry(textRect)
169
170 def _updateTextMargins(self): 167 def _updateTextMargins(self):
171 """ 168 """
172 Protected slot to update the text margins. 169 Protected slot to update the text margins.
173 """ 170 """
174 left = self.textMargin(self.LeftSide) 171 if self.__leftMargin == 0:
175 right = self.textMargin(self.RightSide) 172 left = self.__leftWidget.sizeHint().width()
176 self.setTextMargins(left, 0, right, 0) 173 else:
177 self.__updateSideWidgetLocations() 174 left = self.__leftMargin
175 right = self.__rightWidget.sizeHint().width()
176 top = 0
177 bottom = 0
178 self.setTextMargins(left, top, right, bottom)
178 179
179 def addWidget(self, widget, position): 180 def addWidget(self, widget, position):
180 """ 181 """
181 Public method to add a widget to a side. 182 Public method to add a widget to a side.
182 183

eric ide

mercurial