Correctly update the pane layout whenever the preferences are changed, you no

longer need to restart for that to take effect. Hopefully I got all the slot
ordering right.

svn path=/trunk/; revision=51720
This commit is contained in:
Evan Huus 2013-09-03 13:29:09 +00:00
parent 78529b2038
commit a795048300
4 changed files with 87 additions and 79 deletions

View File

@ -917,7 +917,6 @@ int main(int argc, char *argv[])
#endif /* HAVE_LIBPCAP */
// w->setEnabled(true);
main_w->layoutPanes();
wsApp->allSystemsGo();
g_log(LOG_DOMAIN_MAIN, G_LOG_LEVEL_INFO, "Wireshark is up and ready to go");

View File

@ -105,6 +105,8 @@ MainWindow::MainWindow(QWidget *parent) :
setFeaturesEnabled(false);
connect(wsApp, SIGNAL(appInitialized()), this, SLOT(setFeaturesEnabled()));
connect(wsApp, SIGNAL(preferencesChanged()), this, SLOT(layoutPanes()));
connect(wsApp, SIGNAL(updateRecentItemStatus(const QString &, qint64, bool)), this, SLOT(updateRecentFiles()));
updateRecentFiles();
@ -286,83 +288,6 @@ MainWindow::~MainWindow()
delete main_ui_;
}
void MainWindow::layoutPanes()
{
QSplitter *parents[3];
if (master_split_ != NULL) {
main_ui_->mainStack->removeWidget(master_split_);
}
delete master_split_;
delete extra_split_;
master_split_ = new QSplitter(main_ui_->mainStack);
master_split_->setObjectName(QString::fromUtf8("splitterMaster"));
extra_split_ = new QSplitter(main_ui_->mainStack);
extra_split_->setObjectName(QString::fromUtf8("splitterExtra"));
switch(prefs.gui_layout_type) {
case(layout_type_5):
master_split_->setOrientation(Qt::Vertical);
parents[0] = master_split_;
parents[1] = master_split_;
parents[2] = master_split_;
break;
case(layout_type_2):
master_split_->setOrientation(Qt::Vertical);
extra_split_->setOrientation(Qt::Horizontal);
parents[0] = master_split_;
parents[1] = extra_split_;
parents[2] = extra_split_;
break;
case(layout_type_1):
master_split_->setOrientation(Qt::Vertical);
extra_split_->setOrientation(Qt::Horizontal);
parents[0] = extra_split_;
parents[1] = extra_split_;
parents[2] = master_split_;
break;
case(layout_type_4):
master_split_->setOrientation(Qt::Horizontal);
extra_split_->setOrientation(Qt::Vertical);
parents[0] = master_split_;
parents[1] = extra_split_;
parents[2] = extra_split_;
break;
case(layout_type_3):
master_split_->setOrientation(Qt::Horizontal);
extra_split_->setOrientation(Qt::Vertical);
parents[0] = extra_split_;
parents[1] = extra_split_;
parents[2] = master_split_;
break;
case(layout_type_6):
master_split_->setOrientation(Qt::Horizontal);
parents[0] = master_split_;
parents[1] = master_split_;
parents[2] = master_split_;
break;
default:
g_assert_not_reached();
}
if (parents[0] == extra_split_) {
master_split_->addWidget(extra_split_);
}
parents[0]->addWidget(packet_list_);
if (parents[2] == extra_split_) {
master_split_->addWidget(extra_split_);
}
parents[1]->addWidget(proto_tree_);
parents[2]->addWidget(byte_view_tab_);
main_ui_->mainStack->addWidget(master_split_);
}
void MainWindow::setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb)
{
pipe_source_ = source;

View File

@ -70,7 +70,6 @@ public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void setPipeInputHandler(gint source, gpointer user_data, int *child_process, pipe_input_cb_t input_cb);
void layoutPanes();
protected:
bool eventFilter(QObject *obj, QEvent *event);
@ -153,6 +152,7 @@ public slots:
void openCaptureFile(QString& cf_path = *new QString(), QString &display_filter = *new QString());
void filterPackets(QString& new_filter = *new QString(), bool force = false);
void updateForUnsavedChanges();
void layoutPanes();
#ifdef HAVE_LIBPCAP
void captureCapturePrepared(capture_session *cap_session);

View File

@ -205,6 +205,90 @@ void MainWindow::filterPackets(QString& new_filter, bool force)
}
}
void MainWindow::layoutPanes()
{
QSplitter *parents[3];
QWidget *oldMaster = master_split_;
QWidget *current = main_ui_->mainStack->currentWidget();
master_split_ = new QSplitter(main_ui_->mainStack);
master_split_->setObjectName(QString::fromUtf8("splitterMaster"));
extra_split_ = new QSplitter(master_split_);
extra_split_->setObjectName(QString::fromUtf8("splitterExtra"));
switch(prefs.gui_layout_type) {
case(layout_type_5):
master_split_->setOrientation(Qt::Vertical);
parents[0] = master_split_;
parents[1] = master_split_;
parents[2] = master_split_;
break;
case(layout_type_2):
master_split_->setOrientation(Qt::Vertical);
extra_split_->setOrientation(Qt::Horizontal);
parents[0] = master_split_;
parents[1] = extra_split_;
parents[2] = extra_split_;
break;
case(layout_type_1):
master_split_->setOrientation(Qt::Vertical);
extra_split_->setOrientation(Qt::Horizontal);
parents[0] = extra_split_;
parents[1] = extra_split_;
parents[2] = master_split_;
break;
case(layout_type_4):
master_split_->setOrientation(Qt::Horizontal);
extra_split_->setOrientation(Qt::Vertical);
parents[0] = master_split_;
parents[1] = extra_split_;
parents[2] = extra_split_;
break;
case(layout_type_3):
master_split_->setOrientation(Qt::Horizontal);
extra_split_->setOrientation(Qt::Vertical);
parents[0] = extra_split_;
parents[1] = extra_split_;
parents[2] = master_split_;
break;
case(layout_type_6):
master_split_->setOrientation(Qt::Horizontal);
parents[0] = master_split_;
parents[1] = master_split_;
parents[2] = master_split_;
break;
default:
g_assert_not_reached();
}
if (parents[0] == extra_split_) {
master_split_->addWidget(extra_split_);
}
parents[0]->addWidget(packet_list_);
if (parents[2] == extra_split_) {
master_split_->addWidget(extra_split_);
}
parents[1]->addWidget(proto_tree_);
parents[2]->addWidget(byte_view_tab_);
// We must do this near the end to avoid reparenting signals going to
// already-deleted widgets.
if (oldMaster != NULL) {
main_ui_->mainStack->removeWidget(oldMaster);
delete oldMaster;
}
main_ui_->mainStack->addWidget(master_split_);
if (current == oldMaster) {
main_ui_->mainStack->setCurrentWidget(master_split_);
}
}
// Capture callbacks
#ifdef HAVE_LIBPCAP