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 |