MatOCAD Logo

Main Page | Class Hierarchy | Class List | Directories | File List | Class Members | File Members | Related Pages

TLista.cpp

Go to the documentation of this file.
00001 #include "../../../include/StrutturaGrafici/ListaFx/TLista.h"
00002 #include <wx/msgdlg.h>
00003 TLista::~TLista()
00004 {  //Svuoto la lista delle funzioni
00005 
00006   while (nelements>0)
00007    RemoveNode(1);
00008 
00009 }
00010  TLista::TLista()
00011  { //Inizializzo il puntatore di testa e di coda della lista
00012 
00013    first=0;
00014    last=0;
00015   //Inizializzo il numero di elementi della lista
00016    nelements=0;
00017  }
00018 
00019 
00020 
00021  void TLista::NewNode(wxColour color,char* fx,rif* pointstructure,int drawflag,int width)
00022  { //Se la lista è vuota
00023 
00024    if(first==0)
00025    { //Alloco il primo elemento impostando ptrfine=ptrinizio
00026       first=(pr*)malloc(sizeof(pr));
00027       last=first;
00028    } else
00029    { //Aggiungo un nuovo elemento
00030       last->next=(pr*)malloc(sizeof(pr));
00031       last=last->next;
00032    }
00033      //Il puntatore al successivo elemento dell'ultimo elemento all'interno della lista =NULL
00034       last->next=0;
00035      //Carico i dati nel nodo
00036 
00037      last->pointstructure=pointstructure;
00038      strcpy(last->fx,fx);
00039 
00040       last->drawflag=drawflag;
00041       last->width=width;
00042 
00043      (last->colore).blue=color.Blue();
00044      (last->colore).green=color.Green();
00045      (last->colore).red=color.Red();
00046      nelements++;
00047  }
00048 
00049 
00050  void TLista::RemoveNode(int position)
00051  {  pr* ptrposition;
00052     pr* ptrtemp;
00053     int i=1;
00054     ptrposition=first;
00055     TParserScomponi EliminaStruttura;
00056  if(position==1)
00057   { //Se elimino il primo elemento ptrinizio punta all'elemento successivo della lista
00058     first=first->next;
00059     nelements--;
00060 
00061   //Libero la memoria occupata dalla struttura dati
00062     EliminaStruttura.Libera_Memoria(ptrposition->pointstructure);
00063 
00064   //Elimino l'elemento dalla lista
00065     free(ptrposition);
00066   }else
00067   { //.. altrimenti mi posiziono sull'elemento precedente a quello da cancellare
00068     while((i<=position-2)&&(ptrposition->next!=0))
00069      {
00070        ptrposition=ptrposition->next;
00071        i++;
00072      }
00073 
00074      if(ptrposition->next!=0)
00075      { //e  lo cancello collegando prima l'elemento precedente con l'elemento successivo dell'elemento da canc
00076        ptrtemp=ptrposition->next;
00077 
00078        ptrposition->next=ptrtemp->next;
00079        //Libero la memoria occupata dalla struttura dati
00080        EliminaStruttura.Libera_Memoria(ptrtemp->pointstructure);
00081        free (ptrtemp);
00082       //Se ho eliminato l'ultimo elemento riposiziono
00083       if(ptrposition->next==0)
00084         last=ptrposition;
00085 
00086        nelements--;
00087      }
00088    }
00089  }
00090 
00091 
00092  color TLista::ExtractColor(int position)
00093  {    int i;
00094       pr* ptrposition;
00095       ptrposition=first;
00096   for (i=0;i<position-1;i++)
00097     {
00098        ptrposition=ptrposition->next;
00099     }
00100     return(ptrposition->colore);
00101 
00102 
00103  }
00104 
00105 
00106 char* TLista::ExtractFunction(int position)
00107  {    int i;
00108       pr* ptrposition;
00109       ptrposition=first;
00110   for (i=0;i<position-1;i++)
00111     {
00112        ptrposition=ptrposition->next;
00113     }
00114     return(ptrposition->fx);
00115 
00116 
00117  }
00118 rif* TLista::ExtractStructure(int position)
00119  {    int i;
00120       pr* ptrposition;
00121       ptrposition=first;
00122   for (i=0;i<position-1;i++)
00123     {
00124        ptrposition=ptrposition->next;
00125     }
00126 
00127     return(ptrposition->pointstructure);
00128  }
00129 
00130  int TLista::ExtractDrawFlag(int position)
00131  {
00132      int i;
00133       pr* ptrposition;
00134       ptrposition=first;
00135   for (i=0;i<position-1;i++)
00136     {
00137        ptrposition=ptrposition->next;
00138     }
00139     return(ptrposition->drawflag);
00140 
00141  }
00142   int  TLista::ExtractWidth(int position)
00143      {
00144      int i;
00145       pr* ptrposition;
00146       ptrposition=first;
00147     for (i=0;i<position-1;i++)
00148     {
00149        ptrposition=ptrposition->next;
00150     }
00151     return(ptrposition->width);
00152 
00153 
00154      }
00155 void TLista::ModifyNode(int position,wxColour color,char* fx,rif* _pointstructure,int drawflag,int width)
00156 {
00157       int i;
00158       pr*  ptrposition= first;
00159 
00160 
00161 
00162       TParserScomponi EliminaStruttura;
00163   //Mi posiziono sulla funzione da modificare
00164   for (i=0;i<position-1;i++)
00165     {
00166        ptrposition=ptrposition->next;
00167    }
00168   //Modifico i parametri della funzione
00169 
00170  // ptrposition->fxcolor=color;
00171  (ptrposition->colore).blue=color.Blue();
00172  (ptrposition->colore).green=color.Green();
00173  (ptrposition->colore).red=color.Red();
00174 
00175 
00176  //Se è stata modificata la strutturadati, prima di aggiornarla, elimino la precedente
00177   if(strcmp(fx,ptrposition->fx)!=0)
00178    {
00179 
00180     EliminaStruttura.Libera_Memoria(ptrposition->pointstructure);
00181     ptrposition->pointstructure=_pointstructure;
00182    }
00183    strcpy(ptrposition->fx,fx);
00184    ptrposition->drawflag=drawflag;
00185    ptrposition->width=width;
00186 
00187 }

 

SourceForge Logo