Skip to content

Commit 76659aa

Browse files
authored
Merge pull request #37 from scratchcpp/about_dialog
Add about dialog
2 parents 9075efb + 09852f0 commit 76659aa

38 files changed

+1386
-6
lines changed

build/module_test.cmake

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ if (SCRATCHCPP_PLAYER_BUILD_UNIT_TESTS)
1515
${MODULE}
1616
GTest::gtest_main
1717
GTest::gmock_main
18-
Qt6::Gui
19-
Qt6::Qml
18+
${QT_LIBS}
2019
Qt6::Test
2120
)
2221

2322
target_include_directories(${TARGET} PRIVATE ${MODULE_SRC_DIR})
23+
target_include_directories(${TARGET} PRIVATE ${PROJECT_SOURCE_DIR}/src)
24+
target_include_directories(${TARGET} PRIVATE ${PROJECT_SOURCE_DIR}/src/global)
2425
gtest_discover_tests(${TARGET})
2526
endif()

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
add_subdirectory(app)
22

33
add_subdirectory(global)
4+
add_subdirectory(ui)
45
add_subdirectory(uicomponents)
56
add_subdirectory(keyboard)

src/app/CMakeLists.txt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ qt_add_executable(${APP_TARGET}
1111
qt_add_qml_module(${APP_TARGET}
1212
URI ScratchCPP
1313
VERSION 1.0
14-
QML_FILES main.qml
14+
QML_FILES
15+
qml/main.qml
16+
qml/dialogs/AboutDialog.qml
1517
)
1618

1719
set(QML_IMPORT_PATH "${QML_IMPORT_PATH};${CMAKE_CURRENT_LIST_DIR}"

src/app/app.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "app.h"
1010
#include "globalmodule.h"
1111
#include "modularity/ioc.h"
12+
#include "ui/internal/uiengine.h"
1213

1314
using namespace scratchcpp;
1415
using namespace scratchcpp::modularity;
@@ -65,7 +66,7 @@ int App::run(int argc, char **argv)
6566
QQmlApplicationEngine engine;
6667
engine.addImportPath(":/");
6768

68-
const QUrl url(u"qrc:/ScratchCPP/main.qml"_qs);
69+
const QUrl url(u"qrc:/ScratchCPP/qml/main.qml"_qs);
6970
QObject::connect(
7071
&engine,
7172
&QQmlApplicationEngine::objectCreated,
@@ -77,6 +78,8 @@ int App::run(int argc, char **argv)
7778
Qt::QueuedConnection);
7879
engine.load(url);
7980

81+
ui::UiEngine::instance()->setQmlEngine(&engine);
82+
8083
// Run the event loop
8184
int exitCode = app.exec();
8285

src/app/appmenubar.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@ AppMenuBar::AppMenuBar(QObject *parent) :
5454
m_fps60ModeItem->setChecked(false);
5555
m_editMenu->addItem(m_fps60ModeItem);
5656
connect(m_fps60ModeItem, &MenuItemModel::checkedChanged, this, &AppMenuBar::fps60ModeChanged);
57+
58+
// Help menu
59+
m_helpMenu = new MenuModel(m_model);
60+
m_helpMenu->setTitle(tr("&Help"));
61+
m_model->addMenu(m_helpMenu);
62+
63+
// Help -> About program
64+
m_aboutAppItem = new MenuItemModel(m_fileMenu);
65+
m_aboutAppItem->setText(tr("About program..."));
66+
m_helpMenu->addItem(m_aboutAppItem);
67+
connect(m_aboutAppItem, &MenuItemModel::clicked, this, &AppMenuBar::aboutAppTriggered);
5768
}
5869

5970
MenuBarModel *AppMenuBar::model() const

src/app/appmenubar.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class AppMenuBar : public QObject
4646
void fileOpened(const QString &fileName);
4747
void turboModeChanged();
4848
void fps60ModeChanged();
49+
void aboutAppTriggered();
4950

5051
private:
5152
void openFile();
@@ -63,6 +64,9 @@ class AppMenuBar : public QObject
6364
uicomponents::MenuModel *m_editMenu = nullptr;
6465
uicomponents::MenuItemModel *m_turboModeItem = nullptr;
6566
uicomponents::MenuItemModel *m_fps60ModeItem = nullptr;
67+
68+
uicomponents::MenuModel *m_helpMenu = nullptr;
69+
uicomponents::MenuItemModel *m_aboutAppItem = nullptr;
6670
};
6771

6872
} // namespace scratchcpp

src/app/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// SPDX-License-Identifier: GPL-3.0-or-later
22

33
#include "app.h"
4+
#include "ui/uimodule.h"
45
#include "uicomponents/uicomponentsmodule.h"
56
#include "keyboard/keyboardmodule.h"
67

@@ -9,6 +10,7 @@ using namespace scratchcpp;
910
int main(int argc, char *argv[])
1011
{
1112
App app;
13+
app.addModule(new ui::UiModule);
1214
app.addModule(new uicomponents::UiComponentsModule);
1315
app.addModule(new keyboard::KeyboardModule);
1416

src/app/qml/CMakeLists.txt

Whitespace-only changes.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// SPDX-License-Identifier: GPL-3.0-or-later
2+
3+
import QtQuick
4+
import QtQuick.Controls
5+
import QtQuick.Layouts
6+
import ScratchCPP.Ui
7+
import ScratchCPP.UiComponents
8+
9+
CustomDialog {
10+
//: For example "About ScratchCPP" (%1 is the app name)
11+
title: qsTr("About %1").arg(Qt.application.displayName)
12+
standardButtons: Dialog.Ok
13+
14+
contentItem: RowLayout {
15+
spacing: 25
16+
17+
/*Image {
18+
source: "qrc:/res/images/icon.ico"
19+
sourceSize.width: 60
20+
sourceSize.height: 60
21+
Layout.alignment: Qt.AlignTop
22+
}*/
23+
24+
ColumnLayout {
25+
Label {
26+
text: Qt.application.displayName
27+
font.bold: true
28+
}
29+
30+
Label {}
31+
32+
Label {
33+
text: qsTr("Version: %1").arg(Qt.application.version)
34+
}
35+
36+
Label {
37+
text: qsTr("Revision: %1").arg(AppInfo.revision())
38+
}
39+
40+
Label {
41+
readonly property string src: "https://github.com/scratchcpp/scratchcpp-player"
42+
text: qsTr("Source code: %1").arg("<a href=\"" + src + "\">" + src + "</a>")
43+
onLinkActivated: (link)=> Qt.openUrlExternally(link)
44+
}
45+
46+
Label {}
47+
48+
Label {
49+
readonly property int startYear: 2024
50+
readonly property string startStr: AppInfo.buildYear() === startYear ? "" : startYear + "-"
51+
text: "Copyright © " + startStr + AppInfo.buildYear() + " adazem009"
52+
}
53+
54+
Label {
55+
text: qsTr("Published with the GNU General Public License.")
56+
}
57+
}
58+
}
59+
}

src/app/main.qml renamed to src/app/qml/main.qml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import QtQuick
44
import QtQuick.Controls.Material
55
import QtQuick.Layouts
66
import ScratchCPP
7+
import ScratchCPP.Ui
78
import ScratchCPP.UiComponents
89
import ScratchCPP.Render
910
import ScratchCPP.Keyboard
11+
import "dialogs"
1012

1113
ApplicationWindow {
1214
id: root
@@ -17,6 +19,7 @@ ApplicationWindow {
1719
color: Material.background
1820
Material.accent: "orange"
1921
Material.theme: Material.Dark
22+
onActiveFocusItemChanged: UiEngine.activeFocusItem = activeFocusItem
2023

2124
menuBar: CustomMenuBar {
2225
width: root.width
@@ -29,9 +32,15 @@ ApplicationWindow {
2932
urlField.text = fileName;
3033
player.fileName = fileName;
3134
}
35+
36+
function onAboutAppTriggered() {
37+
aboutDialog.open();
38+
}
3239
}
3340
}
3441

42+
AboutDialog { id: aboutDialog }
43+
3544
ColumnLayout {
3645
id: layout
3746
anchors.fill: parent

0 commit comments

Comments
 (0)