src/mainwindowimpl.cpp

Go to the documentation of this file.
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     //save settings
00062     QSettings settings;
00063     settings.setValue("host/logins", QVariant(_settings));
00064 }
00065 
00069 void MainWindowImpl::connectDisconnectSSH()
00070 {
00071     if (_ssh.isConnected())
00072     {   //DISCONNECT
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         //CONNECT
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     // Stop the animation
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     // Stop the animation
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 }

Generated on Mon Mar 16 18:46:05 2009 for QCJM by  doxygen 1.5.4