mirror of
https://github.com/PurpleI2P/i2pd
synced 2024-11-10 00:00:29 +03:00
fixed #935
This commit is contained in:
parent
ef30d2d3b6
commit
9441c1cffe
@ -3,8 +3,8 @@
|
||||
#include "SignatureTypeComboboxFactory.h"
|
||||
#include "QVBoxLayout"
|
||||
|
||||
ClientTunnelPane::ClientTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ClientTunnelConfig* tunconf):
|
||||
TunnelPane(tunnelsPageUpdateListener, tunconf) {}
|
||||
ClientTunnelPane::ClientTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ClientTunnelConfig* tunconf, QWidget* wrongInputPane_, QLabel* wrongInputLabel_):
|
||||
TunnelPane(tunnelsPageUpdateListener, tunconf, wrongInputPane_, wrongInputLabel_) {}
|
||||
|
||||
void ClientTunnelPane::setGroupBoxTitle(const QString & title) {
|
||||
clientTunnelNameGroupBox->setTitle(title);
|
||||
|
@ -14,7 +14,7 @@ class TunnelPane;
|
||||
class ClientTunnelPane : public TunnelPane {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ClientTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ClientTunnelConfig* tunconf);
|
||||
ClientTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ClientTunnelConfig* tunconf, QWidget* wrongInputPane_, QLabel* wrongInputLabel_);
|
||||
virtual ~ClientTunnelPane(){}
|
||||
virtual ServerTunnelPane* asServerTunnelPane();
|
||||
virtual ClientTunnelPane* asClientTunnelPane();
|
||||
@ -68,6 +68,7 @@ private:
|
||||
}
|
||||
protected:
|
||||
virtual bool applyDataFromUIToTunnelConfig() {
|
||||
QString cannotSaveSettings = QApplication::tr("Cannot save settings.");
|
||||
bool ok=TunnelPane::applyDataFromUIToTunnelConfig();
|
||||
if(!ok)return false;
|
||||
ClientTunnelConfig* ctc=tunnelConfig->asClientTunnelConfig();
|
||||
@ -78,7 +79,11 @@ protected:
|
||||
|
||||
auto portStr=portLineEdit->text();
|
||||
int portInt=portStr.toInt(&ok);
|
||||
if(!ok)return false;
|
||||
|
||||
if(!ok){
|
||||
highlightWrongInput(QApplication::tr("Bad port, must be int.")+" "+cannotSaveSettings,portLineEdit);
|
||||
return false;
|
||||
}
|
||||
ctc->setport(portInt);
|
||||
|
||||
ctc->setkeys(keysLineEdit->text().toStdString());
|
||||
@ -87,7 +92,10 @@ protected:
|
||||
|
||||
auto dportStr=destinationPortLineEdit->text();
|
||||
int dportInt=dportStr.toInt(&ok);
|
||||
if(!ok)return false;
|
||||
if(!ok){
|
||||
highlightWrongInput(QApplication::tr("Bad destinationPort, must be int.")+" "+cannotSaveSettings,destinationPortLineEdit);
|
||||
return false;
|
||||
}
|
||||
ctc->setdestinationPort(dportInt);
|
||||
|
||||
ctc->setsigType(readSigTypeComboboxUI(sigTypeComboBox));
|
||||
|
@ -2,8 +2,8 @@
|
||||
#include "ClientContext.h"
|
||||
#include "SignatureTypeComboboxFactory.h"
|
||||
|
||||
ServerTunnelPane::ServerTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ServerTunnelConfig* tunconf):
|
||||
TunnelPane(tunnelsPageUpdateListener, tunconf) {}
|
||||
ServerTunnelPane::ServerTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ServerTunnelConfig* tunconf, QWidget* wrongInputPane_, QLabel* wrongInputLabel_):
|
||||
TunnelPane(tunnelsPageUpdateListener, tunconf, wrongInputPane_, wrongInputLabel_) {}
|
||||
|
||||
void ServerTunnelPane::setGroupBoxTitle(const QString & title) {
|
||||
serverTunnelNameGroupBox->setTitle(title);
|
||||
|
@ -31,7 +31,7 @@ class ServerTunnelPane : public TunnelPane {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ServerTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ServerTunnelConfig* tunconf);
|
||||
ServerTunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener, ServerTunnelConfig* tunconf, QWidget* wrongInputPane_, QLabel* wrongInputLabel_);
|
||||
virtual ~ServerTunnelPane(){}
|
||||
|
||||
virtual ServerTunnelPane* asServerTunnelPane();
|
||||
@ -119,6 +119,7 @@ private:
|
||||
|
||||
protected:
|
||||
virtual bool applyDataFromUIToTunnelConfig() {
|
||||
QString cannotSaveSettings = QApplication::tr("Cannot save settings.");
|
||||
bool ok=TunnelPane::applyDataFromUIToTunnelConfig();
|
||||
if(!ok)return false;
|
||||
ServerTunnelConfig* stc=tunnelConfig->asServerTunnelConfig();
|
||||
@ -127,14 +128,20 @@ protected:
|
||||
|
||||
auto portStr=portLineEdit->text();
|
||||
int portInt=portStr.toInt(&ok);
|
||||
if(!ok)return false;
|
||||
if(!ok){
|
||||
highlightWrongInput(QApplication::tr("Bad port, must be int.")+" "+cannotSaveSettings,portLineEdit);
|
||||
return false;
|
||||
}
|
||||
stc->setport(portInt);
|
||||
|
||||
stc->setkeys(keysLineEdit->text().toStdString());
|
||||
|
||||
auto str=inPortLineEdit->text();
|
||||
int inPortInt=str.toInt(&ok);
|
||||
if(!ok)return false;
|
||||
if(!ok){
|
||||
highlightWrongInput(QApplication::tr("Bad inPort, must be int.")+" "+cannotSaveSettings,inPortLineEdit);
|
||||
return false;
|
||||
}
|
||||
stc->setinPort(inPortInt);
|
||||
|
||||
stc->setaccessList(accessListLineEdit->text().toStdString());
|
||||
@ -147,7 +154,10 @@ protected:
|
||||
|
||||
auto mcStr=maxConnsLineEdit->text();
|
||||
uint32_t mcInt=(uint32_t)mcStr.toInt(&ok);
|
||||
if(!ok)return false;
|
||||
if(!ok){
|
||||
highlightWrongInput(QApplication::tr("Bad maxConns, must be int.")+" "+cannotSaveSettings,maxConnsLineEdit);
|
||||
return false;
|
||||
}
|
||||
stc->setmaxConns(mcInt);
|
||||
|
||||
stc->setgzip(gzipCheckBox->isChecked());
|
||||
|
@ -6,24 +6,24 @@ void TunnelConfig::saveHeaderToStringStream(std::stringstream& out) {
|
||||
}
|
||||
|
||||
void TunnelConfig::saveI2CPParametersToStringStream(std::stringstream& out) {
|
||||
if (i2cpParameters.getInbound_length().toUShort() != i2p::client::DEFAULT_INBOUND_TUNNEL_LENGTH)
|
||||
out << i2p::client::I2CP_PARAM_INBOUND_TUNNEL_LENGTH << "="
|
||||
<< i2cpParameters.getInbound_length().toStdString() << "\n";
|
||||
if (i2cpParameters.getOutbound_length().toUShort() != i2p::client::DEFAULT_OUTBOUND_TUNNEL_LENGTH)
|
||||
out << i2p::client::I2CP_PARAM_OUTBOUND_TUNNEL_LENGTH << "="
|
||||
<< i2cpParameters.getOutbound_length().toStdString() << "\n";
|
||||
if (i2cpParameters.getInbound_quantity().toUShort() != i2p::client::DEFAULT_INBOUND_TUNNELS_QUANTITY)
|
||||
out << i2p::client::I2CP_PARAM_INBOUND_TUNNELS_QUANTITY << "="
|
||||
<< i2cpParameters.getInbound_quantity().toStdString() << "\n";
|
||||
if (i2cpParameters.getOutbound_quantity().toUShort() != i2p::client::DEFAULT_OUTBOUND_TUNNELS_QUANTITY)
|
||||
out << i2p::client::I2CP_PARAM_OUTBOUND_TUNNELS_QUANTITY << "="
|
||||
<< i2cpParameters.getOutbound_quantity().toStdString() << "\n";
|
||||
if (i2cpParameters.getCrypto_tagsToSend().toUShort() != i2p::client::DEFAULT_TAGS_TO_SEND)
|
||||
out << i2p::client::I2CP_PARAM_TAGS_TO_SEND << "="
|
||||
<< i2cpParameters.getCrypto_tagsToSend().toStdString() << "\n";
|
||||
if (!i2cpParameters.getExplicitPeers().isEmpty())
|
||||
out << i2p::client::I2CP_PARAM_EXPLICIT_PEERS << "="
|
||||
<< i2cpParameters.getExplicitPeers().toStdString() << "\n";
|
||||
if (i2cpParameters.getInbound_length().toUShort() != i2p::client::DEFAULT_INBOUND_TUNNEL_LENGTH)
|
||||
out << i2p::client::I2CP_PARAM_INBOUND_TUNNEL_LENGTH << "="
|
||||
<< i2cpParameters.getInbound_length().toStdString() << "\n";
|
||||
if (i2cpParameters.getOutbound_length().toUShort() != i2p::client::DEFAULT_OUTBOUND_TUNNEL_LENGTH)
|
||||
out << i2p::client::I2CP_PARAM_OUTBOUND_TUNNEL_LENGTH << "="
|
||||
<< i2cpParameters.getOutbound_length().toStdString() << "\n";
|
||||
if (i2cpParameters.getInbound_quantity().toUShort() != i2p::client::DEFAULT_INBOUND_TUNNELS_QUANTITY)
|
||||
out << i2p::client::I2CP_PARAM_INBOUND_TUNNELS_QUANTITY << "="
|
||||
<< i2cpParameters.getInbound_quantity().toStdString() << "\n";
|
||||
if (i2cpParameters.getOutbound_quantity().toUShort() != i2p::client::DEFAULT_OUTBOUND_TUNNELS_QUANTITY)
|
||||
out << i2p::client::I2CP_PARAM_OUTBOUND_TUNNELS_QUANTITY << "="
|
||||
<< i2cpParameters.getOutbound_quantity().toStdString() << "\n";
|
||||
if (i2cpParameters.getCrypto_tagsToSend().toUShort() != i2p::client::DEFAULT_TAGS_TO_SEND)
|
||||
out << i2p::client::I2CP_PARAM_TAGS_TO_SEND << "="
|
||||
<< i2cpParameters.getCrypto_tagsToSend().toStdString() << "\n";
|
||||
if (!i2cpParameters.getExplicitPeers().isEmpty()) //todo #947
|
||||
out << i2p::client::I2CP_PARAM_EXPLICIT_PEERS << "="
|
||||
<< i2cpParameters.getExplicitPeers().toStdString() << "\n";
|
||||
out << "\n";
|
||||
}
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
#include "TunnelPane.h"
|
||||
#include "QMessageBox"
|
||||
|
||||
TunnelPane::TunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener_, TunnelConfig* tunnelConfig_):
|
||||
TunnelPane::TunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener_, TunnelConfig* tunnelConfig_, QWidget* wrongInputPane_, QLabel* wrongInputLabel_):
|
||||
QObject(),
|
||||
wrongInputPane(wrongInputPane_),
|
||||
wrongInputLabel(wrongInputLabel_),
|
||||
tunnelConfig(tunnelConfig_),
|
||||
tunnelsPageUpdateListener(tunnelsPageUpdateListener_),
|
||||
gridLayoutWidget_2(nullptr) {}
|
||||
|
@ -28,16 +28,24 @@ class TunnelPane : public QObject {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
TunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener_, TunnelConfig* tunconf);
|
||||
TunnelPane(TunnelsPageUpdateListener* tunnelsPageUpdateListener_, TunnelConfig* tunconf, QWidget* wrongInputPane_, QLabel* wrongInputLabel_);
|
||||
virtual ~TunnelPane(){}
|
||||
|
||||
void deleteTunnelForm();
|
||||
|
||||
void hideWrongInputLabel() { wrongInputPane->setVisible(false); }
|
||||
void highlightWrongInput(QString warningText, QWidget* controlWithWrongInput) {
|
||||
wrongInputPane->setVisible(true);
|
||||
wrongInputLabel->setText(warningText);
|
||||
if(controlWithWrongInput)controlWithWrongInput->setFocus();
|
||||
}
|
||||
|
||||
virtual ServerTunnelPane* asServerTunnelPane()=0;
|
||||
virtual ClientTunnelPane* asClientTunnelPane()=0;
|
||||
|
||||
protected:
|
||||
QWidget * wrongInputPane;
|
||||
QLabel* wrongInputLabel;
|
||||
TunnelConfig* tunnelConfig;
|
||||
widgetlockregistry widgetlocks;
|
||||
TunnelsPageUpdateListener* tunnelsPageUpdateListener;
|
||||
@ -87,6 +95,7 @@ protected:
|
||||
|
||||
//returns false when invalid data at UI
|
||||
virtual bool applyDataFromUIToTunnelConfig() {
|
||||
hideWrongInputLabel();
|
||||
tunnelConfig->setName(nameLineEdit->text().toStdString());
|
||||
tunnelConfig->setType(readTunnelTypeComboboxData());
|
||||
I2CPParameters& i2cpParams=tunnelConfig->getI2cpParameters();
|
||||
|
@ -82,6 +82,11 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
ui->settingsContents->setAutoFillBackground(true);
|
||||
ui->settingsContents->setPalette(pal);
|
||||
*/
|
||||
QPalette pal(palette());
|
||||
pal.setColor(QPalette::Background, Qt::red);
|
||||
ui->wrongInputLabel->setAutoFillBackground(true);
|
||||
ui->wrongInputLabel->setPalette(pal);
|
||||
ui->wrongInputLabel->setVisible(false);
|
||||
|
||||
#ifndef ANDROID
|
||||
createActions();
|
||||
@ -565,7 +570,7 @@ void MainWindow::initUInt16Box(ConfigOption option, QLineEdit* numberLineEdit, Q
|
||||
configItems.append(new UInt16StringItem(option, numberLineEdit, fieldNameTranslated));
|
||||
}
|
||||
void MainWindow::initStringBox(ConfigOption option, QLineEdit* lineEdit){
|
||||
configItems.append(new BaseStringItem(option, lineEdit));
|
||||
configItems.append(new BaseStringItem(option, lineEdit, QString()));
|
||||
}
|
||||
NonGUIOptionItem* MainWindow::initNonGUIOption(ConfigOption option) {
|
||||
NonGUIOptionItem * retValue;
|
||||
@ -623,6 +628,9 @@ void MainWindow::loadAllConfigs(){
|
||||
}
|
||||
/** returns false iff not valid items present and save was aborted */
|
||||
bool MainWindow::saveAllConfigs(){
|
||||
QString cannotSaveSettings = QApplication::tr("Cannot save settings.");
|
||||
ui->wrongInputLabel->setVisible(false);
|
||||
|
||||
programOptionsWriterCurrentSection="";
|
||||
/*if(!logFileNameOption->lineEdit->text().trimmed().isEmpty())logOption->optionValue=boost::any(std::string("file"));
|
||||
else logOption->optionValue=boost::any(std::string("stdout"));*/
|
||||
@ -632,7 +640,10 @@ bool MainWindow::saveAllConfigs(){
|
||||
std::stringstream out;
|
||||
for(QList<MainWindowItem*>::iterator it = configItems.begin(); it!= configItems.end(); ++it) {
|
||||
MainWindowItem* item = *it;
|
||||
if(!item->isValid()) return false;
|
||||
if(!item->isValid()){
|
||||
highlightWrongInput(QApplication::tr("Invalid value for")+" "+item->getConfigOption().section+"::"+item->getConfigOption().option+". "+item->getRequirementToBeValid()+" "+cannotSaveSettings, item->getWidgetToFocus());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
for(QList<MainWindowItem*>::iterator it = configItems.begin(); it!= configItems.end(); ++it) {
|
||||
@ -688,27 +699,27 @@ void MainWindow::appendTunnelForms(std::string tunnelNameToFocus) {
|
||||
TunnelConfig* tunconf = it->second;
|
||||
ServerTunnelConfig* stc = tunconf->asServerTunnelConfig();
|
||||
if(stc){
|
||||
ServerTunnelPane * tunnelPane=new ServerTunnelPane(&tunnelsPageUpdateListener, stc);
|
||||
ServerTunnelPane * tunnelPane=new ServerTunnelPane(&tunnelsPageUpdateListener, stc, ui->wrongInputLabel, ui->wrongInputLabel);
|
||||
int h=tunnelPane->appendServerTunnelForm(stc, ui->tunnelsScrollAreaWidgetContents, tunnelPanes.size(), height);
|
||||
height+=h;
|
||||
qDebug() << "tun.height:" << height << "sz:" << tunnelPanes.size();
|
||||
//qDebug() << "tun.height:" << height << "sz:" << tunnelPanes.size();
|
||||
tunnelPanes.push_back(tunnelPane);
|
||||
if(name==tunnelNameToFocus)tunnelPane->getNameLineEdit()->setFocus();
|
||||
continue;
|
||||
}
|
||||
ClientTunnelConfig* ctc = tunconf->asClientTunnelConfig();
|
||||
if(ctc){
|
||||
ClientTunnelPane * tunnelPane=new ClientTunnelPane(&tunnelsPageUpdateListener, ctc);
|
||||
ClientTunnelPane * tunnelPane=new ClientTunnelPane(&tunnelsPageUpdateListener, ctc, ui->wrongInputLabel, ui->wrongInputLabel);
|
||||
int h=tunnelPane->appendClientTunnelForm(ctc, ui->tunnelsScrollAreaWidgetContents, tunnelPanes.size(), height);
|
||||
height+=h;
|
||||
qDebug() << "tun.height:" << height << "sz:" << tunnelPanes.size();
|
||||
//qDebug() << "tun.height:" << height << "sz:" << tunnelPanes.size();
|
||||
tunnelPanes.push_back(tunnelPane);
|
||||
if(name==tunnelNameToFocus)tunnelPane->getNameLineEdit()->setFocus();
|
||||
continue;
|
||||
}
|
||||
throw "unknown TunnelConfig subtype";
|
||||
}
|
||||
qDebug() << "tun.setting height:" << height;
|
||||
//qDebug() << "tun.setting height:" << height;
|
||||
ui->tunnelsScrollAreaWidgetContents->setGeometry(QRect(0, 0, 621, height));
|
||||
QList<QWidget*> childWidgets = ui->tunnelsScrollAreaWidgetContents->findChildren<QWidget*>();
|
||||
foreach(QWidget* widget, childWidgets)
|
||||
@ -833,3 +844,9 @@ void MainWindow::anchorClickedHandler(const QUrl & link) {
|
||||
void MainWindow::backClickedFromChild() {
|
||||
showStatusPage(statusPage);
|
||||
}
|
||||
|
||||
void MainWindow::highlightWrongInput(QString warningText, QWidget* widgetToFocus) {
|
||||
ui->wrongInputLabel->setVisible(true);
|
||||
ui->wrongInputLabel->setText(warningText);
|
||||
if(widgetToFocus)widgetToFocus->setFocus();
|
||||
}
|
||||
|
@ -93,8 +93,13 @@ class MainWindow;
|
||||
class MainWindowItem : public QObject {
|
||||
Q_OBJECT
|
||||
ConfigOption option;
|
||||
QWidget* widgetToFocus;
|
||||
QString requirementToBeValid;
|
||||
public:
|
||||
MainWindowItem(ConfigOption option_) : option(option_) {}
|
||||
MainWindowItem(ConfigOption option_, QWidget* widgetToFocus_, QString requirementToBeValid_) : option(option_), widgetToFocus(widgetToFocus_), requirementToBeValid(requirementToBeValid_) {}
|
||||
QWidget* getWidgetToFocus(){return widgetToFocus;}
|
||||
QString& getRequirementToBeValid() { return requirementToBeValid; }
|
||||
ConfigOption& getConfigOption() { return option; }
|
||||
boost::any optionValue;
|
||||
virtual ~MainWindowItem(){}
|
||||
virtual void installListeners(MainWindow *mainWindow);
|
||||
@ -145,7 +150,7 @@ public:
|
||||
};
|
||||
class NonGUIOptionItem : public MainWindowItem {
|
||||
public:
|
||||
NonGUIOptionItem(ConfigOption option_) : MainWindowItem(option_) {};
|
||||
NonGUIOptionItem(ConfigOption option_) : MainWindowItem(option_, nullptr, QString()) {};
|
||||
virtual ~NonGUIOptionItem(){}
|
||||
virtual bool isValid() { return true; }
|
||||
};
|
||||
@ -153,7 +158,7 @@ class BaseStringItem : public MainWindowItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
QLineEdit* lineEdit;
|
||||
BaseStringItem(ConfigOption option_, QLineEdit* lineEdit_) : MainWindowItem(option_), lineEdit(lineEdit_){};
|
||||
BaseStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString requirementToBeValid_) : MainWindowItem(option_, lineEdit_, requirementToBeValid_), lineEdit(lineEdit_){};
|
||||
virtual ~BaseStringItem(){}
|
||||
virtual void installListeners(MainWindow *mainWindow);
|
||||
virtual QString toString(){
|
||||
@ -175,7 +180,7 @@ class FileOrFolderChooserItem : public BaseStringItem {
|
||||
public:
|
||||
QPushButton* browsePushButton;
|
||||
FileOrFolderChooserItem(ConfigOption option_, QLineEdit* lineEdit_, QPushButton* browsePushButton_) :
|
||||
BaseStringItem(option_, lineEdit_), browsePushButton(browsePushButton_) {}
|
||||
BaseStringItem(option_, lineEdit_, QString()), browsePushButton(browsePushButton_) {}
|
||||
virtual ~FileOrFolderChooserItem(){}
|
||||
};
|
||||
class FileChooserItem : public FileOrFolderChooserItem {
|
||||
@ -201,7 +206,7 @@ public:
|
||||
class ComboBoxItem : public MainWindowItem {
|
||||
public:
|
||||
QComboBox* comboBox;
|
||||
ComboBoxItem(ConfigOption option_, QComboBox* comboBox_) : MainWindowItem(option_), comboBox(comboBox_){};
|
||||
ComboBoxItem(ConfigOption option_, QComboBox* comboBox_) : MainWindowItem(option_,comboBox_,QString()), comboBox(comboBox_){};
|
||||
virtual ~ComboBoxItem(){}
|
||||
virtual void installListeners(MainWindow *mainWindow);
|
||||
virtual void loadFromConfigOption()=0;
|
||||
@ -260,7 +265,7 @@ public:
|
||||
class CheckBoxItem : public MainWindowItem {
|
||||
public:
|
||||
QCheckBox* checkBox;
|
||||
CheckBoxItem(ConfigOption option_, QCheckBox* checkBox_) : MainWindowItem(option_), checkBox(checkBox_){};
|
||||
CheckBoxItem(ConfigOption option_, QCheckBox* checkBox_) : MainWindowItem(option_,checkBox_,QString()), checkBox(checkBox_){};
|
||||
virtual ~CheckBoxItem(){}
|
||||
virtual void installListeners(MainWindow *mainWindow);
|
||||
virtual void loadFromConfigOption(){
|
||||
@ -276,58 +281,77 @@ public:
|
||||
class BaseFormattedStringItem : public BaseStringItem {
|
||||
public:
|
||||
QString fieldNameTranslated;
|
||||
BaseFormattedStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseStringItem(option_, lineEdit_), fieldNameTranslated(fieldNameTranslated_) {};
|
||||
BaseFormattedStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_, QString requirementToBeValid_) :
|
||||
BaseStringItem(option_, lineEdit_, requirementToBeValid_), fieldNameTranslated(fieldNameTranslated_) {};
|
||||
virtual ~BaseFormattedStringItem(){}
|
||||
virtual bool isValid()=0;
|
||||
};
|
||||
class IntegerStringItem : public BaseFormattedStringItem {
|
||||
public:
|
||||
IntegerStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_, QApplication::tr("Must be a valid integer.")) {};
|
||||
virtual ~IntegerStringItem(){}
|
||||
virtual bool isValid(){return true;}
|
||||
virtual bool isValid(){
|
||||
auto str=lineEdit->text();
|
||||
bool ok;
|
||||
str.toInt(&ok);
|
||||
return ok;
|
||||
}
|
||||
virtual QString toString(){return QString::number(boost::any_cast<int>(optionValue));}
|
||||
virtual boost::any fromString(QString s){return boost::any(std::stoi(s.toStdString()));}
|
||||
};
|
||||
class UShortStringItem : public BaseFormattedStringItem {
|
||||
public:
|
||||
UShortStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_, QApplication::tr("Must be unsigned short integer.")) {};
|
||||
virtual ~UShortStringItem(){}
|
||||
virtual bool isValid(){return true;}
|
||||
virtual bool isValid(){
|
||||
auto str=lineEdit->text();
|
||||
bool ok;
|
||||
str.toUShort(&ok);
|
||||
return ok;
|
||||
}
|
||||
virtual QString toString(){return QString::number(boost::any_cast<unsigned short>(optionValue));}
|
||||
virtual boost::any fromString(QString s){return boost::any((unsigned short)std::stoi(s.toStdString()));}
|
||||
};
|
||||
class UInt32StringItem : public BaseFormattedStringItem {
|
||||
public:
|
||||
UInt32StringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_, QApplication::tr("Must be unsigned 32-bit integer.")) {};
|
||||
virtual ~UInt32StringItem(){}
|
||||
virtual bool isValid(){return true;}
|
||||
virtual bool isValid(){
|
||||
auto str=lineEdit->text();
|
||||
bool ok;
|
||||
str.toUInt(&ok);
|
||||
return ok;
|
||||
}
|
||||
virtual QString toString(){return QString::number(boost::any_cast<uint32_t>(optionValue));}
|
||||
virtual boost::any fromString(QString s){return boost::any((uint32_t)std::stoi(s.toStdString()));}
|
||||
};
|
||||
class UInt16StringItem : public BaseFormattedStringItem {
|
||||
public:
|
||||
UInt16StringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_, QApplication::tr("Must be unsigned 16-bit integer")) {};
|
||||
virtual ~UInt16StringItem(){}
|
||||
virtual bool isValid(){return true;}
|
||||
virtual bool isValid(){
|
||||
auto str=lineEdit->text();
|
||||
bool ok;
|
||||
str.toUShort(&ok);
|
||||
return ok;
|
||||
}
|
||||
virtual QString toString(){return QString::number(boost::any_cast<uint16_t>(optionValue));}
|
||||
virtual boost::any fromString(QString s){return boost::any((uint16_t)std::stoi(s.toStdString()));}
|
||||
};
|
||||
class IPAddressStringItem : public BaseFormattedStringItem {
|
||||
public:
|
||||
IPAddressStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
virtual bool isValid(){return true;}
|
||||
BaseFormattedStringItem(option_, lineEdit_, fieldNameTranslated_, QApplication::tr("Must be an IPv4 address")) {};
|
||||
virtual bool isValid(){return true;}//todo
|
||||
};
|
||||
class TCPPortStringItem : public UShortStringItem {
|
||||
public:
|
||||
TCPPortStringItem(ConfigOption option_, QLineEdit* lineEdit_, QString fieldNameTranslated_) :
|
||||
UShortStringItem(option_, lineEdit_, fieldNameTranslated_) {};
|
||||
virtual bool isValid(){return true;}
|
||||
};
|
||||
|
||||
namespace Ui {
|
||||
@ -354,6 +378,8 @@ public:
|
||||
|
||||
void setI2PController(i2p::qt::Controller* controller_);
|
||||
|
||||
void highlightWrongInput(QString warningText, QWidget* widgetToFocus);
|
||||
|
||||
//typedef std::function<QString ()> DefaultValueGetter;
|
||||
|
||||
//#ifndef ANDROID
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user