summaryrefslogtreecommitdiffstats
path: root/kate/app/katesessionpanel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kate/app/katesessionpanel.cpp')
-rw-r--r--kate/app/katesessionpanel.cpp771
1 files changed, 771 insertions, 0 deletions
diff --git a/kate/app/katesessionpanel.cpp b/kate/app/katesessionpanel.cpp
new file mode 100644
index 000000000..0cf7e235b
--- /dev/null
+++ b/kate/app/katesessionpanel.cpp
@@ -0,0 +1,771 @@
+/* This file is part of the TDE project
+ Copyright (C) 2015-2016 Michele Calgaro <micheleDOTcalgaro__AT__yahooDOTit>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2 as published by the Free Software Foundation.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public License
+ along with this library; see the file COPYING.LIB. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+*/
+
+#include "katesessionpanel.h"
+#include "katesessionpanel.moc"
+
+#include "kateapp.h"
+#include "katemainwindow.h"
+#include "kateviewmanager.h"
+#include "katesession.h"
+
+#include <kiconloader.h>
+#include <tdelocale.h>
+#include <tdemessagebox.h>
+#include <tqlistview.h>
+#include <tqlabel.h>
+
+
+namespace
+{
+ const char *KS_UNNAMED = "Unnamed";
+};
+
+
+//BEGIN KateSessionNameChooser
+//-------------------------------------------
+KateSessionNameChooser::KateSessionNameChooser(TQWidget *parent, bool showSwitchTo)
+ : KDialogBase(parent, "", true, i18n("Session Name Chooser"), KDialogBase::User1 | KDialogBase::User2,
+ KDialogBase::User2, true, KStdGuiItem::cancel(), KGuiItem(i18n("Continue"), "document-new")),
+ m_showSwitchTo(showSwitchTo)
+{
+ TQHBox *page = new TQHBox(this);
+ //page->setMinimumSize(300, 100);
+ setMainWidget(page);
+
+ TQVBox *vb = new TQVBox(page);
+ vb->setSpacing(KDialog::spacingHint());
+
+ TQLabel *label = new TQLabel(vb);
+ label->setText("Please type the new session name:");
+
+ m_sessionNameLE = new TQLineEdit(vb);
+ m_sessionNameLE->setText(i18n(KS_UNNAMED));
+ m_sessionNameLE->setFocus();
+
+ if (m_showSwitchTo)
+ {
+ m_activateCB = new TQCheckBox(i18n("Switch to the new session"), vb, NULL);
+ m_activateCB->setChecked(true);
+ }
+
+ connect(m_sessionNameLE, TQT_SIGNAL(textChanged(const TQString&)), this, TQT_SLOT(slotTextChanged()));
+ slotTextChanged(); // update button status
+}
+
+//-------------------------------------------
+TQString KateSessionNameChooser::getSessionName()
+{
+ return m_sessionNameLE->text();
+}
+
+//-------------------------------------------
+bool KateSessionNameChooser::getActivateFlag()
+{
+ if (m_showSwitchTo)
+ {
+ return m_activateCB->isChecked();
+ }
+ return false;
+}
+
+//-------------------------------------------
+void KateSessionNameChooser::slotUser1()
+{
+ reject();
+}
+
+//-------------------------------------------
+void KateSessionNameChooser::slotUser2()
+{
+ accept();
+}
+
+//-------------------------------------------
+void KateSessionNameChooser::slotTextChanged()
+{
+ enableButton(KDialogBase::User2, !m_sessionNameLE->text().isEmpty());
+}
+//END KateSessionNameChooser
+
+
+//BEGIN KateSessionPanelToolBarParent
+void KateSessionPanelToolBarParent::setToolBar(TDEToolBar *tbar)
+{
+ m_tbar = tbar;
+}
+
+//-------------------------------------------
+void KateSessionPanelToolBarParent::resizeEvent (TQResizeEvent*)
+{
+ if (m_tbar)
+ {
+ setMinimumHeight(m_tbar->sizeHint().height());
+ m_tbar->resize(width(),height());
+ }
+}
+//END KateSessionPanelToolBarParent
+
+
+//BEGIN KateSessionPanel
+//-------------------------------------------
+KateSessionPanel::KateSessionPanel(KateMainWindow *mainWindow, KateViewManager *viewManager,
+ TQWidget *parent, const char *name)
+ : TQVBox(parent, name), m_sessionManager(KateSessionManager::self()),
+ m_actionCollection(new TDEActionCollection(this)), m_columnName(-1), m_columnPixmap(-1)
+{
+ // Toolbar
+ setup_toolbar();
+
+ // Listview
+ m_listview = new TDEListView(this);
+ m_listview->header()->hide();
+ m_columnName = m_listview->addColumn("Session name");
+ m_columnPixmap = m_listview->addColumn("Pixmap", 24);
+ m_listview->addColumn("Dummy", 1); // Dummy column, only for nice resizing
+ m_listview->header()->setResizeEnabled(false, m_columnPixmap);
+ m_listview->setColumnAlignment(m_columnPixmap, TQt::AlignCenter);
+ m_listview->setMinimumWidth(m_listview->sizeHint().width());
+ m_listview->setSorting(-1);
+ m_listview->setResizeMode(TQListView::LastColumn);
+ //m_listview->setRootIsDecorated(true); // FIXME disabled until doc list software is developed
+
+
+ connect(m_listview, TQT_SIGNAL(selectionChanged()),
+ this, TQT_SLOT(slotSelectionChanged()));
+ connect(m_listview, TQT_SIGNAL(executed(TQListViewItem*)),
+ this, TQT_SLOT(slotItemExecuted(TQListViewItem*)));
+ connect(m_listview, TQT_SIGNAL(returnPressed(TQListViewItem*)),
+ this, TQT_SLOT(slotItemExecuted(TQListViewItem*)));
+ connect(KateApp::self(), TQT_SIGNAL(optionsChanged()),
+ this, TQT_SLOT(slotSelectionChanged()));
+ connect(m_sessionManager, TQT_SIGNAL(switchOptionChanged()),
+ this, TQT_SLOT(slotSelectionChanged()));
+ connect(m_sessionManager, TQT_SIGNAL(sessionActivated(int, int)),
+ this, TQT_SLOT(slotSessionActivated(int, int)));
+ connect(m_sessionManager, TQT_SIGNAL(sessionCreated(int)),
+ this, TQT_SLOT(slotSessionCreated(int)));
+ connect(m_sessionManager, TQT_SIGNAL(sessionDeleted(int)),
+ this, TQT_SLOT(slotSessionDeleted(int)));
+ connect(m_sessionManager, TQT_SIGNAL(sessionsSwapped(int, int)),
+ this, TQT_SLOT(slotSessionsSwapped(int, int)));
+ connect(m_sessionManager, TQT_SIGNAL(sessionRenamed(int)),
+ this, TQT_SLOT(slotSessionRenamed(int)));
+ connect(m_listview, TQT_SIGNAL(itemRenamed(TQListViewItem*)),
+ this, TQT_SLOT(slotLVSessionRenamed(TQListViewItem*)));
+
+ TQPtrList<KateSession>& sessions = m_sessionManager->getSessionsList();
+ for (int idx = sessions.count() - 1; idx >= 0; --idx)
+ {
+ new KateSessionPanelItem(m_listview, sessions[idx]->getSessionName(), idx);
+ if (idx == m_sessionManager->getActiveSessionId())
+ {
+ m_listview->setSelected(m_listview->firstChild(), true);
+ m_listview->firstChild()->setPixmap(m_columnPixmap, SmallIcon("ok"));
+ }
+ }
+
+}
+
+//-------------------------------------------
+void KateSessionPanel::setup_toolbar()
+{
+ // Toolbar widget and frame
+ KateSessionPanelToolBarParent *tbarParent = new KateSessionPanelToolBarParent(this);
+ m_toolbar = new TDEToolBar(tbarParent, "Kate Session Panel Toolbar", true);
+ tbarParent->setToolBar(m_toolbar);
+ m_toolbar->setMovingEnabled(false);
+ m_toolbar->setFlat(true);
+ m_toolbar->setIconText(TDEToolBar::IconOnly);
+ m_toolbar->setIconSize(16);
+ m_toolbar->setEnableContextMenu(false);
+
+ // Toolbar actions
+ TDEAction *a;
+
+ a = new TDEAction(i18n("New"), SmallIcon("list-add"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotNewSession()), m_actionCollection, "session_new");
+ a->setWhatsThis(i18n("Create a new session and switch to it."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Save"), SmallIcon("document-save"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotSaveSession()), m_actionCollection, "session_save");
+ a->setWhatsThis(i18n("Save the selected session."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Save as..."), SmallIcon("document-save-as"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotSaveSessionAs()), m_actionCollection, "session_save_as");
+ a->setWhatsThis(i18n("Save an unsaved session with a new name or clone an already saved session "
+ "into a new session."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Rename"), SmallIcon("edit_user"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotRenameSession()), m_actionCollection, "session_rename");
+ a->setWhatsThis(i18n("Rename the selected session."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Delete"), SmallIcon("edit-delete"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotDeleteSession()), m_actionCollection, "session_delete");
+ a->setWhatsThis(i18n("Delete the selected session."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Reload"), SmallIcon("reload"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotReloadSession()), m_actionCollection, "session_reload");
+ a->setWhatsThis(i18n("Reload the last saved state of the selected session."));
+ a->plug(m_toolbar);
+
+ m_toolbar->insertLineSeparator();
+
+ a = new TDEAction(i18n("Activate"), SmallIcon("forward"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotActivateSession()), m_actionCollection, "session_activate");
+ a->setWhatsThis(i18n("Activate the selected session."));
+ a->plug(m_toolbar);
+
+ TDEToggleAction *tglA = new TDEToggleAction(i18n("Toggle read only"), SmallIcon("encrypted"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotSessionToggleReadOnly()), m_actionCollection, "session_toggle_read_only");
+ tglA->setWhatsThis(i18n("Toggle read only status for the selected session.<p>"
+ "In a read only session, you can work as usual but the list of documents in the session "
+ "will not be saved when you exit Kate or switch to another session.<p>"
+ "You can use this option to create template sessions that you wish to keep unchanged over time."));
+ tglA->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Move Up"), SmallIcon("go-up"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotSessionMoveUp()), m_actionCollection, "session_move_up");
+ a->setWhatsThis(i18n("Move up the selected session."));
+ a->plug(m_toolbar);
+
+ a = new TDEAction(i18n("Move Down"), SmallIcon("go-down"), 0,
+ TQT_TQOBJECT(this), TQT_SLOT(slotSessionMoveDown()), m_actionCollection, "session_move_down");
+ a->setWhatsThis(i18n("Move down the selected session."));
+ a->plug(m_toolbar);
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotNewSession()
+{
+ KateSessionNameChooser *nameChooser = new KateSessionNameChooser(this, false);
+ int result = nameChooser->exec();
+ if (result == TQDialog::Accepted)
+ {
+ int res = handleSessionSwitch();
+ if (res == KMessageBox::Cancel)
+ {
+ return;
+ }
+ else
+ {
+ m_sessionManager->newSession(nameChooser->getSessionName(), res == KMessageBox::Yes);
+ }
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSaveSession()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ int sessId = sessionItem->getSessionId();
+ const KateSession *ks = m_sessionManager->getSessionFromId(sessId);
+ if (!ks)
+ {
+ return;
+ }
+
+ if (ks->isStillVolatile())
+ {
+ // Session has never been saved before. Ask user for a session name first
+ slotSaveSessionAs();
+ }
+ else
+ {
+ m_sessionManager->saveSession(sessId);
+ slotSelectionChanged(); // Update the toolbar button status
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSaveSessionAs()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+ int sessId = sessionItem->getSessionId();
+ KateSession *ks = m_sessionManager->getSessionFromId(sessId);
+ if (!ks)
+ {
+ return;
+ }
+
+ // If the session was never saved or named before, the session will be saved with a new name.
+ // Otherwise it will be cloned into a new session.
+ bool cloneSession = !ks->isStillVolatile();
+ // Get new session name
+ KateSessionNameChooser *nameChooser = new KateSessionNameChooser(this, cloneSession);
+ int result = nameChooser->exec();
+ if (result == TQDialog::Accepted)
+ {
+ if (!cloneSession)
+ {
+ // Save unsaved session
+ m_sessionManager->renameSession(sessId, nameChooser->getSessionName());
+ m_sessionManager->saveSession(sessId);
+ }
+ else
+ {
+ // Clone session
+ bool activate = nameChooser->getActivateFlag();
+ int activeSessionId = m_sessionManager->getActiveSessionId();
+ int res = KMessageBox::Yes;
+ if (activate && sessId != activeSessionId)
+ {
+ // Cloning another session and switching to it at the same time,
+ // handle session switch correctly
+ res = handleSessionSwitch();
+ if (res == KMessageBox::Cancel)
+ {
+ return;
+ }
+ }
+ m_sessionManager->cloneSession(sessId, nameChooser->getSessionName(), activate, res == KMessageBox::No);
+ }
+ }
+
+ slotSelectionChanged(); // Update the toolbar button status
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotRenameSession()
+{
+ TQListViewItem *sessionItem = m_listview->selectedItem();
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ m_listview->rename(m_listview->selectedItem(), m_columnName);
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotDeleteSession()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ int result = KMessageBox::warningContinueCancel(this,
+ i18n("Do you really want to delete the session \"%1\"?").arg(sessionItem->text(0)),
+ i18n("Delete session"), KStdGuiItem::del());
+ if (result == KMessageBox::Continue)
+ {
+ int sessionId = sessionItem->getSessionId();
+ if (sessionId == m_sessionManager->getActiveSessionId())
+ {
+ // First check if all documents can be closed safely
+ if (KateApp::self()->activeMainWindow())
+ {
+ if (!KateApp::self()->activeMainWindow()->queryClose_internal())
+ return;
+ }
+ }
+ //FIXME add options to let user decide what to do when deleting the current session
+ //(open previous/next session, create new empty session)
+ m_sessionManager->deleteSession(sessionId, KateSessionManager::INVALID_SESSION);
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotReloadSession()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+ int sessId = sessionItem->getSessionId();
+ if (sessId != m_sessionManager->getActiveSessionId())
+ {
+ return;
+ }
+
+ // Restore active session to the last saved state
+ m_sessionManager->reloadActiveSession();
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotActivateSession()
+{
+ KateSessionPanelItem *newSessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!newSessionItem)
+ {
+ return;
+ }
+
+ int currSessionId = m_sessionManager->getActiveSessionId();
+ int newSessionId = newSessionItem->getSessionId();
+ if (newSessionId != currSessionId)
+ {
+ int res = handleSessionSwitch();
+ if (res == KMessageBox::Cancel)
+ {
+ return;
+ }
+ else
+ {
+ m_sessionManager->activateSession(newSessionId, res == KMessageBox::Yes);
+ }
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionToggleReadOnly()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ const KateSession *ks(NULL);
+ if (sessionItem)
+ {
+ ks = m_sessionManager->getSessionFromId(sessionItem->getSessionId());
+ }
+ if (!sessionItem || !ks)
+ {
+ return;
+ }
+
+ m_sessionManager->setSessionReadOnlyStatus(sessionItem->getSessionId(), !ks->isReadOnly());
+ slotSelectionChanged(); // Update the toolbar button status
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionMoveUp()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ m_sessionManager->moveSessionBackward(sessionItem->getSessionId());
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionMoveDown()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ m_sessionManager->moveSessionForward(sessionItem->getSessionId());
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotItemExecuted(TQListViewItem *item)
+{
+ if (!item)
+ {
+ return;
+ }
+
+ // First level items are sessions. Executing one, will switch to that session.
+ // This is only allow when the 'Activate' toolbar button is enabled
+ if (!item->parent() &&
+ m_actionCollection->action("session_activate")->isEnabled())
+ {
+ slotActivateSession();
+ return;
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSelectionChanged()
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(m_listview->selectedItem());
+ const KateSession *ks(NULL);
+ if (sessionItem)
+ {
+ ks = m_sessionManager->getSessionFromId(sessionItem->getSessionId());
+ }
+
+ TDEToggleAction *readOnlyAction = dynamic_cast<TDEToggleAction*>(
+ m_actionCollection->action("session_toggle_read_only"));
+ if (!sessionItem || !ks ||
+ m_sessionManager->getSwitchOption() == KateSessionManager::SWITCH_DISCARD)
+ {
+ m_actionCollection->action("session_save")->setEnabled(false);
+ m_actionCollection->action("session_save_as")->setEnabled(false);
+ m_actionCollection->action("session_rename")->setEnabled(false);
+ m_actionCollection->action("session_delete")->setEnabled(false);
+ m_actionCollection->action("session_reload")->setEnabled(false);
+ m_actionCollection->action("session_activate")->setEnabled(false);
+ m_actionCollection->action("session_move_up")->setEnabled(false);
+ m_actionCollection->action("session_move_down")->setEnabled(false);
+ readOnlyAction->setEnabled(false);
+ readOnlyAction->setChecked(false);
+ }
+ else
+ {
+ if (ks->isReadOnly())
+ {
+ // Read only sessions can not be saved or renamed
+ m_actionCollection->action("session_save")->setEnabled(false);
+ m_actionCollection->action("session_rename")->setEnabled(false);
+ m_actionCollection->action("session_delete")->setEnabled(false);
+ }
+ else
+ {
+ m_actionCollection->action("session_save")->setEnabled(true);
+ m_actionCollection->action("session_rename")->setEnabled(true);
+ m_actionCollection->action("session_delete")->setEnabled(true);
+ }
+ if (ks->getSessionFilename().isEmpty())
+ {
+ // Unstored sessions can not be made readonly
+ readOnlyAction->setEnabled(false);
+ readOnlyAction->setChecked(false);
+ }
+ else
+ {
+ readOnlyAction->setEnabled(true);
+ readOnlyAction->setChecked(ks->isReadOnly());
+ }
+ int sessId = sessionItem->getSessionId();
+ int activeSessId = m_sessionManager->getActiveSessionId();
+ m_actionCollection->action("session_save_as")->setEnabled(true);
+ m_actionCollection->action("session_reload")->setEnabled(sessId == activeSessId);
+ m_actionCollection->action("session_activate")->setEnabled(sessId != activeSessId);
+ m_actionCollection->action("session_move_up")->setEnabled(sessId > 0);
+ m_actionCollection->action("session_move_down")->setEnabled(sessId < (m_sessionManager->getSessionCount() - 1));
+ }
+
+ emit selectionChanged();
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionActivated(int newSessionId, int oldSessionId)
+{
+ // Move the active session marker
+ TQListViewItem *item = NULL;
+ if (oldSessionId != KateSessionManager::INVALID_SESSION)
+ {
+ // Old volatile sessions may have already been deleted.
+ // Remove the marker only for valid sessions.
+ item = m_listview->firstChild();
+ for (int idx = 0; idx < oldSessionId; ++idx)
+ {
+ item = item->nextSibling();
+ }
+ item->setPixmap(m_columnPixmap, TQPixmap());
+ }
+
+ item = m_listview->firstChild();
+ for (int idx = 0; idx < newSessionId; ++idx)
+ {
+ item = item->nextSibling();
+ }
+ item->setPixmap(m_columnPixmap, SmallIcon("ok"));
+ m_listview->setSelected(item, true);
+ slotSelectionChanged(); // Update the toolbar button status
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionCreated(int sessionId)
+{
+ TQPtrList<KateSession>& sessions = m_sessionManager->getSessionsList();
+ new KateSessionPanelItem(m_listview, m_listview->lastItem(), sessions[sessionId]->getSessionName(),
+ sessionId);
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionDeleted(int sessionId)
+{
+ // delete item from listview
+ TQListViewItem *item = m_listview->firstChild();
+ int idx = 0;
+ for (; idx < sessionId; ++idx)
+ {
+ item = item->nextSibling();
+ }
+ TQListViewItem *nextItem = item->nextSibling();
+ delete item;
+ // update session id of all following items
+ item = nextItem;
+ while (item)
+ {
+ dynamic_cast<KateSessionPanelItem*>(item)->setSessionId(idx++);
+ item = item->nextSibling();
+ }
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionsSwapped(int sessionIdMin, int sessionIdMax)
+{
+ if (sessionIdMin == sessionIdMax)
+ {
+ return;
+ }
+
+ if (sessionIdMin > sessionIdMax)
+ {
+ // this is not executed when the slot is connected to m_sessionManager's
+ // sessionsSwapped(int, int) signal
+ int tmp = sessionIdMin;
+ sessionIdMin = sessionIdMax;
+ sessionIdMax = tmp;
+ }
+
+ TQListViewItem *selectedItem = m_listview->selectedItem();
+
+ // Looks for the previous siblings of the two items
+ TQListViewItem *siblMin(NULL), *siblMax(NULL), *itemMin(NULL), *itemMax(NULL);
+ TQListViewItem *currItem = m_listview->firstChild();
+ TQListViewItem *nextItem(NULL);
+ while (currItem)
+ {
+ nextItem = currItem->nextSibling();
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(nextItem);
+ if (sessionItem->getSessionId() == sessionIdMin)
+ {
+ siblMin = currItem;
+ itemMin = nextItem;
+ }
+ else if (sessionItem->getSessionId() == sessionIdMax)
+ {
+ siblMax = currItem;
+ itemMax = nextItem;
+ break;
+ }
+ currItem = nextItem;
+ }
+ if (!itemMin)
+ {
+ // The sessionIdMin item was the first of the list
+ itemMin = m_listview->firstChild();
+ }
+ // Remove the two items and place them in their new positions
+ m_listview->takeItem(itemMax);
+ m_listview->takeItem(itemMin);
+ m_listview->insertItem(itemMin);
+ m_listview->insertItem(itemMax);
+ itemMax->moveItem(siblMin);
+ if (siblMax != itemMin)
+ {
+ itemMin->moveItem(siblMax);
+ }
+ else
+ {
+ itemMin->moveItem(itemMax);
+ }
+ // Update item's session id
+ (dynamic_cast<KateSessionPanelItem*>(itemMax))->setSessionId(sessionIdMin);
+ (dynamic_cast<KateSessionPanelItem*>(itemMin))->setSessionId(sessionIdMax);
+
+ m_listview->setSelected(selectedItem, true);
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotSessionRenamed(int sessionId)
+{
+ TQListViewItem *item = m_listview->firstChild();
+ for (int idx = 0; idx < sessionId; ++idx)
+ {
+ item = item->nextSibling();
+ }
+ item->setText(m_columnName, m_sessionManager->getSessionName(sessionId));
+}
+
+//-------------------------------------------
+void KateSessionPanel::slotLVSessionRenamed(TQListViewItem *item)
+{
+ KateSessionPanelItem *sessionItem = dynamic_cast<KateSessionPanelItem*>(item);
+ if (!sessionItem)
+ {
+ return;
+ }
+
+ m_sessionManager->renameSession(sessionItem->getSessionId(), sessionItem->text(m_columnName));
+}
+
+//-------------------------------------------
+int KateSessionPanel::handleSessionSwitch()
+{
+ const KateSession *ks = m_sessionManager->getActiveSession();
+ int switchOption = m_sessionManager->getSwitchOption();
+ if (!ks || switchOption == KateSessionManager::SWITCH_DISCARD)
+ {
+ return KMessageBox::No;
+ }
+
+ if (switchOption == KateSessionManager::SWITCH_ASK)
+ {
+ KDialogBase *dlg = new KDialogBase(i18n("Save Session"),
+ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
+ KDialogBase::Cancel, KDialogBase::Cancel, NULL, NULL, true, false,
+ KStdGuiItem::save(), KStdGuiItem::del(), KStdGuiItem::cancel());
+ bool dontAgain = false;
+ int res = KMessageBox::createKMessageBox(dlg, TQMessageBox::Warning,
+ i18n("<p>Do you want to save the current session?<p>!!NOTE!!"
+ "<p>The session will be removed if you choose \"Delete\""), TQStringList(),
+ i18n("Do not ask again"), &dontAgain, KMessageBox::Notify);
+ if (res == KDialogBase::Cancel)
+ {
+ return KMessageBox::Cancel;
+ }
+ if (dontAgain)
+ {
+ if (res == KDialogBase::No)
+ {
+ m_sessionManager->setSwitchOption(KateSessionManager::SWITCH_DISCARD);
+ }
+ else
+ {
+ m_sessionManager->setSwitchOption(KateSessionManager::SWITCH_SAVE);
+ }
+ }
+ if (res == KDialogBase::No)
+ {
+ return KMessageBox::No;
+ }
+ }
+
+ // At this point the session needs to be saved.
+ // Make sure to handle volatile sessions correctly.
+ if (ks->isStillVolatile())
+ {
+ KateSessionNameChooser *nameChooser = new KateSessionNameChooser(this, false);
+ int res = nameChooser->exec();
+ if (res == TQDialog::Accepted)
+ {
+ m_sessionManager->renameSession(m_sessionManager->getActiveSessionId(), nameChooser->getSessionName());
+ }
+ else
+ {
+ return KMessageBox::Cancel;
+ }
+ }
+
+ return KMessageBox::Yes;
+}
+//END KateSessionPanel