4 * Created on: Sep 20, 2012
9 #include "vm_creation_wizard.h"
11 NewVmWizard::NewVmWizard(QWidget* parent) :
14 setPage(Page_Intro, new IntroPage);
15 setPage(Page_Image_File, new GuestImagePage);
16 setPage(Page_Final, new FinalPage);
17 setStartId(Page_Intro);
19 setOptions(QWizard::NoBackButtonOnLastPage);
20 setWindowTitle(tr("New Virtual Machine"));
23 NewVmWizard::~NewVmWizard() {
26 IntroPage::IntroPage(QWidget* parent) :
28 setTitle(tr("Introduction"));
29 setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/images/palacios.png"));
31 topLabel = new QLabel(
32 tr("This wizard will help you to create a new virtual machine"));
33 topLabel->setWordWrap(true);
35 QVBoxLayout *layout = new QVBoxLayout;
36 layout->addWidget(topLabel);
40 IntroPage::~IntroPage() {
44 int IntroPage::nextId() const {
45 return NewVmWizard::Page_Image_File;
48 GuestImagePage::GuestImagePage(QWidget* parent) :
50 setTitle(tr("VM Creation"));
53 "Please fill all the fields. Make sure all file paths are correct"));
55 guestNameLabel = new QLabel(tr("Enter a name for the guest"));
56 guestName = new QLineEdit();
57 guestNameLabel->setBuddy(guestName);
59 configLocLabel = new QLabel(tr("Enter path of config file"));
60 configLoc = new QLineEdit();
61 configLocLabel->setBuddy(configLoc);
63 imageLocLabel = new QLabel(tr("Enter path of image file"));
64 imageLoc = new QLineEdit();
65 imageLocLabel->setBuddy(imageLoc);
67 browseConfig = new QPushButton(tr("Browse"));
68 browseImage = new QPushButton(tr("Browse"));
70 registerField("guestName*", guestName);
71 registerField("configLoc*", configLoc);
72 registerField("imageLoc*", imageLoc);
73 //registerField("memory*", memory);
75 connect(browseConfig, SIGNAL(clicked()), this, SLOT(locateConfigFile()));
76 connect(browseImage, SIGNAL(clicked()), this, SLOT(locateImageFile()));
78 QGridLayout* layout = new QGridLayout();
79 layout->addWidget(guestNameLabel, 0, 0);
80 layout->addWidget(guestName, 0, 1);
81 layout->addWidget(configLocLabel, 1, 0);
82 layout->addWidget(configLoc, 1, 1);
83 layout->addWidget(browseConfig, 1, 2);
84 layout->addWidget(imageLocLabel, 2, 0);
85 layout->addWidget(imageLoc, 2, 1);
86 layout->addWidget(browseImage, 2, 2);
91 GuestImagePage::~GuestImagePage() {
92 delete guestNameLabel;
94 delete configLocLabel;
102 void GuestImagePage::locateConfigFile() {
103 QString configFile = QFileDialog::getOpenFileName(this, tr("Open file"), ".",
105 configLoc->setText(configFile);
108 void GuestImagePage::locateImageFile() {
109 QString imageFile = QFileDialog::getOpenFileName(this, tr("Open file"), ".",
110 "Image file (*.img *.bZ)");
111 imageLoc->setText(imageFile);
114 int GuestImagePage::nextId() const {
115 return NewVmWizard::Page_Final;
118 bool GuestImagePage::validatePage() {
119 v3Proc = new QProcess();
120 v3Proc->setProcessChannelMode(QProcess::MergedChannels);
121 v3Proc->start("cat /proc/v3vee/v3-guests");
122 v3Proc->waitForFinished();
123 qDebug() << "Reply from proc to check for new VM creation: " << v3Proc->readAllStandardOutput();
124 QString name = field("guestName").toString();
125 QByteArray temp = name.toLocal8Bit();
126 const char* vmEntry = temp.data();
129 QByteArray val = v3Proc->readAllStandardOutput();
131 QList<QByteArray> procLine = val.split('\n');
132 if (procLine.size() > 0) {
133 for (int i=0; i<procLine.size(); i++) {
134 if (procLine[i].contains(vmEntry)) {
144 warning.setText("A Virtual Machine with this name already exists! Please use another name");
145 warning.setIcon(QMessageBox::Critical);
146 warning.setStandardButtons(
156 FinalPage::FinalPage(QWidget* parent) :
157 QWizardPage(parent) {
158 this->setCommitPage(true);
159 this->setFinalPage(true);
160 setTitle(tr("Status"));
161 setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/images/palacios.png"));
163 finalLabel = new QLabel("VM Creation Successful");
165 QVBoxLayout* layout = new QVBoxLayout();
166 layout->addWidget(finalLabel);
171 FinalPage::~FinalPage() {
175 int FinalPage::nextId() const {