2009-08-17 03:00:34 -04:00
# include <iostream>
# include <QTimer>
# include <QMenu>
# include <QMouseEvent>
# include <rsiface/rsturtle.h>
# include "TurtleRouterDialog.h"
TurtleRouterDialog * TurtleRouterDialog : : _instance = NULL ;
TurtleRouterDialog : : TurtleRouterDialog ( QWidget * parent )
2010-02-14 04:06:37 -05:00
: RsAutoUpdatePage ( 2000 , parent )
2009-08-17 03:00:34 -04:00
{
setupUi ( this ) ;
connect ( _hashes_TW , SIGNAL ( customContextMenuRequested ( const QPoint & ) ) , this , SLOT ( showCtxMenu ( const QPoint & ) ) ) ;
2010-02-14 04:06:37 -05:00
_hashes_TW - > setToolTip ( tr ( " As a helper, you can manually remove hashes \n from there. Warning: doing so on currently \n active transfers will block the transfer process. " ) ) ;
2009-08-17 03:00:34 -04:00
}
void TurtleRouterDialog : : showCtxMenu ( const QPoint & point )
{
2010-02-08 18:09:46 -05:00
if ( _hashes_TW - > currentItem ( ) = = NULL )
return ;
2009-08-17 03:00:34 -04:00
std : : cerr < < " execing context menu " < < std : : endl ;
// create context menus.
QMenu contextMnu ( this ) ;
QAction * removeHashAction = new QAction ( QIcon ( " :/images/delete.png " ) , tr ( " Stop handling this hash " ) , this ) ;
connect ( removeHashAction , SIGNAL ( triggered ( ) ) , this , SLOT ( removeFileHash ( ) ) ) ;
contextMnu . addAction ( removeHashAction ) ;
QMouseEvent * mevent = new QMouseEvent ( QEvent : : MouseButtonPress , point , Qt : : RightButton , Qt : : RightButton , Qt : : NoModifier ) ;
contextMnu . exec ( mevent - > globalPos ( ) ) ;
}
void TurtleRouterDialog : : showUp ( )
{
if ( _instance = = NULL )
_instance = new TurtleRouterDialog ;
_instance - > show ( ) ;
2009-08-17 13:11:32 -04:00
_instance - > update ( ) ;
2009-08-17 03:00:34 -04:00
}
void TurtleRouterDialog : : removeFileHash ( )
{
QTableWidgetItem * item = _hashes_TW - > currentItem ( ) ;
std : : cout < < " in remove hash " < < std : : endl ;
if ( item = = NULL )
return ;
std : : cout < < " item->row = " < < item - > row ( ) < < std : : endl ;
std : : string hash = _hashes_TW - > item ( item - > row ( ) , 0 ) - > text ( ) . toStdString ( ) ;
std : : cout < < " remove ing hash: " < < hash < < std : : endl ;
rsTurtle - > stopMonitoringFileTunnels ( hash ) ;
}
2010-02-14 04:06:37 -05:00
void TurtleRouterDialog : : updateDisplay ( )
2009-08-17 03:00:34 -04:00
{
2010-02-14 04:06:37 -05:00
std : : cout < < " updatign turtle router console. " < < std : : endl ;
2009-08-17 13:11:32 -04:00
2010-02-14 04:06:37 -05:00
std : : vector < std : : vector < std : : string > > hashes_info ;
std : : vector < std : : vector < std : : string > > tunnels_info ;
std : : vector < std : : vector < std : : string > > search_reqs_info ;
std : : vector < std : : vector < std : : string > > tunnel_reqs_info ;
2009-08-17 03:00:34 -04:00
2010-02-14 04:06:37 -05:00
rsTurtle - > getInfo ( hashes_info , tunnels_info , search_reqs_info , tunnel_reqs_info ) ;
2009-08-17 03:00:34 -04:00
2010-02-14 04:06:37 -05:00
// now display this in the QTableWidgets
2009-08-17 03:00:34 -04:00
2010-02-14 04:06:37 -05:00
fillTable ( _hashes_TW , hashes_info ) ;
fillTable ( _tunnels_TW , tunnels_info ) ;
2010-02-14 05:53:57 -05:00
std : : vector < std : : vector < std : : string > > & reqs ( search_reqs_info ) ;
for ( uint i = 0 ; i < search_reqs_info . size ( ) ; + + i ) search_reqs_info [ i ] . push_back ( " Search request " ) ;
for ( uint i = 0 ; i < tunnel_reqs_info . size ( ) ; + + i )
{
tunnel_reqs_info [ i ] . push_back ( " Tunnel request " ) ;
reqs . push_back ( tunnel_reqs_info [ i ] ) ;
}
fillTable ( _reqs_TW , reqs ) ;
2009-08-17 03:00:34 -04:00
}
void TurtleRouterDialog : : fillTable ( QTableWidget * table , const std : : vector < std : : vector < std : : string > > & data )
{
2010-02-14 05:53:57 -05:00
table - > clearContents ( ) ;
2009-08-17 03:00:34 -04:00
for ( uint i = 0 ; i < data . size ( ) ; + + i )
{
if ( table - > rowCount ( ) < = i )
table - > insertRow ( i ) ;
for ( uint j = 0 ; j < data [ i ] . size ( ) ; + + j )
2010-02-13 17:14:06 -05:00
table - > setItem ( i , j , new QTableWidgetItem ( QString : : fromStdString ( data [ i ] [ j ] . empty ( ) ? " Unknown " : data [ i ] [ j ] ) ) ) ;
2009-08-17 03:00:34 -04:00
}
for ( uint i = data . size ( ) ; i < table - > rowCount ( ) ; )
table - > removeRow ( i ) ;
}