using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using Bridge; using Bridge.Html5; using Bridge.jQuery2; namespace WebMrbc { public class BlocklyView { string identifier; public string Identifier { get { return identifier; } set { if (identifier != value) { identifier = value; IdentifierChanged?.Invoke(this, EventArgs.Empty); } } } public Dictionary FlyoutCategoryHandlers = new Dictionary(); public event EventHandler BlockCreated; public event EventHandler BlockDeleted; public event EventHandler BlockChanged; public event EventHandler BlockMoveed; public event EventHandler UiEvent; public event EventHandler IdentifierChanged; public bool Changed = true; private static int No = 1; private WorkspaceSvg _Workspace; private string _WorkspaceElementId; private int _IdNo; static BlocklyView() { Script.Set(Blockly.Blocks, ColourPickerBlock.type_name, new ColourPickerBlock()); Script.Set(Blockly.Blocks, ColourRandomBlock.type_name, new ColourRandomBlock()); Script.Set(Blockly.Blocks, ColourRGBBlock.type_name, new ColourRGBBlock()); Script.Set(Blockly.Blocks, ColourBlendBlock.type_name, new ColourBlendBlock()); Script.Set(Blockly.Blocks, ListsCreateEmptyBlock.type_name, new ListsCreateEmptyBlock()); Script.Set(Blockly.Blocks, ListsCreateWithBlock.type_name, new ListsCreateWithBlock()); Script.Set(Blockly.Blocks, ListsCreateWithContainerBlock.type_name, new ListsCreateWithContainerBlock()); Script.Set(Blockly.Blocks, ListsCreateWithItemBlock.type_name, new ListsCreateWithItemBlock()); Script.Set(Blockly.Blocks, ListsRepeatBlock.type_name, new ListsRepeatBlock()); Script.Set(Blockly.Blocks, ListsLengthBlock.type_name, new ListsLengthBlock()); Script.Set(Blockly.Blocks, ListsIsEmptyBlock.type_name, new ListsIsEmptyBlock()); Script.Set(Blockly.Blocks, ListsIndexOfBlock.type_name, new ListsIndexOfBlock()); Script.Set(Blockly.Blocks, ListsGetIndexBlock.type_name, new ListsGetIndexBlock()); Script.Set(Blockly.Blocks, ListsSetIndexBlock.type_name, new ListsSetIndexBlock()); Script.Set(Blockly.Blocks, ListsGetSublistBlock.type_name, new ListsGetSublistBlock()); Script.Set(Blockly.Blocks, ListsSortBlock.type_name, new ListsSortBlock()); Script.Set(Blockly.Blocks, ListsSplitBlock.type_name, new ListsSplitBlock()); Script.Set(Blockly.Blocks, ControlsIfBlock.type_name, new ControlsIfBlock()); Script.Set(Blockly.Blocks, ControlsIfIfBlock.type_name, new ControlsIfIfBlock()); Script.Set(Blockly.Blocks, ControlsIfElseIfBlock.type_name, new ControlsIfElseIfBlock()); Script.Set(Blockly.Blocks, ControlsIfElseBlock.type_name, new ControlsIfElseBlock()); Script.Set(Blockly.Blocks, SwitchCaseNumberBlock.type_name, new SwitchCaseNumberBlock()); Script.Set(Blockly.Blocks, SwitchCaseNumberContainerBlock.type_name, new SwitchCaseNumberContainerBlock()); Script.Set(Blockly.Blocks, SwitchCaseNumberConstBlock.type_name, new SwitchCaseNumberConstBlock()); Script.Set(Blockly.Blocks, SwitchCaseNumberRangeBlock.type_name, new SwitchCaseNumberRangeBlock()); Script.Set(Blockly.Blocks, SwitchCaseNumberDefaultBlock.type_name, new SwitchCaseNumberDefaultBlock()); Script.Set(Blockly.Blocks, SwitchCaseTextBlock.type_name, new SwitchCaseTextBlock()); Script.Set(Blockly.Blocks, SwitchCaseTextContainerBlock.type_name, new SwitchCaseTextContainerBlock()); Script.Set(Blockly.Blocks, SwitchCaseTextConstBlock.type_name, new SwitchCaseTextConstBlock()); Script.Set(Blockly.Blocks, SwitchCaseTextRangeBlock.type_name, new SwitchCaseTextRangeBlock()); Script.Set(Blockly.Blocks, SwitchCaseTextDefaultBlock.type_name, new SwitchCaseTextDefaultBlock()); Script.Set(Blockly.Blocks, LogicCompareBlock.type_name, new LogicCompareBlock()); Script.Set(Blockly.Blocks, LogicOperationBlock.type_name, new LogicOperationBlock()); Script.Set(Blockly.Blocks, LogicNegateBlock.type_name, new LogicNegateBlock()); Script.Set(Blockly.Blocks, LogicBooleanBlock.type_name, new LogicBooleanBlock()); Script.Set(Blockly.Blocks, LogicNullBlock.type_name, new LogicNullBlock()); Script.Set(Blockly.Blocks, LogicTernaryBlock.type_name, new LogicTernaryBlock()); Script.Set(Blockly.Blocks, ControlsRepeatExtBlock.type_name, new ControlsRepeatExtBlock()); Script.Set(Blockly.Blocks, ControlsRepeatBlock.type_name, new ControlsRepeatBlock()); Script.Set(Blockly.Blocks, ControlsWhileUntilBlock.type_name, new ControlsWhileUntilBlock()); Script.Set(Blockly.Blocks, ControlsForBlock.type_name, new ControlsForBlock()); Script.Set(Blockly.Blocks, ControlsForEachBlock.type_name, new ControlsForEachBlock()); Script.Set(Blockly.Blocks, ControlsFlowStatementsBlock.type_name, new ControlsFlowStatementsBlock()); Script.Set(Blockly.Blocks, MathNumberBlock.type_name, new MathNumberBlock()); Script.Set(Blockly.Blocks, MathArithmeticBlock.type_name, new MathArithmeticBlock()); Script.Set(Blockly.Blocks, MathSingleBlock.type_name, new MathSingleBlock()); Script.Set(Blockly.Blocks, MathTrigBlock.type_name, new MathTrigBlock()); Script.Set(Blockly.Blocks, MathConstantBlock.type_name, new MathConstantBlock()); Script.Set(Blockly.Blocks, MathNumberPropertyBlock.type_name, new MathNumberPropertyBlock()); Script.Set(Blockly.Blocks, MathChangeBlock.type_name, new MathChangeBlock()); Script.Set(Blockly.Blocks, MathRoundBlock.type_name, new MathRoundBlock()); Script.Set(Blockly.Blocks, MathOnListBlock.type_name, new MathOnListBlock()); Script.Set(Blockly.Blocks, MathModuloBlock.type_name, new MathModuloBlock()); Script.Set(Blockly.Blocks, MathConstrainBlock.type_name, new MathConstrainBlock()); Script.Set(Blockly.Blocks, MathRandomIntBlock.type_name, new MathRandomIntBlock()); Script.Set(Blockly.Blocks, MathRandomFloatBlock.type_name, new MathRandomFloatBlock()); Script.Set(Blockly.Blocks, ProceduresDefnoreturnBlock.type_name, new ProceduresDefnoreturnBlock()); Script.Set(Blockly.Blocks, ProceduresDefreturnBlock.type_name, new ProceduresDefreturnBlock()); Script.Set(Blockly.Blocks, ProceduresMutatorcontainerBlock.type_name, new ProceduresMutatorcontainerBlock()); Script.Set(Blockly.Blocks, ProceduresMutatorargBlock.type_name, new ProceduresMutatorargBlock()); Script.Set(Blockly.Blocks, ProceduresCallnoreturnBlock.type_name, new ProceduresCallnoreturnBlock()); Script.Set(Blockly.Blocks, ProceduresCallreturnBlock.type_name, new ProceduresCallreturnBlock()); Script.Set(Blockly.Blocks, ProceduresIfreturnBlock.type_name, new ProceduresIfreturnBlock()); Script.Set(Blockly.Blocks, TextBlock.type_name, new TextBlock()); Script.Set(Blockly.Blocks, TextJoinBlock.type_name, new TextJoinBlock()); Script.Set(Blockly.Blocks, TextCreateJoinContainerBlock.type_name, new TextCreateJoinContainerBlock()); Script.Set(Blockly.Blocks, TextCreateJoinItemBlock.type_name, new TextCreateJoinItemBlock()); Script.Set(Blockly.Blocks, TextAppendBlock.type_name, new TextAppendBlock()); Script.Set(Blockly.Blocks, TextLengthBlock.type_name, new TextLengthBlock()); Script.Set(Blockly.Blocks, TextIsEmptyBlock.type_name, new TextIsEmptyBlock()); Script.Set(Blockly.Blocks, TextIndexOfBlock.type_name, new TextIndexOfBlock()); Script.Set(Blockly.Blocks, TextCharAtBlock.type_name, new TextCharAtBlock()); Script.Set(Blockly.Blocks, TextGetSubstringBlock.type_name, new TextGetSubstringBlock()); Script.Set(Blockly.Blocks, TextChangeCaseBlock.type_name, new TextChangeCaseBlock()); Script.Set(Blockly.Blocks, TextTrimBlock.type_name, new TextTrimBlock()); Script.Set(Blockly.Blocks, TextPrintBlock.type_name, new TextPrintBlock()); Script.Set(Blockly.Blocks, TextPromptExtBlock.type_name, new TextPromptExtBlock()); Script.Set(Blockly.Blocks, TextPromptBlock.type_name, new TextPromptBlock()); Script.Set(Blockly.Blocks, VariablesGetBlock.type_name, new VariablesGetBlock()); Script.Set(Blockly.Blocks, VariablesSetBlock.type_name, new VariablesSetBlock()); Script.Set(Blockly.Blocks, ENodeInitializeBlock.type_name, new ENodeInitializeBlock()); Script.Set(Blockly.Blocks, EObjectInitializeBlock.type_name, new EObjectInitializeBlock()); Script.Set(Blockly.Blocks, EPropertyFixLenBlock.type_name, new EPropertyFixLenBlock()); Script.Set(Blockly.Blocks, EPropertyFixLenContainerBlock.type_name, new EPropertyFixLenContainerBlock()); Script.Set(Blockly.Blocks, EPropertyFixLenConstBlock.type_name, new EPropertyFixLenConstBlock()); Script.Set(Blockly.Blocks, EPropertyFixLenRangeBlock.type_name, new EPropertyFixLenRangeBlock()); Script.Set(Blockly.Blocks, EPropertyFixLenDefaultBlock.type_name, new EPropertyFixLenDefaultBlock()); Script.Set(Blockly.Blocks, EPropertyVarLenBlock.type_name, new EPropertyVarLenBlock()); Script.Set(Blockly.Blocks, EcnlPropertyAttributeBlock.type_name, new EcnlPropertyAttributeBlock()); Script.Set(Blockly.Blocks, EcnlServiceCodeBlock.type_name, new EcnlServiceCodeBlock()); Script.Set(Blockly.Blocks, EcnlNodeIDBlock.type_name, new EcnlNodeIDBlock()); Script.Set(Blockly.Blocks, EcnlSaveReceivedPropertyBlock.type_name, new EcnlSaveReceivedPropertyBlock()); Script.Set(Blockly.Blocks, EcnlGetSavedPropertyBlock.type_name, new EcnlGetSavedPropertyBlock()); Script.Set(Blockly.Blocks, EcnlGetPropertyInfoBlock.type_name, new EcnlGetPropertyInfoBlock()); Script.Set(Blockly.Blocks, EcnlSetAnnounceRequestBlock.type_name, new EcnlSetAnnounceRequestBlock()); Script.Set(Blockly.Blocks, EcnlDataToNumberBlock.type_name, new EcnlDataToNumberBlock()); Script.Set(Blockly.Blocks, EcnlNumberToDataBlock.type_name, new EcnlNumberToDataBlock()); Script.Set(Blockly.Blocks, EcnlNoOpBlock.type_name, new EcnlNoOpBlock()); Script.Set(Blockly.Blocks, EcnlReceivedDataBlock.type_name, new EcnlReceivedDataBlock()); Script.Set(Blockly.Blocks, EcnlReceivedDataSizeBlock.type_name, new EcnlReceivedDataSizeBlock()); Script.Set(Blockly.Blocks, DataJoinBlock.type_name, new DataJoinBlock()); Script.Set(Blockly.Blocks, DataCreateJoinContainerBlock.type_name, new DataCreateJoinContainerBlock()); Script.Set(Blockly.Blocks, DataCreateJoinItemBlock.type_name, new DataCreateJoinItemBlock()); Script.Set(Blockly.Blocks, CreateEsvGetBlock.type_name, new CreateEsvGetBlock()); Script.Set(Blockly.Blocks, CreateEsvSetBlock.type_name, new CreateEsvSetBlock()); Script.Set(Blockly.Blocks, EsvAddEdtBlock.type_name, new EsvAddEdtBlock()); Script.Set(Blockly.Blocks, EsvAddEpcBlock.type_name, new EsvAddEpcBlock()); Script.Set(Blockly.Blocks, SendEsvBlock.type_name, new SendEsvBlock()); Script.Set(Blockly.Blocks, ReleaseEsvBlock.type_name, new ReleaseEsvBlock()); Script.Set(Blockly.Blocks, NotifyInitialEsvBlock.type_name, new NotifyInitialEsvBlock()); Script.Set(Blockly.Blocks, EsvGetEsvBlock.type_name, new EsvGetEsvBlock()); Script.Set(Blockly.Blocks, EsvIterateBlock.type_name, new EsvIterateBlock()); Script.Set(Blockly.Blocks, EsvIteratorBlock.type_name, new EsvIteratorBlock()); Script.Set(Blockly.Blocks, SvctaskSetTimerBlock.type_name, new SvctaskSetTimerBlock()); Script.Set(Blockly.Blocks, SvctaskTimerBlock.type_name, new SvctaskTimerBlock()); Script.Set(Blockly.Blocks, SvctaskProgressBlock.type_name, new SvctaskProgressBlock()); Script.Set(Blockly.Blocks, SvctaskRecvMsgBlock.type_name, new SvctaskRecvMsgBlock()); Script.Set(Blockly.Blocks, SvctaskCallTimeoutBlock.type_name, new SvctaskCallTimeoutBlock()); Script.Set(Blockly.Blocks, SvctaskIsMatchBlock.type_name, new SvctaskIsMatchBlock()); Script.Set(Blockly.Blocks, CallBlock.type_name, new CallBlock()); Script.Set(Blockly.Blocks, PinModeBlock.type_name, new PinModeBlock()); Script.Set(Blockly.Blocks, DigitalWriteBlock.type_name, new DigitalWriteBlock()); Script.Set(Blockly.Blocks, DigitalReadBlock.type_name, new DigitalReadBlock()); Script.Set(Blockly.Blocks, AnalogReadBlock.type_name, new AnalogReadBlock()); Script.Set(Blockly.Blocks, PwmBlock.type_name, new PwmBlock()); Script.Set(Blockly.Blocks, PwmValueBlock.type_name, new PwmValueBlock()); Script.Set(Blockly.Blocks, AnalogReferenceBlock.type_name, new AnalogReferenceBlock()); Script.Set(Blockly.Blocks, InitDacBlock.type_name, new InitDacBlock()); Script.Set(Blockly.Blocks, AnalogDacBlock.type_name, new AnalogDacBlock()); Script.Set(Blockly.Blocks, DacValueBlock.type_name, new DacValueBlock()); Script.Set(Blockly.Blocks, DelayBlock.type_name, new DelayBlock()); Script.Set(Blockly.Blocks, MillisBlock.type_name, new MillisBlock()); Script.Set(Blockly.Blocks, MicrosBlock.type_name, new MicrosBlock()); Script.Set(Blockly.Blocks, LedBlock.type_name, new LedBlock()); Script.Set(Blockly.Blocks, BitBlock.type_name, new BitBlock()); Script.Set(Blockly.Blocks, ToneBlock.type_name, new ToneBlock()); Script.Set(Blockly.Blocks, ToneValueBlock.type_name, new ToneValueBlock()); Script.Set(Blockly.Blocks, NoToneBlock.type_name, new NoToneBlock()); Script.Set(Blockly.Blocks, RandomSeedBlock.type_name, new RandomSeedBlock()); Script.Set(Blockly.Blocks, RandomBlock.type_name, new RandomBlock()); Script.Set(Blockly.Blocks, I2cNewBlock.type_name, new I2cNewBlock()); Script.Set(Blockly.Blocks, I2cWriteBlock.type_name, new I2cWriteBlock()); Script.Set(Blockly.Blocks, I2cReadBlock.type_name, new I2cReadBlock()); Script.Set(Blockly.Blocks, I2cBeginBlock.type_name, new I2cBeginBlock()); Script.Set(Blockly.Blocks, I2cLwriteBlock.type_name, new I2cLwriteBlock()); Script.Set(Blockly.Blocks, I2cEndBlock.type_name, new I2cEndBlock()); Script.Set(Blockly.Blocks, I2cRequestBlock.type_name, new I2cRequestBlock()); Script.Set(Blockly.Blocks, I2cLreadBlock.type_name, new I2cLreadBlock()); Script.Set(Blockly.Blocks, I2cAvailableBlock.type_name, new I2cAvailableBlock()); Script.Set(Blockly.Blocks, I2cFrequencyBlock.type_name, new I2cFrequencyBlock()); Script.Set(Blockly.Blocks, MemFileOpenBlock.type_name, new MemFileOpenBlock()); Script.Set(Blockly.Blocks, MemFileCloseBlock.type_name, new MemFileCloseBlock()); Script.Set(Blockly.Blocks, MemFileReadBlock.type_name, new MemFileReadBlock()); Script.Set(Blockly.Blocks, MemFileWriteBlock.type_name, new MemFileWriteBlock()); Script.Set(Blockly.Blocks, MemFileSeekBlock.type_name, new MemFileSeekBlock()); Script.Set(Blockly.Blocks, MemFileCpBlock.type_name, new MemFileCpBlock()); Script.Set(Blockly.Blocks, MemFileRmBlock.type_name, new MemFileRmBlock()); Script.Set(Blockly.Blocks, RtcYearBlock.type_name, new RtcYearBlock()); Script.Set(Blockly.Blocks, RtcMonthBlock.type_name, new RtcMonthBlock()); Script.Set(Blockly.Blocks, RtcDayBlock.type_name, new RtcDayBlock()); Script.Set(Blockly.Blocks, RtcHourBlock.type_name, new RtcHourBlock()); Script.Set(Blockly.Blocks, RtcMinuteBlock.type_name, new RtcMinuteBlock()); Script.Set(Blockly.Blocks, RtcSecondBlock.type_name, new RtcSecondBlock()); Script.Set(Blockly.Blocks, RtcWeekDayBlock.type_name, new RtcWeekDayBlock()); Script.Set(Blockly.Blocks, RtcDateTimeBlock.type_name, new RtcDateTimeBlock()); Script.Set(Blockly.Blocks, RtcDateTimeItemBlock.type_name, new RtcDateTimeItemBlock()); Script.Set(Blockly.Blocks, RtcSetDateTimeItemBlock.type_name, new RtcSetDateTimeItemBlock()); Script.Set(Blockly.Blocks, RtcGetTimeBlock.type_name, new RtcGetTimeBlock()); Script.Set(Blockly.Blocks, RtcSettimeBlock.type_name, new RtcSettimeBlock()); Script.Set(Blockly.Blocks, RtcDeinitBlock.type_name, new RtcDeinitBlock()); Script.Set(Blockly.Blocks, RtcInitBlock.type_name, new RtcInitBlock()); Script.Set(Blockly.Blocks, SdExistsBlock.type_name, new SdExistsBlock()); Script.Set(Blockly.Blocks, SdMkdirBlock.type_name, new SdMkdirBlock()); Script.Set(Blockly.Blocks, SdRemoveBlock.type_name, new SdRemoveBlock()); Script.Set(Blockly.Blocks, SdCopyBlock.type_name, new SdCopyBlock()); Script.Set(Blockly.Blocks, SdRmdirBlock.type_name, new SdRmdirBlock()); Script.Set(Blockly.Blocks, SdOpenBlock.type_name, new SdOpenBlock()); Script.Set(Blockly.Blocks, SdCloseBlock.type_name, new SdCloseBlock()); Script.Set(Blockly.Blocks, SdReadBlock.type_name, new SdReadBlock()); Script.Set(Blockly.Blocks, SdSeekBlock.type_name, new SdSeekBlock()); Script.Set(Blockly.Blocks, SdWriteBlock.type_name, new SdWriteBlock()); Script.Set(Blockly.Blocks, SdFlushBlock.type_name, new SdFlushBlock()); Script.Set(Blockly.Blocks, SdSizeBlock.type_name, new SdSizeBlock()); Script.Set(Blockly.Blocks, SdPositionBlock.type_name, new SdPositionBlock()); Script.Set(Blockly.Blocks, BpsValueBlock.type_name, new BpsValueBlock()); Script.Set(Blockly.Blocks, SerialNewBlock.type_name, new SerialNewBlock()); Script.Set(Blockly.Blocks, SerialBpsBlock.type_name, new SerialBpsBlock()); Script.Set(Blockly.Blocks, SerialPrintBlock.type_name, new SerialPrintBlock()); Script.Set(Blockly.Blocks, SerialPrintlnBlock.type_name, new SerialPrintlnBlock()); Script.Set(Blockly.Blocks, SerialAvailableBlock.type_name, new SerialAvailableBlock()); Script.Set(Blockly.Blocks, SerialReadBlock.type_name, new SerialReadBlock()); Script.Set(Blockly.Blocks, SerialWriteBlock.type_name, new SerialWriteBlock()); Script.Set(Blockly.Blocks, SerialFlashBlock.type_name, new SerialFlashBlock()); Script.Set(Blockly.Blocks, ServoAttachBlock.type_name, new ServoAttachBlock()); Script.Set(Blockly.Blocks, ServoWriteBlock.type_name, new ServoWriteBlock()); Script.Set(Blockly.Blocks, ServoAngleBlock.type_name, new ServoAngleBlock()); Script.Set(Blockly.Blocks, ServoUsBlock.type_name, new ServoUsBlock()); Script.Set(Blockly.Blocks, ServoUsValueBlock.type_name, new ServoUsValueBlock()); Script.Set(Blockly.Blocks, ServoReadBlock.type_name, new ServoReadBlock()); Script.Set(Blockly.Blocks, ServoAttachedBlock.type_name, new ServoAttachedBlock()); Script.Set(Blockly.Blocks, ServoDetachBlock.type_name, new ServoDetachBlock()); Script.Set(Blockly.Blocks, SystemExitBlock.type_name, new SystemExitBlock()); Script.Set(Blockly.Blocks, SystemSetRunBlock.type_name, new SystemSetRunBlock()); Script.Set(Blockly.Blocks, SystemVersionBlock.type_name, new SystemVersionBlock()); Script.Set(Blockly.Blocks, SystemPushBlock.type_name, new SystemPushBlock()); Script.Set(Blockly.Blocks, SystemPopBlock.type_name, new SystemPopBlock()); Script.Set(Blockly.Blocks, SystemFileLoadBlock.type_name, new SystemFileLoadBlock()); Script.Set(Blockly.Blocks, SystemResetBlock.type_name, new SystemResetBlock()); Script.Set(Blockly.Blocks, SystemUseSdBlock.type_name, new SystemUseSdBlock()); Script.Set(Blockly.Blocks, SystemUseWifiBlock.type_name, new SystemUseWifiBlock()); Script.Set(Blockly.Blocks, SystemGetMrbPathBlock.type_name, new SystemGetMrbPathBlock()); Script.Set(Blockly.Blocks, HexadecimalBlock.type_name, new HexadecimalBlock()); Blockly.Procedures = new Procedures(); Blockly.Variables = new Variables(); Blockly.Names = new Names(""); } public BlocklyView(string identifier) { Identifier = identifier; FlyoutCategoryHandlers.Add(Blockly.Procedures.NAME_TYPE, Blockly.Procedures.flyoutCategory); FlyoutCategoryHandlers.Add(Blockly.Variables.NAME_TYPE, Blockly.Variables.flyoutCategory); } public Workspace Init() { var tab = jQuery.Select("#block-tab-right-pane"); //
var div = new jQuery("
"); div.Attr("dir", "LTR"); div.Attr("class", "blockly-div"); _IdNo = No++; _WorkspaceElementId = "blockly-div" + _IdNo; div.Attr("id", _WorkspaceElementId); div.Attr("style", "z-index: " + _IdNo); tab.Append(div); Blockly.HSV_SATURATION = 1.0; Blockly.HSV_VALUE = 0.8; _Workspace = Blockly.inject(_WorkspaceElementId, new { toolbox = Document.GetElementById("toolbox"), collapse = true, comments = true, disable = true, maxBlocks = Script.Infinity, trashcan = true, horizontalLayout = false, toolboxPosition = "start", css = true, rtl = false, scrollbars = true, sounds = false, oneBasedIndex = false, zoom = new { controls = true, wheel = true, startScale = 0.8, maxcale = 3, minScale = 0.3 } }); if (No != 2) Hide(); else Show(); Script.Set(Script.Get(Script.Get(_Workspace, "toolbox_"), "flyout_"), "flyoutCategory", new Func, Workspace, Element[]>(FlyoutCategory)); _Workspace.addChangeListener(Workspace_Changed); return _Workspace; } internal void Dispose() { jQuery.Select("#" + _WorkspaceElementId).Remove(); _Workspace.clear(); _Workspace.dispose(); } internal void Show() { var div = jQuery.Select("#" + _WorkspaceElementId); div.Attr("style", "z-index: " + (_IdNo + 100)); Blockly.mainWorkspace = _Workspace; } internal void Hide() { var div = jQuery.Select("#" + _WorkspaceElementId); div.Attr("style", "z-index: " + _IdNo); } private void Workspace_Changed(Abstract e) { Changed = true; switch (e.type) { case WebMrbc.Events.CREATE: Create cre = (Create)e; BlockCreated?.Invoke(this, cre); break; case WebMrbc.Events.DELETE: Delete del = (Delete)e; BlockDeleted?.Invoke(this, del); break; case WebMrbc.Events.CHANGE: Change chg = (Change)e; BlockChanged?.Invoke(this, chg); break; case WebMrbc.Events.MOVE: Move mov = (Move)e; BlockMoveed?.Invoke(this, mov); break; case WebMrbc.Events.UI: Ui ui = (Ui)e; UiEvent?.Invoke(this, ui); break; } } internal void ReloadToolbox(IClassWorkspace workspace) { if (_Workspace != workspace.Workspace) throw new Exception(); Blockly.mainWorkspace = _Workspace; Blockly.hideChaff(); var toolbox = Document.CreateElement("xml"); toolbox.InnerHTML = Document.GetElementById("toolbox").InnerHTML; workspace.ReloadToolbox(toolbox); _Workspace.updateToolbox(toolbox); } public virtual Element[] FlyoutCategory(Union name, Workspace workspace) { if (!name.Is()) return name.Cast(); FlyoutCategoryHandler handler; if (FlyoutCategoryHandlers.TryGetValue(name.Cast(), out handler)) { return handler(workspace); } return new Element[0]; } } public delegate Element[] FlyoutCategoryHandler(Workspace workspace); }