Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a new TIMELINE flag to control the dotted vertical lines that indicate omitted nodes. Only enable the dotted verticals where they make sense. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
fff033fe6f92fc98314a5736537d3cfa |
User & Date: | drh 2019-05-14 14:47:37.530 |
Context
2019-05-14
| ||
19:05 | Add the TIMELINE_FILLGAPS flags to branch timelines. ... (check-in: bb0faeb8 user: drh tags: trunk) | |
14:47 | Add a new TIMELINE flag to control the dotted vertical lines that indicate omitted nodes. Only enable the dotted verticals where they make sense. ... (check-in: fff033fe user: drh tags: trunk) | |
14:33 | The dotted vertical lines in the graph should use the default color, not the foreground color of the node. ... (check-in: 47b08087 user: drh tags: trunk) | |
Changes
Changes to src/finfo.c.
︙ | ︙ | |||
643 644 645 646 647 648 649 | @ </span> } @ </td></tr> } db_finalize(&q); db_finalize(&qparent); if( pGraph ){ | | | 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 | @ </span> } @ </td></tr> } db_finalize(&q); db_finalize(&qparent); if( pGraph ){ graph_finish(pGraph, TIMELINE_DISJOINT); if( pGraph->nErr ){ graph_free(pGraph); pGraph = 0; }else{ @ <tr class="timelineBottom" id="btm-%d(iTableId)">\ @ <td></td><td></td><td></td></tr> } |
︙ | ︙ |
Changes to src/graph.c.
︙ | ︙ | |||
370 371 372 373 374 375 376 377 | /* ** Compute the complete graph ** ** When primary or merge parents are off-screen, normally a line is drawn ** from the node down to the bottom of the graph. This line is called a ** "descender". But if the omitDescenders flag is true, then lines down ** to the bottom of the screen are omitted. */ | > > > > > > | > | 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 | /* ** Compute the complete graph ** ** When primary or merge parents are off-screen, normally a line is drawn ** from the node down to the bottom of the graph. This line is called a ** "descender". But if the omitDescenders flag is true, then lines down ** to the bottom of the screen are omitted. ** ** The tmFlags parameter is zero or more of the TIMELINE_* constants. ** Only the following are honored: ** ** TIMELINE_DISJOINT: Omit descenders ** TIMELINE_FILLGAPS: Use step-children */ void graph_finish(GraphContext *p, u32 tmFlags){ GraphRow *pRow, *pDesc, *pDup, *pLoop, *pParent; int i, j; u64 mask; int hasDup = 0; /* True if one or more isDup entries */ const char *zTrunk; int omitDescenders = (tmFlags & TIMELINE_DISJOINT)!=0; /* If mergeRiserFrom[X]==Y that means rail X holds a merge riser ** coming up from the bottom of the graph from off-screen check-in Y ** where Y is the RID. There is no riser on rail X if mergeRiserFrom[X]==0. */ int mergeRiserFrom[GR_MAX_RAIL]; |
︙ | ︙ | |||
477 478 479 480 481 482 483 | } if( pRow->idxTop < pParent->idxTop ){ pParent->pChild = pRow; pParent->idxTop = pRow->idxTop; } } | > | | | | | | | | | | | | | | | | > | 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 | } if( pRow->idxTop < pParent->idxTop ){ pParent->pChild = pRow; pParent->idxTop = pRow->idxTop; } } if( tmFlags & TIMELINE_FILLGAPS ){ /* If a node has no pChild, and there is a later node (a node higher ** up on the graph) in the same branch that has no parent, then make ** the lower node a step-child of the upper node. */ for(pRow=p->pFirst; pRow; pRow=pRow->pNext){ if( pRow->pChild ) continue; for(pLoop=pRow->pPrev; pLoop; pLoop=pLoop->pPrev){ if( pLoop->nParent>0 && pLoop->zBranch==pRow->zBranch && hashFind(p,pLoop->aParent[0])==0 ){ pRow->pChild = pLoop; pRow->idxTop = pLoop->idxTop; pRow->isStepParent = 1; pLoop->aParent[0] = pRow->rid; break; } } } } /* Identify rows where the primary parent is off screen. Assign ** each to a rail and draw descenders to the bottom of the screen. ** |
︙ | ︙ |
Changes to src/info.c.
︙ | ︙ | |||
280 281 282 283 284 285 286 287 288 289 290 291 292 293 | ); } } blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); db_prepare(&q, "%s", blob_sql_text(&sql)); www_print_timeline(&q, TIMELINE_GRAPH |TIMELINE_NOSCROLL |TIMELINE_CHPICK, 0, 0, rid, 0); db_finalize(&q); } /* | > | 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 | ); } } blob_append_sql(&sql, " AND event.objid IN ok ORDER BY mtime DESC"); db_prepare(&q, "%s", blob_sql_text(&sql)); www_print_timeline(&q, TIMELINE_GRAPH |TIMELINE_FILLGAPS |TIMELINE_NOSCROLL |TIMELINE_CHPICK, 0, 0, rid, 0); db_finalize(&q); } /* |
︙ | ︙ |
Changes to src/timeline.c.
︙ | ︙ | |||
110 111 112 113 114 115 116 117 118 119 120 121 122 123 | #define TIMELINE_MODERN 0x004000 /* Use the "modern" view style */ #define TIMELINE_COLUMNAR 0x008000 /* Use the "columns" view style */ #define TIMELINE_CLASSIC 0x010000 /* Use the "classic" view style */ #define TIMELINE_VIEWS 0x01f000 /* Mask for all of the view styles */ #define TIMELINE_NOSCROLL 0x100000 /* Don't scroll to the selection */ #define TIMELINE_FILEDIFF 0x200000 /* Show File differences, not ckin diffs */ #define TIMELINE_CHPICK 0x400000 /* Show cherrypick merges */ #endif /* ** Hash a string and use the hash to determine a background color. */ char *hash_color(const char *z){ int i; /* Loop counter */ | > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | #define TIMELINE_MODERN 0x004000 /* Use the "modern" view style */ #define TIMELINE_COLUMNAR 0x008000 /* Use the "columns" view style */ #define TIMELINE_CLASSIC 0x010000 /* Use the "classic" view style */ #define TIMELINE_VIEWS 0x01f000 /* Mask for all of the view styles */ #define TIMELINE_NOSCROLL 0x100000 /* Don't scroll to the selection */ #define TIMELINE_FILEDIFF 0x200000 /* Show File differences, not ckin diffs */ #define TIMELINE_CHPICK 0x400000 /* Show cherrypick merges */ #define TIMELINE_FILLGAPS 0x800000 /* Dotted lines for missing nodes */ #endif /* ** Hash a string and use the hash to determine a background color. */ char *hash_color(const char *z){ int i; /* Loop counter */ |
︙ | ︙ | |||
755 756 757 758 759 760 761 | @ event%s(suppressCnt>1?"s":"") omitted.</span> suppressCnt = 0; } if( pendingEndTr ){ @ </td></tr> } if( pGraph ){ | | | 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 | @ event%s(suppressCnt>1?"s":"") omitted.</span> suppressCnt = 0; } if( pendingEndTr ){ @ </td></tr> } if( pGraph ){ graph_finish(pGraph, tmFlags); if( pGraph->nErr ){ graph_free(pGraph); pGraph = 0; }else{ @ <tr class="timelineBottom" id="btm-%d(iTableId)">\ @ <td></td><td></td><td></td></tr> } |
︙ | ︙ | |||
1749 1750 1751 1752 1753 1754 1755 | if( bisectLocal && fossil_strcmp(g.zIpAddr,"127.0.0.1")==0 && db_open_local(0) ){ int iCurrent = db_lget_int("checkout",0); char *zPerm = bisect_permalink(); bisect_create_bilog_table(iCurrent, 0); | | | | 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 | if( bisectLocal && fossil_strcmp(g.zIpAddr,"127.0.0.1")==0 && db_open_local(0) ){ int iCurrent = db_lget_int("checkout",0); char *zPerm = bisect_permalink(); bisect_create_bilog_table(iCurrent, 0); tmFlags |= TIMELINE_UNHIDE | TIMELINE_BISECT | TIMELINE_FILLGAPS; zType = "ci"; disableY = 1; style_submenu_element("Permalink", "%R/timeline?bid=%z", zPerm); }else{ bisectLocal = 0; } if( zBisect!=0 && bisect_create_bilog_table(0, zBisect) ){ tmFlags |= TIMELINE_UNHIDE | TIMELINE_BISECT | TIMELINE_FILLGAPS; zType = "ci"; disableY = 1; }else{ zBisect = 0; } style_header("Timeline"); |
︙ | ︙ |