From e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 10 Apr 2024 22:34:10 +0200 Subject: Adding upstream version 4.2.2. Signed-off-by: Daniel Baumann --- ui/qt/accordion_frame.cpp | 107 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 ui/qt/accordion_frame.cpp (limited to 'ui/qt/accordion_frame.cpp') diff --git a/ui/qt/accordion_frame.cpp b/ui/qt/accordion_frame.cpp new file mode 100644 index 00000000..8f8cc430 --- /dev/null +++ b/ui/qt/accordion_frame.cpp @@ -0,0 +1,107 @@ +/* accordion_frame.cpp + * + * Wireshark - Network traffic analyzer + * By Gerald Combs + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "config.h" +#include + +#include "accordion_frame.h" + +#include "ui/util.h" +#include + +#include +#include + +const int duration_ = 150; + +AccordionFrame::AccordionFrame(QWidget *parent) : + QFrame(parent), + frame_height_(0) +{ + updateStyleSheet(); + + animation_ = new QPropertyAnimation(this, "maximumHeight", this); + animation_->setDuration(duration_); + animation_->setEasingCurve(QEasingCurve::InOutQuad); + connect(animation_, &QPropertyAnimation::finished, this, &AccordionFrame::animationFinished); +} + +void AccordionFrame::animatedShow() +{ + if (isVisible()) { + show(); + return; + } + + if (!display_is_remote()) { + QWidget *parent = parentWidget(); + + if (parent && parent->layout()) { + // Force our parent layout to update its geometry. There are a number + // of ways of doing this. Calling invalidate + activate seems to + // be the best. + show(); + parent->layout()->invalidate(); // Calls parent->layout()->update() + parent->layout()->activate(); // Calculates sizes then calls parent->updateGeometry() + frame_height_ = height(); + hide(); + } + if (frame_height_ > 0) { + animation_->setStartValue(0); + animation_->setEndValue(frame_height_); + animation_->start(); + } + } + show(); +} + +void AccordionFrame::animatedHide() +{ + if (!isVisible()) { + hide(); + return; + } + + if (!display_is_remote()) { + animation_->setStartValue(frame_height_); + animation_->setEndValue(0); + animation_->start(); + } else { + hide(); + } +} + +void AccordionFrame::animationFinished() +{ + if (animation_->currentValue().toInt() < 1) { + hide(); + setMaximumHeight(frame_height_); + } +} + +void AccordionFrame::updateStyleSheet() +{ + QString style_sheet( + "QLineEdit#goToLineEdit {" + " max-width: 5em;" + "}" + ); + +#ifdef Q_OS_MAC + style_sheet += QString( + "QLineEdit {" + " border: 1px solid palette(%1);" + " border-radius: 3px;" + " padding: 1px;" + "}" + ).arg(ColorUtils::themeIsDark() ? QString("light") : QString("dark")); +#endif + + setStyleSheet(style_sheet); +} \ No newline at end of file -- cgit v1.2.3