User Tools

Site Tools


tools:dialog_creator_documentation

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tools:dialog_creator_documentation [2026/07/23 12:27] – created rocktools:dialog_creator_documentation [2026/07/23 15:55] (current) rock
Line 1: Line 1:
-<code -> +====== Arma 3 Dialog Creator User Guide ======
-Arma 3 Dialog Creator User Guide+
  
-## What This Tool Creates+===== What This Tool Creates =====
  
 Arma 3 Dialog Creator builds config-ready HPP for two related UI surfaces: Arma 3 Dialog Creator builds config-ready HPP for two related UI surfaces:
  
-Dialog UI: interactive displays with buttons, edit boxes, listboxes, dropdowns, map controls, panels, and apply/cancel workflows. +  * **Dialog UI:** interactive displays with buttons, edit boxes, listboxes, dropdowns, map controls, panels, and apply/cancel workflows. 
-HUD / Turret Optics: overlay-style resources for reticles, range ladders, sensor/weapon status, lock cues, compass tapes, and RscTitles-style HUD output.+  * **HUD / Turret Optics:** overlay-style resources for reticles, range ladders, sensor/weapon status, lock cues, compass tapes, and ''RscTitles''-style HUD output.
  
-The tool edits a browser project and exports textIt does not pack a PBO, validate base classes from your addon, or test the UI in Arma. Always test the exported display in game.+The tool creates the static display structureYour addon still owns the runtime behavior: SQF population, validation, multiplayer authority, object selection, and gameplay changes.
  
-## Quick Start+===== The Core Idea =====
  
-1. Open `http://192.168.1.20/dialog_creator/`. +An Arma UI normally has two layers of work:
-2. Choose `Dialog UI` or `HUD / Turret Optics`. +
-3. Set the display class, IDD, namespace key, IDC start, surface, and canvas ratio in the left panel. +
-4. Add controls from the left palette or choose a guided wizard from `Workflow`. +
-5. Drag controls on the canvas to move them. Drag the bottom-right handle to resize. +
-6. Use the right inspector for exact class names, IDC values, positions, sizes, colors, actions, and tooltips. +
-7. Use mouse wheel to zoom the canvas and drag empty canvas space to pan. +
-8. Open `Export`, then copy or download the generated HPP. +
-9. Include the HPP from your addon config and wire the generated lifecycle/action stubs into SQF.+
  
-## Project Setup Fields+  * **HPP/config:** declares the display class and its controls. 
 +  * **SQF:** fills controls with live data, reacts to clicks, validates input, and applies changes.
  
-- Class: top-level display or resource class name. +This tool helps with the first layer and gives notes for the secondIt cannot prove that your addon include pathinherited base classestexture pathsor SQF functions existThat still needs addon-side validation and in-game testing.
-- IDD: display ID. Keep this stable and avoid collisions with other addon displays. +
-- Namespace key: `uiNamespace` variable used by generated `onLoad` and `onUnload` hooks. +
-- IDC start: first positive IDC assigned to interactive controls. +
-- Surface: use `Dialog / RscDisplay` for interactive screens and `RscTitles overlay` for HUD-style overlays. +
-- Canvas ratio: preview aspect ratio. Check common ratios such as 16:916:1021:9and narrow windowed layouts. +
-Safezone output: exports safezone-based expressions instead of raw normalized coordinates. +
-- Export defines: writes `#define` constants for IDD and positive IDC values. +
-Snap to grid and Grid step: control move/resize increments.+
  
-## Canvas Controls+===== Quick Start With Reasons =====
  
-Addclick a control type in the left palette+  Open [[http://dialogcreator.rkslstudios.info/]]. 
-Select: click a control or its layer entry+    * **Why:** the tool is file-backed and runs in the browser. There is no database or install step
-- Movedrag the selected control+  Choose ''Dialog UI'' or ''HUD / Turret Optics''
-- Resizedrag the bottom-right handle+    * **Dialog UI** means the player interacts with controlsbuttons, lists, edit boxes, maps, checkboxes. 
-Duplicatecopies the selected control and offsets it slightly+    * **HUD / Turret Optics** means the UI is mostly an overlay: reticle, range ladder, headings, lock state, sensor state
-Deleteremoves the selected control. +    * **Why:** the chosen mode changes the defaults, wizards, and export assumptions
-- Reorder: use layer up/down in the layer list+  Fill in the left setup panel before building. 
-- Lockprevents mouse move/resize but keeps the control selectable+    * **Why:** class names, IDD, IDC ranges, and namespace keys are the contract between config and SQF. Changing them late can break scripts that already reference them
-Hide: lowers visibility in the editor preview but keeps the control in the project and export+  Add controls with the palette or guided wizards. 
-- Zoommouse wheel or the `-` / `+` buttons+    * **Palette:** use when you know the exact ''Rsc*'' control you want
-Pandrag empty canvas space+    * **Workflow wizards:** use when you want a complete pattern with related controls and notes. 
-Reset viewpress `100`.+  - Place controls visually, then refine in the inspector
 +    * **Why:** dragging is fast for rough layout, but exact X/Y/W/H values are better for repeatable addon work
 +  Export HPP and include it from your addon config
 +    * **Why:** Arma reads displays from config. The exported HPP is not active until included by a real addon or mission config
 +  Implement or connect the generated SQF function names. 
 +    * **Why:** button ''action'' strings and lifecycle hooks call functions. If those functions are missing, the display may open but behavior will fail
 +  Test in game and read the RPT. 
 +    * **Why:** browser preview can catch layout mistakes, but only Arma can confirm inherited classes, safezone behavior, texture loading, control events, and script errors.
  
-## Inspector Fields+===== Setup Fields: What They Mean =====
  
-Class: generated config class. Use stable names once SQF refers to them. +==== Class ====
-- Base class: inherited Arma UI class such as `RscText`, `RscPicture`, or `RscButton`. +
-- IDC: positive ID for controls read by SQF; use `-1` for static controls. +
-- Text / texture: visible text for text/buttons or texture path for pictures. +
-- X, Y, W, H: normalized canvas position and size. +
-- Style: numeric Arma style flags. +
-- sizeEx: text size. +
-- Font: Arma font class. +
-- colorText[] and colorBackground[]: Arma color arrays. +
-- Tooltip: in-game tooltip text. +
-- Action: button action string. +
-- Background control: sends the control to `controlsBackground`.+
  
-String fields commit when you leave the box or press Enter. Numeric fields update live.+The top-level display or resource class name in the generated HPP.
  
-## Image Preview+**Why it matters:** this is how the display is opened or referenced from config. Keep it stable and unique, usually with your addon tag or prefix.
  
-`RscPicture` controls can preview local `PNG`, `JPG/JPEG`, or `TGA` files.+==== IDD ====
  
-1. Select an `RscPicture` control. +The display ID.
-2. Set `Text / texture` to the Arma texture path that should be exported. +
-3. Use `Choose preview` to pick a local image file. +
-4. The preview appears in the inspector and canvas.+
  
-The preview file is not uploaded, not written to HPP, and not saved into project JSONIt is only a browser-side visual aid.+**Why it matters:** Arma uses IDD values to identify displaysCollisions with other displays can make scripts target the wrong display or fail unpredictably.
  
-## Tutorial: Background Image+==== Namespace key ====
  
-1. Choose `Dialog UI`. +The ''uiNamespace'' variable used by generated ''onLoad'' and ''onUnload''.
-2. Open `Workflow` and select `Create Background Image`. +
-3. Enter a class name such as `Dialog_Background`. +
-4. Enter the Arma texture path, for example `\myAddon\ui\dialog_background_ca.paa`. +
-5. Set X/Y/W/H to cover the desired area. +
-6. Create the control. +
-7. Select the new picture and use `Choose preview` if you have a PNG, JPG, or TGA reference. +
-8. Keep `Background control` enabled and `IDC = -1` unless SQF must access it.+
  
-## TutorialButton With Action+**Why it matters:** ''uiNamespace'' lets SQF find the live display after it opens. ''onUnload'' must clear the reference so scripts do not hold stale display handles.
  
-1. Open `Workflow` and choose `Create Button`. +==== IDC start ====
-2. Give it a short visible label such as `Apply`. +
-3. Use a short action string such as `['apply', _this] call TAG_fnc_dialogAction`. +
-4. Create the button and position it on the canvas. +
-5. In your addon, implement the function called by the action string. +
-6. Validate MP-sensitive behavior outside the UI before changing gameplay state.+
  
-## Tutorial: Animated Button+The first positive control ID used for interactive controls.
  
-1. Open `Workflow` and choose `Create Animated Button`. +**Why it matters:** SQF finds controls with ''displayCtrl IDC_NAME''Static controls should normally use ''idc = -1''; controls that SQF reads or modifies need positive unique IDC values.
-2. Set the visible text, action, and location. +
-3. The wizard creates hover fade/commit event handlers. +
-4. Keep the animation lightweight because it runs on the local client UI. +
-5. Test in game because UI fade behavior can vary with parent display and control base class.+
  
-## Tutorial: Dropdown With Options+==== Surface ====
  
-1. Open `Workflow` and choose `Create Dropdown`+  * ''Dialog / RscDisplay'': for interactive UI opened as a dialog/display
-2. Enter options one per line. +  * ''RscTitles overlay'': for persistent HUD-style overlay resources.
-3. Use `Label=stableData` when the visible label is not the value your SQF should use. +
-4. Export the HPP. +
-5. Use the generated lifecycle notes to populate options during `onLoad`. +
-6. Read selected data with list/combo APIs rather than relying only on visible text.+
  
-## TutorialApply Reset / Cancel Dialog+**Why it matters:** overlays use different lifecycle expectations from interactive dialogs. A turret optic/status display normally belongs closer to ''RscTitles'' behavior.
  
-1. Use `Create Panel Layout` for the backing panel. +==== Canvas ratio ====
-2. Add the required fields: edit boxes, dropdowns, listboxes, checkboxes, or map controls. +
-3. Use `Create Apply / Reset / Cancel Row`. +
-4. Keep each button action short and route it into a registered function. +
-5. In SQF, read all fields, validate them, then apply changes. +
-6. Reset should restore the UI state without mutating gameplay state unexpectedly. +
-7. Cancel should close the display or discard pending local state.+
  
-## Tutorial: Map Selector+The browser preview aspect ratio.
  
-1. Open `Workflow` and choose `Create Map Selector`. +**Why it matters:** Arma users may run 16:916:1021:9, or windowed layouts. A panel that looks correct at one ratio can overlap or drift at another.
-2. Position the map region and the coordinate/output controls. +
-3. Export the HPP. +
-4. In SQFuse the generated map-click guidance and convert clicks with `ctrlMapScreenToWorld`. +
-5. Validate selected positions before using them for spawningtargeting, teleporting, or mission logic.+
  
-## Tutorial: HUD / Turret Optics Overlay+==== Safezone output ====
  
-1. Choose `HUD / Turret Optics`. +Exports positions as safezone-relative expressions.
-2. Use workflow wizards for reticle, range ladder, compass/azimuth tape, status block, and vision/lock cues. +
-3. Keep most backgrounds transparent. +
-4. Use consistent colors and sizes so the overlay is readable over day/night/thermal imagery. +
-5. Export as an overlay resource and test in the target turret/vehicle camera.+
  
-## Export And Addon Integration+**Why it matters:** safezone output adapts to UI scaling and aspect ratio better than raw screen constants. It still needs in-game testing.
  
-1. Copy or download the generated HPP. +==== Export defines ====
-2. Include it from your addon `config.cpp` or an included UI HPP. +
-3. Confirm all inherited base classes exist where the HPP is included. +
-4. Keep `controlsBackground` for static panels, labels, frames, and pictures. +
-5. Keep interactive controls in `controls`. +
-6. Register lifecycle/action functions through `CfgFunctions`. +
-7. Test the display in game and review the RPT for config or script errors.+
  
-## Pre-Pack Checklist+Generates ''#define'' constants for the display ID and positive IDC values.
  
-- Display class is included from the intended config root. +**Why it matters:** named constants are safer than scattered numeric literals. They make SQF and config easier to audit. 
-IDD does not collide with another display. + 
-Positive IDC values are unique within the display. +==== Snap to grid and Grid step ==== 
-Static controls use `idc = -1unless SQF reads them. + 
-- `onLoadpublishes the display to `uiNamespace`+Controls placement increments when moving, resizing, and keyboard nudging. 
-- `onUnloadclears the display reference. + 
-Button/event strings call registered functions. +**Why it matters:** consistent grid values produce cleaner HPP and reduce near-miss alignment issues. 
-Lists, combos, and trees store stable row data. + 
-Texture paths exist in the packed addon. +===== Canvas: How To Use It ===== 
-Layout is checked at 16:9, 16:10, 21:9, and narrow windowed ratios. + 
-MP-sensitive actions validate locality and authority outside the UI layer. +  * **Add:** click a control type in the left palette. 
-</code>+  * **Select:** click a control or its layer entry. 
 +  * **Move:** drag the control. 
 +  * **Resize:** drag the bottom-right handle. 
 +  * **Duplicate:** copies the selected control and offsets it slightly. 
 +  * **Delete:** removes the selected control. 
 +  * **Reorder:** use layer up/down in the layer list. 
 +  * **Lock:** prevents accidental mouse movement/resizing. 
 +  * **Hide:** visually dims the control in the editor but keeps it in the project/export. 
 +  * **Zoom:** use mouse wheel or the ''-'' / ''+'' controls. 
 +  * **Pan:** drag empty canvas space. 
 +  * **Reset view:** click ''100''
 + 
 +**Why zoom/pan does not affect export:** the tool transforms only the browser preview. The actual control coordinates remain normalized 0..1 layout values. 
 + 
 +===== Inspector Fields: What They Mean ===== 
 + 
 +  * **Class:** the generated control class name. Use stable, readable names. 
 +  * **Base class:** the inherited Arma control class, such as ''RscText'', ''RscPicture'', ''RscButton'', ''RscListbox''
 +  * **IDC:** positive value for controls accessed by SQF; ''-1'' for static controls. 
 +  * **Text / texture:** visible text for text/buttons or texture path for ''RscPicture''
 +  * **X/Y/W/H:** normalized left/top/width/height values. 
 +  * **Style:** numeric Arma style flags. Use only when you know the base class expects them. 
 +  * **sizeEx:** text size. Browser preview is approximate; test in game. 
 +  * **Font:** Arma font class. 
 +  * **colorText[]:** text color or picture tint. 
 +  * **colorBackground[]:** background color array. 
 +  * **Tooltip:** in-game tooltip shown on hover. 
 +  * **Action:** button action string. 
 +  * **Background control:** places the control in ''controlsBackground''
 +  * **Visible:** hides/dims the control in the editor preview. 
 +  * **Locked:** prevents mouse move/resize. 
 + 
 +String fields commit when you leave the box or press Enter. This avoids redrawing picture/background controls on every keypress while editing long paths. 
 + 
 +===== Image Preview ===== 
 + 
 +''RscPicture'' controls can preview local ''PNG'', ''JPG/JPEG'', or ''TGA'' files. 
 + 
 +  - Select an ''RscPicture''
 +  - Set ''Text / texture'' to the Arma texture path that will be exported. 
 +  - Use ''Choose preview'' to pick a local PNG, JPG, or TGA. 
 +  - Use the preview to align and size the image. 
 + 
 +**Why preview is separate from texture path:** Arma commonly uses ''.paa'', but browsers do not display ''.paa''. A local PNG/JPG/TGA preview lets you design visually while still exporting the real Arma texture path. 
 + 
 +The preview file is not uploaded, not written to HPP, and not saved into project JSON. 
 + 
 +====== Tutorial ====== 
 + 
 +===== Background Image ===== 
 + 
 +**Goal:** create a non-interactive picture or panel behind the rest of the dialog. 
 + 
 +  - Choose ''Dialog UI''
 +    * **Why:** a dialog background normally belongs to an interactive display, not a HUD overlay. 
 +  - Open ''Workflow'' and choose ''Create Background Image''
 +    * **What this creates:** an ''RscPicture'' control with ''background = true''
 +  - Enter a class name such as ''Dialog_Background''
 +    * **Why:** class names should explain purpose. This helps when reading exported HPP later. 
 +  - Enter the Arma texture path, for example ''\myAddon\ui\dialog_background_ca.paa''
 +    * **What this means:** this becomes ''text = "\myAddon\ui\dialog_background_ca.paa";'' in the HPP. 
 +    * **Common mistake:** using a Windows path like ''C:\...''. Arma needs an addon-relative path. 
 +  - Set X/Y/W/H. 
 +    * **Why:** these values define where the picture sits in normalized display space. 
 +    * **Tip:** use a broad backing image first, then add smaller frames or labels above it. 
 +  - Create the control. 
 +    * **What happens:** it appears on the canvas and is exported in ''controlsBackground''
 +  - Optional: choose a local PNG/JPG/TGA preview. 
 +    * **Why:** preview helps align the image without requiring the browser to read ''.paa''
 +  - Keep ''idc = -1'' unless SQF needs to access the picture. 
 +    * **Why:** static art does not need a positive IDC. Saving positive IDCs for live controls keeps SQF lookup clean. 
 + 
 +===== Button With Action ===== 
 + 
 +**Goal:** add a button that calls SQF when clicked. 
 + 
 +  - Choose ''Create Button''
 +    * **What this creates:** an ''RscButton'' with text, tooltip, position, and action string. 
 +  - Give it a short visible label such as ''Apply''
 +    * **Why:** buttons should use short verbs. Longer explanations belong in tooltips or nearby text. 
 +  - Set a tooltip. 
 +    * **Why:** tooltips explain the consequence without making the button large. 
 +  - Use a short action string such as ''['apply', _this] call TAG_fnc_dialogAction''
 +    * **What this means:** the UI passes a command key and Arma event arguments to a function. 
 +    * **Why:** short event strings are easier to debug than large inline SQF blocks. 
 +  - Give the button a positive IDC. 
 +    * **Why:** interactive controls may need lookup, enable/disable state, or runtime updates. 
 +  - Implement the called function in your addon. 
 +    * **Common mistake:** exporting a button that calls ''TAG_fnc_dialogAction'' before that function exists in ''CfgFunctions''
 +  - Validate before changing gameplay state. 
 +    * **Why:** dialog code runs locally. Multiplayer-sensitive actions need locality/authority checks outside the UI. 
 + 
 +===== Animated Button ===== 
 + 
 +**Goal:** make a button visibly react to hover. 
 + 
 +  - Choose ''Create Animated Button''
 +    * **What this creates:** a button with mouse-enter/mouse-exit event strings using fade/commit behavior. 
 +  - Set the visible text and action. 
 +    * **Why:** hover animation should not replace the actual click behavior. 
 +  - Keep the animation subtle. 
 +    * **Why:** UI animation runs locally and can become distracting or expensive if overused. 
 +  - Test the result in Arma. 
 +    * **Why:** inherited control classes, parent display behavior, and UI scale can change how fade/commit appears. 
 + 
 +===== Dropdown With Options ===== 
 + 
 +**Goal:** let the user choose one value from a controlled list. 
 + 
 +  - Choose ''Create Dropdown''
 +    * **What this creates:** an ''RscCombo'' plus generated notes for row population. 
 +  - Enter options one per line. 
 +    * **Simple format:** ''Display Text'' 
 +    * **Stable data format:** ''Display Text=internalValue'' 
 +  - Use stable data when possible. 
 +    * **Why:** visible labels are for the user and may be renamed or translated. SQF should read stable data keys. 
 +  - Give the combo a positive IDC. 
 +    * **Why:** the lifecycle function needs to find it with ''displayCtrl''
 +  - Populate rows on ''onLoad''
 +    * **Why:** lists and combos are normally filled by SQF when the display opens, especially if options depend on mission state. 
 +  - Read selected data on Apply. 
 +    * **Why:** reading only the visible text can break if labels change. 
 + 
 +===== Apply / Reset / Cancel Dialog ===== 
 + 
 +**Goal:** build a predictable dialog where the user can edit values safely before committing them. 
 + 
 +  - Create a panel layout. 
 +    * **Why:** a stable frame/header/body/footer makes the dialog easier to scan and extend. 
 +  - Add input controls. 
 +    * **Examples:** edit fields for text/numbers, combos for controlled choices, checkboxes for binary settings, listboxes for larger selections. 
 +  - Add Apply / Reset / Cancel buttons. 
 +    * **Apply** means validate and commit. 
 +    * **Reset** means restore UI values. 
 +    * **Cancel** means close or discard pending local state. 
 +  - Route all buttons into a function. 
 +    * **Example:** ''['apply', _this] call TAG_fnc_dialogAction''
 +    * **Why:** one dispatcher function can handle all dialog commands consistently. 
 +  - In SQF, read values by IDC. 
 +    * **Why:** IDC lookup is stable and does not depend on visual layer order. 
 +  - Validate before applying. 
 +    * **Examples:** numeric range checks, class existence checks, object locality, selected row data, map position validity. 
 +  - Apply changes only after validation succeeds. 
 +    * **Why:** users should not partially mutate gameplay state by simply typing into fields. 
 + 
 +===== Map Selector ===== 
 + 
 +**Goal:** let the user choose a world position from a map control. 
 + 
 +  - Choose ''Create Map Selector''
 +    * **What this creates:** a map control plus supporting controls for the selected output. 
 +  - Position the map area. 
 +    * **Why:** map controls usually need more space than text controls. Avoid squeezing them into small panels. 
 +  - Use a click event to capture screen position. 
 +    * **What this means:** SQF receives the map click event and converts it to world coordinates. 
 +  - Convert with ''ctrlMapScreenToWorld''
 +    * **Why:** the mouse click is screen/control space; gameplay systems usually need world position. 
 +  - Validate the selected position. 
 +    * **Why:** spawning, teleporting, targeting, and artillery-style actions can break gameplay if the point is invalid or unauthorized. 
 + 
 +===== HUD / Turret Optics Overlay ===== 
 + 
 +**Goal:** create a readable overlay for a gunner, camera, sensor, or turret view. 
 + 
 +  - Choose ''HUD / Turret Optics''
 +    * **Why:** this mode assumes overlay behavior and ''RscTitles''-style output rather than an interactive dialog. 
 +  - Add a reticle first. 
 +    * **Why:** the reticle anchors the viewer's attention and sets the center reference. 
 +  - Add range ladder, heading/compass tape, weapon status, sensor mode, and lock cues. 
 +    * **Why:** these are supporting cues around the reticle. They should not obscure the target. 
 +  - Use transparent backgrounds by default. 
 +    * **Why:** optics must be readable over terrain, sky, smoke, thermal imagery, and night vision. 
 +  - Use backing plates only where readability needs them. 
 +    * **Why:** too many opaque panels reduce situational awareness. 
 +  - Test in the target vehicle/turret camera. 
 +    * **Why:** browser preview cannot reproduce FOV, camera shake, optics post-processing, thermal contrast, or game UI scaling. 
 + 
 +==== Export And Addon Integration ==== 
 + 
 +  - Copy or download the generated HPP. 
 +  - Include it from your addon ''config.cpp'' or UI include file. 
 +  - Confirm all inherited base classes exist where the HPP is included. 
 +  - Register lifecycle and action functions in ''CfgFunctions''
 +  - Keep static panels, frames, labels, and pictures in ''controlsBackground''
 +  - Keep interactive controls in ''controls''
 +  - Check IDD and IDC collisions. 
 +  - Pack the addon. 
 +  - Open the display in game. 
 +  - Review the RPT for config and script errors. 
 + 
 +==== Common Problems ==== 
 + 
 +  * **The display opens but buttons do nothing:** the action function probably is not registered or the event string points at the wrong tag/function. 
 +  * **A control cannot be found by SQF:** it may have ''idc = -1'', a duplicate IDC, or a define mismatch. 
 +  * **A picture does not show in game:** the texture path may be wrong, the file may not be packed, or the image may need conversion to PAA. 
 +  * **Layout looks wrong in game:** safezone/UI scale/aspect ratio differs from the browser preview. 
 +  * **Dropdown labels work but behavior is wrong:** SQF may be reading visible text instead of stable row data. 
 +  * **Multiplayer action works locally but not for other players:** the button runs on the local client and needs a validated remote/server path. 
 + 
 +==== Pre-Pack Checklist ==== 
 + 
 +  * Display class is included from the intended config root. 
 +  IDD does not collide with another display. 
 +  Positive IDC values are unique within the display. 
 +  Static controls use ''idc = -1'' unless SQF reads them. 
 +  * ''onLoad'' publishes the display to ''uiNamespace''
 +  * ''onUnload'' clears the display reference. 
 +  Button/event strings call registered functions. 
 +  Lists, combos, and trees store stable row data. 
 +  Texture paths exist in the packed addon. 
 +  Layout is checked at 16:9, 16:10, 21:9, and narrow windowed ratios. 
 +  MP-sensitive actions validate locality and authority outside the UI layer.
  
  
tools/dialog_creator_documentation.1784809646.txt.gz · Last modified: by rock