/// <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); } } } }