LibrePCB Developers Documentation
Loading...
Searching...
No Matches
librariesmodel.h
Go to the documentation of this file.
1/*
2 * LibrePCB - Professional EDA for everyone!
3 * Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
4 * https://librepcb.org/
5 *
6 * This program is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20#ifndef LIBREPCB_EDITOR_LIBRARIESMODEL_H
21#define LIBREPCB_EDITOR_LIBRARIESMODEL_H
22
23/*******************************************************************************
24 * Includes
25 ******************************************************************************/
26#include "appwindow.h"
27
30
31#include <QtCore>
32
33#include <vector>
34
35/*******************************************************************************
36 * Namespace / Forward Declarations
37 ******************************************************************************/
38namespace librepcb {
39
40class ApiEndpoint;
41class Workspace;
42
43namespace editor {
44
45class LibraryDownload;
46
47/*******************************************************************************
48 * Class LibrariesModel
49 ******************************************************************************/
50
54class LibrariesModel : public QObject,
55 public slint::Model<ui::LibraryInfoData> {
56 Q_OBJECT
57
58public:
59 // Types
60 enum class Mode { LocalLibs, RemoteLibs };
61
62 // Constructors / Destructor
63 LibrariesModel() = delete;
64 LibrariesModel(const LibrariesModel& other) = delete;
65 explicit LibrariesModel(Workspace& ws, Mode mode,
66 QObject* parent = nullptr) noexcept;
67 virtual ~LibrariesModel() noexcept;
68
69 // General Methods
70 ui::LibraryListData getUiData() const noexcept;
71 void setOnlineVersions(const QHash<Uuid, Version>& versions) noexcept;
72 void ensurePopulated(bool withIcons) noexcept;
73 void highlightLibraryOnNextRescan(const FilePath& fp) noexcept;
74 void checkForUpdates() noexcept;
75 void cancelUpdateCheck() noexcept;
76 void toggleAll() noexcept;
77 void applyChanges() noexcept;
78 void cancel() noexcept;
79
80 // Implementations
81 std::size_t row_count() const override;
82 std::optional<ui::LibraryInfoData> row_data(std::size_t i) const override;
83 void set_row_data(std::size_t i,
84 const ui::LibraryInfoData& data) noexcept override;
85
86 // Operator Overloadings
87 LibrariesModel& operator=(const LibrariesModel& rhs) = delete;
88
89signals:
90 void uiDataChanged(ui::LibraryListData data);
91 void onlineVersionsAvailable(const QHash<Uuid, Version>& versions);
93
94private:
95 void updateLibraries(bool resetHighlight = true) noexcept;
96 void requestOnlineLibraries(bool forceNoCache) noexcept;
97 void onlineLibraryListReceived(QList<ApiEndpoint::Library> libs) noexcept;
98 void requestMissingOnlineIcons() noexcept;
99 void onlineIconReceived(const Uuid& uuid, const QByteArray& data) noexcept;
100 void errorWhileFetchingLibraryList(QString errorMsg) noexcept;
101 void apiEndpointOperationFinished() noexcept;
102 void updateMergedLibraries() noexcept;
103 void updateCheckStates(bool notify) noexcept;
104 void checkMissingDependenciesOfLibs() noexcept;
105 void uncheckLibsWithUnmetDependencies() noexcept;
106 bool isLibraryChecked(const ui::LibraryInfoData& lib) const noexcept;
107 static bool isMarkedForInstall(const ui::LibraryInfoData& lib) noexcept;
108 static bool isMarkedForUpdate(const ui::LibraryInfoData& lib) noexcept;
109 static bool isMarkedForUninstall(const ui::LibraryInfoData& lib) noexcept;
110 std::optional<std::size_t> indexOf(const Uuid& uuid) noexcept;
111
113 const Mode mMode;
115 std::vector<ui::LibraryInfoData> mInstalledLibs;
118 QStringList mOnlineLibsErrors;
119 std::vector<ui::LibraryInfoData> mMergedLibs;
120 QHash<Uuid, bool> mCheckStates;
121
123 QHash<Uuid, QPixmap> mIcons;
124 QHash<slint::SharedString, slint::SharedString> mOnlineVersions;
126
129};
130
131/*******************************************************************************
132 * End of File
133 ******************************************************************************/
134
135} // namespace editor
136} // namespace librepcb
137
138#endif
Access to a LibrePCB API endpoint.
Definition apiendpoint.h:45
This class represents absolute, well-formatted paths to files or directories.
Definition filepath.h:127
The Library class represents a library directory.
Definition library.h:46
The Uuid class is a replacement for QUuid to get UUID strings without {} braces.
Definition uuid.h:56
The Version class represents a version number in the format "1.42.7".
Definition version.h:58
The Workspace class represents a workspace with all its data (library, projects, settings,...
Definition workspace.h:54
The LibrariesModel class.
Definition librariesmodel.h:55
QStringList mInstalledLibsErrors
Either local or remote.
Definition librariesmodel.h:116
void checkMissingDependenciesOfLibs() noexcept
Definition librariesmodel.cpp:551
QHash< Uuid, ApiEndpoint::Library > mOnlineLibs
Definition librariesmodel.h:117
void aboutToUninstallLibrary(const FilePath &fp)
QList< std::shared_ptr< LibraryDownload > > mDownloadsInProgress
Definition librariesmodel.h:128
void highlightLibraryOnNextRescan(const FilePath &fp) noexcept
Definition librariesmodel.cpp:156
void cancel() noexcept
Definition librariesmodel.cpp:282
static bool isMarkedForUpdate(const ui::LibraryInfoData &lib) noexcept
Definition librariesmodel.cpp:614
void uiDataChanged(ui::LibraryListData data)
QHash< Uuid, bool > mCheckStates
Definition librariesmodel.h:120
void checkForUpdates() noexcept
Definition librariesmodel.cpp:160
std::vector< ui::LibraryInfoData > mMergedLibs
Definition librariesmodel.h:119
void onlineIconReceived(const Uuid &uuid, const QByteArray &data) noexcept
Definition librariesmodel.cpp:457
void requestMissingOnlineIcons() noexcept
Definition librariesmodel.cpp:441
Mode
Definition librariesmodel.h:60
bool isLibraryChecked(const ui::LibraryInfoData &lib) const noexcept
Definition librariesmodel.cpp:603
void errorWhileFetchingLibraryList(QString errorMsg) noexcept
Definition librariesmodel.cpp:471
void ensurePopulated(bool withIcons) noexcept
Definition librariesmodel.cpp:139
void apiEndpointOperationFinished() noexcept
Definition librariesmodel.cpp:481
void uncheckLibsWithUnmetDependencies() noexcept
Definition librariesmodel.cpp:577
void toggleAll() noexcept
Definition librariesmodel.cpp:174
void updateLibraries(bool resetHighlight=true) noexcept
Definition librariesmodel.cpp:334
bool mRequestIcons
Definition librariesmodel.h:122
void updateCheckStates(bool notify) noexcept
Definition librariesmodel.cpp:538
QStringList mOnlineLibsErrors
Definition librariesmodel.h:118
QHash< Uuid, QPixmap > mIcons
Definition librariesmodel.h:123
bool mInitialized
Definition librariesmodel.h:114
void onlineLibraryListReceived(QList< ApiEndpoint::Library > libs) noexcept
Definition librariesmodel.cpp:424
std::size_t row_count() const override
Definition librariesmodel.cpp:299
ui::LibraryListData getUiData() const noexcept
Definition librariesmodel.cpp:84
std::vector< ui::LibraryInfoData > mInstalledLibs
Definition librariesmodel.h:115
void cancelUpdateCheck() noexcept
Definition librariesmodel.cpp:166
LibrariesModel(const LibrariesModel &other)=delete
void applyChanges() noexcept
Definition librariesmodel.cpp:201
std::optional< ui::LibraryInfoData > row_data(std::size_t i) const override
Definition librariesmodel.cpp:303
Workspace & mWorkspace
Definition librariesmodel.h:112
static bool isMarkedForUninstall(const ui::LibraryInfoData &lib) noexcept
Definition librariesmodel.cpp:619
void requestOnlineLibraries(bool forceNoCache) noexcept
Definition librariesmodel.cpp:403
std::optional< std::size_t > indexOf(const Uuid &uuid) noexcept
Definition librariesmodel.cpp:624
void onlineVersionsAvailable(const QHash< Uuid, Version > &versions)
void set_row_data(std::size_t i, const ui::LibraryInfoData &data) noexcept override
Definition librariesmodel.cpp:309
void setOnlineVersions(const QHash< Uuid, Version > &versions) noexcept
Definition librariesmodel.cpp:113
const Mode mMode
Definition librariesmodel.h:113
void updateMergedLibraries() noexcept
Definition librariesmodel.cpp:492
QHash< slint::SharedString, slint::SharedString > mOnlineVersions
Definition librariesmodel.h:124
static bool isMarkedForInstall(const ui::LibraryInfoData &lib) noexcept
Definition librariesmodel.cpp:609
std::optional< FilePath > mHighlightedLib
Definition librariesmodel.h:125
QList< std::shared_ptr< ApiEndpoint > > mApiEndpointsInProgress
Definition librariesmodel.h:127
The LibraryDownload class.
Definition librarydownload.h:48
Definition occmodel.cpp:77
Definition uuid.h:186