blob: 46a566415d553a866665f9730961eeb7d4ae2871 [file] [log] [blame]
/**
* projectM -- Milkdrop-esque visualisation SDK
* Copyright (C)2003-2004 projectM Team
*
* This library 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.1 of the License, or (at your option) any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* See 'LICENSE.txt' included within this release
*
*/
/**
* $Id: wxvisApp.cpp,v 1.6 2004/11/12 15:47:27 cvs Exp $
*
*/
#include <stdio.h>
#include <wx/wx.h>
#include <projectM-engine/projectM.hpp>
#include "wxvisApp.h"
#include "wxvisFrame.h"
#include "wxvisCanvas.h"
#ifdef DEBUG
FILE *debugFile = NULL;
#endif
projectM *globalPM = NULL;
IMPLEMENT_APP(wxvisApp)
BEGIN_EVENT_TABLE(wxvisApp,wxApp)
EVT_IDLE(wxvisApp::OnIdle)
END_EVENT_TABLE()
/** Parse command-line options and create the main wxvis windows */
bool wxvisApp::OnInit() {
#ifdef DEBUG
#ifndef WIN32
/** Open the debug file */
debugFile = fopen( "/tmp/wxvis.txt", "w" );
#else
/** Open the debug file */
debugFile = fopen( "c:\\wxvis.txt", "w" );
#endif /** __WXMAC__ */
#else
// debugFile = NULL;
#endif
#ifdef WIN32
/** Retrieve the key from the registry for the base installation directory */
installationRoot = (unsigned char *)malloc( sizeof( unsigned char ) * 1024 );
installationRoot[0] = '\0';
HKEY key;
if ( RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SOFTWARE\\Archaeoptics\\wxvis3D",
0, KEY_QUERY_VALUE, &key ) != ERROR_SUCCESS ) {
// MessageBox( NULL, "Failed to open registry key: SOFTWARE\\Archaeoptics\\wxvis\nHelp and NPR textures may be unavailable!", "projectM", MB_OK | MB_ICONEXCLAMATION );
sprintf( (char *)installationRoot, "%s", "c:\\Program Files\\Archaeoptics\\wxvis3D" );
} else {
DWORD installRootType = REG_SZ;
DWORD installRootSize = 1024;
LONG rv = RegQueryValueEx( key, "InstallRoot", NULL, &installRootType, installationRoot, &installRootSize );
if ( rv != ERROR_SUCCESS ) {
/** This section causes things to crash weirdly... */
// MessageBox( NULL, "Failed to query registry key: SOFTWARE\\Archaeoptics\\wxvis\nHelp and textures may be unavailable!", "projectM", MB_OK | MB_ICONEXCLAMATION );
/* char msg[128];
sprintf( msg, "Error code: %d", rv );
wxMessageBox( msg, "projectM", wxOK | wxICON_EXCLAMATION ); */
sprintf( (char *)installationRoot, "%s", "c:\\Program Files\\Archaeoptics\\wxvis3D" );
}
RegCloseKey( key );
}
#ifdef DEBUG2
fprintf( debugFile, "Installation Root: %s\n", installationRoot );
fflush( debugFile );
#endif /** DEBUG */
#else
installationRoot = NULL;
#endif /** WIN32 */
/** Empty out various structures before initialisation */
_visFrame = NULL;
/** Load the icon */
_icon = wxIcon( "ARCHAEOPTICS_ICON" );
/** Create the rendering frame */
wxPoint pt;
wxSize sz;
pt.x = 50; pt.y = 50;
sz.x = 640; sz.y = 480;
_visFrame = new wxvisFrame( this, wxString( "projectM" ), pt, sz );
_visFrame->canvas = new wxvisCanvas( _visFrame );
_visFrame->SetIcon( _icon );
_visFrame->Show( TRUE );
/** Check depth and stencil capabilities */
int depthBits = _visFrame->canvas->getDepthBits();
int stencilBits = _visFrame->canvas->getStencilBits();
if ( depthBits < 24 || stencilBits < 1 ) {
char msg[256];
sprintf( msg, "Depth and stencil bit settings are sub-optimal\nBlack and White Ink Rendering and Elevation Extraction\nmay not work correctly\nDepth Bits: %d\nStencil Bits: %d\n(Should be at least 24 and 1)", depthBits, stencilBits );
// wxMessageBox( msg, "projectM", wxOK | wxICON_EXCLAMATION );
}
#ifdef WIN32
/** Update file associations */
/** Create the base wxvis key */
int rv;
rv = RegCreateKey( HKEY_CLASSES_ROOT, "projectM", &rootAssociationKey );
rv = RegSetValue( rootAssociationKey, "", REG_SZ, "MilkDrop Preset", 0 );
/** This sets the command line for "projectM" */
char exename[256];
sprintf( exename, "%s\\wxvis.exe %%1", installationRoot );
rv = RegCreateKey( HKEY_CLASSES_ROOT, "projectM", &rootAssociationKey );
rv = RegSetValue( rootAssociationKey, "shell\\open\\command", REG_SZ, exename, MAX_PATH );
/** Set the icon */
char iconname[256];
sprintf( iconname, "%s\\archaeoptics_icon_64x64.ico", installationRoot );
rv = RegCreateKey( HKEY_CLASSES_ROOT, "projectM", &rootAssociationKey );
rv = RegSetValue( rootAssociationKey, "DefaultIcon", REG_SZ, iconname, MAX_PATH );
#endif
/** Check for a model name on the command line */
#ifdef DEBUG2
fprintf( debugFile, "argc: %d\n", argc );
fflush( debugFile );
#endif
if ( argc >= 2 ) {
if ( ( strstr( argv[1], ".milk" ) != NULL ) ||
( strstr( argv[1], ".MILK" ) != NULL ) ) {
/** Load a fixed preset */
}
}
return TRUE;
}
/** Shuts down the application */
void wxvisApp::shutdown() {
/** Free local resources */
if ( _visFrame ) {
_visFrame->canvas->Destroy();
_visFrame->Destroy();
}
#ifdef DEBUG2
fclose( debugFile );
#endif /** DEBUG */
exit( 0 );
}
void wxvisApp::OnIdle( wxIdleEvent &event ) {
if ( _visFrame ) {
_visFrame->canvas->Refresh( FALSE );
}
}