root/src/apps/mediaplayer/MainApp.h
/*
 * MainApp.h - Media Player for the Haiku Operating System
 *
 * Copyright (C) 2006 Marcus Overhagen <marcus@overhagen.de>
 * Copyright (C) 2008 Stephan Aßmus <superstippi@gmx.de>
 *
 * Released under the terms of the MIT license.
 */
#ifndef __MAIN_APP_H
#define __MAIN_APP_H


#include <Application.h>
#include <Entry.h>

#include "MainWin.h"


enum  {
        M_NEW_PLAYER                            = 'nwpl',
        M_PLAYER_QUIT                           = 'plqt',
        M_SETTINGS                                      = 'stng',

        M_SHOW_OPEN_PANEL                       = 'swop',
        M_SHOW_SAVE_PANEL                       = 'swsp',
                // "target"             - This BMessenger will be sent the result message.
                // "message"    - This message will be sent back to the target, with
                //                              the additional fields that a BFilePanel provides.
                //                              If no result message is specified, the constants below
                //                              will be used.
                // "title"              - String that will be used to name the panel window.
                // "label"              - String that will be used to name the Default button.

        M_OPEN_PANEL_RESULT                     = 'oprs',
        M_SAVE_PANEL_RESULT                     = 'sprs',

        M_OPEN_PREVIOUS_PLAYLIST        = 'oppp',

        M_URL_RECEIVED                          = 'urrc'
};


#define NAME "MediaPlayer"


class BFilePanel;
class SettingsWindow;


class MainApp : public BApplication {
public:
                                                                MainApp();
        virtual                                         ~MainApp();

                        MainWin*                        NewWindow(BMessage* message = NULL);
                        int32                           PlayerCount() const;

private:
        virtual bool                            QuitRequested();
        virtual void                            ReadyToRun();
        virtual void                            RefsReceived(BMessage* message);
        virtual void                            ArgvReceived(int32 argc, char** argv);
        virtual void                            MessageReceived(BMessage* message);

private:
                        void                            _ShowSettingsWindow();
                        void                            _BroadcastMessage(const BMessage& message);

                        void                            _ShowOpenFilePanel(const BMessage* message);
                        void                            _ShowSaveFilePanel(const BMessage* message);
                        void                            _ShowFilePanel(BFilePanel* panel,
                                                                        uint32 command, const BMessage* message,
                                                                        const char* defaultTitle,
                                                                        const char* defaultLabel);

                        void                            _HandleOpenPanelResult(
                                                                        const BMessage* message);
                        void                            _HandleSavePanelResult(
                                                                        const BMessage* message);
                        void                            _HandleFilePanelResult(BFilePanel* panel,
                                                                        const BMessage* message);

                        void                            _StoreCurrentPlaylist(
                                                                        const BMessage* message) const;
                        status_t                        _RestoreCurrentPlaylist(
                                                                        BMessage* message) const;

                        void                            _InstallPlaylistMimeType();

private:
                        int32                           fPlayerCount;
                        SettingsWindow*         fSettingsWindow;

                        BFilePanel*                     fOpenFilePanel;
                        BFilePanel*                     fSaveFilePanel;
                        entry_ref                       fLastFilePanelFolder;

                        bool                            fAudioWindowFrameSaved;
                        bigtime_t                       fLastSavedAudioWindowCreationTime;
};

extern MainApp* gMainApp;
extern const char* kAppSig;

#endif  // __MAIN_APP_H