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; }
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; }
uint KateAppDCOPIface::activeMainWindowNumber () { KateMainWindow *win = m_app->activeMainWindow(); if (win) return win->mainWindowNumber (); return 0; }
DCOPRef KateAppDCOPIface::mainWindow (uint n) { KateMainWindow *win = m_app->mainWindow(n); if (win) return DCOPRef (win->dcopObject ()); return DCOPRef (); }
QDBusObjectPath KateAppAdaptor::mainWindow (uint n) { KateMainWindow *win = m_app->mainWindow(n); if (win) return QDBusObjectPath (win->dbusObjectPath ()); return QDBusObjectPath (); }
DCOPRef KateAppDCOPIface::activeMainWindow () { KateMainWindow *win = m_app->activeMainWindow(); if (win) return DCOPRef (win->dcopObject ()); return DCOPRef (); }
uint KateAppAdaptor::activeMainWindowNumber () { KateMainWindow *win = m_app->activeMainWindow(); if (win) return win->mainWindowNumber (); return 0; }
QDBusObjectPath KateAppAdaptor::activeMainWindow () { KateMainWindow *win = m_app->activeMainWindow(); if (win) return QDBusObjectPath (win->dbusObjectPath()); return QDBusObjectPath (); }
KateMainWindow *KateApp::newMainWindow (KConfig *sconfig_, const QString &sgroup_) { KConfig *sconfig = sconfig_ ? sconfig_ : KGlobal::config().data(); QString sgroup = !sgroup_.isEmpty() ? sgroup_ : "MainWindow0"; KateMainWindow *mainWindow = new KateMainWindow (sconfig, sgroup); mainWindow->show (); return mainWindow; }
bool KateApp::setCursor (int line, int column) { KateMainWindow *mainWindow = activeMainWindow (); if (!mainWindow) return false; mainWindow->viewManager()->activeView ()->setCursorPosition (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; }
void KateAppAdaptor::activate () { KateMainWindow *win = m_app->activeMainWindow(); if (!win) return; win->show(); win->activateWindow(); win->raise(); #ifdef Q_WS_X11 KWindowSystem::forceActiveWindow (win->winId ()); KWindowSystem::raiseWindow (win->winId ()); KWindowSystem::demandAttention (win->winId ()); #endif }
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; }
KateMainWindow::KateMainWindow (KConfig *sconfig, const QString &sgroup) : KateMDI::MainWindow (0) { setObjectName((QString("__KateMainWindow#%1").arg(uniqueID)).toLatin1()); // first the very important id myID = uniqueID; uniqueID++; new KateMainWindowAdaptor( this ); m_dbusObjectPath = "/MainWindow/" + QString::number( myID ); QDBusConnection::sessionBus().registerObject( m_dbusObjectPath, this ); m_modignore = false; // here we go, set some usable default sizes if (!initialGeometrySet()) { int scnum = QApplication::desktop()->screenNumber(parentWidget()); QRect desk = QApplication::desktop()->screenGeometry(scnum); QSize size; // try to load size if (sconfig) { KConfigGroup cg( sconfig, sgroup ); size.setWidth (cg.readEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); size.setHeight (cg.readEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); } // if thats fails, try to reuse size if (size.isEmpty()) { // first try to reuse size known from current or last created main window ;=) if (KateApp::self()->mainWindows () > 0) { KateMainWindow *win = KateApp::self()->activeMainWindow (); if (!win) win = KateApp::self()->mainWindow (KateApp::self()->mainWindows () - 1); size = win->size(); } else // now fallback to hard defaults ;) { // first try global app config KConfigGroup cg( KGlobal::config(), "MainWindow" ); size.setWidth (cg.readEntry( QString::fromLatin1("Width %1").arg(desk.width()), 0 )); size.setHeight (cg.readEntry( QString::fromLatin1("Height %1").arg(desk.height()), 0 )); if (size.isEmpty()) size = QSize (qMin (700, desk.width()), qMin(480, desk.height())); } resize (size); } } // start session restore if needed startRestore (sconfig, sgroup); m_mainWindow = new Kate::MainWindow (this); // setup most important actions first, needed by setupMainWindow setupImportantActions (); // setup the most important widgets setupMainWindow(); // setup the actions setupActions(); setStandardToolBarMenuEnabled( true ); setXMLFile( "kateui.rc" ); createShellGUI ( true ); //kDebug() << "****************************************************************************" << sconfig; // register mainwindow in app KateApp::self()->addMainWindow (this); // enable plugin guis KatePluginManager::self()->enableAllPluginsGUI (this, sconfig); // caption update for (uint i = 0; i < KateDocManager::self()->documents(); i++) slotDocumentCreated (KateDocManager::self()->document(i)); connect(KateDocManager::self(), SIGNAL(documentCreated(KTextEditor::Document*)), this, SLOT(slotDocumentCreated(KTextEditor::Document*))); readOptions(); if (sconfig) m_viewManager->restoreViewConfiguration (KConfigGroup(sconfig, sgroup) ); finishRestore (); fileOpenRecent->loadEntries( KConfigGroup(sconfig, "Recent Files" ) ); setAcceptDrops(true); connect(KateSessionManager::self(), SIGNAL(sessionChanged()), this, SLOT(updateCaption())); connect(this,SIGNAL(sigShowPluginConfigPage(Kate::PluginConfigPageInterface *,uint)),this,SLOT(showPluginConfigPage(Kate::PluginConfigPageInterface *,uint))); }