Exemplo n.º 1
0
        public VaultDialogForm(VaultAction action)
        {
            // Initialize internal state
            Action        = action;
            SelectedVault = null;

            // Initialize controls and events
            InitializeComponent();
            _tcTabs.Selected += (o, e) =>
            {
                var virtualTab = e.TabPage.Tag.AssertCast <IVaultDialogTab>();
                this.Text = virtualTab.FullTitle;
                if (TabActivated != null)
                {
                    TabActivated(o, new VaultDialogTabEventArgs(virtualTab));
                }
            };
            _tcTabs.Deselected += (o, e) =>
            {
                var virtualTab = e.TabPage.Tag.AssertCast <IVaultDialogTab>();
                if (TabDeactivated != null)
                {
                    TabDeactivated(o, new VaultDialogTabEventArgs(virtualTab));
                }
            };

            // Load plugins
            var lastSelectedTabType = (Type)AppDomain.CurrentDomain.GetData(this.GetType().FullName);

            lastSelectedTabType = lastSelectedTabType ?? VaultFormats.Default.GetType();
            TabPage tabToSelectNow = null;

            var map = new Dictionary <TabPage, IVaultFormat>();

            foreach (var format in VaultFormats.All)
            {
                format.InjectIntoVaultDialog(this);

                var tab = _tcTabs.TabPages.Cast <TabPage>().Last();
                map.Add(tab, format);

                if (format.GetType() == lastSelectedTabType)
                {
                    tabToSelectNow = tab;
                }
            }

            // Select previously selected page (or a default format)
            tabToSelectNow.AssertNotNull();
            if (tabToSelectNow != null)
            {
                if (tabToSelectNow == _tcTabs.TabPages.Cast <TabPage>().First())
                {
                    // the target tab is already selected, but we need to raise our events
                    if (TabActivated != null)
                    {
                        TabActivated(this, new VaultDialogTabEventArgs(Tabs.First()));
                    }
                }
                else
                {
                    _tcTabs.SelectedTab = tabToSelectNow;
                }
            }

            // Remember tab selections
            this.TabActivated += (o, e) =>
            {
                var tabType = map[e.Tab.TabPage].GetType();
                AppDomain.CurrentDomain.SetData(this.GetType().FullName, tabType);
            };
        }