Accesso rapido:  

Forum: VirtualDJ Plugins

Topic: Plugin interface Type VDJINTERFACE_SKIN and new additions in skin engine
NicotuxHome userMember since 2014
After some tests playing with "Basic Plugin using SDK v8 (with custom Skin Interface)" it looks like
<textzone visibility="get_deck 'master' ? true : false">...
is working but
<textzone condition="get_deck 'master' ? true : false">....
is not
 

Inviato Thu 02 Apr 20 @ 7:36 pm
NicotuxHome userMember since 2014
Maybe someone would be interested in testing unconventional thing:
Skin addon plugin:

The plugin by itself does not do anything by itself but implements a big resizeable skin page as effect gui

The test extention is a big pad page with selector, 64 buttons and 16 sliders, 2 parameters and menu
(everything pad can do in one page)

for now hardcoded, but if interesting enough, it may ends with adding selectable skin
 

Inviato Sat 04 Apr 20 @ 1:44 pm
locoDogPRO InfinityModeratorMember since 2013
like the idea, send me a link.
also I've you my new thing in your pm box.
 

Inviato Sat 04 Apr 20 @ 2:25 pm
locoDogPRO InfinityModeratorMember since 2013
cool concept, does it have to be fixed in size [just a bit too big for 13something * 768] *edit* oh never mind I didn't test right

could it save the size and position?
 

Inviato Sun 05 Apr 20 @ 10:08 am
"condition" get's evaluated only once on skin load. So it doesn't change dynamically.
On the other hand "visibility" for elements and "visible" for panels gets evaluated constantly. Both "visibility" and "visible" allow for dynamic updates.
"condition" requires skin to be reloaded to reflect any changes.

"condition" puts much less stress on program than "visibility"/"visible" and it was added to help release some resources when coding very complex skins.

The author of the skin should determine which elements need to change dynamically, and which not. And then use the appropriate code.
For instance, changing "layouts" on skins is safe to be coded with condition and reloading the skin right after the user changes the layout.
On the other hand elements like master deck that change frequently should not be coded with condition, but with visibility

I hope this info helps
 

Inviato Sun 05 Apr 20 @ 11:57 am
NicotuxHome userMember since 2014
1) Big Size is just because i copied/pasted the external window from a skin
a resize zone bottom right allow to resize the window - working but mouse does not report (no cursor change)

2) No, as for any other plugin VDJ automates the position of any kind of GUI
the other hand, size is in skin header... if drawing is fully dynamic sure it could be done by altering XML header itself
(radius is not computable, so it would be another challenge)

now, it's just a proof of concept
skins can use extra windows.... how does it work with GUI skins ?? have to test
I tested video, they are working fine (some kind of preview with visibility cursors on it :)
if small enough it can dock^^

https://ibb.co/MSPTxVV

@PhantomDeejay yes condition needs skin to reload and are evaluated as soon as they appear
But it seems here the problem is more specific related to plugin load time (not intend to be use like this i think) where things are not always already OK (the same code working with skin and video skin). The GUI skin may be "loaded" out of VDJ environment

With defines conditions are also evaluated at declaration time (can be use as define parameter but not for elements declared in the define itself) this is understandable
i would like radius to be computable

 

Inviato Sun 05 Apr 20 @ 12:18 pm
NicotuxHome userMember since 2014
Ok can select and use external skins (no way to use image and no automatic refresh)
Tested with video/karaoke skins, crashes with normal skins
Skin used saved in ini file

Left : Plugin with Broadcast skin & Right : master output using Broadcast skin
https://ibb.co/wJBPxCc

Left : Plugin with Broadcast skin & Right : master output using Live skin
https://ibb.co/0jd7MtX
 

Inviato Mon 06 Apr 20 @ 1:04 am
NicotuxHome userMember since 2014
"quote=locodog]cool concept, does it have to be fixed in size [just a bit too big for 13something * 768] *edit* oh never mind I didn't test right

could it save the size and position?[/quote"

1) New version have its small (900x421) dedicated initial page and adds resize to any skin and background if needed

2) Badly No, skin engine does not save or report the moved/resized informations for plugin skins

Can now be used as "per deck" effect and with any name give it


custom bundeled placeholderscan be used if needed
[VDJPLUGIN] will take DLLName
[PLUGINDECK] will take the number (or name) of initial deck the plugin was loaded on
usefull to grand access to strings or button from within custom skin addon
i.e .: action="deck [PLUGINDECK] effect_button [VDJPLUGIN] 1"
Note : this one is equivalent to action="close" because all "close" actions are replaced with that to prevent VDJ to exit when only plugin have to close

Can also do indirect actions on string 2 and indirect queries on string 3 (one indirection level more builder have)
 

Inviato Mon 20 Apr 20 @ 1:37 am
NicotuxHome userMember since 2014
It seems nobody cares about this kind of plugins

But it allows that:

Denon Prime 4 Deluxe + DenonPrime4 as a plugin ...

https://imgur.com/a/lEIXRVs
 

Inviato Sun 03 May 20 @ 12:07 pm
Very interesting. I haven't bought the software yet because while it's very customizable I haven't figured out a way to visually represent and edit my secondary pad board via normal skin editing because pads don't have slots like effects do. Were you able to execute the large pad board experiment that you mentioned initially? I'd be curious to know.

I have a ddj-xp2 to go with my ddj-1000 and would like to visually see references to what I've got set on the xp2 but with the current pad implementation and independent pad mode it doesn't appear possible.
 

Inviato Mon 18 May 20 @ 10:34 am
NicotuxHome userMember since 2014
the "large pad board" as well as the one with pressure sliders are old now and i put them as a demo to this plugin
https://imgur.com/a/x2LNIPR
plugin uploaded waiting for revue (but chance never be accepted, it allows to do many unwanted things)
 

Inviato Mon 18 May 20 @ 7:36 pm
NicotuxHome userMember since 2014
just made an update
It now opens using effect button and auto reopens correctly new selected addon
have a pad added to simplify use and dedicated folder for its addons
NO it won't read zip skins because it's not its goal to use existing skins
It is to add extra additional feature in a window whatever the skin you use or for skin development tests

If someone is interested in ask for

 

Inviato Tue 23 Mar 21 @ 9:49 am
djachiPRO InfinityMember since 2005
you have a PM
 

Inviato Sat 03 Apr 21 @ 4:14 pm
NicotuxHome userMember since 2014
If it was send to me it was not a good idea :
Pro account can send messages to anyone
Home User account... do not have a mailbox ;)
trying anyway gives :
"Sorry, you don't have the necessary accreditations to view this page."
Nothing can be private with Home User Account
 

Inviato Sat 03 Apr 21 @ 4:51 pm
NicotuxHome userMember since 2014
Finally added correctly the "for loop" nested feature:
and added integer result of math evaluator using eval@@...@
in addition to existing float evaluator using eval@...@
(needed to compare with "integer only" verbs, since now VDJScript needs cast in most case)

drawing matrix of buttons was initially a mess i.e.: 40 lines for 30 buttons, 8 additional lines every 6 buttons
			<panel y="-31*0" visible="var parambuttonpage 0">
<panel class="fxparam_button" sliderid="1"/>
<panel class="fxparam_button" sliderid="2" right="1"/>
<panel class="fxparam_button" sliderid="3"/>
<panel class="fxparam_button" sliderid="4" right="1"/>
<panel class="fxparam_button" sliderid="5"/>
<panel class="fxparam_button" sliderid="6" right="1"/>
</panel>
<panel y="-31*6" visible ="var parambuttonpage 1">
<panel class="fxparam_button" sliderid="7"/>
<panel class="fxparam_button" sliderid="8" right="1"/>
<panel class="fxparam_button" sliderid="9"/>
<panel class="fxparam_button" sliderid="10" right="1"/>
<panel class="fxparam_button" sliderid="11"/>
<panel class="fxparam_button" sliderid="12" right="1"/>
</panel>
<panel y="-31*12" visible="var parambuttonpage 2">
<panel class="fxparam_button" sliderid="13"/>
<panel class="fxparam_button" sliderid="14" right="1"/>
<panel class="fxparam_button" sliderid="15"/>
<panel class="fxparam_button" sliderid="16" right="1"/>
<panel class="fxparam_button" sliderid="17"/>
<panel class="fxparam_button" sliderid="18" right="1"/>
</panel>
<panel y="-31*18" visible ="var parambuttonpage 3">
<panel class="fxparam_button" sliderid="19"/>
<panel class="fxparam_button" sliderid="20" right="1"/>
<panel class="fxparam_button" sliderid="21"/>
<panel class="fxparam_button" sliderid="22" right="1"/>
<panel class="fxparam_button" sliderid="23"/>
<panel class="fxparam_button" sliderid="24" right="1"/>
</panel>
<panel y="-31*24" visible ="var parambuttonpage 4">
<panel class="fxparam_button" sliderid="25"/>
<panel class="fxparam_button" sliderid="26" right="1"/>
<panel class="fxparam_button" sliderid="27"/>
<panel class="fxparam_button" sliderid="28" right="1"/>
<panel class="fxparam_button" sliderid="29"/>
<panel class="fxparam_button" sliderid="30" right="1"/>
</panel>

The same code cannow easily do the same with 8 lines using for iteration; no additional line per buttons :
      <for var="pagenb" from="0" to="4" by="1">
<panel y="-31*[PAGENB]" visible="var parambuttonpage [PAGENB]">
<for var="sliderid" from="1" to="6" by="2">
<panel class="fxparam_button" sliderid="eval@@6*[PAGENB]+[SLIDERID]@"/>
<panel class="fxparam_button" sliderid="eval@@6*[PAGENB]+[SLIDERID]+1@" right="1"/>
</for>
</panel>
</for>

both render the same
https://imgur.com/a/2wYIBEI
generated code
			  <panel y="-31*0" visible="var parambuttonpage 0">
<panel class="fxparam_button" sliderid="1"/>
<panel class="fxparam_button" sliderid="2" right="1"/>
<panel class="fxparam_button" sliderid="3"/>
<panel class="fxparam_button" sliderid="4" right="1"/>
<panel class="fxparam_button" sliderid="5"/>
<panel class="fxparam_button" sliderid="6" right="1"/>
</panel>
<panel y="-31*1" visible="var parambuttonpage 1">
<panel class="fxparam_button" sliderid="7"/>
<panel class="fxparam_button" sliderid="8" right="1"/>
<panel class="fxparam_button" sliderid="9"/>
<panel class="fxparam_button" sliderid="10" right="1"/>
<panel class="fxparam_button" sliderid="11"/>
<panel class="fxparam_button" sliderid="12" right="1"/>
</panel>
<panel y="-31*2" visible="var parambuttonpage 2">
<panel class="fxparam_button" sliderid="13"/>
<panel class="fxparam_button" sliderid="14" right="1"/>
<panel class="fxparam_button" sliderid="15"/>
<panel class="fxparam_button" sliderid="16" right="1"/>
<panel class="fxparam_button" sliderid="17"/>
<panel class="fxparam_button" sliderid="18" right="1"/>
</panel>
<panel y="-31*3" visible="var parambuttonpage 3">
<panel class="fxparam_button" sliderid="19"/>
<panel class="fxparam_button" sliderid="20" right="1"/>
<panel class="fxparam_button" sliderid="21"/>
<panel class="fxparam_button" sliderid="22" right="1"/>
<panel class="fxparam_button" sliderid="23"/>
<panel class="fxparam_button" sliderid="24" right="1"/>
</panel>
<panel y="-31*4" visible="var parambuttonpage 4">
<panel class="fxparam_button" sliderid="25"/>
<panel class="fxparam_button" sliderid="26" right="1"/>
<panel class="fxparam_button" sliderid="27"/>
<panel class="fxparam_button" sliderid="28" right="1"/>
<panel class="fxparam_button" sliderid="29"/>
<panel class="fxparam_button" sliderid="30" right="1"/>
</panel>
 

Inviato Tue 20 Apr 21 @ 2:58 am