/// <summary> /// Переводит блок WPF в форму для сохранения /// </summary> /// <param name="procedure"></param> /// <returns></returns> public static SaveProcedure ToSave(ProcedureWPF procedure, bool IsProc = false, Guid child = new Guid()) { return(new SaveProcedure() { Id = Guid.NewGuid(), IsProcess = IsProc, ChildBlockID = child, Model = procedure.BlockModel, Position = procedure.Position }); }
// Загрузка связи с ресурсами private ResConnectionWPF LoadResConnection(SaveResourceConnection connectres, Dictionary <Guid, ProcedureWPF> worksavelistproc, Dictionary <Guid, ResourceWPF> worksavelistres) { ProcedureWPF proc = worksavelistproc[connectres.StartID]; ResourceWPF res = worksavelistres[connectres.EndID]; ResConnectionWPF connection = new ResConnectionWPF(proc, res); proc.AddResPutConnection(connection); res.AddResPutConnection(connection); return(connection); }
private void AnalizeToken() { var list = _collector.GetHistory(); // Получаем список токенов list = list.OrderBy(x => x.ProcessStartTime).ToList(); // Выстраиваем по времени начала try { MinDuration = list.Min(x => x.ProcessEndTime - x.ProcessStartTime); // Находим минимальную продолжительность } catch (InvalidOperationException ex) { throw new InvalidOperationException("TokenViewer: список токенов содержит 0 токенов"); } // Проставляем блоки foreach (var l in list) { AddBlock(l); } // Проставляем связи (так как пока нет параллельности, идут друг за другом) int count = MainWindow.Children.Count; // Смотрим количество блоков из которых пойдёт связь this.Width = (count + 1) * ProcedureWPF.DEFAULT_WIDTH; for (int i = 0; i < count; i++) { if (i < count - 1) { // Берём начальный и конечный блоки ProcedureWPF Start = MainWindow.Children[i] as ProcedureWPF; ProcedureWPF End = MainWindow.Children[i + 1] as ProcedureWPF; // Создаём связь ProcConnectionWPF connectionWPF = new ProcConnectionWPF(Start, End, new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2), new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2)); // Добавляем связь к ресурсам Start.AddOutPutConnection(connectionWPF); End.AddInPutConnection(connectionWPF); // Добавляем связь на область MainWindow.Children.Add(connectionWPF); } } }
// Загрузка связи с процедурами private ProcConnectionWPF LoadProcConnection(SaveProcedureConnection connectproc, Dictionary <Guid, ProcedureWPF> worksavelistproc, StartBlockWPF startBlock, EndBlockWPF endBlock) { ProcedureWPF procStart = null; ProcedureWPF procEnd = null; if (connectproc.StartID.CompareTo(new Guid()) != 0) { procStart = worksavelistproc[connectproc.StartID]; } if (connectproc.EndID.CompareTo(new Guid()) != 0) { procEnd = worksavelistproc[connectproc.EndID]; } ProcConnectionWPF connection = null; if (procStart != null && procEnd != null) { connection = new ProcConnectionWPF(procStart, procEnd, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procStart.AddOutPutConnection(connection); procEnd.AddInPutConnection(connection); } else { if (procStart == null) { connection = new ProcConnectionWPF(startBlock, procEnd, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procEnd.AddInPutConnection(connection); startBlock.AddOutPutConnection(connection); } if (procEnd == null) { connection = new ProcConnectionWPF(procStart, endBlock, connectproc.RelativeStartPosition, connectproc.RelativeEndPosition, connectproc.StartPort, connectproc.EndPort); procStart.AddOutPutConnection(connection); endBlock.AddInPutConnection(connection); } } return(connection); }
private void AddBlock(Token block) { // Смотрим длительность double duration = (block.ProcessEndTime - block.ProcessStartTime); if (duration == 0) { duration = 1; } if (MinDuration == 0) { MinDuration = 1; } int count = Convert.ToInt32(duration / MinDuration); // Количество блоков, которые создадим (чтобы отобразить длительность) if (count > 5) { count = 5; // Чтобы не выводить миллиард блоков } for (int i = 0; i < count; i++) { //Создаём блок ProcedureWPF wpf = new ProcedureWPF(new Point(this.baseX + i * ProcedureWPF.DEFAULT_WIDTH, this.baseY), block.ProcessedByBlock) { IsSelectable = false }; wpf.Freeze(); // Добавляем на рабочую область MainWindow.Children.Add(wpf); wpf.IsSelectable = false; } // Передвигаем следующий baseX += count * ProcedureWPF.DEFAULT_WIDTH + 15; baseY += ProcedureWPF.DEFAULT_HEIGHT + 15; }
public ParametersDialog(Dictionary <string, double> paramsPairs, string _progressFunction, string title, double?_minQuality, double?_maxQuality, ProcedureWPF procedure) { InitializeComponent(); DataContext = this; parameters = new Dictionary <string, double>(); textBoxes = new Dictionary <string, TextBox>(); progressFunction = _progressFunction; titleBlock.Text = title; Procedure = procedure; if (procedure != null && procedure.BlockName == "Логическое разветвление") { functionBox = new TextBox { Name = "functionBox", Text = "1", Width = 400, Margin = new Thickness(5, 0, 0, 4) }; var inputsCount = new TextBox(); inputsCount.Text = "1"; inputsCount.PreviewTextInput += MinQualityTextBox_PreviewTextInput; inputsCount.IsReadOnly = true; inputsCount.Width = 400; inputsCount.Margin = new Thickness(5, 0, 0, 4); var inputsLabel = new Label(); inputsLabel.Content = "Число входов"; inputsLabel.Width = 400; inputsLabel.Margin = new Thickness(0, 0, 0, 2); inputsLabel.FontWeight = FontWeights.Bold; wrapPanel.Children.Add(inputsLabel); wrapPanel.Children.Add(inputsCount); var outputsCount = new TextBox(); outputsCount.Text = 1.ToString(); outputsCount.PreviewTextInput += MinQualityTextBox_PreviewTextInput; outputsCount.Width = 400; outputsCount.Margin = new Thickness(5, 0, 0, 4); outputsCount.TextChanged += (s, e) => { var textBox = s as TextBox; procedure.OutputCount = int.Parse(textBox.Text.Length > 0 ? textBox.Text : "1"); }; var outputsLabel = new Label(); outputsLabel.Content = "Число выходов"; outputsLabel.Width = 400; outputsLabel.Margin = new Thickness(0, 0, 0, 2); outputsLabel.FontWeight = FontWeights.Bold; wrapPanel.Children.Add(outputsLabel); wrapPanel.Children.Add(outputsCount); } else if (procedure != null && procedure.BlockName == "Логическое слияние") { functionBox = new TextBox { Name = "functionBox", Text = "1", Width = 400, Margin = new Thickness(5, 0, 0, 4) }; var inputsCount = new TextBox(); inputsCount.Text = "1"; inputsCount.PreviewTextInput += MinQualityTextBox_PreviewTextInput; inputsCount.Width = 400; inputsCount.Margin = new Thickness(5, 0, 0, 4); inputsCount.TextChanged += (s, e) => { var textBox = s as TextBox; procedure.InputCount = int.Parse(textBox.Text.Length > 0 ? textBox.Text : "1"); }; var inputsLabel = new Label(); inputsLabel.Content = "Число входов"; inputsLabel.Width = 400; inputsLabel.Margin = new Thickness(0, 0, 0, 2); inputsLabel.FontWeight = FontWeights.Bold; wrapPanel.Children.Add(inputsLabel); wrapPanel.Children.Add(inputsCount); var outputsCount = new TextBox(); outputsCount.Text = 1.ToString(); outputsCount.PreviewTextInput += MinQualityTextBox_PreviewTextInput; outputsCount.Width = 400; outputsCount.IsReadOnly = true; outputsCount.Margin = new Thickness(5, 0, 0, 4); var outputsLabel = new Label(); outputsLabel.Content = "Число выходов"; outputsLabel.Width = 400; outputsLabel.Margin = new Thickness(0, 0, 0, 2); outputsLabel.FontWeight = FontWeights.Bold; wrapPanel.Children.Add(outputsLabel); wrapPanel.Children.Add(outputsCount); } else { functionBox = new TextBox { Name = "functionBox", Text = _progressFunction, Width = 400, Height = 150, TextWrapping = TextWrapping.Wrap, AcceptsReturn = true, Margin = new Thickness(5, 0, 0, 4) }; if (_progressFunction != null) { wrapPanel.Children.Add(new Label { Content = "Формула зависимости времени от параметров", Width = 400, Margin = new Thickness(0, 0, 0, 2), FontWeight = FontWeights.Bold }); wrapPanel.Children.Add(functionBox); } foreach (var paramsPair in paramsPairs) { var textBox = new TextBox(); textBox.Text = string.IsNullOrEmpty(paramsPair.Value.ToString()) ? "0" : paramsPair.Value.ToString(); textBox.Width = 400; textBox.Margin = new Thickness(5, 0, 0, 4); textBoxes.Add(paramsPair.Key, textBox); var label = new Label(); label.Content = paramsPair.Key; label.Width = 400; label.Margin = new Thickness(0, 0, 0, 2); label.FontWeight = FontWeights.Bold; wrapPanel.Children.Add(label); wrapPanel.Children.Add(textBox); } } if (_minQuality.HasValue && _maxQuality.HasValue) { minQuality = _minQuality.Value; maxQuality = _maxQuality.Value; var minQualityTextBox = new TextBox(); minQualityTextBox.Text = _minQuality.ToString(); minQualityTextBox.PreviewTextInput += MinQualityTextBox_PreviewTextInput; minQualityTextBox.Width = 400; minQualityTextBox.Margin = new Thickness(5, 0, 0, 4); minQualityTextBox.Visibility = procedure.BlockName == "Логическое слияние" ? Visibility.Hidden : Visibility.Visible; this.minQualityTextBox = minQualityTextBox; var minQualityLabel = new Label(); minQualityLabel.Content = "Минимальное качество"; minQualityLabel.Width = 400; minQualityLabel.Margin = new Thickness(0, 0, 0, 2); minQualityLabel.FontWeight = FontWeights.Bold; minQualityLabel.Visibility = procedure.BlockName == "Логическое слияние" ? Visibility.Hidden : Visibility.Visible; wrapPanel.Children.Add(minQualityLabel); wrapPanel.Children.Add(minQualityTextBox); var maxQualityTextBox = new TextBox(); maxQualityTextBox.Text = _maxQuality.ToString(); maxQualityTextBox.Width = 400; maxQualityTextBox.PreviewTextInput += MinQualityTextBox_PreviewTextInput; maxQualityTextBox.Margin = new Thickness(5, 0, 0, 4); maxQualityTextBox.Visibility = procedure.BlockName == "Логическое разветвление" ? Visibility.Hidden : Visibility.Visible; this.maxQualityTextBox = maxQualityTextBox; var maxQualityLabel = new Label(); maxQualityLabel.Content = "Максимальное качество"; maxQualityLabel.Width = 400; maxQualityLabel.Margin = new Thickness(0, 0, 0, 2); maxQualityLabel.FontWeight = FontWeights.Bold; maxQualityLabel.Visibility = procedure.BlockName == "Логическое разветвление" ? Visibility.Hidden : Visibility.Visible; wrapPanel.Children.Add(maxQualityLabel); wrapPanel.Children.Add(maxQualityTextBox); } /* * У разветвления только Qвх * У слияния только Qвых */ }