// ----------------------------------------------------------------------------- // | Internal method - cleans up an expanded menu. // ----------------------------------------------------------------------------- protected void retract() { isDragging = false; isExpanded = false; expandedBoxElement.Hide(); textAreaElement.Show(); smallBoxElement.Show(); smallBoxElement.MaterialName = ("SdkTrays/MiniTextBox"); smallBoxElement.BorderMaterialName = ("SdkTrays/MiniTextBox"); }
public override void CursorPressed(Vector2 cursorPos) { //Click the text area so that we can input if (IsCursorOver(inputBoxElement, cursorPos)) { isTextMode = true; inputBoxElement.MaterialName = "SdkTrays/MiniTextBox/Press"; inputBoxElement.BorderMaterialName = "SdkTrays/MiniTextBox/Press"; inputCursorElement.Show(); tick = init_tick; } else { isTextMode = false; inputBoxElement.MaterialName = "SdkTrays/MiniTextBox"; inputBoxElement.BorderMaterialName = "SdkTrays/MiniTextBox"; inputCursorElement.Hide(); tick = 0; } }
public override void AddWidget( int rowNum, int colNum, Widget widget, AlignMode hAlign = AlignMode.Left, AlignMode vAlign = AlignMode.Left, DockMode dock = DockMode.None, int rowSpan = 1, int colSpan = 1, bool isAddWidgetToAnother = true) { if (rowNum > rows.Count) { int sub = rowNum - rows.Count; for (int i = 0; i < sub; i++) { PanelRow row = new PanelRow(this); row.Type = ValueType.Abosulte; row.Height = widget.Height; rows.Add(row); } } if (colNum > cols.Count) { int sub = colNum - cols.Count; for (int i = 0; i < sub; i++) { PanelColumn col = new PanelColumn(this); col.Type = ValueType.Percent; cols.Add(col); } } base.AddWidget(rowNum, colNum, widget, hAlign, vAlign, dock, rowSpan, colSpan); if (widget.Top + widget.Height > Height) { scroll.Show(); drag.Show(); widget.Hide(); } else { visualWidgets.Add(widget); } calculateScrollBar(); }
public override void CursorPressed(Mogre.Vector2 cursorPos) { Mogre.OverlayManager om = Mogre.OverlayManager.Singleton; if (isExpanded) { if (scrollHandleElement.IsVisible) // check for scrolling { Mogre.Vector2 co = Widget.CursorOffset(scrollHandleElement, cursorPos); if (co.SquaredLength <= 81f) { isDragging = true; dragOffset = co.y; return; } else if (Widget.IsCursorOver(scrollTrackElement, cursorPos)) { float newTop = scrollHandleElement.Top + co.y; float lowerBoundary = scrollTrackElement.Height - scrollHandleElement.Height; scrollHandleElement.Top = (UIMathHelper.clamp <int>((int)newTop, 0, (int)lowerBoundary)); float scrollPercentage = UIMathHelper.clamp <float>(newTop / lowerBoundary, 0f, 1f); setDisplayIndex((uint)(scrollPercentage * (Items.Count - itemElements.Count) + 0.5f)); return; } } if (!IsCursorOver(expandedBoxElement, cursorPos, 3f)) { retract(); } else { float l = itemElements[0]._getDerivedLeft() * om.ViewportWidth + 5f; float t = itemElements[0]._getDerivedTop() * om.ViewportHeight + 5f; float r = l + itemElements[itemElements.Count - 1].Width - 10f; float b = itemElements[itemElements.Count - 1]._getDerivedTop() * om.ViewportHeight + itemElements[itemElements.Count - 1].Height - 5; if (cursorPos.x >= l && cursorPos.x <= r && cursorPos.y >= t && cursorPos.y <= b) { if (highlightIndex != selectionIndex) { SelectItem((uint)highlightIndex); } retract(); } } } else { if (Items.Count < 2) // don't waste time showing a menu if there's no choice { return; } if (IsCursorOver(smallBoxElement, cursorPos, 4f)) { expandedBoxElement.Show(); smallBoxElement.Hide(); // calculate how much vertical space we need float idealHeight = itemsShown * (smallBoxElement.Height - 8f) + 20f; expandedBoxElement.Height = (idealHeight); scrollTrackElement.Height = (expandedBoxElement.Height - 20f); expandedBoxElement.Left = (smallBoxElement.Left - 4f); // if the expanded menu goes down off the screen, make it go up instead if (smallBoxElement._getDerivedTop() * om.ViewportHeight + idealHeight > om.ViewportHeight) { expandedBoxElement.Top = (smallBoxElement.Top + smallBoxElement.Height - idealHeight + 3f); // if we're in thick style, hide the caption because it will interfere with the expanded menu if (textAreaElement.HorizontalAlignment == GuiHorizontalAlignment.GHA_CENTER) { textAreaElement.Hide(); } } else { expandedBoxElement.Top = (smallBoxElement.Top + 3f); } isExpanded = true; highlightIndex = selectionIndex; setDisplayIndex((uint)highlightIndex); if (itemsShown < Items.Count) // update scrollbar position { scrollHandleElement.Show(); float lowerBoundary = scrollTrackElement.Height - scrollHandleElement.Height; scrollHandleElement.Top = ((int)(displayIndex * lowerBoundary / (Items.Count - itemElements.Count))); } else { scrollHandleElement.Hide(); } } } }