Changeset 496 for trunk/src/comctl32/treeview.c
- Timestamp:
- Aug 14, 1999, 6:13:16 PM (26 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/comctl32/treeview.c
r371 r496 1 /* $Id: treeview.c,v 1. 9 1999-07-23 15:54:34cbratschi Exp $ */1 /* $Id: treeview.c,v 1.10 1999-08-14 16:13:16 cbratschi Exp $ */ 2 2 /* Treeview control 3 3 * … … 46 46 #include "wingdi.h" 47 47 #include "commctrl.h" 48 #include "comctl32.h" 48 49 #include "treeview.h" 49 50 … … 460 461 461 462 static LRESULT 463 TREEVIEW_GetLineColor (HWND hwnd, WPARAM wParam, LPARAM lParam) 464 { 465 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 466 467 //TRACE("\n"); 468 return (LRESULT) infoPtr->clrLine; 469 } 470 471 static LRESULT 472 TREEVIEW_SetLineColor (HWND hwnd, WPARAM wParam, LPARAM lParam) 473 { 474 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 475 COLORREF prevColor=infoPtr->clrLine; 476 477 //TRACE("\n"); 478 infoPtr->clrLine=(COLORREF) lParam; 479 return (LRESULT) prevColor; 480 } 481 482 static LRESULT 462 483 TREEVIEW_SetTextColor (HWND hwnd, WPARAM wParam, LPARAM lParam) 463 484 { … … 510 531 { 511 532 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 512 533 DWORD dwStyle = GetWindowLongA(hwnd,GWL_STYLE); 513 534 INT center,xpos,cx,cy, cditem, drawmode; 514 535 HFONT hOldFont; … … 523 544 524 545 cditem=0; 546 //TRACE ("cdmode:%x\n",infoPtr->cdmode); 525 547 if (infoPtr->cdmode & CDRF_NOTIFYITEMDRAW) { 526 548 drawmode=CDDS_ITEMPREPAINT; 527 549 528 550 if (infoPtr->cdmode & CDRF_NOTIFYSUBITEMDRAW) 529 drawmode|=CDDS_SUBITEM;551 drawmode|=CDDS_SUBITEM; 530 552 531 553 cditem=TREEVIEW_SendCustomDrawItemNotify (hwnd, hdc, wineItem, drawmode); … … 547 569 * Display the tree hierarchy 548 570 */ 549 if ( GetWindowLongA( hwnd, GWL_STYLE)& TVS_HASLINES)571 if ( dwStyle & TVS_HASLINES) 550 572 { 551 573 /* … … 557 579 * points[2] is attached to the parent or the up sibling 558 580 */ 559 if ( GetWindowLongA( hwnd, GWL_STYLE)& TVS_LINESATROOT)581 if ( dwStyle & TVS_LINESATROOT) 560 582 { 561 583 TREEVIEW_ITEM *upNode = NULL; … … 598 620 599 621 /* 600 * Get a dot ed pen622 * Get a dotted pen 601 623 */ 602 hnewPen = CreatePen(PS_DOT, 0, GetSysColor(COLOR_WINDOWTEXT));624 hnewPen = CreatePen(PS_DOT, 0, infoPtr->clrLine); 603 625 hOldPen = SelectObject( hdc, hnewPen ); 604 626 … … 619 641 xpos+=(5*wineItem->iLevel); 620 642 621 if (( GetWindowLongA( hwnd, GWL_STYLE) & TVS_HASBUTTONS) && 622 ( GetWindowLongA( hwnd, GWL_STYLE) & TVS_HASLINES)) 643 if (( dwStyle & TVS_HASBUTTONS) && ( dwStyle & TVS_HASLINES)) 623 644 { 624 645 if ( (wineItem->cChildren) || … … 876 897 if (tvItem->mask & TVIF_INTEGRAL) { 877 898 wineItem->iIntegral=tvItem->iIntegral; 878 // FIXME (treeview," TVIF_INTEGRAL not supported yet\n");879 899 } 880 900 … … 909 929 } 910 930 911 912 913 931 static LRESULT 932 TREEVIEW_GetItemState (HWND hwnd, WPARAM wParam, LPARAM lParam) 933 934 { 935 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 936 TREEVIEW_ITEM *wineItem; 937 938 wineItem = TREEVIEW_ValidItem (infoPtr, (HTREEITEM)wParam); 939 if (!wineItem) return 0; 940 941 return (wineItem->state & lParam); 942 } 914 943 915 944 static void … … 1144 1173 if (tvItem->mask & TVIF_INTEGRAL) { 1145 1174 tvItem->iIntegral=wineItem->iIntegral; 1146 // FIXME (treeview," TVIF_INTEGRAL not supported yet\n");1147 1175 } 1148 1176 … … 1382 1410 1383 1411 /*************************************************************************** 1412 * Treeview native sort routine: sort on item text. 1413 */ 1414 static INT WINAPI TREEVIEW_SortOnName ( 1415 LPVOID first, 1416 LPVOID second, 1417 LPARAM tvInfoPtr) 1418 { 1419 HWND hwnd=(HWND) tvInfoPtr; 1420 char *txt1, *txt2; 1421 TREEVIEW_ITEM *item; 1422 1423 1424 item=(TREEVIEW_ITEM *) first; 1425 if (item->pszText==LPSTR_TEXTCALLBACKA) { 1426 TREEVIEW_SendDispInfoNotify (hwnd, item, TVN_GETDISPINFO, TVIF_TEXT); 1427 } 1428 txt1=item->pszText; 1429 1430 item=(TREEVIEW_ITEM *) second; 1431 if (item->pszText==LPSTR_TEXTCALLBACKA) { 1432 TREEVIEW_SendDispInfoNotify (hwnd, item, TVN_GETDISPINFO, TVIF_TEXT); 1433 } 1434 txt2=item->pszText; 1435 1436 return -strcmp (txt1,txt2); 1437 } 1438 1439 /*************************************************************************** 1384 1440 * Setup the treeview structure with regards of the sort method 1385 1441 * and sort the children of the TV item specified in lParam 1442 * fRecurse: currently unused. Should be zero. 1443 * parent: if pSort!=NULL, should equal pSort->hParent. 1444 * otherwise, item which child items are to be sorted. 1445 * pSort: sort method info. if NULL, sort on item text. 1446 * if non-NULL, sort on item's lParam content, and let the 1447 * application decide what that means. See also TVM_SORTCHILDRENCB. 1386 1448 */ 1387 LRESULT WINAPI TREEVIEW_SortChildrenCB( 1449 1450 static LRESULT WINAPI TREEVIEW_Sort ( 1388 1451 HWND hwnd, 1389 WPARAM wParam, 1390 LPARAM lParam) 1452 BOOL fRecurse, 1453 HTREEITEM parent, 1454 LPTVSORTCB pSort 1455 ) 1391 1456 { 1392 1457 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); … … 1394 1459 1395 1460 /* Obtain the TVSORTBC struct */ 1396 infoPtr->pCallBackSort = (LPTVSORTCB)lParam; 1461 infoPtr->pCallBackSort = pSort; 1462 1463 /* undocumented feature: TVI_ROOT means `sort the whole tree' */ 1464 1465 if (parent==TVI_ROOT) 1466 parent=infoPtr->TopRootItem; 1397 1467 1398 1468 /* Check for a valid handle to the parent item */ 1399 if (!TREEVIEW_ValidItem(infoPtr, infoPtr->pCallBackSort->hParent))1469 if (!TREEVIEW_ValidItem(infoPtr, parent)) 1400 1470 { 1401 // ERR ("invalid item hParent=%d\n", (INT)infoPtr->pCallBackSort->hParent);1471 ERR ("invalid item hParent=%x\n", (INT)parent); 1402 1472 return FALSE; 1403 1473 } 1404 1474 1405 1475 /* Obtain the parent node to sort */ 1406 sortMe = &infoPtr->items[ (INT) infoPtr->pCallBackSort->hParent ];1476 sortMe = &infoPtr->items[ (INT)parent ]; 1407 1477 1408 1478 /* Make sure there is something to sort */ … … 1434 1504 1435 1505 /* let DPA perform the sort activity */ 1436 DPA_Sort( 1437 sortList, /* what */ 1438 TREEVIEW_CallBackCompare, /* how */ 1439 hwnd); /* owner */ 1506 if (pSort) 1507 DPA_Sort( 1508 sortList, /* what */ 1509 TREEVIEW_CallBackCompare, /* how */ 1510 hwnd); /* owner */ 1511 else 1512 DPA_Sort ( 1513 sortList, /* what */ 1514 TREEVIEW_SortOnName, /* how */ 1515 hwnd); /* owner */ 1440 1516 1441 1517 /* … … 1476 1552 return FALSE; 1477 1553 } 1554 1555 /*************************************************************************** 1556 * Setup the treeview structure with regards of the sort method 1557 * and sort the children of the TV item specified in lParam 1558 */ 1559 static LRESULT WINAPI TREEVIEW_SortChildrenCB( 1560 HWND hwnd, 1561 WPARAM wParam, 1562 LPARAM lParam 1563 ) 1564 { 1565 LPTVSORTCB pSort=(LPTVSORTCB) lParam; 1566 1567 return TREEVIEW_Sort (hwnd, wParam, pSort->hParent, pSort); 1568 } 1569 1570 1571 /*************************************************************************** 1572 * Sort the children of the TV item specified in lParam. 1573 */ 1574 static LRESULT WINAPI TREEVIEW_SortChildren ( 1575 HWND hwnd, 1576 WPARAM wParam, 1577 LPARAM lParam) 1578 { 1579 return TREEVIEW_Sort (hwnd, (BOOL) wParam, (HTREEITEM) lParam, NULL); 1580 } 1581 1478 1582 1479 1583 int ffs(int mask) … … 1779 1883 1780 1884 1781 1885 static LRESULT 1886 TREEVIEW_InsertItemW(HWND hwnd, WPARAM wParam, LPARAM lParam) 1887 { 1888 TVINSERTSTRUCTW *tvisW; 1889 TVINSERTSTRUCTA tvisA; 1890 LRESULT lRes; 1891 1892 tvisW = (LPTVINSERTSTRUCTW)lParam; 1893 1894 tvisA.hParent = tvisW->hParent; 1895 tvisA.hInsertAfter = tvisW->hInsertAfter; 1896 1897 tvisA.DUMMYUNIONNAME.item.mask = tvisW->DUMMYUNIONNAME.item.mask; 1898 tvisA.DUMMYUNIONNAME.item.hItem = tvisW->DUMMYUNIONNAME.item.hItem; 1899 tvisA.DUMMYUNIONNAME.item.state = tvisW->DUMMYUNIONNAME.item.state; 1900 tvisA.DUMMYUNIONNAME.item.stateMask = tvisW->DUMMYUNIONNAME.item.stateMask; 1901 tvisA.DUMMYUNIONNAME.item.cchTextMax = tvisW->DUMMYUNIONNAME.item.cchTextMax; 1902 1903 if(tvisW->DUMMYUNIONNAME.item.pszText) 1904 { 1905 if (tvisW->DUMMYUNIONNAME.item.pszText!=LPSTR_TEXTCALLBACKW) 1906 { 1907 int len = lstrlenW (tvisW->DUMMYUNIONNAME.item.pszText)+1; 1908 tvisA.DUMMYUNIONNAME.item.pszText = COMCTL32_Alloc (len); 1909 lstrcpyWtoA (tvisA.DUMMYUNIONNAME.item.pszText, 1910 tvisW->DUMMYUNIONNAME.item.pszText ); 1911 } 1912 else 1913 { 1914 tvisA.DUMMYUNIONNAME.item.pszText = LPSTR_TEXTCALLBACKA; 1915 tvisA.DUMMYUNIONNAME.item.cchTextMax = 0; 1916 } 1917 } 1918 1919 tvisA.DUMMYUNIONNAME.item.iImage = tvisW->DUMMYUNIONNAME.item.iImage; 1920 tvisA.DUMMYUNIONNAME.item.iSelectedImage = tvisW->DUMMYUNIONNAME.item.iSelectedImage; 1921 tvisA.DUMMYUNIONNAME.item.cChildren = tvisW->DUMMYUNIONNAME.item.cChildren; 1922 tvisA.DUMMYUNIONNAME.item.lParam = tvisW->DUMMYUNIONNAME.item.lParam; 1923 1924 lRes = TREEVIEW_InsertItemA(hwnd,wParam,(LPARAM)&tvisA); 1925 1926 if (tvisA.DUMMYUNIONNAME.item.pszText!=LPSTR_TEXTCALLBACKA) 1927 { 1928 COMCTL32_Free(tvisA.DUMMYUNIONNAME.item.pszText); 1929 } 1930 1931 return lRes; 1932 1933 } 1782 1934 1783 1935 … … 1858 2010 1859 2011 1860 LRESULT CALLBACK2012 static LRESULT CALLBACK 1861 2013 TREEVIEW_GetEditControl (HWND hwnd) 1862 2014 … … 1979 2131 TREEVIEW_StyleChanged (HWND hwnd, WPARAM wParam, LPARAM lParam) 1980 2132 { 1981 LPSTYLESTRUCT lpss=(LPSTYLESTRUCT) lParam;1982 1983 2133 // TRACE (treeview,"(%x %lx)\n",wParam,lParam); 1984 2134 1985 if (wParam & (GWL_STYLE)) 1986 SetWindowLongA( hwnd, GWL_STYLE, lpss->styleNew); 1987 if (wParam & (GWL_EXSTYLE)) 1988 SetWindowLongA( hwnd, GWL_STYLE, lpss->styleNew); 2135 TREEVIEW_Refresh(hwnd); 1989 2136 1990 2137 return 0; … … 2022 2169 infoPtr->clrBk = GetSysColor (COLOR_WINDOW); 2023 2170 infoPtr->clrText = GetSysColor (COLOR_BTNTEXT); 2171 infoPtr->clrLine = GetSysColor (COLOR_WINDOWTEXT); 2024 2172 infoPtr->cy = 0; 2025 2173 infoPtr->cx = 0; … … 2039 2187 infoPtr->dropItem=0; 2040 2188 infoPtr->pCallBackSort=NULL; 2189 infoPtr->uScrollTime = 300; /* milliseconds */ 2041 2190 2042 2191 /* … … 2696 2845 2697 2846 2698 LRESULT2847 static LRESULT 2699 2848 TREEVIEW_LButtonDoubleClick (HWND hwnd, WPARAM wParam, LPARAM lParam) 2700 2849 { … … 3358 3507 } 3359 3508 3360 3361 LRESULT WINAPI 3509 static LRESULT 3510 TREEVIEW_GetScrollTime (HWND hwnd) 3511 { 3512 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 3513 return infoPtr->uScrollTime; 3514 } 3515 3516 static LRESULT 3517 TREEVIEW_SetScrollTime (HWND hwnd, UINT uScrollTime) 3518 { 3519 TREEVIEW_INFO *infoPtr = TREEVIEW_GetInfoPtr(hwnd); 3520 UINT uOldScrollTime = infoPtr->uScrollTime; 3521 infoPtr->uScrollTime = min (uScrollTime, 100); 3522 return uOldScrollTime; 3523 } 3524 3525 static LRESULT WINAPI 3362 3526 TREEVIEW_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 3363 3527 { … … 3367 3531 3368 3532 case TVM_INSERTITEMW: 3369 // FIXME (treeview, "Unimplemented msg TVM_INSERTITEM32W\n"); 3370 return 0; 3533 return TREEVIEW_InsertItemW(hwnd,wParam,lParam); 3371 3534 3372 3535 case TVM_DELETEITEM: … … 3404 3567 3405 3568 case TVM_GETITEMW: 3406 // FIXME (treeview, "Unimplemented msg TVM_GETITEM 32W\n");3569 // FIXME (treeview, "Unimplemented msg TVM_GETITEMW\n"); 3407 3570 return 0; 3408 3571 … … 3415 3578 3416 3579 case TVM_EDITLABELA: 3417 // FIXME (treeview, "Unimplemented msg TVM_EDITLABEL 32A \n");3580 // FIXME (treeview, "Unimplemented msg TVM_EDITLABELA \n"); 3418 3581 return 0; 3419 3582 3420 3583 case TVM_EDITLABELW: 3421 // FIXME (treeview, "Unimplemented msg TVM_EDITLABEL 32W \n");3584 // FIXME (treeview, "Unimplemented msg TVM_EDITLABELW \n"); 3422 3585 return 0; 3423 3586 … … 3435 3598 3436 3599 case TVM_SORTCHILDREN: 3437 // FIXME (treeview, "Unimplemented msg TVM_SORTCHILDREN\n"); 3438 return 0; 3600 return TREEVIEW_SortChildrenCB(hwnd, wParam, lParam); 3439 3601 3440 3602 case TVM_ENSUREVISIBLE: … … 3449 3611 3450 3612 case TVM_GETISEARCHSTRINGA: 3451 // FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRING 32A\n");3613 // FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRINGA\n"); 3452 3614 return 0; 3453 3615 3454 3616 case TVM_GETISEARCHSTRINGW: 3455 // FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRING 32W\n");3617 // FIXME (treeview, "Unimplemented msg TVM_GETISEARCHSTRINGW\n"); 3456 3618 return 0; 3457 3619 … … 3485 3647 3486 3648 case TVM_SETSCROLLTIME: 3487 // FIXME (treeview, "Unimplemented msg TVM_SETSCROLLTIME\n"); 3488 return 0; 3649 return TREEVIEW_SetScrollTime (hwnd, (UINT)wParam); 3489 3650 3490 3651 case TVM_GETSCROLLTIME: 3491 // FIXME (treeview, "Unimplemented msg TVM_GETSCROLLTIME\n"); 3492 return 0; 3652 return TREEVIEW_GetScrollTime (hwnd); 3653 3654 case TVM_GETITEMSTATE: 3655 return TREEVIEW_GetItemState (hwnd,wParam, lParam); 3656 3657 case TVM_GETLINECOLOR: 3658 return TREEVIEW_GetLineColor (hwnd,wParam, lParam); 3659 3660 case TVM_SETLINECOLOR: 3661 return TREEVIEW_SetLineColor (hwnd,wParam, lParam); 3493 3662 3494 3663 case TVM_SETINSERTMARKCOLOR: … … 3504 3673 return 0; 3505 3674 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 /* 3516 3517 3518 3519 3520 3675 case WM_COMMAND: 3676 return TREEVIEW_Command (hwnd, wParam, lParam); 3677 3678 case WM_CREATE: 3679 return TREEVIEW_Create (hwnd, wParam, lParam); 3680 3681 case WM_DESTROY: 3682 return TREEVIEW_Destroy (hwnd); 3683 3684 /* case WM_ENABLE: */ 3685 3686 case WM_ERASEBKGND: 3687 return TREEVIEW_EraseBackground (hwnd, wParam, lParam); 3688 3689 case WM_GETDLGCODE: 3521 3690 return DLGC_WANTARROWS | DLGC_WANTCHARS; 3522 3691 3523 3692 case WM_PAINT: 3524 3693 return TREEVIEW_Paint (hwnd, wParam, lParam); 3525 3694 3526 3695 case WM_GETFONT: 3527 3696 return TREEVIEW_GetFont (hwnd, wParam, lParam); 3528 3697 3529 3698 case WM_SETFONT: 3530 3699 return TREEVIEW_SetFont (hwnd, wParam, lParam); 3531 3700 3532 case WM_KEYDOWN: 3533 return TREEVIEW_KeyDown (hwnd, wParam, lParam); 3534 3535 3536 case WM_SETFOCUS: 3537 return TREEVIEW_SetFocus (hwnd, wParam, lParam); 3538 3539 case WM_KILLFOCUS: 3540 return TREEVIEW_KillFocus (hwnd, wParam, lParam); 3541 3542 3543 case WM_LBUTTONDOWN: 3544 return TREEVIEW_LButtonDown (hwnd, wParam, lParam); 3545 3546 case WM_LBUTTONUP: 3547 return TREEVIEW_LButtonUp (hwnd, wParam, lParam); 3548 3549 case WM_LBUTTONDBLCLK: 3550 return TREEVIEW_LButtonDoubleClick (hwnd, wParam, lParam); 3551 3552 case WM_RBUTTONDOWN: 3553 return TREEVIEW_RButtonDown (hwnd, wParam, lParam); 3554 3555 case WM_RBUTTONUP: 3556 return TREEVIEW_RButtonUp (hwnd, wParam, lParam); 3557 3558 case WM_MOUSEMOVE: 3559 return TREEVIEW_MouseMove (hwnd, wParam, lParam); 3560 3561 3562 /* case WM_SYSCOLORCHANGE: */ 3563 case WM_STYLECHANGED: 3564 return TREEVIEW_StyleChanged (hwnd, wParam, lParam); 3565 3566 /* case WM_SETREDRAW: */ 3567 3568 case WM_TIMER: 3569 return TREEVIEW_HandleTimer (hwnd, wParam, lParam); 3570 3571 case WM_SIZE: 3572 return TREEVIEW_Size (hwnd, wParam,lParam); 3573 3574 case WM_HSCROLL: 3575 return TREEVIEW_HScroll (hwnd, wParam, lParam); 3576 case WM_VSCROLL: 3577 return TREEVIEW_VScroll (hwnd, wParam, lParam); 3578 3579 case WM_DRAWITEM: 3580 // printf ("drawItem\n"); 3581 return DefWindowProcA (hwnd, uMsg, wParam, lParam); 3582 3583 default: 3584 // if (uMsg >= WM_USER) 3585 // FIXME (treeview, "Unknown msg %04x wp=%08x lp=%08lx\n", 3701 case WM_KEYDOWN: 3702 return TREEVIEW_KeyDown (hwnd, wParam, lParam); 3703 3704 case WM_SETFOCUS: 3705 return TREEVIEW_SetFocus (hwnd, wParam, lParam); 3706 3707 case WM_KILLFOCUS: 3708 return TREEVIEW_KillFocus (hwnd, wParam, lParam); 3709 3710 case WM_LBUTTONDOWN: 3711 return TREEVIEW_LButtonDown (hwnd, wParam, lParam); 3712 3713 case WM_LBUTTONUP: 3714 return TREEVIEW_LButtonUp (hwnd, wParam, lParam); 3715 3716 case WM_LBUTTONDBLCLK: 3717 return TREEVIEW_LButtonDoubleClick (hwnd, wParam, lParam); 3718 3719 case WM_RBUTTONDOWN: 3720 return TREEVIEW_RButtonDown (hwnd, wParam, lParam); 3721 3722 case WM_RBUTTONUP: 3723 return TREEVIEW_RButtonUp (hwnd, wParam, lParam); 3724 3725 case WM_MOUSEMOVE: 3726 return TREEVIEW_MouseMove (hwnd, wParam, lParam); 3727 3728 case WM_STYLECHANGED: 3729 return TREEVIEW_StyleChanged (hwnd, wParam, lParam); 3730 3731 /* case WM_SYSCOLORCHANGE: */ 3732 /* case WM_SETREDRAW: */ 3733 3734 case WM_TIMER: 3735 return TREEVIEW_HandleTimer (hwnd, wParam, lParam); 3736 3737 case WM_SIZE: 3738 return TREEVIEW_Size (hwnd, wParam,lParam); 3739 3740 case WM_HSCROLL: 3741 return TREEVIEW_HScroll (hwnd, wParam, lParam); 3742 3743 case WM_VSCROLL: 3744 return TREEVIEW_VScroll (hwnd, wParam, lParam); 3745 3746 case WM_DRAWITEM: 3747 // printf ("drawItem\n"); 3748 return DefWindowProcA (hwnd, uMsg, wParam, lParam); 3749 3750 default: 3751 // if (uMsg >= WM_USER) 3752 // FIXME (treeview, "Unknown msg %04x wp=%08x lp=%08lx\n", 3586 3753 // uMsg, wParam, lParam); 3587 3754 return DefWindowProcA (hwnd, uMsg, wParam, lParam);
Note:
See TracChangeset
for help on using the changeset viewer.