mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2024-11-30 15:41:30 +00:00
180 lines
3.8 KiB
C#
180 lines
3.8 KiB
C#
|
|
||
|
#region ================== Copyright (c) 2007 Pascal vd Heiden
|
||
|
|
||
|
/*
|
||
|
* Copyright (c) 2007 Pascal vd Heiden, www.codeimp.com
|
||
|
* This program is released under GNU General Public License
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Namespaces
|
||
|
|
||
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.ComponentModel;
|
||
|
using System.Drawing;
|
||
|
using System.Text;
|
||
|
using System.Windows.Forms;
|
||
|
using CodeImp.DoomBuilder.Map;
|
||
|
using CodeImp.DoomBuilder.Data;
|
||
|
using CodeImp.DoomBuilder.IO;
|
||
|
using System.IO;
|
||
|
using CodeImp.DoomBuilder.Config;
|
||
|
using CodeImp.DoomBuilder.Editing;
|
||
|
using CodeImp.DoomBuilder.Controls;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
namespace CodeImp.DoomBuilder.Windows
|
||
|
{
|
||
|
public partial class BitFlagsForm : DelayedForm
|
||
|
{
|
||
|
#region ================== Variables
|
||
|
|
||
|
private bool setup;
|
||
|
private int value;
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Properties
|
||
|
|
||
|
public int Value { get { return value; } }
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Constructor
|
||
|
|
||
|
// Constructor
|
||
|
public BitFlagsForm()
|
||
|
{
|
||
|
// Initialize
|
||
|
InitializeComponent();
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Events
|
||
|
|
||
|
// When a checkbox is clicked
|
||
|
private void box_CheckedChanged(object sender, EventArgs e)
|
||
|
{
|
||
|
if(!setup)
|
||
|
{
|
||
|
// Now setting up
|
||
|
setup = true;
|
||
|
|
||
|
// Get this checkbox
|
||
|
CheckBox thisbox = (sender as CheckBox);
|
||
|
|
||
|
// Checking or unchecking?
|
||
|
if(thisbox.Checked)
|
||
|
{
|
||
|
// Go for all other options
|
||
|
foreach(CheckBox b in options.Checkboxes)
|
||
|
{
|
||
|
// Not the same box?
|
||
|
if(b != sender)
|
||
|
{
|
||
|
// Overlapping bit flags?
|
||
|
if(((int)b.Tag & (int)thisbox.Tag) != 0)
|
||
|
{
|
||
|
// Uncheck the other
|
||
|
b.Checked = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Done
|
||
|
setup = false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Cancel clicked
|
||
|
private void cancel_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
// Close
|
||
|
DialogResult = DialogResult.Cancel;
|
||
|
this.Close();
|
||
|
}
|
||
|
|
||
|
// OK clicked
|
||
|
private void apply_Click(object sender, EventArgs e)
|
||
|
{
|
||
|
this.value = 0;
|
||
|
|
||
|
// Go for all checkboxes to make the final value
|
||
|
foreach(CheckBox b in options.Checkboxes)
|
||
|
if(b.Checked) value |= (int)b.Tag;
|
||
|
|
||
|
// Done
|
||
|
DialogResult = DialogResult.OK;
|
||
|
this.Close();
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
|
||
|
#region ================== Methods
|
||
|
|
||
|
// Setup from EnumList
|
||
|
public void Setup(EnumList flags, int value)
|
||
|
{
|
||
|
setup = true;
|
||
|
this.value = value;
|
||
|
|
||
|
// Make a checkbox for each item
|
||
|
foreach(EnumItem item in flags)
|
||
|
{
|
||
|
// Make the checkbox
|
||
|
CheckBox box = options.Add(item.Title, item.GetIntValue());
|
||
|
|
||
|
// Bind checking event
|
||
|
box.CheckedChanged += new EventHandler(box_CheckedChanged);
|
||
|
|
||
|
// Checking the box?
|
||
|
if((value & (int)box.Tag) == (int)box.Tag)
|
||
|
{
|
||
|
box.Checked = true;
|
||
|
|
||
|
// Go for all other checkboxes
|
||
|
foreach(CheckBox b in options.Checkboxes)
|
||
|
{
|
||
|
// Not the same box?
|
||
|
if(b != box)
|
||
|
{
|
||
|
// Overlapping bit flags?
|
||
|
if(((int)b.Tag & (int)box.Tag) != 0)
|
||
|
{
|
||
|
// Uncheck the other
|
||
|
b.Checked = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
setup = false;
|
||
|
}
|
||
|
|
||
|
// This shows the dialog
|
||
|
// Returns the flags or the same flags when cancelled
|
||
|
public static int ShowDialog(IWin32Window owner, EnumList flags, int value)
|
||
|
{
|
||
|
int result = value;
|
||
|
BitFlagsForm f = new BitFlagsForm();
|
||
|
f.Setup(flags, value);
|
||
|
if(f.ShowDialog(owner) == DialogResult.OK) result = f.Value;
|
||
|
f.Dispose();
|
||
|
return result;
|
||
|
}
|
||
|
|
||
|
#endregion
|
||
|
}
|
||
|
}
|