public DescriptorValueEditor(DescriptorMultistateBase assignedAccessDescriptor, bool enableStateManagement) { _assignedAccessDescriptor = assignedAccessDescriptor; _usedVariables = _assignedAccessDescriptor.GetAllUsedVariables().ToList(); _connectorList = _assignedAccessDescriptor.GetConnectors(null, true).ToList().OrderBy(i => i.Order).ToList(); foreach (var s in _connectorList) { foreach (var v in _usedVariables) { var formula = _assignedAccessDescriptor.GetFormula(v, s.Id); _localFormulaKeeper.StoreVariableFormula(formula, _assignedAccessDescriptor.GetId(), v, s.Id); } } InitializeComponent(); Localize(); AddState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden; RemoveState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden; RenameState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden; if (_assignedAccessDescriptor is IDefautValueAbility) { _defaultState = ((IDefautValueAbility)assignedAccessDescriptor).GetDefaultStateId(); SelectDefaultState.Visibility = enableStateManagement ? Visibility.Visible : Visibility.Hidden; } else { SelectDefaultState.Visibility = Visibility.Hidden; } ShowData(); }
/// <summary> /// Заполнить форму данными из описателя доступа /// </summary> private void ShowData() { _dataTable = new DataTable(); _dataTable.ColumnChanged += new DataColumnChangeEventHandler(ColumnChanged); // Добавляем колонку "По-умолчанию" if (_assignedAccessDescriptor is IDefautValueAbility) { var dc = _dataTable.Columns.Add(LanguageManager.GetPhrase(Phrases.EditorDefaultStateColumnHeader), typeof(bool)); dc.ReadOnly = true; } // Добавляем колонку States _stateNameColumnIndex = _dataTable.Columns.Count; _dataTable.Columns.Add(LanguageManager.GetPhrase(Phrases.EditorState)); // Заполняем количество дополнительных колонок (тех, что до формул) _additionalColumnsCount = _dataTable.Columns.Count; // Добавляем колонки с именами переменных foreach (var v in _usedVariables) { _dataTable.Columns.Add(Profile.VariableStorage.GetVariableById(v).Name); } // Добавляем строки. Первая колонка - наименование состояния, затем формулы для переменных foreach (var s in _connectorList) { var formulaList = new List <object>(); if (_assignedAccessDescriptor is IDefautValueAbility) { formulaList.Add(_defaultState == s.Id); } formulaList.Add(s.Name); formulaList.AddRange(_usedVariables.Select(v => _localFormulaKeeper.GetVariableFormulaText(_assignedAccessDescriptor.GetId(), v, s.Id))); _dataTable.Rows.Add(formulaList.ToArray()); } StatesGrid.ItemsSource = _dataTable.AsDataView(); }