Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Palacios GUI Added
[palacios.git] / linux_usr / gui / palacios / vm_creation_wizard.cpp
1 /*
2  * newvmwizard.cpp
3  *
4  *  Created on: Sep 20, 2012
5  *      Author: abhinav
6  */
7
8 #include <QMessageBox>
9 #include "vm_creation_wizard.h"
10
11 NewVmWizard::NewVmWizard(QWidget* parent) :
12                 QWizard(parent) {
13         
14         setPage(Page_Intro, new IntroPage);
15         setPage(Page_Image_File, new GuestImagePage);
16         setPage(Page_Final, new FinalPage);
17         setStartId(Page_Intro);
18         
19         setOptions(QWizard::NoBackButtonOnLastPage);
20         setWindowTitle(tr("New Virtual Machine"));
21 }
22
23 NewVmWizard::~NewVmWizard() {
24 }
25
26 IntroPage::IntroPage(QWidget* parent) :
27                 QWizardPage(parent) {
28         setTitle(tr("Introduction"));
29         setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/images/palacios.png"));
30
31         topLabel = new QLabel(
32                         tr("This wizard will help you to create a new virtual machine"));
33         topLabel->setWordWrap(true);
34
35         QVBoxLayout *layout = new QVBoxLayout;
36         layout->addWidget(topLabel);
37         setLayout(layout);
38 }
39
40 IntroPage::~IntroPage() {
41         delete topLabel;
42 }
43
44 int IntroPage::nextId() const {
45         return NewVmWizard::Page_Image_File;
46 }
47
48 GuestImagePage::GuestImagePage(QWidget* parent) :
49                 QWizardPage(parent) {
50         setTitle(tr("VM Creation"));
51         setSubTitle(
52                         tr(
53                                         "Please fill all the fields. Make sure all file paths are correct"));
54
55         guestNameLabel = new QLabel(tr("Enter a name for the guest"));
56         guestName = new QLineEdit();
57         guestNameLabel->setBuddy(guestName);
58
59         configLocLabel = new QLabel(tr("Enter path of config file"));
60         configLoc = new QLineEdit();
61         configLocLabel->setBuddy(configLoc);
62
63         imageLocLabel = new QLabel(tr("Enter path of image file"));
64         imageLoc = new QLineEdit();
65         imageLocLabel->setBuddy(imageLoc);
66
67         browseConfig = new QPushButton(tr("Browse"));
68         browseImage = new QPushButton(tr("Browse"));
69
70         registerField("guestName*", guestName);
71         registerField("configLoc*", configLoc);
72         registerField("imageLoc*", imageLoc);
73         //registerField("memory*", memory);
74
75         connect(browseConfig, SIGNAL(clicked()), this, SLOT(locateConfigFile()));
76         connect(browseImage, SIGNAL(clicked()), this, SLOT(locateImageFile()));
77
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);
87
88         setLayout(layout);
89 }
90
91 GuestImagePage::~GuestImagePage() {
92         delete guestNameLabel;
93         delete guestName;
94         delete configLocLabel;
95         delete configLoc;
96         delete imageLocLabel;
97         delete imageLoc;
98         delete browseConfig;
99         delete browseImage;
100 }
101
102 void GuestImagePage::locateConfigFile() {
103         QString configFile = QFileDialog::getOpenFileName(this, tr("Open file"), ".",
104                         "XML file (*.xml)");
105         configLoc->setText(configFile);
106 }
107
108 void GuestImagePage::locateImageFile() {
109         QString imageFile = QFileDialog::getOpenFileName(this, tr("Open file"), ".",
110                         "Image file (*.img *.bZ)");
111         imageLoc->setText(imageFile);
112 }
113
114 int GuestImagePage::nextId() const {
115         return NewVmWizard::Page_Final;
116 }
117
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();
127         bool exists = false;
128
129         QByteArray val = v3Proc->readAllStandardOutput();
130         if (!val.isNull()) {
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)) {
135                                         exists = true;
136                                         break;
137                                 }
138                         }
139                 }
140         }
141
142         if (exists) {
143                 QMessageBox warning;
144                 warning.setText("A Virtual Machine with this name already exists! Please use another name");
145                 warning.setIcon(QMessageBox::Critical);
146                 warning.setStandardButtons(
147                                 QMessageBox::Ok);
148                 warning.exec();
149                 return false;
150         }
151         
152         delete v3Proc;
153         return true;
154 }
155
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"));
162
163         finalLabel = new QLabel("VM Creation Successful");
164
165         QVBoxLayout* layout = new QVBoxLayout();
166         layout->addWidget(finalLabel);
167
168         setLayout(layout);
169 }
170
171 FinalPage::~FinalPage() {
172         delete finalLabel;
173 }
174
175 int FinalPage::nextId() const {
176         return -1;
177 }