void ChatCtrl::FormatChatLine(const tstring& sMyNick, tstring& sText, CHARFORMAT2& cf, bool isMyMessage, const tstring& sAuthor, LONG lSelBegin, bool bUseEmo) { // Set text format tstring sMsgLower(sText.length(), NULL); std::transform(sText.begin(), sText.end(), sMsgLower.begin(), _totlower); LONG lSelEnd = lSelBegin + sText.size(); SetSel(lSelBegin, lSelEnd); SetSelectionCharFormat(isMyMessage ? WinUtil::m_ChatTextMyOwn : cf); // highlight all occurences of my nick long lMyNickStart = -1, lMyNickEnd = -1; size_t lSearchFrom = 0; tstring sNick(sMyNick.length(), NULL); std::transform(sMyNick.begin(), sMyNick.end(), sNick.begin(), _totlower); bool found = false; while((lMyNickStart = sMsgLower.find(sNick, lSearchFrom)) != tstring::npos) { lMyNickEnd = lMyNickStart + (long)sNick.size(); SetSel(lSelBegin + lMyNickStart, lSelBegin + lMyNickEnd); SetSelectionCharFormat(WinUtil::m_TextStyleMyNick); lSearchFrom = lMyNickEnd; found = true; } if(found) { if( !SETTING(CHATNAMEFILE).empty() && !BOOLSETTING(SOUNDS_DISABLED) && !sAuthor.empty() && (stricmp(sAuthor.c_str(), sNick) != 0)) { ::PlaySound(Text::toT(SETTING(CHATNAMEFILE)).c_str(), NULL, SND_FILENAME | SND_ASYNC); } } // highlight all occurences of favourite users' nicks FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); for(FavoriteManager::FavoriteMap::const_iterator i = ul.begin(); i != ul.end(); ++i) { const FavoriteUser& pUser = i->second; lSearchFrom = 0; sNick = Text::toT(pUser.getNick()); std::transform(sNick.begin(), sNick.end(), sNick.begin(), _totlower); while((lMyNickStart = sMsgLower.find(sNick, lSearchFrom)) != tstring::npos) { lMyNickEnd = lMyNickStart + (long)sNick.size(); SetSel(lSelBegin + lMyNickStart, lSelBegin + lMyNickEnd); SetSelectionCharFormat(WinUtil::m_TextStyleFavUsers); lSearchFrom = lMyNickEnd; } } // Links and smilies FormatEmoticonsAndLinks(sText, sMsgLower, lSelBegin, bUseEmo); }
FavoriteUsers::FavoriteUsers(QWidget *parent) : QWidget(parent) { setupUi(this); setUnload(false); model = new FavoriteUsersModel(this); treeView->setContextMenuPolicy(Qt::CustomContextMenu); treeView->installEventFilter(this); treeView->setModel(model); treeView->header()->setContextMenuPolicy(Qt::CustomContextMenu); treeView->header()->restoreState(QByteArray::fromBase64(WSGET(WS_FAVUSERS_STATE).toAscii())); treeView->setSortingEnabled(true); connect(treeView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu())); connect(treeView->header(), SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotHeaderMenu())); connect(checkBox_AUTOGRANT, SIGNAL(toggled(bool)), this, SLOT(slotAutoGrant(bool))); connect(this, SIGNAL(coreUserAdded(VarMap)), this, SLOT(addUser(VarMap)), Qt::QueuedConnection); connect(this, SIGNAL(coreUserRemoved(QString)), this, SLOT(remUser(QString)), Qt::QueuedConnection); connect(this, SIGNAL(coreStatusChanged(QString,QString)), this, SLOT(updateUser(QString,QString)), Qt::QueuedConnection); WulforSettings *WS = WulforSettings::getInstance(); connect(WS, SIGNAL(strValueChanged(QString,QString)), this, SLOT(slotSettingsChanged(QString,QString))); FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); VarMap params; for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { dcpp::FavoriteUser &u = i->second; if (WBGET(WB_FAVUSERS_AUTOGRANT)){ u.setFlag(FavoriteUser::FLAG_GRANTSLOT); FavoriteManager::getInstance()->setAutoGrant(u.getUser(), true); } getParams(params, u); addUser(params); } checkBox_AUTOGRANT->setChecked(WBGET(WB_FAVUSERS_AUTOGRANT)); FavoriteManager::getInstance()->addListener(this); ArenaWidget::setState( ArenaWidget::Flags(ArenaWidget::state() | ArenaWidget::Singleton | ArenaWidget::Hidden) ); }
LRESULT UsersFrame::onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { CreateSimpleStatusBar(ATL_IDS_IDLEMESSAGE, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SBARS_SIZEGRIP); ctrlStatus.Attach(m_hWndStatusBar); ctrlUsers.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | LVS_REPORT | LVS_SHOWSELALWAYS , WS_EX_CLIENTEDGE, IDC_USERS); ctrlUsers.SetExtendedListViewStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT); ctrlUsers.SetBkColor(WinUtil::bgColor); ctrlUsers.SetTextBkColor(WinUtil::bgColor); ctrlUsers.SetTextColor(WinUtil::textColor); // Create listview columns WinUtil::splitTokens(columnIndexes, SETTING(USERSFRAME_ORDER), COLUMN_LAST); WinUtil::splitTokens(columnSizes, SETTING(USERSFRAME_WIDTHS), COLUMN_LAST); for(int j=0; j<COLUMN_LAST; j++) { ctrlUsers.InsertColumn(j, CTSTRING_I(columnNames[j]), LVCFMT_LEFT, columnSizes[j], j); } ctrlUsers.SetColumnOrderArray(COLUMN_LAST, columnIndexes); ctrlUsers.setSortColumn(COLUMN_NICK); usersMenu.CreatePopupMenu(); appendUserItems(usersMenu); usersMenu.AppendMenu(MF_SEPARATOR); usersMenu.AppendMenu(MF_STRING, IDC_EDIT, CTSTRING(PROPERTIES)); usersMenu.AppendMenu(MF_STRING, IDC_REMOVE, CTSTRING(REMOVE)); FavoriteManager::getInstance()->addListener(this); FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); ctrlUsers.SetRedraw(FALSE); for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { addUser(i->second); } ctrlUsers.SetRedraw(TRUE); startup = false; bHandled = FALSE; return TRUE; }
LRESULT UsersFrame::onCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled) { CreateSimpleStatusBar(ATL_IDS_IDLEMESSAGE, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | SBARS_SIZEGRIP); ctrlStatus.Attach(m_hWndStatusBar); ctrlUsers.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_HSCROLL | WS_VSCROLL | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS, WS_EX_CLIENTEDGE, IDC_USERS); ctrlUsers.SetExtendedListViewStyle(LVS_EX_LABELTIP | LVS_EX_HEADERDRAGDROP | LVS_EX_CHECKBOXES | LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP); images.CreateFromImage(IDB_FAVSTATES, 16, 3, CLR_DEFAULT, IMAGE_BITMAP, LR_CREATEDIBSECTION | LR_SHARED); ctrlUsers.SetImageList(images, LVSIL_SMALL); ctrlUsers.SetBkColor(WinUtil::bgColor); ctrlUsers.SetTextBkColor(WinUtil::bgColor); ctrlUsers.SetTextColor(WinUtil::textColor); // Create listview columns WinUtil::splitTokens(columnIndexes, SETTING(USERSFRAME_ORDER), COLUMN_LAST); WinUtil::splitTokens(columnSizes, SETTING(USERSFRAME_WIDTHS), COLUMN_LAST); for(uint8_t j=0; j<COLUMN_LAST; j++) { ctrlUsers.InsertColumn(j, CTSTRING_I(columnNames[j]), LVCFMT_LEFT, columnSizes[j], j); } ctrlUsers.setColumnOrderArray(COLUMN_LAST, columnIndexes); ctrlUsers.setSortColumn(COLUMN_NICK); FavoriteManager::getInstance()->addListener(this); SettingsManager::getInstance()->addListener(this); FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); ctrlUsers.SetRedraw(FALSE); for(FavoriteManager::FavoriteMap::const_iterator i = ul.begin(); i != ul.end(); ++i) { addUser(i->second); } ctrlUsers.SetRedraw(TRUE); startup = false; bHandled = FALSE; return TRUE; }
QVariant FavoriteUsersModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.column() > columnCount(QModelIndex())) return QVariant(); FavoriteUserItem *item = static_cast<FavoriteUserItem*>(index.internalPointer()); switch(role) { case Qt::DecorationRole: // icon { if (index.column() == 0){ FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { const dcpp::FavoriteUser &u = i->second; if (_q(u.getUser()->getCID().toBase32()) == item->cid){ if (u.isSet(FavoriteUser::FLAG_GRANTSLOT)) return WICON(WulforUtil::eiBALL_GREEN).scaled(16, 16); } } } break; } case Qt::DisplayRole: return item->data(index.column()); case Qt::TextAlignmentRole: break; case Qt::ForegroundRole: break; case Qt::ToolTipRole: break; case Qt::CheckStateRole: break; } return QVariant(); }
UsersFrame::UsersFrame(dwt::TabView* mdiParent) : BaseType(mdiParent, T_("Favorite Users"), IDH_FAVUSERS, IDR_USERS), users(0), startup(true) { { WidgetUsers::Seed cs; cs.lvStyle |= LVS_EX_CHECKBOXES; users = addChild(cs); addWidget(users); users->createColumns(WinUtil::getStrings(columnNames)); users->setColumnOrder(WinUtil::splitTokens(SETTING(HUBFRAME_ORDER), columnIndexes)); users->setColumnWidths(WinUtil::splitTokens(SETTING(HUBFRAME_WIDTHS), columnSizes)); users->setSort(COLUMN_NICK); users->onDblClicked(std::tr1::bind(&UsersFrame::handleGetList, this)); users->onKeyDown(std::tr1::bind(&UsersFrame::handleKeyDown, this, _1)); users->onRaw(std::tr1::bind(&UsersFrame::handleItemChanged, this, _2), dwt::Message(WM_NOTIFY, LVN_ITEMCHANGED)); users->onContextMenu(std::tr1::bind(&UsersFrame::handleContextMenu, this, _1)); } FavoriteManager::FavoriteMap ul = FavoriteManager::getInstance()->getFavoriteUsers(); HoldRedraw hold(users); for(FavoriteManager::FavoriteMap::iterator i = ul.begin(); i != ul.end(); ++i) { addUser(i->second); } FavoriteManager::getInstance()->addListener(this); initStatus(); layout(); startup = false; onSpeaker(std::tr1::bind(&UsersFrame::handleSpeaker, this, _1, _2)); }