Template plugIT » History » Version 1
arkeon, 11/21/2011 01:05 AM
| 1 | 1 | arkeon | h1. Template plugIT |
|---|---|---|---|
| 2 | |||
| 3 | h2. Start a new plugIT (template) |
||
| 4 | |||
| 5 | 1 - choose his category (for example "misc") |
||
| 6 | create a new "template" directory in the category path : "Partition_LockedApp\tools\os3dplugins\misc" |
||
| 7 | |||
| 8 | 2 - create the plugIT definition file (xml) |
||
| 9 | the xml file MUST have the same name as the plugIT directory here "template.xml" |
||
| 10 | |||
| 11 | the PLUGIN tag : |
||
| 12 | - name : the plugIT name displayed in the OS3D plugIT menu |
||
| 13 | - version : the plugIT version |
||
| 14 | - type : the category name |
||
| 15 | |||
| 16 | the DESCRIPTION tag : |
||
| 17 | the plugIT description shown in the plugIT editor |
||
| 18 | |||
| 19 | the HELP tag : |
||
| 20 | the text shown as a tooltip on the help button in the plugIT editor, or an internet url pointing to the plugIT documentation |
||
| 21 | |||
| 22 | the RESOURCE tag : |
||
| 23 | it contain FILE tags with a "path" param, for additional files needed by the plugIT |
||
| 24 | |||
| 25 | the EDITOR tag : |
||
| 26 | it contain the scol scripts to load to execute the plugIT editor and the editor params and types to save |
||
| 27 | |||
| 28 | > the SCRIPT tag : |
||
| 29 | > > the "path" param contain the editor file, it can be relative to the plugIT directory with "./" |
||
| 30 | > the PARAM tag : |
||
| 31 | > > the "name" param contain the name of the editor variable to save |
||
| 32 | > > the "type" param contain the type of the param, it can be : |
||
| 33 | > > * "value" |
||
| 34 | > > * "file" |
||
| 35 | > > * "mesh" |
||
| 36 | > > * "material" |
||
| 37 | > > * "node" |
||
| 38 | > > * "light" |
||
| 39 | > > * "anim" |
||
| 40 | > > * ... |
||
| 41 | |||
| 42 | the CLIENT tag : |
||
| 43 | it contain the client side scol scripts and the default actions/events |
||
| 44 | |||
| 45 | > the SCRIPT tag : |
||
| 46 | > > the "path" param contain the editor file, it can be relative to the plugIT directory with "./" |
||
| 47 | |||
| 48 | > the EVENT tag : |
||
| 49 | > > it define an event name in the "name" param |
||
| 50 | |||
| 51 | > the ACTION tag : |
||
| 52 | > it define an action name in the "name" param |
||
| 53 | |||
| 54 | <pre> |
||
| 55 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||
| 56 | <PLUGIN name="template" version="1.0" type="misc"> |
||
| 57 | <DESCRIPTION>Template plugIT</DESCRIPTION> |
||
| 58 | <HELP>Template plugIT help</HELP> |
||
| 59 | <RESOURCE> |
||
| 60 | <FILE path="./myres.jpg" /> |
||
| 61 | </RESOURCE> |
||
| 62 | <EDITOR> |
||
| 63 | <SCRIPT path="./etemplate.pkg" /> |
||
| 64 | <PARAM name="oninit" type="value" /> |
||
| 65 | </EDITOR> |
||
| 66 | <CLIENT minstance="true"> |
||
| 67 | <SCRIPT path="./ctemplate.pkg" /> |
||
| 68 | <ACTION name="Go" /> |
||
| 69 | <EVENT name="Done" /> |
||
| 70 | </CLIENT> |
||
| 71 | </PLUGIN> |
||
| 72 | </pre> |
||
| 73 | |||
| 74 | 3 - create the editor file |
||
| 75 | here "etemplate.pkg" as defined in the template.xml file in the EDITOR SCRIPT tag |
||
| 76 | |||
| 77 | <pre> |
||
| 78 | // prototype of the cbCloseEdit function in case you don't use params |
||
| 79 | //proto cbCloseEdit = fun [] [[S S] r1];; |
||
| 80 | |||
| 81 | /*! \brief Callback on plugIT instance editor closed |
||
| 82 | * |
||
| 83 | * called on Apply / Ok button, this callback return the parameters to save in the XOS project |
||
| 84 | * |
||
| 85 | * <b>Prototype:</b> fun [] [[S S] r1] |
||
| 86 | * |
||
| 87 | * \return [[S S] r1] : parameters to save in the instance XML data |
||
| 88 | **/ |
||
| 89 | fun cbCloseEdit(ctrlinit)= |
||
| 90 | // get the check state and add it to the param list |
||
| 91 | let itoa getEdCtrlCheckState ctrlinit -> state in |
||
| 92 | ["oninit" state]:: |
||
| 93 | nil;; |
||
| 94 | |||
| 95 | |||
| 96 | /*! \brief Callback on plugIT instance editor destroyed |
||
| 97 | * |
||
| 98 | * called when the editor window is destroyed, this is useful to destroy added objects or resources |
||
| 99 | * |
||
| 100 | * <b>Prototype:</b> fun [] I |
||
| 101 | * |
||
| 102 | * \return I : 0 |
||
| 103 | **/ |
||
| 104 | fun cbDestroyEdit()= |
||
| 105 | 0;; |
||
| 106 | |||
| 107 | |||
| 108 | /*! \brief Callback on plugIT instance editor opened |
||
| 109 | * |
||
| 110 | * called when a user the plugIT Editor |
||
| 111 | * |
||
| 112 | * <b>Prototype:</b> fun [EdWindow PInstance V3Dview] I |
||
| 113 | * |
||
| 114 | * \param EdWindow : editor window structure |
||
| 115 | * \param PInstance : plugIT instance |
||
| 116 | * \param V3Dview : default 3D view structure |
||
| 117 | * |
||
| 118 | * \return @fun [] [[S S] r1] : Callback to call on close |
||
| 119 | **/ |
||
| 120 | fun dynamicedit(winstr, inst, viewstr) = |
||
| 121 | // size of the window |
||
| 122 | let [400 90] -> [iw ih] in |
||
| 123 | ( |
||
| 124 | // resize the editor window |
||
| 125 | setEdWindowSize winstr iw ih; |
||
| 126 | |||
| 127 | // retrieve the current param value |
||
| 128 | let atoi (getPluginInstanceParam inst "oninit") -> state in |
||
| 129 | |||
| 130 | // create the check box control on the editor window |
||
| 131 | let crEdCtrlCheck winstr 10 10 280 20 "Run on init" EDWIN_RESIZE_MW -> ctrlinit in |
||
| 132 | ( |
||
| 133 | // set the current check state |
||
| 134 | setEdCtrlCheckState ctrlinit state; |
||
| 135 | |||
| 136 | [(mkfun1 @cbCloseEdit ctrlinit) @cbDestroyEdit]; |
||
| 137 | ); |
||
| 138 | );; |
||
| 139 | </pre> |
||
| 140 | |||
| 141 | 4 - create the client file |
||
| 142 | here "ctemplate.pkg" as defined in the template.xml file in the CLIENT SCRIPT tag |
||
| 143 | |||
| 144 | <pre> |
||
| 145 | /*! \brief Callback on instance destruction |
||
| 146 | * Callback called when a plugIT instance is destroyed |
||
| 147 | * |
||
| 148 | * <b>Prototype:</b> fun [PInstance u0] I |
||
| 149 | * |
||
| 150 | * \param PInstance : destroyed plugIT instance |
||
| 151 | * \param u0 : user parameter, the type is not defined here because it is not used in this template |
||
| 152 | * |
||
| 153 | * \return I : 0 |
||
| 154 | **/ |
||
| 155 | fun deleteOb(inst, uparam)= |
||
| 156 | 0;; |
||
| 157 | |||
| 158 | |||
| 159 | // plugIT doing something |
||
| 160 | fun doSomething(value)= |
||
| 161 | // test the value to define a default one |
||
| 162 | let if value == nil then "none" else value -> value in |
||
| 163 | ( |
||
| 164 | // create a dialog box with the value as text |
||
| 165 | _DLGMessageBox _channel DMSwin "Template Plugit !!" value 0; |
||
| 166 | |||
| 167 | // send the Done event |
||
| 168 | _DMSevent this (getPluginInstanceEvent inst "Done") nil nil; |
||
| 169 | ); |
||
| 170 | 0;; |
||
| 171 | |||
| 172 | |||
| 173 | /*! \brief Callback on "Go" dms action |
||
| 174 | * |
||
| 175 | * Call the program function to display a dialog box |
||
| 176 | * |
||
| 177 | * <b>Prototype:</b> fun [PInstance DMI S S I u0] I |
||
| 178 | * |
||
| 179 | * \param PInstance : plugIT instance |
||
| 180 | * \param DMI : DMS module who call the action (not used) |
||
| 181 | * \param S : name of the launched action |
||
| 182 | * \param S : data posted in DMS action link |
||
| 183 | * \param I : reply flag (not used) |
||
| 184 | * \param u0 : user parameter, the type is not defined here because it is not used in this template |
||
| 185 | * |
||
| 186 | * \return I : 0 |
||
| 187 | **/ |
||
| 188 | fun cbGo(inst, from, action, param, rep, uparam)= |
||
| 189 | // call the dialog box and set the link parameter as text |
||
| 190 | doSomething param; |
||
| 191 | 0;; |
||
| 192 | |||
| 193 | |||
| 194 | /*! \brief Callback on new plugIT instance |
||
| 195 | * |
||
| 196 | * Read the parameters from editor values and initialise the plugIT |
||
| 197 | * |
||
| 198 | * <b>Prototype:</b> fun [PInstance] I |
||
| 199 | * |
||
| 200 | * \param PInstance : plugIT instance |
||
| 201 | * |
||
| 202 | * \return I : 0 |
||
| 203 | **/ |
||
| 204 | fun newOb(inst)= |
||
| 205 | // retrieve the oninit param value |
||
| 206 | let atoi (getPluginInstanceParam inst "oninit") -> state in |
||
| 207 | ( |
||
| 208 | // define the function to call when we receive the Go action |
||
| 209 | PluginRegisterAction inst "Go" mkfun6 @cbGo nil; |
||
| 210 | |||
| 211 | // test the oninit param to know if we have to start the plugIT functionalities here |
||
| 212 | if !state then nil else |
||
| 213 | doSomething nil; |
||
| 214 | |||
| 215 | // define the function to call when the plugIT instance is destroyed |
||
| 216 | setPluginInstanceCbDel inst mkfun2 @deleteOb nil; |
||
| 217 | ); |
||
| 218 | 0;; |
||
| 219 | |||
| 220 | |||
| 221 | /*! \brief Global plugIT function to initialize the plugIT callbacks |
||
| 222 | * |
||
| 223 | * called on plugIT load, here define the functions to use for a new instance and the editor |
||
| 224 | * |
||
| 225 | * <b>Prototype:</b> fun [s] I |
||
| 226 | * |
||
| 227 | * \param S : plugIT file path |
||
| 228 | * |
||
| 229 | * \return I : 0 |
||
| 230 | **/ |
||
| 231 | fun IniPlug(file)= |
||
| 232 | PlugRegister @newOb nil; |
||
| 233 | setPluginEditor @dynamicedit; |
||
| 234 | 0;; |
||
| 235 | </pre> |
||
| 236 | |||
| 237 | Now reload the plugITs in the OS3D Editor (hit F5 after a focus in the plugITs window, or right click > "reload") |
||
| 238 | |||
| 239 | If the plugIT don't appear in the plugITs menu : |
||
| 240 | - look at the error in the OS3D Editor log window (at the bottom of the main interface) |