/// <summary>
        /// Открытие окна атрибутики
        /// </summary>
        public void OpenAttributesWindow(object parameter = null)
        {
            PgSearchObjectM searchObject = null;

            if (parameter is CommandEventParameter)
            {
                CommandEventParameter            commEvtParam = parameter as CommandEventParameter;
                MouseButtonEventArgs             eventArgs    = commEvtParam.EventArgs as MouseButtonEventArgs;
                System.Windows.Controls.TreeView treeView     = commEvtParam.EventSender as System.Windows.Controls.TreeView;
                if (treeView.SelectedItem != null)
                {
                    searchObject = treeView.SelectedItem as PgSearchObjectM;
                }
            }
            else if (parameter is PgSearchObjectM)
            {
                searchObject = parameter as PgSearchObjectM;
            }
            if (searchObject != null)
            {
                var table    = Program.app.getTableInfo(searchObject.SearchTable.Table.Id);
                var idObject = searchObject.IdObject;
                Program.work.OpenForm.ShowAttributeObject(table, idObject, (idObject <= 0), null);
            }
        }
        /// <summary>
        /// Перелет к объекту
        /// </summary>
        public void MoveToObject(object parameter = null)
        {
            if (_movingToObject)
            {
                CommandEventParameter commEvtParam = parameter as CommandEventParameter;
                RoutedPropertyChangedEventArgs <object> eventArgs = commEvtParam.EventArgs as RoutedPropertyChangedEventArgs <object>;
                if (eventArgs.NewValue is PgSearchObjectM)
                {
                    PgSearchObjectM searchObject = eventArgs.NewValue as PgSearchObjectM;
                    if (searchObject.SearchTable.Table.IsLayer)
                    {
                        int idObject = searchObject.IdObject;
                        int idTable  = searchObject.SearchTable.Table.Id;

                        var layer = Program.mainFrm1.axMapLIb1.getLayer(Program.RelationVisbleBdUser.GetNameInBd(idTable));
                        if (layer == null || layer.Visible != true)
                        {
                            // пытаемся включить слой
                            Program.mainFrm1.layerItemsView1.SetLayerVisible(idTable);
                            layer = Program.mainFrm1.axMapLIb1.getLayer(Program.RelationVisbleBdUser.GetNameInBd(idTable));
                            if (layer == null || layer.Visible != true)
                            {
                                return;
                            }
                        }
                        try
                        {
                            if (idObject != -1)
                            {
                                mvMapLib.mvVectorObject mvObj = layer.getObject(idObject);
                                layer.DeselectAll();
                                if (Program.SettingsXML.LocalParameters.EnterTheScreen)
                                {
                                    if (mvObj.VectorType != mvMapLib.mvVecTypes.mvVecPoint)
                                    {
                                        Program.mainFrm1.axMapLIb1.SetExtent(mvObj.bbox);
                                    }
                                    Program.mainFrm1.axMapLIb1.setScrCenter((mvObj.bbox.b.x + mvObj.bbox.a.x) / 2, (mvObj.bbox.b.y + mvObj.bbox.a.y) / 2);
                                    mvObj.Selected = true;
                                }
                                else
                                {
                                    layer.MoveTo(idObject, true);
                                }
                            }
                            Program.mainFrm1.axMapLIb1.mapRepaint();
                        }
                        catch (Exception ex)
                        {
                            Classes.workLogFile.writeLogFile(ex, true, true);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Полнотекстовый поиск
        /// </summary>
        public void FullTextSearch(object parameter = null)
        {
            SearchText = parameter.ToString();
            _results.Clear();

            var searchTables = from PgSearchTableM ftsTable in Tables where ftsTable.SearchWithin select ftsTable.Table;

            if (searchTables.Count() > 0)
            {
                Dictionary <int, PgSearchTableM> tableIdSearchTable = new Dictionary <int, PgSearchTableM>();
                using (var sqlWork = new SqlWork(_source.Connect))
                {
                    sqlWork.sql = String.Format(@"SELECT id_table, pkid, label_text
                                               FROM sys_scheme.fts_index
                                               WHERE fts @@ plainto_tsquery('{0}', '{1}') AND id_table IN ({3})
                                               LIMIT {2}",
                                                "russian",
                                                SearchText,
                                                _searchLimit,
                                                String.Join(",", (from PgTableBaseM table in searchTables select table.Id).ToArray()));
                    sqlWork.ExecuteReader();
                    while (sqlWork.CanRead())
                    {
                        int            idTable       = sqlWork.GetValue <Int32>("id_table");
                        int            primKey       = sqlWork.GetValue <Int32>("pkid");
                        String         labelText     = sqlWork.GetValue <String>("label_text");
                        PgSearchTableM pgSearchTable = null;
                        if (tableIdSearchTable.ContainsKey(idTable))
                        {
                            pgSearchTable = tableIdSearchTable[idTable];
                        }
                        else
                        {
                            pgSearchTable = new PgSearchTableM(_source, idTable);
                            tableIdSearchTable.Add(idTable, pgSearchTable);
                            _results.Add(pgSearchTable);
                        }
                        PgSearchObjectM pgSearchObject = new PgSearchObjectM(pgSearchTable, primKey, labelText);
                        pgSearchTable.SearchObjects.Add(pgSearchObject);
                    }
                }
            }
        }