00001
00008 #include <QtGui>
00009 #include <QDebug>
00010
00011 using namespace std;
00012
00013 #include "mainwindowimpl.h"
00014 #include "thread/SSHConnect.h"
00015
00022 MainWindowImpl::MainWindowImpl( QWidget * parent, Qt::WFlags f)
00023 : QMainWindow(parent, f)
00024 {
00025 setupUi(this);
00026 _ssh = Myssh();
00027
00028 connect(actionQuit, SIGNAL(triggered()), this, SLOT(close()));
00029 connect(actionAbout, SIGNAL(triggered()), this, SLOT(about()));
00030
00031 QObject::connect (bConnect,SIGNAL(clicked()),this,SLOT(connectDisconnectSSH()));
00032 QObject::connect (lHost,SIGNAL(editTextChanged(QString)),this,SLOT(changeLoginsList(QString)));
00033 QObject::connect (lHost,SIGNAL(currentIndexChanged(QString)),this,SLOT(changeLoginsList(QString)));
00034 QObject::connect(lPassword, SIGNAL(returnPressed()), bConnect, SLOT(click()));
00035
00036 QSettings settings;
00037 _settings = settings.value("host/logins").value< QMap<QString,QVariant> >();
00038
00039 QList<QString> l = _settings.keys();
00040 for (int i = 0; i < l.size(); ++i) {
00041 QString Host = l.at(i);
00042 lHost->addItem(Host);
00043 QStringList logins = _settings[Host].value<QStringList>();
00044 QString login;
00045
00046 for (int j = 0; j < logins.size(); ++j)
00047 {
00048 login = logins.at(j);
00049 lLogin->addItem(login);
00050 }
00051 }
00052
00053 statusbar->showMessage(tr("not connected..."));
00054 }
00055
00059 MainWindowImpl::~MainWindowImpl()
00060 {
00061
00062 QSettings settings;
00063 settings.setValue("host/logins", QVariant(_settings));
00064 }
00065
00069 void MainWindowImpl::connectDisconnectSSH()
00070 {
00071 if (_ssh.isConnected())
00072 {
00073 _ssh.disconnect_ssh();
00074 logs->addLog(tr("%1 is disconnected from %2").arg(qlogin).arg(qhost));
00075 statusbar->showMessage(tr("not connected..."));
00076 bConnect->setText(tr("Connect"));
00077 stats->clearJobListing();
00078 nodes->clearNodesListing();
00079 } else {
00080
00081 QMovie * movie = new QMovie(":/imgs/anim.gif");
00082 lAnim->setMovie(movie);
00083 movie->start();
00084
00085 qlogin = lLogin->currentText();
00086 qpwd = lPassword->text();
00087 qhost = lHost->currentText();
00088 statusbar->showMessage(tr("connecting to %1...").arg(qhost));
00089 SSHConnect * c = new SSHConnect(qlogin, qpwd, qhost, &_ssh);
00090 QObject::connect (c, SIGNAL(connected()), this, SLOT(onConnected()));
00091 QObject::connect (c, SIGNAL(connectionFailed(QString)), this, SLOT(onConnectionFailed(QString)));
00092 c->start();
00093 }
00094 }
00095
00099 void MainWindowImpl::onConnected()
00100 {
00101
00102 lAnim->clear();
00103 QString tmp = tr("%1 is connected to %2").arg(qlogin).arg(qhost);
00104 statusbar->showMessage(tmp);
00105 logs->addLog(tmp);
00106 bConnect->setText(tr("Disconnect"));
00107 nodes->refresh();
00108 stats->refresh();
00109 addHostLogin(qhost, qlogin);
00110 }
00111
00117 void MainWindowImpl::onConnectionFailed(QString err)
00118 {
00119
00120 lAnim->clear();
00121 statusbar->showMessage(tr("not connected..."));
00122 QMessageBox msgBox;
00123 msgBox.setText(tr("Connection to %1 failed:").arg(qhost)+"\n"+err);
00124 msgBox.exec();
00125 }
00126
00132 void MainWindowImpl::changeLoginsList(QString inhost)
00133 {
00134 if (_settings.keys().contains(inhost))
00135 {
00136 int pos;
00137 QStringList logins;
00138 logins = _settings[inhost].value<QStringList>();
00139 lLogin->clear();
00140 for (int j = 0; j < logins.size(); ++j)
00141 {
00142 QString login = logins.at(j);
00143 lLogin->addItem(login);
00144 }
00145 pos = logins.indexOf(qlogin);
00146 if (pos >= 0)
00147 {
00148 lLogin->setCurrentIndex(logins.size()-1 - pos);
00149 }
00150 }
00151 }
00152
00159 void MainWindowImpl::addHostLogin(QString inhost, QString inlogin)
00160 {
00161 QStringList logins;
00162 QList<QString> l = _settings.keys();
00163 if (l.contains(inhost))
00164 {
00165 logins = _settings[inhost].value<QStringList>();
00166 }
00167 if (!logins.contains(inlogin))
00168 {
00169
00170 logins.append(inlogin);
00171 _settings[inhost] = QVariant(logins);
00172 QSettings settings;
00173 settings.setValue("host/logins", QVariant(_settings));
00174 }
00175 }
00176
00180 void MainWindowImpl::about()
00181 {
00182 QMessageBox::about ( this, tr("About QCJM"), tr("QCJM v%1\n\nBrought to you by Boris Faure and Sebastien Marty.").arg(QCoreApplication::applicationVersion()) );
00183 }