Commit 5748a635 authored by Carit Zhu's avatar Carit Zhu 🎱

Finish the first verion by using gtk2 library

parent 8de92bee
...@@ -11,11 +11,11 @@ ...@@ -11,11 +11,11 @@
#define DEBUG #define DEBUG
/* GObjects */ /* GtkWidgets */
static GObject *entry_date; static GtkWidget *entry_date;
static GObject *entry_hour; static GtkWidget *entry_hour;
static GObject *entry_minute; static GtkWidget *entry_minute;
static GObject *entry_second; static GtkWidget *entry_second;
/* Time info buffer */ /* Time info buffer */
static time_t time_now; static time_t time_now;
...@@ -164,18 +164,23 @@ static void combo_handler(GObject *combo, gpointer user_data) { ...@@ -164,18 +164,23 @@ static void combo_handler(GObject *combo, gpointer user_data) {
} }
} }
static void timezone_init(GtkBuilder *builder) { static void timezone_init(GtkWidget *window_vbox) {
GObject *combo_timezone; GtkWidget *combo_timezone;
GtkListStore *store = NULL; GtkListStore *store = NULL;
GtkTreeIter iter; GtkTreeIter iter;
GtkTreeIter active_iter; GtkTreeIter active_iter;
GtkCellRenderer *cell = NULL; GtkCellRenderer *cell = NULL;
combo_timezone = gtk_builder_get_object(builder, "combobox-timezone"); /* Timezone */
if (combo_timezone == NULL) { GtkWidget *timezone_hbox = gtk_hbox_new(TRUE, 2);
g_print("[ERROR] can not get combobox timezone object\n");
return; GtkWidget *label_timezone = gtk_label_new("TimeZone:");
} gtk_box_pack_start(GTK_BOX(timezone_hbox), label_timezone, FALSE, FALSE, 3);
combo_timezone = gtk_combo_box_new();
gtk_box_pack_start(GTK_BOX(timezone_hbox), combo_timezone, FALSE, FALSE, 3);
gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(timezone_hbox), FALSE, FALSE, 5);
FILE *fp = popen("timedatectl list-timezones", "r"); FILE *fp = popen("timedatectl list-timezones", "r");
...@@ -267,83 +272,85 @@ static void date_init(GtkEntry *entry_date, GtkEntry *entry_hour, GtkEntry *entr ...@@ -267,83 +272,85 @@ static void date_init(GtkEntry *entry_date, GtkEntry *entry_hour, GtkEntry *entr
gtk_entry_set_text(entry_second, active_sec); gtk_entry_set_text(entry_second, active_sec);
} }
static int gobjects_init(GtkBuilder *builder, GtkWidget *dialog) { static int date_widget_init(GtkWidget *window_vbox) {
GObject *combo_hour; GtkWidget *combo_hour;
GObject *combo_minute; GtkWidget *combo_minute;
GObject *combo_second; GtkWidget *combo_second;
GObject *button_ok;
GObject *button_cancel;
gchar text[3] = {0}; gchar text[3] = {0};
entry_date = gtk_builder_get_object(builder, "entry-date"); /* Date */
GtkWidget *date_hbox = gtk_hbox_new(TRUE, 2);
GtkWidget *label_date = gtk_label_new("Date:");
gtk_box_pack_start(GTK_BOX(date_hbox), label_date, FALSE, FALSE, 3);
entry_date = gtk_entry_new();
if (entry_date == NULL) { if (entry_date == NULL) {
g_print("[ERROR] can not get entry date object\n"); g_print("[ERROR] create entry date object failed.\n");
return -1; return -1;
} }
gtk_box_pack_start(GTK_BOX(date_hbox), entry_date, FALSE, FALSE, 3);
entry_hour = gtk_builder_get_object(builder, "comboboxtext-entry-hour"); gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(date_hbox), FALSE, FALSE, 5);
if (entry_hour == NULL) {
g_print("[ERROR] can not get entry hour object\n");
return -1;
}
entry_minute = gtk_builder_get_object(builder, "comboboxtext-entry-minute"); /* Time */
if (entry_minute == NULL) { GtkWidget *hour_hbox = gtk_hbox_new(TRUE, 2);
g_print("[ERROR] can not get entry minute object\n"); GtkWidget *minute_hbox = gtk_hbox_new(TRUE, 2);
return -1; GtkWidget *second_hbox = gtk_hbox_new(TRUE, 2);
}
entry_second = gtk_builder_get_object(builder, "comboboxtext-entry-second"); GtkWidget *label_time = gtk_label_new("Time:");
if (entry_second == NULL) { gtk_box_pack_start(GTK_BOX(hour_hbox), label_time, FALSE, FALSE, 3);
g_print("[ERROR] can not get entry second object\n");
return -1;
}
combo_hour = gtk_builder_get_object(builder, "comboboxtext-hour"); /* Hour */
if (combo_hour == NULL) { GtkWidget *label_hour = gtk_label_new("H:");
g_print("[ERROR] can not get combo box hour object\n"); gtk_box_pack_start(GTK_BOX(hour_hbox), label_hour, FALSE, FALSE, 3);
return -1;
} combo_hour = gtk_combo_box_text_new_with_entry();
/* Add hour combo box context */ /* Add hour combo box context */
for (int i = 0; i < 24; i++) { for (int i = 0; i < 24; i++) {
sprintf(text, "%d", i); sprintf(text, "%d", i);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo_hour), text, text); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_hour), text);
} }
entry_hour = (GTK_BIN(combo_hour)->child);
gtk_box_pack_start(GTK_BOX(hour_hbox), combo_hour, FALSE, FALSE, 3);
combo_minute = gtk_builder_get_object(builder, "comboboxtext-minute"); gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(hour_hbox), FALSE, FALSE, 5);
if (combo_minute == NULL) {
g_print("[ERROR] can not get combo box minute object\n"); /* Minute */
return -1; GtkWidget *label_blank1 = gtk_label_new("");
} gtk_box_pack_start(GTK_BOX(minute_hbox), label_blank1, FALSE, FALSE, 3);
GtkWidget *label_minute = gtk_label_new("M:");
gtk_box_pack_start(GTK_BOX(minute_hbox), label_minute, FALSE, FALSE, 3);
combo_minute = gtk_combo_box_text_new_with_entry();
/* Add minute combo box context */ /* Add minute combo box context */
for (int i = 0; i < 60; i++) { for (int i = 0; i < 60; i++) {
sprintf(text, "%d", i); sprintf(text, "%d", i);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo_minute), text, text); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_minute), text);
} }
entry_minute = (GTK_BIN(combo_minute)->child);
gtk_box_pack_start(GTK_BOX(minute_hbox), combo_minute, FALSE, FALSE, 3);
combo_second = gtk_builder_get_object(builder, "comboboxtext-second"); gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(minute_hbox), FALSE, FALSE, 5);
if (combo_second == NULL) {
g_print("[ERROR] can not get combo box second object\n"); /* Second */
return -1; GtkWidget *label_blank2 = gtk_label_new("");
} gtk_box_pack_start(GTK_BOX(second_hbox), label_blank2, FALSE, FALSE, 3);
GtkWidget *label_second = gtk_label_new("S:");
gtk_box_pack_start(GTK_BOX(second_hbox), label_second, FALSE, FALSE, 3);
combo_second = gtk_combo_box_text_new_with_entry();
/* Add second combo box context */ /* Add second combo box context */
for (int i = 0; i < 60; i++) { for (int i = 0; i < 60; i++) {
sprintf(text, "%d", i); sprintf(text, "%d", i);
gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(combo_second), text, text); gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(combo_second), text);
} }
entry_second = (GTK_BIN(combo_second)->child);
gtk_box_pack_start(GTK_BOX(second_hbox), combo_second, FALSE, FALSE, 3);
button_ok = gtk_builder_get_object(builder, "button-ok"); gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(second_hbox), FALSE, FALSE, 5);
if (button_ok == NULL) {
g_print("[ERROR] can not get button ok object\n");
return -1;
}
button_cancel = gtk_builder_get_object(builder, "button-cancel");
if (button_cancel == NULL) {
g_print("[ERROR] can not get button cancel object\n");
return -1;
}
date_init(GTK_ENTRY(entry_date), GTK_ENTRY(entry_hour), GTK_ENTRY(entry_minute), GTK_ENTRY(entry_second)); date_init(GTK_ENTRY(entry_date), GTK_ENTRY(entry_hour), GTK_ENTRY(entry_minute), GTK_ENTRY(entry_second));
...@@ -353,60 +360,72 @@ static int gobjects_init(GtkBuilder *builder, GtkWidget *dialog) { ...@@ -353,60 +360,72 @@ static int gobjects_init(GtkBuilder *builder, GtkWidget *dialog) {
// gtk_combo_box_set_active_id(GTK_COMBO_BOX(combo_second), active_sec); // gtk_combo_box_set_active_id(GTK_COMBO_BOX(combo_second), active_sec);
// gtk_combo_box_set_active(GTK_COMBO_BOX(combo_hour), tm_now->tm_hour); // gtk_combo_box_set_active(GTK_COMBO_BOX(combo_hour), tm_now->tm_hour);
// g_signal_connect(entry_date, GTK_EVENT_ACTIVATE, G_CALLBACK(date_activate), "date");
g_signal_connect(combo_hour, GTK_EVENT_CHANGED, G_CALLBACK(combo_handler), "hour");
g_signal_connect(button_ok, GTK_EVENT_CLICKED, G_CALLBACK(button_handler), "ok");
g_signal_connect(button_cancel, GTK_EVENT_CLICKED, G_CALLBACK(button_handler), "cancel");
return 0; return 0;
} }
// void close_window(GtkWidget *dialog, GtkWidget *window){
// gint result = gtk_dialog_get_response_for_widget(GTK_DIALOG(dialog), window);
// g_print("[DEBUG] result is %d\n", result);
// /* Close window without exit program*/
// //gtk_main_quit();
// gtk_widget_destroy (GTK_WIDGET (dialog));
// gtk_widget_destroy (GTK_WIDGET (window));
// }
int main(int argc, char **argv) { int main(int argc, char **argv) {
GtkBuilder *builder = gtk_builder_new(); GtkWidget *window;
GtkWidget *dialog;
char ui_path[64] = "timemanager.ui";
if (argc >= 3 && (argc % 2 != 0))
{
for (int i = 1; i < argc; i+=2)
{
if (!strcmp(argv[i], "--ui"))
{
strncpy(ui_path, argv[i + 1], 63);
}
}
}
#ifdef DEBUG
g_print("[DEBUG] ui path is %s\n", ui_path);
#endif
gtk_init(&argc, &argv); gtk_init(&argc, &argv);
if (!gtk_builder_add_from_file(builder, ui_path, NULL)) { window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_print("[ERROR] can not load glade file\n");
return -1;
}
dialog = GTK_WIDGET(gtk_builder_get_object(builder, "dialog-date_time")); gtk_window_set_title(GTK_WINDOW(window), "Date & Time");
if (dialog == NULL) { gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
g_print("[ERROR] can not get dialog object\n"); gtk_window_set_default_size(GTK_WINDOW(window), 480, 240);
return -1;
}
gtk_window_set_title(GTK_WINDOW(dialog), "Date & Time"); /* Create vbox for whole style(vertical) */
gtk_window_set_default_size(GTK_WINDOW(dialog), 320, 240); GtkWidget *window_vbox = gtk_vbox_new(TRUE, 2);
gtk_builder_connect_signals(builder, NULL); /* Date */
g_signal_connect(dialog, GTK_EVENT_DESTROY, G_CALLBACK(gtk_main_quit), NULL); date_widget_init(window_vbox);
gobjects_init(builder, dialog);
/* Timezone */
get_time_date_status(); get_time_date_status();
timezone_init(builder); timezone_init(window_vbox);
/* OK and Cancel */
GtkWidget *button_hbox = gtk_hbox_new(TRUE, 2);
GtkWidget *button_ok = gtk_button_new_with_label("Ok");
GtkWidget *button_cancel = gtk_button_new_with_label("Cancel");
gtk_box_pack_start(GTK_BOX(button_hbox), button_ok, TRUE, TRUE, 50);
gtk_box_pack_start(GTK_BOX(button_hbox), button_cancel, TRUE, TRUE, 50);
gtk_box_pack_start(GTK_BOX(window_vbox), GTK_WIDGET(button_hbox), FALSE, FALSE, 5);
g_object_unref(G_OBJECT (builder)); g_signal_connect(button_ok, GTK_EVENT_CLICKED, G_CALLBACK(button_handler), "ok");
gtk_widget_show_all(dialog); g_signal_connect(button_cancel, GTK_EVENT_CLICKED, G_CALLBACK(button_handler), "cancel");
/* Add to container */
gtk_container_add(GTK_CONTAINER(window), window_vbox);
g_signal_connect(window, GTK_EVENT_DESTROY, G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main(); gtk_main();
// gint result = gtk_dialog_run (GTK_DIALOG (dialog));
// switch (result) {
// case GTK_RESPONSE_REJECT:
// break;
// case GTK_RESPONSE_OK:
// //
// break;
// default:
// break;
// }
// gtk_widget_destroy (GTK_WIDGET (dialog));
return 0; return 0;
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment