private bool DrillThrough()

in sqlnexus/fmNexus.cs [1658:3481]


        private bool DrillThrough(LocalReport report, string reportpath)
        {
            
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    LogMessage(sqlnexus.Properties.Resources.Msg_Drillthrough+reportpath, MessageOptions.Silent);
                    if (0 != (0x80 & GetKeyState(0x11)))  //If CTRL is pressed, create new tab
                    {

                        TreeNode[] pn = tvReports.Nodes.Find("tvn_" + CurrentReport.DisplayName, false);

                        System.Diagnostics.Debug.Assert(null != pn);

                        TreeNode n = AddFindReportNode(Path.GetFileNameWithoutExtension(reportpath), pn[0].Nodes);
                        n.EnsureVisible();
                        n.ImageIndex = 1;
                        n.SelectedImageIndex = 1;

                        ReportParameterInfoCollection paramc = report.GetParameters();
                        ReportParameter[] parameters = new ReportParameter[paramc.Count];
                        int i = 0;
                        foreach (ReportParameterInfo p in paramc)
                        {
                            parameters[i++] = new ReportParameter(p.Name, p.Values[0]);
                        }
                        // First check for a child report (.RDLC) with the specified name in the same dir as the parent report
                        string filename = Path.GetDirectoryName(report.ReportPath) + @"\" + reportpath + RDLC_EXT;
                        if (!File.Exists(filename))
                        {   // If not found, use our own reports dirs
                            filename = GetFullReportPath(reportpath, RDLC_EXT);
                        }
                        SelectLoadReport(filename, false, parameters);
                        return true;
                    }
                    else
                    {
                        // First check for a child report (.RDLC) with the specified name in the same dir as the parent report
                        string filename = Path.GetDirectoryName(report.ReportPath) + @"\" + reportpath + RDLC_EXT;
                        if (!File.Exists(filename)) 
                        {   // If not found, use our own reports dirs
                            filename = GetFullReportPath(reportpath, RDLC_EXT);
                        }

                        LogMessage(sqlnexus.Properties.Resources.Msg_Drillthrough + filename, MessageOptions.Silent);

                        //ReportFileManager.NeedToSupplyParamete("ts");
                        //jackli, reordering reports 
                        /*if (true == ReportFileManager.NeedToSupplyParameter(report.ReportPath))
                        {*/

                        //don't know whey we needed to call it twice
                            SetReportQueryParameters(report);
                            //SetReportQueryParameters(report);
                        /*}*/

                        FixupDataSources(filename, reportpath, report.DataSources, report.GetParameters());
                        return false;
                    }
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                    return true;
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void ExportReport(ReportExportType exporttype)
        {
            ExportReport(exporttype, "");
        }

        public void RunAndExportReport(string filename, ReportExportType exporttype)
        {
            SelectLoadReport(filename, true, null);
            //filename = Path.GetFileNameWithoutExtension(filename)+".XLS";
            filename = Path.GetDirectoryName(Globals.ReportExportPath) + @"\" + Path.GetFileNameWithoutExtension(filename) + ".XLS";
            ExportReport(ReportExportType.Excel, filename);
        }
        
        private void ExportReport(ReportExportType exporttype, string filename)
        {
            string IMAGE_DEVICE_INFO = @"<DeviceInfo><ColorDepth>24</ColorDepth>
                                <DpiX>96</DpiX><DpiY>96</DpiY><MarginBottom>.25in</MarginBottom>
                                <MarginLeft>.25in</MarginLeft><MarginRight>.25in</MarginRight>
                                <MarginTop>.25in</MarginTop><OutputFormat>{0}</OutputFormat>
                                <PageHeight>11in</PageHeight><PageWidth>10in</PageWidth>
                                <StartPage>1</StartPage></DeviceInfo>";


            Cursor save = StartWaiting();
            try
            {
                try
                {
                    LogMessage(sqlnexus.Properties.Resources.Msg_Exporting + filename);
                    string nullStr = null;
                    string[] streamids;
                    Warning[] warnings = null;

                    string format;
                    string exporttypestr;

                    switch (exporttype)
                    {
                        case ReportExportType.Excel:
                            {
                                format = "Excel";
                                exporttypestr = "Excel";
                                break;
                            }
                        case ReportExportType.PDF:
                            {
                                format = "PDF";
                                exporttypestr = "PDF";
                                break;
                            }
                        case ReportExportType.BMP:
                            {
                                format = "Image";
                                exporttypestr = "BMP";
                                break;
                            }
                        case ReportExportType.EMF:
                            {
                                format = "Image";
                                exporttypestr = "EMF";
                                break;
                            }
                        case ReportExportType.GIF:
                            {
                                format = "Image";
                                exporttypestr = "GIF";
                                break;
                            }
                        case ReportExportType.JPEG:
                            {
                                format = "Image";
                                exporttypestr = "JPEG";
                                break;
                            }
                        case ReportExportType.PNG:
                            {
                                format = "Image";
                                exporttypestr = "PNG";
                                break;
                            }
                        case ReportExportType.TIFF:
                            {
                                format = "Image";
                                exporttypestr = "TIFF";
                                break;
                            }
                        default:
                            {
                                format = "Image";
                                exporttypestr = "JPEG";
                                break;
                            }
                    }

                    string device_info = string.Format(IMAGE_DEVICE_INFO, exporttypestr);
                    byte[] result = CurrentReport.Render(format, device_info, out nullStr, out nullStr, out nullStr, out streamids, out warnings);

                    foreach (Warning w in warnings)
                        LogMessage(sqlnexus.Properties.Resources.Msg_RenderWarning + w.Message, MessageOptions.Silent);

                    if (ReportExportType.Clipboard == exporttype)
                    {
                        MemoryStream stream = new MemoryStream(result);

                        DataObject d = new DataObject();
                        d.SetData(DataFormats.Bitmap, new Bitmap(stream));

                        Clipboard.SetDataObject(d, true);
                    }
                    else
                    {
                        //Write out the stream in a new file.

                        FileStream fstream = new FileStream(filename,
                                FileMode.Create,
                                System.Security.AccessControl.FileSystemRights.WriteData,
                                FileShare.None, 
                                4096,
                                FileOptions.None, Util.GetFileSecurity());
                        

                        //FileStream fstream = File.Create(filename, result.Length);
                        fstream.Write(result, 0, result.Length);
                        fstream.Close();
                    }

                    LogMessage(sqlnexus.Properties.Resources.Msg_ReportCopied);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void RunAllReports()
        {
            foreach (TreeNode n in tvReports.Nodes)
                tvReports.SelectedNode = n;
        }

        private string GetFullReportPath(string reportName, string reportExt)
        {
            string filename;
            if ("" == Path.GetExtension(reportName))
            {
                //jackli: no need to go thru app path anymore
                //filename = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\SqlNexus\Reports\" + reportName + reportExt;
                //if (!File.Exists(filename))
                    filename = Application.StartupPath + @"\Reports\" + reportName + reportExt;
            }
            else
                filename = reportName;

            if (!File.Exists(filename))
                throw (new ArgumentException("Report not found: " + reportName + reportExt));

            return filename;
        }

        #endregion Report mgmt

        #region Menu syncs
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            About();
        }

        [System.Reflection.ObfuscationAttribute (Exclude=true)]
        public static void About()
        {
            fmAbout fm = new fmAbout();
            fm.ShowDialog();
        }

        [System.Reflection.ObfuscationAttribute(Exclude = true)]
        public void Help()
        {
            LogMessage("No help yet", MessageOptions.Dialog);
        }

        private void tspCopy_Click(object sender, EventArgs e)
        {
            if (null == CurrentReport)  //No open reports
                return;
            ExportReport(ReportExportType.Clipboard);
        }

        private void closeToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (null == CurrentReport)  //No open reports
                return;
            CloseTab(tcReports.SelectedTab);
        }

        private void tspParams_Click(object sender, EventArgs e)
        {
            GetReportParameters(true,"");
        }

        private void closeAllToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (null == CurrentReport)  //No open reports
                return;
            CloseAll();
        }

        private void closeToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            if (null == CurrentReport)  //No open reports
                return;
            CloseTab(tcReports.SelectedTab);
        }

        private void closeAllButCurrentToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (null == CurrentReport)  //No open reports
                return;
            CloseAllButThis(tcReports.SelectedTab);
        }

        private void mainToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolbarMain.Visible = !toolbarMain.Visible;
        }

        private void serviceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            toolbarService.Visible = !toolbarService.Visible;
        }

        private void reportToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (0 != tcReports.TabCount)
            {
                toolbarReport.Visible = !toolbarReport.Visible;
            }
        }

        private void tstbRunAll_Click(object sender, EventArgs e)
        {
            RunAllReports();
        }

        private void tstbOpen_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == od_Report.ShowDialog(this))
            {
                foreach (string f in od_Report.FileNames)
                    SelectLoadReport(f, true, null);
            }
        }

        private void contentsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ShowHelp(HH_DISPLAY_TOC);
        }

        private void indexToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ShowHelp(HH_DISPLAY_INDEX);
        }

        private void supportToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Process.Start(Properties.Resources.Msg_Nexus_SupportUrl);
        }

        private void contactUsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ContactUs();
        }

        [System.Reflection.ObfuscationAttribute(Exclude = true)]
        public static void ContactUs()
        {
            Process.Start(Properties.Resources.Msg_Nexus_SupportEmail);
        }

        private void mainMenuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.menuBarMain.Visible = (sender as ToolStripMenuItem).Checked;
        }

        bool menukeypressed = false;

        private void fmNexus_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Modifiers == Keys.Alt)
            {
                foreach (ToolStripMenuItem mnu in menuBarMain.Items)
                {
                    if (-1 != mnu.Text.IndexOf("&" + e.KeyCode.ToString().ToUpper(CultureInfo.InvariantCulture)))
                    {
                        this.menuBarMain.Visible = true;
                        mnu.Select();
                        mnu.ShowDropDown();
                        e.Handled = true;
                        menukeypressed = true;
                        return;
                    }
                }
            }
            menukeypressed = false;
        }

        private void fmNexus_KeyUp(object sender, KeyEventArgs e)
        {
            if ((!menukeypressed)
                && (e.KeyCode == (Keys.RButton | Keys.ShiftKey))  //Alt
                && (e.Modifiers == Keys.None))
            {
                menuBarMain.Visible = true; // !menuBarMain.Visible;
                if (menuBarMain.Visible)
                    this.fileToolStripMenuItem.Select();
                e.Handled = true;
                return;
            }
            if ((e.KeyCode == Keys.Escape)
                && (e.Modifiers == Keys.None))
            {
                menuBarMain.Visible = false;
                e.Handled = true;
                return;
            }

        }

        private void menuBarMain_MenuDeactivate(object sender, EventArgs e)
        {
            menuBarMain.Visible = mainMenuToolStripMenuItem.Checked;
        }

        private void tvReports_Click(object sender, EventArgs e)
        {
            menuBarMain.Visible = mainMenuToolStripMenuItem.Checked;
        }


        private void askWhetherToStartTheSQLDiagCollectionServiceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sqlnexus.Properties.Settings.Default.SQLDiagStartDontAsk = (sender as ToolStripMenuItem).Checked;
        }

        private void askWhetherToStopTheSQLDiagCollectionServiceWhenExitingToolStripMenuItem_Click(object sender, EventArgs e)
        {
            sqlnexus.Properties.Settings.Default.SQLDiagStopDontAsk = (sender as ToolStripMenuItem).Checked;
        }

        private void tstbConnect_Click(object sender, EventArgs e)
        {
            if (DialogResult.OK == ShowConnectionDlg())
            {
                RefreshAllReports();

            }
        }


        #endregion Menu syncs

        #region Report toolbar syncs

        private void UpdatePageNum(int pagenum)
        {
            tstbPage.Text = pagenum.ToString();
        }

        private void UpdatePageNum()
        {
            UpdatePageNum(CurrentReportViewer.CurrentPage);
        }

        private void UpdateReportButtons()
        {
            UpdatePageNum();
            UpdatePageCount();
            tsbFirst.Enabled = (CurrentReportViewer.CurrentPage != 1);
            tsbPrev.Enabled = (CurrentReportViewer.CurrentPage != 1);
            tsbNext.Enabled = (CurrentReportViewer.CurrentPage != CurrentReport.GetTotalPages());
            tsbLast.Enabled = (CurrentReportViewer.CurrentPage != CurrentReport.GetTotalPages());
            tsbBack.Enabled = CurrentReport.IsDrillthroughReport;
            tsbStopAct.Enabled = false;
            try
            {
                tsbDocMap.Enabled = (null != CurrentReport.GetDocumentMap());
            }
            catch (Exception ex)  //An exception means there's no doc map
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
                tsbDocMap.Enabled = false;
            }
            tstbParams.Enabled = fmReportParameters.HasReportParameters(CurrentReport, false);
            getReportParametersToolStripMenuItem.Enabled = tstbParams.Enabled;
            copyToolStripMenuItem.Enabled = (0 != tcReports.TabCount);
            tstbFind.Text = "";
            tsbFind.Enabled = false;
            tsbFindNext.Enabled = false;

            //Unhook the event handler (no need to trigger the report's zoom code; it's already zoomed)
            this.tscZoom.SelectedIndexChanged -= new System.EventHandler(this.tscZoom_SelectedIndexChanged);


            switch (CurrentReportViewer.ZoomMode)
            {
                case ZoomMode.PageWidth:
                    {
                        tscZoom.SelectedIndex = 0;
                        break;
                    }
                case ZoomMode.FullPage:
                    {
                        tscZoom.SelectedIndex = 1;
                        break;
                    }
                default:
                    {
                        int i = tscZoom.Items.IndexOf(CurrentReportViewer.ZoomPercent.ToString() + "%");
                        if (-1 != i)
                        {
                            tscZoom.SelectedIndex = i;
                        }
                        break;
                    }
            }

            //Hook it back up
            this.tscZoom.SelectedIndexChanged += new System.EventHandler(this.tscZoom_SelectedIndexChanged);
        }


        private void UpdatePageCount()
        {
            tslaPages.Text = string.Format(sqlnexus.Properties.Resources.Msg_PageCount, CurrentReport.GetTotalPages());
        }

        private void tsbFirst_Click(object sender, EventArgs e)
        {
            try
            {
                CurrentReportViewer.CurrentPage = 1;
                UpdatePageNum();
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbPrev_Click(object sender, EventArgs e)
        {
            try
            {
                if (CurrentReportViewer.CurrentPage != 1)
                    CurrentReportViewer.CurrentPage -= 1;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbNext_Click(object sender, EventArgs e)
        {
            try
            {
                if (CurrentReport.GetTotalPages() != CurrentReportViewer.CurrentPage)
                    CurrentReportViewer.CurrentPage += 1;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbLast_Click(object sender, EventArgs e)
        {
            try
            {
                if (CurrentReport.GetTotalPages() != CurrentReportViewer.CurrentPage)
                    CurrentReportViewer.CurrentPage = Int32.MaxValue;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }

        }

        private void tstbPage_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (e.KeyChar == '\r')
                {
                    if ("0" == tstbPage.Text)  //No zero page -- default to 1
                    {
                        tstbPage.Text = "1";
                    }
                    CurrentReportViewer.CurrentPage = Convert.ToInt32(tstbPage.Text);
                    tstbPage.Text = CurrentReportViewer.CurrentPage.ToString();
                    e.Handled = true;
                }
                else if (
                    (Char.IsWhiteSpace(e.KeyChar))
                    || (Char.IsLetter(e.KeyChar))
                    || (Char.IsSymbol(e.KeyChar))
                    || (Char.IsPunctuation(e.KeyChar))
                    )
                {
                    //eat non-numerics - can't blindly eat everything but IsDigit because of nav keys, etc.
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }

        }

        private void tsbBack_Click(object sender, EventArgs e)
        {
            try
            {
                CurrentReportViewer.PerformBack();
                tsbBack.Enabled = CurrentReport.IsDrillthroughReport;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbStopAct_Click(object sender, EventArgs e)
        {
            try
            {
                CurrentReportViewer.CancelRendering(-1);
                tsbStopAct.Enabled = false;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbRefresh_Click(object sender, EventArgs e)
        {
            try
            {
                RefreshReport(CurrentReport, CurrentReportViewer);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbPrint_Click(object sender, EventArgs e)
        {
            PrintCurrentReport();
        }

        private void PrintCurrentReport()
        {
            try
            {
                CurrentReportViewer.PrintDialog();
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbLayout_Click(object sender, EventArgs e)
        {
            try
            {
                if (!tsbLayout.Checked)
                {
                    CurrentReportViewer.SetDisplayMode(DisplayMode.PrintLayout);
                    tscZoom.SelectedIndex = 1;  //Whole page
                    tstbFind.Enabled = false;
                    tsbFind.Enabled = false;
                    tsbFindNext.Enabled = false;
                }
                else
                {
                    CurrentReportViewer.SetDisplayMode(DisplayMode.Normal);
                    tscZoom.SelectedIndex = 5;  //100%
                    tstbFind.Enabled = true;
                    tsbFind.Enabled = (0 != tstbFind.Text.Length);
                }
                tsbLayout.Checked = !tsbLayout.Checked;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }

        }

        private void SearchReport()
        {
            try
            {
                tsbFindNext.Enabled = (0 != CurrentReportViewer.Find(tstbFind.Text, CurrentReportViewer.CurrentPage));
                if (!tsbFindNext.Enabled)
                    MessageBox.Show(this, sqlnexus.Properties.Resources.Msg_NotFound, sqlnexus.Properties.Resources.Msg_Nexus);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void SearchReportAgain()
        {
            try
            {
                tsbFindNext.Enabled = (0 != CurrentReportViewer.FindNext());
                if (!tsbFindNext.Enabled)
                    MessageBox.Show(this, sqlnexus.Properties.Resources.Msg_NoMoreFound, sqlnexus.Properties.Resources.Msg_Nexus);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbFind_Click(object sender, EventArgs e)
        {
            try
            {
                SearchReport();
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tstbFind_TextChanged(object sender, EventArgs e)
        {
            try
            {
                tsbFindNext.Enabled = false;
                tsbFind.Enabled = (0 != tstbFind.Text.Length);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbFindNext_Click(object sender, EventArgs e)
        {
            try
            {
                SearchReportAgain();
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tstbFind_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (e.KeyChar == '\r')
                {
                    if (tsbFindNext.Enabled)
                        SearchReportAgain();
                    else if (tsbFind.Enabled)
                        SearchReport();
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tscZoom_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                switch (tscZoom.SelectedIndex)
                {
                    case 0:
                        {
                            CurrentReportViewer.ZoomMode = ZoomMode.PageWidth;
                            break;
                        }
                    case 1:
                        {
                            CurrentReportViewer.ZoomMode = ZoomMode.FullPage;
                            break;
                        }
                    default:
                        {
                            CurrentReportViewer.ZoomMode = ZoomMode.Percent;
                            string zoomstr = tscZoom.SelectedItem.ToString();
                            zoomstr = zoomstr.Substring(0, zoomstr.Length - 1);
                            CurrentReportViewer.ZoomPercent = Convert.ToInt32(zoomstr);
                            break;
                        }
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void tsbPageSetup_Click(object sender, EventArgs e)
        {
            try
            {
                ReportPageSettings rs = CurrentReport.GetDefaultPageSettings();
                PageSettings ps = new PageSettings();
                ps.Margins = rs.Margins;
                ps.PaperSize = rs.PaperSize;
                ps_Report.PageSettings = ps;
                if (DialogResult.OK == ps_Report.ShowDialog(this))
                {
                    //TODO:  Figure out what to do here
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void excelToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ReportExportType i = ReportExportType.Excel;
            if (sender is ToolStripMenuItem)
                i = (ReportExportType)(sender as ToolStripMenuItem).MergeIndex;  //Overloaded to keep code generic
            ExportCurrentReport(i);
        }

        private void ExportCurrentReport(ReportExportType exportType)
        {
            sd_Report.FileName = "";
            sd_Report.FilterIndex = (int)exportType;
            if (DialogResult.OK == sd_Report.ShowDialog(this))
            {
                if (Path.GetExtension (sd_Report.FileName).ToUpper() != ".XLS")
                {
                    LogMessage("Only excel file type is supported", MessageOptions.All);
                    return;
                }
                ExportReport((ReportExportType)exportType, sd_Report.FileName);
            }
        }

        private void clipboardToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ExportReport(ReportExportType.Clipboard);
        }

        private void tsbDocMap_Click(object sender, EventArgs e)
        {
            CurrentReportViewer.DocumentMapCollapsed = !CurrentReportViewer.DocumentMapCollapsed;
        }

        #endregion Report toolbar syncs

        #region Explorer bar syncs

        private void pbExpandReports_Click(object sender, EventArgs e)
        {
            CollapseExpandPanel(paReportsBody, pbCollapseReports, pbExpandReports);
        }

        private void CollapseExpandPanel(Panel panel, PictureBox collapseBox, PictureBox expandBox)
        {
            panel.Visible = !panel.Visible;
            expandBox.Visible = !panel.Visible;
            collapseBox.Visible = panel.Visible;
        }

        private void pbExpandData_Click(object sender, EventArgs e)
        {
            CollapseExpandPanel(paDataBody, pbCollapseData, pbExpandData);
        }

        private void llReports_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CollapseExpandPanel(paReportsBody, pbCollapseReports, pbExpandReports);
        }

        private void llData_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CollapseExpandPanel(paDataBody, pbCollapseData, pbExpandData);
        }

        private void pbCollapseTasks_Click(object sender, EventArgs e)
        {
            CollapseExpandPanel(paTasksBody, pbCollapseTasks, pbExpandTasks);
        }

        private void llTasks_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            CollapseExpandPanel(paTasksBody, pbCollapseTasks, pbExpandTasks);
        }

        private void llPrint_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            PrintCurrentReport();
        }

        private void linkLabel8_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ExportCurrentReport(ReportExportType.Excel);
        }

        private void linkLabel7_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            MailCurrentReport();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            ExportReport(ReportExportType.Clipboard);
        }

        private void collapseAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CollapseExpandAll(true);
        }

        private void CollapseExpandAll(bool collapse)
        {
            if (paReportsBody.Visible == collapse)
                CollapseExpandPanel(paReportsBody, pbCollapseReports, pbExpandReports);
            if (paTasksBody.Visible == collapse)
                CollapseExpandPanel(paTasksBody, pbCollapseTasks, pbExpandTasks);
            if (paDataBody.Visible == collapse)
                CollapseExpandPanel(paDataBody, pbCollapseData, pbExpandData);
        }

        private void expandAllToolStripMenuItem_Click(object sender, EventArgs e)
        {
            CollapseExpandAll(false);
        }

        #endregion Explorer bar syncs

        #region Service routines
        private void SetButtonsStatus(bool bStatus)
        {
            tsbStart.Enabled = bStatus;
            tsbStop.Enabled = bStatus;
        }

        private bool UpdateServiceButtons()
        {
            bool bRes = false;
            try
            {
                scSQLDiag.Refresh();
                //If we've just now detected that it has stopped, alert the user
                if ((!tsbStart.Enabled) && (ServiceControllerStatus.Stopped == scSQLDiag.Status))
                    LogMessage(sqlnexus.Properties.Resources.Msg_ServiceStopped);
                tsbStart.Enabled = (ServiceControllerStatus.Stopped == scSQLDiag.Status);
                tsbStop.Enabled = ((!tsbStart.Enabled) && (ServiceControllerStatus.Running == scSQLDiag.Status));
                tscbAutoUpdate.Enabled = tsbStop.Enabled;
                tiReportAutoUpdate.Enabled = tsbStop.Enabled;
                bRes = true;
            }
            catch (Exception ex)
            {
                LogMessage(ex.Message, MessageOptions.Silent);
                SetButtonsStatus(false);
            }
            return bRes;
        }

        private bool CheckAndRegisterService()
        {
            bool bRes = false;
            try
            {
                if (!UpdateServiceButtons())
                {
                    if (!Util.ConnectingtoCurrentMachine(Globals.credentialMgr.Server))  //Can't register service on remote machine
                    {
                        LogMessage(sqlnexus.Properties.Resources.Msg_CantRegister, MessageOptions.Dialog);
                        return false;
                    }

                    //Check all local drives for the right sqldiag rather than 
                    //Letting the path hand us whatever it feels like
                    string exename= "sqldiag.exe";
                    foreach (string drv in System.Environment.GetLogicalDrives())
                    {
                        if (0 == string.Compare(drv, @"A:\", true, CultureInfo.InvariantCulture))
                            continue;
                        if (0 == string.Compare(drv, @"B:\", true, CultureInfo.InvariantCulture))
                            continue;
                        string pth = string.Format(@"{0}program files\microsoft sql server\90\tools\binn\", drv) + exename;
                        if (File.Exists(pth))
                        {
                            exename=pth;
                            break;
                        }
                    }
                    string regparams = "/R /I SQLNexusRealtime.xml /P \"" + Application.StartupPath + "\\Collection\" /O \"" + Application.StartupPath + string.Format("\\Collection\\Output\" /Vsqlnexusdb={0} /Asqlnexus", Globals.credentialMgr.Database);
                    ProcessStartInfo si = new ProcessStartInfo(exename, regparams);
                    si.UseShellExecute = false;
                    si.WindowStyle = ProcessWindowStyle.Hidden;
                    Process p = Process.Start(si);
                    if (null != p)
                        p.WaitForExit();
                }
                bRes = UpdateServiceButtons();
            }
            catch (Exception ex)
            {
                LogMessage(ex.Message, MessageOptions.Silent);
            }
            return bRes;
        }

        private bool InitializeService()
        {
            if (UpdateServiceButtons())
            {
                return true;
            }
            else //if not able to update button status, service may not be registered
            {
                return CheckAndRegisterService();
            }
        }

        private void tiServicePoll_Tick(object sender, EventArgs e)
        {
            try
            {
                tiServicePoll.Enabled = false;
                try
                {
                    UpdateServiceButtons();
                }
                finally
                {
                    tiServicePoll.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
                tiServicePoll.Enabled = false;
                SetButtonsStatus(false);
            }

        }

        private void tsbStart_Click(object sender, EventArgs e)
        {
            StartService();
        }

        private void StartService()
        {
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    LogMessage(sqlnexus.Properties.Resources.Msg_StartingService);
                    tiServicePoll.Enabled = true;
                    SetButtonsStatus(false);
                    scSQLDiag.Start();
                    LogMessage(sqlnexus.Properties.Resources.Msg_ServiceStarted);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void tsbStop_Click(object sender, EventArgs e)
        {
            StopService();
        }

        private void StopService()
        {
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    SetButtonsStatus(false);
                    scSQLDiag.Stop(); //Abort; Pause = controlled shutdown
                    LogMessage(sqlnexus.Properties.Resources.Msg_StoppingService);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void tiReportAutoUpdate_Tick(object sender, EventArgs e)
        {
            if (null != CurrentReport)
            {
                RefreshReport(CurrentReport, CurrentReportViewer);
            }
        }

        int[] rupdVals = new int[] { 5000, 10000, 30000, 60000, 300000, 600000, 1800000 };

        private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            tiReportAutoUpdate.Enabled = false;
            if (0 != tscbAutoUpdate.SelectedIndex)
            {
                tiReportAutoUpdate.Interval = rupdVals[tscbAutoUpdate.SelectedIndex-1];
                tiReportAutoUpdate.Enabled = true;
            }
        }

        #endregion Service routines

        #region Mail methods

        private void CreateEmail(string[] ReportFiles)
        {/*
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();

                    object FileName = Application.StartupPath + @"\Docs\Analysis.Doc";
                    System.Diagnostics.Debug.Assert(File.Exists((string)FileName));

                    app.Visible = true;
                    object m = Missing.Value;
                    app.Documents.Open(ref FileName, ref m, ref m, ref m, ref m,
                        ref m, ref m, ref m, ref m, ref m,
                        ref m, ref m, ref m, ref m,
                        ref m, ref m);
                    app.ActiveWindow.EnvelopeVisible = true;
                    foreach (string f in ReportFiles)
                    {
                        object bFalse = false;
                        object bTrue = true;
                        app.Selection.InsertFile(f, ref m, ref bFalse, ref bFalse, ref bTrue);
                    }
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }*/
        }

        private void mailCurrentReportToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MailCurrentReport();
        }

        private void MailCurrentReport()
        {
            MailReport(Globals.AppDataPath  + @"\temp\_analysis.xls");
        }

        private void MailReport(string fname)
        {
            try
            {
                ExportReport(ReportExportType.Excel, fname);
                CreateEmail(new string[] { fname });
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void mailAllReportsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            MailReports();
        }

        private void MailReports()
        {
            try
            {
                int rptcount = tcReports.TabPages.IndexOfKey("Instructions");
                if (-1 == rptcount)
                    rptcount = tcReports.TabCount;
                else
                    rptcount = tcReports.TabCount - 1;
                string[] files = new string[rptcount];

                int i = 0;
                foreach (TabPage p in tcReports.TabPages)
                {
                    if (0 == string.Compare("instructions", p.Text, true, CultureInfo.InvariantCulture))
                        continue;
                    files[i] = Application.StartupPath + @"\_" + p.Text + ".xls";
                    ExportReport(ReportExportType.Excel, files[i++]);
                }
                CreateEmail(files);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }
        #endregion Mail methods

        #region Report event syncs

        int InDrillthrough = 0;

        private void rvTemplate_Drillthrough(object sender, DrillthroughEventArgs e)
        {
            ReportViewer rv =(ReportViewer) sender ;
            //#1781
            // this is handling nasty problem when someone doubleclick the drill through
            //apparanetly reportviewer will render same report twice with doubleclick causing issues
            rv.Enabled = false;
            Cursor save = StartWaiting();
            try
            {

                // this is handling nasty problem when someone doubleclick the drill through
                //apparanetly reportviewer will render same report twice with doubleclick causing issues

                if (1 < System.Threading.Interlocked.Increment(ref InDrillthrough))
                {
                    LogMessage("Aborting drillthrough.  Another drillthrough is already in-progress.", MessageOptions.Silent);
                    return;
                }
                try
                {
                    LogMessage(sqlnexus.Properties.Resources.Msg_RVSyncDrillthrough, MessageOptions.Silent);
                    LogMessage("rvTemplate_Drillthrough - Drillthrough", MessageOptions.Silent);
                    e.Cancel = DrillThrough((LocalReport)e.Report, e.ReportPath);
                    LogMessage("rvTemplate_Drillthrough - Done with Drillthrough", MessageOptions.Silent);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
                LogMessage("rvTemplate_Drillthrough - End", MessageOptions.Silent);
            }
            finally
            {
                LogMessage("rvTemplate_Drillthrough - Finally", MessageOptions.Silent);
                StopWaiting(save);
                System.Threading.Interlocked.Decrement (ref InDrillthrough);
                rv.Enabled = true;
            }
        }

        private static Object TryMethodCall(Type type, MethodInfo method, String name, String[] args)
        {
            //Names match
            if (String.Compare(method.Name, name, false, CultureInfo.InvariantCulture) != 0)
            {
                throw new Exception(method.DeclaringType + "." + method.Name + sqlnexus.Properties.Resources.Error_MethodDoesntMatch);
            }

            //Number of parameters matches
            ParameterInfo[] param = method.GetParameters();

            if (param.Length != args.Length)
            {
                throw new Exception(method.DeclaringType + "." + method.Name + sqlnexus.Properties.Resources.Error_MethodsSigsDontMatch);
            }

            //Types convertible
            Object[] newArgs = new Object[args.Length];

            for (int index = 0; index < args.Length; index++)
            {
                try
                {
                    newArgs[index] = Convert.ChangeType(args[index], param[index].ParameterType, CultureInfo.InvariantCulture);
                }
                catch (Exception e)
                {
                    throw new Exception(method.DeclaringType + "." + method.Name + sqlnexus.Properties.Resources.Error_ArgConversionFailed, e);
                }
            }

            //Static or instance?
            Object instance = null;

            if (!method.IsStatic)
            {
                instance = Activator.CreateInstance(type);
            }

            //Invoke the method
            return method.Invoke(instance, newArgs);
        }

        private void ExecuteMethod(string[] args)
        {
            Assembly assembly;
            Type type;

            try
            {
                //Load the specified assembly and get the specified type
                if (args[0] != ".")
                    assembly = Assembly.LoadFrom(args[0]);
                else
                    assembly = Assembly.GetCallingAssembly();
                type = assembly.GetType(args[1], true);
            }
            catch (FileNotFoundException)
            {
                LogMessage(string.Format(sqlnexus.Properties.Resources.Error_NoAssembly, args[0]));
                return;
            }
            catch (TypeLoadException)
            {
                LogMessage(string.Format(sqlnexus.Properties.Resources.Error_NoType, args[1], args[0]));
                return;
            }

            //Get the type's methods
            MethodInfo[] methods = type.GetMethods();

            if (methods == null)
            {
                LogMessage(sqlnexus.Properties.Resources.Error_NoTypes);
                return;
            }

            //Create a new array for the call's args
            String[] newArgs = new String[args.Length - 3];

            if (newArgs.Length != 0)
            {
                Array.Copy(args, 3, newArgs, 0, newArgs.Length);
            }

            //Try each method for a match
            StringBuilder failureExcuses = new StringBuilder();

            foreach (MethodInfo m in methods)
            {
                Object obj = null;

                try
                {
                    obj = TryMethodCall(type, m, args[2], newArgs);
                }
                catch (Exception e)
                {
                    failureExcuses.Append(e.Message + "\r\n");
                    continue;
                }

                return;
            }
            LogMessage(sqlnexus.Properties.Resources.Error_NoMethod, MessageOptions.Dialog);
            LogMessage(failureExcuses.ToString(), MessageOptions.Silent);
        }

        private void rvTemplate_Hyperlink(object sender, HyperlinkEventArgs e)
        {
            try
            {
                //TODO: Put hyperlink code here
                LogMessage(sqlnexus.Properties.Resources.Msg_RVSyncLink, MessageOptions.Silent);
                const string ourtoken = "sqlnexus://";
                if (0==string.Compare(e.Hyperlink.Substring(0,ourtoken.Length),ourtoken,true, CultureInfo.InvariantCulture))
                {
                    e.Cancel = true;
                    string[] parts = e.Hyperlink.Substring(ourtoken.Length).Split('/');
                    if (parts.Length<3)
                    {
                        LogMessage(sqlnexus.Properties.Resources.Error_InvalidURL, MessageOptions.Dialog);
                        return;
                    }
                    ExecuteMethod(parts);
                }
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void rvTemplate_Toggle(object sender, CancelEventArgs e)
        {
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    //TODO:  Put Toggle  here
                    LogMessage(sqlnexus.Properties.Resources.Msg_RVSyncToggle, MessageOptions.Silent);

                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void rvTemplate_ReportRefresh(object sender, CancelEventArgs e)
        {
             Cursor save = StartWaiting();
            try
            {
                try
                {
                    LogMessage(sqlnexus.Properties.Resources.Msg_RVSyncRefresh, MessageOptions.Silent);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void rvTemplate_Back(object sender, BackEventArgs e)
        {
            Cursor save = StartWaiting();
            try
            {
                try
                {
                    //TODO:  Put Back code here
                    LogMessage(sqlnexus.Properties.Resources.Msg_RVSyncBack, MessageOptions.Silent);
                }
                catch (Exception ex)
                {
                    Globals.HandleException(ex, this, this);
                }
            }
            finally
            {
                StopWaiting(save);
            }
        }

        private void rvTemplate_RenderingComplete(object sender, RenderingCompleteEventArgs e)
        {
            try
            {
                UpdateReportButtons();
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void rvTemplate_RenderingBegin(object sender, CancelEventArgs e)
        {
            try
            {
                tsbStopAct.Enabled = true;
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
        }

        private void rvTemplate_ReportError(object sender, ReportErrorEventArgs e)
        {
            Globals.HandleException(e.Exception,null,this);
            e.Handled = true;
        }

        void ProcessSubreport(object sender, SubreportProcessingEventArgs e)
        {
            string filename = "";
            try
            {
                filename = GetFullReportPath(e.ReportPath, RDL_EXT);
            }
            catch (ArgumentException ex)
            {   // ArgEx thrown if filename does not exist.  
                // Report may be RDLC, not RDL -- we'll try again with that extension. 
                LogMessage (ex.ToString(), MessageOptions.Silent);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }

            try
            {
                if (!File.Exists(filename))
                {
                    filename = GetFullReportPath(e.ReportPath, RDLC_EXT);
                }

                FixupDataSources(filename, e.ReportPath, e.DataSources, e.Parameters);
            }
            catch (Exception ex)
            {
                Globals.HandleException(ex, this, this);
            }
       }

        private void rvTemplate_Click(object sender, EventArgs e)
        {
            menuBarMain.Visible = mainMenuToolStripMenuItem.Checked;
        }


        #endregion Report event syncs

        private void importToolStripMenuItem_Click(object sender, EventArgs e)
        {
        

            if (null == fmImportForm || fmImportForm.IsDisposed) 
            {
                fmImportForm = new fmImport(this);
                fmImportForm.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.fmNexus_FormClosed);
                fmImportForm.Show(this);
            }
            else
            {
                if (fmImportForm.WindowState == FormWindowState.Minimized)
                    fmImportForm.WindowState = FormWindowState.Normal;
                else
                    if (!fmImportForm.Visible)
                        fmImportForm.Show(this);
                fmImportForm.BringToFront();
            }
        }

        private void fmNexus_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (sender is fmImport)
                fmImportForm = null;
        }

    
       

        private void tsiShowReportTabs_Click(object sender, EventArgs e)
        {
            ToggleTabs(this.tsiShowReportTabs.Checked);
        }

        private void ToggleTabs(bool tabsenabled)
        {
            if (!tabsenabled)
            {
                tcReports.SizeMode = TabSizeMode.Fixed;
                tcReports.ItemSize = new Size(0, 1);
            }
            else
            {
                tcReports.SizeMode = TabSizeMode.Normal;
                tcReports.ItemSize = new Size(58, 18);  // Default tab size
            }
        }

        private void toolbarReport_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {

        }

        private void tcReports_SelectedIndexChanged_1(object sender, EventArgs e)
        {

        }

        private void linkLabel6_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            if (Globals.credentialMgr.Database.ToUpper() == "TEMPDB")
            {
                MessageBox.Show("Warning: You are using tempdb to import data");
            }
        }
        
        private bool CreateDB(String dbName)
        {
            
            Regex re = new Regex(@"((;|\[|\]|\s)+)|(^master$|^tempdb$|^msdb$|^model$)+");
            if (re.IsMatch(dbName))
            {
                LogMessage (String.Format("invalid database name {0} entered. try again",dbName), MessageOptions.All);
                return false;
            }
            Globals.credentialMgr.Database = "master";
            
            SqlConnection conn = new SqlConnection(Globals.credentialMgr.ConnectionString);
            SqlCommand cmd = conn.CreateCommand();
            bool success = true;
            cmd.CommandText = String.Format(SQLScripts.CreateDB, dbName);
            try
            {
                conn.Open();
                cmd.ExecuteNonQuery();
            }
            catch (SqlException sqlEx)
            {
                success = false;
                string dlgTitle = "Database Creation Failure";

                if (dbName.ToUpper() == "SQLNEXUS")
                {
                    LogMessage(String.Format(Properties.Resources.Error_Nexus_CreateDBFailure, dbName, Globals.credentialMgr.Server, sqlEx.Message), MessageOptions.Silent, TraceEventType.Error, dlgTitle);
                }
                else
                {
                    LogMessage(String.Format(Properties.Resources.Error_Nexus_CreateDBFailure, dbName, Globals.credentialMgr.Server, sqlEx.Message), MessageOptions.All, TraceEventType.Error, dlgTitle);
                }

            }
            finally
            {
                conn.Close();
            }
            if (success)
            {
                Globals.credentialMgr.Database = dbName;
                PopulateDatabaseList(dbName);
            }
            else
            {
                if (dbName.ToUpper() == "SQLNEXUS")
                {
                    LogMessage("Create database \"" + dbName + "\"" + " failed. Switching to use tempdb. But you can switch to other available databases", MessageOptions.Silent);
                }
                else
                {
                    LogMessage("Create database \"" + dbName + "\"" + " failed. Switching to use tempdb. But you can switch to other available databases", MessageOptions.All);
                }
                Globals.credentialMgr.Database = "tempdb";
                PopulateDatabaseList("tempdb");
            }

            //alwasy return true because we want to use tempdb instead
            return true; 

        }

        private void tscCurrentDatabase_TextChanged(object sender, EventArgs e)
        {

            
        }

        private void tscCurrentDatabase_SelectedIndexChanged(object sender, EventArgs e)
        {
            
            if (tscCurrentDatabase.SelectedItem.ToString() == "<New Database>")
            {
                String CurrentDatabase = Globals.credentialMgr.Database;

                String NewDBName =Microsoft.VisualBasic.Interaction.InputBox("Enter your database name", "Database Name", "", this.Location.X + this.Size.Width / 2, this.Location.Y + this.Size.Height / 2);
                if (NewDBName.Trim().Length == 0)
                {
                    PopulateDatabaseList(CurrentDatabase);
                    return;
                }
                bool createDB = CreateDB(NewDBName);
                
                if (createDB)
                    PopulateDatabaseList(NewDBName);
                else
                    PopulateDatabaseList("sqlnexus");
                 
            }
            else
            {
                refreshAfterDBChange();
            }
        }

        private void refreshAfterDBChange()
        {
            Globals.credentialMgr.Database = tscCurrentDatabase.SelectedItem.ToString();
            CloseAll();
            EnumReports();
            if (0 != tvReports.Nodes.Count)
                tvReports.SelectedNode = tvReports.Nodes[0];
            ShowHideUIElements();
            Application.DoEvents();
        }

        private void tsb_CustomRowset_Click(object sender, EventArgs e)
        {
            fmCustomRowset fm = new fmCustomRowset(this);
            fm.Show();
        }

        private void tscCurrentDatabase_Click(object sender, EventArgs e)
        {

        }

        private void ll_CustomRowset_Click(object sender, EventArgs e)
        {
            fmCustomRowset fm = new fmCustomRowset(this);
            fm.Show();
        }

        private void t(object sender, EventArgs e)
        {

        }

        private void linkLabel3_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {

        }

        private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            //ProcessStartInfo pi = new ProcessStartInfo ("notepad.exe", Util.Env.ReadTraceLogFile
        }

        private void llOpenNexusLog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Util.OpenFile(Util.Env.NexusLogFile, " ");
            
        }

        private void llOpenReadTraceLog_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Util.OpenFile(Util.Env.ReadTraceLogFile, "You need to run import at least once in order to generate this file");

        }

        private void picOpenNexusLog_Click(object sender, EventArgs e)
        {
            Util.OpenFile(Util.Env.NexusLogFile, " ");
        }

        private void picOpenReadTraceLog_Click(object sender, EventArgs e)
        {
            Util.OpenFile(Util.Env.ReadTraceLogFile, "You need to run import at least once in order to generate this file");

        }

        private void tscCurrentDatabase_TextUpdate(object sender, EventArgs e)
        {
            //MessageBox.Show(tscCurrentDatabase.Text);
        }

        private void tscCurrentDatabase_Leave(object sender, EventArgs e)
        {
           // PopulateDatabaseList(tscCurrentDatabase.Text);
           // tscCurrentDatabase.SelectedItem = tscCurrentDatabase.Text;

            
            //refreshAfterDBChange();
        }

        private void tscCurrentDatabase_KeyPress(object sender, KeyPressEventArgs e)
        {
            
          //  keypressed(sender, e);

          

        }

        private void keypressed(Object o, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)Keys.Return || e.KeyChar==Convert.ToChar(103))
            {
                PopulateDatabaseList(tscCurrentDatabase.Text);
                //tscCurrentDatabase.SelectedItem = tscCurrentDatabase.Text;
                e.Handled = true;
            }
        }

        private void tscCurrentDatabase_KeyUp(object sender, KeyEventArgs e)
        {

            if (e.KeyCode == Keys.Return )
            {
                PopulateDatabaseList(tscCurrentDatabase.Text);
                //tscCurrentDatabase.SelectedItem = tscCurrentDatabase.Text;
                e.Handled = true;
            }

        }

        private void linkLabel6_LocationChanged(object sender, EventArgs e)
        {

        }

        private void linkLabel2_LinkClicked_1(object sender, LinkLabelLinkClickedEventArgs e)
        {
            Globals.LuanchPowerBI();
        }

        private void pictureBox3_Click(object sender, EventArgs e)
        {
            Globals.LuanchPowerBI();
        }

    }