Revision 1 (by moose, 2006/03/06 10:00:33) Initial Import
#ifndef __MADAPP_H__
#define __MADAPP_H__

//#include <qt.h>
#include <qapplication.h>
#include <qmap.h>
#include <qfileinfo.h>

#include "MadPlugin.h"
#include "MadConf.h"

#include "MadMainWindow.h"

class MediaLibrary;
class FileInfo;

class MadDBHandler;
class MadDBConnection;
typedef QMap<QString, MadDBHandler *> MadDBMap;

class MadApp : public QApplication {
	Q_OBJECT

	public:
		MadApp (int &argc, char **argv);
		~MadApp ()
		{
			for (MadPluginInstance *p = instances.first(); p; p = instances.next())
				delete p;
			
			delete main_window;
			delete conf;
		}
		MadMainWindow *mainWidget() { return main_window; }

		//MadConf *getConf() { return _conf; }

		//MediaLibrary *getMediaLibrary() { return media_library; }
		bool setMediaLibrary(MediaLibrary *ml)
		{
			if(media_library)
				return false;

			media_library = ml;
			return true;
		}

		FileInfo *getFileInfo(const char *); // FileInfo returns tags and whatnot.
		bool registerFileInfoHandler();
		
		void rescanPlugins();
		
		bool disablePlugin(const char *name);
		bool enablePlugin(const char *name);
		
		bool installPlugin(const char *path);
		bool uninstallPlugin(const char *name);
		
		int pluginId(const char *name);
		
		MadDBConnection *getDB(const char *name);
		bool registerDBHandler(const char *name, MadDBHandler *hndl);
		bool unregisterDBHandler(const char *name);
		
		MadDBMap &getDBMap() { return dbmap; }
		
		MadMainWindow * const &mw;
		MadConf * const &conf;
		MediaLibrary * const &ml;
		
	private:
		
		MadMainWindow *main_window;
		MadConf *_conf;
		MediaLibrary *media_library;
	
	
		MadPluginMap plugins;
		MadPluginInstanceList instances;

		MadDBMap dbmap;
	
		bool LoadPlugins();
		bool LoadPlugin(QFileInfo);
};

extern MadApp *app;

#endif /* __MADAPP_H__ */