Mercurial > hg > easyhg
comparison historywidget.cpp @ 138:a7dbc8e5b69d
* Minor adjustment to scene lifecycle, delete old scene before creating new one to use less memory &c
author | Chris Cannam |
---|---|
date | Tue, 30 Nov 2010 13:51:50 +0000 |
parents | 1208d9688a8f |
children | e8a481789607 |
comparison
equal
deleted
inserted
replaced
137:a4044b4b3e35 | 138:a7dbc8e5b69d |
---|---|
120 } | 120 } |
121 | 121 |
122 void HistoryWidget::addChangesets(Changesets csets) | 122 void HistoryWidget::addChangesets(Changesets csets) |
123 { | 123 { |
124 m_newIds.clear(); | 124 m_newIds.clear(); |
125 | |
126 if (csets.empty()) return; | |
127 | |
125 foreach (Changeset *cs, csets) { | 128 foreach (Changeset *cs, csets) { |
126 m_newIds.insert(cs->id()); | 129 m_newIds.insert(cs->id()); |
127 } | 130 } |
128 | 131 |
132 DEBUG << "addChangesets: " << csets.size() << " new changesets" << endl; | |
133 | |
129 csets << m_changesets; | 134 csets << m_changesets; |
130 m_changesets = csets; | 135 m_changesets = csets; |
131 } | 136 } |
132 | 137 |
133 void HistoryWidget::layoutAll() | 138 void HistoryWidget::layoutAll() |
134 { | 139 { |
135 setChangesetParents(); | 140 setChangesetParents(); |
136 | 141 |
137 ChangesetScene *scene = new ChangesetScene(); | 142 ChangesetScene *scene = new ChangesetScene(); |
138 ChangesetItem *tipItem = 0; | 143 ChangesetItem *tipItem = 0; |
144 | |
145 QGraphicsScene *oldScene = m_panned->scene(); | |
146 | |
147 // detach m_uncommitted from old scene so it doesn't get deleted | |
148 if (oldScene && (m_uncommitted->scene() == oldScene)) { | |
149 oldScene->removeItem(m_uncommitted); | |
150 } | |
151 | |
152 m_panned->setScene(0); | |
153 m_panner->setScene(0); | |
154 | |
155 delete oldScene; | |
139 | 156 |
140 if (!m_changesets.empty()) { | 157 if (!m_changesets.empty()) { |
141 Grapher g(scene); | 158 Grapher g(scene); |
142 try { | 159 try { |
143 g.layout(m_changesets); | 160 g.layout(m_changesets); |
147 tipItem = g.getItemFor(m_changesets[0]); | 164 tipItem = g.getItemFor(m_changesets[0]); |
148 DEBUG << "tipItem is " << tipItem << " for tip changeset " | 165 DEBUG << "tipItem is " << tipItem << " for tip changeset " |
149 << m_changesets[0]->id() << endl; | 166 << m_changesets[0]->id() << endl; |
150 } | 167 } |
151 | 168 |
152 QGraphicsScene *oldScene = m_panned->scene(); | |
153 | |
154 // detach m_uncommitted from old scene so it doesn't get deleted | |
155 if (oldScene && (m_uncommitted->scene() == oldScene)) { | |
156 oldScene->removeItem(m_uncommitted); | |
157 } | |
158 if (m_uncommittedVisible) { | 169 if (m_uncommittedVisible) { |
159 scene->addItem(m_uncommitted); | 170 scene->addItem(m_uncommitted); |
160 } | 171 } |
161 | 172 |
162 m_panned->setScene(scene); | 173 m_panned->setScene(scene); |
163 m_panner->setScene(scene); | 174 m_panner->setScene(scene); |
164 | |
165 if (oldScene) delete oldScene; | |
166 | 175 |
167 updateNewAndCurrentItems(); | 176 updateNewAndCurrentItems(); |
168 | 177 |
169 if (m_uncommittedVisible) { | 178 if (m_uncommittedVisible) { |
170 m_uncommitted->ensureVisible(); | 179 m_uncommitted->ensureVisible(); |