//============================================================================= // // 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 #include #include #include #include #if !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MINGW) #include // 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(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(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 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)); } } }