Skip to content

Commit

Permalink
Merge pull request #13650 from chennes/firstStartWidget
Browse files Browse the repository at this point in the history
Start: First start widget
  • Loading branch information
sliptonic committed Apr 29, 2024
2 parents c3b0fcd + 5327232 commit 6807920
Show file tree
Hide file tree
Showing 17 changed files with 792 additions and 42 deletions.
4 changes: 2 additions & 2 deletions src/Gui/PreferencePackManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ namespace Gui {
/**
* \class PreferencePack A collection of user preferences stored in files on disk
*/
class PreferencePack {
class GuiExport PreferencePack {

Check warning on line 37 in src/Gui/PreferencePackManager.h

View workflow job for this annotation

GitHub Actions / Lint / Lint

class 'PreferencePack' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]

public:

Expand Down Expand Up @@ -83,7 +83,7 @@ namespace Gui {
* preferences as a PreferencePack based on a set of template files provided either in the main
* FreeCAD distribution, or inside various installed mods.
*/
class PreferencePackManager {
class GuiExport PreferencePackManager {

Check warning on line 86 in src/Gui/PreferencePackManager.h

View workflow job for this annotation

GitHub Actions / Lint / Lint

class 'PreferencePackManager' defines a default destructor but does not define a copy constructor, a copy assignment operator, a move constructor or a move assignment operator [cppcoreguidelines-special-member-functions]
public:
PreferencePackManager();
~PreferencePackManager() = default;
Expand Down
14 changes: 13 additions & 1 deletion src/Mod/Start/Gui/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,29 +53,41 @@ SET(StartGui_SRCS
FileCardDelegate.h
FileCardView.cpp
FileCardView.h
FirstStartWidget.cpp
FirstStartWidget.h
FlowLayout.cpp
FlowLayout.h
GeneralSettingsWidget.cpp
GeneralSettingsWidget.h
Manipulator.cpp
Manipulator.h
PreCompiled.cpp
PreCompiled.h
StartView.cpp
StartView.h
ThemeSelectorWidget.cpp
ThemeSelectorWidget.h
)

SET(StartGuiIcon_SVG
Resources/icons/StartCommandIcon.svg
Resources/icons/PartDesignWorkbench.svg
)

SET(StartGuiThumbnail_PNG
Resources/thumbnails/Classic512.png
Resources/thumbnails/OpenDark512.png
Resources/thumbnails/OpenLight512.png
)

# TODO: Evaluate PCH use with Qt6/QtQuick/Qml
if (FREECAD_USE_PCH)
add_definitions(-D_PreComp_)
GET_MSVC_PRECOMPILED_SOURCE("PreCompiled.cpp" PCH_SRCS ${StartGui_SRCS})
ADD_MSVC_PRECOMPILED_HEADER(StartGui PreCompiled.h PreCompiled.cpp PCH_SRCS)
endif (FREECAD_USE_PCH)

add_library(StartGui SHARED ${StartGui_SRCS} ${StartGuiIcon_SVG})
add_library(StartGui SHARED ${StartGui_SRCS} ${StartGuiIcon_SVG} ${StartGuiThumbnail_PNG})
# target_link_libraries(StartGui ${StartGui_LIBS} Qt::Quick Qt::Qml Qt::QuickWidgets)
target_link_libraries(StartGui ${StartGui_LIBS})

Expand Down
108 changes: 108 additions & 0 deletions src/Mod/Start/Gui/FirstStartWidget.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/****************************************************************************
* *
* Copyright (c) 2024 The FreeCAD Project Association AISBL *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
***************************************************************************/

#include "PreCompiled.h"

#ifndef _PreComp_
#include <QGuiApplication>
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>
#include <QResizeEvent>
#include <QVBoxLayout>
#include <QWidget>
#endif

#include "FirstStartWidget.h"
#include "ThemeSelectorWidget.h"
#include "GeneralSettingsWidget.h"

#include <App/Application.h>
#include <gsl/pointers>

using namespace StartGui;

FirstStartWidget::FirstStartWidget(QWidget* parent)
: QGroupBox(parent)
, _themeSelectorWidget {nullptr}
, _generalSettingsWidget {nullptr}
, _welcomeLabel {nullptr}
, _descriptionLabel {nullptr}
, _doneButton {nullptr}
{
setObjectName(QLatin1String("FirstStartWidget"));
setupUi();
qApp->installEventFilter(this);
}

void FirstStartWidget::setupUi()
{
auto outerLayout = gsl::owner<QVBoxLayout*>(new QVBoxLayout(this));
QString application = QString::fromUtf8(App::Application::Config()["ExeName"].c_str());

Check warning on line 61 in src/Mod/Start/Gui/FirstStartWidget.cpp

View workflow job for this annotation

GitHub Actions / Lint / Lint

unused QString [-Wclazy-unused-non-trivial-variable]
_welcomeLabel = gsl::owner<QLabel*>(new QLabel);
outerLayout->addWidget(_welcomeLabel);
_descriptionLabel = gsl::owner<QLabel*>(new QLabel);
outerLayout->addWidget(_descriptionLabel);

_themeSelectorWidget = gsl::owner<ThemeSelectorWidget*>(new ThemeSelectorWidget(this));
_generalSettingsWidget = gsl::owner<GeneralSettingsWidget*>(new GeneralSettingsWidget(this));

outerLayout->addWidget(_generalSettingsWidget);
outerLayout->addWidget(_themeSelectorWidget);

_doneButton = gsl::owner<QPushButton*>(new QPushButton);
auto buttonBar = gsl::owner<QHBoxLayout*>(new QHBoxLayout);
buttonBar->addStretch();
buttonBar->addWidget(_doneButton);
outerLayout->addLayout(buttonBar);

connect(_doneButton, &QPushButton::clicked, this, &FirstStartWidget::doneClicked);
retranslateUi();
}

void FirstStartWidget::doneClicked()
{
auto hGrp = App::GetApplication().GetParameterGroupByPath(
"User parameter:BaseApp/Preferences/Mod/Start");
hGrp->SetBool("FirstStart2024", false);
this->hide();
}

bool FirstStartWidget::eventFilter(QObject* object, QEvent* event)
{
if (object == this && event->type() == QEvent::LanguageChange) {
this->retranslateUi();
}
return QWidget::eventFilter(object, event);
}

void FirstStartWidget::retranslateUi()
{
_doneButton->setText(tr("Done"));
QString application = QString::fromUtf8(App::Application::Config()["ExeName"].c_str());
_welcomeLabel->setText(QLatin1String("<h1>") + tr("Welcome to %1").arg(application)
+ QLatin1String("</h1>"));
_descriptionLabel->setText(
tr("To get started, set your basic configuration options below.") + QLatin1String(" ")
+ tr("These options (and many more) can be changed later in Preferences."));
}
61 changes: 61 additions & 0 deletions src/Mod/Start/Gui/FirstStartWidget.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// SPDX-License-Identifier: LGPL-2.1-or-later
/****************************************************************************
* *
* Copyright (c) 2024 The FreeCAD Project Association AISBL *
* *
* This file is part of FreeCAD. *
* *
* FreeCAD is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 2.1 of the *
* License, or (at your option) any later version. *
* *
* FreeCAD is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with FreeCAD. If not, see *
* <https://www.gnu.org/licenses/>. *
* *
***************************************************************************/

#ifndef FREECAD_FIRSTSTARTWIDGET_H
#define FREECAD_FIRSTSTARTWIDGET_H

#include <QWidget>
#include <QGroupBox>

class QLabel;
class QPushButton;

namespace StartGui
{

class ThemeSelectorWidget;
class GeneralSettingsWidget;

class FirstStartWidget: public QGroupBox
{
Q_OBJECT
public:
explicit FirstStartWidget(QWidget* parent = nullptr);
bool eventFilter(QObject* object, QEvent* event) override;

private:
void retranslateUi();
void setupUi();
void doneClicked();

ThemeSelectorWidget* _themeSelectorWidget;
GeneralSettingsWidget* _generalSettingsWidget;

QLabel* _welcomeLabel;
QLabel* _descriptionLabel;
QPushButton* _doneButton;
};

} // namespace StartGui

#endif // FREECAD_FIRSTSTARTWIDGET_H

0 comments on commit 6807920

Please sign in to comment.