Qt: Convert more dialogs to WiresharkDialog.
Make the Sequence, IO Graph, Statistics Tree, and VoIP Calls dialogs subclasses of WiresharkDialog. Remove "Stats Tree" from Statistics Tree dialog titles. Don't complain if the user opens more than one instance of the dialog. Use the applicationName property in WiresharkApplication instead of a separate variable. Add a preexisting item to the IO Graph bug list (hovering when the file is closed clears the graph). Change-Id: I8411a25305d00b16e0d4a82fa50a9bad5c85b239 Reviewed-on: https://code.wireshark.org/review/6125 Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
parent
b6ff338e81
commit
4556498f33
|
@ -140,7 +140,7 @@ struct _stats_tree_cfg {
|
||||||
gchar* tapname;
|
gchar* tapname;
|
||||||
register_stat_group_t stat_group;
|
register_stat_group_t stat_group;
|
||||||
|
|
||||||
gboolean in_use;
|
gboolean in_use; /* GTK+ only */
|
||||||
gboolean plugin;
|
gboolean plugin;
|
||||||
|
|
||||||
/** dissector defined callbacks */
|
/** dissector defined callbacks */
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
explicit CaptureFile(QObject *parent = 0, capture_file *cap_file = NULL);
|
explicit CaptureFile(QObject *parent = 0, capture_file *cap_file = NULL);
|
||||||
~CaptureFile();
|
~CaptureFile();
|
||||||
|
|
||||||
capture_file *capFile() const { return cap_file_; }
|
capture_file *capFile() const { return isValid() ? cap_file_ : NULL; }
|
||||||
void setCapFile(capture_file *cap_file) { cap_file_ = cap_file; }
|
void setCapFile(capture_file *cap_file) { cap_file_ = cap_file; }
|
||||||
/** Check capture file validity
|
/** Check capture file validity
|
||||||
*
|
*
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
// - We retap and redraw more than we should.
|
// - We retap and redraw more than we should.
|
||||||
// - Smoothing doesn't seem to match GTK+
|
// - Smoothing doesn't seem to match GTK+
|
||||||
// - We don't register a tap listener ("-z io,stat", bottom of gtk/io_stat.c)
|
// - We don't register a tap listener ("-z io,stat", bottom of gtk/io_stat.c)
|
||||||
|
// - Hovering over a graph when the file is closed clears the graph.
|
||||||
|
|
||||||
// To do:
|
// To do:
|
||||||
// - Use scroll bars?
|
// - Use scroll bars?
|
||||||
|
@ -177,10 +178,9 @@ static void io_graph_free_cb(void* p) {
|
||||||
|
|
||||||
Q_DECLARE_METATYPE(IOGraph *)
|
Q_DECLARE_METATYPE(IOGraph *)
|
||||||
|
|
||||||
IOGraphDialog::IOGraphDialog(QWidget *parent, capture_file *cf) :
|
IOGraphDialog::IOGraphDialog(QWidget &parent, CaptureFile &cf) :
|
||||||
QDialog(parent),
|
WiresharkDialog(parent, cf),
|
||||||
ui(new Ui::IOGraphDialog),
|
ui(new Ui::IOGraphDialog),
|
||||||
cap_file_(cf),
|
|
||||||
name_line_edit_(NULL),
|
name_line_edit_(NULL),
|
||||||
dfilter_line_edit_(NULL),
|
dfilter_line_edit_(NULL),
|
||||||
yfield_line_edit_(NULL),
|
yfield_line_edit_(NULL),
|
||||||
|
@ -199,6 +199,7 @@ IOGraphDialog::IOGraphDialog(QWidget *parent, capture_file *cf) :
|
||||||
auto_axes_(true)
|
auto_axes_(true)
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
setWindowSubtitle(tr("IO Graphs"));
|
||||||
setAttribute(Qt::WA_DeleteOnClose, true);
|
setAttribute(Qt::WA_DeleteOnClose, true);
|
||||||
QCustomPlot *iop = ui->ioPlot;
|
QCustomPlot *iop = ui->ioPlot;
|
||||||
|
|
||||||
|
@ -247,17 +248,10 @@ IOGraphDialog::IOGraphDialog(QWidget *parent, capture_file *cf) :
|
||||||
iop->setMouseTracking(true);
|
iop->setMouseTracking(true);
|
||||||
iop->setEnabled(true);
|
iop->setEnabled(true);
|
||||||
|
|
||||||
QString dlg_title = tr("Wireshark IO Graphs: ");
|
|
||||||
if (cap_file_) {
|
|
||||||
dlg_title += cf_get_display_name(cap_file_);
|
|
||||||
} else {
|
|
||||||
dlg_title += tr("No Capture Data");
|
|
||||||
}
|
|
||||||
setWindowTitle(dlg_title);
|
|
||||||
QCPPlotTitle *title = new QCPPlotTitle(iop);
|
QCPPlotTitle *title = new QCPPlotTitle(iop);
|
||||||
iop->plotLayout()->insertRow(0);
|
iop->plotLayout()->insertRow(0);
|
||||||
iop->plotLayout()->addElement(0, 0, title);
|
iop->plotLayout()->addElement(0, 0, title);
|
||||||
title->setText(dlg_title);
|
title->setText(tr("Wireshark IO Graphs: %1").arg(cap_file_.fileTitle()));
|
||||||
|
|
||||||
tracer_ = new QCPItemTracer(iop);
|
tracer_ = new QCPItemTracer(iop);
|
||||||
iop->addItem(tracer_);
|
iop->addItem(tracer_);
|
||||||
|
@ -441,11 +435,8 @@ void IOGraphDialog::syncGraphSettings(QTreeWidgetItem *item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void IOGraphDialog::setCaptureFile(capture_file *cf)
|
void IOGraphDialog::updateWidgets()
|
||||||
{
|
{
|
||||||
if (!cf) { // We only want to know when the file closes.
|
|
||||||
cap_file_ = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void IOGraphDialog::scheduleReplot(bool now)
|
void IOGraphDialog::scheduleReplot(bool now)
|
||||||
|
@ -826,7 +817,7 @@ void IOGraphDialog::mouseMoved(QMouseEvent *event)
|
||||||
if (interval_packet > 0) {
|
if (interval_packet > 0) {
|
||||||
packet_num_ = (guint32) interval_packet;
|
packet_num_ = (guint32) interval_packet;
|
||||||
msg = tr("%1 %2")
|
msg = tr("%1 %2")
|
||||||
.arg(cap_file_ ? tr("Click to select packet") : tr("Packet"))
|
.arg(!file_closed_ ? tr("Click to select packet") : tr("Packet"))
|
||||||
.arg(packet_num_);
|
.arg(packet_num_);
|
||||||
val = " = " + QString::number(tracer_->position->value(), 'g', 4);
|
val = " = " + QString::number(tracer_->position->value(), 'g', 4);
|
||||||
}
|
}
|
||||||
|
@ -948,15 +939,15 @@ void IOGraphDialog::updateStatistics()
|
||||||
{
|
{
|
||||||
if (!isVisible()) return;
|
if (!isVisible()) return;
|
||||||
|
|
||||||
if (need_retap_) {
|
if (need_retap_ && !file_closed_) {
|
||||||
need_retap_ = false;
|
need_retap_ = false;
|
||||||
cf_retap_packets(cap_file_);
|
cap_file_.retapPackets();
|
||||||
ui->ioPlot->setFocus();
|
ui->ioPlot->setFocus();
|
||||||
} else {
|
} else {
|
||||||
if (need_recalc_) {
|
if (need_recalc_) {
|
||||||
need_recalc_ = false;
|
need_recalc_ = false;
|
||||||
need_replot_ = true;
|
need_replot_ = true;
|
||||||
emit recalcGraphData(cap_file_);
|
emit recalcGraphData(cap_file_.capFile());
|
||||||
if (!tracer_->graph()) {
|
if (!tracer_->graph()) {
|
||||||
if (base_graph_ && base_graph_->data()->size() > 0) {
|
if (base_graph_ && base_graph_->data()->size() > 0) {
|
||||||
tracer_->setGraph(base_graph_);
|
tracer_->setGraph(base_graph_);
|
||||||
|
@ -1431,7 +1422,7 @@ void IOGraphDialog::on_actionMoveDown1_triggered()
|
||||||
|
|
||||||
void IOGraphDialog::on_actionGoToPacket_triggered()
|
void IOGraphDialog::on_actionGoToPacket_triggered()
|
||||||
{
|
{
|
||||||
if (tracer_->visible() && cap_file_ && packet_num_ > 0) {
|
if (tracer_->visible() && !file_closed_ && packet_num_ > 0) {
|
||||||
emit goToPacket(packet_num_);
|
emit goToPacket(packet_num_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1477,8 +1468,8 @@ void IOGraphDialog::on_buttonBox_accepted()
|
||||||
.arg(jpeg_filter);
|
.arg(jpeg_filter);
|
||||||
|
|
||||||
QString save_file = path.canonicalPath();
|
QString save_file = path.canonicalPath();
|
||||||
if (cap_file_) {
|
if (!file_closed_) {
|
||||||
save_file += QString("/%1").arg(cf_get_display_name(cap_file_));
|
save_file += QString("/%1").arg(cap_file_.fileTitle());
|
||||||
}
|
}
|
||||||
file_name = QFileDialog::getSaveFileName(this, tr("Wireshark: Save Graph As..."),
|
file_name = QFileDialog::getSaveFileName(this, tr("Wireshark: Save Graph As..."),
|
||||||
save_file, filter, &extension);
|
save_file, filter, &extension);
|
||||||
|
|
|
@ -34,9 +34,9 @@
|
||||||
#include "ui/io_graph_item.h"
|
#include "ui/io_graph_item.h"
|
||||||
|
|
||||||
#include "syntax_line_edit.h"
|
#include "syntax_line_edit.h"
|
||||||
|
#include "wireshark_dialog.h"
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QDialog>
|
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QLineEdit>
|
#include <QLineEdit>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
@ -127,12 +127,12 @@ namespace Ui {
|
||||||
class IOGraphDialog;
|
class IOGraphDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
class IOGraphDialog : public QDialog
|
class IOGraphDialog : public WiresharkDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit IOGraphDialog(QWidget *parent = 0, capture_file *cf = NULL);
|
explicit IOGraphDialog(QWidget &parent, CaptureFile &cf);
|
||||||
~IOGraphDialog();
|
~IOGraphDialog();
|
||||||
|
|
||||||
void addGraph(bool checked, QString name, QString dfilter, int color_idx, IOGraph::PlotStyles style,
|
void addGraph(bool checked, QString name, QString dfilter, int color_idx, IOGraph::PlotStyles style,
|
||||||
|
@ -142,7 +142,6 @@ public:
|
||||||
void syncGraphSettings(QTreeWidgetItem *item);
|
void syncGraphSettings(QTreeWidgetItem *item);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setCaptureFile(capture_file *cf);
|
|
||||||
void scheduleReplot(bool now = false);
|
void scheduleReplot(bool now = false);
|
||||||
void scheduleRecalc(bool now = false);
|
void scheduleRecalc(bool now = false);
|
||||||
void scheduleRetap(bool now = false);
|
void scheduleRetap(bool now = false);
|
||||||
|
@ -159,7 +158,6 @@ signals:
|
||||||
private:
|
private:
|
||||||
Ui::IOGraphDialog *ui;
|
Ui::IOGraphDialog *ui;
|
||||||
|
|
||||||
capture_file *cap_file_;
|
|
||||||
QLineEdit *name_line_edit_;
|
QLineEdit *name_line_edit_;
|
||||||
SyntaxLineEdit *dfilter_line_edit_;
|
SyntaxLineEdit *dfilter_line_edit_;
|
||||||
SyntaxLineEdit *yfield_line_edit_;
|
SyntaxLineEdit *yfield_line_edit_;
|
||||||
|
@ -194,6 +192,7 @@ private:
|
||||||
void loadProfileGraphs();
|
void loadProfileGraphs();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateWidgets();
|
||||||
void graphClicked(QMouseEvent *event);
|
void graphClicked(QMouseEvent *event);
|
||||||
void mouseMoved(QMouseEvent *event);
|
void mouseMoved(QMouseEvent *event);
|
||||||
void mouseReleased(QMouseEvent *event);
|
void mouseReleased(QMouseEvent *event);
|
||||||
|
|
|
@ -2120,11 +2120,9 @@ void MainWindow::on_actionSCTPFilterThisAssociation_triggered()
|
||||||
|
|
||||||
void MainWindow::on_actionStatisticsFlowGraph_triggered()
|
void MainWindow::on_actionStatisticsFlowGraph_triggered()
|
||||||
{
|
{
|
||||||
SequenceDialog *sequence_dialog = new SequenceDialog(this, capture_file_.capFile());
|
SequenceDialog *sequence_dialog = new SequenceDialog(*this, capture_file_);
|
||||||
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
|
||||||
sequence_dialog, SLOT(setCaptureFile(capture_file*)));
|
|
||||||
sequence_dialog->show();
|
sequence_dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2165,11 +2163,9 @@ void MainWindow::on_actionStatisticsTcpStreamWindowScaling_triggered()
|
||||||
|
|
||||||
void MainWindow::openStatisticsTreeDialog(const gchar *abbr)
|
void MainWindow::openStatisticsTreeDialog(const gchar *abbr)
|
||||||
{
|
{
|
||||||
StatsTreeDialog *st_dialog = new StatsTreeDialog(this, capture_file_.capFile(), abbr);
|
StatsTreeDialog *st_dialog = new StatsTreeDialog(*this, capture_file_, abbr);
|
||||||
// connect(st_dialog, SIGNAL(goToPacket(int)),
|
// connect(st_dialog, SIGNAL(goToPacket(int)),
|
||||||
// packet_list_, SLOT(goToPacket(int)));
|
// packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
|
||||||
st_dialog, SLOT(setCaptureFile(capture_file*)));
|
|
||||||
st_dialog->show();
|
st_dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2360,10 +2356,8 @@ void MainWindow::statCommandIOGraph(const char *arg, void *userdata)
|
||||||
{
|
{
|
||||||
Q_UNUSED(arg);
|
Q_UNUSED(arg);
|
||||||
Q_UNUSED(userdata);
|
Q_UNUSED(userdata);
|
||||||
IOGraphDialog *iog_dialog = new IOGraphDialog(this, capture_file_.capFile());
|
IOGraphDialog *iog_dialog = new IOGraphDialog(*this, capture_file_);
|
||||||
connect(iog_dialog, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
connect(iog_dialog, SIGNAL(goToPacket(int)), packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
|
||||||
iog_dialog, SLOT(setCaptureFile(capture_file*)));
|
|
||||||
iog_dialog->show();
|
iog_dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2380,13 +2374,11 @@ void MainWindow::on_actionStatisticsSametime_triggered()
|
||||||
|
|
||||||
void MainWindow::openVoipCallsDialog(bool all_flows)
|
void MainWindow::openVoipCallsDialog(bool all_flows)
|
||||||
{
|
{
|
||||||
VoipCallsDialog *voip_calls_dialog = new VoipCallsDialog(this, capture_file_.capFile(), all_flows);
|
VoipCallsDialog *voip_calls_dialog = new VoipCallsDialog(*this, capture_file_, all_flows);
|
||||||
connect(voip_calls_dialog, SIGNAL(goToPacket(int)),
|
connect(voip_calls_dialog, SIGNAL(goToPacket(int)),
|
||||||
packet_list_, SLOT(goToPacket(int)));
|
packet_list_, SLOT(goToPacket(int)));
|
||||||
connect(voip_calls_dialog, SIGNAL(updateFilter(QString&, bool)),
|
connect(voip_calls_dialog, SIGNAL(updateFilter(QString&, bool)),
|
||||||
this, SLOT(filterPackets(QString&, bool)));
|
this, SLOT(filterPackets(QString&, bool)));
|
||||||
connect(this, SIGNAL(setCaptureFile(capture_file*)),
|
|
||||||
voip_calls_dialog, SLOT(setCaptureFile(capture_file*)));
|
|
||||||
voip_calls_dialog->show();
|
voip_calls_dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,9 @@
|
||||||
// - Create WSGraph subclasses with common behavior.
|
// - Create WSGraph subclasses with common behavior.
|
||||||
// - Help button and text
|
// - Help button and text
|
||||||
|
|
||||||
SequenceDialog::SequenceDialog(QWidget *parent, capture_file *cf, seq_analysis_info_t *sainfo) :
|
SequenceDialog::SequenceDialog(QWidget &parent, CaptureFile &cf, seq_analysis_info_t *sainfo) :
|
||||||
QDialog(parent),
|
WiresharkDialog(parent, cf),
|
||||||
ui(new Ui::SequenceDialog),
|
ui(new Ui::SequenceDialog),
|
||||||
cap_file_(cf),
|
|
||||||
sainfo_(sainfo),
|
sainfo_(sainfo),
|
||||||
num_items_(0),
|
num_items_(0),
|
||||||
packet_num_(0),
|
packet_num_(0),
|
||||||
|
@ -56,6 +55,7 @@ SequenceDialog::SequenceDialog(QWidget *parent, capture_file *cf, seq_analysis_i
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
QCustomPlot *sp = ui->sequencePlot;
|
QCustomPlot *sp = ui->sequencePlot;
|
||||||
|
setWindowSubtitle(sainfo ? tr("Call Flow") : tr("Flow"));
|
||||||
|
|
||||||
if (!sainfo_) {
|
if (!sainfo_) {
|
||||||
sainfo_ = sequence_analysis_info_new();
|
sainfo_ = sequence_analysis_info_new();
|
||||||
|
@ -122,9 +122,7 @@ SequenceDialog::SequenceDialog(QWidget *parent, capture_file *cf, seq_analysis_i
|
||||||
save_bt->setText(tr("Save As..."));
|
save_bt->setText(tr("Save As..."));
|
||||||
|
|
||||||
// XXX Use recent settings instead
|
// XXX Use recent settings instead
|
||||||
if (parent) {
|
resize(parent.width(), parent.height() * 4 / 5);
|
||||||
resize(parent->width(), parent->height() * 4 / 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
connect(ui->horizontalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(hScrollBarChanged(int)));
|
connect(ui->horizontalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(hScrollBarChanged(int)));
|
||||||
connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(vScrollBarChanged(int)));
|
connect(ui->verticalScrollBar, SIGNAL(valueChanged(int)), this, SLOT(vScrollBarChanged(int)));
|
||||||
|
@ -148,11 +146,8 @@ SequenceDialog::~SequenceDialog()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SequenceDialog::setCaptureFile(capture_file *cf)
|
void SequenceDialog::updateWidgets()
|
||||||
{
|
{
|
||||||
if (!cf) { // We only want to know when the file closes.
|
|
||||||
cap_file_ = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SequenceDialog::showEvent(QShowEvent *event)
|
void SequenceDialog::showEvent(QShowEvent *event)
|
||||||
|
@ -315,7 +310,7 @@ void SequenceDialog::on_buttonBox_accepted()
|
||||||
.arg(png_filter)
|
.arg(png_filter)
|
||||||
.arg(bmp_filter)
|
.arg(bmp_filter)
|
||||||
.arg(jpeg_filter);
|
.arg(jpeg_filter);
|
||||||
if (cap_file_) {
|
if (!file_closed_) {
|
||||||
filter.append(QString(";;%5").arg(ascii_filter));
|
filter.append(QString(";;%5").arg(ascii_filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -332,8 +327,8 @@ void SequenceDialog::on_buttonBox_accepted()
|
||||||
save_ok = ui->sequencePlot->saveBmp(file_name);
|
save_ok = ui->sequencePlot->saveBmp(file_name);
|
||||||
} else if (extension.compare(jpeg_filter) == 0) {
|
} else if (extension.compare(jpeg_filter) == 0) {
|
||||||
save_ok = ui->sequencePlot->saveJpg(file_name);
|
save_ok = ui->sequencePlot->saveJpg(file_name);
|
||||||
} else if (extension.compare(ascii_filter) == 0 && cap_file_ && sainfo_) {
|
} else if (extension.compare(ascii_filter) == 0 && !file_closed_ && sainfo_) {
|
||||||
save_ok = sequence_analysis_dump_to_file(file_name.toUtf8().constData(), sainfo_, cap_file_, 0);
|
save_ok = sequence_analysis_dump_to_file(file_name.toUtf8().constData(), sainfo_, cap_file_.capFile(), 0);
|
||||||
}
|
}
|
||||||
// else error dialog?
|
// else error dialog?
|
||||||
if (save_ok) {
|
if (save_ok) {
|
||||||
|
@ -345,7 +340,7 @@ void SequenceDialog::on_buttonBox_accepted()
|
||||||
|
|
||||||
void SequenceDialog::fillDiagram()
|
void SequenceDialog::fillDiagram()
|
||||||
{
|
{
|
||||||
if (!sainfo_) return;
|
if (!sainfo_ || file_closed_) return;
|
||||||
|
|
||||||
QCustomPlot *sp = ui->sequencePlot;
|
QCustomPlot *sp = ui->sequencePlot;
|
||||||
|
|
||||||
|
@ -354,7 +349,7 @@ void SequenceDialog::fillDiagram()
|
||||||
} else {
|
} else {
|
||||||
seq_diagram_->clearData();
|
seq_diagram_->clearData();
|
||||||
sequence_analysis_list_free(sainfo_);
|
sequence_analysis_list_free(sainfo_);
|
||||||
sequence_analysis_list_get(cap_file_, sainfo_);
|
sequence_analysis_list_get(cap_file_.capFile(), sainfo_);
|
||||||
num_items_ = sequence_analysis_get_nodes(sainfo_);
|
num_items_ = sequence_analysis_get_nodes(sainfo_);
|
||||||
seq_diagram_->setData(sainfo_);
|
seq_diagram_->setData(sainfo_);
|
||||||
}
|
}
|
||||||
|
@ -431,7 +426,7 @@ void SequenceDialog::on_resetButton_clicked()
|
||||||
|
|
||||||
void SequenceDialog::on_actionGoToPacket_triggered()
|
void SequenceDialog::on_actionGoToPacket_triggered()
|
||||||
{
|
{
|
||||||
if (cap_file_ && packet_num_ > 0) {
|
if (!file_closed_ && packet_num_ > 0) {
|
||||||
emit goToPacket(packet_num_);
|
emit goToPacket(packet_num_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,8 +33,8 @@
|
||||||
#include "ui/tap-sequence-analysis.h"
|
#include "ui/tap-sequence-analysis.h"
|
||||||
|
|
||||||
#include "qcustomplot.h"
|
#include "qcustomplot.h"
|
||||||
|
#include "wireshark_dialog.h"
|
||||||
|
|
||||||
#include <QDialog>
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
|
@ -43,20 +43,17 @@ class SequenceDialog;
|
||||||
|
|
||||||
class SequenceDiagram;
|
class SequenceDiagram;
|
||||||
|
|
||||||
class SequenceDialog : public QDialog
|
class SequenceDialog : public WiresharkDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit SequenceDialog(QWidget *parent = 0, capture_file *cf = NULL, seq_analysis_info_t *sainfo = NULL);
|
explicit SequenceDialog(QWidget &parent, CaptureFile &cf, seq_analysis_info_t *sainfo = NULL);
|
||||||
~SequenceDialog();
|
~SequenceDialog();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void goToPacket(int packet_num);
|
void goToPacket(int packet_num);
|
||||||
|
|
||||||
public slots:
|
|
||||||
void setCaptureFile(capture_file *cf);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void showEvent(QShowEvent *event);
|
void showEvent(QShowEvent *event);
|
||||||
void resizeEvent(QResizeEvent *event);
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
@ -64,6 +61,7 @@ protected:
|
||||||
void mouseReleaseEvent(QMouseEvent *event);
|
void mouseReleaseEvent(QMouseEvent *event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateWidgets();
|
||||||
void hScrollBarChanged(int value);
|
void hScrollBarChanged(int value);
|
||||||
void vScrollBarChanged(int value);
|
void vScrollBarChanged(int value);
|
||||||
void xAxisChanged(QCPRange range);
|
void xAxisChanged(QCPRange range);
|
||||||
|
@ -91,7 +89,6 @@ private slots:
|
||||||
private:
|
private:
|
||||||
Ui::SequenceDialog *ui;
|
Ui::SequenceDialog *ui;
|
||||||
SequenceDiagram *seq_diagram_;
|
SequenceDiagram *seq_diagram_;
|
||||||
capture_file *cap_file_;
|
|
||||||
seq_analysis_info_t *sainfo_;
|
seq_analysis_info_t *sainfo_;
|
||||||
int num_items_;
|
int num_items_;
|
||||||
guint32 packet_num_;
|
guint32 packet_num_;
|
||||||
|
|
|
@ -10,9 +10,6 @@
|
||||||
<height>568</height>
|
<height>568</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Flow</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0,0">
|
<layout class="QVBoxLayout" name="verticalLayout_2" stretch="1,0,0,0">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
@ -46,7 +43,7 @@
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="hintLabel">
|
<widget class="ElidedLabel" name="hintLabel">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string><html><head/><body>
|
<string><html><head/><body>
|
||||||
|
|
||||||
|
@ -358,6 +355,11 @@
|
||||||
<header>qcustomplot.h</header>
|
<header>qcustomplot.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>ElidedLabel</class>
|
||||||
|
<extends>QLabel</extends>
|
||||||
|
<header>elided_label.h</header>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
<connections>
|
<connections>
|
||||||
|
|
|
@ -44,9 +44,7 @@
|
||||||
// - Add help
|
// - Add help
|
||||||
// - Update to match bug 9452 / r53657
|
// - Update to match bug 9452 / r53657
|
||||||
|
|
||||||
#include <QDebug>
|
const int item_col_ = 0;
|
||||||
|
|
||||||
const int item_col_ = 0;
|
|
||||||
|
|
||||||
const int expand_all_threshold_ = 100; // Arbitrary
|
const int expand_all_threshold_ = 100; // Arbitrary
|
||||||
|
|
||||||
|
@ -72,15 +70,15 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
StatsTreeDialog::StatsTreeDialog(QWidget *parent, capture_file *cf, const char *cfg_abbr) :
|
StatsTreeDialog::StatsTreeDialog(QWidget &parent, CaptureFile &cf, const char *cfg_abbr) :
|
||||||
QDialog(parent),
|
WiresharkDialog(parent, cf),
|
||||||
ui(new Ui::StatsTreeDialog),
|
ui(new Ui::StatsTreeDialog),
|
||||||
st_(NULL),
|
st_(NULL),
|
||||||
st_cfg_(NULL),
|
st_cfg_(NULL)
|
||||||
cap_file_(cf)
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
st_cfg_ = stats_tree_get_cfg_by_abbr(cfg_abbr);
|
st_cfg_ = stats_tree_get_cfg_by_abbr(cfg_abbr);
|
||||||
|
memset(&cfg_pr_, 0, sizeof(struct _tree_cfg_pres));
|
||||||
|
|
||||||
if (!st_cfg_) {
|
if (!st_cfg_) {
|
||||||
QMessageBox::critical(this, tr("Configuration not found"),
|
QMessageBox::critical(this, tr("Configuration not found"),
|
||||||
|
@ -110,35 +108,19 @@ StatsTreeDialog::~StatsTreeDialog()
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void StatsTreeDialog::setCaptureFile(capture_file *cf)
|
|
||||||
{
|
|
||||||
if (!cf) { // We only want to know when the file closes.
|
|
||||||
cap_file_ = NULL;
|
|
||||||
ui->displayFilterLineEdit->setEnabled(false);
|
|
||||||
ui->applyFilterButton->setEnabled(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void StatsTreeDialog::fillTree()
|
void StatsTreeDialog::fillTree()
|
||||||
{
|
{
|
||||||
GString *error_string;
|
GString *error_string;
|
||||||
if (!st_cfg_) return;
|
if (!st_cfg_ || file_closed_) return;
|
||||||
|
|
||||||
gchar* display_name_temp = stats_tree_get_displayname(st_cfg_->name);
|
gchar* display_name_temp = stats_tree_get_displayname(st_cfg_->name);
|
||||||
QString display_name(display_name_temp);
|
QString display_name(display_name_temp);
|
||||||
g_free(display_name_temp);
|
g_free(display_name_temp);
|
||||||
|
|
||||||
setWindowTitle(display_name + tr(" Stats Tree"));
|
// The GTK+ UI appends "Stats Tree" to the window title. If we do the same
|
||||||
|
// here we should expand the name completely, e.g. to "Statistics Tree".
|
||||||
|
setWindowSubtitle(display_name);
|
||||||
|
|
||||||
if (!cap_file_) return;
|
|
||||||
|
|
||||||
if (st_cfg_->in_use) {
|
|
||||||
QMessageBox::warning(this, tr("%1 already open").arg(display_name),
|
|
||||||
tr("Each type of tree can only be generated one at time."));
|
|
||||||
reject();
|
|
||||||
}
|
|
||||||
|
|
||||||
st_cfg_->in_use = TRUE;
|
|
||||||
st_cfg_->pr = &cfg_pr_;
|
st_cfg_->pr = &cfg_pr_;
|
||||||
cfg_pr_.st_dlg = this;
|
cfg_pr_.st_dlg = this;
|
||||||
|
|
||||||
|
@ -174,13 +156,12 @@ void StatsTreeDialog::fillTree()
|
||||||
reject();
|
reject();
|
||||||
}
|
}
|
||||||
|
|
||||||
cf_retap_packets(cap_file_);
|
cf_retap_packets(cap_file_.capFile());
|
||||||
drawTreeItems(st_);
|
drawTreeItems(st_);
|
||||||
|
|
||||||
ui->statsTreeWidget->setSortingEnabled(true);
|
ui->statsTreeWidget->setSortingEnabled(true);
|
||||||
remove_tap_listener(st_);
|
remove_tap_listener(st_);
|
||||||
|
|
||||||
st_cfg_->in_use = FALSE;
|
|
||||||
st_cfg_->pr = NULL;
|
st_cfg_->pr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,6 +231,14 @@ void StatsTreeDialog::drawTreeItems(void *st_ptr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void StatsTreeDialog::updateWidgets()
|
||||||
|
{
|
||||||
|
if (file_closed_) {
|
||||||
|
ui->displayFilterLineEdit->setEnabled(false);
|
||||||
|
ui->applyFilterButton->setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void StatsTreeDialog::on_applyFilterButton_clicked()
|
void StatsTreeDialog::on_applyFilterButton_clicked()
|
||||||
{
|
{
|
||||||
fillTree();
|
fillTree();
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
|
|
||||||
#include "epan/stats_tree_priv.h"
|
#include "epan/stats_tree_priv.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include "wireshark_dialog.h"
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class StatsTreeDialog;
|
class StatsTreeDialog;
|
||||||
|
@ -41,17 +41,16 @@ struct _tree_cfg_pres {
|
||||||
class StatsTreeDialog* st_dlg;
|
class StatsTreeDialog* st_dlg;
|
||||||
};
|
};
|
||||||
|
|
||||||
class StatsTreeDialog : public QDialog
|
class StatsTreeDialog : public WiresharkDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit StatsTreeDialog(QWidget *parent = 0, capture_file *cf = NULL, const char *cfg_abbr = NULL);
|
explicit StatsTreeDialog(QWidget &parent, CaptureFile &cf, const char *cfg_abbr = NULL);
|
||||||
~StatsTreeDialog();
|
~StatsTreeDialog();
|
||||||
static void setupNode(stat_node* node);
|
static void setupNode(stat_node* node);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setCaptureFile(capture_file *cf);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::StatsTreeDialog *ui;
|
Ui::StatsTreeDialog *ui;
|
||||||
|
@ -59,13 +58,13 @@ private:
|
||||||
struct _tree_cfg_pres cfg_pr_;
|
struct _tree_cfg_pres cfg_pr_;
|
||||||
stats_tree *st_;
|
stats_tree *st_;
|
||||||
stats_tree_cfg *st_cfg_;
|
stats_tree_cfg *st_cfg_;
|
||||||
capture_file *cap_file_;
|
|
||||||
|
|
||||||
void fillTree();
|
void fillTree();
|
||||||
static void resetTap(void *st_ptr);
|
static void resetTap(void *st_ptr);
|
||||||
static void drawTreeItems(void *st_ptr);
|
static void drawTreeItems(void *st_ptr);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void updateWidgets();
|
||||||
void on_applyFilterButton_clicked();
|
void on_applyFilterButton_clicked();
|
||||||
void on_actionCopyToClipboard_triggered();
|
void on_actionCopyToClipboard_triggered();
|
||||||
void on_actionSaveAs_triggered();
|
void on_actionSaveAs_triggered();
|
||||||
|
|
|
@ -157,13 +157,13 @@ public:
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
VoipCallsDialog::VoipCallsDialog(QWidget *parent, capture_file *cf, bool all_flows) :
|
VoipCallsDialog::VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flows) :
|
||||||
QDialog(parent),
|
WiresharkDialog(parent, cf),
|
||||||
ui(new Ui::VoipCallsDialog),
|
ui(new Ui::VoipCallsDialog)
|
||||||
cap_file_(cf)
|
|
||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
ui->callTreeWidget->sortByColumn(start_time_col_, Qt::AscendingOrder);
|
ui->callTreeWidget->sortByColumn(start_time_col_, Qt::AscendingOrder);
|
||||||
|
setWindowSubtitle(all_flows ? tr("SIP Flows") : tr("VoIP Calls"));
|
||||||
|
|
||||||
ctx_menu_.addActions(QList<QAction *>() << ui->actionSelect_All);
|
ctx_menu_.addActions(QList<QAction *>() << ui->actionSelect_All);
|
||||||
|
|
||||||
|
@ -173,9 +173,7 @@ VoipCallsDialog::VoipCallsDialog(QWidget *parent, capture_file *cf, bool all_flo
|
||||||
player_button_->setIcon(StockIcon("media-playback-start"));
|
player_button_->setIcon(StockIcon("media-playback-start"));
|
||||||
|
|
||||||
// XXX Use recent settings instead
|
// XXX Use recent settings instead
|
||||||
if (parent) {
|
resize(parent.width() * 4 / 5, parent.height() * 2 / 3);
|
||||||
resize(parent->width() * 4 / 5, parent->height() * 2 / 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
memset (&tapinfo_, 0, sizeof(tapinfo_));
|
memset (&tapinfo_, 0, sizeof(tapinfo_));
|
||||||
tapinfo_.tap_packet = tapPacket;
|
tapinfo_.tap_packet = tapPacket;
|
||||||
|
@ -191,10 +189,8 @@ VoipCallsDialog::VoipCallsDialog(QWidget *parent, capture_file *cf, bool all_flo
|
||||||
|
|
||||||
updateWidgets();
|
updateWidgets();
|
||||||
|
|
||||||
if (cap_file_) {
|
tapinfo_.session = cap_file_.capFile()->epan;
|
||||||
tapinfo_.session = cap_file_->epan;
|
cap_file_.retapPackets();
|
||||||
cf_retap_packets(cap_file_);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
VoipCallsDialog::~VoipCallsDialog()
|
VoipCallsDialog::~VoipCallsDialog()
|
||||||
|
@ -205,15 +201,11 @@ VoipCallsDialog::~VoipCallsDialog()
|
||||||
sequence_analysis_info_free(tapinfo_.graph_analysis);
|
sequence_analysis_info_free(tapinfo_.graph_analysis);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoipCallsDialog::setCaptureFile(capture_file *cf)
|
void VoipCallsDialog::captureFileClosing()
|
||||||
{
|
{
|
||||||
if (!cf) { // We only want to know when the file closes.
|
voip_calls_remove_all_tap_listeners(&tapinfo_);
|
||||||
voip_calls_remove_all_tap_listeners(&tapinfo_);
|
tapinfo_.session = NULL;
|
||||||
cap_file_ = NULL;
|
WiresharkDialog::captureFileClosing();
|
||||||
tapinfo_.session = NULL;
|
|
||||||
}
|
|
||||||
emit captureFileChanged(cap_file_);
|
|
||||||
updateWidgets();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void VoipCallsDialog::contextMenuEvent(QContextMenuEvent *event)
|
void VoipCallsDialog::contextMenuEvent(QContextMenuEvent *event)
|
||||||
|
@ -436,7 +428,7 @@ void VoipCallsDialog::prepareFilter()
|
||||||
|
|
||||||
void VoipCallsDialog::showSequence()
|
void VoipCallsDialog::showSequence()
|
||||||
{
|
{
|
||||||
if (!cap_file_) return;
|
if (file_closed_) return;
|
||||||
|
|
||||||
QSet<guint16> selected_calls;
|
QSet<guint16> selected_calls;
|
||||||
foreach (QTreeWidgetItem *ti, ui->callTreeWidget->selectedItems()) {
|
foreach (QTreeWidgetItem *ti, ui->callTreeWidget->selectedItems()) {
|
||||||
|
@ -452,12 +444,10 @@ void VoipCallsDialog::showSequence()
|
||||||
cur_ga_item = g_list_next(cur_ga_item);
|
cur_ga_item = g_list_next(cur_ga_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
SequenceDialog *sequence_dialog = new SequenceDialog(this, cap_file_, tapinfo_.graph_analysis);
|
SequenceDialog *sequence_dialog = new SequenceDialog(*parentWidget(), cap_file_, tapinfo_.graph_analysis);
|
||||||
// XXX This goes away when we close the VoIP Calls dialog.
|
// XXX This goes away when we close the VoIP Calls dialog.
|
||||||
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
connect(sequence_dialog, SIGNAL(goToPacket(int)),
|
||||||
this, SIGNAL(goToPacket(int)));
|
this, SIGNAL(goToPacket(int)));
|
||||||
connect(this, SIGNAL(captureFileChanged(capture_file*)),
|
|
||||||
sequence_dialog, SLOT(setCaptureFile(capture_file*)));
|
|
||||||
sequence_dialog->show();
|
sequence_dialog->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,8 @@
|
||||||
|
|
||||||
#include "ui/voip_calls.h"
|
#include "ui/voip_calls.h"
|
||||||
|
|
||||||
#include <QDialog>
|
#include "wireshark_dialog.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
|
|
||||||
class QAbstractButton;
|
class QAbstractButton;
|
||||||
|
@ -41,16 +42,15 @@ class VoipCallsDialog;
|
||||||
}
|
}
|
||||||
|
|
||||||
class QTreeWidgetItem;
|
class QTreeWidgetItem;
|
||||||
class VoipCallsDialog : public QDialog
|
class VoipCallsDialog : public WiresharkDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit VoipCallsDialog(QWidget *parent = 0, capture_file *cf = NULL, bool all_flows = false);
|
explicit VoipCallsDialog(QWidget &parent, CaptureFile &cf, bool all_flows = false);
|
||||||
~VoipCallsDialog();
|
~VoipCallsDialog();
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setCaptureFile(capture_file *cf);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void updateFilter(QString &filter, bool force = false);
|
void updateFilter(QString &filter, bool force = false);
|
||||||
|
@ -66,7 +66,6 @@ protected slots:
|
||||||
private:
|
private:
|
||||||
Ui::VoipCallsDialog *ui;
|
Ui::VoipCallsDialog *ui;
|
||||||
|
|
||||||
capture_file *cap_file_;
|
|
||||||
voip_calls_tapinfo_t tapinfo_;
|
voip_calls_tapinfo_t tapinfo_;
|
||||||
QPushButton *prepare_button_;
|
QPushButton *prepare_button_;
|
||||||
QPushButton *sequence_button_;
|
QPushButton *sequence_button_;
|
||||||
|
@ -84,6 +83,7 @@ private:
|
||||||
void showSequence();
|
void showSequence();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void captureFileClosing();
|
||||||
void on_callTreeWidget_itemActivated(QTreeWidgetItem *item, int);
|
void on_callTreeWidget_itemActivated(QTreeWidgetItem *item, int);
|
||||||
void on_callTreeWidget_itemSelectionChanged();
|
void on_callTreeWidget_itemSelectionChanged();
|
||||||
void on_actionSelect_All_triggered();
|
void on_actionSelect_All_triggered();
|
||||||
|
|
|
@ -82,7 +82,6 @@ static char *last_open_dir = NULL;
|
||||||
static bool updated_last_open_dir = FALSE;
|
static bool updated_last_open_dir = FALSE;
|
||||||
static QList<recent_item_status *> recent_items_;
|
static QList<recent_item_status *> recent_items_;
|
||||||
|
|
||||||
QString WiresharkApplication::application_name_ = QString("Wireshark");
|
|
||||||
QString WiresharkApplication::window_title_separator_ = QString::fromUtf8(" " UTF8_MIDDLE_DOT " ");
|
QString WiresharkApplication::window_title_separator_ = QString::fromUtf8(" " UTF8_MIDDLE_DOT " ");
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -382,7 +381,7 @@ const QString WiresharkApplication::windowTitleString(QStringList title_parts)
|
||||||
QString ti = tii.next();
|
QString ti = tii.next();
|
||||||
if (ti.isEmpty()) tii.remove();
|
if (ti.isEmpty()) tii.remove();
|
||||||
}
|
}
|
||||||
title_parts.prepend(application_name_);
|
title_parts.prepend(applicationName());
|
||||||
return title_parts.join(window_title_separator_);
|
return title_parts.join(window_title_separator_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,6 +477,7 @@ WiresharkApplication::WiresharkApplication(int &argc, char **argv) :
|
||||||
initialized_(false)
|
initialized_(false)
|
||||||
{
|
{
|
||||||
wsApp = this;
|
wsApp = this;
|
||||||
|
setApplicationName("Wireshark");
|
||||||
|
|
||||||
Q_INIT_RESOURCE(about);
|
Q_INIT_RESOURCE(about);
|
||||||
Q_INIT_RESOURCE(display_filter);
|
Q_INIT_RESOURCE(display_filter);
|
||||||
|
|
|
@ -93,7 +93,6 @@ public:
|
||||||
bool isInitialized() { return initialized_; }
|
bool isInitialized() { return initialized_; }
|
||||||
const QIcon &normalIcon() const { return normal_icon_; }
|
const QIcon &normalIcon() const { return normal_icon_; }
|
||||||
const QIcon &captureIcon() const { return capture_icon_; }
|
const QIcon &captureIcon() const { return capture_icon_; }
|
||||||
const QString &applicationName() const { return application_name_; }
|
|
||||||
const QString &windowTitleSeparator() const { return window_title_separator_; }
|
const QString &windowTitleSeparator() const { return window_title_separator_; }
|
||||||
const QString windowTitleString(QStringList title_parts);
|
const QString windowTitleString(QStringList title_parts);
|
||||||
const QString windowTitleString(QString title_part) { return windowTitleString(QStringList() << title_part); }
|
const QString windowTitleString(QString title_part) { return windowTitleString(QStringList() << title_part); }
|
||||||
|
@ -112,7 +111,6 @@ private:
|
||||||
QSocketNotifier *if_notifier_;
|
QSocketNotifier *if_notifier_;
|
||||||
QIcon normal_icon_;
|
QIcon normal_icon_;
|
||||||
QIcon capture_icon_;
|
QIcon capture_icon_;
|
||||||
static QString application_name_;
|
|
||||||
static QString window_title_separator_;
|
static QString window_title_separator_;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Reference in New Issue