fix button popup (#2603)

This commit is contained in:
Le Tan 2025-04-16 22:29:56 +08:00 committed by GitHub
parent 3ec78f4c36
commit 8494a714cd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 21 additions and 69 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
*.pro.user.*
.ccls
compile_commands.json
compile_commands.json.*
compile_flags.txt
.cache
.tasks

View File

@ -29,8 +29,7 @@
using namespace vnotex;
AttachmentPopup::AttachmentPopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent),
m_button(p_btn)
: ButtonPopup(p_btn, p_parent)
{
setupUI();
@ -68,7 +67,7 @@ void AttachmentPopup::setupUI()
const auto destFolderPath = getDestFolderPath();
auto &sessionConfig = ConfigMgr::getInst().getSessionConfig();
auto files = QFileDialog::getOpenFileNames(this,
auto files = QFileDialog::getOpenFileNames(nullptr,
tr("Select Files As Attachments"),
sessionConfig.getExternalMediaDefaultPath());
if (files.isEmpty()) {
@ -206,12 +205,7 @@ void AttachmentPopup::setupUI()
widget->setMinimumSize(320, 384);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(widget);
addAction(act);
addWidget(widget);
}
QToolButton *AttachmentPopup::createButton()

View File

@ -1,16 +1,14 @@
#ifndef ATTACHMENTPOPUP_H
#define ATTACHMENTPOPUP_H
#include <QMenu>
class QToolButton;
#include "buttonpopup.h"
namespace vnotex
{
class FileSystemViewer;
class Buffer;
class AttachmentPopup : public QMenu
class AttachmentPopup : public ButtonPopup
{
Q_OBJECT
public:
@ -43,9 +41,6 @@ namespace vnotex
FileSystemViewer *m_viewer = nullptr;
bool m_needUpdateAttachmentFolder = true;
// Button for this menu.
QToolButton *m_button = nullptr;
};
}

View File

@ -1,6 +1,6 @@
#include "buttonpopup.h"
#include <QVBoxLayout>
#include <QWidgetAction>
#include <utils/widgetutils.h>
@ -10,8 +10,6 @@ ButtonPopup::ButtonPopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent),
m_button(p_btn)
{
setupUI();
#if defined(Q_OS_MACOS) || defined(Q_OS_MAC)
// Qt::Popup on macOS does not work well with input method.
setWindowFlags(Qt::Tool | Qt::NoDropShadowWindowHint);
@ -19,16 +17,10 @@ ButtonPopup::ButtonPopup(QToolButton *p_btn, QWidget *p_parent)
#endif
}
void ButtonPopup::setupUI()
void ButtonPopup::addWidget(QWidget *p_widget)
{
auto mainLayout = new QVBoxLayout(this);
WidgetUtils::setContentsMargins(mainLayout);
}
void ButtonPopup::setCentralWidget(QWidget *p_widget)
{
Q_ASSERT(p_widget);
auto mainLayout = layout();
Q_ASSERT(mainLayout->count() == 0);
mainLayout->addWidget(p_widget);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(p_widget);
addAction(act);
}

View File

@ -15,10 +15,7 @@ namespace vnotex
ButtonPopup(QToolButton *p_btn, QWidget *p_parent = nullptr);
protected:
void setCentralWidget(QWidget *p_widget);
private:
void setupUI();
void addWidget(QWidget *p_widget);
// Button for this menu.
QToolButton *m_button = nullptr;

View File

@ -1,8 +1,6 @@
#include "outlinepopup.h"
#include <QVBoxLayout>
#include <QToolButton>
#include <QWidgetAction>
#include <core/global.h>
#include <utils/widgetutils.h>
@ -11,8 +9,7 @@
using namespace vnotex;
OutlinePopup::OutlinePopup(QToolButton *p_btn, QWidget *p_parent)
: QMenu(p_parent),
m_button(p_btn)
: ButtonPopup(p_btn, p_parent)
{
setupUI();
@ -26,13 +23,7 @@ void OutlinePopup::setupUI()
{
m_viewer = new OutlineViewer(tr("Outline"), this);
m_viewer->setMinimumSize(320, 384);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_viewer);
addAction(act);
addWidget(m_viewer);
}
void OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_provider)
@ -42,7 +33,7 @@ void OutlinePopup::setOutlineProvider(const QSharedPointer<OutlineProvider> &p_p
void OutlinePopup::showEvent(QShowEvent* p_event)
{
QMenu::showEvent(p_event);
ButtonPopup::showEvent(p_event);
// Move it to be right-aligned.
if (m_button->isVisible()) {

View File

@ -1,7 +1,8 @@
#ifndef OUTLINEPOPUP_H
#define OUTLINEPOPUP_H
#include <QMenu>
#include "buttonpopup.h"
#include <QSharedPointer>
class QToolButton;
@ -11,7 +12,7 @@ namespace vnotex
class OutlineProvider;
class OutlineViewer;
class OutlinePopup : public QMenu
class OutlinePopup : public ButtonPopup
{
Q_OBJECT
public:
@ -27,9 +28,6 @@ namespace vnotex
// Managed by QObject.
OutlineViewer *m_viewer = nullptr;
// Button with this menu.
QToolButton *m_button = nullptr;
};
}

View File

@ -1,9 +1,5 @@
#include "tagpopup.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QWidgetAction>
#include <utils/widgetutils.h>
#include <buffer/buffer.h>
@ -31,14 +27,8 @@ TagPopup::TagPopup(QToolButton *p_btn, QWidget *p_parent)
void TagPopup::setupUI()
{
m_tagViewer = new TagViewer(true, this);
//setCentralWidget(m_tagViewer);
m_tagViewer->setMinimumSize(256, 320);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_tagViewer);
addAction(act);
addWidget(m_tagViewer);
}
void TagPopup::setBuffer(Buffer *p_buffer)

View File

@ -4,7 +4,6 @@
#include <QLabel>
#include <QGroupBox>
#include <QPointer>
#include <QWidgetAction>
#include <utils/widgetutils.h>
@ -72,10 +71,5 @@ void WordCountPopup::updateCount(const ViewWindow::WordCountInfo &p_info)
void WordCountPopup::setupUI()
{
m_panel = new WordCountPanel(this);
auto act = new QWidgetAction(this);
// @act will own @p_widget.
act->setDefaultWidget(m_panel);
addAction(act);
addWidget(m_panel);
}