diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ kde_enable_exceptions() set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/modules) -find_package(Qt5 5.3 CONFIG REQUIRED +find_package(Qt5 5.6 CONFIG REQUIRED Core DBus Widgets diff --git a/src/dialogs/usermenu/usermenutree.h b/src/dialogs/usermenu/usermenutree.h --- a/src/dialogs/usermenu/usermenutree.h +++ b/src/dialogs/usermenu/usermenutree.h @@ -55,20 +55,7 @@ bool isEmpty(); -private Q_SLOTS: - void slotPopupActivated(int id); - private: - enum PopupType { POPUP_INSERT_ABOVE=0x00, POPUP_INSERT_BELOW=0x01, - POPUP_SEPARATOR_ABOVE=0x02, POPUP_SEPARATOR_BELOW=0x03, - POPUP_SUBMENU_ABOVE=0x04, POPUP_SUBMENU_BELOW=0x05, - POPUP_INTO_SUBMENU=0x06, POPUP_SEPARATOR_INTO_SUBMENU=0x07, POPUP_SUBMENU_INTO_SUBMENU=0x08, - POPUP_DELETE_ITEM=0x09, POPUP_DELETE_TREE=0x0A, - POPUP_COLLAPSE_ITEM=0x0B, POPUP_EXPAND_ITEM=0x0C, - POPUP_COLLAPSE_TREE=0x0D, POPUP_EXPAND_TREE=0x0E, - POPUP_ITEM_INFO=0x0F - }; - UserMenuItem *m_popupItem; void setErrorCodes(); diff --git a/src/dialogs/usermenu/usermenutree.cpp b/src/dialogs/usermenu/usermenutree.cpp --- a/src/dialogs/usermenu/usermenutree.cpp +++ b/src/dialogs/usermenu/usermenutree.cpp @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -175,75 +174,56 @@ bool separator = ( m_popupItem->menutype() == UserMenuData::Separator ); QMenu popup; - QAction *action = Q_NULLPTR; - QSignalMapper signalMapper; - connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotPopupActivated(int))); // insert standard menu items - action = popup.addAction(QIcon::fromTheme("usermenu-insert-above.png"),i18n("Insert above"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_INSERT_ABOVE); - action = popup.addAction(QIcon::fromTheme("usermenu-insert-below.png"),i18n("Insert below"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_INSERT_BELOW); + popup.addAction(QIcon::fromTheme("usermenu-insert-above.png"),i18n("Insert above"), this, [this] {insertMenuItem(m_popupItem, false);}); + popup.addAction(QIcon::fromTheme("usermenu-insert-below.png"),i18n("Insert below"), this, [this] {insertMenuItem(m_popupItem, true);}); popup.addSeparator(); // insert separators if ( !separator ) { - action = popup.addAction(QIcon::fromTheme("usermenu-separator-above.png"),i18n("Insert a separator above"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SEPARATOR_ABOVE); - action = popup.addAction(QIcon::fromTheme("usermenu-separator-below.png"),i18n("Insert a separator below"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SEPARATOR_BELOW); + popup.addAction(QIcon::fromTheme("usermenu-separator-above.png"),i18n("Insert a separator above"), this, [this] {insertSeparator(m_popupItem, false);}); + popup.addAction(QIcon::fromTheme("usermenu-separator-below.png"),i18n("Insert a separator below"), this, [this] {insertSeparator(m_popupItem, true);}); popup.addSeparator(); } // insert submenus - action = popup.addAction(QIcon::fromTheme("usermenu-submenu-above.png"),i18n("Insert a submenu above"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SUBMENU_ABOVE); - action = popup.addAction(QIcon::fromTheme("usermenu-submenu-below.png"),i18n("Insert a submenu below"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SUBMENU_BELOW); + popup.addAction(QIcon::fromTheme("usermenu-submenu-above.png"),i18n("Insert a submenu above"), this, [this] {insertSubmenu(m_popupItem, false);}); + popup.addAction(QIcon::fromTheme("usermenu-submenu-below.png"),i18n("Insert a submenu below"), this, [this] {insertSubmenu(m_popupItem, true);}); popup.addSeparator(); // insert into submenus if ( submenu ) { - action = popup.addAction(QIcon::fromTheme("usermenu-into-submenu.png"),i18n("Insert into this submenu"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_INTO_SUBMENU); - action = popup.addAction(i18n("Insert a separator into this submenu"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SEPARATOR_INTO_SUBMENU); - action = popup.addAction(i18n("Insert a submenu into this submenu"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_SUBMENU_INTO_SUBMENU); + popup.addAction(QIcon::fromTheme("usermenu-into-submenu.png"),i18n("Insert into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Text);}); + popup.addAction(i18n("Insert a separator into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Separator);}); + popup.addAction(i18n("Insert a submenu into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Submenu);}); popup.addSeparator(); } // delete actions - action = popup.addAction(QIcon::fromTheme("usermenu-delete.png"),i18n("Delete this item"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action,POPUP_DELETE_ITEM); + popup.addAction(QIcon::fromTheme("usermenu-delete.png"),i18n("Delete this item"), this, [this] {itemDelete(m_popupItem);}); popup.addSeparator(); - action = popup.addAction(QIcon::fromTheme("usermenu-clear.png"),i18n("Delete the complete tree"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_DELETE_TREE); + popup.addAction(QIcon::fromTheme("usermenu-clear.png"),i18n("Delete the complete tree"), this, [this] {deleteMenuTree();}); // expand/collapse tree if ( submenu ) { popup.addSeparator(); if ( m_popupItem->isExpanded() ) { - action = popup.addAction(i18n("Collapse submenu"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action,POPUP_COLLAPSE_ITEM); + popup.addAction(i18n("Collapse submenu"), this, [this] {m_popupItem->setExpanded(false);}); } else { - action = popup.addAction(i18n("Expand submenu"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action,POPUP_EXPAND_ITEM); + popup.addAction(i18n("Expand submenu"), this, [this] {m_popupItem->setExpanded(true);}); } popup.addSeparator(); - action = popup.addAction(i18n("Collapse complete tree"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action,POPUP_COLLAPSE_TREE); - action = popup.addAction(i18n("Expand complete tree"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action,POPUP_EXPAND_TREE); + popup.addAction(i18n("Collapse complete tree"), this, [this] {collapseAll();}); + popup.addAction(i18n("Expand complete tree"), this, [this] {expandAll();}); } // if there are any errors with this item, some info is available int error = m_popupItem->data(0,Qt::UserRole+2).toInt(); if ( error != UserMenuItem::MODEL_ERROR_NONE ) { popup.addSeparator(); - action = popup.addAction(QIcon::fromTheme("help-about.png"),i18n("Info"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, POPUP_ITEM_INFO); + popup.addAction(QIcon::fromTheme("help-about.png"),i18n("Info"), this, [this] {itemInfo(m_popupItem);}); } // const QPoint& pos parameter in the customContextMenuRequested() signal is normally in widget coordinates. @@ -253,62 +233,6 @@ } } -// a context menu action was selected -void UserMenuTree::slotPopupActivated(int id) -{ - KILE_DEBUG_MAIN << "popup activated with id: " << id; - switch (id ) { - case POPUP_INSERT_ABOVE: - insertMenuItem (m_popupItem, false); - break; - case POPUP_INSERT_BELOW: - insertMenuItem (m_popupItem, true); - break; - case POPUP_SEPARATOR_ABOVE: - insertSeparator(m_popupItem, false); - break; - case POPUP_SEPARATOR_BELOW: - insertSeparator(m_popupItem, true); - break; - case POPUP_SUBMENU_ABOVE: - insertSubmenu (m_popupItem, false); - break; - case POPUP_SUBMENU_BELOW: - insertSubmenu (m_popupItem, true); - break; - case POPUP_INTO_SUBMENU: - insertIntoSubmenu(m_popupItem, UserMenuData::Text); - break; - case POPUP_SEPARATOR_INTO_SUBMENU: - insertIntoSubmenu(m_popupItem, UserMenuData::Separator); - break; - case POPUP_SUBMENU_INTO_SUBMENU: - insertIntoSubmenu(m_popupItem, UserMenuData::Submenu); - break; - case POPUP_DELETE_ITEM: - itemDelete(m_popupItem); - break; - case POPUP_DELETE_TREE: - deleteMenuTree(); - break; - case POPUP_COLLAPSE_ITEM: - m_popupItem->setExpanded(false); - break; - case POPUP_EXPAND_ITEM: - m_popupItem->setExpanded(true); - break; - case POPUP_COLLAPSE_TREE: - collapseAll(); - break; - case POPUP_EXPAND_TREE: - expandAll(); - break; - case POPUP_ITEM_INFO: - itemInfo(m_popupItem); - break; - } -} - ///////////////////////////// read XML ////////////////////////////// // read an xml file and check for errors diff --git a/src/livepreview.h b/src/livepreview.h --- a/src/livepreview.h +++ b/src/livepreview.h @@ -24,7 +24,6 @@ #include #include #include -#include #include #include diff --git a/src/widgets/projectview.cpp b/src/widgets/projectview.cpp --- a/src/widgets/projectview.cpp +++ b/src/widgets/projectview.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -764,7 +763,6 @@ void ProjectView::contextMenuEvent(QContextMenuEvent *event) { - QSignalMapper signalMapper, serviceSignalMapper; QMenu popup; QAction *action = Q_NULLPTR; @@ -791,32 +789,27 @@ if(projectViewItem->type() == KileType::ProjectExtra && !isKilePrFile) { QMenu *servicesMenu = popup.addMenu(QIcon::fromTheme("fork"), i18n("&Open With")); - connect(&serviceSignalMapper, SIGNAL(mapped(int)), this, SLOT(slotRun(int))); QMimeDatabase db; m_offerList = KMimeTypeTrader::self()->query(db.mimeTypeForUrl(projectViewItem->url()).name(), "Application"); for (int i = 0; i < m_offerList.count(); ++i) { action = new QAction(servicesMenu); action->setIcon(QIcon::fromTheme(m_offerList[i]->icon())); action->setText(m_offerList[i]->name()); - connect(action, SIGNAL(triggered()), &serviceSignalMapper, SLOT(map())); - serviceSignalMapper.setMapping(action, i + 1); + connect(action, &QAction::triggered, this, [this, i] { slotRun(i + 1); }); servicesMenu->addAction(action); } servicesMenu->addSeparator(); - action = servicesMenu->addAction(i18n("Other..."), &serviceSignalMapper, SLOT(map())); - serviceSignalMapper.setMapping(action, 0); + servicesMenu->addAction(i18n("Other..."), this, [this] { slotRun(0); }); insertsep = true; } if (projectViewItem->type() == KileType::File || projectViewItem->type() == KileType::ProjectItem) { if(!m_ki->isOpen(projectViewItem->url())) { - action = popup.addAction(QIcon::fromTheme("document-open"), i18n("&Open"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_OPEN); + popup.addAction(QIcon::fromTheme("document-open"), i18n("&Open"), this, [this] { slotProjectItem(KPV_ID_OPEN); }); } else { - action = popup.addAction(QIcon::fromTheme("document-save"), i18n("&Save"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_SAVE); + popup.addAction(QIcon::fromTheme("document-save"), i18n("&Save"), this, [this] { slotProjectItem(KPV_ID_SAVE); }); } insertsep = true; } @@ -826,61 +819,54 @@ if(insertsep) { popup.addSeparator(); } - action = popup.addAction(QIcon::fromTheme("project_add"), i18n("&Add to Project"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_ADD); + popup.addAction(QIcon::fromTheme("project_add"), i18n("&Add to Project"), this, [this] { slotProjectItem(KPV_ID_ADD); }); insertsep = true; } - connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotFile(int))); } else if(projectViewItem->type() == KileType::ProjectItem || projectViewItem->type() == KileType::ProjectExtra) { KileProjectItem *pi = projectViewItem->projectItem(); if(pi) { if(insertsep) { popup.addSeparator(); } - action = popup.addAction(i18n("&Include in Archive"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_INCLUDE); + action = popup.addAction(i18n("&Include in Archive"), this, [this] { slotProjectItem(KPV_ID_INCLUDE); }); action->setCheckable(true); action->setChecked(pi->archive()); insertsep = true; } if(!isKilePrFile) { if(insertsep) { popup.addSeparator(); } - action = popup.addAction(QIcon::fromTheme("project_remove"),i18n("&Remove From Project"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_REMOVE); + popup.addAction(QIcon::fromTheme("project_remove"),i18n("&Remove From Project"), this, [this] { slotProjectItem(KPV_ID_REMOVE); }); insertsep = true; } - connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotProjectItem(int))); } else if(projectViewItem->type() == KileType::Project) { if(insertsep) { popup.addSeparator(); } - action = popup.addAction(i18n("A&dd Files..."), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_ADDFILES); + popup.addAction(i18n("A&dd Files..."), this, [this] { slotProject(KPV_ID_ADDFILES); }); popup.addSeparator(); - action = popup.addAction(i18n("Open All &Project Files"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_OPENALLFILES); + popup.addAction(i18n("Open All &Project Files"), this, [this] { slotProject(KPV_ID_OPENALLFILES); }); popup.addSeparator(); - action = popup.addAction(QIcon::fromTheme("view-refresh"),i18n("Refresh Project &Tree"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_BUILDTREE); - action = popup.addAction(QIcon::fromTheme("configure"), i18n("Project &Options"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_OPTIONS); - action = popup.addAction(i18n("&Archive"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_ARCHIVE); - connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotProject(int))); + popup.addAction(QIcon::fromTheme("view-refresh"),i18n("Refresh Project &Tree"), this, [this] { slotProject(KPV_ID_BUILDTREE); }); + popup.addAction(QIcon::fromTheme("configure"), i18n("Project &Options"), this, [this] { slotProject(KPV_ID_OPTIONS); }); + popup.addAction(i18n("&Archive"), this, [this] { slotProject(KPV_ID_ARCHIVE); }); insertsep = true; } if((projectViewItem->type() == KileType::File) || (projectViewItem->type() == KileType::ProjectItem) || (projectViewItem->type()== KileType::Project)) { if(insertsep) { popup.addSeparator(); } - action = popup.addAction(QIcon::fromTheme("view-close"), i18n("&Close"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, KPV_ID_CLOSE); + if(projectViewItem->type() == KileType::Project) { + popup.addAction(QIcon::fromTheme("view-close"), i18n("&Close"), this, [this] { slotProject(KPV_ID_CLOSE); }); + } + else { + popup.addAction(QIcon::fromTheme("view-close"), i18n("&Close"), this, [this] { slotProjectItem(KPV_ID_CLOSE); }); + } } popup.exec(event->globalPos()); diff --git a/src/widgets/structurewidget.h b/src/widgets/structurewidget.h --- a/src/widgets/structurewidget.h +++ b/src/widgets/structurewidget.h @@ -218,7 +218,6 @@ public Q_SLOTS: void slotClicked(QTreeWidgetItem *); void slotDoubleClicked(QTreeWidgetItem *); - void slotPopupActivated(int id); void addDocumentInfo(KileDocument::Info *); void closeDocumentInfo(KileDocument::Info *); @@ -256,7 +255,6 @@ StructureView* viewFor(KileDocument::Info *info); bool viewExistsFor(KileDocument::Info *info); - void slotPopupLabel(int id); void slotPopupSectioning(int id); void slotPopupGraphics(int id); diff --git a/src/widgets/structurewidget.cpp b/src/widgets/structurewidget.cpp --- a/src/widgets/structurewidget.cpp +++ b/src/widgets/structurewidget.cpp @@ -65,7 +65,6 @@ #include #include #include -#include #include #include @@ -748,10 +747,7 @@ { KILE_DEBUG_MAIN << "\tcalled"; - QSignalMapper signalMapper; - connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotPopupActivated(int))); QMenu popup; - QAction *action = Q_NULLPTR; m_showingContextMenu = Q_NULLPTR; m_popupItem = dynamic_cast(view->itemAt(event->pos())); @@ -766,23 +762,16 @@ if(hasLabel) { popup.addSection(i18n("Sectioning")); } - action = popup.addAction(i18n("Cu&t"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningCut); - action = popup.addAction(i18n("&Copy"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningCopy); - action = popup.addAction(i18n("&Paste below"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningPaste); + popup.addAction(i18n("Cu&t"), this, [this] { slotPopupSectioning(SectioningCut); }); + popup.addAction(i18n("&Copy"), this, [this] { slotPopupSectioning(SectioningCopy); }); + popup.addAction(i18n("&Paste below"), this, [this] { slotPopupSectioning(SectioningPaste); }); popup.addSeparator(); - action = popup.addAction(i18n("&Select"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningSelect); - action = popup.addAction(i18n("&Delete"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningDelete); + popup.addAction(i18n("&Select"), this, [this] { slotPopupSectioning(SectioningSelect); }); + popup.addAction(i18n("&Delete"), this, [this] { slotPopupSectioning(SectioningDelete); }); popup.addSeparator(); - action = popup.addAction(i18n("C&omment"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningComment); + popup.addAction(i18n("C&omment"), this, [this] { slotPopupSectioning(SectioningComment); }); popup.addSeparator(); - action = popup.addAction(i18n("Run QuickPreview"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningPreview); + popup.addAction(i18n("Run QuickPreview"), this, [this] { slotPopupSectioning(SectioningPreview); }); } else if(m_popupItem->type() == KileStruct::Graphics) { m_popupInfo = m_popupItem->title(); @@ -800,32 +789,24 @@ QMimeDatabase db; m_offerList = KMimeTypeTrader::self()->query(db.mimeTypeForUrl(url).name(), "Application"); for(int i = 0; i < m_offerList.count(); ++i) { - action = popup.addAction(QIcon::fromTheme(m_offerList[i]->icon()), m_offerList[i]->name(), - &signalMapper, SLOT(map())); - signalMapper.setMapping(action, i + SectioningGraphicsOfferlist); + popup.addAction(QIcon::fromTheme(m_offerList[i]->icon()), m_offerList[i]->name(), + this, [this, i] { slotPopupGraphics(i + SectioningGraphicsOfferlist); }); } popup.addSeparator(); - action = popup.addAction(i18n("Other..."), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, SectioningGraphicsOther); + popup.addAction(i18n("Other..."), this, [this] { slotPopupGraphics(SectioningGraphicsOther); }); } } if(hasLabel) { popup.addSection(i18n("Insert Label")); - action = popup.addAction(i18n("As &reference"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 1); - action = popup.addAction(i18n("As &page reference"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 2); - action = popup.addAction(i18n("Only the &label"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 3); + popup.addAction(i18n("As &reference"), this, [this] { emit(sendText("\\ref{" + m_popupItem->label() + '}')); }); + popup.addAction(i18n("As &page reference"), this, [this] { emit(sendText("\\pageref{" + m_popupItem->label() + '}')); }); + popup.addAction(i18n("Only the &label"), this, [this] { emit(sendText(m_popupItem->label())); }); popup.addSeparator(); popup.addSection(i18n("Copy Label to Clipboard")); - action = popup.addAction(i18n("As reference"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 4); - action = popup.addAction(i18n("As page reference"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 5); - action = popup.addAction(i18n("Only the label"), &signalMapper, SLOT(map())); - signalMapper.setMapping(action, 6); + popup.addAction(i18n("As reference"), this, [this] { QApplication::clipboard()->setText("\\ref{" + m_popupItem->label() + '}'); }); + popup.addAction(i18n("As page reference"), this, [this] { QApplication::clipboard()->setText("\\pageref{" + m_popupItem->label() + '}'); }); + popup.addAction(i18n("Only the label"), this, [this] { QApplication::clipboard()->setText(m_popupItem->label()); }); } if(!popup.isEmpty()) { @@ -835,41 +816,6 @@ } } -void StructureWidget::slotPopupActivated(int id) -{ - KILE_DEBUG_MAIN << "id: " << id; - if(id >= 1 && id <= 6) { - slotPopupLabel(id); - } - else if(id >= SectioningCut && id <= SectioningPreview) { - slotPopupSectioning(id); - } - else if(id >= SectioningGraphicsOther && id <= SectioningGraphicsOfferlist + m_offerList.count()) { - slotPopupGraphics(id); - } -} - -// id's 1..6 (already checked) -void StructureWidget::slotPopupLabel(int id) -{ - KILE_DEBUG_MAIN << "\tStructureWidget::slotPopupLabel (" << id << ")"<< endl; - - QString s = m_popupItem->label(); - if(id == 1 || id == 4) { - s = "\\ref{" + s + '}'; - } - else if(id == 2 || id == 5) { - s = "\\pageref{" + s + '}'; - } - - if(id <= 3) { - emit(sendText(s)); - } - else { - QApplication::clipboard()->setText(s); - } -} - // id's 10..16 (already checked) void StructureWidget::slotPopupSectioning(int id) {