Пример #1
0
/* ---------------------------------------------------------------------------
 * toggle selection of pin
 * This SelectPin function was moved to here from the original netlist.c
 * as part of the gui code separation for the Gtk port. SelectPin() is
 * written by and is Copyright (C) 1998, 1999, 2000, 2001 harry eaton
 */
void
SelectPin (LibraryEntryTypePtr entry, bool toggle)
{
  ConnectionType conn;

  if (SeekPad (entry, &conn, false))
    {
      switch (conn.type)
	{
	case PIN_TYPE:
	  {
	    PinTypePtr pin = (PinTypePtr) conn.ptr2;

	    AddObjectToFlagUndoList (PIN_TYPE, conn.ptr1, conn.ptr2,
				     conn.ptr2);
	    if (toggle)
	      {
		TOGGLE_FLAG (SELECTEDFLAG, pin);
		CenterDisplay (pin->X, pin->Y, false);
	      }
	    else
	      SET_FLAG (SELECTEDFLAG, pin);
	    DrawPin (pin, 0);
	    break;
	  }
	case PAD_TYPE:
	  {
	    PadTypePtr pad = (PadTypePtr) conn.ptr2;

	    AddObjectToFlagUndoList (PAD_TYPE, conn.ptr1, conn.ptr2,
				     conn.ptr2);
	    if (toggle)
	      {
		TOGGLE_FLAG (SELECTEDFLAG, pad);
		CenterDisplay (pad->Point1.X, pad->Point1.Y, false);
	      }
	    else
	      SET_FLAG (SELECTEDFLAG, pad);
	    DrawPad (pad, 0);
	    break;
	  }
	}
    }
}
Пример #2
0
static void
row_activated_cb (GtkTreeView *view, GtkTreePath *path,
                  GtkTreeViewColumn *column, gpointer user_data)
{
    GtkTreeModel *model = gtk_tree_view_get_model (view);
    GtkTreeIter iter;
    GhidDrcViolation *violation;

    gtk_tree_model_get_iter (model, &iter, path);

    gtk_tree_model_get (model, &iter, DRC_VIOLATION_OBJ_COL, &violation, -1);

    if (violation == NULL)
        return;

    CenterDisplay (violation->x_coord, violation->y_coord);
}
Пример #3
0
static void
selection_changed_cb (GtkTreeSelection *selection, gpointer user_data)
{
  GtkTreeModel *model;
  GtkTreeIter iter;
  GhidDrcViolation *violation;
  int i;

  if (!gtk_tree_selection_get_selected (selection, &model, &iter))
    {
      if (ClearFlagOnAllObjects (true, FOUNDFLAG))
        {
          IncrementUndoSerialNumber ();
          Draw ();
        }
      return;
    }

  /* Check the selected node has children, if so; return. */
  if (gtk_tree_model_iter_has_child (model, &iter))
    return;

  gtk_tree_model_get (model, &iter, DRC_VIOLATION_OBJ_COL, &violation, -1);

  ClearFlagOnAllObjects (true, FOUNDFLAG);

  if (violation == NULL)
    return;

  /* Flag the objects listed against this DRC violation */
  for (i = 0; i < violation->object_count; i++)
    {
      int object_id = violation->object_id_list[i];
      int object_type = violation->object_type_list[i];
      int found_type;
      void *ptr1, *ptr2, *ptr3;

      found_type = SearchObjectByID (PCB->Data, &ptr1, &ptr2, &ptr3,
				     object_id, object_type);
      if (found_type == NO_TYPE)
	{
	  Message (_("Object ID %i identified during DRC was not found. Stale DRC window?\n"),
		   object_id);
	  continue;
	}
      AddObjectToFlagUndoList (object_type, ptr1, ptr2, ptr3);
      SET_FLAG (FOUNDFLAG, (AnyObjectType *)ptr2);
      switch (violation->object_type_list[i])
	{
	case LINE_TYPE:
	case ARC_TYPE:
	case POLYGON_TYPE:
	  ChangeGroupVisibility (GetLayerNumber (PCB->Data, (LayerType *) ptr1), true, true);
	}
      DrawObject (object_type, ptr1, ptr2);
    }
  SetChangedFlag (true);
  IncrementUndoSerialNumber ();
  Draw();

  CenterDisplay (violation->x_coord, violation->y_coord, false);
}