protected void ShowSubMenu(IGuiMenuItem mainmenuItem) { if (mainmenuItem == null || mainmenuItem.Children.IsNullOrEmpty()) { return; } if (SubMenu != null) { CloseSubMenu(); } SubMenu = AddChild(new SubMenuOverlay("sub" + (Children.Count + 1).ToString(), mainmenuItem.Children)); SubMenu.SetBounds(GetSubMenuBounds(SubMenu)); SubMenu.Closing += delegate { CloseSubMenu(); m_ActiveItem = null; this.OnClose(); }; //SubMenu.Select (); Expanded = true; Invalidate(); }
protected string ModifierString(IGuiMenuItem item) { if (item.HotKey == Key.Unknown) { return(null); } string modifier = String.Empty; if (item.ModifierKey != 0) { if (item.ModifierKey.HasFlag(KeyModifiers.Shift)) { modifier += "Shift+"; } if (item.ModifierKey.HasFlag(KeyModifiers.Control)) { modifier += "Ctrl+"; } if (item.ModifierKey.HasFlag(KeyModifiers.Alt)) { modifier += "Alt+"; } } return(modifier + item.HotKey.ToString()); }
public override void RefreshMenu() { if (Menu != null && Menu.Count > 0) { // clear all children with MenuItem Children.OfType <ToolBarButton> ().Where(c => c.MenuItem != null).ToList().ForEach(btn => { if (Children.Remove(btn)) { btn.Dispose(); } }); int separatorCount = 0; IGuiMenuItem lastItem = null; foreach (var item in Menu.Children) { if (item != null && item.ShowOnToolBar) { if (item.IsSeparator && lastItem != null && !lastItem.IsSeparator) { AddSeparator("sep_" + (++separatorCount).ToString()); } else { AddMenuItem(item); } lastItem = item; } } } }
public void MoveNext() { if (Menu == null || Menu.Count < 1) { return; } if (ActiveItem == null) { MoveFirst(); } else { int index = Menu.IndexOf(ActiveItem); if (index >= 0) { int newIndex = index + 1; while (newIndex != index && (newIndex >= Menu.Count || !Menu [newIndex].Enabled || Menu [newIndex].IsSeparator)) { newIndex++; if (newIndex >= Menu.Count) { newIndex = 0; } } m_ActiveItem = Menu[newIndex]; Invalidate(); } } }
public static IGuiMenuItem SetChecked(this IGuiMenuItem item, bool check = false) { item.IsToggleButton = true; item.Checked = check; item.ShowOnToolBar = false; return(item); }
private bool SetActiveItem(float x, float y) { MenuControlItem li = FindItem(x, y); if (li.Equals(MenuControlItem.Empty) || li.Item == null) { m_ActiveItem = null; } else { if (li.ToolTip) { Root.ShowTooltip(li.Item.Text, new PointF(x, y)); } else { Root.HideTooltip(); } if (li.Item != m_ActiveItem) { ActiveItem = li.Item; return(true); } } return(false); }
private void ShowSubMenu(IGuiMenuItem mainmenuItem) { if (mainmenuItem == null || mainmenuItem.Children.IsNullOrEmpty()) { return; } if (SubMenu != null) { CloseSubMenu(); } SubMenu = new SubMenuOverlay("sub", mainmenuItem.Children); SubMenu.ZIndex = Math.Max(SubMenu.ZIndex, this.ZIndex + 1); SubMenu.SetBounds(GetSubMenuBounds(SubMenu)); this.AddChild(SubMenu); SubMenu.Closing += delegate { CloseSubMenu(); m_LastActiveItemIndex = ActiveItem == null ? -1 : Menu.IndexOf(ActiveItem); ActiveItem = null; Invalidate(); }; //SubMenu.Focus (); //this.Focus(); this.Select(); //bool bTest = SubMenu.CanFocus; Expanded = true; Invalidate(); }
public override void OnMouseLeave(IGUIContext ctx) { if (!Expanded) { ActiveItem = null; } base.OnMouseLeave(ctx); }
public virtual void EnsureItemVisible(IGuiMenuItem item) { if (item == null) { return; } // ToDo: }
public void MoveLast() { if (Menu == null) { return; } m_ActiveItem = Menu.LastOrDefault(); Invalidate(); }
public static bool IsParentOf(this IGuiMenuItem item, IGuiMenuItem sub) { IGuiMenuItem p = sub; while (p != null && p != item) { p = p.Parent; } return(p == item); }
protected override void CleanupManagedResources() { Owner = null; subAddColumn = null; subRemoveColumn = null; subToday = null; subSplitView = null; subSidebar = null; subToolbar = null; base.CleanupManagedResources(); }
public ToolBarButton AddMenuItem(IGuiMenuItem item) { if (item != null) { ToolBarButton btn = AddMenuItem(item.Name, (char)item.ImageIndex, item.Text); if (btn != null) { btn.MenuItem = item; } return(btn); } return(null); }
// this is so fast, can be used with a million items.. static IEnumerable <IGuiMenuItem> EnumerateMenus(this IGuiMenuItem root) { var queue = new Queue <IGuiMenuItem>(); queue.Enqueue(root); while (queue.Any()) { var w = queue.Dequeue(); yield return(w); w.Children.ForEach(queue.Enqueue); } }
public virtual void OnButtonClick(object button) { ToolBarButton tb = button as ToolBarButton; if (tb != null) { IGuiMenuItem item = Menu.FindItem(tb.Name); if (item != null) { item.OnClick(); } } }
public void QueueDraw(IGuiMenuItem w, int level, Queue <IGuiMenuItem> q) { //this.LogInformation ("level {0}: {1}", level, w.Text); w.Level = level; if (!w.IsSeparator) { q.Enqueue(w); } if (w.Children != null && !w.Collapsed) { w.Children.ForEach(c => QueueDraw(c, level + 1, q)); } }
public void FocusPreviouseWidget() { if (Selected || Expanded) { if (ActiveItem != null && Menu != null) { m_LastActiveItemIndex = Menu.IndexOf(ActiveItem); } m_ActiveItem = null; //CloseSubMenu (); Invalidate(); } }
public DayViewEnsamble (string name) : base(name, SplitOrientation.Vertical, -defaultMonthCalendarWidth) { Menu = new GuiMenuItem (name + "menu", "Schedule"); Menu.AddChild ("Today", "Today", (char)FontAwesomeIcons.fa_calendar_check_o); Menu.AddSeparator (); Menu.AddChild ("AddColumn", "Add Column", (char)FontAwesomeIcons.fa_calendar_plus_o); Menu.AddChild ("RemoveColumn", "Remove Column", (char)FontAwesomeIcons.fa_calendar_minus_o); Menu.AddSeparator (); Menu.AddChild ("SplitView", "Split View").SetChecked(false).ShowOnToolbar(); Menu.AddChild ("Sidebar", "Sidebar").SetChecked(false).ShowOnToolbar(); Menu.AddChild ("Toolbar", "Toolbar").SetChecked(true); Splitter.Style.BackColorBrush.Color = SummerGUI.Theme.CurrentTheme.StatusBar.BackColor; Panel2.Style.BorderColorPen.Color = SummerGUI.Theme.Colors.Base0; Panel2.Style.BackColorBrush.Color = SummerGUI.Theme.Colors.Base01; CalendarSplitter = new SplitContainer ("calendarsplit", SplitOrientation.Horizontal, defaultMonthCalendarWidth); this.Panel2.AddChild (CalendarSplitter); MonthCalendar = new MonthCalendar ("monthcalendar1", SummerGUIWindow.CurrentContext.FontManager.StatusFont, SummerGUIWindow.CurrentContext.FontManager.BoldFont ); CalendarSplitter.Panel1.AddChild (MonthCalendar); GrdTasks = new DataGridView ("tasks"); CalendarSplitter.Panel2.AddChild (GrdTasks); DayView1 = new DayView ("dayview1"); DayView2 = new DayView ("dayview2"); DayViewSplitter = new SplitContainer ("dayviewsplitter", SplitOrientation.Horizontal, 0.5f); DayViewSplitter.Panel1.AddChild (DayView1); DayViewSplitter.Panel2.AddChild (DayView2); DayViewSplitter.Panel2Collapsed = true; Panel1.AddChild (DayViewSplitter); Tools = Panel1.AddChild (new DayViewToolBar ("dayviewtoolbar", Menu.Children, this)); Menu.Expanding += delegate { Tools.SetupMenu(); }; CanFocus = true; DayView1.Focus (); }
public void MoveFirst() { if (Menu == null) { return; } m_ActiveItem = Menu.FirstOrDefault(); //while (!m_ActiveItem.Enabled && m_ActiveItem != Menu.LastOrDefault ()) // MoveNext (); if (m_ActiveItem == null || !m_ActiveItem.Enabled) { MoveNext(); } Invalidate(); }
public IGuiMenu MergeMenus(IGuiMenu menu1, IGuiMenu menu2) { if (menu1 == null || menu1.Count == 0) { return(menu2); } if (menu2 == null || menu2.Count == 0) { return(menu1); } GuiMenu m = new GuiMenu(menu1.Name + "+" + menu2.Name); int i = 0; while (i < menu1.Count) { m.Add(menu1.Children [i++]); } if (!m.Last().IsSeparator) { m.Add(new GuiMenuItem("mergeseparator", "-")); } i = 0; while (i < menu2.Count && menu2.Children [i].IsSeparator) { i++; } while (i < menu2.Count) { IGuiMenuItem itm = menu2.Children [i++]; if (itm.IsSeparator) { if (!m.Last().IsSeparator) { m.Add(itm); } } else if (m.FindItem(itm.Name) == null) { m.Add(itm); } } while (m.Count > 0 && m.Last().IsSeparator) { m.RemoveAt(m.Count - 1); } return(m); }
public void MovePrev() { if (Menu == null || Menu.Count < 2) { return; } if (ActiveItem == null) { if (Parent as MenuBar != null) { (Parent as MenuBar).Collapse(); return; } else { MoveLast(); } } else { int index = Menu.IndexOf(ActiveItem); if (index >= 0) { int newIndex = index - 1; while (newIndex != index && (newIndex < 0 || !Menu [newIndex].Enabled || Menu [newIndex].IsSeparator)) { newIndex--; if (newIndex < 0) { if (Parent as MenuBar != null) { (Parent as MenuBar).Collapse(); return; } else { newIndex = Menu.Count - 1; } } } m_ActiveItem = Menu[newIndex]; Invalidate(); } } }
public override SizeF PreferredSize(IGUIContext ctx, SizeF proposedSize) { if (CachedPreferredSize == SizeF.Empty) { if (Menu == null || Font == null) { return(base.PreferredSize(ctx, proposedSize)); } float maxWidth = 0; float height = 0; float lineHeight = LineHeight; float separatorHeight = SeparatorHeight; string space = new string (' ', 8); for (int i = 0; i < Menu.Count; i++) { IGuiMenuItem item = Menu [i]; if (item.IsSeparator) { height += separatorHeight; } else { string line = item.Text; string modifier = ModifierString(Menu [i]); if (modifier != null) { line += space + modifier; } float w = Font.MeasureMnemonicString(line).Width; if (w > maxWidth) { maxWidth = w; } height += lineHeight; } } float iconWidth = LineHeight * 1f; CachedPreferredSize = new SizeF(iconWidth + maxWidth + Padding.Width, height + Padding.Height + Style.Border); } return(CachedPreferredSize); }
private bool SetActiveItem(float x, float y) { LayoutItem li = FindItem(x, y); if (li.Equals(LayoutItem.Empty) || li.Item == null) { if (!Expanded) { m_ActiveItem = null; } } else if (li.Item != m_ActiveItem) { ActiveItem = li.Item as IGuiMenuItem; return(true); } return(false); }
public void AddInterface(Type interfaceType) { var menuInterface = new MenuCommandDefinitionInterface(); menuInterface.InterfaceName = interfaceType.Name; menuInterface.InterfaceType = interfaceType; //Console.WriteLine (menuInterface.InterfaceName); //Console.WriteLine (menuInterface.MessageSubject); foreach (MethodInfo method in interfaceType.GetMethods()) { if (!method.Name.StartsWith("get_")) { IGuiMenuItem menu = Menu.FindItem(method.Name); if (menu != null) { MethodInfo propInfo = null; string property = String.Format("Can{0}", method.Name); PropertyInfo prop = interfaceType.GetProperty(property); if (prop != null) { propInfo = prop.GetGetMethod(); } menuInterface.Commands.Add(new MenuCommandDefinition { CommandMethod = method, TestProperty = propInfo, MenuItem = menu, }); } else { //this.LogWarning("MenuItem not found: {0}", method.Name); } } } //Interfaces.Add(menuInterface.MessageSubject, menuInterface); Interfaces.Add(interfaceType, menuInterface); }
public override void OnClick(MouseButtonEventArgs e) { base.OnClick(e); SetActiveItem(e.X, e.Y); if (m_ActiveItem != null) { if (m_ActiveItem.HasChildren) { IGuiMenuItem active = m_ActiveItem; active.Collapsed = !active.Collapsed; if (!active.Collapsed && active.HasChildren) { LastExpandedItem = active; active.ClickCount++; TrimToScreen(); } else { LastExpandedItem = null; MenuDirtyFlag = true; Update(true); (Parent as SideMenuContainer).Do(p => p.OnCollapseExpand()); } if (!active.Collapsed) { LastExpandedItems.Add(active); } Invalidate(); } else if (m_ActiveItem.OnClick() && AutoClose) { var pw = ParentWindow; if (pw != null) { OnClose(); } } } }
public static bool ProcessInputKey(this IGuiMenuItem item, OpenTK.Input.KeyboardKeyEventArgs e) { if (!(item.Visible && item.Enabled)) { return(false); } if (item.ModifierKey == e.Modifiers && item.HotKey == e.Key) { if (item.OnClick()) { return(true); } } // recurse through all children foreach (var child in item.Children) { if (child.ProcessInputKey(e)) { return(true); } } return(false); }
public MainForm() : base("SummerGUI Demo", 800, 600) { this.Title = "SummerEdit - X-Platform Texteditor"; this.TabMain.AdTabPage("texteditor", "Editor", Color.Empty, (char)FontAwesomeIcons.fa_edit); m_Editor = this.TabMain.TabPages["texteditor"].AddChild(new TextEditorEnsemble("editor1")); mnuNew = this.MenuPanel.MainMenu.FindItem("New"); mnuNew.Click += (object sender, EventArgs e) => { m_Editor.Text = null; }; mnuOpen = this.MenuPanel.MainMenu.FindItem("Open"); mnuOpen.Click += (object sender, EventArgs e) => { SummerGUI.SystemSpecific.Linux.SystemDialogs dlg = new SummerGUI.SystemSpecific.Linux.SystemDialogs(); string fpath = dlg.OpenFileDialog("Open File", this); if (Strings.FileExists(fpath)) { ShowStatus(String.Format("Loading {0}..", Strings.GetFilename(fpath)), true); System.Threading.Tasks.Task.Factory.StartNew(() => { m_Editor.FilePath = fpath; m_Editor.Text = TextFile.LoadTextFile(fpath); }).ContinueWith(t => ShowStatus()); } }; mnuSave = this.MenuPanel.MainMenu.FindItem("Save"); mnuSave.Click += (object sender, EventArgs e) => { this.LogWarning("mnuSave not implemented."); }; //this.LeftSideMenu.Style.BackColorBrush = new LinearGradientBrush (Theme.Colors.Base0, Theme.Colors.Base00); m_Editor.Focus(); }
#pragma warning disable 219 // disable warnings about unused menu items /// <summary> /// Load all your widgets here, /// </summary> public MainForm() : base("SummerGUI Demo", 800, 600) { this.Title = "Summer GUI Demo - A lightweight X-Platform GUI Framework in C#"; // some more custom menu items var mnuView = MainMenu.FindItem("View"); mnuShowPlotterData = mnuView.InsertChild(2, "ShowPlotterData", "Plotter Data Table", (char)FontAwesomeIcons.fa_columns) .SetChecked(true).SetHotKey(Key.F8); mnuShowPlotterData.CheckedChanged += delegate { m_GraphPlotter.Panel2Collapsed = !mnuShowPlotterData.Checked; }; mnuView.InsertSeparator(3); // ****** this.TabMain.AdTabPage("common", "Common Controls", Theme.Colors.White); this.TabMain.AdTabPage("datagrid", "Data Grid"); this.TabMain.AdTabPage("schedule", "Schedule"); this.TabMain.AdTabPage("texteditor", "Editor", Color.Empty, (char)FontAwesomeIcons.fa_edit); this.TabMain.AdTabPage("plotter", "Plotter"); this.TabMain.AdTabPage("sinus", "Sinus"); this.TabMain.AdTabPage("sensors", "Sensors"); this.TabMain.AdTabPage("console", "Console"); m_CommonControlsSampleContainer = this.TabMain.TabPages ["common"].AddChild(new CommonControlsSampleContainer()); this.TabMain.TabPages ["common"].ScrollBars = ScrollBars.Vertical; this.TabMain.TabPages ["common"].AutoScroll = true; GridView = this.TabMain.TabPages ["datagrid"].AddChild(new DataGridEnsemble("samplegrid")); m_Schedule = this.TabMain.TabPages ["schedule"].AddChild(new DayViewEnsamble("sampleschedule")); // insert a menu which the Schedule-Widget provides.., just before "Extras" menu var mnuExtras = MainMenu.FindItem("Extras"); MainMenu.Insert(MainMenu.IndexOf(mnuExtras), m_Schedule.Menu); m_Editor = this.TabMain.TabPages ["texteditor"].AddChild(new TextEditorEnsemble("texteditor")); m_GraphPlotter = this.TabMain.TabPages ["plotter"].AddChild(new PlotterContainer("graph2d")); // *** Charts // Single PerfChart "Sinus" m_SinusChart = this.TabMain.TabPages ["sinus"].AddChild(new PerfChart("SinusChart")); m_SinusChart.Caption = "f(x) = sin(x)"; m_SinusChart.DemoMode = PerfChart.DemoModes.Sinus; m_SinusChart.LineColor = MetroColors.Magenta; m_SinusChart.LineWidth = 2.5f; m_SinusChart.AverageLineColor = Color.FromArgb(128, Theme.Colors.Silver); m_SinusChart.AverageLineWidth = 2.5f; m_SinusChart.FlowDirection = PerfChart.FlowDirections.LeftToRight; m_SinusChart.GridScrolling = true; m_SinusChart.Click += delegate { if (m_SinusChart.FlowDirection == PerfChart.FlowDirections.LeftToRight) { m_SinusChart.FlowDirection = PerfChart.FlowDirections.RightToLeft; } else { m_SinusChart.FlowDirection = PerfChart.FlowDirections.LeftToRight; } }; // Array of PerfCharts m_SensorContainer = this.TabMain.TabPages ["sensors"].AddChild(new TableLayoutContainer("sensors")); m_SensorContainer.Padding = new Padding(2f); m_SensorContainer.CellPadding = new SizeF(1.5f, 1.5f); m_SensorContainer.Style.BackColorBrush.Color = Theme.Colors.Base01; //int maxSensors = 49; //int sensorColumns = 7; int maxSensors = 25; int sensorColumns = 5; m_SensorDisplays = new List <PerfChart> (); for (int k = 0; k < maxSensors; k++) { PerfChart display = m_SensorContainer.AddChild(new PerfChart("SensorDisplay" + (k + 1).ToString()), k / sensorColumns, k % sensorColumns); m_SensorDisplays.Add(display); if (k % 2 > 0) { display.DemoMode = PerfChart.DemoModes.Random; } else { display.DemoMode = PerfChart.DemoModes.Sinus; } display.DemoSpeed = (decimal)(ThreadSafeRandom.NextDouble() * 0.5); display.GridSpacing = 16; if (ThreadSafeRandom.NextBool()) { display.FlowDirection = PerfChart.FlowDirections.LeftToRight; } else { display.FlowDirection = PerfChart.FlowDirections.RightToLeft; } display.DisplayFrequency = (ThreadSafeRandom.NextDouble() * 100d).Ceil(); if (ThreadSafeRandom.NextBool()) { display.GridScrolling = true; display.ValueSpacing = (float)(ThreadSafeRandom.NextDouble() * 4d + 1d); } display.AverageLineColor = MetroColors.Colors[ThreadSafeRandom.Next(MetroColors.Colors.Length)]; display.LineColor = MetroColors.Colors[ThreadSafeRandom.Next(MetroColors.Colors.Length)]; } m_SensorContainer.Rows.ForEach(row => row.SizeMode = TableSizeModes.None); m_ConsoleOut = new ConsoleOutputWidget("ConsoleOut"); this.TabMain.TabPages["console"].AddChild(m_ConsoleOut); ShowStatus("Loading Contacts..", true); GridView.DataGrid.DataLoaded += delegate { ShowStatus(); bool LoadBook = true; if (LoadBook) { string textEditorBook = (Strings.ApplicationPath(true) // + "SampleData/Alice's Adventures in Wonderland.txt").FixPathForPlatform(); + "SampleData/Ulysses.txt").FixPathForPlatform(); ShowStatus(String.Format("Loading {0} into editor..", Strings.GetFilename(textEditorBook)), false); System.Threading.Tasks.Task.Factory.StartNew(() => { m_Editor.Editor.RowManager.GroupParagraphs = true; // just for the sample books m_Editor.Text = TextFile.LoadTextFile(textEditorBook); }).ContinueWith(t => ShowStatus()); } }; base.Controller = new DemoController(this); // Show Diagnostics in StatusBar StartDiagnostics(); }
public static void ExpandAll(this IGuiMenuItem item) { item.Expand(); item.Children.ExpandAll(); }
public static void CollapseAll(this IGuiMenuItem item) { item.Collapsed = true; item.Children.CollapseAll(); }