forked from Ivasoft/DSView
switch qt class to 6.0 version
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
#include <QMessageBox>
|
||||
#include <QScreen>
|
||||
#include <QApplication>
|
||||
#include <QDebug>
|
||||
|
||||
#include "dsvdef.h"
|
||||
#include "config/appconfig.h"
|
||||
@@ -53,6 +54,13 @@ namespace pv {
|
||||
|
||||
MainFrame::MainFrame()
|
||||
{
|
||||
_layout = NULL;
|
||||
_bDraging = false;
|
||||
_hit_border = None;
|
||||
_freezing = false;
|
||||
_titleBar = NULL;
|
||||
_mainWindow = NULL;
|
||||
|
||||
setAttribute(Qt::WA_TranslucentBackground);
|
||||
// Make this a borderless window which can't
|
||||
// be resized or moved via the window system
|
||||
@@ -61,23 +69,17 @@ MainFrame::MainFrame()
|
||||
#else
|
||||
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
|
||||
#endif
|
||||
|
||||
setMinimumHeight(minHeight);
|
||||
setMinimumWidth(minWidth);
|
||||
//resize(1024, 768);
|
||||
|
||||
|
||||
// Set the window icon
|
||||
QIcon icon;
|
||||
icon.addFile(QString::fromUtf8(":/icons/logo.svg"),
|
||||
QSize(), QIcon::Normal, QIcon::Off);
|
||||
icon.addFile(QString::fromUtf8(":/icons/logo.svg"), QSize(), QIcon::Normal, QIcon::Off);
|
||||
setWindowIcon(icon);
|
||||
|
||||
app::get_app_window_instance(this, true);
|
||||
|
||||
_bDraging = false;
|
||||
_hit_border = None;
|
||||
_freezing = false;
|
||||
_minimized = false;
|
||||
|
||||
|
||||
// Title
|
||||
_titleBar = new toolbars::TitleBar(true, this);
|
||||
|
||||
@@ -87,7 +89,7 @@ MainFrame::MainFrame()
|
||||
_titleBar->setTitle(_mainWindow->windowTitle());
|
||||
|
||||
QVBoxLayout *vbox = new QVBoxLayout();
|
||||
vbox->setMargin(0);
|
||||
vbox->setContentsMargins(0,0,0,0);
|
||||
vbox->setSpacing(0);
|
||||
vbox->addWidget(_titleBar);
|
||||
vbox->addWidget(_mainWindow);
|
||||
@@ -120,8 +122,8 @@ MainFrame::MainFrame()
|
||||
_bottom_right->installEventFilter(this);
|
||||
|
||||
_layout = new QGridLayout(this);
|
||||
_layout->setMargin(0);
|
||||
_layout->setSpacing(0);
|
||||
_layout->setContentsMargins(0,0,0,0);
|
||||
_layout->addWidget(_top_left, 0, 0);
|
||||
_layout->addWidget(_top, 0, 1);
|
||||
_layout->addWidget(_top_right, 0, 2);
|
||||
@@ -132,28 +134,17 @@ MainFrame::MainFrame()
|
||||
_layout->addWidget(_bottom, 2, 1);
|
||||
_layout->addWidget(_bottom_right, 2, 2);
|
||||
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(unfreezing()));
|
||||
//readSettings();
|
||||
|
||||
connect(&_timer, SIGNAL(timeout()), this, SLOT(unfreezing()));
|
||||
}
|
||||
|
||||
void MainFrame::changeEvent(QEvent* event)
|
||||
{
|
||||
QFrame::changeEvent(event);
|
||||
QWindowStateChangeEvent* win_event = static_cast< QWindowStateChangeEvent* >(event);
|
||||
if(win_event->type() == QEvent::WindowStateChange) {
|
||||
if (win_event->oldState() & Qt::WindowMinimized) {
|
||||
if (_minimized) {
|
||||
readSettings();
|
||||
_minimized = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainFrame::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
QFrame::resizeEvent(event);
|
||||
|
||||
if (_layout == NULL){
|
||||
return;
|
||||
}
|
||||
|
||||
if (isMaximized()) {
|
||||
hide_border();
|
||||
} else {
|
||||
@@ -201,19 +192,18 @@ void MainFrame::show_border()
|
||||
|
||||
void MainFrame::showNormal()
|
||||
{
|
||||
show_border();
|
||||
show_border();
|
||||
QFrame::showNormal();
|
||||
}
|
||||
|
||||
void MainFrame::showMaximized()
|
||||
{
|
||||
{
|
||||
hide_border();
|
||||
QFrame::showMaximized();
|
||||
}
|
||||
|
||||
void MainFrame::showMinimized()
|
||||
{
|
||||
_minimized = true;
|
||||
{
|
||||
writeSettings();
|
||||
QFrame::showMinimized();
|
||||
}
|
||||
@@ -285,57 +275,69 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event)
|
||||
newLeft = mouse_event->globalX();
|
||||
if (newHeight > minimumHeight())
|
||||
newTop = mouse_event->globalY();
|
||||
setGeometry(newLeft, newTop,
|
||||
newWidth, newHeight);
|
||||
setGeometry(newLeft, newTop, newWidth, newHeight);
|
||||
saveWindowRegion();
|
||||
break;
|
||||
|
||||
case BottomLeft:
|
||||
newWidth = std::max(_dragStartGeometry.right() - mouse_event->globalX(), minimumWidth());
|
||||
newHeight = std::max(mouse_event->globalY() - _dragStartGeometry.top(), minimumHeight());
|
||||
newLeft = geometry().left();
|
||||
if (newWidth > minimumWidth())
|
||||
newLeft = mouse_event->globalX();
|
||||
setGeometry(newLeft, _dragStartGeometry.top(),
|
||||
newWidth, newHeight);
|
||||
setGeometry(newLeft, _dragStartGeometry.top(), newWidth, newHeight);
|
||||
saveWindowRegion();
|
||||
break;
|
||||
|
||||
case TopRight:
|
||||
newWidth = std::max(mouse_event->globalX() - _dragStartGeometry.left(), minimumWidth());
|
||||
newHeight = std::max(_dragStartGeometry.bottom() - mouse_event->globalY(), minimumHeight());
|
||||
newTop = geometry().top();
|
||||
if (newHeight > minimumHeight())
|
||||
newTop = mouse_event->globalY();
|
||||
setGeometry(_dragStartGeometry.left(), newTop,
|
||||
newWidth, newHeight);
|
||||
setGeometry(_dragStartGeometry.left(), newTop, newWidth, newHeight);
|
||||
saveWindowRegion();
|
||||
break;
|
||||
|
||||
case BottomRight:
|
||||
newWidth = std::max(mouse_event->globalX() - _dragStartGeometry.left(), minimumWidth());
|
||||
newHeight = std::max(mouse_event->globalY() - _dragStartGeometry.top(), minimumHeight());
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
|
||||
newWidth, newHeight);
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), newWidth, newHeight);
|
||||
saveWindowRegion();
|
||||
break;
|
||||
|
||||
case Left:
|
||||
newWidth = _dragStartGeometry.right() - mouse_event->globalX();
|
||||
if (newWidth > minimumWidth())
|
||||
setGeometry(mouse_event->globalX(), _dragStartGeometry.top(),
|
||||
newWidth, height());
|
||||
if (newWidth > minimumWidth()){
|
||||
setGeometry(mouse_event->globalX(), _dragStartGeometry.top(), newWidth, height());
|
||||
saveWindowRegion();
|
||||
}
|
||||
break;
|
||||
|
||||
case Right:
|
||||
newWidth = mouse_event->globalX() - _dragStartGeometry.left();
|
||||
if (newWidth > minimumWidth())
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
|
||||
newWidth, height());
|
||||
if (newWidth > minimumWidth()){
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), newWidth, height());
|
||||
saveWindowRegion();
|
||||
}
|
||||
break;
|
||||
|
||||
case Top:
|
||||
newHeight = _dragStartGeometry.bottom() - mouse_event->globalY();
|
||||
if (newHeight > minimumHeight())
|
||||
setGeometry(_dragStartGeometry.left(), mouse_event->globalY(),
|
||||
width(), newHeight);
|
||||
if (newHeight > minimumHeight()){
|
||||
setGeometry(_dragStartGeometry.left(), mouse_event->globalY(),width(), newHeight);
|
||||
saveWindowRegion();
|
||||
}
|
||||
break;
|
||||
|
||||
case Bottom:
|
||||
newHeight = mouse_event->globalY() - _dragStartGeometry.top();
|
||||
if (newHeight > minimumHeight())
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(),
|
||||
width(), newHeight);
|
||||
if (newHeight > minimumHeight()){
|
||||
setGeometry(_dragStartGeometry.left(), _dragStartGeometry.top(), width(), newHeight);
|
||||
saveWindowRegion();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -366,39 +368,59 @@ bool MainFrame::eventFilter(QObject *object, QEvent *event)
|
||||
return QFrame::eventFilter(object, event);
|
||||
}
|
||||
|
||||
void MainFrame::saveWindowRegion()
|
||||
{
|
||||
AppConfig &app = AppConfig::Instance();
|
||||
QRect rc = geometry();
|
||||
app._frameOptions.left = rc.left();
|
||||
app._frameOptions.top = rc.top();
|
||||
app._frameOptions.right = rc.right();
|
||||
app._frameOptions.bottom = rc.bottom();
|
||||
}
|
||||
|
||||
void MainFrame::writeSettings()
|
||||
{
|
||||
AppConfig &app = AppConfig::Instance();
|
||||
app._frameOptions.isMax = isMaximized();
|
||||
app._frameOptions.geometry = saveGeometry();
|
||||
app._frameOptions.isMax = isMaximized();
|
||||
|
||||
if (!isMaximized()){
|
||||
saveWindowRegion();
|
||||
}
|
||||
|
||||
app.SaveFrame();
|
||||
}
|
||||
|
||||
void MainFrame::readSettings()
|
||||
{
|
||||
if (_layout == NULL)
|
||||
return;
|
||||
|
||||
AppConfig &app = AppConfig::Instance();
|
||||
|
||||
if (app._frameOptions.language > 0){
|
||||
_mainWindow->switchLanguage(app._frameOptions.language);
|
||||
}
|
||||
|
||||
if (app._frameOptions.geometry.isEmpty()) {
|
||||
if (app._frameOptions.right == 0) {
|
||||
QScreen *screen=QGuiApplication::primaryScreen ();
|
||||
const QRect availableGeometry = screen->availableGeometry();
|
||||
resize(availableGeometry.width() / 2, availableGeometry.height() / 1.5);
|
||||
const int origX = std::max(0, (availableGeometry.width() - width()) / 2);
|
||||
const int origY = std::max(0, (availableGeometry.height() - height()) / 2);
|
||||
move(origX, origY);
|
||||
|
||||
} else {
|
||||
try
|
||||
{
|
||||
QByteArray ge = app._frameOptions.geometry;
|
||||
restoreGeometry(ge);
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
MsgBox::Show(NULL, "restore frame status error!");
|
||||
}
|
||||
if (app._frameOptions.isMax){
|
||||
showMaximized(); //show max by system api
|
||||
}
|
||||
else{
|
||||
int left = app._frameOptions.left;
|
||||
int top = app._frameOptions.top;
|
||||
int right = app._frameOptions.right;
|
||||
int bottom = app._frameOptions.bottom;
|
||||
resize(right-left, bottom-top);
|
||||
move(left, top);
|
||||
}
|
||||
}
|
||||
|
||||
// restore dockwidgets
|
||||
|
||||
Reference in New Issue
Block a user