Changeset 8


Ignore:
Timestamp:
Dec 25, 2010, 10:28:06 PM (13 years ago)
Author:
george
Message:
 
Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Forms/UMainForm.lfm

    r7 r8  
    11object MainForm: TMainForm
    2   Left = 332
     2  Left = 255
    33  Height = 445
    4   Top = 106
     4  Top = 75
    55  Width = 649
    66  ActiveControl = Panel1
     
    7171      Anchors = [akTop, akLeft, akRight, akBottom]
    7272      Columns = <>
     73      OwnerData = True
    7374      PopupMenu = PopupMenuItem
    7475      ReadOnly = True
     
    7677      TabOrder = 0
    7778      ViewStyle = vsReport
     79      OnData = ListView1Data
    7880      OnDblClick = ListView1DblClick
    7981      OnKeyPress = ListView1KeyPress
  • trunk/Forms/UMainForm.pas

    r7 r8  
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ComCtrls,
    99  StdCtrls, ActnList, Menus, ExtCtrls, USqlDatabase, DOM, XMLRead, XMLWrite,
    10   UPersistentForm, UTreeState;
     10  UPersistentForm, UTreeState, SpecializedList;
    1111
    1212const
     
    1414
    1515type
    16   TValueType = (vtNone, vtInteger, vtString, vtText, vtDateTime, vtFloat, vtImage, vtBoolean,
     16  TDbValueType = (vtNone, vtInteger, vtString, vtText, vtDateTime, vtFloat, vtImage, vtBoolean,
    1717  vtIPv4, vtMAC, vtIPv6, vtFile, vtGPS, vtEnumeration, vtHyperlink, vtPassword,
    1818  vtReference, vtDate, vtTime, vtColor);
     19
     20  { TReportLine }
     21
     22  TReportLine = class
     23    Id: Integer;
     24    Items: TListString;
     25    constructor Create;
     26    destructor Destroy; override;
     27  end;
    1928
    2029  { TMainForm }
     
    7685    procedure FormDestroy(Sender: TObject);
    7786    procedure FormShow(Sender: TObject);
     87    procedure ListView1Data(Sender: TObject; Item: TListItem);
    7888    procedure ListView1DblClick(Sender: TObject);
    7989    procedure ListView1KeyPress(Sender: TObject; var Key: char);
     
    93103    Database: TSQLDatabase;
    94104    TreeState: TTreeState;
     105    Report: TListObject;
    95106    procedure LoadTree;
    96107    procedure LoadItemList;
     
    103114  SItemNotFound = 'Item not found';
    104115  SObjectNotFound = 'Object not found';
     116  SGroup = 'Groups';
    105117
    106118
     
    109121uses
    110122  UItemView, UItemEdit, UItemAdd;
     123
     124{ TReportLine }
     125
     126constructor TReportLine.Create;
     127begin
     128  Items := TListString.Create;
     129end;
     130
     131destructor TReportLine.Destroy;
     132begin
     133  Items.Free;
     134  inherited Destroy;
     135end;
    111136
    112137{$R *.lfm}
     
    154179  TreeState := TTreeState.Create;
    155180  PersistentForm := TPersistentForm.Create;
     181  Report := TListObject.Create;
    156182end;
    157183
    158184procedure TMainForm.FormDestroy(Sender: TObject);
    159185begin
     186  Report.Free;
    160187  TreeState.Free;
    161188  Database.Free;
     
    249276end;
    250277
     278procedure TMainForm.ListView1Data(Sender: TObject; Item: TListItem);
     279var
     280  I: Integer;
     281begin
     282  if Item.Index < Report.Count then
     283  with TReportLine(Report[Item.Index]) do begin
     284    Item.Caption := Items[0];
     285    for I := 1 to Items.Count - 1 do
     286      Item.SubItems.Add(Items[I]);
     287  end;
     288end;
     289
    251290procedure TMainForm.ListView1DblClick(Sender: TObject);
    252291begin
     
    271310begin
    272311  if Assigned(ListView1.Selected) then
    273     SelectedItem := Integer(ListView1.Selected.Data)
     312    SelectedItem := TReportLine(Report[ListView1.Selected.Index]).Id
    274313    else SelectedItem := 0;
    275314
     
    307346    TreeState.SaveTree(TreeView1);
    308347    Clear;
    309     AddChild(nil, 'Skupiny');
     348    AddChild(nil, SGroup);
    310349    TopItem.ImageIndex := 0;
    311350    TopItem.SelectedIndex := 0;
     
    346385  I: Integer;
    347386  C: Integer;
    348   NewItem: TListItem;
     387  NewItem: TReportLine;
    349388  NewColumn: TListColumn;
    350389begin
    351390  SelectedObject := 0;
    352   if Assigned(TreeView1.Selected)then
    353   with ListView1, Items do begin
     391  if Assigned(TreeView1.Selected) then
     392  with ListView1 do begin
    354393    Visible := True;
    355     Clear;
     394    Report.Clear;
    356395    try
    357396    DbRows := TDbRows.Create;
     
    372411          NewColumn.Caption := Properties[I].Values['Name'];
    373412        end;
     413
     414        ListView1Resize(Self);
     415
     416        // Load items
     417        Values := TDbRows.Create;
     418        Database.Query(Values, 'SELECT * FROM `' + DbRows[0].Values['Schema'] + '`.`' +
     419          DbRows[0].Values['Table'] + '`');
     420        for I := 0 to Values.Count - 1 do begin
     421          NewItem := TReportLine.Create;
     422          NewItem.Items.Add(Values[I].Values[DbRows[0].Values['PrimaryKey']]);
     423          NewItem.Id := StrToInt(Values[I].Values[DbRows[0].Values['PrimaryKey']]);
     424          for C := 0 to Properties.Count - 1 do begin
     425            NewItem.Items.Add(Values[I].Values[Properties[C].Values['ColumnName']]);
     426          end;
     427          Report.Add(NewItem);
     428        end;
     429        Items.Count := Values.Count;
     430        Refresh;
    374431      finally
    375432        Properties.Free;
    376       end;
    377 
    378       ListView1Resize(Self);
    379 
    380       // Load items
    381       try
    382       Values := TDbRows.Create;
    383       Database.Query(Values, 'SELECT * FROM `' + DbRows[0].Values['Schema'] + '`.`' +
    384         DbRows[0].Values['Table'] + '`');
    385       for I := 0 to Values.Count - 1 do begin
    386         NewItem := Items.Add;
    387         NewItem.Caption := Values[I].Values[DbRows[0].Values['PrimaryKey']];
    388         NewItem.Data := Pointer(StrToInt(Values[I].Values[DbRows[0].Values['PrimaryKey']]));
    389         for C := 0 to Properties.Count - 1 do begin
    390           NewItem.SubItems.Add(Values[I].Values[Properties[C].Values['ColumnName']]);
    391         end;
    392       end;
    393       finally
    394433        Values.Free;
    395434      end;
  • trunk/chronis.lpi

    r7 r8  
    4343      </Item2>
    4444    </RequiredPackages>
    45     <Units Count="13">
     45    <Units Count="18">
    4646      <Unit0>
    4747        <Filename Value="chronis.lpr"/>
     
    5656        <Loaded Value="True"/>
    5757        <LoadedDesigner Value="True"/>
     58        <DefaultSyntaxHighlighter Value="Delphi"/>
    5859      </Unit0>
    5960      <Unit1>
     
    6465        <CursorPos X="1" Y="347"/>
    6566        <UsageCount Value="52"/>
     67        <DefaultSyntaxHighlighter Value="Delphi"/>
    6668      </Unit1>
    6769      <Unit2>
     
    7577        <CursorPos X="25" Y="144"/>
    7678        <UsageCount Value="106"/>
     79        <DefaultSyntaxHighlighter Value="Delphi"/>
    7780      </Unit2>
    7881      <Unit3>
     
    8689        <CursorPos X="24" Y="14"/>
    8790        <UsageCount Value="106"/>
     91        <DefaultSyntaxHighlighter Value="Delphi"/>
    8892      </Unit3>
    8993      <Unit4>
     
    9599        <CursorPos X="33" Y="46"/>
    96100        <UsageCount Value="264"/>
     101        <DefaultSyntaxHighlighter Value="Delphi"/>
    97102      </Unit4>
    98103      <Unit5>
     
    102107        <EditorIndex Value="2"/>
    103108        <WindowIndex Value="0"/>
    104         <TopLine Value="50"/>
    105         <CursorPos X="5" Y="45"/>
     109        <TopLine Value="362"/>
     110        <CursorPos X="1" Y="424"/>
    106111        <UsageCount Value="264"/>
    107112        <Loaded Value="True"/>
     113        <DefaultSyntaxHighlighter Value="Delphi"/>
    108114      </Unit5>
    109115      <Unit6>
     
    115121        <CursorPos X="21" Y="13"/>
    116122        <UsageCount Value="264"/>
     123        <DefaultSyntaxHighlighter Value="Delphi"/>
    117124      </Unit6>
    118125      <Unit7>
     
    122129        <ResourceBaseClass Value="Form"/>
    123130        <UnitName Value="UItemView"/>
    124         <IsVisibleTab Value="True"/>
    125131        <EditorIndex Value="0"/>
    126132        <WindowIndex Value="0"/>
    127         <TopLine Value="76"/>
    128         <CursorPos X="37" Y="98"/>
     133        <TopLine Value="1"/>
     134        <CursorPos X="32" Y="95"/>
    129135        <UsageCount Value="327"/>
    130136        <Loaded Value="True"/>
    131137        <LoadedDesigner Value="True"/>
     138        <DefaultSyntaxHighlighter Value="Delphi"/>
    132139      </Unit7>
    133140      <Unit8>
     
    137144        <ResourceBaseClass Value="Form"/>
    138145        <UnitName Value="UItemEdit"/>
     146        <IsVisibleTab Value="True"/>
    139147        <EditorIndex Value="1"/>
    140148        <WindowIndex Value="0"/>
    141         <TopLine Value="80"/>
    142         <CursorPos X="30" Y="93"/>
     149        <TopLine Value="89"/>
     150        <CursorPos X="1" Y="111"/>
    143151        <UsageCount Value="318"/>
    144152        <Loaded Value="True"/>
    145153        <LoadedDesigner Value="True"/>
     154        <DefaultSyntaxHighlighter Value="Delphi"/>
    146155      </Unit8>
    147156      <Unit9>
     
    152161        <ResourceBaseClass Value="Form"/>
    153162        <UnitName Value="ULoginForm"/>
    154         <EditorIndex Value="5"/>
     163        <EditorIndex Value="10"/>
    155164        <WindowIndex Value="0"/>
    156165        <TopLine Value="1"/>
     
    159168        <Loaded Value="True"/>
    160169        <LoadedDesigner Value="True"/>
     170        <DefaultSyntaxHighlighter Value="Delphi"/>
    161171      </Unit9>
    162172      <Unit10>
     
    167177        <ResourceBaseClass Value="Form"/>
    168178        <UnitName Value="UMainForm"/>
    169         <EditorIndex Value="3"/>
    170         <WindowIndex Value="0"/>
    171         <TopLine Value="372"/>
    172         <CursorPos X="30" Y="383"/>
     179        <EditorIndex Value="5"/>
     180        <WindowIndex Value="0"/>
     181        <TopLine Value="300"/>
     182        <CursorPos X="69" Y="312"/>
    173183        <UsageCount Value="317"/>
    174184        <Loaded Value="True"/>
    175185        <LoadedDesigner Value="True"/>
     186        <DefaultSyntaxHighlighter Value="Delphi"/>
    176187      </Unit10>
    177188      <Unit11>
     
    180191        <UnitName Value="UTreeState"/>
    181192        <UsageCount Value="314"/>
     193        <DefaultSyntaxHighlighter Value="Delphi"/>
    182194      </Unit11>
    183195      <Unit12>
     
    187199        <ResourceBaseClass Value="Form"/>
    188200        <UnitName Value="UItemAdd"/>
    189         <EditorIndex Value="4"/>
     201        <EditorIndex Value="9"/>
    190202        <WindowIndex Value="0"/>
    191203        <TopLine Value="69"/>
     
    194206        <Loaded Value="True"/>
    195207        <LoadedDesigner Value="True"/>
     208        <DefaultSyntaxHighlighter Value="Delphi"/>
    196209      </Unit12>
     210      <Unit13>
     211        <Filename Value="/usr/share/fpcsrc/rtl/objpas/classes/classesh.inc"/>
     212        <EditorIndex Value="8"/>
     213        <WindowIndex Value="0"/>
     214        <TopLine Value="963"/>
     215        <CursorPos X="3" Y="974"/>
     216        <UsageCount Value="11"/>
     217        <Loaded Value="True"/>
     218      </Unit13>
     219      <Unit14>
     220        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     221        <EditorIndex Value="3"/>
     222        <WindowIndex Value="0"/>
     223        <TopLine Value="75"/>
     224        <CursorPos X="1" Y="89"/>
     225        <UsageCount Value="10"/>
     226        <Loaded Value="True"/>
     227      </Unit14>
     228      <Unit15>
     229        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericList.inc"/>
     230        <EditorIndex Value="4"/>
     231        <WindowIndex Value="0"/>
     232        <TopLine Value="387"/>
     233        <CursorPos X="1" Y="407"/>
     234        <UsageCount Value="10"/>
     235        <Loaded Value="True"/>
     236      </Unit15>
     237      <Unit16>
     238        <Filename Value="../../../lazarus/trunk/lcl/forms.pp"/>
     239        <UnitName Value="Forms"/>
     240        <EditorIndex Value="6"/>
     241        <WindowIndex Value="0"/>
     242        <TopLine Value="593"/>
     243        <CursorPos X="15" Y="606"/>
     244        <UsageCount Value="10"/>
     245        <Loaded Value="True"/>
     246      </Unit16>
     247      <Unit17>
     248        <Filename Value="../../../lazarus/trunk/lcl/include/customform.inc"/>
     249        <EditorIndex Value="7"/>
     250        <WindowIndex Value="0"/>
     251        <TopLine Value="2104"/>
     252        <CursorPos X="3" Y="2109"/>
     253        <UsageCount Value="10"/>
     254        <Loaded Value="True"/>
     255      </Unit17>
    197256    </Units>
    198257    <JumpHistory Count="30" HistoryIndex="29">
    199258      <Position1>
    200         <Filename Value="Forms/UItemAdd.pas"/>
    201         <Caret Line="9" Column="27" TopLine="1"/>
     259        <Filename Value="Common/USqlDatabase.pas"/>
     260        <Caret Line="424" Column="1" TopLine="407"/>
    202261      </Position1>
    203262      <Position2>
    204         <Filename Value="Forms/UItemAdd.pas"/>
    205         <Caret Line="138" Column="28" TopLine="116"/>
     263        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     264        <Caret Line="59" Column="1" TopLine="46"/>
    206265      </Position2>
    207266      <Position3>
    208         <Filename Value="Forms/UItemEdit.pas"/>
    209         <Caret Line="137" Column="16" TopLine="125"/>
     267        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     268        <Caret Line="60" Column="1" TopLine="46"/>
    210269      </Position3>
    211270      <Position4>
    212         <Filename Value="Forms/UItemEdit.pas"/>
    213         <Caret Line="78" Column="23" TopLine="56"/>
     271        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     272        <Caret Line="61" Column="1" TopLine="46"/>
    214273      </Position4>
    215274      <Position5>
    216275        <Filename Value="Forms/UMainForm.pas"/>
    217         <Caret Line="339" Column="43" TopLine="214"/>
     276        <Caret Line="429" Column="1" TopLine="411"/>
    218277      </Position5>
    219278      <Position6>
    220         <Filename Value="Forms/UMainForm.pas"/>
    221         <Caret Line="340" Column="43" TopLine="317"/>
     279        <Filename Value="Common/USqlDatabase.pas"/>
     280        <Caret Line="423" Column="1" TopLine="407"/>
    222281      </Position6>
    223282      <Position7>
    224         <Filename Value="Forms/UMainForm.pas"/>
    225         <Caret Line="341" Column="43" TopLine="318"/>
     283        <Filename Value="Common/USqlDatabase.pas"/>
     284        <Caret Line="424" Column="1" TopLine="407"/>
    226285      </Position7>
    227286      <Position8>
    228         <Filename Value="Forms/UMainForm.pas"/>
    229         <Caret Line="342" Column="43" TopLine="319"/>
     287        <Filename Value="Common/USqlDatabase.pas"/>
     288        <Caret Line="423" Column="1" TopLine="407"/>
    230289      </Position8>
    231290      <Position9>
    232         <Filename Value="Forms/UMainForm.pas"/>
    233         <Caret Line="343" Column="43" TopLine="320"/>
     291        <Filename Value="Common/USqlDatabase.pas"/>
     292        <Caret Line="424" Column="1" TopLine="407"/>
    234293      </Position9>
    235294      <Position10>
    236         <Filename Value="Forms/UMainForm.pas"/>
    237         <Caret Line="344" Column="43" TopLine="321"/>
     295        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     296        <Caret Line="59" Column="1" TopLine="46"/>
    238297      </Position10>
    239298      <Position11>
    240         <Filename Value="Forms/UMainForm.pas"/>
    241         <Caret Line="345" Column="43" TopLine="322"/>
     299        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     300        <Caret Line="60" Column="1" TopLine="46"/>
    242301      </Position11>
    243302      <Position12>
    244         <Filename Value="Forms/UMainForm.pas"/>
    245         <Caret Line="346" Column="43" TopLine="323"/>
     303        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericDictionary.inc"/>
     304        <Caret Line="88" Column="1" TopLine="75"/>
    246305      </Position12>
    247306      <Position13>
    248307        <Filename Value="Forms/UMainForm.pas"/>
    249         <Caret Line="345" Column="43" TopLine="322"/>
     308        <Caret Line="292" Column="12" TopLine="282"/>
    250309      </Position13>
    251310      <Position14>
    252311        <Filename Value="Forms/UMainForm.pas"/>
    253         <Caret Line="344" Column="43" TopLine="321"/>
     312        <Caret Line="204" Column="18" TopLine="202"/>
    254313      </Position14>
    255314      <Position15>
    256         <Filename Value="Forms/UMainForm.pas"/>
    257         <Caret Line="345" Column="43" TopLine="322"/>
     315        <Filename Value="Forms/UItemView.pas"/>
     316        <Caret Line="67" Column="13" TopLine="55"/>
    258317      </Position15>
    259318      <Position16>
    260319        <Filename Value="Forms/UMainForm.pas"/>
    261         <Caret Line="352" Column="43" TopLine="329"/>
     320        <Caret Line="16" Column="41" TopLine="4"/>
    262321      </Position16>
    263322      <Position17>
    264323        <Filename Value="Forms/UMainForm.pas"/>
    265         <Caret Line="218" Column="1" TopLine="195"/>
     324        <Caret Line="50" Column="25" TopLine="28"/>
    266325      </Position17>
    267326      <Position18>
    268327        <Filename Value="Forms/UMainForm.pas"/>
    269         <Caret Line="79" Column="21" TopLine="67"/>
     328        <Caret Line="87" Column="23" TopLine="65"/>
    270329      </Position18>
    271330      <Position19>
    272331        <Filename Value="Forms/UMainForm.pas"/>
    273         <Caret Line="81" Column="21" TopLine="69"/>
     332        <Caret Line="88" Column="23" TopLine="66"/>
    274333      </Position19>
    275334      <Position20>
    276         <Filename Value="Forms/UItemView.pas"/>
    277         <Caret Line="118" Column="39" TopLine="98"/>
     335        <Filename Value="Forms/UMainForm.pas"/>
     336        <Caret Line="89" Column="23" TopLine="67"/>
    278337      </Position20>
    279338      <Position21>
    280         <Filename Value="Forms/UItemEdit.pas"/>
    281         <Caret Line="39" Column="1" TopLine="26"/>
     339        <Filename Value="Forms/UMainForm.pas"/>
     340        <Caret Line="90" Column="23" TopLine="68"/>
    282341      </Position21>
    283342      <Position22>
    284         <Filename Value="Forms/UItemEdit.pas"/>
    285         <Caret Line="81" Column="31" TopLine="70"/>
     343        <Filename Value="Forms/UMainForm.pas"/>
     344        <Caret Line="91" Column="23" TopLine="69"/>
    286345      </Position22>
    287346      <Position23>
    288         <Filename Value="Forms/UItemAdd.pas"/>
    289         <Caret Line="153" Column="39" TopLine="2"/>
     347        <Filename Value="Forms/UMainForm.pas"/>
     348        <Caret Line="278" Column="29" TopLine="265"/>
    290349      </Position23>
    291350      <Position24>
    292351        <Filename Value="Forms/UMainForm.pas"/>
    293         <Caret Line="102" Column="1" TopLine="91"/>
     352        <Caret Line="290" Column="29" TopLine="277"/>
    294353      </Position24>
    295354      <Position25>
    296355        <Filename Value="Forms/UMainForm.pas"/>
    297         <Caret Line="138" Column="26" TopLine="125"/>
     356        <Caret Line="295" Column="29" TopLine="277"/>
    298357      </Position25>
    299358      <Position26>
    300359        <Filename Value="Forms/UMainForm.pas"/>
    301         <Caret Line="136" Column="30" TopLine="125"/>
     360        <Caret Line="300" Column="29" TopLine="287"/>
    302361      </Position26>
    303362      <Position27>
    304363        <Filename Value="Forms/UMainForm.pas"/>
    305         <Caret Line="314" Column="30" TopLine="302"/>
     364        <Caret Line="304" Column="25" TopLine="287"/>
    306365      </Position27>
    307366      <Position28>
    308367        <Filename Value="Forms/UMainForm.pas"/>
    309         <Caret Line="343" Column="11" TopLine="322"/>
     368        <Caret Line="305" Column="63" TopLine="287"/>
    310369      </Position28>
    311370      <Position29>
    312371        <Filename Value="Forms/UMainForm.pas"/>
    313         <Caret Line="368" Column="9" TopLine="346"/>
     372        <Caret Line="308" Column="29" TopLine="287"/>
    314373      </Position29>
    315374      <Position30>
    316         <Filename Value="Forms/UItemView.pas"/>
    317         <Caret Line="86" Column="24" TopLine="80"/>
     375        <Filename Value="Forms/UMainForm.pas"/>
     376        <Caret Line="312" Column="69" TopLine="300"/>
    318377      </Position30>
    319378    </JumpHistory>
     
    330389      <UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
    331390    </SearchPaths>
     391    <Parsing>
     392      <SyntaxOptions>
     393        <SyntaxMode Value="Delphi"/>
     394        <CStyleOperator Value="False"/>
     395        <AllowLabel Value="False"/>
     396        <CPPInline Value="False"/>
     397      </SyntaxOptions>
     398    </Parsing>
    332399    <CodeGeneration>
    333400      <Checks>
     
    341408      <Debugging>
    342409        <GenerateDebugInfo Value="True"/>
     410        <UseHeaptrc Value="True"/>
    343411      </Debugging>
    344412      <Options>
     
    350418    <Other>
    351419      <CompilerMessages>
     420        <IgnoredMessages idx5023="True" idx5024="True" idx5025="True" idx5028="True" idx5029="True" idx5031="True"/>
    352421        <UseMsgFile Value="True"/>
    353422      </CompilerMessages>
  • trunk/languages/chronis.cs.po

    r7 r8  
    177177msgstr "Server"
    178178
     179#: umainform.sgroup
     180msgid "Groups"
     181msgstr ""
     182
    179183#: umainform.sitemnotfound
    180184msgid "Item not found"
  • trunk/languages/chronis.po

    r7 r8  
    147147msgstr ""
    148148
     149#: umainform.sgroup
     150msgid "Groups"
     151msgstr ""
     152
    149153#: umainform.sitemnotfound
    150154msgid "Item not found"
Note: See TracChangeset for help on using the changeset viewer.