---------------------------------------------------------------
QSearch - плагин для текстового редактора AkelPad
---------------------------------------------------------------

Плагин представляет собой панель для "быстрого" поиска текста.
Предполагается, что для вызова функции плагина (QSearch::QSearch)
будет назначена горячая клавиша (например, F7).

Клавиши диалога быстрого поиска:
Enter, F3   - искать следующий (вниз)
Shift+Enter - искать предыдущий (вверх)
Ctrl+Enter  - искать с начала файла
Alt+Enter   - подхватить выделенный текст
Esc         - закрыть диалог
Ctrl+Del    - строка поиска: стереть текст после (правее) каретки
Ctrl+BS     - строка поиска: стереть текст до (левее) каретки
Ctrl+A      - строка поиска: выделить весь текст

Также плагин предоставляет две функции: SelFindNext и SelFindPrev -
для быстрого поиска выделенного слова/фразы ниже или выше по тексту
прямо в окне редактирования.
Поведение этих функций зависит от общих настроек поиска, заданных в 
панели QSearch (или в ini-файле, см. ниже).
При этом функции QSearch::QSearch и QSearch::SelFindNext/Prev могут 
искать разный текст (QSearch::QSearch - текст в строке поиска, а
QSearch::SelFindNext/Prev - текст, выделенный в окне редактирования).
Предполагается, что для вызова этих функций будут назначены горячие
клавиши (например, Ctrl+Alt+Right и Ctrl+Alt+Left).
Пример использования: выделяем слово в окне редактирования и вызываем
SelFindNext или SelFindPrev. В результате выделение переходит к 
следующему или предыдущему слову, совпадающему с выделенным изначально.

Функция DialogSwitcher позволяет переключаться между диалогами "Поиск",
"Замена", "Перейти к строке" и диалогом QSearch с помощью "горячих клавиш"
этих диалогов. Например, если нажать Ctrl+H в диалоге "Поиск", он
изменится на диалог "Замена". При использовании функции DialogSwitcher
рекомендуется поставить галочку для её автоматической загрузки в окне
настроек плагинов.


Дополнительные настройки (всплывающее меню панели QSearch или файл 
"AkelFiles\Plugs\QSearch.ini"):

1) "Search: On-the-fly mode"
   "Поиск: Искать на лету"
   srch_onthefly_mode = 1
     Поиск производится непосредственно во время набора текста в
     строке поиска QSearch.
     Активация этой настройки отключает srch_use_specialchars.
   srch_onthefly_mode = 0
     Поиск производится только по нажатию Enter.

2) "Search: Always from beginning"
   "Поиск: Всегда с начала"
   srch_from_beginning = 0
     При изменении слова в строке поиска он (поиск) будет продолжен 
     с текущей позиции в файле.
   srch_from_beginning = 1
     Введенный текст будет искаться с начала файла.

3) "Search: Use special characters ( \n, \t, * and ? )"
   "Поиск: Использовать спец. символы ( \n, \t, * и ? )"
   srch_use_specialchars = 1
     В строке поиска могут использоваться спец. символы.
     Активация этой настройки отключает srch_onthefly_mode.
       \n - перевод строки
       \t - табуляция
       \\ - обратный слэш ( '\' )
       \* - звёздочка  ( '*' )
       \? - знак вопроса ( '?' )
       ?  - любой символ ( например, 'b', '0', ' ' и т.д. )
       *  - 0 или больше любых символов (т.e. любая (под)строка)
       ** - 0 или больше любых непробельных символов ("Слово целиком" вкл.)
     Примечание: 
       ? и * не работают с переводом строки, \n должен быть указан явно.
   srch_use_specialchars = 0
     Обычный поиск, без спец. символов.

4) "Search: Pick up selected text"
   "Поиск: Подхватывать выделенный текст"
   srch_pickup_selection = 1
     При вызове QSearch или при нажатии F3 в окне редактирования AkelPad,
     в строку поиска QSearch вставляется текст, выделенный в окне 
     редактирования AkelPad.
   srch_pickup_selection = 0
     При вызове QSearch, текст в строке поиска не изменяется.

5) "Search: SelFind picks up selected text"
   "Поиск: SelFind подхватывает выделенный текст"
   srch_selfind_pickup = 0
     Вызов SelFindNext или SelFindPrev не меняет текст в строке поиска 
     панели QSearch.
   srch_selfind_pickup = 1
     Вызов SelFindNext или SelFindPrev вставляет в строку поиска панели 
     QSearch текст, выделенный в окне редактирования AkelPad.

6) "Search: Stop at EOF (end of file)"
   "Поиск: Останавливаться в конце файла"
   srch_stop_eof = 0
     При достижении конца файла поиск продолжается с начала этого файла.
   srch_stop_eof = 1
     При достижении конца файла показывается соответствующее сообщение.
   srch_stop_eof = 10
     То же, что srch_stop_eof = 0.
     При установке галочки "Search: Stop at EOF" значение параметра
     srch_stop_eof устанавливается в 11.
   srch_stop_eof = 11
     При достижении конца файла поиск прекращается. Молча. Без показа
     сообщения.
     При снятии галочки "Search: Stop at EOF" значение параметра
     srch_stop_eof устанавливается в 10.

7) "Window: Docked top"
   "Окно: Расположить сверху"
   srch_wnd_dockedtop = 1
     Панель QSearch находится в верхней клиентской части окна AkelPad.
   srch_wnd_dockedtop = 0
     Панель QSearch находится в нижней клиентской части окна AkelPad.

8) "Window: Select all when focused"
   "Окно: Фокус ввода выделяет всё"
   edit_focus_selectall = 1 
     Каждый раз, когда строка поиска QSearch получает фокус ввода, 
     весь текст в строке поиска становится выделенным.
   edit_focus_selectall = 0 
     Весь текст в строке поиска выделяется только при явном вызове 
     QSearch::QSearch.

9) "Window: Catch main F3"
   "Окно: Обрабатывать F3 от главного окна"
   catch_main_f3 = 1
     Нажатие клавиши F3 (Shift+F3) в окне редактора AkelPad продолжает 
     поиск плагином QSearch, если до этого не вызывалось стандартное 
     окно поиска или замены AkelPad.
   catch_main_f3 = 0
     Стандартное поведение AkelPad.

10) "Window: Catch main Esc"
   "Окно: Обрабатывать Esc от главного окна"
   catch_main_esc = 1
     Нажатие клавиши Esc в окне редактора AkelPad скрывает панель QSearch,
     если она была видима.
   catch_main_esc = 0
     Панель QSearch не перехватывает клавишу Esc; она обрабатывается самим 
     AkelPad (по умолчанию).
   Также можно вручную установить одно из следующих значений:
   catch_main_esc = 10
     Нажатие клавиши Esc в окне QSearch передаётся на обработку самому
     редактору AkelPad (по умолчанию - закрывает программу).
     При установке галочки "Window: Catch main Esc" значение параметра
     catch_main_esc устанавливается в 11.
   catch_main_esc = 11
     Работает так же, как при catch_main_esc = 1.
     При снятии галочки "Window: Catch main Esc" значение параметра
     catch_main_esc устанавливается в 10.

11) "Window: Hotkey closes the window" 
   "Окно: Hotkey закрывает окно"
   hotkey_closes_wnd = 1
     При нажатии "горячей клавиши" плагина в окне QSearch, оно (окно) 
     закрывается (аналог нажатия Esc).
   hotkey_closes_wnd = 0
     При нажатии "горячей клавиши" плагина в окне QSearch, фокус ввода
     передается окну редактирования AkelPad.

12) "Window: Editor auto-focus"
   "Окно: Авто-фокус в редактор"
   editor_autofocus = 111
     То же, что 11, но окно редактирования AkelPad всегда получает фокус
     ввода при движении указателя мыши в этом окне (даже если указатель 
     мыши при этом не покидал строку поиска QSearch).
     При снятии галочки "Window: Editor auto-focus" значение параметра
     'editor_autofocus' устанавливается в 110.
   editor_autofocus = 110
     Работает так же, как при editor_autofocus = 10.
     При установке галочки "Window: Editor auto-focus" значение параметра
     'editor_autofocus' устанавливается в 111.
   editor_autofocus = 101
     Работает так же, как при editor_autofocus = 111.
     При снятии галочки "Window: Editor auto-focus" значение параметра
     'editor_autofocus' устанавливается в 100.
   editor_autofocus = 100
     Работает так же, как при editor_autofocus = 0.
     При установке галочки "Window: Editor auto-focus" значение параметра
     'editor_autofocus' устанавливается в 101.
   editor_autofocus = 11
     Если панель QSearch имеет фокус ввода и указатель мыши из строки поиска
     панели QSearch передвигается в окно редактирования AkelPad, то фокус 
     ввода переходит к окну редактирования AkelPad.
     Если указатель мыши передвигается в строку поиска панели QSearch,
     то фокус ввода переходит к строке поиска.
     При снятии галочки "Window: Editor auto-focus" значение параметра
     editor_autofocus устанавливается в 10.
   editor_autofocus = 10
     Если указатель мыши передвигается в строку поиска панели QSearch,
     то фокус ввода переходит к строке поиска.
     При установке галочки "Window: Editor auto-focus" значение параметра
     editor_autofocus устанавливается в 11.
   Также можно вручную установить одно из следующих значений:
   editor_autofocus = 1
     Работает так же, как при editor_autofocus = 11.
     При снятии галочки "Window: Editor auto-focus" значение параметра
     editor_autofocus устанавливается в 0.
   editor_autofocus = 0
     Ничего особенного не происходит: ни строка поиска QSearch, ни окно
     редактирования AkelPad не получают фокус ввода автоматически при 
     наведении указателя мыши.
     При установке галочки "Window: Editor auto-focus" значение параметра
     editor_autofocus устанавливается в 1.

13) dock_rect_disabled = 1
     Если значение этого параметра вручную установлено в 1, то координаты
     "встроенного" окна QSearch не будут сохраняться.

14) dock_rect = ...
     (внутренний параметр, сохраняется автоматически при 'dock_rect_disabled'
     равном 0)

15) color_notfound = FFE0E000
     Цвет фона, который устанавливается в случае, когда искомый текст не
     найден. Этот цвет задается в виде "RRGGBB00", где RR, GG и BB - это
     шестнадцатиричные значения красного, зеленого и синего цветов (от 00
     до FF).

16) color_eof = E4FFE400
     Цвет фона, который устанавливается при пересечении конца файла (когда
     поиск продолжается с начала файла). Этот цвет задается в виде 
     "RRGGBB00", где RR, GG и BB - это шестнадцатиричные значения красного,
     зеленого и синего цветов (от 00 до FF).
     При установке "color_eof = FFFFFF00" цвет меняться не будет.

17) color_highlight = C0FFC000
     Цвет фона для текста, который подсвечивается при установленной галочке
     "Highlight all". Этот цвет задается в виде "RRGGBB00", где RR, GG и BB -
     это шестнадцатиричные значения красного, зеленого и синего цветов (от 00
     до FF).

18) highlight_mark_id = 1001
     Параметр 'ID' для плагина HighLight когда QSearch вызывает его функцию
     "HighLight::Main" для подсветки (пометки) текста.

19) highlight_state = 0
    (сохраняется автоматически при вкл/выкл галочки "Highlight all").
    Также можно вручную установить одно из следующих значений:
    highlight_state = 10
      При запуске AkelPad галочка "Highlight all" всегда не установлена.
    highlight_state = 11
      При запуске AkelPad галочка "Highlight all" всегда установлена.

20) use_alt_hotkeys = 0
     Дополнительные сочетания клавиш в панели QSearch отключены.
    use_alt_hotkeys = 1
     В панели QSearch доступны следующие дополнительные сочетания клавиш:
     Alt+alt_match_case    (Alt+C) - Учитывать регистр (case) вкл/выкл
     Alt+alt_whole_word    (Alt+W) - Слово целиком (whole word) вкл/выкл
     Alt+alt_highlight_all (Alt+H) - Подсветить все (highlight) вкл/выкл

21) alt_match_case = 67
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Учитывать регистр" (панель QSearch).
     Значение 67 соответствует клавише 'C', т.е. получаем сочетание Alt+C.
     Код клавиши может быть посчитан как (англ.буква - 'A' + 65).
     То есть 65 соответствует Alt+A, 66 - Alt+B, 67 - Alt+C и т.д.
     Также, 48 соответствует Alt+0, 49 - Alt+1, 50 - Alt+2 и т.д.
     Для детальной информации по кодам клавиш см. страницу Virtual-Key Codes
     в MSDN.

22) alt_whole_word = 87
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Слово целиком" (панель QSearch).
     Значение 87 соответствует клавише 'W', т.е. получаем сочетание Alt+W.
     См. 'alt_match_case' для более детальной информации.

23) alt_highlight_all = 72
     Если 'use_alt_hotkeys' включено (установлено в 1), этот параметр задаёт
     код быстрой клавиши для галочки "Подсветить все" (панель QSearch).
     Значение 72 соответствует клавише 'H', т.е. получаем сочетание Alt+H.
     См. 'alt_match_case' для более детальной информации.

24) find_history_items = 15
     Максимальное количество элементов в истории поиска (выпадающем списке).
     Установка этого значения в 0 отключает историю поиска.

25) history_save = 3
     Если установлено в 3, история поиска вместе с состоянием галочек
     "Учитывать регистр" и "Слово целиком" сохраняется в Системном Реестре.
     Если установлено в 2, состояние галочек "Учитывать регистр" и
     "Слово целиком" сохраняется в Системном Реестре.
     Если установлено в 1, история поиска сохраняется в Системном Реестре.
     Если установлено в 0, история поиска и состояние галочек не сохраняется.


--------
История:
--------
v.4.4 (Июль 2011)
 + улучшена реализация doSelectCurrentWord для SelFindNext/Prev
   (взята из "WordCaretSelect.js" by FeyFre & VladSh)

v.4.3 (Июль 2011)
 + добавлено: srch_stop_eof=10

v.4.2 (Май 2011)
 - исправлено: теперь сообщение "EOF" не появится во время qsUpdateHighlight()
 - исправлено: при показе панели QSearch подхваченный текст не был выделен
 + добавлено: editor_autofocus=100

v.4.1 (Май 2011)
 * для AkelPad 4.6.0+
 + поддержка AkelPad x64
 - исправлено: без нажатого Shift, гор.клавиша Поиск Вверх работала как Вниз
 - исправлено: Grey Alt обрабатывался некорректно (например, для Польского)

v.4.0 (Декабрь 2010)
 + экспериментально: "Слово целиком" при поиске со спец. символами
   (тогда "**" соответствует 0 или больше любых непробельных символов)
 + галочки "Учитывать регистр" и "Слово целиком" могут сохраняться 
   (значение 'history_save' должно быть установлено в 3 вручную!)

v.3.9 (Октябрь 2010)
 * для AkelPad 4.5.0+

v.3.8 (Сентябрь 2010)
 * теперь неактивное окно AkelPad не перехватывает фокус ввода
 * добавлена иконка

v.3.7 (Сентябрь 2010)
 * третья годовщина QSearch :)
 * изменено поведение 'srch_pickup_selection'
 + добавлено: 'editor_autofocus'

v.3.6 (Сентябрь 2010)
 + мелкие улучшения

v.3.5 (Август 2010)
 - исправлено: "Highlight all" не работало с 'srch_pickup_selection'
 + добавлено: история поиска
 + новый параметр настройки: find_history_items
 + новый параметр настройки: history_save

v.3.4 (Август 2010)
 + если нет выделения, SelFindNext/Prev выделяет текущее слово

v.3.3 (Июль 2010)
 - улучшено обнаружение Coder::HighLight
 - улучшена совместимость с PMDI
 - теперь Uninitialize() вызывается по AKDN_MAIN_ONFINISH

v.3.2 (Июнь 2010)
 * для AkelPad 4.4.4+
 + расширенная настройка catch_main_esc

v.3.1 (Май 2010)
 + теперь QSearchDlg использует шрифт "MS Shell Dlg"

v.3.0 (Март 2010)
 + теперь спец. символы могут использоваться в режиме "на лету"

v.2.9 (Февраль 2010)
 - исправлено: Ctrl+Z не работал после Ctrl+Del или Ctrl+BS

v.2.8 (Февраль 2010)
 * для AkelPad 3.7.4+/4.4.0+
 + QSearchDlg: собственная обработка Ctrl+Del, Ctrl+BS, Ctrl+A

v.2.7 (Октябрь 2009)
 * теперь SetWindowsHookEx() в DialogSwitcher использует GetCurrentThreadId()

v.2.6 (Октябрь 2009)
 + новые параметры настройки для дополнительных сочетаний клавиш панели QSearch
 - исправлено: теперь 'alt_whole_word' не работает при скрытом "Слово целиком"

v.2.5 (Октябрь 2009)
 + новый параметр настройки: color_eof
 + новый параметр настройки: use_alt_hotkeys

v.2.4 (Сентябрь 2009)
 * DialogSwitcher работает с AkelPad 4.3.2+
 - исправлено: проблема перерисовки окна ввода при режиме поиска не "на лету"
 - исправлено: изменение галочки "Слово целиком" не устанавливало QSEARCH_FIRST
 + добавлено: новые значения для параметра 'highlight_state'

v.2.3 (Сентябрь 2009)
 * вторая годовщина QSearch :)
 + добавлено: состояние галочки "Подсветить все" сохраняется
 - исправлено: неверное поведение при нажатии Shift во время поиска "на лету"
 - исправлено: иногда QSearch продолжал поиск по нажатию hot-key

v.2.2 (Август 2009)
 + добавлена функция "Подсветить все" (требует включенный плагин Highlight)
 * для AkelPad 3.7.3+/4.3.0+
 * работает с плагином Highlight версии 4.7 или выше

v.2.1 (Март 2009)
 * для AkelPad 3.7.0+/4.2.0+

v.2.0 (Март 2009)
 - исправлено (DialogSwitcher): горизонтальная полоса прокрутки окна 
   редактирования не перерисовывалась при переключении с диалога
   Поиска/Замены на окно QSearch

v.1.9 (Декабрь 2008)
 + новая функция: DialogSwitcher

v.1.8 (Октябрь 2008)
 + исправлено: при нажатом Shift функция SelFindNext работала как SelFindPrev

v.1.7 (Октябрь 2008)
 + исправлено: продолжение поиска в MDI-режиме при скрытом окне QSearch

v.1.6 (Август 2008)
 + новый параметр настройки: srch_selfind_pickup

v.1.5 (Июль 2008)
 * для AkelPad 3.6.0+

v.1.4 (Июнь 2008)
 * для AkelPad 3.5.5+
 + новые функции: SelFindNext, SelFindPrev

v.1.3 (Май 2008)
 * для AkelPad 3.5.5+
 + перехват клавиши F3 (продолжение поиска) из главного окна
 + мелкие улучшения

v.1.2 (Апрель 2008)
 * для AkelPad 3.5.5+
 + встроенная поддержка русского и украинского интерфейса
 + дополнительные настройки и возможности

v.1.1 (Март 2008)
 * для AkelPad 3.5.3+
 + теперь окно плагина "встраивается" в окно AkelPad
 + мелкие улучшения
 + дополнительные настройки

v.1.0 (Сентябрь 2007)
 * начальная версия
 * для AkelPad 3.3.x/3.4.x


Автор выражает благодарность Александру Шенгальцу aka 
Instructor за текстовый редактор AkelPad  ;-)
---------------------------------------------------------------------------
The original icon by Yusuke Kamiyamane, http://p.yusukekamiyamane.com/
The icon has been modified by DV.
---------------------------------------------------------------------------
(C) Sep 2007 - Jul 2011, Vitaliy Dovgan aka DV
          dvv81 <at> ukr <dot> net