diff Plugins/Input/modplug/gui/main.cpp @ 278:37316876ef6e trunk

[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
author chainsaw
date Sat, 10 Dec 2005 14:31:13 -0800
parents
children 9d393eabf984
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/Input/modplug/gui/main.cpp	Sat Dec 10 14:31:13 2005 -0800
@@ -0,0 +1,293 @@
+/*
+ * Initial main.c file generated by Glade. Edit as required.
+ * Glade will not overwrite this file.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <libintl.h>
+
+#include "interface.h"
+#include "support.h"
+#include "main.h"
+
+#include <sstream>
+//open()
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+//mmap()
+#include <unistd.h>
+#include <sys/mman.h>
+#include <fstream>
+
+#include "../stddefs.h"
+#include <libmodplug/stdafx.h>
+#include <libmodplug/sndfile.h>
+#include "../archive/open.h"
+
+#define MAX_MESSAGE_LENGTH 4000
+
+GtkWidget *AboutWin    = NULL;
+GtkWidget *ConfigWin   = NULL;
+GtkWidget *InfoWin     = NULL;
+
+void ShowAboutWindow()
+{
+	if(!AboutWin)
+		AboutWin = create_About();
+	gtk_widget_show(AboutWin);
+}
+
+void ShowConfigureWindow(const ModplugXMMS::Settings& aProps)
+{
+	if(!ConfigWin)
+		ConfigWin = create_Config();
+	
+	if(aProps.mBits == 8)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "bit8"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "bit16"), TRUE);
+	
+	if(aProps.mFrequency == 11025)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp11"), TRUE);
+	else if (aProps.mFrequency == 22050)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp22"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "samp44"), TRUE);
+	
+	if(aProps.mChannels == 1)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "mono"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "stereo"), TRUE);
+	
+	if(aProps.mResamplingMode == 0)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampNearest"), TRUE);
+	else if(aProps.mResamplingMode == 1)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampLinear"), TRUE);
+	else if(aProps.mResamplingMode == 2)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampSpline"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "resampPolyphase"), TRUE);
+	
+	if(aProps.mNoiseReduction)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNR"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNR"), FALSE);
+	
+	if(aProps.mFastinfo)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxFastInfo"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxFastInfo"), FALSE);
+	
+	if(aProps.mUseFilename)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxUseFilename"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxUseFilename"), FALSE);
+	
+	if(aProps.mReverb)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxReverb"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxReverb"), FALSE);
+	
+	if(aProps.mMegabass)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxBassBoost"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxBassBoost"), FALSE);
+	
+	if(aProps.mSurround)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxSurround"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxSurround"), FALSE);
+	
+	if(aProps.mPreamp)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxPreamp"), TRUE);
+	else
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxPreamp"), FALSE);
+	
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxReverbDepth")),   aProps.mReverbDepth);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxReverbDelay")),   aProps.mReverbDelay);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxBassAmount")),    aProps.mBassAmount);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxBassRange")),     aProps.mBassRange);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxSurroundDepth")), aProps.mSurroundDepth);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxSurroundDelay")), aProps.mSurroundDelay);
+	gtk_adjustment_set_value(gtk_range_get_adjustment((GtkRange*)lookup_widget(ConfigWin, "fxPreampLevel")), aProps.mPreampLevel);
+	
+	if(aProps.mLoopCount < 0)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxLoopForever"), TRUE);
+	else if(aProps.mLoopCount == 0)
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxNoLoop"), TRUE);
+	else
+	{
+		gtk_toggle_button_set_active((GtkToggleButton*)lookup_widget(ConfigWin, "fxLoopFinite"), TRUE);
+		gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
+			(GtkSpinButton*)lookup_widget(ConfigWin, "fxLoopCount")), aProps.mLoopCount);
+	}
+	
+	gtk_widget_show(ConfigWin);
+}
+
+void ShowInfoWindow(const string& aFilename)
+{
+	if(!InfoWin)
+		InfoWin = create_Info();
+
+	uint32 lSongTime, lNumSamples, lNumInstruments, i;
+	string lInfo;
+	char lBuffer[33];
+	stringstream lStrStream(ios::out);   //C++ replacement for sprintf()
+
+	CSoundFile* lSoundFile;
+
+	Archive* lArchive;
+	string lShortFN;
+	uint32 lPos;
+
+	lPos = aFilename.find_last_of('/') + 1;
+	lShortFN = aFilename.substr(lPos);
+
+	//open and mmap the file
+	lArchive = OpenArchive(aFilename);
+	if(lArchive->Size() == 0)
+	{
+		delete lArchive;
+		return;
+	}
+
+	lSoundFile = new CSoundFile;
+	lSoundFile->Create((uchar*)lArchive->Map(), lArchive->Size());
+
+	lInfo = lShortFN;
+	lInfo += '\n';
+	lInfo += lSoundFile->GetTitle();
+	lInfo += '\n';
+
+	switch(lSoundFile->GetType())
+	{
+	case MOD_TYPE_MOD:
+		lInfo+= "ProTracker";
+		break;
+	case MOD_TYPE_S3M:
+		lInfo+= "Scream Tracker 3";
+		break;
+	case MOD_TYPE_XM:
+		lInfo+= "Fast Tracker 2";
+		break;
+	case MOD_TYPE_IT:
+		lInfo+= "Impulse Tracker";
+		break;
+	case MOD_TYPE_MED:
+		lInfo+= "OctaMed";
+		break;
+	case MOD_TYPE_MTM:
+		lInfo+= "MTM";
+		break;
+	case MOD_TYPE_669:
+		lInfo+= "669 Composer / UNIS 669";
+		break;
+	case MOD_TYPE_ULT:
+		lInfo+= "ULT";
+		break;
+	case MOD_TYPE_STM:
+		lInfo+= "Scream Tracker";
+		break;
+	case MOD_TYPE_FAR:
+		lInfo+= "Farandole";
+		break;
+	case MOD_TYPE_AMF:
+		lInfo+= "ASYLUM Music Format";
+		break;
+	case MOD_TYPE_AMS:
+		lInfo+= "AMS module";
+		break;
+	case MOD_TYPE_DSM:
+		lInfo+= "DSIK Internal Format";
+		break;
+	case MOD_TYPE_MDL:
+		lInfo+= "DigiTracker";
+		break;
+	case MOD_TYPE_OKT:
+		lInfo+= "Oktalyzer";
+		break;
+	case MOD_TYPE_DMF:
+		lInfo+= "Delusion Digital Music Fileformat (X-Tracker)";
+		break;
+	case MOD_TYPE_PTM:
+		lInfo+= "PolyTracker";
+		break;
+	case MOD_TYPE_DBM:
+		lInfo+= "DigiBooster Pro";
+		break;
+	case MOD_TYPE_MT2:
+		lInfo+= "MT2";
+		break;
+	case MOD_TYPE_AMF0:
+		lInfo+= "AMF0";
+		break;
+	case MOD_TYPE_PSM:
+		lInfo+= "PSM";
+		break;
+	default:
+		lInfo+= "Unknown";
+		break;
+	}
+	lInfo += '\n';
+
+	lSongTime = lSoundFile->GetSongTime();
+	lStrStream.clear();
+	lStrStream << (int)(lSongTime / 60) << ":";
+	if(lSongTime % 60 < 10)  //single digit for seconds?
+		lStrStream << '0';        //yes, so add a 0.
+	lStrStream << (int)(lSongTime % 60);
+
+	lStrStream << '\n';
+
+	lStrStream << (int)lSoundFile->GetMusicSpeed() << '\n';
+	lStrStream << (int)lSoundFile->GetMusicTempo() << '\n';
+	lStrStream << (int)(lNumSamples = lSoundFile->GetNumSamples()) << '\n';
+	lStrStream << (int)(lNumInstruments = lSoundFile->GetNumInstruments());
+	lStrStream << '\n';
+	lStrStream << (int)(lSoundFile->GetNumPatterns()) << '\n';
+	lStrStream << (int)lSoundFile->GetNumChannels();
+	lInfo += lStrStream.str();
+
+	gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_general"), lInfo.c_str());
+
+	lInfo = "";
+	for(i = 0; i < lNumSamples; i++)
+	{
+		lSoundFile->GetSampleName(i, lBuffer);
+		lInfo += lBuffer;
+		lInfo += '\n';
+	}
+	gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_samples"), lInfo.c_str());
+
+	lInfo = "";
+	for(i = 0; i < lNumInstruments; i++)
+	{
+		lSoundFile->GetInstrumentName(i, lBuffer);
+		lInfo += lBuffer;
+		lInfo += '\n';
+	}
+	gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_instruments"), lInfo.c_str());
+
+	char message[MAX_MESSAGE_LENGTH];
+	static int length = 0;
+	
+	//textbox = (GtkLabel*)lookup_widget(InfoWin, "info_message");
+	//gtk_text_backward_delete(textbox, length);
+	length = lSoundFile->GetSongComments(message, MAX_MESSAGE_LENGTH, 80);
+	if (length != 0) {
+		gtk_label_set_text((GtkLabel*)lookup_widget(InfoWin, "info_message"), message);
+	}
+	
+	//unload the file
+	lSoundFile->Destroy();
+	delete lSoundFile;
+	delete lArchive;
+
+	gtk_widget_show(InfoWin);
+}