Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Очистка форматирования текста в редакторе MyTetra #5

Closed
xintrea opened this issue Oct 2, 2015 · 1 comment

Comments

@xintrea
Copy link
Owner

xintrea commented Oct 2, 2015

Проблема:

При вставке текста, взятого из окна браузера, текст может содержать различные теги форматирования. В MyTetra предусмотрена кнопка [C] - для сброса форматирования к стандартному, заданному в настройках редактора.

Задача:

Написать функцию (метод), очищающий форматирование выделенного текста в виджете EditorTextArea (наследник QTextEdit). При очистке
форматирование должно быть установлено в шрифт и размер, взятый из конфига редактора (методы получения настроек уже присутсвуют). Очистка текста должна удовлетворять следующим требованиям:

  • Если выделена строка в абзаце (то, есть не весь абзац), очищать форматирование только для начертания. Нельзя изменять отступы.
  • Если начало и конец выделения находятся на начале/конце абзаца, то надо очистить как начертание, так и отступы.
  • Если в выделенном фрагменте есть картинка, то картинка должна остаться. (Стандартный Qt-метод setCurrentCharFormat() удаляет картинки из текста).
  • Учесть, что если применить технику "вырезаем выделение, чистим, и вставляем заново через removeSelectedText()/insertHtml()", то первая строка такой вставки получит форматирование, отличное от заданного - будут по неизвестной причине добавлены вертикальные отступы самим Qt. Эту особенность надо как-то скомпенсировать или обойти.

Подробности:

  • Весь код редактора сосредоточен в каталоге /src/libraries/wyedit;
  • Метод, который очищает форматирование, находится в файле:
/src/libraries/wyedit/formatters/TypefaceFormatter.cpp

метод называется:

void TypefaceFormatter::onClearClicked(void)

его можно (и нужно) менять.

  • При необходимости можно создать класс-очиститель текста, с именем типа TextCleaner.
  • Основной класс (виджет) редактора - класс Editor, размещенн в файле Editor.cpp;
  • Класс области редактирования называется EditorTextArea, он унаследован от QTextEdit. Указатель на нее в рамках класса Editor называется textArea.
  • Начертание и размер стандартного шрифта, который надо установить на очищаемый кусок текста, берутся вот отсюда:
editorConfig->get_default_font()
editorConfig->get_default_font_size()

Правка кода:

Правка кода должна проводиться в отдельной ветке. После проверки, код будет влит в ветку experimental.

@xintrea
Copy link
Owner Author

xintrea commented Dec 20, 2016

Очистка кода доведена до некоторого рабочего вида в MyTetra 1.42

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant