00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef WSCOUT_GUI_MAIN_WINDOW_HXX_
00024 # define WSCOUT_GUI_MAIN_WINDOW_HXX_
00025
00026 # include <QtCore/QDir>
00027 # include <QtCore/QFileInfo>
00028 # include <QtGui/QApplication>
00029
00030 # include "wscout_gui_main_window.hh"
00031
00032 namespace wscout
00033 {
00034
00035 namespace gui
00036 {
00037
00038 inline
00039 MainWindow::NewProgressDialog::NewProgressDialog(QProgressDialog** d,
00040 QMainWindow* w):
00041 d_ (d),
00042 w_ (w)
00043 {
00044 }
00045
00046 inline
00047 void
00048 MainWindow::NewProgressDialog::operator () (std::streampos min,
00049 std::streampos max)
00050 {
00051 QProgressDialog*& d = *d_;
00052
00053 d = new QProgressDialog (tr("Building Index...<br />"
00054 "<b>Total size:</b> %1 MiB")
00055 .arg(max / (1 << 20)),
00056 tr("&Cancel"),
00057 min >> 16,
00058 max >> 16,
00059 w_);
00060 d->setWindowTitle(tr("Building index..."));
00061 d->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
00062 }
00063
00064 inline
00065 MainWindow::
00066 UpdateProgressDialog::UpdateProgressDialog(QProgressDialog** d): d_ (d)
00067 {
00068 }
00069
00070 inline
00071 const std::string*
00072 MainWindow::UpdateProgressDialog::operator () (std::streampos cur)
00073 {
00074 const static std::string interrupt_message ("User interruption");
00075 QProgressDialog& dialog = **d_;
00076
00077 dialog.setValue(cur >> 16);
00078 qApp->processEvents();
00079 return dialog.wasCanceled() ? &interrupt_message : 0;
00080 }
00081
00082 inline
00083 void
00084 MainWindow::addTrace(Trace* t)
00085 {
00086 assert(t);
00087 assert(not t->parent());
00088 assert(t->trace());
00089
00090 const QString traceName = (boost::lexical_cast<std::string>
00091 (*t->trace()).c_str());
00092
00093 connect(t, SIGNAL(positionChanged(int)), SLOT(updatePosition(int)));
00094 connect(t, SIGNAL(positionChanged(int)), t, SLOT(setFocus()));
00095
00096 connect(t, SIGNAL(packetLeftClicked(int)), SLOT(updateHexDock(int)));
00097 connect(t, SIGNAL(packetDoubleLeftClicked(int)), SLOT(showHexDock(int)));
00098
00099 tabs_.setCurrentIndex(tabs_.addTab(t, QFileInfo (traceName).fileName()));
00100 if (tabs_.count() == 1)
00101 updateTrace();
00102 }
00103
00104 inline
00105 Trace*
00106 MainWindow::trace()
00107 {
00108 QWidget* const w = tabs_.currentWidget();
00109 Trace* const t = dynamic_cast<Trace*> (w);
00110
00111 assert(not w or t);
00112 return t;
00113 }
00114
00115 inline
00116 const Trace*
00117 MainWindow::trace() const
00118 {
00119 const QWidget* const w = tabs_.currentWidget();
00120 const Trace* const t = dynamic_cast<const Trace*> (w);
00121
00122 assert(not w or t);
00123 return t;
00124 }
00125
00126 inline
00127 QString
00128 MainWindow::openDirectoryHint() const
00129 {
00130 const Trace* const t = trace();
00131
00132 return t ?
00133 QFileInfo (boost::lexical_cast<std::string>
00134 (*t->trace()).c_str()).absolutePath():
00135 QDir::currentPath();
00136 }
00137
00138 inline
00139 MainWindow*
00140 MainWindow::setupNewWindow(MainWindow* w, bool show)
00141 {
00142 w->setAttribute(Qt::WA_DeleteOnClose);
00143 if (show)
00144 w->show();
00145 return w;
00146 }
00147
00148 }
00149
00150 }
00151
00152 #endif // ! WSCOUT_GUI_MAIN_WINDOW_HXX_