validate.c
来自「ANFY特效」· C语言 代码 · 共 1,198 行 · 第 1/2 页
C
1,198 行
//// Get the velues from the dialog//#include <gtk/gtk.h>#include <stdio.h>#include <string.h>#include "support.h"#include "main.h"#include "custom.h"// =========================================================#define CHECK_NULL(a) { \ if (GTK_WIDGET_SENSITIVE(lookup_widget (dlg, a))) \ if (!null_entry (lookup_widget (dlg, a))) break; }#define CHECK_INT(a,b,c) { \ if (GTK_WIDGET_SENSITIVE(lookup_widget (dlg, a))) \ if (!check_int (lookup_widget (dlg, a), b, c)) break; }#define CHECK_FLOAT(a,b,c) { \ if (GTK_WIDGET_SENSITIVE(lookup_widget (dlg, a))) \ if (!check_float (lookup_widget (dlg, a), b, c)) break; }#define IS_CHECKED(w) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lookup_widget (main_dlg, w)))#define GET_TEXT(w) gtk_entry_get_text (GTK_ENTRY (lookup_widget (main_dlg, w)))#define ROWS(w) GTK_CLIST (lookup_widget (main_dlg, w))->rows#define FOCUS(w) { GtkWidget *widget = lookup_widget (main_dlg, w); \ gtk_window_set_focus(GTK_WINDOW(gtk_widget_get_toplevel(widget)), widget); }#define GET_INT(w, i) sscanf (gtk_entry_get_text (GTK_ENTRY (lookup_widget (main_dlg, w))), "%d", &i)#define EXIST(w) (GTK_WIDGET_SENSITIVE(lookup_widget (dlg, w)))// =========================================================static int check_int (GtkWidget* widget, int min_value, int max_value){ int value; char buf[256]; strcpy (buf, gtk_entry_get_text (GTK_ENTRY (widget))); if (sscanf(buf, "%d", &value) == 1) { if (value >= min_value && value <= max_value) return 1; } sprintf (buf, "Please enter a value between %d and %d", min_value, max_value); message_box (buf, 0); gtk_window_set_focus(GTK_WINDOW(gtk_widget_get_toplevel(widget)), widget); return 0;}static int check_float (GtkWidget* widget, float min_value, float max_value){ float value; char buf[256]; strcpy (buf, gtk_entry_get_text (GTK_ENTRY (widget))); if (sscanf(buf, "%f", &value) == 1) { if (value >= min_value && value <= max_value) return 1; } sprintf (buf, "Please enter a value between %f and %f", min_value, max_value); message_box (buf, 0); gtk_window_set_focus(GTK_WINDOW(gtk_widget_get_toplevel(widget)), widget); return 0;}static int null_entry (GtkWidget* widget){ if (strlen (gtk_entry_get_text (GTK_ENTRY (widget))) > 0) return 1; message_box ("Error ! Field can't be null", 0); gtk_window_set_focus(GTK_WINDOW(gtk_widget_get_toplevel(widget)), widget); return 0;}static int ValidateTreeMenu (GtkCTree* ptc, GtkCTreeNode* item){ ITEM_DATA* pItemData; GtkCTreeNode* nextItem; if (item == NULL) return 1; pItemData=(ITEM_DATA*)gtk_ctree_node_get_row_data (ptc, item); if (pItemData != NULL) { if( pItemData->iIconIndex <0 ) { gtk_ctree_select (ptc, item); return -1; } nextItem = GTK_CTREE_ROW (item)->children; if (nextItem != NULL) { int iRet = ValidateTreeMenu( ptc, nextItem ); if (iRet <= 0) return iRet; } nextItem = GTK_CTREE_ROW (item)->sibling; if (nextItem != NULL) { int iRet = ValidateTreeMenu (ptc, nextItem); if (iRet <= 0) return iRet; } } else return 0; return 1;}static guint32 m_nNode;static int ValidateTreeCtrl (GtkCTree* ptc, GtkCTreeNode* item, guint32 nItem){ ITEM_DATA* pItemData; GtkCTreeNode* nextItem; if (item == NULL) return 1; nItem++; if (current_applet == APPLET_WHEEL) { if (m_nNode > 8) return -1; if (nItem > 8) return -3; } if (current_applet == APPLET_MORPHMENU) { if (m_nNode > 20) return -1; if (nItem > 20) return -3; //controllo all'inizio, che in ogni nodo che ci sia almeno un back if (nItem == 1 && item != gtk_ctree_node_nth (ptc, 0)) { guint32 nBackInNode = 0; ITEM_DATA* pItemDataTmp; GtkCTreeNode* next = item; while (next != NULL) { pItemDataTmp = (ITEM_DATA*)gtk_ctree_node_get_row_data (ptc, next); if (pItemDataTmp != NULL) { if (pItemDataTmp->bBack) nBackInNode++; } else return 0; next = GTK_CTREE_ROW (next)->sibling; } if (nBackInNode <= 0) return -4; } } pItemData = (ITEM_DATA*)gtk_ctree_node_get_row_data (ptc, item); if (pItemData != NULL) { if (pItemData->bBack) { //verifico che allo stesso livello non ci siano altri 'item back' ITEM_DATA* pItemDataTmp; GtkCTreeNode* next = GTK_CTREE_ROW (item)->sibling; while (next != NULL) { pItemDataTmp = (ITEM_DATA*)gtk_ctree_node_get_row_data (ptc, next); if (pItemDataTmp != NULL) { if (pItemDataTmp->bBack) return -2; } else return 0; next = GTK_CTREE_ROW (next)->sibling; } } nextItem = GTK_CTREE_ROW (item)->children; if (nextItem != NULL) { int iRet; m_nNode++; iRet=ValidateTreeCtrl( ptc, nextItem, 0 ); if( iRet<=0 ) return iRet; } nextItem = GTK_CTREE_ROW (item)->sibling; if (nextItem != NULL) { int iRet=ValidateTreeCtrl( ptc, nextItem, nItem ); if( iRet<=0 ) return iRet; } } else return 0; return 1;}// =========================================================int validate_fields (GtkWidget *dlg){ int ret = 0, val1, val2; switch (current_dialog) { case DLG_TEXTSTYLE: CHECK_NULL ("v_spac"); CHECK_NULL ("speed"); CHECK_NULL ("y_offset"); CHECK_NULL ("sine_angle"); CHECK_NULL ("sine_amplitude"); CHECK_NULL ("sine_speed"); CHECK_NULL ("jump_amplitude"); CHECK_NULL ("jump_speed"); if (EXIST ("min_entry")) { GET_INT ("min_entry", val1); GET_INT ("max_entry", val2); if (val1 >= val2) { message_box (_("Font's max size must be greater than min. size"), 0); FOCUS ("min_entry"); break; } } ret = 1; break; case DLG_EXPERTMODE: { CHECK_NULL ("memory"); CHECK_NULL ("task"); CHECK_NULL ("minsync"); if (IS_CHECKED ("enable_image")) CHECK_NULL ("image"); CHECK_NULL ("xoffset"); CHECK_NULL ("yoffset"); ret = 1; } break; case DLG_REGISTRATION: CHECK_NULL ("mode_entry"); CHECK_NULL ("target_entry"); ret = 1; break; case DLG_ANBLUR: CHECK_NULL ("frames"); CHECK_NULL ("play"); CHECK_NULL ("num"); CHECK_NULL ("pong_pause"); CHECK_NULL ("ping_pause"); ret = 1; break; case DLG_ANFADE: if (ROWS ("image_list") < 2 ) { message_box(_("Error ! At least 2 pictures needed"), 0); FOCUS ("add"); break; } CHECK_INT ("frame_speed", 1, 255); CHECK_NULL ("pause"); ret = 1; break; case DLG_ANFLAG: CHECK_INT ("speed", 1, 8); ret = 1; break; case DLG_ANFYBUMP: CHECK_NULL ("image"); CHECK_NULL ("anglex"); CHECK_NULL ("angley"); CHECK_INT ("power", 1, 100); CHECK_INT ("min", 1, 511); CHECK_INT ("max", 1, 511); CHECK_NULL ("bump_image"); ret = 1; break; case DLG_BLOBS: CHECK_NULL ("i"); CHECK_NULL ("j"); CHECK_NULL ("k"); ret = 1; break; case DLG_TMAPCUBE: CHECK_INT ("intensity", 1, 100); CHECK_INT ("light_min", 1, 511); CHECK_INT ("light_max", 1, 511); //attenzione non mettere il break tmapcube e' sovrainsieme di cubemenu case DLG_CUBEMENU: if (ROWS ("image_list") < 6) { message_box (_("Error ! Images must be 6"), 0); FOCUS ("add"); break; } CHECK_NULL ("x"); CHECK_NULL ("y"); CHECK_NULL ("z"); ret = 1; break; case DLG_DEFORM: CHECK_INT ("value", 0, 500); CHECK_INT ("factor", 1, 100); CHECK_INT ("speed", 1, 50); GET_INT ("width", val2); GET_INT ("offset", val1); if (val1 < 0 || val1 > val2) { message_box (_("Error ! The parameter range is 0 to image width"), 0); FOCUS ("offset"); break; } CHECK_INT ("x1", 1, 19); CHECK_INT ("x2", 1, 19); CHECK_INT ("y1", 1, 19); CHECK_INT ("y2", 1, 19); ret = 1; break; case DLG_FIRE: CHECK_INT ("def", 0, 127); CHECK_INT ("start", 1, 127); CHECK_INT ("value", 1, 127); GET_INT ("start", val2); GET_INT ("value", val1); if (val1 > val2) { message_box (_("Error ! Fire cut value can't be greater than fire start value"), 0); FOCUS ("start"); break; } ret = 1; break; case DLG_FLAGLOAD: CHECK_NULL ("image"); CHECK_NULL ("speed"); CHECK_NULL ("back_image"); ret = 1; break; case DLG_FLOZOIDS: CHECK_NULL ("number"); CHECK_NULL ("distance"); CHECK_NULL ("center"); CHECK_NULL ("acceleration"); CHECK_NULL ("speed"); CHECK_NULL ("bouncing"); ret = 1; break; case DLG_FLUID: CHECK_NULL ("rsize"); CHECK_NULL ("rfactor"); CHECK_NULL ("ssize"); CHECK_NULL ("sfactor"); ret = 1; break; case DLG_HUEROT: CHECK_NULL ("hueshift"); CHECK_INT ("hueshift", 0, 1000); ret = 1; break; case DLG_ANFRACT: CHECK_NULL ("dimension"); CHECK_NULL ("branches"); CHECK_NULL ("morph"); CHECK_INT ("rotation", -99, 99); CHECK_INT ("rotation2", -99, 99); CHECK_NULL ("decline"); /* strValue = GET_TEXT ("decline"); if( _tcstod(strValue, NULL) == 0 && ( strValue.GetLength()>1 || strValue[0] != '0' ) ) { GetDlgItem(IDC_DECLINE)->SetFocus(); AfxMessageBox(IDS_ERR_INVALID_VALUE, MB_ICONEXCLAMATION); break; } */ CHECK_NULL ("length"); CHECK_NULL ("pen_progr"); CHECK_NULL ("back_image"); { char strImageFile[1024], strImgFormat[10], *strTmp; int iWidth, iWidthBack, iHeight, iHeightBack; strTmp = GET_TEXT ("back_image"); GetAppletPath (current_applet, strImageFile); strcat (strImageFile, "/"); strcat (strImageFile, strTmp); if (GetFormatAndSize( strImageFile, strImgFormat, &iWidthBack, &iHeightBack)) { GET_INT ("width", iWidth); GET_INT ("height", iHeight); if (iWidth != iWidthBack || iHeight != iHeightBack) { message_box(_("Error ! The background image width and height must equal the applet size"), 0); break; } } } ret = 1; break; case DLG_ANLAKE: CHECK_NULL ("image"); CHECK_INT ("wind_speed", 0, 200); CHECK_INT ("wave", 1, 200); CHECK_INT ("perspective", 1, 100); CHECK_INT ("farwaving", 1, 10000); ret = 1; break; case DLG_ANLENS: CHECK_NULL ("image"); CHECK_NULL ("lens_width"); { int iWidth, iHeight, iMax; GET_INT ("width", iWidth); GET_INT ("height", iHeight); GET_INT ("lens_width", val1); iMax = (iWidth < iHeight) ? iWidth : iHeight; if (val1 > ( iMax / 2 ) ) { char msg[100]; sprintf (msg, _("Error ! Value can't be grater than %d"), (iMax / 2)); message_box (msg, 0); FOCUS ("lens_width"); break; } } CHECK_INT ("zoom", 0, 30); CHECK_INT ("xy", -40, 40); ret = 1; break; case DLG_MANDEL: CHECK_NULL ("startx"); CHECK_NULL ("starty"); CHECK_INT ("xmin", -99999, 99999); CHECK_INT ("xmax", -99999, 99999); CHECK_INT ("ymin", -99999, 99999); CHECK_INT ("ymax", -99999, 99999); ret = 1; break; case DLG_PLASMA: CHECK_INT ("gen1", 8, 2000); CHECK_INT ("gen2", 3, 256); CHECK_INT ("gen3", 3, 256); CHECK_INT ("r0", 0, 255); CHECK_INT ("r1", 0, 255); CHECK_INT ("g0", 0, 255); CHECK_INT ("g1", 0, 255); CHECK_INT ("b0", 0, 255); CHECK_INT ("b1", 0, 255); ret = 1; break; case DLG_ROTATE: CHECK_NULL ("image"); CHECK_INT ("zoom_min", 0, 80); CHECK_INT ("zoom_max", 0, 80); CHECK_INT ("zoom_speed", 1, 20); CHECK_INT ("first", 0, 10000); CHECK_INT ("second", 0, 10000); CHECK_INT ("distortion", 1, 255); ret = 1; break; case DLG_TUNNEL: CHECK_NULL ("image"); CHECK_NULL ("x"); CHECK_NULL ("y"); CHECK_NULL ("z"); CHECK_NULL ("startx"); CHECK_NULL ("starty"); ret = 1; break; case DLG_TUNNEL3D: CHECK_NULL ("image"); CHECK_NULL ("radius"); CHECK_NULL ("rotation"); CHECK_NULL ("advancing"); CHECK_INT ("light_min", 1, 127); CHECK_INT ("light_max", 1, 127); CHECK_NULL ("light_dec"); CHECK_NULL ("bends_num"); CHECK_NULL ("bends_min"); CHECK_NULL ("bends_max"); CHECK_NULL ("bends_offset"); CHECK_NULL ("bends_offset_inc"); CHECK_NULL ("bends_size_inc"); CHECK_NULL ("x"); CHECK_NULL ("y"); CHECK_NULL ("z"); ret = 1; break; case DLG_VOXEL: CHECK_NULL ("shadow"); CHECK_INT ("roughness", 50, 200); CHECK_INT ("horizon", 0, 500); ret = 1; break; case DLG_WARP: CHECK_NULL ("image"); CHECK_INT ("spiral_start", -10000, 10000); CHECK_INT ("spiral_add", 0, 250); CHECK_INT ("spiral_min", -10000, 10000); CHECK_INT ("spiral_max", -10000, 10000); CHECK_INT ("breath_start", -2000, 2000);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?