Ejemplo n.º 1
0
void DebugDisable(cngplpData *data, int id)
{
	PPDOptions *ppd_opt = data->ppd_opt;
	int i = 0;
	UIItemsList *list;
	UIOptionList *opt;
	char *except = IDtoPPDOption(id - 1);
if(except == NULL)
return;
UI_DEBUG("[%s]:%d\n", except, id);
	list = ppd_opt->items_list;
	while(1){
		opt = list->opt_lists;
		while(1){
			i++;
if(except != NULL && strcmp(except, list->name) == 0)
UI_DEBUG("[%3d] item:[%18s] opt:[%10s] disable[%d] def:[%3s]\n", i, except, opt->name, opt->disable, (strcmp(list->current_option->name, opt->name) == 0) ? "Yes" : "NO");
			if(opt->next == NULL)
				break;
			opt = opt->next;
		}

		if(list->next == NULL)
			break;
		list = list->next;
	}
UI_DEBUG("\n");
}
Ejemplo n.º 2
0
void SaveTopWidgetData(const char *dlg_name)
{
	const int top_widget_num = g_list_length(g_topwidget_list);
	int i = 0;
	TopWidget* top_widget = NULL, *found = NULL;
	char *option = NULL;
	UIItemsList *tmp;
	const PPDOptions *ppd_opt = NULL;
	if(g_cngplp_data != NULL){
		ppd_opt = g_cngplp_data->ppd_opt;
	}

	for(; i < top_widget_num; i++){
		top_widget = (TopWidget*)g_list_nth_data(g_topwidget_list, i);
		if(top_widget != NULL){
			if(!strcmp(dlg_name, top_widget->name)){
				found = top_widget;
				break;
			}
		}
	}
	i = 0;
	if(found != NULL){
		const int len = g_list_length(found->save_data);
		TopWidgetSaveData* data = NULL;
		char *value;
		for(; i < len; i++){
			data = g_list_nth_data(found->save_data, i);
			if((data != NULL) && (data->key_value != NULL)){
				free(data->key_value);
				data->key_value = NULL;
			}
			if(data != NULL){
				option = IDtoPPDOption(data->id - 1);
			}
			if(NULL == option){
				if((ID_NUMBER_UP == data->id) || (ID_JOB_SHEETS_START == data->id) || (ID_JOB_SHEETS_END == data->id) || (ID_BOOKLET_DLG == data->id)){
					value = GetCurrOpt(g_cngplp_data, data->id, NULL);
				}else{
					value = GetOptionList(g_cngplp_data, data->id);
				}
				data->key_value = value;
			}else{
				tmp = ppd_opt->items_list;
				while(tmp->current_option != NULL){
					if(strcmp(option, tmp->name) == 0){
						data->key_value = strdup(tmp->current_option->name);
						break;
					}
					if(tmp->next == NULL){
						break;
					}
					tmp = tmp->next;
				}
			}
		}
	}
}
Ejemplo n.º 3
0
char* cngplpIDtoKey(int id)
{
	char *ret = NULL;

	if(id < ID_DEVICE_INFO){
		ret = ToChar(IDtoPPDOption(id - 1));
	}else if(id < ID_COMMON_OPTION){
		ret = ToChar(IDtoDevOption(id));
	}else if(id < ID_IMAGE_OPTION){
		ret = ToChar(IDtoCommonOption(id - ID_COMMON_OPTION - 1));
	}else if(id < ID_TEXT_OPTION){
		ret = ToChar(IDtoImageOption(id - ID_IMAGE_OPTION - 1));
	}else if(id < ID_HPGL_OPTION){
		ret = ToChar(IDtoTextOption(id - ID_TEXT_OPTION - 1));
	}else if(id < ID_BOTTON_EVENT){
		ret = ToChar(IDtoHPGLOption(id - ID_HPGL_OPTION - 1));
	}
	return ret;
}
Ejemplo n.º 4
0
char* GetDataPPDOption(cngplpData *data, int id)
{
	char *option = NULL;

	switch(id){
	case ID_SELECTBY:
		return IntToChar(data->ppd_opt->selectby);
	case ID_JOBACCOUNT:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else{
#ifndef	__APPLE__
			return IntToChar(data->ppd_opt->special->job_account);
#else
			return ToChar(data->ppd_opt->special->job_account == 0 ? "False" : "True");
#endif
		}
	case ID_JOBACCOUNT_ID:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->job_account_id);
	case ID_JOBACCOUNT_PASSWD:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->job_account_passwd);
	case ID_CNUSRPASSWORD:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->usr_passwd);
	case ID_DATANAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return IntToChar(data->ppd_opt->special->data_name);
	case ID_ENTERNAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
#ifndef _OPAL
		return ToChar(data->ppd_opt->special->enter_name);
#else
		if(data->ppd_opt->special->enter_name == NULL){
			return ToChar("");
		}else {
			return ToChar(data->ppd_opt->special->enter_name);
		}
#endif
	case ID_BOXIDNUM:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
#ifndef __APPLE__
		return IntToChar(data->ppd_opt->special->box_num);
#else
		return ToChar(data->ppd_opt->special->box_num);
#endif
	case ID_MAX_BOXIDNUM:
		return IntToChar(data->ppd_opt->max_box_num);
	case ID_GUTTER:
		if(data->ppd_opt->summary_flag & CNSUMMARY_FLG_GUTTER)
			return NULL;
                if(data->ppd_opt->us_type)
                        return DoubleToChar(data->ppd_opt->gutter_value_d);
                else
                        return IntToChar(data->ppd_opt->gutter_value);
	case ID_MAX_GUTTER:
                if(data->ppd_opt->us_type)
                        return DoubleToChar(data->ppd_opt->max_gutter_value_d);
                else
                        return IntToChar(data->ppd_opt->max_gutter_value);
        case ID_USTYPE:
                return ToChar(data->ppd_opt->us_type == 0 ? "False" : "True");
	case ID_LIST_MEDIATYPE:
		return IntToChar(data->ppd_opt->list_mediatype_value);
  case ID_LIST_PAGESIZE:
      return IntToChar(data->ppd_opt->list_pagesize_value);
	case ID_SECURED_DOCNAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
#ifndef _OPAL
		return ToChar(data->ppd_opt->special->doc_name);
#else
		if(data->ppd_opt->special->doc_name == NULL){
			return ToChar("");
		}else {
			return ToChar(data->ppd_opt->special->doc_name);
		}
#endif
	case ID_SECURED_USRNAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->usr_name);
	case ID_SECURED_PASSWD:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->passwd_array);
	case ID_COLOR_MODE:
		return IntToChar(data->ppd_opt->color_mode);
	case ID_PRINTERTYPE:
		return IntToChar(data->ppd_opt->printer_type);
	case ID_MAX_COPIES:
		return IntToChar(data->ppd_opt->max_copy_num);
	case ID_SPECIAL_FUNC:
		return ToChar(data->ppd_opt->special != NULL ? "1" : "0");
	case ID_DOC_LENGTH:
		return IntToChar(data->ppd_opt->max_doc_length);
	case ID_DUPLEX:
		option = IDtoPPDOption(id - 1);
		if(option == NULL)
			return NULL;
#ifdef	__APPLE__
			return MakePPDOptionList(data->ppd_opt, "Duplex");
#else
			return MakeDuplexBoolList(data->ppd_opt);
#endif
	case ID_BOOKLET:
	case ID_CNSADDLESTITCH:
	case ID_CNTRIMMING:
	case ID_CNZFOLDING:
	case ID_CNINSERTER:
	case ID_CNPUREBLACKPROCESS:
	case ID_CNPUNCHER:
	case ID_CNFOLDER:
	case ID_CNINSERTUNIT:
	case ID_CNTRIMMER:
	case ID_CNDUPLEXUNIT:
	case ID_CNSUPERSMOOTH:
	case ID_CNBACKPAPERPRINT:
	case ID_CNROTATEPRINT:
	case ID_CNCOPYSETNUMBERING:
	case ID_CNINTERLEAFSHEET:
	case ID_CNINTERLEAFPRINT:
	case ID_CNSKIPBLANK:
	case ID_CNDETECTPAPERSIZE:
	case ID_CNRGBPUREBLACKPROCESS:
	case ID_CNUSEGRAYSCALEPROFILE:
	case ID_CNLASTPAGEPRINTMODE:
	case ID_CNSET_FRONT_COVER:
	case ID_CNSET_BACK_COVER:
	case ID_CNSPECIFYNUMOFCOPIESSTACK:
	case ID_CNVFOLDING:
	case ID_CNPROPUNCHER:
		option = IDtoPPDOption(id - 1);
		if(option == NULL)
			return NULL;
#ifdef	__APPLE__
		if(data->ppd_opt->printer_type != PRINTER_TYPE_CAPT)
		{
			switch(id){
			case ID_CNPUNCHER:
			case ID_BOOKLET:
			case ID_CNFOLDER:
			case ID_CNTRIMMER:
			case ID_CNINSERTUNIT:
			case ID_CNLASTPAGEPRINTMODE:
			case ID_CNPROPUNCHER:
				return MakePPDOptionList(data->ppd_opt, option);
			default:
				return MakePPDBoolList(data->ppd_opt, option);
			}
		}
		else {
			switch(id){
			case ID_CNSUPERSMOOTH:
				return MakePPDOptionList(data->ppd_opt, option);
			default:
				return MakePPDBoolList(data->ppd_opt, option);
			}
#endif
			return MakePPDBoolList(data->ppd_opt, option);
#ifdef	__APPLE__
		}
#endif
	case ID_CNPUNCH:
		option = IDtoPPDOption(id - 1);
		if(option == NULL)
			return NULL;
		return MakeCNPunchBoolList(data->ppd_opt, option);
	case ID_BOOKLET_DLG:
		option = IDtoPPDOption(ID_BOOKLET - 1);
		if(option == NULL)
			return NULL;
		return MakePPDOptionList(data->ppd_opt, option);
	case ID_STARTNUM:
		return IntToChar(data->ppd_opt->startnum_value);
	case ID_USERID:
		return IntToChar(getuid());
	case ID_BACKPAPERPRINT_LABEL:
		return ToChar(GetItemString(data->ppd_opt->items_list, "CNBackPaperPrint"));
	case ID_DISABLE_JOBACCOUNT_BW:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
#ifndef	__APPLE__
			return IntToChar(data->ppd_opt->special->disable_job_account_bw);
#else
			return ToChar(data->ppd_opt->special->disable_job_account_bw == 0 ? "False:True<0>,False<0>" : "True:True<0>,False<0>");
#endif
#if !defined(__APPLE__) && !defined(_OPAL)
	case ID_SHOW_JOBACCOUNT:
		if(data->ppd_opt->special == NULL)
		{
			return NULL;
		}
		else
		{
			return IntToChar(data->ppd_opt->special->show_job_account);
		}
		break;
#endif
	case ID_SHOW_DISABLE_JOBACCOUNT_BW:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return IntToChar(data->ppd_opt->special->show_disable_job_account_bw);
	case ID_DETECTPAPER_LABEL:
		return ToChar(GetItemString(data->ppd_opt->items_list, "CNDetectPaperSize"));
	case ID_CNDPICONPICTID:
		if(data->ppd_opt->dpicon_pictid > 0)
			return IntToChar(data->ppd_opt->dpicon_pictid);
		break;
	case ID_CNENABLEFINISHFLAG:
		if(data->ppd_opt->enable_finishflag > 0)
			return IntToChar(data->ppd_opt->enable_finishflag);
		break;
	case ID_CNENABLEINPUTFLAG:
		if(data->ppd_opt->enable_inputflag > 0)
			return IntToChar(data->ppd_opt->enable_inputflag);
		break;
	case ID_CNENABLEQUALITYTYPE:
		if(data->ppd_opt->enable_qualitytype > 0)
			return IntToChar(data->ppd_opt->enable_qualitytype);
		break;
	case ID_INPUTSLOT_TYPE:
		return IntToChar(data->ppd_opt->input_slot_type);

	case ID_CNSHIFTTYPE:
		return IntToChar(data->ppd_opt->shift_pos_type);
	case ID_CNSHIFTUPWARDS:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_upwards);
			}
		}
		return IntToChar(data->ppd_opt->shift_upwards);
	case ID_CNSHIFTRIGHT:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_right);
			}
		}
		return IntToChar(data->ppd_opt->shift_right);
	case ID_CNSHIFTFRLONGEDGE:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_front_long);
			}
		}
		return IntToChar(data->ppd_opt->shift_front_long);
	case ID_CNSHIFTFRSHORTEDGE:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_front_short);
			}
		}
		return IntToChar(data->ppd_opt->shift_front_short);
	case ID_CNSHIFTBKLONGEDGE:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_back_long);
			}
		}
		return IntToChar(data->ppd_opt->shift_back_long);
	case ID_CNSHIFTBKSHORTEDGE:
		if((option = GetUIValue(data, "CNEnableDetailShiftPosition")) != NULL){
			if(strcasecmp(option,"True") == 0){
				return DoubleToChar(data->ppd_opt->detail_shift_back_short);
			}
		}
		return IntToChar(data->ppd_opt->shift_back_short);
	case ID_CNSHIFTPOSITIONMAX:
		return cngplpGetValue(data,kPPD_Items_CNShiftPositionMax);
	case ID_CNSHIFTPOSITIONMIN:
		return cngplpGetValue(data,kPPD_Items_CNShiftPositionMin);
	case ID_CNJOBNOTE:
		if(data->ppd_opt->job_note == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->job_note->note);
	case ID_CNJOBDETAILS:
		if(data->ppd_opt->job_note == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->job_note->details);
	case ID_CNFINDETAILS:
      option = GetUIValue(data, kPPD_Items_CNFinDetails);
      if(option == NULL)
		return 0;
      return IntToChar((strcasecmp(option, "true") == 0) ? 1 : 0);
	case ID_CNOFFSETNUM:
		return IntToChar(data->ppd_opt->offset_num);
	case ID_CNUIOFFSETMAX:
		return cngplpGetValue(data,kPPD_Items_CNUIOffsetMax);
	case ID_CNGUTTERSHIFTNUM:
		return DoubleToChar2(data->ppd_opt->guttershiftnum_value_d);

	case ID_MAX_GUTTER_SHIFT_NUM:
		return cngplpGetValue(data,kPPD_Items_CNMAXGutterShiftNum);
	case ID_MIN_GUTTER_SHIFT_NUM:
		return cngplpGetValue(data,kPPD_Items_CNMINGutterShiftNum);
	case ID_CNTABSHIFT:
		return DoubleToChar(data->ppd_opt->tab_shift);
	case ID_DRIVERROOTPATH:
		if(data->ppd_opt->drv_root_path == NULL)
			return NULL;
		else
			return ToChar(data->ppd_opt->drv_root_path);
	case ID_CNMEDIABRANDLIST:
		return MakeMediaBrandListChar(data->ppd_opt);
	case ID_CNMEDIABRAND:
		return MakeMediaBrandChar(data->ppd_opt);
	case ID_CNINSERTMEDIABRANDLIST:
		return MakeInsertMediaBrandListChar(data->ppd_opt);
	case ID_CNINSERTMEDIABRAND:
		return MakeInsertMediaBrandChar(data->ppd_opt);
	case ID_CNINTERLEAFMEDIABRANDLIST:
		return MakeInterleafMediaBrandListChar(data->ppd_opt);
	case ID_CNINTERLEAFMEDIABRAND:
		return MakeInterleafMediaBrandChar(data->ppd_opt);
	case ID_CNPBINDCOVERMEDIABRANDLIST:
		return MakePBindCoverMediaBrandListChar(data->ppd_opt);
	case ID_CNPBINDCOVERMEDIABRAND:
		return MakePBindCoverMediaBrandChar(data->ppd_opt);
	case ID_CNINSERTTABSHIFT:
		return DoubleToChar(data->ppd_opt->ins_tab_shift);
	case ID_CNINSERTPOS:
		return ToChar(data->ppd_opt->ins_pos);
	case ID_CNINSERTPOSPAPERSOURCE:
		return ToChar(data->ppd_opt->ins_pos_papersource);
	case ID_CNINSERTPOSPRINTON:
		return ToChar(data->ppd_opt->ins_pos_printon);
	case ID_CNTABINSERTPOS:
		return ToChar(data->ppd_opt->tab_ins_pos);
	case ID_CNTABINSERTPOSPAPERSOURCE:
		return ToChar(data->ppd_opt->tab_ins_pos_papersource);
	case ID_CNTABINSERTPOSPRINTON:
		return ToChar(data->ppd_opt->tab_ins_pos_printon);
	case ID_CNTABINSERTMULTIPAPERNUMBER:
		return IntToChar(data->ppd_opt->tab_ins_multi_number);
	case ID_CNTABINSERTMULTIPAPERSOURCE:
		return ToChar(data->ppd_opt->tab_ins_multi_papersource);
	case ID_CNTABINSERTMULTIPAPERTYPE:
		return ToChar(data->ppd_opt->tab_ins_multi_papertype);
	case ID_CNBINNAME:
		return ToChar(data->ppd_opt->bin_name);
	case ID_CNBINNAME_ARRAY:
		return ToChar(data->ppd_opt->bin_name_array);
	case ID_CNOVERLAYFILENAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->form_name);
	case ID_CNFORMHANDLE:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->form_handle);
	case ID_CNFORMLIST:
		return MakeFormListChar(data->ppd_opt);
	case ID_CNADJUSTTRIMNUM:
		return DoubleToChar(data->ppd_opt->adjust_trim_num);
	case ID_CNUITRIMVALMAX:
		return cngplpGetValue(data, kPPD_Items_CNUITrimValMax);
	case ID_CNUITRIMVALMIN:
		return cngplpGetValue(data, kPPD_Items_CNUITrimValMin);
	case ID_CNADJUSTFORETRIMNUM:
		return DoubleToChar(data->ppd_opt->adjust_frtrim_num);
	case ID_CNADJUSTTOPBOTTOMTRIMNUM:
		return DoubleToChar(data->ppd_opt->adjust_tbtrim_num);
	case ID_CNPBINDFINISHFORETRIMNUM:
		return DoubleToChar(data->ppd_opt->pb_fin_fore_trim_num);
	case ID_CNPBINDFINISHTOPBOTTOMTRIMNUM:
		return DoubleToChar(data->ppd_opt->pb_fin_topbtm_trim_num);
	case ID_CNSENDTIMENUM:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->send_time);
	case ID_CNOUTSIDELINENUMBER:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->outside_line_number);
	case ID_CNOUTSIDELINENUMINTRA:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->outside_line_number_intra);
	case ID_CNOUTSIDELINENUMNGN:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->outside_line_number_ngn);
	case ID_CNOUTSIDELINENUMMYNUMBERNGN:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->outside_line_number_ngnmynum);
	case ID_CNOUTSIDELINENUMVOIP:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->fax_setting->outside_line_number_voip);
	case ID_CNSENDER:
		if(data->ppd_opt->fax_setting == NULL)
			return NULL;
		else
			return ToChar(data->ppd_opt->fax_setting->sender_name);
	case ID_HOLD_NAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return ToChar(data->ppd_opt->special->hold_name);
	case ID_HOLDQUEUE_DATANAME:
		if(data->ppd_opt->special == NULL)
			return NULL;
		else
		return IntToChar(data->ppd_opt->special->holddata_name);
	case ID_CNFEEDPAPERNAME:
		if(data->ppd_opt->feed_paper_name == NULL)
			return NULL;
		else
			return ToChar(data->ppd_opt->feed_paper_name);
	case ID_CNSADDLESETTING:
		option = IDtoPPDOption(id - 1);
		if(option == NULL)
			return NULL;
		return MakeCNSaddleSettingList(data->ppd_opt, option);
	case ID_CNSTACKCOPIESNUM:
		return IntToChar(data->ppd_opt->stack_copies_num);
	case ID_CNSADDLEPRESSADJUSTMENT:
		return IntToChar(data->ppd_opt->saddle_press_adjust);
	case ID_CNLISTIDSPECIALPRINTMODE:
		return IntToChar(data->ppd_opt->list_specialprintmode_value);
#ifndef	__APPLE__
	case ID_ENABLECNOFFSETNUM:
		return ToChar(GetUIValue(data, "EnableCNOffsetNum"));
	case ID_CNFOLDSETTING:
		option = IDtoPPDOption(id - 1);
		if(option == NULL){
			return NULL;
		}
		return MakeCNFoldSettingList(data->ppd_opt, option);
	case ID_CNPRINTSTYLE:
		option = IDtoPPDOption(id - 1);
		if(option == NULL){
			return NULL;
		}
		return MakeCNPrintStyleList(data->ppd_opt, option);
#endif
	case ID_PCFILENAME:
		return ToChar(data->ppd_opt->pcfile_name);
	case ID_MANUFACTURER:
		return ToChar(data->ppd_opt->manufacturer);
	case ID_NICKNAME:
		return ToChar(data->ppd_opt->nickname);
	case ID_CNPDLTYPE:
		return ToChar(data->ppd_opt->cnpdl_type);
	case ID_APPRINTERICONPATH:
		return ToChar(data->ppd_opt->ap_printer_icon_path);
	case ID_CONFLICTCNOFFSETNUM:
		return IntToChar(GetOffsetNumConflict(data));
	case ID_ENABLEINSERTPOSPAPERSOURCE:
		return MakeEnableInsertPosPaperSource(data, 0);
	case ID_ENABLETABINSERTPOSPAPERSOURCE:
		return MakeEnableInsertPosPaperSource(data, 1);
	default:
		option = IDtoPPDOption(id - 1);
		if(option == NULL)
			return NULL;
		return MakePPDOptionList(data->ppd_opt, option);
	}

	return NULL;
}
Ejemplo n.º 5
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;
}