Блог им. JenyayOutWiker 1.3.0

outwiker_screen outwiker_screen_2
Выложил очередную версию программы для хранения заметок в виде дерева OutWiker. В версии 1.3 основной упор был сделан на то, чтобы начать использовать более продвинутые HTML-движки, чем встроенный в wxPython.

Старый HTML-движок сильно ограничивал дальнейшее развитие программы. Например, в нем нельзя было использовать стили CSS, не было возможности отображать зачеркнутый текст, а страницы с картинками из интернета слишком долго (да и сам рендер был не особо быстрый).

Список изменений
Итак, для начала вот список изменений для версии 1.3.0, а потом о них расскажу поподробнее:

* Теперь в качестве HTML-рендера под Windows используется движок Internet Explorer, а под Linux — WebKit.
* Добавлена возможность печати заметок и их исходного текста.
* Добавлен новый вики-тег [={-...-}=] для зачеркнутого текста.
* Добавлена кнопка для зачеркнутого текста на HTML-странице.
* Возможность установки размера шрифта при просмотре заметок через окно настроек.
* Возможность установки дополнительных стилей CSS для заметок.
* Изменение горячей клавиши для переключением между кодом и просмотром на F4.
* Добавлены пункты меню для вики-команд [=(:… :)=].
* Страницы, открытые в режиме «Только для чтения», в дереве выделяются курсивом.
* Под Windows программа теперь работает без установки MS Visual C++ 2008 Redistributable Package.
* При запуске программы под Windows с помощью exe-шника ошибки будут выводиться в файл outwiker.log, который будет создан в той же папке, где расположен файл настроек outwiker.ini.
* Исправлены ошибки, возникавщие при попытке открыть вики, если для какой-то из заметок нет прав на запись.
* Исправлена ошибка, из-за которой под Windows не работал рендеринг формул, если программа была установлена в директорию, содержащей пробелы.

WebKit vs. Internet Explorer
Теперь под Windows и под Linux используются разные HTML-движки. Под Linux особо выбора не было, единственный из виденных мной способов подключения WebKit для wxPython, который не требует компиляции со стороны пользователя, описан здесь. Для этой цели используется библиотека pywebkitgtk, которая тянет за собой еще и pyGTK, но pywebkitgtk есть в репозиториях Ubuntu (пакет называется python-webkit-dev), поэтому устанавливается без проблем со всеми своими зависимостями. Несмотря на то, что pywebkitgtk ориентирован на pyGTK, а не на wxPython, подключился он к wxPython довольно легко. Я ожидал каких-то проблем, но их особо и не было, за исключением чисто эстетических, связанных с лишними в данной программе пунктами контекстного меню.

Под Windows пришлось повозиться побольше. Сначала я и там хотел использовать движок WebKit. Для начала я попробовал использовать тот же способ подключения WebKit, что и под Linux, но оказалось, что под Windows использовать одновременно и wxPython, и wxGTK проблематично. После установки pyGTK и поддержкой WebKit библиотека pyGTK отказывалась импортироваться, ссылаясь на ошибку при импорте функции из DLL. Если установить pyGTK без поддержки WebKit, то отказывалась импортироваться библиотека wxPython, ссылаясь на ту же самую ошибку. В общем, здесь я сталкнулся с типичным адом DLL. Поняв, что то же самое может ждать и пользователей (даже если мне удастся этот ад побороть у себя), я решил отказаться от использования pyGTK под Windows. К тому же я помню, как долго мучился автор аналогичной программы KeepNote (об этой программе я когда-то писал) с тем, чтобы его творение (в хорошем смысле слова :) ) заработало под Windows у всех пользователей. Программа KeepNote как раз полностью написана на wxGTK.

Под Windows есть еще один вариант использования WebKit, это библиотека wxwebkit. Она как раз ориентирована на Windows, и на сайте можно даже скачать пример скомпилированной программы. Правда, эта программа включает в себя 50-мегабайтную DLL-ку, но в целом архив с программой примера ужался до 20 МБ. Подключилась эта библиотека тоже без особых проблем (хотя на сайте нет нормальной документации, проще скачать исходники и смотреть примеры там), но оказалось, что у этой библиотеки (по крайней мере в той версии, что лежит на сайте в уже скомпилированном виде) проблемы с открытием локальных страниц, если в пути до них есть русские буквы. Причем, сами страницы открываются, а локальные картинки с такими путями не грузятся. От этой библиотеки пришлось тоже отказаться.

Остался Internet Explorer. С его подключением тоже не возникло проблем, за исключением того, что, если фокус установлен на его компоненте, он перехватывает клавишу F5 и обновляет страницу. А до сих пор клавиша F5 использовалась для переключения между кодом страницы и ее просмотром. Вернуть F5 под свой контроль мне пока не удалось, поэтому пришлось изменить горячую клавишу в программе на F4.

Использование CSS
Благодаря тому, что теперь в OutWiker используются полноценные HTML-движки, появилась возможность использования стилей CSS. На стили CSS у меня большие надежды для будущих новых фич, а пока ограничился возможностью задавать общие стили для всех страниц заметок. Стили задаются в настройках, как показано на следующем скриншоте:

outwiker_css

На этом скриншоте я установил стиль, чтобы заголовок первого уровня писался курсивом.

В этом же окне можно настроить размер и начертание шрифта для текста в режиме просмотра. На самом деле шрифт устанавливается тоже с помощью CSS, но чтобы пользователям было удобнее, я выделил эту настройку отдельно.

Теперь о том, как эти стили работают. Здесь все просто, теперь в дистрибутив входит папка templates, в ней есть единственная (пока) папка html, а в ней файл template.html — это и есть шаблон для страниц. Поэтому, если что, вы можете его поправить под себя.

В следующей версии я хочу добавить специальную вики-команду, которая бы добавляла стили CSS к конкретной странице, благодаря чему можно будет устанавливать внешний вид страниц индивидуально.

Печать
Другая новая возможность, которая немного попортила крови, это возможность печати. Печать оформленных заметок никаких трудностей не вызвала и, по сути, состоит из одного вызова соответствующего метода HTML-движка (правда, мне не нравится, что по умолчанию стоят очень маленькие поля, но в диалоге печати это настраивается).

Проблемы начались, когда начал делать печать обычного текста. Под Windows проблем никаких не возникло, а под Linux'ом начались танцы с бубном. По умолчанию в wxPython показывает какой-то страшненький диалог с довольно ограниченными возможностями настройки, но самое неприятное, что при печати русских букв вылезали кракозяблы (инопланетные послания, ага).

Позже выяснилось, что проблему можно решить, если установить пакеты libgnomeprint2.2-0 и libgnomeprintui2.2-0, в этом случае wxGTK будет использовать полее продвинутые возможности печати и более удобные диалоги. Использовать то он использует, только приложение при печати стало падать, причем без видимых причин. Кроме того, при печати текста в консоль выводятся несколько предупреждений. От падений избавиться удалось (по крайнеей мере у меня на компе :) ), а от предупреждений — нет. Правда, остался еще один неприятный момент — при нажатии Esc в диалоге печати, диалог закрывается, но печать все-равно начинается. Хотя, если честно нажать на отмену, то печать действительно не происходит. Самое обидное, что я не могу сам взаимодействовать с этим диалогом — он сразу падает.

Я пока оставил печать в таком виде, потому что разработчики wxPython писали, что в версии wxPython 2.9 под Linux фреймворк для печати полностью переписан, но пока еще нет финального релиза этой версии, так что пока ждем-с.

Кроме того, в настройки добавил возможность изменения шрифта при печати текста и полей страницы.

Еще раз скажу, что все эти ужасы не относятся к версии под Windows и к печати оформленных заметок.

Остальное
Самые крупные изменения я уже описал. Остальные изменения не такие масштабные, хотя и полезные. Во-первых, добавил кнопки и вики-команду для зачеркнутого текста, раньше это сделать не позволял HTML-движок.

Во-вторых, теперь при возникновении ошибок под Windows (если программа запускается в виде exe-шника, а не из исходников) в файл outwiker.log эта ошибка будет записана. Файл outwiker.log создается там же, где и файл настроек outwiker.ini. То есть, если outwiker.ini лежит рядом с exe-шником, то outwiker.log будет создан тут же, в противном случае — в профиле пользователя.

Про остальные изменения, все ясно из их краткого описания в начале. В основном это исправление ошибок и мелкие оформительские исправления.

Страница программы
  • +7
  • Jenyay
  • 26 июня 2011, 19:55

Комментарии (6)

Недавно узнал о такой штуке как Awesomium. Встраиваемый в приложения браузер — посмотри, может пригодится
blogs.msdn.com/b/rucoding4fun/archive/2011/06/23/awesome-embeddable-deployable-web-browser-that-s-free-for-independents-awesomium.aspx
Спасибо, при случае надо будет попробовать. Но, как я понял, он только под .NET.
Я его лишь бегло просматривал, но как минимум есть API на С++
awesomium.com/docs/1_6_0/cpp_api/
Есть синхронизация с удалённым сервером?
Нет, но из-за того, что прога для хранения заметок использует просто дерево каталогов, при желании можно использовать какую-нибудь систему контроля версий, да или просто Dropbox/UbuntuOne/Wuala или что у нас там еще есть.
Мысль понял, спасибо.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.