diff options
Diffstat (limited to 'src/modules/options/OptionsWidget_message.cpp')
| -rw-r--r-- | src/modules/options/OptionsWidget_message.cpp | 656 |
1 files changed, 656 insertions, 0 deletions
diff --git a/src/modules/options/OptionsWidget_message.cpp b/src/modules/options/OptionsWidget_message.cpp new file mode 100644 index 000000000..6dd563142 --- /dev/null +++ b/src/modules/options/OptionsWidget_message.cpp @@ -0,0 +1,656 @@ +//============================================================================= +// +// 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 opinion) 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 "KviIconManager.h" +#include "KviMircCntrl.h" +#include "KviConfigurationFile.h" +#include "KviFileDialog.h" +#include "KviTalVBox.h" + +#include <QLayout> +#include <QPushButton> +#include <QCursor> +#include <QPainter> + +#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() +{ +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +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); + + KviTalHBox * hb = new KviTalHBox(g); + hb->setSpacing(4); + m_pSpecialSmartColorSelector = addBoolSelector(hb,__tr2qs_ctx("Use specified 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))); + + 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_pUseSmartColorSelector->isChecked() && m_pUseSmartColorSelector->isChecked()); +} + +OptionsWidget_privmsg::~OptionsWidget_privmsg() +{ +} + +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() +{ +} + +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(); + + addColorSelector(0,0,0,0,"0:",&(KVI_OPTION_MIRCCOLOR(0))); + addColorSelector(1,0,1,0,"1:",&(KVI_OPTION_MIRCCOLOR(1))); + addColorSelector(2,0,2,0,"2:",&(KVI_OPTION_MIRCCOLOR(2))); + addColorSelector(3,0,3,0,"3:",&(KVI_OPTION_MIRCCOLOR(3))); + addColorSelector(0,1,0,1,"4:",&(KVI_OPTION_MIRCCOLOR(4))); + addColorSelector(1,1,1,1,"5:",&(KVI_OPTION_MIRCCOLOR(5))); + addColorSelector(2,1,2,1,"6:",&(KVI_OPTION_MIRCCOLOR(6))); + addColorSelector(3,1,3,1,"7:",&(KVI_OPTION_MIRCCOLOR(7))); + addColorSelector(0,2,0,2,"8:",&(KVI_OPTION_MIRCCOLOR(8))); + addColorSelector(1,2,1,2,"9:",&(KVI_OPTION_MIRCCOLOR(9))); + addColorSelector(2,2,2,2,"10:",&(KVI_OPTION_MIRCCOLOR(10))); + addColorSelector(3,2,3,2,"11:",&(KVI_OPTION_MIRCCOLOR(11))); + addColorSelector(0,3,0,3,"12:",&(KVI_OPTION_MIRCCOLOR(12))); + addColorSelector(1,3,1,3,"13:",&(KVI_OPTION_MIRCCOLOR(13))); + addColorSelector(2,3,2,3,"14:",&(KVI_OPTION_MIRCCOLOR(14))); + addColorSelector(3,3,3,3,"15:",&(KVI_OPTION_MIRCCOLOR(15))); + + addRowSpacer(0,4,3,4); + + layout()->setRowStretch(4,1); +} + +OptionsWidget_standardColors::~OptionsWidget_standardColors() +{ +} + +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() < 16) + { + QColor bColor = KVI_OPTION_MIRCCOLOR(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 > 15)ucFore = 0; + p->setPen(QPen(KVI_OPTION_MIRCCOLOR(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 > 15)) + { + setText(__tr2qs_ctx("Transparent","options")); + setBackground(listWidget()->isEnabled() ? Qt::transparent : Qt::gray); + } else { + setBackground(QColor(KVI_OPTION_MIRCCOLOR(m_iClrIdx))); + setText(" "); + } +} + +MessageColorListWidgetItem::~MessageColorListWidgetItem() +{ +} + +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() <= 15)) + { + clr = KVI_OPTION_MIRCCOLOR(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 = 0; + + 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,KviMircCntrl::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 KviTalPopupMenu(this); + KviIconWidget * iw = new KviIconWidget(m_pIconPopup); + connect(iw,SIGNAL(selected(int)),this,SLOT(newIconSelected(int))); + m_pIconPopup->insertItem(iw); + + + 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(int iconId) +{ + if(!m_pLastItem)return; + if(iconId >= KVI_NUM_SMALL_ICONS)return; + m_pLastItem->msgType()->setPixId(iconId); + m_pIconButton->setIcon(*(g_pIconManager->getSmallIcon(iconId))); + 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 = 0; // 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("Choose a Filename - KVIrc","options"),szInit)) + { + 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); + int dummy; // make gcc happy + dummy = symlink(szGlobal.toLocal8Bit().data(),szLocal.toLocal8Bit().data()); + // FIXME: Do it also on windows... +#endif + + if(KviFileDialog::askForOpenFileName(szName,__tr2qs_ctx("Choose a Filename - KVIrc ","options"),szInit)) + { + 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.sprintf("Fore%d",it->optionId()); + int fore = cfg.readIntEntry(tmp,it->msgType()->fore()); + if(fore < 0 || fore > 15)fore = 0; + it->msgType()->setFore(fore); + + tmp.sprintf("Back%d",it->optionId()); + int back = cfg.readIntEntry(tmp,it->msgType()->back()); + if(back < 0 || back > 15)back = KviMircCntrl::Transparent; + it->msgType()->setBack(back); + + tmp.sprintf("Icon%d",it->optionId()); + int ico = cfg.readIntEntry(tmp,it->msgType()->pixId()); + if(ico < 0 || ico >= KVI_NUM_SMALL_ICONS)ico = 0; + it->msgType()->setPixId(ico); + + tmp.sprintf("Log%d",it->optionId()); + bool bLog = cfg.readBoolEntry(tmp,it->msgType()->logEnabled()); + it->msgType()->enableLogging(bLog); + + tmp.sprintf("Level%d",it->optionId()); + int iLevel = cfg.readIntEntry(tmp,it->msgType()->level()); + it->msgType()->setLevel(iLevel); + + m_pListView->repaint(m_pListView->visualItemRect(it)); + } + } +} + +#ifndef COMPILE_USE_STANDALONE_MOC_SOURCES +#include "m_OptionsWidget_message.moc" +#endif //!COMPILE_USE_STANDALONE_MOC_SOURCES |
