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>
 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
 
 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.
 
 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
 - 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.
   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
   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.
   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>
 
 [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>
 
 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:
 -----------
 
 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.
                
                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
                --enable-3dnow
                
                This enables EXPERIMENTAL 3DNow! support. It seems as if the
@@ -107,11 +103,6 @@ Step 1: Configure terminatorX.
                
                Misc options:
                -------------
                
                Misc options:
                -------------
-               
-               --disable-dial
-               
-               The resulting binary will not use the new dial-widget, but
-               scales instead.
 
                --enable-closedev
                
 
                --enable-closedev
                
index 74c8553951a566a1a671ed478664a1d79f027659..57b6f9087abeead001d0c2d9454234b7230c69d0 100644 (file)
@@ -1,3 +1,3 @@
 AUTOMAKE_OPTIONS = foreign 
 AUTOMAKE_OPTIONS = foreign 
-SUBDIRS = src gnome-support
+SUBDIRS = src gnome-support doc
 SOURCES = README.GNOME README.PERFORMANCE
 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
 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!
 
 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.
 
 
 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
 
 
 - port Bennos mmap technology into the new code
 
@@ -14,14 +12,16 @@ These are the things I
 
 - a click filter for client triggers
 
 
 - 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:
 
 - 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 :)
 [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)
 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] ])
 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] ])
 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(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.
 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 **]))
 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)
 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
 
 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
 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;
 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
        
         setenv ("CYGWIN", "binmode");
 #endif
        
index b6ef5e335debaee4b0817e3e7cd12677c56ba581..028bb8ed35e67b5ff25ecb7caa0ee0759a9cc5f8 100644 (file)
@@ -63,7 +63,7 @@ void* writer_thread(void *parm)
        return NULL;
 }
 
        return NULL;
 }
 
-int audiodevice :: eat(int16_t *buffer)
+void audiodevice :: eat(int16_t *buffer)
 {
        if (pthread_mutex_trylock(&stop_mutex))
        {
 {
        if (pthread_mutex_trylock(&stop_mutex))
        {
@@ -195,7 +195,7 @@ audiodevice :: audiodevice()
 }
 
 #ifndef USE_WRITER_THREAD
 }
 
 #ifndef USE_WRITER_THREAD
-int audiodevice :: eat(int16_t *buffer)
+void audiodevice :: eat(int16_t *buffer)
 {
 #ifdef BIG_ENDIAN_MACHINE
        swapbuffer (buffer, samples);
 {
 #ifdef BIG_ENDIAN_MACHINE
        swapbuffer (buffer, samples);
index a2d1cc1bc832cf55876236aaca711baeb279ce0d..6373084c9a645190c905237fe8e693501bdb4965 100644 (file)
@@ -49,7 +49,7 @@ class audiodevice
        
        int getblocksize();
        
        
        int getblocksize();
        
-       int eat(int16_t*);
+       void eat(int16_t*);
        
        audiodevice();
 
        
        audiodevice();
 
index 0056ac36f6a735acaba4f3b39adb6c875da15b8e..0a528381a0b9773d3e97a11591b801a3c0c29259 100644 (file)
@@ -85,8 +85,6 @@ GtkWidget *but_both;
 
 GtkWidget *sound_editor;
 
 
 GtkWidget *sound_editor;
 
-GtkAdjustment *gui_wrap;
-
 GtkTooltips *opt_tips;
 
 int opt_hidden=0;
 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));
        
        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.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;
        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);          
 
        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)    
        add_widget_fix(xinput_enable);
        
        if (strlen(globals.xinput_device)>0)    
@@ -419,16 +411,7 @@ void create_options()
        add_widget_dyn(item);
        
        end_box();
        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 ");
        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 want_recording=0;
 int is_recording=0;
 
-int grab_mouse(int newstate)
+void grab_mouse(int newstate)
 {
        new_grab_mouse=newstate;
 }
 {
        new_grab_mouse=newstate;
 }
index 932365d219072cbf0adb51c9cd1fe68c044936ea..c82b0cb4f026c1b5360f296a6da11e2ea1010fc9 100644 (file)
@@ -27,7 +27,7 @@
 extern int run_engine();
 extern int stop_engine();
 
 extern int run_engine();
 extern int stop_engine();
 
-extern int grab_mouse(int);
+extern void grab_mouse(int);
 
 #define ENG_ERR 4
 
 
 #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;
 {
        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);
                        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; }
 
        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 "tX_extdial.h"
+#include <string.h>
 
 #define WID_DYN TRUE, TRUE, 0
 #define WID_FIX FALSE, FALSE, 0
 
 #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; };
        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);
        
        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) 
        {
        
        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);
        
        }
        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
 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);
 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);
 
 
 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) 
 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);\
 
        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;
 {
        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]);
                { "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);
 
 
        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);
        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);
        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);
        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:");
        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);
        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");
        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);
        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);
        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);
        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:");
        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);
        
        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);
 
        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);
        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),
        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);
        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),
        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);
        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();
        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);
        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);
        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);
        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();              
        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;
        
        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); 
        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();
        
 #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);       
        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;
 }
 
 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 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);
 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 GtkWidget *control_parent;
 extern GtkWidget *audio_parent;
+extern GtkTooltips *gui_tooltips;
+extern void gui_set_tooltip(GtkWidget *wid, char *tip);
 
 #endif
 
 #endif
index e2a9e5262488e43d13f014ff4eceee737be6ad42..8a20001590cf968ec4b7d98b469e9e5851719cbb 100644 (file)
@@ -96,7 +96,7 @@ int tX_sequencer :: trig_play()
 //#define SEQ_DEBUG 1
 //#define SEQ_DEBUG_MAX 1
 
 //#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;
 {
        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_rec();
        int trig_play();
-       int trig_stop();
+       void trig_stop();
        
        tX_event *record_event(tX_seqpar *sp, float value);
 
        
        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;
 }
 {
        do_saturate=newstate;
 }
@@ -1955,7 +1955,7 @@ int  vtt_class :: load_all_12(FILE* input, char *fname)
        return(res);
 }
 
        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);
 {
        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 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();  
        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);
 }
 
        return(0);
 }
 
-int cancel_load_file(GtkWidget *wid, vtt_class *vtt)
+void cancel_load_file(GtkWidget *wid, vtt_class *vtt)
 {
        prelis_stop();
        
 {
        prelis_stop();
        
@@ -114,8 +114,6 @@ int quit_load_file(GtkWidget *wid, vtt_class *vtt)
 {
        //vtt->gui.file_dialog=NULL;
        //prelis_stop();
 {
        //vtt->gui.file_dialog=NULL;
        //prelis_stop();
-       
-       
        return 1;
 }
 
        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);
        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);
        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);
        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();
        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);
 
        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:");
        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);
        
        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);
        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);
        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");
        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);
        
        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);
                                
                
        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!");
        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.");
        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);
        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);
        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);
        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);
        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);
        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;
 
        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 */
        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");
        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));
 
        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());
 
        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());
 
        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());
 
        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);
 
 
        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);
        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());
 
        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());
 
        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);
        
 
        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);
        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);
        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);
 
        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);
        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);
 
        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);
        }
 
        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);
 
        effect->set_panel_widget(p->get_widget());
        effect->set_panel(p);
 
index e5ca844e601a2b2f8feb742960dbfc7268d7d6a7..98d7b48caded9999c619159dafcc0698b85f7fb9 100644 (file)
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
-#define VERSIONSTRING PACKAGE " V" VERSION
+#define VERSIONSTRING PACKAGE " Release " VERSION
 #else 
 #else 
-#define VERSION "3.55"
-#define VERSIONSTRING "terminatorX V3.55"
+#define VERSION "3.70"
+#define VERSIONSTRING "terminatorX Release 3.70"
 #endif
 
 
 #endif