Page 1 of 1

Добавление кнопки в ячейку wxGrid

Posted: Wed Dec 17, 2008 4:29 pm
by xalgor
Есть wxGrid. Каким образом можно в одну из ее ячеек добавить кнопку, как показано на картинке?
Спасибо.

Image

Posted: Wed Dec 17, 2008 7:27 pm
by T-Rex

Posted: Thu Dec 18, 2008 8:39 am
by xalgor
T-Rex wrote:wxPropertyGrid
Спасибо! :D

Posted: Fri Dec 19, 2008 3:38 pm
by xalgor
Вот только не совсем понятно, как происходит добавление кнопки в ячейку.
То ли поверх каждой ячейки накладывает прозрачная панель с кнопкой, то ли как-то замещается Renderer и Editor, то ли еще как-то. Так как никогда не общался с такого рода технологиями, то код кажется, мягко говоря, размазанным и уловить суть не особо получается.

Может быть в двух словах кто-то сможет объяснить принцип?

Posted: Fri Dec 19, 2008 3:58 pm
by T-Rex
Так эээ.. ну тут два варианта:
- Рендерить кнопку руками
- Размещать контрол/кнопку руками в виде дочернего контрола, обрабатывать изменения размеров ячейки и перемещать кнопку куда надо.

Тебе что именно реализовать надо, для wxGrid конпку в ячейке или устроит функционал wxPropertyGrid?

На http://wxwidgets.info я недавно две статьи постил по кастомизации wxGrid'а.

Posted: Fri Dec 19, 2008 4:41 pm
by xalgor
T-Rex wrote:Так эээ.. ну тут два варианта:
- Рендерить кнопку руками
- Размещать контрол/кнопку руками в виде дочернего контрола, обрабатывать изменения размеров ячейки и перемещать кнопку куда надо.

Тебе что именно реализовать надо, для wxGrid конпку в ячейке или устроит функционал wxPropertyGrid?

На http://wxwidgets.info я недавно две статьи постил по кастомизации wxGrid'а.
Спасибо за помощь.

Задача такова, что нужно для wxGrid для произвольной ячейки уметь ее сделать ButtonType (то есть текст + кнопка справа) и чтобы при нажатии на кнопку вызывалась некая функция.

В идеале планируется расширить класс wxGrid, чтобы был метод что-то вроде setButtonTypeCell(row, column, btn_name, callback), где колбэк - указатель на функцию, вызываемую при нажатии кнопки.

Кнопку руками рендерить как я понимаю не получится, так как для нее требуется стандартный вид на любой ОС, на которую будет портирован проект. На данный момент это только для винды реализуется, но Windows only функции использовать по вышеупомянутой причине нельзя.

Соответственно, получается, что нужно именно дочерним элементом кнопку добавлять, что я пытаюсь делать, но почему-то при создании кнопки с parent = grid ее не видно, если добавляю новую панель, а на нее кнопку, то она появляется, но при манипуляциях с grid панель исчезает и появляется кусками не совсем понятным образом.

Функционал PropertyGrid не устроит, так как там слишком много лишнего для моей задачи и не хочется полагаться на код сторонних разработчиков(а).

Сейчас потихоньку осиливаю Cross-platform GUI Programming with wxWidgets, думаю, что проблема в том, что некоторых принципов базовых пока не знаю.

PS. Статьи читал, но полностью переварить не смог :(
[offtop]
Там пару косяков можно в оформлении пофиксить:
1. Последние скриншоты не видны (в оригинале все ок) в обоих статьях
2. В середине предпоследней статьи в листинг кода врезался авторский текст про Example.cpp
[/offtop]

Posted: Wed Jan 21, 2009 11:48 am
by algor
Проблему решил написанием собственного контрола (текст+кнопка) и впихиванием оного в соответствующий самописный CellEditor.