Add general a busy progress indicator.

Rename CaptureFileProgressFrame to ProgressFrame. It's not limited to
capture files. Add "busy" routines there and in MainStatusBar. Show a
busy indicator while sorting columns.

Use toByteArray().constData instead of .data. I'm not sure if it matters
in our case but it's more correct.

Change-Id: Ibe35fee9b9dd3fabb5ff8ddcc21f6bf59dec4af6
Reviewed-on: https://code.wireshark.org/review/9720
Petri-Dish: Gerald Combs <gerald@wireshark.org>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Gerald Combs <gerald@wireshark.org>
This commit is contained in:
Gerald Combs 2015-07-17 15:06:55 -07:00
parent eb1ccbdccd
commit 63edb9904f
20 changed files with 167 additions and 84 deletions

View File

@ -32,7 +32,6 @@ set(WIRESHARK_QT_HEADERS
byte_view_text.h byte_view_text.h
capture_file.h capture_file.h
capture_file_dialog.h capture_file_dialog.h
capture_file_progress_frame.h
capture_file_properties_dialog.h capture_file_properties_dialog.h
capture_filter_combo.h capture_filter_combo.h
capture_filter_edit.h capture_filter_edit.h
@ -93,6 +92,7 @@ set(WIRESHARK_QT_HEADERS
preferences_dialog.h preferences_dialog.h
print_dialog.h print_dialog.h
profile_dialog.h profile_dialog.h
progress_frame.h
proto_tree.h proto_tree.h
protocol_hierarchy_dialog.h protocol_hierarchy_dialog.h
protocol_preferences_menu.h protocol_preferences_menu.h
@ -163,7 +163,6 @@ set(WIRESHARK_QT_SRC
byte_view_text.cpp byte_view_text.cpp
capture_file.cpp capture_file.cpp
capture_file_dialog.cpp capture_file_dialog.cpp
capture_file_progress_frame.cpp
capture_file_properties_dialog.cpp capture_file_properties_dialog.cpp
capture_filter_combo.cpp capture_filter_combo.cpp
capture_filter_edit.cpp capture_filter_edit.cpp
@ -221,6 +220,7 @@ set(WIRESHARK_QT_SRC
preferences_dialog.cpp preferences_dialog.cpp
print_dialog.cpp print_dialog.cpp
profile_dialog.cpp profile_dialog.cpp
progress_frame.cpp
proto_tree.cpp proto_tree.cpp
protocol_hierarchy_dialog.cpp protocol_hierarchy_dialog.cpp
protocol_preferences_menu.cpp protocol_preferences_menu.cpp
@ -294,7 +294,6 @@ set(WIRESHARK_QT_UI
bluetooth_att_server_attributes_dialog.ui bluetooth_att_server_attributes_dialog.ui
bluetooth_devices_dialog.ui bluetooth_devices_dialog.ui
bluetooth_hci_summary_dialog.ui bluetooth_hci_summary_dialog.ui
capture_file_progress_frame.ui
capture_file_properties_dialog.ui capture_file_properties_dialog.ui
capture_interfaces_dialog.ui capture_interfaces_dialog.ui
capture_preferences_frame.ui capture_preferences_frame.ui
@ -334,6 +333,7 @@ set(WIRESHARK_QT_UI
preferences_dialog.ui preferences_dialog.ui
print_dialog.ui print_dialog.ui
profile_dialog.ui profile_dialog.ui
progress_frame.ui
protocol_hierarchy_dialog.ui protocol_hierarchy_dialog.ui
resolved_addresses_dialog.ui resolved_addresses_dialog.ui
rtp_analysis_dialog.ui rtp_analysis_dialog.ui

View File

@ -136,8 +136,6 @@ bluetooth_devices_dialog.$(OBJEXT): ui_bluetooth_devices_dialog.h
bluetooth_hci_summary_dialog.$(OBJEXT): ui_bluetooth_hci_summary_dialog.h bluetooth_hci_summary_dialog.$(OBJEXT): ui_bluetooth_hci_summary_dialog.h
capture_file_progress_frame.$(OBJEXT): ui_capture_file_progress_frame.h
capture_file_properties_dialog.$(OBJEXT): ui_capture_file_properties_dialog.h capture_file_properties_dialog.$(OBJEXT): ui_capture_file_properties_dialog.h
capture_interfaces_dialog.$(OBJEXT): ui_capture_interfaces_dialog.h capture_interfaces_dialog.$(OBJEXT): ui_capture_interfaces_dialog.h
@ -218,6 +216,8 @@ preferences_dialog.$(OBJEXT): ui_preferences_dialog.h
print_dialog.$(OBJEXT): ui_print_dialog.h print_dialog.$(OBJEXT): ui_print_dialog.h
progress_frame.$(OBJEXT): ui_progress_frame.h
rtp_analysis_dialog.$(OBJEXT): ui_rtp_analysis_dialog.h rtp_analysis_dialog.$(OBJEXT): ui_rtp_analysis_dialog.h
rtp_stream_dialog.$(OBJEXT): ui_rtp_stream_dialog.h rtp_stream_dialog.$(OBJEXT): ui_rtp_stream_dialog.h

View File

@ -33,7 +33,6 @@ NODIST_GENERATED_HEADER_FILES = \
ui_bluetooth_att_server_attributes_dialog.h \ ui_bluetooth_att_server_attributes_dialog.h \
ui_bluetooth_devices_dialog.h \ ui_bluetooth_devices_dialog.h \
ui_bluetooth_hci_summary_dialog.h \ ui_bluetooth_hci_summary_dialog.h \
ui_capture_file_progress_frame.h \
ui_capture_file_properties_dialog.h \ ui_capture_file_properties_dialog.h \
ui_capture_interfaces_dialog.h \ ui_capture_interfaces_dialog.h \
ui_capture_preferences_frame.h \ ui_capture_preferences_frame.h \
@ -75,6 +74,7 @@ NODIST_GENERATED_HEADER_FILES = \
ui_preferences_dialog.h \ ui_preferences_dialog.h \
ui_print_dialog.h \ ui_print_dialog.h \
ui_profile_dialog.h \ ui_profile_dialog.h \
ui_progress_frame.h \
ui_protocol_hierarchy_dialog.h \ ui_protocol_hierarchy_dialog.h \
ui_remote_capture_dialog.h \ ui_remote_capture_dialog.h \
ui_remote_settings_dialog.h \ ui_remote_settings_dialog.h \
@ -141,7 +141,6 @@ MOC_HDRS = \
byte_view_text.h \ byte_view_text.h \
capture_file.h \ capture_file.h \
capture_file_dialog.h \ capture_file_dialog.h \
capture_file_progress_frame.h \
capture_file_properties_dialog.h \ capture_file_properties_dialog.h \
capture_filter_combo.h \ capture_filter_combo.h \
capture_filter_edit.h \ capture_filter_edit.h \
@ -204,6 +203,7 @@ MOC_HDRS = \
preferences_dialog.h \ preferences_dialog.h \
print_dialog.h \ print_dialog.h \
profile_dialog.h \ profile_dialog.h \
progress_frame.h \
proto_tree.h \ proto_tree.h \
protocol_hierarchy_dialog.h \ protocol_hierarchy_dialog.h \
protocol_preferences_menu.h \ protocol_preferences_menu.h \
@ -251,7 +251,6 @@ UI_FILES = \
bluetooth_att_server_attributes_dialog.ui \ bluetooth_att_server_attributes_dialog.ui \
bluetooth_devices_dialog.ui \ bluetooth_devices_dialog.ui \
bluetooth_hci_summary_dialog.ui \ bluetooth_hci_summary_dialog.ui \
capture_file_progress_frame.ui \
capture_file_properties_dialog.ui \ capture_file_properties_dialog.ui \
capture_interfaces_dialog.ui \ capture_interfaces_dialog.ui \
capture_preferences_frame.ui \ capture_preferences_frame.ui \
@ -292,6 +291,7 @@ UI_FILES = \
preferences_dialog.ui \ preferences_dialog.ui \
print_dialog.ui \ print_dialog.ui \
profile_dialog.ui \ profile_dialog.ui \
progress_frame.ui \
protocol_hierarchy_dialog.ui \ protocol_hierarchy_dialog.ui \
remote_capture_dialog.ui \ remote_capture_dialog.ui \
remote_settings_dialog.ui \ remote_settings_dialog.ui \
@ -374,7 +374,6 @@ WIRESHARK_QT_SRC = \
byte_view_text.cpp \ byte_view_text.cpp \
capture_file.cpp \ capture_file.cpp \
capture_file_dialog.cpp \ capture_file_dialog.cpp \
capture_file_progress_frame.cpp \
capture_file_properties_dialog.cpp \ capture_file_properties_dialog.cpp \
capture_filter_combo.cpp \ capture_filter_combo.cpp \
capture_filter_edit.cpp \ capture_filter_edit.cpp \
@ -439,6 +438,7 @@ WIRESHARK_QT_SRC = \
preferences_dialog.cpp \ preferences_dialog.cpp \
print_dialog.cpp \ print_dialog.cpp \
profile_dialog.cpp \ profile_dialog.cpp \
progress_frame.cpp \
proto_tree.cpp \ proto_tree.cpp \
protocol_hierarchy_dialog.cpp \ protocol_hierarchy_dialog.cpp \
protocol_preferences_menu.cpp \ protocol_preferences_menu.cpp \

View File

@ -209,7 +209,6 @@ FORMS += \
bluetooth_att_server_attributes_dialog.ui \ bluetooth_att_server_attributes_dialog.ui \
bluetooth_devices_dialog.ui \ bluetooth_devices_dialog.ui \
bluetooth_hci_summary_dialog.ui \ bluetooth_hci_summary_dialog.ui \
capture_file_progress_frame.ui \
capture_file_properties_dialog.ui \ capture_file_properties_dialog.ui \
capture_interfaces_dialog.ui \ capture_interfaces_dialog.ui \
capture_preferences_frame.ui \ capture_preferences_frame.ui \
@ -250,6 +249,7 @@ FORMS += \
preferences_dialog.ui \ preferences_dialog.ui \
print_dialog.ui \ print_dialog.ui \
profile_dialog.ui \ profile_dialog.ui \
progress_frame.ui \
protocol_hierarchy_dialog.ui \ protocol_hierarchy_dialog.ui \
remote_capture_dialog.ui \ remote_capture_dialog.ui \
remote_settings_dialog.ui \ remote_settings_dialog.ui \
@ -280,7 +280,6 @@ HEADERS += $$HEADERS_WS_C \
bluetooth_att_server_attributes_dialog.h \ bluetooth_att_server_attributes_dialog.h \
bluetooth_devices_dialog.h \ bluetooth_devices_dialog.h \
bluetooth_hci_summary_dialog.h \ bluetooth_hci_summary_dialog.h \
capture_file_progress_frame.h \
capture_file_properties_dialog.h \ capture_file_properties_dialog.h \
capture_interfaces_dialog.h \ capture_interfaces_dialog.h \
capture_preferences_frame.h \ capture_preferences_frame.h \
@ -324,6 +323,7 @@ HEADERS += $$HEADERS_WS_C \
preferences_dialog.h \ preferences_dialog.h \
print_dialog.h \ print_dialog.h \
profile_dialog.h \ profile_dialog.h \
progress_frame.h \
protocol_hierarchy_dialog.h \ protocol_hierarchy_dialog.h \
protocol_preferences_menu.h \ protocol_preferences_menu.h \
remote_capture_dialog.h \ remote_capture_dialog.h \
@ -643,7 +643,6 @@ SOURCES += \
byte_view_text.cpp \ byte_view_text.cpp \
capture_file.cpp \ capture_file.cpp \
capture_file_dialog.cpp \ capture_file_dialog.cpp \
capture_file_progress_frame.cpp \
capture_file_properties_dialog.cpp \ capture_file_properties_dialog.cpp \
capture_filter_combo.cpp \ capture_filter_combo.cpp \
capture_filter_edit.cpp \ capture_filter_edit.cpp \
@ -708,6 +707,7 @@ SOURCES += \
preferences_dialog.cpp \ preferences_dialog.cpp \
print_dialog.cpp \ print_dialog.cpp \
profile_dialog.cpp \ profile_dialog.cpp \
progress_frame.cpp \
proto_tree.cpp \ proto_tree.cpp \
protocol_hierarchy_dialog.cpp \ protocol_hierarchy_dialog.cpp \
protocol_preferences_menu.cpp \ protocol_preferences_menu.cpp \

View File

@ -52,6 +52,7 @@ enum StatusContext {
STATUS_CTX_FIELD, STATUS_CTX_FIELD,
STATUS_CTX_BYTE, STATUS_CTX_BYTE,
STATUS_CTX_FILTER, STATUS_CTX_FILTER,
STATUS_CTX_BUSY,
STATUS_CTX_TEMPORARY STATUS_CTX_TEMPORARY
}; };
@ -265,7 +266,7 @@ void MainStatusBar::pushFileStatus(const QString &message, const QString &messag
void MainStatusBar::popFileStatus() { void MainStatusBar::popFileStatus() {
info_status_.popText(STATUS_CTX_FILE); info_status_.popText(STATUS_CTX_FILE);
info_status_.setToolTip(""); info_status_.setToolTip(QString());
} }
void MainStatusBar::pushFieldStatus(const QString &message) { void MainStatusBar::pushFieldStatus(const QString &message) {
@ -332,6 +333,20 @@ void MainStatusBar::pushProfileName()
} }
} }
void MainStatusBar::pushBusyStatus(const QString &message, const QString &messagetip)
{
info_status_.pushText(message, STATUS_CTX_BUSY);
info_status_.setToolTip(messagetip);
progress_frame_.showBusy(true, false, NULL);
}
void MainStatusBar::popBusyStatus()
{
info_status_.popText(STATUS_CTX_BUSY);
info_status_.setToolTip(QString());
progress_frame_.hide();
}
void MainStatusBar::popProfileStatus() { void MainStatusBar::popProfileStatus() {
profile_status_.popText(STATUS_CTX_MAIN); profile_status_.popText(STATUS_CTX_MAIN);
} }
@ -434,7 +449,7 @@ void MainStatusBar::toggleBackground(bool enabled)
.arg(ws_css_warn_text, 6, 16, QChar('0')) .arg(ws_css_warn_text, 6, 16, QChar('0'))
.arg(ws_css_warn_background, 6, 16, QChar('0'))); .arg(ws_css_warn_background, 6, 16, QChar('0')));
} else { } else {
setStyleSheet(""); setStyleSheet(QString());
} }
} }

View File

@ -28,8 +28,8 @@
#include "capchild/capture_session.h" #include "capchild/capture_session.h"
#include "capture_file_progress_frame.h"
#include "label_stack.h" #include "label_stack.h"
#include "progress_frame.h"
#include "wireshark_application.h" #include "wireshark_application.h"
#include <QLabel> #include <QLabel>
@ -52,7 +52,7 @@ private:
QLabel expert_status_; QLabel expert_status_;
QLabel comment_label_; QLabel comment_label_;
LabelStack info_status_; LabelStack info_status_;
CaptureFileProgressFrame progress_frame_; ProgressFrame progress_frame_;
LabelStack packet_status_; LabelStack packet_status_;
LabelStack profile_status_; LabelStack profile_status_;
capture_file *cap_file_; capture_file *cap_file_;
@ -79,6 +79,8 @@ public slots:
void pushFilterStatus(const QString &message); void pushFilterStatus(const QString &message);
void popFilterStatus(); void popFilterStatus();
void pushProfileName(); void pushProfileName();
void pushBusyStatus(const QString &message, const QString &messagetip = QString());
void popBusyStatus();
void updateCaptureStatistics(capture_session * cap_session); void updateCaptureStatistics(capture_session * cap_session);
void updateCaptureFixedStatistics(capture_session * cap_session); void updateCaptureFixedStatistics(capture_session * cap_session);

View File

@ -483,6 +483,10 @@ MainWindow::MainWindow(QWidget *parent) :
this, SLOT(openPacketDialog())); this, SLOT(openPacketDialog()));
connect(packet_list_, SIGNAL(packetListScrolled(bool)), connect(packet_list_, SIGNAL(packetListScrolled(bool)),
main_ui_->actionGoAutoScroll, SLOT(setChecked(bool))); main_ui_->actionGoAutoScroll, SLOT(setChecked(bool)));
connect(packet_list_->packetListModel(), SIGNAL(pushBusyStatus(QString)),
main_ui_->statusBar, SLOT(pushBusyStatus(QString)));
connect(packet_list_->packetListModel(), SIGNAL(popBusyStatus()),
main_ui_->statusBar, SLOT(popBusyStatus()));
connect(proto_tree_, SIGNAL(protoItemSelected(const QString&)), connect(proto_tree_, SIGNAL(protoItemSelected(const QString&)),
main_ui_->statusBar, SLOT(pushFieldStatus(const QString&))); main_ui_->statusBar, SLOT(pushFieldStatus(const QString&)));

View File

@ -40,6 +40,7 @@
#include <QColor> #include <QColor>
#include <QFontMetrics> #include <QFontMetrics>
#include <QModelIndex> #include <QModelIndex>
#include <QElapsedTimer>
PacketListModel::PacketListModel(QObject *parent, capture_file *cf) : PacketListModel::PacketListModel(QObject *parent, capture_file *cf) :
QAbstractItemModel(parent), QAbstractItemModel(parent),
@ -247,11 +248,12 @@ int PacketListModel::text_sort_column_;
Qt::SortOrder PacketListModel::sort_order_; Qt::SortOrder PacketListModel::sort_order_;
capture_file *PacketListModel::sort_cap_file_; capture_file *PacketListModel::sort_cap_file_;
QElapsedTimer busy_timer_;
const int busy_timeout_ = 65; // ms, approximately 15 fps
void PacketListModel::sort(int column, Qt::SortOrder order) void PacketListModel::sort(int column, Qt::SortOrder order)
{ {
if (!cap_file_ || visible_rows_.count() < 1) { if (!cap_file_ || visible_rows_.count() < 1) return;
return; if (column < 0) return;
}
sort_column_ = column; sort_column_ = column;
text_sort_column_ = PacketListRecord::textColumn(column); text_sort_column_ = PacketListRecord::textColumn(column);
@ -259,10 +261,19 @@ void PacketListModel::sort(int column, Qt::SortOrder order)
sort_cap_file_ = cap_file_; sort_cap_file_ = cap_file_;
beginResetModel(); beginResetModel();
qSort(visible_rows_.begin(), visible_rows_.end(), recordLessThan); QString col_title = get_column_title(column);
if (!col_title.isEmpty()) {
QString busy_msg = tr("Sorting \"%1\"").arg(col_title);
emit pushBusyStatus(busy_msg);
busy_timer_.start();
}
std::sort(visible_rows_.begin(), visible_rows_.end(), recordLessThan);
for (int i = 0; i < visible_rows_.count(); i++) { for (int i = 0; i < visible_rows_.count(); i++) {
number_to_row_[visible_rows_[i]->frameData()->num] = i; number_to_row_[visible_rows_[i]->frameData()->num] = i;
} }
if (!col_title.isEmpty()) {
emit popBusyStatus();
}
endResetModel(); endResetModel();
if (cap_file_->current_frame) { if (cap_file_->current_frame) {
@ -278,6 +289,10 @@ bool PacketListModel::recordLessThan(PacketListRecord *r1, PacketListRecord *r2)
// _packet_list_compare_records, and packet_list_compare_custom from // _packet_list_compare_records, and packet_list_compare_custom from
// gtk/packet_list_store.c into one function // gtk/packet_list_store.c into one function
if (busy_timer_.elapsed() > busy_timeout_) {
busy_timer_.restart();
wsApp->processEvents();
}
if (sort_column_ < 0) { if (sort_column_ < 0) {
// No column. // No column.
cmp_val = frame_data_compare(sort_cap_file_->epan, r1->frameData(), r2->frameData(), COL_NUMBER); cmp_val = frame_data_compare(sort_cap_file_->epan, r1->frameData(), r2->frameData(), COL_NUMBER);
@ -285,7 +300,7 @@ bool PacketListModel::recordLessThan(PacketListRecord *r1, PacketListRecord *r2)
// Column comes directly from frame data // Column comes directly from frame data
cmp_val = frame_data_compare(sort_cap_file_->epan, r1->frameData(), r2->frameData(), sort_cap_file_->cinfo.columns[sort_column_].col_fmt); cmp_val = frame_data_compare(sort_cap_file_->epan, r1->frameData(), r2->frameData(), sort_cap_file_->cinfo.columns[sort_column_].col_fmt);
} else { } else {
if (r1->columnString(sort_cap_file_, sort_column_).toByteArray().data() == r2->columnString(sort_cap_file_, sort_column_).toByteArray().data()) { if (r1->columnString(sort_cap_file_, sort_column_).toByteArray().constData() == r2->columnString(sort_cap_file_, sort_column_).toByteArray().constData()) {
cmp_val = 0; cmp_val = 0;
} else if (sort_cap_file_->cinfo.columns[sort_column_].col_fmt == COL_CUSTOM) { } else if (sort_cap_file_->cinfo.columns[sort_column_].col_fmt == COL_CUSTOM) {
header_field_info *hfi; header_field_info *hfi;
@ -316,10 +331,10 @@ bool PacketListModel::recordLessThan(PacketListRecord *r1, PacketListRecord *r2)
cmp_val = 1; cmp_val = 1;
} }
} else { } else {
cmp_val = strcmp(r1->columnString(sort_cap_file_, sort_column_).toByteArray().data(), r2->columnString(sort_cap_file_, sort_column_).toByteArray().data()); cmp_val = strcmp(r1->columnString(sort_cap_file_, sort_column_).toByteArray().constData(), r2->columnString(sort_cap_file_, sort_column_).toByteArray().constData());
} }
} else { } else {
cmp_val = strcmp(r1->columnString(sort_cap_file_, sort_column_).toByteArray().data(), r2->columnString(sort_cap_file_, sort_column_).toByteArray().data()); cmp_val = strcmp(r1->columnString(sort_cap_file_, sort_column_).toByteArray().constData(), r2->columnString(sort_cap_file_, sort_column_).toByteArray().constData());
} }
if (cmp_val == 0) { if (cmp_val == 0) {

View File

@ -74,6 +74,8 @@ public:
signals: signals:
void goToPacket(int); void goToPacket(int);
void itemHeightChanged(const QModelIndex &ih_index) const; void itemHeightChanged(const QModelIndex &ih_index) const;
void pushBusyStatus(const QString &status);
void popBusyStatus();
public slots: public slots:
void setMonospaceFont(const QFont &mono_font, int row_height); void setMonospaceFont(const QFont &mono_font, int row_height);

View File

@ -171,7 +171,6 @@ void PacketListRecord::dissect(capture_file *cap_file, bool dissect_color)
ws_buffer_free(&buf); ws_buffer_free(&buf);
} }
#include <QDebug>
//#define MINIMIZE_STRING_COPYING 1 //#define MINIMIZE_STRING_COPYING 1
void PacketListRecord::cacheColumnStrings(column_info *cinfo) void PacketListRecord::cacheColumnStrings(column_info *cinfo)
{ {

View File

@ -1,4 +1,4 @@
/* capture_file_progress_frame.cpp /* progress_frame.cpp
* *
* Wireshark - Network traffic analyzer * Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org> * By Gerald Combs <gerald@wireshark.org>
@ -21,8 +21,8 @@
#include "config.h" #include "config.h"
#include "capture_file_progress_frame.h" #include "progress_frame.h"
#include <ui_capture_file_progress_frame.h> #include <ui_progress_frame.h>
#include "ui/progress_dlg.h" #include "ui/progress_dlg.h"
@ -40,7 +40,7 @@
progdlg_t *create_progress_dlg(const gpointer top_level_window, const gchar *, const gchar *, progdlg_t *create_progress_dlg(const gpointer top_level_window, const gchar *, const gchar *,
gboolean terminate_is_stop, gboolean *stop_flag) { gboolean terminate_is_stop, gboolean *stop_flag) {
CaptureFileProgressFrame *cfpf; ProgressFrame *pf;
QWidget *main_window; QWidget *main_window;
if (!top_level_window) { if (!top_level_window) {
@ -53,12 +53,12 @@ progdlg_t *create_progress_dlg(const gpointer top_level_window, const gchar *, c
return NULL; return NULL;
} }
cfpf = main_window->findChild<CaptureFileProgressFrame *>(); pf = main_window->findChild<ProgressFrame *>();
if (!cfpf) { if (!pf) {
return NULL; return NULL;
} }
return cfpf->show(true, terminate_is_stop, stop_flag, 0); return pf->showProgress(true, terminate_is_stop, stop_flag, 0);
} }
progdlg_t * progdlg_t *
@ -96,11 +96,14 @@ destroy_progress_dlg(progdlg_t *dlg)
dlg->progress_frame->hide(); dlg->progress_frame->hide();
} }
CaptureFileProgressFrame::CaptureFileProgressFrame(QWidget *parent) : ProgressFrame::ProgressFrame(QWidget *parent) :
QFrame(parent), QFrame(parent),
ui(new Ui::CaptureFileProgressFrame) ui(new Ui::ProgressFrame)
, terminate_is_stop_(false) , terminate_is_stop_(false)
, stop_flag_(NULL) , stop_flag_(NULL)
#if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
, show_timer_(-1)
#endif
#ifdef QWINTASKBARPROGRESS_H #ifdef QWINTASKBARPROGRESS_H
, taskbar_progress_(NULL) , taskbar_progress_(NULL)
#endif #endif
@ -143,20 +146,36 @@ CaptureFileProgressFrame::CaptureFileProgressFrame(QWidget *parent) :
hide(); hide();
} }
CaptureFileProgressFrame::~CaptureFileProgressFrame() ProgressFrame::~ProgressFrame()
{ {
delete ui; delete ui;
} }
struct progdlg *CaptureFileProgressFrame::show(bool animate, bool terminate_is_stop, gboolean *stop_flag, int value) struct progdlg *ProgressFrame::showProgress(bool animate, bool terminate_is_stop, gboolean *stop_flag, int value)
{ {
terminate_is_stop_ = terminate_is_stop; ui->progressBar->setMaximum(100);
stop_flag_ = stop_flag;
ui->progressBar->setValue(value); ui->progressBar->setValue(value);
return show(animate, terminate_is_stop, stop_flag);
}
progdlg *ProgressFrame::showBusy(bool animate, bool terminate_is_stop, gboolean *stop_flag)
{
ui->progressBar->setMaximum(0);
return show(animate, terminate_is_stop, stop_flag);
}
void ProgressFrame::setValue(int value)
{
ui->progressBar->setValue(value);
}
#if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0) #if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
if (animate) { void ProgressFrame::timerEvent(QTimerEvent *event)
{
if (event->timerId() == show_timer_) {
killTimer(show_timer_);
show_timer_ = -1;
QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this); QGraphicsOpacityEffect *effect = new QGraphicsOpacityEffect(this);
this->setGraphicsEffect(effect); this->setGraphicsEffect(effect);
@ -167,9 +186,50 @@ struct progdlg *CaptureFileProgressFrame::show(bool animate, bool terminate_is_s
animation->setEndValue(1.0); animation->setEndValue(1.0);
animation->setEasingCurve(QEasingCurve::InOutQuad); animation->setEasingCurve(QEasingCurve::InOutQuad);
animation->start(); animation->start();
QFrame::show();
}
}
#endif
void ProgressFrame::hide()
{
show_timer_ = -1;
QFrame::hide();
#ifdef QWINTASKBARPROGRESS_H
if (taskbar_progress_) {
taskbar_progress_->reset();
taskbar_progress_->hide();
}
#endif
}
void ProgressFrame::on_pushButton_clicked()
{
emit stopLoading();
}
const int show_delay_ = 500; // ms
progdlg *ProgressFrame::show(bool animate, bool terminate_is_stop, gboolean *stop_flag)
{
terminate_is_stop_ = terminate_is_stop;
stop_flag_ = stop_flag;
if (stop_flag) {
ui->pushButton->show();
} else {
ui->pushButton->hide();
}
#if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
if (animate) {
show_timer_ = startTimer(show_delay_);
} else {
QFrame::show();
} }
#else #else
Q_UNUSED(animate); Q_UNUSED(animate);
QFrame::show();
#endif #endif
#ifdef QWINTASKBARPROGRESS_H #ifdef QWINTASKBARPROGRESS_H
@ -189,31 +249,9 @@ struct progdlg *CaptureFileProgressFrame::show(bool animate, bool terminate_is_s
taskbar_progress_->resume(); taskbar_progress_->resume();
#endif #endif
QFrame::show();
return &progress_dialog_; return &progress_dialog_;
} }
void CaptureFileProgressFrame::setValue(int value)
{
ui->progressBar->setValue(value);
}
#ifdef QWINTASKBARPROGRESS_H
void CaptureFileProgressFrame::hide()
{
if (taskbar_progress_) {
taskbar_progress_->reset();
taskbar_progress_->hide();
}
QFrame::hide();
}
#endif
void CaptureFileProgressFrame::on_pushButton_clicked()
{
emit stopLoading();
}
/* /*
* Editor modelines * Editor modelines
* *

View File

@ -1,4 +1,4 @@
/* capture_file_progress_frame.h /* progress_frame.h
* *
* Wireshark - Network traffic analyzer * Wireshark - Network traffic analyzer
* By Gerald Combs <gerald@wireshark.org> * By Gerald Combs <gerald@wireshark.org>
@ -19,15 +19,15 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/ */
#ifndef CAPTURE_FILE_PROGRESS_FRAME_H #ifndef PROGRESS_FRAME_H
#define CAPTURE_FILE_PROGRESS_FRAME_H #define PROGRESS_FRAME_H
#include <glib.h> #include <glib.h>
#include <QFrame> #include <QFrame>
namespace Ui { namespace Ui {
class CaptureFileProgressFrame; class ProgressFrame;
} }
#if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(5, 2, 0) #if defined(Q_OS_WIN) && QT_VERSION >= QT_VERSION_CHECK(5, 2, 0)
@ -35,26 +35,25 @@ class CaptureFileProgressFrame;
#include <QWinTaskbarProgress> #include <QWinTaskbarProgress>
#endif #endif
class CaptureFileProgressFrame; class ProgressFrame;
// Define the structure describing a progress dialog. // Define the structure describing a progress dialog.
struct progdlg { struct progdlg {
CaptureFileProgressFrame *progress_frame; // This progress frame ProgressFrame *progress_frame; // This progress frame
QWidget *top_level_window; // Progress frame's main window QWidget *top_level_window; // Progress frame's main window
}; };
class CaptureFileProgressFrame : public QFrame class ProgressFrame : public QFrame
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit CaptureFileProgressFrame(QWidget *parent = 0); explicit ProgressFrame(QWidget *parent = 0);
~CaptureFileProgressFrame(); ~ProgressFrame();
struct progdlg *show(bool animate, bool terminate_is_stop, gboolean *stop_flag, int value); struct progdlg *showProgress(bool animate, bool terminate_is_stop, gboolean *stop_flag, int value);
#ifdef QWINTASKBARPROGRESS_H struct progdlg *showBusy(bool animate, bool terminate_is_stop, gboolean *stop_flag);
void hide(); void hide();
#endif
public slots: public slots:
void setValue(int value); void setValue(int value);
@ -62,23 +61,32 @@ public slots:
signals: signals:
void stopLoading(); void stopLoading();
#if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
protected:
void timerEvent(QTimerEvent *event);
#endif
private slots: private slots:
void on_pushButton_clicked(); void on_pushButton_clicked();
private: private:
Ui::CaptureFileProgressFrame *ui; Ui::ProgressFrame *ui;
struct progdlg progress_dialog_; struct progdlg progress_dialog_;
QString message_; QString message_;
QString status_; QString status_;
bool terminate_is_stop_; bool terminate_is_stop_;
gboolean *stop_flag_; gboolean *stop_flag_;
#if !defined(Q_OS_MAC) || QT_VERSION > QT_VERSION_CHECK(5, 0, 0)
int show_timer_;
#endif
#ifdef QWINTASKBARPROGRESS_H #ifdef QWINTASKBARPROGRESS_H
QWinTaskbarProgress *taskbar_progress_; QWinTaskbarProgress *taskbar_progress_;
#endif #endif
struct progdlg *show(bool animate, bool terminate_is_stop, gboolean *stop_flag);
}; };
#endif // CAPTURE_FILE_PROGRESS_FRAME_H #endif // PROGRESS_FRAME_H
/* /*
* Editor modelines * Editor modelines

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0"> <ui version="4.0">
<class>CaptureFileProgressFrame</class> <class>ProgressFrame</class>
<widget class="QFrame" name="CaptureFileProgressFrame"> <widget class="QFrame" name="ProgressFrame">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation type="unfinished">Frame</translation> <translation type="unfinished">Frame</translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation type="unfinished">Trame</translation> <translation type="unfinished">Trame</translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation>Frame</translation> <translation>Frame</translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation>Ramka</translation> <translation>Ramka</translation>
</message> </message>

View File

@ -711,7 +711,7 @@
<context> <context>
<name>CaptureFileProgressFrame</name> <name>CaptureFileProgressFrame</name>
<message> <message>
<location filename="capture_file_progress_frame.ui" line="14"/> <location filename="progress_frame.ui" line="14"/>
<source>Frame</source> <source>Frame</source>
<translation></translation> <translation></translation>
</message> </message>