Mercurial > hg > easyhg
diff src/grapher.cpp @ 512:67d18eaca830
Hide closed branches by default (contingent on settings). Note that it's now permitted for a changeset id not to be present in m_items in the grapher
author | Chris Cannam |
---|---|
date | Tue, 18 Oct 2011 11:49:40 +0100 |
parents | f1fe20ff3c07 |
children | fc35aa6d433e |
line wrap: on
line diff
--- a/src/grapher.cpp Tue Oct 18 11:33:58 2011 +0100 +++ b/src/grapher.cpp Tue Oct 18 11:49:40 2011 +0100 @@ -30,6 +30,7 @@ QSettings settings; settings.beginGroup("Presentation"); m_showDates = (settings.value("dateformat", 0) == 1); + m_showClosedBranches = (settings.value("showclosedbranches", false).toBool()); } int Grapher::findAvailableColumn(int row, int parent, bool preferParentCol) @@ -69,7 +70,7 @@ throw LayoutException(QString("Changeset %1 not in ID map").arg(id)); } if (!m_items.contains(id)) { - throw LayoutException(QString("Changeset %1 not in item map").arg(id)); + return; } Changeset *cs = m_changesets[id]; ChangesetItem *item = m_items[id]; @@ -145,7 +146,7 @@ throw LayoutException(QString("Changeset %1 not in ID map").arg(id)); } if (!m_items.contains(id)) { - throw LayoutException(QString("Changeset %1 not in item map").arg(id)); + return; } Changeset *cs = m_changesets[id]; @@ -175,7 +176,7 @@ !m_changesets[parentId]->isOnBranch(branch)) { // new branch col = m_branchHomes[branch]; - } else { + } else if (m_items.contains(parentId)) { col = m_items[parentId]->column(); } @@ -191,9 +192,11 @@ foreach (QString parentId, cs->parents()) { if (!m_changesets.contains(parentId)) continue; if (m_changesets[parentId]->isOnBranch(branch)) { - ChangesetItem *parentItem = m_items[parentId]; - col += parentItem->column(); - parentsOnSameBranch++; + if (m_items.contains(parentId)) { + ChangesetItem *parentItem = m_items[parentId]; + col += parentItem->column(); + parentsOnSameBranch++; + } } } @@ -244,7 +247,7 @@ foreach (QString childId, cs->children()) { DEBUG << "reserving connection line space" << endl; - if (!m_changesets.contains(childId)) continue; + if (!m_items.contains(childId)) continue; Changeset *child = m_changesets[childId]; int childRow = m_items[childId]->row(); if (child->parents().size() > 1 || @@ -261,7 +264,7 @@ if (nchildren > 1) { QList<QString> special; foreach (QString childId, cs->children()) { - if (!m_changesets.contains(childId)) continue; + if (!m_items.contains(childId)) continue; Changeset *child = m_changesets[childId]; if (child->isOnBranch(branch) && child->parents().size() == 1) { @@ -298,9 +301,10 @@ void Grapher::allocateBranchHomes(Changesets csets) { foreach (Changeset *cs, csets) { + QString id = cs->id(); + if (!m_items.contains(id)) continue; + ChangesetItem *item = m_items[id]; QString branch = cs->branch(); - ChangesetItem *item = m_items[cs->id()]; - if (!item) continue; int row = item->row(); if (!m_branchRanges.contains(branch)) { m_branchRanges[branch] = Range(row, row); @@ -451,6 +455,7 @@ // Create (but don't yet position) the changeset items foreach (Changeset *cs, csets) { + if (cs->closed() && !m_showClosedBranches) continue; QString id = cs->id(); ChangesetItem *item = new ChangesetItem(cs); item->setX(0); @@ -471,10 +476,11 @@ foreach (Changeset *cs, csets) { QString id = cs->id(); + if (!m_items.contains(id)) continue; ChangesetItem *item = m_items[id]; bool merge = (cs->parents().size() > 1); foreach (QString parentId, cs->parents()) { - if (!m_changesets.contains(parentId)) continue; + if (!m_items.contains(parentId)) continue; ConnectionItem *conn = new ConnectionItem(); if (merge) conn->setConnectionType(ConnectionItem::Merge); conn->setChild(item); @@ -495,6 +501,7 @@ bool haveParentOnBranch = false; foreach (QString p, m_uncommittedParents) { + if (!m_items.contains(p)) continue; ConnectionItem *conn = new ConnectionItem(); conn->setConnectionType(ConnectionItem::Merge); ChangesetItem *pitem = m_items[p]; @@ -522,6 +529,7 @@ foreach (Changeset *cs, csets) { QString id = cs->id(); + if (!m_items.contains(id)) continue; ChangesetItem *item = m_items[id]; bool haveChildOnSameBranch = false; foreach (QString childId, cs->children()) { @@ -605,7 +613,9 @@ // made double-width foreach (Changeset *cs, csets) { - ChangesetItem *item = m_items[cs->id()]; + QString id = cs->id(); + if (!m_items.contains(id)) continue; + ChangesetItem *item = m_items[id]; if (isAvailable(item->row(), item->column()-1) && isAvailable(item->row(), item->column()+1)) { item->setWide(true);