Populated session panel. Now able to switch session within the new panel.

*** NOTE *** In this commit both the old and new session managers are active,
therefore funny things occasionally happen. Then won't be the case from the
next commit since the old session manager will be disabled.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/2/head
Michele Calgaro 9 years ago
parent f0f642f6b2
commit de91a161b1

@ -75,7 +75,8 @@ KateApp::KateApp (TDECmdLineArgs *args)
m_pluginManager = new KatePluginManager (TQT_TQOBJECT(this)); m_pluginManager = new KatePluginManager (TQT_TQOBJECT(this));
// session manager up // session manager up
m_sessionManager = new OldKateSessionManager (TQT_TQOBJECT(this)); m_oldSessionManager = new OldKateSessionManager (TQT_TQOBJECT(this));
m_sessionManager = KateSessionManager::self();
// application dcop interface // application dcop interface
m_obj = new KateAppDCOPIface (this); m_obj = new KateAppDCOPIface (this);
@ -105,14 +106,11 @@ KateApp::KateApp (TDECmdLineArgs *args)
KateApp::~KateApp () KateApp::~KateApp ()
{ {
// cu dcop interface delete m_obj; // cu dcop interface
delete m_obj; delete m_pluginManager; // cu plugin manager
delete m_sessionManager; // delete session manager
// cu plugin manager delete m_oldSessionManager; // delete session manager
delete m_pluginManager; delete m_docManager; // delete document manager. Do this now, or we crash
// delete this now, or we crash
delete m_docManager;
} }
KateApp *KateApp::self () KateApp *KateApp::self ()
@ -147,8 +145,7 @@ void KateApp::restoreKate ()
// activate again correct session!!! // activate again correct session!!!
sessionConfig()->setGroup("General"); sessionConfig()->setGroup("General");
TQString lastSession (sessionConfig()->readEntry ("Last Session", "default.katesession")); TQString lastSession (sessionConfig()->readEntry ("Last Session", "default.katesession"));
sessionManager()->activateSession (new OldKateSession (sessionManager(), lastSession, ""), false, false, false); oldSessionManager()->activateSession (new OldKateSession (oldSessionManager(), lastSession, ""), false, false, false);
m_docManager->restoreDocumentList (sessionConfig()); m_docManager->restoreDocumentList (sessionConfig());
Kate::Document::setOpenErrorDialogsActivated (true); Kate::Document::setOpenErrorDialogsActivated (true);
@ -170,12 +167,12 @@ bool KateApp::startupKate ()
// user specified session to open // user specified session to open
if (m_args->isSet ("start")) if (m_args->isSet ("start"))
{ {
sessionManager()->activateSession (sessionManager()->giveSession (TQString::fromLocal8Bit(m_args->getOption("start"))), false, false); oldSessionManager()->activateSession (oldSessionManager()->giveSession (TQString::fromLocal8Bit(m_args->getOption("start"))), false, false);
} }
else else
{ {
// let the user choose session if possible // let the user choose session if possible
if (!sessionManager()->chooseSession ()) if (!oldSessionManager()->chooseSession ())
{ {
// we will exit kate now, notify the rest of the world we are done // we will exit kate now, notify the rest of the world we are done
TDEStartupInfo::appStarted (startupId()); TDEStartupInfo::appStarted (startupId());
@ -272,7 +269,7 @@ void KateApp::shutdownKate (KateMainWindow *win)
if (!win->queryClose_internal()) if (!win->queryClose_internal())
return; return;
sessionManager()->saveActiveSession(true, true); oldSessionManager()->saveActiveSession(true, true);
// detach the dcopClient // detach the dcopClient
dcopClient()->detach(); dcopClient()->detach();
@ -294,7 +291,12 @@ KateDocManager *KateApp::documentManager ()
return m_docManager; return m_docManager;
} }
OldKateSessionManager *KateApp::sessionManager () OldKateSessionManager *KateApp::oldSessionManager ()
{
return m_oldSessionManager;
}
KateSessionManager* KateApp::sessionManager()
{ {
return m_sessionManager; return m_sessionManager;
} }

@ -27,6 +27,7 @@
#include <tqvaluelist.h> #include <tqvaluelist.h>
class OldKateSessionManager; class OldKateSessionManager;
class KateSessionManager;
class KateAppDCOPIface; class KateAppDCOPIface;
namespace Kate { namespace Kate {
@ -128,7 +129,8 @@ class KDE_EXPORT KateApp : public TDEApplication
* accessor to session manager * accessor to session manager
* @return session manager instance * @return session manager instance
*/ */
OldKateSessionManager *sessionManager (); OldKateSessionManager *oldSessionManager ();
KateSessionManager *sessionManager();
/** /**
* window management * window management
@ -222,7 +224,9 @@ class KDE_EXPORT KateApp : public TDEApplication
/** /**
* session manager * session manager
*/ */
OldKateSessionManager *m_sessionManager; OldKateSessionManager *m_oldSessionManager;
KateSessionManager *m_sessionManager;
/** /**
* known main windows * known main windows

@ -91,14 +91,14 @@ bool KateAppDCOPIface::openInput (TQString text)
bool KateAppDCOPIface::activateSession (TQString session) bool KateAppDCOPIface::activateSession (TQString session)
{ {
m_app->sessionManager()->activateSession (m_app->sessionManager()->giveSession (session)); m_app->oldSessionManager()->activateSession (m_app->oldSessionManager()->giveSession (session));
return true; return true;
} }
const TQString & KateAppDCOPIface::session() const const TQString & KateAppDCOPIface::session() const
{ {
return m_app->sessionManager()->activeSession()->sessionName(); return m_app->oldSessionManager()->activeSession()->sessionName();
} }
// kate: space-indent on; indent-width 2; replace-tabs on; // kate: space-indent on; indent-width 2; replace-tabs on;

@ -370,7 +370,7 @@ bool KateMainWindow::queryClose()
// and save docs if we really close down ! // and save docs if we really close down !
if ( queryClose_internal () ) if ( queryClose_internal () )
{ {
KateApp::self()->sessionManager()->saveActiveSession(true, true); KateApp::self()->oldSessionManager()->saveActiveSession(true, true);
// detach the dcopClient // detach the dcopClient
KateApp::self()->dcopClient()->detach(); KateApp::self()->dcopClient()->detach();
@ -824,7 +824,7 @@ void KateMainWindow::updateCaption (Kate::Document *doc)
c = m_viewManager->activeView()->getDoc()->url().prettyURL(); c = m_viewManager->activeView()->getDoc()->url().prettyURL();
} }
TQString sessName = KateApp::self()->sessionManager()->activeSession()->sessionName(); TQString sessName = KateApp::self()->oldSessionManager()->activeSession()->sessionName();
if ( !sessName.isEmpty() ) if ( !sessName.isEmpty() )
sessName = TQString("%1: ").arg( sessName ); sessName = TQString("%1: ").arg( sessName );
@ -858,7 +858,7 @@ void KateMainWindow::saveGlobalProperties( TDEConfig* sessionConfig )
KateDocManager::self()->saveDocumentList (sessionConfig); KateDocManager::self()->saveDocumentList (sessionConfig);
sessionConfig->setGroup("General"); sessionConfig->setGroup("General");
sessionConfig->writeEntry ("Last Session", KateApp::self()->sessionManager()->activeSession()->sessionFileRelative()); sessionConfig->writeEntry ("Last Session", KateApp::self()->oldSessionManager()->activeSession()->sessionFileRelative());
} }
// kate: space-indent on; indent-width 2; replace-tabs on; // kate: space-indent on; indent-width 2; replace-tabs on;

@ -48,6 +48,9 @@
#include <unistd.h> #include <unistd.h>
#include <time.h> #include <time.h>
// FIXME general: need to keep doc list and current session's m_documents in synchro
// all the time (doc open, doc closed, doc renamed)
// String constants // String constants
namespace namespace
{ {
@ -65,6 +68,7 @@ namespace
const char *KSM_DIR = "kate/sessions"; const char *KSM_DIR = "kate/sessions";
const char *KSM_FILE = "sessions.list"; const char *KSM_FILE = "sessions.list";
const char *KSM_SESSIONS_COUNT = "Sessions count"; const char *KSM_SESSIONS_COUNT = "Sessions count";
const char *KSM_ACTIVE_SESSION_ID = "Active session id";
const char *KSM_SESSIONS_LIST = "Sessions list"; const char *KSM_SESSIONS_LIST = "Sessions list";
} }
@ -125,10 +129,7 @@ KateSession::KateSession(const TQString &sessionName, const TQString &filename,
{ {
m_sessionName = i18n(KS_UNNAMED); m_sessionName = i18n(KS_UNNAMED);
} }
if (m_docCount == 0) // FIXME: needs to make sure doc list and m_documents are in synchro here
{
m_documents.clear();
}
} }
//------------------------------------ //------------------------------------
@ -153,12 +154,6 @@ void KateSession::setSessionName(const TQString &sessionName)
//------------------------------------ //------------------------------------
void KateSession::setReadOnly(bool readOnly) void KateSession::setReadOnly(bool readOnly)
{ {
if (!m_readOnly && readOnly)
{
// When a session is turned read only, make sure the current
// status is first saved to disk
save();
}
m_readOnly = readOnly; m_readOnly = readOnly;
if (m_config) if (m_config)
{ {
@ -167,7 +162,7 @@ void KateSession::setReadOnly(bool readOnly)
} }
//------------------------------------ //------------------------------------
void KateSession::save() void KateSession::save(bool saveDocList)
{ {
if (m_readOnly) if (m_readOnly)
return; return;
@ -196,6 +191,7 @@ void KateSession::save()
{ {
m_config = new KSimpleConfig(m_filename); m_config = new KSimpleConfig(m_filename);
} }
if (m_config->hasGroup(KS_GENERAL)) if (m_config->hasGroup(KS_GENERAL))
{ {
m_config->deleteGroup(KS_GENERAL); m_config->deleteGroup(KS_GENERAL);
@ -214,10 +210,26 @@ void KateSession::save()
{ {
m_config->writeEntry(TQString("URL_%1").arg(i), m_documents[i]); m_config->writeEntry(TQString("URL_%1").arg(i), m_documents[i]);
} }
if (saveDocList)
{
KateDocManager::self()->saveDocumentList(m_config);
}
m_config->sync(); m_config->sync();
} }
//------------------------------------
void KateSession::activate()
{
KateDocManager::self()->closeAllDocuments();
Kate::Document::setOpenErrorDialogsActivated(false);
if (m_config)
{
KateApp::self()->documentManager()->restoreDocumentList(m_config);
}
Kate::Document::setOpenErrorDialogsActivated(true);
}
//------------------------------------ //------------------------------------
KateSessionManager *KateSessionManager::ksm_instance = NULL; KateSessionManager *KateSessionManager::ksm_instance = NULL;
@ -234,7 +246,7 @@ KateSessionManager* KateSessionManager::self()
//------------------------------------ //------------------------------------
KateSessionManager::KateSessionManager() : KateSessionManager::KateSessionManager() :
m_baseDir(locateLocal("data", KSM_DIR)+"/"), m_configFile(m_baseDir + KSM_FILE), m_baseDir(locateLocal("data", KSM_DIR)+"/"), m_configFile(m_baseDir + KSM_FILE),
m_sessionsCount(0), m_sessions(), m_config(NULL) m_sessionsCount(0), m_activeSessionId(-1), m_sessions(), m_config(NULL)
{ {
m_sessions.setAutoDelete(true); m_sessions.setAutoDelete(true);
@ -244,6 +256,7 @@ KateSessionManager::KateSessionManager() :
m_config = new KSimpleConfig(m_configFile); m_config = new KSimpleConfig(m_configFile);
m_config->setGroup(KSM_SESSIONS_LIST); m_config->setGroup(KSM_SESSIONS_LIST);
m_sessionsCount = m_config->readNumEntry(KSM_SESSIONS_COUNT, 0); m_sessionsCount = m_config->readNumEntry(KSM_SESSIONS_COUNT, 0);
m_activeSessionId = m_config->readNumEntry(KSM_ACTIVE_SESSION_ID, -1);
for (int i=0; i<m_sessionsCount; ++i) for (int i=0; i<m_sessionsCount; ++i)
{ {
TQString urlStr = m_config->readEntry(TQString("URL_%1").arg(i)); TQString urlStr = m_config->readEntry(TQString("URL_%1").arg(i));
@ -265,6 +278,11 @@ KateSessionManager::KateSessionManager() :
} }
} }
m_sessionsCount = static_cast<int>(m_sessions.count()); m_sessionsCount = static_cast<int>(m_sessions.count());
if (m_activeSessionId < 0 || m_activeSessionId >= m_sessionsCount)
{
m_activeSessionId = 0; // Invalid active session was detected. Use first in the list
}
m_sessions[m_activeSessionId]->activate();
} }
//------------------------------------ //------------------------------------
@ -294,15 +312,37 @@ void KateSessionManager::saveConfig()
} }
m_config->setGroup(KSM_SESSIONS_LIST); m_config->setGroup(KSM_SESSIONS_LIST);
m_config->writeEntry(KSM_SESSIONS_COUNT, m_sessionsCount); m_config->writeEntry(KSM_SESSIONS_COUNT, m_sessionsCount);
m_config->writeEntry(KSM_ACTIVE_SESSION_ID, m_activeSessionId);
for (int i=0; i<m_sessionsCount; ++i) for (int i=0; i<m_sessionsCount; ++i)
{ {
// Save the session first, to make sure a new session has an associated file // Save the session first, to make sure a new session has an associated file
m_sessions[i]->save(); m_sessions[i]->save(i == m_activeSessionId);
m_config->writeEntry(TQString("URL_%1").arg(i), m_sessions[i]->getSessionFilename()); m_config->writeEntry(TQString("URL_%1").arg(i), m_sessions[i]->getSessionFilename());
} }
m_config->sync(); m_config->sync();
} }
//------------------------------------
bool KateSessionManager::activateSession(int sessionId, bool saveCurr)
{
if (sessionId == m_activeSessionId)
{
return true;
}
// First check if all documents can be closed safely
if (KateApp::self()->activeMainWindow())
{
if (!KateApp::self()->activeMainWindow()->queryClose_internal())
return false;
}
m_sessions[m_activeSessionId]->save(true);
m_sessions[sessionId]->activate();
m_activeSessionId = sessionId;
return true;
}
@ -485,7 +525,7 @@ OldKateSessionManager::~OldKateSessionManager()
OldKateSessionManager *OldKateSessionManager::self() OldKateSessionManager *OldKateSessionManager::self()
{ {
return KateApp::self()->sessionManager (); return KateApp::self()->oldSessionManager ();
} }
void OldKateSessionManager::dirty (const TQString &) void OldKateSessionManager::dirty (const TQString &)

@ -59,7 +59,7 @@ class KateSession
~KateSession(); ~KateSession();
/** /**
* Returns the session name * @return the session name
*/ */
const TQString& getSessionName() const { return m_sessionName; } const TQString& getSessionName() const { return m_sessionName; }
/** /**
@ -69,7 +69,7 @@ class KateSession
void setSessionName(const TQString &sessionName); void setSessionName(const TQString &sessionName);
/** /**
* Returns whether the session is read only or not * @return whether the session is read only or not
*/ */
bool isReadOnly() const { return m_readOnly; } bool isReadOnly() const { return m_readOnly; }
/** /**
@ -79,16 +79,20 @@ class KateSession
void setReadOnly(bool readOnly); void setReadOnly(bool readOnly);
/** /**
* Returns the session filename * @return the session filename
*/ */
const TQString& getSessionFilename() const { return m_filename; } const TQString& getSessionFilename() const { return m_filename; }
/** /**
* Save session info * Save session info
* @return true if the session config is saved, false otherwise * @param saveDocList if true, save also the information about the documents currently open
*/ */
void save(); void save(bool saveDocList);
/**
* Activate the session
*/
void activate();
private: private:
TQString m_sessionName; TQString m_sessionName;
@ -124,6 +128,28 @@ class KateSessionManager
*/ */
void saveConfig(); void saveConfig();
/**
* @return the active session id
*/
int getActiveSessionId() const { return m_activeSessionId; }
/**
* @return a reference to the active session
*/
KateSession* getActiveSession() { return m_sessions[m_activeSessionId]; }
/**
* @return a reference to the sessions list
*/
TQPtrList<KateSession>& getSessionsList() { return m_sessions; }
/**
* Activates the selected session.
* @param sessionId the id of the session to activate
* @param saveCurr if true, save the current session before activating the new one
* @return whether the session was activated or not
*/
bool activateSession(int sessionId, bool saveCurr = true);
private: private:
KateSessionManager(); KateSessionManager();
@ -131,6 +157,7 @@ class KateSessionManager
TQString m_baseDir; // folder where session files are stored TQString m_baseDir; // folder where session files are stored
TQString m_configFile; // file where the session list config is stored TQString m_configFile; // file where the session list config is stored
int m_sessionsCount; // number of sessions int m_sessionsCount; // number of sessions
int m_activeSessionId; // index of the active session
TQPtrList<KateSession> m_sessions; // session list TQPtrList<KateSession> m_sessions; // session list
KSimpleConfig *m_config; // session manager config KSimpleConfig *m_config; // session manager config

@ -25,6 +25,7 @@
#include <kiconloader.h> #include <kiconloader.h>
#include <tdelocale.h> #include <tdelocale.h>
#include <tqlistview.h>
void KateSessionPanelToolBarParent::setToolBar(TDEToolBar *tbar) void KateSessionPanelToolBarParent::setToolBar(TDEToolBar *tbar)
@ -46,16 +47,34 @@ void KateSessionPanelToolBarParent::resizeEvent (TQResizeEvent*)
KateSessionPanel::KateSessionPanel(KateMainWindow *mainWindow, KateViewManager *viewManager, KateSessionPanel::KateSessionPanel(KateMainWindow *mainWindow, KateViewManager *viewManager,
TQWidget *parent, const char *name) TQWidget *parent, const char *name)
: TQVBox(parent, name), m_mainWin(mainWindow), m_viewManager(viewManager), : TQVBox(parent, name), m_mainWin(mainWindow), m_viewManager(viewManager),
m_sessionManager(OldKateSessionManager::self()), m_actionCollection(new TDEActionCollection(this)) m_sessionManager(KateSessionManager::self()), m_actionCollection(new TDEActionCollection(this)),
m_columnSessionId(0), m_columnPixmap(0)
{ {
// Toolbar // Toolbar
setup_toolbar(); setup_toolbar();
// Listview // Listview
m_listview = new TDEListView(this); m_listview = new TDEListView(this);
m_listview->setRootIsDecorated(true); m_listview->header()->hide();
m_listview->setSorting(-1); m_listview->addColumn("Session name");
m_columnSessionId = m_listview->addColumn("Session id", 0);
m_columnPixmap = m_listview->addColumn("Pixmap", 24);
m_listview->setColumnAlignment(2, TQt::AlignCenter);
m_listview->setMinimumWidth(m_listview->sizeHint().width()); m_listview->setMinimumWidth(m_listview->sizeHint().width());
m_listview->setSorting(-1);
//m_listview->setRootIsDecorated(true); // to enable after inserting doc list
TQPtrList<KateSession>& sessions = m_sessionManager->getSessionsList();
for (int idx = sessions.count()-1; idx >= 0; --idx)
{
new TDEListViewItem(m_listview, sessions[idx]->getSessionName(), TQString("%1").arg(idx));
if (idx == m_sessionManager->getActiveSessionId())
{
m_listview->setSelected(m_listview->firstChild(), true);
m_listview->firstChild()->setPixmap(m_columnPixmap, SmallIcon("ok"));
}
}
} }
//------------------------------------------- //-------------------------------------------
@ -71,8 +90,10 @@ void KateSessionPanel::setup_toolbar()
m_toolbar->setIconSize(16); m_toolbar->setIconSize(16);
m_toolbar->setEnableContextMenu(false); m_toolbar->setEnableContextMenu(false);
//FIXME : uncomment and activate as long as the new session manager gets fixed
// Toolbar actions // Toolbar actions
TDEAction *a; TDEAction *a;
/*
a = new TDEAction(i18n("New"), SmallIcon("list-add"), 0, a = new TDEAction(i18n("New"), SmallIcon("list-add"), 0,
TQT_TQOBJECT(m_sessionManager), TQT_SLOT(sessionNew()), m_actionCollection, "session_new"); TQT_TQOBJECT(m_sessionManager), TQT_SLOT(sessionNew()), m_actionCollection, "session_new");
a->setWhatsThis(i18n("Create a new session.")); a->setWhatsThis(i18n("Create a new session."));
@ -99,12 +120,12 @@ void KateSessionPanel::setup_toolbar()
a->plug(m_toolbar); a->plug(m_toolbar);
m_toolbar->insertLineSeparator(); m_toolbar->insertLineSeparator();
*/
a = new TDEAction(i18n("Activate"), SmallIcon("forward"), 0, a = new TDEAction(i18n("Activate"), SmallIcon("forward"), 0,
TQT_TQOBJECT(this), TQT_SLOT(sessionActivate()), m_actionCollection, "session_activate"); TQT_TQOBJECT(this), TQT_SLOT(sessionActivate()), m_actionCollection, "session_activate");
a->setWhatsThis(i18n("Activate the selected session.")); a->setWhatsThis(i18n("Activate the selected session."));
a->plug(m_toolbar); a->plug(m_toolbar);
/*
TDEToggleAction *tglA = new TDEToggleAction(i18n("Toggle read only"), SmallIcon("encrypted"), 0, TDEToggleAction *tglA = new TDEToggleAction(i18n("Toggle read only"), SmallIcon("encrypted"), 0,
TQT_TQOBJECT(this), TQT_SLOT(sessionToggleReadOnly()), m_actionCollection, "session_toggle_read_only"); TQT_TQOBJECT(this), TQT_SLOT(sessionToggleReadOnly()), m_actionCollection, "session_toggle_read_only");
tglA->setWhatsThis(i18n("Toggle read only status for the selected session.<p>" tglA->setWhatsThis(i18n("Toggle read only status for the selected session.<p>"
@ -122,18 +143,7 @@ void KateSessionPanel::setup_toolbar()
TQT_TQOBJECT(this), TQT_SLOT(sessionMoveDown()), m_actionCollection, "session_move_down"); TQT_TQOBJECT(this), TQT_SLOT(sessionMoveDown()), m_actionCollection, "session_move_down");
a->setWhatsThis(i18n("Move down the selected session.")); a->setWhatsThis(i18n("Move down the selected session."));
a->plug(m_toolbar); a->plug(m_toolbar);
*/
m_toolbar->insertLineSeparator();
a = new TDEAction(i18n("Open"), SmallIcon("document-open"), 0,
TQT_TQOBJECT(m_sessionManager), TQT_SLOT(sessionOpen()), m_actionCollection, "session_open");
a->setWhatsThis(i18n("Switch to another session chosen from a list of existing ones."));
a->plug(m_toolbar);
a = new TDEAction(i18n("Manage"), SmallIcon("view_choose"), 0,
TQT_TQOBJECT(m_sessionManager), TQT_SLOT(sessionManage()), m_actionCollection, "session_manage");
a->setWhatsThis(i18n("Manage existing sessions."));
a->plug(m_toolbar);
} }
//------------------------------------------- //-------------------------------------------
@ -163,7 +173,24 @@ void KateSessionPanel::deleteSession()
//------------------------------------------- //-------------------------------------------
void KateSessionPanel::sessionActivate() void KateSessionPanel::sessionActivate()
{ {
//TODO TQListViewItem *newSessionItem = m_listview->selectedItem();
int currSessionId = m_sessionManager->getActiveSessionId();
if (!newSessionItem)
return;
int newSessionId = newSessionItem->text(m_columnSessionId).toInt();
if (newSessionId != currSessionId)
{
if (!m_sessionManager->activateSession(newSessionId))
return;
TQListViewItem *item = m_listview->firstChild();
for (int idx = 0; idx < currSessionId; ++idx)
{
item = item->nextSibling();
}
item->setPixmap(m_columnPixmap, TQPixmap());
newSessionItem->setPixmap(m_columnPixmap, SmallIcon("ok"));
}
} }
//------------------------------------------- //-------------------------------------------

@ -33,7 +33,7 @@
class KateMainWindow; class KateMainWindow;
class KateViewManager; class KateViewManager;
class OldKateSessionManager; class KateSessionManager;
class TDEActionCollection; class TDEActionCollection;
@ -80,11 +80,12 @@ class KateSessionPanel : public TQVBox
KateMainWindow *m_mainWin; KateMainWindow *m_mainWin;
KateViewManager *m_viewManager; KateViewManager *m_viewManager;
OldKateSessionManager *m_sessionManager; KateSessionManager *m_sessionManager;
TDEActionCollection *m_actionCollection; TDEActionCollection *m_actionCollection;
TDEToolBar *m_toolbar; TDEToolBar *m_toolbar;
TDEListView *m_listview; TDEListView *m_listview;
int m_columnSessionId;
int m_columnPixmap;
}; };

Loading…
Cancel
Save