Skip to content

Commit

Permalink
[win-linux] add feature 62094
Browse files Browse the repository at this point in the history
  • Loading branch information
SimplestStudio committed Oct 25, 2024
1 parent 4cecedb commit df958eb
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 10 deletions.
3 changes: 2 additions & 1 deletion win-linux/src/cascapplicationmanagerwrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -998,10 +998,11 @@ void CAscApplicationManagerWrapper::handleInputCmd(const std::vector<wstring>& v
}

if ( open_in_new_window ) {
bool isMaximized = false;
_app.m_private->editorWindowGeometry(_start_rect, isMaximized, open_opts.wurl);
open_opts.panel_size = CWindowBase::expectedContentSize(_start_rect, true);
open_opts.parent_widget = COpenOptions::eWidgetType::window;
if (CEditorWindow * editor_win = CEditorWindow::create(_start_rect, open_opts)) {
bool isMaximized = mainWindow() ? mainWindow()->windowState().testFlag(Qt::WindowMaximized) : reg_user.value("maximized", false).toBool();
editor_win->show(isMaximized);
editor_win->bringToTop();

Expand Down
30 changes: 27 additions & 3 deletions win-linux/src/cascapplicationmanagerwrapper_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,31 @@ class CAscApplicationManagerWrapper_Private
return QRect();
}

auto editorWindowGeometry(QRect &rc, bool &isMaximized, const std::wstring &wurl) -> void
{
AscEditorType etype = CEditorTools::editorTypeFromFormat(CCefViewEditor::GetFileFormat(wurl));
GET_REGISTRY_USER(reg_user);
if (etype == AscEditorType::etUndefined) {
if (!rc.isEmpty())
rc.adjust(50,50,50,50);
isMaximized = mainWindow() ? mainWindow()->windowState().testFlag(Qt::WindowMaximized) : reg_user.value("maximized", false).toBool();
} else {
QString baseKey = "EditorsGeometry/" + QString::number(int(etype)) + "/";
if (reg_user.contains(baseKey + "position"))
rc = reg_user.value(baseKey + "position").toRect();
else {
if (!rc.isEmpty())
rc.adjust(50,50,50,50);
}

if (reg_user.contains(baseKey + "maximized"))
isMaximized = reg_user.value(baseKey + "maximized").toBool();
else {
isMaximized = mainWindow() ? mainWindow()->windowState().testFlag(Qt::WindowMaximized) : reg_user.value("maximized", false).toBool();
}
}
}

auto editorWindowFromViewId(int viewid) -> CEditorWindow *
{
return m_appmanager.editorWindowFromViewId(viewid);
Expand All @@ -413,10 +438,9 @@ class CAscApplicationManagerWrapper_Private
COpenOptions opts_ext{opts};
if ( preferOpenEditorWindow() ) {
GET_REGISTRY_USER(reg_user);
bool isMaximized = mainWindow() ? mainWindow()->windowState().testFlag(Qt::WindowMaximized) : reg_user.value("maximized", false).toBool();
bool isMaximized = false;
QRect rect = /*isMaximized ? QRect() :*/ windowRectFromViewId(opts.parent_id);
if ( !rect.isEmpty() )
rect.adjust(50,50,50,50);
editorWindowGeometry(rect, isMaximized, opts.wurl);
opts_ext.panel_size = CWindowBase::expectedContentSize(rect, true);
opts_ext.parent_widget = COpenOptions::eWidgetType::window;
if (CEditorWindow * editor_win = CEditorWindow::create(rect, opts_ext)) {
Expand Down
2 changes: 1 addition & 1 deletion win-linux/src/windows/ceditorwindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,7 @@ void CEditorWindow::onCloseEvent()
{
if ( m_pMainView ) {
if ( closeWindow() == MODAL_RESULT_YES ) {
CWindowBase::saveWindowState();
CWindowBase::saveWindowState(d_ptr->panel()->data()->contentType());
hide();
}
}
Expand Down
11 changes: 7 additions & 4 deletions win-linux/src/windows/cwindowbase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,18 @@ QWidget* CWindowBase::createTopPanel(QWidget *parent)
return _boxTitleBtns;
}

void CWindowBase::saveWindowState()
void CWindowBase::saveWindowState(AscEditorType editorType)
{
if (!windowState().testFlag(Qt::WindowFullScreen)) {
QString baseKey;
if (editorType != AscEditorType::etUndefined)
baseKey = "EditorsGeometry/" + QString::number(int(editorType)) + "/";
GET_REGISTRY_USER(reg_user)
reg_user.setValue("position", normalGeometry());
reg_user.setValue(baseKey + "position", normalGeometry());
if (windowState().testFlag(Qt::WindowMaximized)) {
reg_user.setValue("maximized", true);
reg_user.setValue(baseKey + "maximized", true);
} else {
reg_user.remove("maximized");
reg_user.remove(baseKey + "maximized");
}
}
}
Expand Down
3 changes: 2 additions & 1 deletion win-linux/src/windows/cwindowbase.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
#include <QMainWindow>
#include <QPushButton>
#include <memory>
#include "cefview.h"
#include "components/celipsislabel.h"


Expand All @@ -81,7 +82,7 @@ class CWindowBase : public QMainWindow

QPushButton* createToolButton(QWidget * parent, const QString& name);
QWidget* createTopPanel(QWidget *parent);
void saveWindowState();
void saveWindowState(AscEditorType editorType = AscEditorType::etUndefined);
void moveToPrimaryScreen();
void setIsCustomWindowStyle(bool);
virtual bool event(QEvent*);
Expand Down

0 comments on commit df958eb

Please sign in to comment.