/// <summary> /// Create the appropriate designer control. /// </summary> public IDesignerControl CreateDesigner(IIde ide, IXmlStore store, IXmlModel model, IServiceProvider serviceProvider, IVsTextLines textBuffer) { var viewModel = new XmlMenuViewModel(store, model, serviceProvider, textBuffer); viewModel.Initialize(); return(new XmlMenuDesignerControl(ide, serviceProvider, viewModel)); }
///////////////////////////////////////////////////////// #region Constructors /// <summary> /// Initializes a new instance of the <see cref="SolutionPagePresenter"/> class. /// </summary> /// <param name="view">The view.</param> /// <param name="viewModel">The view model.</param> /// <param name="model">The model.</param> /// <param name="viewStateProvider">A common <see cref="IViewStateProvider"/>.</param> /// <param name="fileSystem">The file sytem access.</param> /// <param name="systemInterface">The interface for system operations.</param> /// <param name="userIOInterface">The user IO interface.</param> /// <param name="ide">Information about the current Visual Studio instance.</param> /// <exception cref="ArgumentNullException">Any parameter is null.</exception> public SolutionPagePresenter([NotNull] ISolutionPageView view, [NotNull] ISolutionPageViewModel viewModel, [NotNull] ISolutionPageModel model, [NotNull] IViewStateProvider viewStateProvider, [NotNull] IFileSystem fileSystem, [NotNull] ISystemInterface systemInterface, [NotNull] IUserIOInterface userIOInterface, [NotNull] IIde ide) : base(view, viewModel) { ThrowIfNull(model, nameof(model)); ThrowIfNull(viewStateProvider, nameof(viewStateProvider)); ThrowIfNull(fileSystem, nameof(fileSystem)); ThrowIfNull(systemInterface, nameof(systemInterface)); ThrowIfNull(userIOInterface, nameof(userIOInterface)); ThrowIfNull(ide, nameof(ide)); _model = model; _viewStateProvider = viewStateProvider; _fileSystem = fileSystem; _systemInterface = systemInterface; _userIOInterface = userIOInterface; _ide = ide; _configuration = _model.LoadConfiguration(); }
/// <summary> /// Start looking for JDWP processes now. /// </summary> internal static void StartLaunchMonitor(IIde ide, IDevice device, string apkPath, string packageName, int apiLevel, int launchFlags, Action<LauncherStates, string> stateUpdate, CancellationToken token) { OutputPaneLog.EnsureLoaded(ide); var newMonitor = new LaunchMonitor(ide, device, apkPath, packageName, apiLevel, launchFlags, stateUpdate, token); monitor = newMonitor; newMonitor.Start(); }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List <Tuple <ToolStripMenuItem, Func <bool> > >(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) { tuple.Item1.Checked = tuple.Item2(); } }); var createItem = Ut.Lambda((string label, Action action, Func <bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple <ToolStripMenuItem, Func <bool> >(menuItem, checkedFunc)); return(menuItem); }); var ret = Ut.NewArray( new ToolStripMenuItem("&Semantics", null, createItem("Input &numbers line-wise, 0 if not a number", () => { _settings.NumberInputSemantics = NumberInputSemantics.LinewiseLenient; }, () => _settings.NumberInputSemantics == NumberInputSemantics.LinewiseLenient), createItem("Input n&umbers line-wise, error if not a number", () => { _settings.NumberInputSemantics = NumberInputSemantics.LinewiseStrict; }, () => _settings.NumberInputSemantics == NumberInputSemantics.LinewiseStrict), createItem("Input nu&mbers by skipping non-numerical text, error at EOF", () => { _settings.NumberInputSemantics = NumberInputSemantics.Minimal; }, () => _settings.NumberInputSemantics == NumberInputSemantics.Minimal), new ToolStripSeparator(), createItem("Output &characters as bytes", () => { _settings.OutputSemantics = CharacterSemantics.Bytewise; }, () => _settings.OutputSemantics == CharacterSemantics.Bytewise), createItem("Output c&haracters as Unicode", () => { _settings.OutputSemantics = CharacterSemantics.Unicode; }, () => _settings.OutputSemantics == CharacterSemantics.Unicode) ) ); update(); return(ret); }
/// <summary> /// Default ctor /// </summary> public ApkRunner(IIde ide, string apkPath, string packageName, string activity, bool debuggable, int launchFlags) { this.ide = ide; this.apkPath = apkPath; this.packageName = packageName; this.activity = activity; this.debuggable = debuggable; this.launchFlags = launchFlags; cancellationTokenSource = new CancellationTokenSource(); outputPane = ide.CreateDot42OutputPane(); DeployApk = true; // Load package try { var apk = new ApkFile(apkPath); if (!apk.Manifest.TryGetMinSdkVersion(out minSdkVersion)) minSdkVersion = -1; } catch (Exception ex) { minSdkVersion = -1; ErrorLog.DumpError(ex); } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List<Tuple<ToolStripMenuItem, Func<bool>>>(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) tuple.Item1.Checked = tuple.Item2(); }); var createItem = Ut.Lambda((string label, Action action, Func<bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple<ToolStripMenuItem, Func<bool>>(menuItem, checkedFunc)); return menuItem; }); var ret = Ut.NewArray( new ToolStripMenuItem("&Semantics", null, createItem("Input &numbers line-wise, 0 if not a number", () => { _settings.NumberInputSemantics = NumberInputSemantics.LinewiseLenient; }, () => _settings.NumberInputSemantics == NumberInputSemantics.LinewiseLenient), createItem("Input n&umbers line-wise, error if not a number", () => { _settings.NumberInputSemantics = NumberInputSemantics.LinewiseStrict; }, () => _settings.NumberInputSemantics == NumberInputSemantics.LinewiseStrict), createItem("Input nu&mbers by skipping non-numerical text, error at EOF", () => { _settings.NumberInputSemantics = NumberInputSemantics.Minimal; }, () => _settings.NumberInputSemantics == NumberInputSemantics.Minimal), new ToolStripSeparator(), createItem("Output &characters as bytes", () => { _settings.OutputSemantics = CharacterSemantics.Bytewise; }, () => _settings.OutputSemantics == CharacterSemantics.Bytewise), createItem("Output c&haracters as Unicode", () => { _settings.OutputSemantics = CharacterSemantics.Unicode; }, () => _settings.OutputSemantics == CharacterSemantics.Unicode) ) ); update(); return ret; }
/// <summary> /// Default ctor /// </summary> public BarRunner(IIde ide, string barPath, string packageName, string activity, bool debuggable, int launchFlags) { this.ide = ide; this.barPath = barPath; this.packageName = packageName; this.activity = activity; this.debuggable = debuggable; this.launchFlags = launchFlags; cancellationTokenSource = new CancellationTokenSource(); outputPane = ide.CreateDot42OutputPane(); // Load package /*try * { * var apk = new ApkFile(barPath); * if (!apk.Manifest.TryGetMinSdkVersion(out minSdkVersion)) * minSdkVersion = -1; * } * catch (Exception ex) * { * minSdkVersion = -1; * ErrorLog.DumpError(ex); * }*/ }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List<Tuple<ToolStripMenuItem, Func<bool>>>(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) tuple.Item1.Checked = tuple.Item2(); }); var createItem = Ut.Lambda((string label, Action action, Func<bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple<ToolStripMenuItem, Func<bool>>(menuItem, checkedFunc)); return menuItem; }); var ret = Ut.NewArray<ToolStripMenuItem>( new ToolStripMenuItem("&Semantics", null, createItem("Input as &numbers", () => { _settings.InputType = IOType.Numbers; }, () => _settings.InputType == IOType.Numbers), createItem("Input as &characters", () => { _settings.InputType = IOType.Characters; }, () => _settings.InputType == IOType.Characters), new ToolStripSeparator(), createItem("Output as nu&mbers", () => { _settings.OutputType = IOType.Numbers; }, () => _settings.OutputType == IOType.Numbers), createItem("Output as c&haracters", () => { _settings.OutputType = IOType.Characters; }, () => _settings.OutputType == IOType.Characters), new ToolStripSeparator(), createItem("Cells are &bytes", () => { _settings.CellType = CellType.Bytes; }, () => _settings.CellType == CellType.Bytes), createItem("Cells are &signed 32-bit integers", () => { _settings.CellType = CellType.Int32s; }, () => _settings.CellType == CellType.Int32s), createItem("Cells are &unsigned 32-bit integers", () => { _settings.CellType = CellType.UInt32s; }, () => _settings.CellType == CellType.UInt32s), createItem("Cells are &arbitrary-size integers", () => { _settings.CellType = CellType.BigInts; }, () => _settings.CellType == CellType.BigInts) ) ); update(); return ret; }
private CodeChangeHandler(IIde ide) { this.ide = ide; server = new TcpCommunicatorServer(Constants.DEFAULT_PORT); ide.DocumentSaved += Ide_DocumentSaved; ide.DocumentChanged += Ide_DocumentChanged; }
/// <summary> /// Start looking for JDWP processes now. /// </summary> internal static void StartLaunchMonitor(IIde ide, IDevice device, string apkPath, string packageName, int apiLevel, int launchFlags, Action <LauncherStates, string> stateUpdate, CancellationToken token) { OutputPaneLog.EnsureLoaded(ide); var newMonitor = new LaunchMonitor(ide, device, apkPath, packageName, apiLevel, launchFlags, stateUpdate, token); monitor = newMonitor; newMonitor.Start(); }
private static void updateWatch(IIde ide) { var env = ide.GetEnvironment() as HexagonyEnv; if (env != null) { env.UpdateWatch(); } }
public static async Task Init(IIde ide, string ideName) { codeChangeHandler = new CodeChangeHandler(ide); if (!await mqttBroker.IsRunning()) { await mqttBroker.StartAsync(); } await mqttClient.ConnectAsync(ideName); }
private void RegisterGlobalResources(IResourceProvider resourceProvider, IIde ideAccess, Dictionary <object, object> resources) { resourceProvider.Culture = new CultureInfo(ideAccess.LCID); foreach (var resource in resources.Where(resource => !Application.Current.Resources.Contains(resource.Key))) { Application.Current.Resources.Add(resource.Key, resource.Value); } }
private void updateAnnotationSets(IIde ide) { _annotationSets.DropDownItems.Clear(); foreach (var kvp in _settings.MemoryAnnotations) { var setName = kvp.Key; var super = new ToolStripMenuItem(setName); _annotationSets.DropDownItems.Add(super); if (setName == _settings.LastMemoryAnnotationSet) { super.Checked = true; } super.DropDownItems.AddRange(Ut.NewArray( new ToolStripMenuItem("&Switch to this set", null, delegate { _settings.LastMemoryAnnotationSet = setName; updateAnnotationSets(ide); updateWatch(ide); }) { Checked = setName == _settings.LastMemoryAnnotationSet }, new ToolStripMenuItem("&Rename this set...", null, delegate { var newName = InputBox.GetLine("Enter new name for this annotation set:", setName, "Rename annotation set", "&OK", "&Cancel"); if (newName != null && newName != setName) { _settings.MemoryAnnotations[newName] = _settings.MemoryAnnotations[setName]; _settings.MemoryAnnotations.Remove(setName); if (_settings.LastMemoryAnnotationSet == setName) { _settings.LastMemoryAnnotationSet = newName; } updateAnnotationSets(ide); } }), new ToolStripMenuItem("&Delete this set", null, delegate { _settings.MemoryAnnotations.Remove(setName); _settings.LastMemoryAnnotationSet = _settings.MemoryAnnotations.Keys.FirstOrDefault("(default)"); if (!_settings.MemoryAnnotations.ContainsKey(_settings.LastMemoryAnnotationSet)) { _settings.MemoryAnnotations[_settings.LastMemoryAnnotationSet] = new Dictionary <Direction, Dictionary <PointAxial, string> >(); } updateAnnotationSets(ide); updateWatch(ide); }) )); } _annotationSets.DropDownItems.Add("-"); _annotationSets.DropDownItems.Add(new ToolStripMenuItem("&Create new annotation set...", null, delegate { createAnnotationSet(false, ide); })); _annotationSets.DropDownItems.Add(new ToolStripMenuItem("C&opy current annotation set...", null, delegate { createAnnotationSet(true, ide); })); }
/// <summary> /// Default ctor /// </summary> public LaunchMonitor(IIde ide, IDevice device, string apkPath, string packageName, int apiLevel, int launchFlags, Action <LauncherStates, string> stateUpdate, CancellationToken token) { this.ide = ide; this.device = device; this.apkPath = apkPath; this.packageName = packageName; this.apiLevel = apiLevel; this.launchFlags = launchFlags; this.stateUpdate = stateUpdate; this.token = token; outputPane = ide.CreateDot42OutputPane(); }
/// <summary> /// Now launch the actualk VS debugger around the given debugger. /// </summary> internal static void LaunchVsDebugEngine(IIde ide, string apkPath, DebuggerLib.Debugger debugger, int launchFlags, Action<LauncherStates, string> stateUpdate) { // Save debugger var key = Guid.NewGuid(); lock (debuggersLock) { debuggers.Add(key, Tuple.Create(debugger, stateUpdate)); } // Now launch the IDE's debug engine ide.LaunchDebugEngine(apkPath, debugger, key, launchFlags, stateUpdate); }
///////////////////////////////////////////////////////// #region Constructors /// <summary> /// Initializes a new instance of the <see cref="VsoPagePresenter"/> class. /// </summary> /// <param name="vsVersion">The version of the current Visual Studio instance.</param> /// <param name="ide">Information about the current Visual Studio instance.</param> /// <param name="view">The view.</param> /// <param name="viewModel">The view model.</param> /// <exception cref="System.ArgumentNullException">Any parameter is null.</exception> public VsoPagePresenter([NotNull] IVisualStudioVersion vsVersion, [NotNull] IIde ide, [NotNull] IVsoPageView view, [NotNull] IVsoPageViewModel viewModel) : base(view, viewModel) { ThrowIfNull(vsVersion, nameof(vsVersion)); ThrowIfNull(ide, nameof(ide)); _vsVersion = vsVersion; _ide = ide; }
/// <summary> /// Now launch the actualk VS debugger around the given debugger. /// </summary> internal static void LaunchVsDebugEngine(IIde ide, string apkPath, DebuggerLib.Debugger debugger, int launchFlags, Action <LauncherStates, string> stateUpdate) { // Save debugger var key = Guid.NewGuid(); lock (debuggersLock) { debuggers.Add(key, Tuple.Create(debugger, stateUpdate)); } // Now launch the IDE's debug engine ide.LaunchDebugEngine(apkPath, debugger, key, launchFlags, stateUpdate); }
/// <summary> /// Default ctor /// </summary> public DeviceLogControl(IIde ide) { this.ide = ide; HideTextView(); // Listen for events ide.CurrentDeviceChanged += OnDeviceChanged; ide.CurrentProcessIdChanged += OnProcessIdChanged; // Initialize OnProcessIdChanged(null, null); OnDeviceChanged(null, null); }
/// <summary> /// Default ctor /// </summary> public DeviceLogControl(IIde ide) { this.ide = ide; HideTextView(); // Listen for events ide.CurrentDeviceChanged += OnDeviceChanged; ide.CurrentProcessIdChanged += OnProcessIdChanged; // Initialize OnProcessIdChanged(null, null); OnDeviceChanged(null, null); }
/// <summary> /// Default ctor /// </summary> public DeviceSelectionDialog(IIde package, Func<DeviceItem, bool> isCompatible, string targetVersion) { Icon = Graphics.Icons.App; this.package = package; this.targetVersion = targetVersion; InitializeComponent(); tbbConnectDevice.Image = Graphics.Icons32.Antenna; tbbRefresh.Image = Graphics.Icons32.Refresh; devicesListView.IsCompatibleCheck = isCompatible; devicesListView.DeviceRemoved += (s, x) => UpdateState(); devicesListView.DeviceAdded += OnDeviceAdded; devicesListView.ItemActivated += OnItemActivated; UpdateState(); }
/// <summary> /// Default ctor /// </summary> public DeviceSelectionDialog(IIde package, Func <DeviceItem, bool> isCompatible, string targetVersion) { Icon = Graphics.Icons.App; this.package = package; this.targetVersion = targetVersion; InitializeComponent(); tbbConnectDevice.Image = Graphics.Icons32.Antenna; tbbRefresh.Image = Graphics.Icons32.Refresh; devicesListView.IsCompatibleCheck = isCompatible; devicesListView.DeviceRemoved += (s, x) => UpdateState(); devicesListView.DeviceAdded += OnDeviceAdded; devicesListView.ItemActivated += OnItemActivated; UpdateState(); }
private void insertByteArray(IIde ide) { string @default, selected = ide.GetSelectedText(); try { @default = ScliptingUtil.DecodeByteArray(selected).ToHex(); } catch { @default = ""; } var line = InputBox.GetLine("Type a byte array to insert (in hexdump format; two hexadecimal digits per byte):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) { try { ide.InsertText(ScliptingUtil.EncodeByteArray(line.FromHex())); } catch { DlgMessage.Show("The text you entered is not valid hexadecimal. Please ensure that you enter an even number of characters 0-9/a-f.", "Esoteric IDE", DlgType.Error, "&OK"); } } }
private EventHandler checkDebugging(IIde ide, Action <HexagonyEnv> action) { return((_, __) => { var env = ide.GetEnvironment() as HexagonyEnv; if (env == null || env.State != ExecutionState.Debugging) { DlgMessage.Show("Program must be running but stopped in the debugger.", "Error", DlgType.Error); } else { action(env); } }); }
///////////////////////////////////////////////////////// #region Constructors public SolutionPagePresenter(SolutionPageControl view) { _view = view; _ide = GetIde(_view.DataContext); _model = new SolutionPageModel(); var config = _model.LoadConfiguration(); _vm = new SolutionPageViewModel(config); _view.ConnectDataSource(_vm); ConnectEventHandler(); FillDefault(); }
/// <summary> /// Default ctor /// </summary> public XmlMenuDesignerControl(IIde ide, IServiceProvider serviceProvider, IMenuViewModel viewModel) { if (ide != null) { selectionContainer = ide.CreateSelectionContainer(serviceProvider); } if (viewModel != null) { DataContext = viewModel; } InitializeComponent(); // wait until we're initialized to handle events if (viewModel != null) { viewModel.PropertyChanged += OnViewModelPropertyChanged; } }
/// <summary> /// Default ctor /// </summary> public XmlMenuDesignerControl(IIde ide, IServiceProvider serviceProvider, IMenuViewModel viewModel) { if (ide != null) { selectionContainer = ide.CreateSelectionContainer(serviceProvider); } if (viewModel != null) { DataContext = viewModel; } InitializeComponent(); // wait until we're initialized to handle events if (viewModel != null) { viewModel.PropertyChanged += OnViewModelPropertyChanged; } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List <Tuple <ToolStripMenuItem, Func <bool> > >(); var ret = Ut.NewArray <ToolStripMenuItem>( new ToolStripMenuItem("&Insert", null, new ToolStripMenuItem("&Word from index", null, (_, __) => { var input = InputBox.GetLine("Index to look up?", caption: "Runic"); if (input == null || !int.TryParse(input, out var ix)) { return; } var word = WordDictionary.GetWord(ix); if (word == null) { DlgMessage.Show($"The specified index is out of range. Valid range is 0–{WordDictionary.List.Length - 1}.", "Runic", DlgType.Error); } else { ide.InsertText(word); } }), new ToolStripMenuItem("&Index from word", null, (_, __) => { var input = InputBox.GetLine("Word to look up?", caption: "Runic"); if (input == null) { return; } var index = WordDictionary.GetIndex(input.ToLowerInvariant().Trim()); if (index == -1) { DlgMessage.Show("The specified word is not in the dictionary.", "Runic", DlgType.Error); } else { ide.InsertText(index.ToString()); } }) ) ); return(ret); }
/// <summary> /// Make sure this log is registered. /// </summary> internal static void EnsureLoaded(IIde ide) { if (log != null) return; var outputPane = ide.CreateDebugOutputPane(); var add = false; lock (logLock) { if (log == null) { log = new OutputPaneLog(outputPane); add = true; } } if (add) { DLog.AddAdditionalLogger(log); } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var inputModes = EnumStrong.GetValues<InputMode>(); var inputModeItems = new ToolStripMenuItem[inputModes.Length]; var setInputMode = Ut.Lambda((InputMode mode) => { _settings.InputMode = mode; for (int i = 0; i < inputModes.Length; i++) inputModeItems[i].Checked = (mode == inputModes[i]); }); var ret = Ut.NewArray( new ToolStripMenuItem("&Input semantics", null, Ut.NewArray( (inputModeItems[0] = new ToolStripMenuItem("Encode input as UTF-&8", null, (_, __) => setInputMode(InputMode.Utf8))), (inputModeItems[1] = new ToolStripMenuItem("Encode input as UTF-1&6 (little endian)", null, (_, __) => setInputMode(InputMode.Utf16))), (inputModeItems[2] = new ToolStripMenuItem("Input string is a list of &bytes", null, (_, __) => setInputMode(InputMode.Numbers)))))); setInputMode(_settings.InputMode); return ret; }
/// <summary> /// Make sure this log is registered. /// </summary> internal static void EnsureLoaded(IIde ide) { if (log != null) { return; } var outputPane = ide.CreateDebugOutputPane(); var add = false; lock (logLock) { if (log == null) { log = new OutputPaneLog(outputPane); add = true; } } if (add) { DLog.AddAdditionalLogger(log); } }
private void insertInteger(IIde ide) { string @default, selected = ide.GetSelectedText(); try { if (selected.Length == 1 && selected[0] >= 0xbc00 && selected[0] <= 0xd7a3) { @default = (0xbbff - selected[0]).ToString(); } else { @default = new BigInteger(new byte[] { 0 }.Concat(ScliptingUtil.DecodeByteArray(selected)).Reverse().ToArray()).ToString(); } } catch { @default = "0"; } var line = InputBox.GetLine("Type an integer to insert (must be greater than −7077):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) { BigInteger i; if (BigInteger.TryParse(line, out i) && (i >= -7076)) { if (i < 0) { ide.InsertText(((char)(0xbbff - i)).ToString()); } else { ide.InsertText(ScliptingUtil.EncodeByteArray(i.ToByteArray().Reverse().SkipWhile(b => b == 0).DefaultIfEmpty().ToArray())); } } else { DlgMessage.Show("The integer you typed is not a valid literal integer for Sclipting. Literal integers must be greater than −7077.", "Esoteric IDE", DlgType.Error, "&OK"); } } }
/// <summary> /// Make sure this log is registered. /// </summary> internal static void EnsureLoaded(IIde ide, bool vsDebugPane) { if (log != null) return; var outputPane = !vsDebugPane ? ide.CreateDot42OutputPane() : ide.CreateDebugOutputPane(); var add = false; lock (logLock) { if (log == null) { log = new OutputPaneLog(outputPane, vsDebugPane?Levels.Info : Levels.Error, vsDebugPane?DContext.VSDebuggerMessage:(DContext?) null); add = true; } } if (add) { AddAdditionalLogger(log); if(vsDebugPane) AddToContext(DContext.VSDebuggerMessage, log); } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var inputModes = EnumStrong.GetValues <InputMode>(); var inputModeItems = new ToolStripMenuItem[inputModes.Length]; var setInputMode = Ut.Lambda((InputMode mode) => { _settings.InputMode = mode; for (int i = 0; i < inputModes.Length; i++) { inputModeItems[i].Checked = (mode == inputModes[i]); } }); var ret = Ut.NewArray( new ToolStripMenuItem("&Input semantics", null, Ut.NewArray( (inputModeItems[0] = new ToolStripMenuItem("Encode input as UTF-&8", null, (_, __) => setInputMode(InputMode.Utf8))), (inputModeItems[1] = new ToolStripMenuItem("Encode input as UTF-1&6 (little endian)", null, (_, __) => setInputMode(InputMode.Utf16))), (inputModeItems[2] = new ToolStripMenuItem("Input string is a list of &bytes", null, (_, __) => setInputMode(InputMode.Numbers)))))); setInputMode(_settings.InputMode); return(ret); }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List <Tuple <ToolStripMenuItem, Func <bool> > >(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) { tuple.Item1.Checked = tuple.Item2(); } }); var createItem = Ut.Lambda((string label, Action action, Func <bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple <ToolStripMenuItem, Func <bool> >(menuItem, checkedFunc)); return(menuItem); }); var ret = Ut.NewArray <ToolStripMenuItem>( new ToolStripMenuItem("&Semantics", null, createItem("Input as &numbers", () => { _settings.InputType = IOType.Numbers; }, () => _settings.InputType == IOType.Numbers), createItem("Input as &characters", () => { _settings.InputType = IOType.Characters; }, () => _settings.InputType == IOType.Characters), new ToolStripSeparator(), createItem("Output as nu&mbers", () => { _settings.OutputType = IOType.Numbers; }, () => _settings.OutputType == IOType.Numbers), createItem("Output as c&haracters", () => { _settings.OutputType = IOType.Characters; }, () => _settings.OutputType == IOType.Characters), new ToolStripSeparator(), createItem("Cells are &bytes", () => { _settings.CellType = CellType.Bytes; }, () => _settings.CellType == CellType.Bytes), createItem("Cells are &signed 32-bit integers", () => { _settings.CellType = CellType.Int32s; }, () => _settings.CellType == CellType.Int32s), createItem("Cells are &unsigned 32-bit integers", () => { _settings.CellType = CellType.UInt32s; }, () => _settings.CellType == CellType.UInt32s), createItem("Cells are &arbitrary-size integers", () => { _settings.CellType = CellType.BigInts; }, () => _settings.CellType == CellType.BigInts) ) ); update(); return(ret); }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List <Tuple <ToolStripMenuItem, Func <bool> > >(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) { tuple.Item1.Checked = tuple.Item2(); } }); var createItem = Ut.Lambda((string label, Action action, Func <bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple <ToolStripMenuItem, Func <bool> >(menuItem, checkedFunc)); return(menuItem); }); var ret = Ut.NewArray <ToolStripMenuItem>( new ToolStripMenuItem("&Semantics", null, createItem("Input as &bytes", () => { _settings.InputType = IOType.Bytes; }, () => _settings.InputType == IOType.Bytes), createItem("Input as &numbers", () => { _settings.InputType = IOType.Numbers; }, () => _settings.InputType == IOType.Numbers), new ToolStripSeparator(), createItem("Output as b&ytes", () => { _settings.OutputType = IOType.Bytes; }, () => _settings.OutputType == IOType.Bytes), createItem("Output as n&umbers", () => { _settings.OutputType = IOType.Numbers; }, () => _settings.OutputType == IOType.Numbers), new ToolStripSeparator(), createItem("No implicit &mirroring", () => { _settings.ImplicitlyMirror = MirrorType.None; }, () => _settings.ImplicitlyMirror == MirrorType.None), createItem("Implicitly mirror source to the &left (e.g. *|= becomes =|*|=)", () => { _settings.ImplicitlyMirror = MirrorType.Left; }, () => _settings.ImplicitlyMirror == MirrorType.Left), createItem("Implicitly mirror source to the &right (e.g. *|= becomes *|=|*)", () => { _settings.ImplicitlyMirror = MirrorType.Right; }, () => _settings.ImplicitlyMirror == MirrorType.Right) ) ); update(); return(ret); }
private void createAnnotationSet(bool copyFromCurrent, IIde ide) { string newName = copyFromCurrent ? _settings.LastMemoryAnnotationSet : null; while (true) { newName = InputBox.GetLine("Enter new name for this annotation set:", newName, "Create new annotation set", "&OK", "&Cancel"); if (newName == null) { break; } if (!_settings.MemoryAnnotations.ContainsKey(newName)) { _settings.MemoryAnnotations[newName] = copyFromCurrent ? _settings.MemoryAnnotations[_settings.LastMemoryAnnotationSet].ToDictionary(kvp => kvp.Key, kvp => new Dictionary <PointAxial, string>(kvp.Value)) : new Dictionary <Direction, Dictionary <PointAxial, string> >(); _settings.LastMemoryAnnotationSet = newName; updateAnnotationSets(ide); updateWatch(ide); return; } DlgMessage.Show("The specified annotation set name already exists. Annotation set names must be unique.", "Error", DlgType.Error); } }
private void insertString(IIde ide) { string @default, selected = ide.GetSelectedText(); try { if (selected.Length == 1 && selected[0] >= 0xbc00 && selected[0] <= 0xd7a3) { @default = (0xbbff - selected[0]).ToString(); } else { @default = ScliptingUtil.DecodeByteArray(selected).FromUtf8().CLiteralEscape(); } } catch { @default = "\\n"; } var line = InputBox.GetLine("Type a string to insert (in C-escaped format; backslashes must be escaped):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) { try { ide.InsertText(ScliptingUtil.EncodeByteArray(line.CLiteralUnescape().ToUtf8())); } catch { DlgMessage.Show("The string you typed is not a valid C-escaped string. Please ensure that your backslashes are escaped.", "Esoteric IDE", DlgType.Error, "&OK"); } } }
private void insertString(IIde ide) { string @default, selected = ide.GetSelectedText(); try { if (selected.Length == 1 && selected[0] >= 0xbc00 && selected[0] <= 0xd7a3) @default = (0xbbff - selected[0]).ToString(); else @default = ScliptingUtil.DecodeByteArray(selected).FromUtf8().CLiteralEscape(); } catch { @default = "\\n"; } var line = InputBox.GetLine("Type a string to insert (in C-escaped format; backslashes must be escaped):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) try { ide.InsertText(ScliptingUtil.EncodeByteArray(line.CLiteralUnescape().ToUtf8())); } catch { DlgMessage.Show("The string you typed is not a valid C-escaped string. Please ensure that your backslashes are escaped.", "Esoteric IDE", DlgType.Error, "&OK"); } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var mnuInsert = new ToolStripMenuItem("&Insert"); var groupMenuItems = typeof(InstructionGroup).GetFields(BindingFlags.Public | BindingFlags.Static) .ToDictionary(f => (InstructionGroup) f.GetValue(null), f => new ToolStripMenuItem(f.GetCustomAttributes<InstructionGroupAttribute>().First().Label)); // Stack manipulation instructions var miInsertStackInstructionCopyFromBottom = new ToolStripMenuItem("&Copy from bottom"); var miInsertStackInstructionMoveFromBottom = new ToolStripMenuItem("&Move from bottom"); var miInsertStackInstructionSwapFromBottom = new ToolStripMenuItem("&Swap from bottom"); var miInsertStackInstructionCopyFromTop = new ToolStripMenuItem("C&opy from top"); var miInsertStackInstructionMoveFromTop = new ToolStripMenuItem("Mo&ve from top"); var miInsertRegexGroupInstruction = new ToolStripMenuItem("Rege&x captured group"); var miInsertInteger = new ToolStripMenuItem("&Integer..."); var miInsertString = new ToolStripMenuItem("&String..."); var miInsertByteArray = new ToolStripMenuItem("Byte &array..."); miInsertInteger.Click += (_, __) => { insertInteger(ide); }; miInsertString.Click += (_, __) => { insertString(ide); }; miInsertByteArray.Click += (_, __) => { insertByteArray(ide); }; mnuInsert.DropDownItems.AddRange(groupMenuItems.Values.ToArray()); mnuInsert.DropDownItems.AddRange(new ToolStripItem[] { miInsertInteger, miInsertString, miInsertByteArray }); foreach (var instr in typeof(Instruction).GetFields(BindingFlags.Static | BindingFlags.Public)) { var attr = instr.GetCustomAttributes<InstructionAttribute>().First(); var ch = attr.Character; groupMenuItems[attr.Group].DropDownItems.Add(new ToolStripMenuItem( "{0} &{1} — {2}{3}".Fmt(ch, attr.Engrish, attr.Description, attr.Type == NodeType.BlockHead ? " █" : ""), null, (_, __) => { ide.InsertText(ch.ToString()); } )); } groupMenuItems[InstructionGroup.StackManipulation].DropDownItems.Add("-"); groupMenuItems[InstructionGroup.StackManipulation].DropDownItems.AddRange(Ut.NewArray<ToolStripItem>( miInsertStackInstructionCopyFromBottom, miInsertStackInstructionMoveFromBottom, miInsertStackInstructionSwapFromBottom, miInsertStackInstructionCopyFromTop, miInsertStackInstructionMoveFromTop)); groupMenuItems[InstructionGroup.ListStringManipulation].DropDownItems.Add("-"); groupMenuItems[InstructionGroup.ListStringManipulation].DropDownItems.AddRange(ListStringElementNode.GetMenuItems(ide)); for (var ch = '①'; ch <= '⑳'; ch++) miInsertStackInstructionCopyFromBottom.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '①' + 1, ide)); for (var ch = '㉑'; ch <= '㉟'; ch++) miInsertStackInstructionCopyFromBottom.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '㉑' + 21, ide)); for (var ch = '㊱'; ch <= '㊿'; ch++) miInsertStackInstructionCopyFromBottom.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '㊱' + 36, ide)); for (var ch = '⓵'; ch <= '⓾'; ch++) miInsertStackInstructionMoveFromTop.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '⓵' + 1, ide)); for (var ch = '❶'; ch <= '❿'; ch++) miInsertStackInstructionCopyFromTop.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '❶' + 1, ide)); for (var ch = '⓫'; ch <= '⓴'; ch++) miInsertStackInstructionCopyFromTop.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '⓫' + 11, ide)); for (var ch = '⑴'; ch <= '⒇'; ch++) miInsertStackInstructionMoveFromBottom.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '⑴' + 1, ide)); for (var ch = '⒈'; ch <= '⒛'; ch++) miInsertStackInstructionSwapFromBottom.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - '⒈' + 1, ide)); groupMenuItems[InstructionGroup.StringManipulation].DropDownItems.Add("-"); groupMenuItems[InstructionGroup.StringManipulation].DropDownItems.Add(miInsertRegexGroupInstruction); for (var ch = 'Ⓐ'; ch <= 'Ⓩ'; ch++) miInsertRegexGroupInstruction.DropDownItems.Add(stackOrRegexMenuItem(ch, ch - 'Ⓐ' + 1, ide)); return Ut.NewArray<ToolStripMenuItem>(mnuInsert); }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var inputModes = EnumStrong.GetValues<InputMode>(); var inputModeItems = new ToolStripMenuItem[inputModes.Length]; var setInputMode = Ut.Lambda((InputMode mode) => { _settings.InputMode = mode; for (int i = 0; i < inputModes.Length; i++) inputModeItems[i].Checked = (mode == inputModes[i]); }); var ret = Ut.NewArray( new ToolStripMenuItem("&Memory visualization", null, Ut.NewArray( // Unused mnemonics: cdefhijkmqruwxy new ToolStripMenuItem("&Background color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryBackgroundColor, c => { _settings.MemoryBackgroundColor = c; }); }), new ToolStripMenuItem("Grid color (&zeros)...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryGridZeroColor, c => { _settings.MemoryGridZeroColor = c; }); }), new ToolStripMenuItem("&Grid color (non-zeros)...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryGridNonZeroColor, c => { _settings.MemoryGridNonZeroColor = c; }); }), new ToolStripMenuItem("&Pointer color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryPointerColor, c => { _settings.MemoryPointerColor = c; }); }), new ToolStripMenuItem("&Value font...", null, delegate { font(ide.GetEnvironment(), _settings.MemoryValueFont, Color.CornflowerBlue, f => { _settings.MemoryValueFont = f; _valueColorItem.Enabled = true; }); }), (_valueColorItem = new ToolStripMenuItem("Va&lue color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryValueFont.Color, c => { _settings.MemoryValueFont = _settings.MemoryValueFont.SetColor(c); }); }) { Enabled = _settings.MemoryValueFont != null }), new ToolStripMenuItem("Ann&otation font...", null, delegate { font(ide.GetEnvironment(), _settings.MemoryAnnotationFont, Color.ForestGreen, f => { _settings.MemoryAnnotationFont = f; _annotationColorItem.Enabled = true; }); }), (_annotationColorItem = new ToolStripMenuItem("Anno&tation color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryAnnotationFont.Color, c => { _settings.MemoryAnnotationFont = _settings.MemoryAnnotationFont.SetColor(c); }); }) { Enabled = _settings.MemoryAnnotationFont != null }), new ToolStripMenuItem("&Annotate current edge...", null, checkDebugging(ide, env => { var newAnnotation = InputBox.GetLine("Enter annotation:", env.GetCurrentAnnotation(), "Annotate edge", "&OK", "&Cancel"); if (newAnnotation != null) { env.Annotate(newAnnotation); env.UpdateWatch(); } })), (_annotationSets = new ToolStripMenuItem("A&nnotation sets")), new ToolStripMenuItem("&Save memory as PNG...", null, checkDebugging(ide, env => { using (var dlg = new SaveFileDialog { DefaultExt = "png", Filter = "PNG files (*.png)|*.png", OverwritePrompt = true, Title = "Save memory visualization to file" }) if (dlg.ShowDialog() == DialogResult.OK) env.SaveMemoryVisualization(dlg.FileName); })))), new ToolStripMenuItem("&Source", null, Ut.NewArray( new ToolStripMenuItem("Generate &blank source...", null, delegate { string inputStr = "10"; while (true) { inputStr = InputBox.GetLine("Enter size of hexagon:", inputStr, "Generate blank source", "&OK", "&Cancel"); if (inputStr == null) return; int input; if (int.TryParse(inputStr, out input)) { ide.ReplaceSource(Grid.Parse(new string('.', 3 * input * (input - 1) + 1)).ToString()); return; } DlgMessage.Show("Please enter an integer value.", "Error", DlgType.Error); } }), new ToolStripMenuItem("&Layout source", null, delegate { ide.ReplaceSource(Grid.Parse(ide.GetSource()).ToString()); }), new ToolStripMenuItem("&Minify source", null, delegate { ide.ReplaceSource(Regex.Replace(ide.GetSource(), @"[\s`]", "").TrimEnd('.')); }))), new ToolStripMenuItem("&Input semantics", null, Ut.NewArray( (inputModeItems[0] = new ToolStripMenuItem("Encode input as UTF-&8", null, (_, __) => setInputMode(InputMode.Utf8))), (inputModeItems[1] = new ToolStripMenuItem("Encode input as UTF-1&6 (little endian)", null, (_, __) => setInputMode(InputMode.Utf16))), (inputModeItems[2] = new ToolStripMenuItem("Input string is a list of &bytes", null, (_, __) => setInputMode(InputMode.Numbers)))))); updateAnnotationSets(ide); setInputMode(_settings.InputMode); return ret; }
public static ToolStripItem[] GetMenuItems(IIde ide) { return typeof(ListStringInstruction).GetFields(BindingFlags.Static | BindingFlags.Public) .Select((field, fi) => { var item = new ToolStripMenuItem(field.GetCustomAttributes<ListStringInstructionAttribute>().First().MenuLabel); item.DropDownItems.AddRange(Enumerable.Range(0, 20) .Select(i => new { Ch = Characters[fi * 20 + i], Engrish = Engrish[fi * 20 + i] }) .Select(inf => new ToolStripMenuItem("{0} &{1} — {2}".Fmt(inf.Ch, inf.Engrish, new ListStringElementNode(inf.Ch, 0).Explain()), null, (_, __) => { ide.InsertText(inf.Ch.ToString()); })) .ToArray()); return item; }) .ToArray(); }
public LogCatWindowControl(IIde ide) { InitializeComponent(); controlHost.Child = new DeviceLogControl(ide); }
public static void Init(IIde ide) { Instance = new CodeChangeHandler(ide); Instance.server.StartListening(); }
private void updateAnnotationSets(IIde ide) { _annotationSets.DropDownItems.Clear(); foreach (var kvp in _settings.MemoryAnnotations) { var setName = kvp.Key; var super = new ToolStripMenuItem(setName); _annotationSets.DropDownItems.Add(super); if (setName == _settings.LastMemoryAnnotationSet) super.Checked = true; super.DropDownItems.AddRange(Ut.NewArray( new ToolStripMenuItem("&Switch to this set", null, delegate { _settings.LastMemoryAnnotationSet = setName; updateAnnotationSets(ide); updateWatch(ide); }) { Checked = setName == _settings.LastMemoryAnnotationSet }, new ToolStripMenuItem("&Rename this set...", null, delegate { var newName = InputBox.GetLine("Enter new name for this annotation set:", setName, "Rename annotation set", "&OK", "&Cancel"); if (newName != null && newName != setName) { _settings.MemoryAnnotations[newName] = _settings.MemoryAnnotations[setName]; _settings.MemoryAnnotations.Remove(setName); if (_settings.LastMemoryAnnotationSet == setName) _settings.LastMemoryAnnotationSet = newName; updateAnnotationSets(ide); } }), new ToolStripMenuItem("&Delete this set", null, delegate { _settings.MemoryAnnotations.Remove(setName); _settings.LastMemoryAnnotationSet = _settings.MemoryAnnotations.Keys.FirstOrDefault("(default)"); if (!_settings.MemoryAnnotations.ContainsKey(_settings.LastMemoryAnnotationSet)) _settings.MemoryAnnotations[_settings.LastMemoryAnnotationSet] = new Dictionary<Direction, Dictionary<PointAxial, string>>(); updateAnnotationSets(ide); updateWatch(ide); }) )); } _annotationSets.DropDownItems.Add("-"); _annotationSets.DropDownItems.Add(new ToolStripMenuItem("&Create new annotation set...", null, delegate { createAnnotationSet(false, ide); })); _annotationSets.DropDownItems.Add(new ToolStripMenuItem("C&opy current annotation set...", null, delegate { createAnnotationSet(true, ide); })); }
/// <summary> /// Create the appropriate designer control. /// </summary> public IDesignerControl CreateDesigner(IIde ide, IXmlStore store, IXmlModel model, IServiceProvider serviceProvider, IVsTextLines textBuffer) { var viewModel = new XmlMenuViewModel(store, model, serviceProvider, textBuffer); viewModel.Initialize(); return new XmlMenuDesignerControl(ide, serviceProvider, viewModel); }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var menuItems = new List<Tuple<ToolStripMenuItem, Func<bool>>>(); var update = Ut.Lambda(() => { foreach (var tuple in menuItems) tuple.Item1.Checked = tuple.Item2(); }); var createItem = Ut.Lambda((string label, Action action, Func<bool> checkedFunc) => { var menuItem = new ToolStripMenuItem(label, null, delegate { action(); update(); }); menuItems.Add(new Tuple<ToolStripMenuItem, Func<bool>>(menuItem, checkedFunc)); return menuItem; }); var ret = Ut.NewArray<ToolStripMenuItem>( new ToolStripMenuItem("&Semantics", null, createItem("Input as &bytes", () => { _settings.InputType = IOType.Bytes; }, () => _settings.InputType == IOType.Bytes), createItem("Input as &numbers", () => { _settings.InputType = IOType.Numbers; }, () => _settings.InputType == IOType.Numbers), new ToolStripSeparator(), createItem("Output as b&ytes", () => { _settings.OutputType = IOType.Bytes; }, () => _settings.OutputType == IOType.Bytes), createItem("Output as n&umbers", () => { _settings.OutputType = IOType.Numbers; }, () => _settings.OutputType == IOType.Numbers), new ToolStripSeparator(), createItem("No implicit &mirroring", () => { _settings.ImplicitlyMirror = MirrorType.None; }, () => _settings.ImplicitlyMirror == MirrorType.None), createItem("Implicitly mirror source to the &left (e.g. *|= becomes =|*|=)", () => { _settings.ImplicitlyMirror = MirrorType.Left; }, () => _settings.ImplicitlyMirror == MirrorType.Left), createItem("Implicitly mirror source to the &right (e.g. *|= becomes *|=|*)", () => { _settings.ImplicitlyMirror = MirrorType.Right; }, () => _settings.ImplicitlyMirror == MirrorType.Right) ) ); update(); return ret; }
/// <summary> /// Default ctor /// </summary> public LaunchMonitor(IIde ide, IDevice device, string apkPath, string packageName, int apiLevel, int launchFlags, Action<LauncherStates, string> stateUpdate, CancellationToken token) { this.ide = ide; this.device = device; this.apkPath = apkPath; this.packageName = packageName; this.apiLevel = apiLevel; this.launchFlags = launchFlags; this.stateUpdate = stateUpdate; this.token = token; outputPane = ide.CreateDebugOutputPane(); }
private static void updateWatch(IIde ide) { var env = ide.GetEnvironment() as HexagonyEnv; if (env != null) env.UpdateWatch(); }
private void insertInteger(IIde ide) { string @default, selected = ide.GetSelectedText(); try { if (selected.Length == 1 && selected[0] >= 0xbc00 && selected[0] <= 0xd7a3) @default = (0xbbff - selected[0]).ToString(); else @default = new BigInteger(new byte[] { 0 }.Concat(ScliptingUtil.DecodeByteArray(selected)).Reverse().ToArray()).ToString(); } catch { @default = "0"; } var line = InputBox.GetLine("Type an integer to insert (must be greater than −7077):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) { BigInteger i; if (BigInteger.TryParse(line, out i) && (i >= -7076)) { if (i < 0) ide.InsertText(((char) (0xbbff - i)).ToString()); else ide.InsertText(ScliptingUtil.EncodeByteArray(i.ToByteArray().Reverse().SkipWhile(b => b == 0).DefaultIfEmpty().ToArray())); } else DlgMessage.Show("The integer you typed is not a valid literal integer for Sclipting. Literal integers must be greater than −7077.", "Esoteric IDE", DlgType.Error, "&OK"); } }
private EventHandler checkDebugging(IIde ide, Action<HexagonyEnv> action) { return (_, __) => { var env = ide.GetEnvironment() as HexagonyEnv; if (env == null || env.State != ExecutionState.Debugging) DlgMessage.Show("Program must be running but stopped in the debugger.", "Error", DlgType.Error); else action(env); }; }
private void insertByteArray(IIde ide) { string @default, selected = ide.GetSelectedText(); try { @default = ScliptingUtil.DecodeByteArray(selected).ToHex(); } catch { @default = ""; } var line = InputBox.GetLine("Type a byte array to insert (in hexdump format; two hexadecimal digits per byte):", @default, "Esoteric IDE", "&OK", "&Cancel"); if (line != null) try { ide.InsertText(ScliptingUtil.EncodeByteArray(line.FromHex())); } catch { DlgMessage.Show("The text you entered is not valid hexadecimal. Please ensure that you enter an even number of characters 0-9/a-f.", "Esoteric IDE", DlgType.Error, "&OK"); } }
public override ToolStripMenuItem[] CreateMenus(IIde ide) { var inputModes = EnumStrong.GetValues <InputMode>(); var inputModeItems = new ToolStripMenuItem[inputModes.Length]; var setInputMode = Ut.Lambda((InputMode mode) => { _settings.InputMode = mode; for (int i = 0; i < inputModes.Length; i++) { inputModeItems[i].Checked = (mode == inputModes[i]); } }); var ret = Ut.NewArray( new ToolStripMenuItem("&Memory visualization", null, Ut.NewArray( // Unused mnemonics: cdefhijkmqruwxy new ToolStripMenuItem("&Background color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryBackgroundColor, c => { _settings.MemoryBackgroundColor = c; }); }), new ToolStripMenuItem("Grid color (&zeros)...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryGridZeroColor, c => { _settings.MemoryGridZeroColor = c; }); }), new ToolStripMenuItem("&Grid color (non-zeros)...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryGridNonZeroColor, c => { _settings.MemoryGridNonZeroColor = c; }); }), new ToolStripMenuItem("&Pointer color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryPointerColor, c => { _settings.MemoryPointerColor = c; }); }), new ToolStripMenuItem("&Value font...", null, delegate { font(ide.GetEnvironment(), _settings.MemoryValueFont, Color.CornflowerBlue, f => { _settings.MemoryValueFont = f; _valueColorItem.Enabled = true; }); }), (_valueColorItem = new ToolStripMenuItem("Va&lue color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryValueFont.Color, c => { _settings.MemoryValueFont = _settings.MemoryValueFont.SetColor(c); }); }) { Enabled = _settings.MemoryValueFont != null }), new ToolStripMenuItem("Ann&otation font...", null, delegate { font(ide.GetEnvironment(), _settings.MemoryAnnotationFont, Color.ForestGreen, f => { _settings.MemoryAnnotationFont = f; _annotationColorItem.Enabled = true; }); }), (_annotationColorItem = new ToolStripMenuItem("Anno&tation color...", null, delegate { color(ide.GetEnvironment(), _settings.MemoryAnnotationFont.Color, c => { _settings.MemoryAnnotationFont = _settings.MemoryAnnotationFont.SetColor(c); }); }) { Enabled = _settings.MemoryAnnotationFont != null }), new ToolStripMenuItem("&Annotate current edge...", null, checkDebugging(ide, env => { var newAnnotation = InputBox.GetLine("Enter annotation:", env.GetCurrentAnnotation(), "Annotate edge", "&OK", "&Cancel"); if (newAnnotation != null) { env.Annotate(newAnnotation); env.UpdateWatch(); } })), (_annotationSets = new ToolStripMenuItem("A&nnotation sets")), new ToolStripMenuItem("&Save memory as PNG...", null, checkDebugging(ide, env => { using (var dlg = new SaveFileDialog { DefaultExt = "png", Filter = "PNG files (*.png)|*.png", OverwritePrompt = true, Title = "Save memory visualization to file" }) if (dlg.ShowDialog() == DialogResult.OK) { env.SaveMemoryVisualization(dlg.FileName); } })))), new ToolStripMenuItem("&Source", null, Ut.NewArray( new ToolStripMenuItem("Generate &blank source...", null, delegate { string inputStr = "10"; while (true) { inputStr = InputBox.GetLine("Enter size of hexagon:", inputStr, "Generate blank source", "&OK", "&Cancel"); if (inputStr == null) { return; } int input; if (int.TryParse(inputStr, out input)) { ide.ReplaceSource(Grid.Parse(new string('.', 3 * input * (input - 1) + 1)).ToString()); return; } DlgMessage.Show("Please enter an integer value.", "Error", DlgType.Error); } }), new ToolStripMenuItem("&Layout source", null, delegate { ide.ReplaceSource(Grid.Parse(ide.GetSource()).ToString()); }), new ToolStripMenuItem("&Minify source", null, delegate { ide.ReplaceSource(Regex.Replace(ide.GetSource(), @"[\s`]", "").TrimEnd('.')); }))), new ToolStripMenuItem("&Input semantics", null, Ut.NewArray( (inputModeItems[0] = new ToolStripMenuItem("Encode input as UTF-&8", null, (_, __) => setInputMode(InputMode.Utf8))), (inputModeItems[1] = new ToolStripMenuItem("Encode input as UTF-1&6 (little endian)", null, (_, __) => setInputMode(InputMode.Utf16))), (inputModeItems[2] = new ToolStripMenuItem("Input string is a list of &bytes", null, (_, __) => setInputMode(InputMode.Numbers)))))); updateAnnotationSets(ide); setInputMode(_settings.InputMode); return(ret); }
private void createAnnotationSet(bool copyFromCurrent, IIde ide) { string newName = copyFromCurrent ? _settings.LastMemoryAnnotationSet : null; while (true) { newName = InputBox.GetLine("Enter new name for this annotation set:", newName, "Create new annotation set", "&OK", "&Cancel"); if (newName == null) break; if (!_settings.MemoryAnnotations.ContainsKey(newName)) { _settings.MemoryAnnotations[newName] = copyFromCurrent ? _settings.MemoryAnnotations[_settings.LastMemoryAnnotationSet].ToDictionary(kvp => kvp.Key, kvp => new Dictionary<PointAxial, string>(kvp.Value)) : new Dictionary<Direction, Dictionary<PointAxial, string>>(); _settings.LastMemoryAnnotationSet = newName; updateAnnotationSets(ide); updateWatch(ide); return; } DlgMessage.Show("The specified annotation set name already exists. Annotation set names must be unique.", "Error", DlgType.Error); } }
private static ToolStripItem stackOrRegexMenuItem(char ch, int num, IIde ide) { return new ToolStripMenuItem("{0} — &{1}".Fmt(ch, num), null, (_, __) => { ide.InsertText(ch.ToString()); }); }
public LogCatWindowControl(IIde ide) { InitializeComponent(); controlHost.Child = new DeviceLogControl(ide); }
public virtual ToolStripMenuItem[] CreateMenus(IIde ide) { return new ToolStripMenuItem[0]; }