Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance full parameter change message box #3412

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
119 changes: 89 additions & 30 deletions GCSViews/ConfigurationView/ConfigRawParams.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,63 +266,122 @@ private void BUT_writePIDS_Click(object sender, EventArgs e)
int error = 0;
bool reboot = false;

foreach (string value in temp)
if (temp.Count > 0 && temp.Count <= 20)
prathamEndu marked this conversation as resolved.
Show resolved Hide resolved
{
try
{
if (MainV2.comPort.BaseStream == null || !MainV2.comPort.BaseStream.IsOpen)
{
CustomMessageBox.Show("Your are not connected", Strings.ERROR);
return;
}
// List to track successfully saved parameters
List<string> savedParams = new List<string>();

MainV2.comPort.setParam(value, (double)_changes[value]);
//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 if (temp.Count > 20)
{
// 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)
{
ThemeManager.ApplyThemeTo(textControls[0]);
}
}
catch
{
}

try
{
// set param table as well
foreach (DataGridViewRow row in Params.Rows)
{
row.Cells[Value.Index].Style.BackColor = ThemeManager.ControlBGColor;
_changes.Remove(value);
break;
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 if (temp.Count>0)
CustomMessageBox.Show($"{temp.Count} parameters successfully saved.", "Saved");
else
CustomMessageBox.Show("Parameters successfully saved.", "Saved");
CustomMessageBox.Show($"No parameters were changed.", "No changes");
prathamEndu marked this conversation as resolved.
Show resolved Hide resolved

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