From ccf9ffa4bcf5036ab55333e4c70467963f0f71b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20=C3=81ngel=20San=20Mart=C3=ADn?= Date: Wed, 6 Mar 2013 20:26:59 +0100 Subject: [PATCH] corregidos algunos problemas en las "webs" a?adida nueva imagen de fondo para el di?logo sever_config terminado el di?logo server_config --- YACReaderLibrary/images.qrc | 7 +- YACReaderLibrary/main.cpp | 12 +- YACReaderLibrary/server_config_dialog.cpp | 143 +++++++++++++----- YACReaderLibrary/server_config_dialog.h | 5 + common/yacreader_global.h | 1 + images/serverConfigBackground.png | Bin 0 -> 17041 bytes release/server/docroot/css/styles_ipad.css | 6 +- release/server/docroot/css/styles_iphone.css | 10 +- .../server/docroot/images/bt_import_ipad.jpg | Bin 718 -> 991 bytes .../docroot/images/bt_import_iphone.jpg | Bin 701 -> 957 bytes 10 files changed, 131 insertions(+), 53 deletions(-) create mode 100644 images/serverConfigBackground.png diff --git a/YACReaderLibrary/images.qrc b/YACReaderLibrary/images.qrc index 4206f832..74f3e540 100644 --- a/YACReaderLibrary/images.qrc +++ b/YACReaderLibrary/images.qrc @@ -53,8 +53,9 @@ ../images/7z.png ../images/pdf.png ../images/comicZip.png - ../images/comicRar.png - ../images/comicTar.png - ../images/comic7z.png + ../images/comicRar.png + ../images/comicTar.png + ../images/comic7z.png + ../images/serverConfigBackground.png \ No newline at end of file diff --git a/YACReaderLibrary/main.cpp b/YACReaderLibrary/main.cpp index 1b4f1328..2ef2940f 100644 --- a/YACReaderLibrary/main.cpp +++ b/YACReaderLibrary/main.cpp @@ -18,8 +18,16 @@ int main( int argc, char ** argv ) app.setApplicationName("YACReaderLibrary"); #ifdef SERVER_RELEASE - s = new Startup(); - s->start(); + QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor + settings->beginGroup("libraryConfig"); + + s = new Startup(); + + if(settings->value(SERVER_ON,true).toBool()) + { + + s->start(); + } #endif LibraryWindow * mw = new LibraryWindow(); diff --git a/YACReaderLibrary/server_config_dialog.cpp b/YACReaderLibrary/server_config_dialog.cpp index 73c0bb24..b29de49f 100644 --- a/YACReaderLibrary/server_config_dialog.cpp +++ b/YACReaderLibrary/server_config_dialog.cpp @@ -4,8 +4,11 @@ #include #include #include +#include +#include #include "startup.h" +#include "yacreader_global.h" extern Startup * s; @@ -15,59 +18,119 @@ ServerConfigDialog::ServerConfigDialog(QWidget * parent) accept = new QPushButton(tr("Update IPs")); connect(accept,SIGNAL(clicked()),this,SLOT(generateQR())); qrCodeImage = new QPixmap(); - qrCode = new QLabel("xxxx",this); + qrCode = new QLabel(this); + qrCode->move(196,73); + qrCode->setFixedSize(200,200); - QGridLayout * gridEdits = new QGridLayout; - gridEdits->addWidget(new QLabel(tr("IP")),0,0); - gridEdits->addWidget(new QLabel(tr("Port")),0,1); - ip = new QComboBox(); + QLabel * title1 = new QLabel(tr("EASY SERVER CONNECTION"),this); + title1->move(37,30); + title1->setStyleSheet("QLabel {color:#1F1F1F; font-size:18px; font-family: Arial; font-weight: bold;}"); + + QLabel * title2 = new QLabel(tr("SERVER ADDRESS"),this); + title2->move(451,30); + title2->setStyleSheet("QLabel {color:#1F1F1F; font-size:18px; font-family: Arial; font-weight: bold;}"); + + QLabel * qrMessage = new QLabel(tr("just scan the code with your device!!"),this); + qrMessage->move(194,290);//373,627); + qrMessage->setStyleSheet("QLabel {color:#1F1F1F; font-size:16px; font-family: Arial; font-style: italic;}"); + qrMessage->setWordWrap(true); + qrMessage->setFixedWidth(200); + + QLabel * propaganda = new QLabel(tr("YACReader is now available for iOS devices page "),this); + propaganda->move(36,375); + propaganda->setStyleSheet("QLabel {color:#1F1F1F; font-size:16px; font-family: Arial; font-style: italic;}" + "QLabel::a {color:#1A1A1A}"); + propaganda->setWordWrap(true); + propaganda->setFixedWidth(590); + propaganda->setOpenExternalLinks(true); + + QLabel * ipLabel = new QLabel(tr("IP address"),this); + ipLabel->move(455,78); + ipLabel->setStyleSheet("QLabel {color:#1F1F1F; font-size:13px; font-family: Arial; font-weight: bold;}"); + + QLabel * portLabel = new QLabel(tr("Port"),this); + portLabel->move(455, 119); + portLabel->setStyleSheet("QLabel {color:#1F1F1F; font-size:13px; font-family: Arial; font-weight: bold;}"); + + ip = new QComboBox(this); connect(ip,SIGNAL(activated(const QString &)),this,SLOT(regenerateQR(const QString &))); - gridEdits->addWidget(ip,1,0); - port = new QLineEdit("8080"); + ip->move(531,71); + ip->setSizeAdjustPolicy(QComboBox::AdjustToContents); + + port = new QLineEdit("8080",this); + port->setReadOnly(true); port->setMaximumWidth(50); - gridEdits->addWidget(port,1,1); - gridEdits->setColumnStretch(0,1); - gridEdits->setColumnStretch(1,0); + port->move(571,110); - QHBoxLayout * codeLayout = new QHBoxLayout; - codeLayout->addStretch(); - QLabel * qrMessage = new QLabel(); - qrMessage->setPixmap(QPixmap(":/images/qrMessage.png")); - codeLayout->addWidget(qrMessage); - codeLayout->addWidget(qrCode); - - QVBoxLayout * configLayout = new QVBoxLayout; - configLayout->addLayout(gridEdits); - configLayout->addLayout(codeLayout); - configLayout->addStretch(); - configLayout->setSpacing(5); - - QHBoxLayout * elementsLayout = new QHBoxLayout; - - QLabel * iphone = new QLabel(); - iphone->setPixmap(QPixmap(":/images/iphoneConfig.png")); - elementsLayout->setSpacing(40); - elementsLayout->addWidget(iphone); - elementsLayout->addStretch(); - elementsLayout->addLayout(configLayout); + check = new QCheckBox(this); + check->move(453,314); + check->setText(tr("enable the server")); + check->setStyleSheet("QCheckBox {color:#1F1F1F; font-size:13px; font-family: Arial; font-weight: bold;}"); + + //check->setLayoutDirection(Qt::RightToLeft); + + //elementsLayout->setSpacing(40); + //elementsLayout->addWidget(iphone); + //elementsLayout->addStretch(); + //elementsLayout->addLayout(configLayout); QHBoxLayout * buttons = new QHBoxLayout; buttons->addStretch(); buttons->addWidget(accept); - QVBoxLayout * mainLayout = new QVBoxLayout; - mainLayout->addLayout(elementsLayout); - mainLayout->addLayout(buttons); + //QVBoxLayout * mainLayout = new QVBoxLayout; + //mainLayout->addLayout(elementsLayout); + //mainLayout->addLayout(buttons); //mainLayout->addWidget(qrCode,0,1); - this->setLayout(mainLayout); - generateQR(); + //this->setLayout(mainLayout); QPalette Pal(palette()); // set black background - Pal.setColor(QPalette::Background, Qt::white); - setAutoFillBackground(true); - setPalette(Pal); + QPalette palette; + QImage image(":/images/serverConfigBackground.png"); + palette.setBrush(this->backgroundRole(), QBrush(image)); + + setPalette(palette); + + this->setFixedSize(image.size()); + + QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor + settings->beginGroup("libraryConfig"); + + if(settings->value(SERVER_ON,true).toBool()) + { + check->setChecked(true); + generateQR(); + } + else + check->setChecked(false); + + settings->endGroup(); + + connect(check,SIGNAL(stateChanged(int)),this,SLOT(enableServer(int))); +} + +void ServerConfigDialog::enableServer(int status) +{ + QSettings * settings = new QSettings(QCoreApplication::applicationDirPath()+"/YACReaderLibrary.ini",QSettings::IniFormat); //TODO unificar la creación del fichero de config con el servidor + settings->beginGroup("libraryConfig"); + + if(status == Qt::Checked) + { + s->start(); + this->generateQR(); + settings->setValue(SERVER_ON,true); + } + else + { + s->stop(); + qrCode->setPixmap(QPixmap()); + ip->clear(); + port->setText(""); + settings->setValue(SERVER_ON,false); + } + settings->endGroup(); } void ServerConfigDialog::generateQR() @@ -118,7 +181,7 @@ void ServerConfigDialog::generateQR(const QString & serverAddress) { qrGenerator = new QProcess(); QStringList attributes; - attributes << "-o" << "-" /*QCoreApplication::applicationDirPath()+"/utils/tmp.png"*/ << "-s" << "8" << "-l" << "H" << serverAddress; + attributes << "-o" << "-" /*QCoreApplication::applicationDirPath()+"/utils/tmp.png"*/ << "-s" << "8" << "-l" << "H" << "-m" << "0" << serverAddress; connect(qrGenerator,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(updateImage(void))); connect(qrGenerator,SIGNAL(error(QProcess::ProcessError)),this,SLOT(openingError(QProcess::ProcessError))); qrGenerator->start(QCoreApplication::applicationDirPath()+"/utils/qrencode",attributes); diff --git a/YACReaderLibrary/server_config_dialog.h b/YACReaderLibrary/server_config_dialog.h index 09760afc..f1c0478c 100644 --- a/YACReaderLibrary/server_config_dialog.h +++ b/YACReaderLibrary/server_config_dialog.h @@ -9,6 +9,7 @@ #include #include #include +#include class ServerConfigDialog : public QDialog { @@ -18,6 +19,9 @@ Q_OBJECT private: QComboBox * ip; QLineEdit * port; + + QCheckBox * check; + QPushButton * close; QPushButton * accept; QLabel * qrCode; @@ -29,6 +33,7 @@ Q_OBJECT void generateQR(const QString & serverAddress); void regenerateQR(const QString & ip); void updateImage(); + void enableServer(int status); signals: void portChanged(QString port); diff --git a/common/yacreader_global.h b/common/yacreader_global.h index 4549366c..b75131ff 100644 --- a/common/yacreader_global.h +++ b/common/yacreader_global.h @@ -41,6 +41,7 @@ #define X_ROTATION "X_ROTATION" #define Y_COVER_OFFSET "Y_COVER_OFFSET" #define V_SYNC "V_SYNC" +#define SERVER_ON "SERVER_ON" enum FlowType { diff --git a/images/serverConfigBackground.png b/images/serverConfigBackground.png new file mode 100644 index 0000000000000000000000000000000000000000..aa8053fe78f7e16f503bbf05f62770cf67de316a GIT binary patch literal 17041 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 hvu(ZZ(iF;o{=v z;^GnD0RsUZK7IjyJ|1CV5fNcw8EI*08F@HhWM^mR<>8eO5Ri}(6%>_%OAyQWe~3Yl zgF%A9nVC@#=r~4ZLB{__7$!3?f&kF@aKOaO!U_^%hKqn0j6h)lurQKhpg|7I!XWdQ z7+I0T83mby3>Xv*8z(jiAqj&GbPxub%*e!!B+e*k;9w}A7}z-R;YY{+w-|Vs8G$Zj z1_mJGhp%4`Ffe4zX<%SriAi8!FtZ2Ba{yh($jWp*ZR@hMw6t$;BxlZ?IlJDp*Vx$D ze10Za0TW2U)Bg-$4$wXXhlz>Jo+%z8j$kq}0!57`7TL_M)_1|4rU^Hi8?UUo z|8)7g{SZ5u8SNE|(z7kM-D8m5R(>__2t#gqS=y`v%zF=2>9#|x1*y3Tvlh$=21+12 zBoO4O@;i6it=qZVpsE;wssz#}*yo6DyT|{}