Created attachment 2512 [details] Пример поля отбора При использовании большого количества машин в VirtualBox возникает проблема с поиском нужной машины. Она усугубляется тем, что машины выводятся в списке в порядке их добавления, или ещё каком-то, но никак не в алфавитном, и никак это не управляется. Есть предложение добавить в главное окно поле отбора, чтобы при начале набора в нём список перестраивался, выводя только совпадающие записи. Пример того, где (поле над списком систем) и как поле могло бы быть размещено, в приложении. P.S. Чтобы получить гит-репозиторий с пакетом virtualbox, достаточно выполнить $ rpmgp -g virtualbox
Пока 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 дней назад.