void KviTopicWidget::switchMode() { int iMaxLen=-1; QObject * w = parent(); QString szModes; bool bCanEdit = true; while(w) { if(w->inherits("KviChannelWindow")) { KviChannelWindow *chan = ((KviChannelWindow *)w); iMaxLen = chan->connection()->serverInfo()->maxTopicLen(); chan->getChannelModeString(szModes); if(chan->plainChannelMode().contains('t') && !( chan->isMeHalfOp(true) || chan->connection()->userInfo()->hasUserMode('o') || chan->connection()->userInfo()->hasUserMode('O') ) ) { bCanEdit=false; } break; } w = w->parent(); } if(m_pInput == 0) { m_pInput = new KviInputEditor(this,m_pKviChannelWindow); m_pInput->setObjectName("topicw_inputeditor"); m_pInput->setReadOnly(!bCanEdit); if(iMaxLen>0) m_pInput->setMaxBufferSize(iMaxLen); m_pInput->setGeometry(0,0,width() - (height() << 2)+height(),height()); m_pInput->setText(m_szTopic); connect(m_pInput,SIGNAL(enterPressed()),this,SLOT(acceptClicked())); connect(m_pInput,SIGNAL(escapePressed()),this,SLOT(discardClicked())); m_pInput->installEventFilter(this); m_pHistory = new QPushButton(this); m_pHistory->setObjectName("topicw_historybutton"); m_pHistory->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KviIconManager::History)))); m_pHistory->setGeometry(width() - (height() << 2)+height(),0,height(),height()); KviTalToolTip::add(m_pHistory,__tr2qs("History")); m_pHistory->show(); connect(m_pHistory,SIGNAL(clicked()),this,SLOT(historyClicked())); m_pAccept = new QPushButton(this); m_pAccept->setObjectName("topicw_acceptbutton"); m_pAccept->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Accept)))); m_pAccept->setGeometry(width() - (height() << 1),0,height(),height()); m_pAccept->setEnabled(bCanEdit); m_pAccept->show(); KviTalToolTip::add(m_pAccept,__tr2qs("Commit changes")); connect(m_pAccept,SIGNAL(clicked()),this,SLOT(acceptClicked())); m_pDiscard = new QPushButton(this); m_pDiscard->setObjectName("topicw_discardbutton"); m_pDiscard->setIcon(QIcon(*(g_pIconManager->getSmallIcon(KviIconManager::Discard)))); m_pDiscard->setGeometry(width() - height(),0,height(),height()); KviTalToolTip::add(m_pDiscard,__tr2qs("Discard changes")); m_pDiscard->show(); connect(m_pDiscard,SIGNAL(clicked()),this,SLOT(discardClicked())); m_pInput->home(); m_pInput->show(); m_pInput->setFocus(); m_pLabel->hide(); } else { deactivate(); } }
void KviIrcView::doLinkToolTip(const QRect &rct,QString &linkCmd,QString &linkText) { if(linkCmd.isEmpty())return; QString szCmd(linkCmd); szCmd.remove(0,1); QString tip; switch(linkCmd[0].unicode()) { case 'u': // url link { if(!KVI_OPTION_BOOL(KviOption_boolEnableUrlLinkToolTip)) return; tip = "<table width=\"100%\">" \ "<tr><td valign=\"center\"><img src=\"" + g_pIconManager->getSmallIconResourceName(KviIconManager::Url) + "\"><u><p style=\"white-space:pre;color:#0022FF\">"; if(linkText.length() > 50) { tip += linkText.left(47); tip += "..."; } else { tip += linkText; } tip+="</p></u></td></tr><tr><td><hr>"; // Check clicks' number if(KVI_OPTION_UINT(KviOption_uintUrlMouseClickNum) == 1) tip += __tr2qs("Click to open this link"); else tip += __tr2qs("Double-click to open this link"); tip += "</td></tr></table>"; } break; case 'h': // host link { if(!KVI_OPTION_BOOL(KviOption_boolEnableHostLinkToolTip)) return; tip = "<table width=\"100%\">" \ "<tr><td valign=\"center\"><img src=\"" + g_pIconManager->getSmallIconResourceName(KviIconManager::Server) + "\"><u><p style=\"white-space:pre;color:#0022FF\">"; if(linkText.length() > 50) { tip += linkText.left(47); tip += "..."; } else { tip += linkText; } tip+="</p></u></td></tr><tr><td><hr>"; if(linkText.indexOf('*') != -1) { if(linkText.length() > 1)tip += __tr2qs("Unable to look up hostname: hostname appears to be masked"); else tip += __tr2qs("Unable to look up hostname: unknown host"); } else { tip += __tr2qs("Double-click to look up this hostname<br>Right-click to view other options"); } tip += "</td></tr></table>"; } break; case 's': // server link { if(!KVI_OPTION_BOOL(KviOption_boolEnableServerLinkToolTip)) return; // FIXME: #warning "Spit out some server info...hub ?...registered ?" tip = "<table width=\"100%\">" \ "<tr><td valign=\"center\"><img src=\"" + g_pIconManager->getSmallIconResourceName(KviIconManager::Server) + "\"><u><p style=\"white-space:pre;color:#0022FF\">"; if(linkText.length() > 50) { tip += linkText.left(47); tip += "..."; } else { tip += linkText; } tip+="</p></u></td></tr><tr><td><hr>"; if(linkText.indexOf('*') != -1) { if(linkText.length() > 1)tip += __tr2qs("Server appears to be a network hub<br>"); else tip += __tr2qs("Unknown server<br>"); // might happen... } tip.append(__tr2qs("Double-click to read the MOTD<br>Right-click to view other options")); tip += "</td></tr></table>"; } break; case 'm': // mode link { if(!KVI_OPTION_BOOL(KviOption_boolEnableModeLinkToolTip)) return; if((linkCmd.length() > 2) && (m_pKviWindow->type() == KviWindow::Channel)) { if(((KviChannelWindow *)m_pKviWindow)->isMeOp()) { QString part = linkCmd.mid(1); KviQString::appendFormatted(tip,QString("<b>mode %Q %Q</b>"),&(m_pKviWindow->windowName()),&part); } else { // I'm not op...no way tip = __tr2qs("You're not an operator: you may not change channel modes"); } } } break; case 'n': // nick link { if(!KVI_OPTION_BOOL(KviOption_boolEnableNickLinkToolTip)) return; if(console()) { if(console()->connection()) { KviIrcUserEntry * e = console()->connection()->userDataBase()->find(linkText); if(e) { QString buffer; console()->getUserTipText(linkText,e,buffer); tip = buffer; } else tip = QString(__tr2qs("Nothing known about %1")).arg(linkText); } else tip = QString(__tr2qs("Nothing known about %1 (no connection)")).arg(linkText); } } break; case 'c': // channel link { if(!KVI_OPTION_BOOL(KviOption_boolEnableChannelLinkToolTip)) return; if(console() && console()->connection()) { QString szChan = linkText; QString buf; tip = "<img src=\"" + g_pIconManager->getSmallIconResourceName(KviIconManager::Channel) + "\"> "; if(szCmd.length()>0) szChan=szCmd; KviChannelWindow * c = console()->connection()->findChannel(szChan); QString szUrl; if(c) { QString chanMode; c->getChannelModeString(chanMode); QString topic = KviControlCodes::stripControlBytes(c->topicWidget()->topic()); KviIrcUrl::join(szUrl,console()->connection()->target()->server()); szUrl.append(szChan); buf = QString(__tr2qs("<b>%1</b><u><p style=\"white-space:pre;color:#0022FF\">" "%2</p></u>+%3 (%4 users)<hr>%5")).arg(KviQString::toHtmlEscaped(szChan),KviQString::toHtmlEscaped(szUrl),KviQString::toHtmlEscaped(chanMode)).arg(c->count()).arg(KviQString::toHtmlEscaped(topic)); } else { KviIrcUrl::join(szUrl,console()->connection()->target()->server()); szUrl.append(szChan); buf = QString(__tr2qs("<b>%1</b><u><p style=\"white-space:pre;color:#0022FF\">" "%2</p></u><hr>Double-click to join %3<br>Right-click to view other options")).arg(KviQString::toHtmlEscaped(szChan),KviQString::toHtmlEscaped(szUrl),KviQString::toHtmlEscaped(szChan)); } tip += buf; } } break; default: { if(!KVI_OPTION_BOOL(KviOption_boolEnableEscapeLinkToolTip)) return; QString dbl,rbt,txt,mbt; getLinkEscapeCommand(dbl,linkCmd,"[!dbl]"); getLinkEscapeCommand(rbt,linkCmd,"[!rbt]"); getLinkEscapeCommand(txt,linkCmd,"[!txt]"); getLinkEscapeCommand(mbt,linkCmd,"[!mbt]"); if(!txt.isEmpty())tip = txt; if(tip.isEmpty() && (!dbl.isEmpty())) { if(!tip.isEmpty())tip.append("<hr>"); KviQString::appendFormatted(tip,__tr2qs("<b>Double-click:</b><br>%Q"),&dbl); } if(tip.isEmpty() && (!mbt.isEmpty())) { if(!tip.isEmpty())tip.append("<hr>"); KviQString::appendFormatted(tip,__tr2qs("<b>Middle-click:</b><br>%Q"),&mbt); } if(tip.isEmpty() && (!rbt.isEmpty())) { if(!tip.isEmpty())tip.append("<hr>"); KviQString::appendFormatted(tip,__tr2qs("<b>Right-click:</b><br>%Q"),&rbt); } } break; } if(tip.isEmpty())return; m_pToolTip->doTip(rct,tip); }