/**
* \file
*
* \author Mattia Basaglia
*
* \copyright Copyright (C) 2013-2020 Mattia Basaglia
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see .
*
*/
#ifndef COLOR_WIDGETS_COLOR_PALETTE_MODEL_HPP
#define COLOR_WIDGETS_COLOR_PALETTE_MODEL_HPP
#include
#include "color_palette.hpp"
namespace color_widgets {
class QCP_EXPORT ColorPaletteModel : public QAbstractListModel
{
Q_OBJECT
/**
* \brief List of directories to be scanned for palette files
*/
Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths NOTIFY searchPathsChanged)
/**
* \brief Default directory to be used when saving a palette
*/
Q_PROPERTY(QString savePath READ savePath WRITE setSavePath NOTIFY savePathChanged)
/**
* \brief Size of the icon used for the palette previews
*/
Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
public:
ColorPaletteModel();
~ColorPaletteModel();
int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool removeRows(int row, int count, const QModelIndex & parent = QModelIndex()) Q_DECL_OVERRIDE;
QString savePath() const;
QStringList searchPaths() const;
QSize iconSize() const;
/**
* \brief Number of palettes
*/
int count() const;
/**
* \brief Returns a reference to the first palette with the given name
* \pre hasPalette(name)
*/
const ColorPalette& palette(const QString& name) const;
/**
* \brief Whether a palette with the given name exists in the model
*/
bool hasPalette(const QString& name) const;
/**
* \brief Get the palette at the given index (row)
* \pre 0 <= index < count()
*/
const ColorPalette& palette(int index) const;
/**
* \brief Updates an existing palette
* \param index Palette index
* \param palette New palette
* \param save Whether to save the palette to the filesystem
*
* Saving will try: (in this order)
* * To overwrite the file pointed by the old palette
* * To write to the new palette file name
* * To create a file in the save path
* If all of the above fail, the palette will be replaced interally
* but not on the filesystem
*
* \returns \b true if the palette has been successfully updated (and saved)
*/
bool updatePalette(int index, const ColorPalette& palette, bool save = true);
/**
* \brief Remove a palette from the model and optionally from the filesystem
* \returns \b true if the palette has been successfully removed
*/
bool removePalette(int index, bool remove_file = true);
/**
* \brief Remove a palette to the model and optionally to the filesystem
* \returns \b true if the palette has been successfully added
*/
bool addPalette(const ColorPalette& palette, bool save = true);
/**
* \brief The index of the palette with the given file name
* \returns -1 if none is found
*/
int indexFromFile(const QString& filename) const;
public Q_SLOTS:
void setSavePath(const QString& savePath);
void setSearchPaths(const QStringList& searchPaths);
void addSearchPath(const QString& path);
void setIconSize(const QSize& iconSize);
/**
* \brief Load palettes files found in the search paths
*/
void load();
Q_SIGNALS:
void savePathChanged(const QString& savePath);
void searchPathsChanged(const QStringList& searchPaths);
void iconSizeChanged(const QSize& iconSize);
private:
class Private;
Private* p;
};
} // namespace color_widgets
#endif // COLOR_WIDGETS_COLOR_PALETTE_MODEL_HPP