Beispiel #1
0
        /// <summary>
        /// Wklej.
        /// </summary>
        public void Paste()
        {
            StringBuilder modifiedContentBuilder = new StringBuilder(subtitlesEditor.SubtitlesContent);

            SubtitlesContentModificationArea modificationArea = SubtitlesContentModificationArea.PostCaret;

            SubtitlesEditState editState = subtitlesEditor.EditState;
            int insertPosition           = editState.CaretPosition;

            Selection selection = editState.Selection;

            if (selection.Length > 0)
            {
                modifiedContentBuilder.Remove(selection.Start, selection.Length);

                modificationArea = SubtitlesContentModificationArea.Selection;
                insertPosition   = selection.Start;
            }

            String contentToInsert = Clipboard.GetText();

            modifiedContentBuilder.Insert(insertPosition, contentToInsert);

            SubtitlesContentModification contentMod = new SubtitlesContentModification(modifiedContentBuilder.ToString(), modificationArea);

            int postInsertCaret = insertPosition + contentToInsert.Length;
            SubtitlesEditState             newEditState = new SubtitlesEditState(postInsertCaret, new Selection(postInsertCaret, 0));
            SubtitlesEditStateModification editMod      = new SubtitlesEditStateModification(newEditState);

            subtitlesEditor.PerformModification(new CompositeModification(contentMod, editMod));
        }
Beispiel #2
0
        /// <remarks>
        /// Obsługa zdarzenia o zmianie zaznaczenia w widoku. W przypadku zmiany tekstu w widoku,
        /// to zdarzenie następuje po zdarzeniu o zmianie tekstu.
        /// </remarks>
        private void ViewSelectionChangedHandler(object sender, SelectionChangedEventArgs e)
        {
            int correctedSelectionStart  = TextUtilities.GetCharCount(View.RawContent, 0, e.Start);
            int correctedSelectionLength = TextUtilities.GetCharCount(View.RawContent, e.Start, e.Length);

            //Jeśli karetka znajduje się na początku zazaczenia to jej pozycja jest wyznaczona przez pozycjie początku zaznaczenia.
            //Jeśli nie to karetka znajduje się na końcu zaznaczenia.
            int caretPosition = (View.CaretPosition == e.Start) ? (correctedSelectionStart) : (correctedSelectionStart + correctedSelectionLength);

            Selection selection = new Selection(correctedSelectionStart, correctedSelectionLength);

            SubtitlesEditState newEditState = new SubtitlesEditState(caretPosition, selection);

            SubtitlesEditStateModification stateModification = new SubtitlesEditStateModification(newEditState);

            if (composer.IsComposing)
            {
                composer.Add(stateModification);
                var modification = composer.End();

                editor.PerformModification(modification);
            }
            else
            {
                //Trzeba wyłączyć obsługe zdarzenia zwrotnego, ponieważ edytor zwraca informacje o zaznaczeniu, która jest nieaktualne dla widoku.
                //To do: sprawdzić czy nie da sie jakoś tego wyeliminować
                SwitchEditorEditStateChangedHandling(false);
                editor.PerformModification(stateModification);
                SwitchEditorEditStateChangedHandling(true);
            }
        }
Beispiel #3
0
        /// <summary>
        /// Wytnij.
        /// </summary>
        public void Cut()
        {
            SubtitlesEditState editState = subtitlesEditor.EditState;

            String    content      = subtitlesEditor.SubtitlesContent;
            Selection selection    = editState.Selection;
            String    contentToCut = content.Substring(selection.Start, selection.Length);

            Clipboard.SetText(contentToCut);

            String cuttedContent = content.Remove(selection.Start, selection.Length);

            SubtitlesContentModification contentMod = new SubtitlesContentModification(cuttedContent, SubtitlesContentModificationArea.Selection);

            SubtitlesEditState             newEditState = new SubtitlesEditState(selection.Start, new Selection(selection.Start, 0));
            SubtitlesEditStateModification editMod      = new SubtitlesEditStateModification(newEditState);

            subtitlesEditor.PerformModification(new CompositeModification(contentMod, editMod));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }