Overview
SHA1 Hash: | 73c23a4279b97ad3198f907770eb4efeadc3d104 |
---|---|
Date: | 2009-01-22 13:52:27 |
User: | drh |
Comment: | Add the ability to cancel existing tags from the web interface, on the "vedit" page. Disable the display of "Leaf" on the timeline for closed leaves. |
Timelines: | ancestors | descendants | both | trunk |
Other Links: | files | ZIP archive | manifest |
Tags And Properties
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
Changes
[hide diffs]Modified src/info.c from [5f178b6ba9] to [e59b0728c7].
@@ -1165,12 +1165,15 @@ const char *zNewComment; const char *zUser; const char *zNewUser; const char *zColor; const char *zNewColor; + const char *zNewTagFlag; const char *zNewTag; + const char *zNewBrFlag; const char *zNewBranch; + const char *zCloseFlag; int fPropagateColor; char *zUuid; Blob comment; Stmt q; static const struct SampleColors { @@ -1188,10 +1191,11 @@ { "#ffc0ff", "#ffc0ff" }, { "#ffc0d0", "#ffc0d0" }, { "#fff0c0", "#fff0c0" }, { "#c0c0c0", "#c0c0c0" }, }; + int nColor = sizeof(aColor)/sizeof(aColor[0]); int i; login_check_credentials(); if( !g.okWrite ){ login_needed(); return; } rid = atoi(PD("r","0")); @@ -1209,14 +1213,15 @@ zNewUser = PD("u",zUser); zColor = db_text("", "SELECT bgcolor" " FROM event WHERE objid=%d", rid); zNewColor = PD("clr",zColor); fPropagateColor = P("pclr")!=0; - zNewTag = P("newtag")!=0 ? P("tagname") : 0; - if( zNewTag && zNewTag[0]==0 ) zNewTag = 0; - zNewBranch = P("newbr")!=0 ? P("brname") : 0; - if( zNewBranch && zNewBranch[0]==0 ) zNewBranch = 0; + zNewTagFlag = P("newtag") ? " checked" : ""; + zNewTag = PD("tagname",""); + zNewBrFlag = P("newbr") ? " checked" : ""; + zNewBranch = PD("brname",""); + zCloseFlag = P("close") ? " checked" : ""; if( P("apply") ){ Blob ctrl; char *zDate; int nChng = 0; @@ -1242,14 +1247,32 @@ zNewComment); } if( strcmp(zUser,zNewUser)!=0 ){ db_multi_exec("REPLACE INTO newtags VALUES('user','+',%Q)", zNewUser); } - if( zNewTag ){ + db_prepare(&q, + "SELECT tag.tagid, tagname FROM tagxref, tag" + " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid", + rid + ); + while( db_step(&q)==SQLITE_ROW ){ + int tagid = db_column_int(&q, 0); + const char *zTag = db_column_text(&q, 1); + char zLabel[30]; + sprintf(zLabel, "c%d", tagid); + if( P(zLabel) ){ + db_multi_exec("REPLACE INTO newtags VALUES(%Q,'-',NULL)", zTag); + } + } + db_finalize(&q); + if( zCloseFlag[0] ){ + db_multi_exec("REPLACE INTO newtags VALUES('closed','+',NULL)"); + } + if( zNewTagFlag[0] ){ db_multi_exec("REPLACE INTO newtags VALUES('sym-%q','+',NULL)", zNewTag); } - if( zNewBranch ){ + if( zNewBrFlag[0] ){ db_multi_exec( "REPLACE INTO newtags " " SELECT tagname, '-', NULL FROM tagxref, tag" " WHERE tagxref.rid=%d AND tagtype==2" " AND tagname GLOB 'sym-*'" @@ -1344,12 +1367,19 @@ @ </td></tr> @ <tr><td align="right" valign="top"><b>Background Color:</b></td> @ <td valign="top"> @ <table border=0 cellpadding=0 cellspacing=1> + @ <tr><td colspan="6" align="left"> + if( fPropagateColor ){ + @ <input type="checkbox" name="pclr" checked> + }else{ + @ <input type="checkbox" name="pclr"> + } + @ Propagate color to descendants</input></td></tr> @ <tr> - for(i=0; i<sizeof(aColor)/sizeof(aColor[0]); i++){ + for(i=0; i<nColor; i++){ if( aColor[i].zColor[0] ){ @ <td bgcolor="%h(aColor[i].zColor)"> }else{ @ <td> } @@ -1357,42 +1387,67 @@ @ <input type="radio" name="clr" value="%h(aColor[i].zColor)" checked> }else{ @ <input type="radio" name="clr" value="%h(aColor[i].zColor)"> } @ %h(aColor[i].zCName)</input></td> - } - @ </tr><tr><td colspan="9" align="left"> - if( fPropagateColor ){ - @ <input type="checkbox" name="pclr" checked> - }else{ - @ <input type="checkbox" name="pclr"> + if( (i%6)==5 && i+1<nColor ){ + @ </tr><tr> + } } - @ Propagate color to descendants</input></td></tr> + @ </tr> @ </table> @ </td></tr> @ <tr><td align="right" valign="top"><b>Tags:</b></td> @ <td valign="top"> - @ <input type="checkbox" name="newtag"> + @ <input type="checkbox" name="newtag"%s(zNewTagFlag)> @ Add the following new tag name to this check-in: - @ <input type="text" width="15" name="tagname"> + @ <input type="text" width="15" name="tagname" value="%h(zNewTag)"> + db_prepare(&q, + "SELECT tag.tagid, tagname FROM tagxref, tag" + " WHERE tagxref.rid=%d AND tagtype>0 AND tagxref.tagid=tag.tagid" + " ORDER BY CASE WHEN tagname GLOB 'sym-*' THEN substr(tagname,5)" + " ELSE tagname END", + rid + ); + while( db_step(&q)==SQLITE_ROW ){ + int tagid = db_column_int(&q, 0); + const char *zTagName = db_column_text(&q, 1); + char zLabel[30]; + sprintf(zLabel, "c%d", tagid); + if( P(zLabel) ){ + @ <br><input type="checkbox" name="c%d(tagid)" checked> + }else{ + @ <br><input type="checkbox" name="c%d(tagid)"> + } + if( strncmp(zTagName, "sym-", 4)==0 ){ + @ Cancel tag <b>%h(&zTagName[4])</b> + }else{ + @ Cancel special tag <b>%h(zTagName)</b> + } + } + db_finalize(&q); @ </td></tr> if( db_exists("SELECT 1 FROM tagxref WHERE rid=%d AND tagid=%d AND srcid>0", rid, TAG_BRANCH)==0 ){ @ <tr><td align="right" valign="top"><b>Branching:</b></td> @ <td valign="top"> - @ <input type="checkbox" name="newbr"> + @ <input type="checkbox" name="newbr"%s(zNewBrFlag)> @ Make this check-in the start of a new branch named: - @ <input type="text" width="15" name="brname"> + @ <input type="text" width="15" name="brname" value="%h(zNewBranch)"> @ </td></tr> } - if( is_a_leaf(rid) ){ + if( is_a_leaf(rid) + && !db_exists("SELECT 1 FROM tagxref " + " WHERE tagid=%d AND rid=%d AND tagtype>0", + TAG_CLOSED, rid) + ){ @ <tr><td align="right" valign="top"><b>Leaf Closure:</b></td> @ <td valign="top"> - @ <input type="checkbox" name="close"> + @ <input type="checkbox" name="close"%s(zCloseFlag)> @ Mark this leaf as "closed" so that it no longer appears on the @ "leaves" page and is no longer labeled as a "<b>Leaf</b>". @ </td></tr> }
Modified src/timeline.c from [4c13ae2995] to [16fff7bd26].
@@ -253,10 +253,13 @@ @ datetime(event.mtime,'localtime') AS timestamp, @ coalesce(ecomment, comment), @ coalesce(euser, user), @ (SELECT count(*) FROM plink WHERE pid=blob.rid AND isprim=1), @ (SELECT count(*) FROM plink WHERE cid=blob.rid), + @ NOT EXISTS(SELECT 1 FROM tagxref + @ WHERE tagid=%d AND tagtype>0 AND rid=blob.rid) + @ AND @ NOT EXISTS(SELECT 1 FROM plink @ WHERE pid=blob.rid @ AND coalesce((SELECT value FROM tagxref @ WHERE tagid=%d AND rid=plink.pid), 'trunk') @ = coalesce((SELECT value FROM tagxref @@ -268,11 +271,11 @@ @ AND tagxref.rid=blob.rid AND tagxref.tagtype>0) @ FROM event JOIN blob @ WHERE blob.rid=event.objid ; if( zBase==0 ){ - zBase = mprintf(zBaseSql, TAG_BRANCH, TAG_BRANCH); + zBase = mprintf(zBaseSql, TAG_CLOSED, TAG_BRANCH, TAG_BRANCH); } return zBase; } /*