2007-06-13 19:39:38 +00:00
/ *
* Copyright ( c ) 2007 Pascal vd Heiden , www . codeimp . com
* This program is released under GNU General Public License
*
* 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 General Public License for more details .
*
* /
using System ;
using System.Collections ;
using System.Collections.Generic ;
using System.Globalization ;
using System.Text ;
using System.Windows.Forms ;
using System.IO ;
using System.Reflection ;
using CodeImp.DoomBuilder.Interface ;
using CodeImp.DoomBuilder.IO ;
2007-06-14 14:44:18 +00:00
using System.Collections.Specialized ;
2007-06-13 19:39:38 +00:00
namespace CodeImp.DoomBuilder
{
internal static class General
{
#region = = = = = = = = = = = = = = = = = = Constants
// Files and Folders
private const string SETTINGS_CONFIG_FILE = "Builder.cfg" ;
2007-06-14 14:44:18 +00:00
private const string GAME_CONFIGS_DIR = "Configurations" ;
2007-06-13 19:39:38 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = Variables
// Files and Folders
private static string apppath ;
private static string temppath ;
2007-06-14 14:44:18 +00:00
private static string configspath ;
2007-06-13 19:39:38 +00:00
// Main objects
private static MainForm mainwindow ;
private static Configuration settings ;
2007-06-14 14:44:18 +00:00
// Configurations
private static List < string > configfiles ;
private static List < string > confignames ;
2007-06-13 19:39:38 +00:00
#endregion
#region = = = = = = = = = = = = = = = = = = Properties
public static string AppPath { get { return apppath ; } }
public static string TempPath { get { return temppath ; } }
2007-06-14 14:44:18 +00:00
public static string ConfigsPath { get { return configspath ; } }
2007-06-13 19:39:38 +00:00
public static MainForm MainWindow { get { return mainwindow ; } }
public static Configuration Settings { get { return settings ; } }
#endregion
2007-06-14 14:44:18 +00:00
#region = = = = = = = = = = = = = = = = = = Startup
2007-06-13 19:39:38 +00:00
// Main program entry
public static void Main ( string [ ] args )
{
// Find application path
string dirpath = Path . GetDirectoryName ( Assembly . GetExecutingAssembly ( ) . GetName ( ) . CodeBase ) ;
Uri localpath = new Uri ( dirpath ) ;
apppath = Uri . UnescapeDataString ( localpath . AbsolutePath ) ;
// Temporary directory
temppath = Path . GetTempPath ( ) ;
2007-06-14 14:44:18 +00:00
// Configurations directory
configspath = Path . Combine ( apppath , GAME_CONFIGS_DIR ) ;
2007-06-13 19:39:38 +00:00
// Load configuration
if ( ! File . Exists ( Path . Combine ( apppath , SETTINGS_CONFIG_FILE ) ) ) throw ( new FileNotFoundException ( "Unable to find the program configuration \"" + SETTINGS_CONFIG_FILE + "\"." ) ) ;
settings = new Configuration ( Path . Combine ( apppath , SETTINGS_CONFIG_FILE ) , false ) ;
// Create main window
mainwindow = new MainForm ( ) ;
2007-06-14 15:35:37 +00:00
2007-06-13 19:39:38 +00:00
// Show main window
mainwindow . Show ( ) ;
2007-06-14 14:44:18 +00:00
mainwindow . Update ( ) ;
// Load game configurations
LoadConfigurations ( ) ;
2007-06-13 19:39:38 +00:00
// Run application from the main window
2007-06-14 14:44:18 +00:00
mainwindow . DisplayReady ( ) ;
2007-06-13 19:39:38 +00:00
Application . Run ( mainwindow ) ;
}
2007-06-14 14:44:18 +00:00
// This loads configurations
private static void LoadConfigurations ( )
{
Configuration cfg ;
string [ ] filenames ;
string fn ;
// Display status
mainwindow . DisplayStatus ( "Loading game configurations..." ) ;
// Make arrays
configfiles = new List < string > ( ) ;
confignames = new List < string > ( ) ;
// Go for all files in the configurations directory
filenames = Directory . GetFiles ( configspath , "*.cfg" , SearchOption . TopDirectoryOnly ) ;
foreach ( string filepath in filenames )
{
// Determine filename only
fn = Path . GetFileName ( filepath ) ;
try
{
// Try loading the configuration
cfg = new Configuration ( filepath , true ) ;
// Check for erors
if ( cfg . ErrorResult ! = 0 )
{
// Error in configuration
MessageBox . Show ( mainwindow , "Unable to load the game configuration file \"" + fn + "\".\n" +
"Error near line " + cfg . ErrorLine + ": " + cfg . ErrorDescription ,
Application . ProductName , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
else
{
// Add to lists
configfiles . Add ( fn ) ;
confignames . Add ( cfg . ReadSetting ( "game" , "<unnamed game>" ) ) ;
}
}
catch ( Exception )
{
// Unable to load configuration
MessageBox . Show ( mainwindow , "Unable to load the game configuration file \"" + fn + "\"." ,
Application . ProductName , MessageBoxButtons . OK , MessageBoxIcon . Error ) ;
}
}
}
2007-06-13 19:39:38 +00:00
#endregion
2007-06-14 15:35:37 +00:00
#region = = = = = = = = = = = = = = = = = = Terminate
// This terminates the program
public static void Terminate ( )
{
// Clean up
mainwindow . Dispose ( ) ;
// Save settings configuration
settings . SaveConfiguration ( Path . Combine ( apppath , SETTINGS_CONFIG_FILE ) ) ;
// Application ends here and now
Application . Exit ( ) ;
}
#endregion
2007-06-13 19:39:38 +00:00
}
}