Loading files
/*
* 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_EDITORCOMMANDSET_H
#define LIBREPCB_EDITOR_EDITORCOMMANDSET_H
/*******************************************************************************
* Includes
******************************************************************************/
#include "editorcommand.h"
#include "editorcommandcategory.h"
#include <QtCore>
#include <QtWidgets>
/*******************************************************************************
* Namespace / Forward Declarations
******************************************************************************/
namespace librepcb {
namespace editor {
/*******************************************************************************
* Class EditorCommandSet
******************************************************************************/
/**
* @brief Collection of all commands across all editors
*
* @see ::librepcb::editor::EditorCommand
* @see https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
* @see https://librepcb.discourse.group/t/hotkeys-anyone/229
*/
class EditorCommandSet final {
Q_DECLARE_TR_FUNCTIONS(EditorCommandSet)
private:
EditorCommandCategory categoryRoot{"categoryRoot", "", false};
EditorCommandSet() noexcept {}
~EditorCommandSet() noexcept {}
public:
// General Methods
static EditorCommandSet& instance() noexcept {
static EditorCommandSet obj;
return obj;
}
void updateTranslations() noexcept {
// Required to be called when the application's locale has changed.
foreach (EditorCommandCategory* cat, getCategories()) {
cat->updateTranslations();
foreach (EditorCommand* cmd, getCommands(cat)) {
cmd->updateTranslations();
}
}
}
QList<EditorCommandCategory*> getCategories() noexcept {
return categoryRoot.findChildren<EditorCommandCategory*>();
}
QList<EditorCommand*> getCommands(
const EditorCommandCategory* category) noexcept {
Q_ASSERT(category);
return category->findChildren<EditorCommand*>();
}
EditorCommandCategory categoryEditor{"categoryEditor", QT_TR_NOOP("Editor"),
true, &categoryRoot};
EditorCommand itemNew{
"item_new", // clang-format break
QT_TR_NOOP("New"),
QT_TR_NOOP("Add a new item"),
":/img/actions/new.png",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_N)},
&categoryEditor,
};
EditorCommand itemOpen{
"item_open", // clang-format break
QT_TR_NOOP("Open"),
QT_TR_NOOP("Open the selected item(s)"),
":/fa/solid/folder-open.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Return)},
&categoryEditor,
};
EditorCommand save{
"save", // clang-format break
QT_TR_NOOP("Save"),
QT_TR_NOOP("Save changes to filesystem"),
":/bi/floppy-fill.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_S)},
&categoryEditor,
};
EditorCommand _saveAll{
"save_all", // clang-format break
QT_TR_NOOP("Save All"),
QT_TR_NOOP("Save all elements to filesystem"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_S)},
&categoryEditor,
};
EditorCommand selectAll{
"select_all", // clang-format break
QT_TR_NOOP("Select All"),
QT_TR_NOOP("Select all visible objects"),
":/fa/solid/object-group.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_A)},
&categoryEditor,
};
EditorCommand find{
"find", // clang-format break
QT_TR_NOOP("Find"),
QT_TR_NOOP("Find or filter objects"),
":/img/actions/search.png",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_F)},
&categoryEditor,
};
EditorCommand findNext{
"find_next", // clang-format break
QT_TR_NOOP("Find Next"),
QT_TR_NOOP("Go to the next found object"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F3)},
&categoryEditor,
};
EditorCommand findPrevious{
"find_previous", // clang-format break
QT_TR_NOOP("Find Previous"),
QT_TR_NOOP("Go to the previous found object"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_F3)},
&categoryEditor,
};
EditorCommand fileManager{
"file_manager", // clang-format break
QT_TR_NOOP("Show in File Manager"),
QT_TR_NOOP("Open the directory in the file manager"),
":/fa/solid/arrow-up-right-from-square.svg",
EditorCommand::Flags(),
{},
&categoryEditor,
};
EditorCommand workspaceSwitch{
"workspace_switch", // clang-format break
QT_TR_NOOP("Switch Workspace"),
QT_TR_NOOP("Choose another workspace to open"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryEditor,
};
EditorCommand workspaceSettings{
"workspace_settings", // clang-format break
QT_TR_NOOP("Workspace Settings"),
QT_TR_NOOP("Open the workspace settings dialog"),
":/fa/solid/sliders.svg",
EditorCommand::Flag::OpensPopup | EditorCommand::Flag::PreferencesRole,
{QKeySequence(Qt::CTRL | Qt::Key_Comma)},
&categoryEditor,
};
EditorCommand workspaceLibrariesRescan{
"workspace_libraries_rescan", // clang-format break
QT_TR_NOOP("Rescan Libraries"),
QT_TR_NOOP("Scan all workspace libraries to update the cache"),
":/fa/solid/arrows-rotate.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F5)},
&categoryEditor,
};
EditorCommand libraryManager{
"library_manager", // clang-format break
QT_TR_NOOP("Libraries"),
QT_TR_NOOP("Manage installed part libraries"),
":/bi/database.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_M)},
&categoryEditor,
};
// EditorCommand libraryElementNew{
// "library_element_new", // clang-format break
// QT_TR_NOOP("New Library Element"),
// QT_TR_NOOP("Create a new library element"),
// ":/img/actions/new.png",
// EditorCommand::Flag::OpensPopup,
// {QKeySequence(Qt::CTRL | Qt::Key_N)},
// &categoryEditor,
// };
EditorCommand libraryElementDuplicate{
"library_element_duplicate", // clang-format break
QT_TR_NOOP("Duplicate"),
QT_TR_NOOP("Create a new element by duplicating this one"),
":/fa/solid/clone.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_D)},
&categoryEditor,
};
EditorCommand projectNew{
"project_new", // clang-format break
QT_TR_NOOP("New Project"),
QT_TR_NOOP("Create a new project"),
":/fa/solid/file-circle-plus.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_N)},
&categoryEditor,
};
EditorCommand projectOpen{
"project_open", // clang-format break
QT_TR_NOOP("Open Project"),
QT_TR_NOOP("Open an existing project"),
":/fa/solid/folder-open.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_O)},
&categoryEditor,
};
// EditorCommand projectSave{
// "project_save", // clang-format break
// QT_TR_NOOP("Save Project"),
// QT_TR_NOOP("Save the currently opened project"),
// ":/bi/floppy-fill.svg",
// EditorCommand::Flags(),
// {QKeySequence(Qt::CTRL | Qt::Key_S)},
// &categoryEditor,
// };
EditorCommand projectSetup{
"project_setup", // clang-format break
QT_TR_NOOP("Project Setup"),
QT_TR_NOOP("View/modify the project setup"),
":/fa/solid/sliders.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F6)},
&categoryEditor,
};
EditorCommand projectLibraryManager{
"project_library_manager", // clang-format break
QT_TR_NOOP("Project Library Manager"),
QT_TR_NOOP("Review the project's library elements & update them from "
"workspace libraries"),
":/fa/solid/database.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_F5)}, // Taken from projectLibraryUpdate
&categoryEditor,
};
EditorCommand gridProperties{
"grid_properties", // clang-format break
QT_TR_NOOP("Grid Properties"),
QT_TR_NOOP("View/modify the grid properties"),
":/bi/grid-3x3.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F4)},
&categoryEditor,
};
EditorCommand boardSetup{
"board_setup", // clang-format break
QT_TR_NOOP("Board Setup"),
QT_TR_NOOP("View/modify the board setup"),
":/fa/solid/sliders.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F7)},
&categoryEditor,
};
EditorCommand runQuickCheck{
"run_quick_check", // clang-format break
QT_TR_NOOP("Run Quick Check"),
QT_TR_NOOP("Run only the most important copper checks from the DRC"),
":/bi/lightning-fill.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_F8)},
&categoryEditor,
};
EditorCommand runDesignRuleCheck{
"run_design_rule_check", // clang-format break
QT_TR_NOOP("Run Design Rule Check"),
QT_TR_NOOP("Run the design rule check (DRC)"),
":/fa/solid/list-check.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F8)},
&categoryEditor,
};
// EditorCommand projectLibraryUpdate{
// "project_library_update", // clang-format break
// QT_TR_NOOP("Update Project Library"),
// QT_TR_NOOP(
// "Update the project's library elements from workspace libraries"),
// ":/fa/solid/arrows-rotate.svg",
// EditorCommand::Flag::OpensPopup,
// {QKeySequence(Qt::CTRL | Qt::Key_F5)},
// &categoryEditor,
// };
// EditorCommand schematicEditor{
// "schematic_editor", // clang-format break
// QT_TR_NOOP("Schematic Editor"),
// QT_TR_NOOP("Bring the schematic editor window to front"),
// ":/img/actions/schematic.png",
// EditorCommand::Flags(),
// {QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_S)},
// &categoryEditor,
// };
EditorCommand sheetNew{
"sheet_new", // clang-format break
QT_TR_NOOP("New Sheet"),
QT_TR_NOOP("Add a new schematic sheet to the project"),
":/fa/solid/file-circle-plus.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_N)},
&categoryEditor,
};
EditorCommand sheetRename{
"sheet_rename", // clang-format break
QT_TR_NOOP("Rename Sheet"),
QT_TR_NOOP("Rename the current schematic sheet"),
":/fa/solid/pen-to-square.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_F2)},
&categoryEditor,
};
EditorCommand sheetRemove{
"sheet_remove", // clang-format break
QT_TR_NOOP("Remove Sheet"),
QT_TR_NOOP("Remove the current schematic sheet from the project"),
":/fa/solid/trash-can.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Delete)},
&categoryEditor,
};
// EditorCommand boardEditor{
// "board_editor", // clang-format break
// QT_TR_NOOP("Board Editor"),
// QT_TR_NOOP("Bring the board editor window to front"),
// ":/img/actions/board_editor.png",
// EditorCommand::Flags(),
// {QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_B)},
// &categoryEditor,
// };
EditorCommand boardNew{
"board_new", // clang-format break
QT_TR_NOOP("New Board"),
QT_TR_NOOP("Add a new board to the project"),
":/fa/solid/file-circle-plus.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_N)},
&categoryEditor,
};
EditorCommand boardCopy{
"board_copy", // clang-format break
QT_TR_NOOP("Copy Board"),
QT_TR_NOOP("Add a copy of the current board to the project"),
":/fa/solid/clone.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_D)},
&categoryEditor,
};
EditorCommand boardRemove{
"board_remove", // clang-format break
QT_TR_NOOP("Remove Board"),
QT_TR_NOOP("Remove the current board from the project"),
":/fa/solid/trash-can.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Delete)},
&categoryEditor,
};
EditorCommand planeShowAll{
"plane_show_all", // clang-format break
QT_TR_NOOP("Show All Planes"),
QT_TR_NOOP("Make the filled areas of all planes visible"),
":/fa/solid/eye.svg",
EditorCommand::Flags(),
{},
&categoryEditor,
};
EditorCommand planeHideAll{
"plane_hide_all", // clang-format break
QT_TR_NOOP("Hide All Planes"),
QT_TR_NOOP("Make the filled areas of all planes invisible"),
":/fa/solid/eye-slash.svg",
EditorCommand::Flags(),
{},
&categoryEditor,
};
EditorCommand planeRebuildAll{
"plane_rebuild_all", // clang-format break
QT_TR_NOOP("Rebuild All Planes"),
QT_TR_NOOP("Re-calculate the filled areas of all planes"),
":/fa/solid/arrows-rotate.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_R)},
&categoryEditor,
};
EditorCommandCategory categoryTextInput{
"categoryTextInput", QT_TR_NOOP("Text Input"), true, &categoryRoot};
EditorCommand inputBrowse{
"input_browse", // clang-format break
QT_TR_NOOP("Browse"),
QT_TR_NOOP("Open file or directory browser"),
":/img/actions/open.png",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_B)},
&categoryTextInput,
};
EditorCommand inputUnitChange{
"input_unit_change", // clang-format break
QT_TR_NOOP("Change Unit"),
QT_TR_NOOP("Change the measurement unit of the text input"),
":/fa/solid/ruler.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_M)},
&categoryTextInput,
};
EditorCommand inputRemove{
"input_remove", // clang-format break
QT_TR_NOOP("Remove"),
QT_TR_NOOP("Remove this item"),
":/img/actions/delete.png",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Delete)},
&categoryTextInput,
};
EditorCommand inputAcceptAdd{
"input_accept_add", // clang-format break
QT_TR_NOOP("Add"),
QT_TR_NOOP("Add this item"),
":/img/actions/plus_2.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Return)},
&categoryTextInput,
};
EditorCommandCategory categoryImportExport{
"categoryImportExport", QT_TR_NOOP("Import/Export"), true, &categoryRoot};
EditorCommand addExampleProjects{
"add_example_projects", // clang-format break
QT_TR_NOOP("Add Example Projects"),
QT_TR_NOOP("Add some example projects to the workspace"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand importDxf{
"import_dxf", // clang-format break
QT_TR_NOOP("Import DXF"),
QT_TR_NOOP("Import a 2D mechanical drawing"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand importEagleLibrary{
"import_eagle_library", // clang-format break
QT_TR_NOOP("Import EAGLE Library"),
QT_TR_NOOP("Import library elements from an EAGLE *.lbr file"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand importEagleProject{
"import_eagle_project", // clang-format break
QT_TR_NOOP("Import EAGLE Project"),
QT_TR_NOOP("Import schematic/board from EAGLE *.sch/*.brd files"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand importKiCadLibrary{
"import_kicad_library", // clang-format break
QT_TR_NOOP("Import KiCad Library"),
QT_TR_NOOP("Import symbols and footprints from KiCad libraries"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand importSpecctraSes{
"import_specctra_ses", // clang-format break
QT_TR_NOOP("Import Specctra SES"),
QT_TR_NOOP("Import a Specctra session, e.g. from external autorouters"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand exportLppz{
"export_lppz", // clang-format break
QT_TR_NOOP("Export *.lppz Archive"),
QT_TR_NOOP("Export the project as a self-contained *.lppz archive"),
":/fa/solid/file-zipper.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand exportImage{
"export_image", // clang-format break
QT_TR_NOOP("Export Image"),
QT_TR_NOOP("Export graphics as a pixmap"),
":/bi/image.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_I)},
&categoryImportExport,
};
EditorCommand exportPdf{
"export_pdf", // clang-format break
QT_TR_NOOP("Export PDF"),
QT_TR_NOOP("Export graphics as a PDF"),
":/fa/solid/file-pdf.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_P)},
&categoryImportExport,
};
EditorCommand exportSpecctraDsn{
"export_specctra_dsn", // clang-format break
QT_TR_NOOP("Export Specctra DSN"),
QT_TR_NOOP("Export PCB to Specctra format for external autorouters etc."),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand exportStep{
"export_step", // clang-format break
QT_TR_NOOP("Export STEP Model"),
QT_TR_NOOP("Export PCB as a STEP file for loading it into MCAD software"),
":/fa/solid/cubes.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_T)},
&categoryImportExport,
};
EditorCommand print{
"print", // clang-format break
QT_TR_NOOP("Print"),
QT_TR_NOOP("Send graphics to a printer"),
":/bi/printer-fill.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::CTRL | Qt::Key_P)},
&categoryImportExport,
};
// EditorCommand generateBom{
// "generate_bom", // clang-format break
// QT_TR_NOOP("Generate Bill Of Materials"),
// QT_TR_NOOP("Generate bill of materials (BOM) file"),
// ":/fa/solid/file-csv.svg",
// EditorCommand::Flag::OpensPopup,
// {QKeySequence(Qt::Key_F9)},
// &categoryImportExport,
// };
EditorCommand billOfMaterials{
"bill_of_materials", // clang-format break
QT_TR_NOOP("Bill Of Materials"),
QT_TR_NOOP("Open the project's bill of materials (BOM) to see part "
"availability, prices etc."),
":/fa/solid/file-csv.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F9)},
&categoryImportExport,
};
EditorCommand generateFabricationData{
"generate_fabrication_data", // clang-format break
QT_TR_NOOP("Generate Fabrication Data"),
QT_TR_NOOP("Generate Gerber/Excellon files for PCB fabrication"),
":/fa/solid/industry.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F10)},
&categoryImportExport,
};
EditorCommand generatePickPlace{
"generate_pick_place", // clang-format break
QT_TR_NOOP("Generate Pick&&Place Files"),
QT_TR_NOOP("Generate pick&place files for automated PCB assembly"),
nullptr,
EditorCommand::Flag::OpensPopup,
{}, // Was F11 until v0.1.7
&categoryImportExport,
};
EditorCommand generateD356Netlist{
"generate_d356_netlist", // clang-format break
QT_TR_NOOP("Generate IPC-D-356A Netlist"),
QT_TR_NOOP("Generate netlist file for automated PCB testing"),
nullptr,
EditorCommand::Flag::OpensPopup,
{},
&categoryImportExport,
};
EditorCommand outputJobs{
"output_jobs", // clang-format break
QT_TR_NOOP("Output Jobs"),
QT_TR_NOOP("Modify or run output jobs"),
":/img/output-jobs.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_F11)},
&categoryImportExport,
};
EditorCommand orderPcb{
"order_pcb", // clang-format break
QT_TR_NOOP("Order PCB"),
QT_TR_NOOP("Start ordering the PCB online"),
":/fa/solid/cart-shopping.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F12)},
&categoryImportExport,
};
EditorCommandCategory categoryModify{"categoryModify", QT_TR_NOOP("Modify"),
true, &categoryRoot};
EditorCommand undo{
"undo", // clang-format break
QT_TR_NOOP("Undo"),
QT_TR_NOOP("Revert the last modification"),
":/fa/solid/rotate-left.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Z)},
&categoryModify,
};
EditorCommand redo{
"redo", // clang-format break
QT_TR_NOOP("Redo"),
QT_TR_NOOP("Re-apply the last reverted modification"),
":/fa/solid/rotate-right.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Y),
QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Z)},
&categoryModify,
};
EditorCommand clipboardCut{
"clipboard_cut", // clang-format break
QT_TR_NOOP("Cut"),
QT_TR_NOOP("Cut the selected object(s) to clipboard"),
":/img/actions/cut.png",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_X)},
&categoryModify,
};
EditorCommand clipboardCopy{
"clipboard_copy", // clang-format break
QT_TR_NOOP("Copy"),
QT_TR_NOOP("Copy the selected object(s) to clipboard"),
":/img/actions/copy.png",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_C)},
&categoryModify,
};
EditorCommand clipboardPaste{
"clipboard_paste", // clang-format break
QT_TR_NOOP("Paste"),
QT_TR_NOOP("Paste object(s) from the clipboard"),
":/img/actions/paste.png",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_V)},
&categoryModify,
};
EditorCommand moveLeft{
"move_left", // clang-format break
QT_TR_NOOP("Move Left"),
QT_TR_NOOP("Move the selected object(s) to the left"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Left)},
&categoryModify,
};
EditorCommand moveRight{
"move_right", // clang-format break
QT_TR_NOOP("Move Right"),
QT_TR_NOOP("Move the selected object(s) to the right"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Right)},
&categoryModify,
};
EditorCommand moveUp{
"move_up", // clang-format break
QT_TR_NOOP("Move Up"),
QT_TR_NOOP("Move the selected object(s) up"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Up)},
&categoryModify,
};
EditorCommand moveDown{
"move_down", // clang-format break
QT_TR_NOOP("Move Down"),
QT_TR_NOOP("Move the selected object(s) down"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Down)},
&categoryModify,
};
EditorCommand rotateCcw{
"rotate_ccw", // clang-format break
QT_TR_NOOP("Rotate Counterclockwise"),
QT_TR_NOOP("Rotate the selected object(s) counterclockwise"),
":/img/actions/rotate_left.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_R)},
&categoryModify,
};
EditorCommand rotateCw{
"rotate_cw", // clang-format break
QT_TR_NOOP("Rotate Clockwise"),
QT_TR_NOOP("Rotate the selected object(s) clockwise"),
":/img/actions/rotate_right.png",
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_R)},
&categoryModify,
};
EditorCommand mirrorHorizontal{
"mirror_horizontal", // clang-format break
QT_TR_NOOP("Mirror Horizontally"),
QT_TR_NOOP("Mirror the selected object(s) horizontally"),
":/img/actions/mirror_horizontal.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_M)},
&categoryModify,
};
EditorCommand mirrorVertical{
"mirror_vertical", // clang-format break
QT_TR_NOOP("Mirror Vertically"),
QT_TR_NOOP("Mirror the selected object(s) vertically"),
":/img/actions/mirror_vertical.png",
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_M)},
&categoryModify,
};
EditorCommand flipHorizontal{
"flip_horizontal", // clang-format break
QT_TR_NOOP("Flip Horizontally"),
QT_TR_NOOP(
"Flip the selected object(s) horizontally to the other board side"),
":/img/arrow-right-left-across-line.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F)},
&categoryModify,
};
EditorCommand flipVertical{
"flip_vertical", // clang-format break
QT_TR_NOOP("Flip Vertically"),
QT_TR_NOOP(
"Flip the selected object(s) vertically to the other board side"),
":/fa/solid/arrow-down-up-across-line.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_F)},
&categoryModify,
};
EditorCommand moveAlign{
"move_align", // clang-format break
QT_TR_NOOP("Move/Align Objects"),
QT_TR_NOOP("Move and/or align the selected object(s) vertically or "
"horizontally"),
":/img/actions/move.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_A)},
&categoryModify,
};
EditorCommand snapToGrid{
"snap_to_grid", // clang-format break
QT_TR_NOOP("Snap to Grid"),
QT_TR_NOOP("Move the selected object(s) to snap the grid"),
":/img/grid-dots.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_S)},
&categoryModify,
};
EditorCommand lock{
"lock", // clang-format break
QT_TR_NOOP("Lock Placement"),
QT_TR_NOOP("Lock the placement of the selected object(s)"),
":/fa/solid/lock.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_L)},
&categoryModify,
};
EditorCommand unlock{
"unlock", // clang-format break
QT_TR_NOOP("Unlock Placement"),
QT_TR_NOOP("Unlock the placement of the selected object(s)"),
":/fa/solid/lock-open.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_U)},
&categoryModify,
};
EditorCommand setLineWidth{
"line_width_set", // clang-format break
QT_TR_NOOP("Set Line Width"),
QT_TR_NOOP(
"Change the line/trace/stroke width of the selected object(s)"),
":/fa/solid/pen-to-square.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryModify,
};
EditorCommand deviceResetTextAll{
"device_reset_text_all", // clang-format break
QT_TR_NOOP("Reset All Texts"),
QT_TR_NOOP("Reset all texts of the footprint to their initial state"),
":/bi/bootstrap-reboot.svg",
EditorCommand::Flags(),
{},
&categoryModify,
};
EditorCommand properties{
"properties", // clang-format break
QT_TR_NOOP("Properties"),
QT_TR_NOOP("View/modify the object properties"),
":/img/actions/settings.png",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_E)},
&categoryModify,
};
EditorCommand rename{
"rename", // clang-format break
QT_TR_NOOP("Rename"),
QT_TR_NOOP("Rename the selected object"),
":/fa/solid/pen-to-square.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F2)},
&categoryModify,
};
EditorCommand remove{
"remove", // clang-format break
QT_TR_NOOP("Remove"),
QT_TR_NOOP("Delete the selected object(s)"),
":/img/actions/delete.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Delete)},
&categoryModify,
};
EditorCommandCategory categoryView{"categoryView", QT_TR_NOOP("View"), true,
&categoryRoot};
EditorCommand zoomFitContent{
"zoom_fit_content", // clang-format break
QT_TR_NOOP("Zoom to Fit Contents"),
QT_TR_NOOP("Set the zoom level to fit the whole content"),
":/fa/solid/expand.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Home)},
&categoryView,
};
EditorCommand zoomIn{
"zoom_in", // clang-format break
QT_TR_NOOP("Zoom In"),
QT_TR_NOOP("Increase the zoom level"),
":/bi/zoom-in.svg",
EditorCommand::Flags(),
{
QKeySequence(Qt::CTRL | Qt::Key_Plus),
QKeySequence(Qt::CTRL | Qt::Key_Equal), // For English layout
},
&categoryView,
};
EditorCommand zoomOut{
"zoom_out", // clang-format break
QT_TR_NOOP("Zoom Out"),
QT_TR_NOOP("Decrease the zoom level"),
":/bi/zoom-out.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Minus)},
&categoryView,
};
EditorCommand flipView{
"flip_view", // clang-format break
QT_TR_NOOP("Flip View"),
QT_TR_NOOP("Switch between top view and bottom view"),
":/bi/arrow-repeat.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_2)},
&categoryView,
};
EditorCommand gridIncrease{
"grid_increase", // clang-format break
QT_TR_NOOP("Increase Grid Interval"),
QT_TR_NOOP("Increase the grid interval"),
":/fa/solid/caret-up.svg",
EditorCommand::Flags(),
{
// Do not use Ctrl+Shift++ to avoid conflict with Zoom In,
// see https://github.com/LibrePCB/LibrePCB/issues/1641.
QKeySequence(Qt::CTRL | Qt::Key_Asterisk), // For numpad
QKeySequence(Qt::CTRL | Qt::Key_BracketRight), // For English layout
},
&categoryView,
};
EditorCommand gridDecrease{
"grid_decrease", // clang-format break
QT_TR_NOOP("Decrease Grid Interval"),
QT_TR_NOOP("Decrease the grid interval"),
":/fa/solid/caret-down.svg",
EditorCommand::Flags(),
{
// Do not use Ctrl+Shift+- to avoid conflict with Zoom Out,
// see https://github.com/LibrePCB/LibrePCB/issues/1641.
QKeySequence(Qt::CTRL | Qt::Key_Slash), // For numpad
QKeySequence(Qt::CTRL | Qt::Key_BracketLeft), // For English layout
},
&categoryView,
};
EditorCommand showPinNumbers{
"show_pin_numbers", // clang-format break
QT_TR_NOOP("Show Pin Numbers"),
QT_TR_NOOP("Show or hide symbol pin numbers"),
":/img/show-pin-numbers.svg",
EditorCommand::Flags(),
{QKeySequence()},
&categoryView,
};
EditorCommand ignoreLocks{
"ignore_locks", // clang-format break
QT_TR_NOOP("Ignore Placement Locks"),
QT_TR_NOOP("Allow dragging locked items"),
":/fa/solid/lock-open.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_L)},
&categoryView,
};
EditorCommand toggleBackgroundImage{
"toggle_background_image", // clang-format break
QT_TR_NOOP("Set/Unset Background Image"),
QT_TR_NOOP("Use a datasheet drawing as the background for verification"),
":/bi/image.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryView,
};
EditorCommand toggle3d{
"toggle_3d", // clang-format break
QT_TR_NOOP("Toggle 2D/3D Mode"),
QT_TR_NOOP("Switch between 2D and 3D viewer mode"),
":/bi/badge-3d.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_3)},
&categoryView,
};
EditorCommandCategory categoryTools{"categoryTools", QT_TR_NOOP("Tools"),
true, &categoryRoot};
EditorCommand toolSelect{
"tool_select", // clang-format break
QT_TR_NOOP("Select"),
QT_TR_NOOP("Select & modify existing objects"),
":/fa/solid/arrow-pointer.svg",
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolLine{
"tool_line", // clang-format break
QT_TR_NOOP("Draw Line"),
QT_TR_NOOP("Draw graphical lines"),
":/img/draw-wire.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_L)},
&categoryTools,
};
EditorCommand toolRect{
"tool_rect", // clang-format break
QT_TR_NOOP("Draw Rectangle"),
QT_TR_NOOP("Draw graphical rectangles"),
":/fa/solid/vector-square.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_G)},
&categoryTools,
};
EditorCommand toolPolygon{
"tool_polygon", // clang-format break
QT_TR_NOOP("Draw Polygon"),
QT_TR_NOOP("Draw graphical polygons"),
":/fa/solid/draw-polygon.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_P)},
&categoryTools,
};
EditorCommand toolCircle{
"tool_circle", // clang-format break
QT_TR_NOOP("Draw Circle"),
QT_TR_NOOP("Draw graphical circles"),
":/bi/circle.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_C)},
&categoryTools,
};
EditorCommand toolArc{
"tool_arc", // clang-format break
QT_TR_NOOP("Draw Arc"),
QT_TR_NOOP("Draw graphical arcs"),
":/fa/solid/circle-notch.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::SHIFT | Qt::Key_C)},
&categoryTools,
};
EditorCommand toolText{
"tool_text", // clang-format break
QT_TR_NOOP("Add Text"),
QT_TR_NOOP("Add graphical text objects"),
":/fa/solid/font.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_T)},
&categoryTools,
};
EditorCommand toolName{
"tool_name", // clang-format break
QT_TR_NOOP("Add Name"),
QT_TR_NOOP("Add graphical text objects for '{{NAME}}'"),
":/img/actions/add_name.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_N)},
&categoryTools,
};
EditorCommand toolValue{
"tool_value", // clang-format break
QT_TR_NOOP("Add Value"),
QT_TR_NOOP("Add graphical text objects for '{{VALUE}}'"),
":/img/actions/add_value.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_V)},
&categoryTools,
};
EditorCommand toolImage{
"tool_image", // clang-format break
QT_TR_NOOP("Add Image"),
QT_TR_NOOP("Add graphical image objects (e.g. a logo)"),
":/bi/image.svg",
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPin{
"tool_pin", // clang-format break
QT_TR_NOOP("Add Pin"),
QT_TR_NOOP("Add symbol pins (electrical connections for schematics)"),
":/img/actions/add_symbol_pin.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_I)},
&categoryTools,
};
EditorCommand toolPadTht{
"tool_pad_tht", // clang-format break
QT_TR_NOOP("Add THT Pad"),
QT_TR_NOOP("Add plated through-hole copper pads"),
":/img/actions/add_tht_pad.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_H)},
&categoryTools,
};
EditorCommand toolPadSmt{
"tool_pad_smt", // clang-format break
QT_TR_NOOP("Add SMT Pad"),
QT_TR_NOOP("Add surface mounted (single layer) copper pads"),
":/img/actions/add_smt_pad.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_D)},
&categoryTools,
};
EditorCommand toolPadThermal{
"tool_pad_thermal", // clang-format break
QT_TR_NOOP("Add Thermal Pad"),
QT_TR_NOOP("Add special SMT pads used as heat sink"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPadBga{
"tool_pad_bga", // clang-format break
QT_TR_NOOP("Add BGA Pad"),
QT_TR_NOOP("Add special SMT pads used for ball grid arrays"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPadEdgeConnector{
"tool_pad_edge_connector", // clang-format break
QT_TR_NOOP("Add Edge Connector Pad"),
QT_TR_NOOP("Add special SMT pads used as edge connector"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPadTest{
"tool_pad_test_point", // clang-format break
QT_TR_NOOP("Add Test Pad"),
QT_TR_NOOP("Add special SMT pads used as test points"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPadLocalFiducial{
"tool_pad_local_fiducial", // clang-format break
QT_TR_NOOP("Add Local Fiducial Pad"),
QT_TR_NOOP("Add special SMT pads used as local fiducials"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolPadGlobalFiducial{
"tool_pad_global_fiducial", // clang-format break
QT_TR_NOOP("Add Global Fiducial Pad"),
QT_TR_NOOP("Add special SMT pads used as global fiducials"),
nullptr,
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolZone{
"tool_zone", // clang-format break
QT_TR_NOOP("Draw Keepout Zone"),
QT_TR_NOOP("Draw keep-out zones"),
":/bi/sign-stop.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Z)},
&categoryTools,
};
EditorCommand toolHole{
"tool_hole", // clang-format break
QT_TR_NOOP("Add Hole"),
QT_TR_NOOP("Add non-plated holes (NPTH drills)"),
":/img/drill.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_O)},
&categoryTools,
};
EditorCommand toolWire{
"tool_wire", // clang-format break
QT_TR_NOOP("Draw Wire"),
QT_TR_NOOP(
"Draw wires to create electrical connections between symbol pins"),
":/img/draw-wire.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_W)},
&categoryTools,
};
EditorCommand toolBus{
"tool_bus", // clang-format break
QT_TR_NOOP("Draw Bus"),
QT_TR_NOOP("Draw buses to route several related nets with a single wire"),
":/img/actions/draw_bus.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_B)},
&categoryTools,
};
EditorCommand toolLabel{
"tool_label", // clang-format break
QT_TR_NOOP("Add Label to Net or Bus"),
QT_TR_NOOP("Add labels to explicitly specify the net or bus of wires"),
":/fa/solid/tag.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_N)},
&categoryTools,
};
EditorCommand toolComponent{
"tool_component", // clang-format break
QT_TR_NOOP("Add Component"),
QT_TR_NOOP("Insert components from the workspace libraries"),
":/fa/solid/microchip.svg",
EditorCommand::Flag::OpensPopup,
{QKeySequence(Qt::Key_A)},
&categoryTools,
};
EditorCommand toolTrace{
"tool_trace", // clang-format break
QT_TR_NOOP("Draw Trace"),
QT_TR_NOOP("Draw copper traces to interconnect devices"),
":/img/draw-trace.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_W)},
&categoryTools,
};
EditorCommand toolVia{
"tool_via", // clang-format break
QT_TR_NOOP("Add Via"),
QT_TR_NOOP("Add plated through-hole vias"),
":/img/via.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_V)},
&categoryTools,
};
EditorCommand toolPlane{
"tool_plane", // clang-format break
QT_TR_NOOP("Draw Plane"),
QT_TR_NOOP("Draw auto-filled copper areas to interconnect pads and vias"),
":/bi/paint-bucket.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_N)},
&categoryTools,
};
EditorCommand toolGenerateOutline{
"tool_generate_outline", // clang-format break
QT_TR_NOOP("Generate Outline"),
QT_TR_NOOP("Automatically generate the outline polygon"),
":/fa/solid/wand-magic-sparkles.svg",
EditorCommand::Flags(),
{},
&categoryTools,
};
EditorCommand toolGenerateCourtyard{
"tool_generate_courtyard", // clang-format break
QT_TR_NOOP("Generate Courtyard"),
QT_TR_NOOP("Automatically generate the courtyard polygon"),
":/fa/solid/wand-magic-sparkles.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryTools,
};
EditorCommand toolReNumberPads{
"tool_renumber_pads", // clang-format break
QT_TR_NOOP("Re-Number Pads"),
QT_TR_NOOP("Helper tool to interactively change pad numbers"),
":/fa/solid/wand-magic-sparkles.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryTools,
};
EditorCommand toolMeasure{
"tool_measure", // clang-format break
QT_TR_NOOP("Measure Distance"),
QT_TR_NOOP("Measure the distance between two points"),
":/fa/solid/ruler.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_M)},
&categoryTools,
};
EditorCommandCategory categoryCommands{
"categoryCommands", QT_TR_NOOP("Commands"), true, &categoryRoot};
EditorCommand commandToolBarFocus{
"command_toolbar_focus", // clang-format break
QT_TR_NOOP("Go To Command Toolbar"),
QT_TR_NOOP("Move the focus into the command toolbar"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Tab)},
&categoryCommands,
};
EditorCommand abort{
"abort", // clang-format break
QT_TR_NOOP("Abort Command"),
QT_TR_NOOP("Abort the currently active command"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Escape)},
&categoryCommands,
};
EditorCommand layerUp{
"layer_up", // clang-format break
QT_TR_NOOP("Layer Up"),
QT_TR_NOOP("Switch to the next higher layer (bottom->top)"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_PageUp)},
&categoryCommands,
};
EditorCommand layerDown{
"layer_down", // clang-format break
QT_TR_NOOP("Layer Down"),
QT_TR_NOOP("Switch to the next lower layer (top->bottom)"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_PageDown)},
&categoryCommands,
};
EditorCommand lineWidthIncrease{
"line_width_increase", // clang-format break
QT_TR_NOOP("Increase Line Width"),
QT_TR_NOOP("Increase the line/trace/stroke/pad width"),
":/fa/solid/caret-up.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Plus)},
&categoryCommands,
};
EditorCommand lineWidthDecrease{
"line_width_decrease", // clang-format break
QT_TR_NOOP("Decrease Line Width"),
QT_TR_NOOP("Decrease the line/trace/stroke/pad width"),
":/fa/solid/caret-down.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Minus)},
&categoryCommands,
};
EditorCommand sizeIncrease{
"size_increase", // clang-format break
QT_TR_NOOP("Increase Size"),
QT_TR_NOOP("Increase the via/pad/pin/text size"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Asterisk)},
&categoryCommands,
};
EditorCommand sizeDecrease{
"size_decrease", // clang-format break
QT_TR_NOOP("Decrease Size"),
QT_TR_NOOP("Decrease the via/pad/pin/text size"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Slash)},
&categoryCommands,
};
EditorCommand drillIncrease{
"drill_increase", // clang-format break
QT_TR_NOOP("Increase Drill"),
QT_TR_NOOP("Increase the via/pad/hole drill diameter"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Home)},
&categoryCommands,
};
EditorCommand drillDecrease{
"drill_decrease", // clang-format break
QT_TR_NOOP("Decrease Drill"),
QT_TR_NOOP("Decrease the via/pad/hole drill diameter"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_End)},
&categoryCommands,
};
EditorCommand widthAutoToggle{
"width_auto_toggle", // clang-format break
QT_TR_NOOP("Toggle Auto-Width"),
QT_TR_NOOP("Toggle the auto-width property state"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Period)},
&categoryCommands,
};
EditorCommand fillToggle{
"fill_toggle", // clang-format break
QT_TR_NOOP("Toggle Fill"),
QT_TR_NOOP("Toggle the fill property state"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F)},
&categoryCommands,
};
EditorCommand grabAreaToggle{
"grab_area_toggle", // clang-format break
QT_TR_NOOP("Toggle Grab Area"),
QT_TR_NOOP("Toggle the grab area property state"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::Key_Comma)},
&categoryCommands,
};
EditorCommand alignHorizontalLeft{
"align_horizontal_left", // clang-format break
QT_TR_NOOP("Align Left"), // clang-format break
QT_TR_NOOP("Horizontal alignment: Left"),
":/fa/solid/align-left.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_1)},
&categoryCommands,
};
EditorCommand alignHorizontalCenter{
"align_horizontal_center", // clang-format break
QT_TR_NOOP("Align Center"), // clang-format break
QT_TR_NOOP("Horizontal alignment: Center"),
":/fa/solid/align-center.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_2)},
&categoryCommands,
};
EditorCommand alignHorizontalRight{
"align_horizontal_right", // clang-format break
QT_TR_NOOP("Align Right"), // clang-format break
QT_TR_NOOP("Horizontal alignment: Right"),
":/fa/solid/align-right.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_3)},
&categoryCommands,
};
EditorCommand alignVerticalBottom{
"align_vertical_bottom", // clang-format break
QT_TR_NOOP("Align Bottom"), // clang-format break
QT_TR_NOOP("Vertical alignment: Bottom"),
":/bi/align-bottom.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_4)},
&categoryCommands,
};
EditorCommand alignVerticalCenter{
"align_vertical_center", // clang-format break
QT_TR_NOOP("Align Center"), // clang-format break
QT_TR_NOOP("Vertical alignment: Center"),
":/bi/align-center.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_5)},
&categoryCommands,
};
EditorCommand alignVerticalTop{
"align_vertical_top", // clang-format break
QT_TR_NOOP("Align Top"), // clang-format break
QT_TR_NOOP("Vertical alignment: Top"),
":/bi/align-top.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_6)},
&categoryCommands,
};
EditorCommand wireModeHV{
"wire_mode_h_v", // clang-format break
QT_TR_NOOP("Horizontal - Vertical"),
QT_TR_NOOP(
"Wire mode: First segment horizontal, second segment vertical"),
":/img/command_toolbars/wire_h_v.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_1)},
&categoryCommands,
};
EditorCommand wireModeVH{
"wire_mode_v_h", // clang-format break
QT_TR_NOOP("Vertical - Horizontal"),
QT_TR_NOOP(
"Wire mode: First segment vertical, second segment horizontal"),
":/img/command_toolbars/wire_v_h.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_2)},
&categoryCommands,
};
EditorCommand wireMode9045{
"wire_mode_90_45", // clang-format break
QT_TR_NOOP("90° - 45°"),
QT_TR_NOOP("Wire mode: First segment 90°, second segment 45°"),
":/img/command_toolbars/wire_90_45.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_3)},
&categoryCommands,
};
EditorCommand wireMode4590{
"wire_mode_45_90", // clang-format break
QT_TR_NOOP("45° - 90°"),
QT_TR_NOOP("Wire mode: First segment 45°, second segment 90°"),
":/img/command_toolbars/wire_45_90.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_4)},
&categoryCommands,
};
EditorCommand wireModeStraight{
"wire_mode_straight", // clang-format break
QT_TR_NOOP("Straight"),
QT_TR_NOOP("Wire mode: Straight line"),
":/img/command_toolbars/wire_straight.png",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_5)},
&categoryCommands,
};
EditorCommand shapeRound{
"shape_round", // clang-format break
QT_TR_NOOP("Round"),
QT_TR_NOOP("Shape: Round"),
":/fa/solid/circle.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_1)},
&categoryCommands,
};
EditorCommand shapeRoundedRect{
"shape_rounded_rect", // clang-format break
QT_TR_NOOP("Rounded Rectangle"),
QT_TR_NOOP("Shape: Rounded Rectangle"),
":/fa/solid/square.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_2)},
&categoryCommands,
};
EditorCommand shapeRect{
"shape_rect", // clang-format break
QT_TR_NOOP("Rectangle"),
QT_TR_NOOP("Shape: Rectangle"),
":/fa/solid/square-full.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_3)},
&categoryCommands,
};
EditorCommand shapeOctagon{
"shape_octagon", // clang-format break
QT_TR_NOOP("Octagon"), // clang-format break
QT_TR_NOOP("Shape: Octagon"),
":/bi/octagon-fill.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_4)},
&categoryCommands,
};
EditorCommandCategory categoryComponents{
"categoryComponents", QT_TR_NOOP("Components"), true, &categoryRoot};
EditorCommand componentResistor{
"component_resistor", // clang-format break
QT_TR_NOOP("Resistor"),
QT_TR_NOOP("Add standard component: Resistor"),
":/img/resistor-eu.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommand componentInductor{
"component_inductor", // clang-format break
QT_TR_NOOP("Inductor"),
QT_TR_NOOP("Add standard component: Inductor"),
":/img/inductor-eu.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommand componentCapacitorBipolar{
"component_capacitor_bipolar", // clang-format break
QT_TR_NOOP("Bipolar Capacitor"),
QT_TR_NOOP("Add standard component: Bipolar capacitor"),
":/img/capacitor-bipolar-eu.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommand componentCapacitorUnipolar{
"component_capacitor_unipolar", // clang-format break
QT_TR_NOOP("Unipolar Capacitor"),
QT_TR_NOOP("Add standard component: Unipolar capacitor"),
":/img/capacitor-unipolar-eu.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommand componentGnd{
"component_gnd", // clang-format break
QT_TR_NOOP("GND Supply"),
QT_TR_NOOP("Add standard component: GND supply"),
":/img/gnd.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommand componentVcc{
"component_vcc", // clang-format break
QT_TR_NOOP("VCC Supply"),
QT_TR_NOOP("Add standard component: VCC supply"),
":/img/vcc.svg",
EditorCommand::Flags(),
{},
&categoryComponents,
};
EditorCommandCategory categoryDocks{"categoryDocks", QT_TR_NOOP("Docks"),
true, &categoryRoot};
// EditorCommand dockPages{
// "dock_pages", // clang-format break
// QT_TR_NOOP("Pages"),
// QT_TR_NOOP("Go to the pages dock"),
// QString(),
// EditorCommand::Flags(),
// {QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_G)},
// &categoryDocks,
// };
EditorCommand dockErc{
"dock_erc", // clang-format break
QT_TR_NOOP("Electrical Rule Check (ERC)"),
QT_TR_NOOP("Go to the ERC messages dock"),
":/fa/solid/list-check.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_E)},
&categoryDocks,
};
EditorCommand dockDrc{
"dock_drc", // clang-format break
QT_TR_NOOP("Design Rule Check (DRC)"),
QT_TR_NOOP("Go to the DRC messages dock"),
":/fa/solid/list-check.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_D)},
&categoryDocks,
};
EditorCommand dockLayers{
"dock_layers", // clang-format break
QT_TR_NOOP("Layers"),
QT_TR_NOOP("Go to the layers dock"),
":/bi/layers.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_L)},
&categoryDocks,
};
EditorCommand dockPlaceDevices{
"dock_place_devices", // clang-format break
QT_TR_NOOP("Place Devices"),
QT_TR_NOOP("Go to the dock for placing devices"),
":/bi/cpu.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::ALT | Qt::Key_P)},
&categoryDocks,
};
EditorCommandCategory categoryWindowManagement{
"categoryWindowManagement", QT_TR_NOOP("Window Management"), true,
&categoryRoot};
EditorCommand _pageNext{
"page_next", // clang-format break
QT_TR_NOOP("Next Tab/Page"),
QT_TR_NOOP("Navigate to the next tab or page"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_Tab)},
&categoryWindowManagement,
};
EditorCommand _pagePrevious{
"page_previous", // clang-format break
QT_TR_NOOP("Previous Tab/Page"),
QT_TR_NOOP("Navigate to the previous tab or page"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_Tab)},
&categoryWindowManagement,
};
EditorCommand _tabClose{
"tab_close", // clang-format break
QT_TR_NOOP("Close Tab"),
QT_TR_NOOP("Close the currently opened tab"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_W)},
&categoryWindowManagement,
};
EditorCommand _tabCloseAll{
"tab_close_all", // clang-format break
QT_TR_NOOP("Close All Tabs"),
QT_TR_NOOP("Close all currently opened tabs"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_W)},
&categoryWindowManagement,
};
EditorCommand windowNew{
"window_new", // clang-format break
QT_TR_NOOP("New Window"),
QT_TR_NOOP("Open a new window"),
":/bi/window-plus.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_N)},
&categoryWindowManagement,
};
EditorCommand windowClose{
"window_close", // clang-format break
QT_TR_NOOP("Close Window"),
QT_TR_NOOP("Close this window"),
":/bi/window-x.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::ALT | Qt::Key_F4)},
&categoryWindowManagement,
};
EditorCommand projectClose{
"project_close", // clang-format break
QT_TR_NOOP("Close Project"),
QT_TR_NOOP("Close the currently opened project"),
":/fa/solid/xmark.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_F4)},
&categoryWindowManagement,
};
// Not used anymore, just kept here to not loose the translations.
EditorCommand _projectCloseAll{
"project_close_all", // clang-format break
QT_TR_NOOP("Close All Projects"),
QT_TR_NOOP("Close all currently opened projects"),
nullptr,
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_F4)},
nullptr, // &categoryWindowManagement,
};
EditorCommand applicationQuit{
"application_quit", // clang-format break
QT_TR_NOOP("Quit"),
QT_TR_NOOP("Close the whole application"),
":/bi/box-arrow-left.svg",
EditorCommand::Flag::QuitRole,
{QKeySequence(Qt::CTRL | Qt::Key_Q)},
&categoryWindowManagement,
};
EditorCommandCategory categoryHelp{"categoryHelp", QT_TR_NOOP("Help"), true,
&categoryRoot};
EditorCommand aboutLibrePcb{
"about_librepcb", // clang-format break
QT_TR_NOOP("About LibrePCB"),
QT_TR_NOOP("Show information about the application"),
":/bi/question-circle.svg",
EditorCommand::Flag::AboutRole,
{},
&categoryHelp,
};
EditorCommand aboutQt{
"about_qt", // clang-format break
QT_TR_NOOP("About Qt"),
QT_TR_NOOP("Show information about Qt"),
nullptr,
EditorCommand::Flag::OpensPopup | EditorCommand::Flag::AboutQtRole,
{},
&categoryHelp,
};
EditorCommand website{
"website", // clang-format break
QT_TR_NOOP("LibrePCB Website"),
QT_TR_NOOP("Open the LibrePCB website in the web browser"),
":/fa/solid/globe.svg",
EditorCommand::Flags(),
{},
&categoryHelp,
};
EditorCommand documentationOnline{
"documentation_online", // clang-format break
QT_TR_NOOP("User Manual && Tutorials"),
QT_TR_NOOP("Open the online user manual in the web browser"),
":/fa/solid/book.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::Key_F1)},
&categoryHelp,
};
EditorCommand support{
"support", // clang-format break
QT_TR_NOOP("Give Feedback && Get Support"),
QT_TR_NOOP("Open the support page in the web browser"),
":/fa/regular/comments.svg",
EditorCommand::Flags(),
{},
&categoryHelp,
};
EditorCommand donate{
"donate", // clang-format break
QT_TR_NOOP("Support the LibrePCB Project"),
QT_TR_NOOP("Open the donation page in the web browser"),
":/fa/solid/heart.svg",
EditorCommand::Flags(),
{},
&categoryHelp,
};
EditorCommand keyboardShortcutsReference{
"keyboard_shortcuts_reference", // clang-format break
QT_TR_NOOP("Keyboard Shortcuts Reference"),
QT_TR_NOOP("Open a quick reference about the keyboard shortcuts"),
":/fa/solid/keyboard.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_F1)},
&categoryHelp,
};
EditorCommandCategory categoryContextMenu{
"categoryContextMenu", QT_TR_NOOP("Context Menu"), false, &categoryRoot};
// Not used anymore, just kept here to not loose the translations.
EditorCommand _folderNew{
"folder_new", // clang-format break
QT_TR_NOOP("New Folder"),
QT_TR_NOOP("Create a new folder"),
":/img/actions/new_folder.png",
EditorCommand::Flags(),
{},
nullptr, // &categoryContextMenu,
};
// Not used anymore, just kept here to not loose the translations.
EditorCommand _favoriteAdd{
"favorite_add", // clang-format break
QT_TR_NOOP("Add To Favorites"),
QT_TR_NOOP("Add project to favorites"),
":/img/actions/bookmark_gray.png",
EditorCommand::Flags(),
{},
nullptr, // &categoryContextMenu,
};
// Not used anymore, just kept here to not loose the translations.
EditorCommand _favoriteRemove{
"favorite_remove", // clang-format break
QT_TR_NOOP("Remove From Favorites"),
QT_TR_NOOP("Remove project from favorites"),
":/img/actions/bookmark.png",
EditorCommand::Flags(),
{},
nullptr, // &categoryContextMenu,
};
EditorCommand vertexAdd{
"vertex_add", // clang-format break
QT_TR_NOOP("Add Vertex"),
QT_TR_NOOP("Insert a new vertex into the selected polygon edge"),
":/img/actions/add.png",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand vertexRemove{
"vertex_remove", // clang-format break
QT_TR_NOOP("Remove Vertex"),
QT_TR_NOOP("Remove the selected vertex from the polygon"),
":/img/actions/delete.png",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand traceSelectWhole{
"trace_select_whole", // clang-format break
QT_TR_NOOP("Select Whole Trace"),
QT_TR_NOOP("Select the whole trace"),
":/fa/solid/highlighter.svg",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand traceMeasureLength{
"trace_measure_length", // clang-format break
QT_TR_NOOP("Measure Selected Segments Length"),
QT_TR_NOOP("Measure the total length of all selected trace segments"),
":/fa/solid/ruler.svg",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand traceRemoveWhole{
"trace_remove_whole", // clang-format break
QT_TR_NOOP("Remove Whole Trace"),
QT_TR_NOOP("Remove the whole trace"),
":/fa/solid/trash-can.svg",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand locked{
"locked", // clang-format break
QT_TR_NOOP("Lock Placement"),
QT_TR_NOOP("Toggle placement lock"),
":/fa/solid/lock.svg", // For consistent context menu look.
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand visible{
"visible", // clang-format break
QT_TR_NOOP("Visible"),
QT_TR_NOOP("Toggle visibility"),
":/fa/solid/eye.svg",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand copyMpnToClipboard{
"copy_mpn_to_clipboard", // clang-format break
QT_TR_NOOP("Copy MPN to Clipboard"),
QT_TR_NOOP("Copy this MPN into the clipboard"),
":/fa/regular/copy.svg",
EditorCommand::Flags(),
{QKeySequence(Qt::CTRL | Qt::Key_C)},
&categoryContextMenu,
};
EditorCommand placeRemainingGates{
"place_remaining_gates", // clang-format break
QT_TR_NOOP("Place Remaining Gates"),
QT_TR_NOOP("Add more of the components gates to the schematic"),
":/fa/solid/plus.svg",
EditorCommand::Flags(),
{},
&categoryContextMenu,
};
EditorCommand openProductWebsite{
"open_product_website", // clang-format break
QT_TR_NOOP("Open Product Website"),
QT_TR_NOOP("Open product details about this part in the web browser"),
":/fa/solid/globe.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryContextMenu,
};
EditorCommand openPricingWebsite{
"open_pricing_website", // clang-format break
QT_TR_NOOP("Open Pricing Website"),
QT_TR_NOOP("Open pricing details about this part in the web browser"),
":/fa/solid/cart-shopping.svg",
EditorCommand::Flag::OpensPopup,
{},
&categoryContextMenu,
};
EditorCommand _helperTools{
// Actually not really for the context menu :-/
"helper_tools", // clang-format break
QT_TR_NOOP("Generate Content"),
QT_TR_NOOP("Various helper tools to generate or modify objects"),
":/img/actions/wizard.png",
EditorCommand::Flag::OpensPopup,
{},
&categoryContextMenu,
};
};
/*******************************************************************************
* End of File
******************************************************************************/
} // namespace editor
} // namespace librepcb
#endif
f187d7f67This file is pinned to the selected release. Download the original to open it in your design tool.