KOssMixer Design Notes

I have written these notes for software designers who are interested. They are not intended to be a detailed design but they should provide some useful information on how I broke things up.


The main goal of this program was for me to learn something about KDE and Qt programming. The secondary goals were to provide an interesting application to the open source community and find out more about doing applications using Internet hosted repositories.

In order to generate the configuration files for the project, Kdevelop 2.0 was used. other tools were emacs and DDD with GDB. The specific sound card used was a SoundBlaster Live with linux kernel version 2.4.9.

Overall the design uses an object oriented approach to designing an application that is easy to enhance and maintain. In its current state, release 0.3 is fully functional although there are still some enhancements I plan to make.

Anyone who wishes to port this application to other operating systems and architectures is encouraged to do so. I will be happy to help and to include the code in future releases.

To Do List

File Description

The following list is of source files only. Configuration and makefiles are excluded.

kledbutton.cpp  kledbutton.h

This class is derived from KLed to make it act like a button.


This files has a few definitions that are used in several other parts of the program.

kossdocked.cpp kossdocked.h

This class is derived from KSystemTray to allow docking to the system tray.

kosshidedlg.cpp kosshidedlg.h

This class is derived from KDialog. It provides a dialog that self adjusts to the number of mixer controls available.

It allows the user to selectively hide or show a mixer control through the use of checkboxes. The checkbox labels are the displayed name which may or may not be the generic name provided by the driver. It is setup to provide colums of 5 entries but this can be changed through defines in kosscommon.h

kosslabelbutton.cpp kosslabelbutton.h

This class is derived from QLabel. It is used in KossStereoMixerElem to detect doubleclick on the name of the mixer control. This brings up a dialog that allows the user to change the displayed name for the control.

kossmixer.cpp kossmixer.h

This class subclasses KUniqueApplication in order to insure that there will only be one instance of the application. It is also the main application class.

kossmixerelem.cpp kossmixerelem.h

This class provides the visuals and behavior for a channel (left or right) of a particular mixer control.

kossmixerstereoelem.cpp kossmixerstereoelem.h

This class contains two KOssMixerElem classes and also the record and track buttons. It displays the control icons and text labels. In the case of a mono control, the right channel is hidden. For a control that is not capable of being used as a recording input, the record button is hidden.

kossmixerview.cpp kossmixerview.h

This class is the view class for the application which organizes the display of the various mixer controls. If the application were extended to operate with multiple sound cards, then one instance of this class would be used for each card.

kossmixerwin.cpp kossmixerwin.h

This class provides the main window as well as the menu and status bar. It also instantiates the KOssMixerView class. If the application were extended to operate with several sound cards, then this class would instantiate and maintain a list of views.

kossnamedlg.cpp kossnamedlg.h

This class is derived from KLineEditDlg. It provides access to some of the methods of the KLineEdit. This class is used to allow the user to type in a new name for a control.

ksystemtray.cpp ksystemtray.h

This class is a modification to the original KSystemTray. It allows easy access to the Quit menu item. This is used to popup a message box if the user has changed settings and has not saved them.


This is the startup function for the application. It also contains the KAboutData instance that is used for the help -> about and bug report facilities.