Changeset View
Changeset View
Standalone View
Standalone View
src/dialogs/usermenu/usermenutree.cpp
Show All 13 Lines | |||||
14 | 14 | | |||
15 | #include <QIcon> | 15 | #include <QIcon> | ||
16 | #include <QInputDialog> | 16 | #include <QInputDialog> | ||
17 | #include <QFile> | 17 | #include <QFile> | ||
18 | #include <QFileInfo> | 18 | #include <QFileInfo> | ||
19 | #include <QHeaderView> | 19 | #include <QHeaderView> | ||
20 | #include <QDomDocument> | 20 | #include <QDomDocument> | ||
21 | #include <QProcessEnvironment> | 21 | #include <QProcessEnvironment> | ||
22 | #include <QSignalMapper> | | |||
23 | 22 | | |||
24 | #include <KIconLoader> | 23 | #include <KIconLoader> | ||
25 | #include <QMenu> | 24 | #include <QMenu> | ||
26 | #include <KLocalizedString> | 25 | #include <KLocalizedString> | ||
27 | #include <KMessageBox> | 26 | #include <KMessageBox> | ||
28 | 27 | | |||
29 | 28 | | |||
30 | #include "dialogs/usermenu/usermenuitem.h" | 29 | #include "dialogs/usermenu/usermenuitem.h" | ||
▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Line(s) | 167 | if ( !m_popupItem ) { | |||
170 | return; | 169 | return; | ||
171 | } | 170 | } | ||
172 | 171 | | |||
173 | KILE_DEBUG_MAIN << "... popup item found: " << m_popupItem->text(0); | 172 | KILE_DEBUG_MAIN << "... popup item found: " << m_popupItem->text(0); | ||
174 | bool submenu = ( m_popupItem->menutype() == UserMenuData::Submenu ); | 173 | bool submenu = ( m_popupItem->menutype() == UserMenuData::Submenu ); | ||
175 | bool separator = ( m_popupItem->menutype() == UserMenuData::Separator ); | 174 | bool separator = ( m_popupItem->menutype() == UserMenuData::Separator ); | ||
176 | 175 | | |||
177 | QMenu popup; | 176 | QMenu popup; | ||
178 | QAction *action = Q_NULLPTR; | | |||
179 | QSignalMapper signalMapper; | | |||
180 | connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotPopupActivated(int))); | | |||
181 | 177 | | |||
182 | // insert standard menu items | 178 | // insert standard menu items | ||
183 | action = popup.addAction(QIcon::fromTheme("usermenu-insert-above.png"),i18n("Insert above"), &signalMapper, SLOT(map())); | 179 | popup.addAction(QIcon::fromTheme("usermenu-insert-above.png"),i18n("Insert above"), this, [this] {insertMenuItem(m_popupItem, false);}); | ||
184 | signalMapper.setMapping(action, POPUP_INSERT_ABOVE); | 180 | popup.addAction(QIcon::fromTheme("usermenu-insert-below.png"),i18n("Insert below"), this, [this] {insertMenuItem(m_popupItem, true);}); | ||
mludwig: Do you think you can get rid of 'slotPopupActivated' as well? and also of the other helper… | |||||
185 | action = popup.addAction(QIcon::fromTheme("usermenu-insert-below.png"),i18n("Insert below"), &signalMapper, SLOT(map())); | | |||
186 | signalMapper.setMapping(action, POPUP_INSERT_BELOW); | | |||
187 | popup.addSeparator(); | 181 | popup.addSeparator(); | ||
188 | 182 | | |||
189 | // insert separators | 183 | // insert separators | ||
190 | if ( !separator ) { | 184 | if ( !separator ) { | ||
191 | action = popup.addAction(QIcon::fromTheme("usermenu-separator-above.png"),i18n("Insert a separator above"), &signalMapper, SLOT(map())); | 185 | popup.addAction(QIcon::fromTheme("usermenu-separator-above.png"),i18n("Insert a separator above"), this, [this] {insertSeparator(m_popupItem, false);}); | ||
192 | signalMapper.setMapping(action, POPUP_SEPARATOR_ABOVE); | 186 | popup.addAction(QIcon::fromTheme("usermenu-separator-below.png"),i18n("Insert a separator below"), this, [this] {insertSeparator(m_popupItem, true);}); | ||
193 | action = popup.addAction(QIcon::fromTheme("usermenu-separator-below.png"),i18n("Insert a separator below"), &signalMapper, SLOT(map())); | | |||
194 | signalMapper.setMapping(action, POPUP_SEPARATOR_BELOW); | | |||
195 | popup.addSeparator(); | 187 | popup.addSeparator(); | ||
196 | } | 188 | } | ||
197 | 189 | | |||
198 | // insert submenus | 190 | // insert submenus | ||
199 | action = popup.addAction(QIcon::fromTheme("usermenu-submenu-above.png"),i18n("Insert a submenu above"), &signalMapper, SLOT(map())); | 191 | popup.addAction(QIcon::fromTheme("usermenu-submenu-above.png"),i18n("Insert a submenu above"), this, [this] {insertSubmenu(m_popupItem, false);}); | ||
200 | signalMapper.setMapping(action, POPUP_SUBMENU_ABOVE); | 192 | popup.addAction(QIcon::fromTheme("usermenu-submenu-below.png"),i18n("Insert a submenu below"), this, [this] {insertSubmenu(m_popupItem, true);}); | ||
201 | action = popup.addAction(QIcon::fromTheme("usermenu-submenu-below.png"),i18n("Insert a submenu below"), &signalMapper, SLOT(map())); | | |||
202 | signalMapper.setMapping(action, POPUP_SUBMENU_BELOW); | | |||
203 | popup.addSeparator(); | 193 | popup.addSeparator(); | ||
204 | 194 | | |||
205 | // insert into submenus | 195 | // insert into submenus | ||
206 | if ( submenu ) { | 196 | if ( submenu ) { | ||
207 | action = popup.addAction(QIcon::fromTheme("usermenu-into-submenu.png"),i18n("Insert into this submenu"), &signalMapper, SLOT(map())); | 197 | popup.addAction(QIcon::fromTheme("usermenu-into-submenu.png"),i18n("Insert into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Text);}); | ||
208 | signalMapper.setMapping(action, POPUP_INTO_SUBMENU); | 198 | popup.addAction(i18n("Insert a separator into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Separator);}); | ||
209 | action = popup.addAction(i18n("Insert a separator into this submenu"), &signalMapper, SLOT(map())); | 199 | popup.addAction(i18n("Insert a submenu into this submenu"), this, [this] {insertIntoSubmenu(m_popupItem, UserMenuData::Submenu);}); | ||
210 | signalMapper.setMapping(action, POPUP_SEPARATOR_INTO_SUBMENU); | | |||
211 | action = popup.addAction(i18n("Insert a submenu into this submenu"), &signalMapper, SLOT(map())); | | |||
212 | signalMapper.setMapping(action, POPUP_SUBMENU_INTO_SUBMENU); | | |||
213 | popup.addSeparator(); | 200 | popup.addSeparator(); | ||
214 | } | 201 | } | ||
215 | 202 | | |||
216 | // delete actions | 203 | // delete actions | ||
217 | action = popup.addAction(QIcon::fromTheme("usermenu-delete.png"),i18n("Delete this item"), &signalMapper, SLOT(map())); | 204 | popup.addAction(QIcon::fromTheme("usermenu-delete.png"),i18n("Delete this item"), this, [this] {itemDelete(m_popupItem);}); | ||
218 | signalMapper.setMapping(action,POPUP_DELETE_ITEM); | | |||
219 | popup.addSeparator(); | 205 | popup.addSeparator(); | ||
220 | action = popup.addAction(QIcon::fromTheme("usermenu-clear.png"),i18n("Delete the complete tree"), &signalMapper, SLOT(map())); | 206 | popup.addAction(QIcon::fromTheme("usermenu-clear.png"),i18n("Delete the complete tree"), this, [this] {deleteMenuTree();}); | ||
221 | signalMapper.setMapping(action, POPUP_DELETE_TREE); | | |||
222 | 207 | | |||
223 | // expand/collapse tree | 208 | // expand/collapse tree | ||
224 | if ( submenu ) { | 209 | if ( submenu ) { | ||
225 | popup.addSeparator(); | 210 | popup.addSeparator(); | ||
226 | if ( m_popupItem->isExpanded() ) { | 211 | if ( m_popupItem->isExpanded() ) { | ||
227 | action = popup.addAction(i18n("Collapse submenu"), &signalMapper, SLOT(map())); | 212 | popup.addAction(i18n("Collapse submenu"), this, [this] {m_popupItem->setExpanded(false);}); | ||
228 | signalMapper.setMapping(action,POPUP_COLLAPSE_ITEM); | | |||
229 | } | 213 | } | ||
230 | else { | 214 | else { | ||
231 | action = popup.addAction(i18n("Expand submenu"), &signalMapper, SLOT(map())); | 215 | popup.addAction(i18n("Expand submenu"), this, [this] {m_popupItem->setExpanded(true);}); | ||
232 | signalMapper.setMapping(action,POPUP_EXPAND_ITEM); | | |||
233 | } | 216 | } | ||
234 | popup.addSeparator(); | 217 | popup.addSeparator(); | ||
235 | action = popup.addAction(i18n("Collapse complete tree"), &signalMapper, SLOT(map())); | 218 | popup.addAction(i18n("Collapse complete tree"), this, [this] {collapseAll();}); | ||
236 | signalMapper.setMapping(action,POPUP_COLLAPSE_TREE); | 219 | popup.addAction(i18n("Expand complete tree"), this, [this] {expandAll();}); | ||
237 | action = popup.addAction(i18n("Expand complete tree"), &signalMapper, SLOT(map())); | | |||
238 | signalMapper.setMapping(action,POPUP_EXPAND_TREE); | | |||
239 | } | 220 | } | ||
240 | 221 | | |||
241 | // if there are any errors with this item, some info is available | 222 | // if there are any errors with this item, some info is available | ||
242 | int error = m_popupItem->data(0,Qt::UserRole+2).toInt(); | 223 | int error = m_popupItem->data(0,Qt::UserRole+2).toInt(); | ||
243 | if ( error != UserMenuItem::MODEL_ERROR_NONE ) { | 224 | if ( error != UserMenuItem::MODEL_ERROR_NONE ) { | ||
244 | popup.addSeparator(); | 225 | popup.addSeparator(); | ||
245 | action = popup.addAction(QIcon::fromTheme("help-about.png"),i18n("Info"), &signalMapper, SLOT(map())); | 226 | popup.addAction(QIcon::fromTheme("help-about.png"),i18n("Info"), this, [this] {itemInfo(m_popupItem);}); | ||
246 | signalMapper.setMapping(action, POPUP_ITEM_INFO); | | |||
247 | } | 227 | } | ||
248 | 228 | | |||
249 | // const QPoint& pos parameter in the customContextMenuRequested() signal is normally in widget coordinates. | 229 | // const QPoint& pos parameter in the customContextMenuRequested() signal is normally in widget coordinates. | ||
250 | // But classes like QTreeWidget, which inherit from QAbstractScrollArea1 instead use the coordinates of their viewport() | 230 | // But classes like QTreeWidget, which inherit from QAbstractScrollArea1 instead use the coordinates of their viewport() | ||
251 | if ( !popup.isEmpty() ) { | 231 | if ( !popup.isEmpty() ) { | ||
252 | popup.exec( viewport()->mapToGlobal(pos) ); | 232 | popup.exec( viewport()->mapToGlobal(pos) ); | ||
253 | } | 233 | } | ||
254 | } | 234 | } | ||
255 | 235 | | |||
256 | // a context menu action was selected | | |||
257 | void UserMenuTree::slotPopupActivated(int id) | | |||
258 | { | | |||
259 | KILE_DEBUG_MAIN << "popup activated with id: " << id; | | |||
260 | switch (id ) { | | |||
261 | case POPUP_INSERT_ABOVE: | | |||
262 | insertMenuItem (m_popupItem, false); | | |||
263 | break; | | |||
264 | case POPUP_INSERT_BELOW: | | |||
265 | insertMenuItem (m_popupItem, true); | | |||
266 | break; | | |||
267 | case POPUP_SEPARATOR_ABOVE: | | |||
268 | insertSeparator(m_popupItem, false); | | |||
269 | break; | | |||
270 | case POPUP_SEPARATOR_BELOW: | | |||
271 | insertSeparator(m_popupItem, true); | | |||
272 | break; | | |||
273 | case POPUP_SUBMENU_ABOVE: | | |||
274 | insertSubmenu (m_popupItem, false); | | |||
275 | break; | | |||
276 | case POPUP_SUBMENU_BELOW: | | |||
277 | insertSubmenu (m_popupItem, true); | | |||
278 | break; | | |||
279 | case POPUP_INTO_SUBMENU: | | |||
280 | insertIntoSubmenu(m_popupItem, UserMenuData::Text); | | |||
281 | break; | | |||
282 | case POPUP_SEPARATOR_INTO_SUBMENU: | | |||
283 | insertIntoSubmenu(m_popupItem, UserMenuData::Separator); | | |||
284 | break; | | |||
285 | case POPUP_SUBMENU_INTO_SUBMENU: | | |||
286 | insertIntoSubmenu(m_popupItem, UserMenuData::Submenu); | | |||
287 | break; | | |||
288 | case POPUP_DELETE_ITEM: | | |||
289 | itemDelete(m_popupItem); | | |||
290 | break; | | |||
291 | case POPUP_DELETE_TREE: | | |||
292 | deleteMenuTree(); | | |||
293 | break; | | |||
294 | case POPUP_COLLAPSE_ITEM: | | |||
295 | m_popupItem->setExpanded(false); | | |||
296 | break; | | |||
297 | case POPUP_EXPAND_ITEM: | | |||
298 | m_popupItem->setExpanded(true); | | |||
299 | break; | | |||
300 | case POPUP_COLLAPSE_TREE: | | |||
301 | collapseAll(); | | |||
302 | break; | | |||
303 | case POPUP_EXPAND_TREE: | | |||
304 | expandAll(); | | |||
305 | break; | | |||
306 | case POPUP_ITEM_INFO: | | |||
307 | itemInfo(m_popupItem); | | |||
308 | break; | | |||
309 | } | | |||
310 | } | | |||
311 | | ||||
312 | ///////////////////////////// read XML ////////////////////////////// | 236 | ///////////////////////////// read XML ////////////////////////////// | ||
313 | 237 | | |||
314 | // read an xml file and check for errors | 238 | // read an xml file and check for errors | ||
315 | bool UserMenuTree::readXml(const QString &filename) | 239 | bool UserMenuTree::readXml(const QString &filename) | ||
316 | { | 240 | { | ||
317 | KILE_DEBUG_MAIN << "read xml file " << filename; | 241 | KILE_DEBUG_MAIN << "read xml file " << filename; | ||
318 | 242 | | |||
319 | QDomDocument doc("UserMenu"); | 243 | QDomDocument doc("UserMenu"); | ||
▲ Show 20 Lines • Show All 791 Lines • Show Last 20 Lines |
Do you think you can get rid of 'slotPopupActivated' as well? and also of the other helper slots below?