Mercurial > audlegacy
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); +}
