Esempio n. 1
0
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);
					}
				}
			}
		}
	}
}
Esempio n. 2
0
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);
			}
		}
	}
}
Esempio n. 3
0
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;
            }
        }
    }
}
Esempio n. 4
0
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);
						}
					}
				}
			}
		}
	}
}
Esempio n. 5
0
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);
	}
}
Esempio n. 6
0
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;
	}
}
Esempio n. 7
0
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);
						}
					}
				}
			}
		}
	}
}
Esempio n. 8
0
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;
	}
}
Esempio n. 9
0
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;
	}
}
Esempio n. 10
0
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;
}