示例#1
0
        public ImportXlsBookForm(string filePath, DatabaseSchema schema, NotebookManager manager)
        {
            InitializeComponent();
            _filePath       = filePath;
            _databaseSchema = schema;
            _manager        = manager;

            _dockPanel = DockPanelUtil.CreateDockPanel();
            _dockPanel.DockLeftPortion = 300;
            _dockPanelContainer.Controls.Add(_dockPanel);

            _sheetsControl = new ImportXlsSheetsControl();
            {
                var dc = new UserControlDockContent("Workbook", _sheetsControl, DockAreas.DockLeft)
                {
                    CloseButtonVisible = false
                };
                dc.Show(_dockPanel, DockState.DockLeft);
            }

            _optionsControl = new ImportXlsSheetControl();
            {
                var dc = new UserControlDockContent("Worksheet", _optionsControl)
                {
                    CloseButtonVisible = false,
                    Icon = Properties.Resources.TableSheetIco
                };
                dc.Show(_dockPanel);
            }

            _sqlControl     = new SqlTextControl(readOnly: true);
            _sqlLoadControl = new LoadingContainerControl {
                ContainedControl = _sqlControl
            };
            {
                var dc = new UserControlDockContent("Import Script", _sqlLoadControl, DockAreas.DockBottom)
                {
                    CloseButtonVisible = false
                };
                dc.Show(_dockPanel, DockState.DockBottomAutoHide);
            }

            _outputPreviewControl     = new ImportPreviewControl();
            _outputPreviewLoadControl = new LoadingContainerControl {
                ContainedControl = _outputPreviewControl
            };
            {
                var dc = new UserControlDockContent("Preview", _outputPreviewLoadControl, DockAreas.DockBottom)
                {
                    CloseButtonVisible = false,
                    Icon = Properties.Resources.TableImportIco
                };
                dc.Show(_dockPanel, DockState.DockBottomAutoHide);
            }
        }
示例#2
0
        private void OpenHelp(string path)
        {
            string url;
            string homeUrl;

            lock (_manager.HelpServerLock) {
                url     = $"http://127.0.0.1:{_manager.HelpServer.PortNumber}{path}";
                homeUrl = $"http://127.0.0.1:{_manager.HelpServer.PortNumber}/index.html";
            }

            if (Settings.Default.UseExternalHelpBrowser)
            {
                Process.Start(url);
                return;
            }

            BeginInvoke(new MethodInvoker(() => {
                HelpDocumentControl helpCtl;
                if (_helpDoc != null)
                {
                    helpCtl = (HelpDocumentControl)_helpDoc.Content;
                    helpCtl.Navigate(url);
                }
                else
                {
                    helpCtl = new HelpDocumentControl(_manager, homeUrl, url)
                    {
                        Dock = DockStyle.Fill
                    };
                    _helpDoc = new UserControlDockContent("SQL Notebook Help", helpCtl, DockAreas.Document | DockAreas.Float)
                    {
                        Icon = Resources.HelpIco
                    };
                    helpCtl.SetTitleProc = x => _helpDoc.Text = x;
                    _helpDoc.FormClosed += (sender, e) => _helpDoc = null;
                    _helpDoc.Show(_dockPanel);
                }
                _helpDoc.Activate();
                _helpDoc.Focus();
            }));
        }
示例#3
0
        }                                                      // the ultimate result of this forum

        public ImportCsvForm(string filePath, DatabaseSchema schema, NotebookManager manager)
        {
            InitializeComponent();
            _filePath       = filePath;
            _databaseSchema = schema;
            _manager        = manager;

            _dockPanel = new DockPanel {
                Dock          = DockStyle.Fill,
                DocumentStyle = DocumentStyle.DockingWindow,
                Theme         = new VS2012LightTheme {
                    ShowWindowListButton    = false,
                    ShowAutoHideButton      = false,
                    ForceActiveCaptionColor = true
                },
                DockTopPortion            = 0.5,
                AllowEndUserDocking       = false,
                AllowEndUserNestedDocking = false,
                ShowDocumentIcon          = true
            };
            _dockPanelContainer.Controls.Add(_dockPanel);

            _optionsControl = new ImportCsvOptionsControl(schema)
            {
                Dock = DockStyle.Fill
            };
            {
                var dc = new UserControlDockContent("Import Options", _optionsControl, DockAreas.DockTop)
                {
                    CloseButtonVisible = false
                };
                dc.Show(_dockPanel, DockState.DockTop);
            }

            _columnsControl = new ImportColumnsControl {
                Dock = DockStyle.Fill
            };
            _columnsLoadControl = new LoadingContainerControl {
                ContainedControl = _columnsControl
            };
            {
                var dc = new UserControlDockContent("Columns", _columnsLoadControl, DockAreas.Float | DockAreas.DockTop)
                {
                    CloseButtonVisible = false
                };
                dc.Show(_dockPanel, new Rectangle(-50000, -50000, 100, 100)); // hide brief flash of this floating window
                dc.DockHandler.FloatPane.DockTo(_dockPanel.DockWindows[DockState.DockTop]);
                dc.DockAreas = DockAreas.DockTop;
            }

            DockContent inputPreviewDc;

            _inputPreviewControl = new ImportTextFilePreviewControl {
                Dock = DockStyle.Fill
            };
            _inputPreviewLoadControl = new LoadingContainerControl {
                ContainedControl = _inputPreviewControl
            };
            {
                var dc = new UserControlDockContent("Original File", _inputPreviewLoadControl)
                {
                    CloseButton        = false,
                    CloseButtonVisible = false,
                    ControlBox         = false,
                    Icon = Properties.Resources.PageWhiteTextIco
                };
                dc.Show(_dockPanel);
                inputPreviewDc = dc;
            }

            _sqlControl = new SqlTextControl(readOnly: true)
            {
                Dock = DockStyle.Fill
            };
            _sqlLoadControl = new LoadingContainerControl {
                ContainedControl = _sqlControl
            };
            {
                var dc = new UserControlDockContent("Import Script", _sqlLoadControl)
                {
                    CloseButton        = false,
                    CloseButtonVisible = false,
                    ControlBox         = false,
                    Icon = Properties.Resources.ScriptIco
                };
                dc.Show(_dockPanel);
            }

            _outputPreviewControl = new ImportPreviewControl {
                Dock = DockStyle.Fill
            };
            _outputPreviewLoadControl = new LoadingContainerControl {
                ContainedControl = _outputPreviewControl
            };
            {
                var dc = new UserControlDockContent("Preview", _outputPreviewLoadControl)
                {
                    CloseButton        = false,
                    CloseButtonVisible = false,
                    ControlBox         = false,
                    Icon = Properties.Resources.TableImportIco
                };
                dc.Show(_dockPanel);
            }

            inputPreviewDc.Activate(); // select "Original File" tab initially

            Load += async(sender, e) => {
                ValidateOptions();
                await UpdateControls(inputChange : true);
            };

            var o = _optionsControl;

            Bind.OnChange(new Slot[] { o.TargetTableName },
                          async(sender, e) => {
                ValidateOptions();
                await UpdateControls(columnsChange: true);
            });
            Bind.OnChange(new Slot[] { o.FileEncoding },
                          async(sender, e) => await UpdateControls(inputChange: true));
            Bind.OnChange(new Slot[] { o.IfTableExists, o.SkipLines, o.HasColumnHeaders },
                          async(sender, e) => await UpdateControls(columnsChange: true));
            Bind.OnChange(new Slot[] { o.IfConversionFails, _columnsControl.Change, _optionsError, _columnsError,
                                       _inputPreviewError },
                          async(sender, e) => await UpdateScriptAndOutputPreview());
            Bind.BindAny(new[] { _columnsLoadControl.IsOverlayVisible, _inputPreviewLoadControl.IsOverlayVisible,
                                 _outputPreviewLoadControl.IsOverlayVisible, _sqlLoadControl.IsOverlayVisible },
                         x => _okBtn.Enabled = !x);

            Text = $"Import {Path.GetFileName(_filePath)}";
            o.TargetTableName.Value = Path.GetFileNameWithoutExtension(_filePath);
        }
示例#4
0
        public MainForm(string filePath, bool isNew)
        {
            InitializeComponent();

            _menuStrip.SetMenuAppearance();
            _menuStrip.Items.Insert(0, _searchTxt = new CueToolStripTextBox {
                Alignment   = ToolStripItemAlignment.Right,
                CueText     = "Search Help",
                ToolTipText = "Search the built-in documentation (Ctrl+H)",
                AutoSize    = false,
                Margin      = new Padding(0, 0, 5, 0)
            });
            _searchTxt.InnerTextBox.KeyDown += (sender, e) => {
                if (e.KeyCode == Keys.Enter)
                {
                    e.Handled          = true;
                    e.SuppressKeyPress = true;
                    var text = _searchTxt.Text;
                    OpenHelp("/search?q=" + System.Net.WebUtility.UrlEncode(text));
                    _searchTxt.Text = "";
                }
            };

            if (isNew)
            {
                _notebook = new Notebook(filePath, isNew);
            }
            else
            {
                var f = new WaitForm("SQL Notebook", $"Opening notebook \"{Path.GetFileNameWithoutExtension(filePath)}\"", () => {
                    _notebook = new Notebook(filePath, isNew);
                });
                using (f) {
                    f.StartPosition = FormStartPosition.CenterScreen;
                    f.ShowDialog();
                    if (f.ResultException != null)
                    {
                        throw f.ResultException;
                    }
                }
            }
            _isNew     = isNew;
            _manager   = new NotebookManager(_notebook, _isTransactionOpen);
            _importer  = new Importer(_manager, this);
            _dockPanel = new DockPanel {
                Dock  = DockStyle.Fill,
                Theme = new VS2012LightTheme {
                    ToolStripRenderer = new MenuRenderer()
                },
                DocumentStyle          = DocumentStyle.DockingWindow,
                DefaultFloatWindowSize = new Size(700, 700),
                ShowDocumentIcon       = true,
                DockLeftPortion        = 250
            };
            _toolStripContainer.ContentPanel.Controls.Add(_dockPanel);

            _contentsPane = new UserControlDockContent("Table of Contents",
                                                       _explorer = new ExplorerControl(_manager, this, _operationInProgress),
                                                       DockAreas.DockLeft | DockAreas.DockRight);
            _contentsPane.CloseButtonVisible = false;
            _contentsPane.Show(_dockPanel, DockState.DockLeft);

            _manager.NotebookItemOpenRequest  += Manager_NotebookItemOpenRequest;
            _manager.NotebookItemCloseRequest += Manager_NotebookItemCloseRequest;
            _manager.NotebookItemsSaveRequest += Manager_NotebookItemsSaveRequest;
            _manager.NotebookDirty            += (sender, e) => SetDirty();
            _manager.NotebookItemRename       += Manager_NotebookItemRename;
            _manager.StatusUpdate             += Manager_StatusUpdate;
            _manager.HandleHotkeyRequest      += Manager_HandleHotkeyRequest;

            // show a progressbar in the taskbar button and the statusbar when a operation is in progress
            _operationInProgress.Change += (oldValue, newValue) => {
                if (!oldValue && newValue)
                {
                    this.BeginTaskbarProgress();
                    _statusLbl.Visible = true;

                    // this restarts the statusbar progress marquee from the beginning
                    _statusProgressbar.Style   = ProgressBarStyle.Continuous;
                    _statusProgressbar.Style   = ProgressBarStyle.Marquee;
                    _statusProgressbar.Visible = true;

                    _cancelLnk.IsLink  = true;
                    _cancelLnk.Text    = "Cancel";
                    _cancelLnk.Visible = true;
                }
                else if (oldValue && !newValue)
                {
                    _notebook.EndUserCancel();
                    this.EndTaskbarProgress();
                    _statusProgressbar.Visible = false;
                    _statusLbl.Visible         = false;
                    _cancelLnk.Visible         = false;
                }
            };

            Slot.Bind(
                () => BeginInvoke(new MethodInvoker(() =>
                                                    _importMnu.Enabled = _saveAsMnu.Enabled = !_operationInProgress && !_isTransactionOpen
                                                    )),
                _operationInProgress, _isTransactionOpen);
            Slot.Bind(
                () => BeginInvoke(new MethodInvoker(() =>
                                                    _exportMnu.Enabled = !_operationInProgress
                                                    )),
                _operationInProgress);
            Slot.Bind(
                () => BeginInvoke(new MethodInvoker(() =>
                                                    _saveBtn.Enabled = _saveMnu.Enabled = !_operationInProgress && _isDirty && !_isTransactionOpen
                                                    )),
                _operationInProgress, _isDirty, _isTransactionOpen);
            _isDirty.Change += (a, b) => SetTitle();
            Slot.Bind(
                () => BeginInvoke(new MethodInvoker(() =>
                                                    _openTransactionLbl.Visible = _isTransactionOpen
                                                    )),
                _isTransactionOpen);

            if (isNew)
            {
                switch (Settings.Default.AutoCreateInNewNotebooks)
                {
                case 1:     // New note
                    Load += (sender, e) => {
                        var name = _manager.NewNote();
                        OpenItem(new NotebookItem(NotebookItemType.Note, name));
                        _isDirty.Value = false;
                    };
                    break;

                case 2:     // New console
                    Load += (sender, e) => {
                        var name = _manager.NewConsole();
                        OpenItem(new NotebookItem(NotebookItemType.Console, name));
                        _isDirty.Value = false;
                    };
                    break;

                case 3:     // New script
                    Load += (sender, e) => {
                        var name = _manager.NewScript();
                        OpenItem(new NotebookItem(NotebookItemType.Script, name));
                        _isDirty.Value = false;
                    };
                    break;
                }
            }

            Load += async(sender, e) => {
                _manager.Rescan();

                var updateAvailable = await IsUpdateAvailable();

                if (updateAvailable)
                {
                    _appUpdateLbl.Visible = true;
                }
            };
            SetTitle();
        }
示例#5
0
        private void OpenItem(NotebookItem item)
        {
            UserControlDockContent wnd;

            if (_openItems.TryGetValue(item, out wnd))
            {
                wnd.Activate();
                wnd.Focus();
                return;
            }

            UserControlDockContent f       = null;
            Func <string>          getName = null;
            var dockAreas = DockAreas.Document | DockAreas.Float;

            if (item.Type == NotebookItemType.Console)
            {
                var doc = new ConsoleDocumentControl(item.Name, _manager, this);
                f = new UserControlDockContent(item.Name, doc, dockAreas)
                {
                    Icon = Resources.ApplicationXpTerminalIco
                };
                ApplySaveOnClose(f, doc);
                getName = () => doc.ItemName;
            }
            else if (item.Type == NotebookItemType.Note)
            {
                var doc = new NoteDocumentControl(item.Name, _manager);
                f = new UserControlDockContent(item.Name, doc, dockAreas)
                {
                    Icon = Resources.NoteIco
                };
                ApplySaveOnClose(f, doc);
                getName = () => doc.ItemName;
            }
            else if (item.Type == NotebookItemType.Script)
            {
                var doc = new QueryDocumentControl(item.Name, _manager, this, _operationInProgress);
                f = new UserControlDockContent(item.Name, doc, dockAreas)
                {
                    Icon = Resources.ScriptIco
                };
                ApplySaveOnClose(f, doc);
                getName = () => doc.ItemName;
            }
            else if (item.Type == NotebookItemType.Table || item.Type == NotebookItemType.View)
            {
                var doc = new TableDocumentControl(_manager, item.Name, this);
                f = new UserControlDockContent(item.Name, doc, dockAreas)
                {
                    Icon = Resources.TableIco
                };
            }

            if (getName != null)
            {
                f.FormClosed += (sender2, e2) => {
                    // the item may have been renamed since we opened it, so make sure to use getName() for the current
                    // name instead of closing over item.Name.
                    _openItems.Remove(new NotebookItem(item.Type, getName()));
                };
                _openItems[item] = f;
            }

            f.Show(_dockPanel);
        }
示例#6
0
 private void ApplySaveOnClose(UserControlDockContent f, IDocumentControl doc)
 {
     f.FormClosing += (sender, e) => doc.Save();
 }