private void SetEditorContent(String content) { SubtitlesContentModificationArea modificationArea = (this.Editor.EditState.Selection.Length > 0) ? SubtitlesContentModificationArea.Selection : SubtitlesContentModificationArea.Entire; SubtitlesEditState newEditState = null; if (modificationArea == SubtitlesContentModificationArea.Selection) { //Utworzenie nowego stanu edycjiu uwzględniającego zmiane długości tekstu w wyniku zmiany timingów i dostosowanie długości początkowego //zaznaczenia do nowej długości tekstu, tak odpowiadało ono dalej pierwotnie zaznaczonej treści. int initialContentLength = this.Editor.SubtitlesContent.Length; int modifiedContentLength = content.Length; int contentLengthDelta = modifiedContentLength - initialContentLength; Selection adjustedSelection = new Selection( this.Editor.EditState.Selection.Start, this.Editor.EditState.Selection.Length + contentLengthDelta); newEditState = new SubtitlesEditState(this.Editor.EditState.CaretPosition, adjustedSelection); } else { //Nie ma zaznaczenia, więc można wykorzystać niezmodyfikowany stan edycji. newEditState = this.Editor.EditState; } //Najpierw modyfikacja nowej zawrtości, a później stanu edycji //aby po zmodyfikowaniu zawrtości stan edycji był taki sam jak przed. SubtitlesContentModification contentModification = new SubtitlesContentModification(content, modificationArea); SubtitlesEditStateModification editStateModification = new SubtitlesEditStateModification(newEditState); ModificationComposer composer = new ModificationComposer(); composer.Begin(); composer.Add(contentModification); composer.Add(editStateModification); var modification = composer.End(); this.Editor.PerformModification(modification); }
private void SetEditorContent(String content) { SubtitlesContentModificationArea modificationArea = Editor.EditState.Selection.Length > 0 ? SubtitlesContentModificationArea.Selection : SubtitlesContentModificationArea.Entire; //Najpierw modyfikacja nowej zawrtości, a później stanu edycji //aby po zmodyfikowaniu zawrtości stan edycji był taki sam jak przed. SubtitlesContentModification contentModification = new SubtitlesContentModification(content, SubtitlesContentModificationArea.Entire); SubtitlesEditStateModification editStateModification = new SubtitlesEditStateModification(Editor.EditState); ModificationComposer composer = new ModificationComposer(); composer.Begin(); composer.Add(contentModification); composer.Add(editStateModification); var modification = composer.End(); this.Editor.PerformModification(modification); }
/// <summary> /// Konstruktor. /// </summary> /// <param name="viewManager">Obiekt menadżera widoków.</param> /// <param name="view">Obiekt zarządzanego przez prezentera widoku.</param> /// <param name="subtitlesManager">Obiekt modelu menadżera plików.</param> /// <param name="subtitlesEditor">Edytor napisów.</param> public SubtitlesPresenter(IViewManager viewManager, ISubtitlesView view, SubtitlesManager subtitlesManager, SubtitlesEditor subtitlesEditor) : base(viewManager, view) { this.manager = subtitlesManager; this.manager.CurrentSubtitlesChanged += new EventHandler <SubtitlesChangedEventArgs>(CurrentSubtitlesChangedHandler); this.subtitles = subtitlesManager.CurrentSubtitles; this.subtitles.ContentChanged += new EventHandler <SubtitlesContentChangedEventArgs>(SubtitlesContentChangedHandler); this.View.Content = this.subtitles.Content; this.View.SelectionChanged += new EventHandler <SelectionChangedEventArgs>(ViewSelectionChangedHandler); this.View.ContentChanged += new EventHandler(ViewContentChangedHandler); this.View.Scrolled += new EventHandler <ScrolledEventArgs>(ViewScrolledHandler); this.editor = subtitlesEditor; this.editor.EditStateChanged += new EventHandler <SubtitlesEditStateChangedEventArgs>(EditorEditStateChangedHandler); this.composer = new ModificationComposer(); this.previousLineNumberingDigits = 1; }