929 lines
22 KiB
C++
929 lines
22 KiB
C++
|
|
#include <QHBoxLayout>
|
||
|
|
#include <QPushButton>
|
||
|
|
#include <QDockWidget>
|
||
|
|
#include <QFileDialog>
|
||
|
|
|
||
|
|
|
||
|
|
#include "QsfMainWindow.h"
|
||
|
|
#include "QsrRibbonCore.h"
|
||
|
|
#include "SgfParamManager.h"
|
||
|
|
|
||
|
|
#define RIBBON_STYLE_QSS "../userData/RibbonStyle.qss"
|
||
|
|
|
||
|
|
RobbonWidget::RobbonWidget(QWidget *parent /* = Q_NULLPTR */, Qt::WindowFlags f /* = Qt::WindowFlags() */)
|
||
|
|
:QWidget(parent,f)
|
||
|
|
{
|
||
|
|
setObjectName("RobbonWidget");
|
||
|
|
}
|
||
|
|
|
||
|
|
RobbonWidget::~RobbonWidget()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void RobbonWidget::paintEvent(QPaintEvent *event)
|
||
|
|
{
|
||
|
|
QStyleOption opt;
|
||
|
|
opt.init(this);
|
||
|
|
QPainter p(this);
|
||
|
|
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
|
||
|
|
}
|
||
|
|
|
||
|
|
QsrRibbonTitleBar::QsrRibbonTitleBar()
|
||
|
|
{
|
||
|
|
setObjectName("RibbonTitleBar");
|
||
|
|
QHBoxLayout* titleLayout = new QHBoxLayout();
|
||
|
|
titleLayout->setMargin(0);
|
||
|
|
titleLayout->setSpacing(0);
|
||
|
|
this->setLayout(titleLayout);
|
||
|
|
|
||
|
|
titleLayout->addSpacing(10); // 10pix
|
||
|
|
m_quickAccessToolBar = new QsrRibbonQuickAccessToolBar();
|
||
|
|
titleLayout->addWidget(m_quickAccessToolBar);
|
||
|
|
titleLayout->addStretch();
|
||
|
|
|
||
|
|
m_titleLable1 = new QLabel();
|
||
|
|
m_titleLable1->setStyleSheet("color:white;");
|
||
|
|
m_titleLable1->setObjectName("RibbonTitleBarLabel1");
|
||
|
|
titleLayout->addWidget(m_titleLable1);
|
||
|
|
titleLayout->addStretch();
|
||
|
|
|
||
|
|
|
||
|
|
m_userInfoLabel = new QLabel(QByteArray::fromHex("6c69616e6731303537403136332e636f6d").data());//("liang1057@163.com");
|
||
|
|
m_userInfoLabel->setStyleSheet("color:white;");
|
||
|
|
titleLayout->addWidget(m_userInfoLabel);
|
||
|
|
|
||
|
|
m_systemButton = new QsrRibbonQuickAccessToolBar();
|
||
|
|
titleLayout->addWidget(m_systemButton);
|
||
|
|
}
|
||
|
|
|
||
|
|
QsrRibbonTitleBar::~QsrRibbonTitleBar()
|
||
|
|
{
|
||
|
|
delete m_quickAccessToolBar;
|
||
|
|
m_quickAccessToolBar = NULL;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 设置窗口标题.
|
||
|
|
*
|
||
|
|
* @details 设置窗口标题.
|
||
|
|
* @param title 窗口的标题.
|
||
|
|
* @return .
|
||
|
|
*/
|
||
|
|
void QsrRibbonTitleBar::setTitle(QString title)
|
||
|
|
{
|
||
|
|
QWidget::setWindowTitle(title);
|
||
|
|
m_titleLable1->setText(title);
|
||
|
|
m_titleLable1->setAlignment(Qt::AlignCenter);
|
||
|
|
}
|
||
|
|
|
||
|
|
QString QsrRibbonTitleBar::getTitle()
|
||
|
|
{
|
||
|
|
return this->windowTitle();
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 设置工具条的文字. */
|
||
|
|
void QsrRibbonTitleBar::setToolsText(QString txt)
|
||
|
|
{
|
||
|
|
m_ToolsLabel.setText(txt);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QsrRibbonTitleBar::addQuickAction(QAction *action)
|
||
|
|
{
|
||
|
|
m_quickAccessToolBar->addAction(action);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QsrRibbonTitleBar::addSysAction(QAction* action)
|
||
|
|
{
|
||
|
|
QList<QAction*> tList = m_systemButton->actions();
|
||
|
|
if (tList.count() == 0)
|
||
|
|
m_systemButton->addAction(action);
|
||
|
|
else
|
||
|
|
{
|
||
|
|
m_systemButton->insertAction(tList[0], action);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void QsrRibbonTitleBar::setUserInfo(QString txt)
|
||
|
|
{
|
||
|
|
m_userInfoLabel->setText(txt);
|
||
|
|
}
|
||
|
|
|
||
|
|
// QList<QT_NAMESPACE::QAction>* QsrRibbonTitleBar::getActionList(bool isLeft/*=true*/)
|
||
|
|
// {
|
||
|
|
//
|
||
|
|
// }
|
||
|
|
|
||
|
|
// /** @brief 获取快捷工具栏 . */
|
||
|
|
// QsrRibbonQuickAccessToolBar* QsrRibbonTitleBar::quickAccessToolBar()
|
||
|
|
// {
|
||
|
|
// return m_quickAccessToolBar;
|
||
|
|
// }
|
||
|
|
//
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
QtbMenuBar::QtbMenuBar()
|
||
|
|
{
|
||
|
|
setObjectName("RibbonMenuBar");
|
||
|
|
QVBoxLayout* tVB = new QVBoxLayout();
|
||
|
|
tVB->setSpacing(0);
|
||
|
|
tVB->setContentsMargins(0, 0, 0, 0);
|
||
|
|
setLayout(tVB);
|
||
|
|
|
||
|
|
m_layout = new QHBoxLayout();
|
||
|
|
m_layout->setSpacing(0);
|
||
|
|
m_layout->setContentsMargins(0, 0, 0, 0);
|
||
|
|
tVB->addLayout(m_layout);
|
||
|
|
|
||
|
|
m_toolBarStackedWid = new QStackedWidget();
|
||
|
|
m_toolBarStackedWid->setObjectName("RibbonMenuStackeWidget");
|
||
|
|
m_menuTabBar = new QTabBar;
|
||
|
|
m_menuTabBar->setMinimumHeight(32);
|
||
|
|
m_menuTabBar->setObjectName("RibbonMenuTabBar");
|
||
|
|
m_layout->addWidget(m_menuTabBar);
|
||
|
|
|
||
|
|
/* 暂时不提供扩展型的可变菜单
|
||
|
|
m_ExtentedMenuTabBar = new QTabBar;
|
||
|
|
m_ExtentedMenuTabBar->setObjectName("RibbonExtentedMenuTabBar");
|
||
|
|
m_ExtentedMenuTabBar->addTab("");
|
||
|
|
m_ExtentedMenuTabBar->setTabEnabled(0, false);
|
||
|
|
m_layout->addWidget(m_ExtentedMenuTabBar);
|
||
|
|
// m_extentedWidget = new QWidget();
|
||
|
|
// m_layout->addWidget(m_extentedWidget);
|
||
|
|
// m_layoutExtented = new QHBoxLayout();
|
||
|
|
// m_layoutExtented->setContentsMargins(0, 0, 0, 0);
|
||
|
|
// m_layoutExtented->setSpacing(0);
|
||
|
|
// m_extentedWidget->setLayout(m_layoutExtented);
|
||
|
|
*/
|
||
|
|
m_layout->addStretch();
|
||
|
|
|
||
|
|
m_extentBtn = new RibbonToolButton();
|
||
|
|
m_layout->addWidget(m_extentBtn);
|
||
|
|
m_toolBarVisible = true;
|
||
|
|
QObject::connect(m_extentBtn, SIGNAL(clicked()), this, SLOT(onExtentToggled()));
|
||
|
|
|
||
|
|
|
||
|
|
tVB->addWidget(m_toolBarStackedWid);
|
||
|
|
|
||
|
|
m_toolBarStackedWid->setMaximumHeight(96);
|
||
|
|
m_toolBarStackedWid->setMinimumHeight(96);
|
||
|
|
m_toolBarStackedWid->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
|
||
|
|
|
||
|
|
connect(m_menuTabBar, SIGNAL(currentChanged(int)), this, SLOT(onCurrentTabChenged(int)));
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
QtbMenuBar::~QtbMenuBar()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::addAction(ribbonAction* tAction,int tIndex)
|
||
|
|
{
|
||
|
|
m_layout->insertWidget(tIndex, tAction);
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 增加菜单. */
|
||
|
|
void QtbMenuBar::addMenu(QString menuName)
|
||
|
|
{
|
||
|
|
// 添加一个tab标签
|
||
|
|
int tabIndex = m_menuTabBar->addTab(menuName);
|
||
|
|
|
||
|
|
// 下方Ribbon工具条上添加相应的显示widget作为Group的载体
|
||
|
|
RobbonWidget* tempWid = new RobbonWidget();
|
||
|
|
m_toolBarStackedWid->addWidget(tempWid);
|
||
|
|
m_StaWidMap.insert(menuName, tempWid);
|
||
|
|
|
||
|
|
// 这是显示widget用的横向布局
|
||
|
|
QHBoxLayout* tempHB = new QHBoxLayout();
|
||
|
|
tempHB->setSpacing(0);
|
||
|
|
tempHB->setContentsMargins(0, 0, 0, 0);
|
||
|
|
tempWid->setLayout(tempHB);
|
||
|
|
|
||
|
|
RobbonWidget* lastWid = new RobbonWidget();
|
||
|
|
QHBoxLayout* lastHB = new QHBoxLayout();
|
||
|
|
lastWid->setLayout(lastHB);
|
||
|
|
lastHB->addStretch();
|
||
|
|
|
||
|
|
tempHB->addWidget(lastWid);
|
||
|
|
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 增加扩展型菜单. */
|
||
|
|
/* 暂时不提供扩展型的可变菜单
|
||
|
|
void QtbMenuBar::addExtendedMenu(QString menuName, QString showName)
|
||
|
|
{
|
||
|
|
// 添加一个tab标签
|
||
|
|
// int tabIndex = m_ExtentedMenuTabBar->addTab(menuName);
|
||
|
|
|
||
|
|
// 下方Ribbon工具条上添加相应的显示widget作为Group的载体
|
||
|
|
RobbonWidget* tempWid = new RobbonWidget();
|
||
|
|
m_toolBarStackedWid->addWidget(tempWid);
|
||
|
|
m_StaWidMap.insert(menuName, tempWid);
|
||
|
|
tempWid->setWindowTitle(showName);
|
||
|
|
|
||
|
|
QHBoxLayout* tempHB = new QHBoxLayout();
|
||
|
|
tempHB->setSpacing(0);
|
||
|
|
tempHB->setContentsMargins(0, 0, 0, 0);
|
||
|
|
|
||
|
|
tempHB->addStretch();
|
||
|
|
tempWid->setLayout(tempHB);
|
||
|
|
|
||
|
|
// QPushButton* tBtn = new QPushButton(m_extentedWidget);
|
||
|
|
// tBtn->setText(showName);
|
||
|
|
// m_layoutExtented->addWidget(tBtn);
|
||
|
|
// tBtn->setVisible(true);
|
||
|
|
// tBtn->setCheckable(true);
|
||
|
|
// tBtn->setObjectName("RibbonExtentedMenu");
|
||
|
|
// m_extentedBtnMap.insert(menuName, tBtn);
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
void QtbMenuBar::setMenuVisible(QString menuName, bool tIsVisible)
|
||
|
|
{
|
||
|
|
QString tabTitle = "";
|
||
|
|
if (m_StaWidMap.contains(menuName))
|
||
|
|
{
|
||
|
|
m_StaWidMap[menuName]->setVisible(tIsVisible);
|
||
|
|
tabTitle = m_StaWidMap[menuName]->windowTitle();
|
||
|
|
}
|
||
|
|
|
||
|
|
if (tIsVisible == true)
|
||
|
|
{
|
||
|
|
for (int i = m_menuTabBar->count() - 1; i >= 0; i--)
|
||
|
|
{
|
||
|
|
if (menuName == m_menuTabBar->tabText(i))
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
m_menuTabBar->addTab(menuName);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
for (int i = m_menuTabBar->count() - 1; i >= 0; i--)
|
||
|
|
{
|
||
|
|
if (menuName == m_menuTabBar->tabText(i))
|
||
|
|
m_menuTabBar->removeTab(i);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
if (tabTitle.isEmpty())
|
||
|
|
return;
|
||
|
|
// m_extentedBtnMap[menuName]->setVisible(tIsVisible);
|
||
|
|
if (tIsVisible == true)
|
||
|
|
{
|
||
|
|
int tabIndex = m_ExtentedMenuTabBar->addTab(tabTitle);
|
||
|
|
//m_layoutExtented->addWidget();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
|
||
|
|
for (int i = m_ExtentedMenuTabBar->count() - 1; i >= 0; i--)
|
||
|
|
{
|
||
|
|
if (tabTitle == m_ExtentedMenuTabBar->tabText(i))
|
||
|
|
m_ExtentedMenuTabBar->removeTab(i);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
m_ExtentedMenuTabBar->setCurrentIndex(0);
|
||
|
|
*/
|
||
|
|
}
|
||
|
|
|
||
|
|
bool QtbMenuBar::isMenuVisible(QString menuName)
|
||
|
|
{
|
||
|
|
if (m_StaWidMap.contains(menuName))
|
||
|
|
{
|
||
|
|
return m_StaWidMap[menuName]->isVisible();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
QtbGroupWidget* QtbMenuBar::addGroup(QString menuName, QString txtGroupTitle)
|
||
|
|
{
|
||
|
|
if (m_StaWidMap.contains(menuName))
|
||
|
|
{
|
||
|
|
RobbonWidget* tempWid = m_StaWidMap[menuName]; //先找到menu的承载页
|
||
|
|
QtbGroupWidget* newGW = new QtbGroupWidget();
|
||
|
|
newGW->setTitle(txtGroupTitle);
|
||
|
|
QHBoxLayout* tempHB = (QHBoxLayout*)(tempWid->layout());
|
||
|
|
tempHB->insertWidget(tempHB->count()-1,newGW);
|
||
|
|
return newGW;
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::menuReady(QString menuName)
|
||
|
|
{
|
||
|
|
// if (m_StaWidMap.contains(menuName))
|
||
|
|
// {
|
||
|
|
// RobbonWidget* tempWid = m_StaWidMap[menuName]; //先找到menu的承载页
|
||
|
|
// RobbonWidget* lastWid = new QtbGroupWidget();
|
||
|
|
// QHBoxLayout* tempHB = (QHBoxLayout*)(tempWid->layout());
|
||
|
|
// tempHB->insertWidget(tempHB->count() - 1, newGW);
|
||
|
|
// return newGW;
|
||
|
|
// }
|
||
|
|
// else
|
||
|
|
// {
|
||
|
|
// return NULL;
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::setExtentBtnIcon(QIcon icoExtent, QIcon icoHide)
|
||
|
|
{
|
||
|
|
m_icoExtent = icoExtent;
|
||
|
|
m_icoHide = icoHide;
|
||
|
|
if (m_toolBarVisible)
|
||
|
|
m_extentBtn->setIcon(m_icoHide);
|
||
|
|
else
|
||
|
|
m_extentBtn->setIcon(m_icoExtent);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::setToolBarVisible(bool tVal)
|
||
|
|
{
|
||
|
|
m_toolBarVisible = tVal;
|
||
|
|
m_toolBarStackedWid->setVisible(m_toolBarVisible);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::onExtentToggled()
|
||
|
|
{
|
||
|
|
setToolBarVisible(!m_toolBarVisible);
|
||
|
|
if (m_toolBarVisible)
|
||
|
|
m_extentBtn->setIcon(m_icoHide);
|
||
|
|
else
|
||
|
|
m_extentBtn->setIcon(m_icoExtent);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::onCurrentTabChenged(int index)
|
||
|
|
{
|
||
|
|
m_toolBarStackedWid->setCurrentIndex(index);
|
||
|
|
m_toolBarStackedWid->show();
|
||
|
|
|
||
|
|
/* 暂时不提供扩展型的可变菜单
|
||
|
|
for each (QPushButton* var in m_extentedBtnMap)
|
||
|
|
{
|
||
|
|
var->setChecked(false);
|
||
|
|
}
|
||
|
|
m_ExtentedMenuTabBar->setCurrentIndex(0);
|
||
|
|
*/
|
||
|
|
}
|
||
|
|
|
||
|
|
/* 暂时不提供扩展型的可变菜单
|
||
|
|
void QtbMenuBar::onExtentedTabChenged()
|
||
|
|
{
|
||
|
|
for each (QPushButton* var in m_extentedBtnMap)
|
||
|
|
{
|
||
|
|
var->setChecked(false);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
void QtbMenuBar::enterEvent(QEvent *event)
|
||
|
|
{
|
||
|
|
QWidget::enterEvent(event);
|
||
|
|
if (m_toolBarVisible == false)
|
||
|
|
m_toolBarStackedWid->show();
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMenuBar::leaveEvent(QEvent *event)
|
||
|
|
{
|
||
|
|
QWidget::leaveEvent(event);
|
||
|
|
//m_toolBarStackedWid->setVisible(m_toolBarVisible);
|
||
|
|
if (m_toolBarVisible == false)
|
||
|
|
m_toolBarStackedWid->setVisible(false);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool QtbMenuBar::isToolBarVisible()
|
||
|
|
{
|
||
|
|
return m_toolBarVisible;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief Ribbon工具栏.
|
||
|
|
* @details Ribbon工具栏.
|
||
|
|
*/
|
||
|
|
QtbToolBar::QtbToolBar(/*QTabBar* tabBar*/)
|
||
|
|
{
|
||
|
|
//this->setTabBar(tabBar);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
QtbToolBar::~QtbToolBar()
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbToolBar::addMenu(QString txt)
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 主窗口.
|
||
|
|
* @details
|
||
|
|
*/
|
||
|
|
QtbMainWindow::QtbMainWindow(QWidget *parent /* = Q_NULLPTR */, Qt::WindowFlags f /* = Qt::WindowFlags() */)
|
||
|
|
:RobbonWidget(parent/*, Qt::FramelessWindowHint*/)
|
||
|
|
{
|
||
|
|
setObjectName("RibbonMainWindow");
|
||
|
|
resize(800, 600);
|
||
|
|
QFile qssFile(RIBBON_STYLE_QSS);
|
||
|
|
if (qssFile.exists())
|
||
|
|
{
|
||
|
|
if (qssFile.open(QFile::ReadOnly))
|
||
|
|
{
|
||
|
|
QString qssStr = QString(qssFile.readAll());
|
||
|
|
setStyleSheet(qssStr);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
Qt::WindowFlags myWinFlags = 0;
|
||
|
|
myWinFlags |= Qt::Window;
|
||
|
|
myWinFlags |= Qt::FramelessWindowHint;
|
||
|
|
//myWinFlags |= Qt::CustomizeWindowHint;
|
||
|
|
|
||
|
|
setWindowFlags(myWinFlags);
|
||
|
|
|
||
|
|
// #ifdef Q_OS_WIN
|
||
|
|
// HWND hwnd = reinterpret_cast<HWND>(this->winId());
|
||
|
|
//
|
||
|
|
// //const long style = (WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN);
|
||
|
|
// const long style = WS_POPUP; //( | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN);
|
||
|
|
// SetWindowLongPtr(hwnd, GWL_STYLE, style);
|
||
|
|
//
|
||
|
|
// const MARGINS shadow = { 1, 1, 1, 1 };
|
||
|
|
// DwmExtendFrameIntoClientArea(hwnd, &shadow);
|
||
|
|
//
|
||
|
|
// SetWindowPos(hwnd, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE);
|
||
|
|
// #endif
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
QVBoxLayout* tMainVB = new QVBoxLayout;
|
||
|
|
tMainVB->setSpacing(0);
|
||
|
|
tMainVB->setContentsMargins(1,1,1,1);
|
||
|
|
this->setLayout(tMainVB);
|
||
|
|
|
||
|
|
m_titleBar = new QsrRibbonTitleBar();
|
||
|
|
tMainVB->addWidget(m_titleBar);
|
||
|
|
|
||
|
|
m_menuBar = new QtbMenuBar();
|
||
|
|
tMainVB->addWidget(m_menuBar);
|
||
|
|
tMainVB->addSpacing(1);
|
||
|
|
m_workWindow = new QsfWorkWindow;
|
||
|
|
tMainVB->addWidget(m_workWindow);
|
||
|
|
}
|
||
|
|
|
||
|
|
QtbMainWindow::~QtbMainWindow()
|
||
|
|
{
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
QsrRibbonTitleBar* QtbMainWindow::titleBar()
|
||
|
|
{
|
||
|
|
return m_titleBar;
|
||
|
|
}
|
||
|
|
|
||
|
|
QtbMenuBar* QtbMainWindow::menuBar()
|
||
|
|
{
|
||
|
|
return m_menuBar;
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 创建DockWidget. */
|
||
|
|
QDockWidget * QtbMainWindow::createDockWidget(QString title, QString name, Qt::DockWidgetArea area)
|
||
|
|
{
|
||
|
|
QDockWidget* tDock = new QDockWidget(title);
|
||
|
|
SgfParamManager::GetInstance()->addParam(name.toStdString(), tDock);
|
||
|
|
m_workWindow->addDockWidget(area, tDock);
|
||
|
|
// QWidget* docWid1 = new QWidget;
|
||
|
|
// tDock->setWidget(docWid1);
|
||
|
|
return tDock;
|
||
|
|
}
|
||
|
|
|
||
|
|
QWidget* QtbMainWindow::createWorkWidget(QString title, QString name)
|
||
|
|
{
|
||
|
|
QWidget* tWidget = static_cast<QWidget*>(SgfParamManager::GetInstance()->getParamValue(name.toStdString()));
|
||
|
|
if(tWidget==NULL)
|
||
|
|
{
|
||
|
|
tWidget = new QWidget();
|
||
|
|
tWidget->setWindowTitle(title);
|
||
|
|
SgfParamManager::GetInstance()->addParam(name.toStdString(), tWidget);
|
||
|
|
m_workWindow->workSpace()->addTab(tWidget, title);
|
||
|
|
}
|
||
|
|
return tWidget;
|
||
|
|
}
|
||
|
|
void QtbMainWindow::addWorkWidget(QWidget* tWidget)
|
||
|
|
{
|
||
|
|
m_workWindow->workSpace()->addTab(tWidget, tWidget->windowTitle());
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::mousePressEvent(QMouseEvent *event)
|
||
|
|
{
|
||
|
|
// m_titleRect = m_titleBar->rect();
|
||
|
|
// if (m_titleRect.contains(event->pos()))
|
||
|
|
// oldMousePos = event->globalPos() - this->pos();
|
||
|
|
// else
|
||
|
|
// oldMousePos = QPoint(-1, -1);
|
||
|
|
|
||
|
|
QWidget::mousePressEvent(event);
|
||
|
|
m_titleRect = m_titleBar->rect();
|
||
|
|
if (m_titleRect.contains(event->pos()))
|
||
|
|
{
|
||
|
|
if (!event->isAccepted()) {
|
||
|
|
#ifdef Q_OS_WIN
|
||
|
|
ReleaseCapture();
|
||
|
|
SendMessage(reinterpret_cast<HWND>(winId()), WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
|
||
|
|
}
|
||
|
|
#else
|
||
|
|
if (m_titleRect.contains(event->pos()))
|
||
|
|
oldMousePos = event->globalPos() - this->pos();
|
||
|
|
else
|
||
|
|
oldMousePos = QPoint(-1, -1);
|
||
|
|
#endif
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::mouseDoubleClickEvent(QMouseEvent * event)
|
||
|
|
{
|
||
|
|
m_titleRect = m_titleBar->rect();
|
||
|
|
if (m_titleRect.contains(event->pos()))
|
||
|
|
{
|
||
|
|
if (isMaximized())
|
||
|
|
{
|
||
|
|
showNormal();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
showMaximized();
|
||
|
|
}
|
||
|
|
m_titleRect = m_titleBar->rect();
|
||
|
|
}
|
||
|
|
RobbonWidget::mouseDoubleClickEvent(event);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::mouseMoveEvent(QMouseEvent *event)
|
||
|
|
{
|
||
|
|
// if (isMaximized())
|
||
|
|
// return;
|
||
|
|
//
|
||
|
|
// if (m_titleRect.contains(oldMousePos))
|
||
|
|
// move(event->globalPos() - oldMousePos);
|
||
|
|
//
|
||
|
|
// oldMousePos = event->globalPos() - this->pos();
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::resizeEvent(QResizeEvent *event)
|
||
|
|
{
|
||
|
|
QWidget::resizeEvent(event);
|
||
|
|
update();
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::paintEvent(QPaintEvent *event)
|
||
|
|
{
|
||
|
|
QPainter p(this);
|
||
|
|
if (this->isActiveWindow())
|
||
|
|
p.setPen(QColor(60, 136, 193));
|
||
|
|
else
|
||
|
|
p.setPen(Qt::darkGray);
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
p.drawRect(QRect(0,0,width()-1, height()-1));
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbMainWindow::onSkin()
|
||
|
|
{
|
||
|
|
//QFile qssFile(RIBBON_STYLE_QSS);
|
||
|
|
QString fileneame = QFileDialog::getOpenFileName(this, "换肤", "../bin/userdata");
|
||
|
|
if (fileneame.isEmpty())
|
||
|
|
return;
|
||
|
|
QFile qssFile(fileneame);
|
||
|
|
if (qssFile.exists())
|
||
|
|
{
|
||
|
|
if (qssFile.open(QFile::ReadOnly))
|
||
|
|
{
|
||
|
|
QString qssStr = QString(qssFile.readAll());
|
||
|
|
setStyleSheet(qssStr);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief Ribbon操作.
|
||
|
|
* @details 一个操作对应一个图标,或者控件
|
||
|
|
*/
|
||
|
|
// ribbonAction::ribbonAction()
|
||
|
|
// {
|
||
|
|
//
|
||
|
|
// }
|
||
|
|
|
||
|
|
/** @brief Ribbon 操作组.
|
||
|
|
* @details Ribbon 操作组
|
||
|
|
*/
|
||
|
|
QtbGroupWidget::QtbGroupWidget()
|
||
|
|
{
|
||
|
|
m_actionGroup = new QActionGroup(this);
|
||
|
|
//this->setStyleSheet("background-color : rgba(33, 140, 240, 255);");
|
||
|
|
this->setObjectName("RibbonGroupWidget");
|
||
|
|
//setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||
|
|
|
||
|
|
QVBoxLayout* groupLayout = new QVBoxLayout;
|
||
|
|
groupLayout->setSpacing(0);
|
||
|
|
groupLayout->setContentsMargins(5, 5, 5, 0);
|
||
|
|
this->setLayout(groupLayout);
|
||
|
|
m_gridLayout = new QGridLayout();
|
||
|
|
m_gridLayout->setSpacing(5);
|
||
|
|
m_gridLayout->setContentsMargins(0, 0, 0, 0);
|
||
|
|
groupLayout->addLayout(m_gridLayout);
|
||
|
|
groupLayout->addStretch();
|
||
|
|
QHBoxLayout* titleLayout = new QHBoxLayout;
|
||
|
|
titleLayout->setSpacing(0);
|
||
|
|
titleLayout->setContentsMargins(5, 0, 5, 0);
|
||
|
|
groupLayout->addLayout(titleLayout);
|
||
|
|
//titleLayout->addStretch();
|
||
|
|
m_groupTitleLabel = new QLabel();
|
||
|
|
titleLayout->addWidget(m_groupTitleLabel);
|
||
|
|
m_groupTitleLabel->setMaximumHeight(24);
|
||
|
|
m_groupTitleLabel->setMinimumHeight(24);
|
||
|
|
//m_groupTitleLabel->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum);
|
||
|
|
|
||
|
|
|
||
|
|
// 右下角的按钮5
|
||
|
|
QsfToolButton* popBtn = new QsfToolButton(); popBtn->setText(">");
|
||
|
|
popBtn->setMaximumSize(QSize(24, 24));
|
||
|
|
popBtn->setMinimumSize(QSize(24, 24));
|
||
|
|
//m_groupTitleLabel->setLayout(titleLayout);
|
||
|
|
//titleLayout->addStretch();
|
||
|
|
titleLayout->addWidget(popBtn);
|
||
|
|
}
|
||
|
|
|
||
|
|
QtbGroupWidget::~QtbGroupWidget()
|
||
|
|
{
|
||
|
|
delete m_actionGroup;
|
||
|
|
}
|
||
|
|
void QtbGroupWidget::paintEvent(QPaintEvent *event)
|
||
|
|
{
|
||
|
|
RobbonWidget::paintEvent(event);
|
||
|
|
|
||
|
|
// 绘制每个Group上的分隔线
|
||
|
|
QPainter p(this);
|
||
|
|
p.setPen(Qt::darkGray);
|
||
|
|
p.drawLine(width() - 2, 5, width() - 2, height()-5);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbGroupWidget::setTitle(QString tTitle)
|
||
|
|
{
|
||
|
|
m_groupTitleLabel->setText(tTitle);
|
||
|
|
m_groupTitleLabel->setAlignment(Qt::AlignCenter);
|
||
|
|
}
|
||
|
|
|
||
|
|
void QtbGroupWidget::addAction(ribbonAction* rAct, int row, int col, int rowSpan /*= 1*/, int columnSpan /*= 1*/, Qt::Alignment alignment /*= Qt::Alignment()*/)
|
||
|
|
{
|
||
|
|
m_gridLayout->addWidget(rAct, row, col, rowSpan, columnSpan, alignment);
|
||
|
|
}
|
||
|
|
void QtbGroupWidget::addAction(RibbonToolButton* rAct, int row, int col, int rowSpan /*= 1*/, int columnSpan /*= 1*/, Qt::Alignment alignment /*= Qt::Alignment()*/)
|
||
|
|
{
|
||
|
|
m_gridLayout->addWidget(rAct->window(), row, col, rowSpan, columnSpan, alignment);
|
||
|
|
}
|
||
|
|
|
||
|
|
QActionGroup* QtbGroupWidget::getActionGroup() const
|
||
|
|
{
|
||
|
|
return m_actionGroup;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
QsrRibbonQuickAccessToolBar::QsrRibbonQuickAccessToolBar()
|
||
|
|
{
|
||
|
|
setObjectName("RibbonQuickAccessToolBar");
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/** @brief RibbonControlBase 控件基类.
|
||
|
|
* @details
|
||
|
|
*/RibbonControlBase::RibbonControlBase()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
RibbonControlBase::~RibbonControlBase()
|
||
|
|
{
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonControlBase::setGroupPos(QPoint tPos, int index /*= -1*/)
|
||
|
|
{
|
||
|
|
switch (index)
|
||
|
|
{
|
||
|
|
case -1:
|
||
|
|
m_pos0 = tPos;
|
||
|
|
m_pos1 = tPos;
|
||
|
|
break;
|
||
|
|
case 0:
|
||
|
|
m_pos0 = tPos;
|
||
|
|
break;
|
||
|
|
case 1:
|
||
|
|
m_pos1 = tPos;
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
m_pos0 = tPos;
|
||
|
|
m_pos1 = tPos;
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
QPoint RibbonControlBase::groupPos(int index)
|
||
|
|
{
|
||
|
|
if (index == 1)
|
||
|
|
return m_pos1;
|
||
|
|
else
|
||
|
|
return m_pos0;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/** @brief RibbonPushButton Ribbon按钮类.
|
||
|
|
* @details
|
||
|
|
*/
|
||
|
|
RibbonToolButton::RibbonToolButton(QWidget *parent /*= Q_NULLPTR*/)
|
||
|
|
: QPushButton(parent)
|
||
|
|
{
|
||
|
|
setObjectName("RibbonToolButton");
|
||
|
|
m_action = NULL;
|
||
|
|
m_txtVisible = true;
|
||
|
|
setMinimumHeight(24);
|
||
|
|
setMinimumWidth(24);
|
||
|
|
setStyleSheet("text-align : left;");
|
||
|
|
m_action = new QAction();
|
||
|
|
connect(this, SIGNAL(clicked(bool)), m_action, SIGNAL(triggered(bool)));
|
||
|
|
}
|
||
|
|
|
||
|
|
RibbonToolButton::RibbonToolButton(const QIcon &icon, const QString &text, QWidget *parent /*= Q_NULLPTR*/)
|
||
|
|
:QPushButton(icon, text, parent)
|
||
|
|
{
|
||
|
|
setObjectName("RibbonToolButton");
|
||
|
|
m_text = text;
|
||
|
|
m_txtVisible = true;
|
||
|
|
setMinimumHeight(24);
|
||
|
|
setStyleSheet("text-align : left;");
|
||
|
|
m_action = new QAction(icon, text);
|
||
|
|
connect(this, SIGNAL(clicked(bool)), m_action, SIGNAL(triggered(bool)));
|
||
|
|
}
|
||
|
|
|
||
|
|
RibbonToolButton::RibbonToolButton(const QString &text, QWidget *parent /*= Q_NULLPTR*/)
|
||
|
|
:QPushButton(text, parent)
|
||
|
|
{
|
||
|
|
setObjectName("RibbonToolButton");
|
||
|
|
m_action = NULL;
|
||
|
|
m_text = text;
|
||
|
|
m_txtVisible = true;
|
||
|
|
setMinimumHeight(24);
|
||
|
|
setMaximumWidth(75);
|
||
|
|
setStyleSheet("text-align : left;");
|
||
|
|
m_action = new QAction(text);
|
||
|
|
connect(this, SIGNAL(clicked(bool)), m_action, SIGNAL(triggered(bool)));
|
||
|
|
}
|
||
|
|
|
||
|
|
RibbonToolButton::~RibbonToolButton()
|
||
|
|
{
|
||
|
|
// 没有释放action的操作
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButton::setTxtVisible(bool tVal)
|
||
|
|
{
|
||
|
|
m_txtVisible = tVal;
|
||
|
|
if (m_txtVisible)
|
||
|
|
QPushButton::setText(m_text);
|
||
|
|
else
|
||
|
|
QPushButton::setText("");
|
||
|
|
|
||
|
|
update();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool RibbonToolButton::txtVisible()
|
||
|
|
{
|
||
|
|
return m_txtVisible;
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButton::setAlignment(Qt::Alignment flag)
|
||
|
|
{
|
||
|
|
QString str = "";
|
||
|
|
switch (flag)
|
||
|
|
{
|
||
|
|
case Qt::AlignCenter:
|
||
|
|
str = "center";
|
||
|
|
break;
|
||
|
|
case Qt::AlignLeft:
|
||
|
|
str = "left";
|
||
|
|
break;
|
||
|
|
case Qt::AlignRight:
|
||
|
|
str = "right";
|
||
|
|
break;
|
||
|
|
case Qt::AlignBottom:
|
||
|
|
str = "bottom";
|
||
|
|
break;
|
||
|
|
case Qt::AlignTop:
|
||
|
|
str = "top";
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
str = "center";
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
setStyleSheet(QString("text-align : %1;").arg(str));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** @brief 设置Action. */
|
||
|
|
// void RibbonToolButton::setAction(QAction* tAction)
|
||
|
|
// {
|
||
|
|
// m_action = tAction;
|
||
|
|
// this->setText(tAction->text());
|
||
|
|
// this->setIcon(tAction->icon());
|
||
|
|
// connect(this, SIGNAL(triggered(bool)), m_action, SIGNAL(triggered(bool)));
|
||
|
|
// }
|
||
|
|
|
||
|
|
/** @brief 获取Action. */
|
||
|
|
QAction* RibbonToolButton::getAction()
|
||
|
|
{
|
||
|
|
return m_action;
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButton::setText(QString &text)
|
||
|
|
{
|
||
|
|
m_action->setText(text);
|
||
|
|
QPushButton::setText(text);
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButton::setIcon(const QIcon &icon)
|
||
|
|
{
|
||
|
|
m_action->setIcon(icon);
|
||
|
|
QPushButton::setIcon(icon);
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButton::setEnabled(bool &tEnabled)
|
||
|
|
{
|
||
|
|
m_action->setEnabled(tEnabled);
|
||
|
|
QPushButton::setEnabled(tEnabled);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
RibbonToolButtonBig::RibbonToolButtonBig(const QIcon &icon, const QString &text, QWidget *parent)
|
||
|
|
{
|
||
|
|
setObjectName("RibbonToolButton");
|
||
|
|
// this->resize(64, 54);
|
||
|
|
// this->setMaximumSize(QSize(64, 54));
|
||
|
|
// this->setMinimumSize(QSize(64, 54));
|
||
|
|
|
||
|
|
QVBoxLayout* tVB = new QVBoxLayout;
|
||
|
|
setLayout(tVB);
|
||
|
|
tVB->setSpacing(0);
|
||
|
|
tVB->setContentsMargins(0, 0, 0, 0);
|
||
|
|
m_pushButton = new QPushButton();
|
||
|
|
m_pushButton->setIcon(icon);
|
||
|
|
m_pushButton->setIconSize(QSize(32, 32));
|
||
|
|
tVB->addWidget(m_pushButton);
|
||
|
|
m_label = new QLabel();
|
||
|
|
m_label->setText(text);
|
||
|
|
m_label->setMaximumHeight(18);
|
||
|
|
m_label->setAlignment(Qt::AlignCenter);
|
||
|
|
tVB->addWidget(m_label);
|
||
|
|
|
||
|
|
m_label_extent = new QLabel;
|
||
|
|
m_label_extent->setMaximumHeight(12);
|
||
|
|
m_label_extent->setText("V");
|
||
|
|
m_label_extent->setAlignment(Qt::AlignCenter);
|
||
|
|
tVB->addWidget(m_label_extent);
|
||
|
|
m_label_extent->setVisible(false);
|
||
|
|
|
||
|
|
m_pushButton->setObjectName("RibbonToolButton");
|
||
|
|
connect(m_pushButton, SIGNAL(clicked(bool)), this, SIGNAL(triggered(bool)));
|
||
|
|
}
|
||
|
|
|
||
|
|
RibbonToolButtonBig::~RibbonToolButtonBig()
|
||
|
|
{
|
||
|
|
delete m_pushButton;
|
||
|
|
delete m_label;
|
||
|
|
}
|
||
|
|
|
||
|
|
QPushButton* RibbonToolButtonBig::pushButton() const
|
||
|
|
{
|
||
|
|
return m_pushButton;
|
||
|
|
}
|
||
|
|
|
||
|
|
QLabel* RibbonToolButtonBig::label() const
|
||
|
|
{
|
||
|
|
return m_label;
|
||
|
|
}
|
||
|
|
|
||
|
|
void RibbonToolButtonBig::setExtentIconVisible(bool tVal)
|
||
|
|
{
|
||
|
|
m_label_extent->setVisible(tVal);
|
||
|
|
}
|
||
|
|
|
||
|
|
|