Download Jar. Uses 3874K of libraries. Click here for Pure Java version (8947L/62K).
1 | !7 |
2 | |
3 | sS background = #1009931; |
4 | static JDesktopPane desktop; |
5 | static JTextField tfInput; |
6 | static L onModuleListChange = synchroList(); |
7 | static L<Module> modules; |
8 | |
9 | p-noconsole { |
10 | autoRestart(5); |
11 | |
12 | modules = listWithMultiNotify(onModuleListChange); |
13 | |
14 | desktop = jTiledBackgroundDesktopPane(background); |
15 | autoFixDesktopPane(desktop); |
16 | cleanExitOnFrameClose(showMaximizedFrame(desktop)); |
17 | |
18 | final JInternalFrame f = showCenteredInternalFrame(desktop, "Hello", 700, 150, setFontSize(20, tfInput = jcenteredtextfield("Find me some stuff"))); |
19 | packInternalFrameVertically(f); |
20 | centerInternalFrame(f); |
21 | swing { |
22 | f.setLocation(f.getX(), 40); |
23 | } |
24 | |
25 | showModule(new ModuleClasses); |
26 | showModule(new ModuleCount); |
27 | startModule(new InputToInterestingString); |
28 | } |
29 | |
30 | sbool hasModuleWithFields(Class c, O... params) { |
31 | ret hasWhere(modules, c, params); |
32 | } |
33 | |
34 | svoid startModule(Module m) { |
35 | addIfNotThere(modules, m); |
36 | lock m.lock; |
37 | if (m.started) ret; |
38 | m.started = true; |
39 | m.start(); |
40 | } |
41 | |
42 | svoid showModule(final Module m) { |
43 | startModule(m); |
44 | lock m.lock; |
45 | if (m.vis == null) |
46 | m.vis = m.visualize(); |
47 | swing { |
48 | Rect r = m.frameRect; |
49 | if (r == null) randomRect(desktop.getWidth(), desktop.getHeight(), 10, 150, 100); |
50 | if (r == null) r = Rect(10, 10, 200, 100); |
51 | print("Showing frame at " + r); |
52 | S frameTitle = humanizeFormLabel(shortClassName(m)); |
53 | showInternalFrame(desktop, frameTitle, r.x, r.y, r.w, r.h, m.vis); |
54 | } |
55 | } |
56 | |
57 | sclass Module { |
58 | transient Component vis; |
59 | transient bool started; |
60 | transient Lock lock = lock(); |
61 | |
62 | Rect frameRect; |
63 | |
64 | JComponent visualize() { ret jCenteredMultiLineLabel(sfu(this)); } |
65 | void unvisualize() {} |
66 | void start() {} |
67 | void cleanMeUp() { |
68 | JInternalFrame f = getInternalFrame(vis); |
69 | if (f != null) |
70 | frameRect = toRect(getBounds(f)); |
71 | } |
72 | } |
73 | |
74 | sclass InterestingStringModule extends Module { |
75 | S theString; |
76 | } |
77 | |
78 | sclass InputToInterestingString extends Module { |
79 | transient java.util.Timer timer; |
80 | |
81 | void start { |
82 | timer = doEvery(1000, r { |
83 | S s = getTextTrim(tfInput); |
84 | if (!hasModuleWithFields(InterestingStringModule, theString := s)) |
85 | startModule(nu(InterestingStringModule, theString := s)); |
86 | }); |
87 | } |
88 | |
89 | void cleanMeUp() { cancelTimer(timer); } |
90 | } |
91 | |
92 | sclass ModuleCount extends Module { |
93 | JLabel label; |
94 | |
95 | void start() { |
96 | onModuleListChange.add(r { |
97 | if (label != null) |
98 | setText(label, lstr(modules)); |
99 | }); |
100 | } |
101 | |
102 | JComponent visualize() { |
103 | label = setFontSize(30, jcenteredlabel(lstr(modules))); |
104 | ret label; |
105 | } |
106 | |
107 | void unvisualize() { label = null; } |
108 | } |
109 | |
110 | sclass ModuleClasses extends Module { |
111 | L<Class<? extends Module>> classes; |
112 | |
113 | void start() { |
114 | classes = myNonAbstractClassesImplementing(Module); |
115 | } |
116 | |
117 | JComponent visualize() { |
118 | JList list = jlist(map shortClassName(classes)); |
119 | listPopupMenuItem(list, "Instantiate", voidfunc(fS s) { |
120 | thread { |
121 | pcall-messagebox { |
122 | showModule((Module) nu(classForName("main$" + s))); |
123 | } |
124 | } |
125 | }); |
126 | ret list; |
127 | } |
128 | } |
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1015798 |
Snippet name: | Cubes Frame [v3] |
Eternal ID of this version: | #1015798/21 |
Text MD5: | f926ee27f3934fbe5044c1cb68d850ab |
Transpilation MD5: | cfd83c8ee65ed9896931f00f8c4ebc11 |
Author: | stefan |
Category: | |
Type: | JavaX source code (desktop) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2018-05-27 22:30:42 |
Source code size: | 3137 bytes / 128 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 515 / 1113 |
Version history: | 20 change(s) |
Referenced in: | [show references] |