Commit fd15867a authored by Ming Rui Zhang's avatar Ming Rui Zhang

popupdialog: change contactpicker to use generalized pop up dialog

- generalized pop up dialog provide overrided constructor that can
  change spike alignment, and spike color

Change-Id: Ida7cd6571101c5768e18654c8bdc3db617fb42e9
parent bd163b07
......@@ -2,6 +2,7 @@
* Copyright (C) 2015-2019 by Savoir-faire Linux *
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> *
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
......@@ -23,24 +24,19 @@
#include <QMouseEvent>
#include "contactpickeritemdelegate.h"
#include "popupdialog.h"
ContactPicker::ContactPicker(QWidget *parent) :
QDialog(parent),
PopupWidget(parent),
ui(new Ui::ContactPicker),
listModeltype_(SmartListModel::Type::CONFERENCE)
{
ui->setupUi(this);
setWindowFlags(Qt::CustomizeWindowHint);
setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
setAttribute(Qt::WA_NoSystemBackground, true);
setAttribute(Qt::WA_TranslucentBackground, true);
ui->smartList->setItemDelegate(new ContactPickerItemDelegate());
selectableProxyModel_ = new SelectableProxyModel(smartListModel_.get());
ui->smartList->setModel(selectableProxyModel_);
}
ContactPicker::~ContactPicker()
......@@ -92,7 +88,7 @@ ContactPicker::accept()
}
}
QDialog::accept();
widgetContainer_->accept();
}
void
......@@ -104,15 +100,6 @@ ContactPicker::on_ringContactLineEdit_textChanged(const QString &arg1)
selectableProxyModel_->setFilterRegExp(QRegExp(arg1, Qt::CaseInsensitive, QRegExp::FixedString));
}
void
ContactPicker::mousePressEvent(QMouseEvent *event)
{
auto contactPickerWidgetRect = ui->contactPickerWidget->rect();
if (!contactPickerWidgetRect.contains(event->pos())) {
emit willClose(event);
}
}
void
ContactPicker::setTitle(const QString& title)
{
......
......@@ -2,6 +2,7 @@
* Copyright (C) 2015-2019 by Savoir-faire Linux *
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>*
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com> *
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
......@@ -22,6 +23,7 @@
#include "smartlistmodel.h"
#include "utils.h"
#include "lrcinstance.h"
#include "widgethelpers.h"
#include <QDialog>
#include <QSortFilterProxyModel>
......@@ -56,7 +58,7 @@ private:
};
class ContactPicker : public QDialog
class ContactPicker : public PopupWidget
{
Q_OBJECT;
......@@ -67,14 +69,10 @@ public:
void setType(const SmartListModel::Type& type);
void setCurrentCalleeDisplayName(const QString& CalleeDisplayName);
protected:
void mousePressEvent(QMouseEvent *event);
signals:
void contactWillJoinConference(const std::string& contactUri);
void callWillJoinConference(const std::string& callId);
void contactWillDoTransfer(const std::string& contactUri);
void willClose(QMouseEvent *event);
protected slots:
void accept();
......
This diff is collapsed.
......@@ -83,6 +83,7 @@ HEADERS += ./aboutdialog.h \
./collapsiblepasswordwidget.h \
./notifypushbutton.h \
./widgethelpers.h \
./popupdialog.h
SOURCES += ./aboutdialog.cpp \
./banneditemwidget.cpp \
./conversationsfilterwidget.cpp \
......@@ -148,6 +149,7 @@ SOURCES += ./aboutdialog.cpp \
./collapsiblepasswordwidget.cpp \
./notifypushbutton.cpp \
./widgethelpers.cpp \
./popupdialog.cpp
FORMS += ./aboutdialog.ui \
./advancedsipsettingwidget.ui \
./callwidget.ui \
......@@ -174,5 +176,6 @@ FORMS += ./aboutdialog.ui \
./callaudioonlyavataroverlay.ui \
./accountmigration.ui \
./section.ui \
./collapsiblepasswordwidget.ui
./collapsiblepasswordwidget.ui \
./popupdialog.ui
RESOURCES += ressources.qrc
/**************************************************************************
* Copyright (C) 2015-2019 by Savoir-faire Linux *
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#include "popupdialog.h"
#include "ui_popupdialog.h"
#include "utils.h"
#include <QMouseEvent>
PopupDialog::PopupDialog(QWidget *parent,
QColor spikeColor,
SpikeLabelAlignment spikeAlignment) :
QDialog(parent),
ui(new Ui::PopupDialog)
{
ui->setupUi(this);
setWindowFlags(Qt::CustomizeWindowHint);
setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
setAttribute(Qt::WA_NoSystemBackground, true);
setAttribute(Qt::WA_TranslucentBackground, true);
setSpikeLabelAlignment(spikeAlignment);
ui->spikeLabel->setPixmap(Utils::generateTintedPixmap(":/images/spike.png", spikeColor));
}
PopupDialog::~PopupDialog()
{
delete ui;
}
void
PopupDialog::setSpikeLabelAlignment(SpikeLabelAlignment spikeAlignment)
{
switch (spikeAlignment)
{
case PopupDialog::SpikeLabelAlignment::AlignLeft:
ui->spikeLabel->setAlignment(Qt::AlignVCenter | Qt::AlignLeft);
break;
case PopupDialog::SpikeLabelAlignment::AlignHCenter:
ui->spikeLabel->setAlignment(Qt::AlignVCenter | Qt::AlignHCenter);
break;
case PopupDialog::SpikeLabelAlignment::AlignRight:
ui->spikeLabel->setAlignment(Qt::AlignVCenter | Qt::AlignRight);
break;
default:
break;
}
}
void
PopupDialog::insertWidget(QWidget * widget)
{
ui->containerWidget->layout()->addWidget(widget);
}
void
PopupDialog::mousePressEvent(QMouseEvent* event)
{
auto dialogRect = rect();
if (!dialogRect.contains(event->pos())) {
emit willClose(event);
}
QDialog::mousePressEvent(event);
}
/**************************************************************************
* Copyright (C) 2015-2019 by Savoir-faire Linux *
* Author: Mingrui Zhang <mingrui.zhang@savoirfairelinux.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
**************************************************************************/
#pragma once
#include <QDialog>
namespace Ui {
class PopupDialog;
}
class PopupDialog : public QDialog
{
Q_OBJECT
public:
enum class SpikeLabelAlignment
{
AlignLeft,
AlignHCenter,
AlignRight
};
explicit PopupDialog(QWidget *parent = nullptr,
QColor spikeColor = Qt::white,
SpikeLabelAlignment spikeAlignment = SpikeLabelAlignment::AlignLeft);
~PopupDialog();
void insertWidget(QWidget *widget);
signals:
void willClose(QMouseEvent* event);
protected:
void mousePressEvent(QMouseEvent *event);
private:
Ui::PopupDialog *ui;
void setSpikeLabelAlignment(SpikeLabelAlignment spikeAlignment);
};
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PopupDialog</class>
<widget class="QDialog" name="PopupDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>261</width>
<height>289</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QWidget" name="containerWidget" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="spikeLabel">
<property name="minimumSize">
<size>
<width>0</width>
<height>15</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>15</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="pixmap">
<pixmap resource="ressources.qrc">:/images/spike.png</pixmap>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources>
<include location="ressources.qrc"/>
</resources>
<connections/>
</ui>
......@@ -354,6 +354,7 @@ del /s /q $(OutDir)\Jami.exp</Command>
<ClCompile Include="levelmeter.cpp" />
<ClCompile Include="notifypushbutton.cpp" />
<ClCompile Include="overlaybutton.cpp" />
<ClCompile Include="popupdialog.cpp" />
<ClCompile Include="previewwidget.cpp" />
<ClCompile Include="rendermanager.cpp" />
<ClCompile Include="section.cpp" />
......@@ -692,6 +693,11 @@ del /s /q $(OutDir)\Jami.exp</Command>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(ProjectDir)..\ring-daemon\contrib\msvc\include;$(ProjectDir)..\daemon\contrib\msvc\include;$(ProjectDir)..\ring-lrc\src;$(ProjectDir)..\lrc\src;$(ProjectDir)qrencode-win32\qrencode-win32;$(QTDIR)\include;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtXml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebEngineWidgets;$(QTDIR)\include\QtWebChannel;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;.\release</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseCompile|x64'">.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(ProjectDir)..\ring-daemon\contrib\msvc\include;$(ProjectDir)..\daemon\contrib\msvc\include;$(ProjectDir)..\ring-lrc\src;$(ProjectDir)..\lrc\src;$(ProjectDir)winsparkle\include;$(ProjectDir)qrencode-win32\qrencode-win32;$(QTDIR)\include;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtXml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebEngineWidgets;$(QTDIR)\include\QtWebChannel;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;.\release</IncludePath>
</QtMoc>
<QtMoc Include="popupdialog.h">
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(ProjectDir)..\ring-daemon\contrib\msvc\include;$(ProjectDir)..\daemon\contrib\msvc\include;$(ProjectDir)..\ring-lrc\src;$(ProjectDir)..\lrc\src;$(ProjectDir)qrencode-win32\qrencode-win32;$(QTDIR)\include;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtXml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebEngineWidgets;$(QTDIR)\include\QtWebChannel;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;.\release</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='ReleaseCompile|x64'">.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(ProjectDir)..\ring-daemon\contrib\msvc\include;$(ProjectDir)..\daemon\contrib\msvc\include;$(ProjectDir)..\ring-lrc\src;$(ProjectDir)..\lrc\src;$(ProjectDir)winsparkle\include;$(ProjectDir)qrencode-win32\qrencode-win32;$(QTDIR)\include;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtXml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebEngineWidgets;$(QTDIR)\include\QtWebChannel;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;.\release</IncludePath>
<IncludePath Condition="'$(Configuration)|$(Platform)'=='Beta|x64'">.\GeneratedFiles\$(ConfigurationName);.\GeneratedFiles;.;$(ProjectDir)..\ring-daemon\contrib\msvc\include;$(ProjectDir)..\daemon\contrib\msvc\include;$(ProjectDir)..\ring-lrc\src;$(ProjectDir)..\lrc\src;$(ProjectDir)qrencode-win32\qrencode-win32;$(QTDIR)\include;$(QTDIR)\include\QtSvg;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtANGLE;$(QTDIR)\include\QtXml;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtWebEngineWidgets;$(QTDIR)\include\QtWebChannel;$(QTDIR)\include\QtCore;$(QTDIR)\mkspecs\win32-msvc;.\release</IncludePath>
</QtMoc>
<ClInclude Include="ringthemeutils.h" />
<QtMoc Include="selectareadialog.h">
</QtMoc>
......@@ -899,6 +905,7 @@ del /s /q $(OutDir)\Jami.exp</Command>
<SubType>Designer</SubType>
</QtUic>
<QtUic Include="collapsiblepasswordwidget.ui" />
<QtUic Include="popupdialog.ui" />
<QtUic Include="section.ui" />
<QtUic Include="sipkeypad.ui" />
<QtUic Include="updatedownloaddialog.ui" />
......
......@@ -255,6 +255,9 @@
<ClCompile Include="widgethelpers.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="popupdialog.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<QtMoc Include="aboutdialog.h">
......@@ -452,6 +455,9 @@
<QtMoc Include="widgethelpers.h">
<Filter>Header Files</Filter>
</QtMoc>
<QtMoc Include="popupdialog.h">
<Filter>Header Files</Filter>
</QtMoc>
</ItemGroup>
<ItemGroup>
<CustomBuild Include="debug\moc_predefs.h.cbt">
......@@ -749,6 +755,9 @@
<QtUic Include="collapsiblepasswordwidget.ui">
<Filter>Form Files</Filter>
</QtUic>
<QtUic Include="popupdialog.ui">
<Filter>Form Files</Filter>
</QtUic>
</ItemGroup>
<ItemGroup>
<None Include="images\FontAwesome.otf">
......@@ -909,4 +918,4 @@
<Filter>Resource Files</Filter>
</Image>
</ItemGroup>
</Project>
\ No newline at end of file
</Project>
......@@ -829,7 +829,7 @@ QPushButton#panelButton_9:pressed, QPushButton#panelButton_hash:pressed, QPushBu
background: #58b;
}
QWidget#contactPickerWidget {
QWidget#containerWidget {
border-radius: 10px;
border: solid 1px transparent;
background-color: white;
......
......@@ -23,6 +23,7 @@
#include "videoview.h"
#include "lrcinstance.h"
#include "contactpicker.h"
#include "popupdialog.h"
#include "sipinputpanel.h"
#include "utils.h"
......@@ -49,7 +50,7 @@ VideoOverlay::VideoOverlay(QWidget* parent)
ui->addToConferenceButton->setVisible(true);
ui->addToConferenceButton->setCheckable(true);
contactPicker_->setVisible(false);
contactPicker_->getContainer()->setVisible(false);
sipInputPanel_->setVisible(false);
......@@ -146,7 +147,7 @@ VideoOverlay::shouldFadeOut()
bool hoveringOnButtons = ui->bottomButtons->underMouse() || ui->topInfoBar->underMouse();
return not (hoveringOnButtons ||
(callInfo.status == lrc::api::call::Status::PAUSED) ||
contactPicker_->isActiveWindow() ||
contactPicker_->getContainer()->isActiveWindow() ||
sipInputPanel_->isActiveWindow());
}
......@@ -251,13 +252,14 @@ VideoOverlay::on_addToConferenceButton_toggled(bool checked)
QPoint globalPos_button = mapToGlobal(ui->addToConferenceButton->pos());
QPoint globalPos_bottomButtons = mapToGlobal(ui->bottomButtons->pos());
contactPicker_->move(globalPos_button.x(), globalPos_bottomButtons.y() - contactPicker_->height());
contactPicker_->getContainer()->move(globalPos_button.x(),
globalPos_bottomButtons.y() - contactPicker_->height() - popupMargin_);
// receive the signal that ensure the button checked status is correct and contactpicker
// is properly hidden
Utils::oneShotConnect(contactPicker_, &ContactPicker::willClose,
Utils::oneShotConnect(contactPicker_->getContainer(), &PopupDialog::willClose,
[this](QMouseEvent* event) {
contactPicker_->hide();
contactPicker_->getContainer()->hide();
// check if current mouse position is on button
auto relativeClickPos = ui->addToConferenceButton->mapFromGlobal(event->globalPos());
if (!ui->addToConferenceButton->rect().contains(relativeClickPos)) {
......@@ -267,13 +269,13 @@ VideoOverlay::on_addToConferenceButton_toggled(bool checked)
});
// for esc key, receive reject signal
Utils::oneShotConnect(contactPicker_, &QDialog::rejected,
Utils::oneShotConnect(contactPicker_->getContainer(), &QDialog::rejected,
[this] {
ui->addToConferenceButton->setChecked(false);
ui->addToConferenceButton->resetToOriginal();
});
contactPicker_->show();
contactPicker_->getContainer()->show();
}
void
......@@ -291,13 +293,14 @@ VideoOverlay::on_transferCallButton_toggled(bool checked)
QPoint globalPos_button = mapToGlobal(ui->transferCallButton->pos());
QPoint globalPos_bottomButtons = mapToGlobal(ui->bottomButtons->pos());
contactPicker_->move(globalPos_button.x(), globalPos_bottomButtons.y() - contactPicker_->height());
contactPicker_->getContainer()->move(globalPos_button.x(),
globalPos_bottomButtons.y() - contactPicker_->height() - popupMargin_);
// receive the signal that ensure the button checked status is correct and contactpicker
// is properly hidden
Utils::oneShotConnect(contactPicker_, &ContactPicker::willClose,
Utils::oneShotConnect(contactPicker_->getContainer(), &PopupDialog::willClose,
[this](QMouseEvent *event) {
contactPicker_->hide();
contactPicker_->getContainer()->hide();
// check if current mouse position is on button
auto relativeClickPos = ui->transferCallButton->mapFromGlobal(event->globalPos());
if (!ui->transferCallButton->rect().contains(relativeClickPos)) {
......@@ -307,20 +310,20 @@ VideoOverlay::on_transferCallButton_toggled(bool checked)
});
// for esc key, receive reject signal
Utils::oneShotConnect(contactPicker_, &QDialog::rejected,
Utils::oneShotConnect(contactPicker_->getContainer(), &QDialog::rejected,
[this] {
ui->transferCallButton->setChecked(false);
ui->transferCallButton->resetToOriginal();
});
contactPicker_->show();
contactPicker_->getContainer()->show();
}
void
VideoOverlay::slotWillDoTransfer(const std::string& contactUri)
{
auto callModel = LRCInstance::getCurrentCallModel();
contactPicker_->hide();
contactPicker_->getContainer()->hide();
ui->transferCallButton->setChecked(false);
ui->transferCallButton->resetToOriginal();
......@@ -356,7 +359,7 @@ void
VideoOverlay::slotContactWillJoinConference(const std::string& contactUri)
{
auto callModel = LRCInstance::getCurrentCallModel();
contactPicker_->hide();
contactPicker_->getContainer()->hide();
ui->addToConferenceButton->setChecked(false);
ui->addToConferenceButton->resetToOriginal();
......@@ -372,7 +375,7 @@ void
VideoOverlay::slotCallWillJoinConference(const std::string& callId)
{
auto callModel = LRCInstance::getCurrentCallModel();
contactPicker_->hide();
contactPicker_->getContainer()->hide();
ui->addToConferenceButton->setChecked(false);
ui->addToConferenceButton->resetToOriginal();
......
......@@ -81,4 +81,6 @@ private:
ContactPicker* contactPicker_;
SipInputPanel* sipInputPanel_;
QTimer* oneSecondTimer_;
quint16 popupMargin_{ 16 };
};
......@@ -18,6 +18,7 @@
#pragma once
#include "animationhelpers.h"
#include "popupdialog.h"
#include <QWidget>
#include <QTimer>
......@@ -78,4 +79,25 @@ private:
quint64 height_{ 128 };
quint64 fadeTime_{ 1000 };
};
\ No newline at end of file
};
class PopupWidget : public QWidget
{
Q_OBJECT
public:
// insider content of PopupDialog
explicit PopupWidget(QWidget* parent = nullptr,
QColor spikeColor = Qt::white,
PopupDialog::SpikeLabelAlignment spikeAlignment = PopupDialog::SpikeLabelAlignment::AlignLeft) {
widgetContainer_ = new PopupDialog(parent, spikeColor, spikeAlignment);
setParent(widgetContainer_);
widgetContainer_->insertWidget(this);
}
virtual ~PopupWidget() {}
PopupDialog *getContainer() { return widgetContainer_; }
protected:
PopupDialog *widgetContainer_;
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment