X

Exemplo de customização com Xslt no CorelDraw Nº 2

Duplicando os controles de tamanho do objeto na barra propriedades do objeto com XSLT.

Publicado: Modificado:

Bonus630

Este é um exemplo bem simples onde vamos ver que é possivel duplicar controles do coreldraw com XSLT no sistema de Addons, o resultado final será.

Vamos duplicar os controles de tamanho do objeto deixando nosso segundo controle setado em uma unidade fixa por exemplo polegadas.

Crie um addon vazio com nossa estrutura básica, agora procure o item do controle de tamanho e copie e cole no seu arquivo "AppUI.xslt", vou utilizar o "DrawUI Explorer" para encontra-lo, você pode utilizar o botão "Try highligth this" para mostrar o item e certificar que é o correto. Vamos olhar na barra propriedades para encontra-lo. Use o menu de contexto no nó "itemData" e clique em xml, vá nas abas abaixo mais especificamente na aba "Xml Viewer" e copie o contéudo.

Vamos alterar o valor dos atributos "bottomDisplayUnit" e "topDisplayUnit" para um valor numerico correspondente a uma unidade, vou utilizar 2, este valor me mostrara em polegadas.Para encontrar os valores utilize o "DrawUi Explorer" siga os passos.

Altere a unidade de medida do seu documento no CorelDraw para a unidade desejada, volte a janela do "Drawui Explorer" e selecione nosso "itemData"

Nos campos "Attributes" procure nosso atributo "bottomDisplayUnit" clique com o direito nele e selecione o comando "Run Bind" o valor da unidade será mostrada na aba "Console".

Precisamos agora gera um novo guid para este nosso item, lembrando que se deixarmos o guid como esta nosso novo controle não será adicionado pois vamos fazer a checagem se ele já existe no corelDraw, pois se não fizermos este passo, sempre que o Corel for aberto criará mais e mais controles.

O arquivo "AppUI.xslt" ficará assim.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:frmwrk="Corel Framework Data">
  <xsl:output method="xml" encoding="UTF-8" indent="yes"/>

  <!-- Use these elements for the framework to move the container from the app config file to the user config file -->
  <!-- Since these elements use the frmwrk name space, they will not be executed when the XSLT is applied to the user config file -->
  <frmwrk:uiconfig>
    <!-- The Application Info should always be the topmost frmwrk element -->
    <frmwrk:applicationInfo userConfiguration="true" />
  </frmwrk:uiconfig>

  <!-- Copy everything -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="uiConfig/items">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>

		<itemData guid='dfb8705f-fc06-42f8-b6b4-e38b4d5d11d1' 
				  type='stackedSpinCtrl' 
				  bottomDisplayUnit='2' 
				  bottomEnable='*And(*Bind(DataSource=AppDS;Path=DocumentAvailable), *Bind(DataSource=WPickDataSource;Path=SizeYItemEnable))' 
				  bottomIncrementSpeed='*Bind(DataSource=WAppDataSource;Path=FastIncreaseSpeed)' 
				  bottomNumDecimalPlaces='*Bind(DataSource=WPrefsApp;Path=DrawingPrecision)' 
				  bottomRangeMax='*Bind(DataSource=WPickDataSource;Path=SizeYMax)' 
				  bottomRangeMin='*Bind(DataSource=WPickDataSource;Path=SizeYMin)' 
				  bottomResolution='*Bind(DataSource=DocumentPrefsDS;Path=VPixelResolution)' 
				  bottomScale='*Bind(DataSource=DocumentPrefsDS;Path=WorldScale)' 
				  bottomShowUnit='true' bottomValue='*Bind(DataSource=WPickDataSource;Path=SizeY;BindType=TwoWay)' 
				  newForVersion='16' showSpinner='false' 
				  topDisplayUnit='2' 
				  topEnable='*And(*Bind(DataSource=AppDS;Path=DocumentAvailable), *Bind(DataSource=WPickDataSource;Path=SizeXItemEnable))' 
				  topIncrementSpeed='*Bind(DataSource=WAppDataSource;Path=FastIncreaseSpeed)' 
				  topNumDecimalPlaces='*Bind(DataSource=WPrefsApp;Path=DrawingPrecision)' 
				  topRangeMax='*Bind(DataSource=WPickDataSource;Path=SizeXMax)' 
				  topRangeMin='*Bind(DataSource=WPickDataSource;Path=SizeXMin)' 
				  topResolution='*Bind(DataSource=DocumentPrefsDS;Path=HPixelResolution)' 
				  topScale='*Bind(DataSource=DocumentPrefsDS;Path=WorldScale)' 
				  topShowUnit='true' topValue='*Bind(DataSource=WPickDataSource;Path=SizeX;BindType=TwoWay)' 
				  onEnter='*Bind(DataSource=WPickDataSource;Path=OnCommit)' 
				  onLostFocus='*Bind(DataSource=WPickDataSource;Path=OnCommit)'>
		</itemData>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="uiConfig/commandBars">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
 
        <container>
           <item dock="fill" margin="0,0,0,0" guidRef="dfb8705f-fc06-42f8-b6b4-e38b4d5d11d1"/>
        </container>
     
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

 

Agora vamos editar nosso arquivo "UserUI.xslt", o primeiro passo é alterar o valor no nó "<frmwrk:uiconfig>" com o valor de nosso container de nível mais alto no caso é a barra de propriedades, utilizaremos o guid dela para isto, e para encontra-lo é bem simples basta clicar no nó da arvore "commandBarData" em que nosso "itemData" se encontra.

<frmwrk:compositeNode xPath="/uiConfig/commandBars/commandBarData[@guid='74e03d83-404c-49f5-824a-fe0fd02ab29a']"/>

Usaremos o namespace "frmwrk" novamente, este sempre será necessário.

Agora vamos adicionar nosso "Helper" o mesmo que utilizamos anteriormente e então vamos copiar nosso controle após o controle original ou antes ou em qualquer outro lugar que você desejar, fica ao seu criterio, no meu caso vou copiar depois.

O arquivo "UserUI.xslt" ficará assim.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?xml version="1.0"?>

<xsl:stylesheet version="1.0"
								xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
								xmlns:frmwrk="Corel Framework Data"
								exclude-result-prefixes="frmwrk">
	<xsl:output method="xml" encoding="UTF-8" indent="yes"/>

	<!-- Use these elements for the framework to move the container from the app config file to the user config file -->
	<!-- Since these elements use the frmwrk name space, they will not be executed when the XSLT is applied to the user config file -->
	<frmwrk:uiconfig>
		<!-- The Application Info should always be the topmost frmwrk element -->
		<frmwrk:compositeNode xPath="/uiConfig/commandBars/commandBarData[@guid='74e03d83-404c-49f5-824a-fe0fd02ab29a']"/>
		<frmwrk:compositeNode xPath="/uiConfig/frame"/>
	</frmwrk:uiconfig>

	<!-- Copy everything -->
	<xsl:template match="node()|@*">
		<xsl:copy>
			<xsl:apply-templates select="node()|@*"/>
		</xsl:copy>
	</xsl:template>
	<!-- Helper to insert a new item into a menu/toolbar -->
	<xsl:template match="node()|@*" mode="insert-item">
		<xsl:param name="after"></xsl:param>
		<xsl:param name="before"></xsl:param>
		<xsl:param name="content"></xsl:param>
		<xsl:copy>
			<xsl:apply-templates select="@*"/>
			<xsl:for-each select="node()">
				<xsl:if test="name()='item' and @guidRef=$before">
					<xsl:copy-of select="$content"/>
				</xsl:if>
				<xsl:copy>
					<xsl:apply-templates select="node()|@*"/>
				</xsl:copy>
				<xsl:if test="name()='item' and @guidRef=$after">
					<xsl:copy-of select="$content"/>
				</xsl:if>
			</xsl:for-each>
			<xsl:if test="not(./item[@guidRef=$after]) and not(./item[@guidRef=$before])">
				<xsl:copy-of select="$content"/>
			</xsl:if>
		</xsl:copy>
	</xsl:template>
	<!-- Add the spinner in Property Bar Mode '1fa965b7-64d1-4219-8d91-5904006b7cb5' ellipse tool property bar mode-->
	<xsl:template match="commandBarData[@guid='74e03d83-404c-49f5-824a-fe0fd02ab29a']/toolbar/modeData">
		<xsl:apply-templates  mode="insert-item" select=".">
			<xsl:with-param name="content">
				<!-- Make sure we don't read the menu item it it already exists -->
				<xsl:if test="not(./item[@guidRef='dfb8705f-fc06-42f8-b6b4-e38b4d5d11d1'])">
					<item guidRef="dfb8705f-fc06-42f8-b6b4-e38b4d5d11d1"/>
				</xsl:if>
			</xsl:with-param>
			<!-- Place ours spinner after the original spinner -->
			<xsl:with-param name="after" select = "'325d7c86-da3a-4610-bd25-5cf98cf66a41'"/>

		</xsl:apply-templates>
	</xsl:template>





</xsl:stylesheet>

 




Faça doações com o botão do PayPal


Todos direitos reservados | 2003 à 2025 | Copyright © Bonus630 | Vr.:5.0