aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/list
diff options
context:
space:
mode:
authorGravatar Alexey Uzhva2007-02-26 10:06:22 +0000
committerGravatar Alexey Uzhva2007-02-26 10:06:22 +0000
commit81e3af724c9a600c13987675c7ed7630216cdfd4 (patch)
treea2ef195f9976f00f6780f637146da1f220d0828b /src/modules/list
parentcompile fix for MacOS X, thanks to Matteo (Tom) (diff)
downloadKVIrc-81e3af724c9a600c13987675c7ed7630216cdfd4.tar.gz
KVIrc-81e3af724c9a600c13987675c7ed7630216cdfd4.tar.bz2
KVIrc-81e3af724c9a600c13987675c7ed7630216cdfd4.zip
Added Export/Import feature to channel list module
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@374 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/list')
-rw-r--r--src/modules/list/listwindow.cpp95
-rw-r--r--src/modules/list/listwindow.h14
2 files changed, 104 insertions, 5 deletions
diff --git a/src/modules/list/listwindow.cpp b/src/modules/list/listwindow.cpp
index 81254e647..33b435622 100644
--- a/src/modules/list/listwindow.cpp
+++ b/src/modules/list/listwindow.cpp
@@ -39,6 +39,8 @@
#include "kvi_ircconnection.h"
#include "kvi_qstring.h"
#include "kvi_topicw.h"
+#include "kvi_config.h"
+#include "kvi_filedialog.h"
#include <qtimer.h>
#include <qpainter.h>
@@ -46,6 +48,7 @@
#include <qsplitter.h>
#include <qtooltip.h>
#include "kvi_tal_hbox.h"
+#include "kvi_msgbox.h"
extern KviPtrList<KviListWindow> * g_pListWindowList;
@@ -80,9 +83,13 @@ KviChannelListViewItem::~KviChannelListViewItem()
{
delete m_pData;
}
-
+#ifdef COMPILE_USE_QT4
int KviChannelListViewItem::width ( const QFontMetrics & fm, const KviTalListView * lv, int column ) const
+#else
+int KviChannelListViewItem::width ( const QFontMetrics & fm, const QListView * lv, int column ) const
+#endif
{
+ debug("width request");
QString szText;
switch(column)
@@ -172,14 +179,21 @@ KviListWindow::KviListWindow(KviFrame * lpFrm,KviConsole * lpConsole)
m_pVertSplitter = new QSplitter(QSplitter::Vertical,m_pSplitter,"vsplitter");
KviTalHBox * box = new KviTalHBox(m_pTopSplitter);
+ m_pOpenButton = new KviStyledToolButton(box);
+ m_pOpenButton->setPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_OPEN)));
+ connect(m_pOpenButton,SIGNAL(clicked()),this,SLOT(importList()));
+
+ m_pSaveButton = new KviStyledToolButton(box);
+ m_pSaveButton->setPixmap(*(g_pIconManager->getBigIcon(KVI_BIGICON_SAVE)));
+ connect(m_pSaveButton,SIGNAL(clicked()),this,SLOT(exportList()));
- m_pRequestButton = new QToolButton(box,"request_button");
+ m_pRequestButton = new KviStyledToolButton(box,"request_button");
m_pRequestButton->setUsesBigPixmap(false);
m_pRequestButton->setPixmap(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_LIST)));
connect(m_pRequestButton,SIGNAL(clicked()),this,SLOT(requestList()));
QToolTip::add(m_pRequestButton,__tr2qs("Request List"));
- m_pStopListDownloadButton = new QToolButton(box,"stoplistdownload_button");
+ m_pStopListDownloadButton = new KviStyledToolButton(box,"stoplistdownload_button");
m_pStopListDownloadButton->setUsesBigPixmap(false);
m_pStopListDownloadButton->setPixmap(*(g_pIconManager->getSmallIcon(KVI_SMALLICON_NICKNAMEPROBLEM)));
connect(m_pStopListDownloadButton,SIGNAL(clicked()),this,SLOT(stoplistdownload()));
@@ -199,6 +213,8 @@ KviListWindow::KviListWindow(KviFrame * lpFrm,KviConsole * lpConsole)
m_pListView->addColumn(__tr2qs("Users"));
m_pListView->addColumn(__tr2qs("Topic"));
m_pListView->setAllColumnsShowFocus(TRUE);
+ m_pListView->setColumnWidthMode(2,QListView::Maximum);
+ m_pListView->setColumnWidthMode(3,QListView::Maximum);
m_pListView->setSorting(100);
connect(m_pListView,SIGNAL(doubleClicked(KviTalListViewItem *)),this,SLOT(itemDoubleClicked(KviTalListViewItem *)));
@@ -312,6 +328,79 @@ void KviListWindow::die()
close();
}
+void KviListWindow::exportList()
+{
+ if(!m_pListView->firstChild())
+ {
+ KviMessageBox::warning(__tr2qs("You cannot export an empty list"));
+ return;
+ }
+
+ QString szFile;
+ if(connection())
+ {
+ KviQString::sprintf(szFile,__tr2qs("Channel list for %Q - %Q"),
+ &(connection()->networkName()),&(QDateTime::currentDateTime().toString("d MMM yyyy hh-mm")));
+ } else {
+ szFile = __tr2qs("Channel list");
+ }
+ if(KviFileDialog::askForSaveFileName(szFile,__tr2qs("Choose filename"),szFile,
+ __tr2qs("Configuration files (*.kvc)"),false,
+ false,true,this))
+ {
+ if(QFileInfo(szFile).extension()!="kvc")
+ szFile.append(".kvc");
+ KviConfig cfg(szFile,KviConfig::Write);
+ cfg.clear();
+ KviTalListViewItemIterator it(m_pListView);
+
+ while(it.current())
+ {
+ KviChannelListViewItemData* pData= ((KviChannelListViewItem*) ( it.current() ))->m_pData;
+ cfg.setGroup(pData->m_szChan);
+ // Write properties
+ cfg.writeEntry("topic",pData->m_szTopic);
+ cfg.writeEntry("users",pData->m_szUsers);
+// cfg.writeEntry("usersKey",pData->m_szUsersKey);
+ ++it;
+ }
+ }
+}
+
+void KviListWindow::importList()
+{
+
+ QString szFile;
+ if(KviFileDialog::askForOpenFileName(szFile,__tr2qs("Choose filename"),QString::null,
+ __tr2qs("Configuration files (*.kvc)"),false,
+ false,this))
+ {
+ if(m_pConsole->isConnected())
+ {
+ m_pConsole->connection()->sendFmtData("list stoplistdownloadnow");
+ outputNoFmt(KVI_OUT_SYSTEMMESSAGE,__tr2qs("Stopping the list download...")); //G&N mar 2005
+ }
+
+ m_pItemList->clear();
+
+ KviConfig cfg(szFile,KviConfig::Read);
+ KviConfigIterator it(*cfg.dict());
+ while(it.current())
+ {
+ cfg.setGroup(it.currentKey());
+ m_pItemList->append(
+ new KviChannelListViewItemData(
+ it.currentKey(),
+ cfg.readQStringEntry("users","0"),
+ cfg.readQStringEntry("topic","")
+ )
+ );
+ ++it;
+ }
+ flush();
+ }
+}
+
void KviListWindow::control(int message)
{
switch(message)
diff --git a/src/modules/list/listwindow.h b/src/modules/list/listwindow.h
index 009522662..a8c10e486 100644
--- a/src/modules/list/listwindow.h
+++ b/src/modules/list/listwindow.h
@@ -42,6 +42,7 @@ class KviThemedLabel;
class KviChannelListViewItemData
{
friend class KviChannelListViewItem;
+ friend class KviListWindow;
public:
KviChannelListViewItemData(const QString &szChan,const QString &szUsers,const QString &szTopic);
~KviChannelListViewItemData();
@@ -54,6 +55,7 @@ protected:
class KviChannelListViewItem : public KviTalListViewItem
{
+ friend class KviListWindow;
public:
KviChannelListViewItem(KviTalListView * v,KviChannelListViewItemData * pData);
~KviChannelListViewItem();
@@ -61,7 +63,11 @@ protected:
KviChannelListViewItemData * m_pData;
public:
const QString & channel(){ return m_pData->m_szChan; };
- virtual int width ( const QFontMetrics & fm, const KviTalListView * lv, int c ) const;
+#ifdef COMPILE_USE_QT4
+ int width ( const QFontMetrics & fm, const KviTalListView * lv, int column ) const;
+#else
+ int width ( const QFontMetrics & fm, const QListView * lv, int column ) const;
+#endif
protected:
virtual void paintCell(QPainter * p,const QColorGroup &cg,int col,int wdth,int align);
virtual QString key(int col,bool) const;
@@ -78,10 +84,12 @@ public:
protected:
QSplitter * m_pVertSplitter;
QSplitter * m_pTopSplitter;
- KviTalListView * m_pListView;
+ KviTalListView * m_pListView;
QLineEdit * m_pParamsEdit;
QToolButton * m_pRequestButton;
QToolButton * m_pStopListDownloadButton;
+ QToolButton * m_pOpenButton;
+ QToolButton * m_pSaveButton;
KviThemedLabel * m_pInfoLabel;
QTimer * m_pFlushTimer;
KviPtrList<KviChannelListViewItemData> * m_pItemList;
@@ -101,6 +109,8 @@ protected slots:
void requestList();
void stoplistdownload();
void connectionStateChange();
+ void exportList();
+ void importList();
public:
virtual QSize sizeHint() const;
private: