MainWindow.cpp

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 2005-2007 by Peter Dimov.
00004 
00005 This file is part of Calitko (http://www.calitko.org).
00006 
00007 Calitko is free software; you can redistribute it and/or modify
00008 it under the terms of the GNU General Public License as published by
00009 the Free Software Foundation; either version 2 of the License, or
00010 (at your option) any later version.
00011 
00012 Calitko is distributed in the hope that it will be useful,
00013 but WITHOUT ANY WARRANTY; without even the implied warranty of
00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015 GNU General Public License for more details.
00016 
00017 You should have received a copy of the GNU General Public License
00018 along with Calitko; if not, write to the Free Software
00019 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020 
00021 */
00022 
00023 #include "Qt.h"
00024 #include "MainWindow.h"
00025 #include "UIs/Searching/SearchingWidget.h"
00026 #include "UIs/Searching/SearchTreeView.h"
00027 #include "UIs/Searching/SearchTab.h"
00028 #include "UIs/TransferTreeView.h"
00029 #include "UIs/TransferTab.h"
00030 #include "UIs/PacketDumpTreeView.h"
00031 #include "Gnutella/LocalPeer.h"
00032 #include "PacketModel.h"
00033 
00034 using UIs::Searching::SearchTreeView;
00035 using UIs::Searching::SearchTab;
00036 using UIs::MenuBar;
00037 using UIs::NetworkTreeView;
00038 using UIs::PacketDumpTreeView;
00039 
00040 NetworkTreeView *networkTreeView;
00041 
00042 MainWindow::MainWindow(QWidget *parent)
00043  :  QMainWindow (parent, Qt::Window),
00044     menuBar (0), newSearchButton (0), downloadButton (0), tabWidget (0),
00045     peerIpAddress (0), peerPort (0), connectButton (0), packetTreeView (0),
00046     localPeer (0), newtorkTab (0), searchingResultsTab (0)
00047 {
00048     newSearchButton = new QPushButton ("New Search");
00049     newSearchButton->setIcon (QIcon ("Icons/search.png"));
00050     downloadButton  = new QPushButton ("Download");
00051     downloadButton->setIcon( QIcon("Icons/download.png"));
00052     tabWidget       = new QTabWidget();
00053     searchingResultsTab = new SearchingWidget();
00054 
00055     menuBar = static_cast <QMenuBar*> (new MenuBar());
00056 
00057     setMenuBar (menuBar);
00058     initializeMenuBar ();
00059     localPeer = new LocalPeer();
00060 
00061     peerIpAddress = new QLineEdit("localhost");
00062     peerPort = new QLineEdit("6467");
00063     connectButton = new QPushButton(tr("Connect"));
00064     connectButton->setDefault(true);
00065     connect (connectButton, SIGNAL(clicked()), this, SLOT(connectToPeer()));
00066 
00067     QHBoxLayout *connectLayout = new QHBoxLayout();
00068     connectLayout->setMargin (0);
00069     connectLayout->addWidget (peerIpAddress);
00070     connectLayout->addWidget (peerPort);
00071     connectLayout->addWidget (connectButton);
00072 
00073     localPeer->setServerPort (4404);
00074     localPeer->connectToNetwork();
00075 
00076     // start update timer
00077     QTimer *timer = new QTimer();
00078     timer->setInterval(1000);
00079     QObject::connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
00080     timer->start();
00081 
00082     // initialize the Network tab
00083     networkTreeView = new NetworkTreeView (this);
00084     newtorkTab = new NetworkTab(networkTreeView, localPeer->nodeModel());
00085 
00086     // initialize the Transfer tab
00087     //TransferTreeView  *transferTreeView = new TransferTreeView (this);
00088     //TransferTab           *transferTab = new TransferTab(transferTreeView);
00089     //transferTreeView->setItemDelegate (new TransferTreeViewDelegate(this));
00090 
00091     // initialize the Packet Dump tab
00092 /*  packetTreeView = new QTreeView(this);
00093     packetTreeView->setModel (localPeer->getPacketModel());
00094     packetTreeView->scrollTo (packetTreeView->indexAt(QPoint(0, 1200)), QAbstractItemView::PositionAtBottom);
00095     packetTreeView->setRootIsDecorated (false);
00096     packetTreeView->resizeColumnToContents (0);
00097     packetTreeView->resizeColumnToContents (1);
00098     packetTreeView->resizeColumnToContents (2);
00099     packetTreeView->resizeColumnToContents (3);
00100     packetTreeView->resizeColumnToContents (4);
00101     packetTreeView->resizeColumnToContents (5);
00102     packetTreeView->resizeColumnToContents (6);
00103 */
00104     // add the previously initialized tabs to the tab widget
00105     int index = tabWidget->addTab (newtorkTab, "Network");
00106     tabWidget->setTabIcon(index, QIcon("Icons/network.png"));
00107     //tabWidget->addTab (transferTab, "Transfers");
00108 //  tabWidget->addTab (packetTreeView, "Packet Dump");
00109     tabWidget->setTabShape (QTabWidget::Rounded);
00110 
00111     QObject::connect (newSearchButton, SIGNAL(pressed()), this, SLOT(newSearchButtonPressed(void)));
00112     QObject::connect (downloadButton, SIGNAL(pressed()), this, SLOT(downloadButtonPressed(void)));
00113 
00114 /*  QHBoxLayout *menuLayout = new QHBoxLayout ();
00115     menuLayout->addStretch (0);
00116     menuLayout->addWidget (menuBar);
00117     menuLayout->addStretch (100);
00118 */
00119     QHBoxLayout *buttonLayout = new QHBoxLayout ();
00120     buttonLayout->addStretch (0);
00121     buttonLayout->addWidget (newSearchButton);
00122     buttonLayout->addStretch (0);
00123     buttonLayout->addWidget (downloadButton);
00124     buttonLayout->addStretch (100);
00125 
00126     QVBoxLayout *mainLayout = new QVBoxLayout();
00127 //  mainLayout->addLayout (menuLayout);
00128 //  mainLayout->addLayout (buttonLayout);
00129     mainLayout->addLayout (connectLayout);
00130     mainLayout->addWidget (tabWidget);
00131 
00132     //setLayout (mainLayout);
00133     //QWidget *mainWidget
00134     QWidget *mainWidget = new QWidget();
00135     mainWidget->setLayout (mainLayout);
00136 
00137     setCentralWidget (mainWidget);
00138     QToolBar *toolBar = new QToolBar();
00139     toolBar->setMovable (false);
00140     toolBar->addWidget (newSearchButton);
00141     toolBar->addWidget (downloadButton);
00142     toolBar->addWidget (peerIpAddress);
00143     toolBar->addWidget (peerPort);
00144     toolBar->addWidget (connectButton);
00145     addToolBar (toolBar);
00146     resize (800, 500);
00147 }
00148 
00149 MainWindow::~MainWindow()
00150 {
00151     delete localPeer;
00152 }
00153 
00154 void MainWindow::newSearchButtonPressed(void)
00155 {
00156     static int      searchCount     = 0;
00157     SearchTreeView  *searchTreeView = new SearchTreeView();
00158 
00159     // If this is first search, "Search Results" tab should be added
00160     if (tabWidget->indexOf (searchingResultsTab) == -1) {
00161         int index = tabWidget->addTab (searchingResultsTab, "Search Results");
00162         tabWidget->setTabIcon (index, QIcon("Icons/search.png"));
00163         tabWidget->setCurrentIndex (tabWidget->count() - 1);
00164 
00165         QObject::connect (searchingResultsTab, SIGNAL(stopSearch()),
00166                           this, SLOT(closeSearchingTabTrigged()));
00167     }
00168     SearchTab *searchTab = new SearchTab (searchTreeView,
00169                                           localPeer,
00170                                           searchingResultsTab);
00171     searchCount++;
00172     int addedtab = searchingResultsTab->addTab (searchTab, QString ("Search %1")
00173                                                             .arg (searchCount));
00174     searchingResultsTab->setCurrentIndex (addedtab);
00175 
00176     return;
00177 }
00178 
00179 void MainWindow::downloadButtonPressed()
00180 {
00181     tabWidget->setCurrentIndex (1);
00182 }
00183 
00184 void MainWindow::updateTime()
00185 {
00186     static int i = 0;
00187     i++;
00188 
00189     if (i == 8) {
00190 //      Node *node = new Node ("node 2", "123.456.789.1:1983", "T3P 1.0.0");
00191 //      networkTreeView->addItem (node);
00192     }
00193     if (i == 9) {
00194 //      Node *node = new Node ("node 2_1", "0.0.0.1:1983", "T3P 1.0.0");
00195 //      networkTreeView->addItem (node);
00196     }
00197     if (i == 12) {
00198 //      networkTreeView->removeItem (new QString("123.456.789.1:1983"));
00199     }
00200 }
00201 
00202 void MainWindow::connectToPeer()
00203 {
00204     localPeer->connectToPeer (peerIpAddress->text(), peerPort->text().toInt());
00205 }
00206 
00207 void MainWindow::initializeMenuBar()
00208 {
00209 
00210     menuBar         = QMainWindow::menuBar(); //new QMenuBar (this);
00211 
00212     QMenu *fileMenu = new QMenu ("&File");
00213     fileMenu->addAction (tr ("Exit"), this, SLOT (exitTriggered()),
00214                          QKeySequence (tr ("Ctrl+X", "File|Exit")));
00215     menuBar->addMenu (fileMenu);
00216 
00217     QMenu *viewMenu = new QMenu ("&View");
00218     viewMenu->addAction (QIcon ("Icons/packet.png"), tr ("Packet Dump"),
00219                          this, SLOT (packetDumpTriggered()));
00220     menuBar->addMenu (viewMenu);
00221 
00222     QMenu *searchMenu = new QMenu ("&Search");
00223     searchMenu->addAction (QIcon ("Icons/search.png"), tr ("New Search"), this,
00224                            SLOT (newSearchButtonPressed()),
00225                            QKeySequence (tr ("Ctrl+S", "Search|New Search")));
00226     menuBar->addMenu (searchMenu);
00227 
00228     QMenu *OptionsMenu = new QMenu ("&Options");
00229     menuBar->addMenu (OptionsMenu);
00230 
00231     QMenu *helpMenu = new QMenu ("&Help");
00232     menuBar->addMenu (helpMenu);
00233 
00234 }
00235 
00236 void MainWindow::exitTriggered()
00237 {
00238     close();
00239 }
00240 
00241 void MainWindow::packetDumpTriggered()
00242 {
00243     int index = tabWidget->indexOf (packetTreeView);
00244 
00245     if (index >= 0) {
00246         tabWidget->setCurrentIndex (index);
00247         return;
00248     }
00249 
00250 //  packetTreeView = new QTreeView(this);
00251     packetTreeView = new PacketDumpTreeView(this, localPeer->packetModel());
00252     packetTreeView->setModel (localPeer->packetModel());
00253     packetTreeView->scrollTo (packetTreeView->indexAt(QPoint(0, 1200)), QAbstractItemView::PositionAtBottom);
00254     packetTreeView->setRootIsDecorated (false);
00255     packetTreeView->resizeColumnToContents (0);
00256     packetTreeView->resizeColumnToContents (1);
00257     packetTreeView->resizeColumnToContents (2);
00258     packetTreeView->resizeColumnToContents (3);
00259     packetTreeView->resizeColumnToContents (4);
00260     packetTreeView->resizeColumnToContents (5);
00261     packetTreeView->resizeColumnToContents (6);
00262 
00263     index = tabWidget->addTab (packetTreeView, "Packet Dump");
00264     tabWidget->setCurrentIndex (tabWidget->indexOf (packetTreeView));
00265     tabWidget->setTabIcon(index, QIcon("Icons/packet.png"));
00266 
00267     return;
00268 }
00269 
00270 void MainWindow::closeSearchingTabTrigged()
00271 {
00272     int index = searchingResultsTab->currentIndex();
00273 
00274     if (index != -1) {
00275         // \todo actually using static_cast is not correct. Signal to required tab should be used, not casting
00276         SearchTab *tab = static_cast<SearchTab*> (searchingResultsTab->currentWidget());
00277         tab->stopSearch ();
00278     }
00279 }