diff --git a/BuildsDialog.qml b/BuildsDialog.qml index f25f1d3..a4a231b 100644 --- a/BuildsDialog.qml +++ b/BuildsDialog.qml @@ -15,8 +15,9 @@ Dialog { padding: 0 width: 880 height: 600 - closePolicy: buildsDialog.backend.switching ? Popup.NoAutoClose - : Popup.CloseOnEscape | Popup.CloseOnPressOutside + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside + //closePolicy: buildsDialog.backend.switching ? Popup.NoAutoClose + // : Popup.CloseOnEscape | Popup.CloseOnPressOutside background: Rectangle { color: "#1e1e1e" diff --git a/CMakeLists.txt b/CMakeLists.txt index ca7ab5f..977a388 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,15 +19,6 @@ endif() qt_standard_project_setup(REQUIRES 6.8) -# Иконку самого файла приложения (то, что видно до запуска) каждая система берёт -# по-своему: Windows — из ресурса, вкомпилированного в .exe, macOS — из .icns -# внутри бандла. На Linux такого механизма нет, там иконку даёт .desktop-файл, -# который ставится ниже вместе с темой hicolor. -# -# Растры и .icns/.ico собираются из одного исходника скриптом icons/generate_icons.sh: -# у macOS арт по сетке Apple занимает 824 из 1024 точек холста, у Windows и Linux -# идёт без полей. Правки иконки вносятся в icons/master/icon_master.png с -# последующим перезапуском скрипта, а не в отдельные файлы размеров. set(LAUNCHER_ICON_DIR "${CMAKE_CURRENT_SOURCE_DIR}/icons") if(WIN32) @@ -47,10 +38,6 @@ qt_add_executable(BiLauncher ${LAUNCHER_APP_ICON} ) -# Иконка окна выставляется в main.cpp через setWindowIcon() и обязана быть -# доступна на всех платформах, поэтому лежит в отдельном ресурсе, а не в -# ресурсах QML-модуля: путь :/icons/... не зависит от URI модуля. -# Размеры 24, 48 и 64 нужны панели задач Windows и значкам рабочих столов Linux. qt_add_resources(BiLauncher "appicon" PREFIX "/icons" BASE "icons" @@ -70,9 +57,11 @@ qt_add_resources(BiLauncher "appicon" icons/icon_512x512@2x.png ) -# OUTPUT_DIRECTORY: по умолчанию модуль с URI BiLauncher кладёт qmldir в -# ${CMAKE_BINARY_DIR}/BiLauncher — на Linux это имя занято самим исполняемым -# файлом (у него нет расширения), и линковка падает с «Is a directory». +# Путь импорта для QML code model Qt Creator / qmlls: модуль лежит в +# ${CMAKE_CURRENT_BINARY_DIR}/qml, а не в корне каталога сборки. +set(QML_IMPORT_PATH "${CMAKE_CURRENT_BINARY_DIR}/qml" + CACHE STRING "Пути импорта QML для Qt Creator" FORCE) + qt_add_qml_module(BiLauncher URI BiLauncher OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/qml/BiLauncher" @@ -144,8 +133,6 @@ set_target_properties(BiLauncher PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER com.galeondev.BiLauncher MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION} - # Попадает в CFBundleIconFile сгенерированного Info.plist — только имя - # файла, без пути: сам .icns кладётся в Contents/Resources выше. MACOSX_BUNDLE_ICON_FILE icon.icns MACOSX_BUNDLE TRUE WIN32_EXECUTABLE TRUE @@ -206,8 +193,6 @@ if(UNIX AND NOT APPLE) ) install(TARGETS launcher_zlib_reference LIBRARY DESTINATION ${LAUNCHER_ZLIB_DIR}) - # Рабочие столы ищут иконку не по имени файла, а по имени из ключа Icon= - # .desktop-файла, перебирая размеры в теме hicolor, — отсюда переименование. foreach(icon_size IN ITEMS 16 24 32 48 64 128 256 512) install(FILES "${LAUNCHER_ICON_DIR}/icon_${icon_size}x${icon_size}.png" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/${icon_size}x${icon_size}/apps" @@ -243,9 +228,6 @@ qt_generate_deploy_qml_app_script( DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM DEPLOY_TOOL_OPTIONS ${deploy_opts}) install(SCRIPT ${deploy_script}) -# Автотесты: собираются только по запросу и в установку не попадают. -# Код лаунчера при этом не меняется — тесты компилируют те же исходники -# в отдельную статическую библиотеку, см. tests/CMakeLists.txt и doc/testing.md. option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF) if(BILAUNCHER_BUILD_TESTS) enable_testing() diff --git a/Main.qml b/Main.qml index 702fad2..1ca1be0 100644 --- a/Main.qml +++ b/Main.qml @@ -192,6 +192,10 @@ Window { rotation: 0 editable: false hoverEnabled: true + // Пока идёт загрузка или установка, профиль и сборку не меняем: + // единственное доступное действие — отмена на панели загрузки. + enabled: !backend.busy && !backend.gameRunning + opacity: enabled ? 1.0 : 0.45 model: backend.profileNames @@ -390,7 +394,8 @@ Window { anchors.rightMargin: 0 anchors.bottomMargin: -218 hoverEnabled: true - enabled: !backend.gameRunning && !backend.switching + enabled: !backend.gameRunning || !backend.switching + opacity: enabled ? 1.0 : 0.45 contentItem: Text { text: backend.activeBuildName !== "" ? backend.activeBuildName @@ -464,6 +469,7 @@ Window { anchors.verticalCenter: folderButton.verticalCenter anchors.leftMargin: 8 hoverEnabled: true + enabled: !backend.busy && !backend.gameRunning background: Image { anchors.fill: parent diff --git a/SeasonalBuildsDialog.qml b/SeasonalBuildsDialog.qml index 4d70ede..9c482e6 100644 --- a/SeasonalBuildsDialog.qml +++ b/SeasonalBuildsDialog.qml @@ -22,9 +22,9 @@ Dialog { padding: 0 width: 960 height: 560 - closePolicy: seasons.backend.seasonalInstalling - ? Popup.NoAutoClose - : (Popup.CloseOnEscape | Popup.CloseOnPressOutside) + // Закрывается и во время установки: отменить её можно только на панели + // загрузки главного окна, а модальное окно эту панель перекрывает. + closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside background: Rectangle { color: "#1e1e1e" diff --git a/doc/qml/Main.md b/doc/qml/Main.md index d5d9a2c..ccc2816 100644 --- a/doc/qml/Main.md +++ b/doc/qml/Main.md @@ -63,8 +63,9 @@ | `seasonalInstallFinished` | сообщение «сборка установлена, можно играть» | | `javaRuntimeInstalled` | обновляет строку Java в настройках | -Кнопка запуска выключена, пока `busy` или `gameRunning`. Кнопка активной сборки выключена во время -игры и смены сборки. +Кнопка запуска выключена, пока `busy` или `gameRunning`. Список профилей выключен, пока `busy`; +кнопка активной сборки — пока `busy` или `gameRunning`. Так во время загрузки и установки (в том +числе сезонной сборки) доступна только отмена на панели загрузки. ## Профили diff --git a/doc/qml/SeasonalBuildsDialog.md b/doc/qml/SeasonalBuildsDialog.md index a7f1de7..cb1f2b6 100644 --- a/doc/qml/SeasonalBuildsDialog.md +++ b/doc/qml/SeasonalBuildsDialog.md @@ -48,8 +48,9 @@ Каталог обновляется при каждом открытии окна (`refreshSeasonalCatalog(false)`). Свежий кэш отвечает без сети. -Пока идёт установка, окно закрывается только кнопкой. Отменить установку можно на панели загрузки -главного окна, и случайный щелчок мимо окна не должен её закрыть. +Окно закрывается по Esc и щелчку мимо него и во время установки: отменить установку можно только +на панели загрузки главного окна, которую модальное окно перекрывает. Установка при закрытии окна +продолжается. ---