00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "katesession.h"
00020
00021 #include "kateapp.h"
00022 #include "katemainwindow.h"
00023 #include "katedocmanager.h"
00024
00025 #include <kstandarddirs.h>
00026 #include <tdelocale.h>
00027 #include <kdebug.h>
00028 #include <kdirwatch.h>
00029 #include <kinputdialog.h>
00030 #include <kiconloader.h>
00031 #include <tdemessagebox.h>
00032 #include <kmdcodec.h>
00033 #include <kstdguiitem.h>
00034 #include <kpushbutton.h>
00035 #include <tdepopupmenu.h>
00036
00037 #include <tqdir.h>
00038 #include <tqfile.h>
00039 #include <tqlabel.h>
00040 #include <tqlayout.h>
00041 #include <tqvbox.h>
00042 #include <tqhbox.h>
00043 #include <tqdatetime.h>
00044 #include <tqmap.h>
00045
00046 #include <unistd.h>
00047 #include <time.h>
00048
00049
00050
00051
00052
00053
00054 namespace
00055 {
00056
00057 const char *KS_COUNT = "Count";
00058 const char *KS_DOCCOUNT = "Document count";
00059 const char *KS_DOCLIST = "Document list";
00060 const char *KS_GENERAL = "General";
00061 const char *KS_NAME = "Name";
00062 const char *KS_OPENDOC = "Open Documents";
00063 const char *KS_READONLY = "ReadOnly";
00064 const char *KS_OPEN_MAINWINDOWS = "Open MainWindows";
00065 const char *KS_UNNAMED = "Unnamed";
00066
00067
00068 const char *KSM_DIR = "kate/sessions";
00069 const char *KSM_FILE = "sessions.list";
00070 const char *KSM_SESSIONS_COUNT = "Sessions count";
00071 const char *KSM_LAST_SESSION_ID = "Last session id";
00072 const char *KSM_SESSIONS_LIST = "Sessions list";
00073
00074
00075 const char *KAPP_GENERAL = "General";
00076 const char *KAPP_LAST_SESSION = "Last Session";
00077 const char *KAPP_STARTUP_SESSION = "Startup Session";
00078 const char *KAPP_NEW = "new";
00079 const char *KAPP_LAST = "last";
00080 const char *KAPP_MANUAL = "manual";
00081 const char *KAPP_SESSION_EXIT = "Session Exit";
00082 const char *KAPP_DISCARD = "discard";
00083 const char *KAPP_SAVE = "save";
00084 const char *KAPP_ASK = "ask";
00085 }
00086
00087
00088 KateSession::KateSession(const KateSessionManager &manager, const TQString &sessionName,
00089 const TQString &fileName) :
00090 m_manager(manager), m_sessionName(sessionName), m_filename(fileName),
00091 m_readOnly(false), m_documents(), m_config(NULL)
00092 {
00093 load(false);
00094 }
00095
00096
00097 KateSession::KateSession(const KateSession &session, const TQString &newSessionName) :
00098 m_manager(session.m_manager), m_sessionName(newSessionName), m_filename(),
00099 m_readOnly(false), m_documents(session.m_documents), m_config(NULL)
00100 {
00101 createFilename();
00102 if (session.m_config)
00103 {
00104 m_config = new KSimpleConfig(m_filename);
00105 session.m_config->copyTo(m_filename, m_config);
00106 m_config->sync();
00107 }
00108 }
00109
00110
00111 KateSession::~KateSession()
00112 {
00113 if (m_config)
00114 {
00115 delete m_config;
00116 }
00117 }
00118
00119
00120 void KateSession::setSessionName(const TQString &sessionName)
00121 {
00122 m_sessionName = sessionName.isEmpty() ? i18n(KS_UNNAMED) : sessionName;
00123 }
00124
00125
00126 bool KateSession::isStillVolatile() const
00127 {
00128 return m_filename.isEmpty() && m_sessionName == i18n(KS_UNNAMED);
00129 }
00130
00131
00132 void KateSession::load(bool includeGUIInfo)
00133 {
00134 if (m_config)
00135 {
00136 delete m_config;
00137 }
00138
00139 if (TDEGlobal::dirs()->exists(m_filename))
00140 {
00141
00142 m_config = new KSimpleConfig(m_filename, m_readOnly);
00143 m_config->setGroup(KS_GENERAL);
00144
00145 m_sessionName = m_config->readEntry(KS_NAME, i18n(KS_UNNAMED));
00146 m_readOnly = m_config->readBoolEntry(KS_READONLY, false);
00147
00148 if (m_config->hasGroup(KS_DOCLIST))
00149 {
00150
00151 m_config->setGroup(KS_DOCLIST);
00152 int docCount = m_config->readNumEntry(KS_DOCCOUNT, 0);
00153 for (int i = 0; i < docCount; ++i)
00154 {
00155 TQString urlStr = m_config->readEntry(TQString("URL_%1").arg(i));
00156 if (!urlStr.isEmpty())
00157 {
00158
00159 m_documents.append(urlStr);
00160 }
00161 }
00162 }
00163 else
00164 {
00165
00166
00167 m_config->setGroup(KS_OPENDOC);
00168 int docCount = m_config->readNumEntry(KS_COUNT, 0);
00169 for (int i = 0; i < docCount; ++i)
00170 {
00171 m_config->setGroup(TQString("Document %1").arg(i));
00172 TQString urlStr = m_config->readEntry("URL");
00173 if (!urlStr.isEmpty())
00174 {
00175
00176 m_documents.append(urlStr);
00177 }
00178 }
00179 }
00180 }
00181 else
00182 {
00183 m_filename = TQString::null;
00184 }
00185 if (m_sessionName.isEmpty())
00186 {
00187 m_sessionName = i18n(KS_UNNAMED);
00188 }
00189
00190
00191 if (includeGUIInfo)
00192 {
00193 activate();
00194 }
00195 }
00196
00197
00198 void KateSession::save(bool saveGUIInfo, bool setReadOnly)
00199 {
00200 if (m_readOnly && !setReadOnly)
00201 {
00202 return;
00203 }
00204
00205
00206 if (m_filename.isEmpty())
00207 {
00208 createFilename();
00209 }
00210
00211
00212 if (!m_config)
00213 {
00214 m_config = new KSimpleConfig(m_filename);
00215 }
00216
00217 if (m_config->hasGroup(KS_GENERAL))
00218 {
00219 m_config->deleteGroup(KS_GENERAL);
00220 }
00221 m_config->setGroup(KS_GENERAL);
00222 m_config->writeEntry(KS_NAME, m_sessionName);
00223 m_config->writeEntry(KS_READONLY, m_readOnly);
00224
00225 if (m_config->hasGroup(KS_DOCLIST))
00226 {
00227 m_config->deleteGroup(KS_DOCLIST);
00228 }
00229 m_config->setGroup(KS_DOCLIST);
00230 m_config->writeEntry(KS_DOCCOUNT, m_documents.count());
00231 for (int i = 0; i < (int)m_documents.count(); ++i)
00232 {
00233 m_config->writeEntry(TQString("URL_%1").arg(i), m_documents[i]);
00234 }
00235
00236
00237 if (saveGUIInfo)
00238 {
00239 KateDocManager::self()->saveDocumentList(m_config);
00240
00241 int mwCount = KateApp::self()->mainWindows();
00242 m_config->setGroup(KS_OPEN_MAINWINDOWS);
00243 m_config->writeEntry(KS_COUNT, mwCount);
00244 for (int i = 0; i < mwCount; ++i)
00245 {
00246 m_config->setGroup(TQString("MainWindow%1").arg(i));
00247 KateApp::self()->mainWindow(i)->saveProperties(m_config);
00248 }
00249 }
00250
00251 m_config->sync();
00252 }
00253
00254
00255 void KateSession::activate()
00256 {
00257 if (KateDocManager::self()->documents() > 0)
00258 {
00259 KateDocManager::self()->closeAllDocuments();
00260 }
00261
00262 Kate::Document::setOpenErrorDialogsActivated(false);
00263 if (m_config)
00264 {
00265 KateApp::self()->documentManager()->restoreDocumentList(m_config);
00266
00267
00268 if (m_config->hasGroup(KS_OPEN_MAINWINDOWS))
00269 {
00270 m_config->setGroup(KS_OPEN_MAINWINDOWS);
00271 int mwCount = m_config->readUnsignedNumEntry(KS_COUNT, 1);
00272 for (int i = 0; i < mwCount; ++i)
00273 {
00274 if (i >= (int)KateApp::self()->mainWindows())
00275 {
00276 KateApp::self()->newMainWindow(m_config, TQString("MainWindow%1").arg(i));
00277 }
00278 else
00279 {
00280 m_config->setGroup(TQString("MainWindow%1").arg(i));
00281 KateApp::self()->mainWindow(i)->readProperties(m_config);
00282 }
00283 }
00284 }
00285 }
00286 Kate::Document::setOpenErrorDialogsActivated(true);
00287 }
00288
00289
00290 void KateSession::createFilename()
00291 {
00292
00293 if (!m_filename.isEmpty())
00294 {
00295 return;
00296 }
00297
00298 int s = time(0);
00299 TQCString tname;
00300 TQString tmpName;
00301 while (true)
00302 {
00303 tname.setNum(s++);
00304 KMD5 md5(tname);
00305 tmpName = m_manager.getBaseDir() + TQString("%1.katesession").arg(md5.hexDigest().data());
00306 if (!TDEGlobal::dirs()->exists(tmpName))
00307 {
00308 m_filename = tmpName;
00309 break;
00310 }
00311 }
00312 }
00313
00314
00315
00316
00317
00318 KateSessionManager *KateSessionManager::ksm_instance = NULL;
00319
00320
00321 KateSessionManager* KateSessionManager::self()
00322 {
00323 if (!KateSessionManager::ksm_instance)
00324 {
00325 KateSessionManager::ksm_instance = new KateSessionManager();
00326 }
00327 return KateSessionManager::ksm_instance;
00328 }
00329
00330
00331 KateSessionManager::KateSessionManager() :
00332 m_baseDir(locateLocal("data", KSM_DIR)+"/"), m_configFile(m_baseDir + KSM_FILE),
00333 m_activeSessionId(INVALID_SESSION), m_lastSessionId(INVALID_SESSION), m_sessions(),
00334 m_config(NULL), m_startupOption(STARTUP_NEW), m_switchOption(SWITCH_DISCARD)
00335 {
00336
00337 updateSessionOptions(SO_ALL);
00338
00339
00340 m_sessions.setAutoDelete(true);
00341 int sessionsCount = 0;
00342 if (TDEGlobal::dirs()->exists(m_configFile))
00343 {
00344
00345 m_config = new KSimpleConfig(m_configFile);
00346 m_config->setGroup(KSM_SESSIONS_LIST);
00347 sessionsCount = m_config->readNumEntry(KSM_SESSIONS_COUNT, 0);
00348 m_lastSessionId = m_config->readNumEntry(KSM_LAST_SESSION_ID, INVALID_SESSION);
00349 for (int i = 0; i < sessionsCount; ++i)
00350 {
00351 TQString urlStr = m_config->readEntry(TQString("URL_%1").arg(i));
00352 if (!urlStr.isEmpty() && TDEGlobal::dirs()->exists(urlStr))
00353 {
00354
00355 m_sessions.append(new KateSession(*this, TQString::null, urlStr));
00356 }
00357 }
00358 }
00359 else
00360 {
00361
00362
00363 TQDir sessionDir(m_baseDir, "*.katesession");
00364 for (unsigned int i = 0; i < sessionDir.count(); ++i)
00365 {
00366 m_sessions.append(new KateSession(*this, TQString::null, m_baseDir+sessionDir[i]));
00367 }
00368 }
00369 sessionsCount = (int)m_sessions.count();
00370 if (sessionsCount == 0)
00371 {
00372 m_sessions.append(new KateSession(*this, TQString::null, TQString::null));
00373 }
00374 if (m_lastSessionId < 0 || m_lastSessionId >= (int)m_sessions.count())
00375 {
00376 m_lastSessionId = 0;
00377 }
00378
00379
00380
00381
00382 }
00383
00384
00385 KateSessionManager::~KateSessionManager()
00386 {
00387 if (m_config)
00388 {
00389 delete m_config;
00390 }
00391 m_sessions.clear();
00392 }
00393
00394
00395 void KateSessionManager::updateSessionOptions(int optionType)
00396 {
00397
00398 TDEConfig *kateCfg = KateApp::self()->config();
00399 kateCfg->setGroup(KAPP_GENERAL);
00400
00401 if (optionType == SO_STARTUP || optionType == SO_ALL)
00402 {
00403 if (kateCfg->hasKey(KAPP_LAST_SESSION))
00404 {
00405
00406 kateCfg->deleteEntry(KAPP_LAST_SESSION);
00407 }
00408 TQString startupOption(kateCfg->readEntry(KAPP_STARTUP_SESSION, KAPP_MANUAL));
00409 if (startupOption == KAPP_LAST)
00410 {
00411 m_startupOption = STARTUP_LAST;
00412 }
00413 else if (startupOption == KAPP_NEW)
00414 {
00415 m_startupOption = STARTUP_NEW;
00416 }
00417 else
00418 {
00419 m_startupOption = STARTUP_MANUAL;
00420 }
00421 }
00422
00423 if (optionType == SO_SWITCH || optionType == SO_ALL)
00424 {
00425 TQString switchOption(kateCfg->readEntry(KAPP_SESSION_EXIT, KAPP_ASK));
00426 if (switchOption == KAPP_DISCARD)
00427 {
00428 m_switchOption = SWITCH_DISCARD;
00429 }
00430 else if (switchOption == KAPP_SAVE)
00431 {
00432 m_switchOption = SWITCH_SAVE;
00433 }
00434 else
00435 {
00436 m_switchOption = SWITCH_ASK;
00437 }
00438 }
00439 }
00440
00441
00442 void KateSessionManager::saveSessionOptions(int optionType)
00443 {
00444 TDEConfig *kateCfg = KateApp::self()->config();
00445 kateCfg->setGroup(KAPP_GENERAL);
00446 if (optionType == SO_STARTUP || optionType == SO_ALL)
00447 {
00448 if (m_startupOption == STARTUP_LAST)
00449 {
00450 kateCfg->writeEntry(KAPP_STARTUP_SESSION, KAPP_LAST);
00451 }
00452 else if (m_startupOption == STARTUP_NEW)
00453 {
00454 kateCfg->writeEntry(KAPP_STARTUP_SESSION, KAPP_NEW);
00455 }
00456 else
00457 {
00458 kateCfg->writeEntry(KAPP_STARTUP_SESSION, KAPP_MANUAL);
00459 }
00460 }
00461
00462 if (optionType == SO_SWITCH || optionType == SO_ALL)
00463 {
00464 if (m_switchOption == SWITCH_DISCARD)
00465 {
00466 kateCfg->writeEntry(KAPP_SESSION_EXIT, KAPP_DISCARD);
00467 }
00468 else if (m_switchOption == SWITCH_SAVE)
00469 {
00470 kateCfg->writeEntry(KAPP_SESSION_EXIT, KAPP_SAVE);
00471 }
00472 else
00473 {
00474 kateCfg->writeEntry(KAPP_SESSION_EXIT, KAPP_ASK);
00475 }
00476 }
00477 kateCfg->sync();
00478 }
00479
00480
00481 void KateSessionManager::saveConfig(bool saveSessions)
00482 {
00483
00484 updateSessionOptions(SO_ALL);
00485 saveSessionOptions(SO_ALL);
00486
00487
00488 if (!saveSessions)
00489 {
00490
00491 for (int i = 0; i < (int)m_sessions.count(); ++i)
00492 {
00493 const TQString &filename = m_sessions[i]->getSessionFilename();
00494 if (filename != TQString::null && TQFile::exists(filename))
00495 {
00496 TQFile::remove(filename);
00497 }
00498 }
00499
00500 m_sessions.clear();
00501 m_activeSessionId = INVALID_SESSION;
00502 }
00503
00504 if (!m_config)
00505 {
00506 m_config = new KSimpleConfig(m_configFile);
00507 }
00508 if (m_config->hasGroup(KSM_SESSIONS_LIST))
00509 {
00510 m_config->deleteGroup(KSM_SESSIONS_LIST);
00511 }
00512 m_config->setGroup(KSM_SESSIONS_LIST);
00513 m_config->writeEntry(KSM_SESSIONS_COUNT, m_sessions.count());
00514 m_config->writeEntry(KSM_LAST_SESSION_ID, m_activeSessionId);
00515 for (int i = 0; i < (int)m_sessions.count(); ++i)
00516 {
00517 saveSession(i, false, false);
00518 m_config->writeEntry(TQString("URL_%1").arg(i), m_sessions[i]->getSessionFilename());
00519 }
00520 m_config->sync();
00521 }
00522
00523
00524 const int KateSessionManager::getStartupOption()
00525 {
00526 updateSessionOptions(SO_STARTUP);
00527 return m_startupOption;
00528 }
00529
00530
00531 const int KateSessionManager::getSwitchOption()
00532 {
00533 updateSessionOptions(SO_SWITCH);
00534 return m_switchOption;
00535 }
00536
00537
00538 void KateSessionManager::setSwitchOption(int option)
00539 {
00540 m_switchOption = (option == SWITCH_DISCARD || option == SWITCH_SAVE) ? option : SWITCH_ASK;
00541 saveSessionOptions(SO_SWITCH);
00542 emit switchOptionChanged();
00543 }
00544
00545
00546 const TQString& KateSessionManager::getSessionName(int sessionId)
00547 {
00548 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00549 {
00550 return TQString::null;
00551 }
00552
00553 return m_sessions[sessionId]->getSessionName();
00554 }
00555
00556
00557 KateSession* KateSessionManager::getSessionFromId(int sessionId)
00558 {
00559 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00560 {
00561 return NULL;
00562 }
00563
00564 return m_sessions[sessionId];
00565 }
00566
00567
00568 int KateSessionManager::getSessionIdFromName(const TQString &name)
00569 {
00570 if (name.isEmpty())
00571 return INVALID_SESSION;
00572
00573 for (int i = 0; i < (int)m_sessions.count(); ++i)
00574 {
00575 if (m_sessions[i]->getSessionName() == name)
00576 return i;
00577 }
00578
00579 return INVALID_SESSION;
00580 }
00581
00582
00583 bool KateSessionManager::activateSession(int sessionId, bool saveCurr)
00584 {
00585 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00586 {
00587 return false;
00588 }
00589
00590 if (sessionId == m_activeSessionId)
00591 {
00592 return true;
00593 }
00594
00595 int oldSessionId = m_activeSessionId;
00596 if (m_activeSessionId != INVALID_SESSION)
00597 {
00598
00599 if (KateApp::self()->activeMainWindow())
00600 {
00601
00602 if (!KateApp::self()->activeMainWindow()->queryClose_internal())
00603 return false;
00604 }
00605 if (saveCurr)
00606 {
00607 saveSession(m_activeSessionId, true);
00608 }
00609 else
00610 {
00611
00612 const TQString &filename = m_sessions[m_activeSessionId]->getSessionFilename();
00613 if (filename != TQString::null && TQFile::exists(filename))
00614 {
00615 TQFile::remove(filename);
00616 }
00617 m_sessions.remove(m_activeSessionId);
00618 m_activeSessionId = INVALID_SESSION;
00619 if (sessionId > oldSessionId)
00620 {
00621 --sessionId;
00622 }
00623 emit sessionDeleted(oldSessionId);
00624 oldSessionId = INVALID_SESSION;
00625 }
00626 }
00627
00628 m_activeSessionId = sessionId;
00629 m_sessions[sessionId]->activate();
00630 m_lastSessionId = INVALID_SESSION;
00631 emit sessionActivated(m_activeSessionId, oldSessionId);
00632 return true;
00633 }
00634
00635
00636 int KateSessionManager::newSession(const TQString &sessionName, bool saveCurr)
00637 {
00638 m_sessions.append(new KateSession(*this, sessionName, TQString::null));
00639 int newSessionId = m_sessions.count() - 1;
00640 emit sessionCreated(newSessionId);
00641 activateSession(newSessionId, saveCurr);
00642 return newSessionId;
00643 }
00644
00645
00646 int KateSessionManager::cloneSession(int sessionId, const TQString &sessionName, bool activate, bool deleteCurr)
00647 {
00648 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00649 {
00650 return INVALID_SESSION;
00651 }
00652
00653 m_sessions.append(new KateSession(*m_sessions[sessionId], sessionName));
00654 int newSessionId = m_sessions.count() - 1;
00655 emit sessionCreated(newSessionId);
00656
00657
00658
00659 saveSession(newSessionId, sessionId == m_activeSessionId);
00660 if (sessionId == m_activeSessionId)
00661 {
00662 reloadActiveSession();
00663 }
00664
00665 if (activate)
00666 {
00667 activateSession(newSessionId, m_activeSessionId != INVALID_SESSION && !deleteCurr);
00668 }
00669 return newSessionId;
00670 }
00671
00672
00673 bool KateSessionManager::restoreLastSession()
00674 {
00675 if (m_activeSessionId != INVALID_SESSION)
00676 {
00677 return false;
00678 }
00679 return activateSession(m_lastSessionId, false);
00680 }
00681
00682
00683 void KateSessionManager::saveSession(int sessionId, bool saveGUIInfo, bool setReadOnly)
00684 {
00685 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00686 {
00687 return;
00688 }
00689 m_sessions[sessionId]->save(saveGUIInfo, setReadOnly);
00690 emit sessionSaved(sessionId);
00691 }
00692
00693
00694 bool KateSessionManager::deleteSession(int sessionId, int actSessId)
00695 {
00696 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00697 {
00698 return false;
00699 }
00700
00701
00702 const TQString &filename = m_sessions[sessionId]->getSessionFilename();
00703 if (filename != TQString::null && TQFile::exists(filename))
00704 {
00705 TQFile::remove(filename);
00706 }
00707
00708 m_sessions.remove(sessionId);
00709 if (m_activeSessionId > sessionId)
00710 {
00711 --m_activeSessionId;
00712 }
00713 else if (m_activeSessionId == sessionId)
00714 {
00715 m_activeSessionId = INVALID_SESSION;
00716 }
00717 emit sessionDeleted(sessionId);
00718 if (m_activeSessionId == INVALID_SESSION)
00719 {
00720 if (m_sessions.count() > 0 && actSessId >= 0 && actSessId < (int)m_sessions.count())
00721 {
00722 activateSession(actSessId, false);
00723 }
00724 else
00725 {
00726 newSession();
00727 }
00728 }
00729
00730 return true;
00731 }
00732
00733
00734 void KateSessionManager::swapSessionsPosition(int sessionId1, int sessionId2)
00735 {
00736 if (sessionId1 < 0 || sessionId1 >= (int)m_sessions.count() ||
00737 sessionId2 < 0 || sessionId2 >= (int)m_sessions.count() ||
00738 sessionId1 == sessionId2)
00739 {
00740 return;
00741 }
00742
00743 int idxMin, idxMax;
00744 if (sessionId1 < sessionId2)
00745 {
00746 idxMin = sessionId1;
00747 idxMax = sessionId2;
00748 }
00749 else
00750 {
00751 idxMin = sessionId2;
00752 idxMax = sessionId1;
00753 }
00754
00755 KateSession *sessMax = m_sessions.take(idxMax);
00756 KateSession *sessMin = m_sessions.take(idxMin);
00757 m_sessions.insert(idxMin, sessMax);
00758 m_sessions.insert(idxMax, sessMin);
00759 if (m_activeSessionId == sessionId1)
00760 {
00761 m_activeSessionId = sessionId2;
00762 }
00763 else if (m_activeSessionId == sessionId2)
00764 {
00765 m_activeSessionId = sessionId1;
00766 }
00767
00768 emit sessionsSwapped(idxMin, idxMax);
00769 }
00770
00771
00772 void KateSessionManager::moveSessionForward(int sessionId)
00773 {
00774 if (sessionId < 0 || sessionId >= ((int)m_sessions.count() - 1))
00775 {
00776 return;
00777 }
00778
00779 swapSessionsPosition(sessionId, sessionId + 1);
00780 }
00781
00782
00783 void KateSessionManager::moveSessionBackward(int sessionId)
00784 {
00785 if (sessionId < 1 || sessionId >= (int)m_sessions.count())
00786 {
00787 return;
00788 }
00789
00790 swapSessionsPosition(sessionId, sessionId - 1);
00791 }
00792
00793
00794 void KateSessionManager::renameSession(int sessionId, const TQString &newSessionName)
00795 {
00796 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00797 {
00798 return;
00799 }
00800
00801 m_sessions[sessionId]->setSessionName(newSessionName);
00802 emit sessionRenamed(sessionId);
00803 }
00804
00805
00806 void KateSessionManager::setSessionReadOnlyStatus(int sessionId, bool readOnly)
00807 {
00808 if (sessionId < 0 || sessionId >= (int)m_sessions.count())
00809 {
00810 return;
00811 }
00812
00813 m_sessions[sessionId]->setReadOnly(readOnly);
00814
00815 saveSession(sessionId, sessionId == m_activeSessionId, true);
00816 }
00817
00818
00819
00820
00821
00822 KateSessionChooser::KateSessionChooser(TQWidget *parent)
00823 : KDialogBase(parent, "", true, i18n("Session Chooser"),
00824 KDialogBase::User1 | KDialogBase::User2 | KDialogBase::User3, KDialogBase::User2,
00825 true, KStdGuiItem::quit(), KGuiItem(i18n("Open Session"), "document-open"),
00826 KGuiItem(i18n("New Session"), "document-new")), m_listview(NULL)
00827 {
00828 TQHBox *page = new TQHBox(this);
00829 page->setMinimumSize(400, 200);
00830 setMainWidget(page);
00831
00832 TQHBox *hb = new TQHBox(page);
00833 hb->setSpacing(KDialog::spacingHint());
00834
00835 TQLabel *label = new TQLabel(hb);
00836 label->setPixmap(UserIcon("sessionchooser"));
00837 label->setFrameStyle (TQFrame::Panel | TQFrame::Sunken);
00838
00839 TQVBox *vb = new TQVBox(hb);
00840 vb->setSpacing (KDialog::spacingHint());
00841
00842 m_listview = new TDEListView(vb);
00843 m_listview->addColumn(i18n("Session Name"));
00844 m_listview->addColumn(i18n("Open Documents"));
00845 m_listview->setSelectionMode(TQListView::Single);
00846 m_listview->setAllColumnsShowFocus(true);
00847 m_listview->setSorting(-1);
00848 m_listview->setResizeMode(TQListView::LastColumn);
00849
00850 connect (m_listview, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(slotSelectionChanged()));
00851 connect (m_listview, TQT_SIGNAL(executed(TQListViewItem*)), this, TQT_SLOT(slotUser2()));
00852
00853 TQPtrList<KateSession> &sessions = KateSessionManager::self()->getSessionsList();
00854 for (int idx = sessions.count()-1; idx >= 0; --idx)
00855 {
00856 new KateSessionChooserItem(m_listview, sessions[idx]->getSessionName(),
00857 TQString("%1").arg(sessions[idx]->getDocCount()), idx);
00858 }
00859
00860 setResult(RESULT_NO_OP);
00861 slotSelectionChanged();
00862 }
00863
00864
00865 int KateSessionChooser::getSelectedSessionId()
00866 {
00867 KateSessionChooserItem *selectedItem = dynamic_cast<KateSessionChooserItem*>(m_listview->selectedItem());
00868 if (!selectedItem)
00869 return KateSessionManager::INVALID_SESSION;
00870
00871 return selectedItem->getSessionId();
00872 }
00873
00874
00875 void KateSessionChooser::slotUser1()
00876 {
00877 done(RESULT_QUIT_KATE);
00878 }
00879
00880
00881 void KateSessionChooser::slotUser2()
00882 {
00883 done(RESULT_OPEN_EXISTING);
00884 }
00885
00886
00887 void KateSessionChooser::slotUser3()
00888 {
00889 done(RESULT_OPEN_NEW);
00890 }
00891
00892
00893 void KateSessionChooser::slotSelectionChanged()
00894 {
00895 enableButton(KDialogBase::User2, m_listview->selectedItem());
00896 }
00897
00898
00899 #include "katesession.moc"
00900
00901