src/libraries.h

Fri, 01 Jul 2022 16:46:43 +0300

author
Teemu Piippo <teemu.s.piippo@gmail.com>
date
Fri, 01 Jul 2022 16:46:43 +0300
changeset 312
2637134bc37c
parent 300
3a4b132b8353
child 380
16f6717a218b
permissions
-rw-r--r--

Fix right click to delete not really working properly
Instead of removing the point that had been added, it would remove
the point that is being drawn, which would cause it to overwrite the
previous point using the new point, causing a bit of a delay

/*
 *  LDForge: LDraw parts authoring CAD
 *  Copyright (C) 2013 - 2020 Teemu Piippo
 *
 *  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 <http://www.gnu.org/licenses/>.
 */

#pragma once
#include <QDir>
#include <QAbstractTableModel>
#include "src/basics.h"
#include "src/colors.h"

class QSettings;

struct Library
{
	enum Role
	{
		OfficialLibrary,
		UnofficialLibrary,
		WorkingLibrary,
	} role;
	QDir path;
	static QString libraryRoleName(const Role role);
	static bool isValidRole(const Role role);
	constexpr static const Role allRoles[] = {OfficialLibrary, UnofficialLibrary, WorkingLibrary};
};

bool operator==(const Library& one, const Library& other);

Q_DECLARE_METATYPE(Library)
Q_DECLARE_METATYPE(Library::Role)
QDataStream &operator<<(QDataStream&, const Library&);
QDataStream &operator>>(QDataStream&, Library&);
using Libraries = QVector<Library>;

class LibrariesModel : public QAbstractTableModel
{
	Q_OBJECT
public:
	LibrariesModel(QObject* parent = nullptr);
	auto begin() const { return this->libraries.begin(); }
	auto end() const { return this->libraries.end(); }
	QString findFile(QString fileName) const;
	void addLibrary(const Library& library);
	void removeLibrary(const index_t libraryIndex);
	const Library& library(index_t libraryIndex) const;
	void setLibraryPath(index_t libraryIndex, const QDir& path);
	void setLibraryRole(index_t libraryIndex, const Library::Role role);
	void restoreFromSettings();
	void storeToSettings();
	index_t count() const;
	void moveLibrary(const index_t libraryFromIndex, const index_t libraryToIndex);
	// Definitions for QAbstractTableModel
	Qt::ItemFlags flags(const QModelIndex& index) const override;
	QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
	QVariant headerData(
		int section,
		Qt::Orientation orientation,
		int role = Qt::DisplayRole) const override;
	int rowCount(const QModelIndex&) const override;
	int columnCount(const QModelIndex&) const override;
	bool isValidIndex(const index_t libraryIndex) const;
	ColorTable loadColorTable(QTextStream& errors) const;
private:
	enum Column
	{
		RoleColumn,
		PathColumn
	};
	void signalLibraryChange(const index_t library);
	Libraries libraries;
};

mercurial