Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
c43996719This file is pinned to the selected release. Download the original to open it in your design tool.
/*
* LibrePCB - Professional EDA for everyone!
* Copyright (C) 2013 LibrePCB Developers, see AUTHORS.md for contributors.
* https://librepcb.org/
*
* 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/>.
*/
#ifndef LIBREPCB_EDITOR_GUIAPPLICATION_H
#define LIBREPCB_EDITOR_GUIAPPLICATION_H
/*******************************************************************************
* Includes
******************************************************************************/
#include "ui.h"
#include "utils/uiobjectlist.h"
#include <librepcb/core/fileio/filepath.h>
#include <QtCore>
#include <memory>
/*******************************************************************************
* Namespace / Forward Declarations
******************************************************************************/
namespace librepcb {
class RuleCheckMessage;
class Workspace;
struct UiTheme;
namespace editor {
class GraphicsLayerList;
class LibrariesModel;
class LibraryEditor;
class LibraryElementCache;
class MainWindow;
class Notification;
class NotificationsModel;
class OrganizationsDbModel;
class ProjectEditor;
class ProjectLibraryUpdater;
class QuickAccessModel;
class SlintKeyEventTextBuilder;
/*******************************************************************************
* Class GuiApplication
******************************************************************************/
/**
* @brief The GuiApplication class
*/
class GuiApplication final : public QObject {
Q_OBJECT
public:
// Constructors / Destructor
GuiApplication() = delete;
GuiApplication(const GuiApplication& other) = delete;
explicit GuiApplication(Workspace& ws, bool fileFormatIsOutdated,
const UiTheme* const& theme,
QObject* parent = nullptr) noexcept;
~GuiApplication() noexcept override;
// Workspace
Workspace& getWorkspace() noexcept { return mWorkspace; }
QuickAccessModel& getQuickAccess() noexcept { return *mQuickAccessModel; }
void openFile(const FilePath& fp, QWidget* parent) noexcept;
void switchWorkspace(QWidget* parent) noexcept;
void execWorkspaceSettingsDialog(QWidget* parent) noexcept;
void addExampleProjects(QWidget* parent) noexcept;
// General
const UiTheme& getTheme() const noexcept { return *mTheme; }
const GraphicsLayerList& getPreviewLayers() const noexcept {
return *mPreviewLayers;
}
const LibraryElementCache& getLibraryElementCache() const noexcept {
return *mLibraryElementCache;
}
// Libraries
LibrariesModel& getLocalLibraries() noexcept { return *mLocalLibraries; }
LibrariesModel& getRemoteLibraries() noexcept { return *mRemoteLibraries; }
const QVector<std::shared_ptr<LibraryEditor>>& getLibraries() noexcept {
return mLibraries->values();
}
std::shared_ptr<LibraryEditor> getLibrary(const FilePath& libDir) noexcept;
std::shared_ptr<LibraryEditor> openLibrary(const FilePath& libDir) noexcept;
void closeLibrary(const FilePath& libDir) noexcept;
bool requestClosingAllLibraries() noexcept;
// Projects
const QVector<std::shared_ptr<ProjectEditor>>& getProjects() noexcept {
return mProjects->values();
}
void createProject(const FilePath& parentDir, bool eagleImport,
QWidget* parent) noexcept;
/**
* @brief Open a project with the editor
*
* @param fp The filepath to the *.lpp project file to open. If
* invalid, a file dialog will be shown to select it.
* @param parent Parent widget for dialogs.
*
* @return The pointer to the opened project editor (nullptr on error)
*/
std::shared_ptr<ProjectEditor> openProject(FilePath fp,
QWidget* parent) noexcept;
void closeProject(int index) noexcept;
bool requestClosingAllProjects() noexcept;
void openProjectLibraryUpdater(const FilePath& project) noexcept;
// Window Management
NotificationsModel& getNotifications() noexcept { return *mNotifications; }
std::shared_ptr<MainWindow> createNewWindow(int id = -1,
int projectIndex = -1) noexcept;
std::shared_ptr<MainWindow> getCurrentWindow() noexcept;
int getWindowCount() const noexcept;
void stopWindowStateAutosaveTimer() noexcept;
// General Methods
void exec();
void quit(QPointer<QWidget> parent) noexcept;
// Operator Overloadings
GuiApplication& operator=(const GuiApplication& rhs) = delete;
signals:
void statusBarMessageChanged(const QString& message, int timeoutMs);
void librariesContainStandardComponentsChanged(bool contains);
protected:
bool eventFilter(QObject* watched, QEvent* event) noexcept override;
private:
void openProjectsPassedByCommandLine() noexcept;
void openProjectPassedByOs(const QString& file, bool silent = false) noexcept;
void highlightErcMessage(std::shared_ptr<const RuleCheckMessage> msg,
bool zoomTo, int windowId) noexcept;
void updateLibrariesContainStandardComponents() noexcept;
void updateNoLibrariesInstalledNotification() noexcept;
void updateDesktopIntegrationNotification() noexcept;
void moveTab(int srcWindowId, int srcSectionIndex, int srcTabIndex,
int dstWindowId, int dstSectionIndex, int dstTabIndex,
bool forceSwitchToTab) noexcept;
std::shared_ptr<MainWindow> getWindowById(int id) noexcept;
Workspace& mWorkspace;
const UiTheme* const& mTheme;
bool mLibrariesContainStandardComponents;
std::unique_ptr<GraphicsLayerList> mPreviewLayers;
std::shared_ptr<LibraryElementCache> mLibraryElementCache;
std::shared_ptr<NotificationsModel> mNotifications;
std::shared_ptr<Notification> mNotificationNoLibrariesInstalled;
std::shared_ptr<Notification> mNotificationDesktopIntegration;
std::shared_ptr<QuickAccessModel> mQuickAccessModel;
std::shared_ptr<LibrariesModel> mLocalLibraries;
std::shared_ptr<LibrariesModel> mRemoteLibraries;
std::unique_ptr<SlintKeyEventTextBuilder> mLibrariesFilter;
std::shared_ptr<UiObjectList<ProjectEditor, ui::ProjectData>> mProjects;
std::shared_ptr<UiObjectList<LibraryEditor, ui::LibraryData>> mLibraries;
std::unique_ptr<ProjectLibraryUpdater> mProjectLibraryUpdater;
std::shared_ptr<UiObjectList<MainWindow, int>> mWindows;
QTimer mSaveOpenedWindowsCountdown;
// Cache
std::weak_ptr<OrganizationsDbModel> mOrganizationsWithPcbDesignRules;
};
/*******************************************************************************
* End of File
******************************************************************************/
} // namespace editor
} // namespace librepcb
#endif