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();