Extra "ports" of juce-based plugins using the distrho build system
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1886 lines
67KB

  1. /*
  2. Copyright (C) 2007 Rory Walsh
  3. Cabbage is free software; you can redistribute it
  4. and/or modify it under the terms of the GNU Lesser General Public
  5. License as published by the Free Software Foundation; either
  6. version 2.1 of the License, or (at your option) any later version.
  7. Cabbage is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Lesser General Public License for more details.
  11. You should have received a copy of the GNU Lesser General Public
  12. License along with Csound; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  14. 02111-1307 USA
  15. */
  16. #include "CabbageGUIClass.h"
  17. CabbageGUIClass::CabbageGUIClass(String compStr, int ID):
  18. debugMessage(""),
  19. plant(""),
  20. reltoplant(""),
  21. scaleX(1),
  22. scaleY(1),
  23. midiChan(-99),
  24. midiCtrl(-99),
  25. boundsText(""),
  26. posText(""),
  27. sizeText(""),
  28. preset(""),
  29. trackerFill(),
  30. masterSnap(0),
  31. width(0),
  32. height(0),
  33. left(0),
  34. top(0),
  35. fill(Colours::cornflowerblue),
  36. xyAutoIndex(0),
  37. fileType(""),
  38. workingDir(""),
  39. alpha(1),
  40. sliderRange(1),
  41. numTables(0),
  42. sliderIncr(.01),
  43. decimalPlaces(0),
  44. tabbed(0),
  45. soundfilerIndex(0),
  46. native("")
  47. {
  48. //Default values are assigned to all attributres
  49. //before parsing begins
  50. cabbageIdentifiers.set("scalex", 1);
  51. cabbageIdentifiers.set("scaley", 1);
  52. items.clear();
  53. items.add("");
  54. key.clear();
  55. min=0;
  56. max=1;
  57. sliderSkew = 1;
  58. value = 0;
  59. StringArray strTokens;
  60. strTokens.addTokens(compStr, " ", "\"");
  61. //changing case to lower to make syntax non case-sensitive
  62. //===============sliders==================//
  63. if(strTokens[0].trim() == "hslider"){
  64. cabbageIdentifiers.set(CabbageIDs::basetype, "interactive");
  65. cabbageIdentifiers.set(CabbageIDs::top, 10);
  66. cabbageIdentifiers.set(CabbageIDs::left, 10);
  67. cabbageIdentifiers.set(CabbageIDs::width, 150);
  68. cabbageIdentifiers.set(CabbageIDs::height, 50);
  69. var channels;
  70. channels.append("hslider");
  71. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  72. cabbageIdentifiers.set(CabbageIDs::min, 0);
  73. cabbageIdentifiers.set(CabbageIDs::max, 100);
  74. cabbageIdentifiers.set(CabbageIDs::value, 50);
  75. cabbageIdentifiers.set(CabbageIDs::text, "");
  76. cabbageIdentifiers.set(CabbageIDs::textbox, 0.f);
  77. cabbageIdentifiers.set(CabbageIDs::caption, "");
  78. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  79. cabbageIdentifiers.set(CabbageIDs::trackercolour, Colours::lime.toString());
  80. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  81. cabbageIdentifiers.set(CabbageIDs::sliderskew, 1);
  82. cabbageIdentifiers.set(CabbageIDs::sliderincr, .0001);
  83. cabbageIdentifiers.set(CabbageIDs::midichan, -99);
  84. cabbageIdentifiers.set(CabbageIDs::midictrl, -99);
  85. //these don't appear in the props dialog
  86. cabbageIdentifiers.set(CabbageIDs::name, "hslider");
  87. cabbageIdentifiers.set(CabbageIDs::type, cabbageIdentifiers.getWithDefault("name", "").toString());
  88. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  89. cabbageIdentifiers.set(CabbageIDs::kind, "horizontal");
  90. cabbageIdentifiers.set(CabbageIDs::decimalplaces, 1);
  91. }
  92. else if(strTokens[0].trim() == "vslider"){
  93. cabbageIdentifiers.set(CabbageIDs::basetype, "interactive");
  94. cabbageIdentifiers.set(CabbageIDs::top, 10);
  95. cabbageIdentifiers.set(CabbageIDs::left, 10);
  96. cabbageIdentifiers.set(CabbageIDs::width, 50);
  97. cabbageIdentifiers.set(CabbageIDs::height, 150);
  98. var channels;
  99. channels.append("vslider");
  100. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  101. cabbageIdentifiers.set(CabbageIDs::min, 0);
  102. cabbageIdentifiers.set(CabbageIDs::max, 100);
  103. cabbageIdentifiers.set(CabbageIDs::value, 50);
  104. cabbageIdentifiers.set(CabbageIDs::text, "");
  105. cabbageIdentifiers.set(CabbageIDs::textbox, 0.f);
  106. cabbageIdentifiers.set(CabbageIDs::caption, "");
  107. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  108. cabbageIdentifiers.set(CabbageIDs::trackercolour, Colours::lime.toString());
  109. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  110. cabbageIdentifiers.set(CabbageIDs::sliderskew, 1);
  111. cabbageIdentifiers.set(CabbageIDs::sliderincr, .0001);
  112. cabbageIdentifiers.set(CabbageIDs::midichan, -99);
  113. cabbageIdentifiers.set(CabbageIDs::midictrl, -99);
  114. //these don't appear in the props dialog
  115. cabbageIdentifiers.set(CabbageIDs::name, "vslider");
  116. cabbageIdentifiers.set(CabbageIDs::type, cabbageIdentifiers.getWithDefault("name", "").toString());
  117. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  118. cabbageIdentifiers.set(CabbageIDs::kind, "vertical");
  119. cabbageIdentifiers.set(CabbageIDs::decimalplaces, 1);
  120. }
  121. else if(strTokens[0].trim() == "rslider"){
  122. cabbageIdentifiers.set(CabbageIDs::basetype, "interactive");
  123. cabbageIdentifiers.set(CabbageIDs::top, 10);
  124. cabbageIdentifiers.set(CabbageIDs::left, 10);
  125. cabbageIdentifiers.set(CabbageIDs::width, 60);
  126. cabbageIdentifiers.set(CabbageIDs::height, 60);
  127. var channels;
  128. channels.append("rslider");
  129. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  130. cabbageIdentifiers.set(CabbageIDs::min, 0);
  131. cabbageIdentifiers.set(CabbageIDs::max, 100);
  132. cabbageIdentifiers.set(CabbageIDs::value, 50);
  133. cabbageIdentifiers.set(CabbageIDs::text, "");
  134. cabbageIdentifiers.set(CabbageIDs::textbox, 0.f);
  135. cabbageIdentifiers.set(CabbageIDs::caption, "");
  136. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  137. cabbageIdentifiers.set(CabbageIDs::trackercolour, Colours::lime.toString());
  138. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  139. cabbageIdentifiers.set(CabbageIDs::sliderskew, 1);
  140. cabbageIdentifiers.set(CabbageIDs::sliderincr, .0001);
  141. cabbageIdentifiers.set(CabbageIDs::midichan, -99);
  142. cabbageIdentifiers.set(CabbageIDs::midictrl, -99);
  143. //these don't appear in the props dialog
  144. cabbageIdentifiers.set(CabbageIDs::name, "rslider");
  145. cabbageIdentifiers.set(CabbageIDs::type, cabbageIdentifiers.getWithDefault("name", "").toString());
  146. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  147. cabbageIdentifiers.set(CabbageIDs::kind, "rotary");
  148. cabbageIdentifiers.set(CabbageIDs::decimalplaces, 1);
  149. }
  150. else if(strTokens[0].trim() == "source"){
  151. cabbageIdentifiers.set("basetype", "layout");
  152. top = 10;
  153. left = 10;
  154. width = 400;
  155. height = 240;
  156. channel = "";
  157. name = "source";
  158. caption = "";
  159. type = name;
  160. //name.append(String(ID), 1024);
  161. }
  162. //===============info button==================//
  163. else if(strTokens[0].trim() == "infobutton"){
  164. cabbageIdentifiers.set("basetype", "layout");
  165. top = 10;
  166. left = 10;
  167. width = 600;
  168. height = 440;
  169. channel = "";
  170. name = "infobutton";
  171. caption = "";
  172. type = name;
  173. //name.append(String(ID), 1024);
  174. cabbageIdentifiers.set(CabbageIDs::top, 10);
  175. cabbageIdentifiers.set(CabbageIDs::left, 10);
  176. cabbageIdentifiers.set(CabbageIDs::width, 80);
  177. cabbageIdentifiers.set(CabbageIDs::height, 40);
  178. cabbageIdentifiers.set(CabbageIDs::text, "");
  179. cabbageIdentifiers.set(CabbageIDs::caption, "");
  180. cabbageIdentifiers.set(CabbageIDs::colour, Colours::black.toString());
  181. cabbageIdentifiers.set(CabbageIDs::fontcolour, Colours::white.toString());
  182. cabbageIdentifiers.set(CabbageIDs::type, "infobutton");
  183. cabbageIdentifiers.set(CabbageIDs::name, "infobutton");
  184. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  185. }
  186. //===============directory list==================//
  187. else if(strTokens[0].trim() == "directorylist"){
  188. cabbageIdentifiers.set("basetype", "layout");
  189. top = 10;
  190. left = 10;
  191. width = 600;
  192. height = 440;
  193. channel = "";
  194. name = "directorylist";
  195. caption = "";
  196. type = name;
  197. //name.append(String(ID), 1024);
  198. }
  199. else if(strTokens[0].trim() == "patmatrix"){
  200. cabbageIdentifiers.set("basetype", "layout");
  201. top = 10;
  202. left = 10;
  203. width = 400;
  204. height = 240;
  205. channel = "";
  206. name = "patmatrix";
  207. caption = "Pattern Matrix";
  208. type = name;
  209. noSteps = 8;
  210. noPatterns=1;
  211. rCtrls=0;
  212. //name.append(String(ID), 1024);
  213. }
  214. //===============file button==================//
  215. else if(strTokens[0].trim() == "filebutton"){
  216. cabbageIdentifiers.set("basetype", "layout");
  217. top = 10;
  218. left = 10;
  219. width = 80;
  220. height = 40;
  221. channel = "filebuttonchan";
  222. var array;
  223. array.append("Open file");
  224. array.append("Open file");
  225. items.add("");
  226. items.add("");
  227. name = "filebutton";
  228. max = 1;
  229. min = 0;
  230. caption = "";
  231. type = name;
  232. name.append(String(ID), 1024);
  233. cabbageIdentifiers.set(CabbageIDs::top, 10);
  234. cabbageIdentifiers.set(CabbageIDs::left, 10);
  235. cabbageIdentifiers.set(CabbageIDs::width, 80);
  236. cabbageIdentifiers.set(CabbageIDs::height, 40);
  237. var channels;
  238. channels.append("filebutton");
  239. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  240. cabbageIdentifiers.set(CabbageIDs::value, 1);
  241. cabbageIdentifiers.set(CabbageIDs::text, array);
  242. cabbageIdentifiers.set(CabbageIDs::caption, "");
  243. cabbageIdentifiers.set(CabbageIDs::colour, Colours::black.toString());
  244. cabbageIdentifiers.set(CabbageIDs::fontcolour, Colours::white.toString());
  245. cabbageIdentifiers.set(CabbageIDs::type, "filebutton");
  246. cabbageIdentifiers.set(CabbageIDs::name, "filebutton");
  247. cabbageIdentifiers.set(CabbageIDs::mode, "open");
  248. cabbageIdentifiers.set("name", cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  249. var populate;
  250. populate.append("");
  251. populate.append("");
  252. cabbageIdentifiers.set("populate", populate);
  253. }
  254. //===============button==================//
  255. else if(strTokens[0].trim() == "button"){
  256. cabbageIdentifiers.set("basetype", "interactive");
  257. top = 10;
  258. left = 10;
  259. width = 80;
  260. height = 40;
  261. channel = "buttonchan";
  262. items.add("");
  263. items.add("");
  264. name = "button";
  265. max = 1;
  266. min = 0;
  267. caption = "";
  268. type = name;
  269. name.append(String(ID), 1024);
  270. var array;
  271. array.append("Push me");
  272. array.append("Push me");
  273. cabbageIdentifiers.set(CabbageIDs::top, 10);
  274. cabbageIdentifiers.set(CabbageIDs::left, 10);
  275. cabbageIdentifiers.set(CabbageIDs::width, 80);
  276. cabbageIdentifiers.set(CabbageIDs::height, 40);
  277. var channels;
  278. channels.append("buttonchan");
  279. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  280. cabbageIdentifiers.set(CabbageIDs::value, 1);
  281. cabbageIdentifiers.set(CabbageIDs::text, array);
  282. cabbageIdentifiers.set(CabbageIDs::caption, "");
  283. cabbageIdentifiers.set(CabbageIDs::colour, Colours::black.toString());
  284. cabbageIdentifiers.set(CabbageIDs::fontcolour, Colours::white.toString());
  285. cabbageIdentifiers.set(CabbageIDs::latched, 1);
  286. cabbageIdentifiers.set(CabbageIDs::type, "button");
  287. cabbageIdentifiers.set(CabbageIDs::name, "button");
  288. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  289. }
  290. //===============checkbox==================//
  291. else if(strTokens[0].trim() == "checkbox"){
  292. cabbageIdentifiers.set("basetype", "interactive");
  293. top = 10;
  294. left = 10;
  295. width = 100;
  296. height = 22;
  297. channel = "checkchan";
  298. type = "checkbox";
  299. caption = "";
  300. name = "checkbox";
  301. caption = "";
  302. items.add("");
  303. var array;
  304. array.append("Check box");
  305. min = 0;
  306. max = 1;
  307. shape = "square";
  308. name.append(String(ID), 1024);
  309. //default colour for toggles
  310. colour = Colours::lime;
  311. cabbageIdentifiers.set(CabbageIDs::top, 10);
  312. cabbageIdentifiers.set(CabbageIDs::left, 10);
  313. cabbageIdentifiers.set(CabbageIDs::width, 100);
  314. cabbageIdentifiers.set(CabbageIDs::height, 22);
  315. var channels;
  316. channels.append("checkchan");
  317. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  318. cabbageIdentifiers.set(CabbageIDs::text, array);
  319. cabbageIdentifiers.set(CabbageIDs::value, 0);
  320. cabbageIdentifiers.set(CabbageIDs::caption, "");
  321. cabbageIdentifiers.set(CabbageIDs::shape, "square");
  322. cabbageIdentifiers.set(CabbageIDs::colour, Colours::lime.toString());
  323. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  324. cabbageIdentifiers.set(CabbageIDs::type, "checkbox");
  325. cabbageIdentifiers.set(CabbageIDs::name, "checkbox");
  326. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  327. }
  328. //===============combobox==================//
  329. else if(strTokens[0].trim() == "combobox"){
  330. cabbageIdentifiers.set("basetype", "interactive");
  331. items.clear();
  332. top = 10;
  333. left = 10;
  334. width = 80;
  335. height = 22;
  336. channel = "combochan";
  337. caption = "";
  338. //add one item by befault, will be overwritten by users values
  339. var array;
  340. array.append("Item 1");
  341. array.append("Item 2");
  342. array.append("Item 3");
  343. array.append("Item 4");
  344. items.add("Item 1");
  345. items.add("Item 2");
  346. items.add("Item 3");
  347. items.add("Item 4");
  348. name = "combobox";
  349. type = name;
  350. name.append(String(ID), 1024);
  351. min=1;
  352. value = 1;
  353. cabbageIdentifiers.set(CabbageIDs::top, 10);
  354. cabbageIdentifiers.set(CabbageIDs::left, 10);
  355. cabbageIdentifiers.set(CabbageIDs::width, 80);
  356. cabbageIdentifiers.set(CabbageIDs::height, 20);
  357. var channels;
  358. channels.append("combochan");
  359. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  360. cabbageIdentifiers.set(CabbageIDs::channeltype, "number");
  361. cabbageIdentifiers.set(CabbageIDs::text, array);
  362. cabbageIdentifiers.set(CabbageIDs::value, 1);
  363. cabbageIdentifiers.set(CabbageIDs::caption, "");
  364. cabbageIdentifiers.set(CabbageIDs::colour, Colours::black.toString());
  365. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  366. cabbageIdentifiers.set(CabbageIDs::type, "combobox");
  367. cabbageIdentifiers.set(CabbageIDs::name, "combobox");
  368. cabbageIdentifiers.set(CabbageIDs::comborange, 4);
  369. var populate;
  370. populate.append("");
  371. populate.append("");
  372. cabbageIdentifiers.set(CabbageIDs::populate, populate);
  373. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  374. }
  375. //===============label==================//
  376. else if(strTokens[0].trim() == "label"){
  377. cabbageIdentifiers.set("basetype", "layout");
  378. top = 10;
  379. left = 10;
  380. width = 100;
  381. height = 16;
  382. channel = "label";
  383. beveltype = "none";
  384. colour = CabbageUtils::getComponentFontColour();
  385. fontcolour = CabbageUtils::getComponentFontColour();
  386. text = "hello";
  387. name = "label";
  388. type = name;
  389. name.append(String(ID), 1024);
  390. cabbageIdentifiers.set(CabbageIDs::top, 10);
  391. cabbageIdentifiers.set(CabbageIDs::left, 10);
  392. cabbageIdentifiers.set(CabbageIDs::width, 80);
  393. cabbageIdentifiers.set(CabbageIDs::height, 16);
  394. cabbageIdentifiers.set(CabbageIDs::text, "hello");
  395. cabbageIdentifiers.set(CabbageIDs::min, 1);
  396. cabbageIdentifiers.set(CabbageIDs::name, "label");
  397. cabbageIdentifiers.set(CabbageIDs::type, cabbageIdentifiers.getWithDefault("name", "").toString());
  398. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  399. cabbageIdentifiers.set(CabbageIDs::colour, CabbageUtils::getComponentFontColour().toString());
  400. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  401. }
  402. //===============multitab==================//
  403. else if(strTokens[0].trim() == "multitab"){
  404. cabbageIdentifiers.set("basetype", "layout");
  405. top = 10;
  406. left = 10;
  407. width = 100;
  408. height = 16;
  409. channel = "multitab";
  410. colour = CabbageUtils::getComponentFontColour();
  411. fontcolour = CabbageUtils::getComponentFontColour();
  412. items.add("Tab 1");
  413. name = "multitab";
  414. type = name;
  415. name.append(String(ID), 1024);
  416. }
  417. //===============soundfiler==================//
  418. else if(strTokens[0].trim() == "soundfiler"){
  419. cabbageIdentifiers.set("basetype", "layout");
  420. top = 10;
  421. left = 10;
  422. width = 300;
  423. height = 200;
  424. colour = Colours::lime;
  425. fontcolour = CabbageUtils::getComponentFontColour();
  426. text = "";
  427. name = "soundfiler";
  428. type = name;
  429. name.append(String(ID), 1024);
  430. cabbageIdentifiers.set(CabbageIDs::top, 10);
  431. cabbageIdentifiers.set(CabbageIDs::left, 10);
  432. cabbageIdentifiers.set(CabbageIDs::width, 300);
  433. cabbageIdentifiers.set(CabbageIDs::height, 200);
  434. var channels;
  435. channels.append("soundfiler1");
  436. channels.append("soundfiler2");
  437. cabbageIdentifiers.set(CabbageIDs::channel, channels);
  438. cabbageIdentifiers.set(CabbageIDs::colour, CabbageUtils::getComponentFontColour().toString());
  439. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  440. cabbageIdentifiers.set(CabbageIDs::type, "soundfiler");
  441. cabbageIdentifiers.set(CabbageIDs::name, "soundfiler");
  442. cabbageIdentifiers.set(CabbageIDs::file, "");
  443. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  444. }
  445. //===============snapshot==================//
  446. else if(strTokens[0].trim() == "snapshot"){
  447. cabbageIdentifiers.set("basetype", "layout");
  448. items.clear();
  449. top = 10;
  450. left = 10;
  451. width = 200;
  452. height = 20;
  453. channel = "snapshot";
  454. colour = CabbageUtils::getComponentFontColour();
  455. fontcolour = Colours::white;
  456. text = "Snap";
  457. name = "snapshot";
  458. type = name;
  459. name.append(String(ID), 1024);
  460. items.add("One");
  461. items.add("Two");
  462. items.add("Three");
  463. items.add("Four");
  464. min=1;
  465. value=1;
  466. var val;
  467. val.append("One");
  468. val.append("Two");
  469. val.append("Three");
  470. val.append("Four");
  471. val.append("Five");
  472. cabbageIdentifiers.set(CabbageIDs::top, 10);
  473. cabbageIdentifiers.set(CabbageIDs::left, 10);
  474. cabbageIdentifiers.set(CabbageIDs::width, 200);
  475. cabbageIdentifiers.set(CabbageIDs::height, 20);
  476. cabbageIdentifiers.set(CabbageIDs::text, val);
  477. cabbageIdentifiers.set(CabbageIDs::value, value);
  478. cabbageIdentifiers.set(CabbageIDs::fontcolour, Colours::white.toString());
  479. cabbageIdentifiers.set(CabbageIDs::colour, CabbageUtils::getComponentFontColour().toString());
  480. cabbageIdentifiers.set(CabbageIDs::type, "snapshot");
  481. cabbageIdentifiers.set(CabbageIDs::name, "snapshot");
  482. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  483. }
  484. //===============image==================//
  485. else if(strTokens[0].trim() == "image"){
  486. cabbageIdentifiers.set("basetype", "layout");
  487. top = 10;
  488. left = 10;
  489. width = 160;
  490. height = 120;
  491. channel = "";
  492. beveltype = "none";
  493. fontcolour = Colours::white;
  494. text = "";
  495. line = 2;
  496. name = "image";
  497. type = name;
  498. shape="rounded";
  499. outline = Colours::black;
  500. colour = Colours::white;
  501. name.append(String(ID), 1024);
  502. plantButton = 0;
  503. cabbageIdentifiers.set(CabbageIDs::top, 10);
  504. cabbageIdentifiers.set(CabbageIDs::left, 10);
  505. cabbageIdentifiers.set(CabbageIDs::width, 160);
  506. cabbageIdentifiers.set(CabbageIDs::height, 120);
  507. cabbageIdentifiers.set(CabbageIDs::shape, "rounded");
  508. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  509. cabbageIdentifiers.set(CabbageIDs::outline, Colours::white.toString());
  510. cabbageIdentifiers.set(CabbageIDs::popup, 0);
  511. cabbageIdentifiers.set(CabbageIDs::plant, "");
  512. cabbageIdentifiers.set(CabbageIDs::type, "image");
  513. cabbageIdentifiers.set(CabbageIDs::file, "");
  514. cabbageIdentifiers.set(CabbageIDs::name, "image");
  515. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  516. }
  517. //===============groupbox==================//
  518. else if(strTokens[0].trim() == "groupbox"){
  519. line = 1;
  520. plantButton = 0;
  521. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  522. cabbageIdentifiers.set(CabbageIDs::top, 10);
  523. cabbageIdentifiers.set(CabbageIDs::left, 10);
  524. cabbageIdentifiers.set(CabbageIDs::width, 80);
  525. cabbageIdentifiers.set(CabbageIDs::height, 22);
  526. cabbageIdentifiers.set(CabbageIDs::colour, CabbageUtils::getComponentSkin().toString());
  527. cabbageIdentifiers.set(CabbageIDs::fontcolour, CabbageUtils::getComponentFontColour().toString());
  528. cabbageIdentifiers.set(CabbageIDs::popup, 0);
  529. cabbageIdentifiers.set(CabbageIDs::plant, "");
  530. cabbageIdentifiers.set(CabbageIDs::line, 1);
  531. cabbageIdentifiers.set(CabbageIDs::type, "groupbox");
  532. cabbageIdentifiers.set(CabbageIDs::name, "groupbox");
  533. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  534. }
  535. //===============line==================//
  536. else if(strTokens[0].trim() == "line"){
  537. cabbageIdentifiers.set("basetype", "layout");
  538. top = 10;
  539. left = 10;
  540. width = 180;
  541. height = 2;
  542. name = "line";
  543. type = name;
  544. name.append(String(ID), 1024);
  545. cabbageIdentifiers.set(CabbageIDs::top, 10);
  546. cabbageIdentifiers.set(CabbageIDs::left, 10);
  547. cabbageIdentifiers.set(CabbageIDs::width, 160);
  548. cabbageIdentifiers.set(CabbageIDs::height, 2);
  549. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  550. cabbageIdentifiers.set(CabbageIDs::type, "line");
  551. cabbageIdentifiers.set(CabbageIDs::name, "line");
  552. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  553. }
  554. //===============transport==================//
  555. else if(strTokens[0].trim() == "transport"){
  556. cabbageIdentifiers.set("basetype", "layout");
  557. top = 0;
  558. left = 0;
  559. width = 100;
  560. height = 40;
  561. name = "transport";
  562. type = name;
  563. name.append(String(ID), 1024);
  564. }
  565. //===============csoundoutput==================//
  566. else if(strTokens[0].trim() == "csoundoutput"){
  567. cabbageIdentifiers.set("basetype", "layout");
  568. top = 10;
  569. left = 10;
  570. width = 400;
  571. height = 200;
  572. colour = Colours::white;
  573. name = "csoundoutput";
  574. type = name;
  575. name.append(String(ID), 1024);
  576. cabbageIdentifiers.set(CabbageIDs::top, 10);
  577. cabbageIdentifiers.set(CabbageIDs::left, 10);
  578. cabbageIdentifiers.set(CabbageIDs::width, 400);
  579. cabbageIdentifiers.set(CabbageIDs::text, "Csound output");
  580. cabbageIdentifiers.set(CabbageIDs::height, 200);
  581. cabbageIdentifiers.set(CabbageIDs::colour, Colours::white.toString());
  582. cabbageIdentifiers.set(CabbageIDs::name, "csoundoutput");
  583. cabbageIdentifiers.set(CabbageIDs::type, "csoundoutput");
  584. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  585. }
  586. //===============vemeter==================//
  587. else if(strTokens[0].trim() == "vumeter"){
  588. cabbageIdentifiers.set("basetype", "layout");
  589. top = 10;
  590. left = 10;
  591. width = 400;
  592. height = 200;
  593. vuConfig.clear();
  594. colour = Colours::white;
  595. name = "vumeter";
  596. type = name;
  597. name.append(String(ID), 1024);
  598. }
  599. //===============table==================//
  600. else if(strTokens[0].trim() == "table"){
  601. cabbageIdentifiers.set("basetype", "layout");
  602. top = 10;
  603. left = 10;
  604. width = 400;
  605. height = 200;
  606. colour = Colours::lime;
  607. name = "table";
  608. type = name;
  609. value = 1;
  610. tableNum = 1;
  611. name.append(String(ID), 1024);
  612. cabbageIdentifiers.set(CabbageIDs::top, 10);
  613. cabbageIdentifiers.set(CabbageIDs::left, 10);
  614. cabbageIdentifiers.set(CabbageIDs::width, 400);
  615. cabbageIdentifiers.set(CabbageIDs::height, 200);
  616. cabbageIdentifiers.set(CabbageIDs::tablenumber, 1);
  617. cabbageIdentifiers.set(CabbageIDs::drawmode, 0);
  618. cabbageIdentifiers.set(CabbageIDs::resizemode, 0);
  619. cabbageIdentifiers.set(CabbageIDs::readonly, 0);
  620. cabbageIdentifiers.set(CabbageIDs::tablecolour, Colours::lime.toString());
  621. cabbageIdentifiers.set(CabbageIDs::amprange, 0);
  622. cabbageIdentifiers.set(CabbageIDs::type, "table");
  623. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  624. }
  625. else if(strTokens[0].trim() == "pvsview"){
  626. cabbageIdentifiers.set("basetype", "layout");
  627. top = 10;
  628. left = 10;
  629. width = 400;
  630. height = 200;
  631. colour = Colours::white;
  632. name = "pvsview";
  633. type = name;
  634. value = 1;
  635. tableNum = 1;
  636. name.append(String(ID), 1024);
  637. overlapSize = 256;
  638. fftSize = 1024;
  639. frameSize = 1024;
  640. }
  641. //===============xypad==================//
  642. else if(strTokens[0].trim() == "xypad"){
  643. cabbageIdentifiers.set("basetype", "interactive");
  644. top = 10;
  645. left = 10;
  646. width = 200;
  647. height = 200;
  648. xChannel = "xypadchanX";
  649. yChannel = "xypadchanY";
  650. channel = "";
  651. caption = "";
  652. name = "xypad";
  653. caption = "";
  654. minX = 0;
  655. maxX = 200;
  656. minY = 0;
  657. maxY = 200;
  658. valueX = 0;
  659. decimalPlaces = 2;
  660. valueY = 0;
  661. type = "xypad";
  662. name.append(String(ID), 1024);
  663. xyChannel = "";
  664. colour = Colours::lime;
  665. fontcolour = Colours::cornflowerblue;
  666. var channels;
  667. channels.append("xChan");
  668. channels.append("yChan");
  669. cabbageIdentifiers.set(CabbageIDs::xyautoindex, 0);
  670. cabbageIdentifiers.set(CabbageIDs::xchannel, channels[0]);
  671. cabbageIdentifiers.set(CabbageIDs::ychannel, channels[1]);
  672. cabbageIdentifiers.set(CabbageIDs::top, 10);
  673. cabbageIdentifiers.set(CabbageIDs::left, 10);
  674. cabbageIdentifiers.set(CabbageIDs::caption, "");
  675. cabbageIdentifiers.set(CabbageIDs::width, 200);
  676. cabbageIdentifiers.set(CabbageIDs::height, 200);
  677. cabbageIdentifiers.set(CabbageIDs::minx, 0);
  678. cabbageIdentifiers.set(CabbageIDs::maxx, 200);
  679. cabbageIdentifiers.set(CabbageIDs::text, "");
  680. cabbageIdentifiers.set(CabbageIDs::miny, 0);
  681. cabbageIdentifiers.set(CabbageIDs::maxy, 200);
  682. cabbageIdentifiers.set(CabbageIDs::valuex, 0);
  683. cabbageIdentifiers.set(CabbageIDs::valuey, 0);
  684. cabbageIdentifiers.set(CabbageIDs::colour, Colours::lime.toString());
  685. cabbageIdentifiers.set(CabbageIDs::fontcolour, Colours::cornflowerblue.toString());
  686. cabbageIdentifiers.set(CabbageIDs::type, "xypad");
  687. cabbageIdentifiers.set(CabbageIDs::name, "xypad");
  688. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  689. }
  690. //===============keyboard==================//
  691. else if(strTokens[0].trim() == "keyboard"){
  692. cabbageIdentifiers.set("basetype", "layout");
  693. top = 10;
  694. left = 10;
  695. width = 400;
  696. height = 100;
  697. name = "keyboard";
  698. type = name;
  699. name.append(String(ID), 1024);
  700. value=60;
  701. cabbageIdentifiers.set(CabbageIDs::top, 10);
  702. cabbageIdentifiers.set(CabbageIDs::left, 10);
  703. cabbageIdentifiers.set(CabbageIDs::width, 400);
  704. cabbageIdentifiers.set(CabbageIDs::height, 100);
  705. cabbageIdentifiers.set(CabbageIDs::value, 60);
  706. cabbageIdentifiers.set(CabbageIDs::type, "keyboard");
  707. cabbageIdentifiers.set(CabbageIDs::name, "keyboard");
  708. cabbageIdentifiers.set(CabbageIDs::name, cabbageIdentifiers.getWithDefault("name", "").toString()+String(ID));
  709. }
  710. //===============form==================//
  711. else if(strTokens[0].trim() == "form"){
  712. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  713. cabbageIdentifiers.set(CabbageIDs::top, 10);
  714. cabbageIdentifiers.set(CabbageIDs::left, 10);
  715. cabbageIdentifiers.set(CabbageIDs::width, 600);
  716. cabbageIdentifiers.set(CabbageIDs::height, 300);
  717. cabbageIdentifiers.set(CabbageIDs::caption, "");
  718. cabbageIdentifiers.set(CabbageIDs::name, "form");
  719. cabbageIdentifiers.set(CabbageIDs::type, "form");
  720. cabbageIdentifiers.set(CabbageIDs::guirefresh, 20);
  721. }
  722. else if(strTokens[0].trim() == "hostbpm"){
  723. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  724. cabbageIdentifiers.set(CabbageIDs::name, "hostbpm");
  725. cabbageIdentifiers.set(CabbageIDs::type, "hostbpm");
  726. }
  727. else if(strTokens[0].trim() == "hostppqpos"){
  728. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  729. cabbageIdentifiers.set(CabbageIDs::name, "hostppqpos");
  730. cabbageIdentifiers.set(CabbageIDs::type, "hostppqpos");
  731. }
  732. else if(strTokens[0].trim() == "hostplaying"){
  733. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  734. cabbageIdentifiers.set(CabbageIDs::name, "hostplaying");
  735. cabbageIdentifiers.set(CabbageIDs::type, "hostplaying");
  736. }
  737. else if(strTokens[0].trim() == "hostrecording"){
  738. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  739. cabbageIdentifiers.set(CabbageIDs::name, "hostrecording");
  740. cabbageIdentifiers.set(CabbageIDs::type, "hostrecording");
  741. }
  742. else if(strTokens[0].trim() == "hosttime"){
  743. cabbageIdentifiers.set(CabbageIDs::basetype, "layout");
  744. cabbageIdentifiers.set(CabbageIDs::name, "hosttime");
  745. cabbageIdentifiers.set(CabbageIDs::type, "hosttime");
  746. }
  747. tabpage = String("");
  748. //parse the text now that all default values ahve been assigned
  749. parse(compStr);
  750. }
  751. CabbageGUIClass::~CabbageGUIClass()
  752. {
  753. }
  754. //===========================================================================================
  755. int CabbageGUIClass::parse(String inStr)
  756. {
  757. //Logger::writeToLog(str);
  758. //remove any text after a semicolon and take out tabs..
  759. String str = inStr.removeCharacters("\t");
  760. if(str.indexOf(0, ";")!=-1)
  761. str = str.substring(0, str.indexOf(0, ";"));
  762. //making this static would also speed things up!!
  763. String typeOfWidget="";
  764. StringArray identArray;
  765. identArray.clear();
  766. identArray.add(",colour(");
  767. identArray.add("tablecolour(");
  768. identArray.add(" colour(");
  769. identArray.add(",colours(");
  770. identArray.add(" colours(");
  771. identArray.add("fontcolour(");
  772. identArray.add("size(");
  773. identArray.add("items(");
  774. identArray.add("pos(");
  775. identArray.add("min(");
  776. identArray.add("max(");
  777. identArray.add("value(");
  778. identArray.add("tabpage(");
  779. identArray.add("guirefresh(");
  780. identArray.add("midictrl(");
  781. //check line values with spaces, otherwise
  782. //it gets confused with the outline identifier
  783. identArray.add(" line(");
  784. identArray.add(",line(");
  785. identArray.add("bounds(");
  786. identArray.add("populate(");
  787. identArray.add(",range(");
  788. identArray.add(" range(");
  789. identArray.add("amprange(");
  790. identArray.add("rangex(");
  791. identArray.add("rangey(");
  792. identArray.add("plant(");
  793. identArray.add("alpha(");
  794. identArray.add(",channel(");
  795. identArray.add("channel(");
  796. identArray.add("channeltype(");
  797. identArray.add(" chan(");
  798. identArray.add("channels(");
  799. identArray.add(" chans(");
  800. identArray.add("name(");
  801. identArray.add("textbox(");
  802. identArray.add("instrs(");
  803. identArray.add("caption(");
  804. identArray.add("topitem(");
  805. identArray.add("menuitem(");
  806. identArray.add("stdout(");
  807. identArray.add("native(");
  808. identArray.add("exit(");
  809. identArray.add("cssetup(");
  810. identArray.add("kind(");
  811. identArray.add("config(");
  812. identArray.add("beveltype(");
  813. identArray.add("text(");
  814. identArray.add("runcsound(");
  815. identArray.add("tabs(");
  816. identArray.add("tab(");
  817. identArray.add(" mode(");
  818. identArray.add(",mode(");
  819. identArray.add("tablenumber(");
  820. identArray.add("tablenum(");
  821. identArray.add("tablenumbers(");
  822. identArray.add("tablenums(");
  823. identArray.add("fill(");
  824. identArray.add("file(");
  825. identArray.add("outline(");
  826. identArray.add("master(");
  827. identArray.add("shape(");
  828. identArray.add("textcolour(");
  829. identArray.add("scale(");
  830. identArray.add("chan(");
  831. identArray.add("key(");
  832. identArray.add("steps(");
  833. identArray.add("pluginid(");
  834. identArray.add("rctrls(");
  835. identArray.add("trackercolour(");
  836. identArray.add("preset(");
  837. identArray.add("popup(");
  838. identArray.add("fftsize(");
  839. identArray.add("overlap(");
  840. identArray.add("framesize(");
  841. identArray.add("pvschan(");
  842. identArray.add("author(");
  843. identArray.add("tabpage(");
  844. identArray.add("drawmode(");
  845. identArray.add("resizemode(");
  846. identArray.add("readonly(");
  847. identArray.add("latched(");
  848. //add a few dummy identifiers so we can catch bogus one in the Cabbage code
  849. identArray.add("");
  850. identArray.add("");
  851. identArray.add("");
  852. //Logger::writeToLog(String(identArray.size()));
  853. //retrieve paramters consisting of strings
  854. for(int indx=0;indx<identArray.size();indx++)
  855. {
  856. //check to see if identifier is part of input string..turn to lowercase first..
  857. //Logger::writeToLog("index:"+String(indx)+" arrayItem:"+identArray.getReference(indx)+" line:\n"+str);
  858. int identPos = str.toLowerCase().indexOf(identArray.getReference(indx));
  859. if(identPos!=-1){
  860. StringArray strTokens, fillStrTokens;
  861. fillStrTokens.addTokens(str, ", \t", "\"");
  862. typeOfWidget = fillStrTokens[0];
  863. String newString = str.substring(identPos+identArray.getReference(indx).length());
  864. String tstr = newString.substring(0, newString.indexOf(0, ")"));
  865. if(tstr.length()==0) return 0;
  866. strTokens.addTokens(tstr.removeCharacters("\t()\""), ",", "\"");
  867. //for(int i=0;i<strTokens.size();i++)
  868. // showMessage(strTokens[i]);
  869. if(identArray[indx].equalsIgnoreCase("name(")){
  870. name = strTokens[0].trim();
  871. cabbageIdentifiers.set(CabbageIDs::name, strTokens[0].trim());
  872. }
  873. else if(identArray[indx].equalsIgnoreCase("plant(")){
  874. cabbageIdentifiers.set(CabbageIDs::plant, strTokens[0].trim());
  875. plant = strTokens[0].trim();
  876. }
  877. else if(identArray[indx].equalsIgnoreCase("caption(")){
  878. caption = strTokens[0].trim();
  879. cabbageIdentifiers.set(CabbageIDs::caption, strTokens[0].trim());
  880. }
  881. else if(identArray[indx].equalsIgnoreCase("channel(")||
  882. identArray[indx].equalsIgnoreCase(",channel(")||
  883. identArray[indx].equalsIgnoreCase(" chans(") ||
  884. identArray[indx].equalsIgnoreCase("channel(") ||
  885. identArray[indx].equalsIgnoreCase(" channels("))
  886. {
  887. channel = strTokens[0].trim();
  888. channels.add(channel);
  889. var array;
  890. array.append(strTokens[0].trim());
  891. if(str.containsIgnoreCase("xypad"))
  892. {
  893. xChannel = strTokens[0].trim();
  894. yChannel = strTokens[1].trim();
  895. cabbageIdentifiers.set(CabbageIDs::xchannel, strTokens[0].trim());
  896. cabbageIdentifiers.set(CabbageIDs::ychannel, strTokens[1].trim());
  897. }
  898. else if(str.containsIgnoreCase("vumeter"))
  899. {
  900. channels.clear();
  901. array.resize(0);
  902. for(int u=0;u<strTokens.size();u++)
  903. {
  904. channels.add(strTokens[u].trim());
  905. array.append(strTokens[u].trim());
  906. }
  907. }
  908. else{
  909. if(strTokens.size()>1)
  910. for(int i=1;i<strTokens.size();i++)
  911. {
  912. channels.add(strTokens[i].trim());
  913. array.append(strTokens[i].trim());
  914. }
  915. }
  916. cabbageIdentifiers.set(CabbageIDs::channel, array);
  917. }
  918. else if(identArray[indx].equalsIgnoreCase(" colour(")||
  919. identArray[indx].equalsIgnoreCase(",colour(")||
  920. identArray[indx].equalsIgnoreCase(" colours(")||
  921. identArray[indx].equalsIgnoreCase(", colours(")){
  922. if(strTokens.size()<2){
  923. colour = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  924. }
  925. else if(strTokens.size()==4)
  926. colour = Colour::fromRGBA (strTokens[0].getIntValue(),
  927. strTokens[1].getIntValue(),
  928. strTokens[2].getIntValue(),
  929. strTokens[3].getIntValue());
  930. else if(strTokens.size()==3)
  931. colour = Colour::fromRGB (strTokens[0].getIntValue(),
  932. strTokens[1].getIntValue(),
  933. strTokens[2].getIntValue());
  934. for(int i=0;i<strTokens.size();i++)
  935. colours.add(Colours::findColourForName(strTokens[i].trim(), Colours::white).toString());
  936. //var RGBA;
  937. //RGBA.append(colour.getRed());
  938. //RGBA.append(colour.getGreen());
  939. //RGBA.append(colour.getBlue());
  940. //RGBA.append(colour.getAlpha());
  941. cabbageIdentifiers.set(CabbageIDs::colour, colour.toString());
  942. }
  943. else if(identArray[indx].equalsIgnoreCase("fontcolour(")){
  944. if(strTokens.size()<2)
  945. fontcolour = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  946. else if(strTokens.size()==4)
  947. fontcolour = Colour::fromRGBA (strTokens[0].getIntValue(),
  948. strTokens[1].getIntValue(),
  949. strTokens[2].getIntValue(),
  950. strTokens[3].getIntValue());
  951. else if(strTokens.size()==3)
  952. fontcolour = Colour::fromRGBA (strTokens[0].getIntValue(),
  953. strTokens[1].getIntValue(),
  954. strTokens[2].getIntValue(),
  955. 255);
  956. cabbageIdentifiers.set(CabbageIDs::fontcolour, fontcolour.toString());
  957. }
  958. else if(identArray[indx].equalsIgnoreCase("tablecolour(")){
  959. var colours;
  960. for(int i=0;i<strTokens.size();i++)
  961. colours.append(strTokens[i].trim());
  962. cabbageIdentifiers.set(CabbageIDs::tablecolour, colours);
  963. }
  964. else if(identArray[indx].equalsIgnoreCase("trackercolour(")){
  965. if(strTokens.size()<2){
  966. if(strTokens[0].trim().length()>2)
  967. trackerFill = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  968. else
  969. trackerFill = Colour::fromRGBA (255, 255, 255, 0);
  970. }
  971. else if(strTokens.size()==4)
  972. trackerFill = Colour::fromRGBA (strTokens[0].getIntValue(),
  973. strTokens[1].getIntValue(),
  974. strTokens[2].getIntValue(),
  975. strTokens[3].getIntValue());
  976. else if(strTokens.size()==3)
  977. trackerFill = Colour::fromRGB (strTokens[0].getIntValue(),
  978. strTokens[1].getIntValue(),
  979. strTokens[2].getIntValue());
  980. cabbageIdentifiers.set(CabbageIDs::trackercolour, trackerFill.toString());
  981. }
  982. else if(identArray[indx].equalsIgnoreCase("kind(")){
  983. kind = strTokens[0].trim();
  984. cabbageIdentifiers.set(CabbageIDs::kind, strTokens[0].trim());
  985. }
  986. else if(identArray[indx].equalsIgnoreCase("file(")){
  987. file = strTokens[0].trim();
  988. cabbageIdentifiers.set(CabbageIDs::file, strTokens[0].trim());
  989. }
  990. else if(identArray[indx].equalsIgnoreCase("fill(")){
  991. if(strTokens.size()<2)
  992. fill = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  993. else if(strTokens.size()==4)
  994. fill = Colour::fromRGBA (strTokens[0].getIntValue(),
  995. strTokens[1].getIntValue(),
  996. strTokens[2].getIntValue(),
  997. strTokens[3].getIntValue());
  998. else if(strTokens.size()==3)
  999. fill = Colour::fromRGB (strTokens[0].getIntValue(),
  1000. strTokens[1].getIntValue(),
  1001. strTokens[2].getIntValue());
  1002. cabbageIdentifiers.set(CabbageIDs::fill, trackerFill.toString());
  1003. }
  1004. else if(identArray[indx].equalsIgnoreCase("shape(")){
  1005. shape = strTokens[0].trim();
  1006. cabbageIdentifiers.set(CabbageIDs::shape, strTokens[0].trim());
  1007. }
  1008. else if(identArray[indx].equalsIgnoreCase("outline(")){
  1009. if(strTokens.size()<2)
  1010. outline = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  1011. else if(strTokens.size()==4)
  1012. outline = Colour::fromRGBA (strTokens[0].getIntValue(),
  1013. strTokens[1].getIntValue(),
  1014. strTokens[2].getIntValue(),
  1015. strTokens[3].getIntValue());
  1016. else if(strTokens.size()==3)
  1017. outline = Colour::fromRGB (strTokens[0].getIntValue(),
  1018. strTokens[1].getIntValue(),
  1019. strTokens[2].getIntValue());
  1020. cabbageIdentifiers.set(CabbageIDs::outline, trackerFill.toString());
  1021. }
  1022. else if(identArray[indx].equalsIgnoreCase("textcolour(")){
  1023. if(strTokens.size()<2)
  1024. textcolour = Colours::findColourForName(strTokens[0].trim(), Colours::white);
  1025. else if(strTokens.size()==4)
  1026. textcolour = Colour::fromRGBA (strTokens[0].getIntValue(),
  1027. strTokens[1].getIntValue(),
  1028. strTokens[2].getIntValue(),
  1029. strTokens[3].getIntValue());
  1030. else if(strTokens.size()==3)
  1031. textcolour = Colour::fromRGB (strTokens[0].getIntValue(),
  1032. strTokens[1].getIntValue(),
  1033. strTokens[2].getIntValue());
  1034. cabbageIdentifiers.set(CabbageIDs::textcolour, textcolour.toString());
  1035. }
  1036. //!!! This haven't been set for the generic data system
  1037. else if(identArray[indx].equalsIgnoreCase("key(")){
  1038. key.clear();
  1039. if(strTokens.size()==1){
  1040. key.add(strTokens[0].trim());
  1041. }
  1042. else if(strTokens.size()==2){
  1043. key.add(strTokens[0].trim());
  1044. key.add(strTokens[1].trim());
  1045. }
  1046. else
  1047. debugMessage ="WARNING: Too many parameters passed to key(): usage key(\"key1\", \"key2\"\")";
  1048. }
  1049. else if(identArray[indx].equalsIgnoreCase("pluginid(")){
  1050. pluginID = strTokens[0].trim();
  1051. cabbageIdentifiers.set(CabbageIDs::pluginid, strTokens[0].trim());
  1052. }
  1053. else if(identArray[indx].equalsIgnoreCase("items(")||
  1054. identArray[indx].equalsIgnoreCase("text(")){
  1055. items.clear();//clear any unwanted items
  1056. text = strTokens[0];
  1057. //CabbageUtils::showMessage(typeOfWidget+":"+text);
  1058. var value;
  1059. for(int i= 0;i<(int)strTokens.size();i++)
  1060. {
  1061. //Logger::writeToLog(strTokens[i]);
  1062. String test = strTokens[i];
  1063. items.add(strTokens[i]);
  1064. value.append(strTokens[i].trim());
  1065. //if((int)strTokens.size()<2) {
  1066. // items.add(strTokens[i]);
  1067. // value.append(strTokens[i].trim());
  1068. // i++;
  1069. // }
  1070. comboRange = i+1;
  1071. }
  1072. //Logger::writeToLog(String(value.size())+typeOfWidget);
  1073. if((value.size()==1) && ((typeOfWidget=="button") || (typeOfWidget=="filebutton"))){
  1074. value.append(strTokens[0]);
  1075. //Logger::writeToLog(strTokens[0].trim());
  1076. }
  1077. cabbageIdentifiers.set(CabbageIDs::text, value);
  1078. cabbageIdentifiers.set(CabbageIDs::comborange, comboRange);
  1079. }
  1080. //!!! This haven't been set for the generic data system
  1081. else if(identArray[indx].equalsIgnoreCase("instrs(")){
  1082. items.clear();//clear any unwanted items
  1083. for(int i= 0;i<(int)strTokens.size();i++){
  1084. String test = strTokens[i];
  1085. items.add(strTokens[i]);
  1086. }
  1087. }
  1088. else if(identArray[indx].equalsIgnoreCase("preset(")){
  1089. //CabbageUtils::showMessage("preset is no longer supported, see docs");
  1090. }
  1091. else if(identArray[indx].equalsIgnoreCase(" mode(") ||
  1092. identArray[indx].equalsIgnoreCase(",mode(")){
  1093. cabbageIdentifiers.set(CabbageIDs::mode, strTokens[0].trim());
  1094. }
  1095. else if(identArray[indx].equalsIgnoreCase("native(")){
  1096. native = strTokens[0].trim();
  1097. cabbageIdentifiers.set("native", strTokens[0].trim());
  1098. //Logger::writeToLog(native);
  1099. }
  1100. else if(identArray[indx].equalsIgnoreCase("channeltype(")){
  1101. cabbageIdentifiers.set(CabbageIDs::channeltype, strTokens[0].trim());
  1102. }
  1103. else if(identArray[indx].equalsIgnoreCase("populate(")){
  1104. fileType = strTokens[0].trim();
  1105. cabbageIdentifiers.set(CabbageIDs::filetype, strTokens[0].trim());
  1106. if(strTokens.size()>1){
  1107. workingDir = strTokens[1].trim();
  1108. cabbageIdentifiers.set(CabbageIDs::workingdir, strTokens[1].trim());
  1109. }
  1110. }
  1111. else if(identArray[indx].equalsIgnoreCase("author(")){
  1112. author = strTokens[0].trim();
  1113. cabbageIdentifiers.set(CabbageIDs::author, strTokens[0].trim());
  1114. }
  1115. else if(identArray[indx].equalsIgnoreCase("tabs(")){
  1116. items.clear();
  1117. var value;
  1118. for(int i= 0;i<(int)strTokens.size();i++){
  1119. items.add(strTokens[i]);
  1120. value.append(strTokens[i].trim());
  1121. }
  1122. cabbageIdentifiers.set(CabbageIDs::tabs, strTokens[0].trim());
  1123. }
  1124. else if(identArray[indx].equalsIgnoreCase("tabpage(")){
  1125. tabpage = strTokens[0].trim();
  1126. cabbageIdentifiers.set(CabbageIDs::tabpage, strTokens[0].trim());
  1127. }
  1128. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1129. //numeric paramters
  1130. //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  1131. else if(identArray[indx].equalsIgnoreCase("size(")){
  1132. if(strTokens.size()<2){
  1133. debugMessage ="WARNING: Not enough paramters passed to size(): usage pos(width, height\")";
  1134. }
  1135. else{
  1136. sizeText = identArray.getReference(indx)+tstr+")";
  1137. width = strTokens[0].trim().getFloatValue();
  1138. height = strTokens[1].trim().getFloatValue();
  1139. cabbageIdentifiers.set(CabbageIDs::width, strTokens[0].trim().getFloatValue());
  1140. cabbageIdentifiers.set(CabbageIDs::height, strTokens[1].trim().getFloatValue());
  1141. }
  1142. }
  1143. //!!! This haven't been set for the generic data system
  1144. else if(identArray[indx].equalsIgnoreCase("scale(")){
  1145. if(strTokens.size()<2){
  1146. debugMessage ="WARNING: Not enough paramters passed to scale(): usage scale(width, height\")";
  1147. }
  1148. else{
  1149. scaleX = strTokens[0].trim().getFloatValue();
  1150. scaleX = scaleX/width;
  1151. scaleY = strTokens[1].trim().getFloatValue();
  1152. scaleY = scaleY/height;
  1153. }
  1154. }
  1155. else if(identArray[indx].equalsIgnoreCase("bounds(")){
  1156. if(strTokens.size()<3){
  1157. debugMessage ="WARNING: Not enough paramters passed to bounds(): usage pos(top, left width, height\")";
  1158. }
  1159. else{
  1160. left = strTokens[0].trim().getFloatValue();
  1161. top = strTokens[1].trim().getFloatValue();
  1162. width = strTokens[2].trim().getFloatValue();
  1163. if(strTokens.size()==3){
  1164. height = width;
  1165. cabbageIdentifiers.set(CabbageIDs::height, width);
  1166. }
  1167. else{
  1168. height = strTokens[3].trim().getFloatValue();
  1169. boundsText = identArray.getReference(indx)+tstr+")";
  1170. cabbageIdentifiers.set(CabbageIDs::left, strTokens[0].trim().getFloatValue());
  1171. cabbageIdentifiers.set(CabbageIDs::top, strTokens[1].trim().getFloatValue());
  1172. cabbageIdentifiers.set(CabbageIDs::width, strTokens[2].trim().getFloatValue());
  1173. cabbageIdentifiers.set(CabbageIDs::height, strTokens[3].trim().getFloatValue());
  1174. }
  1175. }
  1176. }
  1177. //!!! This haven't been set for the generic data system
  1178. else if(identArray[indx].equalsIgnoreCase("config(")){
  1179. vuConfig.clear();
  1180. for(int i= 0;i<(int)strTokens.size();i++){
  1181. vuConfig.add(strTokens[i].trim().getFloatValue());
  1182. }
  1183. }
  1184. else if(identArray[indx].equalsIgnoreCase("pos(")){
  1185. if(strTokens.size()<2){
  1186. debugMessage ="WARNING: Not enough paramters passed to pos(): usage pos(top, left\")";
  1187. }
  1188. else{
  1189. left = strTokens[0].trim().getFloatValue();
  1190. top = strTokens[1].trim().getFloatValue();
  1191. posText = identArray.getReference(indx)+tstr+")";
  1192. cabbageIdentifiers.set(CabbageIDs::left, strTokens[0].trim().getFloatValue());
  1193. cabbageIdentifiers.set(CabbageIDs::top, strTokens[1].trim().getFloatValue());
  1194. }
  1195. }
  1196. else if(identArray[indx].equalsIgnoreCase(" range(") ||
  1197. identArray[indx].equalsIgnoreCase(",range(")){
  1198. if(strTokens.size()<3){
  1199. debugMessage ="WARNING: Not enough paramters passed to range(): usage range(minx, max, value, incr\")";
  1200. }
  1201. else{
  1202. StringArray tempArray;
  1203. //showMessage(str);
  1204. //showMessage(strTokens[0]);
  1205. min = strTokens[0].trim().getDoubleValue();// getFloatValue();
  1206. max = strTokens[1].trim().getDoubleValue();//.getFloatValue();
  1207. cabbageIdentifiers.set(CabbageIDs::min, strTokens[0].trim().getDoubleValue());
  1208. cabbageIdentifiers.set(CabbageIDs::max, strTokens[1].trim().getDoubleValue());
  1209. tempArray.add(strTokens[0].trim());
  1210. tempArray.add(strTokens[1].trim());
  1211. if(strTokens.size()>2){
  1212. value = strTokens[2].trim().getDoubleValue();//.getFloatValue();
  1213. cabbageIdentifiers.set(CabbageIDs::value, strTokens[2].trim().getDoubleValue());
  1214. tempArray.add(strTokens[2].trim());
  1215. }
  1216. else value = 0;
  1217. if(strTokens.size()>3){
  1218. sliderSkew = strTokens[3].trim().getFloatValue();//.getFloatValue();
  1219. cabbageIdentifiers.set(CabbageIDs::sliderskew, strTokens[3].trim().getDoubleValue());
  1220. tempArray.add(strTokens[3].trim());
  1221. }
  1222. if(strTokens.size()>4){
  1223. sliderIncr = strTokens[4].trim().getDoubleValue();
  1224. tempArray.add(strTokens[4].trim());
  1225. cabbageIdentifiers.set(CabbageIDs::sliderincr, strTokens[4].trim().getDoubleValue());
  1226. }
  1227. sliderRange = max-min;
  1228. decimalPlaces = getNumberOfDecimalPlaces(tempArray);
  1229. if(decimalPlaces<1 && max<=1)
  1230. decimalPlaces = 2;
  1231. else
  1232. decimalPlaces = getNumberOfDecimalPlaces(tempArray);
  1233. cabbageIdentifiers.set(CabbageIDs::decimalplaces, decimalPlaces);
  1234. cabbageIdentifiers.set(CabbageIDs::range, sliderRange);
  1235. }
  1236. }
  1237. else if(identArray[indx].equalsIgnoreCase("rangex(")){
  1238. if(strTokens.size()<3){
  1239. debugMessage ="WARNING: Not enough paramters passed to range(): usage range(minx, max, value\")";
  1240. }
  1241. else{
  1242. minX = strTokens[0].removeCharacters("()").trim().getFloatValue();
  1243. maxX = strTokens[1].removeCharacters("()").trim().getFloatValue();
  1244. valueX = strTokens[2].removeCharacters("()").trim().getFloatValue();
  1245. cabbageIdentifiers.set(CabbageIDs::minx, strTokens[0].trim().getDoubleValue());
  1246. cabbageIdentifiers.set(CabbageIDs::maxx, strTokens[1].getDoubleValue());
  1247. cabbageIdentifiers.set(CabbageIDs::valuex, strTokens[2].getDoubleValue());
  1248. cabbageIdentifiers.set(CabbageIDs::rangex, maxX-minX);
  1249. if(strTokens.size()==4)
  1250. decimalPlaces = strTokens[3].trim().getFloatValue();
  1251. xypadRangeX = maxX-minX;
  1252. cabbageIdentifiers.set(CabbageIDs::decimalplaces, strTokens[3].trim().getDoubleValue());
  1253. }
  1254. }
  1255. else if(identArray[indx].equalsIgnoreCase("rangey(")){
  1256. if(strTokens.size()<3){
  1257. debugMessage ="WARNING: Not enough paramters passed to range(): usage range(minx, max, value\")";
  1258. }
  1259. else{
  1260. minY = strTokens[0].trim().getFloatValue();
  1261. maxY = strTokens[1].trim().getFloatValue();
  1262. valueY = strTokens[2].trim().getFloatValue();
  1263. cabbageIdentifiers.set(CabbageIDs::miny, strTokens[0].trim().getDoubleValue());
  1264. cabbageIdentifiers.set(CabbageIDs::maxy, strTokens[1].trim().getDoubleValue());
  1265. cabbageIdentifiers.set(CabbageIDs::valuey, strTokens[2].trim().getDoubleValue());
  1266. cabbageIdentifiers.set(CabbageIDs::rangey, maxY-minY);
  1267. if(strTokens.size()==4)
  1268. decimalPlaces = strTokens[3].trim().getFloatValue();
  1269. xypadRangeY = maxY-minY;
  1270. cabbageIdentifiers.set(CabbageIDs::decimalplaces, strTokens[3].trim().getDoubleValue());
  1271. }
  1272. }
  1273. else if(identArray[indx].equalsIgnoreCase("min(")){
  1274. min = strTokens[0].removeCharacters("()").trim().getFloatValue();
  1275. cabbageIdentifiers.set(CabbageIDs::min, strTokens[0].trim().getFloatValue());
  1276. }
  1277. else if(identArray[indx].equalsIgnoreCase("midictrl(")){
  1278. if(strTokens.size()<2){
  1279. debugMessage ="WARNING: Not enough paramters passed to midiCtrl(): usage midiCtrl(midiChan, midiCtrl\")";
  1280. }
  1281. else{
  1282. midiChan = strTokens[0].trim().getFloatValue();
  1283. midiCtrl = strTokens[1].trim().getFloatValue();
  1284. cabbageIdentifiers.set(CabbageIDs::midichan, strTokens[0].trim().getFloatValue());
  1285. cabbageIdentifiers.set(CabbageIDs::midictrl, strTokens[0].trim().getFloatValue());
  1286. }
  1287. }
  1288. else if(identArray[indx].equalsIgnoreCase("max(")){
  1289. max = strTokens[0].trim().getFloatValue();
  1290. cabbageIdentifiers.set(CabbageIDs::max, strTokens[0].trim().getFloatValue());
  1291. }
  1292. else if(identArray[indx].equalsIgnoreCase("tab(")){
  1293. tabbed = strTokens[0].trim().getFloatValue();
  1294. cabbageIdentifiers.set(CabbageIDs::tabbed, strTokens[0].trim().getFloatValue());
  1295. }
  1296. else if(identArray[indx].equalsIgnoreCase("latched(")){
  1297. cabbageIdentifiers.set(CabbageIDs::latched, strTokens[0].trim().getFloatValue());
  1298. }
  1299. else if(identArray[indx].equalsIgnoreCase("guirefresh(")){
  1300. cabbageIdentifiers.set(CabbageIDs::guirefresh, strTokens[0].trim().getFloatValue());
  1301. }
  1302. else if(identArray[indx].equalsIgnoreCase("textbox(")){
  1303. textBox = strTokens[0].trim().getFloatValue();
  1304. cabbageIdentifiers.set(CabbageIDs::textbox, strTokens[0].trim().getFloatValue());
  1305. }
  1306. else if(identArray[indx].equalsIgnoreCase("readonly(")){
  1307. cabbageIdentifiers.set(CabbageIDs::readonly, strTokens[0].trim().getFloatValue());
  1308. }
  1309. else if(identArray[indx].equalsIgnoreCase("tablenum(")||
  1310. (identArray[indx].equalsIgnoreCase("tablenumber("))||
  1311. identArray[indx].equalsIgnoreCase("tablenumbers(")||
  1312. identArray[indx].equalsIgnoreCase("tablenumbs(")){
  1313. tableNum = strTokens[0].trim().getFloatValue();
  1314. var value;
  1315. value.append(tableNum);
  1316. tableNumbers.add(tableNum);
  1317. numTables++;
  1318. if(strTokens.size()>1)
  1319. for(int i=1;i<strTokens.size();i++){
  1320. tableNumbers.add(strTokens[i].trim().getFloatValue());
  1321. value.append(strTokens[i].trim().getFloatValue());
  1322. numTables++;
  1323. }
  1324. cabbageIdentifiers.set(CabbageIDs::tablenumber, value);
  1325. //cabbageIdentifiers.set("tablenum", tableNum);
  1326. }
  1327. else if(identArray[indx].equalsIgnoreCase("popup(")){
  1328. plantButton = strTokens[0].trim().getIntValue();
  1329. cabbageIdentifiers.set(CabbageIDs::popup, strTokens[0].trim().getIntValue());
  1330. }
  1331. else if(identArray[indx].equalsIgnoreCase("drawmode(")){
  1332. var value;
  1333. if(strTokens.size()>0)
  1334. for(int i=0;i<strTokens.size();i++){
  1335. //add table modes to val array
  1336. value.append(strTokens[i].trim().getFloatValue());
  1337. }
  1338. cabbageIdentifiers.set(CabbageIDs::drawmode, value);
  1339. }
  1340. else if(identArray[indx].equalsIgnoreCase("resizemode(")){
  1341. var value;
  1342. if(strTokens.size()>0)
  1343. for(int i=0;i<strTokens.size();i++){
  1344. //add table modes to val array
  1345. value.append(strTokens[i].trim().getFloatValue());
  1346. }
  1347. cabbageIdentifiers.set(CabbageIDs::resizemode, value);
  1348. }
  1349. else if(identArray[indx].equalsIgnoreCase("amprange(")){
  1350. var value;
  1351. if(strTokens.size()>0)
  1352. for(int i=0;i<strTokens.size();i++){
  1353. //add table modes to val array
  1354. value.append(strTokens[i].trim().getFloatValue());
  1355. }
  1356. cabbageIdentifiers.set(CabbageIDs::amprange, value);
  1357. }
  1358. else if(identArray[indx].equalsIgnoreCase(",line(")||
  1359. identArray[indx].equalsIgnoreCase(" line(")){
  1360. cabbageIdentifiers.set("line", strTokens[0].trim().getFloatValue());
  1361. cabbageIdentifiers.set(CabbageIDs::line, strTokens[0].trim().getFloatValue());
  1362. }
  1363. else if(identArray[indx].equalsIgnoreCase("value(")){
  1364. value = strTokens[0].trim().getFloatValue();
  1365. cabbageIdentifiers.set(CabbageIDs::value, strTokens[0].trim().getFloatValue());
  1366. }
  1367. //!!! This haven't been set for the generic data system
  1368. else if(identArray[indx].equalsIgnoreCase("rctrls(")){
  1369. if(strTokens[0].trim().getFloatValue()>5)
  1370. rCtrls = 5;
  1371. else
  1372. rCtrls = strTokens[0].trim().getFloatValue();
  1373. }
  1374. else {
  1375. }
  1376. strTokens.clear();
  1377. }
  1378. else{
  1379. }
  1380. }
  1381. return 1;//must add error checking to this...
  1382. }
  1383. //=========================================================================
  1384. //retrieve numerical attributes
  1385. float CabbageGUIClass::getNumProp(Identifier prop)
  1386. {
  1387. return cabbageIdentifiers.getWithDefault(prop, -9999.f);
  1388. }
  1389. float CabbageGUIClass::getNumProp(Identifier prop, int index)
  1390. {
  1391. //this method should never be called...
  1392. jassert(1);
  1393. }
  1394. //set numerical attributes
  1395. void CabbageGUIClass::setNumProp(Identifier prop, float val)
  1396. {
  1397. cabbageIdentifiers.set(prop, val);
  1398. }
  1399. float CabbageGUIClass::getTableChannelValues(int index)
  1400. {
  1401. if(index<tableChannelValues.size())
  1402. return tableChannelValues.getReference(index);
  1403. else
  1404. return 0.f;
  1405. }
  1406. void CabbageGUIClass::addTableChannelValues()
  1407. {
  1408. tableChannelValues.add(-1.f);
  1409. }
  1410. void CabbageGUIClass::setTableChannelValues(int index, float val)
  1411. {
  1412. if(index<tableChannelValues.size())
  1413. tableChannelValues.set(index, val);
  1414. }
  1415. String CabbageGUIClass::getPropsString()
  1416. {
  1417. return type << String(" bounds(") << String(left) << String(", ") << String(top) << String(", ") << String(width)
  1418. << String(", ") << String(height) << String("), channel(\"") << channel << String("), xyChannel(\"") << xyChannel << String("\"), value(")
  1419. << String(value) << String("), items(\"") << items[0].trim() << String("\", \"") << items[1].trim() << String("\")")
  1420. << String("), range(\"") << String(min) << String(", ") << String(max) << String(", ") << String(value) << String("\")");
  1421. }
  1422. String CabbageGUIClass::getStringProp(Identifier prop, int index)
  1423. {
  1424. jassert(1);
  1425. /*
  1426. if(prop.equalsIgnoreCase("channel"))
  1427. return channels[index].trim();
  1428. else if(prop.equalsIgnoreCase("snapshotData"))
  1429. return snapshotData[index].trim();
  1430. else*/
  1431. return "";
  1432. }
  1433. Rectangle<int> CabbageGUIClass::getComponentBounds()
  1434. {
  1435. Rectangle<int> rect;
  1436. rect.setBounds(getNumProp("left"), getNumProp("top"), getNumProp("width"), getNumProp("height"));
  1437. return rect;
  1438. }
  1439. String CabbageGUIClass::getStringProp(Identifier prop)
  1440. {
  1441. var strings = cabbageIdentifiers.getWithDefault(prop, "");
  1442. if(strings.size()>0){
  1443. //Logger::writeToLog(prop+":"+strings[0].toString());
  1444. return strings[0].toString();
  1445. }
  1446. else{
  1447. //Logger::writeToLog(prop+":"+strings.toString());
  1448. //Logger::writeToLog(prop+":"+strings.toString());
  1449. return strings.toString();
  1450. }
  1451. }
  1452. StringArray CabbageGUIClass::getStringArrayProp(Identifier prop)
  1453. {
  1454. StringArray returnArray;
  1455. var strings = cabbageIdentifiers.getWithDefault(prop, "");
  1456. for(int i=0;i<strings.size();i++)
  1457. returnArray.add(strings[i].toString());
  1458. return returnArray;
  1459. }
  1460. String CabbageGUIClass::getStringArrayPropValue(Identifier prop, int index)
  1461. {
  1462. StringArray returnArray;
  1463. var strings = cabbageIdentifiers.getWithDefault(prop, "");
  1464. for(int i=0;i<strings.size();i++)
  1465. returnArray.add(strings[i].toString());
  1466. if(isPositiveAndBelow(index,strings.size()))
  1467. return returnArray[index];
  1468. else
  1469. return returnArray[strings.size()-1];
  1470. }
  1471. Array<int> CabbageGUIClass::getIntArrayProp(Identifier prop)
  1472. {
  1473. Array<int> returnArray;
  1474. var ints = cabbageIdentifiers.getWithDefault(prop, "");
  1475. for(int i=0;i<ints.size();i++)
  1476. returnArray.add(ints[i]);
  1477. return returnArray;
  1478. }
  1479. int CabbageGUIClass::getIntArrayPropValue(Identifier prop, int index)
  1480. {
  1481. Array<int> returnArray;
  1482. var ints = cabbageIdentifiers.getWithDefault(prop, "");
  1483. for(int i=0;i<ints.size();i++)
  1484. returnArray.add(ints[i]);
  1485. if(isPositiveAndBelow(index,ints.size()))
  1486. return returnArray[index];
  1487. else
  1488. return returnArray[ints.size()-1];
  1489. }
  1490. Array<float> CabbageGUIClass::getFloatArrayProp(Identifier prop)
  1491. {
  1492. Array<float> returnArray;
  1493. var ints = cabbageIdentifiers.getWithDefault(prop, "");
  1494. for(int i=0;i<ints.size();i++)
  1495. returnArray.add(ints[i]);
  1496. return returnArray;
  1497. }
  1498. float CabbageGUIClass::getFloatArrayPropValue(Identifier prop, int index)
  1499. {
  1500. Array<float> returnArray;
  1501. var ints = cabbageIdentifiers.getWithDefault(prop, "");
  1502. for(int i=0;i<ints.size();i++)
  1503. returnArray.add(ints[i]);
  1504. if(isPositiveAndBelow(index,ints.size()))
  1505. return returnArray[index];
  1506. else
  1507. return returnArray[ints.size()-1];
  1508. }
  1509. void CabbageGUIClass::setStringProp(Identifier prop, int index, String value)
  1510. {
  1511. jassert(1);
  1512. }
  1513. void CabbageGUIClass::setStringProp(Identifier prop, String val)
  1514. {
  1515. //if(prop=="reltoplant")
  1516. if(val.length()>0){
  1517. cabbageIdentifiers.set(prop, val);
  1518. //Logger::writeToLog(prop+":"+val);
  1519. }
  1520. }
  1521. String CabbageGUIClass::getColourProp(Identifier prop)
  1522. {
  1523. jassert(1);
  1524. }
  1525. String CabbageGUIClass::getStringForIdentifier(var propsArray, String identifier, String type)
  1526. {
  1527. String str;
  1528. if(type=="number"){
  1529. if(propsArray.size()>0){
  1530. for(int p=0;p<propsArray.size();p++)
  1531. str += propsArray[p].toString()+",";
  1532. str= identifier+str.dropLastCharacters(1)+"), ";
  1533. //Logger::writeToLog(str);
  1534. }
  1535. else
  1536. str = identifier+propsArray.toString()+"), ";
  1537. return str;
  1538. }
  1539. else if(type=="string"){
  1540. if(propsArray.size()>0){
  1541. for(int p=0;p<propsArray.size();p++)
  1542. str += "\""+propsArray[p].toString()+"\",";
  1543. str = identifier+str.dropLastCharacters(1)+"), ";
  1544. //Logger::writeToLog(str);
  1545. }
  1546. else
  1547. str = identifier+String("\"")+propsArray.toString()+"\"), ";
  1548. return str;
  1549. }
  1550. else
  1551. return "";
  1552. }
  1553. String CabbageGUIClass::getCabbageCodeFromIdentifiers(NamedValueSet props)
  1554. {
  1555. //Logger::writeToLog("::::getCabbageCodeFromIdentifiers::::");
  1556. String line;
  1557. var propsArray;
  1558. String temp="";
  1559. String type;
  1560. String colour, fontcolour;
  1561. String left, top, width, height, colR, colG, colB, colA, min, max, skew, drawmode, tablenumber,resizemode,
  1562. incr, slidervalue, value, maxx, maxy, minx, miny, valuex, valuey, channel, xchannel, ychannel,
  1563. amprange;
  1564. var rgbVals;
  1565. //run through the complete list of identifiers
  1566. for(int i=0;i<props.size();i++){
  1567. String identifier = props.getName(i).toString();
  1568. propsArray = props.getValueAt(i);
  1569. if(props.getValueAt(i).toString()!="")
  1570. {
  1571. if(props.getName(i).toString()=="top")
  1572. top = props.getValueAt(i).toString();
  1573. else if(props.getName(i).toString()=="left")
  1574. left = props.getValueAt(i).toString();
  1575. else if(props.getName(i).toString()=="width")
  1576. width = props.getValueAt(i).toString();
  1577. else if(props.getName(i).toString()=="height")
  1578. height = props.getValueAt(i).toString();
  1579. else if(identifier=="decimalplaces" ||
  1580. identifier=="range" ||
  1581. identifier=="name" ||
  1582. identifier=="scalex" ||
  1583. identifier=="scaley" ||
  1584. identifier=="basetype" ||
  1585. identifier=="kind" ||
  1586. identifier=="comborange")
  1587. {
  1588. //none of these identifiers need to be seen...
  1589. }
  1590. else if(props.getName(i).toString()=="colour" || props.getName(i).toString()=="fontcolour"
  1591. || props.getName(i).toString()=="trackercolour" || props.getName(i).toString()=="fill" ||
  1592. props.getName(i).toString()=="outline")
  1593. {
  1594. if(propsArray.size()>0){
  1595. for(int y=0;y<propsArray.size();y++){
  1596. rgbVals.append(propsArray[y]);
  1597. }
  1598. colour = colour << props.getName(i).toString() <<"("<<rgbVals[0].toString() << ", " << rgbVals[1].toString() << ", " << rgbVals[2].toString() << ", " << rgbVals[3].toString() << "), ";
  1599. }
  1600. else{
  1601. Colour col = Colour::fromString(props.getValueAt(i).toString());
  1602. colour = colour << props.getName(i).toString() << "(" << (float)col.getRed() << ", " << (float)col.getGreen() << ", " << (float)col.getBlue() << ", " << (float)col.getAlpha() << "), ";
  1603. }
  1604. rgbVals.resize(0);
  1605. }
  1606. else if((identifier=="popup") && (int(props.getValueAt(i))==0)){
  1607. //only show if not set to default
  1608. }
  1609. else if((identifier=="midictrl") && (int(props.getValueAt(i))==-99)){
  1610. //only show if not set to default
  1611. }
  1612. else if((identifier=="midichan") && (int(props.getValueAt(i))==-99)){
  1613. //only show if not set to default
  1614. }
  1615. else if((identifier=="channel")){
  1616. channel = getStringForIdentifier(propsArray, "channel(", "string");
  1617. }
  1618. else if(identifier=="drawmode"){
  1619. drawmode = getStringForIdentifier(propsArray, "drawmode(", "number");
  1620. }
  1621. else if((identifier=="amprange")){
  1622. amprange = getStringForIdentifier(propsArray, "amprange(", "number");
  1623. }
  1624. else if((identifier=="tablenumber")){
  1625. tablenumber = getStringForIdentifier(propsArray, "tablenumber(", "number");
  1626. }
  1627. else if((identifier=="resizemode")){
  1628. resizemode = getStringForIdentifier(propsArray, "resizemode(", "number");
  1629. }
  1630. else if((identifier=="xchannel")){
  1631. xchannel = props.getValueAt(i).toString();
  1632. }
  1633. else if((identifier=="ychannel")){
  1634. ychannel = props.getValueAt(i).toString();
  1635. }
  1636. //grab slider settings..
  1637. else if(identifier=="min")
  1638. min = props.getValueAt(i).toString();
  1639. else if(identifier=="max")
  1640. max = props.getValueAt(i).toString();
  1641. else if(identifier=="value"){
  1642. slidervalue = props.getValueAt(i).toString();
  1643. value = "value("+slidervalue+"), ";
  1644. }
  1645. else if(identifier=="sliderskew")
  1646. skew = props.getValueAt(i).toString();
  1647. else if(identifier=="sliderincr")
  1648. incr = props.getValueAt(i).toString();
  1649. //grab xypad x-ranges...
  1650. else if(identifier=="minx")
  1651. minx = props.getValueAt(i).toString();
  1652. else if(identifier=="maxx")
  1653. maxx = props.getValueAt(i).toString();
  1654. else if(identifier=="valuex")
  1655. valuex = props.getValueAt(i).toString();
  1656. //grab xypad y-ranges...
  1657. else if(identifier=="miny")
  1658. miny = props.getValueAt(i).toString();
  1659. else if(identifier=="maxy")
  1660. maxy = props.getValueAt(i).toString();
  1661. else if(identifier=="valuey")
  1662. valuey = props.getValueAt(i).toString();
  1663. else if((identifier=="textbox") && (int(props.getValueAt(i))==0)){
  1664. //only show if not set to default
  1665. }
  1666. else if(identifier=="type")
  1667. type = props.getValueAt(i).toString();
  1668. else{
  1669. //catch all other identifiers....
  1670. line = line + identifier+String("(");
  1671. if(propsArray.size()>0)
  1672. for(int y=0;y<propsArray.size();y++){
  1673. if(propsArray[y].isString())
  1674. temp = temp+"\""+propsArray[y].toString()+"\", ";
  1675. else
  1676. temp = temp+propsArray[y].toString()+", ";
  1677. }
  1678. else
  1679. if(props.getValueAt(i).isString())
  1680. temp = temp+"\""+props.getValueAt(i).toString()+"\"";
  1681. else
  1682. temp = temp+props.getValueAt(i).toString();
  1683. line = line + temp + "), ";
  1684. temp = "";
  1685. }
  1686. }
  1687. }
  1688. String completeLine;
  1689. String range = "range("+min+", "+max+", "+slidervalue+", "+skew+", "+incr+"), ";
  1690. String rangex = "rangex("+minx+", "+maxx+", "+valuex+"), ";
  1691. String rangey = "rangey("+miny+", "+maxy+", "+valuey+"), ";
  1692. String xypadChannels = "channel(\""+xchannel+"\", \""+ychannel+"\"), ";
  1693. if((type == "rslider") || (type=="hslider") || (type=="vslider"))
  1694. completeLine = type+" bounds("+left+", "+top+", "+width+", "+height+"), "+channel+range+line.replace(", )", ")")+ " "+colour;
  1695. else if(type=="xypad")
  1696. completeLine = type+" bounds("+left+", "+top+", "+width+", "+height+"), "+xypadChannels+rangex+rangey+line.replace(", )", ")")+ " "+colour;
  1697. else
  1698. completeLine = type+" bounds("+left+", "+top+", "+width+", "+height+"), "+channel+line.replace(", )", ")")+ " "+tablenumber+drawmode+amprange+colour+resizemode+value;
  1699. return completeLine;
  1700. }