Changeset View
Changeset View
Standalone View
Standalone View
src/filewidgets/knewfilemenu.cpp
Show First 20 Lines • Show All 236 Lines • ▼ Show 20 Line(s) | |||||
237 | 237 | | |||
238 | class KNewFileMenuPrivate | 238 | class KNewFileMenuPrivate | ||
239 | { | 239 | { | ||
240 | public: | 240 | public: | ||
241 | explicit KNewFileMenuPrivate(KNewFileMenu *qq) | 241 | explicit KNewFileMenuPrivate(KNewFileMenu *qq) | ||
242 | : m_menuItemsVersion(0), | 242 | : m_menuItemsVersion(0), | ||
243 | m_modal(true), | 243 | m_modal(true), | ||
244 | m_viewShowsHiddenFiles(false), | 244 | m_viewShowsHiddenFiles(false), | ||
245 | m_firstFileEntry(nullptr), | ||||
245 | q(qq) | 246 | q(qq) | ||
246 | {} | 247 | {} | ||
247 | 248 | | |||
248 | bool checkSourceExists(const QString &src); | 249 | bool checkSourceExists(const QString &src); | ||
249 | 250 | | |||
250 | /** | 251 | /** | ||
251 | * Asks user whether to create a hidden directory with a dialog | 252 | * Asks user whether to create a hidden directory with a dialog | ||
252 | */ | 253 | */ | ||
▲ Show 20 Lines • Show All 114 Lines • ▼ Show 20 Line(s) | |||||
367 | */ | 368 | */ | ||
368 | QList<QUrl> m_popupFiles; | 369 | QList<QUrl> m_popupFiles; | ||
369 | 370 | | |||
370 | QStringList m_supportedMimeTypes; | 371 | QStringList m_supportedMimeTypes; | ||
371 | QString m_tempFileToDelete; // set when a tempfile was created for a Type=URL desktop file | 372 | QString m_tempFileToDelete; // set when a tempfile was created for a Type=URL desktop file | ||
372 | QString m_text; | 373 | QString m_text; | ||
373 | bool m_viewShowsHiddenFiles; | 374 | bool m_viewShowsHiddenFiles; | ||
374 | 375 | | |||
376 | KNewFileMenuSingleton::Entry *m_firstFileEntry; | ||||
377 | | ||||
375 | KNewFileMenu * const q; | 378 | KNewFileMenu * const q; | ||
376 | 379 | | |||
377 | KNewFileMenuCopyData m_copyData; | 380 | KNewFileMenuCopyData m_copyData; | ||
378 | }; | 381 | }; | ||
379 | 382 | | |||
380 | bool KNewFileMenuPrivate::checkSourceExists(const QString &src) | 383 | bool KNewFileMenuPrivate::checkSourceExists(const QString &src) | ||
381 | { | 384 | { | ||
382 | if (!QFile::exists(src)) { | 385 | if (!QFile::exists(src)) { | ||
▲ Show 20 Lines • Show All 361 Lines • ▼ Show 20 Line(s) | 696 | } else { | |||
744 | } else if (KDesktopFile::isDesktopFile(templatePath)) { | 747 | } else if (KDesktopFile::isDesktopFile(templatePath)) { | ||
745 | KDesktopFile df(templatePath); | 748 | KDesktopFile df(templatePath); | ||
746 | if (df.readType() == QLatin1String("FSDevice")) { | 749 | if (df.readType() == QLatin1String("FSDevice")) { | ||
747 | m_menuDev->menu()->addAction(act); | 750 | m_menuDev->menu()->addAction(act); | ||
748 | } else { | 751 | } else { | ||
749 | menu->addAction(act); | 752 | menu->addAction(act); | ||
750 | } | 753 | } | ||
751 | } else { | 754 | } else { | ||
755 | if (!m_firstFileEntry) { | ||||
elvisangelaccio: `!m_firstFileEntry` | |||||
756 | m_firstFileEntry = &entry; | ||||
757 | // If there is a shortcut available in the action collection, use it. | ||||
758 | QAction *act2 = m_actionCollection->action(QStringLiteral("create_file")); | ||||
759 | if (act2) { | ||||
760 | act->setShortcuts(act2->shortcuts()); | ||||
761 | // Both actions have now the same shortcut, so this will prevent the "Ambiguous shortcut detected" dialog. | ||||
762 | act->setShortcutContext(Qt::WidgetShortcut); | ||||
763 | // We also need to react to shortcut changes. | ||||
764 | QObject::connect(act2, &QAction::changed, act, [=]() { | ||||
765 | act->setShortcuts(act2->shortcuts()); | ||||
766 | }); | ||||
767 | } | ||||
768 | } | ||||
752 | menu->addAction(act); | 769 | menu->addAction(act); | ||
753 | } | 770 | } | ||
754 | } | 771 | } | ||
755 | } | 772 | } | ||
756 | lastTemplatePath = entry.templatePath; | 773 | lastTemplatePath = entry.templatePath; | ||
757 | } else { // Separate system from personal templates | 774 | } else { // Separate system from personal templates | ||
758 | Q_ASSERT(entry.entryType != 0); | 775 | Q_ASSERT(entry.entryType != 0); | ||
759 | menu->addSeparator(); | 776 | menu->addSeparator(); | ||
▲ Show 20 Lines • Show All 462 Lines • ▼ Show 20 Line(s) | 1192 | { | |||
1222 | 1239 | | |||
1223 | d->m_fileDialog = fileDialog; | 1240 | d->m_fileDialog = fileDialog; | ||
1224 | 1241 | | |||
1225 | fileDialog->show(); | 1242 | fileDialog->show(); | ||
1226 | lineEdit->selectAll(); | 1243 | lineEdit->selectAll(); | ||
1227 | lineEdit->setFocus(); | 1244 | lineEdit->setFocus(); | ||
1228 | } | 1245 | } | ||
1229 | 1246 | | |||
1247 | void KNewFileMenu::createFile() | ||||
1248 | { | ||||
1249 | if (d->m_popupFiles.isEmpty()) { | ||||
1250 | return; | ||||
1251 | } | ||||
1252 | | ||||
1253 | checkUpToDate(); | ||||
1254 | if (!d->m_firstFileEntry) { | ||||
1255 | return; | ||||
1256 | } | ||||
1257 | | ||||
1258 | d->executeRealFileOrDir(*d->m_firstFileEntry); | ||||
1259 | } | ||||
1260 | | ||||
1230 | bool KNewFileMenu::isModal() const | 1261 | bool KNewFileMenu::isModal() const | ||
1231 | { | 1262 | { | ||
1232 | return d->m_modal; | 1263 | return d->m_modal; | ||
1233 | } | 1264 | } | ||
1234 | 1265 | | |||
1235 | QList<QUrl> KNewFileMenu::popupFiles() const | 1266 | QList<QUrl> KNewFileMenu::popupFiles() const | ||
1236 | { | 1267 | { | ||
1237 | return d->m_popupFiles; | 1268 | return d->m_popupFiles; | ||
1238 | } | 1269 | } | ||
1239 | 1270 | | |||
1240 | void KNewFileMenu::setModal(bool modal) | 1271 | void KNewFileMenu::setModal(bool modal) | ||
1241 | { | 1272 | { | ||
1242 | d->m_modal = modal; | 1273 | d->m_modal = modal; | ||
1243 | } | 1274 | } | ||
1244 | 1275 | | |||
1245 | void KNewFileMenu::setPopupFiles(const QList<QUrl> &files) | 1276 | void KNewFileMenu::setPopupFiles(const QList<QUrl> &files) | ||
1246 | { | 1277 | { | ||
1247 | d->m_popupFiles = files; | 1278 | d->m_popupFiles = files; | ||
1248 | if (files.isEmpty()) { | 1279 | if (files.isEmpty()) { | ||
1249 | d->m_newMenuGroup->setEnabled(false); | 1280 | d->m_newMenuGroup->setEnabled(false); | ||
1250 | } else { | 1281 | } else { | ||
1251 | QUrl firstUrl = files.first(); | 1282 | QUrl firstUrl = files.first(); | ||
1252 | if (KProtocolManager::supportsWriting(firstUrl)) { | 1283 | if (KProtocolManager::supportsWriting(firstUrl)) { | ||
1253 | d->m_newMenuGroup->setEnabled(true); | 1284 | d->m_newMenuGroup->setEnabled(true); | ||
1254 | if (d->m_newDirAction) { | 1285 | if (d->m_newDirAction) { | ||
1255 | d->m_newDirAction->setEnabled(KProtocolManager::supportsMakeDir(firstUrl)); // e.g. trash:/ | 1286 | d->m_newDirAction->setEnabled(KProtocolManager::supportsMakeDir(firstUrl)); // e.g. trash:/ | ||
1256 | } | 1287 | } | ||
1257 | } else { | 1288 | } else { | ||
1258 | d->m_newMenuGroup->setEnabled(true); | 1289 | d->m_newMenuGroup->setEnabled(true); | ||
1259 | } | 1290 | } | ||
1260 | } | 1291 | } | ||
1261 | } | 1292 | } | ||
1262 | 1293 | | |||
1263 | void KNewFileMenu::setParentWidget(QWidget *parentWidget) | 1294 | void KNewFileMenu::setParentWidget(QWidget *parentWidget) | ||
1264 | { | 1295 | { | ||
1265 | d->m_parentWidget = parentWidget; | 1296 | d->m_parentWidget = parentWidget; | ||
1266 | } | 1297 | } | ||
1267 | 1298 | | |||
1268 | void KNewFileMenu::setSupportedMimeTypes(const QStringList &mime) | 1299 | void KNewFileMenu::setSupportedMimeTypes(const QStringList &mime) | ||
1269 | { | 1300 | { | ||
Can we try to not duplicate this code? We should create this new createFile() function such that we can also call it from executeRealFileOrDir() elvisangelaccio: Can we try to not duplicate this code? We should create this new `createFile()` function such… | |||||
1270 | d->m_supportedMimeTypes = mime; | 1301 | d->m_supportedMimeTypes = mime; | ||
1271 | } | 1302 | } | ||
1272 | 1303 | | |||
1273 | void KNewFileMenu::setViewShowsHiddenFiles(bool b) | 1304 | void KNewFileMenu::setViewShowsHiddenFiles(bool b) | ||
1274 | { | 1305 | { | ||
1275 | d->m_viewShowsHiddenFiles = b; | 1306 | d->m_viewShowsHiddenFiles = b; | ||
1276 | } | 1307 | } | ||
1277 | 1308 | | |||
▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines |
!m_firstFileEntry