syntax = "proto3"; // playing around with ideas here package gitpb; // import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp import "google/protobuf/any.proto"; // Import 'Any' message Size { int64 width = 1; int64 height = 2; } // used for grid layouts message Location { int64 x = 1; int64 y = 2; } message Tree { // `autogenpb:marshal` Widget parent = 1; repeated Widget children = 2; } message Widget { int64 id = 1; string name = 2; int64 size = 3; google.protobuf.Any val = 4; google.protobuf.Any TK = 5; WidgetType Type = 6; Location location = 7; } message Widgets { // `autogenpb:marshal` string uuid = 1; // `autogenpb:uuid:0331fcd7-3c8c-43e4-be1b-77db6a6bc58c` string version = 2; // `autogenpb:version:v1` repeated Widget Widgets = 3; // this never gets used, but it's not worth violating the autogenpb standard Tree tree = 4; // everything is sent from go.wit.com/gui here } // // Widget names should try to match [Wikipedia Graphical widget] // TODO: fix autogenpb to look for enum enum WidgetType { Root = 0; // the master 'root' node of the binary tree Flag = 1; // internal use Window = 2; // Tab = 3; // a tab like in firefox Box = 4; // must be either Vertical or Horizontal arrangment Group = 5; // think 'Appetizers' on a restaurant menu Grid = 6; // like drawers in a chest or post office boxes Button = 7; // user can click on this Checkbox = 8; // true or false Dropdown = 9; // Combobox = 10; // a dropdown menu that can be edited by the user Label = 11; // a simple label Textbox = 12; // enter text TablePB = 13; // special case to allow the arbitrary GUI display of any other protobuf }