1 | /*
|
---|
2 | * TOPPERS/ECNL Prototyping tool
|
---|
3 | *
|
---|
4 | * Copyright (C) 2017 Cores Co., Ltd. Japan
|
---|
5 | *
|
---|
6 | * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
|
---|
7 | * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
|
---|
8 | * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
---|
9 | * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
|
---|
10 | * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
|
---|
11 | * スコード中に含まれていること.
|
---|
12 | * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
|
---|
13 | * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
|
---|
14 | * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
|
---|
15 | * の無保証規定を掲載すること.
|
---|
16 | * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
|
---|
17 | * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
|
---|
18 | * と.
|
---|
19 | * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
|
---|
20 | * 作権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
21 | * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
|
---|
22 | * 報告すること.
|
---|
23 | * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
|
---|
24 | * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
---|
25 | * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
|
---|
26 | * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
|
---|
27 | * 免責すること.
|
---|
28 | *
|
---|
29 | * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
|
---|
30 | * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
|
---|
31 | * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
|
---|
32 | * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
|
---|
33 | * の責任を負わない.
|
---|
34 | *
|
---|
35 | * @(#) $Id$
|
---|
36 | */
|
---|
37 | using System;
|
---|
38 | using System.Collections;
|
---|
39 | using System.Collections.Generic;
|
---|
40 | using System.Linq;
|
---|
41 | using System.Text;
|
---|
42 | using Bridge;
|
---|
43 | using Bridge.Html5;
|
---|
44 | using Bridge.jQuery2;
|
---|
45 |
|
---|
46 | namespace WebMrbc
|
---|
47 | {
|
---|
48 | public class BlocklyView
|
---|
49 | {
|
---|
50 | string identifier;
|
---|
51 | public string Identifier {
|
---|
52 | get { return identifier; }
|
---|
53 | set {
|
---|
54 | if (identifier != value) {
|
---|
55 | identifier = value;
|
---|
56 | IdentifierChanged?.Invoke(this, EventArgs.Empty);
|
---|
57 | }
|
---|
58 | }
|
---|
59 | }
|
---|
60 | public Dictionary<string, FlyoutCategoryHandler> FlyoutCategoryHandlers = new Dictionary<string, FlyoutCategoryHandler>();
|
---|
61 | public event EventHandler<Create> BlockCreated;
|
---|
62 | public event EventHandler<Delete> BlockDeleted;
|
---|
63 | public event EventHandler<Change> BlockChanged;
|
---|
64 | public event EventHandler<Move> BlockMoveed;
|
---|
65 | public event EventHandler<Ui> UiEvent;
|
---|
66 | public event EventHandler<EventArgs> IdentifierChanged;
|
---|
67 | public bool Changed = true;
|
---|
68 |
|
---|
69 | private static int No = 1;
|
---|
70 | private WorkspaceSvg _Workspace;
|
---|
71 | private string _WorkspaceElementId;
|
---|
72 | private int _IdNo;
|
---|
73 |
|
---|
74 | static BlocklyView()
|
---|
75 | {
|
---|
76 | Script.Set(Blockly.Blocks, ColourPickerBlock.type_name, new ColourPickerBlock());
|
---|
77 | Script.Set(Blockly.Blocks, ColourRandomBlock.type_name, new ColourRandomBlock());
|
---|
78 | Script.Set(Blockly.Blocks, ColourRGBBlock.type_name, new ColourRGBBlock());
|
---|
79 | Script.Set(Blockly.Blocks, ColourBlendBlock.type_name, new ColourBlendBlock());
|
---|
80 | Script.Set(Blockly.Blocks, ListsCreateEmptyBlock.type_name, new ListsCreateEmptyBlock());
|
---|
81 | Script.Set(Blockly.Blocks, ListsCreateWithBlock.type_name, new ListsCreateWithBlock());
|
---|
82 | Script.Set(Blockly.Blocks, ListsCreateWithContainerBlock.type_name, new ListsCreateWithContainerBlock());
|
---|
83 | Script.Set(Blockly.Blocks, ListsCreateWithItemBlock.type_name, new ListsCreateWithItemBlock());
|
---|
84 | Script.Set(Blockly.Blocks, ListsRepeatBlock.type_name, new ListsRepeatBlock());
|
---|
85 | Script.Set(Blockly.Blocks, ListsLengthBlock.type_name, new ListsLengthBlock());
|
---|
86 | Script.Set(Blockly.Blocks, ListsIsEmptyBlock.type_name, new ListsIsEmptyBlock());
|
---|
87 | Script.Set(Blockly.Blocks, ListsIndexOfBlock.type_name, new ListsIndexOfBlock());
|
---|
88 | Script.Set(Blockly.Blocks, ListsGetIndexBlock.type_name, new ListsGetIndexBlock());
|
---|
89 | Script.Set(Blockly.Blocks, ListsSetIndexBlock.type_name, new ListsSetIndexBlock());
|
---|
90 | Script.Set(Blockly.Blocks, ListsGetSublistBlock.type_name, new ListsGetSublistBlock());
|
---|
91 | Script.Set(Blockly.Blocks, ListsSortBlock.type_name, new ListsSortBlock());
|
---|
92 | Script.Set(Blockly.Blocks, ListsSplitBlock.type_name, new ListsSplitBlock());
|
---|
93 | Script.Set(Blockly.Blocks, ControlsIfBlock.type_name, new ControlsIfBlock());
|
---|
94 | Script.Set(Blockly.Blocks, ControlsIfIfBlock.type_name, new ControlsIfIfBlock());
|
---|
95 | Script.Set(Blockly.Blocks, ControlsIfElseIfBlock.type_name, new ControlsIfElseIfBlock());
|
---|
96 | Script.Set(Blockly.Blocks, ControlsIfElseBlock.type_name, new ControlsIfElseBlock());
|
---|
97 | Script.Set(Blockly.Blocks, SwitchCaseNumberBlock.type_name, new SwitchCaseNumberBlock());
|
---|
98 | Script.Set(Blockly.Blocks, SwitchCaseNumberContainerBlock.type_name, new SwitchCaseNumberContainerBlock());
|
---|
99 | Script.Set(Blockly.Blocks, SwitchCaseNumberConstBlock.type_name, new SwitchCaseNumberConstBlock());
|
---|
100 | Script.Set(Blockly.Blocks, SwitchCaseNumberRangeBlock.type_name, new SwitchCaseNumberRangeBlock());
|
---|
101 | Script.Set(Blockly.Blocks, SwitchCaseNumberDefaultBlock.type_name, new SwitchCaseNumberDefaultBlock());
|
---|
102 | Script.Set(Blockly.Blocks, SwitchCaseTextBlock.type_name, new SwitchCaseTextBlock());
|
---|
103 | Script.Set(Blockly.Blocks, SwitchCaseTextContainerBlock.type_name, new SwitchCaseTextContainerBlock());
|
---|
104 | Script.Set(Blockly.Blocks, SwitchCaseTextConstBlock.type_name, new SwitchCaseTextConstBlock());
|
---|
105 | Script.Set(Blockly.Blocks, SwitchCaseTextRangeBlock.type_name, new SwitchCaseTextRangeBlock());
|
---|
106 | Script.Set(Blockly.Blocks, SwitchCaseTextDefaultBlock.type_name, new SwitchCaseTextDefaultBlock());
|
---|
107 | Script.Set(Blockly.Blocks, LogicCompareBlock.type_name, new LogicCompareBlock());
|
---|
108 | Script.Set(Blockly.Blocks, LogicOperationBlock.type_name, new LogicOperationBlock());
|
---|
109 | Script.Set(Blockly.Blocks, LogicNegateBlock.type_name, new LogicNegateBlock());
|
---|
110 | Script.Set(Blockly.Blocks, LogicBooleanBlock.type_name, new LogicBooleanBlock());
|
---|
111 | Script.Set(Blockly.Blocks, LogicNullBlock.type_name, new LogicNullBlock());
|
---|
112 | Script.Set(Blockly.Blocks, LogicTernaryBlock.type_name, new LogicTernaryBlock());
|
---|
113 | Script.Set(Blockly.Blocks, ControlsRepeatExtBlock.type_name, new ControlsRepeatExtBlock());
|
---|
114 | Script.Set(Blockly.Blocks, ControlsRepeatBlock.type_name, new ControlsRepeatBlock());
|
---|
115 | Script.Set(Blockly.Blocks, ControlsWhileUntilBlock.type_name, new ControlsWhileUntilBlock());
|
---|
116 | Script.Set(Blockly.Blocks, ControlsForBlock.type_name, new ControlsForBlock());
|
---|
117 | Script.Set(Blockly.Blocks, ControlsForEachBlock.type_name, new ControlsForEachBlock());
|
---|
118 | Script.Set(Blockly.Blocks, ControlsFlowStatementsBlock.type_name, new ControlsFlowStatementsBlock());
|
---|
119 | Script.Set(Blockly.Blocks, MathNumberBlock.type_name, new MathNumberBlock());
|
---|
120 | Script.Set(Blockly.Blocks, MathArithmeticBlock.type_name, new MathArithmeticBlock());
|
---|
121 | Script.Set(Blockly.Blocks, MathSingleBlock.type_name, new MathSingleBlock());
|
---|
122 | Script.Set(Blockly.Blocks, MathTrigBlock.type_name, new MathTrigBlock());
|
---|
123 | Script.Set(Blockly.Blocks, MathConstantBlock.type_name, new MathConstantBlock());
|
---|
124 | Script.Set(Blockly.Blocks, MathNumberPropertyBlock.type_name, new MathNumberPropertyBlock());
|
---|
125 | Script.Set(Blockly.Blocks, MathChangeBlock.type_name, new MathChangeBlock());
|
---|
126 | Script.Set(Blockly.Blocks, MathRoundBlock.type_name, new MathRoundBlock());
|
---|
127 | Script.Set(Blockly.Blocks, MathOnListBlock.type_name, new MathOnListBlock());
|
---|
128 | Script.Set(Blockly.Blocks, MathModuloBlock.type_name, new MathModuloBlock());
|
---|
129 | Script.Set(Blockly.Blocks, MathConstrainBlock.type_name, new MathConstrainBlock());
|
---|
130 | Script.Set(Blockly.Blocks, MathRandomIntBlock.type_name, new MathRandomIntBlock());
|
---|
131 | Script.Set(Blockly.Blocks, MathRandomFloatBlock.type_name, new MathRandomFloatBlock());
|
---|
132 | Script.Set(Blockly.Blocks, ProceduresDefnoreturnBlock.type_name, new ProceduresDefnoreturnBlock());
|
---|
133 | Script.Set(Blockly.Blocks, ProceduresDefreturnBlock.type_name, new ProceduresDefreturnBlock());
|
---|
134 | Script.Set(Blockly.Blocks, ProceduresMutatorcontainerBlock.type_name, new ProceduresMutatorcontainerBlock());
|
---|
135 | Script.Set(Blockly.Blocks, ProceduresMutatorargBlock.type_name, new ProceduresMutatorargBlock());
|
---|
136 | Script.Set(Blockly.Blocks, ProceduresCallnoreturnBlock.type_name, new ProceduresCallnoreturnBlock());
|
---|
137 | Script.Set(Blockly.Blocks, ProceduresCallreturnBlock.type_name, new ProceduresCallreturnBlock());
|
---|
138 | Script.Set(Blockly.Blocks, ProceduresIfreturnBlock.type_name, new ProceduresIfreturnBlock());
|
---|
139 | Script.Set(Blockly.Blocks, TextBlock.type_name, new TextBlock());
|
---|
140 | Script.Set(Blockly.Blocks, TextJoinBlock.type_name, new TextJoinBlock());
|
---|
141 | Script.Set(Blockly.Blocks, TextCreateJoinContainerBlock.type_name, new TextCreateJoinContainerBlock());
|
---|
142 | Script.Set(Blockly.Blocks, TextCreateJoinItemBlock.type_name, new TextCreateJoinItemBlock());
|
---|
143 | Script.Set(Blockly.Blocks, TextAppendBlock.type_name, new TextAppendBlock());
|
---|
144 | Script.Set(Blockly.Blocks, TextLengthBlock.type_name, new TextLengthBlock());
|
---|
145 | Script.Set(Blockly.Blocks, TextIsEmptyBlock.type_name, new TextIsEmptyBlock());
|
---|
146 | Script.Set(Blockly.Blocks, TextIndexOfBlock.type_name, new TextIndexOfBlock());
|
---|
147 | Script.Set(Blockly.Blocks, TextCharAtBlock.type_name, new TextCharAtBlock());
|
---|
148 | Script.Set(Blockly.Blocks, TextGetSubstringBlock.type_name, new TextGetSubstringBlock());
|
---|
149 | Script.Set(Blockly.Blocks, TextChangeCaseBlock.type_name, new TextChangeCaseBlock());
|
---|
150 | Script.Set(Blockly.Blocks, TextTrimBlock.type_name, new TextTrimBlock());
|
---|
151 | Script.Set(Blockly.Blocks, TextPrintBlock.type_name, new TextPrintBlock());
|
---|
152 | Script.Set(Blockly.Blocks, TextPromptExtBlock.type_name, new TextPromptExtBlock());
|
---|
153 | Script.Set(Blockly.Blocks, TextPromptBlock.type_name, new TextPromptBlock());
|
---|
154 | Script.Set(Blockly.Blocks, VariablesGetBlock.type_name, new VariablesGetBlock());
|
---|
155 | Script.Set(Blockly.Blocks, VariablesSetBlock.type_name, new VariablesSetBlock());
|
---|
156 | Script.Set(Blockly.Blocks, ENodeInitializeBlock.type_name, new ENodeInitializeBlock());
|
---|
157 | Script.Set(Blockly.Blocks, EObjectInitializeBlock.type_name, new EObjectInitializeBlock());
|
---|
158 | Script.Set(Blockly.Blocks, EPropertyFixLenBlock.type_name, new EPropertyFixLenBlock());
|
---|
159 | Script.Set(Blockly.Blocks, EPropertyFixLenContainerBlock.type_name, new EPropertyFixLenContainerBlock());
|
---|
160 | Script.Set(Blockly.Blocks, EPropertyFixLenConstBlock.type_name, new EPropertyFixLenConstBlock());
|
---|
161 | Script.Set(Blockly.Blocks, EPropertyFixLenRangeBlock.type_name, new EPropertyFixLenRangeBlock());
|
---|
162 | Script.Set(Blockly.Blocks, EPropertyFixLenDefaultBlock.type_name, new EPropertyFixLenDefaultBlock());
|
---|
163 | Script.Set(Blockly.Blocks, EPropertyVarLenBlock.type_name, new EPropertyVarLenBlock());
|
---|
164 | Script.Set(Blockly.Blocks, EcnlPropertyAttributeBlock.type_name, new EcnlPropertyAttributeBlock());
|
---|
165 | Script.Set(Blockly.Blocks, EcnlServiceCodeBlock.type_name, new EcnlServiceCodeBlock());
|
---|
166 | Script.Set(Blockly.Blocks, EcnlNodeIDBlock.type_name, new EcnlNodeIDBlock());
|
---|
167 | Script.Set(Blockly.Blocks, EcnlSaveReceivedPropertyBlock.type_name, new EcnlSaveReceivedPropertyBlock());
|
---|
168 | Script.Set(Blockly.Blocks, EcnlGetSavedPropertyBlock.type_name, new EcnlGetSavedPropertyBlock());
|
---|
169 | Script.Set(Blockly.Blocks, EcnlGetPropertyInfoBlock.type_name, new EcnlGetPropertyInfoBlock());
|
---|
170 | Script.Set(Blockly.Blocks, EcnlSetAnnounceRequestBlock.type_name, new EcnlSetAnnounceRequestBlock());
|
---|
171 | Script.Set(Blockly.Blocks, EcnlDataToNumberBlock.type_name, new EcnlDataToNumberBlock());
|
---|
172 | Script.Set(Blockly.Blocks, EcnlNumberToDataBlock.type_name, new EcnlNumberToDataBlock());
|
---|
173 | Script.Set(Blockly.Blocks, EcnlNoOpBlock.type_name, new EcnlNoOpBlock());
|
---|
174 | Script.Set(Blockly.Blocks, EcnlReceivedDataBlock.type_name, new EcnlReceivedDataBlock());
|
---|
175 | Script.Set(Blockly.Blocks, EcnlReceivedDataSizeBlock.type_name, new EcnlReceivedDataSizeBlock());
|
---|
176 | Script.Set(Blockly.Blocks, DataJoinBlock.type_name, new DataJoinBlock());
|
---|
177 | Script.Set(Blockly.Blocks, DataCreateJoinContainerBlock.type_name, new DataCreateJoinContainerBlock());
|
---|
178 | Script.Set(Blockly.Blocks, DataCreateJoinItemBlock.type_name, new DataCreateJoinItemBlock());
|
---|
179 | Script.Set(Blockly.Blocks, CreateEsvGetBlock.type_name, new CreateEsvGetBlock());
|
---|
180 | Script.Set(Blockly.Blocks, CreateEsvSetBlock.type_name, new CreateEsvSetBlock());
|
---|
181 | Script.Set(Blockly.Blocks, EsvAddEdtBlock.type_name, new EsvAddEdtBlock());
|
---|
182 | Script.Set(Blockly.Blocks, EsvAddEpcBlock.type_name, new EsvAddEpcBlock());
|
---|
183 | Script.Set(Blockly.Blocks, SendEsvBlock.type_name, new SendEsvBlock());
|
---|
184 | Script.Set(Blockly.Blocks, ReleaseEsvBlock.type_name, new ReleaseEsvBlock());
|
---|
185 | Script.Set(Blockly.Blocks, NotifyInitialEsvBlock.type_name, new NotifyInitialEsvBlock());
|
---|
186 | Script.Set(Blockly.Blocks, EsvGetEsvBlock.type_name, new EsvGetEsvBlock());
|
---|
187 | Script.Set(Blockly.Blocks, EsvIterateBlock.type_name, new EsvIterateBlock());
|
---|
188 | Script.Set(Blockly.Blocks, EsvIteratorBlock.type_name, new EsvIteratorBlock());
|
---|
189 | Script.Set(Blockly.Blocks, SvctaskSetTimerBlock.type_name, new SvctaskSetTimerBlock());
|
---|
190 | Script.Set(Blockly.Blocks, SvctaskTimerBlock.type_name, new SvctaskTimerBlock());
|
---|
191 | Script.Set(Blockly.Blocks, SvctaskProgressBlock.type_name, new SvctaskProgressBlock());
|
---|
192 | Script.Set(Blockly.Blocks, SvctaskRecvMsgBlock.type_name, new SvctaskRecvMsgBlock());
|
---|
193 | Script.Set(Blockly.Blocks, SvctaskCallTimeoutBlock.type_name, new SvctaskCallTimeoutBlock());
|
---|
194 | Script.Set(Blockly.Blocks, SvctaskIsMatchBlock.type_name, new SvctaskIsMatchBlock());
|
---|
195 | Script.Set(Blockly.Blocks, CallBlock.type_name, new CallBlock());
|
---|
196 | Script.Set(Blockly.Blocks, PinModeBlock.type_name, new PinModeBlock());
|
---|
197 | Script.Set(Blockly.Blocks, DigitalWriteBlock.type_name, new DigitalWriteBlock());
|
---|
198 | Script.Set(Blockly.Blocks, DigitalReadBlock.type_name, new DigitalReadBlock());
|
---|
199 | Script.Set(Blockly.Blocks, AnalogReadBlock.type_name, new AnalogReadBlock());
|
---|
200 | Script.Set(Blockly.Blocks, PwmBlock.type_name, new PwmBlock());
|
---|
201 | Script.Set(Blockly.Blocks, PwmValueBlock.type_name, new PwmValueBlock());
|
---|
202 | Script.Set(Blockly.Blocks, AnalogReferenceBlock.type_name, new AnalogReferenceBlock());
|
---|
203 | Script.Set(Blockly.Blocks, InitDacBlock.type_name, new InitDacBlock());
|
---|
204 | Script.Set(Blockly.Blocks, AnalogDacBlock.type_name, new AnalogDacBlock());
|
---|
205 | Script.Set(Blockly.Blocks, DacValueBlock.type_name, new DacValueBlock());
|
---|
206 | Script.Set(Blockly.Blocks, DelayBlock.type_name, new DelayBlock());
|
---|
207 | Script.Set(Blockly.Blocks, MillisBlock.type_name, new MillisBlock());
|
---|
208 | Script.Set(Blockly.Blocks, MicrosBlock.type_name, new MicrosBlock());
|
---|
209 | Script.Set(Blockly.Blocks, LedBlock.type_name, new LedBlock());
|
---|
210 | Script.Set(Blockly.Blocks, BitBlock.type_name, new BitBlock());
|
---|
211 | Script.Set(Blockly.Blocks, ToneBlock.type_name, new ToneBlock());
|
---|
212 | Script.Set(Blockly.Blocks, ToneValueBlock.type_name, new ToneValueBlock());
|
---|
213 | Script.Set(Blockly.Blocks, NoToneBlock.type_name, new NoToneBlock());
|
---|
214 | Script.Set(Blockly.Blocks, RandomSeedBlock.type_name, new RandomSeedBlock());
|
---|
215 | Script.Set(Blockly.Blocks, RandomBlock.type_name, new RandomBlock());
|
---|
216 | Script.Set(Blockly.Blocks, I2cNewBlock.type_name, new I2cNewBlock());
|
---|
217 | Script.Set(Blockly.Blocks, I2cWriteBlock.type_name, new I2cWriteBlock());
|
---|
218 | Script.Set(Blockly.Blocks, I2cReadBlock.type_name, new I2cReadBlock());
|
---|
219 | Script.Set(Blockly.Blocks, I2cBeginBlock.type_name, new I2cBeginBlock());
|
---|
220 | Script.Set(Blockly.Blocks, I2cLwriteBlock.type_name, new I2cLwriteBlock());
|
---|
221 | Script.Set(Blockly.Blocks, I2cEndBlock.type_name, new I2cEndBlock());
|
---|
222 | Script.Set(Blockly.Blocks, I2cRequestBlock.type_name, new I2cRequestBlock());
|
---|
223 | Script.Set(Blockly.Blocks, I2cLreadBlock.type_name, new I2cLreadBlock());
|
---|
224 | Script.Set(Blockly.Blocks, I2cAvailableBlock.type_name, new I2cAvailableBlock());
|
---|
225 | Script.Set(Blockly.Blocks, I2cFrequencyBlock.type_name, new I2cFrequencyBlock());
|
---|
226 | Script.Set(Blockly.Blocks, MemFileOpenBlock.type_name, new MemFileOpenBlock());
|
---|
227 | Script.Set(Blockly.Blocks, MemFileCloseBlock.type_name, new MemFileCloseBlock());
|
---|
228 | Script.Set(Blockly.Blocks, MemFileReadBlock.type_name, new MemFileReadBlock());
|
---|
229 | Script.Set(Blockly.Blocks, MemFileWriteBlock.type_name, new MemFileWriteBlock());
|
---|
230 | Script.Set(Blockly.Blocks, MemFileSeekBlock.type_name, new MemFileSeekBlock());
|
---|
231 | Script.Set(Blockly.Blocks, MemFileCpBlock.type_name, new MemFileCpBlock());
|
---|
232 | Script.Set(Blockly.Blocks, MemFileRmBlock.type_name, new MemFileRmBlock());
|
---|
233 | Script.Set(Blockly.Blocks, RtcYearBlock.type_name, new RtcYearBlock());
|
---|
234 | Script.Set(Blockly.Blocks, RtcMonthBlock.type_name, new RtcMonthBlock());
|
---|
235 | Script.Set(Blockly.Blocks, RtcDayBlock.type_name, new RtcDayBlock());
|
---|
236 | Script.Set(Blockly.Blocks, RtcHourBlock.type_name, new RtcHourBlock());
|
---|
237 | Script.Set(Blockly.Blocks, RtcMinuteBlock.type_name, new RtcMinuteBlock());
|
---|
238 | Script.Set(Blockly.Blocks, RtcSecondBlock.type_name, new RtcSecondBlock());
|
---|
239 | Script.Set(Blockly.Blocks, RtcWeekDayBlock.type_name, new RtcWeekDayBlock());
|
---|
240 | Script.Set(Blockly.Blocks, RtcDateTimeBlock.type_name, new RtcDateTimeBlock());
|
---|
241 | Script.Set(Blockly.Blocks, RtcDateTimeItemBlock.type_name, new RtcDateTimeItemBlock());
|
---|
242 | Script.Set(Blockly.Blocks, RtcSetDateTimeItemBlock.type_name, new RtcSetDateTimeItemBlock());
|
---|
243 | Script.Set(Blockly.Blocks, RtcGetTimeBlock.type_name, new RtcGetTimeBlock());
|
---|
244 | Script.Set(Blockly.Blocks, RtcSettimeBlock.type_name, new RtcSettimeBlock());
|
---|
245 | Script.Set(Blockly.Blocks, RtcDeinitBlock.type_name, new RtcDeinitBlock());
|
---|
246 | Script.Set(Blockly.Blocks, RtcInitBlock.type_name, new RtcInitBlock());
|
---|
247 | Script.Set(Blockly.Blocks, SdExistsBlock.type_name, new SdExistsBlock());
|
---|
248 | Script.Set(Blockly.Blocks, SdMkdirBlock.type_name, new SdMkdirBlock());
|
---|
249 | Script.Set(Blockly.Blocks, SdRemoveBlock.type_name, new SdRemoveBlock());
|
---|
250 | Script.Set(Blockly.Blocks, SdCopyBlock.type_name, new SdCopyBlock());
|
---|
251 | Script.Set(Blockly.Blocks, SdRmdirBlock.type_name, new SdRmdirBlock());
|
---|
252 | Script.Set(Blockly.Blocks, SdOpenBlock.type_name, new SdOpenBlock());
|
---|
253 | Script.Set(Blockly.Blocks, SdCloseBlock.type_name, new SdCloseBlock());
|
---|
254 | Script.Set(Blockly.Blocks, SdReadBlock.type_name, new SdReadBlock());
|
---|
255 | Script.Set(Blockly.Blocks, SdSeekBlock.type_name, new SdSeekBlock());
|
---|
256 | Script.Set(Blockly.Blocks, SdWriteBlock.type_name, new SdWriteBlock());
|
---|
257 | Script.Set(Blockly.Blocks, SdFlushBlock.type_name, new SdFlushBlock());
|
---|
258 | Script.Set(Blockly.Blocks, SdSizeBlock.type_name, new SdSizeBlock());
|
---|
259 | Script.Set(Blockly.Blocks, SdPositionBlock.type_name, new SdPositionBlock());
|
---|
260 | Script.Set(Blockly.Blocks, BpsValueBlock.type_name, new BpsValueBlock());
|
---|
261 | Script.Set(Blockly.Blocks, SerialNewBlock.type_name, new SerialNewBlock());
|
---|
262 | Script.Set(Blockly.Blocks, SerialBpsBlock.type_name, new SerialBpsBlock());
|
---|
263 | Script.Set(Blockly.Blocks, SerialPrintBlock.type_name, new SerialPrintBlock());
|
---|
264 | Script.Set(Blockly.Blocks, SerialPrintlnBlock.type_name, new SerialPrintlnBlock());
|
---|
265 | Script.Set(Blockly.Blocks, SerialAvailableBlock.type_name, new SerialAvailableBlock());
|
---|
266 | Script.Set(Blockly.Blocks, SerialReadBlock.type_name, new SerialReadBlock());
|
---|
267 | Script.Set(Blockly.Blocks, SerialWriteBlock.type_name, new SerialWriteBlock());
|
---|
268 | Script.Set(Blockly.Blocks, SerialFlashBlock.type_name, new SerialFlashBlock());
|
---|
269 | Script.Set(Blockly.Blocks, ServoAttachBlock.type_name, new ServoAttachBlock());
|
---|
270 | Script.Set(Blockly.Blocks, ServoWriteBlock.type_name, new ServoWriteBlock());
|
---|
271 | Script.Set(Blockly.Blocks, ServoAngleBlock.type_name, new ServoAngleBlock());
|
---|
272 | Script.Set(Blockly.Blocks, ServoUsBlock.type_name, new ServoUsBlock());
|
---|
273 | Script.Set(Blockly.Blocks, ServoUsValueBlock.type_name, new ServoUsValueBlock());
|
---|
274 | Script.Set(Blockly.Blocks, ServoReadBlock.type_name, new ServoReadBlock());
|
---|
275 | Script.Set(Blockly.Blocks, ServoAttachedBlock.type_name, new ServoAttachedBlock());
|
---|
276 | Script.Set(Blockly.Blocks, ServoDetachBlock.type_name, new ServoDetachBlock());
|
---|
277 | Script.Set(Blockly.Blocks, SystemExitBlock.type_name, new SystemExitBlock());
|
---|
278 | Script.Set(Blockly.Blocks, SystemSetRunBlock.type_name, new SystemSetRunBlock());
|
---|
279 | Script.Set(Blockly.Blocks, SystemVersionBlock.type_name, new SystemVersionBlock());
|
---|
280 | Script.Set(Blockly.Blocks, SystemPushBlock.type_name, new SystemPushBlock());
|
---|
281 | Script.Set(Blockly.Blocks, SystemPopBlock.type_name, new SystemPopBlock());
|
---|
282 | Script.Set(Blockly.Blocks, SystemFileLoadBlock.type_name, new SystemFileLoadBlock());
|
---|
283 | Script.Set(Blockly.Blocks, SystemResetBlock.type_name, new SystemResetBlock());
|
---|
284 | Script.Set(Blockly.Blocks, SystemUseSdBlock.type_name, new SystemUseSdBlock());
|
---|
285 | Script.Set(Blockly.Blocks, SystemUseWifiBlock.type_name, new SystemUseWifiBlock());
|
---|
286 | Script.Set(Blockly.Blocks, SystemGetMrbPathBlock.type_name, new SystemGetMrbPathBlock());
|
---|
287 | Script.Set(Blockly.Blocks, HexadecimalBlock.type_name, new HexadecimalBlock());
|
---|
288 | Blockly.Procedures = new Procedures();
|
---|
289 | Blockly.Variables = new Variables();
|
---|
290 | Blockly.Names = new Names("");
|
---|
291 | }
|
---|
292 |
|
---|
293 | public BlocklyView(string identifier)
|
---|
294 | {
|
---|
295 | Identifier = identifier;
|
---|
296 |
|
---|
297 | FlyoutCategoryHandlers.Add(Blockly.Procedures.NAME_TYPE, Blockly.Procedures.flyoutCategory);
|
---|
298 | FlyoutCategoryHandlers.Add(Blockly.Variables.NAME_TYPE, Blockly.Variables.flyoutCategory);
|
---|
299 | }
|
---|
300 |
|
---|
301 | public Workspace Init()
|
---|
302 | {
|
---|
303 | var tab = jQuery.Select("#block-tab-right-pane");
|
---|
304 | // <div dir="LTR" id="blockly-div"></div>
|
---|
305 | var div = new jQuery("<div>");
|
---|
306 | div.Attr("dir", "LTR");
|
---|
307 | div.Attr("class", "blockly-div");
|
---|
308 | _IdNo = No++;
|
---|
309 | _WorkspaceElementId = "blockly-div" + _IdNo;
|
---|
310 | div.Attr("id", _WorkspaceElementId);
|
---|
311 | div.Attr("style", "z-index: " + _IdNo);
|
---|
312 | tab.Append(div);
|
---|
313 |
|
---|
314 | Blockly.HSV_SATURATION = 1.0;
|
---|
315 | Blockly.HSV_VALUE = 0.8;
|
---|
316 | _Workspace = Blockly.inject(_WorkspaceElementId, new {
|
---|
317 | toolbox = Document.GetElementById("toolbox"),
|
---|
318 | collapse = true,
|
---|
319 | comments = true,
|
---|
320 | disable = true,
|
---|
321 | maxBlocks = Script.Infinity,
|
---|
322 | trashcan = true,
|
---|
323 | horizontalLayout = false,
|
---|
324 | toolboxPosition = "start",
|
---|
325 | css = true,
|
---|
326 | rtl = false,
|
---|
327 | scrollbars = true,
|
---|
328 | sounds = false,
|
---|
329 | oneBasedIndex = false,
|
---|
330 | zoom = new {
|
---|
331 | controls = true,
|
---|
332 | wheel = true,
|
---|
333 | startScale = 0.8,
|
---|
334 | maxcale = 3,
|
---|
335 | minScale = 0.3
|
---|
336 | }
|
---|
337 | });
|
---|
338 |
|
---|
339 | if (No != 2)
|
---|
340 | Hide();
|
---|
341 | else
|
---|
342 | Show();
|
---|
343 |
|
---|
344 | Script.Set(Script.Get(Script.Get(_Workspace, "toolbox_"), "flyout_"),
|
---|
345 | "flyoutCategory",
|
---|
346 | new Func<Union<string, Element[]>, Workspace, Element[]>(FlyoutCategory));
|
---|
347 |
|
---|
348 | _Workspace.addChangeListener(Workspace_Changed);
|
---|
349 |
|
---|
350 | return _Workspace;
|
---|
351 | }
|
---|
352 |
|
---|
353 | internal void Dispose()
|
---|
354 | {
|
---|
355 | jQuery.Select("#" + _WorkspaceElementId).Remove();
|
---|
356 | _Workspace.clear();
|
---|
357 | _Workspace.dispose();
|
---|
358 | }
|
---|
359 |
|
---|
360 | internal void Show()
|
---|
361 | {
|
---|
362 | var div = jQuery.Select("#" + _WorkspaceElementId);
|
---|
363 | div.Attr("style", "z-index: " + (_IdNo + 100));
|
---|
364 |
|
---|
365 | Blockly.mainWorkspace = _Workspace;
|
---|
366 | }
|
---|
367 |
|
---|
368 | internal void Hide()
|
---|
369 | {
|
---|
370 | var div = jQuery.Select("#" + _WorkspaceElementId);
|
---|
371 | div.Attr("style", "z-index: " + _IdNo);
|
---|
372 | }
|
---|
373 |
|
---|
374 | private void Workspace_Changed(Abstract e)
|
---|
375 | {
|
---|
376 | Changed = true;
|
---|
377 |
|
---|
378 | switch (e.type) {
|
---|
379 | case WebMrbc.Events.CREATE:
|
---|
380 | Create cre = (Create)e;
|
---|
381 | BlockCreated?.Invoke(this, cre);
|
---|
382 | break;
|
---|
383 | case WebMrbc.Events.DELETE:
|
---|
384 | Delete del = (Delete)e;
|
---|
385 | BlockDeleted?.Invoke(this, del);
|
---|
386 | break;
|
---|
387 | case WebMrbc.Events.CHANGE:
|
---|
388 | Change chg = (Change)e;
|
---|
389 | BlockChanged?.Invoke(this, chg);
|
---|
390 | break;
|
---|
391 | case WebMrbc.Events.MOVE:
|
---|
392 | Move mov = (Move)e;
|
---|
393 | BlockMoveed?.Invoke(this, mov);
|
---|
394 | break;
|
---|
395 | case WebMrbc.Events.UI:
|
---|
396 | Ui ui = (Ui)e;
|
---|
397 | UiEvent?.Invoke(this, ui);
|
---|
398 | break;
|
---|
399 | }
|
---|
400 | }
|
---|
401 |
|
---|
402 | internal void ReloadToolbox(IClassWorkspace workspace)
|
---|
403 | {
|
---|
404 | if (_Workspace != workspace.Workspace)
|
---|
405 | throw new Exception();
|
---|
406 |
|
---|
407 | Blockly.mainWorkspace = _Workspace;
|
---|
408 | Blockly.hideChaff();
|
---|
409 |
|
---|
410 | var toolbox = Document.CreateElement<HTMLElement>("xml");
|
---|
411 | toolbox.InnerHTML = Document.GetElementById("toolbox").InnerHTML;
|
---|
412 | workspace.ReloadToolbox(toolbox);
|
---|
413 |
|
---|
414 | _Workspace.updateToolbox(toolbox);
|
---|
415 | }
|
---|
416 |
|
---|
417 | public virtual Element[] FlyoutCategory(Union<string, Element[]> name, Workspace workspace)
|
---|
418 | {
|
---|
419 | if (!name.Is<string>())
|
---|
420 | return name.Cast<Element[]>();
|
---|
421 |
|
---|
422 | FlyoutCategoryHandler handler;
|
---|
423 | if (FlyoutCategoryHandlers.TryGetValue(name.Cast<string>(), out handler)) {
|
---|
424 | return handler(workspace);
|
---|
425 | }
|
---|
426 | return new Element[0];
|
---|
427 | }
|
---|
428 | }
|
---|
429 |
|
---|
430 | public delegate Element[] FlyoutCategoryHandler(Workspace workspace);
|
---|
431 | }
|
---|