Пример #1
0
        /// <summary>
        /// Handle custom buttons on tabbed view panel
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void TabDockPanel_CustomButtonClick(object sender, ButtonEventArgs e)
        {
            DockPanel dp, pp;

            dp = sender as DockPanel;
            CustomHeaderButton chb = e.Button as CustomHeaderButton;

            if (dp == null || chb == null)
            {
                return;
            }
            string buttonName = (chb.Tag != null) ? chb.Tag.ToString() : "";

            if (buttonName == "Restore")             // convert from tabbed form back to previous form
            {
                ResultsPage.TabbedLayout = false;    // no longer in tabbed layout
                LayoutAndRenderViews();              // restore previous layout
                QueryResultsControl qrc = QueryResultsControl.GetQrcThatContainsControl(this);
                if (qrc != null)
                {
                    qrc.SetCurrentPageTabTitleAndImage();                              // update the page tab
                }
            }

            else if (buttonName == "Close")
            {
                ViewDockPanel_CustomButtonClick(dp, e);
            }

            else
            {
                return;
            }
        }
Пример #2
0
        public void SetupQueryResultsControlForResultsDisplay(
            QueryManager qm)
        {
            Progress.Hide();             // hide any progress so popup gets focus

            //string title = qm.Query.UserObject.Name;

            //PopupResults pr = new PopupResults();
            //UIMisc.PositionPopupForm(pr);
            //pr.Text = title;

            QueryResultsControl qrc = QueryResultsControl;

            qm.LinkMember(qrc);
            Query q = qm.Query;

            if (SetupQueryResultsControlMethod != null)
            {
                SetupQueryResultsControlMethod();                                                     // let parent know that we're setting up the QueryResultsControl
            }
            qrc.BuildResultsPagesTabs(q);

            if (q.ResultsPages.Pages.Count <= 1)             // hide tabs if only one
            {
                qrc.ResultsLabel.Visible = qrc.Tabs.Visible = false;
            }

            //qrc.ConfigureResultsPage(0); // render the first page
            qrc.SelectPage(q.InitialBrowsePage);             // show the initial browse page
        }
Пример #3
0
        /// <summary>
        /// Allocate a new MoleculeGridPageControl
        /// and link into any associated QueryResultsContol
        /// </summary>
        /// <param name="qm"></param>
        /// <param name="container"></param>
        /// <returns></returns>

        public static MoleculeGridPageControl AllocateNewMoleculeGridPageControl(
            QueryManager qm,
            Control container)
        {
            QueryResultsControl     qrc = null;
            PopupGrid               pug = null;
            MoleculeGridPageControl page;
            MoleculeGridPanel       panel;
            MoleculeGridControl     grid;

            Query         q  = qm.Query;
            ResultsFormat rf = qm.ResultsFormat;

            page = new MoleculeGridPageControl();             // Create a new, clean page, panel and grids

            panel = page.MoleculeGridPanel;
            grid  = panel.SelectBaseGridViewGrid(qm);
            qm.LinkMember(grid);             // link grid into qm
            grid.ShowCheckMarkCol = q.ShowGridCheckBoxes;

            if (container is QueryResultsControl && rf.NotPopupOutputFormContext)             // normal query results
            {
                qrc = container as QueryResultsControl;
                qrc.RemoveExistingControlsFromResultsPageControlContainer(); // properly dispose of any existing DevExpress controls

                qrc.MoleculeGridPageControl = page;                          // link query results to this page
                qrc.ResultsPageControlContainer.Controls.Add(page);
                page.Dock = DockStyle.Fill;
            }

            return(page);
        }
Пример #4
0
        public static bool TryGetQrcAndQm(
            Control qrcContainingCtl,
            out QueryResultsControl qrc,
            out QueryManager qm)
        {
            ContainerControl cc;

            qrc = null;
            qm  = null;

            if (!WindowsHelper.FindContainerControl(qrcContainingCtl, typeof(QueryResultsControl), out cc))             // find the QRC that we are contained in
            {
                return(false);
            }

            qrc = cc as QueryResultsControl;
            if (qrc == null)
            {
                return(false);
            }

            qm = qrc?.BaseQuery?.QueryManager as QueryManager;
            if (qm == null)
            {
                return(false);
            }

            return(true);
        }
Пример #5
0
        /// <summary>
        /// Filter type selected, may be the same or different
        /// </summary>
        /// <param name="ft"></param>

        void FilterTypeSelected(FilterType ft)
        {
            ColumnInfo ci = Qm.ResultsFormat.GetColumnInfo(ActiveQueryColumn);

            QueryResultsControl.GetQrcThatContainsControl(this).ChangeFilterType(ci, ft);

            Render();
        }
Пример #6
0
        /// <summary>
        /// Get the QueryResultsControl associated with the view rendering control
        /// </summary>
        /// <returns></returns>

        QueryResultsControl GetQrc()
        {
            if (Qm != null && Qm.QueryResultsControl != null)
            {
                return(Qm.QueryResultsControl);
            }

            return(QueryResultsControl.GetQrcThatContainsControl(RenderingControl));
        }
Пример #7
0
        /// <summary>
        /// Free resources linked to this instance
        /// </summary>

        public void Dispose()
        {
            try
            {
                DisposeOfControls();

                if (Query != null)
                {
                    Query.FreeControlReferences();                                // just free control references
                }
                if (MoleculeGrid != null)
                {
                    MoleculeGrid.Dispose();
                }
                if (QueryEngine != null)
                {
                    QueryEngine.Dispose();
                }
                if (DataTableManager != null)
                {
                    DataTableManager.Dispose();
                }

                if (ResultsFormat != null)
                {
                    ResultsFormat.QueryManager = null;
                }
                if (ResultsFormatter != null)
                {
                    ResultsFormatter.QueryManager = null;
                }
                if (StatusBarManager != null)
                {
                    StatusBarManager.QueryManager = null;
                }
                if (QueryExec != null)
                {
                    QueryExec.QueryManager = null;
                }

                QueryResultsControl = null;
                Query            = null;
                DataTableManager = null;
                DataTable        = null;
                ResultsFormat    = null;
                ResultsFormatter = null;
                StatusBarManager = null;
                MoleculeGrid     = null;
                QueryExec        = null;
                QueryEngine      = null;
            }

            catch (Exception ex)
            {
                DebugLog.Message(DebugLog.FormatExceptionMessage(ex));
            }
        }
Пример #8
0
        /// <summary>
        /// Layout and render the page in the specified layout format
        /// </summary>
        /// <param name="layout"></param>

        internal void CreateStandardLayoutAndRenderViews(
            ViewLayout layout)
        {
            XtraPanel viewPanel;             // panel that contains current view control and is contained in a docking panel or directly in the views panel if single view on page

            ResultsPage page = ResultsPage;

            if (page == null)
            {
                return;
            }

            List <ResultsViewProps> views = page.Views;

            if (views.Count == 0)             // just have a single blank panel if no views
            {
                RenderEmptyPage();
                return;
            }

            UIMisc.EnteringSetup();

            //Visible = false;
            SuspendLayout();             // suspend layout while building

            if (layout == ViewLayout.RowsAndCols)
            {
                CreateRowsAndColsLayoutAndRenderViews();
            }

            else             // other common type view
            {
                CreateCommonLayoutAndRenderViews(layout);
            }

            DockPanel dp = DockManager.ActivePanel;             // get the active dock panel associated with current view

            RenderViews();

            ResumeLayout();
            //Visible = true;

            SaveLayout();

            FocusActiveView();

            QueryResultsControl qrc = QueryResultsControl.GetQrcThatContainsControl(this);

            if (qrc != null)
            {
                qrc.SetCurrentPageTabTitleAndImage();                          // update the page tab
            }
            UIMisc.LeavingSetup();

            return;
        }
Пример #9
0
        /// <summary>
        /// Display filter string & associated controls
        /// </summary>
        /// <param name="filterString"></param>

        public void DisplayFilterString(bool show)
        {
            if (Qrc == null || Qrc.CrvQm == null)
            {
                return;
            }

            try
            {
                Query  q            = Qrc.CrvQm.Query;
                string filterString = q.BuildSecondaryFilterString();
                if (!String.IsNullOrEmpty(filterString))
                {
                    filterString = "Filters: " + filterString;
                }
                QueryResultsControl rvc = Qrc;

                BarItemVisibility biv;

                if (String.IsNullOrEmpty(filterString) || !show)
                {
                    biv = BarItemVisibility.Never;
                }
                else
                {
                    biv = BarItemVisibility.Always;
                }

                if (ClearFiltersCtl != null)                 // add handler for button that clears filters
                {
                    ClearFiltersCtl.Visibility = biv;
                }

                if (FiltersEnabledCtl != null)
                {
                    FiltersEnabledCtl.Visibility = biv;
                    FiltersEnabledCtl.EditValue  = Qrc.CrvQm.DataTableManager.FiltersEnabled;
                }

                if (FilterStringCtl != null)
                {
                    FilterStringCtl.Caption    = filterString;
                    FilterStringCtl.Visibility = biv;
                }
            }

            catch (Exception ex)
            {
                LastException = ex;
            }

            return;
        }
Пример #10
0
        static void RemoveTentativeView(
            ResultsViewProps view,
            QueryResultsControl qrc)
        {
            ResultsPage page = view.ResultsPage;

            page.Views.Remove(view);

            int qti = qrc.Tabs.SelectedTabPageIndex;

            qrc.RemoveTabAndPage(qti);
        }
Пример #11
0
/// <summary>
/// Gets the QueryManager for the current view for the QRC that contains the specified control
/// </summary>
/// <param name="ctl"></param>
/// <returns></returns>

        public static QueryManager GetCurrentViewQm(Control ctl)
        {
            QueryResultsControl qrc = GetQrcThatContainsControl(ctl);

            if (qrc != null)
            {
                return(qrc.CrvQm);
            }
            else
            {
                return(null);
            }
        }
Пример #12
0
        /// <summary>
        /// Show as a menu
        /// </summary>
        /// <param name="qrc"></param>
        /// <param name="qm"></param>
        /// <param name="location"></param>
        /// <returns></returns>

        public static void ShowPopupMenu(
            QueryResultsControl qrc,
            QueryManager qm,
            Point location)
        {
            ViewTypeSelectionMenu vtsd = new ViewTypeSelectionMenu();

            vtsd.Qrc      = qrc;
            vtsd.Qm       = qm;
            vtsd.Location = location;             // position the form
            vtsd.Size     = new Size(2, 2);       // make smaller so hidden behind menu
            vtsd.Show(SessionManager.ActiveForm);
            return;
        }
Пример #13
0
        private void RemoveFilterMenuItem_Click(object sender, EventArgs e)
        {
            ActiveQueryColumn.SecondaryFilterType = FilterType.Unknown;
            ActiveQueryColumn.SecondaryCriteria   = ActiveQueryColumn.SecondaryCriteriaDisplay = "";
            if (QueryResultsControl.GetQrcThatContainsControl(this) != null)
            {
                ColumnInfo colInfo = ResultsFormat.GetColumnInfo(Qm, ActiveQueryColumn);
                QueryResultsControl.GetQrcThatContainsControl(this).UpdateFiltering(colInfo);
            }

            FilterBasicCriteriaControl.SyncBaseQuerySecondaryCriteria(ActiveQueryColumn);             // sync any base query

            Render();
        }
Пример #14
0
/// <summary>
/// Show the specified query in a new PopupResults form
/// </summary>
/// <param name="qm"></param>
/// <param name="html"></param>
/// <param name="title"></param>

        public static void ShowHtml(         // navigate browser to a document
            QueryManager qm,
            string html,
            string title)
        {
            string uri;
            int    pi;

            Progress.Hide();             // hide any progress so popup gets focus

            uri = ClientDirs.TempDir + @"\PopupResults" + "1" + ".htm";

            StreamWriter sw = new StreamWriter(uri);

            sw.Write(html);
            sw.Close();

            PopupResults pr = new PopupResults();

            UIMisc.PositionPopupForm(pr);
            pr.Text = title;

            QueryResultsControl qrc = pr.QueryResultsControl;

            qm.LinkMember(qrc);
            Query q = qm.Query;

            qrc.BuildResultsPagesTabs(q);

            for (pi = 0; pi < q.ResultsPages.Pages.Count; pi++)
            {
                ResultsPage page = q.ResultsPages.Pages[pi];
                for (int vi = 0; vi < page.Views.Count; vi++)
                {
                    ResultsViewProps view = page.Views[vi];
                    if (view.ViewType == ResultsViewType.HtmlTable)
                    {
                        view.Title      = title;
                        view.ContentUri = uri;                         // plug in file name for uri
                    }
                }
            }

            pr.Show();
            qrc.ConfigureResultsPage(0);             // render the first page

            UIMisc.BringFormToFront(pr);
            return;
        }
Пример #15
0
/// <summary>
/// Process input
/// </summary>

        void ProcessInput()
        {
            CfSummaryView view = null;             // todo...

            QueryResultsControl qrc = QueryResultsControl.GetQrcThatContainsControl(view.RenderingControl);

            RootQm = Qrc.CrvQm;
            Query rootQuery = RootQm.Query;

            Query subQuery = BuildQuery();

            RootQm.Query.Subqueries.Add(subQuery); // add subquery to Parent
            subQuery.Parent = rootQuery;           // link subquery to parent query
            view.BaseQuery  = subQuery;            // link view to subquery
        }
Пример #16
0
        /// <summary>
        /// Show popup results in a results window
        /// </summary>
        /// <param name="qm"></param>
        /// <param name="title"></param>

        public static void Show(
            QueryManager qm)
        {
            string uri;
            int    pi, posDelta = 20;

            Progress.Hide();             // hide any progress so popup gets focus

            string title = qm.Query.UserObject.Name;

            PopupResults pr = new PopupResults();

            UIMisc.PositionPopupForm(pr);
            pr.Text = title;

            QueryResultsControl qrc = pr.QueryResultsControl;

            qm.LinkMember(qrc);
            Query q = qm.Query;

            qrc.BuildResultsPagesTabs(q);

            if (q.ResultsPages.Pages.Count <= 1)             // hide tabs if only one
            {
                qrc.ResultsLabel.Visible = qrc.Tabs.Visible = false;
            }


            //qrc.ToolPanel.Visible = false; // hide tools for now (e.g. Edit Query)

            //if (q.ResultsPages.Pages.Count <= 1) // hide tabs if only one
            //{
            //	PanelControl pc = qrc.ResultsPagePanelContainer;
            //	int delta = pc.Top;
            //	pc.Top = 0;
            //	pc.Height += delta;
            //}

            pr.Show();
            //qrc.ConfigureResultsPage(0); // render the first page
            qrc.SelectPage(q.InitialBrowsePage);             // show the initial browse page

            UIMisc.BringFormToFront(pr);
            return;
        }
Пример #17
0
        /// <summary>
        /// Get any CustomExitingQueryResultsCallback associated with the supplied control
        /// </summary>
        /// <param name="qrcContainingCtl"></param>
        /// <returns></returns>
        public static ExitingQueryResultsDelegate GetCustomExitingQueryResultsCallback(
            Control qrcContainingCtl,
            out QueryResultsControl qrc,
            bool clearValueAfterGetting = false)
        {
            QueryManager qm;

            if (!TryGetQrcAndQm(qrcContainingCtl, out qrc, out qm))
            {
                return(null);
            }

            ExitingQueryResultsDelegate callback = qm?.ResultsFormat?.CustomExitingQueryResultsCallback; // get any callback ref

            if (clearValueAfterGetting && callback != null)                                              // clear call back so not called agin
            {
                qm.ResultsFormat.CustomExitingQueryResultsCallback = null;
            }

            return(callback);
        }
Пример #18
0
/// <summary>
/// Show the dialog and create and display the chart
/// </summary>
/// <param name="chartEx"></param>
/// <param name="tabName"></param>
/// <returns></returns>

        public static DialogResult ShowDialog(
            ResultsViewProps view,
            string tabName)
        {
            DialogResult dr;

            if (Instance == null)
            {
                Instance = new AssayResultsHeatMapDialog();
            }
            AssayResultsHeatMapDialog i = Instance;

            i.View = view as AssayResultsHeatMapView;
            i.Qrc  = QueryResultsControl.GetQrcThatContainsControl(view.RenderingControl);

            if (!view.IsDefined)             // initialize first time
            {
                i.Initializing = true;
                dr             = i.InitializeChart();
                if (dr == DialogResult.Cancel)
                {
                    return(dr);
                }
            }

            else
            {
                i.Initializing = false;
            }

            i.Qm1 = view.BaseQuery.Parent.QueryManager as QueryManager;      // root Qm
            i.Qm2 = view.BaseQuery.QueryManager as QueryManager;             // Qm for summarized data
            i.SetupForm();
            dr = i.ShowDialog(SessionManager.ActiveForm);
            return(dr);
        }
Пример #19
0
/// <summary>
/// Add a new filter
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>

        private void AddFilterButton_Click(object sender, EventArgs e)
        {
            QueryColumn qc = null;

            FieldSelectorControl fieldSelector = new FieldSelectorControl();
            Point p = new Point(AddFilterButton.Left, AddFilterButton.Bottom);

            p = this.PointToScreen(p);

            SelectColumnOptions flags = new SelectColumnOptions();

            flags.SearchableOnly      = true;
            flags.FirstTableKeyOnly   = true;
            flags.SelectFromQueryOnly = true;
            DialogResult dr = fieldSelector.SelectColumnFromQuery(Qm.Query, null, flags, p.X, p.Y, out qc);

            if (dr != DialogResult.OK)
            {
                return;
            }

            if (qc.SecondaryFilterType != FilterType.Unknown)
            {
            }                                                                 // already have a filter
            if (qc.MetaColumn.DataType == MetaColumnType.Structure)
            {
                qc.SecondaryFilterType = FilterType.StructureSearch;
            }

            else
            {
                ColumnStatistics stats = null;
                if (Qm != null && Qm.DataTableManager != null)
                {
                    stats = Qm.DataTableManager.GetStats(qc);
                }
                if (stats != null && stats.DistinctValueList.Count <= 10)
                {
                    qc.SecondaryFilterType = FilterType.CheckBoxList;
                }
                else if (qc.MetaColumn.IsNumeric)
                {
                    qc.SecondaryFilterType = FilterType.RangeSlider;
                }
                else
                {
                    qc.SecondaryFilterType = FilterType.BasicCriteria;
                }
            }

            ActiveQueryColumn = qc;

            if (!Qm.DataTableManager.FiltersEnabled)             // be sure filters are enabled & view also
            {
                Qm.DataTableManager.FiltersEnabled = true;
                Qm.DataTableManager.ApplyFilters();
                Qm.DataTableManager.UpdateFilterState();
                QueryResultsControl.GetQrcThatContainsControl(this).UpdateFilteredViews();
            }

            Render();
        }
Пример #20
0
/// <summary>
/// Configure the results page control for the current page
/// </summary>
/// <param name="qrc"></param>
/// <param name="page"></param>
/// <returns></returns>

        static internal ResultsPageControl Configure(
            QueryResultsControl qrc,
            ResultsPage page)
        {
            qrc.RemoveExistingControlsFromResultsPageControlContainer(); // properly dispose of any existing DevExpress controls

            ResultsPageControl rpc = new ResultsPageControl();           // page control with common tools and display area

            qrc.ResultsPageControl = rpc;                                // link the QueryResultsControl to rpc
            rpc.ResultsPage        = page;                               // set the page that the rpc references

            PanelControl     commonTools = rpc.Tools;                    // the array of common tools
            ResultsPagePanel rpp         = rpc.ResultsPagePanel;         // panel containing the display, filters and DoD panels

            page.ResultsPagePanel = rpp;

            //PanelControl rppc = qrc.ResultsPageControlContainer; // panel that contains the dock panels and rendering controls for the associated page views (1 per dock panel)
            //QueryResultsControl.DisposeOfChildMobiusControls(rppc); // properly dispose of any existing DevExpress controls
            //rppc.Controls.Clear(); // clear the view while building

            PanelControl rppc = qrc.ResultsPageControlContainer; // panel that contains the dock panels and rendering controls for the associated page views (1 per dock panel)

            rpp.Location = new Point(0, 0);                      // make the rpp the same size as rppc before adding it to avoid a resize
            rpp.Size     = rppc.Size;
            rpp.Visible  = false;                                // don't make visible until later
            rpp.Parent   = rppc;                                 // associate to parent before added to parent

            ViewsPanel viewsPanel = rpp.ViewsPanel;              // Views DockPanels and their contained rendering controls go in here

            Query q = qrc.CrvQuery;                              // be sure we have a base QM

            if (q != null)
            {             // be sure the QueryManager is complete
                QueryManager qm = q.QueryManager as QueryManager;

                if (qm == null)                 // allocate query manager if needed
                {
                    qm             = new QueryManager();
                    q.QueryManager = qm;
                    qm.LinkMember(q);
                }

                qm.CompleteInitialization(OutputDest.WinForms); // be sure QueryManager is complete
                qm.LinkMember(qrc);                             // be sure qrc is linked to qm
            }

            ////rpp.SuspendLayout();
            ////rppc.Controls.Add(rpp); // add the results page panel to the page container panel (needed to look up control tree to get Qrc)

            if (page.ShowFilterPanel)
            {
                rpp.RenderFilterPanel();
                rpp.FiltersDockPanel.Visibility = DockVisibility.Visible;
            }
            else
            {
                rpp.FiltersDockPanel.Visibility = DockVisibility.Hidden;
            }

            if (page.ShowDetailsOnDemand)
            {
                rpp.RenderDetailsOnDemandPanel();
                rpp.DodDockPanel.Visibility = DockVisibility.Visible;
            }
            else
            {
                rpp.DodDockPanel.Visibility = DockVisibility.Hidden;
            }

            bool showBeforeLayout = (page.Views.Count == 1 && page.Views[0].ViewType == ResultsViewType.Spotfire);

            if (showBeforeLayout)
            {
                rpp.Visible = true;
                rppc.Controls.Add(rpp);                 // add the results page panel to the page container panel
                rpp.Dock = DockStyle.Fill;
                rpp.ViewsPanel.LayoutAndRenderViews();  // add the data views
            }

            else                                       // layout before showing
            {
                rpp.ViewsPanel.LayoutAndRenderViews(); // add the data views
                rpp.Visible = true;
                rppc.Controls.Add(rpp);                // add the results page panel to the page container panel
            }

            ////rpp.ResumeLayout();

            rpp.ViewsPanel.FocusActiveView();

            return(rpc);
        }
Пример #21
0
        /// <summary>
        /// Link in QueryManager member
        /// </summary>
        /// <param name="qrc"></param>

        public void LinkMember(QueryResultsControl qrc)
        {
            QueryResultsControl = qrc;
            //qrc.QueryManager = this; (the Qrc Qm is now associated with the current view for the Qrc, i.e. there are multiple QMs for a Qrc
        }
Пример #22
0
        /// <summary>
        /// Format grid and show the data
        /// </summary>
        /// <param name="qm"></param>
        /// <param name="container">Either a QueryResultsControl or a PopupGrid</param>

        public static void ConfigureAndShow(
            QueryManager qm,
            Control container)
        {
            QueryResultsControl     qrc = null;
            PopupGrid               pug = null;
            MoleculeGridPageControl page;
            MoleculeGridPanel       panel;
            MoleculeGridControl     grid;

            Query         q  = qm.Query;
            ResultsFormat rf = qm.ResultsFormat;

            //qm.QueryResultsControl = null;

            page = new MoleculeGridPageControl();             // Create a new, clean page, panel and grids

            panel = page.MoleculeGridPanel;
            grid  = panel.SelectBaseGridViewGrid(qm);
            qm.LinkMember(grid);             // link grid into qm
            grid.ShowCheckMarkCol = q.ShowGridCheckBoxes;

            DataTableMx dt = qm.DataTable;                                        // save ref to data table

            grid.DataSource = null;                                               // clear source for header build
            qm.DataTable    = dt;                                                 // restore data table
            grid.FormatGridHeaders(qm.ResultsFormat);                             // qm.MoleculeGrid.V.Columns.Count should be set for proper cols

            if (container is QueryResultsControl && rf.NotPopupOutputFormContext) // normal query results
            {
                qrc = container as QueryResultsControl;
                qrc.RemoveExistingControlsFromResultsPageControlContainer(); // properly dispose of any existing DevExpress controls

                qrc.MoleculeGridPageControl = page;                          // link query results to this page
                qrc.ResultsPageControlContainer.Controls.Add(page);
                page.Dock = DockStyle.Fill;
                //qm.QueryResultsControl = qrc; // link view set into query manager (used for filtering)

                if (q.Parent == null)                 // switch display to browse mode if root query
                {
                    QbUtil.SetMode(QueryMode.Browse, q);
                }

                if (rf.Query.LogicType == QueryLogicType.And)                 // log grid query by logic type
                {
                    UsageDao.LogEvent("QueryGridAnd", "");
                }
                else if (rf.Query.LogicType == QueryLogicType.Or)
                {
                    UsageDao.LogEvent("QueryGridOr", "");
                }
                else if (rf.Query.LogicType == QueryLogicType.Complex)
                {
                    UsageDao.LogEvent("QueryGridComplex", "");
                }
            }

            else if (container is PopupGrid || rf.PopupOutputFormContext)             // popup results
            {
                if (container is PopupGrid)
                {
                    pug = container as PopupGrid;
                }

                else                 // create a popup
                {
                    pug      = new PopupGrid(qm);
                    pug.Text = q.UserObject.Name;
                }

                if (pug.Controls.ContainsKey(panel.Name))                 // remove any existing panel control
                {
                    pug.Controls.RemoveByKey(panel.Name);
                }
                pug.Controls.Add(panel);
                pug.MoleculeGridPanel = panel;                 // restore direct link as well

                grid.ScaleView(q.ViewScale);
                UIMisc.PositionPopupForm(pug);
                pug.Text = q.UserObject.Name;
                pug.Show();
            }

            else
            {
                throw new Exception("Invalid container type: " + container.GetType());
            }

            // Set the DataSource to the real DataTable

            panel.SetDataSource(qm, dt);

            return;
        }
Пример #23
0
        /// <summary>
        /// Run the query
        /// </summary>
        /// <param name="browseExistingResults">If true browse existing results</param>
        /// <returns></returns>

        public string RunQuery3(
            ResultsFormat rf,
            bool saveHitlist,
            bool browseExistingResults)
        {
            Query        modifiedQuery;
            QueryTable   qt;
            QueryColumn  qc;
            ResultsTable rt;
            ResultsField rfld;
            MetaTable    mt;
            MetaColumn   mc;
            string       txt, msg;
            DialogResult dr;
            bool         success;
            CellGraphic  cg;
            Lex          lex = new Lex();
            string       tempfile, tok, command, unrecognizedCommand, response;
            int          ti, gi, rc, i1, i2;

            // Begin execution

            if (rf == null)
            {
                throw new Exception("QueryExec.Run - Null ResultsFormat");
            }

            if (ResultsFormatter == null)
            {
                throw new Exception("QueryExec.Run - Null ResultsFormatter");
            }

            if (rf.Segments == null)
            {
                throw new Exception("QueryExec.Run - Null ResultsFormat.Segments");
            }

            if (Query == null)
            {
                throw new Exception("QueryExec.Run - Null Rf.Query");
            }

            if (Query.Tables == null || Query.Tables.Count <= 0)
            {
                throw new QueryException("QueryExec.Run - No Query Tables");
            }

            QueryManager qm = QueryManager;

            ReturnMsg = "";

            //bool useExistingQueryEngine = Rf.ParentQe != null;
            //bool useExistingDataTable = Query.BrowseExistingResultsWhenOpened && Query.SerializeResults &&
            //  qm.DataTable != null && qm.DataTable.Rows.Count > 0;

            try
            {
                //if (Math.Sqrt(4) == 2) throw new Exception("test"); // debug

                if (!browseExistingResults)                 // normal open of search
                {
                    Progress.Show("Analyzing query...");    // put up a status message to the user as soon as possible to let them know something is happening...

                    dr = ValidateQuery(Query);
                    if (dr == DialogResult.Cancel)
                    {
                        return("");
                    }

                    WriteCurrentListToServerIfNeeded(Query);

                    if (rf.OutputDestination == OutputDest.WinForms)                     // update access stats if grid
                    {
                        UpdateTableUsageStatistics(Query);
                    }

                    Query.ResultsDataTable = null;                     // be sure to get new results

                    qm = BuildQueryManager(Query, rf);

                    Query.ResetViewStates();                     // reset state of views for proper operation

                    if (Rf.ParentQe == null)                     // open search unless using existing query engine
                    {
                        if (!ExecuteSearch(saveHitlist))         // returns false if cancelled by user
                        {
                            Progress.Hide();
                            return("");
                        }
                    }

                    if ((ResultsKeys == null || ResultsKeys.Count == 0) &&                      // nothing for search
                        !Query.Preview &&
                        !MqlUtil.SingleStepExecution(Query) &&
                        qm.DataTable.Rows.Count == 0 &&
                        Query.RetrievesDataFromQueryEngine)
                    {
                        // if (!Rf.PopupDisplay)
                        Progress.Hide();
                        if (qm.StatusBarManager != null)
                        {
                            qm.StatusBarManager.DisplayStatusMessage("");
                        }
                        // if (QueryEngine.Cancelled) return ""; // cancelled by user
                        msg = "No data have been found that matches your query.";
                        if (ResultsFormat.PopupOutputFormContext && !ResultsFormat.SuppressNoDataMessage)
                        {
                            MessageBoxMx.Show(msg, "Search Result",
                                              MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            return("Command EditQuery");                            // return to edit query menu
                        }
                        else
                        {
                            return(msg);
                        }
                    }

                    //if (ResultsFormat.PopupDisplay)
                    //  SessionManager.DisplayStatusMessage("Retrieving data...");
                    //else Progress.Show("Retrieving data...", UmlautMobius.Value, true, "Cancelling Retrieval...");

                    //Progress.Show("Retrieving data...", UmlautMobius.String, true, "Cancelling Retrieval...");
                    Progress.Hide();                     // hide progress - "Retrieving data..." message now appears as bottom line of grid

                    if (ResultsFormat.Grid)
                    {
                        if (ResultsFormat.SessionOutputFormContext)              // if normal main session form grid display, set browse mode & view state
                        {
                            Query.ResetViewStates();                             // reset view state for all views
                            QbUtil.SetMode(QueryMode.Browse, Query);

                            if (ResultsFormat.Query.LogicType == QueryLogicType.And)                             // log grid query by logic type
                            {
                                UsageDao.LogEvent("QueryGridAnd", "");
                            }
                            else if (ResultsFormat.Query.LogicType == QueryLogicType.Or)
                            {
                                UsageDao.LogEvent("QueryGridOr", "");
                            }
                            else if (ResultsFormat.Query.LogicType == QueryLogicType.Complex)
                            {
                                UsageDao.LogEvent("QueryGridComplex", "");
                            }
                        }

                        else if (ResultsFormat.PopupOutputFormContext)                         // create popup window & configure
                        {
                            PopupResults.Show(qm);
                            //MoleculeGridPanel.ConfigureAndShow(qm, null);
                        }

                        else if (ResultsFormat.ToolOutputFormContext)
                        {
                            ContainerControl    cc;
                            QueryResultsControl qrc = ResultsFormat.OutputContainerControl as QueryResultsControl;
                            AssertMx.IsTrue(qrc != null, "ResultsFormat.OutputContainerControl must be a QueryResultsControl");
                            if (!WindowsHelper.FindContainerControl(qrc, typeof(ToolResultsContainer), out cc))
                            {
                                throw new Exception("ToolResultsContainer not found");
                            }

                            ToolResultsContainer trc = cc as ToolResultsContainer;
                            trc.SetupQueryResultsControlForResultsDisplay(qm);
                        }

                        else
                        {
                            throw new Exception("Invalid OutputformContext: " + ResultsFormat.OutputFormContext);
                        }
                    }
                }

                else                 // reentering display switch to browse tab
                {
                    QbUtil.SetMode(QueryMode.Browse, Query);
                }

                response = ResultsFormatter.BeginFormatting(browseExistingResults); // format the data

                if (ResultsFormat.SessionOutputFormContext)                         // normal display
                {
                    if (MqlUtil.SingleStepExecution(Query))
                    {                     // be sure hit count display is up to date
                        if (ResultsKeys != null)
                        {
                            if (qm.StatusBarManager != null)
                            {
                                qm.StatusBarManager.DisplayCurrentCount();
                            }
                        }
                    }

                    if (saveHitlist)
                    {
                        CidList hitList = new CidList(ResultsKeys);
                        rc = CidListCommand.WriteCurrentList(hitList);
                        SessionManager.DisplayCurrentCount();
                    }
                }

                return(response);
            }             // end of surrounding try

            catch (Exception ex)
            {
                Progress.Hide();
                if (ex is UserQueryException)                 // exception that can occur from user error
                {
                    throw new UserQueryException(ex.Message, ex);
                }

                else
                {
                    msg = DebugLog.FormatExceptionMessage(ex);
                    if (!Lex.Contains(msg, "QueryLogged:"))                     // exception & query
                    {
                        QueryEngine.LogExceptionAndSerializedQuery(msg, Query);
                    }
                    else
                    {
                        ServicesLog.Message(msg);                      // just log exception
                    }
                    throw new Exception(ex.Message, ex);               // pass it up
                }
            }
        }
Пример #24
0
        /// <summary>
        /// Tentatively add a new view of the specified type to the current page
        /// </summary>
        /// <param name="viewType"></param>
        /// <param name="query"></param>
        /// <param name="qrc"></param>
        /// <returns></returns>

        private static ResultsViewProps AddTentativeNewView(
            ResultsViewModel rvm)
        {
            ResultsPage  rp;
            DialogResult dr;
            int          intVal, max;

            ResultsViewType     viewType    = rvm.ViewType;
            string              viewSubtype = rvm.ViewSubtype;
            string              viewTitle   = rvm.Title;
            Query               query       = rvm.Query;
            QueryResultsControl qrc         = rvm.QueryResultsControl as QueryResultsControl;

            LastAddedViewType = viewType;

            int pi = qrc.CurrentPageIndex;

            if (pi < 0 ||                                          // add a page if no pages
                query.Root.ResultsPages.Pages[pi].Views.Count > 0) // or (for now) already a view on the current page
            {
                rp = ResultsPages.AddNewPage(query);
                pi = query.Root.ResultsPages.Pages.Count - 1;
                qrc.AddResultsPageTabPage(rp);
            }

            ResultsPage      page = query.ResultsPages[pi];
            ResultsViewProps view = page.AddNewView(rvm);

            if (view == null)
            {
                throw new Exception("Failed to add new view: " + viewType);
            }

            //view.CustomViewTypeImageName = rvm.CustomViewTypeImageName; // (should already be set)

            if (Lex.IsDefined(viewTitle) && Lex.Ne(viewTitle, viewType.ToString()))
            {
                view.Title = page.AddSequentialSuffixToTitle(viewTitle, query.ResultsPages);                 // set custom title (sequentially-numbered) if defined
            }
            qrc.SetCurrentPageTabTitleAndImage();

            dr = view.ShowInitialViewSetupDialog();

            if (dr != DialogResult.OK)
            {
                RemoveTentativeView(view, qrc);
                return(null);                // not added
            }

            qrc.ConfigureResultsPage(page);             // render the default view in the current page

            dr = view.ShowInitialViewPropertiesDialog();
            if (dr == DialogResult.OK)
            {
                //view.ConfigureRenderingControl(); // be sure it's configured (not a good idea, adds overhead)

                qrc.SetCurrentPageTabTitleAndImage();                 // update tab title & image accordingly

                return(view);
            }

            else             // cancelled, remove view
            {
                RemoveTentativeView(view, qrc);
                return(null);                // not added
            }
        }