#include "appmenu.h" #include #include #include #include #include #include #include #include #include "components/flatbutton.h" #include "lib/sizeproxywidget.h" #include "components/menu.h" AppMenu::AppMenu(QWidget *parent) : QMenu(parent), _menu(new Menu), _proxyWidget(new SizeProxyWidget(_menu)) { init(); ////SizeProxy *proxy = new SizeProxy(new QPushButton("XX")); //_proxy = new SizeProxy(_menu); //setLayout(_proxy); //_proxy->setScale(0.5, 0.5); ////_menu->setVisible(false); //_menu->installEventFilter(this); //setMinimumSize(1, 1); //setLayout(new QVBoxLayout); //layout()->setSpacing(0); //layout()->setContentsMargins(0, 0, 0, 0); } AppMenu::AppMenu(const QString &title, QWidget *parent) : QMenu(title, parent), _menu(new Menu), _proxyWidget(new SizeProxyWidget(_menu)) { init(); ////SizeProxy *proxy = new SizeProxy(new QPushButton("XX")); //_proxy = new SizeProxy(_menu); //setLayout(_proxy); //_proxy->setScale(0.5, 0.5); ////_menu->setVisible(false); //_menu->installEventFilter(this); //setMinimumSize(1, 1); //QVBoxLayout *l = new QVBoxLayout; //l->addWidget(_menu); //setLayout(l); //SizeProxy *proxy = new SizeProxy(this); //setLayout(proxy); //setLayout(new QVBoxLayout); //layout()->setSpacing(0); //layout()->setContentsMargins(0, 0, 0, 0); } AppMenu::~AppMenu() { } void AppMenu::animateExpand() { QParallelAnimationGroup *group; group = new QParallelAnimationGroup; QPropertyAnimation *animation; animation = new QPropertyAnimation; animation->setTargetObject(_proxyWidget); animation->setPropertyName("canvasXScale"); animation->setStartValue(0.5); animation->setEndValue(1); animation->setDuration(1350); animation->setEasingCurve(QEasingCurve::OutQuad); group->addAnimation(animation); animation = new QPropertyAnimation; animation->setTargetObject(_proxyWidget); animation->setPropertyName("canvasYScale"); animation->setStartValue(0); animation->setEndValue(1); animation->setDuration(1350); animation->setEasingCurve(QEasingCurve::OutQuad); group->addAnimation(animation); animation = new QPropertyAnimation; animation->setTargetObject(_proxyWidget); animation->setPropertyName("xScale"); animation->setStartValue(0.55); animation->setEndValue(1); animation->setDuration(1700); animation->setEasingCurve(QEasingCurve::OutBounce); group->addAnimation(animation); animation = new QPropertyAnimation; animation->setTargetObject(_proxyWidget); animation->setPropertyName("yScale"); animation->setStartValue(0); animation->setEndValue(1); animation->setDuration(1700); animation->setEasingCurve(QEasingCurve::OutBounce); group->addAnimation(animation); animation = new QPropertyAnimation; animation->setTargetObject(_proxyWidget); animation->setPropertyName("opacity"); animation->setStartValue(0); animation->setEndValue(1); animation->setDuration(1600); group->addAnimation(animation); group->start(QAbstractAnimation::DeleteWhenStopped); } //bool AppMenu::event(QEvent *event) //{ // switch (event->type()) // { // case QEvent::Resize: // case QEvent::Move: { // /* // QList::const_iterator i; // for (i = actions().begin(); i != actions().end(); ++i) { // QAction *action = *i; // FlatButton *item = menuItems.value(action); // //item->setGeometry(actionGeometry(action)); // } // */ // break; // } // default: // break; // } // return QMenu::event(event); //} bool AppMenu::eventFilter(QObject *obj, QEvent *event) { if (QEvent::Resize == event->type()) { //setGeometry(_proxyWidget->geometry().translated(x(), y())); setGeometry(x(), y(), 400, 800); //setGeometry(_proxyWidget->sourceGeometry().translated(x(), y())); //QRect rect(_proxyWidget->sourceGeometry()); //rect.translate(x(), y()); //rect.setWidth(static_cast(rect.width())*_proxyWidget->canvasXScale()); //rect.setHeight(static_cast(rect.height())*_proxyWidget->canvasYScale()); //setGeometry(rect); } return QMenu::eventFilter(obj, event); } //void AppMenu::actionEvent(QActionEvent *event) //{ // switch (event->type()) // { // case QEvent::ActionAdded: // { // break; // // QAction *action = event->action(); // // _menu->addMenuItem(action->text()); // // /* // QAction *action = event->action(); // FlatButton *button = new FlatButton; // button->setText(action->text()); // // QFont font(button->font()); // font.setCapitalization(QFont::MixedCase); // font.setPointSize(11); // font.setStyleName("Regular"); // button->setFont(font); // button->setMinimumHeight(48); // button->setShowHalo(false); // button->setParent(this); // button->setIcon(QIcon("../qt-material-widgets/face.svg")); // menuItems.insert(action, button); // layout()->addWidget(button); // */ // break; // } // case QEvent::ActionRemoved: { // break; // } // case QEvent::ActionChanged: { // break; // } // default: // break; // } // QMenu::actionEvent(event); //} // //void AppMenu::mouseMoveEvent(QMouseEvent *event) //{ // Q_UNUSED(event) //} void AppMenu::actionEvent(QActionEvent *event) { switch (event->type()) { case QEvent::ActionAdded: { QAction *action = event->action(); _menu->addMenuItem(action->text()); break; } case QEvent::ActionRemoved: { break; } case QEvent::ActionChanged: { break; } default: break; } QMenu::actionEvent(event); } void AppMenu::mousePressEvent(QMouseEvent *event) { Q_UNUSED(event) QMenu::mousePressEvent(event); } void AppMenu::paintEvent(QPaintEvent *event) { Q_UNUSED(event) QPainter painter(this); //painter.drawRect(rect()); //QBrush brush; //brush.setStyle(Qt::SolidPattern); //brush.setColor(Qt::white); //painter.setOpacity(1.0); //painter.setBrush(brush); //painter.setPen(Qt::NoPen); //painter.drawRect(rect()); //painter.drawRect(_proxyWidget->sourceGeometry()); //painter.drawRect(rect()); //rect.setWidth(static_cast(rect.width())*_proxyWidget->canvasXScale()); //rect.setHeight(static_cast(rect.height())*_proxyWidget->canvasYScale()); // QPen pen; // pen.setColor(Qt::red); // pen.setWidth(3); // painter.setPen(pen); // painter.setBrush(Qt::NoBrush); // // //QRect r(rect()); // //r.setWidth(static_cast(r.width())*_proxyWidget->xScale()); // // painter.drawRect(rect().adjusted(0, 0, -1, -1)); //QMenu::paintEvent(event); // QMenu::paintEvent(event); //QMenu::paintEvent(event); // QList items = actions(); // if (!items.isEmpty()) // { // qreal h = static_cast(height())/items.length(); // // int c = 0; // QList::const_iterator i; // for (i = items.begin(); i != items.end(); ++i) { // // //cqDebug() << actionGeometry(*i); // // painter.drawRect(0, h*c++, width(), h); // } // } } void AppMenu::init() { //_menu->addMenuItem("adsfdsfadf"); //_menu->addMenuItem("bdsfdsfadf"); //_menu->addMenuItem("cdsfdsfadf"); // _proxyWidget->show(); //_proxyWidget->setParent(this); //_proxyWidget->setWindowFlags(Qt::Widget); //_proxyWidget->setAutoFillBackground(false); //_proxyWidget->setAttribute( Qt::WA_TranslucentBackground, true ); //_proxyWidget->setAttribute(Qt::WA_NoSystemBackground); //_proxyWidget->setAttribute( Qt::WA_OpaquePaintEvent, false); //QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; //effect->setColor(QColor(0, 0, 0)); //effect->setOffset(0, 1); //effect->setBlurRadius(16); //_proxyWidget->setGraphicsEffect(effect); //setAutoFillBackground(true); //setPalette(Qt::transparent); //setAutoFillBackground(false); //setAttribute(Qt::WA_NoSystemBackground); setStyleSheet("QMenu { background-color: transparent; }"); QVBoxLayout *l = new QVBoxLayout; l->addWidget(_proxyWidget); l->setSizeConstraint(QLayout::SetMaximumSize); l->setContentsMargins(0, 0, 0, 0); setLayout(l); QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect; effect->setColor(QColor(0, 0, 0)); effect->setOffset(0, 1); effect->setBlurRadius(16); _proxyWidget->setGraphicsEffect(effect); //_proxyWidget->setXScale(1.0); //_proxyWidget->setXScale(0.5); //_proxyWidget->setYScale(1.0); connect(this, SIGNAL(aboutToShow()), this, SLOT(animateExpand())); _proxyWidget->installEventFilter(this); //_menu->installEventFilter(this); //setAttribute(Qt::WA_NoSystemBackground); // setAttribute(Qt::WA_NoSystemBackground); //_proxyWidget->setWindowFlags(_proxyWidget->windowFlags() | Qt::FramelessWindowHint); //setAutoFillBackground(false); //setWindowFlags(windowFlags()); //setAutoFillBackground(false); // _proxyWidget->setAttribute(Qt::WA_OpaquePaintEvent); //setMinimumSize(10, 10); }