This repository has been archived on 2023-01-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cad/ref/xcad-examples/IssuesManager/cs/IssuesManager/IssuesManagerController.cs
T
2022-10-15 19:16:08 +02:00

103 lines
3.2 KiB
C#

using XCad.Examples.IssuesManager.Properties;
using XCad.Examples.IssuesManager.ViewModels;
using XCad.Examples.IssuesManager.Views;
using Xarial.XCad.Base.Attributes;
using Xarial.XCad.UI.TaskPane.Attributes;
using Xarial.XCad.UI.TaskPane.Enums;
using Xarial.XCad.Extensions;
using Xarial.XCad.Base.Enums;
using Xarial.XCad.Documents;
using System;
using Xarial.XCad.UI;
using System.Linq;
namespace XCad.Examples.IssuesManager
{
public class IssuesManagerController : IDisposable
{
[Icon(typeof(Resources), nameof(Resources.issues_icon))]
[Title("Issues Manager")]
private enum IssuesMgrCommands_e
{
[Icon(typeof(Resources), nameof(Resources.new_issue_icon))]
[Title("Create New Issue")]
CreateNewIssue,
[TaskPaneStandardIcon(TaskPaneStandardIcons_e.Close)]
[Title("Remove Selected Issue")]
RemoveIssue
}
private IssuesControl m_IssuesControl;
private readonly IXExtension m_Ext;
private readonly IXEnumTaskPane<IssuesControl, IssuesMgrCommands_e> m_TaskPane;
public IssuesManagerController(IXExtension ext)
{
m_Ext = ext;
m_Ext.Application.Documents.RegisterHandler<IssuesDocument>();
m_Ext.Application.Documents.DocumentCreated += OnDocumentCreated;
m_TaskPane = m_Ext.CreateTaskPane<IssuesControl, IssuesMgrCommands_e>();
m_IssuesControl = m_TaskPane.Control;
m_TaskPane.ButtonClick += OnTaskPaneButtonClick;
}
private void OnDocumentCreated(IXDocument doc)
{
var issuesDoc = m_Ext.Application.Documents.GetHandler<IssuesDocument>(doc);
issuesDoc.Destroyed += OnIssuesDocDestroyed;
issuesDoc.ShowIssues += OnShowIssues;
}
private void OnTaskPaneButtonClick(IssuesMgrCommands_e spec)
{
var activeDoc = m_Ext.Application.Documents.Active;
if (activeDoc != null)
{
var issuesDoc = m_Ext.Application.Documents.GetHandler<IssuesDocument>(activeDoc);
switch (spec)
{
case IssuesMgrCommands_e.CreateNewIssue:
issuesDoc.CreateNewIssue();
break;
case IssuesMgrCommands_e.RemoveIssue:
issuesDoc.RemoveActiveIssue();
break;
}
}
else
{
m_Ext.Application.ShowMessageBox("Open the model",
MessageBoxIcon_e.Error,
MessageBoxButtons_e.Ok);
}
}
private void OnIssuesDocDestroyed(IssuesDocument docHandler)
{
//destroying last document
if (!m_Ext.Application.Documents.Any())
{
m_IssuesControl.DataContext = null;
}
}
private void OnShowIssues(IssuesVM issues)
{
m_IssuesControl.DataContext = issues;
}
public void Dispose()
{
m_Ext.Application.Documents.DocumentCreated -= OnDocumentCreated;
m_TaskPane.ButtonClick -= OnTaskPaneButtonClick;
}
}
}