void ConnectCheckbuttonSignal(GladeXML *xml, cngplpData* data, gpointer *widget) { GtkWidget *checkbutton; CheckData *user_data; SignalInfo *signal; ConditionInfo *condition; char *signal_name = NULL; char *id = NULL; WidgetInfo *widget_checkbutton = (WidgetInfo *)widget; user_data = (CheckData *)malloc(sizeof(CheckData)); widget_checkbutton->data = user_data; if(user_data != NULL){ memset(user_data, 0, sizeof(CheckData)); user_data->toggle = NULL; user_data->untoggle = NULL; checkbutton = glade_xml_get_widget(xml, widget_checkbutton->name); if(checkbutton != NULL){ signal = widget_checkbutton->signal_list; if(signal != NULL){ signal_name = signal->name; condition = signal->condition; while(condition != NULL){ id = condition->id; if(strcmp(condition->name, "True") == 0){ user_data->toggle = condition->value; } if(strcmp(condition->name, "False") == 0){ user_data->untoggle = condition->value; } condition = condition->next; } if(NULL == id){ id = signal->id; } user_data->id = GetModID(id); if(signal_name != NULL){ if(strcmp(signal_name, "toggled") == 0){ g_signal_connect ((gpointer)checkbutton, "toggled", G_CALLBACK (on_checkbutton_toggled), user_data); } } } } } }
void SetTextview(const WidgetInfo* widget_info) { char *text = NULL; PropInfo *property = NULL; int id = -1; if(widget_info != NULL){ property = FindProperty(widget_info->prop_list, "text"); } if(property != NULL){ id = GetModID(property->id); if(id != -1){ text = GetOptionList(g_cngplp_data, id); if(text != NULL){ SetTextofTextView(widget_info->name, text, -1); memFree(text); } } } }
void ConnectComboSignal(GladeXML *xml, cngplpData* data, gpointer *widget) { GtkWidget *combo; CombData *user_data; const gchar *comb_widget_name; SignalInfo *signal; char *signal_name; WidgetInfo *widget_combo = (WidgetInfo *)widget; if((widget_combo != NULL) && (widget_combo->name != NULL)) { combo = glade_xml_get_widget(xml, widget_combo->name); user_data = (CombData * )malloc(sizeof(CombData)); widget_combo->data = user_data; if((combo != NULL) && (GTK_COMBO(combo)->entry != NULL) && (user_data != NULL)) { memset(user_data, 0, sizeof(CombData)); comb_widget_name = gtk_widget_get_name(GTK_COMBO(combo)->entry); signal = widget_combo->signal_list; if(signal != NULL) { user_data->id = GetModID(signal->id); } if(comb_widget_name != NULL) { user_data->widget_name = strdup(comb_widget_name); } while(signal != NULL) { signal_name = signal->name; if(signal_name != NULL) { if(strcmp(signal_name, "changed") == 0) { g_signal_connect ((gpointer)(GTK_COMBO(combo)->entry), "changed", G_CALLBACK (on_combo_entry_changed), user_data); } if(strcmp(signal_name, "event") == 0) { gtk_signal_connect(GTK_OBJECT(GTK_COMBO(combo)->popwin), "event", GTK_SIGNAL_FUNC(on_combo_popwin_event), user_data); } if(strcmp(signal_name, "down-up") == 0) { gtk_signal_connect((gpointer)(GTK_COMBO(combo)->entry), "event", GTK_SIGNAL_FUNC(on_combo_down_up_event), user_data); } } signal = signal->next; } } } }
void ConnectButtonSignal(GladeXML *xml, cngplpData* data, gpointer *widget) { GtkWidget *button; ButtonData *user_data; SignalInfo *signal; ConditionInfo *condition; WidgetInfo *widget_button = (WidgetInfo *)widget; user_data = (ButtonData *)malloc(sizeof(ButtonData)); widget_button->data = user_data; if(user_data != NULL){ memset(user_data, 0, sizeof(ButtonData)); button = glade_xml_get_widget(xml, widget_button->name); if(button != NULL){ signal = widget_button->signal_list; if(signal != NULL){ condition = signal->condition; if(signal->widget != NULL){ user_data->showdialog = signal->widget; if(strcmp(signal->name, "clicked") == 0){ g_signal_connect ((gpointer)button, "clicked", G_CALLBACK (on_button_clicked), user_data); } }else{ if(condition != NULL){ user_data->id = GetModID(condition->id); user_data->condition = condition; if(strcmp(signal->name, "clicked") == 0){ g_signal_connect ((gpointer)button, "clicked", G_CALLBACK (on_button_clicked), user_data); } }else{ user_data->showdialog = NULL; if(strcmp(signal->name, "clicked") == 0){ g_signal_connect ((gpointer)button, "clicked", G_CALLBACK (on_button_clicked), user_data); } } } } } } }
void SetSpinButtonValue(const WidgetInfo* widget_info) { double value = 0.0; PropInfo *property = NULL; GtkWidget *spin = NULL; double def_double = 0; int id = -1; if(widget_info != NULL){ property = FindProperty(widget_info->prop_list, "text"); } if(property != NULL){ def_double = atof(property->def); id = GetModID(property->id); value = GetCurrOptDouble(id, def_double); spin = glade_xml_get_widget(g_cngplp_xml, widget_info->name); if(NULL == spin){ return; } gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin), value); } }
void AddFuncToTopwidget(const FuncInfo* func) { WidgetInfo *widget_info = NULL; TopWidget* top_widget = NULL; TopWidget* prop_topwidget = NULL; SpecialInfo* special = NULL; int len = 0; int found = 0; int i = 0; GtkWidget *widget = NULL; char* id = NULL; SignalInfo *signal = NULL; char* opt = NULL; len = g_list_length(g_topwidget_list); if(g_config_file_data != NULL){ special = g_config_file_data->special_list; }else{ return; } while(special != NULL){ if((1 == special->type) && (0 == strcasecmp(special->parent, g_main_dlg_name))){ break; } special = special->next; } for(i = 0; i < len; i++){ top_widget = (TopWidget*)g_list_nth_data(g_topwidget_list, i); if(top_widget != NULL){ if(0 == strcmp(top_widget->name, special->name)){ prop_topwidget = top_widget; break; } } } if(func != NULL){ if(func->func_id != NULL){ id = func->func_id->name; } widget_info = func->widget_list; } while(widget_info != NULL){ signal = widget_info->signal_list; if(signal != NULL){ if(signal->condition != NULL){ id = signal->condition->id; }else{ id = signal->id; } } if(NULL == id){ widget_info = widget_info->next; continue; } for(i = 0; i < len; i++){ top_widget = (TopWidget*)g_list_nth_data(g_topwidget_list, i); if(top_widget != NULL){ widget = glade_xml_get_widget(top_widget->xml, widget_info->name); } if(widget != NULL){ TopWidgetSaveData* search = NULL; int savedata_len = 0; int j = 0; int tmp = GetModID(id); found = 0; if(top_widget != NULL){ savedata_len = g_list_length(top_widget->save_data); } for(; j < savedata_len; j++){ search = g_list_nth_data(top_widget->save_data, j); if(search != NULL){ if(search->id == tmp){ found = 1; break; } } } if(found == 1){ break; } if(tmp == ID_CNPRINTSTYLE){ opt = GetOptionList(g_cngplp_data, ID_DUPLEX); if(opt != NULL){ AddSaveData(ID_DUPLEX, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_BOOKLET); if(opt != NULL){ AddSaveData(ID_BOOKLET, top_widget); memFree(opt); } }else if(tmp == ID_CNFOLDSETTING){ opt = GetOptionList(g_cngplp_data, ID_CNZFOLDING); if(opt != NULL){ AddSaveData(ID_CNZFOLDING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNCFOLDING); if(opt != NULL){ AddSaveData(ID_CNCFOLDING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNHALFFOLDING); if(opt != NULL){ AddSaveData(ID_CNHALFFOLDING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNACCORDIONZFOLDING); if(opt != NULL){ AddSaveData(ID_CNACCORDIONZFOLDING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNDOUBLEPARALLELFOLDING); if(opt != NULL){ AddSaveData(ID_CNDOUBLEPARALLELFOLDING, top_widget); memFree(opt); } }else if(tmp == ID_CNFOLDDETAIL){ opt = GetOptionList(g_cngplp_data, ID_CNCFOLDSETTING); if(opt != NULL){ AddSaveData(ID_CNCFOLDSETTING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNHALFFOLDSETTING); if(opt != NULL){ AddSaveData(ID_CNHALFFOLDSETTING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNACCORDIONZFOLDSETTING); if(opt != NULL){ AddSaveData(ID_CNACCORDIONZFOLDSETTING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNDOUBLEPARALLELFOLDSETTING); if(opt != NULL){ AddSaveData(ID_CNDOUBLEPARALLELFOLDSETTING, top_widget); memFree(opt); } }else if(tmp == ID_CNSADDLESETTING){ opt = GetOptionList(g_cngplp_data, ID_CNVFOLDING); if(opt != NULL){ AddSaveData(ID_CNVFOLDING, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNSADDLESTITCH); if(opt != NULL){ AddSaveData(ID_CNSADDLESTITCH, top_widget); memFree(opt); } opt = GetOptionList(g_cngplp_data, ID_CNTRIMMING); if(opt != NULL){ AddSaveData(ID_CNTRIMMING, top_widget); memFree(opt); } }else{ TopWidgetSaveData* data = (TopWidgetSaveData*)malloc(sizeof(TopWidgetSaveData)); if(data != NULL){ memset(data, 0, sizeof(TopWidgetSaveData)); data->id = GetModID(id); } if(top_widget != NULL){ if(0 != strcmp(top_widget->name, special->name)){ TopWidgetSaveData* prop_data = (TopWidgetSaveData*)malloc(sizeof(TopWidgetSaveData)); if(prop_data != NULL){ memset(prop_data, 0, sizeof(TopWidgetSaveData)); prop_data->id = GetModID(id); } if(prop_topwidget != NULL){ prop_topwidget->save_data = g_list_append(prop_topwidget->save_data, prop_data); } } top_widget->save_data = g_list_append(top_widget->save_data, data); } break; } } } widget_info = widget_info->next; } }
void InitLabel(GladeXML *xml, cngplpData* data, const gpointer *widget) { WidgetInfo *widget_label = (WidgetInfo *)widget; if((widget_label != NULL) && (widget_label->name != NULL)){ PropInfo *prop_list = widget_label->prop_list; PropInfo *property = NULL; char label[LABEL_MAX]; const char *text = NULL; char *value = NULL; int def_int = 0; int max_int = 0; int min_int = 0; double def_double = 0.0; double max_double = 0.0; double min_double = 0.0; int max_sign = 0; int min_sign = 0; int digit = -1; int id; property = FindProperty(prop_list, "digit"); if(property != NULL){ if(property->id != NULL){ id = GetModID(property->id); if(-1 == id){ value = GetCNUIValue(property->id); }else{ value = GetCurrOpt(data, id, NULL); } if((value != NULL) && (0 == strcasecmp(value, "True"))){ digit = 1; }else{ digit = 0; } memFree(value); }else{ if(0 == strcmp(property->value, "int")){ digit = 0; } if(0 == strcmp(property->value, "double")){ digit = 1; } } } property = FindProperty(prop_list, "max"); if(property != NULL){ max_sign = 1; if(digit == 0){ def_int = atoi(property->def); id = GetModID(property->id); max_int = GetCurrOptInt(id, def_int); if((0 == max_int) && (0 < def_int)){ max_int = def_int; } }else{ def_double = atof(property->def); id = GetModID(property->id); max_double = GetCurrOptDouble(id, def_double); if((max_double < FLOAT_ZERO) && (def_double > FLOAT_ZERO)){ max_double = def_double; } } } property = FindProperty(prop_list, "min"); if(property != NULL){ min_sign = 1; if(digit == 0){ def_int = atoi(property->def); id = GetModID(property->id); min_int = GetCurrOptInt(id, def_int); }else{ def_double = atof(property->def); id = GetModID(property->id); min_double = GetCurrOptDouble(id, def_double); } } property = FindProperty(prop_list, "text"); if(property != NULL){ if(-1 == digit){ text = NameToTextByName(property->res); if(text != NULL){ SetTextToLabel(widget_label->name, text); } }else{ if(0 == digit){ if(property->value != NULL){ while(0 != strcmp(property->value, "int")){ property = FindProperty(property->next, "text"); if(NULL == property){ return; } } } if((1 == min_sign) && (1 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, min_int, max_int); SetTextToLabel(widget_label->name, label); } } if((1 == min_sign) && (0 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, min_int); SetTextToLabel(widget_label->name, label); } } if((0 == min_sign) && (1 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, max_int); SetTextToLabel(widget_label->name, label); } } } if(1 == digit){ if(property->value != NULL){ while(0 != strcmp(property->value, "double")){ property = FindProperty(property->next, "text"); if(NULL == property){ return; } } } if((1 == min_sign) && (1 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, min_double, max_double); SetTextToLabel(widget_label->name, label); } } if((1 == min_sign) && (0 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, min_double); SetTextToLabel(widget_label->name, label); } } if((0 == min_sign) && (1 == max_sign)){ text = NameToTextByName(property->res); if(text != NULL){ snprintf(label, LABEL_MAX - 1, text, max_double); SetTextToLabel(widget_label->name, label); } } } } } } }
void SetWidgetStatus(const WidgetInfo *widget_info) { GtkWidget *widget = NULL; gboolean value = TRUE; PropInfo *property = NULL; char *type = NULL; int id; if(widget_info != NULL){ widget = glade_xml_get_widget(g_cngplp_xml, widget_info->name); property = widget_info->prop_list; type = widget_info->type; } while(property != NULL){ if(property->value != NULL){ if(strcmp(property->value, "False") == 0){ value = FALSE; } if(strcmp(property->value, "True") == 0){ value = TRUE; } } if(strcmp(property->prop_name, "sensitive") == 0){ gtk_widget_set_sensitive(widget, value); } if(strcmp(property->prop_name, "toggled") == 0){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(widget), value); } if(strcmp(property->prop_name, "visible") == 0){ if(strcmp(property->value, "True") == 0){ gtk_widget_show(widget); } if(strcmp(property->value, "False") == 0){ gtk_widget_hide(widget); } } if(strcmp(property->prop_name, "text") == 0){ if(strcmp(type, "entry") == 0){ gtk_entry_set_text(GTK_ENTRY(widget), property->value); } if(strcmp(type, "label") == 0){ const char *text = NULL; text = NameToTextByName(property->res); if(text != NULL){ SetTextToLabel(widget_info->name, text); } } } if(strcmp(property->prop_name, "update") == 0){ if(strcmp(type, "combo") == 0){ id = GetModID(property->id); UpdateCpcaComboWidget(id, widget_info->name); } if(strcmp(type, "entry") == 0){ id = GetModID(property->id); UpdateEntryWidget(id, widget_info->name); } if(strcmp(type, "checkbutton") == 0){ id = GetModID(property->id); SetCpcaWidgetSensitive(id, widget_info->name); } } property = property->next; } }
void UpdateFunctionWidget(const ConflictInfo *conflict_list) { GtkWidget *widget; const ConflictInfo *conflict = conflict_list; int id; char *curr = NULL; while(conflict != NULL){ char *type = conflict->type; WidgetInfo *update = conflict->update_list; if((conflict_list != NULL) && (conflict_list->widget != NULL)){ gboolean active; widget = glade_xml_get_widget(g_cngplp_xml, conflict_list->widget); active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); if(active == TRUE){ if(strcasecmp(conflict->value, "True") == 0){ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } }else{ if(strcasecmp(conflict->value, "False") == 0){ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } } }else{ id = GetModID(conflict->id); curr = GetCurrOpt(g_cngplp_data, id, NULL); if(NULL != curr){ if(type != NULL){ if(conflict->value != NULL){ if((strcasecmp(conflict->value, curr) != 0) && (strcasecmp(type, "no") == 0)){ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } } }else if(conflict->value != NULL){ if(strcasecmp(conflict->value, curr) == 0){ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } }else{ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } }else{ if(type != NULL){ if((NULL == conflict->value) && (0 == strcasecmp(type, "no"))){ while(update != NULL){ SetWidgetStatus(update); update = update->next; } } } } memFree(curr); } conflict = conflict->next; } }
gboolean FindKey(const KeyInfo *key, cngplpData *data) { char *opt = NULL; gboolean found = FALSE; if(NULL == key){ return FALSE; } const int id = GetModID(key->name); if(ID_RESOLUTION == id){ UIItemsList *item = NULL; if((g_cngplp_data != NULL) && (g_cngplp_data->ppd_opt != NULL)){ item = FindItemsList(g_cngplp_data->ppd_opt->items_list, "Resolution"); } if(item != NULL){ if(item->num_options > 1){ return TRUE; }else{ return FALSE; } } }else if(ID_CNFOLDDETAIL == id){ char *folddetail = NULL; opt = GetCurrOpt(data, ID_CNCFOLDING, NULL); if(NULL != opt){ folddetail = GetCurrOpt(data, ID_CNCFOLDSETTING, NULL); if(NULL != folddetail){ memFree(opt); memFree(folddetail); return TRUE; } } opt = GetCurrOpt(data, ID_CNHALFFOLDING, NULL); if(NULL != opt){ folddetail = GetCurrOpt(data, ID_CNHALFFOLDSETTING, NULL); if(NULL != folddetail){ memFree(opt); memFree(folddetail); return TRUE; } } opt = GetCurrOpt(data, ID_CNACCORDIONZFOLDING, NULL); if(NULL != opt){ folddetail = GetCurrOpt(data, ID_CNACCORDIONZFOLDSETTING, NULL); if(NULL != folddetail){ memFree(opt); memFree(folddetail); return TRUE; } } opt = GetCurrOpt(data, ID_CNDOUBLEPARALLELFOLDING, NULL); if(NULL != opt){ folddetail = GetCurrOpt(data, ID_CNDOUBLEPARALLELFOLDING, NULL); if(NULL != folddetail){ memFree(opt); memFree(folddetail); return TRUE; } } }else{ if(IDtoPPDOption(id - 1) != NULL){ opt = GetCurrOpt(data, id, NULL); }else{ opt = GetOptionList(data, id); } } if(NULL == opt){ opt = GetCNUIValue(key->name); if(NULL == opt){ return FALSE; } } if(NULL == key->value){ found = TRUE; }else{ if(NULL != key->type){ if(0 == strcmp(key->type, "no")){ if(strcmp(key->value, opt) != 0){ found = TRUE; } }else if(0 == strcmp(key->type, "include")){ MemFree(opt); opt = GetOptionList(data, id); if((opt != NULL) && (strstr(opt, key->value) != NULL)){ found = TRUE; } }else if(0 == strcmp(key->type, "other")){ int i = 0, j = 0, k = 0; char *option = NULL; UIItemsList *item = NULL; char *plist = NULL; char *list = key->value; plist = list; option = IDtoPPDOption(id -1); if((g_cngplp_data != NULL) && (g_cngplp_data->ppd_opt != NULL)){ item = FindItemsList(g_cngplp_data->ppd_opt->items_list, option); } while(1){ if(*plist == '\0'){ i++; break; } if(*plist == ','){ i++; } plist++; } if(item != NULL){ UIOptionList *tmp = item->opt_lists; while(tmp != NULL){ if(strstr(list, tmp->name) != NULL){ j++; k++; } tmp = tmp->next; } if((i == j) && (i == k)){ found = FALSE; }else{ found = TRUE; } } } }else{ if(0 == strcmp(key->value, opt)){ found = TRUE; } } } if(opt != NULL){ free(opt); opt = NULL; } return found; }