KTextEditor::Document* KateApp::openDocUrl (const KUrl &url, const QString &encoding, bool isTempFile) { KateMainWindow *mainWindow = activeMainWindow (); if (!mainWindow) return 0; QTextCodec *codec = encoding.isEmpty() ? 0 : QTextCodec::codecForName(encoding.toLatin1()); // this file is no local dir, open it, else warn bool noDir = !url.isLocalFile() || !QFileInfo (url.toLocalFile()).isDir(); KTextEditor::Document *doc=0; if (noDir) { // show no errors... documentManager()->setSuppressOpeningErrorDialogs (true); // open a normal file if (codec) doc=mainWindow->viewManager()->openUrl( url, codec->name(), true, isTempFile); else doc=mainWindow->viewManager()->openUrl( url, QString(), true, isTempFile ); // back to normal.... documentManager()->setSuppressOpeningErrorDialogs (false); } else KMessageBox::sorry( mainWindow, i18n("The file '%1' could not be opened: it is not a normal file, it is a folder.", url.url()) ); return doc; }
bool KateApp::openURL (const KURL &url, const QString &encoding, bool isTempFile) { KateMainWindow *mainWindow = activeMainWindow (); if (!mainWindow) return false; QTextCodec *codec = encoding.isEmpty() ? 0 : QTextCodec::codecForName(encoding.latin1()); kdDebug () << "OPEN URL "<< encoding << endl; // this file is no local dir, open it, else warn bool noDir = !url.isLocalFile() || !QDir (url.path()).exists(); if (noDir) { // open a normal file if (codec) mainWindow->viewManager()->openURL( url, codec->name(), true, isTempFile ); else mainWindow->viewManager()->openURL( url, QString::null, true, isTempFile ); } else KMessageBox::sorry( mainWindow, i18n("The file '%1' could not be opened: it is not a normal file, it is a folder.").arg(url.url()) ); return true; }
bool KateApp::setCursor (int line, int column) { KateMainWindow *mainWindow = activeMainWindow (); if (!mainWindow) return false; if (mainWindow->viewManager()->activeView ()) mainWindow->viewManager()->activeView ()->setCursorPosition (KTextEditor::Cursor (line, column)); return true; }
KateMainWindow *KateApp::newMainWindow (KConfig *sconfig, const QString &sgroup) { KateMainWindow *mainWindow = new KateMainWindow (sconfig, sgroup); m_mainWindows.push_back (mainWindow); if ((mainWindows() > 1) && m_mainWindows[m_mainWindows.count()-2]->viewManager()->activeView()) mainWindow->viewManager()->activateView ( m_mainWindows[m_mainWindows.count()-2]->viewManager()->activeView()->getDoc()->documentNumber() ); else if ((mainWindows() > 1) && (m_docManager->documents() > 0)) mainWindow->viewManager()->activateView ( (m_docManager->document(m_docManager->documents()-1))->documentNumber() ); else if ((mainWindows() > 1) && (m_docManager->documents() < 1)) mainWindow->viewManager()->openURL ( KURL() ); mainWindow->show (); return mainWindow; }
bool KateAppCommands::exec(KTextEditor::View *view, const QString &cmd, QString &msg) { QStringList args(cmd.split( QRegExp("\\s+"), QString::SkipEmptyParts)) ; QString command( args.takeFirst() ); KateMainWindow *mainWin = KateApp::self()->activeMainWindow(); if (re_write.exactMatch(command)) { //TODO: handle writing to specific file if (!re_write.cap(1).isEmpty()) { // [a]ll KateDocManager::self()->saveAll(); msg = i18n("All documents written to disk"); } else { view->document()->documentSave(); msg = i18n("Document written to disk"); } } // Other buffer commands are implemented by the KateFileTree plugin else if (re_close.exactMatch(command)) { QTimer::singleShot(0, mainWin, SLOT(slotFileClose())); } else if (re_quit.exactMatch(command)) { if (!re_quit.cap(2).isEmpty()) { // a[ll] if (!re_quit.cap(1).isEmpty()) { // [w]rite KateDocManager::self()->saveAll(); } QTimer::singleShot(0, mainWin, SLOT(slotFileQuit())); } else { if (!re_quit.cap(1).isEmpty() && view->document()->isModified()) { // [w]rite view->document()->documentSave(); } if (mainWin->viewManager()->count() > 1) { QTimer::singleShot(0, mainWin->viewManager(), SLOT(slotCloseCurrentViewSpace())); } else { if (KateDocManager::self()->documents() > 1) QTimer::singleShot(0, mainWin, SLOT(slotFileClose())); else QTimer::singleShot(0, mainWin, SLOT(slotFileQuit())); } } } else if (re_exit.exactMatch(command)) { if (!re_exit.cap(1).isEmpty()) { // a[ll] KateDocManager::self()->saveAll(); QTimer::singleShot(0, mainWin, SLOT(slotFileQuit())); } else { if (view->document()->isModified()) { view->document()->documentSave(); } if (KateDocManager::self()->documents() > 1) QTimer::singleShot(0, mainWin, SLOT(slotFileClose())); else QTimer::singleShot(0, mainWin, SLOT(slotFileQuit())); } QTimer::singleShot(0, mainWin, SLOT(slotFileQuit())); } else if (re_edit.exactMatch(command)) { QString argument = args.join(QString(' ')); if (argument.isEmpty() || argument == "!") { view->document()->documentReload(); } else { KUrl base = mainWin->activeDocumentUrl(); KUrl url; KUrl arg2path(argument); if (base.isValid()) { // first try to use the same path as the current open document has url = KUrl(base.resolved(arg2path)); //resolved handles the case where the args is a relative path, and is the same as using KUrl(args) elsewise } else { // else use the cwd url = KUrl(KUrl(QDir::currentPath() + "/").resolved(arg2path)); // + "/" is needed because of http://lists.qt.nokia.com/public/qt-interest/2011-May/033913.html } QFileInfo file( url.toLocalFile() ); KTextEditor::Document *doc = KateDocManager::self()->findDocument( url ); if (doc) { mainWin->viewManager()->activateView( doc ); } else if (file.exists()) { mainWin->viewManager()->openUrl( url, QString(), true ); } else { mainWin->viewManager()->openUrl( KUrl(), QString(), true )->saveAs ( url ); } } } else if (re_new.exactMatch(command)) { if (re_new.cap(1) == "v") { // vertical split mainWin->viewManager()->slotSplitViewSpaceVert(); } else { // horizontal split mainWin->viewManager()->slotSplitViewSpaceHoriz(); } mainWin->viewManager()->slotDocumentNew(); } else if (command == "enew") { mainWin->viewManager()->slotDocumentNew(); } else if (re_split.exactMatch(command)) { mainWin->viewManager()->slotSplitViewSpaceHoriz(); } else if (re_vsplit.exactMatch(command)) { mainWin->viewManager()->slotSplitViewSpaceVert(); } else if (re_only.exactMatch(command)) { mainWin->viewManager()->slotCloseOtherViews(); } return true; }