示例#1
0
void dragTarget::recursiveAppend ( QTreeWidgetItem *source, QTreeWidgetItem *destination )
{
  QTreeWidgetItem *tmp = destination;
  for ( int i = 0; i < source -> childCount(); i++ )
  {
    tmp = ramifica ( source ->child ( i ) -> text ( 1 ) + source ->child ( i ) -> text ( 0 ) + "!*mimetosend:" + source ->child ( i ) -> text ( 2 ), destination );
    recursiveAppend ( source -> child ( i ), tmp );
  }
}
示例#2
0
/*
 *Função Main
 */
int main(int argc, char const *argv[])
{
	// declara uma Pilha arvore
	Pilha* arvore;
	//faz arvore receber a entrada do usuário
	arvore = entrada_dados();		
	// declara e atribui um valor para a variável que contará o número de passos
	int nivel=0;

	//Laço de repetição que controlá quando o algoritimo achou o resultado
	do{
		//chama a função para criar uma arvore de possibilidades
		arvore = ramifica(arvore,&nivel);
	}while(arvore != NULL);	
	//imprime o resultado para o usuário
	printf("Número de passos %d\n",nivel);
	//fim do programa	
	return 0;
}
示例#3
0
void dragTarget::dropEvent ( QDropEvent *event )
{
  //-------ripristiniamo a 0 gli indicatori--------------//
  puts("dropEvent deleting indicator");
  if(indicatorToRestore != NULL)
  {
    delete indicatorToRestore;
    indicatorToRestore = NULL;
  } //cancelliamo l'indicatore
  //--------------------------------------------------------//
  puts("indicatore cancellato");
  hideIndicator();
  puts("nascondo indicatore");
  if ( subLevel == false )  
  {
  //evito la duplicazione di uno stesso elemento sotto uno stesso ramo
    puts("inizio a ramificare");
    QTreeWidgetItem *ultimo;
    if(event -> mimeData()->hasFormat("aku/newarchive"))
      ultimo = ramifica ( QString().fromAscii ( event -> mimeData() -> data ( "aku/newarchive" ) ),this); 
    else
      ultimo = ramifica ( QString().fromAscii ( event -> mimeData() -> data ( "aku/newarchive-fromHere" ) ),this);
    bool allow = false;
    for ( int i = 0; i < topLevelItemCount(); i++ )
    {
      if ( topLevelItem ( i ) -> text ( 1 ) + topLevelItem ( i ) -> text ( 0 ) == ultimo -> text ( 1 ) + ultimo -> text ( 0 ) && topLevelItem ( i ) != ultimo )   //se esiste già nego la possibilità di allocare l'elemento
      {
        delete ultimo;
        allow = false;
        break;
      }
      else allow = true;
    }
    if ( allow == true )
    {
      //tramite la funzione retrieveChildren appendiamo anche tutti i figli della directory
      if(event -> mimeData() -> hasFormat("aku/newarchive-fromHere"))
      {
        //se selectedItems e' diverso da 0 sicuramente stiamo trascinando un elemento di questa stessa lista, quindi devo procedere al recupero di tutti i suoi figli prima di eliminarlo
        for(int i = 0; i < currentItem -> childCount(); i++)
        {
          //mi tocca simulare un mime per poter trascinare anche i figli
          QTreeWidgetItem *item = ramifica ( currentItem-> child ( i ) -> text ( 1 ) + currentItem -> child ( i ) -> text ( 0 ) + "!*mimetosend:" + currentItem -> child ( i ) -> text ( 2 ), ultimo);
          recursiveAppend ( currentItem -> child ( i ), item ); //passo come destinazione l'item appena creato
        }
        delete currentItem;
        event -> acceptProposedAction();
      }
      else retrieveChildren ( ultimo ); //altrimenti recuperiamo i figli dalle directory, perchè significa che il trascinamento avviene dall'esterno
      event -> acceptProposedAction();
    }
    else
    {
      event -> ignore();
      return;
    }

  }
  else
  {
    //succede esattamente la stessa cosa di quello precedente, solo che con la ramificazione
    QList<QTreeWidgetItem*> selectedItems = this -> selectedItems();
    QTreeWidgetItem *ultimo;
    if(event -> mimeData()->hasFormat("aku/newarchive"))
      ultimo = ramifica ( QString().fromAscii ( event -> mimeData() -> data ( "aku/newarchive" ) ), padre);
    else ultimo = ramifica ( QString().fromAscii ( event -> mimeData() -> data ( "aku/newarchive-fromHere" ) ), padre);
    bool allow = false;
    for ( int i = 0; i < padre -> childCount(); i++ )
    {
      if ( padre -> child ( i ) -> text ( 1 ) + padre -> child ( i ) -> text ( 0 ) == ultimo -> text ( 1 ) + ultimo -> text ( 0 ) && padre -> child ( i ) != ultimo )   //se esiste già
      {
        delete ultimo;
        allow = false;
        break;
      }
      else allow = true;
    }
    if ( allow == true )
    {
      padre -> setExpanded ( true );
      if ( selectedItems.size() != 0 )   //se stiamo trascinando un elemento della stessa lista ci riportiamo i figli
      {
        for ( int i = 0; i < selectedItems[0] -> childCount(); i++ )
        {
          //mi tocca simulare un mime per poter trascinare anche i figli
          QTreeWidgetItem *item = ramifica ( selectedItems[0] -> child ( i ) -> text ( 1 ) + selectedItems[0] -> child ( i ) -> text ( 0 ) + "!*mimetosend:" + selectedItems[0] -> child ( i ) -> text ( 2 ), ultimo );
          recursiveAppend ( selectedItems[0] -> child ( i ), item );
        }
        delete selectedItems[0];
      }
      else retrieveChildren ( ultimo ); //altrimenti recuperiamo i figli dalle directory
      event -> acceptProposedAction();
    }
    else
    {
      event -> ignore();
      return;
    }

  }
}