source: EcnlProtoTool/trunk/webapp/webmrbc/BlocklyView.cs@ 287

Last change on this file since 287 was 287, checked in by coas-nagasima, 7 years ago

ファイルヘッダーコメントを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csharp
File size: 24.6 KB
Line 
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: BlocklyView.cs 287 2017-05-05 14:22:23Z coas-nagasima $
36 */
37using System;
38using System.Collections;
39using System.Collections.Generic;
40using System.Linq;
41using System.Text;
42using Bridge;
43using Bridge.Html5;
44using Bridge.jQuery2;
45
46namespace 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}
Note: See TracBrowser for help on using the repository browser.