From 2675b2147b5ccc7782535e5f662847768bb8b442 Mon Sep 17 00:00:00 2001 From: Michele Calgaro Date: Fri, 19 Feb 2016 22:04:40 +0700 Subject: Added support for Kate startup options and for "New session" functionality. Signed-off-by: Michele Calgaro --- kate/app/katesession.cpp | 310 ++++++++++++++++++++--------------------------- 1 file changed, 130 insertions(+), 180 deletions(-) (limited to 'kate/app/katesession.cpp') diff --git a/kate/app/katesession.cpp b/kate/app/katesession.cpp index adee747d0..4437d7166 100644 --- a/kate/app/katesession.cpp +++ b/kate/app/katesession.cpp @@ -17,7 +17,6 @@ */ #include "katesession.h" -#include "katesession.moc" #include "kateapp.h" #include "katemainwindow.h" @@ -74,6 +73,7 @@ namespace const char *KSM_SESSIONS_LIST = "Sessions list"; } +//BEGIN Kate session KateSession::KateSession(const TQString &sessionName, const TQString &filename, bool isFullName) : m_sessionName(sessionName), m_filename(filename), m_isFullName(isFullName), m_readOnly(false), m_docCount(0), m_documents(), m_config(NULL) @@ -167,7 +167,9 @@ void KateSession::setReadOnly(bool readOnly) void KateSession::save(bool saveGUIInfo) { if (m_readOnly) + { return; + } // create a new session filename if needed if (!m_isFullName) @@ -252,7 +254,7 @@ void KateSession::activate() int mwCount = m_config->readUnsignedNumEntry(KS_COUNT, 1); for (int i=0; i= KateApp::self()->mainWindows()) + if (i >= (int)KateApp::self()->mainWindows()) { KateApp::self()->newMainWindow(m_config, TQString("MainWindow%1").arg(i)); } @@ -267,6 +269,9 @@ void KateSession::activate() Kate::Document::setOpenErrorDialogsActivated(true); } +//END Kate session + +//BEGIN KateSessionManager //------------------------------------ KateSessionManager *KateSessionManager::ksm_instance = NULL; @@ -345,6 +350,12 @@ KateSessionManager::~KateSessionManager() } //------------------------------------ +// FIXME Unnamed sessions should not be saved by default, to allow users who do not bother +// about sessions to open-use-close Kate seemlessly. +// FIXME An option need to be added to Configure Kate -> Sessions to allow Kate to ask about +// saving unnamed sessions before closing the current session. Default value is off as per +// point above. + void KateSessionManager::saveConfig() { if (!m_config) @@ -378,18 +389,20 @@ int KateSessionManager::getSessionIdFromName(const TQString &name) if (m_sessions[i]->getSessionName() == name) return i; } - + return KateSessionManager::INVALID_SESSION; } //------------------------------------ +//FIXME: after a session switch, the session name on Kate window title bar displays +//the previously activated session bool KateSessionManager::activateSession(int sessionId, bool saveCurr) { if (sessionId < 0) { return false; } - + if (!m_firstActivation && sessionId == m_activeSessionId) { return true; @@ -410,12 +423,28 @@ bool KateSessionManager::activateSession(int sessionId, bool saveCurr) } } - m_sessions[sessionId]->activate(); + int oldSessionId = m_activeSessionId; m_activeSessionId = sessionId; + m_sessions[sessionId]->activate(); m_firstActivation = false; + emit sessionActivated(m_activeSessionId, oldSessionId); return true; } +//------------------------------------ +int KateSessionManager::newSession(const TQString &sessionName, bool activate) +{ + m_sessions.append(new KateSession(sessionName, m_baseDir, false)); + ++m_sessionsCount; + int newSessionId = m_sessionsCount - 1; + emit sessionCreated(newSessionId); + if (activate) + { + activateSession(newSessionId, true); + } + return newSessionId; +} + //------------------------------------ bool KateSessionManager::restoreLastSession() { @@ -427,6 +456,99 @@ bool KateSessionManager::restoreLastSession() return activateSession(m_activeSessionId, false); } +//------------------------------------------- +void KateSessionManager::slotNewSession() +{ + // FIXME: allow the user to enter a session name first + // FIXME: allow the user to specify whether to switch to the new session or not + newSession(TQString::null, true); +} + +//END KateSessionManager + +//BEGIN KateSessionChooser +//------------------------------------------- +KateSessionChooser::KateSessionChooser(TQWidget *parent) + : KDialogBase(parent, "", true, i18n("Session Chooser"), + KDialogBase::User1 | KDialogBase::User2 | KDialogBase::User3, KDialogBase::User2, + true, KStdGuiItem::quit(), KGuiItem(i18n("Open Session"), "document-open"), + KGuiItem(i18n("New Session"), "document-new")), m_sessionList(NULL), m_columnSessionId(0) +{ + TQHBox *page = new TQHBox(this); + page->setMinimumSize(400, 200); + setMainWidget(page); + + TQHBox *hb = new TQHBox(page); + hb->setSpacing(KDialog::spacingHint()); + + TQLabel *label = new TQLabel(hb); + label->setPixmap(UserIcon("sessionchooser")); + label->setFrameStyle (TQFrame::Panel | TQFrame::Sunken); + + TQVBox *vb = new TQVBox(hb); + vb->setSpacing (KDialog::spacingHint()); + + m_sessionList = new TDEListView(vb); + m_sessionList->addColumn(i18n("Session Name")); + m_columnSessionId = m_sessionList->addColumn("Session Id", 0); // Non visible column + m_sessionList->header()->setResizeEnabled(false, m_columnSessionId); + m_sessionList->addColumn(i18n("Open Documents")); + m_sessionList->setSelectionMode(TQListView::Single); + m_sessionList->setAllColumnsShowFocus(true); + m_sessionList->setSorting(-1); + m_sessionList->setResizeMode(TQListView::LastColumn); + + connect (m_sessionList, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotSelectionChanged())); + connect (m_sessionList, TQT_SIGNAL(executed(TQListViewItem*)), this, TQT_SLOT(slotUser2())); + + TQPtrList& sessions = KateSessionManager::self()->getSessionsList(); + for (int idx = sessions.count()-1; idx >= 0; --idx) + { + new TDEListViewItem(m_sessionList, sessions[idx]->getSessionName(), TQString("%1").arg(idx), + TQString("%1").arg(sessions[idx]->getDocCount())); + } + + setResult(RESULT_NO_OP); + slotSelectionChanged(); // update button status +} + +//------------------------------------------- +int KateSessionChooser::getSelectedSessionId() +{ + TQListViewItem *selectedItem = m_sessionList->selectedItem(); + if (!selectedItem) + return KateSessionManager::INVALID_SESSION; + + return selectedItem->text(m_columnSessionId).toInt(); +} + +//------------------------------------------- +void KateSessionChooser::slotUser1() +{ + done(RESULT_QUIT_KATE); +} + +//------------------------------------------- +void KateSessionChooser::slotUser2() +{ + done(RESULT_OPEN_EXISTING); +} + +//------------------------------------------- +void KateSessionChooser::slotUser3() +{ + done(RESULT_OPEN_NEW); +} + +//------------------------------------------- +void KateSessionChooser::slotSelectionChanged() +{ + enableButton(KDialogBase::User2, m_sessionList->selectedItem()); +} + +//END KateSessionChooser + + @@ -817,95 +939,12 @@ bool OldKateSessionManager::saveActiveSession (bool tryAsk, bool rememberAsLast) { TDEConfig *c = KateApp::self()->config(); c->setGroup("General"); - c->writeEntry ("Last Session", activeSession()->sessionFileRelative()); c->sync (); } return true; } -bool OldKateSessionManager::chooseSession () -{ - bool success = true; - - // app config - TDEConfig *c = KateApp::self()->config(); - c->setGroup("General"); - - // get last used session, default to default session - TQString lastSession (c->readEntry ("Last Session", "default.katesession")); - TQString sesStart (c->readEntry ("Startup Session", "manual")); - - // uhh, just open last used session, show no chooser - if (sesStart == "last") - { - activateSession (new OldKateSession (this, lastSession, ""), false, false); - return success; - } - - // start with empty new session - if (sesStart == "new") - { - activateSession (new OldKateSession (this, "", ""), false, false); - return success; - } - - OldKateSessionChooser *chooser = new OldKateSessionChooser (0, lastSession); - - bool retry = true; - int res = 0; - while (retry) - { - res = chooser->exec (); - - switch (res) - { - case OldKateSessionChooser::resultOpen: - { - OldKateSession::Ptr s = chooser->selectedSession (); - - if (!s) - { - KMessageBox::error (chooser, i18n("No session selected to open."), i18n ("No Session Selected")); - break; - } - - activateSession (s, false, false); - retry = false; - break; - } - - // exit the app lateron - case OldKateSessionChooser::resultQuit: - success = false; - retry = false; - break; - - default: - activateSession (new OldKateSession (this, "", ""), false, false); - retry = false; - break; - } - } - - // write back our nice boolean :) - if (success && chooser->reopenLastSession ()) - { - c->setGroup("General"); - - if (res == OldKateSessionChooser::resultOpen) - c->writeEntry ("Startup Session", "last"); - else if (res == OldKateSessionChooser::resultNew) - c->writeEntry ("Startup Session", "new"); - - c->sync (); - } - - delete chooser; - - return success; -} - void OldKateSessionManager::sessionNew () { activateSession (new OldKateSession (this, "", "")); @@ -998,98 +1037,6 @@ class OldKateSessionChooserItem : public TQListViewItem OldKateSession::Ptr session; }; -OldKateSessionChooser::OldKateSessionChooser (TQWidget *parent, const TQString &lastSession) - : KDialogBase ( parent - , "" - , true - , i18n ("Session Chooser") - , KDialogBase::User1 | KDialogBase::User2 | KDialogBase::User3 - , KDialogBase::User2 - , true - , KStdGuiItem::quit () - , KGuiItem (i18n ("Open Session"), "document-open") - , KGuiItem (i18n ("New Session"), "document-new") - ) -{ - TQHBox *page = new TQHBox (this); - page->setMinimumSize (400, 200); - setMainWidget(page); - - TQHBox *hb = new TQHBox (page); - hb->setSpacing (KDialog::spacingHint()); - - TQLabel *label = new TQLabel (hb); - label->setPixmap (UserIcon("sessionchooser")); - label->setFrameStyle (TQFrame::Panel | TQFrame::Sunken); - - TQVBox *vb = new TQVBox (hb); - vb->setSpacing (KDialog::spacingHint()); - - m_sessions = new TDEListView (vb); - m_sessions->addColumn (i18n("Session Name")); - m_sessions->addColumn (i18n("Open Documents")); - m_sessions->setResizeMode (TQListView::AllColumns); - m_sessions->setSelectionMode (TQListView::Single); - m_sessions->setAllColumnsShowFocus (true); - - connect (m_sessions, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(selectionChanged())); - connect (m_sessions, TQT_SIGNAL(doubleClicked(TQListViewItem *, const TQPoint &, int)), this, TQT_SLOT(slotUser2())); - - OldKateSessionList &slist (OldKateSessionManager::self()->sessionList()); - for (unsigned int i=0; i < slist.count(); ++i) - { - OldKateSessionChooserItem *item = new OldKateSessionChooserItem (m_sessions, slist[i]); - - if (slist[i]->sessionFileRelative() == lastSession) - m_sessions->setSelected (item, true); - } - - m_useLast = new TQCheckBox (i18n ("&Always use this choice"), vb); - - setResult (resultNone); - - // trigger action update - selectionChanged (); -} - -OldKateSessionChooser::~OldKateSessionChooser () -{ -} - -OldKateSession::Ptr OldKateSessionChooser::selectedSession () -{ - OldKateSessionChooserItem *item = (OldKateSessionChooserItem *) m_sessions->selectedItem (); - - if (!item) - return 0; - - return item->session; -} - -bool OldKateSessionChooser::reopenLastSession () -{ - return m_useLast->isChecked (); -} - -void OldKateSessionChooser::slotUser2 () -{ - done (resultOpen); -} - -void OldKateSessionChooser::slotUser3 () -{ - done (resultNew); -} - -void OldKateSessionChooser::slotUser1 () -{ - done (resultQuit); -} - -void OldKateSessionChooser::selectionChanged () -{ - enableButton (KDialogBase::User2, m_sessions->selectedItem ()); -} //END CHOOSER DIALOG @@ -1304,4 +1251,7 @@ void OldKateSessionsAction::openSession (int i) OldKateSessionManager::self()->activateSession(slist[(uint)i]); } + +#include "katesession.moc" + // kate: space-indent on; indent-width 2; replace-tabs on; mixed-indent off; -- cgit v1.2.1