Отправляет email-рассылки с помощью сервиса Sendsay

Практические советы по GTK+

  Все выпуски  

Практические советы по GTK+ (виджет ввода времени)


GtkTimePicker - этот виджет служит для ввода/отображения времени.

GtkTimePicker     GtkTimePicker-am

 

В зависимости от текущей локали, время будет представлено в 12 или 24 часовом формате.

Часы, минуты и секунды можно ввести цифрами с клавиатуры, клавишами вверх/вниз и PageUp/PageDown, стрелками в правой части виджета, предварительно установив курсор на соответствующее поле, а также колёсиком мыши при нахождении курсора над полем ввода часов, минут или секунд.

 

Основные функциии:

// создать новый виджет

// second - начальное время в секундах, от 0 до (60*60*24-1)

GtkWidget* gtk_time_picker_new (int second);

// задать время в секундах

void gtk_time_picker_set_second(GtkTimePicker *picker, int second);

// задать время в часах

void gtk_time_picker_set_hour(GtkTimePicker *picker, double hour);

// узнать время в секундах

int gtk_time_picker_get_second(GtkTimePicker *picker);

// узнать время в часах

double gtk_time_picker_get_hour(GtkTimePicker *picker);

 

 

Пример использования: (при сборке потребуются файлы gtktimepicker.h, gtktimepicker.c, gtkbasepicker.h и gtkbasepicker.c)

#include <gtk/gtk.h>

#include "gtktimepicker.h"

 

// обработчик сигнала изменения впемени

static gint selected_picker_value(GtkWidget *widget,gpointer data)

{

printf("time changed\n");

}

 

// основная функция

int main (int argc, char *argv[])

{

GtkWidget *window = NULL;

GtkWidget *time_picker;

gtk_init (&argc, &argv);

// Главное окно создаем;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

// обработчики сигналов завершения

gtk_signal_connect(GTK_OBJECT( window ),"delete_event",GTK_SIGNAL_FUNC(gtk_false),NULL );

gtk_signal_connect(GTK_OBJECT( window ),"destroy",GTK_SIGNAL_FUNC(gtk_main_quit), NULL);

// виджет ввода времени

time_picker = gtk_time_picker_new(150);// начальное время 00:02:30

// подключаем обработчик сигнала изменения времени

g_signal_connect (time_picker, "select_picker_value",G_CALLBACK (selected_picker_value),NULL);

// упаковка виджета в окно

gtk_container_add (GTK_CONTAINER (window), vbox);

gtk_widget_show_all(window);

gtk_main();

return 0;

}

 

 

Устройство виджета:

GtkTimePicker сделан на основе GtkBasePicker. В базовом классе переопределяем три функции, для инициализации параметров, проверки допустимости праметров и печати на экране:

picker_class->init_values = time_init_values;

picker_class->validate_values = time_validate_values;

picker_class->get_val_to_screen = time_get_val_to_screen;

 

Виджет ввода времени был бы совсем простым, но он меняется в зависимости от локализации и это немного усложняет задачу.

Число полей ввода может быть 3 в случае 24-х часового формата отображения времени или 4 в случае 12-ти часового формата. Четвёртым полем будет текст AM/PM или может a.м./p.м., всё зависит от выбранного языка в системе.

 

Полностью исходные коды виджета можно посмотреть здесь: gtktimepicker.h gtktimepicker.c


P.S. (Все выпуски, включая этот, можно найти в одном файле gtk_book.zip в формате CHM)

В избранное