📄 mainwin.cpp
字号:
#if (QT_VERSION > 0x030102) qApp->setStyle(new QWindowsXPStyle);#else qApp->setStyle(new QWindowsStyle);#endif break; default: qWarning("Unrecognized style!"); }#endif*/ slot_updateFont(); QToolTip::setGloballyEnabled(true); // install an event filter qApp->installEventFilter(this);}ClientWindow::~ClientWindow(){/* delete qgoif; delete setting; delete telnetConnection; delete parser; delete statusUsers; delete statusBar;*/}void ClientWindow::initStatusBar(QWidget* /*parent*/){// statusBar = new QStatusBar(parent);// statusBar->resize(-1, 20); statusBar()->show(); statusBar()->setSizeGripEnabled(false); statusBar()->message(tr("Ready.")); // Normal indicator // Standard Text instead of "message" cause WhatsThisButten overlaps statusMessage = new QLabel(statusBar()); statusMessage->setAlignment(AlignCenter | SingleLine); statusMessage->setText(""); statusBar()->addWidget(statusMessage, 0, true); // Permanent indicator/* // What's this statusWhatsThis = new QLabel(statusBar); statusWhatsThis->setAlignment(AlignCenter | SingleLine); statusWhatsThis->setText("WHATSTHIS"); statusBar->addWidget(statusWhatsThis, 0, true); // Permanent indicator QWhatsThis::whatsThisButton(statusWhatsThis);*/ // The users widget statusUsers = new QLabel(statusBar()); statusUsers->setAlignment(AlignCenter | SingleLine); statusUsers->setText(" P: 0 / 0 "); statusBar()->addWidget(statusUsers, 0, true); // Permanent indicator QToolTip::add(statusUsers, tr("Current online players / watched players")); QWhatsThis::add(statusUsers, tr("Displays the number of current online players\nand the number of online players you are watching.\nA player you are watching has an entry in the 'watch player:' field.")); // The games widget statusGames = new QLabel(statusBar()); statusGames->setAlignment(AlignCenter | SingleLine); statusGames->setText(" G: 0 / 0 "); statusBar()->addWidget(statusGames, 0, true); // Permanent indicator QToolTip::add(statusGames, tr("Current online games / observed games + matches")); QWhatsThis::add(statusGames, tr("Displays the number of games currently played on this server and the number of games you are observing or playing")); // The server widget statusServer = new QLabel(statusBar()); statusServer->setAlignment(AlignCenter | SingleLine); statusServer->setText(" OFFLINE "); statusBar()->addWidget(statusServer, 0, true); // Permanent indicator QToolTip::add(statusServer, tr("Current server")); QWhatsThis::add(statusServer, tr("Displays the current server's name or OFFLINE if you are not connected to the internet.")); // The channel widget statusChannel = new QLabel(statusBar()); statusChannel->setAlignment(AlignCenter | SingleLine); statusChannel->setText(""); statusBar()->addWidget(statusChannel, 0, true); // Permanent indicator QToolTip::add(statusChannel, tr("Current channels and users")); QWhatsThis::add(statusChannel, tr("Displays the current channels you are in and the number of users inthere.\nThe tooltip text contains the channels' title and users' names")); // Online Time statusOnlineTime = new QLabel(statusBar()); statusOnlineTime->setAlignment(AlignCenter | SingleLine); statusOnlineTime->setText(" 00:00 "); statusBar()->addWidget(statusOnlineTime, 0, true); // Permanent indicator QToolTip::add(statusOnlineTime, tr("Online Time")); QWhatsThis::add(statusOnlineTime, tr("Displays the current online time.\n(A) -> auto answer\n(Hold) -> hold the line"));}void ClientWindow::timerEvent(QTimerEvent* e){ // some variables for forcing send buffer and keep line established// static int counter = 3599; static int holdTheLine = true; static int tnwait = 0;// static int statusCnt = 0; static QString statusTxt = QString(); static int imagecounter = 0; //qDebug( "timer event, id %d", e->timerId() ); if (e->timerId() == seekButtonTimer) { imagecounter = (imagecounter+1) % 4; toolSeek->setIconSet(QIconSet::QIconSet(seekingIcon[imagecounter])); return; } if (tn_ready) { // case: ready to send tnwait = 0; } else if (tnwait < 2) { //qDebug(QString("%1: HoldTheLine SET: something has been sent").arg(statusOnlineTime->text())); // case: not ready to send, but maybe waiting for READY message tnwait++; // something was sent, so reset counter resetCounter(); holdTheLine = true; autoAwayMessage = false; }/* else if (!tn_active) { qDebug("---> sending forced!!!"); // case: not ready to send, waiting too long -> force sending tnwait = 0; set_tn_ready(); } else qDebug("---> not forced because of tn_active");*/ // show status bar text for 5 seconds/* if (statusTxt != statusMessage->text()) { statusTxt = statusMessage->text(); statusCnt = 5; } if (statusCnt-- == 0) statusMessage->setText("");*/ if (counter % 300 == 0) { // 5 mins away -> set auto answering autoAwayMessage = true; if (counter == 0) { // send "ayt" every half hour anyway // new: reset timer after one hour of idle state // -> if not observing a game! //qDebug(QString("%1 -> HoldTheLine: status = %2").arg(statusOnlineTime->text()).arg(holdTheLine)); if (holdTheLine) sendcommand("ayt", false); // 12*5 min resetCounter(); if (myAccount->num_observedgames == 0) { // nothing observing holdTheLine = false;//qDebug(QString("%1: HoldTheLine END!").arg(statusOnlineTime->text())); } else {//qDebug(QString("%1: HoldTheLine LENGTHENED: observing game...").arg(statusOnlineTime->text())); } } else if (myAccount->get_gsname() == IGS && holdTheLine) { sendcommand("ayt", false); qDebug(QString("%1 -> ayt").arg(statusOnlineTime->text())); } } counter--; // display online time onlineCount++; int hr = onlineCount/3600; int min = (onlineCount % 3600)/60; int sec = onlineCount % 60; QString pre = " "; QString min_; QString sec_; if (min < 10) min_ = "0" + QString::number(min); else min_ = QString::number(min); if (sec < 10) sec_ = "0" + QString::number(sec); else sec_ = QString::number(sec); if (hr) pre += QString::number(hr) + "h "; statusOnlineTime->setText(pre + min_ + ":" + sec_ + " "); // some statistics QToolTip::remove(statusServer); QToolTip::add(statusServer, tr("Current server") + "\n" + tr("Bytes in:") + " " + QString::number(bytesIn) + "\n" + tr("Bytes out:") + " " + QString::number(bytesOut));// LineEdit_bytesIn->setText(QString::number(bytesIn));// LineEdit_bytesOut->setText(QString::number(bytesOut));// DEBUG ONLY BEGIN **** // DEBUG display remaining time hr = counter/3600; min = (counter % 3600)/60; sec = counter % 60; if (autoAwayMessage) pre = "(A) "; else pre = " "; if (min < 10) min_ = "0" + QString::number(min); else min_ = QString::number(min); if (sec < 10) sec_ = "0" + QString::number(sec); else sec_ = QString::number(sec); if (hr) pre += QString::number(hr) + "h "; statusMessage->setText(pre + min_ + ":" + sec_ + (holdTheLine ? " Hold" : " "));// DEBUG ONLY END ****}// slot_connect: emitted when connect button has toggledvoid ClientWindow::slot_connect(bool b){qDebug("connect %i", (int)b); if (b) { // create instance of telnetConnection if (!telnetConnection) qFatal("No telnetConnection!"); // connect to selected host telnetConnection->slotHostConnect(); } else { // disconnect telnetConnection->slotHostQuit(); }}// connection closedvoid ClientWindow::slot_connclosed(){ // no Timers in offline mode! killTimers(); // set to offline: myAccount->set_offline(); //pb_connect->setOn(FALSE); toolConnect->setOn(FALSE); seekMenu->clear(); slot_cancelSeek(); // clear channel prepare_tables(CHANNELS); // remove boards qgoif->set_initIF(); qDebug("slot_connclosed()"); qDebug(QString("%1 -> slot_connclosed()").arg(statusOnlineTime->text())); qgoif->get_qgo()->playConnectSound(); // show current Server name in status bar statusServer->setText(" OFFLINE "); // set menu Connect->setEnabled(true); Disconnect->setEnabled(false); toolConnect->setOn(false); toolConnect->setPixmap(disconnectedIcon); QToolTip::remove(toolConnect); QToolTip::add(toolConnect, tr("Connect with") + " " + cb_connect->currentText());}// close applicationvoid ClientWindow::saveSettings(){ // save setting int i = 0; for (Host *h = hostlist.first(); h != 0; h = hostlist.next()) { i++; setting->writeEntry("HOST" + QString::number(i) + "a", h->title()); setting->writeEntry("HOST" + QString::number(i) + "b", h->host()); setting->writeIntEntry("HOST" + QString::number(i) + "c", h->port()); setting->writeEntry("HOST" + QString::number(i) + "d", h->loginName()); setting->writeEntry("HOST" + QString::number(i) + "e", h->password()); setting->writeEntry("HOST" + QString::number(i) + "f", h->codec()); } while (setting->readEntry("HOST" + QString::number(++i) + "a")) { // delete unused entries setting->writeEntry("HOST" + QString::number(i) + "a", QString()); setting->writeEntry("HOST" + QString::number(i) + "b", QString()); setting->writeEntry("HOST" + QString::number(i) + "c", QString()); setting->writeEntry("HOST" + QString::number(i) + "d", QString()); setting->writeEntry("HOST" + QString::number(i) + "e", QString()); setting->writeEntry("HOST" + QString::number(i) + "f", QString()); } // set the user toolbar list i=0 ; QObjectList *bl = UserToolbar->queryList( "QToolButton" ,NULL,true,false); QToolButton *b0 ; for ( b0 = (QToolButton*)bl->first(); b0 != 0; b0 = (QToolButton*)bl->next()) { i++ ; setting->writeEntry("USER" + QString::number(i) + "_1",b0->textLabel()); setting->writeEntry("USER" + QString::number(i) + "_2",b0->caption()); setting->writeEntry("USER" + QString::number(i) + "_3",QToolTip::textFor (b0) ); setting->writeEntry("USER" + QString::number(i) + "_4",b0->iconText()); } while (setting->readEntry("USER" + QString::number(++i) + "_1")) { setting->writeEntry("USER" + QString::number(i) + "_1",QString()); setting->writeEntry("USER" + QString::number(i) + "_2",QString()); setting->writeEntry("USER" + QString::number(i) + "_3",QString()); setting->writeEntry("USER" + QString::number(i) + "_4",QString()); } // save current connection if at least one host exists if (!hostlist.isEmpty()) setting->writeEntry("ACTIVEHOST",cb_connect->currentText()); setting->writeEntry("CLIENTWINDOW", QString::number(pos().x()) + DELIMITER + QString::number(pos().y()) + DELIMITER + QString::number(size().width()) + DELIMITER + QString::number(size().height())); setting->writeEntry("CLIENTSPLITTER", QString::number(s1->sizes().first()) + DELIMITER + QString::number(s1->sizes().last()) + DELIMITER + QString::number(s2->sizes().first()) + DELIMITER + QString::number(s2->sizes().last()) + DELIMITER + QString::number(s3->sizes().first()) + DELIMITER + QString::number(s3->sizes().last())); if (DD) setting->writeEntry("DEBUGWINDOW", QString::number(DD->pos().x()) + DELIMITER + QString::number(DD->pos().y()) + DELIMITER + QString::number(DD->size().width()) + DELIMITER + QString::number(DD->size().height()));// DD = 0; if (menu_s.width() > 0) setting->writeEntry("MENUWINDOW", QString::number(menu_p.x()) + DELIMITER + QString::number(menu_p.y()) + DELIMITER + QString::number(menu_s.width()) + DELIMITER + QString::number(menu_s.height())); if (pref_s.width() > 0) setting->writeEntry("PREFWINDOW", QString::number(pref_p.x()) + DELIMITER + QString::number(pref_p.y()) + DELIMITER + QString::number(pref_s.width()) + DELIMITER + QString::number(pref_s.height())); setting->writeBoolEntry("EXTUSERINFO", extUserInfo); setting->writeIntEntry("WHO_1", whoBox1->currentItem()); setting->writeIntEntry("WHO_2", whoBox2->currentItem()); setting->writeBoolEntry("WHO_CB", whoOpenCheck->isChecked()); // write settings to file setting->saveSettings();}// close applicationvoid ClientWindow::quit(){ saveSettings(); qApp->quit();}// distribute text from telnet session and local commands to tablesvoid ClientWindow::sendTextToApp(const QString &txt){#if (QT_VERSION > 0x030006) static int store_sort_col = -1; static int store_games_sort_col = -1;#endif static bool player7active = false; // put text to parser InfoType it_ = parser->put_line(txt); // some statistics setBytesIn(txt.length()+2);// if (it_ != READY) // a input is being parsed -> wait until tn_active == false before sending new cmd// tn_active = true; // GAME7_END emulation: if (player7active && it_ != GAME7) { player7active = false; if (store_games_sort_col != -1) ListView_games->setSorting(store_games_sort_col); store_games_sort_col = -1; ListView_games->sort(); } switch (it_) { case READY: // ok, telnet is ready to receive commands// tn_active = false; currentCommand->txt=""; if (!tn_wait_for_tn_ready && !tn_ready) { QTimer::singleShot(200, this, SLOT(set_tn_ready())); tn_wait_for_tn_ready = true; } sendTextFromApp(NULL); case WS: // ready or white space -> return// currentCommand->txt=""; return; break; // echo entered command // echo server enter line case CMD: slot_message(txt); break; // set client mode case NOCLIENTMODE: set_sessionparameter("client", true); break; case YOUHAVEMSG: // normally no connection -> wait until logged in youhavemsg = true; break; case SERVERNAME:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -