abolish "Edit Mode" in favor of allowing channel, system and alert widgets to be moved with the right mouse button so long as "Lock Widgets" isn't enabled;

pull/1/head
Bryan Biedenkapp 11 months ago
parent 24ab27f94e
commit 0c045ebf6e

@ -2,9 +2,6 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="55" Width="105" Height="55" Width="105"
MouseLeftButtonDown="AlertTone_MouseLeftButtonDown"
MouseMove="AlertTone_MouseMove"
MouseRightButtonDown="AlertTone_MouseRightButtonDown"
DataContext="{Binding RelativeSource={RelativeSource Self}}" Background="#FF848484"> DataContext="{Binding RelativeSource={RelativeSource Self}}" Background="#FF848484">
<UserControl.Effect> <UserControl.Effect>
<DropShadowEffect ShadowDepth="1" BlurRadius="16" Color="#FF686767" Opacity="0.3" /> <DropShadowEffect ShadowDepth="1" BlurRadius="16" Color="#FF686767" Opacity="0.3" />

@ -47,11 +47,6 @@ namespace dvmconsole.Controls
/// </summary> /// </summary>
public string AlertFilePath { get; set; } public string AlertFilePath { get; set; }
/// <summary>
///
/// </summary>
public bool IsEditMode { get; set; }
/* /*
** Events ** Events
*/ */
@ -71,10 +66,6 @@ namespace dvmconsole.Controls
InitializeComponent(); InitializeComponent();
AlertFilePath = alertFilePath; AlertFilePath = alertFilePath;
AlertFileName = System.IO.Path.GetFileNameWithoutExtension(alertFilePath); AlertFileName = System.IO.Path.GetFileNameWithoutExtension(alertFilePath);
this.MouseLeftButtonDown += AlertTone_MouseLeftButtonDown;
this.MouseMove += AlertTone_MouseMove;
this.MouseRightButtonDown += AlertTone_MouseRightButtonDown;
} }
/// <summary> /// <summary>
@ -86,61 +77,5 @@ namespace dvmconsole.Controls
{ {
OnAlertTone.Invoke(this); OnAlertTone.Invoke(this);
} }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AlertTone_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!IsEditMode) return;
startPoint = e.GetPosition(this);
isDragging = true;
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AlertTone_MouseMove(object sender, MouseEventArgs e)
{
if (isDragging && IsEditMode)
{
var parentCanvas = VisualTreeHelper.GetParent(this) as Canvas;
if (parentCanvas != null)
{
Point mousePos = e.GetPosition(parentCanvas);
double newLeft = mousePos.X - startPoint.X;
double newTop = mousePos.Y - startPoint.Y;
Canvas.SetLeft(this, Math.Max(0, newLeft));
Canvas.SetTop(this, Math.Max(0, newTop));
}
}
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AlertTone_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
if (!IsEditMode || !isDragging) return;
isDragging = false;
var parentCanvas = VisualTreeHelper.GetParent(this) as Canvas;
if (parentCanvas != null)
{
double x = Canvas.GetLeft(this);
double y = Canvas.GetTop(this);
}
ReleaseMouseCapture();
}
} // public partial class AlertTone : UserControl } // public partial class AlertTone : UserControl
} // namespace dvmconsole.Controls } // namespace dvmconsole.Controls

@ -227,11 +227,6 @@ namespace dvmconsole.Controls
/// </summary> /// </summary>
public string VoiceChannel { get; set; } public string VoiceChannel { get; set; }
/// <summary>
/// Flag indicating whether or not edit mode is enabled.
/// </summary>
public bool IsEditMode { get; set; }
/// <summary> /// <summary>
/// Flag indicating whether or not this channel is selected. /// Flag indicating whether or not this channel is selected.
/// </summary> /// </summary>
@ -442,9 +437,6 @@ namespace dvmconsole.Controls
/// </summary> /// </summary>
private void UpdatePTTColor() private void UpdatePTTColor()
{ {
if (IsEditMode)
return;
if (PttState) if (PttState)
PttButton.Background = RED_GRADIENT; PttButton.Background = RED_GRADIENT;
else else
@ -456,9 +448,6 @@ namespace dvmconsole.Controls
/// </summary> /// </summary>
private void UpdatePageColor() private void UpdatePageColor()
{ {
if (IsEditMode)
return;
if (PageState) if (PageState)
PageSelectButton.Background = ORANGE_GRADIENT; PageSelectButton.Background = ORANGE_GRADIENT;
else else
@ -467,9 +456,6 @@ namespace dvmconsole.Controls
private void UpdateHoldColor() private void UpdateHoldColor()
{ {
if (IsEditMode)
return;
if (HoldState) if (HoldState)
ChannelMarkerBtn.Background = ORANGE_GRADIENT; ChannelMarkerBtn.Background = ORANGE_GRADIENT;
else else
@ -508,9 +494,6 @@ namespace dvmconsole.Controls
/// <param name="e"></param> /// <param name="e"></param>
private void ChannelBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) private void ChannelBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{ {
if (IsEditMode)
return;
IsSelected = !IsSelected; IsSelected = !IsSelected;
ControlBorder.Background = IsSelected ? BLUE_GRADIENT : DARK_GRAY_GRADIENT; ControlBorder.Background = IsSelected ? BLUE_GRADIENT : DARK_GRAY_GRADIENT;

@ -46,6 +46,7 @@
<MenuItem Header="_Reset Settings" Click="ResetSettings_Click" /> <MenuItem Header="_Reset Settings" Click="ResetSettings_Click" />
<Separator /> <Separator />
<MenuItem Header="_Select Widgets to Display" Click="SelectWidgets_Click" /> <MenuItem Header="_Select Widgets to Display" Click="SelectWidgets_Click" />
<Separator />
<MenuItem Header="Alerts"> <MenuItem Header="Alerts">
<MenuItem Header="Add Alert Tone" Click="AddAlertTone_Click" /> <MenuItem Header="Add Alert Tone" Click="AddAlertTone_Click" />
</MenuItem> </MenuItem>
@ -55,7 +56,7 @@
<Separator /> <Separator />
<MenuItem Header="_Dark Mode" IsCheckable="True" Checked="ToggleDarkMode_Click" Unchecked="ToggleDarkMode_Click" x:Name="menuDarkMode" /> <MenuItem Header="_Dark Mode" IsCheckable="True" Checked="ToggleDarkMode_Click" Unchecked="ToggleDarkMode_Click" x:Name="menuDarkMode" />
<Separator /> <Separator />
<MenuItem Header="_Enable Edit Mode" IsCheckable="True" Checked="ToggleEditMode_Click" Unchecked="ToggleEditMode_Click" x:Name="menuEditMode" /> <MenuItem Header="_Lock Widgets" IsCheckable="True" Checked="ToggleLockWidgets_Click" Unchecked="ToggleLockWidgets_Click" x:Name="menuToggleLockWidgets" />
<MenuItem Header="_Fit Channel Display to Window Size" Click="ResizeCanvasToWindow_Click" x:Name="menuFitToWindow" /> <MenuItem Header="_Fit Channel Display to Window Size" Click="ResizeCanvasToWindow_Click" x:Name="menuFitToWindow" />
</MenuItem> </MenuItem>
</Menu> </Menu>

@ -37,6 +37,7 @@ using fnecore.P25;
using fnecore.P25.LC.TSBK; using fnecore.P25.LC.TSBK;
using fnecore.P25.KMM; using fnecore.P25.KMM;
using System; using System;
using System.Windows.Media;
namespace dvmconsole namespace dvmconsole
{ {
@ -69,8 +70,6 @@ namespace dvmconsole
private const string URI_RESOURCE_PATH = "pack://application:,,,/dvmconsole;component"; private const string URI_RESOURCE_PATH = "pack://application:,,,/dvmconsole;component";
private bool isEditMode = false;
private bool globalPttState = false; private bool globalPttState = false;
private const int GridSize = 5; private const int GridSize = 5;
@ -275,8 +274,9 @@ namespace dvmconsole
Canvas.SetTop(systemStatusBox, offsetY); Canvas.SetTop(systemStatusBox, offsetY);
} }
systemStatusBox.MouseLeftButtonDown += SystemStatusBox_MouseLeftButtonDown; // widget placement
systemStatusBox.MouseLeftButtonUp += SystemStatusBox_MouseLeftButtonUp; systemStatusBox.MouseRightButtonDown += SystemStatusBox_MouseRightButtonDown;
systemStatusBox.MouseRightButtonUp += SystemStatusBox_MouseRightButtonUp;
systemStatusBox.MouseMove += SystemStatusBox_MouseMove; systemStatusBox.MouseMove += SystemStatusBox_MouseMove;
channelsCanvas.Children.Add(systemStatusBox); channelsCanvas.Children.Add(systemStatusBox);
@ -365,9 +365,11 @@ namespace dvmconsole
channelBox.PageButtonClicked += ChannelBox_PageButtonClicked; channelBox.PageButtonClicked += ChannelBox_PageButtonClicked;
channelBox.HoldChannelButtonClicked += ChannelBox_HoldChannelButtonClicked; channelBox.HoldChannelButtonClicked += ChannelBox_HoldChannelButtonClicked;
channelBox.MouseLeftButtonDown += ChannelBox_MouseLeftButtonDown; // widget placement
channelBox.MouseLeftButtonUp += ChannelBox_MouseLeftButtonUp; channelBox.MouseRightButtonDown += ChannelBox_MouseRightButtonDown;
channelBox.MouseRightButtonUp += ChannelBox_MouseRightButtonUp;
channelBox.MouseMove += ChannelBox_MouseMove; channelBox.MouseMove += ChannelBox_MouseMove;
channelsCanvas.Children.Add(channelBox); channelsCanvas.Children.Add(channelBox);
offsetX += 225; offsetX += 225;
@ -387,9 +389,15 @@ namespace dvmconsole
// iterate through the alert tones and begin building alert tone widges // iterate through the alert tones and begin building alert tone widges
foreach (var alertPath in settingsManager.AlertToneFilePaths) foreach (var alertPath in settingsManager.AlertToneFilePaths)
{ {
AlertTone alertTone = new AlertTone(alertPath) { IsEditMode = isEditMode }; AlertTone alertTone = new AlertTone(alertPath);
alertTone.OnAlertTone += SendAlertTone; alertTone.OnAlertTone += SendAlertTone;
// widget placement
alertTone.MouseRightButtonDown += AlertTone_MouseRightButtonDown;
alertTone.MouseRightButtonUp += AlertTone_MouseRightButtonUp;
alertTone.MouseMove += AlertTone_MouseMove;
if (settingsManager.AlertTonePositions.TryGetValue(alertPath, out var position)) if (settingsManager.AlertTonePositions.TryGetValue(alertPath, out var position))
{ {
Canvas.SetLeft(alertTone, position.X); Canvas.SetLeft(alertTone, position.X);
@ -401,8 +409,6 @@ namespace dvmconsole
Canvas.SetTop(alertTone, 20); Canvas.SetTop(alertTone, 20);
} }
alertTone.MouseRightButtonUp += AlertTone_MouseRightButtonUp;
channelsCanvas.Children.Add(alertTone); channelsCanvas.Children.Add(alertTone);
} }
} }
@ -425,9 +431,11 @@ namespace dvmconsole
playbackChannelBox.PageButtonClicked += ChannelBox_PageButtonClicked; playbackChannelBox.PageButtonClicked += ChannelBox_PageButtonClicked;
playbackChannelBox.HoldChannelButtonClicked += ChannelBox_HoldChannelButtonClicked; playbackChannelBox.HoldChannelButtonClicked += ChannelBox_HoldChannelButtonClicked;
playbackChannelBox.MouseLeftButtonDown += ChannelBox_MouseLeftButtonDown; // widget placement
playbackChannelBox.MouseLeftButtonUp += ChannelBox_MouseLeftButtonUp; playbackChannelBox.MouseRightButtonDown += ChannelBox_MouseRightButtonDown;
playbackChannelBox.MouseRightButtonUp += ChannelBox_MouseRightButtonUp;
playbackChannelBox.MouseMove += ChannelBox_MouseMove; playbackChannelBox.MouseMove += ChannelBox_MouseMove;
channelsCanvas.Children.Add(playbackChannelBox); channelsCanvas.Children.Add(playbackChannelBox);
Cursor = Cursors.Arrow; Cursor = Cursors.Arrow;
@ -608,21 +616,6 @@ namespace dvmconsole
} }
} }
/// <summary>
///
/// </summary>
private void UpdateEditModeForWidgets()
{
foreach (var child in channelsCanvas.Children)
{
if (child is AlertTone alertTone)
alertTone.IsEditMode = isEditMode;
if (child is ChannelBox channelBox)
channelBox.IsEditMode = isEditMode;
}
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -811,6 +804,7 @@ namespace dvmconsole
const double heightOffset = 115; const double heightOffset = 115;
// set PTT toggle mode (this must be done before channel widgets are defined) // set PTT toggle mode (this must be done before channel widgets are defined)
menuToggleLockWidgets.IsChecked = settingsManager.LockWidgets;
menuTogglePTTMode.IsChecked = settingsManager.TogglePTTMode; menuTogglePTTMode.IsChecked = settingsManager.TogglePTTMode;
if (!string.IsNullOrEmpty(settingsManager.LastCodeplugPath) && File.Exists(settingsManager.LastCodeplugPath)) if (!string.IsNullOrEmpty(settingsManager.LastCodeplugPath) && File.Exists(settingsManager.LastCodeplugPath))
@ -1161,10 +1155,15 @@ namespace dvmconsole
if (openFileDialog.ShowDialog() == true) if (openFileDialog.ShowDialog() == true)
{ {
string alertFilePath = openFileDialog.FileName; string alertFilePath = openFileDialog.FileName;
var alertTone = new AlertTone(alertFilePath) { IsEditMode = isEditMode }; var alertTone = new AlertTone(alertFilePath);
alertTone.OnAlertTone += SendAlertTone; alertTone.OnAlertTone += SendAlertTone;
// widget placement
alertTone.MouseRightButtonDown += AlertTone_MouseRightButtonDown;
alertTone.MouseRightButtonUp += AlertTone_MouseRightButtonUp;
alertTone.MouseMove += AlertTone_MouseMove;
if (settingsManager.AlertTonePositions.TryGetValue(alertFilePath, out var position)) if (settingsManager.AlertTonePositions.TryGetValue(alertFilePath, out var position))
{ {
Canvas.SetLeft(alertTone, position.X); Canvas.SetLeft(alertTone, position.X);
@ -1176,8 +1175,6 @@ namespace dvmconsole
Canvas.SetTop(alertTone, 20); Canvas.SetTop(alertTone, 20);
} }
alertTone.MouseRightButtonUp += AlertTone_MouseRightButtonUp;
channelsCanvas.Children.Add(alertTone); channelsCanvas.Children.Add(alertTone);
settingsManager.UpdateAlertTonePaths(alertFilePath); settingsManager.UpdateAlertTonePaths(alertFilePath);
} }
@ -1226,12 +1223,12 @@ namespace dvmconsole
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void ToggleEditMode_Click(object sender, RoutedEventArgs e) private void ToggleLockWidgets_Click(object sender, RoutedEventArgs e)
{ {
isEditMode = !isEditMode; if (!windowLoaded)
var menuItem = (MenuItem)sender; return;
menuItem.Header = isEditMode ? "Disable Edit Mode" : "Enable Edit Mode";
UpdateEditModeForWidgets(); settingsManager.LockWidgets = !settingsManager.LockWidgets;
} }
/// <summary> /// <summary>
@ -1398,9 +1395,10 @@ namespace dvmconsole
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void ChannelBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) private void ChannelBox_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{ {
if (!isEditMode || !(sender is UIElement element)) return; if (settingsManager.LockWidgets || !(sender is UIElement element))
return;
draggedElement = element; draggedElement = element;
startPoint = e.GetPosition(channelsCanvas); startPoint = e.GetPosition(channelsCanvas);
@ -1418,9 +1416,9 @@ namespace dvmconsole
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void ChannelBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) private void ChannelBox_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{ {
if (!isEditMode || !isDragging || draggedElement == null) if (settingsManager.LockWidgets || !isDragging || draggedElement == null)
return; return;
Cursor = Cursors.Arrow; Cursor = Cursors.Arrow;
@ -1437,7 +1435,7 @@ namespace dvmconsole
/// <param name="e"></param> /// <param name="e"></param>
private void ChannelBox_MouseMove(object sender, MouseEventArgs e) private void ChannelBox_MouseMove(object sender, MouseEventArgs e)
{ {
if (!isEditMode || !isDragging || draggedElement == null) if (settingsManager.LockWidgets || !isDragging || draggedElement == null)
return; return;
Point currentPosition = e.GetPosition(channelsCanvas); Point currentPosition = e.GetPosition(channelsCanvas);
@ -1464,16 +1462,16 @@ namespace dvmconsole
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void SystemStatusBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) => ChannelBox_MouseLeftButtonDown(sender, e); private void SystemStatusBox_MouseRightButtonDown(object sender, MouseButtonEventArgs e) => ChannelBox_MouseRightButtonDown(sender, e);
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="sender"></param> /// <param name="sender"></param>
/// <param name="e"></param> /// <param name="e"></param>
private void SystemStatusBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) private void SystemStatusBox_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{ {
if (!isEditMode) if (settingsManager.LockWidgets)
return; return;
if (sender is SystemStatusBox systemStatusBox) if (sender is SystemStatusBox systemStatusBox)
@ -1482,7 +1480,7 @@ namespace dvmconsole
double y = Canvas.GetTop(systemStatusBox); double y = Canvas.GetTop(systemStatusBox);
settingsManager.SystemStatusPositions[systemStatusBox.SystemName] = new ChannelPosition { X = x, Y = y }; settingsManager.SystemStatusPositions[systemStatusBox.SystemName] = new ChannelPosition { X = x, Y = y };
ChannelBox_MouseLeftButtonUp(sender, e); ChannelBox_MouseRightButtonUp(sender, e);
} }
} }
@ -1493,6 +1491,13 @@ namespace dvmconsole
/// <param name="e"></param> /// <param name="e"></param>
private void SystemStatusBox_MouseMove(object sender, MouseEventArgs e) => ChannelBox_MouseMove(sender, e); private void SystemStatusBox_MouseMove(object sender, MouseEventArgs e) => ChannelBox_MouseMove(sender, e);
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AlertTone_MouseRightButtonDown(object sender, MouseButtonEventArgs e) => ChannelBox_MouseRightButtonDown(sender, e);
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -1500,16 +1505,26 @@ namespace dvmconsole
/// <param name="e"></param> /// <param name="e"></param>
private void AlertTone_MouseRightButtonUp(object sender, MouseButtonEventArgs e) private void AlertTone_MouseRightButtonUp(object sender, MouseButtonEventArgs e)
{ {
if (!isEditMode) return; if (settingsManager.LockWidgets)
return;
if (sender is AlertTone alertTone) if (sender is AlertTone alertTone)
{ {
double x = Canvas.GetLeft(alertTone); double x = Canvas.GetLeft(alertTone);
double y = Canvas.GetTop(alertTone); double y = Canvas.GetTop(alertTone);
settingsManager.UpdateAlertTonePosition(alertTone.AlertFilePath, x, y); settingsManager.UpdateAlertTonePosition(alertTone.AlertFileName, x, y);
ChannelBox_MouseRightButtonUp(sender, e);
} }
} }
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AlertTone_MouseMove(object sender, MouseEventArgs e) => ChannelBox_MouseMove(sender, e);
/** WPF Ribbon Controls */ /** WPF Ribbon Controls */
/// <summary> /// <summary>

@ -83,6 +83,11 @@ namespace dvmconsole
/// </summary> /// </summary>
public bool TogglePTTMode { get; set; } = true; public bool TogglePTTMode { get; set; } = true;
/// <summary>
/// Flag indicating channel and other widgets are locked in place.
/// </summary>
public bool LockWidgets { get; set; } = true;
/// <summary> /// <summary>
/// Flag indicating window maximized state. /// Flag indicating window maximized state.
/// </summary> /// </summary>
@ -145,6 +150,7 @@ namespace dvmconsole
AlertTonePositions = loadedSettings.AlertTonePositions ?? new Dictionary<string, ChannelPosition>(); AlertTonePositions = loadedSettings.AlertTonePositions ?? new Dictionary<string, ChannelPosition>();
ChannelOutputDevices = loadedSettings.ChannelOutputDevices ?? new Dictionary<string, int>(); ChannelOutputDevices = loadedSettings.ChannelOutputDevices ?? new Dictionary<string, int>();
TogglePTTMode = loadedSettings.TogglePTTMode; TogglePTTMode = loadedSettings.TogglePTTMode;
LockWidgets = loadedSettings.LockWidgets;
Maximized = loadedSettings.Maximized; Maximized = loadedSettings.Maximized;
DarkMode = loadedSettings.DarkMode; DarkMode = loadedSettings.DarkMode;
WindowWidth = loadedSettings.WindowWidth; WindowWidth = loadedSettings.WindowWidth;

Loading…
Cancel
Save

Powered by TurnKey Linux.