// 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; }
// 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; }