GTK виджет выпадающего календаря? - PullRequest
3 голосов
/ 01 февраля 2011

У меня были проблемы с созданием выпадающего виджета календаря GTK в моем приложении.

Цели:

По сути, я хотел получить текстовое комбо- в поле, где вы можете ввести дату, например, 2011/02/01, и она автоматически отформатирует дату.Эта часть не является проблемой, другая часть - это раскрывающийся календарь, в котором вы можете нажать на кнопку раскрывающегося списка рядом со списком, и она выпадает в календарь, в котором вы можете выбрать дату.

Проблемы / полу-решения:

Я потратил некоторую работу на хакерство с Ruby GTK (на самом деле привязки Gnome), и ниже приведены некоторые решения, которые я придумалас.

  1. По сути, я создал текстовое поле, затем создал кнопку и дал ей «стрелку вниз» для имитации выпадающей кнопки для комбинированного окна, и это выглядит хорошо, не самым лучшимвещь в мире.

  2. Для фактического виджета календаря я бы создал диалоговое окно без полей и без заголовка, вставил в него виджет календаря и поместил его прямо под текстовым полем, где выпадающий списокпоявится список со списком.

  3. Он будет отклонен, когда пользователь выберет дату.

Однако с указанным выше есть несколько проблем.sРешение, которое я придумал:

  1. Диалоговое окно без полей / без заголовка все еще создает что-то, что отображается на панели задач ...

  2. Если пользователь нажимает «ctrl + q», чтобы выйти из приложения, поскольку виджет календаря имеет фокус, привязка клавиш никогда не достигает родительского окна.

  3. Еслия перемещаю родительское окно, виджет календаря застрял там, плавающий в воздухе.

  4. Если я щелкну где-нибудь еще или введу дату в текстовое поле, виджет календаря не исчезнет, ​​янужно выбрать дату из виджета календаря ...

Итак, вкратце, я хотел бы получить совет или предложение о том, как сделать правильный / лучший способ сделать виджет календаря выпадающим?Я бы предпочел хранить это в GTK без дополнительных виджетов, таких как Gnome и т. Д.

1 Ответ

2 голосов
/ 02 февраля 2011

Поле со списком принимает GtkListStore за раскрывающееся меню.Вы можете реализовать пользовательский GtkCellRenderer, который отображает дату в виде GtkCalendar в своей ячейке, а затем просто иметь один элемент (дату) в хранилище списка.Когда вы выпадаете в поле со списком, появляется календарь, пользователь может выбрать дату, а затем вы можете прочитать дату из вашего хранилища списков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...