This commit is contained in:
Chenwenxuan
2024-03-06 14:54:30 +08:00
commit edac2715f0
1525 changed files with 809982 additions and 0 deletions

882
ui/lc_widgetfactory.cpp Normal file
View File

@@ -0,0 +1,882 @@
/*
**********************************************************************************
**
** This file was created for the LibreCAD project (librecad.org), a 2D CAD program.
**
** Copyright (C) 2015 ravas (github.com/r-a-v-a-s)
**
** 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 2
** 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, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
**
**********************************************************************************
*/
#include "qc_applicationwindow.h"
#include "lc_widgetfactory.h"
#include "lc_actionfactory.h"
#include "lc_dockwidget.h"
#include "lc_actiongroupmanager.h"
#include "qg_actionhandler.h"
#include "qg_snaptoolbar.h"
#include "qg_blockwidget.h"
#include "qg_layerwidget.h"
#include "qg_librarywidget.h"
#include "qg_commandwidget.h"
#include "qg_selectionwidget.h"
#include "qg_activelayername.h"
#include "qg_mousewidget.h"
#include "qg_pentoolbar.h"
#include <QMenu>
#include <QFile>
#include <QMenuBar>
#include <QActionGroup>
LC_WidgetFactory::LC_WidgetFactory(QC_ApplicationWindow* main_win,
QMap<QString, QAction*>& action_map,
LC_ActionGroupManager* agm)
: QObject(nullptr)
, main_window(main_win)
, a_map(action_map)
, ag_manager(agm)
{
file_actions
<< a_map["FileNew"]
<< a_map["FileNewTemplate"]
<< a_map["FileOpen"]
<< a_map["FileSave"]
<< a_map["FileSaveAs"]
<< a_map["FileSaveAll"];
line_actions
<< a_map["DrawLine"]
<< a_map["DrawLineAngle"]
<< a_map["DrawLineHorizontal"]
<< a_map["DrawLineVertical"]
<< a_map["DrawLineRectangle"]
<< a_map["DrawLineParallelThrough"]
<< a_map["DrawLineParallel"]
<< a_map["DrawLineBisector"]
<< a_map["DrawLineTangent1"]
<< a_map["DrawLineTangent2"]
<< a_map["DrawLineOrthTan"]
<< a_map["DrawLineOrthogonal"]
<< a_map["DrawLineRelAngle"]
<< a_map["DrawLinePolygonCenCor"]
<< a_map["DrawLinePolygonCenTan"] //20161226 added by txmy
<< a_map["DrawLinePolygonCorCor"];
circle_actions
<< a_map["DrawCircle"]
<< a_map["DrawCircle2P"]
<< a_map["DrawCircle2PR"]
<< a_map["DrawCircle3P"]
<< a_map["DrawCircleCR"]
<< a_map["DrawCircleTan2_1P"]
<< a_map["DrawCircleTan1_2P"]
<< a_map["DrawCircleTan2"]
<< a_map["DrawCircleTan3"];
curve_actions
<< a_map["DrawArc"]
<< a_map["DrawArc3P"]
<< a_map["DrawArcTangential"]
<< a_map["DrawSpline"]
<< a_map["DrawSplinePoints"]
<< a_map["DrawEllipseArcAxis"]
<< a_map["DrawLineFree"];
ellipse_actions
<< a_map["DrawEllipseAxis"]
<< a_map["DrawEllipseFociPoint"]
<< a_map["DrawEllipse4Points"]
<< a_map["DrawEllipseCenter3Points"]
<< a_map["DrawEllipseInscribe"];
polyline_actions
<< a_map["DrawPolyline"]
<< a_map["PolylineAdd"]
<< a_map["PolylineAppend"]
<< a_map["PolylineDel"]
<< a_map["PolylineDelBetween"]
<< a_map["PolylineTrim"]
<< a_map["PolylineEquidistant"]
<< a_map["PolylineSegment"];
select_actions
<< a_map["DeselectAll"]
<< a_map["SelectAll"]
<< a_map["SelectSingle"]
<< a_map["SelectContour"]
<< a_map["SelectWindow"]
<< a_map["DeselectWindow"]
<< a_map["SelectIntersected"]
<< a_map["DeselectIntersected"]
<< a_map["SelectLayer"]
<< a_map["SelectInvert"];
dimension_actions
<< a_map["DimAligned"]
<< a_map["DimLinear"]
<< a_map["DimLinearHor"]
<< a_map["DimLinearVer"]
<< a_map["DimRadial"]
<< a_map["DimDiametric"]
<< a_map["DimAngular"]
<< a_map["DimLeader"];
modify_actions
<< a_map["ModifyMove"]
<< a_map["ModifyRotate"]
<< a_map["ModifyScale"]
<< a_map["ModifyMirror"]
<< a_map["ModifyMoveRotate"]
<< a_map["ModifyRotate2"]
<< a_map["ModifyRevertDirection"]
<< a_map["ModifyTrim"]
<< a_map["ModifyTrim2"]
<< a_map["ModifyTrimAmount"]
<< a_map["ModifyOffset"]
<< a_map["ModifyBevel"]
<< a_map["ModifyRound"]
<< a_map["ModifyCut"]
<< a_map["ModifyStretch"]
<< a_map["ModifyEntity"]
<< a_map["ModifyAttributes"]
<< a_map["ModifyExplodeText"]
<< a_map["BlocksExplode"]
<< a_map["ModifyDeleteQuick"];
info_actions
<< a_map["InfoDist"]
<< a_map["InfoDist2"]
<< a_map["InfoAngle"]
<< a_map["InfoTotalLength"]
<< a_map["InfoArea"];
layer_actions
<< a_map["LayersDefreezeAll"]
<< a_map["LayersFreezeAll"]
<< a_map["LayersUnlockAll"]
<< a_map["LayersLockAll"]
<< a_map["LayersAdd"]
<< a_map["LayersRemove"]
<< a_map["LayersEdit"]
<< a_map["LayersToggleLock"]
<< a_map["LayersToggleView"]
<< a_map["LayersTogglePrint"]
<< a_map["LayersToggleConstruction"];
block_actions
<< a_map["BlocksDefreezeAll"]
<< a_map["BlocksFreezeAll"]
<< a_map["BlocksToggleView"]
<< a_map["BlocksAdd"]
<< a_map["BlocksRemove"]
<< a_map["BlocksAttributes"]
<< a_map["BlocksInsert"]
<< a_map["BlocksEdit"]
<< a_map["BlocksSave"]
<< a_map["BlocksCreate"]
<< a_map["BlocksExplode"];
}
void LC_WidgetFactory::createLeftSidebar(int columns, int icon_size)
{
LC_DockWidget* dock_line = new LC_DockWidget(main_window);
dock_line->setObjectName("dock_line");
dock_line->setWindowTitle(QC_ApplicationWindow::tr("Line"));
dock_line->add_actions(line_actions, columns, icon_size);
LC_DockWidget* dock_circle = new LC_DockWidget(main_window);
dock_circle->setObjectName("dock_circle");
dock_circle->setWindowTitle(QC_ApplicationWindow::tr("Circle"));
dock_circle->add_actions(circle_actions, columns, icon_size);
LC_DockWidget* dock_curve = new LC_DockWidget(main_window);
dock_curve->setObjectName("dock_curve");
dock_curve->setWindowTitle(QC_ApplicationWindow::tr("Curve"));
dock_curve->add_actions(curve_actions, columns, icon_size);
LC_DockWidget* dock_ellipse = new LC_DockWidget(main_window);
dock_ellipse->setObjectName("dock_ellipse");
dock_ellipse->setWindowTitle(QC_ApplicationWindow::tr("Ellipse"));
dock_ellipse->add_actions(ellipse_actions, columns, icon_size);
LC_DockWidget* dock_polyline = new LC_DockWidget(main_window);
dock_polyline->setObjectName("dock_polyline");
dock_polyline->setWindowTitle(QC_ApplicationWindow::tr("Polyline"));
dock_polyline->add_actions(polyline_actions, columns, icon_size);
LC_DockWidget* dock_select = new LC_DockWidget(main_window);
dock_select->setObjectName("dock_select");
dock_select->setWindowTitle(QC_ApplicationWindow::tr("Select"));
dock_select->add_actions(select_actions, columns, icon_size);
LC_DockWidget* dock_dimension = new LC_DockWidget(main_window);
dock_dimension->setObjectName("dock_dimension");
dock_dimension->setWindowTitle(QC_ApplicationWindow::tr("Dimension"));
dock_dimension->add_actions(dimension_actions, columns, icon_size);
LC_DockWidget* dock_modify = new LC_DockWidget(main_window);
dock_modify->setObjectName("dock_modify");
dock_modify->setWindowTitle(QC_ApplicationWindow::tr("Modify"));
dock_modify->add_actions(modify_actions, columns, icon_size);
LC_DockWidget* dock_info = new LC_DockWidget(main_window);
dock_info->setObjectName("dock_info");
dock_info->setWindowTitle(QC_ApplicationWindow::tr("Info"));
dock_info->add_actions(info_actions, columns, icon_size);
main_window->addDockWidget(Qt::LeftDockWidgetArea, dock_line);
main_window->tabifyDockWidget(dock_line, dock_polyline);
dock_line->raise();
main_window->addDockWidget(Qt::LeftDockWidgetArea, dock_circle);
main_window->tabifyDockWidget(dock_circle, dock_curve);
main_window->tabifyDockWidget(dock_curve, dock_ellipse);
dock_circle->raise();
main_window->addDockWidget(Qt::LeftDockWidgetArea, dock_dimension);
main_window->tabifyDockWidget(dock_dimension, dock_info);
main_window->tabifyDockWidget(dock_info, dock_select);
dock_dimension->raise();
main_window->addDockWidget(Qt::LeftDockWidgetArea, dock_modify);
dock_line->hide();
dock_polyline->hide();
dock_circle->hide();
dock_curve->hide();
dock_ellipse->hide();
dock_dimension->hide();
dock_info->hide();
dock_modify->hide();
dock_select->hide();
}
void LC_WidgetFactory::createRightSidebar(QG_ActionHandler* action_handler)
{
QDockWidget* dock_layer = new QDockWidget(main_window);
dock_layer->setWindowTitle(QC_ApplicationWindow::tr("Layer List"));
dock_layer->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
dock_layer->setObjectName("layer_dockwidget");
layer_widget = new QG_LayerWidget(action_handler, dock_layer, "Layer");
layer_widget->setFocusPolicy(Qt::NoFocus);
connect(layer_widget, SIGNAL(escape()), main_window, SLOT(slotFocus()));
connect(main_window, SIGNAL(windowsChanged(bool)), layer_widget, SLOT(setEnabled(bool)));
dock_layer->setWidget(layer_widget);
QDockWidget* dock_block = new QDockWidget(main_window);
dock_block->setWindowTitle(QC_ApplicationWindow::tr("Block List"));
dock_block->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
dock_block->setObjectName("block_dockwidget");
block_widget = new QG_BlockWidget(action_handler, dock_block, "Block");
block_widget->setFocusPolicy(Qt::NoFocus);
connect(block_widget, SIGNAL(escape()), main_window, SLOT(slotFocus()));
connect(main_window, SIGNAL(windowsChanged(bool)), block_widget, SLOT(setEnabled(bool)));
dock_block->setWidget(block_widget);
QDockWidget* dock_library = new QDockWidget(main_window);
dock_library->setWindowTitle(QC_ApplicationWindow::tr("Library Browser"));
dock_library->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
dock_library->setObjectName("library_dockwidget");
library_widget = new QG_LibraryWidget(dock_library, "Library");
library_widget->setActionHandler(action_handler);
library_widget->setFocusPolicy(Qt::NoFocus);
connect(library_widget, SIGNAL(escape()), main_window, SLOT(slotFocus()));
connect(main_window, SIGNAL(windowsChanged(bool)),
(QObject*)library_widget->bInsert, SLOT(setEnabled(bool)));
dock_library->setWidget(library_widget);
dock_library->resize(240, 400);
QDockWidget* dock_command = new QDockWidget(QC_ApplicationWindow::tr("Command line"), main_window);
dock_command->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum);
dock_command->setObjectName("command_dockwidget");
command_widget = new QG_CommandWidget(dock_command, "Command");
command_widget->setActionHandler(action_handler);
connect(main_window, SIGNAL(windowsChanged(bool)), command_widget, SLOT(setEnabled(bool)));
connect(command_widget->leCommand, SIGNAL(escape()), main_window, SLOT(setFocus()));
dock_command->setWidget(command_widget);
connect(dock_command, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
main_window, SLOT(modifyCommandTitleBar(Qt::DockWidgetArea)));
main_window->addDockWidget(Qt::RightDockWidgetArea, dock_library);
main_window->tabifyDockWidget(dock_library, dock_block);
main_window->tabifyDockWidget(dock_block, dock_layer);
main_window->addDockWidget(Qt::RightDockWidgetArea, dock_command);
// dm add
dock_library->hide();
dock_block->hide();
dock_layer->hide();
dock_command->hide();
}
void LC_WidgetFactory::createStandardToolbars(QG_ActionHandler* action_handler)
{
QSizePolicy toolBarPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QToolBar* file_toolbar = new QToolBar(QC_ApplicationWindow::tr("File"), main_window);
file_toolbar->setSizePolicy(toolBarPolicy);
file_toolbar->setObjectName("file_toolbar");
file_toolbar->addActions(file_actions);
file_toolbar->addAction(a_map["FilePrint"]);
file_toolbar->addAction(a_map["FilePrintPreview"]);
QToolBar* edit_toolbar = new QToolBar(QC_ApplicationWindow::tr("Edit"), main_window);
edit_toolbar->setSizePolicy(toolBarPolicy);
edit_toolbar->setObjectName("edit_toolbar");
edit_toolbar->addAction(a_map["EditKillAllActions"]);
edit_toolbar->addSeparator();
edit_toolbar->addAction(a_map["EditUndo"]);
edit_toolbar->addAction(a_map["EditRedo"]);
edit_toolbar->addSeparator();
edit_toolbar->addAction(a_map["EditCut"]);
edit_toolbar->addAction(a_map["EditCopy"]);
edit_toolbar->addAction(a_map["EditPaste"]);
QToolBar* order_toolbar = new QToolBar(QC_ApplicationWindow::tr("Order"), main_window);
order_toolbar->setSizePolicy(toolBarPolicy);
order_toolbar->setObjectName("order_toolbar");
order_toolbar->addAction(a_map["OrderTop"]);
order_toolbar->addAction(a_map["OrderBottom"]);
order_toolbar->addAction(a_map["OrderRaise"]);
order_toolbar->addAction(a_map["OrderLower"]);
order_toolbar->hide();
QToolBar* view_toolbar = new QToolBar(QC_ApplicationWindow::tr("View"), main_window);
view_toolbar->setObjectName("view_toolbar");
view_toolbar->setSizePolicy(toolBarPolicy);
view_toolbar->addAction(a_map["ViewGrid"]);
view_toolbar->addAction(a_map["ViewDraft"]);
view_toolbar->addSeparator();
view_toolbar->addAction(a_map["ZoomRedraw"]);
view_toolbar->addAction(a_map["ZoomIn"]);
view_toolbar->addAction(a_map["ZoomOut"]);
view_toolbar->addAction(a_map["ZoomAuto"]);
view_toolbar->addAction(a_map["ZoomPrevious"]);
view_toolbar->addAction(a_map["ZoomWindow"]);
view_toolbar->addAction(a_map["ZoomPan"]);
snap_toolbar = new QG_SnapToolBar(main_window, action_handler, ag_manager);
snap_toolbar->setWindowTitle(QC_ApplicationWindow::tr("Snap Selection"));
snap_toolbar->setSizePolicy(toolBarPolicy);
snap_toolbar->setObjectName("snap_toolbar" );
action_handler->set_snap_toolbar(snap_toolbar);
pen_toolbar = new QG_PenToolBar(QC_ApplicationWindow::tr("Pen"), main_window);
pen_toolbar->setSizePolicy(toolBarPolicy);
pen_toolbar->setObjectName("pen_toolbar");
options_toolbar = new QToolBar(QC_ApplicationWindow::tr("Tool Options"), main_window);
options_toolbar->setSizePolicy(toolBarPolicy);
options_toolbar->setObjectName("options_toolbar");
// <[~ Dock Areas Toolbar ~]>
QToolBar* dockareas_toolbar = new QToolBar(main_window);
dockareas_toolbar->setWindowTitle(QC_ApplicationWindow::tr("Dock Areas"));
dockareas_toolbar->setSizePolicy(toolBarPolicy);
dockareas_toolbar->setObjectName("dockareas_toolbar");
dockareas_toolbar->addAction(a_map["LeftDockAreaToggle"]);
dockareas_toolbar->addAction(a_map["RightDockAreaToggle"]);
dockareas_toolbar->addAction(a_map["TopDockAreaToggle"]);
dockareas_toolbar->addAction(a_map["BottomDockAreaToggle"]);
dockareas_toolbar->addAction(a_map["FloatingDockwidgetsToggle"]);
// <[~ Creators ~]>
auto creators_toolbar = new QToolBar(main_window);
creators_toolbar->setWindowTitle(QObject::tr("Creators"));
creators_toolbar->setObjectName("creators_toolbar");
creators_toolbar->addAction(a_map["InvokeMenuCreator"]);
creators_toolbar->addAction(a_map["InvokeToolbarCreator"]);
// <[~ Toolbars Layout~]>
main_window->addToolBar(Qt::TopToolBarArea, file_toolbar);
main_window->addToolBar(Qt::TopToolBarArea, edit_toolbar);
main_window->addToolBar(Qt::TopToolBarArea, view_toolbar);
main_window->addToolBarBreak();
main_window->addToolBar(Qt::TopToolBarArea, pen_toolbar);
main_window->addToolBar(Qt::TopToolBarArea, options_toolbar);
main_window->addToolBar(Qt::LeftToolBarArea, order_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, snap_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, dockareas_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, creators_toolbar);
}
void LC_WidgetFactory::createCADToolbars()
{
QSizePolicy toolBarPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QToolBar* line_toolbar = new QToolBar(QC_ApplicationWindow::tr("Line"), main_window);
line_toolbar->setSizePolicy(toolBarPolicy);
line_toolbar->setObjectName("line_toolbar");
line_toolbar->addActions(line_actions);
line_toolbar->hide();
QToolBar* circle_toolbar = new QToolBar(QC_ApplicationWindow::tr("Circle"), main_window);
circle_toolbar->setSizePolicy(toolBarPolicy);
circle_toolbar->setObjectName ("circle_toolbar");
circle_toolbar->addActions(circle_actions);
circle_toolbar->hide();
QToolBar* curve_toolbar = new QToolBar(QC_ApplicationWindow::tr("Curve"), main_window);
curve_toolbar->setSizePolicy(toolBarPolicy);
curve_toolbar->setObjectName("curve_toolbar");
curve_toolbar->addActions(curve_actions);
curve_toolbar->hide();
QToolBar* ellipse_toolbar = new QToolBar(QC_ApplicationWindow::tr("Ellipse"), main_window);
ellipse_toolbar->setSizePolicy(toolBarPolicy);
ellipse_toolbar->setObjectName("ellipse_toolbar");
ellipse_toolbar->addActions(ellipse_actions);
ellipse_toolbar->hide();
QToolBar* polyline_toolbar = new QToolBar(QC_ApplicationWindow::tr("Polyline"), main_window);
polyline_toolbar->setSizePolicy(toolBarPolicy);
polyline_toolbar->setObjectName("polyline_toolbar");
polyline_toolbar->addActions(polyline_actions);
polyline_toolbar->hide();
QToolBar* select_toolbar = new QToolBar(QC_ApplicationWindow::tr("Select"), main_window);
select_toolbar->setSizePolicy(toolBarPolicy);
select_toolbar->setObjectName("select_toolbar");
select_toolbar->addActions(select_actions);
select_toolbar->hide();
QToolBar* dimension_toolbar = new QToolBar(QC_ApplicationWindow::tr("Dimension"), main_window);
dimension_toolbar->setSizePolicy(toolBarPolicy);
dimension_toolbar->setObjectName("dimension_toolbar");
dimension_toolbar->addActions(dimension_actions);
dimension_toolbar->hide();
QToolBar* modify_toolbar = new QToolBar(QC_ApplicationWindow::tr("Modify"), main_window);
modify_toolbar->setSizePolicy(toolBarPolicy);
modify_toolbar->setObjectName("modify_toolbar");
modify_toolbar->addActions(modify_actions);
modify_toolbar->hide();
QToolBar* info_toolbar = new QToolBar(QC_ApplicationWindow::tr("Info"), main_window);
info_toolbar->setSizePolicy(toolBarPolicy);
info_toolbar->setObjectName("info_toolbar");
info_toolbar->addActions(info_actions);
info_toolbar->hide();
main_window->addToolBar(Qt::BottomToolBarArea, line_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, circle_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, curve_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, ellipse_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, polyline_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, dimension_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, modify_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, info_toolbar);
main_window->addToolBar(Qt::BottomToolBarArea, select_toolbar);
}
QToolBar* LC_WidgetFactory::createCategoriesToolbar()
{
QSizePolicy toolBarPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
QToolBar* categories_toolbar = new QToolBar(QC_ApplicationWindow::tr("Categories"), main_window);
categories_toolbar->setSizePolicy(toolBarPolicy);
categories_toolbar->setObjectName("categories_toolbar");
QToolButton* tool_button;
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/line.svg"));
tool_button->setToolTip(tr("Lines"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(line_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/circle.svg"));
tool_button->setToolTip(tr("Circles"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(circle_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/line_freehand.svg"));
tool_button->setToolTip(tr("Freehand"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(curve_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/ellipses.svg"));
tool_button->setToolTip(tr("Ellipses"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(ellipse_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/polylines.svg"));
tool_button->setToolTip(tr("PolyLines"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(polyline_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/select.svg"));
tool_button->setToolTip(tr("Select"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(select_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/dim_horizontal.svg"));
tool_button->setToolTip(tr("Dimensions"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(dimension_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/move_rotate.svg"));
tool_button->setToolTip(tr("Modify"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(modify_actions);
tool_button = new QToolButton;
tool_button->setPopupMode(QToolButton::InstantPopup);
tool_button->setIcon(QIcon(":/icons/measure.svg"));
tool_button->setToolTip(tr("Measure"));
categories_toolbar->addWidget(tool_button);
tool_button->addActions(info_actions);
main_window->addToolBar(Qt::LeftToolBarArea, categories_toolbar);
return categories_toolbar;
}
void LC_WidgetFactory::createMenus(QMenuBar* menu_bar)
{
QMenu* sub_menu;
// <[~ File ~]>
file_menu = new QMenu(QC_ApplicationWindow::tr("&File"), menu_bar);
file_menu->setObjectName("File");
file_menu->setTearOffEnabled(true);
file_menu->addAction(a_map["FileNew"]);
file_menu->addAction(a_map["FileNewTemplate"]);
file_menu->addAction(a_map["FileOpen"]);
file_menu->addSeparator();
file_menu->addAction(a_map["FileSave"]);
file_menu->addAction(a_map["FileSaveAs"]);
file_menu->addAction(a_map["FileSaveAll"]);
file_menu->addSeparator();
sub_menu = file_menu->addMenu(QIcon(":/icons/import.svg"), QC_ApplicationWindow::tr("Import"));
sub_menu->setObjectName("Import");
sub_menu->addAction(a_map["DrawImage"]);
sub_menu->addAction(a_map["BlocksImport"]);
sub_menu = file_menu->addMenu(QIcon(":/icons/export.svg"), QC_ApplicationWindow::tr("Export"));
sub_menu->setObjectName("Export");
sub_menu->addAction(a_map["FileExportMakerCam"]);
sub_menu->addAction(a_map["FilePrintPDF"]);
sub_menu->addAction(a_map["FileExport"]);
file_menu->addSeparator();
file_menu->addAction(a_map["FilePrint"]);
file_menu->addAction(a_map["FilePrintPreview"]);
file_menu->addSeparator();
file_menu->addAction(a_map["FileClose"]);
file_menu->addAction(a_map["FileCloseAll"]);
file_menu->addAction(a_map["FileQuit"]);
file_menu->addSeparator();
// <[~ Options ~]>
QMenu* settings_menu = new QMenu(QC_ApplicationWindow::tr("&Options"), menu_bar);
settings_menu->setObjectName("options_menu");
settings_menu->setTearOffEnabled(true);
settings_menu->addAction(a_map["OptionsGeneral"]);
settings_menu->addAction(a_map["OptionsDrawing"]);
settings_menu->addAction(a_map["WidgetOptions"]);
settings_menu->addAction(a_map["DeviceOptions"]);
settings_menu->addAction(a_map["ReloadStyleSheet"]);
// <[~ Edit ~]>
QMenu* edit_menu = new QMenu(QC_ApplicationWindow::tr("&Edit"), menu_bar);
edit_menu->setObjectName("Edit");
edit_menu->setTearOffEnabled(true);
edit_menu->addAction(a_map["EditKillAllActions"]);
edit_menu->addSeparator();
edit_menu->addAction(a_map["EditUndo"]);
edit_menu->addAction(a_map["EditRedo"]);
edit_menu->addSeparator();
edit_menu->addAction(a_map["EditCut"]);
edit_menu->addAction(a_map["EditCopy"]);
edit_menu->addAction(a_map["EditPaste"]);
edit_menu->addAction(a_map["ModifyDeleteQuick"]);
// <[~ Plugins ~]>
QMenu* plugins_menu = new QMenu(QC_ApplicationWindow::tr("Pl&ugins"), menu_bar);
plugins_menu->setObjectName("plugins_menu");
plugins_menu->setTearOffEnabled(true);
// <[~ View ~]>
QMenu* view_menu = new QMenu(QC_ApplicationWindow::tr("&View"), menu_bar);
view_menu->setObjectName("view_menu");
view_menu->setTearOffEnabled(true);
view_menu->addAction(a_map["Fullscreen"]);
view_menu->addAction(a_map["ViewStatusBar"]);
view_menu->addAction(a_map["ViewGrid"]);
view_menu->addAction(a_map["ViewDraft"]);
view_menu->addSeparator();
view_menu->addAction(a_map["ZoomRedraw"]);
view_menu->addAction(a_map["ZoomIn"]);
view_menu->addAction(a_map["ZoomOut"]);
view_menu->addAction(a_map["ZoomAuto"]);
view_menu->addAction(a_map["ZoomPrevious"]);
view_menu->addAction(a_map["ZoomWindow"]);
view_menu->addAction(a_map["ZoomPan"]);
// <[~ Tools ~]>
QMenu* tools_menu = new QMenu(QC_ApplicationWindow::tr("&Tools"), menu_bar);
tools_menu->setObjectName("tools_menu");
tools_menu->setTearOffEnabled(true);
// <[~ Lines ~]>
sub_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Line"));
sub_menu->setIcon(QIcon(":/icons/line.svg"));
sub_menu->setObjectName("Line");
sub_menu->addActions(line_actions);
// <[~ Circles ~]>
sub_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Circle"));
sub_menu->setIcon(QIcon(":/icons/circle.svg"));
sub_menu->setObjectName("Circle");
sub_menu->addActions(circle_actions);
// <[~ Curves ~]>
sub_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Curve"));
sub_menu->setIcon(QIcon(":/icons/line_freehand.svg"));
sub_menu->setObjectName("Curve");
sub_menu->addActions(curve_actions);
// <[~ Ellipses ~]>
sub_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Ellipse"));
sub_menu->setIcon(QIcon(":/icons/ellipses.svg"));
sub_menu->setObjectName("Ellipse");
sub_menu->addActions(ellipse_actions);
// <[~ Polylines ~]>
sub_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Polyline"));
sub_menu->setIcon(QIcon(":/icons/polylines_polyline.svg"));
sub_menu->setObjectName("Polyline");
sub_menu->addActions(polyline_actions);
// <[~ Select ~]>
QMenu* select_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Select"));
select_menu->setIcon(QIcon(":/icons/select.svg"));
select_menu->setObjectName("Select");
select_menu->setTearOffEnabled(true);
select_menu->addActions(select_actions);
// <[~ Dimension ~]>
QMenu* dimension_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("Dime&nsion"));
dimension_menu->setIcon(QIcon(":/icons/dim_horizontal.svg"));
dimension_menu->setObjectName("dimension_menu");
dimension_menu->setTearOffEnabled(true);
dimension_menu->addActions(dimension_actions);
// <[~ Order ~]>
QMenu* order_menu = new QMenu(QC_ApplicationWindow::tr("&Order"), menu_bar);
order_menu->setObjectName("order_menu");
order_menu->setTearOffEnabled(true);
order_menu->addAction(a_map["OrderTop"]);
order_menu->addAction(a_map["OrderBottom"]);
order_menu->addAction(a_map["OrderRaise"]);
order_menu->addAction(a_map["OrderLower"]);
// <[~ Modify ~]>
QMenu* modify_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Modify"));
modify_menu->setIcon(QIcon(":/icons/move_rotate.svg"));
modify_menu->setObjectName("Modify");
modify_menu->setTearOffEnabled(true);
modify_menu->addMenu(order_menu);
modify_menu->addActions(modify_actions);
// <[~ Info ~]>
QMenu* info_menu = tools_menu->addMenu(QC_ApplicationWindow::tr("&Info"));
info_menu->setIcon(QIcon(":/icons/measure.svg"));
info_menu->setObjectName("Info");
info_menu->setTearOffEnabled(true);
info_menu->addActions(info_actions);
tools_menu->addAction(a_map["DrawMText"]);
tools_menu->addAction(a_map["DrawText"]);
tools_menu->addAction(a_map["DrawHatch"]);
tools_menu->addAction(a_map["DrawPoint"]);
// <[~ Layer ~]>
// QMenu* layer_menu = new QMenu(QC_ApplicationWindow::tr("&Layer"), menu_bar);
// layer_menu->setObjectName("layer_menu");
// layer_menu->setTearOffEnabled(true);
// layer_menu->addActions(layer_actions);
// <[~ Block ~]>
// QMenu* block_menu = new QMenu(QC_ApplicationWindow::tr("&Block"), menu_bar);
// block_menu->setObjectName("block_menu");
// block_menu->setTearOffEnabled(true);
// block_menu->addActions(block_actions);
// <[~ Snapping ~]>
// QMenu* snap_menu = new QMenu(QC_ApplicationWindow::tr("Sna&p"), menu_bar);
// snap_menu->setObjectName("snap_menu");
// snap_menu->setTearOffEnabled(true);
// // QToolBar* snap_tb = main_window->findChild<QToolBar*>("snap_toolbar");
// snap_menu->addActions(snap_toolbar->actions());
// <[~ Drawings ~]>
windows_menu = new QMenu(QC_ApplicationWindow::tr("&Drawings"), menu_bar);
windows_menu->setObjectName("drawings_menu");
windows_menu->setTearOffEnabled(true);
windows_menu->addAction(a_map["Fullscreen"]); // temp way to show this menu on OS X
connect(windows_menu, SIGNAL(aboutToShow()),
main_window, SLOT(slotWindowsMenuAboutToShow()));
// <[~ Help ~]>
QMenu* help_menu = new QMenu(QC_ApplicationWindow::tr("&Help"), menu_bar);
help_menu->setObjectName("Help");
help_menu->setTearOffEnabled(true);
QAction* wiki_link = new QAction(QC_ApplicationWindow::tr("Online"), main_window);
connect(wiki_link, SIGNAL(triggered()), main_window, SLOT(invokeLinkList()));
help_menu->addAction(wiki_link);
help_menu->addSeparator();
QAction* help_about = new QAction(QIcon(":/main/librecad.png"), QC_ApplicationWindow::tr("About"), main_window);
connect(help_about, SIGNAL(triggered()), main_window, SLOT(showAboutWindow()));
help_menu->addAction(help_about);
QAction* license = new QAction(QObject::tr("License"), main_window);
connect(license, SIGNAL(triggered()), main_window, SLOT(invokeLicenseWindow()));
help_menu->addAction(license);
// <[~ Widgets Menu ~]>
QMenu* widgets_menu = new QMenu("Widgets", menu_bar);
widgets_menu->setTearOffEnabled(true);
// <[~ Dock Areas Menu ~]>
QMenu* dockareas_menu = new QMenu("Dock Areas", widgets_menu);
dockareas_menu->addAction(a_map["LeftDockAreaToggle"]);
dockareas_menu->addAction(a_map["RightDockAreaToggle"]);
dockareas_menu->addAction(a_map["TopDockAreaToggle"]);
dockareas_menu->addAction(a_map["BottomDockAreaToggle"]);
dockareas_menu->addAction(a_map["FloatingDockwidgetsToggle"]);
// <[~ Dock Widgets Menu ~]>
QMenu* dockwidgets_menu = new QMenu(QC_ApplicationWindow::tr("Dock Wid&gets"), widgets_menu);//lihongchang
dockwidgets_menu->setObjectName("dockwidgets_menu");
dockwidgets_menu->setTearOffEnabled(true);
dockwidgets_menu->addSeparator();
QList<QDockWidget*> dockwidgets = main_window->findChildren<QDockWidget*>();
main_window->sortWidgetsByTitle(dockwidgets);
foreach (QDockWidget* dw, dockwidgets)
{
if (main_window->dockWidgetArea(dw) == Qt::RightDockWidgetArea)
dockwidgets_menu->addAction(dw->toggleViewAction());
}
dockwidgets_menu->addSeparator();
foreach (QDockWidget* dw, dockwidgets)
{
if (main_window->dockWidgetArea(dw) == Qt::LeftDockWidgetArea)
dockwidgets_menu->addAction(dw->toggleViewAction());
}
// dm add
foreach (QDockWidget* dw, dockwidgets)
{
if (main_window->dockWidgetArea(dw) == Qt::BottomDockWidgetArea)
dockwidgets_menu->addAction(dw->toggleViewAction());
}
// <[~ Toolbars Menu ~]>
QMenu* toolbars_menu = new QMenu(QC_ApplicationWindow::tr("&Toolbars"), widgets_menu);
toolbars_menu->setObjectName("toolbars_menu");
toolbars_menu->setTearOffEnabled(true);
QList<QToolBar*> toolbars = main_window->findChildren<QToolBar*>();
main_window->sortWidgetsByTitle(toolbars);
foreach (QToolBar* tb, toolbars)
{
toolbars_menu->addAction(tb->toggleViewAction());
}
//dockwidgets_menu->setEnabled(false);
widgets_menu->addMenu(dockareas_menu);
widgets_menu->addMenu(dockwidgets_menu);
widgets_menu->addMenu(toolbars_menu);
widgets_menu->addAction(a_map["InvokeMenuCreator"]);
widgets_menu->addAction(a_map["InvokeToolbarCreator"]);
// <[~ MenuBar Layout~]>
menu_bar->addMenu(file_menu);
menu_bar->addMenu(settings_menu);
menu_bar->addMenu(edit_menu);
menu_bar->addMenu(view_menu);
menu_bar->addMenu(plugins_menu);
// menu_bar->addMenu(select_menu);
menu_bar->addMenu(tools_menu);
// menu_bar->addMenu(dimension_menu);
// menu_bar->addMenu(modify_menu);
// menu_bar->addMenu(snap_menu);
// menu_bar->addMenu(info_menu);
// menu_bar->addMenu(layer_menu);
// menu_bar->addMenu(block_menu);
menu_bar->addMenu(widgets_menu);
menu_bar->addMenu(windows_menu);
menu_bar->addMenu(help_menu);
}