Changeset 11 for ProtocolBuffers/UMainForm.pas
- Timestamp:
- Oct 20, 2009, 11:06:34 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ProtocolBuffers/UMainForm.pas
r10 r11 28 28 procedure DisplayStream(Stream: TStream); 29 29 procedure DisplayTree(ProtocolBuffer: TProtocolBuffer; TreeView: TTreeView); 30 procedure MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode); 30 procedure ListToNode(PBRepeated: TPBRepeatedItem; Node: TTreeNode; 31 Definition: TPBDefinition); 32 procedure MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode; 33 Definition: TPBDefinition); 31 34 public 32 35 end; … … 70 73 var 71 74 Stream: TMemoryStreamEx; 72 NewItem: TPB Item;75 NewItem: TPBDefinition; 73 76 PB: TProtocolBuffer; 74 77 begin … … 76 79 PB := TProtocolBuffer.Create; 77 80 with PB do begin 78 with BaseMessagedo begin81 with Definition do begin 79 82 Name := 'SampleMessage'; 80 NewItem := TPB IntegerItem.Create;81 with TPB IntegerItem(NewItem) do begin83 NewItem := TPBDefinition.Create; 84 with TPBDefinition(NewItem) do begin 82 85 Name := 'Height'; 83 86 Tag := 1; 84 Value := 12; 85 end; 86 Items.Add(NewItem); 87 NewItem := TPBStringItem.Create; 88 with TPBStringItem(NewItem) do begin 87 ItemType := itInteger; 88 end; 89 Items.Add(NewItem); 90 91 NewItem := TPBDefinition.Create; 92 with TPBDefinition(NewItem) do begin 89 93 Name := 'Name'; 90 94 Tag := 2; 91 Value := 'John Doe'; 92 end; 93 Items.Add(NewItem); 94 NewItem := TPBIntegerItem.Create; 95 with TPBIntegerItem(NewItem) do begin 95 ItemType := itString; 96 ItemMode := imOptional; 97 end; 98 Items.Add(NewItem); 99 100 NewItem := TPBDefinition.Create; 101 with TPBDefinition(NewItem) do begin 96 102 Name := 'Age'; 97 103 Tag := 3; 98 Value := 45; 99 end; 100 Items.Add(NewItem); 101 NewItem := TPBMessageItem.Create; 102 Items.Add(NewItem); 103 with TPBMessageItem(Items[Items.Count - 1]) do begin 104 ItemType := itInteger; 105 ItemMode := imOptional; 106 end; 107 Items.Add(NewItem); 108 109 NewItem := TPBDefinition.Create; 110 Items.Add(NewItem); 111 with TPBDefinition(Items[Items.Count - 1]) do begin 104 112 Name := 'Address'; 105 113 Tag := 5; 106 NewItem := TPBIntegerItem.Create; 107 with TPBIntegerItem(NewItem) do begin 114 ItemType := itMessage; 115 NewItem := TPBDefinition.Create; 116 ItemMode := imOptional; 117 with TPBDefinition(NewItem) do begin 108 118 Name := 'Street'; 109 119 Tag := 1; 110 Value := 67; 120 ItemType := itString; 121 ItemMode := imOptional; 111 122 end; 112 123 Items.Add(NewItem); 113 124 end; 114 125 end; 126 BaseMessage.Clear(Definition); 127 TPBIntegerItem(PB.BaseMessage.Items[0]).Value := 12; 128 TPBStringItem(TPBMessageItem(PB.BaseMessage.Items[3]). 129 Items[0]).Value := 'Vsetínská'; 115 130 DisplayTree(PB, TreeView1); 116 131 SaveToStream(Stream); … … 123 138 PB := TProtocolBuffer.Create; 124 139 with PB do begin 125 with BaseMessagedo begin140 with Definition do begin 126 141 Name := 'SampleMessage'; 127 NewItem := TPB IntegerItem.Create;128 with TPB IntegerItem(NewItem) do begin142 NewItem := TPBDefinition.Create; 143 with TPBDefinition(NewItem) do begin 129 144 Name := 'Height'; 130 145 Tag := 1; 131 end; 132 Items.Add(NewItem); 133 NewItem := TPBStringItem.Create; 134 with TPBStringItem(NewItem) do begin 146 ItemType := itInteger; 147 DefaultInteger := 32; 148 end; 149 Items.Add(NewItem); 150 151 NewItem := TPBDefinition.Create; 152 with TPBDefinition(NewItem) do begin 135 153 Name := 'Name'; 136 154 Tag := 2; 137 Value := ''; 138 end; 139 Items.Add(NewItem); 140 NewItem := TPBIntegerItem.Create; 141 with TPBIntegerItem(NewItem) do begin 142 Name := 'Weight'; 155 ItemType := itString; 156 DefaultString := 'Billy Joe'; 157 end; 158 Items.Add(NewItem); 159 160 NewItem := TPBDefinition.Create; 161 with TPBDefinition(NewItem) do begin 162 Name := 'Work'; 143 163 Tag := 4; 144 end; 145 Items.Add(NewItem); 146 NewItem := TPBMessageItem.Create; 147 Items.Add(NewItem); 148 with TPBMessageItem(Items[Items.Count - 1]) do begin 164 ItemType := itString; 165 DefaultString := 'EasyCompany'; 166 end; 167 Items.Add(NewItem); 168 169 NewItem := TPBDefinition.Create; 170 Items.Add(NewItem); 171 with TPBDefinition(Items[Items.Count - 1]) do begin 149 172 Name := 'Address'; 150 173 Tag := 5; 151 NewItem := TPBIntegerItem.Create; 152 with TPBIntegerItem(NewItem) do begin 174 ItemType := itMessage; 175 NewItem := TPBDefinition.Create; 176 with TPBDefinition(NewItem) do begin 153 177 Name := 'Street'; 154 178 Tag := 1; 179 ItemType := itString; 180 DefaultString := 'Ruská'; 155 181 end; 156 182 Items.Add(NewItem); 157 183 end; 158 184 end; 185 BaseMessage.Clear(Definition); 159 186 LoadFromStream(Stream); 160 187 DisplayTree(PB, TreeView2); … … 188 215 Items.Clear; 189 216 TopItem := Items.Add(nil, 'message'); 190 MessageToNode(ProtocolBuffer.BaseMessage, TopItem );217 MessageToNode(ProtocolBuffer.BaseMessage, TopItem, ProtocolBuffer.Definition); 191 218 TopItem.Expand(True); 192 219 EndUpdate; … … 194 221 end; 195 222 196 procedure TMainForm.MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode); 223 procedure TMainForm.ListToNode(PBRepeated: TPBRepeatedItem; Node: TTreeNode; 224 Definition: TPBDefinition); 197 225 var 198 226 I: Integer; 199 227 NewNode: TTreeNode; 200 228 begin 201 for I := 0 to PBMessage.Items.Count - 1 do begin 229 for I := 0 to Definition.Items.Count - 1 do 230 with TPBDefinition(Definition) do begin 202 231 NewNode := Node.Owner.AddChild(Node, ''); 203 if TPBItem(PBMessage.Items[I]) is TPBStringItem then begin 204 NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': string ' + 205 TPBItem(PBMessage.Items[I]).Name + ' = ' + 232 if ItemType = itString then begin 233 NewNode.Text := IntToStr(Tag) + ': string ' + Name + ' = ' + 234 TPBStringItem(PBRepeated.Items[I]).Value; 235 end else 236 if ItemType = itInteger then begin 237 NewNode.Text := IntToStr(Tag) + ': uint32 ' + Name + ' = ' + 238 IntToStr(TPBIntegerItem(PBRepeated.Items[I]).Value); 239 end else 240 if ItemType = itMessage then begin 241 NewNode.Text := IntToStr(Tag) + ': message ' + Name; 242 MessageToNode(TPBMessageItem(PBRepeated.Items[I]), NewNode, Definition); 243 end; 244 end; 245 end; 246 247 procedure TMainForm.MessageToNode(PBMessage: TPBMessageItem; Node: TTreeNode; 248 Definition: TPBDefinition); 249 var 250 I: Integer; 251 NewNode: TTreeNode; 252 begin 253 for I := 0 to Definition.Items.Count - 1 do 254 with TPBDefinition(Definition.Items[I]) do begin 255 NewNode := Node.Owner.AddChild(Node, ''); 256 if ItemMode = imRepeated then begin 257 NewNode.Text := 'repeated'; 258 ListToNode(TPBRepeatedItem(PBMessage.Items[I]), NewNode, Definition.Items[I]); 259 end else 260 if ItemType = itString then begin 261 NewNode.Text := IntToStr(Tag) + ': string ' + Name + ' = ' + 206 262 TPBStringItem(PBMessage.Items[I]).Value; 207 263 end else 208 if TPBItem(PBMessage.Items[I]) is TPBIntegerItem then begin 209 NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': uint32 ' + 210 TPBItem(PBMessage.Items[I]).Name + ' = ' + 264 if ItemType = itInteger then begin 265 NewNode.Text := IntToStr(Tag) + ': uint32 ' + Name + ' = ' + 211 266 IntToStr(TPBIntegerItem(PBMessage.Items[I]).Value); 212 267 end else 213 if TPBItem(PBMessage.Items[I]) is TPBMessageItem then begin 214 NewNode.Text := IntToStr(TPBItem(PBMessage.Items[I]).Tag) + ': message ' + 215 TPBItem(PBMessage.Items[I]).Name; 216 MessageToNode(TPBMessageItem(PBMessage.Items[I]), NewNode); 217 end; 218 268 if ItemType = itMessage then begin 269 NewNode.Text := IntToStr(Tag) + ': message ' + Name; 270 MessageToNode(TPBMessageItem(PBMessage.Items[I]), NewNode, Definition.Items[I]); 271 end; 219 272 end; 220 273 end;
Note:
See TracChangeset
for help on using the changeset viewer.