* 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