190 lines
7.2 KiB
C
190 lines
7.2 KiB
C
/**
|
|
* Demo GTK+ Application that illustrates data entry.
|
|
*
|
|
* M. Horauer
|
|
*/
|
|
#include <gtk/gtk.h>
|
|
#include <glib.h>
|
|
#include <glib/gprintf.h>
|
|
#include <stddef.h>
|
|
#include "../../wrapper/src/public/finclip_wrapper.h"
|
|
|
|
typedef struct {
|
|
GtkWidget *dateDate;
|
|
GtkWidget *idNbr;
|
|
GtkWidget *emailAddr;
|
|
GtkWidget *gnameEntry;
|
|
GtkWidget *fnameEntry;
|
|
GtkWidget *streetEntry;
|
|
GtkWidget *cityEntry;
|
|
GtkWidget *zipEntry;
|
|
GtkWidget *phoneEntry;
|
|
GtkWidget *byearSpin;
|
|
GtkWidget *bmonthSpin;
|
|
GtkWidget *bdaySpin;
|
|
} diaWidgets;
|
|
|
|
typedef struct {
|
|
GtkApplication *app;
|
|
GtkWidget *window;
|
|
GtkWidget *img;
|
|
diaWidgets *d;
|
|
} appWidgets;
|
|
|
|
/***************************************************************** PROTOTYPES */
|
|
static void activate(GtkApplication *app, gpointer user_data);
|
|
static void cancel_callback(GtkWidget *widget, gpointer user_data);
|
|
static void clear_callback(GtkWidget *widget, gpointer user_data);
|
|
static void add_callback(GtkWidget *widget, gpointer user_data);
|
|
static gint get_next_id(void);
|
|
static gint get_next_id(void) { return 12; }
|
|
|
|
/************************************************************ Cancel Callback */
|
|
static void cancel_callback(GtkWidget *widget, gpointer user_data) {}
|
|
|
|
/************************************************************* Clear Callback */
|
|
static void clear_callback(GtkWidget *widget, gpointer user_data) {
|
|
finclip_close_all_applet();
|
|
}
|
|
|
|
/*************************************************************** Add Callback */
|
|
static void add_callback(GtkWidget *widget, gpointer user_data) {
|
|
IPackerFactory *factory = finclip_get_packer_factory();
|
|
IFinConfigPacker *packer = finclip_packer_factory_get_config_packer(factory);
|
|
IFinConfig *config = finclip_config_packer_new_config(packer);
|
|
finclip_config_set_app_store(config, 1);
|
|
finclip_config_set_app_key(config, "");
|
|
finclip_config_set_secret(config, "");
|
|
finclip_config_set_domain(config, "");
|
|
finclip_config_packer_add_config(packer, config);
|
|
finclip_initialize(packer);
|
|
finclip_start_applet(NULL, 1, "", "", NULL, "", NULL);
|
|
}
|
|
|
|
/********************************************************* nameentry_callback */
|
|
static void nameentry_callback(GtkWidget *widget, gpointer user_data) {
|
|
gint study_prog_nr = 54;
|
|
gchar *org = "uni";
|
|
gchar *cnt = "net";
|
|
gchar *gname;
|
|
gchar *fname;
|
|
gchar email[256];
|
|
gchar dateStamp[256];
|
|
gchar *year;
|
|
gchar id[256] = "";
|
|
appWidgets *a = (appWidgets *)user_data;
|
|
|
|
/* construct the eMail address */
|
|
gname = (gchar *)gtk_entry_get_text(GTK_ENTRY(a->d->gnameEntry));
|
|
fname = (gchar *)gtk_entry_get_text(GTK_ENTRY(a->d->fnameEntry));
|
|
/* we update the fields on the top only when we got a family name */
|
|
if ((g_strcmp0(gname, "") != 0) && (g_strcmp0(fname, "") != 0)) {
|
|
g_sprintf(email, "%s.%s@%s.%s", gname, fname, org, cnt);
|
|
gtk_label_set_label(GTK_LABEL(a->d->emailAddr), email);
|
|
/* update date info when Family Name was entered */
|
|
gtk_label_set_label(GTK_LABEL(a->d->dateDate), dateStamp);
|
|
/* construct matrnum when Family Name was entered */
|
|
year = g_strndup(dateStamp, 4);
|
|
g_snprintf(id, 10, "%s%d%03d", year, study_prog_nr, get_next_id());
|
|
gtk_label_set_label(GTK_LABEL(a->d->idNbr), id);
|
|
}
|
|
}
|
|
|
|
/***************************************************************** ADD WINDOW */
|
|
static void activate(GtkApplication *app, gpointer user_data) {
|
|
GtkWidget *box;
|
|
GtkWidget *ebox;
|
|
GtkWidget *grid;
|
|
GtkWidget *date_label;
|
|
GtkWidget *id_label;
|
|
GtkWidget *email_label;
|
|
GtkWidget *gname_label;
|
|
GtkWidget *fname_label;
|
|
GtkWidget *street_label;
|
|
GtkWidget *city_label;
|
|
GtkWidget *zip_label;
|
|
GtkWidget *phone_label;
|
|
GtkWidget *birth_label;
|
|
GtkWidget *c_button;
|
|
GtkWidget *l_button;
|
|
GtkWidget *a_button;
|
|
appWidgets *a = (appWidgets *)user_data;
|
|
|
|
/* create a window with title, default size,and icons */
|
|
a->window = gtk_application_window_new(a->app);
|
|
gtk_window_set_application(GTK_WINDOW(a->window), GTK_APPLICATION(a->app));
|
|
gtk_window_set_title(GTK_WINDOW(a->window), "Student Management Toolbox");
|
|
gtk_window_set_default_size(GTK_WINDOW(a->window), 400, 300);
|
|
gtk_window_set_resizable(GTK_WINDOW(a->window), FALSE);
|
|
|
|
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 4);
|
|
gtk_container_add(GTK_CONTAINER(a->window), GTK_WIDGET(box));
|
|
gtk_container_set_border_width(GTK_CONTAINER(a->window), 10);
|
|
|
|
/* grid: image and labels */
|
|
grid = gtk_grid_new();
|
|
gtk_grid_set_column_spacing(GTK_GRID(grid), 5);
|
|
gtk_grid_set_row_spacing(GTK_GRID(grid), 5);
|
|
gtk_widget_set_size_request(GTK_WIDGET(grid), 400, 90);
|
|
gtk_widget_set_valign(GTK_WIDGET(grid), GTK_ALIGN_CENTER);
|
|
gtk_widget_set_halign(GTK_WIDGET(grid), GTK_ALIGN_CENTER);
|
|
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(grid), TRUE, TRUE, 0);
|
|
|
|
gname_label = gtk_widget_new(GTK_TYPE_LABEL, "label", "Appid", "xalign", 1.0,
|
|
"yalign", 0.5, NULL);
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(gname_label), 0, 3, 1, 1);
|
|
a->d->gnameEntry = gtk_entry_new();
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(a->d->gnameEntry), 1, 3, 1, 1);
|
|
|
|
street_label = gtk_widget_new(GTK_TYPE_LABEL, "label", "secret:", "xalign",
|
|
1.0, "yalign", 0.5, NULL);
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(street_label), 0, 4, 1, 1);
|
|
a->d->streetEntry = gtk_entry_new();
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(a->d->streetEntry), 1, 4, 1, 1);
|
|
|
|
zip_label = gtk_widget_new(GTK_TYPE_LABEL, "label", "key:", "xalign", 1.0,
|
|
"yalign", 0.5, NULL);
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(zip_label), 0, 5, 1, 1);
|
|
a->d->zipEntry = gtk_entry_new();
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(a->d->zipEntry), 1, 5, 1, 1);
|
|
|
|
phone_label = gtk_widget_new(GTK_TYPE_LABEL, "label", "domain:", "xalign",
|
|
1.0, "yalign", 0.5, NULL);
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(phone_label), 2, 5, 1, 1);
|
|
a->d->phoneEntry = gtk_entry_new();
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(a->d->phoneEntry), 3, 5, 1, 1);
|
|
|
|
/* lowerbox: buttons */
|
|
c_button = gtk_button_new_with_mnemonic("_Cancel");
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(c_button), 1, 7, 1, 1);
|
|
g_signal_connect(G_OBJECT(c_button), "clicked", G_CALLBACK(cancel_callback),
|
|
(gpointer)a);
|
|
l_button = gtk_button_new_with_mnemonic("C_lear");
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(l_button), 2, 7, 1, 1);
|
|
g_signal_connect(G_OBJECT(l_button), "clicked", G_CALLBACK(clear_callback),
|
|
(gpointer)a);
|
|
a_button = gtk_button_new_with_mnemonic("_Add");
|
|
gtk_grid_attach(GTK_GRID(grid), GTK_WIDGET(a_button), 3, 7, 1, 1);
|
|
g_signal_connect(G_OBJECT(a_button), "clicked", G_CALLBACK(add_callback),
|
|
(gpointer)a);
|
|
|
|
gtk_widget_show_all(GTK_WIDGET(a->window));
|
|
}
|
|
|
|
/*********************************************************************** main */
|
|
int main(int argc, char **argv) {
|
|
int status;
|
|
appWidgets *a = g_malloc(sizeof(appWidgets));
|
|
a->d = g_malloc(sizeof(diaWidgets));
|
|
|
|
a->app = gtk_application_new("org.gtk.example", G_APPLICATION_FLAGS_NONE);
|
|
g_signal_connect(G_OBJECT(a->app), "activate", G_CALLBACK(activate),
|
|
(gpointer)a);
|
|
status = g_application_run(G_APPLICATION(a->app), argc, argv);
|
|
g_object_unref(a->app);
|
|
|
|
g_free(a->d);
|
|
g_free(a);
|
|
return status;
|
|
}
|
|
/** EOF */ |