Skip to content

Commit

Permalink
�Enhance full parameter change message box
Browse files Browse the repository at this point in the history
  • Loading branch information
prathamEndu committed Sep 20, 2024
1 parent 5cc57b0 commit 296f62f
Showing 1 changed file with 88 additions and 53 deletions.
141 changes: 88 additions & 53 deletions GCSViews/ConfigurationView/ConfigRawParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,86 +266,121 @@ private void BUT_writePIDS_Click(object sender, EventArgs e)
int error = 0;
bool reboot = false;

// List to track successfully saved parameters
List<string> savedParams = new List<string>();

foreach (string value in temp)
if (temp.Count > 0 && temp.Count <= 20)
{
try
{
if (MainV2.comPort.BaseStream == null || !MainV2.comPort.BaseStream.IsOpen)
{
CustomMessageBox.Show("Your are not connected", Strings.ERROR);
return;
}

// Get the previous value of the param to display in 'param change info'
// (a better way would be to get the value somewhere from inside the code, insted of demanding it from mavlink)
string previousValue = MainV2.comPort.MAV.param[value].ToString();
// new value of param
double newValue = (double)_changes[value];
// List to track successfully saved parameters
List<string> savedParams = new List<string>();

MainV2.comPort.setParam(value, newValue);

// Add the parameter, previous and new values to the list for 'param change info'
// remember, the 'value' here is key of param, while prev and new are actual values of param
savedParams.Add($"{savedParams.Count + 1}) {value} : {previousValue} -> {newValue}");

//check if reboot required
if (ParameterMetaDataRepository.GetParameterRebootRequired(value, MainV2.comPort.MAV.cs.firmware.ToString()))
{
reboot = true;
}
foreach (string value in temp)
{
try
{
// set control as well
var textControls = Controls.Find(value, true);
if (textControls.Length > 0)
if (MainV2.comPort.BaseStream == null || !MainV2.comPort.BaseStream.IsOpen)
{
ThemeManager.ApplyThemeTo(textControls[0]);
CustomMessageBox.Show("You are not connected", Strings.ERROR);
return;
}

// Get the previous value of the param to display in 'param change info'
// (a better way would be to get the value somewhere from inside the code, insted of recieving it over mavlink)
string previousValue = MainV2.comPort.MAV.param[value].ToString();
// new value of param
double newValue = (double)_changes[value];

// Add the parameter, previous and new values to the list for 'param change info'
// remember, the 'value' here is key of param, while prev and new are actual values of param
savedParams.Add($"{savedParams.Count + 1}) {value} : {previousValue} -> {newValue}");
}
catch
{
error++;
CustomMessageBox.Show("Read " + value + " Failed");
}
}

if (error == 0)
{
// Join the saved parameters list to a string
string savedParamsMessage = string.Join(Environment.NewLine, savedParams);

// Ask the user for confirmation showing detailed changes
if (CustomMessageBox.Show($"You are about to change {savedParams.Count} parameters. Please review the changes below:\n\n{savedParamsMessage}\n\nDo you want to proceed?", "Confirm Parameter Changes",
CustomMessageBox.MessageBoxButtons.YesNo, CustomMessageBox.MessageBoxIcon.Information) !=
CustomMessageBox.DialogResult.Yes)
return;
}
}
else
{
// Ask the user for confirmation without listing individual changes
if (CustomMessageBox.Show($"You are about to change {temp.Count} parameters. Are you sure you want to proceed?", "Confirm Parameter Changes",
CustomMessageBox.MessageBoxButtons.YesNo, CustomMessageBox.MessageBoxIcon.Information) !=
CustomMessageBox.DialogResult.Yes)
return;
}

if (error == 0)
{
foreach (string value in temp)
{
try
{
// set param table as well
foreach (DataGridViewRow row in Params.Rows)
if (MainV2.comPort.BaseStream == null || !MainV2.comPort.BaseStream.IsOpen)
{
if (row.Cells[Command.Index].Value.ToString() == value)
CustomMessageBox.Show("Your are not connected", Strings.ERROR);
return;
}

MainV2.comPort.setParam(value, (double)_changes[value]);

//check if reboot required
if (ParameterMetaDataRepository.GetParameterRebootRequired(value, MainV2.comPort.MAV.cs.firmware.ToString()))
{
reboot = true;
}
try
{
// set control as well
var textControls = Controls.Find(value, true);
if (textControls.Length > 0)
{
row.Cells[Value.Index].Style.BackColor = ThemeManager.ControlBGColor;
_changes.Remove(value);
break;
ThemeManager.ApplyThemeTo(textControls[0]);
}
}
catch
{
}

try
{
// set param table as well
foreach (DataGridViewRow row in Params.Rows)
{
if (row.Cells[Command.Index].Value.ToString() == value)
{
row.Cells[Value.Index].Style.BackColor = ThemeManager.ControlBGColor;
_changes.Remove(value);
break;
}
}
}
catch
{
}
}
catch
{
error++;
CustomMessageBox.Show("Set " + value + " Failed");
}
}
catch
{
error++;
CustomMessageBox.Show("Set " + value + " Failed");
}
}

if (error > 0)
CustomMessageBox.Show("Not all parameters successfully saved.", "Saved");
else
{
// Join the saved parameters list to a string
string savedParamsMessage = string.Join(Environment.NewLine, savedParams);

if (savedParams.Count > 0)
CustomMessageBox.Show($"{savedParams.Count} parameters successfully saved : \n\n{savedParamsMessage}", "Saved");
else
CustomMessageBox.Show($"No parameter saved.", "Saved");
}

CustomMessageBox.Show($"{temp.Count} parameters successfully saved.", "Saved");

//Check if reboot is required
if (reboot)
{
Expand Down

1 comment on commit 296f62f

@prathamEndu
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a separate confirmation box instead of showing the changed param details after changes are done.
Showing parameter details for only upto 20 params (prev and curr values), any more and only the count will be shown in the confirmation box.

Please sign in to comment.