Ignore:
Timestamp:
Oct 12, 2009, 11:01:02 AM (15 years ago)
Author:
george
Message:
  • Modified: Enhanced loading from stream.
  • Added: Demo form is displaying original PB tree and target loaded PB tree.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • ProtocolBuffers/UMainForm.pas

    r8 r9  
    77uses
    88  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
    9   StdCtrls, UProtocolBuffers, UMemoryStreamEx;
     9  StdCtrls, ComCtrls, UProtocolBuffers, UMemoryStreamEx;
    1010
    1111const
     
    1818    Button2: TButton;
    1919    Memo1: TMemo;
     20    TreeView1: TTreeView;
     21    TreeView2: TTreeView;
    2022    procedure Button1Click(Sender: TObject);
    2123    procedure Button2Click(Sender: TObject);
     
    2426  private
    2527    procedure DisplayStream(Stream: TStream);
     28    procedure DisplayTree(ProtocolBuffer: TProtocolBuffer; TreeView: TTreeView);
     29    procedure MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode);
    2630  public
    27     PB: TProtocolBuffer;
    28   end;
     31  end;
    2932
    3033var
     
    4346  Stream: TMemoryStream;
    4447  StringList: TStringList;
     48  PB: TProtocolBuffer;
    4549begin
    4650  Stream := TMemoryStreamEx.Create;
     
    6165  Stream: TMemoryStreamEx;
    6266  NewItem: TPBItem;
     67  PB: TProtocolBuffer;
    6368begin
    6469  Stream := TMemoryStreamEx.Create;
     
    6873      Name := 'SampleMessage';
    6974      NewItem := TPBIntegerItem.Create;
    70       TPBIntegerItem(NewItem).Value := $5555555;
     75      TPBIntegerItem(NewItem).Name := 'Height';
     76      TPBIntegerItem(NewItem).Tag := 1;
     77      TPBIntegerItem(NewItem).Value := 12;
     78      Items.Add(NewItem);
     79      NewItem := TPBIntegerItem.Create;
     80      TPBIntegerItem(NewItem).Name := 'Width';
     81      TPBIntegerItem(NewItem).Tag := 2;
     82      TPBIntegerItem(NewItem).Value := 34;
     83      Items.Add(NewItem);
     84      NewItem := TPBIntegerItem.Create;
     85      TPBIntegerItem(NewItem).Name := 'Age';
     86      TPBIntegerItem(NewItem).Tag := 3;
     87      TPBIntegerItem(NewItem).Value := 45;
    7188      Items.Add(NewItem);
    7289    end;
     90    DisplayTree(PB, TreeView1);
    7391    SaveToStream(Stream);
    74     DisplayStream(Stream);
     92    Free;
     93  end;
     94
     95  DisplayStream(Stream);
     96  Stream.Position := 0;
     97
     98  PB := TProtocolBuffer.Create;
     99  with PB do begin
     100    with BaseMessage do begin
     101      Name := 'SampleMessage';
     102      NewItem := TPBIntegerItem.Create;
     103      TPBIntegerItem(NewItem).Name := 'Height';
     104      TPBIntegerItem(NewItem).Tag := 1;
     105      Items.Add(NewItem);
     106      NewItem := TPBIntegerItem.Create;
     107      TPBIntegerItem(NewItem).Name := 'Age';
     108      TPBIntegerItem(NewItem).Tag := 3;
     109      Items.Add(NewItem);
     110      NewItem := TPBIntegerItem.Create;
     111      TPBIntegerItem(NewItem).Name := 'Weight';
     112      TPBIntegerItem(NewItem).Tag := 4;
     113      Items.Add(NewItem);
     114    end;
     115    LoadFromStream(Stream);
     116    DisplayTree(PB, TreeView2);
     117    Free;
    75118  end;
    76119  Stream.Free;
     
    79122procedure TMainForm.FormDestroy(Sender: TObject);
    80123begin
    81   PB.Free;
    82124end;
    83125
     
    95137end;
    96138
     139procedure TMainForm.DisplayTree(ProtocolBuffer: TProtocolBuffer;
     140  TreeView: TTreeView);
     141begin
     142  with TreeView do begin
     143    BeginUpdate;
     144    Items.Clear;
     145    TopItem := Items.Add(nil, 'message');
     146    MessageToNode(ProtocolBuffer.BaseMessage, TopItem);
     147    TopItem.Expand(True);
     148    EndUpdate;
     149  end;
     150end;
     151
     152procedure TMainForm.MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode);
     153var
     154  I: Integer;
     155  NewNode: TTreeNode;
     156begin
     157  for I := 0 to PBMessage.Items.Count - 1 do begin
     158    NewNode := Node.Owner.AddChild(Node, '');
     159    if TPBItem(PBMessage.Items[I]) is TPBStringItem then begin
     160      NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': string ' +
     161        TPBItem(PBMessage.Items[I]).Name + ' = ' +
     162        TPBStringItem(PBMessage.Items[I]).Value;
     163    end else
     164    if TPBItem(PBMessage.Items[I]) is TPBIntegerItem then begin
     165      NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': uint32 ' +
     166        TPBItem(PBMessage.Items[I]).Name + ' = ' +
     167        IntToStr(TPBIntegerItem(PBMessage.Items[I]).Value);
     168    end else
     169    if TPBItem(PBMessage.Items[I]) is TPBMessageItem then begin
     170      NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': message ' +
     171        TPBItem(PBMessage.Items[I]).Name;
     172      MessageToNode(TPBMessageItem(PBMessage.Items[I]), NewNode);
     173    end;
     174
     175  end;
     176end;
     177
    97178initialization
    98179  {$I UMainForm.lrs}
Note: See TracChangeset for help on using the changeset viewer.