Files
newspark110/ui/forms/lc_cadtoolbarinterface.cpp
Chenwenxuan edac2715f0 init
2024-03-06 14:54:30 +08:00

153 lines
3.7 KiB
C++

#include <QMouseEvent>
#include <QGridLayout>
#include <QActionGroup>
#include <QIcon>
#include <QToolButton>
#include <QToolBar>
#include "lc_cadtoolbarinterface.h"
#include "qg_cadtoolbar.h"
#include "qg_actionhandler.h"
#include "rs_debug.h"
LC_CadToolBarInterface::LC_CadToolBarInterface(QG_CadToolBar* _parentTB, Qt::WindowFlags fl):
QWidget(_parentTB, fl)
,cadToolBar(_parentTB)
,actionHandler(nullptr)
,m_pHidden(new QAction("ActionHidden", this))
,m_pGrid0(new QToolBar)
,m_pGrid1(new QToolBar)
,m_pActionGroup(new QActionGroup(this))
{
}
void LC_CadToolBarInterface::initToolBars()
{
switch(rtti()){
case RS2::ToolBarSelect:
m_pButtonForward = new QAction( QIcon(":/extui/forward.png"), "Continue", this);
//continue to default, no break by design
default:
m_pButtonBack = new QAction(QIcon(":/extui/back.png"), "Back", this);
case RS2::ToolBarMain:
break;
}
setStyleSheet("QToolBar{ margin: 0px }");
setContentsMargins(0,0,0,0);
// setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
for(auto p: {m_pGrid0, m_pGrid1}){
p->setFloatable(false);
p->setMovable(false);
p->setOrientation(Qt::Vertical);
p->setContentsMargins(0,0,0,0);
}
m_pActionGroup->setExclusive(true);
m_pHidden->setCheckable(true);
m_pHidden->setChecked(true);
m_pActionGroup->addAction(m_pHidden);
QHBoxLayout* hLayout=new QHBoxLayout;
hLayout->addWidget(m_pGrid0);
hLayout->addWidget(m_pGrid1);
hLayout->setSpacing(1);
hLayout->setContentsMargins(0,0,0,0);
QVBoxLayout* vLayout=new QVBoxLayout;
vLayout->setSpacing(1);
vLayout->setContentsMargins(0,0,0,0);
if(m_pButtonBack){
QToolButton* button=new QToolButton;
button->setDefaultAction(m_pButtonBack);
button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
vLayout->addWidget(button);
connect(m_pButtonBack, SIGNAL(triggered()), cadToolBar, SLOT(back()));
}
vLayout->addLayout(hLayout);
if(rtti()!=RS2::ToolBarSelect)
vLayout->addStretch(1);
setLayout(vLayout);
}
void LC_CadToolBarInterface::setActionHandler(QG_ActionHandler* ah)
{
actionHandler=ah;
}
void LC_CadToolBarInterface::finishCurrentAction(bool resetToolBar)
{
if(!actionHandler) return;
RS_ActionInterface* currentAction =actionHandler->getCurrentAction();
if(currentAction) {
currentAction->finish(resetToolBar); //finish the action, but do not update toolBar
}
}
void LC_CadToolBarInterface::killSelectActions()
{
if(!actionHandler) return;
actionHandler->killSelectActions();
}
void LC_CadToolBarInterface::killAllActions()
{
if(!actionHandler) return;
actionHandler->killAllActions();
}
QSize LC_CadToolBarInterface::sizeHint() const
{
return QSize(-1,-1);
}
void LC_CadToolBarInterface::mousePressEvent(QMouseEvent* e) {
if (e->button()==Qt::RightButton && cadToolBar) {
finishCurrentAction(true);
cadToolBar->showPreviousToolBar(true);
e->accept();
}
}
void LC_CadToolBarInterface::back()
{
finishCurrentAction(true);
if (cadToolBar) {
cadToolBar->showPreviousToolBar(true);
}
}
void LC_CadToolBarInterface::addSubAction(QAction*const action, bool addGroup)
{
RS_DEBUG->print("LC_CadToolBarInterface::addSubAction(): begin\n");
switch(rtti()){
case RS2::ToolBarMain:
action->setCheckable(false);
break;
default:
action->setCheckable(true);
}
if(actions0>actions1){
m_pGrid1->addAction(action);
++actions1;
}else{
m_pGrid0->addAction(action);
++actions0;
}
if(addGroup) m_pActionGroup->addAction(action);
RS_DEBUG->print("LC_CadToolBarInterface::addSubAction(): end\n");
}
void LC_CadToolBarInterface::addSubActions(const std::vector<QAction*>& actions, bool addGroup)
{
for(auto p: actions){
this->addSubAction(p, addGroup);
}
resize(cadToolBar->size());
}