diff -Nru qjackctl-0.4.5/aclocal.m4 qjackctl-0.6.0/aclocal.m4 --- qjackctl-0.4.5/aclocal.m4 2017-04-27 14:45:15.097012434 +0000 +++ qjackctl-0.6.0/aclocal.m4 2019-10-17 07:46:11.520671700 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.16.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -12,9 +12,9 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -dnl serial 11 (pkg-config-0.29.1) -dnl +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 11 (pkg-config-0.29.1) + dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl @@ -288,3 +288,71 @@ AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR +dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------ +dnl +dnl Prepare a "--with-" configure option using the lowercase +dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and +dnl PKG_CHECK_MODULES in a single macro. +AC_DEFUN([PKG_WITH_MODULES], +[ +m4_pushdef([with_arg], m4_tolower([$1])) + +m4_pushdef([description], + [m4_default([$5], [build with ]with_arg[ support])]) + +m4_pushdef([def_arg], [m4_default([$6], [auto])]) +m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) +m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) + +m4_case(def_arg, + [yes],[m4_pushdef([with_without], [--without-]with_arg)], + [m4_pushdef([with_without],[--with-]with_arg)]) + +AC_ARG_WITH(with_arg, + AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, + [AS_TR_SH([with_]with_arg)=def_arg]) + +AS_CASE([$AS_TR_SH([with_]with_arg)], + [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], + [auto],[PKG_CHECK_MODULES([$1],[$2], + [m4_n([def_action_if_found]) $3], + [m4_n([def_action_if_not_found]) $4])]) + +m4_popdef([with_arg]) +m4_popdef([description]) +m4_popdef([def_arg]) + +])dnl PKG_WITH_MODULES + +dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ----------------------------------------------- +dnl +dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES +dnl check._[VARIABLE-PREFIX] is exported as make variable. +AC_DEFUN([PKG_HAVE_WITH_MODULES], +[ +PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) + +AM_CONDITIONAL([HAVE_][$1], + [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) +])dnl PKG_HAVE_WITH_MODULES + +dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, +dnl [DESCRIPTION], [DEFAULT]) +dnl ------------------------------------------------------ +dnl +dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after +dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make +dnl and preprocessor variable. +AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], +[ +PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) + +AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], + [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) +])dnl PKG_HAVE_DEFINE_WITH_MODULES + diff -Nru qjackctl-0.4.5/ChangeLog qjackctl-0.6.0/ChangeLog --- qjackctl-0.4.5/ChangeLog 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/ChangeLog 2019-10-17 07:45:45.945673225 +0000 @@ -4,6 +4,212 @@ ChangeLog +0.6.0 2019-10-17 An Autumn'19 Release. + +- Graph: avoid self-connecting over their own ports + when client nodes are selected as a whole group; + also try to match port-types in a oderly fashion + when connecting multiple selected ports. + +- Changing current JACK buffer size from Setup dialog + (cf. Settings / Frames/Period) may now take effect + just immediately ;) + +- An 'Apply' button as been added to the Setup dialog; + ask whether to restart the JACK audio server, if any + settings are changed. + +- Added alternate yet non-official CMake build option. + +- Fix HiDPI display screen effective support (Qt >= 5.6). + +- Command line arguments (--start, --preset=[label] and + --active-patchbay=[path]) are passed and take effect + on the current singleton/unique application instance, + when enabled and already running. + +- System-tray icon context menu has been refactored to + be exactly the same as the main-window context menu + that is re-instantiated on demand. + +- Make sure compiler flags comply to c++11 as standard. + + +0.5.9 2019-07-12 A Summer'19 Release. + +- Updated for the newer Qt5 translation tools (>= 5.13). + +- Configure updated to check for qtchooser availability. + + + +0.5.8 2019-05-25 A Spring'19 Release. + +- When enabled the current default preset settings are + now read from the last known JACK D-BUS configuration. + +- Minor update to Debian packaging control file. + +- Removed all the remaining leftovers of old pre-FFADO + 'freebob' driver support. + + +0.5.7 2019-03-11 A Spring-Break'19 Release. + +- Graph node and port title renaming and nodes position + move changes are now undo/redo-able. + +- Graph client and port title in-place renaming is now + integrated to native aliases and JACK metadata (aka. + pretty-names). + +- Refactored all native client/port name aliases. + +- Re-defined all main application UNIX signal handling. + + +0.5.6 2019-03-11 Pre-LAC2019 Release Frenzy. + +- Refactored all singleton/unique application instance + setup logic away from X11/Xcb hackery. + +- At last, JACK freewheel mode is now being detected + as to postpone any active patchbay scans as much as + possible. + +- Removed old pre-FFADO 'freebob' driver support. + +- HiDPI display screen support (Qt >= 5.6). + +- Graph port temporary highlighting while hovering, + if and only if connecting ports of same type and + complementary modes. + +- Bumped copyright headers into the New Year (2019). + + +0.5.5 2018-11-23 A Black-Friday'18 Release! + +- Old deprecated Qt4 build support is no more. + +- Graph port sort options added as View / Sort menu. + +- System tray options now subject to current desktop + environment availability. + +- Also disable Setup / Misc / Other / Save JACK server + configuration to (.jackdrc) when JACK D-Bus interface + is enabled. + +- Whether to use server synchronous mode option added + to Setup / Settings / Parameters (only applied when + JACK D-BUS interface is enabled). + +- Disable some Setup / Settings / Advanced parameters + when JACK D-Bus interface is enabled and vice-versa. + +- Attempt to power-cycle JACK D-Bus service on demand; + +- Marked as probably useless anyway, old "H/W Monitor" + option (-H) is now being ditched from Setup / Settings + / Advanced tab. + +- Graph port/connections highlighting. + + +0.5.4 2018-09-24 An Early Autumn'18 Release. + +- Graph port-type colors are now configurable (cf. menu + View > Colors. + +- Make Graph nodes (ie. client boxes) transparent for yet + some eye-candiness ;). Also keep the (Graph) current + selection across port (dis)connections. + +- Drawing patchbay connector lines as (bezier) curves is + now a difinitive and fixed feature (as long as no more + remains from the so called "Cambric explosion era" are + still lurking in there). + +- AppStream metadata updated to be the most compliant with + latest freedesktop.org specification and recommendation. + +- Graph auto-layout improvement for brand new node clients. + +- Avoid showing setup warning when no server settings have + changed. + +- Fixed JACK D-Bus settings for MIDI driver parameter. + + +0.5.3 2018-07-22 A Summer'18 Release. + +- Portuguese (pt) translation added (by Heitor Rocha). + +- AppData/AppStream metadata is now settled under an all + permisssive license (FSFAP). + +- Improved Graph rubberband add (Shift) and toggle (Ctrl) + multiple (de)selections. + +- Added user preference option: Setup / Misc / Buttons / + Replace Connections with Graph button (on main window). + +- Added a zoom slider control to the Graph view status bar. + + +0.5.2 2018-05-27 Pre-LAC2018 release frenzy hotfix. + +- Respect ALSA Sequencer support option also on Graph view. + +- Regression to new Graph node/ports sorting comparator; + also fixed multiple and many port removals, most probably + causing it to crash due to double-free/delete potential. + +- Fixed the automatic aggregation of new Graph client nodes + that are split as either input or output only (ie. system, + terminal, physical or otherwise non-duplex nodes). + +- Added View/Zoom Range mode option to Graph tool. + + +0.5.1 2018-05-21 Pre-LAC2018 release frenzy. + +- Half a decade later, recent new custom entries may now get + removed from Session Infra-client list. + +- Some rather old, better said "Cambric explosion era", user + preference options have been ditched altogether: Display / + Time Format; Display / Shiny glass light effect; Display / + Connections/Draw connections and patchbay lines as Bezier + curves; Misc/Configure as temporary server. + +- A brand new and way long overdue connections Graph widget + is finally introduced, only to be accessible through the + context menu at this time. + +- Extended multi-selection is now supported on all Connections + client/port lists, allowing for multiple (dis)connections at + once. + +- Disable singleton/unique application instance setup logic + when the display server platform is not X11. + +- A little hardening on the configure (autoconf) macro side. + + +0.5.0 2017-12-16 End of Autum'17 release. + +- Current preset is always taken into account if ever changes + while the Setup dialog is hidden (eg. via context menu). + +- Desktop entry specification file is now finally independent + from build/configure template chains. + +- Updated target path for freedesktop.org's AppStream metainfo + file (formerly AppData). + + 0.4.5 2017-04-27 Pre-LAC2017 release frenzy. - On some desktop-shells, the system tray icon blinking on diff -Nru qjackctl-0.4.5/CMakeLists.txt qjackctl-0.6.0/CMakeLists.txt --- qjackctl-0.4.5/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/CMakeLists.txt 2019-10-17 07:45:45.944673225 +0000 @@ -0,0 +1,244 @@ +project(QJACKCTL) + +cmake_minimum_required(VERSION 3.1) + +set (VERSION "0.6.0") + +set (CONFIG_VERSION ${VERSION}) +execute_process ( + COMMAND git describe --tags --dirty --abbrev=6 + OUTPUT_VARIABLE GIT_DESCRIBE_OUTPUT + RESULT_VARIABLE GIT_DESCRIBE_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) +if (GIT_DESCRIBE_RESULT EQUAL 0) + set (VERSION "${GIT_DESCRIBE_OUTPUT}") + string (REGEX REPLACE "^[^_]+" "" VERSION "${VERSION}") + string (REGEX REPLACE "^[_vV]+" "" VERSION "${VERSION}") + string (REGEX REPLACE "-g" "git." VERSION "${VERSION}") + string (REGEX REPLACE "[_|-]+" "." VERSION "${VERSION}") + execute_process ( + COMMAND git rev-parse --abbrev-ref HEAD + OUTPUT_VARIABLE GIT_REVPARSE_OUTPUT + RESULT_VARIABLE GIT_REVPARSE_RESULT + OUTPUT_STRIP_TRAILING_WHITESPACE) + if (GIT_REVPARSE_RESULT EQUAL 0 AND NOT GIT_REVPARSE_OUTPUT STREQUAL "master") + set (VERSION "${VERSION} [${GIT_REVPARSE_OUTPUT}]") + endif () +endif () + +set (PACKAGE_NAME "QjackCtl") +set (PACKAGE_VERSION "${VERSION}") +set (PACKAGE_BUGREPORT "rncbc@rncbc.org") +set (PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}") +set (PACKAGE_TARNAME "qjackctl") + +set (CONFIG_BUILD_VERSION "${PACKAGE_VERSION}") + +if (CMAKE_BUILD_TYPE) + set (CONFIG_BUILD_TYPE ${CMAKE_BUILD_TYPE}) +else () + set (CONFIG_BUILD_TYPE "release") +endif () + +set (CONFIG_DEBUG 0) +if (CONFIG_BUILD_TYPE MATCHES "debug") + set (CONFIG_DEBUG 1) +endif () + +set (CONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") + +include (GNUInstallDirs) +set (CONFIG_BINDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_BINDIR}") +set (CONFIG_LIBDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +set (CONFIG_DATADIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_DATADIR}") +set (CONFIG_MANDIR "${CONFIG_PREFIX}/${CMAKE_INSTALL_MANDIR}") + + +# Disable system tray argument option. +option (CONFIG_SYSTEM_TRAY "Enable system tray (default=yes)" 1) + +# Disable JACK MIDI support option. +option (CONFIG_JACK_MIDI "Enable JACK MIDI support (default=yes)" 1) + +# Enable JACK session support. +option (CONFIG_JACK_SESSION "Enable JACK session support (default=yes)" 1) + +# Enable JACK port aliases support. +option (CONFIG_JACK_PORT_ALIASES "Enable JACK port aliases support (default=yes)" 1) + +# Enable JACK metadata support. +option (CONFIG_JACK_METADATA "Enable JACK metadata support (default=yes)" 1) + +# Enable JACK version support. +option (CONFIG_JACK_VERSION "Enable JACK version support (default=no)" 0) + +# Enable ALSA sequencer support option. +option (CONFIG_ALSA_SEQ "Enable ALSA/MIDI sequencer support (default=yes)" 1) + +# Enable PortAudio argument option. +option (CONFIG_PORTAUDIO "Enable PortAudio interface (default=yes)" 1) + +# Enable D-Bus argument option. +option (CONFIG_DBUS "Enable D-Bus interface (default=yes)" 1) + +# Enable unique/single instance. +option (CONFIG_XUNIQUE "Enable unique/single instance (default=yes)" 1) + +# Enable debugger stack-trace option (assumes --enable-debug). +option (CONFIG_STACKTRACE "Enable debugger stack-trace (default=no)" 0) + + +# Fix for new CMAKE_REQUIRED_LIBRARIES policy. +if (POLICY CMP0075) + cmake_policy (SET CMP0075 NEW) +endif () + +# Check for Qt +find_package (Qt5 REQUIRED COMPONENTS Core Gui Widgets Xml) + +if (CONFIG_XUNIQUE) + find_package (Qt5 REQUIRED COMPONENTS Network) +endif () + +if (CONFIG_DBUS) + find_package (Qt5 REQUIRED COMPONENTS DBus) +endif () + +find_package (Qt5LinguistTools) + +include (CheckIncludeFile) +include (CheckIncludeFiles) +include (CheckIncludeFileCXX) +include (CheckFunctionExists) +include (CheckLibraryExists) + + +# Checks for header files. +if (UNIX AND NOT APPLE) + check_include_files ("fcntl.h;unistd.h;signal.h" HAVE_SIGNAL_H) +endif () + + +# Find package modules +find_package (PkgConfig REQUIRED) + +# Check for JACK libraries. +pkg_check_modules (JACK REQUIRED jack>=0.100.0) +set (CONFIG_JACK ${JACK_FOUND}) +if (CONFIG_JACK) + include_directories (${JACK_INCLUDE_DIRS}) + link_directories (${JACK_LIBRARY_DIRS}) +# link_libraries (${JACK_LIBRARIES}) + set (CMAKE_REQUIRED_LIBRARIES "${JACK_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + # Check for jack/statistics.h header. + check_include_file (jack/statistics.h CONFIG_JACK_STATISTICS) + # Check for JACK MIDI headers availability. + if (CONFIG_JACK_MIDI) + check_include_file (jack/midiport.h CONFIG_JACK_MIDI) + endif () + # Check for JACK session headers availability. + if (CONFIG_JACK_SESSION) + check_include_file (jack/session.h CONFIG_JACK_SESSION) + endif () + # Check for JACK metadata headers availability. + if (CONFIG_JACK_METADATA) + check_include_file (jack/metadata.h CONFIG_JACK_METADATA) + endif () + # Check for jack_transport_query function. + check_function_exists (jack_transport_query CONFIG_JACK_TRANSPORT) + # Check for jack_is_realtime function. + check_function_exists (jack_is_realtime CONFIG_JACK_REALTIME) + # Check for jack_get_xrun_delayed_usecs function. + check_function_exists (jack_get_xrun_delayed_usecs CONFIG_JACK_XRUN_DELAY) + # Check for jack_get_max_delayed_usecs function. + check_function_exists (jack_get_max_delayed_usecs CONFIG_JACK_MAX_DELAY) + # Check for jack_set_port_rename_callback + check_function_exists (jack_set_port_rename_callback CONFIG_JACK_PORT_RENAME) + # Check for jack_port_get_aliases function. + if (CONFIG_JACK_PORT_ALIASES) + check_function_exists (jack_port_get_aliases CONFIG_JACK_PORT_ALIASES) + endif () + # Check for jack_get_version_string function. + if (CONFIG_JACK_VERSION) + check_function_exists (jack_get_version_string CONFIG_JACK_VERSION) + endif () + # Check for jack_free function. + check_function_exists (jack_free CONFIG_JACK_FREE) +else () + message (FATAL_ERROR "*** JACK library not found.") +endif () + +# Check for ALSA libraries. +if (CONFIG_ALSA_SEQ) + pkg_check_modules (ALSA alsa) + set (CONFIG_ALSA_SEQ ${ALSA_FOUND}) + if (CONFIG_ALSA_SEQ) + include_directories (${ALSA_INCLUDE_DIRS}) + link_directories (${ALSA_LIBRARY_DIRS}) + link_libraries (${ALSA_LIBRARIES}) + # set (CMAKE_REQUIRED_LIBRARIES "${ALSA_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + else () + message (WARNING "*** ALSA library not found.") + endif () +endif () + +# Check for PORTAUDIO libraries. +if (CONFIG_PORTAUDIO) + pkg_check_modules (PORTAUDIO portaudio-2.0) + set (CONFIG_PORTAUDIO ${PORTAUDIO_FOUND}) + if (CONFIG_PORTAUDIO) + include_directories (${PORTAUDIO_INCLUDE_DIRS}) + link_directories (${PORTAUDIO_LIBRARY_DIRS}) + link_libraries (${PORTAUDIO_LIBRARIES}) + # set (CMAKE_REQUIRED_LIBRARIES "${PORTAUDIO_LIBRARIES};${CMAKE_REQUIRED_LIBRARIES}") + else () + message (WARNING "*** PORTAUDIO library not found.") + endif () +endif () + + +if (APPLE AND CONFIG_COREAUDIO) + check_include_file (CoreAudio/CoreAudio.h CONFIG_COREAUDIO) +endif () + + +add_subdirectory (src) + +configure_file (qjackctl.spec.in qjackctl.spec IMMEDIATE @ONLY) + +install (FILES qjackctl.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +install (FILES qjackctl.fr.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/fr/man1 RENAME qjackctl.1) + +# Configuration status +macro (SHOW_OPTION text value) + if (${value}) + message ("${text}: yes") + else () + message ("${text}: no") + endif () +endmacro () + + +message ("\n ${PACKAGE_NAME} ${PACKAGE_VERSION}") +message ("\n Build target . . . . . . . . . . . . . . . . . . .: ${CONFIG_BUILD_TYPE}\n") +show_option (" JACK Audio Connection Kit support . . . . . . . ." CONFIG_JACK) +show_option (" JACK Realtime support . . . . . . . . . . . . . ." CONFIG_JACK_REALTIME) +show_option (" JACK Transport support . . . . . . . . . . . . . ." CONFIG_JACK_TRANSPORT) +show_option (" JACK XRUN delay support . . . . . . . . . . . . ." CONFIG_JACK_XRUN_DELAY) +show_option (" JACK Maximum scheduling delay support . . . . . ." CONFIG_JACK_MAX_DELAY) +show_option (" JACK Port aliases support . . . . . . . . . . . ." CONFIG_JACK_PORT_ALIASES) +show_option (" JACK Metadata support . . . . . . . . . . . . . ." CONFIG_JACK_METADATA) +show_option (" JACK MIDI support . . . . . . . . . . . . . . . ." CONFIG_JACK_MIDI) +show_option (" JACK Session support . . . . . . . . . . . . . . ." CONFIG_JACK_SESSION) +show_option (" JACK Version support (JACK2) . . . . . . . . . . ." CONFIG_JACK_VERSION) +show_option (" ALSA MIDI Sequencer support . . . . . . . . . . ." CONFIG_ALSA_SEQ) +show_option (" System tray icon support . . . . . . . . . . . . ." CONFIG_SYSTEM_TRAY) +show_option (" D-Bus interface support . . . . . . . . . . . . ." CONFIG_DBUS) +show_option (" PortAudio interface support . . . . . . . . . . ." CONFIG_PORTAUDIO) +show_option (" CoreAudio interface support . . . . . . . . . . ." CONFIG_COREAUDIO) +message ("") +show_option (" System tray icon support . . . . . . . . . . . . ." CONFIG_SYSTEM_TRAY) +show_option (" Unique/Single instance support . . . . . . . . . ." CONFIG_XUNIQUE) +show_option (" Debugger stack-trace (gdb) . . . . . . . . . . . ." CONFIG_STACKTRACE) +message ("\n Install prefix . . . . . . . . . . . . . . . . . .: ${CMAKE_INSTALL_PREFIX}") +message ("\nNow type 'make', followed by 'make install' as root.\n") diff -Nru qjackctl-0.4.5/configure qjackctl-0.6.0/configure --- qjackctl-0.4.5/configure 2017-04-27 14:45:15.783355444 +0000 +++ qjackctl-0.6.0/configure 2019-10-17 07:46:11.875671679 +0000 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for QjackCtl 0.4.5. +# Generated by GNU Autoconf 2.69 for QjackCtl 0.6.0. # # Report bugs to . # @@ -580,8 +580,8 @@ # Identity of this package. PACKAGE_NAME='QjackCtl' PACKAGE_TARNAME='qjackctl' -PACKAGE_VERSION='0.4.5' -PACKAGE_STRING='QjackCtl 0.4.5' +PACKAGE_VERSION='0.6.0' +PACKAGE_STRING='QjackCtl 0.6.0' PACKAGE_BUGREPORT='rncbc@rncbc.org' PACKAGE_URL='' @@ -629,12 +629,10 @@ ac_incpath ac_ldflags ac_cflags -ac_qx11extras -QT5X11EXTRAS_LIBS -QT5X11EXTRAS_CFLAGS +ac_qnetwork +QT5NETWORK_LIBS +QT5NETWORK_CFLAGS ac_qdbus -QT4DBUS_LIBS -QT4DBUS_CFLAGS QT5DBUS_LIBS QT5DBUS_CFLAGS EGREP @@ -645,12 +643,15 @@ ALSA_CFLAGS JACK_LIBS JACK_CFLAGS +ac_cv_lrelease ac_lrelease +ac_cv_lupdate ac_lupdate ac_uic ac_moc ac_cv_qmake ac_qmake +ac_qtchooser PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG @@ -715,7 +716,6 @@ ac_user_opts=' enable_option_checking enable_debug -enable_qt4 enable_system_tray enable_jack_midi enable_jack_session @@ -727,8 +727,7 @@ enable_dbus enable_xunique enable_stacktrace -with_qt4 -with_qt5 +with_qt with_jack with_alsa with_portaudio @@ -757,10 +756,8 @@ PORTAUDIO_LIBS QT5DBUS_CFLAGS QT5DBUS_LIBS -QT4DBUS_CFLAGS -QT4DBUS_LIBS -QT5X11EXTRAS_CFLAGS -QT5X11EXTRAS_LIBS' +QT5NETWORK_CFLAGS +QT5NETWORK_LIBS' # Initialize some variables set by options. @@ -1301,7 +1298,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures QjackCtl 0.4.5 to adapt to many kinds of systems. +\`configure' configures QjackCtl 0.6.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1362,7 +1359,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of QjackCtl 0.4.5:";; + short | recursive ) echo "Configuration of QjackCtl 0.6.0:";; esac cat <<\_ACEOF @@ -1371,7 +1368,6 @@ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-debug enable debugging (default=no) - --enable-qt4 enable Qt4 build (default=no) --enable-system-tray enable system tray (default=yes) --enable-jack-midi enable JACK MIDI support (default=yes) --enable-jack-session enable JACK session support (default=yes) @@ -1382,14 +1378,13 @@ --enable-alsa-seq enable ALSA/MIDI sequencer support (default=yes) --enable-portaudio enable PortAudio interface (default=yes) --enable-dbus enable D-Bus interface (default=yes) - --enable-xunique enable X11 unique/single instance (default=yes) + --enable-xunique enable unique/single instance (default=yes) --enable-stacktrace enable debugger stack-trace (default=no) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-qt4=PATH use alternate Qt4 install path - --with-qt5=PATH use alternate Qt5 install path + --with-qt=PATH use alternate Qt install path --with-jack=PATH use alternate JACK install path --with-alsa=PATH use alternate ALSA install path --with-portaudio=PATH use alternate PortAudio install path @@ -1423,14 +1418,10 @@ C compiler flags for QT5DBUS, overriding pkg-config QT5DBUS_LIBS linker flags for QT5DBUS, overriding pkg-config - QT4DBUS_CFLAGS - C compiler flags for QT4DBUS, overriding pkg-config - QT4DBUS_LIBS - linker flags for QT4DBUS, overriding pkg-config - QT5X11EXTRAS_CFLAGS - C compiler flags for QT5X11EXTRAS, overriding pkg-config - QT5X11EXTRAS_LIBS - linker flags for QT5X11EXTRAS, overriding pkg-config + QT5NETWORK_CFLAGS + C compiler flags for QT5NETWORK, overriding pkg-config + QT5NETWORK_LIBS + linker flags for QT5NETWORK, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1498,7 +1489,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -QjackCtl configure 0.4.5 +QjackCtl configure 0.6.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1942,7 +1933,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by QjackCtl $as_me 0.4.5, which was +It was created by QjackCtl $as_me 0.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2294,7 +2285,7 @@ ac_config_headers="$ac_config_headers src/config.h" -ac_config_files="$ac_config_files Makefile qjackctl.spec src/src.pri src/qjackctl.desktop" +ac_config_files="$ac_config_files Makefile qjackctl.spec src/src.pri" # Build version string. @@ -2329,7 +2320,7 @@ $as_echo_n "(cached) " >&6 else - ac_cv_version=$(echo $ac_cv_build_version | sed -r 's/^([0-9|\.]+).*$/\1/') + ac_cv_version=$(echo $PACKAGE_VERSION | sed -r 's/^([0-9|\.]+).*$/\1/') fi @@ -2412,15 +2403,6 @@ -# Enable Qt4/5 availability. -# Check whether --enable-qt4 was given. -if test "${enable_qt4+set}" = set; then : - enableval=$enable_qt4; ac_qt4="$enableval" -else - ac_qt4="no" -fi - - # Disable system tray argument option. # Check whether --enable-system_tray was given. if test "${enable_system_tray+set}" = set; then : @@ -2475,7 +2457,7 @@ fi -# Disable ALSA sequencer support option. +# Enable ALSA sequencer support option. # Check whether --enable-alsa_seq was given. if test "${enable_alsa_seq+set}" = set; then : enableval=$enable_alsa_seq; ac_alsa_seq="$enableval" @@ -2502,7 +2484,7 @@ fi -# Enable X11 unique/single instance. +# Enable unique/single instance. # Check whether --enable-xunique was given. if test "${enable_xunique+set}" = set; then : enableval=$enable_xunique; ac_xunique="$enableval" @@ -2520,35 +2502,21 @@ # Standard installation base dirs. +ac_path=$PATH ac_with_paths="" -# Set for alternate Qt4/5 installation dir. - -# Check whether --with-qt4 was given. -if test "${with_qt4+set}" = set; then : - withval=$with_qt4; ac_qt4_path="$withval" -else - ac_qt4_path="no" -fi - - +# Set for alternate Qt installation dir. -# Check whether --with-qt5 was given. -if test "${with_qt5+set}" = set; then : - withval=$with_qt5; ac_qt5_path="$withval" +# Check whether --with-qt was given. +if test "${with_qt+set}" = set; then : + withval=$with_qt; ac_qt_path="$withval" else - ac_qt5_path="no" + ac_qt_path="no" fi -if test "x$ac_qt4_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt4_path" - ac_qt4="yes" -fi - -if test "x$ac_qt5_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt5_path" - ac_qt4="no" +if test "x$ac_qt_path" != "xno"; then + ac_path="$ac_qt_path/bin:$ac_path" fi # Set for alternate JACK installation dir. @@ -4046,8 +4014,9 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gxx_version_major" >&5 $as_echo "$ac_cv_gxx_version_major" >&6; } ac_gxx_version_major=$ac_cv_gxx_version_major -if test $ac_gxx_version_major -gt 4 -a $ac_gxx_version_major -lt 6; then - CXXFLAGS="-std=c++11 $CXXFLAGS" +if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then + CPPFLAGS="-std=c++11 $CPPFLAGS" + ac_cflags="-std=c++11 $ac_cflags" fi # Check for proper flags. @@ -4064,39 +4033,38 @@ CPPFLAGS="-fPIC $CPPFLAGS" # Prepend alternate dependencies paths. -ac_path=$PATH - for X in $ac_with_paths; do if test -d $X/bin; then - ac_path="$X/bin:$ac_path" + ac_path="$X/bin:$ac_path" fi if test -d $X/include; then - CFLAGS="-I$X/include $CFLAGS " - CPPFLAGS="-I$X/include $CPPFLAGS" - ac_incpath="$X/include $ac_incpath" + CFLAGS="-I$X/include $CFLAGS " + CPPFLAGS="-I$X/include $CPPFLAGS" + ac_incpath="$X/include $ac_incpath" fi for Y in $ac_libdirs; do - if test -d $X/$Y; then - LIBS="-L$X/$Y $LIBS" - ac_libs="-L$X/$Y $ac_libs" - fi + if test -d $X/$Y; then + LIBS="-L$X/$Y $LIBS" + ac_libs="-L$X/$Y $ac_libs" + fi done done # A common error message: ac_errmsg="not found in current PATH. Maybe QT development environment isn't available." -if test "x$ac_qt4" = "xyes"; then - # Extract the first word of "qmake-qt4", so it can be a program name with args. -set dummy qmake-qt4; ac_word=$2 +# Check for qtchooser availability. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}qtchooser", so it can be a program name with args. +set dummy ${ac_tool_prefix}qtchooser; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_qmake+:} false; then : +if ${ac_cv_path_ac_qtchooser+:} false; then : $as_echo_n "(cached) " >&6 else - case $ac_qmake in + case $ac_qtchooser in [\\/]* | ?:[\\/]*) - ac_cv_path_ac_qmake="$ac_qmake" # Let the user override the test with a path. + ac_cv_path_ac_qtchooser="$ac_qtchooser" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4106,7 +4074,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_qmake="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_qtchooser="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4114,23 +4082,84 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no" ;; esac fi -ac_qmake=$ac_cv_path_ac_qmake -if test -n "$ac_qmake"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qmake" >&5 -$as_echo "$ac_qmake" >&6; } +ac_qtchooser=$ac_cv_path_ac_qtchooser +if test -n "$ac_qtchooser"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_qtchooser" >&5 +$as_echo "$ac_qtchooser" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi +fi +if test -z "$ac_cv_path_ac_qtchooser"; then + ac_pt_ac_qtchooser=$ac_qtchooser + # Extract the first word of "qtchooser", so it can be a program name with args. +set dummy qtchooser; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_qtchooser+:} false; then : + $as_echo_n "(cached) " >&6 else - # Extract the first word of "qmake-qt5", so it can be a program name with args. -set dummy qmake-qt5; ac_word=$2 + case $ac_pt_ac_qtchooser in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_qtchooser="$ac_pt_ac_qtchooser" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_qtchooser="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_qtchooser=$ac_cv_path_ac_pt_ac_qtchooser +if test -n "$ac_pt_ac_qtchooser"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_qtchooser" >&5 +$as_echo "$ac_pt_ac_qtchooser" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_qtchooser" = x; then + ac_qtchooser="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_qtchooser=$ac_pt_ac_qtchooser + fi +else + ac_qtchooser="$ac_cv_path_ac_qtchooser" +fi + +if test -x $ac_qtchooser; then + export QT_SELECT=5 +fi + +# Check for proper qmake path/version alternatives. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}qmake", so it can be a program name with args. +set dummy ${ac_tool_prefix}qmake; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_qmake+:} false; then : @@ -4156,7 +4185,6 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_qmake" && ac_cv_path_ac_qmake="no" ;; esac fi @@ -4171,11 +4199,68 @@ fi -if test "x$ac_qmake" = "xno"; then - # Extract the first word of "qmake", so it can be a program name with args. +if test -z "$ac_cv_path_ac_qmake"; then + ac_pt_ac_qmake=$ac_qmake + # Extract the first word of "qmake", so it can be a program name with args. set dummy qmake; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_qmake+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_qmake in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_qmake="$ac_pt_ac_qmake" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_qmake="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_qmake=$ac_cv_path_ac_pt_ac_qmake +if test -n "$ac_pt_ac_qmake"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_qmake" >&5 +$as_echo "$ac_pt_ac_qmake" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_qmake" = x; then + ac_qmake="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_qmake=$ac_pt_ac_qmake + fi +else + ac_qmake="$ac_cv_path_ac_qmake" +fi + +if test "x$ac_qmake" = "xno"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}qmake-qt5", so it can be a program name with args. +set dummy ${ac_tool_prefix}qmake-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_cv_qmake+:} false; then : $as_echo_n "(cached) " >&6 else @@ -4199,7 +4284,6 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no" ;; esac fi @@ -4213,10 +4297,64 @@ fi - ac_qmake=$ac_cv_qmake fi -if test "x$ac_qmake" = "xno"; then - as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 +if test -z "$ac_cv_path_ac_cv_qmake"; then + ac_pt_ac_cv_qmake=$ac_cv_qmake + # Extract the first word of "qmake-qt5", so it can be a program name with args. +set dummy qmake-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_cv_qmake+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_cv_qmake in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_cv_qmake="$ac_pt_ac_cv_qmake" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_cv_qmake=$ac_cv_path_ac_pt_ac_cv_qmake +if test -n "$ac_pt_ac_cv_qmake"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_cv_qmake" >&5 +$as_echo "$ac_pt_ac_cv_qmake" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_cv_qmake" = x; then + ac_cv_qmake="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_cv_qmake=$ac_pt_ac_cv_qmake + fi +else + ac_cv_qmake="$ac_cv_path_ac_cv_qmake" +fi + + ac_qmake=$ac_cv_qmake fi # Check for proper Qt major version. @@ -4233,14 +4371,110 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qt_version_major" >&5 $as_echo "$ac_cv_qt_version_major" >&6; } ac_qt_version_major=$ac_cv_qt_version_major -if test "x$ac_qt4" = "xyes"; then - if test $ac_qt_version_major -ne 4; then - as_fn_error $? "qmake-qt4 $ac_errmsg (qt4-devel)" "$LINENO" 5 - fi +if test $ac_qt_version_major -ne 5; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}qmake-qt5", so it can be a program name with args. +set dummy ${ac_tool_prefix}qmake-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_cv_qmake+:} false; then : + $as_echo_n "(cached) " >&6 else - if test $ac_qt_version_major -ne 5; then - as_fn_error $? "qmake-qt5 $ac_errmsg (qt5-devel)" "$LINENO" 5 - fi + case $ac_cv_qmake in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_cv_qmake="$ac_cv_qmake" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_cv_qmake=$ac_cv_path_ac_cv_qmake +if test -n "$ac_cv_qmake"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qmake" >&5 +$as_echo "$ac_cv_qmake" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_ac_cv_qmake"; then + ac_pt_ac_cv_qmake=$ac_cv_qmake + # Extract the first word of "qmake-qt5", so it can be a program name with args. +set dummy qmake-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_cv_qmake+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_cv_qmake in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_cv_qmake="$ac_pt_ac_cv_qmake" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_cv_qmake=$ac_cv_path_ac_pt_ac_cv_qmake +if test -n "$ac_pt_ac_cv_qmake"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_cv_qmake" >&5 +$as_echo "$ac_pt_ac_cv_qmake" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_cv_qmake" = x; then + ac_cv_qmake="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_cv_qmake=$ac_pt_ac_cv_qmake + fi +else + ac_cv_qmake="$ac_cv_path_ac_cv_qmake" +fi + + ac_qmake=$ac_cv_qmake +fi + +if test "x$ac_qmake" = "xno"; then + as_fn_error $? "qmake-qt5 $ac_errmsg (qt5-devel)" "$LINENO" 5 fi # Check for proper Qt install path. @@ -4261,8 +4495,9 @@ fi # Check it again, now with updated PATH, just in case... -# Extract the first word of "qmake", so it can be a program name with args. -set dummy qmake; ac_word=$2 +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}qmake", so it can be a program name with args. +set dummy ${ac_tool_prefix}qmake; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_cv_qmake+:} false; then : @@ -4288,7 +4523,6 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_cv_qmake" && ac_cv_path_ac_cv_qmake="no" ;; esac fi @@ -4302,19 +4536,76 @@ fi -ac_qmake=$ac_cv_qmake -if test "x$ac_qmake" = "xno"; then - as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 fi - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install headers" >&5 -$as_echo_n "checking for Qt install headers... " >&6; } -if ${ac_cv_qt_install_headers+:} false; then : +if test -z "$ac_cv_path_ac_cv_qmake"; then + ac_pt_ac_cv_qmake=$ac_cv_qmake + # Extract the first word of "qmake", so it can be a program name with args. +set dummy qmake; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_cv_qmake+:} false; then : $as_echo_n "(cached) " >&6 else - + case $ac_pt_ac_cv_qmake in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_cv_qmake="$ac_pt_ac_cv_qmake" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_cv_qmake="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_cv_qmake=$ac_cv_path_ac_pt_ac_cv_qmake +if test -n "$ac_pt_ac_cv_qmake"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_cv_qmake" >&5 +$as_echo "$ac_pt_ac_cv_qmake" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_cv_qmake" = x; then + ac_cv_qmake="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_cv_qmake=$ac_pt_ac_cv_qmake + fi +else + ac_cv_qmake="$ac_cv_path_ac_cv_qmake" +fi + +ac_qmake=$ac_cv_qmake +if test "x$ac_qmake" = "xno"; then + as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt install headers" >&5 +$as_echo_n "checking for Qt install headers... " >&6; } +if ${ac_cv_qt_install_headers+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_qt_install_headers=$($ac_qmake -query QT_INSTALL_HEADERS) fi @@ -4344,25 +4635,24 @@ ac_libs="-L$ac_qt_install_libs $ac_libs" fi -# Finally, check for proper Qt4/5 version. -if test "x$ac_qt4" = "xyes"; then +# Finally, check for proper Qt version. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 4.4" >&5 -$as_echo_n "checking for Qt library version >= 4.4... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 5.1" >&5 +$as_echo_n "checking for Qt library version >= 5.1... " >&6; } if ${ac_cv_qtversion+:} false; then : $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "QtCore/qglobal.h" int main () { - #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000 - #error Qt library 4.4 or greater required. - #endif + #if QT_VERSION < 0x050100 + #error Qt library 5.1 or greater required. + #endif ; return 0; @@ -4372,8 +4662,8 @@ ac_cv_qtversion="yes" else - echo "no; Qt 4.4 or greater is required" - exit 1 + echo "no; Qt 5.1 or greater is required" + exit 1 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext @@ -4381,54 +4671,434 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5 $as_echo "$ac_cv_qtversion" >&6; } + +# Check for Qt moc utility. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}moc", so it can be a program name with args. +set dummy ${ac_tool_prefix}moc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_moc+:} false; then : + $as_echo_n "(cached) " >&6 else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 5.1" >&5 -$as_echo_n "checking for Qt library version >= 5.1... " >&6; } -if ${ac_cv_qtversion+:} false; then : + case $ac_moc in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_moc="$ac_moc" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_moc="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_moc=$ac_cv_path_ac_moc +if test -n "$ac_moc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_moc" >&5 +$as_echo "$ac_moc" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_ac_moc"; then + ac_pt_ac_moc=$ac_moc + # Extract the first word of "moc", so it can be a program name with args. +set dummy moc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_moc+:} false; then : $as_echo_n "(cached) " >&6 else + case $ac_pt_ac_moc in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_moc="$ac_pt_ac_moc" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_moc="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_moc=$ac_cv_path_ac_pt_ac_moc +if test -n "$ac_pt_ac_moc"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_moc" >&5 +$as_echo "$ac_pt_ac_moc" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include "QtCore/qglobal.h" -int -main () -{ + if test "x$ac_pt_ac_moc" = x; then + ac_moc="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_moc=$ac_pt_ac_moc + fi +else + ac_moc="$ac_cv_path_ac_moc" +fi + +if test "x$ac_moc" = "xno"; then + as_fn_error $? "moc $ac_errmsg" "$LINENO" 5 +fi + + +# Check for Qt uic utility. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}uic", so it can be a program name with args. +set dummy ${ac_tool_prefix}uic; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_uic+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_uic in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_uic="$ac_uic" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_uic="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_uic=$ac_cv_path_ac_uic +if test -n "$ac_uic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_uic" >&5 +$as_echo "$ac_uic" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi - #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000 - #error Qt library 5.1 or greater required. - #endif - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_compile "$LINENO"; then : - ac_cv_qtversion="yes" +fi +if test -z "$ac_cv_path_ac_uic"; then + ac_pt_ac_uic=$ac_uic + # Extract the first word of "uic", so it can be a program name with args. +set dummy uic; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_uic+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_uic in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_uic="$ac_pt_ac_uic" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_uic="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_uic=$ac_cv_path_ac_pt_ac_uic +if test -n "$ac_pt_ac_uic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_uic" >&5 +$as_echo "$ac_pt_ac_uic" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_uic" = x; then + ac_uic="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_uic=$ac_pt_ac_uic + fi +else + ac_uic="$ac_cv_path_ac_uic" +fi + +if test "x$ac_uic" = "xno"; then + as_fn_error $? "uic $ac_errmsg" "$LINENO" 5 +fi + + + +# Check for Qt lupdate utility. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lupdate", so it can be a program name with args. +set dummy ${ac_tool_prefix}lupdate; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_lupdate+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_lupdate in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_lupdate="$ac_lupdate" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_lupdate="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_lupdate=$ac_cv_path_ac_lupdate +if test -n "$ac_lupdate"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lupdate" >&5 +$as_echo "$ac_lupdate" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_ac_lupdate"; then + ac_pt_ac_lupdate=$ac_lupdate + # Extract the first word of "lupdate", so it can be a program name with args. +set dummy lupdate; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_lupdate+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_lupdate in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_lupdate="$ac_pt_ac_lupdate" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_lupdate="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_lupdate=$ac_cv_path_ac_pt_ac_lupdate +if test -n "$ac_pt_ac_lupdate"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_lupdate" >&5 +$as_echo "$ac_pt_ac_lupdate" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_ac_lupdate" = x; then + ac_lupdate="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_lupdate=$ac_pt_ac_lupdate + fi +else + ac_lupdate="$ac_cv_path_ac_lupdate" +fi + +if test "x$ac_lupdate" = "xno"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lupdate-qt5", so it can be a program name with args. +set dummy ${ac_tool_prefix}lupdate-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_cv_lupdate+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_cv_lupdate in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_cv_lupdate="$ac_cv_lupdate" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_cv_lupdate="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_cv_lupdate=$ac_cv_path_ac_cv_lupdate +if test -n "$ac_cv_lupdate"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lupdate" >&5 +$as_echo "$ac_cv_lupdate" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_ac_cv_lupdate"; then + ac_pt_ac_cv_lupdate=$ac_cv_lupdate + # Extract the first word of "lupdate-qt5", so it can be a program name with args. +set dummy lupdate-qt5; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_ac_cv_lupdate+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_ac_cv_lupdate in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_ac_cv_lupdate="$ac_pt_ac_cv_lupdate" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $ac_path +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_ac_cv_lupdate="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_ac_cv_lupdate=$ac_cv_path_ac_pt_ac_cv_lupdate +if test -n "$ac_pt_ac_cv_lupdate"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_cv_lupdate" >&5 +$as_echo "$ac_pt_ac_cv_lupdate" >&6; } else - - echo "no; Qt 5.1 or greater is required" - exit 1 - + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test "x$ac_pt_ac_cv_lupdate" = x; then + ac_cv_lupdate="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_cv_lupdate=$ac_pt_ac_cv_lupdate + fi +else + ac_cv_lupdate="$ac_cv_path_ac_cv_lupdate" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5 -$as_echo "$ac_cv_qtversion" >&6; } + + if test "x$ac_cv_lupdate" = "xno"; then + as_fn_error $? "lupdate $ac_errmsg (qt5-linguist)" "$LINENO" 5 + else + ac_lupdate=$ac_cv_lupdate; + fi fi -# Check for Qt moc utility. -# Extract the first word of "moc", so it can be a program name with args. -set dummy moc; ac_word=$2 + +# Check for Qt lrelease utility. +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lrelease", so it can be a program name with args. +set dummy ${ac_tool_prefix}lrelease; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_moc+:} false; then : +if ${ac_cv_path_ac_lrelease+:} false; then : $as_echo_n "(cached) " >&6 else - case $ac_moc in + case $ac_lrelease in [\\/]* | ?:[\\/]*) - ac_cv_path_ac_moc="$ac_moc" # Let the user override the test with a path. + ac_cv_path_ac_lrelease="$ac_lrelease" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4438,7 +5108,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_moc="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_lrelease="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4446,36 +5116,32 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_moc" && ac_cv_path_ac_moc="no" ;; esac fi -ac_moc=$ac_cv_path_ac_moc -if test -n "$ac_moc"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_moc" >&5 -$as_echo "$ac_moc" >&6; } +ac_lrelease=$ac_cv_path_ac_lrelease +if test -n "$ac_lrelease"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lrelease" >&5 +$as_echo "$ac_lrelease" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -if test "x$ac_moc" = "xno"; then - as_fn_error $? "moc $ac_errmsg" "$LINENO" 5 fi - - -# Check for Qt uic utility. -# Extract the first word of "uic", so it can be a program name with args. -set dummy uic; ac_word=$2 +if test -z "$ac_cv_path_ac_lrelease"; then + ac_pt_ac_lrelease=$ac_lrelease + # Extract the first word of "lrelease", so it can be a program name with args. +set dummy lrelease; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_uic+:} false; then : +if ${ac_cv_path_ac_pt_ac_lrelease+:} false; then : $as_echo_n "(cached) " >&6 else - case $ac_uic in + case $ac_pt_ac_lrelease in [\\/]* | ?:[\\/]*) - ac_cv_path_ac_uic="$ac_uic" # Let the user override the test with a path. + ac_cv_path_ac_pt_ac_lrelease="$ac_pt_ac_lrelease" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4485,7 +5151,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_uic="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_pt_ac_lrelease="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4493,36 +5159,45 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_uic" && ac_cv_path_ac_uic="no" ;; esac fi -ac_uic=$ac_cv_path_ac_uic -if test -n "$ac_uic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_uic" >&5 -$as_echo "$ac_uic" >&6; } +ac_pt_ac_lrelease=$ac_cv_path_ac_pt_ac_lrelease +if test -n "$ac_pt_ac_lrelease"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_lrelease" >&5 +$as_echo "$ac_pt_ac_lrelease" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi - -if test "x$ac_uic" = "xno"; then - as_fn_error $? "uic $ac_errmsg" "$LINENO" 5 + if test "x$ac_pt_ac_lrelease" = x; then + ac_lrelease="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_lrelease=$ac_pt_ac_lrelease + fi +else + ac_lrelease="$ac_cv_path_ac_lrelease" fi - -# Check for Qt lupdate utility. -# Extract the first word of "lupdate", so it can be a program name with args. -set dummy lupdate; ac_word=$2 +if test "x$ac_lrelease" = "xno"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lrelease-qt5", so it can be a program name with args. +set dummy ${ac_tool_prefix}lrelease-qt5; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_lupdate+:} false; then : +if ${ac_cv_path_ac_cv_lrelease+:} false; then : $as_echo_n "(cached) " >&6 else - case $ac_lupdate in + case $ac_cv_lrelease in [\\/]* | ?:[\\/]*) - ac_cv_path_ac_lupdate="$ac_lupdate" # Let the user override the test with a path. + ac_cv_path_ac_cv_lrelease="$ac_cv_lrelease" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4532,7 +5207,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_lupdate="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_cv_lrelease="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4540,36 +5215,32 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_lupdate" && ac_cv_path_ac_lupdate="no" ;; esac fi -ac_lupdate=$ac_cv_path_ac_lupdate -if test -n "$ac_lupdate"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lupdate" >&5 -$as_echo "$ac_lupdate" >&6; } +ac_cv_lrelease=$ac_cv_path_ac_cv_lrelease +if test -n "$ac_cv_lrelease"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lrelease" >&5 +$as_echo "$ac_cv_lrelease" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -if test "x$ac_lupdate" = "xno"; then - as_fn_error $? "lupdate $ac_errmsg" "$LINENO" 5 fi - - -# Check for Qt lrelease utility. -# Extract the first word of "lrelease", so it can be a program name with args. -set dummy lrelease; ac_word=$2 +if test -z "$ac_cv_path_ac_cv_lrelease"; then + ac_pt_ac_cv_lrelease=$ac_cv_lrelease + # Extract the first word of "lrelease-qt5", so it can be a program name with args. +set dummy lrelease-qt5; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_lrelease+:} false; then : +if ${ac_cv_path_ac_pt_ac_cv_lrelease+:} false; then : $as_echo_n "(cached) " >&6 else - case $ac_lrelease in + case $ac_pt_ac_cv_lrelease in [\\/]* | ?:[\\/]*) - ac_cv_path_ac_lrelease="$ac_lrelease" # Let the user override the test with a path. + ac_cv_path_ac_pt_ac_cv_lrelease="$ac_pt_ac_cv_lrelease" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR @@ -4579,7 +5250,7 @@ test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_lrelease="$as_dir/$ac_word$ac_exec_ext" + ac_cv_path_ac_pt_ac_cv_lrelease="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi @@ -4587,22 +5258,38 @@ done IFS=$as_save_IFS - test -z "$ac_cv_path_ac_lrelease" && ac_cv_path_ac_lrelease="no" ;; esac fi -ac_lrelease=$ac_cv_path_ac_lrelease -if test -n "$ac_lrelease"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_lrelease" >&5 -$as_echo "$ac_lrelease" >&6; } +ac_pt_ac_cv_lrelease=$ac_cv_path_ac_pt_ac_cv_lrelease +if test -n "$ac_pt_ac_cv_lrelease"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_ac_cv_lrelease" >&5 +$as_echo "$ac_pt_ac_cv_lrelease" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi + if test "x$ac_pt_ac_cv_lrelease" = x; then + ac_cv_lrelease="no" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + ac_cv_lrelease=$ac_pt_ac_cv_lrelease + fi +else + ac_cv_lrelease="$ac_cv_path_ac_cv_lrelease" +fi -if test "x$ac_release" = "xno"; then - as_fn_error $? "lrelease $ac_errmsg" "$LINENO" 5 + if test "x$ac_cv_lrelease" = "xno"; then + as_fn_error $? "lrelease $ac_errmsg (qt5-linguist)" "$LINENO" 5 + else + ac_lrelease=$ac_cv_lrelease; + fi fi @@ -4726,54 +5413,6 @@ fi -# Check for round math function. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lroundf in -lm" >&5 -$as_echo_n "checking for lroundf in -lm... " >&6; } -if ${ac_cv_lib_m_lroundf+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char lroundf (); -int -main () -{ -return lroundf (); - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - ac_cv_lib_m_lroundf=yes -else - ac_cv_lib_m_lroundf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_lroundf" >&5 -$as_echo "$ac_cv_lib_m_lroundf" >&6; } -if test "x$ac_cv_lib_m_lroundf" = xyes; then : - ac_round="yes" -else - ac_round="no" -fi - -if test "x$ac_round" = "xyes"; then - -$as_echo "#define CONFIG_ROUND 1" >>confdefs.h - -fi # Check for JACK libraries. @@ -5452,7 +6091,6 @@ # Check D-Bus interface support. if test "x$ac_dbus" = "xyes"; then - if test "x$ac_qt4" = "xno"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT5DBUS" >&5 @@ -5524,79 +6162,6 @@ $as_echo "yes" >&6; } ac_dbus="yes" fi - else - -pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT4DBUS" >&5 -$as_echo_n "checking for QT4DBUS... " >&6; } - -if test -n "$QT4DBUS_CFLAGS"; then - pkg_cv_QT4DBUS_CFLAGS="$QT4DBUS_CFLAGS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtDBus\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtDBus") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_QT4DBUS_CFLAGS=`$PKG_CONFIG --cflags "QtDBus" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi -if test -n "$QT4DBUS_LIBS"; then - pkg_cv_QT4DBUS_LIBS="$QT4DBUS_LIBS" - elif test -n "$PKG_CONFIG"; then - if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"QtDBus\""; } >&5 - ($PKG_CONFIG --exists --print-errors "QtDBus") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - pkg_cv_QT4DBUS_LIBS=`$PKG_CONFIG --libs "QtDBus" 2>/dev/null` - test "x$?" != "x0" && pkg_failed=yes -else - pkg_failed=yes -fi - else - pkg_failed=untried -fi - - - -if test $pkg_failed = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then - _pkg_short_errors_supported=yes -else - _pkg_short_errors_supported=no -fi - if test $_pkg_short_errors_supported = yes; then - QT4DBUS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "QtDBus" 2>&1` - else - QT4DBUS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "QtDBus" 2>&1` - fi - # Put the nasty error message in config.log where it belongs - echo "$QT4DBUS_PKG_ERRORS" >&5 - - ac_dbus="no" -elif test $pkg_failed = untried; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ac_dbus="no" -else - QT4DBUS_CFLAGS=$pkg_cv_QT4DBUS_CFLAGS - QT4DBUS_LIBS=$pkg_cv_QT4DBUS_LIBS - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - ac_dbus="yes" -fi - fi fi if test "x$ac_dbus" = "xyes"; then @@ -5606,23 +6171,23 @@ fi -# Check for X11 unique/single instance. -if test "x$ac_xunique" = "xyes" -a "x$ac_qt4" = "xno"; then +# Check for unique/single instance support. +if test "x$ac_xunique" = "xyes"; then pkg_failed=no -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT5X11EXTRAS" >&5 -$as_echo_n "checking for QT5X11EXTRAS... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for QT5NETWORK" >&5 +$as_echo_n "checking for QT5NETWORK... " >&6; } -if test -n "$QT5X11EXTRAS_CFLAGS"; then - pkg_cv_QT5X11EXTRAS_CFLAGS="$QT5X11EXTRAS_CFLAGS" +if test -n "$QT5NETWORK_CFLAGS"; then + pkg_cv_QT5NETWORK_CFLAGS="$QT5NETWORK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5X11Extras\""; } >&5 - ($PKG_CONFIG --exists --print-errors "Qt5X11Extras") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Network\""; } >&5 + ($PKG_CONFIG --exists --print-errors "Qt5Network") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_QT5X11EXTRAS_CFLAGS=`$PKG_CONFIG --cflags "Qt5X11Extras" 2>/dev/null` + pkg_cv_QT5NETWORK_CFLAGS=`$PKG_CONFIG --cflags "Qt5Network" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -5630,16 +6195,16 @@ else pkg_failed=untried fi -if test -n "$QT5X11EXTRAS_LIBS"; then - pkg_cv_QT5X11EXTRAS_LIBS="$QT5X11EXTRAS_LIBS" +if test -n "$QT5NETWORK_LIBS"; then + pkg_cv_QT5NETWORK_LIBS="$QT5NETWORK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ - { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5X11Extras\""; } >&5 - ($PKG_CONFIG --exists --print-errors "Qt5X11Extras") 2>&5 + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"Qt5Network\""; } >&5 + ($PKG_CONFIG --exists --print-errors "Qt5Network") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - pkg_cv_QT5X11EXTRAS_LIBS=`$PKG_CONFIG --libs "Qt5X11Extras" 2>/dev/null` + pkg_cv_QT5NETWORK_LIBS=`$PKG_CONFIG --libs "Qt5Network" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes @@ -5660,36 +6225,30 @@ _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then - QT5X11EXTRAS_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5X11Extras" 2>&1` + QT5NETWORK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "Qt5Network" 2>&1` else - QT5X11EXTRAS_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5X11Extras" 2>&1` + QT5NETWORK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "Qt5Network" 2>&1` fi # Put the nasty error message in config.log where it belongs - echo "$QT5X11EXTRAS_PKG_ERRORS" >&5 + echo "$QT5NETWORK_PKG_ERRORS" >&5 - ac_xunique="no" + ac_qt5network="no" elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } - ac_xunique="no" + ac_qt5network="no" else - QT5X11EXTRAS_CFLAGS=$pkg_cv_QT5X11EXTRAS_CFLAGS - QT5X11EXTRAS_LIBS=$pkg_cv_QT5X11EXTRAS_LIBS + QT5NETWORK_CFLAGS=$pkg_cv_QT5NETWORK_CFLAGS + QT5NETWORK_LIBS=$pkg_cv_QT5NETWORK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } - ac_xunique="yes" -fi + ac_qt5network="yes" fi -if test "x$ac_xunique" = "xyes"; then + if test "x$ac_qt5network" = "xyes"; then $as_echo "#define CONFIG_XUNIQUE 1" >>confdefs.h - if test "x$ac_qt4" = "xno"; then - ac_qx11extras="x11extras" - fi - # Some recent distros (eg. fedora, debian) require this. - if test "x$ac_cv_lib_X11_main" = "xyes"; then - ac_libs="$ac_libs -lX11" + ac_qnetwork="network" fi fi @@ -5933,6 +6492,77 @@ fi +# Check for jack_set_port_rename_callback +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_set_port_rename_callback in -ljack" >&5 +$as_echo_n "checking for jack_set_port_rename_callback in -ljack... " >&6; } +if ${ac_cv_lib_jack_jack_set_port_rename_callback+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljack $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char jack_set_port_rename_callback (); +int +main () +{ +return jack_set_port_rename_callback (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_jack_jack_set_port_rename_callback=yes +else + ac_cv_lib_jack_jack_set_port_rename_callback=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jack_jack_set_port_rename_callback" >&5 +$as_echo "$ac_cv_lib_jack_jack_set_port_rename_callback" >&6; } +if test "x$ac_cv_lib_jack_jack_set_port_rename_callback" = xyes; then : + ac_jack_port_rename="yes" +else + ac_jack_port_rename="no" +fi + +if test "x$ac_jack_port_rename" = "xyes"; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ + + void port_rename(jack_port_id_t, const char *, const char *, void *); + jack_set_port_rename_callback(0, port_rename, 0); + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_jack_port_rename="yes" +else + ac_jack_port_rename="no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +if test "x$ac_jack_port_rename" = "xyes"; then + +$as_echo "#define CONFIG_JACK_PORT_RENAME 1" >>confdefs.h + +fi + # Check for jack_port_get_aliases function. if test "x$ac_jack_port_aliases" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_port_get_aliases in -ljack" >&5 @@ -6591,7 +7221,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by QjackCtl $as_me 0.4.5, which was +This file was extended by QjackCtl $as_me 0.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6653,7 +7283,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -QjackCtl config.status 0.4.5 +QjackCtl config.status 0.6.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -6778,7 +7408,6 @@ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "qjackctl.spec") CONFIG_FILES="$CONFIG_FILES qjackctl.spec" ;; "src/src.pri") CONFIG_FILES="$CONFIG_FILES src/src.pri" ;; - "src/qjackctl.desktop") CONFIG_FILES="$CONFIG_FILES src/qjackctl.desktop" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac @@ -7386,7 +8015,7 @@ echo " PortAudio interface support . . . . . . . . . . .: $ac_portaudio" echo " CoreAudio interface support . . . . . . . . . . .: $ac_coreaudio" echo -echo " X11 Unique/Single instance . . . . . . . . . . . .: $ac_xunique" +echo " Unique/Single instance support . . . . . . . . . .: $ac_xunique" echo " Debugger stack-trace (gdb) . . . . . . . . . . . .: $ac_stacktrace" echo echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix" diff -Nru qjackctl-0.4.5/configure.ac qjackctl-0.6.0/configure.ac --- qjackctl-0.4.5/configure.ac 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/configure.ac 2019-10-17 07:45:45.945673225 +0000 @@ -1,9 +1,9 @@ # Process this file with autoconf to produce a configure script. -AC_INIT(QjackCtl, 0.4.5, rncbc@rncbc.org, qjackctl) +AC_INIT(QjackCtl, 0.6.0, rncbc@rncbc.org, qjackctl) AC_CONFIG_SRCDIR(src/qjackctl.cpp) AC_CONFIG_HEADERS(src/config.h) -AC_CONFIG_FILES(Makefile qjackctl.spec src/src.pri src/qjackctl.desktop) +AC_CONFIG_FILES(Makefile qjackctl.spec src/src.pri) # Build version string. AC_CACHE_VAL([ac_cv_build_version], [ @@ -25,7 +25,7 @@ # Sanitized version string. AC_CACHE_VAL([ac_cv_version], [ - ac_cv_version=$(echo $ac_cv_build_version | sed -r 's/^([[0-9|\.]]+).*$/\1/') + ac_cv_version=$(echo $PACKAGE_VERSION | sed -r 's/^([[0-9|\.]]+).*$/\1/') ]) ac_version="$ac_cv_version" AC_DEFINE_UNQUOTED(CONFIG_VERSION, ["$ac_version"], [Version string.]) @@ -64,7 +64,7 @@ # Enable debugging argument option. AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug], [enable debugging (default=no)]), + AS_HELP_STRING([--enable-debug], [enable debugging (default=no)]), [ac_debug="$enableval"]) if test "x$ac_debug" = "xyes"; then @@ -78,113 +78,98 @@ AC_SUBST(ac_debug) -# Enable Qt4/5 availability. -AC_ARG_ENABLE(qt4, - AC_HELP_STRING([--enable-qt4], [enable Qt4 build (default=no)]), - [ac_qt4="$enableval"], - [ac_qt4="no"]) - # Disable system tray argument option. AC_ARG_ENABLE(system_tray, - AC_HELP_STRING([--enable-system-tray], [enable system tray (default=yes)]), + AS_HELP_STRING([--enable-system-tray], [enable system tray (default=yes)]), [ac_system_tray="$enableval"], [ac_system_tray="yes"]) # Disable JACK MIDI support option. AC_ARG_ENABLE(jack_midi, - AC_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]), + AS_HELP_STRING([--enable-jack-midi], [enable JACK MIDI support (default=yes)]), [ac_jack_midi="$enableval"], [ac_jack_midi="yes"]) # Enable JACK session support. AC_ARG_ENABLE(jack_session, - AC_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]), + AS_HELP_STRING([--enable-jack-session], [enable JACK session support (default=yes)]), [ac_jack_session="$enableval"], [ac_jack_session="yes"]) # Enable JACK port aliases support. AC_ARG_ENABLE(jack_port_aliases, - AC_HELP_STRING([--enable-jack-port-aliases], [enable JACK port aliases support (default=yes)]), + AS_HELP_STRING([--enable-jack-port-aliases], [enable JACK port aliases support (default=yes)]), [ac_jack_port_aliases="$enableval"], [ac_jack_port_aliases="yes"]) # Enable JACK metadata support. AC_ARG_ENABLE(jack_metadata, - AC_HELP_STRING([--enable-jack-metadata], [enable JACK metadata support (default=yes)]), + AS_HELP_STRING([--enable-jack-metadata], [enable JACK metadata support (default=yes)]), [ac_jack_metadata="$enableval"], [ac_jack_metadata="yes"]) # Enable JACK version support. AC_ARG_ENABLE(jack_version, - AC_HELP_STRING([--enable-jack-version], [enable JACK version support (default=no)]), + AS_HELP_STRING([--enable-jack-version], [enable JACK version support (default=no)]), [ac_jack_version="$enableval"], [ac_jack_version="no"]) -# Disable ALSA sequencer support option. +# Enable ALSA sequencer support option. AC_ARG_ENABLE(alsa_seq, - AC_HELP_STRING([--enable-alsa-seq], [enable ALSA/MIDI sequencer support (default=yes)]), + AS_HELP_STRING([--enable-alsa-seq], [enable ALSA/MIDI sequencer support (default=yes)]), [ac_alsa_seq="$enableval"], [ac_alsa_seq="yes"]) # Enable PortAudio argument option. AC_ARG_ENABLE(portaudio, - AC_HELP_STRING([--enable-portaudio], [enable PortAudio interface (default=yes)]), + AS_HELP_STRING([--enable-portaudio], [enable PortAudio interface (default=yes)]), [ac_portaudio="$enableval"], [ac_portaudio="yes"]) # Enable D-Bus argument option. AC_ARG_ENABLE(dbus, - AC_HELP_STRING([--enable-dbus], [enable D-Bus interface (default=yes)]), + AS_HELP_STRING([--enable-dbus], [enable D-Bus interface (default=yes)]), [ac_dbus="$enableval"], [ac_dbus="yes"]) -# Enable X11 unique/single instance. +# Enable unique/single instance. AC_ARG_ENABLE(xunique, - AC_HELP_STRING([--enable-xunique], [enable X11 unique/single instance (default=yes)]), + AS_HELP_STRING([--enable-xunique], [enable unique/single instance (default=yes)]), [ac_xunique="$enableval"], [ac_xunique="yes"]) # Enable debugger stack-trace option (assumes --enable-debug). AC_ARG_ENABLE(stacktrace, - AC_HELP_STRING([--enable-stacktrace], [enable debugger stack-trace (default=no)]), + AS_HELP_STRING([--enable-stacktrace], [enable debugger stack-trace (default=no)]), [ac_stacktrace="$enableval"]) # Standard installation base dirs. +ac_path=$PATH ac_with_paths="" -# Set for alternate Qt4/5 installation dir. -AC_ARG_WITH(qt4, - AC_HELP_STRING([--with-qt4=PATH], [use alternate Qt4 install path]), - [ac_qt4_path="$withval"], [ac_qt4_path="no"]) - -AC_ARG_WITH(qt5, - AC_HELP_STRING([--with-qt5=PATH], [use alternate Qt5 install path]), - [ac_qt5_path="$withval"], [ac_qt5_path="no"]) - -if test "x$ac_qt4_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt4_path" - ac_qt4="yes" -fi - -if test "x$ac_qt5_path" != "xno"; then - ac_with_paths="$ac_with_paths $ac_qt5_path" - ac_qt4="no" +# Set for alternate Qt installation dir. +AC_ARG_WITH(qt, + AS_HELP_STRING([--with-qt=PATH], [use alternate Qt install path]), + [ac_qt_path="$withval"], [ac_qt_path="no"]) + +if test "x$ac_qt_path" != "xno"; then + ac_path="$ac_qt_path/bin:$ac_path" fi # Set for alternate JACK installation dir. AC_ARG_WITH(jack, - AC_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]), + AS_HELP_STRING([--with-jack=PATH], [use alternate JACK install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate ALSA installation dir. AC_ARG_WITH(alsa, - AC_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]), + AS_HELP_STRING([--with-alsa=PATH], [use alternate ALSA install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate PortAudio installation dir. AC_ARG_WITH(portaudio, - AC_HELP_STRING([--with-portaudio=PATH], [use alternate PortAudio install path]), + AS_HELP_STRING([--with-portaudio=PATH], [use alternate PortAudio install path]), [ac_with_paths="$ac_with_paths $withval"]) @@ -213,8 +198,9 @@ ac_gxx_version_major=$(($ac_cv_gxx_version_major + 0)) ]) ac_gxx_version_major=$ac_cv_gxx_version_major -if test $ac_gxx_version_major -gt 4 -a $ac_gxx_version_major -lt 6; then - CXXFLAGS="-std=c++11 $CXXFLAGS" +if test $ac_gxx_version_major -ge 4 -a $ac_gxx_version_major -lt 6; then + CPPFLAGS="-std=c++11 $CPPFLAGS" + ac_cflags="-std=c++11 $ac_cflags" fi # Check for proper flags. @@ -231,40 +217,38 @@ CPPFLAGS="-fPIC $CPPFLAGS" # Prepend alternate dependencies paths. -ac_path=$PATH - for X in $ac_with_paths; do if test -d $X/bin; then - ac_path="$X/bin:$ac_path" + ac_path="$X/bin:$ac_path" fi if test -d $X/include; then - CFLAGS="-I$X/include $CFLAGS " - CPPFLAGS="-I$X/include $CPPFLAGS" - ac_incpath="$X/include $ac_incpath" + CFLAGS="-I$X/include $CFLAGS " + CPPFLAGS="-I$X/include $CPPFLAGS" + ac_incpath="$X/include $ac_incpath" fi for Y in $ac_libdirs; do - if test -d $X/$Y; then - LIBS="-L$X/$Y $LIBS" - ac_libs="-L$X/$Y $ac_libs" - fi + if test -d $X/$Y; then + LIBS="-L$X/$Y $LIBS" + ac_libs="-L$X/$Y $ac_libs" + fi done done # A common error message: ac_errmsg="not found in current PATH. Maybe QT development environment isn't available." -if test "x$ac_qt4" = "xyes"; then - AC_PATH_PROG(ac_qmake, qmake-qt4, [no], $ac_path) -else - AC_PATH_PROG(ac_qmake, qmake-qt5, [no], $ac_path) +# Check for qtchooser availability. +AC_PATH_TOOL(ac_qtchooser, qtchooser, [no], $ac_path) +if test -x $ac_qtchooser; then + export QT_SELECT=5 fi + +# Check for proper qmake path/version alternatives. +AC_PATH_TOOL(ac_qmake, qmake, [no], $ac_path) if test "x$ac_qmake" = "xno"; then - AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path) + AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path) ac_qmake=$ac_cv_qmake fi -if test "x$ac_qmake" = "xno"; then - AC_MSG_ERROR([qmake $ac_errmsg]) -fi # Check for proper Qt major version. AC_CACHE_CHECK([for Qt major version], [ac_cv_qt_version_major], [ @@ -272,14 +256,13 @@ ac_cv_qt_version_major=$(($ac_cv_qt_version_major + 0)) ]) ac_qt_version_major=$ac_cv_qt_version_major -if test "x$ac_qt4" = "xyes"; then - if test $ac_qt_version_major -ne 4; then - AC_MSG_ERROR([qmake-qt4 $ac_errmsg (qt4-devel)]) - fi -else - if test $ac_qt_version_major -ne 5; then - AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)]) - fi +if test $ac_qt_version_major -ne 5; then + AC_PATH_TOOL(ac_cv_qmake, qmake-qt5, [no], $ac_path) + ac_qmake=$ac_cv_qmake +fi + +if test "x$ac_qmake" = "xno"; then + AC_MSG_ERROR([qmake-qt5 $ac_errmsg (qt5-devel)]) fi # Check for proper Qt install path. @@ -292,7 +275,7 @@ fi # Check it again, now with updated PATH, just in case... -AC_PATH_PROG(ac_cv_qmake, qmake, [no], $ac_path) +AC_PATH_TOOL(ac_cv_qmake, qmake, [no], $ac_path) ac_qmake=$ac_cv_qmake if test "x$ac_qmake" = "xno"; then AC_MSG_ERROR([qmake $ac_errmsg]) @@ -319,58 +302,55 @@ ac_libs="-L$ac_qt_install_libs $ac_libs" fi -# Finally, check for proper Qt4/5 version. -if test "x$ac_qt4" = "xyes"; then - AC_CACHE_CHECK([for Qt library version >= 4.4], - ac_cv_qtversion, [ - AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ - #if QT_VERSION < 0x040400 || QT_VERSION >= 0x050000 - #error Qt library 4.4 or greater required. - #endif - ], ac_cv_qtversion="yes", [ - echo "no; Qt 4.4 or greater is required" - exit 1 - ]) +# Finally, check for proper Qt version. +AC_CACHE_CHECK([for Qt library version >= 5.1], + ac_cv_qtversion, [ + AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ + #if QT_VERSION < 0x050100 + #error Qt library 5.1 or greater required. + #endif + ], ac_cv_qtversion="yes", [ + echo "no; Qt 5.1 or greater is required" + exit 1 ]) -else - AC_CACHE_CHECK([for Qt library version >= 5.1], - ac_cv_qtversion, [ - AC_TRY_COMPILE([#include "QtCore/qglobal.h"], [ - #if QT_VERSION < 0x050100 || QT_VERSION >= 0x060000 - #error Qt library 5.1 or greater required. - #endif - ], ac_cv_qtversion="yes", [ - echo "no; Qt 5.1 or greater is required" - exit 1 - ]) - ]) -fi +]) # Check for Qt moc utility. -AC_PATH_PROG(ac_moc, moc, [no], $ac_path) +AC_PATH_TOOL(ac_moc, moc, [no], $ac_path) if test "x$ac_moc" = "xno"; then AC_MSG_ERROR([moc $ac_errmsg]) fi AC_SUBST(ac_moc) # Check for Qt uic utility. -AC_PATH_PROG(ac_uic, uic, [no], $ac_path) +AC_PATH_TOOL(ac_uic, uic, [no], $ac_path) if test "x$ac_uic" = "xno"; then AC_MSG_ERROR([uic $ac_errmsg]) fi AC_SUBST(ac_uic) + # Check for Qt lupdate utility. -AC_PATH_PROG(ac_lupdate, lupdate, [no], $ac_path) +AC_PATH_TOOL(ac_lupdate, lupdate, [no], $ac_path) if test "x$ac_lupdate" = "xno"; then - AC_MSG_ERROR([lupdate $ac_errmsg]) + AC_PATH_TOOL(ac_cv_lupdate, lupdate-qt5, [no], $ac_path) + if test "x$ac_cv_lupdate" = "xno"; then + AC_MSG_ERROR([lupdate $ac_errmsg (qt5-linguist)]) + else + ac_lupdate=$ac_cv_lupdate; + fi fi AC_SUBST(ac_lupdate) # Check for Qt lrelease utility. -AC_PATH_PROG(ac_lrelease, lrelease, [no], $ac_path) -if test "x$ac_release" = "xno"; then - AC_MSG_ERROR([lrelease $ac_errmsg]) +AC_PATH_TOOL(ac_lrelease, lrelease, [no], $ac_path) +if test "x$ac_lrelease" = "xno"; then + AC_PATH_TOOL(ac_cv_lrelease, lrelease-qt5, [no], $ac_path) + if test "x$ac_cv_lrelease" = "xno"; then + AC_MSG_ERROR([lrelease $ac_errmsg (qt5-linguist)]) + else + ac_lrelease=$ac_cv_lrelease; + fi fi AC_SUBST(ac_lrelease) @@ -380,11 +360,6 @@ AC_CHECK_LIB(X11, main) AC_CHECK_LIB(Xext, main) -# Check for round math function. -AC_CHECK_LIB(m, lroundf, [ac_round="yes"], [ac_round="no"]) -if test "x$ac_round" = "xyes"; then - AC_DEFINE(CONFIG_ROUND, 1, [Define if round is available.]) -fi # Check for JACK libraries. PKG_CHECK_MODULES([JACK], [jack >= 0.100.0], [ac_jack_lib="yes"], [ac_jack_lib="no"]) @@ -481,11 +456,7 @@ # Check D-Bus interface support. if test "x$ac_dbus" = "xyes"; then - if test "x$ac_qt4" = "xno"; then - PKG_CHECK_MODULES([QT5DBUS], [Qt5DBus], [ac_dbus="yes"], [ac_dbus="no"]) - else - PKG_CHECK_MODULES([QT4DBUS], [QtDBus], [ac_dbus="yes"], [ac_dbus="no"]) - fi + PKG_CHECK_MODULES([QT5DBUS], [Qt5DBus], [ac_dbus="yes"], [ac_dbus="no"]) fi if test "x$ac_dbus" = "xyes"; then AC_DEFINE(CONFIG_DBUS, 1, [Define if D-Bus interface is enabled.]) @@ -493,21 +464,15 @@ fi AC_SUBST(ac_qdbus) -# Check for X11 unique/single instance. -if test "x$ac_xunique" = "xyes" -a "x$ac_qt4" = "xno"; then - PKG_CHECK_MODULES([QT5X11EXTRAS], [Qt5X11Extras], [ac_xunique="yes"], [ac_xunique="no"]) -fi +# Check for unique/single instance support. if test "x$ac_xunique" = "xyes"; then - AC_DEFINE(CONFIG_XUNIQUE, 1, [Define if X11 unique/single instance is enabled.]) - if test "x$ac_qt4" = "xno"; then - ac_qx11extras="x11extras" - fi - # Some recent distros (eg. fedora, debian) require this. - if test "x$ac_cv_lib_X11_main" = "xyes"; then - ac_libs="$ac_libs -lX11" + PKG_CHECK_MODULES([QT5NETWORK], [Qt5Network], [ac_qt5network="yes"], [ac_qt5network="no"]) + if test "x$ac_qt5network" = "xyes"; then + AC_DEFINE(CONFIG_XUNIQUE, 1, [Define if unique/single instance is enabled.]) + ac_qnetwork="network" fi fi -AC_SUBST(ac_qx11extras) +AC_SUBST(ac_qnetwork) # Check for debugging stack-trace. if test "x$ac_stacktrace" = "xyes"; then @@ -559,6 +524,18 @@ AC_DEFINE(CONFIG_JACK_MAX_DELAY, 1, [Define if jack_get_max_delayed_usecs is available.]) fi +# Check for jack_set_port_rename_callback +AC_CHECK_LIB(jack, jack_set_port_rename_callback, [ac_jack_port_rename="yes"], [ac_jack_port_rename="no"]) +if test "x$ac_jack_port_rename" = "xyes"; then + AC_TRY_COMPILE([#include ], [ + void port_rename(jack_port_id_t, const char *, const char *, void *); + jack_set_port_rename_callback(0, port_rename, 0); + ], ac_jack_port_rename="yes", ac_jack_port_rename="no") +fi +if test "x$ac_jack_port_rename" = "xyes"; then + AC_DEFINE(CONFIG_JACK_PORT_RENAME, 1, [Define if jack_set_port_rename_callback is available.]) +fi + # Check for jack_port_get_aliases function. if test "x$ac_jack_port_aliases" = "xyes"; then AC_CHECK_LIB(jack, jack_port_get_aliases, [ac_jack_port_aliases="yes"], [ac_jack_port_aliases="no"]) @@ -609,7 +586,7 @@ echo " PortAudio interface support . . . . . . . . . . .: $ac_portaudio" echo " CoreAudio interface support . . . . . . . . . . .: $ac_coreaudio" echo -echo " X11 Unique/Single instance . . . . . . . . . . . .: $ac_xunique" +echo " Unique/Single instance support . . . . . . . . . .: $ac_xunique" echo " Debugger stack-trace (gdb) . . . . . . . . . . . .: $ac_stacktrace" echo echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix" diff -Nru qjackctl-0.4.5/debian/changelog qjackctl-0.6.0/debian/changelog --- qjackctl-0.4.5/debian/changelog 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/changelog 2019-11-17 22:20:08.000000000 +0000 @@ -1,15 +1,66 @@ -qjackctl (0.4.5-1ubuntu1) artful; urgency=medium +qjackctl (0.6.0-1~18.04) bionic; urgency=medium - * Merge with Debian unstable (LP: #1709796). - * Drop: New upstream minor release. - - Partially fixes issues with systray icon (LP: #1546328). - * Remaining changes: - - Fix and refresh Ubuntu-specific patches to fix FTBFS. - - Refresh 90_dbus_setting.patch. - - Extend 90_dbus_setting.patch to enable JACK D-Bus interface too - (LP: #1567589). + * Backport. - -- Ross Gammon Mon, 21 Aug 2017 23:06:44 +0200 + -- DNS Tue, 17 Nov 2019 23:20:08 +0100 + +qjackctl (0.6.0-1) unstable; urgency=medium + + * Team upload + + [ Ondřej Nový ] + * Bump Standards-Version to 4.4.1 + + [ Olivier Humbert ] + * Update copyright (http -> https) + + [ Dennis Braun ] + * New upstream release. + * debian/copyright + + Update copyright years and authors. + + Add FSAP license. + + -- Dennis Braun Mon, 16 Dec 2019 12:40:21 +0100 + +qjackctl (0.5.9-1) unstable; urgency=medium + + [ Ondřej Nový ] + * d/copyright: Use https protocol in Format field + * d/control: Set Vcs-* to salsa.debian.org + + [ Felipe Sateler ] + * Change maintainer address to debian-multimedia@lists.debian.org + + [ Olivier Humbert ] + * Update copyright years for Rui (upstream) + + [ Ondřej Nový ] + * Use debhelper-compat instead of debian/compat + + [ Sebastian Ramacher ] + * New upstream release. + - Use AC_PATH_TOOL. (Closes: #902403) + * debian/control: + - Bump debhelper compat to 12. + - Bump Standards-Version. + * debian/rules: Remove QT_SELECT, no longer needed. + + -- Sebastian Ramacher Fri, 06 Sep 2019 08:59:08 +0200 + +qjackctl (0.5.0-1) unstable; urgency=medium + + * New upstream version 0.5.0 + * Bump Standards. + * Use git instead of cgit in VCS. + * Use secure uri where possible. + * Delete unused ubuntu patches. + * Don't delete desktop file after build. + * Delete redundant files. + * Introduce postclone.sh script to ignore .pc/ dir. + * Switch to short dh. + * Add patch to fix hardening. + + -- Jaromír Mikeš Sun, 17 Dec 2017 15:42:35 +0100 qjackctl (0.4.5-1) unstable; urgency=medium @@ -59,27 +110,6 @@ -- Jaromír Mikeš Tue, 14 Jun 2016 20:05:46 +0200 -qjackctl (0.4.2-0ubuntu2) xenial; urgency=medium - - * Extend 90_dbus_setting.patch to enable JACK D-Bus interface too - (LP: #1567589). - - -- Dmitry Shachnev Thu, 07 Apr 2016 23:01:12 +0200 - -qjackctl (0.4.2-0ubuntu1) xenial; urgency=medium - - * New upstream minor release. - - Partially fixes issues with systray icon (LP: #1546328). - * Refresh 90_dbus_setting.patch. - - -- Dmitry Shachnev Wed, 06 Apr 2016 22:38:28 +0200 - -qjackctl (0.4.1-1ubuntu1) xenial; urgency=medium - - * Fix and refresh Ubuntu-specific patches to fix FTBFS. - - -- Logan Rosen Sun, 08 Nov 2015 05:07:06 -0500 - qjackctl (0.4.1-1) unstable; urgency=medium * Imported Upstream version 0.4.1 diff -Nru qjackctl-0.4.5/debian/compat qjackctl-0.6.0/debian/compat --- qjackctl-0.4.5/debian/compat 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/compat 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -10 diff -Nru qjackctl-0.4.5/debian/control qjackctl-0.6.0/debian/control --- qjackctl-0.4.5/debian/control 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/control 2019-11-17 22:20:08.000000000 +0000 @@ -1,25 +1,23 @@ Source: qjackctl Section: sound Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Multimedia Maintainers +Maintainer: Debian Multimedia Maintainers Uploaders: Adrian Knoth , Jaromír Mikeš , Free Ekanayaka Build-Depends: - cdbs, - debhelper (>= 10), + debhelper-compat (= 12), libasound2-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], libjack-dev, qtbase5-dev, qttools5-dev-tools, libqt5x11extras5-dev, libx11-dev -Standards-Version: 4.0.0 -Homepage: http://qjackctl.sourceforge.net -Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/qjackctl.git -Vcs-Browser: https://anonscm.debian.org/cgit/pkg-multimedia/qjackctl.git +Standards-Version: 4.4.1 +Homepage: https://qjackctl.sourceforge.io +Vcs-Git: https://salsa.debian.org/multimedia-team/qjackctl.git +Vcs-Browser: https://salsa.debian.org/multimedia-team/qjackctl Package: qjackctl Architecture: any @@ -27,8 +25,6 @@ jackd, ${misc:Depends}, ${shlibs:Depends} -Recommends: - ${dist:Recommends} Suggests: pulseaudio-utils Description: User interface for controlling the JACK sound server diff -Nru qjackctl-0.4.5/debian/copyright qjackctl-0.6.0/debian/copyright --- qjackctl-0.4.5/debian/copyright 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/copyright 2019-11-17 22:20:08.000000000 +0000 @@ -1,19 +1,27 @@ -Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: qjackctl Upstream-Contact: Rui Nuno Capela -Source: http://sourceforge.net/projects/qjackctl/files/ -Copyright: 2003-2014 rncbc aka Rui Nuno Capela +Source: https://sourceforge.net/projects/qjackctl/files/ +Copyright: 2003-2019 rncbc aka Rui Nuno Capela Files: * Copyright: - 2003-2014 Rui Nuno Capela + 2003-2019 Rui Nuno Capela License: GPL-2+ Files: + src/appdata/qjackctl.appdata.xml +Copyright: + 2003-2018 Rui Nuno Capela + 2015 Olivier Humbert +License: FSFAP + +Files: src/qjackctlInterfaceComboBox.cpp src/qjackctlInterfaceComboBox.h Copyright: - 2003-2013 Rui Nuno Capela + 2003-2019 Rui Nuno Capela + 2015, Kjetil Matheussen 2013, Arnout Engelen License: GPL-2+ @@ -26,6 +34,12 @@ 2014-2017 Jaromír Mikeš License: GPL-2+ +License: FSFAP + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. This file is offered as-is, + without any warranty. + License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,7 +52,7 @@ GNU General Public License for more details. . You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . . On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL-2'. diff -Nru qjackctl-0.4.5/debian/gbp/postclone.sh qjackctl-0.6.0/debian/gbp/postclone.sh --- qjackctl-0.4.5/debian/gbp/postclone.sh 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/debian/gbp/postclone.sh 2019-11-17 22:20:08.000000000 +0000 @@ -0,0 +1,14 @@ +#!/bin/sh + +## script to initialize a cloned repository +## with per (local) repository settings. + +# - ignore quilt's .pc/ directory +# - enable the "--follow-tags" mode for pushing + +echo "tuning git-repository for ${NAME}" +git config push.followTags true && echo "enabled push.followTags" + +GITEXCLUDE=".git/info/exclude" +egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \ + || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/") diff -Nru qjackctl-0.4.5/debian/patches/0001-hardening.patch qjackctl-0.6.0/debian/patches/0001-hardening.patch --- qjackctl-0.4.5/debian/patches/0001-hardening.patch 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/debian/patches/0001-hardening.patch 2019-11-17 22:20:08.000000000 +0000 @@ -0,0 +1,20 @@ +Description: Fix hardening by passing flags +Author: Jaromír Mikeš +Forwarded: no + +Index: qjackctl/src/src.pri.in +=================================================================== +--- qjackctl.orig/src/src.pri.in ++++ qjackctl/src/src.pri.in +@@ -13,8 +13,9 @@ INCLUDEPATH += @ac_incpath@ + LIBS += @ac_libs@ + + # Extra optimization flags +-QMAKE_CXXFLAGS += @ac_cflags@ +-QMAKE_LFLAGS += @ac_ldflags@ ++QMAKE_CXXFLAGS += $(CPPFLAGS) @ac_cflags@ ++QMAKE_CFLAGS += $(CPPFLAGS) ++QMAKE_LFLAGS += $(LDFLAGS) @ac_ldflags@ + + # D-BUS support + QDBUS = @ac_qdbus@ diff -Nru qjackctl-0.4.5/debian/patches/00_settings.patch qjackctl-0.6.0/debian/patches/00_settings.patch --- qjackctl-0.4.5/debian/patches/00_settings.patch 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/patches/00_settings.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,29 +0,0 @@ -Description: Apply Debian-specific patches. - This patch was modified from the original debian patch. - It changes the default jackd patch to /usr/bin/jackd. - In addition, the preset sample rate is 44100. -Origin: Debian -Author: Chris J Arges -Forwarded: not-needed -Last-Update: <2012-06-21> - ---- a/src/qjackctlSetup.cpp -+++ b/src/qjackctlSetup.cpp -@@ -363,7 +363,7 @@ - #if defined(WIN32) - preset.sServerPrefix = m_settings.value("/Server", "jackd -S").toString(); - #else -- preset.sServerPrefix = m_settings.value("/Server", "jackd").toString(); -+ preset.sServerPrefix = m_settings.value("/Server", "/usr/bin/jackd").toString(); - #endif - preset.sServerName = m_settings.value("/ServerName").toString(); - preset.bRealtime = m_settings.value("/Realtime", true).toBool(); -@@ -377,7 +377,7 @@ - preset.bIgnoreHW = m_settings.value("/IgnoreHW", false).toBool(); - preset.iPriority = m_settings.value("/Priority", 0).toInt(); - preset.iFrames = m_settings.value("/Frames", 1024).toInt(); -- preset.iSampleRate = m_settings.value("/SampleRate", 48000).toInt(); -+ preset.iSampleRate = m_settings.value("/SampleRate", 44100).toInt(); - preset.iPeriods = m_settings.value("/Periods", 2).toInt(); - preset.iWordLength = m_settings.value("/WordLength", 16).toInt(); - preset.iWait = m_settings.value("/Wait", 21333).toInt(); diff -Nru qjackctl-0.4.5/debian/patches/90_dbus_setting.patch qjackctl-0.6.0/debian/patches/90_dbus_setting.patch --- qjackctl-0.4.5/debian/patches/90_dbus_setting.patch 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/patches/90_dbus_setting.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -Description: Enable dbus by default to ease cooperation between JACK and Pulse -Author: David Henningsson -Bug-Ubuntu: https://launchpad.net/bugs/803026 ---- - src/qjackctlSetup.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- a/src/qjackctlSetup.cpp -+++ b/src/qjackctlSetup.cpp -@@ -122,8 +122,8 @@ - sServerConfigName = m_settings.value("/ServerConfigName", ".jackdrc").toString(); - bServerConfigTemp = m_settings.value("/ServerConfigTemp", false).toBool(); - bAlsaSeqEnabled = m_settings.value("/AlsaSeqEnabled", true).toBool(); -- bDBusEnabled = m_settings.value("/DBusEnabled", false).toBool(); -- bJackDBusEnabled = m_settings.value("/JackDBusEnabled", false).toBool(); -+ bDBusEnabled = m_settings.value("/DBusEnabled", true).toBool(); -+ bJackDBusEnabled = m_settings.value("/JackDBusEnabled", true).toBool(); - bAliasesEnabled = m_settings.value("/AliasesEnabled", false).toBool(); - bAliasesEditing = m_settings.value("/AliasesEditing", false).toBool(); - bLeftButtons = m_settings.value("/LeftButtons", true).toBool(); diff -Nru qjackctl-0.4.5/debian/patches/series qjackctl-0.6.0/debian/patches/series --- qjackctl-0.4.5/debian/patches/series 2017-08-15 15:57:14.000000000 +0000 +++ qjackctl-0.6.0/debian/patches/series 2019-11-17 22:20:08.000000000 +0000 @@ -1,2 +1 @@ -00_settings.patch -90_dbus_setting.patch +0001-hardening.patch diff -Nru qjackctl-0.4.5/debian/patches/ubuntu.series qjackctl-0.6.0/debian/patches/ubuntu.series --- qjackctl-0.4.5/debian/patches/ubuntu.series 2017-08-15 15:57:14.000000000 +0000 +++ qjackctl-0.6.0/debian/patches/ubuntu.series 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -00_settings.patch -90_dbus_setting.patch diff -Nru qjackctl-0.4.5/debian/qjackctl.install qjackctl-0.6.0/debian/qjackctl.install --- qjackctl-0.4.5/debian/qjackctl.install 2017-08-15 15:57:14.000000000 +0000 +++ qjackctl-0.6.0/debian/qjackctl.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -debian/qjackctl.xpm usr/share/pixmaps diff -Nru qjackctl-0.4.5/debian/qjackctl.xpm qjackctl-0.6.0/debian/qjackctl.xpm --- qjackctl-0.4.5/debian/qjackctl.xpm 2017-08-15 15:57:14.000000000 +0000 +++ qjackctl-0.6.0/debian/qjackctl.xpm 1970-01-01 00:00:00.000000000 +0000 @@ -1,50 +0,0 @@ -/* XPM */ -static char * qjackctl_xpm[] = { -"32 32 15 1", -" c None", -". c #000000", -"+ c #4C4C4C", -"@ c #666666", -"# c #191919", -"$ c #B2B2B2", -"% c #333333", -"& c #999999", -"* c #CCCCCC", -"= c #827F00", -"- c #E5E5E5", -"; c #7F0000", -"> c #7F7F7F", -", c #FFFF00", -"' c #FFFFFF", -" ", -" @.. ", -" ..-. ", -" @..-. ", -" @..-.+.. ", -" @..@.%%## ", -" @.%&$&+#. ", -" +.%=$$$&@## ", -" +.@*$&$*&@#. ", -" +#@&,$&$*$@.# ", -" @#%;&,*&&++=%. ", -" @#+%$,$@@*$&%# ", -" +#++$=&$=$*&%# ", -" +;%;+*,$&$&%%. ", -" +#%+$*,$@%%@%+ ", -" +#;+&*=+;&*&. ", -" +##%@+#$=+=# ", -" +#%;%$=#>.+ ", -" +##%=+&-'. ", -" +.;+=.>-'. ", -" @...@.>-'. ", -" +#@-'. ", -" @.>-'. ", -" @.@@*. ", -" @.>-$. ", -" @.>@.> ", -" @.#-. ", -" +.. ", -" ", -" ", -" ", -" "}; diff -Nru qjackctl-0.4.5/debian/README.source qjackctl-0.6.0/debian/README.source --- qjackctl-0.4.5/debian/README.source 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/debian/README.source 2019-11-17 22:20:08.000000000 +0000 @@ -0,0 +1,22 @@ +gbp clone +--------- + +Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the +repository in the following ways: +- make git ignore any .pc/ directory (created by quilt) +- enable the "--follow-tags" when running 'git-push', so it's harder + to forget to push packaging tags along with the branches. + +To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh' +option. +To enable this for ALL repositories cloned via 'gbp' (in the future), do +something like the following: + + $ mkdir -p ~/bin + $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone + $ cat >> ~/.gbp.conf < Mon, 1 Aug 2016 12:15:50 +0200 diff -Nru qjackctl-0.4.5/debian/rules qjackctl-0.6.0/debian/rules --- qjackctl-0.4.5/debian/rules 2017-08-21 21:06:44.000000000 +0000 +++ qjackctl-0.6.0/debian/rules 2019-11-17 22:20:08.000000000 +0000 @@ -1,24 +1,13 @@ #!/usr/bin/make -f -CFLAGS = -Wall -g -export QTDIR=/usr/share/qt5 export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed -export QT_SELECT=qt5 -include /usr/share/cdbs/1/rules/debhelper.mk -include /usr/share/cdbs/1/class/autotools.mk +%: + dh $@ -ifeq ($(shell dpkg-vendor --derives-from Ubuntu && echo yes),yes) - DEB_DH_GENCONTROL_ARGS_qjackctl = -- -Vdist:Recommends="pulseaudio-utils" -else - DEB_DH_GENCONTROL_ARGS_qjackctl = -- -Vdist:Recommends="" -endif +override_dh_clean: + dh_clean --exclude=qjackctl.pro -DEB_MAKE_CLEAN_TARGET := clean -DEB_CLEAN_EXCLUDE := qjackctl.pro - -cleanbuilddir:: - rm -rf src/.moc/ src/.obj/ src/.ui/ - rm -rf src/config.h src/qjackctl.desktop src/src.pri \ - src/translations/*.qm +override_dh_auto_configure: + dh_auto_configure -- --enable-debug diff -Nru qjackctl-0.4.5/debian/watch qjackctl-0.6.0/debian/watch --- qjackctl-0.4.5/debian/watch 2017-08-15 15:57:14.000000000 +0000 +++ qjackctl-0.6.0/debian/watch 2019-11-17 22:20:08.000000000 +0000 @@ -1,2 +1,2 @@ version=3 -http://sf.net/qjackctl/qjackctl-(.+)\.tar\.gz +https://sf.net/qjackctl/qjackctl-(.+)\.tar\.gz diff -Nru qjackctl-0.4.5/Makefile.git qjackctl-0.6.0/Makefile.git --- qjackctl-0.4.5/Makefile.git 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/Makefile.git 2019-10-17 07:45:45.945673225 +0000 @@ -7,9 +7,9 @@ @rm -rf *.cache clean: - @if [ -f Makefile ]; then make clean; fi + @if [ -f Makefile ]; then make clean; fi || true @rm -rvf Makefile configure config.* src/.ui src/.obj src/.moc - @rm -rvf src/config.* src/*.pri src/*.desktop + @rm -rvf src/config.* src/*.pri @rm -rvf src/Makefile src/Makefile.* src/*.mak src/*.mak.* @rm -rvf *.cache *.log *.status *.spec *.mak *.m4 .m4 @rm -rvf .qmake.stash src/.qmake.stash diff -Nru qjackctl-0.4.5/Makefile.in qjackctl-0.6.0/Makefile.in --- qjackctl-0.4.5/Makefile.in 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/Makefile.in 2019-10-17 07:45:45.945673225 +0000 @@ -6,12 +6,17 @@ headers = \ src/config.h \ + src/qjackctl.h \ src/qjackctlAbout.h \ src/qjackctlAlsaConnect.h \ + src/qjackctlAlsaGraph.h \ src/qjackctlConnect.h \ - src/qjackctlConnectAlias.h \ + src/qjackctlAliases.h \ + src/qjackctlGraph.h \ + src/qjackctlGraphCommand.h \ src/qjackctlInterfaceComboBox.h \ src/qjackctlJackConnect.h \ + src/qjackctlJackGraph.h \ src/qjackctlPatchbay.h \ src/qjackctlPatchbayFile.h \ src/qjackctlPatchbayRack.h \ @@ -21,6 +26,7 @@ src/qjackctlSystemTray.h \ src/qjackctlAboutForm.h \ src/qjackctlConnectionsForm.h \ + src/qjackctlGraphForm.h \ src/qjackctlMainForm.h \ src/qjackctlMessagesStatusForm.h \ src/qjackctlPatchbayForm.h \ @@ -31,10 +37,14 @@ sources = \ src/qjackctl.cpp \ src/qjackctlAlsaConnect.cpp \ + src/qjackctlAlsaGraph.cpp \ src/qjackctlConnect.cpp \ - src/qjackctlConnectAlias.cpp \ + src/qjackctlAliases.cpp \ + src/qjackctlGraph.cpp \ + src/qjackctlGraphCommand.cpp \ src/qjackctlInterfaceComboBox.cpp \ src/qjackctlJackConnect.cpp \ + src/qjackctlJackGraph.cpp \ src/qjackctlPatchbay.cpp \ src/qjackctlPatchbayFile.cpp \ src/qjackctlPatchbayRack.cpp \ @@ -43,6 +53,7 @@ src/qjackctlSystemTray.cpp \ src/qjackctlAboutForm.cpp \ src/qjackctlConnectionsForm.cpp \ + src/qjackctlGraphForm.cpp \ src/qjackctlMainForm.cpp \ src/qjackctlMessagesStatusForm.cpp \ src/qjackctlPatchbayForm.cpp \ @@ -53,6 +64,7 @@ forms = \ src/qjackctlAboutForm.ui \ src/qjackctlConnectionsForm.ui \ + src/qjackctlGraphForm.ui \ src/qjackctlMainForm.ui \ src/qjackctlMessagesStatusForm.ui \ src/qjackctlPatchbayForm.ui \ @@ -72,6 +84,7 @@ src/translations/qjackctl_it.ts \ src/translations/qjackctl_ja.ts \ src/translations/qjackctl_nl.ts \ + src/translations/qjackctl_pt.ts \ src/translations/qjackctl_ru.ts translations_targets = \ @@ -82,6 +95,7 @@ src/translations/qjackctl_it.qm \ src/translations/qjackctl_ja.qm \ src/translations/qjackctl_nl.qm \ + src/translations/qjackctl_pt.qm \ src/translations/qjackctl_ru.qm @@ -106,8 +120,8 @@ @$(QMAKE) -o $(name).mak $(name).pro -translations_lupdate: $(name).pro - @$(LUPDATE) -verbose -no-obsolete $(name).pro +translations_lupdate: $(translations_sources) + @$(LUPDATE) -verbose -no-obsolete -recursive src -ts $(translations_sources) translations_lrelease: translations_lupdate $(translations_targets) @@ -130,7 +144,7 @@ clean: $(name).mak - @$(MAKE) -f $(name).mak distclean + @$(MAKE) -f $(name).mak distclean || true @rm -f $(target) $(target).mak $(name).mak @rm -rf *.cache *.log *.status $(translations_targets) diff -Nru qjackctl-0.4.5/qjackctl.fr.1 qjackctl-0.6.0/qjackctl.fr.1 --- qjackctl-0.4.5/qjackctl.fr.1 2017-04-27 14:44:14.545750974 +0000 +++ qjackctl-0.6.0/qjackctl.fr.1 2019-10-17 07:45:45.946673225 +0000 @@ -22,7 +22,7 @@ .HP \fB\-s\fR, \fB\-\-start\fR .IP -Démarre le serveur audio JACK immédiatemment +Démarre le serveur audio JACK immédiatement .HP \fB\-p\fR, \fB\-\-preset\fR=[\fIétiquette\fR] .IP @@ -48,7 +48,7 @@ .SH FICHIER Les paramètres de configuration sont stockés dans ~/.config/rncbc.org/QjackCtl.conf .SH AUTEUR -QjackCtl a été écrit pas Rui Nuno Capela. +QjackCtl a été écrit par Rui Nuno Capela. .PP Cette page de manuel a été écrite par Guenter Geiger , pour le projet Debian (mais peut être utilisée par d'autres). diff -Nru qjackctl-0.4.5/qjackctl.spec.in qjackctl-0.6.0/qjackctl.spec.in --- qjackctl-0.4.5/qjackctl.spec.in 2017-04-27 14:44:14.545750974 +0000 +++ qjackctl-0.6.0/qjackctl.spec.in 2019-10-17 07:45:45.946673225 +0000 @@ -1,6 +1,6 @@ %define name @PACKAGE_TARNAME@ %define version @PACKAGE_VERSION@ -%define release 28 +%define release 39 %define _prefix @ac_prefix@ @@ -20,19 +20,16 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -#BuildRequires: libqt4-devel >= 4.4 %if %{defined fedora} BuildRequires: pkgconfig BuildRequires: qt5-qtbase-devel >= 5.1, qt5-linguist -BuildRequires: qt5-qtx11extras-devel >= 5.1 BuildRequires: alsa-lib-devel %else BuildRequires: pkg-config BuildRequires: libqt5-qtbase-devel >= 5.1, libqt5-linguist -BuildRequires: libqt5-qtx11extras-devel >= 5.1 BuildRequires: alsa-devel %endif -BuildRequires: libjack-devel >= 0.100.0 +BuildRequires: libjack-devel %description JACK Audio Connection Kit - Qt GUI Interface: A simple Qt application @@ -66,17 +63,39 @@ %dir %{_datadir}/icons/hicolor/32x32/apps %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/translations -%dir %{_datadir}/appdata +%dir %{_datadir}/metainfo #dir %{_datadir}/man #dir %{_datadir}/man/man1 %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/32x32/apps/%{name}.png %{_datadir}/%{name}/translations/%{name}_*.qm -%{_datadir}/appdata/%{name}.appdata.xml +%{_datadir}/metainfo/%{name}.appdata.xml %{_datadir}/man/man1/%{name}*.1.gz %changelog +* Thu Oct 17 2019 Rui Nuno Capela 0.6.0 +- Autumn'19 release. +* Fri Jul 12 2019 Rui Nuno Capela 0.5.9 +- Summer'19 release. +* Sat May 25 2019 Rui Nuno Capela 0.5.8 +- Spring'19 release. +* Thu Apr 11 2019 Rui Nuno Capela 0.5.7 +- Spring-Break'19 release. +* Mon Mar 11 2019 Rui Nuno Capela 0.5.6 +- Pre-LAC2019 release frenzy. +* Fri Nov 23 2018 Rui Nuno Capela 0.5.5 +- Black-Friday'18 release. +* Mon Sep 24 2018 Rui Nuno Capela 0.5.4 +- Early Autumn'18 release. +* Sun Jul 22 2018 Rui Nuno Capela 0.5.3 +- Summer'18 release. +* Sun May 27 2018 Rui Nuno Capela 0.5.2 +- Pre-LAC2018 release frenzy hotfix. +* Mon May 21 2018 Rui Nuno Capela 0.5.1 +- Pre-LAC2018 release frenzy. +* Sat Dec 16 2017 Rui Nuno Capela 0.5.0 +- End of Autumn'17 release. * Thu Apr 27 2017 Rui Nuno Capela 0.4.5 - Pre-LAC2017 release frenzy. * Mon Nov 14 2016 Rui Nuno Capela 0.4.4 diff -Nru qjackctl-0.4.5/README qjackctl-0.6.0/README --- qjackctl-0.4.5/README 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/README 2019-10-17 07:45:45.945673225 +0000 @@ -141,4 +141,5 @@ Thanks to you all. -- rncbc aka Rui Nuno Capela -rncbc@rncbc.org +rncbc at rncbc dot org +http://www.rncbc.org diff -Nru qjackctl-0.4.5/README.cmake qjackctl-0.6.0/README.cmake --- qjackctl-0.4.5/README.cmake 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/README.cmake 2019-10-17 07:45:45.945673225 +0000 @@ -0,0 +1,77 @@ +What is CMake? +============== + +CMake is a cross platform build system, that can be used to replace the old +auto-tools, providing a nice building environment and advanced features. + +Some of these features are: +* Out of sources build: CMake allows you to build your software into a directory + different to the source tree. You can safely delete the build directory and + all its contents once you are done. +* Multiple generators: classic makefiles can be generated for Unix and MinGW, + but also Visual Studio, XCode and Eclipse CDT projects among other types. +* Graphic front-ends for configuration and build options. + +More information and documentation is available at the CMake project site: + http://www.cmake.org + +CMake is free software. You can get the sources and pre-compiled packages for +Linux and other systems at: + http://www.cmake.org/cmake/resources/software.html + +How to use it? +============== + +1. You need CMake 3.1 or newer to build QjackCtl + +2. Unpack the QjackCtl sources somewhere, or checkout the repository, + and create a build directory. For instance, using a command line shell: + +$ tar -xvzf Downloads/qjackctl-x.y.z.tar.gz +$ cd qjackctl-x.y.z +$ mkdir build + +2. Execute CMake from the build directory, providing the source directory + location and optionally, the build options. There are several ways. + +* From a command line shell: + +$ pwd +qjackctl-x.y.z +$ cd build +$ cmake -DCMAKE_BUILD_TYPE=debug .. + +3. Execute the build command. If you used the Makefiles generator (the default + in Linux and other Unix systems) then execute make, gmake, or mingw32-make. + If you generated a project file, use your IDE to build it. + +Compiling with make +=================== + +There are many targets available. To see a complete list of them, type: + +$ make help + +The build process usually hides the compiler command lines, to show them: + +$ make VERBOSE=1 + +There is a "clean" target, but not a "distclean" one. You should use a build +directory different to the source tree. In this case, the "distclean" target +would be equivalent to simply removing the build directory. + +If something fails +================== + +If there is an error message while executing CMake, this probably means that a +required package is missing in your system. You should install the missing +component and run CMake again. + +If there is an error executing the build process, after running a flawless CMake +configuration process, this means that there may be an error in the source code, +or in the build system, or something incompatible in 3rd party libraries. + +The CMake build system for QjackCtl is experimental. It will take a while +until it becomes stable and fully tested. You can help providing feedback, +please send a report containing your problems to the QjackCtl development +mailing list, https://lists.sourceforge.net/mailman/listinfo/qjackctl-devel diff -Nru qjackctl-0.4.5/src/appdata/qjackctl.appdata.xml qjackctl-0.6.0/src/appdata/qjackctl.appdata.xml --- qjackctl-0.4.5/src/appdata/qjackctl.appdata.xml 2017-04-27 14:44:14.545750974 +0000 +++ qjackctl-0.6.0/src/appdata/qjackctl.appdata.xml 2019-10-17 07:45:45.946673225 +0000 @@ -1,9 +1,9 @@ - + - qjackctl.desktop - GPL-2.0+ + org.rncbc.qjackctl + FSFAP GPL-2.0+ QjackCtl JACK Audio Connection Kit Qt GUI Interface @@ -26,6 +26,10 @@ incluant une baie de brassage améliorée et des fonctionnalités de contrôle de connexion.

+ qjackctl.desktop + +​ qjackctl +​ http://qjackctl.sourceforge.net/qjackctlMainForm1.png @@ -40,11 +44,8 @@ JACK Qt - http://qjackctl.sourceforge.net - rncbc@rncbc.org + https://qjackctl.sourceforge.io rncbc.org - - HiDpiIcon - ModernToolkit - + rncbc aka. Rui Nuno Capela + rncbc@rncbc.org
diff -Nru qjackctl-0.4.5/src/cmake_config.h.in qjackctl-0.6.0/src/cmake_config.h.in --- qjackctl-0.4.5/src/cmake_config.h.in 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/cmake_config.h.in 2019-10-17 07:45:45.946673225 +0000 @@ -0,0 +1,101 @@ +#ifndef CONFIG_H +#define CONFIG_H + +/* Define to the full name of this package. */ +#cmakedefine PACKAGE_NAME "@PACKAGE_NAME@" + +/* Define to the full name and version of this package. */ +#cmakedefine PACKAGE_STRING "@PACKAGE_STRING@" + +/* Define to the version of this package. */ +#cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" + +/* Define to the address where bug reports for this package should be sent. */ +#cmakedefine PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" + +/* Define to the one symbol short name of this package. */ +#cmakedefine PACKAGE_TARNAME "@PACKAGE_TARNAME@" + +/* Define to the version of this package. */ +#cmakedefine CONFIG_VERSION "@CONFIG_VERSION@" + +/* Define to the build version of this package. */ +#cmakedefine CONFIG_BUILD_VERSION "@CONFIG_BUILD_VERSION@" + +/* Default installation prefix. */ +#cmakedefine CONFIG_PREFIX "@CONFIG_PREFIX@" + +/* Define to target installation dirs. */ +#cmakedefine CONFIG_BINDIR "@CONFIG_BINDIR@" +#cmakedefine CONFIG_LIBDIR "@CONFIG_LIBDIR@" +#cmakedefine CONFIG_DATADIR "@CONFIG_DATADIR@" +#cmakedefine CONFIG_MANDIR "@CONFIG_MANDIR@" + +/* Define if debugging is enabled. */ +#cmakedefine CONFIG_DEBUG @CONFIG_DEBUG@ + +/* Define to 1 if you have the header file. */ +#cmakedefine HAVE_SIGNAL_H @HAVE_SIGNAL_H@ + +/* Define if JACK library is available. */ +#cmakedefine CONFIG_JACK @CONFIG_JACK@ + +/* Define if ALSA library is available. */ +#cmakedefine CONFIG_ALSA_SEQ @CONFIG_ALSA_SEQ@ + +/* Define if PORTAUDIO library is available. */ +#cmakedefine CONFIG_PORTAUDIO @CONFIG_PORTAUDIO@ + +/* Define if jack/statistics.h is available. */ +#cmakedefine CONFIG_JACK_STATISTICS @CONFIG_JACK_STATISTICS@ + +/* Define if CoreAudio/CoreAudio.h is available (Mac OS X). */ +#cmakedefine CONFIG_COREAUDIO @CONFIG_COREAUDIO@ + +/* Define if JACK MIDI support is available. */ +#cmakedefine CONFIG_JACK_MIDI @CONFIG_JACK_MIDI@ + +/* Define if JACK session support is available. */ +#cmakedefine CONFIG_JACK_SESSION @CONFIG_JACK_SESSION@ + +/* Define if JACK metadata support is available. */ +#cmakedefine CONFIG_JACK_METADATA @CONFIG_JACK_METADATA@ + +/* Define if D-Bus interface is enabled. */ +#cmakedefine CONFIG_DBUS @CONFIG_DBUS@ + +/* Define if unique/single instance is enabled. */ +#cmakedefine CONFIG_XUNIQUE @CONFIG_XUNIQUE@ + +/* Define if debugger stack-trace is enabled. */ +#cmakedefine CONFIG_STACKTRACE @CONFIG_STACKTRACE@ + +/* Define if system tray is enabled. */ +#cmakedefine CONFIG_SYSTEM_TRAY @CONFIG_SYSTEM_TRAY@ + +/* Define if jack_tranport_query is available. */ +#cmakedefine CONFIG_JACK_TRANSPORT @CONFIG_JACK_TRANSPORT@ + +/* Define if jack_is_realtime is available. */ +#cmakedefine CONFIG_JACK_REALTIME @CONFIG_JACK_REALTIME@ + +/* Define if jack_get_xrun_delayed_usecs is available. */ +#cmakedefine CONFIG_JACK_XRUN_DELAY @CONFIG_JACK_XRUN_DELAY@ + +/* Define if jack_get_max_delayed_usecs is available. */ +#cmakedefine CONFIG_JACK_MAX_DELAY @CONFIG_JACK_MAX_DELAY@ + +/* Define if jack_set_port_rename_callback is available. */ +#cmakedefine CONFIG_JACK_PORT_RENAME @CONFIG_JACK_PORT_RENAME@ + +/* Define if jack_port_get_aliases is available. */ +#cmakedefine CONFIG_JACK_PORT_ALIASES @CONFIG_JACK_PORT_ALIASES@ + +/* Define if jack_get_version_string is available. */ +#cmakedefine CONFIG_JACK_VERSION @CONFIG_JACK_VERSION@ + +/* Define if jack_free is available. */ +#cmakedefine CONFIG_JACK_FREE @CONFIG_JACK_FREE@ + + +#endif /* CONFIG_H */ diff -Nru qjackctl-0.4.5/src/CMakeLists.txt qjackctl-0.6.0/src/CMakeLists.txt --- qjackctl-0.4.5/src/CMakeLists.txt 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/CMakeLists.txt 2019-10-17 07:45:45.946673225 +0000 @@ -0,0 +1,184 @@ +set(NAME qjackctl) + +include_directories ( + ${CMAKE_CURRENT_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} +) + +configure_file (cmake_config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) + +set (HEADERS + qjackctl.h + qjackctlAbout.h + qjackctlAlsaConnect.h + qjackctlAlsaGraph.h + qjackctlConnect.h + qjackctlAliases.h + qjackctlGraph.h + qjackctlGraphCommand.h + qjackctlInterfaceComboBox.h + qjackctlJackConnect.h + qjackctlJackGraph.h + qjackctlPatchbay.h + qjackctlPatchbayFile.h + qjackctlPatchbayRack.h + qjackctlSession.h + qjackctlSetup.h + qjackctlStatus.h + qjackctlSystemTray.h + qjackctlAboutForm.h + qjackctlConnectionsForm.h + qjackctlGraphForm.h + qjackctlMainForm.h + qjackctlMessagesStatusForm.h + qjackctlPatchbayForm.h + qjackctlSessionForm.h + qjackctlSetupForm.h + qjackctlSocketForm.h +) + +set (SOURCES + qjackctl.cpp + qjackctlAlsaConnect.cpp + qjackctlAlsaGraph.cpp + qjackctlConnect.cpp + qjackctlAliases.cpp + qjackctlGraph.cpp + qjackctlGraphCommand.cpp + qjackctlInterfaceComboBox.cpp + qjackctlJackConnect.cpp + qjackctlJackGraph.cpp + qjackctlPatchbay.cpp + qjackctlPatchbayFile.cpp + qjackctlPatchbayRack.cpp + qjackctlSession.cpp + qjackctlSetup.cpp + qjackctlSystemTray.cpp + qjackctlAboutForm.cpp + qjackctlConnectionsForm.cpp + qjackctlGraphForm.cpp + qjackctlMainForm.cpp + qjackctlMessagesStatusForm.cpp + qjackctlPatchbayForm.cpp + qjackctlSessionForm.cpp + qjackctlSetupForm.cpp + qjackctlSocketForm.cpp +) + +set (FORMS + qjackctlAboutForm.ui + qjackctlConnectionsForm.ui + qjackctlGraphForm.ui + qjackctlMainForm.ui + qjackctlMessagesStatusForm.ui + qjackctlPatchbayForm.ui + qjackctlSessionForm.ui + qjackctlSetupForm.ui + qjackctlSocketForm.ui +) + +set (RESOURCES + qjackctl.qrc +) + +set (TRANSLATIONS + translations/qjackctl_cs.ts + translations/qjackctl_de.ts + translations/qjackctl_es.ts + translations/qjackctl_fr.ts + translations/qjackctl_it.ts + translations/qjackctl_ja.ts + translations/qjackctl_nl.ts + translations/qjackctl_pt.ts + translations/qjackctl_ru.ts +) + +qt5_add_translation ( QM_FILES ${TRANSLATIONS} ) +add_custom_target( translations ALL DEPENDS ${QM_FILES} ) + +qt5_wrap_ui (UI_SOURCES ${FORMS}) +qt5_wrap_cpp (MOC_SOURCES ${HEADERS}) +qt5_add_resources (QRC_SOURCES ${RESOURCES}) + +if (WIN32) + set (RC_FILE ${CMAKE_CURRENT_SOURCE_DIR}/win32/${NAME}.rc) + set (RES_FILE ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.res.obj) + find_program (WINDRES_EXECUTABLE NAMES windres mingw32-windres i686-mingw32-windres) + if (MINGW) + exec_program (${WINDRES_EXECUTABLE} + ARGS "-i ${RC_FILE} -o ${RES_FILE} --include-dir=${CMAKE_CURRENT_SOURCE_DIR}/images") + list (APPEND SOURCES ${RES_FILE}) + else () + list (APPEND SOURCES ${RC_FILE}) + endif () +endif () + +if (APPLE) + set (ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/images/${NAME}.icns) + list (APPEND SOURCES ${ICON_FILE}) + set (MACOSX_BUNDLE_ICON_FILE ${NAME}.icns) + set_source_files_properties (${ICON_FILE} PROPERTIES + MACOSX_PACKAGE_LOCATION Resources) +endif () + + +add_executable (${NAME} + ${UI_SOURCES} + ${MOC_SOURCES} + ${QRC_SOURCES} + ${SOURCES} +) + +set_target_properties (${NAME} PROPERTIES CXX_STANDARD 11) + +if (WIN32) + set_target_properties (${NAME} PROPERTIES WIN32_EXECUTABLE true) +endif () + +if (APPLE) + set_target_properties (${NAME} PROPERTIES MACOSX_BUNDLE true) +endif () + +target_link_libraries (${NAME} PRIVATE Qt5::Widgets Qt5::Xml) + +if (CONFIG_XUNIQUE) + target_link_libraries (${NAME} PRIVATE Qt5::Network) +endif () + +if (CONFIG_DBUS) + target_link_libraries (${NAME} PRIVATE Qt5::DBus) +endif () + +if (CONFIG_JACK) + target_link_libraries (${NAME} PRIVATE ${JACK_LIBRARIES}) +endif () + +if (CONFIG_ALSA_SEQ) + target_link_libraries (${NAME} PRIVATE ${ALSA_LIBRARIES}) +endif () + +if (CONFIG_PORTAUDIO) + target_link_libraries (${NAME} PRIVATE ${PORTAUDIO_LIBRARIES}) +endif () + + +if (UNIX AND NOT APPLE) + install (TARGETS ${NAME} RUNTIME + DESTINATION ${CMAKE_INSTALL_BINDIR}) + install (FILES ${QM_FILES} + DESTINATION ${CMAKE_INSTALL_DATADIR}/${NAME}/translations) + install (FILES ${NAME}.desktop + DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) + install (FILES images/${NAME}.png + DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/32x32/apps) + install (FILES appdata/${NAME}.appdata.xml + DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) +endif () + +if (WIN32) + install (TARGETS ${NAME} RUNTIME + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + install (FILES ${QM_FILES} + DESTINATION ${CMAKE_INSTALL_DATADIR}/${NAME}/translations) +endif () + diff -Nru qjackctl-0.4.5/src/config.h.in qjackctl-0.6.0/src/config.h.in --- qjackctl-0.4.5/src/config.h.in 2017-04-27 14:45:15.000000000 +0000 +++ qjackctl-0.6.0/src/config.h.in 2019-10-17 07:46:11.747671604 +0000 @@ -39,6 +39,9 @@ /* Define if jack_port_get_aliases is available. */ #undef CONFIG_JACK_PORT_ALIASES +/* Define if jack_set_port_rename_callback is available. */ +#undef CONFIG_JACK_PORT_RENAME + /* Define if jack_is_realtime is available. */ #undef CONFIG_JACK_REALTIME @@ -66,9 +69,6 @@ /* Default installation prefix. */ #undef CONFIG_PREFIX -/* Define if round is available. */ -#undef CONFIG_ROUND - /* Define if debugger stack-trace is enabled. */ #undef CONFIG_STACKTRACE @@ -78,7 +78,7 @@ /* Version string. */ #undef CONFIG_VERSION -/* Define if X11 unique/single instance is enabled. */ +/* Define if unique/single instance is enabled. */ #undef CONFIG_XUNIQUE /* Define to 1 if you have the header file. */ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graph1.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graph1.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphAlsa.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphAlsa.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphCenter.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphCenter.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphColors.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphColors.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphConnect.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphConnect.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphDisconnect.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphDisconnect.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphJack.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphJack.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphRedo.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphRedo.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphRename.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphRename.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphUndo.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphUndo.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomFit.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomFit.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomIn.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomIn.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomOut.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomOut.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomRange.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomRange.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomReset.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomReset.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/graphZoomTool.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/graphZoomTool.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/qtlogo1.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/qtlogo1.png differ Binary files /tmp/tmp61Azp2/qY9Q3TQxlI/qjackctl-0.4.5/src/images/qtlogo.png and /tmp/tmp61Azp2/CsmcH8uQJW/qjackctl-0.6.0/src/images/qtlogo.png differ diff -Nru qjackctl-0.4.5/src/qjackctlAboutForm.cpp qjackctl-0.6.0/src/qjackctlAboutForm.cpp --- qjackctl-0.4.5/src/qjackctlAboutForm.cpp 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAboutForm.cpp 2019-10-17 07:45:45.951673224 +0000 @@ -1,7 +1,7 @@ // qjackctlAboutForm.cpp // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -69,12 +69,12 @@ list << tr("JACK Session support disabled."); #endif #ifndef CONFIG_ALSA_SEQ -#if !defined(WIN32) +#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32) list << tr("ALSA/MIDI sequencer support disabled."); #endif #endif #ifndef CONFIG_DBUS -#if !defined(WIN32) +#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32) list << tr("D-Bus interface support disabled."); #endif #endif diff -Nru qjackctl-0.4.5/src/qjackctlAboutForm.h qjackctl-0.6.0/src/qjackctlAboutForm.h --- qjackctl-0.4.5/src/qjackctlAboutForm.h 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAboutForm.h 2019-10-17 07:45:45.951673224 +0000 @@ -1,7 +1,7 @@ // qjackctlAboutForm.h // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlAboutForm.ui qjackctl-0.6.0/src/qjackctlAboutForm.ui --- qjackctl-0.4.5/src/qjackctlAboutForm.ui 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAboutForm.ui 2019-10-17 07:45:45.951673224 +0000 @@ -3,7 +3,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -34,7 +34,7 @@ - About QjackCtl + About :/images/about1.png @@ -90,7 +90,7 @@ - :/images/qtlogo.png + :/images/qtlogo1.png diff -Nru qjackctl-0.4.5/src/qjackctlAbout.h qjackctl-0.6.0/src/qjackctlAbout.h --- qjackctl-0.4.5/src/qjackctlAbout.h 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAbout.h 2019-10-17 07:45:45.951673224 +0000 @@ -1,7 +1,7 @@ // qjackctlAbout.h // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,8 +31,8 @@ #define QJACKCTL_SUBTITLE2 "Qt GUI Interface" #define QJACKCTL_SUBTITLE QJACKCTL_SUBTITLE1 " - " QJACKCTL_SUBTITLE2 -#define QJACKCTL_WEBSITE "http://qjackctl.sourceforge.net" -#define QJACKCTL_COPYRIGHT "Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved." +#define QJACKCTL_WEBSITE "https://qjackctl.sourceforge.io" +#define QJACKCTL_COPYRIGHT "Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved." #define QJACKCTL_DOMAIN "rncbc.org" diff -Nru qjackctl-0.4.5/src/qjackctlAliases.cpp qjackctl-0.6.0/src/qjackctlAliases.cpp --- qjackctl-0.4.5/src/qjackctlAliases.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlAliases.cpp 2019-10-17 07:45:45.951673224 +0000 @@ -0,0 +1,298 @@ +// qjackctlAliases.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlAliases.h" + +#include + +#include + + +//---------------------------------------------------------------------- +// class qjackctlAliasItem -- Client/port item alias map. + +// Constructor. +qjackctlAliasItem::qjackctlAliasItem ( + const QString& sClientName, const QString& sClientAlias ) +{ + if (sClientAlias.isEmpty()) { + m_rxClientName.setPattern(escapeRegExpDigits(sClientName)); + m_sClientAlias = sClientName; + } else { + m_rxClientName.setPattern(sClientName); + m_sClientAlias = sClientAlias; + } +} + +// Default destructor. +qjackctlAliasItem::~qjackctlAliasItem (void) +{ + m_ports.clear(); +} + + +// Client name method. +QString qjackctlAliasItem::clientName (void) const +{ + return m_rxClientName.pattern(); +} + + +// Client name matcher. +bool qjackctlAliasItem::matchClientName ( const QString& sClientName ) const +{ + return m_rxClientName.exactMatch(sClientName); +} + + +// Client aliasing methods. +const QString& qjackctlAliasItem::clientAlias (void) const +{ + return m_sClientAlias; +} + + +void qjackctlAliasItem::setClientAlias ( const QString& sClientAlias ) +{ + m_sClientAlias = sClientAlias; +} + + +// Port aliasing methods. +QString qjackctlAliasItem::portAlias ( const QString& sPortName ) const +{ + return m_ports.value(sPortName, sPortName); +} + + +void qjackctlAliasItem::setPortAlias ( + const QString& sPortName, const QString& sPortAlias ) +{ + if (sPortAlias.isEmpty()) + m_ports.remove(sPortName); + else + m_ports.insert(sPortName, sPortAlias); +} + + +// Save client/port aliases definitions. +void qjackctlAliasItem::saveSettings ( + QSettings& settings, const QString& sClientKey ) +{ + settings.beginGroup(sClientKey); + settings.setValue("/Name", m_rxClientName.pattern()); + settings.setValue("/Alias", m_sClientAlias); + int iPort = 0; + QMap::ConstIterator iter = m_ports.constBegin(); + const QMap::ConstIterator& iter_end + = m_ports.constEnd(); + for ( ; iter != iter_end; ++iter) { + const QString& sPortName + = iter.key(); + const QString& sPortAlias + = iter.value(); + if (!sPortName.isEmpty() && !sPortAlias.isEmpty()) { + settings.beginGroup("/Port" + QString::number(++iPort)); + settings.setValue("/Name", sPortName); + settings.setValue("/Alias", sPortAlias); + settings.endGroup(); + } + } + settings.endGroup(); +} + + +// Escape and format a string as a regular expresion. +QString qjackctlAliasItem::escapeRegExpDigits ( + const QString& s, int iThreshold ) +{ + const QString& sEscape + = QRegExp::escape(s); + + QString sDigits; + QString sResult; + int iDigits = 0; + + for (int i = 0; i < sEscape.length(); i++) { + const QChar& ch = sEscape.at(i); + if (ch.isDigit()) { + if (iDigits < iThreshold) + sDigits += ch; + else + sDigits = "[0-9]+"; + iDigits++; + } else { + if (iDigits > 0) { + sResult += sDigits; + sDigits.clear(); + iDigits = 0; + } + sResult += ch; + } + } + + if (iDigits > 0) + sResult += sDigits; + + return sResult; +} + + +// Need for generic sort. +bool qjackctlAliasItem::operator< ( const qjackctlAliasItem& other ) +{ + return (m_sClientAlias < other.clientAlias()); +} + + +//---------------------------------------------------------------------- +// class qjackctlAliasList -- Client/port list alias map. + +// Constructor. +qjackctlAliasList::qjackctlAliasList (void) +{ +} + +// Default destructor. +qjackctlAliasList::~qjackctlAliasList (void) +{ + qDeleteAll(*this); + clear(); +} + + +// Client finders. +qjackctlAliasItem *qjackctlAliasList::findClientName ( + const QString& sClientName ) +{ + QListIterator iter(*this); + while (iter.hasNext()) { + qjackctlAliasItem *pClient = iter.next(); + if (pClient->matchClientName(sClientName)) + return pClient; + } + + return nullptr; +} + + +// Client aliasing methods. +void qjackctlAliasList::setClientAlias ( + const QString& sClientName, const QString& sClientAlias ) +{ + qjackctlAliasItem *pClient = findClientName(sClientName); + if (pClient == nullptr) { + pClient = new qjackctlAliasItem(sClientName); + append(pClient); + } + pClient->setClientAlias(sClientAlias); +} + + +QString qjackctlAliasList::clientAlias ( const QString& sClientName ) +{ + qjackctlAliasItem *pClient = findClientName(sClientName); + if (pClient == nullptr) + return sClientName; + + return pClient->clientAlias(); +} + + +// Client/port aliasing methods. +void qjackctlAliasList::setPortAlias ( const QString& sClientName, + const QString& sPortName, const QString& sPortAlias ) +{ + qjackctlAliasItem *pClient = findClientName(sClientName); + if (pClient == nullptr) { + pClient = new qjackctlAliasItem(sClientName); + append(pClient); + } + pClient->setPortAlias(sPortName, sPortAlias); +} + + +QString qjackctlAliasList::portAlias ( + const QString& sClientName, const QString& sPortName ) +{ + qjackctlAliasItem *pClient = findClientName(sClientName); + if (pClient == nullptr) + return sPortName; + + return pClient->portAlias(sPortName); +} + + +// Load/save aliases definitions. +void qjackctlAliasList::loadSettings ( + QSettings& settings, const QString& sAliasesKey ) +{ + clear(); + + settings.beginGroup(sAliasesKey); + QStringListIterator client_iter(settings.childGroups()); + while (client_iter.hasNext()) { + const QString& sClientKey + = client_iter.next(); + const QString& sClientName + = settings.value(sClientKey + "/Name").toString(); + const QString& sClientAlias + = settings.value(sClientKey + "/Alias").toString(); + if (!sClientName.isEmpty() && !sClientAlias.isEmpty()) { + qjackctlAliasItem *pClient = + new qjackctlAliasItem(sClientName, sClientAlias); + append(pClient); + settings.beginGroup(sClientKey); + QStringListIterator port_iter(settings.childGroups()); + while (port_iter.hasNext()) { + const QString& sPortKey + = port_iter.next(); + const QString& sPortName + = settings.value(sPortKey + "/Name").toString(); + const QString& sPortAlias + = settings.value(sPortKey + "/Alias").toString(); + if (!sPortName.isEmpty() && !sPortAlias.isEmpty()) + pClient->setPortAlias(sPortName, sPortAlias); + } + settings.endGroup(); + } + } + settings.endGroup(); +} + + +void qjackctlAliasList::saveSettings ( + QSettings& settings, const QString& sAliasesKey ) +{ + std::sort(begin(), end()); + + settings.beginGroup(sAliasesKey); + int iClient = 0; + QListIterator iter(*this); + while (iter.hasNext()) { + (iter.next())->saveSettings(settings, + "Client" + QString::number(++iClient)); + } + settings.endGroup(); +} + + +// end of qjackctlAliases.cpp diff -Nru qjackctl-0.4.5/src/qjackctlAliases.h qjackctl-0.6.0/src/qjackctlAliases.h --- qjackctl-0.4.5/src/qjackctlAliases.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlAliases.h 2019-10-17 07:45:45.951673224 +0000 @@ -0,0 +1,131 @@ +// qjackctlAliases.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlAliases_h +#define __qjackctlAliases_h + +#include +#include +#include + + +// Client/port item alias map. +class qjackctlAliasItem +{ +public: + + // Constructor. + qjackctlAliasItem(const QString& sClientName, + const QString& sClientAlias = QString()); + + // Default destructor. + ~qjackctlAliasItem(); + + // Client name accessor. + QString clientName() const; + + // Client name matcher. + bool matchClientName(const QString& sClientName) const; + + // Client aliasing methods. + const QString& clientAlias() const; + void setClientAlias(const QString& sClientAlias); + + // Port aliasing methods. + QString portAlias(const QString& sPortName) const; + void setPortAlias(const QString& sPortName, const QString& sPortAlias); + + // Save client/port aliases definitions. + void saveSettings(QSettings& settings, const QString& sClientKey); + + // Need for generic sort. + bool operator< (const qjackctlAliasItem& other); + + // Escape and format a string as a regular expresion. + static QString escapeRegExpDigits(const QString& s, int iThreshold = 3); + +private: + + // Client name regexp. + QRegExp m_rxClientName; + // Client alias. + QString m_sClientAlias; + + // Port aliases map. + QMap m_ports; +}; + + +// Client/port list alias map. +class qjackctlAliasList : public QList +{ +public: + + // Constructor. + qjackctlAliasList(); + // Default destructor. + ~qjackctlAliasList(); + + // Client aliasing methods. + QString clientAlias(const QString& sClientName); + void setClientAlias(const QString& sClientName, + const QString& sClientAlias); + + // Port aliasing methods. + QString portAlias(const QString& sClientName, + const QString& sPortName); + void setPortAlias(const QString& sClientName, + const QString& sPortName,const QString& sPortAlias); + + // Load/save aliases definitions. + void loadSettings(QSettings& settings, const QString& sAliasesKey); + void saveSettings(QSettings& settings, const QString& sAliasesKey); + +private: + + // Client item finder. + qjackctlAliasItem *findClientName (const QString& sClientName); +}; + + +// Client/port alias map. +class qjackctlAliases +{ +public: + + // Constructor. + qjackctlAliases() : dirty(false) {} + + qjackctlAliasList audioOutputs; + qjackctlAliasList audioInputs; + qjackctlAliasList midiOutputs; + qjackctlAliasList midiInputs; + qjackctlAliasList alsaOutputs; + qjackctlAliasList alsaInputs; + + QString key; + bool dirty; +}; + + +#endif // __qjackctlAliases_h + +// end of qjackctlAliases.h diff -Nru qjackctl-0.4.5/src/qjackctlAlsaConnect.cpp qjackctl-0.6.0/src/qjackctlAlsaConnect.cpp --- qjackctl-0.4.5/src/qjackctlAlsaConnect.cpp 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAlsaConnect.cpp 2019-10-17 07:45:45.951673224 +0000 @@ -1,7 +1,7 @@ // qjackctlAlsaConnect.cpp // /**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,12 +31,9 @@ // // Constructor. -qjackctlAlsaPort::qjackctlAlsaPort ( - qjackctlAlsaClient *pClient, int iAlsaPort ) +qjackctlAlsaPort::qjackctlAlsaPort ( qjackctlAlsaClient *pClient ) : qjackctlPortItem(pClient) { - m_iAlsaPort = iAlsaPort; - qjackctlAlsaConnect *pAlsaConnect = static_cast ( ((pClient->clientList())->listView())->binding()); @@ -66,7 +63,7 @@ int qjackctlAlsaPort::alsaPort (void) const { - return m_iAlsaPort; + return portName().section(':', 0, 0).toInt(); } @@ -75,12 +72,9 @@ // // Constructor. -qjackctlAlsaClient::qjackctlAlsaClient ( - qjackctlAlsaClientList *pClientList, int iAlsaClient ) +qjackctlAlsaClient::qjackctlAlsaClient ( qjackctlAlsaClientList *pClientList ) : qjackctlClientItem(pClientList) { - m_iAlsaClient = iAlsaClient; - qjackctlAlsaConnect *pAlsaConnect = static_cast ( (pClientList->listView())->binding()); @@ -105,7 +99,7 @@ // Jack client accessor. int qjackctlAlsaClient::alsaClient (void) const { - return m_iAlsaClient; + return clientName().section(':', 0, 0).toInt(); } @@ -120,7 +114,7 @@ return pPort; } - return NULL; + return nullptr; } @@ -152,7 +146,7 @@ return pClient; } - return NULL; + return nullptr; } @@ -161,8 +155,8 @@ int iAlsaPort ) { qjackctlAlsaClient *pClient = findClient(iAlsaClient); - if (pClient == NULL) - return NULL; + if (pClient == nullptr) + return nullptr; return pClient->findPort(iAlsaPort); } @@ -172,11 +166,11 @@ int qjackctlAlsaClientList::updateClientPorts (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return 0; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return 0; int iDirtyCount = 0; @@ -216,7 +210,7 @@ qjackctlAlsaPort *pPort = 0; const int iAlsaPort = snd_seq_port_info_get_port(pPortInfo); if (pClient == 0) { - pClient = new qjackctlAlsaClient(this, iAlsaClient); + pClient = new qjackctlAlsaClient(this); pClient->setClientName(sClientName); iDirtyCount++; } else { @@ -231,7 +225,7 @@ sPortName += QString::fromUtf8( snd_seq_port_info_get_name(pPortInfo)); if (pPort == 0) { - pPort = new qjackctlAlsaPort(pClient, iAlsaPort); + pPort = new qjackctlAlsaPort(pClient); pPort->setPortName(sPortName); iDirtyCount++; } else if (sPortName != pPort->portName()) { @@ -298,7 +292,7 @@ for (int i = 0; i < QJACKCTL_ALSA_PIXMAPS; i++) { if (m_apPixmaps[i]) delete m_apPixmaps[i]; - m_apPixmaps[i] = NULL; + m_apPixmaps[i] = nullptr; } } @@ -310,11 +304,11 @@ #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return false; qjackctlAlsaPort *pOAlsa = static_cast (pOPort); @@ -350,11 +344,11 @@ #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return false; qjackctlAlsaPort *pOAlsa = static_cast (pOPort); @@ -389,11 +383,11 @@ #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return; snd_seq_query_subscribe_t *pAlsaSubs; diff -Nru qjackctl-0.4.5/src/qjackctlAlsaConnect.h qjackctl-0.6.0/src/qjackctlAlsaConnect.h --- qjackctl-0.4.5/src/qjackctlAlsaConnect.h 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlAlsaConnect.h 2019-10-17 07:45:45.951673224 +0000 @@ -1,7 +1,7 @@ // qjackctlAlsaConnect.h // /**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -51,18 +51,13 @@ public: // Constructor. - qjackctlAlsaPort(qjackctlAlsaClient *pClient, int iAlsaPort); + qjackctlAlsaPort(qjackctlAlsaClient *pClient); // Default destructor. ~qjackctlAlsaPort(); // Jack handles accessors. int alsaClient() const; - int alsaPort() const; - -private: - - // Instance variables. - int m_iAlsaPort; + int alsaPort() const; }; @@ -72,7 +67,7 @@ public: // Constructor. - qjackctlAlsaClient(qjackctlAlsaClientList *pClientList, int iAlsaClient); + qjackctlAlsaClient(qjackctlAlsaClientList *pClientList); // Default destructor. ~qjackctlAlsaClient(); @@ -81,11 +76,6 @@ // Port finder by id. qjackctlAlsaPort *findPort(int iAlsaPort); - -private: - - // Instance variables. - int m_iAlsaClient; }; diff -Nru qjackctl-0.4.5/src/qjackctlAlsaGraph.cpp qjackctl-0.6.0/src/qjackctlAlsaGraph.cpp --- qjackctl-0.4.5/src/qjackctlAlsaGraph.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlAlsaGraph.cpp 2019-10-17 07:45:45.951673224 +0000 @@ -0,0 +1,436 @@ +// qjackctlAlsaGraph.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlAlsaGraph.h" + +#include "qjackctlMainForm.h" + + +#ifdef CONFIG_ALSA_SEQ + +#include + + +//---------------------------------------------------------------------------- +// qjackctlAlsaGraph -- ALSA graph driver + +QMutex qjackctlAlsaGraph::g_mutex; + + +// Constructor. +qjackctlAlsaGraph::qjackctlAlsaGraph ( qjackctlGraphCanvas *canvas ) + : qjackctlGraphSect(canvas) +{ + resetPortTypeColors(); +} + + +// ALSA port (dis)connection. +void qjackctlAlsaGraph::connectPorts ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool connect ) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm == nullptr) + return; + + snd_seq_t *seq = pMainForm->alsaSeq(); + if (seq == nullptr) + return; + + if (port1 == nullptr || port2 == nullptr) + return; + + const qjackctlGraphNode *node1 = port1->portNode(); + const qjackctlGraphNode *node2 = port2->portNode(); + + if (node1 == nullptr || node2 == nullptr) + return; + + QMutexLocker locker(&g_mutex); + + const int client_id1 + = node1->nodeName().section(':', 0, 0).toInt(); + const int port_id1 + = port1->portName().section(':', 0, 0).toInt(); + + const int client_id2 + = node2->nodeName().section(':', 0, 0).toInt(); + const int port_id2 + = port2->portName().section(':', 0, 0).toInt(); + +#ifdef CONFIG_DEBUG + qDebug("qjackctlAlsaGraph::connectPorts(%d:%d, %d:%d, %d)", + client_id1, port_id1, client_id2, port_id2, connect); +#endif + + snd_seq_port_subscribe_t *seq_subs; + snd_seq_addr_t seq_addr; + + snd_seq_port_subscribe_alloca(&seq_subs); + + seq_addr.client = client_id1; + seq_addr.port = port_id1; + snd_seq_port_subscribe_set_sender(seq_subs, &seq_addr); + + seq_addr.client = client_id2; + seq_addr.port = port_id2; + snd_seq_port_subscribe_set_dest(seq_subs, &seq_addr); + + if (connect) { + snd_seq_subscribe_port(seq, seq_subs); + } else { + snd_seq_unsubscribe_port(seq, seq_subs); + } +} + + +// ALSA node type inquirer. (static) +bool qjackctlAlsaGraph::isNodeType ( uint node_type ) +{ + return (node_type == qjackctlAlsaGraph::nodeType()); +} + + +// ALSA node type. +uint qjackctlAlsaGraph::nodeType (void) +{ + static + const uint AlsaNodeType + = qjackctlGraphItem::itemType("ALSA_NODE_TYPE"); + + return AlsaNodeType; +} + + +// ALSA port type inquirer. (static) +bool qjackctlAlsaGraph::isPortType ( uint port_type ) +{ + return (port_type == qjackctlAlsaGraph::midiPortType()); +} + + +// ALSA port type. +uint qjackctlAlsaGraph::midiPortType (void) +{ + static + const uint AlsaMidiPortType + = qjackctlGraphItem::itemType("ALSA_PORT_TYPE"); + + return AlsaMidiPortType; +} + + +// ALSA client:port finder and creator if not existing. +bool qjackctlAlsaGraph::findClientPort ( + snd_seq_client_info_t *client_info, + snd_seq_port_info_t *port_info, + qjackctlGraphItem::Mode port_mode, + qjackctlGraphNode **node, + qjackctlGraphPort **port, + bool add_new ) +{ + const int client_id + = snd_seq_client_info_get_client(client_info); + const int port_id + = snd_seq_port_info_get_port(port_info); + + const QString& client_name + = QString::number(client_id) + ':' + + QString::fromUtf8(snd_seq_client_info_get_name(client_info)); + const QString& port_name + = QString::number(port_id) + ':' + + QString::fromUtf8(snd_seq_port_info_get_name(port_info)); + + const uint node_type + = qjackctlAlsaGraph::nodeType(); + const uint port_type + = qjackctlAlsaGraph::midiPortType(); + + qjackctlGraphItem::Mode node_mode = port_mode; + + *node = qjackctlGraphSect::findNode(client_name, node_mode, node_type); + *port = nullptr; + + if (*node == nullptr && client_id >= 128) { + node_mode = qjackctlGraphItem::Duplex; + *node = qjackctlGraphSect::findNode(client_name, node_mode, node_type); + } + + if (*node) + *port = (*node)->findPort(port_name, port_mode, port_type); + + if (add_new && *node == nullptr) { + *node = new qjackctlGraphNode(client_name, node_mode, node_type); + (*node)->setNodeIcon(QIcon(":/images/graphAlsa.png")); + qjackctlGraphSect::addItem(*node); + } + + if (add_new && *port == nullptr && *node) { + *port = (*node)->addPort(port_name, port_mode, port_type); + (*port)->updatePortTypeColors(canvas()); + } + + if (add_new && *node) { + int nchanged = 0; + QString node_title = (*node)->nodeTitle(); + foreach (qjackctlAliasList *node_aliases, item_aliases(*node)) + node_title = node_aliases->clientAlias(client_name); + if ((*node)->nodeTitle() != node_title) { + (*node)->setNodeTitle(node_title); + ++nchanged; + } + if (*port) { + QString port_title = (*port)->portTitle(); + foreach (qjackctlAliasList *port_aliases, item_aliases(*port)) + port_title = port_aliases->portAlias(client_name, port_name); + if ((*port)->portTitle() != port_title) { + (*port)->setPortTitle(port_title); + ++nchanged; + } + } + if (nchanged > 0) + (*node)->updatePath(); + } + + return (*node && *port); +} + + +// ALSA graph updater. +void qjackctlAlsaGraph::updateItems (void) +{ + QMutexLocker locker(&g_mutex); + + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm == nullptr) + return; + + snd_seq_t *seq = pMainForm->alsaSeq(); + if (seq == nullptr) + return; + +#ifdef CONFIG_DEBUG + qDebug("qjackctlAlsaGraph::updateItems()"); +#endif + + // 1. Client/ports inventory... + // + snd_seq_client_info_t *client_info1; + snd_seq_port_info_t *port_info1; + + snd_seq_client_info_alloca(&client_info1); + snd_seq_port_info_alloca(&port_info1); + + snd_seq_client_info_set_client(client_info1, -1); + + while (snd_seq_query_next_client(seq, client_info1) >= 0) { + const int client_id + = snd_seq_client_info_get_client(client_info1); + if (0 >= client_id) // Skip 0:System client... + continue; + snd_seq_port_info_set_client(port_info1, client_id); + snd_seq_port_info_set_port(port_info1, -1); + while (snd_seq_query_next_port(seq, port_info1) >= 0) { + const unsigned int port_caps1 + = snd_seq_port_info_get_capability(port_info1); + if (port_caps1 & SND_SEQ_PORT_CAP_NO_EXPORT) + continue; + qjackctlGraphItem::Mode port_mode1 = qjackctlGraphItem::None; + const unsigned int port_is_input + = (SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE); + if ((port_caps1 & port_is_input) == port_is_input) { + port_mode1 = qjackctlGraphItem::Input; + qjackctlGraphNode *node1 = nullptr; + qjackctlGraphPort *port1 = nullptr; + if (findClientPort(client_info1, port_info1, + port_mode1, &node1, &port1, true)) { + node1->setMarked(true); + port1->setMarked(true); + } + } + const unsigned int port_is_output + = (SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ); + if ((port_caps1 & port_is_output) == port_is_output) { + port_mode1 = qjackctlGraphItem::Output; + qjackctlGraphNode *node1 = nullptr; + qjackctlGraphPort *port1 = nullptr; + if (findClientPort(client_info1, port_info1, + port_mode1, &node1, &port1, true)) { + node1->setMarked(true); + port1->setMarked(true); + } + } + } + } + + // 2. Connections inventory... + // + snd_seq_client_info_t *client_info2; + snd_seq_port_info_t *port_info2; + + snd_seq_client_info_alloca(&client_info2); + snd_seq_port_info_alloca(&port_info2); + + snd_seq_query_subscribe_t *seq_subs; + snd_seq_addr_t seq_addr; + + snd_seq_query_subscribe_alloca(&seq_subs); + + snd_seq_client_info_set_client(client_info1, -1); + + while (snd_seq_query_next_client(seq, client_info1) >= 0) { + const int client_id + = snd_seq_client_info_get_client(client_info1); + if (0 >= client_id) // Skip 0:system client... + continue; + snd_seq_port_info_set_client(port_info1, client_id); + snd_seq_port_info_set_port(port_info1, -1); + while (snd_seq_query_next_port(seq, port_info1) >= 0) { + const unsigned int port_caps1 + = snd_seq_port_info_get_capability(port_info1); + if (port_caps1 & SND_SEQ_PORT_CAP_NO_EXPORT) + continue; + if (port_caps1 & (SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ)) { + const qjackctlGraphItem::Mode port_mode1 + = qjackctlGraphItem::Output; + qjackctlGraphNode *node1 = nullptr; + qjackctlGraphPort *port1 = nullptr; + if (!findClientPort(client_info1, port_info1, + port_mode1, &node1, &port1, false)) + continue; + snd_seq_query_subscribe_set_type(seq_subs, SND_SEQ_QUERY_SUBS_READ); + snd_seq_query_subscribe_set_index(seq_subs, 0); + seq_addr.client = client_id; + seq_addr.port = snd_seq_port_info_get_port(port_info1); + snd_seq_query_subscribe_set_root(seq_subs, &seq_addr); + while (snd_seq_query_port_subscribers(seq, seq_subs) >= 0) { + seq_addr = *snd_seq_query_subscribe_get_addr(seq_subs); + if (snd_seq_get_any_client_info(seq, + seq_addr.client, client_info2) >= 0 && + snd_seq_get_any_port_info(seq, + seq_addr.client, seq_addr.port, port_info2) >= 0) { + const qjackctlGraphItem::Mode port_mode2 + = qjackctlGraphItem::Input; + qjackctlGraphNode *node2 = nullptr; + qjackctlGraphPort *port2 = nullptr; + if (findClientPort(client_info2, port_info2, + port_mode2, &node2, &port2, false)) { + qjackctlGraphConnect *connect = port1->findConnect(port2); + if (connect == nullptr) { + connect = new qjackctlGraphConnect(); + connect->setPort1(port1); + connect->setPort2(port2); + connect->updatePortTypeColors(); + connect->updatePath(); + qjackctlGraphSect::addItem(connect); + } + if (connect) + connect->setMarked(true); + } + } + snd_seq_query_subscribe_set_index(seq_subs, + snd_seq_query_subscribe_get_index(seq_subs) + 1); + } + } + } + } + + // 3. Clean-up all un-marked items... + // + qjackctlGraphSect::resetItems(qjackctlAlsaGraph::nodeType()); +} + + +void qjackctlAlsaGraph::clearItems (void) +{ + QMutexLocker locker(&g_mutex); + +#ifdef CONFIG_DEBUG + qDebug("qjackctlAlsaGraph::clearItems()"); +#endif + + qjackctlGraphSect::clearItems(qjackctlAlsaGraph::nodeType()); +} + + +// Special port-type colors defaults (virtual). +void qjackctlAlsaGraph::resetPortTypeColors (void) +{ + qjackctlGraphCanvas *canvas = qjackctlGraphSect::canvas(); + if (canvas) { + canvas->setPortTypeColor( + qjackctlAlsaGraph::midiPortType(), + QColor(Qt::darkMagenta).darker(120)); + } +} + + +// Client/port item aliases accessor. +QList qjackctlAlsaGraph::item_aliases ( + qjackctlGraphItem *item ) const +{ + QList alist; + + qjackctlAliases *aliases = nullptr; + qjackctlGraphCanvas *canvas = qjackctlGraphSect::canvas(); + if (canvas) + aliases = canvas->aliases(); + if (aliases == nullptr) + return alist; // empty! + + uint item_type = 0; + qjackctlGraphItem::Mode item_mode = qjackctlGraphItem::None; + + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + item_type = node->nodeType(); + item_mode = node->nodeMode(); + } + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) { + item_type = port->portType(); + item_mode = port->portMode(); + } + } + + if (!item_type || !item_mode) + return alist; // empty again! + + if (item_type == qjackctlAlsaGraph::midiPortType()) { + // ALSA MIDI type... + if (item_mode & qjackctlGraphItem::Input) + alist.append(&(aliases->alsaInputs)); + if (item_mode & qjackctlGraphItem::Output) + alist.append(&(aliases->alsaOutputs)); + } + + return alist; // hopefully non empty! +} + + +#endif // CONFIG_ALSA_SEQ + + +// end of qjackctlAlsaGraph.cpp diff -Nru qjackctl-0.4.5/src/qjackctlAlsaGraph.h qjackctl-0.6.0/src/qjackctlAlsaGraph.h --- qjackctl-0.4.5/src/qjackctlAlsaGraph.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlAlsaGraph.h 2019-10-17 07:45:45.951673224 +0000 @@ -0,0 +1,89 @@ +// qjackctlAlsaGraph.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlAlsaGraph_h +#define __qjackctlAlsaGraph_h + +#include "qjackctlAbout.h" +#include "qjackctlGraph.h" + + +#ifdef CONFIG_ALSA_SEQ + +#include + +#include + + +//---------------------------------------------------------------------------- +// qjackctlAlsaGraph -- ALSA graph driver + +class qjackctlAlsaGraph : public qjackctlGraphSect +{ +public: + + // Constructor. + qjackctlAlsaGraph(qjackctlGraphCanvas *canvas); + + // ALSA port (dis)connection. + void connectPorts( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool connect); + + // ALSA graph updaters. + void updateItems(); + void clearItems(); + + // Special port-type colors defaults (virtual). + void resetPortTypeColors(); + + // ALSA node type inquirer. + static bool isNodeType(uint node_type); + // ALSA node type. + static uint nodeType(); + + // ALSA port type inquirer. + static bool isPortType(uint port_type); + // ALSA port type. + static uint midiPortType(); + +protected: + + // ALSA client:port finder and creator if not existing. + bool findClientPort(snd_seq_client_info_t *client_info, + snd_seq_port_info_t *port_info, qjackctlGraphItem::Mode port_mode, + qjackctlGraphNode **node, qjackctlGraphPort **port, bool add_new); + + // Client/port item aliases accessor. + QList item_aliases(qjackctlGraphItem *item) const; + +private: + + // Notifier sanity mutex. + static QMutex g_mutex; +}; + + +#endif // CONFIG_ALSA_SEQ + + +#endif // __qjackctlAlsaGraph_h + +// end of qjackctlAlsaGraph.h diff -Nru qjackctl-0.4.5/src/qjackctlConnectAlias.cpp qjackctl-0.6.0/src/qjackctlConnectAlias.cpp --- qjackctl-0.4.5/src/qjackctlConnectAlias.cpp 2017-04-27 14:44:14.553754974 +0000 +++ qjackctl-0.6.0/src/qjackctlConnectAlias.cpp 1970-01-01 00:00:00.000000000 +0000 @@ -1,275 +0,0 @@ -// qjackctlConnectAlias.cpp -// -/**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -*****************************************************************************/ - -#include "qjackctlConnectAlias.h" - -#include - - -//---------------------------------------------------------------------- -// class qjackctlClientAlias -- Client item alias map. - -// Constructor. -qjackctlClientAlias::qjackctlClientAlias ( const QString& sClientName, - const QString& sClientAlias ) -{ - if (sClientAlias.isEmpty()) { - m_rxClientName.setPattern(escapeRegExpDigits(sClientName)); - m_sClientAlias = sClientName; - } else { - m_rxClientName.setPattern(sClientName); - m_sClientAlias = sClientAlias; - } -} - -// Default destructor. -qjackctlClientAlias::~qjackctlClientAlias (void) -{ - m_ports.clear(); -} - - -// Client name method. -QString qjackctlClientAlias::clientName (void) const -{ - return m_rxClientName.pattern(); -} - - -// Client name matcher. -bool qjackctlClientAlias::matchClientName ( const QString& sClientName ) const -{ - return m_rxClientName.exactMatch(sClientName); -} - - -// Client aliasing methods. -const QString& qjackctlClientAlias::clientAlias (void) const -{ - return m_sClientAlias; -} - -void qjackctlClientAlias::setClientAlias ( const QString& sClientAlias ) -{ - m_sClientAlias = sClientAlias; -} - - -// Port aliasing methods. -QString qjackctlClientAlias::portAlias ( const QString& sPortName ) const -{ - QString sPortAlias = m_ports[sPortName]; - if (sPortAlias.isEmpty()) - sPortAlias = sPortName; - return sPortAlias; -} - -void qjackctlClientAlias::setPortAlias ( const QString& sPortName, - const QString& sPortAlias ) -{ - m_ports[sPortName] = sPortAlias; -} - - -// Save client/port aliases definitions. -void qjackctlClientAlias::saveSettings ( QSettings& settings, - const QString& sClientKey ) -{ - settings.beginGroup(sClientKey); - settings.setValue("/Name", m_rxClientName.pattern()); - settings.setValue("/Alias", m_sClientAlias); - int iPort = 0; - QMap::ConstIterator iter = m_ports.begin(); - while (iter != m_ports.end()) { - settings.beginGroup("/Port" + QString::number(++iPort)); - settings.setValue("/Name", iter.key()); - settings.setValue("/Alias", iter.value()); - settings.endGroup(); - ++iter; - } - settings.endGroup(); -} - - -// Escape and format a string as a regular expresion. -QString qjackctlClientAlias::escapeRegExpDigits ( const QString& s, - int iThreshold ) -{ - QString sDigits; - QString sResult; - QString sEscape = QRegExp::escape(s); - int iDigits = 0; - - for (int i = 0; i < sEscape.length(); i++) { - const QChar& ch = sEscape.at(i); - if (ch.isDigit()) { - if (iDigits < iThreshold) - sDigits += ch; - else - sDigits = "[0-9]+"; - iDigits++; - } else { - if (iDigits > 0) { - sResult += sDigits; - sDigits = QString::null; - iDigits = 0; - } - sResult += ch; - } - } - - if (iDigits > 0) - sResult += sDigits; - - return sResult; -} - - -// Need for generic sort. -bool qjackctlClientAlias::operator< ( const qjackctlClientAlias& other ) -{ - return (m_sClientAlias < other.clientAlias()); -} - - -//---------------------------------------------------------------------- -// class qjackctlConnectAlias -- Client list alias map. - -// Constructor. -qjackctlConnectAlias::qjackctlConnectAlias (void) -{ -} - -// Default destructor. -qjackctlConnectAlias::~qjackctlConnectAlias (void) -{ - qDeleteAll(*this); - clear(); -} - - -// Client finders. -qjackctlClientAlias *qjackctlConnectAlias::findClientName ( - const QString& sClientName ) -{ - QListIterator iter(*this); - while (iter.hasNext()) { - qjackctlClientAlias *pClient = iter.next(); - if (pClient->matchClientName(sClientName)) - return pClient; - } - - return NULL; -} - -// Client aliasing methods. -void qjackctlConnectAlias::setClientAlias ( const QString& sClientName, - const QString& sClientAlias ) -{ - qjackctlClientAlias *pClient = findClientName(sClientName); - if (pClient == NULL) { - pClient = new qjackctlClientAlias(sClientName); - append(pClient); - } - pClient->setClientAlias(sClientAlias); -} - -QString qjackctlConnectAlias::clientAlias ( const QString& sClientName ) -{ - qjackctlClientAlias *pClient = findClientName(sClientName); - if (pClient == NULL) - return sClientName; - - return pClient->clientAlias(); -} - - -// Client/port aliasing methods. -void qjackctlConnectAlias::setPortAlias ( const QString& sClientName, - const QString& sPortName, const QString& sPortAlias ) -{ - qjackctlClientAlias *pClient = findClientName(sClientName); - if (pClient == NULL) { - pClient = new qjackctlClientAlias(sClientName); - append(pClient); - } - pClient->setPortAlias(sPortName, sPortAlias); -} - -QString qjackctlConnectAlias::portAlias ( const QString& sClientName, - const QString& sPortName ) -{ - qjackctlClientAlias *pClient = findClientName(sClientName); - if (pClient == NULL) - return sPortName; - - return pClient->portAlias(sPortName); -} - - -// Load/save aliases definitions. -void qjackctlConnectAlias::loadSettings ( QSettings& settings, - const QString& sAliasesKey ) -{ - clear(); - - settings.beginGroup(sAliasesKey); - QStringListIterator iter(settings.childGroups()); - while (iter.hasNext()) { - QString sClientKey = iter.next(); - QString sClientName = settings.value(sClientKey + "/Name").toString(); - QString sClientAlias = settings.value(sClientKey + "/Alias").toString(); - if (!sClientName.isEmpty() && !sClientAlias.isEmpty()) { - qjackctlClientAlias *pClient = - new qjackctlClientAlias(sClientName, sClientAlias); - append(pClient); - settings.beginGroup(sClientKey); - QStringListIterator it(settings.childGroups()); - while (it.hasNext()) { - QString sPortKey = it.next(); - QString sPortName = settings.value(sPortKey + "/Name").toString(); - QString sPortAlias = settings.value(sPortKey + "/Alias").toString(); - if (!sPortName.isEmpty() && !sPortAlias.isEmpty()) - pClient->setPortAlias(sPortName, sPortAlias); - } - settings.endGroup(); - } - } - settings.endGroup(); -} - -void qjackctlConnectAlias::saveSettings ( QSettings& settings, - const QString& sAliasesKey ) -{ - qSort(*this); - - settings.beginGroup(sAliasesKey); - int iClient = 0; - QListIterator iter(*this); - while (iter.hasNext()) { - (iter.next())->saveSettings(settings, - "Client" + QString::number(++iClient)); - } - settings.endGroup(); -} - - -// end of qjackctlConnectAlias.cpp diff -Nru qjackctl-0.4.5/src/qjackctlConnectAlias.h qjackctl-0.6.0/src/qjackctlConnectAlias.h --- qjackctl-0.4.5/src/qjackctlConnectAlias.h 2017-04-27 14:44:14.553754974 +0000 +++ qjackctl-0.6.0/src/qjackctlConnectAlias.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,112 +0,0 @@ -// qjackctlConnectAlias.h -// -/**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -*****************************************************************************/ - -#ifndef __qjackctlConnectAlias_h -#define __qjackctlConnectAlias_h - -#include -#include -#include - - -// Client item alias map. -class qjackctlClientAlias -{ -public: - - // Constructor. - qjackctlClientAlias (const QString& sClientName, - const QString& sClientAlias = QString::null); - - // Default destructor. - ~qjackctlClientAlias(); - - // Client name accessor. - QString clientName() const; - - // Client name matcher. - bool matchClientName(const QString& sClientName) const; - - // Client aliasing methods. - const QString& clientAlias() const; - void setClientAlias(const QString& sClientAlias); - - // Port aliasing methods. - QString portAlias (const QString& sPortName) const; - void setPortAlias (const QString& sPortName, - const QString& sPortAlias); - - // Save client/port aliases definitions. - void saveSettings(QSettings& settings, const QString& sClientKey); - - // Need for generid sort. - bool operator< (const qjackctlClientAlias& other); - - // Escape and format a string as a regular expresion. - static QString escapeRegExpDigits(const QString& s, int iThreshold = 3); - -private: - - // Client name regexp. - QRegExp m_rxClientName; - // Client alias. - QString m_sClientAlias; - - // Port aliases map. - QMap m_ports; -}; - - -// Client list alias map. -class qjackctlConnectAlias : public QList -{ -public: - - // Constructor. - qjackctlConnectAlias (); - // Default destructor. - ~qjackctlConnectAlias (); - - // Client aliasing methods. - QString clientAlias (const QString& sClientName); - void setClientAlias (const QString& sClientName, - const QString& sClientAlias); - - // Port aliasing methods. - QString portAlias (const QString& sClientName, - const QString& sPortName); - void setPortAlias (const QString& sClientName, - const QString& sPortName, const QString& sPortAlias); - - // Load/save aliases definitions. - void loadSettings(QSettings& settings, const QString& sAliasesKey); - void saveSettings(QSettings& settings, const QString& sAliasesKey); - -private: - - // Client item finder. - qjackctlClientAlias *findClientName (const QString& sClientName); -}; - - -#endif // __qjackctlConnectAlias_h - -// end of qjackctlConnectAlias.h diff -Nru qjackctl-0.4.5/src/qjackctlConnect.cpp qjackctl-0.6.0/src/qjackctlConnect.cpp --- qjackctl-0.4.5/src/qjackctlConnect.cpp 2017-04-27 14:44:14.552754474 +0000 +++ qjackctl-0.6.0/src/qjackctlConnect.cpp 2019-10-17 07:45:45.952673224 +0000 @@ -1,7 +1,7 @@ // qjackctlConnect.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -36,7 +36,7 @@ #include #include -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #endif @@ -99,12 +99,12 @@ // Check aliasing... qjackctlClientListView *pClientListView = (m_pClient->clientList())->listView(); - qjackctlConnectAlias *pAliases - = pClientListView->aliases(); - if (pAliases) { + qjackctlAliasList *pAliasList + = pClientListView->aliasList(); + if (pAliasList) { const QString& sClientName = m_pClient->clientName(); - pAliases->setPortAlias(sClientName, m_sPortName, sPortNameAlias); - pClientListView->setDirty(true); + pAliasList->setPortAlias(sClientName, m_sPortName, sPortNameAlias); + pClientListView->emitAliasesChanged(); } } @@ -116,11 +116,11 @@ // Check aliasing... qjackctlClientListView *pClientListView = (m_pClient->clientList())->listView(); - qjackctlConnectAlias *pAliases - = pClientListView->aliases(); - if (pAliases) { + qjackctlAliasList *pAliasList + = pClientListView->aliasList(); + if (pAliasList) { const QString& sClientName = m_pClient->clientName(); - sPortNameAlias = pAliases->portAlias(sClientName, m_sPortName); + sPortNameAlias = pAliasList->portAlias(sClientName, m_sPortName); bRenameEnabled = pClientListView->isRenameEnabled(); } @@ -228,7 +228,7 @@ return pPort; } - return NULL; + return nullptr; } qjackctlPortItem *qjackctlPortItem::findConnectPtr ( qjackctlPortItem *pPortPtr ) @@ -240,7 +240,7 @@ return pPort; } - return NULL; + return nullptr; } @@ -268,11 +268,11 @@ // Set the new color. QTreeWidget *pTreeWidget = QTreeWidgetItem::treeWidget(); - if (pTreeWidget == NULL) + if (pTreeWidget == nullptr) return; const QPalette& pal = pTreeWidget->palette(); - QTreeWidgetItem::setTextColor(0, m_bHilite + QTreeWidgetItem::setForeground(0, m_bHilite ? (pal.base().color().value() < 0x7f ? Qt::cyan : Qt::blue) : pal.text().color()); } @@ -324,7 +324,7 @@ return pPort; } - return NULL; + return nullptr; } @@ -361,11 +361,11 @@ { qjackctlClientListView *pClientListView = m_pClientList->listView(); - qjackctlConnectAlias *pAliases - = pClientListView->aliases(); - if (pAliases) { - pAliases->setClientAlias(m_sClientName, sClientNameAlias); - pClientListView->setDirty(true); + qjackctlAliasList *pAliasList + = pClientListView->aliasList(); + if (pAliasList) { + pAliasList->setClientAlias(m_sClientName, sClientNameAlias); + pClientListView->emitAliasesChanged(); } } @@ -377,10 +377,10 @@ // Check aliasing... qjackctlClientListView *pClientListView = m_pClientList->listView(); - qjackctlConnectAlias *pAliases - = pClientListView->aliases(); - if (pAliases) { - sClientNameAlias = pAliases->clientAlias(m_sClientName); + qjackctlAliasList *pAliasList + = pClientListView->aliasList(); + if (pAliasList) { + sClientNameAlias = pAliasList->clientAlias(m_sClientName); bRenameEnabled = pClientListView->isRenameEnabled(); } @@ -481,11 +481,11 @@ // Set the new color. QTreeWidget *pTreeWidget = QTreeWidgetItem::treeWidget(); - if (pTreeWidget == NULL) + if (pTreeWidget == nullptr) return; const QPalette& pal = pTreeWidget->palette(); - QTreeWidgetItem::setTextColor(0, m_iHilite > 0 + QTreeWidgetItem::setForeground(0, m_iHilite > 0 ? (pal.base().color().value() < 0x7f ? Qt::darkCyan : Qt::darkBlue) : pal.text().color()); } @@ -555,7 +555,7 @@ return pClient; } - return NULL; + return nullptr; } // Client:port finder. @@ -678,52 +678,52 @@ // Natural decimal sorting comparator. bool qjackctlClientList::lessThan ( - const QTreeWidgetItem& i1, const QTreeWidgetItem& i2 ) + const QTreeWidgetItem& item1, const QTreeWidgetItem& item2 ) { - const QString& s1 = i1.text(0); - const QString& s2 = i2.text(0); + const QString& s1 = item1.text(0); + const QString& s2 = item2.text(0); - const int cch1 = s1.length(); - const int cch2 = s2.length(); + const int n1 = s1.length(); + const int n2 = s2.length(); - int ich1, ich2; + int i1, i2; - for (ich1 = ich2 = 0; ich1 < cch1 && ich2 < cch2; ich1++, ich2++) { + for (i1 = i2 = 0; i1 < n1 && i2 < n2; ++i1, ++i2) { - // Skip (white)spaces... - while (s1.at(ich1).isSpace()) - ich1++; - while (s2.at(ich2).isSpace()) - ich2++; + // skip (white)spaces... + while (s1.at(i1).isSpace()) + ++i1; + while (s2.at(i2).isSpace()) + ++i2; // Normalize (to uppercase) the next characters... - QChar ch1 = s1.at(ich1).toUpper(); - QChar ch2 = s2.at(ich2).toUpper(); + QChar c1 = s1.at(i1).toUpper(); + QChar c2 = s2.at(i2).toUpper(); - if (ch1.isDigit() && ch2.isDigit()) { + if (c1.isDigit() && c2.isDigit()) { // Find the whole length numbers... - const int iDigits1 = ich1++; - while (ich1 < cch1 && s1.at(ich1).isDigit()) - ich1++; - const int iDigits2 = ich2++; - while (ich2 < cch2 && s2.at(ich2).isDigit()) - ich2++; + int j1 = i1++; + while (i1 < n1 && s1.at(i1).isDigit()) + ++i1; + int j2 = i2++; + while (i2 < n2 && s2.at(i2).isDigit()) + ++i2; // Compare as natural decimal-numbers... - const int n1 = s1.mid(iDigits1, ich1 - iDigits1).toInt(); - const int n2 = s2.mid(iDigits2, ich2 - iDigits2).toInt(); - if (n1 != n2) - return (n1 < n2); + j1 = s1.mid(j1, i1 - j1).toInt(); + j2 = s2.mid(j2, i2 - j2).toInt(); + if (j1 != j2) + return (j1 < j2); // Never go out of bounds... - if (ich1 >= cch1 || ich1 >= cch2) + if (i1 >= n1 || i2 >= n2) break; // Go on with this next char... - ch1 = s1.at(ich1).toUpper(); - ch2 = s2.at(ich2).toUpper(); + c1 = s1.at(i1).toUpper(); + c2 = s2.at(i2).toUpper(); } // Compare this char... - if (ch1 != ch2) - return (ch1 < ch2); + if (c1 != c2) + return (c1 < c2); } // Probable exact match. @@ -754,16 +754,16 @@ m_pAutoOpenTimer = 0; m_iAutoOpenTimeout = 0; - m_pDragItem = NULL; - m_pDragItem = NULL; + m_pDragItem = nullptr; + m_pDragItem = nullptr; - m_pAliases = NULL; + m_pAliasList = nullptr; m_bRenameEnabled = false; QHeaderView *pHeader = QTreeWidget::header(); pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(120); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); pHeader->setSectionsClickable(true); @@ -781,7 +781,7 @@ QTreeWidget::setAcceptDrops(true); QTreeWidget::setDropIndicatorShown(true); QTreeWidget::setAutoScroll(true); - QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection); + QTreeWidget::setSelectionMode(QAbstractItemView::ExtendedSelection); QTreeWidget::setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QTreeWidget::setSortingEnabled(true); @@ -828,7 +828,7 @@ if (m_pAutoOpenTimer) delete m_pAutoOpenTimer; - m_pAutoOpenTimer = NULL; + m_pAutoOpenTimer = nullptr; if (m_iAutoOpenTimeout > 0) { m_pAutoOpenTimer = new QTimer(this); @@ -847,10 +847,10 @@ // Aliasing support methods. -void qjackctlClientListView::setAliases ( - qjackctlConnectAlias *pAliases, bool bRenameEnabled ) +void qjackctlClientListView::setAliasList ( + qjackctlAliasList *pAliasList, bool bRenameEnabled ) { - m_pAliases = pAliases; + m_pAliasList = pAliasList; m_bRenameEnabled = bRenameEnabled; // For each client item, if any. @@ -861,7 +861,7 @@ continue; qjackctlClientItem *pClientItem = static_cast (pItem); - if (pClientItem == NULL) + if (pClientItem == nullptr) continue; pClientItem->updateClientName(); // For each port item... @@ -872,16 +872,16 @@ continue; qjackctlPortItem *pPortItem = static_cast (pChildItem); - if (pPortItem == NULL) + if (pPortItem == nullptr) continue; pPortItem->updatePortName(); } } } -qjackctlConnectAlias *qjackctlClientListView::aliases (void) const +qjackctlAliasList *qjackctlClientListView::aliasList (void) const { - return m_pAliases; + return m_pAliasList; } bool qjackctlClientListView::isRenameEnabled (void) const @@ -902,11 +902,11 @@ // In-place aliasing slot. void qjackctlClientListView::renamedSlot (void) { - if (m_pAliases == NULL) + if (m_pAliasList == nullptr) return; QTreeWidgetItem *pItem = QTreeWidget::currentItem(); - if (pItem == NULL) + if (pItem == nullptr) return; const QString& sText = pItem->text(0); @@ -989,11 +989,11 @@ m_pAutoOpenTimer->start(m_iAutoOpenTimeout); qjackctlConnect *pConnect = m_pConnectView->binding(); if ((pItem->flags() & Qt::ItemIsDropEnabled) == 0 - || pConnect == NULL || !pConnect->canConnectSelected()) - pItem = NULL; + || pConnect == nullptr || !pConnect->canConnectSelected()) + pItem = nullptr; } } else { - m_pDropItem = NULL; + m_pDropItem = nullptr; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } @@ -1074,9 +1074,9 @@ pDrag->setMimeData(pMimeData); pDrag->setPixmap(m_pDragItem->icon(0).pixmap(16)); pDrag->setHotSpot(QPoint(-4, -12)); - pDrag->start(Qt::LinkAction); + pDrag->exec(Qt::LinkAction); // We've dragged and maybe dropped it by now... - m_pDragItem = NULL; + m_pDragItem = nullptr; } } @@ -1121,15 +1121,10 @@ -// Dirty flag methods. -void qjackctlClientListView::setDirty ( bool bDirty ) +// Dirty aliases notification. +void qjackctlClientListView::emitAliasesChanged (void) { - m_pConnectView->setDirty(bDirty); -} - -bool qjackctlClientListView::isDirty (void) const -{ - return m_pConnectView->isDirty(); + m_pConnectView->emitAliasesChanged(); } @@ -1162,7 +1157,7 @@ QRect rect; QTreeWidget *pList = pItem->treeWidget(); QTreeWidgetItem *pParent = pItem->parent(); - qjackctlClientItem *pClientItem = NULL; + qjackctlClientItem *pClientItem = nullptr; if (pParent && pParent->type() == QJACKCTL_CLIENTITEM) pClientItem = static_cast (pParent); if (pClientItem && !pClientItem->isOpen()) { @@ -1189,21 +1184,17 @@ if (y1 > h1) pPainter->drawLine(x1, y1, x1 + 4, y1); - // How do we'll draw it? - if (m_pConnectView->isBezierLines()) { - // Setup control points - QPolygon spline(4); - const int cp = int(float(x2 - x1 - 8) * 0.4f); - spline.putPoints(0, 4, - x1 + 4, y1, x1 + 4 + cp, y1, - x2 - 4 - cp, y2, x2 - 4, y2); - // The connection line, it self. - QPainterPath path; - path.moveTo(spline.at(0)); - path.cubicTo(spline.at(1), spline.at(2), spline.at(3)); - pPainter->strokePath(path, pen); - } - else pPainter->drawLine(x1 + 4, y1, x2 - 4, y2); + // Setup control points + QPolygon spline(4); + const int cp = int(float(x2 - x1 - 8) * 0.4f); + spline.putPoints(0, 4, + x1 + 4, y1, x1 + 4 + cp, y1, + x2 - 4 - cp, y2, x2 - 4, y2); + // The connection line, it self. + QPainterPath path; + path.moveTo(spline.at(0)); + path.cubicTo(spline.at(1), spline.at(2), spline.at(3)); + pPainter->strokePath(path, pen); // Invisible input ports don't get a connecting dot. if (y2 > h2) @@ -1214,10 +1205,10 @@ // Draw visible port connection relation arrows. void qjackctlConnectorView::paintEvent ( QPaintEvent * ) { - if (m_pConnectView == NULL) + if (m_pConnectView == nullptr) return; - if (m_pConnectView->OListView() == NULL || - m_pConnectView->IListView() == NULL) + if (m_pConnectView->OListView() == nullptr || + m_pConnectView->IListView() == nullptr) return; qjackctlClientListView *pOListView = m_pConnectView->OListView(); @@ -1254,7 +1245,7 @@ continue; qjackctlClientItem *pOClient = static_cast (pItem); - if (pOClient == NULL) + if (pOClient == nullptr) continue; // Set new connector color. ++i; @@ -1339,10 +1330,9 @@ m_pConnectorView = new qjackctlConnectorView(this); m_pIListView = new qjackctlClientListView(this, false); - m_pConnect = NULL; + m_pConnect = nullptr; - m_bBezierLines = false; - m_iIconSize = 0; + m_iIconSize = 0; QSplitter::setHandleWidth(2); @@ -1392,7 +1382,7 @@ if (m_pConnect) return m_pConnect->OClientList(); else - return NULL; + return nullptr; } qjackctlClientList *qjackctlConnectView::IClientList (void) const @@ -1400,19 +1390,7 @@ if (m_pConnect) return m_pConnect->OClientList(); else - return NULL; -} - - -// Connector line style accessors. -void qjackctlConnectView::setBezierLines ( bool bBezierLines ) -{ - m_bBezierLines = bBezierLines; -} - -bool qjackctlConnectView::isBezierLines (void) const -{ - return m_bBezierLines; + return nullptr; } @@ -1444,18 +1422,10 @@ } -// Dirty flag methods. -void qjackctlConnectView::setDirty ( bool bDirty ) -{ - m_bDirty = bDirty; - - if (bDirty) - emit contentsChanged(); -} - -bool qjackctlConnectView::isDirty (void) const +// Dirty aliases notification. +void qjackctlConnectView::emitAliasesChanged (void) { - return m_bDirty; + emit aliasesChanged(); } @@ -1468,8 +1438,8 @@ { m_pConnectView = pConnectView; - m_pOClientList = NULL; - m_pIClientList = NULL; + m_pOClientList = nullptr; + m_pIClientList = nullptr; m_iMutex = 0; @@ -1482,15 +1452,15 @@ // Force end of works here. m_iMutex++; - m_pConnectView->setBinding(NULL); + m_pConnectView->setBinding(nullptr); if (m_pOClientList) delete m_pOClientList; if (m_pIClientList) delete m_pIClientList; - m_pOClientList = NULL; - m_pIClientList = NULL; + m_pOClientList = nullptr; + m_pIClientList = nullptr; m_pConnectView->connectorView()->update(); } @@ -1517,7 +1487,7 @@ bool qjackctlConnect::connectPortsEx ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { - if (pOPort->findConnectPtr(pIPort) != NULL) + if (pOPort->findConnectPtr(pIPort) != nullptr) return false; emit connecting(pOPort, pIPort); @@ -1534,7 +1504,7 @@ bool qjackctlConnect::disconnectPortsEx ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { - if (pOPort->findConnectPtr(pIPort) == NULL) + if (pOPort->findConnectPtr(pIPort) == nullptr) return false; emit disconnecting(pOPort, pIPort); @@ -1569,60 +1539,74 @@ m_pConnectView->connectorView()->update(); // Now with our predicate work... - QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); - if (pOItem == NULL) - return false; + const QList oitems + = (m_pOClientList->listView())->selectedItems(); + const QList iitems + = (m_pIClientList->listView())->selectedItems(); - QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); - if (pIItem == NULL) + if (oitems.isEmpty() || iitems.isEmpty()) return false; - if (pOItem->type() == QJACKCTL_CLIENTITEM) { - qjackctlClientItem *pOClient - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // Each-to-each connections... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator oport(pOClient->ports()); - QListIterator iport(pIClient->ports()); - while (oport.hasNext() && iport.hasNext()) { - qjackctlPortItem *pOPort = oport.next(); - qjackctlPortItem *pIPort = iport.next(); - if (pOPort->findConnectPtr(pIPort) == NULL) - return true; + QListIterator oiter(oitems); + QListIterator iiter(iitems); + + const int iNumItems + = qMax(oitems.count(), iitems.count()); + + for (int i = 0; i < iNumItems; ++i) { + if (!oiter.hasNext()) + oiter.toFront(); + if (!iiter.hasNext()) + iiter.toFront(); + QTreeWidgetItem *pOItem = oiter.next(); + QTreeWidgetItem *pIItem = iiter.next(); + if (pOItem->type() == QJACKCTL_CLIENTITEM) { + qjackctlClientItem *pOClient + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // Each-to-each connections... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator oport(pOClient->ports()); + QListIterator iport(pIClient->ports()); + while (oport.hasNext() && iport.hasNext()) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort = iport.next(); + if (pOPort->findConnectPtr(pIPort) == nullptr) + return true; + } + } else { + // Many(all)-to-one/many connection... + QListIterator oport(pOClient->ports()); + while (oport.hasNext() + && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort + = static_cast (pIItem); + if (pOPort->findConnectPtr(pIPort) == nullptr) + return true; + pIItem = (m_pIClientList->listView())->itemBelow(pIItem); + } } } else { - // Many(all)-to-one/many connection... - QListIterator oport(pOClient->ports()); - while (oport.hasNext() - && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { - qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pOPort + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // One-to-many(all) connection... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator iport(pIClient->ports()); + while (iport.hasNext()) { + qjackctlPortItem *pIPort = iport.next(); + if (pOPort->findConnectPtr(pIPort) == nullptr) + return true; + } + } else { + // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); - if (pOPort->findConnectPtr(pIPort) == NULL) - return true; - pIItem = (m_pIClientList->listView())->itemBelow(pIItem); - } - } - } else { - qjackctlPortItem *pOPort - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // One-to-many(all) connection... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator iport(pIClient->ports()); - while (iport.hasNext()) { - qjackctlPortItem *pIPort = iport.next(); - if (pOPort->findConnectPtr(pIPort) == NULL) - return true; + return (pOPort->findConnectPtr(pIPort) == nullptr); } - } else { - // One-to-one connection... - qjackctlPortItem *pIPort - = static_cast (pIItem); - return (pOPort->findConnectPtr(pIPort) == NULL); } } @@ -1650,58 +1634,72 @@ bool qjackctlConnect::connectSelectedEx (void) { - QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); - if (pOItem == NULL) - return false; + const QList oitems + = (m_pOClientList->listView())->selectedItems(); + const QList iitems + = (m_pIClientList->listView())->selectedItems(); - QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); - if (pIItem == NULL) + if (oitems.isEmpty() || iitems.isEmpty()) return false; - if (pOItem->type() == QJACKCTL_CLIENTITEM) { - qjackctlClientItem *pOClient - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // Each-to-each connections... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator oport(pOClient->ports()); - QListIterator iport(pIClient->ports()); - while (oport.hasNext() && iport.hasNext()) { - qjackctlPortItem *pOPort = oport.next(); - qjackctlPortItem *pIPort = iport.next(); - connectPortsEx(pOPort, pIPort); + QListIterator oiter(oitems); + QListIterator iiter(iitems); + + const int iNumItems + = qMax(oitems.count(), iitems.count()); + + for (int i = 0; i < iNumItems; ++i) { + if (!oiter.hasNext()) + oiter.toFront(); + if (!iiter.hasNext()) + iiter.toFront(); + QTreeWidgetItem *pOItem = oiter.next(); + QTreeWidgetItem *pIItem = iiter.next(); + if (pOItem->type() == QJACKCTL_CLIENTITEM) { + qjackctlClientItem *pOClient + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // Each-to-each connections... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator oport(pOClient->ports()); + QListIterator iport(pIClient->ports()); + while (oport.hasNext() && iport.hasNext()) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort = iport.next(); + connectPortsEx(pOPort, pIPort); + } + } else { + // Many(all)-to-one/many connection... + QListIterator oport(pOClient->ports()); + while (oport.hasNext() + && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort + = static_cast (pIItem); + connectPortsEx(pOPort, pIPort); + pIItem = (m_pIClientList->listView())->itemBelow(pIItem); + } } } else { - // Many(all)-to-one/many connection... - QListIterator oport(pOClient->ports()); - while (oport.hasNext() - && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { - qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pOPort + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // One-to-many(all) connection... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator iport(pIClient->ports()); + while (iport.hasNext()) { + qjackctlPortItem *pIPort = iport.next(); + connectPortsEx(pOPort, pIPort); + } + } else { + // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); connectPortsEx(pOPort, pIPort); - pIItem = (m_pIClientList->listView())->itemBelow(pIItem); } } - } else { - qjackctlPortItem *pOPort - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // One-to-many(all) connection... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator iport(pIClient->ports()); - while (iport.hasNext()) { - qjackctlPortItem *pIPort = iport.next(); - connectPortsEx(pOPort, pIPort); - } - } else { - // One-to-one connection... - qjackctlPortItem *pIPort - = static_cast (pIItem); - connectPortsEx(pOPort, pIPort); - } } return true; @@ -1723,60 +1721,74 @@ bool qjackctlConnect::canDisconnectSelectedEx (void) { - QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); - if (!pOItem) - return false; + const QList oitems + = (m_pOClientList->listView())->selectedItems(); + const QList iitems + = (m_pIClientList->listView())->selectedItems(); - QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); - if (!pIItem) + if (oitems.isEmpty() || iitems.isEmpty()) return false; - if (pOItem->type() == QJACKCTL_CLIENTITEM) { - qjackctlClientItem *pOClient - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // Each-to-each connections... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator oport(pOClient->ports()); - QListIterator iport(pIClient->ports()); - while (oport.hasNext() && iport.hasNext()) { - qjackctlPortItem *pOPort = oport.next(); - qjackctlPortItem *pIPort = iport.next(); - if (pOPort->findConnectPtr(pIPort) != NULL) - return true; + QListIterator oiter(oitems); + QListIterator iiter(iitems); + + const int iNumItems + = qMax(oitems.count(), iitems.count()); + + for (int i = 0; i < iNumItems; ++i) { + if (!oiter.hasNext()) + oiter.toFront(); + if (!iiter.hasNext()) + iiter.toFront(); + QTreeWidgetItem *pOItem = oiter.next(); + QTreeWidgetItem *pIItem = iiter.next(); + if (pOItem->type() == QJACKCTL_CLIENTITEM) { + qjackctlClientItem *pOClient + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // Each-to-each connections... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator oport(pOClient->ports()); + QListIterator iport(pIClient->ports()); + while (oport.hasNext() && iport.hasNext()) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort = iport.next(); + if (pOPort->findConnectPtr(pIPort) != nullptr) + return true; + } + } else { + // Many(all)-to-one/many connection... + QListIterator oport(pOClient->ports()); + while (oport.hasNext() + && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort + = static_cast (pIItem); + if (pOPort->findConnectPtr(pIPort) != nullptr) + return true; + pIItem = (m_pIClientList->listView())->itemBelow(pIItem); + } } } else { - // Many(all)-to-one/many connection... - QListIterator oport(pOClient->ports()); - while (oport.hasNext() - && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { - qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pOPort + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // One-to-many(all) connection... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator iport(pIClient->ports()); + while (iport.hasNext()) { + qjackctlPortItem *pIPort = iport.next(); + if (pOPort->findConnectPtr(pIPort) != nullptr) + return true; + } + } else { + // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); - if (pOPort->findConnectPtr(pIPort) != NULL) - return true; - pIItem = (m_pIClientList->listView())->itemBelow(pIItem); - } - } - } else { - qjackctlPortItem *pOPort - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // One-to-many(all) connection... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator iport(pIClient->ports()); - while (iport.hasNext()) { - qjackctlPortItem *pIPort = iport.next(); - if (pOPort->findConnectPtr(pIPort) != NULL) - return true; + return (pOPort->findConnectPtr(pIPort) != nullptr); } - } else { - // One-to-one connection... - qjackctlPortItem *pIPort - = static_cast (pIItem); - return (pOPort->findConnectPtr(pIPort) != NULL); } } @@ -1804,58 +1816,72 @@ bool qjackctlConnect::disconnectSelectedEx (void) { - QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); - if (pOItem == NULL) - return false; + const QList oitems + = (m_pOClientList->listView())->selectedItems(); + const QList iitems + = (m_pIClientList->listView())->selectedItems(); - QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); - if (pIItem == NULL) + if (oitems.isEmpty() || iitems.isEmpty()) return false; - if (pOItem->type() == QJACKCTL_CLIENTITEM) { - qjackctlClientItem *pOClient - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // Each-to-each connections... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator oport(pOClient->ports()); - QListIterator iport(pIClient->ports()); - while (oport.hasNext() && iport.hasNext()) { - qjackctlPortItem *pOPort = oport.next(); - qjackctlPortItem *pIPort = iport.next(); - disconnectPortsEx(pOPort, pIPort); + QListIterator oiter(oitems); + QListIterator iiter(iitems); + + const int iNumItems + = qMax(oitems.count(), iitems.count()); + + for (int i = 0; i < iNumItems; ++i) { + if (!oiter.hasNext()) + oiter.toFront(); + if (!iiter.hasNext()) + iiter.toFront(); + QTreeWidgetItem *pOItem = oiter.next(); + QTreeWidgetItem *pIItem = iiter.next(); + if (pOItem->type() == QJACKCTL_CLIENTITEM) { + qjackctlClientItem *pOClient + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // Each-to-each connections... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator oport(pOClient->ports()); + QListIterator iport(pIClient->ports()); + while (oport.hasNext() && iport.hasNext()) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort = iport.next(); + disconnectPortsEx(pOPort, pIPort); + } + } else { + // Many(all)-to-one/many connection... + QListIterator oport(pOClient->ports()); + while (oport.hasNext() + && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { + qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pIPort + = static_cast (pIItem); + disconnectPortsEx(pOPort, pIPort); + pIItem = (m_pIClientList->listView())->itemBelow(pIItem); + } } } else { - // Many(all)-to-one/many connection... - QListIterator oport(pOClient->ports()); - while (oport.hasNext() - && pIItem && pIItem->type() == QJACKCTL_PORTITEM) { - qjackctlPortItem *pOPort = oport.next(); + qjackctlPortItem *pOPort + = static_cast (pOItem); + if (pIItem->type() == QJACKCTL_CLIENTITEM) { + // One-to-many(all) connection... + qjackctlClientItem *pIClient + = static_cast (pIItem); + QListIterator iport(pIClient->ports()); + while (iport.hasNext()) { + qjackctlPortItem *pIPort = iport.next(); + disconnectPortsEx(pOPort, pIPort); + } + } else { + // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); disconnectPortsEx(pOPort, pIPort); - pIItem = (m_pIClientList->listView())->itemBelow(pIItem); } } - } else { - qjackctlPortItem *pOPort - = static_cast (pOItem); - if (pIItem->type() == QJACKCTL_CLIENTITEM) { - // One-to-many(all) connection... - qjackctlClientItem *pIClient - = static_cast (pIItem); - QListIterator iport(pIClient->ports()); - while (iport.hasNext()) { - qjackctlPortItem *pIPort = iport.next(); - disconnectPortsEx(pOPort, pIPort); - } - } else { - // One-to-one connection... - qjackctlPortItem *pIPort - = static_cast (pIItem); - disconnectPortsEx(pOPort, pIPort); - } } return true; diff -Nru qjackctl-0.4.5/src/qjackctlConnect.h qjackctl-0.6.0/src/qjackctlConnect.h --- qjackctl-0.4.5/src/qjackctlConnect.h 2017-04-27 14:44:14.553754974 +0000 +++ qjackctl-0.6.0/src/qjackctlConnect.h 2019-10-17 07:45:45.952673224 +0000 @@ -1,7 +1,7 @@ // qjackctlConnect.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ #ifndef __qjackctlConnect_h #define __qjackctlConnect_h -#include "qjackctlConnectAlias.h" +#include "qjackctlAliases.h" #include #include @@ -238,7 +238,8 @@ void refresh(); // Natural decimal sorting comparator. - static bool lessThan(const QTreeWidgetItem& i1, const QTreeWidgetItem& i2); + static bool lessThan( + const QTreeWidgetItem& item1, const QTreeWidgetItem& item2); private: @@ -271,16 +272,15 @@ int autoOpenTimeout() const; // Aliasing support methods. - void setAliases(qjackctlConnectAlias *pAliases, bool bRenameEnabled); - qjackctlConnectAlias *aliases() const; + void setAliasList(qjackctlAliasList *pAliasList, bool bRenameEnabled); + qjackctlAliasList *aliasList() const; bool isRenameEnabled() const; // Binding indirect accessor. qjackctlConnect *binding() const; - // Dirty flag accessors. - void setDirty (bool bDirty); - bool isDirty() const; + // Dirty aliases notification. + void emitAliasesChanged(); protected slots: @@ -327,7 +327,7 @@ QPoint m_posDrag; // Aliasing support. - qjackctlConnectAlias *m_pAliases; + qjackctlAliasList *m_pAliasList; bool m_bRenameEnabled; }; @@ -403,22 +403,17 @@ qjackctlClientList *OClientList() const; qjackctlClientList *IClientList() const; - // Connector line style accessors. - void setBezierLines(bool bBezierLines); - bool isBezierLines() const; - // Common icon size pixmap accessors. void setIconSize (int iIconSize); int iconSize (void) const; - // Dirty flag accessors. - void setDirty (bool bDirty); - bool isDirty() const; + // Dirty aliases notification. + void emitAliasesChanged(); signals: // Contents change signal. - void contentsChanged(); + void aliasesChanged(); private: @@ -430,9 +425,6 @@ // The main binding object. qjackctlConnect *m_pConnect; - // How we'll draw connector lines. - bool m_bBezierLines; - // How large will be those icons. // 0 = 16x16 (default), 1 = 32x32, 2 = 64x64. int m_iIconSize; diff -Nru qjackctl-0.4.5/src/qjackctlConnectionsForm.cpp qjackctl-0.6.0/src/qjackctlConnectionsForm.cpp --- qjackctl-0.4.5/src/qjackctlConnectionsForm.cpp 2017-04-27 14:44:14.553754974 +0000 +++ qjackctl-0.6.0/src/qjackctlConnectionsForm.cpp 2019-10-17 07:45:45.952673224 +0000 @@ -1,7 +1,7 @@ // qjackctlConnectionsForm.cpp // /**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -50,16 +50,16 @@ m_pMidiConnect = new qjackctlJackConnect( m_ui.MidiConnectView, QJACKCTL_JACK_MIDI); #else - m_pMidiConnect = NULL; + m_pMidiConnect = nullptr; #endif #ifdef CONFIG_ALSA_SEQ m_pAlsaConnect = new qjackctlAlsaConnect(m_ui.AlsaConnectView); #else - m_pAlsaConnect = NULL; + m_pAlsaConnect = nullptr; #endif - m_pSetup = NULL; + m_pSetup = nullptr; // UI connections... @@ -77,7 +77,7 @@ SLOT(audioExpandAll())); QObject::connect(m_ui.AudioRefreshPushButton, SIGNAL(clicked()), - SLOT(audioRefreshClear())); + SLOT(audioRefresh())); QObject::connect(m_ui.MidiConnectPushButton, SIGNAL(clicked()), @@ -93,7 +93,7 @@ SLOT(midiExpandAll())); QObject::connect(m_ui.MidiRefreshPushButton, SIGNAL(clicked()), - SLOT(midiRefreshClear())); + SLOT(midiRefresh())); QObject::connect(m_ui.AlsaConnectPushButton, SIGNAL(clicked()), @@ -109,10 +109,29 @@ SLOT(alsaExpandAll())); QObject::connect(m_ui.AlsaRefreshPushButton, SIGNAL(clicked()), - SLOT(alsaRefreshClear())); + SLOT(alsaRefresh())); // Connect it to some UI feedback slots. QObject::connect(m_ui.AudioConnectView->OListView(), + SIGNAL(itemSelectionChanged()), + SLOT(audioStabilize())); + QObject::connect(m_ui.AudioConnectView->IListView(), + SIGNAL(itemSelectionChanged()), + SLOT(audioStabilize())); + QObject::connect(m_ui.MidiConnectView->OListView(), + SIGNAL(itemSelectionChanged()), + SLOT(midiStabilize())); + QObject::connect(m_ui.MidiConnectView->IListView(), + SIGNAL(itemSelectionChanged()), + SLOT(midiStabilize())); + QObject::connect(m_ui.AlsaConnectView->OListView(), + SIGNAL(itemSelectionChanged()), + SLOT(alsaStabilize())); + QObject::connect(m_ui.AlsaConnectView->IListView(), + SIGNAL(itemSelectionChanged()), + SLOT(alsaStabilize())); + + QObject::connect(m_ui.AudioConnectView->OListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(audioStabilize())); QObject::connect(m_ui.AudioConnectView->IListView(), @@ -133,14 +152,14 @@ // Dirty dispatcher (refresh deferral). QObject::connect(m_ui.AudioConnectView, - SIGNAL(contentsChanged()), - SLOT(audioRefresh())); + SIGNAL(aliasesChanged()), + SLOT(audioAliasesChanged())); QObject::connect(m_ui.MidiConnectView, - SIGNAL(contentsChanged()), - SLOT(midiRefresh())); + SIGNAL(aliasesChanged()), + SLOT(midiAliasesChanged())); QObject::connect(m_ui.AlsaConnectView, - SIGNAL(contentsChanged()), - SLOT(alsaRefresh())); + SIGNAL(aliasesChanged()), + SLOT(alsaAliasesChanged())); // Actual connections... QObject::connect(m_pAudioConnect, @@ -204,6 +223,7 @@ QWidget::showEvent(pShowEvent); } + // Notify our parent that we're closing. void qjackctlConnectionsForm::hideEvent ( QHideEvent *pHideEvent ) { @@ -214,9 +234,18 @@ pMainForm->stabilizeForm(); } + // Just about to notify main-window that we're closing. void qjackctlConnectionsForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { + // Save current tab page and splitter sizes... + if (m_pSetup) { + m_pSetup->iConnectionsTabPage = tabPage(); + m_pSetup->saveSplitterSizes(m_ui.AudioConnectView); + m_pSetup->saveSplitterSizes(m_ui.MidiConnectView); + m_pSetup->saveSplitterSizes(m_ui.AlsaConnectView); + } + QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); @@ -285,79 +314,6 @@ } -// Window close event handlers. -bool qjackctlConnectionsForm::queryClose (void) -{ - bool bQueryClose = true; - - if (m_pSetup - && (m_ui.AudioConnectView->isDirty() || - m_ui.MidiConnectView->isDirty() || - m_ui.AlsaConnectView->isDirty())) { - switch (QMessageBox::warning(this, - tr("Warning") + " - " QJACKCTL_SUBTITLE1, - tr("The preset aliases have been changed:\n\n" - "\"%1\"\n\nDo you want to save the changes?") - .arg(m_sPreset), - QMessageBox::Save | - QMessageBox::Discard | - QMessageBox::Cancel)) { - case QMessageBox::Save: - saveAliases(); - // Fall thru.... - case QMessageBox::Discard: - break; - default: // Cancel. - bQueryClose = false; - } - } - - // Save some splitter sizes... - if (m_pSetup && bQueryClose) { - m_pSetup->saveSplitterSizes(m_ui.AudioConnectView); - m_pSetup->saveSplitterSizes(m_ui.MidiConnectView); - m_pSetup->saveSplitterSizes(m_ui.AlsaConnectView); - } - - return bQueryClose; -} - - -// Load aliases from current preset. -bool qjackctlConnectionsForm::loadAliases (void) -{ - bool bResult = false; - - if (m_pSetup && queryClose()) { - m_sPreset = m_pSetup->sDefPreset; - bResult = m_pSetup->loadAliases(m_sPreset); - if (bResult) { - m_ui.AudioConnectView->setDirty(false); - m_ui.MidiConnectView->setDirty(false); - m_ui.AlsaConnectView->setDirty(false); - } - } - - return bResult; -} - - -// Save aliases to current preset. -bool qjackctlConnectionsForm::saveAliases (void) -{ - bool bResult = false; - - if (m_pSetup) { - bResult = m_pSetup->saveAliases(m_sPreset); - if (bResult) { - m_ui.AudioConnectView->setDirty(false); - m_ui.MidiConnectView->setDirty(false); - m_ui.AlsaConnectView->setDirty(false); - } - } - - return bResult; -} // Tab page accessors. @@ -463,12 +419,17 @@ } -// Refresh JACK audio form by notifying the parent form. -void qjackctlConnectionsForm::audioRefreshClear (void) +// JACK audio client/port aliases have changed. +void qjackctlConnectionsForm::audioAliasesChanged (void) { - refreshAudio(true, true); + if (m_pSetup) + m_pSetup->aliases.dirty = true; + + audioRefresh(); } + +// Refresh JACK audio form by notifying the parent form. void qjackctlConnectionsForm::audioRefresh (void) { refreshAudio(false); @@ -543,12 +504,17 @@ } -// Refresh JACK MIDI form by notifying the parent form. -void qjackctlConnectionsForm::midiRefreshClear (void) +// JACK MIDI client/port aliases have changed. +void qjackctlConnectionsForm::midiAliasesChanged (void) { - refreshMidi(true, true); + if (m_pSetup) + m_pSetup->aliases.dirty = true; + + midiRefresh(); } + +// Refresh JACK MIDI form by notifying the parent form. void qjackctlConnectionsForm::midiRefresh (void) { refreshMidi(false); @@ -624,12 +590,17 @@ } -// Refresh complete form by notifying the parent form. -void qjackctlConnectionsForm::alsaRefreshClear (void) +// ALSA MIDI client/port aliases have changed. +void qjackctlConnectionsForm::alsaAliasesChanged (void) { - refreshAlsa(true, true); + if (m_pSetup) + m_pSetup->aliases.dirty = true; + + alsaRefresh(); } + +// Refresh complete form by notifying the parent form. void qjackctlConnectionsForm::alsaRefresh (void) { refreshAlsa(false); @@ -647,7 +618,7 @@ // or notify main form for doing that later. void qjackctlConnectionsForm::refreshAudio ( bool bEnabled, bool bClear ) { - if (m_pAudioConnect == NULL) + if (m_pAudioConnect == nullptr) return; if (bEnabled) { @@ -662,7 +633,7 @@ void qjackctlConnectionsForm::refreshMidi ( bool bEnabled, bool bClear ) { - if (m_pMidiConnect == NULL) + if (m_pMidiConnect == nullptr) return; if (bEnabled) { @@ -677,7 +648,7 @@ void qjackctlConnectionsForm::refreshAlsa ( bool bEnabled, bool bClear ) { - if (m_pAlsaConnect == NULL) + if (m_pAlsaConnect == nullptr) return; if (bEnabled) { @@ -768,25 +739,25 @@ // Set alias maps for all listviews... if (m_pSetup && m_pSetup->bAliasesEnabled) { const bool bRenameEnabled = m_pSetup->bAliasesEditing; - m_ui.AudioConnectView->OListView()->setAliases( - &(m_pSetup->aliasAudioOutputs), bRenameEnabled); - m_ui.AudioConnectView->IListView()->setAliases( - &(m_pSetup->aliasAudioInputs), bRenameEnabled); - m_ui.MidiConnectView->OListView()->setAliases( - &(m_pSetup->aliasMidiOutputs), bRenameEnabled); - m_ui.MidiConnectView->IListView()->setAliases( - &(m_pSetup->aliasMidiInputs), bRenameEnabled); - m_ui.AlsaConnectView->OListView()->setAliases( - &(m_pSetup->aliasAlsaOutputs), bRenameEnabled); - m_ui.AlsaConnectView->IListView()->setAliases( - &(m_pSetup->aliasAlsaInputs), bRenameEnabled); + m_ui.AudioConnectView->OListView()->setAliasList( + &(m_pSetup->aliases.audioOutputs), bRenameEnabled); + m_ui.AudioConnectView->IListView()->setAliasList( + &(m_pSetup->aliases.audioInputs), bRenameEnabled); + m_ui.MidiConnectView->OListView()->setAliasList( + &(m_pSetup->aliases.midiOutputs), bRenameEnabled); + m_ui.MidiConnectView->IListView()->setAliasList( + &(m_pSetup->aliases.midiInputs), bRenameEnabled); + m_ui.AlsaConnectView->OListView()->setAliasList( + &(m_pSetup->aliases.alsaOutputs), bRenameEnabled); + m_ui.AlsaConnectView->IListView()->setAliasList( + &(m_pSetup->aliases.alsaInputs), bRenameEnabled); } else { - m_ui.AudioConnectView->OListView()->setAliases(NULL, false); - m_ui.AudioConnectView->IListView()->setAliases(NULL, false); - m_ui.MidiConnectView->OListView()->setAliases(NULL, false); - m_ui.MidiConnectView->IListView()->setAliases(NULL, false); - m_ui.AlsaConnectView->OListView()->setAliases(NULL, false); - m_ui.AlsaConnectView->IListView()->setAliases(NULL, false); + m_ui.AudioConnectView->OListView()->setAliasList(nullptr, false); + m_ui.AudioConnectView->IListView()->setAliasList(nullptr, false); + m_ui.MidiConnectView->OListView()->setAliasList(nullptr, false); + m_ui.MidiConnectView->IListView()->setAliasList(nullptr, false); + m_ui.AlsaConnectView->OListView()->setAliasList(nullptr, false); + m_ui.AlsaConnectView->IListView()->setAliasList(nullptr, false); } } diff -Nru qjackctl-0.4.5/src/qjackctlConnectionsForm.h qjackctl-0.6.0/src/qjackctlConnectionsForm.h --- qjackctl-0.4.5/src/qjackctlConnectionsForm.h 2017-04-27 14:44:14.553754974 +0000 +++ qjackctl-0.6.0/src/qjackctlConnectionsForm.h 2019-10-17 07:45:45.952673224 +0000 @@ -1,7 +1,7 @@ // qjackctlConnectionsForm.h // /**************************************************************************** - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -51,8 +51,6 @@ qjackctlConnectView *midiConnectView() const; qjackctlConnectView *alsaConnectView() const; - bool queryClose(); - enum TabPage { AudioTab = 0, MidiTab = 1, AlsaTab = 2 }; void setTabPage(int iTabPage); @@ -75,10 +73,7 @@ void stabilizeMidi(bool bEnabled, bool bClear = false); void stabilizeAlsa(bool bEnabled, bool bClear = false); - void setupAliases(qjackctlSetup *pSetup); void updateAliases(); - bool loadAliases(); - bool saveAliases(); public slots: @@ -86,7 +81,7 @@ void audioDisconnectSelected(); void audioDisconnectAll(); void audioExpandAll(); - void audioRefreshClear(); + void audioAliasesChanged(); void audioRefresh(); void audioStabilize(); @@ -94,7 +89,7 @@ void midiDisconnectSelected(); void midiDisconnectAll(); void midiExpandAll(); - void midiRefreshClear(); + void midiAliasesChanged(); void midiRefresh(); void midiStabilize(); @@ -102,7 +97,7 @@ void alsaDisconnectSelected(); void alsaDisconnectAll(); void alsaExpandAll(); - void alsaRefreshClear(); + void alsaAliasesChanged(); void alsaRefresh(); void alsaStabilize(); @@ -129,8 +124,8 @@ qjackctlJackConnect *m_pAudioConnect; qjackctlJackConnect *m_pMidiConnect; qjackctlAlsaConnect *m_pAlsaConnect; + qjackctlSetup *m_pSetup; - QString m_sPreset; }; diff -Nru qjackctl-0.4.5/src/qjackctlConnectionsForm.ui qjackctl-0.6.0/src/qjackctlConnectionsForm.ui --- qjackctl-0.4.5/src/qjackctlConnectionsForm.ui 2017-04-27 14:44:14.554755474 +0000 +++ qjackctl-0.6.0/src/qjackctlConnectionsForm.ui 2019-10-17 07:45:45.952673224 +0000 @@ -2,7 +2,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -41,7 +41,7 @@ - Connections - JACK Audio Connection Kit + Connections :/images/connections1.png diff -Nru qjackctl-0.4.5/src/qjackctl.cpp qjackctl-0.6.0/src/qjackctl.cpp --- qjackctl-0.4.5/src/qjackctl.cpp 2017-04-27 14:44:14.551753974 +0000 +++ qjackctl-0.6.0/src/qjackctl.cpp 2019-10-17 07:45:45.950673224 +0000 @@ -1,7 +1,7 @@ // qjackctl.cpp // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -19,18 +19,18 @@ *****************************************************************************/ -#include "qjackctlAbout.h" +#include "qjackctl.h" + #include "qjackctlSetup.h" #include "qjackctlMainForm.h" -#include #include #include #include #include -#if QT_VERSION < 0x040500 +#if QT_VERSION < QT_VERSION_CHECK(4, 5, 0) namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); } @@ -49,81 +49,67 @@ // Singleton application instance stuff (Qt/X11 only atm.) // -#if QT_VERSION < 0x050000 -#if defined(Q_WS_X11) -#define CONFIG_X11 -#endif -#else -#if defined(QT_X11EXTRAS_LIB) -#define CONFIG_X11 -#endif -#endif +#ifdef CONFIG_XUNIQUE +#define QJACKCTL_XUNIQUE "qjackctlApplication" +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) #ifdef CONFIG_X11 -#ifdef CONFIG_XUNIQUE - #include /* for gethostname() */ - -#include - #include #include - -#define QJACKCTL_XUNIQUE "qjackctlApplication" - -#if QT_VERSION >= 0x050100 - -#include -#include - -#include - -class qjackctlApplication; - -class qjackctlXcbEventFilter : public QAbstractNativeEventFilter -{ -public: - - // Constructor. - qjackctlXcbEventFilter(qjackctlApplication *pApp) - : QAbstractNativeEventFilter(), m_pApp(pApp) {} - - // XCB event filter (virtual processor). - bool nativeEventFilter(const QByteArray& eventType, void *message, long *); - -private: - - // Instance variable. - qjackctlApplication *m_pApp; -}; - +#endif // CONFIG_X11 +#else +#include +#include +#include +#include #endif #endif // CONFIG_XUNIQUE -#endif // CONFIG_X11 -class qjackctlApplication : public QApplication +// Constructor. +qjackctlApplication::qjackctlApplication ( int& argc, char **argv ) + : QApplication(argc, argv), + m_pQtTranslator(nullptr), m_pMyTranslator(nullptr), m_pWidget(nullptr) { -public: - - // Constructor. - qjackctlApplication(int& argc, char **argv) : QApplication(argc, argv), - m_pQtTranslator(0), m_pMyTranslator(0), m_pWidget(0) - { - // Load translation support. - QLocale loc; - if (loc.language() != QLocale::C) { - // Try own Qt translation... - m_pQtTranslator = new QTranslator(this); - QString sLocName = "qt_" + loc.name(); - QString sLocPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); - if (m_pQtTranslator->load(sLocName, sLocPath)) { - QApplication::installTranslator(m_pQtTranslator); +#if QT_VERSION >= QT_VERSION_CHECK(5, 1, 0) + QApplication::setApplicationName(QJACKCTL_TITLE); + QApplication::setApplicationDisplayName(QJACKCTL_TITLE); + // QJACKCTL_TITLE " - " + QObject::tr(QJACKCTL_SUBTITLE)); +#endif + // Load translation support. + QLocale loc; + if (loc.language() != QLocale::C) { + // Try own Qt translation... + m_pQtTranslator = new QTranslator(this); + QString sLocName = "qt_" + loc.name(); + QString sLocPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath); + if (m_pQtTranslator->load(sLocName, sLocPath)) { + QApplication::installTranslator(m_pQtTranslator); + } else { + delete m_pQtTranslator; + m_pQtTranslator = 0; + #ifdef CONFIG_DEBUG + qWarning("Warning: no translation found for '%s' locale: %s/%s.qm", + loc.name().toUtf8().constData(), + sLocPath.toUtf8().constData(), + sLocName.toUtf8().constData()); + #endif + } + // Try own application translation... + m_pMyTranslator = new QTranslator(this); + sLocName = "qjackctl_" + loc.name(); + if (m_pMyTranslator->load(sLocName, sLocPath)) { + QApplication::installTranslator(m_pMyTranslator); + } else { + sLocPath = CONFIG_DATADIR "/qjackctl/translations"; + if (m_pMyTranslator->load(sLocName, sLocPath)) { + QApplication::installTranslator(m_pMyTranslator); } else { - delete m_pQtTranslator; - m_pQtTranslator = 0; + delete m_pMyTranslator; + m_pMyTranslator = 0; #ifdef CONFIG_DEBUG qWarning("Warning: no translation found for '%s' locale: %s/%s.qm", loc.name().toUtf8().constData(), @@ -131,85 +117,78 @@ sLocName.toUtf8().constData()); #endif } - // Try own application translation... - m_pMyTranslator = new QTranslator(this); - sLocName = "qjackctl_" + loc.name(); - if (m_pMyTranslator->load(sLocName, sLocPath)) { - QApplication::installTranslator(m_pMyTranslator); - } else { - sLocPath = CONFIG_DATADIR "/qjackctl/translations"; - if (m_pMyTranslator->load(sLocName, sLocPath)) { - QApplication::installTranslator(m_pMyTranslator); - } else { - delete m_pMyTranslator; - m_pMyTranslator = 0; - #ifdef CONFIG_DEBUG - qWarning("Warning: no translation found for '%s' locale: %s/%s.qm", - loc.name().toUtf8().constData(), - sLocPath.toUtf8().constData(), - sLocName.toUtf8().constData()); - #endif - } - } } - #ifdef CONFIG_X11 - #ifdef CONFIG_XUNIQUE - m_pDisplay = NULL; - m_wOwner = None; - #if QT_VERSION >= 0x050100 - m_pXcbEventFilter = new qjackctlXcbEventFilter(this); - installNativeEventFilter(m_pXcbEventFilter); - #endif - #endif // CONFIG_XUNIQUE - #endif // CONFIG_X11 - } - - // Destructor. - ~qjackctlApplication() - { - #ifdef CONFIG_X11 - #ifdef CONFIG_XUNIQUE - #if QT_VERSION >= 0x050100 - removeNativeEventFilter(m_pXcbEventFilter); - delete m_pXcbEventFilter; - #endif - #endif // CONFIG_XUNIQUE - #endif // CONFIG_X11 - if (m_pMyTranslator) delete m_pMyTranslator; - if (m_pQtTranslator) delete m_pQtTranslator; - } - - // Main application widget accessors. - void setMainWidget(QWidget *pWidget) - { - m_pWidget = pWidget; - #ifdef CONFIG_X11 - #ifdef CONFIG_XUNIQUE - m_wOwner = m_pWidget->winId(); - if (m_pDisplay && m_wOwner) { - XGrabServer(m_pDisplay); - XSetSelectionOwner(m_pDisplay, m_aUnique, m_wOwner, CurrentTime); - XUngrabServer(m_pDisplay); - } - #endif // CONFIG_XUNIQUE - #endif // CONFIG_X11 - } - - QWidget *mainWidget() const { return m_pWidget; } - - // Check if another instance is running, - // and raise its proper main widget... - bool setup(const QString& sServerName) - { - #ifdef CONFIG_X11 - #ifdef CONFIG_XUNIQUE - m_pDisplay = QX11Info::display(); + } +#ifdef CONFIG_XUNIQUE +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_X11 + m_pDisplay = nullptr; + m_aUnique = 0; + m_wOwner = 0; +#endif // CONFIG_X11 +#else + m_pMemory = nullptr; + m_pServer = nullptr; +#endif +#endif // CONFIG_XUNIQUE +} + + +// Destructor. +qjackctlApplication::~qjackctlApplication (void) +{ +#ifdef CONFIG_XUNIQUE +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) + if (m_pServer) { + m_pServer->close(); + delete m_pServer; + m_pServer = nullptr; + } + if (m_pMemory) { + delete m_pMemory; + m_pMemory = nullptr; + } +#endif +#endif // CONFIG_XUNIQUE + if (m_pMyTranslator) delete m_pMyTranslator; + if (m_pQtTranslator) delete m_pQtTranslator; +} + + +// Main application widget accessors. +void qjackctlApplication::setMainWidget ( QWidget *pWidget ) +{ + m_pWidget = pWidget; +#ifdef CONFIG_XUNIQUE +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_X11 + m_wOwner = m_pWidget->winId(); + if (m_pDisplay && m_wOwner) { + XGrabServer(m_pDisplay); + XSetSelectionOwner(m_pDisplay, m_aUnique, m_wOwner, CurrentTime); + XUngrabServer(m_pDisplay); + } +#endif // CONFIG_X11 +#endif +#endif // CONFIG_XUNIQUE +} + + +// Check if another instance is running, +// and raise its proper main widget... +bool qjackctlApplication::setup ( const QString& sServerName ) +{ +#ifdef CONFIG_XUNIQUE +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_X11 + m_pDisplay = QX11Info::display(); + if (m_pDisplay) { QString sUnique = QJACKCTL_XUNIQUE; if (sServerName.isEmpty()) { const char *pszServerName = ::getenv("JACK_DEFAULT_SERVER"); - if (pszServerName) { + if (pszServerName && ::strcmp("default", pszServerName)) { sUnique += '_'; - sUnique += pszServerName; + sUnique += QString::fromUtf8(pszServerName); } } else { sUnique += '_'; @@ -260,105 +239,188 @@ // Done. return true; } - #endif // CONFIG_XUNIQUE - #endif // CONFIG_X11 - return false; } - -#ifdef CONFIG_X11 -#ifdef CONFIG_XUNIQUE - void x11PropertyNotify(Window w) - { - if (m_pDisplay && m_pWidget && m_wOwner == w) { - // Always check whether our property-flag is still around... - Atom aType; - int iFormat = 0; - unsigned long iItems = 0; - unsigned long iAfter = 0; - unsigned char *pData = 0; - if (XGetWindowProperty( - m_pDisplay, - m_wOwner, - m_aUnique, - 0, 1024, - false, - m_aUnique, - &aType, - &iFormat, - &iItems, - &iAfter, - &pData) == Success - && aType == m_aUnique && iItems > 0 && iAfter == 0) { - // Avoid repeating it-self... - XDeleteProperty(m_pDisplay, m_wOwner, m_aUnique); - // Just make it always shows up fine... - m_pWidget->show(); - m_pWidget->raise(); - m_pWidget->activateWindow(); - // FIXME: Do our best speciality, although it should be - // done iif configuration says so, we'll do it anyway! - qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm) - pMainForm->startJack(); - } - // Free any left-overs... - if (iItems > 0 && pData) - XFree(pData); +#endif // CONFIG_X11 + return false; +#else + m_sUnique = QCoreApplication::applicationName(); + if (!sServerName.isEmpty()) { + m_sUnique += '-'; + m_sUnique += sServerName; + } + m_sUnique += '@'; + m_sUnique += QHostInfo::localHostName(); +#ifdef Q_OS_UNIX + m_pMemory = new QSharedMemory(m_sUnique); + m_pMemory->attach(); + delete m_pMemory; +#endif + m_pMemory = new QSharedMemory(m_sUnique); + bool bServer = false; + const qint64 pid = QCoreApplication::applicationPid(); + struct Data { qint64 pid; }; + if (m_pMemory->create(sizeof(Data))) { + m_pMemory->lock(); + Data *pData = static_cast (m_pMemory->data()); + if (pData) { + pData->pid = pid; + bServer = true; } + m_pMemory->unlock(); } -#if QT_VERSION < 0x050000 - bool x11EventFilter(XEvent *pEv) - { - if (pEv->type == PropertyNotify - && pEv->xproperty.state == PropertyNewValue) - x11PropertyNotify(pEv->xproperty.window); - return QApplication::x11EventFilter(pEv); + else + if (m_pMemory->attach()) { + m_pMemory->lock(); // maybe not necessary? + Data *pData = static_cast (m_pMemory->data()); + if (pData) + bServer = (pData->pid == pid); + m_pMemory->unlock(); + } + if (bServer) { + QLocalServer::removeServer(m_sUnique); + m_pServer = new QLocalServer(); + m_pServer->setSocketOptions(QLocalServer::UserAccessOption); + m_pServer->listen(m_sUnique); + QObject::connect(m_pServer, + SIGNAL(newConnection()), + SLOT(newConnectionSlot())); + } else { + QLocalSocket socket; + socket.connectToServer(m_sUnique); + if (socket.state() == QLocalSocket::ConnectingState) + socket.waitForConnected(200); + if (socket.state() == QLocalSocket::ConnectedState) { + socket.write(QCoreApplication::arguments().join(' ').toUtf8()); + socket.flush(); + socket.waitForBytesWritten(200); + } } + return !bServer; #endif -#endif // CONFIG_XUNIQUE -#endif // CONFIG_X11 +#else + return false; +#endif // !CONFIG_XUNIQUE +} + -private: +#ifdef CONFIG_XUNIQUE +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_X11 - // Translation support. - QTranslator *m_pQtTranslator; - QTranslator *m_pMyTranslator; +void qjackctlApplication::x11PropertyNotify ( Window w ) +{ + if (m_pDisplay && m_pWidget && m_wOwner == w) { + // Always check whether our property-flag is still around... + Atom aType; + int iFormat = 0; + unsigned long iItems = 0; + unsigned long iAfter = 0; + unsigned char *pData = 0; + if (XGetWindowProperty( + m_pDisplay, + m_wOwner, + m_aUnique, + 0, 1024, + false, + m_aUnique, + &aType, + &iFormat, + &iItems, + &iAfter, + &pData) == Success + && aType == m_aUnique && iItems > 0 && iAfter == 0) { + // Avoid repeating it-self... + XDeleteProperty(m_pDisplay, m_wOwner, m_aUnique); + // Just make it always shows up fine... + m_pWidget->show(); + m_pWidget->raise(); + m_pWidget->activateWindow(); + // FIXME: Do our best speciality, although it should be + // done iif configuration says so, we'll do it anyway! + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pMainForm->startJack(); + } + // Free any left-overs... + if (iItems > 0 && pData) + XFree(pData); + } +} - // Instance variables. - QWidget *m_pWidget; +bool qjackctlApplication::x11EventFilter ( XEvent *pEv ) +{ + if (pEv->type == PropertyNotify + && pEv->xproperty.state == PropertyNewValue) + x11PropertyNotify(pEv->xproperty.window); + return QApplication::x11EventFilter(pEv); +} -#ifdef CONFIG_X11 -#ifdef CONFIG_XUNIQUE - Display *m_pDisplay; - Atom m_aUnique; - Window m_wOwner; -#if QT_VERSION >= 0x050100 - qjackctlXcbEventFilter *m_pXcbEventFilter; -#endif -#endif // CONFIG_XUNIQUE #endif // CONFIG_X11 -}; +#else +// Local server conection slot. +void qjackctlApplication::newConnectionSlot (void) +{ + QLocalSocket *pSocket = m_pServer->nextPendingConnection(); + QObject::connect(pSocket, + SIGNAL(readyRead()), + SLOT(readyReadSlot())); +} -#ifdef CONFIG_X11 -#ifdef CONFIG_XUNIQUE -#if QT_VERSION >= 0x050100 -// XCB Event filter (virtual processor). -bool qjackctlXcbEventFilter::nativeEventFilter ( - const QByteArray& eventType, void *message, long * ) +// Local server data-ready slot. +void qjackctlApplication::readyReadSlot (void) { - if (eventType == "xcb_generic_event_t") { - xcb_property_notify_event_t *pEv - = static_cast (message); - if ((pEv->response_type & ~0x80) == XCB_PROPERTY_NOTIFY - && pEv->state == XCB_PROPERTY_NEW_VALUE) - m_pApp->x11PropertyNotify(pEv->window); + QLocalSocket *pSocket = qobject_cast (sender()); + if (pSocket) { + const qint64 nread = pSocket->bytesAvailable(); + if (nread > 0) { + const QByteArray data = pSocket->read(nread); + // Just make it always shows up fine... + m_pWidget->hide(); + m_pWidget->show(); + m_pWidget->raise(); + m_pWidget->activateWindow(); + // FIXME: Do our best speciality, although it should be + // done iif configuration says so, we'll do it anyway! + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) { + // Parse the pass-through command line arguments... + const QStringList& args + = QString::fromUtf8(data).split(' '); + const int argc = args.count(); + for (int i = 1; i < argc; ++i) { + QString sArg = args.at(i); + QString sVal; + const int iEqual = sArg.indexOf('='); + if (iEqual >= 0) { + sVal = sArg.right(sArg.length() - iEqual - 1); + sArg = sArg.left(iEqual); + } + else if (i < argc - 1) + sVal = args.at(i + 1); + if (sArg == "-s" || sArg == "--start") { + pMainForm->startJack(); + } + else if (sArg == "-p" || sArg == "--preset") { + if (!sVal.isEmpty()) + pMainForm->activatePreset(sVal); + if (iEqual < 0) + ++i; + } + else if (sArg == "-a" || sArg == "--active-patchbay") { + if (!sVal.isEmpty()) + pMainForm->activatePatchbay(sVal); + if (iEqual < 0) + ++i; + } + } + } + } } - return false; } + #endif #endif // CONFIG_XUNIQUE -#endif // CONFIG_X11 //------------------------------------------------------------------------- @@ -382,7 +444,7 @@ char cmd[80]; // Reinstall default handler; prevent race conditions... - signal(signo, SIG_DFL); + ::signal(signo, SIG_DFL); static const char *shell = "/bin/sh"; static const char *format = "gdb -q --batch --pid=%d" @@ -398,7 +460,7 @@ // Fork child... if (pid == 0) { - execl(shell, shell, "-c", cmd, NULL); + execl(shell, shell, "-c", cmd, nullptr); _exit(1); return; } @@ -428,12 +490,15 @@ Q_INIT_RESOURCE(qjackctl); #ifdef CONFIG_STACKTRACE #if defined(__GNUC__) && defined(Q_OS_LINUX) - signal(SIGILL, stacktrace); - signal(SIGFPE, stacktrace); - signal(SIGSEGV, stacktrace); - signal(SIGABRT, stacktrace); - signal(SIGBUS, stacktrace); + ::signal(SIGILL, stacktrace); + ::signal(SIGFPE, stacktrace); + ::signal(SIGSEGV, stacktrace); + ::signal(SIGABRT, stacktrace); + ::signal(SIGBUS, stacktrace); +#endif #endif +#if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); #endif qjackctlApplication app(argc, argv); @@ -447,10 +512,11 @@ // Check if we'll just start an external program... if (!settings.sCmdLine.isEmpty()) { jack_client_t *pJackClient - = jack_client_open("qjackctl-start", JackNoStartServer, NULL); + = jack_client_open("qjackctl-start", JackNoStartServer, nullptr); if (pJackClient) { jack_client_close(pJackClient); - int iExitStatus = ::system(settings.sCmdLine.toUtf8().constData()); + const int iExitStatus + = ::system(settings.sCmdLine.toUtf8().constData()); app.quit(); return iExitStatus; } @@ -467,7 +533,7 @@ // Dark themes grayed/disabled color group fix... QPalette pal(app.palette()); if (pal.base().color().value() < 0x7f) { - #if QT_VERSION >= 0x050000 + #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) const QColor& color = pal.window().color(); const int iGroups = int(QPalette::Active | QPalette::Inactive) + 1; for (int i = 0; i < iGroups; ++i) { diff -Nru qjackctl-0.4.5/src/qjackctl.desktop qjackctl-0.6.0/src/qjackctl.desktop --- qjackctl-0.4.5/src/qjackctl.desktop 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctl.desktop 2019-10-17 07:45:45.950673224 +0000 @@ -0,0 +1,22 @@ +[Desktop Entry] +Name=QjackCtl +Version=1.0 +GenericName=JACK Control +GenericName[de]=JACK-Steuerung +GenericName[fr]=Contrôle JACK +GenericName[it]=Interfaccia di controllo per JACK +GenericName[ru]=Управление JACK +Comment=QjackCtl is a JACK Audio Connection Kit Qt GUI Interface +Comment[de]=Grafisches Werkzeug zur Steuerung des JACK-Audio-Systems +Comment[fr]=QjackCtl est une interface graphique Qt pour le kit de connexion audio JACK +Comment[it]=QjackCtl è un'interfaccia di controllo per JACK basata su Qt +Comment[ru]=Программа для управления звуковым сервером JACK +Exec=qjackctl +Icon=qjackctl +Categories=Audio;AudioVideo;Midi;X-Alsa;X-Jack;Qt; +Keywords=Audio;MIDI;ALSA;JACK;LV2;Qt; +Terminal=false +Type=Application +StartupWMClass=qjackctl +X-Window-Icon=qjackctl +X-SuSE-translate=true diff -Nru qjackctl-0.4.5/src/qjackctl.desktop.in qjackctl-0.6.0/src/qjackctl.desktop.in --- qjackctl-0.4.5/src/qjackctl.desktop.in 2017-04-27 14:44:14.551753974 +0000 +++ qjackctl-0.6.0/src/qjackctl.desktop.in 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -[Desktop Entry] -Name=@PACKAGE_NAME@ -Version=1.0 -GenericName=JACK Control -GenericName[de]=JACK-Steuerung -GenericName[fr]=Contrôle JACK -GenericName[it]=Interfaccia di controllo per JACK -GenericName[ru]=Управление JACK -Comment=QjackCtl is a JACK Audio Connection Kit Qt GUI Interface -Comment[de]=Grafisches Werkzeug zur Steuerung des JACK-Audio-Systems -Comment[fr]=QjackCtl est une interface graphique Qt pour le kit de connexion audio JACK -Comment[it]=QjackCtl è un'interfaccia di controllo per JACK basata su Qt -Comment[ru]=Программа для управления звуковым сервером JACK -Exec=@ac_prefix@/bin/qjackctl -Icon=qjackctl -Categories=Audio;AudioVideo;Midi;X-Alsa;X-Jack;Qt; -Keywords=Audio;MIDI;ALSA;JACK;LV2;Qt; -Terminal=false -Type=Application -X-SuSE-translate=true diff -Nru qjackctl-0.4.5/src/qjackctlGraphCommand.cpp qjackctl-0.6.0/src/qjackctlGraphCommand.cpp --- qjackctl-0.4.5/src/qjackctlGraphCommand.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraphCommand.cpp 2019-10-17 07:45:45.952673224 +0000 @@ -0,0 +1,249 @@ +// qjackctlGraph.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlAbout.h" +#include "qjackctlGraphCommand.h" + + +//---------------------------------------------------------------------------- +// qjackctlGraphCommand -- Generic graph command pattern + +// Constructor. +qjackctlGraphCommand::qjackctlGraphCommand ( qjackctlGraphCanvas *canvas, + QUndoCommand *parent ) : QUndoCommand(parent), + m_canvas(canvas) +{ +} + + +// Command methods. +void qjackctlGraphCommand::undo (void) +{ + execute(true); +} + + +void qjackctlGraphCommand::redo (void) +{ + execute(false); +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphConnectCommand -- Connect graph command pattern + +// Constructor. +qjackctlGraphConnectCommand::qjackctlGraphConnectCommand ( qjackctlGraphCanvas *canvas, + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool is_connect, + qjackctlGraphCommand *parent ) : qjackctlGraphCommand(canvas, parent), + m_item(port1, port2, is_connect) +{ +} + + +// Command executive +bool qjackctlGraphConnectCommand::execute ( bool is_undo ) +{ + qjackctlGraphCanvas *canvas = qjackctlGraphCommand::canvas(); + if (canvas == nullptr) + return false; + + qjackctlGraphNode *node1 + = canvas->findNode( + m_item.addr1.node_name, + qjackctlGraphItem::Duplex, + m_item.addr1.node_type); + if (node1 == nullptr) + node1 = canvas->findNode( + m_item.addr1.node_name, + qjackctlGraphItem::Output, + m_item.addr1.node_type); + if (node1 == nullptr) + return false; + + qjackctlGraphPort *port1 + = node1->findPort( + m_item.addr1.port_name, + qjackctlGraphItem::Output, + m_item.addr1.port_type); + if (port1 == nullptr) + return false; + + qjackctlGraphNode *node2 + = canvas->findNode( + m_item.addr2.node_name, + qjackctlGraphItem::Duplex, + m_item.addr2.node_type); + if (node2 == nullptr) + node2 = canvas->findNode( + m_item.addr2.node_name, + qjackctlGraphItem::Input, + m_item.addr2.node_type); + if (node2 == nullptr) + return false; + + qjackctlGraphPort *port2 + = node2->findPort( + m_item.addr2.port_name, + qjackctlGraphItem::Input, + m_item.addr2.port_type); + if (port2 == nullptr) + return false; + + const bool is_connect + = (m_item.is_connect() && !is_undo) || (!m_item.is_connect() && is_undo); + if (is_connect) + canvas->emitConnected(port1, port2); + else + canvas->emitDisconnected(port1, port2); + + return true; +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphMoveCommand -- Move (node) graph command + +// Constructor. +qjackctlGraphMoveCommand::qjackctlGraphMoveCommand ( qjackctlGraphCanvas *canvas, + const QList& nodes, const QPointF& pos1, const QPointF& pos2, + qjackctlGraphCommand *parent ) : qjackctlGraphCommand(canvas, parent), + m_pos1(pos1), m_pos2(pos2), m_nexec(0) +{ + qjackctlGraphCommand::setText(QObject::tr("Move")); + + foreach (qjackctlGraphNode *node, nodes) { + Item *item = new Item; + item->node_name = node->nodeName(); + item->node_mode = node->nodeMode(); + item->node_type = node->nodeType(); + m_items.append(item); + } +} + + +// Destructor. +qjackctlGraphMoveCommand::~qjackctlGraphMoveCommand (void) +{ + qDeleteAll(m_items); + m_items.clear(); +} + + +// Command executive method. +bool qjackctlGraphMoveCommand::execute ( bool /* is_undo */ ) +{ + qjackctlGraphCanvas *canvas = qjackctlGraphCommand::canvas(); + if (canvas == nullptr) + return false; + + if (++m_nexec > 1) { + const QPointF delta = (m_pos2 - m_pos1); + foreach (Item *item, m_items) { + qjackctlGraphNode *node = canvas->findNode( + item->node_name, item->node_mode, item->node_type); + if (node) + node->setPos(node->pos() + delta); + } + } + + QPointF pos2 = m_pos2; + m_pos2 = m_pos1; + m_pos1 = pos2; + + return true; +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphRenameCommand -- Rename (item) graph command + +// Constructor. +qjackctlGraphRenameCommand::qjackctlGraphRenameCommand ( qjackctlGraphCanvas *canvas, + qjackctlGraphItem *item, const QString& name, qjackctlGraphCommand *parent ) + : qjackctlGraphCommand(canvas, parent), m_name(name) +{ + qjackctlGraphCommand::setText(QObject::tr("Rename")); + + m_item.item_type = item->type(); + + qjackctlGraphNode *node = nullptr; + qjackctlGraphPort *port = nullptr; + + if (m_item.item_type == qjackctlGraphNode::Type) + node = static_cast (item); + else + if (m_item.item_type == qjackctlGraphPort::Type) + port = static_cast (item); + + if (port) + node = port->portNode(); + + if (node) { + m_item.node_name = node->nodeName(); + m_item.node_mode = node->nodeMode(); + m_item.node_type = node->nodeType(); + } + + if (port) { + m_item.port_name = port->portName(); + m_item.port_mode = port->portMode(); + m_item.port_type = port->portType(); + } +} + + +// Command executive method. +bool qjackctlGraphRenameCommand::execute ( bool /*is_undo*/ ) +{ + qjackctlGraphCanvas *canvas = qjackctlGraphCommand::canvas(); + if (canvas == nullptr) + return false; + + QString name = m_name; + qjackctlGraphItem *item = nullptr; + + qjackctlGraphNode *node = canvas->findNode( + m_item.node_name, m_item.node_mode, m_item.node_type); + + if (m_item.item_type == qjackctlGraphNode::Type && node) { + m_name = node->nodeTitle(); + item = node; + } + else + if (m_item.item_type == qjackctlGraphPort::Type && node) { + qjackctlGraphPort *port = node->findPort( + m_item.port_name, m_item.port_mode, m_item.port_type); + if (port) { + m_name = port->portTitle(); + item = port; + } + } + + if (item == nullptr) + return false; + + canvas->emitRenamed(item, name); + return true; +} + + +// end of qjackctlGraphCommand.cpp diff -Nru qjackctl-0.4.5/src/qjackctlGraphCommand.h qjackctl-0.6.0/src/qjackctlGraphCommand.h --- qjackctl-0.4.5/src/qjackctlGraphCommand.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraphCommand.h 2019-10-17 07:45:45.952673224 +0000 @@ -0,0 +1,218 @@ +// qjackctlGraphCommand.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlGraphCommand_h +#define __qjackctlGraphCommand_h + +#include "qjackctlGraph.h" + +#include + +#include +#include + + +//---------------------------------------------------------------------------- +// qgraph1_command -- Generic graph command pattern + +class qjackctlGraphCommand : public QUndoCommand +{ +public: + + // Constructor. + qjackctlGraphCommand(qjackctlGraphCanvas *canvas, QUndoCommand *parent = nullptr); + + // Accessors. + qjackctlGraphCanvas *canvas() const + { return m_canvas; } + + // Command methods. + void undo(); + void redo(); + +protected: + + // Command executive method. + virtual bool execute(bool is_undo = false) = 0; + +private: + + // Command arguments. + qjackctlGraphCanvas *m_canvas; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphConnectCommand -- Connect graph command + +class qjackctlGraphConnectCommand : public qjackctlGraphCommand +{ +public: + + // Constructor. + qjackctlGraphConnectCommand(qjackctlGraphCanvas *canvas, + qjackctlGraphPort *port1, qjackctlGraphPort *port2, + bool is_connect, qjackctlGraphCommand *parent = nullptr); + +protected: + + // Command item address + struct Addr + { + // Constructors. + Addr(qjackctlGraphPort *port) + { + qjackctlGraphNode *node = port->portNode(); + node_name = node->nodeName(); + node_type = node->nodeType(); + port_name = port->portName(); + port_type = port->portType(); + } + // Copy constructor. + Addr(const Addr& addr) + { + node_name = addr.node_name; + node_type = addr.node_type; + port_name = addr.port_name; + port_type = addr.port_type; + } + // Member fields. + QString node_name; + uint node_type; + QString port_name; + uint port_type; + }; + + // Command item descriptor + struct Item + { + // Constructor. + Item(qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool is_connect) + : addr1(port1), addr2(port2), m_connect(is_connect) {} + // Copy constructor. + Item(const Item& item) : addr1(item.addr1), addr2(item.addr2), + m_connect(item.is_connect()) {} + + // Accessors. + bool is_connect() const + { return m_connect; } + + // Public member fields. + Addr addr1; + Addr addr2; + + private: + + // Private member fields. + bool m_connect; + }; + + // Command executive method. + bool execute(bool is_undo); + +private: + + // Command arguments. + Item m_item; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphMoveCommand -- Move (node) graph command + +class qjackctlGraphMoveCommand : public qjackctlGraphCommand +{ +public: + + // Constructor. + qjackctlGraphMoveCommand(qjackctlGraphCanvas *canvas, + const QList& nodes, + const QPointF& pos1, const QPointF& pos2, + qjackctlGraphCommand *parent = nullptr); + + // Destructor. + ~qjackctlGraphMoveCommand(); + +protected: + + // Command item descriptor + struct Item + { + QString node_name; + qjackctlGraphItem::Mode node_mode; + uint node_type; + }; + + // Command executive method. + bool execute(bool is_undo); + +private: + + // Command arguments. + QList m_items; + + QPointF m_pos1; + QPointF m_pos2; + + int m_nexec; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphRenameCommand -- Rename (item) graph command + +class qjackctlGraphRenameCommand : public qjackctlGraphCommand +{ +public: + + // Constructor. + qjackctlGraphRenameCommand(qjackctlGraphCanvas *canvas, + qjackctlGraphItem *item, const QString& name, + qjackctlGraphCommand *parent = nullptr); + +protected: + + // Command item descriptor + struct Item + { + int item_type; + QString node_name; + qjackctlGraphItem::Mode node_mode; + uint node_type; + QString port_name; + qjackctlGraphItem::Mode port_mode; + uint port_type; + }; + + // Command executive method. + bool execute(bool is_undo); + +private: + + // Command arguments. + Item m_item; + QString m_name; +}; + + +#endif // __qjackctlGraphCommand_h + +// end of qjackctlGraphCommand.h diff -Nru qjackctl-0.4.5/src/qjackctlGraph.cpp qjackctl-0.6.0/src/qjackctlGraph.cpp --- qjackctl-0.4.5/src/qjackctlGraph.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraph.cpp 2019-10-17 07:45:45.952673224 +0000 @@ -0,0 +1,2382 @@ +// qjackctlGraph.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlAbout.h" +#include "qjackctlGraph.h" + +#include "qjackctlGraphCommand.h" + +#include "qjackctlAliases.h" + +#include + +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include + +#include + +#include + + +//---------------------------------------------------------------------------- +// qjackctlGraphItem -- Base graphics item. + +// Constructor. +qjackctlGraphItem::qjackctlGraphItem ( QGraphicsItem *parent ) + : QGraphicsPathItem(parent), m_marked(false), m_hilite(false) +{ + const QPalette pal; + m_foreground = pal.buttonText().color(); + m_background = pal.button().color(); +} + + +// Basic color accessors. +void qjackctlGraphItem::setForeground ( const QColor& color ) +{ + m_foreground = color; +} + +const QColor& qjackctlGraphItem::foreground (void) const +{ + return m_foreground; +} + + +void qjackctlGraphItem::setBackground ( const QColor& color ) +{ + m_background = color; +} + +const QColor& qjackctlGraphItem::background (void) const +{ + return m_background; +} + + +// Marking methods. +void qjackctlGraphItem::setMarked ( bool marked ) +{ + m_marked = marked; +} + + +bool qjackctlGraphItem::isMarked (void) const +{ + return m_marked; +} + + +// Highlighting methods. +void qjackctlGraphItem::setHighlight ( bool hilite ) +{ + m_hilite = hilite; + + QGraphicsPathItem::update(); +} + + +bool qjackctlGraphItem::isHighlight (void) const +{ + return m_hilite; +} + + +// Item-type hash (static) +uint qjackctlGraphItem::itemType ( const QByteArray& type_name ) +{ + return qHash(type_name); +} + + +// Rectangular editor extents (virtual) +QRectF qjackctlGraphItem::editorRect (void) const +{ + return QRectF(); +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphPort -- Port graphics item. + +// Constructor. +qjackctlGraphPort::qjackctlGraphPort ( qjackctlGraphNode *node, + const QString& name, qjackctlGraphItem::Mode mode, uint type ) + : qjackctlGraphItem(node), m_node(node), + m_name(name), m_mode(mode), m_type(type), m_index(0), + m_selectx(0), m_hilitex(0) +{ + QGraphicsPathItem::setZValue(+1); + + const QPalette pal; + setForeground(pal.buttonText().color()); + setBackground(pal.button().color()); + + m_text = new QGraphicsTextItem(this); + + QGraphicsPathItem::setFlag(QGraphicsItem::ItemIsSelectable); + QGraphicsPathItem::setFlag(QGraphicsItem::ItemSendsScenePositionChanges); + + QGraphicsPathItem::setAcceptHoverEvents(true); + + QGraphicsPathItem::setToolTip(m_name); + + setPortTitle(m_name); +} + + +// Destructor. +qjackctlGraphPort::~qjackctlGraphPort (void) +{ + removeConnects(); + + // No actual need to destroy any children here... + // + //delete m_text; +} + + +// Accessors. +qjackctlGraphNode *qjackctlGraphPort::portNode (void) const +{ + return m_node; +} + + +void qjackctlGraphPort::setPortName ( const QString& name ) +{ + m_name = name; + + QGraphicsPathItem::setToolTip(m_name); +} + + +const QString& qjackctlGraphPort::portName (void) const +{ + return m_name; +} + + +void qjackctlGraphPort::setPortMode ( qjackctlGraphItem::Mode mode ) +{ + m_mode = mode; +} + + +qjackctlGraphItem::Mode qjackctlGraphPort::portMode (void) const +{ + return m_mode; +} + + +bool qjackctlGraphPort::isInput (void) const +{ + return (m_mode & Input); +} + + +bool qjackctlGraphPort::isOutput (void) const +{ + return (m_mode & Output); +} + + +void qjackctlGraphPort::setPortType ( uint type ) +{ + m_type = type; +} + + +uint qjackctlGraphPort::portType (void) const +{ + return m_type; +} + + +void qjackctlGraphPort::setPortTitle ( const QString& title ) +{ + m_title = (title.isEmpty() ? m_name : title); + + m_text->setPlainText(m_title); + + QPainterPath path; + const QRectF& rect + = m_text->boundingRect().adjusted(0, +2, 0, -2); + path.addRoundedRect(rect, 5, 5); + QGraphicsPathItem::setPath(path); +} + + +const QString& qjackctlGraphPort::portTitle (void) const +{ + return m_title; +} + + +void qjackctlGraphPort::setPortIndex ( int index ) +{ + m_index = index; +} + + +int qjackctlGraphPort::portIndex (void) const +{ + return m_index; +} + + +QPointF qjackctlGraphPort::portPos (void) const +{ + QPointF pos = QGraphicsPathItem::scenePos(); + + const QRectF& rect + = QGraphicsPathItem::boundingRect(); + if (m_mode == Output) + pos.setX(pos.x() + rect.width()); + pos.setY(pos.y() + rect.height() / 2); + + return pos; +} + + +// Connection-list methods. +void qjackctlGraphPort::appendConnect ( qjackctlGraphConnect *connect ) +{ + m_connects.append(connect); +} + + +void qjackctlGraphPort::removeConnect ( qjackctlGraphConnect *connect ) +{ + m_connects.removeAll(connect); +} + + +void qjackctlGraphPort::removeConnects (void) +{ + foreach (qjackctlGraphConnect *connect, m_connects) { + if (connect->port1() != this) + connect->setPort1(0); + if (connect->port2() != this) + connect->setPort2(0); + } + + // Do not delete connects here as they are owned elsewhere... + // + // qDeleteAll(m_connects); + m_connects.clear(); +} + + +qjackctlGraphConnect *qjackctlGraphPort::findConnect ( qjackctlGraphPort *port ) const +{ + foreach (qjackctlGraphConnect *connect, m_connects) { + if (connect->port1() == port || connect->port2() == port) + return connect; + } + + return nullptr; +} + + +void qjackctlGraphPort::paint ( QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget */*widget*/ ) +{ + const QPalette& pal = option->palette; + + if (QGraphicsPathItem::isSelected()) { + m_text->setDefaultTextColor(pal.highlightedText().color()); + painter->setPen(pal.highlightedText().color()); + painter->setBrush(pal.highlight().color()); + } else { + const QColor& foreground + = qjackctlGraphItem::foreground(); + const QColor& background + = qjackctlGraphItem::background(); + const bool is_dark + = (background.value() < 128); + m_text->setDefaultTextColor(is_dark + ? foreground.lighter() + : foreground.darker()); + if (qjackctlGraphItem::isHighlight() || QGraphicsPathItem::isUnderMouse()) { + painter->setPen(foreground.lighter()); + painter->setBrush(background.lighter()); + } else { + painter->setPen(foreground); + painter->setBrush(background); + } + } + + painter->drawPath(QGraphicsPathItem::path()); +} + + +QVariant qjackctlGraphPort::itemChange ( + GraphicsItemChange change, const QVariant& value ) +{ + if (change == QGraphicsItem::ItemScenePositionHasChanged) { + foreach (qjackctlGraphConnect *connect, m_connects) { + connect->updatePath(); + } + } + else + if (change == QGraphicsItem::ItemSelectedHasChanged && m_selectx < 1) { + const bool is_selected = value.toBool(); + setHighlightEx(is_selected); + foreach (qjackctlGraphConnect *connect, m_connects) + connect->setSelectedEx(this, is_selected); + } + + return value; +} + + +// Selection propagation method... +void qjackctlGraphPort::setSelectedEx ( bool is_selected ) +{ + if (!is_selected) { + foreach (qjackctlGraphConnect *connect, m_connects) { + if (connect->isSelected()) { + setHighlightEx(true); + return; + } + } + } + + ++m_selectx; + + setHighlightEx(is_selected); + + if (QGraphicsPathItem::isSelected() != is_selected) + QGraphicsPathItem::setSelected(is_selected); + + --m_selectx; +} + + +// Highlighting propagation method... +void qjackctlGraphPort::setHighlightEx ( bool is_highlight ) +{ + if (m_hilitex > 0) + return; + + ++m_hilitex; + + qjackctlGraphItem::setHighlight(is_highlight); + + foreach (qjackctlGraphConnect *connect, m_connects) + connect->setHighlightEx(this, is_highlight); + + --m_hilitex; +} + + +// Special port-type color business. +void qjackctlGraphPort::updatePortTypeColors ( qjackctlGraphCanvas *canvas ) +{ + if (canvas) { + const QColor& color = canvas->portTypeColor(m_type); + if (color.isValid()) { + const bool is_dark = (color.value() < 128); + qjackctlGraphItem::setForeground(is_dark + ? color.lighter(180) + : color.darker()); + qjackctlGraphItem::setBackground(color); + if (m_mode & Output) { + foreach (qjackctlGraphConnect *connect, m_connects) { + connect->updatePortTypeColors(); + connect->update(); + } + } + } + } +} + + + +// Port sorting type. +qjackctlGraphPort::SortType qjackctlGraphPort::g_sort_type = qjackctlGraphPort::PortName; + +void qjackctlGraphPort::setSortType ( SortType sort_type ) +{ + g_sort_type = sort_type; +} + +qjackctlGraphPort::SortType qjackctlGraphPort::sortType (void) +{ + return g_sort_type; +} + + +// Port sorting order. +qjackctlGraphPort::SortOrder qjackctlGraphPort::g_sort_order = qjackctlGraphPort::Ascending; + +void qjackctlGraphPort::setSortOrder( SortOrder sort_order ) +{ + g_sort_order = sort_order; +} + +qjackctlGraphPort::SortOrder qjackctlGraphPort::sortOrder (void) +{ + return g_sort_order; +} + + +// Natural decimal sorting comparator (static) +bool qjackctlGraphPort::lessThan ( qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + const int port_type_diff + = int(port1->portType()) - int(port2->portType()); + if (port_type_diff) + return (port_type_diff > 0); + + if (g_sort_order == Descending) { + qjackctlGraphPort *port = port1; + port1 = port2; + port2 = port; + } + + if (g_sort_type == PortIndex) { + const int port_index_diff + = port1->portIndex() - port2->portIndex(); + if (port_index_diff) + return (port_index_diff < 0); + } + + switch (g_sort_type) { + case PortTitle: + return qjackctlGraphPort::lessThan(port1->portTitle(), port2->portTitle()); + case PortName: + default: + return qjackctlGraphPort::lessThan(port1->portName(), port2->portName()); + } +} + +bool qjackctlGraphPort::lessThan ( const QString& s1, const QString& s2 ) +{ + const int n1 = s1.length(); + const int n2 = s2.length(); + + int i1, i2; + + for (i1 = i2 = 0; i1 < n1 && i2 < n2; ++i1, ++i2) { + + // Skip (white)spaces... + while (s1.at(i1).isSpace()) + ++i1; + while (s2.at(i2).isSpace()) + ++i2; + + // Normalize (to uppercase) the next characters... + QChar c1 = s1.at(i1).toUpper(); + QChar c2 = s2.at(i2).toUpper(); + + if (c1.isDigit() && c2.isDigit()) { + // Find the whole length numbers... + int j1 = i1++; + while (i1 < n1 && s1.at(i1).isDigit()) + ++i1; + int j2 = i2++; + while (i2 < n2 && s2.at(i2).isDigit()) + ++i2; + // Compare as natural decimal-numbers... + j1 = s1.mid(j1, i1 - j1).toInt(); + j2 = s2.mid(j2, i2 - j2).toInt(); + if (j1 != j2) + return (j1 < j2); + // Never go out of bounds... + if (i1 >= n1 || i2 >= n2) + break; + // Go on with this next char... + c1 = s1.at(i1).toUpper(); + c2 = s2.at(i2).toUpper(); + } + + // Compare this char... + if (c1 != c2) + return (c1 < c2); + } + + // Probable exact match. + return false; +} + + +// Rectangular editor extents. +QRectF qjackctlGraphPort::editorRect (void) const +{ + return QGraphicsPathItem::sceneBoundingRect(); +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphNode -- Node graphics item. + +// Constructor. +qjackctlGraphNode::qjackctlGraphNode ( + const QString& name, qjackctlGraphItem::Mode mode, uint type ) + : qjackctlGraphItem(nullptr), + m_name(name), m_mode(mode), m_type(type) +{ + QGraphicsPathItem::setZValue(0); + + const QPalette pal; + const int base_value = pal.base().color().value(); + const bool is_dark = (base_value < 128); + + const QColor& text_color = pal.text().color(); + QColor foreground_color(is_dark + ? text_color.darker() + : text_color); + qjackctlGraphItem::setForeground(foreground_color); + + const QColor& window_color = pal.window().color(); + QColor background_color(is_dark + ? window_color.lighter() + : window_color); + background_color.setAlpha(160); + qjackctlGraphItem::setBackground(background_color); + + m_pixmap = new QGraphicsPixmapItem(this); + m_text = new QGraphicsTextItem(this); + + QGraphicsPathItem::setFlag(QGraphicsItem::ItemIsMovable); + QGraphicsPathItem::setFlag(QGraphicsItem::ItemIsSelectable); + + QGraphicsPathItem::setToolTip(m_name); + setNodeTitle(m_name); + + const bool is_darkest = (base_value < 24); + QColor shadow_color = (is_darkest ? Qt::white : Qt::black); + shadow_color.setAlpha(180); + + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(); + effect->setColor(shadow_color); + effect->setBlurRadius(is_darkest ? 8 : 16); + effect->setOffset(is_darkest ? 0 : 2); + QGraphicsPathItem::setGraphicsEffect(effect); +} + + +// Destructor. +qjackctlGraphNode::~qjackctlGraphNode (void) +{ + removePorts(); + + // No actual need to destroy any children here... + // + // QGraphicsPathItem::setGraphicsEffect(0); + + // delete m_text; + // delete m_pixmap; +} + + +// accessors. +void qjackctlGraphNode::setNodeName ( const QString& name ) +{ + m_name = name; + + QGraphicsPathItem::setToolTip(m_name); +} + + +const QString& qjackctlGraphNode::nodeName (void) const +{ + return m_name; +} + + +void qjackctlGraphNode::setNodeMode ( qjackctlGraphItem::Mode mode ) +{ + m_mode = mode; +} + + +qjackctlGraphItem::Mode qjackctlGraphNode::nodeMode (void) const +{ + return m_mode; +} + + +void qjackctlGraphNode::setNodeType ( uint type ) +{ + m_type = type; +} + + +uint qjackctlGraphNode::nodeType (void) const +{ + return m_type; +} + + +void qjackctlGraphNode::setNodeIcon ( const QIcon& icon ) +{ + m_icon = icon; + + m_pixmap->setPixmap(m_icon.pixmap(24, 24)); +} + + +const QIcon& qjackctlGraphNode::nodeIcon (void) const +{ + return m_icon; +} + + +void qjackctlGraphNode::setNodeTitle ( const QString& title ) +{ + const QFont& font = m_text->font(); + m_text->setFont(QFont(font.family(), font.pointSize(), QFont::Bold)); + m_text->setPlainText(title.isEmpty() ? m_name : title); +} + + +QString qjackctlGraphNode::nodeTitle (void) const +{ + return m_text->toPlainText(); +} + + +// Port-list methods. +qjackctlGraphPort *qjackctlGraphNode::addPort ( + const QString& name, qjackctlGraphItem::Mode mode, int type ) +{ + qjackctlGraphPort *port = new qjackctlGraphPort(this, name, mode, type); + + m_ports.append(port); + m_portkeys.insert(qjackctlGraphPort::PortKey(port), port); + + updatePath(); + + return port; +} + + +qjackctlGraphPort *qjackctlGraphNode::addInputPort ( const QString& name, int type ) +{ + return addPort(name, qjackctlGraphItem::Input, type); +} + + +qjackctlGraphPort *qjackctlGraphNode::addOutputPort ( const QString& name, int type ) +{ + return addPort(name, qjackctlGraphItem::Output, type); +} + + +void qjackctlGraphNode::removePort ( qjackctlGraphPort *port ) +{ + m_portkeys.remove(qjackctlGraphPort::PortKey(port)); + m_ports.removeAll(port); + + updatePath(); +} + + +void qjackctlGraphNode::removePorts (void) +{ + foreach (qjackctlGraphPort *port, m_ports) + port->removeConnects(); + + // Do not delete ports here as they are node's child items... + // + //qDeleteAll(m_ports); + m_ports.clear(); + m_portkeys.clear(); +} + + +// Port finder (by name, mode and type) +qjackctlGraphPort *qjackctlGraphNode::findPort ( + const QString& name, qjackctlGraphItem::Mode mode, uint type ) +{ + return static_cast ( + m_portkeys.value(qjackctlGraphPort::ItemKey(name, mode, type), nullptr)); +} + + +// Reset port markings, destroy if unmarked. +void qjackctlGraphNode::resetMarkedPorts (void) +{ + QList ports; + + foreach (qjackctlGraphPort *port, m_ports) { + if (port->isMarked()) { + port->setMarked(false); + } else { + ports.append(port); + } + } + + foreach (qjackctlGraphPort *port, ports) { + port->removeConnects(); + removePort(port); + delete port; + } +} + + +// Path/shape updater. +void qjackctlGraphNode::updatePath (void) +{ + const QRectF& rect = m_text->boundingRect(); + int width = rect.width() / 2 + 24; + int wi, wo; + wi = wo = width; + foreach (qjackctlGraphPort *port, m_ports) { + const int w = port->boundingRect().width(); + if (port->isOutput()) { + if (wo < w) wo = w; + } else { + if (wi < w) wi = w; + } + } + width = wi + wo; + + std::sort(m_ports.begin(), m_ports.end(), qjackctlGraphPort::Compare()); + + int height = rect.height() + 2; + int type = 0; + int yi, yo; + yi = yo = height; + foreach (qjackctlGraphPort *port, m_ports) { + const QRectF& port_rect = port->boundingRect(); + const int w = port_rect.width(); + const int h = port_rect.height() + 1; + if (type - port->portType()) { + type = port->portType(); + height += 2; + yi = yo = height; + } + if (port->isOutput()) { + port->setPos(+width / 2 + 6 - w, yo); + yo += h; + if (height < yo) + height = yo; + } else { + port->setPos(-width / 2 - 6, yi); + yi += h; + if (height < yi) + height = yi; + } + } + + QPainterPath path; + path.addRoundedRect(-width / 2, 0, width, height + 6, 5, 5); + QGraphicsPathItem::setPath(path); +} + + +void qjackctlGraphNode::paint ( QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget */*widget*/ ) +{ + const QPalette& pal = option->palette; + + if (QGraphicsPathItem::isSelected()) { + const QColor& hilitetext_color = pal.highlightedText().color(); + m_text->setDefaultTextColor(hilitetext_color); + painter->setPen(hilitetext_color); + QColor hilite_color(pal.highlight().color()); + hilite_color.setAlpha(180); + painter->setBrush(hilite_color); + } else { + const QColor& foreground + = qjackctlGraphItem::foreground(); + const QColor& background + = qjackctlGraphItem::background(); + const bool is_dark + = (background.value() < 192); + m_text->setDefaultTextColor(is_dark + ? foreground.lighter() + : foreground.darker()); + painter->setPen(foreground); + painter->setBrush(background); + } + + painter->drawPath(QGraphicsPathItem::path()); + + const QRectF& node_rect = QGraphicsPathItem::boundingRect(); + m_pixmap->setPos(node_rect.x() + 4, node_rect.y() + 4); + + const QRectF& text_rect = m_text->boundingRect(); + m_text->setPos(- text_rect.width() / 2, text_rect.y() + 2); +} + + +QVariant qjackctlGraphNode::itemChange ( + GraphicsItemChange change, const QVariant& value ) +{ + if (change == QGraphicsItem::ItemSelectedHasChanged) { + const bool is_selected = value.toBool(); + foreach (qjackctlGraphPort *port, m_ports) + port->setSelected(is_selected); + } + + return value; +} + + +// Rectangular editor extents. +QRectF qjackctlGraphNode::editorRect (void) const +{ + return m_text->sceneBoundingRect(); +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphConnect -- Connection-line graphics item. + +// Constructor. +qjackctlGraphConnect::qjackctlGraphConnect (void) + : qjackctlGraphItem(nullptr), m_port1(nullptr), m_port2(nullptr) +{ + QGraphicsPathItem::setZValue(-1); + + QGraphicsPathItem::setFlag(QGraphicsItem::ItemIsSelectable); + + qjackctlGraphItem::setBackground(qjackctlGraphItem::foreground()); + + const QPalette pal; + const bool is_darkest = (pal.base().color().value() < 24); + QColor shadow_color = (is_darkest ? Qt::white : Qt::black); + shadow_color.setAlpha(220); + + QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(); + effect->setColor(shadow_color); + effect->setBlurRadius(is_darkest ? 4 : 8); + effect->setOffset(is_darkest ? 0 : 1); + QGraphicsPathItem::setGraphicsEffect(effect); + + QGraphicsPathItem::setAcceptHoverEvents(true); +} + + +// Destructor. +qjackctlGraphConnect::~qjackctlGraphConnect (void) +{ + if (m_port1) + m_port1->removeConnect(this); + if (m_port2) + m_port2->removeConnect(this); + + // No actual need to destroy any children here... + // + // QGraphicsPathItem::setGraphicsEffect(0); +} + + +// Accessors. +void qjackctlGraphConnect::setPort1 ( qjackctlGraphPort *port ) +{ + if (m_port1) + m_port1->removeConnect(this); + + m_port1 = port; + + if (m_port1) + m_port1->appendConnect(this); + + if (m_port1 && m_port1->isSelected()) + setSelectedEx(m_port1, true); +} + + +qjackctlGraphPort *qjackctlGraphConnect::port1 (void) const +{ + return m_port1; +} + + +void qjackctlGraphConnect::setPort2 ( qjackctlGraphPort *port ) +{ + if (m_port2) + m_port2->removeConnect(this); + + m_port2 = port; + + if (m_port2) + m_port2->appendConnect(this); + + if (m_port2 && m_port2->isSelected()) + setSelectedEx(m_port2, true); +} + + +qjackctlGraphPort *qjackctlGraphConnect::port2 (void) const +{ + return m_port2; +} + + +// Path/shaper updaters. +void qjackctlGraphConnect::updatePathTo ( const QPointF& pos ) +{ + const bool is_out0 = m_port1->isOutput(); + const QPointF pos0 = m_port1->portPos(); + const QPointF pos1 = (is_out0 ? pos0 : pos); + const QPointF pos4 = (is_out0 ? pos : pos0); + + qjackctlGraphNode *node1 = m_port1->portNode(); + const QRectF& rect1 = node1->boundingRect(); + const qreal dx = pos4.x() - pos1.x(); + const qreal dy = pos0.y() - node1->scenePos().y() - 0.5 * rect1.height(); + const qreal y_max = rect1.height() + rect1.width(); + const qreal y_min = qMin(y_max, qAbs(dx)); + const qreal x_offset = (dx > 0.0 ? 0.5 : 1.0) * y_min; + const qreal y_offset = (dx > 0.0 ? 0.0 : (dy > 0.0 ? +y_min : -y_min)); + + const QPointF pos2(pos1.x() + x_offset, pos1.y() + y_offset); + const QPointF pos3(pos4.x() - x_offset, pos4.y() + y_offset); + + QPainterPath path; + path.moveTo(pos1); + path.cubicTo(pos2, pos3, pos4); + const qreal arrow_angle = path.angleAtPercent(0.5) * M_PI / 180.0; + const QPointF arrow_pos0 = path.pointAtPercent(0.5); + path.cubicTo(pos3, pos2, pos1); + const qreal arrow_size = 12.0; + QVector arrow; + arrow.append(arrow_pos0); + arrow.append(arrow_pos0 - QPointF( + ::sin(arrow_angle + M_PI / 2.3) * arrow_size, + ::cos(arrow_angle + M_PI / 2.3) * arrow_size)); + arrow.append(arrow_pos0 - QPointF( + ::sin(arrow_angle + M_PI - M_PI / 2.3) * arrow_size, + ::cos(arrow_angle + M_PI - M_PI / 2.3) * arrow_size)); + arrow.append(arrow_pos0); + path.addPolygon(QPolygonF(arrow)); + + QGraphicsPathItem::setPath(path); +} + + +void qjackctlGraphConnect::updatePath (void) +{ + updatePathTo(m_port2->portPos()); +} + + +void qjackctlGraphConnect::paint ( QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget */*widget*/ ) +{ + if (QGraphicsPathItem::isSelected()) { + const QPalette& pal + = option->palette; + const QColor& color + = pal.highlight().color(); + painter->setPen(QPen(color, 2)); + painter->setBrush(color); + } else { + const QColor& color + = qjackctlGraphItem::foreground(); + if (qjackctlGraphItem::isHighlight() || QGraphicsPathItem::isUnderMouse()) + painter->setPen(color.lighter()); + else + painter->setPen(color); + painter->setBrush(qjackctlGraphItem::background()); + } + + painter->drawPath(QGraphicsPathItem::path()); +} + + +QVariant qjackctlGraphConnect::itemChange ( + GraphicsItemChange change, const QVariant& value ) +{ + if (change == QGraphicsItem::ItemSelectedHasChanged) { + const bool is_selected = value.toBool(); + qjackctlGraphItem::setHighlight(is_selected); + if (m_port1) + m_port1->setSelectedEx(is_selected); + if (m_port2) + m_port2->setSelectedEx(is_selected); + } + + return value; +} + + +// Selection propagation method... +void qjackctlGraphConnect::setSelectedEx ( qjackctlGraphPort *port, bool is_selected ) +{ + setHighlightEx(port, is_selected); + + if (QGraphicsPathItem::isSelected() != is_selected) { + #if 0//OLD_SELECT_BEHAVIOR + QGraphicsPathItem::setSelected(is_selected); + if (is_selected) { + if (m_port1 && m_port1 != port) + m_port1->setSelectedEx(is_selected); + if (m_port2 && m_port2 != port) + m_port2->setSelectedEx(is_selected); + } + #else + if (!is_selected || (m_port1 && m_port2 + && m_port1->isSelected() && m_port2->isSelected())) { + QGraphicsPathItem::setSelected(is_selected); + } + #endif + } +} + +// Highlighting propagation method... +void qjackctlGraphConnect::setHighlightEx ( qjackctlGraphPort *port, bool is_highlight ) +{ + qjackctlGraphItem::setHighlight(is_highlight); + + if (m_port1 && m_port1 != port) + m_port1->setHighlight(is_highlight); + if (m_port2 && m_port2 != port) + m_port2->setHighlight(is_highlight); +} + + +// Special port-type color business. +void qjackctlGraphConnect::updatePortTypeColors (void) +{ + if (m_port1) { + const QColor& color + = m_port1->background().lighter(); + qjackctlGraphItem::setForeground(color); + qjackctlGraphItem::setBackground(color); + } +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphCanvas -- Canvas graphics scene/view. + +// Local constants. +static const char *CanvasGroup = "/GraphCanvas"; +static const char *CanvasRectKey = "/CanvasRect"; +static const char *CanvasZoomKey = "/CanvasZoom"; + +static const char *NodePosGroup = "/GraphNodePos"; + +static const char *ColorsGroup = "/GraphColors"; + + +// Constructor. +qjackctlGraphCanvas::qjackctlGraphCanvas ( QWidget *parent ) + : QGraphicsView(parent), m_state(DragNone), m_item(nullptr), + m_connect(nullptr), m_rubberband(nullptr), + m_zoom(1.0), m_zoomrange(false), + m_commands(nullptr), m_settings(nullptr), + m_selected_nodes(0), m_edit_item(nullptr), + m_editor(nullptr), m_edited(0), + m_aliases(nullptr) +{ + m_scene = new QGraphicsScene(); + + m_commands = new QUndoStack(); + + QGraphicsView::setScene(m_scene); + + QGraphicsView::setRenderHint(QPainter::Antialiasing); + QGraphicsView::setRenderHint(QPainter::SmoothPixmapTransform); + + QGraphicsView::setResizeAnchor(QGraphicsView::NoAnchor); + QGraphicsView::setDragMode(QGraphicsView::NoDrag); + + m_editor = new QLineEdit(this); + m_editor->setFrame(false); +// m_editor->setAlignment(Qt::AlignCenter | Qt::AlignVCenter); + + QObject::connect(m_editor, + SIGNAL(textChanged(const QString&)), + SLOT(textChanged(const QString&))); + QObject::connect(m_editor, + SIGNAL(editingFinished()), + SLOT(editingFinished())); + + m_editor->setEnabled(false); + m_editor->hide(); +} + + +// Destructor. +qjackctlGraphCanvas::~qjackctlGraphCanvas (void) +{ + clear(); + + delete m_editor; + delete m_commands; + delete m_scene; +} + + +// Accessors. +QGraphicsScene *qjackctlGraphCanvas::scene (void) const +{ + return m_scene; +} + + +QUndoStack *qjackctlGraphCanvas::commands (void) const +{ + return m_commands; +} + + +void qjackctlGraphCanvas::setSettings ( QSettings *settings ) +{ + m_settings = settings; +} + + +QSettings *qjackctlGraphCanvas::settings (void) const +{ + return m_settings; +} + + +// Canvas methods. +void qjackctlGraphCanvas::addItem ( qjackctlGraphItem *item ) +{ + m_scene->addItem(item); + + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + m_nodes.append(node); + m_nodekeys.insert(qjackctlGraphNode::NodeKey(node), node); + if (!restoreNodePos(node)) + emit added(node); + } + } +} + + +void qjackctlGraphCanvas::removeItem ( qjackctlGraphItem *item ) +{ + clearSelection(); + + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node && saveNodePos(node)) { + emit removed(node); + node->removePorts(); + m_nodekeys.remove(qjackctlGraphNode::NodeKey(node)); + m_nodes.removeAll(node); + } + } + + // Do not remove items from the scene + // as they shall be removed upon delete... + // + // m_scene->removeItem(item); +} + + +// Current item accessor. +qjackctlGraphItem *qjackctlGraphCanvas::currentItem (void) const +{ + qjackctlGraphItem *item = m_item; + + if (item == nullptr) { + const QList& list + = m_scene->selectedItems(); + if (!list.isEmpty()) + item = static_cast (list.first()); + } + + return item; +} + + +// Connection predicates. +bool qjackctlGraphCanvas::canConnect (void) const +{ + int nins = 0; + int nouts = 0; + + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + if (node->nodeMode() & qjackctlGraphItem::Input) + ++nins; + else + // if (node->nodeMode() & qjackctlGraphItem::Output) + ++nouts; + } + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) { + if (port->isInput()) + ++nins; + else + // if (port->isOutput()) + ++nouts; + } + } + if (nins > 0 && nouts > 0) + return true; + } + + return false; +} + + +bool qjackctlGraphCanvas::canDisconnect (void) const +{ + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphConnect::Type) + return true; + } + + return false; +} + + +// Edit predicates. +bool qjackctlGraphCanvas::canRenameItem (void) const +{ + qjackctlGraphItem *item = currentItem(); + + return (item && ( + item->type() == qjackctlGraphNode::Type || + item->type() == qjackctlGraphPort::Type)); +} + + +// Zooming methods. +void qjackctlGraphCanvas::setZoom ( qreal zoom ) +{ + if (zoom < 0.1) + zoom = 0.1; + else + if (zoom > 2.0) + zoom = 2.0; + + const qreal scale = zoom / m_zoom; + QGraphicsView::scale(scale, scale); + + QFont font = m_editor->font(); + font.setPointSizeF(scale * font.pointSizeF()); + m_editor->setFont(font); + updateEditorGeometry(); + + m_zoom = zoom; + + emit changed(); +} + + +qreal qjackctlGraphCanvas::zoom (void) const +{ + return m_zoom; +} + + +void qjackctlGraphCanvas::setZoomRange ( bool zoomrange ) +{ + m_zoomrange = zoomrange; +} + + +bool qjackctlGraphCanvas::isZoomRange (void) const +{ + return m_zoomrange; +} + + +// Clean-up all un-marked nodes... +void qjackctlGraphCanvas::resetNodes ( uint node_type ) +{ + QList nodes; + + foreach (qjackctlGraphNode *node, m_nodes) { + if (node->nodeType() == node_type) { + if (node->isMarked()) { + node->resetMarkedPorts(); + node->setMarked(false); + } else { + removeItem(node); + nodes.append(node); + } + } + } + + qDeleteAll(nodes); +} + + +void qjackctlGraphCanvas::clearNodes ( uint node_type ) +{ + QList nodes; + + foreach (qjackctlGraphNode *node, m_nodes) { + if (node->nodeType() == node_type) { + m_nodekeys.remove(qjackctlGraphNode::NodeKey(node)); + m_nodes.removeAll(node); + nodes.append(node); + } + } + + qDeleteAll(nodes); +} + + +// Special node finder. +qjackctlGraphNode *qjackctlGraphCanvas::findNode ( + const QString& name, qjackctlGraphItem::Mode mode, uint type ) const +{ + return static_cast ( + m_nodekeys.value(qjackctlGraphNode::ItemKey(name, mode, type), nullptr)); +} + + + +// Port (dis)connections notifiers. +void qjackctlGraphCanvas::emitConnected ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + emit connected(port1, port2); +} + + +void qjackctlGraphCanvas::emitDisconnected ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + emit disconnected(port1, port2); +} + + +// Rename notifiers. +void qjackctlGraphCanvas::emitRenamed ( qjackctlGraphItem *item, const QString& name ) +{ + emit renamed(item, name); +} + + +// Item finder (internal). +qjackctlGraphItem *qjackctlGraphCanvas::itemAt ( const QPointF& pos ) const +{ + const QList& items + = m_scene->items(QRectF(pos - QPointF(2, 2), QSizeF(5, 5))); + + foreach (QGraphicsItem *item, items) { + if (item->type() >= QGraphicsItem::UserType) + return static_cast (item); + } + + return nullptr; +} + + +// Port (dis)connection command. +void qjackctlGraphCanvas::connectPorts ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool is_connect ) +{ + const bool is_connected // already connected? + = (port1->findConnect(port2) != nullptr); + if (( is_connect && is_connected) || + (!is_connect && !is_connected)) + return; + + if (port1->isOutput()) { + m_commands->push( + new qjackctlGraphConnectCommand(this, port1, port2, is_connect)); + } else { + m_commands->push( + new qjackctlGraphConnectCommand(this, port2, port1, is_connect)); + } +} + + +// Mouse event handlers. +void qjackctlGraphCanvas::mousePressEvent ( QMouseEvent *event ) +{ + m_state = DragNone; + m_item = nullptr; + m_pos = QGraphicsView::mapToScene(event->pos()); + + qjackctlGraphItem *item = itemAt(m_pos); + if (item && item->type() >= QGraphicsItem::UserType) + m_item = static_cast (item); + + if (event->button() == Qt::LeftButton) + m_state = DragStart; + + if (m_state == DragStart && m_item == nullptr + && (event->modifiers() & Qt::ControlModifier) + && m_scene->selectedItems().isEmpty()) { + QGraphicsView::setDragMode(QGraphicsView::ScrollHandDrag); + QGraphicsView::mousePressEvent(event); + m_state = DragScroll; + } +} + + +void qjackctlGraphCanvas::mouseMoveEvent ( QMouseEvent *event ) +{ + int nchanged = 0; + + const QPointF& pos + = QGraphicsView::mapToScene(event->pos()); + + switch (m_state) { + case DragStart: + if ((pos - m_pos).manhattanLength() > 8.0) { + m_state = DragMove; + if (m_item) { + // Start new connection line... + if (m_item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (m_item); + if (port) { + QGraphicsView::setCursor(Qt::DragLinkCursor); + m_selected_nodes = 0; + m_scene->clearSelection(); + m_connect = new qjackctlGraphConnect(); + m_connect->setPort1(port); + m_connect->setSelected(true); + m_scene->addItem(m_connect); + m_item = nullptr; + ++m_selected_nodes; + ++nchanged; + } + } + else + // Start moving nodes around... + if (m_item->type() == qjackctlGraphNode::Type) { + QGraphicsView::setCursor(Qt::SizeAllCursor); + if (!m_item->isSelected()) { + if ((event->modifiers() + & (Qt::ShiftModifier | Qt::ControlModifier)) == 0) { + m_selected_nodes = 0; + m_scene->clearSelection(); + } + m_item->setSelected(true); + ++nchanged; + } + // Original node position (for move command)... + QPointF pos1 = m_pos; + pos1.setX(4.0 * ::round(0.25 * pos1.x())); + pos1.setY(4.0 * ::round(0.25 * pos1.y())); + m_pos1 = pos1; + } + else m_item = nullptr; + } + // Otherwise start lasso rubber-banding... + if (m_rubberband == nullptr && m_item == nullptr && m_connect == nullptr) { + QGraphicsView::setCursor(Qt::CrossCursor); + m_rubberband = new QRubberBand(QRubberBand::Rectangle, this); + } + } + break; + case DragMove: + QGraphicsView::ensureVisible(QRectF(pos, QSizeF(2, 2)), 8, 8); + // Move new connection line... + if (m_connect) + m_connect->updatePathTo(pos); + // Move rubber-band lasso... + if (m_rubberband) { + const QRect rect( + QGraphicsView::mapFromScene(m_pos), + QGraphicsView::mapFromScene(pos)); + m_rubberband->setGeometry(rect.normalized()); + m_rubberband->show(); + if (!m_zoomrange) { + if (event->modifiers() + & (Qt::ControlModifier | Qt::ShiftModifier)) { + foreach (QGraphicsItem *item, m_selected) { + item->setSelected(!item->isSelected()); + ++nchanged; + } + m_selected.clear(); + } else { + m_selected_nodes = 0; + m_scene->clearSelection(); + ++nchanged; + } + const QRectF range_rect(m_pos, pos); + foreach (QGraphicsItem *item, + m_scene->items(range_rect.normalized())) { + if (item->type() >= QGraphicsItem::UserType) { + if (item->type() != qjackctlGraphNode::Type) + ++m_selected_nodes; + else + if (m_selected_nodes > 0) + continue; + const bool is_selected = item->isSelected(); + if (event->modifiers() & Qt::ControlModifier) { + m_selected.append(item); + item->setSelected(!is_selected); + } + else + if (!is_selected) { + if (event->modifiers() & Qt::ShiftModifier) + m_selected.append(item); + item->setSelected(true); + } + ++nchanged; + } + } + } + } + // Move current selected nodes... + if (m_item && m_item->type() == qjackctlGraphNode::Type) { + QPointF pos2 = pos; + pos2.setX(4.0 * ::round(0.25 * pos2.x())); + pos2.setY(4.0 * ::round(0.25 * pos2.y())); + const QPointF delta = (pos2 - m_pos); + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) + node->setPos(node->pos() + delta); + } + } + m_pos = pos2; + } + else + if (m_connect) { + // Hovering ports high-lighting... + QGraphicsItem *item = itemAt(pos); + if (item && item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port1 = m_connect->port1(); + qjackctlGraphPort *port2 = static_cast (item); + if (port1 && port2 && + port1->portType() == port2->portType() && + port1->portMode() != port2->portMode()) { + port2->update(); + } + } + } + break; + case DragScroll: + default: + QGraphicsView::mouseMoveEvent(event); + break; + } + + if (nchanged > 0) + emit changed(); +} + + +void qjackctlGraphCanvas::mouseReleaseEvent ( QMouseEvent *event ) +{ + int nchanged = 0; + + switch (m_state) { + case DragStart: + // Make individual item (de)selections... + if ((event->modifiers() + & (Qt::ShiftModifier | Qt::ControlModifier)) == 0) { + m_selected_nodes = 0; + m_scene->clearSelection(); + ++nchanged; + } + if (m_item) { + bool is_selected = true; + if (event->modifiers() & Qt::ControlModifier) + is_selected = !m_item->isSelected(); + m_item->setSelected(is_selected); + if (m_item->type() != qjackctlGraphNode::Type && is_selected) + ++m_selected_nodes; + m_item = nullptr; // Not needed anymore! + ++nchanged; + } + // Fall thru... + case DragMove: + // Close new connection line... + if (m_connect) { + const QPointF& pos + = QGraphicsView::mapToScene(event->pos()); + qjackctlGraphItem *item = itemAt(pos); + if (item && item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port1 = m_connect->port1(); + qjackctlGraphPort *port2 = static_cast (item); + if (port1 && port2 + // && port1->portNode() != port2->portNode() + && port1->portMode() != port2->portMode() + && port1->portType() == port2->portType() + && port1->findConnect(port2) == nullptr) { + port2->setSelected(true); + #if 0 // Sure the sect will commit to this instead... + m_connect->setPort2(port2); + m_connect->updatePathTo(port2->portPos()); + m_connect = nullptr; + ++m_selected_nodes; + #else + // m_selected_nodes = 0; + // m_scene->clearSelection(); + #endif + // Submit command; notify eventual observers... + m_commands->beginMacro(tr("Connect")); + connectPorts(port1, port2, true); + m_commands->endMacro(); + ++nchanged; + } + } + if (m_connect) { + delete m_connect; + m_connect = nullptr; + } + } + // Maybe some node(s) were moved... + if (m_item && m_item->type() == qjackctlGraphNode::Type) { + const QPointF& pos + = QGraphicsView::mapToScene(event->pos()); + QList nodes; + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) + nodes.append(node); + } + } + m_commands->push( + new qjackctlGraphMoveCommand(this, nodes, m_pos1, pos)); + } + // Close rubber-band lasso... + if (m_rubberband) { + delete m_rubberband; + m_rubberband = nullptr; + m_selected.clear(); + // Zooming in range?... + if (m_zoomrange) { + const QRectF range_rect(m_pos, + QGraphicsView::mapToScene(event->pos())); + zoomFitRange(range_rect); + nchanged = 0; + } + } + break; + case DragScroll: + default: + QGraphicsView::mouseReleaseEvent(event); + QGraphicsView::setDragMode(QGraphicsView::NoDrag); + break; + } + + m_state = DragNone; + m_item = nullptr; + + // Reset cursor... + QGraphicsView::setCursor(Qt::ArrowCursor); + + if (nchanged > 0) + emit changed(); +} + + +void qjackctlGraphCanvas::mouseDoubleClickEvent ( QMouseEvent *event ) +{ + m_pos = QGraphicsView::mapToScene(event->pos()); + m_item = itemAt(m_pos); + + if (m_item && canRenameItem()) { + renameItem(); + } else { + QGraphicsView::centerOn(m_pos); + } +} + + +void qjackctlGraphCanvas::wheelEvent ( QWheelEvent *event ) +{ + if (event->modifiers() & Qt::ControlModifier) { + const int delta + #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) + = event->delta(); + #else + = event->angleDelta().y(); + #endif + setZoom(zoom() + qreal(delta) / 1200.0); + } + else QGraphicsView::wheelEvent(event); +} + + +// Keyboard event handler. +void qjackctlGraphCanvas::keyPressEvent ( QKeyEvent *event ) +{ + if (event->key() == Qt::Key_Escape) { + m_scene->clearSelection(); + clear(); + emit changed(); + } +} + + +// Connect selected items. +void qjackctlGraphCanvas::connectItems (void) +{ + QList outs; + QList ins; + + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) { + if (port->isOutput()) + outs.append(port); + else + ins.append(port); + } + } + } + + if (outs.isEmpty() || ins.isEmpty()) + return; + +// m_selected_nodes = 0; +// m_scene->clearSelection(); + + std::sort(outs.begin(), outs.end(), qjackctlGraphPort::ComparePos()); + std::sort(ins.begin(), ins.end(), qjackctlGraphPort::ComparePos()); + + QListIterator iter1(outs); + QListIterator iter2(ins); + + m_commands->beginMacro(tr("Connect")); + + const int nports = qMax(outs.count(), ins.count()); + for (int n = 0; n < nports; ++n) { + // Wrap a'round... + if (!iter1.hasNext()) + iter1.toFront(); + if (!iter2.hasNext()) + iter2.toFront(); + qjackctlGraphPort *port1 = iter1.next(); + qjackctlGraphPort *port2 = iter2.next(); + // Skip over non-matching port-types... + bool wrapped = false; + while (port1 && port2 && port1->portType() != port2->portType()) { + if (!iter2.hasNext()) { + if (wrapped) + break; + iter2.toFront(); + wrapped = true; + } + port2 = iter2.next(); + } + // Submit command; notify eventual observers... + if (!wrapped && port1 && port2 && port1->portNode() != port2->portNode()) + connectPorts(port1, port2, true); + } + + m_commands->endMacro(); +} + + +// Disconnect selected items. +void qjackctlGraphCanvas::disconnectItems (void) +{ + QList connects; + + foreach (QGraphicsItem *item, m_scene->selectedItems()) { + if (item->type() == qjackctlGraphConnect::Type) { + qjackctlGraphConnect *connect = static_cast (item); + if (connect) + connects.append(connect); + } + } + +// m_selected_nodes = 0; +// m_scene->clearSelection(); + + m_commands->beginMacro(tr("Disconnect")); + + foreach (qjackctlGraphConnect *connect, connects) { + // Submit command; notify eventual observers... + qjackctlGraphPort *port1 = connect->port1(); + qjackctlGraphPort *port2 = connect->port2(); + if (port1 && port2) + connectPorts(port1, port2, false); + } + + m_commands->endMacro(); +} + + +// Select actions. +void qjackctlGraphCanvas::selectAll (void) +{ + foreach (QGraphicsItem *item, m_scene->items()) { + if (item->type() == qjackctlGraphNode::Type) + item->setSelected(true); + else + ++m_selected_nodes; + } + + emit changed(); +} + + +void qjackctlGraphCanvas::selectNone (void) +{ + m_selected_nodes = 0; + m_scene->clearSelection(); + + emit changed(); +} + + +void qjackctlGraphCanvas::selectInvert (void) +{ + foreach (QGraphicsItem *item, m_scene->items()) { + if (item->type() == qjackctlGraphNode::Type) + item->setSelected(!item->isSelected()); + else + ++m_selected_nodes; + } + + emit changed(); +} + + +// Edit actions. +void qjackctlGraphCanvas::renameItem (void) +{ + qjackctlGraphItem *item = currentItem(); + + if (item && item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + QPalette pal; + const QColor& foreground + = node->foreground(); + QColor background = node->background(); + const bool is_dark + = (background.value() < 192); + pal.setColor(QPalette::Text, is_dark + ? foreground.lighter() + : foreground.darker()); + background.setAlpha(255); + pal.setColor(QPalette::Base, background); + m_editor->setPalette(pal); + QFont font = m_editor->font(); + font.setBold(true); + m_editor->setFont(font); + m_editor->setPlaceholderText(node->nodeName()); + m_editor->setText(node->nodeTitle()); + } + } + else + if (item && item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) { + QPalette pal; + const QColor& foreground + = port->foreground(); + const QColor& background + = port->background(); + const bool is_dark + = (background.value() < 128); + pal.setColor(QPalette::Text, is_dark + ? foreground.lighter() + : foreground.darker()); + pal.setColor(QPalette::Base, background.lighter()); + m_editor->setPalette(pal); + QFont font = m_editor->font(); + font.setBold(false); + m_editor->setFont(font); + m_editor->setPlaceholderText(port->portName()); + m_editor->setText(port->portTitle()); + } + } + else return; + + m_editor->show(); + m_editor->setEnabled(true); + m_editor->selectAll(); + m_editor->setFocus(); + m_edited = 0; + + m_edit_item = item; + + updateEditorGeometry(); +} + + +// Renaming editor position and size updater. +void qjackctlGraphCanvas::updateEditorGeometry (void) +{ + if (m_edit_item && m_editor->isEnabled() && m_editor->isVisible()) { + const QRectF& rect + = m_edit_item->editorRect().adjusted(+2.0, +2.0, -2.0, -2.0); + const QPoint& pos1 + = QGraphicsView::mapFromScene(rect.topLeft()); + const QPoint& pos2 + = QGraphicsView::mapFromScene(rect.bottomRight()); + m_editor->setGeometry( + pos1.x(), pos1.y(), + pos2.x() - pos1.x(), + pos2.y() - pos1.y()); + } +} + + +// Discrete zooming actions. +void qjackctlGraphCanvas::zoomIn (void) +{ + setZoom(zoom() + 0.1); +} + + +void qjackctlGraphCanvas::zoomOut (void) +{ + setZoom(zoom() - 0.1); +} + + +void qjackctlGraphCanvas::zoomFit (void) +{ + zoomFitRange(m_scene->itemsBoundingRect()); +} + + +void qjackctlGraphCanvas::zoomReset (void) +{ + setZoom(1.0); +} + + +// Update all nodes. +void qjackctlGraphCanvas::updateNodes (void) +{ + foreach (QGraphicsItem *item, m_scene->items()) { + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) + node->updatePath(); + } + } +} + + +// Zoom in rectangle range. +void qjackctlGraphCanvas::zoomFitRange ( const QRectF& range_rect ) +{ + QGraphicsView::fitInView( + range_rect, Qt::KeepAspectRatio); + + const QTransform& transform + = QGraphicsView::transform(); + if (transform.isScaling()) { + qreal zoom = transform.m11(); + if (zoom < 0.1) { + const qreal scale = 0.1 / zoom; + QGraphicsView::scale(scale, scale); + zoom = 0.1; + } + else + if (zoom > 2.0) { + const qreal scale = 2.0 / zoom; + QGraphicsView::scale(scale, scale); + zoom = 2.0; + } + m_zoom = zoom; + } + + emit changed(); +} + + +// Graph node position methods. +bool qjackctlGraphCanvas::restoreNodePos ( qjackctlGraphNode *node ) +{ + if (m_settings == nullptr || node == nullptr) + return false; + + m_settings->beginGroup(NodePosGroup); + const QPointF& node_pos + = m_settings->value('/' + nodeKey(node)).toPointF(); + m_settings->endGroup(); + + if (node_pos.isNull()) + return false; + + node->setPos(node_pos); + return true; +} + + +bool qjackctlGraphCanvas::saveNodePos ( qjackctlGraphNode *node ) const +{ + if (m_settings == nullptr || node == nullptr) + return false; + + m_settings->beginGroup(NodePosGroup); + m_settings->setValue('/' + nodeKey(node), node->pos()); + m_settings->endGroup(); + + return true; +} + + +bool qjackctlGraphCanvas::restoreState (void) +{ + if (m_settings == nullptr) + return false; + + m_settings->beginGroup(ColorsGroup); + const QRegExp rx("^0x"); + QStringListIterator key(m_settings->childKeys()); + while (key.hasNext()) { + const QString& sKey = key.next(); + const QColor& color = QString(m_settings->value(sKey).toString()); + if (color.isValid()) { + QString sx(sKey); + bool ok = false; + const uint port_type = sx.remove(rx).toUInt(&ok, 16); + if (ok) m_port_colors.insert(port_type, color); + } + } + m_settings->endGroup(); + + m_settings->beginGroup(CanvasGroup); + m_settings->setValue(CanvasRectKey, QGraphicsView::sceneRect()); + const QRectF& rect = m_settings->value(CanvasRectKey).toRectF(); + const qreal zoom = m_settings->value(CanvasZoomKey, 1.0).toReal(); + m_settings->endGroup(); + + if (rect.isValid()) + QGraphicsView::setSceneRect(rect); + + setZoom(zoom); + + return true; +} + + +bool qjackctlGraphCanvas::saveState (void) const +{ + if (m_settings == nullptr) + return false; + + m_settings->beginGroup(NodePosGroup); + const QList items(m_scene->items()); + foreach (QGraphicsItem *item, items) { + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) + m_settings->setValue('/' + nodeKey(node), node->pos()); + } + } + m_settings->endGroup(); + + m_settings->beginGroup(CanvasGroup); + m_settings->setValue(CanvasZoomKey, zoom()); + m_settings->setValue(CanvasRectKey, QGraphicsView::sceneRect()); + m_settings->endGroup(); + + m_settings->beginGroup(ColorsGroup); + QStringListIterator key(m_settings->childKeys()); + while (key.hasNext()) m_settings->remove(key.next()); + QHash::ConstIterator iter = m_port_colors.constBegin(); + const QHash::ConstIterator& iter_end = m_port_colors.constEnd(); + for ( ; iter != iter_end; ++iter) { + const uint port_type = iter.key(); + const QColor& color = iter.value(); + m_settings->setValue("0x" + QString::number(port_type, 16), color.name()); + } + m_settings->endGroup(); + + return true; +} + + +// Graph node key mangler. +QString qjackctlGraphCanvas::nodeKey ( qjackctlGraphNode *node ) const +{ + QString node_key = node->nodeName(); + + switch (node->nodeMode()) { + case qjackctlGraphItem::Input: + node_key += ":Input"; + break; + case qjackctlGraphItem::Output: + node_key += ":Output"; + break; + default: + break; + } + + return node_key; +} + + +// Graph port colors management. +void qjackctlGraphCanvas::setPortTypeColor ( + uint port_type, const QColor& port_color ) +{ + m_port_colors.insert(port_type, port_color); +} + + +const QColor& qjackctlGraphCanvas::portTypeColor ( uint port_type ) +{ + return m_port_colors[port_type]; +} + + +void qjackctlGraphCanvas::updatePortTypeColors ( uint port_type ) +{ + foreach (QGraphicsItem *item, m_scene->items()) { + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port && (0 >= port_type || port->portType() == port_type)) { + port->updatePortTypeColors(this); + port->update(); + } + } + } +} + + +void qjackctlGraphCanvas::clearPortTypeColors (void) +{ + m_port_colors.clear(); +} + + +// Clear all selection. +void qjackctlGraphCanvas::clearSelection (void) +{ + m_item = nullptr; + m_selected_nodes = 0; + m_scene->clearSelection(); + + m_edit_item = nullptr; + m_editor->setEnabled(false); + m_editor->hide(); + m_edited = 0; +} + + +// Clear all state. +void qjackctlGraphCanvas::clear (void) +{ + m_selected_nodes = 0; + if (m_rubberband) { + delete m_rubberband; + m_rubberband = nullptr; + m_selected.clear(); + } + if (m_connect) { + delete m_connect; + m_connect = nullptr; + } + if (m_state == DragScroll) + QGraphicsView::setDragMode(QGraphicsView::NoDrag); + m_state = DragNone; + m_item = nullptr; + m_edit_item = nullptr; + m_editor->setEnabled(false); + m_editor->hide(); + m_edited = 0; + + // Reset cursor... + QGraphicsView::setCursor(Qt::ArrowCursor); +} + + +// Rename item slots. +void qjackctlGraphCanvas::textChanged ( const QString& /* text */) +{ + if (m_edit_item && m_editor->isEnabled() && m_editor->isVisible()) + ++m_edited; +} + + +void qjackctlGraphCanvas::editingFinished (void) +{ + if (m_edit_item && m_editor->isEnabled() && m_editor->isVisible()) { + // If changed then notify... + if (m_edited > 0) { + m_commands->push( + new qjackctlGraphRenameCommand(this, + m_edit_item, m_editor->text())); + } + // Reset all renaming stuff... + m_edit_item = nullptr; + m_editor->setEnabled(false); + m_editor->hide(); + m_edited = 0; + } +} + + +// Client/port aliases accessors. +void qjackctlGraphCanvas::setAliases ( qjackctlAliases *aliases ) +{ + m_aliases = aliases; +} + + +qjackctlAliases *qjackctlGraphCanvas::aliases (void) const +{ + return m_aliases; +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphSect -- Generic graph driver + +// Constructor. +qjackctlGraphSect::qjackctlGraphSect ( qjackctlGraphCanvas *canvas ) + : m_canvas(canvas) +{ +} + + +// Accessors. +qjackctlGraphCanvas *qjackctlGraphSect::canvas (void) const +{ + return m_canvas; +} + + +// Generic sect/graph methods. +void qjackctlGraphSect::addItem ( qjackctlGraphItem *item ) +{ + m_canvas->addItem(item); + + if (item->type() == qjackctlGraphConnect::Type) { + qjackctlGraphConnect *connect = static_cast (item); + if (connect) + m_connects.append(connect); + } +} + + +void qjackctlGraphSect::removeItem ( qjackctlGraphItem *item ) +{ + if (item->type() == qjackctlGraphConnect::Type) { + qjackctlGraphConnect *connect = static_cast (item); + if (connect) + m_connects.removeAll(connect); + } + + m_canvas->removeItem(item); +} + + +// Clean-up all un-marked items... +void qjackctlGraphSect::resetItems ( uint node_type ) +{ + const QList connects(m_connects); + + foreach (qjackctlGraphConnect *connect, connects) { + if (connect->isMarked()) { + connect->setMarked(false); + } else { + removeItem(connect); + delete connect; + } + } + + m_canvas->resetNodes(node_type); +} + + +void qjackctlGraphSect::clearItems ( uint node_type ) +{ + qjackctlGraphSect::resetItems(node_type); + +// qDeleteAll(m_connects); + m_connects.clear(); + + m_canvas->clearNodes(node_type); +} + + +// Special node finder. +qjackctlGraphNode *qjackctlGraphSect::findNode ( + const QString& name, qjackctlGraphItem::Mode mode, int type ) const +{ + return m_canvas->findNode(name, mode, type); +} + + +// Client/port renaming method. +void qjackctlGraphSect::renameItem ( + qjackctlGraphItem *item, const QString& name ) +{ + int nchanged = 0; + + qjackctlGraphNode *node = nullptr; + + if (item->type() == qjackctlGraphNode::Type) { + node = static_cast (item); + if (node) { + node->setNodeTitle(name); + const QString& node_title = node->nodeTitle(); + foreach (qjackctlAliasList *node_aliases, item_aliases(item)) { + node_aliases->setClientAlias(node->nodeName(), node_title); + ++nchanged; + } + } + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) + node = port->portNode(); + if (port && node) { + port->setPortTitle(name); + foreach (qjackctlAliasList *port_aliases, item_aliases(item)) { + port_aliases->setPortAlias( + node->nodeName(), port->portName(), name); + ++nchanged; + } + } + } + + if (node) + node->updatePath(); + + if (nchanged > 0) { + qjackctlAliases *aliases = nullptr; + if (m_canvas) + aliases = m_canvas->aliases(); + if (aliases) + aliases->dirty = true; + } +} + + +// end of qjackctlGraph.cpp diff -Nru qjackctl-0.4.5/src/qjackctlGraphForm.cpp qjackctl-0.6.0/src/qjackctlGraphForm.cpp --- qjackctl-0.4.5/src/qjackctlGraphForm.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraphForm.cpp 2019-10-17 07:45:45.953673224 +0000 @@ -0,0 +1,1038 @@ +// qjackctlGraphForm.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlAbout.h" +#include "qjackctlGraphForm.h" + +#include "qjackctlJackGraph.h" +#include "qjackctlAlsaGraph.h" + +#include "qjackctlSetup.h" + +#include "qjackctlMainForm.h" + +#include "qjackctlSetup.h" + +#include + +#include + +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include + +#include + + +//---------------------------------------------------------------------------- +// qjackctlGraphForm -- UI wrapper form. + +// Constructor. +qjackctlGraphForm::qjackctlGraphForm ( + QWidget *parent, Qt::WindowFlags wflags ) + : QMainWindow(parent, wflags), m_config(nullptr), m_jack(nullptr), m_alsa(nullptr) +{ + // Setup UI struct... + m_ui.setupUi(this); + + m_jack_changed = 0; + m_alsa_changed = 0; + + m_ins = m_mids = m_outs = 0; + + QUndoStack *commands = m_ui.graphCanvas->commands(); + + QAction *undo_action = commands->createUndoAction(this, tr("&Undo")); + undo_action->setIcon(QIcon(":/images/graphUndo.png")); + undo_action->setStatusTip(tr("Undo last edit action")); + undo_action->setShortcuts(QKeySequence::Undo); + + QAction *redo_action = commands->createRedoAction(this, tr("&Redo")); + redo_action->setIcon(QIcon(":/images/graphRedo.png")); + redo_action->setStatusTip(tr("Redo last edit action")); + redo_action->setShortcuts(QKeySequence::Redo); + + QAction *before_action = m_ui.editSelectAllAction; + m_ui.editMenu->insertAction(before_action, undo_action); + m_ui.editMenu->insertAction(before_action, redo_action); + m_ui.editMenu->insertSeparator(before_action); + + before_action = m_ui.viewCenterAction; + m_ui.ToolBar->insertAction(before_action, undo_action); + m_ui.ToolBar->insertAction(before_action, redo_action); + m_ui.ToolBar->insertSeparator(before_action); + + // Special zoom composite widget... + QWidget *zoom_widget = new QWidget(); + zoom_widget->setMaximumWidth(240); + zoom_widget->setToolTip(tr("Zoom")); + + QHBoxLayout *zoom_layout = new QHBoxLayout(); + zoom_layout->setMargin(0); + zoom_layout->setSpacing(2); + + QToolButton *zoom_out = new QToolButton(); + zoom_out->setDefaultAction(m_ui.viewZoomOutAction); + zoom_out->setFixedSize(22, 22); + zoom_layout->addWidget(zoom_out); + + m_zoom_slider = new QSlider(Qt::Horizontal); + m_zoom_slider->setFixedHeight(22); + m_zoom_slider->setMinimum(10); + m_zoom_slider->setMaximum(200); + m_zoom_slider->setTickInterval(100); + m_zoom_slider->setTickPosition(QSlider::TicksBothSides); + zoom_layout->addWidget(m_zoom_slider); + + QToolButton *zoom_in = new QToolButton(); + zoom_in->setDefaultAction(m_ui.viewZoomInAction); + zoom_in->setFixedSize(22, 22); + zoom_layout->addWidget(zoom_in); + + m_zoom_spinbox = new QSpinBox(); + m_zoom_spinbox->setFixedHeight(22); + m_zoom_spinbox->setAlignment(Qt::AlignCenter); + m_zoom_spinbox->setMinimum(10); + m_zoom_spinbox->setMaximum(200); + m_zoom_spinbox->setSuffix(" %"); + zoom_layout->addWidget(m_zoom_spinbox); + + zoom_widget->setLayout(zoom_layout); + m_ui.StatusBar->addPermanentWidget(zoom_widget); + + QObject::connect(m_zoom_spinbox, + SIGNAL(valueChanged(int)), + SLOT(zoomValueChanged(int))); + QObject::connect(m_zoom_slider, + SIGNAL(valueChanged(int)), + SLOT(zoomValueChanged(int))); + + QObject::connect(m_ui.graphCanvas, + SIGNAL(added(qjackctlGraphNode *)), + SLOT(added(qjackctlGraphNode *))); + QObject::connect(m_ui.graphCanvas, + SIGNAL(removed(qjackctlGraphNode *)), + SLOT(removed(qjackctlGraphNode *))); + + QObject::connect(m_ui.graphCanvas, + SIGNAL(connected(qjackctlGraphPort *, qjackctlGraphPort *)), + SLOT(connected(qjackctlGraphPort *, qjackctlGraphPort *))); + QObject::connect(m_ui.graphCanvas, + SIGNAL(disconnected(qjackctlGraphPort *, qjackctlGraphPort *)), + SLOT(disconnected(qjackctlGraphPort *, qjackctlGraphPort *))); + + QObject::connect(m_ui.graphCanvas, + SIGNAL(renamed(qjackctlGraphItem *, const QString&)), + SLOT(renamed(qjackctlGraphItem *, const QString&))); + + QObject::connect(m_ui.graphCanvas, + SIGNAL(changed()), + SLOT(stabilize())); + + // Some actions surely need those + // shortcuts firmly attached... + addAction(m_ui.viewMenubarAction); + + QObject::connect(m_ui.graphConnectAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(connectItems())); + QObject::connect(m_ui.graphDisconnectAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(disconnectItems())); + + QObject::connect(m_ui.graphCloseAction, + SIGNAL(triggered(bool)), + SLOT(close())); + + QObject::connect(m_ui.editSelectAllAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(selectAll())); + QObject::connect(m_ui.editSelectNoneAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(selectNone())); + QObject::connect(m_ui.editSelectInvertAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(selectInvert())); + + QObject::connect(m_ui.editRenameItemAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(renameItem())); + + QObject::connect(m_ui.viewMenubarAction, + SIGNAL(triggered(bool)), + SLOT(viewMenubar(bool))); + QObject::connect(m_ui.viewStatusbarAction, + SIGNAL(triggered(bool)), + SLOT(viewStatusbar(bool))); + QObject::connect(m_ui.viewToolbarAction, + SIGNAL(triggered(bool)), + SLOT(viewToolbar(bool))); + + QObject::connect(m_ui.viewTextBesideIconsAction, + SIGNAL(triggered(bool)), + SLOT(viewTextBesideIcons(bool))); + + QObject::connect(m_ui.viewCenterAction, + SIGNAL(triggered(bool)), + SLOT(viewCenter())); + QObject::connect(m_ui.viewRefreshAction, + SIGNAL(triggered(bool)), + SLOT(viewRefresh())); + + QObject::connect(m_ui.viewZoomInAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(zoomIn())); + QObject::connect(m_ui.viewZoomOutAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(zoomOut())); + QObject::connect(m_ui.viewZoomFitAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(zoomFit())); + QObject::connect(m_ui.viewZoomResetAction, + SIGNAL(triggered(bool)), + m_ui.graphCanvas, SLOT(zoomReset())); + + QObject::connect(m_ui.viewZoomRangeAction, + SIGNAL(triggered(bool)), + SLOT(viewZoomRange(bool))); + + m_ui.viewColorsJackAudioAction->setData(qjackctlJackGraph::audioPortType()); + m_ui.viewColorsJackMidiAction->setData(qjackctlJackGraph::midiPortType()); +#ifdef CONFIG_ALSA_SEQ + m_ui.viewColorsAlsaMidiAction->setData(qjackctlAlsaGraph::midiPortType()); +#endif + + QObject::connect(m_ui.viewColorsJackAudioAction, + SIGNAL(triggered(bool)), + SLOT(viewColorsAction())); + QObject::connect(m_ui.viewColorsJackMidiAction, + SIGNAL(triggered(bool)), + SLOT(viewColorsAction())); + QObject::connect(m_ui.viewColorsAlsaMidiAction, + SIGNAL(triggered(bool)), + SLOT(viewColorsAction())); + QObject::connect(m_ui.viewColorsResetAction, + SIGNAL(triggered(bool)), + SLOT(viewColorsReset())); + + m_sort_type = new QActionGroup(this); + m_sort_type->setExclusive(true); + m_sort_type->addAction(m_ui.viewSortPortNameAction); + m_sort_type->addAction(m_ui.viewSortPortTitleAction); + m_sort_type->addAction(m_ui.viewSortPortIndexAction); + + m_ui.viewSortPortNameAction->setData(qjackctlGraphPort::PortName); + m_ui.viewSortPortTitleAction->setData(qjackctlGraphPort::PortTitle); + m_ui.viewSortPortIndexAction->setData(qjackctlGraphPort::PortIndex); + + QObject::connect(m_ui.viewSortPortNameAction, + SIGNAL(triggered(bool)), + SLOT(viewSortTypeAction())); + QObject::connect(m_ui.viewSortPortTitleAction, + SIGNAL(triggered(bool)), + SLOT(viewSortTypeAction())); + QObject::connect(m_ui.viewSortPortIndexAction, + SIGNAL(triggered(bool)), + SLOT(viewSortTypeAction())); + + m_sort_order = new QActionGroup(this); + m_sort_order->setExclusive(true); + m_sort_order->addAction(m_ui.viewSortAscendingAction); + m_sort_order->addAction(m_ui.viewSortDescendingAction); + + m_ui.viewSortAscendingAction->setData(qjackctlGraphPort::Ascending); + m_ui.viewSortDescendingAction->setData(qjackctlGraphPort::Descending); + + QObject::connect(m_ui.viewSortAscendingAction, + SIGNAL(triggered(bool)), + SLOT(viewSortOrderAction())); + QObject::connect(m_ui.viewSortDescendingAction, + SIGNAL(triggered(bool)), + SLOT(viewSortOrderAction())); + + QObject::connect(m_ui.helpAboutAction, + SIGNAL(triggered(bool)), + SLOT(helpAbout())); + QObject::connect(m_ui.helpAboutQtAction, + SIGNAL(triggered(bool)), + SLOT(helpAboutQt())); + + QObject::connect(m_ui.ToolBar, + SIGNAL(orientationChanged(Qt::Orientation)), + SLOT(orientationChanged(Qt::Orientation))); +} + + +// Destructor. +qjackctlGraphForm::~qjackctlGraphForm (void) +{ + delete m_sort_order; + delete m_sort_type; + + if (m_jack) + delete m_jack; +#ifdef CONFIG_ALSA_SEQ + if (m_alsa) + delete m_alsa; +#endif + if (m_config) + delete m_config; +} + + +// Set reference to global options, mostly needed for +// the initial state of the main dockable views and +// those client/port aliasing feature. +void qjackctlGraphForm::setup ( qjackctlSetup *pSetup ) +{ + m_config = new qjackctlGraphConfig(&pSetup->settings()); + + m_ui.graphCanvas->setSettings(m_config->settings()); + m_ui.graphCanvas->setAliases(&(pSetup->aliases)); + + m_config->restoreState(this); + + // Raise the operational sects... + m_jack = new qjackctlJackGraph(m_ui.graphCanvas); +#ifdef CONFIG_ALSA_SEQ + if (pSetup->bAlsaSeqEnabled) + m_alsa = new qjackctlAlsaGraph(m_ui.graphCanvas); +#endif + + m_ui.viewMenubarAction->setChecked(m_config->isMenubar()); + m_ui.viewToolbarAction->setChecked(m_config->isToolbar()); + m_ui.viewStatusbarAction->setChecked(m_config->isStatusbar()); + + m_ui.viewTextBesideIconsAction->setChecked(m_config->isTextBesideIcons()); + m_ui.viewZoomRangeAction->setChecked(m_config->isZoomRange()); + + const qjackctlGraphPort::SortType sort_type + = qjackctlGraphPort::SortType(m_config->sortType()); + qjackctlGraphPort::setSortType(sort_type); + switch (sort_type) { + case qjackctlGraphPort::PortIndex: + m_ui.viewSortPortIndexAction->setChecked(true); + break; + case qjackctlGraphPort::PortTitle: + m_ui.viewSortPortTitleAction->setChecked(true); + break; + case qjackctlGraphPort::PortName: + default: + m_ui.viewSortPortNameAction->setChecked(true); + break; + } + + const qjackctlGraphPort::SortOrder sort_order + = qjackctlGraphPort::SortOrder(m_config->sortOrder()); + qjackctlGraphPort::setSortOrder(sort_order); + switch (sort_order) { + case qjackctlGraphPort::Descending: + m_ui.viewSortDescendingAction->setChecked(true); + break; + case qjackctlGraphPort::Ascending: + default: + m_ui.viewSortAscendingAction->setChecked(true); + break; + } + + viewMenubar(m_config->isMenubar()); + viewToolbar(m_config->isToolbar()); + viewStatusbar(m_config->isStatusbar()); + + viewTextBesideIcons(m_config->isTextBesideIcons()); + viewZoomRange(m_config->isZoomRange()); + + m_ui.graphCanvas->restoreState(); + + updateViewColors(); + + stabilize(); + + // Make it ready :-) + m_ui.StatusBar->showMessage(tr("Ready"), 3000); + + // Trigger refresh cycle... + jack_changed(); + alsa_changed(); +} + + +// Main menu slots. +void qjackctlGraphForm::viewMenubar ( bool on ) +{ + m_ui.MenuBar->setVisible(on); +} + + +void qjackctlGraphForm::viewToolbar ( bool on ) +{ + m_ui.ToolBar->setVisible(on); +} + + +void qjackctlGraphForm::viewStatusbar ( bool on ) +{ + m_ui.StatusBar->setVisible(on); +} + + +void qjackctlGraphForm::viewTextBesideIcons ( bool on ) +{ + if (on) { + m_ui.ToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + } else { + m_ui.ToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); + } +} + + +void qjackctlGraphForm::viewCenter (void) +{ + const QRectF& scene_rect + = m_ui.graphCanvas->scene()->itemsBoundingRect(); + m_ui.graphCanvas->centerOn(scene_rect.center()); + + stabilize(); +} + + +void qjackctlGraphForm::viewRefresh (void) +{ + jack_changed(); + alsa_changed(); + + refresh(); +} + + +void qjackctlGraphForm::viewZoomRange ( bool on ) +{ + m_ui.graphCanvas->setZoomRange(on); +} + + +void qjackctlGraphForm::viewColorsAction (void) +{ + QAction *action = qobject_cast (sender()); + if (action == nullptr) + return; + + const uint port_type = action->data().toUInt(); + if (0 >= port_type) + return; + + const QColor& color = QColorDialog::getColor( + m_ui.graphCanvas->portTypeColor(port_type), this, + tr("Colors - %1").arg(action->text().remove('&'))); + if (color.isValid()) { + m_ui.graphCanvas->setPortTypeColor(port_type, color); + m_ui.graphCanvas->updatePortTypeColors(port_type); + updateViewColorsAction(action); + } +} + + +void qjackctlGraphForm::viewColorsReset (void) +{ + m_ui.graphCanvas->clearPortTypeColors(); + if (m_jack) + m_jack->resetPortTypeColors(); +#ifdef CONFIG_ALSA_SEQ + if (m_alsa) + m_alsa->resetPortTypeColors(); +#endif + m_ui.graphCanvas->updatePortTypeColors(); + + updateViewColors(); +} + + +void qjackctlGraphForm::viewSortTypeAction (void) +{ + QAction *action = qobject_cast (sender()); + if (action == nullptr) + return; + + const qjackctlGraphPort::SortType sort_type + = qjackctlGraphPort::SortType(action->data().toInt()); + qjackctlGraphPort::setSortType(sort_type); + + m_ui.graphCanvas->updateNodes(); +} + + +void qjackctlGraphForm::viewSortOrderAction (void) +{ + QAction *action = qobject_cast (sender()); + if (action == nullptr) + return; + + const qjackctlGraphPort::SortOrder sort_order + = qjackctlGraphPort::SortOrder(action->data().toInt()); + qjackctlGraphPort::setSortOrder(sort_order); + + m_ui.graphCanvas->updateNodes(); +} + + +void qjackctlGraphForm::helpAbout (void) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pMainForm->showAboutForm(); +} + + +void qjackctlGraphForm::helpAboutQt (void) +{ + QMessageBox::aboutQt(this); +} + + +void qjackctlGraphForm::zoomValueChanged ( int zoom_value ) +{ + m_ui.graphCanvas->setZoom(0.01 * qreal(zoom_value)); +} + + +// Node life-cycle slots. +void qjackctlGraphForm::added ( qjackctlGraphNode *node ) +{ + const qjackctlGraphCanvas *canvas + = m_ui.graphCanvas; + const QRectF& rect + = canvas->mapToScene(canvas->viewport()->rect()).boundingRect(); + const QPointF& pos = rect.center(); + const qreal w = 0.33 * qMax(rect.width(), 800.0); + const qreal h = 0.33 * qMax(rect.height(), 600.0); + + qreal x = pos.x(); + qreal y = pos.y(); + + switch (node->nodeMode()) { + case qjackctlGraphItem::Input: + ++m_ins; + x += w; + y += 0.33 * h * (m_ins & 1 ? +m_ins : -m_ins); + break; + case qjackctlGraphItem::Output: + ++m_outs; + x -= w; + y += 0.33 * h * (m_outs & 1 ? +m_outs : -m_outs); + break; + default: { + int dx = 0; + int dy = 0; + for (int i = 0; i < m_mids; ++i) { + if ((qAbs(dx) > qAbs(dy)) || (dx == dy && dx < 0)) + dy += (dx < 0 ? +1 : -1); + else + dx += (dy < 0 ? -1 : +1); + } + x += 0.33 * w * qreal(dx); + y += 0.33 * h * qreal(dy); + ++m_mids; + break; + }} + + x = 4.0 * ::round(0.25 * (x - qreal(::rand() & 0x1f))); + y = 4.0 * ::round(0.25 * (y - qreal(::rand() & 0x1f))); + + node->setPos(x, y); + + stabilize(); +} + + +void qjackctlGraphForm::removed ( qjackctlGraphNode */*node*/ ) +{ +#if 0// FIXME: DANGEROUS! Node might have been deleted by now... + if (node) { + switch (node->nodeMode()) { + case qjackctlGraphItem::Input: + --m_ins; + break; + case qjackctlGraphItem::Output: + --m_outs; + break; + default: + --m_mids; + break; + } + } +#endif +} + + +// Port (dis)connection slots. +void qjackctlGraphForm::connected ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + if (qjackctlJackGraph::isPortType(port1->portType())) { + if (m_jack) + m_jack->connectPorts(port1, port2, true); + jack_changed(); + } +#ifdef CONFIG_ALSA_SEQ + else + if (qjackctlAlsaGraph::isPortType(port1->portType())) { + if (m_alsa) + m_alsa->connectPorts(port1, port2, true); + alsa_changed(); + } +#endif + + stabilize(); +} + + +void qjackctlGraphForm::disconnected ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pMainForm->queryDisconnect(port1, port2); + + if (qjackctlJackGraph::isPortType(port1->portType())) { + if (m_jack) + m_jack->connectPorts(port1, port2, false); + jack_changed(); + } +#ifdef CONFIG_ALSA_SEQ + else + if (qjackctlAlsaGraph::isPortType(port1->portType())) { + if (m_alsa) + m_alsa->connectPorts(port1, port2, false); + alsa_changed(); + } +#endif + + stabilize(); +} + + +// Item renaming slot. +void qjackctlGraphForm::renamed ( qjackctlGraphItem *item, const QString& name ) +{ + qjackctlGraphSect *sect = item_sect(item); + if (sect) + sect->renameItem(item, name); +} + + +// Graph section slots. +void qjackctlGraphForm::jack_shutdown (void) +{ + m_ui.graphCanvas->clearSelection(); + + m_jack_changed = 0; + + if (m_jack) + m_jack->clearItems(); + + stabilize(); +} + + +void qjackctlGraphForm::jack_changed (void) +{ + ++m_jack_changed; +} + +void qjackctlGraphForm::alsa_changed (void) +{ + ++m_alsa_changed; +} + + +// Graph refreshner. +void qjackctlGraphForm::refresh (void) +{ + if (m_jack_changed > 0) { + m_jack_changed = 0; + if (m_jack) + m_jack->updateItems(); + stabilize(); + } +#ifdef CONFIG_ALSA_SEQ + else + if (m_alsa_changed > 0) { + m_alsa_changed = 0; + if (m_alsa) + m_alsa->updateItems(); + stabilize(); + } +#endif +} + + +// Graph selection change slot. +void qjackctlGraphForm::stabilize (void) +{ + const qjackctlGraphCanvas *canvas = m_ui.graphCanvas; + + m_ui.graphConnectAction->setEnabled(canvas->canConnect()); + m_ui.graphDisconnectAction->setEnabled(canvas->canDisconnect()); + + m_ui.editSelectNoneAction->setEnabled( + !canvas->scene()->selectedItems().isEmpty()); + m_ui.editRenameItemAction->setEnabled( + canvas->canRenameItem()); + +#if 0 + const QRectF& outter_rect + = canvas->scene()->sceneRect().adjusted(-2.0, -2.0, +2.0, +2.0); + const QRectF& inner_rect + = canvas->mapToScene(canvas->viewport()->rect()).boundingRect(); + const bool is_contained + = outter_rect.contains(inner_rect) || + canvas->horizontalScrollBar()->isVisible() || + canvas->verticalScrollBar()->isVisible(); +#else + const bool is_contained = true; +#endif + const qreal zoom = canvas->zoom(); + m_ui.viewCenterAction->setEnabled(is_contained); + m_ui.viewZoomInAction->setEnabled(zoom < 2.0); + m_ui.viewZoomOutAction->setEnabled(zoom > 0.1); + m_ui.viewZoomFitAction->setEnabled(is_contained); + m_ui.viewZoomResetAction->setEnabled(zoom != 1.0); + + const int zoom_value = int(100.0f * zoom); + const bool is_spinbox_blocked = m_zoom_spinbox->blockSignals(true); + const bool is_slider_blocked = m_zoom_slider->blockSignals(true); + m_zoom_spinbox->setValue(zoom_value); + m_zoom_slider->setValue(zoom_value); + m_zoom_spinbox->blockSignals(is_spinbox_blocked); + m_zoom_slider->blockSignals(is_slider_blocked); +} + + +// Tool-bar orientation change slot. +void qjackctlGraphForm::orientationChanged ( Qt::Orientation orientation ) +{ + if (m_config && m_config->isTextBesideIcons() + && orientation == Qt::Horizontal) { + m_ui.ToolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); + } else { + m_ui.ToolBar->setToolButtonStyle(Qt::ToolButtonIconOnly); + } +} + + +// Context-menu event handler. +void qjackctlGraphForm::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) +{ + m_ui.graphCanvas->clear(); + + stabilize(); + + QMenu menu(this); + menu.addAction(m_ui.graphConnectAction); + menu.addAction(m_ui.graphDisconnectAction); + menu.addSeparator(); + menu.addActions(m_ui.editMenu->actions()); + menu.addSeparator(); + menu.addMenu(m_ui.viewZoomMenu); + + menu.exec(pContextMenuEvent->globalPos()); + + stabilize(); +} + + +// Widget resize event handler. +void qjackctlGraphForm::resizeEvent ( QResizeEvent *pResizeEvent ) +{ + QMainWindow::resizeEvent(pResizeEvent); + + stabilize(); +} + + +// Notify our parent that we're emerging. +void qjackctlGraphForm::showEvent ( QShowEvent *pShowEvent ) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pMainForm->stabilizeForm(); + + QWidget::showEvent(pShowEvent); +} + + +// Notify our parent that we're closing. +void qjackctlGraphForm::hideEvent ( QHideEvent *pHideEvent ) +{ + QWidget::hideEvent(pHideEvent); + + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pMainForm->stabilizeForm(); +} + + +// Widget close event handler. +void qjackctlGraphForm::closeEvent ( QCloseEvent *pCloseEvent ) +{ + m_ui.graphCanvas->saveState(); + + if (m_config && QMainWindow::isVisible()) { + m_config->setSortOrder(int(qjackctlGraphPort::sortOrder())); + m_config->setSortType(int(qjackctlGraphPort::sortType())); + m_config->setTextBesideIcons(m_ui.viewTextBesideIconsAction->isChecked()); + m_config->setZoomRange(m_ui.viewZoomRangeAction->isChecked()); + m_config->setStatusbar(m_ui.StatusBar->isVisible()); + m_config->setToolbar(m_ui.ToolBar->isVisible()); + m_config->setMenubar(m_ui.MenuBar->isVisible()); + m_config->saveState(this); + } + + QMainWindow::closeEvent(pCloseEvent); +} + + + +// Special port-type color methods. +void qjackctlGraphForm::updateViewColorsAction ( QAction *action ) +{ + const uint port_type = action->data().toUInt(); + if (0 >= port_type) + return; + + const QColor& color = m_ui.graphCanvas->portTypeColor(port_type); + if (!color.isValid()) + return; + + QPixmap pm(22, 22); + QPainter(&pm).fillRect(0, 0, pm.width(), pm.height(), color); + action->setIcon(QIcon(pm)); +} + + +void qjackctlGraphForm::updateViewColors (void) +{ + updateViewColorsAction(m_ui.viewColorsJackAudioAction); + updateViewColorsAction(m_ui.viewColorsJackMidiAction); + updateViewColorsAction(m_ui.viewColorsAlsaMidiAction); +} + + +// Item sect predicate. +qjackctlGraphSect *qjackctlGraphForm::item_sect ( qjackctlGraphItem *item ) const +{ + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node && qjackctlJackGraph::isNodeType(node->nodeType())) + return m_jack; + #ifdef CONFIG_ALSA_SEQ + else + if (node && qjackctlAlsaGraph::isNodeType(node->nodeType())) + return m_alsa; + #endif + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port && qjackctlJackGraph::isPortType(port->portType())) + return m_jack; + #ifdef CONFIG_ALSA_SEQ + else + if (port && qjackctlAlsaGraph::isPortType(port->portType())) + return m_alsa; + #endif + } + + return nullptr; // No deal! +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphConfig -- Canvas state memento. + +// Local constants. +static const char *LayoutGroup = "/GraphLayout"; +static const char *ViewGroup = "/GraphView"; +static const char *ViewMenubarKey = "/Menubar"; +static const char *ViewToolbarKey = "/Toolbar"; +static const char *ViewStatusbarKey = "/Statusbar"; +static const char *ViewTextBesideIconsKey = "/TextBesideIcons"; +static const char *ViewZoomRangeKey = "/ZoomRange"; +static const char *ViewSortTypeKey = "/SortType"; +static const char *ViewSortOrderKey = "/SortOrder"; + + +// Constructors. +qjackctlGraphConfig::qjackctlGraphConfig ( QSettings *settings ) + : m_settings(settings), m_menubar(false), + m_toolbar(false), m_statusbar(false), + m_texticons(false), m_zoomrange(false), + m_sorttype(0), m_sortorder(0) +{ +} + + +QSettings *qjackctlGraphConfig::settings (void) const +{ + return m_settings; +} + + +void qjackctlGraphConfig::setMenubar ( bool menubar ) +{ + m_menubar = menubar; +} + +bool qjackctlGraphConfig::isMenubar (void) const +{ + return m_menubar; +} + + +void qjackctlGraphConfig::setToolbar ( bool toolbar ) +{ + m_toolbar = toolbar; +} + +bool qjackctlGraphConfig::isToolbar (void) const +{ + return m_toolbar; +} + + +void qjackctlGraphConfig::setStatusbar ( bool statusbar ) +{ + m_statusbar = statusbar; +} + +bool qjackctlGraphConfig::isStatusbar (void) const +{ + return m_statusbar; +} + + +void qjackctlGraphConfig::setTextBesideIcons ( bool texticons ) +{ + m_texticons = texticons; +} + +bool qjackctlGraphConfig::isTextBesideIcons (void) const +{ + return m_texticons; +} + + +void qjackctlGraphConfig::setZoomRange ( bool zoomrange ) +{ + m_zoomrange = zoomrange; +} + +bool qjackctlGraphConfig::isZoomRange (void) const +{ + return m_zoomrange; +} + + +void qjackctlGraphConfig::setSortType ( int sorttype ) +{ + m_sorttype = sorttype; +} + +int qjackctlGraphConfig::sortType (void) const +{ + return m_sorttype; +} + + +void qjackctlGraphConfig::setSortOrder ( int sortorder ) +{ + m_sortorder = sortorder; +} + +int qjackctlGraphConfig::sortOrder (void) const +{ + return m_sortorder; +} + + +// Graph main-widget state methods. +bool qjackctlGraphConfig::restoreState ( QMainWindow *widget ) +{ + if (m_settings == nullptr || widget == nullptr) + return false; + + m_settings->beginGroup(ViewGroup); + m_menubar = m_settings->value(ViewMenubarKey, true).toBool(); + m_toolbar = m_settings->value(ViewToolbarKey, true).toBool(); + m_statusbar = m_settings->value(ViewStatusbarKey, true).toBool(); + m_texticons = m_settings->value(ViewTextBesideIconsKey, true).toBool(); + m_zoomrange = m_settings->value(ViewZoomRangeKey, false).toBool(); + m_sorttype = m_settings->value(ViewSortTypeKey, 0).toInt(); + m_sortorder = m_settings->value(ViewSortOrderKey, 0).toInt(); + m_settings->endGroup(); + + m_settings->beginGroup(LayoutGroup); + const QByteArray& layout_state + = m_settings->value('/' + widget->objectName()).toByteArray(); + m_settings->endGroup(); + + if (!layout_state.isEmpty()) + widget->restoreState(layout_state); + + return true; +} + + +bool qjackctlGraphConfig::saveState ( QMainWindow *widget ) const +{ + if (m_settings == nullptr || widget == nullptr) + return false; + + m_settings->beginGroup(ViewGroup); + m_settings->setValue(ViewMenubarKey, m_menubar); + m_settings->setValue(ViewToolbarKey, m_toolbar); + m_settings->setValue(ViewStatusbarKey, m_statusbar); + m_settings->setValue(ViewTextBesideIconsKey, m_texticons); + m_settings->setValue(ViewZoomRangeKey, m_zoomrange); + m_settings->setValue(ViewSortTypeKey, m_sorttype); + m_settings->setValue(ViewSortOrderKey, m_sortorder); + m_settings->endGroup(); + + m_settings->beginGroup(LayoutGroup); + const QByteArray& layout_state = widget->saveState(); + m_settings->setValue('/' + widget->objectName(), layout_state); + m_settings->endGroup(); + + return true; +} + + +// end of qjackctlGraphForm.cpp diff -Nru qjackctl-0.4.5/src/qjackctlGraphForm.h qjackctl-0.6.0/src/qjackctlGraphForm.h --- qjackctl-0.4.5/src/qjackctlGraphForm.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraphForm.h 2019-10-17 07:45:45.953673224 +0000 @@ -0,0 +1,224 @@ +// qjackctlGraphForm.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlGraphForm_h +#define __qjackctlGraphForm_h + +#include "ui_qjackctlGraphForm.h" + + +// Forward decls. +class qjackctlGraphConfig; + +class qjackctlGraphSect; +class qjackctlAlsaGraph; +class qjackctlJackGraph; + +class qjackctlGraphPort; + +class qjackctlSetup; + +class QResizeEvent; +class QCloseEvent; + +class QSlider; +class QSpinBox; + +class QActionGroup; + + +// Forwards decls. +class QSettings; +class QMainWindow; + + +//---------------------------------------------------------------------------- +// qjackctlGraphForm -- UI wrapper form. + +class qjackctlGraphForm : public QMainWindow +{ + Q_OBJECT + +public: + + // Constructor. + qjackctlGraphForm(QWidget *parent = 0, Qt::WindowFlags wflags = 0); + + // Destructor. + ~qjackctlGraphForm(); + + // Initializer. + void setup(qjackctlSetup *pSetup); + +public slots: + + // Graph section slots. + void jack_shutdown(); + void jack_changed(); + void alsa_changed(); + + // Graph refreshner. + void refresh(); + +protected slots: + + // Node life-cycle slots + void added(qjackctlGraphNode *node); + void removed(qjackctlGraphNode *node); + + // Port (dis)connection slots. + void connected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + void disconnected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + + // Item renaming slot. + void renamed(qjackctlGraphItem *item, const QString& name); + + // Graph selection change slot. + void stabilize(); + + // Tool-bar orientation change slot. + void orientationChanged(Qt::Orientation orientation); + + // Main menu slots. + void viewMenubar(bool on); + void viewToolbar(bool on); + void viewStatusbar(bool on); + + void viewTextBesideIcons(bool on); + + void viewCenter(); + void viewRefresh(); + + void viewZoomRange(bool on); + + void viewSortTypeAction(); + void viewSortOrderAction(); + + void viewColorsAction(); + void viewColorsReset(); + + void helpAbout(); + void helpAboutQt(); + + void zoomValueChanged(int zoom_value); + +protected: + + // Context-menu event handler. + void contextMenuEvent(QContextMenuEvent *pContextMenuEvent); + + // Widget resize event handler. + void resizeEvent(QResizeEvent *pResizeEvent); + + // Widget show/hide/close event handlers. + void showEvent(QShowEvent *pShowEvent); + void hideEvent(QHideEvent *pHideEvent); + void closeEvent(QCloseEvent *pCloseEvent); + + // Special port-type color method. + void updateViewColorsAction(QAction *action); + void updateViewColors(); + + // Item sect predicate. + qjackctlGraphSect *item_sect(qjackctlGraphItem *item) const; + +private: + + // The Qt-designer UI struct... + Ui::qjackctlGraphForm m_ui; + + // Instance variables. + qjackctlGraphConfig *m_config; + + // Instance variables. + qjackctlJackGraph *m_jack; + qjackctlAlsaGraph *m_alsa; + + int m_jack_changed; + int m_alsa_changed; + + int m_ins, m_mids, m_outs; + + QSlider *m_zoom_slider; + QSpinBox *m_zoom_spinbox; + + QActionGroup *m_sort_type; + QActionGroup *m_sort_order; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphConfig -- Canvas state memento. + +class qjackctlGraphConfig +{ +public: + + // Constructor. + qjackctlGraphConfig(QSettings *settings); + + // Accessors. + QSettings *settings() const; + + void setMenubar(bool menubar); + bool isMenubar() const; + + void setToolbar(bool toolbar); + bool isToolbar() const; + + void setStatusbar(bool statusbar); + bool isStatusbar() const; + + void setTextBesideIcons(bool texticons); + bool isTextBesideIcons() const; + + void setZoomRange(bool zoomrange); + bool isZoomRange() const; + + void setSortType(int sorttype); + int sortType() const; + + void setSortOrder(int sortorder); + int sortOrder() const; + + // Graph main-widget state methods. + bool restoreState(QMainWindow *widget); + bool saveState(QMainWindow *widget) const; + +private: + + // Instance variables. + QSettings *m_settings; + + bool m_menubar; + bool m_toolbar; + bool m_statusbar; + bool m_texticons; + bool m_zoomrange; + int m_sorttype; + int m_sortorder; +}; + + +#endif // __qjackctlGraphForm_h + + +// end of qjackctlGraphForm.h diff -Nru qjackctl-0.4.5/src/qjackctlGraphForm.ui qjackctl-0.6.0/src/qjackctlGraphForm.ui --- qjackctl-0.4.5/src/qjackctlGraphForm.ui 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraphForm.ui 2019-10-17 07:45:45.953673224 +0000 @@ -0,0 +1,722 @@ + + rncbc aka Rui Nuno Capela + JACK Audio Connection Kit - Qt GUI Interface. + + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + + qjackctlGraphForm + + + + 0 + 0 + 800 + 600 + + + + Graph + + + :/images/graph1.png + + + + + 0 + + + 0 + + + + + + + + + + + 0 + 0 + 800 + 20 + + + + + &Graph + + + + + + + + + &Edit + + + + + + + + + + &View + + + + &Zoom + + + :/images/graphZoomTool.png + + + + + + + + + + Co&lors + + + :/images/graphColors.png + + + + + + + + + + S&ort + + + + + + + + + + + + + + + + + + + + + + + + + &Help + + + + + + + + + + + + + Qt::AllToolBarAreas + + + Qt::Horizontal + + + Qt::ToolButtonTextBesideIcon + + + true + + + TopToolBarArea + + + false + + + + + + + + + + + + + + + + + :/images/graphConnect.png + + + &Connect + + + Connect + + + Connect + + + Connect selected ports + + + Ins + + + + + :/images/graphDisconnect.png + + + &Disconnect + + + Disconnect + + + Disconnect + + + Disconnect selected ports + + + Del + + + + + Cl&ose + + + Close + + + Close + + + Close this application window + + + + + + + + Select &All + + + Select All + + + Select All + + + Select All + + + Ctrl+A + + + + + Select &None + + + Select None + + + Select None + + + Select None + + + Ctrl+Shift+A + + + + + Select &Invert + + + Select Invert + + + Select Invert + + + Select Invert + + + Ctrl+I + + + + + :/images/graphRename.png + + + &Rename... + + + Rename item + + + Rename Item + + + Rename Item + + + + + + + + true + + + &Menubar + + + Menubar + + + Menubar + + + Show/hide the main program window menubar + + + Ctrl+M + + + + + true + + + &Toolbar + + + Toolbar + + + Toolbar + + + Show/hide main program window file toolbar + + + + + true + + + &Statusbar + + + Statusbar + + + Statusbar + + + Show/hide the main program window statusbar + + + + + + + + true + + + Text Beside &Icons + + + Text beside icons + + + Text beside icons + + + Show/hide text beside icons + + + + + :/images/graphCenter.png + + + &Center + + + Center + + + Center + + + Center view + + + + + + + + &Refresh + + + Refresh + + + Refresh + + + Refresh view + + + F5 + + + + + :/images/graphZoomIn.png + + + Zoom &In + + + Zoom In + + + Zoom In + + + Zoom In + + + Ctrl++ + + + + + :/images/graphZoomOut.png + + + Zoom &Out + + + Zoom Out + + + Zoom Out + + + Zoom Out + + + Ctrl+- + + + + + :/images/graphZoomFit.png + + + Zoom &Fit + + + Zoom Fit + + + Zoom Fit + + + Zoom Fit + + + Ctrl+0 + + + + + :/images/graphZoomReset.png + + + Zoom &Reset + + + Zoom Reset + + + Zoom Reset + + + Zoom Reset + + + Ctrl+1 + + + + + true + + + :/images/graphZoomRange.png + + + &Zoom Range + + + Zoom Range + + + Zoom Range + + + Zoom Range + + + + + + + + JACK &Audio... + + + JACK Audio color + + + JACK Audio color + + + JACK Audio color + + + + + + + + JACK &MIDI... + + + JACK MIDI + + + JACK MIDI color + + + JACK MIDI color + + + + + + + + &ALSA MIDI... + + + ALSA MIDI + + + ALSA MIDI color + + + ALSA MIDI color + + + + + + + + &Reset + + + Reset colors + + + Reset colors + + + Reset colors + + + + + + + + true + + + Port &Name + + + Port name + + + Sort by port name + + + + + + + + true + + + Port &Title + + + Port title + + + Sort by port title + + + + + + + + true + + + Port &Index + + + Port index + + + Sort by port index + + + + + + + + true + + + &Ascending + + + Ascending + + + Ascending sort order + + + + + + + + true + + + &Descending + + + Descending + + + Descending sort order + + + + + + + + &About... + + + About... + + + About + + + Show information about this application program + + + + + + + + About &Qt... + + + About Qt... + + + About Qt + + + Show information about the Qt toolkit + + + + + + + + + + qjackctlGraphCanvas + QGraphicsView +
qjackctlGraph.h
+
+
+ + + + +
diff -Nru qjackctl-0.4.5/src/qjackctlGraph.h qjackctl-0.6.0/src/qjackctlGraph.h --- qjackctl-0.4.5/src/qjackctlGraph.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlGraph.h 2019-10-17 07:45:45.952673224 +0000 @@ -0,0 +1,664 @@ +// qjackctlGraph.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlGraph_h +#define __qjackctlGraph_h + +#include + +#include + +#include +#include + +#include +#include + + +// Forward decls. +class qjackctlGraphCanvas; +class qjackctlGraphNode; +class qjackctlGraphPort; +class qjackctlGraphConnect; +class qjackctlGraphCommand; + +class qjackctlAliases; +class qjackctlAliasList; + +class QStyleOptionGraphicsItem; + +class QRubberBand; +class QUndoCommand; +class QUndoStack; +class QSettings; + +class QGraphicsProxyWidget; +class QLineEdit; + +class QMouseEvent; +class QWheelEvent; +class QKeyEvent; + + +//---------------------------------------------------------------------------- +// qjackctlGraphItem -- Base graphics item. + +class qjackctlGraphItem : public QGraphicsPathItem +{ +public: + + // Constructor. + qjackctlGraphItem(QGraphicsItem *parent = nullptr); + + // Basic color accessors. + void setForeground(const QColor& color); + const QColor& foreground() const; + + void setBackground(const QColor& color); + const QColor& background() const; + + // Marking methods. + void setMarked(bool marked); + bool isMarked() const; + + // Highlighting methods. + void setHighlight(bool hilite); + bool isHighlight() const; + + // Item modes. + enum Mode { None = 0, + Input = 1, Output = 2, + Duplex = Input | Output }; + + // Item hash/map key. + class ItemKey + { + public: + + // Constructors. + ItemKey (const QString& name, Mode mode, uint type = 0) + : m_name(name), m_mode(mode), m_type(type) {} + ItemKey (const ItemKey& key) + : m_name(key.name()), m_mode(key.mode()), m_type(key.type()) {} + + // Key accessors. + const QString& name() const + { return m_name; } + Mode mode() const + { return m_mode; } + uint type() const + { return m_type; } + + // Hash/map key comparators. + bool operator== (const ItemKey& key) const + { + return ItemKey::type() == key.type() + && ItemKey::mode() == key.mode() + && ItemKey::name() == key.name(); + } + + private: + + // Key fields. + QString m_name; + Mode m_mode; + uint m_type; + }; + + typedef QHash ItemKeys; + + // Item-type hash (static) + static uint itemType(const QByteArray& type_name); + + // Rectangular editor extents. + virtual QRectF editorRect() const; + +private: + + // Instance variables. + QColor m_foreground; + QColor m_background; + + bool m_marked; + bool m_hilite; +}; + + +// Item hash function. +inline uint qHash ( const qjackctlGraphItem::ItemKey& key ) +{ + return qHash(key.name()) ^ qHash(uint(key.mode())) ^ qHash(key.type()); +} + + +//---------------------------------------------------------------------------- +// qjackctlGraphPort -- Port graphics item. + +class qjackctlGraphPort : public qjackctlGraphItem +{ +public: + + // Constructor. + qjackctlGraphPort(qjackctlGraphNode *node, + const QString& name, Mode mode, uint type = 0); + + // Destructor. + ~qjackctlGraphPort(); + + // Graphics item type. + enum { Type = QGraphicsItem::UserType + 2 }; + + int type() const { return Type; } + + // Accessors. + qjackctlGraphNode *portNode() const; + + void setPortName(const QString& name); + const QString& portName() const; + + void setPortMode(Mode mode); + Mode portMode() const; + + bool isInput() const; + bool isOutput() const; + + void setPortType(uint type); + uint portType() const; + + void setPortTitle(const QString& title); + const QString& portTitle() const; + + void setPortIndex(int index); + int portIndex() const; + + QPointF portPos() const; + + // Connection-list methods. + void appendConnect(qjackctlGraphConnect *connect); + void removeConnect(qjackctlGraphConnect *connect); + void removeConnects(); + + qjackctlGraphConnect *findConnect(qjackctlGraphPort *port) const; + + // Selection propagation method... + void setSelectedEx(bool is_selected); + + // Highlighting propagation method... + void setHighlightEx(bool is_highlight); + + // Special port-type color business. + void updatePortTypeColors(qjackctlGraphCanvas *canvas); + + // Port hash/map key. + class PortKey : public ItemKey + { + public: + // Constructors. + PortKey(qjackctlGraphPort *port) + : ItemKey(port->portName(), port->portMode(), port->portType()) {} + }; + + // Port sorting type. + enum SortType { PortName = 0, PortTitle, PortIndex }; + + static void setSortType(SortType sort_type); + static SortType sortType(); + + // Port sorting order. + enum SortOrder { Ascending = 0, Descending }; + + static void setSortOrder(SortOrder sort_order); + static SortOrder sortOrder(); + + // Port sorting comparators. + struct Compare { + bool operator()(qjackctlGraphPort *port1, qjackctlGraphPort *port2) const + { return qjackctlGraphPort::lessThan(port1, port2); } + }; + + struct ComparePos { + bool operator()(qjackctlGraphPort *port1, qjackctlGraphPort *port2) const + { return (port1->scenePos().y() < port2->scenePos().y()); } + }; + + // Rectangular editor extents. + QRectF editorRect() const; + +protected: + + void paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget *widget); + + QVariant itemChange(GraphicsItemChange change, const QVariant& value); + + // Natural decimal sorting comparators. + static bool lessThan(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + static bool lessThan(const QString& s1, const QString& s2); + +private: + + // instance variables. + qjackctlGraphNode *m_node; + + QString m_name; + Mode m_mode; + uint m_type; + + QString m_title; + int m_index; + + QGraphicsTextItem *m_text; + + QList m_connects; + + int m_selectx; + int m_hilitex; + + static SortType g_sort_type; + static SortOrder g_sort_order; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphNode -- Node graphics item. + +class qjackctlGraphNode : public qjackctlGraphItem +{ +public: + + // Constructor. + qjackctlGraphNode(const QString& name, Mode mode, uint type = 0); + + // Destructor.. + ~qjackctlGraphNode(); + // Graphics item type. + enum { Type = QGraphicsItem::UserType + 1 }; + + int type() const { return Type; } + + // Accessors. + void setNodeName(const QString& name); + const QString& nodeName() const; + + void setNodeMode(Mode mode); + Mode nodeMode() const; + + void setNodeType(uint type); + uint nodeType() const; + + void setNodeIcon(const QIcon& icon); + const QIcon& nodeIcon() const; + + void setNodeTitle(const QString& title); + QString nodeTitle() const; + + // Port-list methods. + qjackctlGraphPort *addPort(const QString& name, Mode mode, int type = 0); + + qjackctlGraphPort *addInputPort(const QString& name, int type = 0); + qjackctlGraphPort *addOutputPort(const QString& name, int type = 0); + + void removePort(qjackctlGraphPort *port); + void removePorts(); + + // Port finder (by name, mode and type) + qjackctlGraphPort *findPort(const QString& name, Mode mode, uint type = 0); + + // Reset port markings, destroy if unmarked. + void resetMarkedPorts(); + + // Path/shape updater. + void updatePath(); + + // Node hash key. + class NodeKey : public ItemKey + { + public: + // Constructors. + NodeKey(qjackctlGraphNode *node) + : ItemKey(node->nodeName(), node->nodeMode(), node->nodeType()) {} + }; + + // Rectangular editor extents. + QRectF editorRect() const; + +protected: + + void paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget *widget); + + QVariant itemChange(GraphicsItemChange change, const QVariant& value); + +private: + + // Instance variables. + QString m_name; + Mode m_mode; + uint m_type; + + QIcon m_icon; + + QGraphicsPixmapItem *m_pixmap; + QGraphicsTextItem *m_text; + + qjackctlGraphPort::ItemKeys m_portkeys; + QList m_ports; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphConnect -- Connection-line graphics item. + +class qjackctlGraphConnect : public qjackctlGraphItem +{ +public: + + // Constructor. + qjackctlGraphConnect(); + + // Destructor.. + ~qjackctlGraphConnect(); + + // Graphics item type. + enum { Type = QGraphicsItem::UserType + 3 }; + + int type() const { return Type; } + + // Accessors. + void setPort1(qjackctlGraphPort *port); + qjackctlGraphPort *port1() const; + + void setPort2(qjackctlGraphPort *port); + qjackctlGraphPort *port2() const; + + // Path/shaper updaters. + void updatePathTo(const QPointF& pos); + void updatePath(); + + // Selection propagation method... + void setSelectedEx(qjackctlGraphPort *port, bool is_selected); + + // Highlighting propagation method... + void setHighlightEx(qjackctlGraphPort *port, bool is_highlight); + + // Special port-type color business. + void updatePortTypeColors(); + +protected: + + void paint(QPainter *painter, + const QStyleOptionGraphicsItem *option, QWidget *widget); + + QVariant itemChange(GraphicsItemChange change, const QVariant& value); + +private: + + // Instance variables. + qjackctlGraphPort *m_port1; + qjackctlGraphPort *m_port2; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphCanvas -- Canvas graphics scene/view. + +class qjackctlGraphCanvas : public QGraphicsView +{ + Q_OBJECT + +public: + + // Constructor. + qjackctlGraphCanvas(QWidget *parent = nullptr); + + // Destructor. + ~qjackctlGraphCanvas(); + + // Accessors. + QGraphicsScene *scene() const; + QUndoStack *commands() const; + + void setSettings(QSettings *settings); + QSettings *settings() const; + + // Canvas methods. + void addItem(qjackctlGraphItem *item); + void removeItem(qjackctlGraphItem *item); + + // Current item accessor. + qjackctlGraphItem *currentItem() const; + + // Connection predicates. + bool canConnect() const; + bool canDisconnect() const; + + // Edit predicates. + bool canRenameItem() const; + + // Zooming methods. + void setZoom(qreal zoom); + qreal zoom() const; + + void setZoomRange(bool zoomrange); + bool isZoomRange() const; + + // Clean-up all un-marked nodes... + void resetNodes(uint node_type); + void clearNodes(uint node_type); + + // Special node finder. + qjackctlGraphNode *findNode( + const QString& name, qjackctlGraphItem::Mode mode, uint type = 0) const; + + // Port (dis)connections notifiers. + void emitConnected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + void emitDisconnected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + + // Rename notifiers. + void emitRenamed(qjackctlGraphItem *item, const QString& name); + + // Graph canvas state methods. + bool restoreState(); + bool saveState() const; + + // Graph colors management. + void setPortTypeColor(uint port_type, const QColor& color); + const QColor& portTypeColor(uint port_type); + void updatePortTypeColors(uint port_type = 0); + void clearPortTypeColors(); + + // Clear all selection. + void clearSelection(); + + // Clear all state. + void clear(); + + // Client/port aliases accessors. + void setAliases(qjackctlAliases *aliases); + qjackctlAliases *aliases() const; + +signals: + + // Node factory notifications. + void added(qjackctlGraphNode *node); + void removed(qjackctlGraphNode *node); + + // Port (dis)connection notifications. + void connected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + void disconnected(qjackctlGraphPort *port1, qjackctlGraphPort *port2); + + // Generic change notification. + void changed(); + + // Rename notification. + void renamed(qjackctlGraphItem *item, const QString& name); + +public slots: + + // Dis/connect selected items. + void connectItems(); + void disconnectItems(); + + // Select actions. + void selectAll(); + void selectNone(); + void selectInvert(); + + // Edit actions. + void renameItem(); + + // Discrete zooming actions. + void zoomIn(); + void zoomOut(); + void zoomFit(); + void zoomReset(); + + // Update all nodes. + void updateNodes(); + +protected slots: + + // Rename item slots. + void textChanged(const QString&); + void editingFinished(); + +protected: + + // Item finder (internal). + qjackctlGraphItem *itemAt(const QPointF& pos) const; + + // Port (dis)connection commands. + void connectPorts( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool is_connect); + + // Mouse event handlers. + void mousePressEvent(QMouseEvent *event); + void mouseMoveEvent(QMouseEvent *event); + void mouseReleaseEvent(QMouseEvent *event); + void mouseDoubleClickEvent(QMouseEvent *event); + + void wheelEvent(QWheelEvent *event); + + // Keyboard event handler. + void keyPressEvent(QKeyEvent *event); + + // Graph node key helper. + QString nodeKey(qjackctlGraphNode *node) const; + + // Zoom in rectangle range. + void zoomFitRange(const QRectF& range_rect); + + // Graph node position state methods. + bool restoreNodePos(qjackctlGraphNode *node); + bool saveNodePos(qjackctlGraphNode *node) const; + + // Renaming editor position and size updater. + void updateEditorGeometry(); + +private: + + // Mouse pointer dragging states. + enum DragState { DragNone = 0, DragStart, DragMove, DragScroll }; + + // Instance variables. + QGraphicsScene *m_scene; + DragState m_state; + QPointF m_pos; + qjackctlGraphItem *m_item; + qjackctlGraphConnect *m_connect; + QRubberBand *m_rubberband; + qreal m_zoom; + bool m_zoomrange; + + qjackctlGraphNode::ItemKeys m_nodekeys; + QList m_nodes; + + QUndoStack *m_commands; + QSettings *m_settings; + + QList m_selected; + int m_selected_nodes; + + // Graph port colors. + QHash m_port_colors; + + // Item renaming stuff. + qjackctlGraphItem *m_edit_item; + QLineEdit *m_editor; + int m_edited; + + // Original node position (for move command). + QPointF m_pos1; + + // Client/port aliases database. + qjackctlAliases *m_aliases; +}; + + +//---------------------------------------------------------------------------- +// qjackctlGraphSect -- Generic graph driver + +class qjackctlGraphSect +{ +public: + + // Constructor. + qjackctlGraphSect(qjackctlGraphCanvas *canvas); + + // Destructor (virtual) + virtual ~qjackctlGraphSect() {} + + // Accessors. + qjackctlGraphCanvas *canvas() const; + + // Generic sect/graph methods. + void addItem(qjackctlGraphItem *item); + void removeItem(qjackctlGraphItem *item); + + // Clean-up all un-marked items... + void resetItems(uint node_type); + void clearItems(uint node_type); + + // Special node finder. + qjackctlGraphNode *findNode( + const QString& name, qjackctlGraphItem::Mode mode, int type = 0) const; + + // Client/port renaming method. + virtual void renameItem(qjackctlGraphItem *item, const QString& name); + +protected: + + // Client/port item aliases accessor. + virtual QList item_aliases( + qjackctlGraphItem *item) const = 0; + +private: + + // Instance variables. + qjackctlGraphCanvas *m_canvas; + + QList m_connects; +}; + + +#endif // __qjackctlGraph_h + +// end of qjackctlGraph.h diff -Nru qjackctl-0.4.5/src/qjackctl.h qjackctl-0.6.0/src/qjackctl.h --- qjackctl-0.4.5/src/qjackctl.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctl.h 2019-10-17 07:45:45.951673224 +0000 @@ -0,0 +1,130 @@ +// qjackctl.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctl_h +#define __qjackctl_h + +#include "qjackctlAbout.h" + +#include + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#if defined(Q_WS_X11) +#define CONFIG_X11 +#endif +#else +#if defined(QT_X11EXTRAS_LIB) +#define CONFIG_X11 +#endif +#endif + + +// Forward decls. +class QWidget; +class QTranslator; + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_XUNIQUE +#ifdef CONFIG_X11 +#include +typedef unsigned long Window; +typedef unsigned long Atom; +#endif // CONFIG_X11 +#endif // CONFIG_XUNIQUE +#else +#ifdef CONFIG_XUNIQUE +class QSharedMemory; +class QLocalServer; +#endif // CONFIG_XUNIQUE +#endif + + +//------------------------------------------------------------------------- +// Singleton application instance stuff (Qt/X11 only atm.) +// + +class qjackctlApplication : public QApplication +{ + Q_OBJECT + +public: + + // Constructor. + qjackctlApplication(int& argc, char **argv); + + // Destructor. + ~qjackctlApplication(); + + // Main application widget accessors. + void setMainWidget(QWidget *pWidget); + QWidget *mainWidget() const + { return m_pWidget; } + + // Check if another instance is running, + // and raise its proper main widget... + bool setup(const QString& sServerName); + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_XUNIQUE +#ifdef CONFIG_X11 + void x11PropertyNotify(Window w); + bool x11EventFilter(XEvent *pEv) +#endif // CONFIG_X11 +#endif // CONFIG_XUNIQUE +#else +#ifdef CONFIG_XUNIQUE +protected slots: + // Local server slots. + void newConnectionSlot(); + void readyReadSlot(); +#endif // CONFIG_XUNIQUE +#endif + +private: + + // Translation support. + QTranslator *m_pQtTranslator; + QTranslator *m_pMyTranslator; + + // Instance variables. + QWidget *m_pWidget; + +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) +#ifdef CONFIG_XUNIQUE +#ifdef CONFIG_X11 + Display *m_pDisplay; + Atom m_aUnique; + Window m_wOwner; +#endif // CONFIG_X11 +#endif // CONFIG_XUNIQUE +#else +#ifdef CONFIG_XUNIQUE + QString m_sUnique; + QSharedMemory *m_pMemory; + QLocalServer *m_pServer; +#endif // CONFIG_XUNIQUE +#endif +}; + + +#endif // __qjackctl_h + +// end of qjackctl.h diff -Nru qjackctl-0.4.5/src/qjackctlInterfaceComboBox.cpp qjackctl-0.6.0/src/qjackctlInterfaceComboBox.cpp --- qjackctl-0.4.5/src/qjackctlInterfaceComboBox.cpp 2017-04-27 14:44:14.554755474 +0000 +++ qjackctl-0.6.0/src/qjackctlInterfaceComboBox.cpp 2019-10-17 07:45:45.953673224 +0000 @@ -1,9 +1,9 @@ // qjackctlInterfaceComboBox.cpp // /**************************************************************************** - Copyright (C) 2013, Arnout Engelen. All rights reserved. - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. Copyright (C) 2015, Kjetil Matheussen. (portaudio_probe_thread) + Copyright (C) 2013, Arnout Engelen. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -174,7 +174,7 @@ if (i == 10) // wait 1/2 second before showing message box mbox.show(); - if (mbox.clickedButton() != NULL) { + if (mbox.clickedButton() != nullptr) { bTimedOut = false; break; } @@ -254,9 +254,9 @@ // FIXME: Only valid for ALSA, Sun and OSS devices, // for the time being... and also CoreAudio ones too. const QString& sDriver = m_pDriverComboBox->currentText(); - const bool bAlsa = (sDriver == "alsa"); - const bool bSun = (sDriver == "sun"); - const bool bOss = (sDriver == "oss"); + const bool bAlsa = (sDriver == "alsa"); + const bool bSun = (sDriver == "sun"); + const bool bOss = (sDriver == "oss"); #ifdef CONFIG_COREAUDIO const bool bCoreaudio = (sDriver == "coreaudio"); std::map coreaudioIdMap; @@ -457,7 +457,7 @@ ++iCards; QTreeView *pTreeView = static_cast (QComboBox::view()); -#if QT_VERSION < 0x050000 +#if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) pTreeView->header()->setResizeMode(QHeaderView::ResizeToContents); #else pTreeView->header()->resizeSections(QHeaderView::ResizeToContents); diff -Nru qjackctl-0.4.5/src/qjackctlInterfaceComboBox.h qjackctl-0.6.0/src/qjackctlInterfaceComboBox.h --- qjackctl-0.4.5/src/qjackctlInterfaceComboBox.h 2017-04-27 14:44:14.554755474 +0000 +++ qjackctl-0.6.0/src/qjackctlInterfaceComboBox.h 2019-10-17 07:45:45.953673224 +0000 @@ -1,9 +1,9 @@ // qjackctlInterfaceComboBox.h // /**************************************************************************** - Copyright (C) 2013, Arnout Engelen. All rights reserved. - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. Copyright (C) 2015, Kjetil Matheussen. (portaudio_probe_thread) + Copyright (C) 2013, Arnout Engelen. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlJackConnect.cpp qjackctl-0.6.0/src/qjackctlJackConnect.cpp --- qjackctl-0.4.5/src/qjackctlJackConnect.cpp 2017-04-27 14:44:14.554755474 +0000 +++ qjackctl-0.6.0/src/qjackctlJackConnect.cpp 2019-10-17 07:45:45.953673224 +0000 @@ -1,7 +1,7 @@ // qjackctlJackConnect.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -34,8 +34,8 @@ { QString sPrettyName; - char *pszValue = NULL; - char *pszType = NULL; + char *pszValue = nullptr; + char *pszType = nullptr; if (::jack_get_property(uuid, JACK_METADATA_PRETTY_NAME, &pszValue, &pszType) == 0) { @@ -53,10 +53,10 @@ static void setPrettyName ( jack_client_t *pJackClient, jack_uuid_t uuid, const QString& sPrettyName ) { - const char *pszValue = sPrettyName.toUtf8().constData(); + const QByteArray aPrettyName = sPrettyName.toUtf8(); ::jack_set_property(pJackClient, uuid, - JACK_METADATA_PRETTY_NAME, pszValue, NULL); + JACK_METADATA_PRETTY_NAME, aPrettyName.constData(), nullptr); } static void removePrettyName ( @@ -74,17 +74,14 @@ // Constructor. qjackctlJackPort::qjackctlJackPort ( - qjackctlJackClient *pClient, jack_port_t *pJackPort ) + qjackctlJackClient *pClient, unsigned long ulPortFlags ) : qjackctlPortItem(pClient) { - m_pJackPort = pJackPort; - qjackctlJackConnect *pJackConnect = static_cast ( ((pClient->clientList())->listView())->binding()); if (pJackConnect) { - const unsigned long ulPortFlags = jack_port_flags(m_pJackPort); if (ulPortFlags & JackPortIsInput) { if (ulPortFlags & JackPortIsTerminal) { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap( @@ -115,18 +112,11 @@ } -// Jack port handles accessors. -jack_port_t *qjackctlJackPort::jackPort (void) const -{ - return m_pJackPort; -} - - // Pretty/display name method (virtual override). void qjackctlJackPort::updatePortName ( bool bRename ) { #ifdef CONFIG_JACK_METADATA - jack_client_t *pJackClient = NULL; + jack_client_t *pJackClient = nullptr; qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pJackClient = pMainForm->jackClient(); @@ -134,24 +124,30 @@ bool bRenameEnabled = false; QString sPortNameEx = portNameAlias(&bRenameEnabled); const QString& sPortName = portName(); - jack_uuid_t port_uuid = ::jack_port_uuid(m_pJackPort); - const QString& sPrettyName = prettyName(port_uuid); - if (sPortNameEx != sPortName && sPortNameEx != sPrettyName) { - if (sPrettyName.isEmpty() || bRename) { - setPrettyName(pJackClient, port_uuid, sPortNameEx); - } else { - sPortNameEx = sPrettyName; - setPortNameAlias(sPortNameEx); + const QString& sClientPort = clientName() + ':' + sPortName; + const QByteArray aClientPort = sClientPort.toUtf8(); + const char *pszClientPort = aClientPort.constData(); + jack_port_t *pJackPort = jack_port_by_name(pJackClient, pszClientPort); + if (pJackPort) { + jack_uuid_t port_uuid = ::jack_port_uuid(pJackPort); + const QString& sPrettyName = prettyName(port_uuid); + if (sPortNameEx != sPortName && sPortNameEx != sPrettyName) { + if (sPrettyName.isEmpty() || bRename) { + setPrettyName(pJackClient, port_uuid, sPortNameEx); + } else { + sPortNameEx = sPrettyName; + setPortNameAlias(sPortNameEx); + } } + else + if (sPortNameEx == sPortName + && !sPrettyName.isEmpty() && bRename) { + removePrettyName(pJackClient, port_uuid); + } + setPortText(sPortNameEx, bRenameEnabled); + return; } - else - if (sPortNameEx == sPortName - && !sPrettyName.isEmpty() && bRename) { - removePrettyName(pJackClient, port_uuid); - } - setPortText(sPortNameEx, bRenameEnabled); } - else #endif qjackctlPortItem::updatePortName(bRename); } @@ -160,17 +156,30 @@ // Tooltip text builder (virtual override). QString qjackctlJackPort::tooltip (void) const { - jack_latency_range_t latency_range; - jack_port_get_latency_range(m_pJackPort, - client()->isReadable() ? JackCaptureLatency : JackPlaybackLatency, - &latency_range); - - QString sLatency = QString::number(latency_range.min); - if (latency_range.max > latency_range.min) - sLatency += '-' + QString::number(latency_range.max); + jack_client_t *pJackClient = nullptr; + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm) + pJackClient = pMainForm->jackClient(); + if (pJackClient) { + const QString& sPortName = portName(); + const QString& sClientPort = clientName() + ':' + sPortName; + const QByteArray aClientPort = sClientPort.toUtf8(); + const char *pszClientPort = aClientPort.constData(); + jack_port_t *pJackPort = jack_port_by_name(pJackClient, pszClientPort); + if (pJackPort) { + jack_latency_range_t latency_range; + jack_port_get_latency_range(pJackPort, + client()->isReadable() ? JackCaptureLatency : JackPlaybackLatency, + &latency_range); + QString sLatency = QString::number(latency_range.min); + if (latency_range.max > latency_range.min) + sLatency += '-' + QString::number(latency_range.max); + return QObject::tr("%1 (%2 frames)").arg(portName()).arg(sLatency); + } + } - return QObject::tr("%1 (%2 frames)").arg(portName()).arg(sLatency); + return portName(); } @@ -205,17 +214,17 @@ // Jack port lookup. -qjackctlJackPort *qjackctlJackClient::findJackPort ( jack_port_t *pJackPort ) +qjackctlJackPort *qjackctlJackClient::findJackPort ( const QString& sPortName ) { QListIterator iter(ports()); while (iter.hasNext()) { qjackctlJackPort *pPort = static_cast (iter.next()); - if (pPort && pPort->jackPort() == pJackPort) + if (pPort && pPort->portName() == sPortName) return pPort; } - return NULL; + return nullptr; } @@ -223,7 +232,7 @@ void qjackctlJackClient::updateClientName ( bool bRename ) { #ifdef CONFIG_JACK_METADATA - jack_client_t *pJackClient = NULL; + jack_client_t *pJackClient = nullptr; qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pJackClient = pMainForm->jackClient(); @@ -231,10 +240,9 @@ bool bRenameEnabled = false; QString sClientNameEx = clientNameAlias(&bRenameEnabled); const QString& sClientName = clientName(); - const char *pszClientName - = sClientName.toUtf8().constData(); + const QByteArray aClientName = sClientName.toUtf8(); const char *pszClientUuid - = ::jack_get_uuid_for_client_name(pJackClient, pszClientName); + = ::jack_get_uuid_for_client_name(pJackClient, aClientName.constData()); if (pszClientUuid) { jack_uuid_t client_uuid = 0; ::jack_uuid_parse(pszClientUuid, &client_uuid); @@ -280,20 +288,30 @@ // Jack port lookup. -qjackctlJackPort *qjackctlJackClientList::findJackClientPort ( jack_port_t *pJackPort ) +qjackctlJackPort *qjackctlJackClientList::findJackClientPort ( + const QString& sClientPort ) { + const int iColon = sClientPort.indexOf(':'); + if (iColon < 0) + return nullptr; + + const QString& sClientName + = sClientPort.left(iColon); + const QString& sPortName + = sClientPort.right(sClientPort.length() - iColon - 1); + QListIterator iter(clients()); while (iter.hasNext()) { qjackctlJackClient *pClient = static_cast (iter.next()); - if (pClient) { - qjackctlJackPort *pPort = pClient->findJackPort(pJackPort); + if (pClient && pClient->clientName() == sClientName) { + qjackctlJackPort *pPort = pClient->findJackPort(sPortName); if (pPort) return pPort; } } - return NULL; + return nullptr; } @@ -301,16 +319,16 @@ int qjackctlJackClientList::updateClientPorts (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return 0; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return 0; qjackctlJackConnect *pJackConnect = static_cast (listView()->binding()); - if (pJackConnect == NULL) + if (pJackConnect == nullptr) return 0; const char *pszJackType = JACK_DEFAULT_AUDIO_TYPE; @@ -333,11 +351,10 @@ const char **ppszClientPorts = jack_get_ports(pJackClient, 0, pszJackType, isReadable() ? JackPortIsOutput : JackPortIsInput); if (ppszClientPorts) { - int iClientPort = 0; - while (ppszClientPorts[iClientPort]) { + for (int iClientPort = 0; ppszClientPorts[iClientPort]; ++iClientPort) { QString sClientPort = QString::fromUtf8(ppszClientPorts[iClientPort]); - qjackctlJackClient *pClient = 0; - qjackctlJackPort *pPort = 0; + qjackctlJackClient *pClient = nullptr; + qjackctlJackPort *pPort = nullptr; jack_port_t *pJackPort = jack_port_by_name(pJackClient, ppszClientPorts[iClientPort]); #ifdef CONFIG_JACK_PORT_ALIASES @@ -345,10 +362,10 @@ jack_port_get_aliases(pJackPort, aliases) >= g_iJackClientPortAlias) sClientPort = QString::fromUtf8(aliases[g_iJackClientPortAlias - 1]); #endif - int iColon = sClientPort.indexOf(':'); + const int iColon = sClientPort.indexOf(':'); if (pJackPort && iColon >= 0) { QString sClientName = sClientPort.left(iColon); - QString sPortName = sClientPort.right(sClientPort.length() - iColon - 1); + QString sPortName = sClientPort.right(sClientPort.length() - iColon - 1); pClient = static_cast (findClient(sClientName)); if (pClient) pPort = static_cast (pClient->findPort(sPortName)); @@ -358,14 +375,13 @@ iDirtyCount++; } if (pClient && pPort == 0) { - pPort = new qjackctlJackPort(pClient, pJackPort); + pPort = new qjackctlJackPort(pClient, jack_port_flags(pJackPort)); pPort->setPortName(sPortName); iDirtyCount++; } if (pPort) pPort->markClientPort(1); } - iClientPort++; } ::free(ppszClientPorts); } @@ -485,7 +501,7 @@ for (int i = 0; i < QJACKCTL_JACK_PIXMAPS; i++) { if (m_apPixmaps[i]) delete m_apPixmaps[i]; - m_apPixmaps[i] = NULL; + m_apPixmaps[i] = nullptr; } } @@ -501,11 +517,11 @@ bool qjackctlJackConnect::connectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return false; qjackctlJackPort *pOJack = static_cast (pOPort); @@ -521,11 +537,11 @@ bool qjackctlJackConnect::disconnectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return false; qjackctlJackPort *pOJack = static_cast (pOPort); @@ -541,16 +557,16 @@ void qjackctlJackConnect::updateConnections (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return; qjackctlJackClientList *pIClientList = static_cast (IClientList()); - if (pIClientList == NULL) + if (pIClientList == nullptr) return; // For each output client item... @@ -568,26 +584,29 @@ qjackctlJackPort *pOJack = static_cast (pOPort); // Get port connections... - const char **ppszClientPorts - = jack_port_get_all_connections( - pJackClient, pOJack->jackPort()); - if (ppszClientPorts) { - // Now, for each input client port... - int iClientPort = 0; - while (ppszClientPorts[iClientPort]) { - jack_port_t *pJackPort = jack_port_by_name( - pJackClient, ppszClientPorts[iClientPort]); - if (pJackPort) { + const QString& sClientPort + = pOJack->clientName() + ':' + pOJack->portName(); + const QByteArray aClientPort = sClientPort.toUtf8(); + const char *pszClientPort = aClientPort.constData(); + jack_port_t *pJackPort + = jack_port_by_name(pJackClient, pszClientPort); + if (pJackPort) { + const char **ppszClientPorts + = jack_port_get_all_connections(pJackClient, pJackPort); + if (ppszClientPorts) { + // Now, for each input client port... + for (int iClientPort = 0; + ppszClientPorts[iClientPort]; ++iClientPort) { qjackctlPortItem *pIPort - = pIClientList->findJackClientPort(pJackPort); + = pIClientList->findJackClientPort( + ppszClientPorts[iClientPort]); if (pIPort) { pOPort->addConnect(pIPort); pIPort->addConnect(pOPort); } } - iClientPort++; + ::free(ppszClientPorts); } - ::free(ppszClientPorts); } } } diff -Nru qjackctl-0.4.5/src/qjackctlJackConnect.h qjackctl-0.6.0/src/qjackctlJackConnect.h --- qjackctl-0.4.5/src/qjackctlJackConnect.h 2017-04-27 14:44:14.554755474 +0000 +++ qjackctl-0.6.0/src/qjackctlJackConnect.h 2019-10-17 07:45:45.953673224 +0000 @@ -1,7 +1,7 @@ // qjackctlJackConnect.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -57,23 +57,15 @@ public: // Constructor. - qjackctlJackPort(qjackctlJackClient *pClient, jack_port_t *pJackPort); + qjackctlJackPort(qjackctlJackClient *pClient, unsigned long ulPortFlags); // Default destructor. ~qjackctlJackPort(); - // Jack handles accessors. - jack_port_t *jackPort() const; - // Pretty/display name method (virtual override). void updatePortName(bool bRename = false); // Tooltip text builder (virtual override). QString tooltip() const; - -private: - - // Instance variables. - jack_port_t *m_pJackPort; }; @@ -88,7 +80,7 @@ ~qjackctlJackClient(); // Jack port lookup. - qjackctlJackPort *findJackPort(jack_port_t *pJackPort); + qjackctlJackPort *findJackPort(const QString& sPortName); // Pretty/display name method (virtual override). void updateClientName(bool bRename = false); @@ -106,7 +98,7 @@ ~qjackctlJackClientList(); // Jack port lookup. - qjackctlJackPort *findJackClientPort(jack_port_t *pJackPort); + qjackctlJackPort *findJackClientPort(const QString& sClientPort); // Client:port refreshner (return newest item count). int updateClientPorts(); diff -Nru qjackctl-0.4.5/src/qjackctlJackGraph.cpp qjackctl-0.6.0/src/qjackctlJackGraph.cpp --- qjackctl-0.4.5/src/qjackctlJackGraph.cpp 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlJackGraph.cpp 2019-10-17 07:45:45.953673224 +0000 @@ -0,0 +1,562 @@ +// qjackctlJackGraph.cpp +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#include "qjackctlJackGraph.h" + +#include "qjackctlMainForm.h" + +#include + + +//---------------------------------------------------------------------------- +// qjackctlJackGraph -- JACK graph driver + +QMutex qjackctlJackGraph::g_mutex; + + +#ifdef CONFIG_JACK_METADATA + +// JACK client/port metad-ata property helpers. +// +#include +#include + +static +QString qjackctlJackGraph_prettyName ( + jack_uuid_t uuid, const QString& name ) +{ + QString pretty_name = name; + + char *value = nullptr; + char *type = nullptr; + + if (::jack_get_property(uuid, + JACK_METADATA_PRETTY_NAME, &value, &type) == 0) { + if (value) { + pretty_name = QString::fromUtf8(value); + ::jack_free(value); + } + if (type) + ::jack_free(type); + } + + return pretty_name; +} + +static +void qjackctlJackGraph_setPrettyName ( + jack_client_t *client, jack_uuid_t uuid, const QString& pretty_name ) +{ + const QByteArray value = pretty_name.toUtf8(); + + ::jack_set_property(client, uuid, + JACK_METADATA_PRETTY_NAME, value.constData(), nullptr); +} + +static +void qjackctlJackGraph_removePrettyName ( + jack_client_t *client, jack_uuid_t uuid ) +{ + ::jack_remove_property(client, uuid, JACK_METADATA_PRETTY_NAME); +} + + +#ifndef JACKEY_ORDER +#define JACKEY_ORDER "http://jackaudio.org/metadata/order" +#endif + +static +int qjackctlJackGraph_portIndex ( jack_uuid_t uuid, int index ) +{ + int port_index = index; + + char *value = nullptr; + char *type = nullptr; + + if (::jack_get_property(uuid, + JACKEY_ORDER, &value, &type) == 0) { + if (value) { + port_index = QString::fromUtf8(value).toInt(); + ::jack_free(value); + } + if (type) + ::jack_free(type); + } + + return port_index; +} + +#endif // CONFIG_JACK_METADATA + + +// Constructor. +qjackctlJackGraph::qjackctlJackGraph ( qjackctlGraphCanvas *canvas ) + : qjackctlGraphSect(canvas) +{ + resetPortTypeColors(); +} + + +// JACK port (dis)connection. +void qjackctlJackGraph::connectPorts ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool connect ) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm == nullptr) + return; + + jack_client_t *client = pMainForm->jackClient(); + if (client == nullptr) + return; + + if (port1 == nullptr || port2 == nullptr) + return; + + const qjackctlGraphNode *node1 = port1->portNode(); + const qjackctlGraphNode *node2 = port2->portNode(); + + if (node1 == nullptr || node2 == nullptr) + return; + + QMutexLocker locker(&g_mutex); + + const QByteArray client_port1 + = QString(node1->nodeName() + ':' + port1->portName()).toUtf8(); + const QByteArray client_port2 + = QString(node2->nodeName() + ':' + port2->portName()).toUtf8(); + + const char *client_port_name1 = client_port1.constData(); + const char *client_port_name2 = client_port2.constData(); + +#ifdef CONFIG_DEBUG + qDebug("qjackctlJackGraph::connectPorts(\"%s\", \"%s\", %d)", + client_port_name1, client_port_name2, connect); +#endif + + if (connect) { + ::jack_connect(client, client_port_name1, client_port_name2); + } else { + ::jack_disconnect(client, client_port_name1, client_port_name2); + } +} + + +// JACK node type inquirer. (static) +bool qjackctlJackGraph::isNodeType ( uint node_type ) +{ + return (node_type == qjackctlJackGraph::nodeType()); +} + + +// JACK node type. +uint qjackctlJackGraph::nodeType (void) +{ + static + const uint JackNodeType + = qjackctlGraphItem::itemType("JACK_NODE_TYPE"); + + return JackNodeType; +} + + +// JACK port type(s) inquirer. (static) +bool qjackctlJackGraph::isPortType ( uint port_type ) +{ + return (port_type == audioPortType() || port_type == midiPortType()); +} + + +uint qjackctlJackGraph::audioPortType (void) +{ + static + const uint JackAudioPortType + = qjackctlGraphItem::itemType(JACK_DEFAULT_AUDIO_TYPE); + + return JackAudioPortType; +} + + +uint qjackctlJackGraph::midiPortType (void) +{ + static + const uint JackMidiPortType + = qjackctlGraphItem::itemType(JACK_DEFAULT_MIDI_TYPE); + + return JackMidiPortType; +} + + +// JACK client:port finder and creator if not existing. +bool qjackctlJackGraph::findClientPort ( jack_client_t *client, + const char *client_port, qjackctlGraphItem::Mode port_mode, + qjackctlGraphNode **node, qjackctlGraphPort **port, bool add_new ) +{ + jack_port_t *jack_port = ::jack_port_by_name(client, client_port); + if (jack_port == nullptr) + return false; + + const QString& client_port_name + = QString::fromUtf8(client_port); + const int colon = client_port_name.indexOf(':'); + if (colon < 0) + return false; + + const QString& client_name + = client_port_name.left(colon); + const QString& port_name + = client_port_name.right(client_port_name.length() - colon - 1); + + const uint node_type + = qjackctlJackGraph::nodeType(); + const char *port_type_name + = ::jack_port_type(jack_port); + const uint port_type + = qjackctlGraphItem::itemType(port_type_name); + + qjackctlGraphItem::Mode node_mode = port_mode; + + *node = qjackctlGraphSect::findNode(client_name, node_mode, node_type); + *port = nullptr; + + if (*node == nullptr) { + const unsigned long port_flags = ::jack_port_flags(jack_port); + const unsigned long port_flags_mask + = (JackPortIsPhysical | JackPortIsTerminal); + if ((port_flags & port_flags_mask) != port_flags_mask) { + node_mode = qjackctlGraphItem::Duplex; + *node = qjackctlGraphSect::findNode(client_name, node_mode, node_type); + } + } + + if (*node) + *port = (*node)->findPort(port_name, port_mode, port_type); + + if (add_new && *node == nullptr) { + *node = new qjackctlGraphNode(client_name, node_mode, node_type); + (*node)->setNodeIcon(QIcon(":/images/graphJack.png")); + qjackctlGraphSect::addItem(*node); + } + + if (add_new && *port == nullptr && *node) { + *port = (*node)->addPort(port_name, port_mode, port_type); + (*port)->updatePortTypeColors(canvas()); + } + + if (add_new && *node) { + int nchanged = 0; + QString node_title = (*node)->nodeTitle(); + foreach (qjackctlAliasList *node_aliases, item_aliases(*node)) + node_title = node_aliases->clientAlias(client_name); + #ifdef CONFIG_JACK_METADATA + const char *client_uuid_name + = ::jack_get_uuid_for_client_name(client, + client_name.toUtf8().constData()); + if (client_uuid_name) { + jack_uuid_t client_uuid = 0; + ::jack_uuid_parse(client_uuid_name, &client_uuid); + const QString& pretty_name + = qjackctlJackGraph_prettyName(client_uuid, client_name); + if (!pretty_name.isEmpty()) + node_title = pretty_name; + ::jack_free((void *) client_uuid_name); + } + #endif // CONFIG_JACK_METADATA + if ((*node)->nodeTitle() != node_title) { + (*node)->setNodeTitle(node_title); + ++nchanged; + } + if (*port) { + QString port_title = (*port)->portTitle(); + foreach (qjackctlAliasList *port_aliases, item_aliases(*port)) + port_title = port_aliases->portAlias(client_name, port_name); + #ifdef CONFIG_JACK_METADATA + const jack_uuid_t port_uuid + = ::jack_port_uuid(jack_port); + const QString& pretty_name + = qjackctlJackGraph_prettyName(port_uuid, port_name); + if (!pretty_name.isEmpty()) + port_title = pretty_name; + const int port_index + = qjackctlJackGraph_portIndex(port_uuid, 0); + if ((*port)->portIndex() != port_index) { + (*port)->setPortIndex(port_index); + ++nchanged; + } + #endif // CONFIG_JACK_METADATA + if ((*port)->portTitle() != port_title) { + (*port)->setPortTitle(port_title); + ++nchanged; + } + } + if (nchanged > 0) + (*node)->updatePath(); + } + + return (*node && *port); +} + + +// JACK graph updaters. +void qjackctlJackGraph::updateItems (void) +{ + QMutexLocker locker(&g_mutex); + + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm == nullptr) + return; + + jack_client_t *client = pMainForm->jackClient(); + if (client == nullptr) + return; + +#ifdef CONFIG_DEBUG + qDebug("qjackctlJackGraph::updateItems()"); +#endif + + // 1. Client/ports inventory... + // + const char **client_ports1 + = ::jack_get_ports(client, nullptr, nullptr, 0); + if (client_ports1 == nullptr) + return; + + for (int i = 0; client_ports1[i]; ++i) { + const char *client_port1 = client_ports1[i]; + jack_port_t *jack_port1 = ::jack_port_by_name(client, client_port1); + if (jack_port1 == nullptr) + continue; + const unsigned long port_flags1 + = ::jack_port_flags(jack_port1); + qjackctlGraphItem::Mode port_mode1 = qjackctlGraphItem::None; + if (port_flags1 & JackPortIsInput) + port_mode1 = qjackctlGraphItem::Input; + else + if (port_flags1 & JackPortIsOutput) + port_mode1 = qjackctlGraphItem::Output; + qjackctlGraphNode *node1 = nullptr; + qjackctlGraphPort *port1 = nullptr; + if (findClientPort(client, client_port1, + port_mode1, &node1, &port1, true)) { + node1->setMarked(true); + port1->setMarked(true); + } + } + + // 2. Connections inventory... + // + for (int i = 0; client_ports1[i]; ++i) { + const char *client_port1 = client_ports1[i]; + jack_port_t *jack_port1 = ::jack_port_by_name(client, client_port1); + if (jack_port1 == nullptr) + continue; + const unsigned long port_flags1 + = ::jack_port_flags(jack_port1); + if (port_flags1 & JackPortIsOutput) { + const qjackctlGraphItem::Mode port_mode1 + = qjackctlGraphItem::Output; + const char **client_ports2 + = ::jack_port_get_all_connections(client, jack_port1); + if (client_ports2 == nullptr) + continue; + qjackctlGraphNode *node1 = nullptr; + qjackctlGraphPort *port1 = nullptr; + if (findClientPort(client, client_port1, + port_mode1, &node1, &port1, false)) { + for (int j = 0; client_ports2[j]; ++j) { + const char *client_port2 = client_ports2[j]; + const qjackctlGraphItem::Mode port_mode2 + = qjackctlGraphItem::Input; + qjackctlGraphNode *node2 = nullptr; + qjackctlGraphPort *port2 = nullptr; + if (findClientPort(client, client_port2, + port_mode2, &node2, &port2, false)) { + qjackctlGraphConnect *connect = port1->findConnect(port2); + if (connect == nullptr) { + connect = new qjackctlGraphConnect(); + connect->setPort1(port1); + connect->setPort2(port2); + connect->updatePortTypeColors(); + connect->updatePath(); + qjackctlGraphSect::addItem(connect); + } + if (connect) + connect->setMarked(true); + } + } + } + ::free(client_ports2); + } + } + + ::free(client_ports1); + + // 3. Clean-up all un-marked items... + // + qjackctlGraphSect::resetItems(qjackctlJackGraph::nodeType()); +} + + +void qjackctlJackGraph::clearItems (void) +{ + QMutexLocker locker(&g_mutex); + +#ifdef CONFIG_DEBUG + qDebug("qjackctlJackGraph::clearItems()"); +#endif + + qjackctlGraphSect::clearItems(qjackctlJackGraph::nodeType()); +} + + +// Special port-type colors defaults (virtual). +void qjackctlJackGraph::resetPortTypeColors (void) +{ + qjackctlGraphCanvas *canvas = qjackctlGraphSect::canvas(); + if (canvas) { + canvas->setPortTypeColor( + qjackctlJackGraph::audioPortType(), + QColor(Qt::darkGreen).darker(120)); + canvas->setPortTypeColor( + qjackctlJackGraph::midiPortType(), + QColor(Qt::darkRed).darker(120)); + } +} + + +// Client/port item aliases accessor. +QList qjackctlJackGraph::item_aliases ( + qjackctlGraphItem *item ) const +{ + QList alist; + + qjackctlAliases *aliases = nullptr; + qjackctlGraphCanvas *canvas = qjackctlGraphSect::canvas(); + if (canvas) + aliases = canvas->aliases(); + if (aliases == nullptr) + return alist; // empty! + + uint item_type = 0; + qjackctlGraphItem::Mode item_mode = qjackctlGraphItem::None; + + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + item_type = node->nodeType(); + item_mode = node->nodeMode(); + } + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) { + item_type = port->portType(); + item_mode = port->portMode(); + } + } + + if (!item_type || !item_mode) + return alist; // empty again! + + if (item_type == qjackctlJackGraph::audioPortType()) { + // JACK audio type... + if (item_mode & qjackctlGraphItem::Input) + alist.append(&(aliases->audioInputs)); + if (item_mode & qjackctlGraphItem::Output) + alist.append(&(aliases->audioOutputs)); + } + else + if (item_type == qjackctlJackGraph::midiPortType()) { + // JACK MIDI type... + if (item_mode & qjackctlGraphItem::Input) + alist.append(&(aliases->midiInputs)); + if (item_mode & qjackctlGraphItem::Output) + alist.append(&(aliases->midiOutputs)); + } + + return alist; // hopefully non empty! +} + + +// Client/port renaming method (virtual override). +void qjackctlJackGraph::renameItem ( + qjackctlGraphItem *item, const QString& name ) +{ + qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); + if (pMainForm == nullptr) + return; + + jack_client_t *client = pMainForm->jackClient(); + if (client == nullptr) + return; + +#ifdef CONFIG_JACK_METADATA + qjackctlGraphNode *node = nullptr; + if (item->type() == qjackctlGraphNode::Type) { + qjackctlGraphNode *node = static_cast (item); + if (node) { + const QString& node_name + = node->nodeName(); + const QByteArray client_name + = node_name.toUtf8(); + const char *client_uuid_name + = ::jack_get_uuid_for_client_name(client, client_name.constData()); + if (client_uuid_name) { + jack_uuid_t client_uuid = 0; + ::jack_uuid_parse(client_uuid_name, &client_uuid); + if (name.isEmpty()) + qjackctlJackGraph_removePrettyName(client, client_uuid); + else + qjackctlJackGraph_setPrettyName(client, client_uuid, name); + ::jack_free((void *) client_uuid_name); + } + } + } + else + if (item->type() == qjackctlGraphPort::Type) { + qjackctlGraphPort *port = static_cast (item); + if (port) + node = port->portNode(); + if (port && node) { + const QString& port_name + = port->portName(); + const QString& client_port + = node->nodeName() + ':' + port_name; + const QByteArray client_port_name + = client_port.toUtf8(); + jack_port_t *jack_port + = ::jack_port_by_name(client, client_port_name.constData()); + if (jack_port) { + jack_uuid_t port_uuid = ::jack_port_uuid(jack_port); + if (name.isEmpty()) + qjackctlJackGraph_removePrettyName(client, port_uuid); + else + qjackctlJackGraph_setPrettyName(client, port_uuid, name); + } + } + } +#endif // CONFIG_JACK_METADATA + + qjackctlGraphSect::renameItem(item, name); +} + + +// end of qjackctlJackGraph.cpp diff -Nru qjackctl-0.4.5/src/qjackctlJackGraph.h qjackctl-0.6.0/src/qjackctlJackGraph.h --- qjackctl-0.4.5/src/qjackctlJackGraph.h 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/qjackctlJackGraph.h 2019-10-17 07:45:45.953673224 +0000 @@ -0,0 +1,87 @@ +// qjackctlJackGraph.h +// +/**************************************************************************** + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*****************************************************************************/ + +#ifndef __qjackctlJackGraph_h +#define __qjackctlJackGraph_h + +#include "qjackctlAbout.h" +#include "qjackctlGraph.h" + +#include + +#include + + +//---------------------------------------------------------------------------- +// qjackctlJackGraph -- JACK graph driver + +class qjackctlJackGraph : public qjackctlGraphSect +{ +public: + + // Constructor. + qjackctlJackGraph(qjackctlGraphCanvas *canvas); + + // JACK port (dis)connection. + void connectPorts( + qjackctlGraphPort *port1, qjackctlGraphPort *port2, bool connect); + + // JACK graph updaters. + void updateItems(); + void clearItems(); + + // Special port-type colors defaults (virtual). + void resetPortTypeColors(); + + // JACK node type inquirer. + static bool isNodeType(uint node_type); + // JACK node type. + static uint nodeType(); + + // JACK port type(s) inquirer. + static bool isPortType(uint port_type); + // JACK port types. + static uint audioPortType(); + static uint midiPortType(); + + // Client/port renaming method (virtual override). + void renameItem(qjackctlGraphItem *item, const QString& name); + +protected: + + // JACK client:port finder and creator if not existing. + bool findClientPort(jack_client_t *client, + const char *client_port, qjackctlGraphItem::Mode port_mode, + qjackctlGraphNode **node, qjackctlGraphPort **port, bool add_new); + + // Client/port item aliases accessor. + QList item_aliases(qjackctlGraphItem *item) const; + +private: + + // Callback sanity mutex. + static QMutex g_mutex; +}; + + +#endif // __qjackctlJackGraph_h + +// end of qjackctlJackGraph.h diff -Nru qjackctl-0.4.5/src/qjackctlMainForm.cpp qjackctl-0.6.0/src/qjackctlMainForm.cpp --- qjackctl-0.4.5/src/qjackctlMainForm.cpp 2017-04-27 14:44:14.555755974 +0000 +++ qjackctl-0.6.0/src/qjackctlMainForm.cpp 2019-10-17 07:45:45.954673224 +0000 @@ -1,7 +1,7 @@ // qjackctlMainForm.cpp // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,12 +28,19 @@ #include "qjackctlPatchbayFile.h" #include "qjackctlMessagesStatusForm.h" + #include "qjackctlSessionForm.h" #include "qjackctlConnectionsForm.h" #include "qjackctlPatchbayForm.h" +#include "qjackctlGraphForm.h" #include "qjackctlSetupForm.h" #include "qjackctlAboutForm.h" +#include "qjackctlJackGraph.h" +#ifdef CONFIG_ALSA_SEQ +#include "qjackctlAlsaGraph.h" +#endif + #ifdef CONFIG_SYSTEM_TRAY #include "qjackctlSystemTray.h" #endif @@ -53,12 +60,8 @@ #include #include -#if defined(WIN32) -#include -#endif - -#if QT_VERSION < 0x040500 +#if QT_VERSION < QT_VERSION_CHECK(4, 5, 0) namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); } @@ -93,7 +96,7 @@ #define QJACKCTL_STOPPING 5 #define QJACKCTL_STOPPED 6 -#if defined(WIN32) +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) #include #undef HAVE_POLL_H #undef HAVE_SIGNAL_H @@ -111,38 +114,92 @@ #include #endif -#ifdef HAVE_SIGNAL_H -#include -#endif - // Custom event types. #define QJACKCTL_PORT_EVENT QEvent::Type(QEvent::User + 1) #define QJACKCTL_XRUN_EVENT QEvent::Type(QEvent::User + 2) #define QJACKCTL_BUFF_EVENT QEvent::Type(QEvent::User + 3) -#define QJACKCTL_SHUT_EVENT QEvent::Type(QEvent::User + 4) -#define QJACKCTL_EXIT_EVENT QEvent::Type(QEvent::User + 5) +#define QJACKCTL_FREE_EVENT QEvent::Type(QEvent::User + 4) +#define QJACKCTL_SHUT_EVENT QEvent::Type(QEvent::User + 5) +#define QJACKCTL_EXIT_EVENT QEvent::Type(QEvent::User + 6) #ifdef CONFIG_DBUS -#define QJACKCTL_LINE_EVENT QEvent::Type(QEvent::User + 6) +#define QJACKCTL_LINE_EVENT QEvent::Type(QEvent::User + 7) #endif #ifdef CONFIG_JACK_METADATA -#define QJACKCTL_PROP_EVENT QEvent::Type(QEvent::User + 7) +#define QJACKCTL_PROP_EVENT QEvent::Type(QEvent::User + 8) #endif +// Time dashes format helper.^ +static const char *c_szTimeDashes = "--:--:--.---"; + + +//------------------------------------------------------------------------- +// UNIX Signal handling support stuff. + +#ifdef HAVE_SIGNAL_H + +#include +#include + +#include + +// File descriptor for SIGTERM notifier. +static int g_fdSigterm[2] = { QJACKCTL_FDNIL, QJACKCTL_FDNIL }; + +// Unix SIGTERM signal handler. +static void qjackctl_sigterm_handler ( int /* signo */ ) +{ + char c = 1; + + (::write(g_fdSigterm[0], &c, sizeof(c)) > 0); +} + +#endif // HAVE_SIGNAL_H + + //---------------------------------------------------------------------------- // qjackctl -- Static callback posters. // To have clue about current buffer size (in frames). -static jack_nframes_t g_nframes = 0; +static jack_nframes_t g_buffsize = 0; +// Current freewheel running state. +static int g_freewheel = 0; + +// Current server error state. static QProcess::ProcessError g_error = QProcess::UnknownError; + +// Jack client registration callback funtion, called +// whenever a jack client is registered or unregistered. +static void qjackctl_client_registration_callback ( + const char *, int, void * ) +{ + QApplication::postEvent( + qjackctlMainForm::getInstance(), + new QEvent(QJACKCTL_PORT_EVENT)); +} + + + // Jack port registration callback funtion, called // whenever a jack port is registered or unregistered. -static void qjackctl_port_registration_callback ( jack_port_id_t, int, void * ) +static void qjackctl_port_registration_callback ( + jack_port_id_t, int, void * ) +{ + QApplication::postEvent( + qjackctlMainForm::getInstance(), + new QEvent(QJACKCTL_PORT_EVENT)); +} + + +// Jack port (dis)connection callback funtion, called +// whenever a jack port is connected or disconnected. +static void qjackctl_port_connect_callback ( + jack_port_id_t, jack_port_id_t, int, void * ) { QApplication::postEvent( qjackctlMainForm::getInstance(), @@ -162,6 +219,21 @@ } +#ifdef CONFIG_JACK_PORT_RENAME + +// Jack port rename callback funtion, called +// whenever a jack port is renamed. +static void qjackctl_port_rename_callback ( + jack_port_id_t, const char *, const char *, void * ) +{ + QApplication::postEvent( + qjackctlMainForm::getInstance(), + new QEvent(QJACKCTL_PORT_EVENT)); +} + +#endif + + // Jack XRUN callback function, called // whenever there is a xrun. static int qjackctl_xrun_callback ( void * ) @@ -173,12 +245,13 @@ return 0; } + // Jack buffer size function, called // whenever the server changes buffer size. static int qjackctl_buffer_size_callback ( jack_nframes_t nframes, void * ) { // Update our global static variable. - g_nframes = nframes; + g_buffsize = nframes; QApplication::postEvent( qjackctlMainForm::getInstance(), @@ -188,6 +261,19 @@ } +// Jack freewheel callback function, called +// whenever the server enters/exits freewheel mode. +static void qjackctl_freewheel_callback ( int starting, void * ) +{ + // Update our global static variable. + g_freewheel = starting; + + QApplication::postEvent( + qjackctlMainForm::getInstance(), + new QEvent(QJACKCTL_FREE_EVENT)); +} + + // Jack shutdown function, called // whenever the server terminates this client. static void qjackctl_on_shutdown ( void * ) @@ -235,7 +321,7 @@ // Constructor. LineEvent(QEvent::Type eType, const QString& sLine) : QEvent(eType), m_sLine(sLine) - { m_sLine.remove(QRegExp("\x1B\[[0-9|;]+m")); } + { m_sLine.remove(QRegExp("\\x1B\\[[0-9|;]+m")); } // Accessor. const QString& line() const { return m_sLine; } @@ -309,38 +395,37 @@ // qjackctlMainForm -- UI wrapper form. // Kind of singleton reference. -qjackctlMainForm *qjackctlMainForm::g_pMainForm = NULL; +qjackctlMainForm *qjackctlMainForm::g_pMainForm = nullptr; // Constructor. qjackctlMainForm::qjackctlMainForm ( QWidget *pParent, Qt::WindowFlags wflags ) - : QWidget(pParent, wflags) + : QWidget(pParent, wflags), m_menu(this) { -#if defined(WIN32) - QApplication::setStyle(new QPlastiqueStyle()); -#endif - // Setup UI struct... m_ui.setupUi(this); // Pseudo-singleton reference setup. g_pMainForm = this; - m_pSetup = NULL; + m_pSetup = nullptr; m_iServerState = QJACKCTL_INACTIVE; - m_pJack = NULL; - m_pJackClient = NULL; + m_pJack = nullptr; + m_pJackClient = nullptr; m_bJackDetach = false; m_bJackShutdown = false; - m_bJackStopped = false; - m_pAlsaSeq = NULL; + m_bJackRestart = false; + + m_pAlsaSeq = nullptr; + #ifdef CONFIG_DBUS - m_pDBusControl = NULL; - m_pDBusConfig = NULL; - m_pDBusLogWatcher = NULL; + m_pDBusControl = nullptr; + m_pDBusConfig = nullptr; + m_pDBusLogWatcher = nullptr; m_bDBusStarted = false; + m_bDBusDetach = false; #endif m_iStartDelay = 0; m_iTimerDelay = 0; @@ -359,22 +444,23 @@ m_iJackPropertyChange = 0; #endif - m_pStdoutNotifier = NULL; - m_pAlsaNotifier = NULL; + m_pStdoutNotifier = nullptr; + m_pAlsaNotifier = nullptr; // All forms are to be created later on setup. - m_pMessagesStatusForm = NULL; - m_pSessionForm = NULL; - m_pConnectionsForm = NULL; - m_pPatchbayForm = NULL; - m_pSetupForm = NULL; + m_pMessagesStatusForm = nullptr; + m_pSessionForm = nullptr; + m_pConnectionsForm = nullptr; + m_pPatchbayForm = nullptr; + m_pGraphForm = nullptr; + m_pSetupForm = nullptr; // Patchbay rack can be readily created. m_pPatchbayRack = new qjackctlPatchbayRack(); #ifdef CONFIG_SYSTEM_TRAY // The eventual system tray widget. - m_pSystemTray = NULL; + m_pSystemTray = nullptr; m_bQuitClose = false; #endif @@ -387,14 +473,48 @@ // Avoid extra transport toggles (play/stop) m_iTransportPlay = 0; + // Whether to update context menu on next status refresh. + m_iMenuRefresh = 0; + // Whether we've Qt::Tool flag (from bKeepOnTop), // this is actually the main last application window... QWidget::setAttribute(Qt::WA_QuitOnClose); #ifdef HAVE_SIGNAL_H + // Set to ignore any fatal "Broken pipe" signals. - signal(SIGPIPE, SIG_IGN); -#endif + ::signal(SIGPIPE, SIG_IGN); + + // Initialize file descriptors for SIGTERM socket notifier. + ::socketpair(AF_UNIX, SOCK_STREAM, 0, g_fdSigterm); + m_pSigtermNotifier + = new QSocketNotifier(g_fdSigterm[1], QSocketNotifier::Read, this); + + QObject::connect(m_pSigtermNotifier, + SIGNAL(activated(int)), + SLOT(sigtermNotifySlot(int))); + + // Install SIGTERM signal handler. + struct sigaction sigterm; + sigterm.sa_handler = qjackctl_sigterm_handler; + sigemptyset(&sigterm.sa_mask); + sigterm.sa_flags = 0; + sigterm.sa_flags |= SA_RESTART; + ::sigaction(SIGTERM, &sigterm, nullptr); + ::sigaction(SIGQUIT, &sigterm, nullptr); + + // Ignore SIGHUP/SIGINT signals. + ::signal(SIGHUP, SIG_IGN); + ::signal(SIGINT, SIG_IGN); + + // Also ignore SIGUSR1 (LADISH Level 1). + ::signal(SIGUSR1, SIG_IGN); + +#else // HAVE_SIGNAL_H + + m_pSigtermNotifier = nullptr; + +#endif // !HAVE_SIGNAL_H #if 0 // FIXME: Iterate for every child text label... @@ -419,6 +539,9 @@ QObject::connect(m_ui.SessionToolButton, SIGNAL(clicked()), SLOT(toggleSessionForm())); + QObject::connect(m_ui.GraphToolButton, + SIGNAL(clicked()), + SLOT(toggleGraphForm())); QObject::connect(m_ui.ConnectionsToolButton, SIGNAL(clicked()), SLOT(toggleConnectionsForm())); @@ -457,8 +580,12 @@ // Destructor. qjackctlMainForm::~qjackctlMainForm (void) { - // Stop server, if not already... +#ifdef HAVE_SIGNAL_H + if (m_pSigtermNotifier) + delete m_pSigtermNotifier; +#endif + // Stop server, if not already... #ifdef CONFIG_DBUS if (m_pSetup->bStopJack || !m_pSetup->bJackDBusEnabled) stopJackServer(); @@ -468,10 +595,11 @@ delete m_pDBusConfig; if (m_pDBusControl) delete m_pDBusControl; - m_pDBusControl = NULL; - m_pDBusConfig = NULL; - m_pDBusLogWatcher = NULL; + m_pDBusControl = nullptr; + m_pDBusConfig = nullptr; + m_pDBusLogWatcher = nullptr; m_bDBusStarted = false; + m_bDBusDetach = false; #else stopJackServer(); #endif @@ -483,8 +611,8 @@ if (m_pAlsaSeq) snd_seq_close(m_pAlsaSeq); #endif - m_pAlsaNotifier = NULL; - m_pAlsaSeq = NULL; + m_pAlsaNotifier = nullptr; + m_pAlsaSeq = nullptr; // Finally drop any popup widgets around... if (m_pMessagesStatusForm) @@ -495,19 +623,23 @@ delete m_pConnectionsForm; if (m_pPatchbayForm) delete m_pPatchbayForm; + if (m_pGraphForm) + delete m_pGraphForm; if (m_pSetupForm) delete m_pSetupForm; + #ifdef CONFIG_SYSTEM_TRAY // Quit off system tray widget. if (m_pSystemTray) delete m_pSystemTray; #endif + // Patchbay rack is also dead. if (m_pPatchbayRack) delete m_pPatchbayRack; // Pseudo-singleton reference shut-down. - g_pMainForm = NULL; + g_pMainForm = nullptr; } @@ -532,7 +664,7 @@ updateButtons(); // What style do we create these forms? - QWidget *pParent = NULL; + QWidget *pParent = nullptr; Qt::WindowFlags wflags = Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint @@ -549,6 +681,9 @@ m_pConnectionsForm = new qjackctlConnectionsForm (pParent, wflags); m_pPatchbayForm = new qjackctlPatchbayForm (pParent, wflags); + // Graph form should be a full-blown top-level window... + m_pGraphForm = new qjackctlGraphForm(pParent, wflags); + // Setup form is kind of special (modeless dialog). m_pSetupForm = new qjackctlSetupForm(this); @@ -560,8 +695,12 @@ m_pConnectionsForm->setTabPage(m_pSetup->iConnectionsTabPage); m_pConnectionsForm->setup(m_pSetup); m_pPatchbayForm->setup(m_pSetup); + m_pGraphForm->setup(m_pSetup); m_pSetupForm->setup(m_pSetup); + // Maybe time to load default preset aliases? + m_pSetup->loadAliases(); + // Check out some initial nullities(tm)... if (m_pSetup->sMessagesFont.isEmpty() && m_pMessagesStatusForm) m_pSetup->sMessagesFont = m_pMessagesStatusForm->messagesFont().toString(); @@ -585,6 +724,7 @@ m_pSetup->loadWidgetGeometry(m_pSessionForm); m_pSetup->loadWidgetGeometry(m_pConnectionsForm); m_pSetup->loadWidgetGeometry(m_pPatchbayForm); + m_pSetup->loadWidgetGeometry(m_pGraphForm); // m_pSetup->loadWidgetGeometry(m_pSetupForm); // Make it final show... @@ -594,14 +734,12 @@ updateDisplayEffect(); updateTimeDisplayFonts(); updateTimeDisplayToolTips(); - updateTimeFormat(); updateMessagesFont(); updateMessagesLimit(); updateConnectionsFont(); updateConnectionsIconSize(); updateJackClientPortAlias(); updateJackClientPortMetadata(); - updateBezierLines(); // updateActivePatchbay(); #ifdef CONFIG_SYSTEM_TRAY updateSystemTray(); @@ -611,7 +749,7 @@ resetXrunStats(); // Check if we can redirect our own stdout/stderr... -#if !defined(WIN32) +#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32) if (m_pSetup->bStdoutCapture && ::pipe(g_fdStdout) == 0) { ::dup2(g_fdStdout[QJACKCTL_FDWRITE], STDOUT_FILENO); ::dup2(g_fdStdout[QJACKCTL_FDWRITE], STDERR_FILENO); @@ -627,12 +765,12 @@ if (m_pSetup->bAlsaSeqEnabled) { // Start our ALSA sequencer interface. if (snd_seq_open(&m_pAlsaSeq, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) - m_pAlsaSeq = NULL; + m_pAlsaSeq = nullptr; if (m_pAlsaSeq) { snd_seq_port_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; struct pollfd pfd[1]; - int iPort = snd_seq_create_simple_port( + const int iPort = snd_seq_create_simple_port( m_pAlsaSeq, "qjackctl", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE @@ -661,6 +799,8 @@ // Rather obvious setup. if (m_pConnectionsForm) m_pConnectionsForm->stabilizeAlsa(true); + if (m_pGraphForm) + m_pGraphForm->alsa_changed(); } else { appendMessagesError( tr("Could not open ALSA sequencer as a client.\n\n" @@ -690,6 +830,8 @@ this, SLOT(toggleConnectionsForm())); dbus.connect(s, s, sDBusName, "patchbay", this, SLOT(togglePatchbayForm())); + dbus.connect(s, s, sDBusName, "graph", + this, SLOT(toggleGraphForm())); dbus.connect(s, s, sDBusName, "rewind", this, SLOT(transportRewind())); dbus.connect(s, s, sDBusName, "backward", @@ -708,6 +850,8 @@ this, SLOT(quitMainForm())); dbus.connect(s, s, sDBusName, "preset", this, SLOT(activatePreset(const QString&))); + dbus.connect(s, s, sDBusName, "active-patchbay", + this, SLOT(activatePatchbay(const QString&))); // Session related slots... if (m_pSessionForm) { dbus.connect(s, s, sDBusName, "load", @@ -723,56 +867,7 @@ } } // Register JACK D-Bus service... - if (m_pSetup->bJackDBusEnabled) { - // Detect whether jackdbus is avaliable... - QDBusConnection dbusc = QDBusConnection::sessionBus(); - m_pDBusControl = new QDBusInterface( - "org.jackaudio.service", // Service - "/org/jackaudio/Controller", // Path - "org.jackaudio.JackControl", // Interface - dbusc); // Connection - QDBusMessage dbusm = m_pDBusControl->call("IsStarted"); - if (dbusm.type() == QDBusMessage::ReplyMessage) { - // Yes, jackdbus is available and/or already started - // -- use jackdbus control interface... - appendMessages(tr("D-BUS: Service is available (%1 aka jackdbus).") - .arg(m_pDBusControl->service())); - // Parse reply (should be boolean) - m_bDBusStarted = dbusm.arguments().first().toBool(); - // Register server start/stop notification slots... - dbusc.connect( - m_pDBusControl->service(), - m_pDBusControl->path(), - m_pDBusControl->interface(), - "ServerStarted", this, - SLOT(jackStarted())); - dbusc.connect( - m_pDBusControl->service(), - m_pDBusControl->path(), - m_pDBusControl->interface(), - "ServerStopped", this, - SLOT(jackFinished())); - // -- use jackdbus configure interface... - m_pDBusConfig = new QDBusInterface( - m_pDBusControl->service(), // Service - m_pDBusControl->path(), // Path - "org.jackaudio.Configure", // Interface - m_pDBusControl->connection()); // Connection - // Start our log watcher thread... - m_pDBusLogWatcher = new qjackctlDBusLogWatcher( - QDir::homePath() + "/.log/jack/jackdbus.log"); - m_pDBusLogWatcher->start(); - // Ready now. - } else { - // No, jackdbus is not available, not started - // or not even installed -- use classic jackd, BAU... - appendMessages(tr("D-BUS: Service not available (%1 aka jackdbus).") - .arg(m_pDBusControl->service())); - // Destroy tentative jackdbus interface. - delete m_pDBusControl; - m_pDBusControl = NULL; - } - } + updateJackDBus(); #endif // Load patchbay form recent paths... @@ -806,11 +901,21 @@ } +// Setup accessor. +qjackctlSetup *qjackctlMainForm::setup (void) const +{ + return m_pSetup; +} + + // Window close event handlers. bool qjackctlMainForm::queryClose (void) { bool bQueryClose = true; + if (m_pSetup == nullptr) + return bQueryClose; + #ifdef CONFIG_SYSTEM_TRAY // If we're not quitting explicitly and there's an // active system tray icon, then just hide ourselves. @@ -819,7 +924,7 @@ m_pSetup->saveWidgetGeometry(this, true); if (m_pSetup->bSystemTrayQueryClose) { const QString& sTitle - = tr("Information") + " - " QJACKCTL_SUBTITLE1; + = tr("Information"); const QString& sText = tr("The program will keep running in the system tray.\n\n" "To terminate the program, please choose \"Quit\"\n" @@ -827,7 +932,8 @@ #if 0//QJACKCTL_SYSTEM_TRAY_QUERY_CLOSE if (QSystemTrayIcon::supportsMessages()) { m_pSystemTray->showMessage( - sTitle, sText, QSystemTrayIcon::Information); + sTitle + " - " QJACKCTL_SUBTITLE1, + sText, QSystemTrayIcon::Information); } else QMessageBox::information(this, sTitle, sText); @@ -847,6 +953,7 @@ #endif } hide(); + updateContextMenu(); bQueryClose = false; } #endif @@ -858,6 +965,7 @@ show(); raise(); activateWindow(); + updateContextMenu(); if (m_pSetup->bQueryClose) { const QString& sTitle = tr("Warning") + " - " QJACKCTL_SUBTITLE1; @@ -884,35 +992,21 @@ } } + // Try to save current aliases default settings. + if (bQueryClose && !m_bQuitForce) + bQueryClose = queryClosePreset(); + // Try to save current setup settings. if (bQueryClose && m_pSetupForm && !m_bQuitForce) bQueryClose = m_pSetupForm->queryClose(); - // Try to save current aliases default settings. - if (bQueryClose && m_pConnectionsForm) { - if (!m_bQuitForce) - bQueryClose = m_pConnectionsForm->queryClose(); - if (bQueryClose) - m_pSetup->iConnectionsTabPage = m_pConnectionsForm->tabPage(); - } - // Try to save current patchbay default settings. - if (bQueryClose && m_pPatchbayForm) { - if (!m_bQuitForce) - bQueryClose = m_pPatchbayForm->queryClose(); - if (bQueryClose && !m_pPatchbayForm->patchbayPath().isEmpty()) - m_pSetup->sPatchbayPath = m_pPatchbayForm->patchbayPath(); - } + if (bQueryClose && !m_bQuitForce && m_pPatchbayForm) + bQueryClose = m_pPatchbayForm->queryClose(); // Try to save current session directories list... - if (bQueryClose && m_pSessionForm) { - if (!m_bQuitForce) - bQueryClose = m_pSessionForm->queryClose(); - if (bQueryClose) { - m_pSetup->sessionDirs = m_pSessionForm->sessionDirs(); - m_pSetup->bSessionSaveVersion = m_pSessionForm->isSaveSessionVersion(); - } - } + if (bQueryClose && !m_bQuitForce && m_pSessionForm) + bQueryClose = m_pSessionForm->queryClose(); // Some windows default fonts are here on demand too. if (bQueryClose && m_pMessagesStatusForm) { @@ -932,6 +1026,7 @@ m_pSetup->saveWidgetGeometry(m_pSessionForm); m_pSetup->saveWidgetGeometry(m_pConnectionsForm); m_pSetup->saveWidgetGeometry(m_pPatchbayForm); + m_pSetup->saveWidgetGeometry(m_pGraphForm); // m_pSetup->saveWidgetGeometry(m_pSetupForm); m_pSetup->saveWidgetGeometry(this, true); // Close popup widgets. @@ -943,9 +1038,11 @@ m_pConnectionsForm->close(); if (m_pPatchbayForm) m_pPatchbayForm->close(); + if (m_pGraphForm) + m_pGraphForm->close(); if (m_pSetupForm) m_pSetupForm->close(); - #ifdef CONFIG_SYSTEM_TRAY + #if 0//CONFIG_SYSTEM_TRAY // And the system tray icon too. if (m_pSystemTray) m_pSystemTray->close(); @@ -961,6 +1058,35 @@ } +// Query whether current preset can be closed. +bool qjackctlMainForm::queryClosePreset (void) +{ + bool bQueryClose = true; + + if (m_pSetup->aliases.dirty) { + switch (QMessageBox::warning(this, + tr("Warning") + " - " QJACKCTL_SUBTITLE1, + tr("The preset aliases have been changed:\n\n" + "\"%1\"\n\nDo you want to save the changes?") + .arg(m_pSetup->aliases.key), + QMessageBox::Save | + QMessageBox::Discard | + QMessageBox::Cancel)) { + case QMessageBox::Save: + m_pSetup->saveAliases(); + // Fall thru.... + case QMessageBox::Discard: + break; + default: // Cancel. + bQueryClose = false; + break; + } + } + + return bQueryClose; +} + + void qjackctlMainForm::closeEvent ( QCloseEvent *pCloseEvent ) { // Let's be sure about that... @@ -985,6 +1111,9 @@ case QJACKCTL_BUFF_EVENT: buffNotifyEvent(); break; + case QJACKCTL_FREE_EVENT: + freeNotifyEvent(); + break; case QJACKCTL_SHUT_EVENT: shutNotifyEvent(); break; @@ -1024,7 +1153,8 @@ // Common shell script executive, with placeholder substitution... -void qjackctlMainForm::shellExecute ( const QString& sShellCommand, const QString& sStartMessage, const QString& sStopMessage ) +void qjackctlMainForm::shellExecute ( const QString& sShellCommand, + const QString& sStartMessage, const QString& sStopMessage ) { QString sTemp = sShellCommand; @@ -1103,13 +1233,15 @@ if (m_pSetup->sServerName.isEmpty()) m_pSetup->sServerName = m_preset.sServerName; -#if 0 // defined(__GNUC__) && defined(Q_OS_LINUX) // Take care for the environment as well... - if (!m_pSetup->sServerName.isEmpty()) { - setenv("JACK_DEFAULT_SERVER", - m_pSetup->sServerName.toUtf8().constData(), 1); + if (m_pSetup->sServerName.isEmpty()) { + const char *pszServerName = ::getenv("JACK_DEFAULT_SERVER"); + if (pszServerName && strcmp("default", pszServerName)) + m_pSetup->sServerName = QString::fromUtf8(pszServerName); } -#endif + + // No JACK Classic command line to start with, yet... + m_sJackCmdLine.clear(); // If we ain't to be the server master, maybe we'll start // detached as client only (jackd server already running?) @@ -1129,6 +1261,33 @@ tr("Startup script terminated")); } +#ifdef CONFIG_DBUS + + // Jack D-BUS server backend startup method... + if (m_pDBusControl) { + + // Jack D-BUS server backend configuration... + setDBusParameters(m_preset); + + QDBusMessage dbusm = m_pDBusControl->call("StartServer"); + if (dbusm.type() == QDBusMessage::ReplyMessage) { + m_bDBusDetach = true; + appendMessages( + tr("D-BUS: JACK server is starting...")); + } else { + appendMessagesError( + tr("D-BUS: JACK server could not be started.\n\nSorry")); + } + + // Delay our control client... + startJackClientDelay(); + + // JACK D-BUS startup is done. + return; + } + +#endif // !CONFIG_DBUS + // Split the server path into arguments... QStringList args = m_preset.sServerPrefix.split(' '); @@ -1138,32 +1297,22 @@ QString sCommand = args[0]; QFileInfo fi(sCommand); if (fi.isRelative()) { - #if defined(WIN32) + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) const char chPathSep = ';'; if (fi.suffix().isEmpty()) sCommand += ".exe"; #else const char chPathSep = ':'; #endif - const QString sPath = ::getenv("PATH"); + const QString sPath = QString::fromUtf8(::getenv("PATH")); QStringList paths = sPath.split(chPathSep); - #if defined(WIN32) + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) paths = paths << "C:\\Program Files\\Jack" << "C:\\Program Files (x86)\\Jack"; #endif QStringListIterator iter(paths); while (iter.hasNext()) { const QString& sDirectory = iter.next(); fi.setFile(QDir(sDirectory), sCommand); - #if defined(WIN32) - #ifdef CONFIG_DEBUG - printf("\n\n\n\n abs_path: -%s-\ndir: -%s-\nsCommand: -%s-\nexists: %d, executable: %d\n\n", - fi.absolutePath().toUtf8().constData(), - sDirectory.toUtf8().constData(), - sCommand.toUtf8().constData(), - fi.exists(), fi.isExecutable() - ); - #endif - #endif if (fi.exists() && fi.isExecutable()) { sCommand = fi.filePath(); break; @@ -1180,7 +1329,6 @@ const bool bAlsa = (m_preset.sDriver == "alsa"); const bool bPortaudio = (m_preset.sDriver == "portaudio"); const bool bCoreaudio = (m_preset.sDriver == "coreaudio"); - const bool bFreebob = (m_preset.sDriver == "freebob"); const bool bFirewire = (m_preset.sDriver == "firewire"); const bool bNet = (m_preset.sDriver == "net" || m_preset.sDriver == "netone"); @@ -1213,13 +1361,13 @@ } if (bPortaudio && m_preset.iChan > 0) args.append("-c" + QString::number(m_preset.iChan)); - if ((bCoreaudio || bFreebob || bFirewire) && !m_preset.sInterface.isEmpty()) + if ((bCoreaudio || bFirewire) && !m_preset.sInterface.isEmpty()) args.append("-d" + formatQuoted(m_preset.sInterface)); if (m_preset.iSampleRate > 0 && !bNet) args.append("-r" + QString::number(m_preset.iSampleRate)); if (m_preset.iFrames > 0 && !bNet) args.append("-p" + QString::number(m_preset.iFrames)); - if (bAlsa || bSun || bOss || bFreebob || bFirewire) { + if (bAlsa || bSun || bOss || bFirewire) { if (m_preset.iPeriods > 0) args.append("-n" + QString::number(m_preset.iPeriods)); } @@ -1230,8 +1378,6 @@ args.append("-m"); if (m_preset.bShorts) args.append("-S"); - if (m_preset.bHWMon) - args.append("-H"); if (m_preset.bHWMeter) args.append("-M"); #ifdef CONFIG_JACK_MIDI @@ -1299,24 +1445,9 @@ if (m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE) args.append("-o" + QString::number(m_preset.iOutChannels)); } - else if (bFreebob) { - switch (m_preset.iAudio) { - case QJACKCTL_DUPLEX: - args.append("-D"); - break; - case QJACKCTL_CAPTURE: - args.append("-C"); - args.append("-o0"); - break; - case QJACKCTL_PLAYBACK: - args.append("-P"); - args.append("-i0"); - break; - } - } if (bDummy && m_preset.iWait > 0 && m_preset.iWait != 21333) args.append("-w" + QString::number(m_preset.iWait)); - if (bAlsa || bSun || bOss || bCoreaudio || bPortaudio || bFreebob || bFirewire) { + if (bAlsa || bSun || bOss || bCoreaudio || bPortaudio || bFirewire) { if (m_preset.iInLatency > 0) args.append("-I" + QString::number(m_preset.iInLatency)); if (m_preset.iOutLatency > 0) @@ -1330,89 +1461,61 @@ // This is emulated jackd command line, for future reference purposes... m_sJackCmdLine = sCommand + ' ' + args.join(" ").trimmed(); -#ifdef CONFIG_DBUS - - // Jack D-BUS server backend startup method... - if (m_pDBusControl) { - - // Jack D-BUS server backend configuration... - setDBusParameters(); + // JACK Classic server backend startup process... + m_pJack = new QProcess(this); - QDBusMessage dbusm = m_pDBusControl->call("StartServer"); - if (dbusm.type() == QDBusMessage::ReplyMessage) { - appendMessages( - tr("D-BUS: JACK server is starting...")); - } else { - appendMessagesError( - tr("D-BUS: JACK server could not be started.\n\nSorry")); - } - - // Delay our control client... - startJackClientDelay(); - - } else { - -#endif // !CONFIG_DBUS - - // Jack classic server backend startup process... - m_pJack = new QProcess(this); - - // Setup stdout/stderr capture... - if (m_pSetup->bStdoutCapture) { - #if defined(WIN32) - // QProcess::ForwardedChannels doesn't seem to work in windows. - m_pJack->setProcessChannelMode(QProcess::MergedChannels); - #else - m_pJack->setProcessChannelMode(QProcess::ForwardedChannels); - #endif - QObject::connect(m_pJack, - SIGNAL(readyReadStandardOutput()), - SLOT(readStdout())); - QObject::connect(m_pJack, - SIGNAL(readyReadStandardError()), - SLOT(readStdout())); - } - - // The unforgiveable signal communication... - QObject::connect(m_pJack, - SIGNAL(started()), - SLOT(jackStarted())); + // Setup stdout/stderr capture... + if (m_pSetup->bStdoutCapture) { + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) + // QProcess::ForwardedChannels doesn't seem to work in windows. + m_pJack->setProcessChannelMode(QProcess::MergedChannels); + #else + m_pJack->setProcessChannelMode(QProcess::ForwardedChannels); + #endif QObject::connect(m_pJack, - SIGNAL(error(QProcess::ProcessError)), - SLOT(jackError(QProcess::ProcessError))); + SIGNAL(readyReadStandardOutput()), + SLOT(readStdout())); QObject::connect(m_pJack, - SIGNAL(finished(int, QProcess::ExitStatus)), - SLOT(jackFinished())); - - appendMessages(tr("JACK is starting...")); - appendMessagesColor(m_sJackCmdLine, "#990099"); + SIGNAL(readyReadStandardError()), + SLOT(readStdout())); + } - #if defined(WIN32) - const QString& sCurrentDir = QFileInfo(sCommand).dir().absolutePath(); - m_pJack->setWorkingDirectory(sCurrentDir); - // QDir::setCurrent(sCurrentDir); - #endif + // The unforgiveable signal communication... + QObject::connect(m_pJack, + SIGNAL(started()), + SLOT(jackStarted())); + QObject::connect(m_pJack, + SIGNAL(error(QProcess::ProcessError)), + SLOT(jackError(QProcess::ProcessError))); + QObject::connect(m_pJack, + SIGNAL(finished(int, QProcess::ExitStatus)), + SLOT(jackFinished())); + + appendMessages(tr("JACK is starting...")); + appendMessagesColor(m_sJackCmdLine, "#990099"); + +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) + const QString& sCurrentDir = QFileInfo(sCommand).dir().absolutePath(); + m_pJack->setWorkingDirectory(sCurrentDir); +// QDir::setCurrent(sCurrentDir); +#endif - // Unquote arguments as necessary... - const QChar q = '"'; - QStringList cmd_args; - QStringListIterator iter(args); - while (iter.hasNext()) { - const QString& arg = iter.next(); - if (arg.contains(q)) { - cmd_args.append(arg.section(q, 0, 0)); - cmd_args.append(arg.section(q, 1, 1)); - } else { - cmd_args.append(arg); - } + // Unquote arguments as necessary... + const QChar q = '"'; + QStringList cmd_args; + QStringListIterator iter(args); + while (iter.hasNext()) { + const QString& arg = iter.next(); + if (arg.contains(q)) { + cmd_args.append(arg.section(q, 0, 0)); + cmd_args.append(arg.section(q, 1, 1)); + } else { + cmd_args.append(arg); } - - // Go jack, go... - m_pJack->start(sCommand, cmd_args); - -#ifdef CONFIG_DBUS } -#endif + + // Go JACK, go... + m_pJack->start(sCommand, cmd_args); } @@ -1426,7 +1529,7 @@ && (m_pConnectionsForm->isAudioConnected() || m_pConnectionsForm->isMidiConnected())) { const QString& sTitle - = tr("Warning") + " - " QJACKCTL_SUBTITLE1; + = tr("Warning"); const QString& sText = tr("Some client audio applications\n" "are still active and connected.\n\n" @@ -1487,8 +1590,7 @@ // Jack classic server backend... if (m_pJack) { appendMessages(tr("JACK is stopping...")); - m_bJackStopped = true; - #if defined(WIN32) + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) // Try harder... m_pJack->kill(); #else @@ -1539,9 +1641,9 @@ // Stdout buffer handler -- now splitted by complete new-lines... -void qjackctlMainForm::appendStdoutBuffer ( const QString& s ) +void qjackctlMainForm::appendStdoutBuffer ( const QString& sText ) { - m_sStdoutBuffer.append(s); + m_sStdoutBuffer.append(sText); const int iLength = m_sStdoutBuffer.lastIndexOf('\n'); if (iLength > 0) { @@ -1552,7 +1654,7 @@ while (iter.hasNext()) { sTemp = iter.next(); if (!sTemp.isEmpty()) - #if defined(WIN32) + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) appendMessagesText(detectXrun(sTemp).trimmed()); #else appendMessagesText(detectXrun(sTemp)); @@ -1575,6 +1677,12 @@ // Jack audio server startup. void qjackctlMainForm::jackStarted (void) { + // Sure we're over any previous shutdown... + m_bJackShutdown = false; + + // We're still starting... + updateServerState(QJACKCTL_STARTING); + // Show startup results... if (m_pJack) { appendMessages(tr("JACK was started with PID=%1.") @@ -1635,7 +1743,7 @@ appendMessages(tr("JACK was stopped")); // Destroy it. delete m_pJack; - m_pJack = NULL; + m_pJack = nullptr; // Flag we need a post-shutdown script... bPostShutdown = true; } @@ -1644,6 +1752,7 @@ // Special for D-BUS control... if (m_pDBusControl && m_bDBusStarted) { m_bDBusStarted = false; + m_bDBusDetach = false; appendMessages(tr("D-BUS: JACK server was stopped (%1 aka jackdbus).") .arg(m_pDBusControl->service())); // Flag we need a post-shutdown script... @@ -1676,22 +1785,25 @@ { QPalette pal; pal.setColor(QPalette::Foreground, - m_pJackClient == NULL ? Qt::darkYellow : Qt::yellow); + m_pJackClient == nullptr ? Qt::darkYellow : Qt::yellow); m_ui.ServerStateTextLabel->setPalette(pal); - m_ui.StartToolButton->setEnabled(m_pJackClient == NULL); - m_ui.StopToolButton->setEnabled(m_pJackClient != NULL); + m_ui.StartToolButton->setEnabled(m_pJackClient == nullptr); + m_ui.StopToolButton->setEnabled(m_pJackClient != nullptr); m_ui.RewindToolButton->setEnabled(false); m_ui.BackwardToolButton->setEnabled(false); m_ui.PlayToolButton->setEnabled(false); m_ui.PauseToolButton->setEnabled(false); m_ui.ForwardToolButton->setEnabled(false); transportPlayStatus(false); - int iServerState; +#ifdef CONFIG_DBUS + if (m_pDBusConfig && m_bDBusStarted) + updateServerState(m_pJackClient ? QJACKCTL_STARTED : QJACKCTL_STOPPED); + else +#endif if (m_bJackDetach) - iServerState = (m_pJackClient ? QJACKCTL_ACTIVE : QJACKCTL_INACTIVE); + updateServerState(m_pJackClient ? QJACKCTL_ACTIVE : QJACKCTL_INACTIVE); else - iServerState = QJACKCTL_STOPPED; - updateServerState(iServerState); + updateServerState(QJACKCTL_STOPPED); } @@ -1732,10 +1844,24 @@ } +// SIGTERM signal handler... +void qjackctlMainForm::sigtermNotifySlot ( int /* fd */ ) +{ +#ifdef HAVE_SIGNAL_H + + char c; + + if (::read(g_fdSigterm[1], &c, sizeof(c)) > 0) + quitMainForm(); + +#endif +} + + // Set stdout/stderr blocking mode. bool qjackctlMainForm::stdoutBlock ( int fd, bool bBlock ) const { -#if !defined(WIN32) +#if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32) const int iFlags = ::fcntl(fd, F_GETFL, 0); const bool bNonBlock = bool(iFlags & O_NONBLOCK); if (bBlock && bNonBlock) @@ -1751,7 +1877,7 @@ // Own stdout/stderr socket notifier slot. void qjackctlMainForm::stdoutNotifySlot ( int fd ) { - #if !defined(WIN32) + #if !defined(__WIN32__) && !defined(_WIN32) && !defined(WIN32) // Set non-blocking reads, if not already... const bool bBlock = stdoutBlock(fd, false); // Read as much as is available... @@ -1772,25 +1898,26 @@ // Messages output methods. -void qjackctlMainForm::appendMessages ( const QString& s ) +void qjackctlMainForm::appendMessages ( const QString& sText ) { if (m_pMessagesStatusForm) - m_pMessagesStatusForm->appendMessages(s); + m_pMessagesStatusForm->appendMessages(sText); } -void qjackctlMainForm::appendMessagesColor ( const QString& s, const QString& c ) +void qjackctlMainForm::appendMessagesColor ( + const QString& sText, const QString& sColor ) { if (m_pMessagesStatusForm) - m_pMessagesStatusForm->appendMessagesColor(s, c); + m_pMessagesStatusForm->appendMessagesColor(sText, sColor); } -void qjackctlMainForm::appendMessagesText ( const QString& s ) +void qjackctlMainForm::appendMessagesText ( const QString& sText ) { if (m_pMessagesStatusForm) - m_pMessagesStatusForm->appendMessagesText(s); + m_pMessagesStatusForm->appendMessagesText(sText); } -void qjackctlMainForm::appendMessagesError ( const QString& s ) +void qjackctlMainForm::appendMessagesError ( const QString& sText ) { if (m_pMessagesStatusForm) { m_pMessagesStatusForm->setTabPage( @@ -1798,23 +1925,26 @@ m_pMessagesStatusForm->show(); } - appendMessagesColor(s.simplified(), "#ff0000"); + appendMessagesColor(sText.simplified(), "#ff0000"); - const QString& sTitle = tr("Error") + " - " QJACKCTL_SUBTITLE1; + const QString& sTitle + = tr("Error"); #ifdef CONFIG_SYSTEM_TRAY if (m_pSetup->bSystemTray && m_pSystemTray && QSystemTrayIcon::supportsMessages()) - m_pSystemTray->showMessage(sTitle, s, QSystemTrayIcon::Critical); + m_pSystemTray->showMessage( + sTitle + " - " QJACKCTL_SUBTITLE1, + sText, QSystemTrayIcon::Critical); else #endif - QMessageBox::critical(this, sTitle, s, QMessageBox::Cancel); + QMessageBox::critical(this, sTitle, sText, QMessageBox::Cancel); } // Force update of the messages font. void qjackctlMainForm::updateMessagesFont (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (m_pMessagesStatusForm && !m_pSetup->sMessagesFont.isEmpty()) { @@ -1828,7 +1958,7 @@ // Update messages window line limit. void qjackctlMainForm::updateMessagesLimit (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (m_pMessagesStatusForm) { @@ -1843,7 +1973,7 @@ // Update messages logging state. void qjackctlMainForm::updateMessagesLogging (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (m_pMessagesStatusForm) { @@ -1856,7 +1986,7 @@ // Force update of the connections font. void qjackctlMainForm::updateConnectionsFont (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (m_pConnectionsForm && !m_pSetup->sConnectionsFont.isEmpty()) { @@ -1870,7 +2000,7 @@ // Update of the connections view icon size. void qjackctlMainForm::updateConnectionsIconSize (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (m_pConnectionsForm) @@ -1881,7 +2011,7 @@ // Update of JACK client/port alias display mode. void qjackctlMainForm::updateJackClientPortAlias (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; qjackctlJackClientList::setJackClientPortAlias(m_pSetup->iJackClientPortAlias); @@ -1893,7 +2023,7 @@ // Update of JACK client/port pretty-name (metadata) display mode. void qjackctlMainForm::updateJackClientPortMetadata (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; qjackctlJackClientList::setJackClientPortMetadata(m_pSetup->bJackClientPortMetadata); @@ -1902,32 +2032,10 @@ } -// Update the connection and patchbay line style. -void qjackctlMainForm::updateBezierLines (void) -{ - if (m_pSetup == NULL) - return; - - if (m_pConnectionsForm) { - m_pConnectionsForm->audioConnectView()->setBezierLines(m_pSetup->bBezierLines); - m_pConnectionsForm->midiConnectView()->setBezierLines(m_pSetup->bBezierLines); - m_pConnectionsForm->alsaConnectView()->setBezierLines(m_pSetup->bBezierLines); - m_pConnectionsForm->audioConnectView()->connectorView()->update(); - m_pConnectionsForm->midiConnectView()->connectorView()->update(); - m_pConnectionsForm->alsaConnectView()->connectorView()->update(); - } - - if (m_pPatchbayForm) { - m_pPatchbayForm->patchbayView()->setBezierLines(m_pSetup->bBezierLines); - m_pPatchbayForm->patchbayView()->PatchworkView()->update(); - } -} - - // Update main display background effect. void qjackctlMainForm::updateDisplayEffect (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; // Set the main background... @@ -1980,31 +2088,12 @@ sTimeDisplay = tr("Elapsed time since last reset"); break; case DISPLAY_XRUN_TIME: - sTimeDisplay = tr("Elapsed time since last XRUN"); - break; - } - - m_ui.TimeDisplayTextLabel->setToolTip(sTimeDisplay); - m_ui.TransportTimeTextLabel->setToolTip(sTransportTime); -} - - -// Force update of time format dependant stuff. -void qjackctlMainForm::updateTimeFormat (void) -{ - // Time dashes format helper. - m_sTimeDashes = "--:--:--"; - switch (m_pSetup->iTimeFormat) { - case 1: // Tenths of second. - m_sTimeDashes += ".-"; - break; - case 2: // Hundredths of second. - m_sTimeDashes += ".--"; - break; - case 3: // Raw milliseconds - m_sTimeDashes += ".---"; + sTimeDisplay = tr("Elapsed time since last XRUN"); break; } + + m_ui.TimeDisplayTextLabel->setToolTip(sTimeDisplay); + m_ui.TransportTimeTextLabel->setToolTip(sTransportTime); } @@ -2026,13 +2115,15 @@ m_ui.StopToolButton->show(); m_ui.MessagesStatusToolButton->show(); m_ui.SessionToolButton->show(); - m_ui.ConnectionsToolButton->show(); + m_ui.ConnectionsToolButton->setVisible(!m_pSetup->bGraphButton); + m_ui.GraphToolButton->setVisible(m_pSetup->bGraphButton); m_ui.PatchbayToolButton->show(); } else { m_ui.StartToolButton->hide(); m_ui.StopToolButton->hide(); m_ui.MessagesStatusToolButton->hide(); m_ui.SessionToolButton->hide(); + m_ui.GraphToolButton->hide(); m_ui.ConnectionsToolButton->hide(); m_ui.PatchbayToolButton->hide(); } @@ -2073,6 +2164,7 @@ m_ui.MessagesStatusToolButton->setToolButtonStyle(toolButtonStyle); m_ui.SessionToolButton->setToolButtonStyle(toolButtonStyle); m_ui.ConnectionsToolButton->setToolButtonStyle(toolButtonStyle); + m_ui.GraphToolButton->setToolButtonStyle(toolButtonStyle); m_ui.PatchbayToolButton->setToolButtonStyle(toolButtonStyle); m_ui.QuitToolButton->setToolButtonStyle(toolButtonStyle); m_ui.SetupToolButton->setToolButtonStyle(toolButtonStyle); @@ -2082,6 +2174,80 @@ } +#ifdef CONFIG_DBUS + +void qjackctlMainForm::updateJackDBus (void) +{ + // Unregister JACK D-Bus service controller... + if (m_pDBusLogWatcher) { + delete m_pDBusLogWatcher; + m_pDBusLogWatcher = nullptr; + } + if (m_pDBusConfig) { + delete m_pDBusConfig; + m_pDBusConfig = nullptr; + } + if (m_pDBusControl) { + delete m_pDBusControl; + m_pDBusControl = nullptr; + } + + // Register JACK D-Bus service... + if (m_pSetup->bJackDBusEnabled) { + // Detect whether jackdbus is avaliable... + QDBusConnection dbusc = QDBusConnection::sessionBus(); + m_pDBusControl = new QDBusInterface( + "org.jackaudio.service", // Service + "/org/jackaudio/Controller", // Path + "org.jackaudio.JackControl", // Interface + dbusc); // Connection + QDBusMessage dbusm = m_pDBusControl->call("IsStarted"); + if (dbusm.type() == QDBusMessage::ReplyMessage) { + // Yes, jackdbus is available and/or already started + // -- use jackdbus control interface... + appendMessages(tr("D-BUS: Service is available (%1 aka jackdbus).") + .arg(m_pDBusControl->service())); + // Parse reply (should be boolean) + m_bDBusStarted = dbusm.arguments().first().toBool(); + // Register server start/stop notification slots... + dbusc.connect( + m_pDBusControl->service(), + m_pDBusControl->path(), + m_pDBusControl->interface(), + "ServerStarted", this, + SLOT(jackStarted())); + dbusc.connect( + m_pDBusControl->service(), + m_pDBusControl->path(), + m_pDBusControl->interface(), + "ServerStopped", this, + SLOT(jackFinished())); + // -- use jackdbus configure interface... + m_pDBusConfig = new QDBusInterface( + m_pDBusControl->service(), // Service + m_pDBusControl->path(), // Path + "org.jackaudio.Configure", // Interface + m_pDBusControl->connection()); // Connection + // Start our log watcher thread... + m_pDBusLogWatcher = new qjackctlDBusLogWatcher( + QDir::homePath() + "/.log/jack/jackdbus.log"); + m_pDBusLogWatcher->start(); + // Ready now. + } else { + // No, jackdbus is not available, not started + // or not even installed -- use classic jackd, BAU... + appendMessages(tr("D-BUS: Service not available (%1 aka jackdbus).") + .arg(m_pDBusControl->service())); + // Destroy tentative jackdbus interface. + delete m_pDBusControl; + m_pDBusControl = nullptr; + } + } +} + +#endif + + // Force update of active patchbay definition profile, if applicable. bool qjackctlMainForm::isActivePatchbay ( const QString& sPatchbayPath ) const { @@ -2097,7 +2263,7 @@ // Force update of active patchbay definition profile, if applicable. void qjackctlMainForm::updateActivePatchbay (void) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; // Time to load the active patchbay rack profiler? @@ -2131,7 +2297,7 @@ if (m_pAlsaSeq) m_iAlsaDirty++; } - } // We're sure there's no active patchbay... + } // We're sure there's no active patchbay... else appendMessages(tr("Patchbay deactivated.")); // Should refresh anyway. @@ -2141,7 +2307,7 @@ // Toggle active patchbay setting. void qjackctlMainForm::setActivePatchbay ( const QString& sPatchbayPath ) { - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return; if (sPatchbayPath.isEmpty()) { @@ -2169,6 +2335,8 @@ m_pMessagesStatusForm && m_pMessagesStatusForm->isVisible()); m_ui.SessionToolButton->setChecked( m_pSessionForm && m_pSessionForm->isVisible()); + m_ui.GraphToolButton->setChecked( + m_pGraphForm && m_pGraphForm->isVisible()); m_ui.ConnectionsToolButton->setChecked( m_pConnectionsForm && m_pConnectionsForm->isVisible()); m_ui.PatchbayToolButton->setChecked( @@ -2271,24 +2439,11 @@ secs -= (float) ss; } + // Raw milliseconds QString sTemp; - switch (m_pSetup->iTimeFormat) { - case 1: // Tenths of second. - sTemp.sprintf("%02u:%02u:%02u.%u", hh, mm, ss, - (unsigned int) (secs * 10.0f)); - break; - case 2: // Hundredths of second. - sTemp.sprintf("%02u:%02u:%02u.%02u", hh, mm, ss, - (unsigned int) (secs * 100.0f)); - break; - case 3: // Raw milliseconds - sTemp.sprintf("%02u:%02u:%02u.%03u", hh, mm, ss, - (unsigned int) (secs * 1000.0f)); - break; - default: // No second decimation. - sTemp.sprintf("%02u:%02u:%02u", hh, mm, ss); - break; - } + + sTemp.sprintf("%02u:%02u:%02u.%03u", + hh, mm, ss, (unsigned int) (secs * 1000.0f)); return sTemp; } @@ -2298,7 +2453,7 @@ QString qjackctlMainForm::formatElapsedTime ( int iStatusItem, const QTime& t, bool bElapsed ) const { - QString sTemp = m_sTimeDashes; + QString sTemp = c_szTimeDashes; QString sText; // Compute and format elapsed time. @@ -2331,10 +2486,10 @@ void qjackctlMainForm::updateElapsedTimes (void) { // Display time remaining on start delay... - if (m_iTimerDelay < m_iStartDelay) + if (m_iTimerDelay < m_iStartDelay) { m_ui.TimeDisplayTextLabel->setText(formatTime( float(m_iStartDelay - m_iTimerDelay) / 1000.0f)); - else { + } else { updateStatusItem(STATUS_RESET_TIME, formatElapsedTime(STATUS_RESET_TIME, m_tResetLast, true)); @@ -2416,7 +2571,7 @@ // Don't need to nothing, it was handled on qjackctl_buffer_size_callback; // just log this event as routine. appendMessagesColor(tr("Buffer size change (%1).") - .arg((int) g_nframes), "#996633"); + .arg((int) g_buffsize), "#996633"); } @@ -2427,12 +2582,22 @@ appendMessagesColor(tr("Shutdown notification."), "#cc6666"); // SHUTDOWN: JACK client handle might not be valid anymore... m_bJackShutdown = true; - // m_pJackClient = NULL; + // m_pJackClient = nullptr; // Do what has to be done. stopJackServer(); } +// Jack freewheel event notifier. +void qjackctlMainForm::freeNotifyEvent (void) +{ + // Log this event. + appendMessagesColor(g_freewheel + ? tr("Freewheel started...") + : tr("Freewheel exited."), "#996633"); +} + + // Process exit event notifier. void qjackctlMainForm::exitNotifyEvent (void) { @@ -2446,7 +2611,7 @@ jackFinished(); break; case QProcess::Crashed: - #if defined(WIN32) + #if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) if (!m_bJackStopped) #endif appendMessagesColor(tr("JACK has crashed."), "#cc3366"); @@ -2489,9 +2654,12 @@ void qjackctlMainForm::alsaNotifySlot ( int /*fd*/ ) { #ifdef CONFIG_ALSA_SEQ - snd_seq_event_t *pAlsaEvent; - snd_seq_event_input(m_pAlsaSeq, &pAlsaEvent); - snd_seq_free_event(pAlsaEvent); + do { + snd_seq_event_t *pAlsaEvent; + snd_seq_event_input(m_pAlsaSeq, &pAlsaEvent); + snd_seq_free_event(pAlsaEvent); + } + while (snd_seq_event_input_pending(m_pAlsaSeq, 0) > 0); #endif // Log some message here, if new. if (m_iAlsaRefresh == 0) @@ -2506,6 +2674,12 @@ // Timer callback funtion. void qjackctlMainForm::timerSlot (void) { + // Is it about to restart? + if (m_bJackRestart && m_pJack == nullptr) { + m_bJackRestart = false; + startJack(); + } + // Is it the first shot on server start after a few delay? if (m_iTimerDelay < m_iStartDelay) { m_iTimerDelay += QJACKCTL_TIMER_MSECS; @@ -2518,7 +2692,7 @@ } // Is the connection patchbay dirty enough? - if (m_pConnectionsForm) { + if (m_pConnectionsForm && !g_freewheel) { const QString sEllipsis = "..."; // Are we about to enforce an audio connections persistence profile? if (m_iJackDirty > 0) { @@ -2543,7 +2717,7 @@ refreshAlsaConnections(); } // Are we about to refresh it, really? - if (m_iJackRefresh > 0 && m_pJackClient != NULL) { + if (m_iJackRefresh > 0 && m_pJackClient != nullptr) { m_iJackRefresh = 0; #ifdef CONFIG_JACK_METADATA const bool bClear = (m_iJackPropertyChange > 0); @@ -2555,7 +2729,7 @@ m_pConnectionsForm->refreshMidi(true); #endif } - if (m_iAlsaRefresh > 0 && m_pAlsaSeq != NULL) { + if (m_iAlsaRefresh > 0 && m_pAlsaSeq != nullptr) { m_iAlsaRefresh = 0; m_pConnectionsForm->refreshAlsa(true); } @@ -2567,6 +2741,10 @@ m_pPatchbayForm->refreshForm(); } + // Is the graph dirty enough? + if (m_pGraphForm) + m_pGraphForm->refresh(); + // Update some statistical fields, directly. refreshStatus(); @@ -2634,10 +2812,47 @@ void qjackctlMainForm::queryDisconnect ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort, int iSocketType ) { + queryDisconnect( + pOPort->clientName(), pOPort->portName(), + pIPort->clientName(), pIPort->portName(), iSocketType); +} + + +void qjackctlMainForm::queryDisconnect ( + qjackctlGraphPort *port1, qjackctlGraphPort *port2 ) +{ + qjackctlGraphNode *node1 = port1->portNode(); + qjackctlGraphNode *node2 = port2->portNode(); + + if (node1 == nullptr || node2 == nullptr) + return; + + int iSocketType = QJACKCTL_SOCKETTYPE_DEFAULT; + if (qjackctlJackGraph::audioPortType() == port1->portType()) + iSocketType = QJACKCTL_SOCKETTYPE_JACK_AUDIO; + else + if (qjackctlJackGraph::midiPortType() == port1->portType()) + iSocketType = QJACKCTL_SOCKETTYPE_JACK_MIDI; +#ifdef CONFIG_ALSA_SEQ + else + if (qjackctlAlsaGraph::midiPortType() == port1->portType()) + iSocketType = QJACKCTL_SOCKETTYPE_ALSA_MIDI; +#endif + + queryDisconnect( + node1->nodeName(), port1->portName(), + node2->nodeName(), port2->portName(), iSocketType); +} + + +void qjackctlMainForm::queryDisconnect ( + const QString& sOClientName, const QString& sOPortName, + const QString& sIClientName, const QString& sIPortName, + int iSocketType ) +{ if (m_pSetup->bActivePatchbay && m_pSetup->bQueryDisconnect) { qjackctlPatchbayCable *pCable = m_pPatchbayRack->findCable( - pOPort->clientName(), pOPort->portName(), - pIPort->clientName(), pIPort->portName(), iSocketType); + sOClientName, sOPortName, sIClientName, sIPortName, iSocketType); if (pCable) { bool bQueryDisconnect = true; const QString& sTitle @@ -2703,11 +2918,11 @@ return true; // Have it a setup? - if (m_pSetup == NULL) + if (m_pSetup == nullptr) return false; // Time to (re)load current preset aliases? - if (m_pConnectionsForm && !m_pConnectionsForm->loadAliases()) + if (!m_pSetup->loadAliases()) return false; // Make sure all status(es) will be updated ASAP. @@ -2734,7 +2949,7 @@ m_pSetup->sServerName.toUtf8().constData()); } - if (m_pJackClient == NULL) { + if (m_pJackClient == nullptr) { if (!bDetach) { QStringList errs; if (status & JackFailure) @@ -2770,12 +2985,22 @@ // Set notification callbacks. jack_set_graph_order_callback(m_pJackClient, qjackctl_graph_order_callback, this); + jack_set_client_registration_callback(m_pJackClient, + qjackctl_client_registration_callback, this); jack_set_port_registration_callback(m_pJackClient, qjackctl_port_registration_callback, this); + jack_set_port_connect_callback(m_pJackClient, + qjackctl_port_connect_callback, this); +#ifdef CONFIG_JACK_PORT_RENAME + jack_set_port_rename_callback(m_pJackClient, + qjackctl_port_rename_callback, this); +#endif jack_set_xrun_callback(m_pJackClient, qjackctl_xrun_callback, this); jack_set_buffer_size_callback(m_pJackClient, qjackctl_buffer_size_callback, this); + jack_set_freewheel_callback(m_pJackClient, + qjackctl_freewheel_callback, this); jack_on_shutdown(m_pJackClient, qjackctl_on_shutdown, this); #ifdef CONFIG_JACK_METADATA @@ -2784,7 +3009,10 @@ #endif // First knowledge about buffer size. - g_nframes = jack_get_buffer_size(m_pJackClient); + g_buffsize = jack_get_buffer_size(m_pJackClient); + + // Sure we're not freewheeling at this point... + g_freewheel = 0; // Reconstruct our connections and session... if (m_pConnectionsForm) { @@ -2794,19 +3022,28 @@ if (m_pSessionForm) m_pSessionForm->stabilizeForm(true); +#ifdef CONFIG_DBUS + // Current D-BUS configuration makes it the default preset always... + if (m_pDBusConfig && !m_bDBusDetach) { + const QString& sPreset = m_pSetup->sDefPresetName; + if (m_pSetup->loadPreset(m_preset, sPreset) + && getDBusParameters(m_preset)) { + m_pSetup->sDefPreset = sPreset; + // Have current preset changed anyhow? + if (m_pSetupForm) + m_pSetupForm->updateCurrentPreset(m_preset); + } + } +#endif + // Save server configuration file. if (m_pSetup->bServerConfig && !m_sJackCmdLine.isEmpty()) { - QString sJackCmdLine = m_sJackCmdLine; - if (m_pSetup->bServerConfigTemp) { - int iPos = sJackCmdLine.indexOf(' '); - if (iPos > 0) - sJackCmdLine = sJackCmdLine.insert(iPos, " -T"); - } - QString sFilename = ::getenv("HOME"); - sFilename += '/' + m_pSetup->sServerConfigName; + const QString sFilename + = QString::fromUtf8(::getenv("HOME")) + + '/' + m_pSetup->sServerConfigName; QFile file(sFilename); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - QTextStream(&file) << sJackCmdLine << endl; + QTextStream(&file) << m_sJackCmdLine << endl; file.close(); appendMessagesColor( tr("Server configuration saved to \"%1\".") @@ -2814,11 +3051,11 @@ } } - // Do not forget to reset XRUN stats variables. - if (!bDetach) - resetXrunStats(); - else // We'll flag that we've been detached! + // We'll flag that we've been detached! + if (bDetach) m_bJackDetach = true; + else // Do not forget to reset XRUN stats variables... + resetXrunStats(); // Activate us as a client... jack_activate(m_pJackClient); @@ -2838,7 +3075,11 @@ m_ui.TransportTimeTextLabel->setPalette(pal); // Whether we've started detached, just change active status. - updateServerState(m_bJackDetach ? QJACKCTL_ACTIVE : QJACKCTL_STARTED); + updateServerState(m_bJackDetach + #ifdef CONFIG_DBUS + && !(m_pDBusConfig && m_bDBusStarted) + #endif + ? QJACKCTL_ACTIVE : QJACKCTL_STARTED); m_ui.StopToolButton->setEnabled(true); // Log success here. @@ -2883,7 +3124,7 @@ if (m_pJackClient) { jack_deactivate(m_pJackClient); jack_client_close(m_pJackClient); - m_pJackClient = NULL; + m_pJackClient = nullptr; // Log deactivation here. appendMessages(tr("Client deactivated.")); } @@ -2896,8 +3137,11 @@ m_pConnectionsForm->stabilizeAudio(false); m_pConnectionsForm->stabilizeMidi(false); } + if (m_pSessionForm) m_pSessionForm->stabilizeForm(false); + if (m_pGraphForm) + m_pGraphForm->jack_shutdown(); // Displays are dimmed again. QPalette pal; @@ -2919,7 +3163,7 @@ // JACK client accessor. jack_client_t *qjackctlMainForm::jackClient (void) const { - return (m_bJackShutdown ? NULL : m_pJackClient); + return (m_bJackShutdown ? nullptr : m_pJackClient); } @@ -2937,10 +3181,13 @@ refreshAlsaConnections(); } + void qjackctlMainForm::refreshJackConnections (void) { -#if 0 // Hack this as for a while... + if (m_pGraphForm) + m_pGraphForm->jack_changed(); +#if 0 if (m_pConnectionsForm && m_iJackRefresh == 0) { m_pConnectionsForm->stabilizeAudio(false); m_pConnectionsForm->stabilizeMidi(false); @@ -2951,10 +3198,13 @@ m_iJackRefresh++; } + void qjackctlMainForm::refreshAlsaConnections (void) { -#if 0 // Hack this as for a while... + if (m_pGraphForm) + m_pGraphForm->alsa_changed(); +#if 0 if (m_pConnectionsForm && m_iAlsaRefresh == 0) m_pConnectionsForm->stabilizeAlsa(false); #endif @@ -2997,6 +3247,8 @@ raise(); activateWindow(); } + + updateContextMenu(); } @@ -3013,12 +3265,14 @@ m_pMessagesStatusForm->activateWindow(); } } + + updateContextMenu(); } void qjackctlMainForm::toggleMessagesForm (void) { if (m_pMessagesStatusForm) { - int iTabPage = m_pMessagesStatusForm->tabPage(); + const int iTabPage = m_pMessagesStatusForm->tabPage(); m_pMessagesStatusForm->setTabPage( int(qjackctlMessagesStatusForm::MessagesTab)); if (m_pMessagesStatusForm->isVisible() @@ -3033,7 +3287,7 @@ void qjackctlMainForm::toggleStatusForm (void) { if (m_pMessagesStatusForm) { - int iTabPage = m_pMessagesStatusForm->tabPage(); + const int iTabPage = m_pMessagesStatusForm->tabPage(); m_pMessagesStatusForm->setTabPage( int(qjackctlMessagesStatusForm::StatusTab)); if (m_pMessagesStatusForm->isVisible() @@ -3050,7 +3304,7 @@ { if (m_pSessionForm) { m_pSetup->saveWidgetGeometry(m_pSessionForm); - m_pSessionForm->stabilizeForm(m_pJackClient != NULL); + m_pSessionForm->stabilizeForm(m_pJackClient != nullptr); if (m_pSessionForm->isVisible()) { m_pSessionForm->hide(); } else { @@ -3059,6 +3313,8 @@ m_pSessionForm->activateWindow(); } } + + updateContextMenu(); } @@ -3067,9 +3323,9 @@ { if (m_pConnectionsForm) { m_pSetup->saveWidgetGeometry(m_pConnectionsForm); - m_pConnectionsForm->stabilizeAudio(m_pJackClient != NULL); - m_pConnectionsForm->stabilizeMidi(m_pJackClient != NULL); - m_pConnectionsForm->stabilizeAlsa(m_pAlsaSeq != NULL); + m_pConnectionsForm->stabilizeAudio(m_pJackClient != nullptr); + m_pConnectionsForm->stabilizeMidi(m_pJackClient != nullptr); + m_pConnectionsForm->stabilizeAlsa(m_pAlsaSeq != nullptr); if (m_pConnectionsForm->isVisible()) { m_pConnectionsForm->hide(); } else { @@ -3078,6 +3334,8 @@ m_pConnectionsForm->activateWindow(); } } + + updateContextMenu(); } @@ -3094,6 +3352,26 @@ m_pPatchbayForm->activateWindow(); } } + + updateContextMenu(); +} + + +// Graph form requester slot. +void qjackctlMainForm::toggleGraphForm (void) +{ + if (m_pGraphForm) { + m_pSetup->saveWidgetGeometry(m_pGraphForm); + if (m_pGraphForm->isVisible()) { + m_pGraphForm->hide(); + } else { + m_pGraphForm->show(); + m_pGraphForm->raise(); + m_pGraphForm->activateWindow(); + } + } + + updateContextMenu(); } @@ -3110,6 +3388,8 @@ m_pSetupForm->activateWindow(); } } + + updateContextMenu(); } @@ -3130,6 +3410,7 @@ appendMessages(tr("Transport rewind.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; + ++m_iMenuRefresh; } #endif } @@ -3153,6 +3434,7 @@ m_fSkipAccel *= 1.1f; // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; + ++m_iMenuRefresh; } #endif } @@ -3180,6 +3462,7 @@ appendMessages(tr("Transport start.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; + ++m_iMenuRefresh; } #endif } @@ -3195,6 +3478,7 @@ appendMessages(tr("Transport stop.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; + ++m_iMenuRefresh; } #endif } @@ -3218,6 +3502,7 @@ m_fSkipAccel *= 1.1f; // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; + ++m_iMenuRefresh; } #endif } @@ -3230,7 +3515,7 @@ const QString b = "-.-.---"; const QString sStopped = tr("Stopped"); - m_iStatusRefresh++; + ++m_iStatusRefresh; if (m_pJackClient) { const QString s = " "; @@ -3241,11 +3526,11 @@ const bool bPlaying = (tstate == JackTransportRolling || tstate == JackTransportLooping); // Transport timecode position. - // if (bPlaying) + // if (bPlaying) updateStatusItem(STATUS_TRANSPORT_TIME, formatTime(float(tpos.frame) / float(tpos.frame_rate))); - // else - // updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); + // else + // updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); // Transport barcode position (bar:beat.tick) if (tpos.valid & JackPositionBBT) { updateStatusItem(STATUS_TRANSPORT_BBT, @@ -3256,7 +3541,7 @@ updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); } - #endif // !CONFIG_JACK_TRANSPORT + #endif // !CONFIG_JACK_TRANSPORT // Less frequent status items update... if (m_iStatusRefresh >= QJACKCTL_STATUS_CYCLE) { m_iStatusRefresh = 0; @@ -3276,13 +3561,13 @@ .arg(m_iXrunCount)); } } - #endif + #endif // !CONFIG_SYSTEM_TRAY updateStatusItem(STATUS_DSP_LOAD, tr("%1 %").arg(fDspLoad, 0, f, p)); updateStatusItem(STATUS_SAMPLE_RATE, tr("%1 Hz").arg(jack_get_sample_rate(m_pJackClient))); updateStatusItem(STATUS_BUFFER_SIZE, - tr("%1 frames").arg(g_nframes)); + tr("%1 frames").arg(g_buffsize)); // Blink server mode indicator?... if (m_pSetup && m_pSetup->bDisplayBlink) { QPalette pal; @@ -3294,11 +3579,17 @@ const bool bRealtime = jack_is_realtime(m_pJackClient); updateStatusItem(STATUS_REALTIME, (bRealtime ? tr("Yes") : tr("No"))); - m_ui.ServerModeTextLabel->setText(bRealtime ? tr("RT") : n); #else updateStatusItem(STATUS_REALTIME, n); + #endif // !CONFIG_JACK_REALTIME + if (g_freewheel) + m_ui.ServerModeTextLabel->setText(tr("FW")); + else + #ifdef CONFIG_JACK_REALTIME + m_ui.ServerModeTextLabel->setText(bRealtime ? tr("RT") : n); + #else m_ui.ServerModeTextLabel->setText(n); - #endif // !CONFIG_JACK_REALTIME + #endif // !CONFIG_JACK_REALTIME #ifdef CONFIG_JACK_TRANSPORT switch (tstate) { case JackTransportStarting: @@ -3336,11 +3627,11 @@ updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); - #endif // !CONFIG_JACK_TRANSPORT + #endif // !CONFIG_JACK_TRANSPORT #ifdef CONFIG_JACK_MAX_DELAY updateStatusItem(STATUS_MAX_DELAY, tr("%1 msec") .arg(0.001f * jack_get_max_delayed_usecs(m_pJackClient))); - #endif + #endif // !CONFIG_JACK_MAX_DELAY // Check if we're have some XRUNs to report... if (m_iXrunSkips > 0) { // Maybe we've skipped some... @@ -3365,8 +3656,8 @@ m_pSystemTray->setBackground(color); } } - #endif - } // No need to update often if we're just idle... + #endif // !CONFIG_SYSTEM_TRAY + } // No need to update often if we're just idle... else if (m_iStatusRefresh >= QJACKCTL_STATUS_CYCLE) { m_iStatusRefresh = 0; updateStatusItem(STATUS_DSP_LOAD, n); @@ -3375,7 +3666,7 @@ updateStatusItem(STATUS_REALTIME, n); m_ui.ServerModeTextLabel->setText(n); updateStatusItem(STATUS_TRANSPORT_STATE, n); - updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); + updateStatusItem(STATUS_TRANSPORT_TIME, c_szTimeDashes); updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); m_ui.RewindToolButton->setEnabled(false); @@ -3388,6 +3679,11 @@ // Elapsed times should be rigorous... updateElapsedTimes(); + + if (m_iMenuRefresh > 0) { + m_iMenuRefresh = 0; + updateContextMenu(); + } } @@ -3515,7 +3811,7 @@ sTitle = m_pSetup->sServerName; if (sTitle.isEmpty()) - sTitle = ::getenv("JACK_DEFAULT_SERVER"); + sTitle = QString::fromUtf8(::getenv("JACK_DEFAULT_SERVER")); if (sTitle.isEmpty()) sTitle = m_pSetup->sDefPresetName; updateStatusItem(STATUS_SERVER_NAME, sTitle); @@ -3531,6 +3827,9 @@ // Now's time to update main window // caption title and status immediately. updateTitleStatus(); + + // Update context-menu for sure... + updateContextMenu(); } @@ -3539,14 +3838,19 @@ // System tray master switcher. void qjackctlMainForm::updateSystemTray (void) { + if (!QSystemTrayIcon::isSystemTrayAvailable()) + return; + if (!m_pSetup->bSystemTray && m_pSystemTray) { // Strange enough, this would close the application too. // m_pSystemTray->close(); delete m_pSystemTray; - m_pSystemTray = NULL; + m_pSystemTray = nullptr; } - if (m_pSetup->bSystemTray && m_pSystemTray == NULL) { + + if (m_pSetup->bSystemTray && m_pSystemTray == nullptr) { m_pSystemTray = new qjackctlSystemTray(this); + m_pSystemTray->setContextMenu(&m_menu); QObject::connect(m_pSystemTray, SIGNAL(clicked()), SLOT(toggleMainForm())); @@ -3556,9 +3860,6 @@ QObject::connect(m_pSystemTray, SIGNAL(doubleClicked()), SLOT(toggleJack())); - QObject::connect(m_pSystemTray, - SIGNAL(contextMenuRequested(const QPoint &)), - SLOT(contextMenu(const QPoint &))); m_pSystemTray->show(); } else { // Make sure the main widget is visible. @@ -3566,15 +3867,18 @@ raise(); activateWindow(); } + + updateContextMenu(); } #endif -// System tray context menu request slot. -void qjackctlMainForm::contextMenu ( const QPoint& pos ) +// Common context menu request slots. +void qjackctlMainForm::updateContextMenu (void) { - QMenu menu(this); + m_menu.clear(); + QAction *pAction; QString sHideMinimize = tr("Mi&nimize"); @@ -3585,25 +3889,25 @@ sShowRestore = tr("S&how"); } #endif - pAction = menu.addAction(isVisible() + pAction = m_menu.addAction(isVisible() ? sHideMinimize : sShowRestore, this, SLOT(toggleMainForm())); - menu.addSeparator(); + m_menu.addSeparator(); - if (m_pJackClient == NULL) { - pAction = menu.addAction(QIcon(":/images/start1.png"), + if (m_pJackClient == nullptr) { + pAction = m_menu.addAction(QIcon(":/images/start1.png"), tr("&Start"), this, SLOT(startJack())); } else { - pAction = menu.addAction(QIcon(":/images/stop1.png"), + pAction = m_menu.addAction(QIcon(":/images/stop1.png"), tr("&Stop"), this, SLOT(stopJack())); } - pAction = menu.addAction(QIcon(":/images/reset1.png"), + pAction = m_menu.addAction(QIcon(":/images/reset1.png"), tr("&Reset"), this, SLOT(resetXrunStats())); -// pAction->setEnabled(m_pJackClient != NULL); - menu.addSeparator(); +// pAction->setEnabled(m_pJackClient != nullptr); + m_menu.addSeparator(); // Construct the actual presets menu, // overriding the last one, if any... - QMenu *pPresetsMenu = menu.addMenu(tr("&Presets")); + QMenu *pPresetsMenu = m_menu.addMenu(tr("&Presets")); // Assume QStringList iteration follows item index order (0,1,2...) int iPreset = 0; QStringListIterator iter(m_pSetup->presets); @@ -3613,7 +3917,7 @@ pAction->setCheckable(true); pAction->setChecked(sPreset == m_pSetup->sDefPreset); pAction->setData(iPreset); - iPreset++; + ++iPreset; } // Default preset always present, and has invalid index parameter (-1)... if (iPreset > 0) @@ -3625,13 +3929,13 @@ QObject::connect(pPresetsMenu, SIGNAL(triggered(QAction*)), SLOT(activatePresetsMenu(QAction*))); - menu.addSeparator(); + m_menu.addSeparator(); if (m_pSessionForm) { - bool bEnabled = (m_pJackClient != NULL); + const bool bEnabled = (m_pJackClient != nullptr); const QString sTitle = tr("S&ession"); const QIcon iconSession(":/images/session1.png"); - QMenu *pSessionMenu = menu.addMenu(sTitle); + QMenu *pSessionMenu = m_menu.addMenu(sTitle); pSessionMenu->setIcon(iconSession); pAction = pSessionMenu->addAction(m_pSessionForm->isVisible() ? tr("&Hide") : tr("S&how"), @@ -3643,7 +3947,7 @@ pAction->setEnabled(bEnabled); QMenu *pRecentMenu = m_pSessionForm->recentMenu(); pAction = pSessionMenu->addMenu(pRecentMenu); - pAction->setEnabled(m_pJackClient != NULL && !pRecentMenu->isEmpty()); + pAction->setEnabled(m_pJackClient != nullptr && !pRecentMenu->isEmpty()); pSessionMenu->addSeparator(); pAction = pSessionMenu->addAction(QIcon(":/images/save1.png"), tr("&Save..."), @@ -3673,29 +3977,33 @@ pAction->setEnabled(bEnabled); } - pAction = menu.addAction(QIcon(":/images/messages1.png"), + pAction = m_menu.addAction(QIcon(":/images/messages1.png"), tr("&Messages"), this, SLOT(toggleMessagesForm())); pAction->setCheckable(true); pAction->setChecked(m_pMessagesStatusForm && m_pMessagesStatusForm->isVisible() && m_pMessagesStatusForm->tabPage() == qjackctlMessagesStatusForm::MessagesTab); - pAction = menu.addAction(QIcon(":/images/status1.png"), + pAction = m_menu.addAction(QIcon(":/images/status1.png"), tr("St&atus"), this, SLOT(toggleStatusForm())); pAction->setCheckable(true); pAction->setChecked(m_pMessagesStatusForm && m_pMessagesStatusForm->isVisible() && m_pMessagesStatusForm->tabPage() == qjackctlMessagesStatusForm::StatusTab); - pAction = menu.addAction(QIcon(":/images/connections1.png"), + pAction = m_menu.addAction(QIcon(":/images/connections1.png"), tr("&Connections"), this, SLOT(toggleConnectionsForm())); pAction->setCheckable(true); pAction->setChecked(m_pConnectionsForm && m_pConnectionsForm->isVisible()); - pAction = menu.addAction(QIcon(":/images/patchbay1.png"), + pAction = m_menu.addAction(QIcon(":/images/patchbay1.png"), tr("Patch&bay"), this, SLOT(togglePatchbayForm())); pAction->setCheckable(true); pAction->setChecked(m_pPatchbayForm && m_pPatchbayForm->isVisible()); - menu.addSeparator(); + pAction = m_menu.addAction(QIcon(":/images/graph1.png"), + tr("&Graph"), this, SLOT(toggleGraphForm())); + pAction->setCheckable(true); + pAction->setChecked(m_pGraphForm && m_pGraphForm->isVisible()); + m_menu.addSeparator(); - QMenu *pTransportMenu = menu.addMenu(tr("&Transport")); + QMenu *pTransportMenu = m_menu.addMenu(tr("&Transport")); pAction = pTransportMenu->addAction(QIcon(":/images/rewind1.png"), tr("&Rewind"), this, SLOT(transportRewind())); pAction->setEnabled(m_ui.RewindToolButton->isEnabled()); @@ -3711,23 +4019,21 @@ // pAction = pTransportMenu->addAction(QIcon(":/images/forward1.png"), // tr("&Forward"), this, SLOT(transportForward())); // pAction->setEnabled(m_ui.ForwardToolButton->isEnabled()); - menu.addSeparator(); + m_menu.addSeparator(); - pAction = menu.addAction(QIcon(":/images/setup1.png"), + pAction = m_menu.addAction(QIcon(":/images/setup1.png"), tr("Set&up..."), this, SLOT(showSetupForm())); pAction->setCheckable(true); pAction->setChecked(m_pSetupForm && m_pSetupForm->isVisible()); if (!m_pSetup->bRightButtons || !m_pSetup->bTransportButtons) { - pAction = menu.addAction(QIcon(":/images/about1.png"), + pAction = m_menu.addAction(QIcon(":/images/about1.png"), tr("Ab&out..."), this, SLOT(showAboutForm())); } - menu.addSeparator(); + m_menu.addSeparator(); - pAction = menu.addAction(QIcon(":/images/quit1.png"), + pAction = m_menu.addAction(QIcon(":/images/quit1.png"), tr("&Quit"), this, SLOT(quitMainForm())); - - menu.exec(pos); } @@ -3737,21 +4043,60 @@ // If client service is currently running, // prompt the effective warning... if (m_pJackClient) { + bool bQueryRestart = m_pSetup->bQueryRestart; const QString& sTitle - = tr("Warning") + " - " QJACKCTL_SUBTITLE1; + = tr("Warning"); const QString& sText = tr("Server settings will be only effective after\n" "restarting the JACK audio server."); - #ifdef CONFIG_SYSTEM_TRAY - if (m_pSetup->bSystemTray && m_pSystemTray - && QSystemTrayIcon::supportsMessages()) { - m_pSystemTray->showMessage(sTitle, sText, QSystemTrayIcon::Warning); + // Should ask the user whether to + // restart the JACK audio server... + if (m_pSetup->bQueryShutdown) { + const QString& sQueryText = sText + "\n\n" + + tr("Do you want to restart the JACK audio server?"); + #if 0//QJACKCTL_QUERY_RESTART + bQueryRestart = (QMessageBox::warning(this, sTitle, sQueryText, + QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok); + #else + QMessageBox mbox(this); + mbox.setIcon(QMessageBox::Warning); + mbox.setWindowTitle(sTitle); + mbox.setText(sQueryText); + mbox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + QCheckBox cbox(tr("Don't ask this again")); + cbox.setChecked(false); + cbox.blockSignals(true); + mbox.addButton(&cbox, QMessageBox::ActionRole); + bQueryRestart = (mbox.exec() == QMessageBox::Ok); + if (cbox.isChecked()) { + m_pSetup->bQueryRestart = bQueryRestart; + m_pSetup->bQueryShutdown = false; + } + #endif } else - #endif - QMessageBox::warning(this, sTitle, sText); - } // Otherwise, it will be just as convenient to update status... + // Show the old warning message... + if (!bQueryRestart) { + #ifdef CONFIG_SYSTEM_TRAY + if (m_pSetup->bSystemTray && m_pSystemTray + && QSystemTrayIcon::supportsMessages()) { + m_pSystemTray->showMessage( + sTitle + " - " QJACKCTL_SUBTITLE1, + sText, QSystemTrayIcon::Warning); + } + else + #endif + QMessageBox::warning(this, sTitle, sText); + } + // Or restart immediately!... + if (bQueryRestart) { + stopJackServer(); + m_bJackRestart = true; + } + } // Otherwise, it will be just as convenient to update status... else updateTitleStatus(); + + updateContextMenu(); } @@ -3759,14 +4104,16 @@ void qjackctlMainForm::showDirtySetupWarning (void) { const QString& sTitle - = tr("Information") + " - " QJACKCTL_SUBTITLE1; + = tr("Information"); const QString& sText = tr("Some settings will be only effective\n" "the next time you start this program."); #ifdef CONFIG_SYSTEM_TRAY if (m_pSetup->bSystemTray && m_pSystemTray && QSystemTrayIcon::supportsMessages()) { - m_pSystemTray->showMessage(sTitle, sText, QSystemTrayIcon::Information); + m_pSystemTray->showMessage( + sTitle + " - " QJACKCTL_SUBTITLE1, + sText, QSystemTrayIcon::Information); } else #endif @@ -3791,18 +4138,36 @@ // Select the current default preset (by index). void qjackctlMainForm::activatePreset ( int iPreset ) { - if (m_pConnectionsForm && !m_pConnectionsForm->queryClose()) + if (!queryClosePreset()) return; if (iPreset >= 0 && iPreset < m_pSetup->presets.count()) - m_pSetup->sDefPreset = m_pSetup->presets[iPreset]; + m_pSetup->sDefPreset = m_pSetup->presets.at(iPreset); else m_pSetup->sDefPreset = m_pSetup->sDefPresetName; + // Have current preset changed anyhow? + if (m_pSetupForm) + m_pSetupForm->updateCurrentPreset(); + showDirtySettingsWarning(); } +// Select the current active patchbay profile (by path). +void qjackctlMainForm::activatePatchbay ( const QString& sPatchbayPath ) +{ + if (QFileInfo(sPatchbayPath).exists() && !isActivePatchbay(sPatchbayPath)) { + setActivePatchbay(sPatchbayPath); + if (m_pPatchbayForm) { + m_pPatchbayForm->loadPatchbayFile(sPatchbayPath); + m_pPatchbayForm->updateRecentPatchbays(); + m_pPatchbayForm->stabilizeForm(); + } + } +} + + // Close main form slot. void qjackctlMainForm::quitMainForm (void) { @@ -3818,8 +4183,7 @@ // Context menu event handler. void qjackctlMainForm::contextMenuEvent ( QContextMenuEvent *pEvent ) { - // We'll just show up the usual system tray menu. - contextMenu(pEvent->globalPos()); + m_menu.exec(pEvent->globalPos()); } @@ -3835,91 +4199,93 @@ #ifdef CONFIG_DBUS // D-BUS: Set/reset parameter values from current selected preset options. -void qjackctlMainForm::setDBusParameters (void) +void qjackctlMainForm::setDBusParameters ( const qjackctlPreset& preset ) { - // Set configuration parameters... - const bool bDummy = (m_preset.sDriver == "dummy"); - const bool bSun = (m_preset.sDriver == "sun"); - const bool bOss = (m_preset.sDriver == "oss"); - const bool bAlsa = (m_preset.sDriver == "alsa"); - const bool bPortaudio = (m_preset.sDriver == "portaudio"); - const bool bCoreaudio = (m_preset.sDriver == "coreaudio"); - const bool bFreebob = (m_preset.sDriver == "freebob"); - const bool bFirewire = (m_preset.sDriver == "firewire"); - const bool bNet = (m_preset.sDriver == "net" || m_preset.sDriver == "netone"); + if (m_pDBusConfig == nullptr) + return; - setDBusEngineParameter("name", - m_pSetup->sServerName, - !m_pSetup->sServerName.isEmpty()); - setDBusEngineParameter("verbose", m_preset.bVerbose); - setDBusEngineParameter("realtime", m_preset.bRealtime); + // Set configuration parameters... + const bool bDummy = (preset.sDriver == "dummy"); + const bool bSun = (preset.sDriver == "sun"); + const bool bOss = (preset.sDriver == "oss"); + const bool bAlsa = (preset.sDriver == "alsa"); + const bool bPortaudio = (preset.sDriver == "portaudio"); + const bool bCoreaudio = (preset.sDriver == "coreaudio"); + const bool bFirewire = (preset.sDriver == "firewire"); + const bool bNet = (preset.sDriver == "net" || m_preset.sDriver == "netone"); + +// setDBusEngineParameter("name", +// m_pSetup->sServerName, +// !m_pSetup->sServerName.isEmpty()); + setDBusEngineParameter("sync", preset.bSync); + setDBusEngineParameter("verbose", preset.bVerbose); + setDBusEngineParameter("realtime", preset.bRealtime); setDBusEngineParameter("realtime-priority", - m_preset.iPriority, - m_preset.bRealtime && m_preset.iPriority > 5); -// setDBusEngineParameter("port-max", -// m_preset.iPortMax, -// m_preset.iPortMax > 0); + preset.iPriority, + preset.bRealtime && preset.iPriority > 5); + setDBusEngineParameter("port-max", + (unsigned int) preset.iPortMax, + preset.iPortMax > 0 && preset.iPortMax != 256); setDBusEngineParameter("client-timeout", - m_preset.iTimeout, - m_preset.iTimeout > 0); -// setDBusEngineParameter("no-memlock", m_preset.bNoMemLock); -// setDBusEngineParameter("unlock-mem", -// m_preset.bUnlockMem, -// !m_preset.bNoMemLock); - setDBusEngineParameter("driver", m_preset.sDriver); - if ((bAlsa || bPortaudio) && (m_preset.iAudio != QJACKCTL_DUPLEX || - m_preset.sInDevice.isEmpty() || m_preset.sOutDevice.isEmpty())) { - QString sInterface = m_preset.sInterface; + preset.iTimeout, + preset.iTimeout > 0 && preset.iTimeout != 500); +// setDBusEngineParameter("no-mem-lock", preset.bNoMemLock); +// setDBusEngineParameter("libs-unlock", +// preset.bUnlockMem, +// !preset.bNoMemLock); + setDBusEngineParameter("driver", preset.sDriver); + if ((bAlsa || bPortaudio) && (preset.iAudio != QJACKCTL_DUPLEX || + preset.sInDevice.isEmpty() || preset.sOutDevice.isEmpty())) { + QString sInterface = preset.sInterface; if (bAlsa && sInterface.isEmpty()) sInterface = "hw:0"; setDBusDriverParameter("device", sInterface); } if (bPortaudio) { setDBusDriverParameter("channel", - (unsigned int) m_preset.iChan, - m_preset.iChan > 0); + (unsigned int) preset.iChan, + preset.iChan > 0); } - if (bCoreaudio || bFreebob || bFirewire) { + if (bCoreaudio || bFirewire) { setDBusDriverParameter("device", - m_preset.sInterface, - !m_preset.sInterface.isEmpty()); + preset.sInterface, + !preset.sInterface.isEmpty()); } if (!bNet) { setDBusDriverParameter("rate", - (unsigned int) m_preset.iSampleRate, - m_preset.iSampleRate > 0); + (unsigned int) preset.iSampleRate, + preset.iSampleRate > 0); setDBusDriverParameter("period", - (unsigned int) m_preset.iFrames, - m_preset.iFrames > 0); + (unsigned int) preset.iFrames, + preset.iFrames > 0); } - if (bAlsa || bSun || bOss || bFreebob || bFirewire) { + if (bAlsa || bSun || bOss || bFirewire) { setDBusDriverParameter("nperiods", - (unsigned int) m_preset.iPeriods, - m_preset.iPeriods > 0); + (unsigned int) preset.iPeriods, + preset.iPeriods > 0); } if (bAlsa) { - setDBusDriverParameter("softmode", m_preset.bSoftMode); - setDBusDriverParameter("monitor", m_preset.bMonitor); - setDBusDriverParameter("shorts", m_preset.bShorts); - setDBusDriverParameter("hwmon", m_preset.bHWMon); - setDBusDriverParameter("hwmeter", m_preset.bHWMeter); + setDBusDriverParameter("softmode", preset.bSoftMode); + setDBusDriverParameter("monitor", preset.bMonitor); + setDBusDriverParameter("shorts", preset.bShorts); + setDBusDriverParameter("hwmeter", preset.bHWMeter); #ifdef CONFIG_JACK_MIDI setDBusDriverParameter("midi-driver", - m_preset.sMidiDriver, - !m_preset.sMidiDriver.isEmpty()); + preset.sMidiDriver, + !preset.sMidiDriver.isEmpty()); #endif } if (bAlsa || bPortaudio) { - QString sInterface = m_preset.sInterface; + QString sInterface = preset.sInterface; if (bAlsa && sInterface.isEmpty()) sInterface = "hw:0"; - QString sInDevice = m_preset.sInDevice; + QString sInDevice = preset.sInDevice; if (sInDevice.isEmpty()) sInDevice = sInterface; - QString sOutDevice = m_preset.sOutDevice; + QString sOutDevice = preset.sOutDevice; if (sOutDevice.isEmpty()) sOutDevice = sInterface; - switch (m_preset.iAudio) { + switch (preset.iAudio) { case QJACKCTL_DUPLEX: setDBusDriverParameter("duplex", true); setDBusDriverParameter("capture", sInDevice); @@ -3937,13 +4303,13 @@ break; } setDBusDriverParameter("inchannels", - (unsigned int) m_preset.iInChannels, - m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK); + (unsigned int) preset.iInChannels, + preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); setDBusDriverParameter("outchannels", - (unsigned int) m_preset.iOutChannels, - m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE); + (unsigned int) preset.iOutChannels, + preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); unsigned char dither = 0; - switch (m_preset.iDither) { + switch (preset.iDither) { case 0: dither = 'n'; break; case 1: dither = 'r'; break; case 2: dither = 's'; break; @@ -3953,58 +4319,46 @@ dither > 0); } else if (bOss || bSun) { - setDBusDriverParameter("ignorehw", m_preset.bIgnoreHW); - setDBusDriverParameter("wordlength", - (unsigned int) m_preset.iWordLength, - m_preset.iWordLength > 0); - QString sInDevice = m_preset.sInDevice; - if (sInDevice.isEmpty() && m_preset.iAudio == QJACKCTL_CAPTURE) - sInDevice = m_preset.sInterface; + QString sInDevice = preset.sInDevice; + if (sInDevice.isEmpty() && preset.iAudio == QJACKCTL_CAPTURE) + sInDevice = preset.sInterface; setDBusDriverParameter("capture", sInDevice, - !sInDevice.isEmpty() && m_preset.iAudio != QJACKCTL_PLAYBACK); - QString sOutDevice = m_preset.sOutDevice; - if (sOutDevice.isEmpty() && m_preset.iAudio == QJACKCTL_PLAYBACK) - sOutDevice = m_preset.sInterface; + !sInDevice.isEmpty() && preset.iAudio != QJACKCTL_PLAYBACK); + QString sOutDevice = preset.sOutDevice; + if (sOutDevice.isEmpty() && preset.iAudio == QJACKCTL_PLAYBACK) + sOutDevice = preset.sInterface; setDBusDriverParameter("playback", sOutDevice, - !sOutDevice.isEmpty() && m_preset.iAudio != QJACKCTL_CAPTURE); + !sOutDevice.isEmpty() && preset.iAudio != QJACKCTL_CAPTURE); setDBusDriverParameter("inchannels", - (unsigned int) m_preset.iInChannels, - m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK); + (unsigned int) preset.iInChannels, + preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); setDBusDriverParameter("outchannels", - (unsigned int) m_preset.iOutChannels, - m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE); + (unsigned int) preset.iOutChannels, + preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); } else if (bCoreaudio || bFirewire || bNet) { setDBusDriverParameter("inchannels", - (unsigned int) m_preset.iInChannels, - m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK); + (unsigned int) preset.iInChannels, + preset.iInChannels > 0 && preset.iAudio != QJACKCTL_PLAYBACK); setDBusDriverParameter("outchannels", - (unsigned int) m_preset.iOutChannels, - m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE); - } - else if (bFreebob) { - setDBusDriverParameter("duplex", - bool(m_preset.iAudio == QJACKCTL_DUPLEX)); - resetDBusDriverParameter("capture"); - resetDBusDriverParameter("playback"); - resetDBusDriverParameter("outchannels"); - resetDBusDriverParameter("inchannels"); + (unsigned int) preset.iOutChannels, + preset.iOutChannels > 0 && preset.iAudio != QJACKCTL_CAPTURE); } if (bDummy) { setDBusDriverParameter("wait", - (unsigned int) m_preset.iWait, - m_preset.iWait > 0); + (unsigned int) preset.iWait, + preset.iWait > 0); } else if (!bNet) { setDBusDriverParameter("input-latency", - (unsigned int) m_preset.iInLatency, - m_preset.iInLatency > 0); + (unsigned int) preset.iInLatency, + preset.iInLatency > 0); setDBusDriverParameter("output-latency", - (unsigned int) m_preset.iOutLatency, - m_preset.iOutLatency > 0); + (unsigned int) preset.iOutLatency, + preset.iOutLatency > 0); } } @@ -4025,7 +4379,7 @@ bool qjackctlMainForm::setDBusParameter ( const QStringList& path, const QVariant& value, bool bSet ) { - if (m_pDBusConfig == NULL) + if (m_pDBusConfig == nullptr) return false; if (!bSet) return resetDBusParameter(path); // Reset option. @@ -4059,7 +4413,7 @@ bool qjackctlMainForm::resetDBusParameter ( const QStringList& path ) { - if (m_pDBusConfig == NULL) + if (m_pDBusConfig == nullptr) return false; QDBusMessage dbusm = m_pDBusConfig->call("ResetParameterValue", path); @@ -4077,6 +4431,205 @@ } +// D-BUS: Get preset options from current parameter values. +bool qjackctlMainForm::getDBusParameters ( qjackctlPreset& preset ) +{ + if (m_pSetup == nullptr) + return false; + + if (m_pDBusConfig == nullptr) + return false; + + // Get configuration parameters... + QVariant var; + +// m_pSetup->sServerName.clear(); +// var = getDBusEngineParameter("name"); +// if (var.isValid()) +// m_pSetup->sServerName = var.toString(); + + preset.bSync = false; + var = getDBusEngineParameter("sync"); + if (var.isValid()) + preset.bSync = var.toBool(); + + preset.bVerbose = false; + var = getDBusEngineParameter("verbose"); + if (var.isValid()) + preset.bVerbose = var.toBool(); + + preset.bRealtime = true; + var = getDBusEngineParameter("realtime"); + if (var.isValid()) + preset.bRealtime = var.toBool(); + + preset.iPriority = 0; + var = getDBusEngineParameter("realtime-priority"); + if (var.isValid()) + preset.iPriority = var.toInt(); + + preset.iPortMax = 0; + var = getDBusEngineParameter("port-max"); + if (var.isValid()) + preset.iPortMax = var.toInt(); + + preset.iTimeout = 0; + var = getDBusEngineParameter("client-timeout"); + if (var.isValid()) + preset.iTimeout = var.toInt(); + + preset.bNoMemLock = false; +// var = getDBusEngineParameter("no-mem-lock"); +// if (var.isValid()) +// preset.bNoMemLock = var.ToBool(); + + preset.bUnlockMem = false; +// var = getDBusEngineParameter("libs-unlock", +// preset.bUnlockMem = var.toBool(); + + preset.sDriver.clear(); + var = getDBusEngineParameter("driver"); + if (var.isValid()) + preset.sDriver = var.toString(); + + const bool bDummy = (preset.sDriver == "dummy"); + const bool bSun = (preset.sDriver == "sun"); + const bool bOss = (preset.sDriver == "oss"); + const bool bAlsa = (preset.sDriver == "alsa"); + const bool bPortaudio = (preset.sDriver == "portaudio"); + const bool bCoreaudio = (preset.sDriver == "coreaudio"); + const bool bFirewire = (preset.sDriver == "firewire"); + const bool bNet = (preset.sDriver == "net" || preset.sDriver == "netone"); + + preset.sInterface.clear(); + if (bAlsa || bPortaudio || bCoreaudio || bFirewire) { + var = getDBusDriverParameter("device"); + if (var.isValid()) + preset.sInterface = var.toString(); + } + + preset.iChan = 0; + if (bPortaudio) { + var = getDBusDriverParameter("channel"); + if (var.isValid()) + preset.iChan = var.toInt(); + } + + preset.iSampleRate = 0; + preset.iFrames = 0; + if (!bNet) { + var = getDBusDriverParameter("rate"); + if (var.isValid()) + preset.iSampleRate = var.toInt(); + var = getDBusDriverParameter("period"); + if (var.isValid()) + preset.iFrames = var.toInt(); + } + + preset.iPeriods = 0; + if (bAlsa || bSun || bOss || bFirewire) { + var = getDBusDriverParameter("nperiods"); + if (var.isValid()) + preset.iPeriods = var.toInt(); + } + + preset.bSoftMode = false; + preset.bMonitor = false; + preset.bShorts = false; + preset.bHWMeter = false; + preset.sMidiDriver.clear(); + if (bAlsa) { + var = getDBusDriverParameter("softmode"); + if (var.isValid()) + preset.bSoftMode = var.toBool(); + var = getDBusDriverParameter("monitor"); + if (var.isValid()) + preset.bMonitor = var.toBool(); + var = getDBusDriverParameter("shorts"); + if (var.isValid()) + preset.bShorts = var.toBool(); + var = getDBusDriverParameter("hwmeter"); + if (var.isValid()) + preset.bHWMeter = var.toBool(); + #ifdef CONFIG_JACK_MIDI + var = getDBusDriverParameter("midi-driver"); + if (var.isValid()) + preset.sMidiDriver = var.toString(); + #endif + } + + preset.iAudio = QJACKCTL_DUPLEX; + preset.sInDevice.clear(); + preset.sOutDevice.clear(); + if (bAlsa || bPortaudio || bOss || bSun) { + bool bDuplex = false; + var = getDBusDriverParameter("duplex"); + if (var.isValid()) + bDuplex = var.toBool(); + if (!bDuplex) { + var = getDBusDriverParameter("capture"); + if (var.isValid()) + preset.sInDevice = var.toString(); + var = getDBusDriverParameter("playback"); + if (var.isValid()) + preset.sOutDevice = var.toString(); + if (!preset.sInDevice.isEmpty()) + preset.iAudio = QJACKCTL_CAPTURE; + if (!preset.sOutDevice.isEmpty()) + preset.iAudio = QJACKCTL_PLAYBACK; + } + } + + preset.iInChannels = 0; + preset.iOutChannels = 0; + if (bAlsa || bPortaudio || bOss || bSun || bCoreaudio || bFirewire || bNet) { + if (preset.iAudio != QJACKCTL_PLAYBACK) { + var = getDBusDriverParameter("inchannels"); + if (var.isValid()) + preset.iInChannels = var.toInt(); + } + if (preset.iAudio != QJACKCTL_CAPTURE) { + var = getDBusDriverParameter("outchannels"); + if (var.isValid()) + preset.iOutChannels = var.toInt(); + } + } + + preset.iDither = 0; + if (bAlsa || bPortaudio) { + unsigned char dither = 'n'; + var = getDBusDriverParameter("dither"); + if (var.isValid()) + dither = var.toChar().cell(); + switch (dither) { + case 'n': preset.iDither = 0; break; + case 'r': preset.iDither = 1; break; + case 's': preset.iDither = 2; break; + case 't': preset.iDither = 3; break; } + } + + preset.iWait = 0; + preset.iInLatency = 0; + preset.iOutLatency = 0; + if (bDummy) { + var = getDBusDriverParameter("wait"); + if (var.isValid()) + preset.iWait = var.toInt(); + } + else + if (!bNet) { + var = getDBusDriverParameter("input-latency"); + if (var.isValid()) + preset.iInLatency = var.toInt(); + var = getDBusDriverParameter("output-latency"); + if (var.isValid()) + preset.iOutLatency = var.toInt(); + } + + return true; +} + + // D-BUS: Get parameter values. QVariant qjackctlMainForm::getDBusEngineParameter ( const QString& param ) { @@ -4090,7 +4643,7 @@ QVariant qjackctlMainForm::getDBusParameter ( const QStringList& path ) { - if (m_pDBusConfig == NULL) + if (m_pDBusConfig == nullptr) return QVariant(); QDBusMessage dbusm = m_pDBusConfig->call("GetParameterValue", path); @@ -4104,7 +4657,9 @@ return QVariant(); } - return dbusm.arguments().at(2); + const QDBusVariant& dbusv + = qvariant_cast (dbusm.arguments().at(2)); + return dbusv.variant(); } #endif // CONFIG_DBUS @@ -4142,4 +4697,22 @@ } +// Some settings that are special someway... +bool qjackctlMainForm::resetBuffSize ( jack_nframes_t nframes ) +{ + if (m_pJackClient == nullptr) + return false; + + if (g_buffsize == nframes) + return true; + + if (jack_set_buffer_size(m_pJackClient, nframes) != 0) + return false; + + // May reset some stats... + resetXrunStats(); + return true; +} + + // end of qjackctlMainForm.cpp diff -Nru qjackctl-0.4.5/src/qjackctlMainForm.h qjackctl-0.6.0/src/qjackctlMainForm.h --- qjackctl-0.4.5/src/qjackctlMainForm.h 2017-04-27 14:44:14.555755974 +0000 +++ qjackctl-0.6.0/src/qjackctlMainForm.h 2019-10-17 07:45:45.954673224 +0000 @@ -1,7 +1,7 @@ // qjackctlMainForm.h // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,6 +28,7 @@ #include #include +#include #include @@ -48,6 +49,8 @@ class qjackctlConnectionsForm; class qjackctlPatchbayForm; class qjackctlPatchbayRack; +class qjackctlGraphForm; +class qjackctlGraphPort; class qjackctlPortItem; #ifdef CONFIG_SYSTEM_TRAY @@ -79,7 +82,8 @@ static qjackctlMainForm *getInstance(); - bool setup(qjackctlSetup * pSetup); + bool setup(qjackctlSetup *pSetup); + qjackctlSetup *setup() const; jack_client_t *jackClient() const; snd_seq_t *alsaSeq() const; @@ -103,6 +107,8 @@ void refreshPatchbay(); void queryDisconnect( + qjackctlGraphPort *port1, qjackctlGraphPort *port2); + void queryDisconnect( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort, int iSocketType); void updateMessagesFont(); @@ -112,29 +118,39 @@ void updateConnectionsIconSize(); void updateJackClientPortAlias(); void updateJackClientPortMetadata(); - void updateBezierLines(); void updateDisplayEffect(); void updateTimeDisplayFonts(); void updateTimeDisplayToolTips(); - void updateTimeFormat(); void updateAliases(); void updateButtons(); +#ifdef CONFIG_DBUS + void updateJackDBus(); +#endif #ifdef CONFIG_SYSTEM_TRAY void updateSystemTray(); #endif void showDirtySettingsWarning(); void showDirtySetupWarning(); + // Some settings that are special someway... + bool resetBuffSize(jack_nframes_t nframes); + public slots: void startJack(); void stopJack(); void toggleJack(); + void showSetupForm(); + void showAboutForm(); + void resetXrunStats(); void commitData(QSessionManager& sm); + void activatePreset(const QString&); + void activatePatchbay(const QString&); + protected slots: void readStdout(); @@ -146,6 +162,7 @@ void jackStabilize(); void stdoutNotifySlot(int); + void sigtermNotifySlot(int); void alsaNotifySlot(int); void timerSlot(); @@ -162,9 +179,7 @@ void toggleSessionForm(); void toggleConnectionsForm(); void togglePatchbayForm(); - - void showSetupForm(); - void showAboutForm(); + void toggleGraphForm(); void transportRewind(); void transportBackward(); @@ -173,10 +188,7 @@ void transportStop(); void transportForward(); - void contextMenu(const QPoint&); - void activatePresetsMenu(QAction *); - void activatePreset(const QString&); void activatePreset(int); void quitMainForm(); @@ -184,11 +196,12 @@ protected: bool queryClose(); + bool queryClosePreset(); - void closeEvent(QCloseEvent * pCloseEvent); + void closeEvent(QCloseEvent *pCloseEvent); void customEvent(QEvent *pEvent); - void appendStdoutBuffer(const QString&); + void appendStdoutBuffer(const QString& sText); void flushStdoutBuffer(); bool stdoutBlock(int fd, bool bBlock) const; @@ -203,9 +216,9 @@ QString& detectXrun(QString& s); void updateXrunStats(float fXrunLast); - void appendMessagesColor(const QString& s, const QString& c); - void appendMessagesText(const QString& s); - void appendMessagesError(const QString& s); + void appendMessagesColor(const QString& sText, const QString& sColor); + void appendMessagesText(const QString& sText); + void appendMessagesError(const QString& sText); void updateXrunCount(); @@ -213,10 +226,13 @@ QString formatElapsedTime(int iStatusItem, const QTime& t, bool bElapsed) const; void updateElapsedTimes(); + void updateContextMenu(); + void portNotifyEvent(); void xrunNotifyEvent(); void buffNotifyEvent(); void shutNotifyEvent(); + void freeNotifyEvent(); void exitNotifyEvent(); #ifdef CONFIG_JACK_METADATA void propNotifyEvent(); @@ -236,11 +252,16 @@ void contextMenuEvent(QContextMenuEvent *); void mousePressEvent(QMouseEvent *pMouseEvent); + void queryDisconnect( + const QString& sOClientName, const QString& sOPortName, + const QString& sIClientName, const QString& sIPortName, + int iSocketType); + #ifdef CONFIG_DBUS // D-BUS: Set/reset parameter values // from current selected preset options. - void setDBusParameters(); + void setDBusParameters(const qjackctlPreset& preset); // D-BUS: Set parameter values (with reset option). bool setDBusEngineParameter( @@ -255,7 +276,11 @@ bool resetDBusDriverParameter(const QString& param); bool resetDBusParameter(const QStringList& path); - // D-BUS: Set parameter values. + // D-BUS: Get preset options + // from current parameter values. + bool getDBusParameters(qjackctlPreset& preset); + + // D-BUS: Get parameter values. QVariant getDBusEngineParameter(const QString& param); QVariant getDBusDriverParameter(const QString& param); QVariant getDBusParameter(const QStringList& path); @@ -283,7 +308,7 @@ jack_client_t *m_pJackClient; bool m_bJackDetach; bool m_bJackShutdown; - bool m_bJackStopped; + bool m_bJackRestart; snd_seq_t *m_pAlsaSeq; @@ -292,7 +317,8 @@ QDBusInterface *m_pDBusConfig; qjackctlDBusLogWatcher *m_pDBusLogWatcher; bool m_bDBusStarted; -#endif + bool m_bDBusDetach; +#endif int m_iStartDelay; int m_iTimerDelay; @@ -304,12 +330,13 @@ int m_iStatusBlink; int m_iStatusRefresh; int m_iPatchbayRefresh; - + #ifdef CONFIG_JACK_METADATA int m_iJackPropertyChange; #endif QSocketNotifier *m_pStdoutNotifier; + QSocketNotifier *m_pSigtermNotifier; QSocketNotifier *m_pAlsaNotifier; int m_iXrunCallbacks; @@ -327,6 +354,7 @@ qjackctlSessionForm *m_pSessionForm; qjackctlConnectionsForm *m_pConnectionsForm; qjackctlPatchbayForm *m_pPatchbayForm; + qjackctlGraphForm *m_pGraphForm; qjackctlSetupForm *m_pSetupForm; qjackctlPatchbayRack *m_pPatchbayRack; @@ -334,7 +362,6 @@ qjackctlPreset m_preset; QString m_sStdoutBuffer; - QString m_sTimeDashes; QString m_sJackCmdLine; #ifdef CONFIG_SYSTEM_TRAY @@ -347,6 +374,11 @@ int m_iTransportPlay; + // Common context menu. + QMenu m_menu; + + int m_iMenuRefresh; + // Kind-of singleton reference. static qjackctlMainForm *g_pMainForm; }; diff -Nru qjackctl-0.4.5/src/qjackctlMainForm.ui qjackctl-0.6.0/src/qjackctlMainForm.ui --- qjackctl-0.4.5/src/qjackctlMainForm.ui 2017-04-27 14:44:14.557756974 +0000 +++ qjackctl-0.6.0/src/qjackctlMainForm.ui 2019-10-17 07:45:45.955673224 +0000 @@ -2,7 +2,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -37,9 +37,6 @@ 0
- - QjackCtl - :/images/qjackctl.png @@ -519,6 +516,40 @@ + + + + 28 + 28 + + + + + 32767 + 28 + + + + Qt::TabFocus + + + Show/hide the graph window + + + &Graph + + + :/images/graph1.png + + + true + + + Qt::ToolButtonTextBesideIcon + + + + @@ -536,7 +567,7 @@ Qt::TabFocus - Show/hide the actual connections patchbay window + Show/hide the connections window &Connect @@ -784,6 +815,7 @@ MessagesStatusToolButton SessionToolButton SetupToolButton + GraphToolButton ConnectionsToolButton PatchbayToolButton RewindToolButton diff -Nru qjackctl-0.4.5/src/qjackctlMessagesStatusForm.cpp qjackctl-0.6.0/src/qjackctlMessagesStatusForm.cpp --- qjackctl-0.4.5/src/qjackctlMessagesStatusForm.cpp 2017-04-27 14:44:14.557756974 +0000 +++ qjackctl-0.6.0/src/qjackctlMessagesStatusForm.cpp 2019-10-17 07:45:45.955673224 +0000 @@ -1,7 +1,7 @@ // qjackctlMessagesStatusForm.cpp // /**************************************************************************** - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -59,7 +59,7 @@ m_iMessagesLines = 0; setMessagesLimit(QJACKCTL_MESSAGES_MAXLINES); - m_pMessagesLog = NULL; + m_pMessagesLog = nullptr; // Create the list view items 'a priori'... const QString s = " "; @@ -71,7 +71,7 @@ QHeaderView *pHeader = m_ui.StatsListView->header(); pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(320); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); #else @@ -220,7 +220,7 @@ // Messages logging stuff. bool qjackctlMessagesStatusForm::isLogging (void) const { - return (m_pMessagesLog != NULL); + return (m_pMessagesLog != nullptr); } void qjackctlMessagesStatusForm::setLogging ( bool bEnabled, const QString& sFilename ) @@ -230,7 +230,7 @@ .arg(QDateTime::currentDateTime().toString())); m_pMessagesLog->close(); delete m_pMessagesLog; - m_pMessagesLog = NULL; + m_pMessagesLog = nullptr; } if (bEnabled) { @@ -240,7 +240,7 @@ .arg(QDateTime::currentDateTime().toString())); } else { delete m_pMessagesLog; - m_pMessagesLog = NULL; + m_pMessagesLog = nullptr; } } } diff -Nru qjackctl-0.4.5/src/qjackctlMessagesStatusForm.h qjackctl-0.6.0/src/qjackctlMessagesStatusForm.h --- qjackctl-0.4.5/src/qjackctlMessagesStatusForm.h 2017-04-27 14:44:14.557756974 +0000 +++ qjackctl-0.6.0/src/qjackctlMessagesStatusForm.h 2019-10-17 07:45:45.955673224 +0000 @@ -1,7 +1,7 @@ // qjackctlMessagesStatusForm.h // /**************************************************************************** - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlMessagesStatusForm.ui qjackctl-0.6.0/src/qjackctlMessagesStatusForm.ui --- qjackctl-0.4.5/src/qjackctlMessagesStatusForm.ui 2017-04-27 14:44:14.557756974 +0000 +++ qjackctl-0.6.0/src/qjackctlMessagesStatusForm.ui 2019-10-17 07:45:45.955673224 +0000 @@ -2,7 +2,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -36,7 +36,7 @@ - Messages / Status - JACK Audio Connection Kit + Messages / Status :/images/messagesstatus1.png diff -Nru qjackctl-0.4.5/src/qjackctlPatchbay.cpp qjackctl-0.6.0/src/qjackctlPatchbay.cpp --- qjackctl-0.4.5/src/qjackctlPatchbay.cpp 2017-04-27 14:44:14.557756974 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbay.cpp 2019-10-17 07:45:45.955673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbay.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -39,7 +39,7 @@ #include #include -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) #include #include #endif @@ -216,7 +216,7 @@ return pPlug; } - return NULL; + return nullptr; } @@ -253,7 +253,7 @@ return pSocket; } - return NULL; + return nullptr; } @@ -371,7 +371,7 @@ return pSocket; } - return NULL; + return nullptr; } @@ -436,7 +436,7 @@ // Return currently selected socket item. qjackctlSocketItem *qjackctlSocketList::selectedSocketItem (void) const { - qjackctlSocketItem *pSocketItem = NULL; + qjackctlSocketItem *pSocketItem = nullptr; QTreeWidgetItem *pItem = m_pListView->currentItem(); if (pItem) { @@ -464,7 +464,7 @@ socketForm.setSocketNew(true); qjackctlPatchbaySocket socket(m_sSocketCaption + ' ' + QString::number(m_sockets.count() + 1), - QString::null, QJACKCTL_SOCKETTYPE_JACK_AUDIO); + QString(), QJACKCTL_SOCKETTYPE_JACK_AUDIO); socketForm.load(&socket); if (socketForm.exec()) { socketForm.save(&socket); @@ -477,7 +477,7 @@ if (pSocketItem) { pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); - qjackctlPlugItem *pPlugItem = NULL; + qjackctlPlugItem *pPlugItem = nullptr; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( @@ -554,7 +554,7 @@ pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); pSocketItem->updatePixmap(); - qjackctlPlugItem *pPlugItem = NULL; + qjackctlPlugItem *pPlugItem = nullptr; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( @@ -611,7 +611,7 @@ if (pSocketItem) { pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); - qjackctlPlugItem *pPlugItem = NULL; + qjackctlPlugItem *pPlugItem = nullptr; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( @@ -715,13 +715,13 @@ m_pAutoOpenTimer = 0; m_iAutoOpenTimeout = 0; - m_pDragItem = NULL; - m_pDropItem = NULL; + m_pDragItem = nullptr; + m_pDropItem = nullptr; QHeaderView *pHeader = QTreeWidget::header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(120); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); pHeader->setSectionsClickable(true); @@ -786,7 +786,7 @@ if (m_pAutoOpenTimer) delete m_pAutoOpenTimer; - m_pAutoOpenTimer = NULL; + m_pAutoOpenTimer = nullptr; if (m_iAutoOpenTimeout > 0) { m_pAutoOpenTimer = new QTimer(this); @@ -867,11 +867,11 @@ m_pAutoOpenTimer->start(m_iAutoOpenTimeout); qjackctlPatchbay *pPatchbay = m_pPatchbayView->binding(); if ((pItem->flags() & Qt::ItemIsDropEnabled) == 0 - || pPatchbay == NULL || !pPatchbay->canConnectSelected()) - pItem = NULL; + || pPatchbay == nullptr || !pPatchbay->canConnectSelected()) + pItem = nullptr; } } else { - m_pDropItem = NULL; + m_pDropItem = nullptr; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } @@ -922,7 +922,7 @@ pPatchbay->connectSelected(); } - dragLeaveEvent(NULL); + dragLeaveEvent(nullptr); } @@ -952,9 +952,9 @@ pDrag->setMimeData(pMimeData); pDrag->setPixmap(m_pDragItem->icon(0).pixmap(16)); pDrag->setHotSpot(QPoint(-4, -12)); - pDrag->start(Qt::LinkAction); + pDrag->exec(Qt::LinkAction); // We've dragged and maybe dropped it by now... - m_pDragItem = NULL; + m_pDragItem = nullptr; } } @@ -1001,7 +1001,7 @@ QRect rect; QTreeWidget *pList = pItem->treeWidget(); QTreeWidgetItem *pParent = pItem->parent(); - qjackctlSocketItem *pSocketItem = NULL; + qjackctlSocketItem *pSocketItem = nullptr; if (pParent && pParent->type() == QJACKCTL_SOCKETITEM) pSocketItem = static_cast (pParent); if (pSocketItem && !pSocketItem->isOpen()) { @@ -1025,21 +1025,17 @@ if (y1 > h1) pPainter->drawLine(x1, y1, x1 + 4, y1); - // How do we'll draw it? - if (m_pPatchbayView->isBezierLines()) { - // Setup control points - QPolygon spline(4); - int cp = int(float(x2 - x1 - 8) * 0.4f); - spline.putPoints(0, 4, - x1 + 4, y1, x1 + 4 + cp, y1, - x2 - 4 - cp, y2, x2 - 4, y2); - // The connection line, it self. - QPainterPath path; - path.moveTo(spline.at(0)); - path.cubicTo(spline.at(1), spline.at(2), spline.at(3)); - pPainter->strokePath(path, pPainter->pen()); - } // Old style... - else pPainter->drawLine(x1 + 4, y1, x2 - 4, y2); + // Setup control points + QPolygon spline(4); + const int cp = int(float(x2 - x1 - 8) * 0.4f); + spline.putPoints(0, 4, + x1 + 4, y1, x1 + 4 + cp, y1, + x2 - 4 - cp, y2, x2 - 4, y2); + // The connection line, it self. + QPainterPath path; + path.moveTo(spline.at(0)); + path.cubicTo(spline.at(1), spline.at(2), spline.at(3)); + pPainter->strokePath(path, pPainter->pen()); // Invisible input plugs don't get a connecting dot. if (y2 > h2) @@ -1078,8 +1074,8 @@ // Draw visible socket connection relation arrows. void qjackctlPatchworkView::paintEvent ( QPaintEvent * ) { - if (m_pPatchbayView->OSocketList() == NULL || - m_pPatchbayView->ISocketList() == NULL) + if (m_pPatchbayView->OSocketList() == nullptr || + m_pPatchbayView->ISocketList() == nullptr) return; QPainter painter(this); @@ -1144,7 +1140,7 @@ qjackctlSocketItem *pISocketForward = m_pPatchbayView->ISocketList()->findSocket( pISocket->forward(), pISocket->socketType()); - if (pISocketForward == NULL) + if (pISocketForward == nullptr) continue; // Set new connector color. ++i; @@ -1162,7 +1158,7 @@ void qjackctlPatchworkView::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) { - m_pPatchbayView->contextMenu(pContextMenuEvent->globalPos(), NULL); + m_pPatchbayView->contextMenu(pContextMenuEvent->globalPos(), nullptr); } @@ -1185,9 +1181,7 @@ m_pPatchworkView = new qjackctlPatchworkView(this); m_pIListView = new qjackctlSocketListView(this, false); - m_pPatchbay = NULL; - - m_bBezierLines = false; + m_pPatchbay = nullptr; QSplitter::setHandleWidth(2); @@ -1224,7 +1218,7 @@ qjackctlSocketList *pSocketList ) { qjackctlPatchbay *pPatchbay = binding(); - if (pPatchbay == NULL) + if (pPatchbay == nullptr) return; QMenu menu(this); @@ -1232,7 +1226,7 @@ if (pSocketList) { qjackctlSocketItem *pSocketItem = pSocketList->selectedSocketItem(); - bool bEnabled = (pSocketItem != NULL); + bool bEnabled = (pSocketItem != nullptr); pAction = menu.addAction(QIcon(":/images/add1.png"), tr("Add..."), pSocketList, SLOT(addSocketItem())); pAction = menu.addAction(QIcon(":/images/edit1.png"), @@ -1287,7 +1281,7 @@ pAction->setData(iIndex); iIndex++; } - // Null forward always present, + // nullptr forward always present, // and has invalid index parameter (-1)... if (iIndex > 0) pForwardMenu->addSeparator(); @@ -1345,7 +1339,7 @@ if (pSocketItem) { // Check first for forward from nil... if (iIndex < 0) { - pSocketItem->setForward(QString::null); + pSocketItem->setForward(QString()); setDirty(true); return; } @@ -1388,7 +1382,7 @@ if (m_pPatchbay) return m_pPatchbay->OSocketList(); else - return NULL; + return nullptr; } qjackctlSocketList *qjackctlPatchbayView::ISocketList (void) const @@ -1396,19 +1390,7 @@ if (m_pPatchbay) return m_pPatchbay->ISocketList(); else - return NULL; -} - - -// Patchwork line style accessors. -void qjackctlPatchbayView::setBezierLines ( bool bBezierLines ) -{ - m_bBezierLines = bBezierLines; -} - -bool qjackctlPatchbayView::isBezierLines (void) const -{ - return m_bBezierLines; + return nullptr; } @@ -1444,13 +1426,13 @@ // Default destructor. qjackctlPatchbay::~qjackctlPatchbay (void) { - m_pPatchbayView->setBinding(NULL); + m_pPatchbayView->setBinding(nullptr); delete m_pOSocketList; - m_pOSocketList = NULL; + m_pOSocketList = nullptr; delete m_pISocketList; - m_pISocketList = NULL; + m_pISocketList = nullptr; (m_pPatchbayView->PatchworkView())->update(); } @@ -1460,7 +1442,7 @@ void qjackctlPatchbay::connectSockets ( qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket ) { - if (pOSocket->findConnectPtr(pISocket) == NULL) { + if (pOSocket->findConnectPtr(pISocket) == nullptr) { pOSocket->addConnect(pISocket); pISocket->addConnect(pOSocket); } @@ -1470,7 +1452,7 @@ void qjackctlPatchbay::disconnectSockets ( qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket ) { - if (pOSocket->findConnectPtr(pISocket) != NULL) { + if (pOSocket->findConnectPtr(pISocket) != nullptr) { pOSocket->removeConnect(pISocket); pISocket->removeConnect(pOSocket); } @@ -1481,14 +1463,14 @@ bool qjackctlPatchbay::canConnectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); - if (pOItem == NULL) + if (pOItem == nullptr) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); - if (pIItem == NULL) + if (pIItem == nullptr) return false; - qjackctlSocketItem *pOSocket = NULL; + qjackctlSocketItem *pOSocket = nullptr; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); @@ -1500,7 +1482,7 @@ return false; } - qjackctlSocketItem *pISocket = NULL; + qjackctlSocketItem *pISocket = nullptr; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); @@ -1523,7 +1505,7 @@ return false; // One-to-one connection... - return (pOSocket->findConnectPtr(pISocket) == NULL); + return (pOSocket->findConnectPtr(pISocket) == nullptr); } @@ -1531,14 +1513,14 @@ bool qjackctlPatchbay::connectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); - if (pOItem == NULL) + if (pOItem == nullptr) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); - if (pIItem == NULL) + if (pIItem == nullptr) return false; - qjackctlSocketItem *pOSocket = NULL; + qjackctlSocketItem *pOSocket = nullptr; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); @@ -1550,7 +1532,7 @@ return false; } - qjackctlSocketItem *pISocket = NULL; + qjackctlSocketItem *pISocket = nullptr; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); @@ -1586,14 +1568,14 @@ bool qjackctlPatchbay::canDisconnectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); - if (pOItem == NULL) + if (pOItem == nullptr) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); - if (pIItem == NULL) + if (pIItem == nullptr) return false; - qjackctlSocketItem *pOSocket = NULL; + qjackctlSocketItem *pOSocket = nullptr; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); @@ -1605,7 +1587,7 @@ return false; } - qjackctlSocketItem *pISocket = NULL; + qjackctlSocketItem *pISocket = nullptr; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); @@ -1636,7 +1618,7 @@ if (!pIItem) return false; - qjackctlSocketItem *pOSocket = NULL; + qjackctlSocketItem *pOSocket = nullptr; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); @@ -1648,7 +1630,7 @@ return false; } - qjackctlSocketItem *pISocket = NULL; + qjackctlSocketItem *pISocket = nullptr; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); @@ -1764,7 +1746,7 @@ QList& socketlist ) { pSocketList->clear(); - qjackctlSocketItem *pSocketItem = NULL; + qjackctlSocketItem *pSocketItem = nullptr; QListIterator sockit(socketlist); while (sockit.hasNext()) { @@ -1775,7 +1757,7 @@ pSocketItem->setExclusive(pSocket->isExclusive()); pSocketItem->setForward(pSocket->forward()); pSocketItem->updatePixmap(); - qjackctlPlugItem *pPlugItem = NULL; + qjackctlPlugItem *pPlugItem = nullptr; QStringListIterator iter(pSocket->pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( @@ -1830,7 +1812,7 @@ { // Have QTreeWidget item order into account: qjackctlSocketListView *pListView = pSocketList->listView(); - if (pListView == NULL) + if (pListView == nullptr) return; socketlist.clear(); @@ -1842,7 +1824,7 @@ continue; qjackctlSocketItem *pSocketItem = static_cast (pItem); - if (pSocketItem == NULL) + if (pSocketItem == nullptr) continue; qjackctlPatchbaySocket *pSocket = new qjackctlPatchbaySocket(pSocketItem->socketName(), @@ -1898,7 +1880,7 @@ void qjackctlPatchbay::connectionsSnapshot (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; qjackctlPatchbayRack rack; diff -Nru qjackctl-0.4.5/src/qjackctlPatchbayForm.cpp qjackctl-0.6.0/src/qjackctlPatchbayForm.cpp --- qjackctl-0.4.5/src/qjackctlPatchbayForm.cpp 2017-04-27 14:44:14.558757474 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbayForm.cpp 2019-10-17 07:45:45.955673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbayForm.cpp // /**************************************************************************** - Copyright (C) 2003-2011, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -47,7 +47,7 @@ // Setup UI struct... m_ui.setupUi(this); - m_pSetup = NULL; + m_pSetup = nullptr; // Create the patchbay view object. m_pPatchbay = new qjackctlPatchbay(m_ui.PatchbayView); @@ -169,6 +169,7 @@ QWidget::showEvent(pShowEvent); } + // Notify our parent that we're closing. void qjackctlPatchbayForm::hideEvent ( QHideEvent *pHideEvent ) { @@ -179,9 +180,16 @@ pMainForm->stabilizeForm(); } + // Just about to notify main-window that we're closing. void qjackctlPatchbayForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { + if (m_pSetup) { + const QString& sPatchbayPath = patchbayPath(); + if (!sPatchbayPath.isEmpty()) + m_pSetup->sPatchbayPath = sPatchbayPath; + } + QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); @@ -282,7 +290,7 @@ } // Take care that IT might be destroyed already... - if (m_ui.PatchbayView->binding() == NULL) + if (m_ui.PatchbayView->binding() == nullptr) return; bool bExpandAll = false; @@ -550,7 +558,7 @@ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) { pMainForm->setActivePatchbay( - m_bActivePatchbay ? QString::null : m_sPatchbayPath); + m_bActivePatchbay ? QString() : m_sPatchbayPath); } // Need to force/refresh the patchbay list... @@ -569,7 +577,7 @@ // Update patchbay MRU variables and widgets. void qjackctlPatchbayForm::updateRecentPatchbays (void) { - // TRye not to be reeentrant. + // Try not to be reeentrant. if (m_iUpdate > 0) return; diff -Nru qjackctl-0.4.5/src/qjackctlPatchbayForm.h qjackctl-0.6.0/src/qjackctlPatchbayForm.h --- qjackctl-0.4.5/src/qjackctlPatchbayForm.h 2017-04-27 14:44:14.558757474 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbayForm.h 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbayForm.h // /**************************************************************************** - Copyright (C) 2003-2011, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlPatchbayForm.ui qjackctl-0.6.0/src/qjackctlPatchbayForm.ui --- qjackctl-0.4.5/src/qjackctlPatchbayForm.ui 2017-04-27 14:44:14.558757474 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbayForm.ui 2019-10-17 07:45:45.956673224 +0000 @@ -2,7 +2,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -41,7 +41,7 @@ - Patchbay - JACK Audio Connection Kit + Patchbay :/images/patchbay1.png diff -Nru qjackctl-0.4.5/src/qjackctlPatchbay.h qjackctl-0.6.0/src/qjackctlPatchbay.h --- qjackctl-0.4.5/src/qjackctlPatchbay.h 2017-04-27 14:44:14.558757474 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbay.h 2019-10-17 07:45:45.955673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbay.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -364,10 +364,6 @@ qjackctlSocketList *OSocketList() const; qjackctlSocketList *ISocketList() const; - // Patchwork line style accessors. - void setBezierLines(bool bBezierLines); - bool isBezierLines() const; - // Patchbay dirty flag accessors. void setDirty (bool bDirty); bool dirty() const; @@ -393,9 +389,6 @@ // The main binding object. qjackctlPatchbay *m_pPatchbay; - // How we'll draw patchwork lines. - bool m_bBezierLines; - // The obnoxious dirty flag. bool m_bDirty; }; diff -Nru qjackctl-0.4.5/src/qjackctlPatchbayRack.cpp qjackctl-0.6.0/src/qjackctlPatchbayRack.cpp --- qjackctl-0.4.5/src/qjackctlPatchbayRack.cpp 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbayRack.cpp 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbayRack.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ #include "qjackctlPatchbayRack.h" // Aliases accessors. -#include "qjackctlConnectAlias.h" +#include "qjackctlAliases.h" #include @@ -38,7 +38,7 @@ public: // Constructor. - qjackctlPatchbaySnapshot() {}; + qjackctlPatchbaySnapshot() {} // Cleanup. void clear() { m_hash.clear(); } @@ -85,7 +85,7 @@ return pSocket; } } - return NULL; + return nullptr; } // Add socket plug. @@ -94,14 +94,14 @@ { qjackctlPatchbaySocket *pSocket = find_socket(socketlist, sClientName, iSocketType); - if (pSocket == NULL) { + if (pSocket == nullptr) { pSocket = new qjackctlPatchbaySocket(sClientName, - qjackctlClientAlias::escapeRegExpDigits(sClientName), + qjackctlAliasItem::escapeRegExpDigits(sClientName), iSocketType); socketlist.append(pSocket); } pSocket->addPlug( - qjackctlClientAlias::escapeRegExpDigits(sPortName)); + qjackctlAliasItem::escapeRegExpDigits(sPortName)); } // Get client socket into rack (socket list). @@ -111,7 +111,7 @@ int iSocketType ) { int iSocket = 0; - qjackctlPatchbaySocket *pSocket = NULL; + qjackctlPatchbaySocket *pSocket = nullptr; QListIterator iter(socketlist); while (iter.hasNext()) { pSocket = iter.next(); @@ -137,12 +137,12 @@ sSocketName += ' ' + QString::number(iSocket + 1); pSocket = new qjackctlPatchbaySocket(sSocketName, - qjackctlClientAlias::escapeRegExpDigits(sClientName), + qjackctlAliasItem::escapeRegExpDigits(sClientName), iSocketType); QStringListIterator port_iter(ports); while (port_iter.hasNext()) { pSocket->addPlug( - qjackctlClientAlias::escapeRegExpDigits(port_iter.next())); + qjackctlAliasItem::escapeRegExpDigits(port_iter.next())); } socketlist.append(pSocket); @@ -307,8 +307,8 @@ qjackctlPatchbaySlot::qjackctlPatchbaySlot ( const QString& sSlotName, int iSlotMode ) { - m_pOutputSocket = NULL; - m_pInputSocket = NULL; + m_pOutputSocket = nullptr; + m_pInputSocket = nullptr; m_sSlotName = sSlotName; m_iSlotMode = iSlotMode; @@ -317,8 +317,8 @@ // Default destructor. qjackctlPatchbaySlot::~qjackctlPatchbaySlot (void) { - setOutputSocket(NULL); - setInputSocket(NULL); + setOutputSocket(nullptr); + setInputSocket(nullptr); } @@ -386,8 +386,8 @@ // Default destructor. qjackctlPatchbayCable::~qjackctlPatchbayCable (void) { - setOutputSocket(NULL); - setInputSocket(NULL); + setOutputSocket(nullptr); + setInputSocket(nullptr); } @@ -422,14 +422,14 @@ // Constructor. qjackctlPatchbayRack::qjackctlPatchbayRack (void) { - m_pJackClient = NULL; - m_ppszOAudioPorts = NULL; - m_ppszIAudioPorts = NULL; - m_ppszOMidiPorts = NULL; - m_ppszIMidiPorts = NULL; + m_pJackClient = nullptr; + m_ppszOAudioPorts = nullptr; + m_ppszIAudioPorts = nullptr; + m_ppszOMidiPorts = nullptr; + m_ppszIMidiPorts = nullptr; // MIDI connection persistence cache variables. - m_pAlsaSeq = NULL; + m_pAlsaSeq = nullptr; } // Default destructor. @@ -519,7 +519,7 @@ return pSocket; } - return NULL; + return nullptr; } @@ -533,7 +533,7 @@ return pSlot; } - return NULL; + return nullptr; } @@ -554,7 +554,7 @@ } } - return NULL; + return nullptr; } qjackctlPatchbayCable *qjackctlPatchbayRack::findCable ( @@ -624,7 +624,7 @@ } // No matching cable was found. - return NULL; + return nullptr; } @@ -697,7 +697,7 @@ iClientPort++; } - return NULL; + return nullptr; } // JACK port-pair connection executive IS DEPRECATED! @@ -788,13 +788,13 @@ void qjackctlPatchbayRack::connectJackCable ( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket ) { - if (pOutputSocket == NULL || pInputSocket == NULL) + if (pOutputSocket == nullptr || pInputSocket == nullptr) return; if (pOutputSocket->type() != pInputSocket->type()) return; - const char **ppszOutputPorts = NULL; - const char **ppszInputPorts = NULL; + const char **ppszOutputPorts = nullptr; + const char **ppszInputPorts = nullptr; if (pOutputSocket->type() == QJACKCTL_SOCKETTYPE_JACK_AUDIO) { ppszOutputPorts = m_ppszOAudioPorts; ppszInputPorts = m_ppszIAudioPorts; @@ -805,7 +805,7 @@ ppszInputPorts = m_ppszIMidiPorts; } - if (ppszOutputPorts == NULL || ppszInputPorts == NULL) + if (ppszOutputPorts == nullptr || ppszInputPorts == nullptr) return; // Iterate on each corresponding plug... @@ -818,11 +818,11 @@ int iOPort = 0; const char *pszOutputPort; while ((pszOutputPort = findJackPort(ppszOutputPorts, - pOutputSocket->clientName(), sOutputPlug, iOPort)) != NULL) { + pOutputSocket->clientName(), sOutputPlug, iOPort)) != nullptr) { int iIPort = 0; const char *pszInputPort; while ((pszInputPort = findJackPort(ppszInputPorts, - pInputSocket->clientName(), sInputPlug, iIPort)) != NULL) { + pInputSocket->clientName(), sInputPlug, iIPort)) != nullptr) { connectJackSocketPorts( pOutputSocket, pszOutputPort, pInputSocket, pszInputPort); @@ -837,7 +837,7 @@ // Main JACK cable connect persistance scan cycle. void qjackctlPatchbayRack::connectJackScan ( jack_client_t *pJackClient ) { - if (pJackClient == NULL || m_pJackClient) + if (pJackClient == nullptr || m_pJackClient) return; // Cache client descriptor. @@ -854,8 +854,8 @@ m_ppszIMidiPorts = jack_get_ports(m_pJackClient, 0, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput); #else - m_ppszOMidiPorts = NULL; - m_ppszIMidiPorts = NULL; + m_ppszOMidiPorts = nullptr; + m_ppszIMidiPorts = nullptr; #endif // Start looking for connections... @@ -885,11 +885,11 @@ ::free(m_ppszIMidiPorts); #endif // Reset cached pointers. - m_ppszOAudioPorts = NULL; - m_ppszIAudioPorts = NULL; - m_ppszOMidiPorts = NULL; - m_ppszIMidiPorts = NULL; - m_pJackClient = NULL; + m_ppszOAudioPorts = nullptr; + m_ppszIAudioPorts = nullptr; + m_ppszOMidiPorts = nullptr; + m_ppszIMidiPorts = nullptr; + m_pJackClient = nullptr; } @@ -897,7 +897,7 @@ void qjackctlPatchbayRack::loadAlsaPorts ( QList& midiports, bool bReadable ) { - if (m_pAlsaSeq == NULL) + if (m_pAlsaSeq == nullptr) return; qDeleteAll(midiports); @@ -1002,7 +1002,7 @@ } } - return NULL; + return nullptr; } @@ -1191,7 +1191,7 @@ void qjackctlPatchbayRack::connectAlsaCable ( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket ) { - if (pOutputSocket == NULL || pInputSocket == NULL) + if (pOutputSocket == nullptr || pInputSocket == nullptr) return; if (pOutputSocket->type() != pInputSocket->type() || pOutputSocket->type() != QJACKCTL_SOCKETTYPE_ALSA_MIDI) @@ -1207,11 +1207,11 @@ int iOPort = 0; qjackctlAlsaMidiPort *pOutputPort; while ((pOutputPort = findAlsaPort(m_omidiports, - pOutputSocket->clientName(), sOutputPlug, iOPort)) != NULL) { + pOutputSocket->clientName(), sOutputPlug, iOPort)) != nullptr) { int iIPort = 0; qjackctlAlsaMidiPort *pInputPort; while ((pInputPort = findAlsaPort(m_imidiports, - pInputSocket->clientName(), sInputPlug, iIPort)) != NULL) { + pInputSocket->clientName(), sInputPlug, iIPort)) != nullptr) { connectAlsaSocketPorts( pOutputSocket, pOutputPort, pInputSocket, pInputPort); @@ -1226,7 +1226,7 @@ // Overloaded MIDI cable connect persistance scan cycle. void qjackctlPatchbayRack::connectAlsaScan ( snd_seq_t *pAlsaSeq ) { - if (pAlsaSeq == NULL || m_pAlsaSeq) + if (pAlsaSeq == nullptr || m_pAlsaSeq) return; // Cache sequencer descriptor. @@ -1255,7 +1255,7 @@ qDeleteAll(m_imidiports); m_imidiports.clear(); - m_pAlsaSeq = NULL; + m_pAlsaSeq = nullptr; } @@ -1296,13 +1296,13 @@ void qjackctlPatchbayRack::connectJackForward ( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward ) { - if (pSocket == NULL || pSocketForward == NULL) + if (pSocket == nullptr || pSocketForward == nullptr) return; if (pSocket->type() != pSocketForward->type()) return; - const char **ppszOutputPorts = NULL; - const char **ppszInputPorts = NULL; + const char **ppszOutputPorts = nullptr; + const char **ppszInputPorts = nullptr; if (pSocket->type() == QJACKCTL_SOCKETTYPE_JACK_AUDIO) { ppszOutputPorts = m_ppszOAudioPorts; ppszInputPorts = m_ppszIAudioPorts; @@ -1313,7 +1313,7 @@ ppszInputPorts = m_ppszIMidiPorts; } - if (ppszOutputPorts == NULL || ppszInputPorts == NULL) + if (ppszOutputPorts == nullptr || ppszInputPorts == nullptr) return; QStringListIterator iterPlug(pSocket->pluglist()); @@ -1389,7 +1389,7 @@ void qjackctlPatchbayRack::connectAlsaForward ( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward ) { - if (pSocket == NULL || pSocketForward == NULL) + if (pSocket == nullptr || pSocketForward == nullptr) return; if (pSocket->type() != pSocketForward->type() || pSocket->type() != QJACKCTL_SOCKETTYPE_ALSA_MIDI) @@ -1435,7 +1435,7 @@ qjackctlPatchbaySocket *pSocket = iter.next(); qjackctlPatchbaySocket *pSocketForward = findSocket(m_isocketlist, pSocket->forward()); - if (pSocketForward == NULL) + if (pSocketForward == nullptr) continue; switch (iSocketType) { case QJACKCTL_SOCKETTYPE_JACK_AUDIO: @@ -1455,7 +1455,7 @@ void qjackctlPatchbayRack::connectJackSnapshotEx ( int iSocketType ) { - if (m_pJackClient == NULL) + if (m_pJackClient == nullptr) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; @@ -1480,7 +1480,7 @@ const char **ppszOutputPorts = jack_get_ports(m_pJackClient, 0, pszJackPortType, JackPortIsOutput); - if (ppszOutputPorts == NULL) + if (ppszOutputPorts == nullptr) return; qjackctlPatchbaySnapshot snapshot; @@ -1495,7 +1495,7 @@ // Check for inputs from output... ppszInputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszOutputPort)); - if (ppszInputPorts == NULL) + if (ppszInputPorts == nullptr) continue; for (int j = 0 ; ppszInputPorts[j]; ++j) { const char *pszInputPort = ppszInputPorts[j]; @@ -1514,7 +1514,7 @@ void qjackctlPatchbayRack::connectJackSnapshot ( jack_client_t *pJackClient ) { - if (pJackClient == NULL || m_pJackClient) + if (pJackClient == nullptr || m_pJackClient) return; // Cache JACK client descriptor. @@ -1524,7 +1524,7 @@ connectJackSnapshotEx(QJACKCTL_SOCKETTYPE_JACK_MIDI); // Done. - m_pJackClient = NULL; + m_pJackClient = nullptr; } @@ -1533,7 +1533,7 @@ void qjackctlPatchbayRack::connectAlsaSnapshot ( snd_seq_t *pAlsaSeq ) { - if (pAlsaSeq == NULL || m_pAlsaSeq) + if (pAlsaSeq == nullptr || m_pAlsaSeq) return; // Cache sequencer descriptor. @@ -1586,7 +1586,7 @@ #endif // Done. - m_pAlsaSeq = NULL; + m_pAlsaSeq = nullptr; } @@ -1595,7 +1595,7 @@ void qjackctlPatchbayRack::disconnectAllJackPortsEx ( int iSocketType ) { - if (m_pJackClient == NULL) + if (m_pJackClient == nullptr) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; @@ -1611,7 +1611,7 @@ const char *pszOutputPort = ppszOutputPorts[i]; const char **ppszInputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszOutputPort)); - if (ppszInputPorts == NULL) + if (ppszInputPorts == nullptr) continue; for (int j = 0 ; ppszInputPorts[j]; ++j) { const char *pszInputPort = ppszInputPorts[j]; @@ -1626,7 +1626,7 @@ void qjackctlPatchbayRack::disconnectAllJackPorts ( jack_client_t *pJackClient ) { - if (pJackClient == NULL || m_pJackClient) + if (pJackClient == nullptr || m_pJackClient) return; // Cache JACK client descriptor. @@ -1636,7 +1636,7 @@ disconnectAllJackPortsEx(QJACKCTL_SOCKETTYPE_JACK_MIDI); // Done. - m_pJackClient = NULL; + m_pJackClient = nullptr; } @@ -1645,7 +1645,7 @@ void qjackctlPatchbayRack::disconnectAllAlsaPorts ( snd_seq_t *pAlsaSeq ) { - if (pAlsaSeq == NULL || m_pAlsaSeq) + if (pAlsaSeq == nullptr || m_pAlsaSeq) return; // Cache sequencer descriptor. @@ -1685,7 +1685,7 @@ #endif // Done. - m_pAlsaSeq = NULL; + m_pAlsaSeq = nullptr; } diff -Nru qjackctl-0.4.5/src/qjackctlPatchbayRack.h qjackctl-0.6.0/src/qjackctlPatchbayRack.h --- qjackctl-0.4.5/src/qjackctlPatchbayRack.h 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlPatchbayRack.h 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlPatchbayRack.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctl.qrc qjackctl-0.6.0/src/qjackctl.qrc --- qjackctl-0.4.5/src/qjackctl.qrc 2017-04-27 14:44:14.551753974 +0000 +++ qjackctl-0.6.0/src/qjackctl.qrc 2019-10-17 07:45:45.951673224 +0000 @@ -1,99 +1,115 @@ - - images/qjackctl.png - images/about1.png - images/accept1.png - images/aclienti.png - images/aclienti_32x32.png - images/aclienti_64x64.png - images/acliento.png - images/acliento_32x32.png - images/acliento_64x64.png - images/add1.png - images/aportlni.png - images/aportlni_32x32.png - images/aportlni_64x64.png - images/aportlno.png - images/aportlno_32x32.png - images/aportlno_64x64.png - images/aportlti.png - images/aportlti_32x32.png - images/aportlti_64x64.png - images/aportlto.png - images/aportlto_32x32.png - images/aportlto_64x64.png - images/aportpni.png - images/aportpni_32x32.png - images/aportpni_64x64.png - images/aportpno.png - images/aportpno_32x32.png - images/aportpno_64x64.png - images/aportpti.png - images/aportpti_32x32.png - images/aportpti_64x64.png - images/aportpto.png - images/aportpto_32x32.png - images/aportpto_64x64.png - images/apply1.png - images/asocketi.png - images/asocketo.png - images/backward1.png - images/client1.png - images/connect1.png - images/connections1.png - images/copy1.png - images/device1.png - images/disconnect1.png - images/disconnectall1.png - images/displaybg1.png - images/down1.png - images/edit1.png - images/expandall1.png - images/forward1.png - images/error1.png - images/mclienti.png - images/mclienti_32x32.png - images/mclienti_64x64.png - images/mcliento.png - images/mcliento_32x32.png - images/mcliento_64x64.png - images/messages1.png - images/messagesstatus1.png - images/mporti.png - images/mporti_32x32.png - images/mporti_64x64.png - images/mporto.png - images/mporto_32x32.png - images/mporto_64x64.png - images/msocketi.png - images/msocketo.png - images/new1.png - images/open1.png - images/patchbay1.png - images/pause1.png - images/play1.png - images/port1.png - images/quit1.png - images/refresh1.png - images/remove1.png - images/reset1.png - images/rewind1.png - images/save1.png - images/session1.png - images/setup1.png - images/socket1.png - images/start1.png - images/status1.png - images/stop1.png - images/up1.png - images/xactivating1.png - images/xactive1.png - images/xinactive1.png - images/xsocket1.png - images/xstarted1.png - images/xstarting1.png - images/xstopped1.png - images/xstopping1.png - images/qtlogo.png - + + images/qjackctl.png + images/about1.png + images/accept1.png + images/aclienti.png + images/aclienti_32x32.png + images/aclienti_64x64.png + images/acliento.png + images/acliento_32x32.png + images/acliento_64x64.png + images/add1.png + images/aportlni.png + images/aportlni_32x32.png + images/aportlni_64x64.png + images/aportlno.png + images/aportlno_32x32.png + images/aportlno_64x64.png + images/aportlti.png + images/aportlti_32x32.png + images/aportlti_64x64.png + images/aportlto.png + images/aportlto_32x32.png + images/aportlto_64x64.png + images/aportpni.png + images/aportpni_32x32.png + images/aportpni_64x64.png + images/aportpno.png + images/aportpno_32x32.png + images/aportpno_64x64.png + images/aportpti.png + images/aportpti_32x32.png + images/aportpti_64x64.png + images/aportpto.png + images/aportpto_32x32.png + images/aportpto_64x64.png + images/apply1.png + images/asocketi.png + images/asocketo.png + images/backward1.png + images/client1.png + images/connect1.png + images/connections1.png + images/copy1.png + images/device1.png + images/disconnect1.png + images/disconnectall1.png + images/displaybg1.png + images/down1.png + images/edit1.png + images/error1.png + images/expandall1.png + images/forward1.png + images/graph1.png + images/graphAlsa.png + images/graphCenter.png + images/graphColors.png + images/graphConnect.png + images/graphDisconnect.png + images/graphRename.png + images/graphJack.png + images/graphRedo.png + images/graphUndo.png + images/graphZoomFit.png + images/graphZoomIn.png + images/graphZoomOut.png + images/graphZoomReset.png + images/graphZoomRange.png + images/graphZoomTool.png + images/mclienti.png + images/mclienti_32x32.png + images/mclienti_64x64.png + images/mcliento.png + images/mcliento_32x32.png + images/mcliento_64x64.png + images/messages1.png + images/messagesstatus1.png + images/mporti.png + images/mporti_32x32.png + images/mporti_64x64.png + images/mporto.png + images/mporto_32x32.png + images/mporto_64x64.png + images/msocketi.png + images/msocketo.png + images/new1.png + images/open1.png + images/patchbay1.png + images/pause1.png + images/play1.png + images/port1.png + images/quit1.png + images/refresh1.png + images/remove1.png + images/reset1.png + images/rewind1.png + images/save1.png + images/session1.png + images/setup1.png + images/socket1.png + images/start1.png + images/status1.png + images/stop1.png + images/up1.png + images/xactivating1.png + images/xactive1.png + images/xinactive1.png + images/xsocket1.png + images/xstarted1.png + images/xstarting1.png + images/xstopped1.png + images/xstopping1.png + images/qtlogo1.png + diff -Nru qjackctl-0.4.5/src/qjackctlSession.cpp qjackctl-0.6.0/src/qjackctlSession.cpp --- qjackctl-0.4.5/src/qjackctlSession.cpp 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlSession.cpp 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSession.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -80,18 +80,18 @@ clear(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return false; const QString sSessionPath = sSessionDir + '/'; // First pass: get all client/port connections, no matter what... const char **ports - = ::jack_get_ports(pJackClient, NULL, NULL, 0); + = ::jack_get_ports(pJackClient, nullptr, nullptr, 0); if (ports) { for (int i = 0; ports[i]; ++i) { const char *pszSrcClientPort = ports[i]; @@ -154,8 +154,8 @@ const QByteArray aSessionPath = sSessionPath.toLocal8Bit(); const char *pszSessionPath = aSessionPath.constData(); jack_session_command_t *commands - = ::jack_session_notify(pJackClient, NULL, etype, pszSessionPath); - if (commands == NULL) + = ::jack_session_notify(pJackClient, nullptr, etype, pszSessionPath); + if (commands == nullptr) return false; // Second pass... @@ -193,7 +193,7 @@ if (sClientName == "system") continue; InfraClientItem *pInfraClientItem - = m_infra_clients.value(sClientName, NULL); + = m_infra_clients.value(sClientName, nullptr); if (pInfraClientItem) { pClientItem->client_command = pInfraClientItem->client_command; } else { @@ -228,7 +228,7 @@ if (sCommand.isEmpty()) { // Maybe a registered infra-client command... InfraClientItem *pInfraClientItem - = m_infra_clients.value(sClientName, NULL); + = m_infra_clients.value(sClientName, nullptr); if (pInfraClientItem && !isJackClient(sClientName)) sCommand = pInfraClientItem->client_command; } @@ -259,11 +259,11 @@ bool qjackctlSession::update (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return false; // We'll count how many connection updates... @@ -576,11 +576,11 @@ if (::jack_get_uuid_for_client_name) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return false; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return false; const char *client_uuid = ::jack_get_uuid_for_client_name( @@ -595,7 +595,7 @@ #endif jack_client_t *pJackClient = ::jack_client_open(aClientName.constData(), - jack_options_t(JackNoStartServer | JackUseExactName), NULL); + jack_options_t(JackNoStartServer | JackUseExactName), nullptr); if (pJackClient) { ::jack_client_close(pJackClient); return true; diff -Nru qjackctl-0.4.5/src/qjackctlSessionForm.cpp qjackctl-0.6.0/src/qjackctlSessionForm.cpp --- qjackctl-0.4.5/src/qjackctlSessionForm.cpp 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlSessionForm.cpp 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSessionForm.cpp // /**************************************************************************** - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -87,7 +87,7 @@ m_pBrowseButton->setFixedWidth(18); m_pBrowseButton->setText("..."); } - else m_pBrowseButton = NULL; + else m_pBrowseButton = nullptr; m_pResetButton = new QToolButton(/*this*/); m_pResetButton->setFixedWidth(18); m_pResetButton->setText("x"); @@ -135,7 +135,7 @@ // Item command browser. void qjackctlSessionInfraClientItemEditor::browseSlot (void) { - bool bBlockSignals = m_pItemEdit->blockSignals(true); + const bool bBlockSignals = m_pItemEdit->blockSignals(true); const QString& sCommand = QFileDialog::getOpenFileName(parentWidget(), tr("Infra-command")); if (!sCommand.isEmpty()) @@ -159,7 +159,7 @@ // Item text finish notification. void qjackctlSessionInfraClientItemEditor::finishSlot (void) { - bool bBlockSignals = m_pItemEdit->blockSignals(true); + const bool bBlockSignals = m_pItemEdit->blockSignals(true); emit finishSignal(); m_index = QModelIndex(); m_sDefaultText.clear(); @@ -236,7 +236,7 @@ // Setup UI struct... m_ui.setupUi(this); - m_pSetup = NULL; + m_pSetup = nullptr; // Common (sigleton) session object. m_pSession = new qjackctlSession(); @@ -263,7 +263,7 @@ // Session tree view... QHeaderView *pHeader = m_ui.SessionTreeView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::ResizeToContents); #else // pHeader->setResizeMode(QHeaderView::ResizeToContents); @@ -277,7 +277,7 @@ // Infra-client list view... pHeader = m_ui.InfraClientListView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::ResizeToContents); #else // pHeader->setResizeMode(QHeaderView::ResizeToContents); @@ -369,7 +369,7 @@ // Rebuild infra-clients list... m_pSession->clearInfraClients(); qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); - int iItemCount = m_ui.InfraClientListView->topLevelItemCount(); + const int iItemCount = m_ui.InfraClientListView->topLevelItemCount(); for (int i = 0; i < iItemCount; ++i) { QTreeWidgetItem *pItem = m_ui.InfraClientListView->topLevelItem(i); if (pItem) { @@ -442,9 +442,15 @@ pMainForm->stabilizeForm(); } + // Just about to notify main-window that we're closing. void qjackctlSessionForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { + if (m_pSetup) { + m_pSetup->sessionDirs = sessionDirs(); + m_pSetup->bSessionSaveVersion = isSaveSessionVersion(); + } + QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); @@ -486,7 +492,7 @@ { QAction *pAction = qobject_cast (sender()); if (pAction) { - int i = pAction->data().toInt(); + const int i = pAction->data().toInt(); if (i >= 0 && i < m_sessionDirs.count()) loadSessionDir(m_sessionDirs.at(i)); } @@ -556,7 +562,7 @@ // Update the recent session list and menu. void qjackctlSessionForm::updateRecent ( const QString& sSessionDir ) { - int i = m_sessionDirs.indexOf(sSessionDir); + const int i = m_sessionDirs.indexOf(sSessionDir); if (i >= 0) m_sessionDirs.removeAt(i); m_sessionDirs.prepend(sSessionDir); @@ -617,11 +623,11 @@ } qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return; pMainForm->appendMessages( @@ -629,7 +635,7 @@ QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); - bool bLoadSession = m_pSession->load(sSessionDir); + const bool bLoadSession = m_pSession->load(sSessionDir); if (bLoadSession) updateRecent(sessionDir.absolutePath()); @@ -673,11 +679,11 @@ } qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return; pMainForm->appendMessages( @@ -758,7 +764,7 @@ pTopLevelItem->setText(2, pClientItem->client_command); QListIterator iterPort(pClientItem->ports); - QTreeWidgetItem *pChildItem = NULL; + QTreeWidgetItem *pChildItem = nullptr; while (iterPort.hasNext()) { qjackctlSession::PortItem *pPortItem = iterPort.next(); pChildItem = new QTreeWidgetItem(pTopLevelItem, pChildItem); @@ -767,7 +773,7 @@ pChildItem->setText(0, pPortItem->port_name); QListIterator iterConnect(pPortItem->connects); - QTreeWidgetItem *pLeafItem = NULL; + QTreeWidgetItem *pLeafItem = nullptr; while (iterConnect.hasNext()) { qjackctlSession::ConnectItem *pConnectItem = iterConnect.next(); pLeafItem = new QTreeWidgetItem(pChildItem, pLeafItem); @@ -804,7 +810,7 @@ bool bEnabled = false; qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) - bEnabled = (pMainForm->jackClient() != NULL); + bEnabled = (pMainForm->jackClient() != nullptr); pAction = menu.addAction(QIcon(":/images/open1.png"), tr("&Load..."), this, SLOT(loadSession())); @@ -846,7 +852,7 @@ const QString& sNewInfraClient = tr("New Client"); - QTreeWidgetItem *pItem = NULL; + QTreeWidgetItem *pItem = nullptr; const QList& items = m_ui.InfraClientListView->findItems(sNewInfraClient, Qt::MatchExactly); @@ -889,7 +895,7 @@ const QString& sKey = pItem->text(0); if (!sKey.isEmpty()) { const QString& sValue = pItem->text(1); - qjackctlSession::InfraClientItem *pInfraClientItem = NULL; + qjackctlSession::InfraClientItem *pInfraClientItem = nullptr; qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::Iterator iter = list.find(sKey); if (iter == list.end()) { @@ -920,10 +926,10 @@ const QString& sKey = pItem->text(0); qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::Iterator iter = list.find(sKey); - if (iter != list.end()) { + if (iter != list.end()) list.erase(iter); - updateInfraClients(); - } + delete pItem; + updateInfraClients(); } } @@ -937,8 +943,8 @@ QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); m_ui.AddInfraClientPushButton->setEnabled(true); - m_ui.EditInfraClientPushButton->setEnabled(pItem != NULL); - m_ui.RemoveInfraClientPushButton->setEnabled(pItem != NULL); + m_ui.EditInfraClientPushButton->setEnabled(pItem != nullptr); + m_ui.RemoveInfraClientPushButton->setEnabled(pItem != nullptr); } @@ -949,14 +955,14 @@ qDebug("qjackctlSessionForm::updateInfraClients()"); #endif - int iOldItem = m_ui.InfraClientListView->indexOfTopLevelItem( + const int iOldItem = m_ui.InfraClientListView->indexOfTopLevelItem( m_ui.InfraClientListView->currentItem()); m_ui.InfraClientListView->clear(); const QIcon iconClient(":/images/client1.png"); - QTreeWidgetItem *pItem = NULL; + QTreeWidgetItem *pItem = nullptr; qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::ConstIterator iter = list.constBegin(); const qjackctlSession::InfraClientList::ConstIterator& iter_end @@ -991,10 +997,10 @@ // pAction->setEnabled(true); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("&Edit"), this, SLOT(editInfraClient())); - pAction->setEnabled(pItem != NULL); + pAction->setEnabled(pItem != nullptr); pAction = menu.addAction(QIcon(":/images/remove1.png"), tr("Re&move"), this, SLOT(removeInfraClient())); - pAction->setEnabled(pItem != NULL); + pAction->setEnabled(pItem != nullptr); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("Re&fresh"), this, SLOT(updateInfraClients())); @@ -1028,7 +1034,7 @@ #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::keyPressEvent(%d)", pKeyEvent->key()); #endif - int iKey = pKeyEvent->key(); + const int iKey = pKeyEvent->key(); switch (iKey) { case Qt::Key_Escape: close(); diff -Nru qjackctl-0.4.5/src/qjackctlSessionForm.h qjackctl-0.6.0/src/qjackctlSessionForm.h --- qjackctl-0.4.5/src/qjackctlSessionForm.h 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlSessionForm.h 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSessionForm.h // /**************************************************************************** - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -93,7 +93,7 @@ public: // Constructor. - qjackctlSessionInfraClientItemDelegate(QObject *pParent = NULL); + qjackctlSessionInfraClientItemDelegate(QObject *pParent = nullptr); protected: diff -Nru qjackctl-0.4.5/src/qjackctlSessionForm.ui qjackctl-0.6.0/src/qjackctlSessionForm.ui --- qjackctl-0.4.5/src/qjackctlSessionForm.ui 2017-04-27 14:44:14.560758474 +0000 +++ qjackctl-0.6.0/src/qjackctlSessionForm.ui 2019-10-17 07:45:45.956673224 +0000 @@ -3,7 +3,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2013, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,7 +31,7 @@ - Session - JACK Audio Connection Kit + Session :/images/session1.png diff -Nru qjackctl-0.4.5/src/qjackctlSession.h qjackctl-0.6.0/src/qjackctlSession.h --- qjackctl-0.4.5/src/qjackctlSession.h 2017-04-27 14:44:14.559757974 +0000 +++ qjackctl-0.6.0/src/qjackctlSession.h 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSession.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlSetup.cpp qjackctl-0.6.0/src/qjackctlSetup.cpp --- qjackctl-0.4.5/src/qjackctlSetup.cpp 2017-04-27 14:44:14.560758474 +0000 +++ qjackctl-0.6.0/src/qjackctlSetup.cpp 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSetup.cpp // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -30,11 +30,14 @@ #include #include +#include +#include + #ifdef CONFIG_JACK_VERSION #include #endif -#if defined(WIN32) +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) #define DEFAULT_DRIVER "portaudio" #else #define DEFAULT_DRIVER "alsa" @@ -102,9 +105,7 @@ bQueryDisconnect = m_settings.value("/QueryDisconnect", true).toBool(); bMessagesLog = m_settings.value("/MessagesLog", false).toBool(); sMessagesLogPath = m_settings.value("/MessagesLogPath", "qjackctl.log").toString(); - bBezierLines = m_settings.value("/BezierLines", false).toBool(); iTimeDisplay = m_settings.value("/TimeDisplay", 0).toInt(); - iTimeFormat = m_settings.value("/TimeFormat", 0).toInt(); sMessagesFont = m_settings.value("/MessagesFont").toString(); bMessagesLimit = m_settings.value("/MessagesLimit", true).toBool(); iMessagesLimitLines = m_settings.value("/MessagesLimitLines", 1000).toInt(); @@ -118,13 +119,13 @@ sConnectionsFont = m_settings.value("/ConnectionsFont").toString(); bQueryClose = m_settings.value("/QueryClose", true).toBool(); bQueryShutdown = m_settings.value("/QueryShutdown", true).toBool(); + bQueryRestart = m_settings.value("/QueryRestart", false).toBool(); bKeepOnTop = m_settings.value("/KeepOnTop", false).toBool(); bSystemTray = m_settings.value("/SystemTray", false).toBool(); bSystemTrayQueryClose = m_settings.value("/SystemTrayQueryClose", true).toBool(); bStartMinimized = m_settings.value("/StartMinimized", false).toBool(); bServerConfig = m_settings.value("/ServerConfig", true).toBool(); sServerConfigName = m_settings.value("/ServerConfigName", ".jackdrc").toString(); - bServerConfigTemp = m_settings.value("/ServerConfigTemp", false).toBool(); bAlsaSeqEnabled = m_settings.value("/AlsaSeqEnabled", true).toBool(); bDBusEnabled = m_settings.value("/DBusEnabled", false).toBool(); bJackDBusEnabled = m_settings.value("/JackDBusEnabled", false).toBool(); @@ -134,6 +135,7 @@ bRightButtons = m_settings.value("/RightButtons", true).toBool(); bTransportButtons = m_settings.value("/TransportButtons", true).toBool(); bTextLabels = m_settings.value("/TextLabels", true).toBool(); + bGraphButton = m_settings.value("/GraphButton", true).toBool(); iBaseFontSize = m_settings.value("/BaseFontSize", 0).toInt(); m_settings.endGroup(); @@ -215,9 +217,7 @@ m_settings.setValue("/QueryDisconnect", bQueryDisconnect); m_settings.setValue("/MessagesLog", bMessagesLog); m_settings.setValue("/MessagesLogPath", sMessagesLogPath); - m_settings.setValue("/BezierLines", bBezierLines); m_settings.setValue("/TimeDisplay", iTimeDisplay); - m_settings.setValue("/TimeFormat", iTimeFormat); m_settings.setValue("/MessagesFont", sMessagesFont); m_settings.setValue("/MessagesLimit", bMessagesLimit); m_settings.setValue("/MessagesLimitLines", iMessagesLimitLines); @@ -231,13 +231,13 @@ m_settings.setValue("/ConnectionsFont", sConnectionsFont); m_settings.setValue("/QueryClose", bQueryClose); m_settings.setValue("/QueryShutdown", bQueryShutdown); + m_settings.setValue("/QueryRestart", bQueryRestart); m_settings.setValue("/KeepOnTop", bKeepOnTop); m_settings.setValue("/SystemTray", bSystemTray); m_settings.setValue("/SystemTrayQueryClose", bSystemTrayQueryClose); m_settings.setValue("/StartMinimized", bStartMinimized); m_settings.setValue("/ServerConfig", bServerConfig); m_settings.setValue("/ServerConfigName", sServerConfigName); - m_settings.setValue("/ServerConfigTemp", bServerConfigTemp); m_settings.setValue("/AlsaSeqEnabled", bAlsaSeqEnabled); m_settings.setValue("/DBusEnabled", bDBusEnabled); m_settings.setValue("/JackDBusEnabled", bJackDBusEnabled); @@ -247,6 +247,7 @@ m_settings.setValue("/RightButtons", bRightButtons); m_settings.setValue("/TransportButtons", bTransportButtons); m_settings.setValue("/TextLabels", bTextLabels); + m_settings.setValue("/GraphButton", bGraphButton); m_settings.setValue("/BaseFontSize", iBaseFontSize); m_settings.endGroup(); @@ -289,8 +290,10 @@ //--------------------------------------------------------------------------- // Aliases preset management methods. -bool qjackctlSetup::loadAliases ( const QString& sPreset ) +bool qjackctlSetup::loadAliases (void) { + QString sPreset = sDefPreset; + QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = '/' + sPreset; @@ -303,24 +306,29 @@ const QString sAliasesKey = "/Aliases" + sSuffix; m_settings.beginGroup(sAliasesKey); m_settings.beginGroup("/Jack"); // FIXME: Audio - aliasAudioOutputs.loadSettings(m_settings, "/Outputs"); - aliasAudioInputs.loadSettings(m_settings, "/Inputs"); + aliases.audioOutputs.loadSettings(m_settings, "/Outputs"); + aliases.audioInputs.loadSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Midi"); - aliasMidiOutputs.loadSettings(m_settings, "/Outputs"); - aliasMidiInputs.loadSettings(m_settings, "/Inputs"); + aliases.midiOutputs.loadSettings(m_settings, "/Outputs"); + aliases.midiInputs.loadSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Alsa"); - aliasAlsaOutputs.loadSettings(m_settings, "/Outputs"); - aliasAlsaInputs.loadSettings(m_settings, "/Inputs"); + aliases.alsaOutputs.loadSettings(m_settings, "/Outputs"); + aliases.alsaInputs.loadSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.endGroup(); + aliases.dirty = false; + aliases.key = sPreset; + return true; } -bool qjackctlSetup::saveAliases ( const QString& sPreset ) +bool qjackctlSetup::saveAliases (void) { + const QString& sPreset = aliases.key; + QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = "/" + sPreset; @@ -334,19 +342,21 @@ m_settings.remove(sAliasesKey); m_settings.beginGroup(sAliasesKey); m_settings.beginGroup("/Jack"); // FIXME: Audio - aliasAudioOutputs.saveSettings(m_settings, "/Outputs"); - aliasAudioInputs.saveSettings(m_settings, "/Inputs"); + aliases.audioOutputs.saveSettings(m_settings, "/Outputs"); + aliases.audioInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Midi"); - aliasMidiOutputs.saveSettings(m_settings, "/Outputs"); - aliasMidiInputs.saveSettings(m_settings, "/Inputs"); + aliases.midiOutputs.saveSettings(m_settings, "/Outputs"); + aliases.midiInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Alsa"); - aliasAlsaOutputs.saveSettings(m_settings, "/Outputs"); - aliasAlsaInputs.saveSettings(m_settings, "/Inputs"); + aliases.alsaOutputs.saveSettings(m_settings, "/Outputs"); + aliases.alsaInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.endGroup(); + aliases.dirty = false; + return true; } @@ -365,7 +375,7 @@ } m_settings.beginGroup("/Settings" + sSuffix); -#if defined(WIN32) +#if defined(__WIN32__) || defined(_WIN32) || defined(WIN32) preset.sServerPrefix = m_settings.value("/Server", "jackd -S").toString(); #else preset.sServerPrefix = m_settings.value("/Server", "jackd").toString(); @@ -377,7 +387,6 @@ preset.bShorts = m_settings.value("/Shorts", false).toBool(); preset.bNoMemLock = m_settings.value("/NoMemLock", false).toBool(); preset.bUnlockMem = m_settings.value("/UnlockMem", false).toBool(); - preset.bHWMon = m_settings.value("/HWMon", false).toBool(); preset.bHWMeter = m_settings.value("/HWMeter", false).toBool(); preset.bIgnoreHW = m_settings.value("/IgnoreHW", false).toBool(); preset.iPriority = m_settings.value("/Priority", 0).toInt(); @@ -399,6 +408,7 @@ preset.iInLatency = m_settings.value("/InLatency", 0).toInt(); preset.iOutLatency = m_settings.value("/OutLatency", 0).toInt(); preset.iStartDelay = m_settings.value("/StartDelay", 2).toInt(); + preset.bSync = m_settings.value("/Sync", false).toBool(); preset.bVerbose = m_settings.value("/Verbose", false).toBool(); preset.iPortMax = m_settings.value("/PortMax", 256).toInt(); preset.sMidiDriver = m_settings.value("/MidiDriver").toString(); @@ -434,7 +444,6 @@ m_settings.setValue("/Shorts", preset.bShorts); m_settings.setValue("/NoMemLock", preset.bNoMemLock); m_settings.setValue("/UnlockMem", preset.bUnlockMem); - m_settings.setValue("/HWMon", preset.bHWMon); m_settings.setValue("/HWMeter", preset.bHWMeter); m_settings.setValue("/IgnoreHW", preset.bIgnoreHW); m_settings.setValue("/Priority", preset.iPriority); @@ -456,6 +465,7 @@ m_settings.setValue("/InLatency", preset.iInLatency); m_settings.setValue("/OutLatency", preset.iOutLatency); m_settings.setValue("/StartDelay", preset.iStartDelay); + m_settings.setValue("/Sync", preset.bSync); m_settings.setValue("/Verbose", preset.bVerbose); m_settings.setValue("/PortMax", preset.iPortMax); m_settings.setValue("/MidiDriver", preset.sMidiDriver); @@ -516,21 +526,21 @@ { QTextStream out(stderr); const QString sEol = "\n\n"; + const int argc = args.count(); int iCmdArgs = 0; - int argc = args.count(); - for (int i = 1; i < argc; i++) { + for (int i = 1; i < argc; ++i) { if (iCmdArgs > 0) { sCmdLine += ' '; sCmdLine += args.at(i); - iCmdArgs++; + ++iCmdArgs; continue; } QString sArg = args.at(i); - QString sVal = QString::null; - int iEqual = sArg.indexOf('='); + QString sVal; + const int iEqual = sArg.indexOf('='); if (iEqual >= 0) { sVal = sArg.right(sArg.length() - iEqual - 1); sArg = sArg.left(iEqual); @@ -548,7 +558,7 @@ } sDefPreset = sVal; if (iEqual < 0) - i++; + ++i; } else if (sArg == "-a" || sArg == "--active-patchbay") { if (sVal.isNull()) { @@ -558,7 +568,7 @@ bActivePatchbay = true; sActivePatchbayPath = sVal; if (iEqual < 0) - i++; + ++i; } else if (sArg == "-n" || sArg == "--server-name") { if (sVal.isNull()) { @@ -567,7 +577,7 @@ } sServerName = sVal; if (iEqual < 0) - i++; + ++i; } else if (sArg == "-h" || sArg == "--help") { print_usage(args.at(0)); @@ -588,7 +598,7 @@ else if (sArg != "-T" && sArg != "-ndefault") { // Here starts the optional command line... sCmdLine += sArg; - iCmdArgs++; + ++iCmdArgs; } } @@ -714,11 +724,23 @@ if (pWidget) { // if (bVisible) pWidget->show(); -- force initial exposure? m_settings.beginGroup("/Geometry/" + pWidget->objectName()); - #if QT_VERSION >= 0x050000 + #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) const QByteArray& geometry = m_settings.value("/geometry").toByteArray(); - if (!geometry.isEmpty()) + if (geometry.isEmpty()) { + QWidget *pParent = pWidget->parentWidget(); + if (pParent) + pParent = pParent->window(); + if (pParent == nullptr) + pParent = QApplication::desktop(); + if (pParent) { + QRect wrect(pWidget->geometry()); + wrect.moveCenter(pParent->geometry().center()); + pWidget->move(wrect.topLeft()); + } + } else { pWidget->restoreGeometry(geometry); + } #else//--LOAD_OLD_GEOMETRY QPoint wpos; QSize wsize; @@ -751,7 +773,7 @@ // only save the form geometry while its up and visible) if (pWidget) { m_settings.beginGroup("/Geometry/" + pWidget->objectName()); - #if QT_VERSION >= 0x050000 + #if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) m_settings.setValue("/geometry", pWidget->saveGeometry()); #else//--SAVE_OLD_GEOMETRY const QPoint& wpos = pWidget->pos(); @@ -769,4 +791,3 @@ // end of qjackctlSetup.cpp - diff -Nru qjackctl-0.4.5/src/qjackctlSetupForm.cpp qjackctl-0.6.0/src/qjackctlSetupForm.cpp --- qjackctl-0.4.5/src/qjackctlSetupForm.cpp 2017-04-27 14:44:14.561758974 +0000 +++ qjackctl-0.6.0/src/qjackctlSetupForm.cpp 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSetupForm.cpp // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -37,6 +37,10 @@ #include +#ifdef CONFIG_SYSTEM_TRAY +#include +#endif + #ifdef CONFIG_COREAUDIO #include #include @@ -68,7 +72,7 @@ m_ui.setupUi(this); // No settings descriptor initially (the caller will set it). - m_pSetup = NULL; + m_pSetup = nullptr; // Setup time-display radio-button group. m_pTimeDisplayButtonGroup = new QButtonGroup(this); @@ -80,6 +84,8 @@ // Initialize dirty control state. m_iDirtySetup = 0; + m_iDirtyPreset = 0; + m_iDirtyBuffSize = 0; m_iDirtySettings = 0; m_iDirtyOptions = 0; @@ -101,11 +107,11 @@ m_ui.MessagesLimitLinesComboBox->setValidator( new QIntValidator(m_ui.MessagesLimitLinesComboBox)); - m_ui.PresetComboBox->setCompleter(NULL); + m_ui.PresetComboBox->setCompleter(nullptr); - m_ui.ServerNameComboBox->setCompleter(NULL); - m_ui.ServerPrefixComboBox->setCompleter(NULL); - m_ui.ServerSuffixComboBox->setCompleter(NULL); + m_ui.ServerNameComboBox->setCompleter(nullptr); + m_ui.ServerPrefixComboBox->setCompleter(nullptr); + m_ui.ServerSuffixComboBox->setCompleter(nullptr); // UI connections... @@ -149,9 +155,6 @@ QObject::connect(m_ui.ShortsCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); - QObject::connect(m_ui.HWMonCheckBox, - SIGNAL(stateChanged(int)), - SLOT(settingsChanged())); QObject::connect(m_ui.HWMeterCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); @@ -161,6 +164,9 @@ QObject::connect(m_ui.UnlockMemCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); + QObject::connect(m_ui.SyncCheckBox, + SIGNAL(stateChanged(int)), + SLOT(settingsChanged())); QObject::connect(m_ui.VerboseCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); @@ -169,7 +175,7 @@ SLOT(settingsChanged())); QObject::connect(m_ui.FramesComboBox, SIGNAL(editTextChanged(const QString&)), - SLOT(settingsChanged())); + SLOT(buffSizeChanged())); QObject::connect(m_ui.SampleRateComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); @@ -321,12 +327,6 @@ QObject::connect(m_ui.ElapsedXrunRadioButton, SIGNAL(toggled(bool)), SLOT(optionsChanged())); - QObject::connect(m_ui.TimeFormatComboBox, - SIGNAL(activated(int)), - SLOT(optionsChanged())); - QObject::connect(m_ui.DisplayEffectCheckBox, - SIGNAL(toggled(bool)), - SLOT(toggleDisplayEffect(bool))); QObject::connect(m_ui.DisplayBlinkCheckBox, SIGNAL(toggled(bool)), SLOT(optionsChanged())); @@ -351,9 +351,6 @@ QObject::connect(m_ui.ConnectionsIconSizeComboBox, SIGNAL(activated(int)), SLOT(optionsChanged())); - QObject::connect(m_ui.BezierLinesCheckBox, - SIGNAL(stateChanged(int)), - SLOT(optionsChanged())); QObject::connect(m_ui.AliasesEnabledCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); @@ -405,9 +402,6 @@ QObject::connect(m_ui.ServerConfigNameComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); - QObject::connect(m_ui.ServerConfigTempCheckBox, - SIGNAL(stateChanged(int)), - SLOT(optionsChanged())); #ifdef CONFIG_ALSA_SEQ QObject::connect(m_ui.AlsaSeqEnabledCheckBox, SIGNAL(stateChanged(int)), @@ -433,17 +427,24 @@ QObject::connect(m_ui.TextLabelsCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); + QObject::connect(m_ui.GraphButtonCheckBox, + SIGNAL(stateChanged(int)), + SLOT(optionsChanged())); QObject::connect(m_ui.BaseFontSizeComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); - +#if 0 QObject::connect(m_ui.DialogButtonBox, SIGNAL(accepted()), SLOT(accept())); QObject::connect(m_ui.DialogButtonBox, SIGNAL(rejected()), SLOT(reject())); - +#else + QObject::connect(m_ui.DialogButtonBox, + SIGNAL(clicked(QAbstractButton *)), + SLOT(buttonClicked(QAbstractButton *))); +#endif // Try to restore old window positioning. adjustSize(); } @@ -481,7 +482,7 @@ m_pSetup = pSetup; // Avoid dirty this all up. - m_iDirtySetup++; + ++m_iDirtySetup; // Load combo box history... m_pSetup->loadComboBoxHistory(m_ui.ServerPrefixComboBox); @@ -527,7 +528,6 @@ m_ui.MessagesLogCheckBox->setChecked(m_pSetup->bMessagesLog); setComboBoxCurrentText(m_ui.MessagesLogPathComboBox, m_pSetup->sMessagesLogPath); - m_ui.BezierLinesCheckBox->setChecked(m_pSetup->bBezierLines); // Load some other defaults... QRadioButton *pRadioButton @@ -536,8 +536,6 @@ if (pRadioButton) pRadioButton->setChecked(true); - m_ui.TimeFormatComboBox->setCurrentIndex(m_pSetup->iTimeFormat); - // Load font chooser samples... const QString sSansSerif = "Sans Serif"; QFont font; @@ -578,7 +576,6 @@ font.family() + ' ' + QString::number(font.pointSize())); // The main display shiny effect option. - m_ui.DisplayEffectCheckBox->setChecked(m_pSetup->bDisplayEffect); m_ui.DisplayBlinkCheckBox->setChecked(m_pSetup->bDisplayBlink); toggleDisplayEffect(m_pSetup->bDisplayEffect); @@ -611,7 +608,6 @@ m_ui.ServerConfigCheckBox->setChecked(m_pSetup->bServerConfig); setComboBoxCurrentText(m_ui.ServerConfigNameComboBox, m_pSetup->sServerConfigName); - m_ui.ServerConfigTempCheckBox->setChecked(m_pSetup->bServerConfigTemp); m_ui.AlsaSeqEnabledCheckBox->setChecked(m_pSetup->bAlsaSeqEnabled); m_ui.DBusEnabledCheckBox->setChecked(m_pSetup->bDBusEnabled); m_ui.JackDBusEnabledCheckBox->setChecked(m_pSetup->bJackDBusEnabled); @@ -621,17 +617,25 @@ m_ui.RightButtonsCheckBox->setChecked(!m_pSetup->bRightButtons); m_ui.TransportButtonsCheckBox->setChecked(!m_pSetup->bTransportButtons); m_ui.TextLabelsCheckBox->setChecked(!m_pSetup->bTextLabels); + m_ui.GraphButtonCheckBox->setChecked(m_pSetup->bGraphButton); if (m_pSetup->iBaseFontSize > 0) m_ui.BaseFontSizeComboBox->setEditText(QString::number(m_pSetup->iBaseFontSize)); else m_ui.BaseFontSizeComboBox->setCurrentIndex(0); -#ifndef CONFIG_SYSTEM_TRAY - m_ui.SystemTrayCheckBox->setChecked(false); - m_ui.SystemTrayCheckBox->setEnabled(false); - m_ui.SystemTrayQueryCloseCheckBox->setChecked(false); - m_ui.SystemTrayQueryCloseCheckBox->setEnabled(false); -#endif +#ifdef CONFIG_SYSTEM_TRAY + const bool bSystemTray = QSystemTrayIcon::isSystemTrayAvailable(); +#else + const bool bSystemTray = false; +#endif + if (!bSystemTray) { + m_ui.SystemTrayCheckBox->setChecked(false); + m_ui.SystemTrayCheckBox->setEnabled(false); + m_ui.SystemTrayQueryCloseCheckBox->setChecked(false); + m_ui.SystemTrayQueryCloseCheckBox->setEnabled(false); + m_ui.StartMinimizedCheckBox->setChecked(false); + m_ui.StartMinimizedCheckBox->setEnabled(false); + } #ifndef CONFIG_JACK_MIDI m_ui.MidiDriverComboBox->setCurrentIndex(0); m_ui.MidiDriverTextLabel->setEnabled(false); @@ -656,96 +660,79 @@ // Load preset list... resetPresets(); - setComboBoxCurrentText(m_ui.PresetComboBox, - m_pSetup->sDefPreset); - // Finally, load default settings... - changePreset(m_ui.PresetComboBox->currentText()); + updateCurrentPreset(); // We're clean now. - m_iDirtySetup--; + --m_iDirtySetup; stabilizeForm(); } -void qjackctlSetupForm::changePreset ( const QString& sPreset ) +// Set form widgets from preset values... +void qjackctlSetupForm::setCurrentPreset ( const qjackctlPreset& preset ) { - if (sPreset.isEmpty()) - return; - - // Load Settings... - qjackctlPreset preset; - if (m_pSetup->loadPreset(preset, sPreset)) { - setComboBoxCurrentText(m_ui.ServerPrefixComboBox, preset.sServerPrefix); - setComboBoxCurrentText(m_ui.ServerNameComboBox, - preset.sServerName.isEmpty() + setComboBoxCurrentText(m_ui.ServerPrefixComboBox, + preset.sServerPrefix); + setComboBoxCurrentText(m_ui.ServerNameComboBox, + preset.sServerName.isEmpty() + ? m_pSetup->sDefPresetName + : preset.sServerName); + m_ui.RealtimeCheckBox->setChecked(preset.bRealtime); + m_ui.SoftModeCheckBox->setChecked(preset.bSoftMode); + m_ui.MonitorCheckBox->setChecked(preset.bMonitor); + m_ui.ShortsCheckBox->setChecked(preset.bShorts); + m_ui.NoMemLockCheckBox->setChecked(preset.bNoMemLock); + m_ui.UnlockMemCheckBox->setChecked(preset.bUnlockMem); + m_ui.HWMeterCheckBox->setChecked(preset.bHWMeter); + m_ui.IgnoreHWCheckBox->setChecked(preset.bIgnoreHW); + m_ui.PrioritySpinBox->setValue(preset.iPriority); + setComboBoxCurrentText(m_ui.FramesComboBox, + QString::number(preset.iFrames)); + setComboBoxCurrentText(m_ui.SampleRateComboBox, + QString::number(preset.iSampleRate)); + m_ui.PeriodsSpinBox->setValue(preset.iPeriods); + setComboBoxCurrentText(m_ui.WordLengthComboBox, + QString::number(preset.iWordLength)); + setComboBoxCurrentText(m_ui.WaitComboBox, + QString::number(preset.iWait)); + m_ui.ChanSpinBox->setValue(preset.iChan); + setComboBoxCurrentText(m_ui.DriverComboBox, preset.sDriver); + setComboBoxCurrentText(m_ui.InterfaceComboBox, + preset.sInterface.isEmpty() + ? m_pSetup->sDefPresetName + : preset.sInterface); + m_ui.AudioComboBox->setCurrentIndex(preset.iAudio); + m_ui.DitherComboBox->setCurrentIndex(preset.iDither); + setComboBoxCurrentText(m_ui.TimeoutComboBox, + QString::number(preset.iTimeout)); + setComboBoxCurrentText(m_ui.InDeviceComboBox, + preset.sInDevice.isEmpty() ? m_pSetup->sDefPresetName - : preset.sServerName); - m_ui.RealtimeCheckBox->setChecked(preset.bRealtime); - m_ui.SoftModeCheckBox->setChecked(preset.bSoftMode); - m_ui.MonitorCheckBox->setChecked(preset.bMonitor); - m_ui.ShortsCheckBox->setChecked(preset.bShorts); - m_ui.NoMemLockCheckBox->setChecked(preset.bNoMemLock); - m_ui.UnlockMemCheckBox->setChecked(preset.bUnlockMem); - m_ui.HWMonCheckBox->setChecked(preset.bHWMon); - m_ui.HWMeterCheckBox->setChecked(preset.bHWMeter); - m_ui.IgnoreHWCheckBox->setChecked(preset.bIgnoreHW); - m_ui.PrioritySpinBox->setValue(preset.iPriority); - setComboBoxCurrentText(m_ui.FramesComboBox, - QString::number(preset.iFrames)); - setComboBoxCurrentText(m_ui.SampleRateComboBox, - QString::number(preset.iSampleRate)); - m_ui.PeriodsSpinBox->setValue(preset.iPeriods); - setComboBoxCurrentText(m_ui.WordLengthComboBox, - QString::number(preset.iWordLength)); - setComboBoxCurrentText(m_ui.WaitComboBox, - QString::number(preset.iWait)); - m_ui.ChanSpinBox->setValue(preset.iChan); - setComboBoxCurrentText(m_ui.DriverComboBox, preset.sDriver); - setComboBoxCurrentText(m_ui.InterfaceComboBox, - preset.sInterface.isEmpty() - ? m_pSetup->sDefPresetName - : preset.sInterface); - m_ui.AudioComboBox->setCurrentIndex(preset.iAudio); - m_ui.DitherComboBox->setCurrentIndex(preset.iDither); - setComboBoxCurrentText(m_ui.TimeoutComboBox, - QString::number(preset.iTimeout)); - setComboBoxCurrentText(m_ui.InDeviceComboBox, - preset.sInDevice.isEmpty() - ? m_pSetup->sDefPresetName - : preset.sInDevice); - setComboBoxCurrentText(m_ui.OutDeviceComboBox, - preset.sOutDevice.isEmpty() - ? m_pSetup->sDefPresetName - : preset.sOutDevice); - m_ui.InChannelsSpinBox->setValue(preset.iInChannels); - m_ui.OutChannelsSpinBox->setValue(preset.iOutChannels); - m_ui.InLatencySpinBox->setValue(preset.iInLatency); - m_ui.OutLatencySpinBox->setValue(preset.iOutLatency); - m_ui.StartDelaySpinBox->setValue(preset.iStartDelay); - m_ui.VerboseCheckBox->setChecked(preset.bVerbose); - setComboBoxCurrentText(m_ui.PortMaxComboBox, - QString::number(preset.iPortMax)); + : preset.sInDevice); + setComboBoxCurrentText(m_ui.OutDeviceComboBox, + preset.sOutDevice.isEmpty() + ? m_pSetup->sDefPresetName + : preset.sOutDevice); + m_ui.InChannelsSpinBox->setValue(preset.iInChannels); + m_ui.OutChannelsSpinBox->setValue(preset.iOutChannels); + m_ui.InLatencySpinBox->setValue(preset.iInLatency); + m_ui.OutLatencySpinBox->setValue(preset.iOutLatency); + m_ui.StartDelaySpinBox->setValue(preset.iStartDelay); + m_ui.SyncCheckBox->setChecked(preset.bSync); + m_ui.VerboseCheckBox->setChecked(preset.bVerbose); + setComboBoxCurrentText(m_ui.PortMaxComboBox, + QString::number(preset.iPortMax)); #ifdef CONFIG_JACK_MIDI - setComboBoxCurrentText(m_ui.MidiDriverComboBox, - preset.sMidiDriver); + setComboBoxCurrentText(m_ui.MidiDriverComboBox, + preset.sMidiDriver); #endif - setComboBoxCurrentText(m_ui.ServerSuffixComboBox, preset.sServerSuffix); - // Reset dirty flag. - m_iDirtySettings = 0; - } - - // Set current preset name.. - m_sPreset = sPreset; + setComboBoxCurrentText(m_ui.ServerSuffixComboBox, preset.sServerSuffix); } -bool qjackctlSetupForm::savePreset ( const QString& sPreset ) +// Get preset values from form widgets... +bool qjackctlSetupForm::getCurrentPreset ( qjackctlPreset& preset ) { - if (sPreset.isEmpty()) - return false; - - // Unload settings. - qjackctlPreset preset; preset.sServerPrefix = m_ui.ServerPrefixComboBox->currentText(); preset.sServerName = m_ui.ServerNameComboBox->currentText(); preset.bRealtime = m_ui.RealtimeCheckBox->isChecked(); @@ -754,7 +741,6 @@ preset.bShorts = m_ui.ShortsCheckBox->isChecked(); preset.bNoMemLock = m_ui.NoMemLockCheckBox->isChecked(); preset.bUnlockMem = m_ui.UnlockMemCheckBox->isChecked(); - preset.bHWMon = m_ui.HWMonCheckBox->isChecked(); preset.bHWMeter = m_ui.HWMeterCheckBox->isChecked(); preset.bIgnoreHW = m_ui.IgnoreHWCheckBox->isChecked(); preset.iPriority = m_ui.PrioritySpinBox->value(); @@ -776,6 +762,7 @@ preset.iInLatency = m_ui.InLatencySpinBox->value(); preset.iOutLatency = m_ui.OutLatencySpinBox->value(); preset.iStartDelay = m_ui.StartDelaySpinBox->value(); + preset.bSync = m_ui.SyncCheckBox->isChecked(); preset.bVerbose = m_ui.VerboseCheckBox->isChecked(); preset.iPortMax = m_ui.PortMaxComboBox->currentText().toInt(); #ifdef CONFIG_JACK_MIDI @@ -790,7 +777,39 @@ preset.sInDevice.clear(); if (preset.sOutDevice == m_pSetup->sDefPresetName) preset.sOutDevice.clear(); - m_pSetup->savePreset(preset, sPreset); + + return true; +} + + +void qjackctlSetupForm::changePreset ( const QString& sPreset ) +{ + if (sPreset.isEmpty()) + return; + + // Load settings... + qjackctlPreset preset; + if (m_pSetup->loadPreset(preset, sPreset)) { + setCurrentPreset(preset); + // Reset dirty flag? + m_iDirtySettings = 0; + ++m_iDirtyPreset; + } + + // Set current preset name.. + m_sPreset = sPreset; +} + + +bool qjackctlSetupForm::savePreset ( const QString& sPreset ) +{ + if (sPreset.isEmpty()) + return false; + + // Unload settings. + qjackctlPreset preset; + if (getCurrentPreset(preset)) + m_pSetup->savePreset(preset, sPreset); return true; } @@ -816,6 +835,34 @@ } +void qjackctlSetupForm::updateCurrentPreset ( const qjackctlPreset& preset ) +{ + // Current preset changed for sure... + if (m_pSetup) { + ++m_iDirtySetup; + setComboBoxCurrentText(m_ui.PresetComboBox, m_pSetup->sDefPreset); + setCurrentPreset(preset); + --m_iDirtySetup; + // Set current preset name.. + m_sPreset = m_ui.PresetComboBox->currentText(); + // Set dirty flag anyway... + ++m_iDirtySettings; + } +} + + +void qjackctlSetupForm::updateCurrentPreset (void) +{ + // Have current preset changed anyhow? + if (m_pSetup && m_pSetup->sDefPreset != m_sPreset) { + ++m_iDirtySetup; + setComboBoxCurrentText(m_ui.PresetComboBox, m_pSetup->sDefPreset); + changePreset(m_ui.PresetComboBox->currentText()); + --m_iDirtySetup; + } +} + + void qjackctlSetupForm::changeCurrentPreset ( const QString& sPreset ) { if (m_iDirtySetup > 0) @@ -823,7 +870,7 @@ // Check if there's any pending changes... if (m_iDirtySettings > 0 && !m_sPreset.isEmpty()) { - switch (QMessageBox::warning(this, + switch (QMessageBox::warning(isVisible() ? this : parentWidget(), tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some settings have been changed:\n\n" "\"%1\"\n\nDo you want to save the changes?") @@ -833,18 +880,19 @@ QMessageBox::Cancel)) { case QMessageBox::Save: savePreset(m_sPreset); - m_iDirtySetup++; + ++m_iDirtySetup; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, sPreset); - m_iDirtySetup--; + --m_iDirtySetup; + // Fall thru... case QMessageBox::Discard: m_iDirtySettings = 0; break; default: // Cancel... - m_iDirtySetup++; + ++m_iDirtySetup; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, m_sPreset); - m_iDirtySetup--; + --m_iDirtySetup; return; } } @@ -859,10 +907,10 @@ if (savePreset(sPreset)) { // Reset preset combobox list. - m_iDirtySetup++; + ++m_iDirtySetup; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, sPreset); - m_iDirtySetup--; + --m_iDirtySetup; // Reset dirty flag. m_iDirtySettings = 0; stabilizeForm(); @@ -875,7 +923,7 @@ const QString sPreset = m_ui.PresetComboBox->currentText(); // Try to prompt user if he/she really wants this... - if (QMessageBox::warning(this, + if (QMessageBox::warning(isVisible() ? this : parentWidget(), tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Delete preset:\n\n" "\"%1\"\n\nAre you sure?") @@ -886,12 +934,12 @@ if (deletePreset(sPreset)) { // Reset preset combobox list, // and load a new available preset.. - m_iDirtySetup++; + ++m_iDirtySetup; int iItem = m_ui.PresetComboBox->currentIndex(); resetPresets(); m_ui.PresetComboBox->setCurrentIndex(iItem); changePreset(m_ui.PresetComboBox->currentText()); - m_iDirtySetup--; + --m_iDirtySetup; // Take care that maybe it was the default one... if (m_pSetup->sDefPreset == sPreset) m_pSetup->sDefPreset = m_sPreset; @@ -903,13 +951,13 @@ void qjackctlSetupForm::computeLatency (void) { - float lat = 0.0; - int p = m_ui.FramesComboBox->currentText().toInt(); - int r = m_ui.SampleRateComboBox->currentText().toInt(); - int n = m_ui.PeriodsSpinBox->value(); + const int p = m_ui.FramesComboBox->currentText().toInt(); + const int r = m_ui.SampleRateComboBox->currentText().toInt(); + const int n = m_ui.PeriodsSpinBox->value(); + float lat = 0.0f; if (r > 0) - lat = (float) (1000.0 * p * n) / (float) r; - if (lat > 0.0) + lat = float(1000.0f * p * n) / float(r); + if (lat > 0.0f) m_ui.LatencyTextValue->setText(QString::number(lat, 'g', 3) + " " + tr("msec")); else m_ui.LatencyTextValue->setText(tr("n/a")); @@ -918,17 +966,17 @@ void qjackctlSetupForm::changeDriverAudio ( const QString& sDriver, int iAudio ) { - bool bSun = (sDriver == "sun"); - bool bOss = (sDriver == "oss"); - bool bAlsa = (sDriver == "alsa"); - bool bCoreaudio = (sDriver == "coreaudio"); - bool bPortaudio = (sDriver == "portaudio"); - bool bFreebob = (sDriver == "freebob"); - bool bFirewire = (sDriver == "firewire"); - bool bNet = (sDriver == "net" || sDriver == "netone"); + const bool bSun = (sDriver == "sun"); + const bool bOss = (sDriver == "oss"); + const bool bAlsa = (sDriver == "alsa"); + const bool bCoreaudio = (sDriver == "coreaudio"); + const bool bPortaudio = (sDriver == "portaudio"); + const bool bFirewire = (sDriver == "firewire"); + const bool bNet = (sDriver == "net" || sDriver == "netone"); + bool bInEnabled = false; bool bOutEnabled = false; - bool bEnabled; + bool bEnabled = false;; switch (iAudio) { case QJACKCTL_DUPLEX: @@ -962,11 +1010,11 @@ || ((bAlsa || bFirewire) && iAudio != QJACKCTL_CAPTURE)); m_ui.InOutLatencyTextLabel->setEnabled((bInEnabled && !bNet) - || (bAlsa || bFreebob || bFirewire)); + || (bAlsa || bFirewire)); m_ui.InLatencySpinBox->setEnabled((bInEnabled && !bNet) - || ((bAlsa || bFreebob || bFirewire) && iAudio != QJACKCTL_PLAYBACK)); + || ((bAlsa || bFirewire) && iAudio != QJACKCTL_PLAYBACK)); m_ui.OutLatencySpinBox->setEnabled((bOutEnabled && !bNet) - || ((bAlsa || bFreebob || bFirewire) && iAudio != QJACKCTL_CAPTURE)); + || ((bAlsa || bFirewire) && iAudio != QJACKCTL_CAPTURE)); computeLatency(); } @@ -986,33 +1034,39 @@ void qjackctlSetupForm::changeDriverUpdate ( const QString& sDriver, bool bUpdate ) { - bool bDummy = (sDriver == "dummy"); - bool bSun = (sDriver == "sun"); - bool bOss = (sDriver == "oss"); - bool bAlsa = (sDriver == "alsa"); - bool bPortaudio = (sDriver == "portaudio"); - bool bCoreaudio = (sDriver == "coreaudio"); - bool bFreebob = (sDriver == "freebob"); - bool bFirewire = (sDriver == "firewire"); - bool bNet = (sDriver == "net" || sDriver == "netone"); + const bool bDummy = (sDriver == "dummy"); + const bool bSun = (sDriver == "sun"); + const bool bOss = (sDriver == "oss"); + const bool bAlsa = (sDriver == "alsa"); + const bool bPortaudio = (sDriver == "portaudio"); + const bool bCoreaudio = (sDriver == "coreaudio"); + const bool bFirewire = (sDriver == "firewire"); + const bool bNet = (sDriver == "net" || sDriver == "netone"); + +#ifdef CONFIG_DBUS + const bool bJackDBus = m_ui.JackDBusEnabledCheckBox->isChecked(); +#else + const bool bJackDBus = false; +#endif - m_ui.NoMemLockCheckBox->setEnabled(!bCoreaudio); - m_ui.UnlockMemCheckBox->setEnabled(!bCoreaudio + m_ui.SyncCheckBox->setEnabled(bJackDBus); + + m_ui.NoMemLockCheckBox->setEnabled(!bCoreaudio && !bJackDBus); + m_ui.UnlockMemCheckBox->setEnabled(!bCoreaudio && !bJackDBus && !m_ui.NoMemLockCheckBox->isChecked()); m_ui.SoftModeCheckBox->setEnabled(bAlsa); m_ui.MonitorCheckBox->setEnabled(bAlsa); m_ui.ShortsCheckBox->setEnabled(bAlsa); - m_ui.HWMonCheckBox->setEnabled(bAlsa); m_ui.HWMeterCheckBox->setEnabled(bAlsa); - m_ui.IgnoreHWCheckBox->setEnabled(bSun || bOss); + m_ui.IgnoreHWCheckBox->setEnabled((bSun || bOss) && !bJackDBus); if (bCoreaudio || bPortaudio) { m_ui.PriorityTextLabel->setEnabled(false); m_ui.PrioritySpinBox->setEnabled(false); } else { - bool bPriorityEnabled = m_ui.RealtimeCheckBox->isChecked(); + const bool bPriorityEnabled = m_ui.RealtimeCheckBox->isChecked(); m_ui.PriorityTextLabel->setEnabled(bPriorityEnabled); m_ui.PrioritySpinBox->setEnabled(bPriorityEnabled); } @@ -1023,14 +1077,14 @@ m_ui.FramesTextLabel->setEnabled(!bNet); m_ui.FramesComboBox->setEnabled(!bNet); - m_ui.PeriodsTextLabel->setEnabled(bAlsa || bSun || bOss || bFreebob || bFirewire); - m_ui.PeriodsSpinBox->setEnabled(bAlsa || bSun || bOss || bFreebob || bFirewire); + m_ui.PeriodsTextLabel->setEnabled(bAlsa || bSun || bOss || bFirewire); + m_ui.PeriodsSpinBox->setEnabled(bAlsa || bSun || bOss || bFirewire); - if (bUpdate && (bFreebob || bFirewire) && m_ui.PeriodsSpinBox->value() < 3) + if (bUpdate && (bFirewire) && m_ui.PeriodsSpinBox->value() < 3) m_ui.PeriodsSpinBox->setValue(3); - m_ui.WordLengthTextLabel->setEnabled(bSun || bOss); - m_ui.WordLengthComboBox->setEnabled(bSun || bOss); + m_ui.WordLengthTextLabel->setEnabled((bSun || bOss) && !bJackDBus); + m_ui.WordLengthComboBox->setEnabled((bSun || bOss) && !bJackDBus); m_ui.WaitTextLabel->setEnabled(bDummy); m_ui.WaitComboBox->setEnabled(bDummy); @@ -1038,7 +1092,8 @@ m_ui.ChanTextLabel->setEnabled(bPortaudio); m_ui.ChanSpinBox->setEnabled(bPortaudio); - int iAudio = m_ui.AudioComboBox->currentIndex(); + const int iAudio + = m_ui.AudioComboBox->currentIndex(); bool bEnabled = (bAlsa || bPortaudio); if (bEnabled && iAudio == QJACKCTL_DUPLEX) { const QString& sInDevice = m_ui.InDeviceComboBox->currentText(); @@ -1047,7 +1102,7 @@ sOutDevice.isEmpty() || sOutDevice == m_pSetup->sDefPresetName); } - bool bInterface = (bEnabled || bCoreaudio || bFreebob || bFirewire); + const bool bInterface = (bEnabled || bCoreaudio || bFirewire); m_ui.InterfaceTextLabel->setEnabled(bInterface); m_ui.InterfaceComboBox->setEnabled(bInterface); if (!bInterface) @@ -1061,6 +1116,13 @@ m_ui.MidiDriverComboBox->setEnabled(bAlsa); #endif + m_ui.ServerNameTextLabel->setEnabled(!bJackDBus); + m_ui.ServerNameComboBox->setEnabled(!bJackDBus); + m_ui.ServerPrefixTextLabel->setEnabled(!bJackDBus); + m_ui.ServerPrefixComboBox->setEnabled(!bJackDBus); + m_ui.ServerSuffixTextLabel->setEnabled(!bJackDBus); + m_ui.ServerSuffixComboBox->setEnabled(!bJackDBus); + changeDriverAudio(sDriver, iAudio); } @@ -1150,9 +1212,11 @@ m_ui.StopJackCheckBox->setChecked(true); } - bEnabled = m_ui.ServerConfigCheckBox->isChecked(); + bEnabled = !m_ui.JackDBusEnabledCheckBox->isChecked(); + m_ui.ServerConfigCheckBox->setEnabled(bEnabled); + if (bEnabled) + bEnabled = m_ui.ServerConfigCheckBox->isChecked(); m_ui.ServerConfigNameComboBox->setEnabled(bEnabled); - m_ui.ServerConfigTempCheckBox->setEnabled(bEnabled); m_ui.AliasesEditingCheckBox->setEnabled( m_ui.AliasesEnabledCheckBox->isChecked()); @@ -1163,9 +1227,13 @@ m_ui.TransportButtonsCheckBox->setEnabled( m_ui.LeftButtonsCheckBox->isChecked()); + m_ui.GraphButtonCheckBox->setEnabled( + !m_ui.LeftButtonsCheckBox->isChecked()); changeDriverUpdate(m_ui.DriverComboBox->currentText(), false); + bValid = (bValid || m_iDirtyBuffSize > 0); + m_ui.DialogButtonBox->button(QDialogButtonBox::Apply)->setEnabled(bValid); m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bValid); } @@ -1231,7 +1299,7 @@ // Startup script browse slot. -void qjackctlSetupForm::browseStartupScript() +void qjackctlSetupForm::browseStartupScript (void) { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. @@ -1248,7 +1316,7 @@ // Post-startup script browse slot. -void qjackctlSetupForm::browsePostStartupScript() +void qjackctlSetupForm::browsePostStartupScript (void) { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. @@ -1265,7 +1333,7 @@ // Shutdown script browse slot. -void qjackctlSetupForm::browseShutdownScript() +void qjackctlSetupForm::browseShutdownScript (void) { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. @@ -1282,7 +1350,7 @@ // Post-shutdown script browse slot. -void qjackctlSetupForm::browsePostShutdownScript() +void qjackctlSetupForm::browsePostShutdownScript (void) { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. @@ -1299,7 +1367,7 @@ // Active Patchbay path browse slot. -void qjackctlSetupForm::browseActivePatchbayPath() +void qjackctlSetupForm::browseActivePatchbayPath (void) { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. @@ -1317,7 +1385,7 @@ // Messages log path browse slot. -void qjackctlSetupForm::browseMessagesLogPath() +void qjackctlSetupForm::browseMessagesLogPath (void) { QString sFileName = QFileDialog::getSaveFileName( this, // Parent. @@ -1335,7 +1403,7 @@ // The display font 1 (big time) selection dialog. -void qjackctlSetupForm::chooseDisplayFont1() +void qjackctlSetupForm::chooseDisplayFont1 (void) { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, @@ -1350,7 +1418,7 @@ // The display font 2 (normal time et al.) selection dialog. -void qjackctlSetupForm::chooseDisplayFont2() +void qjackctlSetupForm::chooseDisplayFont2 (void) { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, @@ -1411,35 +1479,65 @@ } +// Brag about any buffer-size (frames/period) changes... +void qjackctlSetupForm::buffSizeChanged (void) +{ + if (m_iDirtySetup > 0) + return; + + ++m_iDirtyBuffSize; + stabilizeForm(); +} + + // Mark that some server preset settings have changed. void qjackctlSetupForm::settingsChanged (void) { if (m_iDirtySetup > 0) return; - m_iDirtySettings++; + ++m_iDirtySettings; stabilizeForm(); } + // Mark that some program options have changed. void qjackctlSetupForm::optionsChanged (void) { if (m_iDirtySetup > 0) return; - m_iDirtyOptions++; + ++m_iDirtyOptions; stabilizeForm(); } -// Accept settings (OK button slot). -void qjackctlSetupForm::accept (void) +// Apply settings (Apply button slot). +void qjackctlSetupForm::apply (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; - if (m_iDirtySettings > 0 || m_iDirtyOptions > 0) { + if (m_iDirtySettings > 0 || m_iDirtyPreset > 0) { + // Save current preset selection. + m_pSetup->sDefPreset = m_ui.PresetComboBox->currentText(); + // Always save current settings... + savePreset(m_pSetup->sDefPreset); + } + else + if (m_iDirtyBuffSize > 0) { + // Change JACK buffer size immediately... + if (!pMainForm->resetBuffSize(jack_nframes_t( + m_ui.FramesComboBox->currentText().toUInt()))) { + // Make up a settings change instead... + ++m_iDirtySettings; + } + // We're not dirty anymore... + m_iDirtyBuffSize = 0; + } + + if (m_iDirtyOptions > 0) { // To track down deferred or immediate changes. const bool bOldMessagesLog = m_pSetup->bMessagesLog; const QString sOldMessagesLogPath = m_pSetup->sMessagesLogPath; @@ -1451,8 +1549,6 @@ const int iOldJackClientPortAlias = m_pSetup->iJackClientPortAlias; const bool bOldJackClientPortMetadata = m_pSetup->bJackClientPortMetadata; const int iOldTimeDisplay = m_pSetup->iTimeDisplay; - const int iOldTimeFormat = m_pSetup->iTimeFormat; - const bool bOldDisplayEffect = m_pSetup->bDisplayEffect; const bool bOldActivePatchbay = m_pSetup->bActivePatchbay; const QString sOldActivePatchbayPath = m_pSetup->sActivePatchbayPath; const bool bOldStdoutCapture = m_pSetup->bStdoutCapture; @@ -1462,21 +1558,19 @@ #endif const int bOldMessagesLimit = m_pSetup->bMessagesLimit; const int iOldMessagesLimitLines = m_pSetup->iMessagesLimitLines; - const bool bOldBezierLines = m_pSetup->bBezierLines; const bool bOldAlsaSeqEnabled = m_pSetup->bAlsaSeqEnabled; + #ifdef CONFIG_DBUS const bool bOldDBusEnabled = m_pSetup->bDBusEnabled; const bool bOldJackDBusEnabled = m_pSetup->bJackDBusEnabled; + #endif const bool bOldAliasesEnabled = m_pSetup->bAliasesEnabled; const bool bOldAliasesEditing = m_pSetup->bAliasesEditing; const bool bOldLeftButtons = m_pSetup->bLeftButtons; const bool bOldRightButtons = m_pSetup->bRightButtons; const bool bOldTransportButtons = m_pSetup->bTransportButtons; const bool bOldTextLabels = m_pSetup->bTextLabels; + const bool bOldGraphButton = m_pSetup->bGraphButton; const int iOldBaseFontSize = m_pSetup->iBaseFontSize; - // Save current preset selection. - m_pSetup->sDefPreset = m_ui.PresetComboBox->currentText(); - // Always save current settings... - savePreset(m_pSetup->sDefPreset); // Save Options... m_pSetup->bStartupScript = m_ui.StartupScriptCheckBox->isChecked(); m_pSetup->sStartupScriptShell = m_ui.StartupScriptShellComboBox->currentText(); @@ -1494,16 +1588,13 @@ m_pSetup->bQueryDisconnect = m_ui.QueryDisconnectCheckBox->isChecked(); m_pSetup->bMessagesLog = m_ui.MessagesLogCheckBox->isChecked(); m_pSetup->sMessagesLogPath = m_ui.MessagesLogPathComboBox->currentText(); - m_pSetup->bBezierLines = m_ui.BezierLinesCheckBox->isChecked(); // Save Defaults... m_pSetup->iTimeDisplay = m_pTimeDisplayButtonGroup->checkedId(); - m_pSetup->iTimeFormat = m_ui.TimeFormatComboBox->currentIndex(); m_pSetup->sMessagesFont = m_ui.MessagesFontTextLabel->font().toString(); m_pSetup->bMessagesLimit = m_ui.MessagesLimitCheckBox->isChecked(); m_pSetup->iMessagesLimitLines = m_ui.MessagesLimitLinesComboBox->currentText().toInt(); m_pSetup->sDisplayFont1 = m_ui.DisplayFont1TextLabel->font().toString(); m_pSetup->sDisplayFont2 = m_ui.DisplayFont2TextLabel->font().toString(); - m_pSetup->bDisplayEffect = m_ui.DisplayEffectCheckBox->isChecked(); m_pSetup->bDisplayBlink = m_ui.DisplayBlinkCheckBox->isChecked(); m_pSetup->iJackClientPortAlias = m_ui.JackClientPortAliasComboBox->currentIndex(); m_pSetup->bJackClientPortMetadata = m_ui.JackClientPortMetadataCheckBox->isChecked(); @@ -1522,28 +1613,24 @@ m_pSetup->bSingleton = m_ui.SingletonCheckBox->isChecked(); m_pSetup->bServerConfig = m_ui.ServerConfigCheckBox->isChecked(); m_pSetup->sServerConfigName = m_ui.ServerConfigNameComboBox->currentText(); - m_pSetup->bServerConfigTemp = m_ui.ServerConfigTempCheckBox->isChecked(); m_pSetup->bAlsaSeqEnabled = m_ui.AlsaSeqEnabledCheckBox->isChecked(); + #if CONFIG_DBUS m_pSetup->bDBusEnabled = m_ui.DBusEnabledCheckBox->isChecked(); m_pSetup->bJackDBusEnabled = m_ui.JackDBusEnabledCheckBox->isChecked(); + #endif m_pSetup->bAliasesEnabled = m_ui.AliasesEnabledCheckBox->isChecked(); m_pSetup->bAliasesEditing = m_ui.AliasesEditingCheckBox->isChecked(); m_pSetup->bLeftButtons = !m_ui.LeftButtonsCheckBox->isChecked(); m_pSetup->bRightButtons = !m_ui.RightButtonsCheckBox->isChecked(); m_pSetup->bTransportButtons = !m_ui.TransportButtonsCheckBox->isChecked(); m_pSetup->bTextLabels = !m_ui.TextLabelsCheckBox->isChecked(); + m_pSetup->bGraphButton = m_ui.GraphButtonCheckBox->isChecked(); m_pSetup->iBaseFontSize = m_ui.BaseFontSizeComboBox->currentText().toInt(); // Check wheather something immediate has changed. if (( bOldMessagesLog && !m_pSetup->bMessagesLog) || (!bOldMessagesLog && m_pSetup->bMessagesLog) || (sOldMessagesLogPath != m_pSetup->sMessagesLogPath)) pMainForm->updateMessagesLogging(); - if (( bOldBezierLines && !m_pSetup->bBezierLines) || - (!bOldBezierLines && m_pSetup->bBezierLines)) - pMainForm->updateBezierLines(); - if (( bOldDisplayEffect && !m_pSetup->bDisplayEffect) || - (!bOldDisplayEffect && m_pSetup->bDisplayEffect)) - pMainForm->updateDisplayEffect(); if (iOldJackClientPortAlias != m_pSetup->iJackClientPortAlias) pMainForm->updateJackClientPortAlias(); if (( bOldJackClientPortMetadata && !m_pSetup->bJackClientPortMetadata) || @@ -1564,8 +1651,6 @@ pMainForm->updateTimeDisplayFonts(); if (iOldTimeDisplay != m_pSetup->iTimeDisplay) pMainForm->updateTimeDisplayToolTips(); - if (iOldTimeFormat != m_pSetup->iTimeFormat) - pMainForm->updateTimeFormat(); if ((!bOldActivePatchbay && m_pSetup->bActivePatchbay) || (sOldActivePatchbayPath != m_pSetup->sActivePatchbayPath)) pMainForm->updateActivePatchbay(); @@ -1585,24 +1670,29 @@ (!bOldRightButtons && m_pSetup->bRightButtons) || ( bOldTransportButtons && !m_pSetup->bTransportButtons) || (!bOldTransportButtons && m_pSetup->bTransportButtons) || - ( bOldTextLabels && !m_pSetup->bTextLabels) || - (!bOldTextLabels && m_pSetup->bTextLabels)) + ( bOldTextLabels && !m_pSetup->bTextLabels) || + (!bOldTextLabels && m_pSetup->bTextLabels) || + ( bOldGraphButton && !m_pSetup->bGraphButton) || + (!bOldGraphButton && m_pSetup->bGraphButton)) pMainForm->updateButtons(); + #ifdef CONFIG_DBUS + if (( bOldJackDBusEnabled && !m_pSetup->bJackDBusEnabled) || + (!bOldJackDBusEnabled && m_pSetup->bJackDBusEnabled)) + pMainForm->updateJackDBus(); + #endif // Warn if something will be only effective on next run. - if (( bOldStdoutCapture && !m_pSetup->bStdoutCapture) || - (!bOldStdoutCapture && m_pSetup->bStdoutCapture) || - ( bOldKeepOnTop && !m_pSetup->bKeepOnTop) || - (!bOldKeepOnTop && m_pSetup->bKeepOnTop) || - ( bOldAlsaSeqEnabled && !m_pSetup->bAlsaSeqEnabled) || - (!bOldAlsaSeqEnabled && m_pSetup->bAlsaSeqEnabled) || - ( bOldDBusEnabled && !m_pSetup->bDBusEnabled) || - (!bOldDBusEnabled && m_pSetup->bDBusEnabled) || - ( bOldJackDBusEnabled && !m_pSetup->bJackDBusEnabled) || - (!bOldJackDBusEnabled && m_pSetup->bJackDBusEnabled) || + if (( bOldStdoutCapture && !m_pSetup->bStdoutCapture) || + (!bOldStdoutCapture && m_pSetup->bStdoutCapture) || + ( bOldKeepOnTop && !m_pSetup->bKeepOnTop) || + (!bOldKeepOnTop && m_pSetup->bKeepOnTop) || + ( bOldAlsaSeqEnabled && !m_pSetup->bAlsaSeqEnabled) || + (!bOldAlsaSeqEnabled && m_pSetup->bAlsaSeqEnabled) || + #ifdef CONFIG_DBUS + ( bOldDBusEnabled && !m_pSetup->bDBusEnabled) || + (!bOldDBusEnabled && m_pSetup->bDBusEnabled) || + #endif (iOldBaseFontSize != m_pSetup->iBaseFontSize)) pMainForm->showDirtySetupWarning(); - // If server is currently running, warn user... - pMainForm->showDirtySettingsWarning(); } // Save combobox history... @@ -1621,11 +1711,30 @@ // Save/commit to disk. m_pSetup->saveSetup(); - // Reset dirty flags. + // If server is currently running, warn user... + if (m_iDirtySettings > 0 || m_iDirtyPreset > 0) { + // Maybe whether to restart the server, who knows? + pMainForm->showDirtySettingsWarning(); + // Maybe something changed on the way up?... + m_ui.QueryShutdownCheckBox->setChecked(m_pSetup->bQueryShutdown); + } + + // Reset all dirty flags... + m_iDirtyPreset = 0; m_iDirtySettings = 0; m_iDirtyOptions = 0; + // Make it stable anyway... + stabilizeForm(); +} + + +// Accept settings (OK button slot). +void qjackctlSetupForm::accept (void) +{ // Just go with dialog acceptance. + apply(); + QDialog::accept(); } @@ -1638,6 +1747,29 @@ } +// Dialog bos button slot. +void qjackctlSetupForm::buttonClicked ( QAbstractButton *pButton ) +{ +#ifdef CONFIG_DEBUG + qDebug("qjackctlSetupForm::buttonClicked(%p)", pButton); +#endif + + switch (m_ui.DialogButtonBox->buttonRole(pButton)) { + case QDialogButtonBox::AcceptRole: + accept(); + break; + case QDialogButtonBox::ApplyRole: + apply(); + break; + case QDialogButtonBox::RejectRole: + reject(); + // Fall-thru... + default: + break; + } +} + + // Check whether we're clear to close. bool qjackctlSetupForm::queryClose (void) { @@ -1645,7 +1777,7 @@ // Check if there's any pending changes... if (m_iDirtySettings > 0 || m_iDirtyOptions > 0) { - switch (QMessageBox::warning(this, + switch (QMessageBox::warning(isVisible() ? this : parentWidget(), tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some settings have been changed.\n\n" "Do you want to apply the changes?"), diff -Nru qjackctl-0.4.5/src/qjackctlSetupForm.h qjackctl-0.6.0/src/qjackctlSetupForm.h --- qjackctl-0.4.5/src/qjackctlSetupForm.h 2017-04-27 14:44:14.561758974 +0000 +++ qjackctl-0.6.0/src/qjackctlSetupForm.h 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSetupForm.h // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,8 +26,10 @@ // Forward declarations. class qjackctlSetup; +class qjackctlPreset; class QButtonGroup; +class QAbstractButton; //---------------------------------------------------------------------------- @@ -45,7 +47,8 @@ ~qjackctlSetupForm(); void setup(qjackctlSetup *pSetup); - + void updateCurrentPreset(const qjackctlPreset& preset); + void updateCurrentPreset(); bool queryClose(); protected slots: @@ -75,18 +78,27 @@ void chooseMessagesFont(); void chooseConnectionsFont(); + void buffSizeChanged(); + void settingsChanged(); void optionsChanged(); + void apply(); + void accept(); void reject(); + void buttonClicked(QAbstractButton *); + protected: // A combo-box text item setter helper. void setComboBoxCurrentText ( QComboBox *pComboBox, const QString& sText ) const; + void setCurrentPreset(const qjackctlPreset& preset); + bool getCurrentPreset(qjackctlPreset& preset); + void changePreset(const QString& sPreset); bool savePreset(const QString& sPreset); bool deletePreset(const QString& sPreset); @@ -116,6 +128,8 @@ QButtonGroup *m_pTimeDisplayButtonGroup; int m_iDirtySetup; + int m_iDirtyPreset; + int m_iDirtyBuffSize; int m_iDirtySettings; int m_iDirtyOptions; diff -Nru qjackctl-0.4.5/src/qjackctlSetupForm.ui qjackctl-0.6.0/src/qjackctlSetupForm.ui --- qjackctl-0.4.5/src/qjackctlSetupForm.ui 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSetupForm.ui 2019-10-17 07:45:45.957673224 +0000 @@ -3,7 +3,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -31,7 +31,7 @@ - Setup - JACK Audio Connection Kit + Setup :/images/setup1.png @@ -209,11 +209,6 @@ - freebob - - - - firewire @@ -631,6 +626,22 @@ + + + + 50 + false + + + + Whether to use server synchronous mode + + + &Use server synchronous mode + + + + @@ -944,22 +955,6 @@ - - - - 50 - false - - - - Enable hardware monitoring of capture ports - - - H/W M&onitor - - - - @@ -2509,7 +2504,7 @@ - + @@ -2525,7 +2520,7 @@ - + @@ -2900,22 +2895,6 @@ - - - - 50 - false - - - - Whether to enable a shiny glass light effect on the main display - - - &Display shiny glass light effect - - - - @@ -2933,74 +2912,6 @@ - - - - 4 - - - 4 - - - - - - 50 - false - - - - Time F&ormat: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - false - - - TimeFormatComboBox - - - - - - - - 50 - false - - - - The general time format on display - - - false - - - - hh:mm:ss - - - - - hh:mm:ss.d - - - - - hh:mm:ss.dd - - - - - hh:mm:ss.ddd - - - - - - @@ -3334,23 +3245,7 @@ - - - - - 50 - false - - - - Whether to draw connection lines as cubic Bezier curves - - - Draw connection and patchbay lines as Be&zier curves - - - - + @@ -3366,7 +3261,7 @@ - + @@ -3388,7 +3283,7 @@ - + @@ -3422,7 +3317,7 @@ - + @@ -3438,7 +3333,7 @@ - + @@ -3540,10 +3435,10 @@ - Whether to ask for confirmation on JACK audio server shutdown + Whether to ask for confirmation on JACK audio server shutdown and/or restart - Confirm server sh&utdown + Confirm server sh&utdown and/or restart @@ -3612,22 +3507,6 @@ - - - - - 50 - false - - - - Whether to restrict to one single application instance (X11) - - - Single application &instance - - - @@ -3676,22 +3555,6 @@ - - - - 50 - false - - - - Whether to exit once all clients have closed (auto-start) - - - C&onfigure as temporary server - - - - @@ -3756,17 +3619,20 @@ - - - Qt::Vertical + + + + 50 + false + - - - 20 - 8 - + + Whether to restrict to one single application instance (X11) - + + Single application &instance + + @@ -3873,21 +3739,37 @@ + + + + Qt::Vertical + + + + 20 + 8 + + + + + + + + + 50 + false + + + + Whether to replace Connections with Graph button on the main window + + + Replace Connections with &Graph button + + + - - - - Qt::Vertical - - - - 20 - 8 - - - - @@ -4013,7 +3895,7 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Apply|QDialogButtonBox::Ok @@ -4040,6 +3922,7 @@ FramesComboBox PeriodsSpinBox MidiDriverComboBox + SyncCheckBox VerboseCheckBox ServerPrefixComboBox ServerNameComboBox @@ -4048,7 +3931,6 @@ HWMeterCheckBox MonitorCheckBox SoftModeCheckBox - HWMonCheckBox ShortsCheckBox IgnoreHWCheckBox PrioritySpinBox @@ -4097,17 +3979,14 @@ TransportBBTRadioButton ElapsedResetRadioButton ElapsedXrunRadioButton - TimeFormatComboBox DisplayFont1PushButton DisplayFont2PushButton - DisplayEffectCheckBox DisplayBlinkCheckBox MessagesFontPushButton MessagesLimitCheckBox MessagesLimitLinesComboBox ConnectionsFontPushButton ConnectionsIconSizeComboBox - BezierLinesCheckBox AliasesEnabledCheckBox AliasesEditingCheckBox JackClientPortAliasComboBox @@ -4119,14 +3998,13 @@ SystemTrayCheckBox SystemTrayQueryCloseCheckBox StartMinimizedCheckBox - SingletonCheckBox ServerConfigCheckBox ServerConfigNameComboBox - ServerConfigTempCheckBox AlsaSeqEnabledCheckBox DBusEnabledCheckBox JackDBusEnabledCheckBox StopJackCheckBox + SingletonCheckBox LeftButtonsCheckBox RightButtonsCheckBox TransportButtonsCheckBox diff -Nru qjackctl-0.4.5/src/qjackctlSetup.h qjackctl-0.6.0/src/qjackctlSetup.h --- qjackctl-0.4.5/src/qjackctlSetup.h 2017-04-27 14:44:14.560758474 +0000 +++ qjackctl-0.6.0/src/qjackctlSetup.h 2019-10-17 07:45:45.956673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSetup.h // /**************************************************************************** - Copyright (C) 2003-2017, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ #ifndef __qjackctlSetup_h #define __qjackctlSetup_h -#include "qjackctlConnectAlias.h" +#include "qjackctlAliases.h" #include @@ -55,7 +55,6 @@ bool bShorts; bool bNoMemLock; bool bUnlockMem; - bool bHWMon; bool bHWMeter; bool bIgnoreHW; int iPriority; @@ -77,6 +76,7 @@ int iInLatency; int iOutLatency; int iStartDelay; + bool bSync; bool bVerbose; int iPortMax; QString sMidiDriver; @@ -143,9 +143,7 @@ bool bQueryDisconnect; bool bMessagesLog; QString sMessagesLogPath; - bool bBezierLines; int iTimeDisplay; - int iTimeFormat; QString sMessagesFont; bool bMessagesLimit; int iMessagesLimitLines; @@ -159,13 +157,13 @@ QString sConnectionsFont; bool bQueryClose; bool bQueryShutdown; + bool bQueryRestart; bool bKeepOnTop; bool bSystemTray; bool bSystemTrayQueryClose; bool bStartMinimized; bool bServerConfig; QString sServerConfigName; - bool bServerConfigTemp; bool bAlsaSeqEnabled; bool bDBusEnabled; bool bJackDBusEnabled; @@ -175,6 +173,7 @@ bool bRightButtons; bool bTransportButtons; bool bTextLabels; + bool bGraphButton; int iBaseFontSize; // Defaults... @@ -193,16 +192,12 @@ bool bSessionSaveVersion; // Aliases containers. - qjackctlConnectAlias aliasAudioOutputs; - qjackctlConnectAlias aliasAudioInputs; - qjackctlConnectAlias aliasMidiOutputs; - qjackctlConnectAlias aliasMidiInputs; - qjackctlConnectAlias aliasAlsaOutputs; - qjackctlConnectAlias aliasAlsaInputs; + qjackctlAliases aliases; // Aliases preset management methods. - bool loadAliases(const QString& sPreset); - bool saveAliases(const QString& sPreset); + bool loadAliases(); + bool saveAliases(); + // Preset management methods. bool loadPreset(qjackctlPreset& preset, const QString& sPreset); bool savePreset(qjackctlPreset& preset, const QString& sPreset); diff -Nru qjackctl-0.4.5/src/qjackctlSocketForm.cpp qjackctl-0.6.0/src/qjackctlSocketForm.cpp --- qjackctl-0.4.5/src/qjackctlSocketForm.cpp 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSocketForm.cpp 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSocketForm.cpp // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,7 +25,7 @@ #include "qjackctlMainForm.h" #include "qjackctlPatchbay.h" -#include "qjackctlConnectAlias.h" +#include "qjackctlAliases.h" #include #include @@ -46,10 +46,10 @@ // Setup UI struct... m_ui.setupUi(this); - m_pSocketList = NULL; + m_pSocketList = nullptr; m_bSocketNew = false; m_iSocketNameChanged = 0; - m_ppPixmaps = NULL; + m_ppPixmaps = nullptr; m_iDirtyCount = 0; // Setup time-display radio-button group. @@ -66,7 +66,7 @@ QHeaderView *pHeader = m_ui.PlugListView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(300); -#if QT_VERSION >= 0x050000 +#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0) // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); #else @@ -227,7 +227,7 @@ m_ui.ExclusiveCheckBox->setChecked(pSocket->isExclusive()); m_ui.PlugListView->clear(); - QTreeWidgetItem *pPlugItem = NULL; + QTreeWidgetItem *pPlugItem = nullptr; QStringListIterator iter(pSocket->pluglist()); while (iter.hasNext()) { const QString& sPlugName = iter.next(); @@ -275,7 +275,7 @@ if (m_ui.SocketForwardComboBox->currentIndex() > 0) pSocket->setForward(m_ui.SocketForwardComboBox->currentText()); else - pSocket->setForward(QString::null); + pSocket->setForward(QString()); m_iDirtyCount = 0; } @@ -326,7 +326,7 @@ // Validate form fields and accept it valid. void qjackctlSocketForm::accept (void) { - if (m_pSocketList == NULL) + if (m_pSocketList == nullptr) return; if (!validateForm()) @@ -392,7 +392,7 @@ // Add new Plug to socket list. void qjackctlSocketForm::addPlug (void) { - if (m_ppPixmaps == NULL) + if (m_ppPixmaps == nullptr) return; QString sPlugName = m_ui.PlugNameComboBox->currentText(); @@ -404,7 +404,7 @@ if (pItem) { pItem->setText(0, sPlugName); pItem->setFlags(pItem->flags() | Qt::ItemIsEditable); - QPixmap *pXpmPlug = NULL; + QPixmap *pXpmPlug = nullptr; switch (m_pSocketTypeButtonGroup->checkedId()) { case 0: // QJACKCTL_SOCKETTYPE_JACK_AUDIO pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_AUDIO_PLUG]; @@ -419,7 +419,7 @@ pItem->setSelected(true); m_ui.PlugListView->setCurrentItem(pItem); } - m_ui.PlugNameComboBox->setEditText(QString::null); + m_ui.PlugNameComboBox->setEditText(QString()); } clientNameChanged(); @@ -514,7 +514,7 @@ int iItem = 0; int iItemCount = 0; QTreeWidgetItem *pItem = m_ui.PlugListView->itemAt(pos); - if (pItem == NULL) + if (pItem == nullptr) pItem = m_ui.PlugListView->currentItem(); if (pItem) { iItem = m_ui.PlugListView->indexOfTopLevelItem(pItem); @@ -538,7 +538,7 @@ SLOT(activateAddPlugMenu(QAction*))); pAddPlugMenu->setEnabled(iIndex > 0); // Build the plug context menu... - const bool bEnabled = (pItem != NULL); + const bool bEnabled = (pItem != nullptr); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("Edit"), this, SLOT(editPlug())); pAction->setEnabled(bEnabled); @@ -560,11 +560,11 @@ void qjackctlSocketForm::updateJackClients ( int iSocketType ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; @@ -581,7 +581,7 @@ // Grab all client ports. const char **ppszClientPorts = jack_get_ports( - pJackClient, NULL, pszJackPortType, + pJackClient, nullptr, pszJackPortType, (bReadable ? JackPortIsOutput : JackPortIsInput)); if (ppszClientPorts) { int iClientPort = 0; @@ -590,7 +590,7 @@ int iColon = sClientPort.indexOf(':'); if (iColon >= 0) { QString sClientName - = qjackctlClientAlias::escapeRegExpDigits( + = qjackctlAliasItem::escapeRegExpDigits( sClientPort.left(iColon)); bool bExists = false; for (int i = 0; @@ -616,11 +616,11 @@ #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return; const bool bReadable = m_pSocketList->isReadable(); @@ -641,7 +641,7 @@ while (snd_seq_query_next_client(pAlsaSeq, pClientInfo) >= 0) { const int iAlsaClient = snd_seq_client_info_get_client(pClientInfo); QString sClient - = qjackctlClientAlias::escapeRegExpDigits( + = qjackctlAliasItem::escapeRegExpDigits( QString::fromUtf8(snd_seq_client_info_get_name(pClientInfo))); if (iAlsaClient > 0) { bool bExists = false; @@ -672,9 +672,9 @@ // Socket type change slot. void qjackctlSocketForm::socketTypeChanged (void) { - if (m_ppPixmaps == NULL) + if (m_ppPixmaps == nullptr) return; - if (m_pSocketList == NULL) + if (m_pSocketList == nullptr) return; const bool bBlockSignals = m_ui.ClientNameComboBox->blockSignals(true); @@ -682,8 +682,8 @@ m_ui.ClientNameComboBox->clear(); - QPixmap *pXpmSocket = NULL; - QPixmap *pXpmPlug = NULL; + QPixmap *pXpmSocket = nullptr; + QPixmap *pXpmPlug = nullptr; const bool bReadable = m_pSocketList->isReadable(); const int iSocketType = m_pSocketTypeButtonGroup->checkedId(); @@ -781,11 +781,11 @@ void qjackctlSocketForm::updateJackPlugs ( int iSocketType ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; jack_client_t *pJackClient = pMainForm->jackClient(); - if (pJackClient == NULL) + if (pJackClient == nullptr) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; @@ -805,7 +805,7 @@ const bool bReadable = m_pSocketList->isReadable(); const QIcon icon(*m_ppPixmaps[iPixmap]); const char **ppszClientPorts = jack_get_ports( - pJackClient, NULL, pszJackPortType, + pJackClient, nullptr, pszJackPortType, (bReadable ? JackPortIsOutput : JackPortIsInput)); if (ppszClientPorts) { int iClientPort = 0; @@ -814,7 +814,7 @@ const int iColon = sClientPort.indexOf(':'); if (iColon >= 0 && rxClientName.exactMatch(sClientPort.left(iColon))) { QString sPort - = qjackctlClientAlias::escapeRegExpDigits( + = qjackctlAliasItem::escapeRegExpDigits( sClientPort.right(sClientPort.length() - iColon - 1)); if (m_ui.PlugListView->findItems(sPort, Qt::MatchExactly).isEmpty()) m_ui.PlugNameComboBox->addItem(icon, sPort); @@ -835,11 +835,11 @@ #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); - if (pMainForm == NULL) + if (pMainForm == nullptr) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); - if (pAlsaSeq == NULL) + if (pAlsaSeq == nullptr) return; const QString sClientName = m_ui.ClientNameComboBox->currentText(); @@ -875,7 +875,7 @@ if (((uiPortCapability & uiAlsaFlags) == uiAlsaFlags) && ((uiPortCapability & SND_SEQ_PORT_CAP_NO_EXPORT) == 0)) { QString sPort - = qjackctlClientAlias::escapeRegExpDigits( + = qjackctlAliasItem::escapeRegExpDigits( QString::fromUtf8(snd_seq_port_info_get_name(pPortInfo))); if (m_ui.PlugListView->findItems(sPort, Qt::MatchExactly).isEmpty()) m_ui.PlugNameComboBox->addItem(icon, sPort); @@ -891,9 +891,9 @@ // Update client list if available. void qjackctlSocketForm::clientNameChanged (void) { - if (m_ppPixmaps == NULL) + if (m_ppPixmaps == nullptr) return; - if (m_pSocketList == NULL) + if (m_pSocketList == nullptr) return; m_ui.PlugNameComboBox->clear(); diff -Nru qjackctl-0.4.5/src/qjackctlSocketForm.h qjackctl-0.6.0/src/qjackctlSocketForm.h --- qjackctl-0.4.5/src/qjackctlSocketForm.h 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSocketForm.h 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSocketForm.h // /**************************************************************************** - Copyright (C) 2003-2015, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff -Nru qjackctl-0.4.5/src/qjackctlSocketForm.ui qjackctl-0.6.0/src/qjackctlSocketForm.ui --- qjackctl-0.4.5/src/qjackctlSocketForm.ui 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSocketForm.ui 2019-10-17 07:45:45.957673224 +0000 @@ -2,7 +2,7 @@ rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. - Copyright (C) 2003-2014, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -30,7 +30,7 @@ - Socket - JACK Audio Connection Kit + Socket :/images/patchbay1.png diff -Nru qjackctl-0.4.5/src/qjackctlSystemTray.cpp qjackctl-0.6.0/src/qjackctlSystemTray.cpp --- qjackctl-0.4.5/src/qjackctlSystemTray.cpp 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSystemTray.cpp 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSystemTray.cpp // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,7 +25,7 @@ #include #include -#if QT_VERSION < 0x040500 +#if QT_VERSION < QT_VERSION_CHECK(4, 5, 0) namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); } @@ -47,13 +47,6 @@ QSystemTrayIcon::setToolTip(pParent->windowTitle()); } - // Set proper context menu, even though it's empty... - QSystemTrayIcon::setContextMenu(&m_menu); - - QObject::connect(&m_menu, - SIGNAL(aboutToShow()), - SLOT(contextMenuRequested())); - QObject::connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(activated(QSystemTrayIcon::ActivationReason))); @@ -73,11 +66,6 @@ void qjackctlSystemTray::activated ( QSystemTrayIcon::ActivationReason reason ) { switch (reason) { -#if 0 - case QSystemTrayIcon::Context: - contextMenuRequested(); - break; -#endif case QSystemTrayIcon::Trigger: emit clicked(); break; @@ -94,12 +82,6 @@ } -void qjackctlSystemTray::contextMenuRequested (void) -{ - emit contextMenuRequested(QCursor::pos()); -} - - // Default destructor. qjackctlSystemTray::~qjackctlSystemTray (void) { diff -Nru qjackctl-0.4.5/src/qjackctlSystemTray.h qjackctl-0.6.0/src/qjackctlSystemTray.h --- qjackctl-0.4.5/src/qjackctlSystemTray.h 2017-04-27 14:44:14.562759474 +0000 +++ qjackctl-0.6.0/src/qjackctlSystemTray.h 2019-10-17 07:45:45.957673224 +0000 @@ -1,7 +1,7 @@ // qjackctlSystemTray.h // /**************************************************************************** - Copyright (C) 2003-2016, rncbc aka Rui Nuno Capela. All rights reserved. + Copyright (C) 2003-2019, rncbc aka Rui Nuno Capela. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -23,9 +23,7 @@ #define __qjackctlSystemTray_h #include - #include -#include //---------------------------------------------------------------------------- @@ -46,8 +44,8 @@ void setBackground(const QColor& background); const QColor& background() const; - // Set system tray icon overlay. - void setPixmapOverlay(const QPixmap& pmOverlay); + // Set system tray icon overlay. + void setPixmapOverlay(const QPixmap& pmOverlay); const QPixmap& pixmapOverlay() const; // System tray icon/pixmaps update method. @@ -67,22 +65,15 @@ // Xrun reset signal. void middleClicked(); - // Context menu signal. - void contextMenuRequested(const QPoint& pos); - protected slots: // Handle systeam tray activity. void activated(QSystemTrayIcon::ActivationReason); - // Context menu slot. - void contextMenuRequested(); - private: // Instance pixmap and background color. QIcon m_icon; - QMenu m_menu; QPixmap m_pixmap; QPixmap m_pixmapOverlay; QColor m_background; diff -Nru qjackctl-0.4.5/src/src.pri.in qjackctl-0.6.0/src/src.pri.in --- qjackctl-0.4.5/src/src.pri.in 2017-04-27 14:44:14.563759974 +0000 +++ qjackctl-0.6.0/src/src.pri.in 2019-10-17 07:45:45.957673224 +0000 @@ -22,10 +22,8 @@ QT += dbus } -# X11 support -unix:!macx { - QX11EXTRAS = @ac_qx11extras@ - !isEmpty(QX11EXTRAS) { - QT += x11extras - } +# Network support +QNETWORK = @ac_qnetwork@ +!isEmpty(QNETWORK) { + QT += network } diff -Nru qjackctl-0.4.5/src/src.pro qjackctl-0.6.0/src/src.pro --- qjackctl-0.4.5/src/src.pro 2017-04-27 14:44:14.563759974 +0000 +++ qjackctl-0.6.0/src/src.pro 2019-10-17 07:45:45.957673224 +0000 @@ -10,12 +10,17 @@ #DEFINES += DEBUG HEADERS += config.h \ + qjackctl.h \ qjackctlAbout.h \ qjackctlAlsaConnect.h \ + qjackctlAlsaGraph.h \ qjackctlConnect.h \ - qjackctlConnectAlias.h \ + qjackctlAliases.h \ + qjackctlGraph.h \ + qjackctlGraphCommand.h \ qjackctlInterfaceComboBox.h \ qjackctlJackConnect.h \ + qjackctlJackGraph.h \ qjackctlPatchbay.h \ qjackctlPatchbayFile.h \ qjackctlPatchbayRack.h \ @@ -25,6 +30,7 @@ qjackctlSystemTray.h \ qjackctlAboutForm.h \ qjackctlConnectionsForm.h \ + qjackctlGraphForm.h \ qjackctlMainForm.h \ qjackctlMessagesStatusForm.h \ qjackctlPatchbayForm.h \ @@ -35,10 +41,14 @@ SOURCES += \ qjackctl.cpp \ qjackctlAlsaConnect.cpp \ + qjackctlAlsaGraph.cpp \ qjackctlConnect.cpp \ - qjackctlConnectAlias.cpp \ + qjackctlAliases.cpp \ + qjackctlGraph.cpp \ + qjackctlGraphCommand.cpp \ qjackctlInterfaceComboBox.cpp \ qjackctlJackConnect.cpp \ + qjackctlJackGraph.cpp \ qjackctlPatchbay.cpp \ qjackctlPatchbayFile.cpp \ qjackctlPatchbayRack.cpp \ @@ -47,6 +57,7 @@ qjackctlSystemTray.cpp \ qjackctlAboutForm.cpp \ qjackctlConnectionsForm.cpp \ + qjackctlGraphForm.cpp \ qjackctlMainForm.cpp \ qjackctlMessagesStatusForm.cpp \ qjackctlPatchbayForm.cpp \ @@ -57,6 +68,7 @@ FORMS += \ qjackctlAboutForm.ui \ qjackctlConnectionsForm.ui \ + qjackctlGraphForm.ui \ qjackctlMainForm.ui \ qjackctlMessagesStatusForm.ui \ qjackctlPatchbayForm.ui \ @@ -76,6 +88,7 @@ translations/qjackctl_it.ts \ translations/qjackctl_ja.ts \ translations/qjackctl_nl.ts \ + translations/qjackctl_pt.ts \ translations/qjackctl_ru.ts @@ -111,17 +124,12 @@ icon.path = $${DATADIR}/icons/hicolor/32x32/apps icon.files += images/$${TARGET}.png - appdata.path = $${DATADIR}/appdata + appdata.path = $${DATADIR}/metainfo appdata.files += appdata/$${TARGET}.appdata.xml } # XML/DOM support -QT += xml - -# QT5 support -!lessThan(QT_MAJOR_VERSION, 5) { - QT += widgets -} +QT += widgets xml win32 { CONFIG += static diff -Nru qjackctl-0.4.5/src/translations/qjackctl_cs.ts qjackctl-0.6.0/src/translations/qjackctl_cs.ts --- qjackctl-0.4.5/src/translations/qjackctl_cs.ts 2017-04-27 14:44:14.565760974 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_cs.ts 2019-10-17 07:45:45.958673224 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,77 +27,88 @@ QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Usage: %1 [options] [command-and-args] Použití: %1 [volby] [příkazy a argumenty] - + Options: Volby: - + Start JACK audio server immediately JACK audioserver spustit okamžitě - + Show help about command line options Ukázat nápovědu k volbám (argumentům) příkazového řádku - + Show version information Ukázat informace o verzi - + Option -p requires an argument (preset). Volba -p vyžaduje argument (preset, přednastavení). - + Set default settings preset name Určit název přednastavení výchozího nastavení - + Set active patchbay definition file Nastavit soubor s vymezením činné zapojovací desky - + Option -a requires an argument (path). Volba -a vyžaduje argument (cesta). - + Set default JACK audio server name Nastavit výchozí název pro zvukový server JACK - + Option -n requires an argument (name). Volba -n vyžaduje argument (název). - + %1 (%2 frames) %1 (%2 snímků) + + + Move + Přesunout + + + + Rename + Přejmenovat + qjackctlAboutForm - About QjackCtl - O QjackCtl + About + O programu @@ -261,12 +272,12 @@ qjackctlConnect - + Warning Varování - + This will suspend sound processing from all client applications. @@ -281,8 +292,8 @@ qjackctlConnectionsForm - Connections - JACK Audio Connection Kit - Spojení - JACK Audio Connection Kit + Connections + Spojení @@ -369,273 +380,830 @@ ALSA ALSA-MIDI - - - Warning - Varování - - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Přezdívky pro přednastavení byly změněny: -"%1" - -Chcete uložit změny? - qjackctlConnectorView - + &Connect &Spojit - + Alt+C Connect Alt+C - + &Disconnect &Rozpojit - + Alt+D Disconnect Alt+D - + Disconnect &All Rozpojit &vše - + Alt+A Disconect All Alt+A - + &Refresh &Obnovit - + Alt+R Refresh Alt+R - qjackctlMainForm + qjackctlGraphCanvas - - QjackCtl - QjackCtl + + + Connect + Spojit - + + Disconnect + Rozpojit + + + + qjackctlGraphForm + + + Graph + Graf + + + + &Graph + &Graf + + + + &Edit + Úp&ravy + + + + &View + &Pohled + + + + &Zoom + &Zvětšení + + + + Co&lors + &Barvy + + + + S&ort + Ř&adit + + + + &Help + &Nápověda + + + + &Connect + &Spojení + + + + + Connect + Spojit + + + + Connect selected ports + Spojit vybrané přípojky + + + + Ins + Ins + + + + &Disconnect + &Rozpojit + + + + + Disconnect + Rozpojit + + + + Disconnect selected ports + Rozpojit vybrané přípojky + + + + Del + Del + + + + Cl&ose + &Zavřít + + + + + Close + Zavřít + + + + Close this application window + Zavřít okno tohoto programu + + + + Select &All + Vybrat &vše + + + + + + Select All + Vybrat vše + + + + Ctrl+A + Ctrl+A + + + + Select &None + Nevybrat &nic + + + + + + Select None + Nevybrat nic + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Select &Invert + Obrátit &výběr + + + + + + Select Invert + Obrátit výběr + + + + Ctrl+I + Ctrl+I + + + + &Rename... + &Přejmenovat... + + + + Rename item + Přejmenovat položku + + + + + Rename Item + Přejmenovat položku + + + + &Menubar + Pruh s &nabídkou + + + + + Menubar + Pruh s nabídkou + + + + Show/hide the main program window menubar + Ukázat/Skrýt hlavní okno programu s nabídkovým pruhem + + + + Ctrl+M + Ctrl+M + + + + &Toolbar + Pruh s &nástroji + + + + + Toolbar + Pruh s nástroji + + + + Show/hide main program window file toolbar + Ukázat/Skrýt hlavní okno programu s nástrojovým pruhem + + + + &Statusbar + &Stavový řádek + + + + + Statusbar + Stavový řádek + + + + Show/hide the main program window statusbar + Ukázat/Skrýt stavový řádek hlavního okna programu + + + + Text Beside &Icons + Text &vedle ikon + + + + + Text beside icons + Text vedle ikon + + + + Show/hide text beside icons + Ukázat/Skrýt text vedle ikon + + + + &Center + &Vystředit + + + + + Center + Vystředit + + + + Center view + Vystředit pohled + + + + &Refresh + &Obnovit + + + + + Refresh + Obnovit + + + + Refresh view + Obnovit pohled + + + + F5 + F5 + + + + Zoom &In + &Přiblížit + + + + + + Zoom In + Přiblížit + + + + Ctrl++ + Ctrl++ + + + + Zoom &Out + &Oddálit + + + + + + Zoom Out + Oddálit + + + + Ctrl+- + Ctrl+- + + + + Zoom &Fit + &Přizpůsobit zvětšení + + + + + + Zoom Fit + Přizpůsobit zvětšení + + + + Ctrl+0 + Ctrl+0 + + + + Zoom &Reset + &Vrátit zvětšení na výchozí + + + + + + Zoom Reset + Vrátit zvětšení na výchozí + + + + Ctrl+1 + Ctrl+1 + + + + &Zoom Range + Rozsah &zvětšení + + + + + + Zoom Range + Rozsah zvětšení + + + + JACK &Audio... + JACK &Audio... + + + + + + JACK Audio color + Barva JACK Audio + + + + JACK &MIDI... + JACK &MIDI... + + + + JACK MIDI + JACK MIDI + + + + + JACK MIDI color + Barva JACK MIDI + + + + &ALSA MIDI... + &ALSA MIDI... + + + + ALSA MIDI + ALSA MIDI + + + + + ALSA MIDI color + Barva ALSA MIDI + + + + &Reset + &Obnovit výchozí + + + + + + Reset colors + Obnovit výchozí barvy + + + + Port &Name + &Název přípojky (port) + + + + Port name + Název přípojky (port) + + + + Sort by port name + Řadit podle názvu přípojky (port) + + + + Port &Title + &Titulek přípojky (port) + + + + Port title + Titulek přípojky (port) + + + + Sort by port title + Řadit podle titulku přípojky (port) + + + + Port &Index + Čí&slo přípojky (port) + + + + Port index + Číslo přípojky (port) + + + + Sort by port index + Řadit podle čísla přípojky (port) + + + + &Ascending + &Vzestupně + + + + Ascending + Vzestupně + + + + Ascending sort order + Vzestupné pořadí řazení + + + + &Descending + &Sestupně + + + + Descending + Sestupně + + + + Descending sort order + Sestupné pořadí řazení + + + + &About... + &O programu... + + + + About... + O programu... + + + + About + O programu + + + + Show information about this application program + Ukázat informace o tomto programu + + + + About &Qt... + O &Qt... + + + + About Qt... + O Qt... + + + + About Qt + O Qt + + + + Show information about the Qt toolkit + Ukázat informace o sadě nástrojů prostředí Qt + + + + &Undo + &Zpět + + + + &Redo + &Znovu + + + + Undo last edit action + Vrátit poslední úpravu zpět + + + + Redo last edit action + Provést poslední úpravu znovu + + + + Zoom + Zvětšení + + + + Ready + Připraven + + + + Colors - %1 + Barvy - %1 + + + + qjackctlMainForm + + Quit processing and exit Ukončit zpracování signálu a ukončit program - - + + &Quit &Ukončit - + Start the JACK server Spustit server JACK - - + + &Start &Spustit - + Stop the JACK server Zastavit server JACK - + S&top &Zastavit - + St&atus &Stav - + Show information about this application Ukázat informace o této aplikaci - - + + Ab&out... &O... - - + + Set&up... &Nastavení... - + Show settings and options dialog Ukázat dialogové okno pro nastavení a volby - - + + &Messages &Hlášení - + Show/hide the patchbay editor window Ukázat/Skrýt okno editoru se zapojovací deskou - + &Patchbay &Zapojovací deska - - Show/hide the actual connections patchbay window - Ukázat/Skrýt okno se zapojovací deskou se stávajícími spojeními - - - + &Connect &Spojit - + JACK server state Stav serveru JACK - + JACK server mode Režim serveru JACK - + DSP Load Zatížení DSP - + Sample rate Vzorkovací kmitočet - + XRUN Count (notifications) Počet XRUN (oznámení) - + Time display Údaj o čase - + Transport state Stav předání - + Transport BPM Předání BPM - + Transport time Čas předání - + Show/hide the session management window Ukázat/Skrýt okno se správou sezení - + Show/hide the messages log/status window Ukázat/Skrýt okno se zápisy/stavem hlášení - + + Show/hide the graph window + Ukázat/Skrýt okno s grafem + + + + Show/hide the connections window + Ukázat/Skrýt okno s obsahem + + + Backward transport Předání zpět - + &Backward &Zpět - + Forward transport Předání dopředu - + &Forward &Dopředu - + Rewind transport Předání přetočit zpět - - + + &Rewind &Přetočit zpět - + Stop transport rolling Zastavit chod předání - - + + Pa&use &Pozastavit - + Start transport rolling Spustit chod předání - - + + &Play &Přehrát - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -644,32 +1212,33 @@ Zapojovací deska ALSA MIDI nebude dostupná. - + D-BUS: Service is available (%1 aka jackdbus). D-BUS: Služba je dostupná (%1 aka jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). D-BUS: Služba není dostupná (%1 aka jackdbus). - - + + Information Informace - - - - - + + + + + + Warning Varování - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -678,17 +1247,17 @@ Chcete ukončit zvukový server JACK? - + successfully úspěšně - + with exit status=%1 s vrácenou hodnotou = %1 - + Could not start JACK. Maybe JACK audio server is already started. @@ -697,7 +1266,7 @@ Možná je server JACK už spuštěn. - + Could not load preset "%1". Retrying with default. @@ -706,7 +1275,7 @@ Zkouší se znovu s výchozím přednastavením. - + Could not load default preset. Sorry. @@ -715,22 +1284,22 @@ Promiňte. - + Startup script... Skript pro spuštění... - + Startup script terminated Skript pro spuštění ukončen - + D-BUS: JACK server is starting... D-BUS: Spouští se server JACK... - + D-BUS: JACK server could not be started. Sorry @@ -739,12 +1308,12 @@ Promiňte - + JACK is starting... JACK se spouští... - + Some client audio applications are still active and connected. @@ -755,34 +1324,35 @@ Chcete zastavit zvukový server JACK? - + JACK is stopping... JACK se zastavuje... - + Shutdown script... Skript pro zastavení chodu... - - - + + + + Don't ask this again Neptat se znovu - + Shutdown script terminated Skript pro zastavení chodu ukončen - + D-BUS: JACK server is stopping... D-BUS: Zastavuje se server JACK... - + D-BUS: JACK server could not be stopped. Sorry @@ -791,102 +1361,102 @@ Promiňte - + Post-shutdown script... Skript pro po-zastavení chodu... - + Post-shutdown script terminated Skript pro po-zastavení chodu ukončen - + JACK was started with PID=%1. JACK byl puštěn s PID = %1. - + D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: Server JACK byl spuštěn (%1 aka jackdbus). - + JACK is being forced... JACK je nucen... - + JACK was stopped JACK byl zastaven - + D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: Server JACK byl zastaven (%1 aka jackdbus). - + Error Chyba - + Transport time code Předání časového kódu - + Elapsed time since last reset - Čas uplynulý od posledního znovunastavení + Čas uplynulý od posledního obnovení výchozího nastavení - + Elapsed time since last XRUN Čas uplynulý od posledního XRUN - + Patchbay activated. Zapojovací deska uvedena do chodu. - + Patchbay deactivated. Zapojovací deska vyřazena z provozu. - + Statistics reset. - Nastavit znovu statistiku. + Obnovení vychozího nastavení statistiky. - + msec ms - + JACK connection graph change. Nákres spojení JACK změněn. - + XRUN callback (%1). Zavolání nazpátek XRUN (%1). - + Buffer size change (%1). Velikost vyrovnávací paměti změněna (%1). - + Shutdown notification. Oznámení o zastavení. - + Could not start JACK. Sorry. @@ -895,77 +1465,77 @@ Promiňte. - + JACK has crashed. JACK spadl. - + JACK timed out. Překročení času u JACK. - + JACK write error. Chyba při psaní u JACK. - + JACK read error. Chyba při čtení u JACK. - + Unknown JACK error (%d). Neznámá chyba u JACK (%d). - + ALSA connection graph change. Nákres spojení ALSA změněn. - + JACK active patchbay scan Prohlédnutí činné zapojovací desky JACK - + ALSA active patchbay scan Prohlédnutí činné zapojovací desky ALSA - + JACK connection change. Spojení JACK změněno. - + ALSA connection change. Spojení ALSA změněno. - + checked přezkoušeno - + connected spojeno - + disconnected rozpojeno - + failed nepodařilo se - + A patchbay definition is currently active, which is probable to redo this connection: @@ -980,7 +1550,7 @@ Chcete odstranit spojení zapojovací desky? - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -992,22 +1562,35 @@ části panelu. - + Don't show this message again Toto hlášení neukazovat znovu - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Přezdívky pro přednastavení byly změněny: + +"%1" + +Chcete uložit změny? + + + Transport BBT (bar.beat.ticks) Předání BBT (takt:doba.tiknutí - bar:beat.ticks) - + Patchbay reset. Uvedení zapojovací desky do výchozího stavu. - + Could not load active patchbay definition. "%1" @@ -1020,67 +1603,77 @@ Zakázáno. - + + Freewheel started... + Volnoběh spuštěn... + + + + Freewheel exited. + Volnoběh ukončen. + + + JACK property change. Vlastnost JACK změněna. - + Overall operation failed. Celková operace se nezdařila. - + Invalid or unsupported option. Neplatná nebo nepodporovaná volba. - + Client name not unique. Název klienta není jedinečný. - + Server is started. Server je spuštěn. - + Unable to connect to server. Nelze se připojit k serveru. - + Server communication error. Chyba spojení se serverem. - + Client does not exist. Klient neexistuje. - + Unable to load internal client. Nepodařilo se nahrát vnitřního klienta. - + Unable to initialize client. Nepodařilo se inicializovat vnitřního klienta. - + Unable to access shared memory. Nepodařilo se přistoupit ke sdílené paměti. - + Client protocol version mismatch. Nevhodná verze klientského protokolu. - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1088,261 +1681,277 @@ Další informace hledejte, prosím, v okně s hlášením. - + Server configuration saved to "%1". Nastavení serveru uloženo do "%1". - + Client activated. Klient uveden do chodu. - + Post-startup script... Skript pro po-spuštění... - + Post-startup script terminated Skript pro po-spuštění ukončen - + Command line argument... Argument pro příkazový řádek... - + Command line argument started Argument pro příkazový řádek spuštěn - + Client deactivated. Klient vyřazen z provozu. - + Transport rewind. Předání přetočit zpět. - + Transport backward. Předání zpět. - - - + + + Starting Spouští se - + Transport start. Spustit předání. - - + + Stopping Zastavuje se - + Transport stop. Zastavit předání. - + Transport forward. Předání dopředu. - - + + Stopped Zastaveno - + %1 (%2%) %1 (%2 %) - + %1 (%2%, %3 xruns) %1 (%2%, %3 xruns) - + %1 % %1 % - + %1 Hz %1 Hz - + %1 frames %1 snímků - + Yes Ano - + No Ne - + + FW + FW + + + RT RT - + Rolling Jede - + Looping Zapíná se do jednoduchého obvodu - + %1 msec %1 ms - + XRUN callback (%1 skipped). Zavolání nazpátek XRUN (%1 přeskočeno). - + Started Běží - + Active Činný - + Activating Uvádí se do chodu - + Inactive Nečinný - - + + &Hide &Skrýt - + Mi&nimize &Zmenšit - - + + S&how &Ukázat - + Rest&ore &Nahrát znovu - + &Stop &Zastavit - + &Reset - &Nastavit znovu + &Obnovit výchozí - + &Presets &Přednastavení - + &Versioning &Verzování - + Re&fresh Ob&novit - - + + S&ession &Sezení - + &Load... &Nahrát... - + &Save... &Uložit... - + Save and &Quit... Uložit a &ukončit... - + Save &Template... Uložit jako &předlohu... - + &Connections &Spojení - + Patch&bay &Zapojovací deska - + + + &Graph + &Graf + + + &Transport &Předání - + Server settings will be only effective after restarting the JACK audio server. Nastavení serveru se projeví až po novém spuštění serveru JACK. - + + Do you want to restart the JACK audio server? + Chcete zvukový server JACK spustit znovu? + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1354,7 +1963,7 @@ (%4) - + D-BUS: ResetParameterValue('%1'): %2. @@ -1366,7 +1975,7 @@ (%3) - + D-BUS: GetParameterValue('%1'): %2. @@ -1378,7 +1987,7 @@ (%3) - + Some settings will be only effective the next time you start this program. Některá nastavení se projeví až tehdy, @@ -1389,8 +1998,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Hlášení/Stav - JACK Audio Connection Kit + Messages / Status + Hlášení/Stav @@ -1435,12 +2044,12 @@ Reset XRUN statistic values - Nastavit znovu údaje ve statistice XRUN + Obnovit výchozí hodnoty údajů ve statistice XRUN Re&set - &Nastavit znovu + &Obnovit výchozí @@ -1545,7 +2154,7 @@ Time of last reset - Čas posledního znovunastavení + Čas od posledního obnovení výchozího nastavení @@ -1561,12 +2170,12 @@ qjackctlPatchbay - + Warning Varování - + This will disconnect all sockets. Are you sure? @@ -1579,8 +2188,8 @@ qjackctlPatchbayForm - Patchbay - JACK Audio Connection Kit - Zapojovací deska - JACK Audio Connection Kit + Patchbay + Zapojovací deska @@ -1766,12 +2375,12 @@ &Spustit - + Warning Varování - + The patchbay definition has been changed: "%1" @@ -1784,23 +2393,23 @@ Chcete uložit změny? - + %1 [modified] %1 [změněn] - + Untitled%1 Bez názvu%1 - - + + Error Chyba - + Could not load patchbay definition file: "%1" @@ -1809,7 +2418,7 @@ "%1" - + Could not save patchbay definition file: "%1" @@ -1818,35 +2427,35 @@ "%1" - + New Patchbay definition Nové vymezení zapojovací desky - + Create patchbay definition as a snapshot of all actual client connections? Vytvořit vymezení zapojovací desky jako snímek všech skutečných klientských spojení? - + Load Patchbay Definition Nahrát vymezení zapojovací desky - - + + Patchbay Definition files Soubory s vymezením zapojovací desky - + Save Patchbay Definition Uložit vymezení zapojovací desky - + active činný @@ -1854,90 +2463,90 @@ qjackctlPatchbayView - + Add... Přidat... - + Edit... Upravit... - + Copy... Kopírovat... - + Remove Odstranit - + Exclusive Výhradní - + Forward Dopředu - + (None) (Žádný) - + Move Up Přesunout nahoru - + Move Down Přesunout dolů - + &Connect &Spojit - + Alt+C Connect Alt+C - + &Disconnect &Rozpojit - + Alt+D Disconnect Alt+D - + Disconnect &All &Rozpojit vše - + Alt+A Disconect All Alt+A - + &Refresh &Obnovit - + Alt+R Refresh Alt+R @@ -1947,8 +2556,8 @@ qjackctlSessionForm - Session - JACK Audio Connection Kit - Sezení - JACK Audio Connection Kit + Session + Sezení @@ -1957,7 +2566,7 @@ - + &Load... &Nahrát... @@ -1984,14 +2593,14 @@ - + &Versioning &Verzování - - + + Re&fresh Ob&novit @@ -2022,7 +2631,7 @@ - + &Add Přid&at @@ -2033,7 +2642,7 @@ - + &Edit &Upravit @@ -2044,13 +2653,13 @@ - + Re&move &Odstranit - + &Save... &Uložit... @@ -2081,46 +2690,46 @@ &Uložit - - + + Load Session Nahrát sezení - - + + Session directory Adresář se sezením - + Save Session Uložit sezení - + and Quit a ukončit - + Template Předloha - + &Clear &Smazat - - - + + + Warning Varování - + A session could not be found in this folder: "%1" @@ -2129,17 +2738,17 @@ "%1" - + %1: loading session... %1: nahrává se sezení... - + %1: load session %2. %1: nahrát sezení %2. - + A session already exists in this folder: "%1" @@ -2152,7 +2761,7 @@ Jste si jistý, že chcete přepsat stávající sezení? - + This folder already exists and is not empty: "%1" @@ -2165,29 +2774,29 @@ Jste si jistý, že chcete přepsat stávající složku? - + %1: saving session... %1: ukládá se sezení... - + %1: save session %2. %1: uložit sezení %2. - + New Client Nový klient - + Save and &Quit... Uložit a &ukončit... - + Save &Template... Uložit jako &předlohu... @@ -2203,11 +2812,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Nastavení - JACK Audio Connection Kit - - Settings Nastavení @@ -2224,18 +2828,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2259,19 +2864,22 @@ &Smazat - + jackd - jackd + DO NOT TRANSLATE + - + jackdmp - jackdmp + DO NOT TRANSLATE + - + jackstart - jackstart + DO NOT TRANSLATE + @@ -2286,42 +2894,44 @@ dummy - dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + sun - sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - freebob - freebob - - - firewire - firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2329,1181 +2939,1138 @@ Parametry - + MIDI Driv&er: Ovla&dač MIDI: - + The ALSA MIDI backend driver to use Ovladač k zadní části ALSA MIDI, který se bude používat - + none žádný - + raw - raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Time in seconds that client is delayed after server startup Čas v sekundách, o který je klient opožděn po spuštění serveru - + Latency: Prodleva: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Výstupní prodleva v milisekundách, jejíž výpočet je založen na nastavení údobí (period), rychlosti (snímání) a vyrovnávací paměti - + Use realtime scheduling Použít zpracování ve skutečném čase - + &Realtime &Skutečný čas - + Do not attempt to lock memory, even if in realtime mode Nepokoušejte se uzamknout paměť, dokonce ani v režimu skutečného času - + No Memory Loc&k &Neuzamknout paměť - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Odemknout paměť běžných knihoven s nástroji (GTK+, QT, FLTK, Wine) - + &Unlock Memory &Odemknout paměť - + Ignore xruns reported by the backend driver Přehlížet xruns hlášené ovladačem zadní části - + So&ft Mode &Snadný režim - + Provide output monitor ports Poskytnout přípojky pro sledování výstupu - + &Monitor &Sledování - + Force 16bit mode instead of failing over 32bit (default) Vynutit 16bitový režim namísto selhání ve 32bitovém (výchozí) - + Force &16bit Vynutit &16bitový režim - - Enable hardware monitoring of capture ports - Povolit přístrojové sledování zachytávacích přípojek - - - - H/W M&onitor - H/W &sledování - - - + Enable hardware metering on cards that support it Povolit přístrojové měření u karet, které to podporují - + H/&W Meter H/&W měřidlo - + Ignore hardware period/buffer size Přehlížet údobí (periodu)/velikost vyrovnávací paměti přístroje - + &Ignore H/W &Přehlížet H/W - + Whether to give verbose output on messages Dát hlášením podrobný výstup - + &Verbose messages &Podrobná hlášení - + &Output Device: &Výstupní zařízení: - + &Interface: &Rozhraní: - + Maximum input audio hardware channels to allocate Největší množství přidělitelných vstupních zvukových přístrojových kanálů - + &Audio: &Zvuk: - + Dit&her: &Vložení šumu do signálu (dithering): - + External output latency (frames) Vnější výstupní prodleva (snímky) - + &Input Device: Vstup&ní zařízení: - + Provide either audio capture, playback or both Poskytnout buď zachytávání zvuku, přehrávání nebo obojí - + Duplex Zdvojený - + Capture Only Pouze zachytávání - + Playback Only Pouze přehrávání - + The PCM device name to use Název používaného zařízení PCM + + + + hw:0 + hw:0 + + - hw:0 - hw:0 + plughw:0 + plughw:0 - plughw:0 - plughw:0 + /dev/audio + /dev/audio - /dev/audio - /dev/audio - - - - - /dev/dsp /dev/dsp - - - - + + + + > > - + Alternate input device for capture Střídat vstupní zařízení pro zachytávání - + Maximum output audio hardware channels to allocate Největší množství přidělitelných výstupních zvukových přístrojových kanálů - + Alternate output device for playback Střídat výstupní zařízení pro přehrávání - + External input latency (frames) Vnější vstupní prodleva (snímky) - + Set dither mode Nastavit režim vložení šumu do signálu (dithering) - + None Žádný - + Rectangular Obdélníkový - + Shaped Obalová křivka - + Triangular Trojúhelníkový - + Number of periods in the hardware buffer Počet údobí (period) ve vyrovnávací paměti přístroje - + Priorit&y: &Přednost: - + &Frames/Period: &Snímky/Údobí (perioda): - + Frames per period between process() calls Snímků za údobí (periodu) mezi voláním process() Aufrufen - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Port Ma&ximum: &Největší počet přípojek: - + &Channels: &Kanály: - + 21333 21333 - + Sample rate in frames per second Vzorkovací kmitočet (rychlost snímkování) ve snímcích za sekundu - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + 192000 192000 - + Scheduler priority when running realtime Přednost rozvrhu při běhu ve skutečném čase - + &Word Length: &Délka slova: - + Periods/&Buffer: Ú&dobí/Vyrovnávací paměť: - + Word length Délka slova - + Maximum number of ports the JACK server can manage Největší počet přípojek, které server JACK může spravovat - + &Wait (usec): &Čekat (µs): - + Sample &Rate: Vzorkovací &kmitočet: - + Maximum number of audio channels to allocate Největší množství přidělitelných zvukových kanálů - + &Timeout (msec): &Překročení času (ms): - + Set client timeout limit in milliseconds Nastavit mez pro překročení času u klienta; údaj v milisekundách - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + &Channels I/O: &Kanály vstup/výstup: - + &Latency I/O: &Prodleva vstup/výstup: - + Server Suffi&x: Příp&ona serveru: - + Start De&lay: &Zpoždění spuštění: - + secs s - + 0 msecs 0 ms - + Advanced Pokročilé - + Options Volby - + Scripting Skriptování - + Whether to execute a custom shell script before starting up the JACK audio server. Provést vlastní shellový skript před spuštěním zvukového serveru JACK. - + Execute script on Start&up: Provést skript při &spuštění: - + Whether to execute a custom shell script after starting up the JACK audio server. Provést vlastní shellový skript po spuštění zvukového serveru JACK. - + Execute script after &Startup: Provést skript &po spuštění: - + Whether to execute a custom shell script before shuting down the JACK audio server. Provést vlastní shellový skript před zastavením zvukového serveru JACK. - + Execute script on Shut&down: Provést skript při zasta&vení: - + Command line to be executed before starting up the JACK audio server Příkazový řádek k provedení před spuštěním zvukového serveru JACK - - - - + + + + Scripting argument meta-symbols Meta symboly pro argument při skriptování - + Browse for script to be executed before starting up the JACK audio server Vybrat skript, který se provede před spuštěním zvukového serveru JACK - - - - - - + + + + + + ... ... - + Command line to be executed after starting up the JACK audio server Příkazový řádek k provedení po spuštění zvukového serveru JACK - + Browse for script to be executed after starting up the JACK audio server Vybrat skript, který se provede po spuštění zvukového serveru JACK - + Browse for script to be executed before shutting down the JACK audio server Vybrat skript, který se provede před zastavením zvukového serveru JACK - + Command line to be executed before shutting down the JACK audio server Příkazový řádek k provedení před zastavením zvukového serveru JACK - + Whether to execute a custom shell script after shuting down the JACK audio server. Provést vlastní shellový skript po zastavení zvukového serveru JACK. - + Execute script after Shu&tdown: Provést skript po zas&tavení: - + Browse for script to be executed after shutting down the JACK audio server Vybrat skript, který se provede po zastavení zvukového serveru JACK - + Command line to be executed after shutting down the JACK audio server Příkazový řádek k provedení po zastavení zvukového serveru JACK - + Statistics Statistika - + Whether to capture standard output (stdout/stderr) into messages window Vést obvyklý výstup (stdout/stderr) do okna s hlášeními - + &Capture standard output &Vést obvyklý výstup - + &XRUN detection regex: Pravidelný výraz pro zjištění &XRUN: - + Regular expression used to detect XRUNs on server output messages Pravidelný výraz užitý pro poznání XRUN v hlášeních posílaných serverem - + xrun of at least ([0-9|\.]+) msecs xrun alespoň ([0-9|\.]+) ms - + Connections Spojení - + Whether to enable JACK D-Bus interface - + Zda povolit rozhraní D-Bus JACJ - + &Enable JACK D-Bus interface - + &Povolit rozhraní D-Bus JACK + + + + Whether to replace Connections with Graph button on the main window + Nahradit v hlavním okně Spojení tlačítkem pro graf + + + + Replace Connections with &Graph button + Nahradit Spojení tlačítkem pro &graf - + 10 10 - + Patchbay definition file to be activated as connection persistence profile Spustit soubor s vymezením zapojovací desky jako stálý profil spojení - + Browse for a patchbay definition file to be activated Vybrat soubor s vymezením zapojovací desky pro spuštění - + Whether to activate a patchbay definition for connection persistence profile. Spustit stálý profil s vymezením zapojovací desky spojení. - + Activate &Patchbay persistence: Spustit stálý profil se &zapojovací deskou: - + Logging Provádění zápisu - + Messages log file Soubor se zápisem hlášení - + Browse for the messages log file location Vybrat místo pro umístění souboru se zápisem hlášení - + Whether to activate a messages logging to file. - Spustit provádění zápisu hlášení do souboru. + Zapnout provádění zápisu hlášení do souboru. + + + + Setup + Nastavení + + + + Whether to use server synchronous mode + Zda použít synchronizační režim serveru + + + + &Use server synchronous mode + &Použít synchronizační režim serveru - + Please do not touch these settings unless you know what you are doing. Nedotýkejte se, prosím, těchto nastavení, pokud nevíte, co děláte. - + Server &Prefix: Pře&dpona serveru: - + Extra driver options (command line suffix) Další volby pro ovladač (přípona příkazového řádku) - + Whether to reset all connections when a patchbay definition is activated. Nastavit všechna spojení na výchozí hodnoty, když je zapnuto vymezení zapojovací desky. - + &Reset all connections on patchbay activation &Nastavit všechna spojení při zapnutí zapojovací desky na výchozí hodnoty - + Whether to issue a warning on active patchbay port disconnections. Vydat varování při odpojení činných přípojek zapojovací desky. - + &Warn on active patchbay disconnections &Varovat při odpojení činných přípojek zapojovací desky - + &Messages log file: &Soubor se zápisem hlášení: - + Display Zobrazit - + Time Display Údaj o čase - - Time F&ormat: - &Formát času: - - - - The general time format on display - Obecný formát času pro zobrazení - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - + Transport &Time Code Předání &časového kódu - + Transport &BBT (bar:beat.ticks) Předání &BBT (takt:doba.tiknutí - bar:beat.ticks) - + Elapsed time since last &Reset - Čas uplynulý od posledního &znovunastavení + Čas uplynulý od posledního &obnovení výchozího nastavení - + Elapsed time since last &XRUN Čas uplynulý od posledního &XRUN - + Sample front panel normal display font Předvést písmo pro obvyklé zobrazení na přední straně panelu - + Sample big time display font Předvést písmo pro velké zobrazení údaje o čase - + Big Time display: Velké zobrazení údaje o čase: - + Select font for front panel normal display Vybrat písmo pro zobrazení písma na přední straně panelu - - - - + + + + &Font... &Písmo... - + Select font for big time display Vybrat písmo pro velké zobrazení údaje o čase - + Normal display: Obvyklé zobrazení: - - Whether to enable a shiny glass light effect on the main display - Povolit zobrazení údajů s lesklým sklenným světelným efektem - - - - &Display shiny glass light effect - &Zobrazit údaje s lesklým sklenným světelným efektem - - - + Whether to enable blinking (flashing) of the server mode (RT) indicator Povolit mrkání indikátoru serverového režimu (realtime -RT) - + Blin&k server mode indicator Zobrazovat mr&kání indikátoru režimu serveru - + Messages Window Okno s hlášením - + Sample messages text font display Předvést zobrazení textu v okně s hlášením - + Select font for the messages text display Vybrat písmo pro zobrazení textu hlášení - + Whether to keep a maximum number of lines in the messages window Určit největší počet řádků zobrazovaných v okně s hlášením - + &Messages limit: &Největší počet hlášení: - + The maximum number of message lines to keep in view Největší počet řádků zobrazovaných v okně s hlášením - + 100 100 - + 250 250 - + 2500 2500 - + Connections Window Přehled spojení - + Sample connections view font Předvést zobrazení písma v přehledu spojení - + Select font for the connections view Vybrat písmo pro přehled spojení - + &Icon size: &Velikost ikon: - + The icon size for each item of the connections view Velikost jednotlivých symbolů v přehledu spojení - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + Whether to enable in-place client/port name editing (rename) Povolit úpravu vedlejšího názvu (přezdívka) klienta/přípojky (přejmenování) - + Ena&ble client/port aliases editing (rename) Po&volit úpravu vedlejšího názvu (přezdívka) klienta/přípojky (přejmenování) - + Whether to enable client/port name aliases on the connections window Povolit vedlejší názvy (přezdívky) klienta/přípojky v přehledu spojení - + E&nable client/port aliases &Povolit vedlejší názvy (přezdívky) klienta/přípojky - - Whether to draw connection lines as cubic Bezier curves - Určit, zda se mají čáry spojení kreslit jako Bézierovy křivky - - - + Server path (command line prefix) Cesta k serveru (předpona příkazového řádku) - - Draw connection and patchbay lines as Be&zier curves - Čáry pro spojení a čáry zapojovací desky kreslit jako &Bézierovy křivky - - - + Misc Různé - + Other Další - + Whether to start JACK audio server immediately on application startup Spustit zvukový server JACK okamžitě při spuštění aplikace - + &Start JACK audio server on application startup &Spustit zvukový server JACK okamžitě při spuštění aplikace - + Whether to ask for confirmation on application exit Žádat o potvrzení při ukončení aplikace - + JACK client/port pretty-name (metadata) display mode Režim zobrazení pěkných názvů (popisná data) pro klienty/přípojky JACK - + Enable JA&CK client/port pretty-names (metadata) Povolit pěkné názvy (popisná data) pro klienty/přípojky JA&CK - + &Confirm application close &Potvrdit ukončení aplikace - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + Zeptat se na potvrzení při vypnutí zvukového serveru JACK a/nebo jeho restartování + + + + Confirm server sh&utdown and/or restart + Potvrdit &vypnutí serveru a/nebo jeho restartování + + + Whether to keep all child windows on top of the main window Všechna další okna udržovat nad hlavním oknem - + &Keep child windows always on top &Všechna další okna udržovat vždy nahoře - + Whether to enable the system tray icon Ukázat ikonu v systémové části panelu - + &Enable system tray icon Po&volit ikonu v systémové části panelu - + Whether to start minimized to system tray Spustit program zmenšený do systémové části panelu - + Start minimi&zed to system tray Spustit program &zmenšený do systémové části panelu - + Whether to save the JACK server command-line configuration into a local file (auto-start) Nastavení příkazového řádku ke spuštění serveru JACK-uložit do místního souboru (auto-start) - + S&ave JACK audio server configuration to: Nastavení ke spuštění serveru JACK &uložit jako: - + The server configuration local file name (auto-start) Název místního souboru s nastavením serveru (auto-start) - + .jackdrc .jackdrc - - Whether to exit once all clients have closed (auto-start) - Ukončit program, když jsou rozpojena všechna klientská spojení (auto-start) - - - - C&onfigure as temporary server - Nastavit jako &dočasný server - - - - Whether to ask for confirmation on JACK audio server shutdown - Žádat o potvrzení při zastavení serveru JACK - - - - Confirm server sh&utdown - Potvrdit &zastavení serveru - - - + Whether to enable ALSA Sequencer (MIDI) support on startup Povolit podporu (MIDI) pro řadič (sekvencer) ALSA při spuštění - + E&nable ALSA Sequencer support P&ovolit podporu (MIDI) pro řadič (sekvencer) ALSA - + Buttons Tlačítka - + Whether to hide the left button group on the main window Skrýt skupinu s tlačítky nalevo v hlavním okně - + Hide main window &Left buttons Skrýt &levá tlačítka v hlavním okně - + Whether to hide the right button group on the main window Skrýt skupinu s tlačítky napravo v hlavním okně - + Hide main window &Right buttons Skrýt &pravá tlačítka v hlavním okně - + Whether to hide the transport button group on the main window Skrýt skupinu s tlačítky pro předání v hlavním okně - + Hide main window &Transport buttons Skrýt &předávací tlačítka v hlavním okně - + Whether to hide the text labels on the main window buttons Skrýt textové popisky tlačítek v hlavním okně - + Hide main window &button text labels Skrýt textové popisky &tlačítek v hlavním okně - - - + + + Warning Varování - + Some settings have been changed: "%1" @@ -3516,7 +4083,7 @@ Chcete uložit změny? - + Delete preset: "%1" @@ -3529,97 +4096,97 @@ Jste si jistý? - + msec ms - + n/a n/a - + &Preset Name &Název přednastavení - + &Server Name &Název serveru - + &Server Path &Cesta k serveru - + &Driver &Ovladač - + &Interface &Rozhraní - + Sample &Rate Vzorkovací &kmitočet - + &Frames/Period &Snímky/Údobí (perioda) - + Periods/&Buffer Ú&dobí/Vyrovnávací paměť - + Startup Script Skript pro spuštění - + Post-Startup Script Skript pro po-spuštění - + Shutdown Script Skript pro zastavení chodu - + Post-Shutdown Script Skript pro po-zastavení chodu - + Active Patchbay Definition Činné vymezení zapojovací desky - + Patchbay Definition files Soubory s vymezením zapojovací desky - + Messages Log Zápis s hlášením - + Log files Soubory se zápisy - + Some settings have been changed. Do you want to apply the changes? @@ -3628,137 +4195,139 @@ Chcete použít změny? - + &JACK client/port aliases: Vedlejší názvy (přezdívky) pro klienty/přípojky &JACK: - + JACK client/port aliases display mode Režim zobrazení vedlejších názvů (přezdívek) pro klienty/přípojky JACK - + Default Výchozí - + First První - + Second Druhý - + Whether to show system tray message on main window close Ukázat zprávu v oznamovací oblasti panelu při zavření hlavního okna - + Sho&w system tray message on close &Ukázat zprávu v oznamovací oblasti panelu při zavření - + Whether to stop JACK audio server on application exit Zastavit zvukový server JACK při ukončení aplikace - + S&top JACK audio server on application exit &Zastavit zvukový server JACK při ukončení aplikace - + Defaults Výchozí - + &Base font size: &Základní velikost písma: - + Base application font size (pt.) Základní velikost písma v aplikaci (pt.) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - síť + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + &Name: &Název: - + The JACK Audio Connection Kit sound server name Název zvukového serveru JACK Audio Connection Kit - + netone - síť_1 + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Number of microseconds to wait between engine processes (dummy) Počet mikrosekund, po které se čeká mezi strojovými procesy (dummy) - + Whether to enable D-Bus interface Zda povolit rozhraní D-Bus - + &Enable D-Bus interface &Povolit rozhraní D-Bus - + Whether to restrict to one single application instance (X11) Zda omezit na úroveň jednoho programu (X11) - + Single application &instance Ú&roveň jednoho programu @@ -3767,8 +4336,8 @@ qjackctlSocketForm - Socket - JACK Audio Connection Kit - Zásuvka - JACK Audio Connection Kit + Socket + Zásuvka diff -Nru qjackctl-0.4.5/src/translations/qjackctl_de.ts qjackctl-0.6.0/src/translations/qjackctl_de.ts --- qjackctl-0.4.5/src/translations/qjackctl_de.ts 2017-04-27 14:44:14.566761474 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_de.ts 2019-10-17 07:45:45.961673224 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,77 +27,88 @@ QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Usage: %1 [options] [command-and-args] Benutzung: %1 [Optionen] [Kommandos und Argumente] - + Options: Optionen: - + Start JACK audio server immediately JACK Audioserver sofort starten - + Set active patchbay definition file Steckfeldkonfigurationsdatei festlegen - + Show help about command line options Zeige Hilfe zu Kommandozeilenargumenten an - + Show version information Zeige Versionsinformation an - + Option -p requires an argument (preset). Option -p benötigt ein Argument (Preset). - + Option -a requires an argument (path). Option -a benötigt ein Argument (Pfad). - + Set default settings preset name Name für die Voreinstellungen festlegen - + Set default JACK audio server name Voreingestellten JACK-Audioservernamen einstellen - + Option -n requires an argument (name). Option -n benötigt ein Argument (Name). - + %1 (%2 frames) + + + Move + + + + + Rename + + qjackctlAboutForm - About QjackCtl - Über QjackCtl + About + @@ -261,12 +272,12 @@ qjackctlConnect - + Warning Warnung - + This will suspend sound processing from all client applications. @@ -280,8 +291,8 @@ qjackctlConnectionsForm - Connections - JACK Audio Connection Kit - Verbindungen - JACK Audio Connection Kit + Connections + Verbindungen @@ -368,272 +379,830 @@ ALSA ALSA-MIDI - - - Warning - Warnung - - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Die Alternativbezeichnungen für Voreinstellungen wurden verändert: -"%1" -Änderungen speichern? - qjackctlConnectorView - + &Connect &Verbinden - + Alt+C Connect Alt+V - + &Disconnect &Trennen - + Alt+D Disconnect Trennen - + Disconnect &All &Alle trennen - + Alt+A Disconect All Alt+A - + &Refresh Au&ffrischen - + Alt+R Refresh Alt+F - qjackctlMainForm + qjackctlGraphCanvas - - QjackCtl - QjackCtl + + + Connect + - + + Disconnect + + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + + + + + &Edit + &Bearbeiten + + + + &View + + + + + &Zoom + + + + + Co&lors + + + + + S&ort + + + + + &Help + + + + + &Connect + + + + + + Connect + + + + + Connect selected ports + + + + + Ins + + + + + &Disconnect + &Trennen + + + + + Disconnect + + + + + Disconnect selected ports + + + + + Del + + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + + + + + + + Select All + + + + + Ctrl+A + + + + + Select &None + + + + + + + Select None + + + + + Ctrl+Shift+A + + + + + Select &Invert + + + + + + + Select Invert + + + + + Ctrl+I + + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + + + + + + Menubar + + + + + Show/hide the main program window menubar + + + + + Ctrl+M + + + + + &Toolbar + + + + + + Toolbar + + + + + Show/hide main program window file toolbar + + + + + &Statusbar + + + + + + Statusbar + + + + + Show/hide the main program window statusbar + + + + + Text Beside &Icons + + + + + + Text beside icons + + + + + Show/hide text beside icons + + + + + &Center + + + + + + Center + + + + + Center view + + + + + &Refresh + + + + + + Refresh + + + + + Refresh view + + + + + F5 + + + + + Zoom &In + + + + + + + Zoom In + + + + + Ctrl++ + + + + + Zoom &Out + + + + + + + Zoom Out + + + + + Ctrl+- + + + + + Zoom &Fit + + + + + + + Zoom Fit + + + + + Ctrl+0 + + + + + Zoom &Reset + + + + + + + Zoom Reset + + + + + Ctrl+1 + + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + &Zurücksetzen + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + + + + + About... + + + + + About + + + + + Show information about this application program + + + + + About &Qt... + + + + + About Qt... + + + + + About Qt + Über Qt + + + + Show information about the Qt toolkit + + + + + &Undo + + + + + &Redo + + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + + + + + Ready + + + + + Colors - %1 + + + + + qjackctlMainForm + + Quit processing and exit Signalverarbeitung und Programm beenden - - + + &Quit &Beenden - + Start the JACK server JACK-Server starten - - + + &Start &Start - + Stop the JACK server JACK-Server beenden - + S&top S&topp - + St&atus St&atus... - + Show information about this application Informationen über diese Anwendung anzeigen - - + + Ab&out... &Über... - - + + Set&up... &Einstellungen... - + Show settings and options dialog Dialogfenster für Einstellungen und Optionen anzeigen - - + + &Messages &Meldungen... - + Show/hide the patchbay editor window Steckfeldfenster anzeigen/verbergen - + &Patchbay Ste&ckfeld... - - Show/hide the actual connections patchbay window - Zeige/Verberge das Steckfeldfenster mit den vorhandenen Verbindungen - - - + &Connect &Verbinden... - + JACK server state Status des JACK-Servers - + JACK server mode Modus des JACK-Servers - + DSP Load DSP-Last - + Sample rate Abtastrate - + XRUN Count (notifications) XRUN Anzahl (Benachrichtigungen) - + Time display Zeitanzeige - + Transport state Transportstatus - + Transport BPM Transport BPM - + Transport time Transport Zeit - + Show/hide the session management window Fenster für Sitzungsmanagement anzeigen/verbergen - - Show/hide the messages log/status window - Meldungsfenster anzeigen/verbergen + + Show/hide the messages log/status window + Meldungsfenster anzeigen/verbergen + + + + Show/hide the graph window + + + + + Show/hide the connections window + - + Backward transport Transport rückwärts - + &Backward &Rückwärts - + Forward transport Transport vorwärts - + &Forward &Vorwärts - + Rewind transport Transport zurückspulen - - + + &Rewind &Zurückspulen - + Stop transport rolling Transportvorgang anhalten - - + + Pa&use Pa&usieren - + Start transport rolling Transportvorgang starten - - + + &Play Abs&pielen - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -641,37 +1210,38 @@ Das ALSA-MIDI-Steckfeld wird nicht verfügbar sein. - + D-BUS: Service is available (%1 aka jackdbus). D-BUS: Dienst ist verfügbar (%1 aka jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). D-Bus: Dienst ist nicht verfügbar (%1 aka jackdbus). - - + + Information Information - + Don't show this message again Diese Meldung nicht mehr anzeigen - - - - - + + + + + + Warning Warnung - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -679,17 +1249,17 @@ Wollen Sie diesen beenden? - + successfully erfolgreich - + with exit status=%1 mit Rückgabewert = %1 - + Could not start JACK. Maybe JACK audio server is already started. @@ -697,7 +1267,7 @@ Möglicherweise läuft der JACK-Server schon. - + Could not load preset "%1". Retrying with default. @@ -705,29 +1275,29 @@ Versuche erneut mit Voreinstellung. - + Could not load default preset. Sorry. Konnte leider die Voreinstellung nicht laden. - + Startup script... Start-Skript... - + Startup script terminated Start-Skript beendet - + D-BUS: JACK server is starting... D-BUS: JACK-Server startet... - + D-BUS: JACK server could not be started. Sorry @@ -736,12 +1306,12 @@ Tut mir Leid - + JACK is starting... JACK startet... - + Some client audio applications are still active and connected. @@ -751,17 +1321,17 @@ Wollen Sie den JACK-Server anhalten? - + JACK is stopping... JACK fährt herunter... - + Shutdown script... Herunterfahr-Skript... - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -771,24 +1341,25 @@ Kontextmenü des Benachrichtigungsfeldsymbols. - - - + + + + Don't ask this again Nicht nochmal nachfragen - + Shutdown script terminated Herunterfahr-Skript beendet - + D-BUS: JACK server is stopping... D-BUS: JACK-Server fährt herunter... - + D-BUS: JACK server could not be stopped. Sorry @@ -797,72 +1368,83 @@ Tut mir Leid - + Post-shutdown script... Nach-Herunterfahr-Skript... - + Post-shutdown script terminated Nach-Herunterfahr-Skript beendet - + JACK was started with PID=%1. JACK wurde mit PID = %1 gestartet. - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Die Alternativbezeichnungen für Voreinstellungen wurden verändert: +"%1" +Änderungen speichern? + + + D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: JACK-Server wurde gestartet (%1 aka jackdbus). - + JACK is being forced... JACK wird gezwungen... - + JACK was stopped JACK wurde angehalten - + D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: JACK-Server wurde angehalten (%1 aka jackdbus). - + Error Fehler - + Transport BBT (bar.beat.ticks) Transport BBT (bar.beat.ticks) - + Transport time code Transport Timecode - + Elapsed time since last reset Seit dem letzten Zurücksetzen vergangene Zeit - + Elapsed time since last XRUN Seit dem letzten XRUN vergangene Zeit - + Patchbay reset. Steckfeld zurückgesetzt. - + Could not load active patchbay definition. "%1" @@ -871,129 +1453,139 @@ Konnte aktive Steckfelddefinition nicht laden. - + Patchbay activated. Steckfeld aktiviert. - + Patchbay deactivated. Steckfeld deaktiviert. - + Statistics reset. Statistik zurückgesetzt. - + msec ms - + JACK connection graph change. Schaubild der JACK-Verbindungen geändert. - + XRUN callback (%1). - + Buffer size change (%1). Puffergröße geändert (%1). - + Shutdown notification. Benachrichtigung zum Herunterfahren. - + + Freewheel started... + + + + + Freewheel exited. + + + + Could not start JACK. Sorry. Konnte JACK nicht starten. - + JACK has crashed. JACK ist abgestürzt. - + JACK timed out. JACK Zeitüberschreitung. - + JACK write error. JACK Schreibfehler. - + JACK read error. JACK Lesefehler. - + Unknown JACK error (%d). Unbekannter JACK-Fehler (%d). - + JACK property change. JACK-Eigenschaft geändert. - + ALSA connection graph change. Schaubild der ALSA-Verbindungen geändert. - + JACK active patchbay scan JACK aktive Steckfeldsuche - + ALSA active patchbay scan ALSA aktive Steckfeldsuche - + JACK connection change. JACK-Verbindung geändert. - + ALSA connection change. ALSA-Verbindung geändert. - + checked überprüft - + connected verbunden - + disconnected getrennt - + failed fehlgeschlagen - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1006,62 +1598,62 @@ Wollen Sie diese Steckfeldverbindung entfernen? - + Overall operation failed. Gesamtbetrieb schlug fehl. - + Invalid or unsupported option. Ungültige oder nicht unterstützte Option. - + Client name not unique. Name des Clients nicht einzigartig. - + Server is started. Server ist gestartet. - + Unable to connect to server. Verbindungsaufnahme zum Server gescheitert. - + Server communication error. Server-Kommunikationsfehler. - + Client does not exist. Client existiert nicht. - + Unable to load internal client. Interner Client konnte nicht geladen werden. - + Unable to initialize client. Client konnte nicht initialisiert werden. - + Unable to access shared memory. Kein Zugriff auf Shared Memory möglich. - + Client protocol version mismatch. Unpassende Client-Protokollversion - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1069,261 +1661,277 @@ Bitte sehen Sie im Meldungsfenster nach weiteren Informationen. - + Server configuration saved to "%1". Serverkonfiguration nach "%1" gespeichert. - + Client activated. Client aktiviert - + Post-startup script... Nach-Start-Skript... - + Post-startup script terminated Nach-Start-Skript beendet - + Command line argument... Kommandozeilenargument... - + Command line argument started Kommandozeilenargument gestartet - + Client deactivated. Client deaktiviert. - + Transport rewind. Transport zurückspulen. - + Transport backward. Transport zurück. - - - + + + Starting Startet - + Transport start. Transport starten. - - + + Stopping Stoppe - + Transport stop. Transport anhalten. - + Transport forward. Transport vorwärts. - - + + Stopped Steht - + %1 (%2%) %1 (%2 %) - + %1 (%2%, %3 xruns) %1 (%2%, %3 xruns) - + %1 % %1 % - + %1 Hz %1 Hz - + %1 frames %1 Frames - + Yes Ja - + No Nein - + + FW + + + + RT RT - + Rolling Rollt - + Looping Schleifen ausführend - + %1 msec %1 ms - + XRUN callback (%1 skipped). XRUN callback (%1 übersprungen). - + Started Läuft - + Active Aktiv - + Activating Aktivierend - + Inactive Inaktiv - - + + &Hide &Verbergen - + Mi&nimize Mi&nimieren - - + + S&how An&zeigen - + Rest&ore Neu&laden - + &Stop &Stopp - + &Reset &Zurücksetzen - + &Presets &Voreinstellungen - + &Versioning &Versionierung - + Re&fresh Au&ffrischen - - + + S&ession S&itzung... - + &Load... &Laden... - + &Save... &Speichern... - + Save and &Quit... Speichern und &beenden... - + Save &Template... &Vorlage speichern... - + &Connections &Verbindungen - + Patch&bay Steck&feld - + + + &Graph + + + + &Transport &Transport - + Server settings will be only effective after restarting the JACK audio server. Die Server-Einstellungen werden erst nach einem Neustart des JACK-Servers wirksam. - + + Do you want to restart the JACK audio server? + + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1331,7 +1939,7 @@ - + D-BUS: ResetParameterValue('%1'): %2. @@ -1339,7 +1947,7 @@ - + D-BUS: GetParameterValue('%1'): %2. @@ -1347,7 +1955,7 @@ - + Some settings will be only effective the next time you start this program. Einige Einstellungen werden erst nach @@ -1358,8 +1966,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Meldungen/Status - JACK Audio Connection Kit + Messages / Status + @@ -1530,12 +2138,12 @@ qjackctlPatchbay - + Warning Warnung - + This will disconnect all sockets. Are you sure? @@ -1547,8 +2155,8 @@ qjackctlPatchbayForm - Patchbay - JACK Audio Connection Kit - Steckfeld - JACK Audio Connection Kit + Patchbay + @@ -1734,12 +2342,12 @@ A&ktivieren - + Warning Warnung - + The patchbay definition has been changed: "%1" @@ -1750,23 +2358,23 @@ Wollen Sie die Änderungen speichern? - + %1 [modified] %1 [verändert] - + Untitled%1 Unbenannt%1 - - + + Error Fehler - + Could not load patchbay definition file: "%1" @@ -1774,7 +2382,7 @@ "%1" - + Could not save patchbay definition file: "%1" @@ -1782,35 +2390,35 @@ "%1" - + New Patchbay definition Neue Steckfelddefinition - + Create patchbay definition as a snapshot of all actual client connections? Steckfelddefinitionsdatei als Schnappschuss der aktuell vorhandenen Verbindungen erstellen? - + Load Patchbay Definition Steckfelddefinition laden - - + + Patchbay Definition files Steckfelddefinitionsdateien - + Save Patchbay Definition Speichere Steckfelddefinition - + active aktiv @@ -1818,90 +2426,90 @@ qjackctlPatchbayView - + Add... Hinzufügen... - + Edit... Bearbeiten... - + Copy... Kopieren... - + Remove Entfernen - + Exclusive Exklusiv - + Forward Weiterleiten - + (None) (Keine) - + Move Up Nach oben - + Move Down Nach unten - + &Connect &Verbinden - + Alt+C Connect Alt+V - + &Disconnect &Trennen - + Alt+D Disconnect Alt+T - + Disconnect &All &Alle trennen - + Alt+A Disconect All Alt+A - + &Refresh Auf&frischen - + Alt+R Refresh Alt+F @@ -1911,8 +2519,8 @@ qjackctlSessionForm - Session - JACK Audio Connection Kit - Sitzung - JACK Audio Connection Kit + Session + @@ -1921,7 +2529,7 @@ - + &Load... &Laden... @@ -1948,14 +2556,14 @@ - + &Versioning &Versionierung - - + + Re&fresh Au&ffrischen @@ -1981,7 +2589,7 @@ - + &Add &Hinzufügen @@ -1992,7 +2600,7 @@ - + &Edit &Bearbeiten @@ -2003,13 +2611,13 @@ - + Re&move En&tfernen - + &Save... &Speichern... @@ -2045,46 +2653,46 @@ &Speichern - - + + Load Session Sitzung laden - - + + Session directory Sitzungsverzeichnis - + Save Session Sitzung speichern - + and Quit und beenden - + Template Vorlage - + &Clear &Löschen - - - + + + Warning Warnung - + A session could not be found in this folder: "%1" @@ -2092,17 +2700,17 @@ "%1" - + %1: loading session... %1: lade Sitzung... - + %1: load session %2. %1: lade Sitzung %2. - + A session already exists in this folder: "%1" @@ -2113,7 +2721,7 @@ Soll diese Sitzung überschrieben werden? - + This folder already exists and is not empty: "%1" @@ -2124,29 +2732,29 @@ Soll das existierende Verzeichnis überschrieben werden? - + %1: saving session... %1: speichere Sitzung... - + %1: save session %2. %1: speichere Sitzung %2. - + New Client Neuer Client - + Save and &Quit... Speichern und &beenden... - + Save &Template... &Vorlage speichern... @@ -2162,11 +2770,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Einstellungen - JACK Audio Connection Kit - - Settings Einstellungen @@ -2183,18 +2786,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2218,19 +2822,22 @@ &Löschen - + jackd - jackd + DO NOT TRANSLATE + - + jackdmp - jackdmp + DO NOT TRANSLATE + - + jackstart - jackstart + DO NOT TRANSLATE + @@ -2245,42 +2852,44 @@ dummy - dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + sun - sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - freebob - freebob - - - firewire - firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2288,1181 +2897,1138 @@ Parameter - + MIDI Driv&er: MIDI-&Treiber: - + The ALSA MIDI backend driver to use Zu nutzender ALSA-MIDI-Treiber - + none keiner - + raw - raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Time in seconds that client is delayed after server startup Zeitverzögerung für den Client nach Start des Servers - + Latency: Latenz: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Ausgangslatenz in Millisekunden. Berechnung basiert auf Perioden-, Abtastraten- und Puffereinstellungen - + Use realtime scheduling Echtzeitverarbeitung nutzen - + &Realtime Echt&zeit - + Do not attempt to lock memory, even if in realtime mode Keinen Arbeitsspeicher sperren, auch nicht im Echtzeitmodus - + No Memory Loc&k Spei&cher nicht sperren - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Arbeitsspeicher von gängigen Bibliotheken (GTK+, Qt, FLTK, Wine) entsperren - + &Unlock Memory S&peicher entsperren - + Ignore xruns reported by the backend driver Xruns des Schnittstellentreibers ignorieren - + So&ft Mode So&ft-Modus - + Provide output monitor ports Anschlüsse zur Ausgangsüberwachung anbieten - + &Monitor &Überwachung - + Force 16bit mode instead of failing over 32bit (default) 16-Bit-Modus erzwingen statt versuchsweiser Aktivierung des 32-Bit-Modus (voreingestellt) - + Force &16bit &16 Bit erzwingen - - Enable hardware monitoring of capture ports - Hardware-Überwachung der Capture-Anschlüsse aktivieren - - - - H/W M&onitor - H/W Über&wachung - - - + Enable hardware metering on cards that support it Hardware-Messung bei Karten aktivieren, die diese unterstützen - + H/&W Meter H/W &Messung - + Ignore hardware period/buffer size Ignoriere Periode/Puffergröße der Hardware - + &Ignore H/W &Ignoriere H/W - + Whether to give verbose output on messages Ausführliche Meldungen anzeigen - + &Verbose messages Aus&führliche Meldungen - + &Output Device: A&usgabegerät: - + &Interface: S&chnittstelle: - + Maximum input audio hardware channels to allocate Maximum belegbarer Audio-Hardware-Eingänge - + &Audio: &Audio: - + Dit&her: - + External output latency (frames) Externe Ausgangslatenz (Frames) - + &Input Device: Eingangsger&ät: - + Provide either audio capture, playback or both Entweder Audio-Aufnahme, -Wiedergabe oder beides anbieten - + Duplex Duplex - + Capture Only Nur Aufnahme - + Playback Only Nur Wiedergabe - + The PCM device name to use Name des genutzten PCM-Gerätes + + + + hw:0 + hw:0 + + - hw:0 - hw:0 + plughw:0 + plughw:0 - plughw:0 - plughw:0 + /dev/audio + /dev/audio - /dev/audio - /dev/audio - - - - - /dev/dsp /dev/dsp - - - - + + + + > > - + Alternate input device for capture Alternativer Geräteeingang für Aufnahme - + Maximum output audio hardware channels to allocate Maximum der belegbaren Audio-Hardware-Ausgänge - + Alternate output device for playback Alternatives Ausgabegerät für Wiedergabe - + External input latency (frames) Externe Eingangslatenz (Frames) - + Set dither mode Dither-Modus festlegen - + None Keiner - + Rectangular Rechteck - + Shaped Hüllkurve - + Triangular Dreieck - + Number of periods in the hardware buffer Anzahl der Perioden im Hardware-Puffer - + Server &Prefix: Server &Präfix: - + Server path (command line prefix) Serverpfad (Kommandozeilen Präfix) - + Priorit&y: Priorit&ät: - + &Frames/Period: &Frames/Periode: - + Frames per period between process() calls Frames pro Periode zwischen process() Aufrufen - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Port Ma&ximum: Ma&ximaler Port: - + &Channels: &Kanäle: - + 21333 21333 - + Sample rate in frames per second Abtastrate in Frames pro Sekunde - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + 192000 192000 - + Scheduler priority when running realtime Priorität für die Echtzeitsteuerung - + &Word Length: Wortl&änge: - + Periods/&Buffer: Per&ioden/Puffer: - + Word length Wortlänge - + Maximum number of ports the JACK server can manage Maximum an Anschlüssen, die der JACK-Server verarbeiten kann - + &Wait (usec): &Warten (µs) - + Sample &Rate: Abtast&rate: - + Maximum number of audio channels to allocate Maximale Anzahl der belegbaren Audiokanäle festlegen - + &Timeout (msec): &Timeout (ms): - + Set client timeout limit in milliseconds Timeout-Limitierung für Clients festlegen; Angabe in Millisekunden - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + &Channels I/O: &Kanäle I/O: - + &Latency I/O: &Latenz I/O: - + Server Suffi&x: Server Suffi&x: - + Start De&lay: Startver&zögerung: - + secs s - + 0 msecs 0 ms - + Advanced - + Options Optionen - + Scripting Skript-Steuerung - + Whether to execute a custom shell script before starting up the JACK audio server. Festlegen, ob ein angepasstes Shell-Skript vor dem Start des JACK-Servers ausgeführt werden soll - + Execute script on Start&up: Skript &beim Start ausführen: - + Whether to execute a custom shell script after starting up the JACK audio server. Festlegen, ob ein angepasstes Shell-Skript nach dem Start des JACK-Servers ausgeführt werden soll. - + Execute script after &Startup: Skript &nach Start ausführen: - + Whether to execute a custom shell script before shuting down the JACK audio server. Festlegen, ob ein angepasstes Shell-Skript vor dem Herunterfahren des JACK-Servers ausgeführt werden soll - + Execute script on Shut&down: Skript beim &Herunterfahren ausführen: - + Command line to be executed before starting up the JACK audio server Vor dem Starten des JACK-Servers ausgeführte Kommandozeile - - - - + + + + Scripting argument meta-symbols Meta-Symbole der Skriptargumente - + Browse for script to be executed before starting up the JACK audio server Skript auswählen, das vor dem Starten des JACK-Servers ausgeführt wird - - - - - - + + + + + + ... ... - + Command line to be executed after starting up the JACK audio server Nach dem Starten des JACK-Servers ausgeführte Kommandozeile - + Browse for script to be executed after starting up the JACK audio server Skript auswählen, das nach dem Starten des JACK-Servers ausgeführt wird - + Browse for script to be executed before shutting down the JACK audio server Skript auswählen, das vor dem Herunterfahren des JACK-Servers ausgeführt wird - + Command line to be executed before shutting down the JACK audio server Vor dem Herunterfahren des JACK-Servers ausgeführte Kommandozeile - + Whether to execute a custom shell script after shuting down the JACK audio server. Festlegen, ob ein angepasstes Shell-Skript nach dem Herunterfahren des JACK-Servers ausgeführt werden soll. - + Execute script after Shu&tdown: Skript nach dem Herunter&fahren ausführen: - + Browse for script to be executed after shutting down the JACK audio server Skript auswählen, das nach dem Herunterfahren des JACK-Servers ausgeführt wird - + Command line to be executed after shutting down the JACK audio server Nach dem Herunterfahren des JACK-Servers ausgeführte Kommandozeile - + Statistics Statistik - + Whether to capture standard output (stdout/stderr) into messages window Standardausgabe (stdout/stderr) in Meldungsfenster umleiten - + &Capture standard output Standardausgabe &umleiten - + &XRUN detection regex: - + Regular expression used to detect XRUNs on server output messages Regulärer Ausdruck zur Erkennung von XRUNs in vom Server gesendeten Meldungen - + xrun of at least ([0-9|\.]+) msecs xrun mit mindestens ([0-9|\.]+) ms - + Connections Verbindungen - + Whether to enable JACK D-Bus interface - + &Enable JACK D-Bus interface - + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + 10 10 - + Patchbay definition file to be activated as connection persistence profile Steckfelddefinitionsdatei als beständiges Verbindungsprofil aktivieren - + Browse for a patchbay definition file to be activated Eine Steckfelddefinitionsdatei zum aktivieren wählen - + Whether to activate a patchbay definition for connection persistence profile. Ein beständiges Verbindungsprofil für das Steckfeld aktivieren. - + Activate &Patchbay persistence: Steck&feldkonfiguration hat Bestand: - + Logging Protokollierung - + Messages log file Protokolldatei für Meldungen - + Browse for the messages log file location Speicherort für Protokolldatei wählen - + Whether to activate a messages logging to file. Protokollierung der Meldungen in eine Datei festlegen. - + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + + + + Please do not touch these settings unless you know what you are doing. - + Extra driver options (command line suffix) Sonderoptionen für Treiber (Kommandozeilen Präfix) - + Whether to reset all connections when a patchbay definition is activated. Alle Verbindungen zurücksetzen, wenn eine Steckfeldkonfiguration aktiviert wird - + &Reset all connections on patchbay activation Alle &Verbindungen bei Steckfaktivierung zurücksetzen - + Whether to issue a warning on active patchbay port disconnections. Warnung anzeigen, wenn eine aktive Verbindung getrennt wird - + &Warn on active patchbay disconnections Beim &Trennen aktiver Verbindungen warnen - + &Messages log file: &Protokolldatei: - + Display Anzeige - + Time Display Zeitanzeige - - Time F&ormat: - Zeit&format: - - - - The general time format on display - Allgemeines Zeitformat der Anzeige - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - + Transport &Time Code - + Transport &BBT (bar:beat.ticks) - + Elapsed time since last &Reset Seit dem letzten &Zurücksetzen verstrichene Zeit - + Elapsed time since last &XRUN Seit dem letzten &XRUN verstrichene Zeit - + Sample front panel normal display font Beispielhafte Darstellung der normalen Anzeige - + Sample big time display font Beispielhafte Darstellung der großen Anzeige - + Big Time display: Große Zeitanzeige: - + Select font for front panel normal display Schriftart für normale Anzeige wählen - - - - + + + + &Font... &Schriftart... - + Select font for big time display Schriftart für große Zeitanzeige wählen - + Normal display: Normale Anzeige: - - Whether to enable a shiny glass light effect on the main display - Anzeige mit Schimmereffekt darstellen - - - - &Display shiny glass light effect - Schi&mmereffekt darstellen - - - + Whether to enable blinking (flashing) of the server mode (RT) indicator Realtime-Indikator (RT) für Servermodus blinkend darstellen - + Blin&k server mode indicator Ser&vermodus blinkend darstellen - + Messages Window Meldungsfenster - + Sample messages text font display Beispielhafte Darstellung des Textes im Meldungsfenster - + Select font for the messages text display Schriftart für Text im Meldungsfenster wählen - + Whether to keep a maximum number of lines in the messages window Maximale Anzahl der im Meldungsfenster angezeigten Zeilen festlegen - + &Messages limit: &Meldungsmaximum: - + The maximum number of message lines to keep in view Maximale Anzahl der Nachrichten im Meldungsfenster - + 100 100 - + 250 250 - + 2500 2500 - + Connections Window Verbindungsübersicht - + Sample connections view font Beispielhafte Darstellung der Schrift in der Verbindungsübersicht - + Select font for the connections view Schriftart für Verbindungsübersicht wählen - + &Icon size: &Symbolgröße: - + The icon size for each item of the connections view Größe der einzelnen Symbole in der Verbindungsübersicht - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + Whether to enable in-place client/port name editing (rename) Direktes Bearbeiten der Client/Anschluss-Alternativbezeichnung (Alias) erlauben - + Ena&ble client/port aliases editing (rename) Bearbeiten von &Deckbezeichnungen für Client/Anschlüsse - + Whether to enable client/port name aliases on the connections window Verwendung von Deckbezeichnungen (Alias) für Anschlüsse in der Verbindungsübersicht erlauben - + E&nable client/port aliases Dec&kbezeichnungen (Alias) für Client/Anschlüsse - - Whether to draw connection lines as cubic Bezier curves - Festlegen, ob Verbindungslinien als Bezier-Kurven gezeichnet werden sollen - - - - Draw connection and patchbay lines as Be&zier curves - Verbindungslinien als Be&zier-Kurven zeichen - - - + Misc Verschiedenes - + Other Weiteres - + Whether to start JACK audio server immediately on application startup JACK-Server unmittelbar bei Anwendungsstart starten - + &Start JACK audio server on application startup JACK-&Server bei Anwendungsstart starten - + Whether to ask for confirmation on application exit Vor dem Beenden des JACK-Servers nachfragen - + JACK client/port pretty-name (metadata) display mode - + Enable JA&CK client/port pretty-names (metadata) - + &Confirm application close Beenden der An&wendung bestätigen - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + + + + + Confirm server sh&utdown and/or restart + + + + Whether to keep all child windows on top of the main window Alle Kindfenster oberhalb des Hauptfensters halten - + &Keep child windows always on top &Kindfenster immer oben belassen - + Whether to enable the system tray icon Anwendungssymbol im Benachrichtigungsfeld anzeigen - + &Enable system tray icon S&ymbol im Benachrichtigungsfeld anzeigen - + Whether to start minimized to system tray Anwendung minimiert als Symbol im Benachrichtigungsfeld starten - + Start minimi&zed to system tray Minimiert im &Benachrichtigungsfeld starten - + Whether to save the JACK server command-line configuration into a local file (auto-start) Kommandozeilenkonfiguration zum Starten des JACK-Servers in einer lokalen Datei speichern (auto-start) - + S&ave JACK audio server configuration to: Konfi&guration für JACK-Server speichern unter: - + The server configuration local file name (auto-start) Name der lokal gespeicherten Serverkonfigurationsdatei (auto-start) - + .jackdrc .jackdrc - - Whether to exit once all clients have closed (auto-start) - Programm beenden, wenn alle Client-Verbindungen getrennt sind (auto-start) - - - - C&onfigure as temporary server - Als temporären Ser&ver konfigurieren - - - - Whether to ask for confirmation on JACK audio server shutdown - Das Herunterfahren des JACK-Servers per Nachfrage bestätigen - - - - Confirm server sh&utdown - Herunter&fahren des Servers bestätigen - - - + Whether to enable ALSA Sequencer (MIDI) support on startup Unterstützung für den ALSA Sequencer (MIDI) beim Programmstart aktivieren - + E&nable ALSA Sequencer support Unterstützung für ALSA-Se&quencer bereitstellen - + Buttons Schaltflächen - + Whether to hide the left button group on the main window Linke Schaltflächengruppe im Hauptfenster verbergen - + Hide main window &Left buttons &Linke Schaltflächen des Hauptfensters verbergen - + Whether to hide the right button group on the main window Rechte Schaltflächengruppe im Hauptfenster verbergen - + Hide main window &Right buttons &Rechte Schaltflächen des Hauptfensters verbergen - + Whether to hide the transport button group on the main window Schaltflächen der Transportsteuerung im Hauptfenster verbergen - + Hide main window &Transport buttons Schaltflächen für &Transportsteuerung verbergen - + Whether to hide the text labels on the main window buttons Beschriftung der Schaltflächen im Hauptfenster verbergen - + Hide main window &button text labels Besch&riftung der Schaltflächen verbergen - - - + + + Warning Warnung - + Some settings have been changed: "%1" @@ -3473,7 +4039,7 @@ Wollen Sie diese speichern? - + Delete preset: "%1" @@ -3484,97 +4050,97 @@ Sind Sie sicher? - + msec ms - + n/a n/a - + &Preset Name Benennung der &Voreinstellung - + &Server Name &Servername - + &Server Path &Serverpfad - + &Driver Trei&ber - + &Interface Sc&hnittstelle - + Sample &Rate Abtast&rate - + &Frames/Period &Frames/Periode - + Periods/&Buffer Perioden/&Puffer - + Startup Script Start-Skript - + Post-Startup Script Nach-Start-Skript - + Shutdown Script Herunterfahr-Skript - + Post-Shutdown Script Nach-Herunterfahr-Skript - + Active Patchbay Definition Aktive Steckfelddefinition - + Patchbay Definition files Steckfelddefinitionsdateien - + Messages Log Meldungsprotokoll - + Log files Protokolldateien - + Some settings have been changed. Do you want to apply the changes? @@ -3582,137 +4148,139 @@ Wollen Sie diese übernehmen? - + &JACK client/port aliases: Deckbezeichnungen bei &JACK-Anschlüssen: - + JACK client/port aliases display mode Anzeigemodus für die JACK-Client/Anschlussbenennung - + Default Voreinstellung - + First Erster - + Second Zweiter - + Whether to show system tray message on main window close Nachrichten des Benachrichtigungsfelds beim Schließen des Hauptfensters anzeigen - + Sho&w system tray message on close &Nachrichten des Benachrichtigungsfelds beim Beenden anzeigen - + Whether to stop JACK audio server on application exit JACK Audio-Server bei Programmbeendung anhalten - + S&top JACK audio server on application exit JACK Audio-&Server bei Programmbeendung anhalten - + Defaults Voreinstellungen - + &Base font size: &Basisschriftgröße: - + Base application font size (pt.) Generelle Schriftgröße (pt.) für die Anwendung festlegen - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface D-Bus-Schnittstelle aktivieren - + &Enable D-Bus interface D-Bus-S&chnittstelle aktivieren - + Number of microseconds to wait between engine processes (dummy) Wartezeit in Mikrosekunden zwischen Verarbeitungsprozessen (dummy) - + &Name: &Name: - + The JACK Audio Connection Kit sound server name Name des JACK Audio Connection Kit Soundservers - + netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - + Whether to restrict to one single application instance (X11) Festlegen, ob nur eine Anwendungsinstanz (X11) gestartet werden darf - + Single application &instance Nur eine Anwendungsinstan&z zulassen @@ -3721,8 +4289,8 @@ qjackctlSocketForm - Socket - JACK Audio Connection Kit - Anschluss - JACK Audio Connection Kit + Socket + Anbindung diff -Nru qjackctl-0.4.5/src/translations/qjackctl_es.ts qjackctl-0.6.0/src/translations/qjackctl_es.ts --- qjackctl-0.4.5/src/translations/qjackctl_es.ts 2017-04-27 14:44:14.567761974 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_es.ts 2019-10-17 07:45:45.964673224 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,74 +27,90 @@ QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Start JACK audio server immediately Iniciar servidor de audio JACK ahora - + Set active patchbay definition file Establecer el fichero del patchbay activo - + Show help about command line options Mostrar ayuda sobre las opciones de línea de comando - + Show version information Mostrar información sobre esta versión - + Option -p requires an argument (preset). La opción -p nececita un argumento (nombre de un preset). - + Usage: %1 [options] [command-and-args] Uso: %1 [opciones] [comandos-y-argumentos] - + Options: Opciones: - + Set default settings preset name Establece el preset predeterminado - + Option -a requires an argument (path). La opción -a requiere un argumento (ruta). - + Set default JACK audio server name Establecer el nombre predetermindado del servidor de audio JACK - + Option -n requires an argument (name). La opción -n necesita un argumento (nombre). - + %1 (%2 frames) + + + Move + + + + + Rename + + qjackctlAboutForm + + About + + + About Qt Acerca de QT @@ -165,11 +181,6 @@ Soporte MIDI en JACK deshabilitado. - - About QjackCtl - Acerca de QjackCtl - - JACK Port aliases support disabled. Soporte para alias de los puertos de JACK deshabilitado. @@ -261,12 +272,12 @@ qjackctlConnect - + Warning Advertencia - + This will suspend sound processing from all client applications. @@ -279,11 +290,6 @@ qjackctlConnectionsForm - - Connections - JACK Audio Connection Kit - Conexiones - JACK Audio Connection Kit - - Audio Audio @@ -345,29 +351,16 @@ Refrescar la vista actual de conexiones + + Connections + Conexiones + + MIDI MIDI - - Warning - Advertencia - - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Los alias de presets han cambiado: - -"%1" - -Desea guardar los cambios? - - ALSA ALSA @@ -390,212 +383,792 @@ qjackctlConnectorView - + &Connect &Conectar - + Alt+C Connect Alt+C - + &Disconnect &Desconectar - + Alt+D Disconnect Alt+D - + Disconnect &All Desconectar &Todo - + Alt+A Disconect All Alt+T - + &Refresh &Refrescar - + Alt+R Refresh Alt+R + qjackctlGraphCanvas + + + + Connect + + + + + Disconnect + + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + + + + + &Edit + &Editar + + + + &View + + + + + &Zoom + + + + + Co&lors + + + + + S&ort + + + + + &Help + + + + + &Connect + + + + + + Connect + + + + + Connect selected ports + + + + + Ins + + + + + &Disconnect + &Desconectar + + + + + Disconnect + + + + + Disconnect selected ports + + + + + Del + + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + + + + + + + Select All + + + + + Ctrl+A + + + + + Select &None + + + + + + + Select None + + + + + Ctrl+Shift+A + + + + + Select &Invert + + + + + + + Select Invert + + + + + Ctrl+I + + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + + + + + + Menubar + + + + + Show/hide the main program window menubar + + + + + Ctrl+M + + + + + &Toolbar + + + + + + Toolbar + + + + + Show/hide main program window file toolbar + + + + + &Statusbar + + + + + + Statusbar + + + + + Show/hide the main program window statusbar + + + + + Text Beside &Icons + + + + + + Text beside icons + + + + + Show/hide text beside icons + + + + + &Center + + + + + + Center + + + + + Center view + + + + + &Refresh + &Refrescar + + + + + Refresh + + + + + Refresh view + + + + + F5 + + + + + Zoom &In + + + + + + + Zoom In + + + + + Ctrl++ + + + + + Zoom &Out + + + + + + + Zoom Out + + + + + Ctrl+- + + + + + Zoom &Fit + + + + + + + Zoom Fit + + + + + Ctrl+0 + + + + + Zoom &Reset + + + + + + + Zoom Reset + + + + + Ctrl+1 + + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + &Reset + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + + + + + About... + + + + + About + + + + + Show information about this application program + + + + + About &Qt... + + + + + About Qt... + + + + + About Qt + Acerca de QT + + + + Show information about the Qt toolkit + + + + + &Undo + + + + + &Redo + + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + + + + + Ready + + + + + Colors - %1 + + + + qjackctlMainForm - - + + &Quit &Salir - + Quit processing and exit Terminar procesamiento y salir - - + + &Start &Iniciar - + Start the JACK server Iniciar el servidor JACK - + S&top &Detener - + Stop the JACK server Detener el servidor JACK - + St&atus &Estado - - + + Ab&out... Ace&rca... - + Show information about this application Mostrar información sobre esta aplicación - + Show settings and options dialog Mostrar el diálogo de opciones y preferencias - - + + &Messages &Mensajes - + Patch&bay Patch&bay - + Show/hide the patchbay editor window Mostrar / ocultar el editor de patchbay - + &Connect &Conexiones - - Show/hide the actual connections patchbay window - Mostrar / ocultar el patchbay con las conexiones actuales - - - + JACK server state Estado del servidor JACK - + JACK server mode Modo del servidor JACK - + Sample rate Frecuencia de muestreo - + Time display Visor de tiempo - + Transport state Estado del transporte - + Transport BPM BPM del transporte - + Transport time Tiempo del transporte - + + Show/hide the graph window + + + + + Show/hide the connections window + + + + Backward transport Retroceder transporte - + Forward transport Avanzar transporte (Alt+L) - + Rewind transport Rebobinar transporte (Alt+K) - + Stop transport rolling Detener el transporte (Shift+Espacio) - + Start transport rolling Iniciar el transporte (Espacio) - - - - - + + + + + + Warning Advertencia - + successfully satisfactoriamente - + with exit status=%1 con estado %1 - + Could not load preset "%1". Retrying with default. @@ -603,7 +1176,7 @@ Probando con el predeterminado. - + Could not load default preset. Sorry. @@ -611,22 +1184,22 @@ No se pudo cargar el preset predeterminado. - + Startup script... Script de inicio... - + Startup script terminated El script de inicio finalizó - + JACK is starting... JACK está iniciándose... - + Could not start JACK. Sorry. @@ -634,12 +1207,12 @@ No se pudo iniciar JACK. - + JACK is stopping... JACK está deteniéndose... - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -650,54 +1223,55 @@ en el menú contextual del ícono en la bandeja del sistema. - + Shutdown script... Script de apagado... - + Shutdown script terminated El script de apagado finalizó - + JACK was stopped JACK ha sido detenido - + Post-shutdown script... Script de post - apagado... - + D-BUS: Service is available (%1 aka jackdbus). D-BUS: Disponible (%1 aka jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). D-BUS: No disponible (%1 aka jackdbus). - + Don't show this message again - - - + + + + Don't ask this again - + D-BUS: JACK server is starting... D-BUS: Iniciando servidor JACK... - + D-BUS: JACK server could not be started. Sorry @@ -706,12 +1280,12 @@ Disculpa - + D-BUS: JACK server is stopping... D-BUS: Deteniendo el servidor JACK... - + D-BUS: JACK server could not be stopped. Sorry @@ -720,275 +1294,308 @@ Disculpa - + Post-shutdown script terminated El script de post - apagado finalizó - + D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: El servidor JACK se ha iniciado (%1 aka jackdbus). - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Los alias de presets han cambiado: + +"%1" + +Desea guardar los cambios? + + + D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: El servidor JACK se ha detenido (%1 aka jackdbus). - + Error Error - + Transport time code Código de tiempo del transporte - + Elapsed time since last reset Tiempo transcurrido desde el último reset - + Elapsed time since last XRUN Tiempo transcurrido desde el último XRUN - + Patchbay activated. Patchbay activada. - + Patchbay deactivated. Patchbay desactivada. - + Statistics reset. Reiniciar estadísticas. - + msec mseg - + XRUN callback (%1). XRUN callback (%1). - + Buffer size change (%1). Cambio en el tamaño de buffer (%1). - + Shutdown notification. Notificación de apagado. - + + Freewheel started... + + + + + Freewheel exited. + + + + JACK property change. - + checked verificado - + connected conectado - + disconnected desconectado - + failed falló - + Server configuration saved to "%1". Configuración del servidor salvada en "%1". - + Client activated. Cliente activado. - + Post-startup script... Script de post - inicio... - + Post-startup script terminated El script de post - inicio finalizó - + Command line argument... Argumento de la línea de comando... - + Command line argument started Argumento de la línea de comando iniciado - + Client deactivated. Cliente desactivado. - + Transport rewind. Rebobinar transporte. - + Transport backward. Retroceder transporte. - - - + + + Starting Iniciando - + Transport start. Iniciar transporte. - - + + Stopping Deteniendo - + Transport stop. Detener transporte. - + Transport forward. Avanzar transporte. - - + + Stopped Detenido - + Yes Si - + No No - + + FW + + + + RT RT - + Rolling Rolling - + Looping Looping - + XRUN callback (%1 skipped). XRUN callback (%1 omitidos). - + Started Iniciado - + Active Activo - + Activating Activando - + Inactive Inactivo - - + + &Hide &Ocultar - + Mi&nimize Mi&nimizar - - + + S&how &Mostrar - + Rest&ore &Restablecer - + &Stop &Detener - + &Reset &Reset - + &Connections &Conexiones - + Server settings will be only effective after restarting the JACK audio server. La configuración sólo se hará efectiva reiniciando el servidor JACK. - + + Do you want to restart the JACK audio server? + + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -996,7 +1603,7 @@ - + D-BUS: ResetParameterValue('%1'): %2. @@ -1004,7 +1611,7 @@ - + D-BUS: GetParameterValue('%1'): %2. @@ -1012,20 +1619,20 @@ - - + + Information Información - + Some settings will be only effective the next time you start this program. Algunas configuraciones sólo se aplicarán la próxima vez que inicie este programa. - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -1034,7 +1641,7 @@ El patchbay MIDI de ALSA no estará disponible. - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -1043,7 +1650,7 @@ Desea terminar el servidor de audio JACK? - + Could not start JACK. Maybe JACK audio server is already started. @@ -1052,7 +1659,7 @@ Quizás el servidor de audio JACK ya haya sido iniciado. - + Some client audio applications are still active and connected. @@ -1063,77 +1670,77 @@ Desea detener el servidor de audio JACK? - + JACK was started with PID=%1. JACK se inició con PID=%1. - + JACK is being forced... JACK está siendo forzado... - + Patchbay reset. - + JACK connection graph change. Cambió el gráfico de conexiones de JACK. - + JACK has crashed. JACK ha petado. - + JACK timed out. Tiempo de espera para JACK agotado. - + JACK write error. Error de escritura JACK. - + JACK read error. Error de lectura JACK. - + Unknown JACK error (%d). Error JACK desconocido (%d). - + ALSA connection graph change. Cambió el gráfico de conexiones ALSA. - + JACK active patchbay scan Escaneo del patchbay JACK activo - + ALSA active patchbay scan Escaneo del patchbay ALSA activo - + JACK connection change. Cambios en las conexiones JACK. - + ALSA connection change. Cambios en las conexiones ALSA. - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1148,62 +1755,62 @@ Desea remover la conexion? - + Overall operation failed. La operación global falló. - + Invalid or unsupported option. Opción inválida o no soportada. - + Client name not unique. El nombre de cliente no es único. - + Server is started. El servidor está iniciado. - + Unable to connect to server. No puede conectarse al servidor. - + Server communication error. Error de comunicación con el servidor. - + Client does not exist. El cliente no existe. - + Unable to load internal client. No puede cargarse el cliente interno. - + Unable to initialize client. No puede inicializarse el cliente. - + Unable to access shared memory. No puede accederse a la memoria compartida. - + Client protocol version mismatch. La versión del protocolo cliente no concuerda. - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1212,132 +1819,133 @@ Por favor revise la ventana de mensajes para mas información. - + %1 (%2%) - + %1 % - + %1 Hz - + %1 frames %1 cuadros - + %1 msec - + &Presets &Presets - + + + &Graph + + + + &Transport &Transporte - - + + &Rewind Re&bobinar - - + + &Play &Reproducir - - + + Pa&use Pa&usa - - QjackCtl - QjackCtl - - - + &Patchbay &Patchbay - + DSP Load Uso de CPU del DSP - + XRUN Count (notifications) Cuenta de XRUN (notificaciones) - + &Backward &Retroceder - + &Forward &Avanzar - - + + Set&up... Set&up... - - + + S&ession S&esion - + &Load... &Abrir... - + &Save... &Guardar... - + Save and &Quit... Guardar y &Salir... - + Save &Template... Guardar Plan&tilla... - + Show/hide the session management window Mostrar/ocultar la ventana para administrar sesiones - + Show/hide the messages log/status window Mostrar/ocultar la ventana de estado/log - + Could not load active patchbay definition. "%1" @@ -1350,22 +1958,22 @@ Ha sido deshabilitado. - + &Versioning &Versiones - + Re&fresh Re&frescar - + %1 (%2%, %3 xruns) - + Transport BBT (bar.beat.ticks) @@ -1374,8 +1982,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Mensajes / Estado - JACK Audio Connection Kit + Messages / Status + @@ -1546,12 +2154,12 @@ qjackctlPatchbay - + Warning Advertencia - + This will disconnect all sockets. Are you sure? @@ -1563,11 +2171,6 @@ qjackctlPatchbayForm - - Patchbay - JACK Audio Connection Kit - Patchbay - JACK Audio Connection Kit - - &New &Nueva @@ -1716,6 +2319,11 @@ Duplicar (copiar) el socket de salida seleccionado + + Patchbay + + + Remove currently selected input socket Remover el socket de entrada seleccionado @@ -1736,38 +2344,38 @@ Editar las propiedades del socket de salida seleccionado - + Warning Advertencia - + active activa - + New Patchbay definition Nuevo esquema de patchbay - - + + Patchbay Definition files Archivos de esquemas de patchbay - + Load Patchbay Definition Cargar esquema de patchbay - + Save Patchbay Definition Salvar esquema de patchbay - + The patchbay definition has been changed: "%1" @@ -1780,23 +2388,23 @@ Desea guardar los cambios? - + %1 [modified] %1 [modificado] - + Untitled%1 SinNombre%1 - - + + Error Error - + Could not load patchbay definition file: "%1" @@ -1805,14 +2413,14 @@ "%1" - + Could not save patchbay definition file: "%1" No se puede guardar el archivo con el esquema del patchbay: "%1" - + Create patchbay definition as a snapshot of all actual client connections? Crear un esquema del patchbay en base a @@ -1837,91 +2445,91 @@ qjackctlPatchbayView - + Add... Añadir... - + Edit... Editar... - + Copy... Copiar... - + Remove Remover - + Exclusive Exclusivo - + Move Up Subir - + Move Down Bajar - + &Connect &Conectar - + Alt+C Connect Alt+C - + &Disconnect &Desconectar - + Alt+D Disconnect Alt+D - + Disconnect &All Desconectar &Todo - + Alt+A Disconect All Alt+T - + &Refresh &Refrescar - + Alt+R Refresh Alt+R - + Forward Avanzar - + (None) (Ninguno) @@ -1929,18 +2537,13 @@ qjackctlSessionForm - - Session - JACK Audio Connection Kit - Sesión - JACK Audio Connection Kit - - Load session Cargar sesión - + &Load... &Abrir... @@ -1962,7 +2565,7 @@ - + &Save... &Guardar... @@ -1982,46 +2585,46 @@ Comando - - + + Load Session Cargar Sesión - - + + Session directory Directorio de la sesión - + Save Session Guardar Sesión - + and Quit y Salir - + Template Plantilla - + &Clear &Limpiar - - - + + + Warning Advertencia - + A session could not be found in this folder: "%1" @@ -2030,17 +2633,17 @@ "%1" - + %1: loading session... %1: cargando sesión... - + %1: load session %2. %1: cargar sesión %2. - + A session already exists in this folder: "%1" @@ -2053,7 +2656,7 @@ Está seguro de querer sobreescribirla? - + This folder already exists and is not empty: "%1" @@ -2066,12 +2669,12 @@ Está seguro de sobreescribir esta carpeta? - + %1: saving session... %1: guardando sesión... - + %1: save session %2. %: guardar sesión %2. @@ -2082,17 +2685,22 @@ - + Save and &Quit... Guardar y &Salir... - + Save &Template... Guardar Plan&tilla... + + Session + + + &Save @@ -2105,14 +2713,14 @@ - + &Versioning &Versiones - - + + Re&fresh Re&frescar @@ -2143,7 +2751,7 @@ - + &Add @@ -2154,7 +2762,7 @@ - + &Edit &Editar @@ -2165,12 +2773,12 @@ - + Re&move - + New Client @@ -2186,11 +2794,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Configuración - JACK Audio Connection Kit - - Settings Configuraciones @@ -2202,18 +2805,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2242,14 +2846,22 @@ Eliminar el preset con la configuración actual - - jackstart - jackstart + + jackd + DO NOT TRANSLATE + - - jackd - jackd + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + @@ -2259,27 +2871,44 @@ dummy - dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2287,977 +2916,902 @@ Parámetros - + Number of periods in the hardware buffer Número de períodos en el buffer de hardware - + Priorit&y: &Prioridad: - + &Frames/Period: &Cuadros / Período: - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Frames per period between process() calls Cuadros por período entre llamadas a process() - + Port Ma&ximum: Má&ximos Puertos: - + 21333 21333 - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + Sample rate in frames per second Frecuencia de muestreo en cuadros por segundo - + Scheduler priority when running realtime Prioridad del scheduler cuando se ejecuta en tiempo real - + &Word Length: &Largo de palabra: - + Periods/&Buffer: Períodos / &Buffer: - + Word length Tamaño de palabra - + Maximum number of ports the JACK server can manage Máximo número de puertos que podrá manejar el servidor JACK - + &Wait (usec): &Retardo (microseg): - + Sample &Rate: &Frecuencia de muestreo: - + &Timeout (msec): Límite de &Tiempo (mseg): - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + Set client timeout limit in milliseconds Establece el límite de tiempo de los clientes en milisegundos - + &Realtime Tiempo &Real - + Use realtime scheduling Usar prioridad(scheduling) de tiempo real - + No Memory Loc&k No b&loquear memoria - + Do not attempt to lock memory, even if in realtime mode No intentar bloquear memoria, incluso en modo de tiempo real - + &Unlock Memory &Desbloquear Memoria - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) No bloquear memoria de las librerías comunes (GTK+, QT, FLTK, Wine) - + So&ft Mode Modo &Tolerante - + Ignore xruns reported by the backend driver Ignorar las xruns reportadas por el driver de sonido. JACK tendrá menos tendencia a desconectar los puertos que no respondan. Útil cuando no se corre en tiempo real - + &Monitor &Monitorear - + Provide output monitor ports Proveer puertos para monitoreo de la salida - + Force &16bit Forzar &16bit - + Force 16bit mode instead of failing over 32bit (default) Forzar modo 16 bit en lugar de 32 bit (predeterminado) - - H/W M&onitor - M&onitoreo por Hardware - - - - Enable hardware monitoring of capture ports - Habilitar monitoreo por hardware de los puertos de captura - - - + H/&W Meter Monitoreo por H/&W - + Enable hardware metering on cards that support it Habilita monitoreo por hardware en las placas que lo soporten - + &Ignore H/W &Ignorar H/W - + Ignore hardware period/buffer size Ignorar el tamaño de bufer / período del hardware - + &Output Device: Dispositiv&o de salida: - + &Interface: &Interfaz: - + Maximum input audio hardware channels to allocate Máximo número de canales de entrada por hardware a establecer - + &Audio: &Audio: - + Dit&her: &Suavizado: - + External output latency (frames) Latencia de la salida externa (cuadros) - + &Input Device: D&ispositivo de entrada: - + Duplex Duplex - + Capture Only Sólo Captura - + Playback Only Sólo Reproducción - + Provide either audio capture, playback or both Proveer de puertos de audio para captura, reproducción o ambos - - - + + + hw:0 - + The PCM device name to use Nombre del dispositivo PCM a usar - - - - + + + + > > - - - + + + /dev/dsp - + Alternate input device for capture Dispositivo de entrada alternativo para captura - + Maximum output audio hardware channels to allocate Máximo número de canales de salida por hardware a establecer - + Alternate output device for playback Dispositivo de salida alternativo para reproducción - + External input latency (frames) Latencia de la entrada externa (cuadros) - + None Ninguno - + Rectangular Rectangular - + Shaped - + Triangular Triangular - + Set dither mode Establecer método de suavizado - + Whether to give verbose output on messages Mostrar información mas detallada en los mensajes - + Time in seconds that client is delayed after server startup Tiempo en segundos que el cliente es demorado luego de iniciar el servidor - + Latency: Latencia: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Latencia del sistema en milisegundos, calculada en base a la configuración de período, buffer y frecuencia de muestreo - + Options Opciones - + Scripting Scripting - + Execute script on Start&up: Script a ejecutar al iniciar el servi&dor: - + Whether to execute a custom shell script before starting up the JACK audio server. Ejecutar un script personalizado antes de iniciar el servidor JACK. - + Execute script after &Startup: &Script a ejecutar luego de iniciar: - + Whether to execute a custom shell script after starting up the JACK audio server. Ejecutar un script personalizado después de iniciar el servidor JACK. - + Execute script on Shut&down: Script a ejecutar antes de d&etener: - + Whether to execute a custom shell script before shuting down the JACK audio server. Ejecutar un script personalizado antes de detener el servidor JACK. - + Command line to be executed before starting up the JACK audio server Comando a ejecutar antes de iniciar el servidor JACK - - - - + + + + Scripting argument meta-symbols Variables especiales para pasar al script - - - - - - + + + + + + ... ... - + Browse for script to be executed before starting up the JACK audio server Buscar el script a ejecutar antes de iniciar el servidor de audio JACK - + Command line to be executed after starting up the JACK audio server Comando a ejecutar luego de iniciar el servidor JACK - + Browse for script to be executed after starting up the JACK audio server Buscar el script a ejecutar luego de iniciar el servidor de audio JACK - + Browse for script to be executed before shutting down the JACK audio server Buscar el script a ejecutar antes de terminar el servidor de audio JACK - + Command line to be executed before shutting down the JACK audio server Comando a ejecutar antes de detener el servidor JACK - + Execute script after Shu&tdown: Script a ejecutar luego de &Terminar: - + Whether to execute a custom shell script after shuting down the JACK audio server. Ejecutar un script personalizado después de terminar el servidor JACK. - + Browse for script to be executed after shutting down the JACK audio server Buscar el script a ejecutar luego de terminar el servidor de audio JACK - + Command line to be executed after shutting down the JACK audio server Comando a ejecutar luego de detener el servidor JACK - + Statistics Estadísticas - + &Capture standard output &Capturar salida estándar - + Whether to capture standard output (stdout/stderr) into messages window Capturar la salida estándar de JACK en la ventana de mensajes - + &XRUN detection regex: Expresión regular para detectar &XRUN: - + xrun of at least ([0-9|\.]+) msecs xrun of at least ([0-9|\.]+) msecs - + Regular expression used to detect XRUNs on server output messages Expresión regular usada para detectar XRUNs en los mensajes del servidor - + Connections Conexiones - + 10 10 - + Patchbay definition file to be activated as connection persistence profile Esquemas de patchbay a activar como un perfil persistente de las conexiones - + Browse for a patchbay definition file to be activated Buscar el esquema de patchbay para activar - + Activate &Patchbay persistence: Activar &Persistencia del patchbay: - + Whether to activate a patchbay definition for connection persistence profile. Utilizar un perfil para conservar el esquema del patchbay entre sesiones. - + Display Display - + Time Display Display de tiempo - - Time F&ormat: - F&ormato de tiempo: - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - - The general time format on display - El formato general para mostrar el tiempo - - - + Transport &Time Code Código de Tiempo del &Transporte - + Transport &BBT (bar:beat.ticks) &BBT del Transporte (bar:beat:ticks) - + Elapsed time since last &Reset Tiempo transcurrido desde el último &Reset - + Elapsed time since last &XRUN Tiempo transcurrido desde la última &XRUN - + Sample front panel normal display font Muestra de la fuente para el panel frontal - + Sample big time display font Muestra de la fuente para el display de tiempo grande - + Big Time display: Display de tiempo grande: - - - - + + + + &Font... Fuen&te... - + Select font for front panel normal display Seleccionar fuente para el panel normal - + Select font for big time display Seleccionar fuente para el display de tiempo grande - + Normal display: Display normal: - - &Display shiny glass light effect - Usar &efecto de Resplandor Vítreo - - - - Whether to enable a shiny glass light effect on the main display - Dibujar la ventana principal con un efecto símil cristal - - - + Messages Window Ventana de Mensajes - + Sample messages text font display Muestra de la fuente para la ventana de mensajes - + Select font for the messages text display Seleccionar fuente para el display de mensajes - + &Messages limit: Límite de &Mensajes: - + Whether to keep a maximum number of lines in the messages window Almacenar un número limitado de líneas en la ventana de mensajes - + 100 100 - + 250 250 - + 2500 2500 - + The maximum number of message lines to keep in view Máximo número de líneas para mantener en la ventana de mensajes - + Please do not touch these settings unless you know what you are doing. - + Connections Window Ventana de conexiones - + Sample connections view font Muestra de la fuente para la ventana de conexiones - + Select font for the connections view Seleccionar fuente para la ventana de conexiones - + &Icon size: Tamaño de &Icono: - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + The icon size for each item of the connections view Tamaño de ícono para cada ítem en la vista de conexiones - + Ena&ble client/port aliases editing (rename) Ha&bilitar la edición de alias para los puertos / clientes (renombrarlos) - + Whether to enable in-place client/port name editing (rename) Permitir la edición in-situ de los nobres asignados a puertos o clientes - + E&nable client/port aliases Habilitar alias para los nombres de &puertos / clientes - + Whether to enable client/port name aliases on the connections window Permitir alias para los puertos / clientes en la ventana de conexiones - - Draw connection and patchbay lines as Be&zier curves - Dibujar líneas en el Patchbay y ventana de conexiones como curvas Bé&zier - - - - Whether to draw connection lines as cubic Bezier curves - Utilizar curvas cúbicas Bézier en lugar de rectas (más estilizado) - - - + Misc Otras - + Other Otro - + &Start JACK audio server on application startup Iniciar el &servidor JACK al cargar qjackctl - + Whether to start JACK audio server immediately on application startup Iniciar en forma automática JACK cuando se lanza qjackctl - + &Confirm application close Pedir &Confirmación al salir - + Whether to ask for confirmation on application exit Preguntar antes de salir de qjackctl - + &Keep child windows always on top &Las ventanas hijas siempre arriba - + Whether to keep all child windows on top of the main window Todas las ventanas creadas por qjackctl estarán sobre la ventana principal - + &Enable system tray icon Habilitar ícono en band&eja del sistema - + Whether to enable the system tray icon Permitir íconos en la bandeja del sistema - + S&ave JACK audio server configuration to: S&alvar la configuración del servidor JACK en: - + Whether to save the JACK server command-line configuration into a local file (auto-start) Guardar la línea de comando de JACK a un archivo (auto - inicio) - + .jackdrc .jackdrc - + The server configuration local file name (auto-start) El archivo con la configuración de JACK (auto - inicio) - - C&onfigure as temporary server - C&onfigurar como servidor temporal - - - - Whether to exit once all clients have closed (auto-start) - Salir una vez que todos los clientes hayan finalizado (auto - inicio) - - - - Whether to ask for confirmation on JACK audio server shutdown - Preguntar antes de detener JACK - - - - - + + + Warning Advertencia - + msec mseg - + n/a n/d - + &Preset Name Nombre del &Preset - + &Server Path Ruta hacia el &Servidor - + &Driver &Driver - + &Interface &Interfaz - + Sample &Rate &Frecuencia de muestreo - + &Frames/Period &Cuadros / Período - + Periods/&Buffer Períodos / &Buffer - + Patchbay Definition files Archivos de esquema de patchbay - + Some settings have been changed: "%1" @@ -3270,7 +3824,7 @@ Desea guardarlas? - + Delete preset: "%1" @@ -3283,463 +3837,477 @@ Está seguro? - + Startup Script Script de Inicio - + Post-Startup Script Script de Post-Inicio - + Shutdown Script Script de Apagado - + Post-Shutdown Script Script de Post-Acabado - + Active Patchbay Definition Definición Activa de Patchbay - + Messages Log Registro de Mensajes - + Log files Archivos de registros - + Some settings have been changed. Do you want to apply the changes? Algunas configuraciones han cambiado.Desea aplicar los cambios? - - jackdmp - jackdmp - - The audio backend driver interface to use El driver de audio a utilizar - - sun - - - - - freebob - - - - - firewire - - - - + MIDI Driv&er: Driv&er MIDI: - + The ALSA MIDI backend driver to use El driver MIDI de ALSA a utilizar - + none ninguno - + raw - + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + &Verbose messages Mensajes &Verbosos - - - + + + plughw:0 - - - + + + /dev/audio - + &Channels: &Canales: - + 192000 192000 - + Maximum number of audio channels to allocate El máximo número de canales de audio a utilizar - + Logging Registro - + Messages log file Archivo de registro de mensajes - + Browse for the messages log file location Ir hasta la ubicación del archivo con el registro de mensajes - + Whether to activate a messages logging to file. Si guardar los mensajes a un archivo. - + Advanced - + Whether to reset all connections when a patchbay definition is activated. - + &Reset all connections on patchbay activation - + Whether to issue a warning on active patchbay port disconnections. - + &Warn on active patchbay disconnections - + &Messages log file: Archivo con los &Mensajes: - + Whether to enable blinking (flashing) of the server mode (RT) indicator Si hablilitar el parpadeo del indicador de modo del servidor (RT) - + Blin&k server mode indicator &Parpadeo del indicador de modo del servidor - + &JACK client/port aliases: Alias de cliente/puerto para &JACK: - + JACK client/port aliases display mode Modo de visualización de los alias cliente/puerto de JACK - + Default Predeterminado - + First Primero - + Second Segundo - + JACK client/port pretty-name (metadata) display mode - + Enable JA&CK client/port pretty-names (metadata) - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + + + + + Confirm server sh&utdown and/or restart + + + + Whether to show system tray message on main window close - + Sho&w system tray message on close - + Whether to start minimized to system tray Si iniciar minimizado en la bandeja del sistema - + Start minimi&zed to system tray Iniciar minimi&zado en la bandeja del sistema - - Confirm server sh&utdown - Confirmar apa&gado del servidor + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + - + Whether to enable ALSA Sequencer (MIDI) support on startup Si habilitar soporte para el Secuenciador ALSA (MIDI) al iniciar - + E&nable ALSA Sequencer support Habilitar Secue&nciador ALSA - + Whether to enable JACK D-Bus interface - + &Enable JACK D-Bus interface - + Buttons Botones - + Whether to hide the left button group on the main window Si esconder el grupo de botones a la izquierda de la ventana principal - + Hide main window &Left buttons Esconder botones de &la izquierda - + Whether to hide the right button group on the main window Si esconder el grupo de botones a la derecha de la ventana principal - + Hide main window &Right buttons Esconder botones de la de&recha - + Whether to hide the transport button group on the main window Si esconder el grupo de botones del transporte en la ventana principal - + Hide main window &Transport buttons Esconder los botones del &Transporte - + Whether to hide the text labels on the main window buttons Si esconder las etiquetas en los botones de la ventana principal - + Hide main window &button text labels Esconder etiquetas en los &botones - + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + Defaults Predeterminados - + &Base font size: Tamaño &básico de tipografías: - + Base application font size (pt.) Tamaño básico de tipografías para la aplicación (pt.) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface Habilitar la interfaz por D-Bus - + &Enable D-Bus interface &Habilitar la interfaz via D-Bus - + Number of microseconds to wait between engine processes (dummy) Número de microsegundos a esperar entre procesamientos (dummy) - + netone - + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to restrict to one single application instance (X11) Restringir una sola instancia de la aplicación (X11) - + Single application &instance Una sola &instancia - + &Name: &Nombre: - + The JACK Audio Connection Kit sound server name El nombre del servidor JACK Audio Connection Kit - + &Server Name Nombre del &Servidor - + Server path (command line prefix) Ruta del servidor (prefijo de la línea de comando) - + &Channels I/O: &Canales de E/S: - + &Latency I/O: &Latencia E/S: - + Start De&lay: Demora antes de&l inicio: - + secs segs - + 0 msecs 0 msegs - + Server Suffi&x: Sufijo del &Servidor: - + Server &Prefix: &Prefijo del servidor: - + Extra driver options (command line suffix) Opciones extra para el driver (sufijo de la línea de comandos) - + Whether to stop JACK audio server on application exit - + S&top JACK audio server on application exit @@ -3812,6 +4380,11 @@ Remover el plug seleccionado de la lista + + Socket + Socket + + &Client: &Cliente: @@ -3921,11 +4494,6 @@ (Ninguno) - - Socket - JACK Audio Connection Kit - Sockets - JACK Audio Connection Kit - - Edit currently selected plug Editar el plug seleccionado diff -Nru qjackctl-0.4.5/src/translations/qjackctl_fr.ts qjackctl-0.6.0/src/translations/qjackctl_fr.ts --- qjackctl-0.4.5/src/translations/qjackctl_fr.ts 2017-04-27 14:44:14.567761974 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_fr.ts 2019-10-17 07:45:45.966673223 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,77 +27,88 @@ QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Start JACK audio server immediately Démarrer immédiatement le serveur audio JACK - + Show help about command line options Montrer l'aide à propos des options en ligne de commande - + Show version information Montrer les informations de version - + Option -p requires an argument (preset). L'option -p nécessite un argument (préréglage). - + Usage: %1 [options] [command-and-args] Utilisation : %1 [options] [commandes-et-args] - + Options: Options : - + Set active patchbay definition file Choisir le fichier de définition de baie de brassage actif - + Set default JACK audio server name Choisir le nom du serveur audio JACK par défaut - + Option -a requires an argument (path). L'option -a nécessite un argument (chemin). - + Option -n requires an argument (name). L'option -n nécessite un argument (nom). - + Set default settings preset name Régler le nom du préréglage des paramètres par défaut - + %1 (%2 frames) %1 (%2 échantillons) + + + Move + Déplacer + + + + Rename + Renommer + qjackctlAboutForm - About QjackCtl - À propos de QjackCtl + About + À propos @@ -261,12 +272,12 @@ qjackctlConnect - + Warning Attention - + This will suspend sound processing from all client applications. @@ -280,11 +291,6 @@ qjackctlConnectionsForm - - Connections - JACK Audio Connection Kit - Connexions - Kit de Connexion Audio JACK - - Audio Audio @@ -332,6 +338,11 @@ Déconnecter tous les ports actuellement connectés + + Connections + Connexions + + @@ -365,287 +376,844 @@ MIDI - - Warning - Attention - - ALSA ALSA - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Les alias de préréglage ont été changés : - -« %1 » - -Voulez-vous enregistrer les changements ? - qjackctlConnectorView - + &Connect &Connecter - + Alt+C Connect Alt+C - + &Disconnect &Déconnecter - + Alt+D Disconnect Alt+D - + Disconnect &All &Tout déconnecter - + Alt+A Disconect All Alt+T - + &Refresh &Rafraîchir - + Alt+R Refresh Alt+R - qjackctlMainForm + qjackctlGraphCanvas + + + + Connect + Connecter + + + + Disconnect + Déconnecter + + + + qjackctlGraphForm + + + Graph + Graphe + + + + &Graph + &Graphe + + + + &Edit + É&dition + + + + &View + &Affichage + + + + &Zoom + &Zoom + + + + Co&lors + Cou&leurs + + + + S&ort + &Trier + + + + &Help + &Aide + + + + &Connect + &Connecter + + + + + Connect + Connecter + + + + Connect selected ports + Connecter les ports sélectionnés + + + + Ins + Ins + + + + &Disconnect + &Déconnecter + + + + + Disconnect + Déconnecter + + + + Disconnect selected ports + Déconnecter les ports sélectionnés + + + + Del + Sup + + + + Cl&ose + &Fermer + + + + + Close + Fermer + + + + Close this application window + Fermer cette fenêtre d'application + + + + Select &All + &Tout sélectionner + + + + + + Select All + Tout sélectionner + + + + Ctrl+A + Ctrl+A + + + + Select &None + Ne &rien sélectionner + + + + + + Select None + Ne rien sélectionner + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Select &Invert + Sélection &inversée + + + + + + Select Invert + Sélection inversée + + + + Ctrl+I + Ctrl+I + + + + &Rename... + &Renommer... + + + + Rename item + Renommer l'élément + + + + + Rename Item + Renommer l'élément + + + + &Menubar + Barre de &menu + + + + + Menubar + Barre de menu + + + + Show/hide the main program window menubar + Afficher/cacher la barre de menu de la fenêtre principale du programme + + + + Ctrl+M + Ctrl+M + + + + &Toolbar + Barre d'ou&tils + + + + + Toolbar + Barre d'outils + + + + Show/hide main program window file toolbar + Afficher/cacher la barre d''outils du fichier de la fenêtre principale du programme + + + + &Statusbar + Barre de &status + + + + + Statusbar + Barre de status + + + + Show/hide the main program window statusbar + Afficher/cacher la barre de status de la fenêtre principale du programme + + + + Text Beside &Icons + Texte derrière les &icônes + + + + + Text beside icons + Texte derrière les icônes + + + + Show/hide text beside icons + Afficher/cacher le texte derrière les icônes + + + + &Center + &Centre + + + + + Center + Centre + + + + Center view + Affichage centré + + + + &Refresh + &Rafraîchir + + + + + Refresh + Rafraîchir + + + + Refresh view + Rafraîchir l'affichage + + + + F5 + F5 + - - QjackCtl - QjackCtl + + Zoom &In + Zoom a&vant - - + + + + Zoom In + Zoom avant + + + + Ctrl++ + Ctrl++ + + + + Zoom &Out + Zoom a&rrière + + + + + + Zoom Out + Zoom arrière + + + + Ctrl+- + Ctrl+- + + + + Zoom &Fit + Zoom &ajusté + + + + + + Zoom Fit + Zoom ajusté + + + + Ctrl+0 + Ctrl+0 + + + + Zoom &Reset + &Réinitialiser le zoom + + + + + + Zoom Reset + Réinitialiser le zoom + + + + Ctrl+1 + Ctrl+1 + + + + &Zoom Range + Gamme de &zoom + + + + + + Zoom Range + Gamme de zoom + + + + JACK &Audio... + JACK &audio... + + + + + + JACK Audio color + Couleur JACK audio + + + + JACK &MIDI... + JACK &MIDI... + + + + JACK MIDI + JACK MIDI + + + + + JACK MIDI color + Couleur JACK MIDI + + + + &ALSA MIDI... + &ALSA MIDI... + + + + ALSA MIDI + ALSA MIDI + + + + + ALSA MIDI color + Couleur ALSA MIDI + + + + &Reset + &Réinitialiser + + + + + + Reset colors + Réinitialiser les couleurs + + + + Port &Name + &Nom de port + + + + Port name + Nom de port + + + + Sort by port name + Trier par nom de port + + + + Port &Title + &Titre de port + + + + Port title + Titre de port + + + + Sort by port title + Trier par titre de port + + + + Port &Index + &Index de port + + + + Port index + Index de port + + + + Sort by port index + Trier par index de port + + + + &Ascending + &Ascendant + + + + Ascending + Ascendant + + + + Ascending sort order + Ordre de tri ascendant + + + + &Descending + &Descendant + + + + Descending + Descendant + + + + Descending sort order + Ordre de tri descendant + + + + &About... + À &propos... + + + + About... + À propos... + + + + About + À propos + + + + Show information about this application program + Afficher les informations à propos de ce programme applicatif + + + + About &Qt... + À propos de &Qt... + + + + About Qt... + À propos de Qt... + + + + About Qt + À propos de Qt + + + + Show information about the Qt toolkit + Afficher les informations à propos de la boîte à outils Qt + + + + &Undo + &Défaire + + + + &Redo + &Refaire + + + + Undo last edit action + Défaire la dernière action d'édition + + + + Redo last edit action + Refaire la dernière action d'édition + + + + Zoom + Zoom + + + + Ready + Prêt + + + + Colors - %1 + Couleurs - %1 + + + + qjackctlMainForm + + + &Quit &Quitter - + Quit processing and exit Quitter le traitement et sortir - - + + &Start &Démarrer - + Start the JACK server Démarrer le serveur JACK - + S&top &Arrêter - + Stop the JACK server Arrêter le serveur JACK - + St&atus S&tatut - - + + Ab&out... À pr&opos… - + Show information about this application Montrer des informations à propos de cette application - + Show settings and options dialog Montrer la fenêtre d'options et de paramètres - - + + &Messages &Messages - + &Patchbay &Baie de brassage - + Show/hide the patchbay editor window Montrer/cacher la fenêtre de l'éditeur de baie de brassage - + &Connect &Connecter - - + + Set&up... R&églages… - - Show/hide the actual connections patchbay window - Montrer/cacher la fenêtre des connexions actuelles de la baie de brassage - - - + JACK server state État du serveur JACK - + JACK server mode Mode du serveur JACK - + Sample rate Fréquence d'échantillonnage - + Time display Horloge - + Transport state État du déplacement - + Transport BPM BPM du déplacement - + Transport time Horaire du déplacement - + Show/hide the session management window Montrer/cacher la fenêtre de gestion de session - + Show/hide the messages log/status window Montrer/cacher la fenêtre de journal/statut - + + Show/hide the graph window + Afficher/cacher la fenêtre de graphe + + + + Show/hide the connections window + Afficher/cacher la fenêtre des connexions + + + &Backward A&rrière - + Backward transport Déplacer en arrière - + &Forward A&vant - + Forward transport Déplacer en avant - - + + &Rewind Remb&obiner - + Rewind transport Rembobiner - - + + Pa&use Pa&use - + Stop transport rolling Arrêter le déplacement - - + + &Play &Lecture - + Start transport rolling Démarrer le déplacement - - - - - + + + + + + Warning Attention - + successfully avec succès - + with exit status=%1 avec statut de sortie=%1 - + Could not load preset "%1". Retrying with default. @@ -654,7 +1222,7 @@ Nouvel essai avec celui par défaut. - + Could not load default preset. Sorry. @@ -663,22 +1231,22 @@ Désolé. - + Startup script... Script de démarrage... - + Startup script terminated Script de démarrage terminé - + JACK is starting... JACK démarre... - + Could not start JACK. Sorry. @@ -687,360 +1255,395 @@ Désolé. - + JACK is stopping... JACK s'arrête... - + Shutdown script... Script d'extinction... - - - + + + + Don't ask this again Ne pas redemander - + Shutdown script terminated Script d'extinction terminé - + Post-shutdown script... Script post-extinction... - + Post-shutdown script terminated Script post-extinction terminé - + JACK was stopped JACK a été arrêté - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Les alias de préréglage ont été changés : + +"%1" + +Voulez-vous sauvegarder les changements ? + + + Error Erreur - + Transport time code Code temporel (Timecode) du déplacement - + Elapsed time since last reset Temps écoulé depuis la dernière réinitialisation - + Elapsed time since last XRUN Temps écoulé depuis la dernière désynchronisation (XRUN) - + Patchbay activated. Baie de brassage activée. - + Patchbay deactivated. Baie de brassage désactivée. - + Statistics reset. Réinitialisation des statistiques. - + msec ms - + XRUN callback (%1). Récupération désynchronisation (XRUN) (%1). - + Buffer size change (%1). Changement de la taille du tampon (%1). - + Shutdown notification. Notification d'extinction. - + + Freewheel started... + Roue libre démarrée… + + + + Freewheel exited. + Roue libre quittée. + + + checked vérifié - + connected connecté - + disconnected déconnecté - + failed échoué - + Server configuration saved to "%1". - Configuration du serveur enregistrée dans « %1 ». + Configuration du serveur sauvegardée dans "%1". - + Client activated. Client activé. - + Post-startup script... Script post-démarrage... - + Post-startup script terminated Script post-démarrage terminé - + Command line argument... Argument de ligne de commande... - + Command line argument started Argument de ligne de commande démarré - + Client deactivated. Client désactivé. - + Transport rewind. Déplacement en rembobinage. - + Transport backward. Déplacement en marche arrière. - - - + + + Starting Démarre - + Transport start. Déplacement démarré. - - + + Stopping S'arrête - + Transport stop. Déplacement arrêté. - + Transport forward. Déplacement en marche avant. - - + + Stopped Arrêté - + Yes Oui - + No Non - + + FW + RL + + + RT TR - + Rolling Défile - + Looping Boucle - + XRUN callback (%1 skipped). Récupération de désynchronisation (XRUN) (%1 sauté). - + Started Démarré - + Active Actif - + Activating Activation - + Inactive Inactif - - + + &Hide Cac&her - + Mi&nimize Mi&nimiser - - + + S&how M&ontrer - + Rest&ore R&estaurer - + &Stop &Arrêter - + &Reset Ré&initialiser - + &Presets &Préréglages - + &Versioning Gestion de ré&visions - + Re&fresh Ra&fraîchir - + &Connections &Connexions - + Patch&bay &Baie de brassage - + + + &Graph + &Graphe + + + &Transport Déplacemen&t - + Server settings will be only effective after restarting the JACK audio server. Les paramètres du serveur ne seront effectifs qu'après avoir redémarré le serveur audio JACK. - - + + Information Information - + Some settings will be only effective the next time you start this program. Certains paramètres ne seront effectifs qu'au prochain démarrage de ce programme. - + DSP Load Charge DSP - + XRUN Count (notifications) Décompte des désynchronisations (notifications XRUN) - + JACK connection graph change. - Changement du graphique des connexions JACK. + Changement du graphe des connexions JACK. - + ALSA connection graph change. - Changement du graphique des connexions ALSA. + Changement du graphe des connexions ALSA. - + JACK connection change. Changement des connexions JACK. - + ALSA connection change. Changement des connexions ALSA. - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -1049,17 +1652,17 @@ Voulez-vous arrêter le serveur audio JACK ? - + D-BUS: Service is available (%1 aka jackdbus). DBUS : le service est disponible (%1 soit jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). DBUS : le service n'est pas disponible (%1 soit jackdbus). - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -1070,12 +1673,12 @@ dans le menu contextuel de l'icône de la zone de notification système. - + Don't show this message again Ne pas montrer ce message à nouveau - + Could not start JACK. Maybe JACK audio server is already started. @@ -1084,12 +1687,12 @@ Peut-être que le serveur audio JACK est déjà démarré. - + D-BUS: JACK server is starting... DBUS : le serveur JACK démarre… - + D-BUS: JACK server could not be started. Sorry @@ -1098,7 +1701,7 @@ Désolé - + Some client audio applications are still active and connected. @@ -1109,12 +1712,12 @@ Voulez-vous arrêter le serveur audio JACK ? - + D-BUS: JACK server is stopping... DBUS : le serveur JACK s'arrête… - + D-BUS: JACK server could not be stopped. Sorry @@ -1123,37 +1726,37 @@ Désolé - + JACK was started with PID=%1. JACK a été démarré avec le PID=%1. - + D-BUS: JACK server was started (%1 aka jackdbus). DBUS : le serveur JACK a été démarré (%1 soit jackdbus). - + JACK is being forced... JACK est forcé… - + D-BUS: JACK server was stopped (%1 aka jackdbus). DBUS : le serveur JACK a été arrêté (%1 soit jackdbus). - + Transport BBT (bar.beat.ticks) Transport MTB (mesure temps battement) - + Patchbay reset. Réinitialisation de la baie de brassage. - + Could not load active patchbay definition. "%1" @@ -1166,92 +1769,92 @@ Désactivé. - + JACK has crashed. JACK a planté. - + JACK timed out. JACK n'a pas répondu à temps. - + JACK write error. Erreur d'écriture JACK. - + JACK read error. Erreur de lecture JACK. - + Unknown JACK error (%d). Erreur JACK inconnue (%d). - + JACK property change. Changement d'une propriété de JACK. - + Overall operation failed. L'opération a échoué. - + Invalid or unsupported option. Option invalide ou non prise en charge. - + Client name not unique. Nom de client non unique. - + Server is started. Le serveur est démarré. - + Unable to connect to server. Incapable de se connecter au serveur. - + Server communication error. Erreur de communication serveur. - + Client does not exist. Le client n'existe pas. - + Unable to load internal client. Incapable de charger le client interne. - + Unable to initialize client. Incapable d'initialiser le client. - + Unable to access shared memory. Incapable d'accéder à la mémoire partagée. - + Client protocol version mismatch. Mauvaise version du protocole client. - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1260,63 +1863,68 @@ Veuillez consulter la fenêtre des messages pour plus d'informations. - + %1 (%2%) %1 (%2%) - + %1 (%2%, %3 xruns) %1 (%2%, %3 xruns) - + %1 % %1 % - + %1 Hz %1 Hz - + %1 frames %1 échantillons - + %1 msec %1 ms - - + + S&ession S&ession - + &Load... &Charger… - + &Save... - &Enregistrer… + &Sauvegarder… - + Save and &Quit... - Enregistrer et &Quitter… + Sauvegarder et &Quitter… - + Save &Template... - Enregistrer &modèle… + Sauvegarder &modèle… + + + + Do you want to restart the JACK audio server? + Voulez-vous redémarrer le serveur audio JACK ? - + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1327,7 +1935,7 @@ (%4) - + D-BUS: ResetParameterValue('%1'): %2. @@ -1338,7 +1946,7 @@ (%3) - + D-BUS: GetParameterValue('%1'): %2. @@ -1349,7 +1957,7 @@ (%3) - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -1358,17 +1966,17 @@ La baie de brassage ALSA MIDI ne sera pas disponible. - + JACK active patchbay scan Balayage de la baie de brassage JACK active - + ALSA active patchbay scan Balayage de la baie de brassage ALSA active - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1387,8 +1995,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Messages / Statut - Kit de Connexion Audio JACK + Messages / Status + Messages / status @@ -1559,12 +2167,12 @@ qjackctlPatchbay - + Warning Attention - + This will disconnect all sockets. Are you sure? @@ -1576,11 +2184,6 @@ qjackctlPatchbayForm - - Patchbay - JACK Audio Connection Kit - Baie de brassage - Kit de Connexion Audio JACK - - &New &Nouveau @@ -1603,12 +2206,17 @@ &Save... - &Enregistrer… + &Sauvegarder… Save current patchbay profile - Enregistrer le profil actuel de la baie de brassage + Sauvegarder le profil actuel de la baie de brassage + + + + Patchbay + Baie de brassage @@ -1764,44 +2372,44 @@ Éditer les propriétés de la prise de sortie actuellement sélectionnée - + Warning Attention - - + + Error Erreur - + New Patchbay definition Nouvelle définition de baie de brassage - - + + Patchbay Definition files Fichiers de définition de baie de brassage - + Load Patchbay Definition Charger une définition de baie de brassage - + Save Patchbay Definition - Enregistrer la définition de baie de brassage + Sauvegarder la définition de baie de brassage - + active actif - + The patchbay definition has been changed: "%1" @@ -1811,20 +2419,20 @@ « %1 » -Voulez-vous enregistrer les changements ? +Voulez-vous sauvegarder les changements ? - + %1 [modified] %1 [modifié] - + Untitled%1 SansTitre%1 - + Could not load patchbay definition file: "%1" @@ -1833,16 +2441,16 @@ « %1 » - + Could not save patchbay definition file: "%1" - Impossible d'enregistrer le fichier de définition de baie de brassage : + Impossible de sauvegarder le fichier de définition de baie de brassage : « %1 » - + Create patchbay definition as a snapshot of all actual client connections? Prendre un cliché de toutes les connexions clientes actuelles @@ -1852,90 +2460,90 @@ qjackctlPatchbayView - + Add... Ajouter… - + Edit... Éditer… - + Copy... Copier… - + Remove Enlever - + Exclusive Exclusif - + (None) (Aucun) - + Forward Renvoi - + Move Up Vers le haut - + Move Down Vers le bas - + &Connect &Connecter - + Alt+C Connect Alt+C - + &Disconnect &Déconnecter - + Alt+D Disconnect Alt+D - + Disconnect &All &Tout déconnecter - + Alt+A Disconect All Alt+T - + &Refresh &Rafraîchir - + Alt+R Refresh Alt+R @@ -1945,8 +2553,8 @@ qjackctlSessionForm - Session - JACK Audio Connection Kit - Session - Kit de Connexion Audio JACK + Session + Session @@ -1955,7 +2563,7 @@ - + &Load... &Charger… @@ -1973,23 +2581,23 @@ Save session - Enregistrer session + Sauvegarder session Save session versioning - Enregistrer la session avec gestion de révisions + Sauvegarder la session avec gestion de révisions - + &Versioning Gestion de ré&visions - - + + Re&fresh Ra&fraîchir @@ -2020,7 +2628,7 @@ - + &Add &Ajouter @@ -2031,7 +2639,7 @@ - + &Edit Modifi&er @@ -2042,15 +2650,15 @@ - + Re&move Suppri&mer - + &Save... - &Enregistrer… + &Sauvegarder… @@ -2076,49 +2684,49 @@ &Save - &Enregistrer + &Sauvegarder - - + + Load Session Charger session - - + + Session directory Répertoire de session - + Save Session - Enregistrer session + Sauvegarder session - + and Quit et quitter - + Template Modèle - + &Clear &Effacer - - - + + + Warning Attention - + A session could not be found in this folder: "%1" @@ -2127,17 +2735,17 @@ « %1 » - + %1: loading session... %1 : chargement de la session… - + %1: load session %2. %1 : charger session %2. - + A session already exists in this folder: "%1" @@ -2150,7 +2758,7 @@ Êtes-vous certain de vouloir remlplacer la session existante ? - + This folder already exists and is not empty: "%1" @@ -2163,31 +2771,31 @@ Êtes-vous certain de vouloir remplacer le dossier existant ? - + %1: saving session... - %1 : enregistrement de la session… + %1 : sauvegarde de la session… - + %1: save session %2. - %1 : enregistrer session %2. + %1 : sauvegarder session %2. - + New Client Nouveau client - + Save and &Quit... - Enregistrer et &Quitter… + Sauvegarder et &Quitter… - + Save &Template... - Enregistrer &modèle… + Sauvegarder &modèle… @@ -2201,11 +2809,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Réglages - Kit de Connexion Audio JACK - - Settings Paramètres @@ -2217,18 +2820,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2239,12 +2843,12 @@ &Save - &Enregistrer + &Sauvegarder Save settings as current preset name - Enregistrer les paramètres sous le nom du préréglage actuel + Sauvegarder les paramètres sous le nom du préréglage actuel @@ -2257,14 +2861,22 @@ Effacer le préréglage des paramètres actuel - - jackstart - jackstart + + jackd + DO NOT TRANSLATE + - - jackd - jackd + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + @@ -2274,32 +2886,44 @@ dummy - factice + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - freebob - freebob + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2307,1067 +2931,987 @@ Paramètres - + Number of periods in the hardware buffer Nombre de périodes dans le tampon matériel - + Priorit&y: Pri&orité : - + &Frames/Period: &Échantillons/Période : - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Frames per period between process() calls Échantillons par période entre appels de process() - + Port Ma&ximum: Nombre de port ma&ximal : - + 21333 21333 - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + 192000 192000 - + Sample rate in frames per second Fréquence d'échantillonage en échantillons par seconde - + Scheduler priority when running realtime Priorité de l'ordonnanceur quand fonctionne en temps réel - + &Word Length: &Résolution (bit) : - + Periods/&Buffer: Périodes/&Tampon : - + Word length Résolution - + Maximum number of ports the JACK server can manage Nombre maximal de ports que peut gérer le serveur JACK - + &Wait (usec): &Attente (en µs) : - + Sample &Rate: &Fréquence d'échantillonnage (Hz) : - + &Timeout (msec): &Décompte (en ms) : - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + Set client timeout limit in milliseconds Régler le limite du décompte client en millisecondes - + &Realtime Temps &réel - + Use realtime scheduling Utiliser ordonnancement temps réel - + No Memory Loc&k P&as de verrouillage mémoire - + Do not attempt to lock memory, even if in realtime mode Ne pas essayer de verrouiller la mémoire même en mode temps-réel - + &Unlock Memory &Déverrouiller la mémoire - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Déverrouiller la mémoire des bibliothèques d'interface communes (GTK+, QT, FLTK, Wine) - + So&ft Mode Mode &logiciel - + Ignore xruns reported by the backend driver Ignorer les désynchronisations (XRUN) rapportées par le pilote principal - + &Monitor &Écoute de contrôle - + Provide output monitor ports Fournir des ports de sortie d'écoute de contrôle - + Force &16bit Forcer &16bit - + Force 16bit mode instead of failing over 32bit (default) Forcer mode 16bit au lieu d'échouer sur 32bit (par défaut) - - H/W M&onitor - Éc&oute de contrôle matérielle - - - - Enable hardware monitoring of capture ports - Activer l'écoute de contrôle matérielle des ports de capture - - - + H/&W Meter Mes&ure matérielle - + Enable hardware metering on cards that support it Activer la mesure matérielle sur les cartes qui la prennent en charge - + &Ignore H/W &Ignorer matériel - + Ignore hardware period/buffer size Ignore la taille des période/tampon matériels - + &Output Device: Périphérique de s&ortie : - + &Interface: &Interface : - + Maximum input audio hardware channels to allocate Nombre maximal de canaux d'entrée audio matériels à allouer - + &Audio: &Audio : - + Dit&her: Bruit de dispertion (dit&her) : - + External output latency (frames) Latence de sortie externe (en échantillons) - + &Input Device: Pér&iphérique d'entrée : - + Duplex Duplex - + Capture Only Capture seulement - + Playback Only Reproduction seulement - + Provide either audio capture, playback or both Fournir la capture audio, la reproduction audio ou les deux - - - + + + hw:0 hw:0 - + The PCM device name to use Nom du périphérique PCM à utiliser - - - - + + + + > > - + &Name: &Nom : - + The JACK Audio Connection Kit sound server name Le nom du serveur de son du Kit de Connexion Audio JACK - - - + + + /dev/dsp /dev/dsp - + Alternate input device for capture Périphérique d'entrée alternatif pour la capture - + Maximum output audio hardware channels to allocate Nombre maximal de canaux de sortie audio matériels à allouer - + Alternate output device for playback Périphérique de sortie alternatif pour la reproduction - + External input latency (frames) Latence d'entrée externe (en échantillons) - + None Aucun - + Rectangular Rectangulaire - + Shaped Sinusoïdal - + Triangular Triangulaire - + Set dither mode Régler le mode du bruit de dispersion (dither) - + Whether to give verbose output on messages Donner une sortie bavarde sur les messages - + Time in seconds that client is delayed after server startup Temps en secondes dont le client est retardé après le démarrage du serveur - + Latency: Latence : - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Latence de sortie en millisecondes calculée à partir des réglages de la période, de la fréquence d'échantillonnage et du tampon - + Options Options - + Scripting Scripts - + Execute script on Start&up: Exéc&uter un script au démarrage : - + Whether to execute a custom shell script before starting up the JACK audio server. Exécuter un script de commande personnalisé avant de démarrer le serveur audio JACK. - + Execute script after &Startup: Exécuter un &script après le démarrage : - + Whether to execute a custom shell script after starting up the JACK audio server. Exécuter un script de commande personnalisé après avoir démarré le serveur audio JACK. - + Execute script on Shut&down: Exécuter un script à l'extinctio&n : - + Whether to execute a custom shell script before shuting down the JACK audio server. Exécuter un script de commande personnalisé avant d'éteindre le serveur audio JACK. - + Command line to be executed before starting up the JACK audio server Ligne de commande à exécuter avant de démarrer le serveur audio JACK - - - - + + + + Scripting argument meta-symbols Méta-symboles des arguments de script - - - - - - + + + + + + ... - + Browse for script to be executed before starting up the JACK audio server Pointer sur le script à exécuter avant de démarrer le serveur audio JACK - + Command line to be executed after starting up the JACK audio server Ligne de commande à exécuter après avoir démarré le serveur audio JACK - + Browse for script to be executed after starting up the JACK audio server Pointer sur le script à exécuter après avoir démarré le serveur audio JACK - + Browse for script to be executed before shutting down the JACK audio server Pointer sur le script à exécuter avant d'éteindre le serveur audio JACK - + Command line to be executed before shutting down the JACK audio server Ligne de commande à exécuter avant d'éteindre le serveur audio JACK - + Execute script after Shu&tdown: Exécuter un script après l'ex&tinction : - + Whether to execute a custom shell script after shuting down the JACK audio server. Exécuter un script de commande personnalisé après avoir éteint le serveur audio JACK. - + Browse for script to be executed after shutting down the JACK audio server Pointer sur le script à exécuter après avoir éteint le serveur audio JACK - + Command line to be executed after shutting down the JACK audio server Ligne de commande à exécuter après avoir éteint le serveur audio JACK - + Statistics Statistiques - + &Capture standard output &Capturer la sortie standard - + Whether to capture standard output (stdout/stderr) into messages window Capturer la sortie standard (stdout/stderr) dans la fenêtre de messages - + &XRUN detection regex: Regex de détection des désynchronisations (&XRUN) : - + xrun of at least ([0-9|\.]+) msecs désynchronisation (XRUN) d'au moins ([0-9|\.]+) ms - + Regular expression used to detect XRUNs on server output messages Expression régulière utilisée pour détecter les désynchronisations (XRUN) dans les messages de sortie du serveur - + Connections Connexions - + 10 10 - + Patchbay definition file to be activated as connection persistence profile Fichier de définition de baie de brassage à activer comme profil de persistance de connexion - + Browse for a patchbay definition file to be activated Pointer sur un fichier de définition de baie de brassage à activer - + Activate &Patchbay persistence: Activer la &persistance de baie de brassage : - + Whether to activate a patchbay definition for connection persistence profile. Activer une définition de baie de brassage pour le profil de persistance de connexion. - + Display Affichage - + Time Display Horloge - - Time F&ormat: - F&ormat du temps : - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - - The general time format on display - Format général du temps affiché - - - + Server Suffi&x: Suffi&xe Serveur : - + Transport &Time Code Code &temporel (Timecode) du déplacement - + Transport &BBT (bar:beat.ticks) MT&B (mesure:temps.battement) du déplacement - + Elapsed time since last &Reset Temps écoulé depuis la dernière &réinitialisation - + Elapsed time since last &XRUN Temps écoulé depuis la dernière désynchronisation (&XRUN) - + Sample front panel normal display font Aperçu de l'affichage normal - + Sample big time display font Aperçu de la grande horloge - + Big Time display: Grande horloge : - - - - + + + + &Font... &Police… - + Select font for front panel normal display Sélectionner la police pour l'affichage normal - + Select font for big time display Sélectionner la police pour la grande horloge - + Normal display: Affichage normal : - - &Display shiny glass light effect - &Afficher un effet de vitre éclairée brillante - - - - Whether to enable a shiny glass light effect on the main display - Activer un effet de vitre éclairée brillante sur l'affichage principal - - - + Messages Window Fenêtre de messages - + Sample messages text font display Aperçu de la police du texte des messages - + Select font for the messages text display Sélectionner la police pour le texte des messages - + &Messages limit: Limite des &messages : - + Whether to keep a maximum number of lines in the messages window Garder un nombre maximal de lignes dans la fenêtre de messages - + 100 100 - + 250 250 - + 2500 2500 - + The maximum number of message lines to keep in view Nombre maximal de ligne de messages à garder visibles - + Connections Window Fenêtre de connexions - + Sample connections view font Aperçu de la police de la vue des connexions - + Select font for the connections view Sélectionner la police pour la vue des connexions - + &Icon size: Taille des &icônes : - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + The icon size for each item of the connections view Taille de l'icône pour chaque élément de la vue des connexions - + Ena&ble client/port aliases editing (rename) Activer l'é&dition (renommage) des aliases de client/port - + Whether to enable in-place client/port name editing (rename) Activer l'édition (renommage) en place des aliases de client/port - + E&nable client/port aliases Activer les aliases de client/p&ort - + Whether to enable client/port name aliases on the connections window Activer les aliases de client/port dans la fenêtre de connexions - - Draw connection and patchbay lines as Be&zier curves - Dessiner les lignes de connexion et de baie de brassage en courbes de Be&zier - - - - Whether to draw connection lines as cubic Bezier curves - Dessiner les lignes de connexion et de baie de brassage en courbes de Bezier cubiques - - - + Misc Divers - + Other Autres - + &Start JACK audio server on application startup &Démarrer le serveur audio JACK au démarrage de l'application - + Whether to start JACK audio server immediately on application startup Démarrer le serveur audio JACK immédiatement au démarrage de l'application - + &Confirm application close &Confirmer la fermeture de l'application - + Whether to ask for confirmation on application exit Demander une confirmation lors de la sortie de l'application - + &Keep child windows always on top &Garder les fenêtres filles au premier plan - + Whether to keep all child windows on top of the main window Garder les fenêtres filles au dessus de la fenêtre principale - + &Enable system tray icon Activ&er l'icône de notification système - + Whether to enable the system tray icon Activer l'icône de notification système - + S&ave JACK audio server configuration to: - &Enregistrer la configuration du serveur audio JACK dans : + &Sauvegarder la configuration du serveur audio JACK dans : - + Whether to save the JACK server command-line configuration into a local file (auto-start) - Enregistrer la configuration en ligne de commande du serveur JACK dans un fichier local (démarrage automatique) + Sauvegarder la configuration en ligne de commande du serveur JACK dans un fichier local (démarrage automatique) - + .jackdrc .jackdrc - + The server configuration local file name (auto-start) Nom du fichier local de configuration du serveur (démarrage automatique) - - C&onfigure as temporary server - C&onfigurer comme serveur temporaire - - - - Whether to exit once all clients have closed (auto-start) - Sortir dès que tous les clients ont fermé (démarrage automatique) - - - - Confirm server sh&utdown - Confirmer l'e&xtinction du serveur - - - - Whether to ask for confirmation on JACK audio server shutdown - Demander une confirmation à l'extinction du serveur audio JACK - - - + Buttons Boutons - + Hide main window &Left buttons Cacher les boutons de &gauche de la fenêtre principale - + Whether to hide the left button group on the main window Cacher le groupe de bouton de gauche sur la fenêtre principale - + Hide main window &Right buttons Cacher les boutons de &droite de la fenêtre principale - + Whether to hide the right button group on the main window Cacher le groupe de bouton de droite sur la fenêtre principale - + Hide main window &Transport buttons Cacher les boutons de &déplacement de la fenêtre principale - + Whether to hide the transport button group on the main window Cacher le groupe de bouton de déplacement sur la fenêtre principale - + Hide main window &button text labels Cacher le texte des &boutons de la fenêtre principale - + Whether to hide the text labels on the main window buttons Cacher le texte des boutons sur la fenêtre principale - - - + + + Warning Attention - + msec ms - + n/a n/a - + &Preset Name &Nom du préréglage - + &Server Name Nom du &serveur - + &Server Path &Chemin du serveur - + &Driver Pilot&e - + &Interface &Interface - + Sample &Rate &Fréquence d'échantillonnage - + &Frames/Period &Échantillons/Période - + Periods/&Buffer Périodes/&Tampon - + Startup Script Script de démarrage - + Post-Startup Script Script post-démarrage - + Shutdown Script Script d'extinction - + Post-Shutdown Script Script post-extinction - + Patchbay Definition files Fichiers de définition de baie de brassage - + Active Patchbay Definition Définition de baie de brassage à activer @@ -3377,54 +3921,46 @@ Le pilote d'interface audio à utiliser - + &Verbose messages Messages ba&vards - + MIDI Driv&er: Pilot&e MIDI : - + none aucun - + raw - brut + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + The ALSA MIDI backend driver to use Le pilote ALSA MIDI à utiliser - - jackdmp - jackdmp - - - - firewire - firewire - - - - - + + + plughw:0 plughw:0 - + Some settings have been changed: "%1" @@ -3434,10 +3970,10 @@ « %1 » -Voulez-vous enregistrer les changements ? +Voulez-vous sauvegarder les changements ? - + Delete preset: "%1" @@ -3450,7 +3986,7 @@ Êtes-vous certain ? - + Some settings have been changed. Do you want to apply the changes? @@ -3459,304 +3995,336 @@ Voulez-vous appliquer les changements ? - + Messages Log Journal des messages - + Log files Fichiers du journal - - sun - sun - - - + netone - netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - - - + + + /dev/audio /dev/audio - + &Channels: &Canaux : - + Server path (command line prefix) Chemin serveur (préfixe de ligne de commande) - + Maximum number of audio channels to allocate Nombre maximal de canaux audio à allouer - + &Channels I/O: &Canaux E/S : - + &Latency I/O: &Latence E/S : - + Logging Journalisation - + Messages log file Fichier de journal des messages - + Browse for the messages log file location Pointer sur l'emplacement du fichier de journal des messages - + Whether to activate a messages logging to file. Activer la journalisation des messages dans un fichier. - + Server &Prefix: &Préfixe Serveur : - + Extra driver options (command line suffix) Options supplémentaires du pilote (Suffixe de ligne de commande) - + Start De&lay: &Retard du démarrage : - + secs s - + 0 msecs 0 ms - + Please do not touch these settings unless you know what you are doing. Veuillez ne pas toucher ces réglages si vous ne savez pas ce que vous faites. - + &Messages log file: Fichier de journal des &messages : - + Whether to enable blinking (flashing) of the server mode (RT) indicator Activer le clignotement de l'indicateur de mode serveur (TR) - + Blin&k server mode indicator &Clignotement de l'indicateur de mode serveur - + &JACK client/port aliases: Alias de client/port &JACK : - + JACK client/port aliases display mode Mode d'affichage des alias de client/port JACK - + Default Par défaut - + First Premier - + Second Deuxième - + Whether to start minimized to system tray Démarrer minimisé dans la zone de notification système - + JACK client/port pretty-name (metadata) display mode Activer le mode d'affichage « joli-nom » (métadonnées) de client/port JACK - + Advanced Avancé - + Whether to reset all connections when a patchbay definition is activated. Réinitialiser ou non toutes les connexions quand une définition de baie de brassage est activée. - + &Reset all connections on patchbay activation &Réinitialiser toutes les connections à l'activation d'une baie de brassage - + Whether to issue a warning on active patchbay port disconnections. Afficher ou non une alerte lors des déconnexions de port faisant partie d'une baie de brassage active. - + &Warn on active patchbay disconnections A&lerter lors des déconnexions sur la baie de brassage active - + Enable JA&CK client/port pretty-names (metadata) Activer les « jolis-noms » (métadonnées) de client/port JA&CK - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + S'il faut demander la confirmation de l'arrêt et/ou du redémarrage du serveur audio de JACK + + + + Confirm server sh&utdown and/or restart + Confirmer l'arrêt et/ou redémarrage d&u serveur + + + Whether to show system tray message on main window close Afficher on non les messages de la zone de notification système lors de la fermeture de la fenêtre principale - + Sho&w system tray message on close A&fficher les messages de la zone de notification lors de la fermeture de la fenêtre - + Start minimi&zed to system tray Démarrer minimisé dans la zone de notifications (&z) - + Whether to restrict to one single application instance (X11) Restreindre à une seule instance de l'application (X11) - + Single application &instance &Instance d'application unique - + Whether to enable ALSA Sequencer (MIDI) support on startup Activer la prise en charge du séquenceur ALSA (MIDI) au démarrage - + + Setup + Configuration + + + + Whether to use server synchronous mode + Si l'on utilise le mode synchrone de serveur + + + + &Use server synchronous mode + &Utiliser le mode synchrone de serveur + + + E&nable ALSA Sequencer support Activer la prise e&n charge du séquenceur ALSA - + Whether to enable JACK D-Bus interface Activation ou non de l'interface JACK D-Bus - + &Enable JACK D-Bus interface Activ&er l'interface JACK D-Bus - + Whether to stop JACK audio server on application exit Arrêter le serveur audio JACK lors de la sortie de l'application - + S&top JACK audio server on application exit Arrêter le &serveur audio JACK lors de la sortie de l'application - + + Whether to replace Connections with Graph button on the main window + Si on remplace les connexions avec un bouton de graphe dans la fenêtre principale + + + + Replace Connections with &Graph button + Remplacer les connexions par un bouton de graphe + + + Defaults Par défaut - + &Base font size: Taille de police de &base : - + Base application font size (pt.) Taille de base de police de l'application (pt.) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface Activer l'interface D-Bus - + &Enable D-Bus interface Activ&er l'interface D-Bus - + Number of microseconds to wait between engine processes (dummy) Nombre de microsecondes à attendre entre les traitements du moteur (factice) @@ -3764,11 +4332,6 @@ qjackctlSocketForm - - Socket - JACK Audio Connection Kit - Prise - Kit de Connexion Audio JACK - - &Socket &Prise @@ -3834,6 +4397,11 @@ Enlever la fiche actuellement sélectionnée de la liste des prises + + Socket + Socket + + &Client: &Client : @@ -4028,12 +4596,12 @@ Output Sockets / Plugs - Prises/Fiches de Sortie + Prises/fiches de sortie Input Sockets / Plugs - Prises/Fiches d'Entrée + Prises/fiches d'entrée diff -Nru qjackctl-0.4.5/src/translations/qjackctl_it.ts qjackctl-0.6.0/src/translations/qjackctl_it.ts --- qjackctl-0.4.5/src/translations/qjackctl_it.ts 2017-04-27 14:44:14.568762474 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_it.ts 2019-10-17 07:45:45.967673223 +0000 @@ -6,95 +6,111 @@ Probing... - + Rilevamento... Please wait, PortAudio is probing audio hardware. - + Aspetta per favore, PortAudio sta rilevando l'hardware audio. Warning - Attenzione + Attenzione Audio hardware probing timed out. - + Rilevazione hardware audio fallita. QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Start JACK audio server immediately Avvia subito il server Jack - + Set active patchbay definition file Imposta il file Patchbay predefinito - + Show help about command line options Mostra la guida sulle opzioni della riga di comando - + Show version information Mostra info sulla versione - + Option -p requires an argument (preset). L'opzione -p richiede un argomento (preset). - + Usage: %1 [options] [command-and-args] Uso: %1 [opzioni] [comandi-e-argomenti] - + Options: Opzioni: - + Set default settings preset name Imposta il nome per le impostazioni predefinite - + Option -a requires an argument (path). L'opzione -a richiede un argomento (indirizzo). - + Set default JACK audio server name Salva il nome predefinito del server JACK - + Option -n requires an argument (name). L'opzione -n richiede un argomento (nome). - + %1 (%2 frames) + %1 (%2 fotogrammi) + + + + Move + + + + + Rename qjackctlAboutForm + + About + Info + + About Qt Info su QT @@ -112,12 +128,12 @@ Debugging option enabled. - Opzione di debbugging abilitata. + Opzione di debugging abilitata. System tray disabled. - Vassoio di sistema (system tray) non abilitata. + Area di notifica disabilitata. @@ -157,7 +173,7 @@ under the terms of the GNU General Public License version 2 or later. - nei termini dell GNU General Public License version 2 o superiore. + nei termini della Licenza Pubblica Generale GNU versione 2 o superiore. @@ -165,11 +181,6 @@ Supporto del MIDI di Jack disabilitato. - - About QjackCtl - Info su QjackCtl - - JACK Port aliases support disabled. Supporto per gli alias delle porte di Jack disabilitato. @@ -210,7 +221,7 @@ Re&name - Ri&omina + Ri&nomina @@ -266,17 +277,17 @@ qjackctlConnect - + Warning Attenzione - + This will suspend sound processing from all client applications. Are you sure? - Quest'azione sospenderà il processamento sonoro + Quest'azione sospenderà l'elaborazione del suono da tutte le applicazioni clients. Sei sicuro? @@ -285,11 +296,6 @@ qjackctlConnectionsForm - - Connections - JACK Audio Connection Kit - Connessioni - JACK Audio Connection Kit - - Audio Audio @@ -351,29 +357,16 @@ Aggiorna la situazione delle connessioni + + Connections + Connessioni + + MIDI MIDI - - Warning - Attenzione - - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Gli alias delle porte sono cambiati: - -"%1" - -Salvare i cambiamenti? - - ALSA ALSA @@ -396,48 +389,48 @@ qjackctlConnectorView - + &Connect &Connetti - + Disconnect &All Disconnetti &Tutto - + &Refresh &Aggiorna - + Alt+C Connect Connetti Alt+C - + &Disconnect &Disconnetti - + Alt+D Disconnect Disconnetti Alt+D - + Alt+A Disconect All Disconnetti Tutto Alt+A - + Alt+R Refresh Aggiorna @@ -445,167 +438,747 @@ + qjackctlGraphCanvas + + + + Connect + Connetti + + + + Disconnect + Disconnetti + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + Grafico + + + + &Edit + &Modifica + + + + &View + &Visualizza + + + + &Zoom + &Zoom + + + + Co&lors + + + + + S&ort + + + + + &Help + &Aiuto + + + + &Connect + &Connetti + + + + + Connect + Connetti + + + + Connect selected ports + Connetti le porte selezionate + + + + Ins + Ins + + + + &Disconnect + &Disconnetti + + + + + Disconnect + Disconnetti + + + + Disconnect selected ports + Disconnetti le porte selezionate + + + + Del + Canc + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + Seleziona &tutto + + + + + + Select All + Seleziona tutto + + + + Ctrl+A + Ctrl+A + + + + Select &None + Non selezionare &nulla + + + + + + Select None + Non selezionare nulla + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Select &Invert + Selezione &inversa + + + + + + Select Invert + Selezione inversa + + + + Ctrl+I + Ctrl+I + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + Barra del &menu + + + + + Menubar + Barra del menu + + + + Show/hide the main program window menubar + Mostra/nascondi la barra del menu della finestra principale del programma + + + + Ctrl+M + Ctrl+M + + + + &Toolbar + Barra degli s&trumenti + + + + + Toolbar + Barra degli strumenti + + + + Show/hide main program window file toolbar + Mostra/nascondi la barra degli strumenti della finestra principale del programma + + + + &Statusbar + Barra di &stato + + + + + Statusbar + Barra di stato + + + + Show/hide the main program window statusbar + Mostra/nascondi la barra di stato della finestra principale del programma + + + + Text Beside &Icons + Testo dietro le &icone + + + + + Text beside icons + Testo dietro le icone + + + + Show/hide text beside icons + Mostra/nasconi testo dietro le icone + + + + &Center + &Centro + + + + + Center + Centro + + + + Center view + Visualizzazione centrata + + + + &Refresh + &Aggiorna + + + + + Refresh + Aggiorna + + + + Refresh view + Aggiorna la visualizzazione + + + + F5 + F5 + + + + Zoom &In + &Ingrandisci + + + + + + Zoom In + Ingrandisci + + + + Ctrl++ + Ctrl++ + + + + Zoom &Out + Rim&picciolisci + + + + + + Zoom Out + Rimpicciolisci + + + + Ctrl+- + Ctrl+- + + + + Zoom &Fit + &Adatta zoom + + + + + + Zoom Fit + Adatta zoom + + + + Ctrl+0 + Ctrl+0 + + + + Zoom &Reset + &Ripristina zoom + + + + + + Zoom Reset + Ripristina zoom + + + + Ctrl+1 + Ctrl+1 + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + &Reset + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + &Info... + + + + About... + Info... + + + + About + Info + + + + Show information about this application program + Mostra informazioni a proposito di questo programma applicativo + + + + About &Qt... + Info su &Qt... + + + + About Qt... + Info su Qt... + + + + About Qt + Info su Qt + + + + Show information about the Qt toolkit + Mostra informazioni a proposito del kit di strumenti Qt + + + + &Undo + &Annulla + + + + &Redo + &Ripeti + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + + + + + Ready + Pronto + + + + Colors - %1 + + + + qjackctlMainForm - - + + &Quit &Esci - + Quit processing and exit Termina il processo sonoro ed esci - - + + &Start &Avvia - + Start the JACK server Avvia il server JACK - + S&top &Ferma - + Stop the JACK server Ferma il server JACK - + St&atus &Stato - - + + Ab&out... Inf&o su... - + Show information about this application Mostra le info riguardo questo software - + Show settings and options dialog Mostra la finestra delle impostazioni/opzioni - - + + &Messages &Messaggi - + Patch&bay Patch&bay - + Show/hide the patchbay editor window Mostra/nascondi la finestra del patchbay - + &Connect &Connetti - - Show/hide the actual connections patchbay window - Mostra/nascondi la finestra delle connessioni del Patchbay - - - + JACK server state Stato del server JACK - + JACK server mode Modalità del server JACK - + Sample rate Frequenza di Campionamento - + Time display Visuale del Tempo - + Transport state Stato del transport - + Transport BPM BPM del transport - + Transport time Tempo del transport - + + Show/hide the graph window + + + + + Show/hide the connections window + + + + Backward transport Retrocedi transport - + Forward transport Avanza transport - + Rewind transport Riavvolgi transport - + Stop transport rolling Ferma il transport - + Start transport rolling Fai partire il transport - - - - - + + + + + + Warning Attenzione - + successfully con successo - + with exit status=%1 con stato di uscita %1 - + Could not load preset "%1". Retrying with default. @@ -614,7 +1187,7 @@ Provo con il predefinito. - + Could not load default preset. Sorry. @@ -623,22 +1196,22 @@ Mi dispiace. - + Startup script... Script di inizio... - + Startup script terminated Script di inizio terminato - + JACK is starting... JACK sta partendo... - + Could not start JACK. Sorry. @@ -647,12 +1220,12 @@ Mi dispiace. - + JACK is stopping... JACK si sta arrestando... - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -663,54 +1236,55 @@ nel menù del tasto destro sull icona nel vassoio. - + Shutdown script... Script d'arresto... - + Shutdown script terminated Script d'arresto terminato - + JACK was stopped JACK è stato fermato - + Post-shutdown script... Script di post - arresto... - + D-BUS: Service is available (%1 aka jackdbus). D-BUS: Servizio disponibile (%1 aka jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). D-BUS: Servizio non disponibile (%1 aka jackdbus). - + Don't show this message again - + Non mostrare più questo messaggio - - - + + + + Don't ask this again - + Non chiederlo di nuovo - + D-BUS: JACK server is starting... D-BUS: JACK si sta avviando... - + D-BUS: JACK server could not be started. Sorry @@ -719,12 +1293,12 @@ Mi dispiace - + D-BUS: JACK server is stopping... D-BUS: JACK si sta arrestando... - + D-BUS: JACK server could not be stopped. Sorry @@ -733,275 +1307,308 @@ Mi dispiace - + Post-shutdown script terminated Script di post - arresto terminato - + D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: JACK è stato avviato (%1 aka jackdbus). - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Gli alias delle porte sono cambiati: + +"%1" + +Salvare i cambiamenti? + + + D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: JACK è stato fermato (%1 aka jackdbus). - + Error Errore - + Transport time code Codice temporale del transport - + Elapsed time since last reset Tempo trascorso dall'ultimo reset - + Elapsed time since last XRUN Tempo trascorso dall'ultimo XRUN - + Patchbay activated. Patchbay attivato. - + Patchbay deactivated. Patchbay disattivato. - + Statistics reset. Resetta le statistiche. - + msec msec - + XRUN callback (%1). XRUN callback (%1). - + Buffer size change (%1). Cambio della dimensione del buffer (%1). - + Shutdown notification. Notifica dell'arresto. - - JACK property change. + + Freewheel started... + + + + + Freewheel exited. - + + JACK property change. + Cambio di una proprietà di JACK. + + + checked verificato - + connected connesso - + disconnected disconnesso - + failed fallito - + Server configuration saved to "%1". Configurazione del server salvata in "%1". - + Client activated. Client attivato. - + Post-startup script... Script post - avvio... - + Post-startup script terminated Script di post - avvio terminato - + Command line argument... Argomento della linea di comando... - + Command line argument started Argomento della linea di comando eseguita - + Client deactivated. Client disattivato. - + Transport rewind. Riavvorgere il transport. - + Transport backward. Retrocedere il transport. - - - + + + Starting Avvio - + Transport start. Transport partito. - - + + Stopping Arresto - + Transport stop. Transport arrestato. - + Transport forward. Avanzare il transport. - - + + Stopped Arrestato - + Yes Si - + No No - + + FW + + + + RT RT - + Rolling Riproduzione - + Looping Looping - + XRUN callback (%1 skipped). XRUN callback (%1 omitidos). - + Started Avviato - + Active Attivo - + Activating Attivazione - + Inactive Inattivo - - + + &Hide &Nascondi - + Mi&nimize Mi&nimizza - - + + S&how &Mostra - + Rest&ore &Ristabilisci - + &Stop &Ferma - + &Reset &Reset - + &Connections &Connessioni - + Server settings will be only effective after restarting the JACK audio server. I cambiamenti diventeranno effettivi solo al riavvio di JACK. - + + Do you want to restart the JACK audio server? + + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1012,7 +1619,7 @@ (%4) - + D-BUS: ResetParameterValue('%1'): %2. @@ -1023,7 +1630,7 @@ (%3) - + D-BUS: GetParameterValue('%1'): %2. @@ -1034,20 +1641,20 @@ (%3) - - + + Information Informazioni - + Some settings will be only effective the next time you start this program. Alcune modifiche saranno effettive solo al prossimo avvio dell'applicazione. - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -1056,7 +1663,7 @@ Il Patchbay MIDI non sarà disponibile. - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -1065,7 +1672,7 @@ Vuoi arrestare il server JACK? - + Could not start JACK. Maybe JACK audio server is already started. @@ -1074,7 +1681,7 @@ Forse il server JACK è già avviato. - + Some client audio applications are still active and connected. @@ -1085,77 +1692,77 @@ Vuoi arrestare il server JACK? - + JACK was started with PID=%1. JACK è stato avviato con PID=%1. - + JACK is being forced... JACK viene forzato... - + Patchbay reset. - + Ripristino della patchbay. - + JACK connection graph change. Grafico delle connessioni di JACK modificato. - + JACK has crashed. JACK ha crashato. - + JACK timed out. Tempo d'attesa per JACK terminato. - + JACK write error. Errore di scrittura di JACK. - + JACK read error. Errore di lettura di JACK. - + Unknown JACK error (%d). Errore di JACK sconosciuto (%d). - + ALSA connection graph change. Cambiamento nel grafico delle connessioni di ALSA. - + JACK active patchbay scan Scansione del patchbay per JACK activo - + ALSA active patchbay scan Scansione del patchbay per ALSA attivo - + JACK connection change. Connessioni di JACK cambiate. - + ALSA connection change. Connessioni di ALSA cambiate. - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1170,62 +1777,62 @@ Vuoi rimuovere questa connessione dal Patchbay? - + Overall operation failed. Operazione fallita. - + Invalid or unsupported option. Opzione non valida o non supportata. - + Client name not unique. Il nome del client non è unico. - + Server is started. Il server JACK è stato avviato. - + Unable to connect to server. Impossibile connettersi al server JACK. - + Server communication error. Errore di comunicazione col server JACK. - + Client does not exist. Il client non esiste. - + Unable to load internal client. Impossibile caricare il client interno. - + Unable to initialize client. Impossibile inizializzare il client. - + Unable to access shared memory. Impossibile accedere alla memoria condivisa. - + Client protocol version mismatch. La versione del protocollo del client è incongruente. - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1234,132 +1841,133 @@ Controlla la finestra dei messaggi per maggiori informazioni. - + %1 (%2%) %1 (%2%) - + %1 % %1 % - + %1 Hz %1 Hz - + %1 frames %1 fotogrammi - + %1 msec %1 msec - + &Presets &Presets - + + + &Graph + &Grafico + + + &Transport &Transport - - + + &Rewind &Riavvolgi - - + + &Play Ri&produci - - + + Pa&use Pa&usa - - QjackCtl - QjackCtl - - - + &Patchbay &Patchbay - + DSP Load Carico DSP - + XRUN Count (notifications) Conteggio XRUN (notifiche) - + &Backward R&etrocedi - + &Forward &Avanza - - + + Set&up... Imp&ostazioni... - - + + S&ession S&essioni - + &Load... &Apri... - + &Save... &Salva... - + Save and &Quit... Salva ed E&sci... - + Save &Template... Salva &Modello... - + Show/hide the session management window Mostra/Nascondi la finestra di gestione delle sessioni - + Show/hide the messages log/status window Mostra/Nascondi la finestra di stato/log - + Could not load active patchbay definition. "%1" @@ -1372,32 +1980,32 @@ Disabilitato. - + &Versioning &Versione - + Re&fresh Agg&iorna - + %1 (%2%, %3 xruns) %1 (%2%, %3 xruns) - + Transport BBT (bar.beat.ticks) - + BBT del Transport (battito:pulsazione:frazioni) qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Messaggi / Stato - JACK Audio Connection Kit + Messages / Status + @@ -1568,12 +2176,12 @@ qjackctlPatchbay - + Warning Attenzione - + This will disconnect all sockets. Are you sure? @@ -1585,11 +2193,6 @@ qjackctlPatchbayForm - - Patchbay - JACK Audio Connection Kit - Patchbay - JACK Audio Connection Kit - - &New &Nuovo @@ -1738,6 +2341,11 @@ Duplica (copia) la porta d'uscita selezionata + + Patchbay + + + Remove currently selected input socket Rimuovi la porta d'entrata selezionata @@ -1758,38 +2366,38 @@ Modifica la porta d'uscita selezionata - + Warning Attenzione - + active attivo - + New Patchbay definition Nuova definizione del Patchbay - - + + Patchbay Definition files Files di definizione del Patchbay - + Load Patchbay Definition Carica definizione del Patchbay - + Save Patchbay Definition Salva definizione del Patchbay - + The patchbay definition has been changed: "%1" @@ -1802,23 +2410,23 @@ Vuoi salvare le modifiche? - + %1 [modified] %1 [modificato] - + Untitled%1 Senza titolo%1 - - + + Error Errore - + Could not load patchbay definition file: "%1" @@ -1827,14 +2435,14 @@ "%1" - + Could not save patchbay definition file: "%1" Non riesco a salvare il file di definizioni del Patchbay: "%1" - + Create patchbay definition as a snapshot of all actual client connections? Creo un Patchbay partendo @@ -1859,92 +2467,92 @@ qjackctlPatchbayView - + Add... Aggiungi... - + Edit... Modifica... - + Copy... Copia... - + Remove Rimuovi - + Exclusive Esclusiva - + Move Up Porta su - + Move Down Porta giù - + &Connect &Connetti - + &Disconnect &Disconnetti - + Disconnect &All Desconnetti &Tutto - + &Refresh &Aggiorna - + Alt+R Refresh Alt+A - + Forward Avanza - + (None) (Nessuno) - + Alt+C Connect Connetti Alt+C - + Alt+D Disconnect Disconnetti Alt+D - + Alt+A Disconect All Disconnetti Tutto @@ -1954,18 +2562,13 @@ qjackctlSessionForm - - Session - JACK Audio Connection Kit - Sessione - JACK Audio Connection Kit - - Load session Carica Sessione - + &Load... &Apri... @@ -1987,7 +2590,7 @@ - + &Save... &Salva... @@ -2007,46 +2610,46 @@ Comando - - + + Load Session Carica Sessione - - + + Session directory Cartella della Sessione - + Save Session Salva Sessione - + and Quit ed Esci - + Template Modello - + &Clear Pulis&ci - - - + + + Warning Attenzione - + A session could not be found in this folder: "%1" @@ -2055,17 +2658,17 @@ "%1" - + %1: loading session... %1: carico la sessione... - + %1: load session %2. %1: carico la sessione %2. - + A session already exists in this folder: "%1" @@ -2078,7 +2681,7 @@ Sovrascivo la Sessione? - + This folder already exists and is not empty: "%1" @@ -2091,12 +2694,12 @@ Sovrascrivo la cartella? - + %1: saving session... %1: salvo la sessione... - + %1: save session %2. %1: salvo la sessione %2. @@ -2107,17 +2710,22 @@ - + Save and &Quit... Salva ed Es&ci... - + Save &Template... Salva &Modello... + + Session + + + &Save @@ -2130,74 +2738,74 @@ - + &Versioning &Versione - - + + Re&fresh Agg&iorna Session clients / connections - + Clients / connessioni della sessione Infra-clients / commands - + Comandi / infra-clients Infra-client - + Infra-client Infra-command - + Infra-comando Add infra-client - + Aggiungi un infra-client - + &Add - + &Aggiungi Edit infra-client - + Modifica un infra-client - + &Edit - &Modifica + &Modifica Remove infra-client - + Rimuovi un infra-client - + Re&move - + &Rimuovi - + New Client - + Nuovo client @@ -2205,17 +2813,12 @@ Infra-command - + Infra-comando qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Configurazione - JACK Audio Connection Kit - - Settings Impostazioni @@ -2227,18 +2830,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2267,14 +2871,22 @@ Elimina il preset con le impostazioni correnti - - jackstart - jackstart + + jackd + DO NOT TRANSLATE + - - jackd - jackd + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + @@ -2284,27 +2896,44 @@ dummy - dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2312,977 +2941,902 @@ Parametri - + Number of periods in the hardware buffer Numero di periodi nel buffer hardware - + Priorit&y: &Priorità: - + &Frames/Period: &Fotogrammi/Periodo: - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Frames per period between process() calls Fotogrammi per periodo tra chiamate a process() - + Port Ma&ximum: Numero mas&simo di porte: - + 21333 21333 - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + Sample rate in frames per second Frequenza di campionamento in fotogrammi al secondo - + Scheduler priority when running realtime Priorità dello scheduler quando eseguito in realtime - + &Word Length: &Lunghezza delle parole: - + Periods/&Buffer: Periodi/&Buffer: - + Word length Lunghezza delle parole - + Maximum number of ports the JACK server can manage Numero massimo di porte che JACK può gestire - + &Wait (usec): &Attesa massima (microsec): - + Sample &Rate: &Campionamento: - + &Timeout (msec): &Attesa massima (msec): - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + Set client timeout limit in milliseconds Imposta il limite di tempo di attesa per il client, in msec - + &Realtime Tempo &Reale - + Use realtime scheduling Usa priorità dello scheduling in tempo reale - + No Memory Loc&k Non b&loccare memoria - + Do not attempt to lock memory, even if in realtime mode Non bloccare la memoria, anche in tempo reale - + &Unlock Memory &Sblocca Memoria - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Sblocca la memoria per i toolkit classici (GTK+, QT, FLTK, Wine) - + So&ft Mode Modo So&ft - + Ignore xruns reported by the backend driver Ignora gli XRUN provenienti dal driver - + &Monitor &Monitor - + Provide output monitor ports Attiva porte d'uscita per il monitor - + Force &16bit Forza &16bit - + Force 16bit mode instead of failing over 32bit (default) Forza il modo 16bit invece del predefinito 32bit - - H/W M&onitor - M&onitor Hardware - - - - Enable hardware monitoring of capture ports - Abilita l'hardware monitor delle porte d'ingresso - - - + H/&W Meter Meter Hard&ware - + Enable hardware metering on cards that support it Abilita il metering per le schede che lo supportano - + &Ignore H/W &Ignora HardWare - + Ignore hardware period/buffer size Ignora la dimensione periodo/buffer dell'hardware - + &Output Device: Dispositiv&o d'uscita: - + &Interface: &Interfaccia: - + Maximum input audio hardware channels to allocate Numero massimo di canali hardware d'entrata - + &Audio: A&udio: - + Dit&her: Dit&her: - + External output latency (frames) Latenza esterna d'uscita (fotogrammi) - + &Input Device: D&ispositivo d'entrata: - + Duplex Duplex - + Capture Only Solo Cattura - + Playback Only Solo Riproduzione - + Provide either audio capture, playback or both Scegli se abilitare l'audio in cattura, in registrazione o entrambi - - - + + + hw:0 hw:0 - + The PCM device name to use Nome del dispositivo PCM da usare - - - - + + + + > > - - - + + + /dev/dsp - + Alternate input device for capture Seleziona il dispositivo alternativo d'entrata per la registrazione - + Maximum output audio hardware channels to allocate Numero massimo di canali hardware d'uscita - + Alternate output device for playback Seleziona il dispositivo alternativo d'uscita per la riproduzione - + External input latency (frames) Latenza esterna d'entrata (fotogrammi) - + None Nessuno - + Rectangular Rettangolare - + Shaped Modellato - + Triangular Triangolare - + Set dither mode Scegli il modo del dither - + Whether to give verbose output on messages Verbosità nei messaggi d'uscita - + Time in seconds that client is delayed after server startup Tempo di ritardo nell'avvio del server JACK (in secondi) - + Latency: Latenza: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Latenza d'uscita in millisecondi, calcolata in base al rapporto fra periodo, fotogrammi e buffer - + Options Opzioni - + Scripting Scripting - + Execute script on Start&up: Esegui script prima dell'Avvi&o: - + Whether to execute a custom shell script before starting up the JACK audio server. Eseguire uno script prima dell'avvio del server JACK. - + Execute script after &Startup: Esegui script dopo l'Avv&io: - + Whether to execute a custom shell script after starting up the JACK audio server. Eseguire uno script dopo l'avvio del server JACK. - + Execute script on Shut&down: Esegui script prima dell'Ar&resto: - + Whether to execute a custom shell script before shuting down the JACK audio server. Eseguire uno script prima dell'arresto del server JACK. - + Command line to be executed before starting up the JACK audio server Comando da eseguire prima dell'avvio di JACK - - - - + + + + Scripting argument meta-symbols Meta simboli utilizzabili negli script - - - - - - + + + + + + ... ... - + Browse for script to be executed before starting up the JACK audio server Cerca uno script da eseguire prima dell'avvio del server JACK - + Command line to be executed after starting up the JACK audio server Comando da eseguire dopo l'avvio di JACK - + Browse for script to be executed after starting up the JACK audio server Cerca uno script da eseguire dopo l'avvio del server JACK - + Browse for script to be executed before shutting down the JACK audio server Cerca uno script da eseguire prima dell'arresto del server JACK - + Command line to be executed before shutting down the JACK audio server Comando da eseguire prima dell'arresto di JACK - + Execute script after Shu&tdown: Esegui script dopo l'Ar&resto: - + Whether to execute a custom shell script after shuting down the JACK audio server. Eseguire uno script dopo l'arresto di JACK. - + Browse for script to be executed after shutting down the JACK audio server Cerca uno script da eseguire dopo l'arresto del server JACK - + Command line to be executed after shutting down the JACK audio server Comando da eseguire dopo l'arresto di JACK - + Statistics Statistiche - + &Capture standard output &Cattura l'output standard dei comandi - + Whether to capture standard output (stdout/stderr) into messages window Catturare l'output standard nella finestra dei messaggi - + &XRUN detection regex: Espressione regolare per individuare gli &XRUN: - + xrun of at least ([0-9|\.]+) msecs XRUN di ([0-9|\.]+) msecs al massimo - + Regular expression used to detect XRUNs on server output messages Espressione regolare usata per il riconoscimento degli XRUN - + Connections Connessioni - + 10 10 - + Patchbay definition file to be activated as connection persistence profile Attiva il Patchbay in maniera persistente - + Browse for a patchbay definition file to be activated Sfoglia i file per caricare un Patchbay salvato - + Activate &Patchbay persistence: Attiva un &Patchbay persistente: - + Whether to activate a patchbay definition for connection persistence profile. Attiva un Patchbay predefinito per effettuare connessioni persistenti. - + Display Display - + Time Display Display del tempo - - Time F&ormat: - F&ormato del tempo: - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - - The general time format on display - Il formato temporale generico da mostrare - - - + Transport &Time Code Codice temporale del &Transport - + Transport &BBT (bar:beat.ticks) &BBT del Transport (battuta:pulsazione:frazioni) - + Elapsed time since last &Reset Tempo trascorso dall'ultimo &Reset - + Elapsed time since last &XRUN Tempo trascorso dall'ultimo &XRUN - + Sample front panel normal display font Carattere normale da mostrare nel display frontale - + Sample big time display font Carattere grande da mostrare nel display frontale - + Big Time display: Display grande del tempo: - - - - + + + + &Font... Cara&ttere... - + Select font for front panel normal display Tipo di carattere normale da mostrare nel display frontale - + Select font for big time display Tipo di carattere grande da mostrare nel display frontale - + Normal display: Display normale: - - &Display shiny glass light effect - Usare effetto &di riflesso di vetro - - - - Whether to enable a shiny glass light effect on the main display - Abilita l'effetto di riflesso di vetro sul display principale - - - + Messages Window Finestra dei messaggi - + Sample messages text font display Tipo di carattere per la finestra dei messaggi - + Select font for the messages text display Seleziona il tipo di carattere per la finestra dei messaggi - + &Messages limit: Limite dei &Messaggi: - + Whether to keep a maximum number of lines in the messages window Se limitare ad un numero massimo di righe nella finestra dei messaggi - + 100 100 - + 250 250 - + 2500 2500 - + The maximum number of message lines to keep in view Il numero massimo di messaggi da mostrare a vista - + Please do not touch these settings unless you know what you are doing. - + Si prega di non toccare queste impostazioni se non sai cosa stai facendo. - + Connections Window Finestra delle Connessioni - + Sample connections view font Tipo di carattere per la finestra delle connessioni - + Select font for the connections view Seleziona il tipo di carattere per la finestra delle connessioni - + &Icon size: Dimensione delle &Icone: - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + The icon size for each item of the connections view Dimensione delle icone per gli elementi nella finestra delle connessioni - + Ena&ble client/port aliases editing (rename) A&bilita la modifica degli alias di clients/porte (rinomina) - + Whether to enable in-place client/port name editing (rename) Permetti la modifica veloce dei nomi dei clients/porte - + E&nable client/port aliases Abilita gli alias per &porte/clients - + Whether to enable client/port name aliases on the connections window Permetti gli alias per i nomi dei clients/porte - - Draw connection and patchbay lines as Be&zier curves - Disegna le connessioni in forma di curve Be&zier - - - - Whether to draw connection lines as cubic Bezier curves - Permetti il disegno delle connessioni in forma di curve cubiche Bezier - - - + Misc Varie - + Other Altro - + &Start JACK audio server on application startup Avvia il &server JACK all'avvio dell'applicazione - + Whether to start JACK audio server immediately on application startup Avvia immediatamente il server JACK all'avvio dell'applicazione - + &Confirm application close &Chiedi conferma alla chiusura - + Whether to ask for confirmation on application exit Chiedi conferma prima di chiudere l'applicazione - + &Keep child windows always on top Mantieni le finestre fi&glie sempre sopra le altre - + Whether to keep all child windows on top of the main window Scegli se mantenere le finestre figlie sempre sopra le altre - + &Enable system tray icon Abilita l'icona nel vassoio di sist&ema - + Whether to enable the system tray icon Scegli se visualizzare un'icona sul vassoio di sistema (system tray) - + S&ave JACK audio server configuration to: S&alva la configurazione di JACK in: - + Whether to save the JACK server command-line configuration into a local file (auto-start) Scegli se salvare la configurazione del server JACK in un file locale (all'avvio) - + .jackdrc .jackdrc - + The server configuration local file name (auto-start) Configurazione locale del server (all'avvio) - - C&onfigure as temporary server - C&onfigura come server temporaneo - - - - Whether to exit once all clients have closed (auto-start) - Scegli se uscire dopo che tutti i clients sono disconnessi (all'avvio) - - - - Whether to ask for confirmation on JACK audio server shutdown - Scegli di chiedere conferma alla chiusura del server JACK - - - - - + + + Warning Attenzione - + msec msec - + n/a n/d - + &Preset Name Nome del &Preset - + &Server Path Indirizzo del &Server - + &Driver &Driver - + &Interface &Interfaccia - + Sample &Rate &Frequenza di campionamento - + &Frames/Period &Fotogrammi/Periodo - + Periods/&Buffer Periodi/&Buffer - + Patchbay Definition files Files di definizione del Patchbay - + Some settings have been changed: "%1" @@ -3295,7 +3849,7 @@ Vuoi salvarle? - + Delete preset: "%1" @@ -3308,42 +3862,42 @@ Sei sicuro? - + Startup Script Script all'avvio - + Post-Startup Script Script dopo l'avvio - + Shutdown Script Script all'arresto - + Post-Shutdown Script Script dopo l'arresto - + Active Patchbay Definition Definizione attiva del Patchbay - + Messages Log Log dei messaggi - + Log files Files di log - + Some settings have been changed. Do you want to apply the changes? @@ -3352,423 +3906,437 @@ Vuoi applicare i cambiamenti? - - jackdmp - jackdmp - - The audio backend driver interface to use Driver dell'interfaccia audio da usare - - sun - sun - - - - freebob - freebob - - - - firewire - firewire - - - + MIDI Driv&er: Driv&er MIDI: - + The ALSA MIDI backend driver to use Driver MIDI di ALSA da usare - + none nessuno - + raw - raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + &Verbose messages &Verbosità nei messaggi - - - + + + plughw:0 plughw:0 - - - + + + /dev/audio /dev/audio - + &Channels: &Canali: - + 192000 192000 - + Maximum number of audio channels to allocate Massimo numero di canali audio allocabili - + Logging Logging - + Messages log file File di log dei messaggi - + Browse for the messages log file location Scegli il file in cui loggare i messaggi - + Whether to activate a messages logging to file. Scegli se attivare il logging dei messaggi su file. - + Advanced - + Avanzate - + Whether to reset all connections when a patchbay definition is activated. - + Ripristinare o no tutte le connessioni quando una definizione di patchbay è attivata. - + &Reset all connections on patchbay activation - + &Ripristina tutte le connessioni all'attivazione di una patchbay - + Whether to issue a warning on active patchbay port disconnections. - + Mostrare o no un avviso sulle disconnessioni di porte attive di una patchbay - + &Warn on active patchbay disconnections - + &Avvisa sulle disconnessioni di una patchbay attiva - + &Messages log file: File log dei &messaggi: - + Whether to enable blinking (flashing) of the server mode (RT) indicator Scegli se abilitare l'indicazione intermittente della modalità del server (RT) - + Blin&k server mode indicator Intermittenza nell'indicatore modo ser&ver - + &JACK client/port aliases: Alias clients/porte di &JACK: - + JACK client/port aliases display mode Modalità di visualizzazione degli alias di clients/porte - + Default Predefinito - + First Primo - + Second Secondo - + JACK client/port pretty-name (metadata) display mode - + Modo di visualizzazione « bel-nome » (metadati) di client/porta JACK - + Enable JA&CK client/port pretty-names (metadata) + Attiva i «bei-nomi» (metadati) di client/porta JA&CK + + + + Whether to ask for confirmation on JACK audio server shutdown and/or restart - - Whether to show system tray message on main window close + + Confirm server sh&utdown and/or restart - + + Whether to show system tray message on main window close + Mostrare o no il messaggio dell'area di notifica al momento della chiusura della finestra principale + + + Sho&w system tray message on close - + &Mostrare il messaggio dell'area di notifica alla chiusura - + Whether to start minimized to system tray Avvia l'applicazione minimizzata come icona nel vassoio di sistema (system tray) - + Start minimi&zed to system tray Avvia minimi&zzato nel vassoio di sistema - - Confirm server sh&utdown - Co&nferma l'arresto del server + + Setup + - + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + + + + Whether to enable ALSA Sequencer (MIDI) support on startup Scegli se abilitare il sequencer ALSA (MIDI) all'avvio - + E&nable ALSA Sequencer support Abilita se&quencer ALSA - + Whether to enable JACK D-Bus interface - + Attivare o no l'interfaccia JACK D-Bus - + &Enable JACK D-Bus interface - + &Attiva l'interfaccia JACK D-Bus - + Buttons Pulsanti - + Whether to hide the left button group on the main window Scegli se nascondere i pulsanti a sinistra nella finestra principale - + Hide main window &Left buttons Nascondi i pu&lsanti di sinistra nella finestra principale - + Whether to hide the right button group on the main window Scegli se nascondere i pulsanti a destra nella finestra principale - + Hide main window &Right buttons Nascondi i pulsanti di dest&ra nella finestra principale - + Whether to hide the transport button group on the main window Scegli se nascondere i pulsanti del transport nella finestra principale - + Hide main window &Transport buttons Nascondi i pulsanti del &Transport nella finestra principale - + Whether to hide the text labels on the main window buttons Scegli se nascondere il testo dei pulsanti nella finestra principale - + Hide main window &button text labels Nascondi il testo dei p&ulsanti nella finestra principale - + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + Defaults Predefinite - + &Base font size: Dimensione &base dei caratteri: - + Base application font size (pt.) Dimesione predefinita dei caratteri nell'applicazione (pt.) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface Scegli se abilitare l'interfaccia D-Bus - + &Enable D-Bus interface &Abilita l'interfaccia D-Bus - + Number of microseconds to wait between engine processes (dummy) Microsecondi d'attesa fra i processi del motore (dummy) - + netone - netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to restrict to one single application instance (X11) Scegli se registrare un'unica istanza dell'applicazione (X11) - + Single application &instance Permetti una sola &istanza - + &Name: - &Nome: + &Nome: - + The JACK Audio Connection Kit sound server name Il nome del server audio Jack - + &Server Name Nome del &Server - + Server path (command line prefix) Indirizzo del server (prefisso nella riga di comando) - + &Channels I/O: &Canali I/O: - + &Latency I/O: &Latenza I/O: - + Start De&lay: Ritardo a&ll'avvio: - + secs secondi - + 0 msecs 0 millisecondi - + Server Suffi&x: Suffisso per il Ser&ver: - + Server &Prefix: Prefis&so per il Server: - + Extra driver options (command line suffix) Opzioni extra per il driver (suffisso nella riga di comando) - + Whether to stop JACK audio server on application exit - + Fermare o no il server audio JACK all'uscita dell'applicazione - + S&top JACK audio server on application exit - + &Fermare il server audio JACK alla chiusura dell'applicazione @@ -3839,6 +4407,11 @@ Rimuovi la presa selezionata dalla lista del socket + + Socket + Socket + + &Client: &Client: @@ -3948,11 +4521,6 @@ (Nessuno) - - Socket - JACK Audio Connection Kit - Sockets - JACK Audio Connection Kit - - Edit currently selected plug Modifica la presa selezionata diff -Nru qjackctl-0.4.5/src/translations/qjackctl_ja.ts qjackctl-0.6.0/src/translations/qjackctl_ja.ts --- qjackctl-0.4.5/src/translations/qjackctl_ja.ts 2017-04-27 14:44:14.569762974 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_ja.ts 2019-10-17 07:45:45.968673223 +0000 @@ -1,103 +1,114 @@ - + PortAudioProber Probing... - + 検査中... Please wait, PortAudio is probing audio hardware. - + お待ちください。PortAudioがオーディオハードウェアを検査中です。 Warning - 警告 + 警告 Audio hardware probing timed out. - + オーディオハードウェア検査がタイムアウトしました。 QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Usage: %1 [options] [command-and-args] - 使用法: %1 [オプション] [コマンドと引数] + - + Options: - オプション: + - + Start JACK audio server immediately - JACKオーディオサーバーを開始します + - + Set default settings preset name - 既定のプリセット名を設定します + - + Set active patchbay definition file - アクティブなパッチベイ定義ファイルをセットします + - + Set default JACK audio server name - 既定のJACKオーディオサーバー名をセットします + - + Show help about command line options - コマンドラインオプションについてのヘルプを表示します + - + Show version information - バージョン情報を表示します + - + Option -p requires an argument (preset). - pオプションは引数としてプリセット名を必要とします。 + - + Option -a requires an argument (path). - aオプションは引数としてパスを必要とします。 + - + Option -n requires an argument (name). - nオプションは引数として名前を必要とします。 + - + %1 (%2 frames) + + + Move + + + + + Rename + + qjackctlAboutForm - About QjackCtl - QjackCtlについて + About + QjackCtlについて @@ -112,82 +123,82 @@ Version - + バージョン Using: JACK %1 - + JACK %1を使用 Debugging option enabled. - + デバッグオプションは有効です。 System tray disabled. - + システムトレイは無効です。 Transport status control disabled. - + トランスポートステータスコントロールは無効です。 Realtime status disabled. - + リアルタイムステータスは無効です。 XRUN delay status disabled. - + XRUN遅延検出は無効です。 Maximum delay status disabled. - + 最大遅延ステータスは無効です。 JACK Port aliases support disabled. - + Jackポートエイリアスサポートは無効です。 JACK MIDI support disabled. - + JACK MIDIサポートは無効です。 JACK Session support disabled. - + JACKセッションサポートは無効です。 ALSA/MIDI sequencer support disabled. - + ALSA/MIDIシーケンサーサポートは無効です。 D-Bus interface support disabled. - + D-Busインターフェイスサポートは無効です。 Website - + ウェブサイト This program is free software; you can redistribute it and/or modify it - + このプログラムはフリーソフトウェアです; GNU一般公衆ライセンスバージョン2以降の under the terms of the GNU General Public License version 2 or later. - + 条件の元で、あなたはこのプログラムを再配布かつ/あるいは変更できます。 @@ -195,12 +206,12 @@ Readable Clients / Output Ports - 読み込み可能なクライアント / 出力ポート + 出力可能クライアント/出力ポート Writable Clients / Input Ports - 書き込み可能なクライアント / 入力ポート + 入力可能クライアント/入力ポート @@ -211,7 +222,7 @@ Alt+C Connect - + @@ -222,7 +233,7 @@ Alt+D Disconnect - + @@ -233,18 +244,18 @@ Alt+A Disconect All - + Re&name - リネーム(&n) + リネーム(&N) Alt+N Rename - + @@ -255,35 +266,34 @@ Alt+R Refresh - + qjackctlConnect - + Warning 警告 - + This will suspend sound processing from all client applications. Are you sure? - すべてのクライアントアプリケーションの -サウンド処理をサスペンドします + すべてのクライアントアプリケーションの +サウンド処理をサスペンドします。 -よろしいですか? - +よろしいですか? qjackctlConnectionsForm - Connections - JACK Audio Connection Kit - 接続 - JACK Audio Connection Kit + Connections + 接続 @@ -305,1083 +315,1679 @@ 接続(&C) - - - - Disconnect currently selected ports - 選択しているポートを切断します + + + + Disconnect currently selected ports + 選択しているポートを切断します + + + + + + &Disconnect + 切断(&D) + + + + + + Disconnect all currently connected ports + 接続しているすべてのポートを切断します + + + + + + Disconnect &All + すべて切断(&A) + + + + + + Expand all client ports + すべてのクライアントポートを展開します + + + + + + E&xpand All + すべて展開(&X) + + + + + + Refresh current connections view + 接続の表示を更新します + + + + + + &Refresh + 更新(&R) + + + + MIDI + + + + + ALSA + + + + + qjackctlConnectorView + + + &Connect + 接続(&C) + + + + Alt+C + Connect + + + + + &Disconnect + 切断(&D) + + + + Alt+D + Disconnect + + + + + Disconnect &All + すべて切断(&A) + + + + Alt+A + Disconect All + + + + + &Refresh + 更新(&R) + + + + Alt+R + Refresh + + + + + qjackctlGraphCanvas + + + + Connect + 接続 + + + + Disconnect + 切断 + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + グラフ(&G) + + + + &Edit + 編集(&E) + + + + &View + 表示(&V) + + + + &Zoom + 拡大/縮小(&Z) + + + + Co&lors + + + + + S&ort + + + + + &Help + ヘルプ(&H) + + + + &Connect + 接続(&C) + + + + + Connect + 接続 + + + + Connect selected ports + 選択したポートを接続します + + + + Ins + + + + + &Disconnect + 切断(&D) + + + + + Disconnect + 切断 + + + + Disconnect selected ports + 選択したポートを切断します + + + + Del + 削除 + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + 全て選択(&A) + + + + + + Select All + すべて選択します + + + + Ctrl+A + + + + + Select &None + 選択の解除(&N) + + + + + + Select None + 選択を解除します + + + + Ctrl+Shift+A + + + + + Select &Invert + 選択の反転(&I) + + + + + + Select Invert + 選択を反転します + + + + Ctrl+I + + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + メニューバー(&M) + + + + + Menubar + メニューバー + + + + Show/hide the main program window menubar + メインプログラムウィンドウのメニューバーを表示したり隠したりします + + + + Ctrl+M + + + + + &Toolbar + ツールバー(&T) + + + + + Toolbar + ツールバー + + + + Show/hide main program window file toolbar + メインプログラムウィンドウのツールバーを表示したり隠したりします + + + + &Statusbar + ステータスバー(&S) + + + + + Statusbar + ステータスバー + + + + Show/hide the main program window statusbar + メインプログラムウィンドウのステータスバーを表示したり隠したりします + + + + Text Beside &Icons + アイコンテキストの表示(&I) + + + + + Text beside icons + アイコンテキストの表示 + + + + Show/hide text beside icons + アイコンテキストを表示したり隠したりします + + + + &Center + 中央寄せ(&C) + + + + + Center + 中央寄せ + + + + Center view + 中央寄せします + + + + &Refresh + 更新(&R) + + + + + Refresh + 更新 + + + + Refresh view + ビューを更新します + + + + F5 + + + + + Zoom &In + 拡大(&I) + + + + + + Zoom In + 拡大 + + + + Ctrl++ + + + + + Zoom &Out + 縮小(&O) + + + + + + Zoom Out + 縮小 + + + + Ctrl+- + + + + + Zoom &Fit + ウィンドウに合わせる(&F) + + + + + + Zoom Fit + ウィンドウに合わせる + + + + Ctrl+0 + + + + + Zoom &Reset + 表示のリセット(&R) + + + + + + Zoom Reset + 表示リセット + + + + Ctrl+1 + + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + リセット(&R) + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + - - - - &Disconnect - 切断(&D) + + Ascending sort order + - - - - Disconnect all currently connected ports - 接続しているすべてのポートを切断します + + &Descending + - - - - Disconnect &All - すべて切断(&A) + + Descending + - - - - Expand all client ports - すべてのクライアントポートを展開します + + Descending sort order + - - - - E&xpand All - すべて展開(&x) + + &About... + qjackctlについて(&A)... - - - - Refresh current connections view - 接続の表示を更新します + + About... + QjackCtlについて... - - - - &Refresh - 更新(&R) + + About + QjackCtlについて - - MIDI - + + Show information about this application program + このアプリケーションプログラムについての情報を表示します - - ALSA - + + About &Qt... + Qtについて(&Q)... - - Warning - 警告 + + About Qt... + Qtについて... - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - プリセットのエイリアス名が変更されています: - -"%1" - -変更を保存しますか? + + About Qt + Qtについて - - - qjackctlConnectorView - - &Connect - 接続(&C) + + Show information about the Qt toolkit + Qtツールキットについての情報を表示します - - Alt+C - Connect - + + &Undo + 元に戻す(&U) - - &Disconnect - 切断(&D) + + &Redo + やり直す(&R) - - Alt+D - Disconnect - + + Undo last edit action + - - Disconnect &All - すべて切断(&A) + + Redo last edit action + - - Alt+A - Disconect All - + + Zoom + - - &Refresh - 更新(&R) + + Ready + - - Alt+R - Refresh - + + Colors - %1 + qjackctlMainForm - - QjackCtl - - - - + Start the JACK server - JACKサーバーを開始 + JACKサーバーを開始します - - + + &Start 開始(&S) - + Stop the JACK server - JACKサーバを停止 + JACKサーバを停止します - + S&top - 停止(&T) + 停止(&T) - + JACK server state JACKサーバーの状態 - + JACK server mode - JACKサーバーモード + JACKサーバーのモード - + DSP Load DSPの負荷 - + Sample rate サンプルレート - + XRUN Count (notifications) - XRUNのカウント(notifications) + XRUNの回数(通知) - + Time display 時間の表示 - + Transport state トランスポートの状態 - + Transport BPM トランスポートのBPM - + Transport time トランスポートの時間 - + Quit processing and exit 処理を終わらせ終了します - - + + &Quit 終了(&Q) - + Show/hide the session management window - セッション管理ウィンドウを表示/隠す + セッション管理ウィンドウを表示したり隠したりします - - + + S&ession - セッション(&E) + セッション(&E) - + Show/hide the messages log/status window - メッセージログ/状態ウィンドウを表示/隠す + メッセージログ/状態ウィンドウを表示したり隠したりします - - + + &Messages メッセージ(&M) - + Show settings and options dialog 設定とオプションダイアログを表示 - - + + Set&up... - 設定(&U)... + 設定(&U)... - - Show/hide the actual connections patchbay window - 現在接続しているパッチベイウィンドウを表示/隠す + + Show/hide the graph window + + + + + Show/hide the connections window + - + &Connect 接続(&C) - + Show/hide the patchbay editor window - パッチベイ編集ウィンドウを表示/隠す + パッチベイ編集ウィンドウを表示したり隠したりします - + &Patchbay パッチベイ(&P) - + Rewind transport - トランスポートを先頭に戻す + トランスポートを先頭に戻します - - + + &Rewind - 先頭に戻す(&R) + 先頭に戻す(&R) - + Backward transport - トランスポートの逆再生 + トランスポートを逆再生します - + &Backward 逆再生(&B) - + Start transport rolling - トランスポートのローリングをスタートする + トランスポートのローリングをスタートします - - + + &Play 再生(&P) - + Stop transport rolling - トランスポートのローリングをストップする + トランスポートのローリングをストップします - - + + Pa&use - 一時停止(&U) + 一時停止(&U) - + Forward transport - トランスポートを早送りする + トランスポートを早送りします - + &Forward - 早送り(&F) + 早送り(&F) - + Show information about this application このアプリケーションについての情報を表示します - - + + Ab&out... - 情報(&O)... + 情報(&O)... - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. - クライアントとしてALSAシーケンサーを開くことができませんでした + クライアントとしてALSAシーケンサーを開くことができませんでした ALSA MIDIパッチベイは利用できません。 - + D-BUS: Service is available (%1 aka jackdbus). - D-BUS: サービスを利用できます (%1 すなわちjackdbus)。 + D-BUS: サービスを利用できます (%1 がjackdbusを意味します)。 - + D-BUS: Service not available (%1 aka jackdbus). - D-BUS: サービスを利用できません (%1 すなわちjackdbus)。 + D-BUS: サービスを利用できません (%1 がjackdbusを意味します)。 - - + + Information 情報 - + The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray icon. - このプログラムはシステムトレイに表示されます。 + このプログラムはシステムトレイに表示されます。 プログラムを終了する時は、システムトレイアイコンの -コンテキストメニューで"Quit"を選択して下さい。 - +コンテキストメニューで"Quit"を選択して下さい。 - + Don't show this message again - + このメッセージを再表示しません - - - - - + + + + + + Warning 警告 - + JACK is currently running. Do you want to terminate the JACK audio server? - JACKは動作中です。 + JACKは動作中です。 JACKオーディオサーバーを終了しますか? - + successfully - 成功 + 成功 - + with exit status=%1 - 終了ステータス = %1 + 終了ステータス = %1 - + Could not start JACK. Maybe JACK audio server is already started. - JACKを開始できませんでした。 + JACKを開始できませんでした。 -おそらくもうJACKサウンドサーバーが開始されています。 +おそらくJACKサウンドサーバーはもう開始しています。 - + Could not load preset "%1". Retrying with default. - プリセット "%1" をロードできません。 + プリセット "%1" をロードできません。 -既定の設定でリトライします。 +デフォルトの設定でリトライします。 - + Could not load default preset. Sorry. - 既定のプリセットをロードできません。 + デフォルトのプリセットをロードできません。 ごめんなさい。 - + Startup script... - スタートアップスクリプト... + スタートアップスクリプト... - + Startup script terminated - スタートアップスクリプトは終了しました + スタートアップスクリプトは終了しました - + D-BUS: JACK server is starting... - D-BUS: JACKサーバーを開始しています... + D-BUS: JACKサーバーを開始しています... - + D-BUS: JACK server could not be started. Sorry - D-BUS: JACKサーバーを開始することができません。 + D-BUS: JACKサーバーを開始できません。 ごめんなさい - + JACK is starting... - JACKを開始しています... + JACKを開始しています... - + Some client audio applications are still active and connected. Do you want to stop the JACK audio server? - いくつかのクライアントのオーディオアプリケーションは -まだアクティブな接続を持っています。 + アクティブな接続を持っているオーディオの +クライアントがあります -それでもJACKオーディオサーバーを終了しますか? +JACKオーディオサーバーを終了しますか? - + Shutdown script... - シャットダウンスクリプト... + シャットダウンスクリプト... - + Shutdown script terminated - シャットダウンスクリプトは終了しました + シャットダウンスクリプトは終了しました - + JACK is stopping... - JACKを終了しています... + JACKを終了しています... - + D-BUS: JACK server is stopping... - D-BUS: JACKサーバーを終了しています... + D-BUS: JACKサーバーを終了しています... - + D-BUS: JACK server could not be stopped. Sorry - D-BUS: JACKサーバーを終了することができませんでした。 + D-BUS: JACKサーバーを終了できませんでした。 ごめんなさい - + JACK was started with PID=%1. - JACKはプロセスID=%1で開始しました。 + JACKはプロセスID=%1で開始しました。 - + D-BUS: JACK server was started (%1 aka jackdbus). - D-BUS: JACKサーバーはスタートしました (%1 すなわちjackdbus)。 + D-BUS: JACKサーバーはスタートしました (%1 がjackdbusを意味します)。 - + JACK is being forced... - JACKは強制終了します... + JACKを強制終了します... - + JACK was stopped - JACKは終了しました + JACKは終了しました - + D-BUS: JACK server was stopped (%1 aka jackdbus). - D-BUS: JACKサーバーは終了しました (%1 すなわちjackdbus)。 + D-BUS: JACKサーバーは終了しました (%1 がjackdbusを意味します)。 - + Post-shutdown script... - ポストシャットダウンスクリプト... + ポストシャットダウンスクリプト... - + Post-shutdown script terminated - ポストシャットダウンスクリプトは終了しました + ポストシャットダウンスクリプトは終了しました - + Error - エラー + エラー - - - + + + + Don't ask this again - + この質問を繰り返さない + + + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + プリセットのエイリアス名が変更されています: + +"%1" + +変更を保存しますか? - + Transport BBT (bar.beat.ticks) - + Transport time code - トランスポートのタイムコード + - + Elapsed time since last reset - 最後のリセットからの経過時間 + 最後のリセットからの経過時間 - + Elapsed time since last XRUN - 最後のXRUNからの経過時間 + 最後のXRUNからの経過時間 - + Patchbay reset. - + パッチベイのリセット。 - + Could not load active patchbay definition. "%1" Disabled. - アクティブなパッチベイ定義をロードできません。 + アクティブなパッチベイ定義をロードできません。 "%1" 無効にしました。 - + Patchbay activated. - パッチベイを有効にしました。 + パッチベイを有効にしました。 - + Patchbay deactivated. - パッチベイを無効にしました。 + パッチベイを無効にしました。 - + Statistics reset. - 統計のリセット。 + 統計のリセット。 - + msec - ミリ秒 + ミリ秒 - + JACK connection graph change. - JACK接続グラフは変更されました。 + JACK接続グラフを変更しました。 - + XRUN callback (%1). - XRUNコールバック (%1)。 + XRUNコールバック (%1)。 - + Buffer size change (%1). - バッファサイズを変更しました (%1)。 + バッファサイズを変更しました (%1)。 - + Shutdown notification. - シャットダウンの通知。 + シャットダウンの通知。 + + + + Freewheel started... + + + + + Freewheel exited. + - + Could not start JACK. Sorry. - JACKを開始できませんでした。 + JACKを開始できませんでした。 ごめんなさい。 - + JACK has crashed. - JACKはクラッシュしました。 + JACKはクラッシュしました。 - + JACK timed out. - JACKはタイムアウトしました。 + JACKはタイムアウトしました。 - + JACK write error. - JACK writeエラー。 + JACK書き込みエラー。 - + JACK read error. - JACK readエラー。 + JACK読み出しエラー。 - + Unknown JACK error (%d). - 不明なJACKエラー (%d)。 + 不明なJACKエラー (%d)。 - + JACK property change. - + JACKのプロパティーを変更しました。 - + ALSA connection graph change. - ALSA接続グラフは変更されました。 + ALSA接続グラフを変更しました。 - + JACK active patchbay scan - JACKのアクティブなパッチベイのスキャン + JACKのアクティブなパッチベイのスキャン - + ALSA active patchbay scan - ALSAのアクティブなパッチベイのスキャン + ALSAのアクティブなパッチベイのスキャン - + JACK connection change. - JACKの接続は変更されました。 + JACKの接続を変更しました。 - + ALSA connection change. - ALSAのコネクションは変更されました。 + ALSAのコネクションを変更しました。 - + checked - 確認済み + 確認済み - + connected - 接続中 + 接続中 - + disconnected - 接続なし + 接続なし - + failed - 失敗 + 失敗 - + A patchbay definition is currently active, which is probable to redo this connection: %1 -> %2 Do you want to remove the patchbay connection? - パッチベイ定義は現在アクティブであり -接続を再度やり直します。 + この接続を再度やり直すようなパッチベイ定義が +現在アクティブです: %1 -> %2 -パッチベイ接続を取り除きますか? +パッチベイ接続を削除しますか? - + Overall operation failed. - 操作全体が失敗しました。 + 全操作が失敗しました。 - + Invalid or unsupported option. - 不正なオプションか、サポートされていないオプションです。 + 不正なオプションか、サポートされていないオプションです。 - + Client name not unique. - 固有のクライアント名ではありません。 + 重複したクライアント名です。 - + Server is started. - サーバーを開始しました。 + サーバーを開始しました。 - + Unable to connect to server. - サーバーに接続することができません。 + サーバーに接続することができません。 - + Server communication error. - サーバーとのコミュニケーションエラーです。 + サーバーとのコミュニケーションエラーです。 - + Client does not exist. - クライアントが存在しません。 + クライアントが存在しません。 - + Unable to load internal client. - 内部クライアントをロードすることができません。 + 内部クライアントをロードできません。 - + Unable to initialize client. - クライアントを初期化することができません。 + クライアントを初期化できません。 - + Unable to access shared memory. - 共有メモリーへアクセスすることができません。 + 共有メモリーへアクセスできません。 - + Client protocol version mismatch. - クライアントのプロトコルバージョンが一致しません。 + クライアントのプロトコルバージョンが一致しません。 - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. - JACKサーバーとクライアントとして接続することができませんでした。 + JACKサーバーとクライアントとして接続することができません。 - %1 -メッセージウィンドウで詳細な情報を確認して下さい。 +メッセージウィンドウで詳細な情報を確認してください。 - + Server configuration saved to "%1". - サーバー設定を "%1" に保存しました。 + サーバー設定を "%1" に保存しました。 - + Client activated. - クライアントは有効となりました。 + クライアントは有効です。 - + Post-startup script... - ポストスタートアップスクリプト... + ポストスタートアップスクリプト... - + Post-startup script terminated - ポストスタートアップスクリプトの終了 + ポストスタートアップスクリプトを終了しました - + Command line argument... - コマンドライン引数... + コマンドライン引数... - + Command line argument started - コマンドライン引数の開始 + コマンドライン引数の開始 - + Client deactivated. - クライアントは無効となりました。 + クライアントは無効です。 - + Transport rewind. - トランスポートを開始まで戻します。 + トランスポートを開始点まで戻します。 - + Transport backward. - トランスポートを逆再生します。 + トランスポートを逆再生します。 - - - + + + Starting - 開始 + 開始 - + Transport start. - トランスポートの開始。 + トランスポートを開始しました。 - - + + Stopping - 停止 + 停止 - + Transport stop. - トランスポートを停止しました。 + トランスポートを停止しました。 - + Transport forward. - トランスポートを早送りします。 + トランスポートを早送りします。 - - + + Stopped - 停止 + 停止 - + %1 (%2%) - + - + %1 (%2%, %3 xruns) - + - + %1 % - + - + %1 Hz - + - + %1 frames - + - + Yes はい - + No いいえ - + + FW + + + + RT - + - + Rolling - ローリング + ローリング - + Looping - ループ + ループ - + %1 msec - + %1ミリ秒 - + XRUN callback (%1 skipped). - XRUNコールバック (%1 をスキップ)。 + XRUNコールバック (%1 をスキップ)。 - + Started - 開始 + 開始 - + Active - 有効 + 有効 - + Activating - 有効化 + 有効化 - + Inactive - 無効 + 無効 - - + + &Hide - 非表示(&H) + 隠す(&H) - + Mi&nimize - 最小化(&n) + 最小化(&N) - - + + S&how - 表示(&h) + 表示(&H) - + Rest&ore - 元に戻す(&o) + 元に戻す(&O) - + &Stop - 停止(&S) + 停止(&S) - + &Reset - リセット(&R) + リセット(&R) - + &Presets - プリセット(&P) + プリセット(&P) - + &Load... - 読み込み(&L)... + 読み出し(&L)... - + &Save... - 保存(&S)... + 保存(&S)... - + Save and &Quit... 保存して終了(&Q)... - + Save &Template... - テンプレートを保存(&T)... + テンプレートを保存(&T)... - + &Versioning - バージョン(&V) + バージョン(&V) - + Re&fresh - 更新(&F) + 更新(&F) - + St&atus - 状態(&A) + 状態(&A) - + &Connections - 接続(&C) + 接続(&C) - + Patch&bay - パッチベイ(&B) + パッチベイ(&B) + + + + + &Graph + グラフ(&G) - + &Transport - トランスポート(&T) + トランスポート(&T) - + Server settings will be only effective after restarting the JACK audio server. - サーバー設定はJACKオーディオサーバーを再起動後にのみ + サーバー設定はJACKオーディオサーバーを再起動後に 有効となります。 - + + Do you want to restart the JACK audio server? + + + + Some settings will be only effective the next time you start this program. - いくつかの設定は次回にこのプログラムを起動した際にのみ + いくつかの設定はこのプログラムを次回に起動した時に 有効となります。 - + D-BUS: SetParameterValue('%1', '%2'): %3. (%4) - + - + D-BUS: ResetParameterValue('%1'): %2. (%3) - + - + D-BUS: GetParameterValue('%1'): %2. (%3) - + qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - メッセージ / 状態 - -JACK Audio Connection Kit + Messages / Status + @@ -1411,12 +2017,12 @@ Statistics since last server startup - 最後にサーバーが開始してからの統計 + 最後にサーバーが開始してからの統計 Description - 項目 + 項目 @@ -1426,17 +2032,17 @@ Reset XRUN statistic values - XRUN統計値のリセット + XRUN統計値をリセットします Re&set - リセット(&S) + リセット(&S) Refresh XRUN statistic values - XRUN統計値の更新 + XRUN統計値を更新します @@ -1451,7 +2057,7 @@ Server state - サーバーの状態 + サーバーの状態 @@ -1481,83 +2087,83 @@ Transport Timecode - トランスポート タイムコード + トランスポートのタイムコード Transport BBT - トランスポート BBT + トランスポートのBBT Transport BPM - トランスポート BPM + トランスポートのBPM XRUN count since last server startup - 最後にサーバーが開始してからのXRUNの数 + 最後にサーバーが開始してからのXRUNの回数 XRUN last time detected - 検出されたXRUNの継続時間 + XRUNが最後に検出された時間 XRUN last - XRUNの継続 + 最後のXRUN XRUN maximum - XRUNの最大値 + XRUNの最大値 XRUN minimum - XRUNの最小値 + XRUNの最小値 XRUN average - XRUNの平均値 + XRUNの平均値 XRUN total - XRUNの合計 + XRUNの合計 Maximum scheduling delay - スケジュールされたディレイの最大値 + スケジュール遅延の最大値 Time of last reset - 最後のリセットの時間 + 最後のリセットの時間 Logging stopped --- %1 --- - ログの終了 --- %1 --- + Logging started --- %1 --- - ログの開始 --- %1 --- + qjackctlPatchbay - + Warning 警告 - + This will disconnect all sockets. Are you sure? @@ -1570,8 +2176,8 @@ qjackctlPatchbayForm - Patchbay - JACK Audio Connection Kit - パッチベイ - JACK Audio Connection Kit + Patchbay + @@ -1699,7 +2305,7 @@ E&xpand All - すべて展開(&X) + すべて展開(&X) @@ -1724,7 +2330,7 @@ Load patchbay profile - パッチベイプロファイルをロードします + パッチベイプロファイルを読み出します @@ -1744,100 +2350,100 @@ Current (recent) patchbay profile(s) - 現在の(最近使った)パッチベイプロファイル + 現在の(最近の)パッチベイプロファイル Toggle activation of current patchbay profile - 現在のパッチベイプロファイルの有効化/無効化 + 現在のパッチベイプロファイルを有効にしたり無効にします Acti&vate - 有効化(&V) + 有効化(&V) - + Warning 警告 - + The patchbay definition has been changed: "%1" Do you want to save the changes? - パッチベイの定義が変更されています: + パッチベイの定義を変更しました: "%1" 変更を保存しますか? - + %1 [modified] %1 [変更] - + Untitled%1 無題%1 - - + + Error エラー - + Could not load patchbay definition file: "%1" - パッチベイ定義ファイルをロードできません: + パッチベイ定義ファイルを読み出せません: "%1" - + Could not save patchbay definition file: "%1" - パッチベイ定義ファイルを保存できません: + パッチベイ定義ファイルを保存できません: "%1" - + New Patchbay definition - 新規パッチベイの定義 + 新規パッチベイ定義 - + Create patchbay definition as a snapshot of all actual client connections? - 現在有効なすべてののクライアント接続を元に + 現在有効な全クライアント接続をスナップショットとして パッチベイ定義を作成しますか? - + Load Patchbay Definition - パッチベイの定義をロードします + パッチベイの定義を読み出します - - + + Patchbay Definition files - パッチベイ定義ファイル + パッチベイ定義ファイル - + Save Patchbay Definition パッチベイの定義を保存します - + active アクティブ @@ -1845,112 +2451,112 @@ qjackctlPatchbayView - + Add... 追加... - + Edit... 編集... - + Copy... コピー... - + Remove 削除 - + Exclusive 排他的 - + Forward - 早送り + 早送り - + (None) (なし) - + Move Up 上へ移動 - + Move Down 下へ移動 - + &Connect 接続(&C) - + Alt+C Connect - + - + &Disconnect 切断(&D) - + Alt+D Disconnect - + - + Disconnect &All すべて切断(&A) - + Alt+A Disconect All - + - + &Refresh 更新(&R) - + Alt+R Refresh - + qjackctlSessionForm - Session - JACK Audio Connection Kit - セッション - JACK Audio Connection Kit + Session + Load session - セッションをロードします + セッションを読み出します - + &Load... - 読み込み(&L)... + 読み出し(&L)... @@ -1961,7 +2567,7 @@ &Recent - 最近のセッション(&R) + 最近のセッション(&R) @@ -1977,40 +2583,40 @@ Save session versioning - セッションのバージョンを保存します + セッションのバージョンを保存します - + &Versioning - バージョン(&V) + バージョン(&V) Update session - セッションの更新 + セッションの更新 - - + + Re&fresh - 更新(&F) + 更新(&F) Session clients / connections - + セッションのクライアント/接続 Client / Ports - クライアント / ポート + クライアント/ポート UUID - + @@ -2039,9 +2645,9 @@ - + &Add - + 追加(&A) @@ -2050,9 +2656,9 @@ - + &Edit - 編集(&E) + 編集(&E) @@ -2061,126 +2667,126 @@ - + Re&move - + 削除(&M) - + &Save... 保存(&S)... - + Save and &Quit... 保存して終了(&Q)... - + Save &Template... テンプレートを保存(&T)... - - + + Load Session - セッションをロード + セッションを読み出し - - + + Session directory - セッションのディレクトリ + セッションのディレクトリ - + Save Session - セッションの保存 + セッションの保存 - + and Quit - そして終了 + と終了 - + Template - テンプレート + テンプレート - + &Clear クリア(&C) - - - + + + Warning 警告 - + A session could not be found in this folder: "%1" - このフォルダーにセッションを見つけることができません: + このフォルダーにセッションはありません: "%1" - + %1: loading session... - %1: セッションをロードしています... + %1: セッションを読み出しています... - + %1: load session %2. - %1: セッションのロード %2。 + %1: セッションの読み出し %2。 - + A session already exists in this folder: "%1" Are you sure to overwrite the existing session? - セッションはすでにこのフォルダーにあります: + セッションはすでにこのフォルダーにあります: "%1" 存在するセッションを上書きしますか? - + This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? - このフォルダーはすでに存在していて、空です: + このフォルダーはすでに存在していて、空です: "%1" 存在するフォルダーを上書きしますか? - + %1: saving session... - %1: セッションを保存しています... + %1: セッションを保存しています... - + %1: save session %2. - %1: セッションの保存 %2。 + %1: セッションの保存 %2。 - + New Client - + 新規クライアント @@ -2194,11 +2800,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - 設定 - JACK Audio Connection Kit - - Settings 設定 @@ -2215,25 +2816,25 @@ - - - - - - - - - - - + + + + + + + + + + + (default) - defaultは内部的にはシンボル名となっているようで、「既定」としてしまうとそういう新規プリセットとして扱われるようです。 + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 Save settings as current preset name - 設定を現在のプリセット名として保存 + 設定を現在のプリセット名として保存 @@ -2243,7 +2844,7 @@ Delete current settings preset - 現在のプリセットを削除します + 現在のプリセットを削除します @@ -2251,88 +2852,95 @@ 削除(&D) - + jackd + DO NOT TRANSLATE - + jackdmp + DO NOT TRANSLATE - + jackstart + DO NOT TRANSLATE - + &Name: - 名前(&N): + 名前(&N): - + The JACK Audio Connection Kit sound server name - JACK Audio Connection Kitサウンドサーバー名 + JACK Audio Connection Kitサウンドサーバー名 Driv&er: - ドライバー(&E): + ドライバー(&E): The audio backend driver interface to use - 使用するオーディオバックエンドドライバーインターフェイス + 使用するオーディオバックエンドドライバーインターフェイス dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - freebob - - - - firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - + net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - + netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 @@ -2341,1416 +2949,1373 @@ パラメーター - + MIDI Driv&er: - MIDIドライバー(&E): + MIDIドライバー(&E): - + The ALSA MIDI backend driver to use - 使用するALSA MIDIバックエンドドライバー + 使用するALSA MIDIバックエンドドライバー - + none - なし + - + raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - + seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 - + Time in seconds that client is delayed after server startup - サーバーを開始してからのクライアントが遅延する時間(秒) + サーバーを開始してからのクライアントが遅延する時間(秒) - + Latency: レイテンシー: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings - ピリオド、サンプルレートそしてバッファーサイズから計算した、出力のレイテンシ (ミリ秒) + ピリオド、サンプルレートそしてバッファーサイズから計算した、出力のレイテンシ (ミリ秒) - + Use realtime scheduling リアルタイムスケジューリングを使用します - + &Realtime - リアルタイム(&R) + リアルタイム(&R) - + Do not attempt to lock memory, even if in realtime mode リアルタイムモードでなくても、メモリーをロックしないようにします - + No Memory Loc&k - + メモリーロックを無効(&K) - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) - 一般的なツールキットライブラリーのメモリーをアンロックする (GTK+, QT, FLTK, Wine) + 一般的なツールキットライブラリーのメモリーをアンロックする (GTK+, QT, FLTK, Wine) - + &Unlock Memory - + メモリーのアンロック(&U) - + Ignore xruns reported by the backend driver - バックエンドドライバーが報告するXRUNを無視します + バックエンドドライバーが報告するXRUNを無視します - + So&ft Mode - ソフトモード(&f) + ソフトモード(&F) - + Provide output monitor ports - 出力モニター用にポートを提供します + 出力モニター用にポートを提供します - + &Monitor モニター(&M) - + Force 16bit mode instead of failing over 32bit (default) - 32ビットモード(既定)で失敗する場合に16ビットモードを強制できます + 32ビットモード(デフォルト)で失敗する場合に16ビットモードを強制します - + Force &16bit - 強制的に16bitを使用(&1) - - - - Enable hardware monitoring of capture ports - 録音ポートのハードウェアモニタリングを有効にする - - - - H/W M&onitor - H/Wモニターを有効(&O) + 強制的に16bitを使用(&1) - + Enable hardware metering on cards that support it - ハードウェアメーターをサポートしているカードではそれを有効にします + ハードウェアメーターをサポートしているカードではそれを有効にします - + H/&W Meter - H/Wメーターを有効(&W) + H/Wメーターを有効(&W) - + Ignore hardware period/buffer size - ハードウェアのピリオド/バッファーサイズを無視します + ハードウェアのピリオド/バッファーサイズを無視します - + &Ignore H/W H/Wを無視(&I) - + Whether to give verbose output on messages - メッセージに詳細な出力を行うかどうか + メッセージに詳細な出力を行うかどうか - + &Verbose messages 詳細なメッセージ(&V) - + &Output Device: 出力デバイス(&O): - + &Interface: インターフェース(&I): - + Maximum input audio hardware channels to allocate - 割り当てる入力オーディオハードウェアチャンネルの最大値 + 割り当てる入力オーディオハードウェアチャンネルの最大値 - + &Audio: オーディオ(&A): - + Dit&her: - ディザリング(&h): + ディザリング(&H): - + External output latency (frames) - 外部出力レイテンシー(フレーム) + 外部出力のレイテンシー(フレーム) - + &Input Device: 入力デバイス(&I): - + Provide either audio capture, playback or both - 音声の入力か出力、あるいは入出力から選択します + 音声の入力か出力、あるいは入出力から選択します - + Duplex - 入出力 + 入出力 - + Capture Only - 入力のみ + 入力のみ - + Playback Only - 出力のみ + 出力のみ - + The PCM device name to use - 使用するPCMデバイス名 + 使用するPCMデバイス名 + + + + + + hw:0 + - hw:0 - + plughw:0 + - plughw:0 - + /dev/audio + - /dev/audio - - - - - - /dev/dsp - + - - - - + + + + > - + - + Alternate input device for capture - 録音のための入力デバイスを選択 + 録音のための入力デバイスを選択 - + Maximum output audio hardware channels to allocate - 割り当てるオーディオ出力ハードウェアチャンネルの最大値 + 割り当てるオーディオ出力ハードウェアチャンネルの最大値 - + Alternate output device for playback - 再生のための出力デバイス + 再生のための出力デバイス - + External input latency (frames) - 外部入力のレイテンシー(フレーム) + 外部入力のレイテンシー(フレーム) - + Set dither mode - ディザリングモードをセットします + ディザリングモードを設定します - + None - なし + - + Rectangular - + - + Shaped - + - + Triangular - + - + Number of periods in the hardware buffer - ハードウェアバッファーのピリオド数 + ハードウェアバッファーのピリオド数 - + Priorit&y: - 優先度(&y): + 優先度(&Y): - + &Frames/Period: - フレーム/ピリオド(&F): + フレーム/ピリオド(&F): - + Frames per period between process() calls - process()コール間のピリオド毎のフレーム数 + process()呼び出し間のピリオド毎のフレーム数 + + + + + 16 + - 16 - + 32 + - 32 - + 64 + - - 64 - + + 128 + - 128 - + 256 + - 256 - + 512 + - 512 - - - - - 1024 - + - + 2048 - + - + 4096 - + - + Port Ma&ximum: - 最大ポート数(&x): + 最大ポート数(&X): - + &Channels: - チャンネル(&C): + チャンネル数(&C): - + Number of microseconds to wait between engine processes (dummy) - エンジンプロセス間の待ち時間をマイクロ秒で指定します(dummy) + エンジンの処理間の待ち時間をマイクロ秒で指定します(dummy) - + 21333 - + - + Sample rate in frames per second - サンプリングレートを1秒あたりのフレーム数で指定します + サンプリングレートを1秒あたりのフレーム数で指定します - + 22050 - + - + 32000 - + - + 44100 - + - + 48000 - + - + 88200 - + - + 96000 - + - + 192000 - + - + Scheduler priority when running realtime - リアルタイムモードで稼動している場合のスケジューラーにおける優先度を設定します + リアルタイムモードで動作している場合のスケジューラーにおける優先度を設定します - + &Word Length: - ワード長(&W): + ワード長(&W): - + Periods/&Buffer: - ピリオド/バッファー(&B): + ピリオド/バッファー(&B): - + Word length - ワード長 + ワード長 - + Maximum number of ports the JACK server can manage - JACKサーバーが管理するポートの最大数 + JACKサーバーが管理するポートの最大数 - + &Wait (usec): - 待ち時間(マイクロ秒)(&W): + 待ち時間(マイクロ秒)(&W): - + Sample &Rate: サンプルレート(&R): - + Maximum number of audio channels to allocate - 割り当てるオーディオチャンネルの最大値 + 割り当てるオーディオチャンネルの最大値 - + &Timeout (msec): - タイムアウト(ミリ秒)(&T): + タイムアウト(ミリ秒)(&T): - + Set client timeout limit in milliseconds - クライアントのタイムリミットをミリ秒で指定します + クライアントのタイムアウトの最大値をミリ秒で指定します + + + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + - + Please do not touch these settings unless you know what you are doing. - + 200 - + - - + + 500 - + - - + + 1000 - + - + 2000 - + - - + + 5000 - + - + 10000 - + - + Options オプション - + Scripting スクリプト - + Whether to execute a custom shell script before starting up the JACK audio server. - JACKオーディオサーバーを開始する前に任意のシェルスクリプトを実行するかどうか。 + JACKオーディオサーバーを開始する前に任意のシェルスクリプトを実行するかどうか。 - + Execute script on Start&up: - スタートアップ時にスクリプトを実行(&U): + スタートアップ時にスクリプトを実行(&U): - + Whether to execute a custom shell script after starting up the JACK audio server. - JACKオーディオサーバーを開始した直後に任意のシェルスクリプトを実行するかどうか。 + JACKオーディオサーバーを開始した直後に任意のシェルスクリプトを実行するかどうか。 - + Execute script after &Startup: - スタートアップ後にスクリプトを実行(&S): + スタートアップ後にスクリプトを実行(&S): - + Whether to execute a custom shell script before shuting down the JACK audio server. - JACKオーディオサーバーを終了する直前に任意のシェルスクリプトを実行するかどうか。 + JACKオーディオサーバーを終了する直前に任意のシェルスクリプトを実行するかどうか。 - + Execute script on Shut&down: - シャットダウン時にスクリプトを実行(&D): + シャットダウン時にスクリプトを実行(&D): - + Command line to be executed before starting up the JACK audio server - JACKオーディオサーバーを開始する前に実行されるコマンドライン + JACKオーディオサーバーを開始する前に実行するコマンドライン - - - - + + + + Scripting argument meta-symbols - メタシンボルとして使えるスクリプト引数 + メタシンボルとして使えるスクリプト引数 - + Browse for script to be executed before starting up the JACK audio server - JACKオーディオサーバーを開始する前に実行するスクリプトを参照します + JACKオーディオサーバーを開始する前に実行するスクリプトを参照します - - - - - - + + + + + + ... - + - + Command line to be executed after starting up the JACK audio server - JACKオーディオサーバーを開始した後に実行されるコマンドライン + JACKオーディオサーバーを開始した後に実行するコマンドライン - + Browse for script to be executed after starting up the JACK audio server - JACKオーディオサーバーを開始した後に実行するスクリプトを参照します + JACKオーディオサーバーを開始した後に実行するスクリプトを参照します - + Browse for script to be executed before shutting down the JACK audio server - JACKオーディオサーバーを終了する直前に実行するスクリプトを参照します + JACKオーディオサーバーを終了する直前に実行するスクリプトを参照します - + Command line to be executed before shutting down the JACK audio server - JACKオーディオサーバーを終了する直前に実行されるコマンドライン + JACKオーディオサーバーを終了する直前に実行するコマンドライン - + Whether to execute a custom shell script after shuting down the JACK audio server. - JACKオーディオサーバーを終了した直後に任意のシェルスクリプトを実行するかどうか。 + JACKオーディオサーバーを終了した直後に任意のシェルスクリプトを実行するかどうか。 - + Execute script after Shu&tdown: - シャットダウン後にスクリプトを実行(&D): + シャットダウン後にスクリプトを実行(&T): - + Browse for script to be executed after shutting down the JACK audio server - JACKオーディオサーバーを終了した直後に実行するスクリプトを参照します + JACKオーディオサーバーを終了した直後に実行するスクリプトを参照します - + Command line to be executed after shutting down the JACK audio server - JACKオーディオサーバーを終了した直後に実行されるコマンドライン + JACKオーディオサーバーを終了した直後に実行するコマンドライン - + Statistics - 統計 + 統計 - + Whether to capture standard output (stdout/stderr) into messages window - メッセージウィンドウ中に標準出力(stdout/stderr)を記録するかどうか + メッセージウィンドウ中に標準出力(stdout/stderr)を記録するかどうか - + &Capture standard output - 標準出力の記録(&C) + 標準出力の記録(&C) - + &XRUN detection regex: - XRUN検出の正規表現(&X): + XRUN検出の正規表現(&X): - + Regular expression used to detect XRUNs on server output messages - サーバー出力メッセージ内においてXRUNを検出した際に使用される正規表現 + サーバー出力メッセージ内においてXRUNを検出した際に使用される正規表現 - + xrun of at least ([0-9|\.]+) msecs - + - + Connections - 接続 + 接続 - + Whether to reset all connections when a patchbay definition is activated. - + パッチベイ定義を有効にした際に全接続をリセットするかどうか。 - + &Reset all connections on patchbay activation - + パッチベイ有効化に伴い全接続をリセットする(&R) - + Whether to issue a warning on active patchbay port disconnections. - + アクティブなパッチベイポート切断時に警告を表示するかどうか。 - + &Warn on active patchbay disconnections - + アクティブなパッチベイ切断時に警告(&W) - + Whether to enable JACK D-Bus interface - + JACK D-Busインターフェイスを有効にするかどうか - + &Enable JACK D-Bus interface + JACK D-Busインターフェイスの有効化(&E) + + + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button - + 10 - + - + Patchbay definition file to be activated as connection persistence profile - 接続において持続して有効にするパッチベイ定義ファイルを指定します + 接続において持続して有効にするパッチベイ定義ファイルを指定します - + Browse for a patchbay definition file to be activated - 有効にするパッチベイ定義の参照 + 有効にするパッチベイ定義の参照 - + Whether to activate a patchbay definition for connection persistence profile. - 接続において継続して有効にするパッチベイ定義を有効にするかどうか。 + 接続において持続して有効にするパッチベイ定義を有効にするかどうか。 - + Activate &Patchbay persistence: - 持続的パッチベイ有効(&P): + パッチベイの持続を有効化(&P): - + Logging ログの記録 - + Messages log file - メッセージログファイル + メッセージログファイル - + Browse for the messages log file location - メッセージログファイルの場所を参照します + メッセージログファイルの場所を参照します - + Whether to activate a messages logging to file. - メッセージをファイルに記録するかどうか。 + メッセージログをファイルに記録するかどうか。 - + Server &Prefix: - サーバー接頭辞(&P): + サーバー接頭辞(&P): - + Server path (command line prefix) - サーバーパス (コマンドライン接頭辞) + サーバーパス(コマンドライン接頭辞) - + &Channels I/O: - チャンネルI/O(&C): + チャンネルI/O(&C): - + &Latency I/O: - レイテンシーI/O(&L): + レイテンシーI/O(&L): - + Server Suffi&x: - サーバー接尾辞(&X): + サーバー接尾辞(&X): - + Extra driver options (command line suffix) - 任意のドライバーオプション (コマンドライン接尾辞) + 任意のドライバーオプション(コマンドライン接尾辞) - + Start De&lay: - 開始ディレイ(&L): + 開始ディレイ(&L): - + secs - + - + 0 msecs - 0ミリ秒 + 0ミリ秒 - + &Messages log file: メッセージログファイル(&M): - + Display 表示 - + Time Display 時間表示 - - Time F&ormat: - 時間フォーマット(&O): - - - - The general time format on display - 共通して使われる時間表記フォーマット - - - - hh:mm:ss - - - - - hh:mm:ss.d - - - - - hh:mm:ss.dd - - - - - hh:mm:ss.ddd - - - - + Transport &Time Code - トランスポートのタイムコード(&T) + トランスポートのタイムコード(&T) - + Transport &BBT (bar:beat.ticks) - トランスポートのBBT (bar: beat, ticks)(&B) + トランスポートのBBT(bar: beat, ticks)(&B) - + Elapsed time since last &Reset - 最後のリセットからの経過時間(&R) + 最後のリセットからの経過時間(&R) - + Elapsed time since last &XRUN - 最後のXRUNからの経過時間(&X) + 最後のXRUNからの経過時間(&X) - + Sample front panel normal display font - フロントパネルの通常表示のフォントサンプル + フロントパネルの通常表示のサンプルフォント - + Sample big time display font - ビッグタイム表示のサンプルフォント + ビッグタイム表示のフォントサンプル - + Big Time display: - ビッグタイム表示: + ビッグタイム表示: - + Select font for front panel normal display - フロントパネル表示に使用するフォントを選択します + フロントパネルの通常表示に使用するフォントを選択します - - - - + + + + &Font... フォント(&F)... - + Select font for big time display - ビッグタイム表示に使用するフォントを選択します + ビッグタイム表示に使用するフォントを選択します - + Normal display: - 通常の表示: - - - - Whether to enable a shiny glass light effect on the main display - メイン表示の効果に光沢のあるガラスライトを適用するかどうか + 通常表示: - - &Display shiny glass light effect - 光沢のあるガラスライト効果(&D) - - - + Whether to enable blinking (flashing) of the server mode (RT) indicator - サーバーモード(RT)インジケーターを点滅するかどうか + サーバーモード(RT)インジケーターを点滅するかどうか - + Blin&k server mode indicator - サーバーモードインジケーターの点滅(&K) + サーバーモードインジケーターの点滅(&K) - + Messages Window メッセージウィンドウ - + Sample messages text font display - メッセージテキスト表示に使用するフォントのサンプル + メッセージテキスト表示に使用するフォントのサンプル - + Select font for the messages text display - メッセージテキスト表示に使用するフォントを選択します + メッセージテキスト表示に使用するフォントを選択します - + Whether to keep a maximum number of lines in the messages window - メッセージウィンドウに1度に表示できる行数の最大値 + メッセージビューに1度に表示できる行数の最大値 - + &Messages limit: - メッセージリミット(&M): + メッセージリミット(&M): - + The maximum number of message lines to keep in view - メッセージビューに1度に表示できる行数の最大値 + メッセージビューに1度に表示できる行数の最大値 - + 100 - + - + 250 - + - + 2500 - + - + Connections Window 接続ウィンドウ - + Sample connections view font - 接続ビューに使用するフォントのサンプル + 接続ビューに使用するフォントのサンプル - + Select font for the connections view - 接続ビューに使用するフォントを選択します + 接続ビューに使用するフォントを選択します - + &Icon size: アイコンサイズ(&I): - + The icon size for each item of the connections view - コネクションビューに表示されるそれぞれのアイコンのサイズ + コネクションビューに表示されるアイコンのサイズ - + 16 x 16 - + - + 32 x 32 - + - + 64 x 64 - - - - - Whether to draw connection lines as cubic Bezier curves - 接続線をキュービックベジェ曲線で描くかどうか - - - - Draw connection and patchbay lines as Be&zier curves - 接続とパッチベイの線をベジェ曲線で描画(&z) + - + Whether to enable client/port name aliases on the connections window - 接続ウィンドウにクライアント/ポートのエイリアス名を有効とするかどうか + 接続ウィンドウでクライアント/ポートのエイリアス名を有効とするかどうか - + E&nable client/port aliases - クライアント/ポートのエイリアス名の有効化(&n) + クライアント/ポートのエイリアス名の有効化(&N) - + Whether to enable in-place client/port name editing (rename) - クライアント/ポート名の編集(リネーム) + クライアント/ポート名の編集(リネーム) - + Ena&ble client/port aliases editing (rename) - クライアント/ポートのエイリアス名編集(リネーム)を有効(&b) + クライアント/ポートのエイリアス名編集(リネーム)を有効化(&B) - + &JACK client/port aliases: - JACKクライアント/ポート エイリアス(&J): + JACKクライアント/ポート エイリアス(&J): - + Advanced - + 高度 - + JACK client/port aliases display mode - JACKのクライアント/ポートエイリアス表示モード + JACKのクライアント/ポートエイリアス表示モード - + Default - 既定 + デフォルト - + First - 1番目 + 1番目 - + Second - 2番目 + 2番目 - + JACK client/port pretty-name (metadata) display mode - + JACKクライアント/ポートのわかりやすい名前(メタデータ)表示モード - + Enable JA&CK client/port pretty-names (metadata) - + JACKクライアント/ポートのわかりやすい名前(メタデータ)を有効にします(&C) - + Misc その他 - + Other - その他 + その他 - + Whether to start JACK audio server immediately on application startup - アプリケーション開始時にJACKオーディオサーバーを開始するかどうか + アプリケーション開始直後にJACKオーディオサーバーを開始するかどうか - + &Start JACK audio server on application startup - JACKオーディオサーバーの自動起動(&S) + JACKオーディオサーバーの自動起動(&S) - + Whether to ask for confirmation on application exit - アプリケーションが終了する際に確認する + アプリケーションが終了する際に確認するかどうか - + &Confirm application close - アプリケーションの終了の確認(&C) + アプリケーションの終了の確認(&C) - + Whether to keep all child windows on top of the main window - 子ウィンドウを常に前面に表示します + 子ウィンドウを常に前面に表示するかどうか - + &Keep child windows always on top - 子ウィンドウを常に前面表示(&K) + 子ウィンドウを常に前面表示(&K) - + Whether to enable the system tray icon - システムトレイアイコンを有効にするかどうか + システムトレイアイコンを有効にするかどうか - + &Enable system tray icon システムトレイアイコンを有効(&E) - + Whether to show system tray message on main window close - + メインウィンドウを閉じる時システムトレイメッセージを表示するかどうか - + Sho&w system tray message on close - + 終了時にシステムトレイメッセージを表示する(&W) - + Whether to start minimized to system tray - 開始時にシステムトレイアイコンのみ表示するかどうか + 開始時にシステムトレイアイコンのみ表示するかどうか - + Start minimi&zed to system tray - 開始時にシステムトレイに最小化する(&Z) + 開始時にシステムトレイに最小化する(&Z) - + Whether to restrict to one single application instance (X11) - アプリケーションのインスタンスをひとつに制限するかどうか (X11) + アプリケーションのインスタンスをひとつに制限するかどうか(X11) - + Single application &instance - シングルアプリケーションインスタンス(&I) + シングルアプリケーションインスタンス(&I) - + Whether to save the JACK server command-line configuration into a local file (auto-start) - JACKサーバーのコマンドライン設定をローカルファイルに保存するかどうか (自動で保存されます) - - - - S&ave JACK audio server configuration to: - JACKオーディオサーバー設定の保存先(&A): - - - - The server configuration local file name (auto-start) - サーバー設定ローカルファイル名(自動起動) + JACKサーバーのコマンドライン設定をローカルファイルに保存するかどうか(自動で保存されます) - - .jackdrc - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + - - Whether to exit once all clients have closed (auto-start) - すべてのクライアントが終了したらアプリケーションも終了するかどうか (自動起動) + + Confirm server sh&utdown and/or restart + - - C&onfigure as temporary server - 一時サーバーとして設定(&C) + + S&ave JACK audio server configuration to: + JACKオーディオサーバー設定の保存先(&A): - - Whether to ask for confirmation on JACK audio server shutdown - サーバーのシャットダウンを確認するかどうか + + The server configuration local file name (auto-start) + サーバー設定ローカルファイル名(自動起動) - - Confirm server sh&utdown - サーバーのシャットダウンを確認する(&U) + + .jackdrc + - + Whether to enable ALSA Sequencer (MIDI) support on startup - 開始時にALSAシーケンサー (MIDI) サポートを有効にするかどうか + 開始時にALSAシーケンサー(MIDI)サポートを有効にするかどうか - + E&nable ALSA Sequencer support - ALSAシーケンサーサポートを有効(&N) + ALSAシーケンサーサポートを有効化(&N) - + Whether to enable D-Bus interface - D-Busインターフェイスを有効にするかどうか + D-Busインターフェイスを有効にするかどうか - + &Enable D-Bus interface - D-Busインターフェースの有効化(&E) + D-Busインターフェースの有効化(&E) - + Whether to stop JACK audio server on application exit - アプリケーションが終了する時にJACKオーディオサーバーを停止するかどうか + アプリケーションが終了する時にJACKオーディオサーバーを停止するかどうか - + S&top JACK audio server on application exit - JACKオーディオサーバーの自動終了(&S) + JACKオーディオサーバーの自動終了(&S) - + Buttons ボタン - + Whether to hide the left button group on the main window - メインウィンドウ左のボタングループを隠すかどうか + メインウィンドウ上の左側ボタングループを隠すかどうか - + Hide main window &Left buttons - メインウィンドウ左側のボタンを隠す(&L) + メインウィンドウ左側のボタンを隠す(&L) - + Whether to hide the right button group on the main window - メインウィンドウ右のボタングループを隠すかどうか + メインウィンドウ上の右側ボタングループを隠すかどうか - + Hide main window &Right buttons メインウィンドウ右側のボタンを隠す(&R) - + Whether to hide the transport button group on the main window - メインウィンドウのトランスポートボタングループを隠すかどうか + メインウィンドウのトランスポートボタングループを隠すかどうか - + Hide main window &Transport buttons メインウィンドウのトランスポートボタンを隠す(&T) - + Whether to hide the text labels on the main window buttons - メインウィンドウボタンのテキストラベルを隠すかどうか + メインウィンドウボタン上のテキストラベルを隠すかどうか - + Hide main window &button text labels - メインウィンドウボタンのテキストラベルを隠す(&B) + メインウィンドウボタンのテキストラベルを隠す(&B) - + Defaults - 既定 + デフォルト - + &Base font size: 基本フォントサイズ(&B): - + Base application font size (pt.) - アプリケーションの基本フォントサイズ(pt) + アプリケーションの基本フォントサイズ(pt) - + 6 - + - + 7 - + - + 8 - + - + 9 - + - + 11 - + - + 12 - + - - - + + + Warning 警告 - + Some settings have been changed: "%1" Do you want to save the changes? - 設定の一部が変更されています: + 設定の一部が変更されています: "%1" 変更を保存しますか? - + Delete preset: "%1" Are you sure? - プリセットを削除します: + プリセットを削除します: "%1" よろしいですか? - + msec - ミリ秒 + ミリ秒 - + n/a - + - + &Preset Name プリセット名(&P) - + &Server Name サーバー名(&S) - + &Server Path サーバーパス(&S) - + &Driver ドライバー(&D) - + &Interface インターフェース(&I) - + Sample &Rate サンプルレート(&R) - + &Frames/Period - フレーム/ピリオド(&F) + フレーム/ピリオド(&F) - + Periods/&Buffer - ピリオド/バッファー(&B) + ピリオド/バッファー(&B) - + Startup Script - スタートアップスクリプト + スタートアップスクリプト - + Post-Startup Script - ポストスタートアップスクリプト + ポストスタートアップスクリプト - + Shutdown Script - シャットダウンスクリプト + シャットダウンスクリプト - + Post-Shutdown Script - ポストシャットダウンスクリプト + ポストシャットダウンスクリプト - + Active Patchbay Definition - 有効なパッチベイ定義 + 有効なパッチベイ定義 - + Patchbay Definition files - パッチベイ定義ファイル + パッチベイ定義ファイル - + Messages Log - メッセージログ + メッセージログ - + Log files - ログファイル + ログファイル - + Some settings have been changed. Do you want to apply the changes? - いくつかの設定が変更されました。 + 設定が変更されました。 変更を適用しますか? @@ -3759,8 +4324,8 @@ qjackctlSocketForm - Socket - JACK Audio Connection Kit - ソケット - -JACK Audio Connection Kit + Socket + ソケット @@ -3775,22 +4340,22 @@ Socket name (an alias for client name) - ソケット名(クライアント名のエイリアス) + ソケット名(クライアント名のエイリアス) Client name (regular expression) - クライアント名 (正規表現) + クライアント名 (正規表現) Add plug to socket plug list - プラグをソケットプラグリストに追加します + プラグをソケットプラグリストに追加します Add P&lug - プラグ追加(&L) + プラグ追加(&L) @@ -3800,12 +4365,12 @@ Port name (regular expression) - ポート名 (正規表現) + ポート名 (正規表現) Socket plug list - ソケットプラグのリスト + ソケットプラグのリスト @@ -3815,7 +4380,7 @@ Edit currently selected plug - 選択しているプラグを編集します + 選択しているプラグを編集します @@ -3825,7 +4390,7 @@ Remove currently selected plug from socket plug list - ソケットプラグリストから選択しているプラグを外します + ソケットプラグリストから選択しているプラグを削除します @@ -3840,7 +4405,7 @@ Move down currently selected plug in socket plug list - ソケットプラグリストで選択しているプラグをひとつ下に移動します + ソケットプラグリストで選択しているプラグを下に移動します @@ -3850,7 +4415,7 @@ Move up current selected plug in socket plug list - ソケットプラグリストで選択しているプラグをひとつ上に移動します + ソケットプラグリストで選択しているプラグを上に移動します @@ -3860,22 +4425,22 @@ Enforce only one exclusive cable connection - 排他的なケーブル接続を強制します + 排他的なケーブル接続を強制します E&xclusive - 排他的(&X) + 排他的(&X) &Forward: - 転送(&F): + 転送(&F): Forward (clone) all connections from this socket - このソケットからすべての接続を転送(クローン)します + このソケットからすべての接続を転送(クローン)します @@ -3910,7 +4475,7 @@ AL&SA - + ALSA(&S) @@ -3925,7 +4490,7 @@ A socket named "%1" already exists. - ソケット名 "%1" はすでに存在します。 + ソケット名 "%1" はすでに存在します。 @@ -3937,14 +4502,14 @@ Some settings have been changed. Do you want to apply the changes? - いくつかの設定が変更されました。 + 設定が変更されました。 変更を適用しますか? Add Plug - プラグを追加 + プラグの追加 @@ -3992,7 +4557,7 @@ <New> - %1 - <新規> - %1 + <新規> - %1 @@ -4006,7 +4571,7 @@ "%2" Are you sure? - %1を削除しようとしています: + %1を削除しようとしています: "%2" @@ -4015,7 +4580,7 @@ %1 <Copy> - %2 - %1 <コピー> - %2 + %1 <コピー> - %2 diff -Nru qjackctl-0.4.5/src/translations/qjackctl_nl.ts qjackctl-0.6.0/src/translations/qjackctl_nl.ts --- qjackctl-0.4.5/src/translations/qjackctl_nl.ts 2017-04-27 14:44:14.569762974 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_nl.ts 2019-10-17 07:45:45.968673223 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,77 +27,88 @@ QObject - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Start JACK audio server immediately De JACK audio server onmiddlijk starten - + Show help about command line options Toon hulp over command line opties - + Show version information Toon versie informatie - + Option -p requires an argument (preset). Optie -p vereist een argument (preset). - + Usage: %1 [options] [command-and-args] Gebruik: %1 [opties] [commandos-en-args] - + Options: Opties: - + Set active patchbay definition file Kies het actieve patchbay definition bestand - + Set default JACK audio server name Kies de standaard JACK audio server naam - + Option -a requires an argument (path). Optie -a vereist een argument (pad). - + Option -n requires an argument (name). Optie -n vereist een argument (naam). - + Set default settings preset name Kies standaard instellingen preset naam - + %1 (%2 frames) + + + Move + + + + + Rename + + qjackctlAboutForm - About QjackCtl - Over QjackCtl + About + @@ -266,12 +277,12 @@ qjackctlConnect - + Warning Opgelet - + This will suspend sound processing from all client applications. @@ -285,11 +296,6 @@ qjackctlConnectionsForm - - Connections - JACK Audio Connection Kit - Verbindingen - JACK Audio Connectie Kit - - Audio Audio @@ -337,6 +343,11 @@ Alle verbonden poorten afkoppelen + + Connections + Verbindingen + + @@ -370,74 +381,56 @@ MIDI - - Warning - Opgelet - - ALSA ALSA - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - De preset aliases zijn aangepast: - -« %1 » - -Wil u deze aanpassingen opslaan? - qjackctlConnectorView - + &Connect &Verbinden - + Alt+C Connect Verbinden Alt+V - + &Disconnect Af&Koppelen - + Alt+D Disconnect Afkoppelen - Knippen Alt+K - + Disconnect &All &Alles afkoppelen - + Alt+A Disconect All Alles afkoppelen Alt+A - + &Refresh &Verversen - + Alt+R Refresh Verversen @@ -445,218 +438,793 @@ - qjackctlMainForm + qjackctlGraphCanvas - - QjackCtl - QjackCtl + + + Connect + - - + + Disconnect + + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + + + + + &Edit + B&ewerken + + + + &View + + + + + &Zoom + + + + + Co&lors + + + + + S&ort + + + + + &Help + + + + + &Connect + + + + + + Connect + + + + + Connect selected ports + + + + + Ins + + + + + &Disconnect + + + + + + Disconnect + + + + + Disconnect selected ports + + + + + Del + + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + + + + + + + Select All + + + + + Ctrl+A + + + + + Select &None + + + + + + + Select None + + + + + Ctrl+Shift+A + + + + + Select &Invert + + + + + + + Select Invert + + + + + Ctrl+I + + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + + + + + + Menubar + + + + + Show/hide the main program window menubar + + + + + Ctrl+M + + + + + &Toolbar + + + + + + Toolbar + + + + + Show/hide main program window file toolbar + + + + + &Statusbar + + + + + + Statusbar + + + + + Show/hide the main program window statusbar + + + + + Text Beside &Icons + + + + + + Text beside icons + + + + + Show/hide text beside icons + + + + + &Center + + + + + + Center + + + + + Center view + + + + + &Refresh + + + + + + Refresh + + + + + Refresh view + + + + + F5 + + + + + Zoom &In + + + + + + + Zoom In + + + + + Ctrl++ + + + + + Zoom &Out + + + + + + + Zoom Out + + + + + Ctrl+- + + + + + Zoom &Fit + + + + + + + Zoom Fit + + + + + Ctrl+0 + + + + + Zoom &Reset + + + + + + + Zoom Reset + + + + + Ctrl+1 + + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + &Herstel + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + + + + + About... + + + + + About + + + + + Show information about this application program + + + + + About &Qt... + + + + + About Qt... + + + + + About Qt + Over Qt + + + + Show information about the Qt toolkit + + + + + &Undo + + + + + &Redo + + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + + + + + Ready + + + + + Colors - %1 + + + + + qjackctlMainForm + + + &Quit &Sluiten - + Quit processing and exit Stop proces en sluit af - - + + &Start Sta&rt - + Start the JACK server Start de JACK server - + S&top S&top - + Stop the JACK server Stop de JACK server - + St&atus St&atus - - + + Ab&out... &over… - + Show information about this application Toon informatie over deze toepassing - + Show settings and options dialog Toon instellingen en opties venster - - + + &Messages &Berichten - + &Patchbay I don't know a translation to dutch for the word patchbay &Patchbay - + Show/hide the patchbay editor window Toon/verberg de patchbay editor - + &Connect &Verbindingen - - + + Set&up... &Instellingen… - - Show/hide the actual connections patchbay window - Toon/verberg de huidige verbindingen patchbay - - - + JACK server state JACK server status - + JACK server mode JACK server mode - + Sample rate No translation known to Dutch Sample rate - + Time display Tijd weergave - + Transport state Transport status - + Transport BPM Transport BPM - + Transport time Transport tijd - + Show/hide the session management window Toon/verberg het sessie management venster - + Show/hide the messages log/status window Toon/verberg het berichten log/status venster - + + Show/hide the graph window + + + + + Show/hide the connections window + + + + &Backward &Terug - + Backward transport Terugwaarts afspelen - + &Forward &Voorwaarts - + Forward transport Voorwaarts afspelen - - + + &Rewind Te&rugspoelen - + Rewind transport Terugspoelen - - + + Pa&use Pa&use - + Stop transport rolling Stop het afspelen - - + + &Play &Spelen - + Start transport rolling Start het afspelen - - - - - + + + + + + Warning Opgelet - + successfully met succes - + with exit status=%1 met exit status=%1 - + Could not load preset "%1". Retrying with default. @@ -665,7 +1233,7 @@ Opnieuw aan het proberen met standaard. - + Could not load default preset. Sorry. @@ -674,22 +1242,22 @@ Sorry. - + Startup script... Opstart script... - + Startup script terminated Opstart script beëindigd - + JACK is starting... JACK start op... - + Could not start JACK. Sorry. @@ -698,361 +1266,396 @@ Sorry. - + JACK is stopping... JACK stopt... - + Shutdown script... Afsluit script... - - - + + + + Don't ask this again - + Shutdown script terminated Afsluit script beëindigd - + Post-shutdown script... Na-afsluit script... - + Post-shutdown script terminated Na-afsluit script beëindigd - + JACK was stopped JACK is gestopt - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + De preset aliases zijn aangepast: + +« %1 » + +Wil u deze aanpassingen opslaan? + + + Error Fout - + Transport time code Transport tijdscode - + Elapsed time since last reset Verlopen tijd sinds laatste reset - + Elapsed time since last XRUN Verlopen tijd sinds laatste XRUN - + Patchbay activated. Patchbay ingeschakeld. - + Patchbay deactivated. Patchbay uitgeschakeld. - + Statistics reset. Initialisatie van statistieken. - + msec ms - + XRUN callback (%1). - + Buffer size change (%1). Buffergrootte aanpassing (%1). - + Shutdown notification. Afluit melding. - + + Freewheel started... + + + + + Freewheel exited. + + + + checked this is correct if checked means "controlled to see if everything is OK", but if it means checked like in a check box, then the translation should be: "aangevinkt" nagekeken - + connected verbonden - + disconnected afgesloten - + failed mislukt - + Server configuration saved to "%1". Server configuratie opgeslagen in « %1 ». - + Client activated. Client geactiveerd. - + Post-startup script... Na-startup script... - + Post-startup script terminated Na-startup script beëindigd - + Command line argument... - + Command line argument started - + Client deactivated. Client gedeactiveerd. - + Transport rewind. Transport terugspoelen. - + Transport backward. Transport achterwaarts. - - - + + + Starting Startend - + Transport start. - - + + Stopping Stoppend - + Transport stop. - + Transport forward. Transport voorwaarts. - - + + Stopped Gestopt - + Yes Ja - + No Nee - + + FW + + + + RT RT - + Rolling - + Looping - + XRUN callback (%1 skipped). XRUN callback (%1 overgeslagen). - + Started Gestart - + Active Actief - + Activating Activering - + Inactive Inactief - - + + &Hide Ver&hullen - + Mi&nimize Verklei&nen - - + + S&how &Tonen - + Rest&ore &Herstellen - + &Stop &Stop - + &Reset &Herstel - + &Presets &Presets - + &Versioning - + Re&fresh - + &Connections &Verbindingen - + Patch&bay - + + + &Graph + + + + &Transport - + Server settings will be only effective after restarting the JACK audio server. Server instellingen worden toegepast na het herstarten van de JACK audio server. - - + + Information Informatie - + Some settings will be only effective the next time you start this program. Sommige instellingen worden pas toegepast nadat u dit programma opnieuw opstart. - + DSP Load DSP-Verbruik - + XRUN Count (notifications) XRUN Telling (meldingen) - + JACK connection graph change. JACK verbindingen tekening aangepast. - + ALSA connection graph change. ALSA verbindingen aangepast. - + JACK connection change. JACK verbindingen aangepast. - + ALSA connection change. ALSA verbindingen aangepast. - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -1061,17 +1664,17 @@ Wil u de JACK audio server stoppen? - + D-BUS: Service is available (%1 aka jackdbus). DBUS : Service is beschikbaar (%1 ook gekend als jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). DBUS : Service is niet beschikbaar (%1 ook gekend als jackdbus). - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -1082,12 +1685,12 @@ in het menu van het systeem balk icoon. - + Don't show this message again - + Could not start JACK. Maybe JACK audio server is already started. @@ -1096,12 +1699,12 @@ Misschien is de JACK audio server al gestart. - + D-BUS: JACK server is starting... D-BUS : JACK server start op… - + D-BUS: JACK server could not be started. Sorry @@ -1110,7 +1713,7 @@ Sorry - + Some client audio applications are still active and connected. @@ -1121,12 +1724,12 @@ Wil u de JACK audio server stoppen? - + D-BUS: JACK server is stopping... DBUS : JACK server is stoppende… - + D-BUS: JACK server could not be stopped. Sorry @@ -1135,37 +1738,37 @@ Sorry - + JACK was started with PID=%1. JACK is gestart met PID=%1. - + D-BUS: JACK server was started (%1 aka jackdbus). DBUS : JACK server is gestart (%1 ook gekend als jackdbus). - + JACK is being forced... JACK wordt geforceerd… - + D-BUS: JACK server was stopped (%1 aka jackdbus). DBUS : JACK server werd gestopt (%1 soit jackdbus). - + Transport BBT (bar.beat.ticks) - + Patchbay reset. - + Could not load active patchbay definition. "%1" @@ -1174,92 +1777,92 @@ - + JACK has crashed. JACK is ingestort. - + JACK timed out. JACK was te laat. - + JACK write error. JACK schrijffout. - + JACK read error. JACK leesfout. - + Unknown JACK error (%d). Onbekende JACK fout (%d). - + JACK property change. - + Overall operation failed. Gehele toepassing gefaald. - + Invalid or unsupported option. Ongeldige of niet-ondersteunde optie. - + Client name not unique. Client naam niet uniek. - + Server is started. Server is gestart. - + Unable to connect to server. Kan niet met de server verbinden. - + Server communication error. Server communicatie fout. - + Client does not exist. Client bestaat niet. - + Unable to load internal client. Kan interne client niet laden. - + Unable to initialize client. Kan client niet initializeren. - + Unable to access shared memory. Geen toegang tot gedeeld geheugen. - + Client protocol version mismatch. Client protocol versie ongeldig. - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1268,63 +1871,68 @@ Gelieve het berichten venster te lezen voor meer info. - + %1 (%2%) %1 (%2%) - + %1 (%2%, %3 xruns) - + %1 % %1 % - + %1 Hz %1 Hz - + %1 frames %1 frames - + %1 msec %1 ms - - + + S&ession S&essie - + &Load... &Laden... - + &Save... &Bewaren… - + Save and &Quit... Bewaren en af&sluiten… - + Save &Template... &Template bewaren… - + + Do you want to restart the JACK audio server? + + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1335,7 +1943,7 @@ (%4) - + D-BUS: ResetParameterValue('%1'): %2. @@ -1346,7 +1954,7 @@ (%3) - + D-BUS: GetParameterValue('%1'): %2. @@ -1357,7 +1965,7 @@ (%3) - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -1366,17 +1974,17 @@ De ALSA MIDI patchbay zal niet beschikbaar zijn. - + JACK active patchbay scan JACK actieve patchbay scan - + ALSA active patchbay scan ALSA actieve patchbay scan - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1395,8 +2003,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Meldingen / Status - JACK Audio Connectie Kit + Messages / Status + @@ -1567,12 +2175,12 @@ qjackctlPatchbay - + Warning Opgelet - + This will disconnect all sockets. Are you sure? @@ -1584,11 +2192,6 @@ qjackctlPatchbayForm - - Patchbay - JACK Audio Connection Kit - Patchbay - JACK Audio Connectie Kit - - &New &Nieuw @@ -1619,6 +2222,11 @@ Bewaar huidig patchbay profiel + + Patchbay + + + Expand all items Toon alle items @@ -1772,44 +2380,44 @@ Bewerk eigenschappen van geselecteerde uitgang socket - + Warning Opgelet - - + + Error Fout - + New Patchbay definition Nieuwe patchbay definitie - - + + Patchbay Definition files Patchbay definitie bestanden - + Load Patchbay Definition Laad Patchbay Definitie - + Save Patchbay Definition Bewaar Patchbay Definitie - + active actief - + The patchbay definition has been changed: "%1" @@ -1822,17 +2430,17 @@ Wil u de veranderingen bewaren? - + %1 [modified] %1 [aangepast] - + Untitled%1 Ongetieteld%1 - + Could not load patchbay definition file: "%1" @@ -1841,7 +2449,7 @@ « %1 » - + Could not save patchbay definition file: "%1" @@ -1850,7 +2458,7 @@ « %1 » - + Create patchbay definition as a snapshot of all actual client connections? Creëer patchbay definitie als een momentopname @@ -1860,93 +2468,93 @@ qjackctlPatchbayView - + Add... Voeg toe… - + Edit... Bewerk… - + Copy... Kopieer… - + Remove Verwijder - + Exclusive Exclusief - + (None) (Geen) - + Forward Vooruit - + Move Up Omhoog - + Move Down Omlaag - + &Connect &Verbind - + Alt+C Connect Verbind Alt+V - + &Disconnect &Loskoppelen - + Alt+D Disconnect Loskoppelen Alt+L - + Disconnect &All &Alle loskoppelen - + Alt+A Disconect All Alle loskoppelen Alt+A - + &Refresh Ve&rvers - + Alt+R Refresh Ververs @@ -1957,8 +2565,8 @@ qjackctlSessionForm - Session - JACK Audio Connection Kit - Sessie - JACK Audio Connectie Kit + Session + @@ -1967,7 +2575,7 @@ - + &Load... &Laden… @@ -1994,14 +2602,14 @@ - + &Versioning - - + + Re&fresh @@ -2032,7 +2640,7 @@ - + &Add @@ -2043,7 +2651,7 @@ - + &Edit B&ewerken @@ -2054,13 +2662,13 @@ - + Re&move - + &Save... &Bewaar… @@ -2091,46 +2699,46 @@ &Bewaren - - + + Load Session Laad sessie - - + + Session directory Sessie map - + Save Session Bewaar Sessie - + and Quit en Sluit - + Template Sjabloon - + &Clear &Wissen - - - + + + Warning Opgelet - + A session could not be found in this folder: "%1" @@ -2139,17 +2747,17 @@ « %1 » - + %1: loading session... %1 : sessie laden… - + %1: load session %2. %1: sessie laden %2. - + A session already exists in this folder: "%1" @@ -2162,7 +2770,7 @@ Bent u zeker dat u deze bestaande sessie wil overschrijven ? - + This folder already exists and is not empty: "%1" @@ -2175,29 +2783,29 @@ Bent u zeker dat u de bestaande map wil vervangen ? - + %1: saving session... %1 : sessie wordt bewaard… - + %1: save session %2. %1 : sessie wordt bewaard %2. - + New Client - + Save and &Quit... &Bewaren en afsluiten… - + Save &Template... Bewaar S&jabloon… @@ -2213,11 +2821,6 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Instellingen - JACK Audio Connectie Kit - - Settings Instellingen @@ -2229,18 +2832,19 @@ - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 @@ -2269,14 +2873,22 @@ Huidige instellingen preset wissen - - jackstart - jackstart + + jackd + DO NOT TRANSLATE + - - jackd - jackd + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + @@ -2286,32 +2898,44 @@ dummy - dummie + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + oss - oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + coreaudio - coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - freebob - freebob + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2319,1067 +2943,987 @@ Parameters - + Number of periods in the hardware buffer Aantal periodes in hardware buffer - + Priorit&y: Pri&oriteit : - + &Frames/Period: &Frames/Periode: - - + + 16 16 - - + + 32 32 - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Frames per period between process() calls Frames per periode tussen process() calls - + Port Ma&ximum: Poorten ma&ximum : - + 21333 21333 - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + 192000 192000 - + Sample rate in frames per second Sample rate in frames per seconde - + Scheduler priority when running realtime Scheduler prioriteit wanneer in realtime modus - + &Word Length: &Resolutie (bit) : - + Periods/&Buffer: Periodes/&Buffer : - + Word length Resolutie - + Maximum number of ports the JACK server can manage Maximum aantal poorten dat de JACK server aankan - + &Wait (usec): &Wacht (µsec): - + Sample &Rate: Sample &Rate (Hz): - + &Timeout (msec): &Timeout (in ms) : - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + Set client timeout limit in milliseconds Zet client timeout limiet in milisecondes - + &Realtime &Realtime - + Use realtime scheduling Gebruik realtime scheduling - + No Memory Loc&k Geen Memory Loc&k - + Do not attempt to lock memory, even if in realtime mode Probeer niet om geheugen te "locken", zelfs niet in realtime modus - + &Unlock Memory &Unlock Memory - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Deblokkeer geheugen van gemeenschappelijke toolkit libraries (GTK+, QT, FLTK, Wine) - + So&ft Mode So&ft Mode - + Ignore xruns reported by the backend driver Negeer xruns meldingen van de backend driver - + &Monitor &Monitor - + Provide output monitor ports Voorzie monitor uitgang poorten - + Force &16bit Forceer &16bit - + Force 16bit mode instead of failing over 32bit (default) Forceer 16bit in plaats van te falen bij 32bit (standaard) - - H/W M&onitor - H/W M&onitor - - - - Enable hardware monitoring of capture ports - Schakel hardware monitor van opnamepoorten in - - - + H/&W Meter H/&W Meter - + Enable hardware metering on cards that support it Schakel hardware meten in op kaarten die het ondersteunen - + &Ignore H/W &Negeer H/W - + Ignore hardware period/buffer size Negeer hardware period/buffer grootte - + &Output Device: &Output Apparaat: - + &Interface: &Interface : - + Maximum input audio hardware channels to allocate Maximum bruikbare input audio hardware kanalen - + &Audio: &Audio: - + Dit&her: Dit&her: - + External output latency (frames) Externe output vertraging (in frames) - + &Input Device: &Input Apparaat : - + Duplex Duplex - + Capture Only Enkel opnemen - + Playback Only Enkel afspelen - + Provide either audio capture, playback or both Voorzie audio opname, afspelen of beide - - - + + + hw:0 hw:0 - + The PCM device name to use De PCM apparaats naam te gebruiken - - - - + + + + > > - + &Name: &Naam: - + The JACK Audio Connection Kit sound server name De JACK Audio Connectie Kit geluid server naam - - - + + + /dev/dsp /dev/dsp - + Alternate input device for capture Alternatief input apparaat voor opname - + Maximum output audio hardware channels to allocate Maximum bruikbare output audio hardware kanalen - + Alternate output device for playback Alternatief output apparaat voor afspelen - + External input latency (frames) Externe input vertraging (in frames) - + None Geen - + Rectangular Blok - + Shaped Sinus - + Triangular Driehoek - + Set dither mode Kies dither modus - + Whether to give verbose output on messages Geef veel info bij berichten - + Time in seconds that client is delayed after server startup Tijd in secondes waarmee de client wordt vertraagd na opstarten van de server - + Latency: Vertraging: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Output vertraging in milliseconden, berekend vanuit periodes, rate en buffer instellingen - + Options Opties - + Scripting Scripts - + Execute script on Start&up: Script &uitvoeren voor opstarten: - + Whether to execute a custom shell script before starting up the JACK audio server. Custom shell script uitvoeren vóór het opstarten van de JACK audio server. - + Execute script after &Startup: &Script uitvoeren na opstarten: - + Whether to execute a custom shell script after starting up the JACK audio server. Custom shell script uitvoeren na het opstarten van de JACK audio server. - + Execute script on Shut&down: Script uitvoeren &bij afsluiten: - + Whether to execute a custom shell script before shuting down the JACK audio server. Custom shell script uitvoeren vóór het afsluiten van de JACK audio server. - + Command line to be executed before starting up the JACK audio server Commando om uit te voeren vóór het opstarten van de JACK audio server - - - - + + + + Scripting argument meta-symbols Script argument meta symbolen - - - - - - + + + + + + ... - + Browse for script to be executed before starting up the JACK audio server Bladeren naar een script om uit te voeren vóór het starten van de JACK audio server - + Command line to be executed after starting up the JACK audio server Commando om uit te voeren na het opstarten van de JACK audio server - + Browse for script to be executed after starting up the JACK audio server Bladeren naar een script om uit te voeren na het starten van de JACK audio server - + Browse for script to be executed before shutting down the JACK audio server Bladeren naar een script om uit te voeren vóór het stoppen van de JACK audio server - + Command line to be executed before shutting down the JACK audio server Commando om uit te voeren vóór het stoppen van de JACK audio server - + Execute script after Shu&tdown: Script uitvoeren &na afsluiten: - + Whether to execute a custom shell script after shuting down the JACK audio server. Custom shell script uitvoeren na het afsluiten van de JACK audio server. - + Browse for script to be executed after shutting down the JACK audio server Bladeren naar een script om uit te voeren na het stoppen van de JACK audio server - + Command line to be executed after shutting down the JACK audio server Commando om uit te voeren na het stoppen van de JACK audio server - + Statistics Statistieken - + &Capture standard output Standaard &output weergeven - + Whether to capture standard output (stdout/stderr) into messages window Standaard output (stdout/stderr) weergeven in berichten venster - + &XRUN detection regex: regex voor &XRUN detectie: - + xrun of at least ([0-9|\.]+) msecs xrun van ten minste ([0-9|\.]+) ms - + Regular expression used to detect XRUNs on server output messages Expression régulière utilisée pour détecter les désynchronisations (XRUN) dans les messages de sortie du serveur - + Connections Verbindingen - + 10 10 - + Patchbay definition file to be activated as connection persistence profile Patchbay definitie bestand om verbindingen profiel te bewaren - + Browse for a patchbay definition file to be activated Bladeren naar een patchbay definitie bestand om te activeren - + Activate &Patchbay persistence: Activeer &Patchbay bewaring: - + Whether to activate a patchbay definition for connection persistence profile. Patchbay definitie bestand activeren om verbindingen profiel te bewaren. - + Display Weergave - + Time Display Tijdsweergave - - Time F&ormat: - Tijdsf&ormaat: - - - - hh:mm:ss - hh:mm:ss - - - - hh:mm:ss.d - hh:mm:ss.d - - - - hh:mm:ss.dd - hh:mm:ss.dd - - - - hh:mm:ss.ddd - hh:mm:ss.ddd - - - - The general time format on display - Algemeen formaat voor tijdsweergave - - - + Server Suffi&x: - + Transport &Time Code Transport &Time Code - + Transport &BBT (bar:beat.ticks) Transport &BBT (bar:beat.ticks) - + Elapsed time since last &Reset Verlopen tijd sinds laatste &Reset - + Elapsed time since last &XRUN Verlopen tijd sinds laatste &XRUN - + Sample front panel normal display font Voorbeeld hoofdvenster normale weergave lettertype - + Sample big time display font Voorbeeld grote klok weergave lettertype - + Big Time display: Grote klok weergave: - - - - + + + + &Font... &Lettertype… - + Select font for front panel normal display Kies lettertype voor hoofdvenster normale weergave - + Select font for big time display Kies lettertype voor grote klok weergave - + Normal display: Normale weergave: - - &Display shiny glass light effect - &Weergave glanzend glas licht effect - - - - Whether to enable a shiny glass light effect on the main display - Een glanzend glass licht effect gebruiken in het hoofdvenster - - - + Messages Window Berichten venster - + Sample messages text font display Voorbeeld lettertype voor berichten - + Select font for the messages text display Kies lettertype voor tekst in berichtenvenster - + &Messages limit: &Berichten limiet: - + Whether to keep a maximum number of lines in the messages window Een maximum aantal lijnen behouden in het berichten venster - + 100 100 - + 250 250 - + 2500 2500 - + The maximum number of message lines to keep in view Het maximum aantal berichten om in beeld te houden - + Connections Window Verbindingen venster - + Sample connections view font Voorbeeld lettertype verbindingen venster - + Select font for the connections view Kies lettertype voor het verbindingen venster - + &Icon size: &Icoon grootte: - + 16 x 16 16 x 16 - + 32 x 32 32 x 32 - + 64 x 64 64 x 64 - + The icon size for each item of the connections view De grootte van het icoon voor elk element uit het verbindingen venster - + Ena&ble client/port aliases editing (rename) Client/poort &hernoemen mogelijk maken (aliases) - + Whether to enable in-place client/port name editing (rename) Bewerken van de naam van een client/poort toestaan - + E&nable client/port aliases Activeer client/p&ort aliasen - + Whether to enable client/port name aliases on the connections window Alternatieve naam (alias) van client/poort tonen in verbindingen venster - - Draw connection and patchbay lines as Be&zier curves - Teken verbindingen en patchbay lijnen als Be&zier curves - - - - Whether to draw connection lines as cubic Bezier curves - Verbindingen en patchbay lijnen als cubische Bezier curves tekenen - - - + Misc Meer - + Other Andere - + &Start JACK audio server on application startup &Start JACK audio server bij opstarten van QjackCtl - + Whether to start JACK audio server immediately on application startup JACK audio server onmiddelijk starten bij opstarten van de toepassing - + &Confirm application close &Bevestig sluiten van QjackCtl - + Whether to ask for confirmation on application exit Vragen om bevestiging wanneer de toepassing wordt beëindigd - + &Keep child windows always on top &Kind vensters steeds bovenaan houden - + Whether to keep all child windows on top of the main window Kind vensters al dan niet over het hoofdvenster laten verschijnen - + &Enable system tray icon Activ&eer systeem balk icoon - + Whether to enable the system tray icon Minimaliseren naar systeem balk icoon of niet - + S&ave JACK audio server configuration to: Bew&aar JACK audio server configuratie als: - + Whether to save the JACK server command-line configuration into a local file (auto-start) De JACK server commando configuratie in een lokaal bestand opslaan (auto start) - + .jackdrc .jackdrc - + The server configuration local file name (auto-start) Naam van het lokale server configuratie bestand (auto start) - - C&onfigure as temporary server - C&onfigureer als tijdelijke server - - - - Whether to exit once all clients have closed (auto-start) - Afsluiten eens alle clienten afgesloten werden (auto start) - - - - Confirm server sh&utdown - Bevestig s&toppen van de server - - - - Whether to ask for confirmation on JACK audio server shutdown - Bevestiging vragen bij het stoppen van de JACK audio server - - - + Buttons Knoppen - + Hide main window &Left buttons Verberg knoppen aan &linkerkant van hoofdvenster - + Whether to hide the left button group on the main window De knoppen groep aan de linkerkant van het hoofdvenster verbergen - + Hide main window &Right buttons Verberg knoppen aan &rechterkant van hoofdvenster - + Whether to hide the right button group on the main window De knoppen groep aan de rechterkant van het hoofdvenster verbergen - + Hide main window &Transport buttons Verberg hoofdvenster &Transport knoppen - + Whether to hide the transport button group on the main window De transport knoppengroep in het hoofdvenster al dan niet verbergen - + Hide main window &button text labels Verberg tekst bij &knoppen in hoofdvenster - + Whether to hide the text labels on the main window buttons Verberg de tekst labels onder knoppen in het hoofdvenster - - - + + + Warning Opgelet - + msec ms - + n/a n/a - + &Preset Name &Preset Naam - + &Server Name &Server Naam - + &Server Path &Server Pad - + &Driver &Driver - + &Interface &Interface - + Sample &Rate Sample &Rate - + &Frames/Period &Frames/Periode - + Periods/&Buffer Periodes/&Buffer - + Startup Script Opstart Script - + Post-Startup Script Na-opstart Script - + Shutdown Script Afsluit Script - + Post-Shutdown Script Na-afsluit Script - + Patchbay Definition files Patchbay Definitie bestanden - + Active Patchbay Definition Actieve Patchbay Definitie @@ -3389,54 +3933,46 @@ De te gebruiken audio backend driver interface - + &Verbose messages Uit&voerige berichten - + MIDI Driv&er: MIDI Driv&er: - + none geen - + raw - raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + The ALSA MIDI backend driver to use De te gebruiken ALSA MIDI backend driver - - jackdmp - jackdmp - - - - firewire - firewire - - - - - + + + plughw:0 plughw:0 - + Some settings have been changed: "%1" @@ -3449,7 +3985,7 @@ Wil u deze aanpassingen opslaan? - + Delete preset: "%1" @@ -3462,7 +3998,7 @@ Bent u zeker? - + Some settings have been changed. Do you want to apply the changes? @@ -3471,304 +4007,336 @@ Wil u de veranderingen toepassen? - + Messages Log Berichten Log - + Log files Log bestanden - - sun - sun - - - + netone - netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - - - + + + /dev/audio /dev/audio - + &Channels: &Sporen: - + Server path (command line prefix) - + Maximum number of audio channels to allocate Maximum aantal te gebruiken audio sporen - + &Channels I/O: - + &Latency I/O: - + Logging Loggen - + Messages log file Berichten log bestand - + Browse for the messages log file location Blader naar de berichten log bestand locatie - + Whether to activate a messages logging to file. Berichten opslaan in een bestand activeren. - + Server &Prefix: - + Extra driver options (command line suffix) - + Start De&lay: - + secs - + 0 msecs - + Please do not touch these settings unless you know what you are doing. - + &Messages log file: &Berichten log bestand: - + Whether to enable blinking (flashing) of the server mode (RT) indicator Activeer het knipperen van de server modus (RT) indicator - + Blin&k server mode indicator &Knipperende server modus indicator - + &JACK client/port aliases: &JACK client/poort aliassen: - + JACK client/port aliases display mode JACK client/poort aliassen weergave modus - + Default Standaard - + First Eerste - + Second Tweede - + Whether to start minimized to system tray Start met geminimaliseerd systeem balk icoon - + JACK client/port pretty-name (metadata) display mode - + Advanced - + Whether to reset all connections when a patchbay definition is activated. - + &Reset all connections on patchbay activation - + Whether to issue a warning on active patchbay port disconnections. - + &Warn on active patchbay disconnections - + Enable JA&CK client/port pretty-names (metadata) - + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + + + + + Confirm server sh&utdown and/or restart + + + + Whether to show system tray message on main window close - + Sho&w system tray message on close - + Start minimi&zed to system tray - + Whether to restrict to one single application instance (X11) Beperken tot één enkele toepassings instantie (X11) - + Single application &instance Slechts één QjackCtl laten draa&ien - + Whether to enable ALSA Sequencer (MIDI) support on startup Activeer ALSA Sequencer (MIDI) ondersteuning bij opstarten - + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + + + + E&nable ALSA Sequencer support Activeer &ALSA Sequencer ondersteuning - + Whether to enable JACK D-Bus interface - + &Enable JACK D-Bus interface - + Whether to stop JACK audio server on application exit - + S&top JACK audio server on application exit - + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + Defaults Standaard - + &Base font size: &Basis lettertype grootte: - + Base application font size (pt.) Basis lettertype grootte voor toepassing (pt.) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 11 11 - + 12 12 - + net - net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface D-Bus activeren - + &Enable D-Bus interface &D-Bus interface activeren - + Number of microseconds to wait between engine processes (dummy) Aantal microseconden wachten tussen engine processen (dummie) @@ -3776,11 +4344,6 @@ qjackctlSocketForm - - Socket - JACK Audio Connection Kit - Socket - JACK Audio Connectie Kit - - &Socket &Socket @@ -3846,6 +4409,11 @@ Verwijder geselecteerde plug uit socket plug lijst + + Socket + Socket + + &Client: &Client: diff -Nru qjackctl-0.4.5/src/translations/qjackctl_pt.ts qjackctl-0.6.0/src/translations/qjackctl_pt.ts --- qjackctl-0.4.5/src/translations/qjackctl_pt.ts 1970-01-01 00:00:00.000000000 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_pt.ts 2019-10-17 07:45:45.972673223 +0000 @@ -0,0 +1,4599 @@ + + + + + PortAudioProber + + + Probing... + Pesquisando... + + + + Please wait, PortAudio is probing audio hardware. + Por favor espere, o PortAudio está testando o hardware de áudio. + + + + Warning + Aviso + + + + Audio hardware probing timed out. + O teste de hardware de áudio atingiu o tempo limite. + + + + QObject + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 + + + + + Start JACK audio server immediately + Iniciar servidor de áudio JACK agora + + + + Set active patchbay definition file + Definir arquivo de definição de patchbay ativo + + + + Show help about command line options + Mostrar ajuda sobre opções de linha de comando + + + + Show version information + Mostrar informações da versão + + + + Option -p requires an argument (preset). + Opção -p requer um argumento (preset). + + + + Usage: %1 [options] [command-and-args] + Uso: %1 [options] [command-and-args] + + + + Options: + Opções: + + + + Set default settings preset name + Definir o nome do preset das configurações padrão + + + + Option -a requires an argument (path). + A opção -a requer um argumento (caminho). + + + + Set default JACK audio server name + Definir o nome do servidor de áudio JACK padrão + + + + Option -n requires an argument (name). + Opção -n requer um argumento (nome). + + + + %1 (%2 frames) + + + + + Move + + + + + Rename + + + + + qjackctlAboutForm + + + About + Sobre... + + + + About Qt + Sobre QT + + + + &Close + &Fechar + + + + Version + Versão + + + + Debugging option enabled. + Depuração habilitada. + + + + System tray disabled. + Bandeja do sistema desativada. + + + + Transport status control disabled. + Controle de status de transporte desativado. + + + + Realtime status disabled. + Status de tempo real desativado. + + + + XRUN delay status disabled. + Atraso de XRUN desativado. + + + + Maximum delay status disabled. + Status de atraso máximo desativado. + + + + ALSA/MIDI sequencer support disabled. + Suporte ao sequenciador ALSA/MIDI desativado. + + + + Website + Website + + + + This program is free software; you can redistribute it and/or modify it + Este programa é software livre; você pode redistribuí-lo e / ou modificá-lo + + + + under the terms of the GNU General Public License version 2 or later. + sob os termos da GNU General Public License versão 2 ou posterior. + + + + JACK MIDI support disabled. + Suporte JACK MIDI desativado. + + + + JACK Port aliases support disabled. + Suporte a aliases das portas JACK desativadao. + + + + D-Bus interface support disabled. + Suporte à interface D-Bus desativado. + + + + JACK Session support disabled. + Suporte para sessão JACK desativado. + + + + Using: JACK %1 + Usando: JACK %1 + + + + qjackctlClientListView + + + &Connect + &Conectar + + + + Alt+C + Connect + Alt+C + + + + &Disconnect + &Desconectar + + + + Alt+D + Disconnect + Alt+D + + + + Disconnect &All + Desconectar &Tudo + + + + Alt+A + Disconect All + Alt+T + + + + Re&name + Re&nomear + + + + Alt+N + Rename + Alt+N + + + + &Refresh + &Atualizar + + + + Alt+R + Refresh + Alt+R + + + + Readable Clients / Output Ports + Clientes legíveis / Portas de saída + + + + Writable Clients / Input Ports + Clientes graváveis / Portas de entrada + + + + qjackctlConnect + + + Warning + Aviso + + + + This will suspend sound processing +from all client applications. + +Are you sure? + Isto suspenderá o processamento de som +para todas as aplicações do cliente. + +Tem certeza? + + + + qjackctlConnectionsForm + + + Audio + Áudio + + + + + + &Connect + &Conectar + + + + + + Connect currently selected ports + Conectar portas selecionadas + + + + + + &Disconnect + &Desconectar + + + + + + Disconnect currently selected ports + Desconectar as portas selecionadas + + + + + + Disconnect &All + Desconectar &Tudo + + + + + + Disconnect all currently connected ports + Desconectar todas as portas selecionadas + + + + + + &Refresh + &Atualizar + + + + + + Refresh current connections view + Atualizar a visualização das conexões atuais + + + + Connections + Conexões + + + + MIDI + MIDI + + + + ALSA + ALSA + + + + + + Expand all client ports + Expandir todas as portas de clientes + + + + + + E&xpand All + E&xpandir Tudo + + + + qjackctlConnectorView + + + &Connect + &Conectar + + + + Alt+C + Connect + Alt+C + + + + &Disconnect + &Desconectar + + + + Alt+D + Disconnect + Alt+D + + + + Disconnect &All + Desconectar &Tudo + + + + Alt+A + Disconect All + Alt+T + + + + &Refresh + &Atualizar + + + + Alt+R + Refresh + Alt+R + + + + qjackctlGraphCanvas + + + + Connect + Conectar + + + + Disconnect + Disconectar + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + &Gráfico + + + + &Edit + &Editar + + + + &View + &Visualizar + + + + &Zoom + &Zoom + + + + Co&lors + + + + + S&ort + + + + + &Help + &Ajuda + + + + &Connect + &Conectar + + + + + Connect + Conectar + + + + Connect selected ports + Conectar portas selecionadas + + + + Ins + Entradas + + + + &Disconnect + &Desconectar + + + + + Disconnect + Desconectar + + + + Disconnect selected ports + Desconectar portas selecionadas + + + + Del + Del + + + + Cl&ose + Fe&char + + + + + Close + Fechar + + + + Close this application window + Feche esta janela da aplicação + + + + Select &All + Selecionar &Tudo + + + + + + Select All + Selecionar Tudo + + + + Ctrl+A + Ctrl+A + + + + Select &None + Selecionar &Nenhum + + + + + + Select None + Selecionar Nenhum + + + + Ctrl+Shift+A + Ctrl+Shift+A + + + + Select &Invert + Selecionar &Inverter + + + + + + Select Invert + Selecionar Inverter + + + + Ctrl+I + Ctrl+I + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + &Barra de menu + + + + + Menubar + Barra de menu + + + + Show/hide the main program window menubar + Mostrar/ocultar a barra de menus da janela principal do programa + + + + Ctrl+M + Ctrl+M + + + + &Toolbar + &Barra de ferramentas + + + + + Toolbar + Barra de ferramentas + + + + Show/hide main program window file toolbar + Mostrar/ocultar a barra de ferramentas do arquivo da janela principal do programa + + + + &Statusbar + &Barra de status + + + + + Statusbar + Barra de status + + + + Show/hide the main program window statusbar + Mostrar/ocultar a barra de status da janela principal do programa + + + + Text Beside &Icons + Texto ao lado de &ícones + + + + + Text beside icons + Texto ao lado de ícones + + + + Show/hide text beside icons + Mostrar/ocultar texto ao lado de ícones + + + + &Center + &Centro + + + + + Center + Centro + + + + Center view + Visão central + + + + &Refresh + &Atualizar + + + + + Refresh + Atualizar + + + + Refresh view + Atualizar visualização + + + + F5 + F5 + + + + Zoom &In + Ampli&ar + + + + + + Zoom In + Ampliar + + + + Ctrl++ + Ctrl++ + + + + Zoom &Out + Diminu&ir + + + + + + Zoom Out + Diminuir + + + + Ctrl+- + Ctrl+- + + + + Zoom &Fit + Ajuste de &Zoom + + + + + + Zoom Fit + Ajuste de Zoom + + + + Ctrl+0 + Ctrl+0 + + + + Zoom &Reset + Redefinir &Zoom + + + + + + Zoom Reset + Redefinir Zoom + + + + Ctrl+1 + Ctrl+1 + + + + &Zoom Range + &Alcance de Zoom + + + + + + Zoom Range + Alcance de Zoom + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + &Reset + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + Sobre... + + + + About... + Sobre... + + + + About + Sobre... + + + + Show information about this application program + Mostrar informações sobre este aplicativo + + + + About &Qt... + Sobre &Qt... + + + + About Qt... + Sobre Qt... + + + + About Qt + Sobre Qt + + + + Show information about the Qt toolkit + Mostrar informações sobre as ferramentas do Qt + + + + &Undo + &Desfazer + + + + &Redo + &Refazer + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + Zoom + + + + Ready + Pronto + + + + Colors - %1 + + + + + qjackctlMainForm + + + + &Quit + &Sair + + + + Quit processing and exit + Terminar processamento e sair + + + + + &Start + &Iniciar + + + + Start the JACK server + Iniciar servidor JACK + + + + S&top + P&arar + + + + Stop the JACK server + Parar servidor JACK + + + + St&atus + E&stado + + + + + Ab&out... + So&bre... + + + + Show information about this application + Mostrar informações sobre esta aplicação + + + + Show settings and options dialog + Mostrar opções e preferências + + + + + &Messages + &Mensagens + + + + Patch&bay + Patch&bay + + + + Show/hide the patchbay editor window + Mostrar/ocultar o editor de patchbay + + + + &Connect + &Conexões + + + + JACK server state + Estado do servidor JACK + + + + JACK server mode + Modo do servidor JACK + + + + Sample rate + Taxa de amostragem + + + + Time display + Visor do tempo + + + + Transport state + Estado do transporte + + + + Transport BPM + BPM do transporte + + + + Transport time + Tempo do transporte + + + + Show/hide the graph window + + + + + Show/hide the connections window + + + + + Backward transport + Retroceder transporte + + + + Forward transport + Avançar transporte (Alt+L) + + + + Rewind transport + Rebobinar transporte + + + + Stop transport rolling + Parar transporte + + + + Start transport rolling + Iniciar transporte + + + + + + + + + Warning + Aviso + + + + successfully + satisfatoriamente + + + + with exit status=%1 + com saída estado %1 + + + + Could not load preset "%1". + +Retrying with default. + Não foi possível carregar predefinição "%1". + +Tentando com a predefinição padrão. + + + + Could not load default preset. + +Sorry. + Não foi possível carregar predefinição + +Desculpe. + + + + Startup script... + Script de inicialização... + + + + Startup script terminated + O script de inicialização finalizou + + + + JACK is starting... + JACK está iniciando... + + + + Could not start JACK. + +Sorry. + Não foi possível iniciar o JACK. + +Desculpe. + + + + JACK is stopping... + JACK está parando... + + + + The program will keep running in the system tray. + +To terminate the program, please choose "Quit" +in the context menu of the system tray icon. + O programa seguirá rodando na bandeja do sistema. + +Para terminá-lo, por favor escolha "Sair" +no menu contextual do ícone na bandeja de sistema. + + + + Shutdown script... + Script de desligamento... + + + + Shutdown script terminated + O script de desligamento finalizou + + + + JACK was stopped + JACK foi parado + + + + Post-shutdown script... + Script pós-desligamento... + + + + D-BUS: Service is available (%1 aka jackdbus). + D-BUS: Disponível (%1 aka jackdbus). + + + + D-BUS: Service not available (%1 aka jackdbus). + D-BUS: Indisponível (%1 aka jackdbus). + + + + Don't show this message again + Não mostrar esta mensagem novamente + + + + + + + Don't ask this again + Não perguntar novamente + + + + D-BUS: JACK server is starting... + D-BUS: Iniciando servidor JACK... + + + + D-BUS: JACK server could not be started. + +Sorry + D-BUS: O servidor JACK não pode ser iniciado. + +Desculpe + + + + D-BUS: JACK server is stopping... + D-BUS: Parando o servidor JACK... + + + + D-BUS: JACK server could not be stopped. + +Sorry + D-BUS: O servidor JACK não pôde ser parado. + +Desculpe + + + + Post-shutdown script terminated + O script pós-desligamento finalizou + + + + D-BUS: JACK server was started (%1 aka jackdbus). + D-BUS: O servidor JACK foi iniciado (%1 aka jackdbus). + + + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Os aliases predefinidos foram alterados: + +"%1" + +Deseja salvar as alterações?? + + + + D-BUS: JACK server was stopped (%1 aka jackdbus). + D-BUS: O servidor JACK foi parado (%1 aka jackdbus). + + + + Error + Erro + + + + Transport time code + Código de tempo de transporte + + + + Elapsed time since last reset + Tempo transcorrido desde o último reset + + + + Elapsed time since last XRUN + Tempo transcorrido desde o último XRUN + + + + Patchbay activated. + Patchbay ativado. + + + + Patchbay deactivated. + Patchbay desativado. + + + + Statistics reset. + Reiniciar estatísticas. + + + + msec + mseg + + + + XRUN callback (%1). + XRUN callback (%1). + + + + Buffer size change (%1). + Mudança de tamanho de buffer (%1). + + + + Shutdown notification. + Notificação de desligamento. + + + + Freewheel started... + + + + + Freewheel exited. + + + + + JACK property change. + Propriedades do JACK mudaram + + + + checked + verificado + + + + connected + conectado + + + + disconnected + desconectado + + + + failed + falhou + + + + Server configuration saved to "%1". + Configuração do servidor salva em "%1". + + + + Client activated. + Cliente ativado. + + + + Post-startup script... + Script de pós-inicialização... + + + + Post-startup script terminated + O script de pós-inicialização finalizou + + + + Command line argument... + Argumento da linha de comando... + + + + Command line argument started + Argumento da linha de comando iniciado + + + + Client deactivated. + Cliente desativado. + + + + Transport rewind. + Rebobinar transporte. + + + + Transport backward. + Retroceder transporte. + + + + + + Starting + Iniciando + + + + Transport start. + Iniciar transporte. + + + + + Stopping + Parando + + + + Transport stop. + Parar transporte. + + + + Transport forward. + Avançar transporte. + + + + + Stopped + Parado + + + + Yes + Sim + + + + No + Não + + + + FW + + + + + RT + RT + + + + Rolling + Rolling + + + + Looping + Looping + + + + XRUN callback (%1 skipped). + XRUN callback (%1 omitidos). + + + + Started + Iniciado + + + + Active + Ativo + + + + Activating + Ativando + + + + Inactive + Inativo + + + + + &Hide + &Ocultar + + + + Mi&nimize + Mi&nimizar + + + + + S&how + M&ostrar + + + + Rest&ore + Rest&aurar + + + + &Stop + &Parado + + + + &Reset + &Reset + + + + &Connections + &Conexões + + + + Server settings will be only effective after +restarting the JACK audio server. + As configurações do servidor só serão efetivadas +após a reinicialização do servidor de áudio JACK. + + + + Do you want to restart the JACK audio server? + + + + + D-BUS: SetParameterValue('%1', '%2'): + +%3. +(%4) + + + + + D-BUS: ResetParameterValue('%1'): + +%2. +(%3) + + + + + D-BUS: GetParameterValue('%1'): + +%2. +(%3) + + + + + + Information + Informação + + + + Some settings will be only effective +the next time you start this program. + Algumas configurações só serão efetivas +na próxima vez que você iniciar este programa. + + + + Could not open ALSA sequencer as a client. + +ALSA MIDI patchbay will be not available. + Não foi possível abrir o sequenciador do ALSA como um cliente. + +O patchbay MIDI do ALSA não estará disponivel. + + + + JACK is currently running. + +Do you want to terminate the JACK audio server? + JACK se está sendo executado. + +Deseja finalziar o servidor de áudio JACK? + + + + Could not start JACK. + +Maybe JACK audio server is already started. + Não foi possível incializar o JACK. + +Talves o JACK já tenha sido inicializado. + + + + Some client audio applications +are still active and connected. + +Do you want to stop the JACK audio server? + Algumas aplicações de áudio +estão ativas e conectadas. + +Deseja parar o servidor de áudio JACK? + + + + JACK was started with PID=%1. + JACK inicializou com PID=%1. + + + + JACK is being forced... + JACK está sendo forçado... + + + + Patchbay reset. + Patchbay redefinido + + + + JACK connection graph change. + Alteração no gráfico de conexão JACK. + + + + JACK has crashed. + JACK caiu. + + + + JACK timed out. + Tempo de espera do JACK esgotado. + + + + JACK write error. + Erro de gravação JACK. + + + + JACK read error. + Error de leitura JACK. + + + + Unknown JACK error (%d). + Erro JACK desconhecido (%d). + + + + ALSA connection graph change. + Alteração no gráfico de conexão ALSA. + + + + JACK active patchbay scan + Varredura ativa do patchbay do JACK + + + + ALSA active patchbay scan + Varredura ativa do patchbay ALSA + + + + JACK connection change. + Alteração de conexão JACK. + + + + ALSA connection change. + Alteração de conexão ALSA. + + + + A patchbay definition is currently active, +which is probable to redo this connection: + +%1 -> %2 + +Do you want to remove the patchbay connection? + Uma definição de patchbay está atualmente ativa, +o que é provável para refazer esta conexão: + +%1 -> %2 + +Deseja remover a conexão? + + + + Overall operation failed. + Operação global falhou. + + + + Invalid or unsupported option. + Opcão inválida ou não soportada. + + + + Client name not unique. + O nome do cliente não é único. + + + + Server is started. + O servidor foi inicializado. + + + + Unable to connect to server. + Não foi possível conectar-se ao servidor. + + + + Server communication error. + Erro de comunicação com o servidor. + + + + Client does not exist. + Cliente não existe. + + + + Unable to load internal client. + Não é possível carregar o cliente interno. + + + + Unable to initialize client. + Não é possível inicializar o cliente. + + + + Unable to access shared memory. + Não é possível acessar a memória compartilhada. + + + + Client protocol version mismatch. + Incompatibilidade de versão de protocolo do cliente. + + + + Could not connect to JACK server as client. +- %1 +Please check the messages window for more info. + Não foi possível conectar-se ao servidor JACK como cliente. +- %1 +Por favor, verifique a janela de mensagens para mais informações. + + + + %1 (%2%) + %1 (%2%) + + + + %1 % + %1 % + + + + %1 Hz + %1 Hz + + + + %1 frames + %1 quadros + + + + %1 msec + %1 mseg + + + + &Presets + &Presets + + + + + &Graph + &Gráfico + + + + &Transport + &Transporte + + + + + &Rewind + Re&bobinar + + + + + &Play + &Reproduzir + + + + + Pa&use + Pa&usa + + + + &Patchbay + &Patchbay + + + + DSP Load + Uso de CPU do DSP + + + + XRUN Count (notifications) + Conta de XRUNs (notificações) + + + + &Backward + &Retroceder + + + + &Forward + &Avançar + + + + + Set&up... + Con&figurar... + + + + + S&ession + S&essão + + + + &Load... + &Abrir... + + + + &Save... + &Salvar... + + + + Save and &Quit... + Salvar e &Sair... + + + + Save &Template... + Salvar mo&delo... + + + + Show/hide the session management window + Mostrar/ocultar a janela de gerenciamento de sessão + + + + Show/hide the messages log/status window + Mostrar/ocultar a janela de log/status das mensagens + + + + Could not load active patchbay definition. + +"%1" + +Disabled. + Não foi possível carregar a definição de patchbay ativa. + +"%1" + +Foi desabilitado. + + + + &Versioning + &Versionamento + + + + Re&fresh + At&ualizar + + + + %1 (%2%, %3 xruns) + %1 (%2%, %3 xruns) + + + + Transport BBT (bar.beat.ticks) + Transportar BBT (bar.beat.ticks) + + + + qjackctlMessagesStatusForm + + + Messages / Status + + + + + &Messages + &Mensagens + + + + Messages log + Registro de mensagens + + + + Messages output log + Registro de mensagens + + + + &Status + &Estado + + + + Status information + Informação de estado + + + + Statistics since last server startup + Estatísticas desde a última inicialização do servidor + + + + Description + Descrição + + + + Value + Valor + + + + Reset XRUN statistic values + Reiniciar estatísticas de XRUN + + + + Re&set + Re&iniciar + + + + Refresh XRUN statistic values + Atualizar estatísticas de XRUN + + + + &Refresh + &Atualizar + + + + Server name + Nome do servidor + + + + Server state + Estado do servidor + + + + DSP Load + Uso de CPU do DSP + + + + Sample Rate + Taxa de amostragem + + + + Buffer Size + Tamanho do Buffer + + + + Realtime Mode + Modo Realtime + + + + Transport state + Estado do transporte + + + + Transport Timecode + Código de tempo do transporte + + + + Transport BBT + BBT do Transporte + + + + Transport BPM + BPM do transporte + + + + XRUN count since last server startup + XRUNs desde a última inicialização + + + + XRUN last time detected + XRUN detectado última vez + + + + XRUN last + Último XRUN + + + + XRUN maximum + Máximo de XRUN + + + + XRUN minimum + Mínimo de XRUN + + + + XRUN average + Média de XRUN + + + + XRUN total + Total de XRUN + + + + Maximum scheduling delay + Atraso máximo de agendamento (scheduling) + + + + Time of last reset + Hora da última reinicialização + + + + Logging stopped --- %1 --- + Registro parado --- %1 --- + + + + Logging started --- %1 --- + Registro iniciado --- %1 --- + + + + qjackctlPatchbay + + + Warning + Aviso + + + + This will disconnect all sockets. + +Are you sure? + Isso desconectará todos os soquetes. + +Está certo disto? + + + + qjackctlPatchbayForm + + + &New + &Novo + + + + Create a new patchbay profile + Crie um novo perfil de patchbay + + + + &Load... + &Abrir... + + + + Load patchbay profile + Carregar perfil de patchbay + + + + &Save... + &Salvar... + + + + Save current patchbay profile + Salvar o perfil atual do patchbay + + + + Acti&vate + Ati&var + + + + Toggle activation of current patchbay profile + Ativar/desativar perfil atual do patchbay + + + + &Connect + &Conectar + + + + Connect currently selected sockets + Conecte os soquetes atualmente selecionados + + + + &Disconnect + &Desconectar + + + + Disconnect currently selected sockets + Desconectar soquetes selecionados no momento + + + + Disconnect &All + Desconectar &Tudo + + + + Disconnect all currently connected sockets + Desconecte todos os soquetes conectados no momento + + + + &Refresh + &Atualizar + + + + Refresh current patchbay view + Atualizar a exibição atual do patchbay + + + + + Down + Baixar + + + + + Move currently selected output socket down one position + Mover o soquete de saída selecionado para uma posição abaixo + + + + + Add... + Adicionar... + + + + Create a new output socket + Criar um novo soquete de saída + + + + + Edit... + Editar... + + + + Edit currently selected input socket properties + Editar propriedades do soquete de entrada selecionadas + + + + + Up + Acima + + + + + Move currently selected output socket up one position + Mover o soquete de saída selecionado atualmente para cima uma posição + + + + + Remove + Remover + + + + Remove currently selected output socket + Remover soquete de saída selecionado no momento + + + + + Copy... + Copiar... + + + + Duplicate (copy) currently selected output socket + Duplicar (copiar) o soquete de saída selecionado + + + + Patchbay + + + + + Remove currently selected input socket + Remover o soquete de entrada selecionado + + + + Duplicate (copy) currently selected input socket + Duplicar (copiar) o soquete de entrada selecionado + + + + Create a new input socket + Criar um novo soquete de entrada + + + + Edit currently selected output socket properties + Editar as propriedades do soquete de saída selecionado + + + + Warning + Aviso + + + + active + Ativo + + + + New Patchbay definition + Nova definição de patchbay + + + + + Patchbay Definition files + Arquivos de definições de patchbay + + + + Load Patchbay Definition + Carregar definição de patchbay + + + + Save Patchbay Definition + Salvar definição de patchbay + + + + The patchbay definition has been changed: + +"%1" + +Do you want to save the changes? + A definição de patchbay foi alterada: + +"%1" + +Você quer salvar as alterações?? + + + + %1 [modified] + %1 [modificado] + + + + Untitled%1 + Sem Título%1 + + + + + Error + Erro + + + + Could not load patchbay definition file: + +"%1" + Não foi possível carregar o arquivo de definição do patchbay: + +"%1" + + + + Could not save patchbay definition file: + +"%1" + Não foi possível salvar o arquivo de definição do patchbay: + +"%1" + + + + Create patchbay definition as a snapshot +of all actual client connections? + Criar definição de patchbay como um snapshot +de todas as conexões atuais do cliente?? + + + + Current (recent) patchbay profile(s) + Perfil(is) atual(is) (recente(s)) do patchbay + + + + Expand all items + Expandir todos os elementos + + + + E&xpand All + E&xpandir Todos + + + + qjackctlPatchbayView + + + Add... + Adicionar... + + + + Edit... + Editar... + + + + Copy... + Copiar... + + + + Remove + Remover + + + + Exclusive + Exclusivo + + + + Move Up + Subir + + + + Move Down + Abaixar + + + + &Connect + &Conectar + + + + Alt+C + Connect + Alt+C + + + + &Disconnect + &Desconectar + + + + Alt+D + Disconnect + Alt+D + + + + Disconnect &All + Desconectar &Tudo + + + + Alt+A + Disconect All + Alt+T + + + + &Refresh + &Atualizar + + + + Alt+R + Refresh + Alt+R + + + + Forward + Avançar + + + + (None) + (Nenhum) + + + + qjackctlSessionForm + + + Load session + Carregar sessão + + + + + &Load... + &Abrir... + + + + Recent session + Sessão recente + + + + + &Recent + &Recente + + + + Save session + Salvar sessão + + + + + &Save... + &Salvar... + + + + Client / Ports + Cliente/Portas + + + + UUID + UUID + + + + Command + Comando + + + + + Load Session + Carregar Sessão + + + + + Session directory + Diretório da sessão + + + + Save Session + Salvar Sessão + + + + and Quit + e Sair + + + + Template + Modelo + + + + &Clear + &Limpar + + + + + + Warning + Aviso + + + + A session could not be found in this folder: + +"%1" + Não foi possível encontrar uma sessão nesta pasta: + +"%1" + + + + %1: loading session... + %1: carregando sessão... + + + + %1: load session %2. + %1: carregar sessão %2. + + + + A session already exists in this folder: + +"%1" + +Are you sure to overwrite the existing session? + Uma sessão já existe nesta pasta: + +"%1" + +Você tem certeza de sobrescrever a sessão existente? + + + + This folder already exists and is not empty: + +"%1" + +Are you sure to overwrite the existing folder? + Esta pasta já existe e não está vazia: + +"%1" + +Está certo de sobrescrever a pasta existente? + + + + %1: saving session... + %1: salvando sessão... + + + + %1: save session %2. + %: salvar sessão %2. + + + + Update session + Atualizar sessão + + + + + Save and &Quit... + Salvar e &Sair... + + + + + Save &Template... + Salvar &Modelo... + + + + Session + + + + + + &Save + &Salvar + + + + Save session versioning + Salvar versionamento da sessão + + + + + &Versioning + &Versionamento + + + + + + Re&fresh + At&ualizar + + + + Session clients / connections + Conexões/clientes da sessão + + + + Infra-clients / commands + Infra-clientes + + + + Infra-client + Infra-cliente + + + + Infra-command + Infra-comando + + + + Add infra-client + Adicionar infra-cliente + + + + + &Add + &Adicionar + + + + Edit infra-client + + + + + + &Edit + &Editar + + + + Remove infra-client + Remover infra-cliente + + + + + Re&move + Re&mover + + + + New Client + Novo Cliente + + + + qjackctlSessionInfraClientItemEditor + + + Infra-command + Infra-comando + + + + qjackctlSetupForm + + + Settings + Configurações + + + + Preset &Name: + Nome do &Preset: + + + + + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 + + + + + Settings preset name + Nome do preset de configurações + + + + &Save + &Salvar + + + + Save settings as current preset name + Salvar configurações como nome do preset atual + + + + &Delete + &Deletar + + + + Delete current settings preset + Excluir configurações atuais predefinidas + + + + jackd + DO NOT TRANSLATE + + + + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + + + + + Driv&er: + Dri&ver: + + + + dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + Parameters + Parâmetros + + + + Number of periods in the hardware buffer + Número de períodos no buffer de hardware + + + + Priorit&y: + Prioridad&e: + + + + &Frames/Period: + &Quadros/Período: + + + + + 16 + 16 + + + + + 32 + 32 + + + + + 64 + 64 + + + + + 128 + 128 + + + + + 256 + 256 + + + + + 512 + 512 + + + + + 1024 + 1024 + + + + 2048 + 2048 + + + + 4096 + 4096 + + + + Frames per period between process() calls + Quadros por período entre as chamadas() de processo + + + + Port Ma&ximum: + Portas Má&ximas: + + + + 21333 + 21333 + + + + 22050 + 22050 + + + + 32000 + 32000 + + + + 44100 + 44100 + + + + 48000 + 48000 + + + + 88200 + 88200 + + + + 96000 + 96000 + + + + Sample rate in frames per second + Taxa de amostragem em quadros por segundo + + + + Scheduler priority when running realtime + Prioridade do agendador ao executar em tempo real + + + + &Word Length: + &Tamanho da palavra: + + + + Periods/&Buffer: + Períodos/&Buffer: + + + + Word length + Tamanho da palavra + + + + Maximum number of ports the JACK server can manage + Número máximo de portas que o servidor JACK pode gerenciar + + + + &Wait (usec): + &Espera (microseg): + + + + Sample &Rate: + Taxa de &amostragem: + + + + &Timeout (msec): + Limite de &Tempo (mseg): + + + + 200 + 200 + + + + + 500 + 500 + + + + + 1000 + 1000 + + + + 2000 + 2000 + + + + + 5000 + 5000 + + + + 10000 + 10000 + + + + Set client timeout limit in milliseconds + Definir limite de tempo limite do cliente em milissegundos + + + + &Realtime + &Tempo Real + + + + Use realtime scheduling + Usar agendamento em tempo real + + + + No Memory Loc&k + Sem b&loqueio de memória + + + + Do not attempt to lock memory, even if in realtime mode + Não tente bloquear a memória, mesmo no modo de tempo real + + + + &Unlock Memory + &Desbloquear Memória + + + + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) + Desbloquear memória de bibliotecas comuns do kit de ferramentas (GTK+, QT, FLTK, Wine) + + + + So&ft Mode + Modo &Suave + + + + Ignore xruns reported by the backend driver + Ignorar xruns informados pelo driver de back-end. O JACK terá menos tendência a desconectar as portas que não respondem. Útil quando não está sendo executado em tempo real. + + + + &Monitor + &Monitor + + + + Provide output monitor ports + Fornecer portas do monitor de saída + + + + Force &16bit + Forçar &16bit + + + + Force 16bit mode instead of failing over 32bit (default) + Forçar o modo de 16 bits em vez de falhar 32 bits (padrão) + + + + H/&W Meter + Medidor de H/&W + + + + Enable hardware metering on cards that support it + Ativar a medição de hardware em placas que a suportam + + + + &Ignore H/W + &Ignorar H/W + + + + Ignore hardware period/buffer size + Ignore o período do hardware/tamanho do buffer + + + + &Output Device: + &Dispositivo de saída: + + + + &Interface: + &Interface: + + + + Maximum input audio hardware channels to allocate + Máximo de canais de hardware de áudio de entrada para alocar + + + + &Audio: + &Áudio: + + + + Dit&her: + Sua&vizado: + + + + External output latency (frames) + Latência de saída externa (quadros) + + + + &Input Device: + &Dispositivo de entrada: + + + + Duplex + Duplex + + + + Capture Only + Somente Captura + + + + Playback Only + Somente Reprodução + + + + Provide either audio capture, playback or both + Fornecer captura de áudio, reprodução ou ambos + + + + + + hw:0 + hw:0 + + + + The PCM device name to use + O nome do dispositivo PCM a ser usado + + + + + + + > + > + + + + + + /dev/dsp + /dev/dsp + + + + Alternate input device for capture + Dispositivo de entrada alternativo para captura + + + + Maximum output audio hardware channels to allocate + Máximo de canais de hardware de áudio de saída para alocar + + + + Alternate output device for playback + Dispositivo de saída alternativo para reprodução + + + + External input latency (frames) + Latência de entrada externa (quadros) + + + + None + Nenhum + + + + Rectangular + Retangular + + + + Shaped + Perfilado + + + + Triangular + Triangular + + + + Set dither mode + Definir modo suavizado + + + + Whether to give verbose output on messages + Mostrar saída detalhada nas mensagens + + + + Time in seconds that client is delayed after server startup + Tempo em segundos do atraso do cliente após a inicialização do servidor + + + + Latency: + Latência: + + + + Output latency in milliseconds, calculated based on the period, rate and buffer settings + Latência de saída em milissegundos, calculada com base nas configurações de período, taxa e buffer + + + + Options + Opções + + + + Scripting + Scripting + + + + Execute script on Start&up: + Executar script na inicializa&ção: + + + + Whether to execute a custom shell script before starting up the JACK audio server. + Executar um script personalizado antes de iniciar o servidor de áudio JACK. + + + + Execute script after &Startup: + &Executar script após a inicialização: + + + + Whether to execute a custom shell script after starting up the JACK audio server. + Executar um script de shell personalizado após iniciar o servidor de áudio JACK. + + + + Execute script on Shut&down: + Executar script no desliga&mento: + + + + Whether to execute a custom shell script before shuting down the JACK audio server. + Executar um script personalizado antes de desligar o servidor de áudio JACK. + + + + Command line to be executed before starting up the JACK audio server + Linha de comando a ser executada antes de iniciar o servidor de áudio JACK + + + + + + + Scripting argument meta-symbols + Variáveis especiais de argumento do script + + + + + + + + + ... + ... + + + + Browse for script to be executed before starting up the JACK audio server + Procure por script a ser executado antes de iniciar o servidor de áudio JACK + + + + Command line to be executed after starting up the JACK audio server + Linha de comando a ser executada após o início do servidor de áudio JACK + + + + Browse for script to be executed after starting up the JACK audio server + Procure pelo script a ser executado depois de iniciar o servidor de áudio JACK + + + + Browse for script to be executed before shutting down the JACK audio server + Procure por script a ser executado antes de desligar o servidor de áudio JACK + + + + Command line to be executed before shutting down the JACK audio server + Linha de comando a ser executada antes de desligar o servidor de áudio JACK + + + + Execute script after Shu&tdown: + Execute o script após o desliga&mento: + + + + Whether to execute a custom shell script after shuting down the JACK audio server. + Executar um script de shell personalizado após desligar o servidor de áudio JACK. + + + + Browse for script to be executed after shutting down the JACK audio server + Procure pelo script a ser executado após desligar o servidor de áudio JACK + + + + Command line to be executed after shutting down the JACK audio server + Linha de comando a ser executada após o desligamento do servidor de áudio JACK + + + + Statistics + Estatísticas + + + + &Capture standard output + &Capturar saída padrão + + + + Whether to capture standard output (stdout/stderr) into messages window + Capturar saída padrão do JACK (stdout/stderr) na janela de mensagens + + + + &XRUN detection regex: + &Expressão regular para detectar &XRUN: + + + + xrun of at least ([0-9|\.]+) msecs + xrun de pelo menos ([0-9|\.]+) msegs + + + + Regular expression used to detect XRUNs on server output messages + Expressão regular usada para detectar XRUNs em mensagens de saída do servidor + + + + Connections + Conexões + + + + 10 + 10 + + + + Patchbay definition file to be activated as connection persistence profile + Arquivo de definição de patchbay a ser ativado como perfil de persistência de conexão + + + + Browse for a patchbay definition file to be activated + Procure um arquivo de definição de patchbay a ser ativado + + + + Activate &Patchbay persistence: + Ativar a &persistência do Patchbay: + + + + Whether to activate a patchbay definition for connection persistence profile. + Utilizar uma definição de patchbay para o perfil de persistência de conexão. + + + + Display + Display + + + + Time Display + Display de tempo + + + + Transport &Time Code + Código de Tempo de &Transporte + + + + Transport &BBT (bar:beat.ticks) + &BBT de Transporte (bar:beat:ticks) + + + + Elapsed time since last &Reset + Tiempo transcorrido desde o último &Reset + + + + Elapsed time since last &XRUN + Tempo transcorrido desde o último &XRUN + + + + Sample front panel normal display font + Fonte de exibição normal do painel frontal da amostra + + + + Sample big time display font + Exemplo de fonte de exibição de grande duração + + + + Big Time display: + Display de tempo grande: + + + + + + + &Font... + Fon&te... + + + + Select font for front panel normal display + Selecione a fonte para exibição normal do painel frontal + + + + Select font for big time display + Selecione a fonte para exibição em grande escala + + + + Normal display: + Display normal: + + + + Messages Window + Janela de mensagens + + + + Sample messages text font display + Exemplo de exibição de fonte de texto de mensagens + + + + Select font for the messages text display + Selecione a fonte para a exibição do texto das mensagens + + + + &Messages limit: + Limite de &Mensagens: + + + + Whether to keep a maximum number of lines in the messages window + Manter um número máximo de linhas na janela de mensagens + + + + 100 + 100 + + + + 250 + 250 + + + + 2500 + 2500 + + + + The maximum number of message lines to keep in view + Número máximo de linhas de mensagens para manter em vista + + + + Please do not touch these settings unless you know what you are doing. + Por favor, não toque nessas configurações, a menos que você saiba o que está fazendo. + + + + Connections Window + Janela de conexões + + + + Sample connections view font + Fonte de visualização de conexões de amostra + + + + Select font for the connections view + Selecione a fonte para a visualização de conexões + + + + &Icon size: + Tamanho de &Ícone: + + + + 16 x 16 + 16 x 16 + + + + 32 x 32 + 32 x 32 + + + + 64 x 64 + 64 x 64 + + + + The icon size for each item of the connections view + O tamanho do ícone para cada item da visualização de conexões + + + + Ena&ble client/port aliases editing (rename) + At&ivar edição de aliases de cliente/porta (renomear) + + + + Whether to enable in-place client/port name editing (rename) + Ativar edição de nome de cliente/porta no local (renomear) + + + + E&nable client/port aliases + Habilitar aliases para clientes/portas + + + + Whether to enable client/port name aliases on the connections window + Ativar alias de nome de cliente/porta na janela de conexões + + + + Misc + Misc + + + + Other + Outro + + + + &Start JACK audio server on application startup + Inicie o &servidor de áudio JACK na inicialização + + + + Whether to start JACK audio server immediately on application startup + Iniciar o servidor de áudio JACK imediatamente na inicialização + + + + &Confirm application close + Pedir &Confirmação ao sair + + + + Whether to ask for confirmation on application exit + Perguntar antes de sair do qjackctl + + + + &Keep child windows always on top + &Manter janelas filhas sempre no topo + + + + Whether to keep all child windows on top of the main window + Manter todas as janelas filhas na parte superior da janela principal + + + + &Enable system tray icon + Ativar ícone da ban&eja do sistema + + + + Whether to enable the system tray icon + Ativar o ícone da bandeja do sistema + + + + S&ave JACK audio server configuration to: + S&alvar a configuração del servidor JACK em: + + + + Whether to save the JACK server command-line configuration into a local file (auto-start) + Salve a configuração da linha de comandos do servidor JACK em um arquivo local (início automático) + + + + .jackdrc + .jackdrc + + + + The server configuration local file name (auto-start) + O nome do arquivo local de configuração do servidor (início automático) + + + + + + Warning + Aviso + + + + msec + mseg + + + + n/a + n/d + + + + &Preset Name + Nome do &Preset + + + + &Server Path + &Caminho do Servidor + + + + &Driver + &Driver + + + + &Interface + &Interface + + + + Sample &Rate + &Taxa de Amostragem + + + + &Frames/Period + &Quadros/Período + + + + Periods/&Buffer + Períodos/&Buffer + + + + Patchbay Definition files + Arquivos de definição do patchbay + + + + Some settings have been changed: + +"%1" + +Do you want to save the changes? + Algumas configurações foram alteradas: + +"%1" + +Deseja salvá-las? + + + + Delete preset: + +"%1" + +Are you sure? + Deletar preset: + +"%1" + +Está certo disto? + + + + Startup Script + Script de Inicialização + + + + Post-Startup Script + Script de Post-Inicialização + + + + Shutdown Script + Script de Desligamento + + + + Post-Shutdown Script + Script de Pós-Desligamento + + + + Active Patchbay Definition + Definição Ativa de Patchbay + + + + Messages Log + Registro de Mensagens + + + + Log files + Arquivos de registros + + + + Some settings have been changed. + +Do you want to apply the changes? + Algumas configurações foram alteradas. + +Você quer aplicar as mudanças? + + + + The audio backend driver interface to use + A interface do driver back-end de áudio a ser usada + + + + MIDI Driv&er: + Driv&er MIDI: + + + + The ALSA MIDI backend driver to use + O driver do ALSA MIDI para usar + + + + none + nenhum + + + + raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + &Verbose messages + &Mensagens detalhadas + + + + + + plughw:0 + plughw:0 + + + + + + /dev/audio + /dev/audio + + + + &Channels: + &Canais: + + + + 192000 + 192000 + + + + Maximum number of audio channels to allocate + Número máximo de canais de áudio a serem alocados + + + + Logging + Registrando + + + + Messages log file + Arquivo de registro de mensagns + + + + Browse for the messages log file location + Procurar o local do arquivo de log de mensagens + + + + Whether to activate a messages logging to file. + Ativar um log de mensagens para o arquivo. + + + + Advanced + Avançado + + + + Whether to reset all connections when a patchbay definition is activated. + Redefinir todas as conexões quando uma definição de patchbay for ativada. + + + + &Reset all connections on patchbay activation + &Redefinir todas as conexões na ativação do patchbay + + + + Whether to issue a warning on active patchbay port disconnections. + Emitir um aviso sobre desconexões de portas de patchbay ativas. + + + + &Warn on active patchbay disconnections + &Avisar sobre desconexões de patchbay ativas + + + + &Messages log file: + Registro de &mensagens: + + + + Whether to enable blinking (flashing) of the server mode (RT) indicator + Ativar o piscar (intermitente) do indicador do modo do servidor (RT) + + + + Blin&k server mode indicator + Pisc&ar o modo do servidor + + + + &JACK client/port aliases: + Aliases de cliente/poprta para &JACK: + + + + JACK client/port aliases display mode + Modo de exibição de aliases de cliente/porta JACK + + + + Default + Padrão + + + + First + Primeiro + + + + Second + Segundo + + + + JACK client/port pretty-name (metadata) display mode + Modo de exibição do nome customizado do client/porta JACK (metadata) + + + + Enable JA&CK client/port pretty-names (metadata) + Ativar& nomes customizados (metadata) de clientes/portas JACK + + + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + + + + + Confirm server sh&utdown and/or restart + + + + + Whether to show system tray message on main window close + Mostrar mensagem da bandeja do sistema na janela principal fechar + + + + Sho&w system tray message on close + Mos&trar mensagem da bandeja do sistema ao fechar + + + + Whether to start minimized to system tray + Iniciar minimizado na bandeja do sistema + + + + Start minimi&zed to system tray + Iniciar minimi&zado na bandeja do sistema + + + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + + + + + Whether to enable ALSA Sequencer (MIDI) support on startup + Ativar o suporte ao seqüenciador de ALSA (MIDI) na inicialização + + + + E&nable ALSA Sequencer support + Ativar Seque&nciador ALSA + + + + Whether to enable JACK D-Bus interface + Ativar interface JACK D-Bus + + + + &Enable JACK D-Bus interface + &Ativar interface JACK D-Bus + + + + Buttons + Botões + + + + Whether to hide the left button group on the main window + Ocultar o grupo de botões à esquerda na janela principal + + + + Hide main window &Left buttons + Ocultar os &botões da esquerda da janela principal + + + + Whether to hide the right button group on the main window + Ocultar o grupo de botões direito na janela principal + + + + Hide main window &Right buttons + Ocultar os &botões da direita da janela principal + + + + Whether to hide the transport button group on the main window + Ocultar o grupo de botões de transporte na janela principal + + + + Hide main window &Transport buttons + Ocultar botões de &Transporte da janela principal + + + + Whether to hide the text labels on the main window buttons + Ocultar os rótulos de texto nos botões da janela principal + + + + Hide main window &button text labels + Ocultar rótulos de texto do &botão da janela principal + + + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + + Defaults + Padrões + + + + &Base font size: + Tamanho &básico de fonts: + + + + Base application font size (pt.) + Tamanho básico de tipografias para a aplicação (pt.) + + + + 6 + 6 + + + + 7 + 7 + + + + 8 + 8 + + + + 9 + 9 + + + + 11 + 11 + + + + 12 + 12 + + + + net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + Whether to enable D-Bus interface + Ativar interface D-Bus + + + + &Enable D-Bus interface + &Ativar interface D-Bus + + + + Number of microseconds to wait between engine processes (dummy) + Número de microssegundos a aguardar entre processos (dummy) + + + + netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + Whether to restrict to one single application instance (X11) + Restringir a uma única instância do aplicativo (X11) + + + + Single application &instance + Uma só &instância de aplicação + + + + &Name: + &Nome: + + + + The JACK Audio Connection Kit sound server name + O nome do servidor de áudio do JACK Audio Connection Kit + + + + &Server Name + Nome do &Servidor + + + + Server path (command line prefix) + Caminho do servidor (prefixo da linha de comando) + + + + &Channels I/O: + &Canais de E/S: + + + + &Latency I/O: + &Latência E/S: + + + + Start De&lay: + Demora antes d&o início: + + + + secs + segs + + + + 0 msecs + 0 msegs + + + + Server Suffi&x: + Sufixo do &Servidor: + + + + Server &Prefix: + &Prefixo do servidor: + + + + Extra driver options (command line suffix) + Opções extras para o driver (sufixo da linha de comando) + + + + Whether to stop JACK audio server on application exit + Parar o servidor de áudio JACK na saída do aplicativo + + + + S&top JACK audio server on application exit + Parar o servidor de áudio JACK na saída do aplicativo + + + + qjackctlSocketForm + + + &Socket + &Soquetes + + + + &Name (alias): + &Nome (alias): + + + + Socket name (an alias for client name) + Nome do soquete (um alias para o nome de cliente) + + + + Client name (regular expression) + Nome do cliente (expressão regular) + + + + Add P&lug + Adicionar P&lug + + + + Add plug to socket plug list + Adicionar plugue à lista de plugues de soquetes + + + + &Plug: + &Plugue: + + + + Port name (regular expression) + Nome da porta (expressão regular) + + + + Socket Plugs / Ports + Soquetes Plugues/Portas + + + + Socket plug list + Lista de soquetes tipo plugue + + + + &Edit + &Editar + + + + &Remove + &Remover + + + + Remove currently selected plug from socket plug list + Remover plug atualmente selecionado da lista de plugue de soquete + + + + Socket + Soquete + + + + &Client: + &Cliente: + + + + &Down + &Baixar + + + + &Up + &Subir + + + + E&xclusive + E&xclusivo + + + + Enforce only one exclusive cable connection + Aplicar apenas uma conexão a cabo exclusiva + + + + Type + Tipo + + + + &Audio + Á&udio + + + + Audio socket type (JACK) + Soquete tipo áudio (JACK) + + + + &MIDI + &MIDI + + + + MIDI socket type (ALSA) + Soquete tipo MIDI (ALSA) + + + + Plugs / Ports + Plugs/Portas + + + + Error + Erro + + + + A socket named "%1" already exists. + Um soquete chamado "%1" já existe. + + + + Add Plug + Adicionar Plug + + + + Remove + Remover + + + + Edit + Editar + + + + Move Up + Subir + + + + Move Down + Abaixar + + + + Warning + Aviso + + + + Some settings have been changed. + +Do you want to apply the changes? + Algumas configurações foram alteradas. + +Você quer aplicar as mudanças? + + + + (None) + (Nenhum) + + + + Edit currently selected plug + Editar ficha atualmente selecionada + + + + Move down currently selected plug in socket plug list + Mover para baixo o plug atualmente selecionado na lista de plugue de soquete + + + + Move up current selected plug in socket plug list + Mover para cima a ficha selecionada atual na lista de plugues de soquete + + + + &Forward: + &Avançar: + + + + Forward (clone) all connections from this socket + Encaminhar (clonar) todas as conexões deste soquete + + + + MIDI socket type (JACK) + Tipo de soquete MIDI (JACK) + + + + AL&SA + AL&SA + + + + qjackctlSocketList + + + Output + Saída + + + + Input + Entrada + + + + Socket + Soquete + + + + Warning + Aviso + + + + <New> - %1 + <Novo> - %1 + + + + %1 about to be removed: + +"%2" + +Are you sure? + A ponto de remover %1: + +"%2" + +Está certo disto? + + + + %1 <Copy> - %2 + %1 <Copiar> - %2 + + + + qjackctlSocketListView + + + Output Sockets / Plugs + Soquetes de Saída/Plugues + + + + Input Sockets / Plugs + Soquetes de Entrada/Plugues + + + diff -Nru qjackctl-0.4.5/src/translations/qjackctl_ru.ts qjackctl-0.6.0/src/translations/qjackctl_ru.ts --- qjackctl-0.4.5/src/translations/qjackctl_ru.ts 2017-04-27 14:44:14.570763474 +0000 +++ qjackctl-0.6.0/src/translations/qjackctl_ru.ts 2019-10-17 07:45:45.972673223 +0000 @@ -1,6 +1,6 @@ - + PortAudioProber @@ -27,74 +27,90 @@ QObject - + Show help about command line options Показать справку по использованию параметров командной строки - + Start JACK audio server immediately Немедленно запустить сервер JACK - + Show version information Показать информацию о версии - + Option -p requires an argument (preset). Ключ -p требует аргумента (пресет). - + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Usage: %1 [options] [command-and-args] Использование: %1 [ключи] [команды-и-аргументы] - + Options: Ключи: - + Set default settings preset name Указать название профиля с параметрами по умолчанию - + Set active patchbay definition file Указать файл описания активного коммутатора - + Option -a requires an argument (path). Ключу -a необходим аргумент (расположение) - + Set default JACK audio server name Установить используемое по умолчанию название сервера JACK - + Option -n requires an argument (name). Ключу -n необходим аргумент (название). - + %1 (%2 frames) + + + Move + + + + + Rename + + qjackctlAboutForm + + About + + + About Qt О Qt @@ -176,11 +192,6 @@ Поддержка секвенсера ALSA/MIDI отключена. - - About QjackCtl - о QJackCtl - - JACK Port aliases support disabled. Поддержка алиасов портов JACK отключена. @@ -262,12 +273,12 @@ qjackctlConnect - + Warning Предупреждение - + This will suspend sound processing from all client applications. @@ -281,11 +292,6 @@ qjackctlConnectionsForm - - Connections - JACK Audio Connection Kit - Соединения - - @@ -328,6 +334,11 @@ Рассоединить все соединённые сейчас порты + + Connections + Соединения + + @@ -366,24 +377,6 @@ MIDI - - Warning - Предупреждение - - - - The preset aliases have been changed: - -"%1" - -Do you want to save the changes? - Алиасы профилей изменились: - -"%1" - -Вы хотите сохранить изменения? - - ALSA ALSA @@ -392,222 +385,791 @@ qjackctlConnectorView - + &Connect &Соединить - + Alt+C Connect Alt+с - + &Disconnect &Рассоединить - + Alt+D Disconnect Alt+р - + Disconnect &All Рассоединить &все - + Alt+A Disconect All Alt+в - + &Refresh &Обновить - + Alt+R Refresh Alt+о + qjackctlGraphCanvas + + + + Connect + + + + + Disconnect + + + + + qjackctlGraphForm + + + Graph + + + + + &Graph + + + + + &Edit + + + + + &View + + + + + &Zoom + + + + + Co&lors + + + + + S&ort + + + + + &Help + + + + + &Connect + + + + + + Connect + + + + + Connect selected ports + + + + + Ins + + + + + &Disconnect + &Рассоединить + + + + + Disconnect + + + + + Disconnect selected ports + + + + + Del + + + + + Cl&ose + + + + + + Close + + + + + Close this application window + + + + + Select &All + + + + + + + Select All + + + + + Ctrl+A + + + + + Select &None + + + + + + + Select None + + + + + Ctrl+Shift+A + + + + + Select &Invert + + + + + + + Select Invert + + + + + Ctrl+I + + + + + &Rename... + + + + + Rename item + + + + + + Rename Item + + + + + &Menubar + + + + + + Menubar + + + + + Show/hide the main program window menubar + + + + + Ctrl+M + + + + + &Toolbar + + + + + + Toolbar + + + + + Show/hide main program window file toolbar + + + + + &Statusbar + + + + + + Statusbar + + + + + Show/hide the main program window statusbar + + + + + Text Beside &Icons + + + + + + Text beside icons + + + + + Show/hide text beside icons + + + + + &Center + + + + + + Center + + + + + Center view + + + + + &Refresh + &Обновить + + + + + Refresh + + + + + Refresh view + + + + + F5 + + + + + Zoom &In + + + + + + + Zoom In + + + + + Ctrl++ + + + + + Zoom &Out + + + + + + + Zoom Out + + + + + Ctrl+- + + + + + Zoom &Fit + + + + + + + Zoom Fit + + + + + Ctrl+0 + + + + + Zoom &Reset + + + + + + + Zoom Reset + + + + + Ctrl+1 + + + + + &Zoom Range + + + + + + + Zoom Range + + + + + JACK &Audio... + + + + + + + JACK Audio color + + + + + JACK &MIDI... + + + + + JACK MIDI + + + + + + JACK MIDI color + + + + + &ALSA MIDI... + + + + + ALSA MIDI + + + + + + ALSA MIDI color + + + + + &Reset + С&бросить + + + + + + Reset colors + + + + + Port &Name + + + + + Port name + + + + + Sort by port name + + + + + Port &Title + + + + + Port title + + + + + Sort by port title + + + + + Port &Index + + + + + Port index + + + + + Sort by port index + + + + + &Ascending + + + + + Ascending + + + + + Ascending sort order + + + + + &Descending + + + + + Descending + + + + + Descending sort order + + + + + &About... + + + + + About... + + + + + About + + + + + Show information about this application program + + + + + About &Qt... + + + + + About Qt... + + + + + About Qt + О Qt + + + + Show information about the Qt toolkit + + + + + &Undo + + + + + &Redo + + + + + Undo last edit action + + + + + Redo last edit action + + + + + Zoom + + + + + Ready + + + + + Colors - %1 + + + + qjackctlMainForm - - + + &Start &Запустить - + Start the JACK server Запустить сервер JACK - + S&top С&топ - + Stop the JACK server Остановить сервер JACK - - + + &Quit В&ыход - + Quit processing and exit Остановить сервер и выйти из программы - + JACK is starting... JACK запускается ... - + JACK is stopping... JACK останавливается ... - + msec мс - + Error Ошибка - + JACK server state Состояние сервера JACK - + Sample rate Частота сэмплирования - + Time display Время - + Transport state Состояние транспорта - + Transport BPM BPM транспорта - + Transport time Время транспорта - - + + &Play &Воспроизвести - + Start transport rolling Запустить воспроизведение через транспорт - - + + Pa&use Пау&за - + Stop transport rolling Остановить воспроизведение с транспорта - + St&atus С&татус - - + + Ab&out... О про&грамме... - + Show information about this application Показать информацию о приложении - + Show settings and options dialog Показать диалог настройки программы - - + + &Messages С&ообщения - + Patch&bay &Коммутатор - + Show/hide the patchbay editor window Показать/скрыть окно коммутатора - + &Connections Сое&динения - - Show/hide the actual connections patchbay window - Показать/спрятать окно коммутатора с актуальными соединениями - - - + successfully успешно - + Activating Активируется - - - + + + Starting Запуск - + The program will keep running in the system tray. To terminate the program, please choose "Quit" @@ -618,59 +1180,59 @@ области уведомления пункт «Выход». - + Startup script... Сценарий, выполняемый при запуске... - + Startup script terminated Выполнение стартового сценария прекращено - + Started Запущен - - + + Stopping Остановка - + JACK was stopped Cервер JACK остановлен - + Shutdown script... Послеостановочный сценарий... - + Shutdown script terminated Выполнение послеостановочного сценария прекращено - + Inactive Не активен - + Active Активен - - + + Stopped Стоп - + Could not load active patchbay definition. "%1" @@ -683,159 +1245,164 @@ Отключено. - + Statistics reset. Перезапуск статистики - + Shutdown notification. Уведомление об остановке - + checked проверено - + connected соединено - + failed не удалось - + Client activated. Клиент активирован - + Post-startup script... Послестартовый сценарий... - + Post-startup script terminated Выполнение послестартового сценария прекращено - + Client deactivated. Клиент деактивирован - + Transport start. Транспорт запущен - + Transport stop. Транспорт остановлен - + Yes Да - + No Нет - + Rolling Играет - + Looping Петля - + Transport time code Тайм-код транспорта - + Elapsed time since last reset Времени с последней перезагрузки - + Elapsed time since last XRUN Времени с последнего XRUN - + disconnected рассоединено - + Command line argument... Аргумент для командной строки... - + Command line argument started - - + + Information Информация - + + Do you want to restart the JACK audio server? + + + + Some settings will be only effective the next time you start this program. Некоторые изменения вступят в силу только при следующем запуске программы. - + JACK server mode Режим сервера JACK - + Server settings will be only effective after restarting the JACK audio server. Параметры работы сервера JACK вступят в силу только при следующем запуске сервера. - + RT RT - - + + &Hide С&крыть - - + + S&how &Показать - + &Stop &Стоп - + Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. @@ -844,26 +1411,27 @@ Коммутатор ALSA MIDI будет недоступен. - + D-BUS: Service is available (%1 aka jackdbus). D-BUS: служба доступна (%1, известный как jackdbus). - + D-BUS: Service not available (%1 aka jackdbus). D-BUS: служба недоступна (%1, известный как jackdbus). - - - - - + + + + + + Warning Предупреждение - + JACK is currently running. Do you want to terminate the JACK audio server? @@ -872,19 +1440,20 @@ Вы хотите остановить его? - - - + + + + Don't ask this again - + with exit status=%1 со статусом выхода %1 - + Could not start JACK. Maybe JACK audio server is already started. @@ -893,7 +1462,7 @@ Возможно, звуковой сервер уже запущен. - + Could not load preset "%1". Retrying with default. @@ -902,7 +1471,7 @@ Попытка загрузить используемый по умолчанию профиль. - + Could not load default preset. Sorry. @@ -911,12 +1480,12 @@ Извините. - + D-BUS: JACK server is starting... D-BUS: запускается сервер JACK... - + D-BUS: JACK server could not be started. Sorry @@ -925,7 +1494,7 @@ Извините. - + Some client audio applications are still active and connected. @@ -936,12 +1505,12 @@ Вы хотите остановить звуковой сервер JACK? - + D-BUS: JACK server is stopping... D-BUS: сервер JACK останавливается... - + D-BUS: JACK server could not be stopped. Sorry @@ -950,77 +1519,100 @@ Извините. - + Post-shutdown script... - + Post-shutdown script terminated - + JACK was started with PID=%1. JACK был запущен с PID=%1. - + Don't show this message again - + + The preset aliases have been changed: + +"%1" + +Do you want to save the changes? + Алиасы профилей изменились: + +"%1" + +Вы хотите сохранить изменения? + + + D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: сервер JACK был запущен (%1, известный как jackdbus). - + JACK is being forced... - + D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: сервер JACK был остановлен (%1, известный как jackdbus). - + Transport BBT (bar.beat.ticks) - + Patchbay reset. - + Patchbay activated. Коммутатор активирован. - + Patchbay deactivated. Коммутатор деактивирован. - + JACK connection graph change. Смена графа соединений JACK. - + XRUN callback (%1). - + Buffer size change (%1). Смена размера буфера (%1). - + + Freewheel started... + + + + + Freewheel exited. + + + + Could not start JACK. Sorry. @@ -1029,62 +1621,62 @@ Извините. - + JACK has crashed. - + JACK timed out. - + JACK write error. Ошибка записи JACK. - + JACK read error. Ошибка чтения JACK. - + Unknown JACK error (%d). Неизвестная ошибка JACK (%d). - + JACK property change. - + ALSA connection graph change. Смена графа соединений ALSA. - + JACK active patchbay scan Сканирование активного коммутатора JACK. - + ALSA active patchbay scan Сканирование активного коммутатора ALSA. - + JACK connection change. Смена соединений JACK. - + ALSA connection change. Смена соединений ALSA. - + A patchbay definition is currently active, which is probable to redo this connection: @@ -1094,22 +1686,33 @@ - + %1 (%2%, %3 xruns) - + + FW + + + + &Versioning &Версии - + Re&fresh О&бновить - + + + &Graph + + + + D-BUS: SetParameterValue('%1', '%2'): %3. @@ -1117,7 +1720,7 @@ - + D-BUS: ResetParameterValue('%1'): %2. @@ -1125,7 +1728,7 @@ - + D-BUS: GetParameterValue('%1'): %2. @@ -1133,62 +1736,62 @@ - + Overall operation failed. Выполнение операции в целом неудачно. - + Invalid or unsupported option. Некорректный или неподдерживаемый параметр - + Client name not unique. Имя клиента не уникально. - + Server is started. Сервер запущен. - + Unable to connect to server. Не удалось соединиться с сервером. - + Server communication error. Ошибка коммуникации с сервером. - + Client does not exist. Клиент не существует. - + Unable to load internal client. Не удалось загрузить внутренний клиент. - + Unable to initialize client. Не удалось инициализировать клиент. - + Unable to access shared memory. Не удалось получить доступ к разделяемой памяти. - + Client protocol version mismatch. Несовпадение версии клиентского протокола - + Could not connect to JACK server as client. - %1 Please check the messages window for more info. @@ -1197,175 +1800,180 @@ Просмотрите вывод в окне сообщений. - + Server configuration saved to "%1". Конфигурация сервера сохранена в "%1". - + Transport rewind. Перемотка к началу - + Transport backward. Перемотка назад - + Transport forward. Перемотка вперёд - + %1 (%2%) %1 (%2%) - + %1 % %1% - + %1 Hz %1Гц - + %1 frames %1 выборок - + %1 msec %1 мс - + XRUN callback (%1 skipped). - + Mi&nimize &Свернуть - + Rest&ore &Восстановить - + &Reset С&бросить - + &Presets &Профили - - + + S&ession С&еансы - + &Load... &Загрузить... - + &Save... &Сохранить - + Save and &Quit... Сохранить и вы&йти - + Save &Template... Сохранить &шаблон - + &Transport &Транспорт - - + + &Rewind К &началу - - QjackCtl - QjackCtl - - - - + + Set&up... &Параметры - + &Patchbay &Коммутатор - + &Connect &Соединения - + DSP Load Загрузка DSP - + XRUN Count (notifications) Число XRUN (уведомлений) - + Show/hide the session management window - + Show/hide the messages log/status window - + + Show/hide the graph window + + + + + Show/hide the connections window + + + + Backward transport Перемотать назад - + &Backward Н&азад - + Forward transport Перемотать вперёд - + &Forward &Вперёд - + Rewind transport Перемотать к началу @@ -1374,8 +1982,8 @@ qjackctlMessagesStatusForm - Messages / Status - JACK Audio Connection Kit - Сообщения и статус + Messages / Status + @@ -1546,12 +2154,12 @@ qjackctlPatchbay - + Warning Предупреждение - + This will disconnect all sockets. Are you sure? @@ -1563,11 +2171,6 @@ qjackctlPatchbayForm - - Patchbay - JACK Audio Connection Kit - Коммутатор - - &New &Создать @@ -1700,6 +2303,11 @@ Удалить выбранный сейчас сокет выхода + + Patchbay + + + Remove currently selected input socket Удалить выбранный сейчас сокет входа @@ -1715,38 +2323,38 @@ Изменить свойства выбранного сейчас сокета выхода - + Warning Предупреждение - + active активно - + New Patchbay definition Новое описание коммутатора - - + + Patchbay Definition files Файл описания коммутатора - + Load Patchbay Definition Загрузить описание коммутатора - + Save Patchbay Definition Сохранить описание коммутатора - + The patchbay definition has been changed: "%1" @@ -1759,23 +2367,23 @@ Вы хотите сохранить изменения? - + %1 [modified] - + Untitled%1 Без имени %1 - - + + Error Ошибка - + Could not load patchbay definition file: "%1" @@ -1784,7 +2392,7 @@ "%1" - + Could not save patchbay definition file: "%1" @@ -1793,7 +2401,7 @@ "%1" - + Create patchbay definition as a snapshot of all actual client connections? Создать описание коммутатора как @@ -1839,91 +2447,91 @@ qjackctlPatchbayView - + Add... Добавить... - + Edit... Изменить... - + Remove Удалить - + Move Up Выше - + Move Down Ниже - + &Connect &Соединить - + Alt+C Connect Alt+C - + &Disconnect &Рассоединить - + Alt+D Disconnect Alt+D - + Disconnect &All Рассоединить &все - + Alt+A Disconect All Alt+A - + &Refresh &Обновить - + Alt+R Refresh Alt+R - + Exclusive - + Copy... Скопировать... - + Forward - + (None) (Нет) @@ -1932,8 +2540,8 @@ qjackctlSessionForm - Session - JACK Audio Connection Kit - Сеансы + Session + @@ -1942,7 +2550,7 @@ - + &Load... &Загрузить @@ -1969,14 +2577,14 @@ - + &Versioning &Версии - - + + Re&fresh О&бновить @@ -2007,7 +2615,7 @@ - + &Add &Добавить @@ -2018,7 +2626,7 @@ - + &Edit &Изменить @@ -2029,13 +2637,13 @@ - + Re&move &Удалить - + &Save... &Сохранить @@ -2066,46 +2674,46 @@ &Сохранить - - + + Load Session Загрузить сеанс - - + + Session directory Каталог с сеансами - + Save Session Сохранить сеанс - + and Quit и выйти - + Template Шаблон - + &Clear О&чистить - - - + + + Warning Предупреждение - + A session could not be found in this folder: "%1" @@ -2114,17 +2722,17 @@ «%1» - + %1: loading session... %1: загружается сеанс... - + %1: load session %2. %1: загрузить сеанс %2. - + A session already exists in this folder: "%1" @@ -2137,7 +2745,7 @@ Вы уверены, что хотите перезаписать его? - + This folder already exists and is not empty: "%1" @@ -2150,29 +2758,29 @@ Вы уверены, что хотите перезаписать существующую папку? - + %1: saving session... %1: сохраняется сеанс... - + %1: save session %2. %1: сохранить сеанс %2. - + New Client Новый клиент - + Save and &Quit... Сохранить и вы&йти - + Save &Template... Сохранить &шаблон @@ -2188,39 +2796,69 @@ qjackctlSetupForm - - Setup - JACK Audio Connection Kit - Параметры - - Settings Общие - - jackstart - jackstart + + jackd + DO NOT TRANSLATE + - - jackd - jackd + + jackdmp + DO NOT TRANSLATE + + + + + jackstart + DO NOT TRANSLATE + dummy - dummy + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + sun + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + oss + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + alsa - alsa + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + portaudio - portaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + coreaudio + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + + + + + firewire + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + @@ -2228,479 +2866,480 @@ Основные - + 22050 22050 - + 32000 32000 - + 44100 44100 - + 48000 48000 - + 88200 88200 - + 96000 96000 - + Sample rate in frames per second Частота дискретизации выборок в секунду) - + 6 6 - + 7 7 - + 8 8 - + 9 9 - + 10 10 - + Scheduler priority when running realtime Приоритет планировщика в режиме реального времени - + 21333 21333 - - + + 16 16 - - + + 32 32 - + Priorit&y: П&риоритет: - + &Wait (usec): О&жидание (мс): - + &Frames/Period: &Выборок в буфере: - - + + 64 64 - - + + 128 128 - - + + 256 256 - - + + 512 512 - - + + 1024 1024 - + 2048 2048 - + 4096 4096 - + Frames per period between process() calls Выборок в период между вызовами process() - + Sample &Rate: &Частота дискр.: - + H/&W Meter Аппаратный &счётчик - + None Нет - + Rectangular Прямоугольное - + Shaped По очертаниям - + Triangular Треугольное - + Duplex Дуплекс - + Provide either audio capture, playback or both Разрешить захват звука, его воспроизведение или всё сразу - - - + + + hw:0 hw:0 - + &Timeout (msec): &Тайм-аут (мс): - + Dit&her: Подмешивание &шума: - + 200 200 - - + + 500 500 - - + + 1000 1000 - + 2000 2000 - - + + 5000 5000 - + 10000 10000 - + Set client timeout limit in milliseconds Установить тайм-аут для клиента в миллисекундах - + &Interface: &Интерфейс: - + So&ft Mode &Программный режим - + &Monitor &Контроль - + Provide output monitor ports Задействовать порты контроля выхода - + &Realtime Режим &реал. времени - + Use realtime scheduling Использовать планирование в реал. времени - - - - - - - - - - - + + + + + + + + + + + (default) + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/38 - + Whether to give verbose output on messages Подробно ли выводить сообщения - + Latency: Задержка: - + Output latency in milliseconds, calculated based on the period, rate and buffer settings Задержка выхода в мс, расчитанных на основе настроек периода, частоты и буфера - + Options Сценарии и журнал - + Scripting Сценарии - + Execute script on Start&up: Выполнять сценарий при &запуске: - + Whether to execute a custom shell script before starting up the JACK audio server. Выполнять ли собственный сценарий перед запуском сервера JACK. - + Execute script after &Startup: Выполнять сценарий после з&апуска: - + Whether to execute a custom shell script after starting up the JACK audio server. Выполнять ли собственный сценарий после запуска сервера JACK. - + Whether to execute a custom shell script after shuting down the JACK audio server. Выполнять ли собственный сценарий после остановки сервера JACK. - + Command line to be executed before starting up the JACK audio server Команда, выполняемая перед запуском сервера JACK - - - - - - + + + + + + ... ... - + Browse for script to be executed before starting up the JACK audio server Указать сценарий, выполняемый перед запуском сервера JACK - + Command line to be executed after starting up the JACK audio server Команда, выполняемая после запуска сервера JACK - + Browse for script to be executed after starting up the JACK audio server Указать сценарий, выполняемый после запуска сервера JACK - + Browse for script to be executed after shutting down the JACK audio server Указать сценарий, выполняемый после остановки сервера JACK - + Command line to be executed after shutting down the JACK audio server Команда, выполняемая после остановки сервера JACK - + Statistics Статистика - + &XRUN detection regex: &Регулярное выражение для определения XRUN: - + xrun of at least ([0-9|\.]+) msecs xrun of at least ([0-9|\.]+) msecs - + Regular expression used to detect XRUNs on server output messages Регулярное выражение для определения рассинхронизаций среди сообщений от сервера - + Connections Соединения - + Patchbay definition file to be activated as connection persistence profile Файл описания коммутатора, активируемый как профиль постоянного соединения - + Browse for a patchbay definition file to be activated Указать активируемый файл описания коммутатора - + Activate &Patchbay persistence: Активировать &постоянный коммутатор: - + Whether to activate a patchbay definition for connection persistence profile. Активировать ли описание коммутатора для профиля постоянного соединения. - + Display Интерфейс - + Transport &BBT (bar:beat.ticks) &BBT транспорта (такт:доля.тики) - + Elapsed time since last &Reset Время, прошедшее с последнего &сброса - + Elapsed time since last &XRUN Время, пошедшее с последней &рассинхронизации - + Messages Window Окно сообщений - + Sample messages text font display Каким будет шрифт для вывода сообщений сервера - - - - + + + + &Font... &Шрифт... - + Select font for the messages text display Выберите шрифт для отображения сообщений сервера - + msec мс - + n/a н/д - + Patchbay Definition files Файлы описания коммутатора @@ -2740,323 +3379,273 @@ Удалить текущий профиль - + &Audio: &Звук: - - H/W M&onitor - Аппаратный &контроль - - - + Force &16bit Принудительно &16 бит - + Force 16bit mode instead of failing over 32bit (default) Принудительно использовать 16бит-режим вместо 32бит (по умолчанию) - + Periods/&Buffer: Периодов на &буфер: - + Time in seconds that client is delayed after server startup Сколько секунд клиент ждёт после запуска сервера - - - - + + + + > > - - - - + + + + Scripting argument meta-symbols Метасимволы аргументов в сценариях - + &Capture standard output &Захватывать стандартный вывод - + Whether to capture standard output (stdout/stderr) into messages window Захватывать ли стандартный вывод (stdout/stderr) - - hh:mm:ss - чч:мм:сс - - - + Other Другое - + &Confirm application close За&прашивать подтверждение на выход - + Whether to ask for confirmation on application exit Спрашивать ли подтверждение на выход из программы - + &Preset Name Имя &профиля - + &Server Path За&пуск сервера - + &Driver &Драйвер - + &Interface &Интерфейс - + Sample &Rate &Частота дискр. - + &Frames/Period &Фреймов/период - + Periods/&Buffer Периодов/&буфер - - oss - oss - - - + Port Ma&ximum: &Макс. портов: - + Maximum number of ports the JACK server can manage Максимальное кол-во портов, обрабатываемых сервером JACK - + &Input Device: Устройство &входа: - + &Output Device: Устройство в&ыхода: - - - + + + /dev/dsp /dev/dsp - + No Memory Loc&k Б&ез блокировки памяти - + Do not attempt to lock memory, even if in realtime mode Не пытайтесь заблокировать память, даже в режиме реального времени - + &Ignore H/W &Игнорировать апп. буфер и период - + &Word Length: Ра&зрядность слова: - + Time Display Отображение времени - + Transport &Time Code &Тайм-код транспорта - + Sample front panel normal display font Пример текста в малом счётчике - + Sample big time display font Пример текста в большом счётчике - + Normal display: Малый счётчик: - + Big Time display: Большой счётчик: - - Time F&ormat: - &Формат времени: - - - - hh:mm:ss.d - чч:мм:сс.д - - - - hh:mm:ss.dd - чч:мм:сс.дд - - - - hh:mm:ss.ddd - чч:мм:сс.ддд - - - - The general time format on display - Общий формат вывода времени на дисплей - - - + &Messages limit: Предел кол-ва &сообщений: - + Whether to keep a maximum number of lines in the messages window Ограничивать ли количество строк в окне сообщений - + 100 100 - + 250 250 - + 2500 2500 - + The maximum number of message lines to keep in view Максимальное количество строк сообщений, доступное при просмотре - + &Start JACK audio server on application startup &Запускать звуковой сервер JACK при старте программы - + Whether to start JACK audio server immediately on application startup Запускать ли сервер JACK при старте QJackCtl - + &Keep child windows always on top О&кна программы всегда наверху - + Whether to keep all child windows on top of the main window - + &Enable system tray icon &Включить область уведомления - + Whether to enable the system tray icon Включать ли область уведомления (системный лоток, system tray) - + S&ave JACK audio server configuration to: Со&хранять конфигурацию JACK в файл: - + Whether to save the JACK server command-line configuration into a local file (auto-start) - + .jackdrc .jackdrc - + The server configuration local file name (auto-start) - - C&onfigure as temporary server - &Настроить как временный сервер - - - - Whether to exit once all clients have closed (auto-start) - Завершать ли работу при отсоединении все клиентов - - - - - + + + Warning Предупреждение - + Some settings have been changed: "%1" @@ -3069,7 +3658,7 @@ Вы хотите сохранить изменения? - + Delete preset: "%1" @@ -3082,47 +3671,47 @@ Вы уверены? - + &Server Name &Имя сервера - + Startup Script Сценарий, выполняемый при запуске - + Post-Startup Script Сценарий, выполняемый после запуска - + Shutdown Script Сценарий, выполняемый при выключении - + Post-Shutdown Script Сценарий, выполняемый после выключения - + Active Patchbay Definition Активное описание коммутатора - + Messages Log Журнал сообщений - + Log files Файлы журналов - + Some settings have been changed. Do you want to apply the changes? @@ -3131,17 +3720,12 @@ Применить эти изменения? - - jackdmp - jackdmp - - - + &Name: &Название: - + The JACK Audio Connection Kit sound server name @@ -3151,601 +3735,585 @@ Используемый звуковой драйвер - - sun - sun - - - - coreaudio - coreaudio - - - - freebob - freebob - - - - firewire - firewire - - - + MIDI Driv&er: &Драйвер MIDI: - + The ALSA MIDI backend driver to use Используемый драйвер ALSA MIDI - + none нет - + raw - raw + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + seq - seq + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Please do not touch these settings unless you know what you are doing. - + Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Разблокировать память основных библиотек интерфейсов (GTK+, QT, FLTK, Wine) - + &Unlock Memory &Разблокировать память - + Ignore xruns reported by the backend driver - - Enable hardware monitoring of capture ports - Включить аппаратный контроль портов захвата - - - + Enable hardware metering on cards that support it Включить аппаратное измерение для поддерживающих эту функцию карт - + Ignore hardware period/buffer size - + &Verbose messages &Подробный вывод - + Maximum input audio hardware channels to allocate Максимальное число резервируемых каналов входа - + External output latency (frames) - + Capture Only Только захват - + Playback Only Только воспроизведение - + The PCM device name to use Имя используемого устройства PCM - - - + + + plughw:0 plughw:0 - - - + + + /dev/audio /dev/audio - + Alternate input device for capture Выберите устройство входа для захвата - + Maximum output audio hardware channels to allocate Максимальное резервируемое число звуковых каналов устройства - + Alternate output device for playback Альтернативное устройство воспроизведения - + External input latency (frames) - + Set dither mode Выберите способ подмешивания шума - + Server path (command line prefix) - + Number of periods in the hardware buffer Количество периодов в аппаратном буфере - + &Channels: &Каналов: - + 192000 192000 - + Word length Длина слова в байтах - + Maximum number of audio channels to allocate Максимальное число резервируемых звуковых каналов - + &Channels I/O: I/O &каналов: - + &Latency I/O: &Задержка I/O: - + Server Suffi&x: Су&ффикс сервера: - + Whether to execute a custom shell script before shuting down the JACK audio server. - + Execute script on Shut&down: В&ыполнять сценарий при выходе: - + Browse for script to be executed before shutting down the JACK audio server - + Command line to be executed before shutting down the JACK audio server - + Execute script after Shu&tdown: Выполнять сценарий после &выключения: - + Whether to reset all connections when a patchbay definition is activated. Сбрасывать ли все соединения при активации описания коммутатора - + &Reset all connections on patchbay activation С&брасывать все соединения при активации коммутатора - + Whether to issue a warning on active patchbay port disconnections. Показывать ли предупреждение о рассоединениии портов активного коммутатора - + &Warn on active patchbay disconnections Предупре&ждать о рассоединения в активном коммутаторе - + Logging Журналирование - + Messages log file Файл журнала сообщений - + Browse for the messages log file location Указать расположение файла журнала - + Whether to activate a messages logging to file. Сохранять ли протокол в файл журнала - + + Setup + + + + + Whether to use server synchronous mode + + + + + &Use server synchronous mode + + + + Advanced Дополнительные - + &Messages log file: Файл &журнала: - + Select font for front panel normal display Выбрать шрифт для малого счётчика - + Select font for big time display Выбрать шрифт для большого счётчика - - Whether to enable a shiny glass light effect on the main display - Изображать ли блик на основном дисплее - - - - &Display shiny glass light effect - Включить эффект &блика на дисплее - - - + Whether to enable blinking (flashing) of the server mode (RT) indicator - + Blin&k server mode indicator &Мерцать индикатором режима сервера - + Connections Window Окно соединений - + Sample connections view font Шрифт для диалога управления соединениями - + Select font for the connections view Выберите шрифт для просмотра соединений - + &Icon size: &Размер значков: - + The icon size for each item of the connections view Размер значка каждого элемента в окне соединений - + 16 x 16 16 × 16 - + 32 x 32 32 × 32 - + 64 x 64 64 × 64 - + Whether to enable in-place client/port name editing (rename) - + Ena&ble client/port aliases editing (rename) Ра&зрешить переименование алиасов клиентов/портов - + Whether to enable client/port name aliases on the connections window - + E&nable client/port aliases &Разрешить алиасы клиентов/портов - - Whether to draw connection lines as cubic Bezier curves - Рисовать ли соединительные линии в диалогах «Соединения» и «Коммутатор» как кубические кривые Безье - - - + Server &Prefix: Пре&фикс сервера: - + Extra driver options (command line suffix) Дополнительные ключи дравера (суффикс в командной строке) - + Start De&lay: Задер&жка запуска: - + secs с - + 0 msecs 0 мс - - Draw connection and patchbay lines as Be&zier curves - Рисовать линии соединения как кривые &Безье - - - + Misc Разное - + Whether to stop JACK audio server on application exit Останавливать ли звуково сервера JACK при выходе из приложения - + S&top JACK audio server on application exit Оста&навливать JACK при выходе из приложения - + Whether to start minimized to system tray Запускать ли приложение в области уведомления, скрывая основное окно - + JACK client/port pretty-name (metadata) display mode - + Enable JA&CK client/port pretty-names (metadata) - - Whether to show system tray message on main window close - Показывать ли сообщения программы в области уведомления, когда основное окно скрыто + + Whether to ask for confirmation on JACK audio server shutdown and/or restart + - - Sho&w system tray message on close - Показывать сооб&щения в области уведомления + + Confirm server sh&utdown and/or restart + - - Whether to ask for confirmation on JACK audio server shutdown - + + Whether to show system tray message on main window close + Показывать ли сообщения программы в области уведомления, когда основное окно скрыто - - Confirm server sh&utdown - &Запраживать подтверждение на остановку сервера + + Sho&w system tray message on close + Показывать сооб&щения в области уведомления - + Start minimi&zed to system tray - + Whether to enable ALSA Sequencer (MIDI) support on startup Включать ли при запуске поддержку MIDI-секвенсера ALSA - + E&nable ALSA Sequencer support &Включить поддержку секвенсера ALSA - + Whether to enable JACK D-Bus interface - + &Enable JACK D-Bus interface - + Buttons Кнопки - + Whether to hide the left button group on the main window Скрывать ли группу кнопок в левой части основного окна - + Hide main window &Left buttons Скрывать &левые кнопки основного окна - + Whether to hide the right button group on the main window Скрывать ли группу кнопок в правой части основного окна - + Hide main window &Right buttons Скрывать прав&ые кнопки основного окна - + Whether to hide the transport button group on the main window Скрывать ли группу кнопок управления транспортом в основном окне - + Hide main window &Transport buttons Скрывать кнопки &транспорта - + Whether to hide the text labels on the main window buttons Скрывать ли надписи на кнопках в основном окне - + Hide main window &button text labels Скрывать по&дписи кнопок основного окна - + &JACK client/port aliases: &Алиасы клиентов/портов JACK: - + JACK client/port aliases display mode - + Default По умолчанию - + First Первый - + Second Второй - + + Whether to replace Connections with Graph button on the main window + + + + + Replace Connections with &Graph button + + + + Defaults Используемые по умолчанию параметры - + &Base font size: &Кегль шрифта в интерфейсе: - + Base application font size (pt.) - + 11 11 - + 12 12 - + net - net + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to enable D-Bus interface Влючать ли интерфейс D-Bus - + &Enable D-Bus interface Вклю&чить интерфейс D-Bus - + Number of microseconds to wait between engine processes (dummy) - + netone - netone + DO NOT TRANSLATE - https://github.com/rncbc/qjackctl/issues/54 + - + Whether to restrict to one single application instance (X11) - + Single application &instance Зап&ускать только одну копию программы @@ -3798,6 +4366,11 @@ Добавить штепсель в список штепселей сокета + + Socket + Сокет + + &Plug: &Штепсель: @@ -3927,11 +4500,6 @@ (Нет) - - Socket - JACK Audio Connection Kit - Сокет - - Edit currently selected plug Изменить выбранный штепсель diff -Nru qjackctl-0.4.5/TRANSLATORS qjackctl-0.6.0/TRANSLATORS --- qjackctl-0.4.5/TRANSLATORS 2017-04-27 14:44:14.544750473 +0000 +++ qjackctl-0.6.0/TRANSLATORS 2019-10-17 07:45:45.945673225 +0000 @@ -20,5 +20,8 @@ Dutch (nl) Peter Geirnaert +Portuguese (pt) + Heitor Rocha + Russian (ru) Alexandre Prokoudine