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 + -
显示快捷键?