private static MVCController <TEntity> GenerateSearchMVCController <TViewer>(TViewer viewerToShow, ViewerName viewerName,
                                                                                     AbstractViewerType viewerType) where TViewer : IViewer
        {
            MVCSearchController =
                (MVCController <TEntity>)MVCControllerFactory.GetControllerFactory <TEntity>(viewerName, viewerToShow);

            return(MVCSearchController);
        }
        public void PassMVCController(EditorContainerType editorContainerType, AbstractViewerType viewerType)
        {
            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                BaseEditorViewerContainer <TEntity> .MVCController = MVCEditorController;
                break;

            case AbstractViewerType.SearchViewer:
                BaseSettingsSearchContatiner <TEntity> .BaseMvcController = MVCSearchController;
                break;
            }
        }
        private static MVCController <TEntity> GenerateEditorMVCController <TViewer>(TViewer viewerToShow, IDBCommon dbObjectToLoad,
                                                                                     EditorContainerType editorContainerType, ViewerName viewerName,
                                                                                     AbstractViewerType viewerType) where TViewer : IViewer
        {
            MVCEditorController =
                (MVCController <TEntity>)MVCControllerFactory.GetControllerFactory <TEntity>(viewerName, viewerToShow);

            switch (editorContainerType)
            {
            case EditorContainerType.Settings:
                if (MVCEditorController != null && BaseControllerObject != null && viewerType != AbstractViewerType.SearchViewer &&
                    (_baseEditorContainer != null || _baseSearchContainer != null))
                {
                    MVCEditorController.BeforeCreatingNew();
                    MVCEditorController.CreateNew();
                    MVCEditorController.AfterCreateNew();
                }

                break;

            case EditorContainerType.Regular:
                if (MVCEditorController != null)
                {
                    if (dbObjectToLoad != null)
                    {
                        MVCEditorController.BeforeEdit(dbObjectToLoad);
                        MVCEditorController.Edit(dbObjectToLoad);
                        MVCEditorController.AfterEdit(dbObjectToLoad);
                    }
                    else
                    {
                        MVCEditorController.BeforeCreatingNew();
                        MVCEditorController.CreateNew();
                        if (MVCEditorController.ActiveCollector.ActiveDBItem is TEntity)
                        {
                            ActiveDBEntity = (TEntity)MVCEditorController.ActiveCollector.ActiveDBItem;
                        }
                        MVCEditorController.AfterCreateNew();
                    }
                }

                break;
            }

            return(MVCEditorController);
        }
        public void InitializeBaseContainer(ViewerName viewerName, AbstractViewerType viewerType, string headerTitle,
                                            bool enableFullScreenButton, bool showNewButton, bool showPrintButton, bool showClearButton)
        {
            HeaderTitle               = headerTitle;
            ShowFullScreenButton      = enableFullScreenButton;
            lytNewButton.Visibility   = showNewButton ? LayoutVisibility.Always : LayoutVisibility.Never;
            lytClearButton.Visibility = showClearButton ? LayoutVisibility.Always : LayoutVisibility.Never;
            lytPrintButton.Visibility = showPrintButton ? LayoutVisibility.Always : LayoutVisibility.Never;
            ViewerName = viewerName;

            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                CommonViewsActions.ShowUserControl(ref BaseController <TEntity> .BasicEditorViewerContainer, pnlMain, true);
                BaseControllerObject.PassBaseController(BaseController <TEntity> .BasicEditorViewerContainer);
                break;

            case AbstractViewerType.SearchViewer:
                CommonViewsActions.ShowUserControl(ref BaseController <TEntity> ._baseSearchContainer, pnlMain, true);
                BaseControllerObject.PassBaseController(BaseController <TEntity> ._baseSearchContainer);
                break;
            }

            if (!string.IsNullOrEmpty(ApplicationStaticConfiguration.SkinName) &&
                !string.IsNullOrWhiteSpace(ApplicationStaticConfiguration.SkinName))
            {
                if (ApplicationStaticConfiguration.SkinName.Equals("McSkin"))
                {
                    btnClose.Image = Properties.Resources.ExitIcon_8;
                }
                else
                {
                    btnClose.Image = Properties.Resources.Exit_1_16;
                }
            }
            BringToFront();
        }
        public static void ShowControl <TEditorViewer, TSearchViewer>(ref TEditorViewer editorViewerToShow,
                                                                      ref TSearchViewer searchViewerToShow, Control parentControlToAttach, EditorContainerType editorContainerType, ViewerName viewerName,
                                                                      DB_CommonTransactionType commontransactionType,
                                                                      string headerTitle, AbstractViewerType viewerType, bool showAsPopup, bool showInFullScreen = false, bool isSearchPanelexpanded = false)
            where TEditorViewer : Control, new()
            where TSearchViewer : Control, new()
        {
            //1--- Initialize the BaseContainer
            //2--- Initialize the BaseSettingsEditorContainer / BaseSearchContainer
            //3--- Attach the BaseSettingsEditorContainer to BaseContainer
            //4--- Initialize the ViewerToShow
            //5--- Attach the ViewerToShow to BaseSettingsEditorContainer to Top Panel
            //6--- If the ViewerToShow has children Viewers, then >>
            //7--- If Yes :: Initialize Each Child in the ViewerToShow Children
            //8---			 Initialize The CommonTabControl
            //9---			 Create a Tab page for each viewerToShow child
            //10--			 Attach each Child to each suitable Tab page
            //11-- Attach the CommonTabControl to the BaseSettingsEditorContainer Bottom Panel
            //12-- Initialize the ViewerToShow MVCController
            //13-- Initialize the MVCController for Each Child in the ViewerToShow Children

            ParentControl         = parentControlToAttach;
            ViewerName            = viewerName;
            HeaderTitle           = headerTitle;
            CommontransactionType = commontransactionType;

            if (showAsPopup)
            {
                _popupForm = new PopupBaseForm();
                _popupForm.InitializePopupBaseForm(FormWindowState.Maximized, false, headerTitle, FormBorderStyle.None);
                CommonViewsActions.ShowUserControl(ref _baseContainer, _popupForm, true);
            }
            else
            {
                CommonViewsActions.ShowUserControl(ref _baseContainer, parentControlToAttach, true);
            }

            if (_baseContainer == null)
            {
                return;
            }

            if (!_baseContainer.IsBaseControllerInitialized)
            {
                BaseControllerObject = new BaseController <TEntity>();
                _baseContainer.InitializeBaseViewerController(BaseControllerObject);
            }

            _baseContainer.InitializeBaseContainer(ViewerName, viewerType, headerTitle, false, true, true, true);

            if (editorViewerToShow == null || editorViewerToShow.IsDisposed)
            {
                editorViewerToShow = new TEditorViewer();
            }
            if (searchViewerToShow == null || editorViewerToShow.IsDisposed)
            {
                searchViewerToShow = new TSearchViewer();
            }

            _baseContainer._editorViewerToShow = editorViewerToShow;

            EditorViewer = (IViewer)editorViewerToShow;
            SearchViewer = (IViewer)searchViewerToShow;

            if (EditorViewer != null)
            {
                EditorViewer.ClearControls();
                EditorViewer.FillControls();
            }

            if (SearchViewer != null)
            {
                SearchViewer.ClearControls();
                SearchViewer.FillControls();
            }

            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                MVCEditorController = GenerateEditorMVCController(EditorViewer, null, editorContainerType, viewerName, viewerType);
                break;

            case AbstractViewerType.SearchViewer:
                MVCSearchController = GenerateEditorMVCController(SearchViewer, null, editorContainerType, viewerName, viewerType);
                break;
            }

            switch (viewerType)
            {
            case AbstractViewerType.EditorViewer:
                if (_baseEditorContainer == null)
                {
                    return;
                }
                _baseEditorContainer._editorViewer         = (Control)EditorViewer;
                _baseEditorContainer.CommonTransactionType = CommontransactionType;
                if (BaseControllerObject != null)
                {
                    BaseControllerObject.PassMVCController(editorContainerType, viewerType);
                }
                _baseEditorContainer.InitializeBaseEditorContainer(true, false, false);
                break;

            case AbstractViewerType.SearchViewer:
                if (_baseSearchContainer == null)
                {
                    return;
                }
                _baseSearchContainer._searchViewer = (Control)SearchViewer;
                if (BaseControllerObject != null)
                {
                    BaseControllerObject.PassMVCController(editorContainerType, viewerType);
                }
                _baseSearchContainer.InitializeBaseSearchContainer(isSearchPanelexpanded);
                _baseSearchContainer.LoadGrid();
                break;
            }

            if (showAsPopup && _popupForm != null)
            {
                _popupForm.Show();
            }
        }