Обмен данных внутри терминала

Введение.

Обмен данными осуществляется двумя способами: через операцию копировать/вставить и через операцию Drag & Drop. Передаваемые данные могут быть простого и сложного формата. Данные простого формата это просто текст в поле ввода (или что-то в этом роде). Данные сложного формата это набор простых данных. Пример простых данных: содержимое поля ввода Пример сложных данных: строка (строки) таблицы, группа элементов, в общем, все остальное. Обмен простыми данными здесь не рассматривается, т.к. это тривиально. Данные для обмена представляют собой обычный XML-запрос. Приемник данных получает этот запрос и обрабатывает его с помощью XSLT. В качестве приемника может выступать любой элемент способный обрабатывать данные (edit, listbox, table, group, window и т.д.). Чтобы элемент стал способен принимать данные он должен иметь следующее свойство: exchange="interface=action, interface=action, ..." это свойство представляет собой разделенный запятыми список пар. Пара это id интерфейса и имя XSLT-преобразования разделенные знаком равенства. Пара определяет от каких интерфейсов элемент может принимать данные и каким XSLT их преобразовывать. Вот и все.

XSLT-преобразование

Когда данные переносятся из источника они сохраняются как XML в котором корневым тегом будет <сopy>, что является одним уровнем с элементом <data>. XSLT-преобразование должно возвращать документ с корневым тегом <data>.

Операция копировать/вставить

Чтобы скопировать в буфер запрос необходимо у активного элемента (button, menuitem) указать свойство click="copy". Чтобы вставить из буфера необходимо у активного элемента (button, menuitem) указать свойство click="id.drop ()" где id - id элемента в который вставляются данные. У элемента-приемника должно быть свойство exchange описанное выше

Примеры

1) Допустим копируется строка таблицы в группу элементов edit в другом интерфейсе. Интерфейс источник: <interafce id="soure" ver="111111"> <table id="tab">     <column id="c0"/>     <column id="c1"/>     <column id="c2"/>     <column id="c3"/> </table> <button id="button"/> <properties> <idref name="button" text="Копировать" click="copy"/> </properties> </interafce> Интерфейс приемник: <group id="gr"> <edit id="a"/> <edit id="b"/> <edit id="c"/> <edit id="d"/> <button id="button"/> </group> <properties> <idref name="gr" exchange="source=paste"/> <idref name="a" source="a"/> <idref name="b" source="b"/> <idref name="c" source="c"/> <idref name="d" source="d"/> <idref name="button" text="Вставить" click="gr.drop ()"/> </properties> <action name="paste"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="row"> <data> <a><xsl:value-of select="col[@index = 0]"/></a> <b><xsl:value-of select="col[@index = 1]"/></b> <c><xsl:value-of select="col[@index = 2]"/></c> <d><xsl:value-of select="col[@index = 3]"/></d> </data> </xsl:template> </xsl:stylesheet> </action> Теперь можно перетащить мышкой строку таблицы в интерфейс-приемник и бросить в элемент gr. Или нажать кнопку "Копировать" в интерфейсе-источнике, потом нажать кнопку "Вставить" в интерфейсе-приемнике. Данные из источника сохраняются так: <copy>     <row index="3">         <col index="0">AAA<col/>         <col index="1">BBB<col/>         <col index="2">CCC<col/>         <col index="3">DDD<col/>     </row> </copy> Преобразуются XSLT-преобразованием в: <data>     <a>AAA</a>     <b>BBB</b>     <c>CCC</c>     <d>DDD</d> </data>
Назад