/*
 * This source file is part of KEOS (Free 3D Engine)
 * For the latest info, see http://www.keosengine.org/
 * E-mails : thierry.vouriot@keosengine.org, yeri@keosengine.org
 * 
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation; either version 2 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with
 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 * Place - Suite 330, Boston, MA 02111-1307, USA, or go to
 * http://www.gnu.org/copyleft/lesser.txt.
 *
 */

#include "KeosPlatformManager.h"

#include "KeosDynLibManager.h"
#include "KeosDynLib.h"


namespace Keos {

    //=======================================================================
    // CPlatformManager implementation
    //=======================================================================

    //-----------------------------------------------------------------------
    CPlatformManager::CPlatformManager()
    {
        // Load library
        CDynLib* lib = CDynLibManager::Instance().Load(KEOS_PLATFORM_LIB);

        m_pfCreateTimer = (DLL_CREATETIMER)lib->GetSymbol("createTimer");
        m_pfCreateConfigDialog = (DLL_CREATECONFIGDIALOG)lib->GetSymbol("createPlatformConfigDialog");
        m_pfCreateErrorDialog = (DLL_CREATEERRORDIALOG)lib->GetSymbol("createPlatformErrorDialog");

        m_pfDestroyTimer = (DLL_DESTROYTIMER)lib->GetSymbol("destroyTimer");
        m_pfDestroyConfigDialog = (DLL_DESTROYCONFIGDIALOG)lib->GetSymbol("destroyPlatformConfigDialog");
        m_pfDestroyErrorDialog = (DLL_DESTROYERRORDIALOG)lib->GetSymbol("destroyPlatformErrorDialog");
    }
   
    //-----------------------------------------------------------------------
    CTimer* CPlatformManager::CreateTimer()
    {
        // Delegate
        CTimer* pTimer;
        m_pfCreateTimer(&pTimer);
        return pTimer;
    }

    //-----------------------------------------------------------------------
    void CPlatformManager::DestroyTimer(CTimer* timer)
    {
        m_pfDestroyTimer(timer);
    }

    //-----------------------------------------------------------------------
    IConfigDialog* CPlatformManager::CreateConfigDialog()
    {
        IConfigDialog* pdlg;
        m_pfCreateConfigDialog(&pdlg);
        return pdlg;
    }

    //-----------------------------------------------------------------------
    IErrorDialog* CPlatformManager::CreateErrorDialog()
    {
        IErrorDialog* pdlg;
        m_pfCreateErrorDialog(&pdlg);
        return pdlg;
    }

    //-----------------------------------------------------------------------
    void CPlatformManager::DestroyConfigDialog(IConfigDialog* pDlg)
    {
        m_pfDestroyConfigDialog(pDlg);
    }

    //-----------------------------------------------------------------------
    void CPlatformManager::DestroyErrorDialog(IErrorDialog* pDlg)
    {
        m_pfDestroyErrorDialog(pDlg);
    }
    
} // namespace Keos
