@ -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 Toggle EditMode _Click( object sender , RoutedEventArgs e )
private void Toggle LockWidgets _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_Mouse Lef tButtonDown( object sender , MouseButtonEventArgs e )
private void ChannelBox_Mouse Righ tButtonDown( 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_Mouse Lef tButtonUp( object sender , MouseButtonEventArgs e )
private void ChannelBox_Mouse Righ tButtonUp( 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_Mouse Lef tButtonDown( object sender , MouseButtonEventArgs e ) = > ChannelBox_Mouse Lef tButtonDown( sender , e ) ;
private void SystemStatusBox_Mouse Righ tButtonDown( object sender , MouseButtonEventArgs e ) = > ChannelBox_Mouse Righ tButtonDown( 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_Mouse Lef tButtonUp( object sender , MouseButtonEventArgs e )
private void SystemStatusBox_Mouse Righ tButtonUp( 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_Mouse Lef tButtonUp( sender , e ) ;
ChannelBox_Mouse Righ tButtonUp( 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>