ftp.nice.ch/pub/next/graphics/3d/geomview.1.4.1.s.tar.gz#/Geomview/src/lib/mib/mibToggle.c

This is mibToggle.c in view mode; [Download] [Up]

#include "mibload.h"
#include "mibwidgets.h"

extern Display	*dpy;
extern GC	 mib_gc;

/* Code for Toggle */
/*****************************************************************************/

mib_Widget *mib_create_Toggle(mib_Widget *parent, char *name, char *label,
		int posx, int posy, int width, int height, int mib_fill)
{
  mib_Widget *temp;
  mib_Toggle *myres;
  unsigned char *label_text;
  Arg     args[20];
  int     n;

  /* create the new widget and add it to the tree */

  temp = mib_new_mib_Widget();
  if (mib_fill == WDEFAULT)
    mib_add_backward(temp, parent);
  else
    mib_add_mib_Widget(temp, parent);

  myres = (mib_Toggle *)malloc(sizeof(mib_Toggle));

  /* initialize public resources */

  if (mib_fill == WDEFAULT)
  {
    temp->name = (char *)malloc(strlen(name)+1);
    strcpy(temp->name,name);
  }
  temp->mib_class = (char *)malloc(7);
  sprintf(temp->mib_class,"Toggle");
  temp->mib_class_num = MIB_TOGGLE;
  temp->width = 0 /*width*/;
  temp->height = 0 /*height*/;
  temp->topOffset = posy;
  temp->leftOffset = posx;
  temp->bottomOffset = 0;
  temp->rightOffset = 0;
  temp->topAttachment = 1;
  temp->leftAttachment = 1;
  temp->bottomAttachment = 0;
  temp->rightAttachment = 0;

  temp->mib_allowresize = 0;

  /* initialize private resources */

  temp->myres = (void *)myres;

  myres->isize = 0;
  if (mib_fill == WDEFAULT)
  {
    myres->label = (char *)malloc(strlen(label)+1);
    strcpy(myres->label,label);
  }

  /* create Xt widget */

  n = 0;

  if (mib_fill == WDEFAULT)
  {
    label_text = XmStringCreateLtoR(label, XmSTRING_DEFAULT_CHARSET);

    XtSetArg (args[n], XmNlabelString, label_text); n++;
    XtSetArg (args[n], XmNleftAttachment, XmATTACH_FORM); n++;
    XtSetArg (args[n], XmNleftOffset, posx);n++;
    XtSetArg (args[n], XmNtopAttachment, XmATTACH_FORM); n++;
    XtSetArg (args[n], XmNtopOffset, posy);n++;
/*    XtSetArg (args[n], XmNwidth, width); n++;
    XtSetArg (args[n], XmNheight, height); n++;*/
  }

  XtSetArg (args[n], XmNwidth, width); n++;
  XtSetArg (args[n], XmNheight, height); n++;
  XtSetArg (args[n], XmNspacing, 4); n++;
  XtSetArg (args[n], XmNhighlightThickness, 0); n++;
  XtSetArg (args[n], XmNrubberPositioning, False); n++;
  XtSetArg (args[n], XmNindicatorType, XmN_OF_MANY);

  temp->me = XtCreateManagedWidget(name, xmToggleButtonWidgetClass,
                temp->parent->me, args, n);

  if (mib_fill == WDEFAULT)
  {
    XmStringFree(label_text);
  }

  if (mib_fill == WEDIT || mib_fill == WDEFAULT)
  {
    mib_apply_eventhandlers(temp->me, temp);
  }

  return temp;
}

void mib_delete_Toggle(mib_Widget *this)
{
  mib_Toggle *temp = (mib_Toggle *)this->myres;

  free(temp->label);
  free(temp);
}

void mib_save_Toggle(mib_Widget *this, FILE *fout)
{
  mib_Toggle *temp = (mib_Toggle *)this->myres;

  fprintf(fout,"label: \\\"%s\\\"\\n\\\n", temp->label);
  fprintf(fout,"indicatorSize: %d\\n\\\n", temp->isize);
}

int mib_load_Toggle(mib_Widget *this, mib_Buffer *fin)
{
  mib_Toggle    *myres;
  unsigned char *label_text;
  char          res[MI_MAXSTRLEN];
  char          val[MI_MAXSTRLEN];
  Arg           args[20];
  int           n, got_line, vallen;

  myres = (mib_Toggle *)this->myres;

  got_line = mib_read_line(fin, res, val);
  if (!got_line)
    return 0;

  if (!strcmp(res,"label"))
  {
    vallen = strlen(val);
    if (vallen < 2)
      return 0;
    val[vallen-1] = '\0';
    myres->label = (char *)malloc(vallen-1);
    sprintf(myres->label,"%s",&(val[1]));

    label_text = XmStringCreateLtoR(myres->label, XmSTRING_DEFAULT_CHARSET);

    n = 0;
    XtSetArg (args[n], XmNlabelString, label_text); n++;
    this->width = 0;
    this->height = 0;
    XtSetArg (args[n], XmNwidth, this->width); n++;
    XtSetArg (args[n], XmNheight, this->height); n++;
    XtSetValues(this->me, args, n);
    XmStringFree(label_text);

  }
  else
    return 0;

  got_line = mib_read_line(fin, res, val);
  if (!got_line)
    return 0;

  if (!strcmp(res, "indicatorSize"))
  {
    sscanf(val, "%d", &(myres->isize));
    if (myres->isize)
      XtVaSetValues(this->me, XmNindicatorSize, (Dimension)myres->isize,
		  XmNmarginBottom, 0, XmNmarginTop, 0, XmNmarginLeft, 0,
		  XmNmarginRight, 0, XmNspacing, 0, NULL);
    got_line = mib_read_line(fin, res, val);
    if (!got_line)
      return 0;
  }

  if (strcmp(res,"EndWidget"))
    return 0;

  return 1;
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.