//adds dynamic actions to the toolbar (example settings) void RenderWindow::slotPopulateToolbar(bool completeRefresh) { WriteLog("cInterface::PopulateToolbar(QWidget *window, QToolBar *toolBar) started"); QDir toolbarDir = QDir(systemData.dataDirectory + "toolbar"); toolbarDir.setSorting(QDir::Time); QStringList toolbarFiles = toolbarDir.entryList(QDir::NoDotAndDotDot | QDir::Files); QSignalMapper *mapPresetsFromExamplesLoad = new QSignalMapper(this); QSignalMapper *mapPresetsFromExamplesRemove = new QSignalMapper(this); ui->toolBar->setIconSize(QSize(gPar->Get<int>("toolbar_icon_size"), gPar->Get<int>("toolbar_icon_size"))); QList<QAction *> actions = ui->toolBar->actions(); QStringList toolbarInActions; for (int i = 0; i < actions.size(); i++) { QAction * action = actions.at(i); if(action->objectName() == "actionAdd_Settings_to_Toolbar") continue; if(!toolbarFiles.contains(action->objectName()) || completeRefresh) { // preset has been removed ui->toolBar->removeAction(action); } else { toolbarInActions << action->objectName(); } } for (int i = 0; i < toolbarFiles.size(); i++) { if(toolbarInActions.contains(toolbarFiles.at(i))) { // already present continue; } QString filename = systemData.dataDirectory + "toolbar/" + toolbarFiles.at(i); cThumbnailWidget *thumbWidget = NULL; if (QFileInfo(filename).suffix() == QString("fract")) { WriteLogString("Generating thumbnail for preset", filename); cSettings parSettings(cSettings::formatFullText); parSettings.BeQuiet(true); if (parSettings.LoadFromFile(filename)) { cParameterContainer *par = new cParameterContainer; cFractalContainer *parFractal = new cFractalContainer; InitParams(par); for (int i = 0; i < NUMBER_OF_FRACTALS; i++) InitFractalParams(&parFractal->at(i)); if (parSettings.Decode(par, parFractal)) { thumbWidget = new cThumbnailWidget(gPar->Get<int>("toolbar_icon_size"), gPar->Get<int>("toolbar_icon_size"), 2, this); thumbWidget->UseOneCPUCore(true); thumbWidget->AssignParameters(*par, *parFractal); } delete par; delete parFractal; } } if(thumbWidget) { QWidgetAction *action = new QWidgetAction(this); QToolButton *buttonLoad = new QToolButton; QVBoxLayout *tooltipLayout = new QVBoxLayout; QToolButton *buttonRemove = new QToolButton; tooltipLayout->setContentsMargins(3, 3, 3, 3); tooltipLayout->addWidget(thumbWidget); QIcon iconDelete = QIcon::fromTheme("list-remove", QIcon(":system/icons/list-remove.svg")); buttonRemove->setIcon(iconDelete); buttonRemove->setMaximumSize(QSize(15, 15)); buttonRemove->setStyleSheet("margin-bottom: -2px; margin-left: -2px;"); tooltipLayout->addWidget(buttonRemove); buttonLoad->setToolTip(QObject::tr("Toolbar settings: ") + filename); buttonLoad->setLayout(tooltipLayout); action->setDefaultWidget(buttonLoad); action->setObjectName(toolbarFiles.at(i)); ui->toolBar->addAction(action); mapPresetsFromExamplesLoad->setMapping(buttonLoad, filename); mapPresetsFromExamplesRemove->setMapping(buttonRemove, filename); QApplication::connect(buttonLoad, SIGNAL(clicked()), mapPresetsFromExamplesLoad, SLOT(map())); QApplication::connect(buttonRemove, SIGNAL(clicked()), mapPresetsFromExamplesRemove, SLOT(map())); } } QApplication::connect(mapPresetsFromExamplesLoad, SIGNAL(mapped(QString)), this, SLOT(slotMenuLoadPreset(QString))); QApplication::connect(mapPresetsFromExamplesRemove, SIGNAL(mapped(QString)), this, SLOT(slotMenuRemovePreset(QString))); WriteLog("cInterface::PopulateToolbar(QWidget *window, QToolBar *toolBar) finished"); }
bool QgsCustomizationDialog::switchWidget( QWidget *widget, QMouseEvent *e ) { Q_UNUSED( e ); QgsDebugMsg( "Entered" ); if ( !actionCatch->isChecked() ) return false; QString path = widgetPath( widget ); QgsDebugMsg( "path = " + path ); if ( path.startsWith( "/QgsCustomizationDialogBase" ) ) { // do not allow modification of this dialog return false; } else if ( path.startsWith( "/QgisApp" ) ) { // changes to main window // (work with toolbars, tool buttons) if ( widget->inherits( "QToolBar" ) ) { path = "/Toolbars/" + widget->objectName(); } else if ( widget->inherits( "QToolButton" ) ) { QToolButton* toolbutton = qobject_cast<QToolButton*>( widget ); QAction* action = toolbutton->defaultAction(); if ( !action ) return false; QString toolbarName = widget->parent()->objectName(); QString actionName = action->objectName(); path = "/Toolbars/" + toolbarName + "/" + actionName; } else { // unsupported widget in main window return false; } } else { // ordinary widget in a dialog path = "/Widgets" + path; } QgsDebugMsg( "path final = " + path ); bool on = !itemChecked( path ); QgsDebugMsg( QString( "on = %1" ).arg( on ) ); setItemChecked( path, on ); QTreeWidgetItem *myItem = item( path ); if ( myItem ) { treeWidget->scrollToItem( myItem, QAbstractItemView::PositionAtCenter ); treeWidget->clearSelection(); myItem->setSelected( true ); QString style; if ( !on ) { style = "background-color: #FFCCCC;"; } widget->setStyleSheet( style ); } return true; }