| Summary: | Добавить в интерфейс VirtualBox поле отбора | ||
|---|---|---|---|
| Product: | [Внутреннее (Etersoft)] Отдел прикладного ПО | Reporter: | Vitaly Lipatov <lav> |
| Component: | Общее | Assignee: | Sergey Mitrofanov <sergeym> |
| Status: | CLOSED FIXED | QA Contact: | Vitaly Lipatov <lav> |
| Severity: | minor | ||
| Priority: | P4 | CC: | baraka, danil, ilyap, kondratyuk, lav, pv, sergeym, sin, stas |
| Version: | не указана | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | All | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Attachments: |
Пример поля отбора
Патч, добавляющий строку поиска для отбора ВМ по имени. Версия 2 патча со строкой поиска Версия 3 патча со строкой поиска Версия 4 патча со строкой поиска Версия 5 патча со строкой поиска Версия 6 патча со строкой поиска Версия 7 патча со строкой поиска Версия 8 патча со строкой поиска Версия 9 патча со строкой поиска Иконка 1 Иконка 2 Версия 10 патча со строкой поиска Версия 11 патча со строкой поиска Версия 12 патча со строкой поиска |
||
Пока VirtualBox чинили посмотрел проект начал разбираться. Написан он на QT, что не очень знакомо мне. Нужно время разобраться. У меня почему-то на builder64 никак не хочет собираться virtualbox. По-моему следует рассматривать всё, исходя из класса UIBootTable. У меня и у других отлично собирается через $ rpmbb. Очень странно. Завтра постараюсь быть на связи после 14, если что. Поставил те же пакеты на просто builder, можно пробовать там. Увеличил размер буфера в консоли, вот что выдает rpmbb на builder64
kmk: *** No rule to make target `/home/sergeym/RPM/BUILD/VirtualBox-4.1.12_OSE/src/recompiler/Makefile.kmk'. Stop.
ошибка: Неверный код возврата из /home/sergeym/tmp/rpm-tmp.36947 (%build)
Ошибки сборки пакетов:
Неверный код возврата из /home/sergeym/tmp/rpm-tmp.36947 (%build)
С классом я немного ошибся. Окошко, в котором располагаются созданные машины, и его логика работы располагается где-то в UIVMListView и VBoxSelectorWnd. Это в каталоге Frontends/VirtualBox/src/selector/ Потратил кучу времени на попытки собрать в пакет и запустить. Собирать получается через раз, как будто программа живет своей жизнью. Запускаться не хочет. В общем, отладка VirtualBox - дело не простое.
Во-первых, сборка работает только из рабочего каталога, который прибит гвоздями к %vboxdir, который задан как %_libdir/virtualbox.
Во-вторых, программы должны запускаться только от рута, причём через suid атрибуты файла и это причина, по которой рабочий каталог прибит гвоздями:
[sin@snote virtualbox]$ grep 4710 virtualbox.spec
%attr(4710,root,vboxusers) %vboxdir/VBoxHeadless
%attr(4710,root,vboxusers) %vboxdir/VBoxNetDHCP
%attr(4710,root,vboxusers) %vboxdir/VBoxNetAdpCtl
%attr(4710,root,vboxusers) %vboxdir/VBoxSDL
%attr(4710,root,vboxusers) %vboxdir/VirtualBox
В-третьих, suid'ные программы не получится отлаживать в каталоге смонтированном через в опцией nosuid, а именно с этой опцией монтируется обычно /home, также смонтирован у нас и /srv.
Так что отладка в рабочем каталоге, в принципе, проблематизирована даже не сборочным результатом, а нашим же рабочим окружением.
Минимальный набор действий, который позволяет задать правильные права доступа выглядит вот так:
# chown root:vboxusers VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl VBoxSDL VirtualBox
# chmod 4710 VBoxHeadless VBoxNetDHCP VBoxNetAdpCtl VBoxSDL VirtualBox
# chown root . *.r0 *.gc *.so VBox* components/ components/VBox*
Далее, для облегчения отладки, я провёл ряд экспериментов и добавил несколько вспомогательных макросов в spec-файл в двух следующих коммитах:
commit 53f8bef377d6b65b800a8b83d270818200ba6b8c
Add vbox-debug.sh script for debugging
Using: rpm -bb --enable debug
or gear-rpm -bb --enable debug
commit 187c476b30ea3b4c2f0429e0016a2ba2814e0dce
Update spec file for debug build in source directory
При сборке с опцией debug прибитый каталог vboxdir задаётся в каталоге сборки проекта и сборка отваливается на стадии %install примерно с таким выводом на экран:
VirtualBox not installable due debug build enabled
Run: /home/sin/RPM/BUILD/VirtualBox-4.1.18_OSE/vbox-debug.sh
or /home/sin/RPM/BUILD/VirtualBox-4.1.18_OSE/vbox-debug.sh ./VirtualBox
Но проблемы nosuid это не решает, но я здесь и повлиять никак не могу...
Последние коммиты доступны по адресу (ветка master):
http://git.altlinux.org/people/sin/packages/virtualbox.git
Версию VirtualBox там нужно поставить 4.1.18 при сборке:
$ gear-rpm --commit -bi --enable debug
Может оказаться полезным - http://fossies.org/linux/misc/VirtualBox-4.1.18.tar.gz/dox/index.html Разобрались с VirtualBox (как собирать). На данный момент набросал дизайн, соединил сигнал со слотом. На данный момент работает, возможны проблемы с перетаскиванием машин. Так же ещё не тестировалось удаление/добавление машин. Есть небольшая заминка при очистке строки поиска. Баг - если кликнуть на машину, если в строке поиска что-то есть, то информация о машине появляется/пропадает в правой части окна. Предварительно первая версия готова. Пока присутствует баг с Drag&Drop, так что я просто отключил эту возможность до исправления. Исправил баг с Drag&Drop. Drag&Drop возможен только при пустой строке поиска. Прикладываю патч. Created attachment 2557 [details]
Патч, добавляющий строку поиска для отбора ВМ по имени.
Вышла бета-версия 4.2.0 (вариант для сборки доступен у меня на альтовом гите), чтобы облегчить портирование этого улучшения, кроме патча, следует держать отдельную ветку с данным изменением. Просмотрел патч. Думаю не стоит вносить в него улучшения в оформлении чужого кода. Я имею в виду добавление фигурных скобочек, вставку и удаление пустых строк и т.п. Такие изменения ничего, по сути, не вносят, а проблемы при совместной работе, включая объединения кода с будущими версиями, добавляют без надобности. Внес исправления в патч, код привел к общему стилю. Created attachment 2561 [details]
Версия 2 патча со строкой поиска
Created attachment 2565 [details] Версия 3 патча со строкой поиска Поправил и приложил патч в очередную сборку для проверки. В исправленном патче убраны лишние детали, о которых я уже указывал: - убрана вставка "лишних" фигурных скобок, в оригинальный код; - восстановлено удаление и вставка пустых строк; - удалены пробельные символы в пустых строках. http://git.altlinux.org/people/sin/packages/virtualbox.git?p=virtualbox.git;a=shortlog;h=refs/heads/search Работает, но выглядит не нужным, для многих пользователей. Думаю, внести ряд дополнений: - показывать строку поиска по клавише CTRL+F (по умолчанию, не показывать, если не выставлена настройка); - добавить в меню настройки (вкладка Общие) опцию - "показывать строку поиска" с указанием в подсказке комментария, о удобстве при большом списке виртуальных машин. - сохранять настройку "показывать строку поиска" в общем списке настроек приложения. После внесения этих дополнений можно будет попытаться пробросить этот патч в апстрим. Пока что добавил работу со строкой поиска по CTRL + F. Не понял, зачем так мудрить с настройками. При запуске программы можно не показывать строку поиска. Кому надо - сам вызовет. А делать checkbox, разрешающий вызов строки поиска будет излишним, по-моему. На данный момент поведение строки поиска такое - если в строке поиска был текст, то сокрытие строки по CTRL+F вызовет очистку строки поиска и соответственно будет выведен весь лист машин. В принципе можно придумать любой режим работы. Главное, чтоб пользователю удобно было. Created attachment 2566 [details]
Версия 4 патча со строкой поиска
На данный момент мы делаем эту надстройку для себя, в свободное время попытаемся добавить настройки в меню. Пока багу можно закрывать как отложенную, если строка поиска корректно работает. Created attachment 2567 [details]
Версия 5 патча со строкой поиска
Исправил небольшой косячек. После старта фокус сразу на строке поиска. Created attachment 2568 [details]
Версия 6 патча со строкой поиска
Единственная настройка, которую я бы внес - "показывать строку поиска при старте". Добавил checkbox. Добавил его в штатную систему работы настроек VirtualBox. Осталось только сделать, чтобы он влиял на наличие строки поиска при запуске программы, а так же перевести его и добавить подсказку, как было написано ранее. Собственно, я имел в виду как раз то, что ты делаешь: "показывать строку поиска при старте". В текущем варианте, без настройки, я думаю более разумно не показывать строку поиска при старте. Относительно метода отображения строки поиска хочу добавить, что логично оформить действие showHideSearchLine(), которое будет доступно, как по CTRL+F,так и в Машина->Строка Поиска (Machine->Search Line). Я хочу собрать этот вариант сразу в сизиф. Сделал сборку на основе последнего патча - там есть ошибка деиницализации, которая проявляется при закрытии приложения: [sin@snote virtualbox]$ VirtualBox Ошибка сегментирования Сборка без патча такого эффекта не даёт. Изменения, с которыми проводилась сборка доступны в репозитории (ветка search): http://git.altlinux.org/people/sin/packages/virtualbox.git Мне кажется, что строка поиска нужна сразу. Оболочку открывают, что бы зупустить машину. Для этого её нужно найти. Лишнее нажатие ctrl-f ни к чему. (В ответ на comment #29) > В текущем варианте, без настройки, я думаю более разумно не показывать строку > поиска при старте. (В ответ на comment #31) > Мне кажется, что строка поиска нужна сразу. Оболочку открывают, что бы > зупустить машину. Для этого её нужно найти. Лишнее нажатие ctrl-f ни к чему. > > (В ответ на comment #29) > > В текущем варианте, без настройки, я думаю более разумно не показывать строку > > поиска при старте. Опция "показывать при старте" для того и нужна. У нас машин много, поэтому галочку поставил и забыл. У кого штук 5 ясное дело она не нужна, и строка поиска не будет глаза мазолить. Сделал новую версию патча. Теперь настройка показать/скрыть при старте работает. Какой текст поставить как подсказку при наведении мыши? Представляю что-то вроде: "When checked, the search line will be visible after VirtualBox started. It is useful when there are a lot of VMs in thi list and you want to search some VMs." Подправте плз ошибки. На тему бага при закрытии программы - к сожалению не удается повторить у себя. Баг проявляется всегда, независимо от того, что есть в строке поиска / какие машины есть в списке / какие машины запущены? Created attachment 2572 [details]
Версия 7 патча со строкой поиска
Избавиться от списка, в котором приходится дополнительно хранить все машины, нельзя, по-моему. Или же придется заводить списки индексов и тп, но это как-то слишком запутанно. Исправил небольшой баг - после поиска считалось, что список машин пуст. Created attachment 2576 [details]
Версия 8 патча со строкой поиска
Осталось собрать и поставить на virtualbox "Относительно метода отображения строки поиска хочу добавить, что логично оформить действие showHideSearchLine(), которое будет доступно, как по CTRL+F,так и в Машина->Строка Поиска (Machine->Search Line)." Ранее было доступно только по Ctrl+F. Теперь появилось действие в меню, как написано выше. Благодаря этому действию удалось задействовать штатный механизм работы с горячими клавишами, который уже есть в VirtualBox. Осталось иконку добавить и найти, где вызывается деструктор созданных действий. Created attachment 2580 [details]
Версия 9 патча со строкой поиска
Пока не удается прикрутить иконки. Сами иконки прикладываю. Created attachment 2581 [details]
Иконка 1
Created attachment 2582 [details]
Иконка 2
Прикрутил иконки. Новый патч. Created attachment 2583 [details]
Версия 10 патча со строкой поиска
Исправил опечатку в коде, добавил перевод Created attachment 2584 [details]
Версия 11 патча со строкой поиска
(В ответ на comment #30) > Сделал сборку на основе последнего патча - там есть ошибка деиницализации, > которая проявляется при закрытии приложения: > [sin@snote virtualbox]$ VirtualBox > Ошибка сегментирования > > Сборка без патча такого эффекта не даёт. > > Изменения, с которыми проводилась сборка доступны в репозитории (ветка search): > http://git.altlinux.org/people/sin/packages/virtualbox.git Подтверждаю, есть такая бага. К сожалению проявилась только после запуска на VirtualBox. При запуске собранного примера на builder64 такого не было. Разобрались, где падает. Падает на удалении delete searchLine. Осталось исправить. Created attachment 2598 [details]
Версия 12 патча со строкой поиска
Добавил новый патч. По идее падать больше не должно. Может, обсуждалось уже? Фичреквест для будущего развития: кнопка сброса фильтра. Вижу удобный пример в roundcube. В нашем варианте кнопка, видимо, становится активной при непустом поле поиска. Нажатие на кнопку - сброс фильтра и обновление информации о машинах. Решено Закрываю решённые более 180 дней назад. |
Created attachment 2512 [details] Пример поля отбора При использовании большого количества машин в VirtualBox возникает проблема с поиском нужной машины. Она усугубляется тем, что машины выводятся в списке в порядке их добавления, или ещё каком-то, но никак не в алфавитном, и никак это не управляется. Есть предложение добавить в главное окно поле отбора, чтобы при начале набора в нём список перестраивался, выводя только совпадающие записи. Пример того, где (поле над списком систем) и как поле могло бы быть размещено, в приложении. P.S. Чтобы получить гит-репозиторий с пакетом virtualbox, достаточно выполнить $ rpmgp -g virtualbox