diff --git a/.appveyor.yml b/.appveyor.yml
index 3b632d1f30e..7ca7d58c4ce 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -19,5 +19,9 @@ build_script:
- cmake -DUSE_COMPILE_CACHE=ON -DCACHE_TOOL=%APPVEYOR_BUILD_FOLDER%/clcache.4.1.0/clcache-4.1.0/clcache.exe -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_PREFIX_PATH=c:/Qt/5.12/msvc2017%QT_SUFFIX%;c:/tools/vcpkg/installed/%PLATFORM%-windows -DCMAKE_GENERATOR_PLATFORM="%CMAKE_PLATFORM%" ..
- cmake --build . -- /maxcpucount:4
- cmake --build . --target tests
+ - cmake --build . --target package
+artifacts:
+ - path: 'build\lmms-*.exe'
+ name: Installer
cache:
- c:/tools/vcpkg/installed
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 4174ba1effb..a3be541b592 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -12,6 +12,18 @@ shared:
key: ccache-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .BuildNum }}
paths:
- ~/.ccache
+ restore_homebrew_cache: &restore_homebrew_cache
+ restore_cache:
+ keys:
+ - homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}
+ - homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}
+ - homebrew-{{ arch }}
+ save_homebrew_cache: &save_homebrew_cache
+ save_cache:
+ key: homebrew-{{ arch }}-{{ .Environment.CIRCLE_JOB }}-{{ .Branch }}-{{ .BuildNum }}
+ paths:
+ - ~/Library/Caches/Homebrew
+ - /usr/local/Homebrew
ccache_stats: &ccache_stats
run:
@@ -30,6 +42,14 @@ shared:
mkdir -p /tmp/artifacts
# Workaround for failing submodule fetching
git config --global --unset url."ssh://git@github.com".insteadOf || true
+ if [[ -n "${CIRCLE_PR_NUMBER}" ]]
+ then
+ echo "Fetching out merged pull request"
+ git fetch -u origin refs/pull/${CIRCLE_PR_NUMBER}/merge:pr/merge
+ git checkout pr/merge
+ else
+ echo "Not a pull request"
+ fi
# Commmon environment variables
common_environment: &common_environment
@@ -59,6 +79,15 @@ jobs:
- run:
name: Build tests
command: cd build && make tests
+ - run:
+ name: Build installer
+ command: |
+ cd build
+ make package
+ cp ./lmms-*.exe /tmp/artifacts/
+ - store_artifacts:
+ path: /tmp/artifacts/
+ destination: /
- *ccache_stats
- *save_cache
mingw64:
@@ -79,11 +108,20 @@ jobs:
- run:
name: Build tests
command: cd build && make tests
+ - run:
+ name: Build installer
+ command: |
+ cd build
+ make package
+ cp ./lmms-*.exe /tmp/artifacts/
+ - store_artifacts:
+ path: /tmp/artifacts/
+ destination: /
- *ccache_stats
- *save_cache
linux.gcc:
docker:
- - image: lmmsci/linux.gcc:18.04
+ - image: lmmsci/linux.gcc:16.04
environment:
<<: *common_environment
steps:
@@ -92,7 +130,10 @@ jobs:
- *restore_cache
- run:
name: Configure
- command: mkdir build && cd build && cmake .. $CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=./install
+ command: |
+ source /opt/qt5*/bin/qt5*-env.sh || true
+ mkdir build && cd build
+ cmake .. $CMAKE_OPTS -DCMAKE_INSTALL_PREFIX=./install
- run:
name: Build
command: cd build && make
@@ -125,10 +166,53 @@ jobs:
- run:
name: Shellcheck
command: shellcheck $(find "./cmake/" -type f -name '*.sh' -o -name "*.sh.in")
+ macos:
+ environment:
+ <<: *common_environment
+ macos:
+ xcode: "9.3.1"
+ steps:
+ - checkout
+ - *init
+ - *restore_homebrew_cache
+ - *restore_cache
+ - run:
+ name: Install Homebrew dependencies
+ command: brew update && brew install ccache fftw cmake pkg-config libogg libvorbis lame libsndfile libsamplerate jack sdl libgig libsoundio stk fluid-synth portaudio fltk qt5 carla
+ - run:
+ name: Install nodejs dependencies
+ command: npm install -g appdmg
+ - run:
+ name: Building
+ command: |
+ mkdir build && cd build
+ cmake .. -DCMAKE_INSTALL_PREFIX="../target" -DCMAKE_PREFIX_PATH="$(brew --prefix qt5)" $CMAKE_OPTS -DUSE_WERROR=OFF
+ make
+ - run:
+ name: Build tests
+ command: cd build && make tests
+ - run:
+ name: Run tests
+ command: build/tests/tests
+ - run:
+ name: Build DMG
+ command: |
+ cd build
+ make install
+ make dmg
+ cp ./lmms-*.dmg /tmp/artifacts/
+ - store_artifacts:
+ path: /tmp/artifacts/
+ destination: /
+ - *save_cache
+ - *save_homebrew_cache
+
+
workflows:
version: 2
build-and-test:
jobs:
+ - macos
- mingw32
- mingw64
- linux.gcc
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000000..2c22146ae3f
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,30 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: bug
+assignees: ''
+
+---
+
+# Please search the issue tracker for existing bug reports before submitting your own. Delete this line to confirm no similar report has been posted yet.
+
+### Bug Summary
+
+#### Steps to reproduce
+
+#### Expected behavior
+
+#### Actual behavior
+
+#### Screenshot
+
+#### LMMS version used
+
+#### Logs
+
+ Click to expand
+
+
+
+
diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 00000000000..2c51f276e3d
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1,4 @@
+contact_links:
+- name: Get help on Discord
+ url: https://lmms.io/chat/
+ about: Need help? Have a question? Reach out to other LMMS users on our Discord server!
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 00000000000..f9a0ae1928c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,18 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: enhancement
+assignees: ''
+
+---
+
+# Please search the issue tracker for existing feature requests before submitting your own. Delete this line to confirm no similar request has been posted yet.
+
+### Enhancement Summary
+
+#### Justification
+
+#### Mockup
+
+
diff --git a/.mailmap b/.mailmap
index 71b6697c8b7..14d4754ce87 100644
--- a/.mailmap
+++ b/.mailmap
@@ -29,3 +29,5 @@ grejppi
Johannes Lorenz
Johannes Lorenz <1042576+JohannesLorenz@users.noreply.github.com>
Noah Brecht
+Olivier Humbert
+Hussam al-Homsi Hussam Eddin Alhomsi
diff --git a/.travis.yml b/.travis.yml
index b3cb8aa7c8e..f94aa084609 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,8 +11,6 @@ matrix:
include:
- env: TYPE=style
- os: linux
- - env: TARGET_OS=win32
- - env: TARGET_OS=win64
- env: TARGET_OS=debian-sid TARGET_DEPLOY=True
git:
depth: false
@@ -24,7 +22,7 @@ matrix:
git:
depth: false
- os: osx
- osx_image: xcode8.3
+ osx_image: xcode9.4
before_install:
# appdmg doesn't work with old Node.js
- if [ "$TRAVIS_OS_NAME" = osx ]; then nvm install 10; fi
diff --git a/.travis/script.sh b/.travis/script.sh
index 70391a76261..b723f5dd0e4 100755
--- a/.travis/script.sh
+++ b/.travis/script.sh
@@ -42,5 +42,7 @@ else
fi
echo "Uploading $PACKAGE to transfer.sh..."
- curl --upload-file "$PACKAGE" "https://transfer.sh/$PACKAGE" || true
+ # Limit the connection time to 3 minutes and total upload time to 5 minutes
+ # Otherwise the build may hang
+ curl --connect-timeout 180 --max-time 300 --upload-file "$PACKAGE" "https://transfer.sh/$PACKAGE" || true
fi
diff --git a/CMakeLists.txt b/CMakeLists.txt
index bd9d376e286..2f310d27c17 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -3,6 +3,8 @@ CMAKE_MINIMUM_REQUIRED(VERSION 3.3)
PROJECT(lmms)
SET(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/modules" ${CMAKE_MODULE_PATH})
+SET(LMMS_BINARY_DIR ${CMAKE_BINARY_DIR})
+SET(LMMS_SOURCE_DIR ${CMAKE_SOURCE_DIR})
IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0005 NEW)
@@ -13,8 +15,10 @@ IF(COMMAND CMAKE_POLICY)
CMAKE_POLICY(SET CMP0050 OLD)
ENDIF()
CMAKE_POLICY(SET CMP0020 NEW)
+ CMAKE_POLICY(SET CMP0057 NEW)
ENDIF(COMMAND CMAKE_POLICY)
+INCLUDE(PluginList)
INCLUDE(CheckSubmodules)
INCLUDE(AddFileDependencies)
INCLUDE(CheckIncludeFiles)
@@ -32,7 +36,7 @@ SET(PROJECT_DESCRIPTION "${PROJECT_NAME_UCASE} - Free music production software"
SET(PROJECT_COPYRIGHT "2008-${PROJECT_YEAR} ${PROJECT_AUTHOR}")
SET(VERSION_MAJOR "1")
SET(VERSION_MINOR "2")
-SET(VERSION_RELEASE "0")
+SET(VERSION_RELEASE "1")
SET(VERSION_STAGE "")
SET(VERSION_BUILD "0")
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
@@ -140,7 +144,7 @@ CHECK_INCLUDE_FILES(locale.h LMMS_HAVE_LOCALE_H)
LIST(APPEND CMAKE_PREFIX_PATH "${CMAKE_INSTALL_PREFIX}")
-FIND_PACKAGE(Qt5 COMPONENTS Core Gui Widgets Xml REQUIRED)
+FIND_PACKAGE(Qt5 5.6.0 COMPONENTS Core Gui Widgets Xml REQUIRED)
FIND_PACKAGE(Qt5 COMPONENTS LinguistTools QUIET)
INCLUDE_DIRECTORIES(
@@ -434,9 +438,9 @@ If(WANT_GIG)
ENDIF(WANT_GIG)
# check for pthreads
-IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
+IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
FIND_PACKAGE(Threads)
-ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
+ENDIF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
# check for sndio (roaraudio won't work yet)
IF(WANT_SNDIO)
@@ -565,8 +569,8 @@ ADD_SUBDIRECTORY(tests)
ADD_SUBDIRECTORY(data)
ADD_SUBDIRECTORY(doc)
-# post-install tasks
-ADD_SUBDIRECTORY(cmake/postinstall)
+# install tasks
+ADD_SUBDIRECTORY(cmake/install)
ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz"
COMMAND gzip -c ${CMAKE_SOURCE_DIR}/doc/lmms.1 > ${CMAKE_BINARY_DIR}/lmms.1.gz
@@ -706,4 +710,9 @@ MESSAGE(
"\n\n")
SET(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION "${BIN_DIR}")
+if(MSVC)
+ # We can't set this on the install time according to the configuration
+ SET(CMAKE_INSTALL_DEBUG_LIBRARIES TRUE)
+ SET(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
+endif()
INCLUDE(InstallRequiredSystemLibraries)
diff --git a/cmake/install/CMakeLists.txt b/cmake/install/CMakeLists.txt
new file mode 100644
index 00000000000..a3a81beebda
--- /dev/null
+++ b/cmake/install/CMakeLists.txt
@@ -0,0 +1,41 @@
+SET(PLUGIN_FILES "")
+IF(LMMS_BUILD_WIN32)
+ INSTALL(FILES $ DESTINATION platforms)
+ENDIF()
+
+IF(LMMS_BUILD_WIN32 OR LMMS_INSTALL_DEPENDENCIES)
+ include(InstallTargetDependencies)
+
+ # Collect directories to search for DLLs
+ GET_FILENAME_COMPONENT(QTBIN_DIR "${QT_QMAKE_EXECUTABLE}" PATH)
+ set(LIB_DIRS "${QTBIN_DIR}")
+
+ GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
+
+ IF(LMMS_BUILD_WIN32)
+ SET(LMMS_DEP_DESTINATION ${BIN_DIR})
+ SET(PLUGIN_DEP_DESTINATION ${BIN_DIR})
+ ELSE()
+ SET(LMMS_DEP_DESTINATION ${LIB_DIR})
+ SET(PLUGIN_DEP_DESTINATION ${LIB_DIR})
+ ENDIF()
+
+ INSTALL_TARGET_DEPENDENCIES(
+ NAME "main_binary"
+ TARGETS lmms
+ DESTINATION "${LMMS_DEP_DESTINATION}"
+ LIB_DIRS ${LIB_DIRS}
+ )
+
+ INSTALL_TARGET_DEPENDENCIES(
+ NAME "plugins"
+ TARGETS ${PLUGINS_BUILT}
+ DESTINATION ${PLUGIN_DEP_DESTINATION}
+ LIB_DIRS ${LIB_DIRS} "${PLUGIN_DIR}"
+ )
+ENDIF()
+
+IF(LMMS_BUILD_APPLE)
+ INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x ${CMAKE_BINARY_DIR}/install_apple.sh)")
+ INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/install_apple.sh)")
+ENDIF()
diff --git a/cmake/install/excludelist-win b/cmake/install/excludelist-win
new file mode 100644
index 00000000000..17793a113d9
--- /dev/null
+++ b/cmake/install/excludelist-win
@@ -0,0 +1,23 @@
+# List of DLLs considered to be system libraries.
+# This is needed when cross-compiling for Windows.
+ADVAPI32.dll
+COMCTL32.dll
+comdlg32.dll
+dwmapi.dll
+GDI32.dll
+IMM32.dll
+KERNEL32.dll
+MPR.DLL
+msvcrt.dll
+ole32.dll
+OLEAUT32.dll
+OPENGL32.DLL
+SHELL32.dll
+USER32.dll
+UxTheme.dll
+VERSION.dll
+WINMM.DLL
+WS2_32.dll
+RPCRT4.dll
+dsound.dll
+SETUPAPI.dll
diff --git a/cmake/linux/lmms.desktop b/cmake/linux/lmms.desktop
index 72a82da1724..d6a05d15f52 100644
--- a/cmake/linux/lmms.desktop
+++ b/cmake/linux/lmms.desktop
@@ -3,11 +3,11 @@ Name=LMMS
GenericName=Music production suite
GenericName[ca]=Programari de producció musical
GenericName[de]=Software zur Musik-Produktion
-GenericName[fr]=Ensemble pour la production musicale
+GenericName[fr]=Suite de production musicale
GenericName[pl]=Narzędzia do produkcji muzyki
Comment=Music sequencer and synthesizer
Comment[ca]=Producció fàcil de música per a tothom!
-Comment[fr]=Production facile de musique pour tout le monde !
+Comment[fr]=Séquenceur et synthétiseur de musique
Comment[pl]=Prosta produkcja muzyki dla każdego!
Icon=lmms
Exec=lmms %f
diff --git a/cmake/linux/package_linux.sh.in b/cmake/linux/package_linux.sh.in
index 0dec715f480..9f233d4017b 100644
--- a/cmake/linux/package_linux.sh.in
+++ b/cmake/linux/package_linux.sh.in
@@ -103,7 +103,7 @@ mv "${APPDIR}usr/bin/lmms" "${APPDIR}usr/bin/lmms.real"
cat >"${APPDIR}usr/bin/lmms" < /dev/null 2>&1; then
CARLAPATH="\$(which carla)"
CARLAPREFIX="\${CARLAPATH%/bin*}"
@@ -175,10 +175,9 @@ executables="${executables} -executable=${APPDIR}usr/lib/lmms/ladspa/pitch_scale
# Bundle both qt and non-qt dependencies into appimage format
echo -e "\nBundling and relinking system dependencies..."
echo -e ">>>>> linuxdeployqt" > "$LOGFILE"
-# FIXME: -unsupported-allow-new-glibc may result in an AppImage which is unusable on old systems.
# shellcheck disable=SC2086
-"$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -unsupported-allow-new-glibc -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP >> "$LOGFILE" 2>&1
+"$LINUXDEPLOYQT" "$DESKTOPFILE" $executables -bundle-non-qt-libs -verbose=$VERBOSITY $STRIP >> "$LOGFILE" 2>&1
success "Bundled and relinked dependencies"
# Link to original location so lmms can find them
diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake
index efa3e5b468e..675433e631b 100644
--- a/cmake/modules/BuildPlugin.cmake
+++ b/cmake/modules/BuildPlugin.cmake
@@ -62,7 +62,10 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
TARGET_LINK_LIBRARIES(${PLUGIN_NAME} lmms)
ENDIF(LMMS_BUILD_WIN32)
- INSTALL(TARGETS ${PLUGIN_NAME} DESTINATION "${PLUGIN_DIR}")
+ INSTALL(TARGETS ${PLUGIN_NAME}
+ LIBRARY DESTINATION "${PLUGIN_DIR}"
+ RUNTIME DESTINATION "${PLUGIN_DIR}"
+ )
IF(LMMS_BUILD_APPLE)
IF ("${PLUGIN_LINK}" STREQUAL "SHARED")
@@ -72,9 +75,11 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
ENDIF()
ADD_DEPENDENCIES(${PLUGIN_NAME} lmms)
ENDIF(LMMS_BUILD_APPLE)
- IF(LMMS_BUILD_WIN32 AND STRIP)
+ IF(LMMS_BUILD_WIN32)
+ IF(STRIP)
+ ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} "$")
+ ENDIF()
SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "")
- ADD_CUSTOM_COMMAND(TARGET ${PLUGIN_NAME} POST_BUILD COMMAND ${STRIP} "$")
ENDIF()
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${RCC_OUT} ${plugin_MOC_out}")
@@ -89,5 +94,8 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME)
TARGET_INCLUDE_DIRECTORIES(${PLUGIN_NAME}
PUBLIC $
)
+
+ SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT ${PLUGIN_NAME})
+ GET_PROPERTY(PLUGINS_BUILT GLOBAL PROPERTY PLUGINS_BUILT)
ENDMACRO(BUILD_PLUGIN)
diff --git a/cmake/modules/CheckSubmodules.cmake b/cmake/modules/CheckSubmodules.cmake
index 65e5be08bf9..32a2f995181 100644
--- a/cmake/modules/CheckSubmodules.cmake
+++ b/cmake/modules/CheckSubmodules.cmake
@@ -7,12 +7,12 @@
# INCLUDE(CheckSubmodules)
#
# Options:
-# SET(SKIP_SUBMODULES "foo;bar")
+# SET(PLUGIN_LIST "zynaddsubfx;...") # skips submodules for plugins not explicitely listed
#
# Or via command line:
-# cmake -DSKIP_SUBMODULES=foo;bar
+# cmake -PLUGIN_LIST=foo;bar
#
-# Copyright (c) 2017, Tres Finocchiaro,
+# Copyright (c) 2019, Tres Finocchiaro,
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
@@ -20,13 +20,15 @@
# Files which confirm a successful clone
SET(VALID_CRUMBS "CMakeLists.txt;Makefile;Makefile.in;Makefile.am;configure.ac;configure.py;autogen.sh;.gitignore;LICENSE;Home.md")
+OPTION(NO_SHALLOW_CLONE "Disable shallow cloning of submodules" OFF)
+
# Try and use the specified shallow clone on submodules, if supported
SET(DEPTH_VALUE 100)
# Number of times git commands will retry before failing
SET(MAX_ATTEMPTS 2)
-MESSAGE("\nValidating submodules...")
+MESSAGE("\nChecking submodules...")
IF(NOT EXISTS "${CMAKE_SOURCE_DIR}/.gitmodules")
MESSAGE("Skipping the check because .gitmodules not detected."
"Please make sure you have all submodules in the source tree!"
@@ -41,74 +43,112 @@ SET(LANG_BACKUP "$ENV{LANG}")
SET(ENV{LC_ALL} "C")
SET(ENV{LANG} "en_US")
-# Assume alpha-numeric paths
-STRING(REGEX MATCHALL "path = [-0-9A-Za-z/]+" SUBMODULE_LIST ${SUBMODULE_DATA})
-STRING(REGEX MATCHALL "url = [.:%-0-9A-Za-z/]+" SUBMODULE_URL_LIST ${SUBMODULE_DATA})
+# Submodule list pairs, unparsed (WARNING: Assumes alpha-numeric paths)
+STRING(REGEX MATCHALL "path = [-0-9A-Za-z/]+" SUBMODULE_LIST_RAW ${SUBMODULE_DATA})
+STRING(REGEX MATCHALL "url = [.:%-0-9A-Za-z/]+" SUBMODULE_URL_RAW ${SUBMODULE_DATA})
+
+# Submodule list pairs, parsed
+SET(SUBMODULE_LIST "")
+SET(SUBMODULE_URL "")
-FOREACH(_part ${SUBMODULE_LIST})
- STRING(REPLACE "path = " "" SUBMODULE_PATH ${_part})
+FOREACH(_path ${SUBMODULE_LIST_RAW})
+ # Parse SUBMODULE_PATH
+ STRING(REPLACE "path = " "" SUBMODULE_PATH "${_path}")
- LIST(FIND SUBMODULE_LIST ${_part} SUBMODULE_INDEX)
- LIST(GET SUBMODULE_URL_LIST ${SUBMODULE_INDEX} _url)
- STRING(REPLACE "url = " "" SUBMODULE_URL ${_url})
+ # Grab index for matching SUBMODULE_URL
+ LIST(FIND SUBMODULE_LIST_RAW "${_path}" SUBMODULE_INDEX)
+ LIST(GET SUBMODULE_URL_RAW ${SUBMODULE_INDEX} _url)
+
+ # Parse SUBMODULE_URL
+ STRING(REPLACE "url = " "" SUBMODULE_URL "${_url}")
- # Remove submodules from validation as specified in -DSKIP_SUBMODULES=foo;bar
SET(SKIP false)
+
+ # Loop over skipped plugins, add to SKIP_SUBMODULES (e.g. -DPLUGIN_LIST=foo;bar)
+ IF(${SUBMODULE_PATH} MATCHES "^plugins/")
+ SET(REMOVE_PLUGIN true)
+ FOREACH(_plugin ${PLUGIN_LIST})
+ IF(_plugin STREQUAL "")
+ CONTINUE()
+ ENDIF()
+ IF(${SUBMODULE_PATH} MATCHES "${_plugin}")
+ SET(REMOVE_PLUGIN false)
+ ENDIF()
+ ENDFOREACH()
+
+ IF(REMOVE_PLUGIN)
+ LIST(APPEND SKIP_SUBMODULES "${SUBMODULE_PATH}")
+ ENDIF()
+ ENDIF()
+
+ # Finally, loop and mark "SKIP" on match
IF(SKIP_SUBMODULES)
FOREACH(_skip ${SKIP_SUBMODULES})
- IF(${SUBMODULE_PATH} MATCHES ${_skip})
- MESSAGE("-- Skipping ${SUBMODULE_PATH} matches \"${_skip}\"")
+ IF("${SUBMODULE_PATH}" MATCHES "${_skip}")
+ MESSAGE("-- Skipping ${SUBMODULE_PATH} matches \"${_skip}\" (absent in PLUGIN_LIST)")
SET(SKIP true)
+ BREAK()
ENDIF()
ENDFOREACH()
ENDIF()
+
IF(NOT SKIP)
- LIST(INSERT SUBMODULE_LIST ${SUBMODULE_INDEX} ${SUBMODULE_PATH})
- LIST(INSERT SUBMODULE_URL_LIST ${SUBMODULE_INDEX} ${SUBMODULE_URL})
+ LIST(APPEND SUBMODULE_LIST "${SUBMODULE_PATH}")
+ LIST(APPEND SUBMODULE_URL "${SUBMODULE_URL}")
ENDIF()
- LIST(REMOVE_ITEM SUBMODULE_LIST ${_part})
- LIST(REMOVE_ITEM SUBMODULE_URL_LIST ${_url})
ENDFOREACH()
-
# Once called, status is stored in GIT_RESULT respectively.
# Note: Git likes to write to stderr. Don't assume stderr is error; Check GIT_RESULT instead.
-MACRO(GIT_SUBMODULE SUBMODULE_PATH FORCE_DEINIT FORCE_REMOTE)
+MACRO(GIT_SUBMODULE SUBMODULE_PATH FORCE_DEINIT FORCE_REMOTE FULL_CLONE)
FIND_PACKAGE(Git REQUIRED)
# Handle missing commits
SET(FORCE_REMOTE_FLAG "${FORCE_REMOTE}")
+ SET(FULL_CLONE_FLAG "${FULL_CLONE}")
IF(FORCE_REMOTE_FLAG)
MESSAGE("-- Adding remote submodulefix to ${SUBMODULE_PATH}")
EXECUTE_PROCESS(
- COMMAND ${GIT_EXECUTABLE} remote rm submodulefix
- COMMAND ${GIT_EXECUTABLE} remote add submodulefix ${FORCE_REMOTE}
- COMMAND ${GIT_EXECUTABLE} fetch submodulefix
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}
+ COMMAND "${GIT_EXECUTABLE}" remote rm submodulefix
+ COMMAND "${GIT_EXECUTABLE}" remote add submodulefix ${FORCE_REMOTE}
+ COMMAND "${GIT_EXECUTABLE}" fetch submodulefix
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
OUTPUT_QUIET ERROR_QUIET
)
# Recurse
- GIT_SUBMODULE(${SUBMODULE_PATH} false false)
+ GIT_SUBMODULE(${SUBMODULE_PATH} false false ${FULL_CLONE_FLAG})
ELSEIF(${FORCE_DEINIT})
MESSAGE("-- Resetting ${SUBMODULE_PATH}")
EXECUTE_PROCESS(
- COMMAND ${GIT_EXECUTABLE} submodule deinit -f ${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND "${GIT_EXECUTABLE}" submodule deinit -f "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
OUTPUT_QUIET
)
+ MESSAGE("-- Deleting ${CMAKE_SOURCE_DIR}/.git/${SUBMODULE_PATH}")
+ FILE(REMOVE_RECURSE "${CMAKE_SOURCE_DIR}/.git/modules/${SUBMODULE_PATH}")
# Recurse
- GIT_SUBMODULE(${SUBMODULE_PATH} false false)
+ GIT_SUBMODULE(${SUBMODULE_PATH} false false true)
ELSE()
# Try to use the depth switch
- SET(DEPTH_CMD "")
+ IF(NO_SHALLOW_CLONE OR GIT_VERSION_STRING VERSION_LESS "1.8.4")
+ # Shallow submodules were introduced in 1.8.4
+ MESSAGE("-- Fetching ${SUBMODULE_PATH}")
+ SET(DEPTH_CMD "")
+ SET(DEPTH_VAL "")
+ ELSEIF(FULL_CLONE_FLAG)
+ # Depth doesn't revert easily... It should be "--no-recommend-shallow"
+ # but it's ignored by nested submodules, use the highest value instead.
MESSAGE("-- Fetching ${SUBMODULE_PATH}")
- IF(DEPTH_VALUE)
- SET(DEPTH_CMD "--depth" )
+ SET(DEPTH_CMD "--depth")
+ SET(DEPTH_VAL "2147483647")
+ ELSE()
MESSAGE("-- Fetching ${SUBMODULE_PATH} @ --depth ${DEPTH_VALUE}")
+ SET(DEPTH_CMD "--depth")
+ SET(DEPTH_VAL "${DEPTH_VALUE}")
ENDIF()
EXECUTE_PROCESS(
- COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive ${DEPTH_CMD} ${DEPTH_VALUE} ${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}
- WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
+ COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive ${DEPTH_CMD} ${DEPTH_VAL} "${CMAKE_SOURCE_DIR}/${SUBMODULE_PATH}"
+ WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE GIT_RESULT
OUTPUT_VARIABLE GIT_STDOUT
ERROR_VARIABLE GIT_STDERR
@@ -124,7 +164,7 @@ SET(RETRY_PHRASES "Failed to recurse;cannot create directory;already exists;${MI
# Attempt to do lazy clone
FOREACH(_submodule ${SUBMODULE_LIST})
- STRING(REPLACE "/" ";" PATH_PARTS ${_submodule})
+ STRING(REPLACE "/" ";" PATH_PARTS "${_submodule}")
LIST(REVERSE PATH_PARTS)
LIST(GET PATH_PARTS 0 SUBMODULE_NAME)
@@ -138,14 +178,12 @@ FOREACH(_submodule ${SUBMODULE_LIST})
ENDIF()
ENDFOREACH()
IF(NOT CRUMB_FOUND)
- GIT_SUBMODULE(${_submodule} false false)
+ GIT_SUBMODULE("${_submodule}" false false false)
SET(COUNTED 0)
- SET(COUNTING "")
# Handle edge-cases where submodule didn't clone properly or re-uses a non-empty directory
WHILE(NOT GIT_RESULT EQUAL 0 AND COUNTED LESS MAX_ATTEMPTS)
- LIST(APPEND COUNTING "x")
- LIST(LENGTH COUNTING COUNTED)
+ MATH(EXPR COUNTED "${COUNTED}+1")
SET(MISSING_COMMIT false)
FOREACH(_phrase ${MISSING_COMMIT_PHRASES})
IF("${GIT_MESSAGE}" MATCHES "${_phrase}")
@@ -154,25 +192,22 @@ FOREACH(_submodule ${SUBMODULE_LIST})
ENDIF()
ENDFOREACH()
FOREACH(_phrase ${RETRY_PHRASES})
- IF(${MISSING_COMMIT})
+ IF(${MISSING_COMMIT} AND COUNTED LESS 2)
LIST(FIND SUBMODULE_LIST ${_submodule} SUBMODULE_INDEX)
LIST(GET SUBMODULE_URL_LIST ${SUBMODULE_INDEX} SUBMODULE_URL)
MESSAGE("-- Retrying ${_submodule} using 'remote add submodulefix' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
- GIT_SUBMODULE(${_submodule} false "${SUBMODULE_URL}")
+ GIT_SUBMODULE("${_submodule}" false "${SUBMODULE_URL}" false)
BREAK()
ELSEIF("${GIT_MESSAGE}" MATCHES "${_phrase}")
MESSAGE("-- Retrying ${_submodule} using 'deinit' (attempt ${COUNTED} of ${MAX_ATTEMPTS})...")
-
- # Shallow submodules were introduced in 1.8.4
- # Shallow commits can fail to clone from non-default branches, only try once
- IF(GIT_VERSION_STRING VERSION_GREATER "1.8.3" AND COUNTED LESS 2)
- # Try a shallow submodule clone
+ IF(COUNTED LESS 2)
+ SET(FULL_CLONE false)
ELSE()
- UNSET(DEPTH_VALUE)
+ SET(FULL_CLONE true)
ENDIF()
- GIT_SUBMODULE(${_submodule} true false)
+ GIT_SUBMODULE("${_submodule}" true false ${FULL_CLONE})
BREAK()
ENDIF()
ENDFOREACH()
diff --git a/cmake/modules/CreateTempFile.cmake b/cmake/modules/CreateTempFile.cmake
new file mode 100644
index 00000000000..5210342ac0d
--- /dev/null
+++ b/cmake/modules/CreateTempFile.cmake
@@ -0,0 +1,21 @@
+function(CreateTempFilePath)
+ set(options CONFIG_SUFFIX)
+ set(oneValueArgs OUTPUT_VAR TAG)
+ set(multiValueArgs CONTENT)
+ cmake_parse_arguments(TEMP "${options}" "${oneValueArgs}"
+ "${multiValueArgs}" ${ARGN} )
+
+ # Use hash to create a unique identifier
+ # for this file.
+ string(SHA1 hashed_content "${TEMP_CONTENT}")
+
+ set(file_name "${CMAKE_BINARY_DIR}/${TEMP_TAG}_${hashed_content}")
+ set(${TEMP_OUTPUT_VAR} "${file_name}" PARENT_SCOPE)
+ if(CONFIG_SUFFIX)
+ set(file_name "${file_name}_$")
+ endif()
+
+ file(GENERATE OUTPUT "${file_name}"
+ CONTENT "${TEMP_CONTENT}")
+
+endfunction()
diff --git a/cmake/modules/DefineInstallVar.cmake b/cmake/modules/DefineInstallVar.cmake
new file mode 100644
index 00000000000..b13cb1d52b3
--- /dev/null
+++ b/cmake/modules/DefineInstallVar.cmake
@@ -0,0 +1,31 @@
+# This functions forwards a variable to
+# the install stage.
+# Parameters:
+# CONTENT: Variable content.
+# NAME: Variable name.
+# Options:
+# GENERATOR_EXPRESSION: Support generator expression for CONTENT.
+function(DEFINE_INSTALL_VAR)
+ set(options GENERATOR_EXPRESSION)
+ set(oneValueArgs NAME )
+ set(multiValueArgs CONTENT)
+ cmake_parse_arguments(VAR "${options}" "${oneValueArgs}"
+ "${multiValueArgs}" ${ARGN} )
+
+ # install(CODE) does not support generator expression in ver<3.14
+ if(VAR_GENERATOR_EXPRESSION AND ${CMAKE_VERSION} VERSION_LESS "3.14.0")
+ include(CreateTempFile)
+ if(CMAKE_CONFIGURATION_TYPES) # in case of multi-config generators like MSVC generators
+ CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}" CONFIG_SUFFIX)
+ install(CODE "file(READ \"${file_path}_\${CMAKE_INSTALL_CONFIG_NAME}\" \"${VAR_NAME}\")")
+ else()
+ CreateTempFilePath(OUTPUT_VAR file_path TAG "${VAR_NAME}" CONTENT "${VAR_CONTENT}")
+ install(CODE "file(READ \"${file_path}\" \"${VAR_NAME}\")")
+ endif()
+ else()
+ if(VAR_GENERATOR_EXPRESSION)
+ cmake_policy(SET CMP0087 NEW)
+ endif()
+ install(CODE "set(\"${VAR_NAME}\" \"${VAR_CONTENT}\")")
+ endif()
+endfunction()
diff --git a/cmake/modules/DetectMachine.cmake b/cmake/modules/DetectMachine.cmake
index f3458165b3d..86807b7573c 100644
--- a/cmake/modules/DetectMachine.cmake
+++ b/cmake/modules/DetectMachine.cmake
@@ -4,6 +4,8 @@ ELSEIF(APPLE)
SET(LMMS_BUILD_APPLE 1)
ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "OpenBSD")
SET(LMMS_BUILD_OPENBSD 1)
+ELSEIF(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
+ SET(LMMS_BUILD_FREEBSD 1)
ELSEIF(HAIKU)
SET(LMMS_BUILD_HAIKU 1)
ELSE()
@@ -30,6 +32,25 @@ IF(WIN32)
ELSE(WIN64)
SET(IS_X86 TRUE)
ENDIF(WIN64)
+
+ if(MSVC)
+ SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
+
+ IF(MSVC_VER VERSION_GREATER 19.20 OR MSVC_VER VERSION_EQUAL 19.20)
+ SET(LMMS_MSVC_GENERATOR "Visual Studio 16 2019")
+ SET(LMMS_MSVC_YEAR 2019) # Qt only provides binaries for MSVC 2017, but 2019 is binary compatible
+ ELSEIF(MSVC_VER VERSION_GREATER 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
+ SET(LMMS_MSVC_GENERATOR "Visual Studio 15 2017")
+ SET(LMMS_MSVC_YEAR 2017)
+ ELSEIF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
+ SET(LMMS_MSVC_GENERATOR "Visual Studio 14 2015")
+ SET(LMMS_MSVC_YEAR 2015)
+ ELSE()
+ MESSAGE(SEND_WARNING "Can't detect MSVC version: ${MSVC_VER}")
+ ENDIF()
+
+ unset(MSVC_VER)
+ endif()
ELSE(WIN32)
EXEC_PROGRAM( ${CMAKE_C_COMPILER} ARGS "-dumpmachine ${CMAKE_C_FLAGS}" OUTPUT_VARIABLE Machine )
MESSAGE("Machine: ${Machine}")
diff --git a/cmake/modules/InstallDependencies.cmake b/cmake/modules/InstallDependencies.cmake
new file mode 100644
index 00000000000..791041bb24a
--- /dev/null
+++ b/cmake/modules/InstallDependencies.cmake
@@ -0,0 +1,184 @@
+include(GetPrerequisites)
+include(CMakeParseArguments)
+
+CMAKE_POLICY(SET CMP0011 NEW)
+CMAKE_POLICY(SET CMP0057 NEW)
+
+function(make_absolute var)
+ get_filename_component(abs "${${var}}" ABSOLUTE BASE_DIR "${CMAKE_INSTALL_PREFIX}")
+ set(${var} ${abs} PARENT_SCOPE)
+endfunction()
+
+# Reads lines of a file into a list, skipping '#' comment lines
+function(READ_LIST_FILE FILE VAR)
+ file(STRINGS "${FILE}" list)
+
+ set(result "")
+ foreach(item ${list})
+ string(STRIP "${item}" item)
+ if(item STREQUAL "" OR item MATCHES "^\#")
+ continue()
+ endif()
+ list(APPEND result "${item}")
+ endforeach()
+
+ set(${VAR} ${result} PARENT_SCOPE)
+endfunction()
+
+function(make_all_absolute list_var)
+ set(result "")
+ foreach(file ${${list_var}})
+ make_absolute(file)
+ list(APPEND result ${file})
+ endforeach()
+ set(${list_var} ${result} PARENT_SCOPE)
+endfunction()
+
+if(CMAKE_BINARY_DIR)
+ set(tmp_lib_dir "${CMAKE_BINARY_DIR}/bundled-libraries")
+elseif(CMAKE_HOST_UNIX)
+ set(tmp_lib_dir "/tmp/bundled-libraries")
+elseif(DEFINED ENV{TEMP})
+ set(tmp_lib_dir "$ENV{TMP}/bundled-libraries")
+else()
+ message(FATAL_ERROR "Can't find a temp dir for libraries")
+endif()
+
+# Like file(INSTALL), but resolves symlinks
+function(install_file_resolved file destination)
+
+ get_filename_component(file_name "${file}" NAME)
+ if(IS_SYMLINK "${file}")
+ get_filename_component(real_path "${file}" REALPATH)
+ get_filename_component(real_name "${real_path}" NAME)
+ file(COPY "${real_path}" DESTINATION "${tmp_lib_dir}")
+ file(RENAME "${tmp_lib_dir}/${real_name}" "${tmp_lib_dir}/${file_name}")
+ set(file_path "${tmp_lib_dir}/${file_name}")
+ else()
+ set(file_path "${file}")
+ endif()
+
+ file(INSTALL "${file_path}" DESTINATION "${destination}")
+endfunction()
+
+function(install_resolved)
+ cmake_parse_arguments("" "" "DESTINATION" "FILES" ${ARGN})
+ foreach(file ${_FILES})
+ install_file_resolved("${file}" "${_DESTINATION}")
+ endforeach()
+endfunction()
+
+if(CMAKE_CROSSCOMPILING)
+ # If we're cross-compiling, GetPrerequisites may not be able to find system libraries such as kernel32.dll because
+ # they're supplied by the toolchain. To suppress thousands of lines of warnings being printed to the console, we
+ # override gp_resolved_file_type to return "system" for any library in ${IGNORE_LIBS} without trying to resolve the
+ # file first.
+ # GetPrerequisites supports using an override function called gp_resolved_file_type_override, but it's not suited
+ # for our purpose because it's only called by gp_resolved_file_type *after* trying to resolve the file.
+ function(gp_resolved_file_type original_file file exepath dirs type_var)
+ set(file_find "${file}")
+ if(_IGNORE_CASE)
+ # On case-insensitive systems, convert to upper characters to respect it
+ string(TOUPPER "${file_find}" file_find)
+ endif()
+ SET(IGNORE_LIBS ${_IGNORE_LIBS} CACHE INTERNAL "Ignored library names" FORCE)
+ if(IGNORE_LIBS AND ${file_find} IN_LIST IGNORE_LIBS)
+ set(${type_var} system PARENT_SCOPE)
+ else()
+ #_gp_resolved_file_type(${ARGV})
+ _gp_resolved_file_type("${original_file}" "${file}" "${exepath}" "${dirs}" "${type_var}" ${ARGN})
+ endif()
+ endfunction()
+endif()
+
+function(INSTALL_DEPENDENCIES)
+ cmake_parse_arguments("" "INCLUDE_SYSTEM;IGNORE_CASE" "GP_TOOL;DESTINATION;IGNORE_LIBS_FILE" "FILES;LIB_DIRS;SEARCH_PATHS;IGNORE_LIBS" ${ARGN})
+
+ # Make paths absolute
+ make_absolute(_DESTINATION)
+ make_all_absolute(_FILES)
+ make_all_absolute(_LIB_DIRS)
+ make_all_absolute(_SEARCH_PATHS)
+
+ if(_INCLUDE_SYSTEM)
+ set(EXCLUDE_SYSTEM 0)
+ else()
+ set(EXCLUDE_SYSTEM 1)
+ endif()
+
+ if(_IGNORE_LIBS_FILE)
+ READ_LIST_FILE("${_IGNORE_LIBS_FILE}" _IGNORE_LIBS)
+ if(_IGNORE_CASE)
+ # On case-insensitive systems, convert to upper characters to respect it
+ string(TOUPPER "${_IGNORE_LIBS}" _IGNORE_LIBS)
+ endif()
+ SET(IGNORE_LIBS ${_IGNORE_LIBS} CACHE INTERNAL "Ignored library names" FORCE)
+ endif()
+
+ if(_GP_TOOL)
+ set(gp_tool "${_GP_TOOL}")
+ endif()
+
+ set(prereqs "")
+ foreach(file ${_FILES})
+ get_filename_component(file_name "${file}" NAME)
+ message("-- Finding prerequisites of ${file_name}")
+ find_prerequisites("${file}" _prereqs
+ ${EXCLUDE_SYSTEM} # exclude system files
+ 1 # recurse
+ ""
+ "${_LIB_DIRS}"
+ "${_SEARCH_PATHS}"
+ "${_IGNORE_LIBS}"
+ )
+
+ list(APPEND prereqs ${_prereqs})
+ endforeach()
+
+ list(REMOVE_DUPLICATES prereqs)
+
+ foreach(prereq ${prereqs})
+ get_filename_component(prereq_name "${prereq}" NAME)
+
+ foreach(rpath ${_SEARCH_PATHS})
+ if(EXISTS "${rpath}/${prereq_name}")
+ list(REMOVE_ITEM prereqs "${prereq}")
+ break()
+ endif()
+ endforeach()
+ endforeach()
+
+ #file(INSTALL ${prereqs} DESTINATION ${_DESTINATION})
+ install_resolved(FILES ${prereqs} DESTINATION "${_DESTINATION}")
+endfunction()
+
+# Like get_prerequisites, but returns full paths
+function(FIND_PREREQUISITES target RESULT_VAR exclude_system recurse
+ exepath dirs rpaths)
+ set(RESULTS)
+
+ get_prerequisites("${target}" _prereqs ${exclude_system} ${recurse}
+ "" "${dirs}" "${rpaths}")
+
+ foreach(prereq ${_prereqs})
+ get_filename_component(prereq_name "${prereq}" NAME)
+ if(_IGNORE_CASE)
+ # Windows is case insensitive.
+ # Use upper characters to respect it.
+ string(TOUPPER "${prereq_name}" prereq_name)
+ endif()
+ if("${prereq_name}" IN_LIST IGNORE_LIBS)
+ continue()
+ endif()
+
+ gp_resolve_item("${LIB_DLL}" "${prereq}" "" "${dirs}" RESOLVED_PREREQ "${rpaths}")
+
+ if(RESOLVED_PREREQ AND IS_ABSOLUTE ${RESOLVED_PREREQ} AND EXISTS ${RESOLVED_PREREQ})
+ list(APPEND RESULTS ${RESOLVED_PREREQ})
+ else()
+ message(FATAL_ERROR "Can't resolve dependency ${prereq}.")
+ endif()
+ endforeach()
+
+ set(${RESULT_VAR} ${RESULTS} PARENT_SCOPE)
+endfunction()
diff --git a/cmake/modules/InstallTargetDependencies.cmake b/cmake/modules/InstallTargetDependencies.cmake
new file mode 100644
index 00000000000..9665a0b8715
--- /dev/null
+++ b/cmake/modules/InstallTargetDependencies.cmake
@@ -0,0 +1,89 @@
+include(DefineInstallVar)
+
+SET(DEFAULT_SEARCH_DIRECTORIES "${BIN_DIR}" "${LIB_DIR}" "${CMAKE_FIND_ROOT_PATH}" "${CMAKE_PREFIX_PATH}")
+SET(DEFAULT_SEARCH_SUFFIXES "bin" "lib" "../bin")
+
+# Like INSTALL_DEPENDENCIES but can be called from regular cmake code
+# (instead of install(CODE)), takes targets instead of files,
+# takes care of configuring search paths, and other platform-specific tweaks.
+# Arguments:
+# TARGETS: list of cmake targets to install.
+# NAME: unique string for this install.
+# DESTINATION: directory path to install the binaries to.
+# LIB_DIRS: list of paths for looking up dependencies.
+# LIB_DIRS_SUFFIXES: list of possible suffixes for LIB_DIRS entries.
+# NO_DEFAULT_PATHS: supply this value to avoid adding DEFAULT_SEARCH_DIRECTORIES
+# to LIB_DIRS and DEFAULT_SEARCH_SUFFIXES to LIB_DIRS_SUFFIXES.
+FUNCTION(INSTALL_TARGET_DEPENDENCIES)
+ set(options NO_DEFAULT_PATHS)
+ set(oneValueArgs NAME)
+ set(multiValueArgs TARGETS DESTINATION LIB_DIRS_SUFFIXES LIB_DIRS)
+ cmake_parse_arguments(DEPS "${options}" "${oneValueArgs}"
+ "${multiValueArgs}" ${ARGN} )
+
+ if(NOT DEPS_LIB_DIRS)
+ set(DEPS_LIB_DIRS "")
+ endif()
+
+ # Set default values.
+ if(NOT DEPS_NO_DEFAULT_PATHS)
+ list(APPEND DEPS_LIB_DIRS ${DEFAULT_SEARCH_DIRECTORIES})
+ set(DEPS_LIB_DIRS_SUFFIXES "${DEPS_LIB_DIRS_SUFFIXES}" ${DEFAULT_SEARCH_SUFFIXES})
+ endif()
+
+ FOREACH(TARGET ${DEPS_TARGETS})
+ IF(NOT TARGET ${TARGET})
+ message(FATAL_ERROR "Not a target: ${TARGET}")
+ ENDIF()
+
+ # Collect target output files.
+ LIST(APPEND DEPLOY_TARGETS "$")
+
+ # Collect target link directories
+ get_target_property(target_libs ${TARGET} LINK_LIBRARIES)
+
+ foreach(lib ${target_libs})
+ if(TARGET ${lib} OR NOT IS_ABSOLUTE ${lib})
+ continue()
+ endif()
+
+ get_filename_component(lib_dir ${lib} PATH)
+ list(APPEND DEPS_LIB_DIRS ${lib_dir})
+ endforeach()
+ ENDFOREACH()
+
+ LIST(APPEND DEPS_LIB_DIRS ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES})
+
+ FOREACH(LIB_PATH ${DEPS_LIB_DIRS})
+ FOREACH(suffix ${DEPS_LIB_DIRS_SUFFIXES})
+ list(APPEND DEPS_LIB_DIRS "${LIB_PATH}/${suffix}")
+ ENDFOREACH()
+ ENDFOREACH()
+
+ DEFINE_INSTALL_VAR(NAME "DEPLOY_FILES" CONTENT "${DEPLOY_TARGETS}" GENERATOR_EXPRESSION)
+
+ LIST(REMOVE_DUPLICATES DEPS_LIB_DIRS)
+
+ IF(LMMS_BUILD_LINUX)
+ FILE(DOWNLOAD "https://raw.githubusercontent.com/AppImage/AppImages/master/excludelist"
+ "${CMAKE_BINARY_DIR}/excludelist")
+ SET(additional_args INCLUDE_SYSTEM IGNORE_LIBS_FILE ${CMAKE_BINARY_DIR}/excludelist)
+ ELSEIF(LMMS_BUILD_WIN32)
+ SET(additional_args IGNORE_CASE IGNORE_LIBS_FILE "${LMMS_SOURCE_DIR}/cmake/install/excludelist-win")
+ IF(CMAKE_CROSSCOMPILING)
+ SET(additional_args "${additional_args}" GP_TOOL objdump)
+ ENDIF()
+ ENDIF()
+
+ INSTALL(CODE "
+ INCLUDE(\"${LMMS_SOURCE_DIR}/cmake/modules/InstallDependencies.cmake\")
+
+ INSTALL_DEPENDENCIES(
+ FILES \"\${DEPLOY_FILES}\"
+ DESTINATION \"${DEPS_DESTINATION}\"
+ LIB_DIRS \"${DEPS_LIB_DIRS}\"
+ SEARCH_PATHS \"${DEPS_SEARCH_PATHS}\"
+ ${additional_args}
+ )
+ ")
+ENDFUNCTION()
diff --git a/cmake/modules/PluginList.cmake b/cmake/modules/PluginList.cmake
new file mode 100644
index 00000000000..c82bba3291a
--- /dev/null
+++ b/cmake/modules/PluginList.cmake
@@ -0,0 +1,104 @@
+# Provides a fast mechanism for filtering the plugins used at build-time
+SET(PLUGIN_LIST "" CACHE STRING "List of plug-ins to build")
+STRING(REPLACE " " ";" PLUGIN_LIST "${PLUGIN_LIST}")
+OPTION(LMMS_MINIMAL "Build a minimal list of plug-ins" OFF)
+OPTION(LIST_PLUGINS "Lists the available plugins for building" OFF)
+
+SET(MINIMAL_LIST
+ audio_file_processor
+ kicker
+ triple_oscillator
+)
+
+IF(LMMS_MINIMAL)
+ IF("${PLUGIN_LIST}" STREQUAL "")
+ STRING(REPLACE ";" " " MINIMAL_LIST_STRING "${MINIMAL_LIST}")
+ MESSAGE(
+"-- Using minimal plug-ins: ${MINIMAL_LIST_STRING}\n"
+" Note: You can specify specific plug-ins using -DPLUGIN_LIST=\"foo bar\""
+ )
+ ENDIF()
+ SET(PLUGIN_LIST ${MINIMAL_LIST} ${PLUGIN_LIST})
+ENDIF()
+
+SET(LMMS_PLUGIN_LIST
+ ${MINIMAL_LIST}
+ Amplifier
+ BassBooster
+ bit_invader
+ Bitcrush
+ carlabase
+ carlapatchbay
+ carlarack
+ CrossoverEQ
+ Delay
+ DualFilter
+ dynamics_processor
+ Eq
+ Flanger
+ HydrogenImport
+ ladspa_browser
+ LadspaEffect
+ lb302
+ MidiImport
+ MidiExport
+ MultitapEcho
+ monstro
+ nes
+ OpulenZ
+ organic
+ FreeBoy
+ patman
+ peak_controller_effect
+ GigPlayer
+ ReverbSC
+ sf2_player
+ sfxr
+ sid
+ SpectrumAnalyzer
+ stereo_enhancer
+ stereo_matrix
+ stk
+ vst_base
+ vestige
+ VstEffect
+ watsyn
+ waveshaper
+ vibed
+ Xpressive
+ zynaddsubfx
+)
+
+IF("${PLUGIN_LIST}" STREQUAL "")
+ SET(PLUGIN_LIST ${LMMS_PLUGIN_LIST})
+ENDIF()
+
+MACRO(LIST_ALL_PLUGINS)
+ MESSAGE("\n\nAll possible -DPLUGIN_LIST values")
+ MESSAGE("\n KEYWORD:")
+ MESSAGE(" -DLMMS_MINIMAL=True")
+ FOREACH(item IN LISTS MINIMAL_LIST)
+ MESSAGE(" ${item}")
+ ENDFOREACH()
+ MESSAGE("\n NAME:")
+ FOREACH(item IN LISTS LMMS_PLUGIN_LIST)
+ MESSAGE(" ${item}")
+ ENDFOREACH()
+ MESSAGE("\nNote: This value also impacts the fetching of git submodules.\n")
+ MESSAGE(FATAL_ERROR "Information was requested, aborting build!")
+ENDMACRO()
+
+IF(LIST_PLUGINS)
+ UNSET(LIST_PLUGINS CACHE)
+ LIST_ALL_PLUGINS()
+ENDIF()
+
+IF(MSVC)
+ SET(MSVC_INCOMPATIBLE_PLUGINS
+ LadspaEffect
+ zynaddsubfx
+ )
+ message(WARNING "Compiling with MSVC. The following plugins are not available: ${MSVC_INCOMPATIBLE_PLUGINS}")
+ LIST(REMOVE_ITEM PLUGIN_LIST ${MSVC_INCOMPATIBLE_PLUGINS})
+ENDIF()
+
diff --git a/cmake/modules/winegcc_wrapper.in b/cmake/modules/winegcc_wrapper.in
index d32aec66432..7677e4c376b 100755
--- a/cmake/modules/winegcc_wrapper.in
+++ b/cmake/modules/winegcc_wrapper.in
@@ -58,6 +58,9 @@ if [ "$win64" = true ] && [ "$no_link" != true ]; then
extra_args="$extra_args @WINE_64_FLAGS@"
fi
+# Work around https://bugs.winehq.org/show_bug.cgi?id=47710
+extra_args="$extra_args -D__WIDL_objidl_generated_name_0000000C="
+
# Run winegcc
export WINEBUILD=@WINE_BUILD@
@WINE_CXX@ $extra_args $args
diff --git a/cmake/nsis/CMakeLists.txt b/cmake/nsis/CMakeLists.txt
index ac628d549a4..3fcb4b2f3d7 100644
--- a/cmake/nsis/CMakeLists.txt
+++ b/cmake/nsis/CMakeLists.txt
@@ -1,3 +1,8 @@
+SET(WIN_PLATFORM mingw)
+if(LMMS_MSVC_YEAR)
+ SET(WIN_PLATFORM "msvc${LMMS_MSVC_YEAR}")
+endif()
+
SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/nsis_branding.bmp")
IF(MSVC)
STRING(REPLACE "/" "\\\\" CPACK_PACKAGE_ICON ${CPACK_PACKAGE_ICON})
@@ -15,7 +20,7 @@ SET(CPACK_NSIS_DEFINES "
!include FileAssociation.nsh
!include LogicLib.nsh
!include WinVer.nsh")
-SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win32")
+SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-${WIN_PLATFORM}-win32")
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "
\\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmp\\\" \\\"${PROJECT_NAME_UCASE} Project\\\"
\\\${registerExtension} \\\"$INSTDIR\\\\${CMAKE_PROJECT_NAME}.exe\\\" \\\".mmpz\\\" \\\"${PROJECT_NAME_UCASE} Project (compressed)\\\"
@@ -31,7 +36,7 @@ SET(CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS "
" PARENT_SCOPE)
IF(WIN64)
- SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-win64")
+ SET(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${VERSION}-${WIN_PLATFORM}-win64")
SET(CPACK_INSTALL_FIX "$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\\")
SET(CPACK_NSIS_DEFINES "
${CPACK_NSIS_DEFINES}
diff --git a/cmake/postinstall/CMakeLists.txt b/cmake/postinstall/CMakeLists.txt
deleted file mode 100644
index 434d1c54e79..00000000000
--- a/cmake/postinstall/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-IF(LMMS_BUILD_APPLE)
- INSTALL(CODE "EXECUTE_PROCESS(COMMAND chmod u+x ${CMAKE_BINARY_DIR}/install_apple.sh)")
- INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/install_apple.sh)")
-ENDIF()
\ No newline at end of file
diff --git a/data/locale/pl.ts b/data/locale/pl.ts
index 5d9cc51cd40..4214718af38 100644
--- a/data/locale/pl.ts
+++ b/data/locale/pl.ts
@@ -3108,7 +3108,7 @@ Możesz usunąć i przenieść kanały FX w menu kontekstowym, które jest dost
- GŁOŚNOŚĆ UDERZENIA
+ PRĘDKOŚĆ
@@ -10321,4 +10321,4 @@ Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana
Wzmocnienie wyścia
-
\ No newline at end of file
+
diff --git a/data/locale/ru.ts b/data/locale/ru.ts
index c7ec3a328da..f717d598df4 100644
--- a/data/locale/ru.ts
+++ b/data/locale/ru.ts
@@ -1664,7 +1664,7 @@ Oe Ai <oeai/at/symbiants/dot/com>
- НАСЫЩ
+
@@ -1679,7 +1679,7 @@ Oe Ai <oeai/at/symbiants/dot/com>
- ЗАТУХАНИЕ
+
diff --git a/data/locale/sv.ts b/data/locale/sv.ts
index eb51c90822b..56cf1a0af10 100644
--- a/data/locale/sv.ts
+++ b/data/locale/sv.ts
@@ -1658,7 +1658,7 @@ If you're interested in translating LMMS in another language or want to imp
- B/T
+
@@ -1673,7 +1673,7 @@ If you're interested in translating LMMS in another language or want to imp
- FÖRFALL
+
diff --git a/data/locale/uk.ts b/data/locale/uk.ts
index 7271c4946ad..c088f401cb3 100644
--- a/data/locale/uk.ts
+++ b/data/locale/uk.ts
@@ -1678,7 +1678,7 @@ If you're interested in translating LMMS in another language or want to imp
- ЗГАСАННЯ
+
diff --git a/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz b/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz
index 1687e8c3433..b4a00e1ea86 100644
Binary files a/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz and b/data/projects/demos/CapDan/CapDan-TwilightArea-OriginalByAlf42red.mmpz differ
diff --git a/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz b/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz
index 95a29daff1d..578c4f926d4 100644
Binary files a/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz and b/data/projects/demos/CapDan/CapDan-ZeroSumGame-OriginalByZakarra.mmpz differ
diff --git a/data/projects/demos/EsoXLB-CPU.mmpz b/data/projects/demos/EsoXLB-CPU.mmpz
index 1c2549027e4..bc2445e8761 100644
Binary files a/data/projects/demos/EsoXLB-CPU.mmpz and b/data/projects/demos/EsoXLB-CPU.mmpz differ
diff --git a/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz b/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz
index 2f862dd5113..6c9f3436920 100644
Binary files a/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz and b/data/projects/demos/Greippi - Krem Kaakkuja (Second Flight Remix).mmpz differ
diff --git a/data/projects/demos/Impulslogik-Zen.mmpz b/data/projects/demos/Impulslogik-Zen.mmpz
index 05fa375c49f..774ce89e3d5 100644
Binary files a/data/projects/demos/Impulslogik-Zen.mmpz and b/data/projects/demos/Impulslogik-Zen.mmpz differ
diff --git a/data/projects/demos/Jousboxx-BuzzerBeater.mmpz b/data/projects/demos/Jousboxx-BuzzerBeater.mmpz
index 60795608c70..59f0d63f6a0 100644
Binary files a/data/projects/demos/Jousboxx-BuzzerBeater.mmpz and b/data/projects/demos/Jousboxx-BuzzerBeater.mmpz differ
diff --git a/data/projects/demos/Momo64-esp.mmpz b/data/projects/demos/Momo64-esp.mmpz
index 68ae6822c4d..37d1a52b553 100644
Binary files a/data/projects/demos/Momo64-esp.mmpz and b/data/projects/demos/Momo64-esp.mmpz differ
diff --git a/data/projects/demos/Namitryus-K-Project.mmpz b/data/projects/demos/Namitryus-K-Project.mmpz
index 6d463cbb954..4d62826c9b4 100644
Binary files a/data/projects/demos/Namitryus-K-Project.mmpz and b/data/projects/demos/Namitryus-K-Project.mmpz differ
diff --git a/data/projects/demos/Oglsdl-Dr8v2.mmpz b/data/projects/demos/Oglsdl-Dr8v2.mmpz
index eb9d7559a21..14b1b0e8540 100644
Binary files a/data/projects/demos/Oglsdl-Dr8v2.mmpz and b/data/projects/demos/Oglsdl-Dr8v2.mmpz differ
diff --git a/data/projects/demos/Oglsdl-PpTrip.mmpz b/data/projects/demos/Oglsdl-PpTrip.mmpz
index d1baceeba51..776aeea2bdd 100644
Binary files a/data/projects/demos/Oglsdl-PpTrip.mmpz and b/data/projects/demos/Oglsdl-PpTrip.mmpz differ
diff --git a/data/projects/demos/Popsip-Electric Dancer.mmpz b/data/projects/demos/Popsip-Electric Dancer.mmpz
index fc93dd64a23..1c935dbe126 100644
Binary files a/data/projects/demos/Popsip-Electric Dancer.mmpz and b/data/projects/demos/Popsip-Electric Dancer.mmpz differ
diff --git a/data/projects/demos/Root84-Initialize.mmpz b/data/projects/demos/Root84-Initialize.mmpz
index 349fcb88f4b..05200823a78 100644
Binary files a/data/projects/demos/Root84-Initialize.mmpz and b/data/projects/demos/Root84-Initialize.mmpz differ
diff --git a/data/projects/demos/Saber-FinalStep.mmpz b/data/projects/demos/Saber-FinalStep.mmpz
index 5e3d1d1ffc6..05a5022a7d4 100644
Binary files a/data/projects/demos/Saber-FinalStep.mmpz and b/data/projects/demos/Saber-FinalStep.mmpz differ
diff --git a/data/projects/demos/Settel-InnerRecreation.mmpz b/data/projects/demos/Settel-InnerRecreation.mmpz
index aaa01e0bcfe..78e1d611de8 100644
Binary files a/data/projects/demos/Settel-InnerRecreation.mmpz and b/data/projects/demos/Settel-InnerRecreation.mmpz differ
diff --git a/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz b/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz
index 2d31bd7bdc2..3ec6a2cffde 100644
Binary files a/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz and b/data/projects/demos/Shovon-ProgressiveHousePluckDemo.mmpz differ
diff --git a/data/projects/demos/Skiessi/Skiessi-C64.mmpz b/data/projects/demos/Skiessi/Skiessi-C64.mmpz
index f0b3f5cdb4d..a9756453bea 100644
Binary files a/data/projects/demos/Skiessi/Skiessi-C64.mmpz and b/data/projects/demos/Skiessi/Skiessi-C64.mmpz differ
diff --git a/data/projects/demos/Skiessi/Skiessi-Onion.mmpz b/data/projects/demos/Skiessi/Skiessi-Onion.mmpz
index 0c40fb60a45..23a1ddc48cc 100644
Binary files a/data/projects/demos/Skiessi/Skiessi-Onion.mmpz and b/data/projects/demos/Skiessi/Skiessi-Onion.mmpz differ
diff --git a/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz b/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz
index d3c6e0f8d0e..bc2810567b9 100644
Binary files a/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz and b/data/projects/demos/Skiessi/Skiessi-RandomProjectNumber14253.mmpz differ
diff --git a/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz b/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz
index ee5be4b553e..47a0a3672c6 100644
Binary files a/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz and b/data/projects/demos/Skiessi/Skiessi-TurningPoint.mmpz differ
diff --git a/data/projects/demos/Socceroos-Progress.mmpz b/data/projects/demos/Socceroos-Progress.mmpz
index 74ff5774c94..854663787c3 100644
Binary files a/data/projects/demos/Socceroos-Progress.mmpz and b/data/projects/demos/Socceroos-Progress.mmpz differ
diff --git a/data/projects/demos/TameAnderson-MakeMe.mmpz b/data/projects/demos/TameAnderson-MakeMe.mmpz
index de015281881..b69a64e3afe 100644
Binary files a/data/projects/demos/TameAnderson-MakeMe.mmpz and b/data/projects/demos/TameAnderson-MakeMe.mmpz differ
diff --git a/data/projects/demos/Thaledric-Armageddon.mmpz b/data/projects/demos/Thaledric-Armageddon.mmpz
index 0e9d5f83fa9..731ea55f7d5 100644
Binary files a/data/projects/demos/Thaledric-Armageddon.mmpz and b/data/projects/demos/Thaledric-Armageddon.mmpz differ
diff --git a/data/projects/demos/Thomasso-AxeFromThe80s.mmpz b/data/projects/demos/Thomasso-AxeFromThe80s.mmpz
index af68b8b8b11..f7056d38c22 100644
Binary files a/data/projects/demos/Thomasso-AxeFromThe80s.mmpz and b/data/projects/demos/Thomasso-AxeFromThe80s.mmpz differ
diff --git a/data/projects/demos/TobyDox-Psycho.mmpz b/data/projects/demos/TobyDox-Psycho.mmpz
index 09ec6b6a6b4..c4fe7a1c428 100644
Binary files a/data/projects/demos/TobyDox-Psycho.mmpz and b/data/projects/demos/TobyDox-Psycho.mmpz differ
diff --git a/data/projects/demos/unfa-Spoken.mmpz b/data/projects/demos/unfa-Spoken.mmpz
index 659afa03a0f..66b7589d106 100644
Binary files a/data/projects/demos/unfa-Spoken.mmpz and b/data/projects/demos/unfa-Spoken.mmpz differ
diff --git a/data/projects/shorties/DirtyLove.mmpz b/data/projects/shorties/DirtyLove.mmpz
index 177c05ce516..37b766f4d29 100644
Binary files a/data/projects/shorties/DirtyLove.mmpz and b/data/projects/shorties/DirtyLove.mmpz differ
diff --git a/data/projects/shorties/Root84-TrancyLoop.mmpz b/data/projects/shorties/Root84-TrancyLoop.mmpz
index 22bd5f2fad7..f5eb032acbe 100644
Binary files a/data/projects/shorties/Root84-TrancyLoop.mmpz and b/data/projects/shorties/Root84-TrancyLoop.mmpz differ
diff --git a/data/projects/shorties/Skiessi-222.mmpz b/data/projects/shorties/Skiessi-222.mmpz
index a5683364580..a7076949cf6 100644
Binary files a/data/projects/shorties/Skiessi-222.mmpz and b/data/projects/shorties/Skiessi-222.mmpz differ
diff --git a/data/projects/shorties/Surrender-Main.mmpz b/data/projects/shorties/Surrender-Main.mmpz
index a94df2497ef..5565811708f 100644
Binary files a/data/projects/shorties/Surrender-Main.mmpz and b/data/projects/shorties/Surrender-Main.mmpz differ
diff --git a/data/projects/shorties/sv-DnB-Startup.mmpz b/data/projects/shorties/sv-DnB-Startup.mmpz
index c9d8d597055..db32d34520f 100644
Binary files a/data/projects/shorties/sv-DnB-Startup.mmpz and b/data/projects/shorties/sv-DnB-Startup.mmpz differ
diff --git a/data/projects/shorties/sv-Trance-Startup.mmpz b/data/projects/shorties/sv-Trance-Startup.mmpz
index c508b1500c2..bea731461c8 100644
Binary files a/data/projects/shorties/sv-Trance-Startup.mmpz and b/data/projects/shorties/sv-Trance-Startup.mmpz differ
diff --git a/data/themes/classic/style.css b/data/themes/classic/style.css
index 12d90981d56..97d68f6e348 100644
--- a/data/themes/classic/style.css
+++ b/data/themes/classic/style.css
@@ -897,7 +897,4 @@ LmmsPalette {
qproperty-brightText: #4afd85;
qproperty-highlight: #202020;
qproperty-highlightedText: #ffffff;
- /* the next two are used for whatsthis dialogs */
- qproperty-toolTipText: #000;
- qproperty-toolTipBase: #c9c9c9;
}
diff --git a/data/themes/default/style.css b/data/themes/default/style.css
index 5d889295cae..f95469201cd 100644
--- a/data/themes/default/style.css
+++ b/data/themes/default/style.css
@@ -9,16 +9,23 @@ QLabel, QTreeWidget, QListWidget, QGroupBox, QMenuBar {
QTreeView {
outline: none;
+ font-size: 12px;
+}
+
+QTreeWidget::item {
+ padding: 1px;
}
QTreeWidget::item:hover,
QTreeWidget::branch:hover {
background-color: #3C444E;
+ padding-left: 0px;
}
QTreeWidget::item:selected,
QTreeWidget::branch:selected {
background-color: #17793b;
+ padding-left: 0px;
}
QTreeView::branch:has-children:open {
@@ -81,6 +88,12 @@ TextFloat {
}
+/* splash screen text */
+QSplashScreen QLabel {
+ color: white;
+}
+
+
QMenu {
border-top: 2px solid #08993E;
background-color: #15191c;
@@ -920,7 +933,4 @@ LmmsPalette {
qproperty-brightText: #d1d8e4;
qproperty-highlight: #262b30;
qproperty-highlightedText: #d1d8e4;
- /* the next two are used for whatsthis dialogs */
- qproperty-toolTipText: #d1d8e4;
- qproperty-toolTipBase: #101213;
}
diff --git a/include/AudioAlsa.h b/include/AudioAlsa.h
index 77938e16412..b1aa9647a61 100644
--- a/include/AudioAlsa.h
+++ b/include/AudioAlsa.h
@@ -80,10 +80,10 @@ class AudioAlsa : public QThread, public AudioDevice
static DeviceInfoCollection getAvailableDevices();
private:
- virtual void startProcessing();
- virtual void stopProcessing();
- virtual void applyQualitySettings();
- virtual void run();
+ void startProcessing() override;
+ void stopProcessing() override;
+ void applyQualitySettings() override;
+ void run() override;
int setHWParams( const ch_cnt_t _channels, snd_pcm_access_t _access );
int setSWParams();
diff --git a/include/AudioAlsaSetupWidget.h b/include/AudioAlsaSetupWidget.h
index f087d2fd797..db88558a75b 100644
--- a/include/AudioAlsaSetupWidget.h
+++ b/include/AudioAlsaSetupWidget.h
@@ -46,7 +46,7 @@ class AudioAlsaSetupWidget : public AudioDeviceSetupWidget
AudioAlsaSetupWidget( QWidget * _parent );
virtual ~AudioAlsaSetupWidget();
- virtual void saveSettings();
+ void saveSettings() override;
public slots:
void onCurrentIndexChanged(int index);
diff --git a/include/AudioDummy.h b/include/AudioDummy.h
index 5094caddc1a..0772c69eb36 100644
--- a/include/AudioDummy.h
+++ b/include/AudioDummy.h
@@ -64,11 +64,11 @@ class AudioDummy : public QThread, public AudioDevice
{
}
- virtual void saveSettings()
+ void saveSettings() override
{
}
- virtual void show()
+ void show() override
{
parentWidget()->hide();
QWidget::show();
@@ -78,17 +78,17 @@ class AudioDummy : public QThread, public AudioDevice
private:
- virtual void startProcessing()
+ void startProcessing() override
{
start();
}
- virtual void stopProcessing()
+ void stopProcessing() override
{
stopProcessingThread( this );
}
- virtual void run()
+ void run() override
{
MicroTimer timer;
while( true )
diff --git a/include/AudioFileMP3.h b/include/AudioFileMP3.h
index 497208e20e6..057fd13a48c 100644
--- a/include/AudioFileMP3.h
+++ b/include/AudioFileMP3.h
@@ -58,7 +58,7 @@ class AudioFileMP3 : public AudioFileDevice
protected:
virtual void writeBuffer( const surroundSampleFrame * /* _buf*/,
const fpp_t /*_frames*/,
- const float /*_master_gain*/ );
+ const float /*_master_gain*/ ) override;
private:
void flushRemainingBuffers();
diff --git a/include/AudioFileOgg.h b/include/AudioFileOgg.h
index 656a7174ef3..8082f37678b 100644
--- a/include/AudioFileOgg.h
+++ b/include/AudioFileOgg.h
@@ -59,7 +59,7 @@ class AudioFileOgg : public AudioFileDevice
private:
virtual void writeBuffer( const surroundSampleFrame * _ab,
const fpp_t _frames,
- const float _master_gain );
+ const float _master_gain ) override;
bool startEncoding();
void finishEncoding();
diff --git a/include/AudioFileWave.h b/include/AudioFileWave.h
index 4d2778bad82..7c8d549642a 100644
--- a/include/AudioFileWave.h
+++ b/include/AudioFileWave.h
@@ -56,7 +56,7 @@ class AudioFileWave : public AudioFileDevice
private:
virtual void writeBuffer( const surroundSampleFrame * _ab,
const fpp_t _frames,
- float _master_gain );
+ float _master_gain ) override;
bool startEncoding();
void finishEncoding();
diff --git a/include/AudioOss.h b/include/AudioOss.h
index bacfd959760..9e4787ff202 100644
--- a/include/AudioOss.h
+++ b/include/AudioOss.h
@@ -60,7 +60,7 @@ class AudioOss : public QThread, public AudioDevice
setupWidget( QWidget * _parent );
virtual ~setupWidget();
- virtual void saveSettings();
+ void saveSettings() override;
private:
QLineEdit * m_device;
@@ -70,10 +70,10 @@ class AudioOss : public QThread, public AudioDevice
private:
- virtual void startProcessing();
- virtual void stopProcessing();
- virtual void applyQualitySettings();
- virtual void run();
+ void startProcessing() override;
+ void stopProcessing() override;
+ void applyQualitySettings() override;
+ void run() override;
int m_audioFD;
diff --git a/include/AudioPort.h b/include/AudioPort.h
index 2842c6a1768..146bbd192cd 100644
--- a/include/AudioPort.h
+++ b/include/AudioPort.h
@@ -100,8 +100,8 @@ class AudioPort : public ThreadableJob
bool processEffects();
// ThreadableJob stuff
- virtual void doProcessing();
- virtual bool requiresProcessing() const
+ void doProcessing() override;
+ bool requiresProcessing() const override
{
return true;
}
diff --git a/include/AudioPulseAudio.h b/include/AudioPulseAudio.h
index 49674669134..e65180a74a3 100644
--- a/include/AudioPulseAudio.h
+++ b/include/AudioPulseAudio.h
@@ -62,7 +62,7 @@ class AudioPulseAudio : public QThread, public AudioDevice
setupWidget( QWidget * _parent );
virtual ~setupWidget();
- virtual void saveSettings();
+ void saveSettings() override;
private:
QLineEdit * m_device;
@@ -80,10 +80,10 @@ class AudioPulseAudio : public QThread, public AudioDevice
private:
- virtual void startProcessing();
- virtual void stopProcessing();
- virtual void applyQualitySettings();
- virtual void run();
+ void startProcessing() override;
+ void stopProcessing() override;
+ void applyQualitySettings() override;
+ void run() override;
volatile bool m_quit;
diff --git a/include/AudioSampleRecorder.h b/include/AudioSampleRecorder.h
index 69ac1949047..0a82d2d9619 100644
--- a/include/AudioSampleRecorder.h
+++ b/include/AudioSampleRecorder.h
@@ -48,7 +48,7 @@ class AudioSampleRecorder : public AudioDevice
private:
virtual void writeBuffer( const surroundSampleFrame * _ab,
const fpp_t _frames,
- const float _master_gain );
+ const float _master_gain ) override;
typedef QList > BufferList;
BufferList m_buffers;
diff --git a/include/AudioSdl.h b/include/AudioSdl.h
index fd8c544c264..93f23abed22 100644
--- a/include/AudioSdl.h
+++ b/include/AudioSdl.h
@@ -60,9 +60,9 @@ class AudioSdl : public AudioDevice
{
public:
setupWidget( QWidget * _parent );
- virtual ~setupWidget();
+ ~setupWidget() override;
- virtual void saveSettings();
+ void saveSettings() override;
private:
QLineEdit * m_device;
@@ -71,9 +71,9 @@ class AudioSdl : public AudioDevice
private:
- virtual void startProcessing();
- virtual void stopProcessing();
- virtual void applyQualitySettings();
+ void startProcessing() override;
+ void stopProcessing() override;
+ void applyQualitySettings() override;
static void sdlAudioCallback( void * _udata, Uint8 * _buf, int _len );
void sdlAudioCallback( Uint8 * _buf, int _len );
diff --git a/include/AudioSndio.h b/include/AudioSndio.h
index d2bc5c07430..f8cf56848a6 100644
--- a/include/AudioSndio.h
+++ b/include/AudioSndio.h
@@ -58,7 +58,7 @@ class AudioSndio : public QThread, public AudioDevice
setupWidget( QWidget * _parent );
virtual ~setupWidget();
- virtual void saveSettings( void );
+ void saveSettings( void ) override;
private:
QLineEdit * m_device;
@@ -66,10 +66,10 @@ class AudioSndio : public QThread, public AudioDevice
} ;
private:
- virtual void startProcessing( void );
- virtual void stopProcessing( void );
- virtual void applyQualitySettings( void );
- virtual void run( void );
+ void startProcessing( void ) override;
+ void stopProcessing( void ) override;
+ void applyQualitySettings( void ) override;
+ void run( void ) override;
struct sio_hdl *m_hdl;
struct sio_par m_par;
diff --git a/include/AutomatableButton.h b/include/AutomatableButton.h
index 4b50655429f..d7859a10c15 100644
--- a/include/AutomatableButton.h
+++ b/include/AutomatableButton.h
@@ -48,7 +48,7 @@ class LMMS_EXPORT AutomatableButton : public QPushButton, public BoolModelView
model()->setJournalling( _on );
}
- virtual void modelChanged();
+ void modelChanged() override;
public slots:
@@ -62,9 +62,9 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
private:
@@ -92,7 +92,7 @@ class LMMS_EXPORT automatableButtonGroup : public QWidget, public IntModelView
void activateButton( AutomatableButton * _btn );
- virtual void modelChanged();
+ void modelChanged() override;
private slots:
diff --git a/include/AutomatableModel.h b/include/AutomatableModel.h
index 3e0b6143da3..6d8000804f6 100644
--- a/include/AutomatableModel.h
+++ b/include/AutomatableModel.h
@@ -255,7 +255,7 @@ class LMMS_EXPORT AutomatableModel : public Model, public JournallingObject
specified DOM element using as attribute/node name */
virtual void loadSettings( const QDomElement& element, const QString& name );
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "automatablemodel";
}
@@ -337,12 +337,12 @@ public slots:
static bool mustQuoteName(const QString &name);
- virtual void saveSettings( QDomDocument& doc, QDomElement& element )
+ void saveSettings( QDomDocument& doc, QDomElement& element ) override
{
saveSettings( doc, element, "value" );
}
- virtual void loadSettings( const QDomElement& element )
+ void loadSettings( const QDomElement& element ) override
{
loadSettings( element, "value" );
}
diff --git a/include/AutomatableModelView.h b/include/AutomatableModelView.h
index 964ffdc5d63..1bcbd97d6fe 100644
--- a/include/AutomatableModelView.h
+++ b/include/AutomatableModelView.h
@@ -49,7 +49,7 @@ class LMMS_EXPORT AutomatableModelView : public ModelView
return castModel();
}
- virtual void setModel( Model* model, bool isOldModelValid = true );
+ void setModel( Model* model, bool isOldModelValid = true ) override;
template
inline T value() const
diff --git a/include/AutomatableSlider.h b/include/AutomatableSlider.h
index f58d4a05954..b51ef1e3ff2 100644
--- a/include/AutomatableSlider.h
+++ b/include/AutomatableSlider.h
@@ -51,12 +51,12 @@ class AutomatableSlider : public QSlider, public IntModelView
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void wheelEvent( QWheelEvent * _me );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void wheelEvent( QWheelEvent * _me ) override;
- virtual void modelChanged();
+ void modelChanged() override;
private:
diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h
index 9705c5efa6a..60b894f1fbc 100644
--- a/include/AutomationEditor.h
+++ b/include/AutomationEditor.h
@@ -73,9 +73,9 @@ class AutomationEditor : public QWidget, public JournallingObject
return m_pattern != nullptr;
}
- virtual void saveSettings(QDomDocument & doc, QDomElement & parent);
- virtual void loadSettings(const QDomElement & parent);
- QString nodeName() const
+ void saveSettings(QDomDocument & doc, QDomElement & parent) override;
+ void loadSettings(const QDomElement & parent) override;
+ QString nodeName() const override
{
return "automationeditor";
}
@@ -114,14 +114,14 @@ public slots:
protected:
typedef AutomationPattern::timeMap timeMap;
- virtual void keyPressEvent(QKeyEvent * ke);
- virtual void leaveEvent(QEvent * e);
- virtual void mousePressEvent(QMouseEvent * mouseEvent);
- virtual void mouseReleaseEvent(QMouseEvent * mouseEvent);
- virtual void mouseMoveEvent(QMouseEvent * mouseEvent);
- virtual void paintEvent(QPaintEvent * pe);
- virtual void resizeEvent(QResizeEvent * re);
- virtual void wheelEvent(QWheelEvent * we);
+ void keyPressEvent(QKeyEvent * ke) override;
+ void leaveEvent(QEvent * e) override;
+ void mousePressEvent(QMouseEvent * mouseEvent) override;
+ void mouseReleaseEvent(QMouseEvent * mouseEvent) override;
+ void mouseMoveEvent(QMouseEvent * mouseEvent) override;
+ void paintEvent(QPaintEvent * pe) override;
+ void resizeEvent(QResizeEvent * re) override;
+ void wheelEvent(QWheelEvent * we) override;
float getLevel( int y );
int xCoordOfTick( int tick );
@@ -176,8 +176,8 @@ protected slots:
static const int TOP_MARGIN = 16;
static const int DEFAULT_Y_DELTA = 6;
- static const int DEFAULT_STEPS_PER_TACT = 16;
- static const int DEFAULT_PPT = 12 * DEFAULT_STEPS_PER_TACT;
+ static const int DEFAULT_STEPS_PER_BAR = 16;
+ static const int DEFAULT_PPB = 12 * DEFAULT_STEPS_PER_BAR;
static const int VALUES_WIDTH = 64;
@@ -230,7 +230,7 @@ protected slots:
float m_drawLastLevel;
tick_t m_drawLastTick;
- int m_ppt;
+ int m_ppb;
int m_y_delta;
bool m_y_auto;
@@ -282,14 +282,14 @@ class AutomationEditorWindow : public Editor
void setCurrentPattern(AutomationPattern* pattern);
const AutomationPattern* currentPattern();
- virtual void dropEvent( QDropEvent * _de );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
+ void dropEvent( QDropEvent * _de ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
void open(AutomationPattern* pattern);
AutomationEditor* m_editor;
- QSize sizeHint() const;
+ QSize sizeHint() const override;
public slots:
void clearCurrentPattern();
@@ -297,9 +297,12 @@ public slots:
signals:
void currentPatternChanged();
+protected:
+ void focusInEvent(QFocusEvent * event) override;
+
protected slots:
- void play();
- void stop();
+ void play() override;
+ void stop() override;
private slots:
void updateWindowTitle();
diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h
index 070b6c669fe..cad9d0a1d00 100644
--- a/include/AutomationPattern.h
+++ b/include/AutomationPattern.h
@@ -140,13 +140,13 @@ class LMMS_EXPORT AutomationPattern : public TrackContentObject
const QString name() const;
// settings-management
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
static const QString classNodeName() { return "automationpattern"; }
- QString nodeName() const { return classNodeName(); }
+ QString nodeName() const override { return classNodeName(); }
- virtual TrackContentObjectView * createView( TrackView * _tv );
+ TrackContentObjectView * createView( TrackView * _tv ) override;
static bool isAutomated( const AutomatableModel * _m );
diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h
index 45aa9ef2a52..3f019483a10 100644
--- a/include/AutomationPatternView.h
+++ b/include/AutomationPatternView.h
@@ -44,7 +44,7 @@ class AutomationPatternView : public TrackContentObjectView
public slots:
/// Opens this view's pattern in the global automation editor
void openInAutomationEditor();
- virtual void update();
+ void update() override;
protected slots:
@@ -56,11 +56,11 @@ protected slots:
void flipX();
protected:
- virtual void constructContextMenu( QMenu * );
- virtual void mouseDoubleClickEvent(QMouseEvent * me );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
+ void constructContextMenu( QMenu * ) override;
+ void mouseDoubleClickEvent(QMouseEvent * me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
private:
diff --git a/include/AutomationTrack.h b/include/AutomationTrack.h
index 195c21e9d4b..92a50dd04a9 100644
--- a/include/AutomationTrack.h
+++ b/include/AutomationTrack.h
@@ -38,19 +38,19 @@ class AutomationTrack : public Track
virtual ~AutomationTrack() = default;
virtual bool play( const MidiTime & _start, const fpp_t _frames,
- const f_cnt_t _frame_base, int _tco_num = -1 );
+ const f_cnt_t _frame_base, int _tco_num = -1 ) override;
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "automationtrack";
}
- virtual TrackView * createView( TrackContainerView* );
- virtual TrackContentObject * createTCO( const MidiTime & _pos );
+ TrackView * createView( TrackContainerView* ) override;
+ TrackContentObject * createTCO( const MidiTime & _pos ) override;
virtual void saveTrackSpecificSettings( QDomDocument & _doc,
- QDomElement & _parent );
- virtual void loadTrackSpecificSettings( const QDomElement & _this );
+ QDomElement & _parent ) override;
+ void loadTrackSpecificSettings( const QDomElement & _this ) override;
private:
friend class AutomationTrackView;
@@ -65,8 +65,8 @@ class AutomationTrackView : public TrackView
AutomationTrackView( AutomationTrack* at, TrackContainerView* tcv );
virtual ~AutomationTrackView() = default;
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
} ;
diff --git a/include/BBEditor.h b/include/BBEditor.h
index 59b7142f471..ed54beaf16d 100644
--- a/include/BBEditor.h
+++ b/include/BBEditor.h
@@ -42,7 +42,7 @@ class BBEditor : public Editor
BBEditor( BBTrackContainer * _tc );
~BBEditor();
- QSize sizeHint() const;
+ QSize sizeHint() const override;
const BBTrackContainerView* trackContainerView() const {
return m_trackContainerView;
@@ -54,8 +54,8 @@ class BBEditor : public Editor
void removeBBView( int bb );
public slots:
- void play();
- void stop();
+ void play() override;
+ void stop() override;
private:
BBTrackContainerView* m_trackContainerView;
@@ -70,15 +70,15 @@ class BBTrackContainerView : public TrackContainerView
public:
BBTrackContainerView(BBTrackContainer* tc);
- bool fixedTCOs() const
+ bool fixedTCOs() const override
{
return true;
}
void removeBBView(int bb);
- void saveSettings(QDomDocument& doc, QDomElement& element);
- void loadSettings(const QDomElement& element);
+ void saveSettings(QDomDocument& doc, QDomElement& element) override;
+ void loadSettings(const QDomElement& element) override;
public slots:
void addSteps();
@@ -88,7 +88,7 @@ public slots:
void addAutomationTrack();
protected slots:
- void dropEvent(QDropEvent * de );
+ void dropEvent(QDropEvent * de ) override;
void updatePosition();
private:
diff --git a/include/BBTrack.h b/include/BBTrack.h
index a906b54d259..70195f28de6 100644
--- a/include/BBTrack.h
+++ b/include/BBTrack.h
@@ -43,9 +43,9 @@ class BBTCO : public TrackContentObject
BBTCO( Track * _track );
virtual ~BBTCO() = default;
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return( "bbtco" );
}
@@ -72,7 +72,7 @@ class BBTCO : public TrackContentObject
int bbTrackIndex();
- virtual TrackContentObjectView * createView( TrackView * _tv );
+ TrackContentObjectView * createView( TrackView * _tv ) override;
private:
QColor m_color;
@@ -99,7 +99,7 @@ class BBTCOView : public TrackContentObjectView
void setColor( QColor _new_color );
public slots:
- virtual void update();
+ void update() override;
protected slots:
void openInBBEditor();
@@ -110,9 +110,9 @@ protected slots:
protected:
- virtual void paintEvent( QPaintEvent * pe );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
- virtual void constructContextMenu( QMenu * );
+ void paintEvent( QPaintEvent * pe ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
+ void constructContextMenu( QMenu * ) override;
private:
@@ -133,13 +133,13 @@ class LMMS_EXPORT BBTrack : public Track
virtual ~BBTrack();
virtual bool play( const MidiTime & _start, const fpp_t _frames,
- const f_cnt_t _frame_base, int _tco_num = -1 );
- virtual TrackView * createView( TrackContainerView* tcv );
- virtual TrackContentObject * createTCO( const MidiTime & _pos );
+ const f_cnt_t _frame_base, int _tco_num = -1 ) override;
+ TrackView * createView( TrackContainerView* tcv ) override;
+ TrackContentObject * createTCO( const MidiTime & _pos ) override;
virtual void saveTrackSpecificSettings( QDomDocument & _doc,
- QDomElement & _parent );
- virtual void loadTrackSpecificSettings( const QDomElement & _this );
+ QDomElement & _parent ) override;
+ void loadTrackSpecificSettings( const QDomElement & _this ) override;
static BBTrack * findBBTrack( int _bb_num );
static void swapBBTracks( Track * _track1, Track * _track2 );
@@ -184,7 +184,7 @@ class LMMS_EXPORT BBTrack : public Track
}
protected:
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return( "bbtrack" );
}
@@ -211,7 +211,7 @@ class BBTrackView : public TrackView
BBTrackView( BBTrack* bbt, TrackContainerView* tcv );
virtual ~BBTrackView();
- virtual bool close();
+ bool close() override;
const BBTrack * getBBTrack() const
{
diff --git a/include/BBTrackContainer.h b/include/BBTrackContainer.h
index 2363251570b..17d6eb5fed1 100644
--- a/include/BBTrackContainer.h
+++ b/include/BBTrackContainer.h
@@ -41,15 +41,15 @@ class LMMS_EXPORT BBTrackContainer : public TrackContainer
virtual bool play( MidiTime _start, const fpp_t _frames,
const f_cnt_t _frame_base, int _tco_num = -1 );
- virtual void updateAfterTrackAdd() override;
+ void updateAfterTrackAdd() override;
- inline virtual QString nodeName() const override
+ inline QString nodeName() const override
{
return "bbtrackcontainer";
}
- tact_t lengthOfBB( int _bb ) const;
- inline tact_t lengthOfCurrentBB()
+ bar_t lengthOfBB( int _bb ) const;
+ inline bar_t lengthOfCurrentBB()
{
return lengthOfBB( currentBB() );
}
diff --git a/include/CPULoadWidget.h b/include/CPULoadWidget.h
index 610403f5750..2bc41283b0d 100644
--- a/include/CPULoadWidget.h
+++ b/include/CPULoadWidget.h
@@ -43,7 +43,7 @@ class CPULoadWidget : public QWidget
protected:
- virtual void paintEvent( QPaintEvent * _ev );
+ void paintEvent( QPaintEvent * _ev ) override;
protected slots:
diff --git a/include/ComboBox.h b/include/ComboBox.h
index 927c8762062..d530c9d92f7 100644
--- a/include/ComboBox.h
+++ b/include/ComboBox.h
@@ -57,10 +57,10 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent* event );
- virtual void mousePressEvent( QMouseEvent* event );
- virtual void paintEvent( QPaintEvent* event );
- virtual void wheelEvent( QWheelEvent* event );
+ void contextMenuEvent( QContextMenuEvent* event ) override;
+ void mousePressEvent( QMouseEvent* event ) override;
+ void paintEvent( QPaintEvent* event ) override;
+ void wheelEvent( QWheelEvent* event ) override;
private:
diff --git a/include/ConfigManager.h b/include/ConfigManager.h
index dc5b9f485cc..556c455a0c7 100644
--- a/include/ConfigManager.h
+++ b/include/ConfigManager.h
@@ -36,6 +36,7 @@
#include "lmms_export.h"
+
class LmmsCore;
@@ -57,23 +58,45 @@ class LMMS_EXPORT ConfigManager : public QObject
public:
static inline ConfigManager * inst()
{
- if( s_instanceOfMe == NULL )
+ if(s_instanceOfMe == NULL )
{
s_instanceOfMe = new ConfigManager();
}
return s_instanceOfMe;
}
+
+ const QString & workingDir() const
+ {
+ return m_workingDir;
+ }
+
const QString & dataDir() const
{
return m_dataDir;
}
- const QString & workingDir() const
+ QString factoryProjectsDir() const
{
- return m_workingDir;
+ return dataDir() + PROJECTS_PATH;
+ }
+
+ QString factoryTemplatesDir() const
+ {
+ return factoryProjectsDir() + TEMPLATE_PATH;
+ }
+
+ QString factoryPresetsDir() const
+ {
+ return dataDir() + PRESETS_PATH;
}
+ QString factorySamplesDir() const
+ {
+ return dataDir() + SAMPLES_PATH;
+ }
+
+
QString userProjectsDir() const
{
return workingDir() + PROJECTS_PATH;
@@ -94,155 +117,137 @@ class LMMS_EXPORT ConfigManager : public QObject
return workingDir() + SAMPLES_PATH;
}
- QString userGigDir() const
- {
- return workingDir() + GIG_PATH;
- }
-
- QString userSf2Dir() const
- {
- return workingDir() + SF2_PATH;
- }
- QString userLadspaDir() const
+ const QString & vstDir() const
{
- return workingDir() + LADSPA_PATH;
+ return m_vstDir;
}
- QString userVstDir() const
+ const QString & ladspaDir() const
{
- return m_vstDir;
+ return m_ladspaDir;
}
- QString factoryProjectsDir() const
+ const QString & sf2Dir() const
{
- return dataDir() + PROJECTS_PATH;
+ return m_sf2Dir;
}
- QString factoryTemplatesDir() const
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ const QString & sf2File() const
{
- return factoryProjectsDir() + TEMPLATE_PATH;
+ return m_sf2File;
}
+#endif
- QString factoryPresetsDir() const
+#ifdef LMMS_HAVE_STK
+ const QString & stkDir() const
{
- return dataDir() + PRESETS_PATH;
+ return m_stkDir;
}
+#endif
- QString factorySamplesDir() const
+ const QString & gigDir() const
{
- return dataDir() + SAMPLES_PATH;
+ return m_gigDir;
}
- QString defaultVersion() const;
- QString defaultArtworkDir() const
+ QString userVstDir() const
{
- return m_dataDir + DEFAULT_THEME_PATH;
+ return m_vstDir;
}
- QString artworkDir() const
+ QString userLadspaDir() const
{
- return m_artworkDir;
+ return workingDir() + LADSPA_PATH;
}
- QString trackIconsDir() const
+ QString userSf2Dir() const
{
- return m_dataDir + TRACK_ICON_PATH;
+ return workingDir() + SF2_PATH;
}
- QString localeDir() const
+ QString userGigDir() const
{
- return m_dataDir + LOCALE_PATH;
+ return workingDir() + GIG_PATH;
}
- const QString & gigDir() const
+ QString defaultThemeDir() const
{
- return m_gigDir;
+ return m_dataDir + DEFAULT_THEME_PATH;
}
- const QString & sf2Dir() const
+ QString themeDir() const
{
- return m_sf2Dir;
+ return m_themeDir;
}
- const QString & vstDir() const
+ const QString & backgroundPicFile() const
{
- return m_vstDir;
+ return m_backgroundPicFile;
}
- const QString & ladspaDir() const
+ QString trackIconsDir() const
{
- return m_ladDir;
+ return m_dataDir + TRACK_ICON_PATH;
}
const QString recoveryFile() const
{
return m_workingDir + "recover.mmp";
}
-
- const QString & version() const
- {
- return m_version;
- }
-#ifdef LMMS_HAVE_STK
- const QString & stkDir() const
+ inline const QStringList & recentlyOpenedProjects() const
{
- return m_stkDir;
+ return m_recentlyOpenedProjects;
}
-#endif
-#ifdef LMMS_HAVE_FLUIDSYNTH
- const QString & defaultSoundfont() const
+ QString localeDir() const
{
- return m_defaultSoundfont;
+ return m_dataDir + LOCALE_PATH;
}
-#endif
- const QString & backgroundArtwork() const
+ const QString & version() const
{
- return m_backgroundArtwork;
+ return m_version;
}
- inline const QStringList & recentlyOpenedProjects() const
- {
- return m_recentlyOpenedProjects;
- }
+ QString defaultVersion() const;
+
static QStringList availabeVstEmbedMethods();
QString vstEmbedMethod() const;
- // returns true if the working dir (e.g. ~/lmms) exists on disk
+ // Returns true if the working dir (e.g. ~/lmms) exists on disk.
bool hasWorkingDir() const;
- void addRecentlyOpenedProject( const QString & _file );
+ void addRecentlyOpenedProject(const QString & _file);
- const QString & value( const QString & cls,
- const QString & attribute ) const;
- const QString & value( const QString & cls,
+ const QString & value(const QString & cls,
+ const QString & attribute) const;
+ const QString & value(const QString & cls,
const QString & attribute,
- const QString & defaultVal ) const;
- void setValue( const QString & cls, const QString & attribute,
- const QString & value );
- void deleteValue( const QString & cls, const QString & attribute);
+ const QString & defaultVal) const;
+ void setValue(const QString & cls, const QString & attribute,
+ const QString & value);
+ void deleteValue(const QString & cls, const QString & attribute);
- void loadConfigFile( const QString & configFile = "" );
+ void loadConfigFile(const QString & configFile = "");
void saveConfigFile();
- void setWorkingDir( const QString & _wd );
- void setVSTDir( const QString & _vd );
- void setArtworkDir( const QString & _ad );
- void setLADSPADir( const QString & _fd );
- void setVersion( const QString & _cv );
- void setSTKDir( const QString & _fd );
- void setDefaultSoundfont( const QString & _sf );
- void setBackgroundArtwork( const QString & _ba );
- void setGIGDir( const QString & gd );
- void setSF2Dir( const QString & sfd );
+ void setWorkingDir(const QString & workingDir);
+ void setVSTDir(const QString & vstDir);
+ void setLADSPADir(const QString & ladspaDir);
+ void setSF2Dir(const QString & sf2Dir);
+ void setSF2File(const QString & sf2File);
+ void setSTKDir(const QString & stkDir);
+ void setGIGDir(const QString & gigDir);
+ void setThemeDir(const QString & themeDir);
+ void setBackgroundPicFile(const QString & backgroundPicFile);
- // creates the working directory & subdirectories on disk.
+ // Creates the working directory & subdirectories on disk.
void createWorkingDir();
signals:
@@ -252,29 +257,29 @@ class LMMS_EXPORT ConfigManager : public QObject
static ConfigManager * s_instanceOfMe;
ConfigManager();
- ConfigManager( const ConfigManager & _c );
+ ConfigManager(const ConfigManager & _c);
~ConfigManager();
void upgrade_1_1_90();
void upgrade_1_1_91();
void upgrade();
- QString m_lmmsRcFile;
QString m_workingDir;
QString m_dataDir;
- QString m_artworkDir;
QString m_vstDir;
- QString m_ladDir;
- QString m_gigDir;
+ QString m_ladspaDir;
QString m_sf2Dir;
- QString m_version;
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ QString m_sf2File;
+#endif
#ifdef LMMS_HAVE_STK
QString m_stkDir;
#endif
-#ifdef LMMS_HAVE_FLUIDSYNTH
- QString m_defaultSoundfont;
-#endif
- QString m_backgroundArtwork;
+ QString m_gigDir;
+ QString m_themeDir;
+ QString m_backgroundPicFile;
+ QString m_lmmsRcFile;
+ QString m_version;
QStringList m_recentlyOpenedProjects;
typedef QVector > stringPairVector;
@@ -283,7 +288,5 @@ class LMMS_EXPORT ConfigManager : public QObject
friend class LmmsCore;
-
-} ;
-
+};
#endif
diff --git a/include/Controller.h b/include/Controller.h
index f1e71ad8f59..b60349463ad 100644
--- a/include/Controller.h
+++ b/include/Controller.h
@@ -101,9 +101,9 @@ class LMMS_EXPORT Controller : public Model, public JournallingObject
}
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
- virtual QString nodeName() const;
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ QString nodeName() const override;
static Controller * create( ControllerTypes _tt, Model * _parent );
static Controller * create( const QDomElement & _this,
diff --git a/include/ControllerConnection.h b/include/ControllerConnection.h
index 5c4d5f20ef1..e57cd4db2f5 100644
--- a/include/ControllerConnection.h
+++ b/include/ControllerConnection.h
@@ -85,15 +85,15 @@ class LMMS_EXPORT ControllerConnection : public QObject, public JournallingObjec
static void finalizeConnections();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
static inline const QString classNodeName()
{
return "connection";
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return classNodeName();
}
diff --git a/include/ControllerDialog.h b/include/ControllerDialog.h
index 58a0a94b29d..05e8f3bfedb 100644
--- a/include/ControllerDialog.h
+++ b/include/ControllerDialog.h
@@ -47,7 +47,7 @@ class ControllerDialog : public QWidget, public ModelView
protected:
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
} ;
diff --git a/include/ControllerRackView.h b/include/ControllerRackView.h
index cb393f5cacb..9ef2d9b7ff4 100644
--- a/include/ControllerRackView.h
+++ b/include/ControllerRackView.h
@@ -47,10 +47,10 @@ class ControllerRackView : public QWidget, public SerializingObject
ControllerRackView();
virtual ~ControllerRackView();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "ControllerRackView";
}
@@ -62,7 +62,7 @@ public slots:
void onControllerRemoved( Controller * );
protected:
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
private slots:
void addController();
diff --git a/include/ControllerView.h b/include/ControllerView.h
index 4b215feca9b..d1284845eee 100644
--- a/include/ControllerView.h
+++ b/include/ControllerView.h
@@ -68,9 +68,9 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void modelChanged();
- virtual void mouseDoubleClickEvent( QMouseEvent * event );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void modelChanged() override;
+ void mouseDoubleClickEvent( QMouseEvent * event ) override;
private:
diff --git a/include/DetuningHelper.h b/include/DetuningHelper.h
index de0acc82603..2157b6ba828 100644
--- a/include/DetuningHelper.h
+++ b/include/DetuningHelper.h
@@ -43,17 +43,17 @@ class DetuningHelper : public InlineAutomation
{
}
- virtual float defaultValue() const
+ float defaultValue() const override
{
return 0;
}
- virtual QString displayName() const
+ QString displayName() const override
{
return tr( "Note detuning" );
}
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "detuning";
}
diff --git a/include/DummyEffect.h b/include/DummyEffect.h
index 4f770af3ca3..5509131be73 100644
--- a/include/DummyEffect.h
+++ b/include/DummyEffect.h
@@ -53,25 +53,25 @@ class DummyEffectControls : public EffectControls
{
}
- virtual int controlCount()
+ int controlCount() override
{
return 0;
}
- virtual void saveSettings( QDomDocument &, QDomElement & )
+ void saveSettings( QDomDocument &, QDomElement & ) override
{
}
- virtual void loadSettings( const QDomElement & )
+ void loadSettings( const QDomElement & ) override
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "DummyControls";
}
- virtual EffectControlDialog * createView()
+ EffectControlDialog * createView() override
{
return new DummyEffectControlDialog( this );
}
@@ -95,12 +95,12 @@ class DummyEffect : public Effect
{
}
- virtual EffectControls * controls()
+ EffectControls * controls() override
{
return &m_controls;
}
- bool processAudioBuffer( sampleFrame *, const fpp_t )
+ bool processAudioBuffer( sampleFrame *, const fpp_t ) override
{
return false;
}
diff --git a/include/DummyInstrument.h b/include/DummyInstrument.h
index 87083f26272..a37b089ae4f 100644
--- a/include/DummyInstrument.h
+++ b/include/DummyInstrument.h
@@ -47,26 +47,26 @@ class DummyInstrument : public Instrument
{
}
- virtual void playNote( NotePlayHandle *, sampleFrame * buffer )
+ void playNote( NotePlayHandle *, sampleFrame * buffer ) override
{
memset( buffer, 0, sizeof( sampleFrame ) *
Engine::mixer()->framesPerPeriod() );
}
- virtual void saveSettings( QDomDocument &, QDomElement & )
+ void saveSettings( QDomDocument &, QDomElement & ) override
{
}
- virtual void loadSettings( const QDomElement & )
+ void loadSettings( const QDomElement & ) override
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "dummyinstrument";
}
- virtual PluginView * instantiateView( QWidget * _parent )
+ PluginView * instantiateView( QWidget * _parent ) override
{
return new InstrumentViewFixedSize( this, _parent );
}
diff --git a/include/DummyPlugin.h b/include/DummyPlugin.h
index 49475a2ac4c..ec26da0a34c 100644
--- a/include/DummyPlugin.h
+++ b/include/DummyPlugin.h
@@ -42,22 +42,22 @@ class DummyPlugin : public Plugin
{
}
- virtual void saveSettings( QDomDocument &, QDomElement & )
+ void saveSettings( QDomDocument &, QDomElement & ) override
{
}
- virtual void loadSettings( const QDomElement & )
+ void loadSettings( const QDomElement & ) override
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "DummyPlugin";
}
protected:
- virtual PluginView * instantiateView( QWidget * _parent )
+ PluginView * instantiateView( QWidget * _parent ) override
{
return new PluginView( this, _parent );
}
diff --git a/include/Editor.h b/include/Editor.h
index 26b70ec8791..1c80e9f2f85 100644
--- a/include/Editor.h
+++ b/include/Editor.h
@@ -47,7 +47,7 @@ class Editor : public QMainWindow
DropToolBar * addDropToolBar(Qt::ToolBarArea whereToAdd, QString const & windowTitle);
DropToolBar * addDropToolBar(QWidget * parent, Qt::ToolBarArea whereToAdd, QString const & windowTitle);
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
protected slots:
virtual void play() {}
virtual void record() {}
@@ -92,8 +92,8 @@ class DropToolBar : public QToolBar
void dropped(QDropEvent* event);
protected:
- void dragEnterEvent(QDragEnterEvent* event);
- void dropEvent(QDropEvent* event);
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ void dropEvent(QDropEvent* event) override;
};
diff --git a/include/Effect.h b/include/Effect.h
index 4dc50e8a478..3874aa602ca 100644
--- a/include/Effect.h
+++ b/include/Effect.h
@@ -47,10 +47,10 @@ class LMMS_EXPORT Effect : public Plugin
const Descriptor::SubPluginFeatures::Key * _key );
virtual ~Effect();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "effect";
}
@@ -170,7 +170,7 @@ class LMMS_EXPORT Effect : public Plugin
*/
void checkGate( double _out_sum );
- virtual PluginView * instantiateView( QWidget * );
+ PluginView * instantiateView( QWidget * ) override;
// some effects might not be capable of higher sample-rates so they can
// sample it down before processing and back after processing
diff --git a/include/EffectChain.h b/include/EffectChain.h
index bc1e7df8c68..9ebc4d534b3 100644
--- a/include/EffectChain.h
+++ b/include/EffectChain.h
@@ -40,10 +40,10 @@ class LMMS_EXPORT EffectChain : public Model, public SerializingObject
EffectChain( Model * _parent );
virtual ~EffectChain();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "fxchain";
}
diff --git a/include/EffectControlDialog.h b/include/EffectControlDialog.h
index c0a60cfa65a..4a59489da20 100644
--- a/include/EffectControlDialog.h
+++ b/include/EffectControlDialog.h
@@ -48,7 +48,7 @@ class LMMS_EXPORT EffectControlDialog : public QWidget, public ModelView
protected:
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
EffectControls * m_effectControls;
diff --git a/include/EffectRackView.h b/include/EffectRackView.h
index 0cfc04e15f6..698bad7fb25 100644
--- a/include/EffectRackView.h
+++ b/include/EffectRackView.h
@@ -60,7 +60,7 @@ private slots:
private:
- virtual void modelChanged();
+ void modelChanged() override;
inline EffectChain* fxChain()
{
diff --git a/include/EffectView.h b/include/EffectView.h
index 71a0e7128cb..6e994dd7e5b 100644
--- a/include/EffectView.h
+++ b/include/EffectView.h
@@ -73,9 +73,9 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void modelChanged();
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
+ void modelChanged() override;
private:
diff --git a/include/EnvelopeAndLfoParameters.h b/include/EnvelopeAndLfoParameters.h
index 4824062f3be..0f691adb0bb 100644
--- a/include/EnvelopeAndLfoParameters.h
+++ b/include/EnvelopeAndLfoParameters.h
@@ -91,9 +91,9 @@ class LMMS_EXPORT EnvelopeAndLfoParameters : public Model, public JournallingObj
}
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ QString nodeName() const override
{
return "el";
}
diff --git a/include/EnvelopeAndLfoView.h b/include/EnvelopeAndLfoView.h
index 817b0a6ee18..f6d4fd0a8e7 100644
--- a/include/EnvelopeAndLfoView.h
+++ b/include/EnvelopeAndLfoView.h
@@ -52,12 +52,12 @@ class EnvelopeAndLfoView : public QWidget, public ModelView
protected:
- virtual void modelChanged();
+ void modelChanged() override;
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
protected slots:
diff --git a/include/ExportFilter.h b/include/ExportFilter.h
index 950bacbcdaf..3124b477bfa 100644
--- a/include/ExportFilter.h
+++ b/include/ExportFilter.h
@@ -44,15 +44,15 @@ class LMMS_EXPORT ExportFilter : public Plugin
int tempo, int masterPitch, const QString &filename ) = 0;
protected:
- virtual void saveSettings( QDomDocument &, QDomElement & )
+ void saveSettings( QDomDocument &, QDomElement & ) override
{
}
- virtual void loadSettings( const QDomElement & )
+ void loadSettings( const QDomElement & ) override
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "import_filter";
}
diff --git a/include/ExportProjectDialog.h b/include/ExportProjectDialog.h
index 0eedb9722ce..06c1e3011d1 100644
--- a/include/ExportProjectDialog.h
+++ b/include/ExportProjectDialog.h
@@ -41,14 +41,14 @@ class ExportProjectDialog : public QDialog, public Ui::ExportProjectDialog
ExportProjectDialog( const QString & _file_name, QWidget * _parent, bool multi_export );
protected:
- virtual void reject( void );
- virtual void closeEvent( QCloseEvent * _ce );
+ void reject( void ) override;
+ void closeEvent( QCloseEvent * _ce ) override;
private slots:
void startBtnClicked( void );
void updateTitleBar( int );
- void accept();
+ void accept() override;
void startExport();
void onFileFormatChanged(int);
diff --git a/include/FadeButton.h b/include/FadeButton.h
index 8f56a77b22e..09a4c645791 100644
--- a/include/FadeButton.h
+++ b/include/FadeButton.h
@@ -50,8 +50,8 @@ public slots:
protected:
- virtual void customEvent( QEvent * );
- virtual void paintEvent( QPaintEvent * _pe );
+ void customEvent( QEvent * ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
private:
diff --git a/include/Fader.h b/include/Fader.h
index 018f66e0cc0..2072154459d 100644
--- a/include/Fader.h
+++ b/include/Fader.h
@@ -109,13 +109,13 @@ class LMMS_EXPORT Fader : public QWidget, public FloatModelView
}
private:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void mousePressEvent( QMouseEvent *ev );
- virtual void mouseDoubleClickEvent( QMouseEvent* mouseEvent );
- virtual void mouseMoveEvent( QMouseEvent *ev );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void wheelEvent( QWheelEvent *ev );
- virtual void paintEvent( QPaintEvent *ev );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void mousePressEvent( QMouseEvent *ev ) override;
+ void mouseDoubleClickEvent( QMouseEvent* mouseEvent ) override;
+ void mouseMoveEvent( QMouseEvent *ev ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void wheelEvent( QWheelEvent *ev ) override;
+ void paintEvent( QPaintEvent *ev ) override;
inline bool clips(float const & value) const { return value >= 1.0f; }
diff --git a/include/FileBrowser.h b/include/FileBrowser.h
index 4b92dd5496d..9b56a8dbd52 100644
--- a/include/FileBrowser.h
+++ b/include/FileBrowser.h
@@ -61,7 +61,7 @@ private slots:
void giveFocusToFilter();
private:
- virtual void keyPressEvent( QKeyEvent * ke );
+ void keyPressEvent( QKeyEvent * ke ) override;
void addItems( const QString & path );
@@ -93,10 +93,10 @@ class FileBrowserTreeWidget : public QTreeWidget
protected:
- virtual void contextMenuEvent( QContextMenuEvent * e );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void mouseMoveEvent( QMouseEvent * me );
- virtual void mouseReleaseEvent( QMouseEvent * me );
+ void contextMenuEvent( QContextMenuEvent * e ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void mouseMoveEvent( QMouseEvent * me ) override;
+ void mouseReleaseEvent( QMouseEvent * me ) override;
private:
diff --git a/include/FxLine.h b/include/FxLine.h
index ef8313e7488..c16dcd5f598 100644
--- a/include/FxLine.h
+++ b/include/FxLine.h
@@ -51,10 +51,10 @@ class FxLine : public QWidget
FxLine( QWidget * _parent, FxMixerView * _mv, int _channelIndex);
~FxLine();
- virtual void paintEvent( QPaintEvent * );
- virtual void mousePressEvent( QMouseEvent * );
- virtual void mouseDoubleClickEvent( QMouseEvent * );
- virtual void contextMenuEvent( QContextMenuEvent * );
+ void paintEvent( QPaintEvent * ) override;
+ void mousePressEvent( QMouseEvent * ) override;
+ void mouseDoubleClickEvent( QMouseEvent * ) override;
+ void contextMenuEvent( QContextMenuEvent * ) override;
inline int channelIndex() { return m_channelIndex; }
void setChannelIndex(int index);
@@ -79,7 +79,7 @@ class FxLine : public QWidget
static const int FxLineHeight;
- bool eventFilter (QObject *dist, QEvent *event);
+ bool eventFilter (QObject *dist, QEvent *event) override;
private:
void drawFxLine( QPainter* p, const FxLine *fxLine, bool isActive, bool sendToThis, bool receiveFromThis );
diff --git a/include/FxLineLcdSpinBox.h b/include/FxLineLcdSpinBox.h
index fa001b2bbe8..eeb104c5c41 100644
--- a/include/FxLineLcdSpinBox.h
+++ b/include/FxLineLcdSpinBox.h
@@ -42,8 +42,8 @@ class FxLineLcdSpinBox : public LcdSpinBox
void setTrackView(TrackView * tv);
protected:
- virtual void mouseDoubleClickEvent(QMouseEvent* event);
- virtual void contextMenuEvent(QContextMenuEvent* event);
+ void mouseDoubleClickEvent(QMouseEvent* event) override;
+ void contextMenuEvent(QContextMenuEvent* event) override;
private:
TrackView * m_tv;
diff --git a/include/FxMixer.h b/include/FxMixer.h
index 2c7ef3c5ae5..68b69d9bc88 100644
--- a/include/FxMixer.h
+++ b/include/FxMixer.h
@@ -67,7 +67,7 @@ class FxChannel : public ThreadableJob
// pointers to other channels that send to this one
FxRouteVector m_receives;
- virtual bool requiresProcessing() const { return true; }
+ bool requiresProcessing() const override { return true; }
void unmuteForSolo();
@@ -76,7 +76,7 @@ class FxChannel : public ThreadableJob
void processed();
private:
- virtual void doProcessing();
+ void doProcessing() override;
};
@@ -133,10 +133,10 @@ class LMMS_EXPORT FxMixer : public Model, public JournallingObject
void prepareMasterMix();
void masterMix( sampleFrame * _buf );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "fxmixer";
}
diff --git a/include/FxMixerView.h b/include/FxMixerView.h
index 9b07637edef..a7662321ac7 100644
--- a/include/FxMixerView.h
+++ b/include/FxMixerView.h
@@ -64,10 +64,10 @@ class LMMS_EXPORT FxMixerView : public QWidget, public ModelView,
FxMixerView();
virtual ~FxMixerView();
- virtual void keyPressEvent(QKeyEvent * e);
+ void keyPressEvent(QKeyEvent * e) override;
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
inline FxLine * currentFxLine()
{
@@ -110,7 +110,7 @@ public slots:
int addNewChannel();
protected:
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
private slots:
void updateFaders();
diff --git a/include/Graph.h b/include/Graph.h
index 1bee05c4118..2a6fc4f8a15 100644
--- a/include/Graph.h
+++ b/include/Graph.h
@@ -87,19 +87,19 @@ class LMMS_EXPORT Graph : public QWidget, public ModelView
signals:
void drawn();
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void dropEvent( QDropEvent * _de );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
+ void paintEvent( QPaintEvent * _pe ) override;
+ void dropEvent( QDropEvent * _de ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseMoveEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
protected slots:
void updateGraph( int _startPos, int _endPos );
void updateGraph();
private:
- virtual void modelChanged();
+ void modelChanged() override;
void changeSampleAt( int _x, int _y );
void drawLineAt( int _x, int _y, int _lastx );
diff --git a/include/GroupBox.h b/include/GroupBox.h
index 8a857199fac..88428b1aaef 100644
--- a/include/GroupBox.h
+++ b/include/GroupBox.h
@@ -42,7 +42,7 @@ class GroupBox : public QWidget, public BoolModelView
GroupBox( const QString & _caption, QWidget * _parent = NULL );
virtual ~GroupBox();
- virtual void modelChanged();
+ void modelChanged() override;
PixmapButton * ledButton()
{
@@ -56,8 +56,8 @@ class GroupBox : public QWidget, public BoolModelView
protected:
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
private:
diff --git a/include/ImportFilter.h b/include/ImportFilter.h
index 166c1bfda88..ccefd3db261 100644
--- a/include/ImportFilter.h
+++ b/include/ImportFilter.h
@@ -89,15 +89,15 @@ class LMMS_EXPORT ImportFilter : public Plugin
m_file.ungetChar( _ch );
}
- virtual void saveSettings( QDomDocument &, QDomElement & )
+ void saveSettings( QDomDocument &, QDomElement & ) override
{
}
- virtual void loadSettings( const QDomElement & )
+ void loadSettings( const QDomElement & ) override
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "import_filter";
}
diff --git a/include/InlineAutomation.h b/include/InlineAutomation.h
index d70121a45c9..431ecbc81be 100644
--- a/include/InlineAutomation.h
+++ b/include/InlineAutomation.h
@@ -79,8 +79,8 @@ class InlineAutomation : public FloatModel, public sharedObject
return m_autoPattern;
}
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
private:
diff --git a/include/Instrument.h b/include/Instrument.h
index 2179a1f721f..438197cd8f0 100644
--- a/include/Instrument.h
+++ b/include/Instrument.h
@@ -110,7 +110,7 @@ class LMMS_EXPORT Instrument : public Plugin
return true;
}
- virtual QString fullDisplayName() const;
+ QString fullDisplayName() const override;
// --------------------------------------------------------------------
// provided functions:
diff --git a/include/InstrumentFunctionViews.h b/include/InstrumentFunctionViews.h
index 8ac13e1b9da..58f915b15ba 100644
--- a/include/InstrumentFunctionViews.h
+++ b/include/InstrumentFunctionViews.h
@@ -49,7 +49,7 @@ class InstrumentFunctionNoteStackingView : public QWidget, public ModelView
private:
- virtual void modelChanged();
+ void modelChanged() override;
InstrumentFunctionNoteStacking * m_cc;
@@ -72,7 +72,7 @@ class InstrumentFunctionArpeggioView : public QWidget, public ModelView
private:
- virtual void modelChanged();
+ void modelChanged() override;
InstrumentFunctionArpeggio * m_a;
GroupBox * m_arpGroupBox;
diff --git a/include/InstrumentFunctions.h b/include/InstrumentFunctions.h
index 0055c6c97ce..b45484e7193 100644
--- a/include/InstrumentFunctions.h
+++ b/include/InstrumentFunctions.h
@@ -54,10 +54,10 @@ class InstrumentFunctionNoteStacking : public Model, public JournallingObject
void processNote( NotePlayHandle* n );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "chordcreator";
}
@@ -176,10 +176,10 @@ class InstrumentFunctionArpeggio : public Model, public JournallingObject
void processNote( NotePlayHandle* n );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "arpeggiator";
}
diff --git a/include/InstrumentMidiIOView.h b/include/InstrumentMidiIOView.h
index 38f4419425e..e63b4842575 100644
--- a/include/InstrumentMidiIOView.h
+++ b/include/InstrumentMidiIOView.h
@@ -47,7 +47,7 @@ class InstrumentMidiIOView : public QWidget, public ModelView
private:
- virtual void modelChanged();
+ void modelChanged() override;
GroupBox * m_midiInputGroupBox;
LcdSpinBox * m_inputChannelSpinBox;
diff --git a/include/InstrumentPlayHandle.h b/include/InstrumentPlayHandle.h
index 426b413ce34..ac5fc322240 100644
--- a/include/InstrumentPlayHandle.h
+++ b/include/InstrumentPlayHandle.h
@@ -40,7 +40,7 @@ class LMMS_EXPORT InstrumentPlayHandle : public PlayHandle
}
- virtual void play( sampleFrame * _working_buffer )
+ void play( sampleFrame * _working_buffer ) override
{
// ensure that all our nph's have been processed first
ConstNotePlayHandleList nphv = NotePlayHandle::nphsOfInstrumentTrack( m_instrument->instrumentTrack(), true );
@@ -65,12 +65,12 @@ class LMMS_EXPORT InstrumentPlayHandle : public PlayHandle
m_instrument->play( _working_buffer );
}
- virtual bool isFinished() const
+ bool isFinished() const override
{
return false;
}
- virtual bool isFromTrack( const Track* _track ) const
+ bool isFromTrack( const Track* _track ) const override
{
return m_instrument->isFromTrack( _track );
}
diff --git a/include/InstrumentSoundShaping.h b/include/InstrumentSoundShaping.h
index a159f838048..1b8df38d3f1 100644
--- a/include/InstrumentSoundShaping.h
+++ b/include/InstrumentSoundShaping.h
@@ -57,9 +57,9 @@ class InstrumentSoundShaping : public Model, public JournallingObject
float volumeLevel( NotePlayHandle * _n, const f_cnt_t _frame );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return "eldata";
}
diff --git a/include/InstrumentSoundShapingView.h b/include/InstrumentSoundShapingView.h
index a409e8446b2..06d53232ce3 100644
--- a/include/InstrumentSoundShapingView.h
+++ b/include/InstrumentSoundShapingView.h
@@ -50,7 +50,7 @@ class InstrumentSoundShapingView : public QWidget, public ModelView
private:
- virtual void modelChanged();
+ void modelChanged() override;
InstrumentSoundShaping * m_ss;
diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h
index 72e0d04cc44..d72331e5284 100644
--- a/include/InstrumentTrack.h
+++ b/include/InstrumentTrack.h
@@ -80,8 +80,8 @@ class LMMS_EXPORT InstrumentTrack : public Track, public MidiEventProcessor
MidiEvent applyMasterKey( const MidiEvent& event );
- virtual void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 );
- virtual void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 );
+ void processInEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) override;
+ void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime(), f_cnt_t offset = 0 ) override;
// silence all running notes played by this track
void silenceAllNotes( bool removeIPH = false );
@@ -111,7 +111,7 @@ class LMMS_EXPORT InstrumentTrack : public Track, public MidiEventProcessor
void deleteNotePluginData( NotePlayHandle * _n );
// name-stuff
- virtual void setName( const QString & _new_name );
+ void setName( const QString & _new_name ) override;
// translate given key of a note-event to absolute key (i.e.
// add global master-pitch and base-note of this instrument track)
@@ -131,18 +131,18 @@ class LMMS_EXPORT InstrumentTrack : public Track, public MidiEventProcessor
// play everything in given frame-range - creates note-play-handles
virtual bool play( const MidiTime & _start, const fpp_t _frames,
- const f_cnt_t _frame_base, int _tco_num = -1 );
+ const f_cnt_t _frame_base, int _tco_num = -1 ) override;
// create new view for me
- virtual TrackView * createView( TrackContainerView* tcv );
+ TrackView * createView( TrackContainerView* tcv ) override;
// create new track-content-object = pattern
- virtual TrackContentObject * createTCO( const MidiTime & _pos );
+ TrackContentObject * createTCO( const MidiTime & _pos ) override;
// called by track
virtual void saveTrackSpecificSettings( QDomDocument & _doc,
- QDomElement & _parent );
- virtual void loadTrackSpecificSettings( const QDomElement & _this );
+ QDomElement & _parent ) override;
+ void loadTrackSpecificSettings( const QDomElement & _this ) override;
using Track::setJournalling;
@@ -225,7 +225,7 @@ class LMMS_EXPORT InstrumentTrack : public Track, public MidiEventProcessor
protected:
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "instrumenttrack";
}
@@ -317,12 +317,12 @@ class InstrumentTrackView : public TrackView
static void cleanupWindowCache();
// Create a menu for assigning/creating channels for this track
- QMenu * createFxMenu( QString title, QString newFxLabel );
+ QMenu * createFxMenu( QString title, QString newFxLabel ) override;
protected:
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
private slots:
@@ -404,8 +404,8 @@ class InstrumentTrackWindow : public QWidget, public ModelView,
static void dragEnterEventGeneric( QDragEnterEvent * _dee );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
public slots:
@@ -417,11 +417,11 @@ public slots:
protected:
// capture close-events for toggling instrument-track-button
- virtual void closeEvent( QCloseEvent * _ce );
- virtual void focusInEvent( QFocusEvent * _fe );
+ void closeEvent( QCloseEvent * _ce ) override;
+ void focusInEvent( QFocusEvent * _fe ) override;
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
protected slots:
@@ -430,7 +430,7 @@ protected slots:
void viewPrevInstrument();
private:
- virtual void modelChanged();
+ void modelChanged() override;
void viewInstrumentInDirection(int d);
//! adjust size of any child widget of the main tab
//! required to keep the old look when using a variable sized tab widget
diff --git a/include/JournallingObject.h b/include/JournallingObject.h
index 6974bef84da..f4755994b9e 100644
--- a/include/JournallingObject.h
+++ b/include/JournallingObject.h
@@ -59,9 +59,9 @@ class LMMS_EXPORT JournallingObject : public SerializingObject
void addJournalCheckPoint();
virtual QDomElement saveState( QDomDocument & _doc,
- QDomElement & _parent );
+ QDomElement & _parent ) override;
- virtual void restoreState( const QDomElement & _this );
+ void restoreState( const QDomElement & _this ) override;
inline bool isJournalling() const
{
diff --git a/include/Knob.h b/include/Knob.h
index b8d460f4593..4f806473118 100644
--- a/include/Knob.h
+++ b/include/Knob.h
@@ -124,16 +124,16 @@ class LMMS_EXPORT Knob : public QWidget, public FloatModelView
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
- virtual void focusOutEvent( QFocusEvent * _fe );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _me );
- virtual void wheelEvent( QWheelEvent * _me );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
+ void focusOutEvent( QFocusEvent * _fe ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void mouseMoveEvent( QMouseEvent * _me ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * _me ) override;
+ void wheelEvent( QWheelEvent * _me ) override;
virtual float getValue( const QPoint & _p );
@@ -145,7 +145,7 @@ private slots:
private:
QString displayValue() const;
- virtual void doConnections();
+ void doConnections() override;
QLineF calculateLine( const QPointF & _mid, float _radius,
float _innerRadius = 1) const;
diff --git a/include/LadspaControl.h b/include/LadspaControl.h
index 2ad895b3f5a..34f6c9ae218 100644
--- a/include/LadspaControl.h
+++ b/include/LadspaControl.h
@@ -74,7 +74,7 @@ class LMMS_EXPORT LadspaControl : public Model, public JournallingObject
virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent, const QString & _name );
virtual void loadSettings( const QDomElement & _this, const QString & _name );
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "port";
}
@@ -92,13 +92,13 @@ protected slots:
void linkStateChanged();
protected:
- virtual void saveSettings( QDomDocument& doc, QDomElement& element )
+ void saveSettings( QDomDocument& doc, QDomElement& element ) override
{
Q_UNUSED(doc)
Q_UNUSED(element)
}
- virtual void loadSettings( const QDomElement& element )
+ void loadSettings( const QDomElement& element ) override
{
Q_UNUSED(element)
}
diff --git a/include/LcdSpinBox.h b/include/LcdSpinBox.h
index b63dfaa4037..379b743ace4 100644
--- a/include/LcdSpinBox.h
+++ b/include/LcdSpinBox.h
@@ -40,7 +40,7 @@ class LMMS_EXPORT LcdSpinBox : public LcdWidget, public IntModelView
virtual ~LcdSpinBox() = default;
- virtual void modelChanged()
+ void modelChanged() override
{
ModelView::modelChanged();
update();
@@ -65,12 +65,12 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void wheelEvent( QWheelEvent * _we );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseMoveEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void wheelEvent( QWheelEvent * _we ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
private:
bool m_mouseMoving;
diff --git a/include/LcdWidget.h b/include/LcdWidget.h
index db969dd33fd..f4c7d1579e1 100644
--- a/include/LcdWidget.h
+++ b/include/LcdWidget.h
@@ -71,7 +71,7 @@ public slots:
protected:
- virtual void paintEvent( QPaintEvent * pe );
+ void paintEvent( QPaintEvent * pe ) override;
virtual void updateSize();
diff --git a/include/LedCheckbox.h b/include/LedCheckbox.h
index 723bae6a901..66d7ce07e7e 100644
--- a/include/LedCheckbox.h
+++ b/include/LedCheckbox.h
@@ -64,7 +64,7 @@ class LMMS_EXPORT LedCheckBox : public AutomatableButton
Q_PROPERTY( QString text READ text WRITE setText )
protected:
- virtual void paintEvent( QPaintEvent * _pe );
+ void paintEvent( QPaintEvent * _pe ) override;
private:
diff --git a/include/LfoController.h b/include/LfoController.h
index 9dfbba6715a..8fc35fd0903 100644
--- a/include/LfoController.h
+++ b/include/LfoController.h
@@ -49,18 +49,18 @@ class LfoController : public Controller
virtual ~LfoController();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
- virtual QString nodeName() const;
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ QString nodeName() const override;
public slots:
- virtual ControllerDialog * createDialog( QWidget * _parent );
+ ControllerDialog * createDialog( QWidget * _parent ) override;
protected:
// The internal per-controller value updating function
- virtual void updateValueBuffer();
+ void updateValueBuffer() override;
FloatModel m_baseModel;
TempoSyncKnobModel m_speedModel;
@@ -98,8 +98,8 @@ class LfoControllerDialog : public ControllerDialog
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void modelChanged();
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void modelChanged() override;
LfoController * m_lfo;
diff --git a/include/LmmsPalette.h b/include/LmmsPalette.h
index 49b831346db..a8ee5d1c8ab 100644
--- a/include/LmmsPalette.h
+++ b/include/LmmsPalette.h
@@ -43,8 +43,6 @@ class LMMS_EXPORT LmmsPalette : public QWidget
Q_PROPERTY( QColor brightText READ brightText WRITE setBrightText )
Q_PROPERTY( QColor highlight READ highlight WRITE setHighlight )
Q_PROPERTY( QColor highlightedText READ highlightedText WRITE setHighlightedText )
- Q_PROPERTY( QColor toolTipText READ toolTipText WRITE setToolTipText )
- Q_PROPERTY( QColor toolTipBase READ toolTipBase WRITE setToolTipBase )
public:
LmmsPalette( QWidget * parent, QStyle * stylearg );
@@ -65,8 +63,6 @@ class LMMS_EXPORT LmmsPalette : public QWidget
ACCESSMET( brightText, setBrightText )
ACCESSMET( highlight, setHighlight )
ACCESSMET( highlightedText, setHighlightedText )
- ACCESSMET( toolTipText, setToolTipText )
- ACCESSMET( toolTipBase, setToolTipBase )
#undef ACCESSMET
@@ -83,8 +79,6 @@ class LMMS_EXPORT LmmsPalette : public QWidget
QColor m_brightText;
QColor m_highlight;
QColor m_highlightedText;
- QColor m_toolTipText;
- QColor m_toolTipBase;
};
diff --git a/include/LmmsStyle.h b/include/LmmsStyle.h
index 88b8a21124f..ccf14396c8f 100644
--- a/include/LmmsStyle.h
+++ b/include/LmmsStyle.h
@@ -67,21 +67,21 @@ class LmmsStyle : public QProxyStyle
{
}
- virtual QPalette standardPalette( void ) const;
+ QPalette standardPalette( void ) const override;
virtual void drawComplexControl(
ComplexControl control,
const QStyleOptionComplex * option,
QPainter *painter,
- const QWidget *widget ) const;
+ const QWidget *widget ) const override;
virtual void drawPrimitive( PrimitiveElement element,
const QStyleOption *option,
QPainter *painter,
- const QWidget *widget = 0 ) const;
+ const QWidget *widget = 0 ) const override;
virtual int pixelMetric( PixelMetric metric,
const QStyleOption * option = 0,
- const QWidget * widget = 0 ) const;
+ const QWidget * widget = 0 ) const override;
static QPalette * s_palette;
diff --git a/include/MainApplication.h b/include/MainApplication.h
index 41d6704192d..d28900213c9 100644
--- a/include/MainApplication.h
+++ b/include/MainApplication.h
@@ -42,7 +42,7 @@ class MainApplication : public QApplication
{
public:
MainApplication(int& argc, char** argv);
- bool event(QEvent* event);
+ bool event(QEvent* event) override;
#ifdef LMMS_BUILD_WIN32
bool winEventFilter(MSG* msg, long* result);
bool nativeEventFilter(const QByteArray& eventType, void* message,
diff --git a/include/MainWindow.h b/include/MainWindow.h
index 74e569653fc..5dc10232199 100644
--- a/include/MainWindow.h
+++ b/include/MainWindow.h
@@ -176,11 +176,11 @@ private slots:
void onExportProjectMidi();
protected:
- virtual void closeEvent( QCloseEvent * _ce );
- virtual void focusOutEvent( QFocusEvent * _fe );
- virtual void keyPressEvent( QKeyEvent * _ke );
- virtual void keyReleaseEvent( QKeyEvent * _ke );
- virtual void timerEvent( QTimerEvent * _ev );
+ void closeEvent( QCloseEvent * _ce ) override;
+ void focusOutEvent( QFocusEvent * _fe ) override;
+ void keyPressEvent( QKeyEvent * _ke ) override;
+ void keyReleaseEvent( QKeyEvent * _ke ) override;
+ void timerEvent( QTimerEvent * _ev ) override;
private:
diff --git a/include/MeterDialog.h b/include/MeterDialog.h
index 5399c4a9a59..da254c7c7cb 100644
--- a/include/MeterDialog.h
+++ b/include/MeterDialog.h
@@ -40,7 +40,7 @@ class MeterDialog : public QWidget, public ModelView
MeterDialog( QWidget * _parent, bool _simple = false );
virtual ~MeterDialog();
- virtual void modelChanged();
+ void modelChanged() override;
private:
diff --git a/include/MidiAlsaRaw.h b/include/MidiAlsaRaw.h
index 81f288c2214..69f9366f161 100644
--- a/include/MidiAlsaRaw.h
+++ b/include/MidiAlsaRaw.h
@@ -62,8 +62,8 @@ class MidiAlsaRaw : public QThread, public MidiClientRaw
protected:
- virtual void sendByte( const unsigned char c );
- virtual void run();
+ void sendByte( const unsigned char c ) override;
+ void run() override;
private:
diff --git a/include/MidiAlsaSeq.h b/include/MidiAlsaSeq.h
index 0406b42b944..b6e4987210b 100644
--- a/include/MidiAlsaSeq.h
+++ b/include/MidiAlsaSeq.h
@@ -67,44 +67,44 @@ class MidiAlsaSeq : public QThread, public MidiClient
virtual void processOutEvent( const MidiEvent & _me,
const MidiTime & _time,
- const MidiPort * _port );
+ const MidiPort * _port ) override;
- virtual void applyPortMode( MidiPort * _port );
- virtual void applyPortName( MidiPort * _port );
+ void applyPortMode( MidiPort * _port ) override;
+ void applyPortName( MidiPort * _port ) override;
- virtual void removePort( MidiPort * _port );
+ void removePort( MidiPort * _port ) override;
// list seq-ports from ALSA
- virtual QStringList readablePorts() const
+ QStringList readablePorts() const override
{
return m_readablePorts;
}
- virtual QStringList writablePorts() const
+ QStringList writablePorts() const override
{
return m_writablePorts;
}
// return name of port which specified MIDI event came from
- virtual QString sourcePortName( const MidiEvent & ) const;
+ QString sourcePortName( const MidiEvent & ) const override;
// (un)subscribe given MidiPort to/from destination-port
virtual void subscribeReadablePort( MidiPort * _port,
const QString & _dest,
- bool _subscribe = true );
+ bool _subscribe = true ) override;
virtual void subscribeWritablePort( MidiPort * _port,
const QString & _dest,
- bool _subscribe = true );
+ bool _subscribe = true ) override;
virtual void connectRPChanged( QObject * _receiver,
- const char * _member )
+ const char * _member ) override
{
connect( this, SIGNAL( readablePortsChanged() ),
_receiver, _member );
}
virtual void connectWPChanged( QObject * _receiver,
- const char * _member )
+ const char * _member ) override
{
connect( this, SIGNAL( writablePortsChanged() ),
_receiver, _member );
@@ -117,7 +117,7 @@ private slots:
private:
- virtual void run();
+ void run() override;
#ifdef LMMS_HAVE_ALSA
QMutex m_seqMutex;
diff --git a/include/MidiClient.h b/include/MidiClient.h
index 293f2b3daa9..f06cac89394 100644
--- a/include/MidiClient.h
+++ b/include/MidiClient.h
@@ -124,7 +124,7 @@ class MidiClientRaw : public MidiClient
virtual ~MidiClientRaw();
// we are raw-clients for sure!
- virtual bool isRaw() const
+ bool isRaw() const override
{
return true;
}
@@ -141,7 +141,7 @@ class MidiClientRaw : public MidiClient
private:
// this does MIDI-event-process
void processParsedEvent();
- virtual void processOutEvent( const MidiEvent& event, const MidiTime& time, const MidiPort* port );
+ void processOutEvent( const MidiEvent& event, const MidiTime& time, const MidiPort* port ) override;
// small helper function returning length of a certain event - this
// is necessary for parsing raw-MIDI-data
diff --git a/include/MidiController.h b/include/MidiController.h
index d661b8d0f36..43f928a25cb 100644
--- a/include/MidiController.h
+++ b/include/MidiController.h
@@ -44,30 +44,30 @@ class MidiController : public Controller, public MidiEventProcessor
virtual ~MidiController();
virtual void processInEvent( const MidiEvent & _me,
- const MidiTime & _time, f_cnt_t offset = 0 );
+ const MidiTime & _time, f_cnt_t offset = 0 ) override;
virtual void processOutEvent( const MidiEvent& _me,
- const MidiTime & _time, f_cnt_t offset = 0 )
+ const MidiTime & _time, f_cnt_t offset = 0 ) override
{
// No output yet
}
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
- virtual QString nodeName() const;
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ QString nodeName() const override;
// Used by controllerConnectionDialog to copy
void subscribeReadablePorts( const MidiPort::Map & _map );
public slots:
- virtual ControllerDialog * createDialog( QWidget * _parent );
+ ControllerDialog * createDialog( QWidget * _parent ) override;
void updateName();
protected:
// The internal per-controller get-value function
- virtual void updateValueBuffer();
+ void updateValueBuffer() override;
MidiPort m_midiPort;
diff --git a/include/MidiDummy.h b/include/MidiDummy.h
index dffd1ce5110..f809d3c3630 100644
--- a/include/MidiDummy.h
+++ b/include/MidiDummy.h
@@ -56,7 +56,7 @@ class MidiDummy : public MidiClientRaw
protected:
- virtual void sendByte( const unsigned char )
+ void sendByte( const unsigned char ) override
{
}
diff --git a/include/MidiOss.h b/include/MidiOss.h
index 27ebf077154..7e1f179efd6 100644
--- a/include/MidiOss.h
+++ b/include/MidiOss.h
@@ -58,8 +58,8 @@ class MidiOss : public QThread, public MidiClientRaw
}
protected:
- virtual void sendByte( const unsigned char c );
- virtual void run();
+ void sendByte( const unsigned char c ) override;
+ void run() override;
private:
diff --git a/include/MidiPort.h b/include/MidiPort.h
index 07c61d788a6..e9cba39ed2f 100644
--- a/include/MidiPort.h
+++ b/include/MidiPort.h
@@ -103,10 +103,10 @@ class MidiPort : public Model, public SerializingObject
void processOutEvent( const MidiEvent& event, const MidiTime& time = MidiTime() );
- virtual void saveSettings( QDomDocument& doc, QDomElement& thisElement );
- virtual void loadSettings( const QDomElement& thisElement );
+ void saveSettings( QDomDocument& doc, QDomElement& thisElement ) override;
+ void loadSettings( const QDomElement& thisElement ) override;
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "midiport";
}
diff --git a/include/MidiPortMenu.h b/include/MidiPortMenu.h
index b963a7bd99a..ce39c4aace0 100644
--- a/include/MidiPortMenu.h
+++ b/include/MidiPortMenu.h
@@ -51,7 +51,7 @@ protected slots:
private:
- virtual void modelChanged();
+ void modelChanged() override;
MidiPort::Modes m_mode;
diff --git a/include/MidiSndio.h b/include/MidiSndio.h
index d115993fe99..14ecfa0e94a 100644
--- a/include/MidiSndio.h
+++ b/include/MidiSndio.h
@@ -59,8 +59,8 @@ class MidiSndio : public QThread, public MidiClientRaw
protected:
- virtual void sendByte(const unsigned char c);
- virtual void run(void);
+ void sendByte(const unsigned char c) override;
+ void run(void) override;
private:
struct mio_hdl *m_hdl;
diff --git a/include/MidiTime.h b/include/MidiTime.h
index 0e8015e04cf..952b4b6d596 100644
--- a/include/MidiTime.h
+++ b/include/MidiTime.h
@@ -32,10 +32,10 @@
#include "lmms_export.h"
#include "lmms_basics.h"
-// note: 1 "Tact" = 1 Measure
-const int DefaultTicksPerTact = 192;
-const int DefaultStepsPerTact = 16;
-const int DefaultBeatsPerTact = DefaultTicksPerTact / DefaultStepsPerTact;
+// note: a bar was erroneously called "tact" in older versions of LMMS
+const int DefaultTicksPerBar = 192;
+const int DefaultStepsPerBar = 16;
+const int DefaultBeatsPerBar = DefaultTicksPerBar / DefaultStepsPerBar;
class MeterModel;
@@ -60,19 +60,19 @@ class LMMS_EXPORT TimeSig
class LMMS_EXPORT MidiTime
{
public:
- MidiTime( const tact_t tact, const tick_t ticks );
+ MidiTime( const bar_t bar, const tick_t ticks );
MidiTime( const tick_t ticks = 0 );
MidiTime quantize(float) const;
- MidiTime toAbsoluteTact() const;
+ MidiTime toAbsoluteBar() const;
MidiTime& operator+=( const MidiTime& time );
MidiTime& operator-=( const MidiTime& time );
- // return the tact, rounded down and 0-based
- tact_t getTact() const;
- // return the tact, rounded up and 0-based
- tact_t nextFullTact() const;
+ // return the bar, rounded down and 0-based
+ bar_t getBar() const;
+ // return the bar, rounded up and 0-based
+ bar_t nextFullBar() const;
void setTicks( tick_t ticks );
tick_t getTicks() const;
@@ -90,21 +90,21 @@ class LMMS_EXPORT MidiTime
// calculate number of frame that are needed this time
f_cnt_t frames( const float framesPerTick ) const;
- double getTimeInMilliseconds(bpm_t beatsPerMinute) const;
+ double getTimeInMilliseconds( bpm_t beatsPerMinute ) const;
static MidiTime fromFrames( const f_cnt_t frames, const float framesPerTick );
- static tick_t ticksPerTact();
- static tick_t ticksPerTact( const TimeSig &sig );
- static int stepsPerTact();
- static void setTicksPerTact( tick_t tpt );
+ static tick_t ticksPerBar();
+ static tick_t ticksPerBar( const TimeSig &sig );
+ static int stepsPerBar();
+ static void setTicksPerBar( tick_t tpt );
static MidiTime stepPosition( int step );
- static double ticksToMilliseconds(tick_t ticks, bpm_t beatsPerMinute);
- static double ticksToMilliseconds(double ticks, bpm_t beatsPerMinute);
+ static double ticksToMilliseconds( tick_t ticks, bpm_t beatsPerMinute );
+ static double ticksToMilliseconds( double ticks, bpm_t beatsPerMinute );
private:
tick_t m_ticks;
- static tick_t s_ticksPerTact;
+ static tick_t s_ticksPerBar;
} ;
diff --git a/include/Mixer.h b/include/Mixer.h
index 69ea0d12d86..32eeb8977bf 100644
--- a/include/Mixer.h
+++ b/include/Mixer.h
@@ -345,7 +345,7 @@ class LMMS_EXPORT Mixer : public QObject
fifo * m_fifo;
volatile bool m_writing;
- virtual void run();
+ void run() override;
void write( surroundSampleFrame * buffer );
diff --git a/include/MixerWorkerThread.h b/include/MixerWorkerThread.h
index 7c3792392fb..2d49dce09f2 100644
--- a/include/MixerWorkerThread.h
+++ b/include/MixerWorkerThread.h
@@ -106,7 +106,7 @@ class MixerWorkerThread : public QThread
private:
- virtual void run();
+ void run() override;
static JobQueue globalJobQueue;
static QWaitCondition * queueReadyWaitCond;
diff --git a/include/NStateButton.h b/include/NStateButton.h
index d9e56b892f1..95d36c253db 100644
--- a/include/NStateButton.h
+++ b/include/NStateButton.h
@@ -61,7 +61,7 @@ public slots:
protected:
- virtual void mousePressEvent( QMouseEvent * _me );
+ void mousePressEvent( QMouseEvent * _me ) override;
private:
diff --git a/include/Note.h b/include/Note.h
index 0eae8f6b05c..30969b4c8f9 100644
--- a/include/Note.h
+++ b/include/Note.h
@@ -200,7 +200,7 @@ class LMMS_EXPORT Note : public SerializingObject
return "note";
}
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return classNodeName();
}
@@ -218,8 +218,8 @@ class LMMS_EXPORT Note : public SerializingObject
protected:
- virtual void saveSettings( QDomDocument & doc, QDomElement & parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & doc, QDomElement & parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
private:
diff --git a/include/NotePlayHandle.h b/include/NotePlayHandle.h
index ae55c9ebb6a..3dba0f277d7 100644
--- a/include/NotePlayHandle.h
+++ b/include/NotePlayHandle.h
@@ -74,8 +74,8 @@ class LMMS_EXPORT NotePlayHandle : public PlayHandle, public Note
return p;
}
- virtual void setVolume( volume_t volume );
- virtual void setPanning( panning_t panning );
+ void setVolume( volume_t volume ) override;
+ void setPanning( panning_t panning ) override;
int midiKey() const;
int midiChannel() const
@@ -105,10 +105,10 @@ class LMMS_EXPORT NotePlayHandle : public PlayHandle, public Note
}
/*! Renders one chunk using the attached instrument into the buffer */
- virtual void play( sampleFrame* buffer );
+ void play( sampleFrame* buffer ) override;
/*! Returns whether playback of note is finished and thus handle can be deleted */
- virtual bool isFinished() const
+ bool isFinished() const override
{
return m_released && framesLeft() <= 0;
}
@@ -120,7 +120,7 @@ class LMMS_EXPORT NotePlayHandle : public PlayHandle, public Note
fpp_t framesLeftForCurrentPeriod() const;
/*! Returns whether the play handle plays on a certain track */
- virtual bool isFromTrack( const Track* _track ) const;
+ bool isFromTrack( const Track* _track ) const override;
/*! Releases the note (and plays release frames */
void noteOff( const f_cnt_t offset = 0 );
diff --git a/include/Pattern.h b/include/Pattern.h
index 3a1cc941c3a..5192da9faf8 100644
--- a/include/Pattern.h
+++ b/include/Pattern.h
@@ -94,9 +94,9 @@ class LMMS_EXPORT Pattern : public TrackContentObject
Pattern * nextPattern() const;
// settings-management
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return "pattern";
}
@@ -109,7 +109,7 @@ class LMMS_EXPORT Pattern : public TrackContentObject
bool empty();
- virtual TrackContentObjectView * createView( TrackView * _tv );
+ TrackContentObjectView * createView( TrackView * _tv ) override;
using Model::dataChanged;
@@ -182,7 +182,7 @@ class PatternView : public TrackContentObjectView
void setMutedNoteBorderColor(QColor const & color) { m_mutedNoteBorderColor = color; }
public slots:
- virtual void update();
+ void update() override;
protected slots:
@@ -194,11 +194,11 @@ protected slots:
protected:
- virtual void constructContextMenu( QMenu * );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void wheelEvent( QWheelEvent * _we );
+ void constructContextMenu( QMenu * ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void wheelEvent( QWheelEvent * _we ) override;
private:
diff --git a/include/PeakController.h b/include/PeakController.h
index b2824f0ac55..74a3aab5926 100644
--- a/include/PeakController.h
+++ b/include/PeakController.h
@@ -46,9 +46,9 @@ class LMMS_EXPORT PeakController : public Controller
virtual ~PeakController();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
- virtual QString nodeName() const;
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ QString nodeName() const override;
static void initGetControllerBySetting();
static PeakController * getControllerBySetting( const QDomElement & _this );
@@ -57,13 +57,13 @@ class LMMS_EXPORT PeakController : public Controller
public slots:
- virtual ControllerDialog * createDialog( QWidget * _parent );
+ ControllerDialog * createDialog( QWidget * _parent ) override;
void handleDestroyedEffect( );
void updateCoeffs();
protected:
// The internal per-controller get-value function
- virtual void updateValueBuffer();
+ void updateValueBuffer() override;
PeakControllerEffect * m_peakEffect;
@@ -91,9 +91,9 @@ class PeakControllerDialog : public ControllerDialog
virtual ~PeakControllerDialog();
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void modelChanged();
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
+ void modelChanged() override;
PeakController * m_peakController;
diff --git a/include/PianoRoll.h b/include/PianoRoll.h
index 4451a07c5c4..27a15149e8a 100644
--- a/include/PianoRoll.h
+++ b/include/PianoRoll.h
@@ -46,7 +46,6 @@ class QPixmap;
class QScrollBar;
class QString;
class QMenu;
-class QSignalMapper;
class ComboBox;
class NotePlayHandle;
@@ -95,6 +94,7 @@ class PianoRoll : public QWidget
void setCurrentPattern( Pattern* newPattern );
void setGhostPattern( Pattern* newPattern );
void loadGhostNotes( const QDomElement & de );
+ void loadMarkedSemiTones(const QDomElement & de);
inline void stopRecording()
{
@@ -167,17 +167,17 @@ class PianoRoll : public QWidget
protected:
- virtual void keyPressEvent( QKeyEvent * ke );
- virtual void keyReleaseEvent( QKeyEvent * ke );
- virtual void leaveEvent( QEvent * e );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void mouseDoubleClickEvent( QMouseEvent * me );
- virtual void mouseReleaseEvent( QMouseEvent * me );
- virtual void mouseMoveEvent( QMouseEvent * me );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void resizeEvent( QResizeEvent * re );
- virtual void wheelEvent( QWheelEvent * we );
- virtual void focusOutEvent( QFocusEvent * );
+ void keyPressEvent( QKeyEvent * ke ) override;
+ void keyReleaseEvent( QKeyEvent * ke ) override;
+ void leaveEvent( QEvent * e ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void mouseDoubleClickEvent( QMouseEvent * me ) override;
+ void mouseReleaseEvent( QMouseEvent * me ) override;
+ void mouseMoveEvent( QMouseEvent * me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void resizeEvent( QResizeEvent * re ) override;
+ void wheelEvent( QWheelEvent * we ) override;
+ void focusOutEvent( QFocusEvent * ) override;
int getKey( int y ) const;
static void drawNoteRect( QPainter & p, int x, int y,
@@ -382,7 +382,7 @@ protected slots:
int m_oldNotesEditHeight;
int m_notesEditHeight;
- int m_ppt; // pixels per tact
+ int m_ppb; // pixels per bar
int m_totalKeysToScroll;
// remember these values to use them
@@ -460,11 +460,11 @@ class PianoRollWindow : public Editor, SerializingObject
int quantization() const;
- void play();
- void stop();
- void record();
- void recordAccompany();
- void toggleStepRecording();
+ void play() override;
+ void stop() override;
+ void record() override;
+ void recordAccompany() override;
+ void toggleStepRecording() override;
void stopRecording();
bool isRecording() const;
@@ -474,15 +474,15 @@ class PianoRollWindow : public Editor, SerializingObject
using SerializingObject::saveState;
using SerializingObject::restoreState;
- virtual void saveSettings(QDomDocument & doc, QDomElement & de );
- virtual void loadSettings( const QDomElement & de );
+ void saveSettings(QDomDocument & doc, QDomElement & de ) override;
+ void loadSettings( const QDomElement & de ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "pianoroll";
}
- QSize sizeHint() const;
+ QSize sizeHint() const override;
signals:
void currentPatternChanged();
@@ -494,7 +494,7 @@ private slots:
private:
void patternRenamed();
- void focusInEvent(QFocusEvent * event);
+ void focusInEvent(QFocusEvent * event) override;
void stopStepRecording();
void updateStepRecordingIcon();
diff --git a/include/PianoView.h b/include/PianoView.h
index 2a362c5843f..b793ee76813 100644
--- a/include/PianoView.h
+++ b/include/PianoView.h
@@ -44,19 +44,19 @@ class PianoView : public QWidget, public ModelView
public:
- virtual void keyPressEvent( QKeyEvent * ke );
- virtual void keyReleaseEvent( QKeyEvent * ke );
+ void keyPressEvent( QKeyEvent * ke ) override;
+ void keyReleaseEvent( QKeyEvent * ke ) override;
protected:
- virtual void modelChanged();
- virtual void contextMenuEvent( QContextMenuEvent * _me );
- virtual void paintEvent( QPaintEvent * );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void mouseReleaseEvent( QMouseEvent * me );
- virtual void mouseMoveEvent( QMouseEvent * me );
- virtual void focusOutEvent( QFocusEvent * _fe );
- virtual void resizeEvent( QResizeEvent * _event );
+ void modelChanged() override;
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
+ void paintEvent( QPaintEvent * ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void mouseReleaseEvent( QMouseEvent * me ) override;
+ void mouseMoveEvent( QMouseEvent * me ) override;
+ void focusOutEvent( QFocusEvent * _fe ) override;
+ void resizeEvent( QResizeEvent * _event ) override;
private:
diff --git a/include/Pitch.h b/include/Pitch.h
index 5ef1c3d62c8..8a9b371b48c 100644
--- a/include/Pitch.h
+++ b/include/Pitch.h
@@ -25,9 +25,6 @@
#ifndef PITCH_H
#define PITCH_H
-#include "lmms_basics.h"
-#include "Midi.h"
-
typedef int16_t pitch_t;
const pitch_t CentsPerSemitone = 100;
diff --git a/include/PixmapButton.h b/include/PixmapButton.h
index 6ee7bcdc89c..e2fb5888508 100644
--- a/include/PixmapButton.h
+++ b/include/PixmapButton.h
@@ -42,17 +42,17 @@ class LMMS_EXPORT PixmapButton : public AutomatableButton
void setActiveGraphic( const QPixmap & _pm );
void setInactiveGraphic( const QPixmap & _pm, bool _update = true );
- QSize sizeHint() const;
+ QSize sizeHint() const override;
signals:
void doubleClicked();
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
+ void paintEvent( QPaintEvent * _pe ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
private:
diff --git a/include/PlayHandle.h b/include/PlayHandle.h
index 1760e1ec7c1..1ddd632d1c3 100644
--- a/include/PlayHandle.h
+++ b/include/PlayHandle.h
@@ -87,9 +87,9 @@ class LMMS_EXPORT PlayHandle : public ThreadableJob
}
// required for ThreadableJob
- virtual void doProcessing();
+ void doProcessing() override;
- virtual bool requiresProcessing() const
+ bool requiresProcessing() const override
{
return !isFinished();
}
diff --git a/include/Plugin.h b/include/Plugin.h
index af42b0f1028..cb8995bf2cd 100644
--- a/include/Plugin.h
+++ b/include/Plugin.h
@@ -239,7 +239,7 @@ class LMMS_EXPORT Plugin : public Model, public JournallingObject
virtual ~Plugin();
//! Return display-name out of sub plugin or descriptor
- virtual QString displayName() const;
+ QString displayName() const override;
//! Return logo out of sub plugin or descriptor
const PixmapLoader *logo() const;
diff --git a/include/PresetPreviewPlayHandle.h b/include/PresetPreviewPlayHandle.h
index 57996fa1714..a95b680abb1 100644
--- a/include/PresetPreviewPlayHandle.h
+++ b/include/PresetPreviewPlayHandle.h
@@ -38,15 +38,15 @@ class LMMS_EXPORT PresetPreviewPlayHandle : public PlayHandle
PresetPreviewPlayHandle( const QString& presetFile, bool loadByPlugin = false, DataFile *dataFile = 0 );
virtual ~PresetPreviewPlayHandle();
- virtual inline bool affinityMatters() const
+ inline bool affinityMatters() const override
{
return true;
}
- virtual void play( sampleFrame* buffer );
- virtual bool isFinished() const;
+ void play( sampleFrame* buffer ) override;
+ bool isFinished() const override;
- virtual bool isFromTrack( const Track * _track ) const;
+ bool isFromTrack( const Track * _track ) const override;
static void init();
static void cleanup();
diff --git a/include/ProjectNotes.h b/include/ProjectNotes.h
index ab82e4eeb8b..fc97a8844e7 100644
--- a/include/ProjectNotes.h
+++ b/include/ProjectNotes.h
@@ -47,17 +47,17 @@ class LMMS_EXPORT ProjectNotes : public QMainWindow, public SerializingObject
void clear();
void setText( const QString & _text );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ inline QString nodeName() const override
{
return "projectnotes";
}
protected:
- virtual void closeEvent( QCloseEvent * _ce );
+ void closeEvent( QCloseEvent * _ce ) override;
void setupActions();
diff --git a/include/ProjectRenderer.h b/include/ProjectRenderer.h
index 4f932ad3495..1af9d422d99 100644
--- a/include/ProjectRenderer.h
+++ b/include/ProjectRenderer.h
@@ -86,7 +86,7 @@ public slots:
private:
- virtual void run();
+ void run() override;
AudioFileDevice * m_fileDev;
Mixer::qualitySettings m_qualitySettings;
diff --git a/include/RemotePlugin.h b/include/RemotePlugin.h
index 27c658a3d91..862370d1f20 100644
--- a/include/RemotePlugin.h
+++ b/include/RemotePlugin.h
@@ -766,7 +766,7 @@ class ProcessWatcher : public QThread
}
private:
- virtual void run();
+ void run() override;
RemotePlugin * m_plugin;
volatile bool m_quit;
@@ -803,7 +803,7 @@ class LMMS_EXPORT RemotePlugin : public QObject, public RemotePluginBase
m_failed = waitForMessage( IdInitDone, _busyWaiting ).id != IdInitDone;
}
- virtual bool processMessage( const message & _m );
+ bool processMessage( const message & _m ) override;
bool process( const sampleFrame * _in_buf, sampleFrame * _out_buf );
diff --git a/include/RenameDialog.h b/include/RenameDialog.h
index c1d24a8a9d7..8f526baddad 100644
--- a/include/RenameDialog.h
+++ b/include/RenameDialog.h
@@ -42,8 +42,8 @@ class RenameDialog : public QDialog
protected:
- void keyPressEvent( QKeyEvent * _ke );
- virtual void resizeEvent(QResizeEvent * event);
+ void keyPressEvent( QKeyEvent * _ke ) override;
+ void resizeEvent(QResizeEvent * event) override;
protected slots:
diff --git a/include/RowTableView.h b/include/RowTableView.h
index 537792a0511..a7b07c2c893 100644
--- a/include/RowTableView.h
+++ b/include/RowTableView.h
@@ -38,11 +38,11 @@ class RowTableView : public QTableView
RowTableView( QWidget * parent = 0 );
virtual ~RowTableView();
- virtual void setModel( QAbstractItemModel * model );
+ void setModel( QAbstractItemModel * model ) override;
protected:
- virtual void keyPressEvent( QKeyEvent * event );
+ void keyPressEvent( QKeyEvent * event ) override;
private:
diff --git a/include/Rubberband.h b/include/Rubberband.h
index bc9f3c6a200..eeb3c7e5b9a 100644
--- a/include/Rubberband.h
+++ b/include/Rubberband.h
@@ -83,7 +83,7 @@ class RubberBand : public QRubberBand
protected:
- virtual void resizeEvent( QResizeEvent * _re );
+ void resizeEvent( QResizeEvent * _re ) override;
private:
diff --git a/include/SamplePlayHandle.h b/include/SamplePlayHandle.h
index d10c448378c..33f5ebe5294 100644
--- a/include/SamplePlayHandle.h
+++ b/include/SamplePlayHandle.h
@@ -44,16 +44,16 @@ class SamplePlayHandle : public PlayHandle
SamplePlayHandle( SampleTCO* tco );
virtual ~SamplePlayHandle();
- virtual inline bool affinityMatters() const
+ inline bool affinityMatters() const override
{
return true;
}
- virtual void play( sampleFrame * buffer );
- virtual bool isFinished() const;
+ void play( sampleFrame * buffer ) override;
+ bool isFinished() const override;
- virtual bool isFromTrack( const Track * _track ) const;
+ bool isFromTrack( const Track * _track ) const override;
f_cnt_t totalFrames() const;
inline f_cnt_t framesDone() const
diff --git a/include/SampleRecordHandle.h b/include/SampleRecordHandle.h
index 22d9bf3156c..fc40d062295 100644
--- a/include/SampleRecordHandle.h
+++ b/include/SampleRecordHandle.h
@@ -44,10 +44,10 @@ class SampleRecordHandle : public PlayHandle
SampleRecordHandle( SampleTCO* tco );
virtual ~SampleRecordHandle();
- virtual void play( sampleFrame * _working_buffer );
- virtual bool isFinished() const;
+ void play( sampleFrame * _working_buffer ) override;
+ bool isFinished() const override;
- virtual bool isFromTrack( const Track * _track ) const;
+ bool isFromTrack( const Track * _track ) const override;
f_cnt_t framesRecorded() const;
void createSampleBuffer( SampleBuffer * * _sample_buf );
diff --git a/include/SampleTrack.h b/include/SampleTrack.h
index 9469669a17b..2bad4d91042 100644
--- a/include/SampleTrack.h
+++ b/include/SampleTrack.h
@@ -49,12 +49,12 @@ class SampleTCO : public TrackContentObject
SampleTCO( Track * _track );
virtual ~SampleTCO();
- virtual void changeLength( const MidiTime & _length );
+ void changeLength( const MidiTime & _length ) override;
const QString & sampleFile() const;
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return "sampletco";
}
@@ -67,7 +67,7 @@ class SampleTCO : public TrackContentObject
MidiTime sampleLength() const;
void setSampleStartFrame( f_cnt_t startFrame );
void setSamplePlayLength( f_cnt_t length );
- virtual TrackContentObjectView * createView( TrackView * _tv );
+ TrackContentObjectView * createView( TrackView * _tv ) override;
bool isPlaying() const;
@@ -112,13 +112,13 @@ public slots:
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _cme );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
- virtual void mouseDoubleClickEvent( QMouseEvent * );
- virtual void paintEvent( QPaintEvent * );
+ void contextMenuEvent( QContextMenuEvent * _cme ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
+ void mouseDoubleClickEvent( QMouseEvent * ) override;
+ void paintEvent( QPaintEvent * ) override;
private:
@@ -137,14 +137,14 @@ class SampleTrack : public Track
virtual ~SampleTrack();
virtual bool play( const MidiTime & _start, const fpp_t _frames,
- const f_cnt_t _frame_base, int _tco_num = -1 );
- virtual TrackView * createView( TrackContainerView* tcv );
- virtual TrackContentObject * createTCO(const MidiTime & pos);
+ const f_cnt_t _frame_base, int _tco_num = -1 ) override;
+ TrackView * createView( TrackContainerView* tcv ) override;
+ TrackContentObject * createTCO( const MidiTime & _pos ) override;
virtual void saveTrackSpecificSettings( QDomDocument & _doc,
- QDomElement & _parent );
- virtual void loadTrackSpecificSettings( const QDomElement & _this );
+ QDomElement & _parent ) override;
+ void loadTrackSpecificSettings( const QDomElement & _this ) override;
inline IntModel * effectChannelModel()
{
@@ -156,7 +156,7 @@ class SampleTrack : public Track
return &m_audioPort;
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "sampletrack";
}
@@ -204,7 +204,7 @@ class SampleTrackView : public TrackView
}
- virtual QMenu * createFxMenu( QString title, QString newFxLabel );
+ QMenu * createFxMenu( QString title, QString newFxLabel ) override;
public slots:
@@ -212,14 +212,14 @@ public slots:
protected:
- void modelChanged();
- virtual QString nodeName() const
+ void modelChanged() override;
+ QString nodeName() const override
{
return "SampleTrackView";
}
- void dragEnterEvent(QDragEnterEvent *dee);
- void dropEvent(QDropEvent *de);
+ void dragEnterEvent(QDragEnterEvent *dee) override;
+ void dropEvent(QDropEvent *de) override;
private slots:
void assignFxLine( int channelIndex );
@@ -273,13 +273,13 @@ public slots:
protected:
// capture close-events for toggling sample-track-button
- virtual void closeEvent(QCloseEvent * ce);
+ void closeEvent(QCloseEvent * ce) override;
- virtual void saveSettings(QDomDocument & doc, QDomElement & element);
- virtual void loadSettings(const QDomElement & element);
+ void saveSettings(QDomDocument & doc, QDomElement & element) override;
+ void loadSettings(const QDomElement & element) override;
private:
- virtual void modelChanged();
+ void modelChanged() override;
SampleTrack * m_track;
SampleTrackView * m_stv;
diff --git a/include/SendButtonIndicator.h b/include/SendButtonIndicator.h
index 97acde1ba5e..b60113758d7 100644
--- a/include/SendButtonIndicator.h
+++ b/include/SendButtonIndicator.h
@@ -17,7 +17,7 @@ class SendButtonIndicator : public QLabel
SendButtonIndicator( QWidget * _parent, FxLine * _owner,
FxMixerView * _mv);
- virtual void mousePressEvent( QMouseEvent * e );
+ void mousePressEvent( QMouseEvent * e ) override;
void updateLightStatus();
private:
diff --git a/include/SetupDialog.h b/include/SetupDialog.h
index 272ba7b093f..9f9ae1b3f82 100644
--- a/include/SetupDialog.h
+++ b/include/SetupDialog.h
@@ -1,4 +1,3 @@
-
/*
* SetupDialog.h - dialog for setting up LMMS
*
@@ -23,20 +22,20 @@
*
*/
+
#ifndef SETUP_DIALOG_H
#define SETUP_DIALOG_H
#include
#include
+#include "AudioDevice.h"
+#include "AudioDeviceSetupWidget.h"
#include "LedCheckbox.h"
#include "lmmsconfig.h"
-#include "AudioDevice.h"
#include "MidiClient.h"
#include "MidiSetupWidget.h"
-#include "AudioDeviceSetupWidget.h"
-
class QComboBox;
class QLabel;
@@ -48,167 +47,156 @@ class TabBar;
class SetupDialog : public QDialog
{
Q_OBJECT
+
public:
enum ConfigTabs
{
GeneralSettings,
- PathSettings,
PerformanceSettings,
AudioSettings,
- MidiSettings
- } ;
+ MidiSettings,
+ PathsSettings
+ };
- SetupDialog( ConfigTabs _tab_to_open = GeneralSettings );
+ SetupDialog(ConfigTabs tab_to_open = GeneralSettings);
virtual ~SetupDialog();
protected slots:
- virtual void accept();
+ void accept() override;
private slots:
- // general settings widget
- void setBufferSize( int _value );
- void resetBufSize();
-
- // path settings widget
- void setWorkingDir( const QString & _wd );
- void setVSTDir( const QString & _vd );
- void setGIGDir( const QString & _gd );
- void setSF2Dir( const QString & _sfd );
- void setArtworkDir( const QString & _ad );
- void setLADSPADir( const QString & _ld );
- void setSTKDir( const QString & _sd );
- void setDefaultSoundfont( const QString & _sf );
- void setBackgroundArtwork( const QString & _ba );
-
- // performance settings widget
- void setAutoSaveInterval( int time );
+ // General settings widget.
+ void toggleDisplaydBFS(bool enabled);
+ void toggleTooltips(bool enabled);
+ void toggleDisplayWaveform(bool enabled);
+ void toggleNoteLabels(bool enabled);
+ void toggleCompactTrackButtons(bool enabled);
+ void toggleOneInstrumentTrackWindow(bool enabled);
+ void toggleMMPZ(bool enabled);
+ void toggleDisableBackup(bool enabled);
+ void toggleOpenLastProject(bool enabled);
+ void setLanguage(int lang);
+
+ // Performance settings widget.
+ void setAutoSaveInterval(int time);
void resetAutoSave();
+ void toggleAutoSave(bool enabled);
+ void toggleRunningAutoSave(bool enabled);
+ void toggleSmoothScroll(bool enabled);
+ void toggleAnimateAFP(bool enabled);
+ void toggleSyncVSTPlugins(bool enabled);
+ void vstEmbedMethodChanged();
+ void toggleVSTAlwaysOnTop(bool en);
+ void toggleDisableAutoQuit(bool enabled);
- // audio settings widget
- void audioInterfaceChanged( const QString & _driver );
-
- // MIDI settings widget
- void midiInterfaceChanged( const QString & _driver );
-
+ // Audio settings widget.
+ void audioInterfaceChanged(const QString & driver);
+ void toggleHQAudioDev(bool enabled);
+ void setBufferSize(int value);
+ void resetBufferSize();
- void toggleToolTips( bool _enabled );
- void toggleWarnAfterSetup( bool _enabled );
- void toggleDisplaydBFS( bool _enabled );
- void toggleMMPZ( bool _enabled );
- void toggleDisableBackup( bool _enabled );
- void toggleOpenLastProject( bool _enabled );
- void toggleHQAudioDev( bool _enabled );
+ // MIDI settings widget.
+ void midiInterfaceChanged(const QString & driver);
+ // Paths settings widget.
void openWorkingDir();
+ void setWorkingDir(const QString & workingDir);
void openVSTDir();
- void openGIGDir();
- void openSF2Dir();
- void openArtworkDir();
+ void setVSTDir(const QString & vstDir);
void openLADSPADir();
- void openSTKDir();
- void openDefaultSoundfont();
- void openBackgroundArtwork();
-
- void toggleSmoothScroll( bool _enabled );
- void toggleAutoSave( bool _enabled );
- void toggleRunningAutoSave( bool _enabled );
- void toggleOneInstrumentTrackWindow( bool _enabled );
- void toggleCompactTrackButtons( bool _enabled );
- void toggleSyncVSTPlugins( bool _enabled );
- void toggleAnimateAFP( bool _enabled );
- void toggleNoteLabels( bool en );
- void toggleDisplayWaveform( bool en );
- void toggleDisableAutoquit( bool en );
-
- void vstEmbedMethodChanged();
- void toggleVSTAlwaysOnTop( bool en );
-
- void setLanguage( int lang );
+ void setLADSPADir(const QString & ladspaDir);
+ void openSF2Dir();
+ void setSF2Dir(const QString & sf2Dir);
+ void openSF2File();
+ void setSF2File(const QString & sf2File);
+ void openGIGDir();
+ void setGIGDir(const QString & gigDir);
+ void openThemeDir();
+ void setThemeDir(const QString & themeDir);
+ void openBackgroundPicFile();
+ void setBackgroundPicFile(const QString & backgroundPicFile);
+ void showRestartWarning();
private:
TabBar * m_tabBar;
- QSlider * m_bufSizeSlider;
- QLabel * m_bufSizeLbl;
- int m_bufferSize;
-
- bool m_toolTips;
- bool m_warnAfterSetup;
+ // General settings widgets.
bool m_displaydBFS;
+ bool m_tooltips;
+ bool m_displayWaveform;
+ bool m_printNoteLabels;
+ bool m_compactTrackButtons;
+ bool m_oneInstrumentTrackWindow;
bool m_MMPZ;
bool m_disableBackup;
bool m_openLastProject;
- bool m_NaNHandler;
- bool m_hqAudioDev;
QString m_lang;
QStringList m_languages;
-
- QLineEdit * m_wdLineEdit;
- QLineEdit * m_vdLineEdit;
- QLineEdit * m_adLineEdit;
- QLineEdit * m_ladLineEdit;
- QLineEdit * m_gigLineEdit;
- QLineEdit * m_sf2LineEdit;
-#ifdef LMMS_HAVE_FLUIDSYNTH
- QLineEdit * m_sfLineEdit;
-#endif
-#ifdef LMMS_HAVE_STK
- QLineEdit * m_stkLineEdit;
-#endif
- QLineEdit * m_baLineEdit;
-
- QString m_workingDir;
- QString m_vstDir;
- QString m_artworkDir;
- QString m_ladDir;
- QString m_gigDir;
- QString m_sf2Dir;
-#ifdef LMMS_HAVE_FLUIDSYNTH
- QString m_defaultSoundfont;
-#endif
-#ifdef LMMS_HAVE_STK
- QString m_stkDir;
-#endif
- QString m_backgroundArtwork;
-
- bool m_smoothScroll;
+ // Performance settings widgets.
+ int m_saveInterval;
bool m_enableAutoSave;
bool m_enableRunningAutoSave;
- int m_saveInterval;
QSlider * m_saveIntervalSlider;
QLabel * m_saveIntervalLbl;
LedCheckBox * m_autoSave;
LedCheckBox * m_runningAutoSave;
-
- bool m_oneInstrumentTrackWindow;
- bool m_compactTrackButtons;
- bool m_syncVSTPlugins;
+ bool m_smoothScroll;
bool m_animateAFP;
- bool m_printNoteLabels;
- bool m_displayWaveform;
+ QLabel * m_vstEmbedLbl;
+ QComboBox* m_vstEmbedComboBox;
+ QString m_vstEmbedMethod;
+ LedCheckBox * m_vstAlwaysOnTopCheckBox;
+ bool m_vstAlwaysOnTop;
+ bool m_syncVSTPlugins;
bool m_disableAutoQuit;
+
typedef QMap AswMap;
typedef QMap MswMap;
typedef QMap trMap;
+ // Audio settings widgets.
QComboBox * m_audioInterfaces;
AswMap m_audioIfaceSetupWidgets;
trMap m_audioIfaceNames;
+ bool m_NaNHandler;
+ bool m_hqAudioDev;
+ int m_bufferSize;
+ QSlider * m_bufferSizeSlider;
+ QLabel * m_bufferSizeLbl;
+ // MIDI settings widgets.
QComboBox * m_midiInterfaces;
MswMap m_midiIfaceSetupWidgets;
trMap m_midiIfaceNames;
- QComboBox* m_vstEmbedComboBox;
- QString m_vstEmbedMethod;
- LedCheckBox * m_vstAlwaysOnTopCheckBox;
- bool m_vstAlwaysOnTop;
-} ;
-
+ // Paths settings widgets.
+ QString m_workingDir;
+ QString m_vstDir;
+ QString m_ladspaDir;
+ QString m_gigDir;
+ QString m_sf2Dir;
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ QString m_sf2File;
+#endif
+ QString m_themeDir;
+ QString m_backgroundPicFile;
+
+ QLineEdit * m_workingDirLineEdit;
+ QLineEdit * m_vstDirLineEdit;
+ QLineEdit * m_themeDirLineEdit;
+ QLineEdit * m_ladspaDirLineEdit;
+ QLineEdit * m_gigDirLineEdit;
+ QLineEdit * m_sf2DirLineEdit;
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ QLineEdit * m_sf2FileLineEdit;
+#endif
+ QLineEdit * m_backgroundPicFileLineEdit;
+ QLabel * restartWarningLbl;
+};
#endif
diff --git a/include/SideBarWidget.h b/include/SideBarWidget.h
index 229f07df032..9972daa7c19 100644
--- a/include/SideBarWidget.h
+++ b/include/SideBarWidget.h
@@ -28,6 +28,7 @@
#include
#include
#include
+#include
class SideBarWidget : public QWidget
@@ -47,11 +48,13 @@ class SideBarWidget : public QWidget
return m_title;
}
+signals:
+ void closeButtonClicked();
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void resizeEvent( QResizeEvent * _re );
- virtual void contextMenuEvent( QContextMenuEvent * )
+ void paintEvent( QPaintEvent * _pe ) override;
+ void resizeEvent( QResizeEvent * _re ) override;
+ void contextMenuEvent( QContextMenuEvent * ) override
{
}
@@ -75,6 +78,8 @@ class SideBarWidget : public QWidget
QVBoxLayout * m_layout;
QString m_title;
QPixmap m_icon;
+ QPushButton * m_closeBtn;
+ const QSize m_buttonSize;
} ;
diff --git a/include/Song.h b/include/Song.h
index 32ead7181f5..d398a168cdc 100644
--- a/include/Song.h
+++ b/include/Song.h
@@ -45,7 +45,7 @@ class TimeLineWidget;
const bpm_t MinTempo = 10;
const bpm_t DefaultTempo = 140;
const bpm_t MaxTempo = 999;
-const tick_t MaxSongLength = 9999 * DefaultTicksPerTact;
+const tick_t MaxSongLength = 9999 * DefaultTicksPerBar;
class LMMS_EXPORT Song : public TrackContainer
@@ -155,14 +155,14 @@ class LMMS_EXPORT Song : public TrackContainer
m_playPos[playMode].setTicks(ticks);
}
- inline int getTacts() const
+ inline int getBars() const
{
- return currentTact();
+ return currentBar();
}
- inline int ticksPerTact() const
+ inline int ticksPerBar() const
{
- return MidiTime::ticksPerTact(m_timeSigModel);
+ return MidiTime::ticksPerBar(m_timeSigModel);
}
// Returns the beat position inside the bar, 0-based
@@ -254,14 +254,14 @@ class LMMS_EXPORT Song : public TrackContainer
}
void updateLength();
- tact_t length() const
+ bar_t length() const
{
return m_length;
}
bpm_t getTempo();
- virtual AutomationPattern * tempoAutomationPattern();
+ AutomationPattern * tempoAutomationPattern() override;
AutomationTrack * globalAutomationTrack()
{
@@ -269,7 +269,7 @@ class LMMS_EXPORT Song : public TrackContainer
}
//TODO: Add Q_DECL_OVERRIDE when Qt4 is dropped
- AutomatedValueMap automatedValuesAt(MidiTime time, int tcoNum = -1) const;
+ AutomatedValueMap automatedValuesAt(MidiTime time, int tcoNum = -1) const override;
// file management
void createNewProject();
@@ -305,7 +305,7 @@ class LMMS_EXPORT Song : public TrackContainer
return m_modified;
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "song";
}
@@ -382,9 +382,9 @@ private slots:
virtual ~Song();
- inline tact_t currentTact() const
+ inline bar_t currentBar() const
{
- return m_playPos[m_playMode].getTact();
+ return m_playPos[m_playMode].getBar();
}
inline tick_t currentTick() const
@@ -415,7 +415,7 @@ private slots:
IntModel m_tempoModel;
MeterModel m_timeSigModel;
- int m_oldTicksPerTact;
+ int m_oldTicksPerBar;
IntModel m_masterVolumeModel;
IntModel m_masterPitchModel;
@@ -445,14 +445,14 @@ private slots:
PlayModes m_playMode;
PlayPos m_playPos[Mode_Count];
- tact_t m_length;
+ bar_t m_length;
const Pattern* m_patternToPlay;
bool m_loopPattern;
double m_elapsedMilliSeconds[Mode_Count];
tick_t m_elapsedTicks;
- tact_t m_elapsedTacts;
+ bar_t m_elapsedBars;
VstSyncController m_vstSyncController;
@@ -473,9 +473,9 @@ private slots:
void projectLoaded();
void playbackStateChanged();
void playbackPositionChanged();
- void lengthChanged( int tacts );
+ void lengthChanged( int bars );
void tempoChanged( bpm_t newBPM );
- void timeSignatureChanged( int oldTicksPerTact, int ticksPerTact );
+ void timeSignatureChanged( int oldTicksPerBar, int ticksPerBar );
void controllerAdded( Controller * );
void controllerRemoved( Controller * );
void updateSampleTracks();
diff --git a/include/SongEditor.h b/include/SongEditor.h
index 8a02d56919a..9621bcc23d8 100644
--- a/include/SongEditor.h
+++ b/include/SongEditor.h
@@ -51,7 +51,7 @@ class positionLine : public QWidget
positionLine( QWidget * parent );
private:
- virtual void paintEvent( QPaintEvent * pe );
+ void paintEvent( QPaintEvent * pe ) override;
} ;
@@ -69,8 +69,8 @@ class SongEditor : public TrackContainerView
SongEditor( Song * song );
~SongEditor();
- void saveSettings( QDomDocument& doc, QDomElement& element );
- void loadSettings( const QDomElement& element );
+ void saveSettings( QDomDocument& doc, QDomElement& element ) override;
+ void loadSettings( const QDomElement& element ) override;
ComboBoxModel *zoomingModel() const;
ComboBoxModel *snappingModel() const;
@@ -79,6 +79,9 @@ class SongEditor : public TrackContainerView
public slots:
void scrolled( int new_pos );
+ void selectRegionFromPixels(int xStart, int xEnd);
+ void stopSelectRegion();
+ void updateRubberband();
void setEditMode( EditMode mode );
void setEditModeDraw();
@@ -90,7 +93,10 @@ public slots:
void selectAllTcos( bool select );
protected:
- virtual void closeEvent( QCloseEvent * ce );
+ void closeEvent( QCloseEvent * ce ) override;
+ void mousePressEvent(QMouseEvent * me) override;
+ void mouseMoveEvent(QMouseEvent * me) override;
+ void mouseReleaseEvent(QMouseEvent * me) override;
private slots:
void setHighQuality( bool );
@@ -110,10 +116,13 @@ private slots:
void zoomingChanged();
private:
- virtual void keyPressEvent( QKeyEvent * ke );
- virtual void wheelEvent( QWheelEvent * we );
+ void keyPressEvent( QKeyEvent * ke ) override;
+ void wheelEvent( QWheelEvent * we ) override;
- virtual bool allowRubberband() const;
+ bool allowRubberband() const override;
+
+ int trackIndexFromSelectionPoint(int yPos);
+ int indexOfTrackView(const TrackView* tv);
Song * m_song;
@@ -141,11 +150,19 @@ private slots:
bool m_scrollBack;
bool m_smoothScroll;
- int m_widgetWidthTotal;
EditMode m_mode;
EditMode m_ctrlMode; // mode they were in before they hit ctrl
+ QPoint m_origin;
+ QPoint m_scrollPos;
+ QPoint m_mousePos;
+ int m_rubberBandStartTrackview;
+ MidiTime m_rubberbandStartMidipos;
+ int m_currentZoomingValue;
+ int m_trackHeadWidth;
+ bool m_selectRegion;
+
friend class SongEditorWindow;
} ;
@@ -158,19 +175,19 @@ class SongEditorWindow : public Editor
public:
SongEditorWindow( Song* song );
- QSize sizeHint() const;
+ QSize sizeHint() const override;
SongEditor* m_editor;
protected:
- virtual void resizeEvent( QResizeEvent * event );
- virtual void changeEvent( QEvent * );
+ void resizeEvent( QResizeEvent * event ) override;
+ void changeEvent( QEvent * ) override;
protected slots:
- void play();
- void record();
- void recordAccompany();
- void stop();
+ void play() override;
+ void record() override;
+ void recordAccompany() override;
+ void stop() override;
void lostFocus();
void adjustUiAfterProjectLoad();
@@ -182,8 +199,8 @@ protected slots:
void resized();
private:
- virtual void keyPressEvent( QKeyEvent * ke );
- virtual void keyReleaseEvent( QKeyEvent * ke );
+ void keyPressEvent( QKeyEvent * ke ) override;
+ void keyReleaseEvent( QKeyEvent * ke ) override;
QAction* m_addBBTrackAction;
QAction* m_addSampleTrackAction;
diff --git a/include/StepRecorderWidget.h b/include/StepRecorderWidget.h
index 0e45121698b..14cfc2eedce 100644
--- a/include/StepRecorderWidget.h
+++ b/include/StepRecorderWidget.h
@@ -36,14 +36,14 @@ class StepRecorderWidget : public QWidget
public:
StepRecorderWidget(
QWidget * parent,
- const int ppt,
+ const int ppb,
const int marginTop,
const int marginBottom,
const int marginLeft,
const int marginRight);
//API used by PianoRoll
- void setPixelsPerTact(int ppt);
+ void setPixelsPerBar(int ppb);
void setCurrentPosition(MidiTime currentPosition);
void setBottomMargin(const int marginBottom);
@@ -55,7 +55,7 @@ class StepRecorderWidget : public QWidget
void showHint();
private:
- virtual void paintEvent(QPaintEvent * pe);
+ void paintEvent(QPaintEvent * pe) override;
int xCoordOfTick(int tick);
@@ -68,7 +68,7 @@ class StepRecorderWidget : public QWidget
MidiTime m_curStepStartPos;
MidiTime m_curStepEndPos;
- int m_ppt; // pixels per tact
+ int m_ppb; // pixels per bar
MidiTime m_currentPosition; // current position showed by on PianoRoll
QColor m_colorLineStart;
diff --git a/include/SubWindow.h b/include/SubWindow.h
index 5d7a810c291..148cf2c9997 100644
--- a/include/SubWindow.h
+++ b/include/SubWindow.h
@@ -67,10 +67,10 @@ class LMMS_EXPORT SubWindow : public QMdiSubWindow
protected:
// hook the QWidget move/resize events to update the tracked geometry
- virtual void moveEvent( QMoveEvent * event );
- virtual void resizeEvent( QResizeEvent * event );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void changeEvent( QEvent * event );
+ void moveEvent( QMoveEvent * event ) override;
+ void resizeEvent( QResizeEvent * event ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void changeEvent( QEvent * event ) override;
signals:
void focusLost();
diff --git a/include/TabWidget.h b/include/TabWidget.h
index 88ecf9034b4..0cf15155b99 100644
--- a/include/TabWidget.h
+++ b/include/TabWidget.h
@@ -72,13 +72,13 @@ class TabWidget : public QWidget
void setTabBorder( const QColor & c );
protected:
- virtual bool event( QEvent * event );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void resizeEvent( QResizeEvent * _re );
- virtual void wheelEvent( QWheelEvent * _we );
- virtual QSize minimumSizeHint() const;
- virtual QSize sizeHint() const;
+ bool event( QEvent * event ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
+ void resizeEvent( QResizeEvent * _re ) override;
+ void wheelEvent( QWheelEvent * _we ) override;
+ QSize minimumSizeHint() const override;
+ QSize sizeHint() const override;
private:
struct widgetDesc
diff --git a/include/TempoSyncKnob.h b/include/TempoSyncKnob.h
index 034e2b8f4b7..416abe1fc0e 100644
--- a/include/TempoSyncKnob.h
+++ b/include/TempoSyncKnob.h
@@ -52,7 +52,7 @@ class LMMS_EXPORT TempoSyncKnob : public Knob
return castModel();
}
- virtual void modelChanged();
+ void modelChanged() override;
signals:
@@ -61,7 +61,7 @@ class LMMS_EXPORT TempoSyncKnob : public Knob
protected:
- virtual void contextMenuEvent( QContextMenuEvent * _me );
+ void contextMenuEvent( QContextMenuEvent * _me ) override;
protected slots:
diff --git a/include/TempoSyncKnobModel.h b/include/TempoSyncKnobModel.h
index 9aaf48fea8b..b9512aa1a93 100644
--- a/include/TempoSyncKnobModel.h
+++ b/include/TempoSyncKnobModel.h
@@ -52,7 +52,7 @@ class LMMS_EXPORT TempoSyncKnobModel : public FloatModel
const float _max, const float _step,
const float _scale, Model * _parent,
const QString & _display_name = QString() );
- virtual ~TempoSyncKnobModel() override;
+ ~TempoSyncKnobModel() override;
void saveSettings( QDomDocument & _doc, QDomElement & _this, const QString& name ) override;
void loadSettings( const QDomElement & _this, const QString& name ) override;
diff --git a/include/TextFloat.h b/include/TextFloat.h
index ed10516b552..8f940c591c7 100644
--- a/include/TextFloat.h
+++ b/include/TextFloat.h
@@ -66,8 +66,8 @@ class LMMS_EXPORT TextFloat : public QWidget
protected:
- virtual void paintEvent( QPaintEvent * _me );
- virtual void mousePressEvent( QMouseEvent * _me );
+ void paintEvent( QPaintEvent * _me ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
private:
diff --git a/include/TimeDisplayWidget.h b/include/TimeDisplayWidget.h
index 175f159c943..e7e5cb21010 100644
--- a/include/TimeDisplayWidget.h
+++ b/include/TimeDisplayWidget.h
@@ -41,7 +41,7 @@ class TimeDisplayWidget : public QWidget
protected:
- virtual void mousePressEvent( QMouseEvent* mouseEvent );
+ void mousePressEvent( QMouseEvent* mouseEvent ) override;
private slots:
diff --git a/include/TimeLineWidget.h b/include/TimeLineWidget.h
index 7629694caa8..bc0881f82ee 100644
--- a/include/TimeLineWidget.h
+++ b/include/TimeLineWidget.h
@@ -72,15 +72,15 @@ class TimeLineWidget : public QWidget, public JournallingObject
} ;
- TimeLineWidget(int xoff, int yoff, float ppt, Song::PlayPos & pos,
+ TimeLineWidget(int xoff, int yoff, float ppb, Song::PlayPos & pos,
const MidiTime & begin, Song::PlayModes mode, QWidget * parent);
virtual ~TimeLineWidget();
inline QColor const & getBarLineColor() const { return m_barLineColor; }
- inline void setBarLineColor(QColor const & tactLineColor) { m_barLineColor = tactLineColor; }
+ inline void setBarLineColor(QColor const & barLineColor) { m_barLineColor = barLineColor; }
inline QColor const & getBarNumberColor() const { return m_barNumberColor; }
- inline void setBarNumberColor(QColor const & tactNumberColor) { m_barNumberColor = tactNumberColor; }
+ inline void setBarNumberColor(QColor const & barNumberColor) { m_barNumberColor = barNumberColor; }
inline QColor const & getInactiveLoopColor() const { return m_inactiveLoopColor; }
inline void setInactiveLoopColor(QColor const & inactiveLoopColor) { m_inactiveLoopColor = inactiveLoopColor; }
@@ -135,27 +135,27 @@ class TimeLineWidget : public QWidget, public JournallingObject
m_loopPos[0] : m_loopPos[1];
}
- inline void savePos( const MidiTime & _pos )
+ inline void savePos( const MidiTime & pos )
{
- m_savedPos = _pos;
+ m_savedPos = pos;
}
inline const MidiTime & savedPos() const
{
return m_savedPos;
}
- inline void setPixelsPerTact( float _ppt )
+ inline void setPixelsPerBar( float ppb )
{
- m_ppt = _ppt;
+ m_ppb = ppb;
update();
}
void addToolButtons(QToolBar* _tool_bar );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return "timeline";
}
@@ -163,7 +163,7 @@ class TimeLineWidget : public QWidget, public JournallingObject
inline int markerX( const MidiTime & _t ) const
{
return m_xOffset + static_cast( ( _t - m_begin ) *
- m_ppt / MidiTime::ticksPerTact() );
+ m_ppb / MidiTime::ticksPerBar() );
}
signals:
@@ -184,10 +184,10 @@ public slots:
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
+ void paintEvent( QPaintEvent * _pe ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseMoveEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
private:
@@ -214,7 +214,7 @@ public slots:
int m_xOffset;
int m_posMarkerX;
- float m_ppt;
+ float m_ppb;
Song::PlayPos & m_pos;
const MidiTime & m_begin;
const Song::PlayModes m_mode;
diff --git a/include/Track.h b/include/Track.h
index b00c5024896..70e49a1c6c3 100644
--- a/include/Track.h
+++ b/include/Track.h
@@ -29,7 +29,6 @@
#include
#include
#include
-#include
#include
#include
@@ -73,7 +72,7 @@ const int DEFAULT_TRACK_HEIGHT = 32;
const int TCO_BORDER_WIDTH = 2;
-class TrackContentObject : public Model, public JournallingObject
+class LMMS_EXPORT TrackContentObject : public Model, public JournallingObject
{
Q_OBJECT
MM_OPERATORS
@@ -99,7 +98,7 @@ class TrackContentObject : public Model, public JournallingObject
emit dataChanged();
}
- virtual QString displayName() const
+ QString displayName() const override
{
return name();
}
@@ -215,6 +214,12 @@ class TrackContentObjectView : public selectableObject, public ModelView
{
return m_tco;
}
+
+ inline TrackView * getTrackView()
+ {
+ return m_trackView;
+ }
+
// qproperty access func
QColor mutedColor() const;
QColor mutedBackgroundColor() const;
@@ -241,32 +246,28 @@ public slots:
virtual bool close();
void cut();
void remove();
- virtual void update();
+ void update() override;
protected:
virtual void constructContextMenu( QMenu * )
{
}
- virtual void contextMenuEvent( QContextMenuEvent * cme );
- virtual void dragEnterEvent( QDragEnterEvent * dee );
- virtual void dropEvent( QDropEvent * de );
- virtual void leaveEvent( QEvent * e );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void mouseMoveEvent( QMouseEvent * me );
- virtual void mouseReleaseEvent( QMouseEvent * me );
- virtual void resizeEvent( QResizeEvent * re )
+ void contextMenuEvent( QContextMenuEvent * cme ) override;
+ void dragEnterEvent( QDragEnterEvent * dee ) override;
+ void dropEvent( QDropEvent * de ) override;
+ void leaveEvent( QEvent * e ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void mouseMoveEvent( QMouseEvent * me ) override;
+ void mouseReleaseEvent( QMouseEvent * me ) override;
+ void resizeEvent( QResizeEvent * re ) override
{
m_needsUpdate = true;
selectableObject::resizeEvent( re );
}
- float pixelsPerTact();
+ float pixelsPerBar();
- inline TrackView * getTrackView()
- {
- return m_trackView;
- }
DataFile createTCODataFiles(const QVector & tcos) const;
@@ -380,24 +381,24 @@ public slots:
void changePosition( const MidiTime & newPos = MidiTime( -1 ) );
protected:
- virtual void dragEnterEvent( QDragEnterEvent * dee );
- virtual void dropEvent( QDropEvent * de );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void resizeEvent( QResizeEvent * re );
+ void dragEnterEvent( QDragEnterEvent * dee ) override;
+ void dropEvent( QDropEvent * de ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void resizeEvent( QResizeEvent * re ) override;
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "trackcontentwidget";
}
- virtual void saveSettings( QDomDocument& doc, QDomElement& element )
+ void saveSettings( QDomDocument& doc, QDomElement& element ) override
{
Q_UNUSED(doc)
Q_UNUSED(element)
}
- virtual void loadSettings( const QDomElement& element )
+ void loadSettings( const QDomElement& element ) override
{
Q_UNUSED(element)
}
@@ -434,8 +435,8 @@ class TrackOperationsWidget : public QWidget
protected:
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void paintEvent( QPaintEvent * pe );
+ void mousePressEvent( QMouseEvent * me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
private slots:
@@ -517,8 +518,8 @@ class LMMS_EXPORT Track : public Model, public JournallingObject
virtual void loadTrackSpecificSettings( const QDomElement & element ) = 0;
- virtual void saveSettings( QDomDocument & doc, QDomElement & element );
- virtual void loadSettings( const QDomElement & element );
+ void saveSettings( QDomDocument & doc, QDomElement & element ) override;
+ void loadSettings( const QDomElement & element ) override;
void setSimpleSerializing()
{
@@ -546,10 +547,10 @@ class LMMS_EXPORT Track : public Model, public JournallingObject
void createTCOsForBB( int bb );
- void insertTact( const MidiTime & pos );
- void removeTact( const MidiTime & pos );
+ void insertBar( const MidiTime & pos );
+ void removeBar( const MidiTime & pos );
- tact_t length() const;
+ bar_t length() const;
inline TrackContainer* trackContainer() const
@@ -563,7 +564,7 @@ class LMMS_EXPORT Track : public Model, public JournallingObject
return m_name;
}
- virtual QString displayName() const
+ QString displayName() const override
{
return name();
}
@@ -691,32 +692,32 @@ public slots:
protected:
- virtual void modelChanged();
+ void modelChanged() override;
- virtual void saveSettings( QDomDocument& doc, QDomElement& element )
+ void saveSettings( QDomDocument& doc, QDomElement& element ) override
{
Q_UNUSED(doc)
Q_UNUSED(element)
}
- virtual void loadSettings( const QDomElement& element )
+ void loadSettings( const QDomElement& element ) override
{
Q_UNUSED(element)
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "trackview";
}
- virtual void dragEnterEvent( QDragEnterEvent * dee );
- virtual void dropEvent( QDropEvent * de );
- virtual void mousePressEvent( QMouseEvent * me );
- virtual void mouseMoveEvent( QMouseEvent * me );
- virtual void mouseReleaseEvent( QMouseEvent * me );
- virtual void paintEvent( QPaintEvent * pe );
- virtual void resizeEvent( QResizeEvent * re );
+ void dragEnterEvent( QDragEnterEvent * dee ) override;
+ void dropEvent( QDropEvent * de ) override;
+ void mousePressEvent( QMouseEvent * me ) override;
+ void mouseMoveEvent( QMouseEvent * me ) override;
+ void mouseReleaseEvent( QMouseEvent * me ) override;
+ void paintEvent( QPaintEvent * pe ) override;
+ void resizeEvent( QResizeEvent * re ) override;
private:
diff --git a/include/TrackContainer.h b/include/TrackContainer.h
index 1caca922e23..fd853a73c1e 100644
--- a/include/TrackContainer.h
+++ b/include/TrackContainer.h
@@ -51,9 +51,9 @@ class LMMS_EXPORT TrackContainer : public Model, public JournallingObject
TrackContainer();
virtual ~TrackContainer();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
- virtual void loadSettings( const QDomElement & _this );
+ void loadSettings( const QDomElement & _this ) override;
virtual AutomationPattern * tempoAutomationPattern()
@@ -124,7 +124,7 @@ class DummyTrackContainer : public TrackContainer
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "DummyTrackContainer";
}
diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h
index 67575583b51..6e952189b01 100644
--- a/include/TrackContainerView.h
+++ b/include/TrackContainerView.h
@@ -49,30 +49,30 @@ class TrackContainerView : public QWidget, public ModelView,
TrackContainerView( TrackContainer* tc );
virtual ~TrackContainerView();
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
- virtual void loadSettings( const QDomElement & _this );
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
+ void loadSettings( const QDomElement & _this ) override;
QScrollArea * contentWidget()
{
- return( m_scrollArea );
+ return m_scrollArea;
}
inline const MidiTime & currentPosition() const
{
- return( m_currentPosition );
+ return m_currentPosition;
}
virtual bool fixedTCOs() const
{
- return( false );
+ return false;
}
- inline float pixelsPerTact() const
+ inline float pixelsPerBar() const
{
- return( m_ppt );
+ return m_ppb;
}
- void setPixelsPerTact( int _ppt );
+ void setPixelsPerBar( int ppb );
const TrackView * trackViewAt( const int _y ) const;
@@ -80,12 +80,12 @@ class TrackContainerView : public QWidget, public ModelView,
inline bool rubberBandActive() const
{
- return( m_rubberBand->isEnabled() && m_rubberBand->isVisible() );
+ return m_rubberBand->isEnabled() && m_rubberBand->isVisible();
}
inline QVector selectedObjects()
{
- return( m_rubberBand->selectedObjects() );
+ return m_rubberBand->selectedObjects();
}
@@ -116,9 +116,9 @@ class TrackContainerView : public QWidget, public ModelView,
void clearAllTracks();
- virtual QString nodeName() const
+ QString nodeName() const override
{
- return( "trackcontainerview" );
+ return "trackcontainerview";
}
@@ -129,27 +129,19 @@ public slots:
TrackView * createTrackView( Track * _t );
void deleteTrackView( TrackView * _tv );
- virtual void dropEvent( QDropEvent * _de );
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- ///
- /// \brief selectRegionFromPixels
- /// \param x
- /// \param y
- /// Use the rubber band to select TCO from all tracks using x, y pixels
- void selectRegionFromPixels(int xStart, int xEnd);
+ void dropEvent( QDropEvent * _de ) override;
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
///
/// \brief stopRubberBand
/// Removes the rubber band from display when finished with.
void stopRubberBand();
+
protected:
- static const int DEFAULT_PIXELS_PER_TACT = 16;
+ static const int DEFAULT_PIXELS_PER_BAR = 16;
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseMoveEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void resizeEvent( QResizeEvent * );
+ void resizeEvent( QResizeEvent * ) override;
MidiTime m_currentPosition;
@@ -168,7 +160,7 @@ public slots:
virtual ~scrollArea();
protected:
- virtual void wheelEvent( QWheelEvent * _we );
+ void wheelEvent( QWheelEvent * _we ) override;
private:
TrackContainerView* m_trackContainerView;
@@ -183,10 +175,10 @@ public slots:
scrollArea * m_scrollArea;
QVBoxLayout * m_scrollLayout;
- float m_ppt;
+ float m_ppb;
RubberBand * m_rubberBand;
- QPoint m_origin;
+
signals:
@@ -202,7 +194,7 @@ class InstrumentLoaderThread : public QThread
InstrumentLoaderThread( QObject *parent = 0, InstrumentTrack *it = 0,
QString name = "" );
- void run();
+ void run() override;
private:
InstrumentTrack *m_it;
diff --git a/include/TrackLabelButton.h b/include/TrackLabelButton.h
index f1059bdbf4f..7d9726febde 100644
--- a/include/TrackLabelButton.h
+++ b/include/TrackLabelButton.h
@@ -49,13 +49,13 @@ public slots:
protected:
- virtual void dragEnterEvent( QDragEnterEvent * _dee );
- virtual void dropEvent( QDropEvent * _de );
- virtual void mousePressEvent( QMouseEvent * _me );
- virtual void mouseDoubleClickEvent( QMouseEvent * _me );
- virtual void mouseReleaseEvent( QMouseEvent * _me );
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void resizeEvent( QResizeEvent * _re );
+ void dragEnterEvent( QDragEnterEvent * _dee ) override;
+ void dropEvent( QDropEvent * _de ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
+ void mouseDoubleClickEvent( QMouseEvent * _me ) override;
+ void mouseReleaseEvent( QMouseEvent * _me ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
+ void resizeEvent( QResizeEvent * _re ) override;
private:
diff --git a/include/TrackRenameLineEdit.h b/include/TrackRenameLineEdit.h
index 6883b9b0508..e681a2d212c 100644
--- a/include/TrackRenameLineEdit.h
+++ b/include/TrackRenameLineEdit.h
@@ -37,7 +37,7 @@ class TrackRenameLineEdit : public QLineEdit
void show();
protected:
- virtual void keyPressEvent( QKeyEvent * ke );
+ void keyPressEvent( QKeyEvent * ke ) override;
private:
QString m_oldName;
diff --git a/include/VisualizationWidget.h b/include/VisualizationWidget.h
index a178b1ad8c3..85825975a3c 100644
--- a/include/VisualizationWidget.h
+++ b/include/VisualizationWidget.h
@@ -61,8 +61,8 @@ class VisualizationWidget : public QWidget
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void mousePressEvent( QMouseEvent * _me );
+ void paintEvent( QPaintEvent * _pe ) override;
+ void mousePressEvent( QMouseEvent * _me ) override;
protected slots:
diff --git a/include/lmms_basics.h b/include/lmms_basics.h
index cca04e97d8f..9618108563e 100644
--- a/include/lmms_basics.h
+++ b/include/lmms_basics.h
@@ -35,7 +35,7 @@
#endif
-typedef int32_t tact_t;
+typedef int32_t bar_t;
typedef int32_t tick_t;
typedef uint8_t volume_t;
typedef int8_t panning_t;
diff --git a/include/panning.h b/include/panning.h
index 8668ddf88a8..8994df9ab6c 100644
--- a/include/panning.h
+++ b/include/panning.h
@@ -27,7 +27,6 @@
#define PANNING_H
#include "lmms_basics.h"
-#include "volume.h"
#include "panning_constants.h"
#include "Midi.h"
diff --git a/include/versioninfo.h b/include/versioninfo.h
index b34936d5742..a5d3d64c646 100644
--- a/include/versioninfo.h
+++ b/include/versioninfo.h
@@ -32,6 +32,10 @@
#define PLATFORM "OpenBSD"
#endif
+#ifdef LMMS_BUILD_FREEBSD
+#define PLATFORM "FreeBSD"
+#endif
+
#ifdef LMMS_BUILD_WIN32
#define PLATFORM "win32"
#endif
diff --git a/include/volume.h b/include/volume.h
index f0f7708adf3..9172395d625 100644
--- a/include/volume.h
+++ b/include/volume.h
@@ -26,10 +26,7 @@
#ifndef VOLUME_H
#define VOLUME_H
-#include "lmmsconfig.h"
-
#include "lmms_basics.h"
-#include "Midi.h"
const volume_t MinVolume = 0;
const volume_t MaxVolume = 200;
diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt
index 4f139f8b32b..a4e56921fea 100644
--- a/plugins/CMakeLists.txt
+++ b/plugins/CMakeLists.txt
@@ -14,89 +14,7 @@ INCLUDE_DIRECTORIES(
"${CMAKE_BINARY_DIR}/src"
)
-SET(PLUGIN_LIST "" CACHE STRING "List of plug-ins to build")
-
-STRING(REPLACE " " ";" PLUGIN_LIST "${PLUGIN_LIST}")
-
-OPTION(LMMS_MINIMAL "Build a minimal list of plug-ins" OFF)
-
-SET(MINIMAL_LIST
- audio_file_processor
- kicker
- triple_oscillator
-)
-
-IF(LMMS_MINIMAL)
- IF("${PLUGIN_LIST}" STREQUAL "")
- STRING(REPLACE ";" " " MINIMAL_LIST_STRING "${MINIMAL_LIST}")
- MESSAGE(
-"-- Using minimal plug-ins: ${MINIMAL_LIST_STRING}\n"
-" Note: You can specify specific plug-ins using -DPLUGIN_LIST=\"foo bar\""
- )
- ENDIF()
- SET(PLUGIN_LIST ${MINIMAL_LIST} ${PLUGIN_LIST})
-ENDIF()
-
-IF("${PLUGIN_LIST}" STREQUAL "")
- SET(PLUGIN_LIST
- ${MINIMAL_LIST}
- Amplifier
- BassBooster
- bit_invader
- Bitcrush
- carlabase
- carlapatchbay
- carlarack
- CrossoverEQ
- Delay
- DualFilter
- dynamics_processor
- Eq
- Flanger
- HydrogenImport
- ladspa_browser
- LadspaEffect
- lb302
- MidiImport
- MidiExport
- MultitapEcho
- monstro
- nes
- OpulenZ
- organic
- FreeBoy
- patman
- peak_controller_effect
- GigPlayer
- ReverbSC
- sf2_player
- sfxr
- sid
- SpectrumAnalyzer
- stereo_enhancer
- stereo_matrix
- stk
- vst_base
- vestige
- VstEffect
- watsyn
- waveshaper
- vibed
- Xpressive
- zynaddsubfx
- )
-
-ENDIF("${PLUGIN_LIST}" STREQUAL "")
-
-IF(MSVC)
- SET(MSVC_INCOMPATIBLE_PLUGINS
- LadspaEffect
- zynaddsubfx
- )
- message(WARNING "Compiling with MSVC. The following plugins are not available: ${MSVC_INCOMPATIBLE_PLUGINS}")
- LIST(REMOVE_ITEM PLUGIN_LIST ${MSVC_INCOMPATIBLE_PLUGINS})
-ENDIF()
-
+# See cmake/modules/PluginList.cmake
FOREACH(PLUGIN ${PLUGIN_LIST})
ADD_SUBDIRECTORY(${PLUGIN})
ENDFOREACH()
diff --git a/plugins/MidiImport/MidiImport.cpp b/plugins/MidiImport/MidiImport.cpp
index e31c2450826..b3d01e790dc 100644
--- a/plugins/MidiImport/MidiImport.cpp
+++ b/plugins/MidiImport/MidiImport.cpp
@@ -103,7 +103,7 @@ bool MidiImport::tryImport( TrackContainer* tc )
#ifdef LMMS_HAVE_FLUIDSYNTH
if( gui != NULL &&
- ConfigManager::inst()->defaultSoundfont().isEmpty() )
+ ConfigManager::inst()->sf2File().isEmpty() )
{
QMessageBox::information( gui->mainWindow(),
tr( "Setup incomplete" ),
@@ -188,9 +188,9 @@ class smfMidiCC
smfMidiCC & putValue( MidiTime time, AutomatableModel * objModel, float value )
{
- if( !ap || time > lastPos + DefaultTicksPerTact )
+ if( !ap || time > lastPos + DefaultTicksPerBar )
{
- MidiTime pPos = MidiTime( time.getTact(), 0 );
+ MidiTime pPos = MidiTime( time.getBar(), 0 );
ap = dynamic_cast(
at->createTCO(0) );
ap->movePosition( pPos );
@@ -200,7 +200,7 @@ class smfMidiCC
lastPos = time;
time = time - ap->startPosition();
ap->putValue( time, value, false );
- ap->changeLength( MidiTime( time.getTact() + 1, 0 ) );
+ ap->changeLength( MidiTime( time.getBar() + 1, 0 ) );
return *this;
}
@@ -242,7 +242,7 @@ class smfMidiChannel
if( it_inst )
{
isSF2 = true;
- it_inst->loadFile( ConfigManager::inst()->defaultSoundfont() );
+ it_inst->loadFile( ConfigManager::inst()->sf2File() );
it_inst->childModel( "bank" )->setValue( 0 );
it_inst->childModel( "patch" )->setValue( 0 );
}
@@ -267,9 +267,9 @@ class smfMidiChannel
void addNote( Note & n )
{
- if( !p || n.pos() > lastEnd + DefaultTicksPerTact )
+ if( !p || n.pos() > lastEnd + DefaultTicksPerBar )
{
- MidiTime pPos = MidiTime( n.pos().getTact(), 0 );
+ MidiTime pPos = MidiTime( n.pos().getBar(), 0 );
p = dynamic_cast( it->createTCO( 0 ) );
p->movePosition( pPos );
}
@@ -309,33 +309,36 @@ bool MidiImport::readSMF( TrackContainer* tc )
smfMidiChannel chs[256];
MeterModel & timeSigMM = Engine::getSong()->getTimeSigModel();
- AutomationPattern * timeSigNumeratorPat =
- AutomationPattern::globalAutomationPattern( &timeSigMM.numeratorModel() );
- AutomationPattern * timeSigDenominatorPat =
- AutomationPattern::globalAutomationPattern( &timeSigMM.denominatorModel() );
+ AutomationTrack * nt = dynamic_cast(
+ Track::create(Track::AutomationTrack, Engine::getSong()));
+ nt->setName(tr("MIDI Time Signature Numerator"));
+ AutomationTrack * dt = dynamic_cast(
+ Track::create(Track::AutomationTrack, Engine::getSong()));
+ dt->setName(tr("MIDI Time Signature Denominator"));
+ AutomationPattern * timeSigNumeratorPat =
+ new AutomationPattern(nt);
+ timeSigNumeratorPat->setDisplayName(tr("Numerator"));
+ timeSigNumeratorPat->addObject(&timeSigMM.numeratorModel());
+ AutomationPattern * timeSigDenominatorPat =
+ new AutomationPattern(dt);
+ timeSigDenominatorPat->setDisplayName(tr("Denominator"));
+ timeSigDenominatorPat->addObject(&timeSigMM.denominatorModel());
// TODO: adjust these to Time.Sig changes
- double beatsPerTact = 4;
- double ticksPerBeat = DefaultTicksPerTact / beatsPerTact;
+ double beatsPerBar = 4;
+ double ticksPerBeat = DefaultTicksPerBar / beatsPerBar;
// Time-sig changes
Alg_time_sigs * timeSigs = &seq->time_sig;
for( int s = 0; s < timeSigs->length(); ++s )
{
Alg_time_sig timeSig = (*timeSigs)[s];
- // Initial timeSig, set song-default value
- if(/* timeSig.beat == 0*/ true )
- {
- // TODO set song-global default value
- printf("Another timesig at %f\n", timeSig.beat);
- timeSigNumeratorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.num );
- timeSigDenominatorPat->putValue( timeSig.beat*ticksPerBeat, timeSig.den );
- }
- else
- {
- }
-
+ timeSigNumeratorPat->putValue(timeSig.beat * ticksPerBeat, timeSig.num);
+ timeSigDenominatorPat->putValue(timeSig.beat * ticksPerBeat, timeSig.den);
}
+ // manually call otherwise the pattern shows being 1 bar
+ timeSigNumeratorPat->updateLength();
+ timeSigDenominatorPat->updateLength();
pd.setValue( 2 );
diff --git a/plugins/VstEffect/VstEffectControlDialog.h b/plugins/VstEffect/VstEffectControlDialog.h
index 3cd9af360ab..930f514c9b3 100644
--- a/plugins/VstEffect/VstEffectControlDialog.h
+++ b/plugins/VstEffect/VstEffectControlDialog.h
@@ -49,8 +49,8 @@ class VstEffectControlDialog : public EffectControlDialog
virtual ~VstEffectControlDialog();
protected:
- virtual void paintEvent( QPaintEvent * _pe );
- virtual void showEvent( QShowEvent* _se ) override;
+ void paintEvent( QPaintEvent * _pe ) override;
+ void showEvent( QShowEvent* _se ) override;
private:
QWidget * m_pluginWidget;
diff --git a/plugins/bit_invader/bit_invader.cpp b/plugins/bit_invader/bit_invader.cpp
index f8a8423ad03..caa272fa7f0 100644
--- a/plugins/bit_invader/bit_invader.cpp
+++ b/plugins/bit_invader/bit_invader.cpp
@@ -64,17 +64,16 @@ Plugin::Descriptor PLUGIN_EXPORT bitinvader_plugin_descriptor =
}
-bSynth::bSynth( float * _shape, int _length, NotePlayHandle * _nph, bool _interpolation,
+bSynth::bSynth( float * _shape, NotePlayHandle * _nph, bool _interpolation,
float _factor, const sample_rate_t _sample_rate ) :
sample_index( 0 ),
sample_realindex( 0 ),
nph( _nph ),
- sample_length( _length ),
sample_rate( _sample_rate ),
interpolation( _interpolation)
{
- sample_shape = new float[sample_length];
- for (int i=0; i < _length; ++i)
+ sample_shape = new float[200];
+ for (int i=0; i < 200; ++i)
{
sample_shape[i] = _shape[i] * _factor;
}
@@ -87,7 +86,7 @@ bSynth::~bSynth()
}
-sample_t bSynth::nextStringSample()
+sample_t bSynth::nextStringSample( float sample_length )
{
float sample_step =
static_cast( sample_length / ( sample_rate / nph->frequency() ) );
@@ -140,10 +139,12 @@ sample_t bSynth::nextStringSample()
bitInvader::bitInvader( InstrumentTrack * _instrument_track ) :
Instrument( _instrument_track, &bitinvader_plugin_descriptor ),
m_sampleLength( 128, 4, 200, 1, this, tr( "Sample length" ) ),
- m_graph( -1.0f, 1.0f, 128, this ),
+ m_graph( -1.0f, 1.0f, 200, this ),
m_interpolation( false, this ),
m_normalize( false, this )
{
+
+ lengthChanged();
m_graph.setWaveToSine();
@@ -278,7 +279,6 @@ void bitInvader::playNote( NotePlayHandle * _n,
_n->m_pluginData = new bSynth(
const_cast( m_graph.samples() ),
- m_graph.length(),
_n,
m_interpolation.value(), factor,
Engine::mixer()->processingSampleRate() );
@@ -290,7 +290,7 @@ void bitInvader::playNote( NotePlayHandle * _n,
bSynth * ps = static_cast( _n->m_pluginData );
for( fpp_t frame = offset; frame < frames + offset; ++frame )
{
- const sample_t cur = ps->nextStringSample();
+ const sample_t cur = ps->nextStringSample( m_graph.length() );
for( ch_cnt_t chnl = 0; chnl < DEFAULT_CHANNELS; ++chnl )
{
_working_buffer[frame][chnl] = cur;
@@ -572,7 +572,3 @@ PLUGIN_EXPORT Plugin * lmms_plugin_main( Model *m, void * )
}
-
-
-
-
diff --git a/plugins/bit_invader/bit_invader.h b/plugins/bit_invader/bit_invader.h
index 793831e4aab..ae9c92cb264 100644
--- a/plugins/bit_invader/bit_invader.h
+++ b/plugins/bit_invader/bit_invader.h
@@ -42,12 +42,12 @@ class bSynth
{
MM_OPERATORS
public:
- bSynth( float * sample, int length, NotePlayHandle * _nph,
+ bSynth( float * sample, NotePlayHandle * _nph,
bool _interpolation, float factor,
const sample_rate_t _sample_rate );
virtual ~bSynth();
- sample_t nextStringSample();
+ sample_t nextStringSample( float sample_length );
private:
@@ -55,7 +55,6 @@ class bSynth
float sample_realindex;
float* sample_shape;
NotePlayHandle* nph;
- const int sample_length;
const sample_rate_t sample_rate;
bool interpolation;
diff --git a/plugins/carlabase/carla.cpp b/plugins/carlabase/carla.cpp
index 3df97ce40dc..ba2dd085c49 100644
--- a/plugins/carlabase/carla.cpp
+++ b/plugins/carlabase/carla.cpp
@@ -324,10 +324,10 @@ void CarlaInstrument::play(sampleFrame* workingBuffer)
fTimeInfo.playing = s->isPlaying();
fTimeInfo.frame = s->getPlayPos(s->playMode()).frames(Engine::framesPerTick());
fTimeInfo.usecs = s->getMilliseconds()*1000;
- fTimeInfo.bbt.bar = s->getTacts() + 1;
+ fTimeInfo.bbt.bar = s->getBars() + 1;
fTimeInfo.bbt.beat = s->getBeat() + 1;
fTimeInfo.bbt.tick = s->getBeatTicks();
- fTimeInfo.bbt.barStartTick = ticksPerBeat*s->getTimeSigModel().getNumerator()*s->getTacts();
+ fTimeInfo.bbt.barStartTick = ticksPerBeat*s->getTimeSigModel().getNumerator()*s->getBars();
fTimeInfo.bbt.beatsPerBar = s->getTimeSigModel().getNumerator();
fTimeInfo.bbt.beatType = s->getTimeSigModel().getDenominator();
fTimeInfo.bbt.ticksPerBeat = ticksPerBeat;
diff --git a/plugins/organic/organic.cpp b/plugins/organic/organic.cpp
index 7da4fc6f7f4..6eb933afad3 100644
--- a/plugins/organic/organic.cpp
+++ b/plugins/organic/organic.cpp
@@ -306,7 +306,7 @@ void organicInstrument::playNote( NotePlayHandle * _n,
// fxKnob is [0;1]
float t = m_fx1Model.value();
- for (int i=0 ; i < frames ; i++)
+ for (int i=0 ; i < frames + offset ; i++)
{
_working_buffer[i][0] = waveshape( _working_buffer[i][0], t ) *
m_volModel.value() / 100.0f;
diff --git a/plugins/peak_controller_effect/peak_controller_effect.h b/plugins/peak_controller_effect/peak_controller_effect.h
index 093b564379e..a872e2b8b46 100644
--- a/plugins/peak_controller_effect/peak_controller_effect.h
+++ b/plugins/peak_controller_effect/peak_controller_effect.h
@@ -36,9 +36,9 @@ class PeakControllerEffect : public Effect
const Descriptor::SubPluginFeatures::Key * _key );
virtual ~PeakControllerEffect();
virtual bool processAudioBuffer( sampleFrame * _buf,
- const fpp_t _frames );
+ const fpp_t _frames ) override;
- virtual EffectControls * controls()
+ EffectControls * controls() override
{
return &m_peakControls;
}
diff --git a/plugins/peak_controller_effect/peak_controller_effect_controls.h b/plugins/peak_controller_effect/peak_controller_effect_controls.h
index 784df4d8d20..fe90eddca85 100644
--- a/plugins/peak_controller_effect/peak_controller_effect_controls.h
+++ b/plugins/peak_controller_effect/peak_controller_effect_controls.h
@@ -41,18 +41,18 @@ class PeakControllerEffectControls : public EffectControls
{
}
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent );
- virtual void loadSettings( const QDomElement & _this );
- inline virtual QString nodeName() const
+ void saveSettings( QDomDocument & _doc, QDomElement & _parent ) override;
+ void loadSettings( const QDomElement & _this ) override;
+ inline QString nodeName() const override
{
return "peakcontrollereffectcontrols";
}
- virtual int controlCount()
+ int controlCount() override
{
return 1;
}
- virtual EffectControlDialog * createView()
+ EffectControlDialog * createView() override
{
return new PeakControllerEffectControlDialog( this );
}
diff --git a/plugins/sf2_player/sf2_player.cpp b/plugins/sf2_player/sf2_player.cpp
index cc2575d2bfe..99af2278145 100644
--- a/plugins/sf2_player/sf2_player.cpp
+++ b/plugins/sf2_player/sf2_player.cpp
@@ -151,7 +151,7 @@ sf2Instrument::sf2Instrument( InstrumentTrack * _instrument_track ) :
m_chorusDepth.setInitValue(settingVal);
#endif
- loadFile( ConfigManager::inst()->defaultSoundfont() );
+ loadFile( ConfigManager::inst()->sf2File() );
updateSampleRate();
updateReverbOn();
diff --git a/plugins/vst_base/CMakeLists.txt b/plugins/vst_base/CMakeLists.txt
index 44ed0dcb3be..873ed5f8e81 100644
--- a/plugins/vst_base/CMakeLists.txt
+++ b/plugins/vst_base/CMakeLists.txt
@@ -11,23 +11,35 @@ SET(REMOTE_VST_PLUGIN_FILEPATH_64 "RemoteVstPlugin64" CACHE STRING "Relative fil
ADD_SUBDIRECTORY(vstbase)
-SET(LMMS_BINARY_DIR ${CMAKE_BINARY_DIR})
-SET(LMMS_SOURCE_DIR ${CMAKE_SOURCE_DIR})
-
SET(EXTERNALPROJECT_ARGS
SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin"
- INSTALL_COMMAND ""
+ #INSTALL_COMMAND ""
BUILD_ALWAYS ON
+ # Skip the install step.
+ INSTALL_COMMAND ""
)
+set(export_variables
+ "LMMS_SOURCE_DIR"
+ "LMMS_BINARY_DIR"
+ "CMAKE_MODULE_PATH"
+ "CMAKE_RUNTIME_OUTPUT_DIRECTORY"
+ "CMAKE_BUILD_TYPE"
+ "LMMS_BUILD_LINUX"
+ "LMMS_BUILD_WIN32"
+ "PLUGIN_DIR")
+
SET(EXTERNALPROJECT_CMAKE_ARGS
- "-DLMMS_SOURCE_DIR=${CMAKE_SOURCE_DIR}"
- "-DLMMS_BINARY_DIR=${CMAKE_BINARY_DIR}"
- "-DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
- "-DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH}"
- "-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}"
+ "-DBUILD_WITH_EXTERNALPROJECT=ON"
)
+macro(_export_var_to_external var_name)
+ list(APPEND EXTERNALPROJECT_CMAKE_ARGS "-D${var_name}=${${var_name}}")
+endmacro()
+foreach(var ${export_variables})
+ _export_var_to_external(${var})
+endforeach()
+
# build 32 bit version of RemoteVstPlugin
IF(WANT_VST_32)
INCLUDE("${CMAKE_CURRENT_LIST_DIR}/RemoteVstPlugin32.cmake")
diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp
index 48ab137438b..5b4bbbd9b5e 100644
--- a/plugins/vst_base/RemoteVstPlugin.cpp
+++ b/plugins/vst_base/RemoteVstPlugin.cpp
@@ -734,6 +734,7 @@ void RemoteVstPlugin::init( const std::string & _plugin_file )
static void close_check( FILE* fp )
{
+ if (!fp) {return;}
if( fclose( fp ) )
{
perror( "fclose" );
@@ -1128,6 +1129,12 @@ void RemoteVstPlugin::saveChunkToFile( const std::string & _file )
if( len > 0 )
{
FILE* fp = F_OPEN_UTF8( _file, "wb" );
+ if (!fp)
+ {
+ fprintf( stderr,
+ "Error opening file for saving chunk.\n" );
+ return;
+ }
if ( fwrite( chunk, 1, len, fp ) != len )
{
fprintf( stderr,
@@ -1293,6 +1300,12 @@ void RemoteVstPlugin::savePreset( const std::string & _file )
pBank->numPrograms = endian_swap( uIntToFile );
FILE * stream = F_OPEN_UTF8( _file, "w" );
+ if (!stream)
+ {
+ fprintf( stderr,
+ "Error opening file for saving preset.\n" );
+ return;
+ }
fwrite ( pBank, 1, 28, stream );
fwrite ( progName, 1, isPreset ? 28 : 128, stream );
if ( chunky ) {
@@ -1345,6 +1358,12 @@ void RemoteVstPlugin::loadPresetFile( const std::string & _file )
unsigned int len = 0;
sBank * pBank = (sBank*) new char[ sizeof( sBank ) ];
FILE * stream = F_OPEN_UTF8( _file, "r" );
+ if (!stream)
+ {
+ fprintf( stderr,
+ "Error opening file for loading preset.\n" );
+ return;
+ }
if ( fread ( pBank, 1, 56, stream ) != 56 )
{
fprintf( stderr, "Error loading preset file.\n" );
@@ -1446,6 +1465,12 @@ void RemoteVstPlugin::loadChunkFromFile( const std::string & _file, int _len )
char * chunk = new char[_len];
FILE* fp = F_OPEN_UTF8( _file, "rb" );
+ if (!fp)
+ {
+ fprintf( stderr,
+ "Error opening file for loading chunk.\n" );
+ return;
+ }
if ( fread( chunk, 1, _len, fp ) != _len )
{
fprintf( stderr, "Error loading chunk from file.\n" );
diff --git a/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt b/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt
index 59dd19a0aa6..f4023fd426c 100644
--- a/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt
+++ b/plugins/vst_base/RemoteVstPlugin/CMakeLists.txt
@@ -76,3 +76,18 @@ endif()
IF(STRIP)
ADD_CUSTOM_COMMAND(TARGET ${EXE_NAME} POST_BUILD COMMAND "${STRIP}" "$")
ENDIF()
+
+if(BITNESS EQUAL 32)
+ INSTALL(TARGETS ${EXE_NAME} RUNTIME DESTINATION "${PLUGIN_DIR}/32")
+else()
+ INSTALL(TARGETS ${EXE_NAME} RUNTIME DESTINATION "${PLUGIN_DIR}")
+endif()
+
+if(BUILD_WITH_EXTERNALPROJECT)
+ include(InstallTargetDependencies)
+ INSTALL_TARGET_DEPENDENCIES(TARGETS ${EXE_NAME}
+ DESTINATION "${PLUGIN_DIR}/32")
+else()
+ # Needed to deploy dependencies of RemoteVstPlugin
+ SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT "${EXE_NAME}")
+endif()
diff --git a/plugins/vst_base/RemoteVstPlugin32.cmake b/plugins/vst_base/RemoteVstPlugin32.cmake
index 9a8f0452948..cba9a26c8ab 100644
--- a/plugins/vst_base/RemoteVstPlugin32.cmake
+++ b/plugins/vst_base/RemoteVstPlugin32.cmake
@@ -1,33 +1,31 @@
+# INSTALL_EXTERNAL_PROJECT: install a project created with ExternalProject_Add in the
+# parent project's install time.
+#
+# Description:
+# In a regular scenario, cmake will install external projects
+# BEFORE actually building the parent project. Since the building
+# process may use installed components from the project.
+# We want to give the external project the ability to install
+# files directly to the parent's install. Therefore, we have to
+# manually trigger the install stage with the parent's INSTALL_PREFIX.
+MACRO(INSTALL_EXTERNAL_PROJECT name)
+ ExternalProject_Get_Property(${name} BINARY_DIR)
+
+ install(CODE "include(\"${BINARY_DIR}/cmake_install.cmake\")")
+ENDMACRO()
+
IF(LMMS_BUILD_WIN32 AND NOT LMMS_BUILD_WIN64)
ADD_SUBDIRECTORY(RemoteVstPlugin)
- IF(MSVC)
- SET(VCPKG_ROOT "${CMAKE_FIND_ROOT_PATH}")
- INSTALL(FILES "${VCPKG_ROOT}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${VCPKG_ROOT}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
- ELSE(MSVC)
- INSTALL(FILES "${MINGW_PREFIX}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${MINGW_PREFIX}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
- ENDIF(MSVC)
- INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
- SET(MSVC_VER ${CMAKE_CXX_COMPILER_VERSION})
+ IF(NOT QT_32_PREFIX)
+ SET(LMMS_MSVC_YEAR_FOR_QT ${LMMS_MSVC_YEAR})
- IF(NOT CMAKE_GENERATOR_32)
- IF(MSVC_VER VERSION_GREATER 19.10 OR MSVC_VER VERSION_EQUAL 19.10)
- SET(CMAKE_GENERATOR_32 "Visual Studio 15 2017")
- SET(MSVC_YEAR 2017)
- ELSEIF(MSVC_VER VERSION_GREATER 19.0 OR MSVC_VER VERSION_EQUAL 19.0)
- SET(CMAKE_GENERATOR_32 "Visual Studio 14 2015")
- SET(MSVC_YEAR 2015)
- ELSE()
- MESSAGE(SEND_WARNING "Can't build RemoteVstPlugin32, unknown MSVC version ${MSVC_VER} and no CMAKE_GENERATOR_32 set")
- RETURN()
- ENDIF()
- ENDIF()
+ if(LMMS_MSVC_YEAR_FOR_QT EQUAL 2019)
+ SET(LMMS_MSVC_YEAR_FOR_QT 2017) # Qt only provides binaries for MSVC 2017, but 2019 is binary compatible
+ endif()
- IF(NOT QT_32_PREFIX)
GET_FILENAME_COMPONENT(QT_BIN_DIR ${QT_QMAKE_EXECUTABLE} DIRECTORY)
- SET(QT_32_PREFIX "${QT_BIN_DIR}/../../msvc${MSVC_YEAR}")
+ SET(QT_32_PREFIX "${QT_BIN_DIR}/../../msvc${LMMS_MSVC_YEAR_FOR_QT}")
ENDIF()
#TODO: qt5 installed using vcpkg: I don't know how to detect if the user built the x86 version of qt5 from here. At least not cleanly.
@@ -38,7 +36,8 @@ ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
ExternalProject_Add(RemoteVstPlugin32
"${EXTERNALPROJECT_ARGS}"
- CMAKE_GENERATOR "${CMAKE_GENERATOR_32}"
+ CMAKE_GENERATOR "${LMMS_MSVC_GENERATOR}"
+ CMAKE_GENERATOR_PLATFORM Win32
#CMAKE_GENERATOR_TOOLSET "${CMAKE_GENERATOR_TOOLSET}"
CMAKE_ARGS
"${EXTERNALPROJECT_CMAKE_ARGS}"
@@ -46,16 +45,7 @@ ELSEIF(LMMS_BUILD_WIN64 AND MSVC)
"-DCMAKE_PREFIX_PATH=${QT_32_PREFIX}"
)
- INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
-
- #TODO: find a solution when not using vcpkg for qt
- SET(VCPKG_ROOT_32 "${CMAKE_FIND_ROOT_PATH}/../x86-windows")
-
- INSTALL(FILES "${VCPKG_ROOT_32}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${VCPKG_ROOT_32}/bin/pcre2-16.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${VCPKG_ROOT_32}/bin/double-conversion.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${VCPKG_ROOT_32}/bin/qt5core.dll" DESTINATION "${PLUGIN_DIR}/32")
-
+ INSTALL_EXTERNAL_PROJECT(RemoteVstPlugin32)
ELSEIF(LMMS_BUILD_LINUX)
# Use winegcc
INCLUDE(CheckWineGcc)
@@ -82,9 +72,7 @@ ELSEIF(CMAKE_TOOLCHAIN_FILE_32)
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_32}"
"-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE_32}"
)
- INSTALL(FILES "${CMAKE_PREFIX_PATH_32}/bin/Qt5Core.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(FILES "${CMAKE_PREFIX_PATH_32}/bin/zlib1.dll" DESTINATION "${PLUGIN_DIR}/32")
- INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../32/RemoteVstPlugin32.exe" DESTINATION "${PLUGIN_DIR}/32")
+ INSTALL_EXTERNAL_PROJECT(RemoteVstPlugin32)
ELSE()
MESSAGE(WARNING "Can't build RemoteVstPlugin32, unknown environment. Please supply CMAKE_TOOLCHAIN_FILE_32 and optionally CMAKE_PREFIX_PATH_32")
RETURN()
diff --git a/plugins/vst_base/RemoteVstPlugin64.cmake b/plugins/vst_base/RemoteVstPlugin64.cmake
index 4b02bf8abf4..65b33a16251 100644
--- a/plugins/vst_base/RemoteVstPlugin64.cmake
+++ b/plugins/vst_base/RemoteVstPlugin64.cmake
@@ -1,6 +1,5 @@
IF(LMMS_BUILD_WIN64)
ADD_SUBDIRECTORY(RemoteVstPlugin)
- INSTALL(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/../RemoteVstPlugin64.exe" DESTINATION "${PLUGIN_DIR}")
ELSEIF(LMMS_BUILD_LINUX)
INCLUDE(CheckWineGcc)
CheckWineGcc(64 "${WINEGCC}" WINEGCC_WORKING)
diff --git a/plugins/vst_base/VstPlugin.h b/plugins/vst_base/VstPlugin.h
index 5b459d40dd8..26e7fec369a 100644
--- a/plugins/vst_base/VstPlugin.h
+++ b/plugins/vst_base/VstPlugin.h
@@ -49,7 +49,7 @@ class VSTBASE_EXPORT VstPlugin : public RemotePlugin, public JournallingObject
void tryLoad( const QString &remoteVstPluginExecutable );
- virtual bool processMessage( const message & _m );
+ bool processMessage( const message & _m ) override;
inline bool hasEditor() const
{
@@ -99,17 +99,17 @@ class VSTBASE_EXPORT VstPlugin : public RemotePlugin, public JournallingObject
QWidget * pluginWidget();
- virtual void loadSettings( const QDomElement & _this );
- virtual void saveSettings( QDomDocument & _doc, QDomElement & _this );
+ void loadSettings( const QDomElement & _this ) override;
+ void saveSettings( QDomDocument & _doc, QDomElement & _this ) override;
- inline virtual QString nodeName() const
+ virtual QString nodeName() const override
{
return "vstplugin";
}
virtual void createUI(QWidget *parent);
- bool eventFilter(QObject *obj, QEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event) override;
QString embedMethod() const;
diff --git a/plugins/zynaddsubfx/CMakeLists.txt b/plugins/zynaddsubfx/CMakeLists.txt
index f1d37fa3eb6..f9cc4efd37c 100644
--- a/plugins/zynaddsubfx/CMakeLists.txt
+++ b/plugins/zynaddsubfx/CMakeLists.txt
@@ -3,7 +3,7 @@ INCLUDE(BuildPlugin)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# definitions for ZynAddSubFX
-IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD)
+IF(LMMS_BUILD_LINUX OR LMMS_BUILD_APPLE OR LMMS_BUILD_OPENBSD OR LMMS_BUILD_FREEBSD)
FIND_PACKAGE(X11)
INCLUDE_DIRECTORIES(${X11_INCLUDE_DIR})
ADD_DEFINITIONS(-DOS_LINUX)
@@ -162,6 +162,8 @@ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ADD_EXECUTABLE(RemoteZynAddSubFx RemoteZynAddSubFx.cpp "${WINRC}")
INSTALL(TARGETS RemoteZynAddSubFx RUNTIME DESTINATION "${PLUGIN_DIR}")
+# Needed to deploy dependencies of RemoteZynAddSubFx
+SET_PROPERTY(GLOBAL APPEND PROPERTY PLUGINS_BUILT "RemoteZynAddSubFx")
IF(LMMS_BUILD_WIN32)
SET_TARGET_PROPERTIES(RemoteZynAddSubFx PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows")
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 4ac6bf1332f..ed0deefd1a1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -186,210 +186,30 @@ FOREACH(LIB ${LMMS_REQUIRED_LIBS})
ENDIF()
ENDFOREACH()
-
-# Install
-IF(NOT MSVC)
- IF(LMMS_BUILD_WIN32)
- SET_TARGET_PROPERTIES(lmms PROPERTIES
- LINK_FLAGS "${LINK_FLAGS} -mwindows"
- ENABLE_EXPORTS ON
- )
-
- IF(LMMS_BUILD_MSYS)
- # ENABLE_EXPORTS property has no effect in some MSYS2 configurations.
- # Add the linker flag manually to create liblmms.dll.a import library
- SET_PROPERTY(TARGET lmms
- APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--out-implib,liblmms.dll.a"
- )
- ENDIF()
-
- IF(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
- ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$")
- ENDIF()
-
- INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}")
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/Qt5Core.dll"
- "${MINGW_PREFIX}/bin/Qt5Gui.dll"
- "${MINGW_PREFIX}/bin/Qt5Widgets.dll"
- "${MINGW_PREFIX}/bin/Qt5Xml.dll"
- DESTINATION .)
- INSTALL(FILES
- "${MINGW_PREFIX}/lib/qt5/plugins/platforms/qwindows.dll"
- DESTINATION ./platforms)
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/libsamplerate-0.dll"
- "${MINGW_PREFIX}/bin/libsndfile-1.dll"
- "${MINGW_PREFIX}/bin/libvorbis-0.dll"
- "${MINGW_PREFIX}/bin/libvorbisenc-2.dll"
- "${MINGW_PREFIX}/bin/libvorbisfile-3.dll"
- "${MINGW_PREFIX}/bin/libjpeg-9.dll"
- "${MINGW_PREFIX}/bin/libogg-0.dll"
- "${MINGW_PREFIX}/bin/libmp3lame-0.dll"
- "${MINGW_PREFIX}/bin/libfftw3f-3.dll"
- "${MINGW_PREFIX}/bin/libFLAC-8.dll"
- "${MINGW_PREFIX}/bin/libpng16-16.dll"
- "${MINGW_PREFIX}/bin/SDL.dll"
- "${MINGW_PREFIX}/bin/libglib-2.0-0.dll"
- "${MINGW_PREFIX}/bin/libgthread-2.0-0.dll"
- "${MINGW_PREFIX}/bin/zlib1.dll"
- "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll"
- DESTINATION .)
- IF(LMMS_BUILD_MSYS)
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/libwinpthread-1.dll"
- "${MINGW_PREFIX}/bin/libgcc_s_seh-1.dll"
- "${MINGW_PREFIX}/bin/libstdc++-6.dll"
- DESTINATION .)
- ELSE()
- INSTALL(FILES
- "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll"
- DESTINATION .)
- ENDIF()
- IF(FLTK_FOUND)
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/libfltk.dll"
- DESTINATION .)
- ENDIF()
- IF(FLUIDSYNTH_FOUND)
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/libfluidsynth.dll"
- DESTINATION .)
- ENDIF()
- IF(GIG_FOUND)
- # Handle libgig-*.dll
- FILE(GLOB GIG_LIBRARY "${MINGW_PREFIX}/bin/libgig-*.dll")
- INSTALL(FILES
- ${GIG_LIBRARY}
- DESTINATION .)
- ENDIF()
- IF(PORTAUDIO_FOUND)
- INSTALL(FILES
- "${MINGW_PREFIX}/bin/libportaudio-2.dll"
- DESTINATION .)
- ENDIF()
- IF(SOUNDIO_FOUND)
- INSTALL(FILES
- "${MINGW_PREFIX}/lib/libsoundio.dll"
- DESTINATION .)
- ENDIF()
-
- ELSE(LMMS_BUILD_WIN32)
- IF(NOT LMMS_BUILD_APPLE)
- SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Wl,-E")
- ENDIF(NOT LMMS_BUILD_APPLE)
-
- INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}")
- INSTALL(FILES "${CMAKE_BINARY_DIR}/lmms.1.gz" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
-
- ENDIF(LMMS_BUILD_WIN32)
-ELSE(NOT MSVC)
- SET_TARGET_PROPERTIES(lmms PROPERTIES
- ENABLE_EXPORTS ON
- )
- INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}")
-
- SET_TARGET_PROPERTIES(lmms PROPERTIES
- LINK_FLAGS "${LINK_FLAGS} -mwindows"
- ENABLE_EXPORTS ON
+IF(LMMS_BUILD_WIN32)
+ SET_TARGET_PROPERTIES(lmms PROPERTIES
+ ENABLE_EXPORTS ON
+ )
+ IF(LMMS_BUILD_MSYS)
+ # ENABLE_EXPORTS property has no effect in some MSYS2 configurations.
+ # Add the linker flag manually to create liblmms.dll.a import library
+ SET_PROPERTY(TARGET lmms
+ APPEND_STRING PROPERTY LINK_FLAGS " -Wl,--out-implib,liblmms.dll.a"
)
+ ENDIF()
+ELSE()
+ IF(NOT LMMS_BUILD_APPLE)
+ SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Wl,-E")
+ ENDIF(NOT LMMS_BUILD_APPLE)
+
+ if(CMAKE_INSTALL_MANDIR)
+ SET(INSTALL_MANDIR ${CMAKE_INSTALL_MANDIR})
+ ELSE(CMAKE_INSTALL_MANDIR)
+ SET(INSTALL_MANDIR ${CMAKE_INSTALL_PREFIX}/share/man)
+ ENDIF(CMAKE_INSTALL_MANDIR)
+ INSTALL(FILES "${CMAKE_BINARY_DIR}/lmms.1.gz"
+ DESTINATION "${INSTALL_MANDIR}/man1/"
+ PERMISSIONS OWNER_READ GROUP_READ WORLD_READ)
+ENDIF()
- #CMAKE_FIND_ROOT_PATH
- SET(VCPKG_ROOT ${CMAKE_FIND_ROOT_PATH})
-
- INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}")
-
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/Qt5Core.dll"
- "${VCPKG_ROOT}/bin/Qt5Gui.dll"
- "${VCPKG_ROOT}/bin/Qt5Widgets.dll"
- "${VCPKG_ROOT}/bin/Qt5Xml.dll"
-
- "${VCPKG_ROOT}/bin/zlib1.dll"
- "${VCPKG_ROOT}/bin/jpeg62.dll"
- "${VCPKG_ROOT}/bin/libpng16.dll"
- "${VCPKG_ROOT}/bin/gthread-2.dll"
- "${VCPKG_ROOT}/bin/glib-2.dll"
- "${VCPKG_ROOT}/bin/harfbuzz.dll"
- "${VCPKG_ROOT}/bin/pcre2-16.dll"
- "${VCPKG_ROOT}/bin/double-conversion.dll"
- "${VCPKG_ROOT}/bin/freetype.dll"
- "${VCPKG_ROOT}/bin/libbz2.dll"
- "${VCPKG_ROOT}/bin/pcre.dll"
- "${VCPKG_ROOT}/bin/libiconv.dll"
- "${VCPKG_ROOT}/bin/libcharset.dll"
- "${VCPKG_ROOT}/bin/libintl.dll"
- DESTINATION .)
-
- INSTALL(FILES
- "${VCPKG_ROOT}/plugins/platforms/qwindows.dll"
- DESTINATION ./platforms)
-
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/libsndfile-1.dll"
- "${VCPKG_ROOT}/bin/ogg.dll"
- "${VCPKG_ROOT}/bin/vorbis.dll"
- "${VCPKG_ROOT}/bin/vorbisenc.dll"
- "${VCPKG_ROOT}/bin/FLAC.dll"
- "${VCPKG_ROOT}/bin/vorbisfile.dll"
-
- "${VCPKG_ROOT}/bin/libsamplerate-0.dll"
- "${VCPKG_ROOT}/bin/SDL2.dll"
- "${VCPKG_ROOT}/bin/fftw3f.dll"
- DESTINATION .)
-
- #not yet in vcpkg
- #IF(LAME_FOUND)
- # INSTALL(FILES
- # "${VCPKG_ROOT}/bin/libmp3lame-0.dll"
- # DESTINATION .)
- #ENDIF(LAME_FOUND)
-
- IF(FLTK_FOUND)
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/libfltk_SHARED.dll"
-
- "${VCPKG_ROOT}/bin/zlib1.dll"
- "${VCPKG_ROOT}/bin/jpeg62.dll"
- DESTINATION .)
- ENDIF()
-
- IF(FLUIDSYNTH_FOUND)
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/libfluidsynth-1.dll"
- "${VCPKG_ROOT}/bin/glib-2.dll"
- "${VCPKG_ROOT}/bin/pcre.dll"
- "${VCPKG_ROOT}/bin/libiconv.dll"
- "${VCPKG_ROOT}/bin/libcharset.dll"
- "${VCPKG_ROOT}/bin/libintl.dll"
- DESTINATION .)
- ENDIF()
-
- #not yet included in vcpkg
- #IF(GIG_FOUND)
- # # Handle libgig-*.dll
- # FILE(GLOB GIG_LIBRARY "${VCPKG_ROOT}/bin/libgig-*.dll")
- # INSTALL(FILES
- # ${GIG_LIBRARY}
- # DESTINATION .)
- #ENDIF()
-
- IF(PORTAUDIO_FOUND)
- IF(LMMS_BUILD_WIN64)
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/portaudio-x64.dll"
- DESTINATION .)
- ELSE(LMMS_BUILD_WIN64)
- INSTALL(FILES
- "${VCPKG_ROOT}/bin/portaudio-x86.dll"
- DESTINATION .)
- ENDIF(LMMS_BUILD_WIN64)
- ENDIF()
-
- #not yet in vcpkg
- #IF(SOUNDIO_FOUND)
- # INSTALL(FILES
- # "${VCPKG_ROOT}/bin/libsoundio.dll"
- # DESTINATION .)
- #ENDIF()
-ENDIF(NOT MSVC)
+INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}")
diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp
index e36838d807a..b38c704ef02 100644
--- a/src/core/AutomationPattern.cpp
+++ b/src/core/AutomationPattern.cpp
@@ -180,7 +180,7 @@ MidiTime AutomationPattern::timeMapLength() const
{
if( m_timeMap.isEmpty() ) return 0;
timeMap::const_iterator it = m_timeMap.end();
- return MidiTime( MidiTime( (it-1).key() ).nextFullTact(), 0 );
+ return MidiTime( MidiTime( (it-1).key() ).nextFullBar(), 0 );
}
diff --git a/src/core/BBTrackContainer.cpp b/src/core/BBTrackContainer.cpp
index e349c7b021e..ac4b6cb1a2f 100644
--- a/src/core/BBTrackContainer.cpp
+++ b/src/core/BBTrackContainer.cpp
@@ -62,7 +62,7 @@ bool BBTrackContainer::play( MidiTime _start, fpp_t _frames,
return false;
}
- _start = _start % ( lengthOfBB( _tco_num ) * MidiTime::ticksPerTact() );
+ _start = _start % ( lengthOfBB( _tco_num ) * MidiTime::ticksPerBar() );
TrackList tl = tracks();
for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it )
@@ -90,9 +90,9 @@ void BBTrackContainer::updateAfterTrackAdd()
-tact_t BBTrackContainer::lengthOfBB( int _bb ) const
+bar_t BBTrackContainer::lengthOfBB( int _bb ) const
{
- MidiTime max_length = MidiTime::ticksPerTact();
+ MidiTime max_length = MidiTime::ticksPerBar();
const TrackList & tl = tracks();
for (Track* t : tl)
@@ -104,7 +104,7 @@ tact_t BBTrackContainer::lengthOfBB( int _bb ) const
}
}
- return max_length.nextFullTact();
+ return max_length.nextFullBar();
}
@@ -124,7 +124,7 @@ void BBTrackContainer::removeBB( int _bb )
for( TrackList::iterator it = tl.begin(); it != tl.end(); ++it )
{
delete ( *it )->getTCO( _bb );
- ( *it )->removeTact( _bb * DefaultTicksPerTact );
+ ( *it )->removeBar( _bb * DefaultTicksPerBar );
}
if( _bb <= currentBB() )
{
@@ -151,7 +151,7 @@ void BBTrackContainer::swapBB( int _bb1, int _bb2 )
void BBTrackContainer::updateBBTrack( TrackContentObject * _tco )
{
BBTrack * t = BBTrack::findBBTrack( _tco->startPosition() /
- DefaultTicksPerTact );
+ DefaultTicksPerBar );
if( t != NULL )
{
t->dataChanged();
@@ -247,16 +247,13 @@ AutomatedValueMap BBTrackContainer::automatedValuesAt(MidiTime time, int tcoNum)
Q_ASSERT(tcoNum >= 0);
Q_ASSERT(time.getTicks() >= 0);
- auto length_tacts = lengthOfBB(tcoNum);
- auto length_ticks = length_tacts * MidiTime::ticksPerTact();
- if (time > length_ticks) {
+ auto length_bars = lengthOfBB(tcoNum);
+ auto length_ticks = length_bars * MidiTime::ticksPerBar();
+ if (time > length_ticks)
+ {
time = length_ticks;
}
- return TrackContainer::automatedValuesAt(time + (MidiTime::ticksPerTact() * tcoNum), tcoNum);
+ return TrackContainer::automatedValuesAt(time + (MidiTime::ticksPerBar() * tcoNum), tcoNum);
}
-
-
-
-
diff --git a/src/core/ConfigManager.cpp b/src/core/ConfigManager.cpp
index d8c783dd235..b8e8cd4ae77 100644
--- a/src/core/ConfigManager.cpp
+++ b/src/core/ConfigManager.cpp
@@ -22,6 +22,7 @@
*
*/
+
#include
#include
#include
@@ -36,9 +37,10 @@
#include "lmmsversion.h"
-static inline QString ensureTrailingSlash( const QString & s )
+
+static inline QString ensureTrailingSlash(const QString & s )
{
- if( ! s.isEmpty() && !s.endsWith('/') && !s.endsWith('\\') )
+ if(! s.isEmpty() && !s.endsWith('/') && !s.endsWith('\\'))
{
return s + '/';
}
@@ -50,14 +52,14 @@ ConfigManager * ConfigManager::s_instanceOfMe = NULL;
ConfigManager::ConfigManager() :
- m_lmmsRcFile( QDir::home().absolutePath() +"/.lmmsrc.xml" ),
- m_workingDir( QStandardPaths::writableLocation( QStandardPaths::DocumentsLocation ) + "/lmms/"),
- m_dataDir( "data:/" ),
- m_artworkDir( defaultArtworkDir() ),
- m_vstDir( m_workingDir + "vst/" ),
- m_gigDir( m_workingDir + GIG_PATH ),
- m_sf2Dir( m_workingDir + SF2_PATH ),
- m_version( defaultVersion() )
+ m_workingDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/lmms/"),
+ m_dataDir("data:/"),
+ m_vstDir(m_workingDir + "vst/"),
+ m_sf2Dir(m_workingDir + SF2_PATH),
+ m_gigDir(m_workingDir + GIG_PATH),
+ m_themeDir(defaultThemeDir()),
+ m_lmmsRcFile(QDir::home().absolutePath() +"/.lmmsrc.xml"),
+ m_version(defaultVersion())
{
// Detect < 1.2.0 working directory as a courtesy
if ( QFileInfo( QDir::home().absolutePath() + "/lmms/projects/" ).exists() )
@@ -125,19 +127,19 @@ ConfigManager::~ConfigManager()
void ConfigManager::upgrade_1_1_90()
{
// Remove trailing " (bad latency!)" string which was once saved with PulseAudio
- if( value( "mixer", "audiodev" ).startsWith( "PulseAudio (" ) )
+ if(value("mixer", "audiodev").startsWith("PulseAudio ("))
{
setValue("mixer", "audiodev", "PulseAudio");
}
// MidiAlsaRaw used to store the device info as "Device" instead of "device"
- if ( value( "MidiAlsaRaw", "device" ).isNull() )
+ if (value("MidiAlsaRaw", "device").isNull())
{
// copy "device" = "Device" and then delete the old "Device" (further down)
- QString oldDevice = value( "MidiAlsaRaw", "Device" );
+ QString oldDevice = value("MidiAlsaRaw", "Device");
setValue("MidiAlsaRaw", "device", oldDevice);
}
- if ( !value( "MidiAlsaRaw", "device" ).isNull() )
+ if (!value("MidiAlsaRaw", "device").isNull())
{
// delete the old "Device" in the case that we just copied it to "device"
// or if the user somehow set both the "Device" and "device" fields
@@ -149,9 +151,9 @@ void ConfigManager::upgrade_1_1_90()
void ConfigManager::upgrade_1_1_91()
{
// rename displaydbv to displaydbfs
- if ( !value( "app", "displaydbv" ).isNull() ) {
- setValue( "app", "displaydbfs", value( "app", "displaydbv" ) );
- deleteValue( "app", "displaydbv" );
+ if (!value("app", "displaydbv").isNull()) {
+ setValue("app", "displaydbfs", value("app", "displaydbv"));
+ deleteValue("app", "displaydbv");
}
}
@@ -159,27 +161,27 @@ void ConfigManager::upgrade_1_1_91()
void ConfigManager::upgrade()
{
// Skip the upgrade if versions match
- if ( m_version == LMMS_VERSION )
+ if (m_version == LMMS_VERSION)
{
return;
}
ProjectVersion createdWith = m_version;
- if ( createdWith.setCompareType(ProjectVersion::Build) < "1.1.90" )
+ if (createdWith.setCompareType(ProjectVersion::Build) < "1.1.90")
{
upgrade_1_1_90();
}
- if ( createdWith.setCompareType(ProjectVersion::Build) < "1.1.91" )
+ if (createdWith.setCompareType(ProjectVersion::Build) < "1.1.91")
{
upgrade_1_1_91();
}
// Don't use old themes as they break the UI (i.e. 0.4 != 1.0, etc)
- if ( createdWith.setCompareType(ProjectVersion::Minor) != LMMS_VERSION )
+ if (createdWith.setCompareType(ProjectVersion::Minor) != LMMS_VERSION)
{
- m_artworkDir = defaultArtworkDir();
+ m_themeDir = defaultThemeDir();
}
// Bump the version, now that we are upgraded
@@ -221,107 +223,115 @@ QString ConfigManager::vstEmbedMethod() const
bool ConfigManager::hasWorkingDir() const
{
- return QDir( m_workingDir ).exists();
+ return QDir(m_workingDir).exists();
}
-void ConfigManager::setWorkingDir( const QString & wd )
+void ConfigManager::setWorkingDir(const QString & workingDir)
{
- m_workingDir = ensureTrailingSlash( QDir::cleanPath( wd ) );
+ m_workingDir = ensureTrailingSlash(QDir::cleanPath(workingDir));
}
-void ConfigManager::setVSTDir( const QString & _vd )
+void ConfigManager::setVSTDir(const QString & vstDir)
{
- m_vstDir = ensureTrailingSlash( _vd );
+ m_vstDir = ensureTrailingSlash(vstDir);
}
-void ConfigManager::setArtworkDir( const QString & _ad )
+void ConfigManager::setLADSPADir(const QString & ladspaDir)
{
- m_artworkDir = ensureTrailingSlash( _ad );
+ m_ladspaDir = ladspaDir;
}
-void ConfigManager::setLADSPADir( const QString & _fd )
+void ConfigManager::setSTKDir(const QString & stkDir)
{
- m_ladDir = _fd;
+#ifdef LMMS_HAVE_STK
+ m_stkDir = ensureTrailingSlash(stkDir);
+#endif
}
-void ConfigManager::setSTKDir( const QString & _fd )
+void ConfigManager::setSF2Dir(const QString & sf2Dir)
{
-#ifdef LMMS_HAVE_STK
- m_stkDir = ensureTrailingSlash( _fd );
-#endif
+ m_sf2Dir = sf2Dir;
}
-void ConfigManager::setDefaultSoundfont( const QString & _sf )
+void ConfigManager::setSF2File(const QString & sf2File)
{
#ifdef LMMS_HAVE_FLUIDSYNTH
- m_defaultSoundfont = _sf;
+ m_sf2File = sf2File;
#endif
}
-void ConfigManager::setBackgroundArtwork( const QString & _ba )
+void ConfigManager::setGIGDir(const QString & gigDir)
{
- m_backgroundArtwork = _ba;
+ m_gigDir = gigDir;
}
-void ConfigManager::setGIGDir(const QString &gd)
+
+
+
+void ConfigManager::setThemeDir(const QString & themeDir)
{
- m_gigDir = gd;
+ m_themeDir = ensureTrailingSlash(themeDir);
}
-void ConfigManager::setSF2Dir(const QString &sfd)
+
+
+
+void ConfigManager::setBackgroundPicFile(const QString & backgroundPicFile)
{
- m_sf2Dir = sfd;
+ m_backgroundPicFile = backgroundPicFile;
}
+
+
void ConfigManager::createWorkingDir()
{
- QDir().mkpath( m_workingDir );
-
- QDir().mkpath( userProjectsDir() );
- QDir().mkpath( userTemplateDir() );
- QDir().mkpath( userSamplesDir() );
- QDir().mkpath( userPresetsDir() );
- QDir().mkpath( userGigDir() );
- QDir().mkpath( userSf2Dir() );
- QDir().mkpath( userVstDir() );
- QDir().mkpath( userLadspaDir() );
+ QDir().mkpath(m_workingDir);
+
+ QDir().mkpath(userProjectsDir());
+ QDir().mkpath(userTemplateDir());
+ QDir().mkpath(userSamplesDir());
+ QDir().mkpath(userPresetsDir());
+ QDir().mkpath(userGigDir());
+ QDir().mkpath(userSf2Dir());
+ QDir().mkpath(userVstDir());
+ QDir().mkpath(userLadspaDir());
}
-void ConfigManager::addRecentlyOpenedProject( const QString & file )
+void ConfigManager::addRecentlyOpenedProject(const QString & file)
{
- QFileInfo recentFile( file );
- if( recentFile.suffix().toLower() == "mmp" ||
+ QFileInfo recentFile(file);
+ if(recentFile.suffix().toLower() == "mmp" ||
recentFile.suffix().toLower() == "mmpz" ||
- recentFile.suffix().toLower() == "mpt" )
+ recentFile.suffix().toLower() == "mpt")
{
- m_recentlyOpenedProjects.removeAll( file );
- if( m_recentlyOpenedProjects.size() > 50 )
+ m_recentlyOpenedProjects.removeAll(file);
+ if(m_recentlyOpenedProjects.size() > 50)
{
m_recentlyOpenedProjects.removeLast();
}
- m_recentlyOpenedProjects.push_front( file );
+ m_recentlyOpenedProjects.push_front(file);
ConfigManager::inst()->saveConfigFile();
}
}
@@ -329,18 +339,18 @@ void ConfigManager::addRecentlyOpenedProject( const QString & file )
-const QString & ConfigManager::value( const QString & cls,
- const QString & attribute ) const
+const QString & ConfigManager::value(const QString & cls,
+ const QString & attribute) const
{
- if( m_settings.contains( cls ) )
+ if(m_settings.contains(cls))
{
- for( stringPairVector::const_iterator it =
+ for(stringPairVector::const_iterator it =
m_settings[cls].begin();
- it != m_settings[cls].end(); ++it )
+ it != m_settings[cls].end(); ++it)
{
- if( ( *it ).first == attribute )
+ if((*it).first == attribute)
{
- return ( *it ).second ;
+ return (*it).second ;
}
}
}
@@ -350,49 +360,49 @@ const QString & ConfigManager::value( const QString & cls,
-const QString & ConfigManager::value( const QString & cls,
+const QString & ConfigManager::value(const QString & cls,
const QString & attribute,
- const QString & defaultVal ) const
+ const QString & defaultVal) const
{
- const QString & val = value( cls, attribute );
+ const QString & val = value(cls, attribute);
return val.isEmpty() ? defaultVal : val;
}
-void ConfigManager::setValue( const QString & cls,
+void ConfigManager::setValue(const QString & cls,
const QString & attribute,
- const QString & value )
+ const QString & value)
{
- if( m_settings.contains( cls ) )
+ if(m_settings.contains(cls))
{
- for( QPair& pair : m_settings[cls])
+ for(QPair& pair : m_settings[cls])
{
- if( pair.first == attribute )
+ if(pair.first == attribute)
{
- if ( pair.second != value )
+ if (pair.second != value)
{
pair.second = value;
- emit valueChanged( cls, attribute, value );
+ emit valueChanged(cls, attribute, value);
}
return;
}
}
}
// not in map yet, so we have to add it...
- m_settings[cls].push_back( qMakePair( attribute, value ) );
+ m_settings[cls].push_back(qMakePair(attribute, value));
}
-void ConfigManager::deleteValue( const QString & cls, const QString & attribute)
+void ConfigManager::deleteValue(const QString & cls, const QString & attribute)
{
- if( m_settings.contains( cls ) )
+ if(m_settings.contains(cls))
{
- for( stringPairVector::iterator it = m_settings[cls].begin();
- it != m_settings[cls].end(); ++it )
+ for(stringPairVector::iterator it = m_settings[cls].begin();
+ it != m_settings[cls].end(); ++it)
{
- if( ( *it ).first == attribute )
+ if((*it).first == attribute)
{
m_settings[cls].erase(it);
return;
@@ -402,23 +412,23 @@ void ConfigManager::deleteValue( const QString & cls, const QString & attribute)
}
-void ConfigManager::loadConfigFile( const QString & configFile )
+void ConfigManager::loadConfigFile(const QString & configFile)
{
// read the XML file and create DOM tree
// Allow configuration file override through --config commandline option
- if ( !configFile.isEmpty() )
+ if (!configFile.isEmpty())
{
m_lmmsRcFile = configFile;
}
- QFile cfg_file( m_lmmsRcFile );
+ QFile cfg_file(m_lmmsRcFile);
QDomDocument dom_tree;
- if( cfg_file.open( QIODevice::ReadOnly ) )
+ if(cfg_file.open(QIODevice::ReadOnly))
{
QString errorString;
int errorLine, errorCol;
- if( dom_tree.setContent( &cfg_file, false, &errorString, &errorLine, &errorCol ) )
+ if(dom_tree.setContent(&cfg_file, false, &errorString, &errorLine, &errorCol))
{
// get the head information from the DOM
QDomElement root = dom_tree.documentElement();
@@ -426,41 +436,41 @@ void ConfigManager::loadConfigFile( const QString & configFile )
QDomNode node = root.firstChild();
// Cache the config version for upgrade()
- if ( !root.attribute( "version" ).isNull() ) {
- m_version = root.attribute( "version" );
+ if (!root.attribute("version").isNull()) {
+ m_version = root.attribute("version");
}
// create the settings-map out of the DOM
- while( !node.isNull() )
+ while(!node.isNull())
{
- if( node.isElement() &&
- node.toElement().hasAttributes () )
+ if(node.isElement() &&
+ node.toElement().hasAttributes ())
{
stringPairVector attr;
QDomNamedNodeMap node_attr =
node.toElement().attributes();
- for( int i = 0; i < node_attr.count();
- ++i )
+ for(int i = 0; i < node_attr.count();
+ ++i)
{
- QDomNode n = node_attr.item( i );
- if( n.isAttr() )
+ QDomNode n = node_attr.item(i);
+ if(n.isAttr())
{
- attr.push_back( qMakePair( n.toAttr().name(),
- n.toAttr().value() ) );
+ attr.push_back(qMakePair(n.toAttr().name(),
+ n.toAttr().value()));
}
}
m_settings[node.nodeName()] = attr;
}
- else if( node.nodeName() == "recentfiles" )
+ else if(node.nodeName() == "recentfiles")
{
m_recentlyOpenedProjects.clear();
QDomNode n = node.firstChild();
- while( !n.isNull() )
+ while(!n.isNull())
{
- if( n.isElement() && n.toElement().hasAttributes() )
+ if(n.isElement() && n.toElement().hasAttributes())
{
m_recentlyOpenedProjects <<
- n.toElement().attribute( "path" );
+ n.toElement().attribute("path");
}
n = n.nextSibling();
}
@@ -468,45 +478,45 @@ void ConfigManager::loadConfigFile( const QString & configFile )
node = node.nextSibling();
}
- if( value( "paths", "artwork" ) != "" )
+ if(value("paths", "theme") != "")
{
- m_artworkDir = value( "paths", "artwork" );
+ m_themeDir = value("paths", "theme");
#ifdef LMMS_BUILD_WIN32
// Detect a QDir/QFile hang on Windows
// see issue #3417 on github
- bool badPath = ( m_artworkDir == "/" || m_artworkDir == "\\" );
+ bool badPath = (m_themeDir == "/" || m_themeDir == "\\");
#else
bool badPath = false;
#endif
- if( badPath || !QDir( m_artworkDir ).exists() ||
- !QFile( m_artworkDir + "/style.css" ).exists() )
+ if(badPath || !QDir(m_themeDir).exists() ||
+ !QFile(m_themeDir + "/style.css").exists())
{
- m_artworkDir = defaultArtworkDir();
+ m_themeDir = defaultThemeDir();
}
- m_artworkDir = ensureTrailingSlash(m_artworkDir);
+ m_themeDir = ensureTrailingSlash(m_themeDir);
}
- setWorkingDir( value( "paths", "workingdir" ) );
+ setWorkingDir(value("paths", "workingdir"));
- setGIGDir( value( "paths", "gigdir" ) == "" ? gigDir() : value( "paths", "gigdir" ) );
- setSF2Dir( value( "paths", "sf2dir" ) == "" ? sf2Dir() : value( "paths", "sf2dir" ) );
- setVSTDir( value( "paths", "vstdir" ) );
- setLADSPADir( value( "paths", "laddir" ) );
+ setGIGDir(value("paths", "gigdir") == "" ? gigDir() : value("paths", "gigdir"));
+ setSF2Dir(value("paths", "sf2dir") == "" ? sf2Dir() : value("paths", "sf2dir"));
+ setVSTDir(value("paths", "vstdir"));
+ setLADSPADir(value("paths", "ladspadir"));
#ifdef LMMS_HAVE_STK
- setSTKDir( value( "paths", "stkdir" ) );
+ setSTKDir(value("paths", "stkdir"));
#endif
#ifdef LMMS_HAVE_FLUIDSYNTH
- setDefaultSoundfont( value( "paths", "defaultsf2" ) );
+ setSF2File(value("paths", "defaultsf2"));
#endif
- setBackgroundArtwork( value( "paths", "backgroundartwork" ) );
+ setBackgroundPicFile(value("paths", "backgroundtheme"));
}
- else if( gui )
+ else if(gui)
{
- QMessageBox::warning( NULL, MainWindow::tr( "Configuration file" ),
- MainWindow::tr( "Error while parsing configuration file at line %1:%2: %3" ).
- arg( errorLine ).
- arg( errorCol ).
- arg( errorString ) );
+ QMessageBox::warning(NULL, MainWindow::tr("Configuration file"),
+ MainWindow::tr("Error while parsing configuration file at line %1:%2: %3").
+ arg(errorLine).
+ arg(errorCol).
+ arg(errorString));
}
cfg_file.close();
}
@@ -517,21 +527,21 @@ void ConfigManager::loadConfigFile( const QString & configFile )
!QDir( m_vstDir ).exists() )
{
#ifdef LMMS_BUILD_WIN32
- QString programFiles = QString::fromLocal8Bit( getenv( "ProgramFiles" ) );
+ QString programFiles = QString::fromLocal8Bit(getenv("ProgramFiles"));
m_vstDir = programFiles + "/VstPlugins/";
#else
m_vstDir = m_workingDir + "plugins/vst/";
#endif
}
- if( m_ladDir.isEmpty() )
+ if(m_ladspaDir.isEmpty() )
{
- m_ladDir = userLadspaDir();
+ m_ladspaDir = userLadspaDir();
}
#ifdef LMMS_HAVE_STK
- if( m_stkDir.isEmpty() || m_stkDir == QDir::separator() || m_stkDir == "/" ||
- !QDir( m_stkDir ).exists() )
+ if(m_stkDir.isEmpty() || m_stkDir == QDir::separator() || m_stkDir == "/" ||
+ !QDir(m_stkDir).exists())
{
#if defined(LMMS_BUILD_WIN32)
m_stkDir = m_dataDir + "stk/rawwaves/";
@@ -557,11 +567,11 @@ void ConfigManager::loadConfigFile( const QString & configFile )
QStringList searchPaths;
if(! qgetenv("LMMS_THEME_PATH").isNull())
searchPaths << qgetenv("LMMS_THEME_PATH");
- searchPaths << artworkDir() << defaultArtworkDir();
- QDir::setSearchPaths( "resources", searchPaths);
+ searchPaths << themeDir() << defaultThemeDir();
+ QDir::setSearchPaths("resources", searchPaths);
// Create any missing subdirectories in the working dir, but only if the working dir exists
- if( hasWorkingDir() )
+ if(hasWorkingDir())
{
createWorkingDir();
}
@@ -572,72 +582,72 @@ void ConfigManager::loadConfigFile( const QString & configFile )
void ConfigManager::saveConfigFile()
{
- setValue( "paths", "artwork", m_artworkDir );
- setValue( "paths", "workingdir", m_workingDir );
- setValue( "paths", "vstdir", m_vstDir );
- setValue( "paths", "gigdir", m_gigDir );
- setValue( "paths", "sf2dir", m_sf2Dir );
- setValue( "paths", "laddir", m_ladDir );
+ setValue("paths", "theme", m_themeDir);
+ setValue("paths", "workingdir", m_workingDir);
+ setValue("paths", "vstdir", m_vstDir);
+ setValue("paths", "gigdir", m_gigDir);
+ setValue("paths", "sf2dir", m_sf2Dir);
+ setValue("paths", "ladspadir", m_ladspaDir);
#ifdef LMMS_HAVE_STK
- setValue( "paths", "stkdir", m_stkDir );
+ setValue("paths", "stkdir", m_stkDir);
#endif
#ifdef LMMS_HAVE_FLUIDSYNTH
- setValue( "paths", "defaultsf2", m_defaultSoundfont );
+ setValue("paths", "defaultsf2", m_sf2File);
#endif
- setValue( "paths", "backgroundartwork", m_backgroundArtwork );
+ setValue("paths", "backgroundtheme", m_backgroundPicFile);
- QDomDocument doc( "lmms-config-file" );
+ QDomDocument doc("lmms-config-file");
- QDomElement lmms_config = doc.createElement( "lmms" );
- lmms_config.setAttribute( "version", m_version );
- doc.appendChild( lmms_config );
+ QDomElement lmms_config = doc.createElement("lmms");
+ lmms_config.setAttribute("version", m_version);
+ doc.appendChild(lmms_config);
- for( settingsMap::iterator it = m_settings.begin();
- it != m_settings.end(); ++it )
+ for(settingsMap::iterator it = m_settings.begin();
+ it != m_settings.end(); ++it)
{
- QDomElement n = doc.createElement( it.key() );
- for( stringPairVector::iterator it2 = ( *it ).begin();
- it2 != ( *it ).end(); ++it2 )
+ QDomElement n = doc.createElement(it.key());
+ for(stringPairVector::iterator it2 = (*it).begin();
+ it2 != (*it).end(); ++it2)
{
- n.setAttribute( ( *it2 ).first, ( *it2 ).second );
+ n.setAttribute((*it2).first, (*it2).second);
}
- lmms_config.appendChild( n );
+ lmms_config.appendChild(n);
}
- QDomElement recent_files = doc.createElement( "recentfiles" );
+ QDomElement recent_files = doc.createElement("recentfiles");
- for( QStringList::iterator it = m_recentlyOpenedProjects.begin();
- it != m_recentlyOpenedProjects.end(); ++it )
+ for(QStringList::iterator it = m_recentlyOpenedProjects.begin();
+ it != m_recentlyOpenedProjects.end(); ++it)
{
- QDomElement n = doc.createElement( "file" );
- n.setAttribute( "path", *it );
- recent_files.appendChild( n );
+ QDomElement n = doc.createElement("file");
+ n.setAttribute("path", *it);
+ recent_files.appendChild(n);
}
- lmms_config.appendChild( recent_files );
+ lmms_config.appendChild(recent_files);
- QString xml = "\n" + doc.toString( 2 );
+ QString xml = "\n" + doc.toString(2);
- QFile outfile( m_lmmsRcFile );
- if( !outfile.open( QIODevice::WriteOnly | QIODevice::Truncate ) )
+ QFile outfile(m_lmmsRcFile);
+ if(!outfile.open(QIODevice::WriteOnly | QIODevice::Truncate))
{
QString title, message;
- title = MainWindow::tr( "Could not open file" );
- message = MainWindow::tr( "Could not open file %1 "
+ title = MainWindow::tr("Could not open file");
+ message = MainWindow::tr("Could not open file %1 "
"for writing.\nPlease make "
"sure you have write "
"permission to the file and "
"the directory containing the "
"file and try again!"
- ).arg( m_lmmsRcFile );
- if( gui )
+ ).arg(m_lmmsRcFile);
+ if(gui)
{
- QMessageBox::critical( NULL, title, message,
+ QMessageBox::critical(NULL, title, message,
QMessageBox::Ok,
- QMessageBox::NoButton );
+ QMessageBox::NoButton);
}
return;
}
- outfile.write( xml.toUtf8() );
+ outfile.write(xml.toUtf8());
outfile.close();
}
diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp
index d2b4a9cc2aa..ce82310fa4c 100644
--- a/src/core/Engine.cpp
+++ b/src/core/Engine.cpp
@@ -105,10 +105,10 @@ void LmmsCore::destroy()
delete ConfigManager::inst();
}
-float LmmsCore::framesPerTick(sample_rate_t sample_rate)
+float LmmsCore::framesPerTick(sample_rate_t sampleRate)
{
- return sample_rate * 60.0f * 4 /
- DefaultTicksPerTact / s_song->getTempo();
+ return sampleRate * 60.0f * 4 /
+ DefaultTicksPerBar / s_song->getTempo();
}
@@ -117,7 +117,7 @@ float LmmsCore::framesPerTick(sample_rate_t sample_rate)
void LmmsCore::updateFramesPerTick()
{
s_framesPerTick = s_mixer->processingSampleRate() * 60.0f * 4 /
- DefaultTicksPerTact / s_song->getTempo();
+ DefaultTicksPerBar / s_song->getTempo();
}
diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp
index 2550b072e76..3f22a22e1a1 100644
--- a/src/core/Mixer.cpp
+++ b/src/core/Mixer.cpp
@@ -361,12 +361,12 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
// Stop crash with metronome if empty project
Engine::getSong()->countTracks() )
{
- tick_t ticksPerTact = MidiTime::ticksPerTact();
- if ( p.getTicks() % (ticksPerTact / 1 ) == 0 )
+ tick_t ticksPerBar = MidiTime::ticksPerBar();
+ if ( p.getTicks() % ( ticksPerBar / 1 ) == 0 )
{
addPlayHandle( new SamplePlayHandle( "misc/metronome02.ogg" ) );
}
- else if ( p.getTicks() % (ticksPerTact /
+ else if ( p.getTicks() % ( ticksPerBar /
song->getTimeSigModel().getNumerator() ) == 0 )
{
addPlayHandle( new SamplePlayHandle( "misc/metronome01.ogg" ) );
@@ -1247,7 +1247,7 @@ void Mixer::fifoWriter::run()
disable_denormals();
#if 0
-#ifdef LMMS_BUILD_LINUX
+#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_FREEBSD)
#ifdef LMMS_HAVE_SCHED_H
cpu_set_t mask;
CPU_ZERO( &mask );
@@ -1288,5 +1288,3 @@ void Mixer::fifoWriter::write( surroundSampleFrame * buffer )
m_mixer->m_doChangesMutex.unlock();
}
-
-
diff --git a/src/core/NotePlayHandle.cpp b/src/core/NotePlayHandle.cpp
index 0039f935a5d..9f934c61973 100644
--- a/src/core/NotePlayHandle.cpp
+++ b/src/core/NotePlayHandle.cpp
@@ -196,7 +196,12 @@ void NotePlayHandle::play( sampleFrame * _working_buffer )
lock();
- if( m_totalFramesPlayed == 0 && !m_hasMidiNote
+ /* It is possible for NotePlayHandle::noteOff to be called before NotePlayHandle::play,
+ * which results in a note-on message being sent without a subsequent note-off message.
+ * Therefore, we check here whether the note has already been released before sending
+ * the note-on message. */
+ if( !m_released
+ && m_totalFramesPlayed == 0 && !m_hasMidiNote
&& ( hasParent() || ! m_instrumentTrack->isArpeggioEnabled() ) )
{
m_hasMidiNote = true;
diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp
index ca0e5219499..11b145b222d 100644
--- a/src/core/PresetPreviewPlayHandle.cpp
+++ b/src/core/PresetPreviewPlayHandle.cpp
@@ -54,7 +54,7 @@ class PreviewTrackContainer : public TrackContainer
{
}
- virtual QString nodeName() const
+ QString nodeName() const override
{
return "previewtrackcontainer";
}
diff --git a/src/core/ProjectRenderer.cpp b/src/core/ProjectRenderer.cpp
index 71a5aaff8b1..19bdf4be806 100644
--- a/src/core/ProjectRenderer.cpp
+++ b/src/core/ProjectRenderer.cpp
@@ -168,7 +168,7 @@ void ProjectRenderer::run()
{
MemoryManager::ThreadGuard mmThreadGuard; Q_UNUSED(mmThreadGuard);
#if 0
-#ifdef LMMS_BUILD_LINUX
+#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_FREEBSD)
#ifdef LMMS_HAVE_SCHED_H
cpu_set_t mask;
CPU_ZERO( &mask );
diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp
index 7795925297b..d0c39b13aa8 100644
--- a/src/core/SampleBuffer.cpp
+++ b/src/core/SampleBuffer.cpp
@@ -370,11 +370,14 @@ void SampleBuffer::directFloatWrite ( sample_t * & _fbuf, f_cnt_t _frames, int _
void SampleBuffer::normalizeSampleRate( const sample_rate_t _src_sr,
bool _keep_settings )
{
+ const sample_rate_t old_rate = m_sampleRate;
// do samplerate-conversion to our default-samplerate
if( _src_sr != mixerSampleRate() )
{
SampleBuffer * resampled = resample( _src_sr,
mixerSampleRate() );
+
+ m_sampleRate = mixerSampleRate();
MM_FREE( m_data );
m_frames = resampled->frames();
m_data = MM_ALLOC( sampleFrame, m_frames );
@@ -389,6 +392,16 @@ void SampleBuffer::normalizeSampleRate( const sample_rate_t _src_sr,
m_loopStartFrame = m_startFrame = 0;
m_loopEndFrame = m_endFrame = m_frames;
}
+ else if( old_rate != mixerSampleRate() )
+ {
+ auto old_rate_to_new_rate_ratio = static_cast(mixerSampleRate()) / old_rate;
+
+ m_startFrame = qBound(0, f_cnt_t(m_startFrame*old_rate_to_new_rate_ratio), m_frames);
+ m_endFrame = qBound(m_startFrame, f_cnt_t(m_endFrame*old_rate_to_new_rate_ratio), m_frames);
+ m_loopStartFrame = qBound(0, f_cnt_t(m_loopStartFrame*old_rate_to_new_rate_ratio), m_frames);
+ m_loopEndFrame = qBound(m_loopStartFrame, f_cnt_t(m_loopEndFrame*old_rate_to_new_rate_ratio), m_frames);
+ m_sampleRate = mixerSampleRate();
+ }
}
diff --git a/src/core/Song.cpp b/src/core/Song.cpp
index 336aa3df273..78c9f422a3f 100644
--- a/src/core/Song.cpp
+++ b/src/core/Song.cpp
@@ -55,7 +55,7 @@
#include "PeakController.h"
-tick_t MidiTime::s_ticksPerTact = DefaultTicksPerTact;
+tick_t MidiTime::s_ticksPerBar = DefaultTicksPerBar;
@@ -66,7 +66,7 @@ Song::Song() :
this ) ) ),
m_tempoModel( DefaultTempo, MinTempo, MaxTempo, this, tr( "Tempo" ) ),
m_timeSigModel( this ),
- m_oldTicksPerTact( DefaultTicksPerTact ),
+ m_oldTicksPerBar( DefaultTicksPerBar ),
m_masterVolumeModel( 100, 0, 200, this, tr( "Master volume" ) ),
m_masterPitchModel( 0, -12, 12, this, tr( "Master pitch" ) ),
m_fileName(),
@@ -86,7 +86,7 @@ Song::Song() :
m_patternToPlay( NULL ),
m_loopPattern( false ),
m_elapsedTicks( 0 ),
- m_elapsedTacts( 0 ),
+ m_elapsedBars( 0 ),
m_loopRenderCount(1),
m_loopRenderRemaining(1)
{
@@ -162,10 +162,10 @@ void Song::setTempo()
void Song::setTimeSignature()
{
- MidiTime::setTicksPerTact( ticksPerTact() );
- emit timeSignatureChanged( m_oldTicksPerTact, ticksPerTact() );
+ MidiTime::setTicksPerBar( ticksPerBar() );
+ emit timeSignatureChanged( m_oldTicksPerBar, ticksPerBar() );
emit dataChanged();
- m_oldTicksPerTact = ticksPerTact();
+ m_oldTicksPerBar = ticksPerBar();
m_vstSyncController.setTimeSignature(
getTimeSigModel().getNumerator(), getTimeSigModel().getDenominator() );
@@ -286,20 +286,20 @@ void Song::processNextBuffer()
int ticks = m_playPos[m_playMode].getTicks() +
( int )( currentFrame / framesPerTick );
- // did we play a whole tact?
- if( ticks >= MidiTime::ticksPerTact() )
+ // did we play a whole bar?
+ if( ticks >= MidiTime::ticksPerBar() )
{
// per default we just continue playing even if
// there's no more stuff to play
// (song-play-mode)
- int maxTact = m_playPos[m_playMode].getTact()
+ int maxBar = m_playPos[m_playMode].getBar()
+ 2;
- // then decide whether to go over to next tact
- // or to loop back to first tact
+ // then decide whether to go over to next bar
+ // or to loop back to first bar
if( m_playMode == Mode_PlayBB )
{
- maxTact = Engine::getBBTrackContainer()
+ maxBar = Engine::getBBTrackContainer()
->lengthOfCurrentBB();
}
else if( m_playMode == Mode_PlayPattern &&
@@ -307,17 +307,17 @@ void Song::processNextBuffer()
tl != NULL &&
tl->loopPointsEnabled() == false )
{
- maxTact = m_patternToPlay->length()
- .getTact();
+ maxBar = m_patternToPlay->length()
+ .getBar();
}
// end of played object reached?
- if( m_playPos[m_playMode].getTact() + 1
- >= maxTact )
+ if( m_playPos[m_playMode].getBar() + 1
+ >= maxBar )
{
// then start from beginning and keep
// offset
- ticks %= ( maxTact * MidiTime::ticksPerTact() );
+ ticks %= ( maxBar * MidiTime::ticksPerBar() );
// wrap milli second counter
setToTimeByTicks(ticks);
@@ -407,8 +407,8 @@ void Song::processNextBuffer()
m_playPos[m_playMode].setCurrentFrame( framesToPlay +
currentFrame );
m_elapsedMilliSeconds[m_playMode] += MidiTime::ticksToMilliseconds(framesToPlay / framesPerTick, getTempo());
- m_elapsedTacts = m_playPos[Mode_PlaySong].getTact();
- m_elapsedTicks = ( m_playPos[Mode_PlaySong].getTicks() % ticksPerTact() ) / 48;
+ m_elapsedBars = m_playPos[Mode_PlaySong].getBar();
+ m_elapsedTicks = ( m_playPos[Mode_PlaySong].getTicks() % ticksPerBar() ) / 48;
}
}
@@ -619,7 +619,7 @@ void Song::updateLength()
continue;
}
- const tact_t cur = ( *it )->length();
+ const bar_t cur = ( *it )->length();
if( cur > m_length )
{
m_length = cur;
@@ -805,7 +805,7 @@ void Song::insertBar()
for( TrackList::const_iterator it = tracks().begin();
it != tracks().end(); ++it )
{
- ( *it )->insertTact( m_playPos[Mode_PlaySong] );
+ ( *it )->insertBar( m_playPos[Mode_PlaySong] );
}
m_tracksMutex.unlock();
}
@@ -819,7 +819,7 @@ void Song::removeBar()
for( TrackList::const_iterator it = tracks().begin();
it != tracks().end(); ++it )
{
- ( *it )->removeTact( m_playPos[Mode_PlaySong] );
+ ( *it )->removeBar( m_playPos[Mode_PlaySong] );
}
m_tracksMutex.unlock();
}
diff --git a/src/core/Track.cpp b/src/core/Track.cpp
index fe66ab4a5e5..5c61dc5abe3 100644
--- a/src/core/Track.cpp
+++ b/src/core/Track.cpp
@@ -73,6 +73,10 @@
*/
const int RESIZE_GRIP_WIDTH = 4;
+/*! Alternate between a darker and a lighter background color every 4 bars
+ */
+const int BARS_PER_GROUP = 4;
+
/*! A pointer for that text bubble used when moving segments, etc.
*
@@ -489,8 +493,8 @@ void TrackContentObjectView::updateLength()
else
{
setFixedWidth(
- static_cast( m_tco->length() * pixelsPerTact() /
- MidiTime::ticksPerTact() ) + 1 /*+
+ static_cast( m_tco->length() * pixelsPerBar() /
+ MidiTime::ticksPerBar() ) + 1 /*+
TCO_BORDER_WIDTH * 2-1*/ );
}
m_trackView->trackContainerView()->update();
@@ -528,6 +532,7 @@ void TrackContentObjectView::dragEnterEvent( QDragEnterEvent * dee )
{
TrackContentWidget * tcw = getTrackView()->getTrackContentWidget();
MidiTime tcoPos = MidiTime( m_tco->startPosition() );
+
if( tcw->canPasteSelection( tcoPos, dee ) == false )
{
dee->ignore();
@@ -567,6 +572,7 @@ void TrackContentObjectView::dropEvent( QDropEvent * de )
{
TrackContentWidget * tcw = getTrackView()->getTrackContentWidget();
MidiTime tcoPos = MidiTime( m_tco->startPosition() );
+
if( tcw->pasteSelection( tcoPos, de ) == true )
{
de->accept();
@@ -656,7 +662,7 @@ DataFile TrackContentObjectView::createTCODataFiles(
// initialTrackIndex is the index of the track that was touched
metadata.setAttribute( "initialTrackIndex", initialTrackIndex );
metadata.setAttribute( "trackContainerId", tc->id() );
- // grabbedTCOPos is the pos of the tact containing the TCO we grabbed
+ // grabbedTCOPos is the pos of the bar containing the TCO we grabbed
metadata.setAttribute( "grabbedTCOPos", m_tco->startPosition() );
dataFile.content().appendChild( metadata );
@@ -770,23 +776,23 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * me )
{
s_textFloat->setTitle( tr( "Current position" ) );
s_textFloat->setText( QString( "%1:%2" ).
- arg( m_tco->startPosition().getTact() + 1 ).
+ arg( m_tco->startPosition().getBar() + 1 ).
arg( m_tco->startPosition().getTicks() %
- MidiTime::ticksPerTact() ) );
+ MidiTime::ticksPerBar() ) );
}
else if( m_action == Resize || m_action == ResizeLeft )
{
s_textFloat->setTitle( tr( "Current length" ) );
s_textFloat->setText( tr( "%1:%2 (%3:%4 to %5:%6)" ).
- arg( m_tco->length().getTact() ).
+ arg( m_tco->length().getBar() ).
arg( m_tco->length().getTicks() %
- MidiTime::ticksPerTact() ).
- arg( m_tco->startPosition().getTact() + 1 ).
+ MidiTime::ticksPerBar() ).
+ arg( m_tco->startPosition().getBar() + 1 ).
arg( m_tco->startPosition().getTicks() %
- MidiTime::ticksPerTact() ).
- arg( m_tco->endPosition().getTact() + 1 ).
+ MidiTime::ticksPerBar() ).
+ arg( m_tco->endPosition().getBar() + 1 ).
arg( m_tco->endPosition().getTicks() %
- MidiTime::ticksPerTact() ) );
+ MidiTime::ticksPerBar() ) );
}
// s_textFloat->reparent( this );
// setup text-float as if TCO was already moved/resized
@@ -893,7 +899,7 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
m_hint = NULL;
}
- const float ppt = m_trackView->trackContainerView()->pixelsPerTact();
+ const float ppb = m_trackView->trackContainerView()->pixelsPerBar();
if( m_action == Move )
{
MidiTime newPos = draggedTCOPos( me );
@@ -903,9 +909,9 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
m_tco->movePosition( newPos );
m_trackView->getTrackContentWidget()->changePosition();
s_textFloat->setText( QString( "%1:%2" ).
- arg( newPos.getTact() + 1 ).
+ arg( newPos.getBar() + 1 ).
arg( newPos.getTicks() %
- MidiTime::ticksPerTact() ) );
+ MidiTime::ticksPerBar() ) );
s_textFloat->moveGlobal( this, QPoint( width() + 2, height() + 2 ) );
}
else if( m_action == MoveSelection )
@@ -945,12 +951,12 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
const bool unquantized = (me->modifiers() & Qt::ControlModifier) || (me->modifiers() & Qt::AltModifier);
const float snapSize = gui->songEditor()->m_editor->getSnapSize();
// Length in ticks of one snap increment
- const MidiTime snapLength = MidiTime( (int)(snapSize * MidiTime::ticksPerTact()) );
+ const MidiTime snapLength = MidiTime( (int)(snapSize * MidiTime::ticksPerBar()) );
if( m_action == Resize )
{
// The clip's new length
- MidiTime l = static_cast( me->x() * MidiTime::ticksPerTact() / ppt );
+ MidiTime l = static_cast( me->x() * MidiTime::ticksPerBar() / ppb );
if ( unquantized )
{ // We want to preserve this adjusted offset,
@@ -985,8 +991,8 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
const int x = mapToParent( me->pos() ).x() - m_initialMousePos.x();
MidiTime t = qMax( 0, (int)
- m_trackView->trackContainerView()->currentPosition()+
- static_cast( x * MidiTime::ticksPerTact() / ppt ) );
+ m_trackView->trackContainerView()->currentPosition() +
+ static_cast( x * MidiTime::ticksPerBar() / ppb ) );
if( unquantized )
{ // We want to preserve this adjusted offset,
@@ -1023,15 +1029,15 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me )
}
}
s_textFloat->setText( tr( "%1:%2 (%3:%4 to %5:%6)" ).
- arg( m_tco->length().getTact() ).
+ arg( m_tco->length().getBar() ).
arg( m_tco->length().getTicks() %
- MidiTime::ticksPerTact() ).
- arg( m_tco->startPosition().getTact() + 1 ).
+ MidiTime::ticksPerBar() ).
+ arg( m_tco->startPosition().getBar() + 1 ).
arg( m_tco->startPosition().getTicks() %
- MidiTime::ticksPerTact() ).
- arg( m_tco->endPosition().getTact() + 1 ).
+ MidiTime::ticksPerBar() ).
+ arg( m_tco->endPosition().getBar() + 1 ).
arg( m_tco->endPosition().getTicks() %
- MidiTime::ticksPerTact() ) );
+ MidiTime::ticksPerBar() ) );
s_textFloat->moveGlobal( this, QPoint( width() + 2, height() + 2) );
}
else
@@ -1127,13 +1133,13 @@ void TrackContentObjectView::contextMenuEvent( QContextMenuEvent * cme )
-/*! \brief How many pixels a tact (bar) takes for this trackContentObjectView.
+/*! \brief How many pixels a bar takes for this trackContentObjectView.
*
- * \return the number of pixels per tact (bar).
+ * \return the number of pixels per bar.
*/
-float TrackContentObjectView::pixelsPerTact()
+float TrackContentObjectView::pixelsPerBar()
{
- return m_trackView->trackContainerView()->pixelsPerTact();
+ return m_trackView->trackContainerView()->pixelsPerBar();
}
@@ -1181,11 +1187,11 @@ bool TrackContentObjectView::mouseMovedDistance( QMouseEvent * me, int distance
*/
MidiTime TrackContentObjectView::draggedTCOPos( QMouseEvent * me )
{
- //Pixels per tact
- const float ppt = m_trackView->trackContainerView()->pixelsPerTact();
+ //Pixels per bar
+ const float ppb = m_trackView->trackContainerView()->pixelsPerBar();
// The pixel distance that the mouse has moved
const int mouseOff = mapToGlobal(me->pos()).x() - m_initialMouseGlobalPos.x();
- MidiTime newPos = m_initialTCOPos + mouseOff * MidiTime::ticksPerTact() / ppt;
+ MidiTime newPos = m_initialTCOPos + mouseOff * MidiTime::ticksPerBar() / ppb;
MidiTime offset = newPos - m_initialTCOPos;
// If the user is holding alt, or pressed ctrl after beginning the drag, don't quantize
if ( me->button() != Qt::NoButton
@@ -1264,13 +1270,12 @@ TrackContentWidget::~TrackContentWidget()
void TrackContentWidget::updateBackground()
{
- const int tactsPerBar = 4;
const TrackContainerView * tcv = m_trackView->trackContainerView();
- // Assume even-pixels-per-tact. Makes sense, should be like this anyways
- int ppt = static_cast( tcv->pixelsPerTact() );
+ // Assume even-pixels-per-bar. Makes sense, should be like this anyways
+ int ppb = static_cast( tcv->pixelsPerBar() );
- int w = ppt * tactsPerBar;
+ int w = ppb * BARS_PER_GROUP;
int h = height();
m_background = QPixmap( w * 2, height() );
QPainter pmp( &m_background );
@@ -1281,13 +1286,13 @@ void TrackContentWidget::updateBackground()
// draw lines
// vertical lines
pmp.setPen( QPen( gridColor(), 1 ) );
- for( float x = 0; x < w * 2; x += ppt )
+ for( float x = 0; x < w * 2; x += ppb )
{
pmp.drawLine( QLineF( x, 0.0, x, h ) );
}
pmp.setPen( QPen( embossColor(), 1 ) );
- for( float x = 1.0; x < w * 2; x += ppt )
+ for( float x = 1.0; x < w * 2; x += ppb )
{
pmp.drawLine( QLineF( x, 0.0, x, h ) );
}
@@ -1382,7 +1387,7 @@ void TrackContentWidget::changePosition( const MidiTime & newPos )
it != m_tcoViews.end(); ++it )
{
if( ( *it )->getTrackContentObject()->
- startPosition().getTact() == curBB )
+ startPosition().getBar() == curBB )
{
( *it )->move( 0, ( *it )->y() );
( *it )->raise();
@@ -1398,7 +1403,7 @@ void TrackContentWidget::changePosition( const MidiTime & newPos )
it != m_tcoViews.end(); ++it )
{
if( ( *it )->getTrackContentObject()->
- startPosition().getTact() != curBB )
+ startPosition().getBar() != curBB )
{
( *it )->hide();
}
@@ -1415,7 +1420,7 @@ void TrackContentWidget::changePosition( const MidiTime & newPos )
const int begin = pos;
const int end = endPosition( pos );
- const float ppt = m_trackView->trackContainerView()->pixelsPerTact();
+ const float ppb = m_trackView->trackContainerView()->pixelsPerBar();
setUpdatesEnabled( false );
for( tcoViewVector::iterator it = m_tcoViews.begin();
@@ -1432,8 +1437,8 @@ void TrackContentWidget::changePosition( const MidiTime & newPos )
( te >= begin && te <= end ) ||
( ts <= begin && te >= end ) )
{
- tcov->move( static_cast( ( ts - begin ) * ppt /
- MidiTime::ticksPerTact() ),
+ tcov->move( static_cast( ( ts - begin ) * ppb /
+ MidiTime::ticksPerBar() ),
tcov->y() );
if( !tcov->isVisible() )
{
@@ -1454,7 +1459,7 @@ void TrackContentWidget::changePosition( const MidiTime & newPos )
-/*! \brief Return the position of the trackContentWidget in Tacts.
+/*! \brief Return the position of the trackContentWidget in bars.
*
* \param mouseX the mouse's current X position in pixels.
*/
@@ -1463,8 +1468,8 @@ MidiTime TrackContentWidget::getPosition( int mouseX )
TrackContainerView * tv = m_trackView->trackContainerView();
return MidiTime( tv->currentPosition() +
mouseX *
- MidiTime::ticksPerTact() /
- static_cast( tv->pixelsPerTact() ) );
+ MidiTime::ticksPerBar() /
+ static_cast( tv->pixelsPerBar() ) );
}
@@ -1477,7 +1482,7 @@ MidiTime TrackContentWidget::getPosition( int mouseX )
void TrackContentWidget::dragEnterEvent( QDragEnterEvent * dee )
{
MidiTime tcoPos = getPosition( dee->pos().x() );
- if( canPasteSelection( tcoPos, dee ) == false )
+ if( canPasteSelection( tcoPos, dee ) == false )
{
dee->ignore();
}
@@ -1518,7 +1523,7 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QDropEvent* d
QDomElement metadata = dataFile.content().firstChildElement( "copyMetadata" );
QDomAttr tcoPosAttr = metadata.attributeNode( "grabbedTCOPos" );
MidiTime grabbedTCOPos = tcoPosAttr.value().toInt();
- MidiTime grabbedTCOTact = MidiTime( grabbedTCOPos.getTact(), 0 );
+ MidiTime grabbedTCOBar = MidiTime( grabbedTCOPos.getBar(), 0 );
// Extract the track index that was originally clicked
QDomAttr tiAttr = metadata.attributeNode( "initialTrackIndex" );
@@ -1528,10 +1533,10 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QDropEvent* d
const TrackContainer::TrackList tracks = t->trackContainer()->tracks();
const int currentTrackIndex = tracks.indexOf( t );
- // Don't paste if we're on the same tact
+ // Don't paste if we're on the same bar
auto sourceTrackContainerId = metadata.attributeNode( "trackContainerId" ).value().toUInt();
if( de->source() && sourceTrackContainerId == t->trackContainer()->id() &&
- tcoPos == grabbedTCOTact && currentTrackIndex == initialTrackIndex )
+ tcoPos == grabbedTCOBar && currentTrackIndex == initialTrackIndex )
{
return false;
}
@@ -1596,7 +1601,7 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * de )
QDomAttr tcoPosAttr = metadata.attributeNode( "grabbedTCOPos" );
MidiTime grabbedTCOPos = tcoPosAttr.value().toInt();
- // Snap the mouse position to the beginning of the dropped tact, in ticks
+ // Snap the mouse position to the beginning of the dropped bar, in ticks
const TrackContainer::TrackList tracks = getTrack()->trackContainer()->tracks();
const int currentTrackIndex = tracks.indexOf( getTrack() );
@@ -1631,7 +1636,7 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * de )
// The new position is the old position plus the offset.
MidiTime pos = tcoElement.attributeNode( "pos" ).value().toInt() + offset;
// If we land on ourselves, offset by one snap
- MidiTime shift = MidiTime::ticksPerTact() * gui->songEditor()->m_editor->getSnapSize();
+ MidiTime shift = MidiTime::ticksPerBar() * gui->songEditor()->m_editor->getSnapSize();
if (offset == 0) { pos += shift; }
TrackContentObject * tco = t->createTCO( pos );
@@ -1695,8 +1700,8 @@ void TrackContentWidget::mousePressEvent( QMouseEvent * me )
so.at( i )->setSelected( false);
}
getTrack()->addJournalCheckPoint();
- const MidiTime pos = getPosition( me->x() ).getTact() *
- MidiTime::ticksPerTact();
+ const MidiTime pos = getPosition( me->x() ).getBar() *
+ MidiTime::ticksPerBar();
TrackContentObject * tco = getTrack()->createTCO( pos );
tco->saveJournallingState( false );
@@ -1714,15 +1719,15 @@ void TrackContentWidget::mousePressEvent( QMouseEvent * me )
*/
void TrackContentWidget::paintEvent( QPaintEvent * pe )
{
- // Assume even-pixels-per-tact. Makes sense, should be like this anyways
+ // Assume even-pixels-per-bar. Makes sense, should be like this anyways
const TrackContainerView * tcv = m_trackView->trackContainerView();
- int ppt = static_cast( tcv->pixelsPerTact() );
+ int ppb = static_cast( tcv->pixelsPerBar() );
QPainter p( this );
// Don't draw background on BB-Editor
if( m_trackView->trackContainerView() != gui->getBBEditor()->trackContainerView() )
{
p.drawTiledPixmap( rect(), m_background, QPoint(
- tcv->currentPosition().getTact() * ppt, 0 ) );
+ tcv->currentPosition().getBar() * ppb, 0 ) );
}
}
@@ -1755,15 +1760,15 @@ Track * TrackContentWidget::getTrack()
-/*! \brief Return the end position of the trackContentWidget in Tacts.
+/*! \brief Return the end position of the trackContentWidget in Bars.
*
* \param posStart the starting position of the Widget (from getPosition())
*/
MidiTime TrackContentWidget::endPosition( const MidiTime & posStart )
{
- const float ppt = m_trackView->trackContainerView()->pixelsPerTact();
+ const float ppb = m_trackView->trackContainerView()->pixelsPerBar();
const int w = width();
- return posStart + static_cast( w * MidiTime::ticksPerTact() / ppt );
+ return posStart + static_cast( w * MidiTime::ticksPerBar() / ppb );
}
@@ -2417,7 +2422,7 @@ TrackContentObject * Track::getTCO( int tcoNum )
}
printf( "called Track::getTCO( %d ), "
"but TCO %d doesn't exist\n", tcoNum, tcoNum );
- return createTCO( tcoNum * MidiTime::ticksPerTact() );
+ return createTCO( tcoNum * MidiTime::ticksPerBar() );
}
@@ -2525,17 +2530,17 @@ void Track::createTCOsForBB( int bb )
* in ascending order by TCO time, once we hit a TCO that was earlier
* than the insert time, we could fall out of the loop early.
*/
-void Track::insertTact( const MidiTime & pos )
+void Track::insertBar( const MidiTime & pos )
{
// we'll increase the position of every TCO, positioned behind pos, by
- // one tact
+ // one bar
for( tcoVector::iterator it = m_trackContentObjects.begin();
it != m_trackContentObjects.end(); ++it )
{
if( ( *it )->startPosition() >= pos )
{
( *it )->movePosition( (*it)->startPosition() +
- MidiTime::ticksPerTact() );
+ MidiTime::ticksPerBar() );
}
}
}
@@ -2547,17 +2552,17 @@ void Track::insertTact( const MidiTime & pos )
*
* \param pos The time at which we want to remove the bar.
*/
-void Track::removeTact( const MidiTime & pos )
+void Track::removeBar( const MidiTime & pos )
{
// we'll decrease the position of every TCO, positioned behind pos, by
- // one tact
+ // one bar
for( tcoVector::iterator it = m_trackContentObjects.begin();
it != m_trackContentObjects.end(); ++it )
{
if( ( *it )->startPosition() >= pos )
{
( *it )->movePosition( qMax( ( *it )->startPosition() -
- MidiTime::ticksPerTact(), 0 ) );
+ MidiTime::ticksPerBar(), 0 ) );
}
}
}
@@ -2571,7 +2576,7 @@ void Track::removeTact( const MidiTime & pos )
* keeping track of the latest time found in ticks. Then we return
* that in bars by dividing by the number of ticks per bar.
*/
-tact_t Track::length() const
+bar_t Track::length() const
{
// find last end-position
tick_t last = 0;
@@ -2591,7 +2596,7 @@ tact_t Track::length() const
}
}
- return last / MidiTime::ticksPerTact();
+ return last / MidiTime::ticksPerBar();
}
diff --git a/src/core/TrackContainer.cpp b/src/core/TrackContainer.cpp
index edea9aa14b7..95dd46f298c 100644
--- a/src/core/TrackContainer.cpp
+++ b/src/core/TrackContainer.cpp
@@ -313,7 +313,7 @@ AutomatedValueMap TrackContainer::automatedValuesFromTracks(const TrackList &tra
MidiTime bbTime = time - tco->startPosition();
bbTime = std::min(bbTime, tco->length());
- bbTime = bbTime % (bbContainer->lengthOfBB(bbIndex) * MidiTime::ticksPerTact());
+ bbTime = bbTime % (bbContainer->lengthOfBB(bbIndex) * MidiTime::ticksPerBar());
auto bbValues = bbContainer->automatedValuesAt(bbTime, bbIndex);
for (auto it=bbValues.begin(); it != bbValues.end(); it++)
@@ -344,8 +344,3 @@ DummyTrackContainer::DummyTrackContainer() :
m_dummyInstrumentTrack->setJournalling( false );
}
-
-
-
-
-
diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp
index e149f5cbd96..aebfe5e1c61 100644
--- a/src/core/audio/AudioJack.cpp
+++ b/src/core/audio/AudioJack.cpp
@@ -454,7 +454,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
m_clientName = new QLineEdit( cn, this );
m_clientName->setGeometry( 10, 20, 160, 20 );
- QLabel * cn_lbl = new QLabel( tr( "CLIENT-NAME" ), this );
+ QLabel * cn_lbl = new QLabel( tr( "Client name" ), this );
cn_lbl->setFont( pointSize<7>( cn_lbl->font() ) );
cn_lbl->setGeometry( 10, 40, 160, 10 );
@@ -466,7 +466,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
- m_channels->setLabel( tr( "CHANNELS" ) );
+ m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
}
diff --git a/src/core/audio/AudioOss.cpp b/src/core/audio/AudioOss.cpp
index c9ad01801b2..cbf9278a794 100644
--- a/src/core/audio/AudioOss.cpp
+++ b/src/core/audio/AudioOss.cpp
@@ -59,7 +59,7 @@
#ifndef _PATH_DEV_DSP
-#ifdef __OpenBSD__
+#if defined(__NetBSD__) || defined(__OpenBSD__)
#define _PATH_DEV_DSP "/dev/audio"
#else
#define _PATH_DEV_DSP "/dev/dsp"
@@ -327,7 +327,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
m_device = new QLineEdit( probeDevice(), this );
m_device->setGeometry( 10, 20, 160, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
@@ -339,7 +339,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
- m_channels->setLabel( tr( "CHANNELS" ) );
+ m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
}
diff --git a/src/core/audio/AudioPortAudio.cpp b/src/core/audio/AudioPortAudio.cpp
index 61dca4a2271..ad67277ab35 100644
--- a/src/core/audio/AudioPortAudio.cpp
+++ b/src/core/audio/AudioPortAudio.cpp
@@ -412,14 +412,14 @@ AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) :
m_backend = new ComboBox( this, "BACKEND" );
m_backend->setGeometry( 64, 15, 260, 20 );
- QLabel * backend_lbl = new QLabel( tr( "BACKEND" ), this );
+ QLabel * backend_lbl = new QLabel( tr( "Backend" ), this );
backend_lbl->setFont( pointSize<7>( backend_lbl->font() ) );
backend_lbl->move( 8, 18 );
m_device = new ComboBox( this, "DEVICE" );
m_device->setGeometry( 64, 35, 260, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->move( 8, 38 );
@@ -431,7 +431,7 @@ AudioPortAudio::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
- m_channels->setLabel( tr( "CHANNELS" ) );
+ m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 308, 20 );*/
connect( &m_setupUtil.m_backendModel, SIGNAL( dataChanged() ),
diff --git a/src/core/audio/AudioPulseAudio.cpp b/src/core/audio/AudioPulseAudio.cpp
index 857ef981b28..af14960a700 100644
--- a/src/core/audio/AudioPulseAudio.cpp
+++ b/src/core/audio/AudioPulseAudio.cpp
@@ -314,7 +314,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) :
m_device = new QLineEdit( AudioPulseAudio::probeDevice(), this );
m_device->setGeometry( 10, 20, 160, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
@@ -326,7 +326,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
- m_channels->setLabel( tr( "CHANNELS" ) );
+ m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
}
diff --git a/src/core/audio/AudioSdl.cpp b/src/core/audio/AudioSdl.cpp
index 42adb9b33c9..b970ba6307f 100644
--- a/src/core/audio/AudioSdl.cpp
+++ b/src/core/audio/AudioSdl.cpp
@@ -325,7 +325,7 @@ AudioSdl::setupWidget::setupWidget( QWidget * _parent ) :
m_device = new QLineEdit( dev, this );
m_device->setGeometry( 10, 20, 160, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
diff --git a/src/core/audio/AudioSndio.cpp b/src/core/audio/AudioSndio.cpp
index 853d734d5e2..24bef924652 100644
--- a/src/core/audio/AudioSndio.cpp
+++ b/src/core/audio/AudioSndio.cpp
@@ -193,7 +193,7 @@ AudioSndio::setupWidget::setupWidget( QWidget * _parent ) :
m_device = new QLineEdit( "", this );
m_device->setGeometry( 10, 20, 160, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<6>( dev_lbl->font() ) );
dev_lbl->setGeometry( 10, 40, 160, 10 );
@@ -205,7 +205,7 @@ AudioSndio::setupWidget::setupWidget( QWidget * _parent ) :
m_channels = new LcdSpinBox( 1, this );
m_channels->setModel( m );
- m_channels->setLabel( tr( "CHANNELS" ) );
+ m_channels->setLabel( tr( "Channels" ) );
m_channels->move( 180, 20 );
}
diff --git a/src/core/audio/AudioSoundIo.cpp b/src/core/audio/AudioSoundIo.cpp
index cde14a1c5a3..2c3d493a6de 100644
--- a/src/core/audio/AudioSoundIo.cpp
+++ b/src/core/audio/AudioSoundIo.cpp
@@ -426,14 +426,14 @@ AudioSoundIo::setupWidget::setupWidget( QWidget * _parent ) :
m_backend = new ComboBox( this, "BACKEND" );
m_backend->setGeometry( 64, 15, 260, 20 );
- QLabel * backend_lbl = new QLabel( tr( "BACKEND" ), this );
+ QLabel * backend_lbl = new QLabel( tr( "Backend" ), this );
backend_lbl->setFont( pointSize<7>( backend_lbl->font() ) );
backend_lbl->move( 8, 18 );
m_device = new ComboBox( this, "DEVICE" );
m_device->setGeometry( 64, 35, 260, 20 );
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
+ QLabel * dev_lbl = new QLabel( tr( "Device" ), this );
dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
dev_lbl->move( 8, 38 );
diff --git a/src/core/main.cpp b/src/core/main.cpp
index 1a1d61d8c12..531a0a4da89 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -721,7 +721,7 @@ int main( int argc, char * * argv )
// try to set realtime priority
-#ifdef LMMS_BUILD_LINUX
+#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_FREEBSD)
#ifdef LMMS_HAVE_SCHED_H
#ifndef __OpenBSD__
struct sched_param sparam;
diff --git a/src/core/midi/MidiAlsaSeq.cpp b/src/core/midi/MidiAlsaSeq.cpp
index e420ebc084c..56fd956d46d 100644
--- a/src/core/midi/MidiAlsaSeq.cpp
+++ b/src/core/midi/MidiAlsaSeq.cpp
@@ -563,7 +563,7 @@ void MidiAlsaSeq::run()
case SND_SEQ_EVENT_CONTROLLER:
dest->processInEvent( MidiEvent(
- MidiControlChange,
+ MidiControlChange,
ev->data.control.channel,
ev->data.control.param,
ev->data.control.value, source ),
@@ -572,11 +572,11 @@ void MidiAlsaSeq::run()
case SND_SEQ_EVENT_PGMCHANGE:
dest->processInEvent( MidiEvent(
- MidiProgramChange,
+ MidiProgramChange,
ev->data.control.channel,
- ev->data.control.param,
- ev->data.control.value, source ),
- MidiTime() );
+ ev->data.control.value, 0,
+ source ),
+ MidiTime() );
break;
case SND_SEQ_EVENT_CHANPRESS:
diff --git a/src/core/midi/MidiClient.cpp b/src/core/midi/MidiClient.cpp
index 03eec4e388e..e37f59c06ba 100644
--- a/src/core/midi/MidiClient.cpp
+++ b/src/core/midi/MidiClient.cpp
@@ -222,12 +222,16 @@ void MidiClientRaw::parseData( const unsigned char c )
case MidiNoteOff:
case MidiNoteOn:
case MidiKeyPressure:
- case MidiProgramChange:
case MidiChannelPressure:
m_midiParseData.m_midiEvent.setKey( m_midiParseData.m_buffer[0] - KeysPerOctave );
m_midiParseData.m_midiEvent.setVelocity( m_midiParseData.m_buffer[1] );
break;
+ case MidiProgramChange:
+ m_midiParseData.m_midiEvent.setKey( m_midiParseData.m_buffer[0] );
+ m_midiParseData.m_midiEvent.setVelocity( m_midiParseData.m_buffer[1] );
+ break;
+
case MidiControlChange:
m_midiParseData.m_midiEvent.setControllerNumber( m_midiParseData.m_buffer[0] );
m_midiParseData.m_midiEvent.setControllerValue( m_midiParseData.m_buffer[1] );
diff --git a/src/core/midi/MidiOss.cpp b/src/core/midi/MidiOss.cpp
index a8e948efc23..c1c990b0bf1 100644
--- a/src/core/midi/MidiOss.cpp
+++ b/src/core/midi/MidiOss.cpp
@@ -71,7 +71,11 @@ QString MidiOss::probeDevice()
{
return getenv( "MIDIDEV" );
}
+#ifdef __NetBSD__
+ return "/dev/rmidi0";
+#else
return "/dev/midi";
+#endif
}
return dev;
}
diff --git a/src/core/midi/MidiTime.cpp b/src/core/midi/MidiTime.cpp
index 82ed642ba78..4e718a1d880 100644
--- a/src/core/midi/MidiTime.cpp
+++ b/src/core/midi/MidiTime.cpp
@@ -53,8 +53,8 @@ int TimeSig::denominator() const
-MidiTime::MidiTime( const tact_t tact, const tick_t ticks ) :
- m_ticks( tact * s_ticksPerTact + ticks )
+MidiTime::MidiTime( const bar_t bar, const tick_t ticks ) :
+ m_ticks( bar * s_ticksPerBar + ticks )
{
}
@@ -66,7 +66,7 @@ MidiTime::MidiTime( const tick_t ticks ) :
MidiTime MidiTime::quantize(float bars) const
{
//The intervals we should snap to, our new position should be a factor of this
- int interval = s_ticksPerTact * bars;
+ int interval = s_ticksPerBar * bars;
//The lower position we could snap to
int lowPos = m_ticks / interval;
//Offset from the lower position
@@ -78,9 +78,9 @@ MidiTime MidiTime::quantize(float bars) const
}
-MidiTime MidiTime::toAbsoluteTact() const
+MidiTime MidiTime::toAbsoluteBar() const
{
- return getTact() * s_ticksPerTact;
+ return getBar() * s_ticksPerBar;
}
@@ -98,15 +98,15 @@ MidiTime& MidiTime::operator-=( const MidiTime& time )
}
-tact_t MidiTime::getTact() const
+bar_t MidiTime::getBar() const
{
- return m_ticks / s_ticksPerTact;
+ return m_ticks / s_ticksPerBar;
}
-tact_t MidiTime::nextFullTact() const
+bar_t MidiTime::nextFullBar() const
{
- return (m_ticks + (s_ticksPerTact-1)) / s_ticksPerTact;
+ return ( m_ticks + ( s_ticksPerBar - 1 ) ) / s_ticksPerBar;
}
@@ -131,23 +131,23 @@ MidiTime::operator int() const
tick_t MidiTime::ticksPerBeat( const TimeSig &sig ) const
{
// (number of ticks per bar) divided by (number of beats per bar)
- return ticksPerTact(sig) / sig.numerator();
+ return ticksPerBar(sig) / sig.numerator();
}
tick_t MidiTime::getTickWithinBar( const TimeSig &sig ) const
{
- return m_ticks % ticksPerTact(sig);
+ return m_ticks % ticksPerBar( sig );
}
tick_t MidiTime::getBeatWithinBar( const TimeSig &sig ) const
{
- return getTickWithinBar(sig) / ticksPerBeat(sig);
+ return getTickWithinBar( sig ) / ticksPerBeat( sig );
}
tick_t MidiTime::getTickWithinBeat( const TimeSig &sig ) const
{
- return getTickWithinBar(sig) % ticksPerBeat(sig);
+ return getTickWithinBar( sig ) % ticksPerBeat( sig );
}
@@ -160,9 +160,9 @@ f_cnt_t MidiTime::frames( const float framesPerTick ) const
return 0;
}
-double MidiTime::getTimeInMilliseconds(bpm_t beatsPerMinute) const
+double MidiTime::getTimeInMilliseconds( bpm_t beatsPerMinute ) const
{
- return ticksToMilliseconds(getTicks(), beatsPerMinute);
+ return ticksToMilliseconds( getTicks(), beatsPerMinute );
}
MidiTime MidiTime::fromFrames( const f_cnt_t frames, const float framesPerTick )
@@ -171,39 +171,39 @@ MidiTime MidiTime::fromFrames( const f_cnt_t frames, const float framesPerTick )
}
-tick_t MidiTime::ticksPerTact()
+tick_t MidiTime::ticksPerBar()
{
- return s_ticksPerTact;
+ return s_ticksPerBar;
}
-tick_t MidiTime::ticksPerTact( const TimeSig &sig )
+tick_t MidiTime::ticksPerBar( const TimeSig &sig )
{
- return DefaultTicksPerTact * sig.numerator() / sig.denominator();
+ return DefaultTicksPerBar * sig.numerator() / sig.denominator();
}
-int MidiTime::stepsPerTact()
+int MidiTime::stepsPerBar()
{
- int steps = ticksPerTact() / DefaultBeatsPerTact;
+ int steps = ticksPerBar() / DefaultBeatsPerBar;
return qMax( 1, steps );
}
-void MidiTime::setTicksPerTact( tick_t tpt )
+void MidiTime::setTicksPerBar( tick_t tpb )
{
- s_ticksPerTact = tpt;
+ s_ticksPerBar = tpb;
}
MidiTime MidiTime::stepPosition( int step )
{
- return step * ticksPerTact() / stepsPerTact();
+ return step * ticksPerBar() / stepsPerBar();
}
-double MidiTime::ticksToMilliseconds(tick_t ticks, bpm_t beatsPerMinute)
+double MidiTime::ticksToMilliseconds( tick_t ticks, bpm_t beatsPerMinute )
{
- return MidiTime::ticksToMilliseconds(static_cast(ticks), beatsPerMinute);
+ return MidiTime::ticksToMilliseconds( static_cast(ticks), beatsPerMinute );
}
double MidiTime::ticksToMilliseconds(double ticks, bpm_t beatsPerMinute)
diff --git a/src/gui/AudioDeviceSetupWidget.cpp b/src/gui/AudioDeviceSetupWidget.cpp
index 86800643eca..fbec38c7682 100644
--- a/src/gui/AudioDeviceSetupWidget.cpp
+++ b/src/gui/AudioDeviceSetupWidget.cpp
@@ -24,9 +24,9 @@
#include "AudioDeviceSetupWidget.h"
-AudioDeviceSetupWidget::AudioDeviceSetupWidget( const QString & _caption, QWidget * _parent ) :
- TabWidget( TabWidget::tr( "Settings for %1" ).arg(TabWidget::tr( _caption.toLatin1() ) ).toUpper(),
- _parent )
+
+AudioDeviceSetupWidget::AudioDeviceSetupWidget(const QString & caption, QWidget * parent) :
+ TabWidget(TabWidget::tr("Settings for %1").arg(TabWidget::tr(caption.toLatin1())), parent)
{
}
diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp
index 6879b5bbd23..130d51a0e6d 100644
--- a/src/gui/AutomationPatternView.cpp
+++ b/src/gui/AutomationPatternView.cpp
@@ -278,10 +278,10 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
p.fillRect( rect(), c );
}
- const float ppt = fixedTCOs() ?
+ const float ppb = fixedTCOs() ?
( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
- / (float) m_pat->timeMapLength().getTact() :
- pixelsPerTact();
+ / (float) m_pat->timeMapLength().getBar() :
+ pixelsPerBar();
const int x_base = TCO_BORDER_WIDTH;
@@ -290,7 +290,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
const float y_scale = max - min;
const float h = ( height() - 2 * TCO_BORDER_WIDTH ) / y_scale;
- const float ppTick = ppt / MidiTime::ticksPerTact();
+ const float ppTick = ppb / MidiTime::ticksPerBar();
p.translate( 0.0f, max * height() / y_scale - TCO_BORDER_WIDTH );
p.scale( 1.0f, -h );
@@ -366,15 +366,15 @@ void AutomationPatternView::paintEvent( QPaintEvent * )
}
p.setRenderHints( QPainter::Antialiasing, false );
- p.resetMatrix();
+ p.resetTransform();
// bar lines
const int lineSize = 3;
p.setPen( c.darker( 300 ) );
- for( tact_t t = 1; t < width() - TCO_BORDER_WIDTH; ++t )
+ for( bar_t t = 1; t < width() - TCO_BORDER_WIDTH; ++t )
{
- const int tx = x_base + static_cast( ppt * t ) - 2;
+ const int tx = x_base + static_cast( ppb * t ) - 2;
p.drawLine( tx, TCO_BORDER_WIDTH, tx, TCO_BORDER_WIDTH + lineSize );
p.drawLine( tx, rect().bottom() - ( lineSize + TCO_BORDER_WIDTH ),
tx, rect().bottom() - TCO_BORDER_WIDTH );
diff --git a/src/gui/ControllerConnectionDialog.cpp b/src/gui/ControllerConnectionDialog.cpp
index 02857b03465..f0d3d10e9c2 100644
--- a/src/gui/ControllerConnectionDialog.cpp
+++ b/src/gui/ControllerConnectionDialog.cpp
@@ -63,7 +63,7 @@ class AutoDetectMidiController : public MidiController
}
- virtual void processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 )
+ void processInEvent( const MidiEvent& event, const MidiTime& time, f_cnt_t offset = 0 ) override
{
if( event.type() == MidiControlChange &&
( m_midiPort.inputChannel() == 0 || m_midiPort.inputChannel() == event.channel() + 1 ) )
diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp
index 4ae2a630ae3..54bbff70f9d 100644
--- a/src/gui/FxMixerView.cpp
+++ b/src/gui/FxMixerView.cpp
@@ -115,7 +115,7 @@ FxMixerView::FxMixerView() :
ChannelArea( QWidget * parent, FxMixerView * mv ) :
QScrollArea( parent ), m_mv( mv ) {}
~ChannelArea() {}
- virtual void keyPressEvent( QKeyEvent * e )
+ void keyPressEvent( QKeyEvent * e ) override
{
m_mv->keyPressEvent( e );
}
diff --git a/src/gui/GuiApplication.cpp b/src/gui/GuiApplication.cpp
index a7a3d1baa50..fb2e3eae376 100644
--- a/src/gui/GuiApplication.cpp
+++ b/src/gui/GuiApplication.cpp
@@ -67,8 +67,8 @@ GuiApplication::GuiApplication()
ConfigManager::inst()->createWorkingDir();
}
// Init style and palette
- QDir::addSearchPath("artwork", ConfigManager::inst()->artworkDir());
- QDir::addSearchPath("artwork", ConfigManager::inst()->defaultArtworkDir());
+ QDir::addSearchPath("artwork", ConfigManager::inst()->themeDir());
+ QDir::addSearchPath("artwork", ConfigManager::inst()->defaultThemeDir());
QDir::addSearchPath("artwork", ":/artwork");
LmmsStyle* lmmsstyle = new LmmsStyle();
diff --git a/src/gui/LmmsPalette.cpp b/src/gui/LmmsPalette.cpp
index e58e72cea88..e0b356d7a25 100644
--- a/src/gui/LmmsPalette.cpp
+++ b/src/gui/LmmsPalette.cpp
@@ -42,9 +42,7 @@ LmmsPalette::LmmsPalette( QWidget * parent, QStyle * stylearg ) :
m_buttonText( 0,0,0 ),
m_brightText( 74, 253, 133 ),
m_highlight( 100, 100, 100 ),
- m_highlightedText( 255, 255, 255 ),
- m_toolTipText( 0, 0, 0 ),
- m_toolTipBase( 128, 128, 128 )
+ m_highlightedText( 255, 255, 255 )
{
setStyle( stylearg );
stylearg->polish( this );
@@ -72,8 +70,6 @@ LmmsPalette::~LmmsPalette()
ACCESSMET( brightText, setBrightText )
ACCESSMET( highlight, setHighlight )
ACCESSMET( highlightedText, setHighlightedText )
- ACCESSMET( toolTipText, setToolTipText )
- ACCESSMET( toolTipBase, setToolTipBase )
QPalette LmmsPalette::palette() const
@@ -90,8 +86,6 @@ QPalette LmmsPalette::palette() const
pal.setColor( QPalette::Shadow, shadow() );
pal.setColor( QPalette::Highlight, highlight() );
pal.setColor( QPalette::HighlightedText, highlightedText() );
- pal.setBrush( QPalette::ToolTipText, QBrush( toolTipText() ) );
- pal.setBrush( QPalette::ToolTipBase, QBrush( toolTipBase() ) );
return pal;
}
diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp
index 0914d1685f7..acdbabb3576 100644
--- a/src/gui/MainWindow.cpp
+++ b/src/gui/MainWindow.cpp
@@ -174,16 +174,16 @@ MainWindow::MainWindow() :
m_workspace = new QMdiArea( splitter );
// Load background
- emit initProgress(tr("Loading background artwork"));
- QString bgArtwork = ConfigManager::inst()->backgroundArtwork();
- QImage bgImage;
- if( !bgArtwork.isEmpty() )
+ emit initProgress(tr("Loading background picture"));
+ QString backgroundPicFile = ConfigManager::inst()->backgroundPicFile();
+ QImage backgroundPic;
+ if( !backgroundPicFile.isEmpty() )
{
- bgImage = QImage( bgArtwork );
+ backgroundPic = QImage( backgroundPicFile );
}
- if( !bgImage.isNull() )
+ if( !backgroundPicFile.isNull() )
{
- m_workspace->setBackground( bgImage );
+ m_workspace->setBackground( backgroundPic );
}
else
{
@@ -291,7 +291,7 @@ void MainWindow::finalize()
tr( "&Save" ),
this, SLOT( saveProject() ),
QKeySequence::Save );
- project_menu->addAction( embed::getIconPixmap( "project_saveas" ),
+ project_menu->addAction( embed::getIconPixmap( "project_save" ),
tr( "Save &As..." ),
this, SLOT( saveProjectAs() ),
Qt::CTRL + Qt::SHIFT + Qt::Key_S );
@@ -300,8 +300,9 @@ void MainWindow::finalize()
this, SLOT( saveProjectAsNewVersion() ),
Qt::CTRL + Qt::ALT + Qt::Key_S );
- project_menu->addAction( tr( "Save as default template" ),
- this, SLOT( saveProjectAsDefaultTemplate() ) );
+ project_menu->addAction( embed::getIconPixmap( "project_save" ),
+ tr( "Save as default template" ),
+ this, SLOT( saveProjectAsDefaultTemplate() ) );
project_menu->addSeparator();
project_menu->addAction( embed::getIconPixmap( "project_import" ),
@@ -1517,7 +1518,12 @@ void MainWindow::exportProject(bool multiExport)
// Get first extension from selected dropdown.
// i.e. ".wav" from "WAV-File (*.wav), Dummy-File (*.dum)"
suffix = efd.selectedNameFilter().mid( stx + 2, etx - stx - 2 ).split( " " )[0].trimmed();
- exportFileName.remove( "." + suffix, Qt::CaseInsensitive );
+
+ Qt::CaseSensitivity cs = Qt::CaseSensitive;
+#if defined(LMMS_BUILD_APPLE) || defined(LMMS_BUILD_WIN32)
+ cs = Qt::CaseInsensitive;
+#endif
+ exportFileName.remove( "." + suffix, cs );
if ( efd.selectedFiles()[0].endsWith( suffix ) )
{
if( VersionedSaveDialog::fileExistsQuery( exportFileName + suffix,
diff --git a/src/gui/MidiSetupWidget.cpp b/src/gui/MidiSetupWidget.cpp
index f3001b3af92..0c34544d6bf 100644
--- a/src/gui/MidiSetupWidget.cpp
+++ b/src/gui/MidiSetupWidget.cpp
@@ -29,23 +29,22 @@
#include "ConfigManager.h"
#include "gui_templates.h"
-MidiSetupWidget::MidiSetupWidget( const QString & caption, const QString & configSection,
- const QString & devName, QWidget * parent ) :
- TabWidget( TabWidget::tr( "Settings for %1" ).arg(
- tr( caption.toLatin1() ) ).toUpper(), parent ),
+MidiSetupWidget::MidiSetupWidget(const QString & caption, const QString & configSection,
+ const QString & devName, QWidget * parent) :
+ TabWidget(TabWidget::tr("Settings for %1").arg(tr(caption.toLatin1())), parent),
m_configSection(configSection),
m_device(nullptr)
{
// supply devName=QString() (distinct from QString(""))
- // to indicate that there is no editable DEVICE field
+ // to indicate that there is no editable device field
if (!devName.isNull())
{
- m_device = new QLineEdit( devName, this );
- m_device->setGeometry( 10, 20, 160, 20 );
+ m_device = new QLineEdit(devName, this);
+ m_device->setGeometry(10, 20, 160, 20);
- QLabel * dev_lbl = new QLabel( tr( "DEVICE" ), this );
- dev_lbl->setFont( pointSize<7>( dev_lbl->font() ) );
- dev_lbl->setGeometry( 10, 40, 160, 10 );
+ QLabel * dev_lbl = new QLabel(tr("Device"), this);
+ dev_lbl->setFont(pointSize<7>(dev_lbl->font()));
+ dev_lbl->setGeometry(10, 40, 160, 10);
}
}
@@ -53,8 +52,8 @@ void MidiSetupWidget::saveSettings()
{
if (!m_configSection.isEmpty() && m_device)
{
- ConfigManager::inst()->setValue( m_configSection, "device",
- m_device->text() );
+ ConfigManager::inst()->setValue(m_configSection, "device",
+ m_device->text());
}
}
@@ -65,4 +64,3 @@ void MidiSetupWidget::show()
parentWidget()->setVisible(visible);
QWidget::setVisible(visible);
}
-
diff --git a/src/gui/PianoView.cpp b/src/gui/PianoView.cpp
index c1be922c656..c5f1b623fca 100644
--- a/src/gui/PianoView.cpp
+++ b/src/gui/PianoView.cpp
@@ -187,7 +187,7 @@ int PianoView::getKeyFromKeyEvent( QKeyEvent * _ke )
case 27: return 31; // ]
}
#endif
-#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_OPENBSD)
+#if defined(LMMS_BUILD_LINUX) || defined(LMMS_BUILD_OPENBSD) || defined(LMMS_BUILD_FREEBSD)
switch( k )
{
case 52: return 0; // Z = C
diff --git a/src/gui/RowTableView.cpp b/src/gui/RowTableView.cpp
index a4daeb17f3e..9830354beb2 100644
--- a/src/gui/RowTableView.cpp
+++ b/src/gui/RowTableView.cpp
@@ -39,12 +39,12 @@ class RowDelegate : public QStyledItemDelegate
}
virtual void paint( QPainter * painter,
const QStyleOptionViewItem & option,
- const QModelIndex & index ) const;
+ const QModelIndex & index ) const override;
protected:
virtual void initStyleOption( QStyleOptionViewItem * option,
- const QModelIndex & index ) const;
+ const QModelIndex & index ) const override;
private:
diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp
index 5ab9630b2e1..885f43dec31 100644
--- a/src/gui/SetupDialog.cpp
+++ b/src/gui/SetupDialog.cpp
@@ -22,6 +22,7 @@
*
*/
+
#include
#include
#include
@@ -30,291 +31,247 @@
#include
#include
-#include "SetupDialog.h"
-#include "TabBar.h"
-#include "TabButton.h"
+#include "debug.h"
+#include "embed.h"
+#include "Engine.h"
+#include "FileDialog.h"
#include "gui_templates.h"
-#include "Mixer.h"
#include "MainWindow.h"
+#include "Mixer.h"
#include "ProjectJournal.h"
-#include "embed.h"
-#include "Engine.h"
-#include "debug.h"
+#include "SetupDialog.h"
+#include "TabBar.h"
+#include "TabButton.h"
#include "ToolTip.h"
-#include "FileDialog.h"
-// platform-specific audio-interface-classes
+// Platform-specific audio-interface classes.
#include "AudioAlsa.h"
#include "AudioAlsaSetupWidget.h"
+#include "AudioDummy.h"
#include "AudioJack.h"
#include "AudioOss.h"
-#include "AudioSndio.h"
#include "AudioPortAudio.h"
-#include "AudioSoundIo.h"
#include "AudioPulseAudio.h"
#include "AudioSdl.h"
-#include "AudioDummy.h"
+#include "AudioSndio.h"
+#include "AudioSoundIo.h"
-// platform-specific midi-interface-classes
+// Platform-specific midi-interface classes.
#include "MidiAlsaRaw.h"
#include "MidiAlsaSeq.h"
+#include "MidiApple.h"
+#include "MidiDummy.h"
#include "MidiJack.h"
#include "MidiOss.h"
#include "MidiSndio.h"
#include "MidiWinMM.h"
-#include "MidiApple.h"
-#include "MidiDummy.h"
+
constexpr int BUFFERSIZE_RESOLUTION = 32;
-inline void labelWidget( QWidget * _w, const QString & _txt )
+inline void labelWidget(QWidget * w, const QString & txt)
{
- QLabel * title = new QLabel( _txt, _w );
+ QLabel * title = new QLabel(txt, w);
QFont f = title->font();
- f.setBold( true );
- title->setFont( pointSize<12>( f ) );
+ f.setBold(true);
+ title->setFont(pointSize<12>(f));
- assert( dynamic_cast( _w->layout() ) != NULL );
+ assert(dynamic_cast(w->layout()) != NULL);
- dynamic_cast( _w->layout() )->addSpacing( 5 );
- dynamic_cast( _w->layout() )->addWidget( title );
- dynamic_cast( _w->layout() )->addSpacing( 10 );
+ dynamic_cast(w->layout())->addSpacing(5);
+ dynamic_cast(w->layout())->addWidget(title);
}
-SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
- m_bufferSize( ConfigManager::inst()->value( "mixer",
- "framesperaudiobuffer" ).toInt() ),
- m_toolTips( !ConfigManager::inst()->value( "tooltips",
- "disabled" ).toInt() ),
- m_warnAfterSetup( !ConfigManager::inst()->value( "app",
- "nomsgaftersetup" ).toInt() ),
- m_displaydBFS( ConfigManager::inst()->value( "app",
- "displaydbfs" ).toInt() ),
- m_MMPZ( !ConfigManager::inst()->value( "app", "nommpz" ).toInt() ),
- m_disableBackup( !ConfigManager::inst()->value( "app",
- "disablebackup" ).toInt() ),
- m_openLastProject( ConfigManager::inst()->value( "app",
- "openlastproject" ).toInt() ),
- m_NaNHandler( ConfigManager::inst()->value( "app",
- "nanhandler", "1" ).toInt() ),
- m_hqAudioDev( ConfigManager::inst()->value( "mixer",
- "hqaudio" ).toInt() ),
- m_lang( ConfigManager::inst()->value( "app",
- "language" ) ),
- m_workingDir( QDir::toNativeSeparators( ConfigManager::inst()->workingDir() ) ),
- m_vstDir( QDir::toNativeSeparators( ConfigManager::inst()->vstDir() ) ),
- m_artworkDir( QDir::toNativeSeparators( ConfigManager::inst()->artworkDir() ) ),
- m_ladDir( QDir::toNativeSeparators( ConfigManager::inst()->ladspaDir() ) ),
- m_gigDir( QDir::toNativeSeparators( ConfigManager::inst()->gigDir() ) ),
- m_sf2Dir( QDir::toNativeSeparators( ConfigManager::inst()->sf2Dir() ) ),
+SetupDialog::SetupDialog(ConfigTabs tab_to_open) :
+ m_displaydBFS(ConfigManager::inst()->value(
+ "app", "displaydbfs").toInt()),
+ m_tooltips(!ConfigManager::inst()->value(
+ "tooltips", "disabled").toInt()),
+ m_displayWaveform(ConfigManager::inst()->value(
+ "ui", "displaywaveform").toInt()),
+ m_printNoteLabels(ConfigManager::inst()->value(
+ "ui", "printnotelabels").toInt()),
+ m_compactTrackButtons(ConfigManager::inst()->value(
+ "ui", "compacttrackbuttons").toInt()),
+ m_oneInstrumentTrackWindow(ConfigManager::inst()->value(
+ "ui", "oneinstrumenttrackwindow").toInt()),
+ m_MMPZ(!ConfigManager::inst()->value(
+ "app", "nommpz").toInt()),
+ m_disableBackup(!ConfigManager::inst()->value(
+ "app", "disablebackup").toInt()),
+ m_openLastProject(ConfigManager::inst()->value(
+ "app", "openlastproject").toInt()),
+ m_lang(ConfigManager::inst()->value(
+ "app", "language")),
+ m_saveInterval( ConfigManager::inst()->value(
+ "ui", "saveinterval").toInt() < 1 ?
+ MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES :
+ ConfigManager::inst()->value(
+ "ui", "saveinterval").toInt()),
+ m_enableAutoSave(ConfigManager::inst()->value(
+ "ui", "enableautosave", "1").toInt()),
+ m_enableRunningAutoSave(ConfigManager::inst()->value(
+ "ui", "enablerunningautosave", "0").toInt()),
+ m_smoothScroll(ConfigManager::inst()->value(
+ "ui", "smoothscroll").toInt()),
+ m_animateAFP(ConfigManager::inst()->value(
+ "ui", "animateafp", "1").toInt()),
+ m_vstEmbedMethod(ConfigManager::inst()->vstEmbedMethod()),
+ m_vstAlwaysOnTop(ConfigManager::inst()->value(
+ "ui", "vstalwaysontop").toInt()),
+ m_syncVSTPlugins(ConfigManager::inst()->value(
+ "ui", "syncvstplugins", "1").toInt()),
+ m_disableAutoQuit(ConfigManager::inst()->value(
+ "ui", "disableautoquit", "1").toInt()),
+ m_NaNHandler(ConfigManager::inst()->value(
+ "app", "nanhandler", "1").toInt()),
+ m_hqAudioDev(ConfigManager::inst()->value(
+ "mixer", "hqaudio").toInt()),
+ m_bufferSize(ConfigManager::inst()->value(
+ "mixer", "framesperaudiobuffer").toInt()),
+ m_workingDir(QDir::toNativeSeparators(ConfigManager::inst()->workingDir())),
+ m_vstDir(QDir::toNativeSeparators(ConfigManager::inst()->vstDir())),
+ m_ladspaDir(QDir::toNativeSeparators(ConfigManager::inst()->ladspaDir())),
+ m_gigDir(QDir::toNativeSeparators(ConfigManager::inst()->gigDir())),
+ m_sf2Dir(QDir::toNativeSeparators(ConfigManager::inst()->sf2Dir())),
#ifdef LMMS_HAVE_FLUIDSYNTH
- m_defaultSoundfont( QDir::toNativeSeparators( ConfigManager::inst()->defaultSoundfont() ) ),
+ m_sf2File(QDir::toNativeSeparators(ConfigManager::inst()->sf2File())),
#endif
-#ifdef LMMS_HAVE_STK
- m_stkDir( QDir::toNativeSeparators( ConfigManager::inst()->stkDir() ) ),
-#endif
- m_backgroundArtwork( QDir::toNativeSeparators( ConfigManager::inst()->backgroundArtwork() ) ),
- m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ),
- m_enableAutoSave( ConfigManager::inst()->value( "ui", "enableautosave", "1" ).toInt() ),
- m_enableRunningAutoSave( ConfigManager::inst()->value( "ui", "enablerunningautosave", "0" ).toInt() ),
- m_saveInterval( ConfigManager::inst()->value( "ui", "saveinterval" ).toInt() < 1 ?
- MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES :
- ConfigManager::inst()->value( "ui", "saveinterval" ).toInt() ),
- m_oneInstrumentTrackWindow( ConfigManager::inst()->value( "ui",
- "oneinstrumenttrackwindow" ).toInt() ),
- m_compactTrackButtons( ConfigManager::inst()->value( "ui",
- "compacttrackbuttons" ).toInt() ),
- m_syncVSTPlugins( ConfigManager::inst()->value( "ui",
- "syncvstplugins", "1" ).toInt() ),
- m_animateAFP(ConfigManager::inst()->value( "ui",
- "animateafp", "1" ).toInt() ),
- m_printNoteLabels(ConfigManager::inst()->value( "ui",
- "printnotelabels").toInt() ),
- m_displayWaveform(ConfigManager::inst()->value( "ui",
- "displaywaveform").toInt() ),
- m_disableAutoQuit(ConfigManager::inst()->value( "ui",
- "disableautoquit", "1" ).toInt() ),
- m_vstEmbedMethod( ConfigManager::inst()->vstEmbedMethod() ),
- m_vstAlwaysOnTop( ConfigManager::inst()->value( "ui",
- "vstalwaysontop" ).toInt() )
+ m_themeDir(QDir::toNativeSeparators(ConfigManager::inst()->themeDir())),
+ m_backgroundPicFile(QDir::toNativeSeparators(ConfigManager::inst()->backgroundPicFile()))
{
- setWindowIcon( embed::getIconPixmap( "setup_general" ) );
- setWindowTitle( tr( "Setup LMMS" ) );
- setModal( true );
- setFixedSize( 452, 570 );
-
- Engine::projectJournal()->setJournalling( false );
-
- QVBoxLayout * vlayout = new QVBoxLayout( this );
- vlayout->setSpacing( 0 );
- vlayout->setMargin( 0 );
- QWidget * settings = new QWidget( this );
- QHBoxLayout * hlayout = new QHBoxLayout( settings );
- hlayout->setSpacing( 0 );
- hlayout->setMargin( 0 );
-
- m_tabBar = new TabBar( settings, QBoxLayout::TopToBottom );
- m_tabBar->setExclusive( true );
- m_tabBar->setFixedWidth( 72 );
-
- QWidget * ws = new QWidget( settings );
- int wsHeight = 420;
-#ifdef LMMS_HAVE_STK
- wsHeight += 50;
-#endif
-#ifdef LMMS_HAVE_FLUIDSYNTH
- wsHeight += 50;
-#endif
- ws->setFixedSize( 360, wsHeight );
- QWidget * general = new QWidget( ws );
- general->setFixedSize( 360, 290 );
- QVBoxLayout * gen_layout = new QVBoxLayout( general );
- gen_layout->setSpacing( 0 );
- gen_layout->setMargin( 0 );
- labelWidget( general, tr( "General settings" ) );
-
- TabWidget * bufsize_tw = new TabWidget( tr( "BUFFER SIZE" ), general );
- bufsize_tw->setFixedHeight( 80 );
-
- m_bufSizeSlider = new QSlider( Qt::Horizontal, bufsize_tw );
- m_bufSizeSlider->setRange( 1, 128 );
- m_bufSizeSlider->setTickPosition( QSlider::TicksBelow );
- m_bufSizeSlider->setPageStep( 8 );
- m_bufSizeSlider->setTickInterval( 8 );
- m_bufSizeSlider->setGeometry( 10, 16, 340, 18 );
- m_bufSizeSlider->setValue( m_bufferSize / BUFFERSIZE_RESOLUTION );
-
- connect( m_bufSizeSlider, SIGNAL( valueChanged( int ) ), this,
- SLOT( setBufferSize( int ) ) );
-
- m_bufSizeLbl = new QLabel( bufsize_tw );
- m_bufSizeLbl->setGeometry( 10, 40, 200, 32 );
- setBufferSize( m_bufSizeSlider->value() );
-
- QPushButton * bufsize_reset_btn = new QPushButton(
- embed::getIconPixmap( "reload" ), "", bufsize_tw );
- bufsize_reset_btn->setGeometry( 320, 40, 28, 28 );
- connect( bufsize_reset_btn, SIGNAL( clicked() ), this,
- SLOT( resetBufSize() ) );
- ToolTip::add( bufsize_reset_btn, tr( "Reset to default value" ) );
-
- TabWidget * misc_tw = new TabWidget( tr( "MISC" ), general );
+ setWindowIcon(embed::getIconPixmap("setup_general"));
+ setWindowTitle(tr("Settings"));
+ // TODO: Equivalent to the new setWindowFlag(Qt::WindowContextHelpButtonHint, false)
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ setModal(true);
+ setFixedSize(454, 400);
+
+ Engine::projectJournal()->setJournalling(false);
+
+
+ // Constants for positioning LED check boxes.
const int XDelta = 10;
const int YDelta = 18;
- const int HeaderSize = 30;
- int labelNumber = 0;
- auto addLedCheckBox = [&XDelta, &YDelta, &misc_tw, &labelNumber, this](
+ // Main widget.
+ QWidget * main_w = new QWidget(this);
+
+
+ // Vertical layout.
+ QVBoxLayout * vlayout = new QVBoxLayout(this);
+ vlayout->setSpacing(0);
+ vlayout->setMargin(0);
+
+ // Horizontal layout.
+ QHBoxLayout * hlayout = new QHBoxLayout(main_w);
+ hlayout->setSpacing(0);
+ hlayout->setMargin(0);
+
+ // Tab bar for the main tabs.
+ m_tabBar = new TabBar(main_w, QBoxLayout::TopToBottom);
+ m_tabBar->setExclusive(true);
+ m_tabBar->setFixedWidth(72);
+
+ // Settings widget.
+ QWidget * settings_w = new QWidget(main_w);
+ settings_w->setFixedSize(360, 360);
+
+ // General widget.
+ QWidget * general_w = new QWidget(settings_w);
+ QVBoxLayout * general_layout = new QVBoxLayout(general_w);
+ general_layout->setSpacing(10);
+ general_layout->setMargin(0);
+ labelWidget(general_w, tr("General"));
+
+
+ auto addLedCheckBox = [&XDelta, &YDelta, this](
const char* ledText,
+ TabWidget* tw,
+ int& counter,
bool initialState,
- const char* toggledSlot
+ const char* toggledSlot,
+ bool showRestartWarning
){
- LedCheckBox * checkBox = new LedCheckBox(tr(ledText), misc_tw);
- labelNumber++;
- checkBox->move(XDelta, YDelta*labelNumber);
+ LedCheckBox * checkBox = new LedCheckBox(tr(ledText), tw);
+ counter++;
+ checkBox->move(XDelta, YDelta * counter);
checkBox->setChecked(initialState);
connect(checkBox, SIGNAL(toggled(bool)), this, toggledSlot);
+ if (showRestartWarning)
+ {
+ connect(checkBox, SIGNAL(toggled(bool)), this, SLOT(showRestartWarning()));
+ }
};
- addLedCheckBox("Enable tooltips",
- m_toolTips, SLOT(toggleToolTips(bool)));
- addLedCheckBox("Show restart warning after changing settings",
- m_warnAfterSetup, SLOT(toggleWarnAfterSetup(bool)));
- addLedCheckBox("Display volume as dBFS ",
- m_displaydBFS, SLOT(toggleDisplaydBFS(bool)));
- addLedCheckBox("Compress project files per default",
- m_MMPZ, SLOT(toggleMMPZ(bool)));
- addLedCheckBox("One instrument track window mode",
- m_oneInstrumentTrackWindow,
- SLOT(toggleOneInstrumentTrackWindow(bool)));
- addLedCheckBox("HQ-mode for output audio-device",
- m_hqAudioDev, SLOT(toggleHQAudioDev(bool)));
- addLedCheckBox("Compact track buttons",
- m_compactTrackButtons, SLOT(toggleCompactTrackButtons(bool)));
- addLedCheckBox("Sync VST plugins to host playback",
- m_syncVSTPlugins, SLOT(toggleSyncVSTPlugins(bool)));
- addLedCheckBox("Enable note labels in piano roll",
- m_printNoteLabels, SLOT(toggleNoteLabels(bool)));
- addLedCheckBox("Enable waveform display by default",
- m_displayWaveform, SLOT(toggleDisplayWaveform(bool)));
- addLedCheckBox("Keep effects running even without input",
- m_disableAutoQuit, SLOT(toggleDisableAutoquit(bool)));
- addLedCheckBox("Create backup file when saving a project",
- m_disableBackup, SLOT(toggleDisableBackup(bool)));
- addLedCheckBox("Reopen last project on start",
- m_openLastProject, SLOT(toggleOpenLastProject(bool)));
-
- misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize );
- // Advanced setting, hidden for now
- if( false )
- {
- LedCheckBox * useNaNHandler = new LedCheckBox(
- tr( "Use built-in NaN handler" ),
- misc_tw );
- useNaNHandler->setChecked( m_NaNHandler );
- }
+ int counter = 0;
- TabWidget* embed_tw = new TabWidget( tr( "PLUGIN EMBEDDING" ), general);
- embed_tw->setFixedHeight( 66 );
- m_vstEmbedComboBox = new QComboBox( embed_tw );
- m_vstEmbedComboBox->move( XDelta, YDelta );
+ // GUI tab.
+ TabWidget * gui_tw = new TabWidget(
+ tr("Graphical user interface (GUI)"), general_w);
- QStringList embedMethods = ConfigManager::availabeVstEmbedMethods();
- m_vstEmbedComboBox->addItem( tr( "No embedding" ), "none" );
- if( embedMethods.contains("qt") )
- {
- m_vstEmbedComboBox->addItem( tr( "Embed using Qt API" ), "qt" );
- }
- if( embedMethods.contains("win32") )
- {
- m_vstEmbedComboBox->addItem( tr( "Embed using native Win32 API" ), "win32" );
- }
- if( embedMethods.contains("xembed") )
- {
- m_vstEmbedComboBox->addItem( tr( "Embed using XEmbed protocol" ), "xembed" );
- }
- m_vstEmbedComboBox->setCurrentIndex( m_vstEmbedComboBox->findData( m_vstEmbedMethod ) );
- connect( m_vstEmbedComboBox, SIGNAL( currentIndexChanged( int ) ),
- this, SLOT( vstEmbedMethodChanged() ) );
- m_vstAlwaysOnTopCheckBox = new LedCheckBox(
- tr( "Keep plugin windows on top when not embedded" ),
- embed_tw );
- m_vstAlwaysOnTopCheckBox->move( 20, 44 );
- m_vstAlwaysOnTopCheckBox->setChecked( m_vstAlwaysOnTop );
- m_vstAlwaysOnTopCheckBox->setVisible( m_vstEmbedMethod == "none" );
- connect( m_vstAlwaysOnTopCheckBox, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleVSTAlwaysOnTop( bool ) ) );
-
- TabWidget * lang_tw = new TabWidget( tr( "LANGUAGE" ), general );
- lang_tw->setFixedHeight( 48 );
- QComboBox * changeLang = new QComboBox( lang_tw );
- changeLang->move( XDelta, YDelta );
-
- QDir dir( ConfigManager::inst()->localeDir() );
- QStringList fileNames = dir.entryList( QStringList( "*.qm" ) );
- for( int i = 0; i < fileNames.size(); ++i )
+ addLedCheckBox("Display volume as dBFS ", gui_tw, counter,
+ m_displaydBFS, SLOT(toggleDisplaydBFS(bool)), true);
+ addLedCheckBox("Enable tooltips", gui_tw, counter,
+ m_tooltips, SLOT(toggleTooltips(bool)), true);
+ addLedCheckBox("Enable master oscilloscope by default", gui_tw, counter,
+ m_displayWaveform, SLOT(toggleDisplayWaveform(bool)), true);
+ addLedCheckBox("Enable all note labels in piano roll", gui_tw, counter,
+ m_printNoteLabels, SLOT(toggleNoteLabels(bool)), false);
+ addLedCheckBox("Enable compact track buttons", gui_tw, counter,
+ m_compactTrackButtons, SLOT(toggleCompactTrackButtons(bool)), true);
+ addLedCheckBox("Enable one instrument-track-window mode", gui_tw, counter,
+ m_oneInstrumentTrackWindow, SLOT(toggleOneInstrumentTrackWindow(bool)), true);
+
+ gui_tw->setFixedHeight(YDelta + YDelta * counter);
+
+
+ counter = 0;
+
+ // Projects tab.
+ TabWidget * projects_tw = new TabWidget(
+ tr("Projects"), general_w);
+
+
+ addLedCheckBox("Compress project files by default", projects_tw, counter,
+ m_MMPZ, SLOT(toggleMMPZ(bool)), true);
+ addLedCheckBox("Create a backup file when saving a project", projects_tw, counter,
+ m_disableBackup, SLOT(toggleDisableBackup(bool)), false);
+ addLedCheckBox("Reopen last project on startup", projects_tw, counter,
+ m_openLastProject, SLOT(toggleOpenLastProject(bool)), false);
+
+ projects_tw->setFixedHeight(YDelta + YDelta * counter);
+
+ // Language tab.
+ TabWidget * lang_tw = new TabWidget(
+ tr("Language"), general_w);
+ lang_tw->setFixedHeight(48);
+ QComboBox * changeLang = new QComboBox(lang_tw);
+ changeLang->move(XDelta, 20);
+
+ QDir dir(ConfigManager::inst()->localeDir());
+ QStringList fileNames = dir.entryList(QStringList("*.qm"));
+ for(int i = 0; i < fileNames.size(); ++i)
{
- // get locale extracted by filename
- fileNames[i].truncate( fileNames[i].lastIndexOf( '.' ) );
- m_languages.append( fileNames[i] );
- QString lang = QLocale( m_languages.last() ).nativeLanguageName();
- changeLang->addItem( lang );
+ // Get locale extracted by filename.
+ fileNames[i].truncate(fileNames[i].lastIndexOf('.'));
+ m_languages.append(fileNames[i]);
+ QString lang = QLocale(m_languages.last()).nativeLanguageName();
+ changeLang->addItem(lang);
}
- connect( changeLang, SIGNAL( currentIndexChanged( int ) ),
- this, SLOT( setLanguage( int ) ) );
- //If language unset, fallback to system language when available
- if( m_lang == "" )
+ // If language unset, fallback to system language when available.
+ if(m_lang == "")
{
- QString tmp = QLocale::system().name().left( 2 );
- if( m_languages.contains( tmp ) )
+ QString tmp = QLocale::system().name().left(2);
+ if(m_languages.contains(tmp))
{
m_lang = tmp;
}
@@ -324,474 +281,569 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
}
}
- for( int i = 0; i < changeLang->count(); ++i )
+ for(int i = 0; i < changeLang->count(); ++i)
{
- if( m_lang == m_languages.at( i ) )
+ if(m_lang == m_languages.at(i))
{
- changeLang->setCurrentIndex( i );
+ changeLang->setCurrentIndex(i);
break;
}
}
- gen_layout->addWidget( bufsize_tw );
- gen_layout->addSpacing( 10 );
- gen_layout->addWidget( misc_tw );
- gen_layout->addSpacing( 10 );
- gen_layout->addWidget( embed_tw );
- gen_layout->addSpacing( 10 );
- gen_layout->addWidget( lang_tw );
- gen_layout->addStretch();
+ connect(changeLang, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(setLanguage(int)));
+ connect(changeLang, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(showRestartWarning()));
+ // General layout ordering.
+ general_layout->addWidget(gui_tw);
+ general_layout->addWidget(projects_tw);
+ general_layout->addWidget(lang_tw);
+ general_layout->addStretch();
- QWidget * paths = new QWidget( ws );
- int pathsHeight = 420;
-#ifdef LMMS_HAVE_STK
- pathsHeight += 55;
-#endif
-#ifdef LMMS_HAVE_FLUIDSYNTH
- pathsHeight += 55;
-#endif
- paths->setFixedSize( 360, pathsHeight );
- QVBoxLayout * dir_layout = new QVBoxLayout( paths );
- dir_layout->setSpacing( 0 );
- dir_layout->setMargin( 0 );
- labelWidget( paths, tr( "Paths" ) );
- QLabel * title = new QLabel( tr( "Directories" ), paths );
- QFont f = title->font();
- f.setBold( true );
- title->setFont( pointSize<12>( f ) );
- QScrollArea *pathScroll = new QScrollArea( paths );
- QWidget *pathSelectors = new QWidget( ws );
- QVBoxLayout *pathSelectorLayout = new QVBoxLayout;
- pathScroll->setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn );
- pathScroll->setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
- pathScroll->resize( 362, pathsHeight - 50 );
- pathScroll->move( 0, 30 );
- pathSelectors->resize( 360, pathsHeight - 50 );
-
- const int txtLength = 284;
- const int btnStart = 297;
-
-
- auto addPathEntry = [&](const char* caption,
- const QString& content,
- const char* setSlot,
- const char* openSlot,
- QLineEdit*& lineEdit,
- QWidget* twParent,
- const char* pixmap = "project_open")
- {
- TabWidget * newTw = new TabWidget(tr(caption).toUpper(),
- twParent);
- newTw->setFixedHeight(48);
-
- lineEdit = new QLineEdit(content, newTw);
- lineEdit->setGeometry(10, 20, txtLength, 16);
- connect(lineEdit, SIGNAL(textChanged(const QString &)),
- this, setSlot);
+ // Performance widget.
+ QWidget * performance_w = new QWidget(settings_w);
+ QVBoxLayout * performance_layout = new QVBoxLayout(performance_w);
+ performance_layout->setSpacing(10);
+ performance_layout->setMargin(0);
+ labelWidget(performance_w,
+ tr("Performance"));
- QPushButton * selectBtn = new QPushButton(
- embed::getIconPixmap(pixmap, 16, 16),
- "", newTw);
- selectBtn->setFixedSize(24, 24);
- selectBtn->move(btnStart, 16);
- connect(selectBtn, SIGNAL(clicked()), this, openSlot);
- pathSelectorLayout->addWidget(newTw);
- pathSelectorLayout->addSpacing(10);
- };
+ // Autosave tab.
+ TabWidget * auto_save_tw = new TabWidget(
+ tr("Autosave"), performance_w);
+ auto_save_tw->setFixedHeight(106);
- addPathEntry("LMMS working directory", m_workingDir,
- SLOT(setWorkingDir(const QString &)),
- SLOT(openWorkingDir()),
- m_wdLineEdit, pathSelectors);
- addPathEntry("GIG directory", m_gigDir,
- SLOT(setGIGDir(const QString &)),
- SLOT(openGIGDir()),
- m_gigLineEdit, pathSelectors);
- addPathEntry("SF2 directory", m_sf2Dir,
- SLOT(setSF2Dir(const QString &)),
- SLOT(openSF2Dir()),
- m_sf2LineEdit, pathSelectors);
- addPathEntry("VST-plugin directory", m_vstDir,
- SLOT(setVSTDir(const QString &)),
- SLOT(openVSTDir()),
- m_vdLineEdit, pathSelectors);
- addPathEntry("LADSPA plugin directories", m_ladDir,
- SLOT(setLADSPADir(const QString &)),
- SLOT(openLADSPADir()),
- m_ladLineEdit, paths,
- "add_folder");
-#ifdef LMMS_HAVE_STK
- addPathEntry("STK rawwave directory", m_stkDir,
- SLOT(setSTKDir(const QString &)),
- SLOT(openSTKDir()),
- m_stkLineEdit, paths);
-#endif
-#ifdef LMMS_HAVE_FLUIDSYNTH
- addPathEntry("Default Soundfont File", m_defaultSoundfont,
- SLOT(setDefaultSoundfont(const QString &)),
- SLOT(openDefaultSoundfont()),
- m_sfLineEdit, paths);
-#endif
- addPathEntry("Themes directory", m_artworkDir,
- SLOT(setArtworkDir(const QString &)),
- SLOT(openArtworkDir()),
- m_adLineEdit, pathSelectors);
- pathSelectorLayout->addStretch();
- addPathEntry("Background artwork", m_backgroundArtwork,
- SLOT(setBackgroundArtwork(const QString &)),
- SLOT(openBackgroundArtwork()),
- m_baLineEdit, paths);
- pathSelectors->setLayout(pathSelectorLayout);
+ m_saveIntervalSlider = new QSlider(Qt::Horizontal, auto_save_tw);
+ m_saveIntervalSlider->setValue(m_saveInterval);
+ m_saveIntervalSlider->setRange(1, 20);
+ m_saveIntervalSlider->setTickInterval(1);
+ m_saveIntervalSlider->setPageStep(1);
+ m_saveIntervalSlider->setGeometry(10, 18, 340, 18);
+ m_saveIntervalSlider->setTickPosition(QSlider::TicksBelow);
+ connect(m_saveIntervalSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setAutoSaveInterval(int)));
- dir_layout->addWidget(pathSelectors);
+ m_saveIntervalLbl = new QLabel(auto_save_tw);
+ m_saveIntervalLbl->setGeometry(10, 40, 200, 24);
+ setAutoSaveInterval(m_saveIntervalSlider->value());
- pathScroll->setWidget(pathSelectors);
- pathScroll->setWidgetResizable(true);
+ m_autoSave = new LedCheckBox(
+ tr("Enable autosave"), auto_save_tw);
+ m_autoSave->move(10, 70);
+ m_autoSave->setChecked(m_enableAutoSave);
+ connect(m_autoSave, SIGNAL(toggled(bool)),
+ this, SLOT(toggleAutoSave(bool)));
+ m_runningAutoSave = new LedCheckBox(
+ tr("Allow autosave while playing"), auto_save_tw);
+ m_runningAutoSave->move(20, 88);
+ m_runningAutoSave->setChecked(m_enableRunningAutoSave);
+ connect(m_runningAutoSave, SIGNAL(toggled(bool)),
+ this, SLOT(toggleRunningAutoSave(bool)));
+ QPushButton * autoSaveResetBtn = new QPushButton(
+ embed::getIconPixmap("reload"), "", auto_save_tw);
+ autoSaveResetBtn->setGeometry(320, 70, 28, 28);
+ connect(autoSaveResetBtn, SIGNAL(clicked()),
+ this, SLOT(resetAutoSave()));
- QWidget * performance = new QWidget( ws );
- performance->setFixedSize( 360, 200 );
- QVBoxLayout * perf_layout = new QVBoxLayout( performance );
- perf_layout->setSpacing( 0 );
- perf_layout->setMargin( 0 );
- labelWidget( performance, tr( "Performance settings" ) );
+ m_saveIntervalSlider->setEnabled(m_enableAutoSave);
+ m_runningAutoSave->setVisible(m_enableAutoSave);
- TabWidget * auto_save_tw = new TabWidget(
- tr( "Auto save" ).toUpper(), performance );
- auto_save_tw->setFixedHeight( 110 );
+ counter = 0;
- m_saveIntervalSlider = new QSlider( Qt::Horizontal, auto_save_tw );
- m_saveIntervalSlider->setRange( 1, 20 );
- m_saveIntervalSlider->setTickPosition( QSlider::TicksBelow );
- m_saveIntervalSlider->setPageStep( 1 );
- m_saveIntervalSlider->setTickInterval( 1 );
- m_saveIntervalSlider->setGeometry( 10, 16, 340, 18 );
- m_saveIntervalSlider->setValue( m_saveInterval );
+ // UI effect vs. performance tab.
+ TabWidget * ui_fx_tw = new TabWidget(
+ tr("User interface (UI) effects vs. performance"), performance_w);
- connect( m_saveIntervalSlider, SIGNAL( valueChanged( int ) ), this,
- SLOT( setAutoSaveInterval( int ) ) );
+ addLedCheckBox("Smooth scroll in song editor", ui_fx_tw, counter,
+ m_smoothScroll, SLOT(toggleSmoothScroll(bool)), false);
+ addLedCheckBox("Display playback cursor in AudioFileProcessor", ui_fx_tw, counter,
+ m_animateAFP, SLOT(toggleAnimateAFP(bool)), false);
- m_saveIntervalLbl = new QLabel( auto_save_tw );
- m_saveIntervalLbl->setGeometry( 10, 40, 200, 24 );
- setAutoSaveInterval( m_saveIntervalSlider->value() );
+ ui_fx_tw->setFixedHeight(YDelta + YDelta * counter);
- m_autoSave = new LedCheckBox(
- tr( "Enable auto-save" ), auto_save_tw );
- m_autoSave->move( 10, 70 );
- m_autoSave->setChecked( m_enableAutoSave );
- connect( m_autoSave, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleAutoSave( bool ) ) );
- m_runningAutoSave = new LedCheckBox(
- tr( "Allow auto-save while playing" ), auto_save_tw );
- m_runningAutoSave->move( 20, 90 );
- m_runningAutoSave->setChecked( m_enableRunningAutoSave );
- connect( m_runningAutoSave, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleRunningAutoSave( bool ) ) );
+ counter = 0;
- QPushButton * autoSaveResetBtn = new QPushButton(
- embed::getIconPixmap( "reload" ), "", auto_save_tw );
- autoSaveResetBtn->setGeometry( 320, 70, 28, 28 );
- connect( autoSaveResetBtn, SIGNAL( clicked() ), this,
- SLOT( resetAutoSave() ) );
- ToolTip::add( autoSaveResetBtn, tr( "Reset to default value" ) );
+ // Plugins tab.
+ TabWidget * plugins_tw = new TabWidget(
+ tr("Plugins"), performance_w);
- m_saveIntervalSlider->setEnabled( m_enableAutoSave );
- m_runningAutoSave->setVisible( m_enableAutoSave );
+ m_vstEmbedLbl = new QLabel(plugins_tw);
+ m_vstEmbedLbl->move(XDelta, YDelta * ++counter);
+ m_vstEmbedLbl->setText(tr("VST plugins embedding:"));
+ m_vstEmbedComboBox = new QComboBox(plugins_tw);
+ m_vstEmbedComboBox->move(XDelta, YDelta * ++counter);
- perf_layout->addWidget( auto_save_tw );
- perf_layout->addSpacing( 10 );
+ QStringList embedMethods = ConfigManager::availabeVstEmbedMethods();
+ m_vstEmbedComboBox->addItem(tr("No embedding"), "none");
+ if(embedMethods.contains("qt"))
+ {
+ m_vstEmbedComboBox->addItem(tr("Embed using Qt API"), "qt");
+ }
+ if(embedMethods.contains("win32"))
+ {
+ m_vstEmbedComboBox->addItem(tr("Embed using native Win32 API"), "win32");
+ }
+ if(embedMethods.contains("xembed"))
+ {
+ m_vstEmbedComboBox->addItem(tr("Embed using XEmbed protocol"), "xembed");
+ }
+ m_vstEmbedComboBox->setCurrentIndex(m_vstEmbedComboBox->findData(m_vstEmbedMethod));
+ connect(m_vstEmbedComboBox, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(vstEmbedMethodChanged()));
+ counter += 2;
- TabWidget * ui_fx_tw = new TabWidget( tr( "UI effects vs. "
- "performance" ).toUpper(),
- performance );
- ui_fx_tw->setFixedHeight( 70 );
+ m_vstAlwaysOnTopCheckBox = new LedCheckBox(
+ tr("Keep plugin windows on top when not embedded"), plugins_tw);
+ m_vstAlwaysOnTopCheckBox->move(20, 66);
+ m_vstAlwaysOnTopCheckBox->setChecked(m_vstAlwaysOnTop);
+ m_vstAlwaysOnTopCheckBox->setVisible(m_vstEmbedMethod == "none");
+ connect(m_vstAlwaysOnTopCheckBox, SIGNAL(toggled(bool)),
+ this, SLOT(toggleVSTAlwaysOnTop(bool)));
- LedCheckBox * smoothScroll = new LedCheckBox(
- tr( "Smooth scroll in Song Editor" ), ui_fx_tw );
- smoothScroll->move( 10, 20 );
- smoothScroll->setChecked( m_smoothScroll );
- connect( smoothScroll, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleSmoothScroll( bool ) ) );
+ addLedCheckBox("Sync VST plugins to host playback", plugins_tw, counter,
+ m_syncVSTPlugins, SLOT(toggleSyncVSTPlugins(bool)), false);
- LedCheckBox * animAFP = new LedCheckBox(
- tr( "Show playback cursor in AudioFileProcessor" ),
- ui_fx_tw );
- animAFP->move( 10, 40 );
- animAFP->setChecked( m_animateAFP );
- connect( animAFP, SIGNAL( toggled( bool ) ),
- this, SLOT( toggleAnimateAFP( bool ) ) );
+ addLedCheckBox("Keep effects running even without input", plugins_tw, counter,
+ m_disableAutoQuit, SLOT(toggleDisableAutoQuit(bool)), false);
+ plugins_tw->setFixedHeight(YDelta + YDelta * counter);
- perf_layout->addWidget( ui_fx_tw );
- perf_layout->addStretch();
+ // Performance layout ordering.
+ performance_layout->addWidget(auto_save_tw);
+ performance_layout->addWidget(ui_fx_tw);
+ performance_layout->addWidget(plugins_tw);
+ performance_layout->addStretch();
- QWidget * audio = new QWidget( ws );
- audio->setFixedSize( 360, 200 );
- QVBoxLayout * audio_layout = new QVBoxLayout( audio );
- audio_layout->setSpacing( 0 );
- audio_layout->setMargin( 0 );
- labelWidget( audio, tr( "Audio settings" ) );
+ // Audio widget.
+ QWidget * audio_w = new QWidget(settings_w);
+ QVBoxLayout * audio_layout = new QVBoxLayout(audio_w);
+ audio_layout->setSpacing(10);
+ audio_layout->setMargin(0);
+ labelWidget(audio_w,
+ tr("Audio"));
- TabWidget * audioiface_tw = new TabWidget( tr( "AUDIO INTERFACE" ),
- audio );
- audioiface_tw->setFixedHeight( 60 );
+ // Audio interface tab.
+ TabWidget * audioiface_tw = new TabWidget(
+ tr("Audio interface"), audio_w);
+ audioiface_tw->setFixedHeight(56);
- m_audioInterfaces = new QComboBox( audioiface_tw );
- m_audioInterfaces->setGeometry( 10, 20, 240, 22 );
+ m_audioInterfaces = new QComboBox(audioiface_tw);
+ m_audioInterfaces->setGeometry(10, 20, 240, 28);
- // create ifaces-settings-widget
- QWidget * asw = new QWidget( audio );
- asw->setFixedHeight( 60 );
+ // Ifaces-settings-widget.
+ QWidget * as_w = new QWidget(audio_w);
+ as_w->setFixedHeight(60);
- QHBoxLayout * asw_layout = new QHBoxLayout( asw );
- asw_layout->setSpacing( 0 );
- asw_layout->setMargin( 0 );
- //asw_layout->setAutoAdd( true );
+ QHBoxLayout * as_w_layout = new QHBoxLayout(as_w);
+ as_w_layout->setSpacing(0);
+ as_w_layout->setMargin(0);
#ifdef LMMS_HAVE_JACK
- m_audioIfaceSetupWidgets[AudioJack::name()] =
- new AudioJack::setupWidget( asw );
+ m_audioIfaceSetupWidgets[AudioJack::name()] =
+ new AudioJack::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_ALSA
m_audioIfaceSetupWidgets[AudioAlsa::name()] =
- new AudioAlsaSetupWidget( asw );
+ new AudioAlsaSetupWidget(as_w);
#endif
#ifdef LMMS_HAVE_PULSEAUDIO
m_audioIfaceSetupWidgets[AudioPulseAudio::name()] =
- new AudioPulseAudio::setupWidget( asw );
+ new AudioPulseAudio::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_PORTAUDIO
m_audioIfaceSetupWidgets[AudioPortAudio::name()] =
- new AudioPortAudio::setupWidget( asw );
+ new AudioPortAudio::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_SOUNDIO
m_audioIfaceSetupWidgets[AudioSoundIo::name()] =
- new AudioSoundIo::setupWidget( asw );
+ new AudioSoundIo::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_SDL
m_audioIfaceSetupWidgets[AudioSdl::name()] =
- new AudioSdl::setupWidget( asw );
+ new AudioSdl::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_OSS
m_audioIfaceSetupWidgets[AudioOss::name()] =
- new AudioOss::setupWidget( asw );
+ new AudioOss::setupWidget(as_w);
#endif
#ifdef LMMS_HAVE_SNDIO
m_audioIfaceSetupWidgets[AudioSndio::name()] =
- new AudioSndio::setupWidget( asw );
+ new AudioSndio::setupWidget(as_w);
#endif
+
m_audioIfaceSetupWidgets[AudioDummy::name()] =
- new AudioDummy::setupWidget( asw );
+ new AudioDummy::setupWidget(as_w);
- for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
- it != m_audioIfaceSetupWidgets.end(); ++it )
+ for(AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
+ it != m_audioIfaceSetupWidgets.end(); ++it)
{
- m_audioIfaceNames[tr( it.key().toLatin1())] = it.key();
+ m_audioIfaceNames[
+ tr(it.key().toLatin1())] = it.key();
}
- for( trMap::iterator it = m_audioIfaceNames.begin();
- it != m_audioIfaceNames.end(); ++it )
+ for(trMap::iterator it = m_audioIfaceNames.begin();
+ it != m_audioIfaceNames.end(); ++it)
{
QWidget * audioWidget = m_audioIfaceSetupWidgets[it.value()];
audioWidget->hide();
- asw_layout->addWidget( audioWidget );
- m_audioInterfaces->addItem( it.key() );
+ as_w_layout->addWidget(audioWidget);
+ m_audioInterfaces->addItem(it.key());
}
- // If no preferred audio device is saved, save the current one
- QString audioDevName =
- ConfigManager::inst()->value( "mixer", "audiodev" );
- if( m_audioInterfaces->findText(audioDevName) < 0 )
+ // If no preferred audio device is saved, save the current one.
+ QString audioDevName = ConfigManager::inst()->value("mixer", "audiodev");
+ if (m_audioInterfaces->findText(audioDevName) < 0)
{
audioDevName = Engine::mixer()->audioDevName();
- ConfigManager::inst()->setValue(
- "mixer", "audiodev", audioDevName );
+ ConfigManager::inst()->setValue("mixer", "audiodev", audioDevName);
}
m_audioInterfaces->
- setCurrentIndex( m_audioInterfaces->findText( audioDevName ) );
+ setCurrentIndex(m_audioInterfaces->findText(audioDevName));
m_audioIfaceSetupWidgets[audioDevName]->show();
- connect( m_audioInterfaces, SIGNAL( activated( const QString & ) ),
- this, SLOT( audioInterfaceChanged( const QString & ) ) );
+ connect(m_audioInterfaces, SIGNAL(activated(const QString &)),
+ this, SLOT(audioInterfaceChanged(const QString &)));
+ // Advanced setting, hidden for now
+ if(false)
+ {
+ LedCheckBox * useNaNHandler = new LedCheckBox(
+ tr("Use built-in NaN handler"), audio_w);
+ useNaNHandler->setChecked(m_NaNHandler);
+ }
- audio_layout->addWidget( audioiface_tw );
- audio_layout->addSpacing( 20 );
- audio_layout->addWidget( asw );
+ // HQ mode LED.
+ LedCheckBox * hqaudio = new LedCheckBox(
+ tr("HQ mode for output audio device"), audio_w);
+ hqaudio->move(10, 0);
+ hqaudio->setChecked(m_hqAudioDev);
+ connect(hqaudio, SIGNAL(toggled(bool)),
+ this, SLOT(toggleHQAudioDev(bool)));
+
+
+ // Buffer size tab.
+ TabWidget * bufferSize_tw = new TabWidget(
+ tr("Buffer size"), audio_w);
+ bufferSize_tw->setFixedHeight(76);
+
+ m_bufferSizeSlider = new QSlider(Qt::Horizontal, bufferSize_tw);
+ m_bufferSizeSlider->setRange(1, 128);
+ m_bufferSizeSlider->setTickInterval(8);
+ m_bufferSizeSlider->setPageStep(8);
+ m_bufferSizeSlider->setValue(m_bufferSize / BUFFERSIZE_RESOLUTION);
+ m_bufferSizeSlider->setGeometry(10, 18, 340, 18);
+ m_bufferSizeSlider->setTickPosition(QSlider::TicksBelow);
+
+ connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(setBufferSize(int)));
+ connect(m_bufferSizeSlider, SIGNAL(valueChanged(int)),
+ this, SLOT(showRestartWarning()));
+
+ m_bufferSizeLbl = new QLabel(bufferSize_tw);
+ m_bufferSizeLbl->setGeometry(10, 40, 200, 24);
+ setBufferSize(m_bufferSizeSlider->value());
+
+ QPushButton * bufferSize_reset_btn = new QPushButton(
+ embed::getIconPixmap("reload"), "", bufferSize_tw);
+ bufferSize_reset_btn->setGeometry(320, 40, 28, 28);
+ connect(bufferSize_reset_btn, SIGNAL(clicked()),
+ this, SLOT(resetBufferSize()));
+ ToolTip::add(bufferSize_reset_btn,
+ tr("Reset to default value"));
+
+
+ // Audio layout ordering.
+ audio_layout->addWidget(audioiface_tw);
+ audio_layout->addWidget(as_w);
+ audio_layout->addWidget(hqaudio);
+ audio_layout->addWidget(bufferSize_tw);
audio_layout->addStretch();
- QWidget * midi = new QWidget( ws );
- QVBoxLayout * midi_layout = new QVBoxLayout( midi );
- midi_layout->setSpacing( 0 );
- midi_layout->setMargin( 0 );
- labelWidget( midi, tr( "MIDI settings" ) );
+ // MIDI widget.
+ QWidget * midi_w = new QWidget(settings_w);
+ QVBoxLayout * midi_layout = new QVBoxLayout(midi_w);
+ midi_layout->setSpacing(10);
+ midi_layout->setMargin(0);
+ labelWidget(midi_w,
+ tr("MIDI"));
- TabWidget * midiiface_tw = new TabWidget( tr( "MIDI INTERFACE" ),
- midi );
- midiiface_tw->setFixedHeight( 60 );
+ // MIDI interface tab.
+ TabWidget * midiiface_tw = new TabWidget(
+ tr("MIDI interface"), midi_w);
+ midiiface_tw->setFixedHeight(56);
- m_midiInterfaces = new QComboBox( midiiface_tw );
- m_midiInterfaces->setGeometry( 10, 20, 240, 22 );
+ m_midiInterfaces = new QComboBox(midiiface_tw);
+ m_midiInterfaces->setGeometry(10, 20, 240, 28);
+ // Ifaces-settings-widget.
+ QWidget * ms_w = new QWidget(midi_w);
+ ms_w->setFixedHeight(60);
- // create ifaces-settings-widget
- QWidget * msw = new QWidget( midi );
- msw->setFixedHeight( 60 );
-
- QHBoxLayout * msw_layout = new QHBoxLayout( msw );
- msw_layout->setSpacing( 0 );
- msw_layout->setMargin( 0 );
- //msw_layout->setAutoAdd( true );
+ QHBoxLayout * ms_w_layout = new QHBoxLayout(ms_w);
+ ms_w_layout->setSpacing(0);
+ ms_w_layout->setMargin(0);
#ifdef LMMS_HAVE_ALSA
m_midiIfaceSetupWidgets[MidiAlsaSeq::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
m_midiIfaceSetupWidgets[MidiAlsaRaw::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
#ifdef LMMS_HAVE_JACK
m_midiIfaceSetupWidgets[MidiJack::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
#ifdef LMMS_HAVE_OSS
m_midiIfaceSetupWidgets[MidiOss::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
#ifdef LMMS_HAVE_SNDIO
m_midiIfaceSetupWidgets[MidiSndio::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
#ifdef LMMS_BUILD_WIN32
m_midiIfaceSetupWidgets[MidiWinMM::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
#ifdef LMMS_BUILD_APPLE
m_midiIfaceSetupWidgets[MidiApple::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
#endif
m_midiIfaceSetupWidgets[MidiDummy::name()] =
- MidiSetupWidget::create( msw );
+ MidiSetupWidget::create(ms_w);
- for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
- it != m_midiIfaceSetupWidgets.end(); ++it )
+ for(MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
+ it != m_midiIfaceSetupWidgets.end(); ++it)
{
- m_midiIfaceNames[tr( it.key().toLatin1())] = it.key();
+ m_midiIfaceNames[
+ tr(it.key().toLatin1())] = it.key();
}
- for( trMap::iterator it = m_midiIfaceNames.begin();
- it != m_midiIfaceNames.end(); ++it )
+ for(trMap::iterator it = m_midiIfaceNames.begin();
+ it != m_midiIfaceNames.end(); ++it)
{
QWidget * midiWidget = m_midiIfaceSetupWidgets[it.value()];
midiWidget->hide();
- msw_layout->addWidget( midiWidget );
- m_midiInterfaces->addItem( it.key() );
+ ms_w_layout->addWidget(midiWidget);
+ m_midiInterfaces->addItem(it.key());
}
- QString midiDevName =
- ConfigManager::inst()->value( "mixer", "mididev" );
- if( m_midiInterfaces->findText(midiDevName) < 0 )
+ QString midiDevName = ConfigManager::inst()->value("mixer", "mididev");
+ if (m_midiInterfaces->findText(midiDevName) < 0)
{
midiDevName = Engine::mixer()->midiClientName();
- ConfigManager::inst()->setValue(
- "mixer", "mididev", midiDevName );
+ ConfigManager::inst()->setValue("mixer", "mididev", midiDevName);
}
- m_midiInterfaces->setCurrentIndex(
- m_midiInterfaces->findText( midiDevName ) );
+ m_midiInterfaces->setCurrentIndex(m_midiInterfaces->findText(midiDevName));
m_midiIfaceSetupWidgets[midiDevName]->show();
- connect( m_midiInterfaces, SIGNAL( activated( const QString & ) ),
- this, SLOT( midiInterfaceChanged( const QString & ) ) );
+ connect(m_midiInterfaces, SIGNAL(activated(const QString &)),
+ this, SLOT(midiInterfaceChanged(const QString &)));
- midi_layout->addWidget( midiiface_tw );
- midi_layout->addSpacing( 20 );
- midi_layout->addWidget( msw );
+ // MIDI layout ordering.
+ midi_layout->addWidget(midiiface_tw);
+ midi_layout->addWidget(ms_w);
midi_layout->addStretch();
- m_tabBar->addTab( general, tr( "General settings" ), 0, false, true
- )->setIcon( embed::getIconPixmap( "setup_general" ) );
- m_tabBar->addTab( paths, tr( "Paths" ), 1, false, true
- )->setIcon( embed::getIconPixmap(
- "setup_directories" ) );
- m_tabBar->addTab( performance, tr( "Performance settings" ), 2, false,
- true )->setIcon( embed::getIconPixmap(
- "setup_performance" ) );
- m_tabBar->addTab( audio, tr( "Audio settings" ), 3, false, true
- )->setIcon( embed::getIconPixmap( "setup_audio" ) );
- m_tabBar->addTab( midi, tr( "MIDI settings" ), 4, true, true
- )->setIcon( embed::getIconPixmap( "setup_midi" ) );
-
-
- m_tabBar->setActiveTab( _tab_to_open );
-
- hlayout->addWidget( m_tabBar );
- hlayout->addSpacing( 10 );
- hlayout->addWidget( ws );
- hlayout->addSpacing( 10 );
- hlayout->addStretch();
-
- QWidget * buttons = new QWidget( this );
- QHBoxLayout * btn_layout = new QHBoxLayout( buttons );
- btn_layout->setSpacing( 0 );
- btn_layout->setMargin( 0 );
- QPushButton * ok_btn = new QPushButton( embed::getIconPixmap( "apply" ),
- tr( "OK" ), buttons );
- connect( ok_btn, SIGNAL( clicked() ), this, SLOT( accept() ) );
-
- QPushButton * cancel_btn = new QPushButton( embed::getIconPixmap(
- "cancel" ),
- tr( "Cancel" ),
- buttons );
- connect( cancel_btn, SIGNAL( clicked() ), this, SLOT( reject() ) );
-
- btn_layout->addStretch();
- btn_layout->addSpacing( 10 );
- btn_layout->addWidget( ok_btn );
- btn_layout->addSpacing( 10 );
- btn_layout->addWidget( cancel_btn );
- btn_layout->addSpacing( 10 );
-
- vlayout->addWidget( settings );
- vlayout->addSpacing( 10 );
- vlayout->addWidget( buttons );
- vlayout->addSpacing( 10 );
- vlayout->addStretch();
- show();
+ // Paths widget.
+ QWidget * paths_w = new QWidget(settings_w);
+
+ QVBoxLayout * paths_layout = new QVBoxLayout(paths_w);
+ paths_layout->setSpacing(10);
+ paths_layout->setMargin(0);
+
+ labelWidget(paths_w, tr("Paths"));
+
+
+ // Paths scroll area.
+ QScrollArea * pathsScroll = new QScrollArea(paths_w);
+ pathsScroll->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ pathsScroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ // Path selectors widget.
+ QWidget * pathSelectors = new QWidget(paths_w);
+
+ const int txtLength = 284;
+ const int btnStart = 300;
+
+ // Path selectors layout.
+ QVBoxLayout * pathSelectorsLayout = new QVBoxLayout;
+ pathSelectorsLayout->setSpacing(10);
+
+ auto addPathEntry = [&](const char* caption,
+ const QString& content,
+ const char* setSlot,
+ const char* openSlot,
+ QLineEdit*& lineEdit,
+ const char* pixmap = "project_open")
+ {
+ TabWidget * newTw = new TabWidget(tr(caption),
+ pathSelectors);
+ newTw->setFixedHeight(48);
+
+ lineEdit = new QLineEdit(content, newTw);
+ lineEdit->setGeometry(10, 20, txtLength, 16);
+ connect(lineEdit, SIGNAL(textChanged(const QString &)),
+ this, setSlot);
+ QPushButton * selectBtn = new QPushButton(
+ embed::getIconPixmap(pixmap, 16, 16),
+ "", newTw);
+ selectBtn->setFixedSize(24, 24);
+ selectBtn->move(btnStart, 16);
+ connect(selectBtn, SIGNAL(clicked()), this, openSlot);
+
+ pathSelectorsLayout->addWidget(newTw);
+ pathSelectorsLayout->addSpacing(10);
+ };
+
+ addPathEntry("LMMS working directory", m_workingDir,
+ SLOT(setWorkingDir(const QString &)),
+ SLOT(openWorkingDir()),
+ m_workingDirLineEdit);
+ addPathEntry("VST plugins directory", m_vstDir,
+ SLOT(setVSTDir(const QString &)),
+ SLOT(openVSTDir()),
+ m_vstDirLineEdit);
+ addPathEntry("LADSPA plugins directories", m_ladspaDir,
+ SLOT(setLADSPADir(const QString &)),
+ SLOT(openLADSPADir()),
+ m_ladspaDirLineEdit, "add_folder");
+ addPathEntry("SF2 directory", m_sf2Dir,
+ SLOT(setSF2Dir(const QString &)),
+ SLOT(openSF2Dir()),
+ m_sf2DirLineEdit);
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ addPathEntry("Default SF2", m_sf2File,
+ SLOT(setSF2File(const QString &)),
+ SLOT(openSF2File()),
+ m_sf2FileLineEdit);
+#endif
+ addPathEntry("GIG directory", m_gigDir,
+ SLOT(setGIGDir(const QString &)),
+ SLOT(openGIGDir()),
+ m_gigDirLineEdit);
+ addPathEntry("Theme directory", m_themeDir,
+ SLOT(setThemeDir(const QString &)),
+ SLOT(openThemeDir()),
+ m_themeDirLineEdit);
+ addPathEntry("Background artwork", m_backgroundPicFile,
+ SLOT(setBackgroundPicFile(const QString &)),
+ SLOT(openBackgroundPicFile()),
+ m_backgroundPicFileLineEdit);
+
+ pathSelectorsLayout->addStretch();
+
+ pathSelectors->setLayout(pathSelectorsLayout);
+
+ pathsScroll->setWidget(pathSelectors);
+ pathsScroll->setWidgetResizable(true);
+
+ paths_layout->addWidget(pathsScroll);
+ paths_layout->addStretch();
+
+ // Major tabs ordering.
+ m_tabBar->addTab(general_w,
+ tr("General"), 0, false, true)->setIcon(
+ embed::getIconPixmap("setup_general"));
+ m_tabBar->addTab(performance_w,
+ tr("Performance"), 1, false, true)->setIcon(
+ embed::getIconPixmap("setup_performance"));
+ m_tabBar->addTab(audio_w,
+ tr("Audio"), 2, false, true)->setIcon(
+ embed::getIconPixmap("setup_audio"));
+ m_tabBar->addTab(midi_w,
+ tr("MIDI"), 3, false, true)->setIcon(
+ embed::getIconPixmap("setup_midi"));
+ m_tabBar->addTab(paths_w,
+ tr("Paths"), 4, true, true)->setIcon(
+ embed::getIconPixmap("setup_directories"));
+
+ m_tabBar->setActiveTab(tab_to_open);
+
+ // Horizontal layout ordering.
+ hlayout->addSpacing(2);
+ hlayout->addWidget(m_tabBar);
+ hlayout->addSpacing(10);
+ hlayout->addWidget(settings_w);
+ hlayout->addSpacing(10);
+
+ // Extras widget and layout.
+ QWidget * extras_w = new QWidget(this);
+ QHBoxLayout * extras_layout = new QHBoxLayout(extras_w);
+ extras_layout->setSpacing(0);
+ extras_layout->setMargin(0);
+
+ // Restart warning label.
+ restartWarningLbl = new QLabel(
+ tr("Some changes require restarting."), extras_w);
+ restartWarningLbl->hide();
+
+ // OK button.
+ QPushButton * ok_btn = new QPushButton(
+ embed::getIconPixmap("apply"),
+ tr("OK"), extras_w);
+ connect(ok_btn, SIGNAL(clicked()),
+ this, SLOT(accept()));
+
+ // Cancel button.
+ QPushButton * cancel_btn = new QPushButton(
+ embed::getIconPixmap("cancel"),
+ tr("Cancel"), extras_w);
+ connect(cancel_btn, SIGNAL(clicked()),
+ this, SLOT(reject()));
+
+ // Extras layout ordering.
+ extras_layout->addSpacing(10);
+ extras_layout->addWidget(restartWarningLbl);
+ extras_layout->addStretch();
+ extras_layout->addWidget(ok_btn);
+ extras_layout->addSpacing(10);
+ extras_layout->addWidget(cancel_btn);
+ extras_layout->addSpacing(10);
+
+ // Vertical layout ordering.
+ vlayout->addWidget(main_w);
+ vlayout->addSpacing(10);
+ vlayout->addWidget(extras_w);
+ vlayout->addSpacing(10);
+ show();
}
@@ -799,7 +851,7 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) :
SetupDialog::~SetupDialog()
{
- Engine::projectJournal()->setJournalling( true );
+ Engine::projectJournal()->setJournalling(true);
}
@@ -807,557 +859,469 @@ SetupDialog::~SetupDialog()
void SetupDialog::accept()
{
- if( m_warnAfterSetup )
- {
- QMessageBox::information( NULL, tr( "Restart LMMS" ),
- tr( "Please note that most changes "
- "won't take effect until "
- "you restart LMMS!" ),
- QMessageBox::Ok );
- }
-
- // Hide dialog before setting values. This prevents an obscure bug
- // where non-embedded VST windows would steal focus and prevent LMMS
- // from taking mouse input, rendering the application unusable.
+ /* Hide dialog before setting values. This prevents an obscure bug
+ where non-embedded VST windows would steal focus and prevent LMMS
+ from taking mouse input, rendering the application unusable. */
QDialog::accept();
- ConfigManager::inst()->setValue( "mixer", "framesperaudiobuffer",
- QString::number( m_bufferSize ) );
- ConfigManager::inst()->setValue( "mixer", "audiodev",
- m_audioIfaceNames[m_audioInterfaces->currentText()] );
- ConfigManager::inst()->setValue( "mixer", "mididev",
- m_midiIfaceNames[m_midiInterfaces->currentText()] );
- ConfigManager::inst()->setValue( "tooltips", "disabled",
- QString::number( !m_toolTips ) );
- ConfigManager::inst()->setValue( "app", "nomsgaftersetup",
- QString::number( !m_warnAfterSetup ) );
- ConfigManager::inst()->setValue( "app", "displaydbfs",
- QString::number( m_displaydBFS ) );
- ConfigManager::inst()->setValue( "app", "nommpz",
- QString::number( !m_MMPZ ) );
- ConfigManager::inst()->setValue( "app", "disablebackup",
- QString::number( !m_disableBackup ) );
- ConfigManager::inst()->setValue( "app", "openlastproject",
- QString::number( m_openLastProject ) );
- ConfigManager::inst()->setValue( "app", "nanhandler",
- QString::number( m_NaNHandler ) );
- ConfigManager::inst()->setValue( "mixer", "hqaudio",
- QString::number( m_hqAudioDev ) );
- ConfigManager::inst()->setValue( "ui", "smoothscroll",
- QString::number( m_smoothScroll ) );
- ConfigManager::inst()->setValue( "ui", "enableautosave",
- QString::number( m_enableAutoSave ) );
- ConfigManager::inst()->setValue( "ui", "saveinterval",
- QString::number( m_saveInterval ) );
- ConfigManager::inst()->setValue( "ui", "enablerunningautosave",
- QString::number( m_enableRunningAutoSave ) );
- ConfigManager::inst()->setValue( "ui", "oneinstrumenttrackwindow",
- QString::number( m_oneInstrumentTrackWindow ) );
- ConfigManager::inst()->setValue( "ui", "compacttrackbuttons",
- QString::number( m_compactTrackButtons ) );
- ConfigManager::inst()->setValue( "ui", "syncvstplugins",
- QString::number( m_syncVSTPlugins ) );
- ConfigManager::inst()->setValue( "ui", "animateafp",
- QString::number( m_animateAFP ) );
- ConfigManager::inst()->setValue( "ui", "printnotelabels",
- QString::number( m_printNoteLabels ) );
- ConfigManager::inst()->setValue( "ui", "displaywaveform",
- QString::number( m_displayWaveform ) );
- ConfigManager::inst()->setValue( "ui", "disableautoquit",
- QString::number( m_disableAutoQuit ) );
- ConfigManager::inst()->setValue( "app", "language", m_lang );
- ConfigManager::inst()->setValue( "ui", "vstembedmethod",
- m_vstEmbedMethod );
- ConfigManager::inst()->setValue( "ui", "vstalwaysontop",
- QString::number( m_vstAlwaysOnTop ) );
+ ConfigManager::inst()->setValue("app", "displaydbfs",
+ QString::number(m_displaydBFS));
+ ConfigManager::inst()->setValue("tooltips", "disabled",
+ QString::number(!m_tooltips));
+ ConfigManager::inst()->setValue("ui", "displaywaveform",
+ QString::number(m_displayWaveform));
+ ConfigManager::inst()->setValue("ui", "printnotelabels",
+ QString::number(m_printNoteLabels));
+ ConfigManager::inst()->setValue("ui", "compacttrackbuttons",
+ QString::number(m_compactTrackButtons));
+ ConfigManager::inst()->setValue("ui", "oneinstrumenttrackwindow",
+ QString::number(m_oneInstrumentTrackWindow));
+ ConfigManager::inst()->setValue("app", "nommpz",
+ QString::number(!m_MMPZ));
+ ConfigManager::inst()->setValue("app", "disablebackup",
+ QString::number(!m_disableBackup));
+ ConfigManager::inst()->setValue("app", "openlastproject",
+ QString::number(m_openLastProject));
+ ConfigManager::inst()->setValue("app", "language", m_lang);
+ ConfigManager::inst()->setValue("ui", "saveinterval",
+ QString::number(m_saveInterval));
+ ConfigManager::inst()->setValue("ui", "enableautosave",
+ QString::number(m_enableAutoSave));
+ ConfigManager::inst()->setValue("ui", "enablerunningautosave",
+ QString::number(m_enableRunningAutoSave));
+ ConfigManager::inst()->setValue("ui", "smoothscroll",
+ QString::number(m_smoothScroll));
+ ConfigManager::inst()->setValue("ui", "animateafp",
+ QString::number(m_animateAFP));
+ ConfigManager::inst()->setValue("ui", "vstembedmethod",
+ m_vstEmbedComboBox->currentData().toString());
+ ConfigManager::inst()->setValue("ui", "vstalwaysontop",
+ QString::number(m_vstAlwaysOnTop));
+ ConfigManager::inst()->setValue("ui", "syncvstplugins",
+ QString::number(m_syncVSTPlugins));
+ ConfigManager::inst()->setValue("ui", "disableautoquit",
+ QString::number(m_disableAutoQuit));
+ ConfigManager::inst()->setValue("mixer", "audiodev",
+ m_audioIfaceNames[m_audioInterfaces->currentText()]);
+ ConfigManager::inst()->setValue("app", "nanhandler",
+ QString::number(m_NaNHandler));
+ ConfigManager::inst()->setValue("mixer", "hqaudio",
+ QString::number(m_hqAudioDev));
+ ConfigManager::inst()->setValue("mixer", "framesperaudiobuffer",
+ QString::number(m_bufferSize));
+ ConfigManager::inst()->setValue("mixer", "mididev",
+ m_midiIfaceNames[m_midiInterfaces->currentText()]);
ConfigManager::inst()->setWorkingDir(QDir::fromNativeSeparators(m_workingDir));
ConfigManager::inst()->setVSTDir(QDir::fromNativeSeparators(m_vstDir));
- ConfigManager::inst()->setGIGDir(QDir::fromNativeSeparators(m_gigDir));
+ ConfigManager::inst()->setLADSPADir(QDir::fromNativeSeparators(m_ladspaDir));
ConfigManager::inst()->setSF2Dir(QDir::fromNativeSeparators(m_sf2Dir));
- ConfigManager::inst()->setArtworkDir(QDir::fromNativeSeparators(m_artworkDir));
- ConfigManager::inst()->setLADSPADir(QDir::fromNativeSeparators(m_ladDir));
#ifdef LMMS_HAVE_FLUIDSYNTH
- ConfigManager::inst()->setDefaultSoundfont( m_defaultSoundfont );
+ ConfigManager::inst()->setSF2File(m_sf2File);
#endif
-#ifdef LMMS_HAVE_STK
- ConfigManager::inst()->setSTKDir(QDir::fromNativeSeparators(m_stkDir));
-#endif
- ConfigManager::inst()->setBackgroundArtwork( m_backgroundArtwork );
-
- // tell all audio-settings-widget to save their settings
- for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
- it != m_audioIfaceSetupWidgets.end(); ++it )
+ ConfigManager::inst()->setGIGDir(QDir::fromNativeSeparators(m_gigDir));
+ ConfigManager::inst()->setThemeDir(QDir::fromNativeSeparators(m_themeDir));
+ ConfigManager::inst()->setBackgroundPicFile(m_backgroundPicFile);
+
+ // Tell all audio-settings-widgets to save their settings.
+ for(AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
+ it != m_audioIfaceSetupWidgets.end(); ++it)
{
it.value()->saveSettings();
}
- // tell all MIDI-settings-widget to save their settings
- for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
- it != m_midiIfaceSetupWidgets.end(); ++it )
+ // Tell all MIDI-settings-widgets to save their settings.
+ for(MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
+ it != m_midiIfaceSetupWidgets.end(); ++it)
{
it.value()->saveSettings();
}
-
ConfigManager::inst()->saveConfigFile();
}
-void SetupDialog::setBufferSize( int _value )
-{
- const int step = DEFAULT_BUFFER_SIZE / BUFFERSIZE_RESOLUTION;
- if( _value > step && _value % step )
- {
- int mod_value = _value % step;
- if( mod_value < step / 2 )
- {
- m_bufSizeSlider->setValue( _value - mod_value );
- }
- else
- {
- m_bufSizeSlider->setValue( _value + step - mod_value );
- }
- return;
- }
-
- if( m_bufSizeSlider->value() != _value )
- {
- m_bufSizeSlider->setValue( _value );
- }
-
- m_bufferSize = _value * BUFFERSIZE_RESOLUTION;
- m_bufSizeLbl->setText( tr( "Frames: %1\nLatency: %2 ms" ).arg(
- m_bufferSize ).arg(
- 1000.0f * m_bufferSize /
- Engine::mixer()->processingSampleRate(),
- 0, 'f', 1 ) );
-}
-
+// General settings slots.
-
-
-void SetupDialog::resetBufSize()
+void SetupDialog::toggleDisplaydBFS(bool enabled)
{
- setBufferSize( DEFAULT_BUFFER_SIZE / BUFFERSIZE_RESOLUTION );
+ m_displaydBFS = enabled;
}
-
-
-void SetupDialog::toggleToolTips( bool _enabled )
+void SetupDialog::toggleTooltips(bool enabled)
{
- m_toolTips = _enabled;
+ m_tooltips = enabled;
}
-
-
-void SetupDialog::toggleWarnAfterSetup( bool _enabled )
+void SetupDialog::toggleDisplayWaveform(bool enabled)
{
- m_warnAfterSetup = _enabled;
+ m_displayWaveform = enabled;
}
-
-
-void SetupDialog::toggleDisplaydBFS( bool _enabled )
+void SetupDialog::toggleNoteLabels(bool enabled)
{
- m_displaydBFS = _enabled;
+ m_printNoteLabels = enabled;
}
-
-
-void SetupDialog::toggleMMPZ( bool _enabled )
+void SetupDialog::toggleCompactTrackButtons(bool enabled)
{
- m_MMPZ = _enabled;
+ m_compactTrackButtons = enabled;
}
-
-
-void SetupDialog::toggleDisableBackup( bool _enabled )
+void SetupDialog::toggleOneInstrumentTrackWindow(bool enabled)
{
- m_disableBackup = _enabled;
+ m_oneInstrumentTrackWindow = enabled;
}
-
-
-void SetupDialog::toggleOpenLastProject( bool _enabled )
+void SetupDialog::toggleMMPZ(bool enabled)
{
- m_openLastProject = _enabled;
+ m_MMPZ = enabled;
}
-
-
-void SetupDialog::toggleHQAudioDev( bool _enabled )
+void SetupDialog::toggleDisableBackup(bool enabled)
{
- m_hqAudioDev = _enabled;
+ m_disableBackup = enabled;
}
-
-
-void SetupDialog::toggleSmoothScroll( bool _enabled )
+void SetupDialog::toggleOpenLastProject(bool enabled)
{
- m_smoothScroll = _enabled;
+ m_openLastProject = enabled;
}
-
-
-void SetupDialog::toggleAutoSave( bool _enabled )
+void SetupDialog::setLanguage(int lang)
{
- m_enableAutoSave = _enabled;
- m_saveIntervalSlider->setEnabled( _enabled );
- m_runningAutoSave->setVisible( _enabled );
- setAutoSaveInterval( m_saveIntervalSlider->value() );
+ m_lang = m_languages[lang];
}
-void SetupDialog::toggleRunningAutoSave( bool _enabled )
-{
- m_enableRunningAutoSave = _enabled;
-}
-
-
-
+// Performance settings slots.
-void SetupDialog::toggleCompactTrackButtons( bool _enabled )
+void SetupDialog::setAutoSaveInterval(int value)
{
- m_compactTrackButtons = _enabled;
+ m_saveInterval = value;
+ m_saveIntervalSlider->setValue(m_saveInterval);
+ QString minutes = m_saveInterval > 1 ? tr("minutes") : tr("minute");
+ minutes = QString("%1 %2").arg(QString::number(m_saveInterval), minutes);
+ minutes = m_enableAutoSave ? minutes : tr("Disabled");
+ m_saveIntervalLbl->setText(
+ tr("Autosave interval: %1").arg(minutes));
}
-
-
-
-void SetupDialog::toggleSyncVSTPlugins( bool _enabled )
+void SetupDialog::toggleAutoSave(bool enabled)
{
- m_syncVSTPlugins = _enabled;
+ m_enableAutoSave = enabled;
+ m_saveIntervalSlider->setEnabled(enabled);
+ m_runningAutoSave->setVisible(enabled);
+ setAutoSaveInterval(m_saveIntervalSlider->value());
}
-void SetupDialog::toggleAnimateAFP( bool _enabled )
+
+void SetupDialog::toggleRunningAutoSave(bool enabled)
{
- m_animateAFP = _enabled;
+ m_enableRunningAutoSave = enabled;
}
-void SetupDialog::toggleNoteLabels( bool en )
+void SetupDialog::resetAutoSave()
{
- m_printNoteLabels = en;
+ setAutoSaveInterval(MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES);
+ m_autoSave->setChecked(true);
+ m_runningAutoSave->setChecked(false);
}
-void SetupDialog::toggleDisplayWaveform( bool en )
+void SetupDialog::toggleSmoothScroll(bool enabled)
{
- m_displayWaveform = en;
+ m_smoothScroll = enabled;
}
-void SetupDialog::toggleDisableAutoquit( bool en )
+void SetupDialog::toggleAnimateAFP(bool enabled)
{
- m_disableAutoQuit = en;
+ m_animateAFP = enabled;
}
-void SetupDialog::toggleOneInstrumentTrackWindow( bool _enabled )
+void SetupDialog::toggleSyncVSTPlugins(bool enabled)
{
- m_oneInstrumentTrackWindow = _enabled;
+ m_syncVSTPlugins = enabled;
}
void SetupDialog::vstEmbedMethodChanged()
{
m_vstEmbedMethod = m_vstEmbedComboBox->currentData().toString();
- m_vstAlwaysOnTopCheckBox->setVisible( m_vstEmbedMethod == "none" );
+ m_vstAlwaysOnTopCheckBox->setVisible(m_vstEmbedMethod == "none");
}
-void SetupDialog::toggleVSTAlwaysOnTop( bool en )
+void SetupDialog::toggleVSTAlwaysOnTop(bool enabled)
{
- m_vstAlwaysOnTop = en;
+ m_vstAlwaysOnTop = enabled;
}
-void SetupDialog::setLanguage( int lang )
+void SetupDialog::toggleDisableAutoQuit(bool enabled)
{
- m_lang = m_languages[lang];
+ m_disableAutoQuit = enabled;
}
+// Audio settings slots.
-void SetupDialog::openWorkingDir()
+void SetupDialog::toggleHQAudioDev(bool enabled)
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose LMMS working directory" ), m_workingDir );
- if( ! new_dir.isEmpty() )
- {
- m_wdLineEdit->setText( new_dir );
- }
+ m_hqAudioDev = enabled;
}
-void SetupDialog::openGIGDir()
+
+void SetupDialog::audioInterfaceChanged(const QString & iface)
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose your GIG directory" ),
- m_gigDir );
- if( ! new_dir.isEmpty() )
+ for(AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
+ it != m_audioIfaceSetupWidgets.end(); ++it)
{
- m_gigLineEdit->setText( new_dir );
+ it.value()->hide();
}
+
+ m_audioIfaceSetupWidgets[m_audioIfaceNames[iface]]->show();
}
-void SetupDialog::openSF2Dir()
+
+void SetupDialog::setBufferSize(int value)
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose your SF2 directory" ),
- m_sf2Dir );
- if( ! new_dir.isEmpty() )
+ const int step = DEFAULT_BUFFER_SIZE / BUFFERSIZE_RESOLUTION;
+ if(value > step && value % step)
{
- m_sf2LineEdit->setText( new_dir );
+ int mod_value = value % step;
+ if(mod_value < step / 2)
+ {
+ m_bufferSizeSlider->setValue(value - mod_value);
+ }
+ else
+ {
+ m_bufferSizeSlider->setValue(value + step - mod_value);
+ }
+ return;
}
-}
+ if(m_bufferSizeSlider->value() != value)
+ {
+ m_bufferSizeSlider->setValue(value);
+ }
+ m_bufferSize = value * BUFFERSIZE_RESOLUTION;
+ m_bufferSizeLbl->setText(tr("Frames: %1\nLatency: %2 ms").arg(m_bufferSize).arg(
+ 1000.0f * m_bufferSize / Engine::mixer()->processingSampleRate(), 0, 'f', 1));
+}
-void SetupDialog::setWorkingDir( const QString & _wd )
+void SetupDialog::resetBufferSize()
{
- m_workingDir = _wd;
+ setBufferSize(DEFAULT_BUFFER_SIZE / BUFFERSIZE_RESOLUTION);
}
+// MIDI settings slots.
-
-void SetupDialog::openVSTDir()
+void SetupDialog::midiInterfaceChanged(const QString & iface)
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose your VST-plugin directory" ),
- m_vstDir );
- if( ! new_dir.isEmpty() )
+ for(MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
+ it != m_midiIfaceSetupWidgets.end(); ++it)
{
- m_vdLineEdit->setText( new_dir );
+ it.value()->hide();
}
-}
+ m_midiIfaceSetupWidgets[m_midiIfaceNames[iface]]->show();
+}
+// Paths settings slots.
-void SetupDialog::setVSTDir( const QString & _vd )
+void SetupDialog::openWorkingDir()
{
- m_vstDir = _vd;
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose the LMMS working directory"), m_workingDir);
+ if (!new_dir.isEmpty())
+ {
+ m_workingDirLineEdit->setText(new_dir);
+ }
}
-void SetupDialog::setGIGDir(const QString &_gd)
-{
- m_gigDir = _gd;
-}
-void SetupDialog::setSF2Dir(const QString &_sfd)
+void SetupDialog::setWorkingDir(const QString & workingDir)
{
- m_sf2Dir = _sfd;
+ m_workingDir = workingDir;
}
-
-
-void SetupDialog::openArtworkDir()
+void SetupDialog::openVSTDir()
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose artwork-theme directory" ),
- m_artworkDir );
- if( ! new_dir.isEmpty() )
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose your VST plugins directory"), m_vstDir);
+ if (!new_dir.isEmpty())
{
- m_adLineEdit->setText( new_dir );
+ m_vstDirLineEdit->setText(new_dir);
}
}
-
-
-void SetupDialog::setArtworkDir( const QString & _ad )
+void SetupDialog::setVSTDir(const QString & vstDir)
{
- m_artworkDir = _ad;
+ m_vstDir = vstDir;
}
-
-
void SetupDialog::openLADSPADir()
{
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose LADSPA plugin directory" ),
- m_ladDir );
- if( ! new_dir.isEmpty() )
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose your LADSPA plugins directory"), m_ladspaDir);
+ if (!new_dir.isEmpty())
{
- if( m_ladLineEdit->text() == "" )
+ if(m_ladspaDirLineEdit->text() == "")
{
- m_ladLineEdit->setText( new_dir );
+ m_ladspaDirLineEdit->setText(new_dir);
}
else
{
- m_ladLineEdit->setText( m_ladLineEdit->text() + "," +
- new_dir );
+ m_ladspaDirLineEdit->setText(m_ladspaDirLineEdit->text() + "," +
+ new_dir);
}
}
}
-
-void SetupDialog::openSTKDir()
+void SetupDialog::setLADSPADir(const QString & ladspaDir)
{
-#ifdef LMMS_HAVE_STK
- QString new_dir = FileDialog::getExistingDirectory( this,
- tr( "Choose STK rawwave directory" ),
- m_stkDir );
- if( ! new_dir.isEmpty() )
- {
- m_stkLineEdit->setText( new_dir );
- }
-#endif
+ m_ladspaDir = ladspaDir;
}
-
-
-void SetupDialog::openDefaultSoundfont()
+void SetupDialog::openSF2Dir()
{
-#ifdef LMMS_HAVE_FLUIDSYNTH
- QString new_file = FileDialog::getOpenFileName( this,
- tr( "Choose default SoundFont" ), m_defaultSoundfont,
- "SoundFont2 Files (*.sf2)" );
-
- if( ! new_file.isEmpty() )
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose your SF2 directory"), m_sf2Dir);
+ if (!new_dir.isEmpty())
{
- m_sfLineEdit->setText( new_file );
+ m_sf2DirLineEdit->setText(new_dir);
}
-#endif
}
-
-
-void SetupDialog::openBackgroundArtwork()
+void SetupDialog::setSF2Dir(const QString & sf2Dir)
{
- QList fileTypesList = QImageReader::supportedImageFormats();
- QString fileTypes;
- for( int i = 0; i < fileTypesList.count(); i++ )
- {
- if( fileTypesList[i] != fileTypesList[i].toUpper() )
- {
- if( !fileTypes.isEmpty() )
- {
- fileTypes += " ";
- }
- fileTypes += "*." + QString( fileTypesList[i] );
- }
- }
-
- QString dir = ( m_backgroundArtwork.isEmpty() ) ?
- m_artworkDir :
- m_backgroundArtwork;
- QString new_file = FileDialog::getOpenFileName( this,
- tr( "Choose background artwork" ), dir,
- "Image Files (" + fileTypes + ")" );
-
- if( ! new_file.isEmpty() )
- {
- m_baLineEdit->setText( new_file );
- }
+ m_sf2Dir = sf2Dir;
}
-
-
-void SetupDialog::setLADSPADir( const QString & _fd )
+void SetupDialog::openSF2File()
{
- m_ladDir = _fd;
-}
-
-
-
+#ifdef LMMS_HAVE_FLUIDSYNTH
+ QString new_file = FileDialog::getOpenFileName(this,
+ tr("Choose your default SF2"), m_sf2File, "SoundFont 2 files (*.sf2)");
-void SetupDialog::setSTKDir( const QString & _fd )
-{
-#ifdef LMMS_HAVE_STK
- m_stkDir = _fd;
+ if (!new_file.isEmpty())
+ {
+ m_sf2FileLineEdit->setText(new_file);
+ }
#endif
}
-
-
-void SetupDialog::setDefaultSoundfont( const QString & _sf )
+void SetupDialog::setSF2File(const QString & sf2File)
{
#ifdef LMMS_HAVE_FLUIDSYNTH
- m_defaultSoundfont = _sf;
+ m_sf2File = sf2File;
#endif
}
-
-
-void SetupDialog::setBackgroundArtwork( const QString & _ba )
+void SetupDialog::openGIGDir()
{
- m_backgroundArtwork = _ba;
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose your GIG directory"), m_gigDir);
+ if(new_dir != QString::null)
+ {
+ m_gigDirLineEdit->setText(new_dir);
+ }
}
-
-
-void SetupDialog::setAutoSaveInterval( int value )
+void SetupDialog::setGIGDir(const QString & gigDir)
{
- m_saveInterval = value;
- m_saveIntervalSlider->setValue( m_saveInterval );
- QString minutes = m_saveInterval > 1 ? tr( "minutes" ) : tr( "minute" );
- minutes = QString( "%1 %2" ).arg( QString::number( m_saveInterval ), minutes );
- minutes = m_enableAutoSave ? minutes : tr( "Disabled" );
- m_saveIntervalLbl->setText( tr( "Auto-save interval: %1" ).arg( minutes ) );
+ m_gigDir = gigDir;
}
+void SetupDialog::openThemeDir()
+{
+ QString new_dir = FileDialog::getExistingDirectory(this,
+ tr("Choose your theme directory"), m_themeDir);
+ if(new_dir != QString::null)
+ {
+ m_themeDirLineEdit->setText(new_dir);
+ }
+}
-void SetupDialog::resetAutoSave()
+void SetupDialog::setThemeDir(const QString & themeDir)
{
- setAutoSaveInterval( MainWindow::DEFAULT_SAVE_INTERVAL_MINUTES );
- m_autoSave->setChecked( true );
- m_runningAutoSave->setChecked( false );
+ m_themeDir = themeDir;
}
+void SetupDialog::openBackgroundPicFile()
+{
+ QList fileTypesList = QImageReader::supportedImageFormats();
+ QString fileTypes;
+ for(int i = 0; i < fileTypesList.count(); i++)
+ {
+ if(fileTypesList[i] != fileTypesList[i].toUpper())
+ {
+ if(!fileTypes.isEmpty())
+ {
+ fileTypes += " ";
+ }
+ fileTypes += "*." + QString(fileTypesList[i]);
+ }
+ }
+ QString dir = (m_backgroundPicFile.isEmpty()) ?
+ m_themeDir :
+ m_backgroundPicFile;
+ QString new_file = FileDialog::getOpenFileName(this,
+ tr("Choose your background picture"), dir, "Picture files (" + fileTypes + ")");
-void SetupDialog::audioInterfaceChanged( const QString & _iface )
-{
- for( AswMap::iterator it = m_audioIfaceSetupWidgets.begin();
- it != m_audioIfaceSetupWidgets.end(); ++it )
+ if(new_file != QString::null)
{
- it.value()->hide();
+ m_backgroundPicFileLineEdit->setText(new_file);
}
+}
+
- m_audioIfaceSetupWidgets[m_audioIfaceNames[_iface]]->show();
+void SetupDialog::setBackgroundPicFile(const QString & backgroundPicFile)
+{
+ m_backgroundPicFile = backgroundPicFile;
}
-void SetupDialog::midiInterfaceChanged( const QString & _iface )
+void SetupDialog::showRestartWarning()
{
- for( MswMap::iterator it = m_midiIfaceSetupWidgets.begin();
- it != m_midiIfaceSetupWidgets.end(); ++it )
- {
- it.value()->hide();
- }
-
- m_midiIfaceSetupWidgets[m_midiIfaceNames[_iface]]->show();
+ restartWarningLbl->show();
}
diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp
index dfa7e388f1d..bd196de7f6c 100644
--- a/src/gui/TimeLineWidget.cpp
+++ b/src/gui/TimeLineWidget.cpp
@@ -42,7 +42,7 @@
QPixmap * TimeLineWidget::s_posMarkerPixmap = NULL;
-TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt,
+TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppb,
Song::PlayPos & pos, const MidiTime & begin, Song::PlayModes mode,
QWidget * parent ) :
QWidget( parent ),
@@ -61,7 +61,7 @@ TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt,
m_changedPosition( true ),
m_xOffset( xoff ),
m_posMarkerX( 0 ),
- m_ppt( ppt ),
+ m_ppb( ppb ),
m_pos( pos ),
m_begin( begin ),
m_mode( mode ),
@@ -71,7 +71,7 @@ TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt,
m_moveXOff( 0 )
{
m_loopPos[0] = 0;
- m_loopPos[1] = DefaultTicksPerTact;
+ m_loopPos[1] = DefaultTicksPerBar;
if( s_posMarkerPixmap == NULL )
{
@@ -247,18 +247,18 @@ void TimeLineWidget::paintEvent( QPaintEvent * )
QColor const & barLineColor = getBarLineColor();
QColor const & barNumberColor = getBarNumberColor();
- tact_t barNumber = m_begin.getTact();
+ bar_t barNumber = m_begin.getBar();
int const x = m_xOffset + s_posMarkerPixmap->width() / 2 -
- ( ( static_cast( m_begin * m_ppt ) / MidiTime::ticksPerTact() ) % static_cast( m_ppt ) );
+ ( ( static_cast( m_begin * m_ppb ) / MidiTime::ticksPerBar() ) % static_cast( m_ppb ) );
- for( int i = 0; x + i * m_ppt < width(); ++i )
+ for( int i = 0; x + i * m_ppb < width(); ++i )
{
++barNumber;
if( ( barNumber - 1 ) %
qMax( 1, qRound( 1.0f / 3.0f *
- MidiTime::ticksPerTact() / m_ppt ) ) == 0 )
+ MidiTime::ticksPerBar() / m_ppb ) ) == 0 )
{
- const int cx = x + qRound( i * m_ppt );
+ const int cx = x + qRound( i * m_ppb );
p.setPen( barLineColor );
p.drawLine( cx, 5, cx, height() - 6 );
@@ -313,7 +313,7 @@ void TimeLineWidget::mousePressEvent( QMouseEvent* event )
else if( event->button() == Qt::RightButton )
{
m_moveXOff = s_posMarkerPixmap->width() / 2;
- const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerTact() / m_ppt );
+ const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerBar() / m_ppb );
const MidiTime loopMid = ( m_loopPos[0] + m_loopPos[1] ) / 2;
if( t < loopMid )
@@ -349,7 +349,7 @@ void TimeLineWidget::mousePressEvent( QMouseEvent* event )
void TimeLineWidget::mouseMoveEvent( QMouseEvent* event )
{
parentWidget()->update(); // essential for widgets that this timeline had taken their mouse move event from.
- const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerTact() / m_ppt );
+ const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerBar() / m_ppb );
switch( m_action )
{
@@ -387,10 +387,14 @@ void TimeLineWidget::mouseMoveEvent( QMouseEvent* event )
{
// Note, swap 1 and 0 below and the behavior "skips" the other
// marking instead of pushing it.
- if( m_action == MoveLoopBegin )
- m_loopPos[0] -= MidiTime::ticksPerTact();
+ if( m_action == MoveLoopBegin )
+ {
+ m_loopPos[0] -= MidiTime::ticksPerBar();
+ }
else
- m_loopPos[1] += MidiTime::ticksPerTact();
+ {
+ m_loopPos[1] += MidiTime::ticksPerBar();
+ }
}
update();
break;
diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp
index 649323c0739..9b51c76f272 100644
--- a/src/gui/TrackContainerView.cpp
+++ b/src/gui/TrackContainerView.cpp
@@ -54,9 +54,8 @@ TrackContainerView::TrackContainerView( TrackContainer * _tc ) :
m_tc( _tc ),
m_trackViews(),
m_scrollArea( new scrollArea( this ) ),
- m_ppt( DEFAULT_PIXELS_PER_TACT ),
- m_rubberBand( new RubberBand( m_scrollArea ) ),
- m_origin()
+ m_ppb( DEFAULT_PIXELS_PER_BAR ),
+ m_rubberBand( new RubberBand( m_scrollArea ) )
{
m_tc->setHook( this );
//keeps the direction of the widget, undepended on the locale
@@ -306,9 +305,9 @@ bool TrackContainerView::allowRubberband() const
-void TrackContainerView::setPixelsPerTact( int _ppt )
+void TrackContainerView::setPixelsPerBar( int ppb )
{
- m_ppt = _ppt;
+ m_ppb = ppb;
// tell all TrackContentWidgets to update their background tile pixmap
for( trackViewList::Iterator it = m_trackViews.begin();
@@ -345,12 +344,8 @@ void TrackContainerView::dragEnterEvent( QDragEnterEvent * _dee )
arg( Track::SampleTrack ) );
}
-void TrackContainerView::selectRegionFromPixels(int xStart, int xEnd)
-{
- m_rubberBand->setEnabled( true );
- m_rubberBand->show();
- m_rubberBand->setGeometry( min( xStart, xEnd ), 0, max( xStart, xEnd ) - min( xStart, xEnd ), std::numeric_limits::max() );
-}
+
+
void TrackContainerView::stopRubberBand()
{
@@ -427,55 +422,18 @@ void TrackContainerView::dropEvent( QDropEvent * _de )
-void TrackContainerView::mousePressEvent( QMouseEvent * _me )
-{
- if( allowRubberband() == true )
- {
- m_origin = m_scrollArea->mapFromParent( _me->pos() );
- m_rubberBand->setEnabled( true );
- m_rubberBand->setGeometry( QRect( m_origin, QSize() ) );
- m_rubberBand->show();
- }
- QWidget::mousePressEvent( _me );
-}
-
-
-
-
-void TrackContainerView::mouseMoveEvent( QMouseEvent * _me )
-{
- if( rubberBandActive() == true )
- {
- m_rubberBand->setGeometry( QRect( m_origin,
- m_scrollArea->mapFromParent( _me->pos() ) ).
- normalized() );
- }
- QWidget::mouseMoveEvent( _me );
-}
-
-
-
-
-void TrackContainerView::mouseReleaseEvent( QMouseEvent * _me )
-{
- m_rubberBand->hide();
- m_rubberBand->setEnabled( false );
- QWidget::mouseReleaseEvent( _me );
-}
-
-
-
-
-
void TrackContainerView::resizeEvent( QResizeEvent * _re )
{
realignTracks();
QWidget::resizeEvent( _re );
}
+
+
+
RubberBand *TrackContainerView::rubberBand() const
{
- return m_rubberBand;
+ return m_rubberBand;
}
diff --git a/src/gui/dialogs/FileDialog.cpp b/src/gui/dialogs/FileDialog.cpp
index 3ce10760af3..54cc9d6e4d7 100644
--- a/src/gui/dialogs/FileDialog.cpp
+++ b/src/gui/dialogs/FileDialog.cpp
@@ -47,7 +47,7 @@ FileDialog::FileDialog( QWidget *parent, const QString &caption,
// Find downloads directory
QDir downloadDir( QDir::homePath() + "/Downloads" );
if ( ! downloadDir.exists() )
- downloadDir = QStandardPaths::writableLocation( QStandardPaths::DownloadLocation );
+ downloadDir.setPath(QStandardPaths::writableLocation( QStandardPaths::DownloadLocation ));
if ( downloadDir.exists() )
urls << QUrl::fromLocalFile( downloadDir.absolutePath() );
diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp
index 94e9d5cc86a..bf56e303981 100644
--- a/src/gui/editors/AutomationEditor.cpp
+++ b/src/gui/editors/AutomationEditor.cpp
@@ -92,7 +92,7 @@ AutomationEditor::AutomationEditor() :
m_moveStartTick( 0 ),
m_drawLastLevel( 0.0f ),
m_drawLastTick( 0 ),
- m_ppt( DEFAULT_PPT ),
+ m_ppb( DEFAULT_PPB ),
m_y_delta( DEFAULT_Y_DELTA ),
m_y_auto( true ),
m_editMode( DRAW ),
@@ -149,7 +149,7 @@ AutomationEditor::AutomationEditor() :
}
// add time-line
- m_timeLine = new TimeLineWidget( VALUES_WIDTH, 0, m_ppt,
+ m_timeLine = new TimeLineWidget( VALUES_WIDTH, 0, m_ppb,
Engine::getSong()->getPlayPos(
Song::Mode_PlayAutomationPattern ),
m_currentPosition,
@@ -198,6 +198,8 @@ AutomationEditor::AutomationEditor() :
setCurrentPattern( NULL );
setMouseTracking( true );
+ setFocusPolicy( Qt::StrongFocus );
+ setFocus();
}
@@ -512,7 +514,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent* mouseEvent )
x -= VALUES_WIDTH;
// get tick in which the user clicked
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
// get time map of current pattern
@@ -529,7 +531,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent* mouseEvent )
if( pos_ticks >= it.key() &&
( it+1==time_map.end() ||
pos_ticks <= (it+1).key() ) &&
- ( pos_ticks<= it.key() + MidiTime::ticksPerTact() *4 / m_ppt ) &&
+ ( pos_ticks<= it.key() + MidiTime::ticksPerBar() *4 / m_ppb ) &&
( level == it.value() || mouseEvent->button() == Qt::RightButton ) )
{
break;
@@ -581,7 +583,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent* mouseEvent )
int aligned_x = (int)( (float)( (
it.key() -
m_currentPosition ) *
- m_ppt ) / MidiTime::ticksPerTact() );
+ m_ppb ) / MidiTime::ticksPerBar() );
m_moveXOffset = x - aligned_x - 1;
// set move-cursor
QCursor c( Qt::SizeAllCursor );
@@ -738,7 +740,7 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
x -= m_moveXOffset;
}
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
if( mouseEvent->buttons() & Qt::LeftButton && m_editMode == DRAW )
{
@@ -870,7 +872,7 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
}
// get tick in which the cursor is posated
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
m_selectedTick = pos_ticks - m_selectStartTick;
@@ -891,7 +893,7 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
// move selection + selected values
// do horizontal move-stuff
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
int ticks_diff = pos_ticks -
m_moveStartTick;
@@ -916,8 +918,8 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
}
m_selectStartTick += ticks_diff;
- int tact_diff = ticks_diff / MidiTime::ticksPerTact();
- ticks_diff = ticks_diff % MidiTime::ticksPerTact();
+ int bar_diff = ticks_diff / MidiTime::ticksPerBar();
+ ticks_diff = ticks_diff % MidiTime::ticksPerBar();
// do vertical move-stuff
@@ -965,24 +967,24 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
MidiTime new_value_pos;
if( it.key() )
{
- int value_tact =
+ int value_bar =
( it.key() /
- MidiTime::ticksPerTact() )
- + tact_diff;
+ MidiTime::ticksPerBar() )
+ + bar_diff;
int value_ticks =
( it.key() %
- MidiTime::ticksPerTact() )
+ MidiTime::ticksPerBar() )
+ ticks_diff;
// ensure value_ticks range
- if( value_ticks / MidiTime::ticksPerTact() )
+ if( value_ticks / MidiTime::ticksPerBar() )
{
- value_tact += value_ticks
- / MidiTime::ticksPerTact();
+ value_bar += value_ticks
+ / MidiTime::ticksPerBar();
value_ticks %=
- MidiTime::ticksPerTact();
+ MidiTime::ticksPerBar();
}
m_pattern->removeValue( it.key() );
- new_value_pos = MidiTime( value_tact,
+ new_value_pos = MidiTime( value_bar,
value_ticks );
}
new_selValuesForMove[
@@ -1030,7 +1032,7 @@ void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent )
}
// get tick in which the cursor is posated
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
m_selectedTick = pos_ticks -
@@ -1114,7 +1116,7 @@ inline void AutomationEditor::drawAutomationPoint( QPainter & p, timeMap::iterat
{
int x = xCoordOfTick( it.key() );
int y = yCoordOfLevel( it.value() );
- const int outerRadius = qBound( 3, ( m_ppt * AutomationPattern::quantization() ) / 576, 5 ); // man, getting this calculation right took forever
+ const int outerRadius = qBound( 3, ( m_ppb * AutomationPattern::quantization() ) / 576, 5 ); // man, getting this calculation right took forever
p.setPen( QPen( vertexColor().lighter( 200 ) ) );
p.setBrush( QBrush( vertexColor() ) );
p.drawEllipse( x - outerRadius, y - outerRadius, outerRadius * 2, outerRadius * 2 );
@@ -1286,20 +1288,20 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
/ static_cast( Engine::getSong()->getTimeSigModel().getDenominator() );
float zoomFactor = m_zoomXLevels[m_zoomingXModel.value()];
//the bars which disappears at the left side by scrolling
- int leftBars = m_currentPosition * zoomFactor / MidiTime::ticksPerTact();
+ int leftBars = m_currentPosition * zoomFactor / MidiTime::ticksPerBar();
//iterates the visible bars and draw the shading on uneven bars
- for( int x = VALUES_WIDTH, barCount = leftBars; x < width() + m_currentPosition * zoomFactor / timeSignature; x += m_ppt, ++barCount )
+ for( int x = VALUES_WIDTH, barCount = leftBars; x < width() + m_currentPosition * zoomFactor / timeSignature; x += m_ppb, ++barCount )
{
if( ( barCount + leftBars ) % 2 != 0 )
{
- p.fillRect( x - m_currentPosition * zoomFactor / timeSignature, TOP_MARGIN, m_ppt,
+ p.fillRect( x - m_currentPosition * zoomFactor / timeSignature, TOP_MARGIN, m_ppb,
height() - ( SCROLLBAR_SIZE + TOP_MARGIN ), backgroundShade() );
}
}
// Draw the beat grid
- int ticksPerBeat = DefaultTicksPerTact /
+ int ticksPerBeat = DefaultTicksPerBar /
Engine::getSong()->getTimeSigModel().getDenominator();
for( tick = m_currentPosition - m_currentPosition % ticksPerBeat,
@@ -1312,10 +1314,10 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
}
// and finally bars
- for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerTact(),
+ for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerBar(),
x = xCoordOfTick( tick );
x<=width();
- tick += MidiTime::ticksPerTact(), x = xCoordOfTick( tick ) )
+ tick += MidiTime::ticksPerBar(), x = xCoordOfTick( tick ) )
{
p.setPen( barLineColor() );
p.drawLine( x, grid_bottom, x, x_line_end );
@@ -1450,9 +1452,9 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
}
// now draw selection-frame
- int x = ( sel_pos_start - m_currentPosition ) * m_ppt /
- MidiTime::ticksPerTact();
- int w = ( sel_pos_end - sel_pos_start ) * m_ppt / MidiTime::ticksPerTact();
+ int x = ( sel_pos_start - m_currentPosition ) * m_ppb /
+ MidiTime::ticksPerBar();
+ int w = ( sel_pos_end - sel_pos_start ) * m_ppb / MidiTime::ticksPerBar();
int y, h;
if( m_y_auto )
{
@@ -1482,7 +1484,7 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
m_leftRightScroll->setPageStep( l );
}
- if( validPattern() && GuiApplication::instance()->automationEditor()->hasFocus() )
+ if(validPattern() && GuiApplication::instance()->automationEditor()->m_editor->hasFocus())
{
drawCross( p );
@@ -1524,7 +1526,7 @@ void AutomationEditor::paintEvent(QPaintEvent * pe )
int AutomationEditor::xCoordOfTick(int tick )
{
return VALUES_WIDTH + ( ( tick - m_currentPosition )
- * m_ppt / MidiTime::ticksPerTact() );
+ * m_ppb / MidiTime::ticksPerBar() );
}
@@ -1685,11 +1687,11 @@ void AutomationEditor::wheelEvent(QWheelEvent * we )
}
x = qBound( 0, x, m_zoomingXModel.size() - 1 );
- int mouseX = (we->x() - VALUES_WIDTH)* MidiTime::ticksPerTact();
+ int mouseX = (we->x() - VALUES_WIDTH)* MidiTime::ticksPerBar();
// ticks based on the mouse x-position where the scroll wheel was used
- int ticks = mouseX / m_ppt;
+ int ticks = mouseX / m_ppb;
// what would be the ticks in the new zoom level on the very same mouse x
- int newTicks = mouseX / (DEFAULT_PPT * m_zoomXLevels[x]);
+ int newTicks = mouseX / (DEFAULT_PPB * m_zoomXLevels[x]);
// scroll so the tick "selected" by the mouse x doesn't move on the screen
m_leftRightScroll->setValue(m_leftRightScroll->value() + ticks - newTicks);
@@ -1956,7 +1958,7 @@ void AutomationEditor::getSelectedValues( timeMap & selected_values )
++it )
{
//TODO: Add constant
- tick_t len_ticks = MidiTime::ticksPerTact() / 16;
+ tick_t len_ticks = MidiTime::ticksPerBar() / 16;
float level = it.value();
tick_t pos_ticks = it.key();
@@ -2093,17 +2095,17 @@ void AutomationEditor::updatePosition(const MidiTime & t )
m_scrollBack == true )
{
const int w = width() - VALUES_WIDTH;
- if( t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt )
+ if( t > m_currentPosition + w * MidiTime::ticksPerBar() / m_ppb )
{
- m_leftRightScroll->setValue( t.getTact() *
- MidiTime::ticksPerTact() );
+ m_leftRightScroll->setValue( t.getBar() *
+ MidiTime::ticksPerBar() );
}
else if( t < m_currentPosition )
{
- MidiTime t_ = qMax( t - w * MidiTime::ticksPerTact() *
- MidiTime::ticksPerTact() / m_ppt, 0 );
- m_leftRightScroll->setValue( t_.getTact() *
- MidiTime::ticksPerTact() );
+ MidiTime t_ = qMax( t - w * MidiTime::ticksPerBar() *
+ MidiTime::ticksPerBar() / m_ppb, 0 );
+ m_leftRightScroll->setValue( t_.getBar() *
+ MidiTime::ticksPerBar() );
}
m_scrollBack = false;
}
@@ -2114,11 +2116,11 @@ void AutomationEditor::updatePosition(const MidiTime & t )
void AutomationEditor::zoomingXChanged()
{
- m_ppt = m_zoomXLevels[m_zoomingXModel.value()] * DEFAULT_PPT;
+ m_ppb = m_zoomXLevels[m_zoomingXModel.value()] * DEFAULT_PPB;
- assert( m_ppt > 0 );
+ assert( m_ppb > 0 );
- m_timeLine->setPixelsPerTact( m_ppt );
+ m_timeLine->setPixelsPerBar( m_ppb );
update();
}
@@ -2157,9 +2159,9 @@ void AutomationEditor::setQuantization()
}
else
{
- quantization = DefaultTicksPerTact;
+ quantization = DefaultTicksPerBar;
}
- quantization = DefaultTicksPerTact / quantization;
+ quantization = DefaultTicksPerBar / quantization;
AutomationPattern::setQuantization( quantization );
update();
@@ -2516,6 +2518,11 @@ void AutomationEditorWindow::clearCurrentPattern()
setCurrentPattern(nullptr);
}
+void AutomationEditorWindow::focusInEvent(QFocusEvent * event)
+{
+ m_editor->setFocus( event->reason() );
+}
+
void AutomationEditorWindow::play()
{
m_editor->play();
diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp
index 5edc5d47c84..3b42bd9b267 100644
--- a/src/gui/editors/PianoRoll.cpp
+++ b/src/gui/editors/PianoRoll.cpp
@@ -24,6 +24,8 @@
*
*/
+#include "PianoRoll.h"
+
#include
#include
#include
@@ -34,7 +36,6 @@
#include
#include
#include
-#include
#ifndef __USE_XOPEN
#define __USE_XOPEN
@@ -46,7 +47,6 @@
#include "AutomationEditor.h"
#include "ActionGroup.h"
#include "ConfigManager.h"
-#include "PianoRoll.h"
#include "BBTrackContainer.h"
#include "Clipboard.h"
#include "ComboBox.h"
@@ -139,7 +139,7 @@ PianoRoll::PianoRollKeyTypes PianoRoll::prKeyOrder[] =
} ;
-const int DEFAULT_PR_PPT = KEY_LINE_HEIGHT * DefaultStepsPerTact;
+const int DEFAULT_PR_PPB = KEY_LINE_HEIGHT * DefaultStepsPerBar;
const QVector PianoRoll::m_zoomLevels =
{ 0.125f, 0.25f, 0.5f, 1.0f, 2.0f, 4.0f, 8.0f };
@@ -168,8 +168,8 @@ PianoRoll::PianoRoll() :
m_lastMouseY( 0 ),
m_oldNotesEditHeight( 100 ),
m_notesEditHeight( 100 ),
- m_ppt( DEFAULT_PR_PPT ),
- m_lenOfNewNotes( MidiTime( 0, DefaultTicksPerTact/4 ) ),
+ m_ppb( DEFAULT_PR_PPB ),
+ m_lenOfNewNotes( MidiTime( 0, DefaultTicksPerBar/4 ) ),
m_lastNoteVolume( DefaultVolume ),
m_lastNotePanning( DefaultPanning ),
m_startKey( INITIAL_START_KEY ),
@@ -178,7 +178,7 @@ PianoRoll::PianoRoll() :
m_ctrlMode( ModeDraw ),
m_mouseDownRight( false ),
m_scrollBack( false ),
- m_stepRecorderWidget(this, DEFAULT_PR_PPT, PR_TOP_MARGIN, PR_BOTTOM_MARGIN + m_notesEditHeight, WHITE_KEY_WIDTH, 0),
+ m_stepRecorderWidget(this, DEFAULT_PR_PPB, PR_TOP_MARGIN, PR_BOTTOM_MARGIN + m_notesEditHeight, WHITE_KEY_WIDTH, 0),
m_stepRecorder(*this, m_stepRecorderWidget),
m_barLineColor( 0, 0, 0 ),
m_beatLineColor( 0, 0, 0 ),
@@ -203,20 +203,15 @@ PianoRoll::PianoRoll() :
m_nemStr.push_back( tr( "Note Velocity" ) );
m_nemStr.push_back( tr( "Note Panning" ) );
- QSignalMapper * signalMapper = new QSignalMapper( this );
m_noteEditMenu = new QMenu( this );
m_noteEditMenu->clear();
for( int i = 0; i < m_nemStr.size(); ++i )
{
QAction * act = new QAction( m_nemStr.at(i), this );
- connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- signalMapper->setMapping( act, i );
+ connect( act, &QAction::triggered, [this, i](){ changeNoteEditMode(i); } );
m_noteEditMenu->addAction( act );
}
- connect( signalMapper, SIGNAL(mapped(int)),
- this, SLOT(changeNoteEditMode(int)) );
- signalMapper = new QSignalMapper( this );
m_semiToneMarkerMenu = new QMenu( this );
QAction* markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this );
@@ -226,19 +221,12 @@ PianoRoll::PianoRoll() :
QAction* unmarkAllAction = new QAction( tr("Unmark all"), this );
QAction* copyAllNotesAction = new QAction( tr("Select all notes on this key"), this);
- connect( markSemitoneAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- connect( markAllOctaveSemitonesAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- connect( markScaleAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- connect( markChordAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- connect( unmarkAllAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
- connect( copyAllNotesAction, SIGNAL(triggered()), signalMapper, SLOT(map()) );
-
- signalMapper->setMapping( markSemitoneAction, static_cast( stmaMarkCurrentSemiTone ) );
- signalMapper->setMapping( markAllOctaveSemitonesAction, static_cast( stmaMarkAllOctaveSemiTones ) );
- signalMapper->setMapping( markScaleAction, static_cast( stmaMarkCurrentScale ) );
- signalMapper->setMapping( markChordAction, static_cast( stmaMarkCurrentChord ) );
- signalMapper->setMapping( unmarkAllAction, static_cast( stmaUnmarkAll ) );
- signalMapper->setMapping( copyAllNotesAction, static_cast( stmaCopyAllNotesOnKey ) );
+ connect( markSemitoneAction, &QAction::triggered, [this](){ markSemiTone(stmaMarkCurrentSemiTone); });
+ connect( markAllOctaveSemitonesAction, &QAction::triggered, [this](){ markSemiTone(stmaMarkAllOctaveSemiTones); });
+ connect( markScaleAction, &QAction::triggered, [this](){ markSemiTone(stmaMarkCurrentScale); });
+ connect( markChordAction, &QAction::triggered, [this](){ markSemiTone(stmaMarkCurrentChord); });
+ connect( unmarkAllAction, &QAction::triggered, [this](){ markSemiTone(stmaUnmarkAll); });
+ connect( copyAllNotesAction, &QAction::triggered, [this](){ markSemiTone(stmaCopyAllNotesOnKey); });
markScaleAction->setEnabled( false );
markChordAction->setEnabled( false );
@@ -246,8 +234,6 @@ PianoRoll::PianoRoll() :
connect( this, SIGNAL(semiToneMarkerMenuScaleSetEnabled(bool)), markScaleAction, SLOT(setEnabled(bool)) );
connect( this, SIGNAL(semiToneMarkerMenuChordSetEnabled(bool)), markChordAction, SLOT(setEnabled(bool)) );
- connect( signalMapper, SIGNAL(mapped(int)), this, SLOT(markSemiTone(int)) );
-
m_semiToneMarkerMenu->addAction( markSemitoneAction );
m_semiToneMarkerMenu->addAction( markAllOctaveSemitonesAction );
m_semiToneMarkerMenu->addAction( markScaleAction );
@@ -316,7 +302,7 @@ PianoRoll::PianoRoll() :
setAttribute( Qt::WA_OpaquePaintEvent, true );
// add time-line
- m_timeLine = new TimeLineWidget( WHITE_KEY_WIDTH, 0, m_ppt,
+ m_timeLine = new TimeLineWidget( WHITE_KEY_WIDTH, 0, m_ppb,
Engine::getSong()->getPlayPos(
Song::Mode_PlayPattern ),
m_currentPosition,
@@ -549,7 +535,10 @@ void PianoRoll::markSemiTone( int i )
for (int ix = 0; ix < aok.size(); ++ix)
{
i = std::find(m_markedSemiTones.begin(), m_markedSemiTones.end(), aok.at(ix));
- m_markedSemiTones.erase(i);
+ if (i != m_markedSemiTones.end())
+ {
+ m_markedSemiTones.erase(i);
+ }
}
}
else
@@ -655,6 +644,32 @@ void PianoRoll::clearGhostPattern()
}
+void PianoRoll::loadMarkedSemiTones(const QDomElement & de)
+{
+ // clear marked semitones to prevent leftover marks
+ m_markedSemiTones.clear();
+ if (de.isElement())
+ {
+ QDomNode node = de.firstChild();
+ while (!node.isNull())
+ {
+ bool ok;
+ int key = node.toElement().attribute(
+ QString("key"), QString("-1")).toInt(&ok, 10);
+ if (ok && key >= 0)
+ {
+ m_markedSemiTones.append(key);
+ }
+ node = node.nextSibling();
+ }
+ }
+ // from markSemiTone, required otherwise marks will not show
+ std::sort(m_markedSemiTones.begin(), m_markedSemiTones.end(), std::greater());
+ QList::iterator new_end = std::unique(m_markedSemiTones.begin(), m_markedSemiTones.end());
+ m_markedSemiTones.erase(new_end, m_markedSemiTones.end());
+}
+
+
void PianoRoll::setCurrentPattern( Pattern* newPattern )
{
if( hasValidPattern() )
@@ -744,28 +759,28 @@ void PianoRoll::selectRegionFromPixels( int xStart, int xEnd )
xEnd -= WHITE_KEY_WIDTH;
// select an area of notes
- int pos_ticks = xStart * MidiTime::ticksPerTact() / m_ppt +
+ int posTicks = xStart * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
- int key_num = 0;
- m_selectStartTick = pos_ticks;
+ int keyNum = 0;
+ m_selectStartTick = posTicks;
m_selectedTick = 0;
- m_selectStartKey = key_num;
+ m_selectStartKey = keyNum;
m_selectedKeys = 1;
// change size of selection
// get tick in which the cursor is posated
- pos_ticks = xEnd * MidiTime::ticksPerTact() / m_ppt +
+ posTicks = xEnd * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
- key_num = 120;
+ keyNum = 120;
- m_selectedTick = pos_ticks - m_selectStartTick;
+ m_selectedTick = posTicks - m_selectStartTick;
if( (int) m_selectStartTick + m_selectedTick < 0 )
{
m_selectedTick = -static_cast(
m_selectStartTick );
}
- m_selectedKeys = key_num - m_selectStartKey;
- if( key_num <= m_selectStartKey )
+ m_selectedKeys = keyNum - m_selectStartKey;
+ if( keyNum <= m_selectStartKey )
{
--m_selectedKeys;
}
@@ -1018,7 +1033,7 @@ void PianoRoll::drawDetuningInfo( QPainter & _p, const Note * _n, int _x,
for( timeMap::ConstIterator it = map.begin(); it != map.end(); ++it )
{
int pos_ticks = it.key();
- int pos_x = _x + pos_ticks * m_ppt / MidiTime::ticksPerTact();
+ int pos_x = _x + pos_ticks * m_ppb / MidiTime::ticksPerBar();
const float level = it.value();
@@ -1253,7 +1268,7 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke)
// Move selected notes by one bar to the left
if (hasValidPattern())
{
- shiftPos( direction * MidiTime::ticksPerTact() );
+ shiftPos( direction * MidiTime::ticksPerBar() );
}
}
else if( ke->modifiers() & Qt::ShiftModifier && m_action == ActionNone)
@@ -1557,7 +1572,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me )
x -= WHITE_KEY_WIDTH;
// get tick in which the user clicked
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
@@ -1587,7 +1602,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me )
||
( edit_note &&
pos_ticks <= note->pos() +
- NOTE_EDIT_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt )
+ NOTE_EDIT_LINE_WIDTH * MidiTime::ticksPerBar() / m_ppb )
)
)
{
@@ -1731,8 +1746,8 @@ void PianoRoll::mousePressEvent(QMouseEvent * me )
// clicked at the "tail" of the note?
- if( pos_ticks * m_ppt / MidiTime::ticksPerTact() >
- m_currentNote->endPos() * m_ppt / MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH
+ if( pos_ticks * m_ppb / MidiTime::ticksPerBar() >
+ m_currentNote->endPos() * m_ppb / MidiTime::ticksPerBar() - RESIZE_AREA_WIDTH
&& m_currentNote->length() > 0 )
{
m_pattern->addJournalCheckPoint();
@@ -1887,10 +1902,10 @@ void PianoRoll::mouseDoubleClickEvent(QMouseEvent * me )
int pixel_range = 4;
int x = me->x() - WHITE_KEY_WIDTH;
const int ticks_start = ( x-pixel_range/2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
const int ticks_end = ( x+pixel_range/2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
- const int ticks_middle = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
+ const int ticks_middle = x * MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
// go through notes to figure out which one we want to change
bool altPressed = me->modifiers() & Qt::AltModifier;
@@ -1933,6 +1948,10 @@ void PianoRoll::mouseDoubleClickEvent(QMouseEvent * me )
enterValue( &nv );
}
}
+ else
+ {
+ QWidget::mouseDoubleClickEvent(me);
+ }
}
@@ -2285,9 +2304,9 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
// convert to ticks so that we can check which notes
// are in the range
int ticks_start = ( x-pixel_range/2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
int ticks_end = ( x+pixel_range/2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
// get note-vector of current pattern
const NoteVector & notes = m_pattern->notes();
@@ -2383,8 +2402,8 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
// set move- or resize-cursor
// get tick in which the cursor is posated
- int pos_ticks = ( x * MidiTime::ticksPerTact() ) /
- m_ppt + m_currentPosition;
+ int pos_ticks = ( x * MidiTime::ticksPerBar() ) /
+ m_ppb + m_currentPosition;
// get note-vector of current pattern
const NoteVector & notes = m_pattern->notes();
@@ -2416,7 +2435,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
Note *note = *it;
// x coordinate of the right edge of the note
int noteRightX = ( note->pos() + note->length() -
- m_currentPosition) * m_ppt/MidiTime::ticksPerTact();
+ m_currentPosition) * m_ppb/MidiTime::ticksPerBar();
// cursor at the "tail" of the note?
bool atTail = note->length() > 0 && x > noteRightX -
RESIZE_AREA_WIDTH;
@@ -2455,7 +2474,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
// change size of selection
// get tick in which the cursor is posated
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
m_selectedTick = pos_ticks - m_selectStartTick;
@@ -2477,7 +2496,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
// any key if in erase mode
// get tick in which the user clicked
- int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar() / m_ppb +
m_currentPosition;
@@ -2508,8 +2527,8 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
( edit_note &&
pos_ticks <= note->pos() +
NOTE_EDIT_LINE_WIDTH *
- MidiTime::ticksPerTact() /
- m_ppt )
+ MidiTime::ticksPerBar() /
+ m_ppb )
)
)
{
@@ -2558,7 +2577,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me )
}
// get tick in which the cursor is posated
- int pos_ticks = x * MidiTime::ticksPerTact()/ m_ppt +
+ int pos_ticks = x * MidiTime::ticksPerBar()/ m_ppb +
m_currentPosition;
m_selectedTick = pos_ticks -
@@ -2619,7 +2638,7 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift, bool ctrl )
// convert pixels to ticks and keys
int off_x = x - m_moveStartX;
- int off_ticks = off_x * MidiTime::ticksPerTact() / m_ppt;
+ int off_ticks = off_x * MidiTime::ticksPerBar() / m_ppb;
int off_key = getKey( y ) - getKey( m_moveStartY );
// handle scroll changes while dragging
@@ -2803,10 +2822,10 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift, bool ctrl )
Engine::getSong()->setModified();
}
-int PianoRoll::xCoordOfTick(int tick )
+int PianoRoll::xCoordOfTick( int tick )
{
return WHITE_KEY_WIDTH + ( ( tick - m_currentPosition )
- * m_ppt / MidiTime::ticksPerTact() );
+ * m_ppb / MidiTime::ticksPerBar() );
}
void PianoRoll::paintEvent(QPaintEvent * pe )
@@ -3103,20 +3122,20 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
/ static_cast( Engine::getSong()->getTimeSigModel().getDenominator() );
float zoomFactor = m_zoomLevels[m_zoomingModel.value()];
//the bars which disappears at the left side by scrolling
- int leftBars = m_currentPosition * zoomFactor / MidiTime::ticksPerTact();
+ int leftBars = m_currentPosition * zoomFactor / MidiTime::ticksPerBar();
//iterates the visible bars and draw the shading on uneven bars
- for( int x = WHITE_KEY_WIDTH, barCount = leftBars; x < width() + m_currentPosition * zoomFactor / timeSignature; x += m_ppt, ++barCount )
+ for( int x = WHITE_KEY_WIDTH, barCount = leftBars; x < width() + m_currentPosition * zoomFactor / timeSignature; x += m_ppb, ++barCount )
{
if( ( barCount + leftBars ) % 2 != 0 )
{
- p.fillRect( x - m_currentPosition * zoomFactor / timeSignature, PR_TOP_MARGIN, m_ppt,
+ p.fillRect( x - m_currentPosition * zoomFactor / timeSignature, PR_TOP_MARGIN, m_ppb,
height() - ( PR_BOTTOM_MARGIN + PR_TOP_MARGIN ), backgroundShade() );
}
}
// Draw the vertical beat lines
- int ticksPerBeat = DefaultTicksPerTact /
+ int ticksPerBeat = DefaultTicksPerBar /
Engine::getSong()->getTimeSigModel().getDenominator();
for( tick = m_currentPosition - m_currentPosition % ticksPerBeat,
@@ -3128,9 +3147,9 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
}
// Draw the vertical bar lines
- for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerTact(),
+ for( tick = m_currentPosition - m_currentPosition % MidiTime::ticksPerBar(),
x = xCoordOfTick( tick ); x <= width();
- tick += MidiTime::ticksPerTact(), x = xCoordOfTick( tick ) )
+ tick += MidiTime::ticksPerBar(), x = xCoordOfTick( tick ) )
{
p.setPen( barLineColor() );
p.drawLine( x, PR_TOP_MARGIN, x, height() - PR_BOTTOM_MARGIN );
@@ -3202,9 +3221,9 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
int pos_ticks = note->pos();
- int note_width = len_ticks * m_ppt / MidiTime::ticksPerTact();
+ int note_width = len_ticks * m_ppb / MidiTime::ticksPerBar();
const int x = ( pos_ticks - m_currentPosition ) *
- m_ppt / MidiTime::ticksPerTact();
+ m_ppb / MidiTime::ticksPerBar();
// skip this note if not in visible area at all
if( !( x + note_width >= 0 && x <= width() - WHITE_KEY_WIDTH ) )
{
@@ -3244,9 +3263,9 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
int pos_ticks = note->pos();
- int note_width = len_ticks * m_ppt / MidiTime::ticksPerTact();
+ int note_width = len_ticks * m_ppb / MidiTime::ticksPerBar();
const int x = ( pos_ticks - m_currentPosition ) *
- m_ppt / MidiTime::ticksPerTact();
+ m_ppb / MidiTime::ticksPerBar();
// skip this note if not in visible area at all
if( !( x + note_width >= 0 && x <= width() - WHITE_KEY_WIDTH ) )
{
@@ -3332,9 +3351,9 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
int pos_ticks = note->pos();
- int note_width = len_ticks * m_ppt / MidiTime::ticksPerTact();
+ int note_width = len_ticks * m_ppb / MidiTime::ticksPerBar();
const int x = ( pos_ticks - m_currentPosition ) *
- m_ppt / MidiTime::ticksPerTact();
+ m_ppb / MidiTime::ticksPerBar();
// skip this note if not in visible area at all
if( !( x + note_width >= 0 && x <= width() - WHITE_KEY_WIDTH ) )
{
@@ -3374,10 +3393,10 @@ void PianoRoll::paintEvent(QPaintEvent * pe )
m_notesEditHeight - PR_BOTTOM_MARGIN );
// now draw selection-frame
- int x = ( ( sel_pos_start - m_currentPosition ) * m_ppt ) /
- MidiTime::ticksPerTact();
- int w = ( ( ( sel_pos_end - m_currentPosition ) * m_ppt ) /
- MidiTime::ticksPerTact() ) - x;
+ int x = ( ( sel_pos_start - m_currentPosition ) * m_ppb ) /
+ MidiTime::ticksPerBar();
+ int w = ( ( ( sel_pos_end - m_currentPosition ) * m_ppb ) /
+ MidiTime::ticksPerBar() ) - x;
int y = (int) y_base - sel_key_start * KEY_LINE_HEIGHT;
int h = (int) y_base - sel_key_end * KEY_LINE_HEIGHT - y;
p.setPen( selectedNoteColor() );
@@ -3493,9 +3512,9 @@ void PianoRoll::wheelEvent(QWheelEvent * we )
int pixel_range = 8;
int x = we->x() - WHITE_KEY_WIDTH;
int ticks_start = ( x - pixel_range / 2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
int ticks_end = ( x + pixel_range / 2 ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
// When alt is pressed we only edit the note under the cursor
bool altPressed = we->modifiers() & Qt::AltModifier;
@@ -3596,11 +3615,11 @@ void PianoRoll::wheelEvent(QWheelEvent * we )
}
z = qBound( 0, z, m_zoomingModel.size() - 1 );
- int x = (we->x() - WHITE_KEY_WIDTH)* MidiTime::ticksPerTact();
+ int x = (we->x() - WHITE_KEY_WIDTH)* MidiTime::ticksPerBar();
// ticks based on the mouse x-position where the scroll wheel was used
- int ticks = x / m_ppt;
+ int ticks = x / m_ppb;
// what would be the ticks in the new zoom level on the very same mouse x
- int newTicks = x / (DEFAULT_PR_PPT * m_zoomLevels[z]);
+ int newTicks = x / (DEFAULT_PR_PPB * m_zoomLevels[z]);
// scroll so the tick "selected" by the mouse x doesn't move on the screen
m_leftRightScroll->setValue(m_leftRightScroll->value() + ticks - newTicks);
// update combobox with zooming-factor
@@ -4024,7 +4043,7 @@ void PianoRoll::copyToClipboard( const NoteVector & notes ) const
QDomElement note_list = dataFile.createElement( "note-list" );
dataFile.content().appendChild( note_list );
- MidiTime start_pos( notes.front()->pos().getTact(), 0 );
+ MidiTime start_pos( notes.front()->pos().getBar(), 0 );
for( const Note *note : notes )
{
Note clip_note( *note );
@@ -4065,6 +4084,8 @@ void PianoRoll::cutSelectedNotes()
if( ! selected_notes.empty() )
{
+ m_pattern->addJournalCheckPoint();
+
copyToClipboard( selected_notes );
Engine::getSong()->setModified();
@@ -4183,15 +4204,15 @@ void PianoRoll::deleteSelectedNotes()
void PianoRoll::autoScroll( const MidiTime & t )
{
const int w = width() - WHITE_KEY_WIDTH;
- if( t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt )
+ if( t > m_currentPosition + w * MidiTime::ticksPerBar() / m_ppb )
{
- m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() );
+ m_leftRightScroll->setValue( t.getBar() * MidiTime::ticksPerBar() );
}
else if( t < m_currentPosition )
{
- MidiTime t2 = qMax( t - w * MidiTime::ticksPerTact() *
- MidiTime::ticksPerTact() / m_ppt, (tick_t) 0 );
- m_leftRightScroll->setValue( t2.getTact() * MidiTime::ticksPerTact() );
+ MidiTime t2 = qMax( t - w * MidiTime::ticksPerBar() *
+ MidiTime::ticksPerBar() / m_ppb, (tick_t) 0 );
+ m_leftRightScroll->setValue( t2.getBar() * MidiTime::ticksPerBar() );
}
m_scrollBack = false;
}
@@ -4245,12 +4266,12 @@ void PianoRoll::updatePositionStepRecording( const MidiTime & t )
void PianoRoll::zoomingChanged()
{
- m_ppt = m_zoomLevels[m_zoomingModel.value()] * DEFAULT_PR_PPT;
+ m_ppb = m_zoomLevels[m_zoomingModel.value()] * DEFAULT_PR_PPB;
- assert( m_ppt > 0 );
+ assert( m_ppb > 0 );
- m_timeLine->setPixelsPerTact( m_ppt );
- m_stepRecorderWidget.setPixelsPerTact( m_ppt );
+ m_timeLine->setPixelsPerBar( m_ppb );
+ m_stepRecorderWidget.setPixelsPerBar( m_ppb );
update();
}
@@ -4280,12 +4301,12 @@ int PianoRoll::quantization() const
}
else
{
- return DefaultTicksPerTact / 16;
+ return DefaultTicksPerBar / 16;
}
}
QString text = m_quantizeModel.currentText();
- return DefaultTicksPerTact / text.right( text.length() - 2 ).toInt();
+ return DefaultTicksPerBar / text.right( text.length() - 2 ).toInt();
}
@@ -4353,7 +4374,7 @@ MidiTime PianoRoll::newNoteLen() const
}
QString text = m_noteLenModel.currentText();
- return DefaultTicksPerTact / text.right( text.length() - 2 ).toInt();
+ return DefaultTicksPerBar / text.right( text.length() - 2 ).toInt();
}
@@ -4381,7 +4402,7 @@ Note * PianoRoll::noteUnderMouse()
int key_num = getKey( pos.y() );
int pos_ticks = ( pos.x() - WHITE_KEY_WIDTH ) *
- MidiTime::ticksPerTact() / m_ppt + m_currentPosition;
+ MidiTime::ticksPerBar() / m_ppb + m_currentPosition;
// loop through whole note-vector...
for( Note* const& note : m_pattern->notes() )
@@ -4697,6 +4718,18 @@ void PianoRollWindow::saveSettings( QDomDocument & doc, QDomElement & de )
de.appendChild( ghostNotesRoot );
}
+ if (m_editor->m_markedSemiTones.length() > 0)
+ {
+ QDomElement markedSemiTonesRoot = doc.createElement("markedSemiTones");
+ for (int ix = 0; ix < m_editor->m_markedSemiTones.size(); ++ix)
+ {
+ QDomElement semiToneNode = doc.createElement("semiTone");
+ semiToneNode.setAttribute("key", m_editor->m_markedSemiTones.at(ix));
+ markedSemiTonesRoot.appendChild(semiToneNode);
+ }
+ de.appendChild(markedSemiTonesRoot);
+ }
+
MainWindow::saveWidgetState( this, de );
}
@@ -4706,6 +4739,7 @@ void PianoRollWindow::saveSettings( QDomDocument & doc, QDomElement & de )
void PianoRollWindow::loadSettings( const QDomElement & de )
{
m_editor->loadGhostNotes( de.firstChildElement("ghostnotes") );
+ m_editor->loadMarkedSemiTones(de.firstChildElement("markedSemiTones"));
MainWindow::restoreWidgetState( this, de );
}
diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp
index 6e23fcdbef7..2c2485d00ed 100644
--- a/src/gui/editors/SongEditor.cpp
+++ b/src/gui/editors/SongEditor.cpp
@@ -50,7 +50,7 @@
#include "TimeDisplayWidget.h"
#include "AudioDevice.h"
#include "PianoRoll.h"
-
+#include "Track.h"
positionLine::positionLine( QWidget * parent ) :
QWidget( parent )
@@ -80,17 +80,22 @@ SongEditor::SongEditor( Song * song ) :
m_proportionalSnap( false ),
m_scrollBack( false ),
m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ),
- m_mode(DrawMode)
+ m_mode(DrawMode),
+ m_origin(),
+ m_scrollPos(),
+ m_mousePos(),
+ m_rubberBandStartTrackview(0),
+ m_rubberbandStartMidipos(0),
+ m_currentZoomingValue(m_zoomingModel->value()),
+ m_trackHeadWidth(ConfigManager::inst()->value("ui", "compacttrackbuttons").toInt()==1
+ ? DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT + TRACK_OP_WIDTH_COMPACT
+ : DEFAULT_SETTINGS_WIDGET_WIDTH + TRACK_OP_WIDTH),
+ m_selectRegion(false)
{
m_zoomingModel->setParent(this);
m_snappingModel->setParent(this);
- // create time-line
- m_widgetWidthTotal = ConfigManager::inst()->value( "ui",
- "compacttrackbuttons" ).toInt()==1 ?
- DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT + TRACK_OP_WIDTH_COMPACT :
- DEFAULT_SETTINGS_WIDGET_WIDTH + TRACK_OP_WIDTH;
- m_timeLine = new TimeLineWidget( m_widgetWidthTotal, 32,
- pixelsPerTact(),
+ m_timeLine = new TimeLineWidget( m_trackHeadWidth, 32,
+ pixelsPerBar(),
m_song->m_playPos[Song::Mode_PlaySong],
m_currentPosition,
Song::Mode_PlaySong, this );
@@ -232,6 +237,10 @@ SongEditor::SongEditor( Song * song ) :
this, SLOT( scrolled( int ) ) );
connect( m_song, SIGNAL( lengthChanged( int ) ),
this, SLOT( updateScrollBar( int ) ) );
+ connect(m_leftRightScroll, SIGNAL(valueChanged(int)),this, SLOT(updateRubberband()));
+ connect(contentWidget()->verticalScrollBar(), SIGNAL(valueChanged(int)),this, SLOT(updateRubberband()));
+ connect(m_timeLine, SIGNAL(selectionFinished()), this, SLOT(stopSelectRegion()));
+
//Set up zooming model
for( float const & zoomLevel : m_zoomLevels )
@@ -346,6 +355,99 @@ void SongEditor::scrolled( int new_pos )
+void SongEditor::selectRegionFromPixels(int xStart, int xEnd)
+{
+ if (!m_selectRegion)
+ {
+ m_selectRegion = true;
+
+ //deselect all tcos
+ for (auto &it : findChildren()) { it->setSelected(false); }
+
+ rubberBand()->setEnabled(true);
+ rubberBand()->show();
+
+ //we save the position of scrollbars, mouse position and zooming level
+ m_origin = QPoint(xStart, 0);
+ m_scrollPos = QPoint(m_leftRightScroll->value(), contentWidget()->verticalScrollBar()->value());
+ m_currentZoomingValue = zoomingModel()->value();
+
+ //calculate the song position where the mouse was clicked
+ m_rubberbandStartMidipos = MidiTime((xStart - m_trackHeadWidth)
+ / pixelsPerBar() * MidiTime::ticksPerBar())
+ + m_currentPosition;
+ m_rubberBandStartTrackview = 0;
+ }
+ //the current mouse position within the borders of song editor
+ m_mousePos = QPoint(qMax(m_trackHeadWidth, qMin(xEnd, width()))
+ , std::numeric_limits::max());
+ updateRubberband();
+}
+
+
+
+
+void SongEditor::stopSelectRegion()
+{
+ m_selectRegion = false;
+}
+
+
+
+
+void SongEditor::updateRubberband()
+{
+ if (rubberBandActive())
+ {
+ int originX = m_origin.x();
+
+ //take care of the zooming
+ if (m_currentZoomingValue != m_zoomingModel->value())
+ {
+ originX = m_trackHeadWidth + (originX - m_trackHeadWidth)
+ * m_zoomLevels[m_zoomingModel->value()] / m_zoomLevels[m_currentZoomingValue];
+ }
+
+ //take care of the scrollbar position
+ int hs = (m_leftRightScroll->value() - m_scrollPos.x()) * pixelsPerBar();
+ int vs = contentWidget()->verticalScrollBar()->value() - m_scrollPos.y();
+
+ //the adjusted origin point
+ QPoint origin = QPoint(qMax(originX - hs, m_trackHeadWidth), m_origin.y() - vs);
+
+ //paint the rubber band rect
+ rubberBand()->setGeometry(QRect(origin,
+ contentWidget()->mapFromParent(QPoint(m_mousePos.x(), m_mousePos.y()))
+ ).normalized());
+
+ //the index of the TrackView the mouse is hover
+ int rubberBandTrackview = trackIndexFromSelectionPoint(m_mousePos.y());
+
+ //the miditime the mouse is hover
+ MidiTime rubberbandMidipos = MidiTime((qMin(m_mousePos.x(), width()) - m_trackHeadWidth)
+ / pixelsPerBar() * MidiTime::ticksPerBar())
+ + m_currentPosition;
+
+ //are tcos in the rect of selection?
+ for (auto &it : findChildren())
+ {
+ TrackContentObjectView * tco = dynamic_cast(it);
+ if (tco)
+ {
+ auto indexOfTrackView = trackViews().indexOf(tco->getTrackView());
+ bool isBeetweenRubberbandViews = indexOfTrackView >= qMin(m_rubberBandStartTrackview, rubberBandTrackview)
+ && indexOfTrackView <= qMax(m_rubberBandStartTrackview, rubberBandTrackview);
+ bool isBeetweenRubberbandMidiPos = tco->getTrackContentObject()->endPosition() >= qMin(m_rubberbandStartMidipos, rubberbandMidipos)
+ && tco->getTrackContentObject()->startPosition() <= qMax(m_rubberbandStartMidipos, rubberbandMidipos);
+ it->setSelected(isBeetweenRubberbandViews && isBeetweenRubberbandMidiPos);
+ }
+ }
+ }
+}
+
+
+
+
void SongEditor::setEditMode( EditMode mode )
{
m_mode = mode;
@@ -383,7 +485,7 @@ void SongEditor::keyPressEvent( QKeyEvent * ke )
}
else if( ke->key() == Qt::Key_Left )
{
- tick_t t = m_song->currentTick() - MidiTime::ticksPerTact();
+ tick_t t = m_song->currentTick() - MidiTime::ticksPerBar();
if( t >= 0 )
{
m_song->setPlayPos( t, Song::Mode_PlaySong );
@@ -391,7 +493,7 @@ void SongEditor::keyPressEvent( QKeyEvent * ke )
}
else if( ke->key() == Qt::Key_Right )
{
- tick_t t = m_song->currentTick() + MidiTime::ticksPerTact();
+ tick_t t = m_song->currentTick() + MidiTime::ticksPerBar();
if( t < MaxSongLength )
{
m_song->setPlayPos( t, Song::Mode_PlaySong );
@@ -447,20 +549,20 @@ void SongEditor::wheelEvent( QWheelEvent * we )
z = qBound( 0, z, m_zoomingModel->size() - 1 );
- int x = (we->x() - m_widgetWidthTotal);
- // tact based on the mouse x-position where the scroll wheel was used
- int tact= x / pixelsPerTact();
- // what would be the tact in the new zoom level on the very same mouse x
- int newTact = x / DEFAULT_PIXELS_PER_TACT / m_zoomLevels[z];
- // scroll so the tact "selected" by the mouse x doesn't move on the screen
- m_leftRightScroll->setValue(m_leftRightScroll->value() + tact - newTact);
+ int x = we->x() - m_trackHeadWidth;
+ // bar based on the mouse x-position where the scroll wheel was used
+ int bar = x / pixelsPerBar();
+ // what would be the bar in the new zoom level on the very same mouse x
+ int newBar = x / DEFAULT_PIXELS_PER_BAR / m_zoomLevels[z];
+ // scroll so the bar "selected" by the mouse x doesn't move on the screen
+ m_leftRightScroll->setValue(m_leftRightScroll->value() + bar - newBar);
// update combobox with zooming-factor
m_zoomingModel->setValue( z );
// update timeline
m_song->m_playPos[Song::Mode_PlaySong].m_timeLine->
- setPixelsPerTact( pixelsPerTact() );
+ setPixelsPerBar( pixelsPerBar() );
// and make sure, all TCO's are resized and relocated
realignTracks();
}
@@ -480,7 +582,7 @@ void SongEditor::wheelEvent( QWheelEvent * we )
void SongEditor::closeEvent( QCloseEvent * ce )
- {
+{
if( parentWidget() )
{
parentWidget()->hide();
@@ -490,7 +592,53 @@ void SongEditor::closeEvent( QCloseEvent * ce )
hide();
}
ce->ignore();
- }
+}
+
+
+
+
+void SongEditor::mousePressEvent(QMouseEvent *me)
+{
+ if (allowRubberband())
+ {
+ //we save the position of scrollbars, mouse position and zooming level
+ m_scrollPos = QPoint(m_leftRightScroll->value(), contentWidget()->verticalScrollBar()->value());
+ m_origin = contentWidget()->mapFromParent(QPoint(me->pos().x(), me->pos().y()));
+ m_currentZoomingValue = zoomingModel()->value();
+
+ //paint the rubberband
+ rubberBand()->setEnabled(true);
+ rubberBand()->setGeometry(QRect(m_origin, QSize()));
+ rubberBand()->show();
+
+ //the trackView(index) and the miditime where the mouse was clicked
+ m_rubberBandStartTrackview = trackIndexFromSelectionPoint(me->y());
+ m_rubberbandStartMidipos = MidiTime((me->x() - m_trackHeadWidth)
+ / pixelsPerBar() * MidiTime::ticksPerBar())
+ + m_currentPosition;
+ }
+ QWidget::mousePressEvent(me);
+}
+
+
+
+
+void SongEditor::mouseMoveEvent(QMouseEvent *me)
+{
+ m_mousePos = me->pos();
+ updateRubberband();
+ QWidget::mouseMoveEvent(me);
+}
+
+
+
+
+void SongEditor::mouseReleaseEvent(QMouseEvent *me)
+{
+ rubberBand()->hide();
+ rubberBand()->setEnabled(false);
+ QWidget::mouseReleaseEvent(me);
+}
@@ -643,14 +791,14 @@ void SongEditor::updatePosition( const MidiTime & t )
const int w = width() - widgetWidth
- trackOpWidth
- contentWidget()->verticalScrollBar()->width(); // width of right scrollbar
- if( t > m_currentPosition + w * MidiTime::ticksPerTact() /
- pixelsPerTact() )
+ if( t > m_currentPosition + w * MidiTime::ticksPerBar() /
+ pixelsPerBar() )
{
- animateScroll( m_leftRightScroll, t.getTact(), m_smoothScroll );
+ animateScroll( m_leftRightScroll, t.getBar(), m_smoothScroll );
}
else if( t < m_currentPosition )
{
- animateScroll( m_leftRightScroll, t.getTact(), m_smoothScroll );
+ animateScroll( m_leftRightScroll, t.getBar(), m_smoothScroll );
}
m_scrollBack = false;
}
@@ -683,11 +831,12 @@ void SongEditor::updatePositionLine()
void SongEditor::zoomingChanged()
{
- setPixelsPerTact( m_zoomLevels[m_zoomingModel->value()] * DEFAULT_PIXELS_PER_TACT );
+ setPixelsPerBar( m_zoomLevels[m_zoomingModel->value()] * DEFAULT_PIXELS_PER_BAR );
m_song->m_playPos[Song::Mode_PlaySong].m_timeLine->
- setPixelsPerTact( pixelsPerTact() );
+ setPixelsPerBar( pixelsPerBar() );
realignTracks();
+ updateRubberband();
}
@@ -713,6 +862,26 @@ bool SongEditor::allowRubberband() const
+int SongEditor::trackIndexFromSelectionPoint(int yPos)
+{
+ const TrackView * tv = trackViewAt(yPos - m_timeLine->height());
+ return tv ? indexOfTrackView(tv)
+ : yPos < m_timeLine->height() ? 0
+ : trackViews().count();
+}
+
+
+
+
+int SongEditor::indexOfTrackView(const TrackView *tv)
+{
+ return static_cast(std::distance(trackViews().begin(),
+ std::find(trackViews().begin(), trackViews().end(), tv)));
+}
+
+
+
+
ComboBoxModel *SongEditor::zoomingModel() const
{
return m_zoomingModel;
diff --git a/src/gui/menus/TemplatesMenu.cpp b/src/gui/menus/TemplatesMenu.cpp
index 5fb7402039c..b944b7cf13a 100644
--- a/src/gui/menus/TemplatesMenu.cpp
+++ b/src/gui/menus/TemplatesMenu.cpp
@@ -11,6 +11,8 @@
TemplatesMenu::TemplatesMenu(QWidget *parent) :
QMenu(tr("New from template"), parent)
{
+ setIcon(embed::getIconPixmap("project_new"));
+
connect( this, SIGNAL( aboutToShow() ), SLOT( fillTemplatesMenu() ) );
connect( this, SIGNAL( triggered( QAction * ) ),
SLOT( createNewProjectFromTemplate( QAction * ) ) );
diff --git a/src/gui/widgets/GroupBox.cpp b/src/gui/widgets/GroupBox.cpp
index 158390bb5b5..06b8e1c5c34 100644
--- a/src/gui/widgets/GroupBox.cpp
+++ b/src/gui/widgets/GroupBox.cpp
@@ -90,7 +90,7 @@ void GroupBox::paintEvent( QPaintEvent * pe )
p.fillRect( 0, 0, width() - 1, height() - 1, p.background() );
// outer rect
- p.setPen( p.background().color().dark( 150 ) );
+ p.setPen( p.background().color().darker( 150 ) );
p.drawRect( 0, 0, width() - 1, height() - 1 );
// draw line below titlebar
diff --git a/src/gui/widgets/Rubberband.cpp b/src/gui/widgets/Rubberband.cpp
index 6bf702edcb7..0a4e891b5a9 100644
--- a/src/gui/widgets/Rubberband.cpp
+++ b/src/gui/widgets/Rubberband.cpp
@@ -66,18 +66,6 @@ QVector RubberBand::selectedObjects() const
void RubberBand::resizeEvent( QResizeEvent * _re )
{
QRubberBand::resizeEvent( _re );
- if( isEnabled() )
- {
- QVector so = selectableObjects();
- for( QVector::iterator it = so.begin();
- it != so.end(); ++it )
- {
- ( *it )->setSelected( QRect( pos(), size() ).intersects(
- QRect( ( *it )->mapTo( parentWidget(),
- QPoint() ),
- ( *it )->size() ) ) );
- }
- }
}
diff --git a/src/gui/widgets/SideBar.cpp b/src/gui/widgets/SideBar.cpp
index 01ea5891915..36c417b93c2 100644
--- a/src/gui/widgets/SideBar.cpp
+++ b/src/gui/widgets/SideBar.cpp
@@ -49,7 +49,7 @@ class SideBarButton : public QToolButton
return m_orientation;
}
- virtual QSize sizeHint() const
+ QSize sizeHint() const override
{
QSize s = QToolButton::sizeHint();
s.setWidth( s.width() + 8 );
@@ -62,7 +62,7 @@ class SideBarButton : public QToolButton
protected:
- virtual void paintEvent( QPaintEvent * )
+ void paintEvent( QPaintEvent * ) override
{
QStylePainter p( this );
QStyleOptionToolButton opt;
@@ -121,6 +121,9 @@ void SideBar::appendTab( SideBarWidget *widget )
widget->setMinimumWidth( 200 );
ToolTip::add( button, widget->title() );
+
+ connect(widget, &SideBarWidget::closeButtonClicked,
+ [=]() { button->click(); });
}
diff --git a/src/gui/widgets/SideBarWidget.cpp b/src/gui/widgets/SideBarWidget.cpp
index c1b46cfa635..41647a4fd30 100644
--- a/src/gui/widgets/SideBarWidget.cpp
+++ b/src/gui/widgets/SideBarWidget.cpp
@@ -22,23 +22,31 @@
*
*/
+#include "SideBarWidget.h"
+
#include
#include
#include
-#include "SideBarWidget.h"
+#include "embed.h"
SideBarWidget::SideBarWidget( const QString & _title, const QPixmap & _icon,
QWidget * _parent ) :
QWidget( _parent ),
m_title( _title ),
- m_icon( _icon )
+ m_icon(_icon),
+ m_buttonSize(17, 17)
{
m_contents = new QWidget( this );
m_layout = new QVBoxLayout( m_contents );
m_layout->setSpacing( 5 );
m_layout->setMargin( 0 );
+ m_closeBtn = new QPushButton(embed::getIconPixmap("close"), QString(), this);
+ m_closeBtn->resize(m_buttonSize);
+ m_closeBtn->setToolTip(tr("Close"));
+ connect(m_closeBtn, &QPushButton::clicked,
+ [=]() { this->closeButtonClicked(); });
}
@@ -80,6 +88,7 @@ void SideBarWidget::resizeEvent( QResizeEvent * )
const int MARGIN = 6;
m_contents->setGeometry( MARGIN, 40 + MARGIN, width() - MARGIN * 2,
height() - MARGIN * 2 - 40 );
+ m_closeBtn->move(m_contents->geometry().width() - MARGIN - 5, 5);
}
diff --git a/src/gui/widgets/StepRecorderWidget.cpp b/src/gui/widgets/StepRecorderWidget.cpp
index f59e235fc80..a546c2a2cdc 100644
--- a/src/gui/widgets/StepRecorderWidget.cpp
+++ b/src/gui/widgets/StepRecorderWidget.cpp
@@ -26,7 +26,7 @@
StepRecorderWidget::StepRecorderWidget(
QWidget * parent,
- const int ppt,
+ const int ppb,
const int marginTop,
const int marginBottom,
const int marginLeft,
@@ -42,15 +42,15 @@ StepRecorderWidget::StepRecorderWidget(
m_colorLineStart = baseColor.darker(120);
setAttribute(Qt::WA_NoSystemBackground, true);
- setPixelsPerTact(ppt);
+ setPixelsPerBar(ppb);
m_top = m_marginTop;
m_left = m_marginLeft;
}
-void StepRecorderWidget::setPixelsPerTact(int ppt)
+void StepRecorderWidget::setPixelsPerBar(int ppb)
{
- m_ppt = ppt;
+ m_ppb = ppb;
}
void StepRecorderWidget::setCurrentPosition(MidiTime currentPosition)
@@ -125,7 +125,7 @@ void StepRecorderWidget::paintEvent(QPaintEvent * pe)
int StepRecorderWidget::xCoordOfTick(int tick)
{
- return m_marginLeft + ((tick - m_currentPosition) * m_ppt / MidiTime::ticksPerTact());
+ return m_marginLeft + ((tick - m_currentPosition) * m_ppb / MidiTime::ticksPerBar());
}
diff --git a/src/gui/widgets/TempoSyncKnob.cpp b/src/gui/widgets/TempoSyncKnob.cpp
index 1e2e249f3d5..d769fd831d0 100644
--- a/src/gui/widgets/TempoSyncKnob.cpp
+++ b/src/gui/widgets/TempoSyncKnob.cpp
@@ -291,7 +291,11 @@ void TempoSyncKnob::showCustom()
if( m_custom == NULL )
{
m_custom = new MeterDialog( gui->mainWindow()->workspace() );
- gui->mainWindow()->addWindowedWidget( m_custom );
+ QMdiSubWindow * subWindow = gui->mainWindow()->addWindowedWidget( m_custom );
+ Qt::WindowFlags flags = subWindow->windowFlags();
+ flags &= ~Qt::WindowMaximizeButtonHint;
+ subWindow->setWindowFlags( flags );
+ subWindow->setFixedSize( subWindow->size() );
m_custom->setWindowTitle( "Meter" );
m_custom->setModel( &model()->m_custom );
}
diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp
index e9a831193d7..01604a9dce6 100644
--- a/src/gui/widgets/TimeDisplayWidget.cpp
+++ b/src/gui/widgets/TimeDisplayWidget.cpp
@@ -100,11 +100,11 @@ void TimeDisplayWidget::updateTime()
case BarsTicks:
int tick;
tick = s->getPlayPos().getTicks();
- m_majorLCD.setValue((int)(tick / s->ticksPerTact()) + 1);
- m_minorLCD.setValue((tick % s->ticksPerTact()) /
- (s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1);
- m_milliSecondsLCD.setValue((tick % s->ticksPerTact()) %
- (s->ticksPerTact() / s->getTimeSigModel().getNumerator()));
+ m_majorLCD.setValue((int)(tick / s->ticksPerBar()) + 1);
+ m_minorLCD.setValue((tick % s->ticksPerBar()) /
+ (s->ticksPerBar() / s->getTimeSigModel().getNumerator() ) +1);
+ m_milliSecondsLCD.setValue((tick % s->ticksPerBar()) %
+ (s->ticksPerBar() / s->getTimeSigModel().getNumerator()));
break;
default: break;
diff --git a/src/lmmsconfig.h.in b/src/lmmsconfig.h.in
index 02d07f1e413..3ea9d749c0c 100644
--- a/src/lmmsconfig.h.in
+++ b/src/lmmsconfig.h.in
@@ -3,6 +3,7 @@
#cmakedefine LMMS_BUILD_WIN64
#cmakedefine LMMS_BUILD_APPLE
#cmakedefine LMMS_BUILD_OPENBSD
+#cmakedefine LMMS_BUILD_FREEBSD
#cmakedefine LMMS_BUILD_HAIKU
#cmakedefine LMMS_HOST_X86
diff --git a/src/tracks/AutomationTrack.cpp b/src/tracks/AutomationTrack.cpp
index 11c919f0e42..430f54a5692 100644
--- a/src/tracks/AutomationTrack.cpp
+++ b/src/tracks/AutomationTrack.cpp
@@ -121,9 +121,9 @@ void AutomationTrackView::dropEvent( QDropEvent * _de )
currentPosition() +
( _de->pos().x() -
getTrackContentWidget()->x() ) *
- MidiTime::ticksPerTact() /
- static_cast( trackContainerView()->pixelsPerTact() ) )
- .toAbsoluteTact();
+ MidiTime::ticksPerBar() /
+ static_cast( trackContainerView()->pixelsPerBar() ) )
+ .toAbsoluteBar();
if( pos.getTicks() < 0 )
{
diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp
index 205a22087f8..a779e2ea49b 100644
--- a/src/tracks/BBTrack.cpp
+++ b/src/tracks/BBTrack.cpp
@@ -51,7 +51,7 @@ BBTCO::BBTCO( Track * _track ) :
m_color( 128, 128, 128 ),
m_useStyleColor( true )
{
- tact_t t = Engine::getBBTrackContainer()->lengthOfBB( bbTrackIndex() );
+ bar_t t = Engine::getBBTrackContainer()->lengthOfBB( bbTrackIndex() );
if( t > 0 )
{
saveJournallingState( false );
@@ -218,8 +218,8 @@ void BBTCOView::paintEvent( QPaintEvent * )
: ( m_bbTCO->m_useStyleColor ? painter.background().color()
: m_bbTCO->colorObj() ) );
- lingrad.setColorAt( 0, c.light( 130 ) );
- lingrad.setColorAt( 1, c.light( 70 ) );
+ lingrad.setColorAt( 0, c.lighter( 130 ) );
+ lingrad.setColorAt( 1, c.lighter( 70 ) );
// paint a black rectangle under the pattern to prevent glitches with transparent backgrounds
p.fillRect( rect(), QColor( 0, 0, 0 ) );
@@ -237,12 +237,12 @@ void BBTCOView::paintEvent( QPaintEvent * )
const int lineSize = 3;
p.setPen( c.darker( 200 ) );
- tact_t t = Engine::getBBTrackContainer()->lengthOfBB( m_bbTCO->bbTrackIndex() );
- if( m_bbTCO->length() > MidiTime::ticksPerTact() && t > 0 )
+ bar_t t = Engine::getBBTrackContainer()->lengthOfBB( m_bbTCO->bbTrackIndex() );
+ if( m_bbTCO->length() > MidiTime::ticksPerBar() && t > 0 )
{
- for( int x = static_cast( t * pixelsPerTact() );
+ for( int x = static_cast( t * pixelsPerBar() );
x < width() - 2;
- x += static_cast( t * pixelsPerTact() ) )
+ x += static_cast( t * pixelsPerBar() ) )
{
p.drawLine( x, TCO_BORDER_WIDTH, x, TCO_BORDER_WIDTH + lineSize );
p.drawLine( x, rect().bottom() - ( TCO_BORDER_WIDTH + lineSize ),
diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp
index 730ab97bd1e..b44d1b4fa63 100644
--- a/src/tracks/InstrumentTrack.cpp
+++ b/src/tracks/InstrumentTrack.cpp
@@ -677,7 +677,7 @@ bool InstrumentTrack::play( const MidiTime & _start, const fpp_t _frames,
if( cur_start > 0 )
{
- // skip notes which are posated before start-tact
+ // skip notes which are posated before start-bar
while( nit != notes.end() && ( *nit )->pos() < cur_start )
{
++nit;
@@ -1239,6 +1239,7 @@ void InstrumentTrackView::muteChanged()
+//FIXME: This is identical to SampleTrackView::createFxMenu
QMenu * InstrumentTrackView::createFxMenu(QString title, QString newFxLabel)
{
int channelIndex = model()->effectChannelModel()->value();
@@ -1253,8 +1254,6 @@ QMenu * InstrumentTrackView::createFxMenu(QString title, QString newFxLabel)
QMenu *fxMenu = new QMenu( title );
- QSignalMapper * fxMenuSignalMapper = new QSignalMapper(fxMenu);
-
fxMenu->addAction( newFxLabel, this, SLOT( createFxLine() ) );
fxMenu->addSeparator();
@@ -1264,14 +1263,14 @@ QMenu * InstrumentTrackView::createFxMenu(QString title, QString newFxLabel)
if ( currentChannel != fxChannel )
{
+ auto index = currentChannel->m_channelIndex;
QString label = tr( "FX %1: %2" ).arg( currentChannel->m_channelIndex ).arg( currentChannel->m_name );
- QAction * action = fxMenu->addAction( label, fxMenuSignalMapper, SLOT( map() ) );
- fxMenuSignalMapper->setMapping(action, currentChannel->m_channelIndex);
+ fxMenu->addAction(label, [this, index](){
+ assignFxLine(index);
+ });
}
}
- connect(fxMenuSignalMapper, SIGNAL(mapped(int)), this, SLOT(assignFxLine(int)));
-
return fxMenu;
}
diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp
index 32baf0b1484..125e84a1f57 100644
--- a/src/tracks/Pattern.cpp
+++ b/src/tracks/Pattern.cpp
@@ -56,7 +56,7 @@ Pattern::Pattern( InstrumentTrack * _instrument_track ) :
TrackContentObject( _instrument_track ),
m_instrumentTrack( _instrument_track ),
m_patternType( BeatPattern ),
- m_steps( MidiTime::stepsPerTact() )
+ m_steps( MidiTime::stepsPerBar() )
{
setName( _instrument_track->name() );
if( _instrument_track->trackContainer()
@@ -161,7 +161,7 @@ void Pattern::updateLength()
return;
}
- tick_t max_length = MidiTime::ticksPerTact();
+ tick_t max_length = MidiTime::ticksPerBar();
for( NoteVector::ConstIterator it = m_notes.begin();
it != m_notes.end(); ++it )
@@ -172,8 +172,8 @@ void Pattern::updateLength()
( *it )->endPos() );
}
}
- changeLength( MidiTime( max_length ).nextFullTact() *
- MidiTime::ticksPerTact() );
+ changeLength( MidiTime( max_length ).nextFullBar() *
+ MidiTime::ticksPerBar() );
updateBBTrack();
}
@@ -182,7 +182,7 @@ void Pattern::updateLength()
MidiTime Pattern::beatPatternLength() const
{
- tick_t max_length = MidiTime::ticksPerTact();
+ tick_t max_length = MidiTime::ticksPerBar();
for( NoteVector::ConstIterator it = m_notes.begin();
it != m_notes.end(); ++it )
@@ -194,13 +194,13 @@ MidiTime Pattern::beatPatternLength() const
}
}
- if( m_steps != MidiTime::stepsPerTact() )
+ if( m_steps != MidiTime::stepsPerBar() )
{
- max_length = m_steps * MidiTime::ticksPerTact() /
- MidiTime::stepsPerTact();
+ max_length = m_steps * MidiTime::ticksPerBar() /
+ MidiTime::stepsPerBar();
}
- return MidiTime( max_length ).nextFullTact() * MidiTime::ticksPerTact();
+ return MidiTime( max_length ).nextFullBar() * MidiTime::ticksPerBar();
}
@@ -298,7 +298,7 @@ void Pattern::clearNotes()
Note * Pattern::addStepNote( int step )
{
- return addNote( Note( MidiTime( -DefaultTicksPerTact ),
+ return addNote( Note( MidiTime( -DefaultTicksPerBar ),
MidiTime::stepPosition( step ) ), false );
}
@@ -417,7 +417,7 @@ void Pattern::loadSettings( const QDomElement & _this )
m_steps = _this.attribute( "steps" ).toInt();
if( m_steps == 0 )
{
- m_steps = MidiTime::stepsPerTact();
+ m_steps = MidiTime::stepsPerBar();
}
checkType();
@@ -466,7 +466,7 @@ void Pattern::clear()
void Pattern::addSteps()
{
- m_steps += MidiTime::stepsPerTact();
+ m_steps += MidiTime::stepsPerBar();
updateLength();
emit dataChanged();
}
@@ -497,7 +497,7 @@ void Pattern::cloneSteps()
void Pattern::removeSteps()
{
- int n = MidiTime::stepsPerTact();
+ int n = MidiTime::stepsPerBar();
if( n < m_steps )
{
for( int i = m_steps - n; i < m_steps; ++i )
@@ -555,19 +555,19 @@ bool Pattern::empty()
void Pattern::changeTimeSignature()
{
- MidiTime last_pos = MidiTime::ticksPerTact() - 1;
+ MidiTime last_pos = MidiTime::ticksPerBar() - 1;
for( NoteVector::ConstIterator cit = m_notes.begin();
cit != m_notes.end(); ++cit )
{
if( ( *cit )->length() < 0 && ( *cit )->pos() > last_pos )
{
- last_pos = ( *cit )->pos()+MidiTime::ticksPerTact() /
- MidiTime::stepsPerTact();
+ last_pos = ( *cit )->pos()+MidiTime::ticksPerBar() /
+ MidiTime::stepsPerBar();
}
}
- last_pos = last_pos.nextFullTact() * MidiTime::ticksPerTact();
- m_steps = qMax( MidiTime::stepsPerTact(),
- last_pos.getTact() * MidiTime::stepsPerTact() );
+ last_pos = last_pos.nextFullBar() * MidiTime::ticksPerBar();
+ m_steps = qMax( MidiTime::stepsPerBar(),
+ last_pos.getBar() * MidiTime::stepsPerBar() );
updateLength();
}
@@ -715,7 +715,7 @@ void PatternView::mousePressEvent( QMouseEvent * _me )
{
if( _me->button() == Qt::LeftButton &&
m_pat->m_patternType == Pattern::BeatPattern &&
- ( fixedTCOs() || pixelsPerTact() >= 96 ) &&
+ ( fixedTCOs() || pixelsPerBar() >= 96 ) &&
_me->y() > height() - s_stepBtnOff->height() )
// when mouse button is pressed in beat/bassline -mode
@@ -785,7 +785,7 @@ void PatternView::mouseDoubleClickEvent(QMouseEvent *_me)
void PatternView::wheelEvent( QWheelEvent * _we )
{
if( m_pat->m_patternType == Pattern::BeatPattern &&
- ( fixedTCOs() || pixelsPerTact() >= 96 ) &&
+ ( fixedTCOs() || pixelsPerBar() >= 96 ) &&
_we->y() > height() - s_stepBtnOff->height() )
{
// get the step number that was wheeled on and
@@ -902,14 +902,14 @@ void PatternView::paintEvent( QPaintEvent * )
textBoxHeight = fontMetrics.height() + 2 * textTop;
}
- // Compute pixels per tact
+ // Compute pixels per bar
const int baseWidth = fixedTCOs() ? parentWidget()->width() - 2 * TCO_BORDER_WIDTH
: width() - TCO_BORDER_WIDTH;
- const float pixelsPerTact = baseWidth / (float) m_pat->length().getTact();
+ const float pixelsPerBar = baseWidth / (float) m_pat->length().getBar();
- // Length of one tact/beat in the [0,1] x [0,1] coordinate system
- const float tactLength = 1. / m_pat->length().getTact();
- const float tickLength = tactLength / MidiTime::ticksPerTact();
+ // Length of one bar/beat in the [0,1] x [0,1] coordinate system
+ const float barLength = 1. / m_pat->length().getBar();
+ const float tickLength = barLength / MidiTime::ticksPerBar();
const int x_base = TCO_BORDER_WIDTH;
@@ -1029,7 +1029,7 @@ void PatternView::paintEvent( QPaintEvent * )
}
// beat pattern paint event
- else if( beatPattern && ( fixedTCOs() || pixelsPerTact >= 96 ) )
+ else if( beatPattern && ( fixedTCOs() || pixelsPerBar >= 96 ) )
{
QPixmap stepon0;
QPixmap stepon200;
@@ -1097,14 +1097,14 @@ void PatternView::paintEvent( QPaintEvent * )
const int lineSize = 3;
p.setPen( c.darker( 200 ) );
- for( tact_t t = 1; t < m_pat->length().getTact(); ++t )
+ for( bar_t t = 1; t < m_pat->length().getBar(); ++t )
{
- p.drawLine( x_base + static_cast( pixelsPerTact * t ) - 1,
+ p.drawLine( x_base + static_cast( pixelsPerBar * t ) - 1,
TCO_BORDER_WIDTH, x_base + static_cast(
- pixelsPerTact * t ) - 1, TCO_BORDER_WIDTH + lineSize );
- p.drawLine( x_base + static_cast( pixelsPerTact * t ) - 1,
+ pixelsPerBar * t ) - 1, TCO_BORDER_WIDTH + lineSize );
+ p.drawLine( x_base + static_cast( pixelsPerBar * t ) - 1,
rect().bottom() - ( lineSize + TCO_BORDER_WIDTH ),
- x_base + static_cast( pixelsPerTact * t ) - 1,
+ x_base + static_cast( pixelsPerBar * t ) - 1,
rect().bottom() - TCO_BORDER_WIDTH );
}
diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp
index 4b51ef6ec65..72f63bb05b5 100644
--- a/src/tracks/SampleTrack.cpp
+++ b/src/tracks/SampleTrack.cpp
@@ -157,7 +157,7 @@ void SampleTCO::setSampleFile( const QString & _sf )
{ //When creating an empty sample pattern make it a bar long
float nom = Engine::getSong()->getTimeSigModel().getNumerator();
float den = Engine::getSong()->getTimeSigModel().getDenominator();
- length = DefaultTicksPerTact * ( nom / den );
+ length = DefaultTicksPerBar * ( nom / den );
}
else
{ //Otherwise set it to the sample's length
@@ -521,18 +521,18 @@ void SampleTCOView::paintEvent( QPaintEvent * pe )
p.setPen( !muted ? painter.pen().brush().color() : mutedColor() );
const int spacing = TCO_BORDER_WIDTH + 1;
- const float ppt = fixedTCOs() ?
+ const float ppb = fixedTCOs() ?
( parentWidget()->width() - 2 * TCO_BORDER_WIDTH )
- / (float) m_tco->length().getTact() :
- pixelsPerTact();
+ / (float) m_tco->length().getBar() :
+ pixelsPerBar();
float nom = Engine::getSong()->getTimeSigModel().getNumerator();
float den = Engine::getSong()->getTimeSigModel().getDenominator();
- float ticksPerTact = DefaultTicksPerTact * nom / den;
+ float ticksPerBar = DefaultTicksPerBar * nom / den;
- float offset = m_tco->startTimeOffset() / ticksPerTact * pixelsPerTact();
+ float offset = m_tco->startTimeOffset() / ticksPerBar * pixelsPerBar();
QRect r = QRect( TCO_BORDER_WIDTH + offset, spacing,
- qMax( static_cast( m_tco->sampleLength() * ppt / ticksPerTact ), 1 ), rect().bottom() - 2 * spacing );
+ qMax( static_cast( m_tco->sampleLength() * ppb / ticksPerBar ), 1 ), rect().bottom() - 2 * spacing );
m_tco->m_sampleBuffer->visualize( p, r, pe->rect() );
QFileInfo fileInfo(m_tco->m_sampleBuffer->audioFile());
@@ -847,6 +847,7 @@ SampleTrackView::~SampleTrackView()
+//FIXME: This is identical to InstrumentTrackView::createFxMenu
QMenu * SampleTrackView::createFxMenu(QString title, QString newFxLabel)
{
int channelIndex = model()->effectChannelModel()->value();
@@ -861,8 +862,6 @@ QMenu * SampleTrackView::createFxMenu(QString title, QString newFxLabel)
QMenu *fxMenu = new QMenu(title);
- QSignalMapper * fxMenuSignalMapper = new QSignalMapper(fxMenu);
-
fxMenu->addAction(newFxLabel, this, SLOT(createFxLine()));
fxMenu->addSeparator();
@@ -872,14 +871,14 @@ QMenu * SampleTrackView::createFxMenu(QString title, QString newFxLabel)
if (currentChannel != fxChannel)
{
+ const auto index = currentChannel->m_channelIndex;
QString label = tr("FX %1: %2").arg(currentChannel->m_channelIndex).arg(currentChannel->m_name);
- QAction * action = fxMenu->addAction(label, fxMenuSignalMapper, SLOT(map()));
- fxMenuSignalMapper->setMapping(action, currentChannel->m_channelIndex);
+ fxMenu->addAction(label, [this, index](){
+ assignFxLine(index);
+ });
}
}
- connect(fxMenuSignalMapper, SIGNAL(mapped(int)), this, SLOT(assignFxLine(int)));
-
return fxMenu;
}
@@ -929,8 +928,8 @@ void SampleTrackView::dropEvent(QDropEvent *de)
MidiTime tcoPos = trackContainerView()->fixedTCOs()
? MidiTime(0)
- : MidiTime(((xPos - trackHeadWidth) / trackContainerView()->pixelsPerTact()
- * MidiTime::ticksPerTact()) + trackContainerView()->currentPosition()
+ : MidiTime(((xPos - trackHeadWidth) / trackContainerView()->pixelsPerBar()
+ * MidiTime::ticksPerBar()) + trackContainerView()->currentPosition()
).quantize(1.0);
SampleTCO * sTco = static_cast(getTrack()->createTCO(tcoPos));
diff --git a/tests/src/tracks/AutomationTrackTest.cpp b/tests/src/tracks/AutomationTrackTest.cpp
index f9f77fac489..291ae293ef1 100644
--- a/tests/src/tracks/AutomationTrackTest.cpp
+++ b/tests/src/tracks/AutomationTrackTest.cpp
@@ -186,12 +186,12 @@ private slots:
QVERIFY(! bbContainer->automatedValuesAt(5, bbTrack2.index()).size());
BBTCO tco(&bbTrack);
- tco.changeLength(MidiTime::ticksPerTact() * 2);
+ tco.changeLength(MidiTime::ticksPerBar() * 2);
tco.movePosition(0);
QCOMPARE(song->automatedValuesAt(0)[&model], 0.0f);
QCOMPARE(song->automatedValuesAt(5)[&model], 0.5f);
- QCOMPARE(song->automatedValuesAt(MidiTime::ticksPerTact() + 5)[&model], 0.5f);
+ QCOMPARE(song->automatedValuesAt(MidiTime::ticksPerBar() + 5)[&model], 0.5f);
}
void testGlobalAutomation()