Exemplo n.º 1
0
void
lesstif_insert_style_buttons (Widget menu)
{
  StyleButtons *sb;
  int s, i;

  num_style_buttons++;
  s = num_style_buttons * sizeof (StyleButtons);
  style_button_list = (StyleButtons *) realloc (style_button_list, s);
  sb = style_button_list + num_style_buttons - 1;

  for (i = 0; i < NUM_STYLES; i++)
    {
      Widget btn;
      n = 0;
      stdarg (XmNindicatorType, XmONE_OF_MANY);
      stdarg (XmNlabelString,
	      XmStringCreatePCB (PCB->RouteStyle[i].Name));
      btn = XmCreateToggleButton (menu, "style", args, n);
      XtManageChild (btn);
      XtAddCallback (btn, XmNvalueChangedCallback,
		     (XtCallbackProc) style_selected, (XtPointer) (size_t) i);
      sb->w[i] = btn;
    }
  update_style_buttons ();
}
Exemplo n.º 2
0
static void
nbcb_std_callback (Widget w, Std_Nbcb_Func v, XmPushButtonCallbackStruct * cbs)
{
  int *posl, posc, i;
  XmString **items, **selected;
  if (XmListGetSelectedPos (netlist_list, &posl, &posc) == False)
    return;
  if (v == nbcb_find)
    hid_actionl ("connection", "reset", NULL);
  for (i=0; i<posc; i++)
    {
      LibraryMenuTypePtr net = & (PCB->NetlistLib.Menu[posl[i] - 1]);
      v(net, posl[i]);
    }
  n = 0;
  stdarg (XmNitems, &items);
  XtGetValues (netlist_list, args, n);
  selected = (XmString **) malloc (posc * sizeof (XmString *));
  for (i=0; i<posc; i++)
    selected[i] = items[posl[i]-1];

  n = 0;
  stdarg (XmNselectedItems, selected);
  XtSetValues (netlist_list, args, n);
}
Exemplo n.º 3
0
// *change 1.2.3a 'do_strict' insists that the signatures match exactly; otherwise
// we allow for looser matches (particularly method signatures)
bool Signature::match(const Signature& sig, bool do_strict) const
{
// Comparing signatures 
// *fix 1.2.2b (Eric) Functions w/ no args can be incorrectly matched
 if (this == &sig) return true;
 if (size() != sig.size() || !class_ptr() != !sig.class_ptr()) return false;
 // *fix 1.2.3 Method signatures made tighter in 'exact match' mode
 if (class_ptr() != NULL && sig.class_ptr() != NULL) {
     if ((do_strict && class_ptr() != sig.class_ptr())
        || !sig.class_ptr()->inherits_from(class_ptr()))
     return false; // *fix 1.2.1 Member function signatures are distinct!
 }
 if (is_const() != sig.is_const())
     return false; // *fix 0.9.6 constness makes signatures distinct
 if (stdarg() != sig.stdarg())
     return false; // *fix 1.2.3 (Eric) And so does whether this is stdarg or not
 
 Signature::iterator ti,tio;
 try {
 for(ti = begin(), tio = sig.begin(); ti != end(); ++ti,++tio)
   if (!(*ti == *tio)) return false;
 } catch(...) {
   return false;
 }
 //* return tio == sig.end() && ti == end(); //true;
 return true;
}
Exemplo n.º 4
0
static int
RouteStylesChanged (int argc, char **argv, Coord x, Coord y)
{
  int i, j, h;
  if (!PCB || !PCB->RouteStyle[0].Name)
    return 0;
  update_style_buttons ();
  if (!style_dialog)
    return 0;
  for (j = 0; j < NUM_STYLES; j++)
    {
      h = hash (PCB->RouteStyle[j].Name);
      if (name_hashes[j] == h)
	continue;
      name_hashes[j] = h;
      n = 0;
      stdarg (XmNlabelString,
	      XmStringCreatePCB (PCB->RouteStyle[j].Name));
      if (style_dialog)
	XtSetValues (style_pb[j], args, n);
      for (i = 0; i < num_style_buttons; i++)
	XtSetValues (style_button_list[i].w[j], args, n);
    }
  update_values ();
  return 0;
}
Exemplo n.º 5
0
static Widget
netlist_button (Widget parent, char *name, char *string,
		Widget top, Widget bottom, Widget left, Widget right,
		XtCallbackProc callback, void *user_data)
{
  Widget rv;
  XmString str;

#define NLB_W(w) if (w == NLB_FORM) { stdarg(XmN ## w ## Attachment, XmATTACH_FORM); } \
  else if (w) { stdarg(XmN ## w ## Attachment, XmATTACH_WIDGET); \
    stdarg (XmN ## w ## Widget, w); }

  NLB_W (top);
  NLB_W (bottom);
  NLB_W (left);
  NLB_W (right);
  str = XmStringCreatePCB (string);
  stdarg(XmNlabelString, str);
  rv = XmCreatePushButton (parent, name, args, n);
  XtManageChild (rv);
  if (callback)
    XtAddCallback (rv, XmNactivateCallback, callback, (XtPointer)user_data);
  XmStringFree(str);
  return rv;
}
static NOINLINE_NOCLONE void
backtracegen (void)
{
    stdarg (1);
    /* Here should be no instruction after the stdarg call as it is noreturn
       function.  It must be stdarg so that it is a call and not jump (jump as
       a tail-call).  */
}
Exemplo n.º 7
0
static int
LesstifNetlistShow (int argc, char **argv, Coord x, Coord y)
{
  if (build_netlist_dialog ())
    return 0;

  if (argc == 1)
    {
      LibraryMenuTypePtr net;

      net = netnode_to_netname(argv[0]);
      if (net)
	{
	  XmString item;
	  int vis = 0;

	  /* Select net first, 'True' causes pick_net() to be invoked */
	  item = XmStringCreatePCB (net->Name);
	  XmListSelectItem (netlist_list, item, True);
	  XmListSetItem (netlist_list, item);
	  XmStringFree (item);

	  /* Now the netnode_list has the right contents */
	  item = XmStringCreatePCB (argv[0]);
	  XmListSelectItem (netnode_list, item, False);

	  /*
	   * Only force the item to the top if there are enough to scroll.
	   * A bug (?) in lesstif will cause the window to get ever wider
	   * if an XmList that doesn't require a scrollbar is forced to
	   * have one (when the top item is not the first item).
	   */
	  n = 0;
	  stdarg (XmNvisibleItemCount, &vis);
	  XtGetValues (netnode_list, args, n);
	  if (n_netnode_strings > vis)
	    {
	      XmListSetItem (netnode_list, item);
	    }
	  XmStringFree (item);
	}
      else
	{
	  /* Try the argument as a netname */
	  net = netname_to_netname(argv[0]);
	  if (net)
	    {
	      XmString item;

	      item = XmStringCreatePCB (net->Name);
	      XmListSetItem (netlist_list, item);
	      XmListSelectItem (netlist_list, item, True);
	      XmStringFree (item);
	    }
	}
    }
  return 0;
}
Exemplo n.º 8
0
Arquivo: menu.c Projeto: thequux/pcb
static void
do_color (char *value, char *which)
{
  XColor color;
  if (XParseColor (display, cmap, value, &color))
    if (XAllocColor (display, cmap, &color))
      {
	stdarg (which, color.pixel);
      }
}
Exemplo n.º 9
0
bool Function::can_match(int size)
// can this function in principle match an argument list of a particular size?
{
    int asz = signature()->size();
    if (!m_default_args) {
        if (stdarg()) return size >= asz;
        else return size == asz;
    } else
        return size >= m_default_index && size <= asz;
}
Exemplo n.º 10
0
static void
pick_net (int pick)
{
  LibraryMenuType *menu = Library.Menu + pick;
  int i;

  if (pick == last_pick)
    return;
  last_pick = pick;

  if (libnode_strings)
    free (libnode_strings);
  libnode_strings = (XmString *) malloc (menu->EntryN * sizeof (XmString));
  for (i = 0; i < menu->EntryN; i++)
    libnode_strings[i] = XmStringCreatePCB (menu->Entry[i].ListEntry);
  n = 0;
  stdarg (XmNitems, libnode_strings);
  stdarg (XmNitemCount, menu->EntryN);
  XtSetValues (libnode_list, args, n);
}
Exemplo n.º 11
0
static void
update_one_value (int i, Coord v)
{
  char buf[100];

  pcb_sprintf (buf, "%m+%.2mS", unit->allow, v);
  XmTextSetString (style_values[i], buf);
  n = 0;
  stdarg (XmNlabelString, ustr);
  XtSetValues (units_pb[i], args, n);
}
Exemplo n.º 12
0
static void
pick_net (int pick)
{
  LibraryMenuType *menu = PCB->NetlistLib.Menu + pick;
  int i;

  if (pick == last_pick)
    return;
  last_pick = pick;

  if (netnode_strings)
    free (netnode_strings);	/* XXX leaked all XmStrings??? */
  n_netnode_strings = menu->EntryN;
  netnode_strings = (XmString *) malloc (menu->EntryN * sizeof (XmString));
  for (i = 0; i < menu->EntryN; i++)
    netnode_strings[i] = XmStringCreatePCB (menu->Entry[i].ListEntry);
  n = 0;
  stdarg (XmNitems, netnode_strings);
  stdarg (XmNitemCount, menu->EntryN);
  XtSetValues (netnode_list, args, n);
}
Exemplo n.º 13
0
static int
LibraryChanged (int argc, char **argv, Coord x, Coord y)
{
  int i;
  if (!Library.MenuN)
    return 0;
  if (build_library_dialog ())
    return 0;
  last_pick = -1;
  if (library_strings)
    free (library_strings);
  library_strings = (XmString *) malloc (Library.MenuN * sizeof (XmString));
  for (i = 0; i < Library.MenuN; i++)
    library_strings[i] = XmStringCreatePCB (Library.Menu[i].Name);
  n = 0;
  stdarg (XmNitems, library_strings);
  stdarg (XmNitemCount, Library.MenuN);
  XtSetValues (library_list, args, n);
  pick_net (0);
  return 0;
}
Exemplo n.º 14
0
static int
LesstifNetlistChanged (int argc, char **argv, Coord x, Coord y)
{
  int i;
  if (!PCB->NetlistLib.MenuN)
    return 0;
  if (build_netlist_dialog ())
    return 0;
  last_pick = -1;
  if (netlist_strings)
    free (netlist_strings);
  netlist_strings =
    (XmString *) malloc (PCB->NetlistLib.MenuN * sizeof (XmString));
  for (i = 0; i < PCB->NetlistLib.MenuN; i++)
    netlist_strings[i] =
      XmStringCreatePCB (PCB->NetlistLib.Menu[i].Name);
  n = 0;
  stdarg (XmNitems, netlist_strings);
  stdarg (XmNitemCount, PCB->NetlistLib.MenuN);
  XtSetValues (netlist_list, args, n);
  pick_net (0);
  return 0;
}
Exemplo n.º 15
0
Arquivo: menu.c Projeto: thequux/pcb
static void
callback (Widget w, Resource * node, XmPushButtonCallbackStruct * pbcs)
{
  int vi;
  have_xy = 0;
  lesstif_show_crosshair (0);
  if (pbcs->event && pbcs->event->type == KeyPress)
    {
      Dimension wx, wy;
      Widget aw = XtWindowToWidget (display, pbcs->event->xkey.window);
      action_x = pbcs->event->xkey.x;
      action_y = pbcs->event->xkey.y;
      if (aw)
	{
	  Widget p = work_area;
	  while (p && p != aw)
	    {
	      n = 0;
	      stdarg (XmNx, &wx);
	      stdarg (XmNy, &wy);
	      XtGetValues (p, args, n);
	      action_x -= wx;
	      action_y -= wy;
	      p = XtParent (p);
	    }
	  if (p == aw)
	    have_xy = 1;
	}
      //printf("have xy from %s: %d %d\n", XtName(aw), action_x, action_y);
    }

  lesstif_need_idle_proc ();
  for (vi = 1; vi < node->c; vi++)
    if (resource_type (node->v[vi]) == 10)
      if (hid_parse_actions (node->v[vi].value))
	return;
}
Exemplo n.º 16
0
Arquivo: menu.c Projeto: thequux/pcb
static void
layerpick_button_callback (Widget w, int layer,
			   XmPushButtonCallbackStruct * pbcs)
{
  int l, i;
  char *name;
  PCB->RatDraw = (layer == LB_RATS);
  PCB->SilkActive = (layer == LB_SILK);
  if (layer < max_copper_layer)
    ChangeGroupVisibility (layer, 1, 1);
  for (l = 0; l < num_layer_buttons; l++)
    {
      LayerButtons *lb = layer_button_list + l;
      if (!lb->is_pick)
	continue;
      for (i = 0; i < LB_NUMPICK; i++)
	XmToggleButtonSetState (lb->w[i], layer == i, False);
    }
  switch (layer)
    {
    case LB_RATS:
      name = "Rats";
      break;
    case LB_SILK:
      name = "Silk";
      break;
    default:
      name = PCB->Data->Layer[layer].Name;
      break;
    }
  n = 0;
  stdarg (XmNbackground, fg_colors[layer]);
  stdarg (XmNforeground, bg_color);
  stdarg (XmNlabelString, XmStringCreateLocalized (name));
  XtSetValues (lesstif_m_layer, args, n);
  lesstif_invalidate_all ();
}
Exemplo n.º 17
0
Arquivo: menu.c Projeto: thequux/pcb
static void
show_one_layer_button (int layer, int set)
{
  int l;
  n = 0;
  if (set)
    {
      stdarg (XmNforeground, bg_color);
      stdarg (XmNbackground, fg_colors[layer]);
    }
  else
    {
      stdarg (XmNforeground, fg_colors[layer]);
      stdarg (XmNbackground, bg_color);
    }
  stdarg (XmNset, set);

  for (l = 0; l < num_layer_buttons; l++)
    {
      LayerButtons *lb = layer_button_list + l;
      if (!lb->is_pick)
	XtSetValues (lb->w[layer], args, n);
    }
}
Exemplo n.º 18
0
Arquivo: menu.c Projeto: thequux/pcb
void
lesstif_get_xy (const char *message)
{
  XmString ls = XmStringCreateLocalized ((char *)message);

  XtManageChild (m_click);
  n = 0;
  stdarg (XmNlabelString, ls);
  XtSetValues (m_click, args, n);
  //printf("need xy: msg `%s'\n", msg);
  need_xy = 1;
  XBell (display, 100);
  while (!have_xy)
    {
      XEvent e;
      XtAppNextEvent (app_context, &e);
      XtDispatchEvent (&e);
    }
  need_xy = 0;
  have_xy = 1;
  XtUnmanageChild (m_click);
}
Exemplo n.º 19
0
Arquivo: menu.c Projeto: thequux/pcb
static void
insert_layerview_buttons (Widget menu)
{
  int i, s;
  LayerButtons *lb;

  num_layer_buttons++;
  s = num_layer_buttons * sizeof (LayerButtons);
  if (layer_button_list)
    layer_button_list = (LayerButtons *) realloc (layer_button_list, s);
  else
    layer_button_list = (LayerButtons *) malloc (s);
  lb = layer_button_list + num_layer_buttons - 1;

  for (i = 0; i < LB_NUM; i++)
    {
      static char namestr[] = "Label ";
      char *name = namestr;
      Widget btn;
      name[5] = 'A' + i;
      switch (i)
	{
	case LB_SILK:
	  name = "Silk";
	  break;
	case LB_RATS:
	  name = "Rat Lines";
	  break;
	case LB_PINS:
	  name = "Pins/Pads";
	  break;
	case LB_VIAS:
	  name = "Vias";
	  break;
	case LB_BACK:
	  name = "Far Side";
	  break;
	case LB_MASK:
	  name = "Solder Mask";
	  break;
	}
      n = 0;
      if (i < MAX_LAYER && i < 9)
	{
	  char buf[20], av[30];
	  Resource *ar;
	  XmString as;
	  sprintf (buf, "Ctrl-%d", i + 1);
	  as = XmStringCreateLocalized (buf);
	  stdarg (XmNacceleratorText, as);
	  ar = resource_create (0);
	  sprintf (av, "ToggleView(%d)", i + 1);
	  resource_add_val (ar, 0, strdup (av), 0);
	  resource_add_val (ar, 0, strdup (av), 0);
	  ar->flags |= FLAG_V;
	  sprintf (av, "Ctrl<Key>%d", i + 1);
	  note_accelerator (av, ar);
	  stdarg (XmNmnemonic, i + '1');
	}
      btn = XmCreateToggleButton (menu, name, args, n);
      XtManageChild (btn);
      XtAddCallback (btn, XmNvalueChangedCallback,
		     (XtCallbackProc) layer_button_callback, (XtPointer) (size_t) i);
      lb->w[i] = btn;

      if (i == LB_MASK)
	note_widget_flag (btn, XmNset, "showmask");
    }
  lb->is_pick = 0;
  LayersChanged (0, 0, 0, 0);
}
Exemplo n.º 20
0
Arquivo: menu.c Projeto: thequux/pcb
static void
insert_layerpick_buttons (Widget menu)
{
  int i, s;
  LayerButtons *lb;

  num_layer_buttons++;
  s = num_layer_buttons * sizeof (LayerButtons);
  if (layer_button_list)
    layer_button_list = (LayerButtons *) realloc (layer_button_list, s);
  else
    layer_button_list = (LayerButtons *) malloc (s);
  lb = layer_button_list + num_layer_buttons - 1;

  for (i = 0; i < LB_NUMPICK; i++)
    {
      static char namestr[] = "Label ";
      char *name = namestr;
      Widget btn;
      name[5] = 'A' + i;
      switch (i)
	{
	case LB_SILK:
	  name = "Silk";
	  break;
	case LB_RATS:
	  name = "Rat Lines";
	  break;
	}
      n = 0;
      if (i < MAX_LAYER && i < 9)
	{
	  char buf[20], av[30];
	  Resource *ar;
	  XmString as;
	  sprintf (buf, "%d", i + 1);
	  as = XmStringCreateLocalized (buf);
	  stdarg (XmNacceleratorText, as);
	  ar = resource_create (0);
	  switch (i)
	    {
	    case LB_SILK:
	      strcpy (av, "SelectLayer(Silk)");
	      break;
	    case LB_RATS:
	      strcpy (av, "SelectLayer(Rats)");
	      break;
	    default:
	      sprintf (av, "SelectLayer(%d)", i + 1);
	      break;
	    }
	  resource_add_val (ar, 0, strdup (av), 0);
	  resource_add_val (ar, 0, strdup (av), 0);
	  ar->flags |= FLAG_V;
	  sprintf (av, "<Key>%d", i + 1);
	  note_accelerator (av, ar);
	  stdarg (XmNmnemonic, i + '1');
	}
      stdarg (XmNindicatorType, XmONE_OF_MANY);
      btn = XmCreateToggleButton (menu, name, args, n);
      XtManageChild (btn);
      XtAddCallback (btn, XmNvalueChangedCallback,
		     (XtCallbackProc) layerpick_button_callback,
		     (XtPointer) (size_t) i);
      lb->w[i] = btn;
    }
  lb->is_pick = 1;
  LayersChanged (0, 0, 0, 0);
}
Exemplo n.º 21
0
static int
build_library_dialog ()
{
  if (!mainwind)
    return 1;
  if (library_dialog)
    return 0;

  n = 0;
  stdarg (XmNresizePolicy, XmRESIZE_GROW);
  stdarg (XmNtitle, "Element Library");
  library_dialog = XmCreateFormDialog (mainwind, "library", args, n);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_FORM);
  stdarg (XmNbottomAttachment, XmATTACH_FORM);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNvisibleItemCount, 10);
  library_list = XmCreateScrolledList (library_dialog, "nets", args, n);
  XtManageChild (library_list);
  XtAddCallback (library_list, XmNbrowseSelectionCallback,
		 (XtCallbackProc) library_browse, 0);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_FORM);
  stdarg (XmNbottomAttachment, XmATTACH_FORM);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNleftAttachment, XmATTACH_WIDGET);
  stdarg (XmNleftWidget, library_list);
  libnode_list = XmCreateScrolledList (library_dialog, "nodes", args, n);
  XtManageChild (libnode_list);
  XtAddCallback (libnode_list, XmNbrowseSelectionCallback,
		 (XtCallbackProc) libnode_select, 0);

  return 0;
}
Exemplo n.º 22
0
static int
AdjustStyle (int argc, char **argv, Coord x, Coord y)
{
  if (!mainwind)
    return 1;
  if (style_dialog == 0)
    {
      int i;

      unit = Settings.grid_unit;
      ustr = XmStringCreateLocalized ((char *)unit->suffix);

      n = 0;
      stdarg (XmNautoUnmanage, False);
      stdarg (XmNtitle, "Route Styles");
      style_dialog = XmCreateFormDialog (mainwind, "style", args, n);

      n = 0;
      stdarg (XmNtopAttachment, XmATTACH_FORM);
      stdarg (XmNleftAttachment, XmATTACH_FORM);
      stdarg (XmNrightAttachment, XmATTACH_FORM);
      value_form = XmCreateForm (style_dialog, "values", args, n);
      XtManageChild (value_form);

      n = 0;
      stdarg (XmNtopAttachment, XmATTACH_FORM);
      stdarg (XmNrightAttachment, XmATTACH_FORM);
      stdarg (XmNbottomAttachment, XmATTACH_FORM);
      stdarg (XmNfractionBase, 4);
      stdarg (XmNresizePolicy, XmRESIZE_GROW);
      units_form = XmCreateForm (value_form, "units", args, n);
      XtManageChild (units_form);

      n = 0;
      stdarg (XmNtopAttachment, XmATTACH_FORM);
      stdarg (XmNbottomAttachment, XmATTACH_FORM);
      stdarg (XmNleftAttachment, XmATTACH_FORM);
      stdarg (XmNfractionBase, 4);
      value_labels = XmCreateForm (value_form, "values", args, n);
      XtManageChild (value_labels);

      n = 0;
      stdarg (XmNtopAttachment, XmATTACH_FORM);
      stdarg (XmNbottomAttachment, XmATTACH_FORM);
      stdarg (XmNrightAttachment, XmATTACH_WIDGET);
      stdarg (XmNrightWidget, units_form);
      stdarg (XmNleftAttachment, XmATTACH_WIDGET);
      stdarg (XmNleftWidget, value_labels);
      stdarg (XmNfractionBase, 4);
      value_texts = XmCreateForm (value_form, "values", args, n);
      XtManageChild (value_texts);

      for (i = 0; i < SSNUM; i++)
	{
	  style_values[i] = style_value (i);
	  name_hashes[i] = hash (PCB->RouteStyle[i].Name);
	}
      for (i = 0; i < NUM_STYLES; i++)
	style_pb[i] = style_button (i);
      update_values ();
      update_style_buttons ();
    }
  XtManageChild (style_dialog);
  return 0;
}
Exemplo n.º 23
0
static Widget
style_button (int i)
{
  Widget pb, set;

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_WIDGET);
  stdarg (XmNtopWidget, i ? style_pb[i - 1] : value_form);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNlabelString, XmStringCreatePCB ("Name"));
  set = XmCreatePushButton (style_dialog, "style", args, n);
  XtManageChild (set);
  XtAddCallback (set, XmNactivateCallback,
		 (XtCallbackProc) style_name_cb, (XtPointer) (size_t) i);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_WIDGET);
  stdarg (XmNtopWidget, i ? style_pb[i - 1] : value_form);
  stdarg (XmNleftAttachment, XmATTACH_WIDGET);
  stdarg (XmNleftWidget, set);
  stdarg (XmNlabelString, XmStringCreatePCB ("Set"));
  set = XmCreatePushButton (style_dialog, "style", args, n);
  XtManageChild (set);
  XtAddCallback (set, XmNactivateCallback,
		 (XtCallbackProc) style_set_cb, (XtPointer) (size_t) i);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_WIDGET);
  stdarg (XmNtopWidget, i ? style_pb[i - 1] : value_form);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNleftAttachment, XmATTACH_WIDGET);
  stdarg (XmNleftWidget, set);
  stdarg (XmNlabelString, XmStringCreatePCB (PCB->RouteStyle[i].Name));
  stdarg (XmNindicatorType, XmONE_OF_MANY);
  stdarg (XmNalignment, XmALIGNMENT_BEGINNING);
  pb = XmCreateToggleButton (style_dialog, "style", args, n);
  XtManageChild (pb);
  XtAddCallback (pb, XmNvalueChangedCallback,
		 (XtCallbackProc) style_selected, (XtPointer) (size_t) i);
  return pb;
}
Exemplo n.º 24
0
static Widget
style_value (int i)
{
  Widget w, l;
  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_POSITION);
  stdarg (XmNtopPosition, i);
  stdarg (XmNbottomAttachment, XmATTACH_POSITION);
  stdarg (XmNbottomPosition, i + 1);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNalignment, XmALIGNMENT_END);
  l = XmCreateLabel (value_labels, value_names[i], args, n);
  XtManageChild (l);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_POSITION);
  stdarg (XmNtopPosition, i);
  stdarg (XmNbottomAttachment, XmATTACH_POSITION);
  stdarg (XmNbottomPosition, i + 1);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNcolumns, 8);
  w = XmCreateTextField (value_texts, value_names[i], args, n);
  XtAddCallback (w, XmNvalueChangedCallback,
		 (XtCallbackProc) style_value_cb, (XtPointer) (size_t) i);
  XtManageChild (w);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_POSITION);
  stdarg (XmNtopPosition, i);
  stdarg (XmNbottomAttachment, XmATTACH_POSITION);
  stdarg (XmNbottomPosition, i + 1);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNlabelString, ustr);
  units_pb[i] = XmCreatePushButton (units_form, value_names[i], args, n);
  XtAddCallback (units_pb[i], XmNactivateCallback,
		 (XtCallbackProc) units_cb, (XtPointer) (size_t) i);
  XtManageChild (units_pb[i]);

  return w;
}
Exemplo n.º 25
0
Arquivo: menu.c Projeto: thequux/pcb
static void
add_resource_to_menu (Widget menu, Resource * node, XtCallbackProc callback)
{
  int i, j;
  char *v;
  Widget sub, btn;
  Resource *r;

  for (i = 0; i < node->c; i++)
    switch (resource_type (node->v[i]))
      {
      case 101:		/* named subnode */
	n = 0;
	stdarg (XmNtearOffModel, XmTEAR_OFF_ENABLED);
	sub = XmCreatePulldownMenu (menu, node->v[i].name, args, n);
	XtSetValues (sub, args, n);
	n = 0;
	stdarg (XmNsubMenuId, sub);
	btn = XmCreateCascadeButton (menu, node->v[i].name, args, n);
	XtManageChild (btn);
	add_resource_to_menu (sub, node->v[i].subres, callback);
	break;

      case 1:			/* unnamed subres */
	n = 0;
#if 0
	if ((v = resource_value (node->v[i].subres, "fg")))
	  {
	    do_color (v, XmNforeground);
	  }
	if ((v = resource_value (node->v[i].subres, "bg")))
	  {
	    do_color (v, XmNbackground);
	  }
	if ((v = resource_value (node->v[i].subres, "font")))
	  {
	    XFontStruct *fs = XLoadQueryFont (display, v);
	    if (fs)
	      {
		XmFontList fl =
		  XmFontListCreate (fs, XmSTRING_DEFAULT_CHARSET);
		stdarg (XmNfontList, fl);
	      }
	  }
#endif
	if ((v = resource_value (node->v[i].subres, "m")))
	  {
	    stdarg (XmNmnemonic, v);
	  }
	if ((r = resource_subres (node->v[i].subres, "a")))
	  {
	    XmString as = XmStringCreateLocalized (r->v[0].value);
	    stdarg (XmNacceleratorText, as);
	    //stdarg(XmNaccelerator, r->v[1].value);
	    note_accelerator (r->v[1].value, node->v[i].subres);
	  }
	v = "button";
	for (j = 0; j < node->v[i].subres->c; j++)
	  if (resource_type (node->v[i].subres->v[j]) == 10)
	    {
	      v = node->v[i].subres->v[j].value;
	      break;
	    }
	stdarg (XmNlabelString, XmStringCreateLocalized (v));
	if (node->v[i].subres->flags & FLAG_S)
	  {
	    int nn = n;
	    stdarg (XmNtearOffModel, XmTEAR_OFF_ENABLED);
	    sub = XmCreatePulldownMenu (menu, v, args + nn, n - nn);
	    n = nn;
	    stdarg (XmNsubMenuId, sub);
	    btn = XmCreateCascadeButton (menu, "menubutton", args, n);
	    XtManageChild (btn);
	    add_resource_to_menu (sub, node->v[i].subres, callback);
	  }
	else
	  {
	    Resource *radio = resource_subres (node->v[i].subres, "radio");
	    char *checked = resource_value (node->v[i].subres, "checked");
	    char *label = resource_value (node->v[i].subres, "sensitive");
	    if (radio)
	      {
		ToggleItem *ti = (ToggleItem *) malloc (sizeof (ToggleItem));
		ti->next = toggle_items;
		ti->group = radio->v[0].value;
		ti->item = radio->v[1].value;
		ti->callback = callback;
		ti->node = node->v[i].subres;
		toggle_items = ti;

		if (resource_value (node->v[i].subres, "set"))
		  {
		    stdarg (XmNset, True);
		  }
		stdarg (XmNindicatorType, XmONE_OF_MANY);
		btn = XmCreateToggleButton (menu, "menubutton", args, n);
		ti->w = btn;
		XtAddCallback (btn, XmNvalueChangedCallback,
			       (XtCallbackProc) radio_callback,
			       (XtPointer) ti);
	      }
	    else if (checked)
	      {
		if (strchr (checked, ','))
		  stdarg (XmNindicatorType, XmONE_OF_MANY);
		else
		  stdarg (XmNindicatorType, XmN_OF_MANY);
		btn = XmCreateToggleButton (menu, "menubutton", args, n);
		XtAddCallback (btn, XmNvalueChangedCallback,
			       callback, (XtPointer) node->v[i].subres);
	      }
	    else if (label && strcmp (label, "false") == 0)
	      {
		stdarg (XmNalignment, XmALIGNMENT_BEGINNING);
		btn = XmCreateLabel (menu, "menulabel", args, n);
	      }
	    else
	      {
		btn = XmCreatePushButton (menu, "menubutton", args, n);
		XtAddCallback (btn, XmNactivateCallback,
			       callback, (XtPointer) node->v[i].subres);
	      }

	    for (j = 0; j < node->v[i].subres->c; j++)
	      switch (resource_type (node->v[i].subres->v[j]))
		{
		case 110:	/* named value = X resource */
		  {
		    char *n = node->v[i].subres->v[j].name;
		    if (strcmp (n, "fg") == 0)
		      n = "foreground";
		    if (strcmp (n, "bg") == 0)
		      n = "background";
		    if (strcmp (n, "m") == 0
			|| strcmp (n, "a") == 0
			|| strcmp (n, "sensitive") == 0)
		      break;
		    if (strcmp (n, "checked") == 0)
		      {
			note_widget_flag (btn, XmNset,
					  node->v[i].subres->v[j].value);
			break;
		      }
		    if (strcmp (n, "active") == 0)
		      {
			note_widget_flag (btn, XmNsensitive,
					  node->v[i].subres->v[j].value);
			break;
		      }
		    XtVaSetValues (btn, XtVaTypedArg,
				   n,
				   XtRString,
				   node->v[i].subres->v[j].value,
				   strlen (node->v[i].subres->v[j].value) + 1,
				   NULL);
		  }
		  break;
		}

	    XtManageChild (btn);
	  }
	break;

      case 10:			/* unnamed value */
	n = 0;
	if (node->v[i].value[0] == '@')
	  {
	    if (strcmp (node->v[i].value, "@layerview") == 0)
	      insert_layerview_buttons (menu);
	    if (strcmp (node->v[i].value, "@layerpick") == 0)
	      insert_layerpick_buttons (menu);
	    if (strcmp (node->v[i].value, "@routestyles") == 0)
	      lesstif_insert_style_buttons (menu);
	  }
	else if (strcmp (node->v[i].value, "-") == 0)
	  {
	    btn = XmCreateSeparator (menu, "sep", args, n);
	    XtManageChild (btn);
	  }
	else if (i > 0)
	  {
	    btn = XmCreatePushButton (menu, node->v[i].value, args, n);
	    XtManageChild (btn);
	  }
	break;
      }
}
Exemplo n.º 26
0
static int
build_netlist_dialog ()
{
  Widget b_sel, b_unsel, b_find, b_ripup, b_rat_on, b_rat_off, l_ops;
  XmString ops_str;

  if (!mainwind)
    return 1;
  if (netlist_dialog)
    return 0;

  n = 0;
  stdarg (XmNresizePolicy, XmRESIZE_GROW);
  stdarg (XmNtitle, "Netlists");
  stdarg (XmNautoUnmanage, False);
  netlist_dialog = XmCreateFormDialog (mainwind, "netlist", args, n);

  n = 0;
  b_rat_on = netlist_button (netlist_dialog, "rat_on", "Enable for rats",
			     0, NLB_FORM, NLB_FORM, 0,
			     (XtCallbackProc)nbcb_std_callback, (void *)nbcb_rat_on);

  n = 0;
  b_rat_off = netlist_button (netlist_dialog, "rat_off", "Disable for rats",
			      0, NLB_FORM, b_rat_on, 0,
			      (XtCallbackProc)nbcb_std_callback, (void *)nbcb_rat_off);

  n = 0;
  b_sel = netlist_button (netlist_dialog, "select", "Select",
			  0, b_rat_on, NLB_FORM, 0, 
			      (XtCallbackProc)nbcb_std_callback, (void *)nbcb_select);

  n = 0;
  b_unsel = netlist_button (netlist_dialog, "deselect", "Deselect",
			    0, b_rat_on, b_sel, 0, 
			      (XtCallbackProc)nbcb_std_callback, (void *)nbcb_deselect);

  n = 0;
  b_find = netlist_button (netlist_dialog, "find", "Find",
			   0, b_rat_on, b_unsel, 0,
			   (XtCallbackProc)nbcb_std_callback, (void *)nbcb_find);


  n = 0;
  b_ripup = netlist_button (netlist_dialog, "ripup", "Rip Up",
			    0, b_rat_on, b_find, 0,
			    (XtCallbackProc)nbcb_ripup, 0);

  n = 0;
  stdarg (XmNbottomAttachment, XmATTACH_WIDGET);
  stdarg (XmNbottomWidget, b_sel);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  ops_str = XmStringCreatePCB ("Operations on selected net names:");
  stdarg (XmNlabelString, ops_str);
  l_ops = XmCreateLabel (netlist_dialog, "ops", args, n);
  XtManageChild (l_ops);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_FORM);
  stdarg (XmNbottomAttachment, XmATTACH_WIDGET);
  stdarg (XmNbottomWidget, l_ops);
  stdarg (XmNleftAttachment, XmATTACH_FORM);
  stdarg (XmNrightAttachment, XmATTACH_POSITION);
  stdarg (XmNrightPosition, 50);
  stdarg (XmNvisibleItemCount, 10);
  stdarg (XmNselectionPolicy, XmEXTENDED_SELECT);
  netlist_list = XmCreateScrolledList (netlist_dialog, "nets", args, n);
  XtManageChild (netlist_list);
  XtAddCallback (netlist_list, XmNdefaultActionCallback, (XtCallbackProc)netlist_select, 0);
  XtAddCallback (netlist_list, XmNextendedSelectionCallback, (XtCallbackProc)netlist_extend, 0);

  n = 0;
  stdarg (XmNtopAttachment, XmATTACH_FORM);
  stdarg (XmNbottomAttachment, XmATTACH_WIDGET);
  stdarg (XmNbottomWidget, l_ops);
  stdarg (XmNrightAttachment, XmATTACH_FORM);
  stdarg (XmNleftAttachment, XmATTACH_POSITION);
  stdarg (XmNleftPosition, 50);
  netnode_list = XmCreateScrolledList (netlist_dialog, "nodes", args, n);
  XtManageChild (netnode_list);
  XtAddCallback (netnode_list, XmNbrowseSelectionCallback, (XtCallbackProc)netnode_browse, 0);

  return 0;
}
Exemplo n.º 27
0
Arquivo: menu.c Projeto: thequux/pcb
static int
LayersChanged (int argc, char **argv, int x, int y)
{
  int l, i, set;
  char *name;
  int current_layer;

  if (!layer_button_list)
    return 0;
  if (PCB && PCB->Data)
    {
      DataType *d = PCB->Data;
      for (i = 0; i < MAX_LAYER; i++)
	fg_colors[i] = lesstif_parse_color (d->Layer[i].Color);
      fg_colors[LB_SILK] = lesstif_parse_color (PCB->ElementColor);
      fg_colors[LB_RATS] = lesstif_parse_color (PCB->RatColor);
      fg_colors[LB_PINS] = lesstif_parse_color (PCB->PinColor);
      fg_colors[LB_VIAS] = lesstif_parse_color (PCB->ViaColor);
      fg_colors[LB_BACK] =
	lesstif_parse_color (PCB->InvisibleObjectsColor);
      fg_colors[LB_MASK] = lesstif_parse_color (PCB->MaskColor);
      bg_color = lesstif_parse_color (Settings.BackgroundColor);
    }
  else
    {
      for (i = 0; i < MAX_LAYER; i++)
	fg_colors[i] = lesstif_parse_color (Settings.LayerColor[i]);
      fg_colors[LB_SILK] = lesstif_parse_color (Settings.ElementColor);
      fg_colors[LB_RATS] = lesstif_parse_color (Settings.RatColor);
      fg_colors[LB_PINS] = lesstif_parse_color (Settings.PinColor);
      fg_colors[LB_VIAS] = lesstif_parse_color (Settings.ViaColor);
      fg_colors[LB_BACK] =
	lesstif_parse_color (Settings.InvisibleObjectsColor);
      fg_colors[LB_MASK] = lesstif_parse_color (Settings.MaskColor);
      bg_color = lesstif_parse_color (Settings.BackgroundColor);
    }

  if (PCB->RatDraw)
    current_layer = LB_RATS;
  else if (PCB->SilkActive)
    current_layer = LB_SILK;
  else
    current_layer = LayerStack[0];

  for (l = 0; l < num_layer_buttons; l++)
    {
      LayerButtons *lb = layer_button_list + l;
      for (i = 0; i < (lb->is_pick ? LB_NUMPICK : LB_NUM); i++)
	{
	  switch (i)
	    {
	    case LB_SILK:
	      set = PCB->ElementOn;
	      break;
	    case LB_RATS:
	      set = PCB->RatOn;
	      break;
	    case LB_PINS:
	      set = PCB->PinOn;
	      break;
	    case LB_VIAS:
	      set = PCB->ViaOn;
	      break;
	    case LB_BACK:
	      set = PCB->InvisibleObjectsOn;
	      break;
	    case LB_MASK:
	      set = TEST_FLAG (SHOWMASKFLAG, PCB);
	      break;
	    default:		/* layers */
	      set = PCB->Data->Layer[i].On;
	      break;
	    }

	  n = 0;
	  if (i < MAX_LAYER && PCB->Data->Layer[i].Name)
	    {
	      XmString s = XmStringCreateLocalized (PCB->Data->Layer[i].Name);
	      stdarg (XmNlabelString, s);
	    }
	  if (!lb->is_pick)
	    {
	      if (set)
		{
		  stdarg (XmNforeground, bg_color);
		  stdarg (XmNbackground, fg_colors[i]);
		}
	      else
		{
		  stdarg (XmNforeground, fg_colors[i]);
		  stdarg (XmNbackground, bg_color);
		}
	      stdarg (XmNset, set);
	    }
	  else
	    {
	      stdarg (XmNforeground, bg_color);
	      stdarg (XmNbackground, fg_colors[i]);
	      stdarg (XmNset, current_layer == i ? True : False);
	    }
	  XtSetValues (lb->w[i], args, n);

	  if (i >= max_copper_layer && i < MAX_LAYER)
	    XtUnmanageChild(lb->w[i]);
	  else
	    XtManageChild(lb->w[i]);
	}
    }
  if (lesstif_m_layer)
    {
      switch (current_layer)
	{
	case LB_RATS:
	  name = "Rats";
	  break;
	case LB_SILK:
	  name = "Silk";
	  break;
	default:
	  name = PCB->Data->Layer[current_layer].Name;
	  break;
	}
      n = 0;
      stdarg (XmNbackground, fg_colors[current_layer]);
      stdarg (XmNforeground, bg_color);
      stdarg (XmNlabelString, XmStringCreateLocalized (name));
      XtSetValues (lesstif_m_layer, args, n);
    }

  lesstif_update_layer_groups ();

  return 0;
}