// 一开始把图片添加到每个block上,然后排列到mainlayout上面 void BlockAreaCatch::set_block_area() { mainLayout = new QVBoxLayout(this); hLayout = new QHBoxLayout(); QLabel *text = new QLabel("剩余时间: "); QFont labelFont; labelFont.setPointSize(14); text->setFont(labelFont); bar = new QProgressBar(); bar->resize(600, 30); hLayout->addWidget(text); hLayout->addWidget(bar); gridLayout = new QGridLayout(); for(int i = 0; i < myRow; ++i){ for(int j = 0; j < myColumn; ++j){ Block *bb = new Block; w = bb->width(); h = bb->height(); bb->setNumber(i, j); originalState(bb); bb->setPixmap(QPixmap(":/image/0.png")); gridLayout->addWidget(bb, i, j, Qt::AlignCenter); connect(bb, SIGNAL(userAction(onePointPosition)), this, SLOT(checkIt(onePointPosition))); } } mainLayout->addLayout(hLayout); mainLayout->addLayout(gridLayout); bar->setMaximum(counter); timer.setInterval(100); connect(&timer, SIGNAL(timeout()), this, SLOT(updateProgressbar())); timer.start(); }
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); setupSceneStateTransitions(); connect(&scene, SIGNAL(error(QString)), this, SLOT(handleError(QString))); connect(&scene, SIGNAL(warning(QString)), this, SLOT(handleWarning(QString))); connect(&scene, SIGNAL(notice(QString)), this, SLOT(handleNotice(QString))); connect(&score, SIGNAL(error(QString)), this, SLOT(handleError(QString))); connect(&score, SIGNAL(warning(QString)), this, SLOT(handleWarning(QString))); connect(&score, SIGNAL(notice(QString)), this, SLOT(handleNotice(QString))); connect(&scene, SIGNAL(userAction(UserAction)), &score, SLOT(userAction(UserAction))); connect(&score, SIGNAL(changed(ScoreChange)), &scene, SLOT(scoreChange(ScoreChange))); connect((ui->VoiceList), SIGNAL(userAction(UserAction)), &score, SLOT(userAction(UserAction))); connect(&score, SIGNAL(changed(ScoreChange)), (ui->VoiceList), SLOT(scoreChange(ScoreChange))); connect(ui->properSpinBox, SIGNAL(userAction(UserAction)), &score, SLOT(userAction(UserAction))); connect(&score, SIGNAL(changed(ScoreChange)), ui->properSpinBox, SLOT(scoreChanged(ScoreChange))); connect((ui->VoiceList), SIGNAL(voiceCheckedSignal(IdType,bool)), &scene, SLOT(voiceVisible(IdType,bool))); connect((ui->VoiceList), SIGNAL(voiceSelectedSignal(IdType)), &scene, SLOT(selectVoice(IdType))); ui->systemView->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); ui->systemView->setScene(&scene); }
void psClientCharManager::SetTarget(GEMClientObject *newTarget, const char *action, bool notifyServer) { if(!lockedTarget) { if (target != newTarget) { target = newTarget; GEMClientActor* gemActor = dynamic_cast<GEMClientActor*>(newTarget); if (gemActor) PawsManager::GetSingleton().Publish("sTargetName",gemActor->GetName(false) ); else { PawsManager::GetSingleton().Publish("sTargetName",target?target->GetName():"" ); PawsManager::GetSingleton().Publish("fVitalValue0:Target",0); } } // delete the old target effect psengine->GetEffectManager()->DeleteEffect(targetEffect); targetEffect = 0; EID mappedID; // Action locations don't have effects if (target && target->GetObjectType() != GEM_ACTION_LOC) { // render the target effect csRef<iMeshWrapper> targetMesh = target->GetMesh(); if (targetMesh) targetEffect = psengine->GetEffectManager()->RenderEffect("target", csVector3(0,0,0), targetMesh); // notify the server of selection mappedID = target->GetEID(); } // if it's a message sent by server, there is no need to resend back the same information if (notifyServer) { psUserActionMessage userAction(0, mappedID, action); userAction.SendMessage(); } } }
void KviQueryWindow::ownAction(const QString & szBuffer) { if(!connection()) return; QString szTmpBuffer; //see bug ticket #220 if(KVI_OPTION_BOOL(KviOption_boolStripMircColorsInUserMessages)) szTmpBuffer = KviControlCodes::stripControlBytes(szBuffer); else szTmpBuffer = szBuffer; //my full mask as seen by other users QString szMyName = connection()->userInfo()->nickName(); QString szMyFullMask = szMyName + "!" + connection()->userInfo()->userName() + "@" + connection()->userInfo()->hostName(); QByteArray myFullMask = connection()->encodeText(szMyFullMask); QByteArray name = connection()->encodeText(windowName()); QByteArray data = encodeText(szTmpBuffer); /* max length of a PRIVMSG text. Max buffer length for our send is 512 byte, but we have to * remember that the server will prepend to the message our full mask and truncate the resulting * at 512 bytes again.. * So we have: * :[email protected] PRIVMSG #channel :text of message(CrLf) * [email protected]#channeltext of message * 512(rfc) -2(CrLf) -2(:) -3(spaces) -7(PRIVMSG) -8(\x01ACTION\x01) = 490 * usable bytes, excluding our full mask and the target name. */ int iMaxMsgLen = 490 - name.length() - myFullMask.length(); if(KVS_TRIGGER_EVENT_2_HALTED(KviEvent_OnMeAction, this, szTmpBuffer, windowName())) return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo() && cryptSessionInfo()->m_bDoEncrypt) { if(szTmpBuffer[0] != KviControlCodes::CryptEscape) { KviCString szEncrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(iMaxMsgLen); switch(cryptSessionInfo()->m_pEngine->encrypt(data.data(), szEncrypted)) { case KviCryptEngine::Encrypted: { if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, szEncrypted.ptr(), 0x01)) return; output(KVI_OUT_OWNACTIONCRYPTED, "\r!nc\r%Q\r %Q", &szMyName, &szTmpBuffer); } break; case KviCryptEngine::Encoded: { if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, szEncrypted.ptr(), 0x01)) return; // ugly, but we must redecode here QString szRedecoded = decodeText(szEncrypted.ptr()); output(KVI_OUT_OWNACTIONCRYPTED, "\r!nc\r%Q\r %Q", &szMyName, &szRedecoded); } break; default: // also case KviCryptEngine::EncryptError { QString szEngineError = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs("The encryption engine was unable to encrypt the current message (%Q): %Q, no data sent to the server"), &szBuffer, &szEngineError); } } userAction(szMyName, KVI_USERACTION_ACTION); return; } else { //eat the escape code szTmpBuffer.remove(0, 1); data = encodeText(szTmpBuffer); } } #endif //COMPILE_CRYPT_SUPPORT if(!connection()->sendFmtData("PRIVMSG %s :%cACTION %s%c", name.data(), 0x01, data.data(), 0x01)) return; output(KVI_OUT_OWNACTION, "\r!nc\r%Q\r %Q", &szMyName, &szTmpBuffer); m_pUserListView->userAction(szMyName, KVI_USERACTION_ACTION); }
void KviQueryWindow::ownMessage(const QString & szBuffer, bool bUserFeedback) { if(!connection()) { outputNoFmt(KVI_OUT_SYSTEMWARNING, __tr2qs("This query has no active targets, no message sent")); return; } //my full mask as seen by other users QString szTmpMask = connection()->userInfo()->nickName() + "!" + connection()->userInfo()->userName() + "@" + connection()->userInfo()->hostName(); QByteArray szMyFullMask = connection()->encodeText(szTmpMask); //target name QByteArray szName = connection()->encodeText(windowName()); //message QByteArray szData = encodeText(szBuffer); const char * pcData = szData.data(); /* max length of a PRIVMSG text. Max buffer length for our sszEnd is 512 byte, but we have to * remember that the server will prepszEnd to the message our full mask and truncate the resulting * at 512 bytes again.. * So we have: * :[email protected] PRIVMSG #channel :text of message(CrLf) * [email protected]#channeltext of message * 512(rfc) -2(CrLf) -2(:) -3(spaces) -7(PRIVMSG) = 498 * usable bytes, excluding our full mask and the target name. */ int iMaxMsgLen = 498 - szName.length() - szMyFullMask.length(); // our copy of the message QString szTmpBuffer(szBuffer); if(!pcData) return; #ifdef COMPILE_CRYPT_SUPPORT if(cryptSessionInfo()) { if(cryptSessionInfo()->m_bDoEncrypt) { if(*pcData != KviControlCodes::CryptEscape) { KviCString szEncrypted; cryptSessionInfo()->m_pEngine->setMaxEncryptLen(500 - szName.length()); switch(cryptSessionInfo()->m_pEngine->encrypt(pcData, szEncrypted)) { case KviCryptEngine::Encrypted: if(!connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szEncrypted.ptr())) return; if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSGCRYPTED, QString(), QString(), QString(), szBuffer, KviConsoleWindow::NoNotifications); break; case KviCryptEngine::Encoded: { if(!connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szEncrypted.ptr())) return; if(bUserFeedback) { // ugly,but we must redecode here QString szRedecoded = decodeText(szEncrypted.ptr()); m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szRedecoded, KviConsoleWindow::NoNotifications); } } break; default: // also case KviCryptEngine::EncryptError { QString szEngineError = cryptSessionInfo()->m_pEngine->lastError(); output(KVI_OUT_SYSTEMERROR, __tr2qs("The encryption engine was unable to encrypt the current message (%Q): %s, no data sent to the server"), &szBuffer, &szEngineError); } break; } userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); return; } else { //eat the escape code pcData++; szTmpBuffer.remove(0, 1); //let the normal function do it } } } #endif if(szData.length() > iMaxMsgLen) { /* Multi message; we want to split the message, preferably on a word boundary, * and sszEnd each message part as a different PRIVMSG * Due to encoding stuff, this is frikin'time eater */ QTextEncoder * pEncoder = makeEncoder(); // our temp encoder QByteArray szTmp; // used to calculate the length of an encoded message int iPos; // contains the index where to truncate szTmpBuffer int iC; // cycles counter (debugging/profiling purpose) float fPosDiff; // optimization internal; aggressivity factor QString szCurSubString; // truncated parts as reported to the user // run until we've something remaining in the message while(szTmpBuffer.length()) { // init counters iPos = szTmpBuffer.length(); iC = 0; // first part (optimization): quickly find an high index that is _surely_lesser_ // than the correct one while(1) { iC++; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); if(szTmp.length() <= iMaxMsgLen) break; //if szTmp.length() == 0 we already have break'ed out from here, // so we can safely use it as a divisor fPosDiff = (float)iMaxMsgLen / (float)szTmp.length(); iPos = (int)(iPos * fPosDiff); // cut the string at each cycle //printf("OPTIMIZATION: fPosDiff %f, iPos %d\n", fPosDiff, iPos); } //printf("Multi message: %d optimization cyles", iC); // now, do it the simple way: increment our index until we perfectly fit into the // available space while(1) { iC++; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); // perfect match if(iPos == szTmpBuffer.length()) break; if(szTmp.length() > iMaxMsgLen) { // overflowed.. last one was the good one iPos--; szTmp = pEncoder->fromUnicode(szTmpBuffer.left(iPos)); break; } else { //there's still free space.. add another char iPos++; } } //printf(", finished at %d cycles, truncated at pos %d\n", iC, iPos); //prepare the feedback string for the user szCurSubString = szTmpBuffer.left(iPos); //sszEnd the string to the server if(connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), szTmp.data())) { //feeedback the user if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szCurSubString, KviConsoleWindow::NoNotifications); userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); } else { // skipped a part in this multi message.. we don't want to continue return; } // remove the sent part of the string szTmpBuffer.remove(0, iPos); //printf("Sent %d chars, %d remaining in the Qstring\n",iPos, szTmpBuffer.length()); } } else { if(connection()->sendFmtData("PRIVMSG %s :%s", szName.data(), pcData)) { if(bUserFeedback) m_pConsole->outputPrivmsg(this, KVI_OUT_OWNPRIVMSG, QString(), QString(), QString(), szTmpBuffer, KviConsoleWindow::NoNotifications); userAction(connection()->currentNickName(), KVI_USERACTION_PRIVMSG); } } }