RedPanda-CPP/RedPandaIDE/iconsmanager.h

194 lines
5.3 KiB
C++

/*
* Copyright (C) 2020-2022 Roy Qu (royqh1979@gmail.com)
*
* 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 <https://www.gnu.org/licenses/>.
*/
#ifndef ICONSMANAGER_H
#define ICONSMANAGER_H
#include <QMap>
#include <QObject>
#include <QPixmap>
#include <memory>
#include "parser/parserutils.h"
struct IconSet {
QString name;
QString displayName;
};
using PIconSet = std::shared_ptr<IconSet>;
class QToolButton;
class QPushButton;
class IconsManager : public QObject
{
Q_OBJECT
public:
using PPixmap = std::shared_ptr<QPixmap>;
enum IconName {
GUTTER_SYNTAX_ERROR,
GUTTER_SYNTAX_WARNING,
GUTTER_BREAKPOINT,
GUTTER_ACTIVEBREAKPOINT,
GUTTER_BOOKMARK,
PARSER_TYPE,
PARSER_CLASS,
PARSER_NAMESPACE,
PARSER_DEFINE,
PARSER_ENUM,
PARSER_GLOBAL_METHOD,
PARSER_INHERITED_PROTECTED_METHOD,
PARSER_INHERITED_METHOD,
PARSER_PROTECTED_METHOD,
PARSER_PUBLIC_METHOD,
PARSER_PRIVATE_METHOD,
PARSER_GLOBAL_VAR,
PARSER_INHERITED_PROTECTD_VAR,
PARSER_INHERITED_VAR,
PARSER_PROTECTED_VAR,
PARSER_PUBLIC_VAR,
PARSER_PRIVATE_VAR,
PARSER_KEYWORD,
PARSER_CODE_SNIPPET,
PARSER_LOCAL_VAR,
ACTION_MISC_BACK,
ACTION_MISC_FORWARD,
ACTION_MISC_ADD,
ACTION_MISC_REMOVE,
ACTION_MISC_GEAR,
ACTION_MISC_CROSS,
ACTION_MISC_FOLDER,
ACTION_MISC_TERM,
ACTION_MISC_CLEAN,
ACTION_MISC_VALIDATE,
ACTION_MISC_RENAME,
ACTION_MISC_HELP,
ACTION_FILE_NEW,
ACTION_FILE_OPEN,
ACTION_FILE_OPEN_FOLDER,
ACTION_FILE_SAVE,
ACTION_FILE_SAVE_AS,
ACTION_FILE_SAVE_ALL,
ACTION_FILE_CLOSE,
ACTION_FILE_CLOSE_ALL,
ACTION_FILE_PRINT,
ACTION_FILE_PROPERTIES,
ACTION_FILE_LOCATE,
ACTION_PROJECT_NEW,
ACTION_PROJECT_SAVE,
ACTION_PROJECT_CLOSE,
ACTION_PROJECT_NEW_FILE,
ACTION_PROJECT_ADD_FILE,
ACTION_PROJECT_REMOVE_FILE,
ACTION_PROJECT_PROPERTIES,
ACTION_EDIT_UNDO,
ACTION_EDIT_REDO,
ACTION_EDIT_CUT,
ACTION_EDIT_COPY,
ACTION_EDIT_PASTE,
ACTION_EDIT_INDENT,
ACTION_EDIT_UNINDENT,
ACTION_EDIT_SEARCH,
ACTION_EDIT_REPLACE,
ACTION_EDIT_SEARCH_IN_FILES,
ACTION_EDIT_SORT_BY_NAME,
ACTION_EDIT_SORT_BY_TYPE,
ACTION_EDIT_SHOW_INHERITED,
ACTION_CODE_BACK,
ACTION_CODE_FORWARD,
ACTION_CODE_ADD_BOOKMARK,
ACTION_CODE_REMOVE_BOOKMARK,
ACTION_CODE_REFORMAT,
ACTION_RUN_COMPILE,
ACTION_RUN_COMPILE_RUN,
ACTION_RUN_RUN,
ACTION_RUN_REBUILD,
ACTION_RUN_OPTIONS,
ACTION_RUN_DEBUG,
ACTION_RUN_STEP_OVER,
ACTION_RUN_STEP_INTO,
ACTION_RUN_STEP_OUT,
ACTION_RUN_RUN_TO_CURSOR,
ACTION_RUN_CONTINUE,
ACTION_RUN_STOP,
ACTION_RUN_ADD_WATCH,
ACTION_RUN_REMOVE_WATCH,
ACTION_RUN_STEP_OVER_INSTRUCTION,
ACTION_RUN_STEP_INTO_INSTRUCTION,
ACTION_RUN_INTERRUPT,
ACTION_VIEW_MAXIMUM,
ACTION_VIEW_CLASSBROWSER,
ACTION_VIEW_FILES,
ACTION_VIEW_COMPILELOG,
ACTION_VIEW_BOOKMARK,
ACTION_VIEW_TODO,
ACTION_HELP_ABOUT,
ACTION_PROBLEM_PROBLEM,
ACTION_PROBLEM_SET,
ACTION_PROBLEM_PROPERTIES,
ACTION_PROBLEM_EDIT_SOURCE,
ACTION_PROBLEM_RUN_CASES,
ACTION_PROBLEM_PASSED,
ACTION_PROBLEM_FALIED,
ACTION_PROBLEM_TESTING
};
explicit IconsManager(QObject *parent = nullptr);
void updateEditorGuttorIcons(const QString& iconSet, int size);
void updateParserIcons(const QString& iconSet, int size);
void updateActionIcons(const QString& iconSet, int size);
PPixmap getPixmap(IconName iconName) const;
QIcon getIcon(IconName iconName) const;
void setIcon(QToolButton* btn, IconName iconName) const;
void setIcon(QPushButton* btn, IconName iconName) const;
PPixmap createSVGIcon(const QString& filename, int width, int height);
const QSize &actionIconSize() const;
void prepareCustomIconSet(const QString &customIconSet);
QPixmap getPixmapForStatement(PStatement statement);
const QString iconSetsFolder() const;
void setIconSetsFolder(const QString &newIconSetsFolder);
QList<PIconSet> listIconSets();
signals:
void actionIconsUpdated();
private:
QMap<IconName,PPixmap> mIconPixmaps;
PPixmap mDefaultIconPixmap;
QSize mActionIconSize;
QString mIconSetTemplate;
QString mIconSetsFolder;
};
extern IconsManager* pIconsManager;
#endif // ICONSMANAGER_H