Copyright (c) Prolog Development Center SPb

Application Frame. RibbonAsXml

Xml-представление ribbon является представлением комбинации  деклараций доменов
     pfc\gui\controls\ribbonControl\ribbonControl.i
     pfc\gui\commands\command\command.i
     pfc\gui\commands\menuCommand\menuCommand.i
     pfc\gui\commands\customCommand\customCommand.i

с некоторыми добавлениями

Layout

Vip-declaration XML-presentation
domains
    layout = section*.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ribbon-layout version="23.08.2019">
        <basedir id=DirLogicName>DirPath</basedir>
        ...
        <basedir id=DirLogicName>DirPath</basedir>
        <dictionary file=FileName namespace=NS_Name />
        <section ... >
        </section>
        ...
          <section ... >
          </section>
    </ribbon-layout>

Здесь корневой узел ribbon-layout содержит аттрибут version="23.08.2019", определяющий версию xml структуры.
Узел basedir (относится только к содержимого файла описания панели):
Узел dictionary (относится только к содержимого файла описания панели):

Section

Vip-declaration XML-presentation
domains

   section
 = section(
      string
 Id,
      string
 Label,
      toolTip
::tipText TipText,
      optional{::icon Icon},
      block* Blocks
      ).
<section id=SectionID label=SectionLabel>
            <icon ...  />
            <tooltip... />
            <block>
                ...
            </block>
                ...
            <block>
                ...
            </block>
        </section>
  • id defins section ID 
  • label - corresponds to the  Label  declaration
  • subnode icon see below
  • subnode tooltip see below

Block

Vip-declaration XML-presentation
domains
   
block =
      block(row* Rows);
      separator.
   <block>
        <row>
        </row>
        <separator/>
        <row>
        </row>
    </block>


Row

Vip-declaration XML-presentation
domains
   row = item*.
   item =
      cmd(string CommandId, cmdStyle Style);
      separator.

domains
    menuItem =
        cmd(command Command);
        separator.
    menuLayout =
        menuStatic(menuItem* MenuItem);
        menuRender(function{menuItem*} MenuItemRenderingFunction).
      <row>
          <--! any sequence of -->
          <cmd ...> ...</cmd>
          <menu ...> ...</menu>
          <custom ...> ...</custom>
          <separator/>
      </row>

Cmd

Vip-declaration XML-presentation
properties % see command interface
    id : string (o).
    ribbonLabel : string.
    menuLabel : string.
    tipTitle : toolTip::tipText.
    acceleratorKey : vpiDomains::acceleratorKey.
    icon : optional{icon}.
    badge : positive.
    category : string*.
    enabled : boolean.
    visible : boolean.
    run : predicate{command}.
    stateChangeEvent : event1{command}.
        <cmd
                 id=CommandID_string
                 label=RibbonLabel_string
                 menuLabel = MenuLabel_string
                 badge=BadgeValue_positive_as_string
                 category=CategoryList_comma-separated-strings
                 enabled=EnabledTrueOrFalse_boolean_as_string
                 visible=VisibleTrueOrFalse_boolean_as_string
                 run=RunPerformerName_string
                 changeEvent=ChangeEventTrueOrFalse_boolean_as_string
                 cmdstyle=CmdStyle
                 >
            <icon ...  />
            <tooltip ... />
            <acceleratorkey ... />
        </cmd>
  • subnode icon see below
  • subnode tooltip see below
  • subnode acceleratorkey see below
  • CmdStyle - one of values
    • "image-only"
    • "text-only"
    • "image-and-text-vertical"
    • "image-and-text-horizontal"

Menu (static)

Vip-declaration XML-presentation
domains
    menuLayout =
        menuStatic(menuItem* MenuItem);
        menuRender(function{menuItem*} RenderingFunction).
    menuItem =
        cmd(command Command);
        separator.

domains
    menuStyle = popupMenu; variantMenu; toolMenu.

properties % from command interface
    id : string (o).
    ribbonLabel : string.
    tipTitle : toolTip::tipText.
    acceleratorKey : vpiDomains::acceleratorKey.
    icon : optional{icon}.
    enabled : boolean.


        <menu
                 id=MenuID_string
                 label=RibbonLabel_string
                 layout="static"
                 enabled=EnabledTrueOrFalse_boolean_as_string
                 cmdstyle=CmdStyle
            style=MenuStyle_string
                  >
            <icon ...  />
            <tooltip ... />
            <acceleratorkey ... />
            any sequence of 
            <separator/>
            <cmd ...> ...</cmd>
        </menu>
  • subnode icon see below
  • subnode tooltip see below
  • subnode acceleratorkey see below
  • subnode cmd see above
  • MenuStyle - one of values
    • "popupmenu"
    • "variantmenu"
    • "toolmenu"
  • CmdStyle - one of values
    • "image-only"
    • "text-only"
    • "image-and-text-vertical"
    • "image-and-text-horizontal"

Menu (render)

Vip-declaration XML-presentation
% See menuCommand.i
domains
    menuLayout =
       menuStatic(menuItem* MenuItem);
        menuRender(function{menuItem*} RenderingFunction).

domains
    menuStyle = popupMenu; variantMenu; toolMenu.

properties % from command interface
    id : string (o).
    ribbonLabel : string.
    tipTitle : toolTip::tipText.
    acceleratorKey : vpiDomains::acceleratorKey.
    icon : optional{icon}.
    enabled : boolean.


        <menu
                 id=MenuID_string
                 label=RibbonLabel_string
                 layout="render"
           function=RenderFunctionName_string
                 enabled=EnabledTrueOrFalse_boolean_as_string
                 cmdstyle=CmdStyle
            style=MenuStyle_string
                  >
            <icon ...  />
            <tooltip ... />
            <acceleratorkey ... />
        </menu>
  • subnode icon see below
  • subnode tooltip see below
  • subnode acceleratorkey see below
  • MenuStyle - one of values
    • "popupmenu"
    • "variantmenu"
    • "toolmenu"
  • CmdStyle - one of values
    • "image-only"
    • "text-only"
    • "image-and-text-vertical"
    • "image-and-text-horizontal"

Custom

Vip-declaration XML-presentation
properties % see command interface
    id : string (o).
    ribbonLabel : string.
    menuLabel : string.
    tipTitle : toolTip::tipText.
    acceleratorKey : vpiDomains::acceleratorKey.
    category : string*.
    enabled : boolean.
    visible : boolean.

properties % see customComand interface
    width : integer.
    height : integer.
    factory : function{control}.

        <custom
                 id=CommandID_string
                 label=RibbonLabel_string
                 menuLabel = MenuLabel_string
                 category=CategoryList_comma-separated-strings
                 enabled=EnabledTrueOrFalse_boolean_as_string
                 visible=VisibleTrueOrFalse_boolean_as_string
                 width=ControlWidth_positive_as_string
                 height=ControlHeight_positive_as_string
                 factory=ControlFactoryName_string
                 control-type=ControlType_user_defined_string_name
                  >
            <tooltip ... />
            <acceleratorkey ... />
        </custom>
  • subnode tooltip see below
  • subnode acceleratorkey see below
  • ControlFactoryName together with ControlType defines the unique control object to be created

Icon

Vip-declaration XML-presentation
domains
   icon : optional{icon}.

        <icon
                <--! one of -->
                file=FileName_string
                binary=BinaryIcon_string
                function-id=FunctionName_string
                icon-id=IconName_string     
                >
        </icon>
FunctionName together with IconName defines the unique icon binary to be requested

Tooltip

Vip-declaration XML-presentation
properties % see Command interface
    tipTitle : toolTip::tipText.

domains
    tipText =
        noTip;
        tip(string ToolTipText);
        tipRender(function{string} Render).
        <tooltip
                <--! one of -->
                text=TipText_string
                render=FunctionName_string
                >
        </tooltip>

Acceleratorkey

Vip-declaration XML-presentation
domains % see VpiDomains
    acceleratorKey =
        noAccelerator;
        key(keyCode KeyCode, keyModifier ShiftControlAlt)

domains
    keyCode = integer.

domains
    keyModifier = [0..7].
constants
    c_nothing : keyModifier = 0.
    c_shift : keyModifier = 1.
    c_control : keyModifier = 2.
    c_alt : keyModifier = 4.
    c_shiftCtl : keyModifier = c_shift++c_control.
    c_shiftAlt : keyModifier = c_shift++c_alt.
    c_ctlAlt : keyModifier = c_control++c_alt.
    c_shiftCtlAlt : keyModifier = c_shift++c_control++c_alt.
    
        <acceleratorkey
                keycode=KeyCode_positive_as_string
                keymodifier=KeyModifier_string
                >
        </acceleratorkey>

KeyModifier must be one of:
  • "nothing".
  • "shift".
  • "control".
  • "alt".
  • "shiftctl".
  • "shiftalt".
  • "ctlalt".
  • "shiftctlalt".