QTfrontend/util/SDLInteraction.h
author koda
Fri, 06 Jan 2012 01:51:04 +0100
changeset 6551 a2f39cb9af62
parent 6170 2b1748161278
child 6585 6225b838a630
permissions -rw-r--r--
fix a couple of loose ends: sdl_mixer is informed of that OGG is provided by Tremor with its own macro, there is no more a segfault on Tremor cleanup, added new event type and timestamp entry for SDL, removed spurious characters from the japanese translation, uSound errors now are output with SDLTry, uSound doesn't need sound preloading any more
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     1
/*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 555
diff changeset
     2
 * Hedgewars, a free turn based strategy game
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 3697
diff changeset
     3
 * Copyright (c) 2007-2011 Andrey Korotaev <unC0Rr@gmail.com>
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     4
 *
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     8
 *
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    12
 * GNU General Public License for more details.
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    13
 *
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    17
 */
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    18
6168
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    19
/**
6170
2b1748161278 fix multiplayer page layout, doc/comment fixes
sheepluva
parents: 6168
diff changeset
    20
 * @file
6168
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    21
 * @brief SDLInteraction class definition
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    22
 */
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    23
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    24
#ifndef HEDGEWARS_SDLINTERACTION_H
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    25
#define HEDGEWARS_SDLINTERACTION_H
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    26
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2443
diff changeset
    27
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    28
#include <QMap>
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    29
#include <QStringList>
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    30
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2443
diff changeset
    31
#include "SDL_mixer.h"
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2443
diff changeset
    32
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    33
/**
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    34
 * @brief Class for interacting with SDL (used for music and keys)
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    35
 * 
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    36
 * @see <a href="http://en.wikipedia.org/wiki/Singleton_pattern">singleton pattern</a>
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    37
 */
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    38
class SDLInteraction
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    39
{
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
    40
1223
41d7283934c1 Hackish way to play music in frontend... to be fixed
unc0rr
parents: 1066
diff changeset
    41
private:
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    42
    /**
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    43
     * @brief Class constructor of the <i>singleton</i>.
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    44
     * 
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    45
     * Not to be used from outside the class,
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    46
     * use the static {@link HWDataManager::instance()} instead.
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    47
     * 
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    48
     * @see <a href="http://en.wikipedia.org/wiki/Singleton_pattern">singleton pattern</a>
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    49
     */
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    50
    SDLInteraction();
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    51
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    52
    /// Initializes SDL for sound output if needed.
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    53
    void SDLAudioInit();
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    54
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    55
    bool m_audioInitialized; ///< true if audio is initialized already
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    56
    Mix_Music * m_music; ///< pointer to the music channel of the mixer
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    57
    QString m_musicTrack; ///< path to the music track;
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    58
    bool m_isPlayingMusic; ///< true if music was started but not stopped again.
1223
41d7283934c1 Hackish way to play music in frontend... to be fixed
unc0rr
parents: 1066
diff changeset
    59
6167
728cabee2c9f simplified some stuff I wrote
sheepluva
parents: 6166
diff changeset
    60
    QMap<QString,Mix_Chunk*> * m_soundMap; ///< maps sound file paths to channels
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    61
1223
41d7283934c1 Hackish way to play music in frontend... to be fixed
unc0rr
parents: 1066
diff changeset
    62
public:
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    63
    /**
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    64
     * @brief Returns reference to the <i>singleton</i> instance of this class.
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    65
     *
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    66
     * @see <a href="http://en.wikipedia.org/wiki/Singleton_pattern">singleton pattern</a>
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    67
     *
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    68
     * @return reference to the instance.
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    69
     */
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    70
    static SDLInteraction & instance();
6164
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    71
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    72
    /// Class Destructor.
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2515
diff changeset
    73
    ~SDLInteraction();
6164
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    74
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    75
    /**
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    76
     * @brief Returns available (screen) resolutions.
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    77
     *
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    78
     * @return list of resolutions in the format WIDTHxHEIGHT.
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    79
     */
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2515
diff changeset
    80
    QStringList getResolutions() const;
6164
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    81
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    82
    /// Adds all available joystick controlls to the list of SDL keys.
2948
3f21a9dc93d0 Replace tabs with spaces using 'expand -t 4' command
unc0rr
parents: 2515
diff changeset
    83
    void addGameControllerKeys() const;
6164
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
    84
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    85
    /**
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    86
     * @brief Plays a sound file.
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    87
     *
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    88
     * @param soundFile path of the sound file.
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    89
     */
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    90
    void playSoundFile(const QString & soundFile);
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
    91
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    92
    /**
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    93
     * @brief Sets the music track to be played (or not).
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    94
     *
6168
6f301dac12ff fix an include; fix/add comments
sheepluva
parents: 6167
diff changeset
    95
     * @param musicFile path of the music file.
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    96
     */
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    97
    void setMusicTrack(const QString & musicFile);
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    98
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
    99
    /// Starts the background music if not already playing.
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
   100
    void startMusic();
6164
62aa418ed214 change SDL.h/SDL.cpp to use HWDataManager instead of poking around on the harddrive - also I added doc/comments to the class
sheepluva
parents: 4976
diff changeset
   101
6166
701c5b8fac56 finishing SDLInterface cleanup (wrt audio)
sheepluva
parents: 6165
diff changeset
   102
    /// Fades out and stops the background music (if playing).
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
   103
    void stopMusic();
555
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
   104
};
0376fdcc6322 Get possible screen resolutions from SDL library
unc0rr
parents:
diff changeset
   105
2402
edd12b259e7c revert to manual startup of frontend's OpenAL session (keeping voices' bug fixed)
koda
parents: 2399
diff changeset
   106
6165
6fe3e922246e moving and renaming SDLs.*, making it a singleton; cleaning up class responsibilties wrt SDLInteraction; some comments
sheepluva
parents: 6164
diff changeset
   107
#endif //HEDGEWARS_SDLINTERACTION_H
2515
51d3f4b6293a revert audio to use SDL_mixer -- also frontend uses it, so it needs sdlmixer sources
koda
parents: 2443
diff changeset
   108