示例#1
0
// Logic checks to see if we are ready to move onto next page
bool wizardDisk::validatePage()
{

  bool found;

  // Generate suggested disk layout and show disk tree
  if ( prevID == Page_BasicDisk && currentId() == Page_Mounts) {
    generateDiskLayout();
    populateDiskTree();
  }

  // Generate suggested disk layout and show disk tree
  if ( prevID == Page_Enc && currentId() == Page_Mounts) {
    generateDiskLayout();
    populateDiskTree();
  }

  // Show the other disks available
  if ( prevID == Page_BasicDisk && currentId() == Page_ZFS)
     populateZFSDisks();

  // Show the other disks available
  if ( prevID == Page_ZFS && currentId() == Page_ZFS2)
     populateZFSDisks2();

  // Basic mode, generate a disk layout and show summary
  if ( prevID == Page_BasicDisk && currentId() == Page_Confirmation) {
    generateDiskLayout();
    generateConfirmationText();
  }

  // Create the final disk layout from user options
  if ( prevID == Page_Mounts && currentId() == Page_Confirmation) {
    generateCustomDiskLayout();
    generateConfirmationText();
  }

  // Create the final disk layout from user options
  if ( prevID == Page_Expert && currentId() == Page_Confirmation) {
    generateConfirmationText();
  }

  // Reset the prevID
  prevID = currentId();

  switch (currentId()) {
     case Page_Intro:
         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_BasicDisk:
         if ( ! radioAdvanced->isChecked() ) {
           radioGPT->setChecked(true);
           groupScheme->setVisible(false);
           checkForce4K->setVisible(false);
           checkForce4K->setChecked(false);
         } else {
           if ( comboPartition->currentIndex() == 0) {
             groupScheme->setVisible(true);
           } else {
             groupScheme->setVisible(false);
           }
           checkForce4K->setVisible(true);
         }

         // Doing a Advanced install
         if ( radioAdvanced->isChecked() && groupZFSPool->isChecked() )
         {
            if ( lineZpoolName->text().isEmpty() ) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }
            if ( lineZpoolName->text() == "root" ) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }
            if ( lineZpoolName->text().contains(" ") ) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }
            QRegExp *re = new QRegExp("^[-'a-zA-Z][a-zA-Z0-9]*$");
            if (! re->exactMatch(lineZpoolName->text()) ) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }

         }

         // If the select partition is just too small, we can stop here
         if ( ! checkDiskSpace() ) {
           button(QWizard::NextButton)->setEnabled(false);
           return false;
         }

         // if we get this far, all the fields are filled in
         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_ZFS:
         // Check if we have valid ZFS disk options specified
         if ( ! groupZFSOpts->isChecked() ) {
           button(QWizard::NextButton)->setEnabled(true);
           return true;
         }
         // Need at least one other disk for mirroring
         if ( comboZFSMode->currentText() == "mirror" ) {
            labelZFSMsg->setText(tr("Please select at least 1 other drive for mirroring"));
            for ( int i = 0; i < listZFSDisks->count(); ++i )
            {
                if ( listZFSDisks->item(i)->checkState() == Qt::Checked ) {
                   button(QWizard::NextButton)->setEnabled(true);
                   return true;
                }
            }
         }
         if ( comboZFSMode->currentText() == "raidz1" ) {
            labelZFSMsg->setText(tr("Please select 2 or 4 additional drives for raidz1"));
            int numChecked = 0;
            for ( int i = 0; i < listZFSDisks->count(); ++i )
                if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
                   numChecked++;
            if ( numChecked == 2 || numChecked == 4 ) {
              button(QWizard::NextButton)->setEnabled(true);
              return true;
            }
         }
         if ( comboZFSMode->currentText() == "raidz2" ) {
            labelZFSMsg->setText(tr("Please select 3, 5, or 9 additional drives for raidz2"));
            int numChecked = 0;
            for ( int i = 0; i < listZFSDisks->count(); ++i )
                if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
                   numChecked++;
            if ( numChecked == 3 || numChecked == 5 || numChecked == 9 ) {
              button(QWizard::NextButton)->setEnabled(true);
              return true;
            }
         }
         if ( comboZFSMode->currentText() == "raidz3" ) {
            labelZFSMsg->setText(tr("Please select 4, 6, or 10 additional drives for raidz3"));
            int numChecked = 0;
            for ( int i = 0; i < listZFSDisks->count(); ++i )
                if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
                   numChecked++;
            if ( numChecked == 4 || numChecked == 6 || numChecked == 10 ) {
              button(QWizard::NextButton)->setEnabled(true);
              return true;
            }
         }
         if ( comboZFSMode->currentText() == "stripe" ) {
            labelZFSMsg->setText(tr("Please select the additional disks to stripe"));
            int numChecked = 0;
            for ( int i = 0; i < listZFSDisks->count(); ++i )
                if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
                   numChecked++;
            if ( numChecked >= 1 ) {
              button(QWizard::NextButton)->setEnabled(true);
              return true;
            }
         }


         // Disable the next button until we get a working config
         button(QWizard::NextButton)->setEnabled(false);
         return false;
     case Page_ZFS2:
         // Not using log / cache?
         if ( !groupZFSCache->isChecked() && ! groupZFSLog->isChecked() )
         {
           button(QWizard::NextButton)->setEnabled(true);
           return true;
         }
         // Using both? See if we have any duplicates
         if ( groupZFSCache->isChecked() && groupZFSLog->isChecked() )
         {
            // Check for any matches
            for ( int i = 0; i < listZFSCache->count(); ++i ) {
                if ( listZFSCache->item(i)->checkState() == Qt::Checked )
                  for ( int z = 0; z < listZFSLog->count(); ++z ) {
                    if ( listZFSLog->item(z)->checkState() == Qt::Checked )
                       if ( listZFSLog->item(z)->text() == listZFSCache->item(i)->text() ) {
                          button(QWizard::NextButton)->setEnabled(false);
                          return false;
                       }
                  }
            }
         }

         // Check that we have at least one item checked
         found = false;
         if ( groupZFSCache->isChecked() )
         {
            for ( int i = 0; i < listZFSCache->count(); ++i )
                if ( listZFSCache->item(i)->checkState() == Qt::Checked )
                   found = true;
            if ( found == false) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }
         }
         if ( groupZFSLog->isChecked() )
         {
            for ( int i = 0; i < listZFSLog->count(); ++i )
                if ( listZFSLog->item(i)->checkState() == Qt::Checked )
                   found = true;
            if ( found == false) {
              button(QWizard::NextButton)->setEnabled(false);
              return false;
            }
         }

         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_Enc:
         if ( ! groupEncrypt->isChecked() ) {
           button(QWizard::NextButton)->setEnabled(true);
           return true;
         }
         if ( lineEncPass->text().isEmpty() || lineEncPass->text() != lineEncPass2->text() ) {
           button(QWizard::NextButton)->setEnabled(false);
           return false;
         }

         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_Confirmation:
         button(QWizard::FinishButton)->setEnabled(true);
         return true;
     default:
         button(QWizard::NextButton)->setEnabled(true);
         return true;
  }

  return true;
}
示例#2
0
// Logic checks to see if we are ready to move onto next page
bool wizardDisk::validatePage()
{
  // Generate suggested disk layout and show disk tree
  if ( prevID == Page_BasicDisk && currentId() == Page_Mounts) {
    generateDiskLayout();
    populateDiskTree();
  }

  // Generate suggested disk layout and show disk tree
  if ( prevID == Page_ZFS && currentId() == Page_Mounts) {
    generateDiskLayout();
    populateDiskTree();
  } 

  // Show the other disks available
  if ( prevID == Page_BasicDisk && currentId() == Page_ZFS)
     populateZFSDisks();

  // Basic mode, generate a disk layout and show summary
  if ( prevID == Page_BasicDisk && currentId() == Page_Confirmation) {
    generateDiskLayout();
    generateConfirmationText();
  }

  // Create the final disk layout from user options
  if ( prevID == Page_Mounts && currentId() == Page_Confirmation) {
    generateCustomDiskLayout();
    generateConfirmationText();
  }

  // Create the final disk layout from user options
  if ( prevID == Page_Expert && currentId() == Page_Confirmation) {
    generateConfirmationText();
  }
  
  
  // Reset the prevID
  prevID = currentId();

  switch (currentId()) {
     case Page_Intro:
         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_BasicDisk:
	 if ( comboPartition->currentIndex() == 0  && radioAdvanced->isChecked())
	   checkGPT->setVisible(true);
	 else
	   checkGPT->setVisible(false);

         // Comment out this disk space check
	 // We will warn the user right before install if the selected
	 // Disk / partition looks too small
	 //if ( ! checkDiskSpace() ) {
         //  button(QWizard::NextButton)->setEnabled(false);
	 //  return false;
	 //}
	
         // if we get this far, all the fields are filled in
         button(QWizard::NextButton)->setEnabled(true);
         return true;
     case Page_ZFS:
         // Check if we have valid ZFS disk options specified
	 if ( ! groupZFSOpts->isChecked() ) {
           button(QWizard::NextButton)->setEnabled(true);
	   return true;
	 }
         // Need at least one other disk for mirroring
	 if ( comboZFSMode->currentText() == "mirror" ) {
            labelZFSMsg->setText(tr("Please select at least 1 other drive for mirroring"));
	    for ( int i = 0; i < listZFSDisks->count(); ++i )
            {
		if ( listZFSDisks->item(i)->checkState() == Qt::Checked ) {
                   button(QWizard::NextButton)->setEnabled(true);
	           return true;
                }
            }
         }
	 if ( comboZFSMode->currentText() == "raidz1" ) {
            labelZFSMsg->setText(tr("Please select 2 or 4 additional drives for raidz1"));
	    int numChecked = 0;
	    for ( int i = 0; i < listZFSDisks->count(); ++i )
		if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
		   numChecked++;
            if ( numChecked == 2 || numChecked == 4 ) {
              button(QWizard::NextButton)->setEnabled(true);
	      return true;
            }
         }
	 if ( comboZFSMode->currentText() == "raidz2" ) {
            labelZFSMsg->setText(tr("Please select 3, 5, or 9 additional drives for raidz2"));
	    int numChecked = 0;
	    for ( int i = 0; i < listZFSDisks->count(); ++i )
		if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
		   numChecked++;
            if ( numChecked == 3 || numChecked == 5 || numChecked == 9 ) {
              button(QWizard::NextButton)->setEnabled(true);
	      return true;
            }
         }
	 if ( comboZFSMode->currentText() == "raidz3" ) {
            labelZFSMsg->setText(tr("Please select 4, 6, or 10 additional drives for raidz3"));
	    int numChecked = 0;
	    for ( int i = 0; i < listZFSDisks->count(); ++i )
		if ( listZFSDisks->item(i)->checkState() == Qt::Checked )
		   numChecked++;
            if ( numChecked == 4 || numChecked == 6 || numChecked == 10 ) {
              button(QWizard::NextButton)->setEnabled(true);
	      return true;
            }
         }

         // Disable the next button until we get a working config
         button(QWizard::NextButton)->setEnabled(false);
         return false;
     case Page_Confirmation:
         button(QWizard::FinishButton)->setEnabled(true);
         return true;
     default:
         button(QWizard::NextButton)->setEnabled(true);
         return true;
  }

  return true;
}