00001 #include "../../include/ListaWidget/TListaW.h"
00002 TListaW::TListaW()
00003 {
00004
00005 first=0;
00006 last=0;
00007
00008 numeroelementi=0;
00009 }
00010
00011 TListaW::~TListaW(){
00012
00013
00014 while (numeroelementi)
00015 RimuoviNodo(1);
00016
00017
00018
00019 }
00020
00021 void TListaW::NuovoNodo(wxWindow* object,int idx)
00022 {
00023 if(first==0)
00024 {
00025 first=(pr*)malloc(sizeof(pr));
00026 last=first;
00027 } else
00028 {
00029 last->next=(pr*)malloc(sizeof(pr));
00030 last=last->next;
00031 }
00032
00033 last->next=0;
00034
00035 last->oggetto=object;
00036 last->id=idx;
00037 numeroelementi++;
00038
00039 OrdinaElementi();
00040
00041
00042 }
00043
00044
00045 void TListaW::RimuoviNodo(int posizione)
00046 { pr* ptrposizione;
00047 pr* ptrtemp;
00048 int i=1;
00049 ptrposizione=first;
00050
00051 if(posizione==1)
00052 {
00053 first=first->next;
00054 numeroelementi--;
00055
00056 free(ptrposizione);
00057 }else
00058 {
00059 while((i<=posizione-2)&&(ptrposizione->next!=0))
00060 {
00061 ptrposizione=ptrposizione->next;
00062 i++;
00063 }
00064
00065 if(ptrposizione->next!=0)
00066 {
00067 ptrtemp=ptrposizione->next;
00068
00069 ptrposizione->next=ptrtemp->next;
00070 free (ptrtemp);
00071
00072 if(ptrposizione->next==0)
00073 last=ptrposizione;
00074
00075 numeroelementi--;
00076 }
00077 }
00078 }
00079
00080
00081
00082 wxWindow* TListaW::TrovaSuccessivo(int id)
00083 {
00084 int posizione=TrovaPosizione(id);
00085 int i;
00086 pr* ptrtemp=first;
00087 if(posizione+1<=numeroelementi)
00088 { for(i=1;i<posizione+1;i++)
00089 ptrtemp=ptrtemp->next;
00090 }
00091 return(ptrtemp->oggetto);
00092 }
00093
00094
00095
00096 int TListaW::TrovaPosizione(int idx)
00097 {pr* buffer;
00098 int i=1;
00099
00100 buffer=first;
00101
00102 while(buffer)
00103 {
00104 if(buffer->id==idx)
00105 return(i);
00106
00107 i++;
00108 buffer=buffer->next;
00109 }
00110 return(0);
00111 }
00112
00113
00114
00115 void TListaW::OrdinaElementi()
00116 {
00117 pr* ptrposizione;
00118 int i;
00119 int flag;
00120 wxWindow* pannello;
00121 int id;
00122
00123 do
00124 { flag=1;
00125 i=1;
00126 ptrposizione=first;
00127 while((i<numeroelementi)&&(flag==1))
00128 {
00129
00130 if((ptrposizione->oggetto->GetPosition().y>ptrposizione->next->oggetto->GetPosition().y)||
00131 ((ptrposizione->oggetto->GetPosition().y==ptrposizione->next->oggetto->GetPosition().y)&&
00132 (ptrposizione->oggetto->GetPosition().x>ptrposizione->next->oggetto->GetPosition().x) ))
00133 {
00134
00135 pannello=(ptrposizione->next)->oggetto;
00136 id=(ptrposizione->next)->id;
00137 (ptrposizione->next)->oggetto=ptrposizione->oggetto;
00138 (ptrposizione->next)->id=ptrposizione->id;
00139 ptrposizione->id=id;
00140 ptrposizione->oggetto=pannello;
00141 flag=0;
00142 }
00143 i++;
00144 ptrposizione=ptrposizione->next;
00145 }
00146 }while(flag==0);
00147
00148
00149 }
00150 bool TListaW::ControllaPosizione(wxPoint posizionereale, wxWindow** pannello)
00151 { bool flag=true;
00152 int i=1;
00153 pr* elementolista=first;
00154
00155 while((i<=numeroelementi)&&(flag==true))
00156 { if ((posizionereale.y>=(elementolista->oggetto)->GetPosition().y)&&(posizionereale.y<=((elementolista->oggetto)->GetPosition().y+(elementolista->oggetto)->GetSize().y)))
00157 {if((posizionereale.x>=(elementolista->oggetto)->GetPosition().x)&&(posizionereale.x<=((elementolista->oggetto)->GetPosition().x+(elementolista->oggetto)->GetSize().x)))
00158 { flag=false;
00159 *pannello=elementolista->oggetto;
00160 }
00161 }
00162 elementolista=elementolista->next;
00163 i++;
00164 }
00165 return(flag);
00166 }
00167
00168 wxWindow* TListaW::ExtractObject(int position)
00169 { int i;
00170 pr* ptrposition;
00171 ptrposition=first;
00172 for (i=0;i<position-1;i++)
00173 {
00174 ptrposition=ptrposition->next;
00175 }
00176
00177 return(ptrposition->oggetto);
00178 }
00179