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

Fixes #2053 save selected classification folder #2054

Merged
Show file tree
Hide file tree
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
21 changes: 15 additions & 6 deletions src/OSPSuite.Presentation/Presenters/AbstractExplorerPresenter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,12 @@ ITreeNode AddSubjectToClassifyToTree<TSubject, TClassifiable>(TSubject subject,
/// Ensure that the last selected classification is reset
/// </summary>
void ResetActiveClassification();

/// <summary>
/// This is called whenever a node is selected
/// </summary>
/// <param name="node"></param>
void NodeClick(ITreeNode node);
}

public abstract class AbstractExplorerPresenter<TView, TPresenter> : AbstractPresenter<TView, TPresenter>, IExplorerPresenter
Expand Down Expand Up @@ -211,14 +217,19 @@ private void addClassifiableUnderActiveClassification(IClassifiable classifiable
//we add it under the active classification
if ((_activeClassification?.ClassificationType == classifiable.ClassificationType) && classifiable.Parent == null)
classifiable.Parent = _activeClassification;

//In all cases, we reset the active classification
ResetActiveClassification();
}

public void ResetActiveClassification() => SetActiveClassification(null);

protected void SetActiveClassification(IClassification classification) =>_activeClassification = classification;
public virtual void NodeClick(ITreeNode node)
{
if (node is ClassificationNode classificationNode)
SetActiveClassification(classificationNode.Tag);
else
ResetActiveClassification();
}

protected void SetActiveClassification(IClassification classification) => _activeClassification = classification;

public virtual void CreateClassificationUnder(ITreeNode<IClassification> parentClassificationNode)
{
Expand All @@ -236,7 +247,6 @@ public override void Initialize()

public virtual void RemoveNodeFor(IWithId objectWithId)
{
ResetActiveClassification();
var node = NodeFor(objectWithId);
if (node == null) return;
_view.DestroyNode(node);
Expand Down Expand Up @@ -294,7 +304,6 @@ public virtual void NodeDoubleClicked(ITreeNode node)
public virtual void RemoveClassification(ITreeNode<IClassification> nodeToRemove)
{
_classificationPresenter.RemoveClassification(nodeToRemove);
ResetActiveClassification();
}

public virtual void RemoveChildrenClassifications(ITreeNode<IClassification> parentClassificationNode, bool removeParent = false, bool removeData = false)
Expand Down
9 changes: 5 additions & 4 deletions src/OSPSuite.UI/Views/BaseExplorerView.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,16 +104,17 @@ private void nodeClick(MouseEventArgs e, ITreeNode selectedNode)
//when a node is clicked, we reset the active classification. This ensures that there is no
// active classification hanging around for too long. Application will be responsible to set the active classification
// where required
_presenter.ResetActiveClassification();
_presenter.NodeClick(selectedNode);

//this call may reset the current selection of node
manageSelectedNodes(selectedNode, canClearSelection);

if (!showingPopup)
return;

var currentlySelectedNode = selectedNodes;
if (currentlySelectedNode.Count > 1)
_presenter.CreatePopupMenuFor(currentlySelectedNode).At(e.Location);
var currentlySelectedNodes = selectedNodes;
if (currentlySelectedNodes.Count > 1)
_presenter.CreatePopupMenuFor(currentlySelectedNodes).At(e.Location);
else
_presenter.CreatePopupMenuFor(selectedNode).At(e.Location);
}
Expand Down