You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
knutclient/src/knutrwvar.cpp

218 lines
7.2 KiB

/***************************************************************************
knutrwvar.cpp - description
-------------------
begin : So r<EFBFBD>j 26 2002
copyright : (C) 2002 by Daniel Prynych
email : Daniel.Prynych@alo.cz
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "knutrwvar.h"
#include "knutvardata.h"
#include "knutprintupsvar.h"
//Od verze 3 je kapp jen odkaz na kapplication
//#include <kapplication.h>
#include <kapp.h>
#include <kcombobox.h>
#include <kmessagebox.h>
#include <klocale.h>
#include <qframe.h>
#include <qlabel.h>
#include <qstring.h>
#include <qlayout.h>
//#include <iostream>
KNutRWVar::KNutRWVar(QString* userName, QString* userPassword, const QString uName, const QString password, KNutNet* const initUpsNet, QWidget* parent, const char* name, const bool modal)
: KDialogBase(Plain, i18n("RW variables"),Ok|Cancel|Default,Ok, parent, name, modal, true), m_upsNet(initUpsNet){
upsVarDef upsVar;
// int error;
if (m_upsNet->getState() != KNutNet::Connected) {
KNutVarData::showError (KNutNet::NotConnection);
m_upsConnectOk = false;
}
else {
m_oldUserName = userName;
m_oldUserPassword = userPassword;
m_upsConnectOk = true;
QFrame *page = plainPage();
QVBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() );
QLabel *label1 = new QLabel (i18n("SET RW VARIABLE"),page,"label1");
label1->setAlignment(Qt::AlignHCenter);
topLayout->addWidget(label1);
QLabel *label2 = new QLabel (i18n("Variable:"),page,"label2");
m_rWVarBox = new KComboBox(page,"rwvarbox");
QLabel *label3 = new QLabel (i18n("Value:"),page,"label2");
m_valueVarBox = new KComboBox(page,"valuevarbox");
m_valueVarLine = new KLineEdit(page,"valuevarLine");
m_valueVarLine->hide();
m_passLayout = new QGridLayout (4,2,5,"passLayout");
QLabel *labelName = new QLabel (i18n("User name:"),page,"labelName");
QLabel *labelPassword = new QLabel (i18n("Password:"),page,"labelPassword");
m_lineEditName = new KLineEdit( page, "LineEditName" );
m_lineEditPassword = new KLineEdit( page, "LineEditName" );
if (((*m_oldUserName) == "") && ((*m_oldUserPassword) == "")) {
m_lineEditName->setText(uName);
m_lineEditPassword->setText(password);
}
else {
m_lineEditName->setText(*m_oldUserName);
m_lineEditPassword->setText(*m_oldUserPassword);
}
if (!((*m_oldUserName) == "") || !((*m_oldUserPassword) == "")) {
m_lineEditName->setDisabled(true);
m_lineEditPassword->setDisabled(true);
}
m_lineEditPassword->setEchoMode(QLineEdit::Password);
topLayout->addLayout(m_passLayout);
m_passLayout->addWidget(label2,0,0);
m_passLayout->addWidget(m_rWVarBox,0,1);
m_passLayout->addWidget(label3,1,0);
m_passLayout->addWidget(labelName,2,0);
m_passLayout->addWidget(labelPassword,3,0);
m_passLayout->addWidget(m_lineEditName,2,1);
m_passLayout->addWidget(m_lineEditPassword,3,1);
topLayout->addStretch(10);
//loads ComboBox
int n;
if (( n = (m_upsNet->readNumberVars( KNutNet::RWVars )+1)) > 1 ) { // zvetsime si pocet o 1
for (int i =1; i < n ; i++) {
if (!m_upsNet->readVars(i, upsVar,KNutNet::RWVars))
m_rWVarBox->insertItem(upsVar.upsVarName);
}
slotChangeVar(0);
}
else {
m_passLayout->addWidget(m_valueVarLine,1,1);
m_valueVarLine->setMaxLength(upsVar.upsVarMax);
m_valueVarBox->hide();
m_valueVarLine->show();
m_upsValueType=true;
}
connect (m_rWVarBox,SIGNAL(activated(int)),this,SLOT(slotChangeVar(int)));
}
}
int KNutRWVar::findItem(const KComboBox *myBox, const QString text) {
int n;
if ((n=myBox->count())) {
for (int i =0; i < n; i++)
if (text == myBox->text(i)) return i;
}
return myBox->currentItem();
}
void KNutRWVar::slotDefault () {
upsVarDef upsVar;
int error;
QString varName = m_rWVarBox->currentText();
if (!( error = m_upsNet->readVars(varName,upsVar))) {
if (upsVar.upsValueType) m_valueVarLine->setText(upsVar.upsValue);
else m_valueVarBox->setCurrentItem(upsVar.upsValue);
}
else KNutVarData::showError (error);
}
void KNutRWVar::slotChangeVar(int item) {
upsVarDef upsVar;
QString varName = m_rWVarBox->text(item);
int error = m_upsNet->readVars(varName,upsVar);
m_upsValueType=upsVar.upsValueType;
if (error || (upsVar.upsValueType)) {
// char
m_valueVarBox->hide();
m_valueVarLine->show();
m_passLayout->addWidget(m_valueVarLine,1,1);
m_valueVarLine->setText(upsVar.upsValue);
}
else {
//enum
m_valueVarLine->hide();
m_valueVarBox->show();
m_passLayout->addWidget(m_valueVarBox,1,1);
m_valueVarBox->clear();
if (upsVar.upsVarMax) {
for (int i = 0 ; i < upsVar.upsVarMax; i++)
m_valueVarBox->insertItem(m_upsNet->readEnumValueVar(upsVar.upsVarName,i+1));
}
m_valueVarBox->setCurrentItem(upsVar.upsValue);
}
}
KNutRWVar::~KNutRWVar(){
}
bool KNutRWVar::upsOk (void) { return m_upsConnectOk; }
void KNutRWVar::slotOk() {
QString value;
int error =0;
if (m_upsValueType) value=m_valueVarLine->text();
else value=m_valueVarBox->currentText();
if (((*m_oldUserName) == "") && ((*m_oldUserPassword) == "")) {
//the first connection sets name and password
//prvni propojeni nastavime jmeno a heslo
if (!(error = m_upsNet->setVariable(m_rWVarBox->currentText(), value, m_lineEditName->text(),m_lineEditPassword->text(),false))) {
// vzhledem k asynchronimu spracovani asi zbytecne
// myUpsNet->getUpsValues(true);
emit signalChangeRWVars(m_rWVarBox->currentText());//emits command for loading of variable and repaint of panel
(*m_oldUserName) = m_lineEditName->text();
(*m_oldUserPassword) = m_lineEditPassword->text();
accept();
}
}
else {
if (((*m_oldUserName) == m_lineEditName->text()) && ((*m_oldUserPassword) == m_lineEditPassword->text())) {
if (!(error = m_upsNet->setVariable(m_rWVarBox->currentText(), value, m_lineEditName->text(),m_lineEditPassword->text(),true))) {
// next line isn't needed, maybe
// vzhledem k asynchronimu spracovani asi zbytecne
// myUpsNet->getUpsValues(true);
emit signalChangeRWVars(m_rWVarBox->currentText()); //emits command for loading of variable and repaint of panel
accept();
}
}
}
//Nahlasime chybu
// sends information about error
if (error) KNutVarData::showError (error);
}
#include "knutrwvar.moc"