private void CommitNameEdit(string oldName, string newName) { var duplicate = Tracks.Any(t => t != editingButton.Tag && t.Name == newName); if (duplicate) { MessageBox.Show(T._("Ein Gleis mit der Bezeichnung {0} ist bereits vorhanden. Bitte wählen Sie einen anderen Namen!", newName), MessageBoxType.Error); return; } // Streckengleise umbenennen DefaultTrackLeft.ReplaceAllValues(editingButton.Tag.Name, newName); DefaultTrackRight.ReplaceAllValues(editingButton.Tag.Name, newName); // Ankunfts- und Abfahrtsgleise zum umbenennen stagen if (TrackRenames.ContainsKey(newName)) { TrackRenames.Remove(newName); } else if (TrackRenames.ContainsValue(oldName)) { var k = TrackRenames.First(kvp => kvp.Value == oldName).Key; TrackRenames[k] = newName; } else if (!TrackRenames.ContainsKey(oldName) && !TrackRenames.ContainsValue(newName)) { TrackRenames.Add(oldName, newName); } editingButton.Tag.Name = newName; Invalidate(); editingButton = null; }
private RenderBtn <Track> GetButton(string text, Track track, int x, int y) { var btn = new RenderBtn <Track>(track, new Point(x, y - 8), new Size(16, 16), Colors.LightGrey, text); buttons.Add(btn); return(btn); }
private void NameBtn_Click(object sender, EventArgs e) { editingButton = (RenderBtn <Track>)sender; var oldName = editingButton.Tag.Name; var newName = Shared.UI.InputBox.Query(ParentWindow, T._("Gleisnamen bearbeiten"), oldName); if (newName != null && newName != oldName) { CommitNameEdit(oldName, newName); } }
protected override void OnPaint(PaintEventArgs e) { // Reset e.Graphics.Clear(bgColor); buttons.Clear(); int midx = Width / 2; // Richtungsangaben ermitteln var route = tt.GetRoute(routeIndex).Stations; var staIdx = route.IndexOf(station); var prev = route.ElementAtOrDefault(staIdx - 1); var next = route.ElementAtOrDefault(staIdx + 1); bool disableRight = tt.Type == TimetableType.Network && next == null; bool disableLeft = tt.Type == TimetableType.Network && prev == null; // Richtungsangaben zeichnen if (prev != null) { e.Graphics.DrawText(font, textColor, 5, 5, T._("von {0}", prev.SName)); } if (next != null) { var nextText = T._("nach {0}", next.SName); var nextSize = e.Graphics.MeasureString(font, nextText); e.Graphics.DrawText(font, textColor, Width - 5 - nextSize.Width, 5, nextText); } var leftdefaultTrack = Tracks.IndexOf(Tracks.FirstOrDefault(t => t.Name == DefaultTrackLeft.GetValue(routeIndex))); var rightdefaultTrack = Tracks.IndexOf(Tracks.FirstOrDefault(t => t.Name == DefaultTrackRight.GetValue(routeIndex))); // Netzwerk: Falls noch keine Angabe: Standardgleise setzen if (tt.Type == TimetableType.Network && Tracks.Any()) { if (disableLeft) { leftdefaultTrack = 0; } else if (leftdefaultTrack == -1) { MoveDefaultTrack(DefaultTrackLeft, Tracks.First(), 0); leftdefaultTrack = 0; } if (disableRight) { rightdefaultTrack = 0; } else if (rightdefaultTrack == -1) { MoveDefaultTrack(DefaultTrackRight, Tracks.First(), 0); rightdefaultTrack = 0; } } int y = 30; int maxIndent = 0; foreach (var track in Tracks) { var trackIndex = Tracks.IndexOf(track); // Einrückung des Gleisvorfeldes berehcnen var leftIndent = Math.Abs(leftdefaultTrack - trackIndex) * INDENT + 60; if (leftdefaultTrack == trackIndex) { leftIndent = disableLeft ? 30 : 0; } var rightIndent = Math.Abs(rightdefaultTrack - trackIndex) * INDENT + 60; if (rightdefaultTrack == trackIndex) { rightIndent = disableRight ? 30 : 0; } maxIndent = Math.Max(maxIndent, rightIndent + leftIndent); rightIndent = Width - rightIndent; // Gleiselinie zeichnen e.Graphics.DrawLine(textColor, leftIndent, y, rightIndent, y); // Gleisverbindungen zeichnen if (trackIndex < leftdefaultTrack) { e.Graphics.DrawLine(textColor, leftIndent, y, leftIndent - INDENT, y + LINE_HEIGHT); } else if (trackIndex > leftdefaultTrack) { e.Graphics.DrawLine(textColor, leftIndent, y, leftIndent - INDENT, y - LINE_HEIGHT); } if (trackIndex < rightdefaultTrack) { e.Graphics.DrawLine(textColor, rightIndent, y, rightIndent + INDENT, y + LINE_HEIGHT); } else if (trackIndex > rightdefaultTrack) { e.Graphics.DrawLine(textColor, rightIndent, y, rightIndent + INDENT, y - LINE_HEIGHT); } // Gleisnamen als Button hinzufügen var textSize = e.Graphics.MeasureString(font, track.Name); var nameBtn = new RenderBtn <Track>(track, new Point(midx - (int)(textSize.Width / 2) - 5, y - 8), new Size((int)textSize.Width + 5, 16), bgColor, track.Name, textColor); nameBtn.Click += NameBtn_Click; buttons.Add(nameBtn); // Netzwerk: Standardgleise anderer Routen gestrichelt zeichnen. if (DefaultTrackLeft.ContainsValue(track.Name) && leftdefaultTrack != trackIndex) { e.Graphics.DrawLine(dashedPen, 0, y, leftIndent, y); } if (DefaultTrackRight.ContainsValue(track.Name) && rightdefaultTrack != trackIndex) { e.Graphics.DrawLine(dashedPen, rightIndent, y, Width, y); } // Aktions-Buttons hinzufügen var btnLeft = midx + (int)(textSize.Width / 2) + 10; var deleteBtn = GetButton("X", track, btnLeft, y); deleteBtn.Click += DeleteBtn_Click; var upBtn = GetButton("▲", track, btnLeft + 20, y); upBtn.Click += UpBtn_Click; var downBtn = GetButton("▼", track, btnLeft + 40, y); downBtn.Click += DownBtn_Click; // Aktionsbuttons für Standardgleise if (trackIndex == leftdefaultTrack && !disableLeft) { var leftUpBtn = GetButton("▲", track, 10, y); leftUpBtn.Click += (s, x) => MoveDefaultTrack(DefaultTrackLeft, ((RenderBtn <Track>)s).Tag, -1); var leftDownBtn = GetButton("▼", track, 30, y); leftDownBtn.Click += (s, x) => MoveDefaultTrack(DefaultTrackLeft, ((RenderBtn <Track>)s).Tag, 1); } if (trackIndex == rightdefaultTrack && !disableRight) { var rightUpButton = GetButton("▲", track, Width - 46, y); rightUpButton.Click += (s, x) => MoveDefaultTrack(DefaultTrackRight, ((RenderBtn <Track>)s).Tag, -1); var rightDownBtn = GetButton("▼", track, Width - 26, y); rightDownBtn.Click += (s, x) => MoveDefaultTrack(DefaultTrackRight, ((RenderBtn <Track>)s).Tag, 1); } y += LINE_HEIGHT; } // Button für neue Gleise var addTrackText = T._("Neues Gleis hinzufügen"); var textWidth = (int)e.Graphics.MeasureString(font, addTrackText).Width; var addBtn = new RenderBtn <Track>(null, new Point(midx - (textWidth / 2) - 5, y - 8), new Size(textWidth + 10, 16), Colors.LightGrey, addTrackText); buttons.Add(addBtn); addBtn.Click += AddBtn_Click; var newHeight = (Tracks.Count) * LINE_HEIGHT + 50; if (newHeight > Height) { this.Height = newHeight; } else if (maxIndent > Width - 30) { Width = maxIndent + 30; } foreach (var args in buttons) { args.Draw(e.Graphics); } base.OnPaint(e); }