using VoiceCat.Interop; namespace VoiceCat.App.Forms; /// /// Prompt the moderator to pick a destination channel for a user move. /// public sealed class MoveUserDialog : Form { private readonly ComboBox _cboChannel; public uint SelectedChannelId { get; private set; } public MoveUserDialog(IEnumerable channels, uint currentChannelId) { Text = "Move user to channel"; FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; MinimizeBox = false; StartPosition = FormStartPosition.CenterParent; AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(384, 120); var lbl = new Label { Text = "&Destination channel:", Location = new Point(12, 12), AutoSize = true, }; _cboChannel = new ComboBox { Location = new Point(12, 36), Size = new Size(360, 23), DropDownStyle = ComboBoxStyle.DropDownList, TabIndex = 1, }; foreach (var ch in channels.OrderBy(c => c.Name)) { _cboChannel.Items.Add(new ChannelItem(ch.Name, ch.Id)); if (ch.Id == currentChannelId) _cboChannel.SelectedIndex = _cboChannel.Items.Count - 1; } if (_cboChannel.SelectedIndex < 0 && _cboChannel.Items.Count > 0) _cboChannel.SelectedIndex = 0; var btnOk = new Button { Text = "&OK", DialogResult = DialogResult.OK, Location = new Point(216, 72), Size = new Size(75, 27), TabIndex = 2, }; var btnCancel = new Button { Text = "&Cancel", DialogResult = DialogResult.Cancel, Location = new Point(297, 72), Size = new Size(75, 27), TabIndex = 3, }; AcceptButton = btnOk; CancelButton = btnCancel; Controls.AddRange([lbl, _cboChannel, btnOk, btnCancel]); btnOk.Click += (_, _) => { SelectedChannelId = (_cboChannel.SelectedItem as ChannelItem)?.Id ?? 0; }; } private sealed class ChannelItem(string name, uint id) { public uint Id { get; } = id; public override string ToString() => name; } }