QSearch plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

private_joker wrote:Возвращаюсь в обычный режим, вхождения остаются подсвеченными даже если слово не выделено
Нужно больше входных данных, не могу воспроизвести.
Должно быть, это зависит от конкретных настроек QSearch + Coder + AkelPad.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
Перейдите по ссылке в предыдущем сообщении там есть видео и архив с программой.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Архив уже удалён, но проблему воспроизвёл.
Дело в том, что при выходе из полноэкранного режима диалогу (панели) QSearch посылается сообщение WM_SHOWWINDOW.
То есть теперь надо как-то различать WM_SHOWWINDOW, соответствующий обычному показу диалога (когда пользователь вызывает диалог явно) и WM_SHOWWINDOW, являющийся следствием выхода из полноэкранного режима. Тут мне нужна подсказка, как бы это лучше сделать.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

DV
Особо не тестировал.

QSearch.c:

Code: Select all

BOOL g_bOnDlgStart=FALSE;

// Plugin extern function
void __declspec(dllexport) QSearch(PLUGINDATA* pd)
{
...
    g_bOnDlgStart=TRUE;
    pd->nUnload = doQSearch(pd, FALSE);
    g_bOnDlgStart=FALSE;
}
QSearchDlg.c:

Code: Select all

extern BOOL g_bOnDlgStart;
...

        case WM_SHOWWINDOW:
        {
            if ( wParam && g_bOnDlgStart)
...

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Да, в конце концов остановился на подобном решении.
Заодно обнаружил пару "косяков" с вызовом подсветки найденного текста. Ещё несколько дней "помедитирую" с исходным кодом, что-то там всё запутано сильно...

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

QSearch v.6.1
- исправлено: иногда "Подсветить все" вызывалось без надобности
+ добавлена информация про лицензию

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

Смотрю, уже 3 года прошло с момента обсуждения внешнего вида панели QSearch - когда предлагалось использовать кнопки с изображениями вместо чек-боксов (checkbox).
То, что с тех пор во внешнем виде ничего не изменилось, не означает, что я не думал об этом. Дело в том, что исходный код QSearch слишком сильно "завязан" на Win API, и использование новых кнопок (отдельных кнопок или панели инструментов) вместо старых чек-боксов потребует переписать достаточно большое количества кода. Пока что подобная задача не представляется мне достаточно интересной, чтобы оправдать затраченное на неё время.
Как вариант, если среди аудитории пользователей AkelPad есть такой человек, которому внешний вид QSearch действительно настолько важен, что он готов уделить на это своё время... Тогда я бы подхватил разработку с того момента как:
1. В файле QSearch.rc будет представлен новый вид диалога поиска - скажем, как IDD_QSEARCH_NEW_02;
2. В файле QSearchDlg.c будет реализована вся инициализация этого диалога (расставление кнопок по местам, если нужно, отрисовка на кнопках картинок и т.п.);
3. В файле QSearchDlg.c будут подготовлены "пустышки" для обработчиков нажатий кнопок (хотя, если дело дойдёт уже до этого пункта, это я мог бы взять на себя).
То есть как только все аспекты кода, относящиеся чисто к внешнему виду, будут готовы, то внутреннюю логику работы, относящейся к реализации поиска, я допишу сам.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

QSearch v.6.2
- исправлено: неверно определялась версия AkelPad
Из-за этого, в частности, подсветка регулярок (по Highlight all) не работала, как нужно.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV
Интерфейс - то такое... - уже более-менее все привыкли.

А вот цвета текста и фона найденных вхождений (подсветка) захардкодены в ini, что очень неудобно: если подобрать хорошие цвета для тёмных тем, то для светлых текст почти невиден, и наоборот.
Можно ли завязаться на какие-то переменные Coder-плагина? Если переживаем за консистентность (когда Coder не установлен), то для такого случая, можно опираться на настройки программы "Вид\Цвета".
Можно в ini указать переменные Coder-плагина, это будет более-менее гибко.

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV
Гляньте пожалуйста, можно ли это поправить?

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

VladSh wrote:Гляньте пожалуйста, можно ли это поправить?
Правильно ли я понимаю, что в момент нажатия Ctrl+R диалог поиска всё ещё виден (т.е. не был предварительно закрыт)?
Если да, то именно в этом и смысл срабатывания DialogSwitcher: при переключении типа диалога (С диалога Поиск на диалог Замена) искомый текст сохраняется между диалогами.
Иначе было бы странно: скажем, в диалоге поиска мы ввели какую-то искомую строку, затем выделили совершенно другой текст в редакторе, нажали Ctrl+R - и искомая строка изменилась бы на текст, выделенный в редакторе.
Если в момент переключения диалога ориентироваться на то, где находится фокус ввода: в диалоге поиска или в редакторе, - то возможна следующая проблема. Пусть мы нажали Ctrl+F и ввели в строку AAA; затем в редакторе выделили текст BBB; затем кликнули по диалогу поиска, чтобы фокус ввода оказался на нём, и нажали Ctrl+R. Получается, что в редакторе выделен текст BBB, а в строке поиска (у которой фокус ввода) - текст AAA. И теперь в диалоге замены должен быть AAA или BBB?

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV wrote:Правильно ли я понимаю, что в момент нажатия Ctrl+R диалог поиска всё ещё виден (т.е. не был предварительно закрыт)?
Именно.
DV wrote:Пусть мы нажали Ctrl+F и ввели в строку AAA; затем в редакторе выделили текст BBB; затем кликнули по диалогу поиска, чтобы фокус ввода оказался на нём, и нажали Ctrl+R. Получается, что в редакторе выделен текст BBB, а в строке поиска (у которой фокус ввода) - текст AAA. И теперь в диалоге замены должен быть AAA или BBB?
Когда кликнули по диалогу поиска - это чуть другая ситуация, и тогда описанный алгоритм совершенно правильный, т.к. я явно, тыкая в диалог, показываю, что набранное в диалоге поиска значение мне и далее нужно.
Но если же я выделяю текст и именно(!) жму Ctrl+R (зная при этом что должен произойти подхват выделенного текста), то результат выглядит странно.

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

OK, это не сложно изменить.
Однако, вопрос. Что делать, когда в диалоге Поиска или Замены отмечено Направление "В выделении"? Дело в том, что в этом случае выделенный в редакторе текст не подхватывается диалогом автоматически...
(В общем случае вопрос таков: что делать при переключении диалога, когда стандартный вызов диалога не предполагает автоматическое подхватывание выделенного в редакторе текста?
И вопрос технического плана: как можно выяснить, подхватил диалог выделенный текст или нет? Не хотелось бы для этого вытаскивать весь выделенный текст из редактора и диалога поиска и сравнивать их между собой...)

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

DV wrote:Что делать, когда в диалоге Поиска или Замены отмечено Направление "В выделении"? Дело в том, что в этом случае выделенный в редакторе текст не подхватывается диалогом автоматически...
По моему, просто не подхватывать. И галка подхвата в настройках плага в этом случае, наверное, должна игнорироваться.
DV wrote:В общем случае вопрос таков: что делать при переключении диалога, когда стандартный вызов диалога не предполагает автоматическое подхватывание выделенного в редакторе текста?
Бывают ещё случаи, когда стандартный диалог не производит подхват, кроме поиска в выделении? /не знаю просто/ Если такие есть, наверное надо разбирать каждый индивидуально.
DV wrote:И вопрос технического плана: как можно выяснить, подхватил диалог выделенный текст или нет? Не хотелось бы для этого вытаскивать весь выделенный текст из редактора и диалога поиска и сравнивать их между собой...
У меня в одном скрипте тоже была такая дилема. Можно пойти на соглашение - вытягивать определённое количество символов (я брал вроде 200). Также можно добавить параметр в ini для ручного регулирования этой цифрой (для тех, кто ищет большие повторяющиеся блоки xml).

DV
Offline
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

VladSh wrote:вытягивать определённое количество символов (я брал вроде 200)
Скорбной доли получения текста покоряясь, может ли грешник лелеять надежду на ограничение запрашиваемого выделенного текста определённым количеством символов? Ибо AKD_GETSELTEXTW, подобно EM_GETSELTEXTW, весь выделенный текст едино возвращает. Что в глубокую печаль вводит, если очень много текста выделено.
Post Reply