Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 1.9, 1.9.1, and 1.9.2

workbench: new RevMessage class

The horizontal splitter now collapses just the message text.

Accomplished after much wrangling with Qt Designer (not really a time
saver).

Changeset 992d5ed7faf1

Parent 0383783f5e75

by Adrian Buehlmann

Changes to 4 files · Browse files at 992d5ed7faf1 Showing diff from parent 0383783f5e75 Diff from another changeset...

 
32
33
34
 
35
36
37
38
39
40
41
42
43
44
45
 
49
50
51
 
 
 
 
 
 
 
 
 
52
53
54
 
82
83
84
85
 
86
87
88
 
188
189
190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
192
193
194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
32
33
34
35
36
37
38
39
40
41
 
 
42
43
44
 
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
90
91
92
 
93
94
95
96
 
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
@@ -32,14 +32,13 @@
  """   def __init__(self, parent=None):   QtGui.QWidget.__init__(self, parent) + self._message = None     vb = QtGui.QVBoxLayout()   vb.setMargin(0)     self._header = w = QtGui.QLabel()   vb.addWidget(w) - self._message = w = QtGui.QTextBrowser() - vb.addWidget(w)     self.setLayout(vb)   @@ -49,6 +48,15 @@
  SIGNAL('linkActivated(const QString&)'),   self.anchorClicked)   + def sizeHint(self): + return self.minimumSizeHint() + + def minimumSizeHint(self): + return self._header.minimumSizeHint() + + def setMessageWidget(self, w): + self._message = w +   def anchorClicked(self, qurl):   """   Callback called when a link is clicked in the text browser @@ -82,7 +90,7 @@
  self.mqseries = []   self.mqunapplied = []   self.mqpatch = None - +   self.refreshDisplay()     def selectNone(self): @@ -188,7 +196,52 @@
  buf += "</table>\n"   self._header.setText(buf)   + self._message.displayRevision(ctx) + + +class RevMessage(QtGui.QWidget): + + def __init__(self, parent=None): + QtGui.QWidget.__init__(self, parent) + + vb = QtGui.QVBoxLayout() + vb.setMargin(0) + + self._message = w = QtGui.QTextBrowser() + vb.addWidget(w) + + self.setLayout(vb) + + def displayRevision(self, ctx): + self.ctx = ctx   desc = xml_escape(unicode(ctx.description(), 'utf-8', 'replace'))   desc = desc.replace('\n', '<br/>\n')   buf = '<div class="diff_desc"><p>%s</p></div>' % desc   self._message.setHtml(buf) + + def selectNone(self): + cursor = self.textCursor() + cursor.clearSelection() + cursor.setPosition(0) + self.setTextCursor(cursor) + self.setExtraSelections([]) + + def searchString(self, text): + self.selectNone() + if text in unicode(self.toPlainText()): + clist = [] + while self.find(text): + eselect = self.ExtraSelection() + eselect.cursor = self.textCursor() + eselect.format.setBackground(QtGui.QColor('#ffffbb')) + clist.append(eselect) + self.selectNone() + self.setExtraSelections(clist) + def finditer(self, text): + if text: + while True: + if self.find(text): + yield self.ctx.rev(), None + else: + break + return finditer(self, text)
 
74
75
76
 
 
77
78
79
 
74
75
76
77
78
79
80
81
@@ -74,6 +74,8 @@
  connect(self.tableView_revisions, SIGNAL('showMessage'),   self.statusBar().showMessage)   + self.textview_header.setMessageWidget(self.message) +   # setup tables and views   self.setupHeaderTextview()   connect(self.textview_status, SIGNAL('fileDisplayed'),
 
6
7
8
9
10
 
 
11
12
13
 
44
45
46
47
 
 
 
 
48
49
50
51
52
 
 
 
 
 
 
53
54
55
56
57
58
59
 
 
 
60
61
62
63
64
65
66
 
 
 
67
68
69
70
71
72
73
74
 
 
75
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
78
79
 
88
89
90
91
92
 
 
93
94
95
 
247
248
249
 
 
 
 
 
 
250
251
252
 
6
7
8
 
 
9
10
11
12
13
 
44
45
46
 
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
 
 
66
67
68
69
 
 
 
 
 
 
70
71
72
73
 
 
 
 
 
 
 
74
75
76
 
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
 
167
168
169
 
 
170
171
172
173
174
 
326
327
328
329
330
331
332
333
334
335
336
337
@@ -6,8 +6,8 @@
  <rect>   <x>0</x>   <y>0</y> - <width>730</width> - <height>646</height> + <width>698</width> + <height>642</height>   </rect>   </property>   <property name="windowTitle"> @@ -44,36 +44,115 @@
  <property name="frameShadow">   <enum>QFrame::Plain</enum>   </property> - <layout class="QVBoxLayout" name="verticalLayout"> + <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="spacing"> + <number>0</number> + </property>   <property name="margin">   <number>0</number>   </property>   <item>   <widget class="QSplitter" name="splitter_2"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property>   <property name="orientation">   <enum>Qt::Horizontal</enum>   </property>   <widget class="HgFileListView" name="tableView_filelist"/> - <widget class="QSplitter" name="splitter"> - <property name="orientation"> - <enum>Qt::Vertical</enum> + <widget class="QFrame" name="frame"> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum>   </property> - <widget class="RevDisplay" name="textview_header"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>1</verstretch> - </sizepolicy> + <layout class="QVBoxLayout" name="verticalLayout"> + <property name="spacing"> + <number>0</number>   </property> - </widget> - <widget class="HgFileView" name="textview_status" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>2</verstretch> - </sizepolicy> + <property name="sizeConstraint"> + <enum>QLayout::SetDefaultConstraint</enum>   </property> - </widget> + <property name="margin"> + <number>0</number> + </property> + <item> + <widget class="RevDisplay" name="textview_header" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </widget> + </item> + <item> + <widget class="QSplitter" name="splitter"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>50</width> + <height>50</height> + </size> + </property> + <property name="frameShape"> + <enum>QFrame::NoFrame</enum> + </property> + <property name="lineWidth"> + <number>0</number> + </property> + <property name="midLineWidth"> + <number>0</number> + </property> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="opaqueResize"> + <bool>true</bool> + </property> + <widget class="RevMessage" name="message" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </widget> + <widget class="HgFileView" name="textview_status" native="true"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>0</width> + <height>0</height> + </size> + </property> + </widget> + </widget> + </item> + </layout>   </widget>   </widget>   </item> @@ -88,8 +167,8 @@
  <rect>   <x>0</x>   <y>0</y> - <width>730</width> - <height>26</height> + <width>698</width> + <height>19</height>   </rect>   </property>   <widget class="QMenu" name="menuFile"> @@ -247,6 +326,12 @@
  <header>fileview.h</header>   <container>1</container>   </customwidget> + <customwidget> + <class>RevMessage</class> + <extends>QWidget</extends> + <header>changeset.h</header> + <container>1</container> + </customwidget>   </customwidgets>   <resources>   <include location="workbench.qrc"/>
 
2
3
4
5
 
6
7
8
 
12
13
14
15
 
16
17
18
 
34
35
36
37
38
39
 
 
 
 
40
 
 
 
 
 
41
42
43
44
45
46
47
48
49
 
 
 
 
 
 
 
 
 
 
50
51
 
52
53
 
54
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
56
57
58
 
59
60
 
61
62
 
 
63
64
65
66
 
67
68
69
 
141
142
143
144
 
145
146
147
 
2
3
4
 
5
6
7
8
 
12
13
14
 
15
16
17
18
 
34
35
36
 
 
 
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
 
 
 
51
52
53
54
55
56
57
58
59
60
61
 
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
92
93
94
95
96
 
97
98
99
100
101
 
102
103
104
105
 
177
178
179
 
180
181
182
183
@@ -2,7 +2,7 @@
   # Form implementation generated from reading ui file 'C:\Users\adi\hgrepos\thg-qt\tortoisehg\hgqt\workbench.ui'  # -# Created: Mon May 03 14:42:54 2010 +# Created: Tue May 04 10:56:11 2010  # by: PyQt4 UI code generator 4.7.3  #  # WARNING! All changes made in this file will be lost! @@ -12,7 +12,7 @@
 class Ui_MainWindow(object):   def setupUi(self, MainWindow):   MainWindow.setObjectName("MainWindow") - MainWindow.resize(730, 646) + MainWindow.resize(698, 642)   self.centralwidget = QtGui.QWidget(MainWindow)   self.centralwidget.setObjectName("centralwidget")   self.verticalLayout_3 = QtGui.QVBoxLayout(self.centralwidget) @@ -34,36 +34,72 @@
  self.frame_maincontent.setFrameShape(QtGui.QFrame.NoFrame)   self.frame_maincontent.setFrameShadow(QtGui.QFrame.Plain)   self.frame_maincontent.setObjectName("frame_maincontent") - self.verticalLayout = QtGui.QVBoxLayout(self.frame_maincontent) - self.verticalLayout.setMargin(0) - self.verticalLayout.setObjectName("verticalLayout") + self.verticalLayout_2 = QtGui.QVBoxLayout(self.frame_maincontent) + self.verticalLayout_2.setSpacing(0) + self.verticalLayout_2.setMargin(0) + self.verticalLayout_2.setObjectName("verticalLayout_2")   self.splitter_2 = QtGui.QSplitter(self.frame_maincontent) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.splitter_2.sizePolicy().hasHeightForWidth()) + self.splitter_2.setSizePolicy(sizePolicy)   self.splitter_2.setOrientation(QtCore.Qt.Horizontal)   self.splitter_2.setObjectName("splitter_2")   self.tableView_filelist = HgFileListView(self.splitter_2)   self.tableView_filelist.setObjectName("tableView_filelist") - self.splitter = QtGui.QSplitter(self.splitter_2) - self.splitter.setOrientation(QtCore.Qt.Vertical) - self.splitter.setObjectName("splitter") - self.textview_header = RevDisplay(self.splitter) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred) + self.frame = QtGui.QFrame(self.splitter_2) + self.frame.setFrameShape(QtGui.QFrame.NoFrame) + self.frame.setObjectName("frame") + self.verticalLayout = QtGui.QVBoxLayout(self.frame) + self.verticalLayout.setSpacing(0) + self.verticalLayout.setSizeConstraint(QtGui.QLayout.SetDefaultConstraint) + self.verticalLayout.setMargin(0) + self.verticalLayout.setObjectName("verticalLayout") + self.textview_header = RevDisplay(self.frame) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)   sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(1) + sizePolicy.setVerticalStretch(0)   sizePolicy.setHeightForWidth(self.textview_header.sizePolicy().hasHeightForWidth())   self.textview_header.setSizePolicy(sizePolicy) + self.textview_header.setMinimumSize(QtCore.QSize(0, 0))   self.textview_header.setObjectName("textview_header") + self.verticalLayout.addWidget(self.textview_header) + self.splitter = QtGui.QSplitter(self.frame) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.splitter.sizePolicy().hasHeightForWidth()) + self.splitter.setSizePolicy(sizePolicy) + self.splitter.setMinimumSize(QtCore.QSize(50, 50)) + self.splitter.setFrameShape(QtGui.QFrame.NoFrame) + self.splitter.setLineWidth(0) + self.splitter.setMidLineWidth(0) + self.splitter.setOrientation(QtCore.Qt.Vertical) + self.splitter.setOpaqueResize(True) + self.splitter.setObjectName("splitter") + self.message = RevMessage(self.splitter) + sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(self.message.sizePolicy().hasHeightForWidth()) + self.message.setSizePolicy(sizePolicy) + self.message.setMinimumSize(QtCore.QSize(0, 0)) + self.message.setObjectName("message")   self.textview_status = HgFileView(self.splitter)   sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)   sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(2) + sizePolicy.setVerticalStretch(0)   sizePolicy.setHeightForWidth(self.textview_status.sizePolicy().hasHeightForWidth())   self.textview_status.setSizePolicy(sizePolicy) + self.textview_status.setMinimumSize(QtCore.QSize(0, 0))   self.textview_status.setObjectName("textview_status") - self.verticalLayout.addWidget(self.splitter_2) + self.verticalLayout.addWidget(self.splitter) + self.verticalLayout_2.addWidget(self.splitter_2)   self.verticalLayout_3.addWidget(self.splitter_3)   MainWindow.setCentralWidget(self.centralwidget)   self.menubar = QtGui.QMenuBar(MainWindow) - self.menubar.setGeometry(QtCore.QRect(0, 0, 730, 26)) + self.menubar.setGeometry(QtCore.QRect(0, 0, 698, 19))   self.menubar.setObjectName("menubar")   self.menuFile = QtGui.QMenu(self.menubar)   self.menuFile.setObjectName("menuFile") @@ -141,7 +177,7 @@
  self.actionDisplayAllBranches.setText(QtGui.QApplication.translate("MainWindow", "displayAllBranches", None, QtGui.QApplication.UnicodeUTF8))   self.actionHelp.setText(QtGui.QApplication.translate("MainWindow", "Help", None, QtGui.QApplication.UnicodeUTF8))   -from changeset import RevDisplay +from changeset import RevDisplay, RevMessage  from filelistview import HgFileListView  from fileview import HgFileView  from repoview import HgRepoView