public override void Start()
        {
            _xmlValidationManager = XmlValidationManager.Instance;

            // try to load existing rules
            // if this fails, an exception will be thrown, preventing this component from starting
            var rules = CollectionUtils.Map(_xmlValidationManager.GetRules(_applicationComponentClass),
                                            (XmlElement node) => new Rule(node.OuterXml, _liveComponent));

            _rules.Items.AddRange(rules);

            _componentProperties = CollectionUtils.Select(_applicationComponentClass.GetProperties(),
                                                          p => !p.DeclaringType.Equals(typeof(IApplicationComponent)) &&
                                                          !p.DeclaringType.Equals(typeof(ApplicationComponent)));

            _rulesActionModel = new CrudActionModel(true, false, true);
            _rulesActionModel.Add.SetClickHandler(AddNewRule);
            _rulesActionModel.Delete.SetClickHandler(DeleteSelectedRule);
            _rulesActionModel.Delete.Enabled = false;

            _editor          = CodeEditorFactory.CreateCodeEditor();
            _editor.Language = "xml";

            _editorHost = new ChildComponentHost(this.Host, _editor.GetComponent());
            _editorHost.StartComponent();

            base.Start();
        }
Example #2
0
        public override void Start()
        {
            // create the diff component
            _diffComponentHost = new ChildComponentHost(this.Host, _diffComponent = new PatientProfileDiffComponent());
            _diffComponentHost.StartComponent();

            // add all target profiles - ensure the initially selected one is at the top of the list
            _targetProfileTable = new PatientProfileTable();
            _targetProfileTable.Items.Add(_selectedTargetProfile);
            foreach (var profile in _targetProfiles)
            {
                if (!profile.PatientProfileRef.Equals(_selectedTargetProfile.PatientProfileRef, true))
                {
                    _targetProfileTable.Items.Add(profile);
                }
            }

            _reconciliationProfileTable = new ReconciliationCandidateTable();
            foreach (var match in _candidates)
            {
                var entry = new ReconciliationCandidateTableEntry(match);
                entry.CheckedChanged += CandidateCheckedChangedEventHandler;
                _reconciliationProfileTable.Items.Add(entry);
            }

            base.Start();
        }
        public override void Start()
        {
            _orderNoteComponent      = new OrderNoteSummaryComponent(OrderNoteCategory.General);
            _orderNotesComponentHost = new ChildComponentHost(this.Host, _orderNoteComponent);
            _orderNotesComponentHost.StartComponent();
            _orderNoteComponent.Notes = _context.OrderNotes;

            _protocolSummaryComponentHost = new ChildComponentHost(this.Host, new ProtocolSummaryComponent(_context));
            _protocolSummaryComponentHost.StartComponent();

            _rightHandComponentContainer = new TabComponentContainer();
            _orderAttachmentsComponent   = new AttachedDocumentPreviewComponent(true, AttachmentSite.Order)
            {
                OrderRef = _context.OrderRef
            };
            _rightHandComponentContainer.Pages.Add(new TabPage(SR.TitleOrderAttachments, _orderAttachmentsComponent));

            // instantiate all extension pages
            foreach (IPerformingDocumentationOrderDetailsPageProvider pageProvider in new PerformingDocumentationOrderDetailsPageProviderExtensionPoint().CreateExtensions())
            {
                _extensionPages.AddRange(pageProvider.GetPages(new PerformingDocumentationOrderDetailsContext(this)));
            }

            // add extension pages to container and set initial context
            // the container will start those components if the user goes to that page
            foreach (var page in _extensionPages)
            {
                _rightHandComponentContainer.Pages.Add(new TabPage(page.Path, page.GetComponent()));
            }

            _rightHandComponentContainerHost = new ChildComponentHost(this.Host, _rightHandComponentContainer);
            _rightHandComponentContainerHost.StartComponent();

            base.Start();
        }
Example #4
0
        public override void Start()
        {
            _worklistPrintPreviewComponent     = new WorklistPrintViewComponent(_printContext);
            _worklistPrintPreviewComponentHost = new ChildComponentHost(this.Host, _worklistPrintPreviewComponent);
            _worklistPrintPreviewComponentHost.StartComponent();

            base.Start();
        }
        public override void Start()
        {
            _reportViewComponentHost = new ChildComponentHost(this.Host, new ReportViewComponent(this));
            _reportViewComponentHost.StartComponent();

            UpdateReportList();

            base.Start();
        }
Example #6
0
        public override void Start()
        {
            _profileViewComponent     = new ProfileViewComponent();
            _profileViewComponentHost = new ChildComponentHost(this.Host, _profileViewComponent);
            _profileViewComponentHost.StartComponent();

            LoadPatientProfile();

            base.Start();
        }
        public override void Start()
        {
            _visitDetailComponent     = new BiographyVisitDetailViewComponent();
            _visitDetailComponentHost = new ChildComponentHost(this.Host, _visitDetailComponent);
            _visitDetailComponentHost.StartComponent();

            LoadVisits();

            base.Start();
        }
Example #8
0
        /// <summary>
        /// Called by the host to initialize the application component.
        /// </summary>
        public override void Start()
        {
            _reportPreviewComponent     = new ReportPreviewComponent(null);
            _reportPreviewComponentHost = new ChildComponentHost(this.Host, _reportPreviewComponent);
            _reportPreviewComponentHost.StartComponent();

            RefreshComponent();

            _toolSet = new ToolSet(new BiographyOrderReportsToolExtensionPoint(), new BiographyOrderReportsToolContext(this));

            base.Start();
        }
        /// <summary>
        /// Called by the host to initialize the application component.
        /// </summary>
        public override void Start()
        {
            // init lookup handlers
            _cannedTextLookupHandler = new CannedTextLookupHandler(this.Host.DesktopWindow);

            // init recip table here, and not in constructor, because it relies on Host being set
            _recipients = new RecipientTable(this);

            // if exactly 1 template choice, then it is selected
            _selectedTemplate = _templateChoices.Count == 1 ? _templateChoices[0] : null;

            // create soft keys
            UpdateSoftKeys();

            // load the existing conversation, plus editor form data
            GetConversationEditorFormDataResponse formDataResponse = null;

            Platform.GetService <IOrderNoteService>(
                service =>
            {
                var formDataRequest = new GetConversationEditorFormDataRequest(
                    _selectedTemplate != null ? _selectedTemplate.GetStaffRecipients() : new List <string>(),
                    _selectedTemplate != null ? _selectedTemplate.GetGroupRecipients() : new List <string>());
                formDataResponse = service.GetConversationEditorFormData(formDataRequest);

                var request  = new GetConversationRequest(_orderRef, new List <string>(_orderNoteCategories), false);
                var response = service.GetConversation(request);

                _orderRef   = response.OrderRef;
                _orderNotes = response.OrderNotes;
            });


            // init on-behalf of choices
            _onBehalfOfChoices = formDataResponse.OnBehalfOfGroupChoices;
            _onBehalfOfChoices.Insert(0, _emptyStaffGroup);

            // initialize from template (which may be null)
            InitializeFromTemplate(_selectedTemplate, formDataResponse.RecipientStaffs, formDataResponse.RecipientStaffGroups);

            // build the action model
            _recipientsActionModel = new CrudActionModel(true, false, true, new ResourceResolver(this.GetType(), true));
            _recipientsActionModel.Add.SetClickHandler(AddRecipient);
            _recipientsActionModel.Delete.SetClickHandler(DeleteRecipient);

            // init conversation view component
            _orderNoteViewComponent = new OrderNoteViewComponent(_orderNotes);
            _orderNoteViewComponent.CheckedItemsChanged += delegate { NotifyPropertyChanged("CompleteButtonLabel"); };
            _orderNotesComponentHost = new ChildComponentHost(this.Host, _orderNoteViewComponent);
            _orderNotesComponentHost.StartComponent();

            base.Start();
        }
Example #10
0
        /// <summary>
        /// Called by the host to initialize the application component.
        /// </summary>
        public override void Start()
        {
            _cannedTextLookupHandler = new CannedTextLookupHandler(this.Host.DesktopWindow);

            LoadOrCreateReportContent();

            _previewComponent.SetUrl(this.PreviewUrl);
            _previewHost = new ChildComponentHost(this.Host, _previewComponent);
            _previewHost.StartComponent();

            _context.WorklistItemChanged += WorklistItemChangedEventHandler;

            base.Start();
        }
        public override void Start()
        {
            _mergedOrderViewComponentContainer = new TabComponentContainer();
            _mergedOrderPreviewComponentHost   = new ChildComponentHost(this.Host, _mergedOrderViewComponentContainer);
            _mergedOrderPreviewComponentHost.StartComponent();

            _mergedOrderViewComponentContainer.Pages.Add(new TabPage(SR.TitleOrder, _orderPreviewComponent = new MergedOrderDetailViewComponent()));
            _mergedOrderViewComponentContainer.Pages.Add(new TabPage(SR.TitleOrderAttachments, _attachmentSummaryComponent = new AttachedDocumentPreviewComponent(true, AttachmentSite.Order)));

            // instantiate all extension pages
            foreach (IMergeOrdersPageProvider pageProvider in new MergeOrdersPageProviderExtensionPoint().CreateExtensions())
            {
                _extensionPages.AddRange(pageProvider.GetPages(_extensionPageContext));
            }

            // add extension pages to container and set initial context
            // the container will start those components if the user goes to that page
            foreach (var page in _extensionPages)
            {
                _mergedOrderViewComponentContainer.Pages.Add(new TabPage(page.Path, page.GetComponent()));
            }

            // Load form data
            Platform.GetService(
                delegate(IBrowsePatientDataService service)
            {
                var request = new GetDataRequest {
                    GetOrderDetailRequest = new GetOrderDetailRequest()
                };

                foreach (var orderRef in _orderRefs)
                {
                    request.GetOrderDetailRequest.OrderRef = orderRef;
                    var response = service.GetData(request);
                    _ordersTable.Items.Add(response.GetOrderDetailResponse.Order);
                }
            });

            _ordersTable.Sort();

            // Re-populate orderRef list by sorted accession number
            _orderRefs.Clear();
            _orderRefs.AddRange(CollectionUtils.Map <OrderDetail, EntityRef>(_ordersTable.Items, item => item.OrderRef));

            _selectedOrder = CollectionUtils.FirstElement(_ordersTable.Items);
            DryRunForSelectedOrder();

            base.Start();
        }
        public override void Start()
        {
            // Create component for each tab
            _bannerComponent       = new BannerComponent();
            _orderHistoryComponent = new BiographyOrderHistoryComponent(_initialSelectedOrderRef)
            {
                PatientRef = _patientRef
            };
            _demographicComponent = new BiographyDemographicComponent {
                DefaultProfileRef = _profileRef, PatientRef = _patientRef
            };
            _documentComponent = new AttachedDocumentPreviewComponent(true, AttachmentSite.Patient);
            _noteComponent     = new BiographyNoteComponent();
            _allergyComponent  = new PatientAllergiesComponent();

            // Create tab and tab groups
            _pagesContainer = new TabComponentContainer();
            _pagesContainer.Pages.Add(new TabPage(SR.TitleOrders, _orderHistoryComponent));

            if (new WorkflowConfigurationReader().EnableVisitWorkflow)
            {
                _visitHistoryComponent = new BiographyVisitHistoryComponent {
                    PatientRef = _patientRef
                };
                _pagesContainer.Pages.Add(new TabPage(SR.TitleVisits, _visitHistoryComponent));
            }

            _pagesContainer.Pages.Add(new TabPage(SR.TitleDemographicProfiles, _demographicComponent));
            _pagesContainer.Pages.Add(new TabPage(SR.TitlePatientAttachments, _documentComponent));
            _pagesContainer.Pages.Add(new TabPage(SR.TitlePatientNotes, _noteComponent));
            //_pagesContainer.Pages.Add(new TabPage(SR.TitlePatientAllergies, _allergyComponent));

            var tabGroupContainer = new TabGroupComponentContainer(LayoutDirection.Horizontal);

            tabGroupContainer.AddTabGroup(new TabGroup(_pagesContainer, 1.0f));

            _contentComponentHost = new ChildComponentHost(this.Host, tabGroupContainer);
            _contentComponentHost.StartComponent();

            _bannerComponentHost = new ChildComponentHost(this.Host, _bannerComponent);
            _bannerComponentHost.StartComponent();

            _toolSet = new ToolSet(new PatientBiographyToolExtensionPoint(), new PatientBiographyToolContext(this));

            LoadPatientProfile();

            base.Start();
        }
Example #13
0
        /// <summary>
        /// Called by the host to initialize the application component.
        /// </summary>
        public override void Start()
        {
            this.Validation.Add(new ValidationRule("Supervisor",
                                                   delegate
            {
                var ok = _supervisor != null || SubmitForReviewVisible == false;
                return(new ValidationResult(ok, SR.MessageChooseRadiologist));
            }));

            //// create supervisor lookup handler, using filters supplied in application settings
            var filters    = TranscriptionSettings.Default.SupervisorStaffTypeFilters;
            var staffTypes = string.IsNullOrEmpty(filters)
                                ? new string[] { }
                                : CollectionUtils.Map <string, string>(filters.Split(','), s => s.Trim()).ToArray();

            _supervisorLookupHandler = new StaffLookupHandler(this.Host.DesktopWindow, staffTypes);

            StartTranscribingWorklistItem();

            _bannerHost = new ChildComponentHost(this.Host, new BannerComponent(this.WorklistItem));
            _bannerHost.StartComponent();

            _rightHandComponentContainer = new TabComponentContainer
            {
                ValidationStrategy = new AllComponentsValidationStrategy()
            };

            _orderComponent = new ReportingOrderDetailViewComponent(this.WorklistItem.PatientRef, this.WorklistItem.OrderRef);
            _rightHandComponentContainer.Pages.Add(new TabPage("Order", _orderComponent));

            _rightHandComponentContainerHost = new ChildComponentHost(this.Host, _rightHandComponentContainer);
            _rightHandComponentContainerHost.StartComponent();

            // check for a report editor provider.  If not found, use the default one
            var transcriptionEditorProvider = CollectionUtils.FirstElement <ITranscriptionEditorProvider>(
                new TranscriptionEditorProviderExtensionPoint().CreateExtensions());

            _transcriptionEditor = transcriptionEditorProvider == null
                                ? new TranscriptionEditorComponent(new TranscriptionEditorContext(this))
                                : transcriptionEditorProvider.GetEditor(new TranscriptionEditorContext(this));
            _transcriptionEditorHost = new ChildComponentHost(this.Host, _transcriptionEditor.GetComponent());
            _transcriptionEditorHost.StartComponent();
            _transcriptionEditorHost.Component.ModifiedChanged += ((sender, args) => this.Modified = this.Modified || _transcriptionEditorHost.Component.Modified);

            base.Start();
        }
Example #14
0
        public override void Start()
        {
            StartProtocollingWorklistItem();

            this.Host.Title = ProtocolDocument.GetTitle(this.WorklistItem);

            _bannerComponentHost = new ChildComponentHost(this.Host, new BannerComponent(this.WorklistItem));
            _bannerComponentHost.StartComponent();

            _orderNotesComponentHost = new ChildComponentHost(this.Host, new OrderNoteSummaryComponent(OrderNoteCategory.Protocol, this.SaveEnabled));
            _orderNotesComponentHost.StartComponent();
            ((OrderNoteSummaryComponent)_orderNotesComponentHost.Component).Notes = _notes;
            _orderNotesComponentHost.Component.ModifiedChanged += ((sender, args) =>
                                                                   this.Modified = this.Modified || _orderNotesComponentHost.Component.Modified);

            _protocolEditorComponentHost = new ChildComponentHost(this.Host, new ProtocolEditorComponent(this.WorklistItem));
            _protocolEditorComponentHost.StartComponent();
            ((ProtocolEditorComponent)_protocolEditorComponentHost.Component).CanEdit = this.SaveEnabled;
            _protocolEditorComponentHost.Component.ModifiedChanged += ((sender, args) =>
                                                                       this.Modified = this.Modified || _protocolEditorComponentHost.Component.Modified);

            _rightHandComponentContainer = new TabComponentContainer();

            _orderDetailViewComponent = new ProtocollingOrderDetailViewComponent(this.WorklistItem.PatientRef, this.WorklistItem.OrderRef);
            _rightHandComponentContainer.Pages.Add(new TabPage(SR.TitleOrder, _orderDetailViewComponent));

            _orderAttachmentsComponent          = new AttachedDocumentPreviewComponent(true, AttachmentSite.Order);
            _orderAttachmentsComponent.OrderRef = this.WorklistItem.OrderRef;
            _rightHandComponentContainer.Pages.Add(new TabPage(SR.TitleOrderAttachments, _orderAttachmentsComponent));

            _additionalInfoComponent = new OrderAdditionalInfoComponent(true);
            _additionalInfoComponent.OrderExtendedProperties = _orderDetail.ExtendedProperties;
            _additionalInfoComponent.Context = new OrderAdditionalInfoComponent.HealthcareContext(this.WorklistItem.OrderRef);
            _rightHandComponentContainer.Pages.Add(new TabPage(SR.TitleAdditionalInfo, _additionalInfoComponent));

            _rightHandComponentContainer.Pages.Add(new TabPage(SR.TitlePriors, _priorReportsComponent = new PriorReportComponent(this.WorklistItem)));

            _rightHandComponentContainerHost = new ChildComponentHost(this.Host, _rightHandComponentContainer);
            _rightHandComponentContainerHost.StartComponent();

            SetInitialProtocollingTabPage();

            base.Start();
        }
Example #15
0
        /// <summary>
        /// Called by the host to initialize the application component.
        /// </summary>
        public override void Start()
        {
            _procedureTable = new Table <ProcedureDetail>();
            _procedureTable.Columns.Add(new TableColumn <ProcedureDetail, string>("Procedure",
                                                                                  delegate(ProcedureDetail item) { return(Formatting.ProcedureFormat.Format(item)); }));

            _procedureViewComponentHost = new ChildComponentHost(this.Host, new ProcedureViewComponent(this));
            _procedureViewComponentHost.StartComponent();

            Platform.GetService <IBrowsePatientDataService>(
                delegate(IBrowsePatientDataService service)
            {
                GetDataRequest request        = new GetDataRequest();
                request.GetOrderDetailRequest = new GetOrderDetailRequest(_orderRef, false, true, false, false, false, false);
                GetDataResponse response      = service.GetData(request);
                _procedureTable.Items.AddRange(response.GetOrderDetailResponse.Order.Procedures);
            });

            base.Start();
        }
        public override void Start()
        {
            _delaySelectionTimer = new Timer(state => SetSelectedOrder(state as EntityRef), _initialSelectedOrderRef, 250);

            _orderDetailComponent   = new BiographyOrderDetailViewComponent();
            _visitDetailComponent   = new BiographyVisitDetailViewComponent();
            _orderReportsComponent  = new BiographyOrderReportsComponent();
            _orderDocumentComponent = new AttachedDocumentPreviewComponent(true, AttachmentSite.Order);

            _rightHandComponentContainer = new TabComponentContainer();
            _rightHandComponentContainer.Pages.Add(new TabPage("Order Details", _orderDetailComponent));

            if (new WorkflowConfigurationReader().EnableVisitWorkflow)
            {
                _rightHandComponentContainer.Pages.Add(new TabPage("Visit Details", _visitDetailComponent));
            }

            _rightHandComponentContainer.Pages.Add(new TabPage("Reports", _orderReportsComponent));
            _rightHandComponentContainer.Pages.Add(new TabPage("Order Attachments", _orderDocumentComponent));

            // instantiate all extension pages
            _extensionPages = new List <IBiographyOrderHistoryPage>();
            foreach (IBiographyOrderHistoryPageProvider pageProvider in new BiographyOrderHistoryPageProviderExtensionPoint().CreateExtensions())
            {
                _extensionPages.AddRange(pageProvider.GetPages(new BiographyOrderHistoryContext(this)));
            }

            // add extension pages to container and set initial context
            // the container will start those components if the user goes to that page
            foreach (var page in _extensionPages)
            {
                _rightHandComponentContainer.Pages.Add(new TabPage(page.Path, page.GetComponent()));
            }

            _rightHandComponentContainerHost = new ChildComponentHost(this.Host, _rightHandComponentContainer);
            _rightHandComponentContainerHost.StartComponent();

            LoadOrders();

            base.Start();
        }
Example #17
0
        public override void Start()
        {
            BuildFolderExplorers();

            // Subscribe to page changed event before starting component, so that when component start the event will fire
            // for the initial page that open
            _stackTabComponent.CurrentPageChanged += OnCurrentPageChanged;
            _stackTabComponentContainerHost        = new ChildComponentHost(this.Host, _stackTabComponent);
            _stackTabComponentContainerHost.StartComponent();

            // register folder system instances with document manager
            foreach (var folderSystem in _folderSystems)
            {
                DocumentManager.RegisterFolderSystem(folderSystem);
            }

            // create tools
            _toolSet = new ToolSet(new FolderExplorerGroupToolExtensionPoint(), new FolderExplorerGroupToolContext(this));

            base.Start();
        }
        private void InitializeDocumentationTabPages()
        {
            var context = new PerformingDocumentationContext(this);

            _bannerComponentHost = new ChildComponentHost(this.Host, new BannerComponent(_worklistItem));
            _bannerComponentHost.StartComponent();

            _documentationTabContainer = new TabComponentContainer {
                ValidationStrategy = new AllComponentsValidationStrategy()
            };

            _orderDetailsComponent = new PerformingDocumentationOrderDetailsComponent(context, _worklistItem);
            _documentationTabContainer.Pages.Add(new TabPage("Order", _orderDetailsComponent));

            _ppsComponent = new PerformedProcedureComponent(_worklistItem, this);
            _ppsComponent.ProcedurePlanChanged += ((sender, e) => RefreshProcedurePlanSummary(e.ProcedurePlanDetail));
            _documentationTabContainer.Pages.Add(new TabPage("Exam", _ppsComponent));


            // create extension pages
            foreach (IPerformingDocumentationPageProvider pageProvider in (new PerformingDocumentationPageProviderExtensionPoint()).CreateExtensions())
            {
                _extensionPages.AddRange(pageProvider.GetPages(context));
            }

            foreach (var page in _extensionPages)
            {
                _documentationTabContainer.Pages.Add(new TabPage(page.Path, page.GetComponent()));
            }

            // For #7401.  Al the pages in this component are explicitly started so data for validation
            // iill be readily available when user complete the documentation.
            CollectionUtils.ForEach(_documentationTabContainer.Pages, p => p.LazyStart = false);

            _documentationHost = new ChildComponentHost(this.Host, _documentationTabContainer);
            _documentationHost.StartComponent();

            SetInitialDocumentationTabPage();
        }
        public override void Start()
        {
            _staffSummaryComponent = new StaffSummaryComponent {
                IncludeDeactivatedItems = false, HostedMode = true
            };
            _staffSummaryComponent.SummarySelectionChanged += OnSummaryComponentSummarySelectionChanged;
            _staffSummaryComponent.ItemDoubleClicked       += OnSummaryComponentItemDoubleClicked;

            _staffGroupSummaryComponent = new StaffGroupSummaryComponent {
                IncludeDeactivatedItems = false, HostedMode = true
            };
            _staffGroupSummaryComponent.SummarySelectionChanged += OnSummaryComponentSummarySelectionChanged;
            _staffGroupSummaryComponent.ItemDoubleClicked       += OnSummaryComponentItemDoubleClicked;

            _tabComponentContainer = new TabComponentContainer();
            _tabComponentContainer.Pages.Add(new TabPage(SR.TitleStaff, _staffSummaryComponent));
            _tabComponentContainer.Pages.Add(new TabPage(SR.TitleStaffGroups, _staffGroupSummaryComponent));

            _tabComponentContainerHost = new ChildComponentHost(this.Host, _tabComponentContainer);
            _tabComponentContainerHost.StartComponent();

            base.Start();
        }
        public override void Start()
        {
            var resolver = new ResourceResolver(this.GetType().Assembly);

            _mppsActionHandler = new SimpleActionModel(resolver);

            _stopAction        = _mppsActionHandler.AddAction("stop", SR.TitleStopMpps, "Icons.CheckInToolSmall.png", SR.TitleStopMpps, StopPerformedProcedureStep);
            _discontinueAction = _mppsActionHandler.AddAction("discontinue", SR.TitleDiscontinueMpps, "Icons.DeleteToolSmall.png", SR.TitleDiscontinueMpps, DiscontinuePerformedProcedureStep);
            UpdateActionEnablement();

            if (_orderRef != null)
            {
                Platform.GetService <IModalityWorkflowService>(
                    service =>
                {
                    var mppsRequest  = new ListPerformedProcedureStepsRequest(_orderRef);
                    var mppsResponse = service.ListPerformedProcedureSteps(mppsRequest);

                    _mppsTable.Items.AddRange(mppsResponse.PerformedProcedureSteps);
                    _mppsTable.Sort();
                });
            }

            // create extension editor pages, if any exist
            foreach (IPerformedStepEditorPageProvider provider in (new PerformedStepEditorPageProviderExtensionPoint().CreateExtensions()))
            {
                _editorPages.AddRange(provider.GetPages(new EditorContext(this)));
            }

            // if no editor pages are available via extensions, create the default editor
            if (_editorPages.Count == 0)
            {
                _editorPages.Add(new MppsDocumentationComponent(new EditorContext(this)));

                if (PerformingDocumentationComponentSettings.Default.ShowDicomSeriesTab)
                {
                    _editorPages.Add(new PerformedProcedureDicomSeriesComponent(new EditorContext(this)));
                }
            }


            // if there are multiple pages, need to create a tab container
            if (_editorPages.Count > 1)
            {
                var tabContainer = new TabComponentContainer();
                _detailsPagesHost = new ChildComponentHost(this.Host, tabContainer);
                foreach (var page in _editorPages)
                {
                    tabContainer.Pages.Add(new TabPage(page.Path, page.GetComponent()));
                }
            }
            else
            {
                // don't create a tab container for just one page
                _detailsPagesHost = new ChildComponentHost(this.Host, _editorPages[0].GetComponent());
            }

            // start details pages host
            _detailsPagesHost.StartComponent();

            base.Start();
        }