Esempio n. 1
0
static gboolean properties (QCADDesignObject *obj, GtkWidget *parent)
#endif /* UNDO_REDO */
  {
  static PROPERTIES dialog = {NULL} ;
  gboolean bRet = FALSE ;

  if (!IS_QCAD_LABEL (obj)) return FALSE ;

  if (NULL == dialog.dlg)
    create_properties_dialog (&dialog) ;

  gtk_window_set_transient_for (GTK_WINDOW (dialog.dlg), GTK_WINDOW (parent)) ;
  gtk_entry_set_text (GTK_ENTRY (dialog.txtLabel), QCAD_LABEL (obj)->psz) ;
  gtk_widget_grab_focus (dialog.txtLabel) ;

  if ((bRet = (GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (dialog.dlg)))))
    {
    if (NULL != QCAD_LABEL (obj)->psz)
      g_free (QCAD_LABEL (obj)->psz) ;
    QCAD_LABEL (obj)->psz = gtk_editable_get_chars (GTK_EDITABLE (dialog.txtLabel), 0, -1) ;
    QCAD_LABEL (obj)->bNeedsEPMDraw = TRUE ;
    }
#ifdef UNDO_REDO
  if (NULL != pentry)
    (*pentry) = NULL ;
#endif /* def UNDO_REDO */
  gtk_widget_hide (dialog.dlg) ;
  return bRet ;
  }
Esempio n. 2
0
static gboolean qcad_layer_do_container_add (QCADDOContainer *container, QCADDesignObject *obj)
  {
  GList *lstIter = NULL ;
  OBJECT_TRACK_STRUCT *ots = NULL ;
  QCADLayer *layer = NULL ;
  QCADDesignObject *obj_child = NULL ;

  if (!QCAD_IS_LAYER (container)) return FALSE ;
  layer = QCAD_LAYER (container) ;
  if (NULL == obj) return FALSE ;
  ots = g_object_get_data (G_OBJECT (obj), "ots") ;

  if (NULL != ots)
    {
    if (NULL != ots->parent)
      if (QCAD_IS_DO_CONTAINER (ots->parent))
        return qcad_do_container_add (QCAD_DO_CONTAINER (ots->parent), obj) ;

    // If the layers don't match, we need to move the object to this layer
    if (ots->layer == layer)
      {
      // If we're re-adding the object to its layer, then we merely simulate its (de)selection
      if (NULL != ots->layer)
        {
/*        DBG_REFS (fprintf (stderr, "qcad_layer_add_object:refin-inf object 0x%08X so as to re-add to layer\n", (int)obj)) ;*/
        g_object_ref (G_OBJECT (obj)) ;
        if (NULL != ots->llDeSel)
          ots->llDeSel->data = obj ;
/*        qcad_design_object_selected (obj, ots) ;*/
        return TRUE ;
        }
      }
    }

  // Rules for cells
  if (QCAD_IS_CELL (obj))
    {
    if (layer->type != LAYER_TYPE_CELLS)
      return FALSE ;
/*    else*/
    // If the object is selected, we don't care that it overlaps, because it's floating
/*    if (!(obj->bSelected))*/
/*      {*/
/*#ifdef ALLOW_UNSERIALIZE_OVERLAP*/
/*      if (!(layer->bAllowOverlap))*/
//#endif  def ALLOW_UNSERIALIZE_OVERLAP 
/*      for (lstIter = layer->lstObjs ; lstIter != NULL ; lstIter = lstIter->next)*/
/*        if (qcad_design_object_overlaps (obj, QCAD_DESIGN_OBJECT (lstIter->data)))*/
/*          return FALSE ;*/
/*      }*/
    }
  else
  if (QCAD_IS_SUBSTRATE (obj))
    {
    if (layer->type != LAYER_TYPE_SUBSTRATE)
      return FALSE ;
/*    else*/
    // If the object is selected, we don't care that it overlaps, because it's floating
/*    if (!(obj->bSelected))*/
/*      {*/
/*      for (lstIter = layer->lstObjs ; lstIter != NULL ; lstIter = lstIter->next)*/
/*        if (qcad_design_object_overlaps (obj, QCAD_DESIGN_OBJECT (lstIter->data)))*/
/*          return FALSE ;*/
/*      }*/
    }
  else
  if (IS_QCAD_LABEL (obj) &&
      (!(LAYER_TYPE_DRAWING == layer->type && obj->bounding_box.cxWorld > 10 && obj->bounding_box.cyWorld > 10)))
    return FALSE ;

  qcad_layer_track_new_object (layer, obj, layer->lstObjs = g_list_prepend (layer->lstObjs, obj), NULL) ;
  if (QCAD_IS_COMPOUND_DO (obj))
    {
    g_signal_connect (G_OBJECT (obj), "added", (GCallback)qcad_layer_compound_do_added, layer) ;
    g_signal_connect (G_OBJECT (obj), "removed", (GCallback)qcad_layer_compound_do_removed, layer) ;
    for (obj_child = qcad_compound_do_first (QCAD_COMPOUND_DO (obj)) ; ; obj_child = qcad_compound_do_next (QCAD_COMPOUND_DO (obj)))
      {
      if (NULL != obj_child)
        qcad_layer_track_new_object (layer, obj_child, NULL, obj) ;
      if (qcad_compound_do_last (QCAD_COMPOUND_DO (obj))) break ;
      }
    }

  return TRUE ;
  }