home *** CD-ROM | disk | FTP | other *** search
/ Java 1.2 How-To / JavaHowTo.iso / 3rdParty / Bluette / Plastic / demo / GraphLayout.pla < prev    next >
Text File  |  1997-10-28  |  22KB  |  2,010 lines

  1. <string>
  2. Graph Layout
  3. <string>
  4. Min-Kyu Lee
  5. <integer>
  6. 0
  7. <string>
  8.  
  9. <string>
  10.  
  11. <integer>
  12. 3
  13. <string>
  14. java.util.*
  15. <string>
  16. java.awt.*
  17. <string>
  18. java.applet.Applet
  19. <storable>
  20. <string>
  21. TGraph
  22. <integer>
  23. 14
  24. <storable>
  25. <string>
  26. TJavaClass
  27. <integer>
  28. 62
  29. <integer>
  30. 147
  31. <integer>
  32. 172
  33. <integer>
  34. 277
  35. <string>
  36. Node
  37. <integer>
  38. 6
  39. <storable>
  40. <string>
  41. TJavaAttribute
  42. <string>
  43. x
  44. <string>
  45. double
  46. <string>
  47.  
  48. <integer>
  49. 0
  50. <boolean>
  51. FALSE
  52. <boolean>
  53. FALSE
  54. <storable>
  55. <string>
  56. TJavaAttribute
  57. <string>
  58. y
  59. <string>
  60. double
  61. <string>
  62.  
  63. <integer>
  64. 0
  65. <boolean>
  66. FALSE
  67. <boolean>
  68. FALSE
  69. <storable>
  70. <string>
  71. TJavaAttribute
  72. <string>
  73. dx
  74. <string>
  75. double
  76. <string>
  77.  
  78. <integer>
  79. 0
  80. <boolean>
  81. FALSE
  82. <boolean>
  83. FALSE
  84. <storable>
  85. <string>
  86. TJavaAttribute
  87. <string>
  88. dy
  89. <string>
  90. double
  91. <string>
  92.  
  93. <integer>
  94. 0
  95. <boolean>
  96. FALSE
  97. <boolean>
  98. FALSE
  99. <storable>
  100. <string>
  101. TJavaAttribute
  102. <string>
  103. fixed
  104. <string>
  105. boolean
  106. <string>
  107.  
  108. <integer>
  109. 0
  110. <boolean>
  111. FALSE
  112. <boolean>
  113. FALSE
  114. <storable>
  115. <string>
  116. TJavaAttribute
  117. <string>
  118. lbl
  119. <string>
  120. String
  121. <string>
  122.  
  123. <integer>
  124. 0
  125. <boolean>
  126. FALSE
  127. <boolean>
  128. FALSE
  129. <integer>
  130. 0
  131. <integer>
  132. 0
  133. <boolean>
  134. FALSE
  135. <boolean>
  136. TRUE
  137. <integer>
  138. 0
  139. <storable>
  140. <string>
  141. TJavaClass
  142. <integer>
  143. 202
  144. <integer>
  145. 147
  146. <integer>
  147. 312
  148. <integer>
  149. 227
  150. <string>
  151. Edge
  152. <integer>
  153. 3
  154. <storable>
  155. <string>
  156. TJavaAttribute
  157. <string>
  158. from
  159. <string>
  160. int
  161. <string>
  162.  
  163. <integer>
  164. 0
  165. <boolean>
  166. FALSE
  167. <boolean>
  168. FALSE
  169. <storable>
  170. <string>
  171. TJavaAttribute
  172. <string>
  173. to
  174. <string>
  175. int
  176. <string>
  177.  
  178. <integer>
  179. 0
  180. <boolean>
  181. FALSE
  182. <boolean>
  183. FALSE
  184. <storable>
  185. <string>
  186. TJavaAttribute
  187. <string>
  188. len
  189. <string>
  190. double
  191. <string>
  192.  
  193. <integer>
  194. 0
  195. <boolean>
  196. FALSE
  197. <boolean>
  198. FALSE
  199. <integer>
  200. 0
  201. <integer>
  202. 0
  203. <boolean>
  204. FALSE
  205. <boolean>
  206. TRUE
  207. <integer>
  208. 0
  209. <storable>
  210. <string>
  211. TJavaClass
  212. <integer>
  213. 402
  214. <integer>
  215. 32
  216. <integer>
  217. 512
  218. <integer>
  219. 67
  220. <string>
  221. Panel
  222. <integer>
  223. 0
  224. <integer>
  225. 0
  226. <integer>
  227. 0
  228. <boolean>
  229. FALSE
  230. <boolean>
  231. FALSE
  232. <integer>
  233. 0
  234. <storable>
  235. <string>
  236. TJavaClass
  237. <integer>
  238. 412
  239. <integer>
  240. 197
  241. <integer>
  242. 697
  243. <integer>
  244. 377
  245. <string>
  246. GraphPanel
  247. <integer>
  248. 17
  249. <storable>
  250. <string>
  251. TJavaAttribute
  252. <string>
  253. nnodes
  254. <string>
  255. int
  256. <string>
  257.  
  258. <integer>
  259. 0
  260. <boolean>
  261. FALSE
  262. <boolean>
  263. FALSE
  264. <storable>
  265. <string>
  266. TJavaAttribute
  267. <string>
  268. nedges
  269. <string>
  270. int
  271. <string>
  272.  
  273. <integer>
  274. 0
  275. <boolean>
  276. FALSE
  277. <boolean>
  278. FALSE
  279. <storable>
  280. <string>
  281. TJavaAttribute
  282. <string>
  283. stress
  284. <string>
  285. boolean
  286. <string>
  287.  
  288. <integer>
  289. 0
  290. <boolean>
  291. FALSE
  292. <boolean>
  293. FALSE
  294. <storable>
  295. <string>
  296. TJavaAttribute
  297. <string>
  298. random
  299. <string>
  300. boolean
  301. <string>
  302.  
  303. <integer>
  304. 0
  305. <boolean>
  306. FALSE
  307. <boolean>
  308. FALSE
  309. <storable>
  310. <string>
  311. TJavaAttribute
  312. <string>
  313. pick
  314. <string>
  315. Node
  316. <string>
  317.  
  318. <integer>
  319. 0
  320. <boolean>
  321. FALSE
  322. <boolean>
  323. FALSE
  324. <storable>
  325. <string>
  326. TJavaAttribute
  327. <string>
  328. pickfixed
  329. <string>
  330. boolean
  331. <string>
  332.  
  333. <integer>
  334. 0
  335. <boolean>
  336. FALSE
  337. <boolean>
  338. FALSE
  339. <storable>
  340. <string>
  341. TJavaAttribute
  342. <string>
  343. offscreen
  344. <string>
  345. Image
  346. <string>
  347.  
  348. <integer>
  349. 0
  350. <boolean>
  351. FALSE
  352. <boolean>
  353. FALSE
  354. <storable>
  355. <string>
  356. TJavaAttribute
  357. <string>
  358. offscreensize
  359. <string>
  360. Dimension
  361. <string>
  362.  
  363. <integer>
  364. 0
  365. <boolean>
  366. FALSE
  367. <boolean>
  368. FALSE
  369. <storable>
  370. <string>
  371. TJavaAttribute
  372. <string>
  373. offgraphics
  374. <string>
  375. Graphics
  376. <string>
  377.  
  378. <integer>
  379. 0
  380. <boolean>
  381. FALSE
  382. <boolean>
  383. FALSE
  384. <storable>
  385. <string>
  386. TJavaAttribute
  387. <string>
  388. fixedColor
  389. <string>
  390. Color
  391. <string>
  392. Color.red
  393. <integer>
  394. 0
  395. <boolean>
  396. TRUE
  397. <boolean>
  398. FALSE
  399. <storable>
  400. <string>
  401. TJavaAttribute
  402. <string>
  403. selectColor
  404. <string>
  405. Color
  406. <string>
  407. Color.pink
  408. <integer>
  409. 0
  410. <boolean>
  411. TRUE
  412. <boolean>
  413. FALSE
  414. <storable>
  415. <string>
  416. TJavaAttribute
  417. <string>
  418. edgeColor
  419. <string>
  420. Color
  421. <string>
  422. Color.black
  423. <integer>
  424. 0
  425. <boolean>
  426. TRUE
  427. <boolean>
  428. FALSE
  429. <storable>
  430. <string>
  431. TJavaAttribute
  432. <string>
  433. nodeColor
  434. <string>
  435. Color
  436. <string>
  437. new Color(250, 220, 100)
  438. <integer>
  439. 0
  440. <boolean>
  441. TRUE
  442. <boolean>
  443. FALSE
  444. <storable>
  445. <string>
  446. TJavaAttribute
  447. <string>
  448. stressColor
  449. <string>
  450. Color
  451. <string>
  452. Color.darkGray
  453. <integer>
  454. 0
  455. <boolean>
  456. TRUE
  457. <boolean>
  458. FALSE
  459. <storable>
  460. <string>
  461. TJavaAttribute
  462. <string>
  463. arcColor1
  464. <string>
  465. Color
  466. <string>
  467. Color.black
  468. <integer>
  469. 0
  470. <boolean>
  471. TRUE
  472. <boolean>
  473. FALSE
  474. <storable>
  475. <string>
  476. TJavaAttribute
  477. <string>
  478. arcColor2
  479. <string>
  480. Color
  481. <string>
  482. Color.pink
  483. <integer>
  484. 0
  485. <boolean>
  486. TRUE
  487. <boolean>
  488. FALSE
  489. <storable>
  490. <string>
  491. TJavaAttribute
  492. <string>
  493. arcColor3
  494. <string>
  495. Color
  496. <string>
  497. Color.red
  498. <integer>
  499. 0
  500. <boolean>
  501. TRUE
  502. <boolean>
  503. FALSE
  504. <integer>
  505. 13
  506. <storable>
  507. <string>
  508. TJavaConstructor
  509. <string>
  510.  
  511. <string>
  512.  
  513. <integer>
  514. 1
  515. <storable>
  516. <string>
  517. TJavaArgument
  518. <string>
  519. graph
  520. <string>
  521. Graph
  522. <integer>
  523. 1
  524. <string>
  525. this.graph = graph;
  526. <storable>
  527. <string>
  528. TJavaMethod
  529. <string>
  530. findNode
  531. <string>
  532. int
  533. <integer>
  534. 1
  535. <storable>
  536. <string>
  537. TJavaArgument
  538. <string>
  539. lbl
  540. <string>
  541. String
  542. <integer>
  543. 0
  544. <boolean>
  545. FALSE
  546. <boolean>
  547. FALSE
  548. <boolean>
  549. FALSE
  550. <boolean>
  551. FALSE
  552. <string>
  553.  
  554. <integer>
  555. 6
  556. <string>
  557. for (int i = 0 ; i < nnodes ; i++) {
  558. <string>
  559.     if (nodes[i].lbl.equals(lbl)) {
  560. <string>
  561.         return i;
  562. <string>
  563.     }
  564. <string>
  565. }
  566. <string>
  567. return addNode(lbl);
  568. <storable>
  569. <string>
  570. TJavaMethod
  571. <string>
  572. addNode
  573. <string>
  574. int
  575. <integer>
  576. 1
  577. <storable>
  578. <string>
  579. TJavaArgument
  580. <string>
  581. lbl
  582. <string>
  583. String
  584. <integer>
  585. 0
  586. <boolean>
  587. FALSE
  588. <boolean>
  589. FALSE
  590. <boolean>
  591. FALSE
  592. <boolean>
  593. FALSE
  594. <string>
  595.  
  596. <integer>
  597. 6
  598. <string>
  599. Node n = new Node();
  600. <string>
  601. n.x = 10 + 380*Math.random();
  602. <string>
  603. n.y = 10 + 380*Math.random();
  604. <string>
  605. n.lbl = lbl;
  606. <string>
  607. nodes[nnodes] = n;
  608. <string>
  609. return nnodes++;
  610. <storable>
  611. <string>
  612. TJavaMethod
  613. <string>
  614. addEdge
  615. <string>
  616.  
  617. <integer>
  618. 3
  619. <storable>
  620. <string>
  621. TJavaArgument
  622. <string>
  623. from
  624. <string>
  625. String
  626. <storable>
  627. <string>
  628. TJavaArgument
  629. <string>
  630. to
  631. <string>
  632. String
  633. <storable>
  634. <string>
  635. TJavaArgument
  636. <string>
  637. len
  638. <string>
  639. int
  640. <integer>
  641. 0
  642. <boolean>
  643. FALSE
  644. <boolean>
  645. FALSE
  646. <boolean>
  647. FALSE
  648. <boolean>
  649. FALSE
  650. <string>
  651.  
  652. <integer>
  653. 5
  654. <string>
  655. Edge e = new Edge();
  656. <string>
  657. e.from = findNode(from);
  658. <string>
  659. e.to = findNode(to);
  660. <string>
  661. e.len = len;
  662. <string>
  663. edges[nedges++] = e;
  664. <storable>
  665. <string>
  666. TJavaMethod
  667. <string>
  668. run
  669. <string>
  670.  
  671. <integer>
  672. 0
  673. <integer>
  674. 3
  675. <boolean>
  676. FALSE
  677. <boolean>
  678. FALSE
  679. <boolean>
  680. FALSE
  681. <boolean>
  682. FALSE
  683. <string>
  684.  
  685. <integer>
  686. 16
  687. <string>
  688. while (true) {
  689. <string>
  690.     relax();
  691. <string>
  692.     if (random && (Math.random() < 0.03)) {
  693. <string>
  694.     Node n = nodes[(int)(Math.random() * nnodes)];
  695. <string>
  696.     if (!n.fixed) {
  697. <string>
  698.         n.x += 100*Math.random() - 50;
  699. <string>
  700.         n.y += 100*Math.random() - 50;
  701. <string>
  702.     }
  703. <string>
  704.     graph.play(graph.getCodeBase(), "audio/drip.au");
  705. <string>
  706.     }
  707. <string>
  708.     try {
  709. <string>
  710.     Thread.sleep(100);
  711. <string>
  712.     } catch (InterruptedException e) {
  713. <string>
  714.     break;
  715. <string>
  716.     }
  717. <string>
  718. }
  719. <storable>
  720. <string>
  721. TJavaMethod
  722. <string>
  723. relax
  724. <string>
  725.  
  726. <integer>
  727. 0
  728. <integer>
  729. 0
  730. <boolean>
  731. FALSE
  732. <boolean>
  733. FALSE
  734. <boolean>
  735. FALSE
  736. <boolean>
  737. TRUE
  738. <string>
  739.  
  740. <integer>
  741. 66
  742. <string>
  743. for (int i = 0 ; i < nedges ; i++) {
  744. <string>
  745.     Edge e = edges[i];
  746. <string>
  747.     double vx = nodes[e.to].x - nodes[e.from].x;
  748. <string>
  749.     double vy = nodes[e.to].y - nodes[e.from].y;
  750. <string>
  751.     double len = Math.sqrt(vx * vx + vy * vy);
  752. <string>
  753.     double f = (edges[i].len - len) / (len * 3);
  754. <string>
  755.     double dx = f * vx;
  756. <string>
  757.     double dy = f * vy;
  758. <string>
  759.  
  760. <string>
  761.     nodes[e.to].dx += dx;
  762. <string>
  763.     nodes[e.to].dy += dy;
  764. <string>
  765.     nodes[e.from].dx += -dx;
  766. <string>
  767.     nodes[e.from].dy += -dy;
  768. <string>
  769. }
  770. <string>
  771.  
  772. <string>
  773. for (int i = 0 ; i < nnodes ; i++) {
  774. <string>
  775.     Node n1 = nodes[i];
  776. <string>
  777.     double dx = 0;
  778. <string>
  779.     double dy = 0;
  780. <string>
  781.  
  782. <string>
  783.     for (int j = 0 ; j < nnodes ; j++) {
  784. <string>
  785.     if (i == j) {
  786. <string>
  787.         continue;
  788. <string>
  789.     }
  790. <string>
  791.     Node n2 = nodes[j];
  792. <string>
  793.     double vx = n1.x - n2.x;
  794. <string>
  795.     double vy = n1.y - n2.y;
  796. <string>
  797.     double len = vx * vx + vy * vy;
  798. <string>
  799.     if (len == 0) {
  800. <string>
  801.         dx += Math.random();
  802. <string>
  803.         dy += Math.random();
  804. <string>
  805.     } else if (len < 100*100) {
  806. <string>
  807.         dx += vx / len;
  808. <string>
  809.         dy += vy / len;
  810. <string>
  811.     }
  812. <string>
  813.     }
  814. <string>
  815.     double dlen = dx * dx + dy * dy;
  816. <string>
  817.     if (dlen > 0) {
  818. <string>
  819.     dlen = Math.sqrt(dlen) / 2;
  820. <string>
  821.     n1.dx += dx / dlen;
  822. <string>
  823.     n1.dy += dy / dlen;
  824. <string>
  825.     }
  826. <string>
  827. }
  828. <string>
  829.  
  830. <string>
  831. Dimension d = size();
  832. <string>
  833. for (int i = 0 ; i < nnodes ; i++) {
  834. <string>
  835.     Node n = nodes[i];
  836. <string>
  837.     if (!n.fixed) {
  838. <string>
  839.     n.x += Math.max(-5, Math.min(5, n.dx));
  840. <string>
  841.     n.y += Math.max(-5, Math.min(5, n.dy));
  842. <string>
  843.         // System.out.println("v= " + n.dx + "," + n.dy);
  844. <string>
  845.     if (n.x < 0) {
  846. <string>
  847.         n.x = 0;
  848. <string>
  849.     } else if (n.x > d.width) {
  850. <string>
  851.         n.x = d.width;
  852. <string>
  853.     }
  854. <string>
  855.     if (n.y < 0) {
  856. <string>
  857.         n.y = 0;
  858. <string>
  859.     } else if (n.y > d.height) {
  860. <string>
  861.         n.y = d.height;
  862. <string>
  863.     }
  864. <string>
  865.     }
  866. <string>
  867.     n.dx /= 2;
  868. <string>
  869.     n.dy /= 2;
  870. <string>
  871. }
  872. <string>
  873. repaint();
  874. <storable>
  875. <string>
  876. TJavaMethod
  877. <string>
  878. paintNode
  879. <string>
  880.  
  881. <integer>
  882. 3
  883. <storable>
  884. <string>
  885. TJavaArgument
  886. <string>
  887. g
  888. <string>
  889. Graphics
  890. <storable>
  891. <string>
  892. TJavaArgument
  893. <string>
  894. n
  895. <string>
  896. Node
  897. <storable>
  898. <string>
  899. TJavaArgument
  900. <string>
  901. fm
  902. <string>
  903. FontMetrics
  904. <integer>
  905. 3
  906. <boolean>
  907. FALSE
  908. <boolean>
  909. FALSE
  910. <boolean>
  911. FALSE
  912. <boolean>
  913. FALSE
  914. <string>
  915.  
  916. <integer>
  917. 9
  918. <string>
  919. int x = (int)n.x;
  920. <string>
  921. int y = (int)n.y;
  922. <string>
  923. g.setColor((n == pick) ? selectColor : (n.fixed ? fixedColor : nodeColor));
  924. <string>
  925. int w = fm.stringWidth(n.lbl) + 10;
  926. <string>
  927. int h = fm.getHeight() + 4;
  928. <string>
  929. g.fillRect(x - w/2, y - h / 2, w, h);
  930. <string>
  931. g.setColor(Color.black);
  932. <string>
  933. g.drawRect(x - w/2, y - h / 2, w-1, h-1);
  934. <string>
  935. g.drawString(n.lbl, x - (w-10)/2, (y - (h-4)/2) + fm.getAscent());
  936. <storable>
  937. <string>
  938. TJavaMethod
  939. <string>
  940. update
  941. <string>
  942.  
  943. <integer>
  944. 1
  945. <storable>
  946. <string>
  947. TJavaArgument
  948. <string>
  949. g
  950. <string>
  951. Graphics
  952. <integer>
  953. 3
  954. <boolean>
  955. FALSE
  956. <boolean>
  957. FALSE
  958. <boolean>
  959. FALSE
  960. <boolean>
  961. TRUE
  962. <string>
  963.  
  964. <integer>
  965. 33
  966. <string>
  967. Dimension d = size();
  968. <string>
  969. if ((offscreen == null) || (d.width != offscreensize.width) || (d.height != offscreensize.height)) {
  970. <string>
  971.     offscreen = createImage(d.width, d.height);
  972. <string>
  973.     offscreensize = d;
  974. <string>
  975.     offgraphics = offscreen.getGraphics();
  976. <string>
  977.     offgraphics.setFont(getFont());
  978. <string>
  979. }
  980. <string>
  981.  
  982. <string>
  983. offgraphics.setColor(getBackground());
  984. <string>
  985. offgraphics.fillRect(0, 0, d.width, d.height);
  986. <string>
  987. for (int i = 0 ; i < nedges ; i++) {
  988. <string>
  989.     Edge e = edges[i];
  990. <string>
  991.     int x1 = (int)nodes[e.from].x;
  992. <string>
  993.     int y1 = (int)nodes[e.from].y;
  994. <string>
  995.     int x2 = (int)nodes[e.to].x;
  996. <string>
  997.     int y2 = (int)nodes[e.to].y;
  998. <string>
  999.     int len = (int)Math.abs(Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)) - e.len);
  1000. <string>
  1001.     offgraphics.setColor((len < 10) ? arcColor1 : (len < 20 ? arcColor2 : arcColor3)) ;
  1002. <string>
  1003.     offgraphics.drawLine(x1, y1, x2, y2);
  1004. <string>
  1005.     if (stress) {
  1006. <string>
  1007.     String lbl = String.valueOf(len);
  1008. <string>
  1009.     offgraphics.setColor(stressColor);
  1010. <string>
  1011.     offgraphics.drawString(lbl, x1 + (x2-x1)/2, y1 + (y2-y1)/2);
  1012. <string>
  1013.     offgraphics.setColor(edgeColor);
  1014. <string>
  1015.     }
  1016. <string>
  1017. }
  1018. <string>
  1019.  
  1020. <string>
  1021. FontMetrics fm = offgraphics.getFontMetrics();
  1022. <string>
  1023. for (int i = 0 ; i < nnodes ; i++) {
  1024. <string>
  1025.     paintNode(offgraphics, nodes[i], fm);
  1026. <string>
  1027. }
  1028. <string>
  1029.  
  1030. <string>
  1031. g.drawImage(offscreen, 0, 0, null);
  1032. <storable>
  1033. <string>
  1034. TJavaMethod
  1035. <string>
  1036. mouseDown
  1037. <string>
  1038. boolean
  1039. <integer>
  1040. 3
  1041. <storable>
  1042. <string>
  1043. TJavaArgument
  1044. <string>
  1045. evt
  1046. <string>
  1047. Event
  1048. <storable>
  1049. <string>
  1050. TJavaArgument
  1051. <string>
  1052. x
  1053. <string>
  1054. int
  1055. <storable>
  1056. <string>
  1057. TJavaArgument
  1058. <string>
  1059. y
  1060. <string>
  1061. int
  1062. <integer>
  1063. 3
  1064. <boolean>
  1065. FALSE
  1066. <boolean>
  1067. FALSE
  1068. <boolean>
  1069. FALSE
  1070. <boolean>
  1071. TRUE
  1072. <string>
  1073.  
  1074. <integer>
  1075. 15
  1076. <string>
  1077. double bestdist = Double.MAX_VALUE;
  1078. <string>
  1079. for (int i = 0 ; i < nnodes ; i++) {
  1080. <string>
  1081.     Node n = nodes[i];
  1082. <string>
  1083.     double dist = (n.x - x) * (n.x - x) + (n.y - y) * (n.y - y);
  1084. <string>
  1085.     if (dist < bestdist) {
  1086. <string>
  1087.     pick = n;
  1088. <string>
  1089.     bestdist = dist;
  1090. <string>
  1091.     }
  1092. <string>
  1093. }
  1094. <string>
  1095. pickfixed = pick.fixed;
  1096. <string>
  1097. pick.fixed = true;
  1098. <string>
  1099. pick.x = x;
  1100. <string>
  1101. pick.y = y;
  1102. <string>
  1103. repaint();
  1104. <string>
  1105. return true;
  1106. <storable>
  1107. <string>
  1108. TJavaMethod
  1109. <string>
  1110. mouseDrag
  1111. <string>
  1112. boolean
  1113. <integer>
  1114. 3
  1115. <storable>
  1116. <string>
  1117. TJavaArgument
  1118. <string>
  1119. evt
  1120. <string>
  1121. Event
  1122. <storable>
  1123. <string>
  1124. TJavaArgument
  1125. <string>
  1126. x
  1127. <string>
  1128. int
  1129. <storable>
  1130. <string>
  1131. TJavaArgument
  1132. <string>
  1133. y
  1134. <string>
  1135. int
  1136. <integer>
  1137. 3
  1138. <boolean>
  1139. FALSE
  1140. <boolean>
  1141. FALSE
  1142. <boolean>
  1143. FALSE
  1144. <boolean>
  1145. TRUE
  1146. <string>
  1147.  
  1148. <integer>
  1149. 4
  1150. <string>
  1151. pick.x = x;
  1152. <string>
  1153. pick.y = y;
  1154. <string>
  1155. repaint();
  1156. <string>
  1157. return true;
  1158. <storable>
  1159. <string>
  1160. TJavaMethod
  1161. <string>
  1162. mouseUp
  1163. <string>
  1164. boolean
  1165. <integer>
  1166. 3
  1167. <storable>
  1168. <string>
  1169. TJavaArgument
  1170. <string>
  1171. evt
  1172. <string>
  1173. Event
  1174. <storable>
  1175. <string>
  1176. TJavaArgument
  1177. <string>
  1178. x
  1179. <string>
  1180. int
  1181. <storable>
  1182. <string>
  1183. TJavaArgument
  1184. <string>
  1185. y
  1186. <string>
  1187. int
  1188. <integer>
  1189. 3
  1190. <boolean>
  1191. FALSE
  1192. <boolean>
  1193. FALSE
  1194. <boolean>
  1195. FALSE
  1196. <boolean>
  1197. TRUE
  1198. <string>
  1199.  
  1200. <integer>
  1201. 6
  1202. <string>
  1203. pick.x = x;
  1204. <string>
  1205. pick.y = y;
  1206. <string>
  1207. pick.fixed = pickfixed;
  1208. <string>
  1209. pick = null;
  1210. <string>
  1211. repaint();
  1212. <string>
  1213. return true;
  1214. <storable>
  1215. <string>
  1216. TJavaMethod
  1217. <string>
  1218. start
  1219. <string>
  1220.  
  1221. <integer>
  1222. 0
  1223. <integer>
  1224. 3
  1225. <boolean>
  1226. FALSE
  1227. <boolean>
  1228. FALSE
  1229. <boolean>
  1230. FALSE
  1231. <boolean>
  1232. FALSE
  1233. <string>
  1234.  
  1235. <integer>
  1236. 2
  1237. <string>
  1238. relaxer = new Thread(this);
  1239. <string>
  1240. relaxer.start();
  1241. <storable>
  1242. <string>
  1243. TJavaMethod
  1244. <string>
  1245. stop
  1246. <string>
  1247.  
  1248. <integer>
  1249. 0
  1250. <integer>
  1251. 3
  1252. <boolean>
  1253. FALSE
  1254. <boolean>
  1255. FALSE
  1256. <boolean>
  1257. FALSE
  1258. <boolean>
  1259. FALSE
  1260. <string>
  1261.  
  1262. <integer>
  1263. 1
  1264. <string>
  1265. relaxer.stop();
  1266. <integer>
  1267. 0
  1268. <boolean>
  1269. FALSE
  1270. <boolean>
  1271. TRUE
  1272. <integer>
  1273. 1
  1274. <storable>
  1275. <string>
  1276. TInheritance
  1277. <integer>
  1278. 447
  1279. <integer>
  1280. 127
  1281. <integer>
  1282. 467
  1283. <integer>
  1284. 147
  1285. <storable>
  1286. <string>
  1287. TJavaInterface
  1288. <integer>
  1289. 582
  1290. <integer>
  1291. 32
  1292. <integer>
  1293. 692
  1294. <integer>
  1295. 82
  1296. <string>
  1297. Runnable
  1298. <integer>
  1299. 0
  1300. <integer>
  1301. 1
  1302. <storable>
  1303. <string>
  1304. TJavaOperation
  1305. <string>
  1306. run
  1307. <string>
  1308.  
  1309. <integer>
  1310. 0
  1311. <integer>
  1312. 0
  1313. <boolean>
  1314. FALSE
  1315. <storable>
  1316. <string>
  1317. TInheritance
  1318. <integer>
  1319. 627
  1320. <integer>
  1321. 127
  1322. <integer>
  1323. 647
  1324. <integer>
  1325. 147
  1326. <storable>
  1327. <string>
  1328. TJavaClass
  1329. <integer>
  1330. 412
  1331. <integer>
  1332. 482
  1333. <integer>
  1334. 632
  1335. <integer>
  1336. 582
  1337. <string>
  1338. Graph
  1339. <integer>
  1340. 0
  1341. <integer>
  1342. 4
  1343. <storable>
  1344. <string>
  1345. TJavaMethod
  1346. <string>
  1347. init
  1348. <string>
  1349.  
  1350. <integer>
  1351. 0
  1352. <integer>
  1353. 3
  1354. <boolean>
  1355. FALSE
  1356. <boolean>
  1357. FALSE
  1358. <boolean>
  1359. FALSE
  1360. <boolean>
  1361. FALSE
  1362. <string>
  1363.  
  1364. <integer>
  1365. 31
  1366. <string>
  1367. setLayout(new BorderLayout());
  1368. <string>
  1369. panel = new GraphPanel(this);
  1370. <string>
  1371. add("Center", panel);
  1372. <string>
  1373. Panel p = new Panel();
  1374. <string>
  1375. add("South", p);
  1376. <string>
  1377. p.add(new Button("Scramble"));
  1378. <string>
  1379. p.add(new Button("Shake"));
  1380. <string>
  1381. p.add(new Checkbox("Stress"));
  1382. <string>
  1383. p.add(new Checkbox("Random"));
  1384. <string>
  1385. String edges = getParameter("edges");
  1386. <string>
  1387. for (StringTokenizer t = new StringTokenizer(edges, ",") ; t.hasMoreTokens() ; ) {
  1388. <string>
  1389.     String str = t.nextToken();
  1390. <string>
  1391.     int i = str.indexOf('-');
  1392. <string>
  1393.     if (i > 0) {
  1394. <string>
  1395.         int len = 50;
  1396. <string>
  1397.         int j = str.indexOf('/');
  1398. <string>
  1399.         if (j > 0) {
  1400. <string>
  1401.             len = Integer.valueOf(str.substring(j+1)).intValue();
  1402. <string>
  1403.             str = str.substring(0, j);
  1404. <string>
  1405.         }
  1406. <string>
  1407.         panel.addEdge(str.substring(0,i), str.substring(i+1), len);
  1408. <string>
  1409.     }
  1410. <string>
  1411. }
  1412. <string>
  1413. Dimension d = size();
  1414. <string>
  1415. String center = getParameter("center");
  1416. <string>
  1417. if (center != null){
  1418. <string>
  1419.     Node n = panel.nodes[panel.findNode(center)];
  1420. <string>
  1421.     n.x = d.width / 2;
  1422. <string>
  1423.     n.y = d.height / 2;
  1424. <string>
  1425.     n.fixed = true;
  1426. <string>
  1427. }
  1428. <storable>
  1429. <string>
  1430. TJavaMethod
  1431. <string>
  1432. start
  1433. <string>
  1434.  
  1435. <integer>
  1436. 0
  1437. <integer>
  1438. 3
  1439. <boolean>
  1440. FALSE
  1441. <boolean>
  1442. FALSE
  1443. <boolean>
  1444. FALSE
  1445. <boolean>
  1446. FALSE
  1447. <string>
  1448.  
  1449. <integer>
  1450. 1
  1451. <string>
  1452. panel.start();
  1453. <storable>
  1454. <string>
  1455. TJavaMethod
  1456. <string>
  1457. stop
  1458. <string>
  1459.  
  1460. <integer>
  1461. 0
  1462. <integer>
  1463. 3
  1464. <boolean>
  1465. FALSE
  1466. <boolean>
  1467. FALSE
  1468. <boolean>
  1469. FALSE
  1470. <boolean>
  1471. FALSE
  1472. <string>
  1473.  
  1474. <integer>
  1475. 1
  1476. <string>
  1477. panel.stop();
  1478. <storable>
  1479. <string>
  1480. TJavaMethod
  1481. <string>
  1482. action
  1483. <string>
  1484. boolean
  1485. <integer>
  1486. 2
  1487. <storable>
  1488. <string>
  1489. TJavaArgument
  1490. <string>
  1491. evt
  1492. <string>
  1493. Event
  1494. <storable>
  1495. <string>
  1496. TJavaArgument
  1497. <string>
  1498. arg
  1499. <string>
  1500. Object
  1501. <integer>
  1502. 3
  1503. <boolean>
  1504. FALSE
  1505. <boolean>
  1506. FALSE
  1507. <boolean>
  1508. FALSE
  1509. <boolean>
  1510. FALSE
  1511. <string>
  1512.  
  1513. <integer>
  1514. 33
  1515. <string>
  1516. if (arg instanceof Boolean) {
  1517. <string>
  1518.     if (((Checkbox)evt.target).getLabel().equals("Stress")) {
  1519. <string>
  1520.     panel.stress = ((Boolean)arg).booleanValue();
  1521. <string>
  1522.     } else {
  1523. <string>
  1524.     panel.random = ((Boolean)arg).booleanValue();
  1525. <string>
  1526.     }
  1527. <string>
  1528.     return true;
  1529. <string>
  1530. <string>
  1531. if ("Scramble".equals(arg)) {
  1532. <string>
  1533.     play(getCodeBase(), "audio/computer.au");
  1534. <string>
  1535.     Dimension d = size();
  1536. <string>
  1537.     for (int i = 0 ; i < panel.nnodes ; i++) {
  1538. <string>
  1539.     Node n = panel.nodes[i];
  1540. <string>
  1541.     if (!n.fixed) {
  1542. <string>
  1543.         n.x = 10 + (d.width-20)*Math.random();
  1544. <string>
  1545.         n.y = 10 + (d.height-20)*Math.random();
  1546. <string>
  1547.     }
  1548. <string>
  1549.     }
  1550. <string>
  1551.     return true;
  1552. <string>
  1553. }
  1554. <string>
  1555. if ("Shake".equals(arg)) {
  1556. <string>
  1557.     play(getCodeBase(), "audio/gong.au");
  1558. <string>
  1559.     Dimension d = size();
  1560. <string>
  1561.     for (int i = 0 ; i < panel.nnodes ; i++) {
  1562. <string>
  1563.     Node n = panel.nodes[i];
  1564. <string>
  1565.     if (!n.fixed) {
  1566. <string>
  1567.         n.x += 80*Math.random() - 40;
  1568. <string>
  1569.         n.y += 80*Math.random() - 40;
  1570. <string>
  1571.     }
  1572. <string>
  1573.     }
  1574. <string>
  1575.     return true;
  1576. <string>
  1577. }
  1578. <string>
  1579. return false;
  1580. <integer>
  1581. 1
  1582. <boolean>
  1583. FALSE
  1584. <boolean>
  1585. TRUE
  1586. <integer>
  1587. 0
  1588. <storable>
  1589. <string>
  1590. TJavaClass
  1591. <integer>
  1592. 747
  1593. <integer>
  1594. 542
  1595. <integer>
  1596. 857
  1597. <integer>
  1598. 577
  1599. <string>
  1600. Thread
  1601. <integer>
  1602. 0
  1603. <integer>
  1604. 0
  1605. <integer>
  1606. 0
  1607. <boolean>
  1608. FALSE
  1609. <boolean>
  1610. FALSE
  1611. <integer>
  1612. 0
  1613. <storable>
  1614. <string>
  1615. TText
  1616. <integer>
  1617. 492
  1618. <integer>
  1619. 122
  1620. <integer>
  1621. 602
  1622. <integer>
  1623. 137
  1624. <string>
  1625. multiple inheritance
  1626. <storable>
  1627. <string>
  1628. TJavaClass
  1629. <integer>
  1630. 762
  1631. <integer>
  1632. 387
  1633. <integer>
  1634. 872
  1635. <integer>
  1636. 422
  1637. <string>
  1638. Applet
  1639. <integer>
  1640. 0
  1641. <integer>
  1642. 0
  1643. <integer>
  1644. 0
  1645. <boolean>
  1646. FALSE
  1647. <boolean>
  1648. FALSE
  1649. <integer>
  1650. 0
  1651. <storable>
  1652. <string>
  1653. TInheritance
  1654. <integer>
  1655. 802
  1656. <integer>
  1657. 437
  1658. <integer>
  1659. 822
  1660. <integer>
  1661. 457
  1662. <storable>
  1663. <string>
  1664. TJavaClass
  1665. <integer>
  1666. 132
  1667. <integer>
  1668. 42
  1669. <integer>
  1670. 242
  1671. <integer>
  1672. 77
  1673. <string>
  1674. Object
  1675. <integer>
  1676. 0
  1677. <integer>
  1678. 0
  1679. <integer>
  1680. 0
  1681. <boolean>
  1682. FALSE
  1683. <boolean>
  1684. FALSE
  1685. <integer>
  1686. 0
  1687. <storable>
  1688. <string>
  1689. TInheritance
  1690. <integer>
  1691. 172
  1692. <integer>
  1693. 102
  1694. <integer>
  1695. 192
  1696. <integer>
  1697. 122
  1698. <integer>
  1699. 13
  1700. <storable>
  1701. <string>
  1702. TSuperClassing
  1703. <integer>
  1704. 2
  1705. <integer>
  1706. 4
  1707. <integer>
  1708. 2
  1709. <integer>
  1710. 457
  1711. <integer>
  1712. 67
  1713. <integer>
  1714. 457
  1715. <integer>
  1716. 127
  1717. <storable>
  1718. <string>
  1719. TSubClassing
  1720. <integer>
  1721. 4
  1722. <integer>
  1723. 3
  1724. <integer>
  1725. 3
  1726. <integer>
  1727. 467
  1728. <integer>
  1729. 147
  1730. <integer>
  1731. 517
  1732. <integer>
  1733. 147
  1734. <integer>
  1735. 517
  1736. <integer>
  1737. 197
  1738. <storable>
  1739. <string>
  1740. TAssociation
  1741. <integer>
  1742. 3
  1743. <integer>
  1744. 0
  1745. <integer>
  1746. 3
  1747. <integer>
  1748. 412
  1749. <integer>
  1750. 342
  1751. <integer>
  1752. 117
  1753. <integer>
  1754. 342
  1755. <integer>
  1756. 117
  1757. <integer>
  1758. 277
  1759. <string>
  1760.  
  1761. <string>
  1762. nodes
  1763. <integer>
  1764. 0
  1765. <integer>
  1766. 0
  1767. <integer>
  1768. 1
  1769. <integer>
  1770. 1
  1771. <integer>
  1772. 100
  1773. <storable>
  1774. <string>
  1775. TAssociation
  1776. <integer>
  1777. 3
  1778. <integer>
  1779. 1
  1780. <integer>
  1781. 3
  1782. <integer>
  1783. 412
  1784. <integer>
  1785. 287
  1786. <integer>
  1787. 257
  1788. <integer>
  1789. 287
  1790. <integer>
  1791. 257
  1792. <integer>
  1793. 227
  1794. <string>
  1795.  
  1796. <string>
  1797. edges
  1798. <integer>
  1799. 0
  1800. <integer>
  1801. 0
  1802. <integer>
  1803. 1
  1804. <integer>
  1805. 1
  1806. <integer>
  1807. 200
  1808. <storable>
  1809. <string>
  1810. TSuperClassing
  1811. <integer>
  1812. 5
  1813. <integer>
  1814. 6
  1815. <integer>
  1816. 2
  1817. <integer>
  1818. 637
  1819. <integer>
  1820. 82
  1821. <integer>
  1822. 637
  1823. <integer>
  1824. 127
  1825. <storable>
  1826. <string>
  1827. TSubClassing
  1828. <integer>
  1829. 6
  1830. <integer>
  1831. 3
  1832. <integer>
  1833. 3
  1834. <integer>
  1835. 627
  1836. <integer>
  1837. 147
  1838. <integer>
  1839. 577
  1840. <integer>
  1841. 147
  1842. <integer>
  1843. 577
  1844. <integer>
  1845. 197
  1846. <storable>
  1847. <string>
  1848. TAssociation
  1849. <integer>
  1850. 3
  1851. <integer>
  1852. 8
  1853. <integer>
  1854. 3
  1855. <integer>
  1856. 667
  1857. <integer>
  1858. 377
  1859. <integer>
  1860. 667
  1861. <integer>
  1862. 557
  1863. <integer>
  1864. 747
  1865. <integer>
  1866. 557
  1867. <string>
  1868.  
  1869. <string>
  1870. relaxer
  1871. <integer>
  1872. 0
  1873. <integer>
  1874. 0
  1875. <integer>
  1876. 0
  1877. <integer>
  1878. 0
  1879. <integer>
  1880. 0
  1881. <storable>
  1882. <string>
  1883. TAssociation
  1884. <integer>
  1885. 7
  1886. <integer>
  1887. 3
  1888. <integer>
  1889. 2
  1890. <integer>
  1891. 452
  1892. <integer>
  1893. 482
  1894. <integer>
  1895. 452
  1896. <integer>
  1897. 377
  1898. <string>
  1899. graph
  1900. <string>
  1901. panel
  1902. <integer>
  1903. 0
  1904. <integer>
  1905. 0
  1906. <integer>
  1907. 0
  1908. <integer>
  1909. 0
  1910. <integer>
  1911. 0
  1912. <storable>
  1913. <string>
  1914. TSuperClassing
  1915. <integer>
  1916. 10
  1917. <integer>
  1918. 11
  1919. <integer>
  1920. 2
  1921. <integer>
  1922. 812
  1923. <integer>
  1924. 422
  1925. <integer>
  1926. 812
  1927. <integer>
  1928. 437
  1929. <storable>
  1930. <string>
  1931. TSubClassing
  1932. <integer>
  1933. 11
  1934. <integer>
  1935. 7
  1936. <integer>
  1937. 3
  1938. <integer>
  1939. 802
  1940. <integer>
  1941. 457
  1942. <integer>
  1943. 532
  1944. <integer>
  1945. 457
  1946. <integer>
  1947. 532
  1948. <integer>
  1949. 482
  1950. <storable>
  1951. <string>
  1952. TSuperClassing
  1953. <integer>
  1954. 12
  1955. <integer>
  1956. 13
  1957. <integer>
  1958. 2
  1959. <integer>
  1960. 182
  1961. <integer>
  1962. 77
  1963. <integer>
  1964. 182
  1965. <integer>
  1966. 102
  1967. <storable>
  1968. <string>
  1969. TSubClassing
  1970. <integer>
  1971. 13
  1972. <integer>
  1973. 0
  1974. <integer>
  1975. 3
  1976. <integer>
  1977. 172
  1978. <integer>
  1979. 122
  1980. <integer>
  1981. 112
  1982. <integer>
  1983. 122
  1984. <integer>
  1985. 112
  1986. <integer>
  1987. 147
  1988. <storable>
  1989. <string>
  1990. TSubClassing
  1991. <integer>
  1992. 13
  1993. <integer>
  1994. 1
  1995. <integer>
  1996. 3
  1997. <integer>
  1998. 192
  1999. <integer>
  2000. 122
  2001. <integer>
  2002. 252
  2003. <integer>
  2004. 122
  2005. <integer>
  2006. 252
  2007. <integer>
  2008. 147
  2009.