#include "topquickbuttonv2.h" #include #include #include #include #include #include #include #include #include class TopQuickButtonV2Private { Q_DECLARE_PUBLIC(TopQuickButtonV2) public: explicit TopQuickButtonV2Private(TopQuickButtonV2 *qptr) : uidStr(""), modifiedBol(false), fixedBol(true), closableBol(false), activedBol(NULL), openedBol(NULL), isUnfixableBol(true), isNeedUploadBol(false), type(TopQuickButtonV2::Type_Action), contextMenu(NULL), closeAction(NULL), fixAction(NULL), q_ptr(qptr) { } ~TopQuickButtonV2Private() { } QString uidStr; bool modifiedBol; bool fixedBol; bool closableBol; bool activedBol; bool openedBol; bool isUnfixableBol; bool isNeedUploadBol; TopQuickButtonV2::Type type; QVariant dataVar; QMenu *contextMenu; QAction *closeAction; QAction *fixAction; protected: TopQuickButtonV2 * const q_ptr; }; TopQuickButtonV2::TopQuickButtonV2(QWidget *parent) : QToolButton(parent), d_ptr(new TopQuickButtonV2Private(this)) { setContextMenuPolicy(Qt::CustomContextMenu); connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onCustomContextMenuRequested(QPoint))); setStyleSheet(QString("TopQuickButtonV2{padding-top:%1px; background:transparent; border: none;border-radius:0px;color:#FFFFFF;padding-left:10px;padding-right:10px;}\n" \ "TopQuickButtonV2:hover{background:rgba(255,255,255,0.15);border: none}\n" \ "QToolButton::menu-indicator{image:None;}").arg(TTHEME_DP(5))); } TopQuickButtonV2::~TopQuickButtonV2() { } void TopQuickButtonV2::setUid(const QString &iStr) { Q_D(TopQuickButtonV2); d->uidStr = iStr; } QString TopQuickButtonV2::uid() const { Q_D(const TopQuickButtonV2); return d->uidStr; } void TopQuickButtonV2::setType(TopQuickButtonV2::Type iType) { Q_D(TopQuickButtonV2); d->type = iType; } TopQuickButtonV2::Type TopQuickButtonV2::type() const { Q_D(const TopQuickButtonV2); return d->type; } void TopQuickButtonV2::setData(const QVariant &iDataVar) { Q_D(TopQuickButtonV2); d->dataVar = iDataVar; } QVariant TopQuickButtonV2::data() const { Q_D(const TopQuickButtonV2); return d->dataVar; } void TopQuickButtonV2::setFixed(bool iBol) { Q_D(TopQuickButtonV2); d->fixedBol = iBol; } bool TopQuickButtonV2::isFixed() const { Q_D(const TopQuickButtonV2); return d->fixedBol; } void TopQuickButtonV2::setModified(bool iBol) { Q_D(TopQuickButtonV2); if (d->modifiedBol != iBol) { d->modifiedBol = iBol; changeStyleSheet(); } } bool TopQuickButtonV2::isModified() const { Q_D(const TopQuickButtonV2); return d->modifiedBol; } void TopQuickButtonV2::setClosable(bool iBol) { Q_D(TopQuickButtonV2); d->closableBol = iBol; } bool TopQuickButtonV2::isClosable() const { Q_D(const TopQuickButtonV2); return d->closableBol; } void TopQuickButtonV2::setActived(bool iBol) { Q_D(TopQuickButtonV2); if (d->activedBol != iBol) { d->activedBol = iBol; changeStyleSheet(); } } bool TopQuickButtonV2::isActived() const { Q_D(const TopQuickButtonV2); return d->activedBol; } void TopQuickButtonV2::setOpened(bool iBol) { Q_D(TopQuickButtonV2); if (d->openedBol != iBol) { d->openedBol = iBol; changeStyleSheet(); } } bool TopQuickButtonV2::isOpened() const { Q_D(const TopQuickButtonV2); return d->openedBol; } void TopQuickButtonV2::setUnfixable(bool iIsUnfixableBol) { Q_D(TopQuickButtonV2); d->isUnfixableBol = iIsUnfixableBol; } bool TopQuickButtonV2::isUnfixable() const { Q_D(const TopQuickButtonV2); return d->isUnfixableBol; } void TopQuickButtonV2::onCustomContextMenuRequested(const QPoint &/*iPos*/) { Q_D(TopQuickButtonV2); if (d->contextMenu == NULL) { d->contextMenu = new QMenu(this); d->closeAction = new QAction(TRES->icon("close"), tr("Close"), this); d->fixAction = new QAction(this); connect(d->fixAction, SIGNAL(triggered()), this, SLOT(onFixedActionTrigged())); connect(d->closeAction, SIGNAL(triggered()), this, SLOT(onCloseActionTrigged())); d->contextMenu->addAction(d->closeAction); d->contextMenu->addAction(d->fixAction); } if (d->fixedBol) { d->fixAction->setIcon(TRES->icon("pin2")); // TRES->icon("pin0.$BODY_MENU_FG") d->fixAction->setText(tr("Unpin On Toolbar")); d->fixAction->setDisabled(!isUnfixable()); } else { d->fixAction->setIcon(TRES->icon("pin")); // TRES->icon("pin45.$BODY_MENU_FG") d->fixAction->setText(tr("Pin On Toolbar")); d->fixAction->setDisabled(false); } d->closeAction->setVisible(d->closableBol); d->contextMenu->popup(QCursor::pos()); } void TopQuickButtonV2::onCloseActionTrigged() { emit closeTrigged(); } void TopQuickButtonV2::onFixedActionTrigged() { Q_D(TopQuickButtonV2); d->fixedBol = !d->fixedBol; emit fixTrigged(d->fixedBol); } void TopQuickButtonV2::changeStyleSheet() { setStyleSheet(QString(".TopQuickButtonV2{background-color:%1;border-radius:0px;color:#FFFFFF;border: none;padding-left:10px;padding-right:10px;}" ".TopQuickButtonV2:hover{background:rgba(255,255,255,0.35);border: none;}") .arg(isActived() ? "rgba(255,255,255,0.15)" : "transparent")); }