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

9.1-release9.2-releasereleng/10.0releng/10.0.1releng/10.0.2
Last change on this file since f66423f was f66423f, checked in by Kris Moore <kris@…>, 15 months ago
  • Number of changes to Warden GUI to work with updated backend
    • Allow IP & IPV6 address to be set during creation
    • Enable option to disable boot-strapping PKGNG / PCBSD-Utils
    • Fix up main dialog to understand new "jails" format
  • Property mode set to 100644
File size: 6.3 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(lineIP6, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
25    connect(checkIPv4, SIGNAL(clicked()), this, SLOT(slotCheckChecks()));
26    connect(checkIPv6, SIGNAL(clicked()), this, SLOT(slotCheckChecks()));
27    connect(lineHost, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
28    connect(lineLinuxScript, SIGNAL(textChanged ( const QString & )), this, SLOT(slotCheckComplete() ) );
29    connect(pushLinuxScript, SIGNAL(clicked()), this, SLOT(slotSelectLinuxScript()) );
30    connect(this, SIGNAL(currentIdChanged(int)), this, SLOT(slotCheckComplete()) );
31}
32
33void wizardNewJail::slotCheckChecks()
34{
35   if ( checkIPv4->isChecked() )
36      lineIP->setEnabled(true);
37   else
38      lineIP->setEnabled(false);
39
40   if ( checkIPv6->isChecked() )
41      lineIP6->setEnabled(true);
42   else
43      lineIP6->setEnabled(false);
44
45   slotCheckComplete();
46}
47
48void wizardNewJail::setHostIPUsed(QStringList uH, QStringList uIP)
49{
50   usedHosts = uH;
51   usedIP = uIP;
52}
53
54void wizardNewJail::accept()
55{
56    QString ip4, ip6;
57    if ( checkIPv4->isChecked() )
58       ip4 = lineIP->text();
59    if ( checkIPv6->isChecked() )
60       ip6 = lineIP6->text();
61   
62    emit create(ip4, ip6, lineHost->text(), radioTraditionalJail->isChecked(), checkPCBSDUtils->isChecked(),
63                lineRoot->text(), checkSystemSource->isChecked(), checkPortsTree->isChecked(),
64                checkAutostart->isChecked(), radioLinuxJail->isChecked(), lineLinuxScript->text());
65    close();
66   
67}
68
69void wizardNewJail::slotClose()
70{
71  close();
72}
73
74// Logic checks to see if we are ready to move onto next page
75bool wizardNewJail::validatePage()
76{
77  QColor red = QColor(255, 78, 78);
78  QColor white = QColor(255, 255, 255);
79  QPalette badPal(red);
80  badPal.setColor(QPalette::Window,red);
81  badPal.setColor(QPalette::WindowText,red);
82  QPalette goodPal(white);
83  goodPal.setColor(QPalette::Window,white);
84  goodPal.setColor(QPalette::WindowText,white);
85  labelMessage->setText(QString());
86
87
88  switch (currentId()) {
89     case Page_IP:
90         // Make sure items are not empty
91         if ( checkIPv4->isChecked() && lineIP->text().isEmpty() ) {
92            button(QWizard::NextButton)->setEnabled(false);
93            return false;
94         }
95         if ( checkIPv6->isChecked() && lineIP6->text().isEmpty() ) {
96            button(QWizard::NextButton)->setEnabled(false);
97            return false;
98         }
99         if ( lineHost->text().isEmpty() ) {
100            button(QWizard::NextButton)->setEnabled(false);
101            return false;
102         }
103
104         // Check if this IP / Host is already used
105         for (int i = 0; i < usedHosts.size(); ++i)
106            if ( usedHosts.at(i) == lineHost->text() ) {
107               button(QWizard::NextButton)->setEnabled(false);
108               lineHost->setPalette(badPal);
109               labelMessage->setText(tr("Hostname already used!"));
110               return false;
111            }
112         for (int i = 0; i < usedIP.size(); ++i)
113            if ( usedIP.at(i) == lineIP->text() ) {
114               button(QWizard::NextButton)->setEnabled(false);
115               lineIP->setPalette(badPal);
116               labelMessage->setText(tr("IP already used!"));
117               return false;
118            }
119
120         // Check if we have a good IPV4 or IPV6 address
121         if ( ! pcbsd::Utils::validateIPV4(lineIP->text()) && ! pcbsd::Utils::validateIPV6(lineIP->text()) ) {
122           button(QWizard::NextButton)->setEnabled(false);
123           lineIP->setPalette(badPal);
124           labelMessage->setText(tr("Invalid IP address!"));
125           return false;
126         }
127
128         // Got to the end, must be good!
129         lineIP->setPalette(goodPal);
130         lineHost->setPalette(goodPal);
131         button(QWizard::NextButton)->setEnabled(true);
132         return true;
133     case Page_Root:
134         if ( lineRoot->text() != lineRoot2->text() ) {
135           button(QWizard::NextButton)->setEnabled(false);
136           return false;
137         } else {
138           button(QWizard::NextButton)->setEnabled(true);
139         }
140         return true;
141     case Page_Linux:
142          if ( lineLinuxScript->text().isEmpty() ) {
143            button(QWizard::NextButton)->setEnabled(false);
144            return false;
145          }
146     default:
147         button(QWizard::NextButton)->setEnabled(true);
148         return true;
149  }
150
151  return true;
152}
153
154int wizardNewJail::nextId() const
155{
156  switch (currentId()) {
157     case Page_Type:
158         if (radioPortsJail->isChecked())
159           return Page_Opts;
160       break;
161       case Page_Root:
162         checkSystemSource->setHidden(false); 
163         checkPortsTree->setHidden(false); 
164         if (radioLinuxJail->isChecked()) {
165           labelConfirm->setText(tr("Please take a moment and set any other options for this jail."));
166           return Page_Linux;
167         } else {
168           return Page_Opts;
169         }
170       break;
171       case Page_Linux:
172           checkSystemSource->setHidden(true); 
173           checkPortsTree->setHidden(true); 
174           return Page_Opts;
175       break;
176       case Page_Opts:
177         return -1;
178       break;
179     default:
180        return currentId() + 1;
181  }
182  return currentId() + 1;
183}
184
185void wizardNewJail::slotCheckComplete()
186{
187   // Validate this page
188   validatePage();
189}
190
191void wizardNewJail::slotSelectLinuxScript()
192{
193   lineLinuxScript->setText(QFileDialog::getOpenFileName(this,
194   tr("Select Script"), "/usr/local/share/warden/linux-installs", tr("Linux install files (*)")));
195}
196
197
Note: See TracBrowser for help on using the repository browser.