Mercurial > hg > easyhg
comparison historywidget.cpp @ 145:644bd31e8301
* Include the uncommitted item in general graph layout (in case it is not at the head, when other items will need to avoid it)
author | Chris Cannam |
---|---|
date | Wed, 01 Dec 2010 17:41:14 +0000 |
parents | e6c6b88d19b9 |
children | 465c8d51c6d5 |
comparison
equal
deleted
inserted
replaced
143:f61f032b06f9 | 145:644bd31e8301 |
---|---|
30 | 30 |
31 HistoryWidget::HistoryWidget() | 31 HistoryWidget::HistoryWidget() |
32 { | 32 { |
33 m_panned = new Panned; | 33 m_panned = new Panned; |
34 m_panner = new Panner; | 34 m_panner = new Panner; |
35 m_uncommitted = new UncommittedItem(); | |
36 m_uncommitted->setRow(-1); | |
37 m_uncommittedVisible = false; | |
38 | 35 |
39 QGridLayout *layout = new QGridLayout; | 36 QGridLayout *layout = new QGridLayout; |
40 layout->addWidget(m_panned, 0, 0); | 37 layout->addWidget(m_panned, 0, 0); |
41 layout->addWidget(m_panner, 0, 1); | 38 layout->addWidget(m_panner, 0, 1); |
42 m_panner->setMaximumWidth(80); | 39 m_panner->setMaximumWidth(80); |
46 } | 43 } |
47 | 44 |
48 HistoryWidget::~HistoryWidget() | 45 HistoryWidget::~HistoryWidget() |
49 { | 46 { |
50 clearChangesets(); | 47 clearChangesets(); |
51 if (!m_uncommittedVisible) delete m_uncommitted; | 48 } |
49 | |
50 QGraphicsScene *HistoryWidget::scene() | |
51 { | |
52 return m_panned->scene(); | |
52 } | 53 } |
53 | 54 |
54 void HistoryWidget::clearChangesets() | 55 void HistoryWidget::clearChangesets() |
55 { | 56 { |
56 foreach (Changeset *cs, m_changesets) delete cs; | 57 foreach (Changeset *cs, m_changesets) delete cs; |
57 m_changesets.clear(); | 58 m_changesets.clear(); |
58 } | 59 } |
59 | 60 |
60 void HistoryWidget::setCurrent(QStringList ids) | 61 void HistoryWidget::setCurrent(QStringList ids, bool showUncommitted) |
61 { | 62 { |
62 if (m_currentIds == ids) return; | 63 if (m_currentIds == ids && m_showUncommitted == showUncommitted) return; |
63 DEBUG << "HistoryWidget::setCurrent: " << ids.size() << " ids" << endl; | 64 |
65 DEBUG << "HistoryWidget::setCurrent: " << ids.size() << " ids, " | |
66 << "showUncommitted: " << showUncommitted << endl; | |
67 | |
64 m_currentIds.clear(); | 68 m_currentIds.clear(); |
69 m_uncommittedParentId = ""; | |
70 m_showUncommitted = showUncommitted; | |
71 | |
72 if (ids.empty()) return; | |
73 | |
65 foreach (QString id, ids) { | 74 foreach (QString id, ids) { |
66 m_currentIds.push_back(id); | 75 m_currentIds.push_back(id); |
67 } | 76 } |
68 updateNewAndCurrentItems(); | 77 |
69 } | 78 if (m_showUncommitted) m_uncommittedParentId = m_currentIds[0]; |
70 | 79 layoutAll(); |
71 void HistoryWidget::showUncommittedChanges(bool show) | |
72 { | |
73 if (m_uncommittedVisible == show) return; | |
74 m_uncommittedVisible = show; | |
75 ChangesetScene *scene = qobject_cast<ChangesetScene *>(m_panned->scene()); | |
76 if (!scene) return; | |
77 if (m_uncommittedVisible) { | |
78 scene->addUncommittedItem(m_uncommitted); | |
79 m_uncommitted->ensureVisible(); | |
80 } else { | |
81 scene->removeItem(m_uncommitted); | |
82 } | |
83 } | 80 } |
84 | 81 |
85 void HistoryWidget::parseNewLog(QString log) | 82 void HistoryWidget::parseNewLog(QString log) |
86 { | 83 { |
87 DEBUG << "HistoryWidget::parseNewLog: log has " << log.length() << " chars" << endl; | 84 DEBUG << "HistoryWidget::parseNewLog: log has " << log.length() << " chars" << endl; |
150 ChangesetScene *scene = new ChangesetScene(); | 147 ChangesetScene *scene = new ChangesetScene(); |
151 ChangesetItem *tipItem = 0; | 148 ChangesetItem *tipItem = 0; |
152 | 149 |
153 QGraphicsScene *oldScene = m_panned->scene(); | 150 QGraphicsScene *oldScene = m_panned->scene(); |
154 | 151 |
155 // detach m_uncommitted from old scene so it doesn't get deleted | |
156 if (oldScene && (m_uncommitted->scene() == oldScene)) { | |
157 oldScene->removeItem(m_uncommitted); | |
158 } | |
159 | |
160 m_panned->setScene(0); | 152 m_panned->setScene(0); |
161 m_panner->setScene(0); | 153 m_panner->setScene(0); |
162 | 154 |
163 delete oldScene; | 155 delete oldScene; |
156 | |
157 QGraphicsItem *toFocus = 0; | |
164 | 158 |
165 if (!m_changesets.empty()) { | 159 if (!m_changesets.empty()) { |
166 Grapher g(scene); | 160 Grapher g(scene); |
167 try { | 161 try { |
168 g.layout(m_changesets); | 162 g.layout(m_changesets, m_uncommittedParentId); |
169 } catch (std::string s) { | 163 } catch (std::string s) { |
170 std::cerr << "Internal error: Layout failed: " << s << std::endl; | 164 std::cerr << "Internal error: Layout failed: " << s << std::endl; |
171 } | 165 } |
172 tipItem = g.getItemFor(m_changesets[0]); | 166 toFocus = g.getUncommittedItem(); |
173 DEBUG << "tipItem is " << tipItem << " for tip changeset " | 167 if (!toFocus) { |
174 << m_changesets[0]->id() << endl; | 168 toFocus = g.getItemFor(m_changesets[0]); |
175 } | 169 } |
176 | |
177 if (m_uncommittedVisible) { | |
178 scene->addUncommittedItem(m_uncommitted); | |
179 } | 170 } |
180 | 171 |
181 m_panned->setScene(scene); | 172 m_panned->setScene(scene); |
182 m_panner->setScene(scene); | 173 m_panner->setScene(scene); |
183 | 174 |
184 updateNewAndCurrentItems(); | 175 updateNewAndCurrentItems(); |
185 | 176 |
186 if (m_uncommittedVisible) { | 177 if (toFocus) { |
187 DEBUG << "asking uncommitted item to be visible" << endl; | 178 toFocus->ensureVisible(); |
188 m_uncommitted->ensureVisible(); | |
189 } else if (tipItem) { | |
190 DEBUG << "asking tip item to be visible" << endl; | |
191 tipItem->ensureVisible(); | |
192 } | 179 } |
193 | 180 |
194 connectSceneSignals(); | 181 connectSceneSignals(); |
195 } | 182 } |
196 | 183 |
235 DEBUG << "id " << id << " is new" << endl; | 222 DEBUG << "id " << id << " is new" << endl; |
236 } | 223 } |
237 | 224 |
238 csit->setCurrent(current); | 225 csit->setCurrent(current); |
239 csit->setNew(newid); | 226 csit->setNew(newid); |
240 | |
241 if (current) { | |
242 m_uncommitted->setRow(csit->row() - 1); | |
243 m_uncommitted->setColumn(csit->column()); | |
244 m_uncommitted->setWide(csit->isWide()); | |
245 m_uncommitted->setBranch(csit->getChangeset()->branch()); | |
246 } | |
247 } | 227 } |
248 } | 228 } |
249 | 229 |
250 void HistoryWidget::connectSceneSignals() | 230 void HistoryWidget::connectSceneSignals() |
251 { | 231 { |