qjackctl-0.3.10/PaxHeaders.16050/AUTHORS0000644000175000001440000000007007710566655015477 xustar000000000000000027 atime=1364826684.187395 29 ctime=1364826684.18839549 qjackctl-0.3.10/AUTHORS0000644000175000001440000000004207710566655014762 0ustar00rncbcusers00000000000000Rui Nuno Capela qjackctl-0.3.10/PaxHeaders.16050/ChangeLog0000644000175000001440000000012412126315070016155 xustar000000000000000027 mtime=1364826680.343008 27 atime=1364826684.415395 30 ctime=1364826684.415395494 qjackctl-0.3.10/ChangeLog0000644000175000001440000014351212126315070015452 0ustar00rncbcusers00000000000000QjackCtl - JACK Audio Connection Kit Qt GUI Interface ----------------------------------------------------- ChangeLog 0.3.10 2013-04-01 The singing swan rehersal. - Session infra-client management finally being added. - Preparations for Qt5 migration. - Transport tempo (BPM) precision display fixed to 4 digits. - Color-candy (dang old ANSI terminal?) escape sequences are now silently stripped from jackdbus messages captured log (onliner from original patch by Brendan Jones, thanks). - List ALSA device card id. string instead of device number, while on setup dialog. - Japanese (ja) translation added (by Takashi Sakamoto). 0.3.9 2012-05-18 The last of the remnants. - Killing D-BUS controlled JACK server is now made optional, cf. Setup/Misc/Stop JACK audio server on application exit. (a patch by Roland Mas, thanks). - Added include to shut up gcc 4.7 build failures. - Make(ing) -jN parallel builds now available for the masses. - A mis-quoting bug at the command line argument string may have been crippling the (unmaintained) Windows port since ever, leaving its main function to start jackd dead in the water, belly down :) now hopefully fixed (following a mail transaction with Stephane Letz and Mathias Nagorni, thanks). - Currently a JACK2-only feature, the JACK version string display at the About dialog box, must now be explicitly enabled on configure time (--enable-jack-version). - A new so called "Server Suffix" parameter option appears to rescue on the situations where QjackCtl falls short on extra, exquisite and/or esoteric command line options eg. (net)jack1/2 differences. - Fixed D-Bus Input/Output device parameter settings, filled when either interface is selected for Capture/Playback only. (probable fix for bug #3441860). - Fixed Makefile.in handling of installation directories to the configure script eg. --datadir, --localedir, --mandir. (after an original patch from h3xx, thanks). - Main window is now brought to front and (re)activated when clicking on the system tray icon instead of just hiding it. - Add current xrun count to the system tray icon tooltip, if not zero (after patch #3314633 by Colin Fletcher, thanks). 0.3.8 2011-07-01 JACK Session versioning. - Debugging stacktrace now applies to all working threads. - Session "Save" button now a drop-down menu, replacing the session save type combo-box/drop-down list selection. Also, an early session directory versioning/numbering scheme is now in place, although optional. - Probable fix to debian bug report #624198 - segfault when pressing the stop button (by Grant Adrian Diffey, after a patch from Adrian Knoth, thanks). - Desktop environment session shutdown (eg. logout) is now tapped for graceful application exit, even though the main window is active (visible) and minimizing to system tray is enabled. Both were causing first shutdown/logout attempt to abort. Not anymore, hopefully ;). - Make sure all activated patchbay definition files are in their complete and absolute directory path forms. - Connections refresh button now does an immediate and true reconstruction of all clients and their respective ports and connections, unconditionally. - Command line server start option (-s, --start) is now made independent from configuration setup option (cf. Setup/Misc /Start JACK audio server on application startup). - Now handling cable socket types properly to let patchbay definitions work correctly, whenever having sockets with the very same literal name (twisted from patch #3183467, by Karsten, thanks;). - Abrupt focus behavior when any of the keyboard modifiers (Shift, Ctrl, Alt, Caps Lock) is hit while on Connections client/port aliases editing (rename) has been fixed. - Russian (ru) translation updated (by Alexandre Prokoudine). - Added include "errno.h" alegedly missing for BSD style systems (applying patch for bug #3126091). 0.3.7 2010-11-30 JACK Session managerism. - Session widget has session save type preserved as well. - Connections and the new Messages/Status widgets now have their last open tab preserved across program run-cycles. - Connections and Patchbay widgets have been finally given up on an old feature request: an Expand All items button. - A significant UI layout has been made: the Messages and Status widgets were merged into one, giving space to the brand new Session wigdet to be easy accessible from the main panel control window. - libX11 is now being added explicitly to the build link phase, as seen necessary on some bleeding-edge distros eg. Fedora 13, Debian 6. (closing bug #3050915). - Input/Output latency options were missing but now finally enabled for the firewire back-end. - General standard dialog buttons layout is now in place. - Avoid pre-loading a stalled patchbay definition filename and its nagging error on startup (fixes bug #3017078). - Client connection retrial logic scrapped. Being a leftover from early ages, when machines were slower and JACK server startup times were longer... now, if it can't connect first time as client, it will tear down the server whether it's starting up still or not at all. (cf. Setup/Settings/Start Delay for the rescue). - Server name is finally part of the server settings presets, thanks to Fons Adriaensen for the heads-up. - As a workaround regarding issues switching jack2's backends, Robin Gareus sends us yet another D-Bus method slot: "preset", (dbus-send --system / org.rncbc.qjackctl.preset string:PRESET). Thanks again. - Another D-Bus interface slot makes it through implementation: "quit" (eg. usage: dbus-send --system / org.rncbc.qjackctl.quit). Besides, there's also these new JACK session management actions which were being overlooked as well: "load", "save", "savequit" and "savetemplate" are also available as D-Bus method slots. - Make sure that Patchbay socket names are unique when adding or copying, fixing previous patch by Dominic Sacre. - JACK version is now being shown on the About box (jack2). - Slight Connections widget behavioral change: (dis)connecting a client (from) to one single port, (dis)connections will be applied in sequence from (to) all client output ports to (from) as many input ports there are in below, one by one (satisfying a 5 year old request from Yann Orlarey, thanks:). - JACK session support is being introduced. - Ignore first XRUN occurrence option dropped from statistics. - Initial widget geometry and visibility persistence logic has been slightly revised as much to avoid crash failures due to wrong main widget hidden state. - Double-quotes are now being added to device names which include blank characters and were rendering invalid all command line invocation of the classic JACK server (eg. specially due for Portaudio device names on Windows). - Transport play (rolling) status is now being guarded to avoid backfiring from extraneous transport state changes. - General source tree layout and build configuration change. - Italian (it) translation added (by Sergio Atzori). - Post-shutdown script invocation logic slightly refactored in attempt to enforce its execution on application quit. 0.3.6 2010-03-09 Full D-Busification! - Make sure socket names are unique on each side of the Patchbay (another patch from Dominic Sacre, thanks). - A bunch of primitive D-Bus interface slots have been added, allowing shortcut access to most of main applications actions like toggling Messages, Status, Connections, Patchbay widget pop-ups, reset stats, transport and so on. New bindings are given eg. via dbus-send --system / org.rncbc.qjackctl.(main, messages, status, connections, patchbay, setup, about, reset, rewind, backward, play, pause, forward). (from an original idea from Sebastian Gutsfeld, thanks). - Patchbay snapshot now tolerates JACK client port strings that have more than one semi-colon in it, honoring just the first one exactly as everywhere else eg. Connections. (a glitch as reported by Geoff Beasley while using a2jmidid). - Most modal message dialog boxes (eg. critical errors) are now replaced by system tray icon bubble messages where available (mitigating feature request #2936455). - Comply with jackd >= 0.118.0 which nowruns in real-time mode by default; use of -R is now deprecated from the jackd command line interface options; use -r to run in non-real-time-scheduling. - A man page has beed added. - Got rid of a pretty old and never really useful "jackd-realtime" server path option--actually, it was only seen available on the now defunct old Mandrake Linux distro. - D-Bus support, as provided by org.jackaudio.service aka jackdbus, is now being introduced and used wherever available and whenever enabled. Configuring, starting, stopping and logging the JACK back-end server through the "infamous" jackdbus service is now being seamlessly exploited. - Global configuration state is now explicitly saved/committed to disk when Setup dialog changes are accepted and applied. - Server name command line option added (-n, --server-name). - Single application instance restriction option added (X11). - Setup for the netjack (slave) "net" driver has now sample-rate and frames per buffer (period size) settings disabled and/or ignored, as those are pretty much auto-detected by default; also, a new "netone" backend driver option has been introduced (as suggested by Torben Hohn). - Czech (cs) translation added (by Pavel Fric). - Fixed some main window keyboard shortcuts. Escape key now closes Connections, Patchbay, Status and Messages widgets as usual (bug #2871548). - Fixed glitch on configure portaudio support, specially when the library is not detected as available. 0.3.5 2009-09-30 Slipped away! - Late support for UTF-8 encoded client/port names. - Allow only one single patchbay connection to or from an exclusive socket (mitigating bug #2859119). - Automatic crash-dump reports, debugger stack-traces (gdb), back- traces, whatever, are being introduced as a brand new configure option (--enable-stacktrace) and default enabled on debug build targets (--enable-debug). - Probable fix on the audio connections with regard to client/port (re)name changes (an ancient bug reported by Fons Adriaensen). - Portaudio device selector is now available (after a patch handed by Torben Hohn and Stephane Letz). - A couple of primitive D-Bus interface slots have been introduced, giving the option to start/stop the jackd server from the system bus eg. via dbus-send --system / org.rncbc.qjackctl.start (.stop), (a nice addition supplied by Robin Gareus, thanks). - New command line option (-a, --active-patchbay=[path]) to specify and activate a given patchbay definition file (a simple patch sent by John Schneiderman, thanks). - Added one significant digit to DSP Load percentage status display. - Tentative support for netjack (slave) by adding the "net" driver to the existing backend driver options on the Setup/Settings section. - Converted obsolete QMessageBox forms to standard buttons. - New patchbay snapshot now raises the dirty flag and allows for the immediate salvage of patchbay definition profile. - Conditional build for JACK port aliases support (JACK >= 0.109.2). - Alternate icon sizes other than default 16x16, are now effective to the Connections widget (Setup/Dislay/Connections Window/Icon size). 0.3.4 2008-12-05 Patchbay snapshot revamp. - Introducing the very first and complete translations in-package: German (de), Spanish (es), French (fr) and Russian (ru); credits in TRANSLATORS. - At last, after years of retarded procrastination, the old infamous patchbay snapshot feature has been the subject of a almost complete rewrite and it does try to give a way better mapping of all actual and current running client/port connections, both JACK (audio, MIDI) and ALSA MIDI, of course ;) - On Setup/Settings/Parameters dialog, all device selection options are now reset to default when disabled interactively. - Grayed/disabled palette color group fix for dark color themes. - Qt Software logo update. - Fait-divers: desktop menu file touched to openSUSE conventions. - ALSA PCM devices now only listed/enumerated iif strictly compliant with the audio mode criteria (Duplex, Capture-only or Playback-only) as kindly suggested by Nedko Ardaunov. - JACK client/port aliases may now be displayed as a global user option (see Setup/Display/Connections/JACK client/port aliases). - Lighten up the connections line and highlight colors, as seen to fit best on some darker background themes. - Patchbay snapshot fixed to differentiate socket clients according to its type (Audio, MIDI or ALSA-Seq), avoiding the mess and gross mistake of hanging disparate type ports under the same client item. - JACK_DEFAULT_SERVER environment variable is now appended to the X11 unique application identifier, allowing for having multiple instances each controlling its own JACK server, besides the default one. - Due to some trouble with newer Qt >= 4.4 applications regarding font size configuration, a new global user option is now available to the rescue: Setup/Misc/Defaults/Base font size (default is no-op). 0.3.3 2008-06-07 Patchbay JACK-MIDI, file logging and X11 uniqueness. - Attempt to load Qt's own translation support and get rid of the ever warning startup message, unless built in debug mode. (transaction by Guido Scholz, while on qsynth-devel, thanks). - Messages file logging makes its first long overdue appearance, with user configurable settings in Setup/Options/Logging. - Only one application instance is now allowed to be up and running, with immediate but graceful termination upon startup iif an already running instance is detected, which will see its main widget shown up and the server started automatically (Qt/X11 platform only). - Finally, full JACK MIDI support sneaks into the patchbay; socket types now differ in Audio, MIDI and ALSA, following the very same nomenclature as found on the Connections widget tabs. - Sun driver support (by Jacob Meuser). - Delay window positioning at startup option is now being disabled, on the Setup/Misc tab, when Minimize to system tray is enabled. - Cosmetic fix: Setup/Settings tab, 'Input Device' text label was using a slightly smaller font than the rest of the application (bug#1872545, reported by Jouni Rinne). 0.3.2 2007-12-20 Patchbay heads-up with season greetings. - Patchbay port matching has been slightly extended, this time allowing for the multiple or as many-to-many connections between socket plugs, provided these are specified in proper regex form (after a patch proposed by Dave Moore, thanks). - A new option to start the program minimized when the system tray icon is enabled, is now available from Setup/Misc/Start minimized to system tray (as kindly suggested by Marc-Olivier Barre). - Regression from QSystemTrayIcon (Qt4 >= 4.2) implementation, at least on X11 environments: while the main application widget was minimized to the system-tray, closing any other top-level widget was causing the immediate and unexpected application shutdown. - Some portaudio backend settings are now being enabled, specially suited for the jackdmp flavouring. - Server mode display blinking, usually shown as the RT indicator, is now an option (Setup/Display/Blink server mode indicator when started). - Tool/child windows position and size preservation fixed. - The connections/patchbay auto-refresh option has been finally removed due to several user requests, although deprecated for quite some time now it has been the probable cause of some periodic xrun occurrences due to graph-locking in jackd (while making Geoff Beasley angry in the process:). - Messages line limit was not being checked, now honored. - Simple as it could ever be, the build executive summary report is now given on configure. - Patchbay snapshot ot its socket and port ordering back. - ALSA Sequencer support is now an optional feature on setup, preventing the annoying "MIDI patchbay will be not available" warning message, ruining window placement on Linux systems where the snd-midi-seq kernel module is not loaded or not favorable (eg. OSS) at startup (by request from Jussi Laako). - Get configure to try and detect the correct qmake location and insert it the search order, so let the qt4 tools take precedence when --with-qt option is given and older qt3 ones coexist and are found located ahead in the PATH. - The connections widget is now being properly refreshed, due to some quirk in the QTreeWidget which was preventing some items, specially the expanded ones, to disappear in the void. Meanwhile, with a hand from Stephane Letz, the client/port lookup method was changed to prevent duplicated, missing entries or worse, crashes due to weird behaved windows applications. - The xrun count stats can now be reset simply by middle clicking on the systray icon or the main window's display area (thanks to patch sent by Dominic Sacre). - An improved version of the "shiny" background image was issued. The original somehow looked like two different images put together, probably most apparent on a bright TFT screen (by Dominic Sacre). - A warning is now being issued, asking whether one wants to remove a corresponding Patchbay connection, when client/ports are being disconnected over the Connections window, thus avoiding automatic reconnection annoyance due to normal active Patchbay behavior. - The infamous "Keep child windows always on top" global option is now supposed to behave a little better when disabled, layering child windows as naturally as far the window manager dictates. - Input/Output Channel setting is now allowed to be greater than 32; the special default text is now displayed, also on Input/Output Latency and Priority settings spin-boxes. - Andreas Persson just sent a patch that makes it possible to compile and run qjackctl with Qt version 4.1. Applied without hesitation, thanks. 0.3.1a 2007-07-19 System-tray tooltip icon crash fix. - An immediate showstopper crash upon client start was irradicated, which was affecting those with the system-tray icon disabled, as is the default (thanks to Ken Ellinwood for first reporting this sloppy one). 0.3.1 2007-07-18 Shallowed bug-fix release. - The current DSP load percentage activity is now also displayed on the system-tray icon tooltip. - An illusive but nasty Connections/Patchbay item tooltip crash bug has been hopefully fixed (Qt >= 4.3). - Now using QSystemTrayIcon class facility if available (Qt4 >= 4.2) making the system-tray option available on most platforms, notably on Windows and Mac OS X. - Usage of QProcess class has been severely refactored, now using QProcess::start() instead of QProcess::startDetached(), giving much tighter control over the started jackd(mp) process. Downside is that QjackCtl lost its ability and option to leave the process detached upon quitting the application. Too bad. - A new eye-candy bit has sneaked in: server mode display, that is the RT indicator, now blinks when server/client is started/active. - Combo-box setup history has been corrected on restore, which was discarding the very initial default (factory) contents. - Now that Qt4 is accessible to open-source Windows appplications, there's some experimental stuff sneaking in for jackdmp support on win32 (http://www.grame.fr/~letz/jackdmp.html). - Connections list items were initially sorted in descending order by default. Fixed. Client items are now naturally sorted, again. 0.3.0 2007-07-10 Qt4 migration was complete. - Qt4 migration was complete. Care must be taken with this new configuration file and location: this release starts a new one from scratch and won't reuse any of the previous existing ones, although cut and paste might help if you know what you're doing :) - On a last-minute addition, the "firewire" audio backend driver option has been also included, supporting the ffado.org project which is evolving where "freebob" is leaving (thanks to Klaus Zimmermann for this one). 0.2.23 2007-07-02 JACK MIDI support debut. - JACK MIDI support is now being introduced. Connections window now has a brand new MIDI tab, the older being renamed to ALSA, as for the ALSA/MIDI sequencer conveniency. The server settings now include the MIDI driver setup option (ALSA backend only). - Application icon is now installed to ${prefix}/share/pixmaps; application desktop entry file is now included in installation; spec file (RPM) is now a bit more openSUSE compliant; initial debianization. - Invalidation of the JACK client handle is now forced right on jack_shutdown notification, preventing a most probable fatal crash due to jack_deactivate and/or jack_client_close being called after the jack_watchdog kicks in. - Default font option names were adjusted to "Sans Serif" and "Monospace", wherever available. - The "keep child windows always on top" option is not set as default anymore, because window focus behavior gets tricky on some desktop environments (eg. Mac OS X, Gnome). - Autoconf (configure) scripting gets an update. 0.2.22 2007-03-31 Long overdue but better late than never. - Fixed default settings for the freebob backend (JACK >= 0.103.0). - CPU Load status label now says correctly DSP Load. - The most recently used patchbay definitions can now be correctly selected in round-robin fashion from its drop-down list widget. - Avoid mixing JACK MIDI ports with regular audio ports on the Connections and Patchbay widgets; strictly list only audio ports. - Added 192k sample rate to setup settings drop down list (as kindly reminded by Klaus Zimmermann, thanks). - Most top-level widgets were missing the normal-widget flag, which were causing some sticky size behavior on some window managers. 0.2.21 2006-10-07 Shrinking on screen real-estate. - GPL address update. - All window captions can now be set smaller as tool-widgets. This option takes effect when child windows are kept always on top. - For the brave of heart, specially the ones brave enough to try with Stephane Letz's jackdmp, a win32 build should be now possible. - The main window button text labels are now optional (after a kind suggestion by Geoff Beasley, thanks). - Increse default maximum number of ports setting from 128 to 256. - Initial freebob backend driver support. Also changed the coreaudio backend driver command line device name/id parameter. - Closing the main window while not as an active JACK client, nor under a server running state, will just quit the whole application, even though the system-tray icon option is in effect. - The most relevant transport commands (Rewind, Play and Pause) are now made available on the main window context popup menu. - The post-shutdown script is now also being called when using the Stop button, whether the jackd server has been started internally or not. The initial hard-coded default is now on and set to `killall jackd` (as a workaround to an old request from Stephane Letz). - The main window buttons display are now optional. One can choose whether the left, right and/or transport buttons are hidden, making it for a total of six different modes for the main window presentation (after a much simpler suggestion from Paul Davis and Stephane Letz). - Added configure support for x86_64 libraries (UNTESTED). 0.2.20 2006-03-05 Featuring patchbay socket forwarding. - Server path setting now accepts custom command line parameters (after a kind suggestion from Jussi Laako). - The internal XRUN callback notification statistics and reporting has been changed to be a bit less intrusive. - Patchbay socket dialog gets some more eye-candy as icons have been added to the client and plug selection (combobox) widgets. - Connections and patchbay lines coloring has changed just slightly :) - New patchbay socket forwarding feature. Any patchbay socket can now be set to have all its connections replicated (i.e. forwarded) to another one, which will behave actively as a clone of the former. Forward connections are shown by vertical directed colored lines, and can be selected either on socket dialog or from context menu (currently experimental, only applicable to input/writable sockets). - Optional specification of alternate JACK and/or ALSA installation paths on configure time (after a patch from Lucas Brasilino, thanks). 0.2.19a 2005-11-28 MIDI aliases are back in town. - ALSA sequencer client/port name aliases are functional again; all actual MIDI sequencer client/port numerical identifier prefixes are also back in business. 0.2.19 2005-11-19 MRU patchbay selection, Mac OS X and other fixes. - Connections widget views are now properly refreshed after renaming client/ports (aliases). - Disabled system tray and ALSA sequencer support on configure time, whenever building for MacOSX as default. - Fixed the major issues with selecting an audio interface on Mac OSX; the button the right of the interface combo is now much better looking than it was before; input/output channel counts are also updated automatically now (thanks to Jesse Chappell for the patch). - Prevent the setting of the coreaudio device id on the jackd command line (-n) whenever the default interface is being selected. - The connections and patchbay windows are now allowed to have a wider connection lines frame panel; splitter width sizes are now persistent across application sessions (thanks to Filipe Tomas for the hint). - Activation toggling feedback on the patchbay widget has been fixed; additionally and as found convenient, the most recently used patchbay definitions can now be loaded immediately by selecting from a drop-down list widget, which replaces the old static patchbay name status text, and adds a lil'icon too :) - All widget captions changed to include proper application title prefix. - Attempt to bring those aging autoconf templates to date; sample SPEC file for RPM build is now being included and generated at configure time. - The current selected device is now shown with a checkmark on the device selection menu(s), while on the settings dialog. - Set to use QApplication::setMainWidget() instead of registering the traditional lastWindowClosed() signal to quit() slot, just to let the -geometry command line argument have some effect on X11. 0.2.18 2005-07-18 The mantra of bugfixes stays on. - A freezing and endless loop condition on the patchbay socket item duplication (copy) has been fixed. - Fixed output disability when messages limit option is turned off (thanks again to Wolfgang Woehl for spotting this one). 0.2.17 2005-06-17 Systemic I/O Latency settings are in. - Systemic I/O Latency settings are now featured for the alsa, oss and coreaudio backends, letting you specify the known latency of external hardware for client aware compensation purposes (thanks to Wolfgang Woehl, for the reminder). - Update on last backstage changes to the coreaudio backend options (due to Stephane Letz. Thanks). 0.2.16 2005-06-13 OSS device name selection and Mac OS X breakthrough. - ALSA sequencer client/port name changes are now properly detected on the MIDI connections widget (as noted by Chris Cannam. Thanks). - Long overdue transport buttons (rewind, backward and forward) finally landed onto the main control window, at last :). - Duplication (copy) of patchbay socket items was added. - Do not ever try to start the JACK server if there's one already found running, on which case the client-only mode of operation is then activated (as kindly suggested by Orm Finnendahl, thanks). - After several Mac OS X user requests, ALSA/MIDI sequencer support is now an option, otherwise detected at configure time and conditionally compiled in if, and only if, ALSA is found available (which has been a primordial assumption on Linux systems:). Ah, and that just makes for the blind inclusion of another backend driver option: coreaudio. - Actual OSS device selection menu now featured on setup dialog; these adds to the device selection button menus for the OSS driver settings. - Delayed geometry setup of windows upon startup was added as an optional workaround to subtle problems due to window decoration information not being available at window creation time on some window managers (as patch proposed by Dirk Jagdmann. Thanks). - Fixed some minor but rather old bug that was quitting the application abruptly, when one switches off the system tray icon while the main application widget is hidden. - Cancel is now an option when creating a new patchbay definition. - Context menus are finally littered with icons. - Minor configure and Makefile install fixes, as Debian and Mac OS X specialties. Also, install does the right thing with target file modes (thanks to Matt Flax and Ebrahim Mayat, for pointing these out). 0.2.15a 2005-02-09 Return of the paranoid. - Regression from 0.2.13, of the not so stupid pseudo-mutex guards on the connections management framework, after fixing some crash reports from Fernando Pablo Lopez-Lezcano and Dave Phillips (thanks!); it pays to be such a paranoid after all :). 0.2.15 2005-02-06 Client/port names aliasing and other minors. - JACK/ALSA client and port name aliasing (renaming) is now an optional feature for the connections window; all client/port aliases are saved on a per preset basis (as proposed for Lionstracs' Mediastation). - Server state now shown (back gain) on the system tray icon tooltip; speaking of which, tooltips are now also featured on connections, status and patchbay windows. - New actual hardware device selection menu featured on setup dialog; these new button menus are only available for the ALSA driver settings. - Server path factory default to jackd instead of jackstart; preset setup button icons are back. - Fixed rare connection port item removal/disconnection dangling pointer bug. 0.2.14 2005-01-23 More progressive optimizations. - Put a limit on XRUN callback messages and statistics report rate, preventing the potential hosing of the GUI due to a XRUN cascade storm. The maximum reasonable report rate has been fixed to be one XRUN callback occurrence per second. - Set to ignore the SIGPIPE ("Broken pipe") signal, where available, as the default handler is usually fatal when a JACK client is zombified abruptly. - All conection view items are now sorted in natural case insensitive order, not just as audio port names as was before. - Got rid of those nonsense paranoid and rather stupid pseudo-mutex guards on the connections management framework and event notifications (nuff said :). - Optional confirmation warning on audio server shutdown, if there's some audio clients still active and connected (as suggested by Sampo Savolainen). - Check for on configure time (as of JACK 0.99.42+ CVS). - "Unlock memory" server setup option was added, allowing the release of memory used by common toolkit libraries (GTK+, Qt, FLTK, Wine) that were being superfluously locked on every GUI JACK client; number of periods has now the minimum allowed value of 2; server start delay widget converted to spinbox; setup dialog layout slighly changed. - Removed stand-alone usx2y driver support. Since JACK 0.99.41+ CVS, the special "rawusb" support on the Tascam US-122/224/428 USB Audio/MIDI interface controllers have been merged and properly integrated into the regular alsa backend driver. Being still experimental, this special mode of operation is now triggered only when "hw:N,2" is specified as the alsa device name (N = soundcard index of snd-usb-usx2y module). - Messages window limit is now enforced only when the line count exceeds in one third the user configured line count maximum; if Qt 3.2.0+ is in use, the QTextView widget is otherwise set to the optimized Qt::LogText format. - XRUN status items are kept double-dashed if none has been detected. 0.2.13 2004-11-21 Retouches and minor optimizations. - Main window is now properly minimized instead of simply hidden when the system tray icon is not available nor opted in (as suggested by Florian Schmidt). - Some informational status items are now updated 10 times less frequently (e.g. CPU Load, Sample Rate, Buffer Size, Realtime Mode, etc.), lowering the CPU burden of most probably redundant status updates. - XRUN detection and statistics are being conditionally included if jack_get_xrun_delayed_usecs() is available (as of JACK 0.99.7+ CVS). - Fixed ancient bug on client shutdown event handling, which was invoking the xrun notification handler by mistake. - Support for maximum scheduling delay status added; this status relies on jack_get_max_delayed_usecs() function availability at configure time, depending on a Lee Revell's non-official JACK patch. - Patchbay Activate button is now a toggle button widget, allowing the deactivation of the current patchbay profile. - Reset-status icon has been changed to a simple red circle instead of previous one which was much like a power-switch symbol. - Preset selection has been added to the context menu. 0.2.12a 2004-10-11 Audio connections now naturally sorted. - Client port list on audio connections are now hopefully fixed for good; the sort comparison function now takes full natural order into account. 0.2.12 2004-10-08 Larger icons and font option on connections/patchbay. - Fixed some old and slow memory-leak due to redundand and repetitive call to jack_port_by_name() (discovered and solved, thanks to Jesse Chappell); some other free() and configure fixes were also applied. - Shiny display effect toggling has immediate feedback on setup dialog. - Added new usx2y driver support. - New scaled connections/patchbay icons were added; meanwhile, all inline XPM icons were removed and brainlessly converted to PNG format. - New setup options as for the connections/patchbay view apprearence: larger icon sizes and font selection are now possible, to better ease manipulation on a touchscreen (feature requested for Lionstracs' Mediastation). - Connection line width follows icon size in discrete proportion. - "Other" setup options moved to a new dialog tab, "Misc"; new extreme item values, 32 and 16 frames, added to the drop-down list of the Frames/Buffer setting (as suggested by Mark Knetch). 0.2.11 2004-09-10 Shiny display now optional and other fixes. - Fixed Input/Output channels settings, being now either enabled when the ALSA driver is selected for Capture/Playback only. - Shiny display effect: after some conservative user complaints this pure cosmetic feature is now made optional ;) 0.2.10 2004-09-04 Shiny display and curved connections. - New pre-shutdown script setup option, allowing to specify a shell-script to be run before the JACK server daemon is shutted-down. This overrides any previous shutdown script setting, which should be now moved onto the existing post-shutdown script option, as to keep old procedural behaviour. - Avoid stopping JACK prematurely with QProcess::kill() (oneliner fix); stopping JACK will now take a little bit longer, but hopefully will take the time to cleanup properly (thanks to Kjetil Matheussen). - ALSA driver Duplex mode accepts alternate Input or Output device name. - Context menu reset option is now always enabled (yet another suggestion from Sampo Savolainen). - Main display background gets shinny effect; adjusted system tray background palette color mode. - Priority and setup control is now a spinbox ranging from 0..89 (as suggested by Florian Schmidt). Same for Periods/Buffer. - Patchbay connection lines are now drawn correctly when items are scrolled out of view. Additionally, the connection lines can now be optionally drawn as bezier spline curves (big thanks to Wilfried Huss). 0.2.9 2004-07-04 Sloppy boy fixes and minor featuritis. - Patchbay socket dialog client and plug list option items are now properly escaped as regular expressions. - JACK callbacks are now internally mapped to QCustomeEvent's instead of using the traditional pipe notifications. - The system tray popup menu is now featured as a context menu on the main application window too. - The reset status option is now included in the system tray popup menu. - Server stop command button now enabled during client startup interval; this makes it possible to stop the server just in case the client can't be activated for any reason. - Top level sub-windows are now always raised and set with active focus when shown to visibility. 0.2.8 2004-04-30 System tray icon and menu option. - New option for system tray icon and menu, which is known to be effective on KDE enabled desktops; support for freedesktop.org's system tray protocol specification has been included so this maybe also effective on Gnome2. - Capture or Playback-only optional alternate device interface name may now be specified for the ALSA audio driver server settings. - Maximum number of ports setting was added to server setup. - The dash (-) is now a legal character for preset names. 0.2.7b 2004-04-05 OSS driver setup fix. - OSS driver halfduplex setup operation is now fixed, thanks to Jussi Laako. 0.2.7a 2004-04-05 Compilation fix for Qt 3.1. - QSplitter::setChildrenCollapsible call is now conditionally compiled, applied only on Qt 3.2+. 0.2.7 2004-04-04 User-interface refinements and OSS driver support. - Connections and patchbay windows horizontal layout are now user configurable via splitter widgets. - Refresh on connections window now take effect on both tabs, Audio (JACK) and MIDI (ALSA). - OSS driver support and no-mlock option added to server settings, setup dialog (as of JACK 0.95.7+). - Temporary server configuration option added, applicable to the auto-start server feature on client applications, whether the server shall exit once all clients are closed. - Server mode (RT) status display added. - Warning messages are now prompted to the user when there are any pending changes not saved nor applied while on the setup dialog. - Translation support for the default preset name "(default)". - Messages window pops up whenever a critical error message is issued. 0.2.6 2004-02-29 More work in progress. - Message window line limit is now a configurable option on setup, as is whether the command-line local configuration file gets saved at all; the first argument of the command-line configuration is stuffed to be the executable server command absolute path, when possible. - Warning message issued if ALSA sequencer is not available on startup; also if server settings are changed while client is currently active. - Server autostart magic is locally disabled by forcing the environment variable JACK_NO_START_SERVER at startup; with any luck this will maintain qjackctl's behaviour whether the JACK server is already started or not. - Makefile.cvs makes its late entrance on the build toolset. 0.2.5 2004-02-16 Server survival option and command-line wrapper feature. - New option on application exit for leaving the JACK server daemon running, surviving the parent process; the confirmation prompt on application close now features a "Terminate", "Leave" and "Cancel" button options. - New command-line wrapper feature for JACK client applications, thus giving a convenient head start for the JACK audio server as needed (as suggested by Fernando Pablo Lopez-Lezcano, of Planet CCRMA fame). - Messages, Status, Connections and Patchbay pop-up windows are not hinted as dialogs anymore and thus are not centered relative to parent main window which has become a strict Qt dialog widget behaviour (as of Qt 3.3+). - Patchbay window content changes are now properly updated, without the need for a later manual refresh to redraw stalled connection lines. - The snapshot option for creating a new patchbay definition from current actual connections now takes client and port names as regular expressions and smart enough when regarding more than two contiguous decimal digits :) - Patchbay socket list view ordering is now properly preserved; socket dialog gets plug list handling ehancements; active patchbay gets reloaded when commited and saved to file; connections redraw on socket removal has been fixed. - Server literal command-line is now saved into local configuration file (~/.jackdrc) for convenience of future auto-start client applications. - New setup option on whether all child windows are kept on top of the main window, or otherwise floating with probable taskbar entries of their own. - Setup changes that are only effective next time the program is run gets an informational message box shown to the user. 0.2.4 2004-02-01 Exclusive patchbay sockets. - Patchbay definitions may now be configured with exclusive sockets; this way, only one defined connection is allowed as soon as it's available, being all others immediatelly disconnected whenever attempted. - On the connections view, current connected client ports are now slightly highlighted (blue) whenever a client or port is selected on the opposite column (as suggested by Lawrie Abbott). - Connections and patchbay drag and drop feature is now bilateral; you can now drag and drop an item from right to left to establish the connection. 0.2.3a 2004-01-19 Time format combo-box tooltip fix. - A qt-designer copy-paste leftover has been fixed; sloppy boy I am ;) 0.2.3 2004-01-19 Tenths, hundredths, milliseconds, whatever. - Custom time format setup for all elapsed times, allowing the display of tenths, hundredths or even milliseconds instead of just hundredths of second for transport time code. 0.2.2 2004-01-16 Hundredths are back. - Transport time is now shown with hundredths of second (hh:mm:ss.dd), as it was once before but not constant zero. - Client start delay now configurable on setup; this may be of help for slow machines or unusual long server driver startups (e.g. portaudio). - Client-only mode restart has been fixed. - Messages color retouching. - Popup menus memory leak fixed. 0.2.1 2003-12-29 The fix of fixes. - Fixed jackstart/jackd command line parameter argument concatenation. - Front panel status display font can now be customized. - Some connection graph changes were being silently missed, now fixed. - Messages window fallback fix; stdout handling has been retouched to be more line buffer oriented. 0.2.0 2003-12-12 ALSA sequencer patchbay entrance. - ALSA sequencer subscription patchbay feature, complementing current audio service with a MIDI application connection graph, gracefuly included on the same front-end. - Current preset name is shown on main window caption title. New button and form icons. Messages window blankness rendering fix. - Immediate server startup option was made persistent and therefore remembered across sessions. - Standard output/error stream capture setup option. 0.1.3 2003-11-26 Server settings profile/preset feature. - Server setup settings can now be profiled, named and saved as presets. Command line preset name option and scripting argument meta-symbols are also featured for convenience (kindly suggested by Sampo Savolainen). - New configure time argument debugging support (--enable-debug). 0.1.2 2003-11-16 More work in progress. - Qmake project file (qjackctl.pro) now generated by configure (autoconf), introducing the explicit binding support to libqt-mt (multi-thread). - Main window is not hinted as a dialog anymore, giving room to the minimize button on some other window managers; application close confirm warning is now an option. - Removed deprecated settings options: temporary directory and ASIO mode; new available settings for the ALSA driver: force 16bit format, maximum input channels and output channels (as of JACK 0.90.x). - Transport time display looses static hundredth seconds decimal digits. 0.1.1a 2003-11-01 Whatever happened to OK button icons. - Restored missing OK button icons. 0.1.1 2003-10-29 Minor feature enhancements and bugfixes. - Main window display items are now made fixed in width, at least those more prone to change frequently and thus caused some display jitter. - Messages, status, connections and patchbay module windows are now reopened automagicaly on startup as they were on previous session. - New patchbay definition snapshot option from current actual connections; current active patchbay filename status indication on title. - New icons patchbay editor window and socket dialogs; own stdout/stdin is now properly captured and shown on messages log window. - Fixed an obvious patchbay connection scan freezing bug; default .xml file extension enforcement on save. 0.1.0 2003-10-22 Major user interface redesign. - Main application window complete redesign, now more like a multimedia/LCD control panel -- old main window dialog tabs are now splitted in separate pop-up windows/dialogs; big time display options. In other words, this sums up to a nice complete application rewrite. - Deprecated options for forcing aRTs and jackd daemons are no longer available; this functionality can be officially superceded by the more generic startup/shutdown script options. - Seamless support for externally started JACK server, providing a client-only mode of operation; if the JACK daemon is already started, qjackctl enters in client detached mode automagically. - Messages window font is configurable and saved across sessions (by Jack O'Quin's humble request). Some colorization has been introduced on some event messages. - Preliminary patchbay persistence feature is under way. A patchbay definition editor is already included, following an alternative socket-plug patchbay model that aliases and is a direct map to the client-port JACK connections model. The patchbay definitions are stored as text/xml files. - New post-startup script option; immediate JACK server startup command line option (as suggested by Kasper Souren). 0.0.9a 2003-10-03 Tiny bugfixes. - Startup/shutdown script options now correctly saved and restored. - Dummy driver wait parameter is now properly set on startup. - Confirmation warning on disconnecting all ports (as suggested by Robert Jonsson). 0.0.9 2003-09-25 Work in progress. - New connection port item pixmaps that distinguishes physical from logical ports. - History of most recently used values gets saved for some settings and options comboboxes widgets. - New startup and shutdown script options, intended to supersede the mess of forcing artsd and jackd itself, in a near future ;) this way, one can also include the operation of the LADCCA daemon (following a suggestion from Kasper Souren). - Connections command buttons are now shortly disabled after clicking, avoiding accidental duplicated connections. 0.0.8 2003-09-19 Preliminary transport and buffer size status control. - Transport status and control introduced (requires JACK 0.80.0+); - Statistics tab renamed to Status, where the transport state info and simple play/pause control buttons are now placed; - Buffer size status is yet another item on the list view. 0.0.7 2003-09-15 Minor bugfixes. - Inverse alphabetic ordering fixed on Connections port listing. - Verbose option added; messages view font size fix; about Qt dialog; logo pixmap retouched. - Configure script now checks for Qt 3.1.1 or greater. 0.0.6 2003-09-12 Drag-n-drop and more feature enhancements and bufixes. - Patchbay connection user interface handling has been fairly rewritten; (features new bugs while fixing old ones ;-) - Reset XRUN statistics button added; reset time recorded on statistics; calculated latency is now shown on settings; ASIO mode disables Periods/Buffer setting (all suggestions by Lawrie Abbott). - Context popup menu introduced for port connection handling; includes new command for disconnecting all currently connected ports. - Closing the application while JACK is running, is now presented with a warning confirmation message (preventing accidental Esc key press? :). - Patchbay port lists ordering are now more numerical-friendly than ever, taking account for sub-numbering port names (following yet another suggestion from Lawrie). - Connection drag-and-drop is now featured after many, many requests. - Corrected the configure script to properly recognize Qt 3.0.1 or greater. 0.0.5 2003-09-05 Minor feature enhancements and bugfixes. - Internationalization support added; future qjackctl_${LANG}.qm translation files are located on ${prefix}/share/locale . - New dummy and portaudio driver support (as of JACK release 0.80.0+). - A couple of silent memory leak bugs have been corrected. 0.0.4 2003-08-29 Minor changes and bugfixes. - The patchbay port lists are now sorted in a more numerical friendly manner (as suggested by Steve Harris); the sort code has been "borrowed" from qjackconnect, yet again. - Patchbay port connection lines are now always visible, even if their respective connected port items aren't. - Multiple simultaneous port connections can now be handled when a client application item is selected for connection/disconnection (again, suggested by Steve Harris), replicating and extending qjackconnect's similar behaviour. - An auto-refresh option for the patchbay connections is now available, for those cases when client code just can't handle properly some callbacks. - Window positioning and sizing is now almost persistent across sessions; as before, position is saved for the minimal view mode; but now, the details dialog view mode gets its position and size independantly saved also. 0.0.3 2003-08-07 Integrated visual patchbay. - A patchbay for jack port connections is now integrated, much like the greatest Mathias Nagorni's qjackconnect (http://www.suse.de/~mana/jack.html). 0.0.2 2003-08-02 Client code features introduced. - JACK library and header files are checked on configure. - Server CPU load, sample rate and time elapsed since last XRUN detected, are now displayed on statistics. 0.0.1 2003-07-26 Initial release. qjackctl-0.3.10/PaxHeaders.16050/configure0000644000175000001440000000013012126315076016312 xustar000000000000000029 mtime=1364826686.06739552 30 atime=1364826685.949395518 29 ctime=1364826686.06739552 qjackctl-0.3.10/configure0000755000175000001440000055457712126315076015636 0ustar00rncbcusers00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for QjackCtl 0.3.10. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and rncbc@rncbc.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='QjackCtl' PACKAGE_TARNAME='qjackctl' PACKAGE_VERSION='0.3.10' PACKAGE_STRING='QjackCtl 0.3.10' PACKAGE_BUGREPORT='rncbc@rncbc.org' PACKAGE_URL='' ac_unique_file="src/qjackctl.cpp" ac_default_prefix=/usr/local # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS ac_incpath ac_libs ac_lrelease ac_lupdate ac_uic ac_moc ac_qmake EGREP GREP CXXCPP ac_ct_CXX CXXFLAGS CXX CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC ac_qdbus ac_debug ac_prefix target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_debug enable_system_tray enable_jack_midi enable_jack_session enable_jack_version enable_alsa_seq enable_portaudio enable_dbus enable_stacktrace with_qt with_jack with_alsa with_portaudio ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC CXXCPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # 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.3.10 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/qjackctl] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of QjackCtl 0.3.10:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --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-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) --enable-jack-version enable JACK version support (default=no) --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-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-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 Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags CXXCPP C++ preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF QjackCtl configure 0.3.10 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------ ## ## Report this to rncbc@rncbc.org ## ## ------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_cxx_check_func LINENO FUNC VAR # ------------------------------------ # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_cxx_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* 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 $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_func cat >config.log <<_ACEOF 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.3.10, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers src/config.h" ac_config_files="$ac_config_files Makefile qjackctl.spec src/src.pri src/qjackctl.desktop" # Set default installation prefix. ac_prefix=$prefix if test "x$ac_prefix" = "xNONE"; then ac_prefix=$ac_default_prefix fi cat >>confdefs.h <<_ACEOF #define CONFIG_PREFIX "$ac_prefix" _ACEOF # Enable debugging argument option. # Check whether --enable-debug was given. if test "${enable_debug+set}" = set; then : enableval=$enable_debug; ac_debug="$enableval" fi if test "x$ac_debug" = "xyes"; then $as_echo "#define CONFIG_DEBUG 1" >>confdefs.h ac_stacktrace="yes" ac_debug="debug" else ac_stacktrace="no" ac_debug="release" fi # Disable system tray argument option. # Check whether --enable-system_tray was given. if test "${enable_system_tray+set}" = set; then : enableval=$enable_system_tray; ac_system_tray="$enableval" else ac_system_tray="yes" fi # Disable JACK MIDI support option. # Check whether --enable-jack_midi was given. if test "${enable_jack_midi+set}" = set; then : enableval=$enable_jack_midi; ac_jack_midi="$enableval" else ac_jack_midi="yes" fi # Enable JACK session support. # Check whether --enable-jack_session was given. if test "${enable_jack_session+set}" = set; then : enableval=$enable_jack_session; ac_jack_session="$enableval" else ac_jack_session="yes" fi # Enable JACK version support. # Check whether --enable-jack_version was given. if test "${enable_jack_version+set}" = set; then : enableval=$enable_jack_version; ac_jack_version="$enableval" else ac_jack_version="no" fi # Disable 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" else ac_alsa_seq="yes" fi # Enable PortAudio argument option. # Check whether --enable-portaudio was given. if test "${enable_portaudio+set}" = set; then : enableval=$enable_portaudio; ac_portaudio="$enableval" else ac_portaudio="yes" fi # Enable D-Bus argument option. # Check whether --enable-dbus was given. if test "${enable_dbus+set}" = set; then : enableval=$enable_dbus; ac_dbus="$enableval" else ac_dbus="yes" fi if test "x$ac_dbus" = "xyes"; then $as_echo "#define CONFIG_DBUS 1" >>confdefs.h ac_qdbus="qdbus" fi # Enable debugger stack-trace option (assumes --enable-debug). # Check whether --enable-stacktrace was given. if test "${enable_stacktrace+set}" = set; then : enableval=$enable_stacktrace; ac_stacktrace="$enableval" fi # Standard installation base dirs. ac_with_paths="/usr /usr/local" # Some a-la-debian alternatives... for X in /usr/lib /usr/lib64 /usr/share; do for Y in qt qt4; do if test -d $X/$Y/bin; then ac_with_paths="$ac_with_paths $X/$Y" fi done done # Set for alternate Qt installation dir. # Check whether --with-qt was given. if test "${with_qt+set}" = set; then : withval=$with_qt; ac_with_paths="$ac_with_paths $withval" fi # Set for alternate JACK installation dir. # Check whether --with-jack was given. if test "${with_jack+set}" = set; then : withval=$with_jack; ac_with_paths="$ac_with_paths $withval" fi # Set for alternate ALSA installation dir. # Check whether --with-alsa was given. if test "${with_alsa+set}" = set; then : withval=$with_alsa; ac_with_paths="$ac_with_paths $withval" fi # Set for alternate PortAudio installation dir. # Check whether --with-portaudio was given. if test "${with_portaudio+set}" = set; then : withval=$with_portaudio; ac_with_paths="$ac_with_paths $withval" fi # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; 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_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_CC="${ac_tool_prefix}gcc" $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 fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; 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_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_ac_ct_CC="gcc" $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 fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" 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 CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; 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_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_CC="${ac_tool_prefix}cc" $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 fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; 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_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $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 if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_CC="$ac_tool_prefix$ac_prog" $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 fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_ac_ct_CC="$ac_prog" $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 fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" 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 CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; 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_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_CXX="$ac_tool_prefix$ac_prog" $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 fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; 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_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $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_prog_ac_ct_CXX="$ac_prog" $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 fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" 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 CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi # Checks for languages. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu # 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" fi if test -x $X/qmake; then ac_path="$X:$ac_path" fi if test -d $X/include; then for Y in qt qt4; do if test -d $X/include/$Y; then CFLAGS="-I$X/include/$Y $CFLAGS" CPPFLAGS="-I$X/include/$Y $CPPFLAGS" ac_incpath="$X/include/$Y $ac_incpath" fi done CFLAGS="-I$X/include $CFLAGS" CPPFLAGS="-I$X/include $CPPFLAGS" ac_incpath="$X/include $ac_incpath" fi if test -d $X/lib64; then LIBS="-L$X/lib64 $LIBS" ac_libs="-L$X/lib64 $ac_libs" fi if test -d $X/lib; then LIBS="-L$X/lib $LIBS" ac_libs="-L$X/lib $ac_libs" fi done # Check for proper Qt version. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt library version >= 4.2" >&5 $as_echo_n "checking for Qt library version >= 4.2... " >&6; } if ${ac_cv_qtversion+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "QtCore/qglobal.h" int main () { #if QT_VERSION < 0x040200 #error Qt library 4.2 or greater required. #endif ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_qtversion="yes" else echo "no; Qt 4.2 or greater is required" exit fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_qtversion" >&5 $as_echo "$ac_cv_qtversion" >&6; } # A common error message: ac_errmsg="not found in current PATH. Maybe QT development environment isn't available (qt-devel)." # Check for Qt qmake utility. # 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_qmake+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_qmake in [\\/]* | ?:[\\/]*) ac_cv_path_ac_qmake="$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_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 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; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_qmake" = "xno"; then as_fn_error $? "qmake $ac_errmsg" "$LINENO" 5 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 { $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 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 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; } 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 { $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 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; } 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 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 { $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 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; } 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 { $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 : $as_echo_n "(cached) " >&6 else case $ac_lrelease in [\\/]* | ?:[\\/]*) ac_cv_path_ac_lrelease="$ac_lrelease" # 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_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 done 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; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_release" = "xno"; then as_fn_error $? "lrelease $ac_errmsg" "$LINENO" 5 fi # Checks for libraries. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 $as_echo_n "checking for main in -lm... " >&6; } if ${ac_cv_lib_m_main+:} 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. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_m_main=yes else ac_cv_lib_m_main=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_main" >&5 $as_echo "$ac_cv_lib_m_main" >&6; } if test "x$ac_cv_lib_m_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5 $as_echo_n "checking for main in -lX11... " >&6; } if ${ac_cv_lib_X11_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_X11_main=yes else ac_cv_lib_X11_main=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_X11_main" >&5 $as_echo "$ac_cv_lib_X11_main" >&6; } if test "x$ac_cv_lib_X11_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lXext" >&5 $as_echo_n "checking for main in -lXext... " >&6; } if ${ac_cv_lib_Xext_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXext $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_Xext_main=yes else ac_cv_lib_Xext_main=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_Xext_main" >&5 $as_echo "$ac_cv_lib_Xext_main" >&6; } if test "x$ac_cv_lib_Xext_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBXEXT 1 _ACEOF LIBS="-lXext $LIBS" 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. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljack" >&5 $as_echo_n "checking for main in -ljack... " >&6; } if ${ac_cv_lib_jack_main+:} 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. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_main=yes else ac_cv_lib_jack_main=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_main" >&5 $as_echo "$ac_cv_lib_jack_main" >&6; } if test "x$ac_cv_lib_jack_main" = xyes; then : ac_jack_lib="yes" else ac_jack_lib="no" fi if test "x$ac_jack_lib" = "xno"; then as_fn_error $? "JACK library not found." "$LINENO" 5 fi ac_libs="$ac_libs -ljack" # Check for ALSA libraries and primarily # for ALSA/MIDI sequencer support. if test "x$ac_alsa_seq" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lasound" >&5 $as_echo_n "checking for main in -lasound... " >&6; } if ${ac_cv_lib_asound_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lasound $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_asound_main=yes else ac_cv_lib_asound_main=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_asound_main" >&5 $as_echo "$ac_cv_lib_asound_main" >&6; } if test "x$ac_cv_lib_asound_main" = xyes; then : ac_alsa_lib="yes" else ac_alsa_lib="no" fi if test "x$ac_alsa_lib" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA library not found." >&5 $as_echo "$as_me: WARNING: *** ALSA library not found." >&2;} ac_alsa_seq="no" else ac_libs="$ac_libs -lasound" fi fi if test "x$ac_portaudio" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lportaudio" >&5 $as_echo_n "checking for main in -lportaudio... " >&6; } if ${ac_cv_lib_portaudio_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lportaudio $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_portaudio_main=yes else ac_cv_lib_portaudio_main=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_portaudio_main" >&5 $as_echo "$ac_cv_lib_portaudio_main" >&6; } if test "x$ac_cv_lib_portaudio_main" = xyes; then : ac_portaudio_lib="yes" else ac_portaudio_lib="no" fi if test "x$ac_portaudio_lib" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** PortAudio library not found." >&5 $as_echo "$as_me: WARNING: *** PortAudio library not found." >&2;} ac_portaudio="no" else ac_libs="$ac_libs -lportaudio" fi fi # Some recent distros (eg. fedora, debian) require this. ac_libs="$ac_libs -lX11" # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5 $as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; } if ${ac_cv_header_sys_wait_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef WEXITSTATUS # define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8) #endif #ifndef WIFEXITED # define WIFEXITED(stat_val) (((stat_val) & 255) == 0) #endif int main () { int s; wait (&s); s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_header_sys_wait_h=yes else ac_cv_header_sys_wait_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5 $as_echo "$ac_cv_header_sys_wait_h" >&6; } if test $ac_cv_header_sys_wait_h = yes; then $as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in fcntl.h sys/ioctl.h unistd.h poll.h signal.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Check for JACK headers. ac_fn_cxx_check_header_mongrel "$LINENO" "jack/jack.h" "ac_cv_header_jack_jack_h" "$ac_includes_default" if test "x$ac_cv_header_jack_jack_h" = xyes; then : ac_jack_h="yes" else ac_jack_h="no" fi if test "x$ac_jack_h" = "xno"; then as_fn_error $? "JACK headers not found." "$LINENO" 5 fi # Check for jack/statistics.h header. ac_fn_cxx_check_header_mongrel "$LINENO" "jack/statistics.h" "ac_cv_header_jack_statistics_h" "$ac_includes_default" if test "x$ac_cv_header_jack_statistics_h" = xyes; then : ac_jack_statistics_h="yes" else ac_jack_statistics_h="no" fi if test "x$ac_jack_statistics_h" = "xyes"; then $as_echo "#define CONFIG_JACK_STATISTICS 1" >>confdefs.h fi # Check for CoreAudio/CoreAudio.h header (MacOSX). ac_fn_cxx_check_header_mongrel "$LINENO" "CoreAudio/CoreAudio.h" "ac_cv_header_CoreAudio_CoreAudio_h" "$ac_includes_default" if test "x$ac_cv_header_CoreAudio_CoreAudio_h" = xyes; then : ac_coreaudio="yes" else ac_coreaudio="no" fi if test "x$ac_coreaudio" = "xyes"; then $as_echo "#define CONFIG_COREAUDIO 1" >>confdefs.h ac_alsa_seq="no" ac_libs="-framework CoreAudio -framework CoreFoundation $ac_libs" fi # Check for JACK MIDI headers availability. if test "x$ac_jack_midi" = "xyes"; then ac_fn_cxx_check_header_mongrel "$LINENO" "jack/midiport.h" "ac_cv_header_jack_midiport_h" "$ac_includes_default" if test "x$ac_cv_header_jack_midiport_h" = xyes; then : ac_jack_midi="yes" else ac_jack_midi="no" fi if test "x$ac_jack_midi" = "xyes"; then $as_echo "#define CONFIG_JACK_MIDI 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** jack/midiport.h file not found." >&5 $as_echo "$as_me: WARNING: *** jack/midiport.h file not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK 0.103.0 or later may be required." >&5 $as_echo "$as_me: WARNING: *** JACK 0.103.0 or later may be required." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK MIDI support will be disabled." >&5 $as_echo "$as_me: WARNING: *** JACK MIDI support will be disabled." >&2;} fi fi # Check for JACK session headers availability. if test "x$ac_jack_session" = "xyes"; then ac_fn_cxx_check_header_mongrel "$LINENO" "jack/session.h" "ac_cv_header_jack_session_h" "$ac_includes_default" if test "x$ac_cv_header_jack_session_h" = xyes; then : ac_jack_session="yes" else ac_jack_session="no" fi if test "x$ac_jack_session" = "xyes"; then $as_echo "#define CONFIG_JACK_SESSION 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** jack/session.h file not found." >&5 $as_echo "$as_me: WARNING: *** jack/session.h file not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK 0.118.3 or later may be required." >&5 $as_echo "$as_me: WARNING: *** JACK 0.118.3 or later may be required." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK session support will be disabled." >&5 $as_echo "$as_me: WARNING: *** JACK session support will be disabled." >&2;} fi fi # Check for ALSA headers and ultimately # for ALSA/MIDI sequencer support. if test "x$ac_alsa_seq" = "xyes"; then ac_fn_cxx_check_header_mongrel "$LINENO" "alsa/asoundlib.h" "ac_cv_header_alsa_asoundlib_h" "$ac_includes_default" if test "x$ac_cv_header_alsa_asoundlib_h" = xyes; then : ac_alsa_h="yes" else ac_alsa_h="no" fi if test "x$ac_alsa_h" = "xyes"; then $as_echo "#define CONFIG_ALSA_SEQ 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA headers not found." >&5 $as_echo "$as_me: WARNING: *** ALSA headers not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** ALSA/MIDI sequencer support will be disabled." >&5 $as_echo "$as_me: WARNING: *** ALSA/MIDI sequencer support will be disabled." >&2;} ac_alsa_seq="no" fi fi # Check for PortAudio headers and library support. if test "x$ac_portaudio" = "xyes"; then ac_fn_cxx_check_header_mongrel "$LINENO" "portaudio.h" "ac_cv_header_portaudio_h" "$ac_includes_default" if test "x$ac_cv_header_portaudio_h" = xyes; then : ac_portaudio_h="yes" else ac_portaudio_h="no" fi if test "x$ac_portaudio_h" = "xyes"; then $as_echo "#define CONFIG_PORTAUDIO 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** PortAudio headers not found." >&5 $as_echo "$as_me: WARNING: *** PortAudio headers not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** PortAudio interface support will be disabled." >&5 $as_echo "$as_me: WARNING: *** PortAudio interface support will be disabled." >&2;} ac_portaudio="no" fi fi # Check for debugging stack-trace. if test "x$ac_stacktrace" = "xyes"; then $as_echo "#define CONFIG_STACKTRACE 1" >>confdefs.h fi # Checks for typedefs, structures, and compiler characteristics. # AC_C_CONST # Checks for library functions. for ac_func in system do : ac_fn_cxx_check_func "$LINENO" "system" "ac_cv_func_system" if test "x$ac_cv_func_system" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYSTEM 1 _ACEOF fi done # Check for system-tray icon. if test "x$ac_system_tray" = "xyes"; then $as_echo "#define CONFIG_SYSTEM_TRAY 1" >>confdefs.h fi # Check for jack_transport_query function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_transport_query in -ljack" >&5 $as_echo_n "checking for jack_transport_query in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_transport_query+:} 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_transport_query (); int main () { return jack_transport_query (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_transport_query=yes else ac_cv_lib_jack_jack_transport_query=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_transport_query" >&5 $as_echo "$ac_cv_lib_jack_jack_transport_query" >&6; } if test "x$ac_cv_lib_jack_jack_transport_query" = xyes; then : ac_jack_transport="yes" else ac_jack_transport="no" fi if test "x$ac_jack_transport" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** jack_transport_query: function not found." >&5 $as_echo "$as_me: WARNING: *** jack_transport_query: function not found." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** JACK 0.80.0 or later may be required." >&5 $as_echo "$as_me: WARNING: *** JACK 0.80.0 or later may be required." >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Transport features will be disabled." >&5 $as_echo "$as_me: WARNING: *** Transport features will be disabled." >&2;} else $as_echo "#define CONFIG_JACK_TRANSPORT 1" >>confdefs.h fi # Check for jack_is_realtime function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_is_realtime in -ljack" >&5 $as_echo_n "checking for jack_is_realtime in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_is_realtime+:} 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_is_realtime (); int main () { return jack_is_realtime (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_is_realtime=yes else ac_cv_lib_jack_jack_is_realtime=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_is_realtime" >&5 $as_echo "$ac_cv_lib_jack_jack_is_realtime" >&6; } if test "x$ac_cv_lib_jack_jack_is_realtime" = xyes; then : ac_jack_realtime="yes" else ac_jack_realtime="no" fi if test "x$ac_jack_realtime" = "xyes"; then $as_echo "#define CONFIG_JACK_REALTIME 1" >>confdefs.h fi # Check for jack_get_xrun_delayed_usecs function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_get_xrun_delayed_usecs in -ljack" >&5 $as_echo_n "checking for jack_get_xrun_delayed_usecs in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_get_xrun_delayed_usecs+:} 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_get_xrun_delayed_usecs (); int main () { return jack_get_xrun_delayed_usecs (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_get_xrun_delayed_usecs=yes else ac_cv_lib_jack_jack_get_xrun_delayed_usecs=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_get_xrun_delayed_usecs" >&5 $as_echo "$ac_cv_lib_jack_jack_get_xrun_delayed_usecs" >&6; } if test "x$ac_cv_lib_jack_jack_get_xrun_delayed_usecs" = xyes; then : ac_jack_xrun_delay="yes" else ac_jack_xrun_delay="no" fi if test "x$ac_jack_xrun_delay" = "xyes"; then $as_echo "#define CONFIG_JACK_XRUN_DELAY 1" >>confdefs.h fi # Check for jack_get_max_delayed_usecs function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_get_max_delayed_usecs in -ljack" >&5 $as_echo_n "checking for jack_get_max_delayed_usecs in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_get_max_delayed_usecs+:} 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_get_max_delayed_usecs (); int main () { return jack_get_max_delayed_usecs (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_get_max_delayed_usecs=yes else ac_cv_lib_jack_jack_get_max_delayed_usecs=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_get_max_delayed_usecs" >&5 $as_echo "$ac_cv_lib_jack_jack_get_max_delayed_usecs" >&6; } if test "x$ac_cv_lib_jack_jack_get_max_delayed_usecs" = xyes; then : ac_jack_max_delay="yes" else ac_jack_max_delay="no" fi if test "x$ac_jack_max_delay" = "xyes"; then $as_echo "#define CONFIG_JACK_MAX_DELAY 1" >>confdefs.h fi # Check for jack_port_get_aliases function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_port_get_aliases in -ljack" >&5 $as_echo_n "checking for jack_port_get_aliases in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_port_get_aliases+:} 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_port_get_aliases (); int main () { return jack_port_get_aliases (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_port_get_aliases=yes else ac_cv_lib_jack_jack_port_get_aliases=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_port_get_aliases" >&5 $as_echo "$ac_cv_lib_jack_jack_port_get_aliases" >&6; } if test "x$ac_cv_lib_jack_jack_port_get_aliases" = xyes; then : ac_jack_port_aliases="yes" else ac_jack_port_aliases="no" fi if test "x$ac_jack_port_aliases" = "xyes"; then $as_echo "#define CONFIG_JACK_PORT_ALIASES 1" >>confdefs.h fi # Check for jack_get_version_string function. if test "x$ac_jack_version" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_get_version_string in -ljack" >&5 $as_echo_n "checking for jack_get_version_string in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_get_version_string+:} 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_get_version_string (); int main () { return jack_get_version_string (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_get_version_string=yes else ac_cv_lib_jack_jack_get_version_string=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_get_version_string" >&5 $as_echo "$ac_cv_lib_jack_jack_get_version_string" >&6; } if test "x$ac_cv_lib_jack_jack_get_version_string" = xyes; then : ac_jack_version="yes" else ac_jack_version="no" fi if test "x$ac_jack_version" = "xyes"; then $as_echo "#define CONFIG_JACK_VERSION 1" >>confdefs.h fi fi # Check for jack_free function. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jack_free in -ljack" >&5 $as_echo_n "checking for jack_free in -ljack... " >&6; } if ${ac_cv_lib_jack_jack_free+:} 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_free (); int main () { return jack_free (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_jack_jack_free=yes else ac_cv_lib_jack_jack_free=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_free" >&5 $as_echo "$ac_cv_lib_jack_jack_free" >&6; } if test "x$ac_cv_lib_jack_jack_free" = xyes; then : ac_jack_free="yes" else ac_jack_free="no" fi if test "x$ac_jack_free" = "xyes"; then $as_echo "#define CONFIG_JACK_FREE 1" >>confdefs.h fi # Finally produce a configure header file and the main makefile. cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # 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.3.10, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to ." _ACEOF 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.3.10 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "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 done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # make clean > /dev/null 2>&1 # Output summary message echo echo " $PACKAGE_NAME $PACKAGE_VERSION" echo echo " Build target . . . . . . . . . . . . . . . . . . .: $ac_debug" echo echo " JACK Audio Connection Kit support . . . . . . . .: $ac_jack_lib" echo " JACK Realtime support . . . . . . . . . . . . . .: $ac_jack_realtime" echo " JACK Transport support . . . . . . . . . . . . . .: $ac_jack_transport" echo " JACK XRUN delay support . . . . . . . . . . . . .: $ac_jack_xrun_delay" echo " JACK Maximum scheduling delay support . . . . . .: $ac_jack_max_delay" echo " JACK Port aliases support . . . . . . . . . . . .: $ac_jack_port_aliases" echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi" echo " JACK Session support . . . . . . . . . . . . . . .: $ac_jack_session" echo " JACK Version support (JACK2) . . . . . . . . . . .: $ac_jack_version" echo " ALSA MIDI Sequencer support . . . . . . . . . . .: $ac_alsa_seq" echo " System tray icon support . . . . . . . . . . . . .: $ac_system_tray" echo " D-Bus interface support . . . . . . . . . . . . .: $ac_dbus" echo " PortAudio interface support . . . . . . . . . . .: $ac_portaudio" echo " CoreAudio interface support . . . . . . . . . . .: $ac_coreaudio" echo echo " Debugger stack-trace (gdb) . . . . . . . . . . . .: $ac_stacktrace" echo echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix" echo echo "Now type 'make', followed by 'make install' as root." echo qjackctl-0.3.10/PaxHeaders.16050/configure.ac0000644000175000001440000000012312126315070016670 xustar000000000000000027 mtime=1364826680.343008 27 atime=1364826684.187395 29 ctime=1364826684.18739549 qjackctl-0.3.10/configure.ac0000644000175000001440000003346012126315070016166 0ustar00rncbcusers00000000000000# Process this file with autoconf to produce a configure script. AC_INIT(QjackCtl, 0.3.10, 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) # Set default installation prefix. AC_PREFIX_DEFAULT(/usr/local) ac_prefix=$prefix if test "x$ac_prefix" = "xNONE"; then ac_prefix=$ac_default_prefix fi AC_SUBST(ac_prefix) AC_DEFINE_UNQUOTED(CONFIG_PREFIX, ["$ac_prefix"], [Default installation prefix.]) # Enable debugging argument option. AC_ARG_ENABLE(debug, AC_HELP_STRING([--enable-debug], [enable debugging (default=no)]), [ac_debug="$enableval"]) if test "x$ac_debug" = "xyes"; then AC_DEFINE(CONFIG_DEBUG, 1, [Define if debugging is enabled.]) ac_stacktrace="yes" ac_debug="debug" else ac_stacktrace="no" ac_debug="release" fi AC_SUBST(ac_debug) # Disable system tray argument option. AC_ARG_ENABLE(system_tray, AC_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)]), [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)]), [ac_jack_session="$enableval"], [ac_jack_session="yes"]) # Enable JACK version support. AC_ARG_ENABLE(jack_version, AC_HELP_STRING([--enable-jack-version], [enable JACK version support (default=no)]), [ac_jack_version="$enableval"], [ac_jack_version="no"]) # Disable ALSA sequencer support option. AC_ARG_ENABLE(alsa_seq, AC_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)]), [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)]), [ac_dbus="$enableval"], [ac_dbus="yes"]) if test "x$ac_dbus" = "xyes"; then AC_DEFINE(CONFIG_DBUS, 1, [Define if D-Bus interface is enabled.]) ac_qdbus="qdbus" fi AC_SUBST(ac_qdbus) # Enable debugger stack-trace option (assumes --enable-debug). AC_ARG_ENABLE(stacktrace, AC_HELP_STRING([--enable-stacktrace], [enable debugger stack-trace (default=no)]), [ac_stacktrace="$enableval"]) # Standard installation base dirs. ac_with_paths="/usr /usr/local" # Some a-la-debian alternatives... for X in /usr/lib /usr/lib64 /usr/share; do for Y in qt qt4; do if test -d $X/$Y/bin; then ac_with_paths="$ac_with_paths $X/$Y" fi done done # Set for alternate Qt installation dir. AC_ARG_WITH(qt, AC_HELP_STRING([--with-qt=PATH], [use alternate Qt install path]), [ac_with_paths="$ac_with_paths $withval"]) # Set for alternate JACK installation dir. AC_ARG_WITH(jack, AC_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]), [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]), [ac_with_paths="$ac_with_paths $withval"]) # Checks for programs. AC_PROG_CC AC_PROG_CPP AC_PROG_CXX AC_PROG_CXXCPP AC_PROG_GCC_TRADITIONAL # Checks for languages. AC_LANG_C AC_LANG_CPLUSPLUS # 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" fi if test -x $X/qmake; then ac_path="$X:$ac_path" fi if test -d $X/include; then for Y in qt qt4; do if test -d $X/include/$Y; then CFLAGS="-I$X/include/$Y $CFLAGS" CPPFLAGS="-I$X/include/$Y $CPPFLAGS" ac_incpath="$X/include/$Y $ac_incpath" fi done CFLAGS="-I$X/include $CFLAGS" CPPFLAGS="-I$X/include $CPPFLAGS" ac_incpath="$X/include $ac_incpath" fi if test -d $X/lib64; then LIBS="-L$X/lib64 $LIBS" ac_libs="-L$X/lib64 $ac_libs" fi if test -d $X/lib; then LIBS="-L$X/lib $LIBS" ac_libs="-L$X/lib $ac_libs" fi done # Check for proper Qt version. AC_CACHE_CHECK([for Qt library version >= 4.2], ac_cv_qtversion, [ AC_TRY_LINK([#include "QtCore/qglobal.h"], [ #if QT_VERSION < 0x040200 #error Qt library 4.2 or greater required. #endif ], ac_cv_qtversion="yes", [ echo "no; Qt 4.2 or greater is required" exit ]) ]) # A common error message: ac_errmsg="not found in current PATH. Maybe QT development environment isn't available (qt-devel)." # Check for Qt qmake utility. AC_PATH_PROG(ac_qmake, qmake, [no], $ac_path) if test "x$ac_qmake" = "xno"; then AC_MSG_ERROR([qmake $ac_errmsg]) fi AC_SUBST(ac_qmake) # Check for Qt moc utility. AC_PATH_PROG(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) 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) if test "x$ac_lupdate" = "xno"; then AC_MSG_ERROR([lupdate $ac_errmsg]) 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]) fi AC_SUBST(ac_lrelease) # Checks for libraries. AC_CHECK_LIB(m, main) 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. AC_CHECK_LIB(jack, main, [ac_jack_lib="yes"], [ac_jack_lib="no"]) if test "x$ac_jack_lib" = "xno"; then AC_MSG_ERROR([JACK library not found.]) fi ac_libs="$ac_libs -ljack" # Check for ALSA libraries and primarily # for ALSA/MIDI sequencer support. if test "x$ac_alsa_seq" = "xyes"; then AC_CHECK_LIB(asound, main, [ac_alsa_lib="yes"], [ac_alsa_lib="no"]) if test "x$ac_alsa_lib" = "xno"; then AC_MSG_WARN([*** ALSA library not found.]) ac_alsa_seq="no" else ac_libs="$ac_libs -lasound" fi fi if test "x$ac_portaudio" = "xyes"; then AC_CHECK_LIB(portaudio, main, [ac_portaudio_lib="yes"], [ac_portaudio_lib="no"]) if test "x$ac_portaudio_lib" = "xno"; then AC_MSG_WARN([*** PortAudio library not found.]) ac_portaudio="no" else ac_libs="$ac_libs -lportaudio" fi fi # Some recent distros (eg. fedora, debian) require this. ac_libs="$ac_libs -lX11" AC_SUBST(ac_libs) # Checks for header files. AC_HEADER_STDC AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(fcntl.h sys/ioctl.h unistd.h poll.h signal.h) # Check for JACK headers. AC_CHECK_HEADER(jack/jack.h, [ac_jack_h="yes"], [ac_jack_h="no"]) if test "x$ac_jack_h" = "xno"; then AC_MSG_ERROR([JACK headers not found.]) fi # Check for jack/statistics.h header. AC_CHECK_HEADER(jack/statistics.h, [ac_jack_statistics_h="yes"], [ac_jack_statistics_h="no"]) if test "x$ac_jack_statistics_h" = "xyes"; then AC_DEFINE(CONFIG_JACK_STATISTICS, 1, [Define if jack/statistics.h is available.]) fi # Check for CoreAudio/CoreAudio.h header (MacOSX). AC_CHECK_HEADER(CoreAudio/CoreAudio.h, [ac_coreaudio="yes"], [ac_coreaudio="no"]) if test "x$ac_coreaudio" = "xyes"; then AC_DEFINE(CONFIG_COREAUDIO, 1, [Define if CoreAudio/CoreAudio.h is available (Mac OS X).]) ac_alsa_seq="no" ac_libs="-framework CoreAudio -framework CoreFoundation $ac_libs" fi # Check for JACK MIDI headers availability. if test "x$ac_jack_midi" = "xyes"; then AC_CHECK_HEADER(jack/midiport.h, [ac_jack_midi="yes"], [ac_jack_midi="no"]) if test "x$ac_jack_midi" = "xyes"; then AC_DEFINE(CONFIG_JACK_MIDI, 1, [Define if JACK MIDI support is available.]) else AC_MSG_WARN([*** jack/midiport.h file not found.]) AC_MSG_WARN([*** JACK 0.103.0 or later may be required.]) AC_MSG_WARN([*** JACK MIDI support will be disabled.]) fi fi # Check for JACK session headers availability. if test "x$ac_jack_session" = "xyes"; then AC_CHECK_HEADER(jack/session.h, [ac_jack_session="yes"], [ac_jack_session="no"]) if test "x$ac_jack_session" = "xyes"; then AC_DEFINE(CONFIG_JACK_SESSION, 1, [Define if JACK session support is available.]) else AC_MSG_WARN([*** jack/session.h file not found.]) AC_MSG_WARN([*** JACK 0.118.3 or later may be required.]) AC_MSG_WARN([*** JACK session support will be disabled.]) fi fi # Check for ALSA headers and ultimately # for ALSA/MIDI sequencer support. if test "x$ac_alsa_seq" = "xyes"; then AC_CHECK_HEADER(alsa/asoundlib.h, [ac_alsa_h="yes"], [ac_alsa_h="no"]) if test "x$ac_alsa_h" = "xyes"; then AC_DEFINE(CONFIG_ALSA_SEQ, 1, [Define if ALSA/MIDI sequencer support is enabled.]) else AC_MSG_WARN([*** ALSA headers not found.]) AC_MSG_WARN([*** ALSA/MIDI sequencer support will be disabled.]) ac_alsa_seq="no" fi fi # Check for PortAudio headers and library support. if test "x$ac_portaudio" = "xyes"; then AC_CHECK_HEADER(portaudio.h, [ac_portaudio_h="yes"], [ac_portaudio_h="no"]) if test "x$ac_portaudio_h" = "xyes"; then AC_DEFINE(CONFIG_PORTAUDIO, 1, [Define if PortAudio interface is enabled.]) else AC_MSG_WARN([*** PortAudio headers not found.]) AC_MSG_WARN([*** PortAudio interface support will be disabled.]) ac_portaudio="no" fi fi # Check for debugging stack-trace. if test "x$ac_stacktrace" = "xyes"; then AC_DEFINE(CONFIG_STACKTRACE, 1, [Define if debugger stack-trace is enabled.]) fi AC_SUBST(ac_incpath) # Checks for typedefs, structures, and compiler characteristics. # AC_C_CONST # Checks for library functions. AC_CHECK_FUNCS(system) # Check for system-tray icon. if test "x$ac_system_tray" = "xyes"; then AC_DEFINE(CONFIG_SYSTEM_TRAY, 1, [Define if system tray is enabled.]) fi # Check for jack_transport_query function. AC_CHECK_LIB(jack, jack_transport_query, [ac_jack_transport="yes"], [ac_jack_transport="no"]) if test "x$ac_jack_transport" = "xno"; then AC_MSG_WARN([*** jack_transport_query: function not found.]) AC_MSG_WARN([*** JACK 0.80.0 or later may be required.]) AC_MSG_WARN([*** Transport features will be disabled.]) else AC_DEFINE(CONFIG_JACK_TRANSPORT, 1, [Define if jack_tranport_query is available.]) fi # Check for jack_is_realtime function. AC_CHECK_LIB(jack, jack_is_realtime, [ac_jack_realtime="yes"], [ac_jack_realtime="no"]) if test "x$ac_jack_realtime" = "xyes"; then AC_DEFINE(CONFIG_JACK_REALTIME, 1, [Define if jack_is_realtime is available.]) fi # Check for jack_get_xrun_delayed_usecs function. AC_CHECK_LIB(jack, jack_get_xrun_delayed_usecs, [ac_jack_xrun_delay="yes"], [ac_jack_xrun_delay="no"]) if test "x$ac_jack_xrun_delay" = "xyes"; then AC_DEFINE(CONFIG_JACK_XRUN_DELAY, 1, [Define if jack_get_xrun_delayed_usecs is available.]) fi # Check for jack_get_max_delayed_usecs function. AC_CHECK_LIB(jack, jack_get_max_delayed_usecs, [ac_jack_max_delay="yes"], [ac_jack_max_delay="no"]) if test "x$ac_jack_max_delay" = "xyes"; then AC_DEFINE(CONFIG_JACK_MAX_DELAY, 1, [Define if jack_get_max_delayed_usecs is available.]) fi # Check for jack_port_get_aliases function. AC_CHECK_LIB(jack, jack_port_get_aliases, [ac_jack_port_aliases="yes"], [ac_jack_port_aliases="no"]) if test "x$ac_jack_port_aliases" = "xyes"; then AC_DEFINE(CONFIG_JACK_PORT_ALIASES, 1, [Define if jack_port_get_aliases is available.]) fi # Check for jack_get_version_string function. if test "x$ac_jack_version" = "xyes"; then AC_CHECK_LIB(jack, jack_get_version_string, [ac_jack_version="yes"], [ac_jack_version="no"]) if test "x$ac_jack_version" = "xyes"; then AC_DEFINE(CONFIG_JACK_VERSION, 1, [Define if jack_get_version_string is available.]) fi fi # Check for jack_free function. AC_CHECK_LIB(jack, jack_free, [ac_jack_free="yes"], [ac_jack_free="no"]) if test "x$ac_jack_free" = "xyes"; then AC_DEFINE(CONFIG_JACK_FREE, 1, [Define if jack_free is available.]) fi # Finally produce a configure header file and the main makefile. AC_OUTPUT # make clean > /dev/null 2>&1 # Output summary message echo echo " $PACKAGE_NAME $PACKAGE_VERSION" echo echo " Build target . . . . . . . . . . . . . . . . . . .: $ac_debug" echo echo " JACK Audio Connection Kit support . . . . . . . .: $ac_jack_lib" echo " JACK Realtime support . . . . . . . . . . . . . .: $ac_jack_realtime" echo " JACK Transport support . . . . . . . . . . . . . .: $ac_jack_transport" echo " JACK XRUN delay support . . . . . . . . . . . . .: $ac_jack_xrun_delay" echo " JACK Maximum scheduling delay support . . . . . .: $ac_jack_max_delay" echo " JACK Port aliases support . . . . . . . . . . . .: $ac_jack_port_aliases" echo " JACK MIDI support . . . . . . . . . . . . . . . .: $ac_jack_midi" echo " JACK Session support . . . . . . . . . . . . . . .: $ac_jack_session" echo " JACK Version support (JACK2) . . . . . . . . . . .: $ac_jack_version" echo " ALSA MIDI Sequencer support . . . . . . . . . . .: $ac_alsa_seq" echo " System tray icon support . . . . . . . . . . . . .: $ac_system_tray" echo " D-Bus interface support . . . . . . . . . . . . .: $ac_dbus" echo " PortAudio interface support . . . . . . . . . . .: $ac_portaudio" echo " CoreAudio interface support . . . . . . . . . . .: $ac_coreaudio" echo echo " Debugger stack-trace (gdb) . . . . . . . . . . . .: $ac_stacktrace" echo echo " Install prefix . . . . . . . . . . . . . . . . . .: $ac_prefix" echo echo "Now type 'make', followed by 'make install' as root." echo qjackctl-0.3.10/PaxHeaders.16050/COPYING0000644000175000001440000000007110505475273015452 xustar000000000000000027 atime=1364826685.352395 30 ctime=1364826685.353395509 qjackctl-0.3.10/COPYING0000644000175000001440000004310310505475273014741 0ustar00rncbcusers00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. qjackctl-0.3.10/PaxHeaders.16050/INSTALL0000644000175000001440000000012311720473315015441 xustar000000000000000026 mtime=1329755853.15981 27 atime=1364826684.280395 30 ctime=1364826684.280395492 qjackctl-0.3.10/INSTALL0000644000175000001440000003634011720473315014737 0ustar00rncbcusers00000000000000Installation Instructions ************************* Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 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 warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. qjackctl-0.3.10/PaxHeaders.16050/Makefile.in0000644000175000001440000000012312110725065016451 xustar000000000000000027 mtime=1361291829.842448 27 atime=1364826684.148395 29 ctime=1364826684.14839549 qjackctl-0.3.10/Makefile.in0000644000175000001440000000654112110725065015747 0ustar00rncbcusers00000000000000prefix = @ac_prefix@ qmake = @ac_qmake@ lupdate = @ac_lupdate@ lrelease = @ac_lrelease@ name = qjackctl target = src/$(name) headers = \ src/config.h \ src/qjackctlAbout.h \ src/qjackctlAlsaConnect.h \ src/qjackctlConnect.h \ src/qjackctlConnectAlias.h \ src/qjackctlJackConnect.h \ src/qjackctlPatchbay.h \ src/qjackctlPatchbayFile.h \ src/qjackctlPatchbayRack.h \ src/qjackctlSession.h \ src/qjackctlSetup.h \ src/qjackctlStatus.h \ src/qjackctlSystemTray.h \ src/qjackctlAboutForm.h \ src/qjackctlConnectionsForm.h \ src/qjackctlMainForm.h \ src/qjackctlMessagesStatusForm.h \ src/qjackctlPatchbayForm.h \ src/qjackctlSessionForm.h \ src/qjackctlSetupForm.h \ src/qjackctlSocketForm.h sources = \ src/qjackctl.cpp \ src/qjackctlAlsaConnect.cpp \ src/qjackctlConnect.cpp \ src/qjackctlConnectAlias.cpp \ src/qjackctlJackConnect.cpp \ src/qjackctlPatchbay.cpp \ src/qjackctlPatchbayFile.cpp \ src/qjackctlPatchbayRack.cpp \ src/qjackctlSession.cpp \ src/qjackctlSetup.cpp \ src/qjackctlSystemTray.cpp \ src/qjackctlAboutForm.cpp \ src/qjackctlConnectionsForm.cpp \ src/qjackctlMainForm.cpp \ src/qjackctlMessagesStatusForm.cpp \ src/qjackctlPatchbayForm.cpp \ src/qjackctlSessionForm.cpp \ src/qjackctlSetupForm.cpp \ src/qjackctlSocketForm.cpp forms = \ src/qjackctlAboutForm.ui \ src/qjackctlConnectionsForm.ui \ src/qjackctlMainForm.ui \ src/qjackctlMessagesStatusForm.ui \ src/qjackctlPatchbayForm.ui \ src/qjackctlSessionForm.ui \ src/qjackctlSetupForm.ui \ src/qjackctlSocketForm.ui resources = \ src/qjackctl.qrc translations_sources = \ src/translations/qjackctl_cs.ts \ src/translations/qjackctl_de.ts \ src/translations/qjackctl_es.ts \ src/translations/qjackctl_fr.ts \ src/translations/qjackctl_it.ts \ src/translations/qjackctl_ja.ts \ src/translations/qjackctl_nl.ts \ src/translations/qjackctl_ru.ts translations_targets = \ src/translations/qjackctl_cs.qm \ src/translations/qjackctl_de.qm \ src/translations/qjackctl_es.qm \ src/translations/qjackctl_fr.qm \ src/translations/qjackctl_it.qm \ src/translations/qjackctl_ja.qm \ src/translations/qjackctl_nl.qm \ src/translations/qjackctl_ru.qm export datarootdir = @datarootdir@ export localedir = @localedir@ export mandir = @mandir@ all: $(target) $(target): $(name).mak $(resources) ${forms} $(sources) $(headers) @$(MAKE) -f $(name).mak $(name).mak: $(name).pro @$(qmake) -o $(name).mak $(name).pro translations_lupdate: $(name).pro @$(lupdate) -verbose $(name).pro translations_lrelease: translations_lupdate $(translations_targets) %.qm: %.ts @$(lrelease) -verbose $< -qm $@ install: $(target) translations_lrelease $(name).1 @$(MAKE) INSTALL_ROOT=$(DESTDIR) -f $(name).mak install @install -d -v -m 0755 $(DESTDIR)$(localedir) @install -d -v -m 0755 $(DESTDIR)$(mandir)/man1 @install -v -m 0644 $(translations_targets) $(DESTDIR)$(localedir) @install -v -m 0644 $(name).1 $(DESTDIR)$(mandir)/man1 uninstall: $(DESTDIR)$(prefix)/bin/$(name) @$(MAKE) INSTALL_ROOT=$(DESTDIR) -f $(name).mak uninstall @rm -vf $(DESTDIR)$(localedir)/$(translations_targets) @for x in $(translations_targets); do \ rm -vf $(DESTDIR)$(localedir)/`basename $$x`; done @rm -vf $(DESTDIR)$(mandir)/man1/$(name).1 clean: $(name).mak @$(MAKE) -f $(name).mak clean @rm -f $(target) $(target).mak $(name).mak @rm -rf *.cache *.log *.status $(translations_targets) qjackctl-0.3.10/PaxHeaders.16050/Makefile.svn0000644000175000001440000000012211353112764016654 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.148395 29 ctime=1364826684.14839549 qjackctl-0.3.10/Makefile.svn0000644000175000001440000000047411353112764016152 0ustar00rncbcusers00000000000000all: configure configure: Makefile.in configure.ac @autoheader @autoconf @rm -rf *.cache clean: @if [ -f Makefile ]; then make clean; fi || true @rm -rvf Makefile configure config.* src/.ui src/.obj src/.moc @rm -rvf src/Makefile src/config.* src/*.pri src/*.desktop @rm -rvf *.cache *.log *.status *.spec qjackctl-0.3.10/PaxHeaders.16050/qjackctl.10000644000175000001440000000012411322701605016261 xustar000000000000000027 mtime=1263240069.380963 27 atime=1364826685.353395 30 ctime=1364826685.353395509 qjackctl-0.3.10/qjackctl.10000644000175000001440000000430611322701605015553 0ustar00rncbcusers00000000000000.\" Hey, EMACS: -*- nroff -*- .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) .TH QJACKCTL 1 "January 11, 2010" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: .\" .nh disable hyphenation .\" .hy enable hyphenation .\" .ad l left justify .\" .ad b justify to both left and right margins .\" .nf disable filling .\" .fi enable filling .\" .br insert line break .\" .sp insert n+1 empty lines .\" for manpage-specific macros, see man(7) .SH NAME qjackctl \- User interface for controlling JACK (Jack Audio Connection Kit) .SH SYNOPSIS .B qjackctl .RI [options] .SH DESCRIPTION This manual page documents briefly the .B qjackctl command. This manual page was written for the Debian distribution because the original program does not have a manual page. .PP \fBqjackctl \fP is used for controlling the Jack Audio Connection Kit (JACK) and as a patchbay for ALSA MIDI devices. Qjackctl also has support for the JACK transport control protocol, so you can use it to start and stop the JACK transport. Once you start qjackctl, you get presented with a single GUI window, the buttons are self-explanatory and have tooltips. .SH OPTIONS This program follows the usual GNU command line syntax, with long options starting with two dashes (`-'). A summary of options is included below. For a complete description, see the Info files. .TP .B \-s, \-\-start Start JACK audio server immediately .TP .B \-p, \-\-preset=[label] Set default settings preset name .TP .B \-a, \-\-active\-patchbay=[path] Set active patchbay definition file .TP .B \-n, \-\-server\-name=[label] Set default JACK audio server name .TP .B \-h, \-\-help Show help about command line options .TP .B \-v, \-\-version Show version information. .SH SEE ALSO .BR jackd(1). .br .SH FILES Settings for the JACK system are stored in ~/.config/rncbc.org/QjackCtl.conf and optionally in ~/.jackdrc. .SH AUTHOR This manual page was written by Guenter Geiger , for the Debian project (but may be used by others). qjackctl-0.3.10/PaxHeaders.16050/qjackctl.pro0000644000175000001440000000012311353112764016726 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826685.353395 30 ctime=1364826685.353395509 qjackctl-0.3.10/qjackctl.pro0000644000175000001440000000034211353112764016215 0ustar00rncbcusers00000000000000# qjackctl.pro # QMAKEVERSION = $$[QMAKE_VERSION] ISQT4 = $$find(QMAKEVERSION, ^[2-9]) isEmpty( ISQT4 ) { error("Use the qmake include with Qt4.4 or greater, on Debian that is qmake-qt4"); } TEMPLATE = subdirs SUBDIRS = src qjackctl-0.3.10/PaxHeaders.16050/qjackctl.spec.in0000644000175000001440000000012412126315070017460 xustar000000000000000027 mtime=1364826680.343008 27 atime=1364826685.353395 30 ctime=1364826685.353395509 qjackctl-0.3.10/qjackctl.spec.in0000644000175000001440000000650012126315070016750 0ustar00rncbcusers00000000000000%define name @PACKAGE_TARNAME@ %define version @PACKAGE_VERSION@ %define release 19 %define _prefix @ac_prefix@ Summary: JACK Audio Connection Kit Qt GUI Interface Name: %{name} Version: %{version} Release: %{release} License: GPL-2.0+ Group: Productivity/Multimedia/Sound/Utilities Source0: %{name}-%{version}.tar.gz URL: http://qjackctl.sourceforge.net/ #Packager: rncbc.org BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot BuildRequires: libqt4-devel >= 4.2 BuildRequires: libjack-devel >= 0.100.0 BuildRequires: alsa-devel %description JACK Audio Connection Kit - Qt GUI Interface: A simple Qt application to control the JACK server. Written in C++ around the Qt4 toolkit for X11, most exclusively using Qt Designer. Provides a simple GUI dialog for setting several JACK server parameters, which are properly saved between sessions, and a way control of the status of the audio server. With time, this primordial interface has become richer by including a enhanced patchbay and connection control features. %prep %setup [ -f Makefile.svn ] && %__make -f Makefile.svn %build %configure %__make %install %__make DESTDIR=%{buildroot} install %clean [ -d %{buildroot} -a "%{buildroot}" != "" ] && %__rm -rf %{buildroot} %files %defattr(-,root,root) %doc AUTHORS COPYING ChangeLog README TODO #dir %{_datadir}/applications %dir %{_datadir}/icons/hicolor %dir %{_datadir}/icons/hicolor/32x32 %dir %{_datadir}/icons/hicolor/32x32/apps #dir %{_datadir}/locale #dir %{_datadir}/man #dir %{_datadir}/man/man1 %{_bindir}/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/32x32/apps/%{name}.png %{_datadir}/locale/%{name}_*.qm %{_datadir}/man/man1/%{name}.1.gz %changelog * Tue Apr 2 2013 Rui Nuno Capela 0.3.10 - The singing swan rehersal. * Fri May 18 2012 Rui Nuno Capela 0.3.9 - The last of the remnants. * Fri Jul 1 2011 Rui Nuno Capela 0.3.8 - JACK Session versioning. * Tue Nov 30 2010 Rui Nuno Capela 0.3.7 - JACK Session managerism. * Mon May 17 2010 Rui Nuno Capela - Standard desktop icon fixing. * Mon Jan 11 2010 Rui Nuno Capela 0.3.6 - Full D-Busification! * Mon Jan 11 2010 Rui Nuno Capela - Man page added. * Wed Sep 30 2009 Rui Nuno Capela 0.3.5 - Slipped away! * Fri Dec 05 2008 Rui Nuno Capela 0.3.4 - Patchbay snapshot revamp. * Sat Jun 07 2008 Rui Nuno Capela 0.3.3 - Patchbay JACK-MIDI, file logging and X11 uniqueness. * Thu Dec 20 2007 Rui Nuno Capela 0.3.2 - Patchbay heads-up with season greetings. * Thu Jul 19 2007 Rui Nuno Capela - System-tray tooltip icon crash fix. * Wed Jul 18 2007 Rui Nuno Capela 0.3.1 - Shallowed bug-fix release.. * Tue Jul 10 2007 Rui Nuno Capela 0.3.0 - Qt4 migration was complete. * Mon Jun 25 2007 Rui Nuno Capela - Application icon is now installed to (prefix)/share/pixmaps. - Declared fundamental build and run-time requirements. - Destination install directory prefix is now in spec. - Spec is now a bit more openSUSE compliant. * Wed May 31 2006 Rui Nuno Capela - Changed copyright to license attribute * Wed Aug 24 2005 Rui Nuno Capela - Created initial qjackctl.spec qjackctl-0.3.10/PaxHeaders.16050/README0000644000175000001440000000012412025634533015271 xustar000000000000000027 mtime=1347893595.363769 27 atime=1364826685.354395 30 ctime=1364826685.354395509 qjackctl-0.3.10/README0000644000175000001440000001111712025634533014561 0ustar00rncbcusers00000000000000QjackCtl - JACK Audio Connection Kit Qt GUI Interface ----------------------------------------------------- QjackCtl is a simple Qt application to control the JACK sound server (http://jackaudio.org), for the Linux Audio infrastructure. Written in C++ around the Qt4 toolkit for X11, most exclusively using Qt Designer. Provides a simple GUI dialog for setting several JACK server parameters, which are properly saved between sessions, and a way control of the status of the audio server. With time, this primordial interface has become richer by including a enhanced patchbay and connection control features. Homepage: http://qjackctl.sourceforge.net License: GNU General Public License (GPL) Requirements ------------ The software requirements for build and runtime are listed as follows: Mandatory: - Qt4 (core, gui, xml), C++ class library and tools for crossplatform development and internationalization http://qt-project.org/ - JACK Audio Connection Kit http://jackaudio.org/ Optional (opted-in at build time): - ALSA, Advanced Linux Sound Architecture http://www.alsa-project.org/ Installation ------------ The installation procedure follows the standard for source distributions: ./configure [--prefix=/usr/local] make and optionally as root: make install This procedure will end installing the following files: ${prefix}/bin/qjackctl ${prefix}/share/pixmaps/qjackctl.png ${prefix}/share/applications/qjackctl.desktop ${prefix}/share/locale/qjackctl_*.qm ${prefix}/share/man/man1/qjackctl.1 Just launch ${prefix}/bin/qjackctl and you're off (hopefully). If you're checking out from Subversion (SVN), you'll have to prepare the configure script just before you proceed with the above instructions: make -f Makefile.svn Configuration ------------- QjackCtl holds its settings and configuration state per user, in a file located as $HOME/.config/rncbc.org/QjackCtl.conf . Normally, there's no need to edit this file, as it is recreated and rewritten everytime qjackctl is run. Bugs ---- Probably plenty still, QjackCtl maybe considered on beta stage already. It has been locally tested since JACK release 0.98.0, with custom 2.4 kernels with low-latency, preemptible and capabilities enabling patches. As for 2.6 kernels, the emergence of Ingo Molnar's Realtime Preemption kernel patch it's being now recommended for your taking benefit of the realtime and low-latency audio pleasure JACK can give. Support ------- QjackCtl is open source free software. For bug reports, feature requests, discussion forums, mailling lists, or any other matter related to the development of this piece of software, please use the Sourceforge project page (http://sourceforge.net/projects/qjackctl). You can also find timely and closer contact information on my personal web site (http://www.rncbc.org). Acknowledgments --------------- QjackCtl's user interface layout (and the whole idea for that matter) was partially borrowed from origoinal Lawrie Abbott's jacko project, which was taken from wxWindow/Python into the Qt/C++ arena. Since 2003-08-06, qjackctl has been included in the awesome Planet CCRMA (http://ccrma-www.stanford.edu/planetccrma/software/) software collection. Thanks a lot Fernando! Here are some people who helped this project in one way or another, and in fair and strict alphabetic order: Alexandre Prokoudine Kasper Souren Andreas Persson Kjetil Matheussen Austin Acton Ken Ellinwood Ben Powers Lawrie Abbott Chris Cannam Lee Revell Dan Nigrin Lucas Brasilino Dave Moore Marc-Olivier Barre Dave Phillips Mark Knecht Dirk Jagdmann Matthias Nagorni Dominic Sacre Melanie Fernando Pablo Lopez-Lezcano Nedko Arnaudov Filipe Tomas Orm Finnendahl Florian Schmidt Paul Davis Fons Adriaensen Robert Jonsson Geoff Beasley Robin Gareus Jack O'Quin Roland Mas Jacob Meuser Sampo Savolainen Jesse Chappell Stephane Letz Joachim Deguara Steve Harris John Schneiderman Taybin Rutkin Jussi Laako Wilfried Huss Karsten Wiese Wolfgang Woehl A special mention should go to the translators of QjackCtl (see TRANSLATORS). Thanks to you all. -- rncbc aka Rui Nuno Capela rncbc@rncbc.org qjackctl-0.3.10/PaxHeaders.16050/src0000644000175000001440000000013212126315075015121 xustar000000000000000030 mtime=1364826685.785395516 30 atime=1364826684.415395494 30 ctime=1364826685.785395516 qjackctl-0.3.10/src/0000755000175000001440000000000012126315075014466 5ustar00rncbcusers00000000000000qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMainForm.cpp0000644000175000001440000000012412113152421021116 xustar000000000000000027 mtime=1361892625.815912 27 atime=1364826685.303395 30 ctime=1364826685.304395508 qjackctl-0.3.10/src/qjackctlMainForm.cpp0000644000175000001440000033705312113152421020420 0ustar00rncbcusers00000000000000// qjackctlMainForm.cpp // /**************************************************************************** Copyright (C) 2003-2013, 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 "qjackctlMainForm.h" #include "qjackctlStatus.h" #include "qjackctlPatchbay.h" #include "qjackctlPatchbayFile.h" #include "qjackctlMessagesStatusForm.h" #include "qjackctlSessionForm.h" #include "qjackctlConnectionsForm.h" #include "qjackctlPatchbayForm.h" #include "qjackctlSetupForm.h" #include "qjackctlAboutForm.h" #include "qjackctlSystemTray.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION < 0x040500 namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); #if QT_VERSION < 0x040200 const WindowFlags CustomizeWindowHint = WindowFlags(0x02000000); #endif } #endif #ifdef CONFIG_DBUS #include #include #endif #ifdef CONFIG_JACK_STATISTICS #include #endif // Timer constant stuff. #define QJACKCTL_TIMER_MSECS 200 // Status refresh cycle (~2 secs) #define QJACKCTL_STATUS_CYCLE 10 // Server display enumerated states. #define QJACKCTL_INACTIVE 0 #define QJACKCTL_ACTIVATING 1 #define QJACKCTL_ACTIVE 2 #define QJACKCTL_STARTING 3 #define QJACKCTL_STARTED 4 #define QJACKCTL_STOPPING 5 #define QJACKCTL_STOPPED 6 #if defined(WIN32) #include #undef HAVE_POLL_H #undef HAVE_SIGNAL_H #else #include // Notification pipes descriptors #define QJACKCTL_FDNIL -1 #define QJACKCTL_FDREAD 0 #define QJACKCTL_FDWRITE 1 static int g_fdStdout[2] = { QJACKCTL_FDNIL, QJACKCTL_FDNIL }; #endif #ifdef HAVE_POLL_H #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) #ifdef CONFIG_DBUS #define QJACKCTL_LINE_EVENT QEvent::Type(QEvent::User + 6) #endif //---------------------------------------------------------------------------- // qjackctl -- Static callback posters. // To have clue about current buffer size (in frames). static jack_nframes_t g_nframes = 0; static QProcess::ProcessError g_error = QProcess::UnknownError; // 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 * ) { QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_PORT_EVENT)); } // Jack graph order callback function, called // whenever the processing graph is reordered. static int qjackctl_graph_order_callback ( void * ) { QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_PORT_EVENT)); return 0; } // Jack XRUN callback function, called // whenever there is a xrun. static int qjackctl_xrun_callback ( void * ) { QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_XRUN_EVENT)); 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; QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_BUFF_EVENT)); return 0; } // Jack shutdown function, called // whenever the server terminates this client. static void qjackctl_on_shutdown ( void * ) { QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_SHUT_EVENT)); } // Jack process exit function, called // whenever the server terminates abnormally. static void qjackctl_on_error ( QProcess::ProcessError error ) { g_error = error; QApplication::postEvent( qjackctlMainForm::getInstance(), new QEvent(QJACKCTL_EXIT_EVENT)); } #ifdef CONFIG_DBUS //---------------------------------------------------------------------- // class qjackctlDBusLogWatcher -- Simple D-BUS log watcher thread. // class qjackctlDBusLogWatcher : public QThread { public: // Constructor. qjackctlDBusLogWatcher(const QString& sFilename) : QThread(), m_sFilename(sFilename), m_bRunState(false) {} // Destructor. ~qjackctlDBusLogWatcher() { if (isRunning()) do { m_bRunState = false; } while (!wait(1000)); } // Custom log event. class LineEvent : public QEvent { public: // Constructor. LineEvent(QEvent::Type eType, const QString& sLine) : QEvent(eType), m_sLine(sLine) { m_sLine.remove(QRegExp("\x1B\[[0-9|;]+m")); } // Accessor. const QString& line() const { return m_sLine; } private: // Custom event data. QString m_sLine; }; protected: // The main thread executive. void run() { QFile file(m_sFilename); m_bRunState = true; while (m_bRunState) { if (file.isOpen()) { char achBuffer[1024]; while (file.readLine(achBuffer, sizeof(achBuffer)) > 0) { QApplication::postEvent( qjackctlMainForm::getInstance(), new LineEvent(QJACKCTL_LINE_EVENT, achBuffer)); } if (file.size() == file.pos() && file.error() == QFile::NoError) { msleep(1000); } else { file.close(); } } else if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { file.seek(file.size()); } else msleep(1000); } } private: // The log filename to watch. QString m_sFilename; // Whether the thread is logically running. volatile bool m_bRunState; }; #endif // CONFIG_DBUS //---------------------------------------------------------------------------- // qjackctlMainForm -- UI wrapper form. // Kind of singleton reference. qjackctlMainForm *qjackctlMainForm::g_pMainForm = NULL; // Constructor. qjackctlMainForm::qjackctlMainForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QWidget(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); // Pseudo-singleton reference setup. g_pMainForm = this; m_pSetup = NULL; m_iServerState = QJACKCTL_INACTIVE; m_pJack = NULL; m_pJackClient = NULL; m_bJackDetach = false; m_bJackShutdown = false; m_pAlsaSeq = NULL; #ifdef CONFIG_DBUS m_pDBusControl = NULL; m_pDBusConfig = NULL; m_pDBusLogWatcher = NULL; m_bDBusStarted = false; #endif m_iStartDelay = 0; m_iTimerDelay = 0; m_iTimerRefresh = 0; m_iJackRefresh = 0; m_iAlsaRefresh = 0; m_iJackDirty = 0; m_iAlsaDirty = 0; m_iStatusRefresh = 0; m_iStatusBlink = 0; m_iPatchbayRefresh = 0; m_pStdoutNotifier = NULL; m_pAlsaNotifier = NULL; // All forms are to be created later on setup. m_pMessagesStatusForm = NULL; m_pSessionForm = NULL; m_pConnectionsForm = NULL; m_pPatchbayForm = NULL; // Patchbay rack can be readily created. m_pPatchbayRack = new qjackctlPatchbayRack(); // The eventual system tray widget. m_pSystemTray = NULL; // We're not quitting so early :) m_bQuitForce = false; // Transport skip accelerate factor. m_fSkipAccel = 1.0; // Avoid extra transport toggles (play/stop) m_iTransportPlay = 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 #if 0 // FIXME: Iterate for every child text label... m_ui.StatusDisplayFrame->setAutoFillBackground(true); QList labels = m_ui.StatusDisplayFrame->findChildren (); QListIterator iter(labels); while (iter.hasNext()) iter.next()->setAutoFillBackground(false); #endif // UI connections... QObject::connect(m_ui.StartToolButton, SIGNAL(clicked()), SLOT(startJack())); QObject::connect(m_ui.StopToolButton, SIGNAL(clicked()), SLOT(stopJack())); QObject::connect(m_ui.MessagesStatusToolButton, SIGNAL(clicked()), SLOT(toggleMessagesStatusForm())); QObject::connect(m_ui.SessionToolButton, SIGNAL(clicked()), SLOT(toggleSessionForm())); QObject::connect(m_ui.ConnectionsToolButton, SIGNAL(clicked()), SLOT(toggleConnectionsForm())); QObject::connect(m_ui.PatchbayToolButton, SIGNAL(clicked()), SLOT(togglePatchbayForm())); QObject::connect(m_ui.QuitToolButton, SIGNAL(clicked()), SLOT(quitMainForm())); QObject::connect(m_ui.SetupToolButton, SIGNAL(clicked()), SLOT(showSetupForm())); QObject::connect(m_ui.AboutToolButton, SIGNAL(clicked()), SLOT(showAboutForm())); QObject::connect(m_ui.RewindToolButton, SIGNAL(clicked()), SLOT(transportRewind())); QObject::connect(m_ui.BackwardToolButton, SIGNAL(clicked()), SLOT(transportBackward())); QObject::connect(m_ui.PlayToolButton, SIGNAL(toggled(bool)), SLOT(transportPlay(bool))); QObject::connect(m_ui.PauseToolButton, SIGNAL(clicked()), SLOT(transportStop())); QObject::connect(m_ui.ForwardToolButton, SIGNAL(clicked()), SLOT(transportForward())); } // Destructor. qjackctlMainForm::~qjackctlMainForm (void) { // Stop server, if not already... #ifdef CONFIG_DBUS if (m_pSetup->bStopJack || !m_pSetup->bDBusEnabled) stopJackServer(); if (m_pDBusLogWatcher) delete m_pDBusLogWatcher; if (m_pDBusConfig) delete m_pDBusConfig; if (m_pDBusControl) delete m_pDBusControl; m_pDBusControl = NULL; m_pDBusConfig = NULL; m_pDBusLogWatcher = NULL; m_bDBusStarted = false; #else stopJackServer(); #endif // Terminate local ALSA sequencer interface. if (m_pAlsaNotifier) delete m_pAlsaNotifier; #ifdef CONFIG_ALSA_SEQ if (m_pAlsaSeq) snd_seq_close(m_pAlsaSeq); #endif m_pAlsaNotifier = NULL; m_pAlsaSeq = NULL; // Finally drop any popup widgets around... if (m_pMessagesStatusForm) delete m_pMessagesStatusForm; if (m_pSessionForm) delete m_pSessionForm; if (m_pConnectionsForm) delete m_pConnectionsForm; if (m_pPatchbayForm) delete m_pPatchbayForm; // Quit off system tray widget. if (m_pSystemTray) delete m_pSystemTray; // Patchbay rack is also dead. if (m_pPatchbayRack) delete m_pPatchbayRack; // Pseudo-singleton reference shut-down. g_pMainForm = NULL; } // Kind of singleton reference. qjackctlMainForm *qjackctlMainForm::getInstance (void) { return g_pMainForm; } // Make and set a proper setup step. bool qjackctlMainForm::setup ( qjackctlSetup *pSetup ) { // Finally, fix settings descriptor // and stabilize the form. m_pSetup = pSetup; // To avoid any background flickering, // we'll hide the main display. m_ui.StatusDisplayFrame->hide(); updateButtons(); // What style do we create these forms? QWidget *pParent = NULL; Qt::WindowFlags wflags = Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; if (m_pSetup->bKeepOnTop) { pParent = this; wflags |= Qt::Tool; } // All forms are to be created right now. m_pMessagesStatusForm = new qjackctlMessagesStatusForm (pParent, wflags); m_pSessionForm = new qjackctlSessionForm (pParent, wflags); m_pConnectionsForm = new qjackctlConnectionsForm (pParent, wflags); m_pPatchbayForm = new qjackctlPatchbayForm (pParent, wflags); // Setup appropriately... m_pMessagesStatusForm->setTabPage(m_pSetup->iMessagesStatusTabPage); m_pMessagesStatusForm->setLogging( m_pSetup->bMessagesLog, m_pSetup->sMessagesLogPath); m_pSessionForm->setup(m_pSetup); m_pConnectionsForm->setTabPage(m_pSetup->iConnectionsTabPage); m_pConnectionsForm->setup(m_pSetup); m_pPatchbayForm->setup(m_pSetup); // Set the patchbay cable connection notification signal/slot. QObject::connect(m_pPatchbayRack, SIGNAL(cableConnected(const QString&, const QString&, unsigned int)), this, SLOT(cableConnectSlot(const QString&, const QString&, unsigned int))); // Try to restore old window positioning and appearence. m_pSetup->loadWidgetGeometry(this, true); // Make it final show... m_ui.StatusDisplayFrame->show(); // Set other defaults... updateDisplayEffect(); updateTimeDisplayFonts(); updateTimeDisplayToolTips(); updateTimeFormat(); updateMessagesFont(); updateMessagesLimit(); updateConnectionsFont(); updateConnectionsIconSize(); updateJackClientPortAlias(); updateBezierLines(); updateActivePatchbay(); updateSystemTray(); // And for the whole widget gallore... m_pSetup->loadWidgetGeometry(m_pMessagesStatusForm); m_pSetup->loadWidgetGeometry(m_pSessionForm); m_pSetup->loadWidgetGeometry(m_pConnectionsForm); m_pSetup->loadWidgetGeometry(m_pPatchbayForm); // Initial XRUN statistics reset. resetXrunStats(); // Check if we can redirect our own stdout/stderr... #if !defined(WIN32) if (m_pSetup->bStdoutCapture && ::pipe(g_fdStdout) == 0) { ::dup2(g_fdStdout[QJACKCTL_FDWRITE], STDOUT_FILENO); ::dup2(g_fdStdout[QJACKCTL_FDWRITE], STDERR_FILENO); m_pStdoutNotifier = new QSocketNotifier(g_fdStdout[QJACKCTL_FDREAD], QSocketNotifier::Read, this); QObject::connect(m_pStdoutNotifier, SIGNAL(activated(int)), this, SLOT(stdoutNotifySlot(int))); } #endif #ifdef CONFIG_ALSA_SEQ 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; 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( m_pAlsaSeq, "qjackctl", SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE | SND_SEQ_PORT_CAP_NO_EXPORT, SND_SEQ_PORT_TYPE_APPLICATION ); if (iPort >= 0) { snd_seq_port_subscribe_alloca(&pAlsaSubs); seq_addr.client = SND_SEQ_CLIENT_SYSTEM; seq_addr.port = SND_SEQ_PORT_SYSTEM_ANNOUNCE; snd_seq_port_subscribe_set_sender(pAlsaSubs, &seq_addr); seq_addr.client = snd_seq_client_id(m_pAlsaSeq); seq_addr.port = iPort; snd_seq_port_subscribe_set_dest(pAlsaSubs, &seq_addr); snd_seq_subscribe_port(m_pAlsaSeq, pAlsaSubs); snd_seq_poll_descriptors(m_pAlsaSeq, pfd, 1, POLLIN); m_pAlsaNotifier = new QSocketNotifier(pfd[0].fd, QSocketNotifier::Read); QObject::connect(m_pAlsaNotifier, SIGNAL(activated(int)), SLOT(alsaNotifySlot(int))); } } // Could we start without it? if (m_pAlsaSeq) { // Rather obvious setup. if (m_pConnectionsForm) m_pConnectionsForm->stabilizeAlsa(true); } else { appendMessagesError( tr("Could not open ALSA sequencer as a client.\n\n" "ALSA MIDI patchbay will be not available.")); } } #endif #ifdef CONFIG_DBUS // Register D-Bus service... if (m_pSetup->bDBusEnabled) { const QString s; // Just an empty string. const QString sDBusName("org.rncbc.qjackctl"); QDBusConnection dbus = QDBusConnection::systemBus(); dbus.connect(s, s, sDBusName, "start", this, SLOT(startJack())); dbus.connect(s, s, sDBusName, "stop", this, SLOT(stopJack())); dbus.connect(s, s, sDBusName, "main", this, SLOT(toggleMainForm())); dbus.connect(s, s, sDBusName, "messages", this, SLOT(toggleMessagesForm())); dbus.connect(s, s, sDBusName, "status", this, SLOT(toggleStatusForm())); dbus.connect(s, s, sDBusName, "session", this, SLOT(toggleSessionForm())); dbus.connect(s, s, sDBusName, "connections", this, SLOT(toggleConnectionsForm())); dbus.connect(s, s, sDBusName, "patchbay", this, SLOT(togglePatchbayForm())); dbus.connect(s, s, sDBusName, "rewind", this, SLOT(transportRewind())); dbus.connect(s, s, sDBusName, "backward", this, SLOT(transportBackward())); dbus.connect(s, s, sDBusName, "play", this, SLOT(transportStart())); dbus.connect(s, s, sDBusName, "pause", this, SLOT(transportStop())); dbus.connect(s, s, sDBusName, "forward", this, SLOT(transportForward())); dbus.connect(s, s, sDBusName, "setup", this, SLOT(showSetupForm())); dbus.connect(s, s, sDBusName, "about", this, SLOT(showAboutForm())); dbus.connect(s, s, sDBusName, "quit", this, SLOT(quitMainForm())); dbus.connect(s, s, sDBusName, "preset", this, SLOT(activatePreset(const QString&))); // Session related slots... if (m_pSessionForm) { dbus.connect(s, s, sDBusName, "load", m_pSessionForm, SLOT(loadSession())); dbus.connect(s, s, sDBusName, "save", m_pSessionForm, SLOT(saveSessionSave())); #ifdef CONFIG_JACK_SESSION dbus.connect(s, s, sDBusName, "savequit", m_pSessionForm, SLOT(saveSessionSaveAndQuit())); dbus.connect(s, s, sDBusName, "savetemplate", m_pSessionForm, SLOT(saveSessionSaveTemplate())); #endif } // 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; } } #endif // Load patchbay form recent paths... if (m_pPatchbayForm) { m_pPatchbayForm->setRecentPatchbays(m_pSetup->patchbays); if (!m_pSetup->sPatchbayPath.isEmpty() && QFileInfo(m_pSetup->sPatchbayPath).exists()) m_pPatchbayForm->loadPatchbayFile(m_pSetup->sPatchbayPath); m_pPatchbayForm->updateRecentPatchbays(); m_pPatchbayForm->stabilizeForm(); } // Try to find if we can start in detached mode (client-only) // just in case there's a JACK server already running. startJackClient(true); // Final startup stabilization... stabilizeForm(); jackStabilize(); // Look for immediate server startup?... if (m_pSetup->bStartJack || !m_pSetup->sCmdLine.isEmpty()) m_pSetup->bStartJackCmd = true; if (m_pSetup->bStartJackCmd) startJack(); // Register the first timer slot. QTimer::singleShot(QJACKCTL_TIMER_MSECS, this, SLOT(timerSlot())); // We're ready to go... return true; } // Window close event handlers. bool qjackctlMainForm::queryClose (void) { bool bQueryClose = true; #ifdef CONFIG_SYSTEM_TRAY // If we're not quitting explicitly and there's an // active system tray icon, then just hide ourselves. if (!m_bQuitForce && isVisible() && m_pSetup->bSystemTray && m_pSystemTray) { m_pSetup->saveWidgetGeometry(this, true); const QString& sTitle = tr("Information") + " - " QJACKCTL_SUBTITLE1; const QString& sText = tr("The program will keep running in the system tray.\n\n" "To terminate the program, please choose \"Quit\"\n" "in the context menu of the system tray icon."); #ifdef QJACKCTL_QT4_SYSTEM_TRAY #if QT_VERSION >= 0x040300 if (QSystemTrayIcon::supportsMessages()) { m_pSystemTray->showMessage( sTitle, sText, QSystemTrayIcon::Information); } else #endif #endif QMessageBox::information(this, sTitle, sText); hide(); bQueryClose = false; } #endif // Check if JACK daemon is currently running... if (bQueryClose && m_pJack && m_pJack->state() == QProcess::Running && (m_pSetup->bQueryClose || m_pSetup->bQueryShutdown)) { bQueryClose = (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("JACK is currently running.\n\n" "Do you want to terminate the JACK audio server?"), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok); } // Try to save current aliases default settings. if (bQueryClose && m_pConnectionsForm) { bQueryClose = m_pConnectionsForm->queryClose(); if (bQueryClose) m_pSetup->iConnectionsTabPage = m_pConnectionsForm->tabPage(); } // Try to save current patchbay default settings. if (bQueryClose && m_pPatchbayForm) { bQueryClose = m_pPatchbayForm->queryClose(); if (bQueryClose && !m_pPatchbayForm->patchbayPath().isEmpty()) m_pSetup->sPatchbayPath = m_pPatchbayForm->patchbayPath(); } // Try to save current session directories list... if (bQueryClose && m_pSessionForm) { bQueryClose = m_pSessionForm->queryClose(); if (bQueryClose) { m_pSetup->sessionDirs = m_pSessionForm->sessionDirs(); m_pSetup->bSessionSaveVersion = m_pSessionForm->isSaveSessionVersion(); } } // Some windows default fonts are here on demand too. if (bQueryClose && m_pMessagesStatusForm) { m_pSetup->sMessagesFont = m_pMessagesStatusForm->messagesFont().toString(); m_pSetup->iMessagesStatusTabPage = m_pMessagesStatusForm->tabPage(); } // Whether we're really quitting. m_bQuitForce = bQueryClose; // Try to save current positioning. if (bQueryClose) { m_pSetup->saveWidgetGeometry(m_pMessagesStatusForm); m_pSetup->saveWidgetGeometry(m_pSessionForm); m_pSetup->saveWidgetGeometry(m_pConnectionsForm); m_pSetup->saveWidgetGeometry(m_pPatchbayForm); m_pSetup->saveWidgetGeometry(this); // Close popup widgets. if (m_pMessagesStatusForm) m_pMessagesStatusForm->close(); if (m_pSessionForm) m_pSessionForm->close(); if (m_pConnectionsForm) m_pConnectionsForm->close(); if (m_pPatchbayForm) m_pPatchbayForm->close(); // And the system tray icon too. if (m_pSystemTray) m_pSystemTray->close(); // Stop any service out there... if (m_pSetup->bStopJack) stopJackServer(); } return bQueryClose; } void qjackctlMainForm::closeEvent ( QCloseEvent *pCloseEvent ) { // Let's be sure about that... if (queryClose()) { pCloseEvent->accept(); QApplication::quit(); } else { pCloseEvent->ignore(); } } void qjackctlMainForm::customEvent ( QEvent *pEvent ) { switch (int(pEvent->type())) { case QJACKCTL_PORT_EVENT: portNotifyEvent(); break; case QJACKCTL_XRUN_EVENT: xrunNotifyEvent(); break; case QJACKCTL_BUFF_EVENT: buffNotifyEvent(); break; case QJACKCTL_SHUT_EVENT: shutNotifyEvent(); break; case QJACKCTL_EXIT_EVENT: exitNotifyEvent(); break; #ifdef CONFIG_DBUS case QJACKCTL_LINE_EVENT: appendStdoutBuffer( static_cast (pEvent)->line()); break; #endif default: QWidget::customEvent(pEvent); break; } } // Common exit status text formatter... QString qjackctlMainForm::formatExitStatus ( int iExitStatus ) const { QString sTemp = " "; if (iExitStatus == 0) sTemp += tr("successfully"); else sTemp += tr("with exit status=%1").arg(iExitStatus); return sTemp + "."; } // Common shell script executive, with placeholder substitution... void qjackctlMainForm::shellExecute ( const QString& sShellCommand, const QString& sStartMessage, const QString& sStopMessage ) { QString sTemp = sShellCommand; sTemp.replace("%P", m_pSetup->sDefPreset); sTemp.replace("%N", m_pSetup->sServerName); sTemp.replace("%s", m_preset.sServerPrefix); sTemp.replace("%d", m_preset.sDriver); sTemp.replace("%i", m_preset.sInterface); sTemp.replace("%r", QString::number(m_preset.iSampleRate)); sTemp.replace("%p", QString::number(m_preset.iFrames)); sTemp.replace("%n", QString::number(m_preset.iPeriods)); appendMessages(sStartMessage); appendMessagesColor(sTemp.trimmed(), "#990099"); stabilize(QJACKCTL_TIMER_MSECS); // Execute and set exit status message... sTemp = sStopMessage + formatExitStatus( ::system(sTemp.toUtf8().constData())); // Wait a litle bit before continue... stabilize(QJACKCTL_TIMER_MSECS); // Final log message... appendMessages(sTemp); } // Start jack audio server... void qjackctlMainForm::startJack (void) { // If can't be already a client, are we? if (m_pJackClient) return; // Is the server process instance still here? if (m_pJack) { if (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Could not start JACK.\n\n" "Maybe JACK audio server is already started."), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Ok) { m_pJack->terminate(); m_pJack->kill(); } return; } // Stabilize emerging server state... QPalette pal; pal.setColor(QPalette::Foreground, Qt::yellow); m_ui.ServerStateTextLabel->setPalette(pal); m_ui.StartToolButton->setEnabled(false); updateServerState(QJACKCTL_ACTIVATING); // Reset our timer counters... m_iStartDelay = 0; m_iTimerDelay = 0; m_iJackRefresh = 0; // Now we're sure it ain't detached. m_bJackShutdown = false; m_bJackDetach = false; // Load primary/default server preset... if (!m_pSetup->loadPreset(m_preset, m_pSetup->sDefPreset)) { appendMessagesError(tr("Could not load preset \"%1\".\n\nRetrying with default.").arg(m_pSetup->sDefPreset)); m_pSetup->sDefPreset = m_pSetup->sDefPresetName; if (!m_pSetup->loadPreset(m_preset, m_pSetup->sDefPreset)) { appendMessagesError(tr("Could not load default preset.\n\nSorry.")); jackCleanup(); return; } } // Override server name now... 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); } #endif // If we ain't to be the server master, maybe we'll start // detached as client only (jackd server already running?) if (startJackClient(true)) { m_ui.StopToolButton->setEnabled(true); return; } // Say that we're starting... updateServerState(QJACKCTL_STARTING); // Do we have any startup script?... if (m_pSetup->bStartupScript && !m_pSetup->sStartupScriptShell.isEmpty()) { shellExecute(m_pSetup->sStartupScriptShell, tr("Startup script..."), tr("Startup script terminated")); } // Split the server path into arguments... QStringList args = m_preset.sServerPrefix.split(' '); // Look for the executable in the search path; // this enforces the server command to be an // executable absolute path whenever possible. QString sCommand = args[0]; QFileInfo fi(sCommand); if (fi.isRelative()) { #if defined(WIN32) const char chPathSep = ';'; if (fi.suffix().isEmpty()) sCommand += ".exe"; #else const char chPathSep = ':'; #endif const QString sPath = ::getenv("PATH"); QStringList paths = sPath.split(chPathSep); QStringListIterator iter(paths); while (iter.hasNext()) { const QString& sDirectory = iter.next(); fi.setFile(QDir(sDirectory), sCommand); if (fi.isExecutable()) { sCommand = fi.filePath(); break; } } } // Now that we got a command, remove it from args list... args.removeAt(0); // Build process arguments... bool bDummy = (m_preset.sDriver == "dummy"); bool bSun = (m_preset.sDriver == "sun"); bool bOss = (m_preset.sDriver == "oss"); bool bAlsa = (m_preset.sDriver == "alsa"); bool bPortaudio = (m_preset.sDriver == "portaudio"); bool bCoreaudio = (m_preset.sDriver == "coreaudio"); bool bFreebob = (m_preset.sDriver == "freebob"); bool bFirewire = (m_preset.sDriver == "firewire"); bool bNet = (m_preset.sDriver == "net" || m_preset.sDriver == "netone"); if (!m_pSetup->sServerName.isEmpty()) args.append("-n" + m_pSetup->sServerName); if (m_preset.bVerbose) args.append("-v"); if (m_preset.bRealtime) { // args.append("-R"); if (m_preset.iPriority > 0 && !bCoreaudio) args.append("-P" + QString::number(m_preset.iPriority)); } else args.append("-r"); if (m_preset.iPortMax > 0 && m_preset.iPortMax != 256) args.append("-p" + QString::number(m_preset.iPortMax)); if (m_preset.iTimeout > 0 && m_preset.iTimeout != 500) args.append("-t" + QString::number(m_preset.iTimeout)); if (m_preset.bNoMemLock) args.append("-m"); else if (m_preset.bUnlockMem) args.append("-u"); args.append("-d" + m_preset.sDriver); if ((bAlsa || bPortaudio) && (m_preset.iAudio != QJACKCTL_DUPLEX || m_preset.sInDevice.isEmpty() || m_preset.sOutDevice.isEmpty())) { QString sInterface = m_preset.sInterface; if (bAlsa && sInterface.isEmpty()) sInterface = "hw:0"; if (!sInterface.isEmpty()) args.append("-d" + formatQuoted(sInterface)); } if (bPortaudio && m_preset.iChan > 0) args.append("-c" + QString::number(m_preset.iChan)); if ((bCoreaudio || bFreebob || 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 (m_preset.iPeriods > 0) args.append("-n" + QString::number(m_preset.iPeriods)); } if (bAlsa) { if (m_preset.bSoftMode) args.append("-s"); if (m_preset.bMonitor) 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 if (!m_preset.sMidiDriver.isEmpty()) args.append("-X" + formatQuoted(m_preset.sMidiDriver)); #endif } if (bAlsa || bPortaudio) { switch (m_preset.iAudio) { case QJACKCTL_DUPLEX: if (!m_preset.sInDevice.isEmpty() || !m_preset.sOutDevice.isEmpty()) args.append("-D"); if (!m_preset.sInDevice.isEmpty()) args.append("-C" + formatQuoted(m_preset.sInDevice)); if (!m_preset.sOutDevice.isEmpty()) args.append("-P" + formatQuoted(m_preset.sOutDevice)); break; case QJACKCTL_CAPTURE: args.append("-C" + formatQuoted(m_preset.sInDevice)); break; case QJACKCTL_PLAYBACK: args.append("-P" + formatQuoted(m_preset.sOutDevice)); break; } if (m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK) args.append("-i" + QString::number(m_preset.iInChannels)); if (m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE) args.append("-o" + QString::number(m_preset.iOutChannels)); switch (m_preset.iDither) { case 0: // args.append("-z-"); break; case 1: args.append("-zr"); break; case 2: args.append("-zs"); break; case 3: args.append("-zt"); break; } } else if (bOss || bSun) { if (m_preset.bIgnoreHW) args.append("-b"); if (m_preset.iWordLength > 0) args.append("-w" + QString::number(m_preset.iWordLength)); if (!m_preset.sInDevice.isEmpty() && m_preset.iAudio != QJACKCTL_PLAYBACK) args.append("-C" + formatQuoted(m_preset.sInDevice)); if (!m_preset.sOutDevice.isEmpty() && m_preset.iAudio != QJACKCTL_CAPTURE) args.append("-P" + formatQuoted(m_preset.sOutDevice)); if (m_preset.iAudio == QJACKCTL_PLAYBACK) args.append("-i0"); else if (m_preset.iInChannels > 0) args.append("-i" + QString::number(m_preset.iInChannels)); if (m_preset.iAudio == QJACKCTL_CAPTURE) args.append("-o0"); else if (m_preset.iOutChannels > 0) args.append("-o" + QString::number(m_preset.iOutChannels)); } else if (bCoreaudio || bFirewire || bNet) { if (m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK) args.append("-i" + QString::number(m_preset.iInChannels)); 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 (m_preset.iInLatency > 0) args.append("-I" + QString::number(m_preset.iInLatency)); if (m_preset.iOutLatency > 0) args.append("-O" + QString::number(m_preset.iOutLatency)); } // Split the server path into arguments... if (!m_preset.sServerSuffix.isEmpty()) args.append(m_preset.sServerSuffix.split(' ')); // 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(); 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 QT_VERSION >= 0x040200 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())); 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) 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); } } // Go jack, go... m_pJack->start(sCommand, cmd_args); #ifdef CONFIG_DBUS } #endif } // Stop jack audio server... void qjackctlMainForm::stopJack (void) { // Check if we're allowed to stop (shutdown)... if (m_pSetup->bQueryShutdown && m_pConnectionsForm && (m_pConnectionsForm->isAudioConnected() || m_pConnectionsForm->isMidiConnected()) && QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some client audio applications\n" "are still active and connected.\n\n" "Do you want to stop the JACK audio server?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { return; } // Stop the server unconditionally. stopJackServer(); } // Stop jack audio server... void qjackctlMainForm::stopJackServer (void) { // Clear timer counters... m_iStartDelay = 0; m_iTimerDelay = 0; m_iJackRefresh = 0; // Stop client code. stopJackClient(); // And try to stop server. #ifdef CONFIG_DBUS if ((m_pJack && m_pJack->state() == QProcess::Running) || (m_pDBusControl && m_bDBusStarted)) { #else if (m_pJack && m_pJack->state() == QProcess::Running) { #endif updateServerState(QJACKCTL_STOPPING); // Do we have any pre-shutdown script?... if (m_pSetup->bShutdownScript && !m_pSetup->sShutdownScriptShell.isEmpty()) { shellExecute(m_pSetup->sShutdownScriptShell, tr("Shutdown script..."), tr("Shutdown script terminated")); } // Now it's the time to real try stopping the server daemon... if (!m_bJackShutdown) { // Jack classic server backend... if (m_pJack) { appendMessages(tr("JACK is stopping...")); #if defined(WIN32) // Try harder... m_pJack->kill(); #else // Try softly... m_pJack->terminate(); #endif } #ifdef CONFIG_DBUS // Jack D-BUS server backend... if (m_pDBusControl) { QDBusMessage dbusm = m_pDBusControl->call("StopServer"); if (dbusm.type() == QDBusMessage::ReplyMessage) { appendMessages( tr("D-BUS: JACK server is stopping...")); } else { appendMessagesError( tr("D-BUS: JACK server could not be stopped.\n\nSorry")); } } #endif // Give it some time to terminate gracefully and stabilize... stabilize(QJACKCTL_TIMER_MSECS); // Keep on, if not exiting for good. if (!m_bQuitForce) return; } } // Do final processing anyway. jackCleanup(); } // Stdout handler... void qjackctlMainForm::readStdout (void) { appendStdoutBuffer(m_pJack->readAllStandardOutput()); } // Stdout buffer handler -- now splitted by complete new-lines... void qjackctlMainForm::appendStdoutBuffer ( const QString& s ) { m_sStdoutBuffer.append(s); int iLength = m_sStdoutBuffer.lastIndexOf('\n') + 1; if (iLength > 0) { QString sTemp = m_sStdoutBuffer.left(iLength); m_sStdoutBuffer.remove(0, iLength); QStringListIterator iter(sTemp.split('\n')); while (iter.hasNext()) { sTemp = iter.next(); if (!sTemp.isEmpty()) appendMessagesText(detectXrun(sTemp)); } } } // Stdout flusher -- show up any unfinished line... void qjackctlMainForm::flushStdoutBuffer (void) { if (!m_sStdoutBuffer.isEmpty()) { appendMessagesText(detectXrun(m_sStdoutBuffer)); m_sStdoutBuffer.truncate(0); } } // Jack audio server startup. void qjackctlMainForm::jackStarted (void) { // Show startup results... if (m_pJack) { appendMessages(tr("JACK was started with PID=%1.") .arg(long(m_pJack->pid()))); } #ifdef CONFIG_DBUS // Special for D-BUS control.... if (m_pDBusControl) { m_bDBusStarted = true; appendMessages(tr("D-BUS: JACK server was started (%1 aka jackdbus).") .arg(m_pDBusControl->service())); } #endif // Delay our control client... startJackClientDelay(); } // Jack audio server got an error. void qjackctlMainForm::jackError ( QProcess::ProcessError error ) { qjackctl_on_error(error); } // Jack audio server finish. void qjackctlMainForm::jackFinished (void) { // Force client code cleanup. if (!m_bJackShutdown) jackCleanup(); } // Jack audio server cleanup. void qjackctlMainForm::jackCleanup (void) { // Force client code cleanup. bool bPostShutdown = m_bJackDetach; if (!bPostShutdown) stopJackClient(); // Flush anything that maybe pending... flushStdoutBuffer(); // Classic server control... if (m_pJack) { if (m_pJack->state() != QProcess::NotRunning) { appendMessages(tr("JACK is being forced...")); // Force final server shutdown... m_pJack->kill(); // Give it some time to terminate gracefully and stabilize... stabilize(QJACKCTL_TIMER_MSECS); } // Force final server shutdown... appendMessages(tr("JACK was stopped") + formatExitStatus(m_pJack->exitCode())); // Destroy it. delete m_pJack; m_pJack = NULL; // Flag we need a post-shutdown script... bPostShutdown = true; } #ifdef CONFIG_DBUS // Special for D-BUS control... if (m_pDBusControl && m_bDBusStarted) { m_bDBusStarted = false; appendMessages(tr("D-BUS: JACK server was stopped (%1 aka jackdbus).") .arg(m_pDBusControl->service())); // Flag we need a post-shutdown script... bPostShutdown = true; } #endif // Cannot be detached anymore. m_bJackDetach = false; // Do we have any post-shutdown script?... // (this will be always called, despite we've started the server or not) if (bPostShutdown && m_pSetup->bPostShutdownScript && !m_pSetup->sPostShutdownScriptShell.isEmpty()) { shellExecute(m_pSetup->sPostShutdownScriptShell, tr("Post-shutdown script..."), tr("Post-shutdown script terminated")); } // Reset server name. m_pSetup->sServerName.clear(); // Stabilize final server state... jackStabilize(); } // Stabilize server state... void qjackctlMainForm::jackStabilize (void) { QPalette pal; pal.setColor(QPalette::Foreground, m_pJackClient == NULL ? 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.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; if (m_bJackDetach) iServerState = (m_pJackClient ? QJACKCTL_ACTIVE : QJACKCTL_INACTIVE); else iServerState = QJACKCTL_STOPPED; updateServerState(iServerState); } // XRUN detection routine. QString& qjackctlMainForm::detectXrun ( QString& s ) { if (m_iXrunSkips > 1) return s; QRegExp rx(m_pSetup->sXrunRegex); int iPos = rx.indexIn(s); if (iPos >= 0) { s.insert(iPos + rx.matchedLength(), ""); s.insert(iPos, ""); #ifndef CONFIG_JACK_XRUN_DELAY m_tXrunLast.restart(); updateXrunStats(rx.cap(1).toFloat()); refreshXrunStats(); #endif } return s; } // Update the XRUN last delay and immediate statistical values (in msecs). void qjackctlMainForm::updateXrunStats ( float fXrunLast ) { if (m_iXrunStats > 0) { m_fXrunLast = fXrunLast; m_fXrunTotal += m_fXrunLast; if (m_fXrunLast < m_fXrunMin || m_iXrunCount == 0) m_fXrunMin = m_fXrunLast; if (m_fXrunLast > m_fXrunMax || m_iXrunCount == 0) m_fXrunMax = m_fXrunLast; m_iXrunCount++; // refreshXrunStats(); } m_iXrunStats++; } // Own stdout/stderr socket notifier slot. void qjackctlMainForm::stdoutNotifySlot ( int fd ) { char achBuffer[1024]; int cchBuffer = ::read(fd, achBuffer, sizeof(achBuffer) - 1); if (cchBuffer > 0) { achBuffer[cchBuffer] = (char) 0; appendStdoutBuffer(achBuffer); } } // Messages output methods. void qjackctlMainForm::appendMessages ( const QString& s ) { if (m_pMessagesStatusForm) m_pMessagesStatusForm->appendMessages(s); } void qjackctlMainForm::appendMessagesColor ( const QString& s, const QString& c ) { if (m_pMessagesStatusForm) m_pMessagesStatusForm->appendMessagesColor(s, c); } void qjackctlMainForm::appendMessagesText ( const QString& s ) { if (m_pMessagesStatusForm) m_pMessagesStatusForm->appendMessagesText(s); } void qjackctlMainForm::appendMessagesError ( const QString& s ) { if (m_pMessagesStatusForm) { m_pMessagesStatusForm->setTabPage( int(qjackctlMessagesStatusForm::MessagesTab)); m_pMessagesStatusForm->show(); } appendMessagesColor(s.simplified(), "#ff0000"); const QString& sTitle = tr("Error") + " - " QJACKCTL_SUBTITLE1; #ifdef CONFIG_SYSTEM_TRAY #ifdef QJACKCTL_QT4_SYSTEM_TRAY #if QT_VERSION >= 0x040300 if (m_pSetup->bSystemTray && m_pSystemTray && QSystemTrayIcon::supportsMessages()) { m_pSystemTray->showMessage(sTitle, s, QSystemTrayIcon::Critical); } else #endif #endif #endif QMessageBox::critical(this, sTitle, s, QMessageBox::Cancel); } // Force update of the messages font. void qjackctlMainForm::updateMessagesFont (void) { if (m_pSetup == NULL) return; if (m_pMessagesStatusForm && !m_pSetup->sMessagesFont.isEmpty()) { QFont font; if (font.fromString(m_pSetup->sMessagesFont)) m_pMessagesStatusForm->setMessagesFont(font); } } // Update messages window line limit. void qjackctlMainForm::updateMessagesLimit (void) { if (m_pSetup == NULL) return; if (m_pMessagesStatusForm) { if (m_pSetup->bMessagesLimit) m_pMessagesStatusForm->setMessagesLimit(m_pSetup->iMessagesLimitLines); else m_pMessagesStatusForm->setMessagesLimit(-1); } } // Force update of the connections font. void qjackctlMainForm::updateConnectionsFont (void) { if (m_pSetup == NULL) return; if (m_pConnectionsForm && !m_pSetup->sConnectionsFont.isEmpty()) { QFont font; if (font.fromString(m_pSetup->sConnectionsFont)) m_pConnectionsForm->setConnectionsFont(font); } } // Update of the connections view icon size. void qjackctlMainForm::updateConnectionsIconSize (void) { if (m_pSetup == NULL) return; if (m_pConnectionsForm) m_pConnectionsForm->setConnectionsIconSize(m_pSetup->iConnectionsIconSize); } // Update of JACK client/port alias display mode. void qjackctlMainForm::updateJackClientPortAlias (void) { if (m_pSetup == NULL) return; qjackctlJackClientList::setJackClientPortAlias(m_pSetup->iJackClientPortAlias); refreshJackConnections(); } // 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) return; // Set the main background... QPalette pal; if (m_pSetup->bDisplayEffect) { QPixmap pm(":/images/displaybg1.png"); pal.setBrush(QPalette::Background, QBrush(pm)); } else { pal.setColor(QPalette::Background, Qt::black); } m_ui.StatusDisplayFrame->setPalette(pal); } // Force update of big time display related fonts. void qjackctlMainForm::updateTimeDisplayFonts (void) { QFont font; if (!m_pSetup->sDisplayFont1.isEmpty() && font.fromString(m_pSetup->sDisplayFont1)) m_ui.TimeDisplayTextLabel->setFont(font); if (!m_pSetup->sDisplayFont2.isEmpty() && font.fromString(m_pSetup->sDisplayFont2)) { m_ui.ServerStateTextLabel->setFont(font); m_ui.ServerModeTextLabel->setFont(font); m_ui.DspLoadTextLabel->setFont(font); m_ui.SampleRateTextLabel->setFont(font); m_ui.XrunCountTextLabel->setFont(font); m_ui.TransportStateTextLabel->setFont(font); m_ui.TransportBPMTextLabel->setFont(font); font.setBold(true); m_ui.TransportTimeTextLabel->setFont(font); } } // Force update of big time display related tooltips. void qjackctlMainForm::updateTimeDisplayToolTips (void) { QString sTimeDisplay = tr("Transport BBT (bar.beat.ticks)"); QString sTransportTime = tr("Transport time code"); switch (m_pSetup->iTimeDisplay) { case DISPLAY_TRANSPORT_TIME: { QString sTemp = sTimeDisplay; sTimeDisplay = sTransportTime; sTransportTime = sTemp; break; } case DISPLAY_RESET_TIME: 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 += ".---"; break; } } // Update the connections client/port aliases. void qjackctlMainForm::updateAliases (void) { if (m_pConnectionsForm) m_pConnectionsForm->updateAliases(); } // Update the main form buttons display. void qjackctlMainForm::updateButtons (void) { updateTitleStatus(); if (m_pSetup->bLeftButtons) { m_ui.StartToolButton->show(); m_ui.StopToolButton->show(); m_ui.MessagesStatusToolButton->show(); m_ui.SessionToolButton->show(); m_ui.ConnectionsToolButton->show(); m_ui.PatchbayToolButton->show(); } else { m_ui.StartToolButton->hide(); m_ui.StopToolButton->hide(); m_ui.MessagesStatusToolButton->hide(); m_ui.SessionToolButton->hide(); m_ui.ConnectionsToolButton->hide(); m_ui.PatchbayToolButton->hide(); } if (m_pSetup->bRightButtons) { m_ui.QuitToolButton->show(); m_ui.SetupToolButton->show(); } else { m_ui.QuitToolButton->hide(); m_ui.SetupToolButton->hide(); } if (m_pSetup->bRightButtons && (m_pSetup->bLeftButtons || m_pSetup->bTransportButtons)) { m_ui.AboutToolButton->show(); } else { m_ui.AboutToolButton->hide(); } if (m_pSetup->bLeftButtons || m_pSetup->bTransportButtons) { m_ui.RewindToolButton->show(); m_ui.BackwardToolButton->show(); m_ui.PlayToolButton->show(); m_ui.PauseToolButton->show(); m_ui.ForwardToolButton->show(); } else { m_ui.RewindToolButton->hide(); m_ui.BackwardToolButton->hide(); m_ui.PlayToolButton->hide(); m_ui.PauseToolButton->hide(); m_ui.ForwardToolButton->hide(); } Qt::ToolButtonStyle toolButtonStyle = (m_pSetup->bTextLabels ? Qt::ToolButtonTextBesideIcon : Qt::ToolButtonIconOnly); m_ui.StartToolButton->setToolButtonStyle(toolButtonStyle); m_ui.StopToolButton->setToolButtonStyle(toolButtonStyle); m_ui.MessagesStatusToolButton->setToolButtonStyle(toolButtonStyle); m_ui.SessionToolButton->setToolButtonStyle(toolButtonStyle); m_ui.ConnectionsToolButton->setToolButtonStyle(toolButtonStyle); m_ui.PatchbayToolButton->setToolButtonStyle(toolButtonStyle); m_ui.QuitToolButton->setToolButtonStyle(toolButtonStyle); m_ui.SetupToolButton->setToolButtonStyle(toolButtonStyle); m_ui.AboutToolButton->setToolButtonStyle(toolButtonStyle); adjustSize(); } // Force update of active patchbay definition profile, if applicable. bool qjackctlMainForm::isActivePatchbay ( const QString& sPatchbayPath ) const { bool bActive = false; if (m_pSetup && m_pSetup->bActivePatchbay && !m_pSetup->sActivePatchbayPath.isEmpty()) bActive = (m_pSetup->sActivePatchbayPath == sPatchbayPath); return bActive; } // Force update of active patchbay definition profile, if applicable. void qjackctlMainForm::updateActivePatchbay (void) { if (m_pSetup == NULL) return; // Time to load the active patchbay rack profiler? if (m_pSetup->bActivePatchbay && !m_pSetup->sActivePatchbayPath.isEmpty()) { QFileInfo fi(m_pSetup->sActivePatchbayPath); if (fi.isRelative()) m_pSetup->sActivePatchbayPath = fi.absoluteFilePath(); if (!qjackctlPatchbayFile::load(m_pPatchbayRack, m_pSetup->sActivePatchbayPath)) { appendMessagesError( tr("Could not load active patchbay definition.\n\n\"%1\"\n\nDisabled.") .arg(m_pSetup->sActivePatchbayPath)); m_pSetup->bActivePatchbay = false; } else { appendMessages(tr("Patchbay activated.")); // If we're up and running, make it dirty :) if (m_pJackClient) m_iJackDirty++; if (m_pAlsaSeq) m_iAlsaDirty++; } } // We're sure there's no active patchbay... else appendMessages(tr("Patchbay deactivated.")); // Should refresh anyway. m_iPatchbayRefresh++; } // Toggle active patchbay setting. void qjackctlMainForm::setActivePatchbay ( const QString& sPatchbayPath ) { if (m_pSetup == NULL) return; if (sPatchbayPath.isEmpty()) { m_pSetup->bActivePatchbay = false; } else { m_pSetup->bActivePatchbay = true; m_pSetup->sActivePatchbayPath = sPatchbayPath; } updateActivePatchbay(); } // Reset the MRU patchbay list. void qjackctlMainForm::setRecentPatchbays ( const QStringList& patchbays ) { m_pSetup->patchbays = patchbays; } // Stabilize current form toggle buttons that may be astray. void qjackctlMainForm::stabilizeForm (void) { m_ui.MessagesStatusToolButton->setChecked( m_pMessagesStatusForm && m_pMessagesStatusForm->isVisible()); m_ui.SessionToolButton->setChecked( m_pSessionForm && m_pSessionForm->isVisible()); m_ui.ConnectionsToolButton->setChecked( m_pConnectionsForm && m_pConnectionsForm->isVisible()); m_ui.PatchbayToolButton->setChecked( m_pPatchbayForm && m_pPatchbayForm->isVisible()); } // Stabilize current business over the application event loop. void qjackctlMainForm::stabilize ( int msecs ) { QTime t; t.start(); while (t.elapsed() < msecs) QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); } // Reset XRUN cache items. void qjackctlMainForm::resetXrunStats (void) { m_tResetLast = QTime::currentTime(); m_iXrunStats = 0; m_iXrunCount = 0; m_fXrunTotal = 0.0f; m_fXrunMin = 0.0f; m_fXrunMax = 0.0f; m_fXrunLast = 0.0f; m_tXrunLast.setHMS(0, 0, 0); m_iXrunCallbacks = 0; m_iXrunSkips = 0; #ifdef CONFIG_JACK_MAX_DELAY if (m_pJackClient) jack_reset_max_delayed_usecs(m_pJackClient); #endif refreshXrunStats(); appendMessages(tr("Statistics reset.")); // Make sure all status(es) will be updated ASAP. m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } // Update the XRUN count/callbacks item. void qjackctlMainForm::updateXrunCount (void) { // We'll change XRUN status colors here! QColor color = (m_pJackClient ? Qt::green : Qt::darkGreen); if ((m_iXrunCount + m_iXrunCallbacks) > 0) { if (m_iXrunCallbacks > 0) color = (m_pJackClient ? Qt::red : Qt::darkRed); else color = (m_pJackClient ? Qt::yellow : Qt::darkYellow); // Change the system tray icon background color! if (m_pSystemTray) m_pSystemTray->setBackground(color); } // Reset the system tray icon background! else if (m_pSystemTray) m_pSystemTray->setBackground(Qt::transparent); QPalette pal; pal.setColor(QPalette::Foreground, color); m_ui.XrunCountTextLabel->setPalette(pal); QString sText = QString::number(m_iXrunCount); sText += " ("; sText += QString::number(m_iXrunCallbacks); sText += ")"; updateStatusItem(STATUS_XRUN_COUNT, sText); } // Convert whole elapsed seconds to hh:mm:ss time format. QString qjackctlMainForm::formatTime ( float secs ) const { unsigned int hh, mm, ss; hh = mm = ss = 0; if (secs >= 3600.0f) { hh = (unsigned int) (secs / 3600.0f); secs -= (float) hh * 3600.0f; } if (secs >= 60.0f) { mm = (unsigned int) (secs / 60.0f); secs -= (float) mm * 60.0f; } if (secs >= 0.0) { ss = (unsigned int) secs; secs -= (float) ss; } 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; } return sTemp; } // Update the XRUN last/elapsed time item. QString qjackctlMainForm::formatElapsedTime ( int iStatusItem, const QTime& t, bool bElapsed ) const { QString sTemp = m_sTimeDashes; QString sText; // Compute and format elapsed time. if (t.isNull()) { sText = sTemp; } else { sText = t.toString(); if (m_pJackClient) { float secs = float(t.elapsed()) / 1000.0f; if (bElapsed && secs > 0) { sTemp = formatTime(secs); sText += " (" + sTemp + ")"; } } } // Display elapsed time as big time? if ((iStatusItem == STATUS_RESET_TIME && m_pSetup->iTimeDisplay == DISPLAY_RESET_TIME) || (iStatusItem == STATUS_XRUN_TIME && m_pSetup->iTimeDisplay == DISPLAY_XRUN_TIME)) { m_ui.TimeDisplayTextLabel->setText(sTemp); } return sText; } // Update the XRUN last/elapsed time item. void qjackctlMainForm::updateElapsedTimes (void) { // Display time remaining on start delay... if (m_iTimerDelay < m_iStartDelay) m_ui.TimeDisplayTextLabel->setText(formatTime( float(m_iStartDelay - m_iTimerDelay) / 1000.0f)); else { updateStatusItem(STATUS_RESET_TIME, formatElapsedTime(STATUS_RESET_TIME, m_tResetLast, true)); updateStatusItem(STATUS_XRUN_TIME, formatElapsedTime(STATUS_XRUN_TIME, m_tXrunLast, ((m_iXrunCount + m_iXrunCallbacks) > 0))); } } // Update the XRUN list view items. void qjackctlMainForm::refreshXrunStats (void) { updateXrunCount(); if (m_fXrunTotal < 0.001f) { QString n = "--"; updateStatusItem(STATUS_XRUN_TOTAL, n); updateStatusItem(STATUS_XRUN_MIN, n); updateStatusItem(STATUS_XRUN_MAX, n); updateStatusItem(STATUS_XRUN_AVG, n); updateStatusItem(STATUS_XRUN_LAST, n); } else { float fXrunAverage = 0.0f; if (m_iXrunCount > 0) fXrunAverage = (m_fXrunTotal / m_iXrunCount); QString s = " " + tr("msec"); updateStatusItem(STATUS_XRUN_TOTAL, QString::number(m_fXrunTotal) + s); updateStatusItem(STATUS_XRUN_MIN, QString::number(m_fXrunMin) + s); updateStatusItem(STATUS_XRUN_MAX, QString::number(m_fXrunMax) + s); updateStatusItem(STATUS_XRUN_AVG, QString::number(fXrunAverage) + s); updateStatusItem(STATUS_XRUN_LAST, QString::number(m_fXrunLast) + s); } updateElapsedTimes(); } // Jack socket notifier port/graph callback funtion. void qjackctlMainForm::portNotifyEvent (void) { // Log some message here, if new. if (m_iJackRefresh == 0) appendMessagesColor(tr("JACK connection graph change."), "#cc9966"); // Do what has to be done. refreshJackConnections(); // We'll be dirty too... m_iJackDirty++; } // Jack socket notifier XRUN callback funtion. void qjackctlMainForm::xrunNotifyEvent (void) { // Just increment callback counter. m_iXrunCallbacks++; // Skip this one? Maybe we're under some kind of storm... m_iXrunSkips++; // Report rate must be under one second... if (m_tXrunLast.restart() < 1000) return; #ifdef CONFIG_JACK_XRUN_DELAY // We have an official XRUN delay value (convert usecs to msecs)... updateXrunStats(0.001f * jack_get_xrun_delayed_usecs(m_pJackClient)); #endif // Just log this single event... appendMessagesColor(tr("XRUN callback (%1).") .arg(m_iXrunCallbacks), "#cc66cc"); } // Jack buffer size notifier callback funtion. void qjackctlMainForm::buffNotifyEvent (void) { // 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"); } // Jack socket notifier callback funtion. void qjackctlMainForm::shutNotifyEvent (void) { // Log this event. appendMessagesColor(tr("Shutdown notification."), "#cc6666"); // SHUTDOWN: JACK client handle might not be valid anymore... m_bJackShutdown = true; // m_pJackClient = NULL; // Do what has to be done. stopJackServer(); } // Process error slot void qjackctlMainForm::exitNotifyEvent (void) { // Poor-mans read, copy, update (RCU) QProcess::ProcessError error = g_error; g_error = QProcess::UnknownError; switch (error) { case QProcess::FailedToStart: appendMessagesError(tr("Could not start JACK.\n\nSorry.")); jackFinished(); break; case QProcess::Crashed: appendMessagesColor(tr("JACK has crashed."), "#cc3366"); break; case QProcess::Timedout: appendMessagesColor(tr("JACK timed out."), "#cc3366"); break; case QProcess::WriteError: appendMessagesColor(tr("JACK write error."), "#cc3366"); break; case QProcess::ReadError: appendMessagesColor(tr("JACK read error."), "#cc3366"); break; case QProcess::UnknownError: default: appendMessagesColor(tr("Unknown JACK error (%d).") .arg(int(error)), "#990099"); break; } } // ALSA announce slot. 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); #endif // Log some message here, if new. if (m_iAlsaRefresh == 0) appendMessagesColor(tr("ALSA connection graph change."), "#66cc99"); // Do what has to be done. refreshAlsaConnections(); // We'll be dirty too... m_iAlsaDirty++; } // Timer callback funtion. void qjackctlMainForm::timerSlot (void) { // Is it the first shot on server start after a few delay? if (m_iTimerDelay < m_iStartDelay) { m_iTimerDelay += QJACKCTL_TIMER_MSECS; if (m_iTimerDelay >= m_iStartDelay) { // If we cannot start it now, // maybe we ought to cease & desist... if (!startJackClient(false)) stopJackServer(); } } // Is the connection patchbay dirty enough? if (m_pConnectionsForm) { const QString sEllipsis = "..."; // Are we about to enforce an audio connections persistence profile? if (m_iJackDirty > 0) { m_iJackDirty = 0; if (m_pSessionForm) m_pSessionForm->updateSession(); if (m_pSetup->bActivePatchbay) { appendMessagesColor( tr("JACK active patchbay scan") + sEllipsis, "#6699cc"); m_pPatchbayRack->connectJackScan(m_pJackClient); } refreshJackConnections(); } // Or is it from the MIDI field? if (m_iAlsaDirty > 0) { m_iAlsaDirty = 0; if (m_pSetup->bActivePatchbay) { appendMessagesColor( tr("ALSA active patchbay scan") + sEllipsis, "#99cc66"); m_pPatchbayRack->connectAlsaScan(m_pAlsaSeq); } refreshAlsaConnections(); } #ifdef CONFIG_AUTO_REFRESH // Shall we refresh connections now and then? if (m_pSetup->bAutoRefresh) { m_iTimerRefresh += QJACKCTL_TIMER_MSECS; if (m_iTimerRefresh >= (m_pSetup->iTimeRefresh * 1000)) { m_iTimerRefresh = 0; refreshConnections(); } } #endif // Are we about to refresh it, really? if (m_iJackRefresh > 0 && m_pJackClient != NULL) { m_iJackRefresh = 0; m_pConnectionsForm->refreshAudio(true); m_pConnectionsForm->refreshMidi(true); } if (m_iAlsaRefresh > 0 && m_pAlsaSeq != NULL) { m_iAlsaRefresh = 0; m_pConnectionsForm->refreshAlsa(true); } } // Is the patchbay dirty enough? if (m_pPatchbayForm && m_iPatchbayRefresh > 0) { m_iPatchbayRefresh = 0; m_pPatchbayForm->refreshForm(); } // Update some statistical fields, directly. refreshStatus(); // Register the next timer slot. QTimer::singleShot(QJACKCTL_TIMER_MSECS, this, SLOT(timerSlot())); } // JACK connection notification slot. void qjackctlMainForm::jackConnectChanged (void) { // Just shake the audio connections status quo. if (++m_iJackDirty == 1) appendMessagesColor(tr("JACK connection change."), "#9999cc"); } // ALSA connection notification slot. void qjackctlMainForm::alsaConnectChanged (void) { // Just shake the MIDI connections status quo. if (++m_iAlsaDirty == 1) appendMessagesColor(tr("ALSA connection change."), "#cccc99"); } // Cable connection notification slot. void qjackctlMainForm::cableConnectSlot ( const QString& sOutputPort, const QString& sInputPort, unsigned int ulCableFlags ) { QString sText = QFileInfo(m_pSetup->sActivePatchbayPath).baseName() + ": "; QString sColor; sText += sOutputPort; sText += " -> "; sText += sInputPort; sText += " "; switch (ulCableFlags) { case QJACKCTL_CABLE_CHECKED: sText += tr("checked"); sColor = "#99cccc"; break; case QJACKCTL_CABLE_CONNECTED: sText += tr("connected"); sColor = "#669999"; break; case QJACKCTL_CABLE_DISCONNECTED: sText += tr("disconnected"); sColor = "#cc9999"; break; case QJACKCTL_CABLE_FAILED: default: sText += tr("failed"); sColor = "#cc6699"; break; } appendMessagesColor(sText + '.', sColor); } // Patchbay (dis)connection slot. void qjackctlMainForm::queryDisconnect ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort, int iSocketType ) { if (m_pSetup->bActivePatchbay) { qjackctlPatchbayCable *pCable = m_pPatchbayRack->findCable( pOPort->clientName(), pOPort->portName(), pIPort->clientName(), pIPort->portName(), iSocketType); if (pCable && QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("A patchbay definition is currently active,\n" "which is probable to redo this connection:\n\n" "%1 -> %2\n\n" "Do you want to remove the patchbay connection?") .arg(pCable->outputSocket()->name()) .arg(pCable->inputSocket()->name()), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { m_pPatchbayRack->removeCable(pCable); if (m_pPatchbayForm && isActivePatchbay(m_pPatchbayForm->patchbayPath())) m_pPatchbayForm->loadPatchbayRack(m_pPatchbayRack); } } } // Delay jack control client start... void qjackctlMainForm::startJackClientDelay (void) { // Sloppy boy fix: may the serve be stopped, just in case // the client will nerver make it... m_ui.StopToolButton->setEnabled(true); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; m_iStatusBlink = 0; // Reset (yet again) the timer counters... m_iStartDelay = 1 + (m_preset.iStartDelay * 1000); m_iTimerDelay = 0; m_iJackRefresh = 0; } // Start our jack audio control client... bool qjackctlMainForm::startJackClient ( bool bDetach ) { // If can't be already started, are we? if (m_pJackClient) return true; // Have it a setup? if (m_pSetup == NULL) return false; // Time to (re)load current preset aliases? if (m_pConnectionsForm && !m_pConnectionsForm->loadAliases()) return false; // Make sure all status(es) will be updated ASAP. m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; m_iStatusBlink = 0; // Are we about to start detached? if (bDetach) { // To fool timed client initialization delay. m_iTimerDelay += (m_iStartDelay + 1); // Refresh status (with dashes?) refreshStatus(); } // Create the jack client handle, using a distinct identifier (PID?) const char *pszClientName = "qjackctl"; jack_status_t status = JackFailure; if (m_pSetup->sServerName.isEmpty()) { m_pJackClient = jack_client_open(pszClientName, JackNoStartServer, &status); } else { m_pJackClient = jack_client_open(pszClientName, jack_options_t(JackNoStartServer | JackServerName), &status, m_pSetup->sServerName.toUtf8().constData()); } if (m_pJackClient == NULL) { if (!bDetach) { QStringList errs; if (status & JackFailure) errs << tr("Overall operation failed."); if (status & JackInvalidOption) errs << tr("Invalid or unsupported option."); if (status & JackNameNotUnique) errs << tr("Client name not unique."); if (status & JackServerStarted) errs << tr("Server is started."); if (status & JackServerFailed) errs << tr("Unable to connect to server."); if (status & JackServerError) errs << tr("Server communication error."); if (status & JackNoSuchClient) errs << tr("Client does not exist."); if (status & JackLoadFailure) errs << tr("Unable to load internal client."); if (status & JackInitFailure) errs << tr("Unable to initialize client."); if (status & JackShmFailure) errs << tr("Unable to access shared memory."); if (status & JackVersionError) errs << tr("Client protocol version mismatch."); appendMessagesError( tr("Could not connect to JACK server as client.\n" "- %1\nPlease check the messages window for more info.") .arg(errs.join("\n- "))); } return false; } // Set notification callbacks. jack_set_graph_order_callback(m_pJackClient, qjackctl_graph_order_callback, this); jack_set_port_registration_callback(m_pJackClient, qjackctl_port_registration_callback, this); jack_set_xrun_callback(m_pJackClient, qjackctl_xrun_callback, this); jack_set_buffer_size_callback(m_pJackClient, qjackctl_buffer_size_callback, this); jack_on_shutdown(m_pJackClient, qjackctl_on_shutdown, this); // First knowledge about buffer size. g_nframes = jack_get_buffer_size(m_pJackClient); // Reconstruct our connections and session... if (m_pConnectionsForm) { m_pConnectionsForm->stabilizeAudio(true); m_pConnectionsForm->stabilizeMidi(true); } if (m_pSessionForm) m_pSessionForm->stabilizeForm(true); // 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; QFile file(sFilename); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { QTextStream(&file) << sJackCmdLine << endl; file.close(); appendMessagesColor( tr("Server configuration saved to \"%1\".") .arg(sFilename), "#999933"); } } // Do not forget to reset XRUN stats variables. if (!bDetach) resetXrunStats(); else // We'll flag that we've been detached! m_bJackDetach = true; // Activate us as a client... jack_activate(m_pJackClient); // Remember to schedule an initial connection refreshment. refreshConnections(); // All displays are highlighted from now on. QPalette pal; pal.setColor(QPalette::Foreground, Qt::yellow); m_ui.ServerStateTextLabel->setPalette(pal); m_ui.DspLoadTextLabel->setPalette(pal); m_ui.ServerModeTextLabel->setPalette(pal); pal.setColor(QPalette::Foreground, Qt::darkYellow); m_ui.SampleRateTextLabel->setPalette(pal); pal.setColor(QPalette::Foreground, Qt::green); m_ui.TimeDisplayTextLabel->setPalette(pal); m_ui.TransportStateTextLabel->setPalette(pal); m_ui.TransportBPMTextLabel->setPalette(pal); m_ui.TransportTimeTextLabel->setPalette(pal); // Whether we've started detached, just change active status. updateServerState(m_bJackDetach ? QJACKCTL_ACTIVE : QJACKCTL_STARTED); m_ui.StopToolButton->setEnabled(true); // Log success here. appendMessages(tr("Client activated.")); // Do we have any post-startup scripting?... // (only if we're not a detached client) if (!bDetach && !m_bJackDetach) { if (m_pSetup->bPostStartupScript && !m_pSetup->sPostStartupScriptShell.isEmpty()) { shellExecute(m_pSetup->sPostStartupScriptShell, tr("Post-startup script..."), tr("Post-startup script terminated")); } } // Have we an initial command-line to start away? if (!m_pSetup->sCmdLine.isEmpty()) { // Run it dettached... shellExecute(m_pSetup->sCmdLine, tr("Command line argument..."), tr("Command line argument started")); // And reset it forever more... m_pSetup->sCmdLine.clear(); } // OK, we're at it! return true; } // Stop jack audio client... void qjackctlMainForm::stopJackClient (void) { // Deactivate and close us as a client... if (m_pJackClient) { jack_deactivate(m_pJackClient); jack_client_close(m_pJackClient); m_pJackClient = NULL; // Log deactivation here. appendMessages(tr("Client deactivated.")); } // Reset command-line configuration info. m_sJackCmdLine.clear(); // Clear out the connections and session... if (m_pConnectionsForm) { m_pConnectionsForm->stabilizeAudio(false); m_pConnectionsForm->stabilizeMidi(false); } if (m_pSessionForm) m_pSessionForm->stabilizeForm(false); // Displays are dimmed again. QPalette pal; pal.setColor(QPalette::Foreground, Qt::darkYellow); m_ui.ServerModeTextLabel->setPalette(pal); m_ui.DspLoadTextLabel->setPalette(pal); m_ui.SampleRateTextLabel->setPalette(pal); pal.setColor(QPalette::Foreground, Qt::darkGreen); m_ui.TimeDisplayTextLabel->setPalette(pal); m_ui.TransportStateTextLabel->setPalette(pal); m_ui.TransportBPMTextLabel->setPalette(pal); m_ui.TransportTimeTextLabel->setPalette(pal); // Refresh jack client statistics explicitly. refreshXrunStats(); } // JACK client accessor. jack_client_t *qjackctlMainForm::jackClient (void) const { return (m_bJackShutdown ? NULL : m_pJackClient); } // ALSA sequencer client accessor. snd_seq_t *qjackctlMainForm::alsaSeq (void) const { return m_pAlsaSeq; } // Rebuild all patchbay items. void qjackctlMainForm::refreshConnections (void) { refreshJackConnections(); refreshAlsaConnections(); } void qjackctlMainForm::refreshJackConnections (void) { #if 0 // Hack this as for a while... if (m_pConnectionsForm && m_iJackRefresh == 0) { m_pConnectionsForm->stabilizeAudio(false); m_pConnectionsForm->stabilizeMidi(false); } #endif // Just increment our intentions; it will be deferred // to be executed just on timer slot processing... m_iJackRefresh++; } void qjackctlMainForm::refreshAlsaConnections (void) { #if 0 // Hack this as for a while... if (m_pConnectionsForm && m_iAlsaRefresh == 0) m_pConnectionsForm->stabilizeAlsa(false); #endif // Just increment our intentions; it will be deferred // to be executed just on timer slot processing... m_iAlsaRefresh++; } void qjackctlMainForm::refreshPatchbay (void) { // Just increment our intentions; it will be deferred // to be executed just on timer slot processing... m_iPatchbayRefresh++; } // Main form visibility requester slot. void qjackctlMainForm::toggleMainForm (void) { m_pSetup->saveWidgetGeometry(this, true); if (isVisible()) { if (m_pSetup->bSystemTray && m_pSystemTray) { // Hide away from sight, if not active... if (isActiveWindow()) { hide(); } else { raise(); activateWindow(); } } else { // Minimize (iconify) normally. showMinimized(); } } else { show(); raise(); activateWindow(); } } // Message log/status form requester slot. void qjackctlMainForm::toggleMessagesStatusForm (void) { if (m_pMessagesStatusForm) { m_pSetup->saveWidgetGeometry(m_pMessagesStatusForm); if (m_pMessagesStatusForm->isVisible()) { m_pMessagesStatusForm->hide(); } else { m_pMessagesStatusForm->show(); m_pMessagesStatusForm->raise(); m_pMessagesStatusForm->activateWindow(); } } } void qjackctlMainForm::toggleMessagesForm (void) { if (m_pMessagesStatusForm) { int iTabPage = m_pMessagesStatusForm->tabPage(); m_pMessagesStatusForm->setTabPage( int(qjackctlMessagesStatusForm::MessagesTab)); if (m_pMessagesStatusForm->isVisible() && iTabPage != m_pMessagesStatusForm->tabPage()) return; } toggleMessagesStatusForm(); } void qjackctlMainForm::toggleStatusForm (void) { if (m_pMessagesStatusForm) { int iTabPage = m_pMessagesStatusForm->tabPage(); m_pMessagesStatusForm->setTabPage( int(qjackctlMessagesStatusForm::StatusTab)); if (m_pMessagesStatusForm->isVisible() && iTabPage != m_pMessagesStatusForm->tabPage()) return; } toggleMessagesStatusForm(); } // Session form requester slot. void qjackctlMainForm::toggleSessionForm (void) { if (m_pSessionForm) { m_pSetup->saveWidgetGeometry(m_pSessionForm); m_pSessionForm->stabilizeForm(m_pJackClient != NULL); if (m_pSessionForm->isVisible()) { m_pSessionForm->hide(); } else { m_pSessionForm->show(); m_pSessionForm->raise(); m_pSessionForm->activateWindow(); } } } // Connections form requester slot. void qjackctlMainForm::toggleConnectionsForm (void) { 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); if (m_pConnectionsForm->isVisible()) { m_pConnectionsForm->hide(); } else { m_pConnectionsForm->show(); m_pConnectionsForm->raise(); m_pConnectionsForm->activateWindow(); } } } // Patchbay form requester slot. void qjackctlMainForm::togglePatchbayForm (void) { if (m_pPatchbayForm) { m_pSetup->saveWidgetGeometry(m_pPatchbayForm); if (m_pPatchbayForm->isVisible()) { m_pPatchbayForm->hide(); } else { m_pPatchbayForm->show(); m_pPatchbayForm->raise(); m_pPatchbayForm->activateWindow(); } } } // Setup dialog requester slot. void qjackctlMainForm::showSetupForm (void) { qjackctlSetupForm *pSetupForm = new qjackctlSetupForm(this); if (pSetupForm) { // Check out some initial nullities(tm)... if (m_pSetup->sMessagesFont.isEmpty() && m_pMessagesStatusForm) m_pSetup->sMessagesFont = m_pMessagesStatusForm->messagesFont().toString(); if (m_pSetup->sDisplayFont1.isEmpty()) m_pSetup->sDisplayFont1 = m_ui.TimeDisplayTextLabel->font().toString(); if (m_pSetup->sDisplayFont2.isEmpty()) m_pSetup->sDisplayFont2 = m_ui.ServerStateTextLabel->font().toString(); if (m_pSetup->sConnectionsFont.isEmpty() && m_pConnectionsForm) m_pSetup->sConnectionsFont = m_pConnectionsForm->connectionsFont().toString(); // To track down deferred or immediate changes. bool bOldMessagesLog = m_pSetup->bMessagesLog; QString sOldMessagesLogPath = m_pSetup->sMessagesLogPath; QString sOldMessagesFont = m_pSetup->sMessagesFont; QString sOldDisplayFont1 = m_pSetup->sDisplayFont1; QString sOldDisplayFont2 = m_pSetup->sDisplayFont2; QString sOldConnectionsFont = m_pSetup->sConnectionsFont; int iOldConnectionsIconSize = m_pSetup->iConnectionsIconSize; int iOldJackClientPortAlias = m_pSetup->iJackClientPortAlias; int iOldTimeDisplay = m_pSetup->iTimeDisplay; int iOldTimeFormat = m_pSetup->iTimeFormat; bool bOldDisplayEffect = m_pSetup->bDisplayEffect; bool bOldActivePatchbay = m_pSetup->bActivePatchbay; QString sOldActivePatchbayPath = m_pSetup->sActivePatchbayPath; bool bOldStdoutCapture = m_pSetup->bStdoutCapture; bool bOldKeepOnTop = m_pSetup->bKeepOnTop; bool bOldSystemTray = m_pSetup->bSystemTray; bool bOldDelayedSetup = m_pSetup->bDelayedSetup; int bOldMessagesLimit = m_pSetup->bMessagesLimit; int iOldMessagesLimitLines = m_pSetup->iMessagesLimitLines; bool bOldBezierLines = m_pSetup->bBezierLines; bool bOldAlsaSeqEnabled = m_pSetup->bAlsaSeqEnabled; bool bOldDBusEnabled = m_pSetup->bDBusEnabled; bool bOldAliasesEnabled = m_pSetup->bAliasesEnabled; bool bOldAliasesEditing = m_pSetup->bAliasesEditing; bool bOldLeftButtons = m_pSetup->bLeftButtons; bool bOldRightButtons = m_pSetup->bRightButtons; bool bOldTransportButtons = m_pSetup->bTransportButtons; bool bOldTextLabels = m_pSetup->bTextLabels; int iOldBaseFontSize = m_pSetup->iBaseFontSize; // Load the current setup settings. pSetupForm->setup(m_pSetup); // Show the setup dialog... if (pSetupForm->exec()) { // Check wheather something immediate has changed. if (( bOldMessagesLog && !m_pSetup->bMessagesLog) || (!bOldMessagesLog && m_pSetup->bMessagesLog) || (sOldMessagesLogPath != m_pSetup->sMessagesLogPath)) m_pMessagesStatusForm->setLogging( m_pSetup->bMessagesLog, m_pSetup->sMessagesLogPath); if (( bOldBezierLines && !m_pSetup->bBezierLines) || (!bOldBezierLines && m_pSetup->bBezierLines)) updateBezierLines(); if (( bOldDisplayEffect && !m_pSetup->bDisplayEffect) || (!bOldDisplayEffect && m_pSetup->bDisplayEffect)) updateDisplayEffect(); if (iOldJackClientPortAlias != m_pSetup->iJackClientPortAlias) updateJackClientPortAlias(); if (iOldConnectionsIconSize != m_pSetup->iConnectionsIconSize) updateConnectionsIconSize(); if (sOldConnectionsFont != m_pSetup->sConnectionsFont) updateConnectionsFont(); if (sOldMessagesFont != m_pSetup->sMessagesFont) updateMessagesFont(); if (( bOldMessagesLimit && !m_pSetup->bMessagesLimit) || (!bOldMessagesLimit && m_pSetup->bMessagesLimit) || (iOldMessagesLimitLines != m_pSetup->iMessagesLimitLines)) updateMessagesLimit(); if (sOldDisplayFont1 != m_pSetup->sDisplayFont1 || sOldDisplayFont2 != m_pSetup->sDisplayFont2) updateTimeDisplayFonts(); if (iOldTimeDisplay |= m_pSetup->iTimeDisplay) updateTimeDisplayToolTips(); if (iOldTimeFormat |= m_pSetup->iTimeFormat) updateTimeFormat(); if ((!bOldActivePatchbay && m_pSetup->bActivePatchbay) || (sOldActivePatchbayPath != m_pSetup->sActivePatchbayPath)) updateActivePatchbay(); if (( bOldSystemTray && !m_pSetup->bSystemTray) || (!bOldSystemTray && m_pSetup->bSystemTray)) updateSystemTray(); if (( bOldAliasesEnabled && !m_pSetup->bAliasesEnabled) || (!bOldAliasesEnabled && m_pSetup->bAliasesEnabled) || ( bOldAliasesEditing && !m_pSetup->bAliasesEditing) || (!bOldAliasesEditing && m_pSetup->bAliasesEditing)) updateAliases(); if (( bOldLeftButtons && !m_pSetup->bLeftButtons) || (!bOldLeftButtons && m_pSetup->bLeftButtons) || ( bOldRightButtons && !m_pSetup->bRightButtons) || (!bOldRightButtons && m_pSetup->bRightButtons) || ( bOldTransportButtons && !m_pSetup->bTransportButtons) || (!bOldTransportButtons && m_pSetup->bTransportButtons) || ( bOldTextLabels && !m_pSetup->bTextLabels) || (!bOldTextLabels && m_pSetup->bTextLabels)) updateButtons(); // 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) || ( bOldDelayedSetup && !m_pSetup->bDelayedSetup) || (!bOldDelayedSetup && m_pSetup->bDelayedSetup) || ( bOldAlsaSeqEnabled && !m_pSetup->bAlsaSeqEnabled) || (!bOldAlsaSeqEnabled && m_pSetup->bAlsaSeqEnabled) || ( bOldDBusEnabled && !m_pSetup->bDBusEnabled) || (!bOldDBusEnabled && m_pSetup->bDBusEnabled) || (iOldBaseFontSize != m_pSetup->iBaseFontSize)) showDirtySetupWarning(); // If server is currently running, warn user... showDirtySettingsWarning(); } delete pSetupForm; } } // About dialog requester slot. void qjackctlMainForm::showAboutForm (void) { qjackctlAboutForm(this).exec(); } // Transport rewind. void qjackctlMainForm::transportRewind (void) { #ifdef CONFIG_JACK_TRANSPORT if (m_pJackClient) { jack_transport_locate(m_pJackClient, 0); // Log this here. appendMessages(tr("Transport rewind.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } #endif } // Transport backward. void qjackctlMainForm::transportBackward (void) { #ifdef CONFIG_JACK_TRANSPORT if (m_pJackClient) { jack_position_t tpos; jack_transport_query(m_pJackClient, &tpos); float rate = float(tpos.frame_rate); float tloc = ((float(tpos.frame) / rate) - m_fSkipAccel) * rate; if (tloc < 0.0f) tloc = 0.0f; jack_transport_locate(m_pJackClient, (jack_nframes_t) tloc); // Log this here (if on initial toggle). if (m_fSkipAccel < 1.1f) appendMessages(tr("Transport backward.")); // Take care of backward acceleration... if (m_ui.BackwardToolButton->isDown() && m_fSkipAccel < 60.0) m_fSkipAccel *= 1.1f; // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } #endif } // Transport toggle (start/stop) void qjackctlMainForm::transportPlay ( bool bOn ) { if (m_iTransportPlay > 0) return; if (bOn) transportStart(); else transportStop(); } // Transport start (play) void qjackctlMainForm::transportStart (void) { #ifdef CONFIG_JACK_TRANSPORT if (m_pJackClient) { jack_transport_start(m_pJackClient); updateStatusItem(STATUS_TRANSPORT_STATE, tr("Starting")); // Log this here. appendMessages(tr("Transport start.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } #endif } // Transport stop (pause). void qjackctlMainForm::transportStop (void) { #ifdef CONFIG_JACK_TRANSPORT if (m_pJackClient) { jack_transport_stop(m_pJackClient); updateStatusItem(STATUS_TRANSPORT_STATE, tr("Stopping")); // Log this here. appendMessages(tr("Transport stop.")); // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } #endif } // Transport forward. void qjackctlMainForm::transportForward (void) { #ifdef CONFIG_JACK_TRANSPORT if (m_pJackClient) { jack_position_t tpos; jack_transport_query(m_pJackClient, &tpos); float rate = float(tpos.frame_rate); float tloc = ((float(tpos.frame) / rate) + m_fSkipAccel) * rate; if (tloc < 0.0f) tloc = 0.0f; jack_transport_locate(m_pJackClient, (jack_nframes_t) tloc); // Log this here. if (m_fSkipAccel < 1.1f) appendMessages(tr("Transport forward.")); // Take care of forward acceleration... if (m_ui.ForwardToolButton->isDown() && m_fSkipAccel < 60.0f) m_fSkipAccel *= 1.1f; // Make sure all status(es) will be updated ASAP... m_iStatusRefresh += QJACKCTL_STATUS_CYCLE; } #endif } // Almost-complete running status refresher. void qjackctlMainForm::refreshStatus (void) { const QString n = "--"; const QString b = "-.-.---"; const QString sStopped = tr("Stopped"); m_iStatusRefresh++; if (m_pJackClient) { const QString s = " "; #ifdef CONFIG_JACK_TRANSPORT QString sText = n; jack_position_t tpos; jack_transport_state_t tstate = jack_transport_query(m_pJackClient, &tpos); bool bPlaying = (tstate == JackTransportRolling || tstate == JackTransportLooping); // Transport timecode position. // if (bPlaying) updateStatusItem(STATUS_TRANSPORT_TIME, formatTime(float(tpos.frame) / float(tpos.frame_rate))); // else // updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); // Transport barcode position (bar:beat.tick) if (tpos.valid & JackPositionBBT) { updateStatusItem(STATUS_TRANSPORT_BBT, QString().sprintf("%u.%u.%03u", tpos.bar, tpos.beat, tpos.tick)); updateStatusItem(STATUS_TRANSPORT_BPM, QString::number(tpos.beats_per_minute, 'g', 4)); } else { updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); } #endif // !CONFIG_JACK_TRANSPORT // Less frequent status items update... if (m_iStatusRefresh >= QJACKCTL_STATUS_CYCLE) { m_iStatusRefresh = 0; float fDspLoad = jack_cpu_load(m_pJackClient); const char f = (fDspLoad > 0.1f ? 'f' : 'g'); // format const int p = (fDspLoad > 1.0f ? 1 : 2 ); // precision if (m_pSystemTray) { if (m_iXrunCount > 0) { m_pSystemTray->setToolTip(tr("%1 (%2%)") .arg(windowTitle()) .arg(fDspLoad, 0, f, p)); } else { m_pSystemTray->setToolTip(tr("%1 (%2%, %3 xruns)") .arg(windowTitle()) .arg(fDspLoad, 0, f, p) .arg(m_iXrunCount)); } } 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)); // Blink server mode indicator?... if (m_pSetup && m_pSetup->bDisplayBlink) { QPalette pal; pal.setColor(QPalette::Foreground, (++m_iStatusBlink % 2) ? Qt::darkYellow: Qt::yellow); m_ui.ServerModeTextLabel->setPalette(pal); } #ifdef CONFIG_JACK_REALTIME 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); m_ui.ServerModeTextLabel->setText(n); #endif // !CONFIG_JACK_REALTIME #ifdef CONFIG_JACK_TRANSPORT switch (tstate) { case JackTransportStarting: sText = tr("Starting"); break; case JackTransportRolling: sText = tr("Rolling"); break; case JackTransportLooping: sText = tr("Looping"); break; case JackTransportStopped: default: sText = sStopped; break; } updateStatusItem(STATUS_TRANSPORT_STATE, sText); m_ui.RewindToolButton->setEnabled(tpos.frame > 0); m_ui.BackwardToolButton->setEnabled(tpos.frame > 0); m_ui.PlayToolButton->setEnabled(true); m_ui.PauseToolButton->setEnabled(bPlaying); m_ui.ForwardToolButton->setEnabled(true); transportPlayStatus(bPlaying); if (!m_ui.BackwardToolButton->isDown() && !m_ui.ForwardToolButton->isDown()) m_fSkipAccel = 1.0; #else updateStatusItem(STATUS_TRANSPORT_STATE, n); 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); updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); #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 // Check if we're have some XRUNs to report... if (m_iXrunSkips > 0) { // Maybe we've skipped some... if (m_iXrunSkips > 1) { appendMessagesColor(tr("XRUN callback (%1 skipped).") .arg(m_iXrunSkips - 1), "#cc99cc"); } // Reset skip count. m_iXrunSkips = 0; // Highlight the (new) status... refreshXrunStats(); } } } // 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); updateStatusItem(STATUS_SAMPLE_RATE, n); updateStatusItem(STATUS_BUFFER_SIZE, n); updateStatusItem(STATUS_REALTIME, n); m_ui.ServerModeTextLabel->setText(n); updateStatusItem(STATUS_TRANSPORT_STATE, n); updateStatusItem(STATUS_TRANSPORT_TIME, m_sTimeDashes); updateStatusItem(STATUS_TRANSPORT_BBT, b); updateStatusItem(STATUS_TRANSPORT_BPM, n); 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); } // Elapsed times should be rigorous... updateElapsedTimes(); } // Status item updater. void qjackctlMainForm::updateStatusItem( int iStatusItem, const QString& sText ) { switch (iStatusItem) { case STATUS_SERVER_STATE: m_ui.ServerStateTextLabel->setText(sText); break; case STATUS_DSP_LOAD: m_ui.DspLoadTextLabel->setText(sText); break; case STATUS_SAMPLE_RATE: m_ui.SampleRateTextLabel->setText(sText); break; case STATUS_XRUN_COUNT: m_ui.XrunCountTextLabel->setText(sText); break; case STATUS_TRANSPORT_STATE: m_ui.TransportStateTextLabel->setText(sText); break; case STATUS_TRANSPORT_TIME: if (m_pSetup->iTimeDisplay == DISPLAY_TRANSPORT_TIME) m_ui.TimeDisplayTextLabel->setText(sText); else m_ui.TransportTimeTextLabel->setText(sText); break; case STATUS_TRANSPORT_BBT: if (m_pSetup->iTimeDisplay == DISPLAY_TRANSPORT_BBT) m_ui.TimeDisplayTextLabel->setText(sText); else if (m_pSetup->iTimeDisplay == DISPLAY_TRANSPORT_TIME) m_ui.TransportTimeTextLabel->setText(sText); break; case STATUS_TRANSPORT_BPM: m_ui.TransportBPMTextLabel->setText(sText); break; } if (m_pMessagesStatusForm) m_pMessagesStatusForm->updateStatusItem(iStatusItem, sText); } // Main window caption title and system tray icon and tooltip update. void qjackctlMainForm::updateTitleStatus (void) { QString sTitle; if (!m_pSetup->bLeftButtons || !m_pSetup->bRightButtons || !m_pSetup->bTextLabels) { sTitle = QJACKCTL_SUBTITLE0; } else { sTitle = QJACKCTL_SUBTITLE1; } sTitle += " [" + m_pSetup->sDefPreset + "] "; QString sState; QString sDots = "."; const QString s = ".."; switch (m_iServerState) { case QJACKCTL_STARTING: sState = tr("Starting"); sDots += s; break; case QJACKCTL_STARTED: sState = tr("Started"); break; case QJACKCTL_STOPPING: sState = tr("Stopping"); sDots += s; break; case QJACKCTL_STOPPED: sState = tr("Stopped"); break; case QJACKCTL_ACTIVE: sState = tr("Active"); break; case QJACKCTL_ACTIVATING: sState = tr("Activating"); sDots += s; break; case QJACKCTL_INACTIVE: default: sState = tr("Inactive"); break; } sTitle += sState + sDots; setWindowTitle(sTitle); updateStatusItem(STATUS_SERVER_STATE, sState); if (m_pSystemTray) { switch (m_iServerState) { case QJACKCTL_STARTING: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xstarting1.png")); break; case QJACKCTL_STARTED: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xstarted1.png")); break; case QJACKCTL_STOPPING: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xstopping1.png")); break; case QJACKCTL_STOPPED: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xstopped1.png")); break; case QJACKCTL_ACTIVE: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xactive1.png")); break; case QJACKCTL_ACTIVATING: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xactivating1.png")); break; case QJACKCTL_INACTIVE: default: m_pSystemTray->setPixmapOverlay(QPixmap(":/images/xinactive1.png")); break; } m_pSystemTray->setToolTip(sTitle); } sTitle = m_pSetup->sServerName; if (sTitle.isEmpty()) sTitle = ::getenv("JACK_DEFAULT_SERVER"); if (sTitle.isEmpty()) sTitle = m_pSetup->sDefPresetName; updateStatusItem(STATUS_SERVER_NAME, sTitle); } // Main server state status update helper. void qjackctlMainForm::updateServerState ( int iServerState ) { // Just set the new server state. m_iServerState = iServerState; // Now's time to update main window // caption title and status immediately. updateTitleStatus(); } // System tray master switcher. void qjackctlMainForm::updateSystemTray (void) { #ifdef CONFIG_SYSTEM_TRAY if (!m_pSetup->bSystemTray && m_pSystemTray) { // Strange enough, this would close the application too. // m_pSystemTray->close(); delete m_pSystemTray; m_pSystemTray = NULL; } if (m_pSetup->bSystemTray && m_pSystemTray == NULL) { m_pSystemTray = new qjackctlSystemTray(this); QObject::connect(m_pSystemTray, SIGNAL(clicked()), SLOT(toggleMainForm())); QObject::connect(m_pSystemTray, SIGNAL(middleClicked()), SLOT(resetXrunStats())); QObject::connect(m_pSystemTray, SIGNAL(contextMenuRequested(const QPoint &)), SLOT(systemTrayContextMenu(const QPoint &))); m_pSystemTray->show(); } else { // Make sure the main widget is visible. show(); raise(); activateWindow(); } #endif } // System tray context menu request slot. void qjackctlMainForm::systemTrayContextMenu ( const QPoint& pos ) { QMenu menu(this); QAction *pAction; QString sHideMinimize = (m_pSetup->bSystemTray && m_pSystemTray ? tr("&Hide") : tr("Mi&nimize")); QString sShowRestore = (m_pSetup->bSystemTray && m_pSystemTray ? tr("S&how") : tr("Rest&ore")); pAction = menu.addAction(isVisible() ? sHideMinimize : sShowRestore, this, SLOT(toggleMainForm())); menu.addSeparator(); if (m_pJackClient == NULL) { pAction = menu.addAction(QIcon(":/images/start1.png"), tr("&Start"), this, SLOT(startJack())); } else { pAction = menu.addAction(QIcon(":/images/stop1.png"), tr("&Stop"), this, SLOT(stopJack())); } pAction = menu.addAction(QIcon(":/images/reset1.png"), tr("&Reset"), this, SLOT(resetXrunStats())); // pAction->setEnabled(m_pJackClient != NULL); menu.addSeparator(); // Construct the actual presets menu, // overriding the last one, if any... QMenu *pPresetsMenu = menu.addMenu(tr("&Presets")); // Assume QStringList iteration follows item index order (0,1,2...) int iPreset = 0; QStringListIterator iter(m_pSetup->presets); while (iter.hasNext()) { const QString& sPreset = iter.next(); pAction = pPresetsMenu->addAction(sPreset); pAction->setCheckable(true); pAction->setChecked(sPreset == m_pSetup->sDefPreset); pAction->setData(iPreset); iPreset++; } // Default preset always present, and has invalid index parameter (-1)... if (iPreset > 0) pPresetsMenu->addSeparator(); pAction = pPresetsMenu->addAction(m_pSetup->sDefPresetName); pAction->setCheckable(true); pAction->setChecked(m_pSetup->sDefPresetName == m_pSetup->sDefPreset); pAction->setData(-1); QObject::connect(pPresetsMenu, SIGNAL(triggered(QAction*)), SLOT(activatePresetsMenu(QAction*))); menu.addSeparator(); if (m_pSessionForm) { bool bEnabled = (m_pJackClient != NULL); const QString sTitle = tr("S&ession"); const QIcon iconSession(":/images/session1.png"); QMenu *pSessionMenu = menu.addMenu(sTitle); pSessionMenu->setIcon(iconSession); pAction = pSessionMenu->addAction(m_pSessionForm->isVisible() ? tr("&Hide") : tr("S&how"), this, SLOT(toggleSessionForm())); pSessionMenu->addSeparator(); pAction = pSessionMenu->addAction(QIcon(":/images/open1.png"), tr("&Load..."), m_pSessionForm, SLOT(loadSession())); pAction->setEnabled(bEnabled); QMenu *pRecentMenu = m_pSessionForm->recentMenu(); pAction = pSessionMenu->addMenu(pRecentMenu); pAction->setEnabled(m_pJackClient != NULL && !pRecentMenu->isEmpty()); pSessionMenu->addSeparator(); pAction = pSessionMenu->addAction(QIcon(":/images/save1.png"), tr("&Save..."), m_pSessionForm, SLOT(saveSessionSave())); pAction->setEnabled(bEnabled); #ifdef CONFIG_JACK_SESSION pAction = pSessionMenu->addAction( tr("Save and &Quit..."), m_pSessionForm, SLOT(saveSessionSaveAndQuit())); pAction->setEnabled(bEnabled); pAction = pSessionMenu->addAction( tr("Save &Template..."), m_pSessionForm, SLOT(saveSessionSaveTemplate())); pAction->setEnabled(bEnabled); #endif pSessionMenu->addSeparator(); pAction = pSessionMenu->addAction( tr("&Versioning"), m_pSessionForm, SLOT(saveSessionVersion(bool))); pAction->setCheckable(true); pAction->setChecked(m_pSessionForm->isSaveSessionVersion()); pAction->setEnabled(bEnabled); pSessionMenu->addSeparator(); pAction = pSessionMenu->addAction(QIcon(":/images/refresh1.png"), tr("Re&fresh"), m_pSessionForm, SLOT(updateSession())); pAction->setEnabled(bEnabled); } pAction = 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"), 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"), tr("&Connections"), this, SLOT(toggleConnectionsForm())); pAction->setCheckable(true); pAction->setChecked(m_pConnectionsForm && m_pConnectionsForm->isVisible()); pAction = menu.addAction(QIcon(":/images/patchbay1.png"), tr("Patch&bay"), this, SLOT(togglePatchbayForm())); pAction->setCheckable(true); pAction->setChecked(m_pPatchbayForm && m_pPatchbayForm->isVisible()); menu.addSeparator(); QMenu *pTransportMenu = menu.addMenu(tr("&Transport")); pAction = pTransportMenu->addAction(QIcon(":/images/rewind1.png"), tr("&Rewind"), this, SLOT(transportRewind())); pAction->setEnabled(m_ui.RewindToolButton->isEnabled()); // pAction = pTransportMenu->addAction(QIcon(":/images/backward1.png"), // tr("&Backward"), this, SLOT(transportBackward())); // pAction->setEnabled(m_ui.BackwardToolButton->isEnabled()); pAction = pTransportMenu->addAction(QIcon(":/images/play1.png"), tr("&Play"), this, SLOT(transportStart())); pAction->setEnabled(!m_ui.PlayToolButton->isChecked()); pAction = pTransportMenu->addAction(QIcon(":/images/pause1.png"), tr("Pa&use"), this, SLOT(transportStop())); pAction->setEnabled(m_ui.PauseToolButton->isEnabled()); // pAction = pTransportMenu->addAction(QIcon(":/images/forward1.png"), // tr("&Forward"), this, SLOT(transportForward())); // pAction->setEnabled(m_ui.ForwardToolButton->isEnabled()); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/setup1.png"), tr("Set&up..."), this, SLOT(showSetupForm())); if (!m_pSetup->bRightButtons || !m_pSetup->bTransportButtons) { pAction = menu.addAction(QIcon(":/images/about1.png"), tr("Ab&out..."), this, SLOT(showAboutForm())); } menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/quit1.png"), tr("&Quit"), this, SLOT(quitMainForm())); menu.exec(pos); } // Server settings change warning. void qjackctlMainForm::showDirtySettingsWarning (void) { // If client service is currently running, // prompt the effective warning... if (m_pJackClient) { const QString& sTitle = tr("Warning") + " - " QJACKCTL_SUBTITLE1; const QString& sText = tr("Server settings will be only effective after\n" "restarting the JACK audio server."); #ifdef CONFIG_SYSTEM_TRAY #ifdef QJACKCTL_QT4_SYSTEM_TRAY #if QT_VERSION >= 0x040300 if (m_pSetup->bSystemTray && m_pSystemTray && QSystemTrayIcon::supportsMessages()) { m_pSystemTray->showMessage(sTitle, sText, QSystemTrayIcon::Warning); } else #endif #endif #endif QMessageBox::warning(this, sTitle, sText); } // Otherwise, it will be just as convenient to update status... else updateTitleStatus(); } // Setup otions change warning. void qjackctlMainForm::showDirtySetupWarning (void) { const QString& sTitle = tr("Information") + " - " QJACKCTL_SUBTITLE1; const QString& sText = tr("Some settings will be only effective\n" "the next time you start this program."); #ifdef CONFIG_SYSTEM_TRAY #ifdef QJACKCTL_QT4_SYSTEM_TRAY #if QT_VERSION >= 0x040300 if (m_pSetup->bSystemTray && m_pSystemTray && QSystemTrayIcon::supportsMessages()) { m_pSystemTray->showMessage(sTitle, sText, QSystemTrayIcon::Information); } else #endif #endif #endif QMessageBox::information(this, sTitle, sText); } // Select the current default preset (by name from context menu). void qjackctlMainForm::activatePresetsMenu ( QAction *pAction ) { activatePreset(pAction->data().toInt()); } // Select the current default preset (by name). void qjackctlMainForm::activatePreset ( const QString& sPreset ) { activatePreset(m_pSetup->presets.indexOf(sPreset)); } // Select the current default preset (by index). void qjackctlMainForm::activatePreset ( int iPreset ) { if (m_pConnectionsForm && !m_pConnectionsForm->queryClose()) return; if (iPreset >= 0 && iPreset < m_pSetup->presets.count()) m_pSetup->sDefPreset = m_pSetup->presets[iPreset]; else m_pSetup->sDefPreset = m_pSetup->sDefPresetName; showDirtySettingsWarning(); } // Close main form slot. void qjackctlMainForm::quitMainForm (void) { // Flag that we're quitting explicitly. m_bQuitForce = true; // And then, do the closing dance. close(); } // Context menu event handler. void qjackctlMainForm::contextMenuEvent ( QContextMenuEvent *pEvent ) { // We'll just show up the usual system tray menu. systemTrayContextMenu(pEvent->globalPos()); } void qjackctlMainForm::mousePressEvent(QMouseEvent *pMouseEvent) { if (pMouseEvent->button() == Qt::MidButton && m_ui.StatusDisplayFrame->geometry().contains(pMouseEvent->pos())) { resetXrunStats(); } } #ifdef CONFIG_DBUS // D-BUS: Set/reset parameter values from current selected preset options. void qjackctlMainForm::setDBusParameters (void) { // Set configuration parameters... bool bDummy = (m_preset.sDriver == "dummy"); bool bSun = (m_preset.sDriver == "sun"); bool bOss = (m_preset.sDriver == "oss"); bool bAlsa = (m_preset.sDriver == "alsa"); bool bPortaudio = (m_preset.sDriver == "portaudio"); bool bCoreaudio = (m_preset.sDriver == "coreaudio"); bool bFreebob = (m_preset.sDriver == "freebob"); bool bFirewire = (m_preset.sDriver == "firewire"); bool bNet = (m_preset.sDriver == "net" || m_preset.sDriver == "netone"); setDBusEngineParameter("name", m_pSetup->sServerName, !m_pSetup->sServerName.isEmpty()); setDBusEngineParameter("verbose", m_preset.bVerbose); setDBusEngineParameter("realtime", m_preset.bRealtime); setDBusEngineParameter("realtime-priority", m_preset.iPriority, m_preset.bRealtime && m_preset.iPriority > 0); // setDBusEngineParameter("port-max", // m_preset.iPortMax, // m_preset.iPortMax > 0); 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; if (bAlsa && sInterface.isEmpty()) sInterface = "hw:0"; setDBusDriverParameter("device", sInterface); } if (bPortaudio) { setDBusDriverParameter("channel", (unsigned int) m_preset.iChan, m_preset.iChan > 0); } if (bCoreaudio || bFreebob || bFirewire) { setDBusDriverParameter("device", m_preset.sInterface, !m_preset.sInterface.isEmpty()); } if (!bNet) { setDBusDriverParameter("rate", (unsigned int) m_preset.iSampleRate, m_preset.iSampleRate > 0); setDBusDriverParameter("period", (unsigned int) m_preset.iFrames, m_preset.iFrames > 0); } if (bAlsa || bSun || bOss || bFreebob || bFirewire) { setDBusDriverParameter("nperiods", (unsigned int) m_preset.iPeriods, m_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); #ifdef CONFIG_JACK_MIDI setDBusDriverParameter("midi-driver", m_preset.sMidiDriver, !m_preset.sMidiDriver.isEmpty()); #endif } if (bAlsa || bPortaudio) { QString sInterface = m_preset.sInterface; if (bAlsa && sInterface.isEmpty()) sInterface = "hw:0"; QString sInDevice = m_preset.sInDevice; if (sInDevice.isEmpty()) sInDevice = sInterface; QString sOutDevice = m_preset.sOutDevice; if (sOutDevice.isEmpty()) sOutDevice = sInterface; switch (m_preset.iAudio) { case QJACKCTL_DUPLEX: setDBusDriverParameter("duplex", true); setDBusDriverParameter("capture", sInDevice); setDBusDriverParameter("playback", sOutDevice); break; case QJACKCTL_CAPTURE: resetDBusDriverParameter("duplex"); setDBusDriverParameter("capture", sInDevice); resetDBusDriverParameter("playback"); break; case QJACKCTL_PLAYBACK: resetDBusDriverParameter("duplex"); setDBusDriverParameter("playback", sOutDevice); resetDBusDriverParameter("capture"); break; } setDBusDriverParameter("inchannels", (unsigned int) m_preset.iInChannels, m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK); setDBusDriverParameter("outchannels", (unsigned int) m_preset.iOutChannels, m_preset.iOutChannels > 0 && m_preset.iAudio != QJACKCTL_CAPTURE); unsigned char dither = 0; switch (m_preset.iDither) { case 0: dither = 'n'; break; case 1: dither = 'r'; break; case 2: dither = 's'; break; case 3: dither = 't'; break; } setDBusDriverParameter("dither", QVariant::fromValue(dither), 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; 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; setDBusDriverParameter("playback", sOutDevice, !sOutDevice.isEmpty() && m_preset.iAudio != QJACKCTL_CAPTURE); setDBusDriverParameter("inchannels", (unsigned int) m_preset.iInChannels, m_preset.iInChannels > 0 && m_preset.iAudio != QJACKCTL_PLAYBACK); setDBusDriverParameter("outchannels", (unsigned int) m_preset.iOutChannels, m_preset.iOutChannels > 0 && m_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); 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"); } if (bDummy) { setDBusDriverParameter("wait", (unsigned int) m_preset.iWait, m_preset.iWait > 0); } if (bAlsa || bSun || bOss || bCoreaudio || bPortaudio || bFreebob) { setDBusDriverParameter("input-latency", (unsigned int) m_preset.iInLatency, m_preset.iInLatency > 0); setDBusDriverParameter("output-latency", (unsigned int) m_preset.iOutLatency, m_preset.iOutLatency > 0); } } // D-BUS: Set parameter values (with reset option). bool qjackctlMainForm::setDBusEngineParameter ( const QString& param, const QVariant& value, bool bSet ) { return setDBusParameter(QStringList() << "engine" << param, value, bSet); } bool qjackctlMainForm::setDBusDriverParameter ( const QString& param, const QVariant& value, bool bSet ) { return setDBusParameter(QStringList() << "driver" << param, value, bSet); } bool qjackctlMainForm::setDBusParameter ( const QStringList& path, const QVariant& value, bool bSet ) { if (m_pDBusConfig == NULL) return false; if (!bSet) return resetDBusParameter(path); // Reset option. QDBusMessage dbusm = m_pDBusConfig->call( "SetParameterValue", path, QVariant::fromValue(QDBusVariant(value))); if (dbusm.type() == QDBusMessage::ErrorMessage) { appendMessagesError( tr("D-BUS: SetParameterValue('%1', '%2'):\n\n" "%3.\n(%4)").arg(path.join(":")).arg(value.toString()) .arg(dbusm.errorMessage()) .arg(dbusm.errorName())); return false; } return true; } // D-BUS: Reset parameter (to default) values. bool qjackctlMainForm::resetDBusEngineParameter ( const QString& param ) { return resetDBusParameter(QStringList() << "engine" << param); } bool qjackctlMainForm::resetDBusDriverParameter ( const QString& param ) { return resetDBusParameter(QStringList() << "driver" << param); } bool qjackctlMainForm::resetDBusParameter ( const QStringList& path ) { if (m_pDBusConfig == NULL) return false; QDBusMessage dbusm = m_pDBusConfig->call("ResetParameterValue", path); if (dbusm.type() == QDBusMessage::ErrorMessage) { appendMessagesError( tr("D-BUS: ResetParameterValue('%1'):\n\n" "%2.\n(%3)").arg(path.join(":")) .arg(dbusm.errorMessage()) .arg(dbusm.errorName())); return false; } return true; } // D-BUS: Get parameter values. QVariant qjackctlMainForm::getDBusEngineParameter ( const QString& param ) { return getDBusParameter(QStringList() << "engine" << param); } QVariant qjackctlMainForm::getDBusDriverParameter ( const QString& param ) { return getDBusParameter(QStringList() << "driver" << param); } QVariant qjackctlMainForm::getDBusParameter ( const QStringList& path ) { if (m_pDBusConfig == NULL) return QVariant(); QDBusMessage dbusm = m_pDBusConfig->call("GetParameterValue", path); if (dbusm.type() == QDBusMessage::ErrorMessage) { appendMessagesError( tr("D-BUS: GetParameterValue('%1'):\n\n" "%2.\n(%3)").arg(path.join(":")) .arg(dbusm.errorMessage()) .arg(dbusm.errorName())); return QVariant(); } return dbusm.arguments().at(2); } #endif // CONFIG_DBUS // Quotes string with embedded whitespace. QString qjackctlMainForm::formatQuoted ( const QString& s ) const { const QChar b = ' '; const QChar q = '"'; return (s.contains(b) && !s.contains(q) ? q + s + q : s); } // Guarded transport play/pause toggle. void qjackctlMainForm::transportPlayStatus ( bool bOn ) { ++m_iTransportPlay; m_ui.PlayToolButton->setChecked(bOn); --m_iTransportPlay; } // Session (desktop) shutdown signal handler. void qjackctlMainForm::setQuitForce ( bool bQuitForce ) { m_bQuitForce = bQuitForce; } bool qjackctlMainForm::isQuitForce (void) const { return m_bQuitForce; } // end of qjackctlMainForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/src.pro0000644000175000001440000000012412107175033016505 xustar000000000000000027 mtime=1360853531.825601 27 atime=1364826684.457395 30 ctime=1364826684.457395495 qjackctl-0.3.10/src/src.pro0000644000175000001440000000434712107175033016004 0ustar00rncbcusers00000000000000# qjackctl.pro # TARGET = qjackctl TEMPLATE = app DEPENDPATH += . INCLUDEPATH += . include(src.pri) #DEFINES += DEBUG HEADERS += config.h \ qjackctlAbout.h \ qjackctlAlsaConnect.h \ qjackctlConnect.h \ qjackctlConnectAlias.h \ qjackctlJackConnect.h \ qjackctlPatchbay.h \ qjackctlPatchbayFile.h \ qjackctlPatchbayRack.h \ qjackctlSession.h \ qjackctlSetup.h \ qjackctlStatus.h \ qjackctlSystemTray.h \ qjackctlAboutForm.h \ qjackctlConnectionsForm.h \ qjackctlMainForm.h \ qjackctlMessagesStatusForm.h \ qjackctlPatchbayForm.h \ qjackctlSessionForm.h \ qjackctlSetupForm.h \ qjackctlSocketForm.h SOURCES += \ qjackctl.cpp \ qjackctlAlsaConnect.cpp \ qjackctlConnect.cpp \ qjackctlConnectAlias.cpp \ qjackctlJackConnect.cpp \ qjackctlPatchbay.cpp \ qjackctlPatchbayFile.cpp \ qjackctlPatchbayRack.cpp \ qjackctlSession.cpp \ qjackctlSetup.cpp \ qjackctlSystemTray.cpp \ qjackctlAboutForm.cpp \ qjackctlConnectionsForm.cpp \ qjackctlMainForm.cpp \ qjackctlMessagesStatusForm.cpp \ qjackctlPatchbayForm.cpp \ qjackctlSessionForm.cpp \ qjackctlSetupForm.cpp \ qjackctlSocketForm.cpp FORMS += \ qjackctlAboutForm.ui \ qjackctlConnectionsForm.ui \ qjackctlMainForm.ui \ qjackctlMessagesStatusForm.ui \ qjackctlPatchbayForm.ui \ qjackctlSessionForm.ui \ qjackctlSetupForm.ui \ qjackctlSocketForm.ui RESOURCES += \ qjackctl.qrc 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_ru.ts unix { # variables OBJECTS_DIR = .obj MOC_DIR = .moc UI_DIR = .ui isEmpty(PREFIX) { PREFIX = /usr/local } BINDIR = $$PREFIX/bin DATADIR = $$PREFIX/share LOCALEDIR = $(localedir) DEFINES += DATADIR=\"$$DATADIR\" !isEmpty(LOCALEDIR) { DEFINES += LOCALEDIR=\"$$LOCALEDIR\" } # make install INSTALLS += target desktop icon target.path = $$BINDIR desktop.path = $$DATADIR/applications desktop.files += $${TARGET}.desktop icon.path = $$DATADIR/icons/hicolor/32x32/apps icon.files += images/$${TARGET}.png } # XML/DOM support QT += xml # QT5 support !lessThan(QT_MAJOR_VERSION, 5) { QT += widgets } qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMessagesStatusForm.cpp0000644000175000001440000000012412067640522023221 xustar000000000000000027 mtime=1356808530.226153 27 atime=1364826684.547395 30 ctime=1364826684.547395496 qjackctl-0.3.10/src/qjackctlMessagesStatusForm.cpp0000644000175000001440000002375112067640522022520 0ustar00rncbcusers00000000000000// qjackctlMessagesStatusForm.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlMessagesStatusForm.h" #include "qjackctlStatus.h" #include "qjackctlSetup.h" #include "qjackctlMainForm.h" #include #include #include #include #include #include #include #include // The maximum number of message lines. #define QJACKCTL_MESSAGES_MAXLINES 1000 //---------------------------------------------------------------------------- // qjackctlMessagesStatusForm -- UI wrapper form. // Constructor. qjackctlMessagesStatusForm::qjackctlMessagesStatusForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QWidget(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); // m_ui.MessagesTextView->setTextFormat(Qt::LogText); // Initialize default message limit. m_iMessagesLines = 0; setMessagesLimit(QJACKCTL_MESSAGES_MAXLINES); m_pMessagesLog = NULL; // Create the list view items 'a priori'... const QString s = " "; const QString c = ":" + s; const QString n = "--"; QTreeWidgetItem *pViewItem; // Status list view... QHeaderView *pHeader = m_ui.StatsListView->header(); pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(320); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); #else // pHeader->setResizeMode(QHeaderView::Custom); pHeader->setMovable(false); #endif pHeader->setStretchLastSection(true); m_apStatus[STATUS_SERVER_NAME] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Server name") + c << n); m_apStatus[STATUS_SERVER_STATE] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Server state") + c << n); m_apStatus[STATUS_DSP_LOAD] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("DSP Load") + c << n); m_apStatus[STATUS_SAMPLE_RATE] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Sample Rate") + c << n); m_apStatus[STATUS_BUFFER_SIZE] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Buffer Size") + c << n); m_apStatus[STATUS_REALTIME] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Realtime Mode") + c << n); pViewItem = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Transport state") + c << n); m_apStatus[STATUS_TRANSPORT_STATE] = pViewItem; m_apStatus[STATUS_TRANSPORT_TIME] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("Transport Timecode") + c << n); m_apStatus[STATUS_TRANSPORT_BBT] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("Transport BBT") + c << n); m_apStatus[STATUS_TRANSPORT_BPM] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("Transport BPM") + c << n); pViewItem = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("XRUN count since last server startup") + c << n); m_apStatus[STATUS_XRUN_COUNT] = pViewItem; m_apStatus[STATUS_XRUN_TIME] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN last time detected") + c << n); m_apStatus[STATUS_XRUN_LAST] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN last") + c << n); m_apStatus[STATUS_XRUN_MAX] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN maximum") + c << n); m_apStatus[STATUS_XRUN_MIN] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN minimum") + c << n); m_apStatus[STATUS_XRUN_AVG] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN average") + c << n); m_apStatus[STATUS_XRUN_TOTAL] = new QTreeWidgetItem(pViewItem, QStringList() << s + tr("XRUN total") + c << n); #ifdef CONFIG_JACK_MAX_DELAY m_apStatus[STATUS_MAX_DELAY] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Maximum scheduling delay") + c << n); #endif m_apStatus[STATUS_RESET_TIME] = new QTreeWidgetItem(m_ui.StatsListView, QStringList() << s + tr("Time of last reset") + c << n); m_ui.StatsListView->resizeColumnToContents(0); // Description. m_ui.StatsListView->resizeColumnToContents(1); // Value. // UI connections... QObject::connect(m_ui.ResetPushButton, SIGNAL(clicked()), SLOT(resetXrunStats())); QObject::connect(m_ui.RefreshPushButton, SIGNAL(clicked()), SLOT(refreshXrunStats())); } // Destructor. qjackctlMessagesStatusForm::~qjackctlMessagesStatusForm (void) { setLogging(false); } // Notify our parent that we're emerging. void qjackctlMessagesStatusForm::showEvent ( QShowEvent *pShowEvent ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); QWidget::showEvent(pShowEvent); } // Notify our parent that we're closing. void qjackctlMessagesStatusForm::hideEvent ( QHideEvent *pHideEvent ) { QWidget::hideEvent(pHideEvent); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Just about to notify main-window that we're closing. void qjackctlMessagesStatusForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Tab page accessors. void qjackctlMessagesStatusForm::setTabPage ( int iTabPage ) { m_ui.MessagesStatusTabWidget->setCurrentIndex(iTabPage); } int qjackctlMessagesStatusForm::tabPage (void) const { return m_ui.MessagesStatusTabWidget->currentIndex(); } // Messages view font accessors. QFont qjackctlMessagesStatusForm::messagesFont (void) const { return m_ui.MessagesTextView->font(); } void qjackctlMessagesStatusForm::setMessagesFont ( const QFont & font ) { m_ui.MessagesTextView->setFont(font); } // Messages line limit accessors. int qjackctlMessagesStatusForm::messagesLimit (void) const { return m_iMessagesLimit; } void qjackctlMessagesStatusForm::setMessagesLimit ( int iMessagesLimit ) { m_iMessagesLimit = iMessagesLimit; m_iMessagesHigh = iMessagesLimit + (iMessagesLimit / 3); // m_ui.MessagesTextView->setMaxLogLines(iMessagesLimit); } // Messages logging stuff. bool qjackctlMessagesStatusForm::isLogging (void) const { return (m_pMessagesLog != NULL); } void qjackctlMessagesStatusForm::setLogging ( bool bEnabled, const QString& sFilename ) { if (m_pMessagesLog) { appendMessages(tr("Logging stopped --- %1 ---") .arg(QDateTime::currentDateTime().toString())); m_pMessagesLog->close(); delete m_pMessagesLog; m_pMessagesLog = NULL; } if (bEnabled) { m_pMessagesLog = new QFile(sFilename); if (m_pMessagesLog->open(QIODevice::Text | QIODevice::Append)) { appendMessages(tr("Logging started --- %1 ---") .arg(QDateTime::currentDateTime().toString())); } else { delete m_pMessagesLog; m_pMessagesLog = NULL; } } } // Messages log output method. void qjackctlMessagesStatusForm::appendMessagesLog ( const QString& s ) { if (m_pMessagesLog) { QTextStream(m_pMessagesLog) << s << endl; m_pMessagesLog->flush(); } } // Messages widget output method. void qjackctlMessagesStatusForm::appendMessagesLine ( const QString& s ) { // Check for message line limit... if (m_iMessagesLines > m_iMessagesHigh) { m_ui.MessagesTextView->setUpdatesEnabled(false); QTextCursor textCursor(m_ui.MessagesTextView->document()->begin()); while (m_iMessagesLines > m_iMessagesLimit) { // Move cursor extending selection // from start to next line-block... textCursor.movePosition( QTextCursor::NextBlock, QTextCursor::KeepAnchor); m_iMessagesLines--; } // Remove the excessive line-blocks... textCursor.removeSelectedText(); m_ui.MessagesTextView->setUpdatesEnabled(true); } m_ui.MessagesTextView->append(s); m_iMessagesLines++; } void qjackctlMessagesStatusForm::appendMessages ( const QString& s ) { appendMessagesColor(s, "#999999"); } void qjackctlMessagesStatusForm::appendMessagesColor ( const QString& s, const QString& c ) { QString sText = QTime::currentTime().toString("hh:mm:ss.zzz") + ' ' + s; appendMessagesLine("" + sText + ""); appendMessagesLog(sText); } void qjackctlMessagesStatusForm::appendMessagesText ( const QString& s ) { appendMessagesLine(s); appendMessagesLog(s); } // Ask our parent to reset status. void qjackctlMessagesStatusForm::resetXrunStats (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->resetXrunStats(); } // Ask our parent to refresh our status. void qjackctlMessagesStatusForm::refreshXrunStats (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->refreshXrunStats(); } // Update one status item value. void qjackctlMessagesStatusForm::updateStatusItem ( int iStatusItem, const QString& sText ) { m_apStatus[iStatusItem]->setText(1, sText); } // Keyboard event handler. void qjackctlMessagesStatusForm::keyPressEvent ( QKeyEvent *pKeyEvent ) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlMessagesStatusForm::keyPressEvent(%d)", pKeyEvent->key()); #endif int iKey = pKeyEvent->key(); switch (iKey) { case Qt::Key_Escape: close(); break; default: QWidget::keyPressEvent(pKeyEvent); break; } } // end of qjackctlMessagesStatusForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSetupForm.ui0000644000175000001440000000012411741645304021202 xustar000000000000000027 mtime=1334266564.356816 27 atime=1364826684.910395 30 ctime=1364826684.911395502 qjackctl-0.3.10/src/qjackctlSetupForm.ui0000644000175000001440000043473111741645304020505 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2012, 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. qjackctlSetupForm 0 0 675 503 Setup - JACK Audio Connection Kit :/images/setup1.png:/images/setup1.png true 4 8 false 0 Settings 4 4 Preset &Name: false PresetComboBox 0 0 Settings preset name true (default) Save settings as current preset name &Save :/images/save1.png:/images/save1.png Alt+S false Delete current settings preset &Delete :/images/remove1.png:/images/remove1.png Alt+D false 75 true Parameters true Qt::Vertical 8 4 50 false Server &Prefix: false ServerPrefixComboBox 0 0 50 false Server path (command line prefix) true jackd jackdmp jackstart 50 false &Name: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false ServerNameComboBox 50 false The JACK Audio Connection Kit sound server name true (default) 50 false Driv&er: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false DriverComboBox 50 false The audio backend driver interface to use false dummy sun oss alsa portaudio coreaudio freebob firewire net netone Qt::Vertical 8 4 4 0 50 false Use realtime scheduling &Realtime Alt+R 50 false Do not attempt to lock memory, even if in realtime mode No Memory Loc&k Alt+K 50 false Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) &Unlock Memory Alt+U 50 false Ignore xruns reported by the backend driver So&ft Mode Alt+F 50 false Provide output monitor ports &Monitor Alt+M 50 false Force 16bit mode instead of failing over 32bit (default) Force &16bit Alt+1 50 false Enable hardware monitoring of capture ports H/W M&onitor Alt+O 50 false Enable hardware metering on cards that support it H/&W Meter Alt+W 50 false Ignore hardware period/buffer size &Ignore H/W Alt+I 50 false Whether to give verbose output on messages &Verbose messages Alt+V Qt::Horizontal QSizePolicy::MinimumExpanding 4 8 0 4 50 false Number of periods in the hardware buffer 2 999 50 false QFrame::NoFrame QFrame::Plain Priorit&y: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false PrioritySpinBox 50 false &Frames/Period: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false FramesComboBox 50 false Frames per period between process() calls true 16 32 64 128 256 512 1024 2048 4096 50 false Port Ma&ximum: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false PortMaxComboBox 50 false &Channels: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 0 ChanSpinBox Sans Serif 50 false false Number of microseconds to wait between engine processes (dummy) true 21333 50 false Sample rate in frames per second true 22050 32000 44100 48000 88200 96000 192000 50 false Scheduler priority when running realtime (default) 89 50 false &Word Length: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false WordLengthComboBox 50 false Periods/&Buffer: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false PeriodsSpinBox 50 false false Word length true 16 32 64 60 0 50 false Maximum number of ports the JACK server can manage true 1 128 256 512 1024 50 false &Wait (usec): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false WaitComboBox 50 false QFrame::NoFrame QFrame::Plain Sample &Rate: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false SampleRateComboBox 50 false Maximum number of audio channels to allocate (default) 999 50 false false QFrame::NoFrame QFrame::Plain &Timeout (msec): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false TimeoutComboBox 50 false Set client timeout limit in miliseconds true 1 200 500 1000 2000 5000 10000 Qt::Horizontal QSizePolicy::MinimumExpanding 4 8 50 false &Interface: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false InterfaceComboBox 50 false The PCM device name to use true (default) hw:0 plughw:0 /dev/audio /dev/dsp 22 22 24 24 50 false Qt::TabFocus Select PCM device name > 50 false QFrame::NoFrame QFrame::Plain Dit&her: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false DitherComboBox 50 false Set dither mode None Rectangular Shaped Triangular 50 false &Audio: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false AudioComboBox 50 false Provide either audio capture, playback or both Duplex Capture Only Playback Only 50 false &Input Device: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false InDeviceComboBox 50 false Alternate input device for capture true (default) hw:0 plughw:0 /dev/audio /dev/dsp 22 22 24 24 50 false Qt::TabFocus Select input device for capture > 50 false &Output Device: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false OutDeviceComboBox 50 false Alternate output device for playback true (default) hw:0 plughw:0 /dev/audio /dev/dsp 22 22 24 24 50 false Qt::TabFocus Select output device for playback > 50 false &Channels I/O: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false InChannelsSpinBox 50 false Maximum input audio hardware channels to allocate (default) 999 50 false Maximum output audio hardware channels to allocate (default) 999 50 false &Latency I/O: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false InLatencySpinBox 50 false External input latency (frames) (default) 9999999 50 false External output latency (frames) (default) 9999999 50 false MIDI Driv&er: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false MidiDriverComboBox 50 false The ALSA MIDI backend driver to use false none raw seq Qt::Vertical 8 4 4 0 50 false Server Suffi&x: false ServerSuffixComboBox 0 0 50 false Extra driver options (command line suffix) true 50 false Start De&lay: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false StartDelaySpinBox 50 false Time in seconds that client is delayed after server startup secs 0 999 50 false QFrame::NoFrame QFrame::Plain Latency: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 72 0 50 false Output latency in milliseconds, calculated based on the period, rate and buffer settings QFrame::StyledPanel QFrame::Sunken 0 msecs Qt::AlignCenter false Qt::Vertical 8 4 Options 4 4 75 true Scripting true 8 4 50 false Whether to execute a custom shell script before starting up the JACK audio server. Execute script on Start&up: Alt+U 50 false Whether to execute a custom shell script after starting up the JACK audio server. Execute script after &Startup: Alt+S 50 false Whether to execute a custom shell script before shuting down the JACK audio server. Execute script on Shut&down: Alt+D 0 0 50 false Command line to be executed before starting up the JACK audio server true 22 22 24 24 50 false Qt::TabFocus Scripting argument meta-symbols > 22 22 24 24 50 false Qt::TabFocus Browse for script to be executed before starting up the JACK audio server ... 0 0 50 false Command line to be executed after starting up the JACK audio server true 22 22 24 24 50 false Qt::TabFocus Scripting argument meta-symbols > 22 22 24 24 50 false Qt::TabFocus Browse for script to be executed after starting up the JACK audio server ... 22 22 24 24 50 false Qt::TabFocus Scripting argument meta-symbols > 22 22 24 24 50 false Qt::TabFocus Browse for script to be executed before shutting down the JACK audio server ... 0 0 50 false Command line to be executed before shutting down the JACK audio server true 50 false Whether to execute a custom shell script after shuting down the JACK audio server. Execute script after Shu&tdown: Alt+T 22 22 24 24 50 false Qt::TabFocus Scripting argument meta-symbols > 22 22 24 24 50 false Qt::TabFocus Browse for script to be executed after shutting down the JACK audio server ... 0 0 50 false Command line to be executed after shutting down the JACK audio server true 75 true Statistics true 8 4 50 false Whether to capture standard output (stdout/stderr) into messages window &Capture standard output Alt+C 50 false &XRUN detection regex: false XrunRegexComboBox 0 0 50 false Regular expression used to detect XRUNs on server output messages true xrun of at least ([0-9|\.]+) msecs 75 true Connections true 50 false Whether to activate a patchbay definition for connection persistence profile. Activate &Patchbay persistence: Alt+P 0 0 50 false Patchbay definition file to be activated as connection persistence profile true 22 22 24 24 50 false Qt::TabFocus Browse for a patchbay definition file to be activated ... 0 0 50 false Whether to refresh the connections patchbay automatically &Auto refresh connections Patchbay, every (secs): Alt+A 0 0 50 false Time in seconds between each auto-refresh cycle true 5 10 20 30 60 120 Qt::Horizontal QSizePolicy::Expanding 200 8 75 true Logging true 50 false Whether to activate a messages logging to file. &Messages log file: Alt+M 0 0 50 false Messages log file true 22 22 24 24 50 false Qt::TabFocus Browse for the messages log file location ... Qt::Vertical QSizePolicy::MinimumExpanding 8 8 Display 4 4 75 true Time Display true 8 4 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 4 4 50 false Transport &Time Code Alt+T 50 false Transport &BBT (bar:beat.ticks) Alt+B 50 false Elapsed time since last &Reset Alt+R 50 false Elapsed time since last &XRUN Alt+X Qt::Horizontal QSizePolicy::Minimum 24 8 Qt::Horizontal QSizePolicy::Minimum 24 8 4 4 180 0 260 32767 50 false Sample front panel normal display font true QFrame::StyledPanel QFrame::Sunken Qt::AlignCenter false 180 0 260 32767 50 false Sample big time display font true QFrame::StyledPanel QFrame::Sunken Qt::AlignCenter false 50 false Big Time display: false 50 false Select font for front panel normal display &Font... Alt+F false 50 false Select font for big time display &Font... Alt+F false 50 false Normal display: false 50 false Whether to enable a shiny glass light effect on the main display &Display shiny glass light effect Alt+D 50 false Whether to enable blinking (flashing) of the server mode (RT) indicator Blin&k server mode indicator Alt+K 75 true Messages Window true 4 8 180 0 260 16777215 50 false Sample messages text font display true QFrame::StyledPanel QFrame::Sunken Qt::AlignCenter false 50 false Select font for the messages text display &Font... Alt+F false Qt::Horizontal QSizePolicy::Expanding 8 8 50 false Whether to keep a maximum number of lines in the messages window &Messages limit: Alt+M 50 false The maximum number of message lines to keep in view true 3 100 250 500 1000 2500 5000 75 true Connections Window true 180 0 260 16777215 50 false Sample connections view font true QFrame::StyledPanel QFrame::Sunken Qt::AlignCenter false 50 false Select font for the connections view &Font... Alt+F false Qt::Horizontal QSizePolicy::Expanding 8 8 50 false &Icon size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false ConnectionsIconSizeComboBox 50 false The icon size for each item of the connections view false 0 16 x 16 32 x 32 64 x 64 Qt::Vertical QSizePolicy::Minimum 8 8 50 false Whether to draw connection lines as cubic Bezier curves Draw connection and patchbay lines as Be&zier curves Alt+Z 50 false Whether to enable client/port name aliases on the connections window E&nable client/port aliases Alt+N 50 false Whether to enable in-place client/port name editing (rename) Ena&ble client/port aliases editing (rename) Alt+B 50 false &JACK client/port aliases: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false JackClientPortAliasComboBox 50 false JACK client/port aliases display mode false 0 Default First Second Qt::Vertical QSizePolicy::MinimumExpanding 8 8 Misc 4 4 75 true Other true 4 4 4 0 50 false Whether to start JACK audio server immediately on application startup &Start JACK audio server on application startup Alt+S 50 false Whether to ask for confirmation on application exit &Confirm application close Alt+C 50 false false Whether to keep all child windows on top of the main window &Keep child windows always on top Alt+K 50 false Whether to enable the system tray icon &Enable system tray icon Alt+E 50 false Whether to start minimized to system tray Start minimi&zed to system tray Alt+Z 50 false Whether to delay window positioning at application startup &Delay window positioning at startup Alt+D 50 false Whether to restrict to one single application instance (X11) Single application &instance Alt+I 4 0 50 false Whether to save the JACK server command-line configuration into a local file (auto-start) S&ave JACK audio server configuration to: Alt+A 50 false The server configuration local file name (auto-start) true .jackdrc 50 false Whether to exit once all clients have closed (auto-start) C&onfigure as temporary server Alt+O 50 false Whether to ask for confirmation on JACK audio server shutdown Confirm server sh&utdown Alt+U 50 false Whether to enable ALSA Sequencer (MIDI) support on startup E&nable ALSA Sequencer support Alt+N 50 false Whether to enable D-Bus interface &Enable D-Bus interface Alt+B 50 false Whether to stop JACK audio server on application exit S&top JACK audio server on application exit Alt+Q Qt::Vertical QSizePolicy::Expanding 8 8 Qt::Vertical QSizePolicy::Expanding 8 8 75 true Buttons true 4 4 4 0 50 false Whether to hide the left button group on the main window Hide main window &Left buttons Alt+L 50 false Whether to hide the right button group on the main window Hide main window &Right buttons Alt+R 50 false Whether to hide the transport button group on the main window Hide main window &Transport buttons Alt+T 50 false Whether to hide the text labels on the main window buttons Hide main window &button text labels Alt+B Qt::Vertical QSizePolicy::Expanding 8 8 75 true Defaults true 4 4 Qt::Horizontal QSizePolicy::Expanding 8 8 50 false &Base font size: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter BaseFontSizeComboBox 50 false Base application font size (pt.) true (default) 6 7 8 9 10 11 12 Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok SetupTabWidget PresetComboBox PresetSavePushButton PresetDeletePushButton ServerNameComboBox DriverComboBox RealtimeCheckBox NoMemLockCheckBox UnlockMemCheckBox SoftModeCheckBox MonitorCheckBox ShortsCheckBox HWMonCheckBox HWMeterCheckBox IgnoreHWCheckBox VerboseCheckBox PrioritySpinBox FramesComboBox SampleRateComboBox PeriodsSpinBox WordLengthComboBox WaitComboBox ChanSpinBox PortMaxComboBox TimeoutComboBox InterfaceComboBox InterfaceToolButton DitherComboBox AudioComboBox InDeviceComboBox InDeviceToolButton OutDeviceComboBox OutDeviceToolButton InChannelsSpinBox OutChannelsSpinBox InLatencySpinBox OutLatencySpinBox MidiDriverComboBox ServerSuffixComboBox StartDelaySpinBox StartupScriptCheckBox StartupScriptShellComboBox StartupScriptSymbolToolButton StartupScriptBrowseToolButton PostStartupScriptCheckBox PostStartupScriptShellComboBox PostStartupScriptSymbolToolButton PostStartupScriptBrowseToolButton ShutdownScriptCheckBox ShutdownScriptShellComboBox ShutdownScriptSymbolToolButton ShutdownScriptBrowseToolButton PostShutdownScriptCheckBox PostShutdownScriptShellComboBox PostShutdownScriptSymbolToolButton PostShutdownScriptBrowseToolButton StdoutCaptureCheckBox XrunRegexComboBox ActivePatchbayCheckBox ActivePatchbayPathComboBox ActivePatchbayPathToolButton AutoRefreshCheckBox MessagesLogCheckBox MessagesLogPathComboBox MessagesLogPathToolButton TransportTimeRadioButton TransportBBTRadioButton ElapsedResetRadioButton ElapsedXrunRadioButton TimeFormatComboBox DisplayFont1PushButton DisplayFont2PushButton DisplayEffectCheckBox DisplayBlinkCheckBox MessagesFontPushButton MessagesLimitCheckBox MessagesLimitLinesComboBox ConnectionsFontPushButton ConnectionsIconSizeComboBox BezierLinesCheckBox AliasesEnabledCheckBox AliasesEditingCheckBox StartJackCheckBox QueryCloseCheckBox KeepOnTopCheckBox SystemTrayCheckBox StartMinimizedCheckBox DelayedSetupCheckBox SingletonCheckBox ServerConfigCheckBox ServerConfigNameComboBox ServerConfigTempCheckBox QueryShutdownCheckBox AlsaSeqEnabledCheckBox LeftButtonsCheckBox RightButtonsCheckBox TransportButtonsCheckBox TextLabelsCheckBox BaseFontSizeComboBox DialogButtonBox qjackctl-0.3.10/src/PaxHeaders.16050/qjackctl.qrc0000644000175000001440000000012411434750044017502 xustar000000000000000027 mtime=1282658340.005137 27 atime=1364826684.942395 30 ctime=1364826684.942395502 qjackctl-0.3.10/src/qjackctl.qrc0000644000175000001440000000771111434750044016777 0ustar00rncbcusers00000000000000 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/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 qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnect.cpp0000644000175000001440000000012412067640522021013 xustar000000000000000027 mtime=1356808530.226153 27 atime=1364826684.467395 30 ctime=1364826684.467395495 qjackctl-0.3.10/src/qjackctlConnect.cpp0000644000175000001440000013652612067640522020317 0ustar00rncbcusers00000000000000// qjackctlConnect.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlConnect.h" #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION >= 0x050000 #include #include #endif //---------------------------------------------------------------------- // class qjackctlPortItem -- Port list item. // // Constructor. qjackctlPortItem::qjackctlPortItem ( qjackctlClientItem *pClient, const QString& sPortName ) : QTreeWidgetItem(pClient, QJACKCTL_PORTITEM) { m_pClient = pClient; m_sPortName = sPortName; m_iPortMark = 0; m_bHilite = false; m_pClient->ports().append(this); // Check aliasing... qjackctlConnectAlias *pAliases = ((pClient->clientList())->listView())->aliases(); if (pAliases) { QTreeWidgetItem::setText(0, pAliases->portAlias(pClient->clientName(), sPortName)); if (((pClient->clientList())->listView())->renameEnabled()) { QTreeWidgetItem::setFlags(QTreeWidgetItem::flags() | Qt::ItemIsEditable); } } else { QTreeWidgetItem::setText(0, sPortName); } } // Default destructor. qjackctlPortItem::~qjackctlPortItem (void) { int iPort = m_pClient->ports().indexOf(this); if (iPort >= 0) m_pClient->ports().removeAt(iPort); QListIterator iter(m_connects); while (iter.hasNext()) (iter.next())->removeConnect(this); m_connects.clear(); } // Instance accessors. void qjackctlPortItem::setPortName ( const QString& sPortName ) { QTreeWidgetItem::setText(0, sPortName); m_sPortName = sPortName; } const QString& qjackctlPortItem::clientName (void) const { return m_pClient->clientName(); } const QString& qjackctlPortItem::portName (void) const { return m_sPortName; } // Complete client:port name helper. QString qjackctlPortItem::clientPortName (void) const { return m_pClient->clientName() + ':' + m_sPortName; } // Connect client item accessor. qjackctlClientItem *qjackctlPortItem::client (void) const { return m_pClient; } // Client:port set housekeeping marker. void qjackctlPortItem::markPort ( int iMark ) { setHilite(false); m_iPortMark = iMark; if (iMark > 0) m_connects.clear(); } void qjackctlPortItem::markClientPort ( int iMark ) { markPort(iMark); m_pClient->markClient(iMark); } int qjackctlPortItem::portMark (void) const { return m_iPortMark; } // Connected port list primitives. void qjackctlPortItem::addConnect ( qjackctlPortItem *pPort ) { m_connects.append(pPort); } void qjackctlPortItem::removeConnect ( qjackctlPortItem *pPort ) { pPort->setHilite(false); int iPort = m_connects.indexOf(pPort); if (iPort >= 0) m_connects.removeAt(iPort); } // Connected port finder. qjackctlPortItem *qjackctlPortItem::findConnect ( const QString& sClientPortName ) { QListIterator iter(m_connects); while (iter.hasNext()) { qjackctlPortItem *pPort = iter.next(); if (sClientPortName == pPort->clientPortName()) return pPort; } return NULL; } qjackctlPortItem *qjackctlPortItem::findConnectPtr ( qjackctlPortItem *pPortPtr ) { QListIterator iter(m_connects); while (iter.hasNext()) { qjackctlPortItem *pPort = iter.next(); if (pPortPtr == pPort) return pPort; } return NULL; } // Connection cache list accessor. const QList& qjackctlPortItem::connects (void) const { return m_connects; } // Connectiopn highlight methods. bool qjackctlPortItem::isHilite (void) const { return m_bHilite; } void qjackctlPortItem::setHilite ( bool bHilite ) { // Update the port highlightning if changed... if ((m_bHilite && !bHilite) || (!m_bHilite && bHilite)) { m_bHilite = bHilite; // Propagate this to the parent... m_pClient->setHilite(bHilite); } // Set the new color. QTreeWidget *pTreeWidget = QTreeWidgetItem::treeWidget(); if (pTreeWidget == NULL) return; const QPalette& pal = pTreeWidget->palette(); QTreeWidgetItem::setTextColor(0, m_bHilite ? (pal.base().color().value() < 0x7f ? Qt::cyan : Qt::blue) : pal.text().color()); } // Proxy sort override method. // - Natural decimal sorting comparator. bool qjackctlPortItem::operator< ( const QTreeWidgetItem& other ) const { return qjackctlClientList::lessThan(*this, other); } //---------------------------------------------------------------------- // class qjackctlClientItem -- Jack client list item. // // Constructor. qjackctlClientItem::qjackctlClientItem ( qjackctlClientList *pClientList, const QString& sClientName ) : QTreeWidgetItem(pClientList->listView(), QJACKCTL_CLIENTITEM) { m_pClientList = pClientList; m_sClientName = sClientName; m_iClientMark = 0; m_iHilite = 0; m_pClientList->clients().append(this); // Check aliasing... qjackctlConnectAlias *pAliases = (pClientList->listView())->aliases(); if (pAliases) { QTreeWidgetItem::setText(0, pAliases->clientAlias(sClientName)); if ((pClientList->listView())->renameEnabled()) { QTreeWidgetItem::setFlags(QTreeWidgetItem::flags() | Qt::ItemIsEditable); } } else { QTreeWidgetItem::setText(0, sClientName); } } // Default destructor. qjackctlClientItem::~qjackctlClientItem (void) { qDeleteAll(m_ports); m_ports.clear(); int iClient = m_pClientList->clients().indexOf(this); if (iClient >= 0) m_pClientList->clients().removeAt(iClient); } // Port finder. qjackctlPortItem *qjackctlClientItem::findPort (const QString& sPortName) { QListIterator iter(m_ports); while (iter.hasNext()) { qjackctlPortItem *pPort = iter.next(); if (sPortName == pPort->portName()) return pPort; } return NULL; } // Client list accessor. qjackctlClientList *qjackctlClientItem::clientList (void) const { return m_pClientList; } // Port list accessor. QList& qjackctlClientItem::ports (void) { return m_ports; } // Instance accessors. void qjackctlClientItem::setClientName ( const QString& sClientName ) { QTreeWidgetItem::setText(0, sClientName); m_sClientName = sClientName; } const QString& qjackctlClientItem::clientName (void) const { return m_sClientName; } // Readable flag client accessor. bool qjackctlClientItem::isReadable (void) const { return m_pClientList->isReadable(); } // Client:port set housekeeping marker. void qjackctlClientItem::markClient ( int iMark ) { setHilite(false); m_iClientMark = iMark; } void qjackctlClientItem::markClientPorts ( int iMark ) { markClient(iMark); QListIterator iter(m_ports); while (iter.hasNext()) (iter.next())->markPort(iMark); } int qjackctlClientItem::cleanClientPorts ( int iMark ) { int iDirtyCount = 0; QMutableListIterator iter(m_ports); while (iter.hasNext()) { qjackctlPortItem *pPort = iter.next(); if (pPort->portMark() == iMark) { iter.remove(); delete pPort; iDirtyCount++; } } return iDirtyCount; } int qjackctlClientItem::clientMark (void) const { return m_iClientMark; } // Connectiopn highlight methods. bool qjackctlClientItem::isHilite (void) const { return (m_iHilite > 0); } void qjackctlClientItem::setHilite ( bool bHilite ) { if (bHilite) m_iHilite++; else if (m_iHilite > 0) m_iHilite--; // Set the new color. QTreeWidget *pTreeWidget = QTreeWidgetItem::treeWidget(); if (pTreeWidget == NULL) return; const QPalette& pal = pTreeWidget->palette(); QTreeWidgetItem::setTextColor(0, m_iHilite > 0 ? (pal.base().color().value() < 0x7f ? Qt::darkCyan : Qt::darkBlue) : pal.text().color()); } // Socket item openness status. void qjackctlClientItem::setOpen ( bool bOpen ) { #if QT_VERSION >= 0x040201 QTreeWidgetItem::setExpanded(bOpen); #else QTreeWidgetItem::treeWidget()->setItemExpanded(this, bOpen); #endif } bool qjackctlClientItem::isOpen (void) const { #if QT_VERSION >= 0x040201 return QTreeWidgetItem::isExpanded(); #else return QTreeWidgetItem::treeWidget()->isItemExpanded(this); #endif } // Proxy sort override method. // - Natural decimal sorting comparator. bool qjackctlClientItem::operator< ( const QTreeWidgetItem& other ) const { return qjackctlClientList::lessThan(*this, other); } //---------------------------------------------------------------------- // qjackctlClientList -- Client list. // // Constructor. qjackctlClientList::qjackctlClientList ( qjackctlClientListView *pListView, bool bReadable ) { m_pListView = pListView; m_bReadable = bReadable; m_pHiliteItem = 0; } // Default destructor. qjackctlClientList::~qjackctlClientList (void) { clear(); } // Do proper contents cleanup. void qjackctlClientList::clear (void) { qDeleteAll(m_clients); m_clients.clear(); if (m_pListView) m_pListView->clear(); } // Client finder. qjackctlClientItem *qjackctlClientList::findClient ( const QString& sClientName ) { QListIterator iter(m_clients); while (iter.hasNext()) { qjackctlClientItem *pClient = iter.next(); if (sClientName == pClient->clientName()) return pClient; } return NULL; } // Client:port finder. qjackctlPortItem *qjackctlClientList::findClientPort ( const QString& sClientPort ) { qjackctlPortItem *pPort = 0; int iColon = sClientPort.indexOf(':'); if (iColon >= 0) { qjackctlClientItem *pClient = findClient(sClientPort.left(iColon)); if (pClient) { pPort = pClient->findPort( sClientPort.right(sClientPort.length() - iColon - 1)); } } return pPort; } // Client list accessor. QList& qjackctlClientList::clients (void) { return m_clients; } // List view accessor. qjackctlClientListView *qjackctlClientList::listView (void) const { return m_pListView; } // Readable flag client accessor. bool qjackctlClientList::isReadable (void) const { return m_bReadable; } // Client:port set housekeeping marker. void qjackctlClientList::markClientPorts ( int iMark ) { m_pHiliteItem = 0; QListIterator iter(m_clients); while (iter.hasNext()) (iter.next())->markClientPorts(iMark); } int qjackctlClientList::cleanClientPorts ( int iMark ) { int iDirtyCount = 0; QMutableListIterator iter(m_clients); while (iter.hasNext()) { qjackctlClientItem *pClient = iter.next(); if (pClient->clientMark() == iMark) { iter.remove(); delete pClient; iDirtyCount++; } else { iDirtyCount += pClient->cleanClientPorts(iMark); } } return iDirtyCount; } // Client:port hilite update stabilization. void qjackctlClientList::hiliteClientPorts (void) { qjackctlClientItem *pClient; qjackctlPortItem *pPort; QTreeWidgetItem *pItem = m_pListView->currentItem(); // Dehilite the previous selected items. if (m_pHiliteItem && pItem != m_pHiliteItem) { if (m_pHiliteItem->type() == QJACKCTL_CLIENTITEM) { pClient = static_cast (m_pHiliteItem); QListIterator iter(pClient->ports()); while (iter.hasNext()) { pPort = iter.next(); QListIterator it(pPort->connects()); while (it.hasNext()) (it.next())->setHilite(false); } } else { pPort = static_cast (m_pHiliteItem); QListIterator it(pPort->connects()); while (it.hasNext()) (it.next())->setHilite(false); } } // Hilite the now current selected items. if (pItem) { if (pItem->type() == QJACKCTL_CLIENTITEM) { pClient = static_cast (pItem); QListIterator iter(pClient->ports()); while (iter.hasNext()) { pPort = iter.next(); QListIterator it(pPort->connects()); while (it.hasNext()) (it.next())->setHilite(true); } } else { pPort = static_cast (pItem); QListIterator it(pPort->connects()); while (it.hasNext()) (it.next())->setHilite(true); } } // Do remember this one, ever. m_pHiliteItem = pItem; } // Natural decimal sorting comparator. bool qjackctlClientList::lessThan ( const QTreeWidgetItem& i1, const QTreeWidgetItem& i2 ) { const QString& s1 = i1.text(0); const QString& s2 = i2.text(0); int ich1, ich2; int cch1 = s1.length(); int cch2 = s2.length(); for (ich1 = ich2 = 0; ich1 < cch1 && ich2 < cch2; ich1++, ich2++) { // Skip (white)spaces... while (s1.at(ich1).isSpace()) ich1++; while (s2.at(ich2).isSpace()) ich2++; // Normalize (to uppercase) the next characters... QChar ch1 = s1.at(ich1).toUpper(); QChar ch2 = s2.at(ich2).toUpper(); if (ch1.isDigit() && ch2.isDigit()) { // Find the whole length numbers... int iDigits1 = ich1++; while (ich1 < cch1 && s1.at(ich1).isDigit()) ich1++; int iDigits2 = ich2++; while (ich2 < cch2 && s2.at(ich2).isDigit()) ich2++; // Compare as natural decimal-numbers... int n1 = s1.mid(iDigits1, ich1 - iDigits1).toInt(); int n2 = s2.mid(iDigits2, ich2 - iDigits2).toInt(); if (n1 != n2) return (n1 < n2); // Never go out of bounds... if (ich1 >= cch1 || ich1 >= cch2) break; // Go on with this next char... ch1 = s1.at(ich1).toUpper(); ch2 = s2.at(ich2).toUpper(); } // Compare this char... if (ch1 != ch2) return (ch1 < ch2); } // Probable exact match. return false; } // Do proper contents refresh/update. void qjackctlClientList::refresh (void) { QHeaderView *pHeader = m_pListView->header(); m_pListView->sortItems( pHeader->sortIndicatorSection(), pHeader->sortIndicatorOrder()); } //---------------------------------------------------------------------------- // qjackctlClientListView -- Client list view, supporting drag-n-drop. // Constructor. qjackctlClientListView::qjackctlClientListView ( qjackctlConnectView *pConnectView, bool bReadable ) : QTreeWidget(pConnectView) { m_pConnectView = pConnectView; m_pAutoOpenTimer = 0; m_iAutoOpenTimeout = 0; m_pDragItem = NULL; m_pDragItem = NULL; m_pAliases = NULL; m_bRenameEnabled = false; QHeaderView *pHeader = QTreeWidget::header(); pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(120); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); pHeader->setSectionsClickable(true); #else // pHeader->setResizeMode(QHeaderView::Custom); pHeader->setMovable(false); pHeader->setClickable(true); #endif pHeader->setSortIndicatorShown(true); pHeader->setStretchLastSection(true); QTreeWidget::setRootIsDecorated(true); QTreeWidget::setUniformRowHeights(true); // QTreeWidget::setDragEnabled(true); QTreeWidget::setAcceptDrops(true); QTreeWidget::setDropIndicatorShown(true); QTreeWidget::setAutoScroll(true); QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection); QTreeWidget::setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QTreeWidget::setSortingEnabled(true); QTreeWidget::setMinimumWidth(120); QTreeWidget::setColumnCount(1); QString sText; if (bReadable) sText = tr("Readable Clients / Output Ports"); else sText = tr("Writable Clients / Input Ports"); QTreeWidget::headerItem()->setText(0, sText); QTreeWidget::sortItems(0, Qt::AscendingOrder); QTreeWidget::setToolTip(sText); // Trap for help/tool-tips events. QTreeWidget::viewport()->installEventFilter(this); QObject::connect(QTreeWidget::itemDelegate(), SIGNAL(commitData(QWidget*)), SLOT(renamedSlot())); setAutoOpenTimeout(800); } // Default destructor. qjackctlClientListView::~qjackctlClientListView (void) { setAutoOpenTimeout(0); } // Binding indirect accessor. qjackctlConnect *qjackctlClientListView::binding() const { return m_pConnectView->binding(); } // Auto-open timeout method. void qjackctlClientListView::setAutoOpenTimeout ( int iAutoOpenTimeout ) { m_iAutoOpenTimeout = iAutoOpenTimeout; if (m_pAutoOpenTimer) delete m_pAutoOpenTimer; m_pAutoOpenTimer = NULL; if (m_iAutoOpenTimeout > 0) { m_pAutoOpenTimer = new QTimer(this); QObject::connect(m_pAutoOpenTimer, SIGNAL(timeout()), SLOT(timeoutSlot())); } } // Auto-open timeout accessor. int qjackctlClientListView::autoOpenTimeout (void) const { return m_iAutoOpenTimeout; } // Aliasing support methods. void qjackctlClientListView::setAliases ( qjackctlConnectAlias *pAliases, bool bRenameEnabled ) { m_pAliases = pAliases; m_bRenameEnabled = bRenameEnabled; // For each client item, if any. int iItemCount = QTreeWidget::topLevelItemCount(); for (int iItem = 0; iItem < iItemCount; ++iItem) { QTreeWidgetItem *pItem = QTreeWidget::topLevelItem(iItem); if (pItem->type() != QJACKCTL_CLIENTITEM) continue; qjackctlClientItem *pClientItem = static_cast (pItem); if (pClientItem == NULL) continue; if (m_pAliases) { pClientItem->setText(0, m_pAliases->clientAlias(pClientItem->clientName())); } else { pClientItem->setText(0, pClientItem->clientName()); } if (m_pAliases && m_bRenameEnabled) { pClientItem->setFlags( pClientItem->flags() | Qt::ItemIsEditable); } else { pClientItem->setFlags( pClientItem->flags() & ~Qt::ItemIsEditable); } // For each port item... int iChildCount = pClientItem->childCount(); for (int iChild = 0; iChild < iChildCount; ++iChild) { QTreeWidgetItem *pChildItem = pClientItem->child(iChild); if (pChildItem->type() != QJACKCTL_PORTITEM) continue; qjackctlPortItem *pPortItem = static_cast (pChildItem); if (pPortItem == NULL) continue; if (m_pAliases) { pPortItem->setText(0, m_pAliases->portAlias( pPortItem->clientName(), pPortItem->portName())); } else { pPortItem->setText(0, pPortItem->portName()); } if (m_pAliases && m_bRenameEnabled) { pPortItem->setFlags( pPortItem->flags() | Qt::ItemIsEditable); } else { pPortItem->setFlags( pPortItem->flags() & ~Qt::ItemIsEditable); } } } } qjackctlConnectAlias *qjackctlClientListView::aliases (void) const { return m_pAliases; } bool qjackctlClientListView::renameEnabled (void) const { return m_bRenameEnabled; } // In-place aliasing slot. void qjackctlClientListView::startRenameSlot (void) { QTreeWidgetItem *pItem = QTreeWidget::currentItem(); if (pItem) QTreeWidget::editItem(pItem, 0); } // In-place aliasing slot. void qjackctlClientListView::renamedSlot (void) { if (m_pAliases == NULL) return; QTreeWidgetItem *pItem = QTreeWidget::currentItem(); if (pItem == NULL) return; const QString& sText = pItem->text(0); if (pItem->type() == QJACKCTL_CLIENTITEM) { qjackctlClientItem *pClientItem = static_cast (pItem); m_pAliases->setClientAlias( pClientItem->clientName(), sText); if (sText.isEmpty()) pClientItem->setText(0, pClientItem->clientName()); } else { qjackctlPortItem *pPortItem = static_cast (pItem); m_pAliases->setPortAlias( pPortItem->clientName(), pPortItem->portName(), sText); if (sText.isEmpty()) pPortItem->setText(0, pPortItem->portName()); } m_pConnectView->setDirty(true); } // Auto-open timer slot. void qjackctlClientListView::timeoutSlot (void) { if (m_pAutoOpenTimer) { m_pAutoOpenTimer->stop(); if (m_pDropItem && m_pDropItem->type() == QJACKCTL_CLIENTITEM) { qjackctlClientItem *pClientItem = static_cast (m_pDropItem); if (pClientItem && !pClientItem->isOpen()) pClientItem->setOpen(true); } } } // Trap for help/tool-tip events. bool qjackctlClientListView::eventFilter ( QObject *pObject, QEvent *pEvent ) { QWidget *pViewport = QTreeWidget::viewport(); if (static_cast (pObject) == pViewport && pEvent->type() == QEvent::ToolTip) { QHelpEvent *pHelpEvent = static_cast (pEvent); if (pHelpEvent) { QTreeWidgetItem *pItem = QTreeWidget::itemAt(pHelpEvent->pos()); if (pItem && pItem->type() == QJACKCTL_CLIENTITEM) { qjackctlClientItem *pClientItem = static_cast (pItem); if (pClientItem) { QToolTip::showText(pHelpEvent->globalPos(), pClientItem->clientName(), pViewport); return true; } } else if (pItem && pItem->type() == QJACKCTL_PORTITEM) { qjackctlPortItem *pPortItem = static_cast (pItem); if (pPortItem) { QToolTip::showText(pHelpEvent->globalPos(), pPortItem->portName(), pViewport); return true; } } } } // Not handled here. return QTreeWidget::eventFilter(pObject, pEvent); } // Drag-n-drop stuff. QTreeWidgetItem *qjackctlClientListView::dragDropItem ( const QPoint& pos ) { QTreeWidgetItem *pItem = QTreeWidget::itemAt(pos); if (pItem) { if (m_pDropItem != pItem) { QTreeWidget::setCurrentItem(pItem); m_pDropItem = pItem; if (m_pAutoOpenTimer) m_pAutoOpenTimer->start(m_iAutoOpenTimeout); qjackctlConnect *pConnect = m_pConnectView->binding(); if ((pItem->flags() & Qt::ItemIsDropEnabled) == 0 || pConnect == NULL || !pConnect->canConnectSelected()) pItem = NULL; } } else { m_pDropItem = NULL; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } return pItem; } void qjackctlClientListView::dragEnterEvent ( QDragEnterEvent *pDragEnterEvent ) { if (pDragEnterEvent->source() != this && pDragEnterEvent->mimeData()->hasText() && dragDropItem(pDragEnterEvent->pos())) { pDragEnterEvent->accept(); } else { pDragEnterEvent->ignore(); } } void qjackctlClientListView::dragMoveEvent ( QDragMoveEvent *pDragMoveEvent ) { if (pDragMoveEvent->source() != this && pDragMoveEvent->mimeData()->hasText() && dragDropItem(pDragMoveEvent->pos())) { pDragMoveEvent->accept(); } else { pDragMoveEvent->ignore(); } } void qjackctlClientListView::dragLeaveEvent ( QDragLeaveEvent * ) { m_pDropItem = 0; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } void qjackctlClientListView::dropEvent( QDropEvent *pDropEvent ) { if (pDropEvent->source() != this && pDropEvent->mimeData()->hasText() && dragDropItem(pDropEvent->pos())) { const QString sText = pDropEvent->mimeData()->text(); qjackctlConnect *pConnect = m_pConnectView->binding(); if (!sText.isEmpty() && pConnect) pConnect->connectSelected(); } dragLeaveEvent(0); } // Handle mouse events for drag-and-drop stuff. void qjackctlClientListView::mousePressEvent ( QMouseEvent *pMouseEvent ) { QTreeWidget::mousePressEvent(pMouseEvent); if (pMouseEvent->button() == Qt::LeftButton) { m_posDrag = pMouseEvent->pos(); m_pDragItem = QTreeWidget::itemAt(m_posDrag); } } void qjackctlClientListView::mouseMoveEvent ( QMouseEvent *pMouseEvent ) { QTreeWidget::mouseMoveEvent(pMouseEvent); if ((pMouseEvent->buttons() & Qt::LeftButton) && m_pDragItem && ((pMouseEvent->pos() - m_posDrag).manhattanLength() >= QApplication::startDragDistance())) { // We'll start dragging something alright... QMimeData *pMimeData = new QMimeData(); pMimeData->setText(m_pDragItem->text(0)); QDrag *pDrag = new QDrag(this); pDrag->setMimeData(pMimeData); pDrag->setPixmap(m_pDragItem->icon(0).pixmap(16)); pDrag->setHotSpot(QPoint(-4, -12)); pDrag->start(Qt::LinkAction); // We've dragged and maybe dropped it by now... m_pDragItem = NULL; } } // Context menu request event handler. void qjackctlClientListView::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) { qjackctlConnect *pConnect = m_pConnectView->binding(); if (pConnect == 0) return; QMenu menu(this); QAction *pAction; pAction = menu.addAction(QIcon(":/images/connect1.png"), tr("&Connect"), pConnect, SLOT(connectSelected()), tr("Alt+C", "Connect")); pAction->setEnabled(pConnect->canConnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnect1.png"), tr("&Disconnect"), pConnect, SLOT(disconnectSelected()), tr("Alt+D", "Disconnect")); pAction->setEnabled(pConnect->canDisconnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnectall1.png"), tr("Disconnect &All"), pConnect, SLOT(disconnectAll()), tr("Alt+A", "Disconect All")); pAction->setEnabled(pConnect->canDisconnectAll()); if (m_bRenameEnabled) { menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("Re&name"), this, SLOT(startRenameSlot()), tr("Alt+N", "Rename")); QTreeWidgetItem *pItem = QTreeWidget::currentItem(); pAction->setEnabled(pItem && (pItem->flags() & Qt::ItemIsEditable)); } menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("&Refresh"), pConnect, SLOT(refresh()), tr("Alt+R", "Refresh")); menu.exec(pContextMenuEvent->globalPos()); } //---------------------------------------------------------------------- // qjackctlConnectorView -- Jack port connector widget. // // Constructor. qjackctlConnectorView::qjackctlConnectorView ( qjackctlConnectView *pConnectView ) : QWidget(pConnectView) { m_pConnectView = pConnectView; QWidget::setMinimumWidth(20); // QWidget::setMaximumWidth(120); QWidget::setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); } // Default destructor. qjackctlConnectorView::~qjackctlConnectorView (void) { } // Legal client/port item position helper. int qjackctlConnectorView::itemY ( QTreeWidgetItem *pItem ) const { QRect rect; QTreeWidget *pList = pItem->treeWidget(); QTreeWidgetItem *pParent = pItem->parent(); qjackctlClientItem *pClientItem = NULL; if (pParent && pParent->type() == QJACKCTL_CLIENTITEM) pClientItem = static_cast (pParent); if (pClientItem && !pClientItem->isOpen()) { rect = pList->visualItemRect(pClientItem); } else { rect = pList->visualItemRect(pItem); } return rect.top() + rect.height() / 2; } // Draw visible port connection relation lines void qjackctlConnectorView::drawConnectionLine ( QPainter *pPainter, int x1, int y1, int x2, int y2, int h1, int h2 ) { // Account for list view headers. y1 += h1; y2 += h2; // Invisible output ports don't get a connecting dot. 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); 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()); } else pPainter->drawLine(x1 + 4, y1, x2 - 4, y2); // Invisible input ports don't get a connecting dot. if (y2 > h2) pPainter->drawLine(x2 - 4, y2, x2, y2); } // Draw visible port connection relation arrows. void qjackctlConnectorView::paintEvent ( QPaintEvent * ) { if (m_pConnectView == NULL) return; if (m_pConnectView->OListView() == NULL || m_pConnectView->IListView() == NULL) return; qjackctlClientListView *pOListView = m_pConnectView->OListView(); qjackctlClientListView *pIListView = m_pConnectView->IListView(); int yc = QWidget::pos().y(); int yo = pOListView->pos().y(); int yi = pIListView->pos().y(); QPainter painter(this); int x1, y1, h1; int x2, y2, h2; int i, rgb[3] = { 0x33, 0x66, 0x99 }; // Inline adaptive to draker background themes... if (QWidget::palette().window().color().value() < 0x7f) for (i = 0; i < 3; ++i) rgb[i] += 0x33; // Initialize color changer. i = 0; // Almost constants. x1 = 0; x2 = QWidget::width(); h1 = (pOListView->header())->sizeHint().height(); h2 = (pIListView->header())->sizeHint().height(); // For each output client item... int iItemCount = pOListView->topLevelItemCount(); for (int iItem = 0; iItem < iItemCount; ++iItem) { QTreeWidgetItem *pItem = pOListView->topLevelItem(iItem); if (pItem->type() != QJACKCTL_CLIENTITEM) continue; qjackctlClientItem *pOClient = static_cast (pItem); if (pOClient == NULL) continue; // Set new connector color. ++i; painter.setPen(QColor(rgb[i % 3], rgb[(i / 3) % 3], rgb[(i / 9) % 3])); // For each port item int iChildCount = pOClient->childCount(); for (int iChild = 0; iChild < iChildCount; ++iChild) { QTreeWidgetItem *pChild = pOClient->child(iChild); if (pChild->type() != QJACKCTL_PORTITEM) continue; qjackctlPortItem *pOPort = static_cast (pChild); if (pOPort) { // Get starting connector arrow coordinates. y1 = itemY(pOPort) + (yo - yc); // Get port connections... QListIterator iter(pOPort->connects()); while (iter.hasNext()) { qjackctlPortItem *pIPort = iter.next(); // Obviously, should be a connection // from pOPort to pIPort items: y2 = itemY(pIPort) + (yi - yc); drawConnectionLine(&painter, x1, y1, x2, y2, h1, h2); } } } } } // Context menu request event handler. void qjackctlConnectorView::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) { qjackctlConnect *pConnect = m_pConnectView->binding(); if (pConnect == 0) return; QMenu menu(this); QAction *pAction; pAction = menu.addAction(QIcon(":/images/connect1.png"), tr("&Connect"), pConnect, SLOT(connectSelected()), tr("Alt+C", "Connect")); pAction->setEnabled(pConnect->canConnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnect1.png"), tr("&Disconnect"), pConnect, SLOT(disconnectSelected()), tr("Alt+D", "Disconnect")); pAction->setEnabled(pConnect->canDisconnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnectall1.png"), tr("Disconnect &All"), pConnect, SLOT(disconnectAll()), tr("Alt+A", "Disconect All")); pAction->setEnabled(pConnect->canDisconnectAll()); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("&Refresh"), pConnect, SLOT(refresh()), tr("Alt+R", "Refresh")); menu.exec(pContextMenuEvent->globalPos()); } // Widget event slots... void qjackctlConnectorView::contentsChanged (void) { QWidget::update(); } //---------------------------------------------------------------------------- // qjackctlConnectView -- Integrated connections view widget. // Constructor. qjackctlConnectView::qjackctlConnectView ( QWidget *pParent ) : QSplitter(Qt::Horizontal, pParent) { m_pOListView = new qjackctlClientListView(this, true); m_pConnectorView = new qjackctlConnectorView(this); m_pIListView = new qjackctlClientListView(this, false); m_pConnect = NULL; m_bBezierLines = false; m_iIconSize = 0; QObject::connect(m_pOListView, SIGNAL(itemExpanded(QTreeWidgetItem *)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pOListView, SIGNAL(itemCollapsed(QTreeWidgetItem *)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pOListView->verticalScrollBar(), SIGNAL(valueChanged(int)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pOListView->header(), SIGNAL(sectionClicked(int)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pIListView, SIGNAL(itemExpanded(QTreeWidgetItem *)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pIListView, SIGNAL(itemCollapsed(QTreeWidgetItem *)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pIListView->verticalScrollBar(), SIGNAL(valueChanged(int)), m_pConnectorView, SLOT(contentsChanged())); QObject::connect(m_pIListView->header(), SIGNAL(sectionClicked(int)), m_pConnectorView, SLOT(contentsChanged())); m_bDirty = false; } // Default destructor. qjackctlConnectView::~qjackctlConnectView (void) { } // Connect binding methods. void qjackctlConnectView::setBinding ( qjackctlConnect *pConnect ) { m_pConnect = pConnect; } qjackctlConnect *qjackctlConnectView::binding (void) const { return m_pConnect; } // Connect client list accessors. qjackctlClientList *qjackctlConnectView::OClientList (void) const { if (m_pConnect) return m_pConnect->OClientList(); else return NULL; } qjackctlClientList *qjackctlConnectView::IClientList (void) const { 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; } // Common icon size methods. void qjackctlConnectView::setIconSize ( int iIconSize ) { // Update only if changed. if (iIconSize == m_iIconSize) return; // Go for it... m_iIconSize = iIconSize; // Update item sizes properly... int px = (16 << m_iIconSize); const QSize iconsize(px, px); m_pOListView->setIconSize(iconsize); m_pIListView->setIconSize(iconsize); // Call binding descendant implementation, // and do a complete content reset... if (m_pConnect) m_pConnect->updateContents(true); } int qjackctlConnectView::iconSize (void) const { return m_iIconSize; } // Dirty flag methods. void qjackctlConnectView::setDirty ( bool bDirty ) { m_bDirty = bDirty; if (bDirty) emit contentsChanged(); } bool qjackctlConnectView::isDirty (void) const { return m_bDirty; } //---------------------------------------------------------------------- // qjackctlConnect -- Output-to-Input client/ports connection object. // // Constructor. qjackctlConnect::qjackctlConnect ( qjackctlConnectView *pConnectView ) { m_pConnectView = pConnectView; m_pOClientList = NULL; m_pIClientList = NULL; m_iMutex = 0; m_pConnectView->setBinding(this); } // Default destructor. qjackctlConnect::~qjackctlConnect (void) { // Force end of works here. m_iMutex++; m_pConnectView->setBinding(NULL); if (m_pOClientList) delete m_pOClientList; if (m_pIClientList) delete m_pIClientList; m_pOClientList = NULL; m_pIClientList = NULL; m_pConnectView->ConnectorView()->update(); } // These must be accessed by the descendant constructor. qjackctlConnectView *qjackctlConnect::connectView (void) const { return m_pConnectView; } void qjackctlConnect::setOClientList ( qjackctlClientList *pOClientList ) { m_pOClientList = pOClientList; } void qjackctlConnect::setIClientList ( qjackctlClientList *pIClientList ) { m_pIClientList = pIClientList; } // Connection primitive. bool qjackctlConnect::connectPortsEx ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { if (pOPort->findConnectPtr(pIPort) != NULL) return false; emit connecting(pOPort, pIPort); if (!connectPorts(pOPort, pIPort)) return false; pOPort->addConnect(pIPort); pIPort->addConnect(pOPort); return true; } // Disconnection primitive. bool qjackctlConnect::disconnectPortsEx ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { if (pOPort->findConnectPtr(pIPort) == NULL) return false; emit disconnecting(pOPort, pIPort); if (!disconnectPorts(pOPort, pIPort)) return false; pOPort->removeConnect(pIPort); pIPort->removeConnect(pOPort); return true; } // Test if selected ports are connectable. bool qjackctlConnect::canConnectSelected (void) { bool bResult = false; if (startMutex()) { bResult = canConnectSelectedEx(); endMutex(); } return bResult; } bool qjackctlConnect::canConnectSelectedEx (void) { // Take this opportunity to highlight any current selections. m_pOClientList->hiliteClientPorts(); m_pIClientList->hiliteClientPorts(); // Now with our predicate work... QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); if (pIItem == NULL) 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; } } 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) == 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; } } else { // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); return (pOPort->findConnectPtr(pIPort) == NULL); } } return false; } // Connect current selected ports. bool qjackctlConnect::connectSelected (void) { bool bResult = false; if (startMutex()) { bResult = connectSelectedEx(); endMutex(); } m_pConnectView->ConnectorView()->update(); if (bResult) emit connectChanged(); return bResult; } bool qjackctlConnect::connectSelectedEx (void) { QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); if (pIItem == NULL) 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); } } 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 { 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; } // Test if selected ports are disconnectable. bool qjackctlConnect::canDisconnectSelected (void) { bool bResult = false; if (startMutex()) { bResult = canDisconnectSelectedEx(); endMutex(); } return bResult; } bool qjackctlConnect::canDisconnectSelectedEx (void) { QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); if (!pOItem) return false; QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); if (!pIItem) 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; } } 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) != 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; } } else { // One-to-one connection... qjackctlPortItem *pIPort = static_cast (pIItem); return (pOPort->findConnectPtr(pIPort) != NULL); } } return false; } // Disconnect current selected ports. bool qjackctlConnect::disconnectSelected (void) { bool bResult = false; if (startMutex()) { bResult = disconnectSelectedEx(); endMutex(); } m_pConnectView->ConnectorView()->update(); if (bResult) emit connectChanged(); return bResult; } bool qjackctlConnect::disconnectSelectedEx (void) { QTreeWidgetItem *pOItem = (m_pOClientList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pIClientList->listView())->currentItem(); if (pIItem == NULL) 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); } } 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 { 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; } // Test if any port is disconnectable. bool qjackctlConnect::canDisconnectAll (void) { bool bResult = false; if (startMutex()) { bResult = canDisconnectAllEx(); endMutex(); } return bResult; } bool qjackctlConnect::canDisconnectAllEx (void) { QListIterator iter(m_pOClientList->clients()); while (iter.hasNext()) { qjackctlClientItem *pOClient = iter.next(); QListIterator oport(pOClient->ports()); while (oport.hasNext()) { qjackctlPortItem *pOPort = oport.next(); if (pOPort->connects().count() > 0) return true; } } return false; } // Disconnect all ports. bool qjackctlConnect::disconnectAll (void) { if (QMessageBox::warning(m_pConnectView, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("This will suspend sound processing\n" "from all client applications.\n\nAre you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { return false; } bool bResult = false; if (startMutex()) { bResult = disconnectAllEx(); endMutex(); } m_pConnectView->ConnectorView()->update(); if (bResult) emit connectChanged(); return bResult; } bool qjackctlConnect::disconnectAllEx (void) { QListIterator iter(m_pOClientList->clients()); while (iter.hasNext()) { qjackctlClientItem *pOClient = iter.next(); QListIterator oport(pOClient->ports()); while (oport.hasNext()) { qjackctlPortItem *pOPort = oport.next(); QListIterator iport(pOPort->connects()); while (iport.hasNext()) { qjackctlPortItem *pIPort = iport.next(); disconnectPortsEx(pOPort, pIPort); } } } return true; } // Expand all client ports. void qjackctlConnect::expandAll (void) { (m_pOClientList->listView())->expandAll(); (m_pIClientList->listView())->expandAll(); (m_pConnectView->ConnectorView())->update(); } // Complete/incremental contents rebuilder; check dirty status if incremental. void qjackctlConnect::updateContents ( bool bClear ) { int iDirtyCount = 0; if (startMutex()) { // Do we do a complete rebuild? if (bClear) { m_pOClientList->clear(); m_pIClientList->clear(); updateIconPixmaps(); } // Add (newer) client:ports and respective connections... if (m_pOClientList->updateClientPorts() > 0) { m_pOClientList->refresh(); iDirtyCount++; } if (m_pIClientList->updateClientPorts() > 0) { m_pIClientList->refresh(); iDirtyCount++; } updateConnections(); endMutex(); } (m_pConnectView->ConnectorView())->update(); if (!bClear && iDirtyCount > 0) emit connectChanged(); } // Incremental contents rebuilder; check dirty status. void qjackctlConnect::refresh (void) { updateContents(false); } // Dunno. But this may avoid some conflicts. bool qjackctlConnect::startMutex (void) { bool bMutex = (m_iMutex == 0); if (bMutex) m_iMutex++; return bMutex; } void qjackctlConnect::endMutex (void) { if (m_iMutex > 0) m_iMutex--; } // Connect client list accessors. qjackctlClientList *qjackctlConnect::OClientList (void) const { return m_pOClientList; } qjackctlClientList *qjackctlConnect::IClientList (void) const { return m_pIClientList; } // Common pixmap factory-method. QPixmap *qjackctlConnect::createIconPixmap ( const QString& sIconName ) { QString sName = sIconName; int iSize = m_pConnectView->iconSize() * 32; if (iSize > 0) sName += QString("_%1x%2").arg(iSize).arg(iSize); return new QPixmap(":/images/" + sName + ".png"); } // end of qjackctlConnect.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSocketForm.ui0000644000175000001440000000012412067410555021332 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826685.277395 30 ctime=1364826685.277395508 qjackctl-0.3.10/src/qjackctlSocketForm.ui0000644000175000001440000003130212067410555020620 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2012, 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. qjackctlSocketForm 0 0 400 300 Socket - JACK Audio Connection Kit :/images/patchbay1.png 9 6 QTabWidget::Rounded &Socket 8 4 &Name (alias): Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false SocketNameLineEdit Socket name (an alias for client name) Client name (regular expression) true Add plug to socket plug list Add P&lug :/images/add1.png Alt+L &Plug: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false PlugNameComboBox Port name (regular expression) true Qt::CustomContextMenu Socket plug list false true false true Socket Plugs / Ports Edit currently selected plug &Edit :/images/edit1.png Alt+E Remove currently selected plug from socket plug list &Remove :/images/remove1.png Alt+R &Client: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false ClientNameComboBox Move down currently selected plug in socket plug list &Down :/images/down1.png Alt+D Move up current selected plug in socket plug list &Up :/images/up1.png Alt+U Qt::Vertical QSizePolicy::Expanding 8 8 Enforce only one exclusive cable connection E&xclusive Alt+X &Forward: Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false SocketForwardComboBox Forward (clone) all connections from this socket false Type 8 4 Audio socket type (JACK) &Audio Alt+A MIDI socket type (JACK) &MIDI Alt+M MIDI socket type (ALSA) AL&SA Alt+S Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok SocketTabWidget SocketNameLineEdit AudioRadioButton MidiRadioButton AlsaRadioButton ClientNameComboBox PlugNameComboBox PlugAddPushButton PlugListView PlugEditPushButton PlugRemovePushButton PlugUpPushButton PlugDownPushButton ExclusiveCheckBox SocketForwardComboBox DialogButtonBox qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSessionForm.ui0000644000175000001440000000012412113434015021512 xustar000000000000000027 mtime=1361983501.485243 27 atime=1364826685.232395 30 ctime=1364826685.252395507 qjackctl-0.3.10/src/qjackctlSessionForm.ui0000644000175000001440000002014112113434015020777 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2013, 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. qjackctlSessionForm 0 0 480 320 Session - JACK Audio Connection Kit :/images/session1.png Load session &Load... :/images/open1.png Recent session &Recent Qt::Horizontal 20 20 Save session &Save :/images/save1.png Save session versioning &Versioning Qt::Horizontal 20 20 Update session Re&fresh :/images/refresh1.png Qt::Vertical Session clients / connections false true false true Client / Ports UUID Command Infra-clients / commands false true false true Infra-client Infra-command Add infra-client &Add :/images/add1.png Edit infra-client &Edit :/images/edit1.png Remove infra-client Re&move :/images/remove1.png Qt::Vertical 20 8 LoadSessionPushButton RecentSessionPushButton SaveSessionPushButton SaveSessionVersionCheckBox UpdateSessionPushButton SessionTreeView InfraClientListView AddInfraClientPushButton EditInfraClientPushButton RemoveInfraClientPushButton qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSession.cpp0000644000175000001440000000012412114112452021032 xustar000000000000000027 mtime=1362138410.962891 27 atime=1364826684.416395 30 ctime=1364826684.456395494 qjackctl-0.3.10/src/qjackctlSession.cpp0000644000175000001440000004216212114112452020326 0ustar00rncbcusers00000000000000// qjackctlSession.cpp // /**************************************************************************** Copyright (C) 2003-2013, 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 "qjackctlSession.h" #include "qjackctlMainForm.h" #ifdef CONFIG_JACK_SESSION #include #include #endif #include #include #include #include #include #include #include #include //---------------------------------------------------------------------------- // qjackctlSession -- JACK session container. // Constructor. qjackctlSession::qjackctlSession (void) { } // Destructor. qjackctlSession::~qjackctlSession (void) { clearInfraClients(); clear(); } // Client list accessor (read-only) const qjackctlSession::ClientList& qjackctlSession::clients (void) const { return m_clients; } // House-keeper. void qjackctlSession::clear (void) { qDeleteAll(m_clients); m_clients.clear(); } // Critical methods. bool qjackctlSession::save ( const QString& sSessionDir, int iSessionType ) { // We're always best to // reset old session settings. clear(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) 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); if (ports) { for (int i = 0; ports[i]; ++i) { const char *pszSrcClientPort = ports[i]; const QString sSrcClientPort = QString::fromLocal8Bit(pszSrcClientPort); const QString sSrcClient = sSrcClientPort.section(':', 0, 0); ClientItem *pClientItem; if (m_clients.contains(sSrcClient)) { pClientItem = m_clients.value(sSrcClient); } else { pClientItem = new ClientItem; pClientItem->client_name = sSrcClient; m_clients.insert(pClientItem->client_name, pClientItem); } PortItem *pPortItem = new PortItem; pPortItem->port_name = sSrcClientPort.section(':', 1); jack_port_t *pJackPort = jack_port_by_name(pJackClient, pszSrcClientPort); pPortItem->port_type = (jack_port_flags(pJackPort) & JackPortIsInput); const char **connections = jack_port_get_all_connections(pJackClient, pJackPort); if (connections) { for (int j = 0; connections[j]; ++j) { const QString sDstClientPort = QString::fromLocal8Bit(connections[j]); ConnectItem *pConnectItem = new ConnectItem; pConnectItem->client_name = sDstClientPort.section(':', 0, 0); pConnectItem->port_name = sDstClientPort.section(':', 1); pConnectItem->connected = true; pPortItem->connects.append(pConnectItem); // pPortItem->connected++; } #ifdef CONFIG_JACK_FREE jack_free(connections); #else free(connections); #endif } pClientItem->ports.append(pPortItem); // pClientItem->connected += pPortItem->connected; } #ifdef CONFIG_JACK_FREE jack_free(ports); #else free(ports); #endif } #ifdef CONFIG_JACK_SESSION // Second pass: get all session client commands... if (jack_session_notify) { jack_session_event_type_t etype = JackSessionSave; switch (iSessionType) { case 1: etype = JackSessionSaveAndQuit; break; case 2: etype = JackSessionSaveTemplate; break; } 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) return false; // Second pass... for (int k = 0; commands[k].uuid; ++k) { jack_session_command_t *pCommand = &commands[k]; const QString sClientName = QString::fromLocal8Bit(pCommand->client_name); ClientItem *pClientItem; if (m_clients.contains(sClientName)) { pClientItem = m_clients.value(sClientName); } else { pClientItem = new ClientItem; pClientItem->client_name = sClientName; m_clients.insert(pClientItem->client_name, pClientItem); } pClientItem->client_uuid = QString::fromLocal8Bit(pCommand->uuid); pClientItem->client_command = QString::fromLocal8Bit(pCommand->command); } jack_session_commands_free(commands); } #endif // CONFIG_JACK_SESSION // Third pass: check whether there are registered infra-clients... ClientList::ConstIterator iter = m_clients.constBegin(); const ClientList::ConstIterator& iter_end = m_clients.constEnd(); for ( ; iter != iter_end; ++iter) { ClientItem *pClientItem = iter.value(); if (pClientItem->client_command.isEmpty()) { const QString& sClientName = pClientItem->client_name; if (sClientName == "system") continue; InfraClientItem *pInfraClientItem = m_infra_clients.value(sClientName, NULL); if (pInfraClientItem) { pClientItem->client_command = pInfraClientItem->client_command; } else { pInfraClientItem = new InfraClientItem; pInfraClientItem->client_name = sClientName; pInfraClientItem->client_command = pClientItem->client_command; m_infra_clients.insert(sClientName, pInfraClientItem); } } } // Finally: save to file, immediate... return saveFile(sSessionPath + "session.xml"); } bool qjackctlSession::load ( const QString& sSessionDir ) { // Load from file, immediate... const QString sSessionPath = sSessionDir + '/'; if (!loadFile(sSessionPath + "session.xml")) return false; // Start/load clients... ClientList::ConstIterator iter = m_clients.constBegin(); const ClientList::ConstIterator& iter_end = m_clients.constEnd(); for ( ; iter != iter_end; ++iter) { const ClientItem *pClientItem = iter.value(); const QString& sClientName = pClientItem->client_name; QString sCommand = pClientItem->client_command; if (sCommand.isEmpty()) { // Maybe a registered infra-client command... InfraClientItem *pInfraClientItem = m_infra_clients.value(sClientName, NULL); if (pInfraClientItem && !isJackClient(sClientName)) sCommand = pInfraClientItem->client_command; } else if (!pClientItem->client_uuid.isEmpty()){ // Sure a legit session-client command... const QString& sClientDir = sSessionPath + pClientItem->client_name + '/'; sCommand.replace("${SESSION_DIR}", sClientDir); } // Launch command and wait a litle bit before continue... if (!sCommand.isEmpty() && QProcess::startDetached(sCommand)) { QTime time; time.start(); while (time.elapsed() < 200) QApplication::processEvents(); } } // Initial reconnection. update(); // Formerly successful. return true; } // Update (re)connections utility method. bool qjackctlSession::update (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return false; // We'll count how many connection updates... int iUpdate = 0; // Now, make the saved connections... ClientList::ConstIterator iter = m_clients.constBegin(); const ClientList::ConstIterator& iter_end = m_clients.constEnd(); for ( ; iter != iter_end; ++iter) { ClientItem *pClientItem = iter.value(); if (pClientItem->connected < 1) continue; QString sSrcClient = pClientItem->client_name; #ifdef CONFIG_JACK_SESSION if (!pClientItem->client_uuid.isEmpty()) { const QByteArray aSrcUuid = pClientItem->client_uuid.toLocal8Bit(); const char *pszSrcUuid = aSrcUuid.constData(); const char *pszSrcClient = jack_get_client_name_by_uuid(pJackClient, pszSrcUuid); if (pszSrcClient) sSrcClient = QString::fromLocal8Bit(pszSrcClient); } #endif QListIterator iterPort(pClientItem->ports); while (iterPort.hasNext()) { PortItem *pPortItem = iterPort.next(); if (pPortItem->connected < 1) continue; const QString sSrcPort = pPortItem->port_name; const QString sSrcClientPort = sSrcClient + ':' + sSrcPort; const QByteArray aSrcClientPort = sSrcClientPort.toLocal8Bit(); QListIterator iterConnect(pPortItem->connects); while (iterConnect.hasNext()) { ConnectItem *pConnectItem = iterConnect.next(); if (pConnectItem->connected) continue; QString sDstClient = pConnectItem->client_name; #ifdef CONFIG_JACK_SESSION if (m_clients.contains(sDstClient)) { const QString sDstUuid = m_clients.value(sDstClient)->client_uuid; const QByteArray aDstUuid = sDstUuid.toLocal8Bit(); const char *pszDstUuid = aDstUuid.constData(); const char *pszDstClient = jack_get_client_name_by_uuid(pJackClient, pszDstUuid); if (pszDstClient) sDstClient = QString::fromLocal8Bit(pszDstClient); } #endif const QString sDstPort = pConnectItem->port_name; const QString sDstClientPort = sDstClient + ':' + sDstPort; const QByteArray aDstClientPort = sDstClientPort.toLocal8Bit(); int retc; if (pPortItem->port_type) { // Input port... retc = jack_connect(pJackClient, aDstClientPort.constData(), aSrcClientPort.constData()); #ifdef CONFIG_DEBUG qDebug("qjackctlSession::update() " "jack_connect: \"%s\" => \"%s\" (%d)", aDstClientPort.constData(), aSrcClientPort.constData(), retc); #endif } else { // Output port... retc = jack_connect(pJackClient, aSrcClientPort.constData(), aDstClientPort.constData()); #ifdef CONFIG_DEBUG qDebug("qjackctlSession::update() " "jack_connect: \"%s\" => \"%s\" (%d)", aSrcClientPort.constData(), aDstClientPort.constData(), retc); #endif } // Comply with connection result... if (retc == 0 || retc == EEXIST) { pConnectItem->connected = true; pPortItem->connected--; pClientItem->connected--; iUpdate++; } } } } // Report back. return (iUpdate > 0); } // Specific session file load (read) method. bool qjackctlSession::loadFile ( const QString& sFilename ) { // Open file... QFile file(sFilename); if (!file.open(QIODevice::ReadOnly)) return false; // Parse it a-la-DOM :-) QDomDocument doc("qjackctlSession"); if (!doc.setContent(&file)) { file.close(); return false; } file.close(); // Now, we're always best to // reset old session settings. clear(); // Get root element. QDomElement eDoc = doc.documentElement(); // Parse for clients... for (QDomNode nClient = eDoc.firstChild(); !nClient.isNull(); nClient = nClient.nextSibling()) { // Client element... QDomElement eClient = nClient.toElement(); if (eClient.isNull()) continue; if (eClient.tagName() != "client") continue; ClientItem *pClientItem = new ClientItem; pClientItem->client_name = eClient.attribute("name"); pClientItem->client_uuid = eClient.attribute("uuid"); // Client properties... for (QDomNode nChild = eClient.firstChild(); !nChild.isNull(); nChild = nChild.nextSibling()) { // Client child element... QDomElement eChild = nChild.toElement(); if (eChild.isNull()) continue; if (eChild.tagName() == "command") pClientItem->client_command = eChild.text(); else if (eChild.tagName() == "port") { // Port properties... PortItem *pPortItem = new PortItem; pPortItem->port_name = eChild.attribute("name"); pPortItem->port_type = (eChild.attribute("type") == "in"); // Connection child element... for (QDomNode nConnect = eChild.firstChild(); !nConnect.isNull(); nConnect = nConnect.nextSibling()) { QDomElement eConnect = nConnect.toElement(); if (eConnect.isNull()) continue; if (eConnect.tagName() != "connect") continue; ConnectItem *pConnectItem = new ConnectItem; pConnectItem->client_name = eConnect.attribute("client"); pConnectItem->port_name = eConnect.attribute("port"); pConnectItem->connected = false; pPortItem->connects.append(pConnectItem); pPortItem->connected++; } pClientItem->ports.append(pPortItem); pClientItem->connected += pPortItem->connected; } } m_clients.insert(pClientItem->client_name, pClientItem); } return true; } // Specific session file save (write) method. bool qjackctlSession::saveFile ( const QString& sFilename ) { QFileInfo fi(sFilename); QDomDocument doc("qjackctlSession"); QDomElement eSession = doc.createElement("session"); eSession.setAttribute("name", QFileInfo(fi.absolutePath()).baseName()); doc.appendChild(eSession); // Save clients spec... ClientList::ConstIterator iter = m_clients.constBegin(); const ClientList::ConstIterator& iter_end = m_clients.constEnd(); for ( ; iter != iter_end; ++iter) { const ClientItem *pClientItem = iter.value(); QDomElement eClient = doc.createElement("client"); eClient.setAttribute("name", pClientItem->client_name); if (!pClientItem->client_uuid.isEmpty()) eClient.setAttribute("uuid", pClientItem->client_uuid); if (!pClientItem->client_command.isEmpty()) { QDomElement eCommand = doc.createElement("command"); eCommand.appendChild(doc.createTextNode(pClientItem->client_command)); eClient.appendChild(eCommand); } QListIterator iterPort(pClientItem->ports); while (iterPort.hasNext()) { const PortItem *pPortItem = iterPort.next(); QDomElement ePort = doc.createElement("port"); ePort.setAttribute("name", pPortItem->port_name); ePort.setAttribute("type", pPortItem->port_type ? "in" : "out"); QListIterator iterConnect(pPortItem->connects); while (iterConnect.hasNext()) { const ConnectItem *pConnectItem = iterConnect.next(); QDomElement eConnect = doc.createElement("connect"); eConnect.setAttribute("client", pConnectItem->client_name); eConnect.setAttribute("port", pConnectItem->port_name); ePort.appendChild(eConnect); } eClient.appendChild(ePort); } eSession.appendChild(eClient); } // Finally, save to external file. QFile file(sFilename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return false; QTextStream ts(&file); ts << doc.toString() << endl; file.close(); return true; } // Infra-client list accessor (read-only) qjackctlSession::InfraClientList& qjackctlSession::infra_clients (void) { return m_infra_clients; } // Load all infra-clients from configuration file. void qjackctlSession::loadInfraClients ( QSettings& settings ) { clearInfraClients(); settings.beginGroup("/InfraClients"); const QStringList& keys = settings.childKeys(); QStringListIterator iter(keys); while (iter.hasNext()) { const QString& sKey = iter.next(); const QString& sValue = settings.value(sKey).toString(); if (!sValue.isEmpty()) { InfraClientItem *pInfraClientItem = new InfraClientItem; pInfraClientItem->client_name = sKey; pInfraClientItem->client_command = sValue; m_infra_clients.insert(sKey, pInfraClientItem); } } settings.endGroup(); } // Save all infra-clients to configuration file. void qjackctlSession::saveInfraClients ( QSettings& settings ) { settings.beginGroup("/InfraClients"); settings.remove(QString()); // Remove all current keys. InfraClientList::ConstIterator iter = m_infra_clients.constBegin(); const InfraClientList::ConstIterator& iter_end = m_infra_clients.constEnd(); for ( ; iter != iter_end; ++iter) { const QString& sKey = iter.key(); const QString& sValue = iter.value()->client_command; if (!sValue.isEmpty()) settings.setValue(sKey, sValue); } settings.endGroup(); } // Clear infra-client table. void qjackctlSession::clearInfraClients (void) { qDeleteAll(m_infra_clients); m_infra_clients.clear(); } // Check whether a given JACK client name exists... bool qjackctlSession::isJackClient ( const QString& sClientName ) const { const QByteArray aClientName = sClientName.toUtf8(); #ifdef CONFIG_JACK_SESSION if (jack_get_uuid_for_client_name) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return false; const char *client_uuid = jack_get_uuid_for_client_name( pJackClient, aClientName.constData()); if (client_uuid) { jack_free((void *) client_uuid); return true; } return false; } #endif jack_client_t *pJackClient = jack_client_open(aClientName.constData(), jack_options_t(JackNoStartServer | JackUseExactName), NULL); if (pJackClient) { jack_client_close(pJackClient); return true; } return false; } // end of qjackctlSession.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSession.h0000644000175000001440000000012412113356357020514 xustar000000000000000027 mtime=1361960175.044294 27 atime=1364826685.185395 30 ctime=1364826685.186395506 qjackctl-0.3.10/src/qjackctlSession.h0000644000175000001440000000622112113356357020004 0ustar00rncbcusers00000000000000// qjackctlSession.h // /**************************************************************************** Copyright (C) 2003-2013, 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 __qjackctlSession_h #define __qjackctlSession_h #include #include #include // Forward decls. class QSettings; //---------------------------------------------------------------------------- // qjackctlSession -- JACK session container. class qjackctlSession { public: // Constructor. qjackctlSession(); // Destructor. ~qjackctlSession(); // Container structs. struct ConnectItem { ConnectItem() : connected(false) {} QString client_name; QString port_name; bool connected; }; typedef QList ConnectList; struct PortItem { PortItem() : connected(0) {} ~PortItem() { qDeleteAll(connects); } QString port_name; int port_type; int connected; ConnectList connects; }; typedef QList PortList; struct ClientItem { ClientItem() : connected(0) {} ~ClientItem() { qDeleteAll(ports); } QString client_name; QString client_uuid; QString client_command; int connected; PortList ports; }; typedef QHash ClientList; // Client list accessor (read-only) const ClientList& clients() const; // House-keeper. void clear(); // Critical methods. bool save(const QString& sSessionDir, int iSessionType = 0); bool load(const QString& sSessionDir); // Update (re)connections utility method. bool update(); // Infra-client table. struct InfraClientItem { QString client_name; QString client_command; }; typedef QHash InfraClientList; // Infra-client list accessor (read-write) InfraClientList& infra_clients(); // Load/save all infra-clients from/to configuration file. void loadInfraClients(QSettings& settings); void saveInfraClients(QSettings& settings); // Clear infra-client table. void clearInfraClients(); // Check whether a given JACK client name exists... bool isJackClient(const QString& sClientName) const; protected: // File methods. bool loadFile(const QString& sFilename); bool saveFile(const QString& sFilename); private: // Instance variables. ClientList m_clients; // Infra-clients table. InfraClientList m_infra_clients; }; #endif // __qjackctlSession_h // end of qjackctlSession.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSocketForm.cpp0000644000175000001440000000012412067640522021476 xustar000000000000000027 mtime=1356808530.226153 27 atime=1364826685.329395 30 ctime=1364826685.330395508 qjackctl-0.3.10/src/qjackctlSocketForm.cpp0000644000175000001440000006333712067640522021001 0ustar00rncbcusers00000000000000// qjackctlSocketForm.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlSocketForm.h" #include "qjackctlMainForm.h" #include "qjackctlPatchbay.h" #include "qjackctlConnectAlias.h" #include #include #include #include #include #include //---------------------------------------------------------------------------- // qjackctlSocketForm -- UI wrapper form. // Constructor. qjackctlSocketForm::qjackctlSocketForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QDialog(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); m_pSocketList = NULL; m_bSocketNew = false; m_ppPixmaps = NULL; m_iDirtyCount = 0; // Setup time-display radio-button group. m_pSocketTypeButtonGroup = new QButtonGroup(this); m_pSocketTypeButtonGroup->addButton(m_ui.AudioRadioButton, 0); m_pSocketTypeButtonGroup->addButton(m_ui.MidiRadioButton, 1); m_pSocketTypeButtonGroup->addButton(m_ui.AlsaRadioButton, 2); m_pSocketTypeButtonGroup->setExclusive(true); // Plug list is not sortable. //m_ui.PlugListView->setSorting(-1); // Plug list view... QHeaderView *pHeader = m_ui.PlugListView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(300); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); #else // pHeader->setResizeMode(QHeaderView::Custom); pHeader->setMovable(false); #endif pHeader->setStretchLastSection(true); #ifndef CONFIG_JACK_MIDI m_ui.MidiRadioButton->setEnabled(false); #endif #ifndef CONFIG_ALSA_SEQ m_ui.AlsaRadioButton->setEnabled(false); #endif // UI connections... QObject::connect(m_ui.PlugAddPushButton, SIGNAL(clicked()), SLOT(addPlug())); QObject::connect(m_ui.PlugRemovePushButton, SIGNAL(clicked()), SLOT(removePlug())); QObject::connect(m_ui.PlugEditPushButton, SIGNAL(clicked()), SLOT(editPlug())); QObject::connect(m_ui.PlugUpPushButton, SIGNAL(clicked()), SLOT(moveUpPlug())); QObject::connect(m_ui.PlugDownPushButton, SIGNAL(clicked()), SLOT(moveDownPlug())); QObject::connect(m_ui.PlugListView, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), SLOT(selectedPlug())); QObject::connect(m_ui.SocketNameLineEdit, SIGNAL(textChanged(const QString&)), SLOT(changed())); QObject::connect(m_ui.AudioRadioButton, SIGNAL(toggled(bool)), SLOT(socketTypeChanged())); QObject::connect(m_ui.MidiRadioButton, SIGNAL(toggled(bool)), SLOT(socketTypeChanged())); QObject::connect(m_ui.AlsaRadioButton, SIGNAL(toggled(bool)), SLOT(socketTypeChanged())); QObject::connect(m_ui.ExclusiveCheckBox, SIGNAL(toggled(bool)), SLOT(socketTypeChanged())); QObject::connect(m_ui.ClientNameComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(clientNameChanged())); QObject::connect(m_ui.PlugNameComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(changed())); QObject::connect(m_ui.PlugListView, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(customContextMenu(const QPoint&))); QObject::connect(m_ui.PlugListView->itemDelegate(), SIGNAL(commitData(QWidget*)), SLOT(changed())); QObject::connect(m_ui.SocketForwardComboBox, SIGNAL(activated(int)), SLOT(changed())); QObject::connect(m_ui.DialogButtonBox, SIGNAL(accepted()), SLOT(accept())); QObject::connect(m_ui.DialogButtonBox, SIGNAL(rejected()), SLOT(reject())); } // Destructor. qjackctlSocketForm::~qjackctlSocketForm (void) { delete m_pSocketTypeButtonGroup; } // Socket caption utility method. void qjackctlSocketForm::setSocketCaption ( const QString& sSocketCaption ) { m_ui.SocketTabWidget->setTabText(0, sSocketCaption); (m_ui.PlugListView->headerItem())->setText(0, sSocketCaption + ' ' + tr("Plugs / Ports")); } // Socket list enablement. void qjackctlSocketForm::setSocketList ( qjackctlSocketList *pSocketList ) { m_pSocketList = pSocketList; } // Socket new flag. void qjackctlSocketForm::setSocketNew ( bool bSocketNew ) { m_bSocketNew = bSocketNew; } // Pixmap utility methods. void qjackctlSocketForm::setPixmaps ( QPixmap **ppPixmaps ) { m_ppPixmaps = ppPixmaps; } // Socket type and exclusiveness editing enablement. void qjackctlSocketForm::setConnectCount ( int iConnectCount ) { // m_ui.SocketTypeGroupBox->setEnabled(iConnectCount < 1); if (iConnectCount) { switch (m_pSocketTypeButtonGroup->checkedId()) { case 0: // QJACKCTL_SOCKETTYPE_JACK_AUDIO m_ui.MidiRadioButton->setEnabled(false); m_ui.AlsaRadioButton->setEnabled(false); break; case 1: // QJACKCTL_SOCKETTYPE_JACK_MIDI m_ui.AudioRadioButton->setEnabled(false); m_ui.AlsaRadioButton->setEnabled(false); break; case 2: // QJACKCTL_SOCKETTYPE_ALSA_MIDI m_ui.AudioRadioButton->setEnabled(false); m_ui.MidiRadioButton->setEnabled(false); break; } } m_ui.ExclusiveCheckBox->setEnabled(iConnectCount < 2); #ifndef CONFIG_JACK_MIDI m_ui.MidiRadioButton->setEnabled(false); #endif #ifndef CONFIG_ALSA_SEQ m_ui.AlsaRadioButton->setEnabled(false); #endif } // Load dialog controls from socket properties. void qjackctlSocketForm::load ( qjackctlPatchbaySocket *pSocket ) { m_ui.SocketNameLineEdit->setText(pSocket->name()); QRadioButton *pRadioButton = static_cast ( m_pSocketTypeButtonGroup->button(pSocket->type())); if (pRadioButton) pRadioButton->setChecked(true); m_ui.ClientNameComboBox->setEditText(pSocket->clientName()); m_ui.ExclusiveCheckBox->setChecked(pSocket->isExclusive()); m_ui.PlugListView->clear(); QTreeWidgetItem *pPlugItem = NULL; QStringListIterator iter(pSocket->pluglist()); while (iter.hasNext()) { const QString& sPlugName = iter.next(); pPlugItem = new QTreeWidgetItem(m_ui.PlugListView, pPlugItem); if (pPlugItem) { pPlugItem->setText(0, sPlugName); pPlugItem->setFlags(pPlugItem->flags() | Qt::ItemIsEditable); } } socketTypeChanged(); int iItemIndex = 0; if (!pSocket->forward().isEmpty()) { int iItem = m_ui.SocketForwardComboBox->findText(pSocket->forward()); if (iItem >= 0) iItemIndex = iItem; } m_ui.SocketForwardComboBox->setCurrentIndex(iItemIndex); m_iDirtyCount = 0; stabilizeForm(); } // Save dialog controls into socket properties. void qjackctlSocketForm::save ( qjackctlPatchbaySocket *pSocket ) { pSocket->setName(m_ui.SocketNameLineEdit->text()); pSocket->setType(m_pSocketTypeButtonGroup->checkedId()); pSocket->setClientName(m_ui.ClientNameComboBox->currentText()); pSocket->setExclusive(m_ui.ExclusiveCheckBox->isChecked()); pSocket->pluglist().clear(); int iPlugCount = m_ui.PlugListView->topLevelItemCount(); for (int iPlug = 0; iPlug < iPlugCount; ++iPlug) { QTreeWidgetItem *pItem = m_ui.PlugListView->topLevelItem(iPlug); pSocket->addPlug(pItem->text(0)); } if (m_ui.SocketForwardComboBox->currentIndex() > 0) pSocket->setForward(m_ui.SocketForwardComboBox->currentText()); else pSocket->setForward(QString::null); m_iDirtyCount = 0; } // Stabilize current state form. void qjackctlSocketForm::stabilizeForm (void) { m_ui.DialogButtonBox->button( QDialogButtonBox::Ok)->setEnabled(validateForm()); QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) { int iItem = m_ui.PlugListView->indexOfTopLevelItem(pItem); int iItemCount = m_ui.PlugListView->topLevelItemCount(); m_ui.PlugEditPushButton->setEnabled(true); m_ui.PlugRemovePushButton->setEnabled(true); m_ui.PlugUpPushButton->setEnabled(iItem > 0); m_ui.PlugDownPushButton->setEnabled(iItem < iItemCount - 1); } else { m_ui.PlugEditPushButton->setEnabled(false); m_ui.PlugRemovePushButton->setEnabled(false); m_ui.PlugUpPushButton->setEnabled(false); m_ui.PlugDownPushButton->setEnabled(false); } bool bEnabled = !m_ui.PlugNameComboBox->currentText().isEmpty(); if (bEnabled) { bEnabled = (m_ui.PlugListView->findItems( m_ui.PlugNameComboBox->currentText(), Qt::MatchExactly).isEmpty()); } m_ui.PlugAddPushButton->setEnabled(bEnabled); } // Validate form fields. bool qjackctlSocketForm::validateForm (void) { bool bValid = (m_iDirtyCount > 0); bValid = bValid && !m_ui.SocketNameLineEdit->text().isEmpty(); bValid = bValid && !m_ui.ClientNameComboBox->currentText().isEmpty(); bValid = bValid && (m_ui.PlugListView->topLevelItemCount() > 0); return bValid; } // Validate form fields and accept it valid. void qjackctlSocketForm::accept (void) { if (m_pSocketList == NULL) return; if (!validateForm()) return; // Check if a socket with the same name already exists... if (m_bSocketNew) { QListIterator iter(m_pSocketList->sockets()); while (iter.hasNext()) { const QString& sSocketName = iter.next()->socketName(); if (m_ui.SocketNameLineEdit->text() == sSocketName) { QMessageBox::critical(this, tr("Error") + " - " QJACKCTL_SUBTITLE1, tr("A socket named \"%1\" already exists.") .arg(sSocketName), QMessageBox::Cancel); // Reject. return; } } } QDialog::accept(); } void qjackctlSocketForm::reject (void) { bool bReject = true; // Check if there's any pending changes... if (m_iDirtyCount > 0) { switch (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some settings have been changed.\n\n" "Do you want to apply the changes?"), QMessageBox::Apply | QMessageBox::Discard | QMessageBox::Cancel)) { case QMessageBox::Apply: accept(); return; case QMessageBox::Discard: break; default: // Cancel. bReject = false; } } if (bReject) QDialog::reject(); } // Dirty up the current form. void qjackctlSocketForm::changed (void) { m_iDirtyCount++; stabilizeForm(); } // Add new Plug to socket list. void qjackctlSocketForm::addPlug (void) { if (m_ppPixmaps == NULL) return; QString sPlugName = m_ui.PlugNameComboBox->currentText(); if (!sPlugName.isEmpty()) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) #if QT_VERSION >= 0x040200 pItem->setSelected(false); #else m_ui.PlugListView->setItemSelected(pItem, false); #endif pItem = new QTreeWidgetItem(m_ui.PlugListView, pItem); if (pItem) { pItem->setText(0, sPlugName); pItem->setFlags(pItem->flags() | Qt::ItemIsEditable); QPixmap *pXpmPlug = NULL; switch (m_pSocketTypeButtonGroup->checkedId()) { case 0: // QJACKCTL_SOCKETTYPE_JACK_AUDIO pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_AUDIO_PLUG]; break; case 1: // QJACKCTL_SOCKETTYPE_JACK_MIDI case 2: // QJACKCTL_SOCKETTYPE_ALSA_MIDI pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_MIDI_PLUG]; break; } if (pXpmPlug) pItem->setIcon(0, QIcon(*pXpmPlug)); #if QT_VERSION >= 0x040200 pItem->setSelected(true); #else m_ui.PlugListView->setItemSelected(pItem, true); #endif m_ui.PlugListView->setCurrentItem(pItem); } m_ui.PlugNameComboBox->setEditText(QString::null); } clientNameChanged(); } // Rename current selected Plug. void qjackctlSocketForm::editPlug (void) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) m_ui.PlugListView->editItem(pItem, 0); clientNameChanged(); } // Remove current selected Plug. void qjackctlSocketForm::removePlug (void) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) delete pItem; clientNameChanged(); } // Move current selected Plug one position up. void qjackctlSocketForm::moveUpPlug (void) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) { int iItem = m_ui.PlugListView->indexOfTopLevelItem(pItem); if (iItem > 0) { #if QT_VERSION >= 0x040200 pItem->setSelected(false); #else m_ui.PlugListView->setItemSelected(pItem, false); #endif pItem = m_ui.PlugListView->takeTopLevelItem(iItem); m_ui.PlugListView->insertTopLevelItem(iItem - 1, pItem); #if QT_VERSION >= 0x040200 pItem->setSelected(true); #else m_ui.PlugListView->setItemSelected(pItem, true); #endif m_ui.PlugListView->setCurrentItem(pItem); } } changed(); } // Move current selected Plug one position down void qjackctlSocketForm::moveDownPlug (void) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) { int iItem = m_ui.PlugListView->indexOfTopLevelItem(pItem); int iItemCount = m_ui.PlugListView->topLevelItemCount(); if (iItem < iItemCount - 1) { #if QT_VERSION >= 0x040200 pItem->setSelected(false); #else m_ui.PlugListView->setItemSelected(pItem, false); #endif pItem = m_ui.PlugListView->takeTopLevelItem(iItem); m_ui.PlugListView->insertTopLevelItem(iItem + 1, pItem); #if QT_VERSION >= 0x040200 pItem->setSelected(true); #else m_ui.PlugListView->setItemSelected(pItem, true); #endif m_ui.PlugListView->setCurrentItem(pItem); } } changed(); } // Update selected plug one position down void qjackctlSocketForm::selectedPlug (void) { QTreeWidgetItem *pItem = m_ui.PlugListView->currentItem(); if (pItem) m_ui.PlugNameComboBox->setEditText(pItem->text(0)); stabilizeForm(); } // Add new Plug from context menu. void qjackctlSocketForm::activateAddPlugMenu ( QAction *pAction ) { int iIndex = pAction->data().toInt(); if (iIndex >= 0 && iIndex < m_ui.PlugNameComboBox->count()) { m_ui.PlugNameComboBox->setCurrentIndex(iIndex); addPlug(); } } // Plug list context menu handler. void qjackctlSocketForm::customContextMenu ( const QPoint& pos ) { int iItem = 0; int iItemCount = 0; QTreeWidgetItem *pItem = m_ui.PlugListView->itemAt(pos); if (pItem == NULL) pItem = m_ui.PlugListView->currentItem(); if (pItem) { iItem = m_ui.PlugListView->indexOfTopLevelItem(pItem); iItemCount = m_ui.PlugListView->topLevelItemCount(); } QMenu menu(this); QAction *pAction; // Build the add plug sub-menu... QMenu *pAddPlugMenu = menu.addMenu( QIcon(":/images/add1.png"), tr("Add Plug")); int iIndex = 0; for (iIndex = 0; iIndex < m_ui.PlugNameComboBox->count(); iIndex++) { pAction = pAddPlugMenu->addAction( m_ui.PlugNameComboBox->itemText(iIndex)); pAction->setData(iIndex); } QObject::connect(pAddPlugMenu, SIGNAL(triggered(QAction*)), SLOT(activateAddPlugMenu(QAction*))); pAddPlugMenu->setEnabled(iIndex > 0); // Build the plug context menu... bool bEnabled = (pItem != NULL); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("Edit"), this, SLOT(editPlug())); pAction->setEnabled(bEnabled); pAction = menu.addAction(QIcon(":/images/remove1.png"), tr("Remove"), this, SLOT(removePlug())); pAction->setEnabled(bEnabled); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/up1.png"), tr("Move Up"), this, SLOT(moveUpPlug())); pAction->setEnabled(bEnabled && iItem > 0); pAction = menu.addAction(QIcon(":/images/down1.png"), tr("Move Down"), this, SLOT(moveDownPlug())); pAction->setEnabled(bEnabled && iItem < iItemCount - 1); menu.exec((m_ui.PlugListView->viewport())->mapToGlobal(pos)); } void qjackctlSocketForm::updateJackClients ( int iSocketType ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; int iPixmap = QJACKCTL_XPM_AUDIO_CLIENT; #ifdef CONFIG_JACK_MIDI if (iSocketType == QJACKCTL_SOCKETTYPE_JACK_MIDI) { pszJackPortType = JACK_DEFAULT_MIDI_TYPE; iPixmap = QJACKCTL_XPM_MIDI_CLIENT; } #endif bool bReadable = m_pSocketList->isReadable(); const QIcon icon(*m_ppPixmaps[iPixmap]); // Grab all client ports. const char **ppszClientPorts = jack_get_ports( pJackClient, NULL, pszJackPortType, (bReadable ? JackPortIsOutput : JackPortIsInput)); if (ppszClientPorts) { int iClientPort = 0; while (ppszClientPorts[iClientPort]) { QString sClientPort = QString::fromUtf8(ppszClientPorts[iClientPort]); int iColon = sClientPort.indexOf(':'); if (iColon >= 0) { QString sClientName = qjackctlClientAlias::escapeRegExpDigits( sClientPort.left(iColon)); bool bExists = false; for (int i = 0; i < m_ui.ClientNameComboBox->count() && !bExists; i++) bExists = (sClientName == m_ui.ClientNameComboBox->itemText(i)); if (!bExists) { m_ui.ClientNameComboBox->addItem(icon, sClientName); } } iClientPort++; } ::free(ppszClientPorts); } } // ALSA client names refreshner. void qjackctlSocketForm::updateAlsaClients ( int iSocketType ) { if (iSocketType != QJACKCTL_SOCKETTYPE_ALSA_MIDI) return; #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return; bool bReadable = m_pSocketList->isReadable(); const QIcon icon(*m_ppPixmaps[QJACKCTL_XPM_MIDI_CLIENT]); // Readd all subscribers... snd_seq_client_info_t *pClientInfo; snd_seq_port_info_t *pPortInfo; unsigned int uiAlsaFlags; if (bReadable) uiAlsaFlags = SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; else uiAlsaFlags = SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; snd_seq_client_info_alloca(&pClientInfo); snd_seq_port_info_alloca(&pPortInfo); snd_seq_client_info_set_client(pClientInfo, -1); while (snd_seq_query_next_client(pAlsaSeq, pClientInfo) >= 0) { int iAlsaClient = snd_seq_client_info_get_client(pClientInfo); QString sClient = qjackctlClientAlias::escapeRegExpDigits( QString::fromUtf8(snd_seq_client_info_get_name(pClientInfo))); if (iAlsaClient > 0) { bool bExists = false; snd_seq_port_info_set_client(pPortInfo, iAlsaClient); snd_seq_port_info_set_port(pPortInfo, -1); while (!bExists && snd_seq_query_next_port(pAlsaSeq, pPortInfo) >= 0) { unsigned int uiPortCapability = snd_seq_port_info_get_capability(pPortInfo); if (((uiPortCapability & uiAlsaFlags) == uiAlsaFlags) && ((uiPortCapability & SND_SEQ_PORT_CAP_NO_EXPORT) == 0)) { for (int i = 0; i < m_ui.ClientNameComboBox->count() && !bExists; i++) bExists = (sClient == m_ui.ClientNameComboBox->itemText(i)); if (!bExists) { m_ui.ClientNameComboBox->addItem(icon, sClient); bExists = true; } } } } } #endif // CONFIG_ALSA_SEQ } // Socket type change slot. void qjackctlSocketForm::socketTypeChanged (void) { if (m_ppPixmaps == NULL) return; if (m_pSocketList == NULL) return; QString sOldClientName = m_ui.ClientNameComboBox->currentText(); m_ui.ClientNameComboBox->clear(); QPixmap *pXpmSocket = NULL; QPixmap *pXpmPlug = NULL; bool bReadable = m_pSocketList->isReadable(); int iSocketType = m_pSocketTypeButtonGroup->checkedId(); switch (iSocketType) { case 0: // QJACKCTL_SOCKETTYPE_JACK_AUDIO if (m_ui.ExclusiveCheckBox->isChecked()) pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_AUDIO_SOCKET_X]; else pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_AUDIO_SOCKET]; m_ui.SocketTabWidget->setTabIcon(0, QIcon(*pXpmSocket)); pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_AUDIO_PLUG]; updateJackClients(QJACKCTL_SOCKETTYPE_JACK_AUDIO); break; case 1: // QJACKCTL_SOCKETTYPE_JACK_MIDI if (m_ui.ExclusiveCheckBox->isChecked()) pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET_X]; else pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET]; m_ui.SocketTabWidget->setTabIcon(0, QIcon(*pXpmSocket)); pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_MIDI_PLUG]; updateJackClients(QJACKCTL_SOCKETTYPE_JACK_MIDI); break; case 2: // QJACKCTL_SOCKETTYPE_ALSA_MIDI if (m_ui.ExclusiveCheckBox->isChecked()) pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET_X]; else pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET]; m_ui.SocketTabWidget->setTabIcon(0, QIcon(*pXpmSocket)); pXpmPlug = m_ppPixmaps[QJACKCTL_XPM_MIDI_PLUG]; updateAlsaClients(QJACKCTL_SOCKETTYPE_ALSA_MIDI); break; } m_ui.ClientNameComboBox->setEditText(sOldClientName); clientNameChanged(); if (pXpmPlug) { int iItemCount = m_ui.PlugListView->topLevelItemCount(); for (int iItem = 0; iItem < iItemCount; ++iItem) { QTreeWidgetItem *pItem = m_ui.PlugListView->topLevelItem(iItem); pItem->setIcon(0, QIcon(*pXpmPlug)); } } // Now the socket forward list... m_ui.SocketForwardComboBox->clear(); m_ui.SocketForwardComboBox->addItem(tr("(None)")); if (!bReadable) { QListIterator iter(m_pSocketList->sockets()); while (iter.hasNext()) { qjackctlSocketItem *pSocketItem = iter.next(); if (pSocketItem->socketType() == iSocketType && pSocketItem->socketName() != m_ui.SocketNameLineEdit->text()) { switch (iSocketType) { case 0: // QJACKCTL_SOCKETTYPE_JACK_AUDIO if (pSocketItem->isExclusive()) pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_AUDIO_SOCKET_X]; else pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_AUDIO_SOCKET]; break; case 1: // QJACKCTL_SOCKETTYPE_JACK_MIDI case 2: // QJACKCTL_SOCKETTYPE_ALSA_MIDI if (pSocketItem->isExclusive()) pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET_X]; else pXpmSocket = m_ppPixmaps[QJACKCTL_XPM_MIDI_SOCKET]; break; } m_ui.SocketForwardComboBox->addItem( QIcon(*pXpmSocket), pSocketItem->socketName()); } } } bool bEnabled = (m_ui.SocketForwardComboBox->count() > 1); m_ui.SocketForwardTextLabel->setEnabled(bEnabled); m_ui.SocketForwardComboBox->setEnabled(bEnabled); } // JACK client plugs refreshner. void qjackctlSocketForm::updateJackPlugs ( int iSocketType ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; int iPixmap = QJACKCTL_XPM_AUDIO_PLUG; #ifdef CONFIG_JACK_MIDI if (iSocketType == QJACKCTL_SOCKETTYPE_JACK_MIDI) { pszJackPortType = JACK_DEFAULT_MIDI_TYPE; iPixmap = QJACKCTL_XPM_MIDI_PLUG; } #endif QString sClientName = m_ui.ClientNameComboBox->currentText(); if (sClientName.isEmpty()) return; QRegExp rxClientName(sClientName); bool bReadable = m_pSocketList->isReadable(); const QIcon icon(*m_ppPixmaps[iPixmap]); const char **ppszClientPorts = jack_get_ports( pJackClient, NULL, pszJackPortType, (bReadable ? JackPortIsOutput : JackPortIsInput)); if (ppszClientPorts) { int iClientPort = 0; while (ppszClientPorts[iClientPort]) { QString sClientPort = QString::fromUtf8(ppszClientPorts[iClientPort]); int iColon = sClientPort.indexOf(':'); if (iColon >= 0 && rxClientName.exactMatch(sClientPort.left(iColon))) { QString sPort = qjackctlClientAlias::escapeRegExpDigits( sClientPort.right(sClientPort.length() - iColon - 1)); if (m_ui.PlugListView->findItems(sPort, Qt::MatchExactly).isEmpty()) m_ui.PlugNameComboBox->addItem(icon, sPort); } iClientPort++; } ::free(ppszClientPorts); } } // ALSA client plugs refreshner. void qjackctlSocketForm::updateAlsaPlugs ( int iSocketType ) { if (iSocketType != QJACKCTL_SOCKETTYPE_ALSA_MIDI) return; #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return; QString sClientName = m_ui.ClientNameComboBox->currentText(); if (sClientName.isEmpty()) return; QRegExp rxClientName(sClientName); bool bReadable = m_pSocketList->isReadable(); const QIcon icon(*m_ppPixmaps[QJACKCTL_XPM_MIDI_PLUG]); // Fill sequencer plugs... snd_seq_client_info_t *pClientInfo; snd_seq_port_info_t *pPortInfo; unsigned int uiAlsaFlags; if (bReadable) uiAlsaFlags = SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; else uiAlsaFlags = SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; snd_seq_client_info_alloca(&pClientInfo); snd_seq_port_info_alloca(&pPortInfo); snd_seq_client_info_set_client(pClientInfo, -1); while (snd_seq_query_next_client(pAlsaSeq, pClientInfo) >= 0) { int iAlsaClient = snd_seq_client_info_get_client(pClientInfo); QString sClient = QString::fromUtf8( snd_seq_client_info_get_name(pClientInfo)); if (iAlsaClient > 0 && rxClientName.exactMatch(sClient)) { snd_seq_port_info_set_client(pPortInfo, iAlsaClient); snd_seq_port_info_set_port(pPortInfo, -1); while (snd_seq_query_next_port(pAlsaSeq, pPortInfo) >= 0) { unsigned int uiPortCapability = snd_seq_port_info_get_capability(pPortInfo); if (((uiPortCapability & uiAlsaFlags) == uiAlsaFlags) && ((uiPortCapability & SND_SEQ_PORT_CAP_NO_EXPORT) == 0)) { QString sPort = qjackctlClientAlias::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); } } } } #endif // CONFIG_ALSA_SEQ } // Update client list if available. void qjackctlSocketForm::clientNameChanged (void) { if (m_ppPixmaps == NULL) return; if (m_pSocketList == NULL) return; m_ui.PlugNameComboBox->clear(); int iSocketType = m_pSocketTypeButtonGroup->checkedId(); switch (iSocketType) { case 0: updateJackPlugs(QJACKCTL_SOCKETTYPE_JACK_AUDIO); break; case 1: updateJackPlugs(QJACKCTL_SOCKETTYPE_JACK_MIDI); break; case 2: updateAlsaPlugs(QJACKCTL_SOCKETTYPE_ALSA_MIDI); break; } changed(); } // end of qjackctlSocketForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSystemTray.h0000644000175000001440000000012311353112764021211 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826685.186395 30 ctime=1364826685.186395506 qjackctl-0.3.10/src/qjackctlSystemTray.h0000644000175000001440000000524011353112764020502 0ustar00rncbcusers00000000000000// qjackctlSystemTray.h // /**************************************************************************** Copyright (C) 2003-2010, 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 __qjackctlSystemTray_h #define __qjackctlSystemTray_h #include #if QT_VERSION >= 0x040200 #define QJACKCTL_QT4_SYSTEM_TRAY #endif #ifdef QJACKCTL_QT4_SYSTEM_TRAY #include #else #include #endif //---------------------------------------------------------------------------- // qjackctlSystemTray -- Custom system tray widget. #ifdef QJACKCTL_QT4_SYSTEM_TRAY class qjackctlSystemTray : public QSystemTrayIcon #else class qjackctlSystemTray : public QWidget #endif { Q_OBJECT public: // Constructor. qjackctlSystemTray(QWidget *pParent = 0); // Default destructor. ~qjackctlSystemTray(); // Background mask methods. void setBackground(const QColor& background); const QColor& background() const; // Set system tray icon overlay. void setPixmapOverlay(const QPixmap& pmOverlay); const QPixmap& pixmapOverlay() const; // System tray icon/pixmaps update method. void updatePixmap(); #ifdef QJACKCTL_QT4_SYSTEM_TRAY // Redirect to hide. void close(); #endif signals: // Clicked signal. void clicked(); // Xrun reset signal. void middleClicked(); // Context menu signal. void contextMenuRequested(const QPoint& pos); #ifdef QJACKCTL_QT4_SYSTEM_TRAY protected slots: // Handle systeam tray activity. void activated(QSystemTrayIcon::ActivationReason); #else protected: // Self-drawable methods. void paintEvent(QPaintEvent *); // Overriden mouse event method. void mousePressEvent(QMouseEvent *); #endif private: // Instance pixmap and background color. #ifdef QJACKCTL_QT4_SYSTEM_TRAY QIcon m_icon; #endif QPixmap m_pixmap; QPixmap m_pixmapOverlay; QColor m_background; }; #endif // __qjackctlSystemTray_h // end of qjackctlSystemTray.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctl.desktop.in0000644000175000001440000000012411577213623021000 xustar000000000000000027 mtime=1308432275.341625 27 atime=1364826685.304395 30 ctime=1364826685.304395508 qjackctl-0.3.10/src/qjackctl.desktop.in0000644000175000001440000000140211577213623020264 0ustar00rncbcusers00000000000000[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; Terminal=false Type=Application X-SuSE-translate=true qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAboutForm.cpp0000644000175000001440000000012411377433667021335 xustar000000000000000027 mtime=1274951607.049856 27 atime=1364826685.230395 30 ctime=1364826685.230395507 qjackctl-0.3.10/src/qjackctlAboutForm.cpp0000644000175000001440000001117511377433667020631 0ustar00rncbcusers00000000000000// qjackctlAboutForm.cpp // /**************************************************************************** Copyright (C) 2003-2010, 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 "qjackctlAboutForm.h" #include #ifdef CONFIG_JACK_VERSION #include #endif //---------------------------------------------------------------------------- // qjackctlAboutForm -- UI wrapper form. // Constructor. qjackctlAboutForm::qjackctlAboutForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QDialog(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); // Stuff the about box... QString sText = "


\n"; sText += "" + tr(QJACKCTL_SUBTITLE) + "
\n"; sText += "
\n"; sText += tr("Version") + ": " QJACKCTL_VERSION "
\n"; sText += tr("Build") + ": " __DATE__ " " __TIME__ "
\n"; #ifdef CONFIG_JACK_VERSION sText += "
\n"; sText += tr("Using: JACK %1").arg(jack_get_version_string()); sText += "
\n"; #endif #ifdef CONFIG_DEBUG sText += ""; sText += tr("Debugging option enabled."); sText += "
\n"; #endif #ifndef CONFIG_SYSTEM_TRAY sText += ""; sText += tr("System tray disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_TRANSPORT sText += ""; sText += tr("Transport status control disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_REALTIME sText += ""; sText += tr("Realtime status disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_XRUN_DELAY sText += ""; sText += tr("XRUN delay status disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_MAX_DELAY sText += ""; sText += tr("Maximum delay status disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_PORT_ALIASES sText += ""; sText += tr("JACK Port aliases support disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_MIDI sText += ""; sText += tr("JACK MIDI support disabled."); sText += "
\n"; #endif #ifndef CONFIG_JACK_SESSION sText += ""; sText += tr("JACK Session support disabled."); sText += "
"; #endif #ifndef CONFIG_ALSA_SEQ #if !defined(WIN32) sText += ""; sText += tr("ALSA/MIDI sequencer support disabled."); sText += "
\n"; #endif #endif #ifndef CONFIG_DBUS #if !defined(WIN32) sText += ""; sText += tr("D-Bus interface support disabled."); sText += "
\n"; #endif #endif sText += "
\n"; sText += tr("Website") + ": " QJACKCTL_WEBSITE "
\n"; sText += "
\n"; sText += ""; sText += QJACKCTL_COPYRIGHT "
\n"; sText += "
\n"; sText += tr("This program is free software; you can redistribute it and/or modify it") + "
\n"; sText += tr("under the terms of the GNU General Public License version 2 or later."); sText += "
"; sText += "

\n"; #if QT_VERSION >= 0x040200 m_ui.AboutTextView->setText(sText); #else m_ui.AboutTextView->setHtml(sText); #endif // UI connections... QObject::connect(m_ui.AboutQtButton, SIGNAL(clicked()), SLOT(aboutQt())); QObject::connect(m_ui.ClosePushButton, SIGNAL(clicked()), SLOT(close())); } // Destructor. qjackctlAboutForm::~qjackctlAboutForm (void) { } // About Qt request. void qjackctlAboutForm::aboutQt() { QMessageBox::aboutQt(this); } // end of qjackctlAboutForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSessionForm.h0000644000175000001440000000012312113620673021332 xustar000000000000000026 mtime=1362043323.43292 27 atime=1364826685.304395 30 ctime=1364826685.304395508 qjackctl-0.3.10/src/qjackctlSessionForm.h0000644000175000001440000001161012113620673020621 0ustar00rncbcusers00000000000000// qjackctlSessionForm.h // /**************************************************************************** Copyright (C) 2003-2013, 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 __qjackctlSessionForm_h #define __qjackctlSessionForm_h #include #if QT_VERSION < 0x040200 #define setAllColumnsShowFocus(x) parent() #endif #include "ui_qjackctlSessionForm.h" #include #include // Forward declarations. class qjackctlSession; class qjackctlSetup; class QMenu; class QIcon; class QLineEdit; class QToolButton; //------------------------------------------------------------------------- // qjackctlSessionInfraClientItemEditor class qjackctlSessionInfraClientItemEditor : public QWidget { Q_OBJECT public: // Constructor. qjackctlSessionInfraClientItemEditor( QWidget *pParent, const QModelIndex& index); // Shortcut text accessors. void setText(const QString& sText); QString text() const; // Default (initial) shortcut text accessors. void setDefaultText(const QString& sDefaultText) { m_sDefaultText = sDefaultText; } const QString& defaultText() const { return m_sDefaultText; } signals: void finishSignal(); protected slots: void browseSlot(); void resetSlot(); void finishSlot(); private: // Instance variables. QModelIndex m_index; QLineEdit *m_pItemEdit; QToolButton *m_pBrowseButton; QToolButton *m_pResetButton; QString m_sDefaultText; }; //------------------------------------------------------------------------- // qjackctlSessionInfraClientItemDelegate class qjackctlSessionInfraClientItemDelegate : public QItemDelegate { Q_OBJECT public: // Constructor. qjackctlSessionInfraClientItemDelegate(QObject *pParent = NULL); protected: QWidget *createEditor(QWidget *pParent, const QStyleOptionViewItem& option, const QModelIndex& index) const; void setEditorData(QWidget *pEditor, const QModelIndex &index) const; void setModelData(QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex& index) const; protected slots: void commitEditor(); }; //---------------------------------------------------------------------------- // qjackctlSessionForm -- UI wrapper form. class qjackctlSessionForm : public QWidget { Q_OBJECT public: // Constructor. qjackctlSessionForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlSessionForm(); // Global setup method. void setup(qjackctlSetup *pSetup); // Maybe ask whether we can close. bool queryClose(); // Recent session directories and save type accessors. const QStringList& sessionDirs() const; bool isSaveSessionVersion() const; // Recent menu accessor. QMenu *recentMenu() const; // Save menu accessor. QMenu *saveMenu() const; void stabilizeForm(bool bEnabled); public slots: void loadSession(); void saveSessionSave(); void saveSessionSaveAndQuit(); void saveSessionSaveTemplate(); void saveSessionVersion(bool); void updateSession(); protected slots: void recentSession(); void updateRecentMenu(); void clearRecentMenu(); void sessionViewContextMenu(const QPoint& pos); void addInfraClient(); void editInfraClient(); void editInfraClientCommit(); void removeInfraClient(); void selectInfraClient(); void updateInfraClients(); void infraClientContextMenu(const QPoint& pos); protected: void showEvent(QShowEvent *); void hideEvent(QHideEvent *); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); void saveSessionEx(int iSessionType = 0); void loadSessionDir(const QString& sSessionDir); void saveSessionDir(const QString& sSessionDir, int iSessionType = 0); void updateRecent(const QString& sSessionDir); void updateSessionView(); static QIcon iconStatus(const QIcon& icon, bool bStatus); private: // The Qt-designer UI struct... Ui::qjackctlSessionForm m_ui; // Common (sigleton) session object. qjackctlSession *m_pSession; // Recent session menu. QMenu *m_pRecentMenu; // Save session menu. QMenu *m_pSaveMenu; // Setup options. qjackctlSetup *m_pSetup; // Session directory history. QStringList m_sessionDirs; }; #endif // __qjackctlSessionForm_h // end of qjackctlSessionForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayForm.ui0000644000175000001440000000012411533267321021633 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826684.891395 30 ctime=1364826684.892395501 qjackctl-0.3.10/src/qjackctlPatchbayForm.ui0000644000175000001440000004467011533267321021135 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2011, 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. qjackctlPatchbayForm 0 0 520 320 1 1 0 0 Patchbay - JACK Audio Connection Kit :/images/patchbay1.png 4 4 Qt::Horizontal Qt::Horizontal QSizePolicy::Fixed 80 8 4 4 7 7 0 0 Qt::TabFocus Move currently selected output socket down one position Down :/images/down1.png Create a new output socket Add... :/images/add1.png Qt::Vertical QSizePolicy::Expanding 8 42 Edit currently selected input socket properties Edit... :/images/edit1.png Qt::Vertical QSizePolicy::Expanding 8 42 Move currently selected output socket up one position Up :/images/up1.png Remove currently selected output socket Remove :/images/remove1.png Duplicate (copy) currently selected output socket Copy... :/images/copy1.png Move currently selected output socket down one position Down :/images/down1.png Remove currently selected input socket Remove :/images/remove1.png Duplicate (copy) currently selected input socket Copy... :/images/copy1.png Create a new input socket Add... :/images/add1.png Edit currently selected output socket properties Edit... :/images/edit1.png Move currently selected output socket up one position Up :/images/up1.png Qt::Horizontal QSizePolicy::Fixed 80 8 4 4 Connect currently selected sockets &Connect :/images/connect1.png Alt+C Disconnect currently selected sockets &Disconnect :/images/disconnect1.png Alt+D Disconnect all currently connected sockets Disconnect &All :/images/disconnect1.png Alt+A Qt::Horizontal QSizePolicy::Expanding 8 8 Expand all items E&xpand All :/images/expandall1.png Alt+X Qt::Horizontal QSizePolicy::Expanding 8 8 Refresh current patchbay view &Refresh :/images/refresh1.png Alt+R true 4 4 Create a new patchbay profile &New :/images/new1.png Alt+N false Load patchbay profile &Load... :/images/open1.png Alt+L false Save current patchbay profile &Save... :/images/save1.png Alt+S false 7 5 0 0 75 true Current (recent) patchbay profile(s) Toggle activation of current patchbay profile Acti&vate :/images/apply1.png Alt+V true false qjackctlPatchbayView QWidget
qjackctlPatchbay.h
NewPatchbayPushButton LoadPatchbayPushButton SavePatchbayPushButton PatchbayComboBox ActivatePatchbayPushButton OSocketAddPushButton OSocketEditPushButton OSocketCopyPushButton OSocketRemovePushButton OSocketMoveUpPushButton OSocketMoveDownPushButton PatchbayView ISocketAddPushButton ISocketEditPushButton ISocketCopyPushButton ISocketRemovePushButton ISocketMoveUpPushButton ISocketMoveDownPushButton ConnectPushButton DisconnectPushButton DisconnectAllPushButton ExpandAllPushButton RefreshPushButton
qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnectionsForm.ui0000644000175000001440000000012411533267321022362 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826685.231395 30 ctime=1364826685.231395507 qjackctl-0.3.10/src/qjackctlConnectionsForm.ui0000644000175000001440000004324011533267321021654 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2011, 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. qjackctlConnectionsForm 0 0 480 320 1 1 0 0 Connections - JACK Audio Connection Kit :/images/connections1.png 4 4 0 Audio 4 4 7 7 0 0 Qt::TabFocus 4 4 Connect currently selected ports &Connect :/images/connect1.png Alt+C Disconnect currently selected ports &Disconnect :/images/disconnect1.png Alt+D Disconnect all currently connected ports Disconnect &All :/images/disconnectall1.png Alt+A Qt::Horizontal QSizePolicy::Expanding 8 8 Expand all client ports E&xpand All :/images/expandall1.png Alt+X Qt::Horizontal QSizePolicy::Expanding 8 8 Refresh current connections view &Refresh :/images/refresh1.png Alt+R MIDI 4 4 7 7 0 0 Qt::TabFocus 4 4 Connect currently selected ports &Connect :/images/connect1.png Alt+C Disconnect currently selected ports &Disconnect :/images/disconnect1.png Alt+D Disconnect all currently connected ports Disconnect &All :/images/disconnectall1.png Alt+A Qt::Horizontal QSizePolicy::Expanding 8 8 Expand all client ports E&xpand All :/images/expandall1.png Alt+X Qt::Horizontal QSizePolicy::Expanding 8 8 Refresh current connections view &Refresh :/images/refresh1.png Alt+R ALSA 4 4 7 7 0 0 Qt::TabFocus 4 4 Connect currently selected ports &Connect :/images/connect1.png Alt+C Disconnect currently selected ports &Disconnect :/images/disconnect1.png Alt+D Disconnect all currently connected ports Disconnect &All :/images/disconnectall1.png Alt+A Qt::Horizontal QSizePolicy::Expanding 8 8 Expand all client ports E&xpand All :/images/expandall1.png Alt+X Qt::Horizontal QSizePolicy::Expanding 8 8 Refresh current connections view &Refresh :/images/refresh1.png Alt+R qjackctlConnectView QWidget
qjackctlConnect.h
ConnectionsTabWidget AudioConnectView AudioConnectPushButton AudioDisconnectPushButton AudioDisconnectAllPushButton AudioExpandAllPushButton AudioRefreshPushButton MidiConnectView MidiConnectPushButton MidiDisconnectPushButton MidiDisconnectAllPushButton MidiExpandAllPushButton MidiRefreshPushButton AlsaConnectView AlsaConnectPushButton AlsaDisconnectPushButton AlsaDisconnectAllPushButton AlsaExpandAllPushButton AlsaRefreshPushButton
qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSystemTray.cpp0000644000175000001440000000012311353112764021544 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.456395 30 ctime=1364826684.456395494 qjackctl-0.3.10/src/qjackctlSystemTray.cpp0000644000175000001440000001756011353112764021045 0ustar00rncbcusers00000000000000// qjackctlSystemTray.cpp // /**************************************************************************** Copyright (C) 2003-2010, 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 "qjackctlSystemTray.h" #include #include #if QT_VERSION < 0x040500 namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); #if QT_VERSION < 0x040200 const WindowFlags CustomizeWindowHint = WindowFlags(0x02000000); #endif } #endif #ifndef QJACKCTL_QT4_SYSTEM_TRAY #include #include #if defined(Q_WS_X11) #include #include #include // System Tray Protocol Specification opcodes. #define SYSTEM_TRAY_REQUEST_DOCK 0 #define SYSTEM_TRAY_BEGIN_MESSAGE 1 #define SYSTEM_TRAY_CANCEL_MESSAGE 2 #endif // Q_WS_X11 #endif //---------------------------------------------------------------------------- // qjackctlSystemTray -- Custom system tray widget. #ifdef QJACKCTL_QT4_SYSTEM_TRAY // Constructor. qjackctlSystemTray::qjackctlSystemTray ( QWidget *pParent ) : QSystemTrayIcon(pParent) { // Set things inherited... if (pParent) { m_icon = pParent->windowIcon(); QSystemTrayIcon::setIcon(m_icon); QSystemTrayIcon::setToolTip(pParent->windowTitle()); } QObject::connect(this, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(activated(QSystemTrayIcon::ActivationReason))); setBackground(Qt::transparent); QSystemTrayIcon::show(); } // Redirect to hide. void qjackctlSystemTray::close (void) { QSystemTrayIcon::hide(); } // Handle systeam tray activity. void qjackctlSystemTray::activated ( QSystemTrayIcon::ActivationReason reason ) { switch (reason) { case QSystemTrayIcon::Context: emit contextMenuRequested(QCursor::pos()); break; case QSystemTrayIcon::Trigger: emit clicked(); break; case QSystemTrayIcon::MiddleClick: emit middleClicked(); break; case QSystemTrayIcon::DoubleClick: case QSystemTrayIcon::Unknown: default: break; } } #else // Constructor. qjackctlSystemTray::qjackctlSystemTray ( QWidget *pParent ) : QWidget(pParent, Qt::Window | Qt::CustomizeWindowHint | Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint) { #if QT_VERSION >= 0x040200 QWidget::setAttribute(Qt::WA_AlwaysShowToolTips); #endif // QWidget::setAttribute(Qt::WA_NoSystemBackground); // QWidget::setBackgroundRole(QPalette::NoRole); // QWidget::setAutoFillBackground(true); QWidget::setFixedSize(22, 22); // QWidget::setMinimumSize(22, 22); #if defined(Q_WS_X11) Display *dpy = QX11Info::display(); WId trayWin = winId(); // System Tray Protocol Specification. Screen *screen = XDefaultScreenOfDisplay(dpy); int iScreen = XScreenNumberOfScreen(screen); char szAtom[32]; snprintf(szAtom, sizeof(szAtom), "_NET_SYSTEM_TRAY_S%d", iScreen); Atom selectionAtom = XInternAtom(dpy, szAtom, false); XGrabServer(dpy); Window managerWin = XGetSelectionOwner(dpy, selectionAtom); if (managerWin != None) XSelectInput(dpy, managerWin, StructureNotifyMask); XUngrabServer(dpy); XFlush(dpy); if (managerWin != None) { XEvent ev; memset(&ev, 0, sizeof(ev)); ev.xclient.type = ClientMessage; ev.xclient.window = managerWin; ev.xclient.message_type = XInternAtom(dpy, "_NET_SYSTEM_TRAY_OPCODE", false); ev.xclient.format = 32; ev.xclient.data.l[0] = CurrentTime; ev.xclient.data.l[1] = SYSTEM_TRAY_REQUEST_DOCK; ev.xclient.data.l[2] = trayWin; ev.xclient.data.l[3] = 0; ev.xclient.data.l[4] = 0; XSendEvent(dpy, managerWin, false, NoEventMask, &ev); XSync(dpy, false); } // Follwing simple KDE specs: Atom trayAtom; // For older KDE's (hopefully)... int data = 1; trayAtom = XInternAtom(dpy, "KWM_DOCKWINDOW", false); XChangeProperty(dpy, trayWin, trayAtom, trayAtom, 32, PropModeReplace, (unsigned char *) &data, 1); // For not so older KDE's... WId forWin = pParent ? pParent->topLevelWidget()->winId() : QX11Info::appRootWindow(); trayAtom = XInternAtom(dpy, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", false); XChangeProperty(dpy, trayWin, trayAtom, XA_WINDOW, 32, PropModeReplace, (unsigned char *) &forWin, 1); #endif // Q_WS_X11 // Set things inherited... if (pParent) { QWidget::setWindowIcon(pParent->windowIcon()); QWidget::setToolTip(pParent->windowTitle()); } setBackground(Qt::transparent); } #endif // Default destructor. qjackctlSystemTray::~qjackctlSystemTray (void) { } // System tray icon/pixmaps update method. void qjackctlSystemTray::updatePixmap (void) { // Renitialize icon as fit... #ifdef QJACKCTL_QT4_SYSTEM_TRAY m_pixmap = m_icon.pixmap(22, 22); #else m_pixmap = QWidget::windowIcon().pixmap(QWidget::size()); #endif // Merge with the overlay pixmap... if (!m_pixmapOverlay.mask().isNull()) { QBitmap mask = m_pixmap.mask(); QPainter(&mask).drawPixmap(0, 0, m_pixmapOverlay.mask()); m_pixmap.setMask(mask); QPainter(&m_pixmap).drawPixmap(0, 0, m_pixmapOverlay); } #ifdef QJACKCTL_QT4_SYSTEM_TRAY if (m_background != Qt::transparent) { QPixmap pixmap(m_pixmap); m_pixmap.fill(m_background); QPainter(&m_pixmap).drawPixmap(0, 0, pixmap); } // Setup system tray icon directly... QSystemTrayIcon::setIcon(QIcon(m_pixmap)); #else // Setup widget drawable pixmap transparency... if (!m_pixmap.mask().isNull() && m_background == Qt::transparent) { QBitmap mask(m_pixmap.size()); mask.fill(Qt::color0); QBitmap maskPixmap = m_pixmap.mask(); QPainter(&mask).drawPixmap( (mask.width() - maskPixmap.width()) / 2, (mask.height() - maskPixmap.height()) / 2, maskPixmap); QWidget::setMask(mask); } else { QWidget::setMask(QBitmap()); } QWidget::update(); #endif } // Background mask methods. void qjackctlSystemTray::setBackground ( const QColor& background ) { // Set background color, now. m_background = background; #ifndef QJACKCTL_QT4_SYSTEM_TRAY QPalette pal(QWidget::palette()); pal.setColor(QWidget::backgroundRole(), m_background); QWidget::setPalette(pal); #endif updatePixmap(); } const QColor& qjackctlSystemTray::background (void) const { return m_background; } // Set system tray icon overlay. void qjackctlSystemTray::setPixmapOverlay ( const QPixmap& pmOverlay ) { m_pixmapOverlay = pmOverlay; updatePixmap(); } const QPixmap& qjackctlSystemTray::pixmapOverlay (void) const { return m_pixmapOverlay; } #ifndef QJACKCTL_QT4_SYSTEM_TRAY // Self-drawable methods. void qjackctlSystemTray::paintEvent ( QPaintEvent * ) { const QRect& rect = QWidget::rect(); QPainter(this).drawPixmap( rect.x() + (rect.width() - m_pixmap.width()) / 2, rect.y() + (rect.height() - m_pixmap.height()) / 2, m_pixmap); } // Inherited mouse event. void qjackctlSystemTray::mousePressEvent ( QMouseEvent *pMouseEvent ) { if (!QWidget::rect().contains(pMouseEvent->pos())) return; switch (pMouseEvent->button()) { case Qt::LeftButton: // Toggle parent widget visibility. emit clicked(); break; case Qt::MidButton: emit middleClicked(); break; case Qt::RightButton: // Just signal we're on to context menu. emit contextMenuRequested(pMouseEvent->globalPos()); break; default: break; } } #endif // end of qjackctlSystemTray.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayRack.cpp0000644000175000001440000000012411526763337021767 xustar000000000000000027 mtime=1297868511.144179 27 atime=1364826684.547395 30 ctime=1364826684.547395496 qjackctl-0.3.10/src/qjackctlPatchbayRack.cpp0000644000175000001440000012533111526763337021263 0ustar00rncbcusers00000000000000// qjackctlPatchbayRack.cpp // /**************************************************************************** Copyright (C) 2003-2011, 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 "qjackctlPatchbayRack.h" // Aliases accessors. #include "qjackctlConnectAlias.h" #include //---------------------------------------------------------------------- // class qjackctlPatchbaySnapshot -- Patchbay snapshot infrastructure. // #include class qjackctlPatchbaySnapshot { public: // Constructor. qjackctlPatchbaySnapshot() {}; // Cleanup. void clear() { m_hash.clear(); } // Prepare/add snapshot connection item. void append ( const QString& sOClientName, const QString& sOPortName, const QString& sIClientName, const QString& sIPortName ) { Ports& ports = m_hash[sOClientName + ':' + sIClientName]; ports.outs.append(sOPortName); ports.ins.append(sIPortName); } // Commit snapshot into patchbay rack. void commit ( qjackctlPatchbayRack *pRack, int iSocketType ) { QHash::Iterator iter = m_hash.begin(); for ( ; iter != m_hash.end(); ++iter) { const QString& sKey = iter.key(); const QString& sOClient = sKey.section(':', 0, 0); const QString& sIClient = sKey.section(':', 1); Ports& ports = iter.value(); qjackctlPatchbaySocket *pOSocket = get_socket( pRack->osocketlist(), sOClient, ports.outs, iSocketType); qjackctlPatchbaySocket *pISocket = get_socket( pRack->isocketlist(), sIClient, ports.ins, iSocketType); pRack->addCable(new qjackctlPatchbayCable(pOSocket, pISocket)); } m_hash.clear(); } // Find first existing socket. static qjackctlPatchbaySocket *find_socket ( QList& socketlist, const QString& sClientName, int iSocketType ) { QListIterator iter(socketlist); while (iter.hasNext()) { qjackctlPatchbaySocket *pSocket = iter.next(); if (QRegExp(pSocket->clientName()).exactMatch(sClientName) && pSocket->type() == iSocketType) { return pSocket; } } return NULL; } // Add socket plug. static void add_socket ( QList& socketlist, const QString& sClientName, const QString& sPortName, int iSocketType ) { qjackctlPatchbaySocket *pSocket = find_socket(socketlist, sClientName, iSocketType); if (pSocket == NULL) { pSocket = new qjackctlPatchbaySocket(sClientName, qjackctlClientAlias::escapeRegExpDigits(sClientName), iSocketType); socketlist.append(pSocket); } pSocket->addPlug( qjackctlClientAlias::escapeRegExpDigits(sPortName)); } // Get client socket into rack (socket list). static qjackctlPatchbaySocket *get_socket ( QList& socketlist, const QString& sClientName, const QStringList& ports, int iSocketType ) { int iSocket = 0; qjackctlPatchbaySocket *pSocket = NULL; QListIterator iter(socketlist); while (iter.hasNext()) { pSocket = iter.next(); if (QRegExp(pSocket->clientName()).exactMatch(sClientName) && pSocket->type() == iSocketType) { QStringListIterator plug_iter(pSocket->pluglist()); QStringListIterator port_iter(ports); bool bMatch = true; while (bMatch && plug_iter.hasNext() && port_iter.hasNext()) { const QString& sPlug = plug_iter.next(); const QString& sPort = port_iter.next(); bMatch = (QRegExp(sPlug).exactMatch(sPort)); } if (bMatch) return pSocket; iSocket++; } } QString sSocketName = sClientName; if (iSocket > 0) sSocketName += ' ' + QString::number(iSocket + 1); pSocket = new qjackctlPatchbaySocket(sSocketName, qjackctlClientAlias::escapeRegExpDigits(sClientName), iSocketType); QStringListIterator port_iter(ports); while (port_iter.hasNext()) { pSocket->addPlug( qjackctlClientAlias::escapeRegExpDigits(port_iter.next())); } socketlist.append(pSocket); return pSocket; } private: // Snapshot instance variables. struct Ports { QStringList outs; QStringList ins; }; QHash m_hash; }; //---------------------------------------------------------------------- // class qjackctlPatchbaySocket -- Patchbay socket implementation. // // Constructor. qjackctlPatchbaySocket::qjackctlPatchbaySocket ( const QString& sSocketName, const QString& sClientName, int iSocketType ) { m_sSocketName = sSocketName; m_sClientName = sClientName; m_iSocketType = iSocketType; m_bExclusive = false; m_sSocketForward.clear(); } // Default destructor. qjackctlPatchbaySocket::~qjackctlPatchbaySocket (void) { m_pluglist.clear(); } // Socket property accessors. const QString& qjackctlPatchbaySocket::name (void) const { return m_sSocketName; } const QString& qjackctlPatchbaySocket::clientName (void) const { return m_sClientName; } int qjackctlPatchbaySocket::type (void) const { return m_iSocketType; } bool qjackctlPatchbaySocket::isExclusive (void) const { return m_bExclusive; } const QString& qjackctlPatchbaySocket::forward (void) const { return m_sSocketForward; } // Slot property methods. void qjackctlPatchbaySocket::setName ( const QString& sSocketName ) { m_sSocketName = sSocketName; } void qjackctlPatchbaySocket::setClientName ( const QString& sClientName ) { m_sClientName = sClientName; } void qjackctlPatchbaySocket::setType ( int iSocketType ) { m_iSocketType = iSocketType; } void qjackctlPatchbaySocket::setExclusive ( bool bExclusive ) { m_bExclusive = bExclusive; } void qjackctlPatchbaySocket::setForward ( const QString& sSocketForward ) { m_sSocketForward = sSocketForward; } // Plug list primitive methods. void qjackctlPatchbaySocket::addPlug ( const QString& sPlugName ) { m_pluglist.append(sPlugName); } void qjackctlPatchbaySocket::removePlug ( const QString& sPlugName ) { int iPlug = m_pluglist.indexOf(sPlugName); if (iPlug >= 0) m_pluglist.removeAt(iPlug); } // Plug list accessor. QStringList& qjackctlPatchbaySocket::pluglist (void) { return m_pluglist; } // Simple socket type methods. int qjackctlPatchbaySocket::typeFromText ( const QString& sSocketType ) { int iSocketType = QJACKCTL_SOCKETTYPE_DEFAULT; if (sSocketType == "jack-audio" || sSocketType == "audio") iSocketType = QJACKCTL_SOCKETTYPE_JACK_AUDIO; else if (sSocketType == "jack-midi") iSocketType = QJACKCTL_SOCKETTYPE_JACK_MIDI; else if (sSocketType == "alsa-midi" || sSocketType == "midi") iSocketType = QJACKCTL_SOCKETTYPE_ALSA_MIDI; return iSocketType; } QString qjackctlPatchbaySocket::textFromType ( int iSocketType ) { QString sSocketType; switch (iSocketType) { case QJACKCTL_SOCKETTYPE_JACK_AUDIO: sSocketType = "jack-audio"; break; case QJACKCTL_SOCKETTYPE_JACK_MIDI: sSocketType = "jack-midi"; break; case QJACKCTL_SOCKETTYPE_ALSA_MIDI: sSocketType = "alsa-midi"; break; default: break; } return sSocketType; } //---------------------------------------------------------------------- // class qjackctlPatchbaySlot -- Patchbay socket slot implementation. // // Constructor. qjackctlPatchbaySlot::qjackctlPatchbaySlot ( const QString& sSlotName, int iSlotMode ) { m_pOutputSocket = NULL; m_pInputSocket = NULL; m_sSlotName = sSlotName; m_iSlotMode = iSlotMode; } // Default destructor. qjackctlPatchbaySlot::~qjackctlPatchbaySlot (void) { setOutputSocket(NULL); setInputSocket(NULL); } // Slot property accessors. const QString& qjackctlPatchbaySlot::name (void) const { return m_sSlotName; } int qjackctlPatchbaySlot::mode (void) const { return m_iSlotMode; } // Slot property methods. void qjackctlPatchbaySlot::setName ( const QString& sSlotName ) { m_sSlotName = sSlotName; } void qjackctlPatchbaySlot::setMode ( int iSlotMode ) { m_iSlotMode = iSlotMode; } // Socket methods. void qjackctlPatchbaySlot::setOutputSocket ( qjackctlPatchbaySocket *pSocket ) { m_pOutputSocket = pSocket; } void qjackctlPatchbaySlot::setInputSocket ( qjackctlPatchbaySocket *pSocket ) { m_pInputSocket = pSocket; } // Socket accessors. qjackctlPatchbaySocket *qjackctlPatchbaySlot::outputSocket (void) const { return m_pOutputSocket; } qjackctlPatchbaySocket *qjackctlPatchbaySlot::inputSocket (void) const { return m_pInputSocket; } //---------------------------------------------------------------------- // class qjackctlPatchbayCable -- Patchbay cable connection implementation. // // Constructor. qjackctlPatchbayCable::qjackctlPatchbayCable ( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket ) { m_pOutputSocket = pOutputSocket; m_pInputSocket = pInputSocket; } // Default destructor. qjackctlPatchbayCable::~qjackctlPatchbayCable (void) { setOutputSocket(NULL); setInputSocket(NULL); } // Socket methods. void qjackctlPatchbayCable::setOutputSocket ( qjackctlPatchbaySocket *pSocket ) { m_pOutputSocket = pSocket; } void qjackctlPatchbayCable::setInputSocket ( qjackctlPatchbaySocket *pSocket ) { m_pInputSocket = pSocket; } // Socket accessors. qjackctlPatchbaySocket *qjackctlPatchbayCable::outputSocket (void) const { return m_pOutputSocket; } qjackctlPatchbaySocket *qjackctlPatchbayCable::inputSocket (void) const { return m_pInputSocket; } //---------------------------------------------------------------------- // class qjackctlPatchbayRack -- Patchbay rack profile implementation. // // Constructor. qjackctlPatchbayRack::qjackctlPatchbayRack (void) { m_pJackClient = NULL; m_ppszOAudioPorts = NULL; m_ppszIAudioPorts = NULL; m_ppszOMidiPorts = NULL; m_ppszIMidiPorts = NULL; // MIDI connection persistence cache variables. m_pAlsaSeq = NULL; } // Default destructor. qjackctlPatchbayRack::~qjackctlPatchbayRack (void) { clear(); } // Common socket list primitive methods. void qjackctlPatchbayRack::addSocket ( QList& socketlist, qjackctlPatchbaySocket *pSocket ) { qjackctlPatchbaySocket *pSocketPtr = findSocket(socketlist, pSocket->name()); if (pSocketPtr) removeSocket(socketlist, pSocketPtr); socketlist.append(pSocket); } void qjackctlPatchbayRack::removeSocket ( QList& socketlist, qjackctlPatchbaySocket *pSocket ) { int iSocket = socketlist.indexOf(pSocket); if (iSocket >= 0) { socketlist.removeAt(iSocket); delete pSocket; } } // Slot list primitive methods. void qjackctlPatchbayRack::addSlot ( qjackctlPatchbaySlot *pSlot ) { qjackctlPatchbaySlot *pSlotPtr = findSlot(pSlot->name()); if (pSlotPtr) removeSlot(pSlotPtr); m_slotlist.append(pSlot); } void qjackctlPatchbayRack::removeSlot ( qjackctlPatchbaySlot *pSlot ) { int iSlot = m_slotlist.indexOf(pSlot); if (iSlot >= 0) { m_slotlist.removeAt(iSlot); delete pSlot; } } // Cable list primitive methods. void qjackctlPatchbayRack::addCable ( qjackctlPatchbayCable *pCable ) { qjackctlPatchbayCable *pCablePtr = findCable(pCable); if (pCablePtr) removeCable(pCablePtr); m_cablelist.append(pCable); } void qjackctlPatchbayRack::removeCable ( qjackctlPatchbayCable *pCable ) { int iCable = m_cablelist.indexOf(pCable); if (iCable >= 0) { m_cablelist.removeAt(iCable); delete pCable; } } // Common socket finders. qjackctlPatchbaySocket *qjackctlPatchbayRack::findSocket ( QList& socketlist, const QString& sSocketName, int iSocketType ) { QListIterator iter(socketlist); while (iter.hasNext()) { qjackctlPatchbaySocket *pSocket = iter.next(); if (sSocketName == pSocket->name() && (iSocketType == QJACKCTL_SOCKETTYPE_DEFAULT || iSocketType == pSocket->type())) return pSocket; } return NULL; } // Patchbay socket slot finders. qjackctlPatchbaySlot *qjackctlPatchbayRack::findSlot ( const QString& sSlotName ) { QListIterator iter(m_slotlist); while (iter.hasNext()) { qjackctlPatchbaySlot *pSlot = iter.next(); if (sSlotName == pSlot->name()) return pSlot; } return NULL; } // Cable finders. qjackctlPatchbayCable *qjackctlPatchbayRack::findCable ( const QString& sOutputSocket, const QString& sInputSocket ) { qjackctlPatchbaySocket *pSocket; QListIterator iter(m_cablelist); while (iter.hasNext()) { qjackctlPatchbayCable *pCable = iter.next(); pSocket = pCable->outputSocket(); if (pSocket && sOutputSocket == pSocket->name()) { pSocket = pCable->inputSocket(); if (pSocket && sInputSocket == pSocket->name()) return pCable; } } return NULL; } qjackctlPatchbayCable *qjackctlPatchbayRack::findCable ( qjackctlPatchbayCable *pCablePtr ) { QString sOutputSocket; if (pCablePtr->outputSocket()) sOutputSocket = pCablePtr->outputSocket()->name(); QString sInputSocket; if (pCablePtr->inputSocket()) sInputSocket = pCablePtr->inputSocket()->name(); return findCable(sOutputSocket, sInputSocket); } // Cable finder (logical matching by client/port names). qjackctlPatchbayCable *qjackctlPatchbayRack::findCable ( const QString& sOClientName, const QString& sOPortName, const QString& sIClientName, const QString& sIPortName, int iSocketType ) { // This is a regex prefix needed for ALSA MDII // as client and port names include id-number+colon... QString sPrefix; if (iSocketType == QJACKCTL_SOCKETTYPE_ALSA_MIDI) sPrefix = "[0-9]+:"; // Scan from output-socket list... QListIterator osocket(m_osocketlist); while (osocket.hasNext()) { qjackctlPatchbaySocket *pOSocket = osocket.next(); if (pOSocket->type() != iSocketType) continue; // Output socket client name match? if (!QRegExp(sPrefix + pOSocket->clientName()) .exactMatch(sOClientName)) continue; // Output plug port names match? QStringListIterator oplug(pOSocket->pluglist()); while (oplug.hasNext()) { if (!QRegExp(sPrefix + oplug.next()) .exactMatch(sOPortName)) continue; // Scan for output-socket cable... QListIterator cable(m_cablelist); while (cable.hasNext()) { qjackctlPatchbayCable *pCable = cable.next(); if (pCable->outputSocket() != pOSocket) continue; qjackctlPatchbaySocket *pISocket = pCable->inputSocket(); // Input socket client name match? if (!QRegExp(sPrefix + pISocket->clientName()) .exactMatch(sIClientName)) continue; // Input plug port names match? QStringListIterator iplug(pISocket->pluglist()); while (iplug.hasNext()) { // Found it? if (QRegExp(sPrefix + iplug.next()) .exactMatch(sIPortName)) return pCable; } } } } // No matching cable was found. return NULL; } // Patckbay cleaners. void qjackctlPatchbayRack::clear (void) { qDeleteAll(m_cablelist); m_cablelist.clear(); qDeleteAll(m_slotlist); m_slotlist.clear(); qDeleteAll(m_isocketlist); m_isocketlist.clear(); qDeleteAll(m_osocketlist); m_osocketlist.clear(); } // Patchbay rack output sockets list accessor. QList& qjackctlPatchbayRack::osocketlist (void) { return m_osocketlist; } // Patchbay rack input sockets list accessor. QList& qjackctlPatchbayRack::isocketlist (void) { return m_isocketlist; } // Patchbay rack slots list accessor. QList& qjackctlPatchbayRack::slotlist (void) { return m_slotlist; } // Patchbay cable connections list accessor. QList& qjackctlPatchbayRack::cablelist (void) { return m_cablelist; } // Lookup for the n-th JACK client port // that matches the given regular expression... const char *qjackctlPatchbayRack::findJackPort ( const char **ppszJackPorts, const QString& sClientName, const QString& sPortName, int n ) { QRegExp rxClientName(sClientName); QRegExp rxPortName(sPortName); int i = 0; int iClientPort = 0; while (ppszJackPorts[iClientPort]) { QString sClientPort = QString::fromUtf8(ppszJackPorts[iClientPort]); int iColon = sClientPort.indexOf(':'); if (iColon >= 0) { if (rxClientName.exactMatch(sClientPort.left(iColon)) && rxPortName.exactMatch(sClientPort.right( sClientPort.length() - iColon - 1))) { if (++i > n) return ppszJackPorts[iClientPort]; } } iClientPort++; } return NULL; } // JACK port-pair connection executive IS DEPRECATED! void qjackctlPatchbayRack::connectJackPorts ( const char *pszOutputPort, const char *pszInputPort ) { unsigned int uiCableFlags = QJACKCTL_CABLE_FAILED; if (jack_connect(m_pJackClient, pszOutputPort, pszInputPort) == 0) uiCableFlags = QJACKCTL_CABLE_CONNECTED; emit cableConnected( pszOutputPort, pszInputPort, uiCableFlags); } // JACK port-pair disconnection executive. void qjackctlPatchbayRack::disconnectJackPorts ( const char *pszOutputPort, const char *pszInputPort ) { unsigned int uiCableFlags = QJACKCTL_CABLE_FAILED; if (jack_disconnect(m_pJackClient, pszOutputPort, pszInputPort) == 0) uiCableFlags = QJACKCTL_CABLE_DISCONNECTED; emit cableConnected( pszOutputPort, pszInputPort, uiCableFlags); } // JACK port-pair connection notifier. void qjackctlPatchbayRack::checkJackPorts ( const char *pszOutputPort, const char *pszInputPort ) { emit cableConnected( pszOutputPort, pszInputPort, QJACKCTL_CABLE_CHECKED); } // Check and enforce if an audio output client:port is connected to one input. void qjackctlPatchbayRack::connectJackSocketPorts ( qjackctlPatchbaySocket *pOutputSocket, const char *pszOutputPort, qjackctlPatchbaySocket *pInputSocket, const char *pszInputPort ) { bool bConnected = false; // Check for inputs from output... const char **ppszInputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszOutputPort)); if (ppszInputPorts) { for (int i = 0 ; ppszInputPorts[i]; i++) { if (strcmp(ppszInputPorts[i], pszInputPort) == 0) bConnected = true; else if (pOutputSocket->isExclusive()) disconnectJackPorts(pszOutputPort, ppszInputPorts[i]); } ::free(ppszInputPorts); } // Check for outputs from input, if the input socket is on exclusive mode... if (pInputSocket->isExclusive()) { const char **ppszOutputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszInputPort)); if (ppszOutputPorts) { for (int i = 0 ; ppszOutputPorts[i]; i++) { if (strcmp(ppszOutputPorts[i], pszOutputPort) == 0) bConnected = true; else disconnectJackPorts(ppszOutputPorts[i], pszInputPort); } ::free(ppszOutputPorts); } } // Finally do the connection?... if (!bConnected) { connectJackPorts(pszOutputPort, pszInputPort); } else { emit cableConnected( pszOutputPort, pszInputPort, QJACKCTL_CABLE_CHECKED); } } // Check and maint whether an JACK socket pair is fully connected. void qjackctlPatchbayRack::connectJackCable ( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket ) { if (pOutputSocket == NULL || pInputSocket == NULL) return; if (pOutputSocket->type() != pInputSocket->type()) return; const char **ppszOutputPorts = NULL; const char **ppszInputPorts = NULL; if (pOutputSocket->type() == QJACKCTL_SOCKETTYPE_JACK_AUDIO) { ppszOutputPorts = m_ppszOAudioPorts; ppszInputPorts = m_ppszIAudioPorts; } else if (pOutputSocket->type() == QJACKCTL_SOCKETTYPE_JACK_MIDI) { ppszOutputPorts = m_ppszOMidiPorts; ppszInputPorts = m_ppszIMidiPorts; } if (ppszOutputPorts == NULL || ppszInputPorts == NULL) return; // Iterate on each corresponding plug... QStringListIterator iterOutputPlug(pOutputSocket->pluglist()); QStringListIterator iterInputPlug(pInputSocket->pluglist()); while (iterOutputPlug.hasNext() && iterInputPlug.hasNext()) { const QString& sOutputPlug = iterOutputPlug.next(); const QString& sInputPlug = iterInputPlug.next(); // Check audio port connection sequentially... int iOPort = 0; const char *pszOutputPort; while ((pszOutputPort = findJackPort(ppszOutputPorts, pOutputSocket->clientName(), sOutputPlug, iOPort)) != NULL) { int iIPort = 0; const char *pszInputPort; while ((pszInputPort = findJackPort(ppszInputPorts, pInputSocket->clientName(), sInputPlug, iIPort)) != NULL) { connectJackSocketPorts( pOutputSocket, pszOutputPort, pInputSocket, pszInputPort); iIPort++; } iOPort++; } } } // Main JACK cable connect persistance scan cycle. void qjackctlPatchbayRack::connectJackScan ( jack_client_t *pJackClient ) { if (pJackClient == NULL || m_pJackClient) return; // Cache client descriptor. m_pJackClient = pJackClient; // Cache all current audio client-ports... m_ppszOAudioPorts = jack_get_ports(m_pJackClient, 0, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput); m_ppszIAudioPorts = jack_get_ports(m_pJackClient, 0, JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput); #ifdef CONFIG_JACK_MIDI // Cache all current MIDI client-ports... m_ppszOMidiPorts = jack_get_ports(m_pJackClient, 0, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput); m_ppszIMidiPorts = jack_get_ports(m_pJackClient, 0, JACK_DEFAULT_MIDI_TYPE, JackPortIsInput); #else m_ppszOMidiPorts = NULL; m_ppszIMidiPorts = NULL; #endif // Start looking for connections... QListIterator iter(m_cablelist); while (iter.hasNext()) { qjackctlPatchbayCable *pCable = iter.next(); connectJackCable( pCable->outputSocket(), pCable->inputSocket()); } // Forward sockets... connectForwardScan(QJACKCTL_SOCKETTYPE_JACK_AUDIO); #ifdef CONFIG_JACK_MIDI connectForwardScan(QJACKCTL_SOCKETTYPE_JACK_MIDI); #endif // Free client-ports caches... if (m_ppszOAudioPorts) ::free(m_ppszOAudioPorts); if (m_ppszIAudioPorts) ::free(m_ppszIAudioPorts); #ifdef CONFIG_JACK_MIDI if (m_ppszOMidiPorts) ::free(m_ppszOMidiPorts); if (m_ppszIMidiPorts) ::free(m_ppszIMidiPorts); #endif // Reset cached pointers. m_ppszOAudioPorts = NULL; m_ppszIAudioPorts = NULL; m_ppszOMidiPorts = NULL; m_ppszIMidiPorts = NULL; m_pJackClient = NULL; } // Load all midi available midi ports of a given type. void qjackctlPatchbayRack::loadAlsaPorts ( QList& midiports, bool bReadable ) { if (m_pAlsaSeq == NULL) return; qDeleteAll(midiports); midiports.clear(); #ifdef CONFIG_ALSA_SEQ unsigned int uiAlsaFlags; if (bReadable) uiAlsaFlags = SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; else uiAlsaFlags = SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; snd_seq_client_info_t *pClientInfo; snd_seq_port_info_t *pPortInfo; snd_seq_client_info_alloca(&pClientInfo); snd_seq_port_info_alloca(&pPortInfo); snd_seq_client_info_set_client(pClientInfo, -1); while (snd_seq_query_next_client(m_pAlsaSeq, pClientInfo) >= 0) { int iAlsaClient = snd_seq_client_info_get_client(pClientInfo); if (iAlsaClient > 0) { QString sClientName = snd_seq_client_info_get_name(pClientInfo); snd_seq_port_info_set_client(pPortInfo, iAlsaClient); snd_seq_port_info_set_port(pPortInfo, -1); while (snd_seq_query_next_port(m_pAlsaSeq, pPortInfo) >= 0) { unsigned int uiPortCapability = snd_seq_port_info_get_capability(pPortInfo); if (((uiPortCapability & uiAlsaFlags) == uiAlsaFlags) && ((uiPortCapability & SND_SEQ_PORT_CAP_NO_EXPORT) == 0)) { qjackctlAlsaMidiPort *pMidiPort = new qjackctlAlsaMidiPort; pMidiPort->sClientName = sClientName; pMidiPort->iAlsaClient = iAlsaClient; pMidiPort->sPortName = snd_seq_port_info_get_name(pPortInfo); pMidiPort->iAlsaPort = snd_seq_port_info_get_port(pPortInfo); midiports.append(pMidiPort); } } } } #endif // CONFIG_ALSA_SEQ } // Get current connections from given MIDI port. void qjackctlPatchbayRack::loadAlsaConnections ( QList& midiports, qjackctlAlsaMidiPort *pMidiPort, bool bReadable ) { qDeleteAll(midiports); midiports.clear(); #ifdef CONFIG_ALSA_SEQ snd_seq_query_subs_type_t snd_subs_type; if (bReadable) snd_subs_type = SND_SEQ_QUERY_SUBS_READ; else snd_subs_type = SND_SEQ_QUERY_SUBS_WRITE; snd_seq_query_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_query_subscribe_alloca(&pAlsaSubs); snd_seq_query_subscribe_set_type(pAlsaSubs, snd_subs_type); snd_seq_query_subscribe_set_index(pAlsaSubs, 0); seq_addr.client = pMidiPort->iAlsaClient; seq_addr.port = pMidiPort->iAlsaPort; snd_seq_query_subscribe_set_root(pAlsaSubs, &seq_addr); while (snd_seq_query_port_subscribers(m_pAlsaSeq, pAlsaSubs) >= 0) { seq_addr = *snd_seq_query_subscribe_get_addr(pAlsaSubs); qjackctlAlsaMidiPort *pPort = new qjackctlAlsaMidiPort; setAlsaPort(pPort, seq_addr.client, seq_addr.port); midiports.append(pPort); snd_seq_query_subscribe_set_index(pAlsaSubs, snd_seq_query_subscribe_get_index(pAlsaSubs) + 1); } #endif // CONFIG_ALSA_SEQ } // Lookup for the n-th MIDI client port that matches the given regular expression... qjackctlAlsaMidiPort *qjackctlPatchbayRack::findAlsaPort ( QList& midiports, const QString& sClientName, const QString& sPortName, int n ) { QRegExp rxClientName(sClientName); QRegExp rxPortName(sPortName); int i = 0; // For each port... QListIterator iter(midiports); while (iter.hasNext()) { qjackctlAlsaMidiPort *pMidiPort = iter.next(); if (rxClientName.exactMatch(pMidiPort->sClientName) && rxPortName.exactMatch(pMidiPort->sPortName)) { if (++i > n) return pMidiPort; } } return NULL; } // MIDI port-pair name string. QString qjackctlPatchbayRack::getAlsaPortName ( qjackctlAlsaMidiPort *pMidiPort ) { return QString::number(pMidiPort->iAlsaClient) + ':' + QString::number(pMidiPort->iAlsaPort) + ' ' + pMidiPort->sClientName; } // MIDI port-pair name string. void qjackctlPatchbayRack::setAlsaPort ( qjackctlAlsaMidiPort *pMidiPort, int iAlsaClient, int iAlsaPort ) { #ifdef CONFIG_ALSA_SEQ snd_seq_client_info_t *pClientInfo; snd_seq_port_info_t *pPortInfo; snd_seq_client_info_alloca(&pClientInfo); snd_seq_port_info_alloca(&pPortInfo); pMidiPort->iAlsaClient = iAlsaClient; pMidiPort->iAlsaPort = iAlsaPort; if (snd_seq_get_any_client_info(m_pAlsaSeq, iAlsaClient, pClientInfo) == 0) pMidiPort->sClientName = snd_seq_client_info_get_name(pClientInfo); if (snd_seq_get_any_port_info(m_pAlsaSeq, iAlsaClient, iAlsaPort, pPortInfo) == 0) pMidiPort->sPortName = snd_seq_port_info_get_name(pPortInfo); #endif // CONFIG_ALSA_SEQ } // MIDI port-pair connection executive. void qjackctlPatchbayRack::connectAlsaPorts ( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort ) { #ifdef CONFIG_ALSA_SEQ unsigned int uiCableFlags = QJACKCTL_CABLE_FAILED; snd_seq_port_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_port_subscribe_alloca(&pAlsaSubs); seq_addr.client = pOutputPort->iAlsaClient; seq_addr.port = pOutputPort->iAlsaPort; snd_seq_port_subscribe_set_sender(pAlsaSubs, &seq_addr); seq_addr.client = pInputPort->iAlsaClient; seq_addr.port = pInputPort->iAlsaPort; snd_seq_port_subscribe_set_dest(pAlsaSubs, &seq_addr); if (snd_seq_subscribe_port(m_pAlsaSeq, pAlsaSubs) == 0) uiCableFlags = QJACKCTL_CABLE_CONNECTED; emit cableConnected( getAlsaPortName(pOutputPort), getAlsaPortName(pInputPort), uiCableFlags); #endif // CONFIG_ALSA_SEQ } // MIDI port-pair disconnection executive. void qjackctlPatchbayRack::disconnectAlsaPorts ( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort ) { #ifdef CONFIG_ALSA_SEQ unsigned int uiCableFlags = QJACKCTL_CABLE_FAILED; snd_seq_port_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_port_subscribe_alloca(&pAlsaSubs); seq_addr.client = pOutputPort->iAlsaClient; seq_addr.port = pOutputPort->iAlsaPort; snd_seq_port_subscribe_set_sender(pAlsaSubs, &seq_addr); seq_addr.client = pInputPort->iAlsaClient; seq_addr.port = pInputPort->iAlsaPort; snd_seq_port_subscribe_set_dest(pAlsaSubs, &seq_addr); if (snd_seq_unsubscribe_port(m_pAlsaSeq, pAlsaSubs) == 0) uiCableFlags = QJACKCTL_CABLE_DISCONNECTED; emit cableConnected( getAlsaPortName(pOutputPort), getAlsaPortName(pInputPort), uiCableFlags); #endif // CONFIG_ALSA_SEQ } // MIDI port-pair disconnection notifier. void qjackctlPatchbayRack::checkAlsaPorts ( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort ) { emit cableConnected( getAlsaPortName(pOutputPort), getAlsaPortName(pInputPort), QJACKCTL_CABLE_CHECKED); } // Check and enforce if a midi output client:port is connected to one input. void qjackctlPatchbayRack::connectAlsaSocketPorts ( qjackctlPatchbaySocket *pOutputSocket, qjackctlAlsaMidiPort *pOutputPort, qjackctlPatchbaySocket *pInputSocket, qjackctlAlsaMidiPort *pInputPort ) { #ifdef CONFIG_ALSA_SEQ bool bConnected = false; snd_seq_query_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_query_subscribe_alloca(&pAlsaSubs); // Check for inputs from output... snd_seq_query_subscribe_set_type(pAlsaSubs, SND_SEQ_QUERY_SUBS_READ); snd_seq_query_subscribe_set_index(pAlsaSubs, 0); seq_addr.client = pOutputPort->iAlsaClient; seq_addr.port = pOutputPort->iAlsaPort; snd_seq_query_subscribe_set_root(pAlsaSubs, &seq_addr); while (snd_seq_query_port_subscribers(m_pAlsaSeq, pAlsaSubs) >= 0) { seq_addr = *snd_seq_query_subscribe_get_addr(pAlsaSubs); if (seq_addr.client == pInputPort->iAlsaClient && seq_addr.port == pInputPort->iAlsaPort) bConnected = true; else if (pOutputSocket->isExclusive()) { qjackctlAlsaMidiPort iport; setAlsaPort(&iport, seq_addr.client, seq_addr.port); disconnectAlsaPorts(pOutputPort, &iport); } snd_seq_query_subscribe_set_index(pAlsaSubs, snd_seq_query_subscribe_get_index(pAlsaSubs) + 1); } // Check for outputs from input, if the input socket is on exclusive mode... if (pInputSocket->isExclusive()) { snd_seq_query_subscribe_set_type(pAlsaSubs, SND_SEQ_QUERY_SUBS_WRITE); snd_seq_query_subscribe_set_index(pAlsaSubs, 0); seq_addr.client = pInputPort->iAlsaClient; seq_addr.port = pInputPort->iAlsaPort; snd_seq_query_subscribe_set_root(pAlsaSubs, &seq_addr); while (snd_seq_query_port_subscribers(m_pAlsaSeq, pAlsaSubs) >= 0) { seq_addr = *snd_seq_query_subscribe_get_addr(pAlsaSubs); if (seq_addr.client == pOutputPort->iAlsaClient && seq_addr.port == pOutputPort->iAlsaPort) bConnected = true; else if (pInputSocket->isExclusive()) { qjackctlAlsaMidiPort oport; setAlsaPort(&oport, seq_addr.client, seq_addr.port); disconnectAlsaPorts(&oport, pInputPort); } snd_seq_query_subscribe_set_index(pAlsaSubs, snd_seq_query_subscribe_get_index(pAlsaSubs) + 1); } } // Finally do the connection?... if (!bConnected) { connectAlsaPorts(pOutputPort, pInputPort); } else { emit cableConnected( getAlsaPortName(pOutputPort), getAlsaPortName(pInputPort), QJACKCTL_CABLE_CHECKED); } #endif // CONFIG_ALSA_SEQ } // Check and maint whether a MIDI socket pair is fully connected. void qjackctlPatchbayRack::connectAlsaCable ( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket ) { if (pOutputSocket == NULL || pInputSocket == NULL) return; if (pOutputSocket->type() != pInputSocket->type() || pOutputSocket->type() != QJACKCTL_SOCKETTYPE_ALSA_MIDI) return; // Iterate on each corresponding plug... QStringListIterator iterOutputPlug(pOutputSocket->pluglist()); QStringListIterator iterInputPlug(pInputSocket->pluglist()); while (iterOutputPlug.hasNext() && iterInputPlug.hasNext()) { const QString& sOutputPlug = iterOutputPlug.next(); const QString& sInputPlug = iterInputPlug.next(); // Check MIDI port connection sequentially... int iOPort = 0; qjackctlAlsaMidiPort *pOutputPort; while ((pOutputPort = findAlsaPort(m_omidiports, pOutputSocket->clientName(), sOutputPlug, iOPort)) != NULL) { int iIPort = 0; qjackctlAlsaMidiPort *pInputPort; while ((pInputPort = findAlsaPort(m_imidiports, pInputSocket->clientName(), sInputPlug, iIPort)) != NULL) { connectAlsaSocketPorts( pOutputSocket, pOutputPort, pInputSocket, pInputPort); iIPort++; } iOPort++; } } } // Overloaded MIDI cable connect persistance scan cycle. void qjackctlPatchbayRack::connectAlsaScan ( snd_seq_t *pAlsaSeq ) { if (pAlsaSeq == NULL || m_pAlsaSeq) return; // Cache sequencer descriptor. m_pAlsaSeq = pAlsaSeq; // Cache all current output client-ports... loadAlsaPorts(m_omidiports, true); loadAlsaPorts(m_imidiports, false); // Run the MIDI cable scan... QListIterator iter(m_cablelist); while (iter.hasNext()) { qjackctlPatchbayCable *pCable = iter.next(); connectAlsaCable( pCable->outputSocket(), pCable->inputSocket()); } // Forward MIDI sockets... connectForwardScan(QJACKCTL_SOCKETTYPE_ALSA_MIDI); // Free client-ports caches... qDeleteAll(m_omidiports); m_omidiports.clear(); qDeleteAll(m_imidiports); m_imidiports.clear(); m_pAlsaSeq = NULL; } // JACK socket/ports forwarding scan... void qjackctlPatchbayRack::connectJackForwardPorts ( const char *pszPort, const char *pszPortForward ) { // Check for outputs from forwarded input... const char **ppszOutputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszPortForward)); if (ppszOutputPorts) { // Grab current connections of target port... const char **ppszPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszPort)); for (int i = 0 ; ppszOutputPorts[i]; i++) { // Need to lookup if already connected... bool bConnected = false; for (int j = 0; ppszPorts && ppszPorts[j]; j++) { if (strcmp(ppszOutputPorts[i], ppszPorts[j]) == 0) { bConnected = true; break; } } // Make or just report the connection... if (bConnected) { checkJackPorts(ppszOutputPorts[i], pszPort); } else { connectJackPorts(ppszOutputPorts[i], pszPort); } } // Free provided arrays... if (ppszPorts) ::free(ppszPorts); ::free(ppszOutputPorts); } } void qjackctlPatchbayRack::connectJackForward ( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward ) { if (pSocket == NULL || pSocketForward == NULL) return; if (pSocket->type() != pSocketForward->type()) return; const char **ppszOutputPorts = NULL; const char **ppszInputPorts = NULL; if (pSocket->type() == QJACKCTL_SOCKETTYPE_JACK_AUDIO) { ppszOutputPorts = m_ppszOAudioPorts; ppszInputPorts = m_ppszIAudioPorts; } else if (pSocket->type() == QJACKCTL_SOCKETTYPE_JACK_MIDI) { ppszOutputPorts = m_ppszOMidiPorts; ppszInputPorts = m_ppszIMidiPorts; } if (ppszOutputPorts == NULL || ppszInputPorts == NULL) return; QStringListIterator iterPlug(pSocket->pluglist()); QStringListIterator iterPlugForward(pSocketForward->pluglist()); while (iterPlug.hasNext() && iterPlugForward.hasNext()) { // Check audio port connection sequentially... const QString& sPlug = iterPlug.next(); const QString& sPlugForward = iterPlugForward.next(); const char *pszPortForward = findJackPort(ppszInputPorts, pSocketForward->clientName(), sPlugForward, 0); if (pszPortForward) { const char *pszPort = findJackPort(ppszInputPorts, pSocket->clientName(), sPlug, 0); if (pszPort) connectJackForwardPorts(pszPort, pszPortForward); } } } // ALSA socket/ports forwarding scan... void qjackctlPatchbayRack::connectAlsaForwardPorts ( qjackctlAlsaMidiPort *pPort, qjackctlAlsaMidiPort *pPortForward ) { #ifdef CONFIG_ALSA_SEQ // Grab current connections of target port... QList midiports; loadAlsaConnections(midiports, pPort, false); snd_seq_query_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_query_subscribe_alloca(&pAlsaSubs); // Check for inputs from output... snd_seq_query_subscribe_set_type(pAlsaSubs, SND_SEQ_QUERY_SUBS_WRITE); snd_seq_query_subscribe_set_index(pAlsaSubs, 0); seq_addr.client = pPortForward->iAlsaClient; seq_addr.port = pPortForward->iAlsaPort; snd_seq_query_subscribe_set_root(pAlsaSubs, &seq_addr); while (snd_seq_query_port_subscribers(m_pAlsaSeq, pAlsaSubs) >= 0) { seq_addr = *snd_seq_query_subscribe_get_addr(pAlsaSubs); // Need to lookup if already connected... bool bConnected = false; QListIterator iter(midiports); while (iter.hasNext()) { qjackctlAlsaMidiPort *pMidiPort = iter.next(); if (pMidiPort->iAlsaClient == seq_addr.client && pMidiPort->iAlsaPort == seq_addr.port) { bConnected = true; break; } } // Make and/or just report the connection... qjackctlAlsaMidiPort oport; setAlsaPort(&oport, seq_addr.client, seq_addr.port); if (bConnected) { checkAlsaPorts(&oport, pPort); } else { connectAlsaPorts(&oport, pPort); } snd_seq_query_subscribe_set_index(pAlsaSubs, snd_seq_query_subscribe_get_index(pAlsaSubs) + 1); } qDeleteAll(midiports); midiports.clear(); #endif // CONFIG_ALSA_SEQ } void qjackctlPatchbayRack::connectAlsaForward ( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward ) { if (pSocket == NULL || pSocketForward == NULL) return; if (pSocket->type() != pSocketForward->type() || pSocket->type() != QJACKCTL_SOCKETTYPE_ALSA_MIDI) return; QStringListIterator iterPlug(pSocket->pluglist()); QStringListIterator iterPlugForward(pSocketForward->pluglist()); while (iterPlug.hasNext() && iterPlugForward.hasNext()) { // Check MIDI port connection sequentially... const QString& sPlug = iterPlug.next(); const QString& sPlugForward = iterPlugForward.next(); qjackctlAlsaMidiPort *pPortForward = findAlsaPort(m_imidiports, pSocketForward->clientName(), sPlugForward, 0); if (pPortForward) { qjackctlAlsaMidiPort *pPort = findAlsaPort(m_imidiports, pSocket->clientName(), sPlug, 0); if (pPort) connectAlsaForwardPorts(pPort, pPortForward); } } } // Common socket forwrading scan... void qjackctlPatchbayRack::connectForwardScan ( int iSocketType ) { // First, make a copy of a seriously forwarded socket list... QList socketlist; QListIterator isocket(m_isocketlist); while (isocket.hasNext()) { qjackctlPatchbaySocket *pSocket = isocket.next(); if (pSocket->type() != iSocketType) continue; if (pSocket->forward().isEmpty()) continue; socketlist.append(pSocket); } // Second, scan for input forwarded sockets... QListIterator iter(socketlist); while (iter.hasNext()) { qjackctlPatchbaySocket *pSocket = iter.next(); qjackctlPatchbaySocket *pSocketForward = findSocket(m_isocketlist, pSocket->forward()); if (pSocketForward == NULL) continue; switch (iSocketType) { case QJACKCTL_SOCKETTYPE_JACK_AUDIO: case QJACKCTL_SOCKETTYPE_JACK_MIDI: connectJackForward(pSocket, pSocketForward); break; case QJACKCTL_SOCKETTYPE_ALSA_MIDI: connectAlsaForward(pSocket, pSocketForward); break; } } } //---------------------------------------------------------------------- // JACK snapshot. void qjackctlPatchbayRack::connectJackSnapshotEx ( int iSocketType ) { if (m_pJackClient == NULL) return; const char *pszJackPortType = JACK_DEFAULT_AUDIO_TYPE; #ifdef CONFIG_JACK_MIDI if (iSocketType == QJACKCTL_SOCKETTYPE_JACK_MIDI) pszJackPortType = JACK_DEFAULT_MIDI_TYPE; #endif const char **ppszInputPorts = jack_get_ports(m_pJackClient, 0, pszJackPortType, JackPortIsInput); if (ppszInputPorts) { for (int i = 0; ppszInputPorts[i]; ++i) { const char *pszInputPort = ppszInputPorts[i]; const QString sInputPort = QString::fromUtf8(pszInputPort); const QString& sIClient = sInputPort.section(':', 0, 0); const QString& sIPort = sInputPort.section(':', 1); qjackctlPatchbaySnapshot::add_socket( isocketlist(), sIClient, sIPort, iSocketType); } ::free(ppszInputPorts); } const char **ppszOutputPorts = jack_get_ports(m_pJackClient, 0, pszJackPortType, JackPortIsOutput); if (ppszOutputPorts == NULL) return; qjackctlPatchbaySnapshot snapshot; for (int i = 0; ppszOutputPorts[i]; ++i) { const char *pszOutputPort = ppszOutputPorts[i]; const QString sOutputPort = QString::fromUtf8(pszOutputPort); const QString& sOClient = sOutputPort.section(':', 0, 0); const QString& sOPort = sOutputPort.section(':', 1); qjackctlPatchbaySnapshot::add_socket( osocketlist(), sOClient, sOPort, iSocketType); // Check for inputs from output... ppszInputPorts = jack_port_get_all_connections( m_pJackClient, jack_port_by_name(m_pJackClient, pszOutputPort)); if (ppszInputPorts == NULL) continue; for (int j = 0 ; ppszInputPorts[j]; ++j) { const char *pszInputPort = ppszInputPorts[j]; const QString sInputPort = QString::fromUtf8(pszInputPort); const QString& sIClient = sInputPort.section(':', 0, 0); const QString& sIPort = sInputPort.section(':', 1); snapshot.append(sOClient, sOPort, sIClient, sIPort); } ::free(ppszInputPorts); } ::free(ppszOutputPorts); snapshot.commit(this, iSocketType); } void qjackctlPatchbayRack::connectJackSnapshot ( jack_client_t *pJackClient ) { if (pJackClient == NULL || m_pJackClient) return; // Cache JACK client descriptor. m_pJackClient = pJackClient; connectJackSnapshotEx(QJACKCTL_SOCKETTYPE_JACK_AUDIO); connectJackSnapshotEx(QJACKCTL_SOCKETTYPE_JACK_MIDI); // Done. m_pJackClient = NULL; } //---------------------------------------------------------------------- // ALSA snapshot. void qjackctlPatchbayRack::connectAlsaSnapshot ( snd_seq_t *pAlsaSeq ) { if (pAlsaSeq == NULL || m_pAlsaSeq) return; // Cache sequencer descriptor. m_pAlsaSeq = pAlsaSeq; #ifdef CONFIG_ALSA_SEQ QList imidiports; loadAlsaPorts(imidiports, false); QListIterator iport(imidiports); while (iport.hasNext()) { qjackctlAlsaMidiPort *pIPort = iport.next(); qjackctlPatchbaySnapshot::add_socket( isocketlist(), pIPort->sClientName, pIPort->sPortName, QJACKCTL_SOCKETTYPE_ALSA_MIDI); } qDeleteAll(imidiports); imidiports.clear(); qjackctlPatchbaySnapshot snapshot; QList omidiports; loadAlsaPorts(omidiports, true); QListIterator oport(omidiports); while (oport.hasNext()) { qjackctlAlsaMidiPort *pOPort = oport.next(); qjackctlPatchbaySnapshot::add_socket( osocketlist(), pOPort->sClientName, pOPort->sPortName, QJACKCTL_SOCKETTYPE_ALSA_MIDI); loadAlsaConnections(imidiports, pOPort, true); QListIterator iport(imidiports); while (iport.hasNext()) { qjackctlAlsaMidiPort *pIPort = iport.next(); snapshot.append( pOPort->sClientName, pOPort->sPortName, pIPort->sClientName, pIPort->sPortName); } qDeleteAll(imidiports); imidiports.clear(); } qDeleteAll(omidiports); omidiports.clear(); snapshot.commit(this, QJACKCTL_SOCKETTYPE_ALSA_MIDI); #endif // Done. m_pAlsaSeq = NULL; } // qjackctlPatchbayRack.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMainForm.h0000644000175000001440000000012412113152421020563 xustar000000000000000027 mtime=1361892625.815912 27 atime=1364826684.892395 30 ctime=1364826684.892395501 qjackctl-0.3.10/src/qjackctlMainForm.h0000644000175000001440000001734512113152421020064 0ustar00rncbcusers00000000000000// qjackctlMainForm.h // /**************************************************************************** Copyright (C) 2003-2013, 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 __qjackctlMainForm_h #define __qjackctlMainForm_h #include "ui_qjackctlMainForm.h" #include "qjackctlSetup.h" #include #include #include #ifdef CONFIG_ALSA_SEQ #include #else typedef void snd_seq_t; #endif // Forward declarations. class qjackctlSetup; class qjackctlMessagesStatusForm; class qjackctlSessionForm; class qjackctlConnectionsForm; class qjackctlPatchbayForm; class qjackctlPatchbayRack; class qjackctlSystemTray; class qjackctlPortItem; class QSocketNotifier; #ifdef CONFIG_DBUS class QDBusInterface; class qjackctlDBusLogWatcher; #endif //---------------------------------------------------------------------------- // qjackctlMainForm -- UI wrapper form. class qjackctlMainForm : public QWidget { Q_OBJECT public: // Constructor. qjackctlMainForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlMainForm(); static qjackctlMainForm *getInstance(); bool setup(qjackctlSetup * pSetup); jack_client_t *jackClient() const; snd_seq_t *alsaSeq() const; void appendMessages(const QString& s); bool isActivePatchbay(const QString& sPatchbayPath) const; void updateActivePatchbay(); void setActivePatchbay(const QString& sPatchbayPath); void setRecentPatchbays(const QStringList& patchbays); void stabilizeForm(); void stabilize(int msecs); void refreshXrunStats(); void refreshJackConnections(); void refreshAlsaConnections(); void refreshPatchbay(); void queryDisconnect( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort, int iSocketType); void setQuitForce(bool bQuitForce); bool isQuitForce() const; public slots: void startJack(); void stopJack(); void resetXrunStats(); protected slots: void readStdout(); void jackStarted(); void jackError(QProcess::ProcessError); void jackFinished(); void jackCleanup(); void jackStabilize(); void stdoutNotifySlot(int); void alsaNotifySlot(int); void timerSlot(); void jackConnectChanged(); void alsaConnectChanged(); void cableConnectSlot(const QString&, const QString&, unsigned int); void toggleMainForm(); void toggleMessagesStatusForm(); void toggleMessagesForm(); void toggleStatusForm(); void toggleSessionForm(); void toggleConnectionsForm(); void togglePatchbayForm(); void showSetupForm(); void showAboutForm(); void transportRewind(); void transportBackward(); void transportPlay(bool); void transportStart(); void transportStop(); void transportForward(); void systemTrayContextMenu(const QPoint&); void activatePresetsMenu(QAction *); void activatePreset(const QString&); void activatePreset(int); void quitMainForm(); protected: bool queryClose(); void closeEvent(QCloseEvent * pCloseEvent); void customEvent(QEvent *pEvent); void appendStdoutBuffer(const QString&); void flushStdoutBuffer(); QString formatExitStatus(int iExitStatus) const; void shellExecute(const QString& sShellCommand, const QString& sStartMessage, const QString& sStopMessage); void stopJackServer(); 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 updateMessagesFont(); void updateMessagesLimit(); void updateConnectionsFont(); void updateConnectionsIconSize(); void updateJackClientPortAlias(); void updateBezierLines(); void updateDisplayEffect(); void updateTimeDisplayFonts(); void updateTimeDisplayToolTips(); void updateTimeFormat(); void updateAliases(); void updateButtons(); void updateXrunCount(); QString formatTime(float secs) const; QString formatElapsedTime(int iStatusItem, const QTime& t, bool bElapsed) const; void updateElapsedTimes(); void portNotifyEvent(); void xrunNotifyEvent(); void buffNotifyEvent(); void shutNotifyEvent(); void exitNotifyEvent(); void startJackClientDelay(); bool startJackClient(bool bDetach); void stopJackClient(); void refreshConnections(); void refreshStatus(); void updateStatusItem(int iStatusItem, const QString& sText); void updateTitleStatus(); void updateServerState(int iState); void updateSystemTray(); void showDirtySettingsWarning(); void showDirtySetupWarning(); void contextMenuEvent(QContextMenuEvent *); void mousePressEvent(QMouseEvent *pMouseEvent); #ifdef CONFIG_DBUS // D-BUS: Set/reset parameter values // from current selected preset options. void setDBusParameters(); // D-BUS: Set parameter values (with reset option). bool setDBusEngineParameter( const QString& param, const QVariant& value, bool bSet = true); bool setDBusDriverParameter( const QString& param, const QVariant& value, bool bSet = true); bool setDBusParameter( const QStringList& path, const QVariant& value, bool bSet = true); // D-BUS: Reset parameter (to default) values. bool resetDBusEngineParameter(const QString& param); bool resetDBusDriverParameter(const QString& param); bool resetDBusParameter(const QStringList& path); // D-BUS: Set parameter values. QVariant getDBusEngineParameter(const QString& param); QVariant getDBusDriverParameter(const QString& param); QVariant getDBusParameter(const QStringList& path); #endif // Quotes string with embedded whitespace. QString formatQuoted(const QString& s) const; // Guarded transport play/pause toggle. void transportPlayStatus(bool bOn); private: // The Qt-designer UI struct... Ui::qjackctlMainForm m_ui; // Instance variables. qjackctlSetup *m_pSetup; QProcess *m_pJack; int m_iServerState; jack_client_t *m_pJackClient; bool m_bJackDetach; bool m_bJackShutdown; snd_seq_t *m_pAlsaSeq; #ifdef CONFIG_DBUS QDBusInterface *m_pDBusControl; QDBusInterface *m_pDBusConfig; qjackctlDBusLogWatcher *m_pDBusLogWatcher; bool m_bDBusStarted; #endif int m_iStartDelay; int m_iTimerDelay; int m_iTimerRefresh; int m_iJackRefresh; int m_iAlsaRefresh; int m_iJackDirty; int m_iAlsaDirty; int m_iStatusBlink; int m_iStatusRefresh; int m_iPatchbayRefresh; QSocketNotifier *m_pStdoutNotifier; QSocketNotifier *m_pAlsaNotifier; int m_iXrunCallbacks; int m_iXrunSkips; int m_iXrunStats; int m_iXrunCount; float m_fXrunTotal; float m_fXrunMax; float m_fXrunMin; float m_fXrunLast; QTime m_tXrunLast; QTime m_tResetLast; qjackctlMessagesStatusForm *m_pMessagesStatusForm; qjackctlSessionForm *m_pSessionForm; qjackctlConnectionsForm *m_pConnectionsForm; qjackctlPatchbayForm *m_pPatchbayForm; qjackctlPatchbayRack *m_pPatchbayRack; qjackctlSystemTray *m_pSystemTray; qjackctlPreset m_preset; QString m_sStdoutBuffer; QString m_sTimeDashes; QString m_sJackCmdLine; bool m_bQuitForce; float m_fSkipAccel; int m_iTransportPlay; // Kind-of singleton reference. static qjackctlMainForm *g_pMainForm; }; #endif // __qjackctlMainForm_h // end of qjackctlMainForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAboutForm.h0000644000175000001440000000012311353112764020763 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.550395 30 ctime=1364826684.550395496 qjackctl-0.3.10/src/qjackctlAboutForm.h0000644000175000001440000000316511353112764020260 0ustar00rncbcusers00000000000000// qjackctlAboutForm.h // /**************************************************************************** Copyright (C) 2003-2010, 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 __qjackctlAboutForm_h #define __qjackctlAboutForm_h #include #if QT_VERSION < 0x040200 #define setOpenExternalLinks(x) parent() #endif #include "ui_qjackctlAboutForm.h" //---------------------------------------------------------------------------- // qjackctlAboutForm -- UI wrapper form. class qjackctlAboutForm : public QDialog { Q_OBJECT public: // Constructor. qjackctlAboutForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlAboutForm(); public slots: void aboutQt(); private: // The Qt-designer UI struct... Ui::qjackctlAboutForm m_ui; }; #endif // __qjackctlAboutForm_h // end of qjackctlAboutForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMessagesStatusForm.h0000644000175000001440000000012412067410555022667 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826685.253395 30 ctime=1364826685.253395507 qjackctl-0.3.10/src/qjackctlMessagesStatusForm.h0000644000175000001440000000540612067410555022163 0ustar00rncbcusers00000000000000// qjackctlMessagesStatusForm.h // /**************************************************************************** Copyright (C) 2003-2012, 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 __qjackctlMessagesStatusForm_h #define __qjackctlMessagesStatusForm_h #include #if QT_VERSION < 0x040200 #define setAllColumnsShowFocus(x) parent() #endif #include "ui_qjackctlMessagesStatusForm.h" // Forward declarations. class QTreeWidgetItem; class QFile; //---------------------------------------------------------------------------- // qjackctlMessagesStatusForm -- UI wrapper form. class qjackctlMessagesStatusForm : public QWidget { Q_OBJECT public: // Constructor. qjackctlMessagesStatusForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlMessagesStatusForm(); enum TabPage { MessagesTab = 0, StatusTab = 1 }; void setTabPage(int iTabPage); int tabPage() const; QFont messagesFont() const; void setMessagesFont(const QFont& font); int messagesLimit() const; void setMessagesLimit(int iLimit); bool isLogging() const; void setLogging(bool bEnabled, const QString& sFilename = QString()); void appendMessages(const QString& s); void appendMessagesColor(const QString& s, const QString& c); void appendMessagesText(const QString& s); void updateStatusItem(int iStatusItem, const QString& sText); public slots: void resetXrunStats(); void refreshXrunStats(); protected: void appendMessagesLine(const QString& s); void appendMessagesLog(const QString& s); void showEvent(QShowEvent *); void hideEvent(QHideEvent *); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); private: // The Qt-designer UI struct... Ui::qjackctlMessagesStatusForm m_ui; // Instance variables. int m_iMessagesLines; int m_iMessagesLimit; int m_iMessagesHigh; // Logging stuff. QFile *m_pMessagesLog; // Status stuff. QTreeWidgetItem *m_apStatus[19]; }; #endif // __qjackctlMessagesStatusForm_h // end of qjackctlMessagesStatusForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnect.h0000644000175000001440000000012412067410555020461 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826685.231395 30 ctime=1364826685.231395507 qjackctl-0.3.10/src/qjackctlConnect.h0000644000175000001440000003040312067410555017750 0ustar00rncbcusers00000000000000// qjackctlConnect.h // /**************************************************************************** Copyright (C) 2003-2012, 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 __qjackctlConnect_h #define __qjackctlConnect_h #include "qjackctlConnectAlias.h" #include #include // QListViewItem::rtti return values. #define QJACKCTL_CLIENTITEM 1001 #define QJACKCTL_PORTITEM 1002 // Forward declarations. class qjackctlPortItem; class qjackctlClientItem; class qjackctlClientList; class qjackctlClientListView; class qjackctlConnectorView; class qjackctlConnectView; class qjackctlConnect; // Port list item. class qjackctlPortItem : public QTreeWidgetItem { public: // Constructor. qjackctlPortItem(qjackctlClientItem *pClient, const QString& sPortName); // Default destructor. ~qjackctlPortItem(); // Instance accessors. void setPortName(const QString& sPortName); const QString& clientName() const; const QString& portName() const; // Complete client:port name helper. QString clientPortName() const; // Connections client item accessor. qjackctlClientItem *client() const; // Client port cleanup marker. void markPort(int iMark); void markClientPort(int iMark); int portMark() const; // Connected port list primitives. void addConnect(qjackctlPortItem *pPort); void removeConnect(qjackctlPortItem *pPort); // Connected port finders. qjackctlPortItem *findConnect(const QString& sClientPortName); qjackctlPortItem *findConnectPtr(qjackctlPortItem *pPortPtr); // Connection list accessor. const QList& connects() const; // Connectiopn highlight methods. bool isHilite() const; void setHilite (bool bHilite); // Proxy sort override method. // - Natural decimal sorting comparator. bool operator< (const QTreeWidgetItem& other) const; private: // Instance variables. qjackctlClientItem *m_pClient; QString m_sPortName; int m_iPortMark; bool m_bHilite; // Connection cache list. QList m_connects; }; // Client list item. class qjackctlClientItem : public QTreeWidgetItem { public: // Constructor. qjackctlClientItem(qjackctlClientList *pClientList, const QString& sClientName); // Default destructor. ~qjackctlClientItem(); // Port list primitive methods. void addPort(qjackctlPortItem *pPort); void removePort(qjackctlPortItem *pPort); // Port finder. qjackctlPortItem *findPort(const QString& sPortName); // Instance accessors. void setClientName(const QString& sClientName); const QString& clientName() const; // Readable flag accessor. bool isReadable() const; // Client list accessor. qjackctlClientList *clientList() const; // Port list accessor. QList& ports(); // Client port cleanup marker. void markClient(int iMark); void markClientPorts(int iMark); int cleanClientPorts(int iMark); int clientMark() const; // Connectiopn highlight methods. bool isHilite() const; void setHilite (bool bHilite); // Client item openness status. void setOpen(bool bOpen); bool isOpen() const; // Proxy sort override method. // - Natural decimal sorting comparator. bool operator< (const QTreeWidgetItem& other) const; private: // Instance variables. qjackctlClientList *m_pClientList; QString m_sClientName; int m_iClientMark; int m_iHilite; QList m_ports; }; // Jack client list. class qjackctlClientList : public QObject { public: // Constructor. qjackctlClientList(qjackctlClientListView *pListView, bool bReadable); // Default destructor. ~qjackctlClientList(); // Do proper contents cleanup. void clear(); // Client list primitive methods. void addClient(qjackctlClientItem *pClient); void removeClient(qjackctlClientItem *pClient); // Client finder. qjackctlClientItem *findClient(const QString& sClientName); // Client:port finder. qjackctlPortItem *findClientPort(const QString& sClientPort); // List view accessor. qjackctlClientListView *listView() const; // Readable flag accessor. bool isReadable() const; // Client list accessor. QList& clients(); // Client ports cleanup marker. void markClientPorts(int iMark); int cleanClientPorts(int iMark); // Client:port refreshner (return newest item count). virtual int updateClientPorts() = 0; // Client:port hilite update stabilization. void hiliteClientPorts (void); // Do proper contents refresh/update. void refresh(); // Natural decimal sorting comparator. static bool lessThan(const QTreeWidgetItem& i1, const QTreeWidgetItem& i2); private: // Instance variables. qjackctlClientListView *m_pListView; bool m_bReadable; QList m_clients; QTreeWidgetItem *m_pHiliteItem; }; //---------------------------------------------------------------------------- // qjackctlClientListView -- Client list view, supporting drag-n-drop. class qjackctlClientListView : public QTreeWidget { Q_OBJECT public: // Constructor. qjackctlClientListView(qjackctlConnectView *pConnectView, bool bReadable); // Default destructor. ~qjackctlClientListView(); // Auto-open timer methods. void setAutoOpenTimeout(int iAutoOpenTimeout); int autoOpenTimeout() const; // Aliasing support methods. void setAliases(qjackctlConnectAlias *pAliases, bool bRenameEnabled); qjackctlConnectAlias *aliases() const; bool renameEnabled() const; // Binding indirect accessor. qjackctlConnect *binding() const; protected slots: // In-place aliasing slots. void startRenameSlot(); void renamedSlot(); // Auto-open timeout slot. void timeoutSlot(); protected: // Trap for help/tool-tip events. bool eventFilter(QObject *pObject, QEvent *pEvent); // Drag-n-drop stuff. QTreeWidgetItem *dragDropItem(const QPoint& pos); // Drag-n-drop stuff -- reimplemented virtual methods. void dragEnterEvent(QDragEnterEvent *pDragEnterEvent); void dragMoveEvent(QDragMoveEvent *pDragMoveEvent); void dragLeaveEvent(QDragLeaveEvent *); void dropEvent(QDropEvent *pDropEvent); // Handle mouse events for drag-and-drop stuff. void mousePressEvent(QMouseEvent *pMouseEvent); void mouseMoveEvent(QMouseEvent *pMouseEvent); // Context menu request event handler. void contextMenuEvent(QContextMenuEvent *); private: // Bindings. qjackctlConnectView *m_pConnectView; // Auto-open timer. int m_iAutoOpenTimeout; QTimer *m_pAutoOpenTimer; // Items we'll eventually drop something. QTreeWidgetItem *m_pDragItem; QTreeWidgetItem *m_pDropItem; // The point from where drag started. QPoint m_posDrag; // Aliasing support. qjackctlConnectAlias *m_pAliases; bool m_bRenameEnabled; }; //---------------------------------------------------------------------------- // qjackctlConnectorView -- Jack port connector widget. class qjackctlConnectorView : public QWidget { Q_OBJECT public: // Constructor. qjackctlConnectorView(qjackctlConnectView *pConnectView); // Default destructor. ~qjackctlConnectorView(); public slots: // Useful slots (should this be protected?). void contentsChanged(); protected: // Draw visible port connection relation arrows. void paintEvent(QPaintEvent *); // Context menu request event handler. virtual void contextMenuEvent(QContextMenuEvent *); private: // Legal client/port item position helper. int itemY(QTreeWidgetItem *pItem) const; // Drawing methods. void drawConnectionLine(QPainter *pPainter, int x1, int y1, int x2, int y2, int h1, int h2); // Local instance variables. qjackctlConnectView *m_pConnectView; }; //---------------------------------------------------------------------------- // qjackctlConnectView -- Connections view integrated widget. class qjackctlConnectView : public QSplitter { Q_OBJECT public: // Constructor. qjackctlConnectView(QWidget *pParent = 0); // Default destructor. ~qjackctlConnectView(); // Widget accesors. qjackctlClientListView *OListView() const { return m_pOListView; } qjackctlClientListView *IListView() const { return m_pIListView; } qjackctlConnectorView *ConnectorView() const { return m_pConnectorView; } // Connections object binding methods. void setBinding(qjackctlConnect *pConnect); qjackctlConnect *binding() const; // Client list accessors. 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; signals: // Contents change signal. void contentsChanged(); private: // Child controls. qjackctlClientListView *m_pOListView; qjackctlClientListView *m_pIListView; qjackctlConnectorView *m_pConnectorView; // 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; // The obnoxious dirty flag. bool m_bDirty; }; //---------------------------------------------------------------------------- // qjackctlConnect -- Connections model integrated object. class qjackctlConnect : public QObject { Q_OBJECT public: // Constructor. qjackctlConnect(qjackctlConnectView *pConnectView); // Default destructor. ~qjackctlConnect(); // Explicit connection tests. bool canConnectSelected(); bool canDisconnectSelected(); bool canDisconnectAll(); // Client list accessors. qjackctlClientList *OClientList() const; qjackctlClientList *IClientList() const; public slots: // Incremental contents refreshner; check dirty status. void refresh(); // Explicit connection slots. bool connectSelected(); bool disconnectSelected(); bool disconnectAll(); // Expand all client ports. void expandAll(); // Complete/incremental contents rebuilder; check dirty status if incremental. void updateContents(bool bClear); signals: // Connection change signal. void connectChanged(); // Pre-notification of (dis)connection. void connecting(qjackctlPortItem *, qjackctlPortItem *); void disconnecting(qjackctlPortItem *, qjackctlPortItem *); protected: // Connect/Disconnection primitives. virtual bool connectPorts( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort) = 0; virtual bool disconnectPorts( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort) = 0; // Update port connection references. virtual void updateConnections() = 0; // These must be accessed by the descendant constructor. qjackctlConnectView *connectView() const; void setOClientList(qjackctlClientList *pOClientList); void setIClientList(qjackctlClientList *pIClientList); // Common pixmap factory helper-method. QPixmap *createIconPixmap (const QString& sIconName); // Update icon size implementation. virtual void updateIconPixmaps() = 0; private: // Dunno. But this may avoid some conflicts. bool startMutex(); void endMutex(); // Connection methods (unguarded). bool canConnectSelectedEx(); bool canDisconnectSelectedEx(); bool canDisconnectAllEx(); bool connectSelectedEx(); bool disconnectSelectedEx(); bool disconnectAllEx(); // Connect/Disconnection local primitives. bool connectPortsEx(qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); bool disconnectPortsEx(qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); // Instance variables. qjackctlConnectView *m_pConnectView; // These must be created on the descendant constructor. qjackctlClientList *m_pOClientList; qjackctlClientList *m_pIClientList; int m_iMutex; }; #endif // __qjackctlConnect_h // end of qjackctlConnect.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSetupForm.h0000644000175000001440000000012411720026250021002 xustar000000000000000027 mtime=1329605800.359919 27 atime=1364826684.467395 30 ctime=1364826684.467395495 qjackctl-0.3.10/src/qjackctlSetupForm.h0000644000175000001440000000626311720026250020300 0ustar00rncbcusers00000000000000// qjackctlSetupForm.h // /**************************************************************************** Copyright (C) 2003-2012, 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 __qjackctlSetupForm_h #define __qjackctlSetupForm_h #include "ui_qjackctlSetupForm.h" // Forward declarations. class qjackctlSetup; class QButtonGroup; //---------------------------------------------------------------------------- // qjackctlSetupForm -- UI wrapper form. class qjackctlSetupForm : public QDialog { Q_OBJECT public: // Constructor. qjackctlSetupForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlSetupForm(); void setup(qjackctlSetup * pSetup); public slots: void changeCurrentPreset(const QString&); void saveCurrentPreset(); void deleteCurrentPreset(); void changeAudio(int); void changeDriver(const QString&); void selectInterface(); void selectInDevice(); void selectOutDevice(); void symbolStartupScript(); void symbolPostStartupScript(); void symbolShutdownScript(); void symbolPostShutdownScript(); void browseStartupScript(); void browsePostStartupScript(); void browseShutdownScript(); void browsePostShutdownScript(); void browseActivePatchbayPath(); void browseMessagesLogPath(); void chooseDisplayFont1(); void chooseDisplayFont2(); void toggleDisplayEffect(bool); void chooseMessagesFont(); void chooseConnectionsFont(); void settingsChanged(); void optionsChanged(); protected slots: void accept(); void reject(); protected: // A combo-box text item setter helper. void setComboBoxCurrentText ( QComboBox *pComboBox, const QString& sText ) const; void changePreset(const QString& sPreset); bool savePreset(const QString& sPreset); bool deletePreset(const QString& sPreset); void resetPresets(); void computeLatency(); void changeDriverAudio( const QString& sDriver, int iAudio ); void changeDriverUpdate( const QString& sDriver, bool bUpdate ); void deviceMenu(QLineEdit * pLineEdit, QToolButton * pToolButton, int iAudio); void symbolMenu(QLineEdit * pLineEdit, QToolButton * pToolButton ); void stabilizeForm(); private: // The Qt-designer UI struct... Ui::qjackctlSetupForm m_ui; // Instance variables. qjackctlSetup *m_pSetup; QButtonGroup *m_pTimeDisplayButtonGroup; int m_iDirtySetup; int m_iDirtySettings; int m_iDirtyOptions; QString m_sPreset; }; #endif // __qjackctlSetupForm_h // end of qjackctlSetupForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnectionsForm.cpp0000644000175000001440000000012411533267321022527 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826685.277395 30 ctime=1364826685.277395508 qjackctl-0.3.10/src/qjackctlConnectionsForm.cpp0000644000175000001440000005163711533267321022032 0ustar00rncbcusers00000000000000// qjackctlConnectionsForm.cpp // /**************************************************************************** Copyright (C) 2003-2011, 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 "qjackctlConnectionsForm.h" #include "qjackctlSetup.h" #include "qjackctlMainForm.h" #include "qjackctlPatchbay.h" #include #include #include //---------------------------------------------------------------------------- // qjackctlConnectionsForm -- UI wrapper form. // Constructor. qjackctlConnectionsForm::qjackctlConnectionsForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QWidget(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); m_pAudioConnect = new qjackctlJackConnect( m_ui.AudioConnectView, QJACKCTL_JACK_AUDIO); #ifdef CONFIG_JACK_MIDI m_pMidiConnect = new qjackctlJackConnect( m_ui.MidiConnectView, QJACKCTL_JACK_MIDI); #else m_pMidiConnect = NULL; #endif #ifdef CONFIG_ALSA_SEQ m_pAlsaConnect = new qjackctlAlsaConnect(m_ui.AlsaConnectView); #else m_pAlsaConnect = NULL; #endif m_pSetup = NULL; // UI connections... QObject::connect(m_ui.AudioConnectPushButton, SIGNAL(clicked()), SLOT(audioConnectSelected())); QObject::connect(m_ui.AudioDisconnectPushButton, SIGNAL(clicked()), SLOT(audioDisconnectSelected())); QObject::connect(m_ui.AudioDisconnectAllPushButton, SIGNAL(clicked()), SLOT(audioDisconnectAll())); QObject::connect(m_ui.AudioExpandAllPushButton, SIGNAL(clicked()), SLOT(audioExpandAll())); QObject::connect(m_ui.AudioRefreshPushButton, SIGNAL(clicked()), SLOT(audioRefreshClear())); QObject::connect(m_ui.MidiConnectPushButton, SIGNAL(clicked()), SLOT(midiConnectSelected())); QObject::connect(m_ui.MidiDisconnectPushButton, SIGNAL(clicked()), SLOT(midiDisconnectSelected())); QObject::connect(m_ui.MidiDisconnectAllPushButton, SIGNAL(clicked()), SLOT(midiDisconnectAll())); QObject::connect(m_ui.MidiExpandAllPushButton, SIGNAL(clicked()), SLOT(midiExpandAll())); QObject::connect(m_ui.MidiRefreshPushButton, SIGNAL(clicked()), SLOT(midiRefreshClear())); QObject::connect(m_ui.AlsaConnectPushButton, SIGNAL(clicked()), SLOT(alsaConnectSelected())); QObject::connect(m_ui.AlsaDisconnectPushButton, SIGNAL(clicked()), SLOT(alsaDisconnectSelected())); QObject::connect(m_ui.AlsaDisconnectAllPushButton, SIGNAL(clicked()), SLOT(alsaDisconnectAll())); QObject::connect(m_ui.AlsaExpandAllPushButton, SIGNAL(clicked()), SLOT(alsaExpandAll())); QObject::connect(m_ui.AlsaRefreshPushButton, SIGNAL(clicked()), SLOT(alsaRefreshClear())); // Connect it to some UI feedback slots. QObject::connect(m_ui.AudioConnectView->OListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(audioStabilize())); QObject::connect(m_ui.AudioConnectView->IListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(audioStabilize())); QObject::connect(m_ui.MidiConnectView->OListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(midiStabilize())); QObject::connect(m_ui.MidiConnectView->IListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(midiStabilize())); QObject::connect(m_ui.AlsaConnectView->OListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(alsaStabilize())); QObject::connect(m_ui.AlsaConnectView->IListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(alsaStabilize())); // Dirty dispatcher (refresh deferral). QObject::connect(m_ui.AudioConnectView, SIGNAL(contentsChanged()), SLOT(audioRefresh())); QObject::connect(m_ui.MidiConnectView, SIGNAL(contentsChanged()), SLOT(midiRefresh())); QObject::connect(m_ui.AlsaConnectView, SIGNAL(contentsChanged()), SLOT(alsaRefresh())); // Actual connections... QObject::connect(m_pAudioConnect, SIGNAL(disconnecting(qjackctlPortItem *, qjackctlPortItem *)), SLOT(audioDisconnecting(qjackctlPortItem *, qjackctlPortItem *))); #ifdef CONFIG_JACK_MIDI QObject::connect(m_pMidiConnect, SIGNAL(disconnecting(qjackctlPortItem *, qjackctlPortItem *)), SLOT(midiDisconnecting(qjackctlPortItem *, qjackctlPortItem *))); #endif #ifdef CONFIG_ALSA_SEQ QObject::connect(m_pAlsaConnect, SIGNAL(disconnecting(qjackctlPortItem *, qjackctlPortItem *)), SLOT(alsaDisconnecting(qjackctlPortItem *, qjackctlPortItem *))); #endif #ifndef CONFIG_JACK_MIDI m_ui.ConnectionsTabWidget->setTabEnabled(1, false); #endif #ifndef CONFIG_ALSA_SEQ // m_ui.ConnectionsTabWidget->setTabEnabled(2, false); m_ui.ConnectionsTabWidget->removeTab(2); #endif // Start disabled. stabilizeAudio(false); stabilizeMidi(false); stabilizeAlsa(false); } // Destructor. qjackctlConnectionsForm::~qjackctlConnectionsForm (void) { // Destroy our connections view... if (m_pAudioConnect) delete m_pAudioConnect; #ifdef CONFIG_JACK_MIDI if (m_pMidiConnect) delete m_pMidiConnect; #endif #ifdef CONFIG_ALSA_SEQ if (m_pAlsaConnect) delete m_pAlsaConnect; #endif } // Notify our parent that we're emerging. void qjackctlConnectionsForm::showEvent ( QShowEvent *pShowEvent ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); audioRefresh(); midiRefresh(); alsaRefresh(); QWidget::showEvent(pShowEvent); } // Notify our parent that we're closing. void qjackctlConnectionsForm::hideEvent ( QHideEvent *pHideEvent ) { QWidget::hideEvent(pHideEvent); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Just about to notify main-window that we're closing. void qjackctlConnectionsForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Set reference to global options, mostly needed for the // initial sizes of the main splitter views and those // client/port aliasing feature. void qjackctlConnectionsForm::setup ( qjackctlSetup *pSetup ) { m_pSetup = pSetup; qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) { QObject::connect(m_pAudioConnect, SIGNAL(connectChanged()), pMainForm, SLOT(jackConnectChanged())); #ifdef CONFIG_JACK_MIDI QObject::connect(m_pMidiConnect, SIGNAL(connectChanged()), pMainForm, SLOT(jackConnectChanged())); #endif #ifdef CONFIG_ALSA_SEQ QObject::connect(m_pAlsaConnect, SIGNAL(connectChanged()), pMainForm, SLOT(alsaConnectChanged())); #endif } // Load some splitter sizes... if (m_pSetup) { QList sizes; sizes.append(180); sizes.append(60); sizes.append(180); m_pSetup->loadSplitterSizes(m_ui.AudioConnectView, sizes); m_pSetup->loadSplitterSizes(m_ui.MidiConnectView, sizes); m_pSetup->loadSplitterSizes(m_ui.AlsaConnectView, sizes); #ifdef CONFIG_ALSA_SEQ if (!m_pSetup->bAlsaSeqEnabled) { // m_ui.ConnectionsTabWidget->setTabEnabled(2, false); m_ui.ConnectionsTabWidget->removeTab(2); } #endif } // Update initial client/port aliases... updateAliases(); } // Connector view accessors. qjackctlConnectView *qjackctlConnectionsForm::audioConnectView (void) const { return m_ui.AudioConnectView; } qjackctlConnectView *qjackctlConnectionsForm::midiConnectView (void) const { return m_ui.MidiConnectView; } qjackctlConnectView *qjackctlConnectionsForm::alsaConnectView (void) const { return m_ui.AlsaConnectView; } // 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. void qjackctlConnectionsForm::setTabPage ( int iTabPage ) { m_ui.ConnectionsTabWidget->setCurrentIndex(iTabPage); } int qjackctlConnectionsForm::tabPage (void) const { return m_ui.ConnectionsTabWidget->currentIndex(); } // Connections view font accessors. QFont qjackctlConnectionsForm::connectionsFont (void) const { // Elect one list view to retrieve current font. return m_ui.AudioConnectView->OListView()->font(); } void qjackctlConnectionsForm::setConnectionsFont ( const QFont & font ) { // Set fonts of all listviews... m_ui.AudioConnectView->OListView()->setFont(font); m_ui.AudioConnectView->IListView()->setFont(font); m_ui.MidiConnectView->OListView()->setFont(font); m_ui.MidiConnectView->IListView()->setFont(font); m_ui.AlsaConnectView->OListView()->setFont(font); m_ui.AlsaConnectView->IListView()->setFont(font); } // Connections view icon size accessor. void qjackctlConnectionsForm::setConnectionsIconSize ( int iIconSize ) { // Set icon sizes of all views... m_ui.AudioConnectView->setIconSize(iIconSize); m_ui.MidiConnectView->setIconSize(iIconSize); m_ui.AlsaConnectView->setIconSize(iIconSize); } // Check if there's JACK audio connections. bool qjackctlConnectionsForm::isAudioConnected (void) const { bool bIsAudioConnected = false; if (m_pAudioConnect) bIsAudioConnected = m_pAudioConnect->canDisconnectAll(); return bIsAudioConnected; } // Connect current selected JACK audio ports. void qjackctlConnectionsForm::audioConnectSelected (void) { if (m_pAudioConnect) { if (m_pAudioConnect->connectSelected()) refreshAudio(false); } } // Disconnect current selected JACK audio ports. void qjackctlConnectionsForm::audioDisconnectSelected (void) { if (m_pAudioConnect) { if (m_pAudioConnect->disconnectSelected()) refreshAudio(false); } } // Disconnect all connected JACK audio ports. void qjackctlConnectionsForm::audioDisconnectAll (void) { if (m_pAudioConnect) { if (m_pAudioConnect->disconnectAll()) refreshAudio(false); } } // Expand all JACK audio client ports. void qjackctlConnectionsForm::audioExpandAll (void) { if (m_pAudioConnect) { m_pAudioConnect->expandAll(); stabilizeAudio(true); } } // JACK audio ports disconnecting. void qjackctlConnectionsForm::audioDisconnecting ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->queryDisconnect(pOPort, pIPort, QJACKCTL_SOCKETTYPE_JACK_AUDIO); } // Refresh JACK audio form by notifying the parent form. void qjackctlConnectionsForm::audioRefreshClear (void) { refreshAudio(true, true); } void qjackctlConnectionsForm::audioRefresh (void) { refreshAudio(false); } // A JACK audio helper stabilization slot. void qjackctlConnectionsForm::audioStabilize (void) { stabilizeAudio(true); } // Connect current selected JACK MIDI ports. void qjackctlConnectionsForm::midiConnectSelected (void) { if (m_pMidiConnect) { if (m_pMidiConnect->connectSelected()) refreshMidi(false); } } // Check if there's JACK MIDI connections. bool qjackctlConnectionsForm::isMidiConnected (void) const { bool bIsMidiConnected = false; if (m_pMidiConnect) bIsMidiConnected = m_pMidiConnect->canDisconnectAll(); return bIsMidiConnected; } // Disconnect current selected JACK MIDI ports. void qjackctlConnectionsForm::midiDisconnectSelected (void) { if (m_pMidiConnect) { if (m_pMidiConnect->disconnectSelected()) refreshMidi(false); } } // Disconnect all connected JACK MIDI ports. void qjackctlConnectionsForm::midiDisconnectAll (void) { if (m_pMidiConnect) { if (m_pMidiConnect->disconnectAll()) refreshMidi(false); } } // Expand all JACK MIDI client ports. void qjackctlConnectionsForm::midiExpandAll (void) { if (m_pMidiConnect) { m_pMidiConnect->expandAll(); stabilizeMidi(true); } } // JACK MIDI ports disconnecting. void qjackctlConnectionsForm::midiDisconnecting ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->queryDisconnect(pOPort, pIPort, QJACKCTL_SOCKETTYPE_JACK_MIDI); } // Refresh JACK MIDI form by notifying the parent form. void qjackctlConnectionsForm::midiRefreshClear (void) { refreshMidi(true, true); } void qjackctlConnectionsForm::midiRefresh (void) { refreshMidi(false); } // A JACK MIDI helper stabilization slot. void qjackctlConnectionsForm::midiStabilize (void) { stabilizeMidi(true); } // Check if there's ALSA MIDI connections. bool qjackctlConnectionsForm::isAlsaConnected (void) const { bool bIsConnected = false; if (m_pAlsaConnect) bIsConnected = m_pAlsaConnect->canDisconnectAll(); return bIsConnected; } // Connect current selected ALSA MIDI ports. void qjackctlConnectionsForm::alsaConnectSelected (void) { if (m_pAlsaConnect) { if (m_pAlsaConnect->connectSelected()) refreshAlsa(false); } } // Disconnect current selected ALSA MIDI ports. void qjackctlConnectionsForm::alsaDisconnectSelected (void) { if (m_pAlsaConnect) { if (m_pAlsaConnect->disconnectSelected()) refreshAlsa(false); } } // Disconnect all connected ALSA MIDI ports. void qjackctlConnectionsForm::alsaDisconnectAll (void) { if (m_pAlsaConnect) { if (m_pAlsaConnect->disconnectAll()) refreshAlsa(false); } } // Expand all ALSA MIDI client ports. void qjackctlConnectionsForm::alsaExpandAll (void) { if (m_pAlsaConnect) { m_pAlsaConnect->expandAll(); stabilizeAlsa(true); } } // ALSA MIDI ports disconnecting. void qjackctlConnectionsForm::alsaDisconnecting ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->queryDisconnect(pOPort, pIPort, QJACKCTL_SOCKETTYPE_ALSA_MIDI); } // Refresh complete form by notifying the parent form. void qjackctlConnectionsForm::alsaRefreshClear (void) { refreshAlsa(true, true); } void qjackctlConnectionsForm::alsaRefresh (void) { refreshAlsa(false); } // A helper stabilization slot. void qjackctlConnectionsForm::alsaStabilize (void) { stabilizeAlsa(true); } // Either rebuild all connections now // or notify main form for doing that later. void qjackctlConnectionsForm::refreshAudio ( bool bEnabled, bool bClear ) { if (m_pAudioConnect == NULL) return; if (bEnabled) { // m_pAudioConnect->refresh(); stabilizeAudio(bEnabled, bClear); } else { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->refreshJackConnections(); } } void qjackctlConnectionsForm::refreshMidi ( bool bEnabled, bool bClear ) { if (m_pMidiConnect == NULL) return; if (bEnabled) { // m_pMidiConnect->refresh(); stabilizeMidi(bEnabled, bClear); } else { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->refreshJackConnections(); } } void qjackctlConnectionsForm::refreshAlsa ( bool bEnabled, bool bClear ) { if (m_pAlsaConnect == NULL) return; if (bEnabled) { // m_pAlsaConnect->refresh(); stabilizeAlsa(bEnabled, bClear); } else { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->refreshAlsaConnections(); } } // Proper enablement of connections command controls. void qjackctlConnectionsForm::stabilizeAudio ( bool bEnabled, bool bClear ) { if (m_pAudioConnect) m_pAudioConnect->updateContents(!bEnabled || bClear); if (m_pAudioConnect && bEnabled) { m_ui.AudioConnectPushButton->setEnabled( m_pAudioConnect->canConnectSelected()); m_ui.AudioDisconnectPushButton->setEnabled( m_pAudioConnect->canDisconnectSelected()); m_ui.AudioDisconnectAllPushButton->setEnabled( m_pAudioConnect->canDisconnectAll()); m_ui.AudioExpandAllPushButton->setEnabled(true); m_ui.AudioRefreshPushButton->setEnabled(true); } else { m_ui.AudioConnectPushButton->setEnabled(false); m_ui.AudioDisconnectPushButton->setEnabled(false); m_ui.AudioDisconnectAllPushButton->setEnabled(false); m_ui.AudioExpandAllPushButton->setEnabled(false); m_ui.AudioRefreshPushButton->setEnabled(false); } } void qjackctlConnectionsForm::stabilizeMidi ( bool bEnabled, bool bClear ) { if (m_pMidiConnect) m_pMidiConnect->updateContents(!bEnabled || bClear); if (m_pMidiConnect && bEnabled) { m_ui.MidiConnectPushButton->setEnabled( m_pMidiConnect->canConnectSelected()); m_ui.MidiDisconnectPushButton->setEnabled( m_pMidiConnect->canDisconnectSelected()); m_ui.MidiDisconnectAllPushButton->setEnabled( m_pMidiConnect->canDisconnectAll()); m_ui.MidiExpandAllPushButton->setEnabled(true); m_ui.MidiRefreshPushButton->setEnabled(true); } else { m_ui.MidiConnectPushButton->setEnabled(false); m_ui.MidiDisconnectPushButton->setEnabled(false); m_ui.MidiDisconnectAllPushButton->setEnabled(false); m_ui.MidiExpandAllPushButton->setEnabled(false); m_ui.MidiRefreshPushButton->setEnabled(false); } } void qjackctlConnectionsForm::stabilizeAlsa ( bool bEnabled, bool bClear ) { if (m_pAlsaConnect) m_pAlsaConnect->updateContents(!bEnabled || bClear); if (m_pAlsaConnect && bEnabled) { m_ui.AlsaConnectPushButton->setEnabled( m_pAlsaConnect->canConnectSelected()); m_ui.AlsaDisconnectPushButton->setEnabled( m_pAlsaConnect->canDisconnectSelected()); m_ui.AlsaDisconnectAllPushButton->setEnabled( m_pAlsaConnect->canDisconnectAll()); m_ui.AlsaExpandAllPushButton->setEnabled(true); m_ui.AlsaRefreshPushButton->setEnabled(true); } else { m_ui.AlsaConnectPushButton->setEnabled(false); m_ui.AlsaDisconnectPushButton->setEnabled(false); m_ui.AlsaDisconnectAllPushButton->setEnabled(false); m_ui.AlsaExpandAllPushButton->setEnabled(false); m_ui.AlsaRefreshPushButton->setEnabled(false); } } // Client/port aliasing feature update. void qjackctlConnectionsForm::updateAliases (void) { // Set alias maps for all listviews... if (m_pSetup && m_pSetup->bAliasesEnabled) { 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); } 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); } } // Keyboard event handler. void qjackctlConnectionsForm::keyPressEvent ( QKeyEvent *pKeyEvent ) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlConnectionsForm::keyPressEvent(%d)", pKeyEvent->key()); #endif int iKey = pKeyEvent->key(); switch (iKey) { case Qt::Key_Escape: close(); break; default: QWidget::keyPressEvent(pKeyEvent); break; } } // end of qjackctlConnectionsForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMainForm.ui0000644000175000001440000000012412113152421020751 xustar000000000000000027 mtime=1361892625.815912 27 atime=1364826685.252395 30 ctime=1364826685.252395507 qjackctl-0.3.10/src/qjackctlMainForm.ui0000644000175000001440000005542712113152421020255 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2013, 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. qjackctlMainForm 0 0 427 100 1 1 0 0 QjackCtl :/images/qjackctl.png 4 4 28 28 32767 28 Qt::TabFocus Start the JACK server &Start :/images/start1.png Alt+S false Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Stop the JACK server S&top :/images/stop1.png Alt+T Qt::ToolButtonTextBesideIcon 7 7 0 0 260 80 true QFrame::Panel QFrame::Sunken 2 0 50 0 JACK server state Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false 2 20 0 JACK server mode Qt::AlignCenter false 40 0 DSP Load Qt::AlignCenter false 50 0 Sample rate Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 30 0 XRUN Count (notifications) Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false 2 130 0 12 75 true Time display Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 50 0 Transport state Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter false 2 30 0 Transport BPM Qt::AlignCenter false 80 0 75 true Transport time Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter false 28 28 32767 28 Qt::TabFocus Quit processing and exit &Quit :/images/quit1.png Alt+Q Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Show/hide the session management window S&ession :/images/session1.png Alt+E true Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Show/hide the messages log/status window &Messages :/images/messagesstatus1.png Alt+M true Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Show settings and options dialog Set&up... :/images/setup1.png Alt+U Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Show/hide the actual connections patchbay window &Connect :/images/connections1.png Alt+C true Qt::ToolButtonTextBesideIcon 28 28 32767 28 Qt::TabFocus Show/hide the patchbay editor window &Patchbay :/images/patchbay1.png Alt+P true Qt::ToolButtonTextBesideIcon 28 28 48 28 Qt::TabFocus Rewind transport &Rewind :/images/rewind1.png Alt+R 28 28 48 28 Qt::TabFocus Backward transport &Backward :/images/backward1.png Alt+B true 28 28 48 28 Qt::TabFocus Start transport rolling &Play :/images/play1.png Space true 1 1 0 0 28 28 48 28 Qt::TabFocus Stop transport rolling Pa&use :/images/pause1.png Shift+Space 28 28 48 28 Qt::TabFocus Forward transport &Forward :/images/forward1.png Alt+F true 28 28 32767 28 Qt::TabFocus Show information about this application Ab&out... :/images/about1.png Alt+O Qt::ToolButtonTextBesideIcon StartToolButton StopToolButton QuitToolButton SessionToolButton MessagesStatusToolButton SetupToolButton ConnectionsToolButton PatchbayToolButton RewindToolButton BackwardToolButton PlayToolButton PauseToolButton ForwardToolButton AboutToolButton qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAlsaConnect.h0000644000175000001440000000012411362126205021253 xustar000000000000000027 mtime=1271442565.722598 27 atime=1364826684.547395 30 ctime=1364826684.548395496 qjackctl-0.3.10/src/qjackctlAlsaConnect.h0000644000175000001440000000756111362126205020553 0ustar00rncbcusers00000000000000// qjackctlAlsaConnect.h // /**************************************************************************** Copyright (C) 2003-2010, 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 __qjackctlAlsaConnect_h #define __qjackctlAlsaConnect_h #include "qjackctlAbout.h" #include "qjackctlConnect.h" #ifdef CONFIG_ALSA_SEQ #include #else typedef void snd_seq_t; #endif // Forward declarations. class qjackctlAlsaPort; class qjackctlAlsaClient; class qjackctlAlsaClientList; class qjackctlAlsaConnect; // Pixmap-set array indexes. #define QJACKCTL_ALSA_CLIENTO 0 // Output client item pixmap. #define QJACKCTL_ALSA_CLIENTI 1 // Input client item pixmap. #define QJACKCTL_ALSA_PORTO 2 // Output port pixmap. #define QJACKCTL_ALSA_PORTI 3 // Input port pixmap. #define QJACKCTL_ALSA_PIXMAPS 4 // Number of pixmaps in local array. // Jack port list item. class qjackctlAlsaPort : public qjackctlPortItem { public: // Constructor. qjackctlAlsaPort(qjackctlAlsaClient *pClient, const QString& sPortName, int iAlsaPort); // Default destructor. ~qjackctlAlsaPort(); // Jack handles accessors. int alsaClient() const; int alsaPort() const; private: // Instance variables. int m_iAlsaPort; }; // Jack client list item. class qjackctlAlsaClient : public qjackctlClientItem { public: // Constructor. qjackctlAlsaClient(qjackctlAlsaClientList *pClientList, const QString& sClientName, int iAlsaClient); // Default destructor. ~qjackctlAlsaClient(); // Jack client accessors. int alsaClient() const; // Port finder by id. qjackctlAlsaPort *findPort(int iAlsaPort); private: // Instance variables. int m_iAlsaClient; }; // Jack client list. class qjackctlAlsaClientList : public qjackctlClientList { public: // Constructor. qjackctlAlsaClientList(qjackctlClientListView *pListView, bool bReadable); // Default destructor. ~qjackctlAlsaClientList(); // Client finder by id. qjackctlAlsaClient *findClient(int iAlsaClient); // Client port finder by id. qjackctlAlsaPort *findClientPort(int iAlsaClient, int iAlsaPort); // Client:port refreshner (return newest item count). int updateClientPorts(); }; //---------------------------------------------------------------------------- // qjackctlAlsaConnect -- Connections model integrated object. class qjackctlAlsaConnect : public qjackctlConnect { public: // Constructor. qjackctlAlsaConnect(qjackctlConnectView *pConnectView); // Default destructor. ~qjackctlAlsaConnect(); // Common pixmap accessor. const QPixmap& pixmap(int iPixmap) const; protected: // Virtual Connect/Disconnection primitives. bool connectPorts (qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); bool disconnectPorts (qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); // Update port connection references. void updateConnections(); // Update icon size implementation. void updateIconPixmaps(); private: // Local pixmap-set janitor methods. void createIconPixmaps(); void deleteIconPixmaps(); // Local pixmap-set array. QPixmap *m_apPixmaps[QJACKCTL_ALSA_PIXMAPS]; }; #endif // __qjackctlAlsaConnect_h // end of qjackctlAlsaConnect.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSetup.h0000644000175000001440000000012412113160022020147 xustar000000000000000027 mtime=1361895442.999773 27 atime=1364826685.253395 30 ctime=1364826685.253395507 qjackctl-0.3.10/src/qjackctlSetup.h0000644000175000001440000001374612113160022017451 0ustar00rncbcusers00000000000000// qjackctlSetup.h // /**************************************************************************** Copyright (C) 2003-2013, 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 __qjackctlSetup_h #define __qjackctlSetup_h #include "qjackctlConnectAlias.h" #include // Forward declarations. class QComboBox; class QSplitter; // Audio mode combobox item indexes. #define QJACKCTL_DUPLEX 0 #define QJACKCTL_CAPTURE 1 #define QJACKCTL_PLAYBACK 2 // Icon size combobox item indexes. #define QJACKCTL_ICON_16X16 0 #define QJACKCTL_ICON_32X32 1 #define QJACKCTL_ICON_64X64 2 // Server settings preset struct. struct qjackctlPreset { QString sServerPrefix; QString sServerName; bool bRealtime; bool bSoftMode; bool bMonitor; bool bShorts; bool bNoMemLock; bool bUnlockMem; bool bHWMon; bool bHWMeter; bool bIgnoreHW; int iPriority; int iFrames; int iSampleRate; int iPeriods; int iWordLength; int iWait; int iChan; QString sDriver; QString sInterface; int iAudio; int iDither; int iTimeout; QString sInDevice; QString sOutDevice; int iInChannels; int iOutChannels; int iInLatency; int iOutLatency; int iStartDelay; bool bVerbose; int iPortMax; QString sMidiDriver; QString sServerSuffix; }; // Common settings profile class. class qjackctlSetup { public: // Constructor. qjackctlSetup(); // Destructor; ~qjackctlSetup(); // The settings object accessor. QSettings& settings(); // Explicit I/O methods. void loadSetup(); void saveSetup(); // Command line arguments parser. bool parse_args(const QStringList& args); // Command line usage helper. void print_usage(const QString& arg0); // Default (translated) preset name. QString sDefPresetName; // Immediate server start options. bool bStartJack; bool bStartJackCmd; // Server stop options. bool bStopJack; // User supplied command line. QString sCmdLine; // Current (default) preset name. QString sDefPreset; // Available presets list. QStringList presets; // Options... bool bSingleton; QString sServerName; bool bStartupScript; QString sStartupScriptShell; bool bPostStartupScript; QString sPostStartupScriptShell; bool bShutdownScript; QString sShutdownScriptShell; bool bPostShutdownScript; QString sPostShutdownScriptShell; bool bStdoutCapture; QString sXrunRegex; bool bActivePatchbay; QString sActivePatchbayPath; #ifdef CONFIG_AUTO_REFRESH bool bAutoRefresh; int iTimeRefresh; #endif bool bMessagesLog; QString sMessagesLogPath; bool bBezierLines; int iTimeDisplay; int iTimeFormat; QString sMessagesFont; bool bMessagesLimit; int iMessagesLimitLines; QString sDisplayFont1; QString sDisplayFont2; bool bDisplayEffect; bool bDisplayBlink; int iJackClientPortAlias; int iConnectionsIconSize; QString sConnectionsFont; bool bQueryClose; bool bKeepOnTop; bool bSystemTray; bool bStartMinimized; bool bDelayedSetup; bool bServerConfig; QString sServerConfigName; bool bServerConfigTemp; bool bQueryShutdown; bool bAlsaSeqEnabled; bool bDBusEnabled; bool bAliasesEnabled; bool bAliasesEditing; bool bLeftButtons; bool bRightButtons; bool bTransportButtons; bool bTextLabels; int iBaseFontSize; // Defaults... QString sPatchbayPath; // Recent patchbay listing. QStringList patchbays; // Recent session directories. QStringList sessionDirs; // Last open tab page... int iMessagesStatusTabPage; int iConnectionsTabPage; // Last session save type... bool bSessionSaveVersion; // Aliases containers. qjackctlConnectAlias aliasAudioOutputs; qjackctlConnectAlias aliasAudioInputs; qjackctlConnectAlias aliasMidiOutputs; qjackctlConnectAlias aliasMidiInputs; qjackctlConnectAlias aliasAlsaOutputs; qjackctlConnectAlias aliasAlsaInputs; // Aliases preset management methods. bool loadAliases(const QString& sPreset); bool saveAliases(const QString& sPreset); // Preset management methods. bool loadPreset(qjackctlPreset& preset, const QString& sPreset); bool savePreset(qjackctlPreset& preset, const QString& sPreset); bool deletePreset(const QString& sPreset); // Combo box history persistence helper prototypes. void loadComboBoxHistory(QComboBox *pComboBox, int iLimit = 8); void saveComboBoxHistory(QComboBox *pComboBox, int iLimit = 8); // Splitter widget sizes persistence helper methods. void loadSplitterSizes(QSplitter *pSplitter, QList& sizes); void saveSplitterSizes(QSplitter *pSplitter); // Widget geometry persistence helper prototypes. void saveWidgetGeometry(QWidget *pWidget, bool bVisible = false); void loadWidgetGeometry(QWidget *pWidget, bool bVisible = false); private: // Our proper settings profile. QSettings m_settings; }; // Delayed widget setup helper class. class qjackctlDelayedSetup : public QObject { Q_OBJECT public: // Constructor. qjackctlDelayedSetup(QWidget *pWidget, const QPoint& pos, const QSize& size, bool bVisible, int iDelay = 0); protected slots: void setup(); private: QWidget *m_pWidget; QPoint m_pos; QSize m_size; bool m_bVisible; }; #endif // __qjackctlSetup_h // end of qjackctlSetup.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlJackConnect.h0000644000175000001440000000012411362126205021243 xustar000000000000000027 mtime=1271442565.722598 27 atime=1364826685.185395 30 ctime=1364826685.185395506 qjackctl-0.3.10/src/qjackctlJackConnect.h0000644000175000001440000001112311362126205020530 0ustar00rncbcusers00000000000000// qjackctlJackConnect.h // /**************************************************************************** Copyright (C) 2003-2010, 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 __qjackctlJackConnect_h #define __qjackctlJackConnect_h #include "qjackctlAbout.h" #include "qjackctlConnect.h" #include // Forward declarations. class qjackctlJackPort; class qjackctlJackClient; class qjackctlJackClientList; class qjackctlJackConnect; // Connection port type. #define QJACKCTL_JACK_AUDIO 0 #define QJACKCTL_JACK_MIDI 1 // Pixmap-set array indexes/types. #define QJACKCTL_JACK_CLIENTI 0 // Input client item pixmap. #define QJACKCTL_JACK_CLIENTO 1 // Output client item pixmap. #define QJACKCTL_JACK_PORTPTI 2 // Physcal Terminal Input port pixmap. #define QJACKCTL_JACK_PORTPTO 3 // Physical Terminal Output port pixmap. #define QJACKCTL_JACK_PORTPNI 4 // Physical Non-terminal Input port pixmap. #define QJACKCTL_JACK_PORTPNO 5 // Physical Non-terminal Output port pixmap. #define QJACKCTL_JACK_PORTLTI 6 // Logical Terminal Input port pixmap. #define QJACKCTL_JACK_PORTLTO 7 // Logical Terminal Output port pixmap. #define QJACKCTL_JACK_PORTLNI 8 // Logical Non-terminal Input port pixmap. #define QJACKCTL_JACK_PORTLNO 9 // Logical Non-terminal Output port pixmap. #define QJACKCTL_JACK_PIXMAPS 10 // Number of pixmaps in array. // Jack port list item. class qjackctlJackPort : public qjackctlPortItem { public: // Constructor. qjackctlJackPort(qjackctlJackClient *pClient, const QString& sPortName, jack_port_t *pJackPort); // Default destructor. ~qjackctlJackPort(); // Jack handles accessors. jack_client_t *jackClient() const; jack_port_t *jackPort() const; private: // Instance variables. jack_port_t *m_pJackPort; }; // Jack client list item. class qjackctlJackClient : public qjackctlClientItem { public: // Constructor. qjackctlJackClient(qjackctlJackClientList *pClientList, const QString& sClientName); // Default destructor. ~qjackctlJackClient(); // Jack client accessors. jack_client_t *jackClient() const; // Jack port lookup. qjackctlJackPort *findJackPort(jack_port_t *pJackPort); }; // Jack client list. class qjackctlJackClientList : public qjackctlClientList { public: // Constructor. qjackctlJackClientList(qjackctlClientListView *pListView, bool bReadable); // Default destructor. ~qjackctlJackClientList(); // Jack port lookup. qjackctlJackPort *findJackClientPort(jack_port_t *pJackPort); // Client:port refreshner (return newest item count). int updateClientPorts(); // Jack client port aliases mode. static void setJackClientPortAlias(int iJackClientPortAlias); static int jackClientPortAlias(); private: // Jack client port aliases mode. static int g_iJackClientPortAlias; }; //---------------------------------------------------------------------------- // qjackctlJackConnect -- Connections model integrated object. class qjackctlJackConnect : public qjackctlConnect { public: // Constructor. qjackctlJackConnect(qjackctlConnectView *pConnectView, int iJackType); // Default destructor. ~qjackctlJackConnect(); // Connection type accessors. int jackType() const; // Common pixmap accessor. const QPixmap& pixmap (int iPixmap) const; protected: // Virtual Connect/Disconnection primitives. bool connectPorts (qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); bool disconnectPorts (qjackctlPortItem *pOPort, qjackctlPortItem *pIPort); // Update port connection references. void updateConnections(); // Update icon size implementation. void updateIconPixmaps(); private: // Local pixmap-set janitor methods. void createIconPixmaps(); void deleteIconPixmaps(); // Local variables. int m_iJackType; // Local pixmap-set array. QPixmap *m_apPixmaps[QJACKCTL_JACK_PIXMAPS]; }; #endif // __qjackctlJackConnect_h // end of qjackctlJackConnect.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSetup.cpp0000644000175000001440000000012412113160022020502 xustar000000000000000027 mtime=1361895442.999773 27 atime=1364826684.550395 30 ctime=1364826684.550395496 qjackctl-0.3.10/src/qjackctlSetup.cpp0000644000175000001440000006657112113160022020010 0ustar00rncbcusers00000000000000// qjackctlSetup.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlSetup.h" #include #include #include #include #include // Constructor. qjackctlSetup::qjackctlSetup (void) : m_settings(QJACKCTL_DOMAIN, QJACKCTL_TITLE) { bStartJackCmd = false; sDefPresetName = QObject::tr("(default)"); loadSetup(); } // Destructor; qjackctlSetup::~qjackctlSetup (void) { saveSetup(); } // Settings accessor. QSettings& qjackctlSetup::settings (void) { return m_settings; } // Explicit load method. void qjackctlSetup::loadSetup (void) { m_settings.beginGroup("/Presets"); sDefPreset = m_settings.value("/DefPreset", sDefPresetName).toString(); QString sPrefix = "/Preset%1"; int i = 0; for (;;) { QString sItem = m_settings.value(sPrefix.arg(++i)).toString(); if (sItem.isEmpty()) break; presets.append(sItem); } m_settings.endGroup(); m_settings.beginGroup("/Options"); bSingleton = m_settings.value("/Singleton", true).toBool(); // sServerName = m_settings.value("/ServerName").toString(); bStartJack = m_settings.value("/StartJack", false).toBool(); // bStartJackCmd = m_settings.value("/StartJackCmd", false).toBool(); bStopJack = m_settings.value("/StopJack", true).toBool(); bStartupScript = m_settings.value("/StartupScript", false).toBool(); sStartupScriptShell = m_settings.value("/StartupScriptShell").toString(); bPostStartupScript = m_settings.value("/PostStartupScript", false).toBool(); sPostStartupScriptShell = m_settings.value("/PostStartupScriptShell").toString(); bShutdownScript = m_settings.value("/ShutdownScript", false).toBool(); sShutdownScriptShell = m_settings.value("/ShutdownScriptShell").toString(); bPostShutdownScript = m_settings.value("/PostShutdownScript", false).toBool(); sPostShutdownScriptShell = m_settings.value("/PostShutdownScriptShell").toString(); bStdoutCapture = m_settings.value("/StdoutCapture", true).toBool(); sXrunRegex = m_settings.value("/XrunRegex", "xrun of at least ([0-9|\\.]+) msecs").toString(); bActivePatchbay = m_settings.value("/ActivePatchbay", false).toBool(); sActivePatchbayPath = m_settings.value("/ActivePatchbayPath").toString(); #ifdef CONFIG_AUTO_REFRESH bAutoRefresh = m_settings.value("/AutoRefresh", false).toBool(); iTimeRefresh = m_settings.value("/TimeRefresh", 10).toInt(); #endif 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(); sDisplayFont1 = m_settings.value("/DisplayFont1").toString(); sDisplayFont2 = m_settings.value("/DisplayFont2").toString(); bDisplayEffect = m_settings.value("/DisplayEffect", true).toBool(); bDisplayBlink = m_settings.value("/DisplayBlink", true).toBool(); iJackClientPortAlias = m_settings.value("/JackClientPortAlias", 0).toInt(); iConnectionsIconSize = m_settings.value("/ConnectionsIconSize", QJACKCTL_ICON_16X16).toInt(); sConnectionsFont = m_settings.value("/ConnectionsFont").toString(); bQueryClose = m_settings.value("/QueryClose", true).toBool(); bKeepOnTop = m_settings.value("/KeepOnTop", false).toBool(); bSystemTray = m_settings.value("/SystemTray", false).toBool(); bStartMinimized = m_settings.value("/StartMinimized", false).toBool(); bDelayedSetup = m_settings.value("/DelayedSetup", false).toBool(); bServerConfig = m_settings.value("/ServerConfig", true).toBool(); sServerConfigName = m_settings.value("/ServerConfigName", ".jackdrc").toString(); bServerConfigTemp = m_settings.value("/ServerConfigTemp", false).toBool(); bQueryShutdown = m_settings.value("/QueryShutdown", true).toBool(); bAlsaSeqEnabled = m_settings.value("/AlsaSeqEnabled", true).toBool(); bDBusEnabled = m_settings.value("/DBusEnabled", false).toBool(); bAliasesEnabled = m_settings.value("/AliasesEnabled", false).toBool(); bAliasesEditing = m_settings.value("/AliasesEditing", false).toBool(); bLeftButtons = m_settings.value("/LeftButtons", true).toBool(); bRightButtons = m_settings.value("/RightButtons", true).toBool(); bTransportButtons = m_settings.value("/TransportButtons", true).toBool(); bTextLabels = m_settings.value("/TextLabels", true).toBool(); iBaseFontSize = m_settings.value("/BaseFontSize", 0).toInt(); m_settings.endGroup(); m_settings.beginGroup("/Defaults"); sPatchbayPath = m_settings.value("/PatchbayPath").toString(); iMessagesStatusTabPage = m_settings.value("/MessagesStatusTabPage", 0).toInt(); iConnectionsTabPage = m_settings.value("/ConnectionsTabPage", 0).toInt(); bSessionSaveVersion = m_settings.value("/SessionSaveVersion", true).toBool(); m_settings.endGroup(); // Load recent patchbay list... m_settings.beginGroup("/Patchbays"); sPrefix = "/Patchbay%1"; i = 0; for (;;) { QString sItem = m_settings.value(sPrefix.arg(++i)).toString(); if (sItem.isEmpty()) break; patchbays.append(sItem); } m_settings.endGroup(); // Load recent session directory list... m_settings.beginGroup("/SessionDirs"); sPrefix = "/SessionDir%1"; i = 0; for (;;) { QString sItem = m_settings.value(sPrefix.arg(++i)).toString(); if (sItem.isEmpty()) break; sessionDirs.append(sItem); } m_settings.endGroup(); } // Explicit save method. void qjackctlSetup::saveSetup (void) { // Save all settings and options... m_settings.beginGroup("/Program"); m_settings.setValue("/Version", QJACKCTL_VERSION); m_settings.endGroup(); m_settings.beginGroup("/Presets"); m_settings.setValue("/DefPreset", sDefPreset); // Save last preset list. QString sPrefix = "/Preset%1"; int i = 0; QStringListIterator iter(presets); while (iter.hasNext()) m_settings.setValue(sPrefix.arg(++i), iter.next()); // Cleanup old entries, if any... while (!m_settings.value(sPrefix.arg(++i)).toString().isEmpty()) m_settings.remove(sPrefix.arg(i)); m_settings.endGroup(); m_settings.beginGroup("/Options"); m_settings.setValue("/Singleton", bSingleton); // m_settings.setValue("/ServerName", sServerName); m_settings.setValue("/StartJack", bStartJack); // m_settings.setValue("/StartJackCmd", bStartJackCmd); m_settings.setValue("/StopJack", bStopJack); m_settings.setValue("/StartupScript", bStartupScript); m_settings.setValue("/StartupScriptShell", sStartupScriptShell); m_settings.setValue("/PostStartupScript", bPostStartupScript); m_settings.setValue("/PostStartupScriptShell", sPostStartupScriptShell); m_settings.setValue("/ShutdownScript", bShutdownScript); m_settings.setValue("/ShutdownScriptShell", sShutdownScriptShell); m_settings.setValue("/PostShutdownScript", bPostShutdownScript); m_settings.setValue("/PostShutdownScriptShell", sPostShutdownScriptShell); m_settings.setValue("/StdoutCapture", bStdoutCapture); m_settings.setValue("/XrunRegex", sXrunRegex); m_settings.setValue("/ActivePatchbay", bActivePatchbay); m_settings.setValue("/ActivePatchbayPath", sActivePatchbayPath); #ifdef CONFIG_AUTO_REFRESH m_settings.setValue("/AutoRefresh", bAutoRefresh); m_settings.setValue("/TimeRefresh", iTimeRefresh); #endif 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); m_settings.setValue("/DisplayFont1", sDisplayFont1); m_settings.setValue("/DisplayFont2", sDisplayFont2); m_settings.setValue("/DisplayEffect", bDisplayEffect); m_settings.setValue("/DisplayBlink", bDisplayBlink); m_settings.setValue("/JackClientPortAlias", iJackClientPortAlias); m_settings.setValue("/ConnectionsIconSize", iConnectionsIconSize); m_settings.setValue("/ConnectionsFont", sConnectionsFont); m_settings.setValue("/QueryClose", bQueryClose); m_settings.setValue("/KeepOnTop", bKeepOnTop); m_settings.setValue("/SystemTray", bSystemTray); m_settings.setValue("/StartMinimized", bStartMinimized); m_settings.setValue("/DelayedSetup", bDelayedSetup); m_settings.setValue("/ServerConfig", bServerConfig); m_settings.setValue("/ServerConfigName", sServerConfigName); m_settings.setValue("/ServerConfigTemp", bServerConfigTemp); m_settings.setValue("/QueryShutdown", bQueryShutdown); m_settings.setValue("/AlsaSeqEnabled", bAlsaSeqEnabled); m_settings.setValue("/DBusEnabled", bDBusEnabled); m_settings.setValue("/AliasesEnabled", bAliasesEnabled); m_settings.setValue("/AliasesEditing", bAliasesEditing); m_settings.setValue("/LeftButtons", bLeftButtons); m_settings.setValue("/RightButtons", bRightButtons); m_settings.setValue("/TransportButtons", bTransportButtons); m_settings.setValue("/TextLabels", bTextLabels); m_settings.setValue("/BaseFontSize", iBaseFontSize); m_settings.endGroup(); m_settings.beginGroup("/Defaults"); m_settings.setValue("/PatchbayPath", sPatchbayPath); m_settings.setValue("/MessagesStatusTabPage", iMessagesStatusTabPage); m_settings.setValue("/ConnectionsTabPage", iConnectionsTabPage); m_settings.setValue("/SessionSaveVersion", bSessionSaveVersion); m_settings.endGroup(); // Save patchbay list... m_settings.beginGroup("/Patchbays"); sPrefix = "/Patchbay%1"; i = 0; QStringListIterator iter2(patchbays); while (iter2.hasNext()) m_settings.setValue(sPrefix.arg(++i), iter2.next()); // Cleanup old entries, if any... while (!m_settings.value(sPrefix.arg(++i)).toString().isEmpty()) m_settings.remove(sPrefix.arg(i)); m_settings.endGroup(); // Save session directory list... m_settings.beginGroup("/SessionDirs"); sPrefix = "/SessionDir%1"; i = 0; QStringListIterator iter3(sessionDirs); while (iter3.hasNext()) m_settings.setValue(sPrefix.arg(++i), iter3.next()); // Cleanup old entries, if any... while (!m_settings.value(sPrefix.arg(++i)).toString().isEmpty()) m_settings.remove(sPrefix.arg(i)); m_settings.endGroup(); // Commit all changes to disk. m_settings.sync(); } //--------------------------------------------------------------------------- // Aliases preset management methods. bool qjackctlSetup::loadAliases ( const QString& sPreset ) { QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = '/' + sPreset; // Check if on list. if (!presets.contains(sPreset)) return false; } // Load preset aliases... 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"); m_settings.endGroup(); m_settings.beginGroup("/Midi"); aliasMidiOutputs.loadSettings(m_settings, "/Outputs"); aliasMidiInputs.loadSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Alsa"); aliasAlsaOutputs.loadSettings(m_settings, "/Outputs"); aliasAlsaInputs.loadSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.endGroup(); return true; } bool qjackctlSetup::saveAliases ( const QString& sPreset ) { QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = "/" + sPreset; // Append to list if not already. if (!presets.contains(sPreset)) presets.prepend(sPreset); } // Save preset aliases... const QString sAliasesKey = "/Aliases" + sSuffix; m_settings.remove(sAliasesKey); m_settings.beginGroup(sAliasesKey); m_settings.beginGroup("/Jack"); // FIXME: Audio aliasAudioOutputs.saveSettings(m_settings, "/Outputs"); aliasAudioInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Midi"); aliasMidiOutputs.saveSettings(m_settings, "/Outputs"); aliasMidiInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.beginGroup("/Alsa"); aliasAlsaOutputs.saveSettings(m_settings, "/Outputs"); aliasAlsaInputs.saveSettings(m_settings, "/Inputs"); m_settings.endGroup(); m_settings.endGroup(); return true; } //--------------------------------------------------------------------------- // Preset management methods. bool qjackctlSetup::loadPreset ( qjackctlPreset& preset, const QString& sPreset ) { QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = '/' + sPreset; // Check if on list. if (!presets.contains(sPreset)) return false; } m_settings.beginGroup("/Settings" + sSuffix); preset.sServerPrefix = m_settings.value("/Server", "jackd").toString(); preset.sServerName = m_settings.value("/ServerName").toString(); preset.bRealtime = m_settings.value("/Realtime", true).toBool(); preset.bSoftMode = m_settings.value("/SoftMode", false).toBool(); preset.bMonitor = m_settings.value("/Monitor", false).toBool(); 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(); preset.iFrames = m_settings.value("/Frames", 1024).toInt(); preset.iSampleRate = m_settings.value("/SampleRate", 48000).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(); preset.iChan = m_settings.value("/Chan", 0).toInt(); preset.sDriver = m_settings.value("/Driver", "alsa").toString(); preset.sInterface = m_settings.value("/Interface").toString(); preset.iAudio = m_settings.value("/Audio", 0).toInt(); preset.iDither = m_settings.value("/Dither", 0).toInt(); preset.iTimeout = m_settings.value("/Timeout", 500).toInt(); preset.sInDevice = m_settings.value("/InDevice").toString(); preset.sOutDevice = m_settings.value("/OutDevice").toString(); preset.iInChannels = m_settings.value("/InChannels", 0).toInt(); preset.iOutChannels = m_settings.value("/OutChannels", 0).toInt(); 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.bVerbose = m_settings.value("/Verbose", false).toBool(); preset.iPortMax = m_settings.value("/PortMax", 256).toInt(); preset.sMidiDriver = m_settings.value("/MidiDriver").toString(); preset.sServerSuffix = m_settings.value("/ServerSuffix").toString(); m_settings.endGroup(); #ifdef CONFIG_JACK_MIDI if (!preset.sMidiDriver.isEmpty() && preset.sMidiDriver != "raw" && preset.sMidiDriver != "seq") preset.sMidiDriver.clear(); #endif return true; } bool qjackctlSetup::savePreset ( qjackctlPreset& preset, const QString& sPreset ) { QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = '/' + sPreset; // Append to list if not already. if (!presets.contains(sPreset)) presets.prepend(sPreset); } m_settings.beginGroup("/Settings" + sSuffix); m_settings.setValue("/Server", preset.sServerPrefix); m_settings.setValue("/ServerName", preset.sServerName); m_settings.setValue("/Realtime", preset.bRealtime); m_settings.setValue("/SoftMode", preset.bSoftMode); m_settings.setValue("/Monitor", preset.bMonitor); 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); m_settings.setValue("/Frames", preset.iFrames); m_settings.setValue("/SampleRate", preset.iSampleRate); m_settings.setValue("/Periods", preset.iPeriods); m_settings.setValue("/WordLength", preset.iWordLength); m_settings.setValue("/Wait", preset.iWait); m_settings.setValue("/Chan", preset.iChan); m_settings.setValue("/Driver", preset.sDriver); m_settings.setValue("/Interface", preset.sInterface); m_settings.setValue("/Audio", preset.iAudio); m_settings.setValue("/Dither", preset.iDither); m_settings.setValue("/Timeout", preset.iTimeout); m_settings.setValue("/InDevice", preset.sInDevice); m_settings.setValue("/OutDevice", preset.sOutDevice); m_settings.setValue("/InChannels", preset.iInChannels); m_settings.setValue("/OutChannels", preset.iOutChannels); m_settings.setValue("/InLatency", preset.iInLatency); m_settings.setValue("/OutLatency", preset.iOutLatency); m_settings.setValue("/StartDelay", preset.iStartDelay); m_settings.setValue("/Verbose", preset.bVerbose); m_settings.setValue("/PortMax", preset.iPortMax); m_settings.setValue("/MidiDriver", preset.sMidiDriver); m_settings.setValue("/ServerSuffix", preset.sServerSuffix); m_settings.endGroup(); return true; } bool qjackctlSetup::deletePreset ( const QString& sPreset ) { QString sSuffix; if (sPreset != sDefPresetName && !sPreset.isEmpty()) { sSuffix = '/' + sPreset; int iPreset = presets.indexOf(sPreset); if (iPreset < 0) return false; presets.removeAt(iPreset); m_settings.remove("/Settings" + sSuffix); m_settings.remove("/Aliases" + sSuffix); } return true; } //------------------------------------------------------------------------- // Command-line argument stuff. // // Help about command line options. void qjackctlSetup::print_usage ( const QString& arg0 ) { QTextStream out(stderr); const QString sEot = "\n\t"; const QString sEol = "\n\n"; out << QObject::tr("Usage: %1" " [options] [command-and-args]").arg(arg0) + sEol; out << QJACKCTL_TITLE " - " + QObject::tr(QJACKCTL_SUBTITLE) + sEol; out << QObject::tr("Options:") + sEol; out << " -s, --start" + sEot + QObject::tr("Start JACK audio server immediately") + sEol; out << " -p, --preset=[label]" + sEot + QObject::tr("Set default settings preset name") + sEol; out << " -a, --active-patchbay=[path]" + sEot + QObject::tr("Set active patchbay definition file") + sEol; out << " -n, --server-name=[label]" + sEot + QObject::tr("Set default JACK audio server name") + sEol; out << " -h, --help" + sEot + QObject::tr("Show help about command line options") + sEol; out << " -v, --version" + sEot + QObject::tr("Show version information") + sEol; } // Parse command line arguments into m_settings. bool qjackctlSetup::parse_args ( const QStringList& args ) { QTextStream out(stderr); const QString sEol = "\n\n"; int iCmdArgs = 0; int argc = args.count(); for (int i = 1; i < argc; i++) { if (iCmdArgs > 0) { sCmdLine += ' '; sCmdLine += args.at(i); iCmdArgs++; continue; } QString sArg = args.at(i); QString sVal = QString::null; 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") { bStartJackCmd = true; } else if (sArg == "-p" || sArg == "--preset") { if (sVal.isNull()) { out << QObject::tr("Option -p requires an argument (preset).") + sEol; return false; } sDefPreset = sVal; if (iEqual < 0) i++; } else if (sArg == "-a" || sArg == "--active-patchbay") { if (sVal.isNull()) { out << QObject::tr("Option -a requires an argument (path).") + sEol; return false; } bActivePatchbay = true; sActivePatchbayPath = sVal; if (iEqual < 0) i++; } else if (sArg == "-n" || sArg == "--server-name") { if (sVal.isNull()) { out << QObject::tr("Option -n requires an argument (name).") + sEol; return false; } sServerName = sVal; if (iEqual < 0) i++; } else if (sArg == "-h" || sArg == "--help") { print_usage(args.at(0)); return false; } else if (sArg == "-v" || sArg == "--version") { out << QObject::tr("Qt: %1\n").arg(qVersion()); out << QObject::tr(QJACKCTL_TITLE ": %1\n").arg(QJACKCTL_VERSION); return false; } // FIXME: Avoid auto-start jackd stuffed args! else if (sArg != "-T" && sArg != "-ndefault") { // Here starts the optional command line... sCmdLine += sArg; iCmdArgs++; } } // HACK: If there's a command line, it must be spawned on background... if (iCmdArgs > 0) sCmdLine += " &"; // Alright with argument parsing. return true; } //--------------------------------------------------------------------------- // Combo box history persistence helper implementation. void qjackctlSetup::loadComboBoxHistory ( QComboBox *pComboBox, int iLimit ) { // Load combobox list from configuration settings file... m_settings.beginGroup("/History/" + pComboBox->objectName()); if (m_settings.childKeys().count() > 0) { pComboBox->setUpdatesEnabled(false); pComboBox->setDuplicatesEnabled(false); pComboBox->clear(); for (int i = 0; i < iLimit; i++) { const QString& sText = m_settings.value( "/Item" + QString::number(i + 1)).toString(); if (sText.isEmpty()) break; pComboBox->addItem(sText); } pComboBox->setUpdatesEnabled(true); } m_settings.endGroup(); } void qjackctlSetup::saveComboBoxHistory ( QComboBox *pComboBox, int iLimit ) { // Add current text as latest item... const QString& sCurrentText = pComboBox->currentText(); int iCount = pComboBox->count(); for (int i = 0; i < iCount; i++) { const QString& sText = pComboBox->itemText(i); if (sText == sCurrentText) { pComboBox->removeItem(i); iCount--; break; } } while (iCount >= iLimit) pComboBox->removeItem(--iCount); pComboBox->insertItem(0, sCurrentText); iCount++; // Save combobox list to configuration settings file... m_settings.beginGroup("/History/" + pComboBox->objectName()); for (int i = 0; i < iCount; i++) { const QString& sText = pComboBox->itemText(i); if (sText.isEmpty()) break; m_settings.setValue("/Item" + QString::number(i + 1), sText); } m_settings.endGroup(); } //--------------------------------------------------------------------------- // Splitter widget sizes persistence helper methods. void qjackctlSetup::loadSplitterSizes ( QSplitter *pSplitter, QList& sizes ) { // Try to restore old splitter sizes... if (pSplitter) { m_settings.beginGroup("/Splitter/" + pSplitter->objectName()); QStringList list = m_settings.value("/sizes").toStringList(); if (!list.isEmpty()) { sizes.clear(); QStringListIterator iter(list); while (iter.hasNext()) sizes.append(iter.next().toInt()); } pSplitter->setSizes(sizes); m_settings.endGroup(); } } void qjackctlSetup::saveSplitterSizes ( QSplitter *pSplitter ) { // Try to save current splitter sizes... if (pSplitter) { m_settings.beginGroup("/Splitter/" + pSplitter->objectName()); QStringList list; QList sizes = pSplitter->sizes(); QListIterator iter(sizes); while (iter.hasNext()) list.append(QString::number(iter.next())); if (!list.isEmpty()) m_settings.setValue("/sizes", list); m_settings.endGroup(); } } //--------------------------------------------------------------------------- // Widget geometry persistence helper methods. void qjackctlSetup::loadWidgetGeometry ( QWidget *pWidget, bool bVisible ) { // Try to restore old form window positioning. if (pWidget) { QPoint wpos; QSize wsize; m_settings.beginGroup("/Geometry/" + pWidget->objectName()); wpos.setX(m_settings.value("/x", -1).toInt()); wpos.setY(m_settings.value("/y", -1).toInt()); wsize.setWidth(m_settings.value("/width", -1).toInt()); wsize.setHeight(m_settings.value("/height", -1).toInt()); if (!bVisible) bVisible = m_settings.value("/visible", false).toBool(); m_settings.endGroup(); new qjackctlDelayedSetup(pWidget, wpos, wsize, bVisible && !bStartMinimized, (bDelayedSetup ? 1000 : 0)); } } void qjackctlSetup::saveWidgetGeometry ( QWidget *pWidget, bool bVisible ) { // Try to save form window position... // (due to X11 window managers ideossincrasies, we better // only save the form geometry while its up and visible) if (pWidget) { m_settings.beginGroup("/Geometry/" + pWidget->objectName()); const QPoint& wpos = pWidget->pos(); const QSize& wsize = pWidget->size(); if (!bVisible) bVisible = pWidget->isVisible(); m_settings.setValue("/x", wpos.x()); m_settings.setValue("/y", wpos.y()); m_settings.setValue("/width", wsize.width()); m_settings.setValue("/height", wsize.height()); m_settings.setValue("/visible", bVisible && !bStartMinimized); m_settings.endGroup(); } } //--------------------------------------------------------------------------- // Delayed setup option. // Delayed widget setup helper class. qjackctlDelayedSetup::qjackctlDelayedSetup ( QWidget *pWidget, const QPoint& pos, const QSize& size, bool bVisible, int iDelay ) : m_pos(pos), m_size(size) { m_pWidget = pWidget; m_bVisible = bVisible; if (iDelay > 0) { QTimer::singleShot(iDelay, this, SLOT(setup())); } else { setup(); } } void qjackctlDelayedSetup::setup (void) { if (m_pWidget) { if (m_pos.x() > 0 && m_pos.y() > 0) m_pWidget->move(m_pos); if (m_size.width() > 0 && m_size.height() > 0) m_pWidget->resize(m_size); else m_pWidget->adjustSize(); if (m_bVisible) m_pWidget->show(); } deleteLater(); } // end of qjackctlSetup.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSessionFile.txt0000644000175000001440000000012411367520057021704 xustar000000000000000027 mtime=1272881199.986164 27 atime=1364826684.942395 30 ctime=1364826684.942395502 qjackctl-0.3.10/src/qjackctlSessionFile.txt0000644000175000001440000000123011367520057021167 0ustar00rncbcusers00000000000000qjackctlSession format specification ------------------------------------ client-command . . . . . . . . . session-name := string-literal client-name := string-literal client-uuid := string-literal client-command := string-literal port-name := string-literal port-type := "in" | "out" qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayForm.cpp0000644000175000001440000000012411533267321022000 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826685.330395 30 ctime=1364826685.330395508 qjackctl-0.3.10/src/qjackctlPatchbayForm.cpp0000644000175000001440000004510111533267321021270 0ustar00rncbcusers00000000000000// qjackctlPatchbayForm.cpp // /**************************************************************************** Copyright (C) 2003-2011, 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 "qjackctlPatchbayForm.h" #include "qjackctlPatchbayFile.h" #include "qjackctlSetup.h" #include "qjackctlMainForm.h" #include #include #include #include #include #include //---------------------------------------------------------------------------- // qjackctlPatchbayForm -- UI wrapper form. // Constructor. qjackctlPatchbayForm::qjackctlPatchbayForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QWidget(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); m_pSetup = NULL; // Create the patchbay view object. m_pPatchbay = new qjackctlPatchbay(m_ui.PatchbayView); m_iUntitled = 0; m_bActivePatchbay = false; m_iUpdate = 0; // UI connections... QObject::connect(m_ui.NewPatchbayPushButton, SIGNAL(clicked()), SLOT(newPatchbay())); QObject::connect(m_ui.LoadPatchbayPushButton, SIGNAL(clicked()), SLOT(loadPatchbay())); QObject::connect(m_ui.SavePatchbayPushButton, SIGNAL(clicked()), SLOT(savePatchbay())); QObject::connect(m_ui.PatchbayComboBox, SIGNAL(activated(int)), SLOT(selectPatchbay(int))); QObject::connect(m_ui.ActivatePatchbayPushButton, SIGNAL(clicked()), SLOT(toggleActivePatchbay())); QObject::connect(m_ui.OSocketAddPushButton, SIGNAL(clicked()), SLOT(addOSocket())); QObject::connect(m_ui.OSocketEditPushButton, SIGNAL(clicked()), SLOT(editOSocket())); QObject::connect(m_ui.OSocketCopyPushButton, SIGNAL(clicked()), SLOT(copyOSocket())); QObject::connect(m_ui.OSocketRemovePushButton, SIGNAL(clicked()), SLOT(removeOSocket())); QObject::connect(m_ui.OSocketMoveUpPushButton, SIGNAL(clicked()), SLOT(moveUpOSocket())); QObject::connect(m_ui.OSocketMoveDownPushButton, SIGNAL(clicked()), SLOT(moveDownOSocket())); QObject::connect(m_ui.ISocketAddPushButton, SIGNAL(clicked()), SLOT(addISocket())); QObject::connect(m_ui.ISocketEditPushButton, SIGNAL(clicked()), SLOT(editISocket())); QObject::connect(m_ui.ISocketCopyPushButton, SIGNAL(clicked()), SLOT(copyISocket())); QObject::connect(m_ui.ISocketRemovePushButton, SIGNAL(clicked()), SLOT(removeISocket())); QObject::connect(m_ui.ISocketMoveUpPushButton, SIGNAL(clicked()), SLOT(moveUpISocket())); QObject::connect(m_ui.ISocketMoveDownPushButton, SIGNAL(clicked()), SLOT(moveDownISocket())); QObject::connect(m_ui.ConnectPushButton, SIGNAL(clicked()), SLOT(connectSelected())); QObject::connect(m_ui.DisconnectPushButton, SIGNAL(clicked()), SLOT(disconnectSelected())); QObject::connect(m_ui.DisconnectAllPushButton, SIGNAL(clicked()), SLOT(disconnectAll())); QObject::connect(m_ui.ExpandAllPushButton, SIGNAL(clicked()), SLOT(expandAll())); QObject::connect(m_ui.RefreshPushButton, SIGNAL(clicked()), SLOT(refreshForm())); // Connect it to some UI feedback slot. QObject::connect(m_ui.PatchbayView->OListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(stabilizeForm())); QObject::connect(m_ui.PatchbayView->IListView(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), SLOT(stabilizeForm())); // Dirty patchbay dispatcher (stabilization deferral). QObject::connect(m_ui.PatchbayView, SIGNAL(contentsChanged()), SLOT(contentsChanged())); newPatchbayFile(false); stabilizeForm(); } // Destructor. qjackctlPatchbayForm::~qjackctlPatchbayForm (void) { // May delete the patchbay view object. delete m_pPatchbay; } // Notify our parent that we're emerging. void qjackctlPatchbayForm::showEvent ( QShowEvent *pShowEvent ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); stabilizeForm(); QWidget::showEvent(pShowEvent); } // Notify our parent that we're closing. void qjackctlPatchbayForm::hideEvent ( QHideEvent *pHideEvent ) { QWidget::hideEvent(pHideEvent); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Just about to notify main-window that we're closing. void qjackctlPatchbayForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Set reference to global options, mostly needed for the // initial sizes of the main splitter views... void qjackctlPatchbayForm::setup ( qjackctlSetup *pSetup ) { m_pSetup = pSetup; // Load main splitter sizes... if (m_pSetup) { QList sizes; sizes.append(180); sizes.append(60); sizes.append(180); m_pSetup->loadSplitterSizes(m_ui.PatchbayView, sizes); } } // Patchbay view accessor. qjackctlPatchbayView *qjackctlPatchbayForm::patchbayView (void) const { return m_ui.PatchbayView; } // Window close event handlers. bool qjackctlPatchbayForm::queryClose (void) { bool bQueryClose = true; if (m_ui.PatchbayView->dirty()) { switch (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("The patchbay definition has been changed:\n\n" "\"%1\"\n\nDo you want to save the changes?") .arg(m_sPatchbayName), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel)) { case QMessageBox::Save: savePatchbay(); // Fall thru.... case QMessageBox::Discard: break; default: // Cancel. bQueryClose = false; } } // Save main splitter sizes... if (m_pSetup && bQueryClose) m_pSetup->saveSplitterSizes(m_ui.PatchbayView); return bQueryClose; } // Contents change deferrer slot... void qjackctlPatchbayForm::contentsChanged (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->refreshPatchbay(); } // Refresh complete form. void qjackctlPatchbayForm::refreshForm (void) { m_pPatchbay->refresh(); stabilizeForm(); } // A helper stabilization slot. void qjackctlPatchbayForm::stabilizeForm ( void ) { m_ui.SavePatchbayPushButton->setEnabled(m_ui.PatchbayView->dirty()); m_ui.ActivatePatchbayPushButton->setEnabled( QFileInfo(m_sPatchbayPath).exists()); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); m_bActivePatchbay = (pMainForm && pMainForm->isActivePatchbay(m_sPatchbayPath)); m_ui.ActivatePatchbayPushButton->setChecked(m_bActivePatchbay); if (m_ui.PatchbayView->dirty()) { m_ui.PatchbayComboBox->setItemText( m_ui.PatchbayComboBox->currentIndex(), tr("%1 [modified]").arg(m_sPatchbayName)); } // Take care that IT might be destroyed already... if (m_ui.PatchbayView->binding() == NULL) return; bool bExpandAll = false; qjackctlSocketList *pSocketList; qjackctlSocketItem *pSocketItem; int iItemCount, iItem; pSocketList = m_pPatchbay->OSocketList(); pSocketItem = pSocketList->selectedSocketItem(); iItemCount = (pSocketList->listView())->topLevelItemCount(); bExpandAll = bExpandAll || (iItemCount > 0); if (pSocketItem) { iItem = (pSocketList->listView())->indexOfTopLevelItem(pSocketItem); m_ui.OSocketEditPushButton->setEnabled(true); m_ui.OSocketCopyPushButton->setEnabled(true); m_ui.OSocketRemovePushButton->setEnabled(true); m_ui.OSocketMoveUpPushButton->setEnabled(iItem > 0); m_ui.OSocketMoveDownPushButton->setEnabled(iItem < iItemCount - 1); } else { m_ui.OSocketEditPushButton->setEnabled(false); m_ui.OSocketCopyPushButton->setEnabled(false); m_ui.OSocketRemovePushButton->setEnabled(false); m_ui.OSocketMoveUpPushButton->setEnabled(false); m_ui.OSocketMoveDownPushButton->setEnabled(false); } pSocketList = m_pPatchbay->ISocketList(); pSocketItem = pSocketList->selectedSocketItem(); iItemCount = (pSocketList->listView())->topLevelItemCount(); bExpandAll = bExpandAll || (iItemCount > 0); if (pSocketItem) { iItem = (pSocketList->listView())->indexOfTopLevelItem(pSocketItem); m_ui.ISocketEditPushButton->setEnabled(true); m_ui.ISocketCopyPushButton->setEnabled(true); m_ui.ISocketRemovePushButton->setEnabled(true); m_ui.ISocketMoveUpPushButton->setEnabled(iItem > 0); m_ui.ISocketMoveDownPushButton->setEnabled(iItem < iItemCount - 1); } else { m_ui.ISocketEditPushButton->setEnabled(false); m_ui.ISocketCopyPushButton->setEnabled(false); m_ui.ISocketRemovePushButton->setEnabled(false); m_ui.ISocketMoveUpPushButton->setEnabled(false); m_ui.ISocketMoveDownPushButton->setEnabled(false); } m_ui.ConnectPushButton->setEnabled( m_pPatchbay->canConnectSelected()); m_ui.DisconnectPushButton->setEnabled( m_pPatchbay->canDisconnectSelected()); m_ui.DisconnectAllPushButton->setEnabled( m_pPatchbay->canDisconnectAll()); m_ui.ExpandAllPushButton->setEnabled(bExpandAll); } // Patchbay path accessor. const QString& qjackctlPatchbayForm::patchbayPath (void) const { return m_sPatchbayPath; } // Reset patchbay definition from scratch. void qjackctlPatchbayForm::newPatchbayFile ( bool bSnapshot ) { m_pPatchbay->clear(); m_sPatchbayPath.clear(); m_sPatchbayName = tr("Untitled%1").arg(m_iUntitled++); if (bSnapshot) m_pPatchbay->connectionsSnapshot(); // updateRecentPatchbays(); } // Load patchbay definitions from specific file path. bool qjackctlPatchbayForm::loadPatchbayFile ( const QString& sFileName ) { // Check if we're going to discard safely the current one... if (!queryClose()) return false; // We'll have a temporary rack... qjackctlPatchbayRack rack; // Step 1: load from file... if (!qjackctlPatchbayFile::load(&rack, sFileName)) { QMessageBox::critical(this, tr("Error") + " - " QJACKCTL_SUBTITLE1, tr("Could not load patchbay definition file: \n\n\"%1\"") .arg(sFileName), QMessageBox::Cancel); // Reset/disable further trials. m_sPatchbayPath.clear(); return false; } // Step 2: load from rack... m_pPatchbay->loadRack(&rack); // Step 3: stabilize form... m_sPatchbayPath = sFileName; m_sPatchbayName = QFileInfo(sFileName).completeBaseName(); // updateRecentPatchbays(); return true; } // Save current patchbay definition to specific file path. bool qjackctlPatchbayForm::savePatchbayFile ( const QString& sFileName ) { // We'll have a temporary rack... qjackctlPatchbayRack rack; // Step 1: save to rack... m_pPatchbay->saveRack(&rack); // Step 2: save to file... if (!qjackctlPatchbayFile::save(&rack, sFileName)) { QMessageBox::critical(this, tr("Error") + " - " QJACKCTL_SUBTITLE1, tr("Could not save patchbay definition file: \n\n\"%1\"") .arg(sFileName), QMessageBox::Cancel); return false; } // Step 3: stabilize form... m_sPatchbayPath = sFileName; m_sPatchbayName = QFileInfo(sFileName).completeBaseName(); // updateRecentPatchbays(); // Step 4: notify main form if applicable ... qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); m_bActivePatchbay = (pMainForm && pMainForm->isActivePatchbay(m_sPatchbayPath)); if (m_bActivePatchbay) pMainForm->updateActivePatchbay(); return true; } // Dirty-(re)load patchbay definitions from know rack. void qjackctlPatchbayForm::loadPatchbayRack ( qjackctlPatchbayRack *pRack ) { // Step 1: load from rack... m_pPatchbay->loadRack(pRack); // Override dirty flag. m_ui.PatchbayView->setDirty(true); // Done. stabilizeForm(); } // Create a new patchbay definition from scratch. void qjackctlPatchbayForm::newPatchbay (void) { // Assume a snapshot from scratch... bool bSnapshot = false; // Ask user what he/she wants to do... qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm && (pMainForm->jackClient() || pMainForm->alsaSeq())) { switch (QMessageBox::information(this, tr("New Patchbay definition") + " - " QJACKCTL_SUBTITLE1, tr("Create patchbay definition as a snapshot\n" "of all actual client connections?"), QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel)) { case QMessageBox::Yes: bSnapshot = true; break; case QMessageBox::No: bSnapshot = false; break; default: // Cancel. return; } } // Check if we can discard safely the current one... if (!queryClose()) return; // Reset patchbay editor. newPatchbayFile(bSnapshot); updateRecentPatchbays(); stabilizeForm(); } // Load patchbay definitions from file. void qjackctlPatchbayForm::loadPatchbay (void) { QString sFileName = QFileDialog::getOpenFileName( this, tr("Load Patchbay Definition"), // Parent & Caption. m_sPatchbayPath, // Start here. tr("Patchbay Definition files") + " (*.xml)" // Filter (XML files) ); if (sFileName.isEmpty()) return; // Load it right away. if (loadPatchbayFile(sFileName)) updateRecentPatchbays(); stabilizeForm(); } // Save current patchbay definition to file. void qjackctlPatchbayForm::savePatchbay (void) { QString sFileName = QFileDialog::getSaveFileName( this, tr("Save Patchbay Definition"), // Parent & Caption. m_sPatchbayPath, // Start here. tr("Patchbay Definition files") + " (*.xml)" // Filter (XML files) ); if (sFileName.isEmpty()) return; // Enforce .xml extension... if (QFileInfo(sFileName).suffix().isEmpty()) sFileName += ".xml"; // Save it right away. if (savePatchbayFile(sFileName)) updateRecentPatchbays(); stabilizeForm(); } // A new patchbay has been selected void qjackctlPatchbayForm::selectPatchbay ( int iPatchbay ) { // Remember and avoid reloading the previous (first) selected one. if (iPatchbay > 0) { // Take care whether the first is untitled, and // thus not present in the recenet ptachbays list if (m_sPatchbayPath.isEmpty()) iPatchbay--; if (iPatchbay >= 0 && iPatchbay < m_recentPatchbays.count()) { // If we cannot load the new one, backout... loadPatchbayFile(m_recentPatchbays[iPatchbay]); updateRecentPatchbays(); } } stabilizeForm(); } // Set current active patchbay definition file. void qjackctlPatchbayForm::toggleActivePatchbay (void) { // Check if we're going to discard safely the current one... if (!queryClose()) return; // Activate it... qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) { pMainForm->setActivePatchbay( m_bActivePatchbay ? QString::null : m_sPatchbayPath); } // Need to force/refresh the patchbay list... updateRecentPatchbays(); stabilizeForm(); } // Set/initialize the MRU patchbay list. void qjackctlPatchbayForm::setRecentPatchbays ( const QStringList& patchbays ) { m_recentPatchbays = patchbays; } // Update patchbay MRU variables and widgets. void qjackctlPatchbayForm::updateRecentPatchbays (void) { // TRye not to be reeentrant. if (m_iUpdate > 0) return; m_iUpdate++; // Update the visible combobox... const QIcon icon(":/images/patchbay1.png"); m_ui.PatchbayComboBox->clear(); if (m_sPatchbayPath.isEmpty()) { // Display a probable untitled patchbay... m_ui.PatchbayComboBox->addItem(icon, m_sPatchbayName); } else { // Remove from list if already there (avoid duplicates)... int iIndex = m_recentPatchbays.indexOf(m_sPatchbayPath); if (iIndex >= 0) m_recentPatchbays.removeAt(iIndex); // Put it to front... m_recentPatchbays.push_front(m_sPatchbayPath); } // Time to keep the list under limits. while (m_recentPatchbays.count() > 8) m_recentPatchbays.pop_back(); // Update the main setup list... qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->setRecentPatchbays(m_recentPatchbays); QStringListIterator iter(m_recentPatchbays); while (iter.hasNext()) { const QString& sPatchbayPath = iter.next(); QString sText = QFileInfo(sPatchbayPath).completeBaseName(); if (pMainForm && pMainForm->isActivePatchbay(sPatchbayPath)) sText += " [" + tr("active") + "]"; m_ui.PatchbayComboBox->addItem(icon, sText); } // Sure this one must be currently selected. m_ui.PatchbayComboBox->setCurrentIndex(0); // stabilizeForm(); m_iUpdate--; } // Output socket list push button handlers gallore... void qjackctlPatchbayForm::addOSocket (void) { (m_pPatchbay->OSocketList())->addSocketItem(); } void qjackctlPatchbayForm::removeOSocket (void) { (m_pPatchbay->OSocketList())->removeSocketItem(); } void qjackctlPatchbayForm::editOSocket (void) { (m_pPatchbay->OSocketList())->editSocketItem(); } void qjackctlPatchbayForm::copyOSocket (void) { (m_pPatchbay->OSocketList())->copySocketItem(); } void qjackctlPatchbayForm::moveUpOSocket (void) { (m_pPatchbay->OSocketList())->moveUpSocketItem(); } void qjackctlPatchbayForm::moveDownOSocket (void) { (m_pPatchbay->OSocketList())->moveDownSocketItem(); } // Input socket list push button handlers gallore... void qjackctlPatchbayForm::addISocket (void) { (m_pPatchbay->ISocketList())->addSocketItem(); } void qjackctlPatchbayForm::removeISocket (void) { (m_pPatchbay->ISocketList())->removeSocketItem(); } void qjackctlPatchbayForm::editISocket (void) { (m_pPatchbay->ISocketList())->editSocketItem(); } void qjackctlPatchbayForm::copyISocket (void) { (m_pPatchbay->ISocketList())->copySocketItem(); } void qjackctlPatchbayForm::moveUpISocket (void) { (m_pPatchbay->ISocketList())->moveUpSocketItem(); } void qjackctlPatchbayForm::moveDownISocket (void) { (m_pPatchbay->ISocketList())->moveDownSocketItem(); } // Connect current selected ports. void qjackctlPatchbayForm::connectSelected (void) { m_pPatchbay->connectSelected(); } // Disconnect current selected ports. void qjackctlPatchbayForm::disconnectSelected (void) { m_pPatchbay->disconnectSelected(); } // Disconnect all connected ports. void qjackctlPatchbayForm::disconnectAll (void) { m_pPatchbay->disconnectAll(); } // Expand all socket items. void qjackctlPatchbayForm::expandAll (void) { m_pPatchbay->expandAll(); } // Keyboard event handler. void qjackctlPatchbayForm::keyPressEvent ( QKeyEvent *pKeyEvent ) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlPatchbayForm::keyPressEvent(%d)", pKeyEvent->key()); #endif int iKey = pKeyEvent->key(); switch (iKey) { case Qt::Key_Escape: close(); break; default: QWidget::keyPressEvent(pKeyEvent); break; } } // end of qjackctlPatchbayForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/config.h.in0000644000175000001440000000006212126315075017223 xustar000000000000000020 atime=1364826685 30 ctime=1364826685.785395516 qjackctl-0.3.10/src/config.h.in0000644000175000001440000000663612126315075016524 0ustar00rncbcusers00000000000000/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define if ALSA/MIDI sequencer support is enabled. */ #undef CONFIG_ALSA_SEQ /* Define if CoreAudio/CoreAudio.h is available (Mac OS X). */ #undef CONFIG_COREAUDIO /* Define if D-Bus interface is enabled. */ #undef CONFIG_DBUS /* Define if debugging is enabled. */ #undef CONFIG_DEBUG /* Define if jack_free is available. */ #undef CONFIG_JACK_FREE /* Define if jack_get_max_delayed_usecs is available. */ #undef CONFIG_JACK_MAX_DELAY /* Define if JACK MIDI support is available. */ #undef CONFIG_JACK_MIDI /* Define if jack_port_get_aliases is available. */ #undef CONFIG_JACK_PORT_ALIASES /* Define if jack_is_realtime is available. */ #undef CONFIG_JACK_REALTIME /* Define if JACK session support is available. */ #undef CONFIG_JACK_SESSION /* Define if jack/statistics.h is available. */ #undef CONFIG_JACK_STATISTICS /* Define if jack_tranport_query is available. */ #undef CONFIG_JACK_TRANSPORT /* Define if jack_get_version_string is available. */ #undef CONFIG_JACK_VERSION /* Define if jack_get_xrun_delayed_usecs is available. */ #undef CONFIG_JACK_XRUN_DELAY /* Define if PortAudio interface is enabled. */ #undef CONFIG_PORTAUDIO /* Default installation prefix. */ #undef CONFIG_PREFIX /* Define if round is available. */ #undef CONFIG_ROUND /* Define if debugger stack-trace is enabled. */ #undef CONFIG_STACKTRACE /* Define if system tray is enabled. */ #undef CONFIG_SYSTEM_TRAY /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the `Xext' library (-lXext). */ #undef HAVE_LIBXEXT /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_POLL_H /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `system' function. */ #undef HAVE_SYSTEM /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have that is POSIX.1 compatible. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbay.cpp0000644000175000001440000000012412067640522021155 xustar000000000000000027 mtime=1356808530.226153 27 atime=1364826685.229395 30 ctime=1364826685.230395507 qjackctl-0.3.10/src/qjackctlPatchbay.cpp0000644000175000001440000014776712067640522020472 0ustar00rncbcusers00000000000000// qjackctlPatchbay.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlPatchbay.h" #include "qjackctlMainForm.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION >= 0x050000 #include #include #endif // Interactivity socket form. #include "qjackctlSocketForm.h" // External patchbay loader. #include "qjackctlPatchbayFile.h" //---------------------------------------------------------------------- // class qjackctlPlugItem -- Socket plug list item. // // Constructor. qjackctlPlugItem::qjackctlPlugItem ( qjackctlSocketItem *pSocket, const QString& sPlugName, qjackctlPlugItem *pPlugAfter ) : QTreeWidgetItem(pSocket, pPlugAfter, QJACKCTL_PLUGITEM) { QTreeWidgetItem::setText(0, sPlugName); m_pSocket = pSocket; m_sPlugName = sPlugName; m_pSocket->plugs().append(this); int iPixmap; if (pSocket->socketType() == QJACKCTL_SOCKETTYPE_JACK_AUDIO) iPixmap = QJACKCTL_XPM_AUDIO_PLUG; else iPixmap = QJACKCTL_XPM_MIDI_PLUG; QTreeWidgetItem::setIcon(0, QIcon(pSocket->pixmap(iPixmap))); QTreeWidgetItem::setFlags(QTreeWidgetItem::flags() & ~Qt::ItemIsSelectable); } // Default destructor. qjackctlPlugItem::~qjackctlPlugItem (void) { int iPlug = m_pSocket->plugs().indexOf(this); if (iPlug >= 0) m_pSocket->plugs().removeAt(iPlug); } // Instance accessors. const QString& qjackctlPlugItem::socketName (void) const { return m_pSocket->socketName(); } const QString& qjackctlPlugItem::plugName (void) const { return m_sPlugName; } // Patchbay socket item accessor. qjackctlSocketItem *qjackctlPlugItem::socket (void) const { return m_pSocket; } //---------------------------------------------------------------------- // class qjackctlSocketItem -- Jack client list item. // // Constructor. qjackctlSocketItem::qjackctlSocketItem ( qjackctlSocketList *pSocketList, const QString& sSocketName, const QString& sClientName, int iSocketType, qjackctlSocketItem *pSocketAfter ) : QTreeWidgetItem(pSocketList->listView(), pSocketAfter, QJACKCTL_SOCKETITEM) { QTreeWidgetItem::setText(0, sSocketName); m_pSocketList = pSocketList; m_sSocketName = sSocketName; m_sClientName = sClientName; m_iSocketType = iSocketType; m_bExclusive = false; m_sSocketForward.clear(); m_pSocketList->sockets().append(this); updatePixmap(); } // Default destructor. qjackctlSocketItem::~qjackctlSocketItem (void) { QListIterator iter(m_connects); while (iter.hasNext()) (iter.next())->removeConnect(this); m_connects.clear(); m_plugs.clear(); int iSocket = m_pSocketList->sockets().indexOf(this); if (iSocket >= 0) m_pSocketList->sockets().removeAt(iSocket); } // Instance accessors. const QString& qjackctlSocketItem::socketName (void) const { return m_sSocketName; } const QString& qjackctlSocketItem::clientName (void) const { return m_sClientName; } int qjackctlSocketItem::socketType (void) const { return m_iSocketType; } bool qjackctlSocketItem::isExclusive (void) const { return m_bExclusive; } const QString& qjackctlSocketItem::forward (void) const { return m_sSocketForward; } void qjackctlSocketItem::setSocketName ( const QString& sSocketName ) { m_sSocketName = sSocketName; } void qjackctlSocketItem::setClientName ( const QString& sClientName ) { m_sClientName = sClientName; } void qjackctlSocketItem::setSocketType ( int iSocketType ) { m_iSocketType = iSocketType; } void qjackctlSocketItem::setExclusive ( bool bExclusive ) { m_bExclusive = bExclusive; } void qjackctlSocketItem::setForward ( const QString& sSocketForward ) { m_sSocketForward = sSocketForward; } // Socket flags accessor. bool qjackctlSocketItem::isReadable (void) const { return m_pSocketList->isReadable(); } // Plug finder. qjackctlPlugItem *qjackctlSocketItem::findPlug ( const QString& sPlugName ) { QListIterator iter(m_plugs); while (iter.hasNext()) { qjackctlPlugItem *pPlug = iter.next(); if (sPlugName == pPlug->plugName()) return pPlug; } return NULL; } // Plug list accessor. QList& qjackctlSocketItem::plugs (void) { return m_plugs; } // Connected socket list primitives. void qjackctlSocketItem::addConnect( qjackctlSocketItem *pSocket ) { m_connects.append(pSocket); } void qjackctlSocketItem::removeConnect( qjackctlSocketItem *pSocket ) { int iSocket = m_connects.indexOf(pSocket); if (iSocket >= 0) m_connects.removeAt(iSocket); } // Connected socket finder. qjackctlSocketItem *qjackctlSocketItem::findConnectPtr ( qjackctlSocketItem *pSocketPtr ) { QListIterator iter(m_connects); while (iter.hasNext()) { qjackctlSocketItem *pSocket = iter.next(); if (pSocketPtr == pSocket) return pSocket; } return NULL; } // Connection cache list accessor. const QList& qjackctlSocketItem::connects (void) const { return m_connects; } // Plug list cleaner. void qjackctlSocketItem::clear (void) { qDeleteAll(m_plugs); m_plugs.clear(); } // Socket item pixmap peeker. const QPixmap& qjackctlSocketItem::pixmap ( int iPixmap ) const { return m_pSocketList->pixmap(iPixmap); } // Update pixmap to its proper context. void qjackctlSocketItem::updatePixmap (void) { int iPixmap; if (m_iSocketType == QJACKCTL_SOCKETTYPE_JACK_AUDIO) { iPixmap = (m_bExclusive ? QJACKCTL_XPM_AUDIO_SOCKET_X : QJACKCTL_XPM_AUDIO_SOCKET); } else { iPixmap = (m_bExclusive ? QJACKCTL_XPM_MIDI_SOCKET_X : QJACKCTL_XPM_MIDI_SOCKET); } QTreeWidgetItem::setIcon(0, QIcon(pixmap(iPixmap))); } // Socket item openness status. void qjackctlSocketItem::setOpen ( bool bOpen ) { #if QT_VERSION >= 0x040201 QTreeWidgetItem::setExpanded(bOpen); #else QTreeWidgetItem::treeWidget()->setItemExpanded(this, bOpen); #endif } bool qjackctlSocketItem::isOpen (void) const { #if QT_VERSION >= 0x040201 return QTreeWidgetItem::isExpanded(); #else return QTreeWidgetItem::treeWidget()->isItemExpanded(this); #endif } //---------------------------------------------------------------------- // qjackctlSocketList -- Jack client list. // // Constructor. qjackctlSocketList::qjackctlSocketList ( qjackctlSocketListView *pListView, bool bReadable ) { QPixmap pmXSocket1(":/images/xsocket1.png"); m_pListView = pListView; m_bReadable = bReadable; if (bReadable) { m_sSocketCaption = tr("Output"); m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET] = new QPixmap(":/images/asocketo.png"); m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET_X] = createPixmapMerge(*m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET], pmXSocket1); m_apPixmaps[QJACKCTL_XPM_AUDIO_CLIENT] = new QPixmap(":/images/acliento.png"); m_apPixmaps[QJACKCTL_XPM_AUDIO_PLUG] = new QPixmap(":/images/aportlno.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET] = new QPixmap(":/images/msocketo.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET_X] = createPixmapMerge(*m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET], pmXSocket1); m_apPixmaps[QJACKCTL_XPM_MIDI_CLIENT] = new QPixmap(":/images/mcliento.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_PLUG] = new QPixmap(":/images/mporto.png"); } else { m_sSocketCaption = tr("Input"); m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET] = new QPixmap(":/images/asocketi.png"); m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET_X] = createPixmapMerge(*m_apPixmaps[QJACKCTL_XPM_AUDIO_SOCKET], pmXSocket1); m_apPixmaps[QJACKCTL_XPM_AUDIO_CLIENT] = new QPixmap(":/images/aclienti.png"); m_apPixmaps[QJACKCTL_XPM_AUDIO_PLUG] = new QPixmap(":/images/aportlni.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET] = new QPixmap(":/images/msocketi.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET_X] = createPixmapMerge(*m_apPixmaps[QJACKCTL_XPM_MIDI_SOCKET], pmXSocket1); m_apPixmaps[QJACKCTL_XPM_MIDI_CLIENT] = new QPixmap(":/images/mclienti.png"); m_apPixmaps[QJACKCTL_XPM_MIDI_PLUG] = new QPixmap(":/images/mporti.png"); } if (!m_sSocketCaption.isEmpty()) m_sSocketCaption += ' '; m_sSocketCaption += tr("Socket"); } // Default destructor. qjackctlSocketList::~qjackctlSocketList (void) { clear(); for (int iPixmap = 0; iPixmap < QJACKCTL_XPM_PIXMAPS; iPixmap++) delete m_apPixmaps[iPixmap]; } // Client finder. qjackctlSocketItem *qjackctlSocketList::findSocket ( const QString& sSocketName, int iSocketType ) { QListIterator iter(m_sockets); while (iter.hasNext()) { qjackctlSocketItem *pSocket = iter.next(); if (sSocketName == pSocket->socketName() && iSocketType == pSocket->socketType()) return pSocket; } return NULL; } // Socket list accessor. QList& qjackctlSocketList::sockets (void) { return m_sockets; } // List view accessor. qjackctlSocketListView *qjackctlSocketList::listView (void) const { return m_pListView; } // Socket flags accessor. bool qjackctlSocketList::isReadable (void) const { return m_bReadable; } // Socket caption titler. const QString& qjackctlSocketList::socketCaption (void) const { return m_sSocketCaption; } // Socket list cleaner. void qjackctlSocketList::clear (void) { qDeleteAll(m_sockets); m_sockets.clear(); } // Socket list pixmap peeker. const QPixmap& qjackctlSocketList::pixmap ( int iPixmap ) const { return *m_apPixmaps[iPixmap]; } // Merge two pixmaps with union of respective masks. QPixmap *qjackctlSocketList::createPixmapMerge ( const QPixmap& xpmDst, const QPixmap& xpmSrc ) { QPixmap *pXpmMerge = new QPixmap(xpmDst); if (pXpmMerge) { QBitmap bmMask = xpmDst.mask(); QPainter(&bmMask).drawPixmap(0, 0, xpmSrc.mask()); pXpmMerge->setMask(bmMask); QPainter(pXpmMerge).drawPixmap(0, 0, xpmSrc); } return pXpmMerge; } // Return currently selected socket item. qjackctlSocketItem *qjackctlSocketList::selectedSocketItem (void) const { qjackctlSocketItem *pSocketItem = NULL; QTreeWidgetItem *pItem = m_pListView->currentItem(); if (pItem) { if (pItem->type() == QJACKCTL_PLUGITEM) { pSocketItem = static_cast (pItem->parent()); } else { pSocketItem = static_cast (pItem); } } return pSocketItem; } // Add a new socket item, using interactive form. bool qjackctlSocketList::addSocketItem (void) { bool bResult = false; qjackctlSocketForm socketForm(m_pListView); socketForm.setWindowTitle(tr(" - %1").arg(m_sSocketCaption)); socketForm.setSocketCaption(m_sSocketCaption); socketForm.setPixmaps(m_apPixmaps); socketForm.setSocketList(this); socketForm.setSocketNew(true); qjackctlPatchbaySocket socket(m_sSocketCaption + ' ' + QString::number(m_sockets.count() + 1), QString::null, QJACKCTL_SOCKETTYPE_JACK_AUDIO); socketForm.load(&socket); if (socketForm.exec()) { socketForm.save(&socket); qjackctlSocketItem *pSocketItem = selectedSocketItem(); // m_pListView->setUpdatesEnabled(false); if (pSocketItem) #if QT_VERSION >= 0x040200 pSocketItem->setSelected(false); #else m_pListView->setItemSelected(pSocketItem, false); #endif pSocketItem = new qjackctlSocketItem(this, socket.name(), socket.clientName(), socket.type(), pSocketItem); if (pSocketItem) { pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); qjackctlPlugItem *pPlugItem = NULL; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( pSocketItem, iter.next(), pPlugItem); } bResult = true; } #if QT_VERSION >= 0x040200 pSocketItem->setSelected(true); #else m_pListView->setItemSelected(pSocketItem, true); #endif m_pListView->setCurrentItem(pSocketItem); // m_pListView->setUpdatesEnabled(true); // m_pListView->update(); m_pListView->setDirty(true); } return bResult; } // Remove (delete) currently selected socket item. bool qjackctlSocketList::removeSocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { if (QMessageBox::warning(m_pListView, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("%1 about to be removed:\n\n" "\"%2\"\n\nAre you sure?") .arg(m_sSocketCaption) .arg(pSocketItem->socketName()), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes) { delete pSocketItem; bResult = true; m_pListView->setDirty(true); } } return bResult; } // View or change the properties of currently selected socket item. bool qjackctlSocketList::editSocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { qjackctlSocketForm socketForm(m_pListView); socketForm.setWindowTitle(pSocketItem->socketName() + " - " + m_sSocketCaption); socketForm.setSocketCaption(m_sSocketCaption); socketForm.setPixmaps(m_apPixmaps); socketForm.setSocketList(this); socketForm.setSocketNew(false); qjackctlPatchbaySocket socket(pSocketItem->socketName(), pSocketItem->clientName(), pSocketItem->socketType()); socket.setExclusive(pSocketItem->isExclusive()); socket.setForward(pSocketItem->forward()); QListIterator iter(pSocketItem->plugs()); while (iter.hasNext()) socket.pluglist().append((iter.next())->plugName()); socketForm.load(&socket); socketForm.setConnectCount(pSocketItem->connects().count()); if (socketForm.exec()) { socketForm.save(&socket); // m_pListView->setUpdatesEnabled(false); pSocketItem->clear(); pSocketItem->setText(0, socket.name()); pSocketItem->setSocketName(socket.name()); pSocketItem->setClientName(socket.clientName()); pSocketItem->setSocketType(socket.type()); pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); pSocketItem->updatePixmap(); qjackctlPlugItem *pPlugItem = NULL; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( pSocketItem, iter.next(), pPlugItem); } #if QT_VERSION >= 0x040200 pSocketItem->setSelected(true); #else m_pListView->setItemSelected(pSocketItem, true); #endif m_pListView->setCurrentItem(pSocketItem); // m_pListView->setUpdatesEnabled(true); // m_pListView->triggerUpdate(); m_pListView->setDirty(true); bResult = true; } } return bResult; } // Duplicate and change the properties of currently selected socket item. bool qjackctlSocketList::copySocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { qjackctlSocketForm socketForm(m_pListView); // Find a new distinguishable socket name, please. QString sSocketName; QString sSkel = pSocketItem->socketName(); sSkel.remove(QRegExp("[0-9]+$")).append("%1"); int iSocketType = pSocketItem->socketType(); int iSocketNo = 1; do { sSocketName = sSkel.arg(++iSocketNo); } while (findSocket(sSocketName, iSocketType)); // Show up as a new socket... socketForm.setWindowTitle(tr("%1 - %2") .arg(pSocketItem->socketName()).arg(m_sSocketCaption)); socketForm.setSocketCaption(m_sSocketCaption); socketForm.setPixmaps(m_apPixmaps); socketForm.setSocketList(this); socketForm.setSocketNew(true); qjackctlPatchbaySocket socket(sSocketName, pSocketItem->clientName(), iSocketType); if (pSocketItem->isExclusive()) socket.setExclusive(true); QListIterator iter(pSocketItem->plugs()); while (iter.hasNext()) socket.pluglist().append((iter.next())->plugName()); socketForm.load(&socket); if (socketForm.exec()) { socketForm.save(&socket); pSocketItem = new qjackctlSocketItem(this, socket.name(), socket.clientName(), socket.type(), pSocketItem); if (pSocketItem) { pSocketItem->setExclusive(socket.isExclusive()); pSocketItem->setForward(socket.forward()); qjackctlPlugItem *pPlugItem = NULL; QStringListIterator iter(socket.pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( pSocketItem, iter.next(), pPlugItem); } bResult = true; } #if QT_VERSION >= 0x040200 pSocketItem->setSelected(true); #else m_pListView->setItemSelected(pSocketItem, true); #endif m_pListView->setCurrentItem(pSocketItem); // m_pListView->setUpdatesEnabled(true); // m_pListView->triggerUpdate(); m_pListView->setDirty(true); } } return bResult; } // Toggle exclusive currently selected socket item. bool qjackctlSocketList::exclusiveSocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { pSocketItem->setExclusive(!pSocketItem->isExclusive()); pSocketItem->updatePixmap(); bResult = true; m_pListView->setDirty(true); } return bResult; } // Move current selected socket item up one position. bool qjackctlSocketList::moveUpSocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { int iItem = m_pListView->indexOfTopLevelItem(pSocketItem); if (iItem > 0) { QTreeWidgetItem *pItem = m_pListView->takeTopLevelItem(iItem); if (pItem) { m_pListView->insertTopLevelItem(iItem - 1, pItem); #if QT_VERSION >= 0x040200 pSocketItem->setSelected(true); #else m_pListView->setItemSelected(pSocketItem, true); #endif m_pListView->setCurrentItem(pSocketItem); // m_pListView->setUpdatesEnabled(true); // m_pListView->update(); m_pListView->setDirty(true); bResult = true; } } } return bResult; } // Move current selected socket item down one position. bool qjackctlSocketList::moveDownSocketItem (void) { bool bResult = false; qjackctlSocketItem *pSocketItem = selectedSocketItem(); if (pSocketItem) { int iItem = m_pListView->indexOfTopLevelItem(pSocketItem); int iItemCount = m_pListView->topLevelItemCount(); if (iItem < iItemCount - 1) { QTreeWidgetItem *pItem = m_pListView->takeTopLevelItem(iItem); if (pItem) { m_pListView->insertTopLevelItem(iItem + 1, pItem); #if QT_VERSION >= 0x040200 pSocketItem->setSelected(true); #else m_pListView->setItemSelected(pSocketItem, true); #endif m_pListView->setCurrentItem(pSocketItem); // m_pListView->setUpdatesEnabled(true); // m_pListView->update(); m_pListView->setDirty(true); bResult = true; } } } return bResult; } //---------------------------------------------------------------------------- // qjackctlSocketListView -- Socket list view, supporting drag-n-drop. // Constructor. qjackctlSocketListView::qjackctlSocketListView ( qjackctlPatchbayView *pPatchbayView, bool bReadable ) : QTreeWidget(pPatchbayView) { m_pPatchbayView = pPatchbayView; m_bReadable = bReadable; m_pAutoOpenTimer = 0; m_iAutoOpenTimeout = 0; m_pDragItem = NULL; m_pDropItem = NULL; QHeaderView *pHeader = QTreeWidget::header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); // pHeader->setDefaultSectionSize(120); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::Custom); pHeader->setSectionsMovable(false); pHeader->setSectionsClickable(true); #else // pHeader->setResizeMode(QHeaderView::Custom); pHeader->setMovable(false); pHeader->setClickable(true); #endif // pHeader->setSortIndicatorShown(true); pHeader->setStretchLastSection(true); QTreeWidget::setRootIsDecorated(true); QTreeWidget::setUniformRowHeights(true); // QTreeWidget::setDragEnabled(true); QTreeWidget::setAcceptDrops(true); QTreeWidget::setDropIndicatorShown(true); QTreeWidget::setAutoScroll(true); QTreeWidget::setSelectionMode(QAbstractItemView::SingleSelection); QTreeWidget::setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QTreeWidget::setSortingEnabled(false); QTreeWidget::setMinimumWidth(120); QTreeWidget::setColumnCount(1); // Trap for help/tool-tips events. QTreeWidget::viewport()->installEventFilter(this); QString sText; if (m_bReadable) sText = tr("Output Sockets / Plugs"); else sText = tr("Input Sockets / Plugs"); QTreeWidget::headerItem()->setText(0, sText); QTreeWidget::setToolTip(sText); setAutoOpenTimeout(800); } // Default destructor. qjackctlSocketListView::~qjackctlSocketListView (void) { setAutoOpenTimeout(0); } // Patchbay view dirty flag accessors. void qjackctlSocketListView::setDirty ( bool bDirty ) { m_pPatchbayView->setDirty(bDirty); } bool qjackctlSocketListView::dirty (void) const { return m_pPatchbayView->dirty(); } // Auto-open timeout method. void qjackctlSocketListView::setAutoOpenTimeout ( int iAutoOpenTimeout ) { m_iAutoOpenTimeout = iAutoOpenTimeout; if (m_pAutoOpenTimer) delete m_pAutoOpenTimer; m_pAutoOpenTimer = NULL; if (m_iAutoOpenTimeout > 0) { m_pAutoOpenTimer = new QTimer(this); QObject::connect(m_pAutoOpenTimer, SIGNAL(timeout()), SLOT(timeoutSlot())); } } // Auto-open timeout accessor. int qjackctlSocketListView::autoOpenTimeout (void) const { return m_iAutoOpenTimeout; } // Auto-open timer slot. void qjackctlSocketListView::timeoutSlot (void) { if (m_pAutoOpenTimer) { m_pAutoOpenTimer->stop(); if (m_pDropItem && m_pDropItem->type() == QJACKCTL_SOCKETITEM) { qjackctlSocketItem *pSocketItem = static_cast (m_pDropItem); if (pSocketItem && !pSocketItem->isOpen()) pSocketItem->setOpen(true); } } } // Trap for help/tool-tip events. bool qjackctlSocketListView::eventFilter ( QObject *pObject, QEvent *pEvent ) { QWidget *pViewport = QTreeWidget::viewport(); if (static_cast (pObject) == pViewport && pEvent->type() == QEvent::ToolTip) { QHelpEvent *pHelpEvent = static_cast (pEvent); if (pHelpEvent) { QTreeWidgetItem *pItem = QTreeWidget::itemAt(pHelpEvent->pos()); if (pItem && pItem->type() == QJACKCTL_SOCKETITEM) { qjackctlSocketItem *pSocketItem = static_cast (pItem); if (pSocketItem) { QToolTip::showText(pHelpEvent->globalPos(), pSocketItem->clientName(), pViewport); return true; } } else if (pItem && pItem->type() == QJACKCTL_PLUGITEM) { qjackctlPlugItem *pPlugItem = static_cast (pItem); if (pPlugItem) { QToolTip::showText(pHelpEvent->globalPos(), pPlugItem->plugName(), pViewport); return true; } } } } // Not handled here. return QTreeWidget::eventFilter(pObject, pEvent); } // Drag-n-drop stuff. QTreeWidgetItem *qjackctlSocketListView::dragDropItem ( const QPoint& pos ) { QTreeWidgetItem *pItem = QTreeWidget::itemAt(pos); if (pItem) { if (m_pDropItem != pItem) { QTreeWidget::setCurrentItem(pItem); m_pDropItem = pItem; if (m_pAutoOpenTimer) m_pAutoOpenTimer->start(m_iAutoOpenTimeout); qjackctlPatchbay *pPatchbay = m_pPatchbayView->binding(); if ((pItem->flags() & Qt::ItemIsDropEnabled) == 0 || pPatchbay == NULL || !pPatchbay->canConnectSelected()) pItem = NULL; } } else { m_pDropItem = NULL; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } return pItem; } void qjackctlSocketListView::dragEnterEvent ( QDragEnterEvent *pDragEnterEvent ) { if (pDragEnterEvent->source() != this && pDragEnterEvent->mimeData()->hasText() && dragDropItem(pDragEnterEvent->pos())) { pDragEnterEvent->accept(); } else { pDragEnterEvent->ignore(); } } void qjackctlSocketListView::dragMoveEvent ( QDragMoveEvent *pDragMoveEvent ) { if (pDragMoveEvent->source() != this && pDragMoveEvent->mimeData()->hasText() && dragDropItem(pDragMoveEvent->pos())) { pDragMoveEvent->accept(); } else { pDragMoveEvent->ignore(); } } void qjackctlSocketListView::dragLeaveEvent ( QDragLeaveEvent * ) { m_pDropItem = 0; if (m_pAutoOpenTimer) m_pAutoOpenTimer->stop(); } void qjackctlSocketListView::dropEvent ( QDropEvent *pDropEvent ) { if (pDropEvent->source() != this && pDropEvent->mimeData()->hasText() && dragDropItem(pDropEvent->pos())) { const QString sText = pDropEvent->mimeData()->text(); qjackctlPatchbay *pPatchbay = m_pPatchbayView->binding(); if (!sText.isEmpty() && pPatchbay) pPatchbay->connectSelected(); } dragLeaveEvent(NULL); } // Handle mouse events for drag-and-drop stuff. void qjackctlSocketListView::mousePressEvent ( QMouseEvent *pMouseEvent ) { QTreeWidget::mousePressEvent(pMouseEvent); if (pMouseEvent->button() == Qt::LeftButton) { m_posDrag = pMouseEvent->pos(); m_pDragItem = QTreeWidget::itemAt(m_posDrag); } } void qjackctlSocketListView::mouseMoveEvent ( QMouseEvent *pMouseEvent ) { QTreeWidget::mouseMoveEvent(pMouseEvent); if ((pMouseEvent->buttons() & Qt::LeftButton) && m_pDragItem && ((pMouseEvent->pos() - m_posDrag).manhattanLength() >= QApplication::startDragDistance())) { // We'll start dragging something alright... QMimeData *pMimeData = new QMimeData(); pMimeData->setText(m_pDragItem->text(0)); QDrag *pDrag = new QDrag(this); pDrag->setMimeData(pMimeData); pDrag->setPixmap(m_pDragItem->icon(0).pixmap(16)); pDrag->setHotSpot(QPoint(-4, -12)); pDrag->start(Qt::LinkAction); // We've dragged and maybe dropped it by now... m_pDragItem = NULL; } } // Context menu request event handler. void qjackctlSocketListView::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) { m_pPatchbayView->contextMenu( pContextMenuEvent->globalPos(), (m_bReadable ? m_pPatchbayView->OSocketList() : m_pPatchbayView->ISocketList()) ); } //---------------------------------------------------------------------- // qjackctlPatchworkView -- Socket connector widget. // // Constructor. qjackctlPatchworkView::qjackctlPatchworkView ( qjackctlPatchbayView *pPatchbayView ) : QWidget(pPatchbayView) { m_pPatchbayView = pPatchbayView; QWidget::setMinimumWidth(20); // QWidget::setMaximumWidth(120); QWidget::setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); } // Default destructor. qjackctlPatchworkView::~qjackctlPatchworkView (void) { } // Legal socket item position helper. int qjackctlPatchworkView::itemY ( QTreeWidgetItem *pItem ) const { QRect rect; QTreeWidget *pList = pItem->treeWidget(); QTreeWidgetItem *pParent = pItem->parent(); qjackctlSocketItem *pSocketItem = NULL; if (pParent && pParent->type() == QJACKCTL_SOCKETITEM) pSocketItem = static_cast (pParent); if (pSocketItem && !pSocketItem->isOpen()) { rect = pList->visualItemRect(pParent); } else { rect = pList->visualItemRect(pItem); } return rect.top() + rect.height() / 2; } // Draw visible socket connection relation lines void qjackctlPatchworkView::drawConnectionLine ( QPainter *pPainter, int x1, int y1, int x2, int y2, int h1, int h2 ) { // Account for list view headers. y1 += h1; y2 += h2; // Invisible output plugs don't get a connecting dot. 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); // Invisible input plugs don't get a connecting dot. if (y2 > h2) pPainter->drawLine(x2 - 4, y2, x2, y2); } // Draw socket forwrading line (for input sockets / right pane only) void qjackctlPatchworkView::drawForwardLine ( QPainter *pPainter, int x, int dx, int y1, int y2, int h ) { // Account for list view headers. y1 += h; y2 += h; dx += 4; // Draw it... if (y1 < y2) { pPainter->drawLine(x - dx, y1 + 4, x, y1); pPainter->drawLine(x - dx, y1 + 4, x - dx, y2 - 4); pPainter->drawLine(x - dx, y2 - 4, x, y2); // Down arrow... pPainter->drawLine(x - dx, y2 - 8, x - dx - 2, y2 - 12); pPainter->drawLine(x - dx, y2 - 8, x - dx + 2, y2 - 12); } else { pPainter->drawLine(x - dx, y1 - 4, x, y1); pPainter->drawLine(x - dx, y1 - 4, x - dx, y2 + 4); pPainter->drawLine(x - dx, y2 + 4, x, y2); // Up arrow... pPainter->drawLine(x - dx, y2 + 8, x - dx - 2, y2 + 12); pPainter->drawLine(x - dx, y2 + 8, x - dx + 2, y2 + 12); } } // Draw visible socket connection relation arrows. void qjackctlPatchworkView::paintEvent ( QPaintEvent * ) { if (m_pPatchbayView->OSocketList() == NULL || m_pPatchbayView->ISocketList() == NULL) return; QPainter painter(this); int x1, y1, h1; int x2, y2, h2; int i, rgb[3] = { 0x99, 0x66, 0x33 }; // Inline adaptive to darker background themes... if (QWidget::palette().window().color().value() < 0x7f) for (i = 0; i < 3; ++i) rgb[i] += 0x33; // Initialize color changer. i = 0; // Almost constants. x1 = 0; x2 = width(); h1 = ((m_pPatchbayView->OListView())->header())->sizeHint().height(); h2 = ((m_pPatchbayView->IListView())->header())->sizeHint().height(); // For each client item... qjackctlSocketItem *pOSocket, *pISocket; QListIterator osocket( (m_pPatchbayView->OSocketList())->sockets()); while (osocket.hasNext()) { pOSocket = osocket.next(); // Set new connector color. ++i; painter.setPen(QColor(rgb[i % 3], rgb[(i / 3) % 3], rgb[(i / 9) % 3])); // Get starting connector arrow coordinates. y1 = itemY(pOSocket); // Get input socket connections... QListIterator isocket(pOSocket->connects()); while (isocket.hasNext()) { pISocket = isocket.next(); // Obviously, there is a connection from pOPlug to pIPlug items: y2 = itemY(pISocket); drawConnectionLine(&painter, x1, y1, x2, y2, h1, h2); } } // Look for forwarded inputs... QList iforwards; // Make a local copy of just the forwarding socket list, if any... QListIterator isocket( (m_pPatchbayView->ISocketList())->sockets()); while (isocket.hasNext()) { pISocket = isocket.next(); // Check if its forwarded... if (pISocket->forward().isEmpty()) continue; iforwards.append(pISocket); } // (Re)initialize color changer. i = 0; // Now traverse those for proper connection drawing... int dx = 0; QListIterator iter(iforwards); while (iter.hasNext()) { pISocket = iter.next(); qjackctlSocketItem *pISocketForward = m_pPatchbayView->ISocketList()->findSocket( pISocket->forward(), pISocket->socketType()); if (pISocketForward == NULL) continue; // Set new connector color. ++i; painter.setPen(QColor(rgb[i % 3], rgb[(i / 3) % 3], rgb[(i / 9) % 3])); // Get starting connector arrow coordinates. y1 = itemY(pISocketForward); y2 = itemY(pISocket); drawForwardLine(&painter, x2, dx, y1, y2, h2); dx += 2; } } // Context menu request event handler. void qjackctlPatchworkView::contextMenuEvent ( QContextMenuEvent *pContextMenuEvent ) { m_pPatchbayView->contextMenu(pContextMenuEvent->globalPos(), NULL); } // Widget event slots... void qjackctlPatchworkView::contentsChanged (void) { QWidget::update(); } //---------------------------------------------------------------------------- // qjackctlPatchbayView -- Integrated patchbay widget. // Constructor. qjackctlPatchbayView::qjackctlPatchbayView ( QWidget *pParent ) : QSplitter(Qt::Horizontal, pParent) { m_pOListView = new qjackctlSocketListView(this, true); m_pPatchworkView = new qjackctlPatchworkView(this); m_pIListView = new qjackctlSocketListView(this, false); m_pPatchbay = NULL; m_bBezierLines = false; QObject::connect(m_pOListView, SIGNAL(itemExpanded(QTreeWidgetItem *)), m_pPatchworkView, SLOT(contentsChanged())); QObject::connect(m_pOListView, SIGNAL(itemCollapsed(QTreeWidgetItem *)), m_pPatchworkView, SLOT(contentsChanged())); QObject::connect(m_pOListView->verticalScrollBar(), SIGNAL(valueChanged(int)), m_pPatchworkView, SLOT(contentsChanged())); // QObject::connect(m_pOListView->header(), SIGNAL(sectionClicked(int)), // m_pPatchworkView, SLOT(contentsChanged())); QObject::connect(m_pIListView, SIGNAL(itemExpanded(QTreeWidgetItem *)), m_pPatchworkView, SLOT(contentsChanged())); QObject::connect(m_pIListView, SIGNAL(itemCollapsed(QTreeWidgetItem *)), m_pPatchworkView, SLOT(contentsChanged())); QObject::connect(m_pIListView->verticalScrollBar(), SIGNAL(valueChanged(int)), m_pPatchworkView, SLOT(contentsChanged())); // QObject::connect(m_pIListView->header(), SIGNAL(sectionClicked(int)), // m_pPatchworkView, SLOT(contentsChanged())); m_bDirty = false; } // Default destructor. qjackctlPatchbayView::~qjackctlPatchbayView (void) { } // Common context menu slot. void qjackctlPatchbayView::contextMenu ( const QPoint& pos, qjackctlSocketList *pSocketList ) { qjackctlPatchbay *pPatchbay = binding(); if (pPatchbay == NULL) return; QMenu menu(this); QAction *pAction; if (pSocketList) { qjackctlSocketItem *pSocketItem = pSocketList->selectedSocketItem(); bool bEnabled = (pSocketItem != NULL); pAction = menu.addAction(QIcon(":/images/add1.png"), tr("Add..."), pSocketList, SLOT(addSocketItem())); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("Edit..."), pSocketList, SLOT(editSocketItem())); pAction->setEnabled(bEnabled); pAction = menu.addAction(QIcon(":/images/copy1.png"), tr("Copy..."), pSocketList, SLOT(copySocketItem())); pAction->setEnabled(bEnabled); pAction = menu.addAction(QIcon(":/images/remove1.png"), tr("Remove"), pSocketList, SLOT(removeSocketItem())); pAction->setEnabled(bEnabled); menu.addSeparator(); pAction = menu.addAction( tr("Exclusive"), pSocketList, SLOT(exclusiveSocketItem())); pAction->setCheckable(true); pAction->setChecked(bEnabled && pSocketItem->isExclusive()); pAction->setEnabled(bEnabled && (pSocketItem->connects().count() < 2)); // Construct the forwarding menu, // overriding the last one, if any... QMenu *pForwardMenu = menu.addMenu(tr("Forward")); // Assume sockets iteration follows item index order (0,1,2...) // and remember that we only do this for input sockets... int iIndex = 0; if (pSocketItem && pSocketList == ISocketList()) { QListIterator isocket(ISocketList()->sockets()); while (isocket.hasNext()) { qjackctlSocketItem *pISocket = isocket.next(); // Must be of same type of target one... int iSocketType = pISocket->socketType(); if (iSocketType != pSocketItem->socketType()) continue; const QString& sSocketName = pISocket->socketName(); if (pSocketItem->socketName() == sSocketName) continue; int iPixmap = 0; switch (iSocketType) { case QJACKCTL_SOCKETTYPE_JACK_AUDIO: iPixmap = (pISocket->isExclusive() ? QJACKCTL_XPM_AUDIO_SOCKET_X : QJACKCTL_XPM_AUDIO_SOCKET); break; case QJACKCTL_SOCKETTYPE_JACK_MIDI: case QJACKCTL_SOCKETTYPE_ALSA_MIDI: iPixmap = (pISocket->isExclusive() ? QJACKCTL_XPM_MIDI_SOCKET_X : QJACKCTL_XPM_MIDI_SOCKET); break; } pAction = pForwardMenu->addAction( QIcon(ISocketList()->pixmap(iPixmap)), sSocketName); pAction->setChecked(pSocketItem->forward() == sSocketName); pAction->setData(iIndex); iIndex++; } // Null forward always present, // and has invalid index parameter (-1)... if (iIndex > 0) pForwardMenu->addSeparator(); pAction = pForwardMenu->addAction(tr("(None)")); pAction->setCheckable(true); pAction->setChecked(pSocketItem->forward().isEmpty()); pAction->setData(-1); // We have something here... QObject::connect(pForwardMenu, SIGNAL(triggered(QAction*)), SLOT(activateForwardMenu(QAction*))); } pForwardMenu->setEnabled(iIndex > 0); menu.addSeparator(); int iItem = (pSocketList->listView())->indexOfTopLevelItem(pSocketItem); int iItemCount = (pSocketList->listView())->topLevelItemCount(); pAction = menu.addAction(QIcon(":/images/up1.png"), tr("Move Up"), pSocketList, SLOT(moveUpSocketItem())); pAction->setEnabled(bEnabled && iItem > 0); pAction = menu.addAction(QIcon(":/images/down1.png"), tr("Move Down"), pSocketList, SLOT(moveDownSocketItem())); pAction->setEnabled(bEnabled && iItem < iItemCount - 1); menu.addSeparator(); } pAction = menu.addAction(QIcon(":/images/connect1.png"), tr("&Connect"), pPatchbay, SLOT(connectSelected()), tr("Alt+C", "Connect")); pAction->setEnabled(pPatchbay->canConnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnect1.png"), tr("&Disconnect"), pPatchbay, SLOT(disconnectSelected()), tr("Alt+D", "Disconnect")); pAction->setEnabled(pPatchbay->canDisconnectSelected()); pAction = menu.addAction(QIcon(":/images/disconnectall1.png"), tr("Disconnect &All"), pPatchbay, SLOT(disconnectAll()), tr("Alt+A", "Disconect All")); pAction->setEnabled(pPatchbay->canDisconnectAll()); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("&Refresh"), pPatchbay, SLOT(refresh()), tr("Alt+R", "Refresh")); menu.exec(pos); } // Select the forwarding socket name from context menu. void qjackctlPatchbayView::activateForwardMenu ( QAction *pAction ) { int iIndex = pAction->data().toInt(); // Get currently input socket (assume its nicely selected) qjackctlSocketItem *pSocketItem = ISocketList()->selectedSocketItem(); if (pSocketItem) { // Check first for forward from nil... if (iIndex < 0) { pSocketItem->setForward(QString::null); setDirty(true); return; } // Hopefully, its a real socket about to be forwraded... QListIterator isocket(ISocketList()->sockets()); while (isocket.hasNext()) { qjackctlSocketItem *pISocket = isocket.next(); // Must be of same type of target one... if (pISocket->socketType() != pSocketItem->socketType()) continue; const QString& sSocketName = pISocket->socketName(); if (pSocketItem->socketName() == sSocketName) continue; if (iIndex == 0) { pSocketItem->setForward(sSocketName); setDirty(true); break; } iIndex--; } } } // Patchbay binding methods. void qjackctlPatchbayView::setBinding ( qjackctlPatchbay *pPatchbay ) { m_pPatchbay = pPatchbay; } qjackctlPatchbay *qjackctlPatchbayView::binding (void) const { return m_pPatchbay; } // Patchbay client list accessors. qjackctlSocketList *qjackctlPatchbayView::OSocketList (void) const { if (m_pPatchbay) return m_pPatchbay->OSocketList(); else return NULL; } qjackctlSocketList *qjackctlPatchbayView::ISocketList (void) const { 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; } // Dirty flag methods. void qjackctlPatchbayView::setDirty ( bool bDirty ) { m_bDirty = bDirty; if (bDirty) emit contentsChanged(); } bool qjackctlPatchbayView::dirty (void) const { return m_bDirty; } //---------------------------------------------------------------------- // qjackctlPatchbay -- Output-to-Input client/plugs connection object. // // Constructor. qjackctlPatchbay::qjackctlPatchbay ( qjackctlPatchbayView *pPatchbayView ) { m_pPatchbayView = pPatchbayView; m_pOSocketList = new qjackctlSocketList(m_pPatchbayView->OListView(), true); m_pISocketList = new qjackctlSocketList(m_pPatchbayView->IListView(), false); m_pPatchbayView->setBinding(this); } // Default destructor. qjackctlPatchbay::~qjackctlPatchbay (void) { m_pPatchbayView->setBinding(NULL); delete m_pOSocketList; m_pOSocketList = NULL; delete m_pISocketList; m_pISocketList = NULL; (m_pPatchbayView->PatchworkView())->update(); } // Connection primitive. void qjackctlPatchbay::connectSockets ( qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket ) { if (pOSocket->findConnectPtr(pISocket) == NULL) { pOSocket->addConnect(pISocket); pISocket->addConnect(pOSocket); } } // Disconnection primitive. void qjackctlPatchbay::disconnectSockets ( qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket ) { if (pOSocket->findConnectPtr(pISocket) != NULL) { pOSocket->removeConnect(pISocket); pISocket->removeConnect(pOSocket); } } // Test if selected plugs are connectable. bool qjackctlPatchbay::canConnectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); if (pIItem == NULL) return false; qjackctlSocketItem *pOSocket = NULL; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); break; case QJACKCTL_PLUGITEM: pOSocket = (static_cast (pOItem))->socket(); break; default: return false; } qjackctlSocketItem *pISocket = NULL; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); break; case QJACKCTL_PLUGITEM: pISocket = (static_cast (pIItem))->socket(); break; default: return false; } // Sockets must be of the same type... if (pOSocket->socketType() != pISocket->socketType()) return false; // Exclusive sockets may not accept more than one cable. if (pOSocket->isExclusive() && pOSocket->connects().count() > 0) return false; if (pISocket->isExclusive() && pISocket->connects().count() > 0) return false; // One-to-one connection... return (pOSocket->findConnectPtr(pISocket) == NULL); } // Connect current selected plugs. bool qjackctlPatchbay::connectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); if (pIItem == NULL) return false; qjackctlSocketItem *pOSocket = NULL; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); break; case QJACKCTL_PLUGITEM: pOSocket = (static_cast (pOItem))->socket(); break; default: return false; } qjackctlSocketItem *pISocket = NULL; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); break; case QJACKCTL_PLUGITEM: pISocket = (static_cast (pIItem))->socket(); break; default: return false; } // Sockets must be of the same type... if (pOSocket->socketType() != pISocket->socketType()) return false; // Exclusive sockets may not accept more than one cable. if (pOSocket->isExclusive() && pOSocket->connects().count() > 0) return false; if (pISocket->isExclusive() && pISocket->connects().count() > 0) return false; // One-to-one connection... connectSockets(pOSocket, pISocket); // Making one list dirty will take care of the rest... m_pPatchbayView->setDirty(true); return true; } // Test if selected plugs are disconnectable. bool qjackctlPatchbay::canDisconnectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); if (pOItem == NULL) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); if (pIItem == NULL) return false; qjackctlSocketItem *pOSocket = NULL; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); break; case QJACKCTL_PLUGITEM: pOSocket = (static_cast (pOItem))->socket(); break; default: return false; } qjackctlSocketItem *pISocket = NULL; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); break; case QJACKCTL_PLUGITEM: pISocket = (static_cast (pIItem))->socket(); break; default: return false; } // Sockets must be of the same type... if (pOSocket->socketType() != pISocket->socketType()) return false; return (pOSocket->findConnectPtr(pISocket) != 0); } // Disconnect current selected plugs. bool qjackctlPatchbay::disconnectSelected (void) { QTreeWidgetItem *pOItem = (m_pOSocketList->listView())->currentItem(); if (!pOItem) return false; QTreeWidgetItem *pIItem = (m_pISocketList->listView())->currentItem(); if (!pIItem) return false; qjackctlSocketItem *pOSocket = NULL; switch (pOItem->type()) { case QJACKCTL_SOCKETITEM: pOSocket = static_cast (pOItem); break; case QJACKCTL_PLUGITEM: pOSocket = (static_cast (pOItem))->socket(); break; default: return false; } qjackctlSocketItem *pISocket = NULL; switch (pIItem->type()) { case QJACKCTL_SOCKETITEM: pISocket = static_cast (pIItem); break; case QJACKCTL_PLUGITEM: pISocket = (static_cast (pIItem))->socket(); break; default: return false; } // Sockets must be of the same type... if (pOSocket->socketType() != pISocket->socketType()) return false; // One-to-one disconnection... disconnectSockets(pOSocket, pISocket); // Making one list dirty will take care of the rest... m_pPatchbayView->setDirty(true); return true; } // Test if any plug is disconnectable. bool qjackctlPatchbay::canDisconnectAll (void) { QListIterator osocket(m_pOSocketList->sockets()); while (osocket.hasNext()) { qjackctlSocketItem *pOSocket = osocket.next(); if (pOSocket->connects().count() > 0) return true; } return false; } // Disconnect all plugs. bool qjackctlPatchbay::disconnectAll (void) { if (QMessageBox::warning(m_pPatchbayView, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("This will disconnect all sockets.\n\n" "Are you sure?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::No) { return false; } QListIterator osocket(m_pOSocketList->sockets()); while (osocket.hasNext()) { qjackctlSocketItem *pOSocket = osocket.next(); QListIterator isocket(pOSocket->connects()); while (isocket.hasNext()) disconnectSockets(pOSocket, isocket.next()); } // Making one list dirty will take care of the rest... m_pPatchbayView->setDirty(true); return true; } // Expand all socket items. void qjackctlPatchbay::expandAll (void) { (m_pOSocketList->listView())->expandAll(); (m_pISocketList->listView())->expandAll(); (m_pPatchbayView->PatchworkView())->update(); } // Complete contents rebuilder. void qjackctlPatchbay::refresh (void) { (m_pOSocketList->listView())->update(); (m_pISocketList->listView())->update(); (m_pPatchbayView->PatchworkView())->update(); } // Complete contents clearer. void qjackctlPatchbay::clear (void) { // Clear socket lists. m_pOSocketList->clear(); m_pISocketList->clear(); // Reset dirty flag. m_pPatchbayView->setDirty(false); // May refresh everything. refresh(); } // Patchbay client list accessors. qjackctlSocketList *qjackctlPatchbay::OSocketList (void) const { return m_pOSocketList; } qjackctlSocketList *qjackctlPatchbay::ISocketList (void) const { return m_pISocketList; } // External rack transfer method: copy patchbay structure from master rack model. void qjackctlPatchbay::loadRackSockets ( qjackctlSocketList *pSocketList, QList& socketlist ) { pSocketList->clear(); qjackctlSocketItem *pSocketItem = NULL; QListIterator sockit(socketlist); while (sockit.hasNext()) { qjackctlPatchbaySocket *pSocket = sockit.next(); pSocketItem = new qjackctlSocketItem(pSocketList, pSocket->name(), pSocket->clientName(), pSocket->type(), pSocketItem); if (pSocketItem) { pSocketItem->setExclusive(pSocket->isExclusive()); pSocketItem->setForward(pSocket->forward()); pSocketItem->updatePixmap(); qjackctlPlugItem *pPlugItem = NULL; QStringListIterator iter(pSocket->pluglist()); while (iter.hasNext()) { pPlugItem = new qjackctlPlugItem( pSocketItem, iter.next(), pPlugItem); } } } } void qjackctlPatchbay::loadRack ( qjackctlPatchbayRack *pPatchbayRack ) { (m_pOSocketList->listView())->setUpdatesEnabled(false); (m_pISocketList->listView())->setUpdatesEnabled(false); // Load ouput sockets. loadRackSockets(m_pOSocketList, pPatchbayRack->osocketlist()); // Load input sockets. loadRackSockets(m_pISocketList, pPatchbayRack->isocketlist()); // Now ready to load from cable model. QListIterator iter(pPatchbayRack->cablelist()); while (iter.hasNext()) { qjackctlPatchbayCable *pCable = iter.next(); // Get proper sockets... qjackctlPatchbaySocket *pOSocket = pCable->outputSocket(); qjackctlPatchbaySocket *pISocket = pCable->inputSocket(); if (pOSocket && pISocket) { qjackctlSocketItem *pOSocketItem = m_pOSocketList->findSocket(pOSocket->name(), pOSocket->type()); qjackctlSocketItem *pISocketItem = m_pISocketList->findSocket(pISocket->name(), pISocket->type()); if (pOSocketItem && pISocketItem) connectSockets(pOSocketItem, pISocketItem); } } (m_pOSocketList->listView())->setUpdatesEnabled(true); (m_pISocketList->listView())->setUpdatesEnabled(true); (m_pOSocketList->listView())->update(); (m_pISocketList->listView())->update(); (m_pPatchbayView->PatchworkView())->update(); // Reset dirty flag. m_pPatchbayView->setDirty(false); } // External rack transfer method: copy patchbay structure into master rack model. void qjackctlPatchbay::saveRackSockets ( qjackctlSocketList *pSocketList, QList& socketlist ) { // Have QTreeWidget item order into account: qjackctlSocketListView *pListView = pSocketList->listView(); if (pListView == NULL) return; socketlist.clear(); int iItemCount = pListView->topLevelItemCount(); for (int iItem = 0; iItem < iItemCount; ++iItem) { QTreeWidgetItem *pItem = pListView->topLevelItem(iItem); if (pItem->type() != QJACKCTL_SOCKETITEM) continue; qjackctlSocketItem *pSocketItem = static_cast (pItem); if (pSocketItem == NULL) continue; qjackctlPatchbaySocket *pSocket = new qjackctlPatchbaySocket(pSocketItem->socketName(), pSocketItem->clientName(), pSocketItem->socketType()); if (pSocket) { pSocket->setExclusive(pSocketItem->isExclusive()); pSocket->setForward(pSocketItem->forward()); QListIterator iter(pSocketItem->plugs()); while (iter.hasNext()) pSocket->pluglist().append((iter.next())->plugName()); socketlist.append(pSocket); } } } void qjackctlPatchbay::saveRack ( qjackctlPatchbayRack *pPatchbayRack ) { // Save ouput sockets. saveRackSockets(m_pOSocketList, pPatchbayRack->osocketlist()); // Save input sockets. saveRackSockets(m_pISocketList, pPatchbayRack->isocketlist()); // Now ready to save into cable model. pPatchbayRack->cablelist().clear(); // Start from output sockets... QListIterator osocket(m_pOSocketList->sockets()); while (osocket.hasNext()) { qjackctlSocketItem *pOSocketItem = osocket.next(); // Then to input sockets... QListIterator isocket(pOSocketItem->connects()); while (isocket.hasNext()) { qjackctlSocketItem *pISocketItem = isocket.next(); // Now find proper racked sockets... qjackctlPatchbaySocket *pOSocket = pPatchbayRack->findSocket( pPatchbayRack->osocketlist(), pOSocketItem->socketName()); qjackctlPatchbaySocket *pISocket = pPatchbayRack->findSocket( pPatchbayRack->isocketlist(), pISocketItem->socketName()); if (pOSocket && pISocket) { pPatchbayRack->addCable( new qjackctlPatchbayCable(pOSocket, pISocket)); } } } // Reset dirty flag. m_pPatchbayView->setDirty(false); } // Connections snapshot. void qjackctlPatchbay::connectionsSnapshot (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; qjackctlPatchbayRack rack; rack.connectJackSnapshot(pMainForm->jackClient()); rack.connectAlsaSnapshot(pMainForm->alsaSeq()); loadRack(&rack); // Set dirty flag. m_pPatchbayView->setDirty(true); } // end of qjackctlPatchbay.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAbout.h0000644000175000001440000000012412113152421020125 xustar000000000000000027 mtime=1361892625.815912 27 atime=1364826685.330395 30 ctime=1364826685.330395508 qjackctl-0.3.10/src/qjackctlAbout.h0000644000175000001440000000312412113152421017414 0ustar00rncbcusers00000000000000// qjackctlAbout.h // /**************************************************************************** Copyright (C) 2003-2013, 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 __qjackctlAbout_h #define __qjackctlAbout_h #include "config.h" #define QJACKCTL_TITLE PACKAGE_NAME #define QJACKCTL_VERSION PACKAGE_VERSION #define QJACKCTL_SUBTITLE0 "JACK" #define QJACKCTL_SUBTITLE1 QJACKCTL_SUBTITLE0 " Audio Connection Kit" #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-2013, rncbc aka Rui Nuno Capela. All rights reserved." #define QJACKCTL_DOMAIN "rncbc.org" #endif // __qjackctlAbout_h // end of qjackctlAbout.h qjackctl-0.3.10/src/PaxHeaders.16050/src.pri.in0000644000175000001440000000012411447467550017122 xustar000000000000000027 mtime=1285451624.186825 27 atime=1364826684.456395 30 ctime=1364826684.456395494 qjackctl-0.3.10/src/src.pri.in0000644000175000001440000000016511447467550016413 0ustar00rncbcusers00000000000000# qjackctl.pri # PREFIX = @ac_prefix@ CONFIG += @ac_debug@ @ac_qdbus@ INCLUDEPATH += @ac_incpath@ LIBS += @ac_libs@ qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayRack.h0000644000175000001440000000012411526763337021434 xustar000000000000000027 mtime=1297868511.144179 27 atime=1364826685.231395 30 ctime=1364826685.231395507 qjackctl-0.3.10/src/qjackctlPatchbayRack.h0000644000175000001440000002326411526763337020732 0ustar00rncbcusers00000000000000// qjackctlPatchbayRack.h // /**************************************************************************** Copyright (C) 2003-2011, 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 __qjackctlPatchbayRack_h #define __qjackctlPatchbayRack_h #include "qjackctlAbout.h" #include #include #ifdef CONFIG_ALSA_SEQ #include #else typedef void snd_seq_t; #endif // Patchbay socket types. #define QJACKCTL_SOCKETTYPE_DEFAULT -1 #define QJACKCTL_SOCKETTYPE_JACK_AUDIO 0 #define QJACKCTL_SOCKETTYPE_JACK_MIDI 1 #define QJACKCTL_SOCKETTYPE_ALSA_MIDI 2 // Patchbay slot normalization modes. #define QJACKCTL_SLOTMODE_OPEN 0 #define QJACKCTL_SLOTMODE_HALF 1 #define QJACKCTL_SLOTMODE_FULL 2 // Patchbay change signal flags. #define QJACKCTL_CABLE_FAILED 0 #define QJACKCTL_CABLE_CHECKED 1 #define QJACKCTL_CABLE_CONNECTED 2 #define QJACKCTL_CABLE_DISCONNECTED 3 // Struct name says it all. struct qjackctlAlsaMidiPort { QString sClientName; QString sPortName; int iAlsaClient; int iAlsaPort; }; // Patchbay socket definition. class qjackctlPatchbaySocket { public: // Constructor. qjackctlPatchbaySocket(const QString& sSocketName, const QString& sClientName, int iSocketType); // Default destructor. ~qjackctlPatchbaySocket(); // Socket property accessors. const QString& name() const; const QString& clientName() const; int type() const; bool isExclusive() const; const QString& forward() const; // Socket property methods. void setName(const QString& sSocketName); void setClientName(const QString& sClientName); void setType(int iSocketType); void setExclusive(bool bExclusive); void setForward(const QString& sSocketForward); // Plug list primitive methods. void addPlug(const QString& sPlugName); void removePlug(const QString& sPlugName); // Plug list accessor. QStringList& pluglist(); // Simple socket type methods. static int typeFromText(const QString& sSocketType); static QString textFromType(int iSocketType); private: // Properties. QString m_sSocketName; QString m_sClientName; int m_iSocketType; bool m_bExclusive; QString m_sSocketForward; // Patchbay socket plug list. QStringList m_pluglist; }; // Patchbay socket slot definition. class qjackctlPatchbaySlot { public: // Constructor. qjackctlPatchbaySlot(const QString& sSlotName, int iSlotMode = QJACKCTL_SLOTMODE_OPEN); // Default destructor. ~qjackctlPatchbaySlot(); // Slot property accessors. const QString& name() const; int mode() const; // Slot property methods. void setName(const QString& sSlotName); void setMode(int iSlotMode); // Socket methods. void setOutputSocket(qjackctlPatchbaySocket *pSocket); void setInputSocket(qjackctlPatchbaySocket *pSocket); // Socket accessors. qjackctlPatchbaySocket *outputSocket() const; qjackctlPatchbaySocket *inputSocket() const; private: // Slot properties. QString m_sSlotName; int m_iSlotMode; // Socket references. qjackctlPatchbaySocket *m_pOutputSocket; qjackctlPatchbaySocket *m_pInputSocket; }; // Patchbay cable connection definition. class qjackctlPatchbayCable { public: // Constructor. qjackctlPatchbayCable(qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket); // Default destructor. ~qjackctlPatchbayCable(); // Socket methods. void setOutputSocket(qjackctlPatchbaySocket *pSocket); void setInputSocket(qjackctlPatchbaySocket *pSocket); // Socket accessors. qjackctlPatchbaySocket *outputSocket() const; qjackctlPatchbaySocket *inputSocket() const; private: // Socket references. qjackctlPatchbaySocket *m_pOutputSocket; qjackctlPatchbaySocket *m_pInputSocket; }; // Patchbay rack profile definition. class qjackctlPatchbayRack : public QObject { Q_OBJECT public: // Constructor. qjackctlPatchbayRack(); // Default destructor. ~qjackctlPatchbayRack(); // Common socket list primitive methods. void addSocket(QList& socketlist, qjackctlPatchbaySocket *pSocket); void removeSocket(QList& socketlist, qjackctlPatchbaySocket *pSocket); // Slot list primitive methods. void addSlot(qjackctlPatchbaySlot *pSlot); void removeSlot(qjackctlPatchbaySlot *pSlot); // Cable list primitive methods. void addCable(qjackctlPatchbayCable *pCable); void removeCable(qjackctlPatchbayCable *pCable); // Common socket finder. qjackctlPatchbaySocket *findSocket( QList& socketlist, const QString& sSocketName, int iSocketType = QJACKCTL_SOCKETTYPE_DEFAULT); // Slot finders. qjackctlPatchbaySlot *findSlot(const QString& sSlotName); // Cable finder. qjackctlPatchbayCable *findCable( const QString& sOutputSocket, const QString& sInputSocket); qjackctlPatchbayCable *findCable(qjackctlPatchbayCable *pCablePtr); // Cable finder (logical matching by client/port names). qjackctlPatchbayCable *findCable ( const QString& sOClientName, const QString& sOPortName, const QString& sIClientName, const QString& sIPortName, int iSocketType); // Patchbay cleaner. void clear(); // Patchbay rack socket list accessors. QList& osocketlist(); QList& isocketlist(); // Patchbay rack slots list accessor. QList& slotlist(); // Patchbay cable connections list accessor. QList& cablelist(); // Overloaded cable connection persistence scan cycle methods. void connectJackScan(jack_client_t *pJackClient); void connectAlsaScan(snd_seq_t *pAlsaSeq); // Patchbay snapshot methods. void connectJackSnapshot(jack_client_t *pJackClient); void connectAlsaSnapshot(snd_seq_t *pAlsaSeq); signals: // Cable connection change signal. void cableConnected(const QString& sOutputPort, const QString& sInputPort, unsigned int uiCableFlags); private: // Audio connection scan related private methods. const char *findJackPort(const char **ppszJackPorts, const QString& sClientName, const QString& sPortName, int n = 0); void connectJackPorts( const char *pszOutputPort, const char *pszInputPort); void disconnectJackPorts( const char *pszOutputPort, const char *pszInputPort); void checkJackPorts( const char *pszOutputPort, const char *pszInputPort); void connectJackSocketPorts( qjackctlPatchbaySocket *pOutputSocket, const char *pszOutputPort, qjackctlPatchbaySocket *pInputSocket, const char *pszInputPort); void connectJackCable( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket); // MIDI connection scan related private methods. void loadAlsaPorts(QList& midiports, bool bReadable); qjackctlAlsaMidiPort *findAlsaPort(QList& midiports, const QString& sClientName, const QString& sPortName, int n); QString getAlsaPortName(qjackctlAlsaMidiPort *pAlsaPort); void setAlsaPort(qjackctlAlsaMidiPort *pAlsaPort, int iAlsaClient, int iAlsaPort); void connectAlsaPorts( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort); void disconnectAlsaPorts( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort); void checkAlsaPorts( qjackctlAlsaMidiPort *pOutputPort, qjackctlAlsaMidiPort *pInputPort); void connectAlsaSocketPorts( qjackctlPatchbaySocket *pOutputSocket, qjackctlAlsaMidiPort *pOutputPort, qjackctlPatchbaySocket *pInputSocket, qjackctlAlsaMidiPort *pInputPort); void connectAlsaCable( qjackctlPatchbaySocket *pOutputSocket, qjackctlPatchbaySocket *pInputSocket); void loadAlsaConnections(QList& midiports, qjackctlAlsaMidiPort *pAlsaPort, bool bReadable); // Audio socket/ports forwarding executive methods. void connectJackForwardPorts( const char *pszPort, const char *pszPortForward); void connectJackForward( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward); // MIDI socket/ports forwarding executive methods. void connectAlsaForwardPorts( qjackctlAlsaMidiPort *pPort, qjackctlAlsaMidiPort *pPortForward); void connectAlsaForward( qjackctlPatchbaySocket *pSocket, qjackctlPatchbaySocket *pSocketForward); // Common socket forwarding scan method. void connectForwardScan(int iSocketType); // JACK snapshot executive. void connectJackSnapshotEx(int iSocketType); // Patchbay sockets lists. QList m_osocketlist; QList m_isocketlist; // Patchbay rack slots list. QList m_slotlist; // Patchbay cable connections list. QList m_cablelist; // Audio connection persistence cache variables. jack_client_t *m_pJackClient; const char **m_ppszOAudioPorts; const char **m_ppszIAudioPorts; const char **m_ppszOMidiPorts; const char **m_ppszIMidiPorts; // MIDI connection persistence cache variables. snd_seq_t *m_pAlsaSeq; QList m_omidiports; QList m_imidiports; }; #endif // __qjackctlPatchbayRack_h // qjackctlPatchbayRack.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAlsaConnect.cpp0000644000175000001440000000012411362126205021606 xustar000000000000000027 mtime=1271442565.722598 27 atime=1364826685.219395 30 ctime=1364826685.219395507 qjackctl-0.3.10/src/qjackctlAlsaConnect.cpp0000644000175000001440000002754611362126205021113 0ustar00rncbcusers00000000000000// qjackctlAlsaConnect.cpp // /**************************************************************************** Copyright (C) 2003-2010, 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 "qjackctlAlsaConnect.h" #include "qjackctlMainForm.h" #include //---------------------------------------------------------------------- // class qjackctlAlsaPort -- Alsa port list item. // // Constructor. qjackctlAlsaPort::qjackctlAlsaPort ( qjackctlAlsaClient *pClient, const QString& sPortName, int iAlsaPort ) : qjackctlPortItem(pClient, /* QString::number(iAlsaPort) + ":" + */ sPortName) { m_iAlsaPort = iAlsaPort; qjackctlAlsaConnect *pAlsaConnect = static_cast ( ((pClient->clientList())->listView())->binding()); if (pAlsaConnect) { if (pClient->isReadable()) { QTreeWidgetItem::setIcon(0, QIcon(pAlsaConnect->pixmap(QJACKCTL_ALSA_PORTO))); } else { QTreeWidgetItem::setIcon(0, QIcon(pAlsaConnect->pixmap(QJACKCTL_ALSA_PORTI))); } } } // Default destructor. qjackctlAlsaPort::~qjackctlAlsaPort (void) { } // Alsa handles accessors. int qjackctlAlsaPort::alsaClient (void) const { return (static_cast (client()))->alsaClient(); } int qjackctlAlsaPort::alsaPort (void) const { return m_iAlsaPort; } //---------------------------------------------------------------------- // class qjackctlAlsaClient -- Alsa client list item. // // Constructor. qjackctlAlsaClient::qjackctlAlsaClient ( qjackctlAlsaClientList *pClientList, const QString& sClientName, int iAlsaClient ) : qjackctlClientItem(pClientList, /* QString::number(iAlsaClient) + ":" + */ sClientName) { m_iAlsaClient = iAlsaClient; qjackctlAlsaConnect *pAlsaConnect = static_cast ( (pClientList->listView())->binding()); if (pAlsaConnect) { if (pClientList->isReadable()) { QTreeWidgetItem::setIcon(0, QIcon(pAlsaConnect->pixmap(QJACKCTL_ALSA_CLIENTO))); } else { QTreeWidgetItem::setIcon(0, QIcon(pAlsaConnect->pixmap(QJACKCTL_ALSA_CLIENTI))); } } } // Default destructor. qjackctlAlsaClient::~qjackctlAlsaClient (void) { } // Jack client accessor. int qjackctlAlsaClient::alsaClient (void) const { return m_iAlsaClient; } // Derived port finder. qjackctlAlsaPort *qjackctlAlsaClient::findPort ( int iAlsaPort ) { QListIterator iter(ports()); while (iter.hasNext()) { qjackctlAlsaPort *pPort = static_cast (iter.next()); if (iAlsaPort == pPort->alsaPort()) return pPort; } return NULL; } //---------------------------------------------------------------------- // qjackctlAlsaClientList -- Jack client list. // // Constructor. qjackctlAlsaClientList::qjackctlAlsaClientList ( qjackctlClientListView *pListView, bool bReadable ) : qjackctlClientList(pListView, bReadable) { } // Default destructor. qjackctlAlsaClientList::~qjackctlAlsaClientList (void) { } // Client finder by id. qjackctlAlsaClient *qjackctlAlsaClientList::findClient ( int iAlsaClient ) { QListIterator iter(clients()); while (iter.hasNext()) { qjackctlAlsaClient *pClient = static_cast (iter.next()); if (iAlsaClient == pClient->alsaClient()) return pClient; } return NULL; } // Client port finder by id. qjackctlAlsaPort *qjackctlAlsaClientList::findClientPort ( int iAlsaClient, int iAlsaPort ) { qjackctlAlsaClient *pClient = findClient(iAlsaClient); if (pClient == NULL) return NULL; return pClient->findPort(iAlsaPort); } // Client:port refreshner. int qjackctlAlsaClientList::updateClientPorts (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return 0; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return 0; int iDirtyCount = 0; markClientPorts(0); #ifdef CONFIG_ALSA_SEQ unsigned int uiAlsaFlags; if (isReadable()) uiAlsaFlags = SND_SEQ_PORT_CAP_READ | SND_SEQ_PORT_CAP_SUBS_READ; else uiAlsaFlags = SND_SEQ_PORT_CAP_WRITE | SND_SEQ_PORT_CAP_SUBS_WRITE; snd_seq_client_info_t *pClientInfo; snd_seq_port_info_t *pPortInfo; snd_seq_client_info_alloca(&pClientInfo); snd_seq_port_info_alloca(&pPortInfo); snd_seq_client_info_set_client(pClientInfo, -1); while (snd_seq_query_next_client(pAlsaSeq, pClientInfo) >= 0) { int iAlsaClient = snd_seq_client_info_get_client(pClientInfo); if (iAlsaClient > 0) { qjackctlAlsaClient *pClient = findClient(iAlsaClient); snd_seq_port_info_set_client(pPortInfo, iAlsaClient); snd_seq_port_info_set_port(pPortInfo, -1); while (snd_seq_query_next_port(pAlsaSeq, pPortInfo) >= 0) { unsigned int uiPortCapability = snd_seq_port_info_get_capability(pPortInfo); if (((uiPortCapability & uiAlsaFlags) == uiAlsaFlags) && ((uiPortCapability & SND_SEQ_PORT_CAP_NO_EXPORT) == 0)) { QString sClientName = QString::number(iAlsaClient) + ':'; sClientName += QString::fromUtf8( snd_seq_client_info_get_name(pClientInfo)); qjackctlAlsaPort *pPort = 0; int iAlsaPort = snd_seq_port_info_get_port(pPortInfo); if (pClient == 0) { pClient = new qjackctlAlsaClient(this, sClientName, iAlsaClient); iDirtyCount++; } else { pPort = pClient->findPort(iAlsaPort); if (sClientName != pClient->clientName()) { pClient->setClientName(sClientName); iDirtyCount++; } } if (pClient) { QString sPortName = QString::number(iAlsaPort) + ':'; sPortName += QString::fromUtf8( snd_seq_port_info_get_name(pPortInfo)); if (pPort == 0) { pPort = new qjackctlAlsaPort(pClient, sPortName, iAlsaPort); iDirtyCount++; } else if (sPortName != pPort->portName()) { pPort->setPortName(sPortName); iDirtyCount++; } } if (pPort) pPort->markClientPort(1); } } } } #endif // CONFIG_ALSA_SEQ iDirtyCount += cleanClientPorts(0); return iDirtyCount; } //---------------------------------------------------------------------- // qjackctlAlsaConnect -- Output-to-Input client/ports connection object. // // Constructor. qjackctlAlsaConnect::qjackctlAlsaConnect ( qjackctlConnectView *pConnectView ) : qjackctlConnect(pConnectView) { createIconPixmaps(); setOClientList(new qjackctlAlsaClientList( connectView()->OListView(), true)); setIClientList(new qjackctlAlsaClientList( connectView()->IListView(), false)); } // Default destructor. qjackctlAlsaConnect::~qjackctlAlsaConnect (void) { deleteIconPixmaps(); } // Common pixmap accessor (static). const QPixmap& qjackctlAlsaConnect::pixmap ( int iPixmap ) const { return *m_apPixmaps[iPixmap]; } // Local pixmap-set janitor methods. void qjackctlAlsaConnect::createIconPixmaps (void) { m_apPixmaps[QJACKCTL_ALSA_CLIENTI] = createIconPixmap("mclienti"); m_apPixmaps[QJACKCTL_ALSA_CLIENTO] = createIconPixmap("mcliento"); m_apPixmaps[QJACKCTL_ALSA_PORTI] = createIconPixmap("mporti"); m_apPixmaps[QJACKCTL_ALSA_PORTO] = createIconPixmap("mporto"); } void qjackctlAlsaConnect::deleteIconPixmaps (void) { for (int i = 0; i < QJACKCTL_ALSA_PIXMAPS; i++) { if (m_apPixmaps[i]) delete m_apPixmaps[i]; m_apPixmaps[i] = NULL; } } // Connection primitive. bool qjackctlAlsaConnect::connectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return false; qjackctlAlsaPort *pOAlsa = static_cast (pOPort); qjackctlAlsaPort *pIAlsa = static_cast (pIPort); snd_seq_port_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_port_subscribe_alloca(&pAlsaSubs); seq_addr.client = pOAlsa->alsaClient(); seq_addr.port = pOAlsa->alsaPort(); snd_seq_port_subscribe_set_sender(pAlsaSubs, &seq_addr); seq_addr.client = pIAlsa->alsaClient(); seq_addr.port = pIAlsa->alsaPort(); snd_seq_port_subscribe_set_dest(pAlsaSubs, &seq_addr); return (snd_seq_subscribe_port(pAlsaSeq, pAlsaSubs) >= 0); #else return false; #endif // CONFIG_ALSA_SEQ } // Disconnection primitive. bool qjackctlAlsaConnect::disconnectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return false; qjackctlAlsaPort *pOAlsa = static_cast (pOPort); qjackctlAlsaPort *pIAlsa = static_cast (pIPort); snd_seq_port_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_port_subscribe_alloca(&pAlsaSubs); seq_addr.client = pOAlsa->alsaClient(); seq_addr.port = pOAlsa->alsaPort(); snd_seq_port_subscribe_set_sender(pAlsaSubs, &seq_addr); seq_addr.client = pIAlsa->alsaClient(); seq_addr.port = pIAlsa->alsaPort(); snd_seq_port_subscribe_set_dest(pAlsaSubs, &seq_addr); return (snd_seq_unsubscribe_port(pAlsaSeq, pAlsaSubs) >= 0); #else return false; #endif // CONFIG_ALSA_SEQ } // Update port connection references. void qjackctlAlsaConnect::updateConnections (void) { #ifdef CONFIG_ALSA_SEQ qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; snd_seq_t *pAlsaSeq = pMainForm->alsaSeq(); if (pAlsaSeq == NULL) return; snd_seq_query_subscribe_t *pAlsaSubs; snd_seq_addr_t seq_addr; snd_seq_query_subscribe_alloca(&pAlsaSubs); // Proper type casts. qjackctlAlsaClientList *pOClientList = static_cast (OClientList()); qjackctlAlsaClientList *pIClientList = static_cast (IClientList()); // For each output client item... QListIterator oclient(pOClientList->clients()); while (oclient.hasNext()) { qjackctlClientItem *pOClient = oclient.next(); // For each output port item... QListIterator oport(pOClient->ports()); while (oport.hasNext()) { qjackctlPortItem *pOPort = oport.next(); // Are there already any connections? if (pOPort->connects().count() > 0) continue; // Hava a proper type cast. qjackctlAlsaPort *pOAlsa = static_cast (pOPort); // Get port connections... snd_seq_query_subscribe_set_type(pAlsaSubs, SND_SEQ_QUERY_SUBS_READ); snd_seq_query_subscribe_set_index(pAlsaSubs, 0); seq_addr.client = pOAlsa->alsaClient(); seq_addr.port = pOAlsa->alsaPort(); snd_seq_query_subscribe_set_root(pAlsaSubs, &seq_addr); while (snd_seq_query_port_subscribers(pAlsaSeq, pAlsaSubs) >= 0) { seq_addr = *snd_seq_query_subscribe_get_addr(pAlsaSubs); qjackctlPortItem *pIPort = pIClientList->findClientPort( seq_addr.client, seq_addr.port); if (pIPort) { pOPort->addConnect(pIPort); pIPort->addConnect(pOPort); } snd_seq_query_subscribe_set_index(pAlsaSubs, snd_seq_query_subscribe_get_index(pAlsaSubs) + 1); } } } #endif // CONFIG_ALSA_SEQ } // Update icon size implementation. void qjackctlAlsaConnect::updateIconPixmaps (void) { deleteIconPixmaps(); createIconPixmaps(); } // end of qjackctlAlsaConnect.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlAboutForm.ui0000644000175000001440000000012311353112764021151 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826685.186395 30 ctime=1364826685.186395506 qjackctl-0.3.10/src/qjackctlAboutForm.ui0000644000175000001440000001002011353112764020432 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2010, 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. qjackctlAboutForm 0 0 520 280 About QjackCtl :/images/about1.png true 4 4 Qt::Horizontal 8 8 &Close Alt+C Qt::TabFocus About Qt :/images/qtlogo.png Qt::Vertical 8 8 1 false true true :/images/qjackctl.png Qt::AlignCenter false 2 AboutTextView AboutQtButton ClosePushButton qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayFile.txt0000644000175000001440000000012411530041730022000 xustar000000000000000027 mtime=1298154456.729087 27 atime=1364826684.456395 30 ctime=1364826684.456395494 qjackctl-0.3.10/src/qjackctlPatchbayFile.txt0000644000175000001440000000263411530041730021274 0ustar00rncbcusers00000000000000qjackctlPatchbayFile format specification ----------------------------------------- plug-name . . . . . . plug-name . . . . . . # # # . # . # . # . . . patchbay-name := string-literal patchbay-version := string-literal socket-name := string-literal socket-type := "audio" | "midi" | "jack-audio" | "jack-midi" | "alsa-midi" # slot-name := string-literal # slot-mode := "open" | "half" | "full" client-name := string-regexp (JACK/ALSA client name) plug-name := string-regexp (JACK/ALSA port name) exclusive-flag := "on" | "off" | "yes" | "no" | "1" | "0" qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayFile.h0000644000175000001440000000012411526763337021433 xustar000000000000000027 mtime=1297868511.144179 27 atime=1364826684.548395 30 ctime=1364826684.548395496 qjackctl-0.3.10/src/qjackctlPatchbayFile.h0000644000175000001440000000260211526763337020722 0ustar00rncbcusers00000000000000// qjackctlPatchbayFile.h // /**************************************************************************** Copyright (C) 2003-2011, 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 __qjackctlPatchbayFile_h #define __qjackctlPatchbayFile_h #include "qjackctlPatchbayRack.h" // Patchbay XML definition. class qjackctlPatchbayFile { public: // Simple patchbay I/O methods. static bool load (qjackctlPatchbayRack *pPatchbay, const QString& sFilename); static bool save (qjackctlPatchbayRack *pPatchbay, const QString& sFilename); }; #endif // __qjackctlPatchbayFile_h // qjackctlPatchbayFile.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSocketForm.h0000644000175000001440000000012412067410555021144 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826684.942395 30 ctime=1364826684.942395502 qjackctl-0.3.10/src/qjackctlSocketForm.h0000644000175000001440000000557512067410555020447 0ustar00rncbcusers00000000000000// qjackctlSocketForm.h // /**************************************************************************** Copyright (C) 2003-2012, 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 __qjackctlSocketForm_h #define __qjackctlSocketForm_h #include #if QT_VERSION < 0x040200 #define setAllColumnsShowFocus(x) parent() #endif #include "ui_qjackctlSocketForm.h" #include "qjackctlJackConnect.h" #include "qjackctlAlsaConnect.h" // Forward declarations. class qjackctlPatchbay; class qjackctlPatchbaySocket; class qjackctlSocketList; class QButtonGroup; class QPixmap; //---------------------------------------------------------------------------- // qjackctlSocketForm -- UI wrapper form. class qjackctlSocketForm : public QDialog { Q_OBJECT public: // Constructor. qjackctlSocketForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlSocketForm(); void setSocketCaption(const QString& sSocketCaption); void setSocketList(qjackctlSocketList *pSocketList); void setSocketNew(bool bSocketNew); void setPixmaps(QPixmap **ppPixmaps); void setConnectCount(int iConnectCount); void load(qjackctlPatchbaySocket *pSocket); void save(qjackctlPatchbaySocket *pSocket); public slots: void changed(); void addPlug(); void editPlug(); void removePlug(); void moveUpPlug(); void moveDownPlug(); void selectedPlug(); void activateAddPlugMenu(QAction *); void customContextMenu(const QPoint&); void socketTypeChanged(); void clientNameChanged(); void stabilizeForm(); protected slots: void accept(); void reject(); protected: void updateJackClients(int iSocketType); void updateAlsaClients(int iSocketType); void updateJackPlugs(int iSocketType); void updateAlsaPlugs(int iSocketType); bool validateForm(); private: // The Qt-designer UI struct... Ui::qjackctlSocketForm m_ui; // Instance variables. qjackctlSocketList *m_pSocketList; bool m_bSocketNew; QPixmap **m_ppPixmaps; int m_iDirtyCount; QButtonGroup *m_pSocketTypeButtonGroup; }; #endif // __qjackctlSocketForm_h // end of qjackctlSocketForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctl.cpp0000644000175000001440000000012412107175033017474 xustar000000000000000027 mtime=1360853531.825601 27 atime=1364826684.911395 30 ctime=1364826684.942395502 qjackctl-0.3.10/src/qjackctl.cpp0000644000175000001440000002774212107175033016777 0ustar00rncbcusers00000000000000// qjackctl.cpp // /**************************************************************************** Copyright (C) 2003-2013, 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 "qjackctlSetup.h" #include "qjackctlMainForm.h" #include #include #include #include #if QT_VERSION < 0x040300 #define lighter(x) light(x) #define darker(x) dark(x) #endif #if QT_VERSION < 0x040500 namespace Qt { const WindowFlags WindowCloseButtonHint = WindowFlags(0x08000000); #if QT_VERSION < 0x040200 const WindowFlags CustomizeWindowHint = WindowFlags(0x02000000); #endif } #endif #define CONFIG_QUOTE1(x) #x #define CONFIG_QUOTED(x) CONFIG_QUOTE1(x) #if defined(DATADIR) #define CONFIG_DATADIR CONFIG_QUOTED(DATADIR) #else #define CONFIG_DATADIR CONFIG_PREFIX "/share" #endif #if defined(LOCALEDIR) #define CONFIG_LOCALEDIR CONFIG_QUOTED(LOCALEDIR) #else #define CONFIG_LOCALEDIR CONFIG_DATADIR "/locale" #endif //------------------------------------------------------------------------- // Singleton application instance stuff (Qt/X11 only atm.) // #if defined(Q_WS_X11) #include #include #include #define QJACKCTL_XUNIQUE "qjackctlApplication" #endif class qjackctlApplication : public QApplication { 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); } 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_LOCALEDIR; 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 } } } #if defined(Q_WS_X11) m_pDisplay = NULL; m_wOwner = None; #endif } // Destructor. ~qjackctlApplication() { if (m_pMyTranslator) delete m_pMyTranslator; if (m_pQtTranslator) delete m_pQtTranslator; } // Main application widget accessors. void setMainWidget(QWidget *pWidget) { m_pWidget = pWidget; #if defined(Q_WS_X11) if (m_pDisplay) { XGrabServer(m_pDisplay); m_wOwner = m_pWidget->winId(); XSetSelectionOwner(m_pDisplay, m_aUnique, m_wOwner, CurrentTime); XUngrabServer(m_pDisplay); } #endif } QWidget *mainWidget() const { return m_pWidget; } // Check if another instance is running, // and raise its proper main widget... bool setup(const QString& sServerName) { #if defined(Q_WS_X11) m_pDisplay = QX11Info::display(); QString sUnique = QJACKCTL_XUNIQUE; if (sServerName.isEmpty()) { const char *pszServerName = ::getenv("JACK_DEFAULT_SERVER"); if (pszServerName) { sUnique += '_'; sUnique += pszServerName; } } else { sUnique += '_'; sUnique += sServerName; } char szHostName[255]; if (::gethostname(szHostName, sizeof(szHostName)) == 0) { sUnique += '@'; sUnique += szHostName; } m_aUnique = XInternAtom(m_pDisplay, sUnique.toUtf8().constData(), false); XGrabServer(m_pDisplay); m_wOwner = XGetSelectionOwner(m_pDisplay, m_aUnique); XUngrabServer(m_pDisplay); if (m_wOwner != None) { // First, notify any freedesktop.org WM // that we're about to show the main widget... Screen *pScreen = XDefaultScreenOfDisplay(m_pDisplay); int iScreen = XScreenNumberOfScreen(pScreen); XEvent ev; memset(&ev, 0, sizeof(ev)); ev.xclient.type = ClientMessage; ev.xclient.display = m_pDisplay; ev.xclient.window = m_wOwner; ev.xclient.message_type = XInternAtom(m_pDisplay, "_NET_ACTIVE_WINDOW", false); ev.xclient.format = 32; ev.xclient.data.l[0] = 0; // Source indication. ev.xclient.data.l[1] = 0; // Timestamp. ev.xclient.data.l[2] = 0; // Requestor's currently active window (none) ev.xclient.data.l[3] = 0; ev.xclient.data.l[4] = 0; XSelectInput(m_pDisplay, m_wOwner, StructureNotifyMask); XSendEvent(m_pDisplay, RootWindow(m_pDisplay, iScreen), false, (SubstructureNotifyMask | SubstructureRedirectMask), &ev); XSync(m_pDisplay, false); XRaiseWindow(m_pDisplay, m_wOwner); // And then, let it get caught on destination // by QApplication::x11EventFilter... QByteArray value = QJACKCTL_XUNIQUE; XChangeProperty( m_pDisplay, m_wOwner, m_aUnique, m_aUnique, 8, PropModeReplace, (unsigned char *) value.data(), value.length()); // Done. return true; } #endif return false; } #if defined(Q_WS_X11) bool x11EventFilter(XEvent *pEv) { if (m_pWidget && m_wOwner != None && pEv->type == PropertyNotify && pEv->xproperty.window == m_wOwner && pEv->xproperty.state == PropertyNewValue) { // 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); } return QApplication::x11EventFilter(pEv); } #endif // Session shutdown handler. void commitData(QSessionManager& sm) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->setQuitForce(true); #if QT_VERSION < 0x050000 QApplication::commitData(sm); #endif } private: // Translation support. QTranslator *m_pQtTranslator; QTranslator *m_pMyTranslator; // Instance variables. QWidget *m_pWidget; #if defined(Q_WS_X11) Display *m_pDisplay; Atom m_aUnique; Window m_wOwner; #endif }; //------------------------------------------------------------------------- // stacktrace - Signal crash handler. // #ifdef CONFIG_STACKTRACE #if defined(__GNUC__) && defined(Q_OS_LINUX) #include #include #include #include #include void stacktrace ( int signo ) { pid_t pid; int rc; int status = 0; char cmd[80]; // Reinstall default handler; prevent race conditions... signal(signo, SIG_DFL); static const char *shell = "/bin/sh"; static const char *format = "gdb -q --batch --pid=%d" " --eval-command='thread apply all bt'"; snprintf(cmd, sizeof(cmd), format, (int) getpid()); pid = fork(); // Fork failure! if (pid < 0) return; // Fork child... if (pid == 0) { execl(shell, shell, "-c", cmd, NULL); _exit(1); return; } // Parent here: wait for child to terminate... do { rc = waitpid(pid, &status, 0); } while ((rc < 0) && (errno == EINTR)); // Dispatch any logging, if any... QApplication::processEvents(QEventLoop::AllEvents, 3000); // Make sure everyone terminates... kill(pid, SIGTERM); _exit(1); } #endif #endif //------------------------------------------------------------------------- // main - The main program trunk. // int main ( int argc, char **argv ) { 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); #endif #endif qjackctlApplication app(argc, argv); // Construct default settings; override with command line arguments. qjackctlSetup settings; if (!settings.parse_args(app.arguments())) { app.quit(); return 1; } // Check if we'll just start an external program... if (!settings.sCmdLine.isEmpty()) { jack_client_t *pJackClient = jack_client_open("qjackctl-start", JackNoStartServer, NULL); if (pJackClient) { jack_client_close(pJackClient); int iExitStatus = ::system(settings.sCmdLine.toUtf8().constData()); app.quit(); return iExitStatus; } } // Have another instance running? if (settings.bSingleton) { if (app.setup(settings.sServerName)) { app.quit(); return 2; } } // Dark themes grayed/disabled color group fix... QPalette pal(app.palette()); if (pal.base().color().value() < 0x7f) { #if QT_VERSION >= 0x050000 const QColor& color = pal.window().color(); const int iGroups = int(QPalette::Active | QPalette::Inactive) + 1; for (int i = 0; i < iGroups; ++i) { const QPalette::ColorGroup group = QPalette::ColorGroup(i); pal.setBrush(group, QPalette::Light, color.lighter(150)); pal.setBrush(group, QPalette::Midlight, color.lighter(120)); pal.setBrush(group, QPalette::Dark, color.darker(150)); pal.setBrush(group, QPalette::Mid, color.darker(120)); pal.setBrush(group, QPalette::Shadow, color.darker(200)); } // pal.setColor(QPalette::Disabled, QPalette::ButtonText, pal.mid().color()); #endif pal.setColorGroup(QPalette::Disabled, pal.windowText().color().darker(), pal.button(), pal.light(), pal.dark(), pal.mid(), pal.text().color().darker(), pal.text().color().lighter(), pal.base(), pal.window()); app.setPalette(pal); } // Set default base font... int iBaseFontSize = app.font().pointSize(); if (settings.iBaseFontSize > 0) iBaseFontSize = settings.iBaseFontSize; app.setFont(QFont(app.font().family(), iBaseFontSize)); // What style do we create these forms? Qt::WindowFlags wflags = Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint; if (settings.bKeepOnTop) wflags |= Qt::Tool; // Construct the main form, and show it to the world. qjackctlMainForm w(0, wflags); w.setup(&settings); // If we have a systray icon, we'll skip this. if (!settings.bSystemTray) { w.show(); w.adjustSize(); } // Settle this one as application main widget... app.setMainWidget(&w); // Register the quit signal/slot. app.setQuitOnLastWindowClosed(false); return app.exec(); } // end of qjackctl.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlStatus.h0000644000175000001440000000012311353112764020350 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826685.185395 30 ctime=1364826685.185395506 qjackctl-0.3.10/src/qjackctlStatus.h0000644000175000001440000000363611353112764017650 0ustar00rncbcusers00000000000000// qjackctlStatus.h // /**************************************************************************** Copyright (C) 2003-2010, 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 __qjackctlStatus_h #define __qjackctlStatus_h // List view statistics item indexes #define STATUS_SERVER_NAME 0 #define STATUS_SERVER_STATE 1 #define STATUS_DSP_LOAD 2 #define STATUS_SAMPLE_RATE 3 #define STATUS_BUFFER_SIZE 4 #define STATUS_REALTIME 5 #define STATUS_TRANSPORT_STATE 6 #define STATUS_TRANSPORT_TIME 7 #define STATUS_TRANSPORT_BBT 8 #define STATUS_TRANSPORT_BPM 9 #define STATUS_XRUN_COUNT 10 #define STATUS_XRUN_TIME 11 #define STATUS_XRUN_LAST 12 #define STATUS_XRUN_MAX 13 #define STATUS_XRUN_MIN 14 #define STATUS_XRUN_AVG 15 #define STATUS_XRUN_TOTAL 16 #define STATUS_RESET_TIME 17 #define STATUS_MAX_DELAY 18 // (Big)Time display identifiers. #define DISPLAY_TRANSPORT_TIME 0 #define DISPLAY_TRANSPORT_BBT 1 #define DISPLAY_RESET_TIME 2 #define DISPLAY_XRUN_TIME 3 #endif // __qjackctlStatus_h // end of qjackctlStatus.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayForm.h0000644000175000001440000000012411533267321021445 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826685.185395 30 ctime=1364826685.185395506 qjackctl-0.3.10/src/qjackctlPatchbayForm.h0000644000175000001440000000600611533267321020736 0ustar00rncbcusers00000000000000// qjackctlPatchbayForm.h // /**************************************************************************** Copyright (C) 2003-2011, 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 __qjackctlPatchbayForm_h #define __qjackctlPatchbayForm_h #include "ui_qjackctlPatchbayForm.h" // Forward declarations. class qjackctlPatchbay; class qjackctlSetup; //---------------------------------------------------------------------------- // qjackctlPatchbayForm -- UI wrapper form. class qjackctlPatchbayForm : public QWidget { Q_OBJECT public: // Constructor. qjackctlPatchbayForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlPatchbayForm(); void setup(qjackctlSetup *pSetup); qjackctlPatchbayView *patchbayView() const; bool queryClose(); const QString& patchbayPath() const; void newPatchbayFile(bool bSnapshot); bool loadPatchbayFile(const QString& sFileName); bool savePatchbayFile(const QString& sFileName); void loadPatchbayRack(qjackctlPatchbayRack *pRack); void setRecentPatchbays(const QStringList& patchbays); void updateRecentPatchbays(); public slots: void newPatchbay(); void loadPatchbay(); void savePatchbay(); void selectPatchbay(int iPatchbay); void toggleActivePatchbay(); void addOSocket(); void removeOSocket(); void editOSocket(); void copyOSocket(); void moveUpOSocket(); void moveDownOSocket(); void addISocket(); void removeISocket(); void editISocket(); void copyISocket(); void moveUpISocket(); void moveDownISocket(); void connectSelected(); void disconnectSelected(); void disconnectAll(); void expandAll(); void contentsChanged(); void refreshForm(); void stabilizeForm(); protected: void showEvent(QShowEvent *); void hideEvent(QHideEvent *); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); private: // The Qt-designer UI struct... Ui::qjackctlPatchbayForm m_ui; // Instance variables. qjackctlSetup *m_pSetup; int m_iUntitled; qjackctlPatchbay *m_pPatchbay; QString m_sPatchbayPath; QString m_sPatchbayName; QStringList m_recentPatchbays; bool m_bActivePatchbay; int m_iUpdate; }; #endif // __qjackctlPatchbayForm_h // end of qjackctlPatchbayForm.h qjackctl-0.3.10/src/PaxHeaders.16050/translations0000644000175000001440000000013212126315075017642 xustar000000000000000030 mtime=1364826685.167395506 30 atime=1364826684.943395502 30 ctime=1364826685.167395506 qjackctl-0.3.10/src/translations/0000755000175000001440000000000012126315075017207 5ustar00rncbcusers00000000000000qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_ja.ts0000644000175000001440000000012412113664610022534 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826685.119395 30 ctime=1364826685.165395506 qjackctl-0.3.10/src/translations/qjackctl_ja.ts0000644000175000001440000056146112113664610022040 0ustar00rncbcusers00000000000000 QObject (default) (既定) 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オプションã¯å¼•æ•°ã¨ã—ã¦åå‰ã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚ Qt: %1 qjackctlAboutForm About QjackCtl QjackCtlã«ã¤ã„㦠&Close é–‰ã˜ã‚‹(&C) Alt+C About Qt Qtã«ã¤ã„㦠Version Build Using: JACK %1 Debugging option enabled. System tray disabled. Transport status control disabled. Realtime status disabled. XRUN delay status disabled. Maximum delay status disabled. JACK Port aliases support disabled. JACK MIDI support disabled. JACK Session support disabled. ALSA/MIDI sequencer support disabled. D-Bus interface support disabled. Website This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 or later. qjackctlClientListView Readable Clients / Output Ports 読ã¿è¾¼ã¿å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ / 出力ãƒãƒ¼ãƒˆ Writable Clients / Input Ports 書ãè¾¼ã¿å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ / 入力ãƒãƒ¼ãƒˆ &Connect 接続(&C) Alt+C Connect &Disconnect 切断(&D) Alt+D Disconnect Disconnect &All ã™ã¹ã¦åˆ‡æ–­(&A) Alt+A Disconect All Re&name リãƒãƒ¼ãƒ (&n) Alt+N Rename &Refresh æ›´æ–°(&R) 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 Audio オーディオ Connect currently selected ports é¸æŠžã—ã¦ã„ã‚‹ãƒãƒ¼ãƒˆã‚’接続ã—ã¾ã™ &Connect 接続(&C) Alt+C Disconnect currently selected ports é¸æŠžã—ã¦ã„ã‚‹ãƒãƒ¼ãƒˆã‚’切断ã—ã¾ã™ &Disconnect 切断(&D) Alt+D Disconnect all currently connected ports 接続ã—ã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒãƒ¼ãƒˆã‚’切断ã—ã¾ã™ Disconnect &All ã™ã¹ã¦åˆ‡æ–­(&A) Alt+A Expand all client ports ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒãƒ¼ãƒˆã‚’展開ã—ã¾ã™ E&xpand All ã™ã¹ã¦å±•é–‹(&x) Alt+X Refresh current connections view 接続ã®è¡¨ç¤ºã‚’æ›´æ–°ã—ã¾ã™ &Refresh æ›´æ–°(&R) Alt+R MIDI ALSA Warning 警告 The preset aliases have been changed: "%1" Do you want to save the changes? プリセットã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹åãŒå¤‰æ›´ã•れã¦ã„ã¾ã™: "%1" 変更をä¿å­˜ã—ã¾ã™ã‹? qjackctlConnectorView &Connect 接続(&C) Alt+C Connect &Disconnect 切断(&D) Alt+D Disconnect Disconnect &All ã™ã¹ã¦åˆ‡æ–­(&A) Alt+A Disconect All &Refresh æ›´æ–°(&R) Alt+R Refresh qjackctlMainForm QjackCtl Start the JACK server JACKサーãƒãƒ¼ã‚’é–‹å§‹ &Start é–‹å§‹(&S) Alt+S Stop the JACK server JACKサーãƒã‚’åœæ­¢ S&top åœæ­¢(&T) Alt+T JACK server state JACKサーãƒãƒ¼ã®çŠ¶æ…‹ JACK server mode JACKサーãƒãƒ¼ãƒ¢ãƒ¼ãƒ‰ DSP Load DSPã®è² è· Sample rate サンプルレート XRUN Count (notifications) XRUNã®ã‚«ã‚¦ãƒ³ãƒˆ(notifications) Time display 時間ã®è¡¨ç¤º Transport state トランスãƒãƒ¼ãƒˆã®çŠ¶æ…‹ Transport BPM トランスãƒãƒ¼ãƒˆã®BPM Transport time トランスãƒãƒ¼ãƒˆã®æ™‚é–“ Quit processing and exit 処ç†ã‚’終ã‚らã›çµ‚了ã—ã¾ã™ &Quit 終了(&Q) Alt+Q Show/hide the session management window セッション管ç†ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示/éš ã™ S&ession セッション(&E) Alt+E Show/hide the messages log/status window メッセージログ/状態ウィンドウを表示/éš ã™ &Messages メッセージ(&M) Alt+M Show settings and options dialog 設定ã¨ã‚ªãƒ—ションダイアログを表示 Set&up... 設定(&U)... Alt+U Show/hide the actual connections patchbay window ç¾åœ¨æŽ¥ç¶šã—ã¦ã„るパッãƒãƒ™ã‚¤ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示/éš ã™ &Connect 接続(&C) Alt+C Show/hide the patchbay editor window パッãƒãƒ™ã‚¤ç·¨é›†ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’表示/éš ã™ &Patchbay パッãƒãƒ™ã‚¤(&P) Alt+P Rewind transport トランスãƒãƒ¼ãƒˆã‚’å…ˆé ­ã«æˆ»ã™ &Rewind å…ˆé ­ã«æˆ»ã™(&R) Alt+R Backward transport トランスãƒãƒ¼ãƒˆã®é€†å†ç”Ÿ &Backward 逆å†ç”Ÿ(&B) Alt+B Start transport rolling トランスãƒãƒ¼ãƒˆã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚’スタートã™ã‚‹ &Play å†ç”Ÿ(&P) Space スペース Stop transport rolling トランスãƒãƒ¼ãƒˆã®ãƒ­ãƒ¼ãƒªãƒ³ã‚°ã‚’ストップã™ã‚‹ Pa&use ä¸€æ™‚åœæ­¢(&U) Shift+Space Forward transport トランスãƒãƒ¼ãƒˆã‚’æ—©é€ã‚Šã™ã‚‹ &Forward æ—©é€ã‚Š(&F) Alt+F Show information about this application ã“ã®ã‚¢ãƒ—リケーションã«ã¤ã„ã¦ã®æƒ…報を表示ã—ã¾ã™ Ab&out... 情報(&O)... Alt+O Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. クライアントã¨ã—ã¦ALSAシーケンサーを開ãã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—㟠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)。 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"ã‚’é¸æŠžã—ã¦ä¸‹ã•ã„。 Warning 警告 JACK is currently running. Do you want to terminate the JACK audio server? JACKã¯å‹•作中ã§ã™ã€‚ JACKオーディオサーãƒãƒ¼ã‚’終了ã—ã¾ã™ã‹ï¼Ÿ successfully æˆåŠŸ with exit status=%1 終了ステータス = %1 Could not start JACK. Maybe JACK audio server is already started. JACKã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ ãŠãらãã‚‚ã†JACKサウンドサーãƒãƒ¼ãŒé–‹å§‹ã•れã¦ã„ã¾ã™ã€‚ Could not load preset "%1". Retrying with default. プリセット "%1" をロードã§ãã¾ã›ã‚“。 既定ã®è¨­å®šã§ãƒªãƒˆãƒ©ã‚¤ã—ã¾ã™ã€‚ Could not load default preset. Sorry. 既定ã®ãƒ—リセットをロードã§ãã¾ã›ã‚“。 ã”ã‚ã‚“ãªã•ã„。 Startup script... スタートアップスクリプト... Startup script terminated スタートアップスクリプトã¯çµ‚了ã—ã¾ã—㟠D-BUS: JACK server is starting... D-BUS: JACKサーãƒãƒ¼ã‚’é–‹å§‹ã—ã¦ã„ã¾ã™... D-BUS: JACK server could not be started. Sorry D-BUS: JACKサーãƒãƒ¼ã‚’é–‹å§‹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 ã”ã‚ã‚“ãªã•ã„ JACK is starting... JACKã‚’é–‹å§‹ã—ã¦ã„ã¾ã™... Some client audio applications are still active and connected. Do you want to stop the JACK audio server? ã„ãã¤ã‹ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªã‚¢ãƒ—リケーション㯠ã¾ã ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªæŽ¥ç¶šã‚’æŒã£ã¦ã„ã¾ã™ã€‚ ãれã§ã‚‚JACKオーディオサーãƒãƒ¼ã‚’終了ã—ã¾ã™ã‹ï¼Ÿ Shutdown script... シャットダウンスクリプト... Shutdown script terminated シャットダウンスクリプトã¯çµ‚了ã—ã¾ã—㟠JACK is stopping... JACKを終了ã—ã¦ã„ã¾ã™... D-BUS: JACK server is stopping... D-BUS: JACKサーãƒãƒ¼ã‚’終了ã—ã¦ã„ã¾ã™... D-BUS: JACK server could not be stopped. Sorry D-BUS: JACKサーãƒãƒ¼ã‚’終了ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ ã”ã‚ã‚“ãªã•ã„ JACK was started with PID=%1. JACKã¯ãƒ—ロセスID=%1ã§é–‹å§‹ã—ã¾ã—ãŸã€‚ D-BUS: JACK server was started (%1 aka jackdbus). D-BUS: JACKサーãƒãƒ¼ã¯ã‚¹ã‚¿ãƒ¼ãƒˆã—ã¾ã—㟠(%1 ã™ãªã‚ã¡jackdbus)。 JACK is being forced... JACKã¯å¼·åˆ¶çµ‚了ã—ã¾ã™... JACK was stopped JACKã¯çµ‚了ã—ã¾ã—㟠D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: JACKサーãƒãƒ¼ã¯çµ‚了ã—ã¾ã—㟠(%1 ã™ãªã‚ã¡jackdbus)。 Post-shutdown script... ãƒã‚¹ãƒˆã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã‚¹ã‚¯ãƒªãƒ—ト... Post-shutdown script terminated ãƒã‚¹ãƒˆã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã‚¹ã‚¯ãƒªãƒ—トã¯çµ‚了ã—ã¾ã—㟠Error エラー Transport BBT (bar:beat.ticks) トランスãƒãƒ¼ãƒˆBBT (bar:beat.ticks) Transport BBT (bar.beat.ticks) Transport time code トランスãƒãƒ¼ãƒˆã®ã‚¿ã‚¤ãƒ ã‚³ãƒ¼ãƒ‰ Elapsed time since last reset 最後ã®ãƒªã‚»ãƒƒãƒˆã‹ã‚‰ã®çµŒéŽæ™‚é–“ Elapsed time since last XRUN 最後ã®XRUNã‹ã‚‰ã®çµŒéŽæ™‚é–“ Could not load active patchbay definition. "%1" Disabled. アクティブãªãƒ‘ッãƒãƒ™ã‚¤å®šç¾©ã‚’ロードã§ãã¾ã›ã‚“。 "%1" 無効ã«ã—ã¾ã—ãŸã€‚ Patchbay activated. パッãƒãƒ™ã‚¤ã‚’有効ã«ã—ã¾ã—ãŸã€‚ Patchbay deactivated. パッãƒãƒ™ã‚¤ã‚’無効ã«ã—ã¾ã—ãŸã€‚ Statistics reset. 統計ã®ãƒªã‚»ãƒƒãƒˆã€‚ msec ミリ秒 JACK connection graph change. JACK接続グラフã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚ XRUN callback (%1). XRUNコールãƒãƒƒã‚¯ (%1)。 Buffer size change (%1). ãƒãƒƒãƒ•ァサイズを変更ã—ã¾ã—㟠(%1)。 Shutdown notification. シャットダウンã®é€šçŸ¥ã€‚ Could not start JACK. Sorry. JACKã‚’é–‹å§‹ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ ã”ã‚ã‚“ãªã•ã„。 JACK has crashed. JACKã¯ã‚¯ãƒ©ãƒƒã‚·ãƒ¥ã—ã¾ã—ãŸã€‚ JACK timed out. JACKã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚ JACK write error. JACK writeエラー。 JACK read error. JACK readエラー。 Unknown JACK error (%d). 䏿˜ŽãªJACKエラー (%d)。 ALSA connection graph change. ALSA接続グラフã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚ JACK active patchbay scan JACKã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ‘ッãƒãƒ™ã‚¤ã®ã‚¹ã‚­ãƒ£ãƒ³ ALSA active patchbay scan ALSAã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªãƒ‘ッãƒãƒ™ã‚¤ã®ã‚¹ã‚­ãƒ£ãƒ³ JACK connection change. JACKã®æŽ¥ç¶šã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚ ALSA connection change. 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サーãƒãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ã—ã¦æŽ¥ç¶šã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ - %1 メッセージウィンドウã§è©³ç´°ãªæƒ…報を確èªã—ã¦ä¸‹ã•ã„。 Server configuration saved to "%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 ã„ã„㈠RT Rolling ローリング Looping ループ %1 msec XRUN callback (%1 skipped). XRUNコールãƒãƒƒã‚¯ (%1 をスキップ)。 Started é–‹å§‹ Active 有効 Activating 有効化 Inactive 無効 &Hide éžè¡¨ç¤º(&H) Mi&nimize 最å°åŒ–(&n) S&how 表示(&h) Rest&ore å…ƒã«æˆ»ã™(&o) &Stop åœæ­¢(&S) &Reset リセット(&R) &Presets プリセット(&P) &Load... 読ã¿è¾¼ã¿(&L)... &Save... ä¿å­˜(&S)... Save and &Quit... ä¿å­˜ã—ã¦çµ‚了(&Q)... Save &Template... テンプレートをä¿å­˜(&T)... &Versioning ãƒãƒ¼ã‚¸ãƒ§ãƒ³(&V) Re&fresh æ›´æ–°(&F) St&atus 状態(&A) &Connections 接続(&C) Patch&bay パッãƒãƒ™ã‚¤(&B) &Transport トランスãƒãƒ¼ãƒˆ(&T) Server settings will be only effective after restarting the JACK audio server. サーãƒãƒ¼è¨­å®šã¯JACKオーディオサーãƒãƒ¼ã‚’å†èµ·å‹•後ã«ã®ã¿ 有効ã¨ãªã‚Šã¾ã™ã€‚ 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 メッセージ(&M) Messages log メッセージã®ãƒ­ã‚° Messages output log メッセージ出力ログ &Status 状態(&S) Status information çŠ¶æ…‹ã®æƒ…å ± Statistics since last server startup 最後ã«ã‚µãƒ¼ãƒãƒ¼ãŒé–‹å§‹ã—ã¦ã‹ã‚‰ã®çµ±è¨ˆ Description é …ç›® Value 値 Reset XRUN statistic values XRUN統計値ã®ãƒªã‚»ãƒƒãƒˆ Re&set リセット(&S) Alt+S Refresh XRUN statistic values XRUNçµ±è¨ˆå€¤ã®æ›´æ–° &Refresh æ›´æ–°(&R) Alt+R Server name サーãƒãƒ¼å Server state サーãƒãƒ¼ã®çŠ¶æ…‹ DSP Load DSPè² è· Sample Rate サンプルレート Buffer Size ãƒãƒƒãƒ•ァサイズ Realtime Mode リアルタイムモード Transport state トランスãƒãƒ¼ãƒˆã®çŠ¶æ…‹ Transport Timecode トランスãƒãƒ¼ãƒˆ タイムコード Transport BBT トランスãƒãƒ¼ãƒˆ BBT Transport BPM トランスãƒãƒ¼ãƒˆ BPM XRUN count since last server startup 最後ã«ã‚µãƒ¼ãƒãƒ¼ãŒé–‹å§‹ã—ã¦ã‹ã‚‰ã®XRUNã®æ•° XRUN last time detected 検出ã•れãŸXRUNã®ç¶™ç¶šæ™‚é–“ XRUN last XRUNã®ç¶™ç¶š XRUN maximum XRUNã®æœ€å¤§å€¤ XRUN minimum XRUNã®æœ€å°å€¤ XRUN average XRUNã®å¹³å‡å€¤ XRUN total 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? ã™ã¹ã¦ã®ã‚½ã‚±ãƒƒãƒˆã‚’切断ã—ã¾ã™ よã‚ã—ã„ã§ã™ã‹? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit パッãƒãƒ™ã‚¤ - JACK Audio Connection Kit Move currently selected output socket down one position é¸æŠžã—ã¦ã„る出力ソケットを下ã¸ç§»å‹•ã—ã¾ã™ Down 下㸠Create a new output socket æ–°ã—ã„出力ソケットを作æˆã—ã¾ã™ Add... 追加... Edit currently selected input socket properties é¸æŠžã—ã¦ã„る入力ソケットã®ãƒ—ロパティを編集ã—ã¾ã™ Edit... 編集... Move currently selected output socket up one position é¸æŠžã—ã¦ã„る出力ソケットを上ã«ç§»å‹•ã—ã¾ã™ Up 上㸠Remove currently selected output socket é¸æŠžã—ã¦ã„る出力ソケットを削除ã—ã¾ã™ Remove 削除 Duplicate (copy) currently selected output socket é¸æŠžã—ã¦ã„る出力ソケットを複製(コピー)ã—ã¾ã™ Copy... コピー... Remove currently selected input socket é¸æŠžã—ã¦ã„る入力ソケットを削除ã—ã¾ã™ Duplicate (copy) currently selected input socket é¸æŠžã—ã¦ã„る入力ソケットを複製(コピー)ã—ã¾ã™ Create a new input socket æ–°ã—ã„入力ソケットを作æˆã—ã¾ã™ Edit currently selected output socket properties é¸æŠžã—ã¦ã„る出力ソケットã®ãƒ—ロパティを編集ã—ã¾ã™ Connect currently selected sockets é¸æŠžã—ã¦ã„るソケットを接続ã—ã¾ã™ &Connect 接続(&C) Alt+C Disconnect currently selected sockets é¸æŠžã—ã¦ã„るソケットを切断ã—ã¾ã™ &Disconnect 切断(&D) Alt+D Disconnect all currently connected sockets 接続ã•れã¦ã„ã‚‹ã™ã¹ã¦ã®ã‚½ã‚±ãƒƒãƒˆã‚’切断ã—ã¾ã™ Disconnect &All ã™ã¹ã¦åˆ‡æ–­(&A) Alt+A Expand all items ã™ã¹ã¦ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’展開ã—ã¾ã™ E&xpand All ã™ã¹ã¦å±•é–‹(&X) Alt+X Refresh current patchbay view パッãƒãƒ™ã‚¤ã®è¡¨ç¤ºã‚’æ›´æ–°ã—ã¾ã™ &Refresh æ›´æ–°(&R) Alt+R Create a new patchbay profile æ–°ã—ã„パッãƒãƒ™ã‚¤ãƒ—ロファイルを作æˆã—ã¾ã™ &New æ–°è¦(&N) Alt+N Load patchbay profile パッãƒãƒ™ã‚¤ãƒ—ロファイルをロードã—ã¾ã™ &Load... 読ã¿è¾¼ã¿(&L)... Alt+L Save current patchbay profile パッãƒãƒ™ã‚¤ãƒ—ロファイルをä¿å­˜ã—ã¾ã™ &Save... ä¿å­˜(&S)... Alt+S Current (recent) patchbay profile(s) ç¾åœ¨ã®(最近使ã£ãŸ)パッãƒãƒ™ã‚¤ãƒ—ロファイル Toggle activation of current patchbay profile ç¾åœ¨ã®ãƒ‘ッãƒãƒ™ã‚¤ãƒ—ãƒ­ãƒ•ã‚¡ã‚¤ãƒ«ã®æœ‰åŠ¹åŒ–/無効化 Acti&vate 有効化(&V) Alt+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 アクティブ 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 Load session セッションをロードã—ã¾ã™ &Load... 読ã¿è¾¼ã¿(&L)... Recent session 最近ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ &Recent 最近ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³(&R) Save session セッションをä¿å­˜ã—ã¾ã™ &Save ä¿å­˜(&S) Save session versioning セッションã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’ä¿å­˜ã—ã¾ã™ &Versioning ãƒãƒ¼ã‚¸ãƒ§ãƒ³(&V) Update session ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®æ›´æ–° Re&fresh æ›´æ–°(&F) Session clients / connections Client / Ports クライアント / ãƒãƒ¼ãƒˆ UUID Command コマンド Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit 編集(&E) Remove infra-client Re&move &Remove 削除(&R) &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: load session %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: save session %2. %1: セッションã®ä¿å­˜ %2。 New Client qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit 設定 - JACK Audio Connection Kit Settings 設定 Preset &Name: プリセットå(&N): Settings preset name プリセット設定å (default) defaultã¯å†…部的ã«ã¯ã‚·ãƒ³ãƒœãƒ«åã¨ãªã£ã¦ã„るよã†ã§ã€ã€Œæ—¢å®šã€ã¨ã—ã¦ã—ã¾ã†ã¨ãã†ã„ã†æ–°è¦ãƒ—リセットã¨ã—ã¦æ‰±ã‚れるよã†ã§ã™ã€‚ Save settings as current preset name 設定をç¾åœ¨ã®ãƒ—リセットåã¨ã—ã¦ä¿å­˜ &Save ä¿å­˜(&S) Alt+S Delete current settings preset ç¾åœ¨ã®ãƒ—リセットを削除ã—ã¾ã™ &Delete 削除(&D) Alt+D Server サーãƒãƒ¼ Server &Path: サーãƒãƒ¼ã®ãƒ‘ス(&P): The JACK Audio Connection Kit sound server path JACK Audio Connection Kitサウンドサーãƒãƒ¼ã®ãƒ‘ス jackd jackdmp jackstart &Name: åå‰(&N): The JACK Audio Connection Kit sound server name JACK Audio Connection Kitサウンドサーãƒãƒ¼å Driv&er: ドライãƒãƒ¼(&E): The audio backend driver interface to use 使用ã™ã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ェイス dummy sun oss alsa portaudio coreaudio freebob firewire net netone Parameters パラメーター MIDI Driv&er: MIDIドライãƒãƒ¼(&E): The ALSA MIDI backend driver to use 使用ã™ã‚‹ALSA MIDIãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ none ãªã— raw seq Start De&lay (secs): 開始時ã®é…延時間(ç§’)(&l): 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) Alt+R Do not attempt to lock memory, even if in realtime mode リアルタイムモードã§ãªãã¦ã‚‚ã€ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’ロックã—ãªã„よã†ã«ã—ã¾ã™ No Memory Loc&k Alt+K Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) 一般的ãªãƒ„ールキットライブラリーã®ãƒ¡ãƒ¢ãƒªãƒ¼ã‚’アンロックã™ã‚‹ (GTK+, QT, FLTK, Wine) &Unlock Memory Alt+U Ignore xruns reported by the backend driver ãƒãƒƒã‚¯ã‚¨ãƒ³ãƒ‰ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ãŒå ±å‘Šã™ã‚‹XRUNを無視ã—ã¾ã™ So&ft Mode ソフトモード(&f) Alt+F Provide output monitor ports 出力モニター用ã«ãƒãƒ¼ãƒˆã‚’æä¾›ã—ã¾ã™ &Monitor モニター(&M) Alt+M Force 16bit mode instead of failing over 32bit (default) 32ビットモード(既定)ã§å¤±æ•—ã™ã‚‹å ´åˆã«16ビットモードを強制ã§ãã¾ã™ Force &16bit 強制的ã«16bitを使用(&1) Alt+1 Enable hardware monitoring of capture ports 録音ãƒãƒ¼ãƒˆã®ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ¢ãƒ‹ã‚¿ãƒªãƒ³ã‚°ã‚’有効ã«ã™ã‚‹ H/W M&onitor H/Wモニターを有効(&O) Alt+O Enable hardware metering on cards that support it ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒ¡ãƒ¼ã‚¿ãƒ¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„るカードã§ã¯ãれを有効ã«ã—ã¾ã™ H/&W Meter H/Wメーターを有効(&W) Alt+W Ignore hardware period/buffer size ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ã®ãƒ”リオド/ãƒãƒƒãƒ•ァーサイズを無視ã—ã¾ã™ &Ignore H/W H/Wを無視(&I) Alt+I Whether to give verbose output on messages メッセージã«è©³ç´°ãªå‡ºåŠ›ã‚’è¡Œã†ã‹ã©ã†ã‹ &Verbose messages 詳細ãªãƒ¡ãƒƒã‚»ãƒ¼ã‚¸(&V) Alt+V &Output Device: 出力デãƒã‚¤ã‚¹(&O): &Output Channels: 出力ãƒãƒ£ãƒ³ãƒãƒ«(&O): &Interface: インターフェース(&I): Maximum input audio hardware channels to allocate 割り当ã¦ã‚‹å…¥åŠ›ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒ£ãƒ³ãƒãƒ«ã®æœ€å¤§å€¤ &Audio: オーディオ(&A): &Input Latency: 入力レイテンシー(&I): Dit&her: ディザリング(&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デãƒã‚¤ã‚¹å hw:0 plughw:0 /dev/audio /dev/dsp Select output device for playback å†ç”Ÿã®ãŸã‚ã®å‡ºåŠ›ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž > Alternate input device for capture 録音ã®ãŸã‚ã®å…¥åŠ›ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž &Output Latency: 出力レイテンシー(&O): Maximum output audio hardware channels to allocate 割り当ã¦ã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªå‡ºåŠ›ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒ£ãƒ³ãƒãƒ«ã®æœ€å¤§å€¤ Alternate output device for playback å†ç”Ÿã®ãŸã‚ã®å‡ºåŠ›ãƒ‡ãƒã‚¤ã‚¹ &Input Channels: 入力ãƒãƒ£ãƒ³ãƒãƒ«(&I): Select input device for capture 録音ã®ãŸã‚ã®å…¥åŠ›ãƒ‡ãƒã‚¤ã‚¹ã‚’é¸æŠž Select PCM device name PCMデãƒã‚¤ã‚¹å External input latency (frames) 外部入力ã®ãƒ¬ã‚¤ãƒ†ãƒ³ã‚·ãƒ¼(フレーム) Set dither mode ディザリングモードをセットã—ã¾ã™ None ãªã— Rectangular Shaped Triangular Number of periods in the hardware buffer ãƒãƒ¼ãƒ‰ã‚¦ã‚§ã‚¢ãƒãƒƒãƒ•ァーã®ãƒ”リオド数 Priorit&y: 優先度(&y): &Frames/Period: フレーム/ピリオド(&F): Frames per period between process() calls process()コール間ã®ãƒ”リオド毎ã®ãƒ•レーム数 16 32 64 128 256 512 1024 2048 4096 Port Ma&ximum: 最大ãƒãƒ¼ãƒˆæ•°(&x): &Channels: ãƒãƒ£ãƒ³ãƒãƒ«(&C): Number of microseconds to wait between engine processes (dummy) エンジンプロセス間ã®å¾…ã¡æ™‚é–“ã‚’ãƒžã‚¤ã‚¯ãƒ­ç§’ã§æŒ‡å®šã—ã¾ã™(dummy) 21333 Sample rate in frames per second サンプリングレートを1ç§’ã‚ãŸã‚Šã®ãƒ•ãƒ¬ãƒ¼ãƒ æ•°ã§æŒ‡å®šã—ã¾ã™ 22050 32000 44100 48000 88200 96000 192000 Scheduler priority when running realtime リアルタイムモードã§ç¨¼å‹•ã—ã¦ã„ã‚‹å ´åˆã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ãƒ¼ã«ãŠã‘る優先度を設定ã—ã¾ã™ &Word Length: ワード長(&W): Periods/&Buffer: ピリオド/ãƒãƒƒãƒ•ァー(&B): Word length ワード長 Maximum number of ports the JACK server can manage JACKサーãƒãƒ¼ãŒç®¡ç†ã™ã‚‹ãƒãƒ¼ãƒˆã®æœ€å¤§æ•° &Wait (usec): å¾…ã¡æ™‚é–“(マイクロ秒)(&W): Sample &Rate: サンプルレート(&R): Maximum number of audio channels to allocate 割り当ã¦ã‚‹ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªãƒãƒ£ãƒ³ãƒãƒ«ã®æœ€å¤§å€¤ &Timeout (msec): タイムアウト(ミリ秒)(&T): Set client timeout limit in miliseconds クライアントã®ã‚¿ã‚¤ãƒ ãƒªãƒŸãƒƒãƒˆã‚’ãƒŸãƒªç§’ã§æŒ‡å®šã—ã¾ã™ 200 500 1000 2000 5000 10000 Options オプション Scripting スクリプト Whether to execute a custom shell script before starting up the JACK audio server. JACKオーディオサーãƒãƒ¼ã‚’é–‹å§‹ã™ã‚‹å‰ã«ä»»æ„ã®ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Execute script on Start&up: スタートアップ時ã«ã‚¹ã‚¯ãƒªãƒ—トを実行(&U): Whether to execute a custom shell script after starting up the JACK audio server. JACKオーディオサーãƒãƒ¼ã‚’é–‹å§‹ã—ãŸç›´å¾Œã«ä»»æ„ã®ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Execute script after &Startup: スタートアップ後ã«ã‚¹ã‚¯ãƒªãƒ—トを実行(&S): Whether to execute a custom shell script before shuting down the JACK audio server. JACKオーディオサーãƒãƒ¼ã‚’終了ã™ã‚‹ç›´å‰ã«ä»»æ„ã®ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Execute script on Shut&down: シャットダウン時ã«ã‚¹ã‚¯ãƒªãƒ—トを実行(&D): Command line to be executed before starting up the JACK audio server JACKオーディオサーãƒãƒ¼ã‚’é–‹å§‹ã™ã‚‹å‰ã«å®Ÿè¡Œã•れるコマンドライン Scripting argument meta-symbols メタシンボルã¨ã—ã¦ä½¿ãˆã‚‹ã‚¹ã‚¯ãƒªãƒ—ト引数 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 before shutting down the JACK audio server JACKオーディオサーãƒãƒ¼ã‚’終了ã™ã‚‹ç›´å‰ã«å®Ÿè¡Œã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—トをå‚ç…§ã—ã¾ã™ Command line to be executed before shutting down the JACK audio server JACKオーディオサーãƒãƒ¼ã‚’終了ã™ã‚‹ç›´å‰ã«å®Ÿè¡Œã•れるコマンドライン Whether to execute a custom shell script after shuting down the JACK audio server. JACKオーディオサーãƒãƒ¼ã‚’終了ã—ãŸç›´å¾Œã«ä»»æ„ã®ã‚·ã‚§ãƒ«ã‚¹ã‚¯ãƒªãƒ—トを実行ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Execute script after Shu&tdown: シャットダウン後ã«ã‚¹ã‚¯ãƒªãƒ—トを実行(&D): Alt+T 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 統計 Whether to capture standard output (stdout/stderr) into messages window ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ä¸­ã«æ¨™æº–出力(stdout/stderr)を記録ã™ã‚‹ã‹ã©ã†ã‹ &Capture standard output 標準出力ã®è¨˜éŒ²(&C) Alt+C &XRUN detection regex: XRUNæ¤œå‡ºã®æ­£è¦è¡¨ç¾(&X): Regular expression used to detect XRUNs on server output messages サーãƒãƒ¼å‡ºåŠ›ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸å†…ã«ãŠã„ã¦XRUNを検出ã—ãŸéš›ã«ä½¿ç”¨ã•れる正è¦è¡¨ç¾ xrun of at least ([0-9|\.]+) msecs Connections 接続 Time in seconds between each auto-refresh cycle ã‚ªãƒ¼ãƒ‡ã‚£ã‚ªæ›´æ–°ã‚µã‚¤ã‚¯ãƒ«æ™‚é–“ã‚’ç§’ã§æŒ‡å®šã—ã¾ã™ 5 10 20 30 60 120 Patchbay definition file to be activated as connection persistence profile 接続ã«ãŠã„ã¦æŒç¶šã—ã¦æœ‰åйã«ã™ã‚‹ãƒ‘ッãƒãƒ™ã‚¤å®šç¾©ãƒ•ァイルを指定ã—ã¾ã™ Browse for a patchbay definition file to be activated 有効ã«ã™ã‚‹ãƒ‘ッãƒãƒ™ã‚¤å®šç¾©ã®å‚ç…§ Whether to refresh the connections patchbay automatically 接続パッãƒãƒ™ã‚¤ã‚’è‡ªå‹•çš„ã«æ›´æ–°ã™ã‚‹ã‹ã©ã†ã‹ &Auto refresh connections Patchbay, every (secs): 接続パッãƒãƒ™ã‚¤ã‚’自動更新ã™ã‚‹å‘¨æœŸ(ç§’)(&A): Alt+A Whether to activate a patchbay definition for connection persistence profile. 接続ã«ãŠã„ã¦ç¶™ç¶šã—ã¦æœ‰åйã«ã™ã‚‹ãƒ‘ッãƒãƒ™ã‚¤å®šç¾©ã‚’有効ã«ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Activate &Patchbay persistence: æŒç¶šçš„パッãƒãƒ™ã‚¤æœ‰åй(&P): Alt+P Logging ログã®è¨˜éŒ² Messages log file メッセージログファイル Browse for the messages log file location メッセージログファイルã®å ´æ‰€ã‚’å‚ç…§ã—ã¾ã™ Whether to activate a messages logging to file. メッセージをファイルã«è¨˜éŒ²ã™ã‚‹ã‹ã©ã†ã‹ã€‚ Server &Prefix: サーãƒãƒ¼æŽ¥é ­è¾ž(&P): Server path (command line prefix) サーãƒãƒ¼ãƒ‘ス (コマンドライン接頭辞) &Channels I/O: ãƒãƒ£ãƒ³ãƒãƒ«I/O(&C): &Latency I/O: レイテンシーI/O(&L): Server Suffi&x: サーãƒãƒ¼æŽ¥å°¾è¾ž(&X): Extra driver options (command line suffix) ä»»æ„ã®ãƒ‰ãƒ©ã‚¤ãƒãƒ¼ã‚ªãƒ—ション (コマンドライン接尾辞) Start De&lay: 開始ディレイ(&L): secs ç§’ 0 msecs 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) Transport &BBT (bar:beat.ticks) トランスãƒãƒ¼ãƒˆã®BBT (bar: beat, ticks)(&B) Alt+B Elapsed time since last &Reset 最後ã®ãƒªã‚»ãƒƒãƒˆã‹ã‚‰ã®çµŒéŽæ™‚é–“(&R) Elapsed time since last &XRUN 最後ã®XRUNã‹ã‚‰ã®çµŒéŽæ™‚é–“(&X) Alt+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)インジケーターを点滅ã™ã‚‹ã‹ã©ã†ã‹ Blin&k server mode indicator サーãƒãƒ¼ãƒ¢ãƒ¼ãƒ‰ã‚¤ãƒ³ã‚¸ã‚±ãƒ¼ã‚¿ãƒ¼ã®ç‚¹æ»…(&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度ã«è¡¨ç¤ºã§ãã‚‹è¡Œæ•°ã®æœ€å¤§å€¤ &Messages limit: メッセージリミット(&M): The maximum number of message lines to keep in view メッセージビューã«ï¼‘度ã«è¡¨ç¤ºã§ãã‚‹è¡Œæ•°ã®æœ€å¤§å€¤ 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) Alt+Z Whether to enable client/port name aliases on the connections window 接続ウィンドウã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ/ãƒãƒ¼ãƒˆã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹åを有効ã¨ã™ã‚‹ã‹ã©ã†ã‹ E&nable client/port aliases クライアント/ãƒãƒ¼ãƒˆã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹åã®æœ‰åŠ¹åŒ–(&n) Alt+N Whether to enable in-place client/port name editing (rename) クライアント/ãƒãƒ¼ãƒˆåã®ç·¨é›†ï¼ˆãƒªãƒãƒ¼ãƒ ï¼‰ Ena&ble client/port aliases editing (rename) クライアント/ãƒãƒ¼ãƒˆã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹å編集(リãƒãƒ¼ãƒ )を有効(&b) &JACK client/port aliases: JACKクライアント/ãƒãƒ¼ãƒˆ エイリアス(&J): JACK client/port aliases display mode JACKã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆ/ãƒãƒ¼ãƒˆã‚¨ã‚¤ãƒªã‚¢ã‚¹è¡¨ç¤ºãƒ¢ãƒ¼ãƒ‰ Default 既定 First 1番目 Second 2番目 Misc ãã®ä»– Other ãã®ä»– Whether to start JACK audio server immediately on application startup アプリケーション開始時ã«JACKオーディオサーãƒãƒ¼ã‚’é–‹å§‹ã™ã‚‹ã‹ã©ã†ã‹ &Start JACK audio server on application startup JACKオーディオサーãƒãƒ¼ã®è‡ªå‹•èµ·å‹•(&S) Whether to ask for confirmation on application exit アプリケーションãŒçµ‚了ã™ã‚‹éš›ã«ç¢ºèªã™ã‚‹ &Confirm application close アプリケーションã®çµ‚了ã®ç¢ºèª(&C) Whether to keep all child windows on top of the main window å­ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’常ã«å‰é¢ã«è¡¨ç¤ºã—ã¾ã™ &Keep child windows always on top å­ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’常ã«å‰é¢è¡¨ç¤º(&K) Whether to enable the system tray icon システムトレイアイコンを有効ã«ã™ã‚‹ã‹ã©ã†ã‹ &Enable system tray icon システムトレイアイコンを有効(&E) Alt+E Whether to start minimized to system tray 開始時ã«ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã‚¢ã‚¤ã‚³ãƒ³ã®ã¿è¡¨ç¤ºã™ã‚‹ã‹ã©ã†ã‹ Start minimi&zed to system tray 開始時ã«ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã«æœ€å°åŒ–ã™ã‚‹(&Z) Whether to delay window positioning at application startup &Delay window positioning at startup Whether to restrict to one single application instance (X11) アプリケーションã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ã²ã¨ã¤ã«åˆ¶é™ã™ã‚‹ã‹ã©ã†ã‹ (X11) Single application &instance シングルアプリケーションインスタンス(&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) サーãƒãƒ¼è¨­å®šãƒ­ãƒ¼ã‚«ãƒ«ãƒ•ァイルå(自動起動) .jackdrc Whether to exit once all clients have closed (auto-start) ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒçµ‚了ã—ãŸã‚‰ã‚¢ãƒ—リケーションも終了ã™ã‚‹ã‹ã©ã†ã‹ (自動起動) C&onfigure as temporary server 一時サーãƒãƒ¼ã¨ã—ã¦è¨­å®š(&C) Whether to ask for confirmation on JACK audio server shutdown サーãƒãƒ¼ã®ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã‚’確èªã™ã‚‹ã‹ã©ã†ã‹ Confirm server sh&utdown サーãƒãƒ¼ã®ã‚·ãƒ£ãƒƒãƒˆãƒ€ã‚¦ãƒ³ã‚’確èªã™ã‚‹(&U) Whether to enable ALSA Sequencer (MIDI) support on startup 開始時ã«ALSAシーケンサー (MIDI) サãƒãƒ¼ãƒˆã‚’有効ã«ã™ã‚‹ã‹ã©ã†ã‹ E&nable ALSA Sequencer support ALSAシーケンサーサãƒãƒ¼ãƒˆã‚’有効(&N) Whether to enable D-Bus interface D-Busインターフェイスを有効ã«ã™ã‚‹ã‹ã©ã†ã‹ &Enable D-Bus interface D-Busã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®æœ‰åŠ¹åŒ–(&E) Whether to stop JACK audio server on application exit アプリケーションãŒçµ‚了ã™ã‚‹æ™‚ã«JACKオーディオサーãƒãƒ¼ã‚’åœæ­¢ã™ã‚‹ã‹ã©ã†ã‹ S&top JACK audio server on application exit JACKオーディオサーãƒãƒ¼ã®è‡ªå‹•終了(&S) Alt+Q Buttons ボタン Whether to hide the left button group on the main window メインウィンドウ左ã®ãƒœã‚¿ãƒ³ã‚°ãƒ«ãƒ¼ãƒ—ã‚’éš ã™ã‹ã©ã†ã‹ Hide main window &Left buttons メインウィンドウ左å´ã®ãƒœã‚¿ãƒ³ã‚’éš ã™(&L) Alt+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) Defaults 既定 &Base font size: 基本フォントサイズ(&B): Base application font size (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) Periods/&Buffer ピリオド/ãƒãƒƒãƒ•ァー(&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? ã„ãã¤ã‹ã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ 変更をé©ç”¨ã—ã¾ã™ã‹? qjackctlSocketForm Socket - JACK Audio Connection Kit ソケット - -JACK Audio Connection Kit &Socket ソケット(&S) &Name (alias): åå‰(エイリアス)(&N): Socket name (an alias for client name) ソケットå(クライアントåã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹) Client name (regular expression) クライアントå (æ­£è¦è¡¨ç¾) Add plug to socket plug list プラグをソケットプラグリストã«è¿½åŠ ã—ã¾ã™ Add P&lug プラグ追加(&L) Alt+L &Plug: プラグ(&P): Port name (regular expression) ãƒãƒ¼ãƒˆå (æ­£è¦è¡¨ç¾) Socket plug list ソケットプラグã®ãƒªã‚¹ãƒˆ Socket Plugs / Ports ソケットプラグ/ãƒãƒ¼ãƒˆ Edit currently selected plug é¸æŠžã—ã¦ã„るプラグを編集ã—ã¾ã™ &Edit 編集(&E) Alt+E Remove currently selected plug from socket plug list ソケットプラグリストã‹ã‚‰é¸æŠžã—ã¦ã„るプラグを外ã—ã¾ã™ &Remove 削除(&R) Alt+R &Client: クライアント(&C): Move down currently selected plug in socket plug list ソケットプラグリストã§é¸æŠžã—ã¦ã„るプラグをã²ã¨ã¤ä¸‹ã«ç§»å‹•ã—ã¾ã™ &Down 下ã¸(&D) Alt+D Move up current selected plug in socket plug list ソケットプラグリストã§é¸æŠžã—ã¦ã„るプラグをã²ã¨ã¤ä¸Šã«ç§»å‹•ã—ã¾ã™ &Up 上ã¸(&U) Alt+U Enforce only one exclusive cable connection 排他的ãªã‚±ãƒ¼ãƒ–ル接続を強制ã—ã¾ã™ E&xclusive 排他的(&X) Alt+X &Forward: 転é€(&F): Forward (clone) all connections from this socket ã“ã®ã‚½ã‚±ãƒƒãƒˆã‹ã‚‰ã™ã¹ã¦ã®æŽ¥ç¶šã‚’転é€(クローン)ã—ã¾ã™ Type タイプ Audio socket type (JACK) オーディオソケットタイプ(JACK) &Audio オーディオ(&A) Alt+A MIDI socket type (JACK) MIDIソケットタイプ(JACK) &MIDI Alt+M MIDI socket type (ALSA) MIDIソケットタイプ(ALSA) AL&SA Alt+S Plugs / Ports プラグ/ãƒãƒ¼ãƒˆ Error エラー A socket named "%1" already exists. ソケットå "%1" ã¯ã™ã§ã«å­˜åœ¨ã—ã¾ã™ã€‚ Warning 警告 Some settings have been changed. Do you want to apply the changes? ã„ãã¤ã‹ã®è¨­å®šãŒå¤‰æ›´ã•れã¾ã—ãŸã€‚ 変更をé©ç”¨ã—ã¾ã™ã‹? Add Plug プラグを追加 Edit 編集 Remove 削除 Move Up 上ã¸ç§»å‹• Move Down 下ã¸ç§»å‹• (None) (ãªã—) qjackctlSocketList Output 出力 Input 入力 Socket ソケット <New> - %1 <æ–°è¦> - %1 Warning 警告 %1 about to be removed: "%2" Are you sure? %1を削除ã—よã†ã¨ã—ã¦ã„ã¾ã™: "%2" よã‚ã—ã„ã§ã™ã‹? %1 <Copy> - %2 %1 <コピー> - %2 qjackctlSocketListView Output Sockets / Plugs 出力ソケット / プラグ Input Sockets / Plugs 入力ソケット / プラグ qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_es.ts0000644000175000001440000000012412113441137022546 xustar000000000000000027 mtime=1361986143.407051 27 atime=1364826685.022395 30 ctime=1364826685.033395504 qjackctl-0.3.10/src/translations/qjackctl_es.ts0000644000175000001440000036503712113441137022053 0ustar00rncbcusers00000000000000 QObject (default) 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). Qt: %1 Qt: %1 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). qjackctlAboutForm About Qt Acerca de QT &Close &Cerrar Alt+C Alt+C Version Versión Build Build Debugging option enabled. Depuración habilitada. System tray disabled. Bandeja del sistema deshabilitada. Transport status control disabled. Reporte del estado de transporte deshabilitado. Realtime status disabled. Estado de Realtime deshabilitado. XRUN delay status disabled. Reporte del retardo de XRUN deshabilitado. Maximum delay status disabled. Reporte del retardo máximo deshabilitado. ALSA/MIDI sequencer support disabled. Soporte para secuenciador ALSA/MIDI deshabilitado. Website Website This program is free software; you can redistribute it and/or modify it Este programa es software libre; Usted puede redistribuirlo y/o modificarlo under the terms of the GNU General Public License version 2 or later. bajo los términos de la Licencia Pública General GNU versión 2 o posterior. JACK MIDI support disabled. Soporte MIDI en JACK deshabilitado. About QjackCtl Acerca de QjackCtl JACK Port aliases support disabled. Soporte para alias de los puertos de JACK deshabilitado. D-Bus interface support disabled. Soporte para la interfaz D-Bus deshabilitado. JACK Session support disabled. Soporte para sesiones de JACK deshabilitado. Using: JACK %1 Usando: JACK %1 qjackctlClientListView &Connect &Conectar Alt+C Connect Alt+C &Disconnect &Desconectar Alt+D Disconnect Alt+D Disconnect &All Desconectar &Todo Alt+A Disconect All Alt+T Re&name Cambiar &Nombre Alt+N Rename Alt+N &Refresh &Refrescar Alt+R Refresh Alt+R Readable Clients / Output Ports Puertos de Salida / Clientes Leíbles Writable Clients / Input Ports Puertos de Entrada / Clientes Escribibles qjackctlConnect Warning Advertencia Yes Si No No This will suspend sound processing from all client applications. Are you sure? Esto suspenderá el procesamiento de sonido de todas las aplicaciones. Está seguro? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Conexiones - JACK Audio Connection Kit Audio Audio &Connect &Conectar Alt+C Alt+C Connect currently selected ports Conectar los puertos seleccionados &Disconnect &Desconectar Alt+D Alt+D Disconnect currently selected ports Desconectar los puertos seleccionados Disconnect &All Desconectar &Todo Alt+A Alt+T Disconnect all currently connected ports Desconectar todos los puertos seleccionados &Refresh &Refrescar Alt+R Alt+R Refresh current connections view Refrescar la vista actual de conexiones MIDI MIDI Warning Advertencia Save Guardar Discard Descartar cambios Cancel Cancelar 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 Expand all client ports Expandir todos los puertos de los clientes E&xpand All E&xpandir Todos Alt+X Alt+X 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 qjackctlMainForm &Quit &Salir Alt+Q Alt+S Quit processing and exit Terminar procesamiento y salir &Start &Iniciar Alt+S Alt+I Start the JACK server Iniciar el servidor JACK S&top &Detener Alt+T Alt+D Stop the JACK server Detener el servidor JACK St&atus &Estado Show/hide the extended status window Mostrar / ocultar la ventana de estado detallado Ab&out... Ace&rca... Show information about this application Mostrar información sobre esta aplicación S&etup... Se&tup... Alt+E Alt+T Show settings and options dialog Mostrar el diálogo de opciones y preferencias &Messages &Mensajes Alt+M Alt+M Show/hide the messages log window Mostrar / ocultar la ventana de mensajes Patch&bay Patch&bay Alt+B Alt+B Show/hide the patchbay editor window Mostrar / ocultar el editor de patchbay &Connect &Conexiones Alt+C Alt+C 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 Backward transport Retroceder transporte Alt+F Alt+L Forward transport Avanzar transporte (Alt+L) Alt+R Alt+K Rewind transport Rebobinar transporte (Alt+K) Alt+U Alt+. Stop transport rolling Detener el transporte (Shift+Espacio) Alt+P Alt+N Start transport rolling Iniciar el transporte (Espacio) Warning Advertencia Terminate Terminar Cancel Cancelar successfully satisfactoriamente with exit status=%1 con estado %1 Stop Detener Kill Matar Could not load preset "%1". Retrying with default. No se pudo cargar el preset "%1". Probando con el predeterminado. Could not load default preset. Sorry. Lo siento. 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. Lo siento. 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" in the context menu of the system tray icon. El programa seguirá corriendo en la bandeja del sistema. Para terminarlo, por favor eljia "Salir" 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). D-BUS: JACK server is starting... D-BUS: Iniciando servidor JACK... D-BUS: JACK server could not be started. Sorry D-BUS: El servidor JACK no puede iniciarse. Disculpa D-BUS: JACK server is stopping... D-BUS: Deteniendo el servidor JACK... D-BUS: JACK server could not be stopped. Sorry D-BUS: El servidor JACK no puede detenerse. 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). D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: El servidor JACK se ha detenido (%1 aka jackdbus). Error Error Transport BBT (bar:beat.ticks) BBT del transporte ( bar:beat:ticks ) 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 Could not load active patchbay definition. Disabled. No se puede cargar el archivo con el esquema del patchbay activo. Deshabilitándolo. 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. 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 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. D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) OK OK 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. No se puede abrir el secuenciador ALSA como cliente El patchbay MIDI de ALSA no estará disponible. The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. El programa seguirá corriendo en la bandeja del sistema. Para terminarlo, por favor seleccione "Salir" en el menú del ítem en la bandeja del sistema. JACK is currently running. Do you want to terminate the JACK audio server? JACK se está ejecutando actualmente. Desea terminar el servidor de audio JACK? Could not start JACK. Maybe JACK audio server is already started. No puede iniciarse JACK. Quizás el servidor de audio JACK ya haya sido iniciado. Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Algunas aplicaciones de audio están activas y conectadas. 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... 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: %1 -> %2 Do you want to remove the patchbay connection? Una definición de patchbay está activa actualmente, y es probable rehacer esta conexion: %1 -> %2 Desea remover la conexion? Remove Remover Ignore Ignorar 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. No puede conectarse al servidor JACK como cliente. - %1 Por favor revise la ventana de mensajes para mas información. %1 (%2%) %1 % %1 Hz %1 frames %1 cuadros %1 msec &Presets &Presets &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 Alt+O Alt+O Shift+Space Space Set&up... Set&up... S&ession S&esion &Load... &Abrir... &Save... &Guardar... Save and &Quit... Guardar y &Salir... Save &Template... Guardar Plan&tilla... &Refresh &Refrescar 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" Disabled. No se puede cargar el patchbay. "%1" Ha sido deshabilitado. &Versioning &Versiones Re&fresh Re&frescar %1 (%2%, %3 xruns) Transport BBT (bar.beat.ticks) qjackctlMessagesForm Messages - JACK Audio Connection Kit Mensajes de JACK Audio Connection Kit Logging stopped --- %1 --- Registro detenido --- %1 --- Logging started --- %1 --- Registro iniciado --- %1 --- Messages output log Registro de mensajes qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Mensajes / Estado - JACK Audio Connection Kit &Messages &Mensajes Messages log Registro de mensajes Messages output log Registro de mensajes &Status &Estado Status information Información de estado Statistics since last server startup Estadísticas desde el último inicio de JACK Description Descripción Value Valor Reset XRUN statistic values Reiniciar estadísticas de XRUN Re&set re&Iniciar Alt+S Refresh XRUN statistic values Refrescar estadísticas de XRUN &Refresh &Refrescar Alt+R Server name Nombre del servidor Server state Estado del Servidor DSP Load Uso de CPU del DSP Sample Rate Frecuencia de muestreo Buffer Size Tamaño de Buffer Realtime Mode Modo Realtime Transport state Estado del transporte Transport Timecode Código de tiempo del transporte Transport BBT BBT del Transporte Transport BPM BPM del transporte XRUN count since last server startup XRUNs desde el último inicio XRUN last time detected Fecha de la última XRUN detectada XRUN last Última XRUN XRUN maximum Máximo de XRUN XRUN minimum Mínimo de XRUN XRUN average Promedio de XRUN XRUN total Total de XRUN Maximum scheduling delay Máximo retardo de programación(scheduling) Time of last reset Tiempo desde el último reset Logging stopped --- %1 --- Registro detenido --- %1 --- Logging started --- %1 --- Registro iniciado --- %1 --- qjackctlPatchbay Warning Advertencia Yes Si No No This will disconnect all sockets. Are you sure? Esto desconectará todos los sockets. Está seguro? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Patchbay - JACK Audio Connection Kit &New &Nueva Alt+N Alt+N Create a new patchbay profile &Load... &Abrir... Alt+L Alt+A Load patchbay profile Cargar perfil de patchbay &Save... &Salvar... Alt+S Alt+S Save current patchbay profile Salvar el perfil actual del patchbay Acti&vate Acti&var Alt+V Alt+V Toggle activation of current patchbay profile Conmutar la activación del esquema actual &Connect &Conectar Alt+C Alt+C Connect currently selected sockets Conectar los puertos seleccionados &Disconnect &Desconectar Alt+D Alt+D Disconnect currently selected sockets Desconectar los puertos seleccionados Disconnect &All Desconectar &Todo Alt+A Alt+T Disconnect all currently connected sockets Desconectar los socket seleccionados &Refresh &Refrescar Alt+R Alt+R Refresh current patchbay view Refrescar la vista actual Down Bajar Move currently selected output socket down one position Mover el socket de salida seleccionado una posición hacia abajo Add... Añadir... Create a new output socket Crear un nuevo socket de salida Edit... Editar... Edit currently selected input socket properties Editar las propiedades del socket de entrada seleccionado Up Subir Move currently selected output socket up one position Mover el socket de salida seleccionado una posición hacia arriba Remove Remover Remove currently selected output socket Remover el socket de salida seleccionado Copy... Copiar... Duplicate (copy) currently selected output socket Duplicar (copiar) el socket de salida seleccionado Remove currently selected input socket Remover el socket de entrada seleccionado Duplicate (copy) currently selected input socket Duplicar (copiar) el socket de entrada seleccionado Create a new input socket Crear un nuevo socket de entrada Edit currently selected output socket properties Editar las propiedades del socket de salida seleccionado Warning Advertencia Save Salvar Discard Descartar cambios Cancel Cancelar active activa New Patchbay definition Nuevo esquema de patchbay Yes Si No No 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" Do you want to save the changes? La definición del patchbay ha cambiado: "%1" Desea guardar los cambios? %1 [modified] %1 [modificado] Untitled%1 SinNombre%1 Error Error Could not load patchbay definition file: "%1" No se puede cargar el archivo con el esquema del patchbay: "%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 una instantánea de las conexiones actuales? Current (recent) patchbay profile(s) Perfil actual (reciente) de patchbay Expand all items Expandir todos los elementos E&xpand All E&xpandir Todos Alt+X Alt+X 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) qjackctlSessionForm Session - JACK Audio Connection Kit Sesión - JACK Audio Connection Kit Load session Cargar sesión &Load... &Abrir... Recent session Sesión reciente &Recent &Reciente Save session Guardar sesión &Save... &Guardar... Save Guardar Save and Quit Guardar y Salir Save Template Guardar plantilla Client / Ports Cliente / Puertos UUID Command 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" No se encontró una sesión en esta carpeta: "%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" Are you sure to overwrite the existing session? Una sesión ya existe en esta carpeta: "%1" Está seguro de querer sobreescribirla? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Esta carpeta existe y no está vacía: "%1" Está seguro de sobreescribir esta carpeta? %1: saving session... %1: guardando sesión... %1: save session %2. %: guardar sesión %2. Update session Actualizar sesión &Refresh &Refrescar Save and &Quit... Guardar y &Salir... Save &Template... Guardar Plan&tilla... &Save &Salvar Save session versioning Guardar las versiones de la sesión &Versioning &Versiones Re&fresh Re&frescar Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit &Editar Remove infra-client &Remove &Remover Re&move New Client qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Configuración - JACK Audio Connection Kit Settings Configuraciones Preset &Name: &Nombre del Preset: (default) Settings preset name Preset con las configuraciones &Save &Salvar Alt+S Alt+S Save settings as current preset name Salvar configuraciones en el preset actual &Delete &Eliminar Alt+D Alt+E Delete current settings preset Eliminar el preset con la configuración actual Server Servidor Server &Path: &Ruta del servidor: jackstart jackstart jackd jackd jackd-realtime jackd-realtime The JACK Audio Connection Kit sound server path Ruta hacia el servidor de audio JACK Driv&er: Dri&ver: dummy dummy oss oss alsa alsa portaudio portaudio coreaudio coreaudio Parameters 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 Number o microseconds to wait between engine processes (dummy) Número de microsegundos a esperar entre procesos (dummy) 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 miliseconds Establece el límite de tiempo de los clientes en milisegundos &Realtime Tiempo &Real Alt+R Alt+R Use realtime scheduling Usar prioridad(scheduling) de tiempo real No Memory Loc&k No b&loquear memoria Alt+K Alt+L 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 Alt+U Alt+D 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 Alt+F Alt+T 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 Alt+M Alt+M Provide output monitor ports Proveer puertos para monitoreo de la salida Force &16bit Forzar &16bit Alt+1 Alt+1 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 Alt+O Alt+O Enable hardware monitoring of capture ports Habilitar monitoreo por hardware de los puertos de captura H/&W Meter Monitoreo por H/&W Alt+W Alt+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 Alt+I Alt+I Ignore hardware period/buffer size Ignorar el tamaño de bufer / período del hardware &Output Device: Dispositiv&o de salida: &Output Channels: Númer&o de canales 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: &Input Latency: Latenc&ia de la entrada: 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 > > Select output device for playback Seleccionar dispositivo de salida para reproducción /dev/dsp Alternate input device for capture Dispositivo de entrada alternativo para captura &Output Latency: Latencia de la sal&ida: 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 &Input Channels: &Canales de entrada: Select input device for capture Seleccionar dispositivo de entrada para captura Select PCM device name Seleccionar dispositivo PCM 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 Alt+V Alt+V Whether to give verbose output on messages Mostrar información mas detallada en los mensajes Start De&lay (secs): Retardo Inicia&l (segs): 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: 0 0 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: Alt+T Alt+T 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 Alt+C Alt+C 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 &Ignore first XRUN occurrence on statistics &Ignorar las primeras XRUN en las estadísticas Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) Ignorar las XRUN producidas durante el inicio del servidor (suele suceder en versiones anteriores a la 0.80.0 ) Connections Conexiones 5 5 10 10 20 20 30 30 60 60 120 120 Time in seconds between each auto-refresh cycle Tiempo en segundos entre cada ciclo de auto - refresco 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 &Auto refresh connections Patchbay, every (secs): &Auto refrescar las conexiones del Patchbay, cada (segs): Alt+A Alt+A Whether to refresh the connections patchbay automatically Automáticamente refresca el patchbay de conexiones Activate &Patchbay persistence: Activar &Persistencia del patchbay: Alt+P Alt+P 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) Alt+B Alt+B Elapsed time since last &Reset Tiempo transcurrido desde el último &Reset Elapsed time since last &XRUN Tiempo transcurrido desde la última &XRUN Alt+X Alt+X 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 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 Alt+N Alt+P 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 Alt+Z Alt+Z 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 Alt+E Alt+E Whether to enable the system tray icon Permitir íconos en la bandeja del sistema &Delay window positioning at startup D&emorar la reubicación de las ventanas al iniciar Whether to delay window positioning at application startup Esperar antes de ubicar las ventanas en su última posición al iniciar la aplicación 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 OK OK Cancel Cancelar Warning Advertencia Save Salvar Discard Descartar cambios 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 Apply Aplicar Some settings have been changed: "%1" Do you want to save the changes? Algunas configuraciones han cambiado: "%1" Desea guardarlas? Delete preset: "%1" Are you sure? Borrar preset: "%1" 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 seq &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. &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 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 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 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 Alt+L 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 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 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 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) Alt+Q Alt+S Whether to stop JACK audio server on application exit S&top JACK audio server on application exit qjackctlSocketForm OK OK Cancel Cancelar &Socket &Socket &Name (alias): &Nombre (alias): Socket name (an alias for client name) Nombre del socket (un alias para el nombre de cliente) Client name (regular expression) Nombre del cliente (expresión regular) Add P&lug Añadir p&Lug Alt+L Alt+L Add plug to socket plug list Añadir plug a la lista de sockets &Plug: &Plug: Port name (regular expression) Nombre del puerto (expresión regular) Socket Plugs / Ports Socket Plug / Puerto Socket plug list Lista de socket tipo plug &Edit &Editar Alt+E Alt+E &Remove &Remover Alt+R Alt+R Remove currently selected plug from socket plug list Remover el plug seleccionado de la lista &Client: &Cliente: &Down &Bajar Alt+D Alt+B &Up &Subir Alt+U Alt+S E&xclusive E&xclusivo Alt+X Alt+X Enforce only one exclusive cable connection Permitir una conexión únicamente Type Tipo &Audio A&udio Alt+A Alt+U Audio socket type (JACK) Socket tipo audio (JACK) &MIDI &MIDI Alt+M Alt+M MIDI socket type (ALSA) Socket tipo MIDI (ALSA) Plugs / Ports Plugs / Puertos Error Error A socket named "%1" already exists. Un socket llamado "%1" ya existe. Add Plug Añadir Plug Remove Remover Edit Editar Move Up Subir Move Down Bajar Warning Advertencia Some settings have been changed. Do you want to apply the changes? Algunas configuraciones han cambiado. Desea aplicar los cambios? Apply Aplicar Discard Descartar (None) (Ninguno) Socket - JACK Audio Connection Kit Sockets - JACK Audio Connection Kit Edit currently selected plug Editar el plug seleccionado Move down currently selected plug in socket plug list Mover hacia abajo en la lista el plug seleccionado Move up current selected plug in socket plug list Mover hacia arriba en la lista el plug seleccionado &Forward: &Avanzar: Forward (clone) all connections from this socket Reenviar (clonar) todas las conexiones desde este socket MIDI socket type (JACK) Tipo de socket MIDI (JACK) AL&SA AL&SA Alt+S qjackctlSocketList Output Salida Input Entrada Socket Socket Warning Advertencia Yes Si No No <New> - %1 <Nuevo> - %1 %1 about to be removed: "%2" Are you sure? A punto de remover %1: "%2" Está seguro? %1 <Copy> - %2 %1 <Copia> - %2 qjackctlSocketListView Output Sockets / Plugs Sockets de Salida / Plugs Input Sockets / Plugs Sockets de Entrada / Plugs qjackctlStatusForm Status - JACK Audio Connection Kit Estado - JACK Audio Connection Kit Description Descripción Value Valor Statistics since last server startup Estadísticas desde el último inicio de JACK Re&set re&Iniciar Alt+S Alt+I Reset XRUN statistic values Reiniciar estadísticas de XRUN &Refresh &Refrescar Alt+R Alt+R Refresh XRUN statistic values Refrescar estadísticas de XRUN Time of last reset Tiempo desde el último reset Maximum scheduling delay Máximo retardo de programación(scheduling) XRUN count since last server startup XRUNs desde el último inicio XRUN total Total de XRUN XRUN average Promedio de XRUN XRUN minimum Mínimo de XRUN XRUN maximum Máximo de XRUN XRUN last Última XRUN XRUN last time detected Fecha de la última XRUN detectada Transport state Estado del transporte Transport BPM BPM del transporte Transport BBT BBT del Transporte Transport Timecode Código de tiempo del transporte Realtime Mode Modo Realtime Buffer Size Tamaño de Buffer Sample Rate Frecuencia de muestreo Server state Estado del Servidor DSP Load Uso de CPU del DSP Server name Nombre del servidor qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_cs.ts0000644000175000001440000000012412113664610022547 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826684.943395 30 ctime=1364826684.979395503 qjackctl-0.3.10/src/translations/qjackctl_cs.ts0000644000175000001440000056473312113664610022060 0ustar00rncbcusers00000000000000 QObject (default) (výchozí) 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í). Qt: %1 Qt: %1 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). qjackctlAboutForm About QjackCtl O QjackCtl &Close &Zavřít Alt+C Alt+C About Qt O Qt Version Verze Build Sestavení Using: JACK %1 Používá se: JACK %1 Debugging option enabled. Povolena volba pro ladÄ›ní. System tray disabled. Zakázána oznamovací oblast. Transport status control disabled. Zakázáno ovládání stavu pÅ™edání. Realtime status disabled. Zakázán stav provádÄ›ní ve skuteÄném Äase. XRUN delay status disabled. Zakázán stav zpoždÄ›ní XRUN. Maximum delay status disabled. Zakázán stav nejvÄ›tšího zpoždÄ›ní. JACK MIDI support disabled. JACK MIDI není podporován. JACK Session support disabled. Podpora pro sezení JACK byla zakázána. ALSA/MIDI sequencer support disabled. ALSA/MIDI Å™adiÄ (sequencer) není podporován. Website Stránky This program is free software; you can redistribute it and/or modify it Tento program je svobodným programem. Můžete jej šířit a/nebo upravit under the terms of the GNU General Public License version 2 or later. za podmínek GNU General Public License ve verzi 2 nebo pozdÄ›jší. JACK Port aliases support disabled. Podpora pro pÅ™ezdívky přípojek JACK zakázána. D-Bus interface support disabled. Podpora pro rozhraní D-Bus zakázána. qjackctlClientListView Readable Clients / Output Ports ÄŒitelné přípojky pro klienty/výstupy Writable Clients / Input Ports Zapisovatelné přípojky pro klienty/výstupy &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 Re&name &PÅ™ejmenovat Alt+N Rename Alt+N &Refresh &Obnovit Alt+R Refresh Alt+R qjackctlConnect Warning Varování This will suspend sound processing from all client applications. Are you sure? Tímto se pozastaví zpracování zvuku u vÅ¡ech klientských aplikací. Jste si jistý? Yes Ano No Ne qjackctlConnectionsForm Connections - JACK Audio Connection Kit Spojení - JACK Audio Connection Kit Audio Zvuk Connect currently selected ports Spojit nyní vybrané přípojky &Connect &Spojit Alt+C Alt+C Disconnect currently selected ports Rozpojit nyní vybrané přípojky &Disconnect &Rozpojit Alt+D Alt+D Disconnect all currently connected ports Rozpojit vÅ¡echny nyní spojené přípojky Disconnect &All &Rozpojit vÅ¡e Alt+A Alt+A Expand all client ports Rozbalit vÅ¡echny klientské přípojky E&xpand All Rozbalit &vÅ¡e Alt+X Alt+X Refresh current connections view Obnovit pohled na nynÄ›jší spojení &Refresh &Obnovit Alt+R Alt+R MIDI JACK-MIDI 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? Save Uložit Discard Odmítnout Cancel ZruÅ¡it 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 QjackCtl QjackCtl Quit processing and exit UkonÄit zpracování signálu a ukonÄit program &Quit &UkonÄit Alt+Q ALT+Q Start the JACK server Spustit server JACK &Start &Spustit Alt+S Alt+S Stop the JACK server Zastavit server JACK S&top &Zastavit Alt+T Alt+T Show/hide the extended status window Ukázat/skrýt rozšířené stavové okno St&atus &Stav Show information about this application Ukázat informace o této aplikaci Ab&out... &O... Set&up... &Nastavení... Alt+B Alt+B Show settings and options dialog Ukázat dialogové okno pro nastavení a volby S&etup... &Nastavení... Alt+E Alt+E Show/hide the messages log window Ukázat/skrýt okno se zápisy pro hlášení &Messages &Hlášení Alt+M Alt+M 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 Alt+C Alt+C 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í Backward transport PÅ™edání zpÄ›t &Backward &ZpÄ›t Forward transport PÅ™edání dopÅ™edu &Forward &DopÅ™edu Alt+F Alt+F Rewind transport PÅ™edání pÅ™etoÄit zpÄ›t &Rewind &PÅ™etoÄit zpÄ›t Alt+R Alt+R Stop transport rolling Zastavit chod pÅ™edání Pa&use &Pozastavit Alt+U Alt+U Start transport rolling Spustit chod pÅ™edání &Play &PÅ™ehrát Alt+P Alt+P Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. NepodaÅ™ilo se otevřít Å™adiÄ (sekvencer) ALSA jako klienta. 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 The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. Program poběží dále viditelný jako symbol v oznamovací Äásti panelu. Pro ukonÄení programu zvolte, prosím, "UkonÄit" v nabídce souvisejících kroků u symbolu v oznamovací Äásti panelu. Warning Varování JACK is currently running. Do you want to terminate the JACK audio server? Server JACK nyní běží. Chcete ukonÄit zvukový server JACK? Terminate UkonÄit Cancel ZruÅ¡it successfully úspěšnÄ› with exit status=%1 s vrácenou hodnotou = %1 Could not start JACK. Maybe JACK audio server is already started. JACK se nepodaÅ™ilo spustit. Možná je server JACK už spuÅ¡tÄ›n. Stop Zastavit Kill UkonÄit Could not load preset "%1". Retrying with default. Nastavení "%1" se nepodaÅ™ilo nahrát. Zkouší se znovu s výchozím pÅ™ednastavením. Could not load default preset. Sorry. NepodaÅ™ilo se nahrát výchozí pÅ™ednastavení. 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 D-BUS: Server JACK se nepodaÅ™ilo spustit. Promiňte JACK is starting... JACK se spouÅ¡tí... Some client audio applications are still active and connected. Do you want to stop the JACK audio server? NÄ›které z klientských zvukových aplikací jsou stále Äinné a spojené. Chcete zastavit zvukový server JACK? JACK is stopping... JACK se zastavuje... Shutdown script... Skript pro zastavení chodu... 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 D-BUS: Server JACK se nepodaÅ™ilo zastavit. 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 BBT (bar:beat.ticks) PÅ™edání BBT (takt:doba.tiknutí - bar:beat.ticks) Transport time code PÅ™edání Äasového kódu Elapsed time since last reset ÄŒas uplynulý od posledního znovunastavení Elapsed time since last XRUN ÄŒas uplynulý od posledního XRUN Could not load active patchbay definition. Disabled. NepodaÅ™ilo se nahrát vymezení aktivní zapojovací desky. Zakázáno. Patchbay activated. Zapojovací deska uvedena do chodu. Patchbay deactivated. Zapojovací deska vyÅ™azena z provozu. Statistics reset. Nastavit znovu statistiku. 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. NepodaÅ™ilo se spustit JACK. 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: %1 -> %2 Do you want to remove the patchbay connection? Vymezení zapojovací desky je nyní aktivní, což pravdÄ›podobnÄ› znamená pÅ™edÄ›lat toto spojení: %1 -> %2 Chcete odstranit spojení zapojovací desky? Remove Odstranit Ignore PÅ™ehlížet 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. Program poběží dále v oznamovací Äásti panelu. Pro ukonÄení programu vyberte, prosím, "UkonÄit" v související nabídce vyskakující z ikony v oznamovací Äásti panelu. Transport BBT (bar.beat.ticks) Could not load active patchbay definition. "%1" Disabled. NepodaÅ™ilo se nahrát vymezení aktivní zapojovací desky. "%1" Zakázáno. 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. NepodaÅ™ilo se pÅ™ipojit k serveru JACK jako klient. - %1 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 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 &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... &Refresh &Obnovit &Connections &Spojení Patch&bay &Zapojovací deska &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. D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: Nastavit hodnotu parametru SetParameterValue('%1', '%2'): %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: Nastavit znovu hodnotu parametru ResetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) D-BUS: Získat hodnotu parametru GetParameterValue('%1'): %2. (%3) OK OK Some settings will be only effective the next time you start this program. NÄ›která nastavení se projeví až tehdy, když příštÄ› spustíte tento program. Alt+A Alt+A Alt+O Alt+O Shift+Space Shift+Mezerník Space Mezerník qjackctlMessagesForm Messages - JACK Audio Connection Kit Hlášení - JACK Audio Connection Kit Messages output log Zápis hlášení o výstupu Logging stopped --- %1 --- Zápis zastaven --- %1 --- Logging started --- %1 --- Zápis spuÅ¡tÄ›n --- %1 --- qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Hlášení/Stav - JACK Audio Connection Kit &Messages &Hlášení Messages log Zápis hlášení Messages output log Zápis hlášení o výstupu &Status &Stav Status information Informace o stavu Statistics since last server startup Statistika od posledního spuÅ¡tÄ›ní serveru Description Popis Value Hodnota Reset XRUN statistic values Nastavit znovu údaje ve statistice XRUN Re&set &Nastavit znovu Alt+S Alt+S Refresh XRUN statistic values Obnovit údaje ve statistice XRUN &Refresh &Obnovit Alt+R Alt+R Server name Název serveru Server state Stav serveru DSP Load Zatížení DSP Sample Rate Vzorkovací kmitoÄet Buffer Size Velikost vyrovnávací pamÄ›ti Realtime Mode Režim skuteÄného Äasu Transport state Stav pÅ™edání Transport Timecode PÅ™edání Äasového kódu Transport BBT PÅ™edání BBT Transport BPM PÅ™edání BPM XRUN count since last server startup PoÄet XRUN od posledního spuÅ¡tÄ›ní serveru XRUN last time detected ÄŒas posledního zjiÅ¡tÄ›ní XRUN XRUN last Poslední XRUN XRUN maximum NejvÄ›tší poÄet XRUN XRUN minimum Nejmenší poÄet XRUN XRUN average PrůmÄ›rný poÄet XRUN XRUN total Celkový poÄet XRUN Maximum scheduling delay NejvÄ›tší zpoždÄ›ní Äasu Time of last reset ÄŒas posledního znovunastavení Logging stopped --- %1 --- Zápis zastaven --- %1 --- Logging started --- %1 --- Zápis spuÅ¡tÄ›n --- %1 --- qjackctlPatchbay Warning Varování This will disconnect all sockets. Are you sure? Tento krok odpojí vÅ¡echny zásuvky. Jste si jistýr? Yes Ano No Ne qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Zapojovací deska - JACK Audio Connection Kit Move currently selected output socket down one position Posunout nyní vybrané výstupní zásuvky dolů o jedno místo Down Dolů Create a new output socket VytvoÅ™it novou výstupní zásuvku Add... PÅ™idat... Edit currently selected input socket properties Upravit vlastnosti nyní vybrané vstupní zásuvky Edit... Upravit... Move currently selected output socket up one position Posunout nyní vybrané výstupní zásuvky nahoru o jedno místo Up Nahoru Remove currently selected output socket Odstranit nyní vybranou výstupní zásuvku Remove Odstranit Duplicate (copy) currently selected output socket Zdvojit (kopírovat) nyní vybranou výstupní zásuvku Copy... Kopírovat... Remove currently selected input socket Odstranit nyní vybranou vstupní zásuvku Duplicate (copy) currently selected input socket Zdvojit (kopírovat) nyní vybranou vstupní zásuvku Create a new input socket VytvoÅ™it novou vstupní zásuvku Edit currently selected output socket properties Upravit vlastnosti nyní vybrané výstupní zásuvky Connect currently selected sockets Spojit nyní vybrané zásuvky &Connect &Spojit Alt+C Alt+C Disconnect currently selected sockets Odpojit nyní vybrané zásuvky &Disconnect &Odpojit Alt+D Alt+D Disconnect all currently connected sockets Odpojit vÅ¡echny nyní spojené zásuvky Disconnect &All &Odpojit vÅ¡e Alt+A Alt+A Expand all items Rozbalit vÅ¡echny položky E&xpand All Rozbalit &vÅ¡e Alt+X Alt+X Refresh current patchbay view Obnovit nynÄ›jší pohled na zapojovací desku &Refresh &Obnovit Alt+R Alt+R Create a new patchbay profile VytvoÅ™it nový profil zapojovací desky &New &Nový Alt+N Alt+N Load patchbay profile Nahrát profil zapojovací desky &Load... &Nahrát... Alt+L Alt+L Save current patchbay profile Uložit nynÄ›jší profil zapojovací desky &Save... &Uložit... Alt+S Alt+S Current (recent) patchbay profile(s) NynÄ›jší (naposledy použité) profil(y) zapojovací desky Toggle activation of current patchbay profile PÅ™epnout spuÅ¡tÄ›ní nynÄ›jšího profilu zapojovací desky Acti&vate &Spustit Alt+V Alt+V Warning Varování The patchbay definition has been changed: "%1" Do you want to save the changes? Vymezení zapojovací desky bylo zmÄ›nÄ›no: "%1" Chcete uložit zmÄ›ny? Save Uložit Discard Odmítnout Cancel ZruÅ¡it %1 [modified] %1 [zmÄ›nÄ›n] Untitled%1 Bez názvu%1 Error Chyba Could not load patchbay definition file: "%1" NepodaÅ™ilo se nahrát soubor s vymezením zapojovací desky: "%1" Could not save patchbay definition file: "%1" NepodaÅ™ilo se uložit soubor s vymezením zapojovací desky: "%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í? Yes Ano No Ne 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ý 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 qjackctlSessionForm Session - JACK Audio Connection Kit Sezení - JACK Audio Connection Kit Load session Nahrát sezení &Load... &Nahrát... Recent session Naposledy otevÅ™ené sezení &Recent &Naposledy otevÅ™ené Save session Uložit sezení Save session versioning Uložit verzování sezení &Versioning &Verzování Re&fresh Ob&novit Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit &Upravit Remove infra-client Re&move &Remove &Odstranit &Save... &Uložit... Save Uložit Save and Quit Uložit a ukonÄit Save Template Uložit jako pÅ™edlohu Update session Obnovit sezení &Refresh &Obnovit Client / Ports Klient/Přípojky UUID UUID Command Příkaz &Save &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" Sezení se v této složce nepodaÅ™ilo nalézt: "%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" Are you sure to overwrite the existing session? V této složce již existuje sezení: "%1" Jste si jistý, že chcete pÅ™epsat stávající sezení? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Tato složka již existuje a není prázdná: "%1" 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 Save and &Quit... Uložit a &ukonÄit... Save &Template... Uložit jako &pÅ™edlohu... qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Nastavení - JACK Audio Connection Kit Settings Nastavení Preset &Name: &Název pÅ™ednastavení: Settings preset name Název pro pÅ™ednastavení nastavení (default) (výchozí) Save settings as current preset name Uložit nastavení s nynÄ›jším názvem pÅ™ednastavení &Save &Uložit Alt+S Alt+S Delete current settings preset Smazat pÅ™ednastavení nynÄ›jšího nastavení &Delete &Smazat Alt+D Alt+D Server Server Server &Path: &Cesta k serveru: The JACK Audio Connection Kit sound server path Cesta ke zvukovému serveru JACK Audio Connection Kit jackd jackd jackdmp jackdmp jackstart jackstart jackd-realtime jackd-realtime Driv&er: &OvladaÄ: The audio backend driver interface to use Rozhraní ovladaÄe k zadní Äásti zvuku, které se bude používat dummy dummy sun sun oss oss alsa alsa portaudio portaudio coreaudio coreaudio freebob freebob firewire firewire Parameters 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 seq seq Start De&lay (secs): &ZpoždÄ›ní spuÅ¡tÄ›ní (s): 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 0 0 Use realtime scheduling Použít zpracování ve skuteÄném Äase &Realtime &SkuteÄný Äas Alt+R Alt+R 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ěť Alt+K Alt+K 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ěť Alt+U Alt+U Ignore xruns reported by the backend driver PÅ™ehlížet xruns hlášené ovladaÄem zadní Äásti So&ft Mode &Snadný režim Alt+F Alt+F Provide output monitor ports Poskytnout přípojky pro sledování výstupu &Monitor &Sledování Alt+M Alt+M 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 Alt+1 Alt+1 Enable hardware monitoring of capture ports Povolit přístrojové sledování zachytávacích přípojek H/W M&onitor H/W &sledování Alt+O Alt+O 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 Alt+W Alt+W 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 Alt+I Alt+I Whether to give verbose output on messages Dát hlášením podrobný výstup &Verbose messages &Podrobná hlášení Alt+V Alt+V &Output Device: &Výstupní zařízení: &Output Channels: &Výstupní kanály: &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: &Input Latency: &Vstupní prodleva: 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 plughw:0 plughw:0 /dev/audio /dev/audio /dev/dsp /dev/dsp Select output device for playback Vybrat výstupní zařízení pro pÅ™ehrávání > > Alternate input device for capture Střídat vstupní zařízení pro zachytávání &Output Latency: &Výstupní prodleva: 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í &Input Channels: &Vstupní kanály: Select input device for capture Vybrat vstupní zařízení pro zachytávání Select PCM device name Vybrat název zařízení PCM 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: Number o microseconds to wait between engine processes (dummy) PoÄet mikrosekund, po které se Äeká mezi strojovými procesy (dummy) 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 miliseconds 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 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í: Alt+T ALT+T 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 Alt+C Alt+C &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 Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) PÅ™ehlížet první XRUN pÅ™i spuÅ¡tÄ›ní serveru (vÄ›tÅ¡inou se vyskytuje na pre-0.80.0 serverech) &Ignore first XRUN occurrence on statistics &PÅ™ehlížet výskyt prvního XRUN ve statistice Connections Spojení Time in seconds between each auto-refresh cycle ÄŒas v sekundách mezi každým kolem automatického obnovení 5 5 10 10 20 20 30 30 60 60 120 120 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 refresh the connections patchbay automatically Obnovit automaticky pzapojovací desku pro spojení &Auto refresh connections Patchbay, every (secs): Obnovit &automaticky zapojovací desku pro spojení, každých (s): Alt+A Alt+A 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: Alt+P Alt+P 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. Server &Prefix: PÅ™e&dpona serveru: Extra driver options (command line suffix) Další volby pro ovladaÄ (přípona příkazového řádku) &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) Alt+B Alt+B Elapsed time since last &Reset ÄŒas uplynulý od posledního &znovunastavení Elapsed time since last &XRUN ÄŒas uplynulý od posledního &XRUN Alt+X Alt+X 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 Alt+N Alt+N 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 Alt+Z Alt+Z 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 Alt+Q ALT+Q Whether to ask for confirmation on application exit Žádat o potvrzení pÅ™i ukonÄení aplikace &Confirm application close &Potvrdit ukonÄení aplikace 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 Alt+E Alt+E 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 delay window positioning at application startup Zpozdit umístÄ›ní okna pÅ™i spuÅ¡tÄ›ní programu &Delay window positioning at startup Zpozd&it umístÄ›ní okna pÅ™i spuÅ¡tÄ›ní programu 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Ä› Alt+L Alt+L 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Ä› OK OK Cancel ZruÅ¡it Warning Varování Some settings have been changed: "%1" Do you want to save the changes? NÄ›která nastavení byla zmÄ›nÄ›na: "%1" Chcete uložit zmÄ›ny? Save Uložit Discard Odmítnout Delete preset: "%1" Are you sure? Smazat pÅ™ednastavení "%1" 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? NÄ›která nastavení byla zmÄ›nÄ›na. Chcete použít zmÄ›ny? Apply Použít &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 stop JACK audio server on application exit S&top JACK audio server on application exit 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íť &Name: &Název: The JACK Audio Connection Kit sound server name Název zvukového serveru JACK Audio Connection Kit netone síť_1 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 qjackctlSocketForm Socket - JACK Audio Connection Kit Zásuvka - JACK Audio Connection Kit &Socket &Zásuvka &Name (alias): &Název (PÅ™ezdívka): Socket name (an alias for client name) Název zásuvky (pÅ™ezdívka pro název klienta) Client name (regular expression) Název pro klienta (pravidelný výraz) Add plug to socket plug list PÅ™idat zástrÄku do seznamu se zástrÄkami do zásuvky Add P&lug &PÅ™idat zástrÄku Alt+L Alt+L &Plug: &ZástrÄka: Port name (regular expression) Název přípojky (pravidelný výraz) Socket plug list Seznam se zástrÄkami do zásuvky Socket Plugs / Ports ZástrÄky do zásuvky/Přípojky Edit currently selected plug Upravit nyní vybranou zástrÄku &Edit &Upravit Alt+E Alt+E Remove currently selected plug from socket plug list Odstranit nyní vybranou zástrÄku ze seznamu se zástrÄkami do zásuvky &Remove &Odstranit Alt+R Alt+R &Client: &Klient: Move down currently selected plug in socket plug list Posunout nyní vybranou zástrÄku v seznamu se zástrÄkami do zásuvky dolů &Down &Dolů Alt+D Alt+D Move up current selected plug in socket plug list Posunout nyní vybranou zástrÄku v seznamu se zástrÄkami do zásuvky nahoru &Up &Nahoru Alt+U Alt+U Enforce only one exclusive cable connection Vynutit jedno výluÄné kabelové spojení E&xclusive Vý&luÄné Alt+X Alt+X &Forward: &DopÅ™edu: Forward (clone) all connections from this socket PÅ™edat vÅ¡echna spojení z této zásuvky (klonovat) Type Typ Audio socket type (JACK) Zvukový typ zásuvky (napojení) JACK &Audio &Zvuk Alt+A Alt+A MIDI socket type (JACK) MIDI typ zásuvky (napojení) (JACK) &MIDI &JACK-MIDI Alt+M Alt+M MIDI socket type (ALSA) MIDI typ zásuvky (napojení) (ALSA) AL&SA AL&SA-MIDI Alt+S Alt+S OK OK Cancel ZruÅ¡it Plugs / Ports ZástrÄky/Přípojky Error Chyba A socket named "%1" already exists. Zásuvka s názvem "%1" již existuje. Warning Varování Some settings have been changed. Do you want to apply the changes? NÄ›která nastavení byla zmÄ›nÄ›na. Chcete použít zmÄ›ny? Apply Použít Discard Odmítnout Add Plug PÅ™idat zástrÄku Edit Upravit Remove Odstranit Move Up PÅ™esunout nahoru Move Down PÅ™esunout dolů (None) (Žádný) qjackctlSocketList Output Výstup Input Vstup Socket Zásuvka <New> - %1 <Nový> %1 Warning Varování %1 about to be removed: "%2" Are you sure? %1 má být odstranÄ›no: "%2" Jste si jistý? Yes Ano No Ne %1 <Copy> - %2 %1 <Kopírovat> - %2 qjackctlSocketListView Output Sockets / Plugs Výstupní zásuvky/zástrÄky Input Sockets / Plugs Vstupní zásuvky/zástrÄky qjackctlStatusForm Status - JACK Audio Connection Kit Stav - JACK Audio Connection Kit Statistics since last server startup Statistika od posledního spuÅ¡tÄ›ní serveru Description Popis Value Hodnota Reset XRUN statistic values Nastavit znovu údaje ve statistice XRUN Re&set &Nastavit znovu Alt+S ALT+S Refresh XRUN statistic values Obnovit údaje ve statistice XRUN &Refresh &Obnovit Alt+R Alt+R Server state Stav serveru DSP Load Zatížení DSP Sample Rate Vzorkovací kmitoÄet Buffer Size Velikost vyrovnávací pamÄ›ti Realtime Mode Režim skuteÄného Äasu Transport state Stav pÅ™edání Transport Timecode PÅ™edání Äasového kódu Transport BBT PÅ™edání BBT Transport BPM PÅ™edání BPM XRUN count since last server startup PoÄet XRUN od posledního spuÅ¡tÄ›ní serveru XRUN last time detected ÄŒas posledního zjiÅ¡tÄ›ní XRUN XRUN last Poslední XRUN XRUN maximum NejvÄ›tší poÄet XRUN XRUN minimum Nejmenší poÄet XRUN XRUN average PrůmÄ›rný poÄet XRUN XRUN total Celkový poÄet XRUN Maximum scheduling delay NejvÄ›tšího zpoždÄ›ní Äasu Time of last reset ÄŒas posledního znovunastavení Server name Název serveru qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_fr.ts0000644000175000001440000000012412113664610022551 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826685.033395 30 ctime=1364826685.084395504 qjackctl-0.3.10/src/translations/qjackctl_fr.ts0000644000175000001440000061634312113664610022055 0ustar00rncbcusers00000000000000 QObject (default) (par défaut) Usage Utilisation options options command-and-args commande-et-args Options Options Start JACK audio server immediately Démarrer immédiatement le serveur audio JACK Set default setings preset name Régler le nom du préréglage des paramètres par défaut 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 fichiers 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). Qt: %1 Qt : %1 Set default settings preset name Régler le nom du préréglage des paramètres par défaut qjackctlAboutForm About QjackCtl À propos de QjackCtl About Qt À propos de Qt &Close &Fermer Alt+C Alt+F Version Version Build Compilation Using: JACK %1 Utilisation de : JACK %1 Debugging option enabled. Option de débogage activée. System tray disabled. Zone de notification système désactivée. Transport status control disabled. Contrôle du statut du déplacement désactivé. Realtime status disabled. Statut temps réel désactivé. XRUN delay status disabled. Statut du délai de désynchronisation (XRUN) désactivé. Maximum delay status disabled. Statut du délai maximal désactivé. JACK Session support disabled. Prise en charge de session JACK désactivée. ALSA/MIDI sequencer support disabled. Prise en charge du séquenceur ALSA/MIDI désactivée. Website Site web This program is free software; you can redistribute it and/or modify it Ce programme est libre; vous pouvez le redistribuer et/ou le modifier under the terms of the GNU General Public License version 2 or later. selon les termes de la Licence Publique Générale GNU version 2 ou ultérieure. JACK MIDI support disabled. Prise en charge de JACK MIDI désactivée. JACK Port aliases support disabled. Prise en charge des alias de port JACK désactivée. D-Bus interface support disabled. Prise en charge de l'interface D-Bus désactivée. qjackctlClientListView Readable Clients Clients en lecture Output Ports Ports de sortie Writable Clients Clients en ecriture Input Ports Ports d'entrée &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 Re&name Re&nommer Alt+N Rename Alt+N &Refresh &Rafraîchir Alt+R Refresh Alt+R Readable Clients / Output Ports Clients en lecture / Ports de sortie Writable Clients / Input Ports Clients en ecriture / Ports d'entrée qjackctlConnect Warning Attention This will suspend sound processing Cela va suspendre le traitement du son from all client applications. de toutes les applications clientes. Are you sure? Êtes-vous certain? Yes Oui No Non This will suspend sound processing from all client applications. Are you sure? Cela va suspendre le traitement du son de toutes les applications clientes. Êtes-vous certain? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Connexions - Kit de Connexion Audio JACK Audio Audio &Connect &Connecter Alt+C Alt+C Connect currently selected ports Connecter les ports actuellement sélectionnés &Disconnect &Déconnecter Alt+D Alt+D Disconnect currently selected ports Déconnecter les ports actuellement sélectionnés Disconnect &All &Tout déconnecter Alt+A Alt+T Disconnect all currently connected ports Déconnecter tous les ports actuellement connectés Expand all client ports Afficher tous les ports clients E&xpand All &Afficher tout Alt+X Alt+A Alt+X &Refresh &Rafraîchir Alt+R Alt+R Refresh current connections view Rafraîchir la vue actuelle des connexions MIDI MIDI Warning Attention The preset aliases have been changed: Les alias de préréglage ont été changés: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Cancel Annuler 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 QjackCtl QjackCtl Alt+Q Alt+Q &Quit &Quitter Quit processing and exit Quitter le traitement et sortir Alt+S Alt+D &Start &Démarrer Start the JACK server Démarrer le serveur JACK Alt+T Alt+A S&top &Arrêter Stop the JACK server Arrêter le serveur JACK St&atus S&tatut Show/hide the extended status window Montrer/cacher la fenêtre de statut étendu Alt+B Alt+R Ab&out... À pr&opos… Show information about this application Montrer des informations à propos de cette application Alt+E Alt+E S&etup... R&églages... Show settings and options dialog Montrer la fenêtre d'options et de paramètres Alt+M Alt+M &Messages &Messages Show/hide the messages log window Montrer/cacher la fenêtre du journal des messages &Patchbay &Brassage Show/hide the patchbay editor window Montrer/cacher la fenêtre de l'éditeur de baie de brassage Alt+C Alt+C &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 CPU Load Charge processeur Sample rate Fréquence d'échantillonnage XRUN Count Décompte des désynchronisations (XRUN) 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 &Backward A&rrière Backward transport Déplacer en arrière Alt+F Alt+V &Forward A&vant Forward transport Déplacer en avant Alt+R Alt+O &Rewind Remb&obiner Rewind transport Rembobiner Alt+U Alt+P Pa&use Pa&use Stop transport rolling Arrêter le déplacement Alt+P Alt+L &Play &Lecture Start transport rolling Démarrer le déplacement Could not open ALSA sequencer as a client. MIDI patchbay will be not available. Impossible d'ouvrir le sequenceur ALSA comme client. La baie de brassage MIDI ne sera pas disponible. Warning Attention JACK is currently running. JACK fonctionne actuellement. Do you want to terminate the JACK audio server? Voulez-vous arrêter le serveur audio JACK? Terminate Arrêter Leave Laisser Cancel Annuler successfully avec succès with exit status=%1 avec statut de sortie=%1 Could not start JACK. Impossible de démarrer JACK. Maybe JACK audio server is already started. Peut-être que le serveur audio JACK est déjà démarré. Stop Arrêter Kill Tuer Could not load preset "%1". Retrying with default. Impossible de charger le préréglage « %1 ». Nouvel essai avec celui par défaut. Could not load default preset. Sorry. Impossible de charger le préréglage par défaut. 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. Impossible de démarrer JACK. Désolé. JACK was started with PID=%1 (0x%2). JACK a été démarrer avec le PID=%1 (0x%2). Some client audio applications Certaines applications audio clientes are still active and connected. sont encore actives et connectées. Do you want to stop the JACK audio server? Voulez-vous arrêter le serveur audio JACK? JACK is stopping... JACK s'arrête... Shutdown script... Script d'extinction... 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é Error Erreur Transport BBT (bar:beat.ticks) MTB (mesure:temps.battement) du déplacement 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) Could not load active patchbay definition. Disabled. Impossible de charger la définition de baie de brassage active. Désactivé. Patchbay activated. Baie de brassage activée. Patchbay deactivated. Baie de brassage désactivée. Statistics reset. Réinitialisation des statistiques. msec ms Audio connection graph change. Changement du graphique des connexions audio. 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. MIDI connection graph change. Changement du graphique des connexions MIDI. Audio active patchbay scan Balayage de la baie de brassage audio active MIDI active patchbay scan Balayage de la baie de brassage MIDI active Audio connection change. Changement des connexions audio. MIDI connection change. Changement des connexions MIDI. checked vérifié connected connecté disconnected déconnecté failed échoué Could not connect to JACK server as client. Please check the messages window for more info. Impossible de connecter le serveur JACK comme client. Veuillez consulter la fenêtre des messages pour plus d'informations. Server configuration saved to "%1". Configuration du serveur enregistré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é Hz Hz frames échantillons Yes Oui No Non 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 &Brassage &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. OK OK Information Information Some settings will be only effective the next time you start this program. Certain 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 (notification XRUN) JACK connection graph change. Changement du graphique des connexions JACK. ALSA connection graph change. Changement du graphique 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? JACK fonctionne actuellement. 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" in the context menu of the system tray icon. Le programme continuera de s'exécuter dans la zone de notification système. Pour terminer le programme, merci de choisir « Quitter » dans le menu contextuel del'icône de la zone de notification système. Could not start JACK. Maybe JACK audio server is already started. Impossible de démarrer JACK. 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 DBUS : impossible de démarrer le serveur JACK. Désolé Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Certaines applications audio clientes sont encore actives et connectées. 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 DBUS : impossible d'arrêter le serveur JACK. Désolé JACK was started with PID=%1. JACK a été démarrer 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) Could not load active patchbay definition. "%1" Disabled. Impossible de charger la définition de baie de brassage active. "%1" 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). 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. Impossible de connecter le serveur JACK comme client. - %1 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… Save and &Quit... Enregistrer et &Quitter… Save &Template... Enregistrer &modèle… &Refresh &Rafraîchir D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS : SetParameterValue('%1', '%2') : %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS : ResetParameterValue('%1') : %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) D-BUS : GetParameterValue('%1') : %2. (%3) Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. Impossible d'ouvrir le sequenceur ALSA comme client. La baie de brassage ALSA MIDI ne sera pas disponible. The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. Le programme continuera de s'exécuter dans la zone de notification système. Pour terminer le programme, merci de choisir "Quitter" dans le menu contextuel de la zone de notification système. 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: %1 -> %2 Do you want to remove the patchbay connection? Une définition de baie de brassage est actuellement active, il est probable que cela refasse cette connexion : %1 -> %2 Voulez-vous enlever la connexion de la baie de brassage? Remove Enlever Alt+A Alt+T Alt+O Alt+O Shift+Space Shift+Espace Space Espace qjackctlMessagesForm Messages - JACK Audio Connection Kit Messages - Kit de Connexion Audio JACK Messages log Messages Messages output log Journal des messages de sortie Logging stopped --- %1 --- Journalisation arrêtée --- %1 --- Logging started --- %1 --- Journalisation démarrée --- %1 --- qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Messages / Statut - Kit de Connexion Audio JACK &Messages &Messages Messages log Journal des messages Messages output log Journal des messages de sortie &Status &Statut Status information Information de statut Statistics since last server startup Statistiques depuis le dernier démarrage du serveur Description Description Value Valeur Reset XRUN statistic values Réinitialiser les valeurs statistiques des désynchronisations (XRUN) Re&set Réinitiali&ser Alt+S Alt+S Refresh XRUN statistic values Rafraîchir les valeurs statistiques des désynchronisations (XRUN) &Refresh &Rafraîchir Alt+R Alt+R Server name Nom du serveur Server state État du serveur DSP Load Charge DSP Sample Rate Fréquence d'échantillonnage Buffer Size Taille du tampon Realtime Mode Mode temps réel Transport state État du déplacement Transport Timecode Code temporel (Timecode) du déplacement Transport BBT MTB du déplacement Transport BPM BPM du déplacement XRUN count since last server startup Décompte des désynchronisations (XRUN) depuis le dernier démarrage du serveur XRUN last time detected Horaire de la dernière désynchronisation (XRUN) détectée XRUN last Dernière désynchronisation (XRUN) XRUN maximum Nombre maximal de désynchronisation (XRUN) XRUN minimum Nombre minimal de désynchronisation (XRUN) XRUN average Moyenne de désynchronisation (XRUN) XRUN total Nombre total de désynchronisation (XRUN) Maximum scheduling delay Délai d'ordonnancement maximal Time of last reset Temps depuis la dernière réinitialisation Logging stopped --- %1 --- Journalisation arrêtée --- %1 --- Logging started --- %1 --- Journalisation démarrée --- %1 --- qjackctlPatchbay Warning Attention This will disconnect all sockets. Cela va déconnecter toutes les prises. Are you sure? Êtes vous certain? Yes Oui No Non This will disconnect all sockets. Are you sure? Cela va déconnecter toutes les prises. Êtes-vous certain? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Baie de brassage - Kit de Connexion Audio JACK &New &Nouveau Alt+N Alt+N Create a new patchbay profile Créer un nouveau profil de baie de brassage &Load... &Charger… Alt+L Alt+C Load patchbay profile Charger un profil de baie de brassage &Save... &Enregistrer… Alt+S Alt+E Save current patchbay profile Enregistrer le profil actuel de la baie de brassage Expand all items Afficher tous les éléments E&xpand All &Afficher tout Alt+X Alt+A Current (recent) patchbay profile(s) Profil(s) actuel(s) (récent(s)) de la baie de brassage Acti&vate Acti&ver Alt+V Alt+V Toggle activation of current patchbay profile Basculer l'activation du profil actuel de baie de brassage &Connect &Connecter Alt+C Alt+C Connect currently selected sockets Connecter les prises actuellement sélectionnés &Disconnect &Déconnecter Alt+D Alt+D Disconnect currently selected sockets Déconnecter les prises actuellement sélectionnés Disconnect &All &Tout déconnecter Alt+A Alt+T Disconnect all currently connected sockets Déconnecter les prises actuellement connectées &Refresh &Rafraîchir Alt+R Alt+R Refresh current patchbay view Rafraîchir la vue actuelle de la baie de brassage Down Vers le bas Move currently selected output socket down one position Déplacer d'une position vers le bas la prise de sortie actuellement sélectionnée Add... Ajouter… Create a new output socket Créer une nouvelle prise de sortie Edit... Éditer… Edit currently selected input socket properties Editer les propriétés de la prise d'entrée actuellement sélectionnée Up Vers le haut Move currently selected output socket up one position Déplacer d'une position vers le haut la prise de sortie actuellement sélectionnée Remove Enlever Remove currently selected output socket Enlever la prise de sortie actuellement sélectionnée Copy... Copier… Duplicate (copy) currently selected output socket Dupliquer (copier) la prise de sortie actuellement sélectionnée Remove currently selected input socket Enlever la prise d'entrée actuellement sélectionnée Duplicate (copy) currently selected input socket Dupliquer (copier) la prise d'entrée actuellement sélectionnée Create a new input socket Créer une nouvelle prise d'entrée Edit currently selected output socket properties Editer les propriétés de la prise de sortie actuellement sélectionnée Warning Attention The patchbay definition has been changed: La définition de baie de brassage a été changée: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Cancel Annuler modified modifié Untitled Sans titre Error Erreur Could not load patchbay definition file: Impossible de charger le fichier de définition de baie de brassage: Could not save patchbay definition file: Impossible d'enregistrer le fichier de définition de baie de brassage: New Patchbay definition Nouvelle définition de baie de brassage Create patchbay definition as a snapshot Prendre un cliché de toutes les connexions clientes actuelles of all actual client connections? pour créer une définition de baie de brassage? Yes Oui No Non 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 active actif The patchbay definition has been changed: "%1" Do you want to save the changes? La définition de baie de brassage a été changée : « %1 » Voulez-vous enregistrer les changements? %1 [modified] %1 [modifié] Untitled%1 SansTitre%1 Could not load patchbay definition file: "%1" Impossible de charger le fichier de définition de baie de brassage : « %1 » Could not save patchbay definition file: "%1" Impossible d'enregistrer 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 pour créer une définition de baie de brassage? 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 qjackctlSessionForm Session - JACK Audio Connection Kit Session - Kit de Connexion Audio JACK Load session Charger session &Load... &Charger… Recent session Session récente &Recent &Récente Save session Enregistrer session Save session versioning Enregistrer la session avec gestion de révisions &Versioning Gestion de ré&visions Re&fresh Ra&fraîchir Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit &Éditer Remove infra-client Re&move &Remove Enleve&r &Save... &Enregistrer… Save Enregistrer Save and Quit Enregistrer et quitter Save Template Enregistrer modèle Update session Mettre à jour la session &Refresh &Rafraîchir Client / Ports Clients / Ports UUID UUID Command Commande &Save &Enregistrer Load Session Charger session Session directory Répertoire de session Save Session Enregistrer session and Quit et quitter Template Modèle &Clear &Effacer Warning Attention A session could not be found in this folder: "%1" Impossible de trouver une session dans ce dossier : « %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" Are you sure to overwrite the existing session? Il existe déjà une session dans ce dossier : « %1 » Êtes-vous certain de vouloir remlplacer la session existante ? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Ce dossier existe déjà et n'est pas vide : « %1 » Êtes-vous certain de vouloir remplacer le dossier existant ? %1: saving session... %1 : enregistrement de la session… %1: save session %2. %1 : enregistrer session %2. New Client Save and &Quit... Enregistrer et &Quitter… Save &Template... Enregistrer &modèle… qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Réglages - Kit de Connexion Audio JACK Settings Paramètres Preset &Name: &Nom du préréglage : (default) (par défaut) Settings preset name Nom du préréglage des paramètres &Save &Enregistrer Alt+S Alt+E Save settings as current preset name Enregistrer les paramètres sous le nom du préréglage actuel &Delete E&ffacer Alt+D Alt+F Delete current settings preset Effacer le préréglage des paramètres actuel Server Serveur Server &Path: &Chemin du serveur : jackstart jackstart jackd jackd jackd-realtime jackd-realtime The JACK Audio Connection Kit sound server path Chemin du serveur de son du Kit de Connexion Audio JACK Driv&er: Pilot&e : dummy factice oss oss alsa alsa portaudio portaudio coreaudio coreaudio freebob freebob The software driver to use Pilote logiciel à utiliser Parameters 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 : &Channel: &Canal: 21333 21333 Number o microseconds to wait between engine processes (dummy) Nombre de microsecondes à attendre entre les traitements du moteur (factice) 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) : PCM channel Canal PCM &Timeout (msec): &Décompte (en ms) : 200 200 500 500 1000 1000 2000 2000 5000 5000 10000 10000 Set client timeout limit in miliseconds Régler le limite du décompte client en millisecondes &Realtime Temps &réel Alt+R Alt+R Use realtime scheduling Utiliser ordonnancement temps réel No Memory Loc&k P&as de verrouillage mémoire Alt+K Alt+A 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 Alt+U Alt+D Unlock memory of common toolkit libraries (GTK+, QT, FLTK, Wine) Déverrouiller la mémoire des librairies d'interface communes (GTK+, QT, FLTK, Wine) So&ft Mode Mode &logiciel Alt+F Alt+L Ignore xruns reported by the backend driver Ignorer les désynchronisations (XRUN) rapportées par le pilote principal &Monitor &Écoute de contrôle Alt+M Alt+E Provide output monitor ports Fournir des ports de sortie d'écoute de contrôle Force &16bit Forcer &16bit Alt+1 Alt+1 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 Alt+O Alt+O 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 Alt+W Alt+U 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 Alt+I Alt+I Ignore hardware period/buffer size Ignore la taille des période/tampon matériels &Output Device: Périphérique de s&ortie : &Output Channels: Canaux 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 : &Input Latency: Laten&ce d'entrée : 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 default par défaut hw:0 hw:0 hw:1 hw:1 The PCM device name to use Nom du périphérique PCM à utiliser > > Select output device for playback Sélectionner le périphérique de sortie pour la reproduction &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 &Output Latency: Laten&ce de sortie : 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 &Input Channels: Canaux d'e&ntrée : Select input device for capture Sélectionner le périphérique d'entrée pour la capture Select PCM device name Sélectionner le nom du périphérique PCM 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) &Verbose messages output Sortie de messages ba&varde Alt+V Alt+V Whether to give verbose output on messages Donner une sortie bavarde sur les messages Start De&lay (secs): &Retard du démarrage (en s) : 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 : 0 0 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 : Alt+T Alt+T 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 Alt+C Alt+C 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 &Ignore first XRUN occurrence on statistics &Ignorer la première occurence de désynchronisation (XRUN) dans les statistiques Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) Ignorer la première désynchronisation (XRUN) au démarrage du serveur (susceptible de se produire sur les serveurs pre-0.80.0) Connections Connexions 5 5 10 10 20 20 30 30 60 60 120 120 Time in seconds between each auto-refresh cycle Temps en secondes entre chaque cycle de rafraîchissement automatique 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 &Auto refresh connections Patchbay, every (secs): Rafraîchir &automatiquement les connexions de la baie de brassage toute les (en s) : Alt+A Alt+A Whether to refresh the connections patchbay automatically Rafraîchir automatiquement les connexions de la baie de brassage Activate &Patchbay persistence: Activer la &persistance de baie de brassage : Alt+P Alt+L 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 Alt+B Alt+D 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) Alt+X Alt+X 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 dans la vue 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 Alt+N Alt+O 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 Alt+Z Alt+Z 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 confimation 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 Alt+E Alt+E Whether to enable the system tray icon Activer l'icône de notification système &Delay window positioning at startup &Retarder le positionnement de la fenêtre au démarrage Whether to delay window positioning at application startup Retarder le positionnement de la fenêtre au démarrage de l'application S&ave JACK audio server configuration to: &Enregistrer 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) .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 un confirmation à l'extinction du serveur audio JACK Buttons Boutons Hide main window &Left buttons Cacher les boutons de &gauche de la fenêtre principale Alt+L Alt+G 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 OK OK Cancel Annuler Warning Attention Some settings have been changed: Des paramètres ont été changés: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Delete preset: Effacer préréglage: Are you sure? Êtes vous certain? 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 Some settings have been changed. Des paramètres ont été modifiés. Do you want to apply the changes? Voulez-vous appliquer les changements? Apply Appliquer The audio backend driver interface to use Le pilote d'interface audio à utiliser &Verbose messages Messages ba&vards MIDI Driv&er: Pilot&e MIDI : none aucun raw brut seq seq 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" Do you want to save the changes? Des paramètres ont été modifiés : « %1 » Voulez-vous enregistrer les changements? Delete preset: "%1" Are you sure? Effacer le préréglage : « %1 » Êtes-vous certain? Some settings have been changed. Do you want to apply the changes? Des paramètres ont été modifiés. Voulez-vous appliquer les changements? Messages Log Journal des messages Log files Fichiers du journal sun sun netone netone /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 &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 Alt+Q Alt+Q Whether to start minimized to system tray Démarrer minimisé dans la zone de notification système Start minimi&zed to system tray Démarrer minimisé dans la &zone de notification système 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 E&nable ALSA Sequencer support Activer la prise e&n charge du séquenceur ALSA 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 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 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) qjackctlSocketForm Socket - JACK Audio Connection Kit Prise - Kit de Connexion Audio JACK OK OK Cancel Annuler &Socket &Prise &Name (alias): &Nom (alias) : Socket name (an alias for client name) Nom de la prise (un alias pour le nom du client) Client name (regular expression) Nom du client (expression régulière) Add P&lug Ajouter une &fiche Alt+L Alt+F Add plug to socket plug list Ajouter la fiche à la liste des prises &Plug: &Fiche : Port name (regular expression) Nom du port (expression régulière) Socket Plugs / Ports Prises / Ports Socket plug list Liste des prises &Edit &Éditer Alt+E Alt+E Edit currently selected plug/port Éditer la fiche/le port actuellement sélectionné &Remove Enleve&r Alt+R Alt+R Remove currently selected plug from socket plug list Enlever la fiche actuellement sélectionnée de la liste des prises &Client: &Client : &Down Vers le &bas Alt+D Alt+B Move down currently selected plug socket plugst Déplacer vers le bas la fiche actuellement sélectionnée dans la liste des prises &Up Vers le &haut Alt+U Alt+H Move up current selected plug socket plugst Déplacer vers le haut la fiche actuellement sélectionnée dans la liste des prises E&xclusive E&xclusif Alt+X Alt+X Enforce only one exclusive cable connection S'assurer de l'utilisation d'une seule connexion cablée exclusive &Forward: Renvo&i : Forward (clone) all connections from this socket Renvoyer (cloner) toutes les connexions depuis cette prise Type Type &Audio &Audio Alt+A Alt+A Audio socket type (JACK) Type de prise audio (JACK) &MIDI &MIDI Alt+M Alt+M MIDI socket type (ALSA) Type de prise MIDI (ALSA) Plugs / Ports Fiches / Ports Add Plug Ajouter une Fiche Remove Enlever Edit Éditer Error Erreur A socket named "%1" already exists. Une prise nommée « %1 » existe déjà. Move Up Vers le haut Move Down Vers le bas (None) (Aucun) Edit currently selected plug Éditer la fiche actuellement sélectionnée Move down currently selected plug in socket plug list Déplacer vers le bas la fiche actuellement sélectionnée dans la liste des prises Move up current selected plug in socket plug list Déplacer vers le haut la fiche actuellement sélectionnée dans la liste des prises Warning Attention Some settings have been changed. Do you want to apply the changes? Des paramètres ont été modifiés.Voulez-vous appliquer les changements? Apply Appliquer Discard Ignorer MIDI socket type (JACK) Type de prise midi (JACK) AL&SA AL&SA Alt+S Alt+S qjackctlSocketList Output Sortie Input Entrée Socket Prise New Nouvelle Warning Attention about to be removed sur le point d'être enlevée Are you sure? Êtes-vous certain? Yes Oui No Non Copy Copie <New> - %1 <Nouvelle> - %1 %1 about to be removed: "%2" Are you sure? %1 est sur le point d'être enlevée : « %2 » Êtes-vous certain? %1 <Copy> - %2 %1 <Copie> - %2 qjackctlSocketListView Output Sockets Prises de Sortie Plugs Fiches Input Sockets Prises d'Entrée Output Sockets / Plugs Prises de Sortie / Fiches Input Sockets / Plugs Prises d'Entrée / Fiches qjackctlStatusForm Status - JACK Audio Connection Kit Statut - Kit de Connexion Audio JACK Description Description Value Valeur Statistics since last server startup Statistiques depuis le dernier démarrage du serveur Re&set Réinitiali&ser Alt+S Alt+S Reset XRUN statistic values Réinitialiser les valeurs statistiques des désynchronisations (XRUN) &Refresh &Rafraîchir Alt+R Alt+R Refresh XRUN statistic values Rafraîchir les valeurs statistiques des désynchronisations (XRUN) Time of last reset Temps depuis la dernière réinitialisation Maximum scheduling delay Délai d'ordonnancement maximal XRUN count since last server startup Décompte des désynchronisations (XRUN) depuis le dernier démarrage du serveur XRUN total Nombre total de désynchronisation (XRUN) XRUN average Moyenne de désynchronisation (XRUN) XRUN minimum Nombre minimal de désynchronisation (XRUN) XRUN maximum Nombre maximal de désynchronisation (XRUN) XRUN last Dernière désynchronisation (XRUN) XRUN last time detected Horaire de la dernière désynchronisation (XRUN) détectée Transport state État du déplacement Transport BPM BPM du déplacement Transport BBT MTB du déplacement Transport Timecode Code temporel (Timecode) du déplacement Realtime Mode Mode temps réel Buffer Size Taille du tampon Sample Rate Fréquence d'échantillonnage CPU Load Charge processeur Server state État du serveur DSP Load Charge DSP qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_de.ts0000644000175000001440000000012412113664610022532 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826685.084395 30 ctime=1364826685.101395505 qjackctl-0.3.10/src/translations/qjackctl_de.ts0000644000175000001440000052773512113664610022044 0ustar00rncbcusers00000000000000 QObject (default) (voreingestellt) 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). Qt: %1 Qt: %1 Set default settings preset name Name für die Voreinstellungen festlegen Set default JACK audio server name Voreingestellten JACK-Audoservername einstellen Option -n requires an argument (name). Option -n benötigt ein Argument (Name). qjackctlAboutForm About QjackCtl Über QjackCtl &Close &Schließen Alt+C Alt+S About Qt Über Qt Version Version Build Build Using: JACK %1 Nutze: JACK %1 Debugging option enabled. Debugging-Option aktiviert. System tray disabled. Benachrichtigungsfeld deaktiviert. Transport status control disabled. Transportstatuskontrolle abgeschaltet. Realtime status disabled. Echtzeitstatus deaktiviert. XRUN delay status disabled. XRUN Verzögerungsstatus abgeschaltet. Maximum delay status disabled. Status für maximale Verzögerung abgeschaltet. JACK MIDI support disabled. JACK MIDI wird nicht unterstütz. JACK Session support disabled. JACK Session nicht unterstützt. ALSA/MIDI sequencer support disabled. ALSA/MIDI Sequencer wird nicht unterstütz. Website Webseite This program is free software; you can redistribute it and/or modify it Dieses Programm ist freie Software; Sie können es gemäß der under the terms of the GNU General Public License version 2 or later. GNU General Public License weiterverteilen und/oder modifizieren. JACK Port aliases support disabled. Alternativnamen für JACK-Anschlüsse abgeschaltet. D-Bus interface support disabled. Unterstützung der D-Bus-Schnittstelle abgeschaltet. qjackctlClientListView Readable Clients / Output Ports Lesbare Clients/Ausgänge Writable Clients / Input Ports Beschreibbare Clients/Eingänge &Connect &Verbinden Alt+C Connect Alt+V &Disconnect &Trennen Alt+D Disconnect Alt+T Disconnect &All &Alle trennen Alt+A Disconect All Alt+A Re&name &Umbenennen Alt+N Rename Alt+U &Refresh Au&ffrischen Alt+R Refresh Alt+F qjackctlConnect Warning Warnung This will suspend sound processing from all client applications. Are you sure? Hiermit wird die Klangverarbeitung aller Client-Anwendungen unterbrochen. Sind Sie sicher? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Verbindungen - JACK Audio Connection Kit Audio Audio Connect currently selected ports Ausgewählte Anschlüsse verbinden &Connect &Verbinden Alt+C Alt+V Disconnect currently selected ports Ausgewählte Anschlüsse trennen &Disconnect &Trennen Alt+D Alt+T Disconnect all currently connected ports Alle verbundenen Anschlüsse trennen Disconnect &All &Alle trennen Alt+A Alt+A Expand all client ports Alle Client-Anschlüsse aufklappen E&xpand All Alle auf&klappen Alt+X Alt+K Refresh current connections view Ansicht der bestehenden Verbindungen erneuern &Refresh &Auffrischen Alt+R Alt+A MIDI JACK-MIDI 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 QjackCtl QjackCtl Quit processing and exit Signalverarbeitung und Programm beenden &Quit &Beenden Alt+Q Alt+B Start the JACK server JACK-Server starten &Start &Start Alt+S Alt+S Stop the JACK server JACK-Server beenden S&top S&topp Alt+T Alt+T St&atus St&atus... Show information about this application Informationen über diese Anwendung anzeigen Ab&out... &Über... Set&up... &Einstellungen... Alt+B Alt+Ü Show settings and options dialog Dialogfenster für Enstellungen und Optionen anzeigen Alt+E Alt+I &Messages &Meldungen... Alt+M Alt+M 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... Alt+C Alt+V 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 Backward transport Transport rückwärts &Backward &Rückwärts Forward transport Transport vorwärts &Forward &Vorwärts Alt+F Alt+V Rewind transport Transport zurückspulen &Rewind &Zurückspulen Alt+R Alt+Z Stop transport rolling Transportvorgang anhalten Pa&use Pa&usieren Alt+U Alt+K Start transport rolling Transportforgang starten &Play Abs&pielen Alt+P Alt+P Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. ALSA Sequencer konnte nicht als Client geöffnet werden. 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 Warning Warnung JACK is currently running. Do you want to terminate the JACK audio server? Der JACK-Server läuft noch. 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. Konnte JACK nicht starten. Möglicheweise läuft der JACK-Server schon. Could not load preset "%1". Retrying with default. Konnte Einstellung "%1" nicht laden. 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 D-BUS: JACK-Server konnte nicht gestartet werden. Tut mir leid JACK is starting... JACK startet... Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Einige Client-Audio-Anwendungen sind noch aktiv und verbunden. 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" in the context menu of the system tray icon. Programm läuft weiter sichtbar als Symbol im Benachrichtigungsfeld. Zum Beenden des Programms, wählen Sie bitte "Beenden" im Kontextmenü des Benachrichtigungsfeldsymbols. 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 D-BUS: JACK-Server konnte nicht angehalten werden. 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. 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 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 Could not load active patchbay definition. "%1" Disabled. 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. 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). 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: %1 -> %2 Do you want to remove the patchbay connection? Zur Zeit ist eine Steckfeldkonfiguration aktiv, die wahrscheinlich diese Verbindung rückgängig macht: %1 -> %2 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. Keine Verbindungsaufnahme als Client zum JACK-Server möglich. - %1 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 Startend 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 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 &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. D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) Some settings will be only effective the next time you start this program. Einige Einstellungen werden erst nach einem Neustart des Programms wirksam. Alt+O Alt+Ü Shift+Space Umschalt+Leertaste Space Leertaste qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Meldungen/Status - JACK Audio Connection Kit &Messages &Meldungen Messages log Meldungsprotokoll Messages output log Meldungsausgabeprotokoll &Status &Status Status information Statusinformationen Statistics since last server startup Statistik seit dem letzten Serverstart Description Beschreibung Value Wert Reset XRUN statistic values Daten der XRUN-Statistik zurücksetzen Re&set &Zurücksetzen Alt+S Alt+Z Refresh XRUN statistic values Daten der XRUN-Statistik erneuern &Refresh &Auffrischen Alt+R Alt+A Server name Servername Server state Serverstatus DSP Load DSP-Last Sample Rate Abtastrate Buffer Size Puffergröße Realtime Mode Echtzeit-Modus Transport state Transportstatus Transport Timecode Transport Timecode Transport BBT Transport BBT Transport BPM Transport BPM XRUN count since last server startup Anzahl XRUNs seit dem letzten Serverstart XRUN last time detected Zeitpunkt der letzten XRUN-Beobachtung XRUN last Letzter XRUN XRUN maximum XRUN Maximum XRUN minimum XRUN Minimum XRUN average XRUN Durchschnitt XRUN total XRUN Summe Maximum scheduling delay Maximale Zeitverzögerung Time of last reset Zeitpunkt der letzten Zurücksetzung Logging stopped --- %1 --- Protokollierung angehalten --- %1 --- Logging started --- %1 --- Protokollierung gestartet --- %1 --- qjackctlPatchbay Warning Warnung This will disconnect all sockets. Are you sure? Diese Aktion wird alle Anschlüsse trennen. Sind Sie sicher? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Steckfeld - JACK Audio Connection Kit Move currently selected output socket down one position Ausgewählten Ausgangsanschluß eine Position nach unten verschieben Down Ab Create a new output socket Einen neuen Ausgangsanschluß anlegen Add... Hinzufügen... Edit currently selected input socket properties Eigenschaften des gewählten Eingangsanschlusses bearbeiten Edit... Bearbeiten... Move currently selected output socket up one position Ausgewählten Ausgangsanschluß eine Position nach oben verschieben Up Auf Remove currently selected output socket Ausgewählten Ausgangsanschluss entfernen Remove Entfernen Duplicate (copy) currently selected output socket Dupliziere den gewählten Ausgangsanschluss Copy... Kopieren... Remove currently selected input socket Ausgewählten Eingangsanschluss entfernen Duplicate (copy) currently selected input socket Dupliziere den gewählten Eingangsanschluss Create a new input socket Einen neuen Eingangsanschluß anlegen Edit currently selected output socket properties Eigenschaften des gewählten Ausgangsanschlusses bearbeiten Connect currently selected sockets Gewählte Anschlüsse miteinander verbinden &Connect &Verbinden Alt+C Alt+V Disconnect currently selected sockets Verbindung zwischen den gewählten Anschlüssen trennen &Disconnect &Trennen Alt+D Alt+T Disconnect all currently connected sockets Alle verbundenen Anschlüsse trennen Disconnect &All &Alle trennen Alt+A Alt+A Expand all items Alle Eintäge aufklappen E&xpand All Alle auf&klappen Alt+X Alt+K Refresh current patchbay view Steckfeldansicht auffrischen &Refresh Auf&frischen Alt+R Alt+F Create a new patchbay profile Neues Steckfeldprofil anlegen &New &Neu Alt+N Alt+N Load patchbay profile Steckfeldprofil laden &Load... &Laden... Alt+L Alt+L Save current patchbay profile Aktuelles Steckfeldprofil speichern &Save... &Speichern... Alt+S Alt+S Current (recent) patchbay profile(s) Aktuelle (zuletzt verwendete) Steckfeldprofile Toggle activation of current patchbay profile Aktivierung des aktuellen Steckfeldprofils umschalten Acti&vate A&ktivieren Alt+V Alt+V Warning Warnung The patchbay definition has been changed: "%1" Do you want to save the changes? Die Steckfelddefinition wurde verändert: "%1" Wollen Sie die Änderungen speichern? %1 [modified] %1 [verändert] Untitled%1 Unbenannt%1 Error Fehler Could not load patchbay definition file: "%1" Konnte Steckfelddefinitionsdatei nicht laden: "%1" Could not save patchbay definition file: "%1" Konnte Steckfelddefinitionsdatei nicht speichern: "%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 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 qjackctlSessionForm Session - JACK Audio Connection Kit Sitzung - JACK Audio Connection Kit Load session Sitzung laden &Load... &Laden... Recent session Letzte Sitzung &Recent &Zuletzt Save session Sitzung speichern Save session versioning Sitzungsversionierung speichern &Versioning &Versionierung Re&fresh Au&ffrischen Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit &Bearbeiten Remove infra-client Re&move &Remove En&tfernen &Save... &Speichern... Update session Sitzung aktualisieren Session clients / connections Client / Ports Client/Eingänge UUID UUID Command Kommando &Save &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" Eine Sitzung konnte in diesem Verzeichnis nicht gefunden werden: "%1" %1: loading session... %1: lade Sitzung... %1: load session %2. %1: lade Sitzung %2. A session already exists in this folder: "%1" Are you sure to overwrite the existing session? Es existiert bereits eine Sitzung in diesem Verzeichnis: "%1" Soll diese Sitzung überschrieben werden? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Dieses Verzeichnis existiert bereits und ist nicht leer: "%1" Soll das existierende Verzeichnis überschrieben werden? %1: saving session... %1: speichere Sitzung... %1: save session %2. %1: speichere Sitzung %2. New Client Save and &Quit... Speichern und &beenden... Save &Template... &Vorlage speichern... qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Einstellungen - JACK Audio Connection Kit Settings Einstellungen Preset &Name: &Benennung: Settings preset name Benennung der Einstellung (default) (voreinst.) Save settings as current preset name Einstellungen mit aktueller Benennung speichern &Save &Speichern Alt+S Alt+S Delete current settings preset Aktuelle Einstellung löschen &Delete &Löschen Alt+D Alt+L jackd jackd jackdmp jackdmp jackstart jackstart Driv&er: Trei&ber: The audio backend driver interface to use Zu nutzender Audio-Schnittstellentreiber dummy dummy sun sun oss oss alsa alsa portaudio portaudio coreaudio coreaudio freebob freebob firewire firewire Parameters Parameter MIDI Driv&er: MIDI-&Treiber: The ALSA MIDI backend driver to use Zu nutzender ALSA-MIDI-Treiber none keiner raw raw seq seq 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 Alt+R Alt+Z 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 Alt+K Alt+C 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 Alt+U Alt+P Ignore xruns reported by the backend driver Xruns des Schnittstellentreibers ignorieren So&ft Mode So&ft-Modus Alt+F Alt+F Provide output monitor ports Anschlüsse zur Ausgangsüberwachung anbieten &Monitor &Überwachung Alt+M Alt+Ü 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 Alt+1 Alt+1 Enable hardware monitoring of capture ports Hardware-überwachung der Caspture-Anschlüsse aktivieren H/W M&onitor H/W Über&wachung Alt+O Alt+W Enable hardware metering on cards that support it Hardware-Messung bei Karten aktivieren, die diese unterstützen H/&W Meter H/W &Messung Alt+W Alt+M Ignore hardware period/buffer size Ignoriere Periode/Puffergröße der Hardware &Ignore H/W &Ignoriere H/W Alt+I Alt+I Whether to give verbose output on messages Ausführliche Meldungen anzeigen &Verbose messages Aus&führliche Meldungen Alt+V Alt+F &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 plughw:0 plughw:0 /dev/audio /dev/audio /dev/dsp /dev/dsp Select output device for playback Ausgabegerät für Wiedergabe auswählen > > 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 Select input device for capture Eingangsgerät zum Aufnehmen wählen Select PCM device name Name des PCM-Gerätes wählen 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 &Prefix: Server path (command line prefix) Serverpfad (Kommandozeilen Prefix) 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 miliseconds 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 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 Herunterfahen 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: Alt+T Alt+F Browse for script to be executed after shutting down the JACK audio server Skript auswählen, das nach dem Herunterfahen 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 Alt+C Alt+U &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 Time in seconds between each auto-refresh cycle Zeit in Sekungen zwischen jedem Auto-Refresch-Zyklus 5 5 10 10 20 20 30 30 60 60 120 120 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 refresh the connections patchbay automatically Die Steckfelddarstellung automatisch aktualisieren &Auto refresh connections Patchbay, every (secs): Steckfeld &automatisch aktualisieren, je (s): Alt+A Alt+A 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: Alt+P Alt+F 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. Extra driver options (command line suffix) Sonderoptionen für Treiber (Kommandozeilen Prefix) &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) Alt+B Alt+B Elapsed time since last &Reset Seit dem letzten &Zurücksetzen verstrichene Zeit Elapsed time since last &XRUN Seit dem letzten &XRUN verstrichene Zeit Alt+X Alt+X 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 Alt+N Alt+K 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 Alt+Z Alt+Z 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 Alt+Q Alt+B Whether to ask for confirmation on application exit Vor dem Beenden des JACK-Servers nachfragen &Confirm application close Beenden der An&wendung bestätigen 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 Alt+E Alt+Y 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 delay window positioning at application startup Verzögerung der Fensterpositionierung beim Anwendugsstart festlegen &Delay window positioning at startup Fenster&positionierung beim Start verzögern 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 Alt+L Alt+L 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" Do you want to save the changes? Einige Einstellungen wurden verändert: "%1" Wollen Sie diese speichern? Delete preset: "%1" Are you sure? Voreinstellung löschen: "%1" 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? Einige Einstellungen wurden verändert. 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 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 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 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 qjackctlSocketForm Socket - JACK Audio Connection Kit Anschluss - JACK Audio Connection Kit &Socket &Anschluss &Name (alias): &Name (Alias): Socket name (an alias for client name) Anschlussbenennung (Alias für Name des Clients) Client name (regular expression) Name des Clients (Regulärer Ausdruck) Add plug to socket plug list Füge Anschluss zur Liste hinzu Add P&lug &Anschluss hinzufügen Alt+L Alt+A &Plug: A&nschluss: Port name (regular expression) Anschlussbezeichnung (Regulärer Ausdruck) Socket plug list Anschlussliste Socket Plugs / Ports Socket-Anschlüsse Edit currently selected plug Ausgewählten Anschluss bearbeiten &Edit &Bearbeiten Alt+E Alt+B Remove currently selected plug from socket plug list Ausgewählten Anschluss von der Liste entfernen &Remove En&tfernen Alt+R Alt+T &Client: &Client: Move down currently selected plug in socket plug list Ausgewählten Anschluss in Liste nach unten schieben &Down A&b Alt+D Alt+B Move up current selected plug in socket plug list Ausgewählten Anschluss in Liste nach oben schieben &Up Au&f Alt+U Alt+F Enforce only one exclusive cable connection Erzwinge eine singuläre Kabelverbindung E&xclusive E&xklusiv Alt+X Alt+X &Forward: &Weiterleiten: Forward (clone) all connections from this socket Alle Verbindungen dieses Anschlusses weiterleiten (klonen) Type Typ Audio socket type (JACK) JACK-Audio-Anbindung &Audio JACK-&Audio Alt+A Alt+A MIDI socket type (JACK) JACK-MIDI-Anbindung &MIDI JACK-&MIDI Alt+M Alt+M MIDI socket type (ALSA) ALSA-MIDI-Anbindung AL&SA AL&SA-MIDI Alt+S Alt+S Plugs / Ports Anschlüsse Error Fehler A socket named "%1" already exists. Socket mit dem Namen "%1" existiert bereits. Warning Warnung Some settings have been changed. Do you want to apply the changes? Einige Einstellungen wurden verändert. Wollen Sie diese übernehmen? Add Plug Anschluss hinzufügen Edit Bearbeiten Remove Entfernen Move Up Auf Move Down Ab (None) (Keiner) qjackctlSocketList Output Ausgang Input Eingang Socket Anbindung <New> - %1 <Neu> - %1 Warning Warnung %1 about to be removed: "%2" Are you sure? %1 soll entfernt werden: "%2" Sind Sie sicher? %1 <Copy> - %2 %1 <Kopieren> - %2 qjackctlSocketListView Output Sockets / Plugs Ausgangsanschlüsse Input Sockets / Plugs Eingangsanschlüsse qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_nl.ts0000644000175000001440000000012412113664610022553 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826685.102395 30 ctime=1364826685.119395505 qjackctl-0.3.10/src/translations/qjackctl_nl.ts0000644000175000001440000060710012113664610022046 0ustar00rncbcusers00000000000000 QObject (default) (standaard) Usage Utilisation options options command-and-args commande-et-args Options Options Start JACK audio server immediately De JACK audio server onmiddlijk starten Set default setings preset name Régler le nom du préréglage des paramètres par défaut 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). Qt: %1 Qt : %1 Set default settings preset name Kies standaard instellingen preset naam qjackctlAboutForm About QjackCtl Over QjackCtl About Qt Over Qt &Close &Sluiten Alt+C Alt+S Version Versie Build "I build" is translated in Dutch to "Ik bouw", but "build" could also be translated as "compilatie" which comes from "to compile" Bouw Using: JACK %1 Gebruikt : JACK %1 Debugging option enabled. Debug optie geactiveerd. System tray disabled. Systeem pictogram uitgeschakeld. Transport status control disabled. Transport status controle uitgeschakeld. Realtime status disabled. Realtime status uitgeschakeld. XRUN delay status disabled. XRUN delay status uitgeschakeld. Maximum delay status disabled. Maximum delay status uitgeschakeld. JACK Session support disabled. Jack Sessie ondersteuning uitgeschakeld. ALSA/MIDI sequencer support disabled. ALSA/MIDI sequencer ondersteuning uitgeschakeld. Website Webstek This program is free software; you can redistribute it and/or modify it Dit programma is vrije software; je mag het doorgeven en/of aanpassen under the terms of the GNU General Public License version 2 or later. volgens de bepalingen in de GNU-General Public Licentie versie 2 of later. JACK MIDI support disabled. JACK MIDI ondersteuning uitgeschakeld. JACK Port aliases support disabled. JACK Poort alias ondersteuning uitgeschakeld. D-Bus interface support disabled. D-Bus interface ondersteuning uitgeschakeld. qjackctlClientListView Readable Clients Clients en lecture Output Ports Ports de sortie Writable Clients Clients en ecriture Input Ports Ports d'entrée &Connect &Verbinden Alt+C Connect Koppelen Alt+K &Disconnect Af&Koppelen Alt+D Disconnect Afkoppelen Alt+K Disconnect &All &Alles afkoppelen Alt+A Disconect All Alles afkoppelen Alt+A Re&name Her&noemen Alt+N Rename Hernoemen Alt+N &Refresh Ve&rversen Alt+R Refresh Verversen Alt+R Readable Clients / Output Ports Leesbare clients / Uitgangspoorten Writable Clients / Input Ports Beschrijfbare clients / ingangspoorten qjackctlConnect Warning Opgelet This will suspend sound processing Cela va suspendre le traitement du son from all client applications. de toutes les applications clientes. Are you sure? Êtes-vous certain? Yes Oui No Non This will suspend sound processing from all client applications. Are you sure? Dit zal het verwerken van geluid onderbreken voor alle client toepassingen. Bent u zeker? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Verbindingen - JACK Audio Connectie Kit Audio Audio &Connect &Verbinden Alt+C Alt+V Connect currently selected ports Verbind geselecteerde poorten &Disconnect Af&Koppelen Alt+D Alt+K Disconnect currently selected ports Geselecteerde poorten loskoppelen Disconnect &All &Alles afkoppelen Alt+A Alt+A Disconnect all currently connected ports Alle verbonden poorten afkoppelen Expand all client ports Toon alle client poorten E&xpand All &Toon alles Alt+X Alt+T &Refresh Ve&rversen Alt+R Alt+r Refresh current connections view Ververs huidig verbindingen venster MIDI MIDI Warning Opgelet The preset aliases have been changed: Les alias de préréglage ont été changés: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Cancel Annuler 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 Alt+V qjackctlMainForm QjackCtl QjackCtl Alt+Q Sluiten Alt+S &Quit &Sluiten Quit processing and exit Stop proces en sluit af Alt+S Alt+r &Start Sta&rt Start the JACK server Start de JACK server Alt+T Alt+T S&top S&top Stop the JACK server Stop de JACK server St&atus St&atus Show/hide the extended status window Montrer/cacher la fenêtre de statut étendu Alt+B Alt+T Ab&out... &over… Show information about this application Toon informatie over deze toepassing Alt+E S&etup... R&églages... Show settings and options dialog Toon instellingen en opties venster Alt+M Alt+B &Messages &Berichten Show/hide the messages log window Montrer/cacher la fenêtre du journal des messages &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 Alt+C Alt+V &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 CPU Load Charge processeur Sample rate No translation known to Dutch Sample rate XRUN Count Décompte des désynchronisations (XRUN) 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 &Backward &Terug Backward transport Terugwaarts afspelen Alt+F Alt+V &Forward &Voorwaarts Forward transport Voorwaarts afspelen Alt+R Alt+R &Rewind Te&rugspoelen Rewind transport Terugspoelen Alt+U Alt+U Pa&use Pa&use Stop transport rolling Stop het afspelen Alt+P Alt+P &Play &Spelen Start transport rolling Start het afspelen Could not open ALSA sequencer as a client. MIDI patchbay will be not available. Impossible d'ouvrir le sequenceur ALSA comme client. La baie de brassage MIDI ne sera pas disponible. Warning Opgelet JACK is currently running. JACK fonctionne actuellement. Do you want to terminate the JACK audio server? Voulez-vous arrêter le serveur audio JACK? Terminate Arrêter Leave Laisser Cancel Annuler successfully met succes with exit status=%1 met exit status=%1 Could not start JACK. Impossible de démarrer JACK. Maybe JACK audio server is already started. Peut-être que le serveur audio JACK est déjà démarré. Stop Arrêter Kill Tuer Could not load preset "%1". Retrying with default. Kon de preset « %1 » niet laden. Opnieuw aan het proberen met standaard. Could not load default preset. Sorry. Kon de standaard preset niet inladen. Sorry. Startup script... Opstart script... Startup script terminated Opstart script beëindigd JACK is starting... JACK start op... Could not start JACK. Sorry. JACK kon niet opstarten. Sorry. JACK was started with PID=%1 (0x%2). JACK a été démarrer avec le PID=%1 (0x%2). Some client audio applications Certaines applications audio clientes are still active and connected. sont encore actives et connectées. Do you want to stop the JACK audio server? Voulez-vous arrêter le serveur audio JACK? JACK is stopping... JACK stopt... Shutdown script... Afsluit script... 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 Error Fout Transport BBT (bar:beat.ticks) Transport MTT (maat:tel.tikken) 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 Could not load active patchbay definition. Disabled. Kon de actieve patchbay definitie niet inlezen. Uitgeschakeld. Patchbay activated. Patchbay ingeschakeld. Patchbay deactivated. Patchbay uitgeschakeld. Statistics reset. Initialisatie van statistieken. msec ms Audio connection graph change. Changement du graphique des connexions audio. XRUN callback (%1). Buffer size change (%1). Buffergrootte aanpassing (%1). Shutdown notification. Afluit melding. MIDI connection graph change. Changement du graphique des connexions MIDI. Audio active patchbay scan Balayage de la baie de brassage audio active MIDI active patchbay scan Balayage de la baie de brassage MIDI active Audio connection change. Changement des connexions audio. MIDI connection change. Changement des connexions MIDI. 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 Could not connect to JACK server as client. Please check the messages window for more info. Impossible de connecter le serveur JACK comme client. Veuillez consulter la fenêtre des messages pour plus d'informations. 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 Hz Hz frames échantillons Yes Ja No Nee 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 &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. OK OK 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? JACK wordt momenteel gebruikt. 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" in the context menu of the system tray icon. Het programma zal in de systeem balk blijven lopen. Om het programma te stoppen, gelieve « Sluiten » te kiezen in het menu van het systeem balk icoon. Could not start JACK. Maybe JACK audio server is already started. Kon JACK niet starten. 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 DBUS : JACK server kon niet worden gestart. Sorry Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Sommige client audio toepassingen zijn nog steeds actief en verbonden. 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 D-BUS : JACK server kon niet worden gestopt. 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) Could not load active patchbay definition. "%1" Disabled. 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). 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. Kon niet verbinden als client met de JACK server. - %1 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… &Refresh Ve&rversen D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS : SetParameterValue('%1', '%2') : %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS : ResetParameterValue('%1') : %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) D-BUS : GetParameterValue('%1') : %2. (%3) Could not open ALSA sequencer as a client. ALSA MIDI patchbay will be not available. Kon de ALSA sequencer niet als client openen. De ALSA MIDI patchbay zal niet beschikbaar zijn. The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. Le programme continuera de s'exécuter dans la zone de notification système. Pour terminer le programme, merci de choisir "Quitter" dans le menu contextuel de la zone de notification système. 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: %1 -> %2 Do you want to remove the patchbay connection? Er is een patchbay definitie actief, die deze verbinding waarschijnlijk zal herstellen: %1 -> %2 Wil u de patchbay verbinding verwijderen? Remove Enlever Alt+A Alt+T Alt+O Alt+o Shift+Space Shift+Spatie Space Spatie qjackctlMessagesForm Messages - JACK Audio Connection Kit Messages - Kit de Connexion Audio JACK Messages log Messages Messages output log Journal des messages de sortie Logging stopped --- %1 --- Journalisation arrêtée --- %1 --- Logging started --- %1 --- Journalisation démarrée --- %1 --- qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Meldingen / Status - JACK Audio Connectie Kit &Messages &Meldingen Messages log Meldingen logboek Messages output log Meldingen uitgang logboek &Status &Status Status information Status informatie Statistics since last server startup Statistiek sinds laatste server opstart Description Beschrijving Value Waarde Reset XRUN statistic values Initialiseer XRUN statistiek waarden Re&set Alt+S Alt+S Refresh XRUN statistic values Ververs XRUN statistiek waarden &Refresh &Ververs Alt+R Alt+V Server name Server naam Server state Server status DSP Load DSP lading Sample Rate Buffer Size Buffergrootte Realtime Mode Realtime Modus Transport state Transport status Transport Timecode Transport Tijdscode Transport BBT Transport BPM XRUN count since last server startup Aantal XRUNS sinds laatste server opstart XRUN last time detected Laatst opgemerkte XRUN XRUN last Laatste XRUN XRUN maximum XRUN minimum XRUN average XRUN gemiddelde XRUN total XRUN totaal Maximum scheduling delay Time of last reset Tijd sinds laatste reset Logging stopped --- %1 --- Loggen gestopt --- %1 --- Logging started --- %1 --- Loggen gestart --- %1 --- qjackctlPatchbay Warning Opgelet This will disconnect all sockets. Cela va déconnecter toutes les prises. Are you sure? Êtes vous certain? Yes Oui No Non This will disconnect all sockets. Are you sure? Dit zal alle sockets ontkoppelen. Bent u zeker? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Patchbay - JACK Audio Connectie Kit &New &Nieuw Alt+N Alt+N Create a new patchbay profile Creëer een nieuw patchbay profiel &Load... &Laden… Alt+L Alt+L Load patchbay profile Laad patchbay profiel &Save... &Bewaren... Alt+S Alt+B Save current patchbay profile Bewaar huidig patchbay profiel Expand all items Toon alle items E&xpand All &Toon alle Alt+X Alt+T Current (recent) patchbay profile(s) Huidig (recent) patchbay profiel(en) Acti&vate Acti&veer Alt+V Alt+V Toggle activation of current patchbay profile Schakel activatie van huidig patchbay profiel in/uit &Connect &Verbind Alt+C Alt+V Connect currently selected sockets Verbind huidige geselecteerde sockets &Disconnect &Ontkoppel Alt+D Alt+O Disconnect currently selected sockets Ontkoppel huidig geselecteerde sockets Disconnect &All Ontkoppel &alle Alt+A Alt+a Disconnect all currently connected sockets Ontkoppel alle huidige verbonden sockets &Refresh Ve&rvers Alt+R Alt+r Refresh current patchbay view Ververs huidig patchbay venster Down Omlaag Move currently selected output socket down one position Verplaats de geselecteerde uitgang socket één positie omlaag Add... Voeg toe… Create a new output socket Creëer een nieuwe uitgang socket Edit... Bewerk... Edit currently selected input socket properties Bewerk eigenschappen van geselecteerde ingang socket Up Omhoog Move currently selected output socket up one position Verplaats de geselecteerde uitgang socket één positie omhoog Remove Verwijder Remove currently selected output socket Verwijder de geselecteerde uitgang socket Copy... Kopieer… Duplicate (copy) currently selected output socket Dupliceer de geselecteerde uitgang socket Remove currently selected input socket Verwijder de geselecteerde uitgang socket Duplicate (copy) currently selected input socket Dupliceer de geselecteerde ingang socket Create a new input socket Creëer een nieuwe ingang socket Edit currently selected output socket properties Bewerk eigenschappen van geselecteerde uitgang socket Warning Opgelet The patchbay definition has been changed: La définition de baie de brassage a été changée: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Cancel Annuler modified modifié Untitled Sans titre Error Fout Could not load patchbay definition file: Impossible de charger le fichier de définition de baie de brassage: Could not save patchbay definition file: Impossible d'enregistrer le fichier de définition de baie de brassage: New Patchbay definition Nieuwe patchbay definitie Create patchbay definition as a snapshot Prendre un cliché de toutes les connexions clientes actuelles of all actual client connections? pour créer une définition de baie de brassage? Yes Oui No Non 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" Do you want to save the changes? De patchbay definitie is aangepast : « %1 » Wil u de veranderingen bewaren? %1 [modified] %1 [aangepast] Untitled%1 Ongetieteld%1 Could not load patchbay definition file: "%1" Kon patchbay definite bestand niet laden : « %1 » Could not save patchbay definition file: "%1" Kon patchbay definitie bestand niet bewaren : « %1 » Create patchbay definition as a snapshot of all actual client connections? Creëer patchbay definitie als een momentopname van alle huidige client verbindingen? 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 Alt+R qjackctlSessionForm Session - JACK Audio Connection Kit Sessie - JACK Audio Connectie Kit Load session Laad sessie &Load... &Laden… Recent session Vorige sessie &Recent Vo&rige Save session Bewaar sessie Save session versioning &Versioning Re&fresh Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit B&ewerken Remove infra-client Re&move &Remove &Verwijderen &Save... &Bewaar… Save Bewaar Save and Quit Bewaren en afsluiten Save Template Bewaar sjabloon Update session Sessie updaten &Refresh Ve&rvers Client / Ports Client / Poorten UUID UUID Command Opdracht &Save &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" Een sessie werd niet gevonden in deze map: « %1 » %1: loading session... %1 : sessie laden… %1: load session %2. %1: sessie laden %2. A session already exists in this folder: "%1" Are you sure to overwrite the existing session? Een sessie bestaat al in deze map: « %1 » Bent u zeker dat u deze bestaande sessie wil overschrijven ? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Deze map bestaat al en is niet leeg : « %1 » 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… qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Instellingen - JACK Audio Connectie Kit Settings Instellingen Preset &Name: Preset &Naam: (default) (standaard) Settings preset name Naam instellingen preset &Save &Bewaren Alt+S Alt+B Save settings as current preset name Bewaar instellingen als huidige preset naam &Delete &Wissen Alt+D Alt+W Delete current settings preset Huidige instellingen preset wissen Server Server Server &Path: &Pad naar server : jackstart jackstart jackd jackd jackd-realtime jackd-realtime The JACK Audio Connection Kit sound server path Locatie van JACK geluid server Driv&er: Driv&er: dummy dummie oss oss alsa alsa portaudio portaudio coreaudio coreaudio freebob freebob The software driver to use Pilote logiciel à utiliser Parameters 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 : &Channel: &Canal: 21333 21333 Number o microseconds to wait between engine processes (dummy) Nombre de microsecondes à attendre entre les traitements du moteur (factice) 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): PCM channel Canal PCM &Timeout (msec): &Timeout (in ms) : 200 200 500 500 1000 1000 2000 2000 5000 5000 10000 10000 Set client timeout limit in miliseconds Zet client timeout limiet in milisecondes &Realtime &Realtime Alt+R Alt+R Use realtime scheduling Gebruik realtime scheduling No Memory Loc&k Geen Memory Loc&k Alt+K Alt+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 Alt+U Alt+U 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 Alt+F Alt+F Ignore xruns reported by the backend driver Negeer xruns meldingen van de backend driver &Monitor &Monitor Alt+M Alt+M Provide output monitor ports Voorzie monitor uitgang poorten Force &16bit Forceer &16bit Alt+1 Alt+1 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 Alt+O Alt+O Enable hardware monitoring of capture ports Schakel hardware monitor van opnamepoorten in H/&W Meter H/&W Meter Alt+W Alt+W Enable hardware metering on cards that support it Schakel hardware meten in op kaarten die het ondersteunen &Ignore H/W &Negeer H/W Alt+I Alt+N Ignore hardware period/buffer size Negeer hardware period/buffer grootte &Output Device: &Output Apparaat: &Output Channels: &Output Kanalen : &Interface: &Interface : Maximum input audio hardware channels to allocate Maximum bruikbare input audio hardware kanalen &Audio: &Audio: &Input Latency: &Input Latency: 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 default par défaut hw:0 hw:0 hw:1 hw:1 The PCM device name to use De PCM apparaats naam te gebruiken > > Select output device for playback Kies output apparaat voor afspelen &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 &Output Latency: &Output Vertraging: Maximum output audio hardware channels to allocate Maximum bruikbare output audio hardware kanalen Alternate output device for playback Alternatief output apparaat voor afspelen &Input Channels: &Input Kanalen: Select input device for capture Kies input apparaat voor opname Select PCM device name Kies PCM apparaatsnaam External input latency (frames) Externe input vertraging (in frames) None Geen Rectangular Blok Shaped Sinus Triangular Driehoek Set dither mode Kies dither modus &Verbose messages output Sortie de messages ba&varde Alt+V Alt+V Whether to give verbose output on messages Geef veel info bij berichten Start De&lay (secs): Start De&lay (s): 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: 0 0 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: Alt+T Alt+n 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 Alt+C Alt+o 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 &Ignore first XRUN occurrence on statistics &Ignorer la première occurence de désynchronisation (XRUN) dans les statistiques Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) Ignorer la première désynchronisation (XRUN) au démarrage du serveur (susceptible de se produire sur les serveurs pre-0.80.0) Connections Verbindingen 5 5 10 10 20 20 30 30 60 60 120 120 Time in seconds between each auto-refresh cycle Tijd in seconden tussen elke auto refresh cyclus 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 &Auto refresh connections Patchbay, every (secs): Patchbay verbindingen &automatisch verversen, elke ... (in s): Alt+A Alt+A Whether to refresh the connections patchbay automatically Patchbay verbindingen automatisch verversen Activate &Patchbay persistence: Activeer &Patchbay bewaring: Alt+P Alt+P 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) Alt+B Alt+B Elapsed time since last &Reset Verlopen tijd sinds laatste &Reset Elapsed time since last &XRUN Verlopen tijd sinds laatste &XRUN Alt+X Alt+X 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 Alt+N Alt+O 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 Alt+Z Alt+Z 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 Alt+E Alt+E Whether to enable the system tray icon Minimaliseren naar systeem balk icoon of niet &Delay window positioning at startup &Vertraag venster positionering bij opstarten Whether to delay window positioning at application startup Het positioneren van het venster vertragen bij opstarten van de toepassing 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 Alt+L Alt+L 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 OK OK Cancel Annuler Warning Opgelet Some settings have been changed: Des paramètres ont été changés: Do you want to save the changes? Voulez-vous enregistrer les changements? Save Enregistrer Discard Ignorer Delete preset: Effacer préréglage: Are you sure? Êtes vous certain? 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 Some settings have been changed. Des paramètres ont été modifiés. Do you want to apply the changes? Voulez-vous appliquer les changements? Apply Appliquer The audio backend driver interface to use De te gebruiken audio backend driver interface &Verbose messages Uit&voerige berichten MIDI Driv&er: MIDI Driv&er: none geen raw raw seq seq 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" Do you want to save the changes? Sommige instellingen zijn veranderd: « %1 » Wil u deze aanpassingen opslaan? Delete preset: "%1" Are you sure? Verwijder preset : « %1 » Bent u zeker? Some settings have been changed. Do you want to apply the changes? Sommige instellingen zijn veranderd. Wil u de veranderingen toepassen? Messages Log Berichten Log Log files Log bestanden sun sun netone netone /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 &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 Alt+Q Alt+S Whether to start minimized to system tray Start met geminimaliseerd systeem balk icoon Start minimi&zed to system tray Start ge&minimaliseerd in systeem balk 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 E&nable ALSA Sequencer support Activeer &ALSA Sequencer ondersteuning Whether to stop JACK audio server on application exit S&top JACK audio server on application exit 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 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) qjackctlSocketForm Socket - JACK Audio Connection Kit Socket - JACK Audio Connectie Kit OK OK Cancel Annuler &Socket &Socket &Name (alias): &Naam (alias): Socket name (an alias for client name) Socket naam (een alias voor client naam) Client name (regular expression) Client naam (reguliere expressie) Add P&lug Plug &toevoegen Alt+L Alt+L Add plug to socket plug list Plug toevoegen aan socket plug lijst &Plug: &Plug: Port name (regular expression) Poort naam (reguliere expressie) Socket Plugs / Ports Socket Plugs / Poorten Socket plug list Socket plug lijst &Edit B&ewerken Alt+E Alt+E Edit currently selected plug/port Éditer la fiche/le port actuellement sélectionné &Remove &Verwijderen Alt+R Alt+V Remove currently selected plug from socket plug list Verwijder geselecteerde plug uit socket plug lijst &Client: &Client: &Down Om&laag Alt+D Alt+L Move down currently selected plug socket plugst Déplacer vers le bas la fiche actuellement sélectionnée dans la liste des prises &Up Om&hoog Alt+U Alt+H Move up current selected plug socket plugst Déplacer vers le haut la fiche actuellement sélectionnée dans la liste des prises E&xclusive E&xclusief Alt+X Alt+X Enforce only one exclusive cable connection Sta slechts één enkele aansluiting toe &Forward: &Stuur door: Forward (clone) all connections from this socket Stuur alle verbindingen van deze socket door (clonen) Type Type &Audio &Audio Alt+A Alt+A Audio socket type (JACK) Audio socket type (JACK) &MIDI &MIDI Alt+M Alt+M MIDI socket type (ALSA) MIDI socket type (ALSA) Plugs / Ports Plugs / Poorten Add Plug Plug toevoegen Remove Verwijder Edit Bewerken Error Fout A socket named "%1" already exists. Een socket genaamd « %1 » bestaat al. Move Up Omhoog Move Down Omlaag (None) (Geen) Edit currently selected plug Bewerk de geselecteerde plug Move down currently selected plug in socket plug list Verplaats geselecteerde plug omlaag in socket plug lijst Move up current selected plug in socket plug list Verplaats geselecteerde plug omhoog in socket plug lijst Warning Opgelet Some settings have been changed. Do you want to apply the changes? Sommige instellingen zijn veranderd. Wil u de veranderingen toepassen? Apply Appliquer Discard Ignorer MIDI socket type (JACK) MIDI socket type (JACK) AL&SA AL&SA Alt+S Alt+S qjackctlSocketList Output Uitgang Input Ingang Socket Socket New Nouvelle Warning Opgelet about to be removed sur le point d'être enlevée Are you sure? Êtes-vous certain? Yes Oui No Non Copy Copie <New> - %1 <Nieuw> - %1 %1 about to be removed: "%2" Are you sure? %1 zal verwijderd worden: « %2 » Bent u zeker? %1 <Copy> - %2 %1 <Kopiëer> - %2 qjackctlSocketListView Output Sockets Prises de Sortie Plugs Fiches Input Sockets Prises d'Entrée Output Sockets / Plugs Uitgang Sockets / Plugs Input Sockets / Plugs Ingang Sockets / Plugs qjackctlStatusForm Status - JACK Audio Connection Kit Statut - Kit de Connexion Audio JACK Description Description Value Valeur Statistics since last server startup Statistiques depuis le dernier démarrage du serveur Re&set Réinitiali&ser Alt+S Alt+S Reset XRUN statistic values Réinitialiser les valeurs statistiques des désynchronisations (XRUN) &Refresh &Rafraîchir Alt+R Alt+R Refresh XRUN statistic values Rafraîchir les valeurs statistiques des désynchronisations (XRUN) Time of last reset Temps depuis la dernière réinitialisation Maximum scheduling delay Délai d'ordonnancement maximal XRUN count since last server startup Décompte des désynchronisations (XRUN) depuis le dernier démarrage du serveur XRUN total Nombre total de désynchronisation (XRUN) XRUN average Moyenne de désynchronisation (XRUN) XRUN minimum Nombre minimal de désynchronisation (XRUN) XRUN maximum Nombre maximal de désynchronisation (XRUN) XRUN last Dernière désynchronisation (XRUN) XRUN last time detected Horaire de la dernière désynchronisation (XRUN) détectée Transport state État du déplacement Transport BPM BPM du déplacement Transport BBT MTB du déplacement Transport Timecode Code temporel (Timecode) du déplacement Realtime Mode Mode temps réel Buffer Size Taille du tampon Sample Rate Fréquence d'échantillonnage CPU Load Charge processeur Server state État du serveur DSP Load Charge DSP qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_ru.ts0000644000175000001440000000012412113664610022570 xustar000000000000000027 mtime=1362061704.543721 27 atime=1364826684.979395 30 ctime=1364826685.022395503 qjackctl-0.3.10/src/translations/qjackctl_ru.ts0000644000175000001440000060624512113664610022074 0ustar00rncbcusers00000000000000 QObject Show help about command line options Показать Ñправку по иÑпользованию параметров командной Ñтроки Start JACK audio server immediately Ðемедленно запуÑтить Ñервер JACK Show version information Показать информацию о верÑии Option -p requires an argument (preset). Ключ -p требует аргумента (преÑет). (default) (как обычно) 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 необходим аргумент (раÑположение) Qt: %1 Qt: %1 Set default JACK audio server name Option -n requires an argument (name). qjackctlAboutForm About Qt О Qt &Close &Закрыть Alt+C Alt+C Version ВерÑÐ¸Ñ Build Сборка Using: JACK %1 ИÑпользуетÑÑ JACK %1 Transport status control disabled. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ñ€Ð°Ð½Ñпортом отключён. Realtime status disabled. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ€ÐµÐ¶Ð¸Ð¼Ð° реального времени отключён. JACK Session support disabled. Поддержка JACK Session отключена. Website ДомашнÑÑ Ñтраница This program is free software; you can redistribute it and/or modify it Это программа ÑвлÑетÑÑ Ñвободной; вы можете раÑпроÑтранÑть и/или изменÑть её без ограничений under the terms of the GNU General Public License version 2 or later. на уÑловиÑÑ… лицензии GNU General Public License верÑии 2 или более новой. Debugging option enabled. Параметр отладки включен. System tray disabled. ОблаÑть ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð°. XRUN delay status disabled. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ¸ XRUN отключен. Maximum delay status disabled. Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¼Ð°ÐºÑимальной задержки отключен. JACK MIDI support disabled. Поддержка JACK MIDI отключена. ALSA/MIDI sequencer support disabled. Поддержка ÑеквенÑера ALSA/MIDI отключена. About QjackCtl о QJackCtl JACK Port aliases support disabled. Поддержка алиаÑов портов JACK отключена. D-Bus interface support disabled. Поддержка интерфейÑа D-Bus отключена. qjackctlClientListView Readable Clients / Output Ports Порты выхода Writable Clients / Input Ports Порты входа &Connect &Соединить Alt+C Connect Alt+Ñ &Disconnect &РаÑÑоединить Alt+D Disconnect Alt+Ñ€ Disconnect &All РаÑÑоединить &вÑе Alt+A Disconect All Alt+в Re&name Пере&именовать Alt+N Rename Alt+и &Refresh &Обновить Alt+R Refresh Alt+о qjackctlConnect Warning Предупреждение Yes Да No Ðет This will suspend sound processing from all client applications. Are you sure? Обработка звука от клиентÑких приложений будет прекращена. Ð’Ñ‹ уверены? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ &Connect &Соединить Alt+C Alt+C Connect currently selected ports Соединить выбранные ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ñ€Ñ‚Ñ‹ &Disconnect &РаÑÑоединить Alt+D Alt+D Disconnect currently selected ports РаÑÑоединить выбранные ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ñ€Ñ‚Ñ‹ Disconnect &All РаÑÑоединить &вÑе Alt+A Alt+A Disconnect all currently connected ports РаÑÑоединить вÑе Ñоединённые ÑÐµÐ¹Ñ‡Ð°Ñ Ð¿Ð¾Ñ€Ñ‚Ñ‹ Expand all client ports РаÑкрыть вÑе порты клиентов E&xpand All &РаÑкрыть вÑе Alt+X Alt+X &Refresh &Обновить Alt+R Alt+R Refresh current connections view Обновить отображение текущих Ñоединений Audio Звук MIDI MIDI Warning Предупреждение The preset aliases have been changed: "%1" Do you want to save the changes? ÐлиаÑÑ‹ профилей изменилиÑÑŒ: "%1" Ð’Ñ‹ хотите Ñохранить изменениÑ? Save Сохранить Discard ОтказатьÑÑ Cancel Отменить ALSA ALSA qjackctlConnectorView &Connect &Соединить Alt+C Connect Alt+Ñ &Disconnect &РаÑÑоединить Alt+D Disconnect Alt+Ñ€ Disconnect &All РаÑÑоединить &вÑе Alt+A Disconect All Alt+в &Refresh &Обновить Alt+R Refresh Alt+о qjackctlMainForm &Start &ЗапуÑтить Start the JACK server ЗапуÑтить Ñервер JACK S&top С&топ Stop the JACK server ОÑтановить Ñервер JACK &Quit Ð’&ыход Quit processing and exit ОÑтановить Ñервер и выйти из программы Stop ОÑтановка Kill Уничтожить Cancel Отменить 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 Ð’Ñ€ÐµÐ¼Ñ Ñ‚Ñ€Ð°Ð½Ñпорта Alt+Q Alt+Q Alt+S Alt+S Alt+T Alt+T &Play &ВоÑпроизвеÑти Alt+P Alt+P Start transport rolling ЗапуÑтить воÑпроизведение через транÑпорт Pa&use Пау&за Alt+U Alt+з Stop transport rolling ОÑтановить воÑпроизведение Ñ Ñ‚Ñ€Ð°Ð½Ñпорта St&atus С&Ñ‚Ð°Ñ‚ÑƒÑ Show/hide the extended status window Показать/Ñкрыть раÑширенное окно ÑтатуÑа Ab&out... О про&грамме... Show information about this application Показать информацию о приложении S&etup... &Параметры Alt+E Alt+п Show settings and options dialog Показать диалог наÑтройки программы &Messages С&Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Show/hide the messages log window Показать/Ñкрыть окно Ñ Ð¶ÑƒÑ€Ð½Ð°Ð»Ð¾Ð¼ Ñообщений Patch&bay &Коммутатор Alt+B Alt+B Show/hide the patchbay editor window Показать/Ñкрыть окно коммутатора &Connections Сое&Ð´Ð¸Ð½ÐµÐ½Ð¸Ñ Alt+C Alt+C Show/hide the actual connections patchbay window Показать/ÑпрÑтать окно коммутатора Ñ Ð°ÐºÑ‚ÑƒÐ°Ð»ÑŒÐ½Ñ‹Ð¼Ð¸ ÑоединениÑми OK ОК successfully уÑпешно Activating ÐктивируетÑÑ Starting ЗапуÑк 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. Программа продолжит работать в облаÑти уведомлениÑ. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ в контекÑтном меню облаÑти ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¿ÑƒÐ½ÐºÑ‚ «Выход». Startup script... Сценарий, выполнÑемый при запуÑке... Startup script terminated Выполнение Ñтартового ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¾ Started Запущен Stopping ОÑтановка JACK was stopped Cервер JACK оÑтановлен Shutdown script... ПоÑлеоÑтановочный Ñценарий... Shutdown script terminated Выполнение поÑлеоÑтановочного ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð¿Ñ€ÐµÐºÑ€Ð°Ñ‰ÐµÐ½Ð¾ Inactive Ðе активен Active Ðктивен Stopped Стоп Transport BBT (bar:beat.ticks) BBT транÑпорта (такт:долÑ.тики) Could not load active patchbay definition. "%1" Disabled. Ðе удалоÑÑŒ загрузиь опиÑание активного коммутатора. "%1" Отключено. 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 раÑÑоединено Terminate Завершить Command line argument... Ðргумент Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ Ñтроки... Command line argument started Information Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ 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. Ðе удалоÑÑŒ открыть ÑеквенÑер ALSA как клиентÑкое приложение. Коммутатор 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). The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. Программа будет Ñкрыта в облаÑть уведомлениÑ. Ð”Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹ в контекÑтном меню значка программы в облаÑти ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð²Ñ‹Ð±ÐµÑ€Ð¸Ñ‚Ðµ пункт «Выход». Warning Предупреждение JACK is currently running. Do you want to terminate the JACK audio server? Сервер JACK работает. Ð’Ñ‹ хотите оÑтановить его? with exit status=%1 Ñо ÑтатуÑом выхода %1 Could not start JACK. Maybe JACK audio server is already started. Ðе удалоÑÑŒ запуÑтить JACK. Возможно, звуковой Ñервер уже запущен. Could not load preset "%1". Retrying with default. Ðе удалоÑÑŒ загрузить профиль "%1". Попытка загрузить иÑпользуемый по умолчанию профиль. Could not load default preset. Sorry. Ðе удалоÑÑŒ запуÑтить профиль по умолчанию. Извините. D-BUS: JACK server is starting... D-BUS: запуÑкаетÑÑ Ñервер JACK... D-BUS: JACK server could not be started. Sorry D-BUS: не удалоÑÑŒ запуÑтить Ñервер JACK. Извините. Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Ðекоторые клиентÑкие звуковые Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð²ÑÑ‘ ещё активны и подÑоединены. Ð’Ñ‹ хотите оÑтановить звуковой Ñервер JACK? D-BUS: JACK server is stopping... D-BUS: Ñервер JACK оÑтанавливаетÑÑ... D-BUS: JACK server could not be stopped. Sorry D-BUS: не удалоÑÑŒ оÑтановить Ñервер JACK. Извините. Post-shutdown script... Post-shutdown script terminated JACK was started with PID=%1. JACK был запущен Ñ PID=%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 activated. Коммутатор активирован. Patchbay deactivated. Коммутатор деактивирован. JACK connection graph change. Смена графа Ñоединений JACK. XRUN callback (%1). Buffer size change (%1). Смена размера буфера (%1). Could not start JACK. Sorry. Ðе удалоÑÑŒ запуÑтить JACK. Извините. JACK has crashed. JACK timed out. JACK write error. Ошибка запиÑи JACK. JACK read error. Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ JACK. Unknown JACK error (%d). ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° JACK (%d). 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: %1 -> %2 Do you want to remove the patchbay connection? %1 (%2%, %3 xruns) &Versioning &ВерÑии Re&fresh О&бновить D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) Remove Удалить 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. - %1 ПроÑмотрите вывод в окне Ñообщений. 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... Сохранить &шаблон &Refresh &Обновить &Transport &ТранÑпорт &Rewind К &началу QjackCtl QjackCtl Set&up... &Параметры Alt+M &Patchbay &Коммутатор &Connect &Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ DSP Load Загрузка DSP XRUN Count (notifications) ЧиÑло XRUN (уведомлений) Show/hide the session management window Show/hide the messages log/status window Backward transport Перемотать назад &Backward Ð&азад Forward transport Перемотать вперёд &Forward &Вперёд Alt+F Alt+в Rewind transport Перемотать к началу Alt+R Alt+а Alt+O Alt+к Shift+Space Shift+Пробел Space Пробел qjackctlMessagesForm Messages - JACK Audio Connection Kit Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Logging stopped --- %1 --- Журналирование оÑтановлено --- %1 --- Logging started --- %1 --- Журналирование запущено --- %1 --- Messages output log Журнал выведенных Ñообщений qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¸ ÑÑ‚Ð°Ñ‚ÑƒÑ &Messages С&Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Messages log Журнал Ñообщений Messages output log Журнал выведенных Ñообщений &Status С&Ñ‚Ð°Ñ‚ÑƒÑ Status information Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑтатуÑе Statistics since last server startup СтатиÑтика Ñ Ð¿Ð¾Ñледнего запуÑка Ñервера Description ОпиÑание Value Значение Reset XRUN statistic values Обнулить ÑтатиÑтику по раÑÑинхронизации Re&set С&броÑить Alt+S Alt+б Refresh XRUN statistic values Обновить ÑтатиÑтику по раÑÑинхронизации &Refresh &Обновить Alt+R Alt+о Server name Ð˜Ð¼Ñ Ñервера Server state Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñервера DSP Load Загрузка DSP Sample Rate ЧаÑтота ÑÑÐ¼Ð¿Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Buffer Size Размер буфера Realtime Mode Режим реального времени Transport state СоÑтоÑние транÑпорта Transport Timecode Тайм-код транÑпорта Transport BBT BBT транÑпорта Transport BPM BPM транÑпорта XRUN count since last server startup РаÑÑинхронизаций Ñ Ð¿Ð¾Ñледнего запуÑка Ñервера XRUN last time detected ПоÑледнÑÑ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN last ПоÑледнÑÑ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN maximum МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN minimum ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN average СреднÑÑ Ð´Ð»Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ñть раÑÑинхронизаций XRUN total Ð’Ñего раÑÑинхронизаций Maximum scheduling delay МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° раÑпиÑÐ°Ð½Ð¸Ñ Time of last reset Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего ÑброÑа Logging stopped --- %1 --- Журналирование оÑтановлено --- %1 --- Logging started --- %1 --- Журналирование запущено --- %1 --- qjackctlPatchbay Warning Предупреждение Yes Да No Ðет This will disconnect all sockets. Are you sure? Ð’Ñе Ñокеты будут раÑÑоединены. Продолжить? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Коммутатор &New &Создать Alt+N Alt+N Create a new patchbay profile Создать новый профиль коммутатора &Load... &Загрузить... Alt+L Alt+L Load patchbay profile Загрузить профиль коммутатора &Save... &Сохранить... Alt+S Alt+S Save current patchbay profile Сохранить текущий профиль коммутатора Acti&vate &Ðктивировать Alt+V Alt+V &Connect &Соединить Alt+C Alt+C Connect currently selected sockets Соединить выбранные ÑÐµÐ¹Ñ‡Ð°Ñ Ñокеты &Disconnect &РаÑÑоединить Alt+D Alt+D Disconnect currently selected sockets РаÑÑоединить выбранные ÑÐµÐ¹Ñ‡Ð°Ñ Ñокеты Disconnect &All РаÑÑоединить &вÑе Alt+A Alt+A Disconnect all currently connected sockets РаÑÑоединить вÑе Ñоединённые ÑÐµÐ¹Ñ‡Ð°Ñ Ñокеты &Refresh &Обновить Alt+R Alt+R Refresh current patchbay view Обновить текущий вид коммутатора Down Вниз Move currently selected output socket down one position ПеремеÑтить выбранный ÑÐµÐ¹Ñ‡Ð°Ñ Ñокет вниз на одну позицию Add... Добавить... Create a new output socket Создать новый Ñокет выхода Edit... Изменить... Edit currently selected input socket properties Изменить ÑвойÑтва выбранного ÑÐµÐ¹Ñ‡Ð°Ñ Ñокета входа Up Вверх Move currently selected output socket up one position ПеремеÑтить выбранный ÑÐµÐ¹Ñ‡Ð°Ñ Ñокет вверх на одну позицию Remove Удалить Remove currently selected output socket Удалить выбранный ÑÐµÐ¹Ñ‡Ð°Ñ Ñокет выхода Remove currently selected input socket Удалить выбранный ÑÐµÐ¹Ñ‡Ð°Ñ Ñокет входа Create a new input socket Создать новый Ñокет входа Edit currently selected output socket properties Изменить ÑвойÑтва выбранного ÑÐµÐ¹Ñ‡Ð°Ñ Ñокета выхода Warning Предупреждение Save Сохранить Discard ОтказатьÑÑ Cancel Отменить active активно New Patchbay definition Ðовое опиÑание коммутатора Yes Да No Ðет Patchbay Definition files Файл опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð° Load Patchbay Definition Загрузить опиÑание коммутатора Save Patchbay Definition Сохранить опиÑание коммутатора The patchbay definition has been changed: "%1" Do you want to save the changes? ОпиÑание коммутатора изменилоÑÑŒ: "%1" Ð’Ñ‹ хотите Ñохранить изменениÑ? %1 [modified] Untitled%1 Без имени %1 Error Ошибка Could not load patchbay definition file: "%1" Ðе удалоÑÑŒ загрузить файл опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð°: "%1" Could not save patchbay definition file: "%1" Ðе удалоÑÑŒ Ñохранить файл опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð°: "%1" Create patchbay definition as a snapshot of all actual client connections? Создать опиÑание коммутатора как Ñнимок активных Ñоединений клиентов? Duplicate (copy) currently selected output socket Copy... Скопировать... Duplicate (copy) currently selected input socket Expand all items РаÑкрыть вÑе Ñлементы E&xpand All &РаÑкрыть вÑе Alt+X Alt+Ñ€ Current (recent) patchbay profile(s) Toggle activation of current patchbay profile Переключить активноÑть текущего Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð° 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) (Ðет) qjackctlSessionForm Session - JACK Audio Connection Kit СеанÑÑ‹ Load session Загрузить ÑÐµÐ°Ð½Ñ &Load... &Загрузить Recent session Ðедавние ÑеанÑÑ‹ &Recent &Ðедавние Save session Сохранить ÑÐµÐ°Ð½Ñ Save session versioning СохранÑть верÑии ÑеанÑов &Versioning &ВерÑии Re&fresh О&бновить Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit И&зменить Remove infra-client Re&move &Remove &Удалить &Save... &Сохранить Save Сохранить Save and Quit Сохранить и выйти Save Template Сохранить шаблон Update session Обновить ÑÐµÐ°Ð½Ñ &Refresh &Обновить Client / Ports Клиенты / Порты UUID UUID Command Команда &Save &Сохранить Load Session Загрузить ÑÐµÐ°Ð½Ñ Session directory Каталог Ñ ÑеанÑами Save Session Сохранить ÑÐµÐ°Ð½Ñ and Quit и выйти Template Шаблон &Clear О&чиÑтить Warning Предупреждение A session could not be found in this folder: "%1" Ðе удалоÑÑŒ найти ÑÐµÐ°Ð½Ñ Ð² каталоге «%1» %1: loading session... %1: загружаетÑÑ ÑеанÑ... %1: load session %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: save session %2. %1: Ñохранить ÑÐµÐ°Ð½Ñ %2. New Client Save and &Quit... Сохранить и вы&йти Save &Template... Сохранить &шаблон qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Параметры OK ОК Cancel Отменить Settings Общие Server Сервер jackstart jackstart jackd jackd jackd-realtime jackd-realtime The JACK Audio Connection Kit sound server path Путь к Ñерверу JACK dummy dummy alsa alsa portaudio portaudio Parameters Параметры 22050 22050 32000 32000 44100 44100 48000 48000 88200 88200 96000 96000 Sample rate in frames per second ЧаÑтота диÑкретизации выборок в Ñекунду) 0 0 5 5 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 Ðппаратный &Ñчётчик Alt+W Alt+W 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 miliseconds УÑтановить тайм-аут Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° в миллиÑекундах &Interface: &ИнтерфейÑ: So&ft Mode &Программный режим Alt+F Alt+F &Monitor &Контроль Alt+M Alt+к Provide output monitor ports ЗадейÑтвовать порты ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° &Realtime Режим &реал. времени Alt+R Alt+R Use realtime scheduling ИÑпользовать планирование в реал. времени Alt+A Alt+A (default) (как обычно) Alt+V Alt+V 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: ВыполнÑть Ñценарий при &запуÑке: Alt+U Alt+U Whether to execute a custom shell script before starting up the JACK audio server. ВыполнÑть ли ÑобÑтвенный Ñценарий перед запуÑком Ñервера JACK. Execute script after &Startup: ВыполнÑть Ñценарий поÑле з&апуÑка: Alt+S Alt+S Whether to execute a custom shell script after starting up the JACK audio server. ВыполнÑть ли ÑобÑтвенный Ñценарий поÑле запуÑка Ñервера JACK. Alt+D Alt+D 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 РегулÑрное выражение Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñ€Ð°ÑÑинхронизаций Ñреди Ñообщений от Ñервера Alt+I Alt+I Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) Игнорировать ли первую раÑÑинхронизацию при запуÑке Ñервера (веÑьма вероÑтно в Ñлучае Ñ JACK до верÑии 0.80.0) Connections Ð¡Ð¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ 20 20 30 30 60 60 120 120 Time in seconds between each auto-refresh cycle Ð’Ñ€ÐµÐ¼Ñ Ð² Ñекундах между каждым циклом Ð°Ð²Ñ‚Ð¾Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Patchbay definition file to be activated as connection persistence profile Файл опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð°, активируемый как профиль поÑтоÑнного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Browse for a patchbay definition file to be activated Указать активируемый файл опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð° &Auto refresh connections Patchbay, every (secs): &ÐвтоматичеÑки обновлÑть ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² коммутатор, каждые (Ñек): Whether to refresh the connections patchbay automatically ОбновлÑть ли ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² коммутаторе автоматичеÑки Activate &Patchbay persistence: Ðктивировать &поÑтоÑнный коммутатор: Alt+P Alt+P Whether to activate a patchbay definition for connection persistence profile. Ðктивировать ли опиÑание коммутатора Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¿Ð¾ÑтоÑнного ÑоединениÑ. Display Ð˜Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Alt+T Alt+T Transport &BBT (bar:beat.ticks) &BBT транÑпорта (такт:долÑ.тики) Alt+B Alt+B Elapsed time since last &Reset ВремÑ, прошедшее Ñ Ð¿Ð¾Ñледнего &ÑброÑа Elapsed time since last &XRUN ВремÑ, пошедшее Ñ Ð¿Ð¾Ñледней &раÑÑинхронизации Alt+X Alt+X Messages Window Окно Ñообщений Sample messages text font display Каким будет шрифт Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° Ñообщений Ñервера &Font... &Шрифт... Select font for the messages text display Выберите шрифт Ð´Ð»Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ñообщений Ñервера msec Ð¼Ñ n/a н/д Patchbay Definition files Файлы опиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð¼Ð¼ÑƒÑ‚Ð°Ñ‚Ð¾Ñ€Ð° Server &Path: Команда за&пуÑка: Driv&er: &Драйвер: Preset &Name: Ð˜Ð¼Ñ &профилÑ: Settings preset name Ð˜Ð¼Ñ Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð² &Save &Сохранить Save settings as current preset name Сохранить параметры в текущий профиль &Delete &Удалить Delete current settings preset Удалить текущий профиль &Audio: &Звук: H/W M&onitor Ðппаратный &контроль Alt+O Alt+к Force &16bit Принудительно &16 бит Alt+1 Alt+1 Force 16bit mode instead of failing over 32bit (default) Принудительно иÑпользовать 16бит-режим вмеÑто 32бит (по умолчанию) Periods/&Buffer: Периодов на &буфер: &Input Channels: Каналов на &входе: &Output Channels: Каналов на в&ыходе: Start De&lay (secs): Задержка за&пуÑка (Ñ): Time in seconds that client is delayed after server startup Сколько Ñекунд клиент ждёт поÑле запуÑка Ñервера > > Scripting argument meta-symbols МетаÑимволы аргументов в ÑценариÑÑ… &Capture standard output &Захватывать Ñтандартный вывод Alt+C Alt+C 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 Б&ез блокировки памÑти Alt+K Alt+K Do not attempt to lock memory, even if in realtime mode Ðе пытайтеÑÑŒ заблокировать памÑть, даже в режиме реального времени &Ignore H/W &Игнорировать апп. буфер и период &Word Length: &Ignore first XRUN occurrence on statistics &Игнорировать первую раÑÑинхронизацию в ÑтатиÑтике 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 &Включить облаÑть ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Alt+E Alt+E 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 Предупреждение Save Сохранить Discard ОтказатьÑÑ Apply УчеÑть Some settings have been changed: "%1" Do you want to save the changes? Ðекоторые параметры изменилиÑÑŒ: "%1" Ð’Ñ‹ хотите Ñохранить изменениÑ? Delete preset: "%1" Are you sure? Удалить профиль: "%1" Ð’Ñ‹ уверены? &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? Ðекоторые параметры были изменены. Применить Ñти изменениÑ? jackdmp jackdmp &Name: &Ðазвание: The JACK Audio Connection Kit sound server name The audio backend driver interface to use ИÑпользуемый звуковой драйвер sun sun coreaudio coreaudio freebob freebob firewire firewire MIDI Driv&er: &Драйвер MIDI: The ALSA MIDI backend driver to use ИÑпользуемый драйвер ALSA MIDI none нет raw raw seq seq 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 МакÑимальное чиÑло резервируемых каналов входа &Input Latency: &Задержка на входе External output latency (frames) Capture Only Только захват Playback Only Только воÑпроизведение The PCM device name to use Ð˜Ð¼Ñ Ð¸Ñпользуемого уÑтройÑтва PCM plughw:0 plughw:0 /dev/audio /dev/audio Select output device for playback Выберите уÑтройÑтво выхода Ð´Ð»Ñ Ð²Ð¾ÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Alternate input device for capture Выберите уÑтройÑтво входа Ð´Ð»Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð° &Output Latency: Задержка на в&ыходе: Maximum output audio hardware channels to allocate МакÑимальное резервируемое чиÑло звуковых каналов уÑтройÑтва Alternate output device for playback Ðльтернативное уÑтройÑтво воÑÐ¿Ñ€Ð¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Select input device for capture Выберите уÑтройÑтво входа Ð´Ð»Ñ Ð·Ð°Ñ…Ð²Ð°Ñ‚Ð° Select PCM device name Выберите Ð¸Ð¼Ñ ÑƒÑтройÑтва PCM 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: &Latency 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: ВыполнÑть Ñценарий поÑле &выключениÑ: Logging Журналирование Messages log file Файл журнала Ñообщений Browse for the messages log file location Указать раÑположение файла журнала Whether to activate a messages logging to file. СохранÑть ли протокол в файл журнала &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 &Разрешить алиаÑÑ‹ клиентов/портов Alt+N Alt+Ñ€ Whether to draw connection lines as cubic Bezier curves РиÑовать ли Ñоединительные линии в диалогах «СоединениÑ» и «Коммутатор» как кубичеÑкие кривые Безье Server &Prefix: Extra driver options (command line suffix) Start De&lay: secs 0 msecs Draw connection and patchbay lines as Be&zier curves РиÑовать линии ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÐºÐ°Ðº кривые &Безье Alt+Z Alt+б Misc Разное Whether to stop JACK audio server on application exit S&top JACK audio server on application exit Alt+Q Alt+Q Whether to start minimized to system tray ЗапуÑкать ли приложение в облаÑти уведомлениÑ, ÑÐºÑ€Ñ‹Ð²Ð°Ñ Ð¾Ñновное окно Start minimi&zed to system tray &ЗапуÑкать убранным в облаÑть ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Whether to delay window positioning at application startup &Delay window positioning at startup За&держивать размещение окна при запуÑке Whether to ask for confirmation on JACK audio server shutdown Confirm server sh&utdown &Запраживать подтверждение на оÑтановку Ñервера Whether to enable ALSA Sequencer (MIDI) support on startup Включать ли при запуÑке поддержку MIDI-ÑеквенÑера ALSA E&nable ALSA Sequencer support &Включить поддержку ÑеквенÑера ALSA Buttons Кнопки Whether to hide the left button group on the main window Скрывать ли группу кнопок в левой чаÑти оÑновного окна Hide main window &Left buttons Скрывать &левые кнопки оÑновного окна Alt+L Alt+л 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 Второй Defaults ИÑпользуемые по умолчанию параметры &Base font size: &Кегль шрифта в интерфейÑе: Base application font size (pt.) 11 11 12 12 net net 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 Whether to restrict to one single application instance (X11) Single application &instance Зап&уÑкать только одну копию программы qjackctlSocketForm OK ОК Cancel Отменить &Socket &Сокет &Client: &Клиент: Socket name (an alias for client name) Ð˜Ð¼Ñ Ñокета (пÑевдоним имени клиента) &Name (alias): &Ð˜Ð¼Ñ (пÑевдоним): Socket Plugs / Ports Сокетовые штепÑели / Порты Socket plug list СпиÑок штепÑелей Ñокета &Down Ð’&низ Alt+D Alt+D &Up Ð’&верх Alt+U Alt+U Alt+A Alt+A Add plug to socket plug list Добавить штепÑель в ÑпиÑок штепÑелей Ñокета &Plug: &ШтепÑель: &Edit И&зменить Alt+E Alt+E &Remove &Удалить Alt+R Alt+R Remove currently selected plug from socket plug list Удалить выбранный штепÑель из ÑпиÑка штепÑелей Ñокета Plugs / Ports ШтепÑели / Порты Error Ошибка A socket named "%1" already exists. Сокет Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ «%1» уже ÑущеÑтвует. Add Plug Добавить штепÑель Remove Удалить Edit Изменить Move Up ПеремеÑтить выше Move Down ПеремеÑтить ниже Client name (regular expression) Ð˜Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° (регулÑрное выражение) Add P&lug Добавить &штепÑель Alt+L Alt+L Port name (regular expression) Ð˜Ð¼Ñ Ð¿Ð¾Ñ€Ñ‚Ð° (регулÑрное выражение) Alt+X Alt+X Type Тип &Audio &Звук Audio socket type (JACK) Тип звукового Ñокета (JACK) &MIDI &MIDI Alt+M Alt+M MIDI socket type (ALSA) Тип MIDI-Ñокета (ALSA) E&xclusive Enforce only one exclusive cable connection Принудительно только одно кабельное Ñоединение Warning Предупреждение Some settings have been changed. Do you want to apply the changes? Ðекоторые параметры были изменены. Применить Ñти изменениÑ? Apply УчеÑть Discard ОтказатьÑÑ (None) (Ðет) Socket - JACK Audio Connection Kit Сокет Edit currently selected plug Move down currently selected plug in socket plug list Move up current selected plug in socket plug list &Forward: Forward (clone) all connections from this socket MIDI socket type (JACK) Тип MIDI-Ñокета (JACK) AL&SA AL&SA Alt+S Alt+S qjackctlSocketList Output Выход Input Вход Socket Сокет Warning Предупреждение Yes Да No Ðет <New> - %1 <Ðовый> - %1 %1 about to be removed: "%2" Are you sure? %1 будет удален: "%2" Ð’Ñ‹ уверены? %1 <Copy> - %2 %1 <КопиÑ> - %2 qjackctlSocketListView Output Sockets / Plugs Гнезда наружу Input Sockets / Plugs Гнезда внутрь qjackctlStatusForm Status - JACK Audio Connection Kit Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Description ОпиÑание Value Значение Statistics since last server startup СтатиÑтика Ñ Ð¿Ð¾Ñледнего запуÑка Ñервера Re&set С&броÑить Alt+S Alt+S Reset XRUN statistic values Обнулить ÑтатиÑтику по раÑÑинхронизации &Refresh &Обновить Alt+R Alt+R Refresh XRUN statistic values Обновить ÑтатиÑтику по раÑÑинхронизации Time of last reset Ð’Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ñледнего ÑброÑа XRUN count since last server startup РаÑÑинхронизаций Ñ Ð¿Ð¾Ñледнего запуÑка Ñервера XRUN total Ð’Ñего раÑÑинхронизаций XRUN average Средний размер раÑÑинхронизаций XRUN minimum ÐœÐ¸Ð½Ð¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN maximum МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN last ПоÑледнÑÑ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ XRUN last time detected ПоÑледнÑÑ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð½Ð°Ñ Ñ€Ð°ÑÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Transport state СоÑтоÑние транÑпорта Transport BPM BPM транÑпорта Transport BBT BBT транÑпорта Transport Timecode Тайм-код транÑпорта Realtime Mode Режим реального времени Buffer Size Размер буфера Sample Rate ЧаÑтота ÑÑÐ¼Ð¿Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Server state Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñервера DSP Load Загрузка DSP Maximum scheduling delay МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð·Ð°Ð´ÐµÑ€Ð¶ÐºÐ° раÑпиÑÐ°Ð½Ð¸Ñ Server name Ð˜Ð¼Ñ Ñервера qjackctl-0.3.10/src/translations/PaxHeaders.16050/qjackctl_it.ts0000644000175000001440000000012412113441137022553 xustar000000000000000027 mtime=1361986143.407051 27 atime=1364826685.165395 30 ctime=1364826685.167395506 qjackctl-0.3.10/src/translations/qjackctl_it.ts0000644000175000001440000037145612113441137022062 0ustar00rncbcusers00000000000000 QObject (default) (predefinito) 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). Qt: %1 Qt: %1 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). qjackctlAboutForm About Qt Info su QT &Close &Chiudi Alt+C Alt+C Version Versione Build Build Debugging option enabled. Opzione di debbugging abilitata. System tray disabled. Vassoio di sistema (system tray) non abilitata. Transport status control disabled. Controllo dello stato del transport disabilitato. Realtime status disabled. Stato Realtime disabilitato. XRUN delay status disabled. Stato del ritardo degli XRUN disabilitato. Maximum delay status disabled. Stato del massimo ritardo disabilitato. ALSA/MIDI sequencer support disabled. Supporto del sequencer ALSA/MIDI disabilitato. Website Sito Web This program is free software; you can redistribute it and/or modify it Questo programma è free software; è possibile ridistribuirlo e/o modificarlo under the terms of the GNU General Public License version 2 or later. nei termini dell GNU General Public License version 2 o superiore. JACK MIDI support disabled. 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. D-Bus interface support disabled. Supporto per l'interfaccia D-Bus disabilitato. JACK Session support disabled. supporto per le Sessioni di JACK disabilitato. Using: JACK %1 In uso: JACK %1 qjackctlClientListView &Connect &Connetti Alt+C Connetti Alt+C &Disconnect &Disconnetti Alt+D Disconnetti Alt+D Disconnect &All Disconnetti &Tutto Alt+A Disconetti Tutto Alt+T Re&name Ri&omina Alt+N Rinomina Alt+N &Refresh &Aggiorna Alt+R Aggiorna Alt+R Readable Clients / Output Ports Clients leggibili / Porte d'uscita Writable Clients / Input Ports Clients Scrivibili / Porte d'entrata Alt+C Connect Connetti Alt+C Alt+D Disconnect Disconnetti Alt+D Alt+A Disconect All Disconnetti Tutto Alt+A Alt+N Rename Rinomina Alt+N Alt+R Refresh Aggiorna Alt+R qjackctlConnect Warning Attenzione Yes Si No No This will suspend sound processing from all client applications. Are you sure? Quest'azione sospenderà il processamento sonoro da tutte le applicazioni clients. Sei sicuro? qjackctlConnectionsForm Connections - JACK Audio Connection Kit Connessioni - JACK Audio Connection Kit Audio Audio &Connect &Connetti Alt+C Alt+C Connect currently selected ports Connetti le porte selezionate &Disconnect &Disconnetti Alt+D Alt+D Disconnect currently selected ports Disconnetti le porte selezionate Disconnect &All Disconnetti &Tutto Alt+A Alt+T Disconnect all currently connected ports Disconnetti tutte le porte connesse &Refresh &Aggiorna Alt+R Alt+R Refresh current connections view Aggiorna la situazione delle connessioni MIDI MIDI Warning Attenzione Save Salva Discard Scarta le modifiche Cancel Cancella 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 Expand all client ports Espandi tutte le porte dei clients E&xpand All E&spandi tutto Alt+X Alt+X qjackctlConnectorView &Connect &Connetti Alt+C Connetti Alt+C &Disconnetti &Disconetti Alt+D Disconnetti Alt+D Disconnect &All Disconnetti &Tutto Alt+A Disconnetti Tutto Alt+T &Refresh &Aggiorna Alt+R Aggiorna Alt+R 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 Alt+R qjackctlMainForm &Quit &Esci Alt+Q Alt+E Quit processing and exit Termina il processo sonoro ed esci &Start &Avvia Alt+S Alt+A Start the JACK server Avvia il server JACK S&top &Ferma Alt+T Alt+F Stop the JACK server Ferma il server JACK St&atus &Stato Show/hide the extended status window Mostra/nascondi la finestra dello stato Ab&out... Inf&o su... Show information about this application Mostra le info riguardo questo software S&etup... &Impostazioni Alt+E Alt+I Show settings and options dialog Mostra la finestra delle impostazioni/opzioni &Messages &Messaggi Alt+M Alt+M Show/hide the messages log window Mostra/nascondi la finestra dei messaggi Patch&bay Patch&bay Alt+B Alt+B Show/hide the patchbay editor window Mostra/nascondi la finestra del patchbay &Connect &Connetti Alt+C Alt+C 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 Backward transport Retrocedi transport Alt+F Alt+V Forward transport Avanza transport Alt+R Alt+G Rewind transport Riavvolgi transport Alt+U Alt+U Stop transport rolling Ferma il transport Alt+P Alt+P Start transport rolling Fai partire il transport Warning Attenzione Terminate Termina Cancel Cancella successfully con successo with exit status=%1 con stato di uscita %1 Stop Arresta Kill Uccidi Could not load preset "%1". Retrying with default. Non sono riuscito a caricare il preset "%1". Provo con il predefinito. Could not load default preset. Sorry. Non riesco a caricare il preset predefinito. 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. Non riesco ad avviare JACK. 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" in the context menu of the system tray icon. Il programma continuerà a lavorare nel vassoio di sistema (system tray). Per terminarlo, clicca su "Esci" 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). D-BUS: JACK server is starting... D-BUS: JACK si sta avviando... D-BUS: JACK server could not be started. Sorry D-BUS: il server JACK non può essere avviato. Mi dispiace D-BUS: JACK server is stopping... D-BUS: JACK si sta arrestando... D-BUS: JACK server could not be stopped. Sorry D-BUS: il server JACK non può essere arrestato. 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). D-BUS: JACK server was stopped (%1 aka jackdbus). D-BUS: JACK è stato fermato (%1 aka jackdbus). Error Errore Transport BBT (bar:beat.ticks) BBT del transport ( bar:beat:ticks ) 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 Could not load active patchbay definition. Disabled. Non riesco a caricare il Patchbay attivo. Disabilitato. 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. 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 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. D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: SetParameterValue('%1', '%2'): %3. (%4) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: ResetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) D-BUS: GetParameterValue('%1'): %2. (%3) OK OK 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. Non riesco ad aprire il sequencer ALSA come client. Il Patchbay MIDI non sarà disponibile. The program will keep running in the system tray. To terminate the program, please choose "Quit" in the context menu of the system tray entry. Il programma rimarrà in esecuzione nel vassoio di sistema (system tray). Per terminarlo, clicca su "Esci" nel menù del tasto destro sull'icona nel vassoio. JACK is currently running. Do you want to terminate the JACK audio server? JACK è attualmente attivato. Vuoi arrestare il server JACK? Could not start JACK. Maybe JACK audio server is already started. Non riesco ad avviare JACK. Forse il server JACK è già avviato. Some client audio applications are still active and connected. Do you want to stop the JACK audio server? Alcune applicazioni audio sono ancora attive e connesse. Vuoi arrestare il server JACK? JACK was started with PID=%1. JACK è stato avviato con PID=%1. JACK is being forced... JACK viene forzato... 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: %1 -> %2 Do you want to remove the patchbay connection? Una connessione è definita nel Patchbay, che probabilmente ripeterà la connessione: %1 -> %2 Vuoi rimuovere questa connessione dal Patchbay? Remove Rimuovi Ignore Ignora 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. Non sono riuscito ad avviare JACK come client. - %1 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 &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 Alt+A Alt+A Alt+O Alt+O Shift+Space Shift+Space Space Space Set&up... Imp&ostazioni... S&ession S&essioni &Load... &Apri... &Save... &Salva... Save and &Quit... Salva ed E&sci... Save &Template... Salva &Modello... &Refresh Aggio&rna 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" Disabled. Non riesco a caricare il file del patchbay attivo. "%1" Disabilitato. &Versioning &Versione Re&fresh Agg&iorna %1 (%2%, %3 xruns) %1 (%2%, %3 xruns) Transport BBT (bar.beat.ticks) qjackctlMessagesForm Messages - JACK Audio Connection Kit Messaggi - JACK Audio Connection Kit Logging stopped --- %1 --- Logging fermato --- %1 --- Logging started --- %1 --- Logging avviato --- %1 --- Messages output log Log dei messaggi di output qjackctlMessagesStatusForm Messages / Status - JACK Audio Connection Kit Messaggi / Stato - JACK Audio Connection Kit &Messages &Messaggi Messages log Log dei messaggi Messages output log Log dei messaggi di output &Status &Stato Status information Informazioni sullo Stato Statistics since last server startup Statistiche dall'ultimo avvio del server Description Descrizione Value Valore Reset XRUN statistic values Reimposta le statistiche degli XRUN Re&set Reimpo&sta Alt+S Alt+S Refresh XRUN statistic values Aggiorna le statistiche degli XRUN &Refresh &Refresh Alt+R Alt+R Server name Nome del server Server state Stato del server DSP Load Carico DSP Sample Rate Frequenza di campionamento Buffer Size Dimensione del buffer Realtime Mode Modo Realtime Transport state Stato del transport Transport Timecode Codice temporale del transport Transport BBT BBT del transport Transport BPM BPM del transport XRUN count since last server startup Conteggio degli XRUN dall'ultimo avvio del server XRUN last time detected Momento dell'ultimo XRUN XRUN last Ultimo XRUN XRUN maximum XRUN massimi XRUN minimum XRUN minimi XRUN average XRUN medi XRUN total XRUN totali Maximum scheduling delay Massimo ritardo nello scheduling Time of last reset Tempo dell'ultimo reset Logging stopped --- %1 --- Logging fermato --- %1 --- Logging started --- %1 --- Logging avviato --- %1 --- qjackctlPatchbay Warning Attenzione Yes Si No No This will disconnect all sockets. Are you sure? Questo disconnetterà tutte le porte. Sei sicuro? qjackctlPatchbayForm Patchbay - JACK Audio Connection Kit Patchbay - JACK Audio Connection Kit &New &Nuovo Alt+N Alt+N Create a new patchbay profile Crea un nuovo profilo Patchbay &Load... &Apri... Alt+L Alt+A Load patchbay profile Carica il profilo del Patchbay &Save... &Salva... Alt+S Alt+S Save current patchbay profile Salva il profilo corrente del Patchbay Acti&vate Atti&va Alt+V Alt+V Toggle activation of current patchbay profile Modifica lo stato di attivazione del Patchbay corrente &Connect &Connetti Alt+C Alt+C Connect currently selected sockets Connetti le porte selezionate &Disconnect &Disconnetti Alt+D Alt+D Disconnect currently selected sockets Disconnetti le porte selezionate Disconnect &All Disconnetti &Tutto Alt+A Alt+T Disconnect all currently connected sockets Disconnetti tutte le porte connesse &Refresh &Aggiorna Alt+R Alt+A Refresh current patchbay view Aggiorna la vista del Patchbay Down Giù Move currently selected output socket down one position Muovi la porta selezionata in basso Add... Aggiungi... Create a new output socket Crea una nuova porta d'uscita Edit... Modifica... Edit currently selected input socket properties Modifica la porta d'entrata selezionata Up Su Move currently selected output socket up one position Muovi la porta selezionata in alto Remove Rimuovi Remove currently selected output socket Rimuovi la porta d'uscita selezionata Copy... Copia... Duplicate (copy) currently selected output socket Duplica (copia) la porta d'uscita selezionata Remove currently selected input socket Rimuovi la porta d'entrata selezionata Duplicate (copy) currently selected input socket Duplica (copia) la porta d'entrata selezionata Create a new input socket Crea una nuova porta d'entrata Edit currently selected output socket properties Modifica la porta d'uscita selezionata Warning Attenzione Save Salva Discard Scarta Cancel Cancella active attivo New Patchbay definition Nuova definizione del Patchbay Yes Si No No 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" Do you want to save the changes? Le definizioni del Patchbay sono cambiate: "%1" Vuoi salvare le modifiche? %1 [modified] %1 [modificato] Untitled%1 Senza titolo%1 Error Errore Could not load patchbay definition file: "%1" Non riesco a caricare il file di definizioni del Patchbay: "%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 dalle connessioni attuali? Current (recent) patchbay profile(s) Profilo (recente) del Patchbay Expand all items Espandi tutti gli elementi E&xpand All E&spandi tutto Alt+X Alt+X qjackctlPatchbayView Add... Aggiungi... Edit... Modifica... Copy... Copia... Remove Rimuovi Exclusive Esclusiva Move Up Porta su Move Down Porta giù &Connect &Connetti Alt+C Connetti Alt+C &Disconnect &Disconnetti Alt+D Disconnetti Alt+D Disconnect &All Desconnetti &Tutto Alt+A Disconnetti Tutto Alt+T &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 Alt+A qjackctlSessionForm Session - JACK Audio Connection Kit Sessione - JACK Audio Connection Kit Load session Carica Sessione &Load... &Apri... Recent session Sessione recente &Recent &Recente Save session Salva sessione &Save... &Salva... Save Salva Save and Quit Salva ed Esci Save Template Salva Modello Client / Ports Client / Porte UUID UUID Command 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" non riesco a trovare una Sessione in questa cartella: "%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" Are you sure to overwrite the existing session? Una Sessione esiste già in questa cartella: "%1" Sovrascivo la Sessione? This folder already exists and is not empty: "%1" Are you sure to overwrite the existing folder? Questa cartella esiste già e non è vuota: "%1" Sovrascrivo la cartella? %1: saving session... %1: salvo la sessione... %1: save session %2. %1: salvo la sessione %2. Update session Aggiorna sessione &Refresh Aggio&rna Save and &Quit... Salva ed Es&ci... Save &Template... Salva &Modello... &Save &Salva Save session versioning Salva la versione della sessione &Versioning &Versione Re&fresh Agg&iorna Session clients / connections Infra-clients / commands Infra-client Infra-command Add infra-client &Add Edit infra-client &Edit &Modifica Remove infra-client &Remove &Rimuovi Re&move New Client qjackctlSessionInfraClientItemEditor Infra-command qjackctlSetupForm Setup - JACK Audio Connection Kit Configurazione - JACK Audio Connection Kit Settings Impostazioni Preset &Name: &Nome del Preset: (default) (predefinito) Settings preset name Nome del preset &Save &Salva Alt+S Alt+S Save settings as current preset name Salva le impostazioni sul preset corrente &Delete &Elimina Alt+D Alt+E Delete current settings preset Elimina il preset con le impostazioni correnti Server Server Server &Path: &Indirizzo del server: jackstart jackstart jackd jackd jackd-realtime jackd-realtime The JACK Audio Connection Kit sound server path Indirizzo del server sonoro JACK Driv&er: Dri&ver: dummy dummy oss oss alsa alsa portaudio portaudio coreaudio coreaudio Parameters 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 Number o microseconds to wait between engine processes (dummy) Numero dei microsecondi di attesa fra i processi del motore (dummy) 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 miliseconds Imposta il limite di tempo di attesa per il client, in msec &Realtime Tempo &Reale Alt+R Alt+R Use realtime scheduling Usa priorità dello scheduling in tempo reale No Memory Loc&k Non b&loccare memoria Alt+K Alt+L Do not attempt to lock memory, even if in realtime mode Non bloccare la memoria, anche in tempo reale &Unlock Memory &Sblocca Memoria Alt+U Alt+S 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 Alt+F Alt+F Ignore xruns reported by the backend driver Ignora gli XRUN provenienti dal driver &Monitor &Monitor Alt+M Alt+M Provide output monitor ports Attiva porte d'uscita per il monitor Force &16bit Forza &16bit Alt+1 Alt+1 Force 16bit mode instead of failing over 32bit (default) Forza il modo 16bit invece del predefinito 32bit H/W M&onitor M&onitor Hardware Alt+O Alt+O Enable hardware monitoring of capture ports Abilita l'hardware monitor delle porte d'ingresso H/&W Meter Meter Hard&ware Alt+W Alt+W Enable hardware metering on cards that support it Abilita il metering per le schede che lo supportano &Ignore H/W &Ignora HardWare Alt+I Alt+I Ignore hardware period/buffer size Ignora la dimensione periodo/buffer dell'hardware &Output Device: Dispositiv&o d'uscita: &Output Channels: Numer&o canali d'uscita: &Interface: &Interfaccia: Maximum input audio hardware channels to allocate Numero massimo di canali hardware d'entrata &Audio: A&udio: &Input Latency: Laten&za d'entrata: 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 > > Select output device for playback Seleziona il dispositivo d'uscita per la riproduzione /dev/dsp Alternate input device for capture Seleziona il dispositivo alternativo d'entrata per la registrazione &Output Latency: &Latenza in uscita: 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 &Input Channels: Numero &canali d'entrata: Select input device for capture Seleziona il dispositivo d'entrata per la cattura Select PCM device name Seleziona il dispositivo PCM 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 Alt+V Alt+V Whether to give verbose output on messages Verbosità nei messaggi d'uscita Start De&lay (secs): Ritardo inizia&le (secs): Time in seconds that client is delayed after server startup Tempo di ritardo nell'avvio del server JACK (in secondi) Latency: Latenza: 0 0 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: Alt+T Alt+T 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 Alt+C Alt+C 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 &Ignore first XRUN occurrence on statistics &Ignora i primi XRUN nelle statistiche Whether to ignore the first XRUN on server startup (most likely to occur on pre-0.80.0 servers) Ignora gli XRUN prodotti durante l'avvio del server (frequenti nelle versioni pre 0.80.0 del server JACK) Connections Connessioni 5 5 10 10 20 20 30 30 60 60 120 120 Time in seconds between each auto-refresh cycle Tempo in secondi tra gli auto aggionamenti 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 &Auto refresh connections Patchbay, every (secs): &Auto aggiornamento del Patchbay, ogni (secs): Alt+A Alt+A Whether to refresh the connections patchbay automatically Aggiorna automaticamente le connessione del Patchbay Activate &Patchbay persistence: Attiva un &Patchbay persistente: Alt+P Alt+P 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) Alt+B Alt+B Elapsed time since last &Reset Tempo trascorso dall'ultimo &Reset Elapsed time since last &XRUN Tempo trascorso dall'ultimo &XRUN Alt+X Alt+X 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 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 Alt+N Alt+P 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 Alt+Z Alt+Z 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 Alt+E Alt+E Whether to enable the system tray icon Scegli se visualizzare un'icona sul vassoio di sistema (system tray) &Delay window positioning at startup Ritar&da il posizionamento delle finestre all'avvio Whether to delay window positioning at application startup Scegli se ritardare il posizionamento delle finestre all'avvio 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 OK OK Cancel Cancella Warning Attenzione Save Salvar Discard Descartar cambios 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 Apply Aplicar Some settings have been changed: "%1" Do you want to save the changes? Alcune impostazioni sono cambiate: "%1" Vuoi salvarle? Delete preset: "%1" Are you sure? Cancello Preset: "%1" 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? Alcune impostazioni sono cambiate. 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 seq seq &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. &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 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 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 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 Alt+L Alt+L 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 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 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 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: 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) Alt+Q Alt+E Whether to stop JACK audio server on application exit S&top JACK audio server on application exit qjackctlSocketForm OK OK Cancel Cancella &Socket &Socket &Name (alias): &Nome (alias): Socket name (an alias for client name) Nome del socket (un alias per il nome del client) Client name (regular expression) Nome del client (espressione regolare) Add P&lug Aggiungi p&resa Alt+L Alt+R Add plug to socket plug list Aggiungi una presa alla lista delle prese &Plug: &Presa: Port name (regular expression) Nome della porta (espressione regolare) Socket Plugs / Ports Prese / Porte del Socket Socket plug list Lista dei socket tipo presa &Edit &Modifica Alt+E Alt+M &Remove &Rimuovi Alt+R Alt+R Remove currently selected plug from socket plug list Rimuovi la presa selezionata dalla lista del socket &Client: &Client: &Down &Giù Alt+D Alt+G &Up S&u Alt+U Alt+U E&xclusive Esclusi&vo Alt+X Alt+V Enforce only one exclusive cable connection Permetti una connessione da un solo cavo Type Tipo &Audio &Audio Alt+A Alt+A Audio socket type (JACK) Socket di tipo audio (JACK) &MIDI &MIDI Alt+M Alt+M MIDI socket type (ALSA) Socket di tipo MIDI (ALSA) Plugs / Ports Prese / Porte Error Errore A socket named "%1" already exists. Un socket chiamato "%1" esiste già. Add Plug Aggiungi presa Remove Rimuovi Edit Modifica Move Up Sposta Su Move Down Sposta Giù Warning Attenzione Some settings have been changed. Do you want to apply the changes? Alcune impostazioni sono state modificate. Applicare le modifiche ora? Apply Aplicar Discard Descartar (None) (Nessuno) Socket - JACK Audio Connection Kit Sockets - JACK Audio Connection Kit Edit currently selected plug Modifica la presa selezionata Move down currently selected plug in socket plug list Sposta giù la presa selezionata nella lista socket Move up current selected plug in socket plug list Sposta su la presa selezionata nella lista socket &Forward: C&lona: Forward (clone) all connections from this socket Clona tutte le connessioni di questo socket MIDI socket type (JACK) Tipo di socket MIDI (JACK) AL&SA AL&SA Alt+S qjackctlSocketList Output Uscita Input Entrata Socket Socket Warning Attenzione Yes Si No No <New> - %1 <Nuovo> - %1 %1 about to be removed: "%2" Are you sure? Sto per rimuovere %1: "%2" Sei sicuro? %1 <Copy> - %2 %1 <Copia> - %2 qjackctlSocketListView Output Sockets / Plugs Sockets / Prese d'uscita Input Sockets / Plugs Sockets / Prese d'entrata qjackctlStatusForm Status - JACK Audio Connection Kit Stato - JACK Audio Connection Kit Description Descrizione Value Valore Statistics since last server startup Statistiche dall'ultimo avvio del server Re&set Reimpo&sta Alt+S Alt+S Reset XRUN statistic values Reimposta le statistiche degli XRUN &Refresh Aggio&rna Alt+R Alt+R Refresh XRUN statistic values Aggiorna le statistiche degli XRUN Time of last reset Tempo dell'ultimo reset Maximum scheduling delay Massimo ritardo nello scheduling XRUN count since last server startup Conteggio degli XRUN dall'ultimo avvio del server XRUN total XRUN totali XRUN average XRUN medi XRUN minimum XRUN minimi XRUN maximum XRUN massimi XRUN last Ultimo XRUN XRUN last time detected Momento dell'ultimo XRUN Transport state Stato del transport Transport BPM BPM del transport Transport BBT BBT del transport Transport Timecode Codice temporale del transport Realtime Mode Modo Realtime Buffer Size Dimensione del buffer Sample Rate Frequenza di campionamento Server state Stato del server DSP Load Carico DSP Server name Nome del server qjackctl-0.3.10/src/PaxHeaders.16050/images0000644000175000001440000000013212126315074016365 xustar000000000000000030 mtime=1364826684.847395501 30 atime=1364826684.594395497 30 ctime=1364826684.847395501 qjackctl-0.3.10/src/images/0000755000175000001440000000000012126315074015732 5ustar00rncbcusers00000000000000qjackctl-0.3.10/src/images/PaxHeaders.16050/status1.png0000644000175000001440000000012311353112764020556 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/status1.png0000644000175000001440000000107011353112764020044 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaÿIDATxÚ’;hSa†ßüçüçärŽ”o!ME¡‚RD +‚ c± 8¸¸é ƒ»×N+ÔMª(u²V´*ÕÖ¤¤Ô¤4­9IšœûåÿlBâ3~|<¼ßØexlùIßùɇè#O¹ä™ý£, ×] œ¦1àÙ”„÷C‚¼·kÁÎR6pKARûÏu-pusˆy>U «™!¸™ãäê4—:p9Ö(½ƒ(K ±ýƒðõYþÅâÔ\@¸@ÆÓÍÍ)§'sF¤Ñƒ™ß©âg +Éã#×ŽŽŽ]¶ëV/gœƒÀDâ³€ñÊ·ÜqøþÚg½QÜFaÝ··Ã²Ú—¸4QH׋ E$¤²wÇk…˜Z__8@h¤õµ™SbîåsêêEרþø˜ûµ‹rÏᤖ_½â |ÇœP++xéí“¶H(BB<ÐĹۃ»JÆû€¬¤O;Í¥f5‡tÍ¥j¢¹ñ¶`á¯áyðg‰rø=ʼng˜[óÜ©—&ôò,ÌÊü£¶KlM¤f=+ S³`U—jÚ÷É{DŒ½b¾±ÐöŒ-”}ÉçfÀ¼&œFþ Î|ã¿#ÁÌìMÍ·~ÂÙY}ÝÉ'ŠÿôòʲY-ôzVyÿƒ¤fTBÕ öÿÕžÛ ô[+ÎIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/copy1.png0000644000175000001440000000012311353112764020205 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.634395 30 ctime=1364826684.634395497 qjackctl-0.3.10/src/images/copy1.png0000644000175000001440000000050511353112764017475 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ9ñaJjÅIDAT8Ë­“Ë Â0Dߢœh *pÈéƒHl¤ÐGÎÎ-ÐÍ,‡â8_#Y–¼ÞÑ̬ ?BTÕæŠªz›,ªj)êº6À€ÛZïa­hfºF2"pÎáœC¤!ψ4@‚B0à´Ë„KÕÄR–*èpY°tE… œ´mÛFš~—8 DîýÍêC²ªàÝà½Ç{¢ f&3=¯iˆã‡0³èEÆéê^±…2%X’»8ÆÏQP_²õþ†ãT”htbIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mporto_32x32.png0000644000175000001440000000012311353112764021333 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.681395498 qjackctl-0.3.10/src/images/mporto_32x32.png0000644000175000001440000000150711353112764020626 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÚPLTEiii  '$ )  $" $" """###$$$)&%%%('/)1+,,,6/ ...70;3 222320333>5565777878888;;;>>=DA%DB)@@@AAAIH ODDDDEEEFFFQH#GGGNG8HHHIIIMI@JJJKKKNKGLLLXN%POJPOOWR6QQQSSSTTTUUUVVVbY,dX?\\\ha=```mc4dddseLpiBtfMhhhyiJmmmnnnoooqqqrrr{xDuuuvmyyy{{{‹p‰‡tˆ†~½„‡‡‡À†‰‰‰ŠŠŠ‘‰ÃˆŽŽ˜‹€ŽŽŽŽŽ’‘’’’’”””•••———˜˜˜±¥±¦ššš´¨œœœ£¡„¬œŠŸŸŸ«£p   ¢¢ ¢¢¢¤£™£££È°¤¤¤É±¥¥¥¦¦¦©©©«««®®®±±±´´´¼¼¼½½½ÆÆÆÏÏÄÎÎÎÐÐÐÒÒÒØØØéæyÞÞÞãããæææèèèéééüüîþþùM‘ tRNS@æØfIDATxÚc`0À*ÁÍ„O^N×ÃÔI—¬b©ª‚oâ mìòJÞSì¦ÍÉÄ*Ï‘ÛX6uv¿T@}m6y6¯šª©³'±ˆè`‘g·HÎï”jMÀ"ÏiÚÔÖ]¤”ÏàÃf¿{DeWO\ƒŸ`s?6÷»eÌ,Î ²ˆ ·RæÂb¿kvßôöb;5Y ua,úò³¦¤9‹ñÊË«Hb±@ $_é#Ì8—‘“‹¼pX^’q.` ẉxå\ÚÛÊñÉÛD¦æ™‰ã–·Œl™-ŒS^?¢eR§1Ny<3.Y rðËÛd¥wà•©ö7Ç#Ï "ƒ'‰Û”ØzJã“/tµÃŸ‰¬i›I2 [› ([IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/about1.png0000644000175000001440000000012311353112764020345 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.718395 30 ctime=1364826684.718395499 qjackctl-0.3.10/src/images/about1.png0000644000175000001440000000140411353112764017634 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaËIDATxÚ“KHTQÆ¿sçÎx¯3ÎE±°ÑZ9•Øs¢)ÁhŠÂB’ÊÐe»¤M¡P›Âj‘‹6AØéM› AYù QqtÆG¾õ^¹ÎÜÇiãÈXýW‡ïûÿùŸsþQg[©YŠfEP}¢¡·±”Ì.ç# ž'óE“]ӵѰÅTBU@DZT ¥éþºÎn/ ¨ê¢úÞw÷§zèÑ‘oÏ0x))óãABt2gÍN³ezIéùO´vNv=,ï¼Z²óÁã]§|Ô¼²x„­ÀU|¦Ž¢úp$XÖlK/¸È+Ÿ¥Nwcf1\r/Tº­jŒšWKrcúŽš‰Ü²>åÓv.HŒsßãö¼òu¬«¨CŒ2Õ+^m{ qðM5€ö çùoUH‘FÔI£š¼PTcja5=Ž< æíÚeU©@ n²Ý9¶÷j÷Îî²Äw㉯-ë=?©Î`s3NyN&Š4â ÇLÍ5%œ¿Ùwg¬C»ýÇâœ5ÁËr°|Š›™‰M%`X“ošûåýÎÛ,_4Eýëº &“DUT73„Ñû £oweâ?‹a±%27Yëf>\bĈ´gyV$&ç¯^>¡[\žöÒ$ë1ð T•Þ2žôÕrö\’²¡úE¬Ýüê¦\q°9kÚÿˆ&ç=À£m“ Bÿ0?Ýÿ¨€o‘ìt7vl>#ÑœÒ÷­®²×ö€ €õäË>kQýxãÖÊajuzd›– Ç’Qb2¥íùáX{<ÓÄ*OÆdÞË&òD•±USlî©î.ØrYMP­i¹ÏÄX2J®S Ï›ÓwñzÞM 2€|K…À³¶ˆØSÿØÈ?m`XÓ~]‚}·¦„tjTèU¼zÐxãoX.;„˜ øIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/asocketo.png0000644000175000001440000000012311353112764020762 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.636395497 qjackctl-0.3.10/src/images/asocketo.png0000644000175000001440000000136511353112764020257 0ustar00rncbcusers00000000000000‰PNG  IHDR(-SÎPLTE#%;*+;.0;<8=9=:>:?;@AT5.Y:.Z:.DD=Z=,LNHG=IH=LK=ML=ON=QP=SQ=\[UT=VU=ZX=^[=gfa_=ggb_=iieb=fc=ngmnhf=nojg=pqli=ffftmnk=us pm=uvvvso=roItq=trIÿ00ws=yu=ÉMA{w=yvI}x:}x={wI}|4z=…ƒ |=‚~=€}I}Iˆ‡…€=†=ƒƒHŒŒ‹ Š„=‹…:‰„Iˆ=Žˆ=Š:èZLéZK”$Œ‹E‘‹=’Œ=‹IŽG”Ž=˜––=›“&˜’:˜’=˜™—’Iš”=Ÿžœ•=˜UŸ—:ž˜=Ÿ˜=£œ=œ›Y¦¡,§Ÿ:¤¡Aª¤-ª¦1¥Ÿiª¤I­¦:³«Iµ­:®©j·²1¼³,º²:¿´-º²I²®}Á·-Á·.µ°|º)·³|Á¹Iľ+Ⱦ:ÀºkºhÇ¿I¼jÉÀIÎÄ:ÇÀh¾ˆÎÄIÑÆ:ÓÊ3ÑÇIÒÉ?ÈÉÕÊAÔËIÍljÝÒ:Ðˈëà:ôèAõêB´µÛñtRNS@æØfÕIDATxÚc`ÀéÉq‘¡~ÞîNö–`´iSz&u·64•ši§0¶L<¡«“)Õ,ÝÑ"'.ãS ë‹ÐíÞŸ«–™ ðoWèÕfa‰ÉŠ W x7pÎ`™9“½&ÉW,àVÉ?‘uæL¶2Ogi°€c‘A©2{p—•XÀ¦ÀC#¯º¢1>ÅH,`^Ül窢ÏÈ# 0Îfί¯­ 25µ èÅúX»Øšp[Xp ‚4Ue¥¥$ÅD„xÁ ZH€MÄ6çröIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlti.png0000644000175000001440000000012311353112764021010 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.634395 30 ctime=1364826684.634395497 qjackctl-0.3.10/src/images/aportlti.png0000644000175000001440000000031211353112764020274 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH@€€€€€@ßßÀÀÀÿÿÿ³)òtRNS@æØfcIDATxÚ-ŽA€ E-ÜSkÆ;Ø’8îÓÑî„Pbßÿ¸V[µ¾\Ñya°‚Ð2¯Ú)©PpHx3;µ>…„ÚÙ{J6re¸FŒ#seŸ9ŠÎ8“ýGíbóÙIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/edit1.png0000644000175000001440000000012311353112764020160 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.595395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/edit1.png0000644000175000001440000000033511353112764017451 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®Îé—IDAT8Ëå’Á à —È¥P›ÛÀ‘ì&¨ÀEï”1yK‚•gVâ´sp·'ý(7à¡çÿV@)%I’÷¾a8ڶÿïþv{fFn%ŒÂÀÌ03ÖUT³ø÷×ç|.÷@’SJvæ¾Hz–P¡Øìs\äþú_þ º/¹@žš:ó¨áxešàx+ÂÙ< ¼Ã\yÂ*¦áIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/apply1.png0000644000175000001440000000012311353112764020360 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.595395 30 ctime=1364826684.595395497 qjackctl-0.3.10/src/images/apply1.png0000644000175000001440000000040711353112764017651 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  d_‘tIMEÚ|€$:‡IDAT8ËÍ“Ë € Gí‚6ð® X‡e¨e`6àê° ¼ƒ â'1n²— “G²ðÛ²»o­°@ã¾KB0FnfÆòšèÜyzÅ&‡Õµ\Û§}Á§Ç¢ ­–»hq#g±B*9•ýÀ[~ˆp[ßðx¼‚—j>;ºˆ›u+XîG6IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/msocketo.png0000644000175000001440000000012311353112764020776 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.681395498 qjackctl-0.3.10/src/images/msocketo.png0000644000175000001440000000114611353112764020270 0ustar00rncbcusers00000000000000‰PNG  IHDR(-SMPLTE  #%;*+;.0;T5.Y:.Z:.DD=HG=IH=LK=ML=ON=QP=WT1UT=VU=ZW3ZX=^[=b_:a_=b_=eb=fc=hf=jg=li=fffnk=pm=so=tq=ÿ00ws=yu=ÉMA{w=}x:}x={wI˜m8}|4|=‚~=}Iˆ‡…€=†=ƒƒHŠ„=‹…:ˆ=Žˆ=èZLéZK‘‹=’Œ=”Ž=–=˜’:˜’=š”=œ•=˜Už˜=Ÿ˜=£œ=§Ÿ:¥Ÿiª¤I³«Iµ­:®©jº²:º²IÁ·-Á¹IȾ:ÀºkºhÇ¿I¼jÉÀIÎÄ:ÇÀhÊÄLÎÄIÑÆ:ÑÉ9ÑÇIÔÌ1ÔËI×Ï9ÝÒ:ÛÒBÞÕ7áÖ>áØAãÚ:äÚ:ëà:ëà?íã?ðå@ðåAõêBŽ7ÆàtRNS@æØfÇIDATxÚc`Àn®N¶ÖÖæ¦Æú`—ŒÄèø¨¨€@_Uy€c"KprZnzd«XÀ.<4I[QP;ÕG,`›¬Í¤-¨Í¬) °ËÑÁLi°€i@.P=Ϙ+ 0òËòH$K , ç• -®Ä‘¢`-O“8°-ÉÎB`5ï ݘ”\KKN°€²;›‡¡¿¿•ŠŠ:X@ÑÞLÓ@[›C], '#%!&**ÌÏËÍ`G Ýe%0phã²IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpto.png0000644000175000001440000000012311353112764021022 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.636395 30 ctime=1364826684.636395497 qjackctl-0.3.10/src/images/aportpto.png0000644000175000001440000000046411353112764020316 0ustar00rncbcusers00000000000000‰PNG  IHDR(-SiPLTE_@@000542@@@``0PPPPPUTR@``€€```5trjhd@€€€€€@  ÀÀŠˆ„…¤¢Ÿœ–   ª¨¤@ßßÀÀ@Ÿ¼¶ÀÀ€¿¼¶ÀÀÀÐÐÐÐÐßß`ÿÿÿ ,OšgtRNS@æØfyIDATxÚ]ŽÛƒ D¡bñ–¢"A[RZÿÿ#ÕhžvÏd7âom!ØûýaÆ€š™?µfà=>µšù6pÌ—Ò ¾_Vpó]Ã}+¡‘H!ᕯyŒ¤Ò‹¦Øúˆ è½>(µ‹³=%ÜqÞS —ÿ7›^·ëæÁÚÓ%IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/accept1.png0000644000175000001440000000012311353112764020472 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.596395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/accept1.png0000644000175000001440000000027311353112764017764 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎéuIDAT8Ëå‘Ñ À DŸ¥#u¦¬¡]Ùt&ûU04ÑJ?{ Ç;/~ªB»¯ÛÃèL®D€Ý0@hd‚ ÞÇl Íð dp꣺ ;=;==6P>J<X;=?ICUB@B?a>CD2ACAJEMD$NB.VEDFCOE5OG,GHFRI(VJjEXH$TH4IKHOIClGOM0cNKMJNNFMOMSR:VQ@[[RTQnWUVTVXUbaY[XgY>[]Zk\B]_\mc#^`]dd:_a^`b_ac`}a&bdaib\scCkgDoh9ti)khJueEfheuo&mhgpikhlnk{r>npmnNvnhoqn…vwvEqsprtq‹zsuruwtwyvxzw‚xly{x’€zy{}z}|†]‹}f~€}ˆ~r€‚ƒ€‚„ƒ…‚‰„ƒ…‡„ˆ‰†È‡‹ŠŒŽÑ‰™G“’Š•”zÕ“•’”–“°¤–˜•˜š—¥œjš›˜¶©›™ª™Žœž›¦¥^§¡{ž «ž²±±žŽ¢¤¡¤¦£®¨‚¯«q¥§¤¦¨¥²°i³®t¸¦œ«­ª¯±®À¯¤²´±µ·´¸º·Éµ¤¹»¸º¼¹ÓÎù¿»½º½¿¼ÈÄáÓÀ¾ÁÿÂÄÁë×ÅÈÄÇÉÆÏͱÊÌÉÎÐÌÏÑÎÐÒÏÓÕÒÕ×ÔØ×Î×ÙÕíé|ÞàÝãåáåçäçéæëêáëîêñóðõøÓ÷öíô÷óúùÜùûøûýúþýôüÿûÀœ˜tRNS@æØf­IDATxÚí—mˆEÇwvï8‰Âž^ÊÝyHêÑØ˜JN»ÚèPµRƒŠo«¢Ô¥­Ú6\+ –ž=Dñ¥VF϶V¤ù S´yP©/=„n) ö¢MIL7½k7bcöi`%–^®àìÅÒ¯“é'ÑçK>ýæ÷þLØ]Eùþ}£uuiš&Ïwôô¼³Bë’>¡ûòù¯ôhïñ«äøÞ·îúaù lÙÀ†døy;¿¹yÝ Ý6¯þô·šÞ&œÖ´«w<ñȼ;ׯ|NÏ4÷´×ýÙ=w|xðÄ™¯ÿî¾ß,Ï4›v´Ã³éSþ¯³ÃëBK™×hΞ»­ ~°îÏæÜ쌣^óã3¹êG^+Ì£­{¯þÙŒõ›Ÿb_}ûò—· û JêÞî?Û¬b†Õ+ óµ'W/ÚZðö6žà=î?ïC*ŒP÷½Ë¯½þùù¢~2 •é}¿Ïž¯îC¨ç¹_O~¶ê2Q>ŽÇÀ‡éÊ.¾?Ϻ’ó_¬ͯ…6‘1Ûv¨W¶p?B½œßÿ˜*º"•ùœÚ¥©«8,Ù§¢À¿ îŸXu&§\NöÝPg‹ÎßÄ(¸(ñü&ìÝKnåý=Ô/¸€ݵo‚UÌá-R“°÷?x“Û ! r%æ7ª€˰àºqØ\Ú/t€¶€¾?žs«5¨»@±°iDÍaþâQ”d`­6š`ÛŒ` §Œ$6°1j@‹¼Ä P®úZ™2bEéÅÉd|6’b„_äûÏñ“㌇WU4´,‘‹—ˆñº•ÏÏyžßÔ;ÕˆÆÄöW:0 üœwmFM£SÕ‚†oÀà6ÒÚ?Ÿg£¦Zk¯ êü©9?º@‹?ÑÂGØiž¿h³Ql\ÄÅŸgªíAËoÅ»Ú÷+ŠÅül©hÅ2ùy¶åרÍ^0¡‹ˆó·Ø”2,¹þÅà|ÖfŒDc’~²Óuf~ ~ˆóž_(‘U†Sšój?M‚©Ëðƒ@XÎó¹ß>®¨ŒŽe½ZÞnñét[¯ˆ°#Ü_æ~U“y™Cäÿ’â•õ|ÇK—äŠ;*ù© û·ÏëÅbÞräý‡Š‡÷ŽÜ#íOï8~øã‘‘íwËõÏïÀ^Îoݾõ:Uò]¼ï•9~¡ªÈMè{Å÷#I^ŸªàȳOG¤ýœÊ„¥?CÔcœØ­Kó|œ€þKøJë v)<ÿ†Tå?<ËÍ´‘wSa´IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/asocketi.png0000644000175000001440000000012311353112764020754 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/asocketi.png0000644000175000001440000000137011353112764020245 0ustar00rncbcusers00000000000000‰PNG  IHDR(-SÑPLTE #%;*+;.0;<887$=9=:>:?;@ADD=IG$JH$LNHG=IH=LK=ML=ON=]N#QP=SQ=\[UT=VU=ZX=^[=gfa_=ggb_=iieb=fc=ngmnhf=nojg=pqli=ffftmnk=us pm=uvvvso=roItq=trIws=yu={w=yvI}x:}x={wIAœ$}|4B$z=…ƒ |=‚~=€}I}Iˆ‡…€=†=ƒƒHŒŒ‹ Š„=‹…:‰„Iˆ=Žˆ=Š:”$Œ‹E‘‹=’Œ=‹IŽG”Ž=˜––=œ”›“&˜’:˜’=—’I•’Tš”=Ÿžœ•=Ÿ—:ž˜=Ÿ˜=£œ=œ›Y¦¡,§Ÿ:ÿ¤¡Aª¤-ª¦1¥Ÿiª¤I­¦:hÌAhÍA³«Iµ­:®©j·²1¼³,º²:¿´-º²I²®}Á·-Á·.µ°|º)·³|Ľ*Á¹IȾ:ÀºkºhÇ¿I¼jÉÀIÎÄ:ÇÀh¾ˆÎÄIÑÆ:ÓÊ3ÑÇIÒÉ?ÈÉÕÊAÔËIÍljÝÒ:Ðˈëà:ôèAõêBªòntRNS@æØfÕIDATxÚc`Ài©I±áÁ~ÞîNöæ`”éS{'÷´55W˜j¦2¶N›2±»‹)Ù,ÙÙ$'.ã] éÓí›1!G-=N,àߡЧͪðnâšÉ2kGm¢¯>¦f] &ƒc¬øªx~#Sõ@Vl€Åpž@;ãp<Áî"V@@&sb”6Ÿ.³XR;9œÏÀ+o °˜€aŒÞ÷pjà-üSðvFLÞZ`+Zg<'¤p<]Ï#H/„ÔÏg3>^n-wXî®Q^ݹ4µ¯ƒMùú‘vñ8lCëÝme/TÌÑ$HEGü¼m+`E¯c-èäp6‡üd.c¼´€]¡N• ¤ nµ”½Xï×QïjØuåñtYÆÓù A·)¸ß×Pü‰˜&h°1(ñºœ@ß§®PŸ½‘ì'iW¤æ_“’s ¢ÃvC¿ÜBt-ÿìßV`ÑY¨IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpni_32x32.png0000644000175000001440000000012311353112764021647 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.719395 30 ctime=1364826684.719395499 qjackctl-0.3.10/src/images/aportpni_32x32.png0000644000175000001440000000152111353112764021136 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÚPLTE©œ“        '".!& %, $- &.!!!"""&"###$$$-9&&&8:((()))*****+,,,2, ---)00...///000111333444666:63Jp9995=>;;;W]S}]aBBBDDD2LYFFF^ŽfmIIIa“#WrLLLUL<g“fkgt$^wQQQ ryt¦s,fƒYYYYZZ‡[[[i\@bbb7t}ƒ—tfMhhh‰™3„‹œyiJ"† nlh=‚Œ˜¾™Á—¥m„…B—š¯Ý"§¬.Ÿ¿'¨­ƒƒƒ(¬²„u½ñ‹‹‹ŒŒŒH©­ŽŽŽ%½Â’’’–––ƒ¥¥+ÍÓ¬œ‰    ¥¥¥’´µªªª­­­®®®¯¯¯½¾®±±²²²Ä´¨¸¸¹¹¹¹Æ¶©¢ÅÅ»»»ŸÍÎÂÂÂÃÃÃÀÅÅÆÆÆÈËËÙÞÞ¹ôõäääåååçççÙòóèííìììøþþùþþ^ÓºYtRNS@æØf%IDATxÚc` æÎÅ//™×¦ŠWYi›^C¤L“ Ú-𩋈©î²˜‹Û-sõcæÎÍÈ÷Å¥‚Qo®WÓ„Þª9œ*”¹ŒúgO©JPÀe‰‹ÃD<*æ¦Ús³áS1×2+ ¤bN5.…aÜ`3âıª`w/ 㪘ْÄG…MíäÊÌœ*X™­Ê'u—DñâRáÊcR×Z_–.‹CEšµ•cߌìh5ìÁÁn—oÀáÖê$€#DÙ=rlåý§÷háŠÁà@ïP]|*ø„ýšðª•˜«V¡'‰¡¢Y׿"D Ãfõi=:øT8ëú‡kâQ¡Ø,¯?«!Ÿ&ž±S¥ñefÇÈ¢P¼™2TļˆpÞé2X;¨¦íIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/xactivating1.png0000644000175000001440000000012311353112764021554 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/xactivating1.png0000644000175000001440000000046411353112764021050 0ustar00rncbcusers00000000000000‰PNG  IHDRÄ´l;ûIDATxÚ퓱jÃ@ †Õp“–L…½fÖ;¼ömŽÎÝ´ø!<&«Aïpkºv)2š»â.N011‰K:ùŸtÜÏwâô `Ñ¢Eÿ¯—«sADÌ\zï×fvRÕ&Æø_³^@ÄRDÚ”R7TJ©‘Ë9ÜBDÚ3ì°ßvבЇ¨DT;=ì·#xJ©#¢ú^抈€™KçÜèòûsw©sÀÌwÇŠ™Á{¿¾e§|#°÷ÌìtËðºy»ÔS¾ØÌ@U›œó$4ç ªÚ<2¸ç¥BDž“cD9o^B8VUõB8ö+þ´Ò}ô (¨*Ägmò/·‡ß¹ Ô÷IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpni_64x64.png0000644000175000001440000000012311353112764021661 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.814395 30 ctime=1364826684.846395501 qjackctl-0.3.10/src/images/aportpni_64x64.png0000644000175000001440000000333511353112764021155 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ì÷PLTE         #)/!#!2&( $1!+B$"&/!# %4-D'(,4)8&(&)+(.*)4A+-*1:?D,.,>^ ;=;IZ Ms#IJ;?A=?@=I?/S]AB@Zt?CEQfYy_bDFC\Vf X„bp[_elGHFJHLTH4fJLJd”dxg’'YuMOLh OQO bwen“hŽjmRTQ5`faS9v|n‡qs8_lTVSu‚t²}‰~„ yuw/j†[]Z‚“k\Bd]W-q’`b_k`Oo`FƒÀ‹–bda‘`egscC‹œ$}|»„–ueE?xw4~€hig!ˆˆŽŸjlinlplnkšªnpmoqn-Œ’™Ã•Þ€oNqsp(‹·X~€C‡œ ¦´wyvxzw£¬#™½¬Á7˜˜z|y®¶‚ztA•–¯½|~{}|(£§‹}f{€ƒ~€}?š¡n‰†€‚¹À‚„ ­ð³ô„†ƒx‹ŠºÈ…‹Š„‘“‹…Áû˜Š…Š’Ãɑޒ”!¹îÏÔ“•’ÍÙ8¿Î§–‹š›˜^»»à÷²žŽ£¥¢§©¦©«¨}ÄÇ8âçµ·´œÄÆÉµ¤¹»··¼¿²¿À¦ÆÉ©ÆÃ·ÃľÁ½nèêÃÅÂÁÆÉÆÈÅÈÊÇËÎʰÙÚÄÑÑÝËÀÐÒϵÞàÐÕØÓÕÒÕ×ÔÚÜÙÞàÝâàä¿ñðºõóãåáÄööéëèíïëñóïðöøô÷óïüýüþûùÿÿgÿf§tRNS@æØf”IDATxÚÝ—{LGÇqgoØ3ê®W£å5-è¹ÕFí ü§Û,AÅh‹ÕøZ­Z•¤ØöZm…Эâ 5’æJÕQPc<1§‘¦¼¬Šרس—­ñêÉòGçî þÛ™ë_ÿç“Ï~¿ßL\Üÿci€Xö#—ys,^õšF,§Smˆ‰€4§B\°2¸¼qjÃõ’_»=¬¨8åÜã­7»/2;(¹¥[ÄVغ¿´´ß0¤1`ôwû¿Ž8\ðþWÕ ´•G—FZÝþg]‡çNLKì‡ÏXÖíºß®ÔV,£%ða‡ùNl4ÜëyÖE‹V ’ª–%P;‚Ýfãßqû­^6Èà9Ñ¡è~V‡7‹†“U÷ã~ZÐòvŠy‡‚09€Å—¿(JvIÅLèÝ {[ŠR’R³¶5ÏÛˆƒŸÁKøp_cŸƒÊäÀ%-$„MéÄá•—9lÉá(…‡xd‹äÐÛó×Ï›>ù”âßQ‡Esèlú£ëJõì7þýùÀ¥öå@:¾×ÛscçÊ=‡Ö ´„tÙ“G–ûŸŸ¿pçÚ±“4ÐçÀ#H\×ûîF<…ÃÂèWp¼Cvwøüw‰ÃžUcm-âyèÐ4Üa<ñÕ<|ªö³ÁtýP;3%q|væiïÀžv]ªþ6‡ÎayËÚÌ,ÛøÍš·h¦Hš¸oAs˜ ¤iíÞ6£|ò’×5ªY5¨pI !88(ì =7*Ç&PN»¤IU5ÍsÒ‡%"Q½e»u;íÄÍ,®ªÙxõTÑf‘W}¡ AM@Š«Vœ9³ø‰‡Œ?ÐlŠó ó3p‹¢jè2Ge ˜êœvÀpÆnjB|bRÖŽéØôHvµÓbpà¸ÔŒW!ý^IT•´„¾ È/,A6‡èÝ~,EúÕ!¡ÞÄCP,6·éÃ9ÜwIlw9á§?ëIºŒ,eÌÔÂÐÇÁQ Ùn´G:D¤'ƒÆ6é„.ŠPõY·Xs_ûñ,MƘ±šÈE:  ’`È,`¼ÙcÓE-2½#Á­ .®†°U‚ô$tù Ä’ ©°¾‘`šÖä•õà÷+ ‘gá/õ¶^z”çéZLÏÕ8 Ķÿ¿ZÿÓΕÃrá€IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlno_64x64.png0000644000175000001440000000012311353112764021663 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.846395 30 ctime=1364826684.846395501 qjackctl-0.3.10/src/images/aportlno_64x64.png0000644000175000001440000000343711353112764021162 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ì÷PLTE         !+"!/ "$"(&3"1%&'%*'/&4%()')+(.*)1,>*8)+-+A--/,F-<1231=4675796A?9:8F<;=;>@-R<J?;?A=?@=I?/`=AB@LIDD=HF*DFCGHF[IjEJHLTH4mHKMJ_P_T sMOQOdQRTQaS9]ZfWTVS``r[€WvZtY%kd[]Znbg`2k\B‰Yl_3d]WŒ\xavd`b_k`Oo`Fjj €fbda€f`egscCueEur”cŽhhigzv‡mkmj‡j/•mnlp¡gyƒtmolw ¤joqn€oN~wy;qsp†{q0Š~~}3vxuƒ”}xzwS²uz|y‚zt–ƒ‹†&}|”‹‹}f{€ƒŽ €‚‡>»}žŠœ‰•‡?‡‚Œ3 Œ„†ƒ‰ˆn…ÃŒr‹Š œ™•<“‹…™˜/˜Š…¶‹/‡©™‘Ž’”¡›;˜“‘”–“Å™­¢°¤¼™ ¥¢2§–‹Þ”š›˜¿¬¼®²žŽ£¥¢¿¶§©¦Ä»©«¨ï­Íû»_ö²ñ¹ÎÀ:¶¸µÉµ¤Úͺ¼¹úÀÔϾ¯ÇÅ|¾Á½ÄŜúÂÄÁÇÆªÈÃÂÄÆÃÆÈÅÇÉÆÉËÈËÎÊößÓÏÁÝËÀåà<ÐÒÏçâHÓÕÒ×Ú¶Õ×ÔÞßµÚÜÙéémÞàÝâàäãåáéëèñð¿ñõ¼íïë÷õÄñóïðöøô÷óÿûëþýôýÿûkôöVtRNS@æØfÖIDATxÚå—{lEǯ3ëÌ.$u\¯Ð"­ê!ŠEÝàEE8]_ÄøJ«¡€ÖÇ©5XÝ‚NPÑ…j]Äúl4p$V«¦”ú¶kU¬<î&{5D,û9>-©ÝÞÙ¿ÿÇ-îpwVÍ´u× \¶fç]ýûúÌJêdž¬S_šÌÁWlZÕ÷$ãižŠW7Ì(¾üLÿʶ®Ç2?í¤=Vt6A%{?_~òä ßü¸­]}-Œ´÷öXº^],ÿYãß~Æÿ–Éír˜¥Gç̼tÞ «\zÁZ[‰Ècœn‰1N"2Zk«Gú"2N "#€â.+ˆ¨†agŒ?~‰èp@J eY¾{ï_s"3WƘï¢?šÎgc ˜¹òÞgM¼af8ç¶9â\lœs!\rĹ:0!¨jß4ÍîjÝXq%¥Uí³ã@DOI@Dž“ck-Däºy]]×ç¶m?ëº>Qw÷¤Ë•ž£‡ùC¡ªÈ×’/‡±Èž¥*‡IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/down1.png0000644000175000001440000000012311353112764020202 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.847395 30 ctime=1364826684.847395501 qjackctl-0.3.10/src/images/down1.png0000644000175000001440000000030611353112764017471 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®Îé€IDAT8Ëí“Á … DŸÆŽöׄeˆeHMNMxñ€¸ø^Ýæ‘Í ðr:O\—kMcÒéþÐ"KòÎ0—zÿv…P¤àEçÄðSwèA0²™ÝzUID`>ã¤4»M¼‚Ôæf•=ˆgnjHËüw‚‘ƒ‘÷?ðx.ͼ:à…·cIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlno.png0000644000175000001440000000012111353112764021006 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.813395 28 ctime=1364826684.8133955 qjackctl-0.3.10/src/images/aportlno.png0000644000175000001440000000026111353112764020277 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH€€€€€ÀÀÀÿÿÿÿÿ6tRNS@æØfJIDATxÚc`€5(Í–e¤&CÔ@“r*DFM- "pTS‚¤&AÄÀJRD  ‰Ž5¨SRD@YjÌZ} çk×IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/socket1.png0000644000175000001440000000012311353112764020523 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.636395 30 ctime=1364826684.677395498 qjackctl-0.3.10/src/images/socket1.png0000644000175000001440000000363211353112764020017 0ustar00rncbcusers00000000000000‰PNG  IHDR szzôbKGDÿÿÿ ½§“ pHYs  ’ù¥tIMEÓ   Î='IDATxœÅ—Ío\WÀ÷¾™7öØ3'¶k»ÆIê4‰K>7@³®hÉ‚.`ÿA³gtQbA!¡°d BÒ:M𤥠v<¶Çž™7oÞ{÷“ÅäÓIÄDq¥««{tß»¿{ιçÜÿç&\üå7ÏçœçÀûÑèîÏ{whÝ3äÀåë­Ë—.] <t.–¼íDH ¼ðBâœ|ÄaÃX‹1g Ž{`€ö اúò£“Çœý`¶qt6DÙçB¼•X#p>ÄÉk,Î:´5hc°Ú`ŒF Ò ´ T ÌH =èõ׮fl].<À:ع#¯œ (Š£” û€Œ!ˆ±ÆŽ6µZ#PFÉ‚8,0.DI©`XÀOº ƒÆ9ë9÷Lç@ÊebÊ"`¯pé÷°þê4_x1Áú ¢x­5Ö:¬µXg°^ã¼GÛ]°KöùÙχœ>%xé„§ÈúÎáö€ Æùkþp)àòAÈ&ÇV_@ ¢Z‹Èz¬s#3‹6–¢0ඈ«wy÷ŸñÞ{]¾ýzÄÊ2hý€øO"Âûˆ²”¬¿Ú š_H÷‡”êc®¢´c— Ö)d ‘Ò„Žæ4¬­y¾÷ýã¬,u»hóпíÿ$„Xe’ã«MNž\e8Ф·°Ý]ÒN‡î `³7¤ç3´Ï©MçL&C¦¦›(½Àê±&§Ï,³½ý ív¥=Ö G ‘AL$t÷=´ÔÒ}f&$•Æ‹øãÓ;¤ï ºy´ÈQ:ãîV—ýNI?½Éd}‰F³A6´DÑ$RŽ®®÷ci@"DNâT€êöI&%h™dí4¢Ö&¨Ü`1*Á¦ ösÚí=N¬µøóŸþÁ•–+„Õ8âÊ$R–8WŽç„Î7ï%Ƥè^F¥1O²vŠðÈ:¶ѹòt‡vÚe·? 6U²r"äõ7NQúY†³Ú ø)ŒñãßçÀzðNPä=²ƒPK sG 9Úý ä.¹ÚB f°Z‰¤=Žh­(µ¢TQ”Ól Á€ýý–VC†:¦…k]À1§Ì xùìë_š ëuIêÑçÙx‹«7v±¬#£—)ËŒÒhŒرü¨Ë@S‰û4§§˜žªÓÞiç;”yÉÝíü³Th­8’h…ÜÝ&œ0HY§V[Æëi’É ¬N©M§ úÏ¡e@JC$KæiÎ̳quŸÍ­”ƒôi¹Çδw ®Âdì(ý.ÆÁéW ­“$“-ffZhwÀöí !*8'Çp£û[hI=Þãw=óó†^X!Žç¨M–ÌÌxV–-A(˜ˆÉô&F[æêLVê,Íõ¹xéSÓ=´’¨{Áh¬8 4-ùñOüæ·]~øƒUÞúÎ1¸N}j ç< <‚0äÊ¡µÇ™>B¦üúwŸrñâg|ù‹!§Ö$ÆáØ9áØAãÙ9ëà:ëà?íã?ðå@ðåAõêBñvJÃtRNS@æØfÇIDATxÚc`ÀÎN¶Vf&Fzj`ÇÌÄèø¨¨€@_y€}"KprZ^Fd«XÀ:<4ISQP3ÝG,`›¬É¤)¨É¬) 0ËÑÁ,i°€I@P=Ϙ' 0ôËòH$[ , ë• )®™Ä‘¢` wã8°-)vB`Uï í˜Ô<;OO.°€² ››¿¿‡««X@ÑÆT]_S“SK‹, '#%!&**ÌÏËÍ`G Àd%TYäÅ¥IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlti_32x32.png0000644000175000001440000000012311353112764021651 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.594395 30 ctime=1364826684.594395497 qjackctl-0.3.10/src/images/aportlti_32x32.png0000644000175000001440000000257111353112764021146 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE 24   '%-.-/'&/045'(&--0/ 5625#-.68==-.,54BB7:02/AB231342-78463$=;FF685 LKRP9;8 FHJJ#IJ=?<QPMN@A? XV&LN^`ACA"QR7IH[Y9JJce4NLghhj"\[jl+Z[2WYegEPPKOQMOLdb.]]rsOQNDVUuu,ed3bb:`arsF_]7ff1ji8gg@fg5nm]_\!z|"{}Flm`b_:srac`„„(efd:x|EttFuu‡‡VpmhjgTruB{ySy{M||mol(Tz|oqnC…‚5‹ŒQ€€L…ƒFˆ…surtvsytsO‡…wyv4–•^„†uz}RЉG’y{x@”•O‘Ž|~{u:››^ŽŽR”’~N–˜Z’‘`Jž…‡„l’”UŸg––=©¨ˆŠ‡‰‹ˆX £Q¤¥^ ’’q˜™ŒŽ‹C®­T§¨ŽnžžV©ªuœ’q  `§ªY«¬’”‘c«­^°±N¸¶—™–w§¦˜š—Xµµs¬«b´µ€§©i±³S¼»{««d¶·Ÿœe·¸‰¨«–££Ÿ¡ž„¬­¢¤XÁ¿¥ Ÿhº»•©¨š§§j¼½£¥¢[ħ©¦oÁ©«¨bËÉ£¯°«­ªsÅÆmÉɦ²³¡µ´vÈɰ²®xÊËiÑÏ–¾¿Ÿ»¸jÒгµ²«¸¸“Ãö¸µ½·¶¹»¸˜ÉÉsÚØz×ÖŸÇÉ»½º|ÙØ£ÌÍyàÞÁÃ¿ÃÆÂ¤ÕÕ†ãâÈÊÇéæŠæå¯ØÙËÎʆíë²ÛÝÏÑδÝßÓÕÒ²ããŽõó´æåÖØÕ¶çç”ûùÛÝÚÝßÜ—þüàâßéëèíïëðòïòôñô÷óùûøûýúüÿûþÿüÁ:‘ûtRNS@æØf0IDATxÚc`À–@À€XnŸP"Œ[žcÕö…•­+4qê_°¶É>¡{óD^\ ŽÏS±‹ï¾~:‡üÂí&"bŠiW^¬”ª€÷Z;¯¬¼¼ü†W·ì±иÏ_RA^^ßñÍ‹6,~µœxr½˜¼¼‚‚¾Ó†W›1½j™wÿ~­ X>¶þÍ-´Ð†Ðû}×òååò½}/#[a™émÿúéòÃÛäõŠç_úpú^8B…eÂÓ§k—?º}`á¾ÎoNÅÛ^~ÿsþJ’‚›ŸÞoß~vÙÔyûRÞ¾­¸ûýׯ?gÖ¤#09»°vQOCÙ„UŽ—~ÝJÿù¹3/®€Ù3ÔL7311¦}»ù¶_Ï‚ÀFoV¸  __Oßšµ@—¾|ùöíÛÑYyì7lݳÌÇÂÚÖ6w¡ÇÑŸ[.=ùñóù{³ Öß~j§îbå3/åùóŠm/Ý}~ðݤ€Pih°á1²²òíïü6%¶bʶm—v¾›…Rür–,.Öí³¶Í.Ž­¨X¼eÒ›rŒØâ¶2¨Yõü`EqlqE_Úõ Ìèä7«i}piKqllq±ë m,éA:tÚ–K[¦WĆ8º†cMûº5“ïÜÖ\«hÉ„MsèÜmGî á×òÁž{fú]Ú²¥CQBË{²æŠ›kÞW¡ÈÍW‰+ûL‹ãáææ ðÆ•µŽ´èéÖváοŒróî_ÍÇ›¿ÙX9òΕéçÊ+žÁIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/rewind1.png0000644000175000001440000000012311353112764020523 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.677395 30 ctime=1364826684.677395498 qjackctl-0.3.10/src/images/rewind1.png0000644000175000001440000000040711353112764020014 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ%:ýì?r‡IDAT8Ë­“Á € E_Œ1Lcèn£w;S= &jPJü Âÿ¯@ZøMQðmÞ¨Š[¦wHT½{{CEyõ­Áw@E° ˆ:×u—sXÂO@ƒ®‘?n‚TxB ÆP©–¼Ò dÏO65’Äçdy`ؽCõð@`à¡AœO#L‡IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/save1.png0000644000175000001440000000012111353112764020167 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/save1.png0000644000175000001440000000027711353112764017467 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎéyIDAT8ËÅ“Í €0 F_¥; ÝÁ5ê ß-· äJOJQQ¬ˆ9¥!yù-¼”`fsK°™…¸>b4JtäîH"¥»–Ìî¾éM€¾ŸÞjù÷½Uó¹íÿ8sxT@)Ã7[tzdÿo!TzˇÃΟs×Ó°÷0DIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/remove1.png0000644000175000001440000000012311353112764020530 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.596395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/remove1.png0000644000175000001440000000030511353112764020016 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎéIDAT8˵SÉ€ \©Ìjhê°ëÀÊâÃAÑ,¯ü`$ËüPá!¶ ÑÂB„-ìLHš¨0¿azOLD Û9\îˆéJVxŽ] —ÎNÔ ‹çâ,@dS8Ò]²xâ ¥i³jµ²Ø»[i§ƒŽ§ xóY>¯R£h û¬#IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpti_32x32.png0000644000175000001440000000012311353112764021655 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.595395 30 ctime=1364826684.595395497 qjackctl-0.3.10/src/images/aportpti_32x32.png0000644000175000001440000000257711353112764021160 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE02/ %((' &('(&,-..*.!.-&-.,0013  5267 575524187463=<:7,685<=<<%9;8>=!DB>>'BA AA>@=FFCF#ACAJLGH IG+JJIH1IK(FJ¼Ñº\HY'½ÿÂÛ³O*¬2?Þ»úÍóëë¯öþêvÌ_þâן³W <úùýØñ»‡÷-;žöìEþ_þü9±IøÝ»»Û÷-˜Ø6÷¸û…?w€Ò~o.…+`NIq³¬/**šrÜxáŸ{¿A`it \‹Ÿ·…zBrdJÛ^ãå.|ýúíÛ¯CsÊÙn8ynŸ—wHddÝ^÷£¿g^xöâí‡Oæˆ#{÷ÎK×/$¤puÚãÇùË—_¸÷øÐ«H¡Õ9ÑIÌÅÏ;a.Лéùý@%›ßÏA) E]VoïÀis–÷çÄå´L]2áU-Flq†Ø¶mx¼¼%=*?¿?ãv8ftJ¸µµ?¾°<¨"'`Ž>–ô Z8wá¥åýùéaö‰FØRŒe_ï½å³óc•l2ű)`Ëž±çÔòî²0I½`ì¹ÇnÐ…åËeõ\±'k±Â¹¦-ùJ¼bÕ¸²Ÿù²<>^>¾Ð\Y‹ÉézŸuÅ|Üù—QcÙó‡Õxó7?‹(B–°ò,ÉÖIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/xstopping1.png0000644000175000001440000000012311353112764021266 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.596395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/xstopping1.png0000644000175000001440000000045211353112764020557 0ustar00rncbcusers00000000000000‰PNG  IHDRÄ´l;ñIDATxÚí“1ŠÄ0 EÿWn¦ÙÂeî ;r$³õvjrˆœ! 3Œï0¥–)ƒ½d›8 »°8³ÌTy Ââ# é ØÙÙy=‡ï–ˆ>˜¹sÎcŒ7UCïÎý`­íDdJ)Í÷¤”f™¬µÝ#u[™æ?‘ @»©* ¥ÓËéô+JçD4ÔÖlˆÌÜcÖägkŒ1`æêq4Ì çܱF\«€Æ9‡ã­F\«€&ÆUsÎkòhBΪ:nYÜó\!"Ïñ±µ"R.oðÞ_û¾ÿòÞ_‹µÿ:éÅzX UE¸³Ü¾–áà Þ¼ýIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/quit1.png0000644000175000001440000000012311353112764020215 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.595395 30 ctime=1364826684.595395497 qjackctl-0.3.10/src/images/quit1.png0000644000175000001440000000033011353112764017501 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®Îé’IDAT8ËÍRA€ +|É?É3Ðgè›äMó 3U77—u-[ð«@<0Xê}º€ð&+^¤ŠG-Ø©¸T‚E¦ÈŸÌÈAG[æÜv çÏ,29ÔÖkÓÌw'ÖËј;sæŽa¼Ç¡Eæµ¶Dn²7³µÅbÛ ÜÙÞrßs»÷Ø>'`®65ÁIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/open1.png0000644000175000001440000000012111353112764020172 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/open1.png0000644000175000001440000000035411353112764017466 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®Îé¦IDAT8˽“Aà ‡¨?gåLžòKû-î¡¡J(UH+e/+k ÀŸríFÎÙšµ¦åœm/±Øê±/N)¡ªxP¼̳X§™ûÒ‘ƒ÷T¡SK®÷U=ø¦èÎ2¶J)£*„–Áéuž!Nõ6×Õ yÙ V C¾Å6 ¾£Å¥t¿@º€+1* }çvñ/-½¹SOÑ)ÓðAIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mcliento_64x64.png0000644000175000001440000000012111353112764021635 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.809395 28 ctime=1364826684.8133955 qjackctl-0.3.10/src/images/mcliento_64x64.png0000644000175000001440000000632511353112764021135 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ìúPLTE   #  *.2#6- ;@.6H($-"MR-+0+&X6*%S ]b!T&71,h Z& >1,76*l$T.q'x'N9+[5 @>=~,@B5E?9„+K>:z/ .EF4PA3-p9JG;‹1b>+LFB~8›0—4—4cF8TMGSPNTRESTA\RB–@iODWVT`SO]VP @lUI^_Kb\Ua]\i[VoZR‰T;ebU¥L›O+deOgf^efdqb\jedmf`ªV+okjooXroPrlexjf®[5use¥b>­`7˜hRxsqww`qlztmˆpb|zlµhC~bzt{yœub¬pS¶oNƒ„oŽ{†‡i†…w‰ƒ|ˆƒ‚¶z^¼zVŒx•‡‚ŽŽ‹Š”Œ†‘‘u†“”m·ˆo“–‡Á…f˜“’›“”–“²Œy™˜ ™“ŸÇq ½“£¤|¦ž˜É•|¥¨†ª§‰§¦œ©¤¢¬¤ÅžŠµ¤Îžƒ°¬‹®­’²ª£°±‰¯¯¦²­¬Ð¥‘²³·¯¨¿¯¨·²±º¹ŠÊ­¡¹·œ¶¶­¼´­Ö¯™¼»²Ø²šÀº¹Ãº´Ã“½¿¼ÁÁ±Ð»±Ç¿¸Ü¸¥ÅÅ­ÆÉ¦Éʠܾ°ÌȦÌÄ½ÊÆÄÍÌœÕøÞôÑÈÁÉͼÑРÍÌÄÐѨÐÓ¯ÚËÅÖÎÇåɺÔÕ«ÔÏÎÕÔ¸ØÔ²ÓÖÆÛÙ©èÎÅÖÚ¶×ØÂÜܲÞÚ¸Ý×ÔÝÛ¿èÕÊßà¶äß½áàÃßâ¾ïÜÑåáÒãäÎåàÞæäÈêé¸ãçÖñáÜéêÓëìÃìêÎèìÛíèæñéâðíÝðñÌ óòÕôðáóòèøöÅöðïôõÞòöåòôñöõìúùðý÷öþúëùûøÿýàúþíþÿç@LtRNS@æØf ‰IDATxÚíWkTSWVDE‰E@@D^*T†žZ‹RÇZ¥5è4â  •‡($ˆŠ4š h¢B™Ó€LAˆ—€„G¨P1¢ÒšµfŸ¸ÖÔúsÖ¬ùÎͽY+kçÛß>çžiÓþW`°í±·˜ ñy9ti»ézJ’“‰€ 0$ÌäuÖð4 Þ*•E¾GSSÏ¥¦¦žj#ÒE"‘àcÅl&Æd\¦Ó(Ô3T2ÙÉt;" p‚†jÍ:€·hÁªƒÇŽ;tìÐ÷RüƒÊÊJ$À óò ‚TJ"9*ÊÆ5ˆ€ ÐןYÞX5©@9¢È]¶û¾C"2QÄçßåò‹a1Y×PAj||llIÏÏÉÍO0ÐQÚÚÀÓ(x¡âØíÞ§ƒát- bH€ Ði@˜HŽŽ•ãoU] x—Êdcy9ø ¶IŒŠŠð×öÜ820ÐGfh•6 nkLŒ=àôðñB7÷¯˜gG3¯3Vï`OŽ&zÊBçâñ0ÿÌò÷SIs¹øøx¡áåãí²©0VÛ5‰Î°š VäèÐòuaó!}d â5ònOñ@V`ìgpù¸ø^fzÊÍŒT*¹ÜÜÏÈÁœ0U€ ‹'€TñÜ4 I*Í5öÀÃ½Ô ÞK" //P9L—;Èõ<ÃHNó 5B¼–¼Ÿ(˜€S8Ú'1hPþ¨DrèrGñÈ0`†J¥âU n»M üDð˜àíƒÎÑKìlüü<]Í?10Æ·Z‚¸ZÙ³)U€zzþäá­—»œÃø9§€%¼D'¶€:•–<à%˜8Õƒ'ÿúÔÖÙeãG µ5¼MÆgן£. „«äNÒ—Á ›‡¡“=ý)#9--A}ééÔ¸RRÒSÒï¿{Ù(ü°tœÀi¸gZ¹áá_5 êŸ?}†ð Ý~þågt©Q%.,˜èó>è=½=}½b¼‹Û;››µ×74jêjêjª«ª««Q0|nÄiÍå¡ ìéíëU‡CÙÞ.®‡. bPl]µ º\P.ðàâñ~¸·`J³»õHBÂáH@Tä®ÈH4nÇŽ†¶0æðþ˜˜Èý1{¾l@X³á‹¥¿Ûx;@¿É)Èeå^JONŽŒÜºyóúÕ+?[¾tá,ùǵî¨ñ„õˆ´§åá;×®eŸ=³ÿ·ßlXð‘½(´Î£ ™L*ëii†ìŒ³Çãâö|ûÝÇÀi=úö…B •íE ·²³Îžˆ ÿ8ÖÁ‰’ž––œ–œ Æމܵk3`õ77=üçÅ´õÜ¿_öüåøíí;øÏñá× <+/¿•}Öíó?@x èëëzÚÕÙÙÕÜÕÕÚÜÚÚÚ¨ãݾqáäw¿¯Á¡½O,îj$nÆQ÷­Áêê:øTUWó~âäþ5HbOöÕììì,ô¹z5;++ëâÕ¬‹/dÁ¸páìɸ8(æš… ˜>ë?A[{–¶úËt€ÜaÚÿñ߆sÀñGÌEÚÔIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mclienti_32x32.png0000644000175000001440000000012311353112764021617 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/mclienti_32x32.png0000644000175000001440000000313211353112764021106 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE+2' " ( -0 ""7:<"-#AEI21'M JQE&/62450V97+6:,1=3Z\ 3>9>;/<=;>=6`?@.^(d 1H69E;g#ACA!W0i/O9n"?KAi,*Z9s'CKG `8JL9>QEu)y%o7HPL8[ADSMBUIt/IUJ++VUMTUS‡*K\J„5NZPWXEˆ2J]QRZVJaNZYR[\I&z;‘2’,PeMY_VLhO_`MUd^WdY™2JnS4}Q1€M\i^KuVghUWqR£AYq]K|YG€\B†Tgpl4OqpWN„Y£IivkD_NŒ`JfmzowxdK]pyu>Ÿ[}~jbu‚v5¬Yzƒa“n†ƒu„ƒ{‚„yŠƒŠ†‰ŠuŽ‚mš|y•†E¶o…’†‚“Œ€•ˆ“q‰’Ž“’x}ˆm¨™–v‹›•’™œ‘›–˜œŒŠ£›œ‡ œ| ™_¾~‡¨’™¢—¥™“¨š¤£ˆvº‘–§ ±›«¨‡ž«ŸoÇŽ¦¨¥«ªŽwÆŽ¬­…ª­¤®©¯¬ž­®™¤²¦±¯”¨±¬­±¡‰Åœ³´ž©·ª¶´™–Ä¥¬º®‡Ñ ¸¹¤Ð ²»¶ Ç©¸»«¸À¨¾¿©´Â¶¸Æº¶ÇÀ»ÅÀÆÂ´ÁÅ´Ú°ÉÈ™¬Óµ¥Ù±½Ë¿Éɰ±Ó¼ÀÊÅ»ÍÆËÌ¢ÍÉ»ËÊÁ­Ü¼ÏЦÁÒËÓÒ¢ÐÏÇÓÏÁÓÔªÇÕÈÒÕ±ÊÔϼÝɺáÂÕÔËÚÖ´ÙÚ°ºåÌÚØ¼ÝÛ«ÑÛÖÚݹÚÙÐßÛ¹ÛÜÅßàµÚÜÙÜßÏØâÝáäÀÏêÔåãÇåæ»áäàêæÃåéØëéÍêëÔÛòãêìéðìÝïðÙîòáçõèöòã÷öìúùðùûø:–¦tRNS@æØfIDATxÚc` „»¢ð÷‡Èûÿùóç÷ï_¿~ýüùóû÷o ð >~|õÞ¬(ÿõùóç·AàÊÙ³g‚À¶=ëöÜsd†ëŸ?gMžÝÝT•¨Z**r"‰î+ƒ¼«ûñãÇëó‡·.]¿yþŒž’ ¨¨`7g+‘û÷Á žÏûñçóç{ÇŽžê¬¯+ö±oÎ r²Ô×»1á÷ãÙŸü¸yïæŽoäìßãle¥e(rýº Ø„Ç^~}ïæsgÞ0Ð<×è™im¢¯+'xýØ„_»Ïß;þùŽ—­žçúú6É®µHÖ×’—â¿1á÷ã¦ÃçÝñüáiÇï_9kf¥šºœï; GºüºÑ´uëÖ“3W¤×ß8u`ÿÞµŽl‘šÆr"‚Ü.€­øy#uéÒE''(¨»¶oïÞÕóøŠlåDø¹¯Ÿ[ñëvîôéÓw6Þ¾qîÔ¾ý×Îëk«”Õáçg¿~bÂíØ–––¹Å×N?4`ńΚbq ¬ÎHƒÝp9°¢¢¢¤µïøþý[ÖΛÖÙXéhÊÏÏËÁrl…Ë÷ÛÙ@Ðä¸qïþ[ë+Óù4øy¸Y™ &¸þ<§”åÜn±zcŽsD]Ÿ??7;+#Dï÷ËúÁQ@àÑæáÉÉic*aÃ#´€Iê†ï‡ô£ÀÀ;¥<Â@ÓÆSŸŸ‡…‘óÄ ?_mˆ Š ò6Q3ÖååfÀööŒ0È ß¿îÎËÍÍ+ÊËËÊJIM‰Ž ósw÷ =qé8Uúøúõã·o?~|óæý“WOž=zt÷Ù³Ïî^:âIµ+·m[¹jÕªm›¶mZ³aÓš5 ,˜Ó e(‰_ûÝãÛ—­œÒPšnÎŒ%w¸þùõëÃǧ'¶Mé*Ëä®­­=wîÜÁ‡ölÛ°jÕœÒÂTùj ß¼¹ÿæÉ“»wï\½táȲ’áá@^^æªÂÌ ôÙfŽgjêIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/acliento_32x32.png0000644000175000001440000000012311353112764021611 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.634395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/acliento_32x32.png0000644000175000001440000000310311353112764021076 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE03')-36;!@9ILRWK#]L)a  g 34.75)m$6:,q'<:.f,x'==6<=;?@.|*s/~+„*AAbHJL9;›0—4|=‹<›8VOI9ƒF ŽD]RHVUMTUSH){O–EY[GhUG[ZR›I^_L¦GtYHq^J}\GˆZCghU«U ‡_I‹dPqpW‘bK¯\¯` ®Z.ŽeL™h‚t&°f'wxd´h“~‘q`”y/€}^žŽƒ¶k3hµlF·q0 †±x¼t¦†·r=¹w%•|oƒƒ}†ƒu•Ž˜Š4Ÿˆ5‰Šu°Ž“…€ž‡~“qÀ~`“’x°™ ƒ]¨š,˜•u®›ƉB¸£’‡Áœšyœ—•ÅŸ˜œŒ›œ‡À¡ Ë—7Á§Æ‘s©š•Ëœ1Ϩ»¨8¾¬$¨§Œ«¨‡¦¨¥×¯¬­…Ó©8ПxÔ§R¬®ŸÓ¥qÏ¢Ù¶°±›³±–Ò¤‰Þ»'ֲܿtÔ½Bº¹¤Ü»?ḻ«×²‡à¾5ÞÂ7ÖÇ8س¡¾¿©ßÄAÚµ£åÉáÇMæË+ÆÂ´Û»¡ÁÅ´ÉÈ™æÊHäËXæÏ?ÊÉ­ÈɳèÕ(ÌÍ£ÍÉ»çÌgÌËÂêÑeâÆ·ÓÒ¢ÒÒ©ë×JêÙBÓÏÁêÖ]ÑÔ°ïá*ÓÖ²ÓÒÉé×}ê׉ÙÙ¯ÝÛ«ÚÙ¾ÝÙ¶ñãKïÞoïÞvÚݹÚÙÐîÞ—ÚÜÙóì@é×ÌîÙ´âÞ¼òæfàá·ÜßÏîߟáäÀóæ‡óè~åãÇòåªáäàêæÃëéÍóçÆóãÞùíéêÚõíªêëÔùð’ôë¼õçÔöð¦óèÛ÷îµ÷î¿ýúsñìæïðÙõíåîòá÷ðÛöòãõôëûöÓø÷îý÷öùûø†rÑotRNS@æØfúIDATxÚc` 8Y¡Kppp‚È;üþóçüøþýûׯŸAà%<~ôȬ(ÿåòåËÁÁ;v¬yó¦Ï;}ú È «?êò««Û Ò#Ý­­ÕÄ•ÄÅ%EDøx\OŸ‘)øõ0ÿéï§W÷,›ÚZëg¬o`` ©¢"+Ésá¨XÁå¶/¿Ÿ~û¹¦@ß@SCQVVœ÷ôQ° ¿/·=ýôåçûkS'–Ƨ…˜zhjõ‹q> 2Áò×Åê«Wß}xð~æ³ñ ~ígÓ4€ˆ pðërÁž=OÜ~ûv÷ÝØ°}+4T$ÅÅ…ø8Ïœ¸ábú²e¯/8ÿlӹʰ ³ë—vI ññ²> VðãbÄÔ©/NœØ¹iõæs‡ÎöÕ7UUdk ðr³íÛ¶âÇ1ß)sîÚ}hãæ5¯™ÖÔT’˜˜¬#Èuf;Ø‘?޹•ÞݽiÅ’YK>^Ù_S’¬ÅÏɺï°(ØǬããϯX±xÖ´5ÚçÖ¤”•ekñps²1ïÛvÃ÷cÖ;gÍÚ|£ï€§yRWJ™4/7';«ð¾í`7ìRsvž4«ïìüg5ÌÍ;#ùø€°²ˆ¬ø~LÄØ8mUßFÓ¹iFzf9Ò y6f™}`GZ}Ý%nljºÿ@²¾¦†²žºÐ6VfaÆí¾××7k6ÖÔPQÔÓâá:€YX†q/Ø –ŸoIkèƒãX äv6ff™›Pž¯ tô ôvsqsqq±···°°0ñغw8U:“<ºîܼyêæ©“'÷îu€¤ÚÉ Nž<}ú¼3æñŒî ,,//,ŒCIüò/ÛµvrCn¨‡.–Üaõç××çÏïo™×]çÃ!‘‘±k×®õk×/_8}zwc\¨ª|æËû@páô…3GOÁÞíý…( D`À tĘè[€cÀ§¢À¸IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aclienti_64x64.png0000644000175000001440000000012111353112764021613 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.777395 28 ctime=1364826684.7773955 qjackctl-0.3.10/src/images/aclienti_64x64.png0000644000175000001440000000605711353112764021115 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ìPLTE # ) / 5:@DH10&MR Q J W[ X^c @B5h$AC>EF4j [52Q8o#JG;#dDWnt(z&3d%mCb QQD2b@+RUB{ †)TVS!|/@hNƒ ‘+Bv^_LVbX ”-™1B}›4ebUcdPOnZfeL’;Ÿ?gf^efd ž/ž'^sf8–E‘srXqr^sqgkvk¤P`)/¡E,«(}ˆk‰3'©N`•l‘x†An—}p9¥]N¨‚‚e€€z7°H7®Zƒ„oŒ‹5x ‚™Œ˜t¦ CµEL«mŒ˜,B³fŒxˆ™IŒ¢V»,••S‘‘u‡~±“”m’ƒŠ­ Nºu_¾9”ª_¾Fd³|˜˜jÃ*©.Ÿ°pÂ6ŠÂ 𻣤|fÃ}¤¢‡£¡•hÆ©ª_”¹HuÆYqÅr¦¨†|¿”¯´W°®‹—ÒÌ}Ë’¯¯¦³²™¡Ø”ÕA Ùº¹Š¶¶­»ÀvŠÑ¢‹Ò›¿Ë=¦Û/›Êª¾Ó#¹Ø¢Ù_²Â³ÁÈl«Þ>ӷ㽿º´ß(ÄÀ²›Ø¯±àMÅÅ­ÈɦÉÊ¡¶á\Î̼ãV²à…¶ÔÀÑÙ\Ëé"ªÞ¼¿äh¿æqÊêBÒÓ©ÏÏǶâ¨Îì4ÓÔ±ÀçÏÓÃÝïÛÞsÄÚÌØ×§»äÆ×Ú¶Àç´Îë}ÛÙ¾âñ3ÜݳßÛ¸ÁèÉÚð^Ñì‘ÂèÐÙïu×íˆÞñpàâ¼âàÄéöEæõTÖï¥ãäÎ×î»ÐìÙàò¢êé¸çæÝßò³îùkð÷xéêÓìêÎÚñáìíÆèìÛêìéðìÝýýaúýsùû…öüŽóòÕîù¾öòÏèõëöú¬îùÈöòãóõÞüýœúý§òöåõôêÿü°üý¾üýÔúùðùû÷üüìýþãž'+ËtRNS@æØfÝIDATxÚíW{T“ç¹DÊÂe¸™´jö!« QJ ¬X«r§8¤ºÖ¢ˆ× 27ÑÈňhÐV$VH€¡€a[1#’r‹6 BL!x! ™€ û½_Hg§è;ggÏû~ù¾s8Ïó>¿ß{û1kÖÿ ,\V½^8à½ÊßßßÅB>‡7ŠcD‹×Õë¡úúú&¿úúžõõuÃ+}ŽN€7IÇÕZ(Tj•BƒN9´6ÍÍè45¥ë Œj ¨Õ££ˆ+SËåj™½äm *4<ø•´I$ÍÐ$m.þ“r—™ =—?ZI;¢CÜ‘¸¸ØÈ¸ô|‰D,ÙN ¬Âéa¶Ë—|ððpuu]²d‰ƒƒƒ¥ƒ¥9ÉÒ’4—„Ã@$š;}+n–ˆë < (¾(..ÎÎÎNIIÙ·/&&&8x-ÃÓÃ07g æL¥R)dGò|§f±X²`J`ä‰í·]ÏŸwuuÕ×ß.)ɾš•šz4>fkpx8‹É`¸Áƒ€až4•Bq$$R±hJ`d”·üŒ‚ÄýÛ·K®fe¥=¿ukÄÞ½kX txÀ‚3ð©À·'ò›¦‡ÀûèV¼ÀÄÀX;H9Š+ìݽ†Å¢3Xt&C+|² 1¿[߄ݣˆß?öÏ«Wq ¾…Åb0éÐYn SÉŽ66¸Ý,ŒŒ>á ÀÀëþþþîÉâã#Ö²èh|&† P4æókô¨GP]0ÐþtøYYçþ~ 0‚ÝüO0ßÊT$• m§å ¸þ~×ýûÃý>mÏJm}õàoïÓJe fR€£½µ•)¿I,Ô9€%Œ @~ë‹þs_4(À,$$°”¹×•Þ˜369ƒˆ?—Ào’N[‰<âÛõõõ?"­uýw_U—Õ¾ð-̆;œŒÞ¯0Ú$Ÿlc=òÿÃAvIÉí’‡[¶¶Ö½xõ²´´à_ˆØ½{·2ƒÍ¾P€Æ§Rq> ø5B‘Vö_¦””´½µîîpCYiÑà7k@  …Ãf_üÁ瘅B!C`|É„/éfÁ ¶0Ï5å*Ì~ûÓÖººÊ»ÕÀ/Èk¨ŒØâý•2—ÍNLüáÚµK>GÈ€µ••%ÉÌ„_SÃ׿Àk乚瑒ÔáeAQmuÞ §¢ƒüÄó磞ýd©&€¹$sc~“pZÒ\SR`òû￲ øyEy7”½Êlöé‰;vDGí:‘üéB0›šh̯ó­Ÿ×}©©)ç^5TVWÃøyyy9=ƒ×•=¹0>âGGmÚ´ù‹íŸÎ›G2#‚€T(š6 Köª,«ll|TZ[[ÔR{ãÎ;=w¾ï¹÷ý•‹]8tð`Ô—›7ÿqÝ矯[´èW¿BÎJ-Ø~§^5–––•A\î•Á{¹?÷¢ D6¬Û¾qÑ{ææ¦¦F©P ›pé{ç/K‹ŠÀ~N7‡{¥·÷çG¡¢7lØðÅöï‘HD3SS‚¿ªf*ª!øºÆ äp9×;¸//^ðgϦÍÛ7þÁŽEÈ`ˆB˜r C¶*€Ÿƒè\.§¥`õÕ!¨ÉNvŸo…ŽUÄ71ÒÏ×È,Í!8–þ7ƒˆS1x…ÃÎhL »…„; œýl£û<´ˆp(LŒ UzIR«2-=#Ö®Þ«ä¢Ñ[^¶°9ØAXˆOÈ¥]Q›¾üù·óð`†ø&Ɔ|½$®R=—eZ¯Y¿~}øà.—Íí½®Ìàäö®Æ0ºíÒÁèM'Üa ZZYB¦È€‘@?µB XkYk×++€Ÿ« ,hɸ×à†9‡øÒ>;µ'ù}€LÄ`ll4!¨L%Q¥¥‘0Ÿ¬²ëœ ö½RïÀ†GÊ@Ìs©Û2*íXr²;ÐaÂøD€±á¿ªð²ÎÁÐ<“„ÑÏ8ÝÁfgô`Ñ 1ggš/Å~á'îh’tŒŒ ßè'ÑK¥Bàðf0•¹œŠoø‚Û NA_8ìñ=h9×ÌœH051Ñ .OÍ‚\šÛëtOnï7ü€kŒ²l)BdëÉ=ˆ€L€@¡ÀNç`HŽ;@7Àêe­7“á†ßB4ª¯/:Å­a’ðˆ04>$q* $@G10™Þ«½a|Öä5¶ì}{{kàk ð &ÆÁÁeƒy'ˆÁíƒSs c4 ®QÊïá²±²ÆHÀg LL¼™Ý­? *…¼í74–éÆb¹ÑAñÉ Ú Ú-`b¤ àË0$qÊB!»é`1£¸aò¨4 ~5ÓGÂ0A“ƒ7oÆmeý……g´–ËåŠ6…ü»ý±ûgÆíGùX?LÂm‘µ@%œ¢s``H[ âµ`ß³îg}ÝÓñS÷OT&é Å›P ¶u¶u ŒÃ‹A±¤¹ J9(¥$b‘X$ÖUЄDœ Õš¶ùš"R† ÁfT¶‚ºHŒÓq„|¾@ („ç2àäÎ9zÅ®WXllXPPPX@PÀÇqÛ !lƒÈ¸HüVjðÀÉâ ïqTqòP‰¹?66ÈßßkÅâÅ XXXÌ·Ò/<ᲑËoJò¿KO?|x[dd¨ß‡XÌzgD‡ÌÊ%“ _‡"…9ï,€øÐ;Û@Ÿ q_‡†úù½ƒƒq[´Vb‚bÃ"!«+W®X±ØÉÎnþç™ø.å²òòr™öŽ×cS†ÞÄçC8v3Œ¯èÔàñãÇÒgRisSs³´©¡ªª¦FXxùLÒN¿_ö0Žþ¥Â2ÔAË=x aõ'íÜê4C§Ÿ<ž~<ýäÉÃÐNÇ‘„zRRÒqàB&?t²˜A`|ö[ðÖ,þÿü(3§mT&b<IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mcliento_32x32.png0000644000175000001440000000012311353112764021625 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.678395 30 ctime=1364826684.678395498 qjackctl-0.3.10/src/images/mcliento_32x32.png0000644000175000001440000000313211353112764021114 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE342 # & *-36;$?<A""G)#KLR.*)WL ]C)20$a 03'g 43,=1-:4.96*m$^)6:,t$ =:.r(Y0i, J6/y'A:5==6<=;?@.@?8‚)Q;0[8'a7#u1GA;ACAL?;ˆ.o7.\A7’0LHFJL9SFBOHC‰5›0…8—4|=TNH›7RRJ[NJ[RGUVCTUSVUN[TNYUTbSJ€L.fUFZYRZ[H}P:mVI]^K]]Ub[UqXG¥F`bNŽR0xYIg`Zq^J…WAm_[p`V~]HghU‰aHnihŠbOž\;pkiaJqpW®Z.wpi’hOwrqwxd}vo‘q`~yx€}^}~jµmF€w‚g†~w…€†ƒu–}p‚„Œ„~Š…„ˆ‡‰Šu”…€—†|¤‚q‘‰ƒ‹Šž‡~“qÀ~`•އ“’x™–vš”“œ”Ž£’‡©‘ˆ˜œŒ›œ‡ºz œ| ›šÊŽrÄxÆ‘s©š•¤£ˆ§Ÿ˜¯ž“«¨‡Ãž‡«ªŽ¬­…ª¨¦¯¨¡«¬—¯¬ž«¯Ÿ±¯”Ï¢±¬ªµ­¦±²œÅªœ¶´™¹±ª¸¹£»µ´¸»«¿·°À¹¥½¿©Ø´¢Ä¼µÓ¸©Ã¿°ÇÆ—ÅÀ¿Ô»²ÁÅ´ÉÁºÝ»®ÊÄÃÌË›ÊÉ­ÈɳÍžËǹËÌ¢ÊÉÀÒÉÂÏÐ¦âÆ·ÓÒ¢ÑοÏÎÅàǾÔÌÅÒÓ©ÜÊ¿ÒÕ±ÔÏÍÖ×­ÔÓÊÚÖ´ÙÚ°ÜØ¶ÚؼØ×ÎÝÛ«ÛÕÔÚݹÛÜÅÛÚÑèÕÊßàµÚÜÙâÞ»ÜßÏëÙÎàÞÜáäÀåãÇåæ»êæÃåéØëéÍóãÞêëÔèêæðìÝïðÙôìäõíåîòáöòãõôëø÷îý÷öùûø+×ËûtRNS@æØfIDATxÚc` $ ƒ@O€È‡ÿùóçüüñãÇ÷ï_@à#¼ÿêm8X?Pþë˧OoܸqáÂùçOœ8±gÏŽ;Ví¸óú6ÈŒ€?&5OY8µ§±¼85ÔÓBYSYYMVVZL8åÎUc ‚à?š?üþðøìÎ5sÖlX8¥3×ÁÃÁÁÆDWYøÎ ° /|ýý¨`÷¾îŠö"/¯ŽD;]]e‘«wôA&üz´ðÃW  ·,»©¤d×¶´´H]Miiá«WUÁVÜŸüøñã‹Wöž<ë’µõ®f¯¢X[]Mei¡«7A&ü|Úyñâ¡C÷·<ê9Ü?i‹ºÂrËtei1ž›W5 wÁ–û÷¯M>}p×ò´yó*‚U€¾€*üy£xÍš5ûg­Mk¹vøð¶m ‚9bõÌ$D„8/Ÿ[ñëiÎìÙs÷O>\Twz×á-[æY –)Ú‹ °_=6áûùÔ¾¾¾ í—î>¼kÿ¦y³&µ×+˜ p±9 1á|huuõŒ’Ó@lÙ¿vÁ¤îö=I!>.–Ë'•@qõóBhaaanû¤}û·l[;oAK…£#Ÿ'Ó哪`G^°ˆ‚FçM»¶,ŸÔÞÒ^S$¨ÃÇÃÉÎ1ÁçÇymooo×çyÛ² Õ“k²E}ùø€ÈŸ˜ðý¼²‡‡‡›·{»oZºº£¥‚#¯;+HÈ„€§€ Ü€*l2êbõ¬½‚æs±åÕÏ”)øþ\Û ¬ÀÁDMÅLK\HHd£<÷¨Þm/Î/ÎÏÊÊÊÉHÊHŠ‹‹ ñó‹=vo¯ 8M¾%@0xûþÕ«Wž<¹uëÞ­s÷Î ‡¤Ú•[·®ZµbýŽ7¯^¿-š9abï„ÞJ”Äoõòé [WMo+ÍŒvbÆ’;þüúþýóÃc›çO¨-àÇnjj=uêÔ¶oݼbÅüªÒLTù†÷¯àÙ³·o]¿|ýÜå½K{UQÈ%D'DGGG€PDD„¿“‘3½óŒ_Q¥¿ðIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/reset1.png0000644000175000001440000000012111353112764020353 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.814395 28 ctime=1364826684.8143955 qjackctl-0.3.10/src/images/reset1.png0000644000175000001440000000107011353112764017643 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaÿIDATxÚ­“=hSa†Ÿ/ÉMbn…+•þ˜Ô VS’‚Õ¥ØADé ˆàÖ¡ˆC)]…Rl†‚à&(ÝD¡“’Æj38Ø ¥E¥6´1ÕÖôæ&·ù»7Ÿƒ±1Eг¾¼‡ó¾þqD3Áœ¤UlÑkéTÓyÞwϲõW9Æ+Ãt~‡Ý@T-p+X- /´ · $šä7ôOÜOncg@ª„iÈ%àŸ‚¹d0zm™™†Uj# hƒ˜O ‡|¬ù G¶ˆÊù)?ó±02¡:ÚÎ` :Ä«¹ò’Uþ½zŸŠëiˆX¢y/ÈÀ`0‡éÒrœ]6 ¡•Ú X4({Œ{8ìäÔ'á:@h„´""U¦œ5yÞ,™sI’>_[lˆ6…Óu@±€­TE`Åýr·Ù)[J5Ö+BÀI"*Ç›™­›“’ÎÏÈTX«z¬‹.Äx“ÝîúÍ<Yî¦ ˆ×:ÛºÅ\°²Ë­ŠDöª\|æÉæ…_IXtˆ%¥7¸ü2ó9f€lC‘¢~&B*рѥRs©|À†°*×5ì±xø…Ù·®»ª²¸ÚÊ•w‚n‚‡`Jج‚N>žãÁz™©ŸæýžÉÕî¤ßë ¿TCùVåcÎ"døßócå¼/të$TIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/stop1.png0000644000175000001440000000012311353112764020220 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/stop1.png0000644000175000001440000000032211353112764017505 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ"Ž®MdRIDAT8Ëc`Tà?Ãb0ƒ=L#²æ³DZt–!Áá ¥®5`Ô¤$é0“á1šÒ0’2Ø“`ùAªd@"2Å›'ëŸIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mclienti_64x64.png0000644000175000001440000000012111353112764021627 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/mclienti_64x64.png0000644000175000001440000000626411353112764021131 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ìúPLTE  " & !*-0 '37$$91;!,#@0%C,+#EHM*5,&8,RP74)/:1WM,6:,[^T( \!8B>e!8D:b@B5,N5h$BB=Z26KERM~*2b@5`DIUJGWFTRE‚,STAx8†)OWSTVS/@hNS`UV`[^_L“-SgY™26ebUcdPNmYfeL<]g`gf^efd¡@\rd™HcpefojppisrXqr^dxk,šRuselvqkxlE_!¦Lq~s|zl`ˆqu~y~b||u/­Y>¥`^“tw†}ƒ„o}†‚„„}†‡i†…wxŒa›uMªnA³f‚„Ž‹}Œx„މ‘‘u‡“”mZ²tc­zNºt‘•…ˆ˜’‹™Ž—‘”–“™˜žšz—›‹z¬Œ ™•ž™”¡•¡ž‘¢ †cÁ£¤|u»›¨¢œ©§¨†º“mÅŒ§¦œ°®‹®®”£±¥“» {Ê’µ§¥±«ˆÄ›¯¯¦„Ϋ¹­º¹Š··ž®¸³¶¶­˜ËªÒ¥±À³¼»²µÁ»Ã“¦Í¯¶Ä¸¾Â±¾À½ÄÀ²›×®ÅÅ­ºÉ¼ÆÉ¦ÉÊ ÌȦ»ÌÅÍÌœ¤Üº¿ÍÁ´Ó¿ÉͼÑРÁÓÌÅÔÇÒÓ©ÏÏÇÐÓ¯±àÀÉÓÎÃÙËØÔ²¹ãÇÓÖÆÖÙµÛÙ©×ØÂÏÙÔÛܲÛÚ½ÞÚ·ÞßµÃèÐãß¼ßâ¾âàÄÙâÝÏêÔåáÒãäÎÏîÞêé¸éêÓëìÃèèâìêÎÚðâáìæèìÛððËðíÝ æôçóòÕôðáøöÅóòéñóðôõÞòöåí÷òöõìúùðùûøüüìÿýàþÿç BT5tRNS@æØf hIDATxÚíWkTSéP5("„𧨀@Gž#Fˆ `˨‚#6>Q;Lñ…ˆ5XQ"”  A ’IBxHL ÁȦ1Q BÀÊZ=_„§KÇŸ]]Ýß½¹Y+ëì»÷9ç»÷dÞ¼ÿ¬ôßõËW®QQQ1þ+ÕÂ1§”˜œÅ[ÀèÛñ7*¼zóêÕÌ·Y¼¸³HEÀœ‰V^ …\ é¨|TŠ –Š%°”è냣££¯¯¯7W%Å))б1…H%pI%‰X„–H„b!z ã1„+:f]øO¡›ñ˜Lfy9³¼¤¤¤Ž÷È™ÁßÐú+Âùcçóª;::Úšgv!éŠcŽa‘û"##""BBB¶mÛü‡ÇNNk×ZYâ,--q+œ©©)ÖkˆÙPÙÖ×ѶE`ŒHhhAhh¨¸{÷VöõëgNž“ú­Ò€—»»ƒ³³ÝlSO›º‚)flÃð0 vAÃ=žÄîòÙžêU©Öº±4 ðòruupp°³1¬5ræž–ÁÙ$ÖUÑÈ´1¡ð'ÍÚèJÎàÄie:AÁ€³ƒÝƒšÞr `îix:8<8ˆF˜IB~ ŸÏç˜yÖ3èeq²VyÜßÕa“ÍšÕ‚^®º‚±òˆ†îîˆC›Bi)£ÈdDjN²Öž@Hàz›uÐÙz•]î¯gL(å!wëšaÕÝo¹Èìï ËÉž™|þ&»,N¶8€ž‘yÅÅ‚´ØØXYá–Õt >¬BÈ­ûïÁá‘Q¼PÈa÷׳ÙU 㛞—A¡µÈ_Bl`w™èU÷r›T &Çä´ìÒû°JKûi)ýI±þ#ŸYEgA 5#ÀÈ>0A7ÒsýšÕœ ¦¦‹Û4—ƒQyù¶ëEE°…вGÒÒø„°@?›__Щ´4k™lZ–`䆳Y ;ÛÌtIu¯ fNÁ¨¼dóÙüü¢üüüìr3ÅÏÛÓ¯Ÿ]UEg ‚<ІL&3'[ÛÇš fXS(@ÁÙJd÷iBaN|I‡Çd3ØŒbZ^A1Ò< loNÀ‚3¬««¥RÁ3ééé7ÒÓ¯÷Çf9ဲe` 3ã %9-5!ÞÖš`°g†Ú5Ö9øædú™ôsgÎíß—ÌáóÙ<ˆe45#ƒ’œD&“ˆÖ¶XHk¨¯]ÝÞ¨R>9./ô8rN‰#ü„(tû™S 2)©É ñD¢®Ÿ‹ÎÄ k ¯§]Ý5§`—bH^âtäÏïAÍ´­ç±«êA/¦Ñ22)”ä d).Ji°X}}ÌÂê.5ã Ài/Š>|øðU.ÉLTÔBÔ‚ë‰@E¦KJÖîÞx?ÄïßK³¯z¯ L¹@Fºžž†&¦X¿d~õ“ƹ$ŽÊå…@ Äîý(6&¢»CPiy™i””2)ž¸Ï\—°èc0:š¬'\5 Ri ngèþP ùþûo3.h&C8”0™D"ÆBˆ‹ò›t40Á¢ bt´5Yí¬¹$ŽË%…@ŠžýpzG,¦€ÿâè`™Ìâ x.p \aj Àè-ÑÖ–U·×ÞS)•€üŽ™ø`|Hq&‰Ê åY k2éÑEÃ6j)ê ==í… `ήQùP!¬‚Oƒ¤kŸ\P`¡¡¡$0šö&c¡ Q´Î× s Æ%âBñ›©To ã#؃ÓF~FÓæQ‹±¦(zzKt.Ô”± 7ª,ŒK> _í¡å!Ó²E.¢í 3e ëa0ÚH€ %Q¥àTú3‚P¼«SPJAFB\)D°]53…xƒeJšàŒÕX{o£š…Ÿ°?#Àû¸~õÅOO{‹8+K´‡ õPÁdæ…z¤ÒÑ|hðŽPev„μ‡ÝÝ7­_Oq+Ke .Ã@惙ÿëFÖœ1ÌB¾´ó‚tÂ+½Â”P+x‚ ò1(È€£üucímµˆEÒWÿH½8‹Ô”Tôí?p>)5•÷î5äðöªG±T: £)ðÝÌ ¨ü@€ÏÎáÙ³gè|ö¬½½±¶öÚòÙ9O4  ˆÄb㞣aæ8„ÞŽ6„NA—ÛÄeqp©­…ðÚÛÇUƒ¦ã˜ÅbÑ€è90ô=îƒ)° P © \Íe± |¬ÚZÖ½Û7/WvÃ¥&:s(fA„S‰‰'Ð:šxðÄ£€èß!lßî ‡ï¯>:x»ùÃÀÉ„Y³0'õü±1Q¿ ßâûµãªU«¸}ÞèŽ4,KDj~º“{õê_N=ýÝöåó>›`jL.…æ‰?¨T2? ŸO PÀSælñÀcAee.0œ:~0:zå/Ǻ!8¢Jº˜””t"ñ؉11(q[|7n\¤üùSñþ¼!74ùýåx÷öþxQSs'÷ÒÆOÜ_ôF¬Äsñóç}=°zOºž(ÑÞέ½wûÚéèkpC):{z:{;ÛÚz¡¹.jAÔ€¨÷îݼvúøAßO˜øý¬\ÀÕ›YYY¹Y7³®ÁÎKèšué4DGç»òn >‚éi -ô9=½ÀÍmÞÿñ߆¶)5Ur-IÙIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/setup1.png0000644000175000001440000000012311353112764020373 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.846395 30 ctime=1364826684.846395501 qjackctl-0.3.10/src/images/setup1.png0000644000175000001440000000133611353112764017666 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿa¥IDATxÚu“KHTqÆ÷Þ™qFÑ 15AlBÃ4EQC¨L\¸‰ˆÒcW»³h!EmkQ†F)¾È¤ÐLQÑ(à£qœq|ܹÞûo‘ø=Ëó¾søÎ÷IRâŽHˆ T„ÅÌ”ÔÂêAsÒÿÍ:.,ùi’"ä7‘t±&ÄŸ-fç6ðÕŒðì@шyqŠWþe®¶ÌC÷ ›ó“™t+©ñ$yí0¶ÎÈ;?ù¯—XÛ·y¡ŠÖöÄ9›&‰FÀ¶O‹âôÝd¦»<Ÿ›q@Þ×.qeð ¢Àέ֓7SÆ—‰"ôûnæbŽdZQ|i ÷x—ðíü*bô^ B†ºH^ Z¯qíÂ"qgï%O2Hìõ°õà8k€Q‹ã÷YŒR'À4]Ìà`¢5 ‘iåå^ÞR ȲhÍBØÊdTÜa )¨3)ªflÕ€d <0?@EC>ADCCC=?cecmm%ihLkm/or lk;fhepn8qp?twkljokmrpTwv-npmuuJvx:xvEvx@|~vxR€sur{xYvwuxye|}E~Az{g€~M<…†y{x‚ƒDU„Kˆ…4‚_}|ŒŒ"†ƒc…ˆOˆ‰J‚„††mƒ†w&ŒŒGЉ]ŒŠX†ˆ†ŽaVQ•’@––-‰Œ‰Žy“^Žt”“M–—9Ž–—Xœ3••p–“…›šTš™l”–“žW¤£:££Ežœy¡¡a¤¢U¡ r›œ™¦©T¬ªAª§ZŸ¡ž«©b¨¬]¤§ƒ±¯F£¥¢«ª|®¯a°¯h§©¦²´_·µL±°‚«­ª®±Ž·¸Z·¹c¸¸n°²¯¹¸Š¿¾[¼¾hÃÀV´¶¹µ·´½Àp½¾•ÄÄg»½ºÂÁ’ÇÈq¾¾ÁÍÊ_ËÊfÀ¿ÌÌoÌÊ›ÅÇÄÑÐsÊË¡ÑÒ{×ÕpÉÌÉÕÔ¤ÙÙ€ÝÛvÐÒÏÕÖ¬âà{ÚÛ±ÖØÕßÝ­ÜØØæä~åä…ãâ²Ûàãíê„ßáÞìê‹çåµçâàìê¹åçäôò“èêç÷ôŽíïìþû”üÿ—òôñ÷øõùüùýÿüRV}tRNS@æØf«IDATxÚÕ—iTWÇYQ¬Q jªUGJźUT\«,JíˆlV$š£xDŽsÀˆKM-Èö¸ ZQHÁ-Ó*PÄq©Žˆ‚¤Ì” h!;ú&¡ÚcMøÖ›œ|ûÿò¿÷½wß}vvÿ‹€úu -t€ú¨Y­Èi&IRµuZŸô3 EmšÒ“*RéÔýƒ¢‚T†Î—ì[+ª¯u°Yï k.$ONZ#’.½º½¢ÜÖ, ‹´„,™²R$9^úsê56Vò#£¢ö‘gpx”hϑҚ§Ôöú¶¸Gï%§OžÅ:¨i¡ZR¤6Yp7(”xLövÿ`äüÜÒšçuµÜɶ ì%'2H .øðÈÃVªµeÛV,@†æ¢Wg@0|‡_m}ÑN]-´°œÎÓ.0ǘ1Ÿ´ê)ªE2Îú=pÙx°~à ^ýøñãéa_ºµ$]ºé€7zÿñ”þu?ÃJ€ý½ú¢*àÿ¹‹%l]/ Œy‡ëá¹z};u(Ô*}Ý¥ ^±ï- À‹W÷ôTë…$+r€â´B×U(ôÖ,F¾Ý¡ÑÚ`ši4òèêÚ™oô0¼ZŒbbB‹ä½Gò2Ðtg}Q3Ú°ü?ŠÝ@ôÔóm^ïZ·Il8ºOsÒцN2ÎW÷ƒÁ6+¸N@09þL{¶¾C¯¬{\÷xgÕHw·iÔt~-ÊtŒ°z`'´/MÇô­ Vp*"ÛÚÚó3ªé.R]wû¢QZ„™\üoFe8Ñab˜ÚŸ?=Ê ðêf#_W¡0vjÔuw~¬6J¥Xðùƒ¿ïxÍ€8×þ´æ'ʧiÚ`ÌÕåÚ€¼òZN£17!þbP•Z³œaä ¯ŸåLj4²„‚æ“m¬¼ì|bsWa ,71Mb¹¶‡é¦3×ÏæÜ¡ÛÐÝ}OQPYWYV|úüéÈ.UÉ {É0è+æMü¹í¸$…0àÉG“*ËΟ>}*;;L÷¨|¹?ªeì­žy=_Åu=ôOMMMK›3ûûìì¬ÌÌÔÌ9÷” üw #ûG V™Úàëã76€,uVgUõ”0;01&ìÏQJü ®ÞÞ?b•P(ôñó^—º!mCZÚºY¤²j?ò zLoc}ÞñÃñ\ÙqU„0NèãõĺÏ4ÊŠ^/;^™:zzXÐŽšë¥)\¢³³²²²“…q1 P)•–""„ €Ï«C-kR¸@:vè–.!\±~uU——/[Ñ$–ã8atüq ìe‰=@Ž0M/Lò¥ˆ.‹Xyl$YCˆ1Ù 0šš´ÚßÀq¤¸B¨Z¥V«×᪈¸yåuÒt1(‚ vé&ëâÑtô$ ça²/..+¾öÍ8,!B”S'É%0Yz‰ì’ü&~—¸{8àîiÓ&ƒ*ffy¸¸Ld-,‹Øyg÷e¬‡Aq ˜8.»¥ÑÀÝì ßÄÄȘ%Îý£§š=|}gK-ü+Š` › ˜L&GåSÔÓ‚Xa··hPP< x€Ål€ß§ÚOˆÞÛTYœŸ’Éï´Ä ºK › (vî˳ Ô¾÷ß,3L¬Üôà€–ÀåÀÂæ@¹ןïñ²âbá #üŠ–K~'\ax£AÐ)’³÷÷Ú[sµm*˸‚7áf ÈÆÕ€ †SŽœ±îz†ü„aeÉšýlÀÂ.‹‡Oƒã÷¬µò~ž7§8’\«}‚ß Áî^ï.Z¾ÂÊ#zÔ©Mµé[`a?²1žëš”>ØÚ':ñ”´6¡‰0WÁ\†Ñ¾Óƒg–X=eAÞ§¾"§OpֆШÅÛ7`F†õc”©Ê¿X,ìGFó}'L·aJ³ƒ"S¥jw9X9kÊ÷öõ¬²eÖuÉ #ÓÝA+0dˆ+ßûc‘-“ªS®ñüH†_’ÉÐÁ|>ßSeÛ¸>,5¤­œç²îìêææ14?ß¶´$¦ˆLöàóx#Ü\y|×`µ­Ï&§ØY*2|ŸïÆss6½YdóÛÏcÝJ’ÌÆsãñ&k”}xù ÚM’õÁ!õd}_Þ}vü©¤%”ìúÑ®ÊüA|_ß¾l·íçåÔwùÅßÕîÔ c,IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpni.png0000644000175000001440000000012111353112764021004 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.813395 28 ctime=1364826684.8133955 qjackctl-0.3.10/src/images/aportpni.png0000644000175000001440000000025511353112764020300 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH@€€€€€ÀÀÀfÿÿÿÿÿ­ÃvtRNS@æØfFIDATxÚcHb€e(ƒ)) ÊTÊ&:ºA„E Bj‚j!¦Ä„Ä€ÄÔd¨jaP3•R`b0{B0G0«9I o09˜IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlno_32x32.png0000644000175000001440000000012311353112764021651 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.719395 30 ctime=1364826684.719395499 qjackctl-0.3.10/src/images/aportlno_32x32.png0000644000175000001440000000151611353112764021144 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÝPLTE­­­     "'.&!!!!"""'"###-$ $$$,% .& &&&((()))*****+,,,2, ---9-...///00(000111:8333444666:63999;;;==5BBBDDDFFFIIILLLUL^9&EF4Š/{7.JG;u@]N4›0–3@™5fI;nO TRESTAUVRŸ@  ?—C¤DlUI„X—P^_L¥OcdP¦MfeL—Zq^V“_heXegf^efd¢W‰o«W+wježjsrXqr^¯b«^6tqivtg«oˆ¦fC’¶lš{—{µgB¶n!‡>}p·n3‚‚e€€z®qR¥…¹y ·pIƒ„oŒ‹5¸pOš‡3 ›%±Œx½{XÁ…–”M‘‘u‡·gÅŠ“”m’ƒÄŠ0Á…b¾™”–“´¤™˜ÇX³¤¯£,Ç‹pÇ¡ºž5¦ £¤|¤¢‡Å”{Ϩ«©_¦¨†Ó¥(§¦œÍœnׯµ³Xزϟ„°®‹Ô«JÈ¥•¯¯¦³²™Þ¼Ó¨’Ü»ܺ%Ôº¹Š¶¶­áÂÊÃ;À¾vó«Í²¤à¾5ÓàÃAÚ¶›½¿ºÌÉlæÏ áÆLݸ¦ßÂtÅÅ­áÈUÄŵÈɦÉÊ Ú¿²ÍÌœÕøçÓ2åÌ`çÎnÑРÒÓ©å×`ïã ÚËÅÒÓ°ÜÛoÐÑÆèÖkëÙSðß5æË½ïâ+ëÖ}çЯÛÙ©ÖÚ¶ðâGìÙŠÛÙ¾ÜܲÞÚ¸íÖ¬ñä^èÕÊñãràá¼ñçnïâïàŸâàÄñâ›ðè€ãäÎ÷òUøôHóæ®ñàÙìé¹øóxéêÓìêÎîìÂééáúöoèìÛìîÊüúgòéâðìÝúû…ùöªôòÕüûøöÅôôÝöòãþüœýû§õòðòöåõôëûú¾ûøÑÿþ¹úùðùûøüüìÿýàýþçâ²tRNS@æØfÛIDATxÚíWkTSWä!`„I° ¤Qƒ$j-¢V±J•àGA•RE@°jG)/AyˆŽ&R @¬- BÚ”ǘ¢„ghijÏɳ?tü9kÖ|÷^’µXßw¾½Ï¹{ïL›ö¿‚™nþ3¼0àÓ××wÛLºccB7éùˆƒ#ƒƒªo*Lgi*6þP ˆà‘HR @,îéÃÕ…ÑÞŽžööæv~¶Æâ©¸²I, ‹"‰H$‹‘%J^WW3¾r›ÕQ¸a¾Lv‡Á`À}­ «  K‰ï p'Àß„„„˜¤˜˜à˜ìrigÛ«6Àê²É`ûµ¼}½½×V¬Xppp°´´43#Ì0L&¦ÆÆs˹Üvöb]`ïkw*+¯eff&'GEíÝ»ƒF£}±ÌɉdG"“I$';’­5Ñ|1 a®F`bRdM(ö …¿54Tþ gŽï=Hóñ¡R)ôÇTHv6Ö6ÖVÆl¾®€l’±öNŸL&ëëþöÏʲ²œœä3‡ÜA‹Ý·Œê‚è …L/¶À·²²2¶ŽÃûŽdBáàÔ àg€ƒÃà 69 ¸€g²°²úˆhRÎçk`¾à`ŒH‡§~.Ë3‡îÜ!¸ .Hø6ÖÖVD “ ~³6„ Å$vÐ'ö½ ¿À¢ƒèhO*…@¦d€H$Î(ç³¹Öî‚ …2¡TúB ÿGNFÆoÁ@àž]T*%Ú$Ðò°¾ €HÜ?†° …Sã¿c‚ŒŒŽ±onŠÝE]š6Ôé \ €óº^“ cí °…o‡Ÿ Ç3:î>ÞO£E¡F]yй2€à ZÆl—­Á ^#,˜ž<é{<ÖZ}{`O mgëƒôôî#$¼(æææã Þ¶Q•e ??<éx4ðz ¦ºøuì&Ï#ûü‡.ÑÏ6•’H(Ö(Ds33Êž6x +2Ë¿Œwtýé_OJÏÏÏ?yòdXX˜_Øö¶ÏŸÿ§ùú|6Së@ª`8ì=~üø¹×·«„Õ‹ ‹ órûŸ–¼êOÃBü6úmÜñ×Esf™›èC˜jÞP…Aà0`à~) ¸èyéUCݯšÚò•„ìܹñ+ CY3111Ög¶ÔjO"ظÿÁŽ6Ä @/éÎ}Ÿóÿ±×Eàë1k56ÈåÒ,‡@x÷kZ1»0øô¦Ò¥û<¶Ý=‰ΧœŽXoN@eø††z-µ:9Pˆ ,i´@íâ(^¼jôR=½;Í…¼mÛÅ«á!~a)#±À¬ÆÆ†zZ/©Xže¹l v4/¯ž×4ÚD§_êö';­Yùåõ°Ó‡àPžÌ7à0[˜Ú&D $àééé3š›GÏKªºB¿Ò¿œì´r¥íõ“ç×£W@•CC}Ðq —в,¨TOª'œ|:P=J›Òë;¡mûÒnçù°”-,Ðú8`@ŸSѨuà%—‹²L¨ A½Wõ¥K=Ú^uú“ɶ ØØ~u> Ô40ÐV‘&‰R‰¼ÀÌ Unç´^¾ÿˆ³³ÇETÄÖ¬±±²>ô©¼‚À,X èëé¹3u’¸A.e©<†Jèõ­ËQ#!+¬­Qþ>A°¼J€Y¤³ â,ÙÅõ´Þ+ýѨ‘pXð‰õGPñ˜š¢õ‘‡Ãl¼ÅtÔHÄJЀ<ºûï/w†.¢lCŸŠÛ®*ú àŽèì‚X’eF¦(›èòå€3.ÂPÃæ-@EŒ`NÐî Àá¸3o±Š4F$b† ôг8V˜7ÏÊ!‚’o  ÀÝÝõ¥Î.@$]±ƒHA=˜Bv!#¸}ò1QÉÇþÕ à¸»CuÄ7ˆ¶vJ(ÍCì=UúTt}ìßÝÝÝ^<Ìb]Ö8èÁ“ØÍS'NœB×»‘ ú¬{;ÜÈb^ž­°éBƒ\ÏàÈÛAõø|ðåààK%^hðLƒ[·X¬DͬY“\BW×sÕ0ˆÀGÓ —Ëã"Ô*Á¬e²€ OÑå Í i5µ]xä²yï÷>|k+mž-‹†“}Ö"ûìY•rŸ_z7ˤÒ&½›Iý´{AœŸ£)¯§Ìš–ÁmwémÅ ž~;_òßöBóLý½¨rLo@j}4WŸŽÌÿ‰…†îÈ] ¼#Y?PÞxžÚL`û}÷/+³Õ^è ïûêƒÍþFÛòÈ’ –®iñµ…ñ•×%% )7î›É…'SVfk´ô5ºÔoÞþ„ì'r!û›$_c×-=¶úÀ' p2Óëy5º0 T Hü_Ð   µ=ží“}ÕD® ¼`‚1oMûAÙIÂuÁž@E}üß9bWÍ¿nxáD–É^vÁµmûBˆ„ð5ÜñtOE‡o6ËÆ–A˜JîÁÑwŠ'+È1ôÓêÚ.I‰°1%bTÜ€ˆÈPv„p «(íFí½‡¼ªê òŸ®Œp² Í6§Z○˨E<ñIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/expandall1.png0000644000175000001440000000012211434750044021201 xustar000000000000000027 mtime=1282658340.005137 27 atime=1364826684.813395 28 ctime=1364826684.8133955 qjackctl-0.3.10/src/images/expandall1.png0000644000175000001440000000107211434750044020472 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎéôIDAT8ËÅ’MH”Q†Ÿ{ï|Ž‹6š¥ôCQPIah›ŒÜÔ27Ѷ˜D´Õu Z­"ÒÍÖ¢ÂÒ˜!I¢r²&›œæ's>gæ»ßi1&–m‚ÞíyÏËùyë)*Š Ѐ'°B§#ü+©u«¾4c% àáð‰9ÚÕ‹Ÿ–Àš¦gbhQ–¬t0èÞf:^ƒo-Zbø<; Îi(ÍþJ@ÔW䔦YYD¶p—Fï×0v3ŒcŠÇ ´ÃÒ|JÇ€y ·Ш°Lp‰ðv†úBä_>"@¡²²²€»z…¯r—Z,Œ»yu9yÄåTO’–sA4A,_HÒª^­>âSÙJ89DêÛ!P°X€\f™ÍµãD¤b5¤>ƾ|–ôä8m½^yŸ÷nÜ!ɳ¡¡Žýgö’~SâñÈ$:`1²O™n*KfªxÍ“Þt¹ÐªŠ@?ªØÝ6ÈÆ]ûP^˜XèVå6º2µÜŸ98~å( Ç(}_¢©º‡ó'fHDpÈ’¡“ç¼Wö÷]³šþ>×Ù´§›úz(…Ò†L"Åë]¼ Ó~­°¤ØH™ó|üS»pϳ(ŒCq!Gb¼¨ãÁÅ9õÔ«@ ¿|nøPaã?ëaÃ/—uû¸IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlti_64x64.png0000644000175000001440000000012311353112764021663 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.677395 30 ctime=1364826684.677395498 qjackctl-0.3.10/src/images/aportlti_64x64.png0000644000175000001440000000516511353112764021162 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ì÷PLTE‡“” &% $" *, '($#././ -*"$"3302*)))77 46100079+-+==A@(2375231BBGF?@#==EENL685DE5:< LK:;9USKLPO+FH$JK?@> PP9GG)OQce/PL2NO\Z%UUCHJ-SUgiHIG![Zkl*ZZ2XZLNKcamogjPQOITU0__>ZZvv8^`$igqrTVS;ac5dd/hg(lj;jj^\`\^[(tv[`b€€b^]2us@ooPhi`b_:rq^ceafh7zxEtt?wv……fheTpq#‰‰C|zJyyokmlmk?‚2‡‰Sz{H€O~~*ŽŽ[z|qrpL„ƒfyxSƒƒHŠˆvwt\ƒ„3••Q‰ˆLŽ e„†z|yx}[ŠŠj…ƒ:›š}|Xƒ~}R”‘r†…`O—šƒ€hŽ7¥¤…ƒ‡]•”B¡¡sŽŒŠ…„ƒˆ‹yŒ†ˆ…`™—V ˆŠ‡?«ªi™™R¤¥ŒŒŽ‹r™›`¢ŸE°¯V©ªoŸŸ|𛑓[­®s££‘–˜T²±d¬®–˜•M·¶›—˜a³´„¤§i±³›š|ªª\¹¹f¸¹ ¢Ÿa¾¾YÂÀˆ°±k½¾„´´¦¨¥gÄά©cËÉ‹»»mÉÉuÇÈ”¼¾°²®qÎͯ´¶´¶³oÖÔ•ÆÆxÔÔÑÒ¸º·¿¹¸tÜÙ½¼À Éʽ¿¼€ÜÛžÏϤÍÎyáßÃÅÁ~åã…âá¥ÖÖÇÉÆÅÊÍŠæå®×ØÊÌÉ„ëé¬ÝÝ´ÜÞÐÒÏŠñï“ðï²äãÔÖÓ¸âãŽõóÚÖØ¶ççÙÛØ¹êê”ûùÛàãÞàݘÿýåàÞâäáçéæìîëñóïôöóý÷öùûø÷ýÿýÿüg*†îtRNS@æØf,IDATxÚÕ—aTWÇA¤ km»€JÍ*íB;ÄÈ@µY”ZÃm³q-ˆ$¢¡6±-±P ˜Š”%E«¢€H• ŠbTrÖ¸8.e7DCíšø|ŸurN)Òm±;œ„ÓIÜ|xëòß]¦Ý'¦ÊûG0 °×Ëì¬ØËî ˆÇ|íˆýA¿Ó¡¯o¯?ä²1JL£££ã×T'Û€ýXUUQê ®ŽÅlœ$2;éýEÄòËæ»øþд³8­©¶êË/‹öïOº}fËFÅqñ7¿“ çr“Y§]ü>ʈd¼Ešsrr²ÞºÖD—ë8I9/^o''&nqu¾Ì…6SÿHÍú8+ƒ„E µ¶Ò£K»NÔŸ á s¹\–Ÿ À,#fP—oýEÛ¶F`-WèÑÒ>§£qjjê9xˆ)DZëèÑÃÛ]àM0»<<ımóæ­[W 4©èÑ2½ÓùmròÙ3;øÙíÏ?»~¹~«Ö.™ïßÏHÝÀ€áÈl"tªó[âe#NBª×[,›Í6iŸ´—<º×.p€ú'€R’× ÞMë³Áæ|Îé@µzýÈ‹Íb›<1fèÍ÷v8€i ‹ÊîM0#òJ[ —­¶(¯AÝÑ­Eûúô–'–ÖáG….ÿ ):R©ëcccÉ"OiÄJ8¾âËäÈOj€èîÓë[Æ\—€ÓÇjkkë> |Þ±qG4…âoŸ8ñŸð¥r¤Q}SÛÝýOí9Г\ŸñЪr-õ÷_>MØyµ !œ ŸÍÉ‚¨;P¤Ýj~ÈrÝ%Tüþ›fÏž ì0üþÕÌ6&ú\^šÍ拤ß*A~穹ý¥Sô«N¯% m™:å]TÝPÍËÞ‘.’U#²ãºÑx<í•MuÖZAä»±¯GP-ò½”ÇcgóJe ˆ?Ÿ½g>”øê¶>¬DxS†¦ÄÒ×­FR~6;'UÈ•ï”_þùP¨‹?̈¨*ª+´èÑ‘ñ„œO²ù"Ù7o êïz»s´Áq­+¨»ûoT«nPJ…|›Ç±cö–-tëx†"à¸c™:ùcíhlPH…Ù;Øé|ZbÚÁ”<÷ÎwIdTU*¶k¤„€(eR^úß8é!1){¶§¸9`œ~£hg›íëÖ"?}¯øJÄK缓´+o»#Žä/Eâ= ØOBgYøªõªq{Ê‚¨E©Ø;ÿ5ÒP-/~4Ū˜uîiPNlWqzz—¬Bu©4,˜ºzuûSš”õ¹n‰¬(åù/]¬òdÖ¥d%a…¡ !u¨/*J,¦R¹û<@0\§ E´ZD-_²0`ñÒ.?Æõ… ýç)ó™B^ô‹‹=»0Hâbëz2)‹(à \¼^çY`7m‹Òaɤ(ëz¸ßý‚àT Ëó§P(swcªÜ—Ç`ýšŒ„„¼Nì¶¯× Y€a===Ø•9^3’dáêfpsÕ°fz÷%»íœß™Ûÿ—þ ˜e°ÎÑ„NIIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpto_64x64.png0000644000175000001440000000012311353112764021675 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.681395498 qjackctl-0.3.10/src/images/aportpto_64x64.png0000644000175000001440000000373311353112764021173 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ì÷PLTE         #"+,"  !11"$!+)56 34&(%.,!+,*??==-/,CBDD<=14'231";9IHEE574NM981:;)6?0:<9USWZ@?8QP7BC>@=ç=ï9ÿ¿u­&Ž´Z8óŽ˜ÅÁºuìÁ(g½w6nø7ŽŽqÈ7Îu¯Ç'H„='8˽1Daá† Ø Ä±½°ç3¤nA6̆k¸A¬íÞû‘Îb1q¦–[˜»Aæ ìƒ=eˆ³ ´—ñ‚$ (ºÞ÷¼9 *8ƒ®éÒ,‚ŸòÀ^ØïóÐû“¶ú]¬VpæqËÙ[Å 3×­kªW8dr>Ý^“á–ö²òõâE…ãÞüÇ{Ã1îÒyå[¤F}îb¡ÅgyèEàâסý¿)Uxõá[xøçP~]R¹Ã§À påwí#ƒ[哳òEéG<{¡ƒçã)b±WÐùÙ-wÌüU?ùm;?•uÆŠò£ˆEDcž.._?ø ù¯d êÇ"ˆüÒÈÛlô‚üç—82¼(næ§×/ðIý„ߤáx«ŽO;Ñü¸BþMŸJ°Öªâà xJ]WçÐü¨Úî#ˆxŒ_c…¡-Pû›ù¶ënÁ¨ÎÉØ0ŸÛ¼~ͤ½_’aeã°ÓÕu}PýQöæÈ?ÿ&€ø.¬±:úi‚”öÙ\nÛñ9Ìæ…ÇHåVG-¢Àá  DRÛÂkŠRŸbz"üm«"Q´…Õ÷÷È…¼ôžù‡%T É·ƒ¾BŒN¯ÊÌHŠò3~(–¤ÙM›Ø`¯ÛÜÆ¢S—ù­“š±KD$+2ڢ᩶¼´5:6zn¶SÏ6N‘Ò7HÖ%Eú!Ñ3Ó)#eú€ÀU( ð¥K{fô²x ÔÏ{;9èË=(‹§ol ð]Ò/ ~åCC/#wA:@ qsÜõüYr[mn€ˆô Á €™9;*AZsÆ¡,âÑ%š{4 eqÕU¿N "ÂV"ЧËý:ˆÓ'†8è “>>@@@BB0AA>AAABBBEE3 ]]ddGGGHHHhh ff*YYiiQQ<%bbPPPkkSSSWW@P__V^^\\\]]\Tbb^^^aaG}}3qq___~~```bbbddVTiiffN6zzakkhhhVsslll9‚‚nqT)ŽŽ=‡‚7‰‰qqqvvW<ŠŠttsxxX<[vvvxxx>’’zzz{{{~~l6œœ@˜˜‚‚_ƒƒ`„„dBžž;¡¡‡‡cb””D¢¢ŠŠeˆˆ†‰‰‡gE¦¦O¢¢G¦¦S¡¡ŽŽiK¥¥Œk‹‹‹E©©J§§ŽŽyZ£Ÿzz’’’\««…››ššrœœsœœvxžžt›››a¸¸Y¿¿¦¦z¢¢¢_¿¿§ª~¨«€gÃí­€sÀÀ®®€°°°°‚eË˳³„rÉÉuÈÈ|ÆÁlÍÍjÎα±±pÔÔ¼¼ŠpÕÕ···½½‹¾¾Œ¹¹¹rØØºººÀÀ»»»ÁÁŽÂÂÃþ¾¾ÄÄ‘¿¿¿ƒÝ݈ß߃ââççŒòòŽòòóóöö‘ø÷–üü—ýýáááååå:ö|tRNS@æØfvIDATxÚc` øk9›úã‘7›ºkÛž–8å•j»wìÙ¶k±>.óK¦ÔöìØµmQ[œ7m›RÛ½sã¬fì dæîªè\6©H»Gÿy{vL®É¯K—Ç._°ÔÞº%¥iaþXÝ œÔrø„ëÄêlòrí+öÍ öOñÅ&/Q¿þX`ƒ“½;Vó…«ú=, 0ÄD|e3¼¶G¹Ùág+œï»=ë¬'yÖœUá@ù3gÎ`—WK]ƒW>nKæV°;;;W]S}]aBBBDDD2LYFFF^ŽfmIIIa“#WrLLL g“fkgt$^wQQQ ryt¦,fƒtYYYYZZ‡[[[i\@bbb7t}ƒ—tfMhhh‰™3„‹œyiJ"† nlh=‚Œ˜¾™Á—¥m„…B—š¯Ý"§¬.Ÿ¿'¨­ƒƒƒ(¬²„u½ñ‹‹‹ŒŒŒH©­ŽŽŽ%½Â’’’–––ƒ¥¥+ÍÓ¬œ‰©œ“   ¥¥¥’´µªªª­­­®®®¯®®¯¯¯½¾®±±²²²Ä´¨¸¸¹¹¹¹Æ¶©¢ÅÅ»»»ŸÍÎÂÂÂÃÃÃÀÅÅÆÆÆÈËËÙÞÞ¹ôõäääåååçççÙòóèííìììøþþÈ]c6tRNS@æØfIDATxÚc` „É„ã“×jœ^lG^7bN\”(ny…¾/§0œò:¡3L™qË÷Ujèµá”×ꢄW§~9uA¼ò|1Î ùfìò²Ñå9axäRKfuá–—ÉêmŸà®æ?«¼b|^Õ”z'N;Ÿ I¬ò‰ÕmS+B­ ƒD°ËO›]gmb“ÌC~îd[f^ßdO!,òò`yGV6·t{,òbyN®ð"lòóüðË3Ì+èʳóà’g˜—9i">yËy-Æ,øä{æÍãfrÈvÅ!?¯³&6IE3ÍÊGR.ŒMÒgœ7oyµŽ”H}FÜ`^G™™ø<<9h^¾¹4þ<*%LIgw YU`à3 IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/new1.png0000644000175000001440000000012111353112764020022 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/new1.png0000644000175000001440000000040011353112764017306 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ8´P~€IDAT8Ëí‘Ñ 1 @_ÄM:ˆ·I»‰ÍƒŽ‘άÜOSðóš”fRØñ>C%¿CèŽ š4X%§é¦jÕª­ÓõGŽòë‹ÿXµjÕÿkss.˜ùKDJ"ÚÅÏfÖ†>àgÑ ˆXªj—RêÇJ)õªÚ!b¹„[¨jwÕǺ¿•ªvP*8)+-+A--/,F-<1231=4675796A?9:8F<;=;>@-R<J?;?A=?@=I?/`=AB@LIDD=HF*DFCGHF[IjEJHLTH4mHKMJ_P_T sMOQOdQRTQaS9]ZfWTVS``r[€WvZtY%kd[]Znbg`2k\B‰Yl_3d]WŒ\xavd`b_k`Oo`Fjj €fbda€f`egscCueEur”cŽhhigzv‡mkmj‡j/•mnlp¡gyƒtmolw ¤joqn€oN~wy;qsp†{q0Š~~}3vxuƒ”}xzwS²uz|y‚zt–ƒ‹†&}|”‹‹}f{€ƒŽ €‚‡>»}žŠœ‰•‡?‡‚Œ3 Œ„†ƒ‰ˆn…ÃŒr‹Š œ™•<“‹…™˜/˜Š…¶‹/‡©™‘Ž’”¡›;˜“‘”–“Å™­¢°¤¼™ ¥¢2§–‹Þ”š›˜¿¬¼®²žŽ£¥¢¿¶§©¦Ä»©«¨ï­Íû»_ö²ñ¹ÎÀ:¶¸µÉµ¤Úͺ¼¹úÀÔϾ¯ÇÅ|¾Á½ÄŜúÂÄÁÇÆªÈÃÂÄÆÃÆÈÅÇÉÆÉËÈËÎÊößÓÏÁÝËÀåà<ÐÒÏçâHÓÕÒ×Ú¶Õ×ÔÞßµÚÜÙéémÞàÝâàäãåáéëèñð¿ñõ¼íïë÷õÄñóïðöøô÷óÿûëþýôýÿû™‹_tRNS@æØf‹IDATxÚÝ—YLAÇéîΦÔm±`l ‡6*%š¨klt Þ5Þ(õŒÁˆ1€Wêµ¢©«x!¢Å”x@P£¨ \  áJqS‚¶¡ÎVð™™¾ç}ùÍÿûæ›?¿ÿc‘qI_¾¹v…/Âl—%_ÆøFœi,$XH—↲öеO¾ßÀ%l¤)öüówßóq $›²J!ÜÁ&¬:œ’Òí@b¤¡ Ý~x›×!_5í£« 5ˆšMñ:<·~ûÙv{ùœ ¨Âßë°1Ë婾öºªÈ–€H è0s„ åÖtþl«zf[ì O³¬äñ(„R A©hšµÖ{:½×Q 4e ­g…Æ?軓֟c†,°¹aŠACZ–—Ý8äÎ7çÒ ÍhYks×.ÈÄSÒ BÉAÂÉ!dÆÍʆ4ƒ0ŒYlÄp û­+©THBÏòÍdø¾¯É›ÿVóôtUÏ ÑM°B=$´çí8¸ál’ !VS­Urøð ¥­êQòèžÏñÇ"Ãòb§óó‘M/¯Q÷¼¡½„ô0 áÏùÆ_¹÷¾|zœwq Õó3Õ½ öo©h®†„ÂËÅá $Às¡5‰eRëGH¸²25‡ôØQ'–K­Õ·N–e¢åðtqXß‘1 œXV.~kozUd›æ°·aÇ © `C5•Þ=>aØC‡¥•Ç2Çň5ò¾»³åÌAÛžI(·ˆ˜\²õmfl|$æÊr_|å',Â! ¸À}ËŠ!A Qr9ëøá4â>¾ øí‚° x0XÉÕQË«§4=8µ øèûWi- ®:tBtjÁ®—/w6‹ tøÕ!!@tjâ¡ÕQ‚CÀu ‹ ê":0ã9hz…̸´ä¬,2žÙ;¼ô8ÉY8Ÿž«Aûý ë7¦`Ë&N-¿!IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlni_32x32.png0000644000175000001440000000012311353112764021643 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.682395 30 ctime=1364826684.718395499 qjackctl-0.3.10/src/images/aportlni_32x32.png0000644000175000001440000000151511353112764021135 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÝPLTE©œ’     "'.&!!!!"""'"###-$ $$$,% .& &&&((()))*****+,,,2, ---9-...///00(000111:8333444666:63999;;;==5BBBDDDFFFIIILLLUL^ ;=;IZ Ms#IJ;?A=?@=I?/S]AB@Zt?CEQfYy_bDFC\Vf X„bp[_elGHFJHLTH4fJLJd”dxg’'YuMOLh OQO bwen“hŽjmRTQ5`faS9v|n‡qs8_lTVSu‚t²}‰~„ yuw/j†[]Z‚“k\Bd]W-q’`b_k`Oo`FƒÀ‹–bda‘`egscC‹œ$}|»„–ueE?xw4~€hig!ˆˆŽŸjlinlplnkšªnpmoqn-Œ’™Ã•Þ€oNqsp(‹·X~€C‡œ ¦´wyvxzw£¬#™½¬Á7˜˜z|y®¶‚ztA•–¯½|~{}|(£§‹}f{€ƒ~€}?š¡n‰†€‚¹À‚„ ­ð³ô„†ƒx‹ŠºÈ…‹Š„‘“‹…Áû˜Š…Š’Ãɑޒ”!¹îÏÔ“•’ÍÙ8¿Î§–‹š›˜^»»à÷²žŽ£¥¢§©¦©«¨}ÄÇ8âçµ·´œÄÆÉµ¤¹»··¼¿²¿À¦ÆÉ©ÆÃ·ÃľÁ½nèêÃÅÂÁÆÉÆÈÅÈÊÇËÎʰÙÚÄÑÑÝËÀÐÒϵÞàÐÕØÓÕÒÕ×ÔÚÜÙÞàÝâàä¿ñðºõóãåáÄööéëèíïëñóïðöøô÷óïüýüþûùÿÿèTb¹tRNS@æØfÔIDATxÚÕ—mlE€¯ëîv·œƒ·ëa€^ïZDBYãGÀ–€Q7!¡Æè­¦-4•Š`-œR5çG,[ãIƒ()1¬50‘Ðx¤RSùhýà‚ÜuË ¸),† {?Ü»žúwgú‹ùÿìó¾ï¼³óŽÏw/€‰Ð̂Γ ñüÏ覽+Nú šÖu+‹*d¼0Ù¶“Dg\³ÌW„c"ó«#©Ú˜Â)ÇfeÖdÍë õ¨@¿ Y޾P¡x„düjÙ)(ˆoB–'É¿sdTZ#3ä%D’Ó©[¶Ê³2KTÿs¶“†¿ÙJæÏZVZ¦Å]ê 2¿n;)ÈÐe²ü·³,·þ25ËŠþ¬ë/¥ ~ϧtÈ¿KÞ’Bù&°(úΉîéAê ׿¼îð¨ý]|ùÛ;Z½“ÔÎG@Þ28uIr"Ø7¨ÉV((7aêPyДÏ%¯›“w."Ýð½z §kr˜ôLãr¾dj5 K£ñ: ‘8Ëcaö,ĸYeÆaKý‰‰½>ÂG?Q$­5Ù<#޳›tnÀ0Ãßãg‡N¢/¬a]! ï_bŸ^4 CÜõ©ìðv÷Å1²nÙSIßµžg-S” ‡(HØ\•bu(½“,ù£(ñ_™Lžª uùè<—ÃùLF‚<:5AÝjµºfZ·­óXzqçeÂn#aìv//fcËMä¤P¸Ó„üD¥ëž#ÇhœÙOÛÌÚ}ÕÄZ‹ÛÒˆ€ñ¸•ñW¥ˆ×¥Ä›ó9˜T¼|£Ë‰ÖSŠèv ÚŠUéÄ3+˜u2Ö¦\üŠUf&9‰¤ÒÌ•íi|-IcΞ‚G-@Ò‘Yô”åQeôkmONð¿ÙF ãŸ~㤯Íwó;Y±IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/qtlogo.png0000644000175000001440000000012111353112764020455 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.777395 28 ctime=1364826684.7783955 qjackctl-0.3.10/src/images/qtlogo.png0000644000175000001440000000260611353112764017753 0ustar00rncbcusers00000000000000‰PNG  IHDR szzôMIDATXÃÅ—klUdz3³³»ínÛnK¡ˆ}l­-EâB) jÕ€ñA¢FcŒ!ŠM”(DÄšˆÑÄDc4â5~ÑÔB¤E£BPZP ¥•ÐVZên·ûîîÌõCa·Å íÚÄóíÜ{î½ÿ{æœÿýÄ8¶`õ틎œj{ªfnæüi3´Ñªîþ©iͶ=WçÌ ÕÍÔŠíÙ&  ‡Kó+[<õ1„CúP4bšW²è@åŒj#]Êhç—“mê+;ÞxÚdbšg¹ ³ÙtaÊjË=>:<»Ú;†` /Þ=èMlβäýÿ9~¹ãÊ'ßZwЬIÎ[îrbÏRÒÚPŽñpPÿ­$¿rŸÇ]? ‘HØ8:·¤®©rzuìøµ£Í ä*ª„šºùäo$f1©šÅ4Ç':æìjïÀ7÷zŸfYœ-@Àè“æ’-CÆb51Õ–“§æ–^e]õUÏëþ7¿m¼a<ÿ‹MøCŸú=²®™áá¶ëPd_´Ÿ#î§µï{~ëÿ1ê8´< _¤ø×}'œ®öõ·³¼vª¢"I¹Ö—¬ ÊU;&6ÒQâ9äÚ ‘¤KqY‘°Nó®0{^þŠE³ëF²ámåÝlúô5B±KJïã…Å;°›s0tÁá¬ô<ÏÚ›q;¯ýo¢+åEåɱNoÏ~É;;7Ž…pec×r0 Žç͘Pf/ à÷_C¬¿ÿ™¤ï ŸeÏÉPT‰kçÛyäÕÕ!Pe #p¼œƒo·à°epsùƒÜSµ§mZú}›˜eX`±š †“sEÎiÈ&…¢Üéɱ*W-KËH@"lfº«0éû£ ëQ² gºéñö0ËU zŒ Û^JÆ~t3ïÿ¼‘þà™ôÚPBF‘Sa†ÐSèMBbä)M Š*E’1ø[9>p(½HÄ TYCS´T‹Åƒc¹_&6œdVœÖÂI‘éÒ¼.â""—ÜP6)S@V$bz(¥Alª},¡¢©æT—Dú¦ÀHº‘zîeI¹¨FL˜F±]ˆO-ÍfÐ}®'õªY]X” ‚þùYNrí¹ôu×cS Àl1qÎߟòe fÙ2 QƒLk&6-#Ù¢“µËpWÛxû‹-1R|ÙÖ|κ]´·…Y{ßèF‚¦SŸ YL øÿJ®_Rv?wT3t!~½;5¶/«\¹wBÿ ónÚ½û§¦í |W¹¡€Þ‹ß=\·ê8@"!ôpP?íÐò¾^vÝŠ¾tÁþ Oß SEGg¹IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/messages1.png0000644000175000001440000000012311353112764021042 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.682395 30 ctime=1364826684.682395498 qjackctl-0.3.10/src/images/messages1.png0000644000175000001440000000047011353112764020333 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaÿIDATxÚc`hÀ˜zæ?ã“/Z>>zgD¬¦ÿÿ>?{uõÊ2ÇR–—tßß©úøð%ߟï‰2€C@‰YăGá2Ë·÷¿Ù~ýÉðøxÉ›/Ïö¤000ü%äjuÿÍ­l<ºÿÿýÖ`A¸ëÏM†Ä¸€ONÙæÇ{]&²Žñ?ŒÍDi, X`ÁÂ/ç,¸d??;/Ã?¼ÈÈÀrgÇs“ïïþ@ øþîÏ÷™$ËTïîüý‘‘@*d``øýU€áLJS þÈÈÀÀÀ ¨»Œáß?×ÿÿç¥ÿÿ¾¿¿òôç‡ë^žh`¶ÁÂMwIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/xinactive1.png0000644000175000001440000000012111353112764021223 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/xinactive1.png0000644000175000001440000000043111353112764020513 0ustar00rncbcusers00000000000000‰PNG  IHDRÄ´l;àIDATxÚí“1jÄ0EŒ*5Ûªôæ>’HnÂg0Ìt‡”S-liFÁi.ŒÖaSùu‚Ç—Ðü...þŸ·Ý¹'¢fRJ73{¨ê\Jyðyê†ã "‹»¯¿q÷UD–ãp&·‘e=@DýS©D4í_ºÇÝW"šZ3;"3!„C1„fnþŽŽ™‘RºµÈ­t)%˜Ù£Enõ 33¨ê\k=k­PÕù™Á½®"òšÇ!"?›7åœïã8~åœï[Åú?­ôV=l…ª¢”rj“¿§›ÛGLZi¡IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mcliento.png0000644000175000001440000000012111353112764020762 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.807395 28 ctime=1364826684.8073955 qjackctl-0.3.10/src/images/mcliento.png0000644000175000001440000000037511353112764020261 0ustar00rncbcusers00000000000000‰PNG  IHDR(-S?PLTE€@@@LLLÿQQQYYY]]]```kkklllwwwxxx€€€ššš¤¤¤²²²ÀÀÀÌÌÌï˜ÁtRNS@æØflIDATxÚ] € Q<+ŠØýÿ[í¡B€ÉRJ-Ç„ãª1ÑUTb„r3­Ó0­é© ’õ™Ìù¤G™„ÝEa§`sa`ió[Ã!KHñôWú(5ïÖà_¦¨û¨ÛµL ÏÁtXIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mporti_32x32.png0000644000175000001440000000012311353112764021325 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.678395 30 ctime=1364826684.678395498 qjackctl-0.3.10/src/images/mporti_32x32.png0000644000175000001440000000151711353112764020621 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÝPLTE  '$ )  $" $" """###$$$)&%%%('/)1+,,,6/ ...70;3 222320333>5565777878888;;;>>=DA%DB)@@@AAAIH ODDDDEEEFFFQH#GGGNG8HHHIIIMI@JJJKKKNKGLLLXN%POJPOOWR6QQQSSSTTTUUUVVVbY,dX?\\\ha=```mc4dddseLpiBtfMhhhiiiyiJmmmnnnoooqqqrrr{xDuuuvmyyy{{{‹p‰‡tˆ†~½„‡‡‡À†‰‰‰ŠŠŠ‘‰ÃˆŽŽ˜‹€ŽŽŽŽŽ’‘’’’’”””•••———˜˜˜±¥±¦ššš´¨œœœ£¡„¬œŠŸŸŸ«£p   ¢¢ ¢¢¢¤£™£££È°¤¤¤É±¥¥¥¦¦¦©©©«««®®®±±±´´´¼¼¼½½½ÆÆÆÏÏÄÎÎÎÐÐÐÒÒÒØØØéæyÞÞÞãããæææèèèéééüüîþþùûctRNS@æØf IDATxÚc` Ø·.$ ÂѵÄ¿;Ûøü*<«³”ð)‘ñOÏ ÖÇ£BƼcRK„%ÌÆ“Z"ñØ2¢ÂEI—°ŠÔöº0-%Ü*¢óÚ&öe»²ãRÁ$jV>ePN3æ‰ûT‚T¸qàRÁ( QáΉCDÅô‚v @*ÒÚgV†Z°áT!ì\\ÜÕ”ìÅS…˜]^O[~M®.¼&AqݽU68|"¯fÑP4aj™7ö˜™Ë)/ë§7yöÔ Eì¡Á£¢.ÈbTQ*‡]…¤ºU³‹Q‚ª.+vÂÊI­B,Rö 8âž‹?£U$ÀÁ×”gúáKÑ©Ÿ–èÄ„;… ÖΙ¡‰/'Dej3Ð ŒÏ[Ñè?ÎOIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/xstarted1.png0000644000175000001440000000012311353112764021071 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.596395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/xstarted1.png0000644000175000001440000000047611353112764020370 0ustar00rncbcusers00000000000000‰PNG  IHDRÄ´l;IDATxÚí“!oÃ0…ß*#“RÃÐáã'å´¿Á*;èòü†H¦Ã¦4ªTÙ“G©kÕ¨ÍÔ¡IÙBz¹àµUäJò¦ÿ}ÝSx_5£qƒ–bìœ`˜°IPÆÒÿr¦„€Nr*‹]Y‰iÀOð<çÓtúBàÞ‚¨³¢¾ˆòåeŒ›E3ÀäšûåN.œ ÐåBj Ÿ=vÚ^ïEö#½®¯ËÀôáILsDªX,).>ù†µ'¼^ ˆ^qr÷Ì6nk¥×.^ÙTRCøÛÆù¤Œâw,Åæ¼€ð<ž%18 Œ®*ݨ¢ÿ¨ÓBBVÂÓ9bu*€Zö„ÉU FN’Ê zÅ«6•£Frô‚€Œà½€Þ Fþè+Ðvr^ˆIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlto.png0000644000175000001440000000012311353112764021016 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/aportlto.png0000644000175000001440000000043011353112764020303 0ustar00rncbcusers00000000000000‰PNG  IHDR(-STPLTE@@000542@@@0PPPPPUTRhh```jhd€€€€€Šˆ„Ÿœ–   €²²ººª¨¤¿¼¶™ÌÌÀÀÀÐÐЬââÿÿÿÿÿ ùȶtRNS@æØfrIDATxÚ]ŽÛ€ DµÌ MÉ Ýþÿ?«ÑЧÝ,ñVt®¬’Ë+¶ Ä<£=˜0š°uZÀ|0žùAzÁç? ÷A‚‘H©‚«{íãBª¾hû;¨©@—ø¤TozÝðÏùH#|âno}ý(Ž™,¡øIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mporti.png0000644000175000001440000000012111353112764020462 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.807395 28 ctime=1364826684.8073955 qjackctl-0.3.10/src/images/mporti.png0000644000175000001440000000032411353112764017753 0ustar00rncbcusers00000000000000‰PNG  IHDR(-S6PLTE222:::???LLLfffhhh}}}ŽŽŽ˜˜˜¥¥¥©©©ÔÔÔÿÿÿQ :±tRNS@æØfLIDATxÚmÎA€ ÀbU´*ÿVðÔTrÜ™d"òËf0Y2’zPd»Yv–^`Á'~gZK®”ÄJÅÅ‚gUúwñ±Ê$/Yå$<ÚIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlto_32x32.png0000644000175000001440000000012311353112764021657 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.595395 30 ctime=1364826684.595395497 qjackctl-0.3.10/src/images/aportlto_32x32.png0000644000175000001440000000206711353112764021154 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆmPLTE   ## !!!&&"""(('' ((%%%)) (*&))$,,//***!..00%33000'5511188666,;;777??==@@0BB===??3>>>3EE@@@>AAAAABBBGGGHHHQQSSz‹‹‹ršš˜˜@””csœœvœœœœ6tžžx’’’žžB¡¡;¢¢D¡¡S››…z¦¦¢¢OŸ£Z›››¥¥K¦¦E¦¦G~ª§§§J€«¨©©E€­­€®®°°¢¢¢‚°°¬«\„³³Š¼¼‹½½¸¸aŒ¾¾ÀÀ±±±ŽÁÁÂÂÃÿ¿Y¿¿_‘ÄÄ···ÀÀsÃÃf¹¹¹ººº»»»ÁÆ|¾¾¾ÈÈu¿¿¿ÉÉrËËeÂÂÂÍÍlÎÎjÔÔpÕÕpØØrÝ݃ß߈ââƒççáááåååòòŒòòŽóóöö÷ø‘üü–ýý—jÐÓtRNS@æØfxIDATxÚc` تÚØâ‘7k_µlílœò Õ5+Ö.[5W—ùéÕu+V-›“‹ÃÛ¥Ë:ªkV.î/SÆ®@nÚZ Šª…Í©êØ”çÏ\»¢µ2£$V«¼SÛÎ-3ÍÏNtÅêÍ¢ÉÇNO¬h(ðó”Ç&¯2kÿ¶«“Âcì…±ÉËNÙwòÌ„/knv¬æ‹ö,ð9¸3ÁFG u-ñÞâ"ŽCž³qCðæ”sŒ8äÙjw‡åÏž=‹]^¿xo^ùÌýy›ÀòØè'îoÚ‘ǪB?jÿñ>˜¼)¦½Þ“gÖðAä-:³0äY§Z¿3AdöYóÎu3˜Ñ¸>5ÕYÂÌšal§†*/µçD·»$œ+aêkˆªÀhG©.‚[8O,E^#‡Ÿ™?i«N2_°ÕÀíët¢5 ôAsò‘å:þ–®cºŸvµ(YX!¸"Žè ŽÓªG2 ]AP( —!‘Ù°‹Yo=¢IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportpti.png0000644000175000001440000000012311353112764021014 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.635395 30 ctime=1364826684.635395497 qjackctl-0.3.10/src/images/aportpti.png0000644000175000001440000000031311353112764020301 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH€€€€€ÀÀÀÿÿÿÿÿ6tRNS@æØfdIDATxÚc````K`€¡$Íèf aˆ(™*0(\“C˜€´H5uM U©0 IN3L]“R””UB Rl‰ ] cØD º•Àæ…ÄŒÁ&… –Bœf>$Ñ]9IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mporto.png0000644000175000001440000000012111353112764020470 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.808395 28 ctime=1364826684.8083955 qjackctl-0.3.10/src/images/mporto.png0000644000175000001440000000032511353112764017762 0ustar00rncbcusers00000000000000‰PNG  IHDR(-S6PLTE222:::???LLLfffhhh}}}ŽŽŽ˜˜˜¥¥¥©©©ÔÔÔÿÿÿQ :±tRNS@æØfMIDATxÚ}ÏI€@@0®¸ ùÿg]#ƒUæÖ)8Dä'Šäµg ԹψöÂ¥ž`£—Âmbò²z[_ ?fc±.þ_¢·²sNÏkY–\JÒIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aclienti.png0000644000175000001440000000012311353112764020742 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.682395498 qjackctl-0.3.10/src/images/aclienti.png0000644000175000001440000000025211353112764020231 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH€€€€ÿÀÀÀÿÿÿ«ä~™tRNS@æØfCIDATxÚc`€%PcPq C Œ°°0 ®& @ 3(#99-Æ033«13K«ɤ!é‚Û•pW Ü[Õ|IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlto_64x64.png0000644000175000001440000000012311353112764021671 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.681395498 qjackctl-0.3.10/src/images/aportlto_64x64.png0000644000175000001440000000372011353112764021163 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ì÷PLTE      !""" !&%"$!*,&(%+*., ",-/0,-+34./-13#4455.24241.89*;;574>=:<==59;=;9:8CA6?0<=;FC;?A7BC>@>EEGIBA:5GFEB6AC@:J:GH6MOCGIEGD;MMJIB=ONBMNIKHTUUVEPPTRATHLNKSR$RQ9[ZPROJUV\\FXX^^B\ZZ] E_]WYVec]_;geN`_bd []ZLgYQeXec.Lfcki_a^ff‚BaïDøÎ‚‰’` ÏV|ê /ÌU2·`þØjþ!vov ò‰äoútýU0aPÌÆxêÜ?p\\Û?É›\9qiÿ\®^ò_ð7O†ôù-€º#?]‹Ç'”ŠÒåÜ–øI™1AÞ7ê1ót"ù˵À@‡â•zËõ™1p±|+xr!‘˜û¢NYóêêG¸+ÍÃk-Ãr¯ñùdü¶µÿíòòµfÿ¬o v•ˆr'I$ÿ¸ÒÑT³å…€ Æð!~e.uX|æ¬RQ^”Á( ¸8Q&"r`O,9ÙßTõ`ƬA”¡Ê1®þ3gkÍÓYžà.Fm2Af¿ `ˆm{±(Û%©¨MR,û.«@êËàî̪§øï™²Ýg@ØÄ9g¬JݲÅø`¶9–Á9ç¼dƒ)Æ$àð,Lóüèúõ.3$)“³D4$ÌmDC&YqÙž9e‚Èc¤ƒ°If¾%ú< ðõ$Iˆoáe¾Cùþ ™»)FÌ-©Œ•ÊzŠY„Ä dtP"*Ì#À'õ¦®'›¿’ÿùóŒÅúÚË©=IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/pause1.png0000644000175000001440000000012311353112764020350 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.594395 30 ctime=1364826684.594395497 qjackctl-0.3.10/src/images/pause1.png0000644000175000001440000000032011353112764017633 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ%7ƒ]CÏPIDAT8Ëc`hÀˆÂKûÿΞÅèÀÀÀp#Š‚³g†=ËÀÀQˆGމR/Œ0j:°g`˜ùê!bøå1 A‰”#Òö# NIZiIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/mporti_64x64.png0000644000175000001440000000012111353112764021335 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.809395 28 ctime=1364826684.8093955 qjackctl-0.3.10/src/images/mporti_64x64.png0000644000175000001440000000335411353112764020634 0ustar00rncbcusers00000000000000‰PNG  IHDR@@·ìúPLTE       # # #!' "#!*"#$"$%#3%%'%'(&()'/*++$+,*,+.+.",-+-/,01/7752'315130231689496342:8796A<A8)9:8@=@:4CBI> ;=;==6P>J<X;=?ICUB@B?a>CD2ACAJEMD$NB.VEDFCOE5OG,GHFRI(VJjEXH$TH4IKHOIClGOM0cNKMJNNFMOMSR:VQ@[[RTQnWUVTVXUbaY[XgY>[]Zk\B]_\mc#^`]dd:_a^`b_ac`}a&bdaib\scCkgDoh9ti)khJueEfheuo&mhgpikhlnk{r>npmnNvnhoqn…vwvEqsprtq‹zsuruwtwyvxzw‚xly{x’€zy{}z}|†]‹}f~€}ˆ~r€‚ƒ€‚„ƒ…‚‰„ƒ…‡„ˆ‰†È‡‹ŠŒŽÑ‰™G“’Š•”zÕ“•’”–“°¤–˜•˜š—¥œjš›˜¶©›™ª™Žœž›¦¥^§¡{ž «ž²±±žŽ¢¤¡¤¦£®¨‚¯«q¥§¤¦¨¥²°i³®t¸¦œ«­ª¯±®À¯¤²´±µ·´¸º·Éµ¤¹»¸º¼¹ÓÎù¿»½º½¿¼ÈÄáÓÀ¾ÁÿÂÄÁë×ÅÈÄÇÉÆÏͱÊÌÉÎÐÌÏÑÎÐÒÏÓÕÒÕ×ÔØ×Î×ÙÕíé|ÞàÝãåáåçäçéæëêáëîêñóðõøÓ÷öíô÷óúùÜùûøûýúþýôüÿûÀœ˜tRNS@æØf IDATxÚí—olEÀov •ºR.´¡šbiáøcÕN,2­ÁK¬&&è ˆG©aSmŒÿiɘh)Ö€S¾Lª±D†@(i¡^ÊÜÑ“ž&…šl{ÄkÎÔØ»6qvï¾væ¾ãû¾¿üÞ›7oÞ:ÿðæ«Y}¯j‘ – ¿ >˜t@NÈÆ¡øÌch8Z¤zå "öÑÙ#s¥ ÎãKwœî½uI>玦¦ÓWoÝ(–&¼ÑÚb~.QU¹¦x¤¥µ©élïIüvcûÃRg¹¬¥µùÝwÍÆÔ%Kx)Œú¿ÀÝË”å/ :Œ›×>7X¥ !'GÓi„üÄÇ Œ‚´´CidU·( wf1؉:ò(F4°0󨕥ª¨‚íL˜=ØÓÁü”¸sÅTÅrâŒ$&yÏðyœ"ªšq Ÿ…b}Ôú‰_™!í`xá‰ÄXÔÿ(Á>‹2Ý@,ã„Hw(õŠ9 ¸ &l(61Á:Ic©°ƒR®[„1‹`9”«‚íˆ8ÁÎÂrð­ >S,‚åŽÍ8T̞േûu˜=a ¥ì:0¬»óÔÙ—ÑŽûu#ä{J —* ÈÔ²ÄhÔO¢ w0Ï"€ã6<ÛÓÌ|Ÿ®",df—;qÛ*!‚-¡qj„"á0ëé$X”@Ôë Ê¢áÁp÷‡ïÄ¥b«)K¦œp3Îã¸O 8='bfBwˆU2!N0h4:Lj¦Qâu9À§täáFˆ‘ßÿøåâÑú Ô‘¹Õ5p#$þk„&““œðÕ³ªÀhPÁJX §›HÉä_a±Ðp)YkÊ%šæ¦ãÓSáÄC"ÃÅUƒ*6’v€S§ñ”ÅÑB‚ Ö ºÃ¾§ð¦tÓ„ípþ‡ªJhúo iÂøôß?¼¼öù&œ²FóÔm¾}§aA(vÓ›{·Îß}ÉB‘érëOvݾówpBåÍ+Ï­Þüñ"‘7“߸åGË(û 罸oþ¦o>#ôl•íê²ó  'v^XüÊ«bË æ‚=œ°aUíÞ/qíþBE_¡xë·Ÿò ÑÚC͹ëhΞo}·{4™¼Kë]Àá!¬ØÖ/•JŽ|í”[¨•†×?˜J¥bÐ!K.žûuòOšÅßÍœg^[ ÿÇ¿,þéç³öÐ{-ºIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/qjackctl.png0000644000175000001440000000012311353112764020746 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.634395 30 ctime=1364826684.634395497 qjackctl-0.3.10/src/images/qjackctl.png0000644000175000001440000000151211353112764020235 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆÚPLTE­­­     "'.&!!!!"""'"###-$ $$$,% .& &&&((()))*****+,,,2, ---9-...///00(000111:8333444666:63999;;;==5BBBDDDFFFIIILLLUL¥Am0IâXUpCTÌì(ŠæÇ­‚ÙªbJeN‚ NŒ–¹“{Ëcxq©ðá1ò¨jnªËRÁ¡"ßÏÚÒ¶ova¢öààvO‰7dµo÷r¢ܞÅ.R®Ó»5pEŠpX\¸—6>|aþõxUxIÏÕ«ÐēĈPѨíZà!…G…~£‚Ú´n-|*ì´]3½Õñ¨m”ÒQã…Ï c‡Ð©’ø² £m`†ÞLé%hžA8ï¬ÅY·ñö©IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/xactive1.png0000644000175000001440000000012311353112764020676 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.681395 30 ctime=1364826684.681395498 qjackctl-0.3.10/src/images/xactive1.png0000644000175000001440000000050611353112764020167 0ustar00rncbcusers00000000000000‰PNG  IHDRÄ´l; IDATxÚí“1kÃ0…_ƒ&-™ šŠ×Î7w=ðš£vn§[<öxLWƒÖ®Õ𮥓H!ÑHE]lHcb—tÊÛ„ß Ý{ÀE]ôÿºÚ;DôÈÌ¥1fBØ:çïý€I´Ö¥ˆ´1Ƽ«c‘Vk]Ná"ÒæœózµÌoϔ׫å¯"Ò(N¢QÝ¿´ïÃcŒ™ˆêc™3"3—J©Áåçë¾Þ_J)0óÑß1cfcæ‡ »ð1ßlŒAa{ÈpswëÛŒúàœsMJišR‚s®9eqçK…ˆœ'ÇZkˆHß¼ÚZ»©ªêÛZ»é"Vü©Ò]ôÐ-Î9xï'5ù·ÞS ¼ºIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/disconnect1.png0000644000175000001440000000012311353112764021364 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.677395 30 ctime=1364826684.678395498 qjackctl-0.3.10/src/images/disconnect1.png0000644000175000001440000000105411353112764020654 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaóIDATxÚÅ“_HSqÇ?÷îŸÝ®,u!ÙV²,‡õ ½H“zjBT/¦oå›HP”EOõP/½øVà¤p“ÄŠþFK¤\èls›Ê6·{çýõTl7…‚œ‡ßï|Ηó;çüà›T|qa|±97¿@+‰õ±q%̹l† £€øôáƒï·C©7ÜŒ-pòå2AÀÿ;ùRö#÷ã3øyÐ Å9ÔYJêɱ£ÊÆa—]ûUÔ`’g½Û¸šøJ×½(Üž£0’D]$š5¸+™žd?]ÍûYB|ÈÐîkdB‰1Š!]™!ÉÓ„ÐÍØ$*»k™j«¤"gP˜ÌÒœÒé&Ùó:ÍqàQ1/›tAb NË«e4EƺÕA(³Ê±·iNͼ¼Öh"=|ˆÓ>µ‚¨±ãl*çÉ7Àø+ü4·NÕÐÙÿƒ ¶—Qï¬ÅZÌ…NÎ,}ãZ$ƒ;°@(ª‘ݧ²³ÖA½WÁú4Åè*¹.Ì!0ëghñú¢AA|€£ËÅ—ç^Ęãrm%ÉÚQᬎ{cˆÁ݈V'pö£ÊT÷naé¡Ѭ2iÞ`Z7q}¯Â|ƒBÌ]Ƽ }æþ”[hª²—`d½ÞÉE¾ž9 ÿô7þx¼°Ú]‡‡IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/displaybg1.png0000644000175000001440000000012111353112764021207 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.719395 28 ctime=1364826684.7773955 qjackctl-0.3.10/src/images/displaybg1.png0000644000175000001440000002022411353112764020501 0ustar00rncbcusers00000000000000‰PNG  IHDRPÿ` _ IDATxÚí]M³$ÉQô|¯gw¥†ÌÀ8pþ¿Ý9òà 20!c53Ò9TuUfdDdduÏj$u­½™×_UÕ‘éW¿ú±$‘RªþNî7‡÷˜õø™×ôŽò5 ¾—õXäóGÎñ–Ïé ãÖ£\ó½Ç4›èÙÈÚq€ù×ÃÏùsüõ/~‰—gü÷¯ßü×oðöéw˜ß_ðþöŽ%‰Ûo½Ëç»Oâöp2Ÿ’zá/ñ·ø»þüÓ?ý#&>áòÿŽ·é>|û¯?"=½`z~Ã2O@š°, ž¬Î9é @SÚ¯ŒÊ%,dzÿ ëßs¿‡Ñ4΀Ö=¬ýÁõ§o¨ÕÎQÑõ^«—µA†Æê<»w¬ùÆ“±î@û[°ììzÚã•“KþyW·Jù¾ÈÔý>€DíLR{¹–3°Ð[ùÝ*qÝ€äu’[¬=߸áì ÇìJ:’øp¹àϾÿ þþ»oð‘À~øÏO )­;;pÝቜ¹"ƒ ÅËë:ËÇ®_žÈ<õv7$…!7ÿ6œ•ÅZ8Ïq¨7›­›[Sªƾ˜¸/îõqªïQ;“4nˆUÕî¾8±Ú쇀|Ã"”x‰–cö|BëïÕÜ“øj0¢ÝÊŽ—%ñ©×Kç®5~‹êc-˜càëgý"*(ÈB—Ë3þæ/~†ïS· øÙ÷ßãùr|nfH,9H»#Ø oƒôdÞ~Êpà°àÚëlï‡Ò‘°¸¸kHQx–«|3¤3ðŒNyÜp ´Wªb¤ëg׈ ðvDo›¨ˆÆÓ°)51¤œ…¹7§±÷ë¹ óv0ðòä#ÿ}¸"‘dÜ×=*áþPù·{ÎtsÉzq Ø°ÖM Ù÷˜ÉFoÓ3þê'?EJ HüùwßáÇ 0#/Ä’×EžsÞ s5ø ìNµ#( ;Qî’,@ªØŠÙ_*œÂÁ'@w *PÐU‹è„ÝTáóîäÍ÷Œ8|ÆÌ‡ã²㈩êñucDaÊó*C ÷;4ËMV ¾{W–üû¹9 6áf R'LN•Èg%qèÆ®,ÙD7L H¹ž/xº\vÂâ§ß^öåÌ ¬r ƒcgÏ[Á«³¸’…ó¨ü@eîè $‹m'Ù8ƒA”ð¼rlwF6¤ ]/í‘y%yØíEÜ J*uY_¸g¡ì¢Î"'eëãˆ÷€Â ºi“&Ì#àS¾ln–ö5¦îé²ãÌØ:œÒç0ÈtC· {¿u²‡XŠCøæÛ ¾ÝLóûê2°,@^ŽÝÿº€s–Y‚õ¿\ ¹ ³A¬€+q…ÿÅëëãX(Πt å ¦Âi Fzøj h¬8cɉDL[G’ÉëÊ#ësŠÄg% Qs‡ÃuL{’hèÒFD°›õð-…¾Õ¤ØCaFÒ7fjdp/ìô²BÉ¥ãS„bÚ¾Vª1˜”G¶á»Ÿ<ã»ç§ýÁ>ILSƲpO#’yý+Ѹ#€‚S€Hî!Sú‚‚2T‚p(¸ °J–¡5ä ÜçîA"}HÍc»I ™•H*áh. ñ®•RíÜl¹[u[d7þn‹=#`ËØßzØ´ßÙsî;©{Ô$tku4ÇÆ6ðr£§¤³’øþû žžŽúé}ÁçÏÄ<­HEžÿ0ú| ‚,cúª®@üW9Òq4Ü‚@D†ÎC:Œvç§DòF²ŽãHmÏÔ]}õ9‚9·j ÔÐfd¥“'¡¿“6Ì>q£wŒ”òìF6õ=SÍï(ŽÝ\MDhY/ÿ¯ÞuóÃS'à©å²o|fzv Òó—bá¾Î+‘˜RÆSʼ-bø’0DÉîg¥èè°ñ’<¨~WžoåDRAPÖaêâ%Õ)ØÎ@5H²ý2+ÄáÇät˜C*»Žf¢=žNç>âK„Ê!CÛd-|)XÍ›ˆð§]žIúS¥KØqü'5¨äVe&(ù”Æ•h¿ÑÔ%£“ƒ†/ðôôŒK*>§>d¤§¼Õdä¼þ`¯LÌ5PV- G¡!V¦@ ¨IË=QÈ3 Üå „ ‚´4Q“®Ô¡^êðý%1ë™-«™ñmB%Þ"Ùº8—He3’9á˜QSF½ AÆ?˜'/À¬ÉäÁòT9îD•Q³…c.$qùæy·ƒ àåuÁ<ç­iûÙ^µ²bÙH=²âZ”Р‰Š÷¨¸ËP"j­Î -qö·A+ü°Âñ»žCÇŒî{0 ›z F¸À4Ó³ÃæÑ{fCÒr£†=òL¦`Pa\W ~v'dJ†ç cž‰¥g)»À¼„bðú6cš–-“°-ì²2QË2ÈŒÃþ¥ÖYˆ!HtY›ÀÊ[°úgí ,@q·¨ÆÞtÖu®€s/î¾OÎQç…ÜÓÒ+ò‰ÞÝÒ"–&Ÿ9µg·Ÿ7üµGýE¯"H&J hO±[Ë/…€t"”PðBéépÏä…˜ç¥ ª¬Âæ ö:…#T¨š†r“VPjê”"‹°¡¬]82 µzÎFˆ@—£§«ß¡Sö¬V@j»cpÔÉløP“ »ñÊèâåø’…·S51Å9žNv0ŠsB¯ƒÞèÁ2ÞÃÜÞðf-ŸµtùX<˜H¤üŽ´%…¯ÜAÎù€ÙJºqû÷ÎETŽA”U… MˆB¡ªŠ°ˆ¹kâ 3D°›žìêFv Ž*»¨gØôW ¬Æ©´ÄÎ" È@1ϯ|6¯g'\¿OÚ3ú-°nIÛî/cN¡ÏN1"úžØB"„r].̸Ìrž×¬AaüyÉb€(S>võí±\:Ȳ&%B= <^r `“&lH: ÅÙ#KD’£×»b¡Ø¯‘w¢Z*<–ê䉈ž§ÒC9c`wH÷ð5ÐÊ£DøŽ^ù4CôìIÎcìÕàB<_Â<ãÛy^rÑ´%¸}%9п,WvÐÁ*Î@u¨{”.Ʀ{Ñ š#­¨ˆ†#púØô_{Ü‚ÝnÍ‘/–ì.c×0ó@(À;9„þ7BT´7à°SeMÂ5kÄ`!üp+5(1±áShÌöP+©øžñJà»üúå ¿}›öÎE°6ŠÝ1äƒC(ÓŽ½î£ƒò})« Ñò U ³Üù g …ž3h´Lh¯7LÙ(‚ýtž_Clr4BëÓéwÛÇ÷ã`¼wÎÁêK:¤ ê@OÔk¨aƒ×©½G]¨Ó¦Í{!7!Ã<Íx%ñà7?|ÆË4áæ}·G¡€T)eÖNbK?•ŠEÊP¢ÔF}5Ø–›¨kʲd6^¼4‚ÿ4ÓB0¢ô$Ct“íKtÖA>ÿóŸ0Oò²lmÍR€(3Þ ’d;ô&b43‰,b…ÔjFQ¬Tõ(PYØB‚­á Ç@C éioc]œa4£!9žr÷$^9z·BŠ[ãŸx€é}ÂÛŸð2-x{ÅëûZƒ0O «|zÉ!\[¢Yu–iF½µ±vTúD±½Ð¢æZg Û‹­lAi´¶¾"M¾ ËwP€OÒxƒ [m¤ Ê©™É]:ž§ÕžñÚ#žØÅGcž3äa~æüûÆ/‹µC˜ç Ÿ>~Æç÷ïooxy]3 Óœ}9³BYr YiH*²h‚(9mÚ¤Y)(½]‚,œAK,ʧå ,ô@/–¤·i*èÒƒóæ:ïo ²ý¸5cŽmììceöÐD8†6xÜpœÚB9@êÓáàà©Jjc5DyÙóó¬Cæ Ÿ^^ðò6áíuÚ›pÉÈËš1XÓŽTK—eS¥H* j”ªÄF5IŒBÇ1ê Ìð@H°Uï'É7Í {aA³‹DvcºÅ,ÔB 2¼`LîãÄîÄ!2С•8„Ôã]†*û×7â(xÒG1L^ð¤S+ž0ãóË+ÞÞf¼|~ÇÛërÙ¸¿÷4ØÓ—dè f U% ]E%iU ¶§V©²p JÚ’ZE¢ájƒäPjÉ/X¢Ùý׋¯‚§½*É0 s¡t;cøúï ϯ=3Vð¶žÃ‹\)Èó„··7¼½NX¦wäe·:„e©…P€¶a—c¿Þ«z¨¥$øUnMIEêåÈm½ݾ&*ÒæfWUnº’¡ðwOz‰ÚIëêʸÑÑ…à#/3–yAÚæ1îJIà!¹ÎºîP²ã2Œ€ŠZqVþÍãP6‡¡uZ‚2ÀSg¶¹¯²ŽAõ=éøvv`¥»ÁÇ·~ÐÁ £ ‹@F x„ó¸ýZ¢¡oxmõPŠ“ÑÓ¿Àûû„ôü„é}Æ2O ¯eËÅø¶¢©‚ó›B;haת3C–'TÜC.PíZ¤?”E›“Р*¢Ío`;Ã0Î>÷Lu^l´‘jLÍ› !9šâãý Ê ¿¬‹K®éÅÍ<ï)N:‹‘,…ãý:òvÑ&´&dHÈ˲!ƒ«CXSŽy¹ê)Rݵ¯N¢!˜iΨÑB…c‡G¥w µ0Wˆ@âdȬUŽúÎ)Œ—TËL³%gW³ûá@d‡§³¨¢¢¬Câ­#:ˆtÎr;æL~„Ðè&ò‘ÁïsH˜Š!%äe¼¤Í!,`^¶JÅ2µ¨•,×åÄ™Ós•þášnC*b«N¸ Š®B—q—ãäuG`)5[q8míú;!ÈC_p£Ã[Õ…,ÇVN KH9fPCâ-Ã!Ì8¹Ê›¹~™sh7¬ÍMyÁûûJ&NÓ„¼Ì˜7Çó‚¼läâ–nÜ'@37^:…¶Ž òÑ(r2³`… j¨ G „™Ýtª‘Î$5† S-„êÚØù]Þ\@ÃjÇãÂÆ/Òq|.å£îÀûÓ žx]OÖ?àlΔV_ð”0Mæ÷ rAž—-„ÈHûp×uNН’,5 ò>f¬®#¨ëDÝAS”TK¸«†oñ JßA#¶¢†"P …Ä{ÈVhË­1ºó¨¤ý5o( Æ N‚+¡æ oÉÕßhøoÈÁU{®•ŠÓ‚y&ÀË2oL ’P+sˆMCSaÕ_ªBýWÑÄÔgr\Z«‚± -TÒ“†¡iŽ@#9oꢠñ”`¸ ‰Z×3C1}”*Ê¥oÈ52Žëi¦ß¼œþ`”Ódì`×ãø5:¤âxµ½× d`Þ¤ÏXOS†¬ < ÇÌ.°ž©PU'VÀä,H'!"’j•'WÆoi!°gXtúfôé,z–¾>¢²ËŸNí¹½ÛÌ „:D{½¥ ï¿†„€Rï@8rÓD¤€ 䧺ø(ZŸ•l‚,knº%¡ Á%(S‰¬†"³ÑHÑd´úôI0Žq š¦b_u¹7OÁ5Ò!Åߣü4L¨ —í¶#ÿìóçc·ÿÑBa¡™y ²à"‰2õØVjõUÆBJ­IÙõj6̺a²eÈpBW‹• b`„]§ ëÝyŽNˆ F»¶vªá¦×@ESð¤FðåC†mÁÎ@ü}(‹ÖÂ\l«[£Ùd$ÔNFQÄĦíY«1 Ù¼$ãRjAÉø•„4²ðÁf(S„Ý´]Ï&ã±=UÍÕñð¤Oxx…;'ð{ ¤:R;w±™ºR)!St6Ë z­,T–¡Î(Ôs(.;|•FTu Èûmkq',›3záûºŒÝ€þ^)âÑ”\xüW2@ÍTIÃfÐæ¡«%IvY‘(³2\¨ôé:ƒ*$—ÅEÔ‘„‡Ô"i¶G›ÊÆÁf(o\Tެ=ÝqÙöóé¾øG=œÁWH*Rx‡èˆ¬.*ìXÔèU ³€ö™­ÿhf<²†þ>2€(P²—UD !0;¶æ< ¨nµE³«‡“;ñ u{ýÓ JÃ’½?B´µe P4W¡‡à5 vJ„RgÊQq®3P‡¼Æcõ%Ào‹V+pTÁ¨m¸ tM–3ºãO2dhjTë­w=]IërÔK”Jʈ·Z2M4-YΠÉ:ˆZ†Êød¡ªväƒîl×0}±É¤(ÑXq%Åþ8B†2Ç¿79•Sʘi’êZ,k”(·’j…ýÈNGPUIRµT`‡‘Y‘§µŸ ¼ÞeÐz~• ÐÁ<ùã8Ã!€ME ²RÂuٯЖ$ל–†”aCC.²î/ ¡B,‹”à8‹Öà½æêª]rP Õ±Xö{÷¬<2Ðéq<Ž.‡ºSf”š‰Tt J®@ÑD­÷áà6š>¡i M~V¹3$0f9h€†ÚÒ0Øp†áŸšøuMèãøºBUȃµH‰¢Û•Ô¹¯†ÔGbÚ³R¤Ô4<üK> )8ÒKšeæÁ#j{Žvëéi=úºiUú8~ä¡$ÞD®¿4@jM8l9†RüŠº2µ"$P­D„:¥¬•4¥'ªNU#¡õ+dÓ¼öc«^ÀêŽ|8ƒÇñõ!©¨Ó† MfQéLl'8Á­S(@ã ø*ÒlL¢×èÔu½: ’âèáaïãëtR‚z¿‚ŠÔš>B#åØGQ‹Pv` C Gf|‰ãáMÇïC8vë$ê@*ŒJ¡QOÚŠl{©‰]¥$ƒKÐ9 n Î|Y[ûãøZ‚Ö´(L¶*F’ãÖ …XÑ’}B=­EƒSLjb«¼t–RX$†ÀöR‰gÁðoq†{÷ÕrZíD4(EVµ²¸zbs/³@m’“ßF!–ÂÚ»P%ð2ˆ¤Çãxxª¹˜…^¯;¨ßÃÊ,h= 4R¬ƒž9¨6öÇô Çmn‘ÁSOIDATÍ"×f Â0º’°ÑA3J:—ª‘¸IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aclienti_32x32.png0000644000175000001440000000012311353112764021603 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.634395 30 ctime=1364826684.634395497 qjackctl-0.3.10/src/images/aclienti_32x32.png0000644000175000001440000000310611353112764021073 0ustar00rncbcusers00000000000000‰PNG  IHDR D¤ŠÆ÷PLTE03'" ( - 27;?9 BEINP34.75)TM6:,X[<:.^<=;>=6?@.g#ACA e&m"j er&m#JL9v".a"w*6d })t/w+ ~"(r!KZK4m%‡*VUMTUSWXE‚/ZYR[\I1({6¬Ya“nƒƒ}†ƒu{Ÿ^ª'–7‰–)w¨‰ŠuJµAl™{{ž;CG³fƒ„J¶UE¶oPºØˆ½ÖE±á,·á Øœ­ÞR±á8°ßIÆÂ´ÁÅ´Ú°ÉÈ™¦Ú²ÊÉ­ÈɳÁå5ÌÍ£ÍÉ»½äXËÊÁ½ä_ÂèFÇê/¼äuÀåiÓÒ¢ÒÒ©ÌèKÐÏÇÓÏÁÑÔ±ÊëXºâÂר®ÕÔË×Ú¶Íê}ÚØ¼ÏìqÖîTÝÛ«Ìë„ÞÚ·ÎêÚÙÐÛñPâò9ÛÜÅÞßµØïuÚÜÙåóJÔîÍì»ââ¸âòjáäÀÏëÔÖð©åãÇÞòŠèäÂáäàâæÕëéÍêöæô®êëÔæ÷ ÜòäáóÕêìéèõÁøüsïðÙí÷¹îú«îòáçõèíöÝõñâðûÔ÷úÕ÷÷íùûø:^(âtRNS@æØfýIDATxÚc` 8£#07w€È›ÿùóç7üøñãë×O ð^¼xðÔ¬(ÿãÖ­[§N:rêèÎ;7€ÀÂeS—}| d†ñŸ?uùÝMÝåÙ‰A®VZJò@ #'!Áçyö˜XÁ³üoß¾=<±eþô¶Â‚(g°7ÔQRâ?{I¬àV÷û?oßýDR`i¦£)/à bÂï[Ýo¿}ûõáî¢é…YÎ@yCM%y¾ÓgE š>üúáóç5o.çÇθZÔ”ã:} b•ò'Þ=zôêË'%Y‡ç.5ÓQW’ã>vLâ†ìM›><º|ñòžs]±3Vu¬œª$##ÄÇq âÈo·ç/zuùâ™{Žß¼{nG{}k®žÛ¡C@F?Ž­YðòܹãÇ÷îýxûÚ´öÆŠ”˜t_ aÎc‡À&ü>åÓÙùòÀž=ë—¯úxûpGE}xxœ¯Ó!ˆ~qÍ+<³výúåKVÍé_ZŸÑZ“f ÄÃÁT ²âÛ)«¼„ýË—¯»?åp–WêÄðZ= !nVÆC;DÀ ŽhùûÏ[5íüÚÕçíí{Âã儸¹ØØ˜™`üc·¼³sÕö¹»œ×–éØšÚä*Šòqq°³2:퀘ðu·–³½ÛñíU (°ÑU–ãããbceb´;´lÂW ÎYýÀ82Ô1Õ–‘âãbgef´³;1áÓs9p;›ꨫ*ˆ‰òó°³11:ٱܛ`ôõùÆ@0ð òövwwwq±¶Ö·Ö×wØvp38Uš¿~ýéÓ÷ ðàÁƒ§O/=8}ãÆ“'OÜlIµOËfÏ^¸pöì¾Ù½}½-Õ-¥¥¥Ñ(‰_öÙ­S;7LmHŽôpPáÅ’;Œÿüþúõõõ­Ëš«£X0¤“’’vïÞ½qãÆe gÍêí ð@•O~ý.½t è¸C‡mžT*‚¢@ÀÁÁÁ„ÁÀÄDEZ—^ì^q·¿gËIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/start1.png0000644000175000001440000000012311353112764020370 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.596395 30 ctime=1364826684.596395497 qjackctl-0.3.10/src/images/start1.png0000644000175000001440000000037611353112764017666 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ P f ~IDAT8Ë­’Á € EŸ„ôî6®¡s0Þe&<F iJãOz Éûá·…ßt’,ØðÀswÊ}…üç«ß(Œ|³ÛaäE{…‘WŒ\×Èc®×Æœiå€Y¡ŽØ€£7¸X¿…¨»”/QÖšYHÀZ¦k‘ ¼€'PÏJSÙIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/refresh1.png0000644000175000001440000000012311353112764020671 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.846395 30 ctime=1364826684.846395501 qjackctl-0.3.10/src/images/refresh1.png0000644000175000001440000000112711353112764020162 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿaIDATxÚ­’]HS†ŸmžÍÖü(ZBö£7Ñ¢‚~è"¼N¨!A¢À¢èJº »©›¢ £›®Š¨IhÙ¢Ò¢ÔdË¥’†ÎÎqÆçqcÇ3·sº8¹μé½ûøxÞïµ°‘ºæ*¬û°ü™Æ"MÕƒ«ë‚ j‰Ähž1g%‡Ú¼ ÞjÎxiæGò o4Ñ×>Ê´ê 4€XÂ;ó'x¹KØÙÊØ(Ò  ÀŒz¶mÉO$иj±fÍÞH Qg+½a¬&_úH§`a Äi jösàBËZ@ÜÞAà HŸ ‚÷ÎŒ^Àï›G‚áÛíhJ›•žë@aî„Gr"¥È~½ó÷Í£žs[ÄfPXÖƒ°YÀUÝHB~b&ˆÑ@T=ñð¬ÙT Rx¿¢È¥#8¡|Ç©Ü ±ŒM›@úç[‹ô2¤UW $û±XÁU•{®k~*ïÁj+`iŽç7ꃨ1’8rùæºS »g!.Crþõß_ø5~•Ì ¸ë\œŽÐ6´;»ë–wѹ0ͤº‰û§€> ÛpS ×ÞS^wŒ²íPUŬ°Éb  v&Dëéc’™ÞÃÀ·µ°à9Ý»þ"Žb+Î ³…ŠdƉ|=Œä ùUŠ»þ,®ª“d4;ŠôøÜsà-°ÌÿÔo’JÑú•fIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/backward1.png0000644000175000001440000000012311353112764021011 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.719395 30 ctime=1364826684.719395499 qjackctl-0.3.10/src/images/backward1.png0000644000175000001440000000041011353112764020274 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ(%ÅJLʈIDAT8˵“Ë€ DZ²¬&Ô¤ÕàÝÔãü9îdd À¯E"Véé±kf˜ yzìšoèñ‹¹è&fyI1¡'À óxi>ó¬æ%˜º?BÍ HJ£w3°!rQÏøb,’jÞsHÄYeïÄëLTMõÓ$O7(Õ¼Xú%ÒoÝNÿwÜIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/aportlni.png0000644000175000001440000000012111353112764021000 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.813395 28 ctime=1364826684.8133955 qjackctl-0.3.10/src/images/aportlni.png0000644000175000001440000000025511353112764020274 0ustar00rncbcusers00000000000000‰PNG  IHDRíÝâRPLTEpH€€€€€ÀÀÀÿÿÿÿÿ6tRNS@æØfFIDATxÚcHb€e(ƒ)) ÊTÊ&:ºA„E Bj‚j!¦Ä„Ä€ÄÔd¨jaP3•R`b0{B0G0«9I o09˜IEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/error1.png0000644000175000001440000000012411367505622020371 xustar000000000000000027 mtime=1272875922.009809 27 atime=1364826684.678395 30 ctime=1364826684.678395498 qjackctl-0.3.10/src/images/error1.png0000644000175000001440000000052511367505622017662 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYs  šœtIMEÚ !Ù‘/©ÕIDAT8Ëí‘¡nÂp„¿IHE !Uô†;³Ö„Gàx,¸ef Á4CŒÌÔí ¦Š„ýÝ ¾çôÝåË<ô¸x'x6°_8ßµ“!ìvΩÝ@[P6µ|˜ý4›R–™†C)I¤4µ/P/•1|ÊóÌV+©,%I6Ÿë 6‚w¯ª mÌi*¼»}¿àZЭ$ˆà­ð}©(LË¥i½6å¹ALëlØŸÀõ†2ÎA N@§îÑ>Æp~…Ó,¸ãÿÌZ5BÊIEND®B`‚qjackctl-0.3.10/src/images/PaxHeaders.16050/messagesstatus1.png0000644000175000001440000000012411463611174022310 xustar000000000000000027 mtime=1288639100.640597 27 atime=1364826684.719395 30 ctime=1364826684.719395499 qjackctl-0.3.10/src/images/messagesstatus1.png0000644000175000001440000000135011463611174021576 0ustar00rncbcusers00000000000000‰PNG  IHDRóÿasRGB®Îé¢IDAT8ËRKHTa=÷¿gôÞitD 󕨃`XIøêa%•.ŠDQТÉUËŒZ´‘ •(Õ¢¸TÑÀB°‚T mRñU:£9êÌÜ™Ñ{çι 5è%ÙY~ßw¾×9À*›&:²N=yŒ]‚@í *èÊz#F®`wÓ€sŒPÆ=´Úª‡“‰É’C9zû͉áHÔBK+Ÿí•·8Ï( _Éõ˜ð éðŒvžLH1í8ÕdÍa“Ï bÖ'Nñë‚®ú`è^D`¡»oièv+á†3Il$äþÂgò/tÝÄ¢Bjèvn+† û5¤´˜¬ù‰˃Ý'î9{Õ/‚!œJ€a6WbãLoø„$˜“ÊóÏÕdwËúò[(k#Oÿj¤mödœN±ååŒÝñP¼*TŸS>ßò ¹§¡jàìÎѽEÒæ0p3}ߊUߦºœê‹ªFŒÅ¾#¹ªùH©C_g6'~é· êÞÃ? øgõMÐ7¬ËCˆé¡‰¹WÛaU”ê$£ü®UWX2?xCÄô?[šR¨~ç¢&OTÿ–Ë­éH+}DÁ°vü)["¼tæ_ë¿ìÆ"kiœ‡ÈIEND®B`‚qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbayFile.cpp0000644000175000001440000000012411526763337021766 xustar000000000000000027 mtime=1297868511.144179 27 atime=1364826685.219395 30 ctime=1364826685.219395507 qjackctl-0.3.10/src/qjackctlPatchbayFile.cpp0000644000175000001440000002233111526763337021256 0ustar00rncbcusers00000000000000// qjackctlPatchbayFile.cpp // /**************************************************************************** Copyright (C) 2003-2011, 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 "qjackctlPatchbayFile.h" #include #include #include //---------------------------------------------------------------------- // Specific patchbay socket list save (write) subroutine. static void load_socketlist ( QList& socketlist, QDomElement& eSockets ) { for (QDomNode nSocket = eSockets.firstChild(); !nSocket.isNull(); nSocket = nSocket.nextSibling()) { // Convert slot node to element... QDomElement eSocket = nSocket.toElement(); if (eSocket.isNull()) continue; if (eSocket.tagName() == "socket") { QString sSocketName = eSocket.attribute("name"); QString sClientName = eSocket.attribute("client"); QString sSocketType = eSocket.attribute("type"); QString sExclusive = eSocket.attribute("exclusive"); QString sSocketForward = eSocket.attribute("forward"); int iSocketType = qjackctlPatchbaySocket::typeFromText(sSocketType); bool bExclusive = (sExclusive == "on" || sExclusive == "yes" || sExclusive == "1"); qjackctlPatchbaySocket *pSocket = new qjackctlPatchbaySocket(sSocketName, sClientName, iSocketType); if (pSocket) { pSocket->setExclusive(bExclusive); pSocket->setForward(sSocketForward); // Now's time to handle pluglist... for (QDomNode nPlug = eSocket.firstChild(); !nPlug.isNull(); nPlug = nPlug.nextSibling()) { // Convert plug node to element... QDomElement ePlug = nPlug.toElement(); if (ePlug.isNull()) continue; if (ePlug.tagName() == "plug") pSocket->addPlug(ePlug.text()); } socketlist.append(pSocket); } } } } //---------------------------------------------------------------------- // Specific patchbay socket list save (write) subroutine. static void save_socketlist ( QList& socketlist, QDomElement& eSockets, QDomDocument& doc ) { QListIterator sockit(socketlist); while (sockit.hasNext()) { qjackctlPatchbaySocket *pSocket = sockit.next(); QDomElement eSocket = doc.createElement("socket"); eSocket.setAttribute("name", pSocket->name()); eSocket.setAttribute("client", pSocket->clientName()); eSocket.setAttribute("type", qjackctlPatchbaySocket::textFromType(pSocket->type())); eSocket.setAttribute("exclusive", (pSocket->isExclusive() ? "on" : "off")); if (!pSocket->forward().isEmpty()) eSocket.setAttribute("forward", pSocket->forward()); QDomElement ePlug; QStringListIterator iter(pSocket->pluglist()); while (iter.hasNext()) { const QString& sPlug = iter.next(); QDomElement ePlug = doc.createElement("plug"); QDomText text = doc.createTextNode(sPlug); ePlug.appendChild(text); eSocket.appendChild(ePlug); } eSockets.appendChild(eSocket); } } //---------------------------------------------------------------------- // class qjackctlPatchbayFile -- Patchbay file helper implementation. // // Specific patchbay load (read) method. bool qjackctlPatchbayFile::load ( qjackctlPatchbayRack *pPatchbay, const QString& sFilename ) { // Open file... QFile file(sFilename); if (!file.open(QIODevice::ReadOnly)) return false; // Parse it a-la-DOM :-) QDomDocument doc("patchbay"); if (!doc.setContent(&file)) { file.close(); return false; } file.close(); // Now e're better reset any old patchbay settings. pPatchbay->clear(); // Get root element. QDomElement eDoc = doc.documentElement(); // Now parse for slots, sockets and cables... for (QDomNode nRoot = eDoc.firstChild(); !nRoot.isNull(); nRoot = nRoot.nextSibling()) { // Convert node to element, if any. QDomElement eRoot = nRoot.toElement(); if (eRoot.isNull()) continue; // Check for output-socket spec lists... if (eRoot.tagName() == "output-sockets") load_socketlist(pPatchbay->osocketlist(), eRoot); else // Check for input-socket spec lists... if (eRoot.tagName() == "input-sockets") load_socketlist(pPatchbay->isocketlist(), eRoot); else // Check for slots spec list... if (eRoot.tagName() == "slots") { for (QDomNode nSlot = eRoot.firstChild(); !nSlot.isNull(); nSlot = nSlot.nextSibling()) { // Convert slot node to element... QDomElement eSlot = nSlot.toElement(); if (eSlot.isNull()) continue; if (eSlot.tagName() == "slot") { QString sSlotName = eSlot.attribute("name"); QString sSlotMode = eSlot.attribute("mode"); int iSlotMode = QJACKCTL_SLOTMODE_OPEN; if (sSlotMode == "half") iSlotMode = QJACKCTL_SLOTMODE_HALF; else if (sSlotMode == "full") iSlotMode = QJACKCTL_SLOTMODE_FULL; qjackctlPatchbaySlot *pSlot = new qjackctlPatchbaySlot(sSlotName, iSlotMode); pSlot->setOutputSocket( pPatchbay->findSocket(pPatchbay->osocketlist(), eSlot.attribute("output"))); pSlot->setInputSocket( pPatchbay->findSocket(pPatchbay->isocketlist(), eSlot.attribute("input"))); pPatchbay->addSlot(pSlot); } } } else // Check for cable spec list... if (eRoot.tagName() == "cables") { for (QDomNode nCable = eRoot.firstChild(); !nCable.isNull(); nCable = nCable.nextSibling()) { // Convert cable node to element... QDomElement eCable = nCable.toElement(); if (eCable.isNull()) continue; if (eCable.tagName() == "cable") { int iSocketType = qjackctlPatchbaySocket::typeFromText( eCable.attribute("type")); qjackctlPatchbaySocket *pOutputSocket = pPatchbay->findSocket(pPatchbay->osocketlist(), eCable.attribute("output"), iSocketType); qjackctlPatchbaySocket *pIntputSocket = pPatchbay->findSocket(pPatchbay->isocketlist(), eCable.attribute("input"), iSocketType); if (pOutputSocket && pIntputSocket) { pPatchbay->addCable( new qjackctlPatchbayCable( pOutputSocket, pIntputSocket)); } } } } } return true; } // Specific patchbay save (write) method. bool qjackctlPatchbayFile::save ( qjackctlPatchbayRack *pPatchbay, const QString& sFilename ) { QFileInfo fi(sFilename); QDomDocument doc("patchbay"); QDomElement eRoot = doc.createElement("patchbay"); eRoot.setAttribute("name", fi.baseName()); eRoot.setAttribute("version", QJACKCTL_VERSION); doc.appendChild(eRoot); // Save output-sockets spec... QDomElement eOutputSockets = doc.createElement("output-sockets"); save_socketlist(pPatchbay->osocketlist(), eOutputSockets, doc); eRoot.appendChild(eOutputSockets); // Save input-sockets spec... QDomElement eInputSockets = doc.createElement("input-sockets"); save_socketlist(pPatchbay->isocketlist(), eInputSockets, doc); eRoot.appendChild(eInputSockets); // Save slots spec... QDomElement eSlots = doc.createElement("slots"); QListIterator slotit(pPatchbay->slotlist()); while (slotit.hasNext()) { qjackctlPatchbaySlot *pSlot = slotit.next(); QDomElement eSlot = doc.createElement("slot"); eSlot.setAttribute("name", pSlot->name()); QString sSlotMode = "open"; switch (pSlot->mode()) { case QJACKCTL_SLOTMODE_HALF: sSlotMode = "half"; break; case QJACKCTL_SLOTMODE_FULL: sSlotMode = "full"; break; } eSlot.setAttribute("mode", sSlotMode); if (pSlot->outputSocket()) eSlot.setAttribute("output", pSlot->outputSocket()->name()); if (pSlot->inputSocket()) eSlot.setAttribute("input", pSlot->inputSocket()->name()); // Add this slot... eSlots.appendChild(eSlot); } eRoot.appendChild(eSlots); // Save cables spec... QDomElement eCables = doc.createElement("cables"); QListIterator cablit(pPatchbay->cablelist()); while (cablit.hasNext()) { qjackctlPatchbayCable *pCable = cablit.next(); if (pCable->outputSocket() && pCable->inputSocket()) { QDomElement eCable = doc.createElement("cable"); eCable.setAttribute("type", qjackctlPatchbaySocket::textFromType( pCable->outputSocket()->type())); eCable.setAttribute("output", pCable->outputSocket()->name()); eCable.setAttribute("input", pCable->inputSocket()->name()); eCables.appendChild(eCable); } } eRoot.appendChild(eCables); // Finally, we're ready to save to external file. QFile file(sFilename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return false; QTextStream ts(&file); ts << doc.toString() << endl; file.close(); return true; } // qjackctlPatchbayFile.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSetupForm.cpp0000644000175000001440000000012412026270456021346 xustar000000000000000027 mtime=1348038958.135434 27 atime=1364826685.184395 30 ctime=1364826685.185395506 qjackctl-0.3.10/src/qjackctlSetupForm.cpp0000644000175000001440000017615212026270456020651 0ustar00rncbcusers00000000000000// qjackctlSetupForm.cpp // /**************************************************************************** Copyright (C) 2003-2012, 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 "qjackctlSetupForm.h" #include "qjackctlSetup.h" #include #include #include #include #include #include #include #include #include #ifdef CONFIG_COREAUDIO #include #include #include #include #include #endif #ifdef CONFIG_PORTAUDIO #include #include #include #endif #ifdef CONFIG_ALSA_SEQ #include #endif //---------------------------------------------------------------------------- // qjackctlSetupForm -- UI wrapper form. // Constructor. qjackctlSetupForm::qjackctlSetupForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QDialog(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); // No settings descriptor initially (the caller will set it). m_pSetup = NULL; // Setup time-display radio-button group. m_pTimeDisplayButtonGroup = new QButtonGroup(this); m_pTimeDisplayButtonGroup->addButton(m_ui.TransportTimeRadioButton, 0); m_pTimeDisplayButtonGroup->addButton(m_ui.TransportBBTRadioButton, 1); m_pTimeDisplayButtonGroup->addButton(m_ui.ElapsedResetRadioButton, 2); m_pTimeDisplayButtonGroup->addButton(m_ui.ElapsedXrunRadioButton, 3); m_pTimeDisplayButtonGroup->setExclusive(true); // Initialize dirty control state. m_iDirtySetup = 0; m_iDirtySettings = 0; m_iDirtyOptions = 0; // Set dialog validators... m_ui.PresetComboBox->setValidator( new QRegExpValidator(QRegExp("[\\w-]+"), m_ui.PresetComboBox)); m_ui.FramesComboBox->setValidator( new QIntValidator(m_ui.FramesComboBox)); m_ui.SampleRateComboBox->setValidator( new QIntValidator(m_ui.SampleRateComboBox)); m_ui.WaitComboBox->setValidator( new QIntValidator(m_ui.WaitComboBox)); m_ui.WordLengthComboBox->setValidator( new QIntValidator(m_ui.WordLengthComboBox)); m_ui.TimeoutComboBox->setValidator( new QIntValidator(m_ui.TimeoutComboBox)); #ifdef CONFIG_AUTO_REFRESH m_ui.TimeRefreshComboBox->setValidator( new QIntValidator(m_ui.TimeRefreshComboBox)); #endif m_ui.PortMaxComboBox->setValidator( new QIntValidator(m_ui.PortMaxComboBox)); m_ui.MessagesLimitLinesComboBox->setValidator( new QIntValidator(m_ui.MessagesLimitLinesComboBox)); #if QT_VERSION >= 0x040200 m_ui.PresetComboBox->setCompleter(NULL); #endif // UI connections... QObject::connect(m_ui.PresetComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(changeCurrentPreset(const QString&))); QObject::connect(m_ui.PresetSavePushButton, SIGNAL(clicked()), SLOT(saveCurrentPreset())); QObject::connect(m_ui.PresetDeletePushButton, SIGNAL(clicked()), SLOT(deleteCurrentPreset())); QObject::connect(m_ui.DriverComboBox, SIGNAL(highlighted(const QString&)), SLOT(changeDriver(const QString&))); QObject::connect(m_ui.InterfaceToolButton, SIGNAL(clicked()), SLOT(selectInterface())); QObject::connect(m_ui.InDeviceToolButton, SIGNAL(clicked()), SLOT(selectInDevice())); QObject::connect(m_ui.OutDeviceToolButton, SIGNAL(clicked()), SLOT(selectOutDevice())); QObject::connect(m_ui.AudioComboBox, SIGNAL(highlighted(int)), SLOT(changeAudio(int))); QObject::connect(m_ui.ServerPrefixComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.ServerNameComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.DriverComboBox, SIGNAL(activated(int)), SLOT(settingsChanged())); QObject::connect(m_ui.RealtimeCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.NoMemLockCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.SoftModeCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.MonitorCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); 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())); QObject::connect(m_ui.IgnoreHWCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.UnlockMemCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.VerboseCheckBox, SIGNAL(stateChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.PrioritySpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.FramesComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.SampleRateComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.PeriodsSpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.WordLengthComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.WaitComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.ChanSpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.InterfaceComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.AudioComboBox, SIGNAL(activated(int)), SLOT(settingsChanged())); QObject::connect(m_ui.DitherComboBox, SIGNAL(activated(int)), SLOT(settingsChanged())); QObject::connect(m_ui.TimeoutComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.InDeviceComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.OutDeviceComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.InChannelsSpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.OutChannelsSpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.InLatencySpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.OutLatencySpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.MidiDriverComboBox, SIGNAL(activated(int)), SLOT(settingsChanged())); QObject::connect(m_ui.StartDelaySpinBox, SIGNAL(valueChanged(int)), SLOT(settingsChanged())); QObject::connect(m_ui.PortMaxComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.ServerSuffixComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(settingsChanged())); QObject::connect(m_ui.StartupScriptCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.StartupScriptShellComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.PostStartupScriptCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.PostStartupScriptShellComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.ShutdownScriptCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.ShutdownScriptShellComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.PostShutdownScriptCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.PostShutdownScriptShellComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.StartupScriptBrowseToolButton, SIGNAL(clicked()), SLOT(browseStartupScript())); QObject::connect(m_ui.PostStartupScriptBrowseToolButton, SIGNAL(clicked()), SLOT(browsePostStartupScript())); QObject::connect(m_ui.ShutdownScriptBrowseToolButton, SIGNAL(clicked()), SLOT(browseShutdownScript())); QObject::connect(m_ui.PostShutdownScriptBrowseToolButton, SIGNAL(clicked()), SLOT(browsePostShutdownScript())); QObject::connect(m_ui.StartupScriptSymbolToolButton, SIGNAL(clicked()), SLOT(symbolStartupScript())); QObject::connect(m_ui.PostStartupScriptSymbolToolButton, SIGNAL(clicked()), SLOT(symbolPostStartupScript())); QObject::connect(m_ui.ShutdownScriptSymbolToolButton, SIGNAL(clicked()), SLOT(symbolShutdownScript())); QObject::connect(m_ui.PostShutdownScriptSymbolToolButton, SIGNAL(clicked()), SLOT(symbolPostShutdownScript())); QObject::connect(m_ui.StdoutCaptureCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.XrunRegexComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.ActivePatchbayCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.ActivePatchbayPathComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.ActivePatchbayPathToolButton, SIGNAL(clicked()), SLOT(browseActivePatchbayPath())); #ifdef CONFIG_AUTO_REFRESH QObject::connect(m_ui.AutoRefreshCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.TimeRefreshComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); #endif QObject::connect(m_ui.MessagesLogCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.MessagesLogPathComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.MessagesLogPathToolButton, SIGNAL(clicked()), SLOT(browseMessagesLogPath())); QObject::connect(m_ui.TransportTimeRadioButton, SIGNAL(toggled(bool)), SLOT(optionsChanged())); QObject::connect(m_ui.TransportBBTRadioButton, SIGNAL(toggled(bool)), SLOT(optionsChanged())); QObject::connect(m_ui.ElapsedResetRadioButton, SIGNAL(toggled(bool)), SLOT(optionsChanged())); 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())); QObject::connect(m_ui.DisplayFont1PushButton, SIGNAL(clicked()), SLOT(chooseDisplayFont1())); QObject::connect(m_ui.DisplayFont2PushButton, SIGNAL(clicked()), SLOT(chooseDisplayFont2())); QObject::connect(m_ui.MessagesFontPushButton, SIGNAL(clicked()), SLOT(chooseMessagesFont())); QObject::connect(m_ui.ConnectionsFontPushButton, SIGNAL(clicked()), SLOT(chooseConnectionsFont())); QObject::connect(m_ui.MessagesLimitCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.MessagesLimitLinesComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); 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())); QObject::connect(m_ui.AliasesEditingCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.JackClientPortAliasComboBox, SIGNAL(activated(int)), SLOT(optionsChanged())); QObject::connect(m_ui.StartJackCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.StopJackCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.QueryCloseCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.KeepOnTopCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.SystemTrayCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.StartMinimizedCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.DelayedSetupCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.SingletonCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.SingletonCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.ServerConfigNameComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.ServerConfigTempCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.QueryShutdownCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.AlsaSeqEnabledCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.DBusEnabledCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.LeftButtonsCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.RightButtonsCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.TransportButtonsCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.TextLabelsCheckBox, SIGNAL(stateChanged(int)), SLOT(optionsChanged())); QObject::connect(m_ui.BaseFontSizeComboBox, SIGNAL(editTextChanged(const QString&)), SLOT(optionsChanged())); QObject::connect(m_ui.DialogButtonBox, SIGNAL(accepted()), SLOT(accept())); QObject::connect(m_ui.DialogButtonBox, SIGNAL(rejected()), SLOT(reject())); // Try to restore old window positioning. adjustSize(); } // Destructor. qjackctlSetupForm::~qjackctlSetupForm (void) { delete m_pTimeDisplayButtonGroup; } // A combo-box text item setter helper. void qjackctlSetupForm::setComboBoxCurrentText ( QComboBox *pComboBox, const QString& sText ) const { if (pComboBox->isEditable()) { pComboBox->setEditText(sText); } else { int iIndex = pComboBox->findText(sText); if (iIndex < 0) { iIndex = 0; if (!sText.isEmpty()) pComboBox->insertItem(0, sText); } pComboBox->setCurrentIndex(iIndex); } } // Populate (setup) dialog controls from settings descriptors. void qjackctlSetupForm::setup ( qjackctlSetup *pSetup ) { // Set reference descriptor. m_pSetup = pSetup; // Avoid dirty this all up. m_iDirtySetup++; // Load combo box history... m_pSetup->loadComboBoxHistory(m_ui.ServerPrefixComboBox); m_pSetup->loadComboBoxHistory(m_ui.ServerNameComboBox); m_pSetup->loadComboBoxHistory(m_ui.InterfaceComboBox); m_pSetup->loadComboBoxHistory(m_ui.InDeviceComboBox); m_pSetup->loadComboBoxHistory(m_ui.OutDeviceComboBox); m_pSetup->loadComboBoxHistory(m_ui.ServerSuffixComboBox); m_pSetup->loadComboBoxHistory(m_ui.StartupScriptShellComboBox); m_pSetup->loadComboBoxHistory(m_ui.PostStartupScriptShellComboBox); m_pSetup->loadComboBoxHistory(m_ui.ShutdownScriptShellComboBox); m_pSetup->loadComboBoxHistory(m_ui.PostShutdownScriptShellComboBox); m_pSetup->loadComboBoxHistory(m_ui.XrunRegexComboBox); m_pSetup->loadComboBoxHistory(m_ui.ActivePatchbayPathComboBox); m_pSetup->loadComboBoxHistory(m_ui.MessagesLogPathComboBox); m_pSetup->loadComboBoxHistory(m_ui.ServerConfigNameComboBox); // Load Options... m_ui.StartupScriptCheckBox->setChecked(m_pSetup->bStartupScript); setComboBoxCurrentText(m_ui.StartupScriptShellComboBox, m_pSetup->sStartupScriptShell); m_ui.PostStartupScriptCheckBox->setChecked(m_pSetup->bPostStartupScript); setComboBoxCurrentText(m_ui.PostStartupScriptShellComboBox, m_pSetup->sPostStartupScriptShell); m_ui.ShutdownScriptCheckBox->setChecked(m_pSetup->bShutdownScript); setComboBoxCurrentText(m_ui.ShutdownScriptShellComboBox, m_pSetup->sShutdownScriptShell); m_ui.PostShutdownScriptCheckBox->setChecked(m_pSetup->bPostShutdownScript); setComboBoxCurrentText(m_ui.PostShutdownScriptShellComboBox, m_pSetup->sPostShutdownScriptShell); m_ui.StdoutCaptureCheckBox->setChecked(m_pSetup->bStdoutCapture); setComboBoxCurrentText(m_ui.XrunRegexComboBox, m_pSetup->sXrunRegex); m_ui.ActivePatchbayCheckBox->setChecked(m_pSetup->bActivePatchbay); setComboBoxCurrentText(m_ui.ActivePatchbayPathComboBox, m_pSetup->sActivePatchbayPath); #ifdef CONFIG_AUTO_REFRESH m_ui.AutoRefreshCheckBox->setChecked(m_pSetup->bAutoRefresh); setComboBoxCurrentText(m_ui.TimeRefreshComboBox, QString::number(m_pSetup->iTimeRefresh)); #else m_ui.AutoRefreshCheckBox->setVisible(false); m_ui.TimeRefreshComboBox->setVisible(false); #endif 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 = static_cast ( m_pTimeDisplayButtonGroup->button(m_pSetup->iTimeDisplay)); if (pRadioButton) pRadioButton->setChecked(true); m_ui.TimeFormatComboBox->setCurrentIndex(m_pSetup->iTimeFormat); // Load font chooser samples... const QString sSansSerif = "Sans Serif"; QFont font; QPalette pal; if (m_pSetup->sDisplayFont1.isEmpty() || !font.fromString(m_pSetup->sDisplayFont1)) font = QFont(sSansSerif, 12, QFont::Bold); m_ui.DisplayFont1TextLabel->setFont(font); m_ui.DisplayFont1TextLabel->setText( font.family() + ' ' + QString::number(font.pointSize())); if (m_pSetup->sDisplayFont2.isEmpty() || !font.fromString(m_pSetup->sDisplayFont2)) font = QFont(sSansSerif, 6, QFont::Bold); m_ui.DisplayFont2TextLabel->setFont(font); m_ui.DisplayFont2TextLabel->setText( font.family() + ' ' + QString::number(font.pointSize())); if (m_pSetup->sMessagesFont.isEmpty() || !font.fromString(m_pSetup->sMessagesFont)) font = QFont("Monospace", 8); pal = m_ui.MessagesFontTextLabel->palette(); pal.setColor(QPalette::Background, pal.base().color()); m_ui.MessagesFontTextLabel->setPalette(pal); m_ui.MessagesFontTextLabel->setFont(font); m_ui.MessagesFontTextLabel->setText( font.family() + ' ' + QString::number(font.pointSize())); if (m_pSetup->sConnectionsFont.isEmpty() || !font.fromString(m_pSetup->sConnectionsFont)) font = QFont(sSansSerif, 10); pal = m_ui.ConnectionsFontTextLabel->palette(); pal.setColor(QPalette::Background, pal.base().color()); m_ui.ConnectionsFontTextLabel->setPalette(pal); m_ui.ConnectionsFontTextLabel->setFont(font); m_ui.ConnectionsFontTextLabel->setText( 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); // Connections view icon size. m_ui.ConnectionsIconSizeComboBox->setCurrentIndex( m_pSetup->iConnectionsIconSize); // and this JACK speciality... m_ui.JackClientPortAliasComboBox->setCurrentIndex( m_pSetup->iJackClientPortAlias); // Messages limit option. m_ui.MessagesLimitCheckBox->setChecked(m_pSetup->bMessagesLimit); setComboBoxCurrentText(m_ui.MessagesLimitLinesComboBox, QString::number(m_pSetup->iMessagesLimitLines)); // Other misc options... m_ui.StartJackCheckBox->setChecked(m_pSetup->bStartJack); m_ui.StopJackCheckBox->setChecked(m_pSetup->bStopJack); m_ui.QueryCloseCheckBox->setChecked(m_pSetup->bQueryClose); m_ui.KeepOnTopCheckBox->setChecked(m_pSetup->bKeepOnTop); m_ui.SystemTrayCheckBox->setChecked(m_pSetup->bSystemTray); m_ui.StartMinimizedCheckBox->setChecked(m_pSetup->bStartMinimized); m_ui.DelayedSetupCheckBox->setChecked(m_pSetup->bDelayedSetup); m_ui.SingletonCheckBox->setChecked(m_pSetup->bSingleton); m_ui.ServerConfigCheckBox->setChecked(m_pSetup->bServerConfig); setComboBoxCurrentText(m_ui.ServerConfigNameComboBox, m_pSetup->sServerConfigName); m_ui.ServerConfigTempCheckBox->setChecked(m_pSetup->bServerConfigTemp); m_ui.QueryShutdownCheckBox->setChecked(m_pSetup->bQueryShutdown); m_ui.AlsaSeqEnabledCheckBox->setChecked(m_pSetup->bAlsaSeqEnabled); m_ui.DBusEnabledCheckBox->setChecked(m_pSetup->bDBusEnabled); m_ui.AliasesEnabledCheckBox->setChecked(m_pSetup->bAliasesEnabled); m_ui.AliasesEditingCheckBox->setChecked(m_pSetup->bAliasesEditing); m_ui.LeftButtonsCheckBox->setChecked(!m_pSetup->bLeftButtons); m_ui.RightButtonsCheckBox->setChecked(!m_pSetup->bRightButtons); m_ui.TransportButtonsCheckBox->setChecked(!m_pSetup->bTransportButtons); m_ui.TextLabelsCheckBox->setChecked(!m_pSetup->bTextLabels); 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.StartMinimizedCheckBox->setChecked(false); m_ui.StartMinimizedCheckBox->setEnabled(false); #endif #ifndef CONFIG_JACK_MIDI m_ui.MidiDriverComboBox->setCurrentIndex(0); m_ui.MidiDriverTextLabel->setEnabled(false); m_ui.MidiDriverComboBox->setEnabled(false); #endif #ifndef CONFIG_JACK_PORT_ALIASES m_ui.JackClientPortAliasComboBox->setCurrentIndex(0); m_ui.JackClientPortAliasTextLabel->setEnabled(false); m_ui.JackClientPortAliasComboBox->setEnabled(false); #endif #ifndef CONFIG_ALSA_SEQ m_ui.AlsaSeqEnabledCheckBox->setEnabled(false); #endif #ifndef CONFIG_DBUS m_ui.DBusEnabledCheckBox->setEnabled(false); #endif // Load preset list... resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, m_pSetup->sDefPreset); // Finally, load default settings... changePreset(m_ui.PresetComboBox->currentText()); // We're clean now. m_iDirtySetup--; stabilizeForm(); } void qjackctlSetupForm::changePreset ( const QString& sPreset ) { 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() ? 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)); #ifdef CONFIG_JACK_MIDI 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; } bool qjackctlSetupForm::savePreset ( const QString& sPreset ) { 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(); preset.bSoftMode = m_ui.SoftModeCheckBox->isChecked(); preset.bMonitor = m_ui.MonitorCheckBox->isChecked(); 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(); preset.iFrames = m_ui.FramesComboBox->currentText().toInt(); preset.iSampleRate = m_ui.SampleRateComboBox->currentText().toInt(); preset.iPeriods = m_ui.PeriodsSpinBox->value(); preset.iWordLength = m_ui.WordLengthComboBox->currentText().toInt(); preset.iWait = m_ui.WaitComboBox->currentText().toInt(); preset.iChan = m_ui.ChanSpinBox->value(); preset.sDriver = m_ui.DriverComboBox->currentText(); preset.sInterface = m_ui.InterfaceComboBox->currentText(); preset.iAudio = m_ui.AudioComboBox->currentIndex(); preset.iDither = m_ui.DitherComboBox->currentIndex(); preset.iTimeout = m_ui.TimeoutComboBox->currentText().toInt(); preset.sInDevice = m_ui.InDeviceComboBox->currentText(); preset.sOutDevice = m_ui.OutDeviceComboBox->currentText(); preset.iInChannels = m_ui.InChannelsSpinBox->value(); preset.iOutChannels = m_ui.OutChannelsSpinBox->value(); preset.iInLatency = m_ui.InLatencySpinBox->value(); preset.iOutLatency = m_ui.OutLatencySpinBox->value(); preset.iStartDelay = m_ui.StartDelaySpinBox->value(); preset.bVerbose = m_ui.VerboseCheckBox->isChecked(); preset.iPortMax = m_ui.PortMaxComboBox->currentText().toInt(); #ifdef CONFIG_JACK_MIDI preset.sMidiDriver = m_ui.MidiDriverComboBox->currentText(); #endif preset.sServerSuffix = m_ui.ServerSuffixComboBox->currentText(); if (preset.sServerName == m_pSetup->sDefPresetName) preset.sServerName.clear(); if (preset.sInterface == m_pSetup->sDefPresetName) preset.sInterface.clear(); if (preset.sInDevice == m_pSetup->sDefPresetName) preset.sInDevice.clear(); if (preset.sOutDevice == m_pSetup->sDefPresetName) preset.sOutDevice.clear(); m_pSetup->savePreset(preset, sPreset); return true; } bool qjackctlSetupForm::deletePreset ( const QString& sPreset ) { if (sPreset.isEmpty()) return false; // Just remove the preset item... m_pSetup->deletePreset(sPreset); return true; } void qjackctlSetupForm::resetPresets (void) { m_ui.PresetComboBox->clear(); m_ui.PresetComboBox->addItems(m_pSetup->presets); m_ui.PresetComboBox->addItem(m_pSetup->sDefPresetName); } void qjackctlSetupForm::changeCurrentPreset ( const QString& sPreset ) { if (m_iDirtySetup > 0) return; // Check if there's any pending changes... if (m_iDirtySettings > 0 && !m_sPreset.isEmpty()) { switch (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some settings 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: savePreset(m_sPreset); m_iDirtySetup++; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, sPreset); m_iDirtySetup--; case QMessageBox::Discard: m_iDirtySettings = 0; break; default: // Cancel... m_iDirtySetup++; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, m_sPreset); m_iDirtySetup--; return; } } changePreset(sPreset); optionsChanged(); } void qjackctlSetupForm::saveCurrentPreset (void) { const QString sPreset = m_ui.PresetComboBox->currentText(); if (savePreset(sPreset)) { // Reset preset combobox list. m_iDirtySetup++; resetPresets(); setComboBoxCurrentText(m_ui.PresetComboBox, sPreset); m_iDirtySetup--; // Reset dirty flag. m_iDirtySettings = 0; stabilizeForm(); } } void qjackctlSetupForm::deleteCurrentPreset (void) { const QString sPreset = m_ui.PresetComboBox->currentText(); // Try to prompt user if he/she really wants this... if (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Delete preset:\n\n" "\"%1\"\n\nAre you sure?") .arg(sPreset), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) return; if (deletePreset(sPreset)) { // Reset preset combobox list, // and load a new available preset.. m_iDirtySetup++; int iItem = m_ui.PresetComboBox->currentIndex(); resetPresets(); m_ui.PresetComboBox->setCurrentIndex(iItem); changePreset(m_ui.PresetComboBox->currentText()); m_iDirtySetup--; // Take care that maybe it was the default one... if (m_pSetup->sDefPreset == sPreset) m_pSetup->sDefPreset = m_sPreset; // Make this stable now. optionsChanged(); } } 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(); if (r > 0) lat = (float) (1000.0 * p * n) / (float) r; if (lat > 0.0) m_ui.LatencyTextValue->setText(QString::number(lat, 'g', 3) + " " + tr("msec")); else m_ui.LatencyTextValue->setText(tr("n/a")); } 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"); bool bInEnabled = false; bool bOutEnabled = false; bool bEnabled; switch (iAudio) { case QJACKCTL_DUPLEX: bInEnabled = (bSun || bOss || bAlsa || bCoreaudio || bPortaudio || bNet); bOutEnabled = (bSun || bOss || bAlsa || bCoreaudio || bPortaudio || bNet); break; case QJACKCTL_CAPTURE: bInEnabled = (bSun || bOss || bCoreaudio || bPortaudio || bNet); break; case QJACKCTL_PLAYBACK: bOutEnabled = (bSun || bOss || bCoreaudio || bPortaudio || bNet); break; } bEnabled = (bInEnabled && (bAlsa || bSun || bOss || bPortaudio)); m_ui.InDeviceTextLabel->setEnabled(bEnabled); m_ui.InDeviceComboBox->setEnabled(bEnabled); m_ui.InDeviceToolButton->setEnabled(bEnabled); if (!bEnabled) setComboBoxCurrentText(m_ui.InDeviceComboBox, m_pSetup->sDefPresetName); bEnabled = (bOutEnabled && (bAlsa || bSun || bOss || bPortaudio)); m_ui.OutDeviceTextLabel->setEnabled(bEnabled); m_ui.OutDeviceComboBox->setEnabled(bEnabled); m_ui.OutDeviceToolButton->setEnabled(bEnabled); if (!bEnabled) setComboBoxCurrentText(m_ui.OutDeviceComboBox, m_pSetup->sDefPresetName); m_ui.InOutChannelsTextLabel->setEnabled(bInEnabled || (bAlsa || bFirewire)); m_ui.InChannelsSpinBox->setEnabled(bInEnabled || ((bAlsa || bFirewire) && iAudio != QJACKCTL_PLAYBACK)); m_ui.OutChannelsSpinBox->setEnabled(bOutEnabled || ((bAlsa || bFirewire) && iAudio != QJACKCTL_CAPTURE)); m_ui.InOutLatencyTextLabel->setEnabled((bInEnabled && !bNet) || (bAlsa || bFreebob || bFirewire)); m_ui.InLatencySpinBox->setEnabled((bInEnabled && !bNet) || ((bAlsa || bFreebob || bFirewire) && iAudio != QJACKCTL_PLAYBACK)); m_ui.OutLatencySpinBox->setEnabled((bOutEnabled && !bNet) || ((bAlsa || bFreebob || bFirewire) && iAudio != QJACKCTL_CAPTURE)); computeLatency(); } void qjackctlSetupForm::changeAudio ( int iAudio ) { changeDriverAudio(m_ui.DriverComboBox->currentText(), iAudio); } void qjackctlSetupForm::changeDriver ( const QString& sDriver ) { changeDriverUpdate(sDriver, true); } 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"); m_ui.NoMemLockCheckBox->setEnabled(!bCoreaudio); m_ui.UnlockMemCheckBox->setEnabled(!bCoreaudio && !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); if (bCoreaudio || bPortaudio) { m_ui.PriorityTextLabel->setEnabled(false); m_ui.PrioritySpinBox->setEnabled(false); } else { bool bPriorityEnabled = m_ui.RealtimeCheckBox->isChecked(); m_ui.PriorityTextLabel->setEnabled(bPriorityEnabled); m_ui.PrioritySpinBox->setEnabled(bPriorityEnabled); } m_ui.SampleRateTextLabel->setEnabled(!bNet); m_ui.SampleRateComboBox->setEnabled(!bNet); 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); if (bUpdate && (bFreebob || 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.WaitTextLabel->setEnabled(bDummy); m_ui.WaitComboBox->setEnabled(bDummy); m_ui.ChanTextLabel->setEnabled(bPortaudio); m_ui.ChanSpinBox->setEnabled(bPortaudio); int iAudio = m_ui.AudioComboBox->currentIndex(); bool bEnabled = (bAlsa || bPortaudio); if (bEnabled && iAudio == QJACKCTL_DUPLEX) { const QString& sInDevice = m_ui.InDeviceComboBox->currentText(); const QString& sOutDevice = m_ui.OutDeviceComboBox->currentText(); bEnabled = (sInDevice.isEmpty() || sInDevice == m_pSetup->sDefPresetName || sOutDevice.isEmpty() || sOutDevice == m_pSetup->sDefPresetName); } bool bInterface = (bEnabled || bCoreaudio || bFreebob || bFirewire); m_ui.InterfaceTextLabel->setEnabled(bInterface); m_ui.InterfaceComboBox->setEnabled(bInterface); m_ui.InterfaceToolButton->setEnabled(bEnabled || bCoreaudio); if (!bInterface) setComboBoxCurrentText(m_ui.InterfaceComboBox, m_pSetup->sDefPresetName); m_ui.DitherTextLabel->setEnabled(bAlsa || bPortaudio); m_ui.DitherComboBox->setEnabled(bAlsa || bPortaudio); #ifdef CONFIG_JACK_MIDI m_ui.MidiDriverTextLabel->setEnabled(bAlsa); m_ui.MidiDriverComboBox->setEnabled(bAlsa); #endif changeDriverAudio(sDriver, iAudio); } // Stabilize current form state. void qjackctlSetupForm::stabilizeForm (void) { bool bValid = (m_iDirtySettings > 0 || m_iDirtyOptions > 0); QString sPreset = m_ui.PresetComboBox->currentText(); if (!sPreset.isEmpty()) { bool bPreset = (m_pSetup->presets.contains(sPreset)); m_ui.PresetSavePushButton->setEnabled(m_iDirtySettings > 0 || (!bPreset && sPreset != m_pSetup->sDefPresetName)); m_ui.PresetDeletePushButton->setEnabled(bPreset); } else { m_ui.PresetSavePushButton->setEnabled(false); m_ui.PresetDeletePushButton->setEnabled(false); } bool bEnabled = m_ui.StartupScriptCheckBox->isChecked(); m_ui.StartupScriptShellComboBox->setEnabled(bEnabled); m_ui.StartupScriptSymbolToolButton->setEnabled(bEnabled); m_ui.StartupScriptBrowseToolButton->setEnabled(bEnabled); bEnabled = m_ui.PostStartupScriptCheckBox->isChecked(); m_ui.PostStartupScriptShellComboBox->setEnabled(bEnabled); m_ui.PostStartupScriptSymbolToolButton->setEnabled(bEnabled); m_ui.PostStartupScriptBrowseToolButton->setEnabled(bEnabled); bEnabled = m_ui.ShutdownScriptCheckBox->isChecked(); m_ui.ShutdownScriptShellComboBox->setEnabled(bEnabled); m_ui.ShutdownScriptSymbolToolButton->setEnabled(bEnabled); m_ui.ShutdownScriptBrowseToolButton->setEnabled(bEnabled); bEnabled = m_ui.PostShutdownScriptCheckBox->isChecked(); m_ui.PostShutdownScriptShellComboBox->setEnabled(bEnabled); m_ui.PostShutdownScriptSymbolToolButton->setEnabled(bEnabled); m_ui.PostShutdownScriptBrowseToolButton->setEnabled(bEnabled); bEnabled = m_ui.StdoutCaptureCheckBox->isChecked(); m_ui.XrunRegexTextLabel->setEnabled(bEnabled); m_ui.XrunRegexComboBox->setEnabled(bEnabled); bEnabled = m_ui.ActivePatchbayCheckBox->isChecked(); m_ui.ActivePatchbayPathComboBox->setEnabled(bEnabled); m_ui.ActivePatchbayPathToolButton->setEnabled(bEnabled); if (bEnabled && bValid) { const QString& sPath = m_ui.ActivePatchbayPathComboBox->currentText(); bValid = (!sPath.isEmpty() && QFileInfo(sPath).exists()); } #ifdef CONFIG_AUTO_REFRESH m_ui.TimeRefreshComboBox->setEnabled( m_ui.AutoRefreshCheckBox->isChecked()); #endif bEnabled = m_ui.MessagesLogCheckBox->isChecked(); m_ui.MessagesLogPathComboBox->setEnabled(bEnabled); m_ui.MessagesLogPathToolButton->setEnabled(bEnabled); if (bEnabled && bValid) { const QString& sPath = m_ui.MessagesLogPathComboBox->currentText(); bValid = !sPath.isEmpty(); } m_ui.MessagesLimitLinesComboBox->setEnabled( m_ui.MessagesLimitCheckBox->isChecked()); m_ui.StartMinimizedCheckBox->setEnabled( m_ui.SystemTrayCheckBox->isChecked()); m_ui.StopJackCheckBox->setEnabled( m_ui.DBusEnabledCheckBox->isChecked()); if (!m_ui.DBusEnabledCheckBox->isChecked()) { m_ui.StopJackCheckBox->setChecked(true); } bEnabled = m_ui.ServerConfigCheckBox->isChecked(); m_ui.ServerConfigNameComboBox->setEnabled(bEnabled); m_ui.ServerConfigTempCheckBox->setEnabled(bEnabled); m_ui.AliasesEditingCheckBox->setEnabled( m_ui.AliasesEnabledCheckBox->isChecked()); m_ui.DelayedSetupCheckBox->setEnabled( !m_ui.StartMinimizedCheckBox->isChecked()); #if !defined(Q_WS_X11) m_ui.SingletonCheckBox->setEnabled(false); #endif m_ui.TransportButtonsCheckBox->setEnabled( m_ui.LeftButtonsCheckBox->isChecked()); changeDriverUpdate(m_ui.DriverComboBox->currentText(), false); m_ui.DialogButtonBox->button(QDialogButtonBox::Ok)->setEnabled(bValid); } #ifdef CONFIG_COREAUDIO // borrowed from jackpilot source static OSStatus getTotalChannels( AudioDeviceID device, UInt32* channelCount, Boolean isInput ) { OSStatus err = noErr; UInt32 outSize; Boolean outWritable; AudioBufferList* bufferList = 0; AudioStreamID* streamList = 0; size_t i, numStream; err = AudioDeviceGetPropertyInfo(device, 0, isInput, kAudioDevicePropertyStreams, &outSize, &outWritable); if (err == noErr) { streamList = (AudioStreamID*)malloc(outSize); numStream = outSize/sizeof(AudioStreamID); //JPLog("getTotalChannels device stream number %ld %ld\n", device, numStream); err = AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyStreams, &outSize, streamList); if (err == noErr) { AudioStreamBasicDescription streamDesc; outSize = sizeof(AudioStreamBasicDescription); for (i = 0; i < numStream; i++) { err = AudioStreamGetProperty(streamList[i], 0, kAudioDevicePropertyStreamFormat, &outSize, &streamDesc); //JPLog("getTotalChannels streamDesc mFormatFlags %ld mChannelsPerFrame %ld\n", streamDesc.mFormatFlags, streamDesc.mChannelsPerFrame); } } } *channelCount = 0; err = AudioDeviceGetPropertyInfo(device, 0, isInput, kAudioDevicePropertyStreamConfiguration, &outSize, &outWritable); if (err == noErr) { bufferList = (AudioBufferList*)malloc(outSize); err = AudioDeviceGetProperty(device, 0, isInput, kAudioDevicePropertyStreamConfiguration, &outSize, bufferList); if (err == noErr) { for (i = 0; i < bufferList->mNumberBuffers; i++) *channelCount += bufferList->mBuffers[i].mNumberChannels; } } if (streamList) free(streamList); if (bufferList) free(bufferList); return (err); } static OSStatus getDeviceUIDFromID( AudioDeviceID id, char *name, UInt32 nsize ) { UInt32 size = sizeof(CFStringRef); CFStringRef UI; OSStatus res = AudioDeviceGetProperty(id, 0, false, kAudioDevicePropertyDeviceUID, &size, &UI); if (res == noErr) CFStringGetCString(UI,name,nsize,CFStringGetSystemEncoding()); CFRelease(UI); return res; } #endif // CONFIG_COREAUDIO // Device selection menu executive. void qjackctlSetupForm::deviceMenu( QLineEdit *pLineEdit, QToolButton *pToolButton, int iAudio ) { // FIXME: Only valid for ALSA, Sun and OSS devices, // for the time being... and also CoreAudio ones too. const QString& sDriver = m_ui.DriverComboBox->currentText(); bool bAlsa = (sDriver == "alsa"); bool bSun = (sDriver == "sun"); bool bOss = (sDriver == "oss"); #ifdef CONFIG_COREAUDIO bool bCoreaudio = (sDriver == "coreaudio"); std::map coreaudioIdMap; #endif #ifdef CONFIG_PORTAUDIO bool bPortaudio = (sDriver == "portaudio"); #endif QString sCurName = pLineEdit->text(); QString sName, sSubName; QString sText; QMenu menu(this); QAction *pAction; int iCards = 0; if (bAlsa) { #ifdef CONFIG_ALSA_SEQ // Enumerate the ALSA cards and PCM harfware devices... snd_ctl_t *handle; snd_ctl_card_info_t *info; snd_pcm_info_t *pcminfo; snd_ctl_card_info_alloca(&info); snd_pcm_info_alloca(&pcminfo); const QString sPrefix("hw:%1"); const QString sSuffix(" (%1)"); const QString sSubSuffix("%1,%2"); QString sName2, sSubName2; bool bCapture, bPlayback; int iCard = -1; while (snd_card_next(&iCard) >= 0 && iCard >= 0) { sName = sPrefix.arg(iCard); if (snd_ctl_open(&handle, sName.toUtf8().constData(), 0) >= 0 && snd_ctl_card_info(handle, info) >= 0) { if (iCards > 0) menu.addSeparator(); sName2 = sPrefix.arg(snd_ctl_card_info_get_id(info)); sText = sName2 + '\t'; sText += snd_ctl_card_info_get_name(info); sText += sSuffix.arg(sName); pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked( sCurName == sName || sCurName == sName2); int iDevice = -1; while (snd_ctl_pcm_next_device(handle, &iDevice) >= 0 && iDevice >= 0) { // Capture devices.. bCapture = false; if (iAudio == QJACKCTL_CAPTURE || iAudio == QJACKCTL_DUPLEX) { snd_pcm_info_set_device(pcminfo, iDevice); snd_pcm_info_set_subdevice(pcminfo, 0); snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_CAPTURE); bCapture = (snd_ctl_pcm_info(handle, pcminfo) >= 0); } // Playback devices.. bPlayback = false; if (iAudio == QJACKCTL_PLAYBACK || iAudio == QJACKCTL_DUPLEX) { snd_pcm_info_set_device(pcminfo, iDevice); snd_pcm_info_set_subdevice(pcminfo, 0); snd_pcm_info_set_stream(pcminfo, SND_PCM_STREAM_PLAYBACK); bPlayback = (snd_ctl_pcm_info(handle, pcminfo) >= 0); } // List iif compliant with the audio mode criteria... if ((iAudio == QJACKCTL_CAPTURE && bCapture && !bPlayback) || (iAudio == QJACKCTL_PLAYBACK && !bCapture && bPlayback) || (iAudio == QJACKCTL_DUPLEX && bCapture && bPlayback)) { sSubName = sSubSuffix.arg(sName).arg(iDevice); sSubName2 = sSubSuffix.arg(sName2).arg(iDevice); sText = sSubName2 + '\t'; sText += snd_pcm_info_get_name(pcminfo); sText += sSuffix.arg(sSubName); pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked( sCurName == sSubName || sCurName == sSubName2); } } snd_ctl_close(handle); ++iCards; } } #endif // CONFIG_ALSA_SEQ } // Enumerate the OSS Audio devices... else if (bSun) { QFile file("/var/run/dmesg.boot"); if (file.open(QIODevice::ReadOnly)) { QTextStream stream(&file); QString sLine; QRegExp rxDevice("audio([0-9]) at (.*)"); while (!stream.atEnd()) { sLine = stream.readLine(); if (rxDevice.exactMatch(sLine)) { sName = "/dev/audio" + rxDevice.cap(1); sText = sName + '\t' + rxDevice.cap(2); pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked(sCurName == sName); ++iCards; } } file.close(); } } else if (bOss) { QFile file("/dev/sndstat"); if (file.open(QIODevice::ReadOnly)) { QTextStream stream(&file); QString sLine; bool bAudioDevices = false; QRegExp rxHeader("Audio devices.*", Qt::CaseInsensitive); QRegExp rxDevice("([0-9]+):[ ]+(.*)"); while (!stream.atEnd()) { sLine = stream.readLine(); if (bAudioDevices) { if (rxDevice.exactMatch(sLine)) { sName = "/dev/dsp" + rxDevice.cap(1); sText = sName + '\t' + rxDevice.cap(2); pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked(sCurName == sName); ++iCards; } else break; } else if (rxHeader.exactMatch(sLine)) bAudioDevices = true; } file.close(); } } #ifdef CONFIG_COREAUDIO else if (bCoreaudio) { // Find out how many Core Audio devices are there, if any... // (code snippet gently "borrowed" from Stephane Letz jackdmp;) OSStatus err; Boolean isWritable; UInt32 outSize = sizeof(isWritable); err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &outSize, &isWritable); if (err == noErr) { // Calculate the number of device available... int numCoreDevices = outSize / sizeof(AudioDeviceID); // Make space for the devices we are about to get... AudioDeviceID *coreDeviceIDs = new AudioDeviceID [numCoreDevices]; err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &outSize, (void *) coreDeviceIDs); if (err == noErr) { // Look for the CoreAudio device name... char coreDeviceName[256]; UInt32 nameSize = 256; for (int i = 0; i < numCoreDevices; i++) { err = AudioDeviceGetPropertyInfo(coreDeviceIDs[i], 0, true, kAudioDevicePropertyDeviceName, &outSize, &isWritable); if (err == noErr) { err = AudioDeviceGetProperty(coreDeviceIDs[i], 0, true, kAudioDevicePropertyDeviceName, &nameSize, (void *) coreDeviceName); if (err == noErr) { char drivername[128]; UInt32 dnsize = 128; // this returns the unique id for the device // that must be used on the commandline for jack if (getDeviceUIDFromID(coreDeviceIDs[i], drivername, dnsize) == noErr) { sName = drivername; } else { sName = "Error"; } coreaudioIdMap[sName] = coreDeviceIDs[i]; // TODO: hide this ugly ID from the user, // only show human readable name // humanreadable \t UID sText = QString(coreDeviceName) + '\t' + sName; pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked(sCurName == sName); ++iCards; } } } } delete [] coreDeviceIDs; } } #endif // CONFIG_COREAUDIO #ifdef CONFIG_PORTAUDIO else if (bPortaudio) { if (Pa_Initialize() == paNoError) { // Fill hostapi info... PaHostApiIndex iNumHostApi = Pa_GetHostApiCount(); QString *pHostName = new QString[iNumHostApi]; for (PaHostApiIndex i = 0; i < iNumHostApi; ++i) pHostName[i] = QString(Pa_GetHostApiInfo(i)->name); // Fill device info... PaDeviceIndex iNumDevice = Pa_GetDeviceCount(); PaDeviceInfo **ppDeviceInfo = new PaDeviceInfo * [iNumDevice]; for (PaDeviceIndex i = 0; i < iNumDevice; ++i) { ppDeviceInfo[i] = const_cast (Pa_GetDeviceInfo(i)); sText = pHostName[ppDeviceInfo[i]->hostApi] + "::" + QString(ppDeviceInfo[i]->name); pAction = menu.addAction(sText); pAction->setCheckable(true); pAction->setChecked(sCurName == sText); ++iCards; } Pa_Terminate(); } } #endif // CONFIG_PORTAUDIO // There's always the default device... if (iCards > 0) menu.addSeparator(); pAction = menu.addAction(m_pSetup->sDefPresetName); pAction->setCheckable(true); pAction->setChecked(sCurName == m_pSetup->sDefPresetName); // Show the device menu and read selection... pAction = menu.exec(pToolButton->mapToGlobal(QPoint(0,0))); if (pAction) { sText = pAction->text(); int iTabPos = sText.indexOf('\t'); if (iTabPos >= 0) { #ifndef CONFIG_COREAUDIO pLineEdit->setText(sText.left(iTabPos)); #else // for OSX, figure out the device's channel counts and set the combos. // this might be too difficult for the user to determine themselves // and jack won't start if the values exceed the actual. // we now use the second tab delimited field as the value to // put in the combo pLineEdit->setText(sText.mid(iTabPos + 1)); std::map::iterator found = coreaudioIdMap.find(sText.mid(iTabPos+1)); if (found != coreaudioIdMap.end()) { AudioDeviceID devid = found->second; UInt32 chans; if (getTotalChannels(devid, &chans, true) == noErr) { //InChannelsSpinBox->setMaxValue(chans); m_ui.InChannelsSpinBox->setValue(chans); } if (getTotalChannels(devid, &chans, false) == noErr) { //OutChannelsSpinBox->setMaxValue(chans); m_ui.OutChannelsSpinBox->setValue(chans); } } #endif } else { pLineEdit->setText(sText); } // settingsChanged(); } } // Interface device selection menu. void qjackctlSetupForm::selectInterface (void) { deviceMenu(m_ui.InterfaceComboBox->lineEdit(), m_ui.InterfaceToolButton, m_ui.AudioComboBox->currentIndex()); } // Input device selection menu. void qjackctlSetupForm::selectInDevice (void) { deviceMenu(m_ui.InDeviceComboBox->lineEdit(), m_ui.InDeviceToolButton, QJACKCTL_CAPTURE); } // Output device selection menu. void qjackctlSetupForm::selectOutDevice (void) { deviceMenu(m_ui.OutDeviceComboBox->lineEdit(), m_ui.OutDeviceToolButton, QJACKCTL_PLAYBACK); } // Meta-symbol menu executive. void qjackctlSetupForm::symbolMenu( QLineEdit *pLineEdit, QToolButton *pToolButton ) { const QString s = " "; QMenu menu(this); menu.addAction("%P" + s + tr("&Preset Name")); menu.addSeparator(); menu.addAction("%N" + s + tr("&Server Name")); menu.addAction("%s" + s + tr("&Server Path")); menu.addAction("%d" + s + tr("&Driver")); menu.addAction("%i" + s + tr("&Interface")); menu.addSeparator(); menu.addAction("%r" + s + tr("Sample &Rate")); menu.addAction("%p" + s + tr("&Frames/Period")); menu.addAction("%n" + s + tr("Periods/&Buffer")); QAction *pAction = menu.exec(pToolButton->mapToGlobal(QPoint(0,0))); if (pAction) { const QString sText = pAction->text(); int iMetaChar = sText.indexOf('%'); if (iMetaChar >= 0) { pLineEdit->insert('%' + sText[iMetaChar + 1]); // optionsChanged(); } } } // Startup script meta-symbol button slot. void qjackctlSetupForm::symbolStartupScript (void) { symbolMenu(m_ui.StartupScriptShellComboBox->lineEdit(), m_ui.StartupScriptSymbolToolButton); } // Post-startup script meta-symbol button slot. void qjackctlSetupForm::symbolPostStartupScript (void) { symbolMenu(m_ui.PostStartupScriptShellComboBox->lineEdit(), m_ui.PostStartupScriptSymbolToolButton); } // Shutdown script meta-symbol button slot. void qjackctlSetupForm::symbolShutdownScript (void) { symbolMenu(m_ui.ShutdownScriptShellComboBox->lineEdit(), m_ui.ShutdownScriptSymbolToolButton); } // Post-shutdown script meta-symbol button slot. void qjackctlSetupForm::symbolPostShutdownScript (void) { symbolMenu(m_ui.PostShutdownScriptShellComboBox->lineEdit(), m_ui.PostShutdownScriptSymbolToolButton); } // Startup script browse slot. void qjackctlSetupForm::browseStartupScript() { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. tr("Startup Script"), // Caption. m_ui.StartupScriptShellComboBox->currentText() // Start here. ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.StartupScriptShellComboBox, sFileName); m_ui.StartupScriptShellComboBox->setFocus(); optionsChanged(); } } // Post-startup script browse slot. void qjackctlSetupForm::browsePostStartupScript() { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. tr("Post-Startup Script"), // Caption. m_ui.PostStartupScriptShellComboBox->currentText() // Start here. ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.PostStartupScriptShellComboBox, sFileName); m_ui.PostStartupScriptShellComboBox->setFocus(); optionsChanged(); } } // Shutdown script browse slot. void qjackctlSetupForm::browseShutdownScript() { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. tr("Shutdown Script"), // Caption. m_ui.ShutdownScriptShellComboBox->currentText() // Start here. ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.ShutdownScriptShellComboBox, sFileName); m_ui.ShutdownScriptShellComboBox->setFocus(); optionsChanged(); } } // Post-shutdown script browse slot. void qjackctlSetupForm::browsePostShutdownScript() { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. tr("Post-Shutdown Script"), // Caption. m_ui.PostShutdownScriptShellComboBox->currentText() // Start here. ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.PostShutdownScriptShellComboBox, sFileName); m_ui.PostShutdownScriptShellComboBox->setFocus(); optionsChanged(); } } // Active Patchbay path browse slot. void qjackctlSetupForm::browseActivePatchbayPath() { QString sFileName = QFileDialog::getOpenFileName( this, // Parent. tr("Active Patchbay Definition"), // Caption. m_ui.ActivePatchbayPathComboBox->currentText(), // Start here. tr("Patchbay Definition files") + " (*.xml)" // Filter (XML files) ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.ActivePatchbayPathComboBox, sFileName); m_ui.ActivePatchbayPathComboBox->setFocus(); optionsChanged(); } } // Messages log path browse slot. void qjackctlSetupForm::browseMessagesLogPath() { QString sFileName = QFileDialog::getSaveFileName( this, // Parent. tr("Messages Log"), // Caption. m_ui.MessagesLogPathComboBox->currentText(), // Start here. tr("Log files") + " (*.log)" // Filter (log files) ); if (!sFileName.isEmpty()) { setComboBoxCurrentText(m_ui.MessagesLogPathComboBox, sFileName); m_ui.MessagesLogPathComboBox->setFocus(); optionsChanged(); } } // The display font 1 (big time) selection dialog. void qjackctlSetupForm::chooseDisplayFont1() { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, m_ui.DisplayFont1TextLabel->font(), this); if (bOk) { m_ui.DisplayFont1TextLabel->setFont(font); m_ui.DisplayFont1TextLabel->setText(font.family() + ' ' + QString::number(font.pointSize())); optionsChanged(); } } // The display font 2 (normal time et al.) selection dialog. void qjackctlSetupForm::chooseDisplayFont2() { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, m_ui.DisplayFont2TextLabel->font(), this); if (bOk) { m_ui.DisplayFont2TextLabel->setFont(font); m_ui.DisplayFont2TextLabel->setText(font.family() + ' ' + QString::number(font.pointSize())); optionsChanged(); } } // The channel display effect demo changer. void qjackctlSetupForm::toggleDisplayEffect ( bool bOn ) { QPalette pal; pal.setColor(QPalette::Foreground, Qt::green); if (bOn) { QPixmap pm(":/images/displaybg1.png"); pal.setBrush(QPalette::Background, QBrush(pm)); } else { pal.setColor(QPalette::Background, Qt::black); } m_ui.DisplayFont1TextLabel->setPalette(pal); m_ui.DisplayFont2TextLabel->setPalette(pal); optionsChanged(); } // The messages font selection dialog. void qjackctlSetupForm::chooseMessagesFont (void) { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, m_ui.MessagesFontTextLabel->font(), this); if (bOk) { m_ui.MessagesFontTextLabel->setFont(font); m_ui.MessagesFontTextLabel->setText(font.family() + ' ' + QString::number(font.pointSize())); optionsChanged(); } } // The connections font selection dialog. void qjackctlSetupForm::chooseConnectionsFont (void) { bool bOk = false; QFont font = QFontDialog::getFont(&bOk, m_ui.ConnectionsFontTextLabel->font(), this); if (bOk) { m_ui.ConnectionsFontTextLabel->setFont(font); m_ui.ConnectionsFontTextLabel->setText(font.family() + ' ' + QString::number(font.pointSize())); optionsChanged(); } } // Mark that some server preset settings have changed. void qjackctlSetupForm::settingsChanged (void) { if (m_iDirtySetup > 0) return; m_iDirtySettings++; stabilizeForm(); } // Mark that some program options have changed. void qjackctlSetupForm::optionsChanged (void) { if (m_iDirtySetup > 0) return; m_iDirtyOptions++; stabilizeForm(); } // Accept settings (OK button slot). void qjackctlSetupForm::accept (void) { if (m_iDirtySettings > 0 || m_iDirtyOptions > 0) { // 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(); m_pSetup->bPostStartupScript = m_ui.PostStartupScriptCheckBox->isChecked(); m_pSetup->sPostStartupScriptShell = m_ui.PostStartupScriptShellComboBox->currentText(); m_pSetup->bShutdownScript = m_ui.ShutdownScriptCheckBox->isChecked(); m_pSetup->sShutdownScriptShell = m_ui.ShutdownScriptShellComboBox->currentText(); m_pSetup->bPostShutdownScript = m_ui.PostShutdownScriptCheckBox->isChecked(); m_pSetup->sPostShutdownScriptShell = m_ui.PostShutdownScriptShellComboBox->currentText(); m_pSetup->bStdoutCapture = m_ui.StdoutCaptureCheckBox->isChecked(); m_pSetup->sXrunRegex = m_ui.XrunRegexComboBox->currentText(); m_pSetup->bActivePatchbay = m_ui.ActivePatchbayCheckBox->isChecked(); m_pSetup->sActivePatchbayPath = m_ui.ActivePatchbayPathComboBox->currentText(); #ifdef CONFIG_AUTO_REFRESH m_pSetup->bAutoRefresh = m_ui.AutoRefreshCheckBox->isChecked(); m_pSetup->iTimeRefresh = m_ui.TimeRefreshComboBox->currentText().toInt(); #endif 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->iConnectionsIconSize = m_ui.ConnectionsIconSizeComboBox->currentIndex(); m_pSetup->sConnectionsFont = m_ui.ConnectionsFontTextLabel->font().toString(); m_pSetup->bStartJack = m_ui.StartJackCheckBox->isChecked(); m_pSetup->bStopJack = m_ui.StopJackCheckBox->isChecked(); m_pSetup->bQueryClose = m_ui.QueryCloseCheckBox->isChecked(); m_pSetup->bKeepOnTop = m_ui.KeepOnTopCheckBox->isChecked(); m_pSetup->bSystemTray = m_ui.SystemTrayCheckBox->isChecked(); m_pSetup->bStartMinimized = m_ui.StartMinimizedCheckBox->isChecked(); m_pSetup->bDelayedSetup = m_ui.DelayedSetupCheckBox->isChecked(); 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->bQueryShutdown = m_ui.QueryShutdownCheckBox->isChecked(); m_pSetup->bAlsaSeqEnabled = m_ui.AlsaSeqEnabledCheckBox->isChecked(); m_pSetup->bDBusEnabled = m_ui.DBusEnabledCheckBox->isChecked(); 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->iBaseFontSize = m_ui.BaseFontSizeComboBox->currentText().toInt(); } // Save combobox history... m_pSetup->saveComboBoxHistory(m_ui.ServerPrefixComboBox); m_pSetup->saveComboBoxHistory(m_ui.ServerNameComboBox); m_pSetup->saveComboBoxHistory(m_ui.InterfaceComboBox); m_pSetup->saveComboBoxHistory(m_ui.InDeviceComboBox); m_pSetup->saveComboBoxHistory(m_ui.OutDeviceComboBox); m_pSetup->saveComboBoxHistory(m_ui.ServerSuffixComboBox); m_pSetup->saveComboBoxHistory(m_ui.StartupScriptShellComboBox); m_pSetup->saveComboBoxHistory(m_ui.PostStartupScriptShellComboBox); m_pSetup->saveComboBoxHistory(m_ui.ShutdownScriptShellComboBox); m_pSetup->saveComboBoxHistory(m_ui.PostShutdownScriptShellComboBox); m_pSetup->saveComboBoxHistory(m_ui.XrunRegexComboBox); m_pSetup->saveComboBoxHistory(m_ui.ActivePatchbayPathComboBox); m_pSetup->saveComboBoxHistory(m_ui.MessagesLogPathComboBox); m_pSetup->saveComboBoxHistory(m_ui.ServerConfigNameComboBox); // Save/commit to disk. m_pSetup->saveSetup(); // Just go with dialog acceptance. QDialog::accept(); } // Reject settings (Cancel button slot). void qjackctlSetupForm::reject (void) { bool bReject = true; // Check if there's any pending changes... if (m_iDirtySettings > 0 || m_iDirtyOptions > 0) { switch (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("Some settings have been changed.\n\n" "Do you want to apply the changes?"), QMessageBox::Apply | QMessageBox::Discard | QMessageBox::Cancel)) { case QMessageBox::Apply: accept(); return; case QMessageBox::Discard: break; default: // Cancel. bReject = false; } } if (bReject) QDialog::reject(); } // end of qjackctlSetupForm.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnectionsForm.h0000644000175000001440000000012411533267321022174 xustar000000000000000027 mtime=1299017425.741256 27 atime=1364826684.892395 30 ctime=1364826684.892395501 qjackctl-0.3.10/src/qjackctlConnectionsForm.h0000644000175000001440000000735211533267321021472 0ustar00rncbcusers00000000000000// qjackctlConnectionsForm.h // /**************************************************************************** Copyright (C) 2003-2011, 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 __qjackctlConnectionsForm_h #define __qjackctlConnectionsForm_h #include "ui_qjackctlConnectionsForm.h" #include "qjackctlJackConnect.h" #include "qjackctlAlsaConnect.h" // Forward declarations. class qjackctlSetup; //---------------------------------------------------------------------------- // qjackctlConnectionsForm -- UI wrapper form. class qjackctlConnectionsForm : public QWidget { Q_OBJECT public: // Constructor. qjackctlConnectionsForm(QWidget *pParent = 0, Qt::WindowFlags wflags = 0); // Destructor. ~qjackctlConnectionsForm(); void setup(qjackctlSetup *pSetup); qjackctlConnectView *audioConnectView() const; qjackctlConnectView *midiConnectView() const; qjackctlConnectView *alsaConnectView() const; bool queryClose(); enum TabPage { AudioTab = 0, MidiTab = 1, AlsaTab = 2 }; void setTabPage(int iTabPage); int tabPage() const; QFont connectionsFont() const; void setConnectionsFont(const QFont& font); void setConnectionsIconSize(int iIconSize); bool isAudioConnected() const; bool isMidiConnected() const; bool isAlsaConnected() const; void refreshAudio(bool bEnabled, bool bClear = false); void refreshMidi(bool bEnabled, bool bClear = false); void refreshAlsa(bool bEnabled, bool bClear = false); void stabilizeAudio(bool bEnabled, bool bClear = false); 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: void audioConnectSelected(); void audioDisconnectSelected(); void audioDisconnectAll(); void audioExpandAll(); void audioRefreshClear(); void audioRefresh(); void audioStabilize(); void midiConnectSelected(); void midiDisconnectSelected(); void midiDisconnectAll(); void midiExpandAll(); void midiRefreshClear(); void midiRefresh(); void midiStabilize(); void alsaConnectSelected(); void alsaDisconnectSelected(); void alsaDisconnectAll(); void alsaExpandAll(); void alsaRefreshClear(); void alsaRefresh(); void alsaStabilize(); protected slots: void audioDisconnecting(qjackctlPortItem *, qjackctlPortItem *); void midiDisconnecting(qjackctlPortItem *, qjackctlPortItem *); void alsaDisconnecting(qjackctlPortItem *, qjackctlPortItem *); protected: void showEvent(QShowEvent *); void hideEvent(QHideEvent *); void closeEvent(QCloseEvent *); void keyPressEvent(QKeyEvent *); private: // The Qt-designer UI struct... Ui::qjackctlConnectionsForm m_ui; // Instance variables. qjackctlJackConnect *m_pAudioConnect; qjackctlJackConnect *m_pMidiConnect; qjackctlAlsaConnect *m_pAlsaConnect; qjackctlSetup *m_pSetup; QString m_sPreset; }; #endif // __qjackctlConnectionsForm_h // end of qjackctlConnectionsForm.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlMessagesStatusForm.ui0000644000175000001440000000012412067410555023055 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826685.186395 30 ctime=1364826685.186395506 qjackctl-0.3.10/src/qjackctlMessagesStatusForm.ui0000644000175000001440000001472512067410555022355 0ustar00rncbcusers00000000000000 rncbc aka Rui Nuno Capela JACK Audio Connection Kit - Qt GUI Interface. Copyright (C) 2003-2012, 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. qjackctlMessagesStatusForm 0 0 480 320 0 0 Messages / Status - JACK Audio Connection Kit :/images/messagesstatus1.png 0 :/images/messages1.png &Messages Messages log 320 80 Messages output log false QTextEdit::NoWrap true :/images/status1.png &Status Status information 0 0 240 0 Statistics since last server startup true QAbstractItemView::NoSelection true true false true Description Value Reset XRUN statistic values Re&set :/images/reset1.png Alt+S Qt::Horizontal QSizePolicy::Expanding 313 16 Refresh XRUN statistic values &Refresh :/images/refresh1.png Alt+R MessagesTextView StatsListView ResetPushButton RefreshPushButton qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnectAlias.h0000644000175000001440000000012311353112764021430 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826684.847395 30 ctime=1364826684.847395501 qjackctl-0.3.10/src/qjackctlConnectAlias.h0000644000175000001440000000611011353112764020716 0ustar00rncbcusers00000000000000// qjackctlConnectAlias.h // /**************************************************************************** Copyright (C) 2003-2010, 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); // 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 qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlConnectAlias.cpp0000644000175000001440000000012311353112764021763 xustar000000000000000026 mtime=1269601780.95681 27 atime=1364826685.252395 30 ctime=1364826685.252395507 qjackctl-0.3.10/src/qjackctlConnectAlias.cpp0000644000175000001440000001565111353112764021263 0ustar00rncbcusers00000000000000// qjackctlConnectAlias.cpp // /**************************************************************************** Copyright (C) 2003-2010, 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 ) { 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 generid 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 qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlJackConnect.cpp0000644000175000001440000000012411362126205021576 xustar000000000000000027 mtime=1271442565.722598 27 atime=1364826684.416395 30 ctime=1364826684.416395494 qjackctl-0.3.10/src/qjackctlJackConnect.cpp0000644000175000001440000003105211362126205021066 0ustar00rncbcusers00000000000000// qjackctlJackConnect.cpp // /**************************************************************************** Copyright (C) 2003-2010, 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 "qjackctlJackConnect.h" #include "qjackctlMainForm.h" #include //---------------------------------------------------------------------- // class qjackctlJackPort -- Jack port list item. // // Constructor. qjackctlJackPort::qjackctlJackPort ( qjackctlJackClient *pClient, const QString& sPortName, jack_port_t *pJackPort ) : qjackctlPortItem(pClient, sPortName) { m_pJackPort = pJackPort; qjackctlJackConnect *pJackConnect = static_cast ( ((pClient->clientList())->listView())->binding()); if (pJackConnect) { unsigned long ulPortFlags = jack_port_flags(m_pJackPort); if (ulPortFlags & JackPortIsInput) { if (ulPortFlags & JackPortIsTerminal) { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap( ulPortFlags & JackPortIsPhysical ? QJACKCTL_JACK_PORTPTI : QJACKCTL_JACK_PORTLTI))); } else { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap( ulPortFlags & JackPortIsPhysical ? QJACKCTL_JACK_PORTPNI : QJACKCTL_JACK_PORTLNI))); } } else if (ulPortFlags & JackPortIsOutput) { if (ulPortFlags & JackPortIsTerminal) { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap( ulPortFlags & JackPortIsPhysical ? QJACKCTL_JACK_PORTPTO : QJACKCTL_JACK_PORTLTO))); } else { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap( ulPortFlags & JackPortIsPhysical ? QJACKCTL_JACK_PORTPNO : QJACKCTL_JACK_PORTLNO))); } } } } // Default destructor. qjackctlJackPort::~qjackctlJackPort (void) { } // Jack port handles accessors. jack_port_t *qjackctlJackPort::jackPort (void) const { return m_pJackPort; } //---------------------------------------------------------------------- // class qjackctlJackClient -- Jack client list item. // // Constructor. qjackctlJackClient::qjackctlJackClient ( qjackctlJackClientList *pClientList, const QString& sClientName ) : qjackctlClientItem(pClientList, sClientName) { qjackctlJackConnect *pJackConnect = static_cast ( (pClientList->listView())->binding()); if (pJackConnect) { if (pClientList->isReadable()) { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap(QJACKCTL_JACK_CLIENTO))); } else { QTreeWidgetItem::setIcon(0, QIcon(pJackConnect->pixmap(QJACKCTL_JACK_CLIENTI))); } } } // Default destructor. qjackctlJackClient::~qjackctlJackClient (void) { } // Jack port lookup. qjackctlJackPort *qjackctlJackClient::findJackPort ( jack_port_t *pJackPort ) { QListIterator iter(ports()); while (iter.hasNext()) { qjackctlJackPort *pPort = static_cast (iter.next()); if (pPort && pPort->jackPort() == pJackPort) return pPort; } return NULL; } //---------------------------------------------------------------------- // qjackctlJackClientList -- Jack client list. // // Constructor. qjackctlJackClientList::qjackctlJackClientList ( qjackctlClientListView *pListView, bool bReadable ) : qjackctlClientList(pListView, bReadable) { } // Default destructor. qjackctlJackClientList::~qjackctlJackClientList (void) { } // Jack port lookup. qjackctlJackPort *qjackctlJackClientList::findJackClientPort ( jack_port_t *pJackPort ) { QListIterator iter(clients()); while (iter.hasNext()) { qjackctlJackClient *pClient = static_cast (iter.next()); if (pClient) { qjackctlJackPort *pPort = pClient->findJackPort(pJackPort); if (pPort) return pPort; } } return NULL; } // Client:port refreshner. int qjackctlJackClientList::updateClientPorts (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return 0; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return 0; qjackctlJackConnect *pJackConnect = static_cast (listView()->binding()); if (pJackConnect == NULL) return 0; const char *pszJackType = JACK_DEFAULT_AUDIO_TYPE; #ifdef CONFIG_JACK_MIDI if (pJackConnect->jackType() == QJACKCTL_JACK_MIDI) pszJackType = JACK_DEFAULT_MIDI_TYPE; #endif char *aliases[2]; if (g_iJackClientPortAlias > 0) { unsigned short alias_size = jack_port_name_size() + 1; aliases[0] = new char [alias_size]; aliases[1] = new char [alias_size]; } int iDirtyCount = 0; markClientPorts(0); const char **ppszClientPorts = jack_get_ports(pJackClient, 0, pszJackType, isReadable() ? JackPortIsOutput : JackPortIsInput); if (ppszClientPorts) { int iClientPort = 0; while (ppszClientPorts[iClientPort]) { QString sClientPort = QString::fromUtf8(ppszClientPorts[iClientPort]); qjackctlJackClient *pClient = 0; qjackctlJackPort *pPort = 0; jack_port_t *pJackPort = jack_port_by_name(pJackClient, ppszClientPorts[iClientPort]); #ifdef CONFIG_JACK_PORT_ALIASES if (g_iJackClientPortAlias > 0 && jack_port_get_aliases(pJackPort, aliases) >= g_iJackClientPortAlias) sClientPort = QString::fromUtf8(aliases[g_iJackClientPortAlias - 1]); #endif int iColon = sClientPort.indexOf(':'); if (pJackPort && iColon >= 0) { QString sClientName = sClientPort.left(iColon); QString sPortName = sClientPort.right(sClientPort.length() - iColon - 1); pClient = static_cast (findClient(sClientName)); if (pClient) pPort = static_cast (pClient->findPort(sPortName)); if (pClient == 0) { pClient = new qjackctlJackClient(this, sClientName); iDirtyCount++; } if (pClient && pPort == 0) { pPort = new qjackctlJackPort(pClient, sPortName, pJackPort); iDirtyCount++; } if (pPort) pPort->markClientPort(1); } iClientPort++; } ::free(ppszClientPorts); } iDirtyCount += cleanClientPorts(0); if (g_iJackClientPortAlias > 0) { delete [] aliases[0]; delete [] aliases[1]; } return iDirtyCount; } // Jack client port aliases mode. int qjackctlJackClientList::g_iJackClientPortAlias = 0; void qjackctlJackClientList::setJackClientPortAlias ( int iJackClientPortAlias ) { g_iJackClientPortAlias = iJackClientPortAlias; } int qjackctlJackClientList::jackClientPortAlias (void) { return g_iJackClientPortAlias; } //---------------------------------------------------------------------- // qjackctlJackConnect -- Output-to-Input client/ports connection object. // // Constructor. qjackctlJackConnect::qjackctlJackConnect ( qjackctlConnectView *pConnectView, int iJackType ) : qjackctlConnect(pConnectView) { m_iJackType = iJackType; createIconPixmaps(); setOClientList(new qjackctlJackClientList( connectView()->OListView(), true)); setIClientList(new qjackctlJackClientList( connectView()->IListView(), false)); } // Default destructor. qjackctlJackConnect::~qjackctlJackConnect (void) { deleteIconPixmaps(); } // Connection type accessors. int qjackctlJackConnect::jackType (void) const { return m_iJackType; } // Local pixmap-set janitor methods. void qjackctlJackConnect::createIconPixmaps (void) { switch (m_iJackType) { case QJACKCTL_JACK_MIDI: m_apPixmaps[QJACKCTL_JACK_CLIENTI] = createIconPixmap("mclienti"); m_apPixmaps[QJACKCTL_JACK_CLIENTO] = createIconPixmap("mcliento"); m_apPixmaps[QJACKCTL_JACK_PORTPTI] = createIconPixmap("mporti"); m_apPixmaps[QJACKCTL_JACK_PORTPTO] = createIconPixmap("mporto"); m_apPixmaps[QJACKCTL_JACK_PORTPNI] = createIconPixmap("mporti"); m_apPixmaps[QJACKCTL_JACK_PORTPNO] = createIconPixmap("mporto"); m_apPixmaps[QJACKCTL_JACK_PORTLTI] = createIconPixmap("mporti"); m_apPixmaps[QJACKCTL_JACK_PORTLTO] = createIconPixmap("mporto"); m_apPixmaps[QJACKCTL_JACK_PORTLNI] = createIconPixmap("mporti"); m_apPixmaps[QJACKCTL_JACK_PORTLNO] = createIconPixmap("mporto"); break; case QJACKCTL_JACK_AUDIO: default: m_apPixmaps[QJACKCTL_JACK_CLIENTI] = createIconPixmap("aclienti"); m_apPixmaps[QJACKCTL_JACK_CLIENTO] = createIconPixmap("acliento"); m_apPixmaps[QJACKCTL_JACK_PORTPTI] = createIconPixmap("aportpti"); m_apPixmaps[QJACKCTL_JACK_PORTPTO] = createIconPixmap("aportpto"); m_apPixmaps[QJACKCTL_JACK_PORTPNI] = createIconPixmap("aportpni"); m_apPixmaps[QJACKCTL_JACK_PORTPNO] = createIconPixmap("aportpno"); m_apPixmaps[QJACKCTL_JACK_PORTLTI] = createIconPixmap("aportlti"); m_apPixmaps[QJACKCTL_JACK_PORTLTO] = createIconPixmap("aportlto"); m_apPixmaps[QJACKCTL_JACK_PORTLNI] = createIconPixmap("aportlni"); m_apPixmaps[QJACKCTL_JACK_PORTLNO] = createIconPixmap("aportlno"); break; } } void qjackctlJackConnect::deleteIconPixmaps (void) { for (int i = 0; i < QJACKCTL_JACK_PIXMAPS; i++) { if (m_apPixmaps[i]) delete m_apPixmaps[i]; m_apPixmaps[i] = NULL; } } // Common pixmap accessor (static). const QPixmap& qjackctlJackConnect::pixmap ( int iPixmap ) const { return *m_apPixmaps[iPixmap]; } // Connection primitive. bool qjackctlJackConnect::connectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return false; qjackctlJackPort *pOJack = static_cast (pOPort); qjackctlJackPort *pIJack = static_cast (pIPort); return (jack_connect(pJackClient, pOJack->clientPortName().toUtf8().constData(), pIJack->clientPortName().toUtf8().constData()) == 0); } // Disconnection primitive. bool qjackctlJackConnect::disconnectPorts ( qjackctlPortItem *pOPort, qjackctlPortItem *pIPort ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return false; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return false; qjackctlJackPort *pOJack = static_cast (pOPort); qjackctlJackPort *pIJack = static_cast (pIPort); return (jack_disconnect(pJackClient, pOJack->clientPortName().toUtf8().constData(), pIJack->clientPortName().toUtf8().constData()) == 0); } // Update port connection references. void qjackctlJackConnect::updateConnections (void) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return; qjackctlJackClientList *pIClientList = static_cast (IClientList()); if (pIClientList == NULL) return; // For each output client item... QListIterator oclient(OClientList()->clients()); while (oclient.hasNext()) { qjackctlClientItem *pOClient = oclient.next(); // For each output port item... QListIterator oport(pOClient->ports()); while (oport.hasNext()) { qjackctlPortItem *pOPort = oport.next(); // Are there already any connections? if (pOPort->connects().count() > 0) continue; // Hava a proper type cast. 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) { qjackctlPortItem *pIPort = pIClientList->findJackClientPort(pJackPort); if (pIPort) { pOPort->addConnect(pIPort); pIPort->addConnect(pOPort); } } iClientPort++; } ::free(ppszClientPorts); } } } } // Update icon size implementation. void qjackctlJackConnect::updateIconPixmaps (void) { deleteIconPixmaps(); createIconPixmaps(); } // end of qjackctlJackConnect.cpp qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlPatchbay.h0000644000175000001440000000012412067410555020623 xustar000000000000000027 mtime=1356730733.669925 27 atime=1364826684.548395 30 ctime=1364826684.548395496 qjackctl-0.3.10/src/qjackctlPatchbay.h0000644000175000001440000002657012067410555020124 0ustar00rncbcusers00000000000000// qjackctlPatchbay.h // /**************************************************************************** Copyright (C) 2003-2012, 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 __qjackctlPatchbay_h #define __qjackctlPatchbay_h #include #include // Our external patchbay models. #include "qjackctlPatchbayRack.h" // QListViewItem::rtti return values. #define QJACKCTL_SOCKETITEM 2001 #define QJACKCTL_PLUGITEM 2002 // Forward declarations. class qjackctlPlugItem; class qjackctlSocketItem; class qjackctlSocketList; class qjackctlSocketListView; class qjackctlPatchworkView; class qjackctlPatchbayView; class qjackctlPatchbay; // Pixmap-set indexes. #define QJACKCTL_XPM_AUDIO_SOCKET 0 #define QJACKCTL_XPM_AUDIO_SOCKET_X 1 #define QJACKCTL_XPM_AUDIO_CLIENT 2 #define QJACKCTL_XPM_AUDIO_PLUG 3 #define QJACKCTL_XPM_MIDI_SOCKET 4 #define QJACKCTL_XPM_MIDI_SOCKET_X 5 #define QJACKCTL_XPM_MIDI_CLIENT 6 #define QJACKCTL_XPM_MIDI_PLUG 7 #define QJACKCTL_XPM_PIXMAPS 8 // Patchbay plug (port) list item. class qjackctlPlugItem : public QTreeWidgetItem { public: // Constructor. qjackctlPlugItem(qjackctlSocketItem *pSocket, const QString& sPlugName, qjackctlPlugItem *pPlugAfter); // Default destructor. ~qjackctlPlugItem(); // Instance accessors. const QString& socketName() const; const QString& plugName() const; // Patchbay socket item accessor. qjackctlSocketItem *socket() const; private: // Instance variables. qjackctlSocketItem *m_pSocket; QString m_sPlugName; }; // Patchbay socket (client) list item. class qjackctlSocketItem : public QTreeWidgetItem { public: // Constructor. qjackctlSocketItem(qjackctlSocketList *pSocketList, const QString& sSocketName, const QString& sClientName, int iSocketType,qjackctlSocketItem *pSocketAfter); // Default destructor. ~qjackctlSocketItem(); // Instance accessors. const QString& socketName() const; const QString& clientName() const; int socketType() const; bool isExclusive() const; const QString& forward() const; void setSocketName (const QString& sSocketName); void setClientName (const QString& sClientName); void setSocketType (int iSocketType); void setExclusive (bool bExclusive); void setForward (const QString& sSocketForward); // Socket flags accessor. bool isReadable() const; // Connected plug list primitives. void addConnect(qjackctlSocketItem *pSocket); void removeConnect(qjackctlSocketItem *pSocket); // Connected plug finders. qjackctlSocketItem *findConnectPtr(qjackctlSocketItem *pSocketPtr); // Connection list accessor. const QList& connects() const; // Plug list primitive methods. void addPlug(qjackctlPlugItem *pPlug); void removePlug(qjackctlPlugItem *pPlug); // Plug finder. qjackctlPlugItem *findPlug(const QString& sPlugName); // Plug list accessor. QList& plugs(); // Plug list cleaner. void clear(); // Retrieve a context pixmap. const QPixmap& pixmap(int iPixmap) const; // Update pixmap to its proper context. void updatePixmap(); // Client item openness status. void setOpen(bool bOpen); bool isOpen() const; private: // Instance variables. qjackctlSocketList *m_pSocketList; QString m_sSocketName; QString m_sClientName; int m_iSocketType; bool m_bExclusive; QString m_sSocketForward; // Plug (port) list. QList m_plugs; // Connection cache list. QList m_connects; }; // Patchbay socket (client) list. class qjackctlSocketList : public QObject { Q_OBJECT public: // Constructor. qjackctlSocketList(qjackctlSocketListView *pListView, bool bReadable); // Default destructor. ~qjackctlSocketList(); // Socket list primitive methods. void addSocket(qjackctlSocketItem *pSocket); void removeSocket(qjackctlSocketItem *pSocket); // Socket finder. qjackctlSocketItem *findSocket(const QString& sSocketName, int iSocketType); // List view accessor. qjackctlSocketListView *listView() const; // Socket flags accessor. bool isReadable() const; // Socket aesthetics accessors. const QString& socketCaption() const; // Socket list cleaner. void clear(); // Socket list accessor. QList& sockets(); // Find the current selected socket item in list. qjackctlSocketItem *selectedSocketItem() const; // Retrieve a context pixmap. const QPixmap& pixmap(int iPixmap) const; public slots: // Socket item interactivity methods. bool addSocketItem(); bool removeSocketItem(); bool editSocketItem(); bool copySocketItem(); bool exclusiveSocketItem(); bool moveUpSocketItem(); bool moveDownSocketItem(); private: // Merge two pixmaps with union of respective masks. QPixmap *createPixmapMerge(const QPixmap& xpmDst, const QPixmap& xpmSrc); // Instance variables. qjackctlSocketListView *m_pListView; bool m_bReadable; QString m_sSocketCaption; QPixmap *m_apPixmaps[QJACKCTL_XPM_PIXMAPS]; QList m_sockets; }; //---------------------------------------------------------------------------- // qjackctlSocketListView -- Socket list view, supporting drag-n-drop. class qjackctlSocketListView : public QTreeWidget { Q_OBJECT public: // Constructor. qjackctlSocketListView(qjackctlPatchbayView *pPatchbayView, bool bReadable); // Default destructor. ~qjackctlSocketListView(); // Patchbay dirty flag accessors. void setDirty (bool bDirty); bool dirty() const; // Auto-open timer methods. void setAutoOpenTimeout(int iAutoOpenTimeout); int autoOpenTimeout() const; protected slots: // Auto-open timeout slot. void timeoutSlot(); protected: // Trap for help/tool-tip events. bool eventFilter(QObject *pObject, QEvent *pEvent); // Drag-n-drop stuff. QTreeWidgetItem *dragDropItem(const QPoint& pos); // Drag-n-drop stuff -- reimplemented virtual methods. void dragEnterEvent(QDragEnterEvent *pDragEnterEvent); void dragMoveEvent(QDragMoveEvent *pDragMoveEvent); void dragLeaveEvent(QDragLeaveEvent *); void dropEvent(QDropEvent *pDropEvent); // Handle mouse events for drag-and-drop stuff. void mousePressEvent(QMouseEvent *pMouseEvent); void mouseMoveEvent(QMouseEvent *pMouseEvent); // Context menu request event handler. void contextMenuEvent(QContextMenuEvent *); private: // Bindings. qjackctlPatchbayView *m_pPatchbayView; bool m_bReadable; // Auto-open timer. int m_iAutoOpenTimeout; QTimer *m_pAutoOpenTimer; // Items we'll eventually drop something. QTreeWidgetItem *m_pDragItem; QTreeWidgetItem *m_pDropItem; // The point from where drag started. QPoint m_posDrag; }; //---------------------------------------------------------------------------- // qjackctlPatchworkView -- Socket plugging connector widget. class qjackctlPatchworkView : public QWidget { Q_OBJECT public: // Constructor. qjackctlPatchworkView(qjackctlPatchbayView *pPatchbayView); // Default destructor. ~qjackctlPatchworkView(); public slots: // Useful slots (should this be protected?). void contentsChanged(); protected: // Draw visible port connection relation arrows. void paintEvent(QPaintEvent *); // Context menu request event handler. void contextMenuEvent(QContextMenuEvent *); private: // Legal socket item position helper. int itemY(QTreeWidgetItem *pItem) const; // Drawing methods. void drawForwardLine(QPainter *pPainter, int x, int dx, int y1, int y2, int h); void drawConnectionLine(QPainter *pPainter, int x1, int y1, int x2, int y2, int h1, int h2); // Local instance variables. qjackctlPatchbayView *m_pPatchbayView; }; //---------------------------------------------------------------------------- // qjackctlPatchbayView -- Patchbay integrated widget. class qjackctlPatchbayView : public QSplitter { Q_OBJECT public: // Constructor. qjackctlPatchbayView(QWidget *pParent = 0); // Default destructor. ~qjackctlPatchbayView(); // Widget accesors. qjackctlSocketListView *OListView() { return m_pOListView; } qjackctlSocketListView *IListView() { return m_pIListView; } qjackctlPatchworkView *PatchworkView() { return m_pPatchworkView; } // Patchbay object binding methods. void setBinding(qjackctlPatchbay *pPatchbay); qjackctlPatchbay *binding() const; // Socket list accessors. 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; signals: // Contents change signal. void contentsChanged(); public slots: // Common context menu slots. void contextMenu(const QPoint& pos, qjackctlSocketList *pSocketList); void activateForwardMenu(QAction *); private: // Child controls. qjackctlSocketListView *m_pOListView; qjackctlSocketListView *m_pIListView; qjackctlPatchworkView *m_pPatchworkView; // The main binding object. qjackctlPatchbay *m_pPatchbay; // How we'll draw patchwork lines. bool m_bBezierLines; // The obnoxious dirty flag. bool m_bDirty; }; //---------------------------------------------------------------------------- // qjackctlPatchbay -- Patchbay integrated object. class qjackctlPatchbay : public QObject { Q_OBJECT public: // Constructor. qjackctlPatchbay(qjackctlPatchbayView *pPatchbayView); // Default destructor. ~qjackctlPatchbay(); // Explicit connection tests. bool canConnectSelected(); bool canDisconnectSelected(); bool canDisconnectAll(); // Socket list accessors. qjackctlSocketList *OSocketList() const; qjackctlSocketList *ISocketList() const; // External rack transfer methods. void loadRack(qjackctlPatchbayRack *pPatchbayRack); void saveRack(qjackctlPatchbayRack *pPatchbayRack); public slots: // Complete contents refreshner. void refresh(); // Explicit connection slots. bool connectSelected(); bool disconnectSelected(); bool disconnectAll(); // Expand all socket items. void expandAll(); // Complete patchbay clearer. void clear(); // Do actual and complete connections snapshot. void connectionsSnapshot(); private: // Internal rack transfer methods. void loadRackSockets (qjackctlSocketList *pSocketList, QList& socketlist); void saveRackSockets (qjackctlSocketList *pSocketList, QList& socketlist); // Connect/Disconnection primitives. void connectSockets(qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket); void disconnectSockets(qjackctlSocketItem *pOSocket, qjackctlSocketItem *pISocket); // Instance variables. qjackctlPatchbayView *m_pPatchbayView; qjackctlSocketList *m_pOSocketList; qjackctlSocketList *m_pISocketList; }; #endif // __qjackctlPatchbay_h // end of qjackctlPatchbay.h qjackctl-0.3.10/src/PaxHeaders.16050/qjackctlSessionForm.cpp0000644000175000001440000000012412113702761021665 xustar000000000000000027 mtime=1362068977.690235 27 atime=1364826684.550395 30 ctime=1364826684.594395497 qjackctl-0.3.10/src/qjackctlSessionForm.cpp0000644000175000001440000007052512113702761021165 0ustar00rncbcusers00000000000000// qjackctlSessionForm.cpp // /**************************************************************************** Copyright (C) 2003-2013, 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 "qjackctlSessionForm.h" #include "qjackctlSession.h" #include "qjackctlSetup.h" #include "qjackctlMainForm.h" #include #include #include #include #include #include #include #include #include #include #include #include // Local prototypes. static void remove_dir_list(const QList& list); static void remove_dir(const QString& sDir); // Remove specific file path. static void remove_dir ( const QString& sDir ) { QDir dir(sDir); remove_dir_list( dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)); dir.rmdir(sDir); } static void remove_dir_list ( const QList& list ) { QListIterator iter(list); while (iter.hasNext()) { const QFileInfo& info = iter.next(); const QString& sPath = info.absoluteFilePath(); if (info.isDir()) { remove_dir(sPath); } else { QFile::remove(sPath); } } } //------------------------------------------------------------------------- // qjackctlSessionInfraClientItemEditor qjackctlSessionInfraClientItemEditor::qjackctlSessionInfraClientItemEditor ( QWidget *pParent, const QModelIndex& index ) : QWidget(pParent), m_index(index) { m_pItemEdit = new QLineEdit(/*this*/); if (index.column() == 1) { m_pBrowseButton = new QToolButton(/*this*/); m_pBrowseButton->setFixedWidth(18); m_pBrowseButton->setText("..."); } else m_pBrowseButton = NULL; m_pResetButton = new QToolButton(/*this*/); m_pResetButton->setFixedWidth(18); m_pResetButton->setText("x"); QHBoxLayout *pLayout = new QHBoxLayout(); pLayout->setSpacing(0); pLayout->setMargin(0); pLayout->addWidget(m_pItemEdit); if (m_pBrowseButton) pLayout->addWidget(m_pBrowseButton); pLayout->addWidget(m_pResetButton); QWidget::setLayout(pLayout); QWidget::setFocusPolicy(Qt::StrongFocus); QWidget::setFocusProxy(m_pItemEdit); QObject::connect(m_pItemEdit, SIGNAL(editingFinished()), SLOT(finishSlot())); if (m_pBrowseButton) QObject::connect(m_pBrowseButton, SIGNAL(clicked()), SLOT(browseSlot())); QObject::connect(m_pResetButton, SIGNAL(clicked()), SLOT(resetSlot())); } // Item text accessors. void qjackctlSessionInfraClientItemEditor::setText ( const QString& sText ) { m_pItemEdit->setText(sText); } QString qjackctlSessionInfraClientItemEditor::text (void) const { return m_pItemEdit->text(); } // Item command browser. void qjackctlSessionInfraClientItemEditor::browseSlot (void) { bool bBlockSignals = m_pItemEdit->blockSignals(true); const QString& sCommand = QFileDialog::getOpenFileName(parentWidget(), tr("Infra-command")); if (!sCommand.isEmpty()) m_pItemEdit->setText(sCommand); m_pItemEdit->blockSignals(bBlockSignals); } // Item text clear/toggler. void qjackctlSessionInfraClientItemEditor::resetSlot (void) { if (m_pItemEdit->text() == m_sDefaultText) m_pItemEdit->clear(); else m_pItemEdit->setText(m_sDefaultText); m_pItemEdit->setFocus(); } // Item text finish notification. void qjackctlSessionInfraClientItemEditor::finishSlot (void) { bool bBlockSignals = m_pItemEdit->blockSignals(true); emit finishSignal(); m_index = QModelIndex(); m_sDefaultText.clear(); m_pItemEdit->blockSignals(bBlockSignals); } //------------------------------------------------------------------------- // qjackctlSessionInfraClientItemDelegate qjackctlSessionInfraClientItemDelegate::qjackctlSessionInfraClientItemDelegate ( QObject *pParent ) : QItemDelegate(pParent) { } QWidget *qjackctlSessionInfraClientItemDelegate::createEditor ( QWidget *pParent, const QStyleOptionViewItem& /*option*/, const QModelIndex& index ) const { qjackctlSessionInfraClientItemEditor *pItemEditor = new qjackctlSessionInfraClientItemEditor(pParent, index); pItemEditor->setDefaultText( index.model()->data(index, Qt::DisplayRole).toString()); QObject::connect(pItemEditor, SIGNAL(finishSignal()), SLOT(commitEditor())); return pItemEditor; } void qjackctlSessionInfraClientItemDelegate::setEditorData ( QWidget *pEditor, const QModelIndex& index ) const { qjackctlSessionInfraClientItemEditor *pItemEditor = qobject_cast (pEditor); pItemEditor->setText( index.model()->data(index, Qt::DisplayRole).toString()); } void qjackctlSessionInfraClientItemDelegate::setModelData ( QWidget *pEditor, QAbstractItemModel *pModel, const QModelIndex& index ) const { qjackctlSessionInfraClientItemEditor *pItemEditor = qobject_cast (pEditor); pModel->setData(index, pItemEditor->text()); } void qjackctlSessionInfraClientItemDelegate::commitEditor (void) { qjackctlSessionInfraClientItemEditor *pItemEditor = qobject_cast (sender()); const QString& sText = pItemEditor->text(); const QString& sDefaultText = pItemEditor->defaultText(); if (sText != sDefaultText) emit commitData(pItemEditor); emit closeEditor(pItemEditor); } //---------------------------------------------------------------------------- // qjackctlSessionForm -- UI wrapper form. // Constructor. qjackctlSessionForm::qjackctlSessionForm ( QWidget *pParent, Qt::WindowFlags wflags ) : QWidget(pParent, wflags) { // Setup UI struct... m_ui.setupUi(this); m_pSetup = NULL; // Common (sigleton) session object. m_pSession = new qjackctlSession(); // Set recent menu stuff... m_pRecentMenu = new QMenu(tr("&Recent")); m_ui.RecentSessionPushButton->setMenu(m_pRecentMenu); m_pSaveMenu = new QMenu(tr("&Save")); m_pSaveMenu->setIcon(QIcon(":/images/save1.png")); m_pSaveMenu->addAction(QIcon(":/images/save1.png"), tr("&Save..."), this, SLOT(saveSessionSave())); #ifdef CONFIG_JACK_SESSION m_pSaveMenu->addAction( tr("Save and &Quit..."), this, SLOT(saveSessionSaveAndQuit())); m_pSaveMenu->addAction( tr("Save &Template..."), this, SLOT(saveSessionSaveTemplate())); #endif m_ui.SaveSessionPushButton->setMenu(m_pSaveMenu); // Session tree view... QHeaderView *pHeader = m_ui.SessionTreeView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::ResizeToContents); #else // pHeader->setResizeMode(QHeaderView::ResizeToContents); #endif pHeader->resizeSection(0, 200); // Client/Ports pHeader->resizeSection(1, 40); // UUID pHeader->setStretchLastSection(true); m_ui.SessionTreeView->setContextMenuPolicy(Qt::CustomContextMenu); // Infra-client list view... pHeader = m_ui.InfraClientListView->header(); // pHeader->setDefaultAlignment(Qt::AlignLeft); #if QT_VERSION >= 0x050000 // pHeader->setSectionResizeMode(QHeaderView::ResizeToContents); #else // pHeader->setResizeMode(QHeaderView::ResizeToContents); #endif pHeader->resizeSection(0, 120); // Infra-client pHeader->setStretchLastSection(true); m_ui.InfraClientListView->setItemDelegate( new qjackctlSessionInfraClientItemDelegate(m_ui.InfraClientListView)); m_ui.InfraClientListView->setContextMenuPolicy(Qt::CustomContextMenu); m_ui.InfraClientListView->sortItems(0, Qt::AscendingOrder); // UI connections... QObject::connect(m_ui.LoadSessionPushButton, SIGNAL(clicked()), SLOT(loadSession())); QObject::connect(m_ui.UpdateSessionPushButton, SIGNAL(clicked()), SLOT(updateSession())); QObject::connect(m_ui.SessionTreeView, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(sessionViewContextMenu(const QPoint&))); QObject::connect(m_ui.InfraClientListView, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)), SLOT(selectInfraClient())); QObject::connect(m_ui.AddInfraClientPushButton, SIGNAL(clicked()), SLOT(addInfraClient())); QObject::connect(m_ui.EditInfraClientPushButton, SIGNAL(clicked()), SLOT(editInfraClient())); QObject::connect(m_ui.RemoveInfraClientPushButton, SIGNAL(clicked()), SLOT(removeInfraClient())); QObject::connect(m_ui.InfraClientListView->itemDelegate(), SIGNAL(commitData(QWidget *)), SLOT(editInfraClientCommit())); QObject::connect(m_ui.InfraClientListView, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(infraClientContextMenu(const QPoint&))); // Start disabled. stabilizeForm(false); } // Destructor. qjackctlSessionForm::~qjackctlSessionForm (void) { delete m_pSaveMenu; delete m_pRecentMenu; delete m_pSession; } // Set reference to global options, mostly needed for // the initial session save type and directories. void qjackctlSessionForm::setup ( qjackctlSetup *pSetup ) { m_pSetup = pSetup; if (m_pSetup) { m_ui.SaveSessionVersionCheckBox->setChecked( m_pSetup->bSessionSaveVersion); m_sessionDirs = m_pSetup->sessionDirs; // Setup infra-clients table view... QList sizes; sizes.append(320); sizes.append(120); m_pSetup->loadSplitterSizes(m_ui.InfraClientSplitter, sizes); // Load infra-clients table-view... m_pSession->loadInfraClients(m_pSetup->settings()); } updateRecentMenu(); updateInfraClients(); } // Maybe ask whether we can close. bool qjackctlSessionForm::queryClose (void) { bool bQueryClose = true; // Maybe just save some splitter sizes... if (m_pSetup && bQueryClose) { // Rebuild infra-clients list... m_pSession->clearInfraClients(); qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); int iItemCount = m_ui.InfraClientListView->topLevelItemCount(); for (int i = 0; i < iItemCount; ++i) { QTreeWidgetItem *pItem = m_ui.InfraClientListView->topLevelItem(i); if (pItem) { const QString& sKey = pItem->text(0); const QString& sValue = pItem->text(1); if (!sValue.isEmpty()) { qjackctlSession::InfraClientItem *pInfraClientItem = new qjackctlSession::InfraClientItem; pInfraClientItem->client_name = sKey; pInfraClientItem->client_command = sValue; list.insert(sKey, pInfraClientItem); } } } // Save infra-clients table-view... m_pSession->saveInfraClients(m_pSetup->settings()); m_pSetup->saveSplitterSizes(m_ui.InfraClientSplitter); } return bQueryClose; } // Recent session directories accessor. const QStringList& qjackctlSessionForm::sessionDirs (void) const { return m_sessionDirs; } // Session save versioning option. bool qjackctlSessionForm::isSaveSessionVersion (void) const { return m_ui.SaveSessionVersionCheckBox->isChecked(); } // Recent menu accessor. QMenu *qjackctlSessionForm::recentMenu (void) const { return m_pRecentMenu; } // Save menu accessor. QMenu *qjackctlSessionForm::saveMenu (void) const { return m_pSaveMenu; } // Notify our parent that we're emerging. void qjackctlSessionForm::showEvent ( QShowEvent *pShowEvent ) { qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); QWidget::showEvent(pShowEvent); } // Notify our parent that we're closing. void qjackctlSessionForm::hideEvent ( QHideEvent *pHideEvent ) { QWidget::hideEvent(pHideEvent); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Just about to notify main-window that we're closing. void qjackctlSessionForm::closeEvent ( QCloseEvent * /*pCloseEvent*/ ) { QWidget::hide(); qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) pMainForm->stabilizeForm(); } // Open/load session from specific file path. void qjackctlSessionForm::loadSession (void) { #if 0 QFileDialog loadDialog(this, tr("Load Session")); loadDialog.setAcceptMode(QFileDialog::AcceptOpen); loadDialog.setFileMode(QFileDialog::Directory); loadDialog.setViewMode(QFileDialog::List); loadDialog.setOptions(QFileDialog::ShowDirsOnly); loadDialog.setNameFilter(tr("Session directory")); loadDialog.setHistory(m_sessionDirs); if (!m_sessionDirs.isEmpty()) loadDialog.setDirectory(m_sessionDirs.first()); if (!loadDialog.exec()) return; QString sSessionDir = loadDialog.selectedFiles().first(); #else QString sSessionDir; if (!m_sessionDirs.isEmpty()) sSessionDir = m_sessionDirs.first(); sSessionDir = QFileDialog::getExistingDirectory( this, tr("Load Session"), sSessionDir); #endif loadSessionDir(sSessionDir); } // Load a recent session. void qjackctlSessionForm::recentSession (void) { QAction *pAction = qobject_cast (sender()); if (pAction) { int i = pAction->data().toInt(); if (i >= 0 && i < m_sessionDirs.count()) loadSessionDir(m_sessionDirs.at(i)); } } // Save current session to specific file path. void qjackctlSessionForm::saveSessionSave (void) { saveSessionEx(0); } void qjackctlSessionForm::saveSessionSaveAndQuit (void) { saveSessionEx(1); } void qjackctlSessionForm::saveSessionSaveTemplate (void) { saveSessionEx(2); } void qjackctlSessionForm::saveSessionEx ( int iSessionType ) { QString sTitle = tr("Save Session"); switch (iSessionType) { case 1: sTitle += ' ' + tr("and Quit"); break; case 2: sTitle += ' ' + tr("Template"); break; } #if 0 QFileDialog saveDialog(this, sTitle); saveDialog.setAcceptMode(QFileDialog::AcceptSave); saveDialog.setFileMode(QFileDialog::Directory); saveDialog.setViewMode(QFileDialog::List); saveDialog.setOptions(QFileDialog::ShowDirsOnly); saveDialog.setNameFilter(tr("Session directory")); saveDialog.setHistory(m_sessionDirs); if (!m_sessionDirs.isEmpty()) saveDialog.setDirectory(m_sessionDirs.first()); if (!saveDialog.exec()) return; QString sSessionDir = saveDialog.selectedFiles().first(); #else QString sSessionDir; if (!m_sessionDirs.isEmpty()) sSessionDir = m_sessionDirs.first(); sSessionDir = QFileDialog::getExistingDirectory( this, sTitle, sSessionDir); #endif saveSessionDir(sSessionDir, iSessionType); } // Save current session to specific file path. void qjackctlSessionForm::saveSessionVersion ( bool bOn ) { m_ui.SaveSessionVersionCheckBox->setChecked(bOn); } // Update the recent session list and menu. void qjackctlSessionForm::updateRecent ( const QString& sSessionDir ) { int i = m_sessionDirs.indexOf(sSessionDir); if (i >= 0) m_sessionDirs.removeAt(i); m_sessionDirs.prepend(sSessionDir); updateRecentMenu(); } // Update/stabilize recent sessions menu. void qjackctlSessionForm::updateRecentMenu (void) { int iRecent = m_sessionDirs.count(); for (; iRecent > 8; --iRecent) m_sessionDirs.pop_back(); m_pRecentMenu->clear(); for (int i = 0; i < iRecent; ++i) { const QString& sSessionDir = m_sessionDirs.at(i); if (QDir(sSessionDir).exists()) { QAction *pAction = m_pRecentMenu->addAction( QFileInfo(sSessionDir).fileName(), this, SLOT(recentSession())); pAction->setData(i); } } if (iRecent > 0) { m_pRecentMenu->addSeparator(); m_pRecentMenu->addAction(tr("&Clear"), this, SLOT(clearRecentMenu())); } m_ui.RecentSessionPushButton->setEnabled(iRecent > 0); } // Clear recent sessions menu. void qjackctlSessionForm::clearRecentMenu (void) { m_sessionDirs.clear(); updateRecentMenu(); } // Open/load session from specific file path. void qjackctlSessionForm::loadSessionDir ( const QString& sSessionDir ) { if (sSessionDir.isEmpty()) return; const QDir sessionDir(sSessionDir); if (!sessionDir.exists("session.xml")) { QMessageBox::critical(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("A session could not be found in this folder:\n\n\"%1\"") .arg(sSessionDir)); return; } qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return; pMainForm->appendMessages( tr("%1: loading session...").arg(sSessionDir)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); bool bLoadSession = m_pSession->load(sSessionDir); if (bLoadSession) updateRecent(sessionDir.absolutePath()); updateSessionView(); QApplication::restoreOverrideCursor(); pMainForm->appendMessages( tr("%1: load session %2.").arg(sSessionDir) .arg(bLoadSession ? "OK" : "FAILED")); } // Save current session to specific file path. void qjackctlSessionForm::saveSessionDir ( const QString& sSessionDir, int iSessionType ) { if (sSessionDir.isEmpty()) return; QDir sessionDir(sSessionDir); const QList list = sessionDir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot); if (!list.isEmpty()) { if (sessionDir.exists("session.xml")) { if (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("A session already exists in this folder:\n\n\"%1\"\n\n" "Are you sure to overwrite the existing session?").arg(sSessionDir), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) return; } else { if (QMessageBox::warning(this, tr("Warning") + " - " QJACKCTL_SUBTITLE1, tr("This folder already exists and is not empty:\n\n\"%1\"\n\n" "Are you sure to overwrite the existing folder?").arg(sSessionDir), QMessageBox::Ok | QMessageBox::Cancel) == QMessageBox::Cancel) return; } // remove_dir_list(list); } qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm == NULL) return; jack_client_t *pJackClient = pMainForm->jackClient(); if (pJackClient == NULL) return; pMainForm->appendMessages( tr("%1: saving session...").arg(sSessionDir)); QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); if (!list.isEmpty()) { if (isSaveSessionVersion()) { int iSessionDirNo = 0; const QString sSessionDirMask = sSessionDir + ".%1"; QFileInfo fi(sSessionDirMask.arg(++iSessionDirNo)); while (fi.exists()) fi.setFile(sSessionDirMask.arg(++iSessionDirNo)); sessionDir.rename(sSessionDir, fi.absoluteFilePath()); } else remove_dir_list(list); sessionDir.refresh(); } if (!sessionDir.exists()) sessionDir.mkpath(sSessionDir); bool bSaveSession = m_pSession->save(sSessionDir, iSessionType); if (bSaveSession) updateRecent(sSessionDir); updateSessionView(); QApplication::restoreOverrideCursor(); pMainForm->appendMessages( tr("%1: save session %2.").arg(sSessionDir) .arg(bSaveSession ? "OK" : "FAILED")); } // Set icon error status according to given flag. QIcon qjackctlSessionForm::iconStatus ( const QIcon& icon, bool bStatus ) { QPixmap pm(icon.pixmap(16, 16)); // Merge with the overlay pixmap... if (bStatus) { const QPixmap pmOverlay(":/images/error1.png"); if (!pmOverlay.mask().isNull()) { QBitmap mask = pm.mask(); QPainter(&mask).drawPixmap(0, 0, pmOverlay.mask()); pm.setMask(mask); QPainter(&pm).drawPixmap(0, 0, pmOverlay); } } return QIcon(pm); } // Update/populate session tree view. void qjackctlSessionForm::updateSessionView (void) { m_ui.SessionTreeView->clear(); QList items; const QIcon iconClient(":/images/client1.png"); const QIcon iconPort(":/images/port1.png"); const QIcon iconConnect(":/images/connect1.png"); qjackctlSession::ClientList::ConstIterator iterClient = m_pSession->clients().constBegin(); for ( ; iterClient != m_pSession->clients().constEnd(); ++iterClient) { qjackctlSession::ClientItem *pClientItem = iterClient.value(); QTreeWidgetItem *pTopLevelItem = new QTreeWidgetItem(); pTopLevelItem->setIcon(0, iconStatus(iconClient, pClientItem->connected)); pTopLevelItem->setText(0, pClientItem->client_name); pTopLevelItem->setText(1, pClientItem->client_uuid); pTopLevelItem->setText(2, pClientItem->client_command); QListIterator iterPort(pClientItem->ports); QTreeWidgetItem *pChildItem = NULL; while (iterPort.hasNext()) { qjackctlSession::PortItem *pPortItem = iterPort.next(); pChildItem = new QTreeWidgetItem(pTopLevelItem, pChildItem); pChildItem->setIcon(0, iconStatus(iconPort, pPortItem->connected)); pChildItem->setText(0, pPortItem->port_name); QListIterator iterConnect(pPortItem->connects); QTreeWidgetItem *pLeafItem = NULL; while (iterConnect.hasNext()) { qjackctlSession::ConnectItem *pConnectItem = iterConnect.next(); pLeafItem = new QTreeWidgetItem(pChildItem, pLeafItem); pLeafItem->setIcon(0, iconStatus(iconConnect, !pConnectItem->connected)); pLeafItem->setText(0, pConnectItem->client_name + ':' + pConnectItem->port_name); } } items.append(pTopLevelItem); } m_ui.SessionTreeView->insertTopLevelItems(0, items); m_ui.SessionTreeView->expandAll(); } // Update/populate session connections and tree view. void qjackctlSessionForm::updateSession (void) { m_pSession->update(); updateSessionView(); updateInfraClients(); } // Context menu event handler. void qjackctlSessionForm::sessionViewContextMenu ( const QPoint& pos ) { QMenu menu(this); QAction *pAction; bool bEnabled = false; qjackctlMainForm *pMainForm = qjackctlMainForm::getInstance(); if (pMainForm) bEnabled = (pMainForm->jackClient() != NULL); pAction = menu.addAction(QIcon(":/images/open1.png"), tr("&Load..."), this, SLOT(loadSession())); pAction->setEnabled(bEnabled); pAction = menu.addMenu(m_pRecentMenu); pAction->setEnabled(bEnabled && !m_pRecentMenu->isEmpty()); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/save1.png"), tr("&Save..."), this, SLOT(saveSessionSave())); pAction->setEnabled(bEnabled); #ifdef CONFIG_JACK_SESSION pAction = menu.addAction( tr("Save and &Quit..."), this, SLOT(saveSessionSaveAndQuit())); pAction->setEnabled(bEnabled); pAction = menu.addAction( tr("Save &Template..."), this, SLOT(saveSessionSaveTemplate())); pAction->setEnabled(bEnabled); #endif menu.addSeparator(); pAction = menu.addAction( tr("&Versioning"), this, SLOT(saveSessionVersion(bool))); pAction->setCheckable(true); pAction->setChecked(isSaveSessionVersion()); pAction->setEnabled(bEnabled); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("Re&fresh"), this, SLOT(updateSession())); menu.exec(m_ui.SessionTreeView->mapToGlobal(pos)); } // Add a new infra-client entry. void qjackctlSessionForm::addInfraClient (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::addInfraClient()"); #endif const QString& sNewInfraClient = tr("New Client"); QTreeWidgetItem *pItem = NULL; const QList& items = m_ui.InfraClientListView->findItems(sNewInfraClient, Qt::MatchExactly); if (items.isEmpty()) { pItem = m_ui.InfraClientListView->currentItem(); pItem = new QTreeWidgetItem(m_ui.InfraClientListView, pItem); pItem->setIcon(0, iconStatus(QIcon(":/images/client1.png"), true)); pItem->setText(0, sNewInfraClient); pItem->setFlags(pItem->flags() | Qt::ItemIsEditable); } else { pItem = items.first(); } m_ui.InfraClientListView->editItem(pItem, 0); } // Edit current infra-client entry. void qjackctlSessionForm::editInfraClient (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::editInfraClient()"); #endif QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); if (pItem) m_ui.InfraClientListView->editItem(pItem, 1); } void qjackctlSessionForm::editInfraClientCommit (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::editInfraClientCommit()"); #endif QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); if (pItem) { const QString& sKey = pItem->text(0); if (!sKey.isEmpty()) { const QString& sValue = pItem->text(1); qjackctlSession::InfraClientItem *pInfraClientItem = NULL; qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::Iterator iter = list.find(sKey); if (iter == list.end()) { pInfraClientItem = new qjackctlSession::InfraClientItem; pInfraClientItem->client_name = sKey; pInfraClientItem->client_command = sValue; list.insert(sKey, pInfraClientItem); } else { pInfraClientItem = iter.value(); pInfraClientItem->client_command = sValue; } pItem->setIcon(0, iconStatus(QIcon(":/images/client1.png"), pInfraClientItem->client_command.isEmpty())); } } } // Remove current infra-client entry. void qjackctlSessionForm::removeInfraClient (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::removeInfraClient()"); #endif QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); if (pItem) { const QString& sKey = pItem->text(0); qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::Iterator iter = list.find(sKey); if (iter != list.end()) { list.erase(iter); updateInfraClients(); } } } // Select current infra-client entry. void qjackctlSessionForm::selectInfraClient (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::selectInfraClient()"); #endif QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); m_ui.AddInfraClientPushButton->setEnabled(true); m_ui.EditInfraClientPushButton->setEnabled(pItem != NULL); m_ui.RemoveInfraClientPushButton->setEnabled(pItem != NULL); } // Update/populate infra-clients commands list view. void qjackctlSessionForm::updateInfraClients (void) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::updateInfraClients()"); #endif int iOldItem = m_ui.InfraClientListView->indexOfTopLevelItem( m_ui.InfraClientListView->currentItem()); m_ui.InfraClientListView->clear(); const QIcon iconClient(":/images/client1.png"); QTreeWidgetItem *pItem = NULL; qjackctlSession::InfraClientList& list = m_pSession->infra_clients(); qjackctlSession::InfraClientList::ConstIterator iter = list.constBegin(); const qjackctlSession::InfraClientList::ConstIterator& iter_end = list.constEnd(); for( ; iter != iter_end; ++iter) { qjackctlSession::InfraClientItem *pInfraClientItem = iter.value(); pItem = new QTreeWidgetItem(m_ui.InfraClientListView, pItem); pItem->setIcon(0, iconStatus(iconClient, pInfraClientItem->client_command.isEmpty())); pItem->setText(0, pInfraClientItem->client_name); pItem->setText(1, pInfraClientItem->client_command); pItem->setFlags(pItem->flags() | Qt::ItemIsEditable); } int iItemCount = m_ui.InfraClientListView->topLevelItemCount(); if (iOldItem >= 0 && iOldItem < iItemCount) { m_ui.InfraClientListView->setCurrentItem( m_ui.InfraClientListView->topLevelItem(iOldItem)); } } // Infra-client list context menu. void qjackctlSessionForm::infraClientContextMenu ( const QPoint& pos ) { QMenu menu(this); QAction *pAction; QTreeWidgetItem *pItem = m_ui.InfraClientListView->currentItem(); pAction = menu.addAction(QIcon(":/images/add1.png"), tr("&Add"), this, SLOT(addInfraClient())); // pAction->setEnabled(true); pAction = menu.addAction(QIcon(":/images/edit1.png"), tr("&Edit"), this, SLOT(editInfraClient())); pAction->setEnabled(pItem != NULL); pAction = menu.addAction(QIcon(":/images/remove1.png"), tr("Re&move"), this, SLOT(removeInfraClient())); pAction->setEnabled(pItem != NULL); menu.addSeparator(); pAction = menu.addAction(QIcon(":/images/refresh1.png"), tr("Re&fresh"), this, SLOT(updateInfraClients())); // pAction->setEnabled(true); menu.exec(m_ui.InfraClientListView->mapToGlobal(pos)); } // Stabilize form status. void qjackctlSessionForm::stabilizeForm ( bool bEnabled ) { m_ui.LoadSessionPushButton->setEnabled(bEnabled); m_ui.RecentSessionPushButton->setEnabled(bEnabled && !m_pRecentMenu->isEmpty()); m_ui.SaveSessionPushButton->setEnabled(bEnabled); m_ui.SaveSessionVersionCheckBox->setEnabled(bEnabled); m_ui.UpdateSessionPushButton->setEnabled(bEnabled); if (!bEnabled) { m_pSession->clear(); m_ui.SessionTreeView->clear(); } selectInfraClient(); } // Keyboard event handler. void qjackctlSessionForm::keyPressEvent ( QKeyEvent *pKeyEvent ) { #ifdef CONFIG_DEBUG_0 qDebug("qjackctlSessionForm::keyPressEvent(%d)", pKeyEvent->key()); #endif int iKey = pKeyEvent->key(); switch (iKey) { case Qt::Key_Escape: close(); break; default: QWidget::keyPressEvent(pKeyEvent); break; } } // end of qjackctlSessionForm.cpp qjackctl-0.3.10/PaxHeaders.16050/TODO0000644000175000001440000000007010223253500015066 xustar000000000000000027 atime=1364826684.188395 29 ctime=1364826684.18839549 qjackctl-0.3.10/TODO0000644000175000001440000000075310223253500014362 0ustar00rncbcusers00000000000000QjackCtl - JACK Audio Connection Kit Qt GUI Interface ----------------------------------------------------- TODOs 0.1.1 Backlog - Having some LADCCA support or awareness may be very welcome. 0.0.5 Backlog - Make available some translations, as some has been contributed already; I'm missing "volunteers" for French (fr), German (de) and Spanish (es). 0.0.3 Backlog: - Display of current jackd version string. - XRUN ticker visual charting. - Any other feature one can think of ;) qjackctl-0.3.10/PaxHeaders.16050/TRANSLATORS0000644000175000001440000000012412025634533016150 xustar000000000000000027 mtime=1347893595.363769 27 atime=1364826685.353395 30 ctime=1364826685.353395509 qjackctl-0.3.10/TRANSLATORS0000644000175000001440000000070012025634533015434 0ustar00rncbcusers00000000000000Czech (cs) Pavel Fric German (de) Guido Scholz Spanish (es) Adrian Pardini French (fr) Raphael Doursenaud Italian (it) Sergio Atzori Japanese (ja) Takashi Sakamoto Dutch (nl) Peter Geirnaert Russian (ru) Alexandre Prokoudine