//=============================================================================
//
// File : OptionsWidget_message.cpp
// Creation date : Sat Aug 11 2001 18:12:00 CEST by Szymon Stefanek
//
// This file is part of the KVIrc IRC client distribution
// Copyright (C) 2001-2010 Szymon Stefanek (pragma at kvirc dot net)
//
// This program is FREE software. You can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, write to the Free Software Foundation,
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
//=============================================================================
#define _WANT_OPTION_FLAGS_
#include "OptionsWidget_message.h"
#include "kvi_settings.h"
#include "KviOptions.h"
#include "KviApplication.h"
#include "KviLocale.h"
#include "KviControlCodes.h"
#include "KviConfigurationFile.h"
#include "KviFileDialog.h"
#include "KviTalVBox.h"
#include <QLayout>
#include <QPushButton>
#include <QCursor>
#include <QPainter>
#include <QWidgetAction>
#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
#include <unistd.h> // symlink()
#endif
#ifdef COMPILE_PSEUDO_TRANSPARENCY
extern KVIRC_API QPixmap * g_pShadedChildGlobalDesktopBackground;
#endif
OptionsWidget_message::OptionsWidget_message(QWidget * pParent)
: KviOptionsWidget(pParent)
{
}
OptionsWidget_message::~OptionsWidget_message()
= default;
OptionsWidget_privmsg::OptionsWidget_privmsg(QWidget * parent)
: KviOptionsWidget(parent)
{
setObjectName("privmsg_options_widget");
createLayout();
KviTalGroupBox * g = addGroupBox(0, 0, 0, 0, Qt::Horizontal, __tr2qs_ctx("General", "options"));
addBoolSelector(g, __tr2qs_ctx("Show message icons", "options"), KviOption_boolIrcViewShowImages);
addBoolSelector(g, __tr2qs_ctx("Draw some emoticons (smileys) as pictures", "options"), KviOption_boolDrawEmoticons);
addBoolSelector(g, __tr2qs_ctx("Don't show colors in user messages", "options"), KviOption_boolStripMircColorsInUserMessages);
g = addGroupBox(0, 1, 0, 1, Qt::Horizontal, __tr2qs_ctx("Nicknames", "options"));
m_pUseSmartColorSelector = addBoolSelector(g, __tr2qs_ctx("Smart nickname colors", "options"), KviOption_boolColorNicks);
connect(m_pUseSmartColorSelector, SIGNAL(toggled(bool)), this, SLOT(enableDisableSmartColorSelector(bool)));
m_pUseSmartColorWithBackgroundSelector = addBoolSelector(g, __tr2qs_ctx("Use a background color for smart nickname colors", "options"), KviOption_boolColorNicksWithBackground, KVI_OPTION_BOOL(KviOption_boolColorNicks));
KviTalHBox * hb = new KviTalHBox(g);
hb->setSpacing(4);
m_pSpecialSmartColorSelector = addBoolSelector(hb, __tr2qs_ctx("Use specified smart colors for own nick:", "options"), KviOption_boolUseSpecifiedSmartColorForOwnNick, KVI_OPTION_BOOL(KviOption_boolColorNicks));
m_pSmartColorSelector = addMircTextColorSelector(hb, "", KviOption_uintUserIrcViewOwnForeground, KviOption_uintUserIrcViewOwnBackground, KVI_OPTION_BOOL(KviOption_boolColorNicks) && KVI_OPTION_BOOL(KviOption_boolUseSpecifiedSmartColorForOwnNick));
connect(m_pSpecialSmartColorSelector, SIGNAL(toggled(bool)), this, SLOT(enableDisableSmartColorSelector(bool)));
connect(m_pUseSmartColorSelector, SIGNAL(toggled(bool)), m_pSpecialSmartColorSelector, SLOT(setEnabled(bool)));
connect(m_pUseSmartColorSelector, SIGNAL(toggled(bool)), m_pUseSmartColorWithBackgroundSelector, SLOT(setEnabled(bool)));
enableDisableSmartColorSelector(true);
KviBoolSelector * b2 = addBoolSelector(g, __tr2qs_ctx("Use same colors as in the userlist", "options"), KviOption_boolUseUserListColorsAsNickColors, !KVI_OPTION_BOOL(KviOption_boolColorNicks));
connect(m_pUseSmartColorSelector, SIGNAL(toggled(bool)), b2, SLOT(setNotEnabled(bool)));
addBoolSelector(g, __tr2qs_ctx("Show nicknames in bold", "options"), KviOption_boolBoldedNicks);
addBoolSelector(g, __tr2qs_ctx("Show user and host", "options"), KviOption_boolShowUserAndHostInPrivmsgView);
addBoolSelector(g, __tr2qs_ctx("Show channel mode prefix", "options"), KviOption_boolShowChannelUserFlagInPrivmsgView);
KviBoolSelector * b = addBoolSelector(g, __tr2qs_ctx("User-defined prefix and postfix", "options"), KviOption_boolUseExtendedPrivmsgView);
QLabel * l = addLabel(g, __tr2qs_ctx("[PREFIX]nickname[!user@host][POSTFIX] message", "options"));
l->setEnabled(KVI_OPTION_BOOL(KviOption_boolUseExtendedPrivmsgView));
connect(b,
SIGNAL(toggled(bool)),
l,
SLOT(setEnabled(bool)));
KviTalVBox * vb = new KviTalVBox(g);
vb->setSpacing(5);
connect(
b,
SIGNAL(toggled(bool)),
addStringSelector(vb, __tr2qs_ctx("Prefix:", "options"), KviOption_stringExtendedPrivmsgPrefix, KVI_OPTION_BOOL(KviOption_boolUseExtendedPrivmsgView)),
SLOT(setEnabled(bool)));
connect(
b,
SIGNAL(toggled(bool)),
addStringSelector(vb, __tr2qs_ctx("Postfix:", "options"), KviOption_stringExtendedPrivmsgPostfix, KVI_OPTION_BOOL(KviOption_boolUseExtendedPrivmsgView)),
SLOT(setEnabled(bool)));
addRowSpacer(0, 3, 0, 3);
}
void OptionsWidget_privmsg::enableDisableSmartColorSelector(bool)
{
m_pSmartColorSelector->setEnabled(m_pSpecialSmartColorSelector->isChecked() && m_pUseSmartColorSelector->isChecked());
}
OptionsWidget_privmsg::~OptionsWidget_privmsg()
= default;
OptionsWidget_timestamp::OptionsWidget_timestamp(QWidget * pParent)
: KviOptionsWidget(pParent)
{
createLayout();
m_pUseTimestampSelector = addBoolSelector(0, 0, 0, 0, __tr2qs_ctx("Show timestamp", "options"), KviOption_boolIrcViewTimestamp);
connect(m_pUseTimestampSelector, SIGNAL(toggled(bool)), this, SLOT(enableDisableTimestampSelector(bool)));
KviBoolSelector * b = addBoolSelector(0, 1, 0, 1, __tr2qs_ctx("Use UTC time for timestamp", "options"), KviOption_boolIrcViewTimestampUTC, KVI_OPTION_BOOL(KviOption_boolIrcViewTimestamp));
connect(m_pUseTimestampSelector, SIGNAL(toggled(bool)), b, SLOT(setEnabled(bool)));
KviTalHBox * hb = new KviTalHBox(this);
addWidgetToLayout(hb, 0, 2, 0, 2);
m_pSpecialTimestampColorSelector = addBoolSelector(hb, __tr2qs_ctx("Use special color for timestamps:", "options"), KviOption_boolUseSpecialColorForTimestamp, KVI_OPTION_BOOL(KviOption_boolIrcViewTimestamp));
connect(m_pSpecialTimestampColorSelector, SIGNAL(toggled(bool)), this, SLOT(enableDisableTimestampSelector(bool)));
connect(m_pUseTimestampSelector, SIGNAL(toggled(bool)), m_pSpecialTimestampColorSelector, SLOT(setEnabled(bool)));
m_pTimestampColorSelector = addMircTextColorSelector(hb, "", KviOption_uintTimeStampForeground, KviOption_uintTimeStampBackground, KVI_OPTION_BOOL(KviOption_boolIrcViewTimestamp) && KVI_OPTION_BOOL(KviOption_boolUseSpecialColorForTimestamp));
KviStringSelector * st = addStringSelector(0, 3, 0, 3, __tr2qs_ctx("Timestamp format:", "options"), KviOption_stringIrcViewTimestampFormat);
connect(m_pUseTimestampSelector, SIGNAL(toggled(bool)), st, SLOT(setEnabled(bool)));
connect(m_pUseTimestampSelector, SIGNAL(toggled(bool)), m_pSpecialTimestampColorSelector, SLOT(setEnabled(bool)));
addRowSpacer(0, 4, 0, 4);
}
OptionsWidget_timestamp::~OptionsWidget_timestamp()
= default;
void OptionsWidget_timestamp::enableDisableTimestampSelector(bool)
{
m_pTimestampColorSelector->setEnabled(m_pUseTimestampSelector->isChecked() && m_pSpecialTimestampColorSelector->isChecked());
}
OptionsWidget_standardColors::OptionsWidget_standardColors(QWidget * parent)
: KviOptionsWidget(parent)
{
setObjectName("stdcolors");
createLayout();
for(int i = 0; i < 16; i++)
m_pColorSelector[i] = addColorSelector(i % 4, i / 4, i % 4, i / 4, QString("%1:").arg(i), &(KVI_OPTION_MIRCCOLOR(i)));
QLabel * l = addLabel(0, 4, 3, 4, __tr2qs_ctx(
"Please note that this is a set of standard IRC colors. "
"You can adjust them a bit, make them darker or lighter but you "
"shouldn't change their fundamental tint. "
"Black should stay black, dark green should still remain a green darker than the light one.",
"options"));
l->setAlignment(Qt::AlignLeft);
addRowSpacer(0, 5, 3, 5);
layout()->setRowStretch(5, 1);
QPushButton * pReset = addPushButton(3, 6, 3, 6, __tr2qs_ctx("Reset to Default", "options"));
QObject::connect(pReset, SIGNAL(clicked()), this, SLOT(resetToDefaults()));
}
OptionsWidget_standardColors::~OptionsWidget_standardColors()
= default;
void OptionsWidget_standardColors::resetToDefaults()
{
m_pColorSelector[0]->forceColor(QColor(255, 255, 255));
m_pColorSelector[1]->forceColor(QColor(0, 0, 0));
m_pColorSelector[2]->forceColor(QColor(0, 0, 140));
m_pColorSelector[3]->forceColor(QColor(0, 100, 0));
m_pColorSelector[4]->forceColor(QColor(230, 0, 0));
m_pColorSelector[5]->forceColor(QColor(150, 0, 0));
m_pColorSelector[6]->forceColor(QColor(80, 0, 80));
m_pColorSelector[7]->forceColor(QColor(255, 90, 0));
m_pColorSelector[8]->forceColor(QColor(255, 255, 0));
m_pColorSelector[9]->forceColor(QColor(0, 255, 0));
m_pColorSelector[10]->forceColor(QColor(0, 150, 180));
m_pColorSelector[11]->forceColor(QColor(170, 170, 255));
m_pColorSelector[12]->forceColor(QColor(15, 15, 255));
m_pColorSelector[13]->forceColor(QColor(200, 0, 200));
m_pColorSelector[14]->forceColor(QColor(80, 80, 80));
m_pColorSelector[15]->forceColor(QColor(170, 170, 170));
}
MessageListWidgetItem::MessageListWidgetItem(MessageListWidget * l, int optId)
: KviTalListWidgetItem(l)
{
m_iOptId = optId;
m_pMsgType = new KviMessageTypeSettings(KVI_OPTION_MSGTYPE(optId));
QString txt = g_msgtypeOptionsTable[m_iOptId].name;
// skip the msgtype prefix
txt.remove(0, KVI_MSGTYPE_OPTIONS_PREFIX_LEN);
txt += " (";
txt += __tr2qs_no_xgettext(m_pMsgType->type());
txt += ")";
setText(txt);
setIcon(*(g_pIconManager->getSmallIcon(m_pMsgType->pixId())));
}
MessageListWidgetItem::~MessageListWidgetItem()
{
delete m_pMsgType;
}
void MessageListWidgetItemDelegate::paint(QPainter * p, const QStyleOptionViewItem & opt, const QModelIndex & index) const
{
const KviTalListWidget * tb = (const KviTalListWidget *)parent();
MessageListWidgetItem * it = static_cast<MessageListWidgetItem *>(index.internalPointer());
#ifdef COMPILE_PSEUDO_TRANSPARENCY
if(KVI_OPTION_BOOL(KviOption_boolUseCompositingForTransparency) && g_pApp->supportsCompositing())
{
p->save();
p->setCompositionMode(QPainter::CompositionMode_Source);
QColor col = KVI_OPTION_COLOR(KviOption_colorGlobalTransparencyFade);
col.setAlphaF((float)((float)KVI_OPTION_UINT(KviOption_uintGlobalTransparencyChildFadeFactor) / (float)100));
p->fillRect(opt.rect, col);
p->restore();
}
else if(g_pShadedChildGlobalDesktopBackground)
{
QPoint pnt = tb->viewport()->mapToGlobal(opt.rect.topLeft());
p->drawTiledPixmap(opt.rect, *g_pShadedChildGlobalDesktopBackground, pnt);
}
else
{
#endif
QPixmap * pix = KVI_OPTION_PIXMAP(KviOption_pixmapIrcViewBackground).pixmap();
if(pix)
{
QPoint pnt = tb->viewport()->mapToGlobal(opt.rect.topLeft());
p->drawTiledPixmap(opt.rect, *pix, pnt);
}
else
{
p->fillRect(opt.rect, KVI_OPTION_COLOR(KviOption_colorIrcViewBackground));
}
#ifdef COMPILE_PSEUDO_TRANSPARENCY
}
#endif
QString szText = index.data(Qt::DisplayRole).toString();
QPoint pt = opt.rect.topLeft();
pt.setX(pt.x() + 4);
p->drawPixmap(pt, *(g_pIconManager->getSmallIcon(it->msgType()->pixId())));
pt.setX(pt.x() + 18);
// draw the background
if(it->msgType()->back() <= KVI_EXTCOLOR_MAX)
{
QColor bColor = getMircColor(it->msgType()->back());
p->fillRect(pt.x(), pt.y(), opt.rect.width() - pt.x(), opt.rect.height(), bColor);
}
unsigned char ucFore = it->msgType()->fore();
if(ucFore > KVI_EXTCOLOR_MAX)
ucFore = 0;
p->setPen(QPen(getMircColor(ucFore)));
pt.setX(pt.x() + 2);
p->drawText(pt.x(), pt.y(), opt.rect.width() - pt.x(), opt.rect.height(), Qt::AlignLeft | Qt::AlignVCenter, szText);
if(opt.state & QStyle::State_Selected)
{
QPen pen(Qt::white);
p->setPen(pen);
p->drawRect(opt.rect.adjusted(0, 0, -1, -1));
p->drawRect(opt.rect.adjusted(1, 1, -2, -2));
pen.setColor(Qt::black);
pen.setStyle(Qt::DashLine);
p->setPen(pen);
p->drawRect(opt.rect.adjusted(0, 0, -1, -1));
p->drawRect(opt.rect.adjusted(1, 1, -2, -2));
}
}
MessageColorListWidgetItem::MessageColorListWidgetItem(KviTalListWidget * b, int idx)
: KviTalListWidgetText(b, QString())
{
m_iClrIdx = idx;
if((idx < 0) || (idx > KVI_EXTCOLOR_MAX))
{
setText(__tr2qs_ctx("Transparent", "options"));
setBackground(listWidget()->isEnabled() ? Qt::transparent : Qt::gray);
}
else
{
setBackground(QColor(getMircColor(m_iClrIdx)));
setText(" ");
}
}
MessageColorListWidgetItem::~MessageColorListWidgetItem()
= default;
void MessageColorListWidgetItemDelegate::paint(QPainter * p, const QStyleOptionViewItem & opt, const QModelIndex & index) const
{
if(opt.state & QStyle::State_Selected)
{
QColor clr;
const KviTalListWidget * lb = (const KviTalListWidget *)parent();
MessageColorListWidgetItem * it = static_cast<MessageColorListWidgetItem *>(index.internalPointer());
if((it->clrIdx() >= 0) && (it->clrIdx() <= KVI_EXTCOLOR_MAX))
{
clr = getMircColor(it->clrIdx());
}
else
{
clr = lb->palette().color(QPalette::Window);
}
QStyleOptionViewItem optz(opt);
optz.state = opt.state ^ QStyle::State_Selected;
QItemDelegate::paint(p, optz, index);
QPen pen(QColor(255 - clr.red(), 255 - clr.green(), 255 - clr.blue()));
pen.setStyle(Qt::DashLine);
p->setPen(pen);
p->drawRect(opt.rect.adjusted(0, 0, -1, -1));
p->drawRect(opt.rect.adjusted(1, 1, -2, -2));
p->drawRect(opt.rect.adjusted(2, 2, -3, -3));
}
else
{
QItemDelegate::paint(p, opt, index);
}
}
OptionsWidget_messageColors::OptionsWidget_messageColors(QWidget * parent)
: KviOptionsWidget(parent)
{
setObjectName("messages");
createLayout();
int i;
m_pLastItem = nullptr;
m_pListView = new MessageListWidget(this);
m_pListViewItemDelegate = new MessageListWidgetItemDelegate(m_pListView);
m_pListView->setItemDelegate(m_pListViewItemDelegate);
m_pListView->setSelectionMode(QAbstractItemView::SingleSelection);
m_pListView->setFont(KVI_OPTION_FONT(KviOption_fontIrcView));
m_pListView->viewport()->setAutoFillBackground(false);
addWidgetToLayout(m_pListView, 0, 0, 2, 0);
KviTalVBox * box = new KviTalVBox(this);
addWidgetToLayout(box, 3, 0, 3, 0);
new QLabel(__tr2qs_ctx("Background:", "options"), box);
m_pBackListWidget = new KviTalListWidget(box);
m_pBackListWidget->setMaximumWidth(150);
m_pBackListWidgetDelegate = new MessageColorListWidgetItemDelegate(m_pBackListWidget);
m_pBackListWidget->setItemDelegate(m_pBackListWidgetDelegate);
m_pBackItems[16] = new MessageColorListWidgetItem(m_pBackListWidget, KviControlCodes::Transparent);
for(i = 0; i < 16; i++)
{
m_pBackItems[i] = new MessageColorListWidgetItem(m_pBackListWidget, i);
}
new QLabel(__tr2qs_ctx("Foreground:", "options"), box);
m_pForeListWidget = new KviTalListWidget(box);
m_pForeListWidget->setMaximumWidth(150);
m_pForeListWidgetDelegate = new MessageColorListWidgetItemDelegate(m_pForeListWidget);
m_pForeListWidget->setItemDelegate(m_pForeListWidgetDelegate);
for(i = 0; i < 16; i++)
{
m_pForeItems[i] = new MessageColorListWidgetItem(m_pForeListWidget, i);
}
new QLabel(__tr2qs_ctx("Alert level:", "options"), box);
m_pLevelListWidget = new KviTalListWidget(box);
m_pLevelListWidget->setMaximumWidth(150);
for(i = 0; i < 6; i++)
{
QString tmpn;
tmpn.setNum(i);
new KviTalListWidgetText(m_pLevelListWidget, tmpn);
}
m_pIconButton = new QToolButton(box);
connect(m_pIconButton, SIGNAL(clicked()), this, SLOT(iconButtonClicked()));
m_pIconPopup = new QMenu(this);
KviIconWidget * iw = new KviIconWidget(m_pIconPopup);
connect(iw, SIGNAL(selected(KviIconManager::SmallIcon)), this, SLOT(newIconSelected(KviIconManager::SmallIcon)));
QWidgetAction * pWaction = new QWidgetAction(m_pIconPopup);
pWaction->setDefaultWidget(iw);
m_pIconPopup->addAction(pWaction);
m_pEnableLogging = new QCheckBox(__tr2qs_ctx("Log this", "options"), box);
KviTalHBox * h = new KviTalHBox(this);
addWidgetToLayout(h, 0, 1, 3, 1);
QPushButton * b = new QPushButton(__tr2qs_ctx("Load from...", "options"), h);
connect(b, SIGNAL(clicked()), this, SLOT(load()));
b = new QPushButton(__tr2qs_ctx("Save As...", "options"), h);
connect(b, SIGNAL(clicked()), this, SLOT(save()));
for(i = 0; i < KVI_NUM_MSGTYPE_OPTIONS; i++)
new MessageListWidgetItem(m_pListView, i);
layout()->setRowStretch(0, 1);
layout()->setColumnStretch(0, 1);
connect(m_pListView, SIGNAL(itemSelectionChanged()), this, SLOT(itemChanged()));
connect(m_pForeListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(colorChanged()));
connect(m_pBackListWidget, SIGNAL(itemSelectionChanged()), this, SLOT(colorChanged()));
itemChanged();
}
OptionsWidget_messageColors::~OptionsWidget_messageColors()
{
int i;
for(i = 15; i >= 0; i--)
{
delete m_pForeItems[i];
}
for(i = 16; i >= 0; i--)
{
delete m_pBackItems[i];
}
delete m_pListView;
delete m_pForeListWidget;
delete m_pBackListWidget;
delete m_pLevelListWidget;
delete m_pEnableLogging;
delete m_pIconButton;
delete m_pIconPopup;
}
void OptionsWidget_messageColors::newIconSelected(KviIconManager::SmallIcon eIcon)
{
if(!m_pLastItem)
return;
if(eIcon >= KviIconManager::IconCount)
return;
m_pLastItem->msgType()->setPixId(eIcon);
m_pIconButton->setIcon(*(g_pIconManager->getSmallIcon(eIcon)));
m_pListView->repaint(m_pListView->visualItemRect(m_pLastItem));
}
void OptionsWidget_messageColors::saveLastItem()
{
if(!m_pLastItem)
return;
int curIt = m_pForeListWidget->currentRow();
if(curIt >= 0) //quite useless
{
//qDebug("Setting fore %d",curIt);
MessageColorListWidgetItem * fore = (MessageColorListWidgetItem *)m_pForeListWidget->item(curIt);
//qDebug("And is %d",fore);
if(fore)
m_pLastItem->msgType()->setFore(fore->m_iClrIdx);
}
curIt = m_pBackListWidget->currentRow();
if(curIt >= 0) //quite useless
{
MessageColorListWidgetItem * back = (MessageColorListWidgetItem *)m_pBackListWidget->item(curIt);
if(back)
m_pLastItem->msgType()->setBack(back->m_iClrIdx);
}
m_pLastItem->msgType()->enableLogging(m_pEnableLogging->isChecked());
//qDebug("Updating","options");
curIt = m_pLevelListWidget->currentRow();
if(curIt < 0 || curIt > 5)
curIt = 1;
m_pLastItem->msgType()->setLevel(curIt);
m_pListView->repaint(m_pListView->visualItemRect(m_pLastItem));
}
void OptionsWidget_messageColors::itemChanged()
{
KviTalListWidgetItem * it = (KviTalListWidgetItem *)m_pListView->currentItem();
//qDebug("Item changed","options");
if(m_pLastItem)
saveLastItem();
m_pLastItem = nullptr; // do NOT save in this routine
m_pForeListWidget->setEnabled(it);
m_pBackListWidget->setEnabled(it);
m_pEnableLogging->setEnabled(it);
m_pIconButton->setEnabled(it);
m_pLevelListWidget->setEnabled(it);
if(it)
{
int back = ((MessageListWidgetItem *)it)->msgType()->back();
int fore = ((MessageListWidgetItem *)it)->msgType()->fore();
if(fore >= 0 && fore <= 15)
{
m_pForeListWidget->setCurrentItem(m_pForeItems[fore]);
}
if(back >= 0 && back <= 15)
{
m_pBackListWidget->setCurrentItem(m_pBackItems[back]);
}
else
{
m_pBackListWidget->setCurrentItem(m_pBackItems[16]);
}
m_pLevelListWidget->setCurrentRow(((MessageListWidgetItem *)it)->msgType()->level());
m_pEnableLogging->setChecked(((MessageListWidgetItem *)it)->msgType()->logEnabled());
m_pIconButton->setIcon(*(g_pIconManager->getSmallIcon(((MessageListWidgetItem *)it)->msgType()->pixId())));
}
// Ok...can save from now on
m_pLastItem = (MessageListWidgetItem *)it;
}
void OptionsWidget_messageColors::colorChanged()
{
if(m_pLastItem)
saveLastItem();
}
void OptionsWidget_messageColors::iconButtonClicked()
{
m_pIconPopup->popup(QCursor::pos());
}
void OptionsWidget_messageColors::commit()
{
saveLastItem();
mergeResetFlag(KviOption_resetUpdateGui);
int count = m_pListView->count();
for(int i = 0; i < count; i++)
{
MessageListWidgetItem * it = (MessageListWidgetItem *)m_pListView->item(i);
KVI_OPTION_MSGTYPE(it->optionId()) = *(it->msgType());
}
KviOptionsWidget::commit();
}
void OptionsWidget_messageColors::save()
{
QString szName;
QString szInit;
g_pApp->getLocalKvircDirectory(szInit, KviApplication::MsgColors);
if(KviFileDialog::askForSaveFileName(szName, __tr2qs_ctx("Enter a Filename - KVIrc", "options"), szInit, QString(), false, false, true, this))
{
if(m_pLastItem)
saveLastItem();
KviConfigurationFile cfg(szName, KviConfigurationFile::Write);
cfg.setGroup("Messages");
KviCString tmp;
int count = m_pListView->count();
for(int i = 0; i < count; i++)
{
MessageListWidgetItem * it = (MessageListWidgetItem *)m_pListView->item(i);
tmp.sprintf("Fore%d", it->optionId());
cfg.writeEntry(tmp.ptr(), it->msgType()->fore());
tmp.sprintf("Back%d", it->optionId());
cfg.writeEntry(tmp.ptr(), it->msgType()->back());
tmp.sprintf("Icon%d", it->optionId());
cfg.writeEntry(tmp.ptr(), it->msgType()->pixId());
tmp.sprintf("Log%d", it->optionId());
cfg.writeEntry(tmp.ptr(), it->msgType()->logEnabled());
tmp.sprintf("Level%d", it->optionId());
cfg.writeEntry(tmp.ptr(), it->msgType()->level());
}
}
}
//#include <errno.h>
void OptionsWidget_messageColors::load()
{
QString szName;
QString szInit;
g_pApp->getLocalKvircDirectory(szInit, KviApplication::MsgColors);
#if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW)
// symlink local to global
QString szGlobal;
g_pApp->getGlobalKvircDirectory(szGlobal, KviApplication::MsgColors);
QString szLocal;
g_pApp->getLocalKvircDirectory(szLocal, KviApplication::MsgColors, "presets");
//qDebug("SYMLINKING %s to %s",szGlobal.ptr(),szLocal.ptr());
//qDebug("SYMLINK RETURNS %d (%d)",::symlink(szGlobal.ptr(),szLocal.ptr()));
//qDebug("ERRNO (%d)",errno);
(void)symlink(szGlobal.toLocal8Bit().data(), szLocal.toLocal8Bit().data());
// FIXME: Do it also on windows...
#endif
if(KviFileDialog::askForOpenFileName(szName, __tr2qs_ctx("Select a File - KVIrc", "options"), szInit, QString(), false, true, this))
{
itemChanged();
KviConfigurationFile cfg(szName, KviConfigurationFile::Read);
cfg.setGroup("Messages");
//KviCString tmp;
QString tmp;
int count = m_pListView->count();
for(int i = 0; i < count; i++)
{
MessageListWidgetItem * it = (MessageListWidgetItem *)m_pListView->item(i);
tmp = QString::asprintf("Fore%d", it->optionId());
int fore = cfg.readIntEntry(tmp, it->msgType()->fore());
if(fore < 0 || fore > 15)
fore = 0;
it->msgType()->setFore(fore);
tmp = QString::asprintf("Back%d", it->optionId());
int back = cfg.readIntEntry(tmp, it->msgType()->back());
if(back < 0 || back > 15)
back = KviControlCodes::Transparent;
it->msgType()->setBack(back);
tmp = QString::asprintf("Icon%d", it->optionId());
int ico = cfg.readIntEntry(tmp, it->msgType()->pixId());
if(ico < 0 || ico >= KviIconManager::IconCount)
ico = 0;
it->msgType()->setPixId(ico);
tmp = QString::asprintf("Log%d", it->optionId());
bool bLog = cfg.readBoolEntry(tmp, it->msgType()->logEnabled());
it->msgType()->enableLogging(bLog);
tmp = QString::asprintf("Level%d", it->optionId());
int iLevel = cfg.readIntEntry(tmp, it->msgType()->level());
it->msgType()->setLevel(iLevel);
m_pListView->repaint(m_pListView->visualItemRect(it));
}
}
}