* Kopete emoticons editor dialog and misc. config fixes git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdenetwork@1062109 283d02a7-25f6-0310-bc7c-ecb5cbfe19dav3.5.13-sru
parent
9fab5b8a21
commit
46b4e2b360
@ -0,0 +1,256 @@
|
|||||||
|
#include "emoticonseditdialog.h"
|
||||||
|
#include "emoticonseditwidget.h"
|
||||||
|
|
||||||
|
#include "kopeteglobal.h"
|
||||||
|
#include "kopeteprefs.h"
|
||||||
|
#include "kopeteemoticons.h"
|
||||||
|
|
||||||
|
#include <klocale.h>
|
||||||
|
#include <klistview.h>
|
||||||
|
#include <kstandarddirs.h>
|
||||||
|
#include <kfiledialog.h>
|
||||||
|
#include <kio/job.h>
|
||||||
|
#include <qpixmap.h>
|
||||||
|
#include <qheader.h>
|
||||||
|
#include <qlayout.h>
|
||||||
|
#include <qlabel.h>
|
||||||
|
|
||||||
|
|
||||||
|
EditDialog::EditDialog(QWidget *parent, const char* name)
|
||||||
|
: KDialogBase(parent, name, true, i18n(name), Ok|Cancel, Ok, true)
|
||||||
|
{
|
||||||
|
setupDlg();
|
||||||
|
}
|
||||||
|
|
||||||
|
EditDialog::EditDialog(QWidget *parent, const char* name, QPixmap emot, QString text, QString file)
|
||||||
|
: KDialogBase(parent, name, true, i18n(name), Ok|Cancel, Ok, true)
|
||||||
|
{
|
||||||
|
setupDlg();
|
||||||
|
leText->setText(text);
|
||||||
|
btnIcon->setPixmap(emot);
|
||||||
|
emoticon = file;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditDialog::setupDlg()
|
||||||
|
{
|
||||||
|
wdg = new QWidget(this);
|
||||||
|
QVBoxLayout *vl = new QVBoxLayout(wdg, 11, 6);
|
||||||
|
QHBoxLayout *hb = new QHBoxLayout(wdg, 0, 6);
|
||||||
|
leText = new KLineEdit(wdg);
|
||||||
|
btnIcon = new KPushButton(wdg);
|
||||||
|
btnIcon->setFixedSize(QSize(64, 64));
|
||||||
|
|
||||||
|
vl->addWidget(new QLabel(i18n("Insert the string for the emoticon\nseparated by space if you want multiple strings"), wdg));
|
||||||
|
hb->addWidget(btnIcon);
|
||||||
|
hb->addWidget(leText);
|
||||||
|
vl->addLayout(hb);
|
||||||
|
setMainWidget(wdg);
|
||||||
|
connect(btnIcon, SIGNAL(clicked()), this, SLOT(btnIconClicked()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditDialog::btnIconClicked()
|
||||||
|
{
|
||||||
|
KURL url = KFileDialog::getImageOpenURL();
|
||||||
|
|
||||||
|
if(!url.isLocalFile())
|
||||||
|
return;
|
||||||
|
|
||||||
|
emoticon = url.path();
|
||||||
|
|
||||||
|
if(emoticon.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
btnIcon->setPixmap(QPixmap(emoticon));
|
||||||
|
}
|
||||||
|
|
||||||
|
EmoticonsEditDialog::EmoticonsEditDialog(QWidget *parent, QString theme, const char* name)
|
||||||
|
: KDialogBase(parent, name, true, i18n("Emoticons Editor"), Ok|Cancel, Ok, true)
|
||||||
|
{
|
||||||
|
themeName = theme;
|
||||||
|
|
||||||
|
mMainWidget = new EmoticonsEditWidget(this, "EmoticonsEditDialog::mMainWidget");
|
||||||
|
setMainWidget(mMainWidget);
|
||||||
|
resize(QSize(450, 350));
|
||||||
|
mMainWidget->btnAdd->setGuiItem(KStdGuiItem::add());
|
||||||
|
mMainWidget->btnEdit->setText(i18n("Edit..."));
|
||||||
|
mMainWidget->btnRemove->setGuiItem(KStdGuiItem::remove());
|
||||||
|
|
||||||
|
|
||||||
|
mMainWidget->klvEmoticons->addColumn("Emoticon");
|
||||||
|
mMainWidget->klvEmoticons->addColumn("Text");
|
||||||
|
mMainWidget->klvEmoticons->addColumn("File", 0);
|
||||||
|
mMainWidget->klvEmoticons->header()->hide();
|
||||||
|
Kopete::Emoticons emoticons( theme );
|
||||||
|
QMap<QString, QStringList> smileys = emoticons.emoticonAndPicList();
|
||||||
|
|
||||||
|
|
||||||
|
for(QMap<QString, QStringList>::Iterator it = smileys.begin(); it != smileys.end(); ++it )
|
||||||
|
{
|
||||||
|
KListViewItem *itm = new KListViewItem(mMainWidget->klvEmoticons);
|
||||||
|
itm->setPixmap(0, QPixmap(it.key()));
|
||||||
|
itm->setText(2, QFileInfo(it.key()).baseName());
|
||||||
|
QString text = *it.data().at(0);
|
||||||
|
for(uint i = 1; i < it.data().size(); i++) {
|
||||||
|
text += " " + *it.data().at(i);
|
||||||
|
}
|
||||||
|
itm->setText(1, text);
|
||||||
|
}
|
||||||
|
|
||||||
|
QFile *fp = new QFile(KGlobal::dirs()->saveLocation( "emoticons", themeName, false ) + "/emoticons.xml");
|
||||||
|
|
||||||
|
if( !fp->exists() ) {
|
||||||
|
kdWarning() << "EmoticonsEditDialog::EmoticonsEditDialog() " << fp->name() << " doesn't exist!" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!fp->open( IO_ReadOnly )) {
|
||||||
|
kdWarning() << "EmoticonsEditDialog::EmoticonsEditDialog() " << fp->name() << " can't open ReadOnly!" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!themeXml.setContent(fp)) {
|
||||||
|
kdWarning() << "EmoticonsEditDialog::EmoticonsEditDialog() " << fp->name() << " can't copy to xml!" << endl;
|
||||||
|
fp->close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fp->close();
|
||||||
|
|
||||||
|
mMainWidget->klvEmoticons->setColumnWidth(0, QListView::Maximum);
|
||||||
|
mMainWidget->klvEmoticons->setColumnWidth(1, QListView::Maximum);
|
||||||
|
|
||||||
|
connect(this, SIGNAL(okClicked()), this, SLOT(slotOkClicked()));
|
||||||
|
connect(mMainWidget->btnAdd, SIGNAL(clicked()), this, SLOT(slotAddClicked()));
|
||||||
|
connect(mMainWidget->btnEdit, SIGNAL(clicked()), this, SLOT(slotEditClicked()));
|
||||||
|
connect(mMainWidget->btnRemove, SIGNAL(clicked()), this, SLOT(slotRemoveClicked()));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::slotOkClicked()
|
||||||
|
{
|
||||||
|
QFile *fp = new QFile(KGlobal::dirs()->saveLocation( "emoticons", themeName, false ) + "/emoticons.xml");
|
||||||
|
|
||||||
|
if( !fp->exists() ) {
|
||||||
|
kdWarning() << "EmoticonsEditDialog::slotOkClicked() " << fp->name() << " doesn't exist!" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!fp->open( IO_WriteOnly )) {
|
||||||
|
kdWarning() << "EmoticonsEditDialog::slotOkClicked() " << fp->name() << " can't open WriteOnly!" << endl;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QTextStream emoStream(fp);
|
||||||
|
emoStream << themeXml.toString(4);
|
||||||
|
fp->close();
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::slotAddClicked()
|
||||||
|
{
|
||||||
|
EditDialog *dlg = new EditDialog(this, "Add emoticon");
|
||||||
|
|
||||||
|
if(dlg->exec() == QDialog::Rejected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(dlg->getText().isEmpty() || !dlg->getEmoticon())
|
||||||
|
return;
|
||||||
|
|
||||||
|
addEmoticon(dlg->getEmoticon(), dlg->getText(), true);
|
||||||
|
|
||||||
|
|
||||||
|
delete dlg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::slotEditClicked()
|
||||||
|
{
|
||||||
|
if(!mMainWidget->klvEmoticons->selectedItem())
|
||||||
|
return;
|
||||||
|
|
||||||
|
dlg = new EditDialog(this, "Edit emoticon", *mMainWidget->klvEmoticons->selectedItem()->pixmap(0), mMainWidget->klvEmoticons->selectedItem()->text(1), mMainWidget->klvEmoticons->selectedItem()->text(2));
|
||||||
|
|
||||||
|
if(dlg->exec() == QDialog::Rejected)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(dlg->getText().isEmpty() || !dlg->getEmoticon())
|
||||||
|
return;
|
||||||
|
|
||||||
|
bool copy;
|
||||||
|
QString emo = dlg->getEmoticon();
|
||||||
|
if(mMainWidget->klvEmoticons->selectedItem()->text(2) != dlg->getEmoticon()) {
|
||||||
|
copy = true;
|
||||||
|
} else {
|
||||||
|
copy = false;
|
||||||
|
QString f = mMainWidget->klvEmoticons->selectedItem()->text(2);
|
||||||
|
|
||||||
|
KStandardDirs *dir = KGlobal::dirs();
|
||||||
|
emo = dir->findResource( "emoticons", themeName + QString::fromLatin1( "/" ) + f );
|
||||||
|
|
||||||
|
if( emo.isNull() )
|
||||||
|
emo = dir->findResource( "emoticons", themeName + QString::fromLatin1( "/" ) + f + QString::fromLatin1( ".mng" ) );
|
||||||
|
if ( emo.isNull() )
|
||||||
|
emo = dir->findResource( "emoticons", themeName + QString::fromLatin1( "/" ) + f + QString::fromLatin1( ".png" ) );
|
||||||
|
if ( emo.isNull() )
|
||||||
|
emo = dir->findResource( "emoticons", themeName + QString::fromLatin1( "/" ) + f + QString::fromLatin1( ".gif" ) );
|
||||||
|
if ( emo.isNull() )
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
removeEmoticon(mMainWidget->klvEmoticons->selectedItem()->text(2));
|
||||||
|
addEmoticon(emo, dlg->getText(), copy);
|
||||||
|
|
||||||
|
delete dlg;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::slotRemoveClicked()
|
||||||
|
{
|
||||||
|
if(!mMainWidget->klvEmoticons->selectedItem())
|
||||||
|
return;
|
||||||
|
|
||||||
|
removeEmoticon(mMainWidget->klvEmoticons->selectedItem()->text(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::addEmoticon(QString emo, QString text, bool copy)
|
||||||
|
{
|
||||||
|
if(copy)
|
||||||
|
KIO::copy(emo, KGlobal::dirs()->saveLocation( "emoticons", themeName, false ));
|
||||||
|
|
||||||
|
KListViewItem *itm = new KListViewItem(mMainWidget->klvEmoticons);
|
||||||
|
itm->setPixmap(0, QPixmap(emo));
|
||||||
|
itm->setText(1, text);
|
||||||
|
itm->setText(2, QFileInfo(emo).baseName());
|
||||||
|
|
||||||
|
QDomNode lc = themeXml.lastChild();
|
||||||
|
if(lc.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QDomElement emoticon = themeXml.createElement("emoticon");
|
||||||
|
emoticon.setAttribute("file", QFileInfo(emo).baseName());
|
||||||
|
lc.appendChild(emoticon);
|
||||||
|
QStringList splitted = QStringList::split(" ", text);
|
||||||
|
QStringList::const_iterator constIterator;
|
||||||
|
for(constIterator = splitted.begin(); constIterator != splitted.end(); constIterator++)
|
||||||
|
{
|
||||||
|
QDomElement emotext = themeXml.createElement("string");
|
||||||
|
QDomText txt = themeXml.createTextNode((*constIterator).stripWhiteSpace());
|
||||||
|
emotext.appendChild(txt);
|
||||||
|
emoticon.appendChild(emotext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void EmoticonsEditDialog::removeEmoticon(QString emo)
|
||||||
|
{
|
||||||
|
QDomNode lc = themeXml.lastChild();
|
||||||
|
if(lc.isNull())
|
||||||
|
return;
|
||||||
|
|
||||||
|
QDomNodeList nl = lc.childNodes();
|
||||||
|
|
||||||
|
for(uint i = 0; i < nl.length(); i++) {
|
||||||
|
QDomElement de = nl.item(i).toElement();
|
||||||
|
if(!de.isNull() && de.tagName() == "emoticon" && de.attribute("file") == emo) {
|
||||||
|
lc.removeChild(de);
|
||||||
|
delete mMainWidget->klvEmoticons->selectedItem();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,55 @@
|
|||||||
|
#ifndef EMOTICONSEDITDIALOG_H
|
||||||
|
#define EMOTICONSEDITDIALOG_H
|
||||||
|
|
||||||
|
#include <kdebug.h>
|
||||||
|
#include <qhbox.h>
|
||||||
|
#include <kdialogbase.h>
|
||||||
|
#include <klineedit.h>
|
||||||
|
#include <kpushbutton.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qdom.h>
|
||||||
|
|
||||||
|
class EmoticonsEditWidget;
|
||||||
|
|
||||||
|
class EditDialog : public KDialogBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
EditDialog(QWidget *parent, const char* name);
|
||||||
|
EditDialog(QWidget *parent, const char* name, QPixmap emot, QString text, QString file);
|
||||||
|
const QString getText() { return leText->text(); };
|
||||||
|
const QString getEmoticon() { return emoticon; };
|
||||||
|
private slots:
|
||||||
|
void btnIconClicked();
|
||||||
|
private:
|
||||||
|
void setupDlg();
|
||||||
|
QWidget *wdg;
|
||||||
|
KLineEdit *leText;
|
||||||
|
KPushButton *btnIcon;
|
||||||
|
QString emoticon;
|
||||||
|
};
|
||||||
|
|
||||||
|
class EmoticonsEditDialog : public KDialogBase
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
EmoticonsEditDialog(QWidget *parent=0, QString theme = QString::null, const char* name="EmoticonsEditDialog");
|
||||||
|
void addEmoticon(QString emo, QString text, bool copy);
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void slotOkClicked();
|
||||||
|
void slotAddClicked();
|
||||||
|
void slotEditClicked();
|
||||||
|
void slotRemoveClicked();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void removeEmoticon(QString emo);
|
||||||
|
EmoticonsEditWidget *mMainWidget;
|
||||||
|
QString themeName;
|
||||||
|
EditDialog *dlg;
|
||||||
|
QDomDocument themeXml;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,87 @@
|
|||||||
|
<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
|
||||||
|
<class>EmoticonsEditWidget</class>
|
||||||
|
<widget class="QWidget">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>EmoticonsEditWidget</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>535</width>
|
||||||
|
<height>378</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="caption">
|
||||||
|
<string>EmoticonsEditWidget</string>
|
||||||
|
</property>
|
||||||
|
<grid>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="QLayoutWidget" row="0" column="1">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>layout5</cstring>
|
||||||
|
</property>
|
||||||
|
<vbox>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>unnamed</cstring>
|
||||||
|
</property>
|
||||||
|
<widget class="KPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>btnAdd</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Add...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="KPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>btnEdit</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Edit...</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="KPushButton">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>btnRemove</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Remove</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<spacer>
|
||||||
|
<property name="name">
|
||||||
|
<cstring>spacer4</cstring>
|
||||||
|
</property>
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>Expanding</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</vbox>
|
||||||
|
</widget>
|
||||||
|
<widget class="KListView" row="0" column="0">
|
||||||
|
<property name="name">
|
||||||
|
<cstring>klvEmoticons</cstring>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</grid>
|
||||||
|
</widget>
|
||||||
|
<layoutdefaults spacing="6" margin="11"/>
|
||||||
|
<includehints>
|
||||||
|
<includehint>kpushbutton.h</includehint>
|
||||||
|
<includehint>kpushbutton.h</includehint>
|
||||||
|
<includehint>kpushbutton.h</includehint>
|
||||||
|
<includehint>klistview.h</includehint>
|
||||||
|
</includehints>
|
||||||
|
</UI>
|
Loading…
Reference in new issue