source: src-qt4/warden-gui/wizardNewJail.cpp @ 1f0939e

9.1-release9.2-releasereleng/10.0releng/10.0.1
Last change on this file since 1f0939e was 1f0939e, checked in by Kris Moore <kris@…>, 12 months ago
  • Initial merge of code from PC-BSD SVN repo for my private (pre-release) hacking
  • Property mode set to 100644
File size: 5.4 KB
Line 
1/****************************************************************************
2** ui.h extension file, included from the uic-generated form implementation.
3**
4** If you want to add, delete, or rename functions or slots, use
5** Qt Designer to update this file, preserving your code.
6**
7** You should not define a constructor or destructor in this file.
8** Instead, write your code in functions called init() and destroy().
9** These will automatically be called by the form's constructor and
10** destructor.
11*****************************************************************************/
12#include "wizardNewJail.h"
13#include "pcbsd-utils.h"
14#include <QDebug>
15#include <QFileDialog>
16
17
18void wizardNewJail::programInit()
19{
20    // Connect our checks
21    connect(lineRoot, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
22    connect(lineRoot2, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
23    connect(lineIP, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
24    connect(lineHost, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
25    connect(lineLinuxScript, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
26    connect(pushLinuxScript, SIGNAL(clicked()), this, SLOT(slotSelectLinuxScript()) );
27    connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotCheckComplete()) );
28}
29
30void wizardNewJail::setHostIPUsed(QStringList uH, QStringList uIP)
31{
32   usedHosts = uH;
33   usedIP = uIP;
34}
35
36void wizardNewJail::accept()
37{
38   
39    emit create(lineIP->text(), lineHost->text(), radioTraditionalJail->isChecked(),
40                lineRoot->text(), checkSystemSource->isChecked(), checkPortsTree->isChecked(),
41                checkAutostart->isChecked(), radioLinuxJail->isChecked(), lineLinuxScript->text());
42    close();
43   
44}
45
46void wizardNewJail::slotClose()
47{
48  close();
49}
50
51// Logic checks to see if we are ready to move onto next page
52bool wizardNewJail::validatePage()
53{
54  QColor red = QColor(255, 78, 78);
55  QColor white = QColor(255, 255, 255);
56  QPalette badPal(red);
57  badPal.setColor(QPalette::Window,red);
58  badPal.setColor(QPalette::WindowText,red);
59  QPalette goodPal(white);
60  goodPal.setColor(QPalette::Window,white);
61  goodPal.setColor(QPalette::WindowText,white);
62  labelMessage->setText(QString());
63
64
65  switch (currentId()) {
66     case Page_IP:
67         // Make sure items are not empty
68         if ( lineIP->text().isEmpty() ) {
69            button(QWizard::NextButton)->setEnabled(false);
70            return false;
71         }
72         if ( lineHost->text().isEmpty() ) {
73            button(QWizard::NextButton)->setEnabled(false);
74            return false;
75         }
76
77         // Check if this IP / Host is already used
78         for (int i = 0; i < usedHosts.size(); ++i)
79            if ( usedHosts.at(i) == lineHost->text() ) {
80               button(QWizard::NextButton)->setEnabled(false);
81               lineHost->setPalette(badPal);
82               labelMessage->setText(tr("Hostname already used!"));
83               return false;
84            }
85         for (int i = 0; i < usedIP.size(); ++i)
86            if ( usedIP.at(i) == lineIP->text() ) {
87               button(QWizard::NextButton)->setEnabled(false);
88               lineIP->setPalette(badPal);
89               labelMessage->setText(tr("IP already used!"));
90               return false;
91            }
92
93         // Check if we have a good IPV4 or IPV6 address
94         if ( ! Utils::validateIPV4(lineIP->text()) && ! Utils::validateIPV6(lineIP->text()) ) {
95           button(QWizard::NextButton)->setEnabled(false);
96           lineIP->setPalette(badPal);
97           labelMessage->setText(tr("Invalid IP address!"));
98           return false;
99         }
100
101         // Got to the end, must be good!
102         lineIP->setPalette(goodPal);
103         lineHost->setPalette(goodPal);
104         button(QWizard::NextButton)->setEnabled(true);
105         return true;
106     case Page_Root:
107         if ( lineRoot->text() != lineRoot2->text() ) {
108           button(QWizard::NextButton)->setEnabled(false);
109           return false;
110         } else {
111           button(QWizard::NextButton)->setEnabled(true);
112         }
113         return true;
114     case Page_Linux:
115          if ( lineLinuxScript->text().isEmpty() ) {
116            button(QWizard::NextButton)->setEnabled(false);
117            return false;
118          }
119     default:
120         button(QWizard::NextButton)->setEnabled(true);
121         return true;
122  }
123
124  return true;
125}
126
127int wizardNewJail::nextId() const
128{
129  switch (currentId()) {
130     case Page_Type:
131         if (radioPortsJail->isChecked())
132           return Page_Opts;
133       break;
134       case Page_Root:
135         checkSystemSource->setHidden(false); 
136         checkPortsTree->setHidden(false); 
137         if (radioLinuxJail->isChecked()) {
138           labelConfirm->setText(tr("Please take a moment and set any other options for this jail."));
139           return Page_Linux;
140         } else {
141           return Page_Opts;
142         }
143       break;
144       case Page_Linux:
145           checkSystemSource->setHidden(true); 
146           checkPortsTree->setHidden(true); 
147           return Page_Opts;
148       break;
149       case Page_Opts:
150         return -1;
151       break;
152     default:
153        return currentId() + 1;
154  }
155  return currentId() + 1;
156}
157
158void wizardNewJail::slotCheckComplete()
159{
160   // Validate this page
161   validatePage();
162}
163
164void wizardNewJail::slotSelectLinuxScript()
165{
166   lineLinuxScript->setText(QFileDialog::getOpenFileName(this,
167   tr("Select Script"), "/usr/local/share/warden/linux-installs", tr("Linux install files (*)")));
168}
169
170
Note: See TracBrowser for help on using the repository browser.