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

[Interproject exchange] Fix remove and restore advanced model #1518

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 57 additions & 60 deletions src/InterprojectExchange/Forms/InterprojectExchangeForm.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public InterprojectExchangeForm()
/// <summary>
/// Индекс предыдущего выбранного проекта в <see cref="advProjNameComboBox"/>
/// </summary>
private int prevSelectedIndex = 0;
private int advProjPrevSelectedIndex = 0;

/// <summary>
/// Шрифт для <see cref="advProjNameComboBox"/>
Expand Down Expand Up @@ -849,47 +849,32 @@ private void delAdvProjButton_Click(object sender, EventArgs e)
{
bool canDelete = advProjNameComboBox.Items.Count > 0 &&
advProjNameComboBox.SelectedIndex > -1;
if (canDelete)
{
string projName = advProjNameComboBox.Text;
string message = $"Удалить обмен с проектом \"{projName}\".";
DialogResult delete = ShowWarningMessage(message,
MessageBoxButtons.YesNo);
if (delete == DialogResult.No)
{
return;
}

try
{
interprojectExchange.DeleteExchangeWithProject(projName);
}
catch (Exception exception)
{
ShowErrorMessage(exception.Message);
return;
}
if (!canDelete)
return;

int selectedIndex = advProjNameComboBox.Items.IndexOf(projName);
advProjNameComboBox.Items.Remove(projName);
if(advProjNameComboBox.Items.Count > 0)
{
if(selectedIndex > 0)
{
// Выбрать элемент из списка повыше
advProjNameComboBox.SelectedIndex = selectedIndex - 1;
}
else
{
advProjNameComboBox.SelectedIndex = selectedIndex;
}
}
else
{
advancedProjSignalsList.Items.Clear();
bindedSignalsList.Items.Clear();
}
string projName = advProjNameComboBox.Text;
string message = $"Удалить обмен с проектом \"{projName}\".";

if (DialogResult.No == ShowWarningMessage(message, MessageBoxButtons.YesNo))
return;

try
{
interprojectExchange.DeleteExchangeWithProject(projName);
}
catch (Exception exception)
{
ShowErrorMessage(exception.Message);
return;
}


advProjNameComboBox.Items.Remove(projName);
advProjPrevSelectedIndex = 0;
advProjNameComboBox.SelectedIndex = 0;

bindedSignalsList.Items.Clear();
}

/// <summary>
Expand Down Expand Up @@ -982,16 +967,24 @@ private void advProjNameComboBox_SelectedItemChanged(object sender,

var model = interprojectExchange.GetModel(advProjNameComboBox.Items[selectedIndex].ToString());

if (selectedIndex == 0 && advProjPrevSelectedIndex == 0)
{
interprojectExchange.SelectModel(new AdvancedProjectModel());
advProjItems.Clear();
RefilterListViews(true);
return;
}

if (selectedIndex >= 0 &&
selectedIndex != prevSelectedIndex &&
selectedIndex != advProjPrevSelectedIndex &&
model?.Loaded is true)
{
LoadAdvProjData(advProjNameComboBox.Text);
prevSelectedIndex = selectedIndex;
advProjPrevSelectedIndex = selectedIndex;
}
else
{
advProjNameComboBox.SelectedIndex = prevSelectedIndex;
advProjNameComboBox.SelectedIndex = advProjPrevSelectedIndex;
}
}

Expand All @@ -1003,26 +996,27 @@ private void LoadAdvProjData(string projName)
{
advProjItems.Clear();
IProjectModel model = interprojectExchange.GetModel(projName);
if (!model.Selected)

if (model.Selected)
return;

List<DeviceInfo> devices = model.Devices;
foreach (var devInfo in devices)
{
List<DeviceInfo> devices = model.Devices;
foreach (var devInfo in devices)
{
var info = new string[]
{
devInfo.Name,
devInfo.Description
};
var item = new ListViewItem(info);
item.Tag = devInfo.Type;
advProjItems.Add(item);
}
interprojectExchange.SelectModel(model);
var info = new string[]
{
devInfo.Name,
devInfo.Description
};
var item = new ListViewItem(info);
item.Tag = devInfo.Type;
advProjItems.Add(item);
}
interprojectExchange.SelectModel(model);

ReloadListViewWithSignals();
bool hardRefilter = true;
RefilterListViews(hardRefilter);
}
ReloadListViewWithSignals();
bool hardRefilter = true;
RefilterListViews(hardRefilter);
}

/// <summary>
Expand Down Expand Up @@ -1137,6 +1131,9 @@ private void saveButton_Click(object sender, EventArgs e)
/// </summary>
private void advProjNameComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0 || e.Index > advProjNameComboBox.Items.Count)
return;

var model = interprojectExchange.GetModel(advProjNameComboBox.Items[e.Index].ToString());

if (model?.Loaded is false) //We are disabling item based on Index, you can have your logic here
Expand Down