Update to Release 3.70 - Alex
authorterminatorX <>
Mon, 20 Nov 2000 15:58:31 +0000 (15:58 +0000)
committerterminatorX <>
Mon, 20 Nov 2000 15:58:31 +0000 (15:58 +0000)
26 files changed:
AUTHORS
ChangeLog
INSTALL
Makefile.am
README
TODO
configure.in
src/main.cc
src/tX_audiodevice.cc
src/tX_audiodevice.h
src/tX_dialog.cc
src/tX_engine.cc
src/tX_engine.h
src/tX_event.cc
src/tX_event.h
src/tX_extdial.cc
src/tX_extdial.h
src/tX_ladspa.cc
src/tX_mastergui.cc
src/tX_mastergui.h
src/tX_sequencer.cc
src/tX_sequencer.h
src/tX_vtt.cc
src/tX_vtt.h
src/tX_vttgui.cc
src/version.h

diff --git a/AUTHORS b/AUTHORS
index 4ed669a2adfaa60a3323d9bbc0e439eed8a82df7..99f2e5100f8cdc1bb09c1596feb26761a138d6aa 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -6,6 +6,7 @@ Contributors:
 licmak.awk:            Christian <eleet@altern.org>
 tX_wavfunc.c-patch:    "Andrew C. Bul+hac?k" <acb@zikzak.net>
 MK II icon:            Michael Kahl <m.kahl@student.hu-berlin.de>
+new startup switches:  Josh Steiner <joschi@eds.org>
 
 Authors of files not written for tX but included in this distribution:
 mmx.h README.MMX:      Hank Dietz <hankd@ecn.purdue.ed> and
index 2831056eba5277047ee976d2cbe8afd058a20c0f..347117d7559c5b7150ad9a33f7f849ffef7ee3d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,7 +3,7 @@ All changes were done by me (Alexander K
 This is not a GNU-style ChangeLog but you sort of get the idea what was
 changed.
 
-[v3.65]
+[v3.70]
 - this list may be incomplete
 - This release brings support for LADSPA plugins. These plugins can be inserted
   into any turntable's effect chain at any position. You can edit the the
@@ -29,7 +29,7 @@ changed.
   plugin effects click on their panel's label.
   NOTE: The panning-control is not working yet. It'll work as soon as stereo
   is done.
-- As always when introducing something new, the set-file file-format ha
+- As always when introducing something new, the set-file file-format has
   changed.
 - The parameter-to-mouse-axis mapping has been moved from hardcoded to
   dynamic. You can now map any parameter that's considered "mappable" to the
@@ -39,6 +39,14 @@ changed.
   release he has added some startup parameters for terminatorX, some of them
   aiming for future MIDI support, and therefor not functional yet. Run
   "terminatorX --help" to get more details.
+- I know write the "manual" in SGML with the DocBook DTD. The distribution
+  contains the HTML and the postscript version. These transformation have been
+  created using James Clark's jade (DSSSL-processor) and Norman Walsh's DSSSL
+  stylesheets for DocBook.
+- Removed obsolete "number of vtts"-option from the options dialog.
+- Applied a patch from Josh that fixes running the soundfile editor for files
+  including a blank in their filename.
+- New tooltips for the complete GUI.
 
 [v3.61] (unreleased)
 - applied a tiny patch from Atsushi Yamagata <yamagata@plathome.co.jp>
diff --git a/INSTALL b/INSTALL
index 6dfb06eea67eb90e08df669c1b1108bf0e53870a..ff0cb0a0e52f5bb1b4b2c70408178c38b1a750ce 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,6 +1,9 @@
 terminatorX INSTALL:
 Copyright (C) 1999, 2000 by Alexander König <alkoit00@fht-esslingen.de>
 
+Note: As of Version 3.70 you need to have LADSPA installed to compile
+terminatorX.
+
 Quickstart:
 -----------
 
@@ -53,13 +56,6 @@ Step 1: Configure terminatorX.
                I WARNED YOU! Anybody who can run this binary can completely
                erase your hardisk. BE CAREFUL.
                
-               --disable-flash
-               
-               This turns off the "flash"-widgets that display the current
-               signal of the turntables and the master out. This might help
-               fighting performance probs. Oh, If you have a better name
-               for the widget please tell me ;)                
-               
                --enable-3dnow
                
                This enables EXPERIMENTAL 3DNow! support. It seems as if the
@@ -107,11 +103,6 @@ Step 1: Configure terminatorX.
                
                Misc options:
                -------------
-               
-               --disable-dial
-               
-               The resulting binary will not use the new dial-widget, but
-               scales instead.
 
                --enable-closedev
                
index 74c8553951a566a1a671ed478664a1d79f027659..57b6f9087abeead001d0c2d9454234b7230c69d0 100644 (file)
@@ -1,3 +1,3 @@
 AUTOMAKE_OPTIONS = foreign 
-SUBDIRS = src gnome-support
+SUBDIRS = src gnome-support doc
 SOURCES = README.GNOME README.PERFORMANCE
diff --git a/README b/README
index 5489f2c244fcdb1b904f0a44d178fe1e7a6bb11a..f4ed2ecb39042651e288d34e0dcd56f58ef8b4e8 100644 (file)
--- a/README
+++ b/README
@@ -1,14 +1,6 @@
-terminatorX V3.60 README
+terminatorX V3.70 README
 ------------------------
 
-New:
-     6.4   : Drag And Drop
-     6.5   : The Sequencer
-     
-Updated:
-     6.2.1 : The Main Panel
-     7     : Options
-
 Copyright (C) 1999, 2000 Alexander König
 eMail: alkoit00@fht-esslingen.de
 Homepage: http://www.terminatorX.cx
@@ -20,383 +12,16 @@ WARNING: TerminatorX comes with ABSOLUTELY NO WARRANTY. This software is known
 to lockup X11 or cause other problems under rare conditions. Don't use
 it on production servers. You have been warned!
 
-Contens:
---------
-
-       1.......What it is
-       2.......Quickstart
-       3.......Features
-       4.......Requirements
-       5.......Installation
-       6.......Operation
-       6.1.....The Master GUI
-       6.2.....The Turntable GUI
-       6.2.1...The Main Panel
-       6.2.2...The Trigger Panel
-       6.2.2.1.Syncing Turntables
-       6.2.3...The X- and Y-Control Panels
-       6.2.4...The Lowpass Panel
-       6.2.5...The Echo Panel
-       6.3.....Grab Mode Operation
-       6.4.....Drag And Drop
-       6.5.....The Sequencer
-       7.......Options/Configuration
-       7.......Further notes
-       8.......Contact/Homepage
-
-1. What it is
--------------
-
-terminatorX is a realtime audio synthesizer that allows you to "scratch"
-on digitally sampled audio data (*.wav, *.au, *.mp3, etc.) the way hiphop-DJs
-scratch on vinyl records. It features multiple turntables, realtime effects and
-an easy-to-use gtk+ GUI.
-This is BETA Software please help me fix bugs. See section Contact/Homepage.
-Please read this README and take a look at the homepage http://www.terminatorX.cx.
-
-2. Quickstart:
-----------------
-
-       o Install terminatorX (see INSTALL)
-       o Run terminatorX
-       o Load an audiofile into the available turntable (you can add
-         more turntables if you want) (Hint: Click on the button that
-         holds "NONE" in the "Main"-panel)
-       o Click on the "Audio Engine"-button to start playback.
-       o Click on the "Mouse-Grab"-button to enter grab mode. The turntable
-         with the red border has the input focus.
-       o Press <SPACE> or left mouse button to scratch
-       o Release <SPACE> or left mouse button to let the scratch-file run at
-         the turntable's default speed
-       o Press <ESC> to quit grab mode.
-       
-3. Features:
-------------
-
-       NOTE: I decided to remove the old ridiculous feature list and replace
-       it by a shorter version.
-       
-       - Scratching ;) 
-       - Multiple turntables
-       - Builtin Sequencer
-       - Pitch / Volume settings for each turntable
-       - Effects (Lowpass/Echo) configurable for each turntable
-       - Syncing tables to one master turntable
-       - Broad audiofile-type support through the use of sox and mpg123
-       - Recording (straight to disk now)
-       - Save turntable sets (.tX - files)
-       - and more 
-       
-4. Requirements:
-----------------
-
-       - Software:
-         ---------
-         required:
-                       o Linux (>= 2.0)
-                       o glibc2 (pthreads)
-                       o XFree86 (with DGA DirectMouse support)
-                       o gtk+ (>= 1.2.0)
-                       o a compiler (gcc)
-         optional:
-                       o XFree86 >= 3.3.3.1 to support other XInput devices
-                       o sox for enhanced audio file support
-                       o mpg123 for mp3 support
-         
-       - Hardware:
-         ---------
-                       o A OSS compatible soundcard.
-                       o A good clean mouse and pad, a good X-Pointer setup. 
-
-NOTE on performance: tX is known to run pretty smooth on "current" PCs
-       (200MHz++). If you experience problems take a look at the config
-       options section in INSTALL.
-       
-5. Installation:
-----------------
-
-For GNU-standards' sake this information is now located in the INSTALL file
-that came with this distribution of terminatorX.
-  
-6. Operation:
--------------
-
-Since V3.5 terminatorX has separated GUIs for main operation and the turntable
-settings and therefore I'll (try to ;) explain these in different sections.
-
-6.1 The Master GUI
-------------------
-
-The controls of the master gui are located in the top and the right bar of the
-terminatorX main window.
-
-- Audio Engine Power / Mouse Grab
-With the Audio Engine Button you can en- and disable the audio playback
-engine without activating the sequencer. Unlike earlier versions you will
-not automatically enter mouse-grab mode so you can modify volume/pitch/echo
-settings etc. while you actually hear what you do. Some functions are not
-available when the audio engine is on, their controls will be marked insensitive
-when you enable the engine. To actually enter grab mode you'll have to click on
-the "Mouse Grab" button. See the "Grab Mode Operation" section to find out how
-to control the software then.
-
-- Record (Audio Engine)
-To enable recording you have to enable the "Record"-toggle button BEFORE you 
-start the audio engine. You will be prompted for a filename after enabling the
-button. Audio will then be recorded to that file in RIFF/WAV format from the
-moment you turn the audio engine on until you turn it off again. Please be aware
-of the fact that recording audio requires A LOT of harddisk space!
-
-- Sequencer Play / Record / Stop
-Please Read 6.5 to find out more about the sequencer.
-
-- Master Volume / Pitch
-The volume and pitch settings of the individual turntables are relative to these
-master settings. This information will be stored within the .tX set files.
-
-- Add Turntable
-Oh well, it says it all: adds a (new) turntable to the current set.
-
-- Save Set
-With this button you can save your current set and all related settings to a 
-.tX set file. Note that the audiofiles themselves will not be stored within
-these files but only references to them. Therefore on loading the set the 
-audiofiles have to be at the same location in the filesystem as they were when
-putting that set together.
-
-- Load Set
-Loads a previously saved set (see above). The current set will be destroyed!
-
-- Hide Gui
-If you have a lot of turntables you may find all the panels disturbing in
-grab mode. Therefore you can hide these by clicking on "Hide Gui".
-
-- Options
-Displays the options dialog. See section 7 (Options/Configuration)
-
-- About/Legal
-Displays a dialog with some info about the prog and the binary itself plus
-the good old GPL.
-
-- Quit
-No comment.
-
-6.2 The Turntable GUI
----------------------
-
-The turntable GUI contains multiple controls and the realtime displays for each
-turntable.
-
-6.2.1 The Main Panel
---------------------
-
-With the text entry widget you can setup a name for the turntable. "Delete" 
-removes the turntable from the current set. The button beneath these two holds
-the name of the currently loaded audiofile. On creation it will hold "NONE". To
-load an audiofile click that button. Volume and Pitch... oh well ;)
-
-"Edit" will run the soundfile editor you configured in the Options-dialog with
-the soundfile loaded into the turntable as parameter. After editing the file you
-can make terminatorX reload the file by clicking the "Reload" button.
-
-6.2.2 The Trigger Panel
------------------------
-
-"Trigger!" actually triggers that turntable right now -> it will start playing 
-immediately if the audio engine is turned on. Stop will stop playback (of this
-turntable) of course. Autotrigger will cause the turntable to be triggered
-whenever you turn on the audio engine. Loop en- or disables the looping of that
-turntable.
-
-6.2.2.1 Syncing Turntables
---------------------------
-
-Let's start off with an example: Say you have two drumloops and one bassline
-loaded in three turntables. Of course you want these samples to be triggered
-at the same time but you don't want to invest time to cut them to the exact 
-length. Therefore you decide which of the drumloops to make the sync master. 
-You'll have to do this before you enable the audio engine (for now). Only one
-turntable can be the sync master. Now you can make the other two sync clients
-which will cause them to be (re-)triggered whenever the master is
-(re-)triggered. The number you can select to the right of the "Sync Client"
-button sets the trigger delay for the button: if it's set to zero the turntable
-will be triggered with every master trigger, if it's set to 1 it'll be triggered
-every 2nd master trigger and so on.
-
-A nice side effect of this feature is: you can now scratch the second (sync
-client) drum loop and no matter whether you're scratching is good or not the
-beat will be triggered correctly again ;)
-
-
-6.2.3 The X- and Y-Control Panels
----------------------------------
-
-With these panels you can select which mouse axis (X = left to right, Y= up
-and down) controls which realtime parameter. Possible choices are
-o Scratching
-o Volume
-o Cutoff frequency for the lowpass filter
-o Feedback value for the echo
-o Nothing
-
-6.2.4 The Lowpass Panel
------------------------
-
-This panel contians the controls for the resonating lowpass filter. The
-"Resonance" and "Frequency" parameters control the actual filter and "Input
-Gain" enables you to preamp the signal in case the filter eats too much
-volume.
-
-6.2.5 The Echo Panel
---------------------
-
-Here you can en- and disable the echo-effect and set "Duration" and "Feedback"
-parameters. The duration parameter scales to the actual sample length: so if you
-set it to 0.5 you will hear the echo when the red playback cursor is half way 
-through the sample. This is true for samples that are shorter than
-terminatorX' maximum echo buffer size only.
-
-6.3 Grab Mode Operation
------------------------
-
-After pressing "Mouse Grab" terminatorX enters "grab mode". This mode actually
-locks the mouse (as this input is now used to control the realtime parameters)
-and therefore you'll have to know some mouse/keyboard shortcuts to control
-the software without the GUI:
-
-Press <ESC> to quit grab mode.
-
-Select the turntable with input focus:
-The first turntable to hold the input focus will be the first turntable. You
-can now use <TAB> or right mouse button to switch to the next turntable. 
-Alternativley you can use <F1> to <F12> to select turtntable 1 to 12.
-
-Now the turntable that has the focus is the one you will manipulate with your
-mouse and keyboard inputs: Note that you can actually map different functions
-to the mouse x/y axis - so what actually happens when you move your mouse
-depends on what you select on the x/y control panels for each turntable.
-
-Keyboard:
-<TAB>          select next turntable
-<F1> to <F12>  select turntable 1 to 12
-<RETURN>       triggers the turntable
-<BACSPACE>     stops the turntable
-<S>            toggles "Sync Client"
-<SPACE>                while pressed turntable speed is mapped to mouse speed
-               (scratching!)
-<ALT>          mute on/off
-<CTRL>         mute on/off (inverted)
-<F>            (> "fast") warp mode (while scratching)
-<W>            same as above but the audio will be muted while warping
-
-Mouse:
-left button    same as <SPACE> -> scratching (triggers the turntable when
-               stopped)
-right button   select next turntable
-middle button  mute on/off
-
-Scratching works as before: press <SPACE> or left mouse button to actually
-scratch -> now your mouse controls the turntables speed -> release <SPACE>
-to let that turntable spin at default speed again.
-
-6.4 Drag And Drop
------------------
-
-Since V3.55 terminatorX provides multiple DND-Drop-Targets for use with GNOME/
-gmc (gmc is the GNU Midnight Commander). You can now load an audiofile into
-an existing turntable by dragging an audiofile from a gmc-window and drop it 
-over a. the "file"-button (on the "main"-panel) or b. (the easier target ;)
-over the wavdisplay (the green on black widget that displays the audiodata).
-To add a file set (== to load the file into a *new* turntable) simply drop the
-audiofile over the "New Turntable" Button. To load a complete terminatorX-set
-simply drop the setfile (*.tX) over the "Load Set" button. DND does not work
-with KDE.
-
-6.5 The Sequencer
------------------
-
-Release 3.60 introduces the sequencer. It can record and play back events for
-the following parameters:
-
-Master volume & pitch, scratching, (turntable) volume & pitch, triggers,
-loop (on/off), sync client settings, muting and all lowpass and echo paramters.
-
-To record events simply press the Record button of the sequencer, then press
-the Play button. All actions (for sequencable parameters - see above) you now
-take will be recorded into the song list. Press the Stop and Play again to
-see/hear how terminatorX plays back the events recorded before. You can now
-record events again for e.g. another turntable or record other parameters for
-the same turntable - whatever you want to do. Recording events for parameters
-for wich events have been recorded before will result in dubbing: if you touch
-a parameter while recording, events previously recorded will be erased from the
-moment you touch the paramater until you stop recording.
-
-When recording long sequences/songs you can use the sequencer-scale to start
-recording/playback from any song-position you want. To record a single
-paramteter value at a certain position simply move the sequencer-scale to that
-position, press Record, set the parameter and press Stop again.
-
-There is no other the way to edit the sequencer events currently, but future
-releases may feature an event-list editor.
-
-7. Options/Configuration
-------------------------
-
-All configuration business now happens in the Options-dialog. The features
-that are not completely self-explaining do have tooltips. So in this README
-I will discuss the buffer settings and the sense-cycles-option only. 
-
-A word on the settings in general: your settings are stored in the file
-~/.terminatorX3rc.bin so if you think you completely messed up your settings
-you will have to exit terminatorX - delete this file - and then re-run 
-terminatorX with the default settings.
-
-TerminatorX renders audio blockwise. If you want to have near-realtime operation
-you need to have really small blocks. The values of these blocks can be 
-influenced via the "buffer size" option. The setting you select actually results
-in a 2^x blocksize (size-setting == 8 -> true buffer size in bytes is 2^8=256).
-
-The problem is the smaller the value you select is the faster your machine has
-to be. So if you here "clicks", or "drops" in audio output that are not related
-to your sample-material you will have to increase the buffer size. On the 
-other hand if you believe terminatorX does not react fast enought you have to
-decrease this parameter. The default value is 8, but as my machine handles 7
-nicely (with --enhance-scheduler and root privileges) I use 7.
-
-Between rendering and outputing these blocks terminatorX checks for mouse 
-motion. The problem with mice is: they don´t report when they have stopped.
-This is why terminatorX assumes your mouse has stopped if there is no motion
-reported for certain amount of render/output-cycles. This value is configurable
-via the Stop-sense-cycles. If you decrease your buffsize of course you shorten
-the cycle time as well, therefore if you here strange stop/run behaviour of 
-the audio ouput while scratching after you decreased the buffersize you might 
-have to increase the stop-sense value too.
-
-Xinput Device: WARNING: Use this option *only* if you want to use an input 
-device other than your default-mouse for scratching. Selecting your default
-pointer will cause terminatorX to crash. See the "Using a turntable" section
-on the terminatorX homepage for details.
-
-With "Update Idle" / "Update Delay" you can configure GUI resposivness: Higher
-"Update Idle" will cause the wav-display (position display) and flash-widgets
-to update less often. Higher "Update Delay" values will cause the parameter
-widgets to update less often.
-
-You can now enter the soundfile editor of your choice in the "Soundfile editor"
-field. This editor will be started when clicking the "Edit"-button in the 
-main panel of the vtt-gui. If you enter for example "myeditor" terminatorX will
-run "myeditor sample_in_vtt.wav".
-
-8. Further notes:
------------------
-
-You can find more on terminatorX operation and especially the mouse
-configuration on the terminatorX homepage: http://www.terminatorX.cx
-
-9. Contact/Homepage:
---------------------
+NEW: As the previous README was a pain to read I decided to move the
+documentation to an SGML "manual". This distribution contains that manual as a
+set of HTML files for easy browsing and a postscript version for printing.
 
-terminatorX's homepage:        http://www.terminatorX.cx
+Documentation on terminatorX included:
+--------------------------------------
 
-send comments, bug-reports, patches or scratches (see scratches section on the
-terminatorX homepage) to: alkoit00@fht-esslingen.de
+    o ./INSTALL             - Information on installing terminatorX
+    o ./README.GNOME        - Some hints on GNOME-integration
+    o ./README.PERFORMANCE  - Some hints on tuning terminatorX
+    o ./doc/index.html      - The index for the HTML version of the manual
+    o ./doc/manual.ps       - The postscript version of the manual
+    o ./COPYING             - The license
diff --git a/TODO b/TODO
index 6d3ca652fe5ea844d25ea03a659a1df7d4c08dae..c7bfc677dc44fc01afec137fc8d92c390aa35073 100644 (file)
--- a/TODO
+++ b/TODO
@@ -2,11 +2,9 @@ terminatorX TODO:
 
 These are the things I´d like to implement IF I have the time.
 
-- MIDI interface
+- MIDI interface (Josh Steiner is working on that)
 
-- stereo operation
-
-- support for LADSPA plugins
+- stereo operation (this is up next)
 
 - port Bennos mmap technology into the new code
 
@@ -14,14 +12,16 @@ These are the things I
 
 - a click filter for client triggers
 
-- create a fixed gtk+ theme for terminatorX
-
 - code cleanup: I guess this will be on this list until development has stalled.
 
 DONE:
 
 The following stuff has been on the list above and is now ipmlemented:
 
+[V3.7]
+
+- support for LADSPA plugins
+
 [V3.6]
 
 - sequencer is here :)
index 9e4db3102f92b47690210f723f0e175d4125a23b..736e1df5dfacdfab9e98248e0d823040a0123ed1 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT(src/tX_global.h)
-AM_INIT_AUTOMAKE(terminatorX,3.65)
+AM_INIT_AUTOMAKE(terminatorX,3.70)
 AM_CONFIG_HEADER(config.h)
 
 dnl AC_ARG_ENABLE(closedev, [  --enable-closedev       close audio device if not in use. [default=yes] ])
@@ -9,12 +9,12 @@ AC_ARG_ENABLE(mpg123, [  --enable-mpg123         use mpg123 as input converter.
 dnl AC_ARG_ENABLE(wavonly,  [  --enable-wavonly        enable the builtin wav routines. (no sox/mpg123) ])
 AC_ARG_ENABLE(scheduler,[  --enable-scheduler      enable rt-scheduling (req. root-priv). [default=yes] ])
 AC_ARG_ENABLE(debug,    [  --enable-debug          enable debug output. [default=no] ])
-AC_ARG_ENABLE(flash,    [  --enable-flash          enable flashes. [default=yes] ])
+dnl AC_ARG_ENABLE(flash,    [  --enable-flash          enable flashes. [default=yes] ])
 AC_ARG_ENABLE(3dnow,    [  --enable-3dnow          enables 3DNow! support. [default=no] ])
 dnl AC_ARG_ENABLE(benchmark,[  --enable-benchmark      creates a non-functional test version [default=no] ])
 AC_ARG_ENABLE(wav,          [  --enable-wav            enables the builtin wav-loader [default=yes] ])
-AC_ARG_ENABLE(dial,         [  --enable-dial           use dials instead of scales for effects [default=yes] ])
-AC_ARG_ENABLE(bigdial,      [  --enable-bigdial        use BIG dials [default=yes] ])
+dnl AC_ARG_ENABLE(dial,         [  --enable-dial           use dials instead of scales for effects [default=yes] ])
+dnl AC_ARG_ENABLE(bigdial,      [  --enable-bigdial        use BIG dials [default=yes] ])
 dnl AC_ARG_ENABLE(dga2,     [  --enable-dga2           use DGA2 instead of DGA1. (experimental) [default=no] ])
 
 dnl Checks for programs.
@@ -28,13 +28,13 @@ AC_PROG_RANLIB
 dnl Checks for libraries.
 AC_CHECK_LIB(m, floor,, AC_MSG_ERROR([** math-lib not installed or broken **]))
 AC_CHECK_LIB(pthread, pthread_mutex_lock,, AC_MSG_ERROR([** POSIX threads not installed or broken **]))
-AM_PATH_GTK(1.2.0, , AC_MSG_ERROR([** GTK 1.2.0 not installed or broken **]))
+AM_PATH_GTK(1.2.5, , AC_MSG_ERROR([** GTK 1.2.0 not installed or broken **]))
 dnl AM_PATH_GLIB(1.2.0, , AC_MSG_ERROR([** GLIB 1.2.0 not installed or broken **]))
 
 dnl Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS(fcntl.h limits.h malloc.h sys/ioctl.h unistd.h)
-AC_CHECK_HEADERS(ladspa.h,, AC_MSG_ERROR([** couldn't find ladspa.h - get it from http://www.ladspa.org **]))
+AC_CHECK_HEADERS(ladspa.h,, AC_MSG_ERROR([** couldn't find ladspa.h - install the ladspa SDK - get it from http://www.ladspa.org **]))
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 AC_C_BIGENDIAN
@@ -121,4 +121,4 @@ AC_CHECK_LIB(Xxf86dga, XF86DGAQueryExtension,, AC_MSG_ERROR([** DGA not installe
 if test "$enable_dga2" = yes; then
        AC_CHECK_LIB(Xxf86dga, XDGASelectInput,, AC_MSG_ERROR([** DGA2 not installed. Try using dga1 instead. **]), $X_LIBS $X_PRE_LIBS -lXext -lX11 $X_EXTRA_LIBS)
 fi
-AC_OUTPUT(Makefile src/Makefile gnome-support/Makefile src/gui_icons/Makefile src/smallknob/Makefile)
+AC_OUTPUT(Makefile src/Makefile gnome-support/Makefile src/gui_icons/Makefile src/smallknob/Makefile doc/Makefile)
index e61952648e2d2432d7438fe8e2a26de9745ca040..8853119d727b20dc3c998a000397875620b2d61c 100644 (file)
@@ -188,11 +188,10 @@ int parse_args(int *argc, char **argv)
 int main(int argc, char **argv)
 {
        FILE *gtk_rc_file;
+       
+       fprintf(stderr, "%s - Copyright (C) 1999, 2000 by Alexander König\n", VERSIONSTRING);
 
-#ifndef WIN32
-       fprintf(stderr, "%s, Copyright(C)1999 Alexander König, alkoit00@fht-esslingen.de\n", VERSIONSTRING);
-#else
-        fprintf(stderr, "%s, Copyright(C)1999 Alexander König, alkoit00@fht-esslingen.de\n", VERSIONSTRING);
+#ifdef WIN32
         setenv ("CYGWIN", "binmode");
 #endif
        
index b6ef5e335debaee4b0817e3e7cd12677c56ba581..028bb8ed35e67b5ff25ecb7caa0ee0759a9cc5f8 100644 (file)
@@ -63,7 +63,7 @@ void* writer_thread(void *parm)
        return NULL;
 }
 
-int audiodevice :: eat(int16_t *buffer)
+void audiodevice :: eat(int16_t *buffer)
 {
        if (pthread_mutex_trylock(&stop_mutex))
        {
@@ -195,7 +195,7 @@ audiodevice :: audiodevice()
 }
 
 #ifndef USE_WRITER_THREAD
-int audiodevice :: eat(int16_t *buffer)
+void audiodevice :: eat(int16_t *buffer)
 {
 #ifdef BIG_ENDIAN_MACHINE
        swapbuffer (buffer, samples);
index a2d1cc1bc832cf55876236aaca711baeb279ce0d..6373084c9a645190c905237fe8e693501bdb4965 100644 (file)
@@ -49,7 +49,7 @@ class audiodevice
        
        int getblocksize();
        
-       int eat(int16_t*);
+       void eat(int16_t*);
        
        audiodevice();
 
index 0056ac36f6a735acaba4f3b39adb6c875da15b8e..0a528381a0b9773d3e97a11591b801a3c0c29259 100644 (file)
@@ -85,8 +85,6 @@ GtkWidget *but_both;
 
 GtkWidget *sound_editor;
 
-GtkAdjustment *gui_wrap;
-
 GtkTooltips *opt_tips;
 
 int opt_hidden=0;
@@ -110,18 +108,12 @@ void apply_options()
        
        globals.mouse_speed=mouse_speed->value;
        globals.tooltips=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tooltips));
+       if (globals.tooltips) gtk_tooltips_enable(gui_tooltips);
+       else gtk_tooltips_disable(gui_tooltips);
+       
        globals.show_nag=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(show_nag));
        globals.update_idle=(int) update_idle->value;
-       globals.update_delay=(int) update_delay_adj->value;
-       
-       i=(int) gui_wrap->value;
-       
-       if (i!=globals.gui_wrap)
-       {
-               globals.gui_wrap=i;
-               //rebuild_vtts(1);
-       }
-       
+       globals.update_delay=(int) update_delay_adj->value;     
        globals.flash_response=flash_response->value;
        
        if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(but_text))) globals.button_type=BUTTON_TYPE_TEXT;
@@ -326,7 +318,7 @@ void create_options()
 
        xinput_enable=gtk_check_button_new_with_label("XInput Device:");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(xinput_enable), globals.xinput_enable);          
-       gtk_tooltips_set_tip(opt_tips,  xinput_enable, "Enable this if you want to use other input than your default X-Pointer. You have to select your desired device as well.", NULL);
+       gtk_tooltips_set_tip(opt_tips,  xinput_enable, "CAREFUL! Enable this *only* if you want to use an input device than your default X-Pointer (yes, your mouse ;). You have to select your desired device as well. Selecting the default mouse pointer will crash terminatorX so if you want to use that keep this option disabled.", NULL);
        add_widget_fix(xinput_enable);
        
        if (strlen(globals.xinput_device)>0)    
@@ -419,16 +411,7 @@ void create_options()
        add_widget_dyn(item);
        
        end_box();
-       
-       begin_box();
-       
-       add_expl("Max. Number of Vtts per Column:  ");
-       gui_wrap=GTK_ADJUSTMENT(gtk_adjustment_new(globals.gui_wrap, 1, 10, 1, 1, 1));
-       item=gtk_spin_button_new(gui_wrap, 1.0, 0);
-       add_widget_dyn(item);
-       
-       end_box();
-       
+
        begin_box();
        
        add_expl("Buttons as ");
index 93d5f780489b9f5bfa66a67897a1b126509d6db3..0cce113590ac61190ee8bc99f668615927d16372 100644 (file)
@@ -74,7 +74,7 @@ int new_grab_mouse=0;
 int want_recording=0;
 int is_recording=0;
 
-int grab_mouse(int newstate)
+void grab_mouse(int newstate)
 {
        new_grab_mouse=newstate;
 }
index 932365d219072cbf0adb51c9cd1fe68c044936ea..c82b0cb4f026c1b5360f296a6da11e2ea1010fc9 100644 (file)
@@ -27,7 +27,7 @@
 extern int run_engine();
 extern int stop_engine();
 
-extern int grab_mouse(int);
+extern void grab_mouse(int);
 
 #define ENG_ERR 4
 
index 6db51a47c032e14d3d15e8761dd4c539d8004d06..1ced4a065456de0ca5e35c552739b933427ed39c 100644 (file)
@@ -38,7 +38,7 @@ tX_event :: tX_event (FILE *input)
        }
 }
 
-int tX_event :: store (FILE *output)
+void tX_event :: store (FILE *output)
 {
        int res=0;
        unsigned int persistence_id;
index b72a7f80d80a01678308d1c9d9346b354602ace8..015b74fdc1a7a2427e6ff28dd42d417ab5d0b7f1 100644 (file)
@@ -44,7 +44,7 @@ class tX_event
                        sp=sp_in;
                }
        tX_event(FILE *input);
-       int store(FILE *output);
+       void store(FILE *output);
 
        tX_seqpar *get_sp() { return sp; }
        u_int32_t get_timestamp() { return timestamp; }
index b2a1622e102fa494559ebbf5792d9fda12ed00a1..ef2b8ae223a694cf71799708048779b55530f5bc 100644 (file)
@@ -1,4 +1,5 @@
 #include "tX_extdial.h"
+#include <string.h>
 
 #define WID_DYN TRUE, TRUE, 0
 #define WID_FIX FALSE, FALSE, 0
index df8a12b666b9b73c567448227eaecf0d6c23fda6..5e804d0a8974c29d3cf7ee99f1f1da794c38d744 100644 (file)
@@ -25,6 +25,8 @@ class tX_extdial
        tX_extdial(const char *l, GtkAdjustment *a);
        ~tX_extdial();
        GtkWidget *get_widget() { return mainbox; };
+       GtkWidget *get_dial() { return dial; }
+       GtkWidget *get_entry() { return entry; }
        
        static GtkSignalFunc f_entry(GtkWidget *w, tX_extdial *ed);
        static GtkSignalFunc f_adjustment(GtkWidget *w, tX_extdial *ed);
index cd3e9b8dfeb0f771ba4162f2c35a65d84ad1441b..f7c2351888641d321a24ab39963124ebde1958b5 100644 (file)
@@ -46,8 +46,8 @@ void LADSPA_Plugin :: init ()
        
        if (!ladspa_path_ptr) 
        {
-               fprintf(stderr, "tX: Warning: LADSPA_PATH not set. Trying /usr/lib/ladspa.\n");
-               strcpy(ladspa_path, "/usr/lib/ladspa");
+               fprintf(stderr, "tX: Warning: LADSPA_PATH not set. Trying /usr/lib/ladspa:/usr/local/lib/ladspa.\n");
+               strcpy(ladspa_path, "/usr/lib/ladspa:/usr/local/lib/ladspa");
        }
        else strcpy(ladspa_path, ladspa_path_ptr);
        
index dcf550ae44792f7a811eb61663f1e1ae0c84d694..741bab750d39b5aba48b4a0390c9f6acad18eb01 100644 (file)
@@ -99,7 +99,7 @@ gint update_tag;
 Window xwindow;
 #define WID_DYN TRUE, TRUE, 0
 #define WID_FIX FALSE, FALSE, 0
-extern int add_vtt(GtkWidget *ctrl, GtkWidget *audio, char *fn);
+extern void add_vtt(GtkWidget *ctrl, GtkWidget *audio, char *fn);
 extern void recreate_gui(vtt_class *vtt, GtkWidget *daddy);
 extern void destroy_gui(vtt_class *vtt);
 extern void gui_show_frame(vtt_class *vtt, int show);
@@ -126,6 +126,13 @@ int last_grab_status=0;
 
 void tx_note(const char *message);
 
+GtkTooltips *gui_tooltips=NULL;
+
+void gui_set_tooltip(GtkWidget *wid, char *tip)
+{
+       gtk_tooltips_set_tip(gui_tooltips, wid, tip, NULL);
+}
+
 void turn_audio_off(void)
 {
        if (audioon) 
@@ -786,7 +793,7 @@ GtkSignalFunc sequencer_move(GtkWidget *wid, void *d)
        gtk_box_pack_end(GTK_BOX(smaller_box), dummy, WID_FIX);\
        gtk_widget_show(dummy);\
 
-int create_mastergui(int x, int y)
+void create_mastergui(int x, int y)
 {
        GtkWidget *main_vbox;
        GtkWidget *right_hbox;
@@ -803,7 +810,8 @@ int create_mastergui(int x, int y)
                { "text/uri-list", 0, 0}
        };
        static gint n_drop_types = sizeof (drop_types) / sizeof(drop_types[0]);
-               
+       
+       gui_tooltips=gtk_tooltips_new();
 
        main_window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
@@ -847,18 +855,21 @@ int create_mastergui(int x, int y)
        dummy=tx_xpm_button_new(TX_ICON_POWER,"Power ", 1);
        connect_button(dummy,audio_on, NULL);
        gtk_box_pack_start(GTK_BOX(control_box), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Turn the audio engine on/off.");
        gtk_widget_show(dummy);
        engine_btn=dummy;
        
        grab_button=tx_xpm_button_new(TX_ICON_GRAB, "Mouse Grab ", 1);
        gtk_box_pack_start(GTK_BOX(control_box), grab_button, WID_FIX);
        connect_button(grab_button, grab_on, NULL);
+       gui_set_tooltip(grab_button, "Enter the mouse grab mode operation. Press <ESCAPE> to exit grab mode.");
        gtk_widget_show(grab_button);
 
        dummy=gtk_check_button_new_with_label("Record");
        rec_btn=dummy;
        connect_button(dummy,tape_on, NULL);
        gtk_box_pack_start(GTK_BOX(control_box), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Record the audio the terminatorX' audio engine renders. You will be prompted to enter a name for the target wav-file.");
        gtk_widget_show(dummy);
        
 /*     dummy=gtk_label_new("Volume:");
@@ -885,6 +896,7 @@ int create_mastergui(int x, int y)
        gtk_scale_set_digits(GTK_SCALE(dummy), 2);
        gtk_scale_set_value_pos(GTK_SCALE(dummy), GTK_POS_LEFT);
        gtk_box_pack_start(GTK_BOX(control_box), dummy, WID_DYN);
+       gui_set_tooltip(dummy, "Use this scale to adjust the master pitch (affecting *all* turntables).");
        gtk_widget_show(dummy);
 
        dummy=tx_xpm_label_box(TX_ICON_SEQUENCER, "Sequencer");
@@ -895,18 +907,21 @@ int create_mastergui(int x, int y)
        connect_button(dummy, seq_play, NULL);
        seq_play_btn=dummy;
        gtk_box_pack_start(GTK_BOX(sequencer_box), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Playback previously recorded events from the sequencer. This will turn on the audio engine automagically.");
        gtk_widget_show(dummy);
 
        dummy=tx_xpm_button_new(TX_ICON_STOP,"Stop ", 0);
        seq_stop_btn=dummy;
        connect_button(dummy, seq_stop, NULL);  
        gtk_box_pack_start(GTK_BOX(sequencer_box), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Stop the playback of sequencer events.");
        gtk_widget_show(dummy);
 
        dummy=tx_xpm_button_new(TX_ICON_RECORD,"Record ", 1);
        connect_button(dummy, seq_rec, NULL);
        seq_rec_btn=dummy;
        gtk_box_pack_start(GTK_BOX(sequencer_box), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Enable recording of *events* into the sequencer. All touched controls will be recorded. Existing events for the song-time recording will be overwritten for touched controls.");
        gtk_widget_show(dummy);
 
        dummy=gtk_label_new("Pos:");
@@ -928,6 +943,7 @@ int create_mastergui(int x, int y)
        gtk_signal_connect(GTK_OBJECT(seq_slider), "button-release-event", (GtkSignalFunc) seq_slider_released, NULL);
        gtk_scale_set_draw_value(GTK_SCALE(dummy), FALSE);
        
+       gui_set_tooltip(dummy, "Select the start position for the sequencer in song-time.");
        gtk_box_pack_start(GTK_BOX(sequencer_box), dummy, WID_DYN);
        gtk_widget_show(dummy);
 
@@ -961,6 +977,7 @@ int create_mastergui(int x, int y)
        dummy=gtk_button_new_with_label("Add Turntable");
        AddTable=dummy; 
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
+       gui_set_tooltip(dummy, "Click this button to add a new turntable to the current set.");
        gtk_widget_show(dummy);
 
        gtk_drag_dest_set (GTK_WIDGET (dummy), (GtkDestDefaults) (GTK_DEST_DEFAULT_MOTION |GTK_DEST_DEFAULT_HIGHLIGHT |GTK_DEST_DEFAULT_DROP),
@@ -976,6 +993,7 @@ int create_mastergui(int x, int y)
        LoadSet=dummy;
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
        gtk_widget_show(dummy);
+       gui_set_tooltip(dummy, "Click to load a previously saved terminatorX-set-file. As an alternative you can drop a set file over this button.");
        gtk_signal_connect(GTK_OBJECT(dummy), "clicked", GtkSignalFunc(load_tables), NULL);     
 
        gtk_drag_dest_set (GTK_WIDGET (dummy), (GtkDestDefaults) (GTK_DEST_DEFAULT_MOTION |GTK_DEST_DEFAULT_HIGHLIGHT |GTK_DEST_DEFAULT_DROP),
@@ -989,6 +1007,7 @@ int create_mastergui(int x, int y)
        SaveSet=dummy;
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
        gtk_widget_show(dummy);
+       gui_set_tooltip(dummy, "Click here to save the current set.");
        gtk_signal_connect(GTK_OBJECT(dummy), "clicked", GtkSignalFunc(save_tables), NULL);     
 
        add_sep();
@@ -1011,16 +1030,19 @@ int create_mastergui(int x, int y)
        dummy=gtk_button_new_with_label("Options");
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
        gtk_widget_show(dummy);
+       gui_set_tooltip(dummy, "Click here to configure terminatorX.");
        gtk_signal_connect (GTK_OBJECT(dummy), "clicked", (GtkSignalFunc) display_options, NULL);
 
        dummy=gtk_button_new_with_label("About/Legal");
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
        gtk_widget_show(dummy);
+       gui_set_tooltip(dummy, "Click here to read the license and to get some information about this binary.");
        gtk_signal_connect (GTK_OBJECT(dummy), "clicked", (GtkSignalFunc) mplcfitx, NULL);      
 
        dummy=gtk_button_new_with_label("Quit");
        gtk_box_pack_start(GTK_BOX(right_hbox), dummy, WID_FIX);
        gtk_widget_show(dummy);
+       gui_set_tooltip(dummy, "Click here to exit terminatorX.");
        gtk_signal_connect (GTK_OBJECT(dummy), "clicked", (GtkSignalFunc) quit, NULL);
        
        add_sep();              
@@ -1092,11 +1114,13 @@ int create_mastergui(int x, int y)
        
        dumadj=(GtkAdjustment*) gtk_adjustment_new(2.0-globals.volume, 0, 2, 0.001, 0.001, 0.01);
        volume_adj=dumadj;
+
        connect_adj(dumadj, master_volume_changed, NULL);       
        dummy=gtk_vscale_new(dumadj);
        gtk_scale_set_draw_value(GTK_SCALE(dummy), False);
        gtk_box_pack_end(GTK_BOX(small_box), dummy, WID_DYN);
        gtk_widget_show(dummy); 
+       gui_set_tooltip(dummy, "Adjust the master volume. This parameter will effect *all* turntables in the set.");
        
 #ifdef USE_FLASH       
        main_flash=gtk_tx_flash_new();
@@ -1109,6 +1133,9 @@ int create_mastergui(int x, int y)
        new_table(NULL, NULL); // to give the user something to start with ;)
 
        gtk_signal_connect (GTK_OBJECT(main_window), "delete-event", (GtkSignalFunc) quit, NULL);       
+       
+       if (globals.tooltips) gtk_tooltips_enable(gui_tooltips);
+       else gtk_tooltips_disable(gui_tooltips);
 }
 
 gfloat old_percent=-1;
index f221fa5d1c758f00e969d3cebfb83c18f7c9e4ae..f0c00f0a8a86bcbd3048cbfc84724bf7d84da244 100644 (file)
@@ -39,7 +39,7 @@ extern GtkAdjustment *pitch_adj;
 extern tX_seqpar_master_volume sp_master_volume;
 extern tX_seqpar_master_pitch sp_master_pitch;
 
-extern int create_mastergui(int x, int y);
+extern void create_mastergui(int x, int y);
 extern void wav_progress_update(gfloat percent);
 extern void note_destroy(GtkWidget *widget, GtkWidget *mbox);
 extern void tx_note(const char *message);
@@ -52,5 +52,7 @@ extern void seq_update();
 
 extern GtkWidget *control_parent;
 extern GtkWidget *audio_parent;
+extern GtkTooltips *gui_tooltips;
+extern void gui_set_tooltip(GtkWidget *wid, char *tip);
 
 #endif
index e2a9e5262488e43d13f014ff4eceee737be6ad42..8a20001590cf968ec4b7d98b469e9e5851719cbb 100644 (file)
@@ -96,7 +96,7 @@ int tX_sequencer :: trig_play()
 //#define SEQ_DEBUG 1
 //#define SEQ_DEBUG_MAX 1
 
-int tX_sequencer :: trig_stop()
+void tX_sequencer :: trig_stop()
 {
        list <tX_event *> :: iterator song_event;
        list <tX_event *> :: iterator temp_song_event;
index a01efea9c5a64b098922c548b15d83690075e023..8e2271ff2eb8a52dc5fdc2bf3734e1c38ea1a08e 100644 (file)
@@ -65,7 +65,7 @@ class tX_sequencer
        
        int trig_rec();
        int trig_play();
-       int trig_stop();
+       void trig_stop();
        
        tX_event *record_event(tX_seqpar *sp, float value);
 
index bfb0e25dd3400a5b9e12629c15122954f7665e69..6476031ab4c5f7cf3f3f16e31e1585a0ad48289d 100644 (file)
@@ -1258,7 +1258,7 @@ void vtt_class :: set_master_pitch(f_prec new_pitch)
        }
 }
 
-int vtt_class :: enable_saturate (int newstate)
+void vtt_class :: enable_saturate (int newstate)
 {
        do_saturate=newstate;
 }
@@ -1955,7 +1955,7 @@ int  vtt_class :: load_all_12(FILE* input, char *fname)
        return(res);
 }
 
-int add_vtt(GtkWidget *ctrl, GtkWidget *audio, char *fn)
+void add_vtt(GtkWidget *ctrl, GtkWidget *audio, char *fn)
 {
        vtt_class *hmmpg;
        hmmpg = new vtt_class(1);
index 4f44e1da29500ae910504d130843bf6e54ccc39e..cd5ae45d184943aa918448f7075dc2f1024dbebc 100644 (file)
@@ -266,7 +266,7 @@ class vtt_class
        static int set_mix_buffer_size(int);
        static void set_master_volume(f_prec);
        static void set_master_pitch(f_prec);
-       static int enable_saturate(int);
+       static void enable_saturate(int);
        static void focus_no(int);
        static void focus_next();
        static void unfocus();  
index fcb655cc6a5f4945923aed21078e260892858fd7..048453fc2e6e1b9a1251c2aaca1b57c559a7f5d0 100644 (file)
@@ -102,7 +102,7 @@ GtkSignalFunc trigger_prelis(GtkWidget *w)
        return(0);
 }
 
-int cancel_load_file(GtkWidget *wid, vtt_class *vtt)
+void cancel_load_file(GtkWidget *wid, vtt_class *vtt)
 {
        prelis_stop();
        
@@ -114,8 +114,6 @@ int quit_load_file(GtkWidget *wid, vtt_class *vtt)
 {
        //vtt->gui.file_dialog=NULL;
        //prelis_stop();
-       
-       
        return 1;
 }
 
@@ -652,14 +650,17 @@ void build_vtt_gui(vtt_class *vtt)
        nicer_filename(nice_name, vtt->filename);
        g->file = gtk_button_new_with_label(nice_name);
        gtk_widget_show(g->file);
+       gui_set_tooltip(g->file, "Click here to load an audiofile into this turntable. As an alternative you may drop an audiofile over this button or the audio-data display.");
        gtk_box_pack_start(GTK_BOX(tempbox), g->file, WID_DYN);
 
        g->edit=tx_xpm_button_new(TX_ICON_EDIT, "Edit", 0);
        gtk_widget_show(g->edit);
+       gui_set_tooltip(g->edit, "Click this button to run the soundfile editor for the audiofile loaded into this turntable. You can configure which soundfile editor to use in the Options dialog.");
        gtk_box_pack_start(GTK_BOX(tempbox), g->edit, WID_FIX);
        
        g->reload=tx_xpm_button_new(TX_ICON_RELOAD, "Reload", 0);
        gtk_widget_show(g->reload);
+       gui_set_tooltip(g->reload, "Click here to reload the audiofile loaded into this turntable.");
        gtk_box_pack_start(GTK_BOX(tempbox), g->reload, WID_FIX);
        
        dummy=gtk_vseparator_new();
@@ -672,6 +673,7 @@ void build_vtt_gui(vtt_class *vtt)
 
        g->x_control=gtk_button_new_with_label(vtt->x_par->get_name());
        gtk_widget_show(g->x_control);
+       gui_set_tooltip(g->x_control, "Select which parameter should be controlled for this turntable (in grab mode) by mouse motion (x-axis: left <-> right).");
        gtk_box_pack_start(GTK_BOX(tempbox), g->x_control, WID_DYN);
 
        dummy=gtk_label_new("Y:");
@@ -680,6 +682,8 @@ void build_vtt_gui(vtt_class *vtt)
        
        g->y_control=gtk_button_new_with_label(vtt->y_par->get_name());
        gtk_widget_show(g->y_control);
+       gui_set_tooltip(g->y_control, "Select which parameter should be controlled for this turntable (in grab mode) by mouse motion (x-axis: up <-> down).");
+
        gtk_box_pack_start(GTK_BOX(tempbox), g->y_control, WID_DYN);
 
        g->display=gtk_tx_new(vtt->buffer, vtt->samples_in_buffer);
@@ -716,13 +720,15 @@ void build_vtt_gui(vtt_class *vtt)
        g->name = gtk_entry_new_with_max_length(256);   
        gtk_entry_set_text(GTK_ENTRY(g->name), vtt->name);
        p->add_client_widget(g->name);
+       gui_set_tooltip(g->name, "Enter the turntable's name here.");
        gtk_widget_set_usize(g->name, 40, g->name->requisition.height);
        
        g->del=gtk_button_new_with_label("Delete");
+       gui_set_tooltip(g->del, "Click here to annihilate this turntable. All events recorded for this turntable will be erased, too.");
        p->add_client_widget(g->del);
        
-       g->show_audio=gtk_toggle_button_new_with_label("Show Audio");
-       p->add_client_widget(g->show_audio);
+//     g->show_audio=gtk_toggle_button_new_with_label("Show Audio");
+//     p->add_client_widget(g->show_audio);
                
        gtk_box_pack_start(GTK_BOX(g->control_subbox), p->get_widget(), WID_FIX);
                                
@@ -730,36 +736,44 @@ void build_vtt_gui(vtt_class *vtt)
        g->trigger_panel=p;
        
        g->trigger=gtk_button_new_with_label("Trigger!");
+       gui_set_tooltip(g->trigger, "Click here to trigger this turntable right now. If the audio engine is disabled this turntable will be triggerd as soon as the engine is turned on.");
        p->add_client_widget(g->trigger);
        
        g->stop=gtk_button_new_with_label("Stop.");
+       gui_set_tooltip(g->stop, "Stop this turntable's playback.");
        p->add_client_widget(g->stop);
        
        g->autotrigger=gtk_check_button_new_with_label("Auto");
        p->add_client_widget(g->autotrigger);
+       gui_set_tooltip(g->autotrigger, "If turned on, this turntable will be automagically triggered whenever the audio engine is turned on.");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->autotrigger), vtt->autotrigger);
        
        g->loop=gtk_check_button_new_with_label("Loop");
        p->add_client_widget(g->loop);
+       gui_set_tooltip(g->loop, "Enable this option to make the turntable loop the audio data.");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->loop), vtt->loop);
        
        g->sync_master=gtk_check_button_new_with_label("Master");
        p->add_client_widget(g->sync_master);
+       gui_set_tooltip(g->sync_master, "Click here to make this turntable the sync-master. All turntables marked as sync-clients will be (re-)triggered in relation to the sync-master. Note that only *one* turntable can be the sync-master.");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->sync_master), vtt->is_sync_master);
        
        g->sync_client=gtk_check_button_new_with_label("Client");
        p->add_client_widget(g->sync_client);
+       gui_set_tooltip(g->sync_client, "If enabled this turntable will be (re-)triggerd in relation to the sync-master turntable.");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->sync_client), vtt->is_sync_client);
        
        g->cycles=GTK_ADJUSTMENT(gtk_adjustment_new(vtt->sync_cycles, 0, 10.0, 1,1,1));
        dummy=gtk_spin_button_new(g->cycles, 1.0, 0);
        p->add_client_widget(dummy);
+       gui_set_tooltip(dummy, "Determines how often a sync-client turntable gets triggered. 0 -> this turntable will be triggered with every trigger of the sync-master table, 1 -> the table will be triggered every 2nd master trigger and so on.");
 
        gtk_box_pack_start(GTK_BOX(g->control_subbox), p->get_widget(), WID_FIX);
 
        dummy=gtk_button_new_with_label("FX");
        gtk_widget_show(dummy);
        g->fx_button=dummy;
+       gui_set_tooltip(g->fx_button, "Click here to load a LADSPA plugin. You will get a menu from which you can choose which plugin to load.");
        gtk_box_pack_start(GTK_BOX(g->control_subbox), dummy, WID_FIX);
        
        /* Lowpass Panel */
@@ -768,6 +782,7 @@ void build_vtt_gui(vtt_class *vtt)
        g->lp_panel=p;
                
        g->lp_enable=gtk_check_button_new_with_label("Enable");
+       gui_set_tooltip(g->lp_enable, "Click here to enable the built-in lowpass effect.");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->lp_enable), vtt->lp_enable);
        p->add_client_widget(vg_create_fx_bar(vtt, vtt->lp_fx, 0));
 
@@ -779,12 +794,15 @@ void build_vtt_gui(vtt_class *vtt)
 
        g->lp_gaind=new tX_extdial("Input Gain", g->lp_gain);
        p->add_client_widget(g->lp_gaind->get_widget());
+       gui_set_tooltip(g->lp_gaind->get_entry(), "Adjust the input gain. with this parameter you can either amplify or damp the input-signal for the lowpass effect.");
 
        g->lp_freqd=new tX_extdial("Frequency", g->lp_freq);
        p->add_client_widget(g->lp_freqd->get_widget());
+       gui_set_tooltip(g->lp_freqd->get_entry(), "Adjust the cutoff frequency of the lowpass filter. 0 is 0 Hz, 1 is 22.1 kHz.");
 
        g->lp_resod=new tX_extdial("Resonance", g->lp_reso);
        p->add_client_widget(g->lp_resod->get_widget());
+       gui_set_tooltip(g->lp_resod->get_entry(), "Adjust the resonance of the lowpass filter. This value determines how much the signal at the cutoff frequency will be amplified.");
 
        gtk_box_pack_start(GTK_BOX(g->control_subbox), p->get_widget(), WID_FIX);
 
@@ -798,15 +816,19 @@ void build_vtt_gui(vtt_class *vtt)
        g->ec_enable=gtk_check_button_new_with_label("Enable");
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(g->ec_enable), vtt->ec_enable);
        p->add_client_widget(g->ec_enable);
+       gui_set_tooltip(g->ec_enable, "Enable the built-in echo effect.");
 
        g->ec_length=GTK_ADJUSTMENT(gtk_adjustment_new(vtt->ec_length, 0, 1, 0.1, 0.01, 0.001));
        g->ec_feedback=GTK_ADJUSTMENT(gtk_adjustment_new(vtt->ec_feedback, 0, 1, 0.1, 0.01, 0.001));
 
        g->ec_lengthd=new tX_extdial("Duration", g->ec_length);
        p->add_client_widget(g->ec_lengthd->get_widget());
+       gui_set_tooltip(g->ec_lengthd->get_entry(), "Adjust the length of the echo buffer.");
+
 
        g->ec_feedbackd=new tX_extdial("Feedback", g->ec_feedback);
        p->add_client_widget(g->ec_feedbackd->get_widget());
+       gui_set_tooltip(g->ec_feedbackd->get_entry(), "Adjust the feedback of the echo effect. Note that a value of 1 will result in a constant signal.");
 
        gtk_box_pack_start(GTK_BOX(g->control_subbox), p->get_widget(), WID_FIX);
        
@@ -824,10 +846,13 @@ void build_vtt_gui(vtt_class *vtt)
        g->pan=GTK_ADJUSTMENT(gtk_adjustment_new(0, -1, 1, 0.1, 0.01, 0.001));
 
        g->pitchd=new tX_extdial("Pitch", g->pitch);
+       gui_set_tooltip(g->pitchd->get_entry(), "Adjust this turntable's pitch.");
+
        gtk_box_pack_start(GTK_BOX(tempbox2), g->pitchd->get_widget(), WID_FIX);
 
        g->pand=new tX_extdial("Pan", g->pan);
        gtk_box_pack_start(GTK_BOX(tempbox2), g->pand->get_widget(), WID_FIX);
+       gui_set_tooltip(g->pand->get_entry(), "SORRY. terminatorX does not yet support stereo yet. This parameter is plain fake.");
 
        tempbox2=gtk_hbox_new(FALSE,0);
        gtk_widget_show(tempbox2);
@@ -836,6 +861,8 @@ void build_vtt_gui(vtt_class *vtt)
        g->volume=GTK_ADJUSTMENT(gtk_adjustment_new(2.0-vtt->rel_volume, 0, 2, 0.01, 0.01, 0.01));
        dummy=gtk_vscale_new(GTK_ADJUSTMENT(g->volume)); 
        gtk_scale_set_draw_value(GTK_SCALE(dummy), False);
+       gui_set_tooltip(dummy, "Adjust this turntable's volume.");
+
        gtk_box_pack_start(GTK_BOX(tempbox2), dummy, WID_FIX);
        gtk_widget_show(dummy);
 
@@ -978,6 +1005,7 @@ void vg_create_fx_gui(vtt_class *vtt, vtt_fx_ladspa *effect, LADSPA_Plugin *plug
        }
 
        gtk_signal_connect(GTK_OBJECT(p->get_labelbutton()), "clicked", (GtkSignalFunc) vg_show_fx_info, (void *) effect);
+       gui_set_tooltip(p->get_labelbutton(), "Click here to learn more about this plugin.");
        effect->set_panel_widget(p->get_widget());
        effect->set_panel(p);
 
index e5ca844e601a2b2f8feb742960dbfc7268d7d6a7..98d7b48caded9999c619159dafcc0698b85f7fb9 100644 (file)
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
-#define VERSIONSTRING PACKAGE " V" VERSION
+#define VERSIONSTRING PACKAGE " Release " VERSION
 #else 
-#define VERSION "3.55"
-#define VERSIONSTRING "terminatorX V3.55"
+#define VERSION "3.70"
+#define VERSIONSTRING "terminatorX Release 3.70"
 #endif