1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-16 07:14:09 +02:00
Beef/IDE/src/ui/MultiSelectDialog.bf
2019-08-23 11:56:54 -07:00

136 lines
3 KiB
Beef

using Beefy.widgets;
using System;
using System.Collections.Generic;
using Beefy.theme.dark;
using Beefy.gfx;
using Beefy.events;
namespace IDE.ui
{
class MultiSelectDialog : IDEDialog
{
class ListView : IDEListView
{
public override void KeyDown(KeyCode keyCode, bool isRepeat)
{
base.KeyDown(keyCode, isRepeat);
var multiSelectDialog = (MultiSelectDialog)mParent;
if (keyCode == .Space)
{
var root = GetRoot();
int childCount = root.GetChildCount();
for (int i < childCount)
{
var listViewItem = root.GetChildAtIndex(i);
if (listViewItem.Selected)
{
var entry = multiSelectDialog.[Friend]mEntries[i];
entry.mCheckbox.Checked = !entry.mCheckbox.Checked;
}
}
}
}
}
ListView mListView;
public class Entry
{
public String mName ~ delete _;
public CheckBox mCheckbox;
public bool mInitialChecked;
}
public List<Entry> mEntries = new .() ~ DeleteContainerAndItems!(_);
Dictionary<ListViewItem, Entry> mEntryMap = new .() ~ delete _;
public this()
{
mTitle = new String("Configuration Manager");
mWindowFlags |= .Resizable;
mListView = new ListView();
mListView.InitScrollbars(false, true);
mListView.mVertScrollbar.mPageSize = GS!(100);
mListView.mVertScrollbar.mContentSize = GS!(500);
mListView.UpdateScrollbars();
mListView.AddColumn(100, "Name");
mListView.mLabelX = GS!(32);
mTabWidgets.Add(mListView);
AddWidget(mListView);
}
public void Add(String name, bool isChecked = false)
{
var entry = new Entry();
entry.mName = new String(name);
entry.mInitialChecked = isChecked;
mEntries.Add(entry);
}
public void FinishInit()
{
mEntries.Sort(scope (lhs, rhs) => String.Compare(lhs.mName, rhs.mName, true));
for (let entry in mEntries)
{
let listViewItem = mListView.GetRoot().CreateChildItem();
listViewItem.Label = entry.mName;
listViewItem.mOnMouseDown.Add(new => ValueClicked);
entry.mCheckbox = new DarkCheckBox();
entry.mCheckbox.Checked = entry.mInitialChecked;
entry.mCheckbox.Resize(GS!(8), GS!(1), GS!(20), GS!(20));
listViewItem.AddWidget(entry.mCheckbox);
if (@entry.Index == 0)
listViewItem.Focused = true;
mEntryMap[listViewItem] = entry;
}
}
public override void AddedToParent()
{
mListView.SetFocus();
}
public override void CalcSize()
{
mWidth = GS!(280);
mHeight = GS!(190);
}
public override void ResizeComponents()
{
base.ResizeComponents();
mListView.Resize(GS!(6), GS!(6), mWidth - GS!(12), mHeight - GS!(48));
}
public override void DrawAll(Graphics g)
{
base.DrawAll(g);
IDEUtils.DrawOutline(g, mListView, 0, 1);
}
public void ValueClicked(MouseEvent theEvent)
{
let clickedItem = (DarkListViewItem)theEvent.mSender;
mListView.SetFocus();
if (theEvent.mBtn == 1)
{
if (!clickedItem.Selected)
mListView.GetRoot().SelectItem(clickedItem, true);
}
else
{
mListView.GetRoot().SelectItem(clickedItem, true);
}
}
}
}