diff options
4 files changed, 138 insertions, 310 deletions
diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp index b92b5619..aa4bb810 100644 --- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.cpp @@ -1,85 +1,45 @@ -/* - * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - #include <QFile> #include <QSettings> #include "lthemeengine.h" #include "qsseditordialog.h" #include "ui_qsseditordialog.h" -QSSEditorDialog::QSSEditorDialog(const QString &filePath, QWidget *parent) : - QDialog(parent), - m_ui(new Ui::QSSEditorDialog) -{ - m_ui->setupUi(this); - m_filePath = filePath; - - QFile file(filePath); - file.open(QIODevice::ReadOnly); - m_ui->textEdit->setPlainText(QString::fromUtf8(file.readAll())); - setWindowTitle(tr("%1 - Style Sheet Editor").arg(file.fileName())); - - QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); - restoreGeometry(settings.value("QSSEditor/geometry").toByteArray()); +QSSEditorDialog::QSSEditorDialog(const QString &filePath, QWidget *parent) : QDialog(parent), m_ui(new Ui::QSSEditorDialog){ + m_ui->setupUi(this); + m_filePath = filePath; + QFile file(filePath); + file.open(QIODevice::ReadOnly); + m_ui->textEdit->setPlainText(QString::fromUtf8(file.readAll())); + setWindowTitle(tr("%1 - Style Sheet Editor").arg(file.fileName())); + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + restoreGeometry(settings.value("QSSEditor/geometry").toByteArray()); } -QSSEditorDialog::~QSSEditorDialog() -{ - delete m_ui; +QSSEditorDialog::~QSSEditorDialog(){ + delete m_ui; } -void QSSEditorDialog::save() -{ - QFile file(m_filePath); - file.open(QIODevice::WriteOnly); - file.write(m_ui->textEdit->toPlainText().toUtf8()); +void QSSEditorDialog::save(){ + QFile file(m_filePath); + file.open(QIODevice::WriteOnly); + file.write(m_ui->textEdit->toPlainText().toUtf8()); } -void QSSEditorDialog::hideEvent(QHideEvent *) -{ - QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); - settings.setValue("QSSEditor/geometry", saveGeometry()); +void QSSEditorDialog::hideEvent(QHideEvent *){ + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + settings.setValue("QSSEditor/geometry", saveGeometry()); } -void QSSEditorDialog::on_buttonBox_clicked(QAbstractButton *button) -{ - QDialogButtonBox::StandardButton id = m_ui->buttonBox->standardButton(button); - if(id == QDialogButtonBox::Ok) - { - save(); - accept(); - } - else if(id == QDialogButtonBox::Save) - { - save(); +void QSSEditorDialog::on_buttonBox_clicked(QAbstractButton *button){ + QDialogButtonBox::StandardButton id = m_ui->buttonBox->standardButton(button); + if(id == QDialogButtonBox::Ok){ + save(); + accept(); } - else - { - reject(); + else if(id == QDialogButtonBox::Save){ + save(); } + else{ + reject(); + } } diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h index e2a6c773..ea615e81 100644 --- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsseditordialog.h @@ -1,31 +1,3 @@ -/* - * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - #ifndef QSSEDITORDIALOG_H #define QSSEDITORDIALOG_H diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp index 10f21f48..c9bfc14a 100644 --- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.cpp @@ -1,31 +1,3 @@ -/* - * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - #include <QSettings> #include <QDir> #include <QInputDialog> @@ -40,193 +12,145 @@ #define QSS_FULL_PATH_ROLE (Qt::ItemDataRole(Qt::UserRole)) #define QSS_WRITABLE_ROLE (Qt::ItemDataRole(Qt::UserRole + 1)) -QSSPage::QSSPage(QWidget *parent) : - TabPage(parent), - m_ui(new Ui::QSSPage) -{ - m_ui->setupUi(this); - QDir("/").mkpath(lthemeengine::userStyleSheetPath()); - - m_menu = new QMenu(this); - m_menu->addAction(QIcon::fromTheme("accessories-text-editor"), tr("Edit"), this, SLOT(on_editButton_clicked())); - m_menu->addAction(tr("Rename"), this, SLOT(on_renameButton_clicked())); - m_menu->addSeparator(); - m_menu->addAction(QIcon::fromTheme("edit-delete"), tr("Remove"), this, SLOT(on_removeButton_clicked())); - - readSettings(); - - //icons - m_ui->createButton->setIcon(QIcon::fromTheme("document-new")); - m_ui->editButton->setIcon(QIcon::fromTheme("accessories-text-editor")); - m_ui->removeButton->setIcon(QIcon::fromTheme("edit-delete")); +QSSPage::QSSPage(QWidget *parent) : TabPage(parent), m_ui(new Ui::QSSPage){ + m_ui->setupUi(this); + QDir("/").mkpath(lthemeengine::userStyleSheetPath()); + m_menu = new QMenu(this); + m_menu->addAction(QIcon::fromTheme("accessories-text-editor"), tr("Edit"), this, SLOT(on_editButton_clicked())); + m_menu->addAction(tr("Rename"), this, SLOT(on_renameButton_clicked())); + m_menu->addSeparator(); + m_menu->addAction(QIcon::fromTheme("edit-delete"), tr("Remove"), this, SLOT(on_removeButton_clicked())); + readSettings(); + //icons + m_ui->createButton->setIcon(QIcon::fromTheme("document-new")); + m_ui->editButton->setIcon(QIcon::fromTheme("accessories-text-editor")); + m_ui->removeButton->setIcon(QIcon::fromTheme("edit-delete")); } -QSSPage::~QSSPage() -{ - delete m_ui; +QSSPage::~QSSPage(){ + delete m_ui; } -void QSSPage::writeSettings() -{ - QStringList styleSheets; - QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); - - for(int i = 0; i < m_ui->qssListWidget->count(); ++i) - { - QListWidgetItem *item = m_ui->qssListWidget->item(i); - if(item->checkState() == Qt::Checked) - styleSheets << item->data(QSS_FULL_PATH_ROLE).toString(); +void QSSPage::writeSettings(){ + QStringList styleSheets; + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + for(int i = 0; i < m_ui->qssListWidget->count(); ++i){ + QListWidgetItem *item = m_ui->qssListWidget->item(i); + if(item->checkState() == Qt::Checked) + styleSheets << item->data(QSS_FULL_PATH_ROLE).toString(); } - - settings.setValue("Interface/stylesheets", styleSheets); + settings.setValue("Interface/stylesheets", styleSheets); } -void QSSPage::on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *) -{ - if(current) - { - m_ui->editButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); - m_ui->removeButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); - m_ui->renameButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); +void QSSPage::on_qssListWidget_currentItemChanged(QListWidgetItem *current, QListWidgetItem *){ + if(current){ + m_ui->editButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); + m_ui->removeButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); + m_ui->renameButton->setEnabled(current->data(QSS_WRITABLE_ROLE).toBool()); } - else - { - m_ui->editButton->setEnabled(false); - m_ui->removeButton->setEnabled(false); - m_ui->renameButton->setEnabled(false); + else{ + m_ui->editButton->setEnabled(false); + m_ui->removeButton->setEnabled(false); + m_ui->renameButton->setEnabled(false); } } -void QSSPage::on_createButton_clicked() -{ - QString name = QInputDialog::getText(this, tr("Enter Style Sheet Name"), tr("File name:")); - if(name.isEmpty()) - return; - +void QSSPage::on_createButton_clicked(){ + QString name = QInputDialog::getText(this, tr("Enter Style Sheet Name"), tr("File name:")); + if(name.isEmpty()) + return; if(!name.endsWith(".qss", Qt::CaseInsensitive)) - name.append(".qss"); - - QString filePath = lthemeengine::userStyleSheetPath() + name; - - if(QFile::exists(filePath)) - { + name.append(".qss"); + QString filePath = lthemeengine::userStyleSheetPath() + name; + if(QFile::exists(filePath)){ QMessageBox::warning(this, tr("Error"), tr("The file \"%1\" already exists").arg(filePath)); return; - } - - //creating empty file - QFile file(filePath); - file.open(QIODevice::WriteOnly); - file.close(); - - //creating item - QFileInfo info(filePath); - QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); - item->setToolTip(info.filePath()); - item->setData(QSS_FULL_PATH_ROLE, info.filePath()); - item->setData(QSS_WRITABLE_ROLE, info.isWritable()); - item->setCheckState(Qt::Unchecked); + } + //creating empty file + QFile file(filePath); + file.open(QIODevice::WriteOnly); + file.close(); + //creating item + QFileInfo info(filePath); + QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); + item->setToolTip(info.filePath()); + item->setData(QSS_FULL_PATH_ROLE, info.filePath()); + item->setData(QSS_WRITABLE_ROLE, info.isWritable()); + item->setCheckState(Qt::Unchecked); } -void QSSPage::on_editButton_clicked() -{ - QListWidgetItem *item = m_ui->qssListWidget->currentItem(); - if(item) - { - QSSEditorDialog dialog(item->data(QSS_FULL_PATH_ROLE).toString(), this); - dialog.exec(); +void QSSPage::on_editButton_clicked(){ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(item){ + QSSEditorDialog dialog(item->data(QSS_FULL_PATH_ROLE).toString(), this); + dialog.exec(); } } -void QSSPage::on_removeButton_clicked() -{ - QListWidgetItem *item = m_ui->qssListWidget->currentItem(); - if(!item) - return; - - int button = QMessageBox::question(this, tr("Confirm Remove"), - tr("Are you sure you want to remove style sheet \"%1\"?") - .arg(item->text()), - QMessageBox::Yes | QMessageBox::No); - if(button == QMessageBox::Yes) - { - QFile::remove(item->data(QSS_FULL_PATH_ROLE).toString()); - delete item; - } +void QSSPage::on_removeButton_clicked(){ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(!item) + return; + int button = QMessageBox::question(this, tr("Confirm Remove"),tr("Are you sure you want to remove style sheet \"%1\"?").arg(item->text()), QMessageBox::Yes | QMessageBox::No); + if(button == QMessageBox::Yes){ + QFile::remove(item->data(QSS_FULL_PATH_ROLE).toString()); + delete item; + } } -void QSSPage::readSettings() -{ - //load stylesheets - m_ui->qssListWidget->clear(); - findStyleSheets(lthemeengine::userStyleSheetPath()); - findStyleSheets(lthemeengine::sharedStyleSheetPath().join(", ")); - - QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); - QStringList styleSheets = settings.value("Interface/stylesheets").toStringList(); - for(int i = 0; i < m_ui->qssListWidget->count(); ++i) - { - QListWidgetItem *item = m_ui->qssListWidget->item(i); - if(styleSheets.contains(item->data(QSS_FULL_PATH_ROLE).toString())) - item->setCheckState(Qt::Checked); - else - item->setCheckState(Qt::Unchecked); +void QSSPage::readSettings(){ + //load stylesheets + m_ui->qssListWidget->clear(); + findStyleSheets(lthemeengine::userStyleSheetPath()); + findStyleSheets(lthemeengine::sharedStyleSheetPath().join(", ")); + QSettings settings(lthemeengine::configFile(), QSettings::IniFormat); + QStringList styleSheets = settings.value("Interface/stylesheets").toStringList(); + for(int i = 0; i < m_ui->qssListWidget->count(); ++i){ + QListWidgetItem *item = m_ui->qssListWidget->item(i); + if(styleSheets.contains(item->data(QSS_FULL_PATH_ROLE).toString())) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); } } -void QSSPage::findStyleSheets(const QString &path) -{ - QDir dir(path); - dir.setFilter(QDir::Files); - dir.setNameFilters(QStringList() << "*.qss"); - - foreach (QFileInfo info, dir.entryInfoList()) - { - QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); - item->setToolTip(info.filePath()); - item->setData(QSS_FULL_PATH_ROLE, info.filePath()); - item->setData(QSS_WRITABLE_ROLE, info.isWritable()); +void QSSPage::findStyleSheets(const QString &path){ + QDir dir(path); + dir.setFilter(QDir::Files); + dir.setNameFilters(QStringList() << "*.qss"); + foreach (QFileInfo info, dir.entryInfoList()){ + QListWidgetItem *item = new QListWidgetItem(info.fileName(), m_ui->qssListWidget); + item->setToolTip(info.filePath()); + item->setData(QSS_FULL_PATH_ROLE, info.filePath()); + item->setData(QSS_WRITABLE_ROLE, info.isWritable()); } } -void QSSPage::on_renameButton_clicked() -{ - QListWidgetItem *item = m_ui->qssListWidget->currentItem(); - if(!item) - return; - - QString name = QInputDialog::getText(this, tr("Rename Style Sheet"), tr("Style sheet name:"), - QLineEdit::Normal, item->text(), 0); +void QSSPage::on_renameButton_clicked(){ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(!item) + return; + QString name = QInputDialog::getText(this, tr("Rename Style Sheet"), tr("Style sheet name:"), QLineEdit::Normal, item->text(), 0); if(name.isEmpty()) - return; - - if(!m_ui->qssListWidget->findItems(name, Qt::MatchExactly).isEmpty()) - { - QMessageBox::warning(this, tr("Error"), tr("The style sheet \"%1\" already exists").arg(name)); - return; - } - - if(!name.endsWith(".qss", Qt::CaseInsensitive)) - name.append(".qss"); - - QString newPath = lthemeengine::userStyleSheetPath() + name; - - if(!QFile::rename(item->data(QSS_FULL_PATH_ROLE).toString(), newPath)) - { + return; + if(!m_ui->qssListWidget->findItems(name, Qt::MatchExactly).isEmpty()){ + QMessageBox::warning(this, tr("Error"), tr("The style sheet \"%1\" already exists").arg(name)); + return; + } + if(!name.endsWith(".qss", Qt::CaseInsensitive)) name.append(".qss"); + QString newPath = lthemeengine::userStyleSheetPath() + name; + if(!QFile::rename(item->data(QSS_FULL_PATH_ROLE).toString(), newPath)){ QMessageBox::warning(this, tr("Error"), tr("Unable to rename file")); - return; - } - - item->setText(name); - item->setData(QSS_FULL_PATH_ROLE, newPath); - item->setToolTip(newPath); + return; + } + item->setText(name); + item->setData(QSS_FULL_PATH_ROLE, newPath); + item->setToolTip(newPath); } -void QSSPage::on_qssListWidget_customContextMenuRequested(const QPoint &pos) -{ - QListWidgetItem *item = m_ui->qssListWidget->currentItem(); - if(item && item->data(QSS_WRITABLE_ROLE).toBool()) - { - m_menu->exec(m_ui->qssListWidget->viewport()->mapToGlobal(pos)); - } +void QSSPage::on_qssListWidget_customContextMenuRequested(const QPoint &pos){ + QListWidgetItem *item = m_ui->qssListWidget->currentItem(); + if(item && item->data(QSS_WRITABLE_ROLE).toBool()){ + m_menu->exec(m_ui->qssListWidget->viewport()->mapToGlobal(pos)); + } } diff --git a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h index 665f68c0..1fe0ed73 100644 --- a/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h +++ b/src-qt5/core/lumina-theme-engine/src/lthemeengine/qsspage.h @@ -1,31 +1,3 @@ -/* - * Copyright (c) 2014-2017, Ilya Kotov <forkotov02@hotmail.ru> - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - #ifndef QSSPAGE_H #define QSSPAGE_H |