📄 mainwin.cpp
字号:
/* * mainwin.cpp - qGoClient's main window (cont. in tables.cpp) */#include "clientwindow_gui.h"#include "mainwin.h"#include "defines.h"#include "maintable.h"#include "playertable.h"#include "gamestable.h"#include "gamedialog.h"#include "qgo_interface.h"#include "komispinbox.h"#include "icons.h"#include "igsconnection.h"#include "mainwindow.h"#include "qnewgamedlg.h"#include "./pics/clientpics.h"#include <qaction.h>#include <qdir.h>#include <qcombobox.h>#include <qcheckbox.h>#include <qtabwidget.h>#include <qlabel.h>#include <qlineedit.h>#include <qevent.h>#include <qstatusbar.h>#include <qmainwindow.h>#include <qtooltip.h>#include <qwhatsthis.h>#include <qvaluelist.h>#include <qpopupmenu.h>#include <qtextstream.h>#include <qeucjpcodec.h> #include <qjiscodec.h> #include <qsjiscodec.h>#include <qgbkcodec.h>#include <qeuckrcodec.h>#include <qtsciicodec.h>#include <qpalette.h>#include <qaccel.h>#include <qtoolbutton.h>#include <qiconset.h>#include <qpixmap.h>#include <qbuttongroup.h> #include <qobjectlist.h> #include <qlistbox.h> #include <qmovie.h> #include <qradiobutton.h>#ifndef QGO_NOSTYLES#include <qplatinumstyle.h>#include <qmotifstyle.h>#include <qmotifplusstyle.h>#include <qcdestyle.h>#include <qsgistyle.h>#endif#include <qptrlist.h>/* * Clientwindow = MainWidget */ClientWindow::ClientWindow(QMainWindow *parent, const char* name, WFlags fl) : ClientWindowGui( parent, name, fl ), Misc<QString>(){ prefsIcon= QPixmap::QPixmap(qembed_findImage("package_settings"));//QPixmap(ICON_PREFS);// infoIcon= QPixmap(ICON_GAMEINFO); exitIcon = QPixmap::QPixmap(qembed_findImage("exit"));//QPixmap(ICON_EXIT); fileNewboardIcon = QPixmap::QPixmap(qembed_findImage("newboard"));//QPixmap(ICON_FILENEWBOARD); fileNewIcon = QPixmap::QPixmap(qembed_findImage("filenew"));//QPixmap(ICON_FILENEW); fileOpenIcon = QPixmap::QPixmap(qembed_findImage("fileopen"));//QPixmap(ICON_FILEOPEN);// fileSaveIcon = QPixmap(ICON_FILESAVE);// fileSaveAsIcon = QPixmap(ICON_FILESAVEAS);// transformIcon = QPixmap(ICON_TRANSFORM);// charIcon = QPixmap(ICON_CHARSET); manualIcon = QPixmap::QPixmap(qembed_findImage("help"));//QPixmap(ICON_MANUAL);// autoplayIcon = QPixmap(ICON_AUTOPLAY); connectedIcon = QPixmap::QPixmap(qembed_findImage("connected"));//QPixmap(ICON_CONNECTED); disconnectedIcon = QPixmap::QPixmap(qembed_findImage("connect_no"));//QPixmap(ICON_DISCONNECTED); OpenIcon = QPixmap::QPixmap(qembed_findImage("open"));//QPixmap(ICON_OPEN); LookingIcon = QPixmap::QPixmap(qembed_findImage("looking"));//QPixmap(ICON_LOOKING); QuietIcon= QPixmap::QPixmap(qembed_findImage("quiet"));//QPixmap(ICON_QUIET); NotOpenIcon = QPixmap::QPixmap(qembed_findImage("not_open"));//QPixmap(ICON_NOT_OPEN); NotLookingIcon = QPixmap::QPixmap(qembed_findImage("not_looking"));//QPixmap(ICON_NOT_LOOKING); NotQuietIcon= QPixmap::QPixmap(qembed_findImage("not_quiet"));//QPixmap(ICON_NOT_QUIET); RefreshPlayersIcon = QPixmap::QPixmap(qembed_findImage("refresh_players"));//QPixmap(ICON_REFRESH_PLAYERS); RefreshGamesIcon = QPixmap::QPixmap(qembed_findImage("refresh_games"));//QPixmap(ICON_REFRESH_GAMES); ComputerPlayIcon = QPixmap::QPixmap(qembed_findImage("computerplay"));//QPixmap(ICON_COMPUTER_PLAY); qgoIcon = QPixmap::QPixmap(qembed_findImage("Bowl"));//QPixmap(ICON_COMPUTER_PLAY); NotSeekingIcon = QPixmap::QPixmap(qembed_findImage("not_seeking")); seekingIcon[0] = QPixmap::QPixmap(qembed_findImage("seeking1")); seekingIcon[1] = QPixmap::QPixmap(qembed_findImage("seeking2")); seekingIcon[2] = QPixmap::QPixmap(qembed_findImage("seeking3")); seekingIcon[3] = QPixmap::QPixmap(qembed_findImage("seeking4")); // init DODEBUG = false; DD = 0; setting->cw = this; setIcon(setting->image0); myAccount = new Account(this); defaultStyle = qApp->style().name() ; // this is very dirty : we do this because there seem to be no clean way to backtrack from MainWindow to the defaultStyle :-( setting->writeEntry("DEFAULT_STYLE",defaultStyle ) ; hostlist.setAutoDelete(true); cmd_count = 0; sendBuffer.setAutoDelete(true); currentCommand = new sendBuf("",0); resetCounter(); cmd_valid = false; tn_ready = false; tn_wait_for_tn_ready = false;// tn_active = false; extUserInfo = false; youhavemsg = false; playerListEmpty = true; gamesListSteadyUpdate = false; playerListSteadyUpdate = false; autoAwayMessage = false; watch = ";" + setting->readEntry("WATCH") + ";"; exclude = ";" + setting->readEntry("EXCLUDE") + ";"; // statistics bytesIn = 0; bytesOut = 0; seekButtonTimer = 0;// toolConnect = 0; // set focus, clear entry field cb_cmdLine->setFocus(); cb_cmdLine->clear(); cb_cmdLine->insertItem(""); // create instance of telnetConnection telnetConnection = new TelnetConnection(this); // create parser and connect signals parser = new Parser(); connect(parser, SIGNAL(signal_player(Player*, bool)), SLOT(slot_player(Player*, bool))); connect(parser, SIGNAL(signal_statsPlayer(Player*)), SLOT(slot_statsPlayer(Player*))); connect(parser, SIGNAL(signal_game(Game*)), SLOT(slot_game(Game*))); connect(parser, SIGNAL(signal_message(QString)), SLOT(slot_message(QString))); connect(parser, SIGNAL(signal_svname(GSName&)), SLOT(slot_svname(GSName&))); connect(parser, SIGNAL(signal_accname(QString&)), SLOT(slot_accname(QString&))); connect(parser, SIGNAL(signal_status(Status)), SLOT(slot_status(Status))); connect(parser, SIGNAL(signal_connclosed()), SLOT(slot_connclosed())); connect(parser, SIGNAL(signal_talk(const QString&, const QString&, bool)), SLOT(slot_talk(const QString&, const QString&, bool))); connect(parser, SIGNAL(signal_checkbox(int, bool)), SLOT(slot_checkbox(int, bool))); connect(parser, SIGNAL(signal_addToObservationList(int)), SLOT(slot_addToObservationList(int))); connect(parser, SIGNAL(signal_channelinfo(int, const QString&)), SLOT(slot_channelinfo(int, const QString&))); connect(parser, SIGNAL(signal_matchrequest(const QString&, bool)), this, SLOT(slot_matchrequest(const QString&, bool))); connect(parser, SIGNAL(signal_matchCanceled(const QString&)), this, SLOT(slot_removeMatchDialog(const QString&))); connect(parser, SIGNAL(signal_shout(const QString&, const QString&)), SLOT(slot_shout(const QString&, const QString&))); connect(parser, SIGNAL(signal_room(const QString&, bool)),SLOT(slot_room(const QString&, bool))); connect(parser, SIGNAL(signal_addSeekCondition(const QString&,const QString&, const QString&, const QString&, const QString&)),this, SLOT(slot_addSeekCondition(const QString&, const QString&, const QString&, const QString&, const QString&))); connect(parser, SIGNAL(signal_clearSeekCondition()),this,SLOT(slot_clearSeekCondition())); connect(parser, SIGNAL(signal_cancelSeek()),this,SLOT(slot_cancelSeek())); connect(parser, SIGNAL(signal_SeekList(const QString&, const QString&)),this,SLOT(slot_SeekList(const QString&, const QString&))); connect(parser, SIGNAL(signal_refresh(int)),this, SLOT(slot_refresh(int))); // connect mouse to games table/player table connect(ListView_games, SIGNAL(contextMenuRequested(QListViewItem*, const QPoint&, int)), SLOT(slot_menu_games(QListViewItem*, const QPoint&, int))); // doubleclick connect(ListView_games, SIGNAL(doubleClicked(QListViewItem*)), SLOT(slot_click_games(QListViewItem*))); // move/* connect(ListView_games, SIGNAL(onViewport()), SLOT(slot_moveOver_games()));*/ connect(ListView_players, SIGNAL(contextMenuRequested(QListViewItem*, const QPoint&, int)), SLOT(slot_menu_players(QListViewItem*, const QPoint&, int))); // doubleclick connect(ListView_players, SIGNAL(doubleClicked(QListViewItem*)), SLOT(slot_click_players(QListViewItem*))); // move/* connect(ListView_players, SIGNAL(onViewport()), SLOT(slot_moveOver_players()));*/ // restore last setting if (!setting) { setting = new Setting(); setting->loadSettings(); } // View Statusbar initStatusBar(this); // Sets actions initActions(); // Set menus //initmenus(this); // Sets toolbar initToolBar(); //end add eb 5 int i; QString s;// ----// BEGIN find outdated keys:// ---- if (setting->readIntEntry("VERSION") < SETTING_VERSION) { // version settings are not actual int s_v = setting->readIntEntry("VERSION"); switch (s_v) { case 0: for (i = 1; i < 5; i++) { s = setting->readEntry("USER" + QString::number(i)); if (s.length() > 0) { QString i_ = QString::number(i); setting->writeEntry("USER" + i_ + "_1", element(s, 0, DELIMITER)); setting->writeEntry("USER" + i_ + "_2", element(s, 1, DELIMITER)); setting->writeEntry("USER" + i_ + "_3", element(s, 2, DELIMITER)); // delete old label setting->writeEntry("USER" + i_, 0); } } setting->writeEntry("HOSTWINDOW", 0); i = 0; while ((s = setting->readEntry("HOST" + QString::number(++i))) != NULL) { // check if 4 delimiters in s if (s.contains(DELIMITER) == 4) { setting->writeEntry("HOST" + QString::number(i) + "a", element(s, 0, DELIMITER)); setting->writeEntry("HOST" + QString::number(i) + "b", element(s, 1, DELIMITER)); setting->writeIntEntry("HOST" + QString::number(i) + "c", element(s, 2, DELIMITER).toInt()); setting->writeEntry("HOST" + QString::number(i) + "d", element(s, 3, DELIMITER)); setting->writeEntry("HOST" + QString::number(i) + "e", element(s, 4, DELIMITER)); } // delete old hosts setting->writeEntry("HOST" + QString::number(i), QString()); } break; default: break; } }// ----// END find// ---- // restore: hostlist i = 0; while ((s = setting->readEntry("HOST" + QString::number(++i) + "a")) != NULL) { hostlist.inSort(new Host(setting->readEntry("HOST" + QString::number(i) + "a"), setting->readEntry("HOST" + QString::number(i) + "b"), setting->readIntEntry("HOST" + QString::number(i) + "c"), setting->readEntry("HOST" + QString::number(i) + "d"), setting->readEntry("HOST" + QString::number(i) + "e"), setting->readEntry("HOST" + QString::number(i) + "f"))); } // run slot command to initialize combobox and set host QString w = setting->readEntry("ACTIVEHOST"); // int cb_connect slot_cbconnect(QString()); if (w) // set host if available slot_cbconnect(w); //restore user buttons list i = 0; QToolButton *b; QPixmap p; userButtonGroup = new QButtonGroup(this); userButtonGroup->hide(); connect( userButtonGroup, SIGNAL(clicked(int)), SLOT(slotUserButtonClicked(int)) ); while ((s = setting->readEntry("USER" + QString::number(++i) + "_1")) != NULL) { b=new QToolButton(UserToolbar) ; b->setText(setting->readEntry("USER" + QString::number(i) + "_1")); //label of the button : for display b->setTextLabel(setting->readEntry("USER" + QString::number(i) + "_1")); //duplicated for storage b->setCaption(setting->readEntry("USER" + QString::number(i) + "_2")); //dirty but handy QToolTip::add(b,setting->readEntry("USER" + QString::number(i) + "_3")); b->setIconText(setting->readEntry("USER" + QString::number(i) + "_4")); //dirty but handy b->setMinimumWidth(25); if (p.load(b->iconText())) b->setPixmap(p); userButtonGroup->insert(b,-1); } //restore players list filters whoBox1->setCurrentItem(setting->readIntEntry("WHO_1")); whoBox2->setCurrentItem(setting->readIntEntry("WHO_2")); whoOpenCheck->setChecked(setting->readIntEntry("WHO_CB")); // restore size of client window s = setting->readEntry("CLIENTWINDOW"); if (s.length() > 5) { QPoint p; p.setX(element(s, 0, DELIMITER).toInt()); p.setY(element(s, 1, DELIMITER).toInt()); QSize sz; sz.setWidth(element(s, 2, DELIMITER).toInt()); sz.setHeight(element(s, 3, DELIMITER).toInt()); resize(sz); move(p); } // restore splitter in client window s = setting->readEntry("CLIENTSPLITTER"); if (s.length() > 5) { QValueList<int> w1, h1, w2; w1 << element(s, 0, DELIMITER).toInt() << element(s, 1, DELIMITER).toInt(); h1 << element(s, 2, DELIMITER).toInt() << element(s, 3, DELIMITER).toInt(); w2 << element(s, 4, DELIMITER).toInt() << element(s, 5, DELIMITER).toInt(); //mainTable->s1->setSizes(w1); s1->setSizes(w1); s2->setSizes(h1); s3->setSizes(w2); } // restore size of debug window s = setting->readEntry("DEBUGWINDOW"); if (s.length() > 5) { view_p.setX(element(s, 0, DELIMITER).toInt()); view_p.setY(element(s, 1, DELIMITER).toInt()); view_s.setWidth(element(s, 2, DELIMITER).toInt()); view_s.setHeight(element(s, 3, DELIMITER).toInt()); } else { view_p = QPoint(); view_s = QSize(); } // restore size of menu window s = setting->readEntry("MENUWINDOW"); if (s.length() > 5) { menu_p.setX(element(s, 0, DELIMITER).toInt()); menu_p.setY(element(s, 1, DELIMITER).toInt()); menu_s.setWidth(element(s, 2, DELIMITER).toInt()); menu_s.setHeight(element(s, 3, DELIMITER).toInt()); } else { menu_p = QPoint(); menu_s = QSize(); } // restore size of preferences window s = setting->readEntry("PREFWINDOW"); if (s.length() > 5) { pref_p.setX(element(s, 0, DELIMITER).toInt()); pref_p.setY(element(s, 1, DELIMITER).toInt()); pref_s.setWidth(element(s, 2, DELIMITER).toInt()); pref_s.setHeight(element(s, 3, DELIMITER).toInt()); } else { pref_p = QPoint(); pref_s = QSize(); } // 'user' cmd instead of 'who'? setColumnsForExtUserInfo(); // create qGo Interface for board handling qgoif = new qGoIF(this); // qGo Interface connect(parser, SIGNAL(signal_set_observe( const QString&)), qgoif, SLOT(set_observe(const QString&))); connect(parser, SIGNAL(signal_move(GameInfo*)), qgoif, SLOT(slot_move(GameInfo*))); connect(parser, SIGNAL(signal_move(Game*)), qgoif, SLOT(slot_move(Game*))); connect(parser, SIGNAL(signal_kibitz(int, const QString&, const QString&)), qgoif, SLOT(slot_kibitz(int, const QString&, const QString&))); connect(parser, SIGNAL(signal_title(const QString&)), qgoif, SLOT(slot_title(const QString&))); connect(parser, SIGNAL(signal_komi(const QString&, const QString&, bool)), qgoif, SLOT(slot_komi(const QString&, const QString&, bool))); connect(parser, SIGNAL(signal_freegame(bool)), qgoif, SLOT(slot_freegame(bool))); connect(parser, SIGNAL(signal_matchcreate(const QString&, const QString&)), qgoif, SLOT(slot_matchcreate(const QString&, const QString&))); connect(parser, SIGNAL(signal_removestones(const QString&, const QString&)), qgoif, SLOT(slot_removestones(const QString&, const QString&))); connect(parser, SIGNAL(signal_undo(const QString&, const QString&)), qgoif, SLOT(slot_undo(const QString&, const QString&))); connect(parser, SIGNAL(signal_result(const QString&, const QString&, bool, const QString&)), qgoif, SLOT(slot_result(const QString&, const QString&, bool, const QString&))); connect(parser, SIGNAL(signal_requestDialog(const QString&, const QString&, const QString&, const QString&)), qgoif, SLOT(slot_requestDialog(const QString&, const QString&, const QString&, const QString&))); connect(this, SIGNAL(signal_move(Game*)), qgoif, SLOT(slot_move(Game*))); connect(this, SIGNAL(signal_computer_game(QNewGameDlg*)), qgoif, SLOT(slot_computer_game(QNewGameDlg*)));//SL added eb 12 connect(qgoif, SIGNAL(signal_sendcommand(const QString&, bool)), this, SLOT(slot_sendcommand(const QString&, bool))); connect(qgoif, SIGNAL(signal_addToObservationList(int)), this, SLOT(slot_addToObservationList(int))); connect(qgoif->get_qgo(), SIGNAL(signal_updateFont()), this, SLOT(slot_updateFont())); connect(parser, SIGNAL(signal_timeAdded(int, bool)), qgoif, SLOT(slot_timeAdded(int, bool))); //connect(parser, SIGNAL(signal_undoRequest(const QString&)), qgoif, SLOT(slot_undoRequest(const QString&))); //gamestable// connect(ListView_players, SIGNAL(contentsMoving(int, int)), this, SLOT(slot_playerContentsMoving(int, int))); connect(ListView_games, SIGNAL(contentsMoving(int, int)), this, SLOT(slot_gamesContentsMoving(int, int))); // add menu bar and status bar// MainAppWidgetLayout->addWidget(menuBar, 0, 0);/*#ifndef QGO_NOSTYLES // set style - same as set up a board with qgoif int style = setting->readEntry("STYLE").toInt(); if (style < 0 || style > 6) { setting->writeEntry("STYLE", "0"); style = 0; } switch (style) { case 0: //qApp->setStyle(NULL); break; case 1: qApp->setStyle(new QWindowsStyle); break; case 2: qApp->setStyle(new QPlatinumStyle); break; case 3: qApp->setStyle(new QMotifStyle); break; case 4: qApp->setStyle(new QMotifPlusStyle); break;#ifdef Q_WS_WIN// there seems to be a problem within X11... case 5: qApp->setStyle(new QCDEStyle); break; case 6: qApp->setStyle(new QSGIStyle); break;#endif case 6:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -