/***********************************************************************
*
* Copyright (C) 2014, 2015 wereturtle
*
* 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 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*
***********************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include "StyleSheetManagerDialog.h"
#include "MessageBoxHelper.h"
StyleSheetManagerDialog::StyleSheetManagerDialog
(
const QStringList& initialStyleSheets,
QWidget* parent
) : QDialog(parent)
{
this->setWindowTitle(tr("Custom Style Sheets"));
QGridLayout* layout = new QGridLayout();
styleSheets = initialStyleSheets;
styleSheets.sort();
styleSheetListWidget = new QListWidget(this);
styleSheetListWidget->setSelectionMode(QAbstractItemView::ExtendedSelection);
// Populate the list widget.
foreach (QString styleSheetPath, styleSheets)
{
styleSheetListWidget->addItem(styleSheetPath);
if (!QFileInfo(styleSheetPath).exists())
{
// If the style sheet file went missing, set it's font color to
// red in the list.
//
styleSheetListWidget->item(styleSheetListWidget->count() - 1)->setForeground
(QColor(Qt::red));
}
}
QDialogButtonBox* buttonBox = new QDialogButtonBox(Qt::Horizontal, this);
QPushButton* addButton = new QPushButton("+");
addButton->setToolTip(tr("Add new style sheet"));
QPushButton* removeButton = new QPushButton("-");
removeButton->setToolTip(tr("Remove selected style sheet(s) from list. "
"(No files will be deleted from the hard disk.)"));
buttonBox->addButton(addButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(removeButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(QDialogButtonBox::Ok);
buttonBox->addButton(QDialogButtonBox::Cancel);
layout->addWidget(styleSheetListWidget, 0, 0, 1, 1);
layout->addWidget(buttonBox, 1, 0, 1, 1);
this->setLayout(layout);
connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
connect(addButton, SIGNAL(clicked()), this, SLOT(addNewStyleSheet()));
connect(removeButton, SIGNAL(clicked()), this, SLOT(removeSelectedStyleSheet()));
}
StyleSheetManagerDialog::~StyleSheetManagerDialog()
{
}
QStringList StyleSheetManagerDialog::getStyleSheets() const
{
return styleSheets;
}
void StyleSheetManagerDialog::accept()
{
this->styleSheets.sort();
QDialog::accept();
}
void StyleSheetManagerDialog::reject()
{
QDialog::reject();
}
void StyleSheetManagerDialog::addNewStyleSheet()
{
QStringList filePaths =
QFileDialog::getOpenFileNames
(
this,
tr("Select CSS File"),
QString(),
tr("CSS") + QString(" (*.css);;") + tr("All") + QString(" (*)")
);
foreach (QString filePath, filePaths)
{
// Add each new file to the list if it isn't a duplicate.
if (!this->styleSheets.contains(filePath))
{
this->styleSheets.append(filePath);
this->styleSheetListWidget->addItem(filePath);
}
}
}
void StyleSheetManagerDialog::removeSelectedStyleSheet()
{
QList selectedStyleSheets =
styleSheetListWidget->selectedItems();
if (selectedStyleSheets.isEmpty())
{
// Ignore if no style sheet is selected.
return;
}
int result =
MessageBoxHelper::question
(
this,
tr("Don't worry! No files will be deleted from the hard disk. "
"But are you sure you wish to remove the selected style "
"sheet(s) from the list?"),
QString(),
QMessageBox::Yes | QMessageBox::No,
QMessageBox::No
);
if (QMessageBox::Yes == result)
{
for (int i = 0; i < selectedStyleSheets.size(); i++)
{
styleSheets.removeAll(selectedStyleSheets[i]->text());
int row = styleSheetListWidget->row(selectedStyleSheets[i]);
QListWidgetItem* item = styleSheetListWidget->takeItem(row);
if (NULL != item)
{
delete item;
item = NULL;
}
}
}
}