MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), m_plugins(PluginRegistry::instance()) { ui->setupUi(this); connect(ui->actionEdit, SIGNAL(triggered(bool)), this, SLOT(openEdit())); connect(ui->actionRecord, SIGNAL(triggered(bool)), this, SLOT(openRecord())); connect(ui->actionPlugins, SIGNAL(triggered(bool)), this, SLOT(openPlugins())); connect(ui->recordPage, SIGNAL(recordFinished()), this, SLOT(editRequests())); QToolButton *openButton = static_cast<QToolButton *>(ui->toolBar->widgetForAction(ui->actionOpen)); openButton->setPopupMode(QToolButton::MenuButtonPopup); QAction *openSeparator = new QAction(this); openSeparator->setSeparator(true); openButton->addAction(openSeparator); QToolButton *saveButton = static_cast<QToolButton *>(ui->toolBar->widgetForAction(ui->actionSave)); saveButton->setPopupMode(QToolButton::MenuButtonPopup); saveButton->addAction(ui->actionSaveAs); connect(ui->actionNew, SIGNAL(triggered(bool)), ui->editPage, SLOT(newProject())); connect(ui->actionOpen, SIGNAL(triggered(bool)), this, SLOT(loadProject())); connect(ui->actionSave, SIGNAL(triggered(bool)), this, SLOT(saveProject())); connect(ui->actionSaveAs, SIGNAL(triggered(bool)), this, SLOT(saveProjectAs())); selectAction(ui->actionEdit); updateOpenMenu(); connect(&m_plugins, SIGNAL(toolPluginLoaded(QObject *)), ui->editPage, SLOT(addToolToToolbar(QObject *))); PostMonster::APIFunctions api; api.evalScript = WorkEngine::evalScript; api.serializeRequest = Common::serializeRequest; api.deserializeRequest = Common::deserializeRequest; api.serializeResponse = Common::serializeResponse; api.deserializeResponse = Common::deserializeResponse; api.defaultEncodings = Common::encodings; api.dpiScaleFactor = Common::dpiScaleFactor; m_plugins.loadPlugins(api); if (m_plugins.tool("http")) { PostMonster::HttpToolPluginInterface *httpTool = static_cast<PostMonster::HttpToolPluginInterface *>(m_plugins.tool("http")); ui->editPage->setRequestsModel(httpTool, &m_requestsModel); ui->recordPage->setRequestsModel(httpTool, &m_requestsModel); } connect(ui->editPage, &EditForm::debugStatusChanged, ui->actionNew, &QAction::setDisabled); connect(ui->editPage, &EditForm::debugStatusChanged, ui->actionOpen, &QAction::setDisabled); connect(ui->editPage, &EditForm::debugStatusChanged, ui->actionRecord, &QAction::setDisabled); foreach (QToolBar *toolBar, findChildren<QToolBar *>()) { toolBar->setIconSize(toolBar->iconSize() * Common::dpiScaleFactor()); }
void prepareSearchLine() { ui->searchLine->setDelayedSignals(true); QToolButton *left = new QToolButton(q); left->setIcon(theme()->icon(Core::Constants::ICONSEARCH)); ui->searchLine->setLeftButton(left); QToolButton *right = new QToolButton(q); right->addAction(aSearchMolsAndClass); right->addAction(aSearchClassOnly); right->addAction(aSearchMolsOnly); right->setDefaultAction(aSearchMolsAndClass); ui->searchLine->setRightButton(right); QObject::connect(right, SIGNAL(triggered(QAction*)), q, SLOT(toggleClassMolsFilter(QAction*))); }
EditTools::EditTools(QWidget* parent) : QDockWidget(parent) { setObjectName("edit-tools"); setWindowTitle(tr("Edit Mode Tools")); setAllowedAreas(Qt::DockWidgetAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea)); QToolBar* tb = new QToolBar(tr("Edit Mode Tools")); tb->setIconSize(QSize(preferences.iconWidth, preferences.iconHeight)); QToolButton* b = new QToolButton(this); QAction* a = getAction("hraster"); a->setCheckable(true); b->setDefaultAction(a); b->setContextMenuPolicy(Qt::ActionsContextMenu); b->addAction(getAction("config-raster")); tb->addWidget(b); b = new QToolButton(this); a = getAction("vraster"); a->setCheckable(true); b->setDefaultAction(a); b->setContextMenuPolicy(Qt::ActionsContextMenu); b->addAction(getAction("config-raster")); tb->addWidget(b); _editX = new QDoubleSpinBox(this); _editX->setSuffix(tr("sp")); _editX->setRange(-99999, 99999); _editX->setSingleStep(.1); _editY = new QDoubleSpinBox(this); _editY->setSuffix(tr("sp")); _editY->setRange(-99999, 99999); _editY->setSingleStep(.1); xLabel = new QLabel(tr("x:"), this); yLabel = new QLabel(tr("y:"), this); _localEdit = false; tb->addWidget(xLabel); tb->addWidget(_editX); tb->addWidget(yLabel); tb->addWidget(_editY); connect(_editX, SIGNAL(valueChanged(double)), SLOT(editXChanged(double))); connect(_editY, SIGNAL(valueChanged(double)), SLOT(editYChanged(double))); setWidget(tb); QWidget* w = new QWidget(this); setTitleBarWidget(w); titleBarWidget()->hide(); }
void QgsGuiVectorLayerTools::commitError( QgsVectorLayer* vlayer ) const { QgsMessageViewer *mv = new QgsMessageViewer(); mv->setWindowTitle( tr( "Commit errors" ) ); mv->setMessageAsPlainText( tr( "Could not commit changes to layer %1" ).arg( vlayer->name() ) + "\n\n" + tr( "Errors: %1\n" ).arg( vlayer->commitErrors().join( "\n " ) ) ); QToolButton *showMore = new QToolButton(); // store pointer to vlayer in data of QAction QAction *act = new QAction( showMore ); act->setData( QVariant( QMetaType::QObjectStar, &vlayer ) ); act->setText( tr( "Show more" ) ); showMore->setStyleSheet( "background-color: rgba(255, 255, 255, 0); color: black; text-decoration: underline;" ); showMore->setCursor( Qt::PointingHandCursor ); showMore->setSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ); showMore->addAction( act ); showMore->setDefaultAction( act ); connect( showMore, SIGNAL( triggered( QAction* ) ), mv, SLOT( exec() ) ); connect( showMore, SIGNAL( triggered( QAction* ) ), showMore, SLOT( deleteLater() ) ); // no timeout set, since notice needs attention and is only shown first time layer is labeled QgsMessageBarItem *errorMsg = new QgsMessageBarItem( tr( "Commit errors" ), tr( "Could not commit changes to layer %1" ).arg( vlayer->name() ), showMore, QgsMessageBar::WARNING, 0, QgisApp::instance()->messageBar() ); QgisApp::instance()->messageBar()->pushItem( errorMsg ); }
/** * @brief 构造函数 * @param [I] 平台指针 * @param [I] 父指针 * @param [I] 窗口标志 */ MainWindow::MainWindow(Workbench *wb, QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) , ui(new Ui::MainWindowClass) , m_workbench(wb) { ui->setupUi(this); m_messageWidget = MessageWidget::instance(); m_messageWidget->setParent(this, Qt::Tool); QStatusBar *statusBar = this->statusBar(); { QToolButton *button = new QToolButton(statusBar); button->setIcon(QApplication::style()->standardIcon(QStyle::SP_FileDialogDetailedView)); button->setAutoRaise(true); connect(button, SIGNAL(clicked()), workbench(), SLOT(showDebugger())); statusBar->addPermanentWidget(button); } // 显示消息按钮 { QToolButton *button = new QToolButton(statusBar); button->addAction(m_messageWidget->toggleAction()); button->setDefaultAction(m_messageWidget->toggleAction()); button->setAutoRaise(true); statusBar->addPermanentWidget(button); } }
QWidget* QgsAttributeTableView::createActionWidget( QgsFeatureId fid ) { QgsAttributeTableConfig attributeTableConfig = mFilterModel->layer()->attributeTableConfig(); QgsActionManager* actions = mFilterModel->layer()->actions(); QToolButton* toolButton = nullptr; QWidget* container = nullptr; if ( attributeTableConfig.actionWidgetStyle() == QgsAttributeTableConfig::DropDown ) { toolButton = new QToolButton( this ); toolButton->setPopupMode( QToolButton::MenuButtonPopup ); container = toolButton; } else { container = new QWidget( this ); container->setLayout( new QHBoxLayout() ); container->layout()->setMargin( 0 ); } for ( int i = 0; i < actions->size(); ++i ) { const QgsAction& action = actions->at( i ); if ( !action.showInAttributeTable() ) continue; QAction* act = new QAction( action.icon(), action.shortTitle().isEmpty() ? action.name() : action.shortTitle(), toolButton ); act->setToolTip( action.name() ); act->setData( i ); act->setProperty( "fid", fid ); connect( act, SIGNAL( triggered( bool ) ), this, SLOT( actionTriggered() ) ); if ( attributeTableConfig.actionWidgetStyle() == QgsAttributeTableConfig::DropDown ) { toolButton->addAction( act ); if ( actions->defaultAction() == i ) toolButton->setDefaultAction( act ); container = toolButton; } else { QToolButton* btn = new QToolButton; btn->setDefaultAction( act ); container->layout()->addWidget( btn ); } } if ( toolButton && !toolButton->actions().isEmpty() && actions->defaultAction() == -1 ) toolButton->setDefaultAction( toolButton->actions().first() ); return container; }
QWidget * SeekingButton::createWidget( QWidget * parent ) { QToolButton * button = new QToolButton(parent); button->setPopupMode(QToolButton::MenuButtonPopup); if (_actions.count() > 0 ) { button->setDefaultAction( _actions[0] ); } for (int n = 1; n < _actions.count(); n++) { button->addAction( _actions[n] ); } return button; }
void SCgWindow::createToolBar() { mToolBar = new QToolBar(this); mToolBar->setIconSize(QSize(32, 32)); QActionGroup* group = new QActionGroup(mToolBar); // Select mode QAction *action = new QAction(findIcon("tool-select.png"), tr("Selection mode"), mToolBar); action->setCheckable(true); action->setChecked(true); action->setShortcut(QKeySequence(tr("1", "Selection mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Select] = action; connect(action, SIGNAL(triggered()), this, SLOT(onSelectMode())); //Pair creation mode action = new QAction(findIcon("tool-pair.png"), tr("Pair creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("2", "Pair creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Pair] = action; connect(action, SIGNAL(triggered()), this, SLOT(onPairMode())); //Bus creation mode action = new QAction(findIcon("tool-bus.png"), tr("Bus creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("3", "Bus creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Bus] = action; connect(action, SIGNAL(triggered()), this, SLOT(onBusMode())); //Contour creation mode action = new QAction(findIcon("tool-contour.png"), tr("Contour creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("4", "Contour creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Contour] = action; connect(action, SIGNAL(triggered()), this, SLOT(onContourMode())); // mToolBar->addSeparator(); // // align group button QToolButton *alignButton = new QToolButton(mToolBar); alignButton->setIcon(findIcon("tool-align.png")); alignButton->setPopupMode(QToolButton::InstantPopup); alignButton->setToolTip(tr("Alignment")); mToolBar->addWidget(alignButton); //Grid alignment action = new QAction(findIcon("tool-align-grid.png"), tr("Grid alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("5", "Grid alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onGridAlignment())); // tuple alignment action = new QAction(findIcon("tool-align-tuple.png"), tr("Tuple alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("6", "Tuple alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onTupleAlignment())); //Vertical alignment action = new QAction(findIcon("tool-align-vert.png"), tr("Vertical alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("7", "Vertical alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onVerticalAlignment())); //Horizontal alignment action = new QAction(findIcon("tool-align-horz.png"), tr("Horizontal alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("8", "Horizontal alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onHorizontalAlignment())); // selection group button QToolButton *selectButton = new QToolButton(mToolBar); selectButton->setIcon(findIcon("tool-select-group.png")); selectButton->setPopupMode(QToolButton::InstantPopup); selectButton->setToolTip(tr("Selection group")); mToolBar->addWidget(selectButton); // input/output selection action = new QAction(findIcon("tool-select-inout.png"), tr("Select input/output"), mToolBar); action->setCheckable(false); selectButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onSelectInputOutput())); // sbgraph selection action = new QAction(findIcon("tool-select-subgraph.png"), tr("Select subgraph"), mToolBar); action->setCheckable(false); selectButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onSelectSubgraph())); mToolBar->addSeparator(); action = new QAction(findIcon("tool-export-image.png"), tr("Export image"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("0", "Export image"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onExportImage())); // mToolBar->addSeparator(); // //Zoom in action = new QAction(findIcon("tool-zoom-in.png"), tr("Zoom in"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("+", "Zoom in"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onZoomIn())); //Scale combobox QComboBox* b = new QComboBox(mToolBar); b->setEditable(true); b->setInsertPolicy(QComboBox::NoInsert); b->addItems(SCgWindow::mScales); b->setCurrentIndex(mScales.indexOf("100")); mZoomFactorLine = b->lineEdit(); mZoomFactorLine->setInputMask("D90%"); mToolBar->addWidget(b); connect(mZoomFactorLine, SIGNAL(textChanged(const QString&)), mView, SLOT(setScale(const QString&))); connect(mView, SIGNAL(scaleChanged(qreal)), this, SLOT(onViewScaleChanged(qreal))); //Zoom out action = new QAction(findIcon("tool-zoom-out.png"), tr("Zoom out"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("-", "Zoom out"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onZoomOut())); mToolBar->setWindowTitle(tr("SCg Tools")); mToolBar->setObjectName("SCgMainToolBar"); //! @bug toolbar state is not saved mToolBar->setMovable(false); }
QgsComposer::QgsComposer( QgisApp *qgis, const QString& title ) : QMainWindow() , mTitle( title ) , mUndoView( 0 ) { setupUi( this ); setWindowTitle( mTitle ); setupTheme(); connect( mButtonBox, SIGNAL( rejected() ), this, SLOT( close() ) ); QSettings settings; int size = settings.value( "/IconSize", QGIS_ICON_SIZE ).toInt(); setIconSize( QSize( size, size ) ); #ifndef Q_WS_MAC setFontSize( settings.value( "/fontPointSize", QGIS_DEFAULT_FONTSIZE ).toInt() ); #endif QToolButton* orderingToolButton = new QToolButton( this ); orderingToolButton->setPopupMode( QToolButton::InstantPopup ); orderingToolButton->setAutoRaise( true ); orderingToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); orderingToolButton->addAction( mActionRaiseItems ); orderingToolButton->addAction( mActionLowerItems ); orderingToolButton->addAction( mActionMoveItemsToTop ); orderingToolButton->addAction( mActionMoveItemsToBottom ); orderingToolButton->setDefaultAction( mActionRaiseItems ); toolBar->addWidget( orderingToolButton ); QToolButton* alignToolButton = new QToolButton( this ); alignToolButton->setPopupMode( QToolButton::InstantPopup ); alignToolButton->setAutoRaise( true ); alignToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); alignToolButton->addAction( mActionAlignLeft ); alignToolButton->addAction( mActionAlignHCenter ); alignToolButton->addAction( mActionAlignRight ); alignToolButton->addAction( mActionAlignTop ); alignToolButton->addAction( mActionAlignVCenter ); alignToolButton->addAction( mActionAlignBottom ); alignToolButton->setDefaultAction( mActionAlignLeft ); toolBar->addWidget( alignToolButton ); QToolButton* shapeToolButton = new QToolButton( toolBar ); shapeToolButton->setCheckable( true ); shapeToolButton->setPopupMode( QToolButton::InstantPopup ); shapeToolButton->setAutoRaise( true ); shapeToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); shapeToolButton->addAction( mActionAddRectangle ); shapeToolButton->addAction( mActionAddTriangle ); shapeToolButton->addAction( mActionAddEllipse ); shapeToolButton->setDefaultAction( mActionAddEllipse ); toolBar->insertWidget( mActionAddArrow, shapeToolButton ); QActionGroup* toggleActionGroup = new QActionGroup( this ); toggleActionGroup->addAction( mActionMoveItemContent ); toggleActionGroup->addAction( mActionAddNewMap ); toggleActionGroup->addAction( mActionAddNewLabel ); toggleActionGroup->addAction( mActionAddNewLegend ); toggleActionGroup->addAction( mActionAddNewScalebar ); toggleActionGroup->addAction( mActionAddImage ); toggleActionGroup->addAction( mActionSelectMoveItem ); toggleActionGroup->addAction( mActionAddRectangle ); toggleActionGroup->addAction( mActionAddTriangle ); toggleActionGroup->addAction( mActionAddEllipse ); toggleActionGroup->addAction( mActionAddArrow ); toggleActionGroup->addAction( mActionAddTable ); toggleActionGroup->addAction( mActionAddHtml ); toggleActionGroup->setExclusive( true ); mActionAddNewMap->setCheckable( true ); mActionAddNewLabel->setCheckable( true ); mActionAddNewLegend->setCheckable( true ); mActionSelectMoveItem->setCheckable( true ); mActionAddNewScalebar->setCheckable( true ); mActionAddImage->setCheckable( true ); mActionMoveItemContent->setCheckable( true ); mActionAddArrow->setCheckable( true ); #ifdef Q_WS_MAC QMenu *appMenu = menuBar()->addMenu( tr( "QGIS" ) ); appMenu->addAction( QgisApp::instance()->actionAbout() ); appMenu->addAction( QgisApp::instance()->actionOptions() ); #endif QMenu *fileMenu = menuBar()->addMenu( tr( "File" ) ); fileMenu->addAction( mActionLoadFromTemplate ); fileMenu->addAction( mActionSaveAsTemplate ); fileMenu->addSeparator(); fileMenu->addAction( mActionExportAsImage ); fileMenu->addAction( mActionExportAsPDF ); fileMenu->addAction( mActionExportAsSVG ); fileMenu->addSeparator(); fileMenu->addAction( mActionPageSetup ); fileMenu->addAction( mActionPrint ); fileMenu->addSeparator(); fileMenu->addAction( mActionQuit ); QObject::connect( mActionQuit, SIGNAL( triggered() ), this, SLOT( close() ) ); QMenu *viewMenu = menuBar()->addMenu( tr( "View" ) ); viewMenu->addAction( mActionZoomIn ); viewMenu->addAction( mActionZoomOut ); viewMenu->addAction( mActionZoomAll ); viewMenu->addSeparator(); viewMenu->addAction( mActionRefreshView ); // Panel and toolbar submenus mPanelMenu = new QMenu( tr( "Panels" ), this ); mPanelMenu->setObjectName( "mPanelMenu" ); mToolbarMenu = new QMenu( tr( "Toolbars" ), this ); mToolbarMenu->setObjectName( "mToolbarMenu" ); viewMenu->addSeparator(); viewMenu->addMenu( mPanelMenu ); viewMenu->addMenu( mToolbarMenu ); // toolBar already exists, add other widgets as they are created mToolbarMenu->addAction( toolBar->toggleViewAction() ); QMenu *layoutMenu = menuBar()->addMenu( tr( "Layout" ) ); layoutMenu->addAction( mActionUndo ); layoutMenu->addAction( mActionRedo ); layoutMenu->addSeparator(); layoutMenu->addAction( mActionAddNewMap ); layoutMenu->addAction( mActionAddNewLabel ); layoutMenu->addAction( mActionAddNewScalebar ); layoutMenu->addAction( mActionAddNewLegend ); layoutMenu->addAction( mActionAddImage ); layoutMenu->addAction( mActionSelectMoveItem ); layoutMenu->addAction( mActionMoveItemContent ); layoutMenu->addAction( mActionAddArrow ); layoutMenu->addAction( mActionAddTable ); layoutMenu->addSeparator(); layoutMenu->addAction( mActionGroupItems ); layoutMenu->addAction( mActionUngroupItems ); layoutMenu->addAction( mActionRaiseItems ); layoutMenu->addAction( mActionLowerItems ); layoutMenu->addAction( mActionMoveItemsToTop ); layoutMenu->addAction( mActionMoveItemsToBottom ); #ifdef Q_WS_MAC #ifndef Q_WS_MAC64 /* assertion failure in NSMenuItem setSubmenu (Qt 4.5.0-snapshot-20080830) */ menuBar()->addMenu( QgisApp::instance()->windowMenu() ); menuBar()->addMenu( QgisApp::instance()->helpMenu() ); #endif #endif mQgis = qgis; mFirstTime = true; // Create action to select this window mWindowAction = new QAction( windowTitle(), this ); connect( mWindowAction, SIGNAL( triggered() ), this, SLOT( activate() ) ); QgsDebugMsg( "entered." ); setMouseTracking( true ); mViewFrame->setMouseTracking( true ); //create composer view mView = new QgsComposerView( mViewFrame ); //init undo/redo buttons mComposition = new QgsComposition( mQgis->mapCanvas()->mapRenderer() ); mActionUndo->setEnabled( false ); mActionRedo->setEnabled( false ); if ( mComposition->undoStack() ) { connect( mComposition->undoStack(), SIGNAL( canUndoChanged( bool ) ), mActionUndo, SLOT( setEnabled( bool ) ) ); connect( mComposition->undoStack(), SIGNAL( canRedoChanged( bool ) ), mActionRedo, SLOT( setEnabled( bool ) ) ); }
void SCgWindow::createToolBar() { mToolBar = new QToolBar(this); mToolBar->setIconSize(QSize(32, 32)); QActionGroup* group = new QActionGroup(mToolBar); // Select mode QAction *action = new QAction(findIcon("tool-select.png"), tr("Selection mode"), mToolBar); action->setCheckable(true); action->setChecked(true); action->setShortcut(QKeySequence(tr("1", "Selection mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Select] = action; connect(action, SIGNAL(triggered()), this, SLOT(onSelectMode())); //Pair creation mode action = new QAction(findIcon("tool-pair.png"), tr("Pair creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("2", "Pair creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Pair] = action; connect(action, SIGNAL(triggered()), this, SLOT(onPairMode())); //Bus creation mode action = new QAction(findIcon("tool-bus.png"), tr("Bus creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("3", "Bus creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Bus] = action; connect(action, SIGNAL(triggered()), this, SLOT(onBusMode())); //Contour creation mode action = new QAction(findIcon("tool-contour.png"), tr("Contour creation mode"), mToolBar); action->setCheckable(true); action->setShortcut(QKeySequence(tr("4", "Contour creation mode"))); group->addAction(action); mToolBar->addAction(action); mMode2Action[SCgScene::Mode_Contour] = action; connect(action, SIGNAL(triggered()), this, SLOT(onContourMode())); // mToolBar->addSeparator(); // // align group button QToolButton *alignButton = new QToolButton(mToolBar); alignButton->setIcon(findIcon("tool-align.png")); alignButton->setPopupMode(QToolButton::InstantPopup); mToolBar->addWidget(alignButton); //Grid alignment action = new QAction(findIcon("tool-align-grid.png"), tr("Grid alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("5", "Grid alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onGridAlignment())); // tuple alignment action = new QAction(findIcon("tool-align-tuple.png"), tr("Tuple alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("6", "Tuple alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onTupleAlignment())); //Vertical alignment action = new QAction(findIcon("tool-align-vert.png"), tr("Vertical alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("7", "Vertical alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onVerticalAlignment())); //Horizontal alignment action = new QAction(findIcon("tool-align-horz.png"), tr("Horizontal alignment"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("8", "Horizontal alignment"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onHorizontalAlignment())); // Energy-based layout action = new QAction(findIcon("tool-align-energy.png"), tr("Energy-based layout"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("9", "Energy-based layout"))); alignButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onEnergyBasedLayout())); // selection group button QToolButton *selectButton = new QToolButton(mToolBar); selectButton->setIcon(findIcon("tool-select-group.png")); selectButton->setPopupMode(QToolButton::InstantPopup); mToolBar->addWidget(selectButton); // input/output selection action = new QAction(findIcon("tool-select-inout.png"), tr("Select input/output"), mToolBar); action->setCheckable(false); selectButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onSelectInputOutput())); // sbgraph selection action = new QAction(findIcon("tool-select-subgraph.png"), tr("Select subgraph"), mToolBar); action->setCheckable(false); selectButton->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onSelectSubgraph())); mToolBar->addSeparator(); action = new QAction(findIcon("tool-export-image.png"), tr("Export image"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("0", "Export image"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onExportImage())); // mToolBar->addSeparator(); // //Zoom label mZoomLabel = new QLabel(mToolBar); mToolBar->addWidget(mZoomLabel); //Zoom in action = new QAction(findIcon("tool-zoom-in.png"), tr("Zoom in"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("+", "Zoom in"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onZoomIn())); //Zoom slider mZoomSlider = new QSlider(Qt::Vertical); //mZoomSlider->setInvertedAppearance(false); mZoomSlider->setRange(25, 200); mZoomSlider->setTickPosition(QSlider::TicksBelow); mZoomSlider->setTickInterval(25); mZoomSlider->setFixedHeight(150); mZoomSlider->setSliderPosition(100); mToolBar->addWidget(mZoomSlider); connect(mZoomSlider, SIGNAL(valueChanged(int)), mView, SLOT(setScale(int))); connect(mZoomSlider, SIGNAL(valueChanged(int)), this, SLOT(updateZoomLabel(int))); connect(mView, SIGNAL(scaleChanged(qreal)), this, SLOT(onViewScaleChanged(qreal))); //Zoom out action = new QAction(findIcon("tool-zoom-out.png"), tr("Zoom out"), mToolBar); action->setCheckable(false); action->setShortcut(QKeySequence(tr("-", "Zoom out"))); mToolBar->addAction(action); connect(action, SIGNAL(triggered()), this, SLOT(onZoomOut())); mToolBar->setWindowTitle(tr("SCg Tools")); mToolBar->setObjectName("SCgMainToolBar"); //! @bug toolbar state is not saved mToolBar->setMovable(false); }
QgsLayoutDesignerDialog::QgsLayoutDesignerDialog( QWidget *parent, Qt::WindowFlags flags ) : QMainWindow( parent, flags ) , mInterface( new QgsAppLayoutDesignerInterface( this ) ) , mToolsActionGroup( new QActionGroup( this ) ) { if ( !sInitializedRegistry ) { initializeRegistry(); } QgsSettings settings; int size = settings.value( QStringLiteral( "IconSize" ), QGIS_ICON_SIZE ).toInt(); setIconSize( QSize( size, size ) ); setStyleSheet( QgisApp::instance()->styleSheet() ); setupUi( this ); setWindowTitle( tr( "QGIS Layout Designer" ) ); setAttribute( Qt::WA_DeleteOnClose ); #if QT_VERSION >= 0x050600 setDockOptions( dockOptions() | QMainWindow::GroupedDragging ); #endif //create layout view QGridLayout *viewLayout = new QGridLayout(); viewLayout->setSpacing( 0 ); viewLayout->setMargin( 0 ); viewLayout->setContentsMargins( 0, 0, 0, 0 ); centralWidget()->layout()->setSpacing( 0 ); centralWidget()->layout()->setMargin( 0 ); centralWidget()->layout()->setContentsMargins( 0, 0, 0, 0 ); mHorizontalRuler = new QgsLayoutRuler( nullptr, Qt::Horizontal ); mVerticalRuler = new QgsLayoutRuler( nullptr, Qt::Vertical ); mRulerLayoutFix = new QWidget(); mRulerLayoutFix->setAttribute( Qt::WA_NoMousePropagation ); mRulerLayoutFix->setBackgroundRole( QPalette::Window ); mRulerLayoutFix->setFixedSize( mVerticalRuler->rulerSize(), mHorizontalRuler->rulerSize() ); viewLayout->addWidget( mRulerLayoutFix, 0, 0 ); viewLayout->addWidget( mHorizontalRuler, 0, 1 ); viewLayout->addWidget( mVerticalRuler, 1, 0 ); //initial state of rulers bool showRulers = settings.value( QStringLiteral( "LayoutDesigner/showRulers" ), true ).toBool(); mActionShowRulers->setChecked( showRulers ); mHorizontalRuler->setVisible( showRulers ); mVerticalRuler->setVisible( showRulers ); mRulerLayoutFix->setVisible( showRulers ); mActionShowRulers->blockSignals( false ); connect( mActionShowRulers, &QAction::triggered, this, &QgsLayoutDesignerDialog::showRulers ); QMenu *rulerMenu = new QMenu( this ); rulerMenu->addAction( mActionShowGuides ); rulerMenu->addAction( mActionSnapGuides ); rulerMenu->addAction( mActionManageGuides ); rulerMenu->addAction( mActionClearGuides ); rulerMenu->addSeparator(); rulerMenu->addAction( mActionShowRulers ); mHorizontalRuler->setContextMenu( rulerMenu ); mVerticalRuler->setContextMenu( rulerMenu ); connect( mActionRefreshView, &QAction::triggered, this, &QgsLayoutDesignerDialog::refreshLayout ); connect( mActionShowGrid, &QAction::triggered, this, &QgsLayoutDesignerDialog::showGrid ); connect( mActionSnapGrid, &QAction::triggered, this, &QgsLayoutDesignerDialog::snapToGrid ); connect( mActionShowGuides, &QAction::triggered, this, &QgsLayoutDesignerDialog::showGuides ); connect( mActionSnapGuides, &QAction::triggered, this, &QgsLayoutDesignerDialog::snapToGuides ); connect( mActionSmartGuides, &QAction::triggered, this, &QgsLayoutDesignerDialog::snapToItems ); connect( mActionShowBoxes, &QAction::triggered, this, &QgsLayoutDesignerDialog::showBoxes ); connect( mActionShowPage, &QAction::triggered, this, &QgsLayoutDesignerDialog::showPages ); mView = new QgsLayoutView(); //mView->setMapCanvas( mQgis->mapCanvas() ); mView->setContentsMargins( 0, 0, 0, 0 ); mView->setHorizontalRuler( mHorizontalRuler ); mView->setVerticalRuler( mVerticalRuler ); viewLayout->addWidget( mView, 1, 1 ); //view does not accept focus via tab mView->setFocusPolicy( Qt::ClickFocus ); mViewFrame->setLayout( viewLayout ); mViewFrame->setContentsMargins( 0, 0, 0, 1 ); // 1 is deliberate! mView->setFrameShape( QFrame::NoFrame ); connect( mActionClose, &QAction::triggered, this, &QWidget::close ); // populate with initial items... const QList< int > itemMetadataIds = QgsGui::layoutItemGuiRegistry()->itemMetadataIds(); for ( int id : itemMetadataIds ) { itemTypeAdded( id ); } //..and listen out for new item types connect( QgsGui::layoutItemGuiRegistry(), &QgsLayoutItemGuiRegistry::typeAdded, this, &QgsLayoutDesignerDialog::itemTypeAdded ); QToolButton *orderingToolButton = new QToolButton( this ); orderingToolButton->setPopupMode( QToolButton::InstantPopup ); orderingToolButton->setAutoRaise( true ); orderingToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); orderingToolButton->addAction( mActionRaiseItems ); orderingToolButton->addAction( mActionLowerItems ); orderingToolButton->addAction( mActionMoveItemsToTop ); orderingToolButton->addAction( mActionMoveItemsToBottom ); orderingToolButton->setDefaultAction( mActionRaiseItems ); mActionsToolbar->addWidget( orderingToolButton ); QToolButton *alignToolButton = new QToolButton( this ); alignToolButton->setPopupMode( QToolButton::InstantPopup ); alignToolButton->setAutoRaise( true ); alignToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); alignToolButton->addAction( mActionAlignLeft ); alignToolButton->addAction( mActionAlignHCenter ); alignToolButton->addAction( mActionAlignRight ); alignToolButton->addAction( mActionAlignTop ); alignToolButton->addAction( mActionAlignVCenter ); alignToolButton->addAction( mActionAlignBottom ); alignToolButton->setDefaultAction( mActionAlignLeft ); mActionsToolbar->addWidget( alignToolButton ); QToolButton *distributeToolButton = new QToolButton( this ); distributeToolButton->setPopupMode( QToolButton::InstantPopup ); distributeToolButton->setAutoRaise( true ); distributeToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); distributeToolButton->addAction( mActionDistributeLeft ); distributeToolButton->addAction( mActionDistributeHCenter ); distributeToolButton->addAction( mActionDistributeRight ); distributeToolButton->addAction( mActionDistributeTop ); distributeToolButton->addAction( mActionDistributeVCenter ); distributeToolButton->addAction( mActionDistributeBottom ); distributeToolButton->setDefaultAction( mActionDistributeLeft ); mActionsToolbar->addWidget( distributeToolButton ); QToolButton *resizeToolButton = new QToolButton( this ); resizeToolButton->setPopupMode( QToolButton::InstantPopup ); resizeToolButton->setAutoRaise( true ); resizeToolButton->setToolButtonStyle( Qt::ToolButtonIconOnly ); resizeToolButton->addAction( mActionResizeNarrowest ); resizeToolButton->addAction( mActionResizeWidest ); resizeToolButton->addAction( mActionResizeShortest ); resizeToolButton->addAction( mActionResizeTallest ); resizeToolButton->addAction( mActionResizeToSquare ); resizeToolButton->setDefaultAction( mActionResizeNarrowest ); mActionsToolbar->addWidget( resizeToolButton ); mAddItemTool = new QgsLayoutViewToolAddItem( mView ); mAddNodeItemTool = new QgsLayoutViewToolAddNodeItem( mView ); mPanTool = new QgsLayoutViewToolPan( mView ); mPanTool->setAction( mActionPan ); mToolsActionGroup->addAction( mActionPan ); connect( mActionPan, &QAction::triggered, mPanTool, [ = ] { mView->setTool( mPanTool ); } ); mZoomTool = new QgsLayoutViewToolZoom( mView ); mZoomTool->setAction( mActionZoomTool ); mToolsActionGroup->addAction( mActionZoomTool ); connect( mActionZoomTool, &QAction::triggered, mZoomTool, [ = ] { mView->setTool( mZoomTool ); } ); mSelectTool = new QgsLayoutViewToolSelect( mView ); mSelectTool->setAction( mActionSelectMoveItem ); mToolsActionGroup->addAction( mActionSelectMoveItem ); connect( mActionSelectMoveItem, &QAction::triggered, mSelectTool, [ = ] { mView->setTool( mSelectTool ); } ); // after creating an item with the add item tool, switch immediately to select tool connect( mAddItemTool, &QgsLayoutViewToolAddItem::createdItem, this, [ = ] { mView->setTool( mSelectTool ); } ); connect( mAddNodeItemTool, &QgsLayoutViewToolAddNodeItem::createdItem, this, [ = ] { mView->setTool( mSelectTool ); } ); mNodesTool = new QgsLayoutViewToolEditNodes( mView ); mNodesTool->setAction( mActionEditNodesItem ); mToolsActionGroup->addAction( mActionEditNodesItem ); connect( mActionEditNodesItem, &QAction::triggered, mNodesTool, [ = ] { mView->setTool( mNodesTool ); } ); mMoveContentTool = new QgsLayoutViewToolMoveItemContent( mView ); mMoveContentTool->setAction( mActionMoveItemContent ); mToolsActionGroup->addAction( mActionMoveItemContent ); connect( mActionMoveItemContent, &QAction::triggered, mMoveContentTool, [ = ] { mView->setTool( mMoveContentTool ); } ); //Ctrl+= should also trigger zoom in QShortcut *ctrlEquals = new QShortcut( QKeySequence( QStringLiteral( "Ctrl+=" ) ), this ); connect( ctrlEquals, &QShortcut::activated, mActionZoomIn, &QAction::trigger ); //Backspace should also trigger delete selection QShortcut *backSpace = new QShortcut( QKeySequence( QStringLiteral( "Backspace" ) ), this ); connect( backSpace, &QShortcut::activated, mActionDeleteSelection, &QAction::trigger ); mActionPreviewModeOff->setChecked( true ); connect( mActionPreviewModeOff, &QAction::triggered, this, [ = ] { mView->setPreviewModeEnabled( false ); } ); connect( mActionPreviewModeGrayscale, &QAction::triggered, this, [ = ] { mView->setPreviewMode( QgsPreviewEffect::PreviewGrayscale ); mView->setPreviewModeEnabled( true ); } ); connect( mActionPreviewModeMono, &QAction::triggered, this, [ = ] { mView->setPreviewMode( QgsPreviewEffect::PreviewMono ); mView->setPreviewModeEnabled( true ); } ); connect( mActionPreviewProtanope, &QAction::triggered, this, [ = ] { mView->setPreviewMode( QgsPreviewEffect::PreviewProtanope ); mView->setPreviewModeEnabled( true ); } ); connect( mActionPreviewDeuteranope, &QAction::triggered, this, [ = ] { mView->setPreviewMode( QgsPreviewEffect::PreviewDeuteranope ); mView->setPreviewModeEnabled( true ); } ); QActionGroup *previewGroup = new QActionGroup( this ); previewGroup->setExclusive( true ); mActionPreviewModeOff->setActionGroup( previewGroup ); mActionPreviewModeGrayscale->setActionGroup( previewGroup ); mActionPreviewModeMono->setActionGroup( previewGroup ); mActionPreviewProtanope->setActionGroup( previewGroup ); mActionPreviewDeuteranope->setActionGroup( previewGroup ); connect( mActionZoomIn, &QAction::triggered, mView, &QgsLayoutView::zoomIn ); connect( mActionZoomOut, &QAction::triggered, mView, &QgsLayoutView::zoomOut ); connect( mActionZoomAll, &QAction::triggered, mView, &QgsLayoutView::zoomFull ); connect( mActionZoomActual, &QAction::triggered, mView, &QgsLayoutView::zoomActual ); connect( mActionZoomToWidth, &QAction::triggered, mView, &QgsLayoutView::zoomWidth ); connect( mActionSelectAll, &QAction::triggered, mView, &QgsLayoutView::selectAll ); connect( mActionDeselectAll, &QAction::triggered, mView, &QgsLayoutView::deselectAll ); connect( mActionInvertSelection, &QAction::triggered, mView, &QgsLayoutView::invertSelection ); connect( mActionSelectNextAbove, &QAction::triggered, mView, &QgsLayoutView::selectNextItemAbove ); connect( mActionSelectNextBelow, &QAction::triggered, mView, &QgsLayoutView::selectNextItemBelow ); connect( mActionRaiseItems, &QAction::triggered, this, &QgsLayoutDesignerDialog::raiseSelectedItems ); connect( mActionLowerItems, &QAction::triggered, this, &QgsLayoutDesignerDialog::lowerSelectedItems ); connect( mActionMoveItemsToTop, &QAction::triggered, this, &QgsLayoutDesignerDialog::moveSelectedItemsToTop ); connect( mActionMoveItemsToBottom, &QAction::triggered, this, &QgsLayoutDesignerDialog::moveSelectedItemsToBottom ); connect( mActionAlignLeft, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignLeft ); } ); connect( mActionAlignHCenter, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignHCenter ); } ); connect( mActionAlignRight, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignRight ); } ); connect( mActionAlignTop, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignTop ); } ); connect( mActionAlignVCenter, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignVCenter ); } ); connect( mActionAlignBottom, &QAction::triggered, this, [ = ] { mView->alignSelectedItems( QgsLayoutAligner::AlignBottom ); } ); connect( mActionDistributeLeft, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeLeft ); } ); connect( mActionDistributeHCenter, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeHCenter ); } ); connect( mActionDistributeRight, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeRight ); } ); connect( mActionDistributeTop, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeTop ); } ); connect( mActionDistributeVCenter, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeVCenter ); } ); connect( mActionDistributeBottom, &QAction::triggered, this, [ = ] { mView->distributeSelectedItems( QgsLayoutAligner::DistributeBottom ); } ); connect( mActionResizeNarrowest, &QAction::triggered, this, [ = ] { mView->resizeSelectedItems( QgsLayoutAligner::ResizeNarrowest ); } ); connect( mActionResizeWidest, &QAction::triggered, this, [ = ] { mView->resizeSelectedItems( QgsLayoutAligner::ResizeWidest ); } ); connect( mActionResizeShortest, &QAction::triggered, this, [ = ] { mView->resizeSelectedItems( QgsLayoutAligner::ResizeShortest ); } ); connect( mActionResizeTallest, &QAction::triggered, this, [ = ] { mView->resizeSelectedItems( QgsLayoutAligner::ResizeTallest ); } ); connect( mActionResizeToSquare, &QAction::triggered, this, [ = ] { mView->resizeSelectedItems( QgsLayoutAligner::ResizeToSquare ); } ); connect( mActionAddPages, &QAction::triggered, this, &QgsLayoutDesignerDialog::addPages ); connect( mActionUnlockAll, &QAction::triggered, this, &QgsLayoutDesignerDialog::unlockAllItems ); connect( mActionLockItems, &QAction::triggered, this, &QgsLayoutDesignerDialog::lockSelectedItems ); connect( mActionHidePanels, &QAction::toggled, this, &QgsLayoutDesignerDialog::setPanelVisibility ); connect( mActionDeleteSelection, &QAction::triggered, this, [ = ] { if ( mView->tool() == mNodesTool ) mNodesTool->deleteSelectedNode(); else mView->deleteSelectedItems(); } ); connect( mActionGroupItems, &QAction::triggered, this, [ = ] { mView->groupSelectedItems(); } ); connect( mActionUngroupItems, &QAction::triggered, this, [ = ] { mView->ungroupSelectedItems(); } ); //create status bar labels mStatusCursorXLabel = new QLabel( mStatusBar ); mStatusCursorXLabel->setMinimumWidth( 100 ); mStatusCursorYLabel = new QLabel( mStatusBar ); mStatusCursorYLabel->setMinimumWidth( 100 ); mStatusCursorPageLabel = new QLabel( mStatusBar ); mStatusCursorPageLabel->setMinimumWidth( 100 ); mStatusBar->addPermanentWidget( mStatusCursorXLabel ); mStatusBar->addPermanentWidget( mStatusCursorXLabel ); mStatusBar->addPermanentWidget( mStatusCursorYLabel ); mStatusBar->addPermanentWidget( mStatusCursorPageLabel ); mStatusZoomCombo = new QComboBox(); mStatusZoomCombo->setEditable( true ); mStatusZoomCombo->setInsertPolicy( QComboBox::NoInsert ); mStatusZoomCombo->setCompleter( nullptr ); mStatusZoomCombo->setMinimumWidth( 100 ); //zoom combo box accepts decimals in the range 1-9999, with an optional decimal point and "%" sign QRegularExpression zoomRx( QStringLiteral( "\\s*\\d{1,4}(\\.\\d?)?\\s*%?" ) ); QValidator *zoomValidator = new QRegularExpressionValidator( zoomRx, mStatusZoomCombo ); mStatusZoomCombo->lineEdit()->setValidator( zoomValidator ); Q_FOREACH ( double level, sStatusZoomLevelsList ) { mStatusZoomCombo->insertItem( 0, tr( "%1%" ).arg( level * 100.0, 0, 'f', 1 ), level ); }