@willwade/aac-processors 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +787 -0
  3. package/dist/cli/index.d.ts +2 -0
  4. package/dist/cli/index.js +189 -0
  5. package/dist/cli/prettyPrint.d.ts +2 -0
  6. package/dist/cli/prettyPrint.js +28 -0
  7. package/dist/core/analyze.d.ts +6 -0
  8. package/dist/core/analyze.js +49 -0
  9. package/dist/core/baseProcessor.d.ts +94 -0
  10. package/dist/core/baseProcessor.js +208 -0
  11. package/dist/core/fileProcessor.d.ts +7 -0
  12. package/dist/core/fileProcessor.js +51 -0
  13. package/dist/core/stringCasing.d.ts +37 -0
  14. package/dist/core/stringCasing.js +174 -0
  15. package/dist/core/treeStructure.d.ts +190 -0
  16. package/dist/core/treeStructure.js +223 -0
  17. package/dist/index.d.ts +23 -0
  18. package/dist/index.js +96 -0
  19. package/dist/optional/symbolTools.d.ts +28 -0
  20. package/dist/optional/symbolTools.js +126 -0
  21. package/dist/processors/applePanelsProcessor.d.ts +23 -0
  22. package/dist/processors/applePanelsProcessor.js +521 -0
  23. package/dist/processors/astericsGridProcessor.d.ts +49 -0
  24. package/dist/processors/astericsGridProcessor.js +1427 -0
  25. package/dist/processors/dotProcessor.d.ts +21 -0
  26. package/dist/processors/dotProcessor.js +191 -0
  27. package/dist/processors/excelProcessor.d.ts +145 -0
  28. package/dist/processors/excelProcessor.js +556 -0
  29. package/dist/processors/gridset/helpers.d.ts +4 -0
  30. package/dist/processors/gridset/helpers.js +48 -0
  31. package/dist/processors/gridset/resolver.d.ts +8 -0
  32. package/dist/processors/gridset/resolver.js +100 -0
  33. package/dist/processors/gridsetProcessor.d.ts +28 -0
  34. package/dist/processors/gridsetProcessor.js +1339 -0
  35. package/dist/processors/index.d.ts +14 -0
  36. package/dist/processors/index.js +42 -0
  37. package/dist/processors/obfProcessor.d.ts +21 -0
  38. package/dist/processors/obfProcessor.js +278 -0
  39. package/dist/processors/opmlProcessor.d.ts +21 -0
  40. package/dist/processors/opmlProcessor.js +235 -0
  41. package/dist/processors/snap/helpers.d.ts +4 -0
  42. package/dist/processors/snap/helpers.js +27 -0
  43. package/dist/processors/snapProcessor.d.ts +44 -0
  44. package/dist/processors/snapProcessor.js +586 -0
  45. package/dist/processors/touchchat/helpers.d.ts +4 -0
  46. package/dist/processors/touchchat/helpers.js +27 -0
  47. package/dist/processors/touchchatProcessor.d.ts +27 -0
  48. package/dist/processors/touchchatProcessor.js +768 -0
  49. package/dist/types/aac.d.ts +47 -0
  50. package/dist/types/aac.js +2 -0
  51. package/docs/.keep +1 -0
  52. package/docs/ApplePanels.md +309 -0
  53. package/docs/Grid3-XML-Format.md +1788 -0
  54. package/docs/TobiiDynavox-Snap-Details.md +394 -0
  55. package/docs/asterics-Grid-fileformat-details.md +443 -0
  56. package/docs/obf_.obz Open Board File Formats.md +432 -0
  57. package/docs/touchchat.md +520 -0
  58. package/examples/.coverage +0 -0
  59. package/examples/.keep +1 -0
  60. package/examples/README.md +31 -0
  61. package/examples/communikate.dot +2637 -0
  62. package/examples/demo.js +143 -0
  63. package/examples/example-images.gridset +0 -0
  64. package/examples/example.ce +0 -0
  65. package/examples/example.dot +14 -0
  66. package/examples/example.grd +1 -0
  67. package/examples/example.gridset +0 -0
  68. package/examples/example.obf +27 -0
  69. package/examples/example.obz +0 -0
  70. package/examples/example.opml +18 -0
  71. package/examples/example.spb +0 -0
  72. package/examples/example.sps +0 -0
  73. package/examples/example2.grd +1 -0
  74. package/examples/gemini_response.txt +845 -0
  75. package/examples/image-map.js +45 -0
  76. package/examples/package-lock.json +1326 -0
  77. package/examples/package.json +10 -0
  78. package/examples/styled-output/converted-snap-to-touchchat.ce +0 -0
  79. package/examples/styled-output/styled-example.ce +0 -0
  80. package/examples/styled-output/styled-example.gridset +0 -0
  81. package/examples/styled-output/styled-example.obf +37 -0
  82. package/examples/styled-output/styled-example.spb +0 -0
  83. package/examples/styling-example.ts +316 -0
  84. package/examples/translate.js +39 -0
  85. package/examples/translate_demo.js +254 -0
  86. package/examples/translation_cache.json +44894 -0
  87. package/examples/typescript-demo.ts +251 -0
  88. package/examples/unified-interface-demo.ts +183 -0
  89. package/package.json +106 -0
@@ -0,0 +1,1788 @@
1
+ # Grid 3 File Docs
2
+
3
+ ## Introduction
4
+
5
+ This document provides a detailed technical guide to the structure and functionalities of Grid 3 files, focusing on the .gridset format used in Augmentative and Alternative Communication (AAC) boards. This guide is targeted at developers, researchers, and advanced users.
6
+
7
+ ## Terminology
8
+
9
+ - Gridset: A zipped archive containing grid files and settings.
10
+ - AAC: Augmentative and Alternative Communication.
11
+ - Cell: A button on an AAC board that can have various functionalities.
12
+ - ScanBlock: A group of cells that are scanned together.
13
+
14
+ ## Gridset Archive Structure
15
+
16
+ The grid files are part of a `.gridset` zipped archive. Renaming the file to `.zip` allows you to unzip and explore its contents.
17
+
18
+ ### Directory Structure
19
+
20
+ - **Grids/**: Directory where each XML grid file resides. E.g., `Grids/About me/grid.xml`
21
+ - **Settings0/**: Directory containing settings and styles for the grid.
22
+ - **FileMap.xml** An XML file that maps grid XML files and their associated dynamic files.
23
+
24
+ ```xml
25
+ <FileMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
26
+ <!-- Entry for each grid XML file and its dynamic files -->
27
+ <Entries>
28
+ <Entry StaticFile="Grids\Treats\grid.xml">
29
+ <DynamicFiles>
30
+ <File>Grids\Treats\wordlist-0-0.gridbmp</File>
31
+ </DynamicFiles>
32
+ </Entry>
33
+ <!-- ... -->
34
+ </Entries>
35
+ </FileMap>
36
+ ```
37
+
38
+ - **Settings0/ettings.xml** Contains settings related to the gridset.
39
+
40
+ ### Purpose
41
+
42
+ The `Settings0/settings.xml` file in a Grid 3 gridset contains various settings related to the gridset, including the identification of the home grid.
43
+
44
+ ### Structure
45
+
46
+ The file is an XML document with multiple settings, one of which is the `StartGrid`. This setting specifies the home grid, which is the default starting point or main screen for the gridset.
47
+
48
+ ### Key Element: `StartGrid`
49
+
50
+ - **`<StartGrid>`**: This element holds the name of the home grid. It's the grid that the user sees when they first access the gridset or return to the main menu.
51
+
52
+ ### Example
53
+
54
+ An example excerpt from a `Settings0/settings.xml` file:
55
+
56
+ ```xml
57
+ <GridSetSettings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
58
+ <!-- ... other settings ... -->
59
+ <StartGrid>01 CORE pg1</StartGrid>
60
+ <!-- ... other settings ... -->
61
+ </GridSetSettings>
62
+
63
+
64
+ - **Settings/Styles/style.xml** Defines various styles that can be applied to cells.
65
+
66
+ ```xml
67
+ <StyleData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
68
+ <!-- Definition of different styles -->
69
+ </StyleData>
70
+ ```
71
+
72
+ Each style is documented here for then referencing ib each pages grid.xml e.g
73
+
74
+ ```xml
75
+ <Styles>
76
+ <Style Key="Workspace">
77
+ <BackColour>#B8312FFF</BackColour>
78
+ <TileColour>#FAC51CFF</TileColour>
79
+ <BorderColour>#FEEFE7FF</BorderColour>
80
+ <FontColour>#FDE8A4FF</FontColour>
81
+ <FontName>Dosis</FontName>
82
+ <FontSize>40</FontSize>
83
+ </Style>
84
+ <!-- ,, -->
85
+ ```
86
+ In this example, the <StartGrid> element indicates that "01 CORE pg1" is the home grid for this gridset.
87
+
88
+ ### Usage in the Application
89
+ In the gridset comparison application, this file is parsed to determine the starting grid for navigation path calculations. The home grid is essential for understanding the user's journey through the gridset and for calculating the effort required to access different buttons or commands.
90
+
91
+ ## Grid XML File Format Documentation
92
+
93
+ ### Overview
94
+
95
+ Grid XML files are used to describe the layout and content of AAC (Augmentative and Alternative Communication) boards used in the Grid software. They contain information about the grid layout (rows and columns), buttons (also called cells), and their properties.
96
+
97
+
98
+ ### Cell Positioning System
99
+
100
+ Cells are positioned using a zero-based coordinate system:
101
+ - **X**: 0-based column index (leftmost column = 0)
102
+ - **Y**: 0-based row index (topmost row = 0)
103
+ - **ColumnSpan**: Number of columns the cell spans (default: 1)
104
+ - **RowSpan**: Number of rows the cell spans (default: 1)
105
+
106
+ ```xml
107
+ <Cell X="2" Y="1" ColumnSpan="2" RowSpan="1">
108
+ <!-- Cell spans columns 2-3, row 1 -->
109
+ </Cell>
110
+ ```
111
+
112
+ #### Column/Row Size System
113
+
114
+ Both columns and rows support size definitions with these values:
115
+ - `ExtraSmall` (0.33x)
116
+ - `Small` (0.66x)
117
+ - `Medium` (1.0x) - default
118
+ - `Large` (1.66x)
119
+ - `ExtraLarge` (2.5x)
120
+
121
+ ```xml
122
+ <ColumnDefinitions>
123
+ <ColumnDefinition Width="Large" />
124
+ <ColumnDefinition Width="Medium" />
125
+ </ColumnDefinitions>
126
+ <RowDefinitions>
127
+ <RowDefinition Height="ExtraSmall" />
128
+ </RowDefinitions>
129
+ ```
130
+
131
+
132
+ #### Full Example
133
+
134
+ ```xml
135
+ <Grid xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
136
+ <!--Background colour - hex code -->
137
+ <BackgroundColour>#E2EDF8FF</BackgroundColour>
138
+ <!-- Unique ID -->
139
+ <GridGuid>e631d2c5-cc2c-49b3-b6bb-eb1c81af84af</GridGuid>
140
+ <!-- This defines the column size -->
141
+ <ColumnDefinitions>
142
+ <ColumnDefinition />
143
+ <ColumnDefinition />
144
+ <ColumnDefinition />
145
+ <ColumnDefinition />
146
+ <ColumnDefinition />
147
+ <ColumnDefinition />
148
+ <ColumnDefinition />
149
+ <ColumnDefinition />
150
+ <ColumnDefinition />
151
+ </ColumnDefinitions>
152
+ <!-- This defines the row or column size -->
153
+ <RowDefinitions>
154
+ <RowDefinition />
155
+ <RowDefinition />
156
+ <RowDefinition />
157
+ <RowDefinition />
158
+ <RowDefinition />
159
+ <RowDefinition />
160
+ <RowDefinition />
161
+ </RowDefinitions>
162
+ <!-- AutoContentCommands - Need some more testing to detail this -->
163
+ <AutoContentCommands>
164
+ <AutoContentCommandCollection AutoContentType="Prediction">
165
+ <Commands>
166
+ <Command ID="AutoContent.Activate">
167
+ <Parameter Key="autocontenttype">Prediction</Parameter>
168
+ </Command>
169
+ </Commands>
170
+ </AutoContentCommandCollection>
171
+ </AutoContentCommands>
172
+ <Cells>
173
+ <Cell>
174
+ <Content>
175
+ <Commands>
176
+ <Command ID="Jump.To">
177
+ <Parameter Key="grid">Special</Parameter>
178
+ </Command>
179
+ </Commands>
180
+ <CaptionAndImage>
181
+ <Caption>Special</Caption>
182
+ <Image>[grid3x]star.wmf</Image>
183
+ </CaptionAndImage>
184
+ <Style>
185
+ <BasedOnStyle>Navigation category style</BasedOnStyle>
186
+ </Style>
187
+ </Content>
188
+ </Cell>
189
+ <!--etc-->
190
+ </Cells>
191
+ <!-- this gives highlight description text for each Block in the block scan. NB: max of 8 -->
192
+ <ScanBlockAudioDescriptions>
193
+ <ScanBlockAudioDescription>
194
+ <ScanBlock>1</ScanBlock>
195
+ </ScanBlockAudioDescription>
196
+ <ScanBlockAudioDescription>
197
+ <ScanBlock>2</ScanBlock>
198
+ </ScanBlockAudioDescription>
199
+ <ScanBlockAudioDescription>
200
+ <ScanBlock>3</ScanBlock>
201
+ </ScanBlockAudioDescription>
202
+ <ScanBlockAudioDescription>
203
+ <ScanBlock>4</ScanBlock>
204
+ </ScanBlockAudioDescription>
205
+ <ScanBlockAudioDescription>
206
+ <ScanBlock>5</ScanBlock>
207
+ </ScanBlockAudioDescription>
208
+ <ScanBlockAudioDescription>
209
+ <ScanBlock>6</ScanBlock>
210
+ </ScanBlockAudioDescription>
211
+ <ScanBlockAudioDescription>
212
+ <ScanBlock>7</ScanBlock>
213
+ </ScanBlockAudioDescription>
214
+ <ScanBlockAudioDescription>
215
+ <ScanBlock>8</ScanBlock>
216
+ </ScanBlockAudioDescription>
217
+ </ScanBlockAudioDescriptions>
218
+ <!-- Wordlists - this is an AutoContent Type cell. More info to come here>
219
+ <WordList>
220
+ <Items />
221
+ </WordList>
222
+ </Grid>
223
+ ```
224
+
225
+ ### Structure
226
+
227
+ - **Root Element**: The root element usually encapsulates the entire XML document and contains all other elements.
228
+
229
+ ```xml
230
+ <Root>
231
+ <!-- Child elements go here -->
232
+ </Root>
233
+ ```
234
+
235
+ #### Elements and Attributes
236
+
237
+ - **Grid Element**
238
+ - **BackgroundColour**: Specifies the background color of the grid using a hex code. E.g., `<BackgroundColour>#E2EDF8FF</BackgroundColour>`
239
+ - **GridGuid**: A unique identifier for the grid. E.g., `<GridGuid>e631d2c5-cc2c-49b3-b6bb-eb1c81af84af</GridGuid>`
240
+
241
+ #### Layout Information
242
+
243
+ - **ColumnDefinitions**: Defines the number of columns in the grid.
244
+
245
+ ```xml
246
+ <ColumnDefinitions>
247
+ <ColumnDefinition />
248
+ <!-- Repeat for each column -->
249
+ </ColumnDefinitions>
250
+ ```
251
+
252
+ - **RowDefinitions**: Defines the number of rows in the grid.
253
+
254
+ ```xml
255
+ <RowDefinitions>
256
+ <RowDefinition />
257
+ <!-- Repeat for each row -->
258
+ </RowDefinitions>
259
+ ```
260
+
261
+ - **AutoContentCommands**: A section for commands related to auto content like predictions.
262
+
263
+ ```xml
264
+ <AutoContentCommands>
265
+ <AutoContentCommandCollection AutoContentType="Prediction">
266
+ <Commands>
267
+ <Command ID="AutoContent.Activate">
268
+ <Parameter Key="autocontenttype">Prediction</Parameter>
269
+ </Command>
270
+ </Commands>
271
+ </AutoContentCommandCollection>
272
+ </AutoContentCommands>
273
+ ```
274
+
275
+ - **ScanBlockAudioDescriptions**: Provides audio descriptions for each scan block. The maximum number of scan blocks is 8.
276
+ ```xml
277
+ <ScanBlockAudioDescriptions>
278
+ <ScanBlockAudioDescription>
279
+ <ScanBlock>1</ScanBlock>
280
+ </ScanBlockAudioDescription>
281
+ <!-- ... -->
282
+ </ScanBlockAudioDescriptions>
283
+ ```
284
+
285
+ - **WordList:** Defines an AutoContent Type cell, which may contain word lists or other dynamic content.
286
+
287
+ ```xml
288
+ <WordList>
289
+ <Items>
290
+ <WordListItem>
291
+ <Text>
292
+ <s Image="[widgit]widgit rebus\h\hello.emf">
293
+ <r>Hello</r>
294
+ </s>
295
+ </Text>
296
+ <Image>[widgit]widgit rebus\h\hello.emf</Image>
297
+ <PartOfSpeech>Unknown</PartOfSpeech>
298
+ </WordListItem>
299
+ <!-- etc -->
300
+ </Items>
301
+ </WordList>
302
+ ```
303
+
304
+ ### Buttons (Cells)
305
+
306
+ #### Overview
307
+
308
+ - **Cells**: Contains the definitions for each button or cell.
309
+
310
+ ```xml
311
+ <Cells>
312
+ <Cell>
313
+ <!-- Cell properties go here -->
314
+ </Cell>
315
+ <!-- Repeat for each cell -->
316
+ </Cells>
317
+ ```
318
+ #### Attributes of Cell
319
+
320
+ Cells are the primary elements that make up a grid. They are defined using the <Cell> tag and can have various attributes.
321
+
322
+ - X and Y: These define the cell's position in the grid, corresponding to its column (X) and row (Y).
323
+ - ScanBlock: Optional attribute to define which scan block the cell belongs to.
324
+ - There is a maximum of 8 scan blocks per page.
325
+ - Values range from 1 to 8.
326
+ - A cell can be in any of these blocks.
327
+ - If not specified, the attribute is not needed for that particular cell.
328
+ - ColumnSpan and RowSpan: Define how many columns or rows the cell spans.
329
+
330
+ - AutoContentType, ID, Key: Used in various elements and commands to define their specific types and identifiers.
331
+ - Height: Attribute in RowDefinitions/RowDefinition, specifies the height of rows.
332
+
333
+
334
+
335
+ ```xml
336
+ <Cell X="7" Y="1" ScanBlock="2">
337
+ ```
338
+
339
+ ##### Properties of Cell
340
+
341
+ - **Caption**: The text displayed on the button.
342
+
343
+ ```xml
344
+ <Caption>Hello</Caption>
345
+ ```
346
+
347
+ - **CaptionAndImage**: It has a image and caption. Image relates to a ``[symbol-library]filename.extension`` (NB: The Grid licences Widgit)
348
+
349
+ - AudioDescription: Found within CaptionAndImage, provides audio descriptions for cells.
350
+
351
+ ```
352
+ <CaptionAndImage>
353
+ <Caption>Keyboard</Caption>
354
+ <Image>[grid3x]keyboard.wmf</Image>
355
+ </CaptionAndImage>
356
+ ```
357
+
358
+ - **Style**: Styles are referenced within cells to determine their appearance.
359
+
360
+ - BasedOnStyle: Refers to a predefined style from style.xml.
361
+ - BackColour, TileColour, BorderColour, FontColour, FontName, FontSize: Define various aspects of the cell's appearance.
362
+
363
+ ```xml
364
+ <Cell X="7" Y="1">
365
+ <Content>
366
+ <!-- ... -->
367
+ <Style>
368
+ <BasedOnStyle>Actions category style</BasedOnStyle>
369
+ </Style>
370
+ </Content>
371
+ </Cell>
372
+ ```
373
+
374
+ - **BasedOnStyle**: Refers to a predefined style from style.xml.
375
+
376
+ You can extend the style of a cell like this
377
+
378
+ ```xml
379
+ <Style>
380
+ <BasedOnStyle>Verbs</BasedOnStyle>
381
+ <BackColour>#B8312FFF</BackColour>
382
+ <TileColour>#FAC51CFF</TileColour>
383
+ <BorderColour>#FEEFE7FF</BorderColour>
384
+ <FontColour>#FDE8A4FF</FontColour>
385
+ <FontName>Dosis</FontName>
386
+ <FontSize>40</FontSize>
387
+ </Style>
388
+ ```
389
+
390
+ Note on WordList cells. These should have a ContentType = AutoContent ContentSubType = WodList
391
+
392
+ - WordList/Items: Specifies items within a word list, crucial for grids that rely on dynamic content.
393
+
394
+ ```xml
395
+ <Cell X="3" Y="2" ScanBlock="2">
396
+ <Content>
397
+ <ContentType>AutoContent</ContentType>
398
+ <ContentSubType>WordList</ContentSubType>
399
+ <CaptionAndImage xsi:nil="true" />
400
+ <Style>
401
+ <BasedOnStyle>Auto content</BasedOnStyle>
402
+ <BorderColour>#2C82C9FF</BorderColour>
403
+ </Style>
404
+ </Content>
405
+ </Cell>
406
+ ```
407
+
408
+
409
+ ## WordList
410
+
411
+ ### Overview
412
+
413
+ `WordList` elements are used to define a list of words or phrases within a grid. They are typically found within `Cell` elements and are used to provide a dynamic list of vocabulary items.
414
+
415
+ ### Structure
416
+
417
+ - **WordList**: The root element for the word list.
418
+ - **Items**: Container for all the items in the word list.
419
+ - **WordListItem**: Individual item within the word list.
420
+ - **Text**: Contains the textual representation of the item.
421
+ - **s**: An element that may include an image path and encloses the raw text of the item.
422
+ - **r**: The raw text of the item, representing the word or phrase.
423
+ - **Image**: Path to an image representing the item, typically in a symbol library.
424
+ - **PartOfSpeech**: Category of the part of speech for the item (e.g., noun, verb).
425
+
426
+ ### Example XML Structure
427
+
428
+ ```xml
429
+ <WordList>
430
+ <Items>
431
+ <WordListItem>
432
+ <Text>
433
+ <s Image="[symbol-library]image-path">
434
+ <r>word</r>
435
+ </s>
436
+ </Text>
437
+ <Image>[symbol-library]image-path</Image>
438
+ <PartOfSpeech>Part of speech category</PartOfSpeech>
439
+ </WordListItem>
440
+ <!-- Additional WordListItems... -->
441
+ </Items>
442
+ </WordList>
443
+
444
+
445
+ ## Commands
446
+
447
+ Commands are actions that a cell can execute when activated. They are defined under the `<Commands>` tag within a `<Content>` tag in a cell.
448
+
449
+ ### Simple Command
450
+
451
+ Commands associated with a cell are defined under the <Commands> tag within a <Content> tag.
452
+ A command without parameters looks like the following:
453
+
454
+ ```xml
455
+ <Command ID="Jump.Back" />
456
+ ```
457
+
458
+ ### AutoContent Commands
459
+
460
+ - AutoContentCommands/AutoContentCommandCollection: Defines a collection of auto content commands, such as predictions or word lists.
461
+
462
+ ### Command with Parameters
463
+
464
+ A command with additional settings can have parameters:
465
+
466
+ ```xml
467
+ <Command ID="Action.Speak">
468
+ <Parameter Key="unit">All</Parameter>
469
+ <Parameter Key="movecaret">0</Parameter>
470
+ </Command>
471
+ ```
472
+
473
+ ### Parameter Types and Serialization
474
+
475
+ Grid 3 uses several parameter definition types with specific serialization formats:
476
+
477
+ #### Parameter Definition Types
478
+
479
+ - **`StringParameterDefinition`**: String values stored as-is
480
+ - **`BooleanParameterDefinition`**: Boolean values serialized as "1" (true) or "0" (false)
481
+ - **`IntParameterDefinition`**: Integer values stored as strings using invariant culture
482
+ - **`DoubleParameterDefinition`**: Double values stored as strings
483
+ - **`EnumParameterDefinition<T>`**: Enum values serialized as their string names
484
+ - **`TimeSpanParameterDefinition`**: TimeSpan values stored as strings
485
+ - **`TextBaseParameterDefinition`**: Rich text with symbols stored as XML
486
+ - **`WordListParameterDefinition`**: WordList objects serialized as XML
487
+ - **`FileDataParameterDefinition`**: File data for embedded files
488
+
489
+ ### Common Commands and Parameters
490
+
491
+ #### Navigation Commands
492
+
493
+ ##### `Jump.To`
494
+ Navigate to another grid
495
+ - **Parameters:**
496
+ - `grid` (string): Target grid name within the .gridset bundle
497
+
498
+ ```xml
499
+ <Command ID="Jump.To">
500
+ <Parameter Key="grid">Quantity</Parameter>
501
+ </Command>
502
+ ```
503
+
504
+ ##### `Jump.Back`
505
+ Return to previous grid
506
+ - **Parameters:** None
507
+
508
+ ```xml
509
+ <Command ID="Jump.Back" />
510
+ ```
511
+
512
+ ##### `Jump.Home`
513
+ Navigate to start grid
514
+ - **Parameters:** None
515
+
516
+ ```xml
517
+ <Command ID="Jump.Home" />
518
+ ```
519
+
520
+ ##### `Jump.ToKeyboard`
521
+ Navigate to keyboard grid
522
+ - **Parameters:** None
523
+
524
+ ```xml
525
+ <Command ID="Jump.ToKeyboard" />
526
+ ```
527
+
528
+ #### Text Commands
529
+
530
+ ##### `Action.InsertText`
531
+ Insert text with optional symbols and grammar information
532
+ - **Parameters:**
533
+ - `text` (TextBase): Rich text content with optional symbols
534
+ - `pos` (PartOfSpeech): Part of speech (Unknown, Noun, Verb, etc.)
535
+ - `person` (string): Grammatical person information
536
+ - `number` (string): Grammatical number information
537
+ - `gender` (string): Grammatical gender information
538
+ - `verbstate` (VerbState): Verb state (Reset, etc.)
539
+ - `showincelllabel` (ShowInCellLabel): Display options for cell label
540
+
541
+ ```xml
542
+ <Command ID="Action.InsertText">
543
+ <Parameter Key="text">
544
+ <SymbolRun Image="[WIDGIT]path/to/symbol.emf">
545
+ <Run>Hello</Run>
546
+ <Run> </Run>
547
+ </SymbolRun>
548
+ </Parameter>
549
+ <Parameter Key="verbstate">Reset</Parameter>
550
+ </Command>
551
+ ```
552
+
553
+ ##### `Action.Letter`
554
+ Insert single character
555
+ - **Parameters:**
556
+ - `letter` (string): Single character to insert
557
+
558
+ ```xml
559
+ <Command ID="Action.Letter">
560
+ <Parameter Key="letter">A</Parameter>
561
+ </Command>
562
+ ```
563
+
564
+ ##### `Action.DeleteWord`
565
+ Delete last word
566
+ - **Parameters:** None
567
+
568
+ ```xml
569
+ <Command ID="Action.DeleteWord" />
570
+ ```
571
+
572
+ ##### `Action.DeleteLetter`
573
+ Delete last character
574
+ - **Parameters:** None
575
+
576
+ ```xml
577
+ <Command ID="Action.DeleteLetter" />
578
+ ```
579
+
580
+ ##### `Action.Clear`
581
+ Clear message window
582
+ - **Parameters:** None
583
+
584
+ ```xml
585
+ <Command ID="Action.Clear" />
586
+ ```
587
+
588
+ ##### `Action.Copy`
589
+ Copy text to clipboard
590
+ - **Parameters:** None
591
+
592
+ ```xml
593
+ <Command ID="Action.Copy" />
594
+ ```
595
+
596
+ ##### `Action.Paste`
597
+ Paste text from clipboard
598
+ - **Parameters:** None
599
+
600
+ ```xml
601
+ <Command ID="Action.Paste" />
602
+ ```
603
+
604
+
605
+ ## Symbols
606
+
607
+ Symbols (images) are used in cells to represent words, actions, or other elements. They are defined using the <Image> tag. eg
608
+
609
+ ```xml
610
+ Image>[grid3x]star.wmf</Image>
611
+ ```
612
+
613
+ So the part in square brackets is the library name, and the part in round brackets is the filename.
614
+
615
+ ### Libraries
616
+
617
+ Libraries are collections of symbols that can be used in cells. The location of these are found in ``C:\Program Files (x86)\Smartbox\Grid3\Resources\Symbols\``
618
+
619
+ Here are files names like ``WIDGIT.symbols``
620
+
621
+ This is a zipped archive. With the following structure
622
+
623
+ ```bash
624
+ categories.pix
625
+ censored.txt
626
+ library.pix
627
+ symbols/ # Symbol files. Can be a organised structure of folders files eg widgit rebus/h/hello.wmf or just a list of wmf files
628
+ symbols_rtl/ # Same as symbols but ones that have been flipped for rtl languages
629
+ ```
630
+
631
+ #### .pix Files (Symbol Index Files)
632
+
633
+ Based on the Grid 3 source code implementation, .pix files are symbol index files that provide search and categorization capabilities for symbol libraries:
634
+
635
+ **File Types and Purposes**:
636
+
637
+ **`[library].pix` (e.g., `WIDGIT.pix`, `SSTIX#.pix`)**:
638
+ - **Purpose**: Main symbol search index for a symbol library
639
+ - **Implementation**: Uses `CombinedValueIndex` class for symbol-to-caption mapping
640
+ - **Content**: Maps symbol IDs to their text captions/names for search functionality
641
+ - **Usage**: Enables text-based symbol search (e.g., searching "knife" returns matching symbols)
642
+ - **Localization**: Language-specific (e.g., `[widgit] en-GB names.pix`)
643
+
644
+ **`categories.pix`**:
645
+ - **Purpose**: Symbol categorization index for organizing symbols by topic/category
646
+ - **Implementation**: Uses `MultiValueIndex` class for category-based organization
647
+ - **Content**: Maps category names to lists of symbol IDs within each category
648
+ - **Usage**: Enables browsing symbols by categories (e.g., "Food", "Animals", "Actions")
649
+ - **Integration**: Works alongside main .pix files to provide category-based symbol browsing
650
+
651
+ **`library.pix`**:
652
+ - **Purpose**: Library metadata and symbol reference index
653
+ - **Content**: Contains symbol metadata, file paths, and library organization information
654
+ - **Usage**: Supports symbol reference resolution and library management
655
+
656
+ **Technical Implementation**:
657
+
658
+ **Index Classes**:
659
+ - **`CombinedValueIndex`**: Handles both single-value and multi-value indexing
660
+ - **`MultiValueIndex`**: Manages category-to-symbol-list mappings
661
+ - **`SingleValueIndex`**: Simple key-value symbol-to-caption mappings
662
+ - **`SymbolLibraryPictureSearchSource`**: Provides search interface using these indexes
663
+
664
+ **Symbol Reference Resolution**:
665
+ ```csharp
666
+ // Library key conversion (source code implementation)
667
+ string libKey = PictureLibraryHelper.ConvertLibraryIdToKey(libraryId).ToLower();
668
+ var entry = searchFolder.GetEntry(libKey + ".pix");
669
+ var combinedIndex = new CombinedValueIndex(entry, languageName, true);
670
+
671
+ // Category index loading
672
+ var categoryEntry = library.GetArchiveEntry("categories.pix");
673
+ var categoryIndex = new MultiValueIndex(categoryEntry, languageName, true);
674
+ ```
675
+
676
+ **Search Functionality**:
677
+ - **Exact Match**: Direct symbol ID to caption lookup
678
+ - **Fuzzy Search**: Partial text matching for symbol discovery
679
+ - **Predictive Search**: Start-of-word matching for prediction systems
680
+ - **Category Browsing**: Category-based symbol organization
681
+ - **Deduplication**: Automatic removal of duplicate search results
682
+
683
+ **File Format Details**:
684
+ - **Binary Format**: Custom binary index format optimized for fast lookups
685
+ - **Localization Support**: Language-specific indexes with culture-aware text processing
686
+ - **Compression**: May use internal compression for efficiency
687
+ - **Encoding**: Supports Unicode text with bidirectional text handling
688
+ • Byte frequency analysis indicates structured data with null padding, suggesting fixed-width or aligned records.
689
+
690
+ #### censored.txt
691
+
692
+ Despite the .txt extension, censored.txt does not contain plain text or word lists. It appears to be binary or encoded content, possibly representing internal lookup data or encrypted keywords.
693
+
694
+ ## Complete Style System Documentation
695
+
696
+ ### Built-in Style Keys
697
+
698
+ Grid 3 includes these predefined styles:
699
+
700
+ - **`Default`**: Base style for all cells
701
+ - **`Workspace`**: Message window/workspace area style
702
+ - **`Auto content`**: Dynamic content cells (predictions, word lists)
703
+ - **`Vocab cell`**: Vocabulary/word cells
704
+ - **`Keyboard key`**: On-screen keyboard buttons
705
+ - **Category Styles**: Auto-generated for command categories
706
+ - `Actions category style`
707
+ - `People category style`
708
+ - `Places category style`
709
+ - `Descriptive category style`
710
+ - `Social category style`
711
+ - `Questions category style`
712
+ - `Little words category style`
713
+
714
+ ### Theme System
715
+
716
+ Grid 3 supports four themes with distinct visual properties:
717
+
718
+ #### Modern Theme (Default)
719
+ - Border Width: 1px
720
+ - Corner Style: Normal (square)
721
+ - Drop Shadow: No
722
+ - Gradient Fill: Yes
723
+ - Font Family: "Roboto"
724
+ - Cell Spacing: 1.0x
725
+
726
+ #### Kids/Bubble Theme
727
+ - Border Width: 5px
728
+ - Corner Style: Rounded
729
+ - Drop Shadow: Yes
730
+ - Gradient Fill: Yes
731
+ - Font Family: "Short Stack"
732
+ - Cell Spacing: 2.0x (double spacing)
733
+ - White Border: Yes
734
+
735
+ #### Flat/Blocky Theme (Grid 2 Compatible)
736
+ - Border Width: 2px
737
+ - Corner Style: TheGrid2 (square with specific styling)
738
+ - Drop Shadow: No
739
+ - Gradient Fill: No
740
+ - Font Family: "Tahoma"
741
+ - Cell Spacing: 1.0x
742
+
743
+ #### Explorer Theme (Internal)
744
+ - Border Width: 2px
745
+ - Corner Style: Rounded
746
+ - Drop Shadow: Yes
747
+ - Gradient Fill: No
748
+ - Font Family: "Booster Next FY Light"
749
+ - Cell Spacing: 1.0x
750
+
751
+ ### Style Inheritance
752
+
753
+ Styles use a cascading system:
754
+ 1. Theme provides base properties
755
+ 2. Built-in style defines category defaults
756
+ 3. Cell-specific overrides apply on top
757
+
758
+ ```xml
759
+ <Style>
760
+ <BasedOnStyle>Actions category style</BasedOnStyle>
761
+ <BackColour>#FF0000FF</BackColour> <!-- Override just the background -->
762
+ </Style>
763
+ ```
764
+
765
+ ### Font System
766
+
767
+ - **ThemeFont**: Special value that resolves to the current theme's font
768
+ - Custom fonts can be specified directly
769
+ - Font sizes are in points (default: 16.0)
770
+
771
+ ## Complete Cell Content Types
772
+
773
+ ### ContentType Values
774
+
775
+ - **`Normal`** (0): Standard button cells with commands
776
+ - **`AutoContent`** (1): Dynamic content cells (predictions, word lists, auto-populated content)
777
+ - **`Workspace`** (-1): Message window/text display area for composing text
778
+ - **`LiveCell`** (2): Real-time updating cells that display dynamic information
779
+
780
+ ### ContentSubType Values
781
+
782
+ #### For AutoContent Cells
783
+
784
+ **Prediction Types:**
785
+ - **`Prediction`**: Standard word prediction cells
786
+ - **`Prediction.WordList`**: Word list-based predictions
787
+ - **`Prediction.Conjugations`**: Verb conjugation predictions
788
+
789
+ **Content Types:**
790
+ - **`WordList`**: Static or dynamic word lists
791
+ - **`MessageBanking`**: Message banking categories
792
+ - **`MessageBanking.Recordings`**: Message banking recordings
793
+ - **`Contacts`**: Contact information cells
794
+ - **`Photos`**: Photo gallery cells
795
+ - **`InternetFavourites`**: Web browser favorites
796
+ - **`SavedPhrases`**: User-saved phrases
797
+
798
+ #### For Workspace Cells (Message Bar)
799
+
800
+ **Note**: The "message bar" in Grid 3 refers to Workspace cells - these are text composition and editing areas where users build messages, documents, or other text content.
801
+
802
+ **Communication Workspaces:**
803
+ - **`Chat`**: Text chat/messaging workspace for composing messages to speak aloud
804
+ - **`SymbolChat`**: Symbol-based chat workspace with symbol support
805
+ - **`Email`**: Email composition workspace for creating email messages
806
+ - **`Sms`**: SMS message composition workspace for text messages
807
+ - **`Skype`**: Skype messaging workspace for Skype communications
808
+ - **`Phone`**: Phone number input workspace
809
+
810
+ **Productivity Workspaces:**
811
+ - **`WordProcessor`**: Document editing workspace for viewing and editing documents
812
+ - **`Calculator`**: Calculator workspace for mathematical operations
813
+ - **`WebBrowser`**: Web browser workspace for viewing web pages
814
+ - **`WebBrowser.AddressBar`**: Web address input workspace for URL entry
815
+ - **`Contacts`**: Contact editing workspace for managing contact information
816
+
817
+ ### Workspace Cell Behavior and Text Command Interaction
818
+
819
+ Workspace cells are the primary target for text manipulation commands. Here's how different commands interact with workspace types:
820
+
821
+ #### Text Input Commands
822
+ All workspace types support these core text commands:
823
+
824
+ **`Action.InsertText`**: Inserts rich text with symbols
825
+ - Supports grammar information (part of speech, verb state)
826
+ - Handles symbol integration automatically
827
+ - Triggers speak-as-you-type in appropriate workspaces
828
+ - Updates word prediction after insertion
829
+
830
+ **`Action.Letter`**: Inserts single characters
831
+ - Used for keyboard input
832
+ - Triggers grammar processing for language support
833
+ - Updates prediction context
834
+
835
+ **`Action.Clear`**: Clears workspace content
836
+ - Removes all text from the active workspace
837
+ - Resets grammar state and prediction context
838
+
839
+ **`Action.DeleteWord`** / **`Action.DeleteLetter`**: Text deletion
840
+ - Removes words or characters from workspace
841
+ - Updates prediction and grammar context accordingly
842
+
843
+ #### Speech Commands and Workspace Types
844
+
845
+ **`Action.Speak`**: Behavior varies by workspace type
846
+ - **Chat workspace**: Speaks content and stores in chat history
847
+ - **Email workspace**: Speaks composed email content
848
+ - **WordProcessor workspace**: Speaks document content
849
+ - **SMS workspace**: Speaks message content
850
+ - **Phone workspace**: May speak entered phone number
851
+
852
+ #### Workspace-Specific Behaviors
853
+
854
+ **Chat Workspace (`Chat`)**:
855
+ - Primary purpose: Compose messages for speaking aloud
856
+ - Stores spoken messages in chat history
857
+ - Supports speak-as-you-type functionality
858
+ - EditModeText: "Write messages here"
859
+
860
+ **Email Workspace (`Email`)**:
861
+ - Purpose: Compose email messages
862
+ - Integrates with email contacts for recipient selection
863
+ - Supports rich text formatting
864
+ - EditModeText: "Write email messages here"
865
+
866
+ **SMS Workspace (`Sms`)**:
867
+ - Purpose: Compose SMS text messages
868
+ - Character count considerations for SMS limits
869
+ - Plain text focused (limited rich text)
870
+ - EditModeText: "Write SMS messages here"
871
+
872
+ **WordProcessor Workspace (`WordProcessor`)**:
873
+ - Purpose: Edit documents selected in Documents LiveCell
874
+ - Full rich text editing capabilities
875
+ - Document persistence and management
876
+ - EditModeText: "Edit documents here"
877
+
878
+ **Phone Workspace (`Phone`)**:
879
+ - Purpose: Enter phone numbers for dialing
880
+ - Numeric input focused
881
+ - Integration with phone calling functionality
882
+ - May display formatted phone numbers
883
+
884
+ #### Workspace Activation States
885
+
886
+ Workspaces have different activation behaviors:
887
+
888
+ **`WritingAreaActivation.SpeakContents`**:
889
+ - Clicking workspace speaks its content
890
+ - Used when workspace is primarily for speech output
891
+
892
+ **`WritingAreaActivation.MoveCursor`**:
893
+ - Clicking workspace moves text cursor
894
+ - Used when workspace is primarily for text editing
895
+
896
+ #### Example Workspace Configurations
897
+
898
+ **Chat Workspace**:
899
+ ```xml
900
+ <Cell X="0" Y="0" ColumnSpan="6" RowSpan="2">
901
+ <Content>
902
+ <ContentType>Workspace</ContentType>
903
+ <ContentSubType>Chat</ContentSubType>
904
+ <Style>
905
+ <BasedOnStyle>Workspace</BasedOnStyle>
906
+ </Style>
907
+ </Content>
908
+ </Cell>
909
+ ```
910
+
911
+ **Email Workspace with Custom Styling**:
912
+ ```xml
913
+ <Cell X="0" Y="2" ColumnSpan="6" RowSpan="3">
914
+ <Content>
915
+ <ContentType>Workspace</ContentType>
916
+ <ContentSubType>Email</ContentSubType>
917
+ <Style>
918
+ <BasedOnStyle>Workspace</BasedOnStyle>
919
+ <BackColour>#FFFFFFFF</BackColour>
920
+ <FontSize>16</FontSize>
921
+ </Style>
922
+ </Content>
923
+ </Cell>
924
+ ```
925
+
926
+ #### For LiveCell Cells
927
+
928
+ **Information Displays:**
929
+ - **`Clock.FullDate`**: Full date display
930
+ - **`Clock.ShortDate`**: Short date display
931
+ - **`Clock.Time`**: Time display
932
+ - **`Clock.DayOfWeek`**: Day of week display
933
+ - **`Clock.Month`**: Month display
934
+ - **`Clock.Year`**: Year display
935
+
936
+ **Media and Communication:**
937
+ - **`Photos.Photos`**: Photo viewer
938
+ - **`Photos.Camera`**: Camera feed
939
+ - **`Sms.Messages`**: SMS message list
940
+ - **`Email.Messages`**: Email message list
941
+ - **`Contacts.Contacts`**: Contact list
942
+
943
+ **System Information:**
944
+ - **`ComputerControl.DeviceVolume`**: System volume display
945
+ - **`WordProcessor.Documents`**: Document list
946
+
947
+ ### LiveCell Types and Behaviors
948
+
949
+ LiveCells are classified into three types with distinct behaviors and interaction patterns:
950
+
951
+ #### Info Type LiveCells
952
+ **Purpose**: Display summary information with minimal user interaction
953
+ **Behavior**:
954
+ - Read-only display of dynamic information
955
+ - Updates automatically based on system state
956
+ - Limited or no direct user interaction
957
+ - Typically shows status, time, or system information
958
+
959
+ **Examples**:
960
+ - Clock displays (time, date, day of week)
961
+ - System volume indicators
962
+ - Timer displays
963
+ - Game counters (mines, bombs)
964
+
965
+ **Common ContentSubType Values**:
966
+ - `Clock.Time`, `Clock.FullDate`, `Clock.ShortDate`, `Clock.DayOfWeek`
967
+ - `ComputerControl.DeviceVolume`
968
+ - `Timer.AnalogueTimer`, `Timer.DigitalTimer`
969
+ - Game-specific counters
970
+
971
+ #### List Type LiveCells
972
+ **Purpose**: Display interactive lists of items that users can browse and select
973
+ **Behavior**:
974
+ - Shows scrollable lists of items
975
+ - Items can be selected/activated
976
+ - Content updates dynamically based on data sources
977
+ - Supports navigation and selection interactions
978
+ - Often has wide thumbnail display format
979
+
980
+ **Examples**:
981
+ - SMS message lists
982
+ - Email message lists
983
+ - Document lists
984
+ - Phone call history
985
+ - Contact lists
986
+
987
+ **Common ContentSubType Values**:
988
+ - `Sms.Messages` - SMS message list
989
+ - `Email.Messages` - Email message list
990
+ - `WordProcessor.Documents` - Document list
991
+ - `Phone.PhoneCall` - Phone call history
992
+ - `Contacts.Contacts` - Contact list
993
+
994
+ #### Viewer Type LiveCells
995
+ **Purpose**: Display and interact with media content or specialized viewers
996
+ **Behavior**:
997
+ - Shows media content (photos, videos, animations)
998
+ - Supports media-specific interactions (play, pause, zoom)
999
+ - May include camera feeds or live content
1000
+ - Often supports touch-only interaction
1001
+ - Typically has wide thumbnail display format
1002
+
1003
+ **Examples**:
1004
+ - Photo viewers and camera feeds
1005
+ - Animation players
1006
+ - Whiteboard viewers
1007
+ - Symoji animation displays
1008
+
1009
+ **Common ContentSubType Values**:
1010
+ - `Photos.Photos` - Photo viewer
1011
+ - `Photos.Camera` - Camera feed viewer
1012
+ - `InteractiveLearning.Animation` - Animation viewer
1013
+ - `OfflineWebBrowser.Whiteboard` - Whiteboard viewer
1014
+ - `Symoji.Symoji` - Symoji animation viewer
1015
+
1016
+ ### LiveCell Parameters
1017
+
1018
+ LiveCells can have additional parameters that control their behavior and appearance:
1019
+
1020
+ #### Common Parameters
1021
+ - **`format`**: Display format for time/date cells (e.g., "HH:mm:ss", "dd/MM/yyyy")
1022
+ - **`timezone`**: Timezone for clock displays ("Local", "UTC", specific timezone)
1023
+ - **`appearance`**: Visual appearance settings for eye gaze cells
1024
+ - **`eyetype`**: Left/Right eye specification for eye visibility cells
1025
+
1026
+ #### Parameter Examples
1027
+
1028
+ **Clock with Custom Format**:
1029
+ ```xml
1030
+ <Cell X="0" Y="0">
1031
+ <Content>
1032
+ <ContentType>LiveCell</ContentType>
1033
+ <ContentSubType>Clock.Time</ContentSubType>
1034
+ <Parameters>
1035
+ <Parameter Key="format">HH:mm:ss</Parameter>
1036
+ <Parameter Key="timezone">Local</Parameter>
1037
+ </Parameters>
1038
+ </Content>
1039
+ </Cell>
1040
+ ```
1041
+
1042
+ **Eye Gaze Visibility Cell**:
1043
+ ```xml
1044
+ <Cell X="1" Y="0">
1045
+ <Content>
1046
+ <ContentType>LiveCell</ContentType>
1047
+ <ContentSubType>Access.EyeVisibility</ContentSubType>
1048
+ <Parameters>
1049
+ <Parameter Key="eyetype">Left</Parameter>
1050
+ <Parameter Key="appearance">Standard</Parameter>
1051
+ </Parameters>
1052
+ </Content>
1053
+ </Cell>
1054
+ ```
1055
+
1056
+ ### LiveCell Properties
1057
+
1058
+ #### Caption Editability
1059
+ - **Info cells**: Usually have editable captions for user customization
1060
+ - **List cells**: Typically have non-editable captions (auto-generated)
1061
+ - **Viewer cells**: Usually have non-editable captions
1062
+
1063
+ #### Thumbnail Display
1064
+ - **List and Viewer cells**: Often use `HasWideThumbnail = true` for better display
1065
+ - **Info cells**: Typically use standard thumbnail size
1066
+
1067
+ #### Symbol Preview
1068
+ - Some LiveCells use `SymbolizeCommandPreview = true` to show static symbols instead of live content in command browsers
1069
+
1070
+ ### Cell Visibility States
1071
+
1072
+ ```xml
1073
+ <Visibility>Visible</Visibility> <!-- Default: fully accessible -->
1074
+ <Visibility>PointerAndTouchOnly</Visibility> <!-- Skip in scanning -->
1075
+ <Visibility>Disabled</Visibility> <!-- Not accessible -->
1076
+ <Visibility>Hidden</Visibility> <!-- Completely hidden -->
1077
+ <Visibility>Empty</Visibility> <!-- Empty cell (no content) -->
1078
+ ```
1079
+
1080
+ ### Specialized Cell Properties
1081
+
1082
+ #### DirectActivate
1083
+ Controls direct activation behavior for accessibility:
1084
+ ```xml
1085
+ <DirectActivate>0</DirectActivate> <!-- Standard activation -->
1086
+ <DirectActivate>1</DirectActivate> <!-- Direct activation enabled -->
1087
+ ```
1088
+
1089
+ #### ScanBlocks
1090
+ Cells can belong to multiple scan blocks for advanced scanning:
1091
+ ```xml
1092
+ <ScanBlocks>
1093
+ <ScanBlock>1</ScanBlock>
1094
+ <ScanBlock>3</ScanBlock>
1095
+ </ScanBlocks>
1096
+ ```
1097
+
1098
+ #### Cell Parameters
1099
+ Special cells can have additional parameters:
1100
+ ```xml
1101
+ <Cell>
1102
+ <Content>
1103
+ <ContentType>LiveCell</ContentType>
1104
+ <ContentSubType>Clock.Time</ContentSubType>
1105
+ <Parameters>
1106
+ <Parameter Key="format">HH:mm</Parameter>
1107
+ <Parameter Key="timezone">UTC</Parameter>
1108
+ </Parameters>
1109
+ </Content>
1110
+ </Cell>
1111
+ ```
1112
+
1113
+ ### ScanBlock System
1114
+
1115
+ - Maximum 8 scan blocks per grid (1-8)
1116
+ - Cells without ScanBlock attribute default to block 1
1117
+ - Used for switch scanning navigation
1118
+ - Cells can belong to multiple scan blocks
1119
+
1120
+ ```xml
1121
+ <Cell X="0" Y="0" ScanBlock="3">
1122
+ <!-- Single scan block -->
1123
+ </Cell>
1124
+
1125
+ <Cell X="1" Y="0">
1126
+ <ScanBlocks>
1127
+ <ScanBlock>1</ScanBlock>
1128
+ <ScanBlock>2</ScanBlock>
1129
+ </ScanBlocks>
1130
+ <!-- Multiple scan blocks -->
1131
+ </Cell>
1132
+ ```
1133
+
1134
+ ## Complete Command Reference
1135
+
1136
+ ### Navigation Commands
1137
+
1138
+ #### `Jump.To`
1139
+ Navigate to another grid
1140
+ ```xml
1141
+ <Command ID="Jump.To">
1142
+ <Parameter Key="grid">GridName</Parameter>
1143
+ </Command>
1144
+ ```
1145
+
1146
+ #### `Jump.Back`
1147
+ Return to previous grid
1148
+ ```xml
1149
+ <Command ID="Jump.Back" />
1150
+ ```
1151
+
1152
+ #### `Jump.Home`
1153
+ Navigate to start grid
1154
+ ```xml
1155
+ <Command ID="Jump.Home" />
1156
+ ```
1157
+
1158
+ ### Text Commands
1159
+
1160
+ #### `Action.InsertText`
1161
+ Insert text with optional symbols
1162
+ ```xml
1163
+ <Command ID="Action.InsertText">
1164
+ <Parameter Key="text">
1165
+ <SymbolRun Image="[WIDGIT]path/to/symbol.emf">
1166
+ <Run>Hello</Run>
1167
+ <Run> </Run>
1168
+ </SymbolRun>
1169
+ </Parameter>
1170
+ <Parameter Key="verbstate">Reset</Parameter>
1171
+ </Command>
1172
+ ```
1173
+
1174
+ #### `Action.Letter`
1175
+ Insert single character
1176
+ ```xml
1177
+ <Command ID="Action.Letter">
1178
+ <Parameter Key="letter">A</Parameter>
1179
+ </Command>
1180
+ ```
1181
+
1182
+ #### `Action.DeleteWord`
1183
+ Delete last word
1184
+ ```xml
1185
+ <Command ID="Action.DeleteWord" />
1186
+ ```
1187
+
1188
+ #### `Action.Clear`
1189
+ Clear message window
1190
+ ```xml
1191
+ <Command ID="Action.Clear" />
1192
+ ```
1193
+
1194
+ #### Speech Commands
1195
+
1196
+ ##### `Action.Speak`
1197
+ Speak text content from workspace
1198
+ - **Parameters:**
1199
+ - `unit` (SpeakUnit): What to speak - All, Paragraph, Sentence, Word, Selection
1200
+ - `movecaret` (boolean): Whether to move caret after speaking (default: false)
1201
+
1202
+ ```xml
1203
+ <Command ID="Action.Speak">
1204
+ <Parameter Key="unit">All</Parameter>
1205
+ <Parameter Key="movecaret">0</Parameter>
1206
+ </Command>
1207
+ ```
1208
+
1209
+ ##### `Speech.SpeakNow`
1210
+ Speak specific text immediately
1211
+ - **Parameters:**
1212
+ - `text` (string): Text to speak
1213
+
1214
+ ```xml
1215
+ <Command ID="Speech.SpeakNow">
1216
+ <Parameter Key="text">Hello World</Parameter>
1217
+ </Command>
1218
+ ```
1219
+
1220
+ ##### `Speech.Stop`
1221
+ Stop current speech
1222
+ - **Parameters:** None
1223
+
1224
+ ```xml
1225
+ <Command ID="Speech.Stop" />
1226
+ ```
1227
+
1228
+ ##### `Speech.SpeakClipboard`
1229
+ Speak clipboard content
1230
+ - **Parameters:** None
1231
+
1232
+ ```xml
1233
+ <Command ID="Speech.SpeakClipboard" />
1234
+ ```
1235
+
1236
+ #### Prediction Commands
1237
+
1238
+ ##### `Prediction.PredictThis`
1239
+ Trigger word prediction with word list
1240
+ - **Parameters:**
1241
+ - `wordlist` (WordList): Word list for predictions
1242
+ - `action` (WordListAction): Insert or ReplacePrevious
1243
+
1244
+ ```xml
1245
+ <Command ID="Prediction.PredictThis">
1246
+ <Parameter Key="wordlist">
1247
+ <WordList>
1248
+ <Items>
1249
+ <WordListItem>
1250
+ <Text><s><r>hello</r></s></Text>
1251
+ </WordListItem>
1252
+ </Items>
1253
+ </WordList>
1254
+ </Parameter>
1255
+ <Parameter Key="action">Insert</Parameter>
1256
+ </Command>
1257
+ ```
1258
+
1259
+ ##### `Prediction.PredictConjugations`
1260
+ Predict verb conjugations
1261
+ - **Parameters:** None
1262
+
1263
+ ```xml
1264
+ <Command ID="Prediction.PredictConjugations" />
1265
+ ```
1266
+
1267
+ ##### `Prediction.ChangeWordList`
1268
+ Change active word list
1269
+ - **Parameters:**
1270
+ - `wordlist` (WordList): New word list to activate
1271
+
1272
+ ```xml
1273
+ <Command ID="Prediction.ChangeWordList">
1274
+ <Parameter Key="wordlist">
1275
+ <WordList>
1276
+ <Items>
1277
+ <!-- WordListItem entries -->
1278
+ </Items>
1279
+ </WordList>
1280
+ </Parameter>
1281
+ </Command>
1282
+ ```
1283
+
1284
+ #### Computer Control Commands
1285
+
1286
+ ##### `ComputerControl.Keyboard`
1287
+ Send keyboard input
1288
+ - **Parameters:**
1289
+ - `keystring` (string): Key or key combination to send
1290
+
1291
+ ```xml
1292
+ <Command ID="ComputerControl.Keyboard">
1293
+ <Parameter Key="keystring">ctrl+c</Parameter>
1294
+ </Command>
1295
+ ```
1296
+
1297
+ ##### `ComputerControl.AdvancedKeyboard`
1298
+ Advanced keyboard control
1299
+ - **Parameters:**
1300
+ - `virtualkeycode` (int): Virtual key code
1301
+ - `extendedkey` (boolean): Whether it's an extended key
1302
+ - `keyaction` (AdvancedKeyAction): KeyPress, KeyDown, or KeyUp
1303
+
1304
+ ```xml
1305
+ <Command ID="ComputerControl.AdvancedKeyboard">
1306
+ <Parameter Key="virtualkeycode">65</Parameter>
1307
+ <Parameter Key="extendedkey">0</Parameter>
1308
+ <Parameter Key="keyaction">KeyPress</Parameter>
1309
+ </Command>
1310
+ ```
1311
+
1312
+ ##### `ComputerControl.MouseLeftClick`
1313
+ Perform left mouse click
1314
+ - **Parameters:**
1315
+ - `button` (MouseButton): Left, Right, or Middle
1316
+
1317
+ ```xml
1318
+ <Command ID="ComputerControl.MouseLeftClick">
1319
+ <Parameter Key="button">Left</Parameter>
1320
+ </Command>
1321
+ ```
1322
+
1323
+ #### Settings Commands
1324
+
1325
+ ##### `Settings.EditMode`
1326
+ Toggle edit mode
1327
+ - **Parameters:** None
1328
+
1329
+ ```xml
1330
+ <Command ID="Settings.EditMode" />
1331
+ ```
1332
+
1333
+ ##### `Settings.ChangeGridSet`
1334
+ Change to different gridset
1335
+ - **Parameters:**
1336
+ - `gridsetname` (string): Name of gridset to load
1337
+
1338
+ ```xml
1339
+ <Command ID="Settings.ChangeGridSet">
1340
+ <Parameter Key="gridsetname">MyGridSet</Parameter>
1341
+ </Command>
1342
+ ```
1343
+
1344
+ ##### `Settings.SetScreenBrightness`
1345
+ Set screen brightness
1346
+ - **Parameters:**
1347
+ - `option` (SetValueOptions): Cycle, Increase, Decrease, or SetToValue
1348
+ - `specificvalue` (int): Specific brightness value (0-100)
1349
+
1350
+ ```xml
1351
+ <Command ID="Settings.SetScreenBrightness">
1352
+ <Parameter Key="option">SetToValue</Parameter>
1353
+ <Parameter Key="specificvalue">75</Parameter>
1354
+ </Command>
1355
+ ```
1356
+
1357
+ #### Media Commands
1358
+
1359
+ ##### `MediaPlayer.OpenVideoFile`
1360
+ Open video file
1361
+ - **Parameters:**
1362
+ - `filedata` (FileData): Video file data
1363
+ - `wait` (CommandExecutionType): Execution behavior
1364
+ - `playimmediately` (boolean): Start playing immediately
1365
+
1366
+ ```xml
1367
+ <Command ID="MediaPlayer.OpenVideoFile">
1368
+ <Parameter Key="filedata">video.mp4</Parameter>
1369
+ <Parameter Key="playimmediately">1</Parameter>
1370
+ </Command>
1371
+ ```
1372
+
1373
+ ##### `Speech.PlaySound`
1374
+ Play sound file
1375
+ - **Parameters:**
1376
+ - `filedata` (FileData): Sound file data
1377
+ - `wait` (CommandExecutionType): Execution behavior
1378
+
1379
+ ```xml
1380
+ <Command ID="Speech.PlaySound">
1381
+ <Parameter Key="filedata">sound.wav</Parameter>
1382
+ </Command>
1383
+ ```
1384
+
1385
+ #### Grammar Commands
1386
+
1387
+ ##### `Grammar.VerbMorphology`
1388
+ Modify verb form
1389
+ - **Parameters:**
1390
+ - `verbpart` (VerbPart): Root, Past, Present, Future, etc.
1391
+ - `person` (string): First, Second, Third person
1392
+ - `number` (string): Singular, Plural
1393
+ - `autocaption` (boolean): Auto-generate cell caption
1394
+
1395
+ ```xml
1396
+ <Command ID="Grammar.VerbMorphology">
1397
+ <Parameter Key="verbpart">Past</Parameter>
1398
+ <Parameter Key="person">Third</Parameter>
1399
+ <Parameter Key="number">Singular</Parameter>
1400
+ </Command>
1401
+ ```
1402
+
1403
+ ##### `Grammar.NounMorphology`
1404
+ Modify noun form
1405
+ - **Parameters:**
1406
+ - `number` (string): Singular, Plural
1407
+ - `gender` (string): Masculine, Feminine, Neuter
1408
+
1409
+ ```xml
1410
+ <Command ID="Grammar.NounMorphology">
1411
+ <Parameter Key="number">Plural</Parameter>
1412
+ </Command>
1413
+ ```
1414
+
1415
+ #### Environment Control Commands
1416
+
1417
+ ##### `EnvironmentControl.ZWave`
1418
+ Control Z-Wave devices
1419
+ - **Parameters:**
1420
+ - `deviceid` (string): Z-Wave device identifier
1421
+ - `action` (string): Device action to perform
1422
+
1423
+ ```xml
1424
+ <Command ID="EnvironmentControl.ZWave">
1425
+ <Parameter Key="deviceid">device_01</Parameter>
1426
+ <Parameter Key="action">on</Parameter>
1427
+ </Command>
1428
+ ```
1429
+
1430
+ #### AI-Powered Commands
1431
+
1432
+ ##### `Prediction.CorrectionTool` (Fix Tool)
1433
+ AI-powered text correction using OpenAI integration
1434
+ - **Purpose**: Corrects spelling, adds punctuation and missing characters, adjusts grammar
1435
+ - **Requirements**: Online AI Tools must be enabled in Settings - Data control
1436
+ - **Limitations**: Maximum 5000 characters, requires internet connection
1437
+ - **Implementation**: Sends workspace text to OpenAI API for correction
1438
+ - **Parameters:** None (operates on current workspace content)
1439
+
1440
+ ```xml
1441
+ <Command ID="Prediction.CorrectionTool" />
1442
+ ```
1443
+
1444
+ **Usage Notes:**
1445
+ - Appears as a LiveCell with loading spinner during processing
1446
+ - Automatically disabled when workspace is empty or text is too long
1447
+ - Requires user opt-in for Online AI Tools functionality
1448
+ - Supports undo functionality to revert corrections
1449
+ - Integrates with workspace text selection and cursor positioning
1450
+
1451
+ **LiveCell Configuration:**
1452
+ ```xml
1453
+ <Cell X="0" Y="0">
1454
+ <Content>
1455
+ <ContentType>LiveCell</ContentType>
1456
+ <ContentSubType>Prediction.CorrectionTool</ContentSubType>
1457
+ <CaptionAndImage>
1458
+ <Caption>Fix</Caption>
1459
+ <Image>[GRID3X]fix-command.wmf</Image>
1460
+ </CaptionAndImage>
1461
+ <Style>
1462
+ <BasedOnStyle>Default</BasedOnStyle>
1463
+ </Style>
1464
+ </Content>
1465
+ </Cell>
1466
+ ```
1467
+
1468
+ #### System Commands
1469
+
1470
+ ##### `ComputerSession.LogOff`
1471
+ Log off from system
1472
+ - **Parameters:** None
1473
+
1474
+ ```xml
1475
+ <Command ID="ComputerSession.LogOff" />
1476
+ ```
1477
+
1478
+ ##### `ComputerSession.Shutdown`
1479
+ Shutdown system
1480
+ - **Parameters:** None
1481
+
1482
+ ```xml
1483
+ <Command ID="ComputerSession.Shutdown" />
1484
+ ```
1485
+
1486
+ ##### `Wait`
1487
+ Wait/pause execution
1488
+ - **Parameters:**
1489
+ - `time` (TimeSpan): Duration to wait
1490
+
1491
+ ```xml
1492
+ <Command ID="Wait">
1493
+ <Parameter Key="time">00:00:02</Parameter>
1494
+ </Command>
1495
+ ```
1496
+
1497
+ ## Command Categories and Complete Reference
1498
+
1499
+ ### Command Categories
1500
+
1501
+ Grid 3 organizes commands into the following categories:
1502
+
1503
+ - **Navigation**: Jump.To, Jump.Back, Jump.Home, Jump.ToKeyboard
1504
+ - **Workspace Actions**: Action.InsertText, Action.Clear, Action.DeleteWord, Action.Copy, Action.Paste
1505
+ - **Speech**: Action.Speak, Speech.SpeakNow, Speech.Stop, Speech.SpeakClipboard
1506
+ - **Prediction**: Prediction.PredictThis, Prediction.PredictConjugations, Prediction.ChangeWordList
1507
+ - **AI Tools**: Prediction.CorrectionTool (Fix tool for text correction)
1508
+ - **Computer Control**: ComputerControl.Keyboard, ComputerControl.MouseLeftClick, ComputerControl.MouseRightClick
1509
+ - **Settings**: Settings.EditMode, Settings.ChangeGridSet, Settings.SetScreenBrightness
1510
+ - **Media**: MediaPlayer.OpenVideoFile, MediaPlayer.OpenMusicFile, Speech.PlaySound
1511
+ - **Grammar**: Grammar.VerbMorphology, Grammar.NounMorphology
1512
+ - **Environment Control**: EnvironmentControl.ZWave, EnvironmentControl.RelayAccessory
1513
+ - **System**: ComputerSession.LogOff, ComputerSession.Shutdown, ComputerSession.Restart
1514
+
1515
+ ### Complete Command ID Reference
1516
+
1517
+ | Command ID | Category | Parameters | Description |
1518
+ |------------|----------|------------|-------------|
1519
+ | `Jump.To` | Navigation | grid | Navigate to specified grid |
1520
+ | `Jump.Back` | Navigation | None | Return to previous grid |
1521
+ | `Jump.Home` | Navigation | None | Navigate to home grid |
1522
+ | `Jump.ToKeyboard` | Navigation | None | Navigate to keyboard grid |
1523
+ | `Action.InsertText` | Workspace | text, pos, verbstate | Insert rich text with symbols |
1524
+ | `Action.Letter` | Workspace | letter | Insert single character |
1525
+ | `Action.DeleteWord` | Workspace | None | Delete last word |
1526
+ | `Action.DeleteLetter` | Workspace | None | Delete last character |
1527
+ | `Action.Clear` | Workspace | None | Clear workspace content |
1528
+ | `Action.Speak` | Speech | unit, movecaret | Speak workspace content |
1529
+ | `Speech.SpeakNow` | Speech | text | Speak specific text |
1530
+ | `Speech.Stop` | Speech | None | Stop current speech |
1531
+ | `Prediction.PredictThis` | Prediction | wordlist, action | Trigger word prediction |
1532
+ | `Prediction.PredictConjugations` | Prediction | None | Predict verb conjugations |
1533
+ | `Prediction.CorrectionTool` | AI Tools | None | AI-powered text correction (Fix tool) |
1534
+ | `ComputerControl.Keyboard` | Computer Control | keystring | Send keyboard input |
1535
+ | `ComputerControl.MouseLeftClick` | Computer Control | button | Perform mouse click |
1536
+ | `Settings.EditMode` | Settings | None | Toggle edit mode |
1537
+ | `MediaPlayer.OpenVideoFile` | Media | filedata, playimmediately | Open video file |
1538
+ | `Speech.PlaySound` | Media | filedata | Play sound file |
1539
+ | `Grammar.VerbMorphology` | Grammar | verbpart, person, number | Modify verb form |
1540
+ | `Wait` | System | time | Pause execution |
1541
+
1542
+ ## Technical Specifications
1543
+
1544
+ ### Grid Constraints
1545
+ - Maximum 8 scan blocks per grid
1546
+ - Cell coordinates are 0-based
1547
+ - ColumnSpan and RowSpan minimum value: 1
1548
+ - Grid dimensions defined by ColumnDefinitions/RowDefinitions count
1549
+ - Maximum grid size is not explicitly limited but practical limits apply
1550
+
1551
+ ### Color Format
1552
+ All colors use 8-digit ARGB hex format: `#AARRGGBBFF`
1553
+ - AA: Alpha (transparency) - 00 (transparent) to FF (opaque)
1554
+ - RR: Red component - 00 to FF
1555
+ - GG: Green component - 00 to FF
1556
+ - BB: Blue component - 00 to FF
1557
+ - FF: Usually FF for full opacity
1558
+
1559
+ ### File Format Version
1560
+ Current gridset format version tracked in `GridSetFileFormatVersion`
1561
+
1562
+ ### Symbol Library References and Resolution
1563
+
1564
+ **Format**: `[LIBRARY_NAME]path/to/symbol.extension`
1565
+
1566
+ **Reference Resolution Process** (from source code):
1567
+ 1. **Parse Reference**: `SymbolReference` class parses the library reference
1568
+ 2. **Library Identification**: Extract library name from brackets (e.g., `[WIDGIT]`)
1569
+ 3. **Path Resolution**: Resolve symbol path within the library archive
1570
+ 4. **Symbol Creation**: Create `LibrarySymbol` object with resolved reference
1571
+ 5. **Skin Tone Application**: Apply user's default skin tone if symbol supports it
1572
+
1573
+ **Common Symbol Libraries**:
1574
+ - **`[WIDGIT]`**: Widgit symbol library (licensed commercial content)
1575
+ - Example: `[WIDGIT]widgit rebus\h\hello.emf`
1576
+ - Requires valid license for full access
1577
+ - Extensive vocabulary with multiple languages
1578
+
1579
+ - **`[GRID3X]`**: Grid 3 built-in symbols
1580
+ - Example: `[GRID3X]settings.wmf`
1581
+ - Free symbols included with Grid 3
1582
+ - UI icons, basic vocabulary, system symbols
1583
+
1584
+ - **`[GRID2X]`**: Grid 2 compatibility symbols
1585
+ - Example: `[GRID2X]legacy_symbol.wmf`
1586
+ - Maintains compatibility with Grid 2 gridsets
1587
+ - Legacy symbol format support
1588
+
1589
+ - **`[SSTIX#]`**: Additional symbol library
1590
+ - Example: `[SSTIX#]symbol_path.emf`
1591
+ - Extended symbol collection
1592
+ - Specialized vocabulary sets
1593
+
1594
+ **Symbol Reference Processing**:
1595
+ ```csharp
1596
+ // Source code implementation
1597
+ var symbolReference = new SymbolReference(reference);
1598
+ if (symbolReference.IsLibraryReference)
1599
+ {
1600
+ var librarySymbol = new LibrarySymbol(reference);
1601
+ if (librarySymbol.SkinTone == SkinTone.SymbolDefault)
1602
+ librarySymbol.SkinTone = GridApp.User.Settings.SymbolSettings.SkinTone;
1603
+ return librarySymbol;
1604
+ }
1605
+ ```
1606
+
1607
+ **Library Key Conversion**:
1608
+ - **Library ID to Key**: `PictureLibraryHelper.ConvertLibraryIdToKey("[WIDGIT]")` → `"widgit"`
1609
+ - **Key to Library ID**: `PictureLibraryHelper.ConvertLibraryKeyToId("widgit")` → `"[WIDGIT]"`
1610
+ - **Case Handling**: Library keys are normalized to lowercase for file system access
1611
+
1612
+ **Symbol Search Integration**:
1613
+ - **Caption Lookup**: `.pix` files map symbol IDs to human-readable captions
1614
+ - **Category Organization**: `categories.pix` organizes symbols by topic
1615
+ - **Search Service**: `PictureSearchService` provides unified search across all libraries
1616
+ - **Predictive Integration**: Symbol search integrates with word prediction systems
1617
+
1618
+ **File Format Support**:
1619
+ - **WMF**: Windows Metafile format (vector graphics)
1620
+ - **EMF**: Enhanced Metafile format (enhanced vector graphics)
1621
+ - **PNG/JPG**: Raster image formats (for photos and complex images)
1622
+ - **SVG**: Scalable Vector Graphics (modern vector format)
1623
+
1624
+ ### Cell Spacing System
1625
+ Uses golden ratio-based spacing (φ = 1.618):
1626
+ - `None`: φ¹/100 = 0.0162
1627
+ - `Small`: φ²/100 = 0.0262
1628
+ - `Medium`: φ³/100 = 0.0424
1629
+ - `Large`: φ⁴/100 = 0.0686
1630
+ - `ExtraLarge`: φ⁵/100 = 0.1111
1631
+
1632
+ ### Cell Background Shapes
1633
+ Available background shapes for cells:
1634
+ - `Rectangle` (0): Standard rectangular shape
1635
+ - `RoundedRectangle` (1): Rectangle with rounded corners
1636
+ - `FoldedCorner` (2): Rectangle with folded corner effect
1637
+ - `Octagon` (3): Eight-sided shape
1638
+ - `Folder` (4): Folder-like appearance
1639
+ - `Ellipse` (5): Oval shape
1640
+ - `SpeechBubble` (6): Speech bubble shape
1641
+ - `ThoughtBubble` (7): Thought bubble shape
1642
+ - `Star` (8): Star shape
1643
+ - `Circle` (9): Perfect circle
1644
+
1645
+ ## Localization and Language Support
1646
+
1647
+ ### Language Settings
1648
+ Gridsets include language specification in `Settings0/settings.xml`:
1649
+ ```xml
1650
+ <GridSetSettings>
1651
+ <Language>en-US</Language>
1652
+ <!-- Other settings -->
1653
+ </GridSetSettings>
1654
+ ```
1655
+
1656
+ ### Symbol Library Localization
1657
+ - Symbol libraries may include RTL (right-to-left) variants
1658
+ - Located in `symbols_rtl/` directory within `.symbols` archives
1659
+ - Affects text direction and symbol orientation
1660
+
1661
+ ### Screen Selection Methods
1662
+ Multiple access methods supported:
1663
+ - `ClickHighlightedCell`: Activate on release
1664
+ - `ClickFirstCellTouched`: Activate on touch
1665
+ - `Dwell`: Time-based activation
1666
+ - `Hold`: Hold button down
1667
+ - `Switch`: Switch press
1668
+ - `Blink`: Eye blink detection
1669
+ - `DesktopZoom`: Desktop zoom navigation
1670
+ - `MoveMouse`: Mouse movement control
1671
+
1672
+ ## Complete Examples
1673
+
1674
+ ### Example 1: Basic Text Button
1675
+ ```xml
1676
+ <Cell X="0" Y="0" ScanBlock="1">
1677
+ <Visibility>Visible</Visibility>
1678
+ <DirectActivate>0</DirectActivate>
1679
+ <Content>
1680
+ <ContentType>Normal</ContentType>
1681
+ <CaptionAndImage>
1682
+ <Caption>Hello</Caption>
1683
+ <Image>[WIDGIT]widgit rebus\h\hello.emf</Image>
1684
+ </CaptionAndImage>
1685
+ <Style>
1686
+ <BasedOnStyle>Vocab cell</BasedOnStyle>
1687
+ </Style>
1688
+ <Commands>
1689
+ <Command ID="Action.InsertText">
1690
+ <Parameter Key="text">
1691
+ <SymbolRun Image="[WIDGIT]widgit rebus\h\hello.emf">
1692
+ <Run>Hello</Run>
1693
+ <Run> </Run>
1694
+ </SymbolRun>
1695
+ </Parameter>
1696
+ </Command>
1697
+ </Commands>
1698
+ </Content>
1699
+ </Cell>
1700
+ ```
1701
+
1702
+ ### Example 2: Prediction AutoContent Cell
1703
+ ```xml
1704
+ <Cell X="1" Y="0" ScanBlock="2">
1705
+ <Content>
1706
+ <ContentType>AutoContent</ContentType>
1707
+ <ContentSubType>Prediction</ContentSubType>
1708
+ <Style>
1709
+ <BasedOnStyle>Auto content</BasedOnStyle>
1710
+ </Style>
1711
+ </Content>
1712
+ </Cell>
1713
+ ```
1714
+
1715
+ ### Example 3: Workspace Cell
1716
+ ```xml
1717
+ <Cell X="0" Y="0" ColumnSpan="6" RowSpan="1">
1718
+ <Content>
1719
+ <ContentType>Workspace</ContentType>
1720
+ <ContentSubType>Chat</ContentSubType>
1721
+ <Style>
1722
+ <BasedOnStyle>Workspace</BasedOnStyle>
1723
+ </Style>
1724
+ </Content>
1725
+ </Cell>
1726
+ ```
1727
+
1728
+ ### Example 4: LiveCell with Parameters
1729
+ ```xml
1730
+ <Cell X="2" Y="0">
1731
+ <Content>
1732
+ <ContentType>LiveCell</ContentType>
1733
+ <ContentSubType>Clock.Time</ContentSubType>
1734
+ <Parameters>
1735
+ <Parameter Key="format">HH:mm:ss</Parameter>
1736
+ <Parameter Key="timezone">Local</Parameter>
1737
+ </Parameters>
1738
+ <Style>
1739
+ <BasedOnStyle>Default</BasedOnStyle>
1740
+ </Style>
1741
+ </Content>
1742
+ </Cell>
1743
+ ```
1744
+
1745
+ ### Example 5: Navigation Button with Custom Style
1746
+ ```xml
1747
+ <Cell X="5" Y="6" ScanBlock="8">
1748
+ <Content>
1749
+ <ContentType>Normal</ContentType>
1750
+ <CaptionAndImage>
1751
+ <Caption>Settings</Caption>
1752
+ <Image>[GRID3X]settings.wmf</Image>
1753
+ </CaptionAndImage>
1754
+ <Style>
1755
+ <BasedOnStyle>Actions category style</BasedOnStyle>
1756
+ <BackColour>#FF4444FF</BackColour>
1757
+ <FontSize>24</FontSize>
1758
+ </Style>
1759
+ <Commands>
1760
+ <Command ID="Jump.To">
1761
+ <Parameter Key="grid">Settings</Parameter>
1762
+ </Command>
1763
+ </Commands>
1764
+ </Content>
1765
+ </Cell>
1766
+ ```
1767
+
1768
+ ## Best Practices
1769
+
1770
+ ### Cell Design
1771
+ 1. **Use appropriate ContentType**: Choose Normal for standard buttons, AutoContent for dynamic content, Workspace for text areas, and LiveCell for real-time information
1772
+ 2. **Organize with ScanBlocks**: Group related cells in the same scan block for better navigation
1773
+ 3. **Apply consistent styling**: Use BasedOnStyle for consistency and override specific properties only when needed
1774
+ 4. **Provide meaningful captions**: Ensure all cells have descriptive captions for accessibility
1775
+
1776
+ ### Command Usage
1777
+ 1. **Parameter validation**: Always provide required parameters with correct types
1778
+ 2. **Rich text formatting**: Use SymbolRun elements for text with symbols in Action.InsertText commands
1779
+ 3. **Grammar support**: Include part-of-speech and verb state information for language processing
1780
+ 4. **Error handling**: Commands with invalid parameters will be ignored or use default values
1781
+
1782
+ ### Performance Considerations
1783
+ 1. **Limit AutoContent cells**: Too many AutoContent cells can impact performance
1784
+ 2. **Optimize images**: Use appropriate image formats and sizes for symbols
1785
+ 3. **Minimize complex commands**: Avoid overly complex command chains that might slow execution
1786
+ 4. **Cache considerations**: LiveCells update frequently, so design grids accordingly
1787
+
1788
+ This comprehensive documentation covers all major aspects of Grid 3 file format, providing developers and advanced users with the information needed to create, modify, and understand Grid 3 gridsets effectively.