cynthiune.app-0.9.5/0000755000175000017500000000000010413174141013646 5ustar gurkangurkancynthiune.app-0.9.5/CynthiunePauseButton.h0000644000175000017500000000230210255322216020156 0ustar gurkangurkan/* CynthiunePauseButton.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEPAUSEBUTTON_H #define CYNTHIUNEPAUSEBUTTON_H #import @class NSImage; @class NSTimer; @interface CynthiunePauseButton : NSButton { NSImage *primaryImage; NSImage *secondaryImage; NSTimer *animationTimer; BOOL animationStatus; BOOL animate; } @end #endif /* CYNTHIUNEPAUSEBUTTON_H */ cynthiune.app-0.9.5/BundleManager.h0000644000175000017500000000210010252453774016531 0ustar gurkangurkan/* BundleManager.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef BUNDLEMANAGER_H #define BUNDLEMANAGER_H @interface BundleManager : NSObject // { // NSArray *bundles; // } + (BundleManager *) bundleManager; - (void) loadBundles; @end #endif /* BUNDLEMANAGER_H */ cynthiune.app-0.9.5/MBResultsPanel.h0000644000175000017500000000311010257412474016664 0ustar gurkangurkan/* MBResultsPanel.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MBRESULTSPANEL_H #define MBRESULTSPANEL_H #import @class NSArray; @class NSScrollView; @class NSTableView; @class NSTextField; @interface MBResultsPanel : NSPanel { NSButton *okButton; NSButton *cancelButton; NSTableView *tableView; NSArray *trackInfos; id target; SEL actionSelector; } + (MBResultsPanel *) resultsPanel; - (void) showPanelForTrackInfos: (NSArray *) allTrackInfos aboveWindow: (NSWindow *) window target: (id) caller selector: (SEL) action; @end @interface NSObject (MBResultsPanelDelegate) - (void) resultsPanelDidEndWithTrackInfos: (NSDictionary *) trackInfo; @end #endif /* MBRESULTSPANEL_H */ cynthiune.app-0.9.5/SongInspector.gorm/0000755000175000017500000000000010413173130017403 5ustar gurkangurkancynthiune.app-0.9.5/SongInspector.gorm/data.classes0000644000175000017500000000144410401212360021672 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CynthiuneAnimatedImageView = { Actions = ( ); Outlets = ( ); Super = NSImageView; }; FirstResponder = { Actions = ( "cancal:", "mbLookup:", "save:" ); Super = NSObject; }; NewClass = { }; SongInspectorController = { Actions = ( "reset:", "save:", "mbLookup:" ); Outlets = ( titleField, albumField, trackField, artistField, genreField, resetButton, saveButton, inspectorPanel, yearField, filenameField, lookupButton, lookupAnimation, albumLabel, artistLabel, genreLabel, pageSelector, titleLabel, trackLabel, yearLabel, lookupStatusLabel ); Super = NSObject; }; }cynthiune.app-0.9.5/SongInspector.gorm/objects.gorm0000644000175000017500000002525410401212360021726 0ustar gurkangurkanGNUstep archive00002b5e:0000002e:00000135:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%SongInspectorController0& %  TextField701 NSTextField1 NSControl1NSView1 NSResponder% CW C B< A  B< A&01 NSMutableArray1 NSArray&%01 NSTextFieldCell1 NSActionCell1NSCell0 &%Track0 1NSFont% A@&&&&&&&&0%0 1NSColor0 &%NSNamedColorSpace0 &%System0&%textBackgroundColor0 0& % textColor0& %  TextField80% A B C| A  C| A&0 &%0 0&%Artist &&&&&&&&0%0 0&%System0&%textBackgroundColor0 0& % textColor0& %  MenuItem101 NSMenuItem0&%Format Attributes0&&&%%0& % TextField0 % A C2 C| A  C| A&0! &%0" 0#&0$%&&&&&&&&0%0% 0&&%System0'&%textBackgroundColor0( &0)& % textColor0*& %  TextField90+% A B CI A  CI A&0, &%0- 0.&%Genre &&&&&&&&0%0/ 00&%System01&%textBackgroundColor02 003& % textColor04&%Button051NSButton% CD A  B A  B A&06 &%071 NSButtonCell08&%Save091NSImage Ap A 0:0;&%NSCalibratedWhiteColorSpace 0< &0=1NSBitmapImageRep1 NSImageRep0>&%NSDeviceRGBColorSpace Ap A %%% 0?1 NSDataMalloc1 NSDataStatic1NSData&II*`UUUUUUUUUUUUUUUUUUUUU  XR$&&&&&&&&%0@&0A&&&&0B&%InspectorPanel0C1GSWindowTemplate1GSClassSwapper0D&%NSPanel1NSPanel1NSWindow%  C C&% C D0E%  C C  C C&0F &50G% C A  B` A  B` A&0H &%0I0J&%Reset$&&&&&&&&%0K&0L&&&& 0M% A C CI A  CI A&0N &%0O 0P&$&&&&&&&&0%0Q 0R&%System0S&%textBackgroundColor0T R0U& % textColor0V% CW C B< A  B< A&0W &%0X 0Y&$&&&&&&&&0%0Z 0[&%System0\&%textBackgroundColor0] [0^& % textColor0_% A B C| A  C| A&0` &%0a 0b&$&&&&&&&&0%0c 0d&%System0e&%textBackgroundColor0f d0g& % textColor0h% A B8 CI A  CI A&0i &%0j 0k&$&&&&&&&&0%0l 0m&%System0n&%textBackgroundColor0o m0p& % textColor0q% A CG C| A  C| A&0r &%0s 0t&%Title &&&&&&&&0%0u 0v&%System0w&%textBackgroundColor0x v0y& % textColor0z% A C CI A  CI A&0{ &%0| 0}&%Album &&&&&&&&0%0~ 0&%System0&%textBackgroundColor0 0& % textColor+0% CW B8 B< A  B< A&0 &%0 0&$&&&&&&&&0%0 0&%System0&%textBackgroundColor0 0& % textColor0% CW B B< A  B< A&0 &%0 0&%Year &&&&&&&&0%0 0&%System0&%textBackgroundColor0 0& % textColor01NSBox% C C @  C @&0 &0% @ @ C   C &0 &00&%Box$&&&&&&&& @ @%%01 NSPopUpButton% B C C A  C A&0 &%01 NSPopUpButtonCell1!NSMenuItemCell0&$&&&&&&&&01"NSMenu0&0 &00&%Song Information&&%00& % common_Nibble%%0&0&&&&%%%%%0% A C C| A  C| A&0 &%0 0&%filename0% A01#NSNumber1$NSValuef ?o&&&&&&&&0%0; ? ?0; > ?0% A C^ A A  A A&0 &%00&0%&&&&&&&&%0&0&&&&01%GSControlTemplate0&% CynthiuneAnimatedImageView1& NSImageView% Cn C^ A A  A A&0 &%01' NSImageCell$&&&&&&&&%%% ? ?0% B0 Cd C= A  C= A&0 &%0 0&&&&&&&&&0%0 0&%System0&%textBackgroundColor0± 0ñ& % textColor0ı 0ű&% System0Ʊ& % controlColor0DZ&%Window0ȱ&%Song Inspector ? ? F@ F@%&   D D@0ɱ& % NSVisible0ʱ &0˱&%MenuItem0̱& %  TextField100ͱ& %  TextField110α&%GSCustomClassMap0ϱ&0б& % ImageView0ѱ& %  TextField120ұ& %  TextField130ӱ&%Box0Ա& %  TextField1M0ձ& %  TextField2V0ֱ& %  TextField3_0ױ&% Button1G0ر&% Button20ٱ& %  TextField4h0ڱ& % ImageView0۱&%GormNSPopUpButton0ܱ& %  TextField5q0ݱ& %  TextField6z0ޱ &::01(NSNibConnectorB0(40(װ01)NSNibOutletConnector0& % resetButton0)40& % saveButton0)B0&%inspectorPanel01*NSNibControlConnector40&%save:0*װ0&%reset:0)B01+NSMutableString&% delegate0(0(԰0(հ0(ְ0(ٰ0(ܰ0(ݰ0(0(0(*0(̰0(Ͱ0(Ӑ0(ې0(ː0(0)0& % titleFieldP)P& % albumFieldP)P& % trackFieldP)P& % artistFieldP)P& % genreFieldP)P & % yearFieldP (ѐP )P & % filenameFieldP (ؐP*ذP+& %  mbLookup:P)P+& %  lookupButtonP(ڐP)P+& %  pageSelectorP)P+& %  titleLabelP)P+& %  albumLabelP)P+& %  trackLabelP)P+& %  artistLabelP)*P+& %  genreLabelP)P +& %  yearLabelP!)P"+& %  nextKeyViewP#)԰"P$)հ"P%)ְ"P&)ٰ"P')̰"P()װ4"P))BP*+&% initialFirstResponderP+)۰"P,)ذ"P-)4"P.)P/&% lookupAnimationP0(ҐP1)P2&% lookupStatusLabelP31, GSMutableSet1- NSMutableSet1.NSSet&Ccynthiune.app-0.9.5/SongInspector.gorm/data.info0000644000175000017500000000027010401212360021164 0ustar gurkangurkanGNUstep archive00002b5e:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/frameworks.make0000644000175000017500000000153610376422143016700 0ustar gurkangurkan# -*-makefile-*- ADDITIONAL_INCLUDE_DIRS += $(foreach fdir,$(foreach fdir,$(FRAMEWORKS_DIRS),$(foreach framework,$(FRAMEWORKS),$(wildcard $(fdir)/$(framework).framework))),-I$(fdir)/Headers) ifeq (yes, $(local-build)) _ldflags = $(foreach framework,$(FRAMEWORKS),$(foreach efdir,$(foreach fdir,$(FRAMEWORKS_DIRS),$(wildcard $(fdir)/$(framework).framework)), -Wl,-rpath,$(if $(wildcard $(shell pwd)/$(efdir)),$(shell pwd)/$(efdir),$(efdir))/Versions/Current -L$(efdir)/Versions/Current) -l$(framework)) else _ldflags = $(foreach framework,$(FRAMEWORKS),$(foreach efdir,$(foreach fdir,$(FRAMEWORKS_DIRS),$(wildcard $(fdir)/$(framework).framework)), -L$(efdir)/Versions/Current) -l$(framework)) endif ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += -L$(FRAMEWORKS_DIRS)/../../Cynthiune.app $(_ldflags) else ADDITIONAL_LDFLAGS += $(_ldflags) endif cynthiune.app-0.9.5/GNUmakefile.preamble0000644000175000017500000000235110410222567017512 0ustar gurkangurkan# GNUmakefile.preamble - -*-makefile-*- - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(local-build), yes) ADDITIONAL_CPPFLAGS += -DLOCALBUILD=1 endif ADDITIONAL_GUI_LIBS += -L/MingW/bin -lmusicbrainz ifneq (mingw32, $(GNUSTEP_TARGET_OS)) ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif endif ifeq ($(enable-goom), yes) ADDITIONAL_CPPFLAGS += -DGOOM=1 ADDITIONAL_GUI_LIBS += /usr/local/lib/libgoom2.a endif cynthiune.app-0.9.5/PlayerPreference.h0000644000175000017500000000171010146515077017263 0ustar gurkangurkan/* PlayerPreference.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PLAYERPREFERENCE_H #define PLAYERPREFERENCE_H #endif /* PLAYERPREFERENCE_H */ cynthiune.app-0.9.5/PLSArchiver.m0000644000175000017500000000640610345652674016174 0ustar gurkangurkan/* PLSArchiver.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import "DictionaryCoder.h" #import "PLSArchiver.h" @implementation PLSArchiver : PlaylistArchiver + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute { unsigned int count, max; DictionaryCoder *coder; NSString *filename; NSMutableString *ctString; max = [dictionaries count]; ctString = [NSMutableString stringWithFormat: @"%@\r\n%@=%d\r\n", @"[playlist]", @"NumberOfEntries", max]; for (count = 0; count < max; count++) { coder = [dictionaries objectAtIndex: count]; filename = [coder decodeObjectForKey: @"filename"]; if (!absolute) filename = [directory relativePathFromDirectoryToFile: filename]; [ctString appendFormat: @"%@%d=%@\r\n", @"File", count + 1, filename]; } return ctString; } @end @implementation PLSUnarchiver : PlaylistUnarchiver + (NSArray *) _fileListFromLines: (NSArray *) arrayOfLines inReferenceDirectory: (NSString *) directory { NSMutableArray *filelist; NSEnumerator *lines; NSString *currLine, *newString; const char *filePtr, *newStr; filelist = [NSMutableArray new]; [filelist autorelease]; lines = [arrayOfLines objectEnumerator]; currLine = [lines nextObject]; while (currLine) { newStr = [currLine cString]; if (!strncasecmp (newStr, "file", 4)) { filePtr = strchr (newStr, '=') + 1; newString = [NSString stringWithCString: filePtr]; if (![newString isAbsolutePath]) newString = [directory stringByAppendingPathComponent: newString]; newString = [newString stringByStandardizingPath]; [filelist addObject: newString]; } currLine = [lines nextObject]; } return filelist; } + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory { NSArray *files; files = [self _fileListFromLines: [content linesFromFileContent] inReferenceDirectory: directory]; return [self dictionariesFromFilenames: files]; } @end cynthiune.app-0.9.5/SongInspectorController.h0000644000175000017500000000414310411076635020671 0ustar gurkangurkan/* SongInspectorController.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef SongInspectorController_H #define SongInspectorController_H @class NSPanel; @class Song; @interface SongInspectorController : NSObject { id filenameField; id titleField; id albumField; id trackField; id artistField; id genreField; id yearField; id albumLabel; id artistLabel; id genreLabel; id titleLabel; id trackLabel; id yearLabel; id pageSelector; id resetButton; id saveButton; id lookupButton; id lookupStatusLabel; id lookupAnimation; NSPanel *inspectorPanel; Song *song; BOOL visible; BOOL threadRunning; BOOL threadShouldDie; // pthread_t lookupThreadId; id delegate; } + (SongInspectorController *) songInspectorController; - (void) setDelegate: (id) delegate; - (id) delegate; #ifndef __WIN32__ - (void) mbLookup: (id)sender; #endif - (void) reset: (id)sender; - (void) save: (id)sender; - (void) setSong: (Song *) song; - (Song *) song; - (void) toggleDisplay; @end @interface NSObject (SongInspectorControllerDelegate) - (void) songInspectorWasShown: (NSNotification *) notification; - (void) songInspectorWasHidden: (NSNotification *) notification; - (void) songInspectorDidUpdateSong: (NSNotification *) notification; @end #endif /* SongInspectorController_H */ cynthiune.app-0.9.5/CynthiuneAnimatedImageView.h0000644000175000017500000000266110257423542021243 0ustar gurkangurkan/* CynthiuneAnimatedImageView.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEANIMATEDIMAGEVIEW_H #define CYNTHIUNEANIMATEDIMAGEVIEW_H #import #import @class NSMutableArray; @class NSTimer; @interface CynthiuneAnimatedImageView : NSImageView { int frameNumber; NSMutableArray *frames; NSTimer *animationTimer; NSTimeInterval interval; } - (id) init; - (void) startAnimation; - (void) stopAnimation; - (void) addFramesFromImagenames: (NSString *) firstImagename, ...; - (void) setInterval: (NSTimeInterval) newInterval; @end #endif /* CYNTHIUNEANIMATEDIMAGEVIEW_H */ cynthiune.app-0.9.5/CynthiuneInfo.plist0000644000175000017500000001066410413172525017520 0ustar gurkangurkan{ ApplicationDescription = "A free and romantic music player"; ApplicationName = Cynthiune; ApplicationRelease = 0.9.5; NSBuildVersion = "2006-03-31"; NSIcon = Cynthiune.tiff; URL = "http://WolfgangSourdeau.DynDNS.ORG/cynthiune/"; Authors = ( "Wolfgang Sourdeau ", "http://WolfgangSourdeau.DynDNS.ORG/cynthiune/" ); Copyright = "Copyright \U00a9 2002-2006 by Wolfgang Sourdeau"; CopyrightDescription = "Released under the GNU General Public License 2.0"; FullVersionID = "0.9.5 (March 31st, 2006)"; NSTypes = ( { NSUnixExtensions = ( "format" ); NSHumanReadableName = "Music format plugin for Cynthiune"; }, { NSUnixExtensions = ( "output" ); NSHumanReadableName = "Output plugin for Cynthiune"; }, { NSUnixExtensions = ( "m3u", "pls" ); NSHumanReadableName = "Music playlist file"; NSIcon = "Cynthiune-playlist-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/mpegurl", "audio/x-mpegurl", "audio/scpls", "audio/x-scpls" ); }, { NSUnixExtensions = ( "ogg" ); NSHumanReadableName = "Ogg music file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = Viewer; NSMIMETypes = ( "application/ogg", "application/x-ogg" ); }, { NSUnixExtensions = ( "fla", "flac" ); NSHumanReadableName = "FLAC music file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = Viewer; NSMIMETypes = ( "audio/flac", "audio/x-flac" ); }, { NSUnixExtensions = ( "mp3", "mp2", "mpa", "mpga", "mpega" ); NSHumanReadableName = "MPEG music file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/mpeg", "audio/x-mpeg", "audio/mpeg3", "audio/x-mpeg3", "audio/mpg", "audio/x-mpg", "audio/mp3", "audio/x-mp3" ); }, { NSUnixExtensions = ( "mpc", "mp+" ); NSHumanReadableName = "Musepack music file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/musepack", "audio/x-musepack" ); }, { NSUnixExtensions = ( "asf", "wma" ); NSHumanReadableName = "Windows Media file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/x-ms-wma" ); }, { NSUnixExtensions = ( "669", "amf", "ams", "dbm", "dmf", "dsm", "far", "it", "j2b", "mdl", "med", "mod", "mt2", "mtm", "okt", "psm", "ptm", "s3m", "stm", "ult", "umx", "mod", "xm" ); NSHumanReadableName = "Tracker music file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/669", "audio/amf", "audio/ams", "audio/dbm", "audio/dmf", "audio/dsm", "audio/far", "audio/it", "audio/j2b", "audio/mdl", "audio/med", "audio/mod", "audio/mt2", "audio/mtm", "audio/okt", "audio/psm", "audio/ptm", "audio/s3m", "audio/stm", "audio/ult", "audio/umx", "audio/mod", "audio/xm", "audio/x-669", "audio/x-amf", "audio/x-ams", "audio/x-dbm", "audio/x-dmf", "audio/x-dsm", "audio/x-far", "audio/x-it", "audio/x-j2b", "audio/x-mdl","audio/x-med", "audio/x-mod", "audio/x-mt2", "audio/x-mtm", "audio/x-okt", "audio/x-psm", "audio/x-ptm", "audio/x-s3m", "audio/x-stm", "audio/x-ult", "audio/x-umx", "audio/x-mod", "audio/x-xm" ); }, { NSUnixExtensions = ( "aif", "aifc", "aiff", "au", "avr", "iff", "nist", "snd", "wav" ); NSHumanReadableName = "Sound file"; NSIcon = "Cynthiune-song-48.tiff"; NSRole = "Viewer"; NSMIMETypes = ( "audio/aiff", "audio/x-aiff", "audio/basic", "audio/x-basic", "audio/au", "audio/x-au", "audio/x-ulaw", "audio/avr", "audio/x-avr", "application/iff", "application/x-iff", "audio/nist", "audio/x-nist", "audio/snd", "audio/x-snd", "audio/wav", "audio/x-wav" ); }, ); } cynthiune.app-0.9.5/CynthiuneTextCell.h0000644000175000017500000000235410257405733017450 0ustar gurkangurkan/* CynthiuneTextCell.h - this file is part of $PROJECT_NAME_HERE$ * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNETEXTCELL_H #define CYNTHIUNETEXTCELL_H #import @class NSColor; @protocol NSCoding; @protocol NSCopying; @interface CynthiuneTextCell : NSTextFieldCell { NSColor *highlightColor; } - (void) setHighlightColor: (NSColor *) color; - (NSColor *) highlightColor; @end #endif /* CYNTHIUNETEXTCELL_H */ cynthiune.app-0.9.5/CynthiuneHeaderCell.m0000644000175000017500000000677510407730260017725 0ustar gurkangurkan/* CynthiuneHeaderCell.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "CynthiuneHeaderCell.h" @implementation CynthiuneHeaderCell : NSTableHeaderCell - (id) init { if ((self = [super init])) { comparisonResult = NSOrderedSame; } return self; } static inline NSPoint RelativePoint (NSPoint point, NSPoint refPoint) { return NSMakePoint (refPoint.x + point.x, refPoint.y + point.y); } - (void) _drawArrowOfSize: (NSSize) arrowSize flipped: (BOOL) flipped atReferencePoint: (NSPoint) refPoint { NSBezierPath *bezier; float pointA, pointB; bezier = [NSBezierPath bezierPath]; [bezier setLineWidth: 0.0]; [[self textColor] set]; if ((!flipped && comparisonResult == NSOrderedAscending) || (flipped && comparisonResult == NSOrderedDescending)) { pointA = arrowSize.height; pointB = 0.0; } else { pointA = 0.0; pointB = arrowSize.height; } [bezier moveToPoint: RelativePoint (NSMakePoint(0, pointA), refPoint)]; [bezier lineToPoint: RelativePoint (NSMakePoint(arrowSize.width / 2, pointB), refPoint)]; [bezier lineToPoint: RelativePoint (NSMakePoint(arrowSize.width, pointA), refPoint)]; [bezier lineToPoint: RelativePoint (NSMakePoint(0, pointA), refPoint)]; [bezier closePath]; [bezier fill]; } - (void) drawInteriorWithFrame: (NSRect) cellFrame inView: (NSView *) controlView { NSRect arrowFrame, remainingFrame; NSPoint refPoint; float arrowHeight, arrowWidth; [super drawInteriorWithFrame: cellFrame inView: controlView]; arrowHeight = cellFrame.size.height / 3.0; arrowWidth = ceil (arrowHeight * 1.3); if (comparisonResult != NSOrderedSame) { NSDivideRect (cellFrame, &arrowFrame, &remainingFrame, arrowWidth + arrowOffset, NSMaxXEdge); refPoint = RelativePoint (NSMakePoint (0, (cellFrame.size.height - arrowHeight) / 2), arrowFrame.origin); [self _drawArrowOfSize: NSMakeSize (arrowWidth, arrowHeight) flipped: [controlView isFlipped] atReferencePoint: refPoint]; } } - (void) setComparisonResult: (NSComparisonResult) result { comparisonResult = result; } - (NSSize) cellSize { NSSize size; size = [super cellSize]; size.width += ceil ((size.height * 1.3) / 3.0) + arrowOffset; return size; } - (float) widthOfText: (NSString *) text { NSSize size; size = [self cellSize]; return ([self widthOfText: text] + ceil ((size.height * 1.3) / 3.0) + arrowOffset ); } @end cynthiune.app-0.9.5/PLSArchiver.h0000644000175000017500000000264210314672462016156 0ustar gurkangurkan/* PLSArchiver.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PLSARCHIVER_H #define PLSARCHIVER_H #import "PlaylistArchiver.h" @class NSArray; @class NSString; @interface PLSArchiver : PlaylistArchiver + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute; @end @interface PLSUnarchiver : PlaylistUnarchiver + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory; @end #endif /* PLSARCHIVER_H */ cynthiune.app-0.9.5/Player.h0000644000175000017500000000426110376644033015270 0ustar gurkangurkan/* Player.h - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Player_H #define Player_H #import @class NSNotification; @class NSString; @protocol Format; @protocol Output; #define GOOM_BUFFER_SIZE 2048 @interface Player : NSObject { id delegate; NSObject *output; BOOL outputIsThreaded; NSObject *stream; NSMutableArray *streamsToClose; BOOL paused; BOOL playing; BOOL awaitingNewStream; BOOL closingThread; unsigned int channels; unsigned long rate; long totalBytes; #ifdef GOOM BOOL feedGoom; PluginInfo *goom; short goomBuffer[2][512]; unsigned int bufferedSize; // char *goomBufferPtr; // NSLock *lock; #endif } - (id) init; - (void) setDelegate: (id) anObject; - (id) delegate; - (void) setStream: (NSObject *) newStream; - (int) timer; - (BOOL) playing; - (void) play; - (void) stop; - (void) setPaused: (BOOL) aBool; - (BOOL) paused; - (void) seek: (unsigned int) aPos; #ifdef GOOM - (void) setGoom: (PluginInfo *) goomPI; #endif @end @interface NSObject (PlayerDelegate) - (void) playerPlaying: (NSNotification*) aNotification; - (void) playerStopped: (NSNotification*) aNotification; - (void) playerPaused: (NSNotification*) aNotification; - (void) playerResumed: (NSNotification*) aNotification; - (void) playerSongEnded: (NSNotification*) aNotification; @end #endif /* Player_H */ cynthiune.app-0.9.5/SongInspector.nib/0000755000175000017500000000000010413173130017207 5ustar gurkangurkancynthiune.app-0.9.5/SongInspector.nib/info.nib0000644000175000017500000000070310413141707020641 0ustar gurkangurkan IBDocumentLocation 32 183 356 240 0 0 1024 746 IBFramework Version 283.0 IBOpenObjects 5 IBSystem Version 6R73 cynthiune.app-0.9.5/SongInspector.nib/classes.nib0000644000175000017500000000233410413141707021345 0ustar gurkangurkan{ IBClasses = ( { CLASS = CynthiuneAnimatedImageView; LANGUAGE = ObjC; SUPERCLASS = NSImageView; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = {mbLookup = id; reset = id; save = id; }; CLASS = SongInspectorController; LANGUAGE = ObjC; OUTLETS = { albumField = id; albumLabel = id; artistField = id; artistLabel = id; delegate = id; filenameField = id; genreField = id; genreLabel = id; inspectorPanel = NSPanel; lookupAnimation = id; lookupButton = id; lookupStatusLabel = id; pageSelector = id; resetButton = id; saveButton = id; titleField = id; titleLabel = id; trackField = id; trackLabel = id; yearField = id; yearLabel = id; }; SUPERCLASS = NSObject; } ); IBVersion = 1; }cynthiune.app-0.9.5/SongInspector.nib/keyedobjects.nib0000644000175000017500000002630310413141707022365 0ustar gurkangurkanbplist00Y$archiverX$versionX$objectsT$top_NSKeyedArchiverx (,-348<hoz!%(),/06789<=@BCFJK[\]nstyz{  $%&')1ACEFHIJMOQTWXZ[acefIgijprtuIvxy|}RM     &bcdefghijklmnopqrstuvwxyz{|}~U$null  !"#$%&']NSFontManagerV$classYNSNextOid_NSVisibleWindowsVNSRoot\NSOidsValues_NSClassesValues]NSConnections]NSNamesValues]NSObjectsKeysZNSOidsKeys]NSClassesKeys[NSFramework[NSNamesKeys_NSObjectsValueswV-+ ,*  )*+[NSClassName_SongInspectorController./01Z$classnameX$classes^NSCustomObject02XNSObject_IBCocoaFramework 567ZNS.objects./9:\NSMutableSet9;2UNSSet 5=>m)?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg #(-27_{{170, 19}, {55, 28}}      _NSKeyEquivalent_NSAlternateContents_NSPeriodicDelay^NSButtonFlags2]NSButtonFlags_NSPeriodicInterval_NSAlternateImageEC:@A@UReset BYHelvetica YNS.stringD./_NSMutableString 2XNSString./"#\NSButtonCell"$q2]%NSButtonCell./&'XNSButton&2[resetButton ijkl*+NI pqrstv-.yvKJ_{{223, 19}, {51, 28}}     1+2345M@$LTSave ZsaveButton ijk:;QPVreset:./>?_NSNibControlConnector>2 ijk:A+SUsave: ijklDEqU pqrstGvHIyvpWV_{{59, 314}, {171, 22}} LMNO  P QRSTE2UVyWXyYZ_NSPreferredEdgeZNSMenuItem_NSArrowPosition_NSUsesItemFromMenu]NSAltersStateVNSMenuoYXZ@AK[   ^_`abcdQefghijkHlZm]NSMnemonicLoc\NSMixedImage_NSKeyEquivModMaskWNSStateWNSTitleXNSTargetXNSActionZNSKeyEquivYNSOnImageda\c] obpqr[NSMenuItemsnfe_Song Information )uvwx^NSResourceName`^_WNSImage_NSMenuCheckmark./|}_NSCustomResource|~2_%NSCustomResource )uvwb_NSMenuMixedState__popUpItemAction:./MM2 ZOtherViews 5=Vgj ^_`bcdQefghijHZmhiUItem2 ^_`bcdQefghijHZmklUItem3./^NSMutableArray2WNSArray./QQ2./_NSPopUpButtonCell"$q2^NSMenuItemCell./]NSPopUpButton&2\pageSelector ijkl~s pqrstuvyvut_{{20, 124}, {249, 14}} yw|vWArtist "A x {z\controlColor I0.666667 }_controlTextColor[artistLabel ijkl pqrstuvyv_{{20, 166}, {188, 14}} ŀVAlbum ZalbumLabel ijkl pqrstuvyv_{{20, 83}, {188, 14}} ЀVGenre ZgenreLabel ijkl pqrstuvyv_{{216, 166}, {53, 14}} ۀVTrack ZtrackLabel ijkl pqrstuvyv_{{216, 83}, {53, 14}} 怕UYear YyearLabel ijkl pqrstvyv_{{20, 232}, {30, 30}}    4@ "AP \lookupButton ijk:뀟YmbLookup: ijklǀXdelegate ijklЀ ijkl ijklـ ijkl
 ijkl 뀫 ijkl  耭 v !"#\NSWindowViewYNSWTFlags]NSWindowTitleYNSMinSizeYNSMaxSize\NSWindowRect_NSWindowStyleMask_NSWindowBacking\NSScreenRect]NSWindowClass[NSViewClassx怮䀰_{{317, 248}, {289, 343}}^Song InspectorWNSPanel (TView 5=*E+,n+-./0€ʀҀ2p {34567r8t9v:;<=>?@=v]NSTransparentYNSOffsets_NSTitlePosition\NSBorderType]NSContentView[NSTitleCellYNSBoxType 5=B> prt|+D+_{{2, 2}, {244, 0}}./G2_{{0, 280}, {248, 0}}V{0, 0} K=L NSBox./qPq2./RSUNSBoxR2 pqrstuvUVyv_{{20, 210}, {249, 14}} ,YVTitle 2p {34567r8t9v:\]=^_`=vÀǀĀȀ 5=b^ prt|-d-_{{2, 2}, {285, 0}}_{{0, 280}, {289, 0}} K=h N2p {34567r8t9v:kl= mnovˀπ̀Ѐ 5=qm prt|.s._{{3, 3}, {283, 0}}_{{0, 280}, {289, 1}} K=w N pqrstuvz{yvԀ_{{60, 241}, {177, 13}} ~/Հ "A ـ_disabledControlTextColor I0.333333 p)qrstvyyvZNSEditable_NSOriginalClassName[NSDragTypesۀ܀߀_CynthiuneAnimatedImageView[NSImageView 56_NSFilenamesPboardType_{{245, 235}, {24, 24}} = ==WNSScaleWNSAlignWNSStyle./[NSImageCellq2\%NSImageCell./^NSClassSwapper2_{{1, 1}, {289, 343}}_{{0, 0}, {1024, 746}}Z{213, 129}_{3.40282e+38, 3.40282e+38}./_NSWindowTemplate2 ijkl ^inspectorPanel ijkl _initialFirstResponder ijklǀ[nextKeyView ijklЀ ijkl ijklـ ijkl ijkl ijkl+ ijkl0_lookupAnimation ijkl/_lookupStatusLabel ijkl,ZtitleLabel ijkl ijklE+ ijklE 5ԁ0^Ev>nm -+.+Z,/V./֢2 5دvv-v vZv+vvv.vvvvZvvEvvvvvvvvZ 5گ^E +>m/.+VZn,- 5ܯ   !"#$%&'()]NSTextField12_SongInspectorPanel\NSTextField4^NSTextField114\NSTextField5\NSTextField6[NSMenuItem1YNSButton2_NSTextField1151111VNSBox2[NSMenuItem2^NSTextField111YNSButton1^NSTextField113YPopUpList\NSTextField2\File's Owner]NSTextField11VNSBox1\NSTextField3^NSTextField112\NSTextField1 50 5 5I0.N]YXGgEVTP+/ARL+Zm?JBCIM\e^,fn^>ZDOQSWUHa[`-_Kd@ FvcEbV 5I !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvLA/F >=%U#;95 M7, B) !'.ER@TG C"068<:&JDI?H+Q2$PO ./^NSIBObjectData2]IB.objectdata#,5:LQEK %1=OQTVXZ]`behknpsv   #*09; 4FMU_kmoqst -9DFHJOQZ\]nu|*257@EZ\^hux  # * 9 J L N g i k $ / @ B D ] _ a z  % 6 8 : S U W o   / 1 3 L N P R j  " ' ) + 4 = ? A C I Z \ f o y { ,.0H} 8:<>W !*Wer!#%-?H[bv  >@BHQ`gox}4UWY[`bj{  %')Bcelw  $&(Abdkv!#%=nprw   13DFWY[!*,.02468:<Wfnw| (6BLMOQSUWY[dgxz "$&?`bi@BDFHJSVgi~ !&(=?A\is  $=V^fnpu~05FHWhj$&8IK_ps~     _ h !!!! ! !!!!!!!"!%!(!+!.!1!4!7!:!=!@!C!F!I!W!l!y!!!!!!!!!!"""",":"A"N"]"j"s"v"""# #)######################$$$$ $ $$$$$$$!$$$'$*$-$0$3$6$9$<$?$B$E$H$K$N$Q$T$W$Z$]$`$c$f$i$l$o$r$u$x${$~$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%% % % %%%%%%%%%&%5%:%?%M%Ocynthiune.app-0.9.5/Images/0000755000175000017500000000000010413173130015050 5ustar gurkangurkancynthiune.app-0.9.5/Images/pause.tiff0000644000175000017500000000177010413164474017057 0ustar gurkangurkanII*  $"##%2o0ttx1r1p&&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'&4j2ort3m4k'R\[<?\\O >@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/pause.tiffHHcynthiune.app-0.9.5/Images/anim-logo-3.tiff0000644000175000017500000000210410244210431017737 0ustar gurkangurkanII*"''  *+9:CCHHHH Cx xC :j k:+V V+  >k k? 'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@4<(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-3.tiffLGLGcynthiune.app-0.9.5/Images/anim-logo-2.tiff0000644000175000017500000000211610244210431017741 0ustar gurkangurkanII*("&*''*  *x@E+98t @ L:C#k@CHOHHH Cx xC :j k:+V V+  >k k? 'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@>F(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-2.tiffLGLGcynthiune.app-0.9.5/Images/dragged-songs.tiff0000644000175000017500000000765410375360443020476 0ustar gurkangurkanII*Z6BCDDDDDDDDDDDCB6'V'V6BCDDDDDDDDDDDCB6'`'`'V'V'`'`'`'`'`]&e&e'`'`F,JDDJ`'`'``<'`'`'`'``'`'```<'`'``<'`'`('`'`(`!'`'`"(`<'`'`8" '`'`'`'`!'`'`######!='`'`(" =!#############'`'`(('`6'ǽ('`6BCDDDJ''6(f#################'JDDDDDDDDDDCB6'`'e'`'`666BCDDDDDDDDDDDCB6-8 F@@R(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/dragged-songs.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/anim-logo-8.tiff0000644000175000017500000000210610244210431017746 0ustar gurkangurkanII*  L E'' O *@+9@:C@CHHHxHCxt xC:jk k:+V# V+ >k8 k? 'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@6>(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-8.tiffLGLGcynthiune.app-0.9.5/Images/slider-knob-disabled.tiff0000644000175000017500000000216210407715510021710 0ustar gurkangurkanII*!$ ^ AEe +W6US (Jo!`P~w)$rT/)YR#)!I{t x&U2P)5S~z=k( 6!PZUTP-o6 (Z yZ( ))  ML@bj(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/slider-knob-disabled.tiff(C) Wolfgang SourdeauHHcynthiune.app-0.9.5/Images/Cynthiune.xpm0000644000175000017500000002637110336547623017575 0ustar gurkangurkan/* XPM */ static char * Cynthiune_xpm[] = { "32 32 580 2", " c None", ". c #91848F", "+ c #968A91", "@ c #A19696", "# c #AFA69D", "$ c #B0A99C", "% c #AEAA9A", "& c #B1AD9A", "* c #B3AD99", "= c #A39995", "- c #988C91", "; c #A29795", "> c #C7B9A7", ", c #EFE0CF", "' c #EADCD3", ") c #E0D9CD", "! c #D5DBB8", "~ c #D3E4AE", "{ c #DDEEAE", "] c #DEF5AE", "^ c #E1F8AE", "/ c #E2F4AD", "( c #CACC9D", "_ c #A79E95", ": c #92858F", "< c #9A8E91", "[ c #CBBD9A", "} c #F9E3AA", "| c #FCE1BA", "1 c #F9DECE", "2 c #EFDBD6", "3 c #E2D9D1", "4 c #D5D9BA", "5 c #DBEEAD", "6 c #DEF6AF", "7 c #DFFAAB", "8 c #E1FBA4", "9 c #E3FC9D", "0 c #E6FB9A", "a c #D0D596", "b c #A09692", "c c #A79C96", "d c #E7D59E", "e c #FFE590", "f c #FEE39D", "g c #FCE1AF", "h c #FBDFC6", "i c #F3DCD5", "j c #E6D9D3", "k c #D7D9BE", "l c #D3E3AF", "m c #DCEEAE", "n c #DEF7AF", "o c #E0FBAA", "p c #E2FBA3", "q c #E4FD9A", "r c #E5FD91", "s c #E7FD8B", "t c #E6F195", "u c #B4AD98", "v c #AFA39C", "w c #F0DBB0", "x c #FFE6A7", "y c #FFE596", "z c #FFE493", "A c #FDE2A4", "B c #FCE0BC", "C c #F7DDD1", "D c #EADAD5", "E c #D3D3BB", "F c #C7D2A5", "G c #CEDCA4", "H c #D0E3A5", "I c #D7EEA2", "J c #E3FBA0", "K c #E5FD97", "L c #E6FD8E", "M c #EAFD8D", "N c #F0FD98", "O c #F1F9A7", "P c #C2BBA1", "Q c #A89D98", "R c #F0DCBC", "S c #FFE5C0", "T c #FFE5B4", "U c #FFE6A4", "V c #FFE593", "W c #FEE399", "X c #DDCAB2", "Y c #AEA79F", "Z c #95949B", "` c #9A9BA7", " . c #9798A6", ".. c #9596A6", "+. c #969A9A", "@. c #9FA68B", "#. c #C3CF8B", "$. c #E7FC8C", "%. c #EEFD94", "&. c #F3FDA2", "*. c #F6FDAE", "=. c #F6F9AF", "-. c #BFB8A0", ";. c #9B8F92", ">. c #E3D7B8", ",. c #F9E5C4", "'. c #FCE5C4", "). c #FFE5B2", "!. c #FFE6A0", "~. c #F9E091", "{. c #BAAE8D", "]. c #A5A4B1", "^. c #BFC0D4", "/. c #C1C2D6", "(. c #CBCCDB", "_. c #C3C4D7", ":. c #BDBED4", "<. c #C7C8D9", "[. c #C2C4D6", "}. c #B4B6C3", "|. c #9EA289", "1. c #E3EC9B", "2. c #F5FDAC", "3. c #F9FDB0", "4. c #FBFDB0", "5. c #F7F6AF", "6. c #AFA49A", "7. c #93868F", "8. c #C8BFAA", "9. c #EEE2C3", "0. c #F3E4C4", "a. c #F8E5C4", "b. c #FFE5BF", "c. c #F3DDA9", "d. c #AEA68E", "e. c #BEC0D2", "f. c #C4C5D7", "g. c #C1C3D6", "h. c #C0C1D5", "i. c #C5C6D8", "j. c #C0C1D6", "k. c #C6C8D9", "l. c #C4C6D8", "m. c #C2C3D6", "n. c #92949A", "o. c #DDE0A6", "p. c #FBFDAF", "q. c #FCFCAF", "r. c #FDFCAF", "s. c #E8E4AB", "t. c #978A91", "u. c #A89E99", "v. c #E8E6C7", "w. c #E7E1C6", "x. c #EBE1C3", "y. c #F1E4C3", "z. c #F7E5C4", "A. c #FAE3C3", "B. c #B8B0A1", "C. c #BEBFD3", "D. c #C2C4D7", "E. c #C0C2D6", "F. c #C5C7D8", "G. c #C9CBDA", "H. c #BFC1D5", "I. c #C8C9D9", "J. c #A4A6A6", "K. c #F2F2AD", "L. c #FEFCAF", "M. c #FFFBAE", "N. c #FEF9AF", "O. c #C1B7A0", "P. c #C8C4B0", "Q. c #E7EDCF", "R. c #E7EACB", "S. c #E7E5C8", "T. c #E8E1C4", "U. c #D0C7AB", "V. c #BDBFCF", "W. c #C4C5D8", "X. c #C3C5D7", "Y. c #CCCDDB", "Z. c #BEBFD5", "`. c #BABAA2", " + c #FFF9AE", ".+ c #FFF8AE", "++ c #E8E0AB", "@+ c #E6F0D4", "#+ c #E7F4D9", "$+ c #E7F2D5", "%+ c #E7EED0", "&+ c #E7EACA", "*+ c #E7E4C6", "=+ c #BAB8B8", "-+ c #C8C9D7", ";+ c #C2C3D3", ">+ c #C3C3D3", ",+ c #C5C5D2", "'+ c #C0C1D1", ")+ c #C5C6D2", "!+ c #C8C9D3", "~+ c #C9C9D3", "{+ c #BEC0CE", "]+ c #C3C3D1", "^+ c #C4C4D3", "/+ c #C2C3D4", "(+ c #C5C6D6", "_+ c #B5B6C2", ":+ c #F0EBAC", "<+ c #FFF7AE", "[+ c #FFF6AE", "}+ c #FCF2AE", "|+ c #A59996", "1+ c #A59B99", "2+ c #E7F8D8", "3+ c #E6F9DB", "4+ c #E7F8DA", "5+ c #E7F6D9", "6+ c #E7F3D6", "7+ c #E0E6C7", "8+ c #BABBC2", "9+ c #C2C3CA", "0+ c #CCCDCC", "a+ c #C7C6C7", "b+ c #C7C8C5", "c+ c #BFBEBB", "d+ c #B6B6B0", "e+ c #B4B3AF", "f+ c #C9C9C0", "g+ c #C6C6C1", "h+ c #C3C4C1", "i+ c #C5C5C5", "j+ c #C9CACB", "k+ c #C6C7CB", "l+ c #C0C0CB", "m+ c #DBD7AC", "n+ c #FFF4AE", "o+ c #FFF2AE", "p+ c #FEF2AE", "q+ c #C1B59F", "r+ c #B5B0A4", "s+ c #E6FBD3", "t+ c #E6FBD6", "u+ c #E6FBD8", "v+ c #E6FBD9", "w+ c #E7F9DA", "x+ c #D9E6C6", "y+ c #C0C0BA", "z+ c #C7C6BC", "A+ c #CDCCBC", "B+ c #CDCDBA", "C+ c #B9B8A7", "D+ c #C6C5B0", "E+ c #CECDB4", "F+ c #CAC8B2", "G+ c #CCCBB3", "H+ c #CAC8AF", "I+ c #C0BFA7", "J+ c #C6C4B2", "K+ c #CAC9B7", "L+ c #CBC9B8", "M+ c #CBCABB", "N+ c #C8C7BD", "O+ c #C7C7BF", "P+ c #DFDAB2", "Q+ c #FEF0AE", "R+ c #FDF0AE", "S+ c #D6CBA6", "T+ c #B7B4A5", "U+ c #E5FBCA", "V+ c #E5FBCC", "W+ c #E6FBCE", "X+ c #E6FBD0", "Y+ c #D8E9C0", "Z+ c #B4B99F", "`+ c #C7C6B0", " @ c #CCCAAE", ".@ c #CECCAC", "+@ c #CBC8A5", "@@ c #CAC8A3", "#@ c #CECCA5", "$@ c #C6C39D", "%@ c #ADAB8B", "&@ c #CECBA0", "*@ c #D3D0A5", "=@ c #C8C59E", "-@ c #C6C3A0", ";@ c #CECCA7", ">@ c #CECBA9", ",@ c #CDCCAB", "'@ c #CDCCAE", ")@ c #CCCAB2", "!@ c #DFDAAC", "~@ c #FDF0AD", "{@ c #FDEFAD", "]@ c #FDEFAC", "^@ c #DBCEA5", "/@ c #B5B4A2", "(@ c #E4F9BF", "_@ c #E4F9C1", ":@ c #D7E6B1", "<@ c #ABAF8F", "[@ c #CDCAA7", "}@ c #CECBA5", "|@ c #CFCDA1", "1@ c #D1CE9F", "2@ c #BDBA8C", "3@ c #D4CF9A", "4@ c #CFCB95", "5@ c #D4D095", "6@ c #D9D49A", "7@ c #BCB988", "8@ c #D0CD98", "9@ c #D1CD9B", "0@ c #D2CF9E", "a@ c #D2CEA2", "b@ c #D0CDA5", "c@ c #E5DFA8", "d@ c #FCEDAA", "e@ c #FCECAA", "f@ c #FCEBAA", "g@ c #DACBA1", "h@ c #B5B49E", "i@ c #E2F7B3", "j@ c #E1F7B2", "k@ c #E1F5B1", "l@ c #DEE4AA", "m@ c #D5D19F", "n@ c #D5D19A", "o@ c #D1CE94", "p@ c #D4CF91", "q@ c #BAB67C", "r@ c #D9D48E", "s@ c #CAC682", "t@ c #D2CD85", "u@ c #DBD68B", "v@ c #BDB778", "w@ c #D2CD8A", "x@ c #D6D28E", "y@ c #DFDB9A", "z@ c #EAE5A4", "A@ c #F0E8A8", "B@ c #F7E7A7", "C@ c #FAE7A7", "D@ c #D9C9A1", "E@ c #B5AF9C", "F@ c #E1F4A8", "G@ c #E2F4A7", "H@ c #E3F4A7", "I@ c #E0EFA3", "J@ c #C9CC8F", "K@ c #DAD593", "L@ c #D7D38D", "M@ c #D6D188", "N@ c #D8D384", "O@ c #BDB771", "P@ c #DED881", "Q@ c #D9D37C", "R@ c #C4BE6F", "S@ c #CEC97B", "T@ c #C3BD6D", "U@ c #DDD67A", "V@ c #DBD47B", "W@ c #C8C271", "X@ c #E5DE91", "Y@ c #F3E7A2", "Z@ c #F7E1A3", "`@ c #F8DFA3", " # c #F9E1A5", ".# c #F9E2A5", "+# c #D5C5A1", "@# c #A49B95", "## c #E6F1A7", "$# c #E5F2A4", "%# c #E6F2A4", "&# c #DCE59C", "*# c #CCCB88", "=# c #DDD888", "-# c #DAD481", ";# c #DBD57C", "># c #DBD478", ",# c #D6CF72", "'# c #C5BF65", ")# c #DFD871", "!# c #E0D86F", "~# c #DDD66D", "{# c #DFD76D", "]# c #DDD66C", "^# c #BDB65E", "/# c #EFE396", "(# c #F4D89F", "_# c #F5D9A0", ":# c #F6DAA1", "<# c #F7DBA2", "[# c #F7DDA3", "}# c #F8DEA3", "|# c #F7DEA3", "1# c #BFAF9B", "2# c #E6EEA6", "3# c #E5F1A2", "4# c #E6F1A2", "5# c #E6F0A1", "6# c #DFE092", "7# c #DFD87C", "8# c #DFD877", "9# c #DED771", "0# c #DFD86A", "a# c #CEC75D", "b# c #BEB854", "c# c #DED65F", "d# c #E1D85F", "e# c #DBD35D", "f# c #B9B24E", "g# c #E6DC88", "h# c #F1D29B", "i# c #F3D39E", "j# c #F4D49F", "k# c #F5D6A0", "l# c #F5D8A0", "m# c #F5D9A1", "n# c #F6DBA2", "o# c #F5DCA3", "p# c #A49695", "q# c #C8C5A0", "r# c #E8F2A2", "s# c #E9F2A1", "t# c #EBF2A0", "u# c #DFDE8D", "v# c #E0D872", "w# c #E2DA6C", "x# c #E3DB6C", "y# c #E9E277", "z# c #E3DA60", "A# c #E5DC5A", "B# c #E2D956", "C# c #CAC24A", "D# c #C2BA46", "E# c #CBC249", "F# c #E4D95F", "G# c #EFD39A", "H# c #F1D09C", "I# c #F2D29C", "J# c #F3D29D", "K# c #F3D49E", "L# c #F4D59F", "M# c #F5D7A0", "N# c #E4CEA1", "O# c #A79D96", "P# c #ECF1A2", "Q# c #EDF3A0", "R# c #EFF4A0", "S# c #F1F49F", "T# c #F3F49E", "U# c #F4F49C", "V# c #F3F29A", "W# c #F1EE98", "X# c #F3EE96", "Y# c #E8DD53", "Z# c #E9DF4C", "`# c #E9DE4A", " $ c #EADF47", ".$ c #E7DC46", "+$ c #ECE372", "@$ c #EFCF9A", "#$ c #F0D09B", "$$ c #F1D19C", "%$ c #F2D29D", "&$ c #F5D59F", "*$ c #F4D8A0", "=$ c #C0AF9B", "-$ c #CDC99F", ";$ c #F1F5A0", ">$ c #F2F69F", ",$ c #F3F79E", "'$ c #F2F29D", ")$ c #F2EF9C", "!$ c #F1EB9C", "~$ c #F1E79B", "{$ c #EFE47C", "]$ c #ECE041", "^$ c #EDE23D", "/$ c #EDE13B", "($ c #EBDF39", "_$ c #D1C845", ":$ c #E4CE87", "<$ c #F0CF9B", "[$ c #F1D09B", "}$ c #F3D29E", "|$ c #E4CB9F", "1$ c #968990", "2$ c #9C9092", "3$ c #E3E49F", "4$ c #F3F69D", "5$ c #F3F49D", "6$ c #F2F19D", "7$ c #F2EE9C", "8$ c #F1E79C", "9$ c #F0E39B", "0$ c #F0E397", "a$ c #EEE138", "b$ c #F0E432", "c$ c #EFE32F", "d$ c #F0E32E", "e$ c #ECDF2D", "f$ c #BEB235", "g$ c #DAC77E", "h$ c #F2D19C", "i$ c #EED29E", "j$ c #AE9E96", "k$ c #A79D95", "l$ c #E9E89D", "m$ c #F2F09D", "n$ c #F1E89C", "o$ c #F0E49B", "p$ c #F0E09B", "q$ c #F0DD9A", "r$ c #F2E67F", "s$ c #F4E86C", "t$ c #F5E86A", "u$ c #F5E769", "v$ c #F4E669", "w$ c #F4E66B", "x$ c #DBCE6B", "y$ c #DECC82", "z$ c #F1D19B", "A$ c #F1D29C", "B$ c #F0D19C", "C$ c #BEAC98", "D$ c #B0A597", "E$ c #E8E49D", "F$ c #F0E89B", "G$ c #F0E59B", "H$ c #F0E29B", "I$ c #F0DE9B", "J$ c #F0DB9B", "K$ c #EFD99B", "L$ c #EFD59B", "M$ c #EFD39B", "N$ c #EFD29B", "O$ c #EFD09B", "P$ c #EFCF9B", "Q$ c #F0CF9A", "R$ c #EED09C", "S$ c #C4B098", "T$ c #AA9F96", "U$ c #E1D99D", "V$ c #F1E69C", "W$ c #F0E39A", "X$ c #F0DD9B", "Y$ c #EFDA9B", "Z$ c #EFD89B", "`$ c #EFD19B", " % c #EACE9C", ".% c #B9A797", "+% c #998C91", "@% c #C8BD9A", "#% c #EEE2A0", "$% c #EFD79B", "%% c #EFD09A", "&% c #EFD19D", "*% c #D7C09B", "=% c #A39593", "-% c #A09393", ";% c #C6B99A", ">% c #E2D19D", ",% c #EED99E", "'% c #EED69B", ")% c #EFD49B", "!% c #EED19C", "~% c #E7CC9D", "{% c #D0BA9B", "]% c #A99994", "^% c #A09392", "/% c #B2A496", "(% c #B7A795", "_% c #B7A593", ":% c #B7A594", "<% c #B6A697", "[% c #A49693", "}% c #95878F", " . . . . . . . ", " . . + @ # $ % & * = - . . ", " . . ; > , ' ) ! ~ { ] ^ / ( _ : . ", " . < [ } | 1 2 3 4 ~ 5 6 7 8 9 0 a b . ", " . c d e f g h i j k l m n o p q r s t u . ", " . v w x y z A B C D E F G H I J K L M N O P . ", " . Q R S T U V W g X Y Z ` ...+.@.#.$.%.&.*.=.-.. ", " . ;.>.,.'.S ).!.~.{.].^./.(._.:.<.[.}.|.1.2.3.4.5.6.. ", " 7.8.9.0.a.'.b.c.d.e.f.g.h.<.i.j.f.k.l.m.n.o.p.q.r.s.t. ", " . u.v.w.x.y.z.A.B.C._.D.E.g.F.G.H./.I./.k.f.J.K.L.M.N.O.. ", " . P.Q.R.S.T.9.U.V.i.g._.W.E.X.Y._.Z.F._.F.X.^.`.M. +.+++. ", " - @+#+$+%+&+*+=+[.-+;+>+,+'+)+!+~+{+]+^+/+(+m._+:+<+[+}+|+ ", ". 1+2+3+4+5+6+7+8+9+0+a+b+c+d+e+d+f+g+h+b+i+j+k+l+m+n+o+p+q+. ", ". r+s+t+u+v+w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+R+R+S+. ", ". T+U+V+W+X+Y+Z+`+ @.@+@@@#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@]@^@. ", ". /@(@_@_@:@<@[@}@|@1@2@3@4@ 5@6@7@8@9@0@a@b@c@d@e@f@g@. ", ". h@i@j@i@k@l@m@n@o@p@q@r@s@ t@u@v@w@x@y@z@A@B@C@C@C@D@. ", ". E@F@G@H@I@J@K@L@M@N@O@P@Q@R@S@T@U@V@W@X@Y@Z@`@ #.#.#.#.#+#. ", ". @###$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#/#(#_#:#<#[#[#}#|#`@1# ", " t.2#3#4#5#6#7#8#9#{#0#a#b#c#d#e#f#g#h#i#j#k#l#m#:#n#<#o#p# ", " . q#r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#k#M#l#_#N#: ", " . O#P#Q#R#S#T#U#V#W#X#Y#Z#`# $.$+$@$#$$$I#%$i#K#L#&$*$=$. ", " . -$;$>$,$T#'$)$!$~${$]$^$/$($_$:$<$[$H#I#I#}$J#K#|$1$ ", " . 2$3$4$5$6$7$!$8$9$0$a$b$c$d$e$f$g$<$[$H#$$I#h$i$j$. ", " . k$l$m$7$!$n$o$p$q$r$s$t$u$v$w$x$y$<$H#z$A$B$C$. ", " . D$E$!$F$G$H$I$J$K$L$M$N$O$P$P$<$<$Q$<$R$S$. ", " . T$U$V$W$p$X$Y$Z$L$M$N$`$O$P$<$Q$<$ %.%. ", " . +%@%#%I$J$K$$%G#M$%%O$@$P$P$&%*%=%. ", " . -%;%>%,%'%)%N$N$N$!%~%{%]%. . ", " . . 7.^%/%(%_%:%<%[%}%. . ", " . . . . . . . ", " "}; cynthiune.app-0.9.5/Images/next.tiff0000644000175000017500000000354610413164311016711 0ustar gurkangurkanII*>&//+5l   X [%%!# J% @w1q2o&&0t( F.}.y" it3m4k'&3j4l,2F.y5h1r& t3m4k'&4i6f4i.z! VF.y5f5f2n*t3m4k'&4i6e6e4g0t%F.y5f6e6f3j,~?t3m4k'&4i6e6e6e5f2o(F.y5f6e6e6e5i/x" gs3m4k'&4i6e6e6e6e6f4l,QBs/x5f6e6e6e6e5g1r&t$w3l4k'&4i6e6e6e6e6e6e6kAt0s6f6e6e6e6e6e5fI~%n4k4k'&4i6e6e6e6e6eBn#:81r6f6e6e6e6e6eh~ b3j4k'&4i6e6e6e6eW @0w5f6e6e6e6eTs m3l4k'&4i6e6e6ewiE/x5f6e6e<j0Ms3m4k'&4i6e8gBaF.y5f6eNx-t3m4k'&4iBn%?F.y5fhz t3m4k'&V"F.yRs t3m4k'jj J2R-~G{Hz;De o{3 D )Jeec# =@6V^(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/next.tiffHHcynthiune.app-0.9.5/Images/common_ToolbarSeparatorItem.tiff0000644000175000017500000000066010375274427023420 0ustar gurkangurkanII*hF ;N@`(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/sep.tifCreated with The GIMPHHcynthiune.app-0.9.5/Images/playlist-pushed.tiff0000644000175000017500000000374010413131263021056 0ustar gurkangurkanII*%% 33  77  88  88  88  88  88  88  88  88  88  88  88  88  77  33 %X{{X%%3788888888888873% j Hr@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/playlist-pushed.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/next-pushed.tiff0000644000175000017500000000364010413127713020177 0ustar gurkangurkanII*r&//+6(+  (,"(,#)-$,0& PU<14%a =@/RW>#$]eMݏwxwcbiIM4 BF2s|\,/!Dr{\љԜzmЉtbfCDG2dž̋f;>, vx\ۛܝzk܎ݏ{y~Q"$2DH2̆ՎoRV: y[ܙݙwg݌[03![DG1ɃڎvhnHzWܓޕt#d݈ԁbCG, 'DH0ߏ}}U()@|Vݒq'cރ܂h\`:,EH.|]:;&o}Sގok`ށmsyGff\moZyeX[:{Yߊߌlk]{my܍`ކhkYw{|{|~vyMMO.}u45 EV߂f'VrwwxxHJ+_+HJ*n|~Ň!N~d#Sostsג&&3'GH(iyzza Iz|aPjopmGH'euvhj=~Gvy^MgsJGH&bq>?"S~Dsu\I}TU*mHJ$^} +{BorY݊01AN+] P{}f e  ~xz;=M'gFGdMjjh#D DL@i(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/next-pushed.tiffHHcynthiune.app-0.9.5/Images/cynthiune-splash-faded.tiff0000644000175000017500000030245210247211104022266 0ustar gurkangurkanII*p}r}stsrqp}utuxyxwxvuuwwvuvywwy{zyzxxyyxtssp~str~r~uyxuvwwus}s~uuwussuwuxwwxyyyzxxxxyyxwutuy{zwtwyywx}~{||}~||||}~~~~}}~~~~~~}~}~}}|~~||~}}~~}{{}|}{yy{{z{{z{{{{{zzyyyyxusrsvxxso}q~ttq~rwxsutvxzzyxkssrrsstttrr~p~tstwyxwxvtuvuts~q}kur~immlkjnqrruvwvvrqrttrqvwwx{}~|wvvyytroknponovzyxvwsppruvvvuqquv{{ywz||}|zy|}zxtqsz}yvyzzz}~}|{}}~}}~~~|yx{{~|z|}|{{yxy{yuqnkltzwpkooooquwrqpsxyzyktromlnpqpomkpprruwwuupnmmtsmqsssqpwxux}|}zwyz{yy{~~}}ytqqtutqw~|zzywvuyy{~|vsxy}{~|xv}}~~zwspw|sruxvtzzzyz~k}zvsstvxxvvttz{xz}~zuttxuptuwvvuz{}}|~~|yx{|x}~|~}~}y|}z}{~k~{{{{}}}{zy~~|xwyzwz}~k|{{}~}|yvyzwy~kz}~{k|}z{|kzw{k}u{kt{ku{ku~kt~kwv|{kxwu}ukx}znp~qzk~w|x}vcs|sk~w~}vwefqky{{x|p^{xxk}u{zwugukv~ƹůık|{v̵Ͷɳɲ§ƶƵƼͽ˷k}}z˲Ȱɳ̴зϴϹ̵̻ʭαɲȷ̵ηkyyx̴ʪ̬̭ϱҵԵӺʿɺŬūκȱ͵δҹ׿k}zyůĨĤǧɩͱͲҸ;ʺȺɹ­êθDZɰ̱ϴӸӽkwy͸̳ˬͫз̾ȸͽĮɶͼϾ˸ƫʹʹɯͯѲԶؽѷk|yɶɴʱͶ̼ȴDZ̶ϻ̹˶ǭȬ˱ȪʫͬѯӲҵӽkyŬʵ̼ǴïũĩƭǭæǪƩƧ˨ЭԲҲѶԴkxƿ̸ʴéũƨȫʱͱȪɦʦɥΧѬֱظոֲkzľļƹƺʺ̺ʵ¥Ŧɩ˫̮ͯЮͥʢɣ̤Щխڵ׸ΩkyVɼǻʻʺϼ̸Ҿ̸͸θӻռη˼ƨģƥɦɦǦƣΨ͢ʡȠˢϣլɢògVͿμϽϼμ˻ʹȷ̻Ӿμϼ̶̶˶̶ζζ϶ζͶεδϴеѵӶӶѶѶ׾ӺϷѹͽ̼ͼͼͼ˼ɻƺɰ˪ʪàžÝšşƠɠʢʣẠ̡̟̇̄ǝ˟ΠԥӤūl~̿Ϳͽ˻ʹɷɶιιϹһζ̵ʴɲDZȲʱɱɰǰ̴ؿȯɰӸ۾˰ͱټѲˮ˯̭ˬήϮЮѯϰϰܻѱίͰαϱͱͱͲ̶ӾɹɹɰǣĜÞȠƛ˜ĘƝȝʝ̟˟ǝʢ̟͜ʚ˜ϠӠЖǏŴkɼɼɹʸ˸ʸʷϵϵѶؼ̱̮ͭͭа߼үά۶ΪͪЬհӬӬѬѬѭҮѭܷ߻ήίаѵɯۿDZ̷èƤşȞژ˜ƙșŖÕėɘ̜ТУ×ɚʖʙΞѡѝ̓ÊÊΣĜk˺˻н˶Ͷ͵ϹҲұٷϰϬЫײѪ׮ҪҪЧӧҧѧѧШԫ˦̧޸ձ̫ƬŬΰɡɞț͜ʙȗǔɓ̕˖Ȗ̗ϜƗ͝ǕМǕף͘NjƌȎҢڵ˼kȾӿͺ͹ʹͳҷ޹԰ܷկЫϧϧУҦУѣܪѢӣԣӦӦթڰЧٯҪ˭ȬԿĝŜƛĘÕʖȓđđŎǎȏƐőŽƑʐ͔ʼnƉƉ͗ҨԴkǺν˳˳׼αͰԫ׮լөУУѠѠППՠѝԞԡԡΡҤ֩ѥѥϦʣˣ˥ʤ˥̧ͨΨΨʨ˨ěȝȝǘȗȕ˖̘Θ̔ʒ̐ʋ̍ˑ̎ƒ͈Ћϋψ͆Ƈ†ɍ̌̍ϓӣֲӲi˸ϳααϬ˩ҦԧӥҢОϝҜњϙКә֜՚ԜӝΜПӢԣԣҤ΢ΣϤΣѦөѨѧҧӬݵɗѦϢΜΛ͙ΘәՙёϑГӕӓƇύχ΅ɃǃˁʄƇ͌ЏЎϏϑҜٰدħiͶζϱϰϨΧӣӣџҟњқӘӘіҗ՘՗֛֛ҜКߨҞأ֭ϠϠʘΚѝҝћؙٜ֜Քؘ֗٘ļȁŸ~|Ÿ~ƀƂƆюҎЌѐЙե׭Ыiٻʮعү̪ѬѦѥԠעћқДДёҒΎϏЎߛѐѐӒӓҗҘמљӠНΡʘҜסڦۦާݞޟߢ֕ƃ|}}{zɾ}~}}̃ӉӊԌԐҔ՞߷ٳkϰίϨϨңҡњԜііђҒՑٔҎӎՏԎԎҎӎӓӔӗӖٰϤڸΟգۨެݨԘԗٛ۝ݟٝѐ~xxÿ{{ǿ|Ż{|{z{ΆՌ֋ՌבԓԚݴڲϺkٴɤҫժͣת͛ΚѕՙԕӓՑՑ׎ܒԊԊܐӈӈԋԋҎԒѐёڣ֦ܸ֨ϛݩڠ~~́̈́Ȃzyyywv{{{¾xІ֊؍ڎَא֕ԘԢœĥiϧ̣͡ϡћӛӓ٘ؔӎՌԋ׉ևՇڊևՇՉՉӍّԎҌݜӑި߲Л̌я̇{|zvxvwyyytyvwxuxِؕٓܓۑ׌הԖ˓yi͢ըܬϡ߬ҘԘՑܗޕԌڐՆԅۉփׄւ؂ׂւՁՁՃօԈܐۑԋӞЎ̇ʄ̂͂}y{z}р~}y~ztvw֍ߟޙߛߗܐؑ՚ȑwǬkТ̜͚͛ΐϑӋݓуӄՀԁր~~܁ۀ؀؀؁׀ׂӂ݌ӅֈܪԔьΉΈъ΂τԅՆԄ~ԅӂсӆӂzswz}΂΁ܜܖّӗҼh̶ƮɱΜӟީΙآϏѐٍ҇ՃԂӂ|}{|zz~{z{|}܇Հ׆քލמזٖٕؕՍ֍ێݎڌٍ؋؈ܔړ{փփ}xu֍ݚѕ}ʰԼkָɬǬչ՟͔˓ʒڞ̇ΈӃӃۂ|{}y|ww|tv~tvvww}|ԁلۥՓڕۘڕؐ؍یݎێڍׇޛۗӂ~؅ڈڇ׆ԄԌݝεҺ־kϯƨƨԴݣ͑͒͒΅χӀԀ{zzyxzwvssxrrpqt}tsrruuyy׀ԛؔܕݓ܏ߒޒېܓܘ۔܏܌ߑޔ۔ؒהדƃlδѸ׾iѭţŢ˦ծܳצ֤ݢ͐ΏђхӇك|wxw~{vppqoowmmmmmlq~nnqrvvv|{||}~~~~~րלי֔҉։ݑۓْԋхЋՒ֎؎ۑۓ۔ؓԓՔ}iɪʰ̲ջiٱѨˡě×ėƗȗȕʖɔʖޟ̍ύۊߏ}}|vttmow~~~~}}||mt}}|}}}~}}~xmlorx}~~~ns~}tx{qss}{||}}ݥۤϑ֌ߕӇǃʘ̐۔ڒޗߘޘە֓ˎjͫѯΰϴ׻iݩܦڣמҚϙݛ͌ޙ{zyy~}~~~}||||{yyyyyxwxxwxxxwwxvwwwwvvvwwwvuvvwwwvwwwvwwxyyyyyzzzyyzy{{zz{||}}|}lklmܣڛԖӜբԥТʓ֖ږܗۗۘҘͦĜͪԯسٷڼiϋˇwt~}~}}}|{{|{{yyyyxxxwwwvuuuuvvvuuvutuuutssstssrrssssssssssttuuuttvwwwvvvxxxxyzz{{{{tkkt~ݩ۪ۨ٪ڨףؤפץ֨ӬϫЭղ۵߹i¾χ׎~~}|||{{{yxywwuvvuuttrssrqrrqqopppppooopooooonmmmnnmnonmmnnnnnopnoprrrqrssttuuuuuuvwwxyz{||||}}}~~߭߮߯ݰ۲رزڶkºЅ́ߑ}}}|{{{yxxwwwwvttqrqppnonnmmlkllkklkkijjjjjighiiihhhhhihhhhijjiiiijkkkkkkklnnnnnooopnpppqrrsstuvwwxwxyyyz{|}||~ߵ޷ݷkĺݍЁՅ~}}|{{{zyxwwvuusstrqqqppommmnnmmmmllkjjjjjjiiihghhhgfeefffffeddddddddedbdeffffffffghhiihjjkkklmmnnppppqrrtuuvwwxyyz{{{||}~iö҂Ӂ~}}|{{zyywvvttsqrqqqoooollljjjjjiihgggffefeddbbbbbba`__```````_```````___`bbbaabaabcddddefgghgiijjkllmooopqqrsstttwwwyxy{{}|~~~߲޳޵kƾӃՀ~}|||{zyywwvvutsrqoppommmlkjihhhggfefeeeddccbba`__^^^^]]]]\\[ZZ[[[[ZZZ[[[[[[[[Z[\\\]]^^^\\^__``accddeeffgghhijjklllnnoopqrrsuvuwxyy{|}~~~iž؅||~||{zzyxwvvutssrrqponnlmlkjihihgfefeddcba``_____^^^]]\\[[ZZYYYXXWVUWWVUVVVVWWWWWWXXVWYYYYXYYYXX[[Z[Z[\]]^__`abcbddeffghijkklmnnoopprtuvvxyzz{}~޳ߵkߠމxxz~}}|{zyxwvvutsrrrqponmllkjihggeffedccba``_^^^]\[\[ZZYXXWWWVVUUSSTTTSSQSSSRRRRRRSSSSSSSRSTTUVVUVUUUWXXXXYZZ[[\\]]^_`abbccdddfghijklmmnopqrsstvvwwyz|||}}߱߱iلyz݅~}|{zyyvvutsrqoponmlkjjihgfeddbbb``^^]]\\ZZZYXWWVUUTTTRRRRQQQOONOOONMNNNMLMMLLMMMMMNOOOOOONOPPQPQRSSTTTUVWXYYYY[[[]\___aaabdeefggihkkmmnoppqrsttuvwwxxz{}~~i߾zyx~}|{zyxxvuusrqponlkkjihggfedba___^]\\[ZZYXWVUUSSSSQQQOPOONMLLLKKJIIHIIIHHHHHHHHHHIIHHIIIIIJIIJJKLLMMMMOOPQQRSRSTUUUVWWXYZ[[\]]^`aabccfffhhhjklmnopqqrsuuvwvwyz{|}~ߥ߯kɿù޾zuy~~}}|zzyxwvvutsqponmlkljhggfeddcca`_]]]\ZZZYXWWVUTSRPOONMLLKKJJIHGGGFFEDDCCDDCCBBBBBBBBBBBABCCCCDDCEDEFFGGHHIJKKKLMMNOPQQRSTTUVWXYZ[[^__`abcdefgfhjkllnopqrstuvwvwy{|}}~kǾ·¿ٿڿ޾߼߻ݻܹܷ޷ߵߡߡ}|||{zyxvvurrrqoommkjjihgededcb```_^]\[ZZYXWUTSSSRPONMLLLKIIHGGFEDCBBAAA???>>>===<<=;;;<<<;;<===>>>>>?@@AABBCDEGHHIIIJJKLNOPQQSSTVWWWXZ\\]^^`abdddfghjklmnnnpqsstuvwxyz{|}~ߣ߬ޭ߶ܶk߸޺ݼȿú׽ػٻܺ޹ܹ۸۷۵ݵ޴߳߯߯ߢߢߡ~|zzyyxwvutsqonnllkjihggfecbaa`^][ZZYXWVUTSRQPONMLLKJIHGGFEDCCBA@?>>===<<;::::99887789889888889:::;<;<<=>??@@@ABCDEFGHHIHHJKKMNOPQQRSSTTVWXYYZ[\]^^_`bceefghhjlmnnoqrtuvwxyzz|~ޞݟޡߥިݪޫ޷i߻żƽտݾھٽݼڻոԷոع۷ܶܶٴױڱڰܰݯݮݬݫߪߨݣޣޠݞۜܛݛޔ~~}||zxxwvutrrponlkjihhfedcba``^\\[YYWVVUTSRQPPONMLKIHHHGFEDBBBAA@?>=<<;;9898776655544323333333333444556666789:;<<<>>?@AABCDDEFHHIJKLNOPPQRQSUVWWXXY[\]]^`abcddeefghijklmnopqstvwwxyzz{}߈ޟޠݡݡܥۥܨޫ߬߯߰߱޲ܲk۲ݴݶܷ۸ܹۺݻ߽޾޾߿Ƽ¸ȿ˿˾ͽμλϻѺػۺչո׷׶гϴгѳձװ֯ԮѫѪҩԩש٩اצץڥݤޢݢٟ۟ܞޞݝܜښؘٖٙܕߕޓ؎ڏޏߎݍ܉߅|{zyxxwutrpqoommkiiffeeddcaa__]^[[YXWUVTTRRPPOOLKKJJIHFFEDCCBA@?>=<;;::7755433222100/////.-,--,,-...-...//0021133466779::<<=>>?@@BCEEEFGIIJLLMNOORSSTUVWXYZ[]]_``abcceeggiijlloopqssuvvxwyy{}}~݀݀ނۃ܅݈މ݋ۊߐߑޑޑݘڙؙؚ֚؞ٞ۟ڠנՠԡ֤ؤئابڨ۪ڬجiװٱٲֲԳԴڵ۷ٷعּܹܻܺҺҼտֿӾǺ÷ûǽͿ˾˽˼ͺ͹̸̷ԷֶԵѴӳӲϰ̰̮̭ϫҪԪѪͧˤ̤ϥӥ֥֣ӢѠաןٞڝ؝֛כښڙژؗזՔՒؓےސَ،ڌ݌܊هވއ߆ޅރނ߂~~|zywvwvtsqpponnlljiheeddca``^]]\[ZYWVVUTSQPPONLLJIIGFFECCBA?>=<<;::9765444311///.--,+++*))((((('(((()))**+,-...//01234557789:;<==>?@ACDDEFHIJKLLLMOORRSTUVWXYZ[\\]_`aabdeefggijklmmnpprsttuxyzz{{|~ނځ؂څ݈܉و݌ލݎۏ܏ܐߓߔޙݚۚڛכ؝ڟۡܢ٣ע֤ץڦڨ٩٨ڪܫۭڮi֮װزسԳյڷ۸ٹغۻ޼ܼٽӼѼԾԿӽʺĶik[G O @"(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/cynthiune-splash-faded.tiffCreated with The GIMP}]u]A&HHcynthiune.app-0.9.5/Images/eject-pushed.tiff0000644000175000017500000000236210413127231020306 0ustar gurkangurkanII*  >12" ?B*PT6NS6AD,قUkmsHNR59<&tzKx݅n_d=AD,#-0bh=n߅܁dV[7/1c+XX[3b|zWSW253 -PS-Xv|}~qLUX1 9 KN)莓Lnyyyy{|yiw|AY]3;GI&~@esuuttvwws_im8UW/C>@!mq5\loppnoorrqlV_a0FH&Kqr]NO8^KmttY;I455555555678888889*++,,,,-,-----**PP#bI$vw)}~,|},}~,}~-~--./0113334zz.{{2Kc{}}}}}~~~߀߀|VKӖ E@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/eject-pushed.tiffHHcynthiune.app-0.9.5/Images/anim-logo-4.tiff0000644000175000017500000000212610244210431017744 0ustar gurkangurkanII*0 8#k't' x *+9@:C@CH@HHOH CxxC :jk:+VV+  >kEk? 'KsLsK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@(FN(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-4.tiffLGLGcynthiune.app-0.9.5/Images/dragged-song.tiff0000644000175000017500000000271210375360022020272 0ustar gurkangurkanII*x6BCDDDDDDDDDDDCB6'V'V'`'`'`'`'``'`'``<'`'`'`'``'`'``<'`'`'`'`'`'`!'`'`'`'`" '`'`'`'`'`'`'`'`#################'`'`'`'`'`666BCDDDDDDDDDDDCB6V E^@p(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/dragged-song.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/save-as.tiff0000644000175000017500000000445410343370074017300 0ustar gurkangurkanII* 8TXXveihOPNRXNQ_RSe]K\S?KGt9?=a.//N"#"?86& 0 /痗JI4X`TƻA J @R`ce\RPlro|:<>"((167(0._H6yz}|PTS,-,%&%bdcTZX{QZZaij)./H7ۻksptxwkongmk|ekk} H.  pDgzv\52;>>????????>>:-  =@ $ (R/home/wolfgang/programmes/gnustep/Cynthiune/Images/save.tiffHHcynthiune.app-0.9.5/Images/Cynthiune-playlist-48.tiff0000644000175000017500000001267010376622551022004 0ustar gurkangurkanII*^ -=,B3ҿ¿ȝޓC7ȘC<ϷC,բ&C?ȿϾϻ̹Ѽνɦ߸9CCʦ̮ΩЦξҤ̡ѩүҢѮ@CG؞ӚАωԚ֫͂Ў۠ޤǩ BCmڐ؅{kkipә֟١ۢڢCCl֧iVR}МҜӞ՟Ŗyy{{rrxxDC@ǻA9̾Cպ~ЛҜМDC<ܘݘ܊ڇևʏΚΚDC0֗ٛ՛қЛ̙پDC |r~kqnhDCnDCDCDC DC5{{DCAttqq~~vvvv~~DC  DCDCDCDCDCDCDC  DCIDCUwwpp||ooll|ttDC EDCDCDCDCDCDCDBB=| |= .[||[. .?FFFGGGGGGGGGGGGGGGGGGGGGGGGGGGFF?.00< ND@V(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/Cynthiune-playlist-48.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/anim-logo-6.tiff0000644000175000017500000000211610244210431017745 0ustar gurkangurkanII*(''  *O+9@k#:CL @t8CHE@xH/HH/CxxC/:jk:*+VV+* >kk? *'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@ >F(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-6.tiffLGLGcynthiune.app-0.9.5/Images/stop-pushed.tiff0000644000175000017500000000235010413163657020212 0ustar gurkangurkanII*"////////////07BTc'2:)6>(4>'3>$2=$1=$2=&3>&3>$1=%2>(4> ,6j7gqyxwqpmlllmo_D7v{17y}/7y}/7z/7v/7o/7n/7m/7o/7v/7 7  D@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/stop-pushed.tiffHHcynthiune.app-0.9.5/Images/previous.tiff0000644000175000017500000000360010413164353017604 0ustar gurkangurkanII*T0//  DS&$7 <{  '3m0vo` !% 4% )5i1rm%0u* 2)+0u$ )5i1rl)2o5i+ 2M -{4j2m# )5i1rl6,4k6f4g+ 2x$0u5h6e3m# )5i1rl^ !.y5i6e6e4g+ 2(1p5g6e6e3m# )5i1rl%1s4g6e6e6e4g+ 1(+3l6f6e6e6e3m# )5i1q4}j)2o5f6e6e6e6e5g,^~4-{4j6f6e6e6e6e3m# )5i2o/q;r6f6e6e6e6e6e5g.zZv5h6e6e6e6e6e6e3m# )5i2n] R{6e6e6e6e6e5g/x )4I8g6e6e6e6e6e3m# )5i1pgop6e6e6e6e5g,~ .&Eq6e6e6e6e3m# )5i1rlC\6e6e6e4g+ 0[6e6e6e3m# )5i1rl!6@m6e4g+ 1[w~6e6e3m" )5i1rlR{4g+ 07R8g3m" )5i1rl oo+ 0/Cy" ?HxF)sHe 0 L'A<I _~dddD' ! C#& A.@Lpx(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/previous.tiffHHcynthiune.app-0.9.5/Images/remove.tiff0000644000175000017500000000366610343367437017253 0ustar gurkangurkanII* %A+S'C#' a  n & J02 Z 8Ҽ u+Tp Qfʝ @ aћc $!s Z ! Vѝ7 ln> tt  |l $  %) n s Uf“, ]&5 s}8ŝ Q ?]mU(  Y^OrYܪ / j> pIx. "" L/E} y  K T;3\_ ##""K%'S  y XKu;&M %%(Y-]8ƞ [ r RO*=N !!$$ ;j8pXڪ =e* *B .q{??>*"mrc4 _{r $~~}899;{{~gzxxp$  'ZZ^xq2 /??Az};2'vLG> 1'Vtvk> .MD< * 8$Z/-e2Ly<* >ywmpz& 6za!{anAzBnCr& 2zJeSJ_I$ .HC:Jb_E:HRVbaNBEPS= "4/&3IF/'3<AOWRNMK@'#"!*2421+    @  FH @e  (R/home/wolfgang/programmes/gnustep/Cynthiune/Images/lookup-mb-off.tiffHHcynthiune.app-0.9.5/Images/previous-pushed.tiff0000644000175000017500000000365610413127615021105 0ustar gurkangurkanII*|0//#)+,48*15@JM077uZ(+)m~csx9$*)OZX;B@v :?;ajd p i3:8쀐=DBpU_Y sFPN󑣞>DAn)!hun r_je?E@nP).*~ƶ r 7 $#p~{?D>m  :A;펝ѽ r'b-30傒>D>m$T[S t, BIF?C>m((nwhl vwvYd`}|OQNޅ|̱ݾl ̵޼l (,*:е@E=f|w +Ǫ?C;i'KPGd߸ zz'>C:k#')#6޶ yxeme=B9lƯݴ xw5i9>3Q |vcia{  +ѳİðyzIQFr7=6V ~k#N HV@s(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/previous-pushed.tiffHHcynthiune.app-0.9.5/Images/play.tiff0000644000175000017500000000203610413164455016702 0ustar gurkangurkanII*" B$) &2p0s'Q&3m5f4l-}! &3m6e6e4g1r)]&3m6e6e6e6f3j.z" &&3m6e6e6e6e6e5g2p*k&3m6e6e6e6e6e6e6f4j/x# j6&3m6e6e6e6e6e6e6e6e5gW$&3m6e6e6e6e6e6e6e<jw'3m6e6e6e6e6e6ef%2'3m6e6e6e6e@mf|'3m6e6e6er-'3m6eJuWp'3m(EJf%K  =@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/play.tiffHHcynthiune.app-0.9.5/Images/slider-knob-enabled.tiff0000644000175000017500000000216410407712740021537 0ustar gurkangurkanII* #x/0+Z !5 Quu..x "00eգ軻 LL IllԆ qR cBBXafihd]Ev+Ik3BKOOH;80Zl.@LSQG8&>) I c%%=Qakh[H3,)! T&&EE]s}iR: ~ p+|V>>__xmU 55 4P()5""N>>j``rrnnYY77j;i( 6 $$G,,L++D**D&&D)n6 ( Z  |yZ( ))  LN@dl(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/slider-knob-enabled.tiff(C) Wolfgang SourdeauHHcynthiune.app-0.9.5/Images/add.tiff0000644000175000017500000000307210337462107016466 0ustar gurkangurkanII*'8'8 'R'R '`'a`'c`<'c'c'c'c`'c'c`<'c'c'c'c'c'c!'c'c'c'c" 'c'c'c'c'c'c'c'c#################'c'c'c'`'a 2oo2 *678888888888886* <@*2(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/add.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/anim-logo-5.tiff0000644000175000017500000000210210244210431017737 0ustar gurkangurkanII* ''  *+9:CCHHHH CxxC :jk:*+VV+* >kk? *'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@2:(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-5.tiffLGLGcynthiune.app-0.9.5/Images/anim-logo-1.tiff0000644000175000017500000000207010244210431017737 0ustar gurkangurkanII*"''  *+9:CCHHHHCx xC:j k:+V V+  >k k? 'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@ (0(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-1.tiffLGLGcynthiune.app-0.9.5/Images/lock.tiff0000644000175000017500000000223610351307425016664 0ustar gurkangurkanII*\?`eO#Z0)EIz"g<V3 qkJ( `74 _81\7/qRy_b;N3-5888888700D)>%$$$%%%%%$$$2%=$$$$$$$$$$$$2%=$$$$$$$$$$$$2%=$$$$$$$$$$$$2%=$$$$$$$$$$$$2%=$$$$$$$$$$$$2%>&%%%%%%%%%%%3% )#: 5Bx@T(R/home/wolfgang/programmes/Cynthiune/Images/lock.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/song-pointer.tiff0000644000175000017500000000211010244205604020344 0ustar gurkangurkanII*   -ODvIIEx1U!9H}IIIIIII~(F!9II;gI~IIIIII*I H}II&:eIIIIII#-OIII&4DvIIII7_DvIII& *JI~III~ IIII& 8bII  IIII&+KIIExIII&2CuIII~ 1UIII&;fIIII:eI~II& -NI~IIIII+(FII1UEwIIIIII1U*IIIIIIII1U#7_I~III~:e+   E"@8@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/song-pointer.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/cleanup.tiff0000644000175000017500000000271610343152457017372 0ustar gurkangurkanII* |F%Pe9U6I) P)\ )Q'#)je8 (qQ.N- r5q&g# uT*ܔ.n _! Fӗ;ԑ4т(N.x#% P>(oަH֒6ӊ.. *93  Uʈ4/~32FH4aR;|.ؔ5͂+Š9(B]eQ.U†>֕9ʄ.ה7v.QvyO$  WӍ5۝?Ҋ2ڗ8y;v@dTB;ܟB۝CΑAۨQxBb,'BG٢LՠNӖB?פSqFK$ [ĐJեVأRʍ>Ө_إTeV7w8(saʘNΗJ֤U٧W̒B۹qӝJXRBb( (|n[Uۮ^ԫd٫^UԮj€ʟW;=7K ,{ģgЪeָ|׬eeԩ`߼r۵n] #!r6 0lÛ\̨jЭq{ɞ_ϮrߺoӮh~\ P! 4d^StrDybAV8~^3Ȇ`2}Y1yDOĢfJyhSvS- &+/4 D \ v J5$v @~@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/cleanup.tiffHHcynthiune.app-0.9.5/Images/anim-logo-7.tiff0000644000175000017500000000207010244210431017745 0ustar gurkangurkanII* ''  *+9:CCHHHH Cx xC :j k:+V V+* >kk? *'KssK'&,KkkK,"'>Vjx~~xjV>'+9CHHC9+    D@ (0(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/anim-logo-7.tiffLGLGcynthiune.app-0.9.5/Images/song-inspector.tiff0000644000175000017500000000417210343363024020705 0ustar gurkangurkanII*& !$47<>47!$  AC||AC vxvx!! vyvy BL BL |&|  %:%%2+ %: 9P=>0)88 8PB]MI>2% ,9CIB];]KKRIA9/("%,45=ENH;]*W<<[TMGA@<9:?>DJQX:*X  L//bc]XRNJIILQU[`. L8OTTgb^[XVWY\`eQRO8 # _<x̿Ϩppx.Zжu# !#$&*_:(++,x}h8mk  -=BCCC&C9C@CBCCCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDBB=||= .[||[. .?FFFGGGGGGGGGGGGGGGGGGGGGGGGGGGFF?.it32MUHf iiZ߂ZۃZڄUمUن$ه$߿؈!޾؉?Ԁ݀ يUՀ݀߀ٌ߀ٌրٍ$ ׀݀؀݀ոáwqp qsw鴠)+Lɫᢠ(,Ҽ߀%瑠ܝ}}~!-մ~_ckjhjgfhicRTtg,V[pƱhKH7 ,fnX  .Ջ`Ɓ # $lǂ90Y~ ỳ u9X΀Ԁv0 5vqI4wg1qc/vmxP$ 붯р%n Nj8!&/lȲ`#*ށ0یkwŒ6"#0=楲gRͦK#';=h0˸\))^ހ;i!ǽa++);fDʸN3+*4 c#̼0+'c▰Ӏ!a!5‹s.),Ժ ?܁Ҷ`##MÍV+'Rѵ[̀ӧн\ "m5(.ΰ߄ڟ'W'ֽ+*gή߅枷ܺ R,<*:έ&Q! 2-0ά  N #$!$&D 1,̬ʀ߃'M $"$('$$%&E[-`̫ Ȧ؀4J"I(($%%()G0Oʬف,ؿL({.&)*+G0I൬ԺAݼO+B)''(&&K2B؜ֽDڈO,q-))&((N7F؝پ)ڿJ,T-'%((U7M½(ǿŴH+;&)'*k7Xȳ-׿ĿD,`**,-2k-ͳB-3,,1w/| Ը&@,7,'-3˂ >-5(+8}ɬ߁=,*'8Ѷ ݁:, ^(#nݕ8, +G ͱ㺍70 G0׾W90 h") ˰t80|>+ ׿u\83 {~g.| ε҂q*0 ܐu1w ƫ$+ ݋m6wվ} 55 h;z Ϸ35 ݱp{= ʳ/1΀؅lw9 ǰ~,3ׅ`u=Ů~-4ӂ繇cw@Įn/6؀dfy}MŰpy09乆fj}Xgdzve 18ҟcap>˸~mi#˩xx03j]hxAʊпwias#ҕX9,((+-/8h%"T[esO\;ǶvjggъA(()'&&$'' bt>zof^a`jj1{`Rypjb> $EøK-vxºd!  "%4(ғ-" !!""!!#$(*8$D$$ !! !!%$%%'%%'(..D ($##!"#$%%')*))'((*,0g]'$&%&%('()+-/,**++*,1<&%''*++-/,),-,--;0% &')+**-.,)-/. .%$%&&%'))((*,.//T6&%&' )*((&()*.00GZ'&'&&('())('')*-0R.())'(()*))(*,+/k,)+)++,-.1R8'())+,--2fpVFJUs {{UHf iiZ߂ZۃZڄUمUن$ه$߿؈!޾؉? ڀيU ځ ٌڀ ٌ# ٍ$ہ  ڀ áwqp qsw鴠 ڀ 0S ɫᢠ ۀ"0 Ҽ ہ (瑠ۀ#"êz^dljikhgijcW[}m!՞R[q¿DziML7!ڹbn«Y 俁`ʀǀ$ iǁ;Ձ&X~" wπu: WՀv0)sqI)ᆡue @垈q ^-uɀnqI?ೱn ć3$Mݦlɱ]"'ڌ*kwÊ1.N짳gṚD#87g0ɵX"$YCh!ƽ\!##7eCɶH) "2=͓b̼}$"%`>`2h##*κ?ϴ_L‰I##OʵB]ХϻZ!lѿ,#+ư쥃'V%ӻw#$`Ů рط Q*0!3ŭ O0x!(Ŭ&L"#A%#yĬ*J   = L#XīAҩ׿G~?  >z"DĬ*ҺJ!h$ "?ߡ!<αԻـAſֶC ϔ7  !"Bڶ$8əֽ䊗ּրؿB վa% $#E)<˜پڀ(ӹѺ= ԠG$" L)B½@տ; ˇ4"" #^Ծ)Mȳֆـ:Ϲ8!յV#""!'cͳ@ǿ7"r+"*b%tԸ߅?5!І,!!)|%4#Ӆ)"!0{ɬɀ3$Ӂv$!3 Ѷ ߀ ā0$у҃ N k Ґ/$уӨ!B,ͱװ,$ц Լ?,׾(جRt+#Ѐт ҟd&3˰޺l*#Ѐрπ ѯz;$׿oV*&у ӽy}e%wε{f#πЀт ɍu&q ƫρЀр džm+q#վ}ӀЁ'&́̀ ͆hͽ/t"ϷӀЁ&&ťn{1!ʳӀрЀ'(΁ākw1!ǰ~ӀрЀ&*ρ ā`u5 Ů~ӀрЀ&+̫cw8ĮnԀρκ'+ɧcfywFŰoxـррη"+ʫej}M_dzveۀ)ε#+bap3˸~miڀ'ĭtffqDZ"(i\hx8Ȋ<пwi`rз}E' !'TqQ[esEU4Ƕvjffлv4  ]t4zof^bah`'xQJyrk_6  77øD'msº^ !-ғ% !""%4 D! ! "#$%&%'A'!! !!"##$$#$&('*f ]&#%$%$'&'(*()())(*,<%$&&)**('(*60$%&(*))(''(+.$#$%%$&((''('()()**R6%$%& ()''%'())++BZ&%&%%'&'(('&&()*-O-&'&&''((''&(*)0m )$%&(()'(*-N9''((*)**0dpVFJUs {{UHf iiZ߂ZۃZڄUمUن$ه$޽؈!øݽ؉Ȼ ޾؊̾޾،̷¹޾،زĺ޾؍$些ƻ߿8ۯɽvvpo pqsw鴠9˩̿w-ǩ~ ᢠ:̰m{л ;ɸĸmo瑠ɿˀƉxjkkexjY߂ þйr\grqgKDVwc94Q^xӽqH4 {€,¾]tж\ TÂ-g`׈ {ÀŁ c؀߀ֈ $Ä(VՄvۂÂÿvۀ{-ȀĀÂüX܀~! ĂÂoր܁{ 0 āÀ) EĀ ďx &! ?Ā|ހ$x!!yP#" Vã߀%x""ʍ5!#XC¨v ѻa#!cԀĘۀ/q x̑6v ۀ7̞hNҬI!#ن?Ѽe,̻[=ۆ<جż¿b}ĺ] c ك +¼]:ų;"#OڳWtĶg[Bу2S,kLxʀDrN>k6 4 ּƀBɑQ|ÕIUi"wչp BhhWBӷ|&吞=!l%#ҵ&ꋙ:#xWpҵĎ8, Q Ҵ@ۊ6-;:ҵC{y1Ut-,\/Ӷ%t}u5_N-v,ԷCwr~~{|~}|}~{hx6fl+.)ֺ0ai}kq}{y|yyvxxyvxwhk6hJ 1!,ٽB{zztegusturrqrsqmbb{2iw86!0§A~yywuusqc^ckpmmjli^Van0jc& B!8Ȫ~{yyutrrpomleYRWXYVRRX`e+m>\FͰ){zxttronkkjhhfe_ZYTVZ\b_w)mU!MVԸ|~|zxvrppqigfedb ]\^Z\Z[[X(oc# b va`_\YWYXVVUUW)qe# %mɫ {ZZXXWVSQRONb+q Y*|Ѷ^USRRQOMNKLIGs)s <hzPPMLKIGHHFEB4\(t !@ͱUJHGFFCCD@@=3Fa&w =* ׾bFDAA@><><<9:.M%xe' ˰ E@=;;:8896 7.&[%y s<' ׿O;97652130103402v%!| n}f(y εB520/.,+,-/1,<{ vt*s ƫx{xvvusruva| pm/s վt "~ oh;3v Ϸ!~ j{5 ʳ{mfw4 ǰ~y o`u7Ů~{rcw; Įly^fyyHŰon $oaj}Qbdzvet"${\ap4˸~met#kUKKUk !uv`[hx7Ɗпwi_f$_7""CWIYdsDSǶvjd`pqU'Xp~4zof^^[_oM!rXJyrk`9!>7øI(ouº_! "%$.Ғ)  !"#%&'(5$G"!!"#! "#%#$%&&'()**A )%##"#%&&''('(*))*+,)b ](%(&%%++*+-,+,,+.*<'&$&*+,--,+,,+,.40&$'*--,+,-..&%&('&)++**+*+,-.//S6'&()+,**(*+,./0GZ(()('*)*++*))+,,/Q/)*)())+,++)+-,0l)%'&((,+.O8',--/-..2dsZJMVt {{t8mk@/J I  M S[ b $i)n-r /t 1v 1w  1w  1w   2w   2w   2w   2w   2w  2wu   2wY  2wa   2wg  2wk"   2wn&   2wo*  2ws,  2wt/  2wv0   2ww1   2ww1    2wx1    2ww1    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2wx2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    1ww1    1ww1   1ww1  1vv1  /kk/ -@Set~~teS@-);M]jty}~~}ytj]M;) $3CR]ejmnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonnmje]RC3$  *7CLSWY[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[YWSLC7*  *3:@CDEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDC@:3*  $),/011111111111111111111111111111111111111111111111111111111111111111111111111111110/,)$      cynthiune.app-0.9.5/Images/lookup-mb-on.tiff0000644000175000017500000000470210413141300020236 0ustar gurkangurkanII*2 V U Q SD(--OSS==g !0%,,  0 8ffppEEsLL}0bb !0=R!B <##>__VV33W{{++KR-#XB! *D7$$?;;dHHw33W0#WbK88O#  H_::c,,M{{55ZttjjZZDDqK-Xww^YY bN LOO}}..Ppp..Ph_\L_mm\K P++K++K..PSS< 1 %%A''Eo bRJJWC> . {{ RW66< * eeYY{8$Z *(d2Ly<* >ywmpz& 6za!{anAzBnCr& 2zJeSJ_I$ .HC:Jb_E:HRVbaNBEPS= "4/&3IF/'3<AOWRNMK@'#"!*2421+    d  El @  (R/home/wolfgang/programmes/gnustep/Cynthiune/Images/lookup-mb-on.tiffHHcynthiune.app-0.9.5/Images/Cynthiune-playlist.icns0000644000175000017500000012006710376624462021562 0ustar gurkangurkanicns7ics#His32 mbunovbbb{{|{xbbbꈅx]&f؀̱yejϖ =du~7퓮KexlgifccEFtaXu~7FQP=_>pzRSOK0YWBgwu~.S~srUhڏ}g\:~?`E~u~-zBhfxUܱNM}:˂Zu~Կ#`ecgpbc}ӁݼЂԚԨ׀چՑӁPsPہ S޵/FuӁEρ$ESS׃^qР^Zm92|ܗ^eķ^].ӂYP܁$T\Sdwbl.YW4IÙeJWאӁTTrvSDi]h`[t1˨T1idnfgA]ӁfUT>BpךJǥ]s1ÚTOղUF\Ӂ-UYzvޤluZiuazPRd``gۈZ^\tW\ӂ݉ ۅ ؐRcqo ~v?0Qsx|ϳulxtI܂t_+}V>vLϭmp$ώ\Pxln\dySքnmz+gXiFOl|>zdW`9dIPbgeXOPepqz]WxÔl/UqZǗy֊kYdtbluX[d`Wt_ӂހۃÿڎ׃ځ݅Ӂ?RZ؁sai^rÎ~ޡCẂ^ՅӁv݁2E܇bܪȿޤŒx޵Nm8UتLѣӁCW|݁3P[RrV^FayRlxVaLX}_DLc9فӁS2ѬwA^Wȝ/M]{KЪXvxL`e_^Ҝ/Lę"ׁӁpsޕobWkTkGJN?vxK3Q<ɑkRLty?ׁӁ]%evdjϖ =du~7퓮KexlgidbbDEtaXu~7FQP=_>pzRSOK0YWBgwu~.S~srUhڏ}g\:~?`E~u~-zBhfxUܱNM}:˂Zu~Կ#`ecgpbc}ӁݼЂԚԨ׀چՑӁPsPہ S޵/FuӁEρ$ESS׃^qР^Zm92|ܗ^eķ^].ӂYP܁$T\Sdwbl.YW4IÙeJWאӁTTrvSDi]h`[t1˨T1idnfgA]ӁfUT>BpךJǥ]s1ÚTOղUF\Ӂ-UYzvޤluZiuazPRd``gۈZ^\tW\ӂ݉ ۅ ؐRcqo ~v?0Qsx|ϳulxtI܂t_+}V>vLϭmp$ώ\Pxln\dySքnmz+gXiFOl|>zdW`9dIPbgeXOPepqz]WxÔl/UqZǗy֊kYdtbluX[d`Wt_ӂހۃÿڎ׃ځ݅Ӂ?RZ؁sai^rÎ~ޡCẂ^ՅӁv݁2E܇bܪȿޤŒx޵Nm8UتLѣӁCW|݁3P[RrV^FayRlxVaLX}_DLc9فӁS2ѬwA^Wȝ/M]{KЪXvxL`e_^Ҝ/Lę"ׁӁpsޕobWkTkGJN?vxK3Q<ɑkRLty?ׁӁc}߻{vШ {t ߿{o ѻx or ܾ{t wfxŧUT~ ndljmʴ&~>]$^t~tg`jϖ =du~7퓮Kexked`]]?@8E*5(jH]^^R>taXu~7FQP=_>pzRSOK0YWBgwu~.S~srUhڏ}g\:~?`E~u~-zBhfxUܱNM}:˂Zu~Կ#`ecgpbc}†\]%`Н7Q懑P$P``mlh~B:mulk5ʐg]$aj`s䉡۴q}5gevLϭmp$ώ\Pxln\dySքnmz+gXiFOl|>zdW`9dIPbgeXOPepqz]WxÔl/UqZǗy֊kYdtbluX[d`Wt_I_hpylɃNdm2PqğߡנZ~AbğX΂Ne3\i_cmQpɌ_}cpXfnOXrB`̂2ƉKmd浘7YkWġfXounm6XⰕ(Ӆqe{a{RVZIˬWϖ;^F|_XI<^XmbvVqeg;9O@h[J[r*Vh:Wt-Ɓ2ށ ɿ Ѐϵ ߀޴݀{{t8mk@/J I  M S[ b $i)n-r /t 1v 1w  1w  1w   2w   2w   2w   2w   2w  2wu   2wX  2wa   2wg  2wk"   2wn&   2wo*  2ws,  2wt/  2wv0   2ww1   2ww1    2ww1    2ww1    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    2ww2    1ww1    1ww1   1ww1  1vv1  /kk/ -@Set~~teS@-);M]jty}~~}ytj]M;) $3CR]ejmnnnoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooonnmje]RC3$  *7CLSWY[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[YWSLC7*  *3:@CDEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEEDC@:3*  $),/011111111111111111111111111111111111111111111111111111111111111111111111111111110/,)$      cynthiune.app-0.9.5/Images/playlist.tiff0000644000175000017500000000303210413136056017567 0ustar gurkangurkanII*%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L%L A@ (R/home/wolfgang/programmes/gnustep/Cynthiune/Images/playlist.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/Cynthiune.icns0000644000175000017500000014072510256131044017710 0ustar gurkangurkanicnsich#H??????????????????????????????ih32пHU֪ຐ$ؿ̑\Virnqhc XƾoXǿŭp癇 dÿƿ)'maȾżYƿۄUZǾs꧖ƿĹÁm¿žÿoĺžľ܀Z·öź΁絈žbͼӾՂTҶ`ՂˁUϾЭǀ ܂ л΀ ϟ΁ϼ۶ ՞ۂLۀŰذŹsǼƒ ߀ր ) 3ѓ7ܙUԁ 䫪%O"pFV$ R< hW9ݿu*&('#ӿHË؀Uۀ ۪鼐$ż޼ZWjrosmk wSqփQÿÿưt晇`)maýǾ'Vľօ(Up)ᢖƼÿ*lÿſ*nĺžX*׈µĸ¹}܄żɾςڄh̹мςWϳ`ǁ 흂ւ W˺ͪÀ Ԃ ̷˼ˀ隂ƹμѻɏ囂$لɷ԰ᎂ$ޡбþG*̰ѫֿpׂո؀ܱ)wہр )с֕ڷс0 Ōрw7߽Џπқ"U٢ҳ"Oր ҹ mЂ΀@ TԀЁͪ %Ԁ΀ȇ Pтͨ7 bԀǖO8yǬm&$%$"$Ⱥsͼ Uо  ĵ    "Ƭ{VZr}{|kUg d\ҹoa~qGտo{Álaрӎn#HÁ}g԰ÀZҀԥ óQՄͅ\#ÆďdЀρ Ҧ$ѩtĺ¿̪Kہٸ¼¼e ڡ&Ӵ\}$ɏGsDvGz r } r|uOl~w|v\zl}{xomovuwcw{lm~{xubptoqnlnkdbr7z u~{wuqnkUfhhfXSfUvwtnnigfbSKNQMFRZ!okqlifc_][YWNNMPS_[efSQPMMKJJrPHGFDDA@|n_ |A@>;<:7R#|>8743+>W% i3/.++)*):or; >;97766:8>j7W1Ayg? )N{s=*[xsTh8mk  +dǾ}S(mRt aB w r_+ 7-q .?Cv& 2= G J>pO"  R*U% TW& 0W' W&  U&  pP"  BHt>yf27U&  uB7ޏ^/ #`wF 3Z. Cj> )NʚtH%.UyO*2W궛zR. 2Uz̭tP. .No׵jJ+(B`|Ʋy\>%3KdzxaH0 #5H[lzxjYF2!  *7CNVZ\]\ZUMB6)  !&****)& it32d Ձـۛm֬fՀrHՂ݃ ҲCՂ݃߁ җZԁ܂߂ έ?߂ ׽9mҀ܀܁u ԁ܂ u ԁ܂߁Ԝf ԁ܂߁ۈ f Ձ܂߀ ۳GU Ձ܁ހ߀ q Ձ܁ހ߀ > Ԁ܁߁ ԁ܁߁ դK ԁ܁߁.ə~ ꨨ i:+.3436:-TmӋ$!ʳ-,LkmB.Uז‚+)AWq¿!Ż^<1y֒ 8=SexȾvQ5Mԇ U7JWsĺļbLP? 8>9]ŹžĨW+uڪ;tJbǾú­vN{٪UxEjǺƺùʾ`V37UQüķĽǿ[37qUŹĶʿǾžqUIq~lĿĿžÿȀƺĹκxD;eVŽĿöǹȽļĿ_ ObÿĺŹ͹þO<MzjþþŹĽĿöL璔Qr=Ŀƿ÷ǽļނL:ýƼȿƾƾwLdzǾüǺŽý÷ŹÿĿJ~eʿĿùƿſŹȿʹĽľftB oˀ9ÿƿŹüſǽƽd苐GᛒǼÿǼźǾȼfŊ@Eoþƿŷļÿƽʿù}ZEyýǹüƿǺÿýՊ fĺȀſĀ/·ƿž¸¿üĹýωxFR¹øľɼļ¾ľ½þľފ 'o¸žŹȾǺɹ÷ǀǀ¿žȾCGmžȻ¾¹ǻÿHӶĻƾ̿ƴüǻɿu H½Ŀýľȿ¶̹ 6ǾȶƿľŻĽŀǾ!3}ҿ;ƿā¿§v Iׂ¼ҿ½ vvɀ;·̻êK޷dλķĪKfſе̼ĬLUbþ˽εzlnDzĬ݁O᎑Z[пѷ}b94_~и ځ"O@bκ̛u.ѺҀ ¬ ڂ"mkžÚ:ŴЀë ؉$ܾO@˶ʮƁ ؊#}˩%Ϸ ف"Ͻѭ$Ӳ ځ"ѻո$̾Գ "Ҿټq϶Ѐ $ߡƳκ̪#ȸ GއȲ̿ÿ BԺγج @h̴  1ͬځ ڷ ځ<սڸ݁ ¹Ӏ-ѱʨ :fQŭީ |;۩Ԭځ̪؀=9ͱǯ5ѽǯJӂ5Ӽ} @5ü8 2v,S3_/3y1߂aكWy ք #fo޻' * yʄaE̍gyyn*޽Zo` aǙs܄) ^֨cJuץbăJ ٧m|t Ȕ)2 о2+у4(e9zkFQߐ]ݘ)_ԗ2o[.@ޢ==“BEɖRX߸R 7À= =s}B'@ǒ@* MĀȬ2Mۀ تV frs݋ DŽqqf/ 9ONOOMMPMMA Հفۛ&m֬frHڂҲCڃ җZڃέ?ڀڽ9m܀!| ڃu ۃ Ԝf ڃߍ fڃGUـ ڃq ۃ> ڂ  ڃ ֤K ڃ &ڀ ș梨"׀g;,14344535355:B4[xӋ$л(+KknJ3"Vז&ΰv&'=Uqż_>4}֒'3I`y´wS7RӇU.ծAKsÿƽƽfPU?؃/Ͽ54ZǹũW,z۪2h?XǿŽÿðwP٪U2k>fȾǼĺþaR33IIžƹƾ\3 5hMƼŸĹǿrVLn 7rbǽżϽ{Ђ@ :ZOǿŹĸĽȺ˿žö`ݘ :vZļýľŽƼμĿPЉ<o]ÿĿƼùƾŹM䍔,f9~ľĹǀ žʄ 7ý,ǾýǿmCYvȿþȽǿĿĹǼ왒[s]ĺƼ˺ƿſftBè9ƺľüǾǾe≐]ؖȾǽúƽȿʾÿþg=^iƹžÿǿýļù}Xw%ſǺľȽĿ`bŽʿžøžøĽżžxWRüĹžɽĽÿĿľÿſف6o¹žƼȻɹ÷ǀǀ#ƿȾA%ožǺŀ%Ȼ߀RӶżƿűûǻʾ¾vق a½Ŀýþȿ÷˵ :ǿȵĿþĺúĀȿ¼3̽żÁs 7効ǿмɁ ǿ(́ɻê8pͻôȀêKtĿʹǹ̾«L_i½Ⱥ̴yjkİ«Od`ͻδ{b44\{̴ [Hg˷Ѐǘr'.ζ "wu»&:± #SD̾Ƴ%ū #˽Ǧ}˳̀ "˺ͪέˀ ߄ "͸Ѳ$Źϯߊ "ͻӸq$Ż̲ފ "ǵƪóр ݊ *ĭ̿üؽ݋ BǗǮҨއގ @nͻǯہތ  >ǧӲڀ݀ރ߂߂ >ϸҲہ܁݀އ߀ށ9ʻʫâՀځۀ܂݅ޅiVр6Ҿ֣؁ځ܅݁݀ހ|;ڨιͥՀ؃ځہ܄݁ۑģЀϹӁ؃ڂۀ܄݂85ūԿЀӁՀ؃ڄ܁ߪ4ɵѾЁӀՁ׀؃ـڃہݫJՀـ˵тӀՁ؅ځq@6уӀԀՀ؅ځݶ2 vـρуҀӀՀր׀؀ׁӥ(S/πуҀӁՁ׀؄W/ҁρфҀӀԀՂՃј0yم.ρцӁԀՂ؁V ́ςЁфӁԁՀ׀MuހʂρЁцӃԀրԃ#(̓ρЀцӄӃ]kցӳ̓ρЁцҀӃՀӕ$*#ӪsσчҀԀҰUCۀؿ˂τЀцҀЃֻZy݀԰rhƃσЁшҀӀѕ&1ѳ{UeτЁф V `,׽nƒτЁтЁ̒%+ ^ʞX́τЁсфǖDu6˜{]υЂшA  ͝gv΁σЁцh 7ͽσЁхdž'2ͻÀσЀуŇ.+̸σЀсƅ-"րтς΅̀ςЁрz#eހۀՀԃсЌρ̀Ёз0ހՀԃрЍ΃Ѐʬe'jӃсЊ̅Ā< Q ڀ؀ӃсЉυ| \ ڀ؀ӄсЇ΁ς%]ۀ׀ӄсЅ΃πɼ-nڀՀӄсЂ̆πÏR,@ځՀӄуΈÎ7;ՀӄрΊʩ;DڀԁӀ̀Љ˭J XځтЇĢJ 2ۂ ӄтЅp6 :kڂ ӄҀсЃIJl:$<ځՀӄҀтЀȰ8# L׀ՀӄҀ ʰ,  Iӆ “}L `khĂ ʱpbg_+  5KIGFCBABCFGH< H yffmþP ցľK Հրſ/ Ӏր.H¼bրühjӀրýfրžh fր ƾ?Uр \ր )ր ¼ր Ľ">+ƾ#)Ѳzdefeiv1xa:*,366776767 3$?Pl0$¬- /Qpt:'>sv)m*+D]}Ѐ#̼iB+[jwo)m4NiԀǾP17wiUD9H}Ĵi>6n/fÅ"'/]ـҸ`.U} Àŀ#F,Jׁ«Q_UÀŃ!D3h؀ـdoA3Ê>Y+:̩f4Ň JAρ؁˦}V<VÆÿSQӀ­|0fĀÇ ÿjEFр̩c~z ĀÈ ¿`UՃ*œPs-ƀĄÅâ]UӀՁ+MqǀĄÅX9҂Ӏ؀  ĂÅ8Ԁ,ѶYrĄÁQ}Ӂ؀׀&ˏ{xĄ#ħe]ـҰqg6mń_ڀ1׀̩nkuāC|˧i1\éfӿGCĨ}ˁ̧lفV]£\фTԁ%̀ˤӁށ"ʄtŀ Ȁ˔3ց݃`Ā ¿¾ǁȀɫwًϡſ#¾¼ù¾ǀz  ؀ۈ?ӟŻÀ ǼތJ~ÿÿü¾¿ր؀ي5w¿\ Հ׀مIŀ׀فJpy| Ҁ׀K˘hx ЀEִj r ̀΀Ѐ ҩT^AHLSVe[.}Z{urqoolkighgfcbca__^\[[ZZURNKGCABBFJMTUs'f Dsrqrpqlkkihfda_\[ ZYZZWZWRQQRPLM PQRTQX!<{Zoqnonnjiiffcbiyv\[\ZYYZWVTTSTTP QQMMNLMNMQPTBbzkjjfczkVTUSRRQNLLNPMLMKKLLMLz}t'Vz }RQPMNMOMJKKMKHJJHIIJHwCw{VMMOLKMKHGGIIFDFMqn=VLJLJIHIFGFDEDECABBACAulf|_FEFFDDCBAABB>@@=?<~grJOtCCDECBC@A>==>@=;<;<8>h}smQ?AA?= ;9;<;89866+(gE0o~=<;;9:7789:56745.&\mFV@:<;8988754456424210(._pp ^:887564343 /00/0-'CnCFM86423..-/0,,-+-.+'(ktDu;430/.-+*+-*)**),*+(! js5R <30.-,,+*(**&((&()+*(/.Y|{1_j..,*))((&$$%%#$$#%&')(%6uP x +,*(''%%#" "$%'%$P[rh"t ~}ylg#qypommlk lkkllmnnoopqpmoe"z]O&kP M}b.<|_E}fE{g"Q}k?!/zn*.lf.3pf9@ }8*dY*.TU/ ,ie, 8k} wh" 7jes obb=  KPMbTINJ" )96522/../2468/ t8mk@+;;<<=============76MNOnSPG_otß|qQ!J|Կ~<Nݶx2 ?t乔f%:t5pV Lu~'  ?ww'  U>  W8 >z  G/ @% =" (e% ! 9[ 9K EX 9R 2M  V0 Yr) Zo#  >   d- )S& %~?# jw/  0D)  iu1" 9A*Ni2& n=-! :U5' y<.  %W6&  Pk=- G3$ S:*  $^A/" YqI5&  nQ:+  r[A1" x`F6& @lM:*  \U?.  _[D3"  a`H6&  deL:( diP>+ gϳmTA.  iڝX,'PoVC0! jߏ' tsZF2# l t[H3$ mvVv]J5&  m?v^J6&  n9x_K6&  nmPy`L7&  n y`L7&  pz iy`L7&  p܍<4yaL7'  pˣy`L7'  ny`L7&  1x_K6&  +׏t_K6&  +Ԋr^J5&  *Ӊq\H4%  (ḋnZF2# &6맃kWD0" %4~iUB.  "2{fR>,  .\ÎwaM;)  +Sr]J7&  (>ᢃnXE4#  %6e~hR@0 !2DުxbN;,  .>—r]H6(  )8SlWB2#  $2B֢wdO<-   .=^–p^J6(  (7Mߪ|jVB1#  #0Be›taN<+  *:NyʦkXF5%  %4FY䳙xbP>.  .>OkȥoZH7(  &5EWⱘveO>/"   .=Mg濢~m[F7)  '5DXm¨tbQ>/"   ,:M^uҬ{iXG5'  $1BSd޷p^M=,  )9IYk⻥weRB3$  "0>N_t⾨|kYG9+  &3BRdvཀྵ~n^L<."  *6FWhx«rbRA2&  ".;K[kԱwfUF6)  $1?N^oƳzjWH:,   &2@N`p~໬yjZJ;."  )5BRbq㿬{l]N=0%   *6FTcr~m^OA2&   *8FSbrо|n]NA3&   ,8ERbq~DZzl^N@4(  "-8ETbo~Űzj]O@4)  ",8FR`n|͹wj[NA3(   *6BN]jwθ~rfWJ>2&   *5?MZgsƵ}nbVI;1&   )2>JVcq|ȸxl^RF:.%  &0:FQ^ju·|qfZMA6,"  #,6@LWbnzźvj^SH<2)   !)2=GR]hr|ϾyndYNC9.&  %.8AKV`jt~úzqf]RG>4,"  !(09BLU_iqyƹvnf\RI?6-%  #*3;CMV^fov}ztmc[RJA80(!  &-371*#  $*/6;BHNSY^bgkoruvxzz{{{{{{zzzxvsqnjfa]VRLF?:3-'"  "',16>>>>>>=<;:752/-*&"  "$&')*++,,,,,,,+**(&%#!   cynthiune.app-0.9.5/Images/play-pushed.tiff0000644000175000017500000000207010413127416020162 0ustar gurkangurkanII* "&*" is^MRBB{}k+.$ҤϟZ`IQ~֤ܥĐk+.##}ՠ՚}[bH ]+z֞ߣޞŊh/3#&/wכߟԑzbhF  k7u٘ܓʆf35$kkj67sڕߟ$7qݓ /pݐTVAi+nݎ #l݌QU=ij܉ gۇMR8j{  PU6m`  D@(0(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/play-pushed.tiffHHcynthiune.app-0.9.5/Images/repeat-pushed.tiff0000644000175000017500000000252610407714151020504 0ustar gurkangurkanII*&((TW11A1 69VX%%((((((;;AA@-((((((((%%VX .166A=887777>>AAA;77777788==A6 .1;;;;WSJIK11A< tTIIIJSW;;;;& ?? 4v. 00%%^.  . 4v??&&::--+F7+--::A# ##A ::--  --:: %%??9F ))-- 9F??%%?::<<`e ">>A.  `e<<::> (b44A?:::::::==AAA> ::::::?A4 (b$CL""$$$$$$$$++??AA8%%$$$$""LC #5:::;D 4|00A.=::5#  "FR%% *+ F@FN(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/repeat-pushed.tiffHHcynthiune.app-0.9.5/Images/Cynthiune-song-48.tiff0000644000175000017500000001307210376622507021107 0ustar gurkangurkanII* -=BCCC$&C7ܴ9CYڷ@C\ڻmBCW֎AF&CC_ޥm)*؅DC\ҍVY9DChֱ uvPDCh!$}zSDClʷ++.96:ZDC40!ZSJ'"uDCLο˿Ȼpph_92'ܞֵDClָнϸԸϳѴˬèϯֵίͰƫ$ ocJ|WӬDC4ӴЮҬЦթҥ8ֿ֥դ˞ǜ1/)ә?6'ɟDC3߶جըҢԟ͖ٛҕ7וؖːč40&/)!#E?/єobHDClڱ٘՞כ֕ՑΉ֊؊ِ׊نЁ։ˎqeJŏ]Q=) JC/іc}DClͱ̍ؓڐ؊ׅ؀szzxxuwܞvcKڡڟp71&WL7bDCløׇ܄~yspeba_c֖ҝ׺xeMנؠ؟ÎN@2:0&DCh؟߉~uda\ZZvϛќӷzhOԞ՟֠נ8/(DClhRPMJοmϛЛϳ~jPҝӞԟԟ՞c[RDChәFB?=9rϛͰlQқҝҝӞ˺~}}DCdߚL51/0¸,]è}nRњҜҜǖDCTߛܛߗޔݓܓۓڔϒ}rSϛќ˙u DCLٖޛڛ؛՛ӛњϚɕ˘ƩrWЛ”}rDCDߛܛٛכԛ̖cN=2-$7)#[I9qUwup|{DC8xՙ֛ٛÏRB6'&' ' MG>zzx¿DC,vuppx@7.]ZZDCu $#DC  !" #"!$%#&*%*`\_DC:8:(&(*(+*'+-*,xwxDCzz}DCDCDBB=| |= .[||[. .?FFFGGGGGGGGGGGGGGGGGGGGGGGGGGGFF?.00 J@*2(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/Cynthiune-song-48.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/pause-pushed.tiff0000644000175000017500000000204610413127513020333 0ustar gurkangurkanII*&'2402EG'68021357ps;NKjl9ad7PQv{COjgCz~BknUOifBBmnVLea>@hjRH`]<>dfPE\Y9 ;`aLCYW8 :]_J?TR57XZF2DD- /KL</@>* ,GI9-=;) +EH8*;9&)BE6S_^DKfhY E@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/pause-pushed.tiffHHcynthiune.app-0.9.5/Images/stop.tiff0000644000175000017500000000232410413164440016714 0ustar gurkangurkanII*"////////////0 j!%'''''''''''!D(1s4i4i4i4i4i4i4i4i4i4i4j,u1(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/(2o6e6e6e6e6e6e6e6e6e6e6f-p/8G}JuJuJuJuJuJuJuJuJuJuIuB 7 ~ =@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/stop.tiffHHcynthiune.app-0.9.5/Images/eject.tiff0000644000175000017500000000232610413164414017024 0ustar gurkangurkanII*.   '~ -{2m* Y^+4i6f2m' 6:)4l6f6e5f1p$&2o6f6e6e6e5g0u !0s5f6e6e6e6e6e5h.{/x4g6e6e6e6e6e6e6e4i,r s,5i6e6e6e6e6e6e6e6e6f4l) MOY'2]jqqqqq~q~q~q~q~q~q~q~q~p}p}p}p}FS   TlnnnnnmmnnooooonlA >@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/eject.tiffHHcynthiune.app-0.9.5/Images/repeat.tiff0000644000175000017500000000176010407714271017220 0ustar gurkangurkanII*/a3:vK:v!4+Y._._._EKKK5l._._._._+Y4 @KHBAAIKKKEAAABHK@ EF5:vKF"F5FE-\J 8s+Y  J-\E4k 4kEK*U*UKD5m5mD,ZJ#0c5m#J+YDF:'PIK6n:FD >~KJEDDDHKKKIDDEJK>~ .(R+X+X+X+X3hKKKB+X+X+X(R. 9tK6n2+Y ?@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/repeat.tiffHHcynthiune.app-0.9.5/Images/cynthiune-splash.tiff0000644000175000017500000030244410247211104021226 0ustar gurkangurkanII*p}r}stsrqp}utuxyxwxvuuwwvuvywwy{zyzxxyyxtssp~str~r~uyxuvwwus}s~uuwussuwuxwwxyyyzxxxxyyxwutuy{zwtwyywx}~{||}~||||}~~~~}}~~~~~~}~}~}}|~~||~}}~~}{{}|}{yy{{z{{z{{{{{zzyyyyxusrsvxxso}q~ttq~rwxsutvxzzyxkssrrsstttrr~p~tstwyxwxvtuvuts~q}kur~immlkjnqrruvwvvrqrttrqvwwx{}~|wvvyytroknponovzyxvwsppruvvvuqquv{{ywz||}|zy|}zxtqsz}yvyzzz}~}|{}}~}}~~~|yx{{~|z|}|{{yxy{yuqnkltzwpkooooquwrqpsxyzyktromlnpqpomkpprruwwuupnmmtsmqsssqpwxux}|}zwyz{yy{~~}}ytqqtutqw~|zzywvuyy{~|vsxy}{~|xv}}~~zwspw|sruxvtzzzyz~k}zvsstvxxvvttz{xz}~zuttxuptuwvvuz{}}|~~|yx{|x}~|~}~}y|}z}{~k~{{{{}}}{zy~~|xwyzwz}~k|{{}~}|yvyzwy~kz}~{k|}z{|kzw{k}u{kt{ku{ku~kt~kwv|{XWnROgkxwu}uOKcOKckx}znp~qzPMePMek~w|x}vcs|sOKcOLck~w~}vwefqPMePMeky{{x|p^{xxPLdPLdk}u{zwugu~_cEBo>9g=6d=7d>7e>8e>8e^_OKcNKbkv~`i;4e;5e<5e<5e<6e=6e=7e=7e>7e>8e?9eXXmpVUlNKbNKbpwf_k|{vny;5e@;ksmuD?l>8e?9eNKbNKbNKbNKb{ÿ~ľ{ſz^{|d|k}}zVT~jofjMJsWVmPLdPLdPLdQOf]]sx{Ŀxqtw}yƒwiĽqrzuykyyxb^PLdPLdfg~OLdSRidcyPLdPLd][rȮwflnr{zł~da~krqyćk}zytpNKbNKbOLcVTlpq[YpʾreafǽkvžwĀhb|olmt|kwyPLdPLdNKbXWn~uhüg}hwz_qsghlsāwk|yMJaMJaNKbYWn|{t}yq|zecnbcbkovÉkyPLdPLdPMe[Ypk}|r_iebdclj[b_\]eonwwkxOKcOKcOKcXVmqqvYUVZ``^cor`UXUY`kĿvyokzstOLcOKcNKbSPgZXoOLcvvySHLQRY\]chjhSMQS[cryYkyVuwKGdTQhPLdPLdPLdPLdno][rQMeijPLdPLdYWnhg|hg{OKcpqYWnROgee{`NLIJMQTYZY[U[MKMNQ¸bOmgVB=fC=fvvRNnXUtLHfLHellWUmRNg`^upqROgPMePMePMePMePMePMePMegf|wy\[raawxzPLdPLdPMePMePMePMePMePMePMePMePMePMePMeQNfPMePMeQNfPMennYWnSOg_]s\ZqPLdPLdPLdPLdPLdPLdPLdjkukjVQMIGIPRQSTLNLHEGGPNYl}EoY{ol~uq~@;c@]y{kOKy?9jllB=dSQpGBdLHhKGdKGdPLdURiVTkPLdPLdPLdPLdRNfOLcPLdOKc_]sPLdPLdPLdPLdOKcTQhPLdPLdPLdPLdPLdPLdPLdPLdXVmee{YWnSPgUSjhh~outnmjfXXZöZöTN=˶J˵>б6ʣ0ʢ-Ұ.Ĩ+(.7>9:=T|xhkstOIvD?fJEkGBeGBeKGdJGcPLdQMeQNePLdPLdPMePLdPLdPLdPLdPMePLdPLdPMePMePLdQMePLdkjwz}|Ľ|{vn̿ejmjǴR43ȩ50,n%(('*1A³?;=Niyqk^ZB=c][zEAc\ZxKGdKGdQNfURjQMePLdOKcOKcNKbURiNKbNKbMJaMJaMJaOKcOKcOLcSQhooPLdxʗЙәҒυсԄӀg=-.+\#R!'Ǩ+&#/ô;ŵ:Ŷ=öEL^˒kpklgMJoE?fFAdFBdKGeKGdOLcXUlTRiOLcOLcPLdPLda_uPLdPLdPLdPLdOLdNKbNKbOLcXUlYVmPLdΦխӤľ|ûxǂΈɂa2'(-.,()&~$y#;νHͼBʺDɼKO\ɒk{wA=bhhnpE@bwyIEbIFbOLca_u^\sPLdQNfQNfPMenmPLdPLdwxOKcNKbNKbNKbNKbOKc`^tPMeOKcϭڸɕCBBBJG0+,.*z&/+(%3˶DHNNKξNǼVZoOwkRNrC>cE@cJFhKGeKGdPMellnnPLdPMePMePMePLdPMecawPLdPLdPLdOLcOKcPLdjjWTkOKcyǶnt_HH@3400342+3}(+)#'kd\_YP]`UjcqkD>dcbFAeKGeLHePMe{{PMenoOLdOLdnnOLdPMePLdSOgPLdYVmOLdOLdOLcOKcPLdxzrrPLdyf^ZVI>><@FD@9B?6'&(]؅svk][ükTaZktp[Z{C>cKGjHCfJFcJFbOLdNKbNKbNKbOKcQMePLdPLdPMeXVmQNfQNfQNfQNfPMePMeOKcOKcgf{{sqt```·_÷[Ȼ_ǻ]ƹTǷR̽]˼Tƴ=+2ı8IJ<ƵIƴBҁׂo_lCrwZkZ[82cJGuD?dZYzFAeqtKGdKGdllOKc^]sNKbPMdNKbNKbOLcPNePLdPLdih}PMelkPMePLdPMePMennPMeVSjPLdĘŘƕ~vupgυ}λPҼCϾJѿQQͺCƳ4ï+aܞև{lli3kz92d;5f|x}C>bC>bC?bHEaIFbOLcNKbRNfPLdPLdhh}PMePMettPLdkkPMePLdNKbVSjTQhOKcOLcOKcOKcQMePLdOKcOKcdbxˤϨ˜ȑƆȂɂ̃|lԛґ^Sbgc\οUʻHgݪ؟̄FfhNk[[:3dB=l}C>bD?cD?cIEbKGcNKbNKbPMdOKcOKcNKbNKb^\rOKcOKcOKcNKb{|OKcOKcNKbOKca_ucbxXVmOLdPLdPLdQNePLdPLdURiPLdPLd̡͘ʊϑҒБ̊Dž̌їщzt~Ձ~xzvKD=|kin=8g;4dSQ}zw{v}C>cD?cXVwJGdURneezPLdPLdqrPLdPLdPLdzzPLdPLd^\sPLdPLdOKcOKcOKcOKcOKcOKcvyOKcOKcPLdZXoedyOLcOKc^\rOLcOLcOLcOLcOLcOLcOLcOLcOLcYWn²¼˗˚əƓſsǐǂʂφψ͇ʆƅLJLTKfhWky[[@;g:5a:5a;6a;6a<5a<7a<7aGDlC>cIDh{~OLdPLdSOgnnecyXUlfdzedya_u[Xorr][rPMePMeSPhkkTQhPLdPMePMeROgխ͞viΓ͍ӔԘҗ͎džz]Usxei{ghPMuLIrD?eWUmOLdPLdXVmVSjNKbNKbWTkə˙ǔŖkXVzFAf`^uTQha`vURjkD?erxkNLpB=bkB=c_`kD?fC>ekWUyA=cSQukxA0)88 5 =MI>2% ,9CI = 5JRIA9/("%,45=ENF 5"7[TMGA@<9:?>DJQX5" #|bc]XRNJIILQU[`"| BQgb^[XVWY\`eOPB &welhebbcfjc%w 1jsopmlkllonrh0/)w\zxxwwxy\)w B+|HhwhH+|B  "5=5 "  N*@@H(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/song-inspector-pushed.tiffCreated with The GIMPHHcynthiune.app-0.9.5/Images/Cynthiune.tiff0000644000175000017500000001727210170163316017706 0ustar gurkangurkanII*9 %%+UUKdusgħǥǢǩǪǣikY}EF:S(L^]Rmں߱ۢ?@6R U ~m̧ݹ׼޲ʖ\]Mt dSSIažپ޳,,&Bm rڠݳߕXYKw yܵmo[  ߾ŠÏǑʑۗ  ͽ|\ZVRSVabjiisefqhjrbgebjSgׅh|ΜxeUPY򅆒ڬ٪٥٢١٪٤ڒhjh뇏a ffSaaUrۻrWPFߢ٦٢٨٫٥٣ٟ٨٫٤٩ٗjmiăߦ:9/_Ǭm^[\٥٥٥١٤٬٩٥١٥٫٧٤٪٤vw发m+ ~\\a٧٥٦١٤٤٫٬٣٢٢٩٩١٫٥٥َߧ~edR,,%7ԸURV𢤴٥٥٥٦٢٥٥٨٭٥٣٠٨٪٤٥٨٥٤ َԘǙ-tugճYTPڨ٥٣٥٥٥٣٤٦٭٫٣ٟ٥٨٥٤٪٥'ٟچ}43*q  ëᨪ٪٤٣٦٤٨ٟ٥٨٪ٮ٥ٟ٢٧٦٣٨٦(٦٢٘}.11*?kjb٦٫٥٧ڥڦڨڦڧڨڪگڪڤڢڧڨڥڥک(٥٤٣ٮџCDij^˪gflꤥڥڮ۪۫۩ ݤޜޢާݰܲܫܥ<ܫ۪ۭۨۨکڤڑ՝+*$v& ,{ع}~||ܨܰܳܫݫޡߨݲݫݯݭޤ߳ݯݪݪݮݮݬݮܭܭܨܡřSPA2||w殭ݭݯݵޮߨமް߲߳߱ߴ߳߫ᴲ߰߬߱ޯްޯ,ްݭݯݨɝn= ۵ag[߲߰߳ߵߩ㴳ല෴భ౯ݫٷප໸૩㳱భള೰ള೰,ߵ߱߳ުʚjG SVG䲰߳ലറೱⴱⶴỸᥢ~yw\J>RP=p༹Ɑ䶳ⴲⶴḵᵴ᷵,ᵳපള஬ʘfO" P RTE󴱐පືᳰṵ⹵⫨~侺㾺㻸㞛pA@/RP*l㻷䶱乶㷳㽹㹵㻸⸵⻸ⶴẸЙcU% Pןặ⼹⹵㻸㻷㫧v½ÿ亷|䰬sED/TPg|忺{渴v羹}并|佹侺ϕ֜dW& NJ{㾺侺佹~俺|屬r羸w{¾w沬l裟c('0 XV7½su繴n齸rĿw濹v½{ҏ,gW' ڕ\ÿ|ÿ{wþv澸p让esqo軴g궰d緱emƿln詤]nqԉܞޣ,ߤߤ|w[W&  wx\ޖl|{Ŀvtſqoƿl諥\ƿhkgifefd꼶^츱\j؜٠ڡۢ,ۢܣݣݣޣޣߣޣߤݣ41&U&  HH7p͌rvtqnlifdꦡQŽ^aa_^^빳SO_ݏӜԞՠנؠ,١١ۢۢܣܣݣݢޣ̖ P"  BЕ̉þmnkffb`^\쵮O謹HKTMﲬJDNUۄЖҜҝӞԟ֠(֠ؠ٠١١ڡڢۢܢHxpdieb^]YXVTSKKJLO[֚ЛќҜҝӝԞԟ$՟֠נؠ٠ؠ١ڡleNt>CB1yڒ܂܀bOMLJJHGGoϛϛМќҜҜҝӞ$Ԟ՟֟֠ננ٠Ȕf2 7NEEDBB?>{ϚϛЛМќҜҜҝ ҞԞԟ՟՞֠֠fU&  JI5ޖ|?><:;96RԼϛϛЛМќҜҜҝҞӞӞԟ՟Կ%#uB7lۖ=763211ʿ+?̵ϛϛЛМќќҜҝҝќӞӞpiM^/ #`}ߛȼi1/.++)*);pϛЛЛМќќҜќҝҝnwF 3/.!ҋݛЎ>;97766:8?kɕϛММќќҜ ҜŲZ. C00"Տߛݛؚٗۘ٘٘חט֘֘֘ԗ˒͗ϛЛϛϛќҜϸj> )NzL=ɋߛݛܛٛ؛֛ԛққћЛЛϛϛϛϛϛΚЛМЛ94(tH%.tU87+ÿߛݛۛٛכ֛ԛқққЛЛϛϛϛϚΚϛЛ͙}yO*2lWpܘߛܚۚڛ֛ٛ՛ԛқққћЛϛϚΚϛϛϛɖ}` zR. 2U\z=%3Kdz xaH0 #5H[lzxjYF2!  *7CNVZ\]\ZUMB6)  !&****)& 00` Bh@(R/home/wolfgang/programmes/gnustep/Cynthiune/Images/Cynthiune.tiffHHcynthiune.app-0.9.5/Images/Cynthiune.ico0000644000175000017500000001027610345610406017526 0ustar gurkangurkan  ( @  #-7:;:3* /E_o|vjS>#2S ~"-/7JOHaiLgrJeqKeqLep4EL'37 iG!8k/;>iڃj;MUQ, L0@Atޗy9KSj1>QmnIak_. C^i b$ #T||o[YXXZ\Olx CJjkiB2/.,=pLfpo2 6JL7Ɵo?<:8A{L tPLIHEhal! Ρ{yuttfYVONP_!*-. c:{vrli]WXWRWG_h<fx{vkknnljam_Dǒvw{spʢwzp}GȘVu pl݂GǗl򖶸≹|Y%66{nّC͕z߭ߪᔷʒǤ߯ߢ;Ӈݼݷޮ߲޴޲ް߲߬޲޶޷޺ݼݽݨ- `ܻܿݸ޶޻ݿܿܤ!!пοٽlvtԿҿٚRegHbzѿڨt򸪪Կٚ^rs: 4n漫Ծоڬႜ𒼽u ???p~yy펄噌♋㈉´ΗXkkfբ l̀jUUU,꭫ܹNQܽjJuԅυׅفJ$?__?????cynthiune.app-0.9.5/Images/shuffle.tiff0000644000175000017500000000235210407440613017366 0ustar gurkangurkanII* &;&N0c2g=<{>>>>>?1d>>>>>~$>>>>-\9u>>>>* :v>*V4>9u; 7p>*W"F#G>3,(Q4k<{>>1e; -\><z$I:w>>>>>>~>>9t >>>>>0c64j>>%0b><z *W>>>>&M >~<{&N>3i >>>>>=} ">/a8r>!(R>>>:v5m0b"F'>*W"E>"F   >5m&>,Z9u>$ >2g:>8s  >3i-]>:v.#>.^*V>>3h7>'O/7p>>>>7p*W*W)S>~>>>> >~<{ %% ,Z+X =@(RC:\msys\1.0\home\Wolfgaang\src\Cynthiune\Images\shuffle.tiffHHcynthiune.app-0.9.5/Images/shuffle-pushed.tiff0000644000175000017500000000306210407440613020653 0ustar gurkangurkanII* 1AO.inASS )hirrrrr[6(f<rrrro :  "lrrrP  `rorr?%{  ^rN&kh -2Q rQ;#j>pwTXEGQ0r_* U i o$V^!|&}V2sruD7i RZ Vr%N2P # =G jl C|,mi 9F"LE.& 6]q.  'b9ruD  ^grU2s "/mrL " " )(croN 1c\6gr]6 b:h_$W7 ^pxJŻnj3VQH5 L  D@"*(RC:\msys\1.0\home\Wolfgaang\src\Cynthiune\Images\shuffle-pushed.tiffHHcynthiune.app-0.9.5/dependencies.make0000644000175000017500000000024610244206731017140 0ustar gurkangurkanall:: -@$(foreach eddir,$(foreach ddir,$(DEPENDENCIES_DIRS),$(wildcard $(ddir))),echo "Making $@ in dependency directory '$(eddir)'..."; ( cd $(eddir) && make $@);) cynthiune.app-0.9.5/Song.h0000644000175000017500000000473610411076635014746 0ustar gurkangurkan/* Song.h - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Song_H #define Song_H @class NSDate; @class NSNumber; @class NSString; @protocol Format; typedef enum _SongStatus { SongOK = 0, SongFileNotFound = 1, SongFormatNotRecognized = 2, SongStreamError = 3, } SongStatus; @interface Song : NSObject { NSString *filename; BOOL isSeekable; NSString *title; NSString *artist; NSString *album; NSString *genre; NSString *year; NSString *trackNumber; NSNumber *duration; NSDate *date; unsigned long long size; SongStatus status; Class formatClass; } + (Song *) songWithFilename: (NSString *) filename; - (id) init; - (id) initWithFilename: (NSString *) filename; - (NSObject *) openStreamForSong; - (void) setFilename: (NSString *) newfilename; - (NSString *) filename; - (NSString *) shortFilename; - (SongStatus) status; - (BOOL) isSeekable; - (BOOL) songInfosCanBeModified; - (NSString *) title; - (NSString *) artist; - (NSString *) album; - (NSString *) genre; - (NSString *) trackNumber; - (NSString *) year; - (void) setTitle: (NSString *) newTitle artist: (NSString *) newArtist album: (NSString *) newAlbum genre: (NSString *) newGenre trackNumber: (NSString *) newTrackNumber year: (NSString *) newYear; - (NSNumber *) duration; - (NSString *) playlistRepresentation; - (NSComparisonResult) compareByPlaylistRepresentation: (Song *) aSong; - (NSComparisonResult) reverseCompareByPlaylistRepresentation: (Song *) aSong; - (NSComparisonResult) compareByDuration: (Song *) aSong; - (NSComparisonResult) reverseCompareByDuration: (Song *) aSong; @end #endif /* Song_H */ cynthiune.app-0.9.5/Armenian.lproj/0000755000175000017500000000000010413173130016522 5ustar gurkangurkancynthiune.app-0.9.5/Armenian.lproj/Localizable.strings0000644000175000017500000001633210350104161022361 0ustar gurkangurkan/* Vardan Gevorgyan <VardanGevorgyan@yahoo.com> */ /* Application menu */ "Info" = "O~ualve"; "Playlist" = "F~acaxao"; "Songs" = "5ce"; "Player" = "?aaxr"; "Windows" = "Jaxpavve"; "Window" = "Jaxpav"; "Tools" = "3xnkve"; "Services" = ">a|auxiuxvve"; "Hide" = "9avel"; "Hide Cynthiune" = "9avel Cynthiune-h"; "Hide Others" = "9avel tvaanh"; "Show All" = "Qxu al bxlxh"; "Quit" = "4x} cal"; "Quit Cynthiune" = "4x} cal Cynthiune-k"; /* Info submenu */ "Info Panel..." = "O~ualvek ~apavao..."; "About Cynthiune..." = "Cynthiune-k ta}kv"; "Preferences..." = "?aftaqext.."; "Send A Bug Report..." = "Hraoel paw~e~xiuxv iexiuav ta}kv..."; "Help..." = "Ucvxiuxv..."; "Help" = "Ucvxiuxv"; "Cynthiune Help" = "Cynthiune k cvxiuxvh"; /* Playlist submenu */ "Open..." = "2ael..."; "New" = "Fx"; "Save..." = "Japzavel..."; "Save As..." = "Japzavel xze}..."; "Save To..." = "Japzavel aul er..."; "Revert To Saved" = "Neada|val zapzav~anvekv"; "Close" = "Saoel"; /* Songs submenu */ "Add Songs..." = "1~elavel..."; "Remove Selection" = "@e|avel hv~anveh"; "Remove All" = "@e|avel bxlxh"; "Cleanup" = "Dael"; /* Player submenu */ "Play" = "F~acel"; "Pause" = "4aia"; "Stop" = "?avcvevel"; "Previous" = "Famxdh"; "Next" = "@a{xdh"; "Mode" = "Aeh"; /* Player/Mode submenu */ "Repeat" = "?ovel"; "Shuffle" = "=a|h"; /* Tools submenu */ "Song Inspector..." = "5ck ~ualveh..."; /* Windows submenu */ "Arrange In Front" = "Mofbk da}a~xel h} peiaoavxiuatb"; "Miniaturize Window" = "Sxavel zaxpavh"; "Minimize" = "Sxavel"; "Close Window" = "Saoel zaxpavh"; /* Playlist status label */ "%d songs - total time: %@" = "%d ec, xk hvdpavx exrxiuxvh` %@"; " - selection: %@" = "  hv~an` %@"; /* Playlist table */ "Song" = "5c"; "Time" = "Oexrxiuxv"; /* Song Inspector */ "Song Inspector" = ""; "Song Information" = "Oereoxiuxvve"; "Format Attributes" = "Vxtak akbxveh"; "No song selected" = "Hy tk ec hv~an yg"; "Lookup through MusicBrainz..." = "Sv~xt g MusicBrainz-k tk{xx~..."; "Title" = "Nevack"; "Album" = ":xrx~anx"; "Track" = "5c"; "Artist" = "?aaxr"; "Genre" = "Hs"; "Year" = "Oak"; "Reset" = "@e beel pkv ~ualveh"; "Save" = "Japzavel"; "Generating TRM..." = "TRM-k ceveaka..."; "Querying MusicBrainz server..." = "MusicBrainz }za}aokykv xrao~xt g paxt..."; "The MusicBrainz server was too busy" = "MusicBrainz }za}aokyh wa fbar~an g"; "Received %d result(s)" = "Ma~el g %d zaa}mav"; /* Dialog boxes */ "Add music files..." = "1~elavel eajwaoav aul g..."; "Add a music folder..." = "1~elavel eajwaoav na..."; "Save playlist as..." = "Japzavel v~acaxaoh xze}..."; /* Song names */ "[not found: %@]" = "[%@ h pauvabe~an yg]"; "[unknown format: %@]" = "[%@  avpau xta]"; "[format error: %@]" = "[%@  xtak }mal]"; /* Preference dialog */ "None" = "None"; "Preferences" = "?aftaqext"; "General" = "3lma~x"; /* General preferences */ "Windows" = "Jaxpavve"; "Playlists" = "F~acaxaove"; "Use absolute filenames" = "Ucacxnel aulek atbxr{aoav avxvveh"; "Output module" = "5lk txdxl"; "Textured" = "Oe}a~x~an"; "Sticky" = "?zyxv"; "Remember location" = "@kwel erh"; "Format" = "Vxta"; /* MB results panel */ "Please select the correct information..." = "=vdxt ev vwel skw ereoxiuxv..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "MusicBrainz }za}aokykv xrr~an paxth alk} g teok a~el zaa}mav:\n=vdxt ev pexpkwual arux}aok hvel auv xrh, xh a~elk swck g:"; "Cancel" = "Ierual"; cynthiune.app-0.9.5/Armenian.lproj/InfoPlist.strings0000644000175000017500000000160610375350153022060 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/PlaylistArchiver.h0000644000175000017500000000341610345654771017330 0ustar gurkangurkan/* PlaylistArchiver.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PLAYLISTARCHIVER_H #define PLAYLISTARCHIVER_H #import @class NSArray; @class NSString; #ifdef __MACOSX__ @interface NSObject (CynthiuneExtension) + (id) subclassResponsibility: (SEL) aSel; @end #endif /* __MACOSX__ */ @interface PlaylistArchiver : NSObject + (BOOL) archiveRootObject: (id) anObject toFile: (NSString *) filename; + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute; @end @interface PlaylistUnarchiver : NSObject + (id) unarchiveObjectWithFile: (NSString*) filename; + (NSArray *) dictionariesFromFilenames: (NSArray *) filenames; + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory; @end #endif /* PLAYLISTARCHIVER_H */ cynthiune.app-0.9.5/CynthiuneHeaderCell.h0000644000175000017500000000226210407726053017710 0ustar gurkangurkan/* CynthiuneHeaderCell.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEHEADERCELL_H #define CYNTHIUNEHEADERCELL_H #import #define arrowOffset 4.0 @interface CynthiuneHeaderCell : NSTableHeaderCell { NSComparisonResult comparisonResult; } - (void) setComparisonResult: (NSComparisonResult) result; @end #endif /* CYNTHIUNEHEADERCELL_H */ cynthiune.app-0.9.5/MBResultsPanel.m0000644000175000017500000002530410410223671016670 0ustar gurkangurkan/* MBResultsPanel.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "CynthiuneTextCell.h" #import "MBResultsPanel.h" #define LOCALIZED(X) NSLocalizedString (X, nil) #define panelContentRect NSMakeRect (100, 100, 420, 205) #define panelContentSize NSMakeSize (420, 185) @implementation MBResultsPanel : NSPanel + (MBResultsPanel *) resultsPanel { static MBResultsPanel *resultsPanel = nil; if (!resultsPanel) resultsPanel = [self new]; return resultsPanel; } - (void) _setDefaults { [tableView deselectAll: self]; [okButton setEnabled: NO]; [self setTitle: LOCALIZED (@"Please select the correct information...")]; [self setHidesOnDeactivate: YES]; [self setInitialFirstResponder: okButton]; [self setContentSize: panelContentSize]; } - (NSTableColumn *) _tableColumnWithIdentifier: (NSString *) identifier andTitle: (NSString *) title { NSTableColumn *column; CynthiuneTextCell *dataCell; dataCell = [CynthiuneTextCell new]; [dataCell autorelease]; column = [[NSTableColumn alloc] initWithIdentifier: identifier]; [column autorelease]; [column setResizable: NO]; [column setEditable: NO]; [[column headerCell] setStringValue: title]; [dataCell setHighlightColor: [NSColor rowsHighlightColor]]; [dataCell setDrawsBackground: YES]; [column setDataCell: dataCell]; return column; } - (void) _createInfoText: (NSView *) contentView { NSTextField *infoText; NSFont *infoFont; #ifdef GNUSTEP infoFont = [NSFont controlContentFontOfSize: [NSFont systemFontSize]]; #else infoFont = [NSFont controlContentFontOfSize: [NSFont smallSystemFontSize]]; #endif infoText = [[NSTextField alloc] initWithFrame: NSMakeRect (10, 155, 400, 40)]; [infoText setFont: infoFont]; [infoText setBezeled: NO]; [infoText setBordered: NO]; [infoText setDrawsBackground: NO]; [infoText setSelectable: NO]; [infoText setEditable: NO]; [infoText setAutoresizingMask: NSViewMinYMargin | NSViewWidthSizable]; [infoText setStringValue: LOCALIZED (@"The request to the MusicBrainz server returned" @" more than one result.\nPlease select the line" @" in the following table that is the most" @" accurate.")]; [[infoText cell] setWraps: YES]; [contentView addSubview: infoText]; } - (void) _createTableView: (NSView *) contentView { NSScrollView *scrollView; NSTableColumn *column; tableView = [NSTableView new]; column = [self _tableColumnWithIdentifier: @"title" andTitle: LOCALIZED (@"Title")]; [tableView addTableColumn: column]; column = [self _tableColumnWithIdentifier: @"album" andTitle: LOCALIZED (@"Album")]; [tableView addTableColumn: column]; column = [self _tableColumnWithIdentifier: @"trackNumber" andTitle: LOCALIZED (@"Track")]; [tableView addTableColumn: column]; column = [self _tableColumnWithIdentifier: @"artist" andTitle: LOCALIZED (@"Artist")]; [tableView addTableColumn: column]; column = [self _tableColumnWithIdentifier: @"year" andTitle: LOCALIZED (@"Year")]; [[column dataCell] setAlignment: NSRightTextAlignment]; [tableView addTableColumn: column]; [tableView setDrawsGrid: NO]; [tableView setDataSource: self]; [tableView setIntercellSpacing: NSMakeSize (0.0, 0.0)]; [tableView setAllowsEmptySelection: YES]; [tableView setAllowsMultipleSelection: NO]; [tableView setAllowsColumnSelection: NO]; [tableView setAutoresizesAllColumnsToFit: NO]; [tableView setAutoresizingMask: NSViewNotSizable]; [tableView setDoubleAction: @selector (_doubleClick:)]; [tableView setTarget: self]; [tableView setDelegate: self]; scrollView = [[NSScrollView alloc] initWithFrame: NSMakeRect (10, 45, 400, 100)]; [scrollView setBorderType: NSBezelBorder]; [scrollView setHasVerticalScroller: YES]; [scrollView setHasHorizontalScroller: YES]; [scrollView setDocumentView: tableView]; [scrollView setAutoresizingMask: NSViewWidthSizable | NSViewHeightSizable]; [scrollView setAutoresizesSubviews: YES]; [contentView addSubview: scrollView]; } - (void) _createButtons: (NSView *) contentView { NSRect frame; NSFont *labelFont; #ifdef GNUSTEP labelFont = [NSFont controlContentFontOfSize: [NSFont labelFontSize]]; #else labelFont = [NSFont controlContentFontOfSize: [NSFont smallSystemFontSize]]; #endif frame = NSMakeRect (10, 10, 10, 10); okButton = [[NSButton alloc] initWithFrame: frame]; [okButton setTitle: LOCALIZED (@"OK")]; [okButton setFont: labelFont]; #ifdef GNUSTEP [okButton setImagePosition: NSImageRight]; [okButton setImage: [NSImage imageNamed: @"common_ret"]]; [okButton setAlternateImage: [NSImage imageNamed: @"common_retH"]]; #endif [okButton setAutoresizingMask: NSViewMinXMargin]; [okButton setTarget: self]; [okButton setAction: @selector (_ok:)]; [okButton setButtonType: NSMomentaryPushButton]; [okButton setBezelStyle: NSRoundedBezelStyle]; [okButton sizeToFit]; frame = [okButton frame]; frame.origin.x = 420 - 10 - frame.size.width; [okButton setFrame: frame]; cancelButton = [[NSButton alloc] initWithFrame: frame]; [cancelButton setTitle: LOCALIZED (@"Cancel")]; [cancelButton setFont: labelFont]; [cancelButton setAutoresizingMask: NSViewMinXMargin]; [cancelButton setTarget: self]; [cancelButton setAction: @selector (_cancel:)]; [cancelButton setButtonType: NSMomentaryPushButton]; [cancelButton setBezelStyle: NSRoundedBezelStyle]; [cancelButton sizeToFit]; [contentView addSubview: okButton]; [contentView addSubview: cancelButton]; [cancelButton arrangeViewLeftTo: okButton]; [okButton setNextKeyView: cancelButton]; [cancelButton setNextKeyView: okButton]; } - (id) init { NSView *contentView; if ((self = [super initWithContentRect: panelContentRect styleMask: (NSTitledWindowMask | NSResizableWindowMask) backing: NSBackingStoreBuffered defer: NO])) { trackInfos = nil; [self setMinSize: [self frame].size]; contentView = [self contentView]; [self _createInfoText: contentView]; [self _createTableView: contentView]; [self _createButtons: contentView]; [self setHidesOnDeactivate: YES]; [self setInitialFirstResponder: okButton]; } return self; } - (void) _updateColumnWidth: (NSTableColumn *) column { float newWidth, strWidth; NSEnumerator *trackEnum; NSDictionary *track; NSString *value; NSCell *cell; cell = [column headerCell]; newWidth = [cell widthOfText: [cell stringValue]] + 20.0; trackEnum = [trackInfos objectEnumerator]; cell = [column dataCell]; track = [trackEnum nextObject]; while (track) { value = [track objectForKey: [column identifier]]; strWidth = [cell widthOfText: value]; if (newWidth < strWidth) newWidth = strWidth; track = [trackEnum nextObject]; } [column setWidth: newWidth]; } - (void) _updateColumnsWidth { NSEnumerator *columns; NSTableColumn *column; columns = [[tableView tableColumns] objectEnumerator]; column = [columns nextObject]; while (column) { [self _updateColumnWidth: column]; column = [columns nextObject]; } } - (void) showPanelForTrackInfos: (NSArray *) allTrackInfos aboveWindow: (NSWindow *) window target: (id) caller selector: (SEL) action { trackInfos = allTrackInfos; [trackInfos retain]; [tableView reloadData]; target = caller; actionSelector = action; [self _updateColumnsWidth]; [self _setDefaults]; [self center]; [self orderWindow: NSWindowAbove relativeTo: [window windowNumber]]; [self makeKeyAndOrderFront: self]; [self setLevel: NSModalPanelWindowLevel]; } - (void) _cancel: (id) sender { [trackInfos release]; trackInfos = nil; [self close]; } - (void) _ok: (id) sender { int selectedRow; selectedRow = [tableView selectedRow]; [target performSelector: actionSelector withObject: [trackInfos objectAtIndex: selectedRow]]; [trackInfos release]; trackInfos = nil; [self close]; } - (void) _doubleClick: (id) sender { if ([tableView clickedRow] > -1) [self _ok: sender]; } /* Datasource protocol */ - (int) numberOfRowsInTableView: (NSTableView *) tableView { return [trackInfos count]; } - (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (int) rowIndex { NSDictionary *trackInfo; trackInfo = [trackInfos objectAtIndex: rowIndex]; return [trackInfo objectForKey: [tableColumn identifier]]; } /* tableview delegate */ - (void) tableViewSelectionDidChange: (NSNotification *) notification { [okButton setEnabled: ([tableView numberOfSelectedRows] != 0)]; } - (void) tableView: (NSTableView *) tv willDisplayCell: (id) cell forTableColumn: (NSTableColumn *) tableColumn row: (int) rowIndex { #ifdef GNUSTEP /* GNUSTEP is buggy so we work-around */ [cell setHighlighted: [tv isRowSelected: rowIndex]]; #endif [cell setBackgroundColor: ((rowIndex % 2 == 0) ? [NSColor evenRowsBackgroundColor] : [NSColor oddRowsBackgroundColor])]; } @end cynthiune.app-0.9.5/Player.m0000644000175000017500000002432110413162453015265 0ustar gurkangurkan/* Player.m - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #ifdef GOOM #import #endif #import "GeneralPreference.h" #define PLAYER_M 1 #import "Player.h" static NSNotificationCenter *nc = nil; NSString *PlayerPlayingNotification = @"PlayerPlayingNotification"; NSString *PlayerStoppedNotification = @"PlayerStoppedNotification"; NSString *PlayerPausedNotification = @"PlayerPausedNotification"; NSString *PlayerResumedNotification = @"PlayerResumedNotification"; NSString *PlayerSongEndedNotification = @"PlayerSongEndedNotification"; @implementation Player : NSObject + (void) initialize { nc = [NSNotificationCenter defaultCenter]; } - (id) init { if ((self = [super init])) { output = nil; outputIsThreaded = NO; stream = nil; delegate = nil; paused = NO; playing = NO; awaitingNewStream = NO; closingThread = NO; streamsToClose = [NSMutableArray new]; rate = 0; channels = 0; #ifdef GOOM feedGoom = NO; bufferedSize = 0; // goomBufferPtr = goomBuffer; // lock = [NSLock new]; #endif } return self; } - (void) dealloc { if (delegate) [nc removeObserver: delegate name: nil object: self]; [streamsToClose release]; [super dealloc]; } - (void) setDelegate: (id) anObject { if (delegate) [nc removeObserver: delegate name: nil object: self]; delegate = anObject; if ([delegate respondsToSelector: @selector (playerPlaying:)]) [nc addObserver: delegate selector: @selector (playerPlaying:) name: PlayerPlayingNotification object: self]; if ([delegate respondsToSelector: @selector (playerStopped:)]) [nc addObserver: delegate selector: @selector (playerStopped:) name: PlayerStoppedNotification object: self]; if ([delegate respondsToSelector: @selector (playerPaused:)]) [nc addObserver: delegate selector: @selector (playerPaused:) name: PlayerPausedNotification object: self]; if ([delegate respondsToSelector: @selector (playerResumed:)]) [nc addObserver: delegate selector: @selector (playerResumed:) name: PlayerResumedNotification object: self]; if ([delegate respondsToSelector: @selector (playerSongEnded:)]) [nc addObserver: delegate selector: @selector (playerSongEnded:) name: PlayerSongEndedNotification object: self]; } - (id) delegate { return delegate; } #ifdef GOOM - (void) goomThread { NSAutoreleasePool *pool; pool = [NSAutoreleasePool new]; while (1) { // while ((unsigned int) goomBufferPtr // < (unsigned int) goomBuffer + 2048) // while (!bufferedSize) // while (!feedGoom) [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 1.0 / 10]]; goom_update (goom, goomBuffer, 0, .0, NULL, NULL); // bufferedSize = 0; // [lock lock]; // memcpy (goomBuffer, goomBuffer + 2048, GOOM_BUFFER_SIZE - 2048); // goomBufferPtr -= 2048; // [lock unlock]; } [pool release]; // NSLog (@"goom thread exiting..."); } - (void) _updateGoomWithBuffer: (char *) buffer andSize: (unsigned int) size { unsigned int feedSize; if ((bufferedSize + size) >= 2048) feedSize = 2048 - bufferedSize; else feedSize = size; memcpy (goomBuffer + bufferedSize, buffer, feedSize); bufferedSize += feedSize; if (bufferedSize == 2048) bufferedSize = 0; } #endif - (void) _playLoopIteration { unsigned char buffer[DEFAULT_BUFFER_SIZE]; int size; NSData *streamChunk; size = [stream readNextChunk: buffer withSize: DEFAULT_BUFFER_SIZE]; if (size > 0) { totalBytes += size; streamChunk = [NSData dataWithBytes: buffer length: size]; [output playChunk: streamChunk]; #ifdef GOOM [self _updateGoomWithBuffer: buffer andSize: size]; #endif } else { awaitingNewStream = YES; [nc postNotificationName: PlayerSongEndedNotification object: self]; } } - (void) _handleEndOfSong { [nc postNotificationName: PlayerSongEndedNotification object: self]; } - (void) _closePendingStreams { static BOOL inProcess = NO; NSEnumerator *streamEnumerator; NSObject *streamToClose; if (!inProcess) { inProcess = YES; streamEnumerator = [streamsToClose reverseObjectEnumerator]; streamToClose = [streamEnumerator nextObject]; while (streamToClose) { [streamToClose streamClose]; [streamToClose release]; [streamsToClose removeObject: streamToClose]; streamToClose = [streamEnumerator nextObject]; } inProcess = NO; } } - (int) readNextChunk: (const unsigned char *) buffer withSize: (const unsigned int) bufferSize { int inputSize; while (awaitingNewStream && !closingThread) [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]]; if ([streamsToClose count]) { [self performSelectorOnMainThread: @selector (_closePendingStreams) withObject: nil waitUntilDone: NO]; } if (!closingThread) { inputSize = [stream readNextChunk: buffer withSize: bufferSize]; if (inputSize > 0) { totalBytes += inputSize; #ifdef GOOM /* FIXME: should execute on main thread */ // [self _updateGoomWithBuffer: buffer andSize: size]; #endif } else { awaitingNewStream = YES; inputSize = 0; [self performSelectorOnMainThread: @selector (_handleEndOfSong) withObject: nil waitUntilDone: NO]; } } else inputSize = 0; return inputSize; } - (void) _reInitOutputIfNeeded: (NSObject *) newStream { unsigned int newChannels; unsigned long newRate; newChannels = [newStream readChannels]; newRate = [newStream readRate]; if (rate != newRate || channels != newChannels) { if ([output prepareDeviceWithChannels: newChannels andRate: newRate]) { rate = newRate; channels = newChannels; } else NSLog (@"error preparing output for %d channels at a rate of %d", newChannels, newRate); } } - (void) setStream: (NSObject *) newStream { NSObject *oldStream; totalBytes = 0; oldStream = stream; if (newStream) { [newStream retain]; if (output) [self _reInitOutputIfNeeded: newStream]; stream = newStream; if (awaitingNewStream) { awaitingNewStream = NO; if (!outputIsThreaded) [self _playLoopIteration]; } } else stream = nil; if (oldStream) { if (outputIsThreaded) [streamsToClose addObject: oldStream]; else { [oldStream streamClose]; [oldStream release]; } } } - (int) timer { return ((rate && channels) ? totalBytes / (rate * channels * 2) : 0); } - (BOOL) playing { return playing; } - (void) _ensureOutput { GeneralPreference *generalPreference; Class outputClass; generalPreference = [GeneralPreference instance]; outputClass = [generalPreference preferredOutputClass]; if (output && [output class] != outputClass) { [output release]; output = nil; rate = 0; channels = 0; [self _reInitOutputIfNeeded: stream]; } if (!output) { outputIsThreaded = [outputClass isThreaded]; output = [outputClass new]; [output setParentPlayer: self]; [self _reInitOutputIfNeeded: stream]; } } - (void) play { [self _ensureOutput]; if ([output openDevice]) { playing = YES; [nc postNotificationName: PlayerPlayingNotification object: self]; if (outputIsThreaded) { closingThread = NO; [output startThread]; } else [self _playLoopIteration]; } } - (void) stop { if (outputIsThreaded && !paused) { closingThread = YES; [output stopThread]; } [output closeDevice]; [stream streamClose]; [stream release]; stream = nil; playing = NO; if (paused) { paused = NO; [nc postNotificationName: PlayerResumedNotification object: self]; } awaitingNewStream = NO; [nc postNotificationName: PlayerStoppedNotification object: self]; } - (void) setPaused: (BOOL) aBool { if (!paused && aBool) { paused = YES; if (outputIsThreaded) [output stopThread]; [nc postNotificationName: PlayerPausedNotification object: self]; } else if (paused && !aBool) { paused = NO; if (outputIsThreaded) [output startThread]; else [self _playLoopIteration]; [nc postNotificationName: PlayerResumedNotification object: self]; } } - (BOOL) paused { return paused; } - (void) seek: (unsigned int) seconds { [stream seek: seconds]; totalBytes = seconds * rate * channels * 2; } - (void) chunkFinishedPlaying { if (playing && !paused) [self _playLoopIteration]; } #ifdef GOOM - (void) setGoom: (PluginInfo *) goomPI { BOOL start; start = (!goom); goom = goomPI; if (start) [NSThread detachNewThreadSelector: @selector (goomThread) toTarget: self withObject: nil]; } #endif @end cynthiune.app-0.9.5/CynthiuneAnimatedImageView.m0000644000175000017500000000577110257424301021247 0ustar gurkangurkan/* CynthiuneAnimatedImageView.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import "CynthiuneAnimatedImageView.h" @implementation CynthiuneAnimatedImageView : NSImageView - (id) init { if ((self = [super init])) { frames = [NSMutableArray new]; frameNumber = -1; animationTimer = nil; interval = .075; } return self; } - (void) dealloc { if (animationTimer) [animationTimer release]; [frames release]; } - (void) addFramesFromImagenames: (NSString *) firstImagename, ... { va_list ap; NSString *imagename; NSImage *image; va_start (ap, firstImagename); imagename = firstImagename; while (imagename) { image = [NSImage imageNamed: imagename]; if (image) [frames addObject: image]; else NSLog (@"no such image: '%@'", imagename); imagename = va_arg (ap, NSString *); } va_end (ap); } - (void) setInterval: (NSTimeInterval) newInterval { interval = newInterval; } - (void) _iteration { frameNumber++; if (frameNumber == [frames count]) frameNumber = 0; [self setImage: [frames objectAtIndex: frameNumber]]; } - (void) startAnimation { frameNumber = -1; if ([frames count]) { animationTimer = [NSTimer scheduledTimerWithTimeInterval: interval target: self selector: @selector (_iteration) userInfo: nil repeats: YES]; [animationTimer explode]; } else NSLog (@"No frames in animation. Not starting."); } - (void) stopAnimation { if (animationTimer) { [animationTimer invalidate]; animationTimer = nil; } [self setImage: nil]; } - (void) encodeWithCoder: (NSCoder*) aCoder { [super encodeWithCoder: aCoder]; // [aCoder encodeInt: interval forKey: @"interval"]; // [aCoder encodeObject: frames forKey: @"frames"]; } - (id) initWithCoder: (NSCoder*) aDecoder { self = [self init]; self = [super initWithCoder: aDecoder]; return self; } @end cynthiune.app-0.9.5/CynthiunePopUpButton.m0000644000175000017500000000213110257405604020156 0ustar gurkangurkan/* CynthiunePopUpButton.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import "CynthiunePopUpButton.h" @implementation CynthiunePopUpButton : NSPopUpButton - (void) addItemWithTitle: (NSString *) aTitle { [super addItemWithTitle: aTitle]; [self setEnabled: ([self numberOfItems] > 1)]; } @end cynthiune.app-0.9.5/Song.m0000644000175000017500000003162610411076635014751 0ustar gurkangurkan/* Song.m - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import "FormatTester.h" #import "Song.h" #define LOCALIZED(X) NSLocalizedString (X, nil) @implementation Song : NSObject + (Song *) songWithFilename: (NSString *) aFilename { Song *newSong; newSong = [[self alloc] initWithFilename: aFilename]; [newSong autorelease]; return newSong; } - (id) init { if ((self = [super init])) { filename = nil; status = SongFileNotFound; isSeekable = NO; title = nil; artist = nil; album = nil; genre = nil; trackNumber = nil; year = nil; formatClass = Nil; duration = nil; size = 0; date = nil; } return self; } - (id) initWithFilename: (NSString *) aFilename { self = [self init]; [self setFilename: aFilename]; return self; } - (void) _detectFormatClass { FormatTester *formatTester; formatTester = [FormatTester formatTester]; formatClass = [formatTester formatClassForFileExtension: [filename pathExtension]]; if (!formatClass) formatClass = [formatTester formatClassForFile: filename]; if (!formatClass) status = SongFormatNotRecognized; } - (NSObject *) openStreamForSong { NSObject *stream; stream = nil; if (filename && [[NSFileManager defaultManager] fileExistsAtPath: filename]) { if (!formatClass) [self _detectFormatClass]; if (formatClass) { stream = [formatClass new]; if ([stream streamOpen: filename]) { [stream autorelease]; status = SongOK; } else { [stream release]; stream = nil; status = SongStreamError; } } } else status = SongFileNotFound; return stream; } - (BOOL) _fileWasModified { NSFileManager *fileManager; NSDictionary *attributes; NSDate *newDate; unsigned long long newSize; BOOL modified; modified = NO; fileManager = [NSFileManager defaultManager]; attributes = [fileManager fileAttributesAtPath: filename traverseLink: YES]; if (attributes) { newDate = [attributes fileModificationDate]; newSize = [attributes fileSize]; if (!(date && [date isEqualToDate: newDate])) { modified = YES; SET (date, newDate); } if (size != newSize) { modified = YES; size = newSize; } } else { status = SongFileNotFound; modified = YES; } return modified; } - (NSEnumerator *) _tagsClassesForProtocol: (Protocol *) protocol { NSString *className; NSMutableArray *classes; NSEnumerator *classEnumerator; Class class; classes = [NSMutableArray new]; [classes autorelease]; if (!formatClass) [self _detectFormatClass]; if (formatClass) { classEnumerator = [[formatClass compatibleTagBundles] objectEnumerator]; className = [classEnumerator nextObject]; while (className) { class = NSClassFromString (className); if (class && [class conformsToProtocol: protocol]) [classes addObject: className]; className = [classEnumerator nextObject]; } } return [classes objectEnumerator]; } - (void) _refreshSongInfos { id stream; NSEnumerator *readingClasses; NSString *readingClass; readingClasses = [self _tagsClassesForProtocol: @protocol (TagsReading)]; readingClass = [readingClasses nextObject]; while (readingClass && ![NSClassFromString (readingClass) readTitle: &title artist: &artist album: &album trackNumber: &trackNumber genre: &genre year: &year ofFilename: filename]) readingClass = [readingClasses nextObject]; if ([title length] == 0) { title = [NSString stringWithFormat: @"[%@]", makeTitleFromFilename (filename)]; [title retain]; } stream = [self openStreamForSong]; if (stream) { isSeekable = [stream isSeekable]; SET (duration, [NSNumber numberWithUnsignedInt: [stream readDuration]]); [stream streamClose]; } } - (void) _readInfos { if (fileIsAcceptable (filename)) { if ([self _fileWasModified]) [self _refreshSongInfos]; } else status = SongFileNotFound; if (status != SongOK) { if (date) { [date release]; date = nil; } size = 0; SET (duration, [NSNumber numberWithUnsignedInt: 0]); } } - (void) setFilename: (NSString *) aFilename { SET (filename, [aFilename stringByStandardizingPath]); if (!fileIsAcceptable (filename)) status = SongFileNotFound; else status = SongOK; } - (NSString *) filename { RETURNSTRING (filename); } - (NSString *) shortFilename { return ((filename) ? [NSString stringWithString: [filename lastPathComponent]] : @""); } - (NSNumber *) duration { [self _readInfos]; return duration; } - (BOOL) songInfosCanBeModified { NSEnumerator *writingClasses; NSFileManager *fm; NSString *writingClass; writingClasses = [self _tagsClassesForProtocol: @protocol (TagsWriting)]; writingClass = [writingClasses nextObject]; fm = [NSFileManager defaultManager]; return (writingClass && [fm isWritableFileAtPath: filename]); } - (NSString *) title { [self _readInfos]; RETURNSTRING (title); } - (NSString *) artist { [self _readInfos]; RETURNSTRING (artist); } - (NSString *) album { [self _readInfos]; RETURNSTRING (album); } - (NSString *) genre { [self _readInfos]; RETURNSTRING (genre); } - (NSString *) trackNumber { [self _readInfos]; RETURNSTRING (trackNumber); } - (NSString *) year { [self _readInfos]; RETURNSTRING (year); } - (void) setTitle: (NSString *) newTitle artist: (NSString *) newArtist album: (NSString *) newAlbum genre: (NSString *) newGenre trackNumber: (NSString *) newTrackNumber year: (NSString *) newYear { NSString *savedTitle, *savedArtist, *savedAlbum, *savedGenre, *savedTrackNumber, *savedYear; NSString *writingClass; NSEnumerator *writingClasses; savedTitle = ([title isEqualToString: newTitle]) ? nil : newTitle; savedArtist = ([artist isEqualToString: newArtist]) ? nil : newArtist; savedAlbum = ([album isEqualToString: newAlbum]) ? nil : newAlbum; savedGenre = ([genre isEqualToString: newGenre]) ? nil : newGenre; savedTrackNumber = (([trackNumber isEqualToString: newTrackNumber]) ? nil : newTrackNumber); savedYear = ([year isEqualToString: newYear]) ? nil : newYear; writingClasses = [self _tagsClassesForProtocol: @protocol (TagsWriting)]; writingClass = [writingClasses nextObject]; while (writingClass && ![NSClassFromString (writingClass) setTitle: newTitle artist: newArtist album: newAlbum trackNumber: newTrackNumber genre: newGenre year: newYear ofFilename: filename]) writingClass = [writingClasses nextObject]; } - (NSString *) playlistRepresentation { NSMutableString *string; [self _readInfos]; string = [NSMutableString string]; switch (status) { case SongOK: if ([trackNumber length]) [string appendFormat: @"%@. ", trackNumber]; if ([title length]) { [string appendString: title]; if ([artist length]) [string appendFormat: @" - %@", artist]; } else { if ([artist length]) [string appendString: artist]; } if ([album length]) { if ([title length] || [artist length]) [string appendString: @" "]; [string appendFormat: @"(%@)", album]; } break; case SongFileNotFound: [string appendFormat: LOCALIZED (@"[not found: %@]"), filename]; break; case SongFormatNotRecognized: [string appendFormat: LOCALIZED (@"[unknown format: %@]"), filename]; break; case SongStreamError: [string appendFormat: LOCALIZED (@"[format error: %@]"), filename]; break; } return string; } - (SongStatus) status { [self _readInfos]; return status; } - (BOOL) isSeekable { return isSeekable; } - (NSComparisonResult) compareByPlaylistRepresentation: (Song *) aSong { NSComparisonResult result; NSString *selfDirectory, *songDirectory; selfDirectory = [filename stringByDeletingLastPathComponent]; songDirectory = [[aSong filename] stringByDeletingLastPathComponent]; result = [selfDirectory caseInsensitiveCompare: songDirectory]; if (result == NSOrderedSame) { result = [album caseInsensitiveCompare: [aSong album]]; if (result == NSOrderedSame) { result = [trackNumber numericallyCompare: [aSong trackNumber]]; if (result == NSOrderedSame) { result = [artist caseInsensitiveCompare: [aSong artist]]; if (result == NSOrderedSame) result = [title caseInsensitiveCompare: [aSong title]]; } } } return result; } - (NSComparisonResult) reverseCompareByPlaylistRepresentation: (Song *) aSong { return reverseComparisonResult ([self compareByPlaylistRepresentation: aSong]); } - (NSComparisonResult) compareByDuration: (Song *) aSong { return [duration compare: [aSong duration]]; } - (NSComparisonResult) reverseCompareByDuration: (Song *) aSong { return reverseComparisonResult ([duration compare: [aSong duration]]); } - (void) dealloc { RELEASEIFSET (filename); RELEASEIFSET (title); RELEASEIFSET (artist); RELEASEIFSET (album); RELEASEIFSET (genre); RELEASEIFSET (trackNumber); RELEASEIFSET (duration); RELEASEIFSET (date); [super dealloc]; } /* NSCoding protocol */ - (void) encodeWithCoder: (NSCoder *) encoder { [self _readInfos]; [encoder encodeObject: filename forKey: @"filename"]; if (title) [encoder encodeObject: title forKey: @"title"]; if (artist) [encoder encodeObject: artist forKey: @"artist"]; if (album) [encoder encodeObject: album forKey: @"album"]; if (trackNumber) [encoder encodeObject: trackNumber forKey: @"trackNumber"]; if (genre) [encoder encodeObject: genre forKey: @"genre"]; if (year) [encoder encodeObject: year forKey: @"year"]; [encoder encodeObject: duration forKey: @"duration"]; if (date) [encoder encodeObject: date forKey: @"date"]; [encoder encodeBool: isSeekable forKey: @"isSeekable"]; [encoder encodeInt: status forKey: @"status"]; [encoder encodeInt64: size forKey: @"size"]; [encoder encodeObject: [self playlistRepresentation] forKey: @"playlistRepresentation"]; } - (id) initWithCoder: (NSCoder *) decoder { if ((self = [self init])) { SET (filename, [decoder decodeObjectForKey: @"filename"]); SET (title, [decoder decodeObjectForKey: @"title"]); SET (artist, [decoder decodeObjectForKey: @"artist"]); SET (album, [decoder decodeObjectForKey: @"album"]); SET (trackNumber, [decoder decodeObjectForKey: @"trackNumber"]); SET (genre, [decoder decodeObjectForKey: @"genre"]); SET (year, [decoder decodeObjectForKey: @"year"]); SET (duration, [decoder decodeObjectForKey: @"duration"]); SET (date, [decoder decodeObjectForKey: @"date"]); isSeekable = [decoder decodeBoolForKey: @"isSeekable"]; status = [decoder decodeIntForKey: @"status"]; size = [decoder decodeIntForKey: @"size"]; } return self; } @end cynthiune.app-0.9.5/Bundles/0000755000175000017500000000000010413173130015237 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/ASFTags/0000755000175000017500000000000010413173165016477 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/ASFTags/ASFTags.h0000644000175000017500000000225510327263231020102 0ustar gurkangurkan/* ASFTags.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef ASFTags_H #define ASFTags_H #import #import typedef struct FileMetaData { NSString *title; NSString *author; NSMutableDictionary *extendedDictionary; } FileMetaData; @interface ASFTags : NSObject { } @end #endif /* ASFTags_H */ cynthiune.app-0.9.5/Bundles/ASFTags/GNUmakefile.preamble0000644000175000017500000000176110345610401022335 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_INCLUDE_DIRS += -I../.. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/ASFTags/ASFTags.m0000644000175000017500000002574310327263231020116 0ustar gurkangurkan/* ASFTags.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import "ASFMetaData.h" #import "ASFTags.h" #define LOCALIZED(X) _b ([ASFTags class], X) @interface NSString (CynthiuneASFTagsExtension) + (NSString *) stringWithASFText: (unsigned char *) text length: (unsigned int) length; @end @implementation NSString (CynthiuneASFTagsExtension) + (NSString *) stringWithASFText: (unsigned char *) text length: (unsigned int) length { NSString *string; unsigned int realLength; realLength = length; while (*(text + realLength - 2) == 0 && *(text + realLength - 1) == 0 && realLength > 0) realLength -= 2; string = [[self alloc] initWithBytes: text length: realLength encoding: NSUnicodeStringEncoding]; [string autorelease]; return string; } @end static char * convertGUID (const unsigned char GUID[]) { char *cGUID; cGUID = malloc (37); sprintf (cGUID, "%.8lX-%.4X-%.4X-%.2X%.2X-%.2X%.2X%.2X%.2X%.2X%.2X", *((unsigned long *) GUID), *((unsigned short *) GUID + 2), *((unsigned short *) GUID + 3), *((unsigned char *) GUID + 8), *((unsigned char *) GUID + 9), *((unsigned char *) GUID + 10), *((unsigned char *) GUID + 11), *((unsigned char *) GUID + 12), *((unsigned char *) GUID + 13), *((unsigned char *) GUID + 14), *((unsigned char *) GUID + 15)); return cGUID; } static int objectIsOfType (ASFObject *object, const char GUID[]) { char *cGUID; int result; cGUID = convertGUID (object->guid); result = (strncmp (GUID, cGUID, 16) == 0); free (cGUID); return result; } static void parseContentDescription (ContentDescriptionObject *object, FileMetaData *data) { unsigned char *ptr; ptr = (unsigned char *) object + sizeof (ContentDescriptionObject); data->title = ((object->title_length) ? [NSString stringWithASFText: ptr length: object->title_length] : nil); ptr += object->title_length; data->author = ((object->author_length) ? [NSString stringWithASFText: ptr length: object->author_length] : nil); } static inline unsigned char * asfstrndup (unsigned char *text, unsigned int length) { unsigned char *string; string = malloc (length); memcpy (string, text, length); return string; } static ContentDescriptor * parseDescriptor (unsigned char *object) { ContentDescriptor *descriptor; unsigned char *ptr; ptr = object; descriptor = malloc (sizeof (ContentDescriptor)); descriptor->name_length = *ptr + 256 * *(ptr + 1); ptr += 2; descriptor->name = asfstrndup (ptr, descriptor->name_length); ptr += descriptor->name_length; descriptor->value_datatype = *((unsigned short *) ptr); ptr += 2; descriptor->value_length = *ptr + 256 * *(ptr + 1); ptr += 2; descriptor->value = asfstrndup (ptr, descriptor->value_length); return descriptor; } static inline unsigned int sizeOfDescriptor (const ContentDescriptor *descriptor) { return (6 + descriptor->name_length + descriptor->value_length); } static ContentDescriptor ** parseDescriptors (ExtendedContentDescriptionObject *object) { ContentDescriptor **descriptors; ContentDescriptor *descriptor; unsigned int count; unsigned char *ptr; descriptors = malloc (sizeof (ContentDescriptor *) * object->descriptors_count); ptr = (unsigned char *) object + sizeof (ExtendedContentDescriptionObject); for (count = 0; count < object->descriptors_count; count++) { descriptor = parseDescriptor (ptr); *(descriptors + count) = descriptor; ptr += sizeOfDescriptor (descriptor); } return descriptors; } static NSString * extractValueFromDescriptor (ContentDescriptor *descriptor) { NSString *value; switch (descriptor->value_datatype) { case tUNICODE_STRING: value = [NSString stringWithASFText: descriptor->value length: descriptor->value_length]; break; case tBYTE_ARRAY: value = [NSString stringWithCString: (char *) descriptor->value length: descriptor->value_length]; break; case tBOOLEAN: value = [NSString stringWithFormat: @"%s", (*((unsigned long *) descriptor->value) ? "YES" : "NO")]; break; case tWORD: value = [NSString stringWithFormat: @"%d", *((unsigned long *) descriptor->value)]; break; case tDWORD: value = [NSString stringWithFormat: @"%d", *((unsigned long *) descriptor->value)]; break; case tQWORD: value = [NSString stringWithFormat: @"%l", *((unsigned long long *) descriptor->value)]; break; default: NSLog (@"unknown datatype: '%d'", descriptor->value_datatype); value = nil; } return value; } static void FillExtendedDictionary (ContentDescriptor * const *descriptors, unsigned int max, NSMutableDictionary *dictionary) { ContentDescriptor *descriptor; unsigned int count; NSString *name; for (count = 0; count < max; count++) { descriptor = descriptors[count]; if (descriptor->name_length) { name = [NSString stringWithASFText: descriptor->name length: descriptor->name_length]; [dictionary setObject: extractValueFromDescriptor (descriptor) forKey: name]; } } } static void parseExtendedContentDescription (ExtendedContentDescriptionObject *object, FileMetaData *data) { unsigned int count; ContentDescriptor **descriptors; descriptors = parseDescriptors (object); FillExtendedDictionary (descriptors, object->descriptors_count, data->extendedDictionary); for (count = 0; count < object->descriptors_count; count++) { free (descriptors[count]->name); free (descriptors[count]->value); free (descriptors[count]); } free (descriptors); } static FileMetaData * parseHeaderData (void *data, int size) { char *ptr; ASFObject *optr; FileMetaData *metadata; ptr = data; metadata = calloc (sizeof (FileMetaData), 1); metadata->extendedDictionary = [NSMutableDictionary new]; while (ptr < (char *) data + size) { optr = (ASFObject *) ptr; if (objectIsOfType (optr, ASF_Content_Description_Object)) parseContentDescription ((ContentDescriptionObject *) optr, metadata); else if (objectIsOfType (optr, ASF_Extended_Content_Description_Object)) parseExtendedContentDescription ((ExtendedContentDescriptionObject *) optr, metadata); ptr += optr->size; } return metadata; } static HeaderObject * readHeaderObject (FILE *asf) { HeaderObject *newObject; newObject = malloc (sizeof (HeaderObject)); fread (newObject->guid, 16, 1, asf); fread (&(newObject->size), 8, 1, asf); fread (&(newObject->number), 4, 1, asf); fread (&(newObject->res1), 1, 1, asf); fread (&(newObject->res2), 1, 1, asf); if (newObject->res1 != 0x01 || newObject->res2 != 0x02) { free (newObject); newObject = NULL; } return newObject; } static inline FileMetaData * readMetaData (FILE *asf) { HeaderObject *ho; void *data; FileMetaData *metadata; ho = readHeaderObject (asf); if (objectIsOfType ((ASFObject *) ho, ASF_Header_Object)) { data = malloc (ho->size - 30); fread (data, ho->size - 30, 1, asf); metadata = parseHeaderData (data, ho->size - 30); free (data); } else metadata = NULL; free (ho); return metadata; } @implementation ASFTags : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the tags of ASF files"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (NSString *) _readTitle: (FileMetaData *) metadata { NSString *title; title = [metadata->extendedDictionary objectForKey: @"Title"]; if (!title) title = [metadata->extendedDictionary objectForKey: @"WM/Title"]; if (!title) title = metadata->title; return title; } + (NSString *) _readArtist: (FileMetaData *) metadata { NSString *artist; artist = [metadata->extendedDictionary objectForKey: @"WM/AlbumArtist"]; if (!artist) artist = [metadata->extendedDictionary objectForKey: @"WM/Composer"]; if (!artist) artist = metadata->author; return artist; } + (NSString *) _readTrackNumber: (FileMetaData *) metadata { NSString *trackNumber, *track; trackNumber = [metadata->extendedDictionary objectForKey: @"WM/TrackNumber"]; if (!trackNumber) { track = [metadata->extendedDictionary objectForKey: @"WM/Track"]; if (track) trackNumber = [NSString stringWithFormat: @"%d", 1 + [track intValue]]; } return trackNumber; } + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { FILE *cFile; FileMetaData *metadata; BOOL result; result = NO; cFile = fopen ([filename cString], "r"); if (cFile) { metadata = readMetaData (cFile); if (metadata) { result = YES; SET (*title, [self _readTitle: metadata]); SET (*artist, [self _readArtist: metadata]); SET (*album, [metadata->extendedDictionary objectForKey: @"WM/AlbumTitle"]); SET (*trackNumber, [self _readTrackNumber: metadata]); SET (*genre, [metadata->extendedDictionary objectForKey: @"WM/Genre"]); SET (*year, [metadata->extendedDictionary objectForKey: @"WM/Year"]); [metadata->extendedDictionary release]; free (metadata); } fclose (cFile); } return result; } @end cynthiune.app-0.9.5/Bundles/ASFTags/ASFMetaData.h0000644000175000017500000001515110320127711020656 0ustar gurkangurkan/* ASFMetaData.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef ASFMETADATA_H #define ASFMETADATA_H #define ASF_Header_Object "75B22630-668E-11CF-A6D9-00AA0062CE6C" #define ASF_Data_Object "75B22636-668E-11CF-A6D9-00AA0062CE6C" #define ASF_Simple_Index_Object "33000890-E5B1-11CF-89F4-00A0C90349CB" #define ASF_Index_Object "D6E229D3-35DA-11D1-9034-00A0C90349BE" #define ASF_Media_Object_Index_Object "FEB103F8-12AD-4C64-840F-2A1D2F7AD48C" #define ASF_Timecode_Index_Object "3CB73FD0-0C4A-4803-953D-EDF7B6228F0C" #define ASF_File_Properties_Object "8CABDCA1-A947-11CF-8EE4-00C00C205365" #define ASF_Stream_Properties_Object "B7DC0791-A9B7-11CF-8EE6-00C00C205365" #define ASF_Header_Extension_Object "5FBF03B5-A92E-11CF-8EE3-00C00C205365" #define ASF_Codec_List_Object "86D15240-311D-11D0-A3A4-00A0C90348F6" #define ASF_Script_Command_Object "1EFB1A30-0B62-11D0-A39B-00A0C90348F6" #define ASF_Marker_Object "F487CD01-A951-11CF-8EE6-00C00C205365" #define ASF_Bitrate_Mutual_Exclusion_Object "D6E229DC-35DA-11D1-9034-00A0C90349BE" #define ASF_Error_Correction_Object "75B22635-668E-11CF-A6D9-00AA0062CE6C" #define ASF_Content_Description_Object "75B22633-668E-11CF-A6D9-00AA0062CE6C" #define ASF_Extended_Content_Description_Object "D2D0A440-E307-11D2-97F0-00A0C95EA850" #define ASF_Content_Branding_Object "2211B3FA-BD23-11D2-B4B7-00A0C955FC6E" #define ASF_Stream_Bitrate_Properties_Object "7BF875CE-468D-11D1-8D82-006097C9A2B2" #define ASF_Content_Encryption_Object "2211B3FB-BD23-11D2-B4B7-00A0C955FC6E" #define ASF_Extended_Content_Encryption_Object "298AE614-2622-4C17-B935-DAE07EE9289C" #define ASF_Digital_Signature_Object "2211B3FC-BD23-11D2-B4B7-00A0C955FC6E" #define ASF_Padding_Object "1806D474-CADF-4509-A4BA-9AABCB96AAE8" #define ASF_Extended_Stream_Properties_Object "14E6A5CB-C672-4332-8399-A96952065B5A" #define ASF_Advanced_Mutual_Exclusion_Object "A08649CF-4775-4670-8A16-6E35357566CD" #define ASF_Group_Mutual_Exclusion_Object "D1465A40-5A79-4338-B71B-E36B8FD6C249" #define ASF_Stream_Prioritization_Object "D4FED15B-88D3-454F-81F0-ED5C45999E24" #define ASF_Bandwidth_Sharing_Object "A69609E6-517B-11D2-B6AF-00C04FD908E9" #define ASF_Language_List_Object "7C4346A9-EFE0-4BFC-B229-393EDE415C85" #define ASF_Metadata_Object "C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA" #define ASF_Metadata_Library_Object "44231C94-9498-49D1-A141-1D134E457054" #define ASF_Index_Parameters_Object "D6E229DF-35DA-11D1-9034-00A0C90349BE" #define ASF_Media_Object_Index_Parameters_Object "6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7" #define ASF_Timecode_Index_Parameters_Object "F55E496D-9797-4B5D-8C8B-604DFE9BFB24" #define ASF_Compatibility_Object "75B22630-668E-11CF-A6D9-00AA0062CE6C" #define ASF_Advanced_Content_Encryption_Object "43058533-6981-49E6-9B74-AD12CB86D58C" #define ASF_Audio_Media "F8699E40-5B4D-11CF-A8FD-00805F5C442B" #define ASF_Video_Media "BC19EFC0-5B4D-11CF-A8FD-00805F5C442B" #define ASF_Command_Media "59DACFC0-59E6-11D0-A3AC-00A0C90348F6" #define ASF_JFIF_Media "B61BE100-5B4E-11CF-A8FD-00805F5C442B" #define ASF_Degradable_JPEG_Media "35907DE0-E415-11CF-A917-00805F5C442B" #define ASF_File_Transfer_Media "91BD222C-F21C-497A-8B6D-5AA86BFC0185" #define ASF_Binary_Media "3AFB65E2-47EF-40F2-AC2C-70A90D71D343" #define ASF_Web_Stream_Media_Subtype "776257D4-C627-41CB-8F81-7AC7FF1C40CC" #define ASF_Web_Stream_Format "DA1E6B13-8359-4050-B398-388E965BF00C" #define ASF_No_Error_Correction "20FB5700-5B55-11CF-A8FD-00805F5C442B" #define ASF_Audio_Spread "BFC3CD50-618F-11CF-8BB2-00AA00B4E220" #define ASF_Reserved_1 "ABD3D211-A9BA-11cf-8EE6-00C00C205365" #define ASF_Content_Encryption_System_Windows_Media_DRM_Network_Devices "7A079BB6-DAA4-4e12-A5CA-91D38DC11A8D" #define ASF_Reserved_2 "86D15241-311D-11D0-A3A4-00A0C90348F6" #define ASF_Reserved_3 "4B1ACBE3-100B-11D0-A39B-00A0C90348F6" #define ASF_Reserved_4 "4CFEDB20-75F6-11CF-9C0F-00A0C90349CB" #define ASF_Mutex_Language "D6E22A00-35DA-11D1-9034-00A0C90349BE" #define ASF_Mutex_Bitrate "D6E22A01-35DA-11D1-9034-00A0C90349BE" #define ASF_Mutex_Unknown "D6E22A02-35DA-11D1-9034-00A0C90349BE" #define ASF_Bandwidth_Sharing_Exclusive "AF6060AA-5197-11D2-B6AF-00C04FD908E9" #define ASF_Bandwidth_Sharing_Partial "AF6060AB-5197-11D2-B6AF-00C04FD908E9" #define ASF_Payload_Extension_System_Timecode "399595EC-8667-4E2D-8FDB-98814CE76C1E" #define ASF_Payload_Extension_System_File_Name "E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B" #define ASF_Payload_Extension_System_Content_Type "D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC" #define ASF_Payload_Extension_System_Pixel_Aspect_Ratio "1B1EE554-F9EA-4BC8-821A-376B74E4C4B8" #define ASF_Payload_Extension_System_Sample_Duration "C6BD9450-867F-4907-83A3-C77921B733AD" #define ASF_Payload_Extension_System_Encryption_Sample_ID "6698B84E-0AFA-4330-AEB2-1C0A98D7A44D" typedef struct ASFObject { unsigned char guid[16]; unsigned long long size; } __attribute((packed)) ASFObject; typedef struct HeaderObject { unsigned char guid[16]; unsigned long long size; unsigned int number; unsigned char res1; unsigned char res2; } __attribute((packed)) HeaderObject; typedef struct ContentDescriptionObject { unsigned char guid[16]; unsigned long long size; unsigned short title_length; unsigned short author_length; unsigned short copyright_length; unsigned short description_length; unsigned short rating_length; } __attribute((packed)) ContentDescriptionObject; typedef struct ExtendedContentDescriptionObject { unsigned char guid[16]; unsigned long long size; unsigned short descriptors_count; } __attribute((packed)) ExtendedContentDescriptionObject; enum { tUNICODE_STRING = 0, tBYTE_ARRAY = 1, tBOOLEAN = 2, tDWORD = 3, tQWORD = 4, tWORD = 5 }; typedef struct ContentDescriptor { unsigned short name_length; unsigned char *name; unsigned short value_datatype; unsigned short value_length; unsigned char *value; } __attribute((packed)) ContentDescriptor; #endif /* ASFMETADATA_H */ cynthiune.app-0.9.5/Bundles/ASFTags/GNUmakefile0000644000175000017500000000316210316101017020540 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=ASFTags BUNDLE_NAME=ASFTags BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune ASFTags_PRINCIPAL_CLASS=ASFTags # # Additional libraries # ASFTags_LIBRARIES_DEPEND_UPON += # # Resource files # ASFTags_RESOURCE_FILES= # # Header files # ASFTags_HEADERS= \ ASFTags.h # # Class files # ASFTags_OBJC_FILES= \ ASFTags.m # # C files # ASFTags_C_FILES= # # C++ files # ASFTags_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/OutputSkeleton/0000755000175000017500000000000010413173130020244 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/OutputSkeleton/GNUmakefile.preamble0000644000175000017500000000171510345610404024114 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/OutputSkeleton/Skeleton.m0000644000175000017500000000347210257114005022216 0ustar gurkangurkan/* $OUTPUT$.m - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import "$OUTPUT$.h" #define LOCALIZED(X) _b ([$OUTPUT$ class], X) @implementation $OUTPUT$ : NSObject + (NSString *) bundleDescription { return @"Output plug-in for the Wawa sound daemon"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wawa Ragga", nil]; } + (BOOL) isThreaded { return NO; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (id) init { if ((self = [super init])) { } return self; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { return NO; } - (BOOL) openDevice { return NO; } - (void) closeDevice { } - (void) playChunk: (NSData *) chunk { } @end cynthiune.app-0.9.5/Bundles/OutputSkeleton/GNUmakefile0000644000175000017500000000316210224643553022333 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=$OUTPUT$ BUNDLE_NAME=$OUTPUT$ BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune $OUTPUT$_PRINCIPAL_CLASS=$OUTPUT$ $OUTPUT$_LANGUAGES= $OUTPUT$_LOCALIZED_RESOURCE_FILES= # # Additional libraries # $OUTPUT$_LIBRARIES_DEPEND_UPON += # # Resource files # $OUTPUT$_RESOURCE_FILES= # # Header files # $OUTPUT$_HEADERS= \ $OUTPUT$.h # # Class files # $OUTPUT$_OBJC_FILES= \ $OUTPUT$.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/OutputSkeleton/Skeleton.h0000644000175000017500000000175710166217770022231 0ustar gurkangurkan/* $OUTPUT$.h - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef $OUTPUT$_H #define $OUTPUT$_H @interface $OUTPUT$ : NSObject { } @end #endif /* $OUTPUT$_H */ cynthiune.app-0.9.5/Bundles/aRts/0000755000175000017500000000000010413173165016160 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/aRts/GNUmakefile.preamble0000644000175000017500000000213310406710362022015 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import $(shell artsc-config --cflags) -DARTSD="\"$(shell artsc-config --arts-prefix)/bin/artsd\"" ADDITIONAL_LDFLAGS += $(shell artsc-config --libs) ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/aRts/aRts.m0000644000175000017500000001020010406710555017242 0ustar gurkangurkan/* aRts.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import #import #import #import #import "aRts.h" #define LOCALIZED(X) _b ([aRts class], X) #define artsStreamName "Cynthiune stream" @implementation aRts : NSObject + (NSString *) bundleDescription { return @"Output plug-in for the aRts sound daemon"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (BOOL) isThreaded { return YES; } - (id) init { if ((self = [super init])) { outputStream = NULL; channels = 0; rate = 0; stopRequested = NO; } return self; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { BOOL result; channels = numberOfChannels; rate = sampleRate; if (outputStream) { arts_close_stream (outputStream); outputStream = arts_play_stream (rate, 16, channels, artsStreamName); arts_stream_set (outputStream, ARTS_P_BLOCKING, 1); result = (outputStream != NULL); } else result = YES; return result; } - (BOOL) _launchServer { NSTask *artsdTask; NSString *artsdPath; artsdTask = [NSTask new]; [artsdTask autorelease]; artsdPath = [NSString stringWithCString: ARTSD]; [artsdTask setLaunchPath: artsdPath]; [artsdTask launch]; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.2]]; return [artsdTask isRunning]; } - (BOOL) openDevice { BOOL result; int code; if (outputStream) result = YES; else { /* FIXME: should add code to spawn the daemon */ code = arts_init (); if (code == ARTS_E_NOSERVER) if ([self _launchServer]) code = arts_init (); if (code == 0) { outputStream = arts_play_stream (rate, 16, channels, artsStreamName); arts_stream_set (outputStream, ARTS_P_BLOCKING, 1); result = (outputStream != NULL); } else { NSLog (@"failure opening device:\n%d, %s", code, arts_error_text (code)); result = NO; } } return result; } - (void) closeDevice { while (stopRequested) [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]]; arts_close_stream (outputStream); outputStream = NULL; arts_free (); } - (void) threadLoop { NSAutoreleasePool *pool; int bufferSize; pool = [NSAutoreleasePool new]; while (!stopRequested) { bufferSize = [parentPlayer readNextChunk: buffer withSize: DEFAULT_BUFFER_SIZE]; if (bufferSize > 0) arts_write (outputStream, buffer, bufferSize); if ([pool autoreleaseCount] > 50) [pool emptyPool]; } stopRequested = NO; [pool release]; } - (BOOL) startThread { [NSThread detachNewThreadSelector: @selector (threadLoop) toTarget: self withObject: nil]; return YES; } - (void) stopThread { stopRequested = YES; } @end cynthiune.app-0.9.5/Bundles/aRts/aRts.h0000644000175000017500000000223210376640302017241 0ustar gurkangurkan/* aRts.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef aRts_H #define aRts_H #import @interface aRts : NSObject { id parentPlayer; BOOL stopRequested; arts_stream_t outputStream; unsigned long rate; unsigned int channels; unsigned char buffer[DEFAULT_BUFFER_SIZE]; } @end #endif /* aRts_H */ cynthiune.app-0.9.5/Bundles/aRts/GNUmakefile0000644000175000017500000000310210256640735020235 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=aRts BUNDLE_NAME=aRts BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune aRts_PRINCIPAL_CLASS=aRts aRts_LANGUAGES= aRts_LOCALIZED_RESOURCE_FILES= # # Additional libraries # aRts_LIBRARIES_DEPEND_UPON += # # Resource files # aRts_RESOURCE_FILES= # # Header files # aRts_HEADERS= \ aRts.h # # Class files # aRts_OBJC_FILES= \ aRts.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/AudioFile/0000755000175000017500000000000010413173130017100 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/AudioFile/GNUmakefile.preamble0000644000175000017500000000236210345610401022744 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. AUDIOFILE_CFLAGS := $(shell audiofile-config --cflags) AUDIOFILE_LIBS := $(shell audiofile-config --libs) ADDITIONAL_INCLUDE_DIRS += -I../.. $(AUDIOFILE_CFLAGS) ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(AUDIOFILE_LIBS) else ADDITIONAL_LDFLAGS += $(AUDIOFILE_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/AudioFile/AudioFile.m0000644000175000017500000001240310376422144021131 0ustar gurkangurkan/* AudioFile.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "AudioFileBundle.h" @implementation AudioFile : NSObject + (void) initialize { afSetErrorHandler (NULL); } // CynthiuneBundle Protocol + (NSString *) bundleDescription { return @"Extension plug-in for AIFF, AU, AVR, IFF, NIST, SND and WAV audio formats"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2004 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return nil; } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"aif", @"aifc", @"aiff", @"au", @"avr", @"iff", @"nist", @"snd", @"wav", nil]; } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { AFfilehandle testFile; int vers, fileFormat; BOOL result; result = NO; testFile = afOpenFile ([fileName cString], "r", NULL); if (testFile) { fileFormat = afGetFileFormat (testFile, &vers); result = (fileFormat != AF_FILE_UNKNOWN); afCloseFile (testFile); } return result; } - (BOOL) streamOpen: (NSString *) fileName { int format; file = afOpenFile ([fileName cString], "r", NULL); if (file) { frameSize = afGetVirtualFrameSize(file, AF_DEFAULT_TRACK, 1); afGetVirtualSampleFormat (file, AF_DEFAULT_TRACK, &format, &width); if (format == AF_SAMPFMT_UNSIGNED) afSetVirtualSampleFormat (file, AF_DEFAULT_TRACK, AF_SAMPFMT_TWOSCOMP, width); } return (file != NULL); } - (void) streamClose { afCloseFile (file); } - (int) _readNext8BitChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int size, conversionSize; unsigned char *conversionBuffer; conversionBuffer = malloc (bufferSize); conversionSize = (int) (afReadFrames (file, AF_DEFAULT_TRACK, conversionBuffer, (int) (bufferSize / frameSize / 2))); size = conversionSize * frameSize * 2; convert8to16 (conversionBuffer, buffer, conversionSize); free (conversionBuffer); return size; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { return ((width == 16) ? (int) (afReadFrames (file, AF_DEFAULT_TRACK, buffer, (int) (bufferSize / frameSize)) * frameSize) : [self _readNext8BitChunk: buffer withSize: bufferSize] ); } - (unsigned int) readChannels { return afGetChannels (file, AF_DEFAULT_TRACK); } - (unsigned long) readRate { return (unsigned long) afGetRate (file, AF_DEFAULT_TRACK); } - (unsigned int) readDuration { return (afGetTrackBytes (file, AF_DEFAULT_TRACK) / (afGetChannels (file, AF_DEFAULT_TRACK) * afGetRate (file, AF_DEFAULT_TRACK) * width / 8)); } - (NSString *) _getAudioFileIDOfType: (int) idType withMax: (int) max { int *ids; int id, count, size; NSString *result; char *cResult; result = @""; ids = malloc (max); afGetMiscIDs (file, ids); for (count = 0; count < max; count++) { id = *(ids + count); if (afGetMiscType (file, id) == idType) { size = afGetMiscSize (file, id); if (size > 0) { cResult = malloc (size + 1); *(cResult + size) = 0; afReadMisc (file, id, cResult, size); result = [NSString stringWithCString: cResult]; free (cResult); } } } free (ids); return result; } - (NSString *) _getAudioFileIDOfType: (int) idType { int max; NSString *result; max = afGetMiscIDs (file, NULL); if (max > 0) result = [self _getAudioFileIDOfType: idType withMax: max]; else result = @""; return result;; } - (NSString *) readTitle { return [self _getAudioFileIDOfType: AF_MISC_NAME]; } - (NSString *) readGenre { return @""; } - (NSString *) readArtist { return [self _getAudioFileIDOfType: AF_MISC_AUTH]; } - (NSString *) readAlbum { return @""; } - (NSString *) readYear { return [self _getAudioFileIDOfType: AF_MISC_ICRD]; } - (NSString *) readTrackNumber { return @""; } - (BOOL) isSeekable { return NO; } - (void) seek: (unsigned int) aPos { } @end cynthiune.app-0.9.5/Bundles/AudioFile/AudioFileBundle.h0000644000175000017500000000201710376360167022264 0ustar gurkangurkan/* AudioFile.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ @protocol CynthiuneBundle; @protocol Format; @interface AudioFile : NSObject { AFfilehandle file; int width; float frameSize; } @end cynthiune.app-0.9.5/Bundles/AudioFile/GNUmakefile0000644000175000017500000000271210224643553021167 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME=AudioFile BUNDLE_NAME=AudioFile BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune AudioFile_PRINCIPAL_CLASS=AudioFile AudioFile_LIBRARIES_DEPEND_UPON += AudioFile_RESOURCE_FILES= AudioFile_HEADERS= \ AudioFile.h AudioFile_OBJC_FILES= \ AudioFile.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Ogg/0000755000175000017500000000000010413173130015753 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Ogg/GNUmakefile.preamble0000644000175000017500000000220110303172722021612 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. VORBIS_LIBS := -lvorbisenc -lvorbisfile -lvorbis -logg ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(VORBIS_LIBS) else ADDITIONAL_LDFLAGS += $(VORBIS_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Ogg/Ogg.m0000644000175000017500000001431110320501322016640 0ustar gurkangurkan/* Ogg.m - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "Ogg.h" #define LOCALIZED(X) _b ([Ogg class], X) static size_t oggReadFunc (void *ptr, size_t size, size_t nmemb, void *datasource) { NSFileHandle *fileHandle; NSData *data; size_t length; fileHandle = datasource; data = [fileHandle readDataOfLength: size * nmemb]; length = [data length]; memcpy (ptr, [data bytes], length); return length; } static int oggSeekFunc (void *datasource, ogg_int64_t offset, int whence) { NSFileHandle *fileHandle; unsigned long long realOffset; fileHandle = datasource; switch (whence) { case SEEK_SET: realOffset = offset; break; case SEEK_CUR: realOffset = [fileHandle offsetInFile] + offset; break; case SEEK_END: realOffset = [fileHandle seekToEndOfFile] + offset; break; default: NSLog (@"unrecognize value for whence: %d", whence); realOffset = [fileHandle offsetInFile]; } [fileHandle seekToFileOffset: realOffset]; return 0; } static int oggCloseFunc (void *datasource) { NSFileHandle *fileHandle; fileHandle = datasource; [fileHandle closeFile]; [fileHandle release]; return 0; } static long oggTellFunc (void *datasource) { NSFileHandle *fileHandle; fileHandle = datasource; return [fileHandle offsetInFile]; } static ov_callbacks oggCallbacks = { oggReadFunc, oggSeekFunc, oggCloseFunc, oggTellFunc }; @implementation Ogg : NSObject + (NSString *) bundleDescription { return @"Extension plug-in for the Ogg Vorbis audio format"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2002-2005 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return [NSArray arrayWithObjects: @"VorbisTags", @"Taglib", nil]; } - (BOOL) streamOpen: (NSString *) fileName { NSFileHandle *_fileHandle; _fileHandle = [NSFileHandle fileHandleForReadingAtPath: fileName]; bitStream = 0; if (_fileHandle) { _ov_file = calloc (sizeof (OggVorbis_File), 1); lastError = ov_open_callbacks (_fileHandle, _ov_file, NULL, 0L, oggCallbacks); if (lastError) [_fileHandle closeFile]; else [_fileHandle retain]; } else { NSLog (@"No native handle..."); lastError = OV_EREAD; } return (lastError == 0); } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { NSFileHandle *_fileHandle; BOOL result = NO; int vorbisError; OggVorbis_File *_ov_test_file; _fileHandle = [NSFileHandle fileHandleForReadingAtPath: fileName]; if (_fileHandle) { _ov_test_file = calloc (sizeof (OggVorbis_File), 1); vorbisError = ov_open_callbacks (_fileHandle, _ov_test_file, NULL, 0L, oggCallbacks); if (vorbisError) { if (vorbisError != OV_ENOTVORBIS) NSLog (@"Ogg: streamTestOpen: %@", [self errorText: vorbisError]); [_fileHandle closeFile]; } else { result = YES; [_fileHandle retain]; ov_clear (_ov_test_file); } } return result; } + (NSString *) errorText: (int) error { char *cErrorMessage; switch (error) { case OV_EREAD: cErrorMessage = "A read from media returned an error"; break; case OV_ENOTVORBIS: cErrorMessage = "Bitstream is not Vorbis data"; break; case OV_EVERSION: cErrorMessage = "Vorbis version mismatch"; break; case OV_EBADHEADER: cErrorMessage = "Invalid Vorbis bitstream header"; break; case OV_EFAULT: cErrorMessage = "Internal logic fault"; break; case OV_ENOSEEK: cErrorMessage = "Bitstream is not seekable"; break; case OV_EINVAL: cErrorMessage = "Invalid argument value"; break; case OV_EBADLINK: cErrorMessage = "Invalid stream section supplied to libvorbisfile, or" " the requested link is corrupt"; break; case 0: cErrorMessage = "(No error)"; break; default: cErrorMessage = "(undefined error)"; } return [NSString stringWithUTF8String: cErrorMessage]; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int bytes_read; if (_ov_file) { bytes_read = ov_read (_ov_file, (char *) buffer, bufferSize, 0, 2, 1, &bitStream); if (bytes_read < 0) lastError = bytes_read; } else { lastError = OV_EFAULT; bytes_read = -1; } return bytes_read; } - (int) lastError { return lastError; } - (unsigned int) readChannels { return (_ov_file->vi->channels); } - (unsigned long) readRate { return (_ov_file->vi->rate); } - (unsigned int) readDuration { return (ov_time_total (_ov_file, -1)); } - (void) streamClose { ov_clear (_ov_file); _ov_file = NULL; } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObject: @"ogg"]; } - (BOOL) isSeekable { return (BOOL) ov_seekable (_ov_file); } - (void) seek: (unsigned int) aPos { ogg_int64_t pcmPos; pcmPos = aPos * [self readChannels] * [self readRate] / 2; #ifdef __MACOSX__ ov_pcm_seek (_ov_file, pcmPos); #else ov_pcm_seek_lap (_ov_file, pcmPos); #endif } @end cynthiune.app-0.9.5/Bundles/Ogg/GNUmakefile0000644000175000017500000000301410224643553020036 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=Ogg BUNDLE_NAME=Ogg BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Ogg_PRINCIPAL_CLASS=Ogg # # Additional libraries # Ogg_LIBRARIES_DEPEND_UPON += # # Resource files # Ogg_RESOURCE_FILES= # # Header files # Ogg_HEADERS= \ Ogg.h # # Class files # Ogg_OBJC_FILES= \ Ogg.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Ogg/Ogg.h0000644000175000017500000000221710042411640016641 0ustar gurkangurkan/* Ogg.h - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Ogg_H #define Ogg_H @interface Ogg : NSObject { int lastError; int bitStream; /* internal use */ OggVorbis_File *_ov_file; } + (NSString *) errorText: (int) error; /* - (NSString *) lastErrorText; */ /* - (int) lastError; */ @end #endif /* Ogg_H */ cynthiune.app-0.9.5/Bundles/OSS/0000755000175000017500000000000010413173130015703 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/OSS/GNUmakefile.preamble0000644000175000017500000000171510345610403021552 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/OSS/OSS.h0000644000175000017500000000222410303176716016533 0ustar gurkangurkan/* OSS.h - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef OSS_H #define OSS_H #import @class NSFileHandle; @protocol CynthiuneBundle; @protocol Output; @interface OSS : NSObject { id parentPlayer; NSFileHandle *dsp; unsigned int channels; unsigned long rate; } @end #endif /* OSS_H */ cynthiune.app-0.9.5/Bundles/OSS/GNUmakefile0000644000175000017500000000322110224643553017766 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=OSS BUNDLE_NAME=OSS BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune OSS_PRINCIPAL_CLASS=OSS OSS_LANGUAGES=English French OSS_LOCALIZED_RESOURCE_FILES=Localizable.strings # # Additional libraries # OSS_LIBRARIES_DEPEND_UPON += # # Resource files # OSS_RESOURCE_FILES= \ OSSPreferences.gorm # # Header files # OSS_HEADERS= \ OSS.h \ OSSPreference.h # # Class files # OSS_OBJC_FILES= \ OSS.m \ OSSPreference.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/OSS/OSSPreference.m0000644000175000017500000000607010406704527020543 0ustar gurkangurkan/* OSSPreference.m - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import "OSS.h" #import "OSSPreference.h" #define LOCALIZED(X) _b ([OSS class], X) @implementation OSSPreference : NSObject + (id) instance { static OSSPreference *singleton = nil; if (!singleton) singleton = [[OSSPreference alloc] _init]; return singleton; } - (OSSPreference *) _init { NSDictionary *tmpDict; if ((self = [super init])) { tmpDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey: @"OSS"]; preference = [NSMutableDictionary dictionaryWithDictionary: tmpDict]; [preference retain]; } return self; } - (NSView *) preferenceSheet { NSView *aView; [NSBundle loadNibNamed: @"OSSPreferences" owner: self]; aView = [prefsWindow contentView]; [aView retain]; [aView removeFromSuperview]; [prefsWindow release]; [aView autorelease]; return aView; } - (void) _initDefaults { NSString *dspDevice; static BOOL initted = NO; if (!initted) { dspDevice = [preference objectForKey: @"dspDevice"]; if (!dspDevice) { dspDevice = @"/dev/dsp"; [preference setObject: dspDevice forKey: @"dspDevice"]; } initted = YES; } } - (void) awakeFromNib { [self _initDefaults]; [dspBox setTitle: LOCALIZED (@"DSP device")]; [dspDeviceLabel setStringValue: LOCALIZED (@"Filename")]; [dspDeviceField setStringValue: [preference objectForKey: @"dspDevice"]]; } - (NSString *) preferenceTitle { return @"OSS"; } - (void) save { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: preference forKey: @"OSS"]; [defaults synchronize]; } - (NSString *) dspDevice { [self _initDefaults]; return [preference objectForKey: @"dspDevice"]; } - (void) controlTextDidEndEditing: (NSNotification *) notification { [preference setObject: [[notification object] stringValue] forKey: @"dspDevice"]; } @end cynthiune.app-0.9.5/Bundles/OSS/French.lproj/0000755000175000017500000000000010413173130020235 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/OSS/French.lproj/Localizable.strings0000644000175000017500000000017410406705251024102 0ustar gurkangurkan"DSP device" = "Priph. DSP"; "Filename" = "Nom de fichier"; cynthiune.app-0.9.5/Bundles/OSS/OSS.m0000644000175000017500000000761710257411765016557 0ustar gurkangurkan/* OSS.m - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import #import #import #import #import #import "OSS.h" #import "OSSPreference.h" #define LOCALIZED(X) _b ([OSS class], X) #define DspError(X) \ NSLog (@"An error occured when sending '%s' ioctl to DSP:%s", \ X, strerror(errno)) static NSNotificationCenter *nc; static NSArray *loopModes; @implementation OSS : NSObject + (void) initialize { nc = [NSNotificationCenter defaultCenter]; loopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEventTrackingRunLoopMode, nil]; [loopModes retain]; } + (NSString *) bundleDescription { return @"Output plug-in for the Linux OSS driver"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2002-2004 Wolfgang Sourdeau", nil]; } + (BOOL) isThreaded { return NO; } + (void) unload { [loopModes release]; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (id) init { if ((self = [super init])) { parentPlayer = nil; dsp = nil; } return self; } - (BOOL) _setRateAndChannels { int dspFd, format; BOOL result; dspFd = [dsp fileDescriptor]; result = NO; if (ioctl (dspFd, SNDCTL_DSP_RESET) == -1) DspError ("SNDCTL_DSP_RESET"); else { format = AFMT_S16_LE; if (ioctl (dspFd, SNDCTL_DSP_SETFMT, &format) == -1) DspError ("SNDCTL_DSP_SETFMT"); else { if (ioctl (dspFd, SNDCTL_DSP_SPEED, &rate) == -1) DspError ("SNDCTL_DSP_SPEED"); else { if (ioctl (dspFd, SNDCTL_DSP_CHANNELS, &channels) == -1) DspError ("SNDCTL_DSP_CHANNELS"); else result = YES; } } } return result; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { channels = numberOfChannels; rate = sampleRate; return ((dsp) ? [self _setRateAndChannels] : YES); } - (BOOL) openDevice { OSSPreference *preference; BOOL result; preference = [OSSPreference instance]; dsp = [NSFileHandle fileHandleForWritingAtPath: [preference dspDevice]]; if (dsp) { [dsp retain]; [nc addObserver: self selector: @selector (_writeCompleteNotification:) name: GSFileHandleWriteCompletionNotification object: dsp]; result = [self _setRateAndChannels]; } else result = NO; return result; } - (void) closeDevice { [dsp closeFile]; [dsp release]; dsp = nil; } - (void) _writeCompleteNotification: (NSNotification *) aNotification { [parentPlayer chunkFinishedPlaying]; } - (void) playChunk: (NSData *) chunk { [dsp writeInBackgroundAndNotify: chunk forModes: loopModes]; } @end cynthiune.app-0.9.5/Bundles/OSS/English.lproj/0000755000175000017500000000000010413173130020421 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/OSS/English.lproj/Localizable.strings0000644000175000017500000000015610406705233024266 0ustar gurkangurkan"DSP device" = "DSP device"; "Filename" = "Filename"; cynthiune.app-0.9.5/Bundles/OSS/OSSPreference.h0000644000175000017500000000242010406704400020517 0ustar gurkangurkan/* OSSPreference.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef OSSPREFERENCE_H #define OSSPREFERENCE_H #import @class NSBox; @class NSWindow; @class NSTextField; @interface OSSPreference : NSObject { NSMutableDictionary *preference; NSWindow *prefsWindow; NSBox *dspBox; NSTextField *dspDeviceField; NSTextField *dspDeviceLabel; } - (OSSPreference *) _init; - (NSString *) dspDevice; @end #endif /* OSSPREFERENCE_H */ cynthiune.app-0.9.5/Bundles/OSS/OSSPreferences.gorm/0000755000175000017500000000000010413173130021474 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/OSS/OSSPreferences.gorm/data.classes0000644000175000017500000000052010406704136023771 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; FirstResponder = { Actions = ( "orderFrontFontPanel:", "setStream:" ); Super = NSObject; }; OSSPreferences = { Actions = ( ); Outlets = ( dspDeviceField, prefsWindow, dspDeviceLabel, dspBox ); Super = NSObject; }; }cynthiune.app-0.9.5/Bundles/OSS/OSSPreferences.gorm/objects.gorm0000644000175000017500000000507610406704136024033 0ustar gurkangurkanGNUstep archive00002b5e:0000001b:00000048:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%OSSPreferences0&%GSCustomClassMap0&0& % NSVisible01NSMutableArray1NSArray&0 &%Box0 1NSBox1 NSView1 NSResponder% A A  Cj B  Cj B&0 &0 % @ @ C\ B  C\ B&0 &01 NSTextField1 NSControl% A B A  B A&0&%01 NSTextFieldCell1 NSActionCell1NSCell0&%Filename01NSFont% A@&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0 % B A B A  B A&0&%0 0&0%&&&&&&&&0%00&%System0 &%textBackgroundColor0!0"& % textColor0#0$& % DSP Device$&&&&&&&& @ @%%0%& % TextField0&&%View 0'&%OSSPreferences0(1GSWindowTemplate1GSClassSwapper0)&%NSWindow1NSWindow%  C~ B&% Cn D 0* %  C~ B  C~ B&0+& 0,0-&%System0.&%windowBackgroundColor0/&%Window00&%Window01&%Window ? B F@ F@%021NSImage03&%NSApplicationIcon&   D D@04& %  TextField105&  061NSNibConnector'071NSNibOutletConnector'08& % prefsWindow090:&%Box0;0<&%View:0=4<0>0?& % TextField<0@?0A&%dspDeviceField0B40C&%dspDeviceLabel0D:0E&% dspBox0F?0G1NSMutableString&% delegate0H1 GSMutableSet1 NSMutableSet1NSSet&(cynthiune.app-0.9.5/Bundles/OSS/OSSPreferences.gorm/data.info0000644000175000017500000000027010406704136023271 0ustar gurkangurkanGNUstep archive00002b5e:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/Bundles/Taglib/0000755000175000017500000000000010413173130016441 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Taglib/GNUmakefile.preamble0000644000175000017500000000246510345610404022314 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ifeq (mingw32, $(GNUSTEP_TARGET_OS)) TAGLIB_CFLAGS = -I/MingW/include/taglib TAGLIB_LIBS = -ltag_c -ltag -lz -lstdc++ ADDITIONAL_GUI_LIBS += $(TAGLIB_LIBS) else TAGLIB_CFLAGS = $(shell taglib-config --cflags) TAGLIB_LIBS = $(shell taglib-config --libs) -ltag_c ADDITIONAL_LDFLAGS += $(TAGLIB_LIBS) endif ADDITIONAL_INCLUDE_DIRS += -I../.. $(TAGLIB_CFLAGS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Taglib/Taglib.h0000644000175000017500000000206510331330131020012 0ustar gurkangurkan/* Taglib.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Taglib_H #define Taglib_H #import #import @interface Taglib : NSObject { } @end #endif /* Taglib_H */ cynthiune.app-0.9.5/Bundles/Taglib/GNUmakefile0000644000175000017500000000314710315620424020524 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=Taglib BUNDLE_NAME=Taglib BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Taglib_PRINCIPAL_CLASS=Taglib # # Additional libraries # Taglib_LIBRARIES_DEPEND_UPON += # # Resource files # Taglib_RESOURCE_FILES= # # Header files # Taglib_HEADERS= \ Taglib.h # # Class files # Taglib_OBJC_FILES= \ Taglib.m # # C files # Taglib_C_FILES= # # C++ files # Taglib_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Taglib/Taglib.m0000644000175000017500000001017310331335431020026 0ustar gurkangurkan/* Taglib.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #define BOOL BOOL /* tag_c.h pollution */ #import #import "Taglib.h" #define LOCALIZED(X) _b ([Taglib class], X) #define makeTag(T) [[NSString stringWithUTF8String: T] stringByTrimmingSpaces] @implementation Taglib : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the tags of audio files"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { TagLib_File *file; TagLib_Tag *tag; unsigned int number; file = taglib_file_new ([filename cString]); if (file) { tag = taglib_file_tag (file); if (tag) { SET (*title, makeTag (taglib_tag_title (tag))); SET (*artist, makeTag (taglib_tag_artist (tag))); SET (*album, makeTag (taglib_tag_album (tag))); SET (*genre, makeTag (taglib_tag_genre (tag))); number = taglib_tag_track (tag); if (number) { SET (*trackNumber, ([NSString stringWithFormat: @"%d", number])); } number = taglib_tag_year (tag); if (number) { SET (*year, ([NSString stringWithFormat: @"%d", number])); } taglib_tag_free_strings(); } taglib_file_free (file); } return YES; } + (BOOL) setTitle: (NSString *) title artist: (NSString *) artist album: (NSString *) album trackNumber: (NSString *) trackNumber genre: (NSString *) genre year: (NSString *) year ofFilename: (NSString *) filename { TagLib_File *file; TagLib_Tag *tag; unsigned int number; file = taglib_file_new ([filename cString]); if (file) { tag = taglib_file_tag (file); if (tag) { if (title) taglib_tag_set_title (tag, [title UTF8String]); if (artist) taglib_tag_set_artist (tag, [artist UTF8String]); if (album) taglib_tag_set_album (tag, [album UTF8String]); if (genre) taglib_tag_set_genre (tag, [genre UTF8String]); if (trackNumber) { if ([trackNumber length]) { number = [trackNumber intValue]; if (number) taglib_tag_set_track (tag, number); } else taglib_tag_set_track (tag, 0); } if (year) { if ([year length]) { number = [year intValue]; if (number) taglib_tag_set_year (tag, number); } else taglib_tag_set_year (tag, 0); } taglib_file_save (file); } taglib_file_free (file); } return YES; } @end cynthiune.app-0.9.5/Bundles/FormatSkeleton/0000755000175000017500000000000010413173130020174 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/FormatSkeleton/GNUmakefile.preamble0000644000175000017500000000174610345610403024047 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # ADDITIONAL_LDFLAGS += ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/FormatSkeleton/Skeleton.m0000644000175000017500000000407710164725371022163 0ustar gurkangurkan/* $FORMAT$.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "$FORMAT$.h" #define LOCALIZED(X) _b ([$FORMAT$ class], X) @implementation $FORMAT$ : NSObject + (NSArray *) bundleClasses { return [NSArray arrayWithObject: [self class]]; } - (BOOL) streamOpen: (NSString *) fileName { return NO; } + (BOOL) canTestFileHeaders { return NO; } + (BOOL) streamTestOpen: (NSString *) fileName { return NO; } + (NSString *) errorText: (int) error { return @""; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { return 0; } - (int) lastError { return 0; } - (unsigned int) readChannels { return 0; } - (unsigned long) readRate { return 0; } - (unsigned int) readDuration { return 0; } - (NSString *) readTitle { return @""; } - (NSString *) readGenre { return @""; } - (NSString *) readArtist { return @""; } - (NSString *) readAlbum { return @""; } - (NSString *) readTrackNumber { return @""; } - (void) streamClose { } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: nil]; } - (BOOL) isSeekable { return NO; } - (void) seek: (unsigned int) aPos { } @end cynthiune.app-0.9.5/Bundles/FormatSkeleton/GNUmakefile0000644000175000017500000000320110224643553022255 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=$FORMAT$ BUNDLE_NAME=$FORMAT$ BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune $FORMAT$_PRINCIPAL_CLASS=$FORMAT$ # # Additional libraries # $FORMAT$_LIBRARIES_DEPEND_UPON += # # Resource files # $FORMAT$_RESOURCE_FILES= # # Header files # $FORMAT$_HEADERS= \ $FORMAT$.h # # Class files # $FORMAT$_OBJC_FILES= \ $FORMAT$.m # # C files # $FORMAT$_C_FILES= # # C++ files # $FORMAT$_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/FormatSkeleton/Skeleton.h0000644000175000017500000000175210164725371022153 0ustar gurkangurkan/* $FORMAT$.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef $FORMAT$_H #define $FORMAT$_H @interface $FORMAT$ : NSObject { } @end #endif /* $FORMAT$_H */ cynthiune.app-0.9.5/Bundles/ID3Tag/0000755000175000017500000000000010413173130016252 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/ID3Tag/ID3Tag.h0000644000175000017500000000236310410202745017444 0ustar gurkangurkan/* ID3Tag.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef ID3Tag_H #define ID3Tag_H #import #import typedef id3_ucs4_t Id3UCS4; typedef id3_utf8_t Id3UTF8; typedef union id3_field Id3Field; typedef struct id3_file Id3File; typedef struct id3_frame Id3Frame; typedef struct id3_tag Id3Tag; @interface ID3Tag : NSObject { } @end #endif /* ID3Tag_H */ cynthiune.app-0.9.5/Bundles/ID3Tag/GNUmakefile.preamble0000644000175000017500000000244410345610403022121 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ID3Tag_CFLAGS := -I/MinGW/include ID3Tag_LIBS := -lid3tag -lz ADDITIONAL_GUI_LIBS += $(ID3Tag_LIBS) else ID3Tag_CFLAGS := $(shell pkg-config id3tag --cflags) ID3Tag_LIBS := $(shell pkg-config id3tag --libs) ADDITIONAL_LDFLAGS += $(ID3Tag_LIBS) endif ADDITIONAL_INCLUDE_DIRS += -I../.. $(ID3Tag_CFLAGS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/ID3Tag/GNUmakefile0000644000175000017500000000314610315573334020343 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=ID3Tag BUNDLE_NAME=ID3Tag BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune ID3Tag_PRINCIPAL_CLASS=ID3Tag # # Additional libraries # ID3Tag_LIBRARIES_DEPEND_UPON += # # Resource files # ID3Tag_RESOURCE_FILES= # # Header files # ID3Tag_HEADERS= \ ID3Tag.h # # Class files # ID3Tag_OBJC_FILES= \ ID3Tag.m # # C files # ID3Tag_C_FILES= # # C++ files # ID3Tag_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/ID3Tag/ID3Tag.m0000644000175000017500000001454410410221205017445 0ustar gurkangurkan/* ID3Tag.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "ID3Tag.h" #define LOCALIZED(X) _b ([ID3Tag class], X) @interface NSString (ID3TagExtension) + (NSString *) stringWithUCS4String: (const Id3UCS4 *) ucs4Value; - (Id3UCS4 *) UCS4String; @end @implementation NSString (ID3TagExtension) + (NSString *) stringWithUCS4String: (const Id3UCS4 *) ucs4Value { NSString *newString; id3_utf8_t *UTF8String; UTF8String = id3_ucs4_utf8duplicate (ucs4Value); newString = [NSString stringWithUTF8String: (char *) UTF8String]; free (UTF8String); return newString; } - (Id3UCS4 *) UCS4String { return id3_utf8_ucs4duplicate ((Id3UTF8 *) [self UTF8String]); } @end @implementation ID3Tag : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the ID3 tags of audio files"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (NSString *) _readComment: (char *) commentTag fromTag: (Id3Tag *) id3Tag { NSString *comment; Id3Frame *id3Frame; Id3Field *field; const Id3UCS4 *string; comment = nil; id3Frame = id3_tag_findframe (id3Tag, commentTag, 0); if (id3Frame) { field = id3_frame_field (id3Frame, 1); if (field && id3_field_type (field) == ID3_FIELD_TYPE_STRINGLIST) { string = id3_field_getstrings (field, 0); if (string) { if (commentTag == ID3_FRAME_GENRE) string = id3_genre_name (string); comment = [NSString stringWithUCS4String: string]; } } } return comment; } + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { Id3File *id3File; Id3Tag *id3Tag; id3File = id3_file_open ([filename cString], ID3_FILE_MODE_READONLY); if (id3File) { id3Tag = id3_file_tag (id3File); if (id3Tag) { SET (*title, [self _readComment: ID3_FRAME_TITLE fromTag: id3Tag]); SET (*artist, [self _readComment: ID3_FRAME_ARTIST fromTag: id3Tag]); SET (*album, [self _readComment: ID3_FRAME_ALBUM fromTag: id3Tag]); SET (*trackNumber, [self _readComment: ID3_FRAME_TRACK fromTag: id3Tag]); SET (*genre, [self _readComment: ID3_FRAME_GENRE fromTag: id3Tag]); SET (*year, [self _readComment: ID3_FRAME_YEAR fromTag: id3Tag]); id3_tag_delete (id3Tag); } id3_file_close (id3File); } return YES; } + (Id3UCS4 *) _genreValue: (NSString *) genre { Id3UCS4 *genreName; int genreIndex; genreName = [genre UCS4String]; genreIndex = id3_genre_number (genreName); free (genreName); return [[NSString stringWithFormat: @"%d", genreIndex] UCS4String]; } + (unsigned int) _updateComment: (char *) comment to: (NSString *) value ofTag: (Id3Tag *) tag { Id3Frame *frame; Id3Field *field; Id3UCS4 *ucs4Value; unsigned int rc; rc = 0; if ([value length] > 0) { frame = id3_tag_findframe (tag, comment, 0); if (!frame) { frame = id3_frame_new (comment); id3_tag_attachframe (tag, frame); } field = id3_frame_field (frame, 1); field->type = ID3_FIELD_TYPE_STRINGLIST; // if (comment == ID3_FRAME_GENRE) // ucs4Value = [self _genreValue: value]; // else ucs4Value = [value UCS4String]; rc = id3_field_setstrings (field, 1, &ucs4Value); free (ucs4Value); } else while ((frame = id3_tag_findframe (tag, comment, 0)) && rc == 0) rc = id3_tag_detachframe (tag, frame); return rc; } + (BOOL) setTitle: (NSString *) title artist: (NSString *) artist album: (NSString *) album trackNumber: (NSString *) trackNumber genre: (NSString *) genre year: (NSString *) year ofFilename: (NSString *) filename { Id3File *id3File; Id3Tag *id3Tag; int rc; BOOL result; id3File = id3_file_open ([filename cString], ID3_FILE_MODE_READWRITE); if (id3File) { id3Tag = id3_file_tag (id3File); if (!id3Tag) { id3Tag = id3_tag_new (); id3_tag_clearframes (id3Tag); } rc = 0; if (title) rc += [self _updateComment: ID3_FRAME_TITLE to: title ofTag: id3Tag]; if (artist) rc += [self _updateComment: ID3_FRAME_ARTIST to: artist ofTag: id3Tag]; if (album) rc += [self _updateComment: ID3_FRAME_ALBUM to: album ofTag: id3Tag]; if (trackNumber) rc += [self _updateComment: ID3_FRAME_TRACK to: trackNumber ofTag: id3Tag]; if (genre) rc += [self _updateComment: ID3_FRAME_GENRE to: genre ofTag: id3Tag]; if (year) rc += [self _updateComment: ID3_FRAME_YEAR to: year ofTag: id3Tag]; if (rc == 0) result = (id3_file_update (id3File) == 0); else result = NO; id3_file_close (id3File); } else result = NO; return result; } @end cynthiune.app-0.9.5/Bundles/GraphWriter/0000755000175000017500000000000010252621610017477 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/GraphWriter/GNUmakefile.preamble0000644000175000017500000000215510154771151023351 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ESD_CFLAGS := $(shell esd-config --cflags) ESD_LIBS := $(shell esd-config --libs) ADDITIONAL_INCLUDE_DIRS += -I../.. $(ESD_CFLAGS) ADDITIONAL_LDFLAGS += -I../.. $(ESD_LIBS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/GraphWriter/GraphWriter.m0000644000175000017500000000646410166606374022143 0ustar gurkangurkan/* GraphWriter.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import #import #import "GraphWriter.h" #define LOCALIZED(X) _b ([GraphWriter class], X) @implementation GraphWriter : NSObject - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } + (NSArray *) bundleClasses { return [NSArray arrayWithObject: [self class]]; } - (id) init { if ((self = [super init])) { buffer = NULL; bufferLen = 0; remaining = 0; position = NULL; stamp = 0.0; } return self; } - (BOOL) openDevice { return YES; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { channels = numberOfChannels; rate = sampleRate; if (buffer) free (buffer); bufferLen = sizeof (short) * numberOfChannels * numberOfSeconds * sampleRate; // NSLog (@"bufferLen = %d bytes", bufferLen); remaining = bufferLen; buffer = malloc (bufferLen); position = (char *) buffer; return YES; } - (void) playChunk: (NSData *) chunk { unsigned int length; const char *sourcePtr; if (remaining > 0) { sourcePtr = [chunk bytes]; length = [chunk length]; if (remaining < length) length = remaining; memcpy (position, sourcePtr, length); remaining -= length; position += length; } [NSTimer scheduledTimerWithTimeInterval: 0.001 target: parentPlayer selector: @selector (chunkFinishedPlaying) userInfo: nil repeats: NO]; // [parentPlayer chunkFinishedPlaying]; } - (void) _writeBuffer { unsigned int counter; signed short *sample; FILE *graphFile; graphFile = fopen (graphFilename, "w+b"); if (graphFile) { for (counter = 0; counter < numberOfSeconds * rate * channels; counter += channels) { sample = buffer + counter; if (channels == 1) fprintf (graphFile, "%d,%d\n", counter, *sample); else fprintf (graphFile, "%d,%d,%d\n", (counter / 2), *sample, *(sample + 1)); } fclose (graphFile); } else NSLog (@"fopen returned null: %s", strerror (errno)); } - (void) closeDevice { if (buffer) { [self _writeBuffer]; free (buffer); buffer = NULL; } } @end cynthiune.app-0.9.5/Bundles/GraphWriter/GraphWriter.h0000644000175000017500000000243010166605151022113 0ustar gurkangurkan/* GraphWriter.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef GraphWriter_H #define GraphWriter_H /* number of seconds to save */ #define numberOfSeconds 5 #define graphFilename "/tmp/Cynthiune.csv" @interface GraphWriter : NSObject { id parentPlayer; int rate; int channels; unsigned int stamp; short *buffer; char *position; unsigned int bufferLen; unsigned int remaining; unsigned int dataSize; } @end #endif /* GraphWriter_H */ cynthiune.app-0.9.5/Bundles/GraphWriter/GNUmakefile0000644000175000017500000000326610224643156021570 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=GraphWriter BUNDLE_NAME=GraphWriter BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune GraphWriter_PRINCIPAL_CLASS=GraphWriter GraphWriter_LANGUAGES= GraphWriter_LOCALIZED_RESOURCE_FILES= # # Additional libraries # GraphWriter_LIBRARIES_DEPEND_UPON += # # Resource files # GraphWriter_RESOURCE_FILES= # # Header files # GraphWriter_HEADERS= \ GraphWriter.h # # Class files # GraphWriter_OBJC_FILES= \ GraphWriter.m # # C files # GraphWriter_C_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/TagsSkeleton/0000755000175000017500000000000010413173130017642 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/TagsSkeleton/GNUmakefile.preamble0000644000175000017500000000174610407756076023535 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2006 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # ADDITIONAL_LDFLAGS += ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/TagsSkeleton/Skeleton.m0000644000175000017500000000347510407756055021635 0ustar gurkangurkan/* $TAGS$.m - this file is part of Cynthiune * * Copyright (C) 2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import "$TAGS$.h" #define LOCALIZED(X) _b ([$TAGS$ class], X) @implementation $TAGS$ : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the tags of audio files"; } + (NSArray *) bundleCopyrightStrings { return @"Copyright (C) 2005 Joe Taghacker"; } /* TagsReading protocol */ + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { return NO; } /* TagsWriting protocol */ + (BOOL) setTitle: (NSString *) title artist: (NSString *) artist album: (NSString *) album trackNumber: (NSString *) trackNumber genre: (NSString *) genre year: (NSString *) year ofFilename: (NSString *) filename { return NO; } @end cynthiune.app-0.9.5/Bundles/TagsSkeleton/GNUmakefile0000644000175000017500000000314710407756070021736 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2006 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=$TAGS$ BUNDLE_NAME=$TAGS$ BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune $TAGS$_PRINCIPAL_CLASS=$TAGS$ # # Additional libraries # $TAGS$_LIBRARIES_DEPEND_UPON += # # Resource files # $TAGS$_RESOURCE_FILES= # # Header files # $TAGS$_HEADERS= \ $TAGS$.h # # Class files # $TAGS$_OBJC_FILES= \ $TAGS$.m # # C files # $TAGS$_C_FILES= # # C++ files # $TAGS$_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/TagsSkeleton/Skeleton.h0000644000175000017500000000206410407756102021612 0ustar gurkangurkan/* $TAGS$.h - this file is part of Cynthiune * * Copyright (C) 2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef $TAGS$_H #define $TAGS$_H #import #import @interface $TAGS$ : NSObject { } @end #endif /* $TAGS$_H */ cynthiune.app-0.9.5/Bundles/WindowsMedia/0000755000175000017500000000000010413173130017631 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/WindowsMedia/WindowsMedia.m0000644000175000017500000000757410316104135022417 0ustar gurkangurkan/* WindowsMedia.m - this file is part of Cynthiune * * Copyright (C) 2004, 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "WindowsMedia.h" #define LOCALIZED(X) _b ([WindowsMedia class], X) @implementation WindowsMedia : NSObject + (NSString *) bundleDescription { return @"Extension plug-in for the ASF/WMA audio formats"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2004 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return [NSArray arrayWithObjects: @"ASFTags", nil]; } - (id) init { if ((self = [super init])) { file = NULL; stream = NULL; frameBuffer = NULL; framePtr = NULL; frameSize = 0; remaining = 0; channels = 0; rate = 0; duration = 0; } return self; } - (BOOL) streamOpen: (NSString *) fileName { BOOL result; result = NO; file = WMFileOpen ([fileName cString]); if (file) { stream = WMFileGetAudioStream (file); if (stream) { WMStreamGetInfos (stream, &channels, &rate, &duration); WMStreamStartStreaming (stream); result = YES; } else { WMFileClose (file); file = NULL; } } return result; } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { WMFile *testFile; BOOL result; result = NO; testFile = WMFileOpen ([fileName cString]); if (testFile) { result = (WMFileAudioStreamCount (testFile) && WMFileGetAudioStream (testFile)); WMFileClose (testFile); } return result; } + (NSString *) errorText: (int) error { return @""; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int result; unsigned int bytes, readBytes, readSamples; if (!remaining) { if (frameBuffer) free (frameBuffer); frameSize = WMStreamGetFrameSize (stream); frameBuffer = malloc (frameSize); framePtr = frameBuffer; result = WMStreamReadFrames (stream, frameBuffer, frameSize, frameSize, &readSamples, &readBytes); remaining = ((result > -1) ? readBytes : 0); } bytes = ((bufferSize < remaining) ? bufferSize : remaining); memcpy (buffer, framePtr, bytes); framePtr += bytes; remaining -= bytes; return bytes; } - (int) lastError { return 0; } - (unsigned int) readChannels { return channels; } - (unsigned long) readRate { return rate; } - (unsigned int) readDuration { return duration; } - (void) streamClose { WMStreamStopStreaming (stream); if (frameBuffer) free (frameBuffer); if (stream) WMStreamClose (stream); if (file) WMFileClose (file); } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"asf", @"wma", nil]; } - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { WMStreamSeekTime (stream, aPos); } @end cynthiune.app-0.9.5/Bundles/WindowsMedia/GNUmakefile.preamble0000644000175000017500000000221410345610404023474 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. AVIFILE_CFLAGS := $(shell avifile-config --cflags) AVIFILE_LIBS := $(shell avifile-config --libs) ADDITIONAL_INCLUDE_DIRS += -I../.. $(AVIFILE_CFLAGS) ADDITIONAL_LDFLAGS += $(AVIFILE_LIBS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/WindowsMedia/WindowsMedia.h0000644000175000017500000000254110316104142022375 0ustar gurkangurkan/* WindowsMedia.h - this file is part of Cynthiune * * Copyright (C) 2004, 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef WINDOWSMEDIA_H #define WINDOWSMEDIA_H #define BUFFER_SIZE 8192 #import #import #import #import "CWMFile.h" @interface WindowsMedia : NSObject { WMFile *file; WMStream *stream; unsigned int frameSize; char *frameBuffer; char *framePtr; unsigned int remaining; unsigned int channels; unsigned long rate; unsigned int duration; } @end #endif /* WINDOWSMEDIA_H */ cynthiune.app-0.9.5/Bundles/WindowsMedia/GNUmakefile0000644000175000017500000000327010250646204021713 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004, 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=WindowsMedia BUNDLE_NAME=WindowsMedia BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune WindowsMedia_PRINCIPAL_CLASS=WindowsMedia # # Additional libraries # WindowsMedia_LIBRARIES_DEPEND_UPON += # # Resource files # WindowsMedia_RESOURCE_FILES= # # Header files # WindowsMedia_HEADERS= \ CWMFile.h \ ASFMetaData.h \ WindowsMedia.h # # Class files # WindowsMedia_OBJC_FILES= \ WindowsMedia.m # # C++ files # WindowsMedia_CC_FILES= \ CWMFile.cpp ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/WindowsMedia/CWMFile.h0000644000175000017500000000361010160132220021222 0ustar gurkangurkan/* CWMFile.h - this file is part of $PROJECT_NAME_HERE$ * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CWMFILE_H #define CWMFILE_H typedef void **WMFile; typedef void **WMStream; #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ WMFile *WMFileOpen (const char *filename); void WMFileClose (WMFile *wmFile); unsigned int WMFileAudioStreamCount (WMFile *); WMStream *WMFileGetAudioStream (WMFile *file); void WMStreamClose (WMStream *stream); void WMStreamStartStreaming (WMStream *stream); void WMStreamStopStreaming (WMStream *stream); unsigned int WMStreamGetFrameSize (WMStream *stream); void WMStreamGetInfos (WMStream *stream, unsigned int *channels, unsigned long *rate, unsigned int *duration); int WMStreamReadFrames (WMStream *stream, void *buffer, unsigned int bufferSize, unsigned int samples, unsigned *samplesRead, unsigned int *bytesRead); void WMStreamSeekTime (WMStream *stream, unsigned int position); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* CWMFILE_H */ cynthiune.app-0.9.5/Bundles/WindowsMedia/CWMFile.cpp0000644000175000017500000000760710160132220021567 0ustar gurkangurkan/* CWMFile.cpp - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NULL #define NULL 0 #endif #include #include #include "CWMFile.h" static bool _testASFHeaders (const char *filename) { std::fstream *_f; unsigned long header; bool result; result = false; _f = new std::fstream (filename, std::ios::in); if (_f) { _f->read ((char*) &header, 4); #if (BYTE_ORDER == __LITTLE_ENDIAN) result = (header == 0x75b22630); #else result = (header == 0x3026b275); #endif delete _f; } return result; } WMFile * WMFileOpen (const char *filename) { return ((_testASFHeaders (filename)) ? (WMFile *) avm::CreateReadFile (filename) : NULL); } void WMFileClose (WMFile *file) { delete ((avm::IReadFile *) file); } unsigned int WMFileAudioStreamCount (WMFile *file) { avm::IReadFile *readFile; readFile = (avm::IReadFile *) file; return readFile->AudioStreamCount (); } WMStream * WMFileGetAudioStream (WMFile *file) { avm::IReadFile *readFile; readFile = (avm::IReadFile *) file; return ((WMStream *) readFile->GetStream (0, avm::IReadStream::Audio)); } void WMStreamClose (WMStream *stream) { } void WMStreamStartStreaming (WMStream *stream) { avm::IReadStream *readStream; readStream = (avm::IReadStream *) stream; readStream->StartStreaming (); } void WMStreamStopStreaming (WMStream *stream) { avm::IReadStream *readStream; readStream = (avm::IReadStream *) stream; readStream->StopStreaming (); } unsigned int WMStreamGetFrameSize (WMStream *stream) { avm::IReadStream *readStream; readStream = (avm::IReadStream *) stream; return readStream->GetFrameSize (); } void WMStreamGetInfos (WMStream *stream, unsigned int *channels, unsigned long *rate, unsigned int *duration) { avm::IReadStream *readStream; StreamInfo *streamInfo; readStream = (avm::IReadStream *) stream; streamInfo = readStream->GetStreamInfo (); if (channels) *channels = (unsigned int) streamInfo->GetAudioChannels (); if (rate) *rate = (unsigned long) streamInfo->GetAudioSamplesPerSec (); if (duration) *duration = (unsigned int) streamInfo->GetLengthTime (); } int WMStreamReadFrames (WMStream *stream, void *buffer, unsigned int bufferSize, unsigned int samples, unsigned int *samplesRead, unsigned int *bytesRead) { unsigned int _samplesRead, _bytesRead; avm::IReadStream *readStream; int result, eof; _samplesRead = 0; _bytesRead = 0; result = 0; eof = 0; readStream = (avm::IReadStream *) stream; while (!result && !_bytesRead) result = ((readStream->Eof ()) ? -1 : readStream->ReadFrames (buffer, bufferSize, bufferSize, _samplesRead, _bytesRead)); *samplesRead = _samplesRead; *bytesRead = _bytesRead; return result; } void WMStreamSeekTime (WMStream *stream, unsigned int position) { avm::IReadStream *readStream; readStream = (avm::IReadStream *) stream; readStream->SeekTime ((double) position); } cynthiune.app-0.9.5/Bundles/FLACTags/0000755000175000017500000000000010413173130016563 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/FLACTags/FLACTags.m0000644000175000017500000001136010410071360020265 0ustar gurkangurkan/* FLACTags.m - this file is part of Cynthiune * * Copyright (C) 2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE 1 #import #import #import #import #import #import #import "FLACTags.h" #define LOCALIZED(X) _b ([FLACTags class], X) static inline int keyPositionInArray (const char *key) { unsigned int count; signed int result, len; const char *keys[] = { "title", "artist", "album", "tracknumber", "genre", "date" }; result = -1; count = 0; while (count < 6 && result == -1) { len = strlen (keys[count]); if (strncasecmp (keys[count], key, len) == 0) result = count; else count++; } return result; } static inline void processComment (FLAC__StreamMetadata_VorbisComment_Entry *vcEntry, NSString **arrayOfValues[]) { char *key, *value, *equalsign; signed int position; key = strndup ((char *) vcEntry->entry, vcEntry->length); equalsign = strchr (key, '='); if (equalsign) { *equalsign = 0; value = equalsign + 1; position = keyPositionInArray (key); if (position > -1) SET (*arrayOfValues[position], [NSString stringWithUTF8String: value]); } free (key); } static FLAC__StreamDecoderWriteStatus writeCallback (const FLAC__FileDecoder *fileDecoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *clientData) { return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } static void metadataCallback (const FLAC__FileDecoder *fileDecoder, const FLAC__StreamMetadata *metadata, void *clientData) { unsigned int count; if (metadata->type == FLAC__METADATA_TYPE_VORBIS_COMMENT) { count = 0; while (count < metadata->data.vorbis_comment.num_comments) { processComment (metadata->data.vorbis_comment.comments + count, clientData); count++; } } } static void errorCallback (const FLAC__FileDecoder *fileDecoder, FLAC__StreamDecoderErrorStatus status, void *clientData) { NSLog (@"FLACTags: received error with status %d", status); } @implementation FLACTags : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the tags of FLAC files"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObject: @"Copyright (C) 2006 Wolfgang Sourdeau"]; } /* TagsReading protocol */ + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { FLAC__FileDecoder *fileDecoder; BOOL result; NSString **arrayOfValues[] = { title, artist, album, trackNumber, genre, year }; fileDecoder = FLAC__file_decoder_new(); if (fileDecoder) { FLAC__file_decoder_set_metadata_ignore_all (fileDecoder); FLAC__file_decoder_set_metadata_respond (fileDecoder, FLAC__METADATA_TYPE_VORBIS_COMMENT); FLAC__file_decoder_set_metadata_callback (fileDecoder, metadataCallback); FLAC__file_decoder_set_write_callback (fileDecoder, writeCallback); FLAC__file_decoder_set_error_callback (fileDecoder, errorCallback); FLAC__file_decoder_set_client_data (fileDecoder, arrayOfValues); result = (FLAC__file_decoder_set_filename (fileDecoder, [filename cString]) && (FLAC__file_decoder_init (fileDecoder) == FLAC__FILE_DECODER_OK) && FLAC__file_decoder_process_until_end_of_metadata (fileDecoder)); FLAC__file_decoder_delete (fileDecoder); } else result = NO; return result; } @end cynthiune.app-0.9.5/Bundles/FLACTags/GNUmakefile.preamble0000644000175000017500000000217610407750760022446 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2006 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_INCLUDE_DIRS += -I../.. FLAC_LIBS := -lFLAC ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(FLAC_LIBS) else ADDITIONAL_LDFLAGS += $(FLAC_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/FLACTags/GNUmakefile0000644000175000017500000000317710407745164020664 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2006 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=FLACTags BUNDLE_NAME=FLACTags BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune FLACTags_PRINCIPAL_CLASS=FLACTags # # Additional libraries # FLACTags_LIBRARIES_DEPEND_UPON += # # Resource files # FLACTags_RESOURCE_FILES= # # Header files # FLACTags_HEADERS= \ FLACTags.h # # Class files # FLACTags_OBJC_FILES= \ FLACTags.m # # C files # FLACTags_C_FILES= # # C++ files # FLACTags_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/FLACTags/FLACTags.h0000644000175000017500000000212210407746554020300 0ustar gurkangurkan/* FLACTags.h - this file is part of Cynthiune * * Copyright (C) 2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef FLACTags_H #define FLACTags_H #import #import #import @interface FLACTags : NSObject { } @end #endif /* FLACTags_H */ cynthiune.app-0.9.5/Bundles/VorbisTags/0000755000175000017500000000000010413173130017322 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/VorbisTags/GNUmakefile.preamble0000644000175000017500000000220110345610404023161 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. VORBIS_LIBS := -lvorbisenc -lvorbisfile -lvorbis -logg ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(VORBIS_LIBS) else ADDITIONAL_LDFLAGS += $(VORBIS_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/VorbisTags/vcedit.c0000644000175000017500000002467510375474441021002 0ustar gurkangurkan// slightly modified by Yen-Ju Chen /* This program is licensed under the GNU Library General Public License, version 2, * a copy of which is included with this program (LICENCE.LGPL). * * (c) 2000-2001 Michael Smith * * * Comment editing backend, suitable for use by nice frontend interfaces. * * last modified: $Id: vcedit.c,v 1.1 2006/02/18 01:32:17 wolfgang Exp $ */ #include #include "vcedit.h" #define CHUNKSIZE 4096 vcedit_state *vcedit_new_state(void) { vcedit_state *state = malloc(sizeof(vcedit_state)); memset(state, 0, sizeof(vcedit_state)); return state; } vorbis_comment *vcedit_comments(vcedit_state *state) { return state->vc; } static void vcedit_clear_internals(vcedit_state *state) { if(state->vc) { vorbis_comment_clear(state->vc); free(state->vc); } if(state->os) { ogg_stream_clear(state->os); free(state->os); } if(state->oy) { ogg_sync_clear(state->oy); free(state->oy); } if(state->vendor) free(state->vendor); if(state->mainbuf) free(state->mainbuf); if(state->bookbuf) free(state->bookbuf); if(state->vi) { vorbis_info_clear(state->vi); free(state->vi); } memset(state, 0, sizeof(*state)); } void vcedit_clear(vcedit_state *state) { if(state) { vcedit_clear_internals(state); free(state); } } /* Next two functions pulled straight from libvorbis, apart from one change * - we don't want to overwrite the vendor string. */ static void _v_writestring(oggpack_buffer *o,char *s, int len) { while(len--) { oggpack_write(o,*s++,8); } } static int _commentheader_out(vorbis_comment *vc, char *vendor, ogg_packet *op) { oggpack_buffer opb; oggpack_writeinit(&opb); /* preamble */ oggpack_write(&opb,0x03,8); _v_writestring(&opb,"vorbis", 6); /* vendor */ oggpack_write(&opb,strlen(vendor),32); _v_writestring(&opb,vendor, strlen(vendor)); /* comments */ oggpack_write(&opb,vc->comments,32); if(vc->comments){ int i; for(i=0;icomments;i++){ if(vc->user_comments[i]){ oggpack_write(&opb,vc->comment_lengths[i],32); _v_writestring(&opb,vc->user_comments[i], vc->comment_lengths[i]); }else{ oggpack_write(&opb,0,32); } } } oggpack_write(&opb,1,1); op->packet = _ogg_malloc(oggpack_bytes(&opb)); memcpy(op->packet, opb.buffer, oggpack_bytes(&opb)); op->bytes=oggpack_bytes(&opb); op->b_o_s=0; op->e_o_s=0; op->granulepos=0; oggpack_writeclear(&opb); return 0; } static int _blocksize(vcedit_state *s, ogg_packet *p) { int this = vorbis_packet_blocksize(s->vi, p); int ret = (this + s->prevW)/4; if(!s->prevW) { s->prevW = this; return 0; } s->prevW = this; return ret; } static int _fetch_next_packet(vcedit_state *s, ogg_packet *p, ogg_page *page) { int result; char *buffer; int bytes; result = ogg_stream_packetout(s->os, p); if(result > 0) return 1; else { if(s->eosin) return 0; while(ogg_sync_pageout(s->oy, page) <= 0) { buffer = ogg_sync_buffer(s->oy, CHUNKSIZE); bytes = s->read(buffer,1, CHUNKSIZE, s->in); ogg_sync_wrote(s->oy, bytes); if(bytes == 0) return 0; } if(ogg_page_eos(page)) s->eosin = 1; else if(ogg_page_serialno(page) != s->serial) { s->eosin = 1; s->extrapage = 1; return 0; } ogg_stream_pagein(s->os, page); return _fetch_next_packet(s, p, page); } } int vcedit_open(vcedit_state *state, FILE *in) { return vcedit_open_callbacks(state, (void *)in, (vcedit_read_func)fread, (vcedit_write_func)fwrite); } int vcedit_open_callbacks(vcedit_state *state, void *in, vcedit_read_func read_func, vcedit_write_func write_func) { char *buffer; int bytes,i; ogg_packet *header; ogg_packet header_main; ogg_packet header_comments; ogg_packet header_codebooks; ogg_page og; state->in = in; state->read = read_func; state->write = write_func; state->oy = malloc(sizeof(ogg_sync_state)); ogg_sync_init(state->oy); buffer = ogg_sync_buffer(state->oy, CHUNKSIZE); bytes = state->read(buffer, 1, CHUNKSIZE, state->in); ogg_sync_wrote(state->oy, bytes); if(ogg_sync_pageout(state->oy, &og) != 1) { if(bytesserial = ogg_page_serialno(&og); state->os = malloc(sizeof(ogg_stream_state)); ogg_stream_init(state->os, state->serial); state->vi = malloc(sizeof(vorbis_info)); vorbis_info_init(state->vi); state->vc = malloc(sizeof(vorbis_comment)); vorbis_comment_init(state->vc); if(ogg_stream_pagein(state->os, &og) < 0) { printf("Error reading first page of Ogg bitstream."); goto err; } if(ogg_stream_packetout(state->os, &header_main) != 1) { printf("Error reading initial header packet."); goto err; } if(vorbis_synthesis_headerin(state->vi, state->vc, &header_main) < 0) { printf("OGG bitstream does not contain vorbis data."); goto err; } state->mainlen = header_main.bytes; state->mainbuf = malloc(state->mainlen); memcpy(state->mainbuf, header_main.packet, header_main.bytes); i = 0; header = &header_comments; while(i<2) { while(i<2) { int result = ogg_sync_pageout(state->oy, &og); if(result == 0) break; /* Too little data so far */ else if(result == 1) { ogg_stream_pagein(state->os, &og); while(i<2) { result = ogg_stream_packetout(state->os, header); if(result == 0) break; if(result == -1) { printf("Corrupt secondary header."); goto err; } vorbis_synthesis_headerin(state->vi, state->vc, header); if(i==1) { state->booklen = header->bytes; state->bookbuf = malloc(state->booklen); memcpy(state->bookbuf, header->packet, header->bytes); } i++; header = &header_codebooks; } } } buffer = ogg_sync_buffer(state->oy, CHUNKSIZE); bytes = state->read(buffer, 1, CHUNKSIZE, state->in); if(bytes == 0 && i < 2) { printf("EOF before end of vorbis headers."); goto err; } ogg_sync_wrote(state->oy, bytes); } /* Copy the vendor tag */ state->vendor = malloc(strlen(state->vc->vendor) +1); strcpy(state->vendor, state->vc->vendor); /* Headers are done! */ return 0; err: vcedit_clear_internals(state); return -1; } int vcedit_write(vcedit_state *state, void *out) { ogg_stream_state streamout; ogg_packet header_main; ogg_packet header_comments; ogg_packet header_codebooks; ogg_page ogout, ogin; ogg_packet op; ogg_int64_t granpos = 0; int result; char *buffer; int bytes; int needflush=0, needout=0; state->eosin = 0; state->extrapage = 0; header_main.bytes = state->mainlen; header_main.packet = state->mainbuf; header_main.b_o_s = 1; header_main.e_o_s = 0; header_main.granulepos = 0; header_codebooks.bytes = state->booklen; header_codebooks.packet = state->bookbuf; header_codebooks.b_o_s = 0; header_codebooks.e_o_s = 0; header_codebooks.granulepos = 0; ogg_stream_init(&streamout, state->serial); _commentheader_out(state->vc, state->vendor, &header_comments); ogg_stream_packetin(&streamout, &header_main); ogg_stream_packetin(&streamout, &header_comments); ogg_stream_packetin(&streamout, &header_codebooks); while((result = ogg_stream_flush(&streamout, &ogout))) { if(state->write(ogout.header,1,ogout.header_len, out) != (size_t) ogout.header_len) goto cleanup; if(state->write(ogout.body,1,ogout.body_len, out) != (size_t) ogout.body_len) goto cleanup; } while(_fetch_next_packet(state, &op, &ogin)) { int size; size = _blocksize(state, &op); granpos += size; if(needflush) { if(ogg_stream_flush(&streamout, &ogout)) { if(state->write(ogout.header,1,ogout.header_len, out) != (size_t) ogout.header_len) goto cleanup; if(state->write(ogout.body,1,ogout.body_len, out) != (size_t) ogout.body_len) goto cleanup; } } else if(needout) { if(ogg_stream_pageout(&streamout, &ogout)) { if(state->write(ogout.header,1,ogout.header_len, out) != (size_t) ogout.header_len) goto cleanup; if(state->write(ogout.body,1,ogout.body_len, out) != (size_t) ogout.body_len) goto cleanup; } } needflush=needout=0; if(op.granulepos == -1) { op.granulepos = granpos; ogg_stream_packetin(&streamout, &op); } else /* granulepos is set, validly. Use it, and force a flush to account for shortened blocks (vcut) when appropriate */ { if(granpos > op.granulepos) { granpos = op.granulepos; ogg_stream_packetin(&streamout, &op); needflush=1; } else { ogg_stream_packetin(&streamout, &op); needout=1; } } } streamout.e_o_s = 1; while(ogg_stream_flush(&streamout, &ogout)) { if(state->write(ogout.header,1,ogout.header_len, out) != (size_t) ogout.header_len) goto cleanup; if(state->write(ogout.body,1,ogout.body_len, out) != (size_t) ogout.body_len) goto cleanup; } if (state->extrapage) { if(state->write(ogin.header,1,ogin.header_len, out) != (size_t) ogin.header_len) goto cleanup; if (state->write(ogin.body,1,ogin.body_len, out) != (size_t) ogin.body_len) goto cleanup; } state->eosin=0; /* clear it, because not all paths to here do */ while(!state->eosin) /* We reached eos, not eof */ { /* We copy the rest of the stream (other logical streams) * through, a page at a time. */ while(1) { result = ogg_sync_pageout(state->oy, &ogout); if(result==0) break; if(result<0) printf("Corrupt or missing data, continuing..."); else { /* Don't bother going through the rest, we can just * write the page out now */ if(state->write(ogout.header,1,ogout.header_len, out) != (size_t) ogout.header_len) { fprintf(stderr, "Bumming out\n"); goto cleanup; } if(state->write(ogout.body,1,ogout.body_len, out) != (size_t) ogout.body_len) { fprintf(stderr, "Bumming out 2\n"); goto cleanup; } } } buffer = ogg_sync_buffer(state->oy, CHUNKSIZE); bytes = state->read(buffer,1, CHUNKSIZE, state->in); ogg_sync_wrote(state->oy, bytes); if(bytes == 0) { state->eosin = 1; break; } } cleanup: ogg_stream_clear(&streamout); ogg_packet_clear(&header_comments); free(state->mainbuf); free(state->bookbuf); state->mainbuf = state->bookbuf = NULL; if(!state->eosin) { printf("Error writing stream to output. Output stream may be corrupted or truncated."); return -1; } return 0; } cynthiune.app-0.9.5/Bundles/VorbisTags/GNUmakefile0000644000175000017500000000325310375436533021417 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=VorbisTags BUNDLE_NAME=VorbisTags BUNDLE_EXTENSION=.tags BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune VorbisTags_PRINCIPAL_CLASS=VorbisTags # # Additional libraries # VorbisTags_LIBRARIES_DEPEND_UPON += # # Resource files # VorbisTags_RESOURCE_FILES= # # Header files # VorbisTags_HEADERS= \ VorbisTags.h \ vcedit.h # # Class files # VorbisTags_OBJC_FILES= \ VorbisTags.m # # C files # VorbisTags_C_FILES= \ vcedit.c # # C++ files # VorbisTags_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/VorbisTags/VorbisTags.m0000644000175000017500000001520410404472211021567 0ustar gurkangurkan/* VorbisTags.m - this file is part of Cynthiune * * Copyright (C) 2005, 2006 Wolfgang Sourdeau * * Portions Copyright (C) 2002 Yen-Ju * Copyright (C) ???? Rob Burns * Those portions were taken from the Poe vorbis editor's OGGEdit class * and adapted to fit the TagsWriting Cynthiune formal protocol. * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "VorbisTags.h" #import "vcedit.h" #define LOCALIZED(X) _b ([VorbisTags class], X) static size_t oggReadFunc (void *ptr, size_t size, size_t nmemb, void *datasource) { NSFileHandle *fileHandle; NSData *data; size_t length; fileHandle = datasource; data = [fileHandle readDataOfLength: size * nmemb]; length = [data length]; memcpy (ptr, [data bytes], length); return length; } static int oggSeekFunc (void *datasource, ogg_int64_t offset, int whence) { NSFileHandle *fileHandle; unsigned long long realOffset; fileHandle = datasource; switch (whence) { case SEEK_SET: realOffset = offset; break; case SEEK_CUR: realOffset = [fileHandle offsetInFile] + offset; break; case SEEK_END: realOffset = [fileHandle seekToEndOfFile] + offset; break; default: NSLog (@"unrecognize value for whence: %d", whence); realOffset = [fileHandle offsetInFile]; } [fileHandle seekToFileOffset: realOffset]; return 0; } static int oggCloseFunc (void *datasource) { NSFileHandle *fileHandle; fileHandle = datasource; [fileHandle closeFile]; return 0; } static long oggTellFunc (void *datasource) { NSFileHandle *fileHandle; fileHandle = datasource; return [fileHandle offsetInFile]; } static ov_callbacks oggCallbacks = { oggReadFunc, oggSeekFunc, oggCloseFunc, oggTellFunc }; @implementation VorbisTags : NSObject + (NSString *) bundleDescription { return @"A bundle to read/set the tags of Vorbis files"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (void) _setString: (NSString **) string toComment: (char*) comment fromOvFile: (OggVorbis_File *) ovFile { const char *cComment; vorbis_comment *vComment; char **cPointer; BOOL found = NO; int len; vComment = ov_comment (ovFile, -1); if (vComment) { cPointer = vComment->user_comments; cComment = *cPointer; len = strlen (comment); while (cComment && !found) { if (strncasecmp (comment, cComment, len) == 0) { cComment += len + 1; found = YES; } else { cPointer++; cComment = *cPointer; } } if (cComment) SET (*string, [NSString stringWithUTF8String: cComment]); } } + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename { NSFileHandle *fileHandle; OggVorbis_File *ovFile; BOOL result; result = NO; fileHandle = [NSFileHandle fileHandleForReadingAtPath: filename]; if (fileHandle) { ovFile = calloc (sizeof (OggVorbis_File), 1); ov_open_callbacks (fileHandle, ovFile, NULL, 0L, oggCallbacks); [self _setString: title toComment: "title" fromOvFile: ovFile]; [self _setString: artist toComment: "artist" fromOvFile: ovFile]; [self _setString: album toComment: "album" fromOvFile: ovFile]; [self _setString: trackNumber toComment: "tracknumber" fromOvFile: ovFile]; [self _setString: genre toComment: "genre" fromOvFile: ovFile]; [self _setString: year toComment: "date" fromOvFile: ovFile]; ov_clear (ovFile); } return result; } + (BOOL) setTitle: (NSString *) title artist: (NSString *) artist album: (NSString *) album trackNumber: (NSString *) trackNumber genre: (NSString *) genre year: (NSString *) year ofFilename: (NSString *) filename; { FILE *in, *out; vcedit_state *state; vorbis_comment *vc; NSString *newfile; BOOL result; NSFileManager *fm; fm = [NSFileManager defaultManager]; result = NO; in = fopen ([filename cString], "rb"); if (in) { fseek (in, 0L, SEEK_SET); state = vcedit_new_state (); if (vcedit_open (state, in) >= 0) { vc = vcedit_comments(state); vorbis_comment_clear (vc); vorbis_comment_init (vc); if (title) vorbis_comment_add_tag (vc, "title", (char *) [title UTF8String]); if (artist) vorbis_comment_add_tag (vc, "artist", (char *) [artist UTF8String]); if (album) vorbis_comment_add_tag (vc, "album", (char *) [album UTF8String]); if (trackNumber) vorbis_comment_add_tag (vc, "tracknumber", (char *) [trackNumber UTF8String]); if (genre) vorbis_comment_add_tag (vc, "genre", (char *) [genre UTF8String]); if (year) vorbis_comment_add_tag (vc, "date", (char *) [year UTF8String]); newfile = [filename stringByAppendingString: @"_temp"]; out = fopen([newfile cString], "wb+"); if (out) { if (vcedit_write (state, out) >= 0) { fclose (out); [fm removeFileAtPath: filename handler: nil]; [fm movePath: newfile toPath: filename handler: nil]; result = YES; } } vorbis_comment_clear (vc); } vcedit_clear (state); } return result; } @end cynthiune.app-0.9.5/Bundles/VorbisTags/VorbisTags.h0000644000175000017500000000210710375436412021572 0ustar gurkangurkan/* VorbisTags.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef VorbisTags_H #define VorbisTags_H #import #import @interface VorbisTags : NSObject { } @end #endif /* VorbisTag_H */ cynthiune.app-0.9.5/Bundles/VorbisTags/vcedit.h0000644000175000017500000000274310375436502020773 0ustar gurkangurkan// Modified by Yen-Ju Chen /* This program is licensed under the GNU Library General Public License, version 2, * a copy of which is included with this program (with filename LICENSE.LGPL). * * (c) 2000-2001 Michael Smith * * VCEdit header. * * last modified: $ID:$ */ #ifndef __VCEDIT_H #define __VCEDIT_H #ifdef __cplusplus extern "C" { #endif #include #include #include #include typedef size_t (*vcedit_read_func)(void *, size_t, size_t, void *); typedef size_t (*vcedit_write_func)(const void *, size_t, size_t, void *); typedef struct { ogg_sync_state *oy; ogg_stream_state *os; vorbis_comment *vc; vorbis_info *vi; vcedit_read_func read; vcedit_write_func write; void *in; long serial; unsigned char *mainbuf; unsigned char *bookbuf; int mainlen; int booklen; char *lasterror; char *vendor; int prevW; int extrapage; int eosin; } vcedit_state; extern vcedit_state * vcedit_new_state(void); extern void vcedit_clear(vcedit_state *state); extern vorbis_comment * vcedit_comments(vcedit_state *state); extern int vcedit_open(vcedit_state *state, FILE *in); extern int vcedit_open_callbacks(vcedit_state *state, void *in, vcedit_read_func read_func, vcedit_write_func write_func); extern int vcedit_write(vcedit_state *state, void *out); extern char * vcedit_error(vcedit_state *state); #ifdef __cplusplus } #endif #endif /* __VCEDIT_H */ cynthiune.app-0.9.5/Bundles/Timidity/0000755000175000017500000000000010413173130017033 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Timidity/GNUmakefile.preamble0000644000175000017500000000174610345610404022707 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # ADDITIONAL_LDFLAGS += ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Timidity/GNUmakefile0000644000175000017500000000320110224643553021114 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=Timidity BUNDLE_NAME=Timidity BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Timidity_PRINCIPAL_CLASS=Timidity # # Additional libraries # Timidity_LIBRARIES_DEPEND_UPON += # # Resource files # Timidity_RESOURCE_FILES= # # Header files # Timidity_HEADERS= \ Timidity.h # # Class files # Timidity_OBJC_FILES= \ Timidity.m # # C files # Timidity_C_FILES= # # C++ files # Timidity_CC_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Timidity/Timidity.m0000644000175000017500000001147210315621477021027 0ustar gurkangurkan/* Timidity.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "Timidity.h" #define LOCALIZED(X) _b ([Timidity class], X) #define timidity "/usr/bin/timidity" #define rate 22050 @implementation Timidity : NSObject - (id) init { if ((self = [super init])) { tiTask = nil; in = nil; err = nil; title = nil; duration = 0; } return self; } + (NSString *) bundleDescription { return @"Wrapper plug-in for the Timidity midi reader"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return nil; } - (void) _createTask: (NSString *) fileName { NSString *timidityPath, *freqString; tiTask = [NSTask new]; [tiTask autorelease]; freqString = [NSString stringWithFormat: @"-s%d", rate]; timidityPath = [NSString stringWithCString: timidity]; [tiTask setLaunchPath: timidityPath]; [tiTask setArguments: [NSArray arrayWithObjects: freqString, @"-OrSs1", @"-idv", @"-o", @"-", fileName, nil]]; } - (BOOL) _parseData: (NSData *) data { BOOL result; NSString *content, *durationString; NSRange range; NSArray *elements; result = NO; content = [[NSString alloc] initWithData: data encoding: NSNonLossyASCIIStringEncoding]; range = [content rangeOfString: @"samples, time "]; if (range.length) { durationString = [content substringFromIndex: NSMaxRange (range)]; elements = [durationString componentsSeparatedByString: @":"]; if ([elements count]) duration = ([[elements objectAtIndex: 0] intValue] * 60 + [[elements objectAtIndex: 1] intValue]); result = YES; } [content release]; return result; } - (void) _parseStdErr { NSData *data; BOOL done; done = NO; while (!done) { data = [err availableData]; done = [self _parseData: data]; } } - (BOOL) streamOpen: (NSString *) fileName { BOOL result; NSPipe *tiPipe, *stderrPipe; [self _createTask: fileName]; tiPipe = [NSPipe pipe]; [tiTask setStandardOutput: tiPipe]; stderrPipe = [NSPipe pipe]; [tiTask setStandardError: stderrPipe]; in = [tiPipe fileHandleForReading]; err = [stderrPipe fileHandleForReading]; [tiTask launch]; if ([tiTask isRunning]) { [tiTask retain]; title = makeTitleFromFilename (fileName); [title retain]; [self _parseStdErr]; result = YES; } else { [in closeFile]; [err closeFile]; result = NO; } return result; } + (BOOL) canTestFileHeaders { return NO; } + (BOOL) streamTestOpen: (NSString *) fileName { return NO; } + (NSString *) errorText: (int) error { return @""; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { NSData *bytes; int size; bytes = [in readDataOfLength: 65536]; if (bytes) { size = [bytes length]; [bytes getBytes: buffer length: (unsigned int) size]; } else size = 0; return size; } - (int) lastError { return 0; } - (unsigned int) readChannels { return 2; } - (unsigned long) readRate { return rate; } - (unsigned int) readDuration { return duration; } - (NSString *) readTitle { return title; } - (NSString *) readGenre { return @""; } - (NSString *) readArtist { return @""; } - (NSString *) readAlbum { return @""; } - (NSString *) readYear { return @""; } - (NSString *) readTrackNumber { return @""; } - (void) streamClose { [err closeFile]; [in closeFile]; if (title) [title release]; if ([tiTask isRunning]) [tiTask terminate]; [tiTask release]; } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"mid", @"rmi", nil]; } - (BOOL) isSeekable { return NO; } - (void) seek: (unsigned int) aPos { } @end cynthiune.app-0.9.5/Bundles/Timidity/Timidity.h0000644000175000017500000000212210202700114020767 0ustar gurkangurkan/* Timidity.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Timidity_H #define Timidity_H @interface Timidity : NSObject { NSTask *tiTask; NSFileHandle *in; NSFileHandle *err; NSString *title; unsigned int duration; } @end #endif /* Timidity_H */ cynthiune.app-0.9.5/Bundles/Esound/0000755000175000017500000000000010413173130016474 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Esound/GNUmakefile.preamble0000644000175000017500000000217410345610402022342 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ESD_CFLAGS := $(shell esd-config --cflags) ESD_LIBS := $(shell esd-config --libs) ADDITIONAL_INCLUDE_DIRS += -I../.. $(ESD_CFLAGS) ADDITIONAL_LDFLAGS += -I../.. $(ESD_LIBS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Esound/EsoundPreference.m0000644000175000017500000001255010406705053022120 0ustar gurkangurkan/* EsoundPreference.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import "Esound.h" #import "EsoundPreference.h" #define LOCALIZED(X) _b ([Esound class], X) @implementation EsoundPreference : NSObject // Preference protocol + (id) instance { static EsoundPreference *singleton = nil; if (!singleton) singleton = [[self alloc] _init]; return singleton; } - (EsoundPreference *) _init { NSDictionary *tmpDict; if ((self = [super init])) { tmpDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey: @"Esound"]; preference = [NSMutableDictionary dictionaryWithDictionary: tmpDict]; [preference retain]; } return self; } - (NSView *) preferenceSheet { NSView *aView; [NSBundle loadNibNamed: @"EsoundPreferences" owner: self]; aView = [prefsWindow contentView]; [aView retain]; [aView removeFromSuperview]; [prefsWindow release]; [aView autorelease]; return aView; } - (void) _initDefaults { NSString *socketType, *tcpHost, *tcpPort; static BOOL initted = NO; if (!initted) { socketType = [preference objectForKey: @"socketType"]; if (!socketType) { socketType = @"UNIX"; [preference setObject: socketType forKey: @"socketType"]; } tcpHost = [preference objectForKey: @"tcpHostname"]; if (!tcpHost) { tcpHost = @"localhost"; [preference setObject: tcpHost forKey: @"tcpHostname"]; } tcpPort = [preference objectForKey: @"tcpPort"]; if (!tcpPort) { tcpPort = @"16001"; [preference setObject: tcpPort forKey: @"tcpPort"]; } initted = YES; } } - (void) awakeFromNib { [self _initDefaults]; [connectionTypeBox setTitle: LOCALIZED (@"Connection type")]; [tcpOptionsBox setTitle: LOCALIZED (@"TCP options")]; [unixBtn setTitle: LOCALIZED (@"UNIX socket")]; [tcpBtn setTitle: LOCALIZED (@"TCP socket")]; [hostLabel setStringValue: LOCALIZED (@"Hostname (or IP)")]; [portLabel setStringValue: LOCALIZED (@"Port")]; if ([[preference objectForKey: @"socketType"] isEqualToString: @"UNIX"]) [self selectUnixBtn: self]; else [self selectTcpBtn: self]; [hostField setStringValue: [preference objectForKey: @"tcpHostname"]]; [portField setStringValue: [preference objectForKey: @"tcpPort"]]; } - (NSString *) preferenceTitle { return @"Esound"; } - (void) save { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: preference forKey: @"Esound"]; [defaults synchronize]; } - (BOOL) socketIsTCP { NSString *socketType; [self _initDefaults]; socketType = [preference objectForKey: @"socketType"]; return [socketType isEqualToString: @"TCP"]; } - (NSString *) tcpHostConnectString { [self _initDefaults]; return [NSString stringWithFormat: @"%@:%@", [preference objectForKey: @"tcpHostname"], [preference objectForKey: @"tcpPort"]]; } - (void) selectUnixBtn: (id) sender { NSColor *disabledColor; disabledColor = [NSColor controlBackgroundColor]; [unixBtn setState: 1]; [tcpBtn setState: 0]; [hostField setEditable: NO]; [portField setEditable: NO]; [hostField setBackgroundColor: disabledColor]; [portField setBackgroundColor: disabledColor]; [portField display]; [hostField display]; [preference setObject: @"UNIX" forKey: @"socketType"]; } - (void) selectTcpBtn: (id) sender { NSColor *enabledColor; enabledColor = [NSColor textBackgroundColor]; [unixBtn setState: 0]; [tcpBtn setState: 1]; [hostField setEditable: YES]; [portField setEditable: YES]; [hostField setBackgroundColor: enabledColor]; [portField setBackgroundColor: enabledColor]; [portField display]; [hostField display]; [preference setObject: @"TCP" forKey: @"socketType"]; } - (void) controlTextDidEndEditing: (NSNotification *) notification { id object; NSString *prefKey; object = [notification object]; if (object == hostField) prefKey = @"tcpHostname"; else if (object == portField) prefKey = @"tcpPort"; else prefKey = @""; [preference setObject: [object stringValue] forKey: prefKey]; } @end cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.nib/0000755000175000017500000000000010413173130022662 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.nib/info.nib0000644000175000017500000000070210036352231024310 0ustar gurkangurkan IBDocumentLocation 38 71 356 240 0 0 1024 746 IBFramework Version 283.0 IBOpenObjects 5 IBSystem Version 6R73 cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.nib/classes.nib0000644000175000017500000000071010036352231025011 0ustar gurkangurkan{ IBClasses = ( { ACTIONS = {hostAction = id; portAction = id; selectTcpBtn = id; selectUnixBtn = id; }; CLASS = EsoundPreferences; LANGUAGE = ObjC; OUTLETS = {hostField = id; portField = id; prefsWindow = id; tcpBtn = id; unixBtn = id; }; SUPERCLASS = NSObject; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; } ); IBVersion = 1; }cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.nib/keyedobjects.nib0000644000175000017500000001317010036352231026033 0ustar gurkangurkanbplist00Y$archiverX$versionX$objectsT$top_NSKeyedArchiver (,-348<HOghlpqsz~  #-./2478:=ADEFIJNORSUWX[\^_`acdefghklprsuvyz}>k,U$null  !"#$%&']NSFontManagerV$classYNSNextOid_NSVisibleWindowsVNSRoot\NSOidsValues_NSClassesValues]NSConnections]NSNamesValues]NSObjectsKeysZNSOidsKeys]NSClassesKeys[NSFramework[NSNamesKeys_NSObjectsValues$xtwv )*+[NSClassName_EsoundPreferences./01Z$classnameX$classes^NSCustomObject02XNSObject_IBCocoaFramework 567ZNS.objects./9:\NSMutableSet9;2UNSSet 5=>+?@ABCDEFG cegjlnpr IJKLMNWNSLabel]NSDestinationXNSSourceba P QRSTUVWXYZ[\]^_`abcdef\NSWindowViewYNSWTFlags]NSWindowTitleYNSMinSizeYNSMaxSize\NSWindowRect_NSWindowStyleMask_NSWindowBacking\NSScreenRect]NSWindowClass[NSViewClass`px ^_ ]_{{151, 444}, {281, 212}} ijkYNS.string VWindow./mn_NSMutableStringmo2XNSStringXNSWindow ijrTView tuvwxy_NSNextResponderZNSSubviewsWNSFrame-\ 5={|}6t uv[c[]NSTransparentYNSOffsets_NSTitlePosition\NSBorderType]NSContentView[NSTitleCellYNSBoxType[NSSuperview5/0. 5= tuvw||, 5=' tvVNSCellYNSEnabled& _{{75, 35}, {86, 18}} c_NSKeyEquivalentYNSSupport_NSAlternateContents]NSControlView\NSCellFlags2_NSPeriodicDelay^NSButtonFlags2]NSButtonFlags[NSCellFlags]NSNormalImage_NSPeriodicInterval_NSAlternateImageZNSContents%$H?VSystem_textBackgroundColor 0'(1WNSWhiteB1./$3$2 $%&'(5*6,DCYtextColor 0'(9B0./;<_NSTextFieldCell;2./>?[NSTextField>@2\%NSTextField tvBCIH_{{112, 12}, {111, 22}}  !" tvGHLK_{{11, 44}, {96, 14}} K LMNQM_Hostname (or IP) $%&'(P*Q,PO\controlColor 0'(TI0.666667 $%&'(5*V,R_controlTextColor tvYZUT_{{81, 14}, {26, 14}} K L]VUPort _{{2, 2}, {237, 75}}_{{20, 20}, {241, 95}} b[[TCP options_{{1, 9}, {281, 212}}_{{0, 0}, {1024, 746}}Z{213, 129}_{3.40282e+38, 3.40282e+38}./ij_NSWindowTemplatei2[prefsWindow./mn_NSNibOutletConnectormo2^NSNibConnector IJKLqdYhostField IJKLtfYportField IJKwxih[hostAction:./{|_NSNibControlConnector{o2 IJKw~k[portAction: IJKLmVtcpBtn IJKLoWunixBtn IJKwq]selectUnixBtn IJKws\selectTcpBtn 5u|}N[./2 5}[[|N 5}|N 5yz{|}~YNSButton4VNSBox1\File's Owner]NSTextField12]NSTextField11\NSTextField1ZNSButton41 57 57 5B@FN}D[C|GA?E 5ŀ"  # !./^NSIBObjectData2]IB.objectdata#,5:LQ 1?M[ft#6?JLMVcjpy{,6@Mas ).?Q\dfhjsxz|!#%.1FHJSXZ\u|*<KYes%*7FHJLTbk~    % 0 : A M f h j   2 9 N P R T f w | ~         9 ; = ? X }     0 = E H Q V k m o y  7 P R T k ')+Bcek/4@I`gv  )+2CEM^`n &(*,.02468:<>HO\jx "$&(*,.02468:<>@BDFHJLNPRTVXZ\^`bdfo~cynthiune.app-0.9.5/Bundles/Esound/Esound.h0000644000175000017500000000222110303177073020107 0ustar gurkangurkan/* Esound.h - this file is part of Cynthiune * * Copyright (C) 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Esound_H #define Esound_H #import @class NSFileHandle; @protocol CynthiuneBundle; @protocol Output; @interface Esound : NSObject { id parentPlayer; int rate; int channels; NSFileHandle *esd; } @end #endif /* Esound_H */ cynthiune.app-0.9.5/Bundles/Esound/EsoundPreference.h0000644000175000017500000000305510406702450022111 0ustar gurkangurkan/* EsoundPreference.h - this file is part of $PROJECT_NAME_HERE$ * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef ESOUNDPREFERENCE_H #define ESOUNDPREFERENCE_H @class NSButton; @class NSBox; @class NSMutableDictionary; @class NSTextField; @class NSWindow; @interface EsoundPreference : NSObject { NSMutableDictionary *preference; NSWindow *prefsWindow; NSButton *unixBtn; NSButton *tcpBtn; NSTextField *hostField; NSTextField *portField; NSBox *connectionTypeBox; NSBox *tcpOptionsBox; NSTextField *hostLabel; NSTextField *portLabel; } - (EsoundPreference *) _init; - (BOOL) socketIsTCP; - (NSString *) tcpHostConnectString; /* radio buttons */ - (void) selectUnixBtn: (id) sender; - (void) selectTcpBtn: (id) sender; @end #endif /* ESOUNDPREFERENCE_H */ cynthiune.app-0.9.5/Bundles/Esound/GNUmakefile0000644000175000017500000000327710224643553020572 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=Esound BUNDLE_NAME=Esound BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Esound_PRINCIPAL_CLASS=Esound Esound_LANGUAGES=English French Esound_LOCALIZED_RESOURCE_FILES=Localizable.strings # # Additional libraries # Esound_LIBRARIES_DEPEND_UPON += # # Resource files # Esound_RESOURCE_FILES= \ EsoundPreferences.gorm # # Header files # Esound_HEADERS= \ Esound.h \ EsoundPreference.h # # Class files # Esound_OBJC_FILES= \ Esound.m \ EsoundPreference.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Esound/French.lproj/0000755000175000017500000000000010413173130021026 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Esound/French.lproj/Localizable.strings0000644000175000017500000000061210044665171024674 0ustar gurkangurkan"Connection type" = "Type de connexion"; "TCP options" = "Options TCP"; "UNIX socket" = "soquet UNIX"; "TCP socket" = "soquet TCP/IP"; "Hostname (or IP)" = "Nom d'hte (ou IP)"; "Port" = "Port"; cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.gorm/0000755000175000017500000000000010413173130023056 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.gorm/data.classes0000644000175000017500000000075110406702414025356 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; EsoundPreferences = { Actions = ( "selectTcpBtn:", "selectUnixBtn:" ); Outlets = ( prefsWindow, tcpBtn, unixBtn, hostField, portField, portLabel, hostLabel, tcpOptionsBox, connectionTypeBox ); Super = NSObject; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "selectTcpBtn:", "selectUnixBtn:" ); Super = NSObject; }; }cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.gorm/objects.gorm0000644000175000017500000001121510406702414025402 0ustar gurkangurkanGNUstep archive00002b5e:0000001e:00000088:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary& 01NSString&%NSOwner0&%EsoundPreferences0&% Box101NSBox1NSView1 NSResponder% A A  C B  C B&01 NSMutableArray1 NSArray&0% @ @ C{ B`  C{ B`&0 &0 1 NSTextField1 NSControl% C A B A  B A&0 &%0 1 NSTextFieldCell1 NSActionCell1NSCell0 &%Text01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%textBackgroundColor00& % textColor0 % C @ B` A  B` A&0 &%0 0&%Text&&&&&&&&0%00&%System0&%textBackgroundColor00& % textColor0 % A B C A  C A&0 &%0 0!&%Hostname (or IP)&&&&&&&&0%0"0#&%System0$&%textBackgroundColor0%#0&& % textColor0' % B @ B A  B A&0( &%0) 0*&%Port&&&&&&&&0%0+0,&%System0-&%textBackgroundColor0.,0/& % textColor00 01& % TCP options&&&&&&&&0%0203&%System04&%windowBackgroundColor0506&%System07& % textColor @ @%%08& %  TextField109& %  TextField20:& % TextField 0;& %  TextField3'0<& % GormNSWindow0=1GSWindowTemplate1GSClassSwapper0>&%NSWindow1NSWindow%  C C?&% Cu D 0?%  C C?  C C?&0@ &0A% A B C B  C B&0B &0C% @ @ C B  C B&0D &0E1NSButton% B B0 B A  B A&0F &%0G1 NSButtonCell0H& % UNIX socket0I1NSImage0J1NSMutableString&% common_RadioOff&&&&&&&&%0K&0L&0M0N&% common_RadioOn&&&0O% B Ap B A  B A&0P &%0Q0R& % TCP socketI&&&&&&&&%0S&0T&M&&&0U 0V&%Connection type&&&&&&&&0%20W0X&%System0Y& % textColor %%20Z&%Window0[&%Esound preferences[ ? B F@ F@%0\0]&%NSApplicationIcon&   D D@0^&%GSCustomClassMap0_&0`&%ButtonE0a& % NSVisible0b &0c&%BoxA0d&% Button1O0e &0f1NSNibConnector<0g1NSNibOutletConnector<0h& % prefsWindow0ic0j0k`0ld0m1NSNibControlConnector`0n&%selectUnixBtn:0od0p& % selectTcpBtn:0q:0r80s90t;0u:0v& % hostField0w80x& % portField0y`0z&%unixBtn0{d0|&%tcpBtn0}90~& % hostLabel0;0& % portLabel00& % tcpOptionsBox0c0&%connectionTypeBox0:0&% delegate0801 GSMutableSet1 NSMutableSet1NSSet&=cynthiune.app-0.9.5/Bundles/Esound/EsoundPreferences.gorm/data.info0000644000175000017500000000027010406702414024650 0ustar gurkangurkanGNUstep archive00002b5e:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/Bundles/Esound/English.lproj/0000755000175000017500000000000010413173130021212 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Esound/English.lproj/Localizable.strings0000644000175000017500000000057210044665171025065 0ustar gurkangurkan"Connection type" = "Connection type"; "TCP options" = "TCP options"; "UNIX socket" = "UNIX socket"; "TCP socket" = "TCP socket"; "Hostname (or IP)" = "Hostname (or IP)"; "Port" = "Port"; cynthiune.app-0.9.5/Bundles/Esound/Esound.m0000644000175000017500000001047610406635265020135 0ustar gurkangurkan/* Esound.m - this file is part of Cynthiune * * Copyright (C) 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import #import #import #import #import #import #import #import #import "Esound.h" #import "EsoundPreference.h" #define LOCALIZED(X) _b ([Esound class], X) static NSNotificationCenter *nc = nil; static NSArray *loopModes; @implementation Esound : NSObject + (void) initialize { nc = [NSNotificationCenter defaultCenter]; loopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEventTrackingRunLoopMode, nil]; [loopModes retain]; } + (void) unload { [loopModes release]; } + (NSString *) bundleDescription { return @"Output plug-in for the Esound sound daemon"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2003, 2004 Wolfgang Sourdeau", nil]; } + (BOOL) isThreaded { return NO; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (id) init { if ((self = [super init])) { esd = nil; } return self; } - (int) _openSocket { int esdSocket; NSString *hostString; EsoundPreference *esoundPreference; esoundPreference = [EsoundPreference instance]; if ([esoundPreference socketIsTCP]) { hostString = [esoundPreference tcpHostConnectString]; esdSocket = esd_play_stream ((ESD_BITS16 | ESD_STREAM | ESD_PLAY | channels), rate, [hostString cString], "Cynthiune stream"); } else esdSocket = esd_play_stream_fallback ((ESD_BITS16 | ESD_STREAM | ESD_PLAY | channels), rate, NULL, "Cynthiune stream"); return esdSocket; } - (BOOL) openDevice { int esdSocket, try; try = 0; esdSocket = [self _openSocket]; while (esdSocket < 1 && try < 5) { try++; [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.2]]; esdSocket = [self _openSocket]; } if (esdSocket > 0) { esd = [[NSFileHandle alloc] initWithFileDescriptor: esdSocket]; if (esd) [nc addObserver: self selector: @selector (_writeCompleteNotification:) name: GSFileHandleWriteCompletionNotification object: esd]; else close (esdSocket); } return (esd != nil); } - (void) closeDevice { [esd closeFile]; [esd release]; esd = nil; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { BOOL result; result = YES; rate = sampleRate; switch (numberOfChannels) { case 1: channels = ESD_MONO; break; case 2: channels = ESD_STEREO; break; default: result = NO; } if (result && esd) { [self closeDevice]; result = [self openDevice]; } return result; } - (void) _writeCompleteNotification: (NSNotification *) aNotification { [parentPlayer chunkFinishedPlaying]; } - (void) playChunk: (NSData *) chunk { [esd writeInBackgroundAndNotify: chunk forModes: loopModes]; } @end cynthiune.app-0.9.5/Bundles/XMMSInput/0000755000175000017500000000000010413173130017043 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/XMMSInput/GNUmakefile.preamble0000644000175000017500000000216710345610404022715 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. GTK_CFLAGS = # $(shell gtk-config --cflags) GTK_LIBS = # $(shell gtk-config --libs) ADDITIONAL_INCLUDE_DIRS += -I../.. $(GTK_CFLAGS) ADDITIONAL_LDFLAGS += $(GTK_LIBS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/XMMSInput/XMMSInput.h0000644000175000017500000000245610110245566021036 0ustar gurkangurkan/* XMMSInput.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef XMMSInput_H #define XMMSInput_H #define BUF_LEN 4096 * 5 @interface XMMSInput : NSObject { InputPlugin *inputPlugin; OutputPlugin *outputPlugin; char pluginBuffer[BUF_LEN]; int buffer_size; int position; BOOL buffer_filled; unsigned int channels; unsigned long rate; BOOL formatKnown; NSString *filename; } @end typedef struct { @defs (XMMSInput); } CXMMSInput; #endif /* XMMSInput_H */ cynthiune.app-0.9.5/Bundles/XMMSInput/GNUmakefile0000644000175000017500000000315410224643553021133 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=XMMSInput BUNDLE_NAME=XMMSInput BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune XMMSInput_PRINCIPAL_CLASS=XMMSInput # # Additional libraries # XMMSInput_LIBRARIES_DEPEND_UPON += # # Resource files # XMMSInput_RESOURCE_FILES= # # Header files # XMMSInput_HEADERS= \ XMMSInput.h # # Class files # XMMSInput_OBJC_FILES= \ XMMSInput.m # # C files # XMMSInput_C_FILES= ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/XMMSInput/XMMSInput.m0000644000175000017500000002377710121227172021047 0ustar gurkangurkan/* XMMSInput.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE 1 #import #import #import #import #import typedef void * gpointer; typedef int gint; typedef void * GList; typedef char gchar; typedef short gint16; // #import #import #import #import #import #import "XMMSInput.h" typedef enum _PlayAction { doNothing = 0, readFormat = 1, readChunk = 2, } PlayAction; #define LOCALIZED(X) _b ([XMMSInput class], X) // #define plugin_file "/home/wolfgang/.xmms/Plugins/libxmmsmad.so" #define plugin_file "/home/wolfgang/.xmms/Plugins/xmms-musepack-1.00.so" static void *dlHandler = NULL; InputPlugin* (*get_iplugin_info)(); // static pthread_mutex_t instanceMutex; // static NSLock *instanceLock; static NSThread* mainThread; static CXMMSInput *currentInstance = NULL; static PlayAction playAction = doNothing; static unsigned int bufferPlayingIteration = 0; static BOOL reading = NO; static char *titleFormat = NULL; char *xmms_get_gentitle_format () { NSLog (@"xmms_get_gentitle_format (%s)", titleFormat); return titleFormat; } static void threadCleanup () { // NSLog (@"thread %p exiting...", pthread_self()); GSUnregisterCurrentThread (); } static void registerThreadIfNeeded () { if (GSRegisterCurrentThread ()) { // NSLog (@"new thread: %p", GSCurrentThread()); } } static void input_add_vis_pcm (int time, AFormat fmt, int nch, int length, void *ptr) { registerThreadIfNeeded (); // NSLog (@"input_add_vis_pcm"); } /* Fill in the stuff that is shown in the player window */ static void input_set_info (char *title, int length, int rate, int freq, int nch) { registerThreadIfNeeded (); // NSLog (@"input_set_info: %s, %d, %d, %d, %d", // title, length, rate, freq, nch); } static void input_set_info_text (char *text) { registerThreadIfNeeded (); // NSLog (@"input_set_info_text: %s", text); } static InputVisType input_get_vis_type () { registerThreadIfNeeded (); // NSLog (@"input_get_vis_type"); return INPUT_VIS_OFF; } int output_open_audio (AFormat fmt, int newRate, int newChannels) { registerThreadIfNeeded (); // NSLog (@"open_audio: chans: %d, rate: %d", newChannels, newRate); // NSLog (@"thread id: %p", pthread_self()); if (playAction == readFormat) { currentInstance->channels = newChannels; currentInstance->rate = newRate; playAction = doNothing; } return YES; } void output_init () { registerThreadIfNeeded (); // NSLog (@"init"); } void output_about () { registerThreadIfNeeded (); // NSLog (@"about"); } void output_configure () { registerThreadIfNeeded (); // NSLog (@"configure"); } void output_write_audio (void *ptr, int length) { registerThreadIfNeeded (); bufferPlayingIteration = 0; // NSLog (@"output_write_audio"); memcpy (currentInstance->pluginBuffer, ptr, length); currentInstance->buffer_size = length; playAction = doNothing; } void output_close_audio (void) { registerThreadIfNeeded (); } void output_flush (int time) { registerThreadIfNeeded (); // NSLog (@"flush"); } void output_pause (short paused) { registerThreadIfNeeded (); // NSLog (@"pause"); } int output_buffer_free (void) { registerThreadIfNeeded (); // NSLog (@"output_buffer_free"); while (playAction != readChunk) usleep (5000); // return BUF_LEN; return ((playAction == readChunk) ? BUF_LEN : 0); } int output_buffer_playing (void) { BOOL answer; registerThreadIfNeeded (); // NSLog (@"output_buffer_playing"); // return (playAction == readChunk); bufferPlayingIteration++; if (bufferPlayingIteration > 2 && playAction == readChunk) { NSLog (@"stopping?"); currentInstance->buffer_size = 0; playAction = doNothing; answer = NO; GSUnregisterCurrentThread (); } else answer = YES; return answer; // return ((currentInstance->buffer_empty) ? NO : YES); } int output_output_time (void) { registerThreadIfNeeded (); // NSLog (@"output_output_time"); return 0; } int output_written_time (void) { registerThreadIfNeeded (); // NSLog (@"output_written_time"); return 0; } @implementation XMMSInput : NSObject + (void) load { mainThread = GSCurrentThread(); // instanceLock = [NSLock new]; dlHandler = dlopen (plugin_file, RTLD_LAZY | RTLD_GLOBAL); if (!dlHandler) NSLog (@"error opening SO '%s':\n\t%s", plugin_file, dlerror()); else { get_iplugin_info = dlsym (dlHandler, "get_iplugin_info"); if (!get_iplugin_info) NSLog (@"%s: get_iplugin_info unresolved"); } } + (NSArray *) bundleClasses { return [NSArray arrayWithObject: [self class]]; } + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"mpc", nil]; } + (BOOL) canTestFileHeaders { return NO; } - (void) _createOutputPlugin { outputPlugin = malloc (sizeof (OutputPlugin)); outputPlugin->init = output_init; outputPlugin->about = output_about; outputPlugin->configure = output_configure; outputPlugin->open_audio = output_open_audio; outputPlugin->write_audio = output_write_audio; outputPlugin->close_audio = output_close_audio; outputPlugin->flush = output_flush; outputPlugin->pause = output_pause; outputPlugin->buffer_free = output_buffer_free; outputPlugin->buffer_playing = output_buffer_playing; outputPlugin->output_time = output_output_time; outputPlugin->written_time = output_written_time; } - (void) _createInputPlugin { inputPlugin = get_iplugin_info (); inputPlugin->handle = dlHandler; inputPlugin->filename = plugin_file; inputPlugin->get_vis_type = input_get_vis_type; inputPlugin->add_vis_pcm = input_add_vis_pcm; inputPlugin->set_info = input_set_info; inputPlugin->set_info_text = input_set_info_text; inputPlugin->output = outputPlugin; } + (BOOL) streamTestOpen: (NSString *) fileName { return NO; } - (XMMSInput *) init { if ((self = [super init])) { filename = nil; channels = 0; rate = 0; formatKnown = NO; [self _createOutputPlugin]; [self _createInputPlugin]; inputPlugin->init (); } return self; } - (BOOL) streamOpen: (NSString *) fileName { char *name; BOOL result; name = (char *) [fileName cString]; // inputPlugin->output->open_audio (FMT_S16_LE,44100, 2); result = (inputPlugin->is_our_file (name) == 1); if (result) SET (filename, fileName); return result; } - (void) streamClose { RELEASEIFSET (filename); // if (reading) // { // NSLog (@"streamClose: stopping"); // [instanceLock unlock]; // inputPlugin->stop(); // reading = NO; // } // free (inputPlugin->output); // inputPlugin->stop (); } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int realSize; char *bufPtr; if (!reading) { NSLog (@"starting"); // [instanceLock lock]; currentInstance = (CXMMSInput *) self; inputPlugin->play_file ((char *) [filename cString]); reading = YES; position = 0; playAction = readChunk; } while (playAction == readChunk); bufPtr = pluginBuffer + position; realSize = buffer_size - position; if (realSize > bufferSize) { realSize = bufferSize; position += realSize; } else position = 0; if (realSize > 0) { memcpy (buffer, bufPtr, realSize); playAction = readChunk; } else { NSLog (@"stopping"); // [instanceLock unlock]; inputPlugin->stop(); reading = NO; } // buffer_empty = (position == 0); return realSize; } - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { inputPlugin->seek (aPos); } - (void) _readFormat { if (!formatKnown) { // [instanceLock lock]; currentInstance = (CXMMSInput *) self; playAction = readFormat; inputPlugin->play_file ((char *) [filename cString]); while (playAction != doNothing); inputPlugin->stop (); // [instanceLock unlock]; formatKnown = YES; } } - (unsigned int) readChannels { [self _readFormat]; NSLog (@"channels: %d", channels); return channels; } - (unsigned long) readRate { [self _readFormat]; NSLog (@"rate: %d", rate); return rate; } - (NSString *) _readInfo: (char *) infoFlag { char *info; int length; // pthread_cleanup_push (threadCleanup, NULL); // [instanceLock lock]; titleFormat = infoFlag; inputPlugin->get_song_info ((char *) [filename cString], &info, &length); if (!info) info = ""; // [instanceLock unlock]; // pthread_cleanup_pop (NO); NSLog (@"string for flag '%s' = '%s'", infoFlag, info); return [NSString stringWithCString: info]; } - (NSString *) readTitle { return [self _readInfo: "%t"]; } - (NSString *) readGenre { return [self _readInfo: "%g"]; } - (NSString *) readArtist { return [self _readInfo: "%p"]; } - (NSString *) readAlbum { return [self _readInfo: "%a"]; } - (NSString *) readTrackNumber { return [self _readInfo: "%n"]; } - (unsigned int) readDuration { char *title; int length; inputPlugin->get_song_info ((char *) [filename cString], &title, &length); return (length / 1000); } - (void) dealloc { free (outputPlugin); [super dealloc]; } @end cynthiune.app-0.9.5/Bundles/MP3/0000755000175000017500000000000010413173165015646 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/MP3/GNUmakefile.preamble0000644000175000017500000000325510354633306021515 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ifeq (mingw32, $(GNUSTEP_TARGET_OS)) MAD_CFLAGS := MAD_LIBS := -lmad ID3Tag_CFLAGS := -I/MinGW/include ID3Tag_LIBS := -lid3tag -lz TAGLIB_CFLAGS = -I/MingW/include/taglib TAGLIB_LIBS = -ltag_c -ltag -lz -lstdc++ ADDITIONAL_GUI_LIBS += $(MAD_LIBS) $(ID3Tag_LIBS) $(TAGLIB_LIBS) else MAD_CFLAGS := $(shell pkg-config mad --cflags) MAD_LIBS := $(shell pkg-config mad --libs) ID3Tag_CFLAGS := $(shell pkg-config id3tag --cflags) ID3Tag_LIBS := $(shell pkg-config id3tag --libs) TAGLIB_CFLAGS = $(shell taglib-config --cflags) TAGLIB_LIBS = $(shell taglib-config --libs) -ltag_c ADDITIONAL_LDFLAGS += $(MAD_LIBS) $(ID3Tag_LIBS) $(TAGLIB_LIBS) endif ADDITIONAL_INCLUDE_DIRS += -I../.. $(MAD_CFLAGS) $(ID3Tag_CFLAGS) $(TAGLIB_CFLAGS) ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/MP3/GNUmakefile0000644000175000017500000000307010224643553017723 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=MP3 BUNDLE_NAME=MP3 BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune MP3_PRINCIPAL_CLASS=MP3 # # Additional libraries # MP3_LIBRARIES_DEPEND_UPON += # # Resource files # MP3_RESOURCE_FILES= # # Header files # MP3_HEADERS= \ MP3.h \ xing.h # # Class files # MP3_OBJC_FILES= \ MP3.m # # C files # MP3_C_FILES= \ xing.c ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/MP3/MP3.h0000644000175000017500000000354210401723737016425 0ustar gurkangurkan/* MP3.h - this file is part of Cynthiune * * Copyright (C) 2002, 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MP3_H #define MP3_H @protocol Format; #define IBUFFER_SIZE 5 * 8192 typedef mad_fixed_t MadFixed; typedef struct _audioDither { MadFixed error[3]; MadFixed random; } audioDither; typedef enum _InputBufferStatus { BufferHasUnrecoverableError = -2, BufferHasRecoverableError = -1, BufferHasNoError = 0 } InputBufferStatus; typedef struct mad_frame MadFrame; typedef struct mad_header MadHeader; typedef struct mad_stream MadStream; typedef struct mad_synth MadSynth; typedef struct mad_bitptr MadBitPtr; @interface MP3 : NSObject { BOOL metadataRead; unsigned int channels; unsigned long rate; unsigned int duration; unsigned int size; unsigned int lostSyncs; FILE *mf; MadFrame frame; MadStream stream; MadSynth synth; int iRemain, oRemain; unsigned char iBuffer[IBUFFER_SIZE]; audioDither leftDither, rightDither; NSString *openFilename; BOOL opened; } @end typedef struct { @defs (MP3); } CMp3; #endif /* MP3_H */ cynthiune.app-0.9.5/Bundles/MP3/xing.c0000644000175000017500000000374510244210730016760 0ustar gurkangurkan/* * mad - MPEG audio decoder * Copyright (C) 2000-2001 Robert Leslie * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $superduper: xing.c,v 1.2 2002/10/27 13:03:02 sam Exp $ */ #include #include "xing.h" #define XING_MAGIC (('X' << 24) | ('i' << 16) | ('n' << 8) | 'g') /* * NAME: xing->init() * DESCRIPTION: initialize Xing structure */ void xing_init(struct xing *xing) { xing->flags = 0; } /* * NAME: xing->parse() * DESCRIPTION: parse a Xing VBR header */ int xing_parse(struct xing *xing, struct mad_bitptr ptr, unsigned int bitlen) { if (bitlen < 64 || mad_bit_read(&ptr, 32) != XING_MAGIC) goto fail; xing->flags = mad_bit_read(&ptr, 32); bitlen -= 64; if (xing->flags & XING_FRAMES) { if (bitlen < 32) goto fail; xing->frames = mad_bit_read(&ptr, 32); bitlen -= 32; } if (xing->flags & XING_BYTES) { if (bitlen < 32) goto fail; xing->bytes = mad_bit_read(&ptr, 32); bitlen -= 32; } if (xing->flags & XING_TOC) { int i; if (bitlen < 800) goto fail; for (i = 0; i < 100; ++i) xing->toc[i] = mad_bit_read(&ptr, 8); bitlen -= 800; } if (xing->flags & XING_SCALE) { if (bitlen < 32) goto fail; xing->scale = mad_bit_read(&ptr, 32); bitlen -= 32; } return 0; fail: xing->flags = 0; return -1; } cynthiune.app-0.9.5/Bundles/MP3/xing.h0000644000175000017500000000262110040703556016764 0ustar gurkangurkan/* * mad - MPEG audio decoder * Copyright (C) 2000-2001 Robert Leslie * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * $superduper: xing.h,v 1.2 2002/10/27 13:03:02 sam Exp $ */ #ifndef XING_H #define XING_H #include "mad.h" struct xing { long flags; /* valid fields (see below) */ unsigned long frames; /* total number of frames */ unsigned long bytes; /* total number of bytes */ unsigned char toc[100]; /* 100-point seek table */ long scale; /* ?? */ }; enum { XING_FRAMES = 0x00000001L, XING_BYTES = 0x00000002L, XING_TOC = 0x00000004L, XING_SCALE = 0x00000008L }; void xing_init (struct xing *); #define xing_finish(xing) /* nothing */ int xing_parse (struct xing *, struct mad_bitptr, unsigned int); #endif cynthiune.app-0.9.5/Bundles/MP3/MP3.m0000644000175000017500000003461310401731466016433 0ustar gurkangurkan/* MP3.m - this file is part of Cynthiune * * Copyright (C) 2002-2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import "xing.h" #import "MP3.h" #define LOCALIZED(X) _b ([MP3 class], X) #define MAD_AVERAGE_FRAMES 10 #define MAX_LOSTSYNCS IBUFFER_SIZE * 5 /* header testing */ static inline int seekOffset (FILE *_f) { char testchar; int counter; BOOL eof; counter = -1; testchar = 0; eof = NO; while (!eof && !testchar) { eof = (fread (&testchar, 1, 1, _f) != 1); counter++; } if (!eof) fseek (_f, counter, SEEK_SET); return ((eof) ? -1 : counter); } static inline BOOL testRiffHeader (char *buffer, FILE *_f, int offset) { char tag; BOOL result; if (strncmp (buffer, "WAVE", 4) == 0) { fseek (_f, 20 + offset, SEEK_SET); fread (&tag, 1, 1, _f); result = (tag == 80 || tag == 85); } else result = NO; return result; } static inline BOOL testMP3Header (const char *buffer) { unsigned short *header; header = (unsigned short *) buffer; return ((NSHostByteOrder() == NS_LittleEndian) ? ((*header & 0xfeff) == 0xfaff || (*header & 0xfeff) == 0xfcff || (*header & 0xf8ff) == 0xf0ff || (*header & 0xf8ff) == 0xe0ff) : ((*header & 0xfffe) == 0xfffa || (*header & 0xfffe) == 0xfffc || (*header & 0xfff8) == 0xfff0 || (*header & 0xfff8) == 0xffe0)); } /* data decoding */ static inline int calcInputRemain (MadStream *stream, unsigned char *iBuffer) { int inputRemain; if (stream->next_frame) { inputRemain = stream->bufend - stream->next_frame; if (inputRemain > IBUFFER_SIZE) { NSLog (@"remain too large to handle (%d), skipping...", inputRemain); inputRemain = 0; } else memcpy (iBuffer, stream->next_frame, inputRemain); } else inputRemain = 0; return inputRemain; } static signed long audioLinearDither (MadFixed sample, audioDither *dither) { unsigned int scalebits; MadFixed output, mask, random; /* noise shape */ sample += dither->error[0] - dither->error[1] + dither->error[2]; dither->error[2] = dither->error[1]; dither->error[1] = dither->error[0] / 2; /* bias */ output = sample + (1L << (MAD_F_FRACBITS - 16)); scalebits = MAD_F_FRACBITS - 15; mask = (1L << scalebits) - 1; /* dither */ random = (dither->random * 0x0019660dL + 0x3c6ef35fL) & 0xffffffffL;; output += (random & mask) - (dither->random & mask); dither->random = random; /* clip */ if (output > (MAD_F_ONE - 1)) { output = MAD_F_ONE - 1; if (sample > MAD_F_ONE - 1) sample = MAD_F_ONE - 1; } else if (output < -MAD_F_ONE) { output = -MAD_F_ONE; if (sample < -MAD_F_ONE) sample = -MAD_F_ONE; } /* quantize */ output &= ~mask; /* error feedback */ dither->error[0] = sample - output; /* scale */ return output >> scalebits; } static inline void fillPCMBuffer (CMp3 *self, unsigned char *buffer, int start, int limit) { int i; unsigned char *oBPtr; register signed int sample; oBPtr = buffer; i = start; while (i < limit) { sample = audioLinearDither (self->synth.pcm.samples[0][i], &(self->leftDither)); *oBPtr++ = sample >> 0; *oBPtr++ = sample >> 8; if (self->channels == 2) { sample = audioLinearDither (self->synth.pcm.samples[1][i], &(self->rightDither)); *oBPtr++ = sample >> 0; *oBPtr++ = sample >> 8; } i++; } } static int translateBufferToPCM (CMp3 *self, unsigned char *buffer, int bufferSize) { int start, limit, mult, delta; mult = 2 * self->channels; if (self->oRemain) { start = self->synth.pcm.length - self->oRemain; limit = self->synth.pcm.length; } else { start = 0; limit = (bufferSize / mult); if (self->synth.pcm.length < limit) limit = self->synth.pcm.length; } delta = (limit - start) * mult - bufferSize; if (delta > 0) limit -= delta / mult; fillPCMBuffer (self, buffer, start, limit); self->oRemain = self->synth.pcm.length - limit; return ((limit - start) * mult); } // static const char *MadErrorString(const struct mad_stream *Stream) // { // switch(Stream->error) // { // /* Generic unrecoverable errors. */ // case MAD_ERROR_BUFLEN: // return("input buffer too small (or EOF)"); // case MAD_ERROR_BUFPTR: // return("invalid (null) buffer pointer"); // case MAD_ERROR_NOMEM: // return("not enough memory"); // /* Frame header related unrecoverable errors. */ // case MAD_ERROR_LOSTSYNC: // return("lost synchronization"); // case MAD_ERROR_BADLAYER: // return("reserved header layer value"); // case MAD_ERROR_BADBITRATE: // return("forbidden bitrate value"); // case MAD_ERROR_BADSAMPLERATE: // return("reserved sample frequency value"); // case MAD_ERROR_BADEMPHASIS: // return("reserved emphasis value"); // /* Recoverable errors */ // case MAD_ERROR_BADCRC: // return("CRC check failed"); // case MAD_ERROR_BADBITALLOC: // return("forbidden bit allocation value"); // case MAD_ERROR_BADSCALEFACTOR: // return("bad scalefactor index"); // case MAD_ERROR_BADFRAMELEN: // return("bad frame length"); // case MAD_ERROR_BADBIGVALUES: // return("bad big_values count"); // case MAD_ERROR_BADBLOCKTYPE: // return("reserved block_type"); // case MAD_ERROR_BADSCFSI: // return("bad scalefactor selection info"); // case MAD_ERROR_BADDATAPTR: // return("bad main_data_begin pointer"); // case MAD_ERROR_BADPART3LEN: // return("bad audio data length"); // case MAD_ERROR_BADHUFFTABLE: // return("bad Huffman table select"); // case MAD_ERROR_BADHUFFDATA: // return("Huffman data overrun"); // case MAD_ERROR_BADSTEREO: // return("incompatible block_type for JS"); // /* Unknown error. This switch may be out of sync with libmad's // * defined error codes. // */ // default: // return("Unknown error code"); // } // } static inline InputBufferStatus decodeInputBuffer (CMp3 *self, int iRBytes) { InputBufferStatus bufferStatus; signed long tagSize; mad_stream_buffer (&(self->stream), self->iBuffer, iRBytes + self->iRemain); if (mad_frame_decode (&(self->frame), &(self->stream))) { if ((self->stream.error & 0x100)) { self->lostSyncs++; tagSize = id3_tag_query (self->stream.this_frame, self->stream.bufend - self->stream.this_frame); if (tagSize > 0) mad_stream_skip (&self->stream, tagSize); bufferStatus = ((self->lostSyncs == MAX_LOSTSYNCS) ? BufferHasUnrecoverableError : BufferHasRecoverableError); } else if (MAD_RECOVERABLE (self->stream.error) || self->stream.error == MAD_ERROR_BUFLEN) bufferStatus = BufferHasRecoverableError; else { NSLog (@"%s: unrecoverable frame level error (%s)", __FILE__, mad_stream_errorstr (&(self->stream))); bufferStatus = BufferHasUnrecoverableError; } } else bufferStatus = BufferHasNoError; return bufferStatus; } @implementation MP3 : NSObject + (NSString *) bundleDescription { return @"Extension plug-in for the MP2, MP3 v1/v2/v2.5 audio formats"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2002-2005 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return [NSArray arrayWithObjects: @"ID3Tag", @"Taglib", nil]; } - (void) _resetIVars { metadataRead = NO; channels = 0; rate = 0; duration = 0; size = 0; iRemain = 0; oRemain = 0; memset (iBuffer, 0, IBUFFER_SIZE); lostSyncs = 0; } - (void) _readStreamMetaData { int iRBytes; unsigned int frameCount, rSize; InputBufferStatus bufferStatus; mad_timer_t madTimer; struct xing xingData; BOOL done; madTimer = mad_timer_zero; xing_init (&xingData); mad_stream_init (&stream); mad_frame_init (&frame); frameCount = 0; rSize = 0; done = NO; while (!done) { stream.error = 0; iRemain = calcInputRemain (&stream, iBuffer); iRBytes = fread (iBuffer + iRemain, sizeof (char), IBUFFER_SIZE - iRemain, mf); if (iRBytes > 0 && !feof (mf)) { bufferStatus = decodeInputBuffer ((CMp3 *) self, iRBytes); if (bufferStatus == BufferHasNoError) { frameCount++; rSize += stream.next_frame - stream.this_frame; mad_timer_add (&madTimer, frame.header.duration); rate = frame.header.samplerate; channels = MAD_NCHANNELS (&(frame.header)); if (frameCount == 1) { if (!xing_parse (&xingData, stream.anc_ptr, stream.anc_bitlen)) { mad_timer_multiply (&madTimer, xingData.frames); done = YES; } } if (frameCount >= MAD_AVERAGE_FRAMES) { frameCount = size * MAD_AVERAGE_FRAMES / rSize; madTimer.seconds /= MAD_AVERAGE_FRAMES; madTimer.fraction /= MAD_AVERAGE_FRAMES; mad_timer_multiply (&madTimer, frameCount); done = YES; } } else if (bufferStatus == BufferHasUnrecoverableError) done = YES; } else done = YES; } duration = mad_timer_count (madTimer, MAD_UNITS_SECONDS); mad_frame_finish (&frame); mad_stream_finish (&stream); memset (iBuffer, 0, IBUFFER_SIZE); rewind (mf); metadataRead = YES; } - (void) _readSize: (const char *) filename; { struct stat stat_val; stat (filename, &stat_val); size = stat_val.st_size; } - (BOOL) streamOpen: (NSString *) fileName { const char *filename; filename = [fileName cString]; mf = fopen (filename, "rb"); if (mf) { [self _resetIVars]; [self _readSize: filename]; SET( openFilename, fileName ); mad_stream_init (&stream); mad_frame_init (&frame); mad_synth_init (&synth); } else NSLog (@"%s: no handle...", __FILE__); return (mf != NULL); } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { FILE *_f; char buffer[4]; BOOL result; int offset; _f = fopen ([fileName cString], "rb"); if (_f) { offset = seekOffset (_f); if (offset > -1) { fread (buffer, 1, 4, _f); if (!strncmp (buffer, "RIFF", 4)) { fseek (_f, 8 + offset, SEEK_SET); fread (buffer, 1, 4, _f); result = testRiffHeader (buffer, _f, offset); } else result = (testMP3Header (buffer) || !strncmp (buffer, "ID3", 3)); } else result = NO; fclose (_f); } else result = NO; return result; } // - (NSString *) errorText // { // return @"[error unimplemented]"; // } /* FIXME: we should put some error handling here... */ - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int iRBytes, decodedBytes; InputBufferStatus bufferStatus; BOOL done; lostSyncs = 0; if (oRemain) decodedBytes = translateBufferToPCM ((CMp3 *) self, buffer, bufferSize); else { done = NO; decodedBytes = 0; while (!done) { stream.error = 0; iRemain = calcInputRemain (&stream, iBuffer); iRBytes = fread (iBuffer + iRemain, sizeof (char), IBUFFER_SIZE - iRemain, mf); if (iRBytes > 0 && !feof (mf)) { bufferStatus = decodeInputBuffer ((CMp3 *) self, iRBytes); if (bufferStatus == BufferHasNoError) { mad_synth_frame (&(self->synth), &(self->frame)); decodedBytes = translateBufferToPCM ((CMp3 *) self, buffer, bufferSize); done = YES; } else if (bufferStatus == BufferHasUnrecoverableError) done = YES; } else done = YES; } } return decodedBytes; } - (unsigned int) readChannels { if (!metadataRead) [self _readStreamMetaData]; return channels; } - (unsigned long) readRate { if (!metadataRead) [self _readStreamMetaData]; return rate; } - (unsigned int) readDuration { if (!metadataRead) [self _readStreamMetaData]; return duration; } - (void) streamClose { mad_synth_finish (&synth); mad_frame_finish (&frame); mad_stream_finish (&stream); if (mf) fclose (mf); } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"mp2", @"mp3", @"mpa", @"mpga", @"mpega", nil]; } /* FIXME: this might not be true */ - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { unsigned long filePos; float factor; if (size) { factor = (float) size / duration; filePos = aPos * factor; fseek (mf, filePos, SEEK_SET); } else NSLog (@"size not computed?"); } @end cynthiune.app-0.9.5/Bundles/WaveOut/0000755000175000017500000000000010413173130016631 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/WaveOut/GNUmakefile.preamble0000644000175000017500000000166210345610404022502 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ADDITIONAL_GUI_LIBS += -lwinmm cynthiune.app-0.9.5/Bundles/WaveOut/GNUmakefile0000644000175000017500000000314010263112347020707 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=WaveOut BUNDLE_NAME=WaveOut BUNDLE_EXTENSION=.output BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune WaveOut_PRINCIPAL_CLASS=WaveOut WaveOut_LANGUAGES= WaveOut_LOCALIZED_RESOURCE_FILES= # # Additional libraries # WaveOut_LIBRARIES_DEPEND_UPON += # # Resource files # WaveOut_RESOURCE_FILES= # # Header files # WaveOut_HEADERS= \ WaveOut.h # # Class files # WaveOut_OBJC_FILES= \ WaveOut.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/WaveOut/WaveOut.h0000644000175000017500000000235210376422146020412 0ustar gurkangurkan/* WaveOut.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef WaveOut_H #define WaveOut_H #define MAX_BLOCKS 16 #import @interface WaveOut : NSObject { id parentPlayer; HWAVEOUT dev; int nBlocks; BOOL stopRequested; WAVEHDR **blocks; unsigned char buffer[DEFAULT_BUFFER_SIZE]; int bufferSize; } @end typedef struct { @defs (WaveOut); } CWaveOut; #endif /* WaveOut_H */ cynthiune.app-0.9.5/Bundles/WaveOut/WaveOut.m0000644000175000017500000001521310376422146020417 0ustar gurkangurkan/* WaveOut.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef _REENTRANT #define _REENTRANT 1 #endif #import #import #import #import #import #import #import #import #include #import "WaveOut.h" #define LOCALIZED(X) _b ([WaveOut class], X) static void CALLBACK _waveCallback (HWAVE hWave, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) { CWaveOut *self; WAVEHDR **slot; if (uMsg == WOM_DONE) { self = (CWaveOut *) dwInstance; slot = self->blocks; while (*slot) slot++; *slot = (WAVEHDR *) dwParam1; } } static void FreeBlock (LPWAVEHDR waveBlock) { free (waveBlock->lpData); free (waveBlock); } @implementation WaveOut : NSObject + (NSString *) bundleDescription { return @"Output plug-in for the WaveOut device"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (BOOL) isThreaded { return YES; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (id) init { if ((self = [super init])) { parentPlayer = nil; nBlocks = 0; dev = NULL; blocks = calloc (MAX_BLOCKS, sizeof (WAVEHDR *)); } return self; } - (void) dealloc { free (blocks); [super dealloc]; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { return (numberOfChannels != 0 && sampleRate != 0); } - (void) _loopIteration { LPWAVEHDR wh; MMRESULT res; char errorBuffer[100]; wh = calloc (sizeof (WAVEHDR), 1); wh->dwBufferLength = bufferSize; wh->lpData = malloc (bufferSize); memcpy (wh->lpData, buffer, bufferSize); res = waveOutPrepareHeader (dev, wh, sizeof (WAVEHDR)); if (res == MMSYSERR_NOERROR) { res = waveOutWrite(dev, wh, sizeof (WAVEHDR)); if (res == MMSYSERR_NOERROR) nBlocks++; else { waveOutGetErrorText (res, errorBuffer, 100); FreeBlock (wh); NSLog (@"error: %s", errorBuffer); } } else { waveOutGetErrorText (res, errorBuffer, 100); FreeBlock (wh); NSLog (@"error: %s", errorBuffer); } } - (void) _freeBlocks { unsigned int count; WAVEHDR **slot; count = 0; while (count < MAX_BLOCKS && nBlocks) { slot = self->blocks + count; if (*slot) { waveOutUnprepareHeader (dev, *slot, sizeof (WAVEHDR)); FreeBlock (*slot); *slot = NULL; nBlocks--; } count++; } } - (void) _threadLoop { NSAutoreleasePool *pool; pool = [NSAutoreleasePool new]; while (!stopRequested) { if (nBlocks >= MAX_BLOCKS) { [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.2]]; [self _freeBlocks]; } else { bufferSize = [parentPlayer readNextChunk: buffer withSize: DEFAULT_BUFFER_SIZE]; if (bufferSize > 0) [self _loopIteration]; } if ([pool autoreleaseCount] > 50) [pool emptyPool]; } [self _freeBlocks]; while (nBlocks > 0) { [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; [self _freeBlocks]; } stopRequested = NO; [pool release]; } - (BOOL) openDevice { BOOL result; MMRESULT res; WAVEFORMATEX outFormatex; result = NO; if (waveOutGetNumDevs ()) { outFormatex.wFormatTag = WAVE_FORMAT_PCM; outFormatex.wBitsPerSample = 16; outFormatex.nChannels = 2; outFormatex.nSamplesPerSec = 44100; /* FIXME */ outFormatex.nBlockAlign = 4; outFormatex.nAvgBytesPerSec = (outFormatex.nSamplesPerSec * outFormatex.nBlockAlign); res = waveOutOpen (&dev, WAVE_MAPPER, &outFormatex, (DWORD) _waveCallback, (DWORD) self, CALLBACK_FUNCTION); if (res != MMSYSERR_NOERROR) { switch (res) { case MMSYSERR_ALLOCATED: MessageBox (NULL, "Device Is Already Open", "Error...", MB_OK); break; case MMSYSERR_BADDEVICEID: MessageBox (NULL, "The Specified Device Is out of range", "Error...", MB_OK); break; case MMSYSERR_NODRIVER: MessageBox (NULL, "There is no audio driver in this system.", "Error...", MB_OK); break; case MMSYSERR_NOMEM: MessageBox (NULL, "Unable to allocate sound memory.", "Error...", MB_OK); break; case WAVERR_BADFORMAT: MessageBox (NULL, "This audio format is not supported.", "Error...", MB_OK); break; case WAVERR_SYNC: MessageBox (NULL, "The device is synchronous.", "Error...", MB_OK); break; default: MessageBox (NULL, "Unknown Media Error", "Error...", MB_OK); break; } } else { result = YES; waveOutReset (dev); } } return result; } - (void) closeDevice { while (stopRequested) [NSThread sleepUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.1]]; waveOutReset (dev); waveOutClose (dev); } - (BOOL) startThread { [NSThread detachNewThreadSelector: @selector (_threadLoop) toTarget: self withObject: nil]; return YES; } - (void) stopThread { stopRequested = YES; } @end cynthiune.app-0.9.5/Bundles/MacOSX/0000755000175000017500000000000010413173261016336 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/MacOSX/MacOSXPlayer.h0000644000175000017500000000260110406701033020751 0ustar gurkangurkan/* MacOSXPlayer.h - this file is part of Cynthiune * * Copyright (C) 2002, 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MacOSXPlayer_H #define MacOSXPlayer_H #import @interface MacOSXPlayer : NSObject { id parentPlayer; int bytes; unsigned int channels; unsigned long rate; unsigned int bufferNumber; unsigned char buffer[2][DEFAULT_BUFFER_SIZE]; BOOL isOpen; AudioUnit outputUnit; AudioConverterRef converter; AudioStreamBasicDescription inputFormat, outputFormat; } @end typedef struct { @defs(MacOSXPlayer); } PlayerRef; #endif /* MacOSXPlayer_H */ cynthiune.app-0.9.5/Bundles/MacOSX/MacOSXPlayer.m0000644000175000017500000001300710413155403020762 0ustar gurkangurkan/* MacOSXPlayer.m - this file is part of Cynthiune * * Copyright (C) 2002-2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import "MacOSXPlayer.h" #define LOCALIZED(X) _b ([MacOSXPlayer class], X) static OSStatus inputCallback (AudioConverterRef inAudioConverter, UInt32* outDataSize, void** outData, void* selfRef) { unsigned int chunkSize; PlayerRef *self; NSAutoreleasePool *pool; pool = [NSAutoreleasePool new]; self = selfRef; *outData = self->buffer[self->bufferNumber]; memset (*outData, DEFAULT_BUFFER_SIZE, 0); chunkSize = [self->parentPlayer readNextChunk: *outData withSize: DEFAULT_BUFFER_SIZE]; *outDataSize = chunkSize; self->bufferNumber = 1 - self->bufferNumber; memset (self->buffer[self->bufferNumber], DEFAULT_BUFFER_SIZE, 0); [pool release]; return noErr; } static OSStatus converterRenderer (void* selfRef, AudioUnitRenderActionFlags inActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, AudioBuffer *ioData) { UInt32 size; PlayerRef *self; self = selfRef; size = ioData->mDataByteSize; AudioConverterFillBuffer (self->converter, inputCallback, self, &size, ioData->mData); return noErr; } @implementation MacOSXPlayer : NSObject + (NSString *) bundleDescription { return @"Output plug-in for the MacOS sound system"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005 Wolfgang Sourdeau", nil]; } + (BOOL) isThreaded { return YES; } - (id) init { if ((self = [super init])) { parentPlayer = nil; bufferNumber = 0; bytes = 0; converter = NULL; inputFormat.mFormatID = kAudioFormatLinearPCM; inputFormat.mFormatFlags = (kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked); inputFormat.mFramesPerPacket = 1; inputFormat.mBitsPerChannel = 16; } return self; } - (void) setParentPlayer: (id) aPlayer; { parentPlayer = aPlayer; } - (BOOL) _modifyConverter { UInt32 aStreamSize; aStreamSize = sizeof (AudioStreamBasicDescription); AudioUnitGetProperty (outputUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &outputFormat, &aStreamSize); if (converter) AudioConverterDispose (converter); inputFormat.mSampleRate = rate; inputFormat.mBytesPerPacket = channels * 2; inputFormat.mBytesPerFrame = channels * 2; inputFormat.mChannelsPerFrame = channels; return (AudioConverterNew (&inputFormat, &outputFormat, &converter) == noErr); } - (BOOL) _audioInit { UInt32 aStreamSize; struct AudioUnitInputCallback input; input.inputProc = converterRenderer; input.inputProcRefCon = self; aStreamSize = sizeof (AudioStreamBasicDescription); return (OpenDefaultAudioOutput (&outputUnit) == noErr && AudioUnitInitialize (outputUnit) == noErr && AudioUnitSetProperty (outputUnit, kAudioUnitProperty_SetInputCallback, kAudioUnitScope_Input, 0, &input, sizeof (input)) == noErr && AudioUnitGetProperty (outputUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &outputFormat, &aStreamSize) == noErr); } - (BOOL) openDevice { return ([self _audioInit] && [self _modifyConverter]); } - (BOOL) startThread { isOpen = YES; return (AudioOutputUnitStart (outputUnit) == noErr); } - (void) stopThread { isOpen = NO; AudioOutputUnitStop (outputUnit); } - (void) closeDevice { CloseComponent (outputUnit); isOpen = NO; } - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate { BOOL result; channels = numberOfChannels; rate = sampleRate; if (isOpen) { AudioOutputUnitStop (outputUnit); result = ([self _modifyConverter] && (AudioOutputUnitStart (outputUnit) == noErr)); } else result = YES; return result; } @end cynthiune.app-0.9.5/Bundles/Musepack/0000755000175000017500000000000010413173130017007 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Musepack/CNSFileHandle.h0000644000175000017500000000265110410077470021532 0ustar gurkangurkan/* CNSFileHandle.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CNSFILEHANDLE_H #define CNSFILEHANDLE_H #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ void CNSFileHandleRetain (void *fileHandle); void CNSFileHandleRelease (void *fileHandle); int CNSFileHandleRead (void *fileHandle, void *ptr, int size); int CNSFileHandleTell (void *fileHandle); mpc_bool_t CNSFileHandleCanSeek (void *fileHandle); mpc_bool_t CNSFileHandleSeek (void *fileHandle, int offset); int CNSFileHandleGetSize (void *fileHandle); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* CNSFILEHANDLE_H */ cynthiune.app-0.9.5/Bundles/Musepack/GNUmakefile.preamble0000644000175000017500000000221310345610403022650 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. MUSEPACK_LIBS = -lmpcdec ADDITIONAL_INCLUDE_DIRS += -I../.. ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(MUSEPACK_LIBS) else ADDITIONAL_LDFLAGS += $(MUSEPACK_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Musepack/Musepack.h0000644000175000017500000000241510315621454020742 0ustar gurkangurkan/* Musepack.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Musepack_H #define Musepack_H #define maxSamples 4 * 36 * 32 @interface Musepack : NSObject { NSFileHandle *fileHandle; mpc_reader *mpcReader; mpc_streaminfo *mpcStreamInfo; mpc_decoder *mpcDecoder; MPC_SAMPLE_FORMAT sampleBuffer[maxSamples]; unsigned char frameBuffer[maxSamples * 4]; unsigned char *framePtr; unsigned int remaining; } @end #endif /* Musepack_H */ cynthiune.app-0.9.5/Bundles/Musepack/GNUmakefile0000644000175000017500000000307010244210340021056 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004, 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Bundle # PACKAGE_NAME=Musepack BUNDLE_NAME=Musepack BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Musepack_PRINCIPAL_CLASS=Musepack # # Additional libraries # Musepack_LIBRARIES_DEPEND_UPON += # # Resource files # Musepack_RESOURCE_FILES= # # Header files # Musepack_HEADERS= \ Musepack.h # # Class files # Musepack_OBJC_FILES= \ CNSFileHandle.m \ Musepack.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Musepack/Musepack.m0000644000175000017500000001470010413162607020746 0ustar gurkangurkan/* Musepack.m - this file is part of Cynthiune * * Copyright (C) 2005, 2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import "Musepack.h" #import "CNSFileHandle.h" #define LOCALIZED(X) _b ([Musepack class], X) #define minClip (-1 << (16 - 1)) #define maxClip ((1 << (16 - 1)) - 1) #define floatScale (1 << (16 - 1)) #ifdef MPC_FIXED_POINT static inline int ShiftSigned (MPC_SAMPLE_FORMAT val, int shift) { if (shift > 0) val <<= shift; else if (shift < 0) val >>= -shift; return (int) val; } #endif static mpc_reader * MPCReaderNew (NSFileHandle *handle) { mpc_reader *reader; reader = malloc (sizeof (mpc_reader)); reader->read = CNSFileHandleRead; reader->canseek = CNSFileHandleCanSeek; reader->seek = CNSFileHandleSeek; reader->tell = CNSFileHandleTell; reader->get_size = CNSFileHandleGetSize; reader->data = handle; [handle retain]; return reader; } static void MPCReaderDelete (mpc_reader *reader) { [(NSFileHandle *) reader->data release]; free (reader); } static mpc_streaminfo * MPCStreamInfoNew () { mpc_streaminfo *streamInfo; streamInfo = malloc (sizeof (mpc_streaminfo)); mpc_streaminfo_init (streamInfo); return streamInfo; } static mpc_decoder * MPCDecoderNew (mpc_reader *reader, mpc_streaminfo *streamInfo) { mpc_decoder *decoder; decoder = malloc (sizeof (mpc_decoder)); mpc_decoder_setup (decoder, reader); mpc_decoder_initialize (decoder, streamInfo); return decoder; } static inline void CopyBuffer (const MPC_SAMPLE_FORMAT *buffer, unsigned char *destBuffer, unsigned int length) { int val; unsigned int count; unsigned short *destPtr; destPtr = (unsigned short *) destBuffer; for (count = 0; count < length; count++) { #ifdef MPC_FIXED_POINT val = ShiftSigned (buffer[count], 16 - MPC_FIXED_POINT_SCALE_SHIFT); #else val = (int) (buffer[count] * floatScale); #endif if (val < minClip) val = minClip; else if (val > maxClip) val = maxClip; *destPtr = val; destPtr++; } } @implementation Musepack : NSObject + (NSString *) bundleDescription { return @"Extension plug-in for MPEG+ audio format"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2005, 2006 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return [NSArray arrayWithObjects: @"Taglib", nil]; } - (void) _resetIVars { fileHandle = nil; mpcReader = NULL; mpcStreamInfo = NULL; mpcDecoder = NULL; remaining = 0; framePtr = NULL; } - (id) init { if ((self = [super init])) [self _resetIVars]; return self; } - (BOOL) streamOpen: (NSString *) fileName { BOOL result; fileHandle = [NSFileHandle fileHandleForReadingAtPath: fileName]; if (fileHandle) { [fileHandle retain]; mpcReader = MPCReaderNew (fileHandle); mpcStreamInfo = MPCStreamInfoNew (); mpc_streaminfo_read (mpcStreamInfo, mpcReader); mpcDecoder = MPCDecoderNew (mpcReader, mpcStreamInfo); result = YES; } else result = NO; return result; } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { NSFileHandle *testFileHandle; mpc_reader *testReader; mpc_streaminfo *testStreamInfo; BOOL result; testFileHandle = [NSFileHandle fileHandleForReadingAtPath: fileName]; if (testFileHandle) { testReader = MPCReaderNew (testFileHandle); testStreamInfo = MPCStreamInfoNew (); result = !mpc_streaminfo_read (testStreamInfo, testReader); free (testStreamInfo); MPCReaderDelete (testReader); } else result = NO; return result; } + (NSString *) errorText: (int) error { return @""; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int bytes, status; unsigned int vbrAcc, vbrBits; unsigned long frames, samples; status = 1; if (!remaining) { samples = mpc_decoder_decode (mpcDecoder, sampleBuffer, &vbrAcc, &vbrBits); if (!samples) status = 0; else if (samples == (unsigned long) -1) status = -1; else { frames = samples * mpcStreamInfo->channels; CopyBuffer (sampleBuffer, frameBuffer, frames); remaining = frames * 2; framePtr = frameBuffer; } } if (status > 0) { bytes = ((bufferSize < remaining) ? bufferSize : remaining); memcpy (buffer, framePtr, bytes); #if (BYTE_ORDER == BIG_ENDIAN) invertBytesInBuffer ((char *) buffer, bytes); #endif framePtr += bytes; remaining -= bytes; } else bytes = 0; return ((status > 0) ? bytes : status); } - (int) lastError { return 0; } - (unsigned int) readChannels { return mpcStreamInfo->channels; } - (unsigned long) readRate { return mpcStreamInfo->sample_freq; } - (unsigned int) readDuration { return mpcStreamInfo->pcm_samples / mpcStreamInfo->sample_freq; } - (void) streamClose { if (fileHandle) { [fileHandle closeFile]; [fileHandle release]; } if (mpcReader) MPCReaderDelete (mpcReader); if (mpcStreamInfo) free (mpcStreamInfo); if (mpcDecoder) free (mpcDecoder); [self _resetIVars]; } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"mpc", @"mp+", nil]; } - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { mpc_decoder_seek_seconds (mpcDecoder, (double) aPos); } @end cynthiune.app-0.9.5/Bundles/Musepack/CNSFileHandle.m0000644000175000017500000000365010413164741021540 0ustar gurkangurkan/* CNSFileHandle.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "CNSFileHandle.h" void CNSFileHandleRetain (void *fileHandle) { [(NSFileHandle *) fileHandle retain]; } void CNSFileHandleRelease (void *fileHandle) { [(NSFileHandle *) fileHandle release]; } int CNSFileHandleRead (void *fileHandle, void *ptr, int size) { NSData *data; data = [(NSFileHandle *) fileHandle readDataOfLength: size]; [data getBytes: ptr]; return [data length]; } int CNSFileHandleTell (void *fileHandle) { return [(NSFileHandle *) fileHandle offsetInFile]; } mpc_bool_t CNSFileHandleCanSeek (void *fileHandle) { return YES; } mpc_bool_t CNSFileHandleSeek (void *fileHandle, int offset) { [(NSFileHandle *) fileHandle seekToFileOffset: (long long) offset]; return YES; } int CNSFileHandleGetSize (void *fileHandle) { int size, where; where = [(NSFileHandle *) fileHandle offsetInFile]; size = [(NSFileHandle *) fileHandle seekToEndOfFile]; [(NSFileHandle *) fileHandle seekToFileOffset: (long long) where]; return size; } cynthiune.app-0.9.5/Bundles/Mod/0000755000175000017500000000000010413173130015756 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/Mod/GNUmakefile.preamble0000644000175000017500000000232310345610403021621 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_INCLUDE_DIRS += -I../.. \ -I/usr/include/libmodplug \ -I/usr/local/include/libmodplug ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += -lmodplug -lstdc++ else ADDITIONAL_LDFLAGS += -lmodplug -lstdc++ endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/Mod/Mod.h0000644000175000017500000000175110064436674016673 0ustar gurkangurkan/* Mod.h - this file is part of Cynthiune * * Copyright (C) 2004 Rob Burns, Gurkan Sengun * * Author: Rob Burns * Gurkan Sengun * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ @interface Mod : NSObject { ModPlugFile* _mp_file; } @end cynthiune.app-0.9.5/Bundles/Mod/GNUmakefile0000644000175000017500000000301410224643553020041 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=Mod BUNDLE_NAME=Mod BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune Mod_PRINCIPAL_CLASS=Mod # # Additional libraries # Mod_LIBRARIES_DEPEND_UPON += # # Resource files # Mod_RESOURCE_FILES= # # Header files # Mod_HEADERS= \ Mod.h # # Class files # Mod_OBJC_FILES= \ Mod.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Bundles/Mod/Mod.m0000644000175000017500000000777010410151530016663 0ustar gurkangurkan/* Mod.m - this file is part of Cynthiune * * Copyright (C) 2004 Rob Burns, Gurkan Sengun, Wolfgang Sourdeau * * Authors: Rob Burns * Gurkan Sengun * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import "Mod.h" #define LOCALIZED(X) _b ([Mod class], X) #define NBR_OF_CHANNELS 2 #define FRAME_RATE 44100 @implementation Mod : NSObject + (void) initialize { ModPlug_Settings settings; #ifdef __MACOSX__ [super initialize]; #endif ModPlug_GetSettings (&settings); settings.mFlags |= MODPLUG_ENABLE_OVERSAMPLING; settings.mResamplingMode = MODPLUG_RESAMPLE_FIR; settings.mChannels = NBR_OF_CHANNELS; settings.mBits = 16; settings.mFrequency = FRAME_RATE; ModPlug_SetSettings (&settings); } + (NSString *) bundleDescription { return @"Extension plug-in for various music tracker file formats"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2004 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return nil; } - (BOOL) streamOpen: (NSString *) fileName; { NSFileHandle *fileHandle; NSData *content; BOOL result; result = NO; fileHandle = [NSFileHandle fileHandleForReadingAtPath: fileName]; if (fileHandle) { content = [fileHandle readDataToEndOfFile]; _mp_file = ModPlug_Load ([content bytes], [content length]); if (_mp_file) result = YES; else NSLog (@"Mod: could not load '%@'", fileName); [fileHandle closeFile]; } else NSLog (@"Mod: no native handle..."); return result; } + (BOOL) canTestFileHeaders { return NO; } + (BOOL) streamTestOpen: (NSString *) fileName { return NO; } - (int) readNextChunk: (unsigned char*) buffer withSize: (unsigned int) bufferSize { int count; if (_mp_file) { count = ModPlug_Read (_mp_file, buffer, bufferSize); #if (BYTE_ORDER == BIG_ENDIAN) invertBytesInBuffer ((char *) buffer, count); #endif } else count = -1; return count; } - (unsigned int) readChannels { return NBR_OF_CHANNELS; } - (unsigned long) readRate { return FRAME_RATE; } - (unsigned int) readDuration { return (ModPlug_GetLength (_mp_file) / 1000); } - (NSString *) readTitle { return [NSString stringWithCString: ModPlug_GetName (_mp_file)]; } - (NSString *) readGenre { return @""; } - (NSString *) readArtist { return @""; } - (NSString *) readAlbum { return @""; } - (NSString *) readYear { return @""; } - (NSString *) readTrackNumber { return @""; } - (void) streamClose { ModPlug_Unload (_mp_file); _mp_file = NULL; } // Player Protocol + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"669", @"amf", @"ams", @"dbm", @"dmf", @"dsm", @"far", @"it", @"j2b", @"mdl", @"med", @"mod", @"mt2", @"mtm", @"okt", @"psm", @"ptm", @"s3m", @"stm", @"ult", @"umx", @"mod", @"xm", nil]; } - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { ModPlug_Seek (_mp_file, aPos * 1000); } @end cynthiune.app-0.9.5/Bundles/FLAC/0000755000175000017500000000000010413173130015744 5ustar gurkangurkancynthiune.app-0.9.5/Bundles/FLAC/GNUmakefile.preamble0000644000175000017500000000217610345610403021615 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune -*-makefile-*- # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_INCLUDE_DIRS += -I../.. FLAC_LIBS := -lFLAC ifeq (mingw32, $(GNUSTEP_TARGET_OS)) ADDITIONAL_GUI_LIBS += $(FLAC_LIBS) else ADDITIONAL_LDFLAGS += $(FLAC_LIBS) endif ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifeq ($(debug), yes) ADDITIONAL_LDFLAGS += -lmcheck endif cynthiune.app-0.9.5/Bundles/FLAC/FLAC.h0000644000175000017500000000245510407750507016644 0ustar gurkangurkan/* FLAC.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef FLAC_H #define FLAC_H #import @class NSString; @protocol TagsReading; @interface FLAC : NSObject { FLAC__FileDecoder *fileDecoder; unsigned int bitsPerSample; unsigned int duration; unsigned int channels; unsigned long rate; unsigned char *readBuffer; unsigned int position; unsigned int readBufferSize; } @end typedef struct { @defs (FLAC); } CFLAC; #endif /* FLAC_H */ cynthiune.app-0.9.5/Bundles/FLAC/FLAC.m0000644000175000017500000001652210410071201016626 0ustar gurkangurkan/* FLAC.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE 1 #import #import #import #import #import #import #import #import #import #import "FLAC.h" #define LOCALIZED(X) _b ([FLAC class], X) static FLAC__StreamDecoderWriteStatus writeCallback (const FLAC__FileDecoder *fileDecoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *clientData) { CFLAC *cStream; unsigned int sample, channel; unsigned char *bufferPtr; cStream = clientData; if (cStream->readBuffer) free (cStream->readBuffer); cStream->readBufferSize = (frame->header.blocksize * cStream->channels * cStream->bitsPerSample / 8); cStream->readBuffer = malloc (cStream->readBufferSize); bufferPtr = cStream->readBuffer; if (cStream->bitsPerSample == 8) for (sample = 0; sample < frame->header.blocksize; sample++) for (channel = 0; channel < cStream->channels; channel++) *bufferPtr++ = buffer[channel][sample]; else if (cStream->bitsPerSample == 16) for (sample = 0; sample < frame->header.blocksize; sample++) for (channel = 0; channel < cStream->channels; channel++) { *bufferPtr++ = buffer[channel][sample] & 0x00FF; *bufferPtr++ = (buffer[channel][sample] & 0xff00) >> 8; } return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } static void metadataCallback (const FLAC__FileDecoder *fileDecoder, const FLAC__StreamMetadata *metadata, void *clientData) { CFLAC *cStream; if (metadata->type == FLAC__METADATA_TYPE_STREAMINFO) { cStream = clientData; cStream->channels = metadata->data.stream_info.channels; cStream->rate = metadata->data.stream_info.sample_rate; cStream->bitsPerSample = metadata->data.stream_info.bits_per_sample; cStream->duration = (metadata->data.stream_info.total_samples / metadata->data.stream_info.sample_rate); } } static void errorCallback (const FLAC__FileDecoder *fileDecoder, FLAC__StreamDecoderErrorStatus status, void *clientData) { NSLog (@"FLAC: received error with status %d", status); } @implementation FLAC : NSObject + (NSString *) bundleDescription { return @"Extension plug-in for the Free Lossless Audio Codec"; } + (NSArray *) bundleCopyrightStrings { return [NSArray arrayWithObjects: @"Copyright (C) 2004 Wolfgang Sourdeau", nil]; } + (NSArray *) compatibleTagBundles { return [NSArray arrayWithObjects: @"FLACTags", @"TagLib", nil]; } + (NSArray *) acceptedFileExtensions { return [NSArray arrayWithObjects: @"fla", @"flac", nil]; } + (BOOL) canTestFileHeaders { return YES; } + (BOOL) streamTestOpen: (NSString *) fileName { FILE *_f; char buffer[4]; BOOL result; _f = fopen ([fileName cString], "r"); if (_f) { result = (fread (buffer, 1, 4, _f) == 4 && strncmp (buffer, "fLaC", 4) == 0); fclose (_f); } else result = NO; return result; } - (id) init { if ((self = [super init])) { duration = 0; channels = 0; rate = 0; position = 0; readBuffer = NULL; readBufferSize = 0; } return self; } - (BOOL) _initializeFileDecoderWithFilename: (NSString *) fileName { FLAC__file_decoder_set_metadata_ignore_all (fileDecoder); FLAC__file_decoder_set_metadata_respond (fileDecoder, FLAC__METADATA_TYPE_STREAMINFO); FLAC__file_decoder_set_metadata_callback (fileDecoder, metadataCallback); FLAC__file_decoder_set_write_callback (fileDecoder, writeCallback); FLAC__file_decoder_set_error_callback (fileDecoder, errorCallback); FLAC__file_decoder_set_client_data (fileDecoder, self); return (FLAC__file_decoder_set_filename (fileDecoder, [fileName cString]) && (FLAC__file_decoder_init (fileDecoder) == FLAC__FILE_DECODER_OK) && FLAC__file_decoder_process_until_end_of_metadata (fileDecoder)); } - (BOOL) streamOpen: (NSString *) fileName { BOOL result; fileDecoder = FLAC__file_decoder_new(); if (fileDecoder) { if ([self _initializeFileDecoderWithFilename: fileName]) result = YES; else { FLAC__file_decoder_delete (fileDecoder); fileDecoder = NULL; result = NO; } } else result = NO; return result; } - (void) streamClose { FLAC__file_decoder_delete (fileDecoder); fileDecoder = NULL; } - (int) _processNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int readBytes; unsigned int maxSize; BOOL success; success = YES; if (position >= readBufferSize) { position = 0; success = FLAC__file_decoder_process_single (fileDecoder); } if (success) { if (bitsPerSample == 8) { maxSize = bufferSize / 2; if (maxSize > (readBufferSize - position)) maxSize = readBufferSize - position; convert8to16 (readBuffer + position, buffer, maxSize); position += maxSize; readBytes = maxSize * 2; } else if (bitsPerSample == 16) { maxSize = bufferSize; if (maxSize > (readBufferSize - position)) maxSize = readBufferSize - position; memcpy (buffer, readBuffer + position, maxSize); position += maxSize; readBytes = maxSize; } else readBytes = -1; } else readBytes = -1; return readBytes; } - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize { int readBytes; FLAC__FileDecoderState state; state = FLAC__file_decoder_get_state (fileDecoder); if (state == FLAC__FILE_DECODER_OK) readBytes = [self _processNextChunk: buffer withSize: bufferSize]; else if (state == FLAC__FILE_DECODER_END_OF_FILE) readBytes = 0; else readBytes = -1; return readBytes; } - (BOOL) isSeekable { return YES; } - (void) seek: (unsigned int) aPos { FLAC__file_decoder_seek_absolute (fileDecoder, aPos * rate); } - (unsigned int) readChannels { return channels; } - (unsigned long) readRate { return rate; } - (unsigned int) readDuration { return duration; } - (void) dealloc { if (readBuffer) free (readBuffer); if (fileDecoder) FLAC__file_decoder_delete (fileDecoder); [super dealloc]; } @end cynthiune.app-0.9.5/Bundles/FLAC/GNUmakefile0000644000175000017500000000302610224643553020032 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003, 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. include $(GNUSTEP_MAKEFILES)/common.make # # Subprojects # # # Bundle # PACKAGE_NAME=FLAC BUNDLE_NAME=FLAC BUNDLE_EXTENSION=.format BUNDLE_INSTALL_DIR=$(GNUSTEP_INSTALLATION_DIR)/Library/Cynthiune FLAC_PRINCIPAL_CLASS=FLAC # # Additional libraries # FLAC_LIBRARIES_DEPEND_UPON += # # Resource files # FLAC_RESOURCE_FILES= # # Header files # FLAC_HEADERS= \ FLAC.h # # Class files # FLAC_OBJC_FILES= \ FLAC.m ADDITIONAL_INCLUDE_DIRS += -I../../Frameworks FRAMEWORKS_DIRS = ../../Frameworks/Cynthiune FRAMEWORKS = Cynthiune include ../../frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/bundle.make -include GNUmakefile.postamble cynthiune.app-0.9.5/Slovak.lproj/0000755000175000017500000000000010413173130016227 5ustar gurkangurkancynthiune.app-0.9.5/Slovak.lproj/Localizable.strings0000644000175000017500000001574410345630144022105 0ustar gurkangurkan/* Saso Kiselkov <diablos@manga.sk> */ /* Application menu */ "Info" = "Info"; "Playlist" = "Zoznam skladieb"; "Songs" = "Skladby"; "Player" = "Prehrva "; "Windows" = "Okn"; "Window" = "Okno"; "Tools" = "Nstroje"; "Services" = "Slu~by"; "Hide" = "Skrye"; "Hide Cynthiune" = "Skrye Cynthiune"; "Hide Others" = "Skrye ostatnch"; "Show All" = "Uk~ vaetky"; "Quit" = "Ukon ie"; "Quit Cynthiune" = "Ukon ie Cynthiune"; /* Info submenu */ "Info Panel..." = "Info panel..."; "About Cynthiune..." = "O Cynthiune..."; "Preferences..." = "Nastavenia"; "Send A Bug Report..." = "Poslae chybov sprvu..."; "Help..." = "Pomocnk..."; "Help" = "Pomocnk"; "Cynthiune Help" = "Pomocnk pre Cynthiune"; /* Playlist submenu */ "Open..." = "Otvorie..."; "New" = "Nov"; "Save..." = "Ulo~ie..."; "Save As..." = "Ulo~ie ako..."; "Save To..." = "Ulo~ie do..."; "Revert To Saved" = "Navrtie k ulo~enmu"; "Close" = "Zatvorie"; /* Songs submenu */ "Add Songs..." = "Pridae skladby..."; "Remove Selection" = "Odstrnie vber"; "Remove All" = "Odstrnie vaetky"; "Cleanup" = "Vy istie"; /* Player submenu */ "Play" = "Prehrae"; "Pause" = "Pauza"; "Stop" = "Stop"; "Previous" = "Predoal"; "Next" = "a>aia"; "Mode" = "Md"; /* Player/Mode submenu */ "Repeat" = "Opakovae"; "Shuffle" = "Nhodne"; /* Tools submenu */ "Song Inspector..." = "Inapektor skladieb..."; /* Windows submenu */ "Arrange In Front" = "Usporiadaj vpredu..."; "Miniaturize Window" = "Miniaturizuj okno"; "Minimize" = "Minimalizuj"; "Close Window" = "Zatvor okno"; /* Playlist status label */ "%d songs - total time: %@" = "%d skladieb - celkov  as: %@"; " - selection: %@" = " - vber: %@"; /* Playlist table */ "Song" = "Skladba"; "Time" = " as"; /* Song Inspector */ "Song Inspector" = "Inapektor skladieb"; "Song Information" = "Informcie o skladbe"; "Format Attributes" = "Formtov atribty"; "No song selected" = "Nie je zvolen ~iadna skladba"; "Lookup through MusicBrainz..." = "Vyh>adaj cez MusicBrainz..."; "Title" = "Titul"; "Album" = "Album"; "Track" = "Stopa"; "Artist" = "Umelec"; "Genre" = "}ner"; "Year" = "Rok"; "Reset" = "Reset"; "Save" = "Ulo~ie"; "Generating TRM..." = "Generujem TRM..."; "Querying MusicBrainz server..." = "Ptam sa MusicBrainz servera..."; "Received %d result(s)" = "Dostal som %d vsledkov"; /* Dialog boxes */ "Add music files..." = "Pridae hudobn sbory..."; "Add a music folder..." = "Pridae hudobn zlo~ku..."; "Save playlist as..." = "Ulo~ie zoznam skladieb ako..."; /* Song names */ "[not found: %@]" = "[nenjden: %@]"; "[unknown format: %@]" = "[neznmy formt: %@]"; "[format error: %@]" = "[formtov chyba: %@]"; /* Preference dialog */ "None" = "}iaden"; "Preferences" = "Nastavenia"; "General" = "Vaeobecn"; /* General preferences */ "Windows" = "Okn"; "Playlists" = "Zoznamy skladieb"; "Use absolute filenames" = "Pou~vaj absoltne sborov cesty"; "Output module" = "Vstupn modul"; "Textured" = "Texturovan"; "Sticky" = "Pri>nav"; "Remember location" = "Pamtaj si lokciu"; "Format" = "Formt"; /* MB results panel */ "Please select the correct information..." = "Prosm zvo>te sprvne informcie..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "Po~iadavka na MusicBrainz server vrtila viac ako jednen vsledok.\nProsm zvo>te vsledok z nasledcej tabu>ky, ktor je najvhodneja."; "Cancel" = "Zruaie"; cynthiune.app-0.9.5/Slovak.lproj/InfoPlist.strings0000644000175000017500000000160610375350155021567 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/SongInspectorController.m0000644000175000017500000003761410411076635020707 0ustar gurkangurkan/* SongInspectorController.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "CynthiuneAnimatedImageView.h" #import "MBResultsPanel.h" #import "Song.h" #import "SongInspectorController.h" #define LOCALIZED(X) NSLocalizedString (X, nil) #define busyTrmId "c457a4a8-b342-4ec9-8f13-b6bd26c0e400" static NSNotificationCenter *nc = nil; NSString *SongInspectorWasShownNotification = @"SongInspectorWasShownNotification"; NSString *SongInspectorWasHiddenNotification = @"SongInspectorWasHiddenNotification"; NSString *SongInspectorDidUpdateSongNotification = @"SongInspectorDidUpdateSongNotification"; static inline char** MakeQis (char *trmId, Song *song) { const char **qis; qis = malloc (7 * sizeof (char *)); qis[0] = trmId; qis[1] = [[song artist] UTF8String]; qis[2] = [[song album] UTF8String]; qis[3] = [[song title] UTF8String]; qis[4] = [[song trackNumber] UTF8String]; qis[5] = [[[song duration] stringValue] UTF8String]; qis[6] = NULL; return (char **) qis; } static inline void FreeQis (char *qis[]) { free (qis[0]); free (qis); } @implementation SongInspectorController : NSObject + (void) initialize { nc = [NSNotificationCenter defaultCenter]; } + (SongInspectorController *) songInspectorController { static SongInspectorController *singleton = nil; if (!singleton) singleton = [self new]; return singleton; } - (id) init { if ((self == [super init])) { song = nil; [NSBundle loadNibNamed: @"SongInspector" owner: self]; [titleField setDelegate: self]; [albumField setDelegate: self]; [trackField setDelegate: self]; [artistField setDelegate: self]; [genreField setDelegate: self]; [yearField setDelegate: self]; [lookupAnimation addFramesFromImagenames: @"anim-logo-1", @"anim-logo-2", @"anim-logo-3", @"anim-logo-4", @"anim-logo-5", @"anim-logo-6", @"anim-logo-7", @"anim-logo-8", nil]; [lookupAnimation setInterval: .05]; threadRunning = NO; threadShouldDie = NO; } return self; } /* untestable method */ - (void) dealloc { if (delegate) [nc removeObserver: delegate name: nil object: self]; [super dealloc]; } - (void) _enableWindowButtons { [resetButton setEnabled: YES]; [saveButton setEnabled: YES]; } - (void) _disableWindowButtons { [resetButton setEnabled: NO]; [saveButton setEnabled: NO]; } - (void) _setFieldsEditable: (BOOL) editable { [titleField setEditable: editable]; [albumField setEditable: editable]; [trackField setEditable: editable]; [artistField setEditable: editable]; [genreField setEditable: editable]; [yearField setEditable: editable]; if (editable) { if (!threadRunning) { [lookupButton setEnabled: YES]; [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-on"]]; [lookupAnimation setImage: nil]; [lookupStatusLabel setStringValue: @""]; } } else { [lookupButton setEnabled: NO]; [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-off"]]; [lookupAnimation setImage: [NSImage imageNamed: @"lock"]]; [lookupStatusLabel setStringValue: @""]; } } - (void) _updateFields { [self _disableWindowButtons]; if (song) { [filenameField setStringValue: [song filename]]; [titleField setStringValue: [song title]]; [albumField setStringValue: [song album]]; [trackField setStringValue: [song trackNumber]]; [artistField setStringValue: [song artist]]; [genreField setStringValue: [song genre]]; [yearField setStringValue: [song year]]; [self _setFieldsEditable: [song songInfosCanBeModified]]; } else { [filenameField setStringValue: LOCALIZED (@"No song selected")]; [titleField setStringValue: @""]; [albumField setStringValue: @""]; [trackField setStringValue: @""]; [artistField setStringValue: @""]; [genreField setStringValue: @""]; [yearField setStringValue: @""]; [self _setFieldsEditable: NO]; } } - (void) _updateSelector { id menuItem; int count, max; max = [pageSelector numberOfItems]; for (count = 0; count < max; count++) { menuItem = [pageSelector itemAtIndex: count]; [menuItem setTitle: LOCALIZED ([menuItem title])]; } [pageSelector sizeToFit]; [pageSelector centerViewHorizontally]; } - (void) _updateWidgets { [titleLabel setStringValue: LOCALIZED (@"Title")]; [albumLabel setStringValue: LOCALIZED (@"Album")]; [trackLabel setStringValue: LOCALIZED (@"Track")]; [artistLabel setStringValue: LOCALIZED (@"Artist")]; [genreLabel setStringValue: LOCALIZED (@"Genre")]; [yearLabel setStringValue: LOCALIZED (@"Year")]; [resetButton setTitle: LOCALIZED (@"Reset")]; [saveButton setTitle: LOCALIZED (@"Save")]; [resetButton sizeToFit]; [saveButton sizeToFit]; [resetButton arrangeViewLeftTo: saveButton]; [lookupButton setToolTip: LOCALIZED (@"Lookup through MusicBrainz...")]; [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-off"]]; // [lookupButton sizeToFit]; // [lookupButton centerViewHorizontally]; [inspectorPanel setTitle: LOCALIZED (@"Song Inspector")]; [inspectorPanel setLevel: NSStatusWindowLevel]; [inspectorPanel setDelegate: self]; } - (void) awakeFromNib { [self _updateSelector]; [self _updateWidgets]; [self _updateFields]; } - (void) setDelegate: (id) anObject { if (delegate) [nc removeObserver: delegate name: nil object: self]; delegate = anObject; if ([delegate respondsToSelector: @selector(songInspectorWasShown:)]) [nc addObserver: delegate selector: @selector (songInspectorWasShown:) name: SongInspectorWasShownNotification object: self]; if ([delegate respondsToSelector: @selector(songInspectorWasHidden:)]) [nc addObserver: delegate selector: @selector (songInspectorWasHidden:) name: SongInspectorWasHiddenNotification object: self]; if ([delegate respondsToSelector: @selector(songInspectorDidUpdateSong:)]) [nc addObserver: delegate selector: @selector (songInspectorDidUpdateSong:) name: SongInspectorDidUpdateSongNotification object: self]; } - (id) delegate { return delegate; } - (void) setSong: (Song *) newSong { if (song != newSong) { if (threadRunning) threadShouldDie = YES; SET (song, newSong); [self _updateFields]; } } - (Song *) song { return song; } /* button actions */ - (void) reset: (id) sender { [self _updateFields]; } - (void) save: (id) sender { [self _disableWindowButtons]; [song setTitle: [titleField stringValue] artist: [artistField stringValue] album: [albumField stringValue] genre: [genreField stringValue] trackNumber: [trackField stringValue] year: [yearField stringValue]]; [nc postNotificationName: SongInspectorDidUpdateSongNotification object: self userInfo: [NSDictionary dictionaryWithObject: song forKey: @"song"]]; } - (char *) _generateTrmId { id stream; trm_t trmGen; int size; char sig[17]; unsigned char buffer[4096]; char *trmId; stream = [song openStreamForSong]; if (stream) { trmGen = trm_New (); trm_SetPCMDataInfo (trmGen, [stream readRate], [stream readChannels], 16); trm_SetSongLength (trmGen, [stream readDuration]); size = [stream readNextChunk: buffer withSize: 4096]; while (!trm_GenerateSignature (trmGen, (char *) buffer, size)) size = [stream readNextChunk: buffer withSize: 4096]; trm_FinalizeSignature (trmGen, sig, NULL); trmId = malloc (37); trm_ConvertSigToASCII (trmGen, sig, trmId); trm_Delete (trmGen); [stream streamClose]; } else trmId = NULL; return trmId; } - (void) updateField: (NSTextField *) field withString: (NSString *) string { if (!threadShouldDie) [field performSelectorOnMainThread: @selector (setStringValue:) withObject: string waitUntilDone: NO]; } - (BOOL) _updateInfoField: (NSTextField *) field withString: (NSString *) string { BOOL result; if (!string) string = @""; if (![[field stringValue] isEqualToString: string]) { [field setStringValue: string]; result = YES; } else result = NO; return result; } - (void) _updateFieldsWithTrackInfos: (NSDictionary *) trackInfos { BOOL changes; changes = [self _updateInfoField: titleField withString: [trackInfos objectForKey: @"title"]]; changes |= [self _updateInfoField: albumField withString: [trackInfos objectForKey: @"album"]]; changes |= [self _updateInfoField: trackField withString: [trackInfos objectForKey: @"trackNumber"]]; changes |= [self _updateInfoField: artistField withString: [trackInfos objectForKey: @"artist"]]; changes |= [self _updateInfoField: yearField withString: [trackInfos objectForKey: @"year"]]; if (changes) [self _enableWindowButtons]; } - (void) _updateSongFields: (NSArray *) allTrackInfos { unsigned int numberOfTracks; numberOfTracks = [allTrackInfos count]; [lookupStatusLabel setStringValue: [NSString stringWithFormat: LOCALIZED (@"Received %d result(s)"), numberOfTracks]]; if (numberOfTracks == 1) [self _updateFieldsWithTrackInfos: [allTrackInfos objectAtIndex: 0]]; else if (numberOfTracks > 1) [[MBResultsPanel resultsPanel] showPanelForTrackInfos: allTrackInfos aboveWindow: inspectorPanel target: self selector: @selector (_updateFieldsWithTrackInfos:)]; } - (NSDictionary *) readMB: (musicbrainz_t) mb track: (int) track { NSMutableDictionary *trackInfos; NSString *string; char cString[100]; int releases; trackInfos = [NSMutableDictionary new]; [trackInfos autorelease]; mb_Select1 (mb, MBS_SelectTrack, track); if (mb_GetResultData (mb, MBE_TrackGetTrackName, cString, 100)) { string = [NSString stringWithUTF8String: cString]; [trackInfos setObject: string forKey: @"title"]; } if (mb_GetResultData (mb, MBE_TrackGetArtistName, cString, 100)) { string = [NSString stringWithUTF8String: cString]; [trackInfos setObject: string forKey: @"artist"]; } if (mb_GetResultData (mb, MBE_TrackGetTrackNum, cString, 100)) { string = [NSString stringWithUTF8String: cString]; [trackInfos setObject: string forKey: @"trackNumber"]; } if (mb_Select (mb, MBS_SelectTrackAlbum)) { if (mb_GetResultData (mb, MBE_AlbumGetAlbumName, cString, 100)) { string = [NSString stringWithUTF8String: cString]; [trackInfos setObject: string forKey: @"album"]; } #ifdef MBE_AlbumGetNumReleaseDates releases = mb_GetResultInt (mb, MBE_AlbumGetNumReleaseDates); if (releases) { mb_Select1 (mb, MBS_SelectReleaseDate, 1); if (mb_GetResultData (mb, MBE_ReleaseGetDate, cString, 100)) { *(cString + 4) = 0; string = [NSString stringWithUTF8String: cString]; [trackInfos setObject: string forKey: @"year"]; } mb_Select (mb, MBS_Back); } #endif mb_Select (mb, MBS_Back); } mb_Select (mb, MBS_Rewind); return trackInfos; } - (void) _parseMB: (musicbrainz_t) mb { int count, results; NSMutableArray *allTrackInfos; results = mb_GetResultInt (mb, MBE_GetNumTracks); allTrackInfos = [[NSMutableArray alloc] initWithCapacity: results]; [allTrackInfos autorelease]; for (count = 0; count < results; count++) [allTrackInfos addObject: [self readMB: mb track: count + 1]]; [self performSelectorOnMainThread: @selector (_updateSongFields:) withObject: allTrackInfos waitUntilDone: YES]; } - (void) lookupThread { NSAutoreleasePool *pool; char *trmId; musicbrainz_t mb; char **qis; char error[80]; pool = [NSAutoreleasePool new]; [self updateField: lookupStatusLabel withString: LOCALIZED(@"Generating TRM...")]; trmId = [self _generateTrmId]; if (trmId && !threadShouldDie) { qis = MakeQis (trmId, song); if (strcasecmp (trmId, busyTrmId)) { [self updateField: lookupStatusLabel withString: LOCALIZED (@"Querying MusicBrainz server...")]; mb = mb_New (); mb_UseUTF8 (mb, YES); if (mb_QueryWithArgs (mb, MBQ_TrackInfoFromTRMId, qis)) [self _parseMB: mb]; else { // FIXME: there should be an accurate error message here... [self updateField: lookupStatusLabel withString: @""]; mb_GetQueryError (mb, error, 80); NSLog (@"Musicbrainz error: %s (%s)", error, trmId); } mb_Delete (mb); } else [self updateField: lookupStatusLabel withString: LOCALIZED (@"The MusicBrainz server was too busy")]; FreeQis (qis); } [self performSelectorOnMainThread: @selector (lookupThreadEnded) withObject: nil waitUntilDone: NO]; [pool release]; } - (void) mbLookup: (id)sender { if (song) { if (!threadRunning) { threadRunning = YES; [lookupAnimation startAnimation]; [lookupButton setEnabled: NO]; [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-off"]]; [NSThread detachNewThreadSelector: @selector (lookupThread) toTarget: self withObject: nil]; } } else NSLog (@"how could that method be called?"); } - (void) lookupThreadEnded { threadRunning = NO; threadShouldDie = NO; [lookupAnimation stopAnimation]; if (song && [song songInfosCanBeModified]) { [lookupButton setEnabled: YES]; [lookupButton setImage: [NSImage imageNamed: @"lookup-mb-on"]]; } } - (void) toggleDisplay { if ([inspectorPanel isVisible]) [inspectorPanel close]; else [inspectorPanel makeKeyAndOrderFront: self]; } /* inspector delegate */ - (void) windowDidBecomeKey: (NSNotification*) aNotif { if ([aNotif object] == inspectorPanel) [nc postNotificationName: SongInspectorWasShownNotification object: self]; } - (void) windowWillClose: (NSNotification *) aNotif { if ([aNotif object] == inspectorPanel) [nc postNotificationName: SongInspectorWasHiddenNotification object: self]; } /* textfields delegate */ - (void) controlTextDidChange:(NSNotification *)aNotification { [self _enableWindowButtons]; } @end cynthiune.app-0.9.5/CynthiuneFadingTextField.m0000644000175000017500000001074610375211622020727 0ustar gurkangurkan/* CynthiuneFadingTextField.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "CynthiuneFadingTextField.h" #ifdef __MACOSX__ /* alpha channels don't work correctly on GNUstep */ #define _colorWithFactor(X) \ [NSColor colorWithDeviceRed: red \ green: green \ blue: blue \ alpha: (alpha * X)] #else /* __MACOSX__ */ #define _colorWithFactor(X) \ [NSColor colorWithDeviceRed: (red * X) \ green: (green * X) \ blue: (blue * X) \ alpha: (alpha * X)] #endif /* __MACOSX__ */ @implementation CynthiuneFadingTextField : NSTextField - (void) _setDefaults { NSColor *color; color = [super textColor]; [color getRed: &red green: &green blue: &blue alpha: &alpha]; fadeoutClone = [[NSTextField alloc] initWithFrame: [self frame]]; [fadeoutClone setCell: [[self cell] copy]]; [fadeoutClone setStringValue: [self stringValue]]; [fadeoutClone setBezeled: NO]; [fadeoutClone setBordered: NO]; [fadeoutClone setDrawsBackground: NO]; [fadeoutClone setTextColor: color]; iteration = 0; interval = 0.050; numberOfIterations = 16; } - (void) awakeFromNib { [[self superview] addSubview: fadeoutClone positioned: NSWindowBelow relativeTo: self]; } - (id) initWithFrame: (NSRect) frame { if ((self = [super initWithFrame: frame])) { [self _setDefaults]; } return self; } - (void) dealloc { [fadeoutClone release]; [super dealloc]; } - (void) setTextColorWithFactor: (float) factor { [super setTextColor: _colorWithFactor (factor)]; [fadeoutClone setTextColor: _colorWithFactor (1.0 - factor)]; } - (void) _fadingIteration { float factor; iteration++; factor = (float) iteration / numberOfIterations; [self setTextColorWithFactor: factor]; if (iteration == numberOfIterations) { [fadeoutClone setStringValue: @""]; [fadingTimer invalidate]; fadingTimer = nil; } } - (void) _createFadingTimer { fadingTimer = [NSTimer timerWithTimeInterval: interval target: self selector: @selector (_fadingIteration) userInfo: nil repeats: YES]; [fadingTimer explode]; } - (void) setStringValue: (NSString *) string { NSString *oldString; oldString = [self stringValue]; if (![oldString isEqualToString: string]) { iteration = 0; [self setTextColorWithFactor: 0.0]; [fadeoutClone setStringValue: oldString]; [super setStringValue: string]; if (!fadingTimer) [self _createFadingTimer]; } } - (void) setFont: (NSFont *) font { [fadeoutClone setFont: font]; [super setFont: font]; } - (void) setAlignment: (NSTextAlignment) mode { [fadeoutClone setAlignment: mode]; [super setAlignment: mode]; } - (void) setTextColor: (NSColor *) color { [color getRed: &red green: &green blue: &blue alpha: &alpha]; if (!fadingTimer) [self setTextColorWithFactor: 1.0]; } - (NSColor *) textColor { return _colorWithFactor (1.0); } - (void) setInterval: (NSTimeInterval) timeInterval { interval = timeInterval; } - (NSTimeInterval) interval { return interval; } - (void) setNumberOfIterations: (unsigned int) integer { numberOfIterations = integer; } - (unsigned int) numberOfIterations { return numberOfIterations; } - (id) initWithCoder: (NSCoder*) aDecoder { self = [super initWithCoder: aDecoder]; [super setStringValue: @""]; [self _setDefaults]; return self; } @end cynthiune.app-0.9.5/GNUmakefile0000644000175000017500000001370410413174062015727 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2003-2006 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # include $(GNUSTEP_MAKEFILES)/common.make GNUSTEP_INSTALLATION_DIR=$(GNUSTEP_LOCAL_ROOT)/ FRAMEWORKS_DIRS = Frameworks/Cynthiune FRAMEWORKS = Cynthiune # # Subprojects # BUNDLES = ifneq (yes,$(disable-bundles)) ifneq (yes,$(disable-mp3)) BUNDLES += MP3 endif ifneq (yes,$(disable-ogg)) BUNDLES += Ogg endif ifneq (yes,$(disable-audiofile)) BUNDLES += AudioFile endif ifneq (yes,$(disable-flac)) BUNDLES += FLAC endif ifneq (yes,$(disable-mod)) BUNDLES += Mod endif ifneq (yes,$(disable-windowsmedia)) BUNDLES += WindowsMedia endif ifneq (yes,$(disable-musepack)) BUNDLES += Musepack endif ifneq (yes,$(disable-timidity)) BUNDLES += Timidity endif ifneq (yes,$(disable-id3tag)) BUNDLES += ID3Tag endif ifneq (yes,$(disable-taglib)) BUNDLES += Taglib endif ifneq (yes,$(disable-asftags)) BUNDLES += ASFTags endif ifneq (yes,$(disable-flactags)) BUNDLES += FLACTags endif ifneq (yes,$(disable-vorbistags)) BUNDLES += VorbisTags endif ifeq (mingw32,$(GNUSTEP_TARGET_OS)) ifneq (yes,$(disable-waveout)) BUNDLES += WaveOut endif else ifneq (yes,$(disable-oss)) BUNDLES += OSS endif ifneq (yes,$(disable-esound)) BUNDLES += Esound endif ifneq (yes,$(disable-arts)) BUNDLES += aRts endif endif endif SUBPROJECTS = Frameworks/Cynthiune $(addprefix Bundles/,$(BUNDLES)) # # Main application # PACKAGE_NAME=Cynthiune APP_NAME=Cynthiune VERSION=0.9.5 Cynthiune_APPLICATION_ICON=Cynthiune.tiff Cynthiune_MAIN_MODEL_FILE=Cynthiune.gorm Cynthiune_LANGUAGES= \ Armenian English French German Hungarian Italian \ Slovak Spanish TraditionalChinese Cynthiune_LOCALIZED_RESOURCE_FILES=Localizable.strings # # Additional libraries # ADDITIONAL_GUI_LIBS += # # Resource files # NIB_FILES = \ Cynthiune.gorm \ GeneralPreference.gorm \ Preferences.gorm \ SongInspector.gorm buttons_IMAGE_FILES = \ Images/add.tiff \ Images/cleanup.tiff \ Images/eject.tiff \ Images/eject-pushed.tiff \ Images/next.tiff \ Images/next-pushed.tiff \ Images/pause.tiff \ Images/pause-pushed.tiff \ Images/play.tiff \ Images/play-pushed.tiff \ Images/playlist.tiff \ Images/playlist-pushed.tiff \ Images/previous.tiff \ Images/previous-pushed.tiff \ Images/remove.tiff \ Images/repeat.tiff \ Images/repeat-pushed.tiff \ Images/save-as.tiff \ Images/shuffle.tiff \ Images/shuffle-pushed.tiff \ Images/song-inspector.tiff \ Images/song-inspector-pushed.tiff \ Images/stop.tiff \ Images/stop-pushed.tiff Cynthiune_RESOURCE_FILES= \ Images/Cynthiune.tiff \ Images/Cynthiune-song-48.tiff \ Images/Cynthiune-playlist-48.tiff \ Images/cynthiune-splash.tiff \ Images/cynthiune-splash-faded.tiff \ Images/anim-logo-1.tiff \ Images/anim-logo-2.tiff \ Images/anim-logo-3.tiff \ Images/anim-logo-4.tiff \ Images/anim-logo-5.tiff \ Images/anim-logo-6.tiff \ Images/anim-logo-7.tiff \ Images/anim-logo-8.tiff \ Images/lock.tiff \ Images/lookup-mb-on.tiff \ Images/lookup-mb-off.tiff \ Images/dragged-song.tiff \ Images/dragged-songs.tiff \ Images/slider-knob-disabled.tiff \ Images/slider-knob-enabled.tiff \ Images/song-pointer.tiff \ Images/common_ToolbarSeparatorItem.tiff \ $(buttons_IMAGE_FILES) \ $(NIB_FILES) \ COPYING # # Header files # Cynthiune_HEADERS= \ BundleManager.h \ CynthiuneAnimatedImageView.h \ CynthiuneController.h \ CynthiuneFadingTextField.h \ CynthiuneHeaderCell.h \ CynthiunePauseButton.h \ CynthiunePopUpButton.h \ CynthiuneSliderCell.h \ CynthiuneSongTitleCell.h \ CynthiuneTextCell.h \ CynthiuneWindow.h \ DictionaryCoder.h \ FormatTester.h \ GeneralPreference.h \ InfoDisplayController.h \ M3UArchiver.h \ MBResultsPanel.h \ Player.h \ PlayerController.h \ PlayerPreference.h \ Playlist.h \ PlaylistArchiver.h \ PlaylistController.h \ PlaylistView.h \ PlaylistViewController.h \ PLSArchiver.h \ PreferencesController.h \ Song.h \ SongInspectorController.h # # Class files # Cynthiune_OBJC_FILES= \ main.m \ BundleManager.m \ CynthiuneAnimatedImageView.m \ CynthiuneController.m \ CynthiuneFadingTextField.m \ CynthiuneHeaderCell.m \ CynthiunePauseButton.m \ CynthiunePopUpButton.m \ CynthiuneSliderCell.m \ CynthiuneSongTitleCell.m \ CynthiuneTextCell.m \ CynthiuneWindow.m \ DictionaryCoder.m \ FormatTester.m \ GeneralPreference.m \ InfoDisplayController.m \ M3UArchiver.m \ MBResultsPanel.m \ Player.m \ PlayerController.m \ PlayerPreference.m \ Playlist.m \ PlaylistArchiver.m \ PlaylistController.m \ PlaylistView.m \ PlaylistViewController.m \ PLSArchiver.m \ PreferencesController.m \ Song.m \ SongInspectorController.m ifeq (yes,$(enable-goom)) Cynthiune_OBJC_FILES += GoomView.m endif ADDITIONAL_INCLUDE_DIRS += -IFrameworks include frameworks.make -include GNUmakefile.preamble -include GNUmakefile.local include $(GNUSTEP_MAKEFILES)/aggregate.make include $(GNUSTEP_MAKEFILES)/application.make -include GNUmakefile.postamble # unit tests test-all:: @-( cd Tests; make && make test ) 2> /dev/null test-app:: @-( cd Tests/Cynthiune_app; make && make test ) 2> /dev/null test-fwk:: @-( cd Tests/Cynthiune_framework; make && make test ) 2> /dev/null after-clean:: @-( cd Frameworks/CynthiuneTest && make clean ) 2> /dev/null @-( cd Tests && make clean ) 2> /dev/null after-distclean:: @-( cd Frameworks/CynthiuneTest && make distclean ) 2> /dev/null @-( cd Tests && make distclean ) 2> /dev/null cynthiune.app-0.9.5/TODO0000644000175000017500000000410610413173113014335 0ustar gurkangurkan* frontend: - make Cynthiune playlist-oriented (document interface?); - make Cynthiune themeable, if possible by supporting Winamp/XMMS skins; - the info menu should include a "Check for update..." option; - add the ability to remove duplicate songs; - having a dock-icon compatible with the systray freedesktop.org standard; - support for multimedia keyboards; - having the appicon show the title of the current song + remaining time or progression of the song, depending on how the player displays the time in the player window; - having a jukebox-style song selection and manipulation system; - update the preferences with options to tune all that can be tuned; * formats: - AAC/MP4 bundle - A52 (AC3) bundle - ability to play HTTP streams; - compatibility layer with XMMS plugins; - add exporter bundles, to convert streams into .wav and .ogg files; - format-specifiec metadata in the song inspector; * players: - CD writing output bundle; - implement CD reading, modify the open dialog so that it can read CD tracks; * playlist: - thread operations which are resource consuming such as adding Songs, to avoid the player from being interrupted. - write a full-featured playlist manager; - the sort order should be defined through a defined chain of parameters to compare with each other, configurable from the preference panel; * translations: - write translations; * documentation: - write a user manual; - a dev. manual (plugins) ?; * maybe: - scripting and/or remote control interface? * API: - rename the new classes of the Cynthiune framework to comply with the GNUstep/Cocoa naming convention * BUGS: - leaks?; - drag & dropping mechanism put files at the end of the list, notwithstanding the positiong they were dragged to, things need to be cleaned up and rearranged between PlaylistController and TableViewController; - the logic behind the management of the current song needs to be separated and put in a PlayerController only, not the PlaylistController; - playing too fast on certain arches; - take care of the FIXME's; ( $Id: TODO,v 1.79 2006/03/31 08:36:01 wolfgang Exp $ ) cynthiune.app-0.9.5/Preferences.nib/0000755000175000017500000000000010413173130016653 5ustar gurkangurkancynthiune.app-0.9.5/Preferences.nib/info.nib0000644000175000017500000000070210344411277020311 0ustar gurkangurkan IBDocumentLocation 27 95 356 240 0 0 1024 746 IBFramework Version 283.0 IBOpenObjects 5 IBSystem Version 6R73 cynthiune.app-0.9.5/Preferences.nib/classes.nib0000644000175000017500000000073510344411277021021 0ustar gurkangurkan{ IBClasses = ( {CLASS = CynthiunePopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = {bundleChanged = id; }; CLASS = PreferencesController; LANGUAGE = ObjC; OUTLETS = {bundleSelector = id; bundleViewBox = id; prefsWindow = id; }; SUPERCLASS = NSObject; } ); IBVersion = 1; }cynthiune.app-0.9.5/Preferences.nib/keyedobjects.nib0000644000175000017500000001102610344411277022032 0ustar gurkangurkanbplist00Y$archiverX$versionX$objectsT$top_NSKeyedArchivers (,-348<DKbcdeimtx  "$'()*+./35689;<?@CFHJLWXYZ[%\^`bstuvwxyz{|}~U$null  !"#$%&']NSFontManagerV$classYNSNextOid_NSVisibleWindowsVNSRoot\NSOidsValues_NSClassesValues]NSConnections]NSNamesValues]NSObjectsKeysZNSOidsKeys]NSClassesKeys[NSFramework[NSNamesKeys_NSObjectsValuesrb`UQa_TS )*+[NSClassName_PreferencesController./01Z$classnameX$classes^NSCustomObject02XNSObject_IBCocoaFramework 567ZNS.objects./9:\NSMutableSet9;2UNSSet 5=>0?@ABC HJLN EFGHIJWNSLabel]NSDestinationXNSSourceGF L MNOPQRSTUVWXYZ[\]^_`a\NSWindowViewYNSWTFlags]NSWindowTitleYNSMinSizeYNSMaxSize\NSWindowRect_NSWindowStyleMask_NSWindowBacking\NSScreenRect]NSWindowClass[NSViewClassEx CD B _{{104, 312}, {331, 361}}[PreferencesWNSPanel fghYNS.stringTView./jk_NSMutableStringjl2XNSString nopqrs_NSNextResponderZNSSubviewsWNSFrame8A 5=uvw4 n)yzp{|}W~WVNSCell_NSOriginalClassNameYNSEnabled[NSSuperview3 _CynthiunePopUpButton]NSPopUpButton_{{99, 320}, {128, 22}} v_NSPreferredEdge_NSKeyEquivalentYNSSupport_NSAlternateContents]NSControlView\NSCellFlags2_NSPeriodicDelayZNSMenuItem_NSArrowPosition_NSUsesItemFromMenu_NSAlternateImage]NSButtonFlags[NSCellFlags]NSAltersState_NSPeriodicIntervalVNSMenu^NSButtonFlags22@AK VNSSizeVNSNameXNSfFlags"A0\LucidaGrande./VNSFont2 fgP fg ]NSMnemonicLoc\NSMixedImage_NSKeyEquivModMaskWNSStateWNSTitleXNSTargetXNSActionZNSKeyEquivYNSOnImage'$& [NSMenuItems1)(UItem1 )^NSResourceName#!"WNSImage_NSMenuCheckmark./_NSCustomResource2_%NSCustomResource )؀%_NSMenuMixedState__popUpItemAction:./ܢ2 fgZOtherViews 5=*- ŀ+,UItem2 ŀ./UItem3./^NSMutableArray2WNSArray./2./_NSPopUpButtonCelly2^NSMenuItemCell\NSButtonCell]%NSButtonCell\NSActionCell./^NSClassSwapper2n op|W  W]NSTransparentYNSOffsets_NSTitlePosition\NSBorderType]NSContentView[NSTitleCellYNSBoxType@5:6;9 5=  np|qww7_{{2, 2}, {333, 302}}./VNSView2[NSResponder_{{-6, -2}, {337, 306}}V{0, 0} ZNSContents?=< fgSBox  !"AP>./y#y2./%&UNSBox%2_{{1, 1}, {331, 361}}_{{0, 0}, {1024, 746}}Z{213, 129}_{3.40282e+38, 3.40282e+38}./,-_NSWindowTemplate,2[prefsWindow./01_NSNibOutletConnector022^NSNibConnector EFGH4wI]bundleViewBox EFGH7vK^bundleSelector EFGH:JMXdelegate EFG=>vPO^bundleChanged:./AB_NSNibControlConnectorA22 5DERvJwW./G2 5DIvWwWJ 5DKvJw 5DMNOPQRSTUVVWXYZ[\]^[NSMenuItem2\File's OwnerYPopUpList[NSMenuItem1UPanel 5D]v 5D_~ 5DaJ?CAw@vBW 5Dcdefghijklmnopqrcdefghijklmnopq     ./^NSIBObjectData2]IB.objectdata#,5:LQ:@ &2DFHJLNPRTVXZ\^`bkwy{ #%02468:KSajlnp (468ACEGIKMOQlx 4;Q[gikmoqr )?MZlw  (*,=DKTV[]_lu| ').0579;=JVXZ\bo~   " - 6 = ? A j l n t   $ 2 ? H W \    - 6 = D P i p  " ? H [ ` l u     % . F M V X k t y  ),5V_cynthiune.app-0.9.5/PlaylistArchiver.m0000644000175000017500000001231010355001631017304 0ustar gurkangurkan/* PlaylistArchiver.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE #import #import #import #import #import #import #import #import "DictionaryCoder.h" #import "GeneralPreference.h" #import "Song.h" #import "PlaylistArchiver.h" #ifdef __MACOSX__ @implementation NSObject (CynthiuneExtension) + (id) subclassResponsibility: (SEL) aSel { return nil; } @end #endif /* __MACOSX__ */ @implementation PlaylistArchiver : NSObject + (NSArray *) _encodeMetadataFromArray: (NSArray *) anArray { NSMutableArray *metadata; NSEnumerator *enumerator; DictionaryCoder *currentCoder; Song *currentSong; metadata = [NSMutableArray arrayWithCapacity: [anArray count]]; enumerator = [anArray objectEnumerator]; currentSong = [enumerator nextObject]; while (currentSong) { currentCoder = [DictionaryCoder new]; [currentCoder autorelease]; [currentSong encodeWithCoder: currentCoder]; [metadata addObject: currentCoder]; currentSong = [enumerator nextObject]; } return metadata; } + (BOOL) _saveDictionaries: (NSArray *) dictionaries toFile: (NSString *) filename { NSData *fileContent; NSString *content; NSString *targetDirectory; BOOL result, absoluteReferences; absoluteReferences = [[GeneralPreference instance] absolutePlaylistReferences]; targetDirectory = [[filename stringByDeletingLastPathComponent] stringByStandardizingPath]; content = [self fileContentFromDictionaries: dictionaries inReferenceDirectory: targetDirectory withAbsoluteFilenameReferences: absoluteReferences]; if (content && [content length]) { fileContent = [NSData dataWithBytes: [content cString] length: [content length]]; result = [[NSFileManager defaultManager] createFileAtPath: filename contents: fileContent attributes: nil]; } else result = NO; return result; } + (BOOL) archiveRootObject: (id) anObject toFile: (NSString *) filename { return [self _saveDictionaries: [self _encodeMetadataFromArray: anObject] toFile: filename]; } + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute { [self subclassResponsibility: _cmd]; return nil; } @end @implementation PlaylistUnarchiver : NSObject + (NSArray *) _decodeArrayFromMetadata: (NSArray *) metadata { NSMutableArray *anArray; NSEnumerator *enumerator; DictionaryCoder *currentCoder; Song *currentSong; anArray = [NSMutableArray arrayWithCapacity: [metadata count]]; enumerator = [metadata objectEnumerator]; currentCoder = [enumerator nextObject]; while (currentCoder) { currentSong = [[Song alloc] initWithCoder: currentCoder]; [currentSong autorelease]; [anArray addObject: currentSong]; currentCoder = [enumerator nextObject]; } return anArray; } + (NSArray *) _loadDictionariesFromFile: (NSString *) filename { return [self dictionariesFromFileContent: [NSString stringWithContentsOfFile: filename] inReferenceDirectory: [filename stringByDeletingLastPathComponent]]; } + (id) unarchiveObjectWithFile: (NSString*) filename { return [self _decodeArrayFromMetadata: [self _loadDictionariesFromFile: filename]]; } + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory { [self subclassResponsibility: _cmd]; return nil; } + (NSArray *) dictionariesFromFilenames: (NSArray *) filenames { NSMutableArray *dictionaries; NSEnumerator *files; NSString *currentFile; DictionaryCoder *currentCoder; dictionaries = [NSMutableArray new]; [dictionaries autorelease]; files = [filenames objectEnumerator]; currentFile = [files nextObject]; while (currentFile) { currentCoder = [DictionaryCoder new]; [currentCoder autorelease]; [currentCoder encodeObject: currentFile forKey: @"filename"]; [dictionaries addObject: currentCoder]; currentFile = [files nextObject]; } return dictionaries; } @end cynthiune.app-0.9.5/InfoDisplayController.h0000644000175000017500000000326310375153053020316 0ustar gurkangurkan/* InfoDisplayController.h - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef InfoDisplayController_H #define InfoDisplayController_H @class CynthiuneFadingTextField; @class NSImageView; @class NSObject; @class NSTextField; @class NSTimer; @class Song; @interface InfoDisplayController : NSObject { NSImageView *splashImage; CynthiuneFadingTextField *songArtistField; CynthiuneFadingTextField *songAlbumField; CynthiuneFadingTextField *songNumberField; NSTextField *songTimerField; CynthiuneFadingTextField *songTitleField; NSTimer *hideTimer; BOOL reverseTimer; unsigned int totalTime; } - (void) initializeWidgets; - (void) show; - (void) hide; - (void) updateInfoFieldsFromSong: (Song *) aSong; - (void) setReverseTimer: (BOOL) reversed; - (BOOL) timerIsReversed; - (void) setTimerFromSeconds: (unsigned int) seconds; @end #endif /* InfoDisplayController_H */ cynthiune.app-0.9.5/Cynthiune.nib/0000755000175000017500000000000010413173130016360 5ustar gurkangurkancynthiune.app-0.9.5/Cynthiune.nib/info.nib0000644000175000017500000000121010413143610017777 0ustar gurkangurkan IBDocumentLocation 12 46 385 365 0 0 1024 746 IBEditorPositions 29 36 694 424 44 0 0 1024 746 IBFramework Version 283.0 IBLockedObjects IBOpenObjects 21 370 29 IBSystem Version 6R73 cynthiune.app-0.9.5/Cynthiune.nib/classes.nib0000644000175000017500000000576710413143610020526 0ustar gurkangurkan{ IBClasses = ( { ACTIONS = { openFile = id; preferencesWindow = id; sendABugReport = id; togglePlaylistWindow = id; }; CLASS = CynthiuneController; LANGUAGE = ObjC; OUTLETS = { bugReportMenuItem = id; playerWindow = id; playlistController = id; playlistSwitch = id; playlistWindow = id; }; SUPERCLASS = NSObject; }, {CLASS = CynthiuneFadingTextField; LANGUAGE = ObjC; SUPERCLASS = NSTextField; }, {CLASS = CynthiunePauseButton; LANGUAGE = ObjC; SUPERCLASS = NSButton; }, {CLASS = CynthiuneWindow; LANGUAGE = ObjC; SUPERCLASS = NSWindow; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { CLASS = InfoDisplayController; LANGUAGE = ObjC; OUTLETS = { songAlbumField = id; songArtistField = id; songNumberField = id; songTimerBtn = id; songTimerField = id; songTitleField = id; splashImage = id; }; SUPERCLASS = NSObject; }, { ACTIONS = { addSongs = id; addSongsFolders = id; changeTimeDisplay = id; eject = id; nextSong = id; pausePlayer = id; previousSong = id; removeAllSongs = id; removeSelectedSongs = id; saveList = id; saveListAs = id; songCursorChange = id; startPlayer = id; stopPlayer = id; toggleMute = id; toggleRepeat = id; toggleShuffle = id; toggleSongInspector = id; }; CLASS = PlaylistController; LANGUAGE = ObjC; OUTLETS = { ejectButton = id; infoDisplayController = id; nextButton = id; pauseButton = id; playButton = id; playlistStatusLabel = id; playlistViewController = id; previousButton = id; progressSlider = id; repeatButton = id; repeatMenuItem = id; shuffleButton = id; shuffleMenuItem = id; songInspectorMenuItem = id; stopButton = id; }; SUPERCLASS = NSObject; }, {CLASS = PlaylistView; LANGUAGE = ObjC; SUPERCLASS = NSTableView; }, { CLASS = PlaylistViewController; LANGUAGE = ObjC; OUTLETS = {playlistView = id; }; SUPERCLASS = NSObject; } ); IBVersion = 1; }cynthiune.app-0.9.5/Cynthiune.nib/keyedobjects.nib0000644000175000017500000005531210413143610021533 0ustar gurkangurkanbplist00OY$archiverX$versionX$objectsT$top_NSKeyedArchiver5 (,07:<AYZ[\^ey  $%()-067GHJKNQUVZ[^abfghlmtvwx}.~uu$%&*,-0269;<>AEHIJLPTXYZ\_abcfijkloqrsvxyz}  !"$%'(*+-.013467:<=>@ACDFGIJLMOPRSUXZ[\^_abdeghkt[uvy|~6[ j #%&')*-1Z458;<^=@fCFIJMP3QTX[\]^`acdfgijlmoqjajqYZ !#&&') ,/3478FIJKNOPQTUVYZ[^_`bcfghlmpqx{|}ZZ.<         !"U#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLU$null  !"#$%&']NSFontManagerV$classYNSNextOid_NSVisibleWindowsVNSRoot\NSOidsValues_NSClassesValues]NSConnections]NSNamesValues]NSObjectsKeysZNSOidsKeys]NSClassesKeys[NSFramework[NSNamesKeys_NSObjectsValues49rqp )*+[NSClassName -./YNS.string]NSApplication1234Z$classnameX$classes_NSMutableString356XNSStringXNSObject1289^NSCustomObject86 -.;_IBCocoaFramework =>?ZNS.objects@B CDEFGHIJKLMNOPQRSTUVWX\NSWindowViewYNSWTFlags]NSWindowTitleYNSMinSizeYNSMaxSize\NSWindowRect_NSWindowStyleMask_NSWindowBacking\NSScreenRect]NSWindowClass[NSViewClass   _{{65, 525}, {385, 146}}YCynthiune_CynthiuneWindow -.]TView _`abcd_NSNextResponderZNSSubviewsWNSFrame =fghijklmnopqrstuvwx(-6_NSFilenamesPboardType12\NSMutableSet6UNSSet_{{17, 58}, {348, 71}} OUOO\NSCellFlags2WNSScaleWNSAlign[NSCellFlagsWNSStyle12[NSImageCell{6\%NSImageCell12[NSImageView6YNSControlVNSView[NSResponder _){a|}MM_NSOriginalClassName'_CynthiuneFadingTextField[NSTextField_{{29, 105}, {258, 16}} i_NSBackgroundColorYNSSupport]NSControlView[NSTextColorZNSContents& @%1AP VNSSizeVNSNameXNSfFlags"A@\LucidaGrande12VNSFont6 WNSColor]NSCatalogName[NSColorName\NSColorSpace$#!"VSystem\controlColor WNSWhiteI0.66666712Ԣ6 UNSRGBO0.0251692 0.0107269 112_NSTextFieldCell{6\NSActionCell12^NSClassSwapper6 _{a|}MM,*)_{{295, 105}, {56, 16}} j@+ O0.01597 0.00771338 1126\%NSTextField _){a|}MM.1/0_{{29, 85}, {322, 16}} k42@5 3_LucidaGrande-Bold O1 0.888015 0.649773 _){a|}MM7:89_{{29, 66}, {31, 16}} l; _){a|}M   M=@>?_{{61, 66}, {290, 16}} mA _{a|}MMIDC n !"#_NSKeyEquivalent_NSAlternateContents_NSPeriodicDelay^NSButtonFlags2]NSButtonFlags_NSPeriodicIntervalHGFDEWreverse &'"AP -.12*+\NSButtonCell*,{6]%NSButtonCell12./XNSButton.6 _{1a|}2M345MXNSvFlagsQL K_{{17, 44}, {348, 15}} 89:;<=>?O@@ABoCD@OEF_NSTickMarkPositionZNSMinValue]NSAltIncValue_NSAllowsTickMarkValuesOnlyZNSMaxValueWNSValue_NSNumberOfTickMarksP#N#@YM -. IOYHelvetica12LM\NSSliderCellL{612OPXNSSliderO6 _{1a|}MRSTMT S_{{55, 16}, {24, 24}} WpUX!"YVD@UTPlay \]"A0W _{1a|}M_S`MZY_{{83, 16}, {24, 24}} cWqUXd"e\[TStop -. _{1a|}MijkM_ ^_{{341, 14}, {24, 24}} nWorpqr"sbaD@` -.uVButton -. -. _){1a|}MyzS{|Mdgef_CynthiunePauseButton_{{151, 16}, {24, 24}} sUX!"h -. _{1a|}MSMkj_{{111, 16}, {36, 24}} tUX!"ml -. _{a|}MMpo_{{261, 14}, {24, 24}} uq!"srq -.u -. -. _{a|}MMvu_{{295, 14}, {24, 24}} v!"xt@w -. _{1a|}MSM{z_{{15, 16}, {36, 24}} WwU!"t@|XPrevious _{1a|}MSM~_{{207, 16}, {24, 24}} xU!"TNext12^NSMutableArray6WNSArray_{{1, 9}, {385, 146}}126_{{0, 0}, {1024, 746}}\{134.92, 27}_{3.40282e+38, 3.40282e+38}12_NSWindowTemplate6 =fEÀŀɀˀ̀   BDFHJPUZ_ejouz|~ WNSLabelXNSSource      ]NSMnemonicLoc\NSMixedImage_NSKeyEquivModMaskWNSTitleVNSMenuZNSKeyEquivYNSOnImage  [NSMenuItems  XMinimizeQm ) !"#^NSResourceNameWNSImage_NSMenuCheckmark12'(_NSCustomResource')6_%NSCustomResource ) !"+_NSMenuMixedState12./ZNSMenuItem.6 -.1_performMiniaturize:1234_NSNibControlConnector356^NSNibConnector 78      :_Bring All to Front -.=_arrangeInFront: ?@      BCD  FG^Cynthiune HelpQ? -.KYshowHelp: MNO]NSDestination      QRS  UVW^Quit CynthiuneQq -.[Zterminate: M]^      `R[Hide Others_hideOtherApplications: Mde      gRh^Hide CynthiuneQhUhide: Mmn      pRXShow All_unhideAllApplications: Mtu      wR_About Cynthiune..._orderFrontStandardAboutPanel: M{|w )*~_PlaylistController]previousSong: M|p\startPlayer: M|q[stopPlayer: Mp|€ZplayButton12_NSNibOutletConnector56 Mq|ZstopButton MȀ )*_CynthiuneControllerXdelegate M|_playlistController M@ MЀ )*_PlaylistViewController _)|}YNSTvFlags_NSIntercellSpacingHeight\NSHeaderView[NSFrameSize\NSCornerView[NSGridColor^NSTableColumns_NSIntercellSpacingWidth[NSRowHeightӀ@"@ҀՀԀـ"@@"A\PlaylistView[NSTableView _`1a}YNScvFlags]NSNextKeyViewYNSBGColorYNSDocView)ځ% '&Z{332, 255} _1}̀؀ _`1a}12Y{332, 17}12_NSTableHeaderView6 _1a}À܀ _`1a}]NSContentView[NSVScrollerXNSsFlags\NSScrollAmts[NSHScroller_NSHeaderClipView4"$*3OA A AA._{{333, 0}, {12, 17}}12]_NSCornerView6 =f \NSIsEditableZNSDataCellWNSWidthZNSMinWidthZNSMaxWidth^NSIsResizeable\NSHeaderCell"C"A"Dz WO I0.333333 ̀_headerTextColor  B012  _NSTableHeaderCell {6 WO1@Q9 B1 ̀_controlTextColor12]NSTableColumn6 ̀YgridColor  D0.5\playlistView M#w|^previousButton M&o|^progressSlider M)x|[ejectButton M,t|ZnextButton M/s|[pauseButton M2|tYnextSong: M5|xVeject: M8h9 )*;_InfoDisplayController[splashImage M?i9^songAlbumField MBm9_songArtistField MEl9_songNumberField MHj9^songTimerField MKk9 ^songTitleField MN|o _songCursorChange: MQZdataSource MT MVW      YR^Preferences..._preferencesWindow: M]|s\pausePlayer: M`9|_infoDisplayController Mc|_playlistViewController Mfr^playlistSwitch MijAB CDEFGHIJKLNlmnopUqrs@x?@> !_{{65, 187}, {385, 314}} -.] _`abwx#= =fz{5 =f} =f_{{1, 17}, {332, 255}} ́(_controlBackgroundColor12ZNSClipView6 _1a}XNSActionXNSTargetYNSPercent-,+"?~ff_{{333, 17}, {11, 255}}\_doScroller:12ZNSScroller6 _1a}0/"?}_{{-100, -100}, {328, 15}} =f_{{1, 0}, {332, 17}}_{{20, 20}, {345, 273}}12\NSScrollView6 _{1a|}476_{{20, 297}, {345, 13}} {!9:8Q "A  ́<;_disabledControlTextColor _{{1, 1}, {385, 314}}Z{385, 161}^playlistWindow MrC_togglePlaylistWindow: MjE Mn9G\songTimerBtn M|nI_changeTimeDisplay: M|OK      MLN  Ɂ؁WOpen...Qo ΁TQ      RSUCloseQw M|ցYV      WXTSaveQsYsaveList: M|߁^[      \]ZSave As...QS[saveListAs: M|d`      bac  \Add Songs...QaYaddSongs: M|if      ghZRemove AllQD_removeAllSongs: M|nk      lm_Remove SelectionQd_removeSelectedSongs: M|tp         rqs   VRepeatQr]toggleRepeat: M|yv       wxWShuffle^toggleShuffle: M|{^repeatMenuItem M|}_shuffleMenuItem M!"      $R_Send A Bug Report..._bugReportMenuItem M("_sendABugReport: M+|,      ./0  23Qp M6|7      9/:UPauseQ M>|?      A/B MD|E      G/HQ[ MK|L      N/OQ] MRS|      UVW  YZ_Song Inspector...Qi_songInspectorMenuItem M_|S_toggleSongInspector: Mb{|_playlistStatusLabel Me@\playerWindow Mhu|\repeatButton Mkv|]shuffleButton Mn|u Mp|v =rsoUnmMxt7@qWuvswxy@Rzi{{h9e?8"SCp|w|Oj}~ukjrL ,^nlutVoE/vځ fiف       /YNSSubmenuTMode^submenuAction: =f12  6     [Application  ց -. =fɁʁ́Ёҁ     _About Application      \NSIsDisabled]NSIsSeparator      ŁÁXServices  ǁȁ -. =f__NSServicesMenu            ˁ_Hide Application      ΁                 ԁ_Quit Application\_NSAppleMenuXPlaylist =fХ           ݁ہ[Open Recent  ځ߁ -. =fݡށ      ZClear Menu__NSRecentDocumentsMenu      R      WCleanup      /  mnlVPlayer =f,7?EL}t      /      / =fuW"we^n|O      R      R   -. =f      R        =f                      USongs =fx        VWindow -. =f8      ^_NSWindowsMenu -. THelp =f"@      V$%UTools =f(S      C*+      -.     012 TEdit  56"! -.3 =f9:;<=>?@ABCDE#&)*-03589N\      G0H$%TUndoQz      L0M'(TRedoQZ      0      R0S+,SCutQx      W0X./TCopyQc      \0]12UPasteQv      a04UClear      d0e67ZSelect All      0      ijk0<:;TFind  no>= -.l =frstuvw?BEHK      yiz@AWFind...Qf      ~iCDYFind NextQg      iFG]Find Previous      iIJ_Use Selection for FindQe      iLM_Scroll to SelectionQj      0QOPXSpelling  SR =fTWZ      UV[Spelling...Q:      XY^Check SpellingQ;      [_Check Spelling As You Type      0_]^VSpeech  a` =fbd      c^Start speaking      e]Stop speaking      gh      Rjk =fçy~{[_NSMainMenu12Ƣ6 =rȯURM@M//MRRMRCMMR/RV{MRMR/jMMM / M/Rt/RMMRM~RM/yM =rʯ#|wmrxuqkj@jOi@s{nzl9toCvp =r̯#stuvwxyz|}~_NSButton2111111]NSScrollView1^NSTextField111[NSButton111_NSButton5111111 {12VNSNull6W%NSNull[NSButton411\NSTextField2\NSTextField1 -.\PlayerWindow^PlaylistWindowT1111]NSTextField11ZNSButton11 -.Q1YNSButton5]NSTextField21]NSButton61111 -.XMainMenu[NSSlider111 -. \File's Owner -. Q2]NSButton12111[NSButton311 =rskmli =ry =rmw||x@ vr}EWjsh9tuqu?zxS{wOpi,y@RLunlvjoVM{/eC7"~^ktn8 =r !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁      !"#$%&'()*+,-./0123n&7  4`p  rb/+c8':3gS_ %*.sa8j]$o95m- ko)'#6%2j'(! "\l z12MN^NSIBObjectDataM6PQ]IB.objectdata#,5:LQ#6=J\jx -6AJ\clu~    ) 3 @ T f s   ! # % . 0 U W Y [ ] _ a c e g i k m o q s u w     6 O \ d l x  & ( * , . 0 K W p        ) 2 9 > S [ i u !.7FKdfhj4UWY^`qs(IKMOQi#2@UWY[`bkprt|/dy!*7@IR]z|~*[]fhmv!FHJLNe}#%'0IKMe(*3PRTk!*9@H_hohjlnprtvxz|~  +3<>@Bcq~  "*<EX_s68MVhuwy!258;JLU`qsu!#DFOhy{} )+8IKWhjlw  # 4 6 G I K M V X q ! !!4!@!B!D!F!O!T!V!X!Z!\!^!`!e!j!w!!!!!!!!!!!!!!""""""A"D"G"Q"Z"n"w""""""""#####!#$#&#)#,#?#B#Y#b#p#y###########$$$$ $$$0$2$4$6$;$H$R$g$i$k$}$$$$$$$$$$$$%%%%$%2%7%L%N%P%Z%g%l%y%%%%%%%%%%%%& & &&*&,&6&G&I&P&a&d&f&o&q&&&&&&&&&&''''''8';'J'['^'r'''''''''''((((%(6(9(Q(b(e(~(((((((((((((()))%)6)9)<)E)J)M)V)a)j)m))))))))** *****"*;*H*Q*\*g***********+++-+0+3+L+m+p+s+v+x++++++++++,,,,0,A,D,U,X,e,v,y,,,,,,,,,,,,,,,,- -#-&-,-.-?-B-E-f-i-l-q-s-}------------. ....".%.(.5.7.A.R.U.X.y.|............/////@/C/F/I/V/Y/\/c/e/s/////////////00"0%0(0I0L0c0w00000000000000111 1+1.1117191J1M1P1q1t1w1111111111111122 22/2225282E2H2K2_2a2y2222222223333!3$323C3F3W3Z3c3f444444"4%4(4+4.4144474:4=4@4C4F4I4L4O4R4U4X4444444444444445 55555'5:5=5@5C5F5I5L5O5R5U5r5u5555555566666"6+64656G6p666666666677@7C7F7Y7f7o7x777777777788 888898<8G8`888888888889999H9q9z9999999::: ::>:c:f:i:l:y:|::::::::::; ; ;;;;';P;S;V;];f;o;v;;;;;;;;;;<< <2<5<8>> > >,>/>5>V>Y>\>g>>>>>>>>>>>>>>????'?*?-?5?7?X?[?^?h?j?????????@@@@@ @I@L@O@R@[@h@k@n@w@~@@@@@@@@@@@@@AAA5A^AaAdAgAnA{A~AAAAAAAAAAAB#B&B)BRBUBXBaBpB|BBBC@CICCCCCCCCCCCCDDDD DDDDDDD D#D&D)D,D/D2D5D8D;D>DADDDGDYDgDvDDDDDDDDDDDDDEE EE$E-E/E9EGEUE^EgEsE|EEEEEEEEEEGG%H^HaHdHgHjHmHpHsHvHyH|HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIII I IIIIIII!I$I'I*I-I0I3I6I9IJAJDJGJIJLJOJRJTJWJZJ]J`JcJfJhJkJnJqJtJwJzJ}JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKK KKKKKKKK!K$K'K*K-K0K2K5K8K;K>KAKDKGKJKMKPKRKUKXK[K^K`KcKfKiKkKnKqKtKwKzK}KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLRLcynthiune.app-0.9.5/CynthiuneController.h0000644000175000017500000000355610412073262020043 0ustar gurkangurkan/* CynthiuneController.h - this file is part of Cynthiune * * Copyright (C) 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CynthiuneController_H #define CynthiuneController_H #import "CynthiuneWindow.h" @class NSApplication; @class NSButton; @class NSNotification; @class NSWindow; @class NSString; @class NSTimer; @class PlaylistController; @protocol Output; @interface CynthiuneController : NSObject { BOOL bundlesLoaded; PlaylistController *playlistController; NSWindow *playerWindow; NSWindow *playlistWindow; NSButton *playlistSwitch; BOOL isStuck; BOOL playlistWindowIsVisible; int WindowsTitleSize; int WindowsBorderSize; float deltaX, deltaY; id bugReportMenuItem; } - (id) init; - (BOOL) application: (NSApplication *) anApp openFile: (NSString *) aFilename; - (void) openFile: (id) anObject; - (void) preferencesWindow: (id) anObject; - (void) togglePlaylistWindow: (id) sender; - (void) setPlaylistWindowVisible: (BOOL) isVisible; - (void) sendABugReport: (id) sender; - (void) _parseArguments; - (void) _initWindowsPosition; @end #endif /* CynthiuneController_H */ cynthiune.app-0.9.5/FormatTester.h0000644000175000017500000000321510315615152016442 0ustar gurkangurkan/* FormatTester.h - this file is part of Cynthiune * * Copyright (C) 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef FormatTester_H #define FormatTester_H #import @class NSArray; @class NSMutableArray; @class NSString; @interface FormatTester : NSObject { NSMutableArray *formatList; NSMutableArray *extensionsList; } + (id) formatTester; - (void) registerFormatClass: (Class) aClass; - (NSArray *) acceptedFileExtensions; - (BOOL) formatClass: (Class) format acceptsFileExtension: (NSString *) extension; - (Class) formatClassForFileExtension: (NSString *) extension; - (Class) formatClassAtIndex: (unsigned int) formatNumber; - (int) formatNumberForFile: (NSString *) file; - (Class) formatClassForFile: (NSString *) file; - (BOOL) extensionIsSupported: (NSString *) extension; - (BOOL) fileIsPlaylist: (NSString *) filename; @end #endif /* FormatTester_H */ cynthiune.app-0.9.5/GoomView.m0000644000175000017500000000505410413173323015565 0ustar gurkangurkan/* GoomView.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "GoomView.h" #define step .01 // #define goomSizeX 320 // #define goomSizeY 200 @implementation GoomView : NSView - (id) initWithFrame: (NSRect) frameRect { static unsigned char *plane[1]; if ((self = [super initWithFrame: frameRect])) { goom = goom_init (frameRect.size.width, frameRect.size.width); plane[0] = goom->outputBuf; bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes: plane pixelsWide: NSWidth (frameRect) pixelsHigh: NSHeight (frameRect) bitsPerSample: 8 samplesPerPixel: 4 hasAlpha: NO isPlanar: NO colorSpaceName: NSDeviceRGBColorSpace bytesPerRow: 0 bitsPerPixel: 32]; } return self; } - (void) _resetTimer { if (timer) [timer invalidate]; timer = [NSTimer scheduledTimerWithTimeInterval: (1.0 / fps) target: self selector: @selector (display) userInfo: nil repeats: YES]; [timer explode]; } - (void) setFPS: (unsigned int) newFPS { fps = newFPS; [self _resetTimer]; } // - (void) awakeFromNib // { // [self setFPS: 10]; // bitmap = nil; // } - (void) drawRect: (NSRect)rect { [bitmap draw]; } - (PluginInfo *) goom { return goom; } @end cynthiune.app-0.9.5/GeneralPreference.h0000644000175000017500000000457210375017735017417 0ustar gurkangurkan/* GeneralPreference.h - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef OUTPUTPREFERENCE_H #define OUTPUTPREFERENCE_H #import @class NSBox; @class NSMutableArray; @class NSMutableDictionary; @class NSTextField; @class NSWindow; @protocol Preference; @interface GeneralPreference : NSObject { NSMutableDictionary *preference; NSMutableArray *playersList; NSWindow *prefsWindow; id outputBundleSelector; id playlistFormatSelector; id playlistReferenceTypeToggle; id stickyWinToggle; id saveWindowsInformationToggle; #ifdef __MACOSX__ id texturedWindowsToggle; #endif NSBox *windowsBox; NSBox *playlistsBox; NSBox *outputModuleBox; NSTextField *playlistsFormatLabel; } - (GeneralPreference *) init; - (void) registerOutputClass: (Class) aClass; - (Class) preferredOutputClass; - (NSString *) preferredPlaylistFormat; - (BOOL) absolutePlaylistReferences; #ifdef __MACOSX__ - (BOOL) windowsAreTextured; #endif - (BOOL) windowsAreSticky; - (BOOL) saveWindowsInformation; - (void) saveInformation: (NSWindow *) aWindow forWindow: (NSString *) windowName; - (void) restoreInformation: (NSWindow *) aWindow forWindow: (NSString *) windowName; /* as a target */ - (void) outputBundleChanged: (id) sender; - (void) playlistFormatChanged: (id) sender; - (void) playlistReferenceTypeChanged: (id) sender; #ifdef __MACOSX__ - (void) texturedWindowsChanged: (id) sender; #endif - (void) stickyWindowsChanged: (id) sender; - (void) saveWindowsInformationChanged: (id) sender; @end #endif /* OUTPUTPREFERENCE_H */ cynthiune.app-0.9.5/GeneralPreference.nib/0000755000175000017500000000000010413173130017766 5ustar gurkangurkancynthiune.app-0.9.5/GeneralPreference.nib/info.nib0000644000175000017500000000070210344411156021420 0ustar gurkangurkan IBDocumentLocation 24 71 356 240 0 0 1024 746 IBFramework Version 283.0 IBOpenObjects 5 IBSystem Version 6R73 cynthiune.app-0.9.5/GeneralPreference.nib/classes.nib0000644000175000017500000000222010344411156022117 0ustar gurkangurkan{ IBClasses = ( {CLASS = CynthiunePopUpButton; LANGUAGE = ObjC; SUPERCLASS = NSPopUpButton; }, {CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; }, { ACTIONS = { outputBundleChanged = id; playlistFormatChanged = id; playlistReferenceTypeChanged = id; saveWindowsInformationChanged = id; stickyWindowsChanged = id; texturedWindowsChanged = id; }; CLASS = GeneralPreference; LANGUAGE = ObjC; OUTLETS = { outputBundleSelector = id; outputModuleBox = id; playlistFormatSelector = id; playlistReferenceTypeToggle = id; playlistsBox = id; playlistsFormatLabel = id; prefsWindow = id; saveWindowsInformationToggle = id; stickyWinToggle = id; texturedWindowsToggle = id; windowsBox = id; }; SUPERCLASS = NSObject; } ); IBVersion = 1; }cynthiune.app-0.9.5/GeneralPreference.nib/keyedobjects.nib0000644000175000017500000002010310344411156023135 0ustar gurkangurkanbplist00Y$archiverX$versionX$objectsT$top_NSKeyedArchiver (,-348<PWoptxy{ !"456GLMRSTXZ[\^`cf[gimptu}~ [[[   !#%' s?$@AB@C$DBEFAGH IKMOy/z{|}~jU$null  !"#$%&']NSFontManagerV$classYNSNextOid_NSVisibleWindowsVNSRoot\NSOidsValues_NSClassesValues]NSConnections]NSNamesValues]NSObjectsKeysZNSOidsKeys]NSClassesKeys[NSFramework[NSNamesKeys_NSObjectsValues-΀̀̀ˀ )*+[NSClassName_GeneralPreference./01Z$classnameX$classes^NSCustomObject02XNSObject_IBCocoaFramework 567ZNS.objects./9:\NSMutableSet9;2UNSSet 5=>+?@ABCDEFGHIJKLMNO QRSTUVWNSLabel]NSDestinationXNSSource X YZ[\]^_`abcdefghijklmn\NSWindowViewYNSWTFlags]NSWindowTitleYNSMinSizeYNSMaxSize\NSWindowRect_NSWindowStyleMask_NSWindowBacking\NSScreenRect]NSWindowClass[NSViewClasspx _{{61, 438}, {315, 261}} qrsYNS.string VWindow./uv_NSMutableStringuw2XNSStringXNSWindow qrzTView |}~_NSNextResponderZNSSubviewsWNSFrame- 5=6l| }~ckc]NSTransparentYNSOffsets_NSTitlePosition\NSBorderType]NSContentView[NSTitleCellYNSBoxType[NSSuperview5/0. 5= |}~, 5=#' |~VNSCellYNSEnabled" _{{13, 32}, {122, 18}} k_NSKeyEquivalentYNSSupport_NSAlternateContents]NSControlView\NSCellFlags2_NSPeriodicDelay^NSButtonFlags2]NSButtonFlags[NSCellFlags_NSPeriodicInterval_NSAlternateImageZNSContents! H<=_CynthiunePopUpButton]NSPopUpButton_{{124, 35}, {92, 22}} #$%&'()*+,-./0123/_NSPreferredEdgeZNSMenuItem_NSArrowPosition_NSUsesItemFromMenu]NSAltersStateVNSMenuR@?A@AKB qr qr 789:;<=(>?@ABC/DE3F]NSMnemonicLoc\NSMixedImage_NSKeyEquivModMaskWNSStateWNSTitleXNSTargetXNSActionZNSKeyEquivYNSOnImageKHCJD H;IJK[NSMenuItemsQMLSM3U )NOPQ^NSResourceNameGEFWNSImage_NSMenuCheckmark./UV_NSCustomResourceUW2_%NSCustomResource )NOPYI_NSMenuMixedState__popUpItemAction:./$]$2 qr_ZOtherViews 5=a.bN 789;<=(>?@ABCde3FOPSPLS./(h(2./jk_NSPopUpButtonCelljl2^NSMenuItemCell./no^NSClassSwappern2 |~q rs aVU_{{11, 36}, {111, 19}} vwxyz{|_NSBackgroundColor[NSTextColor`X@]WWFormat WNSColor]NSCatalogName[NSColorName\NSColorSpace\[YZVSystem\controlColor WNSWhiteI0.666667./2 _^_controlTextColor B0./_NSTextFieldCell2./[NSTextField2\%NSTextField |~  dc_{{76, 12}, {169, 18}} kfe_Use abolute filenames _{{2, 2}, {271, 67}}_{{20, 85}, {275, 87}} kYPlaylists| }~ckcmn 5= |}~o 5=p |)~qtrs_{{72, 10}, {145, 22}} #$%&'(),-/012/vuwx qr qr 789:;<=(>?@ABC/Fyz H;Iʀ|{UItem1 qr_ 5=ΣЀ} 789;<=(>?@ABCF~UItem2 789;<=(>?@ABCFUItem3_{{2, 2}, {271, 42}}_{{20, 20}, {275, 62}} ܀]Output module_{{1, 9}, {315, 261}}_{{0, 0}, {1024, 746}}Z{213, 129}_{3.40282e+38, 3.40282e+38}./_NSWindowTemplate2[prefsWindow./_NSNibOutletConnector2^NSNibConnector QRST_stickyWinToggle QRST_outputBundleSelector QRST_playlistFormatSelector QRS_stickyWindowsChanged:./_NSNibControlConnector2 QRS_playlistFormatChanged: QRS_outputBundleChanged: QRST_outputModuleBox QRST\playlistsBox QRST_playlistsFormatLabel QRST _saveWindowsInformationToggle QRST ZwindowsBox QRS_saveWindowsInformationChanged: QRST_texturedWindowsToggle QRS_texturedWindowsChanged: QRST_playlistReferenceTypeToggle QRS_playlistReferenceTypeChanged 5 .c V3b./"2 5$3Vc c 3c 5&V. 3b 5()*+,-./0123456789:;<=>€ÀĀŀƀǀȀɀZNSButton41YPopUpList[NSMenuItem1YNSButton4\File's OwnerVNSBox1^NSTextField211ZNSButton42[NSMenuItem2VNSBox2 5J 5L 5N(AC?M3JFK ObVIBLE.GDcH@N 5P(QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxπЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀ )%!&'  ,* $(  "#+./^NSIBObjectData2]IB.objectdata#,5:LQDJ $0<NPRTVXZ\^`bdfhjlu )+PRTVXZ\^`bdfhjlnpr3ER`lnpuwy{}"-579;DKMOQ(/135NU_acef~!/;Pcnprty{  ( - . 7 D O ] j s |    7 9 ; T      $ 5 : < > G L U [ d       2 @ X       ) 2 _ m z  &8AT[o|~3BQZin&2?ACEGIP]jr| 246N02468:CF[]_hkm @BDQSU[dmtvx !#1H`k!#:KMfwy{"$6GIVgi/@B\mo?Hw)4@GPU^cl!#%')+-/13579;=?ACEGIKMOQSUWY[]_acegikmoqsuwy{}cynthiune.app-0.9.5/FormatTester.m0000644000175000017500000001160310345655621016457 0ustar gurkangurkan/* FormatTester.m - this file is part of Cynthiune * * Copyright (C) 2003, 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "FormatTester.h" @implementation FormatTester : NSObject + (id) formatTester { static FormatTester *singleton = nil; if (!singleton) singleton = [self new]; return singleton; } - (id) init { if ((self = [super init])) { formatList = [NSMutableArray array]; extensionsList = [NSMutableArray array]; [formatList retain]; [extensionsList retain]; } return self; } - (void) registerFormatClass: (Class) aClass { if ([aClass conformsToProtocol: @protocol(Format)]) { [formatList addObject: aClass]; [extensionsList addObjectsFromArray: [aClass acceptedFileExtensions]]; } else NSLog (@"Class '%@' not conform to 'Format' protocol...\n", NSStringFromClass (aClass)); } - (NSArray *) acceptedFileExtensions { return extensionsList; } - (Class) formatClassAtIndex: (unsigned int) formatNumber { Class formatClass; if (formatNumber < [formatList count]) formatClass = [formatList objectAtIndex: formatNumber]; else formatClass = Nil; return formatClass; } - (BOOL) formatClass: (Class) formatClass acceptsFileExtension: (NSString *) extension { unsigned int count, max; BOOL result; NSArray *extensions; NSString *currentExtension; result = NO; if ([formatList containsObject: formatClass]) { extensions = [formatClass acceptedFileExtensions]; max = [extensions count]; count = 0; while (count < max && !result) { currentExtension = [extensions objectAtIndex: count]; result = ([extension caseInsensitiveCompare: currentExtension] == NSOrderedSame); count++; } } return result; } - (Class) formatClassForFileExtension: (NSString *) extension { unsigned int count, max; Class currentFormatClass, resultClass; count = 0; max = [formatList count]; resultClass = nil; while (count < max && !resultClass) { currentFormatClass = [formatList objectAtIndex: count]; if ([self formatClass: currentFormatClass acceptsFileExtension: extension]) resultClass = currentFormatClass; count++; } return resultClass; } - (int) formatNumberForFile: (NSString *) file { Class testClass; int formatNumber, count; formatNumber = -1; count = 0; while (formatNumber == -1 && count < [formatList count]) { testClass = [formatList objectAtIndex: count]; if (([testClass canTestFileHeaders] && [testClass streamTestOpen: file]) || [self formatClass: testClass acceptsFileExtension: [file pathExtension]]) formatNumber = count; else count++; } return formatNumber; } - (Class) formatClassForFile: (NSString *) file { int formatNumber; Class formatClass; formatNumber = [self formatNumberForFile: file]; if (formatNumber > -1) formatClass = [formatList objectAtIndex: formatNumber]; else formatClass = Nil; return formatClass; } - (BOOL) extensionIsSupported: (NSString *) extension { NSMutableArray *extensions; NSString *currentExtension; BOOL result; unsigned int count, max; result = NO; extensions = [NSMutableArray arrayWithObjects: @"m3u", @"pls", @"cPls", nil]; [extensions addObjectsFromArray: extensionsList]; count = 0; max = [extensions count]; while (!result && count < max) { currentExtension = [extensions objectAtIndex: count]; result = ([currentExtension caseInsensitiveCompare: extension] == NSOrderedSame); count++; } return result; } - (BOOL) fileIsPlaylist: (NSString *) filename { NSString *extension; extension = [filename pathExtension]; return ([extension caseInsensitiveCompare: @"cPls"] == NSOrderedSame || [extension caseInsensitiveCompare: @"m3u"] == NSOrderedSame || [extension caseInsensitiveCompare: @"pls"] == NSOrderedSame); } @end cynthiune.app-0.9.5/CynthiuneController.m0000644000175000017500000003504110412155204020037 0ustar gurkangurkan/* CynthiuneController.m - this file is part of Cynthiune * * Copyright (C) 2003-2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #ifdef GNUSTEP #import #endif #import #import #import #import #import #import #import #import #import #import #import #ifdef __MACOSX__ /* NSStandardLibraryPaths */ #import #endif /* __MACOSX__ */ #ifdef GNUSTEP #import #endif #import "BundleManager.h" #import "GeneralPreference.h" #import "CynthiuneController.h" #import "PlaylistController.h" #import "PreferencesController.h" #define LOCALIZED(X) NSLocalizedString (X, nil) #define STICK_DELTA 20.0 static void localizeMenu (NSMenu *menu) { id menuItem; unsigned int count, max; [menu setTitle: LOCALIZED ([menu title])]; max = [menu numberOfItems]; for (count = 0; count < max; count++) { menuItem = [menu itemAtIndex: count]; if (menuItem && ![menuItem isSeparatorItem]) { [menuItem setTitle: LOCALIZED ([menuItem title])]; if ([menuItem hasSubmenu]) localizeMenu ([menuItem submenu]); } } } @implementation CynthiuneController : NSObject + (void) initialize { NSArray *sendTypes; sendTypes = [NSArray arrayWithObject: NSFilenamesPboardType]; [NSApp registerServicesMenuSendTypes: sendTypes returnTypes: nil]; } #ifdef __MACOSX__ - (void) _initPlaylistWindowButtons { NSRect emptyRect; NSButton *button; int buttons[] = {NSWindowToolbarButton, NSWindowCloseButton, NSWindowMiniaturizeButton, NSWindowZoomButton}; int count; emptyRect = NSMakeRect (0, 0, 0, 0); for (count = 0; count < (sizeof (buttons) / sizeof (int)); count++) { button = [playlistWindow standardWindowButton: buttons[count]]; [button setFrame: emptyRect]; } [playlistWindow setViewsNeedDisplay: YES]; } #endif /* __MACOSX__ */ - (void) awakeFromNib { NSToolbar *toolbar; [playerWindow setMiniwindowImage: [NSImage imageNamed: @"Cynthiune"]]; localizeMenu ([NSApp mainMenu]); [self _parseArguments]; [playlistController initializeWidgets]; toolbar = [playlistController playlistToolbar]; [playlistWindow setToolbar: toolbar]; #ifdef __MACOSX__ [self _initPlaylistWindowButtons]; #endif [self _initWindowsPosition]; #if defined (GNUSTEP) if ([GSCurrentServer () handlesWindowDecorations]) { WindowsTitleSize = 22; WindowsBorderSize = 8.0; } #endif /* GNUSTEP */ [playlistWindow setTitle: LOCALIZED (@"Playlist")]; [playlistWindow setExcludedFromWindowsMenu: YES]; [playlistWindow setResizeIncrements: NSMakeSize (1, 16)]; [playlistSwitch setImage: [NSImage imageNamed: @"playlist"]]; [playlistSwitch setAlternateImage: [NSImage imageNamed: @"playlist-pushed"]]; [playlistSwitch setState: playlistWindowIsVisible]; [playerWindow setNextResponder: playlistWindow]; } - (unsigned int) _computeDeltaXOfFrame: (NSRect) mainFrame withFrame: (NSRect) aFrame { unsigned int cond; float a1, a2, x1, x2; x1 = aFrame.origin.x; x2 = aFrame.origin.x + aFrame.size.width; a1 = mainFrame.origin.x; a2 = mainFrame.origin.x + mainFrame.size.width; if (x1 <= (a1 + STICK_DELTA) && x1 >= (a1 - STICK_DELTA)) { cond = 2; deltaX = 0.0; } else if (x2 <= (a2 + STICK_DELTA) && x2 >= (a2 - STICK_DELTA)) { cond = 3; deltaX = x1 - x2 + a2 - a1; } else if (x2 <= (a1 + STICK_DELTA) && x2 >= (a1 - STICK_DELTA)) { cond = 4; deltaX = x1 - x2 - 2.0; } else if (x1 <= (a2 + STICK_DELTA) && x1 >= (a2 - STICK_DELTA)) { cond = 5; deltaX = a2 - a1 + 2.0; } else if ((x1 > a1 && x1 < a2) || (x2 > a1 && x2 < a2) || (x1 < a1 && x2 > a2)) { cond = 1; deltaX = x1 - a1; } else cond = 0; return cond; } - (unsigned int) _computeDeltaYOfFrame: (NSRect) mainFrame withFrame: (NSRect) aFrame { unsigned int cond; float b1, b2, y1, y2; y1 = aFrame.origin.y; y2 = aFrame.origin.y + aFrame.size.height; b1 = mainFrame.origin.y; b2 = mainFrame.origin.y + mainFrame.size.height; if (y1 <= (b1 + STICK_DELTA) && y1 >= (b1 - STICK_DELTA)) { cond = 2; deltaY = 0.0; } else if (y2 <= (b2 + STICK_DELTA) && y2 >= (b2 - STICK_DELTA)) { cond = 3; deltaY = y1 - y2 + b2 - b1; } else if (y2 + WindowsTitleSize <= (b1 + STICK_DELTA) && y2 + WindowsTitleSize >= (b1 - STICK_DELTA)) { cond = 4; deltaY = y1 - y2 - WindowsTitleSize; } else if (y1 <= (b2 + WindowsTitleSize + STICK_DELTA) && y1 >= (b2 + WindowsTitleSize - STICK_DELTA)) { cond = 5; deltaY = b2 - b1 + WindowsTitleSize + WindowsBorderSize; } else if ((y1 > b1 && y1 < b2) || (y2 > b1 && y2 < b2) || (y1 < b1 && y2 > b2)) { cond = 1; deltaY = y1 - b1; } else cond = 0; return cond; } - (void) _recheckIfIsStuck { unsigned int condX, condY; NSRect mainFrame, playlistFrame; mainFrame = [playerWindow frame]; playlistFrame = [playlistWindow frame]; condX = [self _computeDeltaXOfFrame: mainFrame withFrame: playlistFrame]; condY = [self _computeDeltaYOfFrame: mainFrame withFrame: playlistFrame]; isStuck = (condX && condY && (condX > 3 || condY > 3)); } - (void) _initWindowsPosition { GeneralPreference *generalPreference; generalPreference = [GeneralPreference instance]; if ([generalPreference saveWindowsInformation]) { [generalPreference restoreInformation: playerWindow forWindow: @"PlayerWindow"]; [generalPreference restoreInformation: playlistWindow forWindow: @"PlaylistWindow"]; [playerWindow makeKeyAndOrderFront: self]; [playlistWindow makeKeyAndOrderFront: self]; playlistWindowIsVisible = YES; [self _recheckIfIsStuck]; } else { [playerWindow center]; [playerWindow makeKeyAndOrderFront: self]; playlistWindowIsVisible = NO; } } - (void) _ensureDirectory: (NSString *) directory { NSFileManager *fm; NSEnumerator *pathComponents; NSString *currentPathComponent, *directories; BOOL isDir, error; fm = [NSFileManager defaultManager]; error = NO; pathComponents = [[directory pathComponents] objectEnumerator]; directories = [pathComponents nextObject]; currentPathComponent = [pathComponents nextObject]; while (currentPathComponent && !error) { directories = [directories stringByAppendingPathComponent: currentPathComponent]; if (!([fm fileExistsAtPath: directories isDirectory: &isDir] && isDir)) error = ![fm createDirectoryAtPath: directories attributes: nil]; currentPathComponent = [pathComponents nextObject]; } } - (void) _checkUserCynthiuneDirectory { NSArray *paths; NSString *cynthiuneDirectory; paths = NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSUserDomainMask, YES); if (paths) { cynthiuneDirectory = [[paths objectAtIndex: 0] stringByAppendingPathComponent: @"Cynthiune"]; [self _ensureDirectory: cynthiuneDirectory]; } } - (id) init { BundleManager *bundleManager; if ((self = [super init])) { WindowsTitleSize = 0.0; WindowsBorderSize = 0.0; [self _checkUserCynthiuneDirectory]; bundleManager = [BundleManager bundleManager]; [bundleManager loadBundles]; // step = 0; } return self; } - (void) _parseArguments { NSArray *arguments; NSString *currArg; unsigned int count, max; arguments = [[NSProcessInfo processInfo] arguments]; max = [arguments count]; for (count = 1; count < max; count++) { currArg = [arguments objectAtIndex: count]; if (![currArg hasPrefix: @"-"]) [playlistController openSongFromNSApp: currArg]; } } /* this seems to crash for the moment... */ // - (void) updateMiniwindowTitle: (NSString *) aTitle // { // [playerWindow setMiniwindowTitle: aTitle]; // } - (void) openFile: (id) anObject { [playlistController addSongFromNSApp: self]; } - (void) preferencesWindow: (id) anObject { [[PreferencesController preferencesController] loadPreferencesWindow]; } - (void) sendABugReport: (id) sender { [[MailService instance] composeBugReport]; } /* as delegate */ - (BOOL) application: (NSApplication *) application openFile: (NSString *) filename { [playlistController openSongFromNSApp: filename]; return YES; } - (void) togglePlaylistWindow: (id) sender { [self setPlaylistWindowVisible: [sender state]]; } - (void) setPlaylistWindowVisible: (BOOL) isVisible { if (isVisible) { if (!playlistWindowIsVisible) { [playlistWindow makeKeyAndOrderFront: self]; playlistWindowIsVisible = YES; } } else { if (playlistWindowIsVisible) { [playlistWindow orderOut: self]; playlistWindowIsVisible = NO; } } } /* notifications */ - (void) windowWillClose: (NSNotification *) aNotification { GeneralPreference *generalPreference; static BOOL closing = NO; if (!closing) { closing = YES; generalPreference = [GeneralPreference instance]; if ([generalPreference saveWindowsInformation]) { [generalPreference saveInformation: playerWindow forWindow: @"PlayerWindow"]; [generalPreference saveInformation: playlistWindow forWindow: @"PlaylistWindow"]; } [NSApp terminate: [aNotification object]]; } } - (void) windowDidDeminiaturize: (NSNotification *) aNotification { if (playlistWindowIsVisible) [playlistWindow orderFront: self]; } - (void) windowDidMiniaturize: (NSNotification *) aNotification { if (playlistWindowIsVisible) [playlistWindow orderOut: self]; } - (void) repositionPlaylistWindow { NSPoint newOrigin; NSRect playerFrame, playlistFrame; playerFrame = [playerWindow frame]; playlistFrame = [playlistWindow frame]; newOrigin = playerFrame.origin; newOrigin.x += deltaX; newOrigin.y += deltaY; playlistFrame.origin = newOrigin; [playlistWindow setFrame: playlistFrame display: NO]; } - (void) _playerWindowDidMove { NSRect frame; GeneralPreference *generalPreference; static BOOL _inited = NO; generalPreference = [GeneralPreference instance]; if (!_inited) { _inited = YES; if (![generalPreference saveWindowsInformation]) { frame = [playlistWindow frame]; isStuck = YES; deltaX = 0.0; deltaY = -frame.size.height - 2.0; [self repositionPlaylistWindow]; } } else if ([generalPreference windowsAreSticky] && isStuck) [self repositionPlaylistWindow]; } - (void) _playlistWindowDidMove { GeneralPreference *generalPreference; generalPreference = [GeneralPreference instance]; if ([generalPreference windowsAreSticky]) { [self _recheckIfIsStuck]; if (isStuck) [self repositionPlaylistWindow]; } } - (void) windowDidMove: (NSNotification *) aNotification { id object; object = [aNotification object]; if (object == playerWindow) [self _playerWindowDidMove]; else if (object == playlistWindow) [self _playlistWindowDidMove]; else NSLog (@"%s(%d): unexpected notification object:\n %@", __FILE__, __LINE__, [object description]); } - (void) windowDidResize: (NSNotification *) aNotification { GeneralPreference *generalPreference; generalPreference = [GeneralPreference instance]; if ([aNotification object] == playlistWindow && [generalPreference windowsAreSticky] && isStuck) [self _recheckIfIsStuck]; } // - (void) windowDidBecomeMain: (NSNotification *) aNotification // { // NSWindow *otherWindow; // if (!step) // keyWindow = [aNotification object]; // otherWindow = ((keyWindow == playerWindow) // ? playlistWindow // : playerWindow); // NSLog (@"step %d", step); // NSLog (@"keyWindow: %d; other: %d", [keyWindow isKeyWindow], [otherWindow isKeyWindow]); // switch (step) // { // case 0: // NSLog (@"key: %@", [keyWindow title]); // step++; // [keyWindow orderFront: self]; // [keyWindow resignKeyWindow]; // [otherWindow makeKeyAndOrderFront: self]; // // [otherWindow becomeKeyWindow]; // break; // case 1: // step++; // [keyWindow makeKeyAndOrderFront: self]; // [otherWindow resignKeyWindow]; // // [otherWindow becomeKeyWindow]; // break; // case 2: // if (keyWindow == playlistWindow) // step++; // else // { // keyWindow = nil; // step = 0; // } // break; // default: // keyWindow = nil; // step = 0; // } // } - (void) applicationWillTerminate: (NSNotification *) notification { [playlistController savePlayerState]; } /* Services */ - (id) validRequestorForSendType: (NSString *)sendType returnType: (NSString *)returnType { return [playlistController validRequestorForSendType: sendType returnType: returnType]; } @end cynthiune.app-0.9.5/Cynthiune.pbproj/0000755000175000017500000000000010413173165017114 5ustar gurkangurkancynthiune.app-0.9.5/Cynthiune.pbproj/project.pbxproj0000644000175000017500000036254510413164704022206 0ustar gurkangurkan// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 38; objects = { 080E96DDFE201D6D7F000001 = { children = ( EAFFEE82086E61A7039AFE6D, EAFFEE4B086E54DA039AFE6D, EA8795E006F66AA403809032, EAFFEE4D086E54DA039AFE6D, EA778ACD09B5778A032657EF, EAFFEE50086E54DA039AFE6D, EAFFEE56086E54DA039AFE6D, EAFFEE58086E54DA039AFE6D, EA8BBBFA0682D60703C2B047, EA8A19180688EE2B03C0F62E, EAC9033808F2ED0603D0D62A, F7858BEC061FC27301C0FE28, F7858BEE061FC27301C0FE28, F7858BF0061FC27301C0FE28, EAC9033C08F2ED3103D0D62A, EAFFEE86086E61D7039AFE6D, F7858BF4061FC27301C0FE28, EA73D4B5074C81F203F60D55, EA73D4B7074C81F203F60D55, F7858BF6061FC27301C0FE28, EAC9034008F2ED4903D0D62A, F7858BF8061FC27301C0FE28, EA7EE76C063AE6B6039F4895, EAC9034208F2ED4903D0D62A, F7858BFD061FC27301C0FE28, F7858BFF061FC27301C0FE28, EA958510078BA57703566F1F, F7858C01061FC27301C0FE28, ); isa = PBXGroup; name = Classes; refType = 4; }; 089C165CFE840E0CC02AAC07 = { children = ( 089C165DFE840E0CC02AAC07, EA7EE7DC063B0267039F4895, EAB991A1086E52690334F83B, EA8E3562094766F7032DC65E, EA88F6F2068222A103ABED23, EA8E355D09476698032DC65E, EA8E35630947670D032DC65E, EA8E355E094766BD032DC65E, ); isa = PBXVariantGroup; name = InfoPlist.strings; refType = 4; }; 089C165DFE840E0CC02AAC07 = { fileEncoding = 10; isa = PBXFileReference; name = English; path = English.lproj/InfoPlist.strings; refType = 4; }; 089C165EFE840E0CC02AAC07 = { fileRef = 089C165CFE840E0CC02AAC07; isa = PBXBuildFile; settings = { }; }; //080 //081 //082 //083 //084 //100 //101 //102 //103 //104 1058C7A0FEA54F0111CA2CBB = { children = ( F502405C03B83D6601000004, F502406503B83D9A01000004, F502404803B83C9E01000004, F531F10803BB93F301000004, 29B97325FDCFA39411CA2CEA, 29B97324FDCFA39411CA2CEA, EA9EE052078207F20394BCE8, ); isa = PBXGroup; name = "Linked Frameworks"; refType = 4; }; //100 //101 //102 //103 //104 //170 //171 //172 //173 //174 17587328FF379C6511CA2CBB = { isa = PBXApplicationReference; path = Cynthiune.app; refType = 3; }; //170 //171 //172 //173 //174 //190 //191 //192 //193 //194 19C28FACFE9D520D11CA2CBB = { children = ( 17587328FF379C6511CA2CBB, F7BED96E0621E945010E156D, EA8A20BC0675A4A203A8D3C1, EA8F759E06F89A7D03F15592, EA85A0EB062774250303B004, EA88F6F9068234B203ABED23, EA1D794C06263DD503CFD9F6, EA949F6E062720760348A0D9, EA80096A0629F20C036EED6D, EA8D0BFF06268DD403000102, EA96C1DE0770F81F03166923, EA96C1E60770F84803166923, EAA95C3609D0ECF3039F499A, EA8E357109476B19032DC65E, EAA6DF9E09A66BFD034E8D88, ); isa = PBXGroup; name = Products; refType = 4; }; //190 //191 //192 //193 //194 //290 //291 //292 //293 //294 29B97313FDCFA39411CA2CEA = { buildStyles = ( 4A9504CCFFE6A4B311CA0CBA, 4A9504CDFFE6A4B311CA0CBA, ); isa = PBXProject; knownRegions = ( English, French, German, Italian, Slovak, TraditionalChinese, Hungarian, Spanish, ); mainGroup = 29B97314FDCFA39411CA2CEA; projectDirPath = ""; targets = ( 29B97326FDCFA39411CA2CEA, F7BED96D0621E945010E156D, EA8A20BB0675A4A203A8D3C1, EA8F759D06F89A7D03F15592, EA85A0EA062774250303B004, EA88F6F8068234B203ABED23, EA1D794B06263DD503CFD9F6, EA949F6D062720760348A0D9, EA8009690629F20C036EED6D, EA8D0BFE06268DD403000102, EA96C1DD0770F81F03166923, EA96C1E50770F84803166923, EA8E357009476B19032DC65E, EAA6DF9D09A66BFD034E8D88, EAA95C3509D0ECF3039F499A, ); }; 29B97314FDCFA39411CA2CEA = { children = ( 080E96DDFE201D6D7F000001, F559092303B834D301000004, EA1D796D0626400703CFD9F6, F51A012B03BA9CCB01000004, 29B97315FDCFA39411CA2CEA, 29B97317FDCFA39411CA2CEA, 29B97323FDCFA39411CA2CEA, 19C28FACFE9D520D11CA2CBB, ); isa = PBXGroup; name = Cynthiune; path = ""; refType = 4; }; 29B97315FDCFA39411CA2CEA = { children = ( 29B97316FDCFA39411CA2CEA, ); isa = PBXGroup; name = "Other Sources"; path = ""; refType = 4; }; 29B97316FDCFA39411CA2CEA = { isa = PBXFileReference; path = main.m; refType = 4; }; 29B97317FDCFA39411CA2CEA = { children = ( F59C8F6803C0152501C14AF2, 089C165CFE840E0CC02AAC07, EA7EE7DD063B035E039F4895, F559092103B834CA01000004, F7BED96F0621E9B5010E156D, F7BED9710621E9CF010E156D, EA958513078BAB6B03566F1F, ); isa = PBXGroup; name = Resources; path = ""; refType = 4; }; 29B97323FDCFA39411CA2CEA = { children = ( EAFFEE69086E5596039AFE6D, 1058C7A0FEA54F0111CA2CBB, ); isa = PBXGroup; name = Frameworks; path = ""; refType = 4; }; 29B97324FDCFA39411CA2CEA = { isa = PBXFrameworkReference; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; refType = 0; }; 29B97325FDCFA39411CA2CEA = { isa = PBXFrameworkReference; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; refType = 0; }; 29B97326FDCFA39411CA2CEA = { buildPhases = ( 29B97327FDCFA39411CA2CEA, 29B97328FDCFA39411CA2CEA, 29B9732BFDCFA39411CA2CEA, 29B9732DFDCFA39411CA2CEA, EA62D086062660D20381E0C0, EA62D08A062660ED0381E0C0, ); buildSettings = { BUILD_SETTING = ""; DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = /home/wolfgang/programmes/gnustep/Cynthiune/build; HEADER_SEARCH_PATHS = ""; LIBRARY_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-Wall -D__MACOSX__"; OTHER_LDFLAGS = "-L/usr/local/lib -lmusicbrainz -lexpat -lstdc++"; PREBINDING = NO; PRODUCT_NAME = Cynthiune; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = app; }; dependencies = ( EA1D7972062640F703CFD9F6, EAD5CA350675ACB103B51BF6, EA8F759F06F89A9103F15592, EA88F6FA068234C503ABED23, EAC9034708F2EF8403D0D62A, EA96C1E70770F84F03166923, EA1D7973062640FF03CFD9F6, EA949F6F0627207D0348A0D9, EAA95C3709D0EDBF039F499A, EA8E357209476B85032DC65E, EAA6DF9F09A66D69034E8D88, ); isa = PBXApplicationTarget; name = Cynthiune; productName = Cynthiune; productReference = 17587328FF379C6511CA2CBB; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleDocumentTypes CFBundleTypeExtensions ogg CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes application/ogg application/x-ogg CFBundleTypeName Ogg music file CFBundleTypeRole Viewer CFBundleTypeExtensions mp3 mp2 mpa mpga mpega CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes audio/mpeg audio/x-mpeg audio/mpeg3 audio/x-mpeg3 audio/mpg audio/x-mpg audio/mp3 audio/x-mp3 CFBundleTypeName MPEG music file CFBundleTypeRole Viewer CFBundleTypeExtensions mpc mp+ CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes audio/musepack audio/x-musepack CFBundleTypeName Musepack music file CFBundleTypeRole Viewer CFBundleTypeExtensions fla flac CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes audio/flac audio/x-flac CFBundleTypeName FLAC music file CFBundleTypeRole Viewer CFBundleTypeExtensions aif aifc aiff au avr iff nist snd wav CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes audio/aiff audio/x-aiff audio/basic audio/x-basic audio/au audio/x-au audio/x-ulaw audio/avr audio/x-avr application/iff application/x-iff audio/nist audio/x-nist audio/snd audio/x-snd audio/wav audio/x-wav CFBundleTypeName Sound file CFBundleTypeRole Viewer CFBundleTypeExtensions mod it xm 669 amf ams dbm dmf dsm far it j2b mdl med mod mt2 mtm okt psm ptm s3m stm ult umx mod xm CFBundleTypeIconFile Cynthiune-song CFBundleTypeMIMETypes audio/669 audio/amf audio/ams audio/dbm audio/dmf audio/dsm audio/far audio/it audio/j2b audio/mdl audio/med audio/mod audio/mt2 audio/mtm audio/okt audio/psm audio/ptm audio/s3m audio/stm audio/ult audio/umx audio/mod audio/xm audio/x-669 audio/x-amf audio/x-ams audio/x-dbm audio/x-dmf audio/x-dsm audio/x-far audio/x-it audio/x-j2b audio/x-mdl audio/x-med audio/x-mod audio/x-mt2 audio/x-mtm audio/x-okt audio/x-psm audio/x-ptm audio/x-s3m audio/x-stm audio/x-ult audio/x-umx audio/x-mod audio/x-xm CFBundleTypeName Tracker music file CFBundleTypeRole Viewer CFBundleTypeExtensions pls m3u CFBundleTypeIconFile Cynthiune-playlist CFBundleTypeName Playlist file CFBundleTypeRole Viewer CFBundleExecutable Cynthiune CFBundleGetInfoString A free software and romantic music player CFBundleIconFile Cynthiune.icns CFBundleIdentifier com.Wolfgang@Contre.com.Cynthiune CFBundleInfoDictionaryVersion 6.0 CFBundleName Cynthiune CFBundlePackageType APPL CFBundleShortVersionString Version 0.9.5 CFBundleSignature WOSO CFBundleVersion 0.9.5 NSMainNibFile Cynthiune NSPrincipalClass NSApplication "; shouldUseHeadermap = 1; }; 29B97327FDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( EA8B67D206F81B0B03464193, EA8B67D306F81B0D03464193, EA8B67D406F81B0D03464193, EA8B67D506F81B0E03464193, EA8B67D706F81B1003464193, EA8B67D806F81B1103464193, EA8B67D906F81B1103464193, EA8B67DB06F81B1303464193, EA8B67DD06F81B1603464193, EA8B67DE06F81B1603464193, EA8B67DF06F81B1703464193, EA547B70078A4D270358AD96, EA547B71078A4D280358AD96, EA958511078BA57703566F1F, EAFFEE5A086E54DA039AFE6D, EAFFEE5D086E54DA039AFE6D, EAFFEE63086E54DA039AFE6D, EAFFEE65086E54DA039AFE6D, EAFFEE67086E553A039AFE6D, EAFFEE68086E5540039AFE6D, EAFFEE83086E61A7039AFE6D, EAFFEE87086E61D7039AFE6D, EAC9033908F2ED0603D0D62A, EAC9033D08F2ED3103D0D62A, EAC9034308F2ED4903D0D62A, EAC9034508F2ED4903D0D62A, EAAF6D4E092BC55703000102, EA778ACE09B5778A032657EF, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B97328FDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( 089C165EFE840E0CC02AAC07, EA7EE7DF063B035E039F4895, F51A012E03BA9CE401000004, F51A012F03BA9CE401000004, F59C8F7A03C01A7601C14AF2, EA7EE7E3063B04D0039F4895, EA7EE7E4063B04D0039F4895, EA1D792B06263C3E03CFD9F6, EA8B67B706F819BA03464193, EA8B67B806F819BB03464193, EA7EE7A9063AF543039F4895, EA7EE7AC063AF546039F4895, EA7EE7AE063AF547039F4895, EA7EE7AF063AF548039F4895, EA7EE7B1063AF549039F4895, EA7EE7B0063AF549039F4895, EA7EE7A5063AF541039F4895, EA7EE7B4063AF54C039F4895, EA7EE7A6063AF542039F4895, EA7EE7B8063AF54F039F4895, EA7EE7A7063AF542039F4895, EA7EE7B9063AF54F039F4895, EA7EE7A8063AF543039F4895, EA7EE7BC063AF554039F4895, EA7EE7AA063AF544039F4895, EA7EE7C1063AF557039F4895, EA8A20D80675A80A03A8D3C1, EA8A20D70675A80A03A8D3C1, EA8A20DA0675A80A03A8D3C1, EA8A20D90675A80A03A8D3C1, EA8A20DC0675A80A03A8D3C1, EA8A20DB0675A80A03A8D3C1, EA958514078BAB6B03566F1F, EAB991AB086E52A60334F83B, EAB991AC086E52A60334F83B, EAB991AD086E52A60334F83B, EAB991AE086E52A60334F83B, EAB991AF086E52A60334F83B, EAB991B0086E52A60334F83B, EAB991B1086E52A60334F83B, EAB991B2086E52A60334F83B, EAFFEE8E086E688A039AFE6D, EAFFEE8F086E688A039AFE6D, EAFFEE92086E688A039AFE6D, EAAF6D3B092BC4F303000102, EAAF6D3C092BC4F303000102, EAAF6D46092BC51E03000102, EAAF6D47092BC51E03000102, EAAF6D4B092BC51E03000102, EAAF6D4C092BC51E03000102, EA4FAC5109A456860310F3BF, EA5AA10C09A51CA303396ECD, EA5AA10E09A5220203396ECD, EAA6DF9309A663DE034E8D88, EAA6DF9409A663DE034E8D88, EAF9B4DA09D0EE7F037E42D6, EA03BA5E09D0FE6B036B92BF, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B9732BFDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( 29B9732CFDCFA39411CA2CEA, EA8B67B906F819C303464193, EA8B67BC06F819C603464193, EA8B67BD06F819C603464193, EA8B67BE06F819C803464193, EA8B67C006F819CA03464193, EA8B67C106F819CA03464193, EA8B67C206F819CB03464193, EA8B67C406F819CC03464193, EA8B67C506F819CD03464193, EA8B67C606F819CE03464193, EA8B67C706F819CE03464193, EA8B67E806F8202803464193, EA8B67E906F8202903464193, EA547B6E078A4D220358AD96, EA547B6F078A4D220358AD96, EA958512078BA57703566F1F, EAFFEE59086E54DA039AFE6D, EAFFEE5B086E54DA039AFE6D, EAFFEE5E086E54DA039AFE6D, EAFFEE64086E54DA039AFE6D, EAFFEE66086E54DA039AFE6D, EAFFEE84086E61A7039AFE6D, EAFFEE88086E61D7039AFE6D, EAC9033A08F2ED0603D0D62A, EAC9033E08F2ED3103D0D62A, EAC9034408F2ED4903D0D62A, EAC9034608F2ED4903D0D62A, EA778ACF09B5778A032657EF, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; 29B9732CFDCFA39411CA2CEA = { fileRef = 29B97316FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { ATTRIBUTES = ( ); }; }; 29B9732DFDCFA39411CA2CEA = { buildActionMask = 2147483647; files = ( F531F18903BB941C01000004, EAC9034E09079E5503D0D62A, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; //290 //291 //292 //293 //294 //4A0 //4A1 //4A2 //4A3 //4A4 4A9504CCFFE6A4B311CA0CBA = { buildRules = ( ); buildSettings = { COPY_PHASE_STRIP = YES; OPTIMIZATION_CFLAGS = "-O2"; }; isa = PBXBuildStyle; name = Development; }; 4A9504CDFFE6A4B311CA0CBA = { buildRules = ( ); buildSettings = { COPY_PHASE_STRIP = YES; }; isa = PBXBuildStyle; name = Deployment; }; //4A0 //4A1 //4A2 //4A3 //4A4 //EA0 //EA1 //EA2 //EA3 //EA4 EA03BA5109D0F7CF036B92BF = { fileRef = EAA95C3609D0ECF3039F499A; isa = PBXBuildFile; settings = { }; }; EA03BA5209D0F801036B92BF = { children = ( EA03BA5509D0F84A036B92BF, EA03BA5909D0F862036B92BF, ); isa = PBXGroup; name = Classes; refType = 4; }; EA03BA5309D0F80B036B92BF = { children = ( EA03BA5409D0F84A036B92BF, EA03BA5809D0F862036B92BF, ); isa = PBXGroup; name = Headers; refType = 4; }; EA03BA5409D0F84A036B92BF = { isa = PBXFileReference; name = CNSFileHandle.h; path = Bundles/Musepack/CNSFileHandle.h; refType = 4; }; EA03BA5509D0F84A036B92BF = { isa = PBXFileReference; name = CNSFileHandle.m; path = Bundles/Musepack/CNSFileHandle.m; refType = 4; }; EA03BA5609D0F84A036B92BF = { fileRef = EA03BA5409D0F84A036B92BF; isa = PBXBuildFile; settings = { }; }; EA03BA5709D0F84A036B92BF = { fileRef = EA03BA5509D0F84A036B92BF; isa = PBXBuildFile; settings = { }; }; EA03BA5809D0F862036B92BF = { isa = PBXFileReference; name = Musepack.h; path = Bundles/Musepack/Musepack.h; refType = 4; }; EA03BA5909D0F862036B92BF = { isa = PBXFileReference; name = Musepack.m; path = Bundles/Musepack/Musepack.m; refType = 4; }; EA03BA5A09D0F862036B92BF = { fileRef = EA03BA5809D0F862036B92BF; isa = PBXBuildFile; settings = { }; }; EA03BA5B09D0F862036B92BF = { fileRef = EA03BA5909D0F862036B92BF; isa = PBXBuildFile; settings = { }; }; EA03BA5C09D0FCF7036B92BF = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA03BA5D09D0FCFD036B92BF = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA03BA5E09D0FE6B036B92BF = { fileRef = EA96C1E60770F84803166923; isa = PBXBuildFile; settings = { }; }; EA03BA6209D0FE75036B92BF = { fileRef = EA96C1E60770F84803166923; isa = PBXBuildFile; settings = { }; }; EA0E08F206268A1F034EFD4C = { children = ( EA8D0BF706268D9503000102, EA8D0BF806268D9D03000102, ); isa = PBXGroup; name = dummy; refType = 4; }; EA1D792B06263C3E03CFD9F6 = { fileRef = F559092103B834CA01000004; isa = PBXBuildFile; settings = { }; }; EA1D794606263DD503CFD9F6 = { buildActionMask = 2147483647; files = ( EA1D796706263FB803CFD9F6, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA1D794706263DD503CFD9F6 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA1D794806263DD503CFD9F6 = { buildActionMask = 2147483647; files = ( EA1D796406263FB803CFD9F6, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA1D794906263DD503CFD9F6 = { buildActionMask = 2147483647; files = ( EA1D79710626406203CFD9F6, EA1D7A780626566303CFD9F6, EA9EE05E078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA1D794A06263DD503CFD9F6 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA1D794B06263DD503CFD9F6 = { buildPhases = ( EA1D794606263DD503CFD9F6, EA1D794706263DD503CFD9F6, EA1D794806263DD503CFD9F6, EA1D794906263DD503CFD9F6, EA1D794A06263DD503CFD9F6, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lvorbis -lvorbisfile -logg"; OTHER_REZFLAGS = ""; PRODUCT_NAME = Ogg; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "\U0001-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = Ogg; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = Ogg.output; productReference = EA1D794C06263DD503CFD9F6; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable Ogg CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass Ogg "; shouldUseHeadermap = 0; }; EA1D794C06263DD503CFD9F6 = { isa = PBXBundleReference; path = Ogg.format; refType = 3; }; EA1D795306263FB803CFD9F6 = { children = ( EA1D796F0626401C03CFD9F6, EA1D79700626402403CFD9F6, ); isa = PBXGroup; name = Ogg; path = Bundles/Ogg; refType = 2; }; EA1D795606263FB803CFD9F6 = { isa = PBXFileReference; path = Ogg.m; refType = 4; }; EA1D795906263FB803CFD9F6 = { isa = PBXFileReference; path = Ogg.h; refType = 4; }; EA1D796406263FB803CFD9F6 = { fileRef = EA1D795606263FB803CFD9F6; isa = PBXBuildFile; settings = { }; }; EA1D796706263FB803CFD9F6 = { fileRef = EA1D795906263FB803CFD9F6; isa = PBXBuildFile; settings = { }; }; EA1D796D0626400703CFD9F6 = { children = ( EA8A20B30675A45C03A8D3C1, EA8F759506F89A1F03F15592, EA85A0E2062773E80303B004, EA9ADAFD06823B0603000102, EA96C1E90770F87B03166923, EA1D795306263FB803CFD9F6, EA96C1E80770F87303166923, EA949F70062720910348A0D9, EA80096F0629F2D7036EED6D, EA0E08F206268A1F034EFD4C, EAA95C2F09D0ECA7039F499A, EADC4D6409476C1203B0DF6D, EAA6DF9509A66BCC034E8D88, ); isa = PBXGroup; name = Bundles; refType = 4; }; EA1D796F0626401C03CFD9F6 = { children = ( EA1D795606263FB803CFD9F6, ); isa = PBXGroup; name = Classes; refType = 4; }; EA1D79700626402403CFD9F6 = { children = ( EA1D795906263FB803CFD9F6, ); isa = PBXGroup; name = Headers; path = ""; refType = 4; }; EA1D79710626406203CFD9F6 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA1D7972062640F703CFD9F6 = { isa = PBXTargetDependency; target = F7BED96D0621E945010E156D; }; EA1D7973062640FF03CFD9F6 = { isa = PBXTargetDependency; target = EA1D794B06263DD503CFD9F6; }; EA1D7A780626566303CFD9F6 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA2D90570629F91B03D508AF = { children = ( EA2D90580629F93F03D508AF, ); isa = PBXGroup; name = Resources; refType = 4; }; EA2D90580629F93F03D508AF = { isa = PBXFileReference; name = EsoundPreferences.nib; path = Bundles/Esound/EsoundPreferences.nib; refType = 4; }; EA2D90590629F93F03D508AF = { fileRef = EA2D90580629F93F03D508AF; isa = PBXBuildFile; settings = { }; }; EA4C20D006F89FFA03A0FA18 = { fileRef = EA8F759E06F89A7D03F15592; isa = PBXBuildFile; settings = { }; }; EA4FAC4F09A451B00310F3BF = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA4FAC5009A456860310F3BF = { isa = PBXFileReference; name = lock.tiff; path = Images/lock.tiff; refType = 4; }; EA4FAC5109A456860310F3BF = { fileRef = EA4FAC5009A456860310F3BF; isa = PBXBuildFile; settings = { }; }; EA547B68078A36000358AD96 = { isa = PBXFileReference; name = NSStringExtensions.h; path = Frameworks/Cynthiune/NSStringExtensions.h; refType = 4; }; EA547B69078A36000358AD96 = { isa = PBXFileReference; name = NSStringExtensions.m; path = Frameworks/Cynthiune/NSStringExtensions.m; refType = 4; }; EA547B6A078A36000358AD96 = { fileRef = EA547B68078A36000358AD96; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA547B6B078A36000358AD96 = { fileRef = EA547B69078A36000358AD96; isa = PBXBuildFile; settings = { }; }; EA547B6C078A4B710358AD96 = { fileRef = EA73D4C0074C823503F60D55; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA547B6E078A4D220358AD96 = { fileRef = EA73D4B5074C81F203F60D55; isa = PBXBuildFile; settings = { }; }; EA547B6F078A4D220358AD96 = { fileRef = EA73D4B7074C81F203F60D55; isa = PBXBuildFile; settings = { }; }; EA547B70078A4D270358AD96 = { fileRef = EA73D4B4074C81F203F60D55; isa = PBXBuildFile; settings = { }; }; EA547B71078A4D280358AD96 = { fileRef = EA73D4B6074C81F203F60D55; isa = PBXBuildFile; settings = { }; }; EA5AA10B09A51CA303396ECD = { isa = PBXFileReference; name = "Cynthiune-playlist.icns"; path = "Images/Cynthiune-playlist.icns"; refType = 4; }; EA5AA10C09A51CA303396ECD = { fileRef = EA5AA10B09A51CA303396ECD; isa = PBXBuildFile; settings = { }; }; EA5AA10D09A5220203396ECD = { isa = PBXFileReference; name = "Cynthiune-song.icns"; path = "Images/Cynthiune-song.icns"; refType = 4; }; EA5AA10E09A5220203396ECD = { fileRef = EA5AA10D09A5220203396ECD; isa = PBXBuildFile; settings = { }; }; EA62D086062660D20381E0C0 = { buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 10; files = ( EA62D089062660DC0381E0C0, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA62D089062660DC0381E0C0 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA62D08A062660ED0381E0C0 = { buildActionMask = 2147483647; dstPath = ""; dstSubfolderSpec = 13; files = ( EA8A20CC0675A79E03A8D3C1, EA4C20D006F89FFA03A0FA18, EAC9034D08F2F12103D0D62A, EA88F7010682380403ABED23, EA03BA6209D0FE75036B92BF, EA62D08B062660F90381E0C0, EA67544D0627317F0396FC5D, EA03BA5109D0F7CF036B92BF, EA8E357609476BA7032DC65E, EA7EC09209A66E4A0362234A, ); isa = PBXCopyFilesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA62D08B062660F90381E0C0 = { fileRef = EA1D794C06263DD503CFD9F6; isa = PBXBuildFile; settings = { }; }; EA675446062726D80396FC5D = { isa = PBXFileReference; name = MacOSXPlayer.m; path = Bundles/MacOSX/MacOSXPlayer.m; refType = 4; }; EA675447062726D80396FC5D = { fileRef = EA675446062726D80396FC5D; isa = PBXBuildFile; settings = { }; }; EA675448062726F10396FC5D = { isa = PBXFileReference; name = MacOSXPlayer.h; path = Bundles/MacOSX/MacOSXPlayer.h; refType = 4; }; EA675449062726F10396FC5D = { fileRef = EA675448062726F10396FC5D; isa = PBXBuildFile; settings = { }; }; EA67544A062731380396FC5D = { fileRef = F531F10803BB93F301000004; isa = PBXBuildFile; settings = { }; }; EA67544D0627317F0396FC5D = { fileRef = EA949F6E062720760348A0D9; isa = PBXBuildFile; settings = { }; }; EA73D4B4074C81F203F60D55 = { isa = PBXFileReference; path = PlayerController.h; refType = 4; }; EA73D4B5074C81F203F60D55 = { isa = PBXFileReference; path = PlayerController.m; refType = 4; }; EA73D4B6074C81F203F60D55 = { isa = PBXFileReference; path = PlayerPreference.h; refType = 4; }; EA73D4B7074C81F203F60D55 = { isa = PBXFileReference; path = PlayerPreference.m; refType = 4; }; EA73D4C0074C823503F60D55 = { isa = PBXFileReference; name = MailService.h; path = Frameworks/Cynthiune/MailService.h; refType = 4; }; EA73D4C1074C823503F60D55 = { isa = PBXFileReference; name = MailService.m; path = Frameworks/Cynthiune/MailService.m; refType = 4; }; EA778ACC09B5778A032657EF = { isa = PBXFileReference; path = CynthiuneHeaderCell.h; refType = 4; }; EA778ACD09B5778A032657EF = { isa = PBXFileReference; path = CynthiuneHeaderCell.m; refType = 4; }; EA778ACE09B5778A032657EF = { fileRef = EA778ACC09B5778A032657EF; isa = PBXBuildFile; settings = { }; }; EA778ACF09B5778A032657EF = { fileRef = EA778ACD09B5778A032657EF; isa = PBXBuildFile; settings = { }; }; EA7EC09209A66E4A0362234A = { fileRef = EAA6DF9E09A66BFD034E8D88; isa = PBXBuildFile; settings = { }; }; EA7EC09309A66F5F0362234A = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA7EC09409A66F600362234A = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA7EE734063AE6B6039F4895 = { isa = PBXFileReference; name = CynthiuneBundle.h; path = Frameworks/Cynthiune/CynthiuneBundle.h; refType = 4; }; EA7EE76B063AE6B6039F4895 = { isa = PBXFileReference; path = PlaylistView.h; refType = 4; }; EA7EE76C063AE6B6039F4895 = { isa = PBXFileReference; path = PlaylistView.m; refType = 4; }; EA7EE79F063AEA0B039F4895 = { isa = PBXFileReference; name = xing.h; path = Bundles/MP3/xing.h; refType = 4; }; EA7EE7A0063AEA0B039F4895 = { fileRef = EA7EE79F063AEA0B039F4895; isa = PBXBuildFile; settings = { }; }; EA7EE7A1063AEA1A039F4895 = { children = ( EA7EE7A3063AEA4F039F4895, ); isa = PBXGroup; name = "C source"; refType = 4; }; EA7EE7A2063AEA28039F4895 = { children = ( EA7EE79F063AEA0B039F4895, ); isa = PBXGroup; name = "C headers"; path = ""; refType = 4; }; EA7EE7A3063AEA4F039F4895 = { isa = PBXFileReference; name = xing.c; path = Bundles/MP3/xing.c; refType = 4; }; EA7EE7A4063AEA4F039F4895 = { fileRef = EA7EE7A3063AEA4F039F4895; isa = PBXBuildFile; settings = { }; }; EA7EE7A5063AF541039F4895 = { fileRef = F59C8F6C03C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7A6063AF542039F4895 = { fileRef = F59C8F6D03C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7A7063AF542039F4895 = { fileRef = F59C8F6E03C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7A8063AF543039F4895 = { fileRef = F59C8F6F03C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7A9063AF543039F4895 = { fileRef = F59C8F6B03C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7AA063AF544039F4895 = { fileRef = F59C8F7003C0155B01C14AF2; isa = PBXBuildFile; settings = { }; }; EA7EE7AC063AF546039F4895 = { fileRef = F7858C1F061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7AE063AF547039F4895 = { fileRef = F7858C21061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7AF063AF548039F4895 = { fileRef = F7858C22061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7B0063AF549039F4895 = { fileRef = F7858C23061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7B1063AF549039F4895 = { fileRef = F7858C24061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7B4063AF54C039F4895 = { fileRef = F7858C28061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7B8063AF54F039F4895 = { fileRef = F7858C2A061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7B9063AF54F039F4895 = { fileRef = F7858C2B061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7BC063AF554039F4895 = { fileRef = F7858C2E061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7C1063AF557039F4895 = { fileRef = F7858C33061FC31401C0FE28; isa = PBXBuildFile; settings = { }; }; EA7EE7DC063B0267039F4895 = { isa = PBXFileReference; name = French; path = French.lproj/InfoPlist.strings; refType = 4; }; EA7EE7DD063B035E039F4895 = { children = ( EA7EE7DE063B035E039F4895, EA7EE7E0063B036F039F4895, EAB991A2086E52690334F83B, EA8E356409476757032DC65E, EA88F6F10682227603ABED23, EA8E35650947676F032DC65E, EA8E356A09476934032DC65E, EA8E356909476796032DC65E, ); isa = PBXVariantGroup; name = Localizable.strings; path = ""; refType = 4; }; EA7EE7DE063B035E039F4895 = { isa = PBXFileReference; name = English; path = English.lproj/Localizable.strings; refType = 4; }; EA7EE7DF063B035E039F4895 = { fileRef = EA7EE7DD063B035E039F4895; isa = PBXBuildFile; settings = { }; }; EA7EE7E0063B036F039F4895 = { isa = PBXFileReference; name = French; path = French.lproj/Localizable.strings; refType = 4; }; EA7EE7E1063B04D0039F4895 = { isa = PBXFileReference; path = README; refType = 4; }; EA7EE7E2063B04D0039F4895 = { isa = PBXFileReference; path = TODO; refType = 4; }; EA7EE7E3063B04D0039F4895 = { fileRef = EA7EE7E1063B04D0039F4895; isa = PBXBuildFile; settings = { }; }; EA7EE7E4063B04D0039F4895 = { fileRef = EA7EE7E2063B04D0039F4895; isa = PBXBuildFile; settings = { }; }; EA8009640629F20C036EED6D = { buildActionMask = 2147483647; files = ( EA80097E0629F354036EED6D, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8009650629F20C036EED6D = { buildActionMask = 2147483647; files = ( EA2D90590629F93F03D508AF, ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8009660629F20C036EED6D = { buildActionMask = 2147483647; files = ( EA80097C0629F33B036EED6D, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8009670629F20C036EED6D = { buildActionMask = 2147483647; files = ( EA80096D0629F2C1036EED6D, EA80096E0629F2C3036EED6D, EA80096C0629F2B1036EED6D, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8009680629F20C036EED6D = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8009690629F20C036EED6D = { buildPhases = ( EA8009640629F20C036EED6D, EA8009650629F20C036EED6D, EA8009660629F20C036EED6D, EA8009670629F20C036EED6D, EA8009680629F20C036EED6D, ); buildSettings = { DEBUGGING_SYMBOLS = NO; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lesd"; OTHER_REZFLAGS = ""; PRODUCT_NAME = Esound; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = output; }; dependencies = ( ); isa = PBXBundleTarget; name = Esound; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = Esound; productReference = EA80096A0629F20C036EED6D; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable Esound CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass Esound "; shouldUseHeadermap = 0; }; EA80096A0629F20C036EED6D = { isa = PBXBundleReference; path = Esound.output; refType = 3; }; EA80096C0629F2B1036EED6D = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA80096D0629F2C1036EED6D = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA80096E0629F2C3036EED6D = { fileRef = 29B97324FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA80096F0629F2D7036EED6D = { children = ( EA8009790629F312036EED6D, EA80097A0629F318036EED6D, EA2D90570629F91B03D508AF, ); isa = PBXGroup; name = Esound; refType = 4; }; EA8009790629F312036EED6D = { children = ( EA80097B0629F33B036EED6D, ); isa = PBXGroup; name = Classes; refType = 4; }; EA80097A0629F318036EED6D = { children = ( EA80097D0629F354036EED6D, ); isa = PBXGroup; name = Headers; refType = 4; }; EA80097B0629F33B036EED6D = { isa = PBXFileReference; name = Esound.m; path = Bundles/Esound/Esound.m; refType = 4; }; EA80097C0629F33B036EED6D = { fileRef = EA80097B0629F33B036EED6D; isa = PBXBuildFile; settings = { }; }; EA80097D0629F354036EED6D = { isa = PBXFileReference; name = Esound.h; path = Bundles/Esound/Esound.h; refType = 4; }; EA80097E0629F354036EED6D = { fileRef = EA80097D0629F354036EED6D; isa = PBXBuildFile; settings = { }; }; EA85A0E2062773E80303B004 = { children = ( EA7EE7A1063AEA1A039F4895, EA7EE7A2063AEA28039F4895, EA85A0E4062774020303B004, EA85A0E3062773F30303B004, ); isa = PBXGroup; name = MP3; refType = 4; }; EA85A0E3062773F30303B004 = { children = ( EA85A0EF0627755D0303B004, ); isa = PBXGroup; name = Headers; refType = 4; }; EA85A0E4062774020303B004 = { children = ( EA85A0ED062775460303B004, ); isa = PBXGroup; name = Classes; refType = 4; }; EA85A0E5062774250303B004 = { buildActionMask = 2147483647; files = ( EA85A0F00627755D0303B004, EA7EE7A0063AEA0B039F4895, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA85A0E6062774250303B004 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA85A0E7062774250303B004 = { buildActionMask = 2147483647; files = ( EA85A0EE062775460303B004, EA7EE7A4063AEA4F039F4895, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA85A0E8062774250303B004 = { buildActionMask = 2147483647; files = ( EA85A0F10627757C0303B004, EA87125906277700037C85D7, EA9EE064078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA85A0E9062774250303B004 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA85A0EA062774250303B004 = { buildPhases = ( EA85A0E5062774250303B004, EA85A0E6062774250303B004, EA85A0E7062774250303B004, EA85A0E8062774250303B004, EA85A0E9062774250303B004, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lmad -lid3tag -lz"; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = MP3; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = MP3; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = MP3; productReference = EA85A0EB062774250303B004; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable MP3 CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass MP3 "; shouldUseHeadermap = 0; }; EA85A0EB062774250303B004 = { isa = PBXBundleReference; path = MP3.format; refType = 3; }; EA85A0ED062775460303B004 = { isa = PBXFileReference; name = MP3.m; path = Bundles/MP3/MP3.m; refType = 4; }; EA85A0EE062775460303B004 = { fileRef = EA85A0ED062775460303B004; isa = PBXBuildFile; settings = { }; }; EA85A0EF0627755D0303B004 = { isa = PBXFileReference; name = MP3.h; path = Bundles/MP3/MP3.h; refType = 4; }; EA85A0F00627755D0303B004 = { fileRef = EA85A0EF0627755D0303B004; isa = PBXBuildFile; settings = { }; }; EA85A0F10627757C0303B004 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA87125906277700037C85D7 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA8795DF06F66AA403809032 = { isa = PBXFileReference; path = CynthiuneController.h; refType = 4; }; EA8795E006F66AA403809032 = { isa = PBXFileReference; path = CynthiuneController.m; refType = 4; }; EA8795E306F66AA403809032 = { isa = PBXFileReference; name = NSNumberExtensions.h; path = Frameworks/Cynthiune/NSNumberExtensions.h; refType = 4; }; EA8795E406F66AA403809032 = { isa = PBXFileReference; name = NSNumberExtensions.m; path = Frameworks/Cynthiune/NSNumberExtensions.m; refType = 4; }; EA8795E506F66AA403809032 = { isa = PBXFileReference; name = Output.h; path = Frameworks/Cynthiune/Output.h; refType = 4; }; EA88F6F10682227603ABED23 = { isa = PBXFileReference; name = Italian; path = Italian.lproj/Localizable.strings; refType = 4; }; EA88F6F2068222A103ABED23 = { isa = PBXFileReference; name = Italian; path = Italian.lproj/InfoPlist.strings; refType = 4; }; EA88F6F3068234B203ABED23 = { buildActionMask = 2147483647; files = ( EA9ADB0306823B7A03000102, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA88F6F4068234B203ABED23 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA88F6F5068234B203ABED23 = { buildActionMask = 2147483647; files = ( EA9ADB0106823B6103000102, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA88F6F6068234B203ABED23 = { buildActionMask = 2147483647; files = ( EA9ADB0406823B9103000102, EA9ADB0506823BA103000102, EA9EE063078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA88F6F7068234B203ABED23 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA88F6F8068234B203ABED23 = { buildPhases = ( EA88F6F3068234B203ABED23, EA88F6F4068234B203ABED23, EA88F6F5068234B203ABED23, EA88F6F6068234B203ABED23, EA88F6F7068234B203ABED23, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I/usr/local/include/libmodplug -I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lmodplug -lstdc++"; OTHER_REZFLAGS = ""; PRODUCT_NAME = Mod; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = Mod; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = Mod; productReference = EA88F6F9068234B203ABED23; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable Mod CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass Mod "; shouldUseHeadermap = 0; }; EA88F6F9068234B203ABED23 = { isa = PBXBundleReference; path = Mod.format; refType = 3; }; EA88F6FA068234C503ABED23 = { isa = PBXTargetDependency; target = EA88F6F8068234B203ABED23; }; EA88F7010682380403ABED23 = { fileRef = EA88F6F9068234B203ABED23; isa = PBXBuildFile; settings = { }; }; EA8A19170688EE2B03C0F62E = { isa = PBXFileReference; path = CynthiuneWindow.h; refType = 4; }; EA8A19180688EE2B03C0F62E = { isa = PBXFileReference; path = CynthiuneWindow.m; refType = 4; }; EA8A20B30675A45C03A8D3C1 = { children = ( EA8A20B40675A46B03A8D3C1, EA8A20B50675A47503A8D3C1, ); isa = PBXGroup; name = AudioFile; refType = 4; }; EA8A20B40675A46B03A8D3C1 = { children = ( EA8A20BD0675A4D003A8D3C1, ); isa = PBXGroup; name = Classes; refType = 4; }; EA8A20B50675A47503A8D3C1 = { children = ( EA8A20BF0675A4EB03A8D3C1, ); isa = PBXGroup; name = Headers; refType = 4; }; EA8A20B60675A4A203A8D3C1 = { buildActionMask = 2147483647; files = ( EA8A20C00675A4EB03A8D3C1, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8A20B70675A4A203A8D3C1 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8A20B80675A4A203A8D3C1 = { buildActionMask = 2147483647; files = ( EA8A20BE0675A4D003A8D3C1, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8A20B90675A4A203A8D3C1 = { buildActionMask = 2147483647; files = ( EA8A20CB0675A64903A8D3C1, EA4FAC4F09A451B00310F3BF, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8A20BA0675A4A203A8D3C1 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8A20BB0675A4A203A8D3C1 = { buildPhases = ( EA8A20B60675A4A203A8D3C1, EA8A20B70675A4A203A8D3C1, EA8A20B80675A4A203A8D3C1, EA8A20B90675A4A203A8D3C1, EA8A20BA0675A4A203A8D3C1, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp -framework Cynthiune"; OTHER_LDFLAGS = "-laudiofile -framework Cynthiune"; OTHER_REZFLAGS = ""; PRODUCT_NAME = AudioFile; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( EA9EE065078208320394BCE8, ); isa = PBXBundleTarget; name = AudioFile; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = AudioFile; productReference = EA8A20BC0675A4A203A8D3C1; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable AudioFile CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass AudioFile "; shouldUseHeadermap = 0; }; EA8A20BC0675A4A203A8D3C1 = { isa = PBXBundleReference; path = AudioFile.format; refType = 3; }; EA8A20BD0675A4D003A8D3C1 = { isa = PBXFileReference; name = AudioFile.m; path = Bundles/AudioFile/AudioFile.m; refType = 4; }; EA8A20BE0675A4D003A8D3C1 = { fileRef = EA8A20BD0675A4D003A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20BF0675A4EB03A8D3C1 = { isa = PBXFileReference; name = AudioFile.h; path = Bundles/AudioFile/AudioFile.h; refType = 4; }; EA8A20C00675A4EB03A8D3C1 = { fileRef = EA8A20BF0675A4EB03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20CB0675A64903A8D3C1 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA8A20CC0675A79E03A8D3C1 = { fileRef = EA8A20BC0675A4A203A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20CF0675A80A03A8D3C1 = { isa = PBXFileReference; name = "playlist-pushed.tiff"; path = "Images/playlist-pushed.tiff"; refType = 4; }; EA8A20D00675A80A03A8D3C1 = { isa = PBXFileReference; name = playlist.tiff; path = Images/playlist.tiff; refType = 4; }; EA8A20D10675A80A03A8D3C1 = { isa = PBXFileReference; name = "repeat-pushed.tiff"; path = "Images/repeat-pushed.tiff"; refType = 4; }; EA8A20D20675A80A03A8D3C1 = { isa = PBXFileReference; name = repeat.tiff; path = Images/repeat.tiff; refType = 4; }; EA8A20D30675A80A03A8D3C1 = { isa = PBXFileReference; name = "shuffle-pushed.tiff"; path = "Images/shuffle-pushed.tiff"; refType = 4; }; EA8A20D40675A80A03A8D3C1 = { isa = PBXFileReference; name = shuffle.tiff; path = Images/shuffle.tiff; refType = 4; }; EA8A20D70675A80A03A8D3C1 = { fileRef = EA8A20CF0675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20D80675A80A03A8D3C1 = { fileRef = EA8A20D00675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20D90675A80A03A8D3C1 = { fileRef = EA8A20D10675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20DA0675A80A03A8D3C1 = { fileRef = EA8A20D20675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20DB0675A80A03A8D3C1 = { fileRef = EA8A20D30675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8A20DC0675A80A03A8D3C1 = { fileRef = EA8A20D40675A80A03A8D3C1; isa = PBXBuildFile; settings = { }; }; EA8B67B706F819BA03464193 = { fileRef = F7BED96F0621E9B5010E156D; isa = PBXBuildFile; settings = { }; }; EA8B67B806F819BB03464193 = { fileRef = F7BED9710621E9CF010E156D; isa = PBXBuildFile; settings = { }; }; EA8B67B906F819C303464193 = { fileRef = EA8795E006F66AA403809032; isa = PBXBuildFile; settings = { }; }; EA8B67BC06F819C603464193 = { fileRef = F7858BEC061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67BD06F819C603464193 = { fileRef = F7858BEE061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67BE06F819C803464193 = { fileRef = F7858BF0061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C006F819CA03464193 = { fileRef = F7858BF4061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C106F819CA03464193 = { fileRef = F7858BF6061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C206F819CB03464193 = { fileRef = F7858BF8061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C406F819CC03464193 = { fileRef = EA7EE76C063AE6B6039F4895; isa = PBXBuildFile; settings = { }; }; EA8B67C506F819CD03464193 = { fileRef = F7858BFD061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C606F819CE03464193 = { fileRef = F7858BFF061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C706F819CE03464193 = { fileRef = F7858C01061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67C806F819F303464193 = { fileRef = F7858BFB061FC27301C0FE28; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67C906F819F403464193 = { fileRef = EA8795E506F66AA403809032; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67CA06F819F403464193 = { fileRef = F7858BEA061FC27301C0FE28; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67CC06F81A0303464193 = { fileRef = EA7EE734063AE6B6039F4895; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67D206F81B0B03464193 = { fileRef = EA8795DF06F66AA403809032; isa = PBXBuildFile; settings = { }; }; EA8B67D306F81B0D03464193 = { fileRef = F7858BEB061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67D406F81B0D03464193 = { fileRef = F7858BED061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67D506F81B0E03464193 = { fileRef = F7858BEF061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67D706F81B1003464193 = { fileRef = F7858BF3061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67D806F81B1103464193 = { fileRef = F7858BF5061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67D906F81B1103464193 = { fileRef = F7858BF7061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67DB06F81B1303464193 = { fileRef = EA7EE76B063AE6B6039F4895; isa = PBXBuildFile; settings = { }; }; EA8B67DD06F81B1603464193 = { fileRef = F7858BFC061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67DE06F81B1603464193 = { fileRef = F7858BFE061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67DF06F81B1703464193 = { fileRef = F7858C00061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; EA8B67E106F81B3A03464193 = { fileRef = F7858C1C061FC2A801C0FE28; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67E206F81B3C03464193 = { fileRef = EA8795E306F66AA403809032; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EA8B67E706F81B6C03464193 = { fileRef = EA8795E406F66AA403809032; isa = PBXBuildFile; settings = { }; }; EA8B67E806F8202803464193 = { fileRef = EA8A19180688EE2B03C0F62E; isa = PBXBuildFile; settings = { }; }; EA8B67E906F8202903464193 = { fileRef = EA8BBBFA0682D60703C2B047; isa = PBXBuildFile; settings = { }; }; EA8BBBF90682D60703C2B047 = { isa = PBXFileReference; path = CynthiunePopUpButton.h; refType = 4; }; EA8BBBFA0682D60703C2B047 = { isa = PBXFileReference; path = CynthiunePopUpButton.m; refType = 4; }; EA8D0BF706268D9503000102 = { children = ( EA8D0C0106268E3003000102, ); isa = PBXGroup; name = Classes; refType = 4; }; EA8D0BF806268D9D03000102 = { children = ( EA8D0C0306268E4303000102, ); isa = PBXGroup; name = Headers; refType = 4; }; EA8D0BF906268DD403000102 = { buildActionMask = 2147483647; files = ( EA8D0C0406268E4303000102, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8D0BFA06268DD403000102 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8D0BFB06268DD403000102 = { buildActionMask = 2147483647; files = ( EA8D0C0206268E3003000102, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8D0BFC06268DD403000102 = { buildActionMask = 2147483647; files = ( EA8D0C0506268E7903000102, EA8D0C0806268F2703000102, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8D0BFD06268DD403000102 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8D0BFE06268DD403000102 = { buildPhases = ( EA8D0BF906268DD403000102, EA8D0BFA06268DD403000102, EA8D0BFB06268DD403000102, EA8D0BFC06268DD403000102, EA8D0BFD06268DD403000102, ); buildSettings = { DEBUGGING_SYMBOLS = NO; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = dummy; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "\U0001-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = output; }; dependencies = ( ); isa = PBXBundleTarget; name = dummy; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = dummy; productReference = EA8D0BFF06268DD403000102; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable dummy CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass dummy "; shouldUseHeadermap = 0; }; EA8D0BFF06268DD403000102 = { isa = PBXBundleReference; path = dummy.output; refType = 3; }; EA8D0C0106268E3003000102 = { isa = PBXFileReference; name = dummy.m; path = Bundles/dummy/dummy.m; refType = 4; }; EA8D0C0206268E3003000102 = { fileRef = EA8D0C0106268E3003000102; isa = PBXBuildFile; settings = { }; }; EA8D0C0306268E4303000102 = { isa = PBXFileReference; name = dummy.h; path = Bundles/dummy/dummy.h; refType = 4; }; EA8D0C0406268E4303000102 = { fileRef = EA8D0C0306268E4303000102; isa = PBXBuildFile; settings = { }; }; EA8D0C0506268E7903000102 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA8D0C0806268F2703000102 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA8E355D09476698032DC65E = { isa = PBXFileReference; name = Slovak; path = Slovak.lproj/InfoPlist.strings; refType = 4; }; EA8E355E094766BD032DC65E = { isa = PBXFileReference; name = TraditionalChinese; path = TraditionalChinese.lproj/InfoPlist.strings; refType = 4; }; EA8E3562094766F7032DC65E = { isa = PBXFileReference; name = Hungarian; path = Hungarian.lproj/InfoPlist.strings; refType = 4; }; EA8E35630947670D032DC65E = { isa = PBXFileReference; name = Spanish; path = Spanish.lproj/InfoPlist.strings; refType = 4; }; EA8E356409476757032DC65E = { isa = PBXFileReference; name = Hungarian; path = Hungarian.lproj/Localizable.strings; refType = 4; }; EA8E35650947676F032DC65E = { isa = PBXFileReference; name = Slovak; path = Slovak.lproj/Localizable.strings; refType = 4; }; EA8E356909476796032DC65E = { isa = PBXFileReference; name = TraditionalChinese; path = TraditionalChinese.lproj/Localizable.strings; refType = 4; }; EA8E356A09476934032DC65E = { isa = PBXFileReference; name = Spanish; path = Spanish.lproj/Localizable.strings; refType = 4; }; EA8E356B09476B19032DC65E = { buildActionMask = 2147483647; files = ( EADC4D6909476C5903B0DF6D, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8E356C09476B19032DC65E = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8E356D09476B19032DC65E = { buildActionMask = 2147483647; files = ( EADC4D6A09476C5903B0DF6D, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8E356E09476B19032DC65E = { buildActionMask = 2147483647; files = ( EADC4D9C09476DC503B0DF6D, EADC4D9D09476DC503B0DF6D, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8E356F09476B19032DC65E = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8E357009476B19032DC65E = { buildPhases = ( EA8E356B09476B19032DC65E, EA8E356C09476B19032DC65E, EA8E356D09476B19032DC65E, EA8E356E09476B19032DC65E, EA8E356F09476B19032DC65E, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ""; JAVA_COMPILER_DEBUGGING_SYMBOLS = NO; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lid3tag -lz"; OTHER_REZFLAGS = ""; PRODUCT_NAME = ID3Tag; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = tags; }; dependencies = ( ); isa = PBXBundleTarget; name = ID3Tag; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = ID3Tag; productReference = EA8E357109476B19032DC65E; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable ID3Tag CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass ID3Tag "; shouldUseHeadermap = 0; }; EA8E357109476B19032DC65E = { isa = PBXBundleReference; path = ID3Tag.tags; refType = 3; }; EA8E357209476B85032DC65E = { isa = PBXTargetDependency; target = EA8E357009476B19032DC65E; }; EA8E357609476BA7032DC65E = { fileRef = EA8E357109476B19032DC65E; isa = PBXBuildFile; settings = { }; }; EA8F759506F89A1F03F15592 = { children = ( EA8F759606F89A3103F15592, EA8F759706F89A3C03F15592, ); isa = PBXGroup; name = FLAC; refType = 4; }; EA8F759606F89A3103F15592 = { children = ( EA8F75AE06F89D9103F15592, ); isa = PBXGroup; name = Classes; path = ""; refType = 4; }; EA8F759706F89A3C03F15592 = { children = ( EA8F75AD06F89D9103F15592, ); isa = PBXGroup; name = Headers; refType = 4; }; EA8F759806F89A7D03F15592 = { buildActionMask = 2147483647; files = ( EA8F75AF06F89D9103F15592, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8F759906F89A7D03F15592 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8F759A06F89A7D03F15592 = { buildActionMask = 2147483647; files = ( EA8F75B006F89D9103F15592, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8F759B06F89A7D03F15592 = { buildActionMask = 2147483647; files = ( EA8F75A806F89D3603F15592, EA8F75AC06F89D5E03F15592, EA9EE05C078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8F759C06F89A7D03F15592 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA8F759D06F89A7D03F15592 = { buildPhases = ( EA8F759806F89A7D03F15592, EA8F759906F89A7D03F15592, EA8F759A06F89A7D03F15592, EA8F759B06F89A7D03F15592, EA8F759C06F89A7D03F15592, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = ""; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lFLAC"; OTHER_REZFLAGS = ""; PRODUCT_NAME = FLAC; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = FLAC; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = FLAC; productReference = EA8F759E06F89A7D03F15592; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable FLAC CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass FLAC "; shouldUseHeadermap = 0; }; EA8F759E06F89A7D03F15592 = { isa = PBXBundleReference; path = FLAC.format; refType = 3; }; EA8F759F06F89A9103F15592 = { isa = PBXTargetDependency; target = EA8F759D06F89A7D03F15592; }; EA8F75A806F89D3603F15592 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA8F75AC06F89D5E03F15592 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA8F75AD06F89D9103F15592 = { isa = PBXFileReference; name = FLAC.h; path = Bundles/FLAC/FLAC.h; refType = 4; }; EA8F75AE06F89D9103F15592 = { isa = PBXFileReference; name = FLAC.m; path = Bundles/FLAC/FLAC.m; refType = 4; }; EA8F75AF06F89D9103F15592 = { fileRef = EA8F75AD06F89D9103F15592; isa = PBXBuildFile; settings = { }; }; EA8F75B006F89D9103F15592 = { fileRef = EA8F75AE06F89D9103F15592; isa = PBXBuildFile; settings = { }; }; EA9316530770FC6503000102 = { isa = PBXFileReference; name = CWMFile.cpp; path = Bundles/WindowsMedia/CWMFile.cpp; refType = 4; }; EA9316550770FC6503000102 = { fileRef = EA9316530770FC6503000102; isa = PBXBuildFile; settings = { }; }; EA9316560770FCEB03000102 = { isa = PBXFileReference; name = CWMFile.h; path = Bundles/WindowsMedia/CWMFile.h; refType = 4; }; EA9316570770FCEB03000102 = { fileRef = EA9316560770FCEB03000102; isa = PBXBuildFile; settings = { }; }; EA9316580770FD0903000102 = { isa = PBXFileReference; name = WindowsMedia.h; path = Bundles/WindowsMedia/WindowsMedia.h; refType = 4; }; EA9316590770FD0903000102 = { fileRef = EA9316580770FD0903000102; isa = PBXBuildFile; settings = { }; }; EA93165A0770FD3003000102 = { isa = PBXFileReference; name = WindowsMedia.m; path = Bundles/WindowsMedia/WindowsMedia.m; refType = 4; }; EA93165B0770FD3003000102 = { fileRef = EA93165A0770FD3003000102; isa = PBXBuildFile; settings = { }; }; EA949F68062720760348A0D9 = { buildActionMask = 2147483647; files = ( EA675449062726F10396FC5D, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA949F69062720760348A0D9 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA949F6A062720760348A0D9 = { buildActionMask = 2147483647; files = ( EA675447062726D80396FC5D, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA949F6B062720760348A0D9 = { buildActionMask = 2147483647; files = ( EA949F73062720CA0348A0D9, EA949F74062721CF0348A0D9, EA949F75062721D00348A0D9, EA949F76062721D30348A0D9, EA949F77062721D70348A0D9, EA67544A062731380396FC5D, EA9EE062078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA949F6C062720760348A0D9 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA949F6D062720760348A0D9 = { buildPhases = ( EA949F68062720760348A0D9, EA949F69062720760348A0D9, EA949F6A062720760348A0D9, EA949F6B062720760348A0D9, EA949F6C062720760348A0D9, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = ""; GCC_TREAT_WARNINGS_AS_ERRORS = YES; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = MacOSXPlayer; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = output; }; dependencies = ( ); isa = PBXBundleTarget; name = MacOSXPlayer; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = MacOSXPlayer; productReference = EA949F6E062720760348A0D9; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable MacOSXPlayer CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass MacOSXPlayer "; shouldUseHeadermap = 0; }; EA949F6E062720760348A0D9 = { isa = PBXBundleReference; path = MacOSXPlayer.output; refType = 3; }; EA949F6F0627207D0348A0D9 = { isa = PBXTargetDependency; target = EA949F6D062720760348A0D9; }; EA949F70062720910348A0D9 = { children = ( EA949F72062720A90348A0D9, EA949F710627209C0348A0D9, ); isa = PBXGroup; name = MacOSXPlayer; refType = 4; }; EA949F710627209C0348A0D9 = { children = ( EA675448062726F10396FC5D, ); isa = PBXGroup; name = Headers; refType = 4; }; EA949F72062720A90348A0D9 = { children = ( EA675446062726D80396FC5D, ); isa = PBXGroup; name = Classes; refType = 4; }; EA949F73062720CA0348A0D9 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA949F74062721CF0348A0D9 = { fileRef = F502406503B83D9A01000004; isa = PBXBuildFile; settings = { }; }; EA949F75062721D00348A0D9 = { fileRef = F502404803B83C9E01000004; isa = PBXBuildFile; settings = { }; }; EA949F76062721D30348A0D9 = { fileRef = F502405C03B83D6601000004; isa = PBXBuildFile; settings = { }; }; EA949F77062721D70348A0D9 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA95850F078BA57703566F1F = { isa = PBXFileReference; path = SongInspectorController.h; refType = 4; }; EA958510078BA57703566F1F = { isa = PBXFileReference; path = SongInspectorController.m; refType = 4; }; EA958511078BA57703566F1F = { fileRef = EA95850F078BA57703566F1F; isa = PBXBuildFile; settings = { }; }; EA958512078BA57703566F1F = { fileRef = EA958510078BA57703566F1F; isa = PBXBuildFile; settings = { }; }; EA958513078BAB6B03566F1F = { isa = PBXFileReference; path = SongInspector.nib; refType = 4; }; EA958514078BAB6B03566F1F = { fileRef = EA958513078BAB6B03566F1F; isa = PBXBuildFile; settings = { }; }; EA96C1D80770F81F03166923 = { buildActionMask = 2147483647; files = ( EA9316570770FCEB03000102, EA9316590770FD0903000102, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1D90770F81F03166923 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1DA0770F81F03166923 = { buildActionMask = 2147483647; files = ( EA9316550770FC6503000102, EA93165B0770FD3003000102, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1DB0770F81F03166923 = { buildActionMask = 2147483647; files = ( EA9EE061078207F20394BCE8, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1DC0770F81F03166923 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1DD0770F81F03166923 = { buildPhases = ( EA96C1D80770F81F03166923, EA96C1D90770F81F03166923, EA96C1DA0770F81F03166923, EA96C1DB0770F81F03166923, EA96C1DC0770F81F03166923, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = /home/wolfgang/programmes/gnustep/Cynthiune/build; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ""; OTHER_REZFLAGS = ""; PRODUCT_NAME = WindowsMedia; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = WindowsMedia; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = WindowsMedia; productReference = EA96C1DE0770F81F03166923; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable WindowsMedia CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature ???? CFBundleVersion 0.0.1d1 "; shouldUseHeadermap = 0; }; EA96C1DE0770F81F03166923 = { isa = PBXBundleReference; path = WindowsMedia.format; refType = 3; }; EA96C1E00770F84803166923 = { buildActionMask = 2147483647; files = ( EA03BA5609D0F84A036B92BF, EA03BA5A09D0F862036B92BF, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1E10770F84803166923 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1E20770F84803166923 = { buildActionMask = 2147483647; files = ( EA03BA5709D0F84A036B92BF, EA03BA5B09D0F862036B92BF, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1E30770F84803166923 = { buildActionMask = 2147483647; files = ( EA9EE05F078207F20394BCE8, EA03BA5C09D0FCF7036B92BF, EA03BA5D09D0FCFD036B92BF, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1E40770F84803166923 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EA96C1E50770F84803166923 = { buildPhases = ( EA96C1E00770F84803166923, EA96C1E10770F84803166923, EA96C1E20770F84803166923, EA96C1E30770F84803166923, EA96C1E40770F84803166923, ); buildSettings = { FRAMEWORK_SEARCH_PATHS = /home/wolfgang/programmes/gnustep/Cynthiune/build; OPTIMIZATION_CFLAGS = "-O0"; OTHER_CFLAGS = ""; OTHER_LDFLAGS = "-lmpcdec"; OTHER_REZFLAGS = ""; PRODUCT_NAME = Musepack; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = format; }; dependencies = ( ); isa = PBXBundleTarget; name = Musepack; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = Musepack; productReference = EA96C1E60770F84803166923; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable Musepack CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature ???? CFBundleVersion 0.0.1d1 "; shouldUseHeadermap = 0; }; EA96C1E60770F84803166923 = { isa = PBXBundleReference; path = Musepack.format; refType = 3; }; EA96C1E70770F84F03166923 = { isa = PBXTargetDependency; target = EA96C1E50770F84803166923; }; EA96C1E80770F87303166923 = { children = ( EA96C1EC0770F8C803166923, EA96C1EB0770F8BF03166923, EA96C1EA0770F89D03166923, ); isa = PBXGroup; name = WindowsMedia; refType = 4; }; EA96C1E90770F87B03166923 = { children = ( EA03BA5209D0F801036B92BF, EA03BA5309D0F80B036B92BF, ); isa = PBXGroup; name = Musepack; refType = 4; }; EA96C1EA0770F89D03166923 = { children = ( EA93165A0770FD3003000102, ); isa = PBXGroup; name = Classes; refType = 4; }; EA96C1EB0770F8BF03166923 = { children = ( EA9316560770FCEB03000102, EA9316580770FD0903000102, ); isa = PBXGroup; name = Headers; refType = 4; }; EA96C1EC0770F8C803166923 = { children = ( EA9316530770FC6503000102, ); isa = PBXGroup; name = "Other Sources"; refType = 4; }; EA9ADAFD06823B0603000102 = { children = ( EA9ADAFE06823B1703000102, EA9ADAFF06823B3303000102, ); isa = PBXGroup; name = Mod; refType = 4; }; EA9ADAFE06823B1703000102 = { children = ( EA9ADB0006823B6103000102, ); isa = PBXGroup; name = Classes; refType = 4; }; EA9ADAFF06823B3303000102 = { children = ( EA9ADB0206823B7A03000102, ); isa = PBXGroup; name = Headers; refType = 4; }; EA9ADB0006823B6103000102 = { isa = PBXFileReference; name = Mod.m; path = Bundles/Mod/Mod.m; refType = 4; }; EA9ADB0106823B6103000102 = { fileRef = EA9ADB0006823B6103000102; isa = PBXBuildFile; settings = { }; }; EA9ADB0206823B7A03000102 = { isa = PBXFileReference; name = Mod.h; path = Bundles/Mod/Mod.h; refType = 4; }; EA9ADB0306823B7A03000102 = { fileRef = EA9ADB0206823B7A03000102; isa = PBXBuildFile; settings = { }; }; EA9ADB0406823B9103000102 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EA9ADB0506823BA103000102 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EA9EE052078207F20394BCE8 = { isa = PBXFrameworkReference; name = Cynthiune.framework; path = build/Cynthiune.framework; refType = 4; }; EA9EE05C078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE05E078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE05F078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE061078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE062078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE063078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE064078207F20394BCE8 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EA9EE065078208320394BCE8 = { isa = PBXTargetDependency; target = F7BED96D0621E945010E156D; }; EAA6DF9109A663DE034E8D88 = { isa = PBXFileReference; name = "dragged-song.tiff"; path = "Images/dragged-song.tiff"; refType = 4; }; EAA6DF9209A663DE034E8D88 = { isa = PBXFileReference; name = "dragged-songs.tiff"; path = "Images/dragged-songs.tiff"; refType = 4; }; EAA6DF9309A663DE034E8D88 = { fileRef = EAA6DF9109A663DE034E8D88; isa = PBXBuildFile; settings = { }; }; EAA6DF9409A663DE034E8D88 = { fileRef = EAA6DF9209A663DE034E8D88; isa = PBXBuildFile; settings = { }; }; EAA6DF9509A66BCC034E8D88 = { children = ( EAA6DF9609A66BDC034E8D88, EAA6DF9709A66BE2034E8D88, EAEAD23D09DCEDDA03EAE64E, ); isa = PBXGroup; name = VorbisTags; refType = 4; }; EAA6DF9609A66BDC034E8D88 = { children = ( EAA6DFA209A66DA3034E8D88, ); isa = PBXGroup; name = Classes; refType = 4; }; EAA6DF9709A66BE2034E8D88 = { children = ( EAA6DFA009A66D8D034E8D88, ); isa = PBXGroup; name = Headers; refType = 4; }; EAA6DF9809A66BFD034E8D88 = { buildActionMask = 2147483647; files = ( EAA6DFA109A66D8D034E8D88, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA6DF9909A66BFD034E8D88 = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA6DF9A09A66BFD034E8D88 = { buildActionMask = 2147483647; files = ( EAA6DFA309A66DA3034E8D88, EAACCAF409C7ACDF03B7D5E1, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA6DF9B09A66BFD034E8D88 = { buildActionMask = 2147483647; files = ( EA7EC09309A66F5F0362234A, EA7EC09409A66F600362234A, EAF9B4DE09D0EEA1037E42D6, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA6DF9C09A66BFD034E8D88 = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA6DF9D09A66BFD034E8D88 = { buildPhases = ( EAA6DF9809A66BFD034E8D88, EAA6DF9909A66BFD034E8D88, EAA6DF9A09A66BFD034E8D88, EAA6DF9B09A66BFD034E8D88, EAA6DF9C09A66BFD034E8D88, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = /home/wolfgang/programmes/gnustep/Cynthiune/build; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lvorbis -lvorbisfile -logg"; OTHER_REZFLAGS = ""; PREBINDING = NO; PRODUCT_NAME = VorbisTags; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = tags; }; dependencies = ( ); isa = PBXBundleTarget; name = VorbisTags; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = VorbisTags; productReference = EAA6DF9E09A66BFD034E8D88; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable VorbisTags CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass VorbisTags "; shouldUseHeadermap = 0; }; EAA6DF9E09A66BFD034E8D88 = { isa = PBXBundleReference; path = VorbisTags.tags; refType = 3; }; EAA6DF9F09A66D69034E8D88 = { isa = PBXTargetDependency; target = EAA6DF9D09A66BFD034E8D88; }; EAA6DFA009A66D8D034E8D88 = { isa = PBXFileReference; name = VorbisTags.h; path = Bundles/VorbisTags/VorbisTags.h; refType = 4; }; EAA6DFA109A66D8D034E8D88 = { fileRef = EAA6DFA009A66D8D034E8D88; isa = PBXBuildFile; settings = { }; }; EAA6DFA209A66DA3034E8D88 = { isa = PBXFileReference; name = VorbisTags.m; path = Bundles/VorbisTags/VorbisTags.m; refType = 4; }; EAA6DFA309A66DA3034E8D88 = { fileRef = EAA6DFA209A66DA3034E8D88; isa = PBXBuildFile; settings = { }; }; EAA95C2F09D0ECA7039F499A = { children = ( EAF9B4DF09D0EEC1037E42D6, EAF9B4E009D0EEC8037E42D6, ); isa = PBXGroup; name = FLACTags; path = ""; refType = 4; }; EAA95C3009D0ECF3039F499A = { buildActionMask = 2147483647; files = ( EAF9B4E309D0EEED037E42D6, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA95C3109D0ECF3039F499A = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA95C3209D0ECF3039F499A = { buildActionMask = 2147483647; files = ( EAF9B4E409D0EEED037E42D6, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA95C3309D0ECF3039F499A = { buildActionMask = 2147483647; files = ( EAF9B4DB09D0EE96037E42D6, EAF9B4DC09D0EE97037E42D6, EAF9B4DD09D0EE98037E42D6, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA95C3409D0ECF3039F499A = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; EAA95C3509D0ECF3039F499A = { buildPhases = ( EAA95C3009D0ECF3039F499A, EAA95C3109D0ECF3039F499A, EAA95C3209D0ECF3039F499A, EAA95C3309D0ECF3039F499A, EAA95C3409D0ECF3039F499A, ); buildSettings = { DEBUGGING_SYMBOLS = NO; FRAMEWORK_SEARCH_PATHS = /home/wolfgang/programmes/gnustep/Cynthiune/build; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-I. -D__MACOSX__ -no-cpp-precomp"; OTHER_LDFLAGS = "-lFLAC"; OTHER_REZFLAGS = ""; PRODUCT_NAME = FLACTags; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = tags; }; dependencies = ( ); isa = PBXBundleTarget; name = FLACTags; productInstallPath = "$(USER_LIBRARY_DIR)/Bundles"; productName = FLACTags; productReference = EAA95C3609D0ECF3039F499A; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable FLACTags CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType BNDL CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 NSPrincipalClass FLACTags "; shouldUseHeadermap = 0; }; EAA95C3609D0ECF3039F499A = { isa = PBXBundleReference; path = FLACTags.tags; refType = 3; }; EAA95C3709D0EDBF039F499A = { isa = PBXTargetDependency; target = EAA95C3509D0ECF3039F499A; }; EAACCAF309C7ACDF03B7D5E1 = { isa = PBXFileReference; name = vcedit.c; path = Bundles/VorbisTags/vcedit.c; refType = 4; }; EAACCAF409C7ACDF03B7D5E1 = { fileRef = EAACCAF309C7ACDF03B7D5E1; isa = PBXBuildFile; settings = { }; }; EAAF6D39092BC4F303000102 = { isa = PBXFileReference; name = add.tiff; path = Images/add.tiff; refType = 4; }; EAAF6D3A092BC4F303000102 = { isa = PBXFileReference; name = cleanup.tiff; path = Images/cleanup.tiff; refType = 4; }; EAAF6D3B092BC4F303000102 = { fileRef = EAAF6D39092BC4F303000102; isa = PBXBuildFile; settings = { }; }; EAAF6D3C092BC4F303000102 = { fileRef = EAAF6D3A092BC4F303000102; isa = PBXBuildFile; settings = { }; }; EAAF6D3E092BC51E03000102 = { isa = PBXFileReference; name = remove.tiff; path = Images/remove.tiff; refType = 4; }; EAAF6D3F092BC51E03000102 = { isa = PBXFileReference; name = "save-as.tiff"; path = "Images/save-as.tiff"; refType = 4; }; EAAF6D41092BC51E03000102 = { isa = PBXFileReference; name = "slider-knob-disabled.tiff"; path = "Images/slider-knob-disabled.tiff"; refType = 4; }; EAAF6D42092BC51E03000102 = { isa = PBXFileReference; name = "slider-knob-enabled.tiff"; path = "Images/slider-knob-enabled.tiff"; refType = 4; }; EAAF6D43092BC51E03000102 = { isa = PBXFileReference; name = "song-inspector-pushed.tiff"; path = "Images/song-inspector-pushed.tiff"; refType = 4; }; EAAF6D44092BC51E03000102 = { isa = PBXFileReference; name = "song-inspector.tiff"; path = "Images/song-inspector.tiff"; refType = 4; }; EAAF6D46092BC51E03000102 = { fileRef = EAAF6D3E092BC51E03000102; isa = PBXBuildFile; settings = { }; }; EAAF6D47092BC51E03000102 = { fileRef = EAAF6D3F092BC51E03000102; isa = PBXBuildFile; settings = { }; }; EAAF6D4B092BC51E03000102 = { fileRef = EAAF6D43092BC51E03000102; isa = PBXBuildFile; settings = { }; }; EAAF6D4C092BC51E03000102 = { fileRef = EAAF6D44092BC51E03000102; isa = PBXBuildFile; settings = { }; }; EAAF6D4D092BC55703000102 = { isa = PBXFileReference; path = CynthiuneAnimatedImageView.h; refType = 4; }; EAAF6D4E092BC55703000102 = { fileRef = EAAF6D4D092BC55703000102; isa = PBXBuildFile; settings = { }; }; EAB991A1086E52690334F83B = { isa = PBXFileReference; name = German; path = German.lproj/InfoPlist.strings; refType = 4; }; EAB991A2086E52690334F83B = { isa = PBXFileReference; name = German; path = German.lproj/Localizable.strings; refType = 4; }; EAB991A3086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-1.tiff"; path = "Images/anim-logo-1.tiff"; refType = 4; }; EAB991A4086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-2.tiff"; path = "Images/anim-logo-2.tiff"; refType = 4; }; EAB991A5086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-3.tiff"; path = "Images/anim-logo-3.tiff"; refType = 4; }; EAB991A6086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-4.tiff"; path = "Images/anim-logo-4.tiff"; refType = 4; }; EAB991A7086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-5.tiff"; path = "Images/anim-logo-5.tiff"; refType = 4; }; EAB991A8086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-6.tiff"; path = "Images/anim-logo-6.tiff"; refType = 4; }; EAB991A9086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-7.tiff"; path = "Images/anim-logo-7.tiff"; refType = 4; }; EAB991AA086E52A60334F83B = { isa = PBXFileReference; name = "anim-logo-8.tiff"; path = "Images/anim-logo-8.tiff"; refType = 4; }; EAB991AB086E52A60334F83B = { fileRef = EAB991A3086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991AC086E52A60334F83B = { fileRef = EAB991A4086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991AD086E52A60334F83B = { fileRef = EAB991A5086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991AE086E52A60334F83B = { fileRef = EAB991A6086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991AF086E52A60334F83B = { fileRef = EAB991A7086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991B0086E52A60334F83B = { fileRef = EAB991A8086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991B1086E52A60334F83B = { fileRef = EAB991A9086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAB991B2086E52A60334F83B = { fileRef = EAB991AA086E52A60334F83B; isa = PBXBuildFile; settings = { }; }; EAC9033508F2EB2003D0D62A = { isa = PBXFileReference; name = Tags.h; path = Frameworks/Cynthiune/Tags.h; refType = 4; }; EAC9033608F2EB2003D0D62A = { fileRef = EAC9033508F2EB2003D0D62A; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAC9033708F2ED0603D0D62A = { isa = PBXFileReference; path = DictionaryCoder.h; refType = 4; }; EAC9033808F2ED0603D0D62A = { isa = PBXFileReference; path = DictionaryCoder.m; refType = 4; }; EAC9033908F2ED0603D0D62A = { fileRef = EAC9033708F2ED0603D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9033A08F2ED0603D0D62A = { fileRef = EAC9033808F2ED0603D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9033B08F2ED3103D0D62A = { isa = PBXFileReference; path = M3UArchiver.h; refType = 4; }; EAC9033C08F2ED3103D0D62A = { isa = PBXFileReference; path = M3UArchiver.m; refType = 4; }; EAC9033D08F2ED3103D0D62A = { fileRef = EAC9033B08F2ED3103D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9033E08F2ED3103D0D62A = { fileRef = EAC9033C08F2ED3103D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9033F08F2ED4903D0D62A = { isa = PBXFileReference; path = PlaylistArchiver.h; refType = 4; }; EAC9034008F2ED4903D0D62A = { isa = PBXFileReference; path = PlaylistArchiver.m; refType = 4; }; EAC9034108F2ED4903D0D62A = { isa = PBXFileReference; path = PLSArchiver.h; refType = 4; }; EAC9034208F2ED4903D0D62A = { isa = PBXFileReference; path = PLSArchiver.m; refType = 4; }; EAC9034308F2ED4903D0D62A = { fileRef = EAC9033F08F2ED4903D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9034408F2ED4903D0D62A = { fileRef = EAC9034008F2ED4903D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9034508F2ED4903D0D62A = { fileRef = EAC9034108F2ED4903D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9034608F2ED4903D0D62A = { fileRef = EAC9034208F2ED4903D0D62A; isa = PBXBuildFile; settings = { }; }; EAC9034708F2EF8403D0D62A = { isa = PBXTargetDependency; target = EA85A0EA062774250303B004; }; EAC9034D08F2F12103D0D62A = { fileRef = EA85A0EB062774250303B004; isa = PBXBuildFile; settings = { }; }; EAC9034E09079E5503D0D62A = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EAD5CA350675ACB103B51BF6 = { isa = PBXTargetDependency; target = EA8A20BB0675A4A203A8D3C1; }; EADC4D6409476C1203B0DF6D = { children = ( EADC4D6509476C3203B0DF6D, EADC4D6609476C3803B0DF6D, ); isa = PBXGroup; name = ID3Tag; refType = 4; }; EADC4D6509476C3203B0DF6D = { children = ( EADC4D6809476C5903B0DF6D, ); isa = PBXGroup; name = Classes; refType = 4; }; EADC4D6609476C3803B0DF6D = { children = ( EADC4D6709476C5903B0DF6D, ); isa = PBXGroup; name = Headers; refType = 4; }; EADC4D6709476C5903B0DF6D = { isa = PBXFileReference; name = ID3Tag.h; path = Bundles/ID3Tag/ID3Tag.h; refType = 4; }; EADC4D6809476C5903B0DF6D = { isa = PBXFileReference; name = ID3Tag.m; path = Bundles/ID3Tag/ID3Tag.m; refType = 4; }; EADC4D6909476C5903B0DF6D = { fileRef = EADC4D6709476C5903B0DF6D; isa = PBXBuildFile; settings = { }; }; EADC4D6A09476C5903B0DF6D = { fileRef = EADC4D6809476C5903B0DF6D; isa = PBXBuildFile; settings = { }; }; EADC4D9C09476DC503B0DF6D = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EADC4D9D09476DC503B0DF6D = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EAEAD23D09DCEDDA03EAE64E = { children = ( EAACCAF309C7ACDF03B7D5E1, ); isa = PBXGroup; name = "Other Sources"; refType = 4; }; EAF9B4DA09D0EE7F037E42D6 = { fileRef = EAA95C3609D0ECF3039F499A; isa = PBXBuildFile; settings = { }; }; EAF9B4DB09D0EE96037E42D6 = { fileRef = 29B97325FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; EAF9B4DC09D0EE97037E42D6 = { fileRef = EA9EE052078207F20394BCE8; isa = PBXBuildFile; settings = { }; }; EAF9B4DD09D0EE98037E42D6 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EAF9B4DE09D0EEA1037E42D6 = { fileRef = F7BED96E0621E945010E156D; isa = PBXBuildFile; settings = { }; }; EAF9B4DF09D0EEC1037E42D6 = { children = ( EAF9B4E209D0EEED037E42D6, ); isa = PBXGroup; name = Classes; refType = 4; }; EAF9B4E009D0EEC8037E42D6 = { children = ( EAF9B4E109D0EEED037E42D6, ); isa = PBXGroup; name = Headers; refType = 4; }; EAF9B4E109D0EEED037E42D6 = { isa = PBXFileReference; name = FLACTags.h; path = Bundles/FLACTags/FLACTags.h; refType = 4; }; EAF9B4E209D0EEED037E42D6 = { isa = PBXFileReference; name = FLACTags.m; path = Bundles/FLACTags/FLACTags.m; refType = 4; }; EAF9B4E309D0EEED037E42D6 = { fileRef = EAF9B4E109D0EEED037E42D6; isa = PBXBuildFile; settings = { }; }; EAF9B4E409D0EEED037E42D6 = { fileRef = EAF9B4E209D0EEED037E42D6; isa = PBXBuildFile; settings = { }; }; EAFFEE4B086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneAnimatedImageView.m; refType = 4; }; EAFFEE4C086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneFadingTextField.h; refType = 4; }; EAFFEE4D086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneFadingTextField.m; refType = 4; }; EAFFEE4F086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiunePauseButton.h; refType = 4; }; EAFFEE50086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiunePauseButton.m; refType = 4; }; EAFFEE55086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneSongTitleCell.h; refType = 4; }; EAFFEE56086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneSongTitleCell.m; refType = 4; }; EAFFEE57086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneTextCell.h; refType = 4; }; EAFFEE58086E54DA039AFE6D = { isa = PBXFileReference; path = CynthiuneTextCell.m; refType = 4; }; EAFFEE59086E54DA039AFE6D = { fileRef = EAFFEE4B086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE5A086E54DA039AFE6D = { fileRef = EAFFEE4C086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE5B086E54DA039AFE6D = { fileRef = EAFFEE4D086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE5D086E54DA039AFE6D = { fileRef = EAFFEE4F086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE5E086E54DA039AFE6D = { fileRef = EAFFEE50086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE63086E54DA039AFE6D = { fileRef = EAFFEE55086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE64086E54DA039AFE6D = { fileRef = EAFFEE56086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE65086E54DA039AFE6D = { fileRef = EAFFEE57086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE66086E54DA039AFE6D = { fileRef = EAFFEE58086E54DA039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE67086E553A039AFE6D = { fileRef = EA8BBBF90682D60703C2B047; isa = PBXBuildFile; settings = { }; }; EAFFEE68086E5540039AFE6D = { fileRef = EA8A19170688EE2B03C0F62E; isa = PBXBuildFile; settings = { }; }; EAFFEE69086E5596039AFE6D = { children = ( EAFFEE6A086E55AB039AFE6D, EAFFEE6B086E55B3039AFE6D, ); isa = PBXGroup; name = Cynthiune; refType = 4; }; EAFFEE6A086E55AB039AFE6D = { children = ( EA73D4C1074C823503F60D55, EAFFEE6D086E5601039AFE6D, EAFFEE6F086E5601039AFE6D, EAFFEE71086E5601039AFE6D, EA8795E406F66AA403809032, EA547B69078A36000358AD96, EAFFEE73086E5601039AFE6D, EAFFEE75086E5601039AFE6D, F7858C02061FC27301C0FE28, ); isa = PBXGroup; name = Classes; refType = 4; }; EAFFEE6B086E55B3039AFE6D = { children = ( EA7EE734063AE6B6039F4895, F7858BEA061FC27301C0FE28, EA73D4C0074C823503F60D55, EAFFEE6C086E5601039AFE6D, EAFFEE6E086E5601039AFE6D, EAFFEE70086E5601039AFE6D, EA8795E306F66AA403809032, EA547B68078A36000358AD96, EAFFEE72086E5601039AFE6D, EAFFEE74086E5601039AFE6D, EA8795E506F66AA403809032, F7858BFB061FC27301C0FE28, EAC9033508F2EB2003D0D62A, F7858C1C061FC2A801C0FE28, ); isa = PBXGroup; name = Headers; path = ""; refType = 4; }; EAFFEE6C086E5601039AFE6D = { isa = PBXFileReference; name = NSArrayExtensions.h; path = Frameworks/Cynthiune/NSArrayExtensions.h; refType = 4; }; EAFFEE6D086E5601039AFE6D = { isa = PBXFileReference; name = NSArrayExtensions.m; path = Frameworks/Cynthiune/NSArrayExtensions.m; refType = 4; }; EAFFEE6E086E5601039AFE6D = { isa = PBXFileReference; name = NSCellExtensions.h; path = Frameworks/Cynthiune/NSCellExtensions.h; refType = 4; }; EAFFEE6F086E5601039AFE6D = { isa = PBXFileReference; name = NSCellExtensions.m; path = Frameworks/Cynthiune/NSCellExtensions.m; refType = 4; }; EAFFEE70086E5601039AFE6D = { isa = PBXFileReference; name = NSColorExtensions.h; path = Frameworks/Cynthiune/NSColorExtensions.h; refType = 4; }; EAFFEE71086E5601039AFE6D = { isa = PBXFileReference; name = NSColorExtensions.m; path = Frameworks/Cynthiune/NSColorExtensions.m; refType = 4; }; EAFFEE72086E5601039AFE6D = { isa = PBXFileReference; name = NSTimerExtensions.h; path = Frameworks/Cynthiune/NSTimerExtensions.h; refType = 4; }; EAFFEE73086E5601039AFE6D = { isa = PBXFileReference; name = NSTimerExtensions.m; path = Frameworks/Cynthiune/NSTimerExtensions.m; refType = 4; }; EAFFEE74086E5601039AFE6D = { isa = PBXFileReference; name = NSViewExtensions.h; path = Frameworks/Cynthiune/NSViewExtensions.h; refType = 4; }; EAFFEE75086E5601039AFE6D = { isa = PBXFileReference; name = NSViewExtensions.m; path = Frameworks/Cynthiune/NSViewExtensions.m; refType = 4; }; EAFFEE76086E5601039AFE6D = { fileRef = EAFFEE6C086E5601039AFE6D; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAFFEE77086E5601039AFE6D = { fileRef = EAFFEE6D086E5601039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE78086E5601039AFE6D = { fileRef = EAFFEE6E086E5601039AFE6D; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAFFEE79086E5601039AFE6D = { fileRef = EAFFEE6F086E5601039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE7A086E5601039AFE6D = { fileRef = EAFFEE70086E5601039AFE6D; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAFFEE7B086E5601039AFE6D = { fileRef = EAFFEE71086E5601039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE7C086E5601039AFE6D = { fileRef = EAFFEE72086E5601039AFE6D; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAFFEE7D086E5601039AFE6D = { fileRef = EAFFEE73086E5601039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE7E086E5601039AFE6D = { fileRef = EAFFEE74086E5601039AFE6D; isa = PBXBuildFile; settings = { ATTRIBUTES = ( Public, ); }; }; EAFFEE7F086E5601039AFE6D = { fileRef = EAFFEE75086E5601039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE80086E5696039AFE6D = { fileRef = EA73D4C1074C823503F60D55; isa = PBXBuildFile; settings = { }; }; EAFFEE81086E61A7039AFE6D = { isa = PBXFileReference; path = BundleManager.h; refType = 4; }; EAFFEE82086E61A7039AFE6D = { isa = PBXFileReference; path = BundleManager.m; refType = 4; }; EAFFEE83086E61A7039AFE6D = { fileRef = EAFFEE81086E61A7039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE84086E61A7039AFE6D = { fileRef = EAFFEE82086E61A7039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE85086E61D7039AFE6D = { isa = PBXFileReference; path = MBResultsPanel.h; refType = 4; }; EAFFEE86086E61D7039AFE6D = { isa = PBXFileReference; path = MBResultsPanel.m; refType = 4; }; EAFFEE87086E61D7039AFE6D = { fileRef = EAFFEE85086E61D7039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE88086E61D7039AFE6D = { fileRef = EAFFEE86086E61D7039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE89086E688A039AFE6D = { isa = PBXFileReference; name = "lookup-mb-off.tiff"; path = "Images/lookup-mb-off.tiff"; refType = 4; }; EAFFEE8A086E688A039AFE6D = { isa = PBXFileReference; name = "lookup-mb-on.tiff"; path = "Images/lookup-mb-on.tiff"; refType = 4; }; EAFFEE8D086E688A039AFE6D = { isa = PBXFileReference; name = "song-pointer.tiff"; path = "Images/song-pointer.tiff"; refType = 4; }; EAFFEE8E086E688A039AFE6D = { fileRef = EAFFEE89086E688A039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE8F086E688A039AFE6D = { fileRef = EAFFEE8A086E688A039AFE6D; isa = PBXBuildFile; settings = { }; }; EAFFEE92086E688A039AFE6D = { fileRef = EAFFEE8D086E688A039AFE6D; isa = PBXBuildFile; settings = { }; }; //EA0 //EA1 //EA2 //EA3 //EA4 //F50 //F51 //F52 //F53 //F54 F502404803B83C9E01000004 = { isa = PBXFrameworkReference; name = CoreAudio.framework; path = /System/Library/Frameworks/CoreAudio.framework; refType = 0; }; F502405C03B83D6601000004 = { isa = PBXFrameworkReference; name = AudioToolbox.framework; path = /System/Library/Frameworks/AudioToolbox.framework; refType = 0; }; F502406503B83D9A01000004 = { isa = PBXFrameworkReference; name = AudioUnit.framework; path = /System/Library/Frameworks/AudioUnit.framework; refType = 0; }; F51A012B03BA9CCB01000004 = { children = ( F51A012C03BA9CE401000004, F51A012D03BA9CE401000004, F59C8F7903C01A7601C14AF2, EA7EE7E1063B04D0039F4895, EA7EE7E2063B04D0039F4895, ); isa = PBXGroup; name = Documentation; refType = 4; }; F51A012C03BA9CE401000004 = { isa = PBXFileReference; path = ChangeLog; refType = 4; }; F51A012D03BA9CE401000004 = { isa = PBXFileReference; path = COPYING; refType = 4; }; F51A012E03BA9CE401000004 = { fileRef = F51A012C03BA9CE401000004; isa = PBXBuildFile; settings = { }; }; F51A012F03BA9CE401000004 = { fileRef = F51A012D03BA9CE401000004; isa = PBXBuildFile; settings = { }; }; F531F10803BB93F301000004 = { isa = PBXFrameworkReference; name = CoreServices.framework; path = /System/Library/Frameworks/CoreServices.framework; refType = 0; }; F531F18903BB941C01000004 = { fileRef = 29B97324FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; F559092103B834CA01000004 = { isa = PBXFileReference; path = Cynthiune.nib; refType = 4; }; F559092303B834D301000004 = { children = ( EAFFEE81086E61A7039AFE6D, EAAF6D4D092BC55703000102, EA8795DF06F66AA403809032, EAFFEE4C086E54DA039AFE6D, EA778ACC09B5778A032657EF, EAFFEE4F086E54DA039AFE6D, EA8BBBF90682D60703C2B047, EAFFEE55086E54DA039AFE6D, EAFFEE57086E54DA039AFE6D, EA8A19170688EE2B03C0F62E, EAC9033708F2ED0603D0D62A, F7858BEB061FC27301C0FE28, F7858BED061FC27301C0FE28, F7858BEF061FC27301C0FE28, EAC9033B08F2ED3103D0D62A, EAFFEE85086E61D7039AFE6D, F7858BF3061FC27301C0FE28, EA73D4B4074C81F203F60D55, EA73D4B6074C81F203F60D55, F7858BF5061FC27301C0FE28, EAC9033F08F2ED4903D0D62A, F7858BF7061FC27301C0FE28, EA7EE76B063AE6B6039F4895, EAC9034108F2ED4903D0D62A, F7858BFC061FC27301C0FE28, F7858BFE061FC27301C0FE28, EA95850F078BA57703566F1F, F7858C00061FC27301C0FE28, ); isa = PBXGroup; name = Headers; refType = 4; }; F59C8F6803C0152501C14AF2 = { children = ( F59C8F6B03C0155B01C14AF2, EA5AA10D09A5220203396ECD, EA5AA10B09A51CA303396ECD, F7858C22061FC31401C0FE28, F7858C1F061FC31401C0FE28, F7858C21061FC31401C0FE28, EAA6DF9109A663DE034E8D88, EAA6DF9209A663DE034E8D88, F7858C23061FC31401C0FE28, F7858C24061FC31401C0FE28, F59C8F6C03C0155B01C14AF2, F7858C28061FC31401C0FE28, F59C8F6D03C0155B01C14AF2, F7858C2A061FC31401C0FE28, F59C8F6E03C0155B01C14AF2, F7858C2B061FC31401C0FE28, EA8A20D00675A80A03A8D3C1, EA8A20CF0675A80A03A8D3C1, F59C8F6F03C0155B01C14AF2, F7858C2E061FC31401C0FE28, EA8A20D20675A80A03A8D3C1, EA8A20D10675A80A03A8D3C1, EA8A20D40675A80A03A8D3C1, EA8A20D30675A80A03A8D3C1, F59C8F7003C0155B01C14AF2, F7858C33061FC31401C0FE28, EAB991A3086E52A60334F83B, EAB991A4086E52A60334F83B, EAB991A5086E52A60334F83B, EAB991A6086E52A60334F83B, EAB991A7086E52A60334F83B, EAB991A8086E52A60334F83B, EAB991A9086E52A60334F83B, EAB991AA086E52A60334F83B, EA4FAC5009A456860310F3BF, EAFFEE89086E688A039AFE6D, EAFFEE8A086E688A039AFE6D, EAFFEE8D086E688A039AFE6D, EAAF6D39092BC4F303000102, EAAF6D3A092BC4F303000102, EAAF6D3E092BC51E03000102, EAAF6D3F092BC51E03000102, EAAF6D41092BC51E03000102, EAAF6D42092BC51E03000102, EAAF6D43092BC51E03000102, EAAF6D44092BC51E03000102, ); isa = PBXGroup; name = Images; refType = 4; }; F59C8F6B03C0155B01C14AF2 = { isa = PBXFileReference; name = Cynthiune.icns; path = Images/Cynthiune.icns; refType = 4; }; F59C8F6C03C0155B01C14AF2 = { isa = PBXFileReference; name = next.tiff; path = Images/next.tiff; refType = 4; }; F59C8F6D03C0155B01C14AF2 = { isa = PBXFileReference; name = pause.tiff; path = Images/pause.tiff; refType = 4; }; F59C8F6E03C0155B01C14AF2 = { isa = PBXFileReference; name = play.tiff; path = Images/play.tiff; refType = 4; }; F59C8F6F03C0155B01C14AF2 = { isa = PBXFileReference; name = previous.tiff; path = Images/previous.tiff; refType = 4; }; F59C8F7003C0155B01C14AF2 = { isa = PBXFileReference; name = stop.tiff; path = Images/stop.tiff; refType = 4; }; F59C8F7903C01A7601C14AF2 = { isa = PBXFileReference; path = NEWS; refType = 4; }; F59C8F7A03C01A7601C14AF2 = { fileRef = F59C8F7903C01A7601C14AF2; isa = PBXBuildFile; settings = { }; }; //F50 //F51 //F52 //F53 //F54 //F70 //F71 //F72 //F73 //F74 F7858BEA061FC27301C0FE28 = { isa = PBXFileReference; name = Format.h; path = Frameworks/Cynthiune/Format.h; refType = 4; }; F7858BEB061FC27301C0FE28 = { isa = PBXFileReference; path = FormatTester.h; refType = 4; }; F7858BEC061FC27301C0FE28 = { isa = PBXFileReference; path = FormatTester.m; refType = 4; }; F7858BED061FC27301C0FE28 = { isa = PBXFileReference; path = GeneralPreference.h; refType = 4; }; F7858BEE061FC27301C0FE28 = { isa = PBXFileReference; path = GeneralPreference.m; refType = 4; }; F7858BEF061FC27301C0FE28 = { isa = PBXFileReference; path = InfoDisplayController.h; refType = 4; }; F7858BF0061FC27301C0FE28 = { isa = PBXFileReference; path = InfoDisplayController.m; refType = 4; }; F7858BF3061FC27301C0FE28 = { isa = PBXFileReference; path = Player.h; refType = 4; }; F7858BF4061FC27301C0FE28 = { isa = PBXFileReference; path = Player.m; refType = 4; }; F7858BF5061FC27301C0FE28 = { isa = PBXFileReference; path = Playlist.h; refType = 4; }; F7858BF6061FC27301C0FE28 = { isa = PBXFileReference; path = Playlist.m; refType = 4; }; F7858BF7061FC27301C0FE28 = { isa = PBXFileReference; path = PlaylistController.h; refType = 4; }; F7858BF8061FC27301C0FE28 = { isa = PBXFileReference; path = PlaylistController.m; refType = 4; }; F7858BFB061FC27301C0FE28 = { isa = PBXFileReference; name = Preference.h; path = Frameworks/Cynthiune/Preference.h; refType = 4; }; F7858BFC061FC27301C0FE28 = { isa = PBXFileReference; path = PreferencesController.h; refType = 4; }; F7858BFD061FC27301C0FE28 = { isa = PBXFileReference; path = PreferencesController.m; refType = 4; }; F7858BFE061FC27301C0FE28 = { isa = PBXFileReference; path = Song.h; refType = 4; }; F7858BFF061FC27301C0FE28 = { isa = PBXFileReference; path = Song.m; refType = 4; }; F7858C00061FC27301C0FE28 = { isa = PBXFileReference; path = PlaylistViewController.h; refType = 4; }; F7858C01061FC27301C0FE28 = { isa = PBXFileReference; path = PlaylistViewController.m; refType = 4; }; F7858C02061FC27301C0FE28 = { isa = PBXFileReference; name = utils.m; path = Frameworks/Cynthiune/utils.m; refType = 4; }; F7858C1C061FC2A801C0FE28 = { isa = PBXFileReference; name = utils.h; path = Frameworks/Cynthiune/utils.h; refType = 4; }; F7858C1F061FC31401C0FE28 = { isa = PBXFileReference; name = "cynthiune-splash-faded.tiff"; path = "Images/cynthiune-splash-faded.tiff"; refType = 4; }; F7858C21061FC31401C0FE28 = { isa = PBXFileReference; name = "cynthiune-splash.tiff"; path = "Images/cynthiune-splash.tiff"; refType = 4; }; F7858C22061FC31401C0FE28 = { isa = PBXFileReference; name = Cynthiune.tiff; path = Images/Cynthiune.tiff; refType = 4; }; F7858C23061FC31401C0FE28 = { isa = PBXFileReference; name = "eject-pushed.tiff"; path = "Images/eject-pushed.tiff"; refType = 4; }; F7858C24061FC31401C0FE28 = { isa = PBXFileReference; name = eject.tiff; path = Images/eject.tiff; refType = 4; }; F7858C28061FC31401C0FE28 = { isa = PBXFileReference; name = "next-pushed.tiff"; path = "Images/next-pushed.tiff"; refType = 4; }; F7858C2A061FC31401C0FE28 = { isa = PBXFileReference; name = "pause-pushed.tiff"; path = "Images/pause-pushed.tiff"; refType = 4; }; F7858C2B061FC31401C0FE28 = { isa = PBXFileReference; name = "play-pushed.tiff"; path = "Images/play-pushed.tiff"; refType = 4; }; F7858C2E061FC31401C0FE28 = { isa = PBXFileReference; name = "previous-pushed.tiff"; path = "Images/previous-pushed.tiff"; refType = 4; }; F7858C33061FC31401C0FE28 = { isa = PBXFileReference; name = "stop-pushed.tiff"; path = "Images/stop-pushed.tiff"; refType = 4; }; F7BED9680621E945010E156D = { buildActionMask = 2147483647; files = ( EA8B67C806F819F303464193, EA8B67C906F819F403464193, EA8B67CA06F819F403464193, EAC9033608F2EB2003D0D62A, EA8B67CC06F81A0303464193, EA8B67E206F81B3C03464193, EA547B6A078A36000358AD96, EA547B6C078A4B710358AD96, EAFFEE76086E5601039AFE6D, EAFFEE78086E5601039AFE6D, EAFFEE7A086E5601039AFE6D, EAFFEE7C086E5601039AFE6D, EAFFEE7E086E5601039AFE6D, EA8B67E106F81B3A03464193, ); isa = PBXHeadersBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F7BED9690621E945010E156D = { buildActionMask = 2147483647; files = ( ); isa = PBXResourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F7BED96A0621E945010E156D = { buildActionMask = 2147483647; files = ( F7BED98C0621EA4A010E156D, EA8B67E706F81B6C03464193, EA547B6B078A36000358AD96, EAFFEE77086E5601039AFE6D, EAFFEE79086E5601039AFE6D, EAFFEE7B086E5601039AFE6D, EAFFEE7D086E5601039AFE6D, EAFFEE7F086E5601039AFE6D, EAFFEE80086E5696039AFE6D, ); isa = PBXSourcesBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F7BED96B0621E945010E156D = { buildActionMask = 2147483647; files = ( F7BED9AE0621EA7C010E156D, ); isa = PBXFrameworksBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F7BED96C0621E945010E156D = { buildActionMask = 2147483647; files = ( ); isa = PBXRezBuildPhase; runOnlyForDeploymentPostprocessing = 0; }; F7BED96D0621E945010E156D = { buildPhases = ( F7BED9680621E945010E156D, F7BED9690621E945010E156D, F7BED96A0621E945010E156D, F7BED96B0621E945010E156D, F7BED96C0621E945010E156D, ); buildSettings = { DEBUGGING_SYMBOLS = NO; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; FRAMEWORK_VERSION = A; INSTALL_PATH = "@executable_path/../Frameworks"; OPTIMIZATION_CFLAGS = "-O2"; OTHER_CFLAGS = "-D__MACOSX__"; OTHER_LIBTOOL_FLAGS = ""; OTHER_REZFLAGS = ""; PRINCIPAL_CLASS = ""; PRODUCT_NAME = Cynthiune; SECTORDER_FLAGS = ""; WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas"; WRAPPER_EXTENSION = framework; }; dependencies = ( ); isa = PBXFrameworkTarget; name = "Cynthiune framework"; productInstallPath = ""; productName = "Cynthiune framework"; productReference = F7BED96E0621E945010E156D; productSettingsXML = " CFBundleDevelopmentRegion English CFBundleExecutable Cynthiune CFBundleGetInfoString CFBundleIconFile CFBundleIdentifier CFBundleInfoDictionaryVersion 6.0 CFBundleName CFBundlePackageType FMWK CFBundleShortVersionString CFBundleSignature WOSO CFBundleVersion 0.0.1d1 "; shouldUseHeadermap = 0; }; F7BED96E0621E945010E156D = { isa = PBXFrameworkReference; path = Cynthiune.framework; refType = 3; }; F7BED96F0621E9B5010E156D = { isa = PBXFileReference; path = Preferences.nib; refType = 4; }; F7BED9710621E9CF010E156D = { isa = PBXFileReference; path = GeneralPreference.nib; refType = 4; }; F7BED98C0621EA4A010E156D = { fileRef = F7858C02061FC27301C0FE28; isa = PBXBuildFile; settings = { }; }; F7BED9AE0621EA7C010E156D = { fileRef = 29B97324FDCFA39411CA2CEA; isa = PBXBuildFile; settings = { }; }; }; rootObject = 29B97313FDCFA39411CA2CEA; } cynthiune.app-0.9.5/Cynthiune.pbproj/wolfgang.pbxuser0000644000175000017500000004041310413164704022333 0ustar gurkangurkan// !$*UTF8*$! { 29B97313FDCFA39411CA2CEA = { activeBuildStyle = 4A9504CDFFE6A4B311CA0CBA; activeExecutable = EAB991A0086E51EC0334F83B; activeTarget = 29B97326FDCFA39411CA2CEA; addToTargets = ( EA96C1E50770F84803166923, ); executables = ( EAB991A0086E51EC0334F83B, ); perUserDictionary = { PBXPerProjectTemplateStateSaveDate = 165481488; "PBXTemplateGeometry-F5314676015831810DCA290F" = { ContentSize = "{655, 606}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 23}, {655, 583}}"; Split0 = { ActiveTab = 2; Collapsed = NO; Frame = "{{0, 0}, {655, 583}}"; Split0 = { Frame = "{{0, 221}, {655, 362}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {952, 321}}"; Split0 = { Frame = "{{0, 24}, {952, 297}}"; Split0 = { Frame = "{{0, 0}, {468, 297}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 126.803, Value, 150.074, Summary, 172.123, ); Frame = "{{477, 0}, {475, 297}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {952, 321}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {781, 452}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {781, 452}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {657, 149}}"; BuildTranscriptFrame = "{{0, 158}, {657, 59}}"; Frame = "{{0, 0}, {655, 215}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {300, 533}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 267, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 100}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = YES; Template = F5314676015831810DCA290F; ToolbarVisible = YES; WindowLocation = "{194, 40}"; }; "PBXTemplateGeometry-F5534CB2020F3F8A0DCA290F" = { ContentSize = "{594, 303}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 23}, {594, 280}}"; Split0 = { ActiveTab = 1; Collapsed = YES; Frame = "{{0, 0}, {594, 280}}"; Split0 = { Frame = "{{1e+06, 1e+06}, {594, 0}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {804, 321}}"; Split0 = { Frame = "{{0, 24}, {804, 297}}"; Split0 = { Frame = "{{0, 0}, {394, 297}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 167.123, ); Frame = "{{403, 0}, {401, 297}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {804, 321}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {594, 274}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {594, 274}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {806, 237}}"; BuildTranscriptFrame = "{{0, 246}, {806, 3}}"; Frame = "{{0, 0}, {804, 247}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {300, 533}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 267, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 386}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 386}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = YES; Template = F5534CB2020F3F8A0DCA290F; ToolbarVisible = YES; WindowLocation = "{236, 57}"; }; "PBXTemplateGeometry-F5CA7EC8015C06940DCA290F" = { ContentSize = "{705, 569}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 0}, {705, 569}}"; Split0 = { Collapsed = NO; Frame = "{{0, 0}, {705, 569}}"; Split0 = { Frame = "{{0, 0}, {705, 569}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {484, 208}}"; Split0 = { Frame = "{{0, 24}, {484, 184}}"; Split0 = { Frame = "{{0, 0}, {236, 184}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{245, 0}, {239, 184}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {484, 208}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {522, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {522, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {809, 410}}"; BuildTranscriptFrame = "{{0, 419}, {809, 119}}"; Frame = "{{0, 0}, {807, 536}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {300, 533}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 267, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {222, 536}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 528}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = NO; Template = F5CA7EC8015C06940DCA290F; ToolbarVisible = YES; WindowLocation = "{11, 115}"; }; "PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = { ContentSize = "{665, 594}"; LeftSlideOut = { Collapsed = NO; Frame = "{{0, 0}, {665, 594}}"; Split0 = { ActiveTab = 3; Collapsed = NO; Frame = "{{0, 0}, {665, 594}}"; Split0 = { Frame = "{{0, 304}, {665, 290}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {484, 208}}"; Split0 = { Frame = "{{0, 24}, {484, 184}}"; Split0 = { Frame = "{{0, 0}, {236, 184}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{245, 0}, {239, 184}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {484, 208}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {666, 43}}"; BuildTranscriptFrame = "{{0, 52}, {666, 0}}"; Frame = "{{0, 0}, {664, 50}}"; }; Tab3 = { Frame = "{{0, 0}, {665, 298}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {313, 531}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 280, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {280, 398}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 237, ); Frame = "{{0, 0}, {278, 659}}"; MembersFrame = "{{0, 407}, {280, 252}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 236, ); }; Tab2 = { Frame = "{{0, 0}, {200, 100}}"; }; Tab3 = { Frame = "{{0, 0}, {200, 557}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 202.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 197, enabledColumn, 31, ); Frame = "{{0, 0}, {250, 100}}"; }; TabCount = 5; TabsVisible = NO; }; StatusViewVisible = NO; Template = F5CA7EC9015C08ED0DCA290F; ToolbarVisible = NO; WindowLocation = "{69, 130}"; }; PBXWorkspaceContents = ( { LeftSlideOut = { Split0 = { Split0 = { NavCount = 1; NavGeometry0 = { Frame = "{{0, 0}, {150, 530}}"; NavBarVisible = YES; }; }; SplitCount = 1; Tab0 = { Debugger = { Split0 = { SplitCount = 2; }; SplitCount = 1; TabCount = 2; }; LauncherConfigVersion = 7; }; Tab1 = { LauncherConfigVersion = 3; Runner = { }; }; TabCount = 4; }; SplitCount = 1; Tab1 = { OptionsSetName = "Hierarchy, all classes"; }; TabCount = 5; }; }, ); PBXWorkspaceGeometries = ( { ContentSize = "{352, 553}"; LeftSlideOut = { ActiveTab = 0; Collapsed = YES; Frame = "{{0, 23}, {352, 530}}"; Split0 = { Collapsed = NO; Frame = "{{1e+06, 1e+06}, {0, 530}}"; Split0 = { Frame = "{{0, 0}, {0, 530}}"; }; SplitCount = 1; Tab0 = { Debugger = { Collapsed = NO; Frame = "{{0, 0}, {484, 208}}"; Split0 = { Frame = "{{0, 24}, {484, 184}}"; Split0 = { Frame = "{{0, 0}, {236, 184}}"; }; Split1 = { DebugVariablesTableConfiguration = ( Name, 123, Value, 85, Summary, 62.123, ); Frame = "{{245, 0}, {239, 184}}"; }; SplitCount = 2; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {100, 50}}"; }; Tab1 = { Frame = "{{0, 0}, {100, 50}}"; }; TabCount = 2; TabsVisible = YES; }; Frame = "{{0, 0}, {484, 208}}"; LauncherConfigVersion = 7; }; Tab1 = { Frame = "{{0, 0}, {664, 208}}"; LauncherConfigVersion = 3; Runner = { Frame = "{{0, 0}, {664, 208}}"; }; }; Tab2 = { BuildMessageFrame = "{{0, 0}, {666, 43}}"; BuildTranscriptFrame = "{{0, 52}, {666, 0}}"; Frame = "{{0, 0}, {664, 50}}"; }; Tab3 = { Frame = "{{0, 0}, {612, 295}}"; }; TabCount = 4; TabsVisible = NO; }; SplitCount = 1; Tab0 = { Frame = "{{0, 0}, {328, 530}}"; GroupTreeTableConfiguration = ( TargetStatusColumn, 18, MainColumn, 295, ); }; Tab1 = { ClassesFrame = "{{0, 0}, {330, 318}}"; ClassesTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXClassColumnIdentifier, 287, ); Frame = "{{0, 0}, {328, 530}}"; MembersFrame = "{{0, 327}, {330, 203}}"; MembersTreeTableConfiguration = ( PBXBookColumnIdentifier, 20, PBXMethodColumnIdentifier, 286, ); }; Tab2 = { Frame = "{{0, 0}, {319, 576}}"; }; Tab3 = { Frame = "{{0, 0}, {328, 530}}"; TargetTableConfiguration = ( ActiveObject, 16, ObjectNames, 295.296, ); }; Tab4 = { BreakpointsTreeTableConfiguration = ( breakpointColumn, 266, enabledColumn, 31, ); Frame = "{{0, 0}, {319, 576}}"; }; TabCount = 5; TabsVisible = YES; }; StatusViewVisible = YES; Template = F5E465990156DFB90DCA290F; ToolbarVisible = YES; WindowLocation = "{18, 123}"; }, ); PBXWorkspaceStateSaveDate = 165481488; }; projectwideBuildSettings = { }; wantsIndex = 1; wantsSCM = -1; }; 29B97326FDCFA39411CA2CEA = { activeExec = 0; executables = ( EAB991A0086E51EC0334F83B, ); }; EA1D794B06263DD503CFD9F6 = { activeExec = 0; }; EA8009690629F20C036EED6D = { activeExec = 0; }; EA85A0EA062774250303B004 = { activeExec = 0; }; EA88F6F8068234B203ABED23 = { activeExec = 0; }; EA8A20BB0675A4A203A8D3C1 = { activeExec = 0; }; EA8D0BFE06268DD403000102 = { activeExec = 0; }; EA8E357009476B19032DC65E = { activeExec = 0; }; EA8F759D06F89A7D03F15592 = { activeExec = 0; }; EA949F6D062720760348A0D9 = { activeExec = 0; }; EA96C1DD0770F81F03166923 = { activeExec = 0; }; EA96C1E50770F84803166923 = { activeExec = 0; }; EAA6DF9D09A66BFD034E8D88 = { activeExec = 0; }; EAA95C3509D0ECF3039F499A = { activeExec = 0; }; EAB991A0086E51EC0334F83B = { activeArgIndex = 2147483647; argumentStrings = ( ); debuggerPlugin = GDBDebugging; dylibVariantSuffix = ""; enableDebugStr = 0; environmentEntries = ( ); isa = PBXExecutable; name = Cynthiune; shlibInfoDictList = ( ); sourceDirectories = ( ); startupPath = "<>"; }; F7BED96D0621E945010E156D = { activeExec = 0; }; } cynthiune.app-0.9.5/DictionaryCoder.h0000644000175000017500000000304010320532762017102 0ustar gurkangurkan/* DictionaryCoder.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef DICTIONARYCODER_H #define DICTIONARYCODER_H #import @class NSMutableDictionary; @class NSString; @interface DictionaryCoder : NSCoder { NSMutableDictionary *dictionary; } - (void) encodeObject: (id) anObject forKey: (NSString *) aKey; - (void) encodeBool: (BOOL) aBool forKey: (NSString *) aKey; - (void) encodeInt: (int) anInteger forKey: (NSString *) aKey; - (void) encodeInt64: (int64_t) anInteger forKey: (NSString *) aKey; - (id) decodeObjectForKey: (NSString *) aKey; - (BOOL) decodeBoolForKey: (NSString *) aKey; - (int) decodeIntForKey: (NSString *) aKey; - (int64_t) decodeInt64ForKey: (NSString *) aKey; @end #endif /* DICTIONARYCODER_H */ cynthiune.app-0.9.5/Playlist.h0000644000175000017500000000450210317160211015615 0ustar gurkangurkan/* Playlist.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Playlist_H #define Playlist_H @class NSNumber; @class NSMutableArray; @class Song; @interface Playlist : NSObject { id delegate; NSMutableArray *list; NSMutableArray *shuffleList; } - (id) init; - (void) setDelegate: (id) object; - (id) delegate; - (void) addSong: (Song *) song; - (void) addSongsInArray: (NSArray *) array; - (void) insertSong: (Song *) song atIndex: (unsigned int) index; - (void) deleteSong: (Song *) song; - (void) deleteAllSongs; - (void) deleteAllSongsQuietly; - (void) deleteSongsInArray: (NSArray *) array; - (NSArray *) arrayOfInvalidSongs; - (void) replaceSongsWithArray: (NSArray *) array; - (Song *) songAtIndex: (unsigned int) index; - (unsigned int) indexOfSong: (Song *) song; - (unsigned int) moveSongsAtIndexes: (NSArray *) indexes toIndex: (unsigned int) index; - (Song *) firstSong; - (Song *) lastSong; - (Song *) firstValidSong; - (Song *) lastValidSong; - (Song *) songAfter: (Song *) song; - (Song *) songBefore: (Song *) song; - (Song *) validSongAfter: (Song *) song; - (Song *) validSongBefore: (Song *) song; - (unsigned int) numberOfSongs; - (NSNumber *) duration; - (void) loadFromFile: (NSString *) file; - (void) saveToFile: (NSString *) file; - (void) sortByPlaylistRepresentation: (BOOL) reverseOrder; - (void) sortByDuration: (BOOL) reverseOrder; - (void) setShuffle: (BOOL) shuffle; - (BOOL) shuffle; - (void) shuffleFromSong: (Song *) shuffle; @end #endif /* Playlist_H */ cynthiune.app-0.9.5/PlaylistController.m0000644000175000017500000010345310413141773017704 0ustar gurkangurkan/* PlaylistController.m - this file is part of Cynthiune * * Copyright (C) 2002-2006 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #ifdef GOOM #import #import "GoomView.h" #endif /* GOOM */ #import "CynthiuneSliderCell.h" #import "FormatTester.h" #import "GeneralPreference.h" #import "InfoDisplayController.h" #import "Player.h" #import "Playlist.h" #import "PlaylistController.h" #import "PlaylistView.h" #import "Song.h" #import "SongInspectorController.h" #import "PlaylistViewController.h" #define LOCALIZED(X) NSLocalizedString (X, nil) static NSString *DefaultPlaylistName = @"Playlist.cPls"; static NSString *defaultPlaylistFile = nil; static NSString *AddItemIdentifier = @"addButton"; static NSString *RemoveItemIdentifier = @"removeButton"; // static NSString *RemoveAllItemIdentifier = @"removeAllButton"; static NSString *CleanupItemIdentifier = @"cleanupButton"; // static NSString *SaveItemIdentifier = @"saveButton"; static NSString *SaveAsItemIdentifier = @"saveAsButton"; // static NSString *RepeatItemIdentifier = @"repeatButton"; // static NSString *ShuffleItemIdentifier = @"shuffleButton"; static NSString *SongInspectorItemIdentifier = @"songInspectorButton"; @implementation PlaylistController : NSObject + (void) initialize { NSArray *dirs; if (!defaultPlaylistFile) { dirs = NSSearchPathForDirectoriesInDomains (NSLibraryDirectory, NSUserDomainMask, YES); defaultPlaylistFile = [[[dirs objectAtIndex: 0] stringByAppendingPathComponent: @"Cynthiune"] stringByAppendingPathComponent: DefaultPlaylistName]; [defaultPlaylistFile retain]; } } - (id) init { if ((self = [super init])) { playlist = [Playlist new]; [playlist setDelegate: self]; player = [Player new]; [player setDelegate: self]; playlistFilename = nil; timer = nil; repeat = NO; currentPlayerSong = nil; notifiedFirstSong = nil; songInspectorController = [SongInspectorController songInspectorController]; [songInspectorController setDelegate: self]; } return self; } - (void) _initButtonImages { [previousButton setImage: [NSImage imageNamed: @"previous"]]; [previousButton setAlternateImage: [NSImage imageNamed: @"previous-pushed"]]; [previousButton setToolTip: LOCALIZED (@"Previous")]; [playButton setImage: [NSImage imageNamed: @"play"]]; [playButton setAlternateImage: [NSImage imageNamed: @"play-pushed"]]; [playButton setToolTip: LOCALIZED (@"Play")]; [pauseButton setImage: [NSImage imageNamed: @"pause"]]; [pauseButton setAlternateImage: [NSImage imageNamed: @"pause-pushed"]]; [pauseButton setToolTip: LOCALIZED (@"Pause")]; [stopButton setImage: [NSImage imageNamed: @"stop-pushed"]]; [stopButton setAlternateImage: [NSImage imageNamed: @"stop-pushed"]]; [stopButton setToolTip: LOCALIZED (@"Stop")]; [nextButton setImage: [NSImage imageNamed: @"next"]]; [nextButton setAlternateImage: [NSImage imageNamed: @"next-pushed"]]; [nextButton setToolTip: LOCALIZED (@"Next")]; [ejectButton setImage: [NSImage imageNamed: @"eject"]]; [ejectButton setAlternateImage: [NSImage imageNamed: @"eject-pushed"]]; [repeatButton setImage: [NSImage imageNamed: @"repeat"]]; [repeatButton setAlternateImage: [NSImage imageNamed: @"repeat-pushed"]]; [shuffleButton setImage: [NSImage imageNamed: @"shuffle"]]; [shuffleButton setAlternateImage: [NSImage imageNamed: @"shuffle-pushed"]]; // [playButton setToolTip: @"Wanna dance?"]; // #define buttonGradient NSGradientConcaveWeak // [[playButton cell] setBezelStyle: NSLargeIconButtonBezelStyle]; // [[previousButton cell] setBezelStyle: NSSmallIconButtonBezelStyle]; // [[previousButton cell] setGradientType: buttonGradient]; // [[playButton cell] setGradientType: NSGradientNone]; // [[stopButton cell] setGradientType: buttonGradient]; // [[nextButton cell] setGradientType: buttonGradient]; // [[pauseButton cell] setGradientType: buttonGradient]; // [[ejectButton cell] setGradientType: buttonGradient]; // [[playlistButton cell] setGradientType: buttonGradient]; } - (NSToolbarItem *) _toolbarButtonWithIdentifier: (NSString *) identifier title: (NSString *) title callbackToSelf: (SEL) selector andImageName: (NSString *) imageName { NSToolbarItem *toolbarButton; NSString *locTitle; toolbarButton = [[NSToolbarItem alloc] initWithItemIdentifier: identifier]; [toolbarButton setImage: [NSImage imageNamed: imageName]]; if (title) { locTitle = LOCALIZED (title); [toolbarButton setLabel: locTitle]; [toolbarButton setPaletteLabel: locTitle]; [toolbarButton setToolTip: locTitle]; } [toolbarButton setTarget: self]; [toolbarButton setAction: selector]; return toolbarButton; } - (void) _initToolbarButtons { addButton = [self _toolbarButtonWithIdentifier: AddItemIdentifier title: @"Add Songs..." callbackToSelf: @selector (addSongs:) andImageName: @"add"]; removeButton = [self _toolbarButtonWithIdentifier: RemoveItemIdentifier title: @"Remove Selection" callbackToSelf: @selector (removeSelectedSongs:) andImageName: @"remove"]; // removeAllButton = [self _toolbarButtonWithIdentifier: RemoveAllItemIdentifier // title: @"Remove All" // callbackToSelf: @selector (removeAllSongs:) // andImageName: @"remove-all"]; cleanupButton = [self _toolbarButtonWithIdentifier: CleanupItemIdentifier title: @"Cleanup" callbackToSelf: @selector (cleanupPlaylist:) andImageName: @"cleanup"]; // saveButton = [self _toolbarButtonWithIdentifier: SaveItemIdentifier // title: @"Save..." // callbackToSelf: @selector (saveList:) // andImageName: @"save"]; saveAsButton = [self _toolbarButtonWithIdentifier: SaveAsItemIdentifier title: @"Save As..." callbackToSelf: @selector (saveListAs:) andImageName: @"save-as"]; // repeatButton = [self _toolbarButtonWithIdentifier: RepeatItemIdentifier // title: @"Repeat" // callbackToSelf: @selector (toggleRepeat:) // andImageName: @"repeat"]; // shuffleButton = [self _toolbarButtonWithIdentifier: ShuffleItemIdentifier // title: @"Shuffle" // callbackToSelf: @selector (toggleShuffle:) // andImageName: @"shuffle"]; songInspectorButton = [self _toolbarButtonWithIdentifier: SongInspectorItemIdentifier title: @"Song Inspector..." callbackToSelf: @selector (toggleSongInspector:) andImageName: @"song-inspector"]; } - (void) updateStatusLabel { NSMutableString *infos; NSArray *selection; infos = [NSMutableString stringWithFormat: LOCALIZED (@"%d songs - total time: %@"), [playlist numberOfSongs], [[playlist duration] timeStringValue]]; selection = [playlistViewController getSelectedSongs]; if ([selection count]) [infos appendFormat: LOCALIZED (@" - selection: %@"), [[playlistViewController durationOfSelection] timeStringValue]]; [playlistStatusLabel setStringValue: infos]; } - (void) _updatePlayerState { NSUserDefaults *defaults; BOOL boolValue; int intValue; defaults = [NSUserDefaults standardUserDefaults]; boolValue = [defaults boolForKey: @"RepeatMode"]; if (boolValue) { [repeatButton setState: NSOnState]; [self toggleRepeat: self]; } boolValue = [defaults boolForKey: @"ShuffleMode"]; if (boolValue) { [shuffleButton setState: NSOnState]; [self toggleShuffle: self]; } intValue = [defaults integerForKey: @"CurrentSongNumber"]; if (intValue < [playlist numberOfSongs]) { currentPlayerSong = [playlist songAtIndex: intValue]; [playlistViewController setCurrentPlayerSong: currentPlayerSong]; } } - (void) savePlayerState { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; [defaults setBool: repeat forKey: @"RepeatMode"]; [defaults setBool: [playlist shuffle] forKey: @"ShuffleMode"]; if (currentPlayerSong) [defaults setInteger: [playlist indexOfSong: currentPlayerSong] forKey: @"CurrentSongNumber"]; } #ifdef GOOM - (void) _createGoom { NSWindow *goomPanel; GoomView *goomView; goomPanel = [[NSPanel alloc] initWithContentRect: NSMakeRect (100, 100, 660, 420) styleMask: NSTitledWindowMask backing: NSBackingStoreRetained defer: NO]; goomView = [[GoomView alloc] initWithFrame: NSMakeRect (10, 10, 640, 400)]; [[goomPanel contentView] addSubview: goomView]; [goomPanel setTitle: @"Goom"]; [goomPanel setLevel: NSFloatingWindowLevel]; [goomPanel orderFront: self]; [goomView setFPS: 10]; [player setGoom: [goomView goom]]; } #endif /* GOOM */ - (void) awakeFromNib { [repeatMenuItem setState: NSOffState]; [shuffleMenuItem setState: NSOffState]; [songInspectorMenuItem setState: NSOffState]; [playlist loadFromFile: defaultPlaylistFile]; [playlistViewController setPlaylistController: self]; [playlistViewController setPlaylist: playlist]; [playlistStatusLabel setTextColor: [NSColor darkGrayColor]]; #ifdef GOOM [self _createGoom]; #endif /* GOOM */ } - (void) _initProgressSlider { #ifdef GNUSTEP NSCell *oldCell, *cell; oldCell = [progressSlider cell]; cell = [CynthiuneSliderCell new]; [cell setBordered: NO]; [cell setBezeled: NO]; [cell setTarget: [oldCell target]]; [cell setAction: [oldCell action]]; [progressSlider setCell: cell]; #endif /* GNUSTEP */ [progressSlider setEnabled: NO]; [progressSlider setMinValue: 0.0]; [progressSlider setIntValue: 0]; } - (void) initializeWidgets { [self _initButtonImages]; [self _initToolbarButtons]; [self _initProgressSlider]; [self updateStatusLabel]; [self _updatePlayerState]; [pauseButton setEnabled: NO]; [stopButton setEnabled: NO]; [infoDisplayController initializeWidgets]; } - (NSToolbar *) playlistToolbar { NSToolbar *toolbar; toolbar = [[NSToolbar alloc] initWithIdentifier: @"PlaylistToolbar"]; [toolbar autorelease]; [toolbar setDisplayMode: NSToolbarDisplayModeIconOnly]; [toolbar setSizeMode: NSToolbarSizeModeSmall]; [toolbar setDelegate: self]; return toolbar; } - (void) toggleRepeat: (id) sender { int widgetState; widgetState = [repeatButton state]; [repeatMenuItem setState: widgetState]; repeat = ((widgetState == NSOnState) ? YES : NO); } - (void) toggleShuffle: (id) sender { BOOL shuffleState; int widgetState; Song *shuffleSong; widgetState = [shuffleButton state]; [shuffleMenuItem setState: widgetState]; shuffleState = ((widgetState == NSOnState) ? YES : NO); [playlist setShuffle: shuffleState]; if (currentPlayerSong) shuffleSong = currentPlayerSong; else shuffleSong = [playlist firstSong]; if (shuffleState && shuffleSong) [playlist shuffleFromSong: shuffleSong]; } - (void) toggleSongInspector: (id) sender { [songInspectorController toggleDisplay]; } - (void) resetProgressSlider { [progressSlider setIntValue: 0]; if (currentPlayerSong) { [progressSlider setMaxValue: [[currentPlayerSong duration] doubleValue]]; [progressSlider setEnabled: [currentPlayerSong isSeekable]]; } else { [progressSlider setMaxValue: 0.0]; [progressSlider setEnabled: NO]; } } - (void) _updatePlayerSong: (Song *) song { NSObject *stream; if (song) { stream = [song openStreamForSong]; if (stream) { currentPlayerSong = song; [playlistViewController setCurrentPlayerSong: song]; [player setStream: stream]; if ([player playing]) { [infoDisplayController updateInfoFieldsFromSong: song]; [self resetProgressSlider]; } } } } - (void) _saveDefaultOpenDirectoryFromOpenPanel: (NSOpenPanel *) oPanel { NSUserDefaults *userDefaults; userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject: [oPanel directory] forKey: @"NSDefaultOpenDirectory"]; [userDefaults synchronize]; } - (NSArray *) _filteredSubtree: (NSString *) filename { NSFileManager *fm; NSMutableArray *result; NSEnumerator *filenames; NSString *currentFilename, *absoluteFilename; BOOL isDir; result = [NSMutableArray new]; [result autorelease]; fm = [NSFileManager defaultManager]; filenames = [[fm subpathsAtPath: filename] objectEnumerator]; currentFilename = [filenames nextObject]; while (currentFilename) { absoluteFilename = [filename stringByAppendingPathComponent: currentFilename]; if (!([fm fileExistsAtPath: absoluteFilename isDirectory: &isDir] && isDir)) [result addObject: absoluteFilename]; currentFilename = [filenames nextObject]; } [result sortUsingSelector: @selector (localizedCaseInsensitiveCompare:)]; return result; } - (void) _feedPlaylistWithTreeOfFilenames: (NSArray *) filenames { NSEnumerator *files; NSString *filename; FormatTester *formatTester; formatTester = [FormatTester formatTester]; files = [filenames objectEnumerator]; filename = [files nextObject]; while (filename) { if (fileIsAReadableDirectory (filename)) [self _feedPlaylistWithTreeOfFilenames: [self _filteredSubtree: filename]]; else if (fileIsAcceptable (filename)) { if ([formatTester formatNumberForFile: filename] > -1) [playlist addSong: [Song songWithFilename: filename]]; else if ([formatTester fileIsPlaylist: filename]) [playlist loadFromFile: filename]; } filename = [files nextObject]; } } - (void) _oPanelDidEnd: (NSOpenPanel *) oPanel returnCode: (int) result contextInfo: (void *) contextInfo { if (result == NSOKButton) { [self _saveDefaultOpenDirectoryFromOpenPanel: oPanel]; notifiedFirstSong = nil; [self _feedPlaylistWithTreeOfFilenames: [oPanel filenames]]; if (notifiedFirstSong && ![player playing]) { [playlistViewController invalidateSortedColumn]; [self _updatePlayerSong: notifiedFirstSong]; } } } - (void) _startOPanelDidEnd: (NSOpenPanel *) oPanel returnCode: (int) result contextInfo: (void *) contextInfo { if (result == NSOKButton) { [self _saveDefaultOpenDirectoryFromOpenPanel: oPanel]; notifiedFirstSong = nil; [self _feedPlaylistWithTreeOfFilenames: [oPanel filenames]]; if (notifiedFirstSong) { [playlistViewController invalidateSortedColumn]; [self _updatePlayerSong: notifiedFirstSong]; [player play]; } } } - (void) _ejectOPanelDidEnd: (NSOpenPanel *) oPanel returnCode: (int) result contextInfo: (void *) contextInfo { if (result == NSOKButton) { [self _saveDefaultOpenDirectoryFromOpenPanel: oPanel]; if ([player playing]) [player stop]; currentPlayerSong = nil; [playlistViewController setCurrentPlayerSong: nil]; [playlist deleteAllSongsQuietly]; notifiedFirstSong = nil; [self _feedPlaylistWithTreeOfFilenames: [oPanel filenames]]; if (notifiedFirstSong) { [playlistViewController invalidateSortedColumn]; [self _updatePlayerSong: notifiedFirstSong]; [player play]; } } } - (void) _runOpenPanelWithDidEndSelector: (SEL) selector { NSOpenPanel *oPanel; NSString *openDir; openDir = [[NSUserDefaults standardUserDefaults] stringForKey: @"NSDefaultOpenDirectory"]; oPanel = [NSOpenPanel openPanel]; [oPanel setAllowsMultipleSelection: YES]; [oPanel setCanChooseDirectories: YES]; [oPanel setTitle: LOCALIZED (@"Add music files...")]; #ifdef GNUSTEP [oPanel setDirectory: openDir]; #endif /* GNUSTEP */ [oPanel setDelegate: self]; [oPanel beginSheetForDirectory: openDir file: nil types: nil modalForWindow: [NSApp mainWindow] modalDelegate: self didEndSelector: selector contextInfo: nil]; } - (void) addSongs: (id) sender { [self _runOpenPanelWithDidEndSelector: @selector(_oPanelDidEnd:returnCode:contextInfo:)]; } - (Song *) _songAfterRemovalOfArray: (NSArray *) array { Song *newSong; newSong = currentPlayerSong; while (newSong && [array containsObject: newSong]) newSong = [playlist validSongAfter: newSong]; if (!newSong) { newSong = currentPlayerSong; while (newSong && [array containsObject: newSong]) newSong = [playlist validSongBefore: newSong]; } return newSong; } - (void) _removeArrayOfSongs: (NSArray *) array { Song *newSong; if ([array containsObject: currentPlayerSong]) { newSong = [self _songAfterRemovalOfArray: array]; if (newSong) { if (newSong != currentPlayerSong) [self _updatePlayerSong: newSong]; } else { if (currentPlayerSong) { currentPlayerSong = nil; [playlistViewController setCurrentPlayerSong: nil]; [self resetProgressSlider]; } [player stop]; } } if ([array count]) [playlistViewController invalidateSortedColumn]; [playlist deleteSongsInArray: array]; } - (void) removeSelectedSongs: (id) sender { [songInspectorController setSong: nil]; [self _removeArrayOfSongs: [playlistViewController getSelectedSongs]]; [playlistViewController deselectAll]; } - (void) removeAllSongs: (id) sender { if ([playlist numberOfSongs] > 0) [playlistViewController invalidateSortedColumn]; if ([player playing]) [player stop]; if (currentPlayerSong) { currentPlayerSong = nil; [playlistViewController setCurrentPlayerSong: nil]; [self resetProgressSlider]; } [songInspectorController setSong: nil]; [playlist deleteAllSongs]; } - (void) cleanupPlaylist: (id) sender { NSMutableArray *selectedSongs; NSArray *invalidSongs; invalidSongs = [playlist arrayOfInvalidSongs]; if ([invalidSongs count]) { if ([invalidSongs containsObject: [songInspectorController song]]) [songInspectorController setSong: nil]; selectedSongs = [NSMutableArray new]; [selectedSongs addObjectsFromArray: [playlistViewController getSelectedSongs]]; [selectedSongs removeObjectsInArray: invalidSongs]; [self _removeArrayOfSongs: invalidSongs]; [playlistViewController deselectAll]; [playlistViewController selectSongsInArray: selectedSongs]; [selectedSongs release]; } } /* FIXME: when the user specifies an extension, don't use default format */ - (void) _sPanelDidEnd: (NSSavePanel *) sPanel returnCode: (int) result contextInfo: (NSString *) extension { NSString *saveDir; if (result == NSOKButton) { saveDir = [sPanel directory]; [[NSUserDefaults standardUserDefaults] setObject: saveDir forKey: @"NSDefaultSaveDirectory"]; SET (playlistFilename, [sPanel filename]); [playlist saveToFile: playlistFilename]; } } - (void) _runSaveListPanelWithExtension: (NSString *) extension andSaveDir: (NSString *) saveDir { NSSavePanel *sPanel; sPanel = [NSSavePanel savePanel]; [sPanel setTitle: LOCALIZED (@"Save playlist as...")]; [sPanel setRequiredFileType: extension]; [sPanel setExtensionHidden: YES]; [sPanel beginSheetForDirectory: saveDir file: playlistFilename modalForWindow: [NSApp mainWindow] modalDelegate: self didEndSelector: @selector (_sPanelDidEnd:returnCode:contextInfo:) contextInfo: extension]; } - (void) saveList: (id) sender { NSString *extension, *filename, *saveDir; NSUserDefaults *userDefaults; if (!playlistFilename) [self saveListAs: sender]; else { extension = [[GeneralPreference instance] preferredPlaylistFormat]; userDefaults = [NSUserDefaults standardUserDefaults]; saveDir = [userDefaults stringForKey: @"NSDefaultSaveDirectory"]; if (!saveDir || [saveDir isEqualToString: @""]) saveDir = [userDefaults stringForKey: @"NSDefaultOpenDirectory"]; filename = [playlistFilename stringByAppendingPathExtension: extension]; [playlist saveToFile: [saveDir stringByAppendingPathComponent: filename]]; } } - (void) saveListAs: (id) sender { NSString *extension, *saveDir; NSUserDefaults *userDefaults; extension = [[GeneralPreference instance] preferredPlaylistFormat]; userDefaults = [NSUserDefaults standardUserDefaults]; saveDir = [userDefaults stringForKey: @"NSDefaultSaveDirectory"]; if (!saveDir || [saveDir isEqualToString: @""]) saveDir = [userDefaults stringForKey: @"NSDefaultOpenDirectory"]; [self _runSaveListPanelWithExtension: extension andSaveDir: saveDir]; } /* helper methods for CynthiuneController */ - (void) addSongFromNSApp: (id) sender { [self _runOpenPanelWithDidEndSelector: @selector(_oPanelDidEnd:returnCode:contextInfo:)]; } - (void) openSongFromNSApp: (NSString *) filename { notifiedFirstSong = nil; [playlistViewController invalidateSortedColumn]; [self _feedPlaylistWithTreeOfFilenames: [NSArray arrayWithObject: filename]]; if (notifiedFirstSong && ![player playing]) [self _updatePlayerSong: notifiedFirstSong]; } /* player buttons */ - (void) startPlayer: (id) sender { Song *song; if ([playlist numberOfSongs]) { if (!currentPlayerSong || [currentPlayerSong status] != SongOK) song = [playlist firstValidSong]; else song = currentPlayerSong; if (song) { [self _updatePlayerSong: song]; if (![player playing]) [player play]; } else [self _runOpenPanelWithDidEndSelector: @selector(_startOPanelDidEnd:returnCode:contextInfo:)]; } else [self _runOpenPanelWithDidEndSelector: @selector(_startOPanelDidEnd:returnCode:contextInfo:)]; } - (void) pausePlayer: (id) sender { if ([player playing]) [player setPaused: ![player paused]]; } - (void) previousSong: (id) sender { Song *newSong; if (currentPlayerSong) { newSong = [playlist validSongBefore: currentPlayerSong]; if (!newSong && repeat) newSong = [playlist lastValidSong]; } else newSong = nil; [self _updatePlayerSong: newSong]; } - (void) nextSong: (id) sender { Song *newSong; if (currentPlayerSong) { newSong = [playlist validSongAfter: currentPlayerSong]; if (!newSong && repeat) newSong = [playlist firstValidSong]; } else newSong = [playlist firstValidSong]; [self _updatePlayerSong: newSong]; } - (void) stopPlayer: (id) sender { [player stop]; } - (void) eject: (id) sender { [self _runOpenPanelWithDidEndSelector: @selector(_ejectOPanelDidEnd:returnCode:contextInfo:)]; } /* playlistview delegate */ - (void) playlistViewActivateSelection: (PlaylistView *) view { NSArray *selection; Song *song; selection = [playlistViewController getSelectedSongs]; if ([selection count] > 0) { song = [selection objectAtIndex: 0]; while ([song status] != SongOK || ![selection containsObject: song]) song = [playlist validSongAfter: song]; if (song) { [self _updatePlayerSong: song]; if (![player playing]) [player play]; } } } - (void) tableDoubleClick: (int) row { Song *song; song = [playlist songAtIndex: row]; if ([playlist shuffle]) [playlist shuffleFromSong: song]; if ([song status] != SongOK) song = [playlist validSongAfter: song]; [self _updatePlayerSong: song]; if (currentPlayerSong) { if (![player playing]) [player play]; else if ([player paused]) [player setPaused: NO]; } } - (void) updateSongInspector { NSArray *songs; songs = [playlistViewController getSelectedSongs]; [songInspectorController setSong: (([songs count] == 1) ? [songs objectAtIndex: 0] : nil)]; } - (void) tableFilenamesDropped: (NSArray *) filenames { notifiedFirstSong = nil; [self _feedPlaylistWithTreeOfFilenames: filenames]; if (notifiedFirstSong && ![player playing]) [self _updatePlayerSong: notifiedFirstSong]; } - (void) songCursorChange: (id) sender { unsigned int time; time = [sender intValue]; [infoDisplayController setTimerFromSeconds: time]; [player seek: time]; } - (void) changeTimeDisplay: (id) sender { unsigned int time; if ([player playing]) { time = [player timer]; [infoDisplayController setReverseTimer: ![infoDisplayController timerIsReversed]]; [infoDisplayController setTimerFromSeconds: time]; } } - (void) _updateTimeDisplay { unsigned int time; time = [player timer]; [infoDisplayController setTimerFromSeconds: time]; [progressSlider setIntValue: time]; } - (void) _startTimeTimer { if (timer) [timer invalidate]; [self _updateTimeDisplay]; timer = [NSTimer timerWithTimeInterval: 1 target: self selector: @selector (_updateTimeDisplay) userInfo: nil repeats: YES]; [timer explode]; } - (void) _stopTimeTimer { [timer invalidate]; timer = nil; } /* as a player delegate... */ - (void) playerPlaying: (NSNotification*) aNotification { double duration; [infoDisplayController updateInfoFieldsFromSong: currentPlayerSong]; [infoDisplayController show]; [self _startTimeTimer]; duration = [[currentPlayerSong duration] doubleValue]; [progressSlider setMaxValue: duration]; [playButton setImage: [NSImage imageNamed: @"play-pushed"]]; [playButton setEnabled: NO]; [pauseButton setEnabled: YES]; [stopButton setImage: [NSImage imageNamed: @"stop"]]; [stopButton setAlternateImage: [NSImage imageNamed: @"stop-pushed"]]; [stopButton setEnabled: YES]; [playlistViewController setCurrentPlayerSong: currentPlayerSong]; [self resetProgressSlider]; } - (void) playerPaused: (NSNotification*) aNotification { [self _stopTimeTimer]; [pauseButton setState: YES]; } - (void) playerResumed: (NSNotification*) aNotification { [self _startTimeTimer]; [pauseButton setState: NO]; } - (void) playerStopped: (NSNotification*) aNotification { [infoDisplayController hide]; [self _stopTimeTimer]; [playButton setImage: [NSImage imageNamed: @"play"]]; [playButton setAlternateImage: [NSImage imageNamed: @"play-pushed"]]; [playButton setEnabled: YES]; [pauseButton setEnabled: NO]; [stopButton setImage: [NSImage imageNamed: @"stop-pushed"]]; [stopButton setEnabled: NO]; [progressSlider setEnabled: NO]; [progressSlider setMaxValue: 0]; } - (void) playerSongEnded: (NSNotification*) aNotification { Song *newSong; if (currentPlayerSong) { newSong = [playlist validSongAfter: currentPlayerSong]; if (newSong) [self _updatePlayerSong: newSong]; else { if (!repeat) [player stop]; [self _updatePlayerSong: [playlist firstValidSong]]; } } else { [player stop]; [self _updatePlayerSong: [playlist firstValidSong]]; } } /* Playlist delegate */ - (void) playlistChanged: (NSNotification *) aNotification { NSDictionary *userInfo; [playlist saveToFile: defaultPlaylistFile]; [playlistViewController updateView]; [self updateStatusLabel]; userInfo = [aNotification userInfo]; if (!notifiedFirstSong) notifiedFirstSong = [userInfo objectForKey: @"firstSong"]; } /* NSOpenPanel delegate */ - (BOOL) panel: (id) sender shouldShowFilename: (NSString *) fileName { NSFileManager *fileManager; FormatTester *formatTester; BOOL isDir, answer; fileManager = [NSFileManager defaultManager]; formatTester = [FormatTester formatTester]; answer = (([fileManager fileExistsAtPath: fileName isDirectory: &isDir] && isDir) || [formatTester extensionIsSupported: [fileName pathExtension]]); return answer; } /* Song inspector delegate */ - (void) songInspectorWasShown: (NSNotification *) aNotification { [songInspectorMenuItem setState: NSOnState]; [songInspectorButton setImage: [NSImage imageNamed: @"song-inspector-pushed"]]; } - (void) songInspectorWasHidden: (NSNotification *) aNotification { [songInspectorMenuItem setState: NSOffState]; [songInspectorButton setImage: [NSImage imageNamed: @"song-inspector"]]; } - (void) songInspectorDidUpdateSong: (NSNotification *) aNotification { if ([player playing] && currentPlayerSong == [[aNotification userInfo] objectForKey: @"song"]) [infoDisplayController updateInfoFieldsFromSong: currentPlayerSong]; [playlist saveToFile: defaultPlaylistFile]; [playlistViewController updateView]; } /* NSToolbar delegate */ - (NSToolbarItem *) toolbar: (NSToolbar *) toolbar itemForItemIdentifier: (NSString *) itemIdentifier willBeInsertedIntoToolbar: (BOOL) flag { NSToolbarItem *item; if ([itemIdentifier isEqualToString: AddItemIdentifier]) item = addButton; else if ([itemIdentifier isEqualToString: RemoveItemIdentifier]) item = removeButton; // else if ([itemIdentifier isEqualToString: RemoveAllItemIdentifier]) // item = removeAllButton; else if ([itemIdentifier isEqualToString: CleanupItemIdentifier]) item = cleanupButton; // else if ([itemIdentifier isEqualToString: SaveItemIdentifier]) // item = saveButton; else if ([itemIdentifier isEqualToString: SaveAsItemIdentifier]) item = saveAsButton; // else if ([itemIdentifier isEqualToString: RepeatItemIdentifier]) // item = repeatButton; // else if ([itemIdentifier isEqualToString: ShuffleItemIdentifier]) // item = shuffleButton; else if ([itemIdentifier isEqualToString: SongInspectorItemIdentifier]) item = songInspectorButton; else item = nil; return item; } - (NSArray *) toolbarAllowedItemIdentifiers: (NSToolbar *) toolbar { return [NSArray arrayWithObjects: AddItemIdentifier, CleanupItemIdentifier, RemoveItemIdentifier, // RemoveAllItemIdentifier, // RepeatItemIdentifier, // SaveItemIdentifier, SaveAsItemIdentifier, // ShuffleItemIdentifier, SongInspectorItemIdentifier, NSToolbarCustomizeToolbarItemIdentifier, NSToolbarSeparatorItemIdentifier, NSToolbarSpaceItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, nil]; } - (NSArray *) toolbarDefaultItemIdentifiers: (NSToolbar *) toolbar { return [NSArray arrayWithObjects: AddItemIdentifier, SaveAsItemIdentifier, NSToolbarSeparatorItemIdentifier, RemoveItemIdentifier, CleanupItemIdentifier, NSToolbarSeparatorItemIdentifier, // RepeatItemIdentifier, // ShuffleItemIdentifier, // NSToolbarSeparatorItemIdentifier, SongInspectorItemIdentifier, nil]; } /* Services */ - (id) validRequestorForSendType: (NSString *)sendType returnType: (NSString *)returnType { return ((sendType && [sendType isEqualToString: NSFilenamesPboardType] && ([playlistViewController getFirstSelectedRow] > -1)) ? self : nil); } - (BOOL) writeSelectionToPasteboard: (NSPasteboard*) pboard types: (NSArray*) types { NSArray *declaredTypes, *filenames; BOOL answer; if ([types containsObject: NSFilenamesPboardType]) { declaredTypes = [NSArray arrayWithObject: NSFilenamesPboardType]; [pboard declareTypes: declaredTypes owner: self]; filenames = [playlistViewController getSelectedSongsAsFilenames]; answer = [pboard setPropertyList: filenames forType: NSFilenamesPboardType]; } else answer = NO; return answer; } @end cynthiune.app-0.9.5/French.lproj/0000755000175000017500000000000010413173130016175 5ustar gurkangurkancynthiune.app-0.9.5/French.lproj/Localizable.strings0000644000175000017500000001602010404504542022035 0ustar gurkangurkan/* Application menu */ "Info" = "Informations"; "Playlist" = "Liste de lecture"; "Songs" = "Chansons"; "Player" = "Lecteur"; "Tools" = "Outils"; "Windows" = "Fentres"; "Window" = "Fentre"; "Services" = "Services"; "Hide" = "Cacher"; "Hide Cynthiune" = "Cacher Cynthiune"; "Hide Others" = "Cacher les autres"; "Show All" = "Tout montrer"; "Quit" = "Quitter"; "Quit Cynthiune" = "Quitter Cynthiune"; /* Info submenu */ "Info Panel..." = " propos..."; "About Cynthiune..." = " propos de Cynthiune..."; "Preferences..." = "Prfrences..."; "Send A Bug Report..." = "Rapporter un bogue..."; "Help..." = "Aide..."; "Help" = "Aide"; "Cynthiune Help" = "Aide de Cynthiune"; /* Playlist submenu */ "Open..." = "Ouvrir..."; "New" = "Nouveau"; "Save..." = "Enregistrer..."; "Save As..." = "Enregistrer sous..."; "Save To..." = "Enregistrer vers..."; "Revert To Saved" = "Revenir l'original"; "Close" = "Fermer"; /* Songs submenu */ "Add Songs..." = "Ajouter des chansons..."; "Remove Selection" = "Enlever la slection"; "Remove All" = "Vider la liste"; "Cleanup" = "Nettoyer"; /* Player submenu */ "Play" = "Jouer"; "Pause" = "Pause"; "Stop" = "Arrter"; "Previous" = "Prcdent"; "Next" = "Suivant"; "Mode" = "Mode"; /* Player/Mode submenu */ "Repeat" = "Continu"; "Shuffle" = "Alatoire"; /* Tools submenu */ "Song Inspector..." = "Inspecteur de chanson..."; /* Windows submenu */ "Arrange In Front" = "Mettre au premier plan"; "Miniaturize Window" = "Rduire la fentre"; "Minimize" = "Rduire"; "Close Window" = "Fermer la fentre"; /* Playlist status label */ "%d songs - total time: %@" = "%d chansons - dure totale: %@"; " - selection: %@" = " - slection: %@"; /* Playlist table */ "Song" = "Chanson"; "Time" = "Dure"; /* Song Inspector */ "Song Inspector" = "Inspecteur de chanson"; "Song Information" = "Discographie"; "Format Attributes" = "Attributs du format"; "No song selected" = "Aucune chanson slectionne"; "Lookup through MusicBrainz..." = "Chercher sur MusicBrainz..."; "Title" = "Titre"; "Album" = "Album"; "Track" = "Piste"; "Artist" = "Artiste"; "Genre" = "Genre"; "Year" = "Anne"; "Reset" = "Rtablir"; "Save" = "Sauver"; "Generating TRM..." = "Gnration du TRM..."; "Querying MusicBrainz server..." = "Requte au serveur de MusicBrainz..."; "Received %d result(s)" = "%d rsutat(s) obtenu(s)"; "The MusicBrainz server was too busy" = "Le serveur de MusicBrainz est trop occup"; /* Dialog boxes */ "Add music files..." = "Ajouter des fichiers musicaux..."; "Add a music folder..." = "Ajouter un dossier musical..."; "Save playlist as..." = "Sauve la liste de lecture sous..."; /* Song names */ "[not found: %@]" = "[non-trouv: %@]"; "[unknown format: %@]" = "[format inconnu: %@]"; "[format error: %@]" = "[erreur de format: %@]"; /* Preference dialog */ "None" = "Aucun"; "Preferences" = "Prfrences"; "General" = "Gnral"; /* General preferences */ "Windows" = "Fentres"; "Playlists" = "Listes de lecture"; "Use absolute filenames" = "Noms de fichier absolus"; "Output module" = "Module de sortie"; "Textured" = "Mtalises"; "Sticky" = "Magntises"; "Remember location" = "Retenir la disposition"; "Format" = "Format"; /* MB results panel */ "Please select the correct information..." = "Veuillez choisir l'information la plus correcte..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "La requte au serveur de MusicBrainz a retourn plusieurs rsultats.\nVeuillez choisir celui qui vous semble le plus appropri."; "Cancel" = "Annuler"; cynthiune.app-0.9.5/French.lproj/InfoPlist.strings0000644000175000017500000000303610413152170021522 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nCe programme est distribu sous la GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. Consultez le fichier COPYING pour plus d'information."; NSApplicationIcon = "Cynthiune"; /* File types */ "Ogg music file" = "Fichier musical OGG"; "MPEG music file" = "Fichier musical MPEG"; "Musepack music file" = "Fichier musical MPEG"; "FLAC music file" = "Fichier musical FLAC"; "Sound file" = "Fichier de son"; "Tracker music file" = "Fichier de squenceur musical"; "Playlist file" = "Liste de lecture musicale"; cynthiune.app-0.9.5/CynthiuneSongTitleCell.m0000644000175000017500000000754210407725717020451 0ustar gurkangurkan/* CynthiuneSongTitleCell.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import "CynthiuneTextCell.h" #import "CynthiuneSongTitleCell.h" #define imageOffset 2.0 @implementation CynthiuneSongTitleCell : CynthiuneTextCell - (id) init { if ((self = [super init])) { songPointer = nil; imageSize = NSMakeSize (0.0, 0.0); imageShown = NO; } return self; } - (void) dealloc { if (songPointer) [songPointer release]; } - (void) setShowImage: (BOOL) showImage { imageShown = showImage; } - (BOOL) showImage { return imageShown; } - (void) setPointerImage: (NSImage *) pointerImage { SET (songPointer, pointerImage); imageSize = ((songPointer) ? [songPointer size] : NSMakeSize (0.0, 0.0)); } - (NSImage *) pointerImage { return songPointer; } - (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView { NSRect aFrame, imageFrame; NSDivideRect (cellFrame, &aFrame, &cellFrame, 3.0 + imageOffset + imageSize.width, NSMinXEdge); imageFrame = aFrame; imageFrame.size = imageSize; imageFrame.size.width += 3.0 + imageOffset; if ([self drawsBackground]) { [[self backgroundColor] set]; NSRectFill (aFrame); } if ([self isHighlighted]) { [[self highlightColor] set]; NSRectFill (aFrame); } if (imageShown) { aFrame.size = imageSize; aFrame.origin.x += imageOffset; aFrame.origin.y += ((cellFrame.size.height + 1.0 + ([controlView isFlipped] ? aFrame.size.height : -aFrame.size.height)) / 2); [songPointer compositeToPoint: aFrame.origin operation: NSCompositeSourceOver]; } [super drawWithFrame: cellFrame inView: controlView]; } - (NSSize) cellSize { NSSize aSize; aSize = [super cellSize]; aSize.width += imageSize.width + imageOffset + 3.0; return aSize; } - (float) widthOfText: (NSString *) text { return ([super widthOfText: text] + imageSize.width + imageOffset + 3.0); } /* NSCopying protocol */ - (id) copyWithZone: (NSZone *) theZone { CynthiuneSongTitleCell *newTitleCell; newTitleCell = [[CynthiuneSongTitleCell allocWithZone: theZone] init]; [newTitleCell setPointerImage: songPointer]; [newTitleCell setShowImage: imageShown]; return newTitleCell; } /* NSCoding protocol */ - (void) encodeWithCoder: (NSCoder *) encoder { [super encodeWithCoder: encoder]; [encoder encodeBool: imageShown forKey: @"imageShown"]; [encoder encodeObject: songPointer forKey: @"songPointer"]; } - (id) initWithCoder: (NSCoder *) decoder { if ((self = [super initWithCoder: decoder])) { imageShown = [decoder decodeBoolForKey: @"imageShown"]; songPointer = [decoder decodeObjectForKey: @"songPointer"]; if (songPointer) [songPointer retain]; } return self; } @end cynthiune.app-0.9.5/PlayerController.h0000644000175000017500000000171710146515077017337 0ustar gurkangurkan/* PlayerController.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CynthiuneController_H #define CynthiuneController_H #endif /* CynthiuneController_H */ cynthiune.app-0.9.5/Hungarian.lproj/0000755000175000017500000000000010413173130016704 5ustar gurkangurkancynthiune.app-0.9.5/Hungarian.lproj/Localizable.strings0000600000175000017500000001547410345630474022560 0ustar gurkangurkan/* Andras <reuss@chello.hu> */ /* Application menu */ "Info" = "Informcik"; "Playlist" = "Lejtszsi lista"; "Songs" = "Szmok"; "Player" = "Lejtsz"; "Windows" = "Ablakok"; "Window" = "Ablak"; "Tools" = "Eszkzk"; "Services" = Szolgltatsok"; "Hide" = Elrejts"; "Hide Cynthiune" = "Cynthiune elrejtse"; "Hide Others" = "A tbbi elrejtse"; "Show All" = "Minden ltszik"; "Quit" = "Kilps"; "Quit Cynthiune" = "Kilps a Cynthiune-bl"; /* Info submenu */ "Info Panel..." = "Nvjegy..."; "About Cynthiune..." = "A Cynthiune nvjegye ..."; "Preferences..." = "Belltsok..."; "Send A Bug Report..." = "Hibajelents kldse..."; "Help..." = "Segtsg..."; "Help" = "Segtsg"; "Cynthiune Help" = "Segtsg a Cynthiune-hoz"; /* Playlist submenu */ "Open..." = "Megnyits..."; "New" = "j"; "Save..." = "Ments..."; "Save As..." = "Ments msknt..."; "Save To..." = "Ments mshova..."; "Revert To Saved" = "Eredeti visszalltsa"; "Close" = "Bezrs"; /* Songs submenu */ "Add Songs..." = "Szmok hozzadsa..."; "Remove Selection" = "Kijelltek eltvoltsa"; "Remove All" = "Az sszes eltvoltsa"; "Cleanup" = "Kirts"; /* Player submenu */ "Play" = "Lejtszs"; "Pause" = "Sznet"; "Stop" = "llj"; "Previous" = "ElQzQ"; "Next" = "KvetkezQ"; "Mode" = "Lejtszsi md"; /* Player/Mode submenu */ "Repeat" = "Folyamatos"; "Shuffle" = "ssze-vissza"; /* Tools submenu */ "Song Inspector..." = "Szm aktja"; /* Windows submenu */ "Arrange In Front" = "ElQrehozs"; "Miniaturize Window" = "Ablak zsugortsa"; "Minimize" = "Kicsinyts"; "Close Window" = "Ablak bezrsa"; /* Playlist status label */ "%d songs - total time: %@" = "%d szm - teljes hossz: %@"; " - selection: %@" = " - kijellt: %@"; /* Playlist table */ "Song" = "Szm"; "Time" = "Hossz"; /* Song Inspector */ "Song Inspector" = "Szm aktja"; "Song Information" = "Szm adatai"; "Format Attributes" = "Formtum tulajdonsgai"; "No song selected" = "Nincs kijellt szm"; "Lookup through MusicBrainz..." = "MusicBrainz keress..."; "Title" = "Cm"; "Album" = "Album"; "Track" = "Szm"; "Artist" = "ElQad"; "Genre" = "Stlus"; "Year" = "v"; "Reset" = "Visszallts"; "Save" = "Ments"; "Generating TRM..." = "TRM generlsa..."; "Querying MusicBrainz server..." = "MusicBrainz-kiszolgl keresse..."; "Received %d result(s)" = "%d tallat"; /* Dialog boxes */ "Add music files..." = "Zenellomnyok hozzadsa..."; "Add a music folder..." = "Zeneknyvtr hozzadsa..."; "Save playlist as..." = "Lejtszsi lista mentse msknt..."; /* Song names */ "[not found: %@]" = "[nem tallhat: %@]"; "[unknown format: %@]" = "[ismeretlen formtum: %@]"; "[format error: %@]" = "[hibs formtum: %@]"; /* Preference dialog */ "None" = "Egyik sem"; "Preferences" = "Belltsok"; "General" = "ltalnos"; /* General preferences */ "Windows" = "Ablakok"; "Playlists" = "Lejtszsi listk"; "Use absolute filenames" = "Abszolt fjlnevek hasznlata"; "Output module" = "Kimeneti modul"; "Textured" = "Mints"; "Sticky" = "ssztapadva"; "Remember location" = "Pozci megjegyzse"; "Format" = "Formtum"; /* MB results panel */ "Please select the correct information..." = "Vlassza ki a helyes informcit..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "A MusicBrainz-kiszolgl tbb tallatot adott vissza.\nAz albbi tblzatban vlassza ki a legmegfelelQbb sort."; "Cancel" = "Mgsem"; cynthiune.app-0.9.5/Hungarian.lproj/InfoPlist.strings0000644000175000017500000000160610375350154022243 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/TraditionalChinese.lproj/0000755000175000017500000000000010413173130020541 5ustar gurkangurkancynthiune.app-0.9.5/TraditionalChinese.lproj/Localizable.strings0000644000175000017500000001300610345630065024406 0ustar gurkangurkan/* Yen-Ju Chen <yjchenx@gmail.com> */ /* Application menu */ "Info" = "f"; "Playlist" = "de>nU"; "Songs" = "kLf"; "Player" = "de>Vh"; "Windows" = "z"; "Window" = "z"; "Tools" = "]Qw"; "Services" = "g R"; "Hide" = ""; "Hide Cynthiune" = "Cynthiune"; "Hide Others" = "QvN։z"; "Show All" = "oy:Qh艖z"; "Quit" = "}Pg_"; "Quit Cynthiune" = "}Pg_Cynthiune"; /* Info submenu */ "Info Panel..." = "fbrH..."; "About Cynthiune..." = "g Cynthiune..."; "Preferences..." = "POY}-[..."; "Send A Bug Report..." = "VX1UOL..."; "Help..." = "Rf..."; "Help" = "Rf"; "Cynthiune Help" = "CynthiuneRf"; /* Playlist submenu */ "Open..." = "U_..."; "New" = "eX"; "Save..." = "[Xj..."; "Save As..." = "S[Xej..."; "Save To..." = "Q2[Xb..."; "Revert To Saved" = "`b_Sj"; "Close" = "ܕ"; /* Songs submenu */ "Add Songs..." = "XRkLf..."; "Remove Selection" = "R*dxS"; "Remove All" = "R*dQh"; "Cleanup" = "ett"; /* Player submenu */ "Play" = "de>"; "Pause" = "fP\"; "Stop" = "P\kb"; "Previous" = "PI"; "Next" = "_I"; "Mode" = "j!_"; /* Player/Mode submenu */ "Repeat" = "͉"; "Shuffle" = "j_"; /* Tools submenu */ "Song Inspector..." = "jkLf..."; /* Windows submenu */ "Arrange In Front" = "ygRM"; "Miniaturize Window" = "~.\z"; "Minimize" = "g\S"; "Close Window" = "ܕz"; /* Playlist status label */ "%d songs - total time: %@" = "%d kLf - ~=QqfB: %@"; " - selection: %@" = " - xS: %@"; /* Playlist table */ "Song" = "kLf"; "Time" = "fB"; /* Song Inspector */ "Song Inspector" = "jkLf"; "Song Information" = "kLf `o"; "Format Attributes" = "h<_\l`'"; "No song selected" = "lg xSkLf"; "Lookup through MusicBrainz..." = "TMusicBrainzg\ "; "Title" = "fT "; "Album" = "\/"; "Track" = "fv^"; "Artist" = "oQ"; "Genre" = "z.^"; "Year" = "^tN"; "Reset" = "n"; "Save" = "[Xj"; "Generating TRM..." = "u"uTRM..."; "Querying MusicBrainz server..." = "g\ MusicBrainzO:g Vh..."; "Received %d result(s)" = "ce6 %d }Pg"; /* Dialog boxes */ "Add music files..." = "RQejjhH..."; "Add a music folder..." = "RQejjhHY>..."; "Save playlist as..." = "de>nUQ2[Xb..."; /* Song names */ "[not found: %@]" = "[lg b~R0: %@]"; "[unknown format: %@]" = "[g*wh<_: %@]"; "[format error: %@]" = "[/h<_: %@]"; /* Preference dialog */ "None" = "q!"; "Preferences" = "POY}-["; "General" = "N,"; /* General preferences */ "Windows" = "z"; "Playlists" = "de>nU"; "Use absolute filenames" = "Ou(}U\ _"; "Output module" = "8Qj!}D"; "Textured" = "W"; "Sticky" = "DW"; "Remember location" = "OOOMn"; "Format" = "h<_"; /* MB results panel */ "Please select the correct information..." = "ːxdkcxNJ ..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "MusicBrainzPVY}Pg0\nW(N Rhh /* Application menu */ "Info" = "Informazioni"; "Playlist" = "Elenco brani"; "Songs" = "Brani"; "Player" = "Lettore"; "Windows" = "Finestre"; "Window" = "Finestra"; "Tools" = "Strumenti"; "Services" = "Servizi"; "Hide" = "Nascondi"; "Hide Cynthiune" = "Nascondi Cynthiune"; "Hide Others" = "Nascondi gli altri"; "Show All" = "Mostra tutto"; "Quit" = "Esci"; "Quit Cynthiune" = "Termina Cynthiune"; /* Info submenu */ "Info Panel..." = "Informazioni..."; "About Cynthiune..." = "Infomazioni su Cynthiune"; "Preferences..." = "Propriet..."; "Send A Bug Report..." = "Segnala un bug..."; "Help..." = "Aiuto..."; "Help" = "Aiuto"; "Cynthiune Help" = "Aiuto su Cynthiune"; /* Paylist submenu */ "Open..." = "Apri..."; "New" = "Nuovo"; "Save..." = "Salva..."; "Save As..." = "Salva come..."; "Save To..." = "Salva su..."; "Revert To Saved" = "Torna alla versione salvata"; "Close" = "Chiudi"; /* Songs submenu */ "Add Songs..." = "Aggiungi brano..."; "Remove Selection" = "Rimuovi selezione"; "Remove All" = "Rimuovi tutte"; "Cleanup" = "Pulisci"; /* Player submenu */ "Play" = "Riproduci"; "Pause" = "Pausa"; "Stop" = "Interrompi"; "Previous" = "Precedente"; "Next" = "Successivo"; "Mode" = "Modalit"; /* Player/Mode submenu */ "Repeat" = "Ripeti"; "Shuffle" = "Shuffle"; /* Tools submenu */ "Song Inspector..." = "Ispettore di brani..."; /* Windows submenu */ "Arrange In Front" = "In primo piano"; "Miniaturize Window" = "Riduci a icona"; "Minimize" = "Minimizza"; "Close Window" = "Chiudi finestra"; /* Playlist status label */ "%d songs - total time: %@" = "%d brani - tempo totale: %@"; " - selection: %@" = " - selezione: %@"; /* Playlist table */ "Song" = "Titolo"; "Time" = "Durata"; /* Song Inspector */ "Song Inspector" = "Ispettore di brani"; "Song Information" = "Informazioni sul brano"; "Format Attributes" = "Formato degli attributi"; "No song selected" = "Nessuna brano selezionato"; "Lookup through MusicBrainz..." = ""; "Title" = "Titolo"; "Album" = "Album"; "Track" = "Traccia"; "Artist" = "Artista"; "Genre" = "Genere"; "Year" = "Anno"; "Reset" = "Cancella tutto"; "Generating TRM..." = "Generazione TRM in corso..."; "Querying MusicBrainz server..." = "Interrogazione del server MusicBrainz in corso..."; "Received %d result(s)" = "Ricevuto/i %d risultato/i"; /* Dialog boxes */ "Add music files..." = "Aggiungi file musicali..."; "Add a music folder..." = "Aggiungi una directory di musica..."; "Save playlist as..." = "Salva elenco brani come..."; /* Song names */ "[not found: %@]" = "[non trovato: %@]"; "[unknown format: %@]" = "[formato sconosciuto: %@]"; "[format error: %@]" = "[errore di formato: %@]"; /* Preference dialog */ "None" = "Niente"; "Preferences" = "Propriet"; "General" = "Generale"; /* General preferences */ "Windows" = "Finestre"; "Playlists" = "Elenco brani"; "Use absolute filenames" = "Usa nomi di file assoluti"; "Output module" = "Modulo d'uscita"; "Textured" = "Look and feel metallico"; "Sticky" = "Attacca"; "Remember location" = "Ricorda posizione"; "Format" = "Formato"; /* MB results panel */ "Please select the correct information..." = "Selezionare l'informazion corretta..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "La richiesta al server MusicBrainz ha restituito pi di un risultato.\nSelezionare la riga pi accurata nella tabella seguente."; "Cancel" = "Annulla"; cynthiune.app-0.9.5/Italian.lproj/InfoPlist.strings0000644000175000017500000000160610375350155021711 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/Spanish.lproj/0000755000175000017500000000000010413173130016375 5ustar gurkangurkancynthiune.app-0.9.5/Spanish.lproj/Localizable.strings0000644000175000017500000001577410345630663022264 0ustar gurkangurkan/* Pablo Di Noto <pdinoto@conectividad.com.ar> */ /* Application menu */ "Info" = "Informacin"; "Playlist" = "Lista de reproduccin"; "Songs" = "Canciones"; "Player" = "Reproductor"; "Windows" = "Ventanas"; "Window" = "Ventana"; "Tools" = "Herramientas"; "Services" = "Servicios"; "Hide" = "Ocultar"; "Hide Cynthiune" = "Ocultar Cynthiune"; "Hide Others" = "Ocultar otros"; "Show All" = "Mostrar todo"; "Quit" = "Salir"; "Quit Cynthiune" = "Salir de Cynthiune"; /* Info submenu */ "Info Panel..." = "Panel de informacin..."; "About Cynthiune..." = "Acerca de Cynthiune..."; "Preferences..." = "Preferencias..."; "Send A Bug Report..." = "Enviar un reporte de error"; "Help..." = "Ayuda..."; "Help" = "Ayuda"; "Cynthiune Help" = "Ayuda sobre Cynthiune"; /* Playlist submenu */ "Open..." = "Abrir..."; "New" = "Nuevo"; "Save..." = "Guardar..."; "Save As..." = "Guardar como..."; "Save To..." = "Guardar a..."; "Revert To Saved" = "Volver a lo guardado"; "Close" = "Cerrar"; /* Songs submenu */ "Add Songs..." = "Agregar canciones..."; "Remove Selection" = "Remover seleccin"; "Remove All" = "Remover todo"; "Cleanup" = "Limpiar"; /* Player submenu */ "Play" = "Reproducir"; "Pause" = "Pausa"; "Stop" = "Detener"; "Previous" = "Anterior"; "Next" = "Siguiente"; "Mode" = "Modo"; /* Player/Mode submenu */ "Repeat" = "Repetir"; "Shuffle" = "Mezclar"; /* Tools submenu */ "Song Inspector..." = "Inspector de canciones..."; /* Windows submenu */ "Arrange In Front" = "Traer al frente"; "Miniaturize Window" = "Minimizar ventana"; "Minimize" = "Minimizar"; "Close Window" = "Cerrar ventana"; /* Playlist status label */ "%d songs - total time: %@" = "%d canciones - Tiempo total: %@"; " - selection: %@" = " - seleccin: %@"; /* Playlist table */ "Song" = "Cancin"; "Time" = "Tiempo"; /* Song Inspector */ "Song Inspector" = "Inspector de cancin"; "Song Information" = "Informacin de la cancin"; "Format Attributes" = "Atributos de formato"; "No song selected" = "No hay cancin seleccionada"; "Lookup through MusicBrainz..." = "Buscar usando MusicBrainz..."; "Title" = "Ttulo"; "Album" = "lbum"; "Track" = "Pista"; "Artist" = "Artista"; "Genre" = "Gnero"; "Year" = "Ao"; "Reset" = "Reiniciar"; "Save" = "Guardar"; "Generating TRM..." = "Generando TRM..."; "Querying MusicBrainz server..." = "Consultando servidor MusicBrainz..."; "Received %d result(s)" = "%d resultado(s) recibido(s)"; /* Dialog boxes */ "Add music files..." = "Agregar archivos de msica..."; "Add a music folder..." = "Agregar carpeta de msica..."; "Save playlist as..." = "Guardar lista de reproduccin como..."; /* Song names */ "[not found: %@]" = "[no encontrado: %@]"; "[unknown format: %@]" = "[formato desconocido: %@]"; "[format error: %@]" = "[error de formato: %@]"; /* Preference dialog */ "None" = "Ninguno"; "Preferences" = "Preferencias"; "General" = "General"; /* General preferences */ "Windows" = "Ventanas"; "Playlists" = "Listas de reproduccin"; "Use absolute filenames" = "Usar nombres absolutos"; "Output module" = "Mdulo de salida"; "Textured" = "Textura"; "Sticky" = "Pegagoso"; "Remember location" = "Recordar ubicacin"; "Format" = "Format"; /* MB results panel */ "Please select the correct information..." = "Por favor seleccione la informacin correcta..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "La consulta al servidor de MusicBrainz devolvi ms de un resultado.\nPor favor elija la lnea ms precisa de la siguiente lista."; "Cancel" = "Cancel"; cynthiune.app-0.9.5/Spanish.lproj/InfoPlist.strings0000644000175000017500000000160610375350156021736 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/InfoDisplayController.m0000644000175000017500000001064710375153100020320 0ustar gurkangurkan/* InfoDisplayController.m - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import "CynthiuneFadingTextField.h" #import "FormatTester.h" #import "InfoDisplayController.h" #import "Song.h" #define LOCALIZED(X) NSLocalizedString (X, nil) @implementation InfoDisplayController : NSObject - (void) initializeWidgets { NSFont *myFont; myFont = [NSFont boldSystemFontOfSize: 12.0]; [songTitleField setFont: myFont]; myFont = [NSFont systemFontOfSize: 12.0]; [songTimerField setFont: myFont]; [songNumberField setFont: myFont]; [songArtistField setFont: myFont]; [songAlbumField setFont: myFont]; [splashImage setImage: [NSImage imageNamed: @"cynthiune-splash"]]; [songTitleField setSelectable: NO]; [songNumberField setSelectable: NO]; [songArtistField setSelectable: NO]; [songAlbumField setSelectable: NO]; [songTitleField setStringValue: @""]; [songTimerField setStringValue: @""]; [songNumberField setStringValue: @""]; [songArtistField setStringValue: @""]; [songAlbumField setStringValue: @""]; } - (id) init { if ((self = [super init])) { hideTimer = nil; reverseTimer = NO; totalTime = 0; } return self; } - (void) show { if (hideTimer) { [hideTimer invalidate]; hideTimer = nil; } else { [splashImage setImage: [NSImage imageNamed: @"cynthiune-splash-faded"]]; [songTitleField setSelectable: YES]; [songNumberField setSelectable: YES]; [songArtistField setSelectable: YES]; [songAlbumField setSelectable: YES]; } } - (void) _reallyHide { [songTimerField setStringValue: @""]; [splashImage setImage: [NSImage imageNamed: @"cynthiune-splash"]]; [songTitleField setSelectable: NO]; [songNumberField setSelectable: NO]; [songArtistField setSelectable: NO]; [songAlbumField setSelectable: NO]; hideTimer = nil; } - (void) hide { float hideInterval; [songTitleField setStringValue: @""]; [songNumberField setStringValue: @""]; [songArtistField setStringValue: @""]; [songAlbumField setStringValue: @""]; if (hideTimer) [hideTimer invalidate]; hideInterval = ([songTitleField interval] * [songTitleField numberOfIterations]); hideTimer = [NSTimer scheduledTimerWithTimeInterval: hideInterval target: self selector: @selector (_reallyHide) userInfo: nil repeats: NO]; [hideTimer explode]; } - (void) updateInfoFieldsFromSong: (Song *) aSong { NSString *title; title = [aSong title]; if ([title isEqualToString: @""]) title = [NSString stringWithFormat: @"[%@]", [aSong filename]]; [songArtistField setStringValue: [aSong artist]]; [songAlbumField setStringValue: [aSong album]]; [songTitleField setStringValue: title]; [songNumberField setStringValue: [aSong trackNumber]]; totalTime = [[aSong duration] unsignedIntValue]; } - (void) setReverseTimer: (BOOL) reversed { reverseTimer = reversed; } - (BOOL) timerIsReversed { return reverseTimer; } - (void) _setTimerFromUnsignedInt: (unsigned int) timer { NSNumber *seconds; seconds = [NSNumber numberWithUnsignedInt: timer]; [songTimerField setStringValue: [seconds timeStringValue]]; } - (void) setTimerFromSeconds: (unsigned int) seconds { [self _setTimerFromUnsignedInt: ((reverseTimer) ? totalTime - seconds : seconds)]; } @end cynthiune.app-0.9.5/PreferencesController.m0000644000175000017500000001157710257422511020347 0ustar gurkangurkan/* PreferencesController.m - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import "CynthiunePopUpButton.h" #import "GeneralPreference.h" #import "PreferencesController.h" #define LOCALIZED(X) NSLocalizedString (X, nil) @implementation PreferencesController : NSObject + (PreferencesController *) preferencesController { static PreferencesController *singleton = nil; if (!singleton) singleton = [self new]; return singleton; } - (PreferencesController *) init { if ((self = [super init])) { currentView = nil; windowIsVisible = NO; preferenceList = [NSMutableArray new]; [preferenceList addObject: [GeneralPreference class]]; } return self; } - (void) registerPreferenceClass: (Class) aClass { if ([aClass conformsToProtocol: @protocol(Preference)] && ![preferenceList containsObject: aClass]) [preferenceList addObject: aClass]; } - (void) _setupMenuEntries { Class currentClass; id instance; int count, max; [bundleSelector removeAllItems]; max = [preferenceList count]; if (max) for (count = 0; count < max; count++) { currentClass = [preferenceList objectAtIndex: count]; instance = [currentClass instance]; [bundleSelector addItemWithTitle: [instance preferenceTitle]]; } else [bundleSelector addItemWithTitle: LOCALIZED (@"None")]; } - (void) loadPreferencesWindow { Class bundleClass; if (!windowIsVisible) { [NSBundle loadNibNamed: @"Preferences" owner: self]; [self _setupMenuEntries]; bundleClass = [preferenceList objectAtIndex: 0]; [self setBundleClass: bundleClass]; [bundleSelector sizeToFit]; [bundleSelector centerViewHorizontally]; [prefsWindow setLevel: NSModalPanelWindowLevel]; [prefsWindow setTitle: LOCALIZED (@"Preferences")]; [prefsWindow center]; [prefsWindow orderWindow: NSWindowAbove relativeTo: [[NSApp mainWindow] windowNumber]]; [prefsWindow makeKeyAndOrderFront: self]; [prefsWindow setDelegate: self]; windowIsVisible = YES; } } - (void) loadPreferencesWindowAndSelectMenuEntry: (NSString *) entry { [self loadPreferencesWindow]; [bundleSelector selectItemWithTitle: entry]; } - (void) windowWillClose: (NSNotification *) aNotif { id instance; windowIsVisible = NO; instance = [currentBundleClass instance]; [instance save]; } - (void) setBundleClass: (Class) aClass { NSView *prefsView; id instance; instance = [aClass instance]; prefsView = [instance preferenceSheet]; [self setBundleView: prefsView]; currentBundleClass = aClass; } - (void) bundleChanged: (id)sender { NSString *newTitle; Class bundleClass; id instance; newTitle = [sender titleOfSelectedItem]; [sender setTitle: newTitle]; [sender synchronizeTitleAndSelectedItem]; bundleClass = [preferenceList objectAtIndex: [sender indexOfSelectedItem]]; if (bundleClass != currentBundleClass) { instance = [currentBundleClass instance]; [instance save]; [self setBundleClass: bundleClass]; } } - (void) setBundleView: (id) bundlePrefsView { NSRect boxViewFrame, viewFrame; NSArray *subviews; NSView *contentView; contentView = [bundleViewBox contentView]; subviews = [contentView subviews]; if ([subviews count]) [[subviews objectAtIndex: 0] removeFromSuperview]; if (bundlePrefsView) { boxViewFrame = [contentView bounds]; viewFrame = [bundlePrefsView frame]; viewFrame.origin.x = (boxViewFrame.size.width - viewFrame.size.width) / 2; viewFrame.origin.y = (boxViewFrame.size.height - viewFrame.size.height) / 2; [bundlePrefsView setFrame: viewFrame]; [contentView addSubview: bundlePrefsView]; } [bundleViewBox setNeedsDisplay: YES]; } @end cynthiune.app-0.9.5/PlaylistController.h0000644000175000017500000000621510412163323017667 0ustar gurkangurkan/* PlaylistController.h - this file is part of Cynthiune * * Copyright (C) 2002-2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PlaylistController_H #define PlaylistController_H @class NSTimer; @class NSToolbar; @class InfoDisplayController; @class CynthiuneController; @class Player; @class Playlist; @class PlaylistViewController; @class Song; @class SongInspectorController; @interface PlaylistController : NSObject { id previousButton; id playButton; id pauseButton; id stopButton; id ejectButton; id nextButton; id addButton; id removeButton; // id removeAllButton; id cleanupButton; // id saveButton; id saveAsButton; id songInspectorButton; id repeatButton; id shuffleButton; id repeatMenuItem; id shuffleMenuItem; id songInspectorMenuItem; id timerButton; id progressSlider; id playlistStatusLabel; // id drawer; /* non-ui */ InfoDisplayController *infoDisplayController; PlaylistViewController *playlistViewController; SongInspectorController *songInspectorController; Player *player; NSTimer *timer; Playlist *playlist; NSString *playlistFilename; Song *currentPlayerSong; Song *notifiedFirstSong; BOOL repeat; } /* player console */ - (void) previousSong: (id) sender; - (void) startPlayer: (id) sender; - (void) pausePlayer: (id) sender; - (void) stopPlayer: (id) sender; - (void) nextSong: (id) sender; - (void) eject: (id) sender; - (void) songCursorChange: (id) sender; - (void) changeTimeDisplay: (id) sender; - (void) toggleRepeat: (id) sender; - (void) toggleShuffle: (id) sender; - (void) toggleSongInspector: (id) sender; /* menu actions */ - (void) addSongs: (id) sender; - (void) removeSelectedSongs: (id) sender; - (void) removeAllSongs: (id) sender; - (void) cleanupPlaylist: (id) sender; - (void) saveList: (id) sender; - (void) saveListAs: (id) sender; /* interface for CynthiuneController */ - (void) initializeWidgets; - (NSToolbar *) playlistToolbar; - (void) addSongFromNSApp: (id) sender; - (void) openSongFromNSApp: (NSString *) songFilename; - (id) validRequestorForSendType: (NSString *) sendType returnType: (NSString *) returnType; - (void) savePlayerState; /* interface for PlaylistViewController */ - (void) tableDoubleClick: (int) row; - (void) tableFilenamesDropped: (NSArray *) filenames; - (void) updateStatusLabel; - (void) updateSongInspector; @end #endif /* PlaylistController_H */ cynthiune.app-0.9.5/CynthiuneSongTitleCell.h0000644000175000017500000000240410202703142020411 0ustar gurkangurkan/* CynthiuneSongTitleCell.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNESONGTITLECELL_H #define CYNTHIUNESONGTITLECELL_H @interface CynthiuneSongTitleCell : CynthiuneTextCell { NSImage *songPointer; NSSize imageSize; BOOL imageShown; } - (void) setPointerImage: (NSImage *) pointerImage; - (NSImage *) pointerImage; - (void) setShowImage: (BOOL) showImage; - (BOOL) showImage; @end #endif /* CYNTHIUNESONGTITLECELL_H */ cynthiune.app-0.9.5/CynthiuneTextCell.m0000644000175000017500000000564010407725602017453 0ustar gurkangurkan/* CynthiuneTextCell.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "CynthiuneTextCell.h" @implementation CynthiuneTextCell : NSTextFieldCell - (id) init { if ((self = [super init])) { highlightColor = nil; } return self; } - (void) dealloc { if (highlightColor) [highlightColor release]; [super dealloc]; } - (void) setHighlightColor: (NSColor *) color { SET (highlightColor, color); } - (NSColor *) highlightColor { return highlightColor; } - (NSColor*) highlightColorWithFrame: (NSRect) cellFrame inView: (NSView *) controlView { return highlightColor; } #ifdef GNUSTEP /* GNUSTEP is buggy so we work around */ - (void) drawWithFrame: (NSRect) cellFrame inView: (NSView *) controlView { BOOL drawsBackground, isHighlighted; drawsBackground = [self drawsBackground]; isHighlighted = [self isHighlighted]; if (isHighlighted) { if (drawsBackground) { [[self backgroundColor] set]; NSRectFill (cellFrame); [self setDrawsBackground: NO]; } [[self highlightColor] set]; NSRectFill (cellFrame); } [super drawWithFrame: cellFrame inView: controlView]; if (drawsBackground && isHighlighted) [self setDrawsBackground: YES]; } #endif /* NSCopying protocol */ - (id) copyWithZone: (NSZone *) theZone { CynthiuneTextCell *newTextCell; newTextCell = [[CynthiuneTextCell allocWithZone: theZone] init]; [newTextCell setHighlightColor: highlightColor]; return newTextCell; } /* NSCoding protocol */ - (void) encodeWithCoder: (NSCoder *) encoder { [super encodeWithCoder: encoder]; [encoder encodeObject: highlightColor forKey: @"highlightColor"]; } - (id) initWithCoder: (NSCoder *) decoder { if ((self = [super initWithCoder: decoder])) { if (highlightColor) [highlightColor release]; highlightColor = [decoder decodeObjectForKey: @"highlightColor"]; if (highlightColor) [highlightColor retain]; } return self; } @end cynthiune.app-0.9.5/main.m0000644000175000017500000000174110412222431014746 0ustar gurkangurkan/* main.m - this file is part of Cynthiune * * Copyright (C) 2002, 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import int main (int argc, const char *argv[]) { return NSApplicationMain (argc, argv); } cynthiune.app-0.9.5/PlaylistViewController.h0000644000175000017500000000361110412162035020516 0ustar gurkangurkan/* PlaylistViewController.h - this file is part of Cynthiune * * Copyright (C) 2002-2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PlaylistViewController_H #define PlaylistViewController_H @class NSArray; @class NSNumber; @class NSObject; @class NSString; @class NSNotificationCenter; @class Playlist; @class PlaylistController; @class Song; @interface PlaylistViewController : NSObject { Playlist *playlist; PlaylistController *playlistController; id playlistView; // table view /* sorting */ NSString *sortColumn; NSComparisonResult sortDirection; /* current song pointer */ Song *currentPlayerSong; } - (id) init; - (void) setPlaylistController: (PlaylistController *) controller; - (int) getFirstSelectedRow; - (Song *) getFirstSelectedSong; - (NSArray *) getSelectedSongs; - (NSArray *) getSelectedSongsAsFilenames; - (NSNumber *) durationOfSelection; - (void) selectSongsInArray: (NSArray *) array; - (void) invalidateSortedColumn; - (void) updateView; - (void) setPlaylist: (Playlist *) aPlaylist; - (void) setCurrentPlayerSong: (Song *) newSong; - (void) deselectAll; @end #endif /* PlaylistViewController_H */ cynthiune.app-0.9.5/DictionaryCoder.m0000644000175000017500000000601210320532727017112 0ustar gurkangurkan/* DictionaryCoder.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "DictionaryCoder.h" @implementation DictionaryCoder : NSCoder - (id) init { if ((self = [super init])) { dictionary = [[NSMutableDictionary alloc] init]; } return self; } - (void) dealloc { [dictionary release]; [super dealloc]; } - (void) encodeObject: (id) anObject forKey: (NSString *) aKey { [dictionary setObject: anObject forKey: aKey]; } - (void) encodeBool: (BOOL) aBool forKey: (NSString*) aKey { NSNumber *boolValue; boolValue = [NSNumber numberWithBool: aBool]; [dictionary setObject: boolValue forKey: aKey]; } - (void) encodeInt: (int) anInteger forKey: (NSString*) aKey { NSNumber *intValue; intValue = [NSNumber numberWithInt: anInteger]; [dictionary setObject: intValue forKey: aKey]; } - (void) encodeInt64: (int64_t) anInteger forKey: (NSString*) aKey { NSNumber *int64Value; int64Value = [NSNumber numberWithLongLong: anInteger]; [dictionary setObject: int64Value forKey: aKey]; } - (id) decodeObjectForKey: (NSString *) aKey { id object; if (aKey) object = [dictionary objectForKey: aKey]; else { object = nil; raiseException (@"'nil' key", @"nil 'key' parameter"); } return object; } - (BOOL) decodeBoolForKey: (NSString*) aKey { BOOL boolValue; if (aKey) boolValue = [[dictionary objectForKey: aKey] boolValue]; else { boolValue = NO; raiseException (@"'nil' key", @"nil 'key' parameter"); } return boolValue; } - (int) decodeIntForKey: (NSString*) aKey { int intValue; if (aKey) intValue = [[dictionary objectForKey: aKey] intValue]; else { intValue = -1; raiseException (@"'nil' key", @"nil 'key' parameter"); } return intValue; } - (int64_t) decodeInt64ForKey: (NSString*) aKey { int64_t int64Value; id object; if (aKey) { object = [dictionary objectForKey: aKey]; int64Value = ((object) ? [object longLongValue] : 0LL); } else { int64Value = -1; raiseException (@"'nil' key", @"nil 'key' parameter"); } return int64Value; } @end cynthiune.app-0.9.5/CynthiuneSliderCell.m0000644000175000017500000000466010407730424017750 0ustar gurkangurkan/* CynthiuneSliderCell.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "CynthiuneSliderCell.h" @implementation CynthiuneSliderCell : NSSliderCell - (id) init { if ((self = [super init])) { knobCell = [NSCell new]; } return self; } - (void) setEnabled: (BOOL) enabled { [super setEnabled: enabled]; [knobCell setImage: [NSImage imageNamed: ((enabled) ? @"slider-knob-enabled" : @"slider-knob-disabled")]]; } - (void) drawKnob: (NSRect) rect { [knobCell drawInteriorWithFrame: rect inView: [self controlView]]; } - (void) drawBarInside: (NSRect) cellFrame flipped: (BOOL) flipped; { NSRect rect; rect = cellFrame; [[NSColor controlShadowColor] set]; rect.size.width = 1; rect.size.height = 1; rect.origin.y += (cellFrame.size.height - 4) / 2 + 2; NSRectFill (rect); rect.origin.y += 1; NSRectFill (rect); rect.origin.x += 1; rect.size.width = cellFrame.size.width - 2; rect.origin.y++; NSRectFill (rect); [[NSColor highlightColor] set]; rect.origin.x = NSMaxX (cellFrame) - 1; rect.size.width = 1; rect.origin.y--; NSRectFill (rect); rect.origin.y--; NSRectFill (rect); rect.origin.x = NSMinX (cellFrame) + 1; rect.size.width = NSWidth (cellFrame) - 2; rect.origin.y--; NSRectFill (rect); } - (BOOL) isOpaque { return NO; } - (float) knobThickness { NSSize size; size = [[knobCell image] size]; return size.height; } @end cynthiune.app-0.9.5/GeneralPreference.m0000644000175000017500000002562210375017663017423 0ustar gurkangurkan/* GeneralPreference.m - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import "PreferencesController.h" #import "GeneralPreference.h" #define LOCALIZED(X) NSLocalizedString (X, nil) #ifdef __MACOSX__ #define defaultOutputBundle @"MacOSXPlayer" #else #ifdef __linux__ #define defaultOutputBundle @"OSS" #else #ifdef __WIN32__ #define defaultOutputBundle @"WaveOut" #else #define defaultOutputBundle @"Esound" #endif #endif #endif #define defaultPlaylistFormat @"m3u" @implementation GeneralPreference : NSObject + (id) instance { static GeneralPreference *singleton = nil; if (!singleton) singleton = [self new]; return singleton; } - (void) _initDefaults { NSString *outputBundle, *playlistFormat; NSNumber *windowsAreSticky, *saveWindowsInformation, *playlistReferenceType; NSMutableDictionary *windowsInformation; static BOOL initted = NO; #ifdef __MACOSX__ NSNumber *windowsAreTextured; #endif if (!initted) { outputBundle = [preference objectForKey: @"OutputBundle"]; if (!outputBundle || !([playersList containsObject: NSClassFromString (outputBundle)])) { outputBundle = defaultOutputBundle; [preference setObject: outputBundle forKey: @"OutputBundle"]; } playlistFormat = [preference objectForKey: @"PlaylistFormat"]; if (!playlistFormat || !([playlistFormat isEqualToString: @"m3u"] || [playlistFormat isEqualToString: @"pls"])) { playlistFormat = defaultPlaylistFormat; [preference setObject: playlistFormat forKey: @"PlaylistFormat"]; } playlistReferenceType = [preference objectForKey: @"AbsolutePlaylistReferences"]; if (!playlistReferenceType) { playlistReferenceType = [NSNumber numberWithBool: NO]; [preference setObject: playlistReferenceType forKey: @"AbsolutePlaylistReferences"]; } #ifdef __MACOSX__ windowsAreTextured = [preference objectForKey: @"TexturedWindows"]; if (!windowsAreTextured) { windowsAreTextured = [NSNumber numberWithBool: NO]; [preference setObject: windowsAreTextured forKey: @"TexturedWindows"]; } #endif windowsAreSticky = [preference objectForKey: @"StickyWindows"]; if (!windowsAreSticky) { windowsAreSticky = [NSNumber numberWithBool: YES]; [preference setObject: windowsAreSticky forKey: @"StickyWindows"]; } saveWindowsInformation = [preference objectForKey: @"SaveWindowsInformation"]; if (!saveWindowsInformation) { saveWindowsInformation = [NSNumber numberWithBool: YES]; [preference setObject: saveWindowsInformation forKey: @"SaveWindowsInformation"]; } windowsInformation = [preference objectForKey: @"WindowsInformation"]; if (!windowsInformation) { windowsInformation = [NSMutableDictionary dictionaryWithCapacity: 1]; [preference setObject: windowsInformation forKey: @"WindowsInformation"]; } initted = YES; } } - (GeneralPreference *) init { NSDictionary *tmpDict; if ((self = [super init])) { playersList = [NSMutableArray new]; tmpDict = [[NSUserDefaults standardUserDefaults] dictionaryForKey: @"GeneralPreference"]; preference = [NSMutableDictionary dictionaryWithDictionary: tmpDict]; [preference retain]; } return self; } - (void) save { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: preference forKey: @"GeneralPreference"]; [defaults synchronize]; } - (void) registerOutputClass: (Class) aClass { if ([aClass conformsToProtocol: @protocol(Output)]) { if (![playersList containsObject: aClass]) [playersList addObject: aClass]; } else NSLog (@"Class '%@' not conform to the 'Output' protocol...\n", NSStringFromClass (aClass)); } - (Class) preferredOutputClass { [self _initDefaults]; return NSClassFromString ([preference objectForKey: @"OutputBundle"]); } - (NSString *) preferredPlaylistFormat { [self _initDefaults]; return [preference objectForKey: @"PlaylistFormat"]; } - (BOOL) absolutePlaylistReferences { [self _initDefaults]; return [[preference objectForKey: @"AbsolutePlaylistReferences"] boolValue]; } #ifdef __MACOSX__ - (BOOL) windowsAreTextured { NSNumber *windowsAreTextured; [self _initDefaults]; windowsAreTextured = [preference objectForKey: @"TexturedWindows"]; return [windowsAreTextured boolValue]; } #endif - (BOOL) windowsAreSticky { NSNumber *windowsAreSticky; [self _initDefaults]; windowsAreSticky = [preference objectForKey: @"StickyWindows"]; return [windowsAreSticky boolValue]; } - (BOOL) saveWindowsInformation { NSNumber *saveWindowsInformation; saveWindowsInformation = [preference objectForKey: @"SaveWindowsInformation"]; return [saveWindowsInformation boolValue]; } - (void) saveInformation: (NSWindow *) aWindow forWindow: (NSString *) windowName { NSMutableArray *information; NSMutableDictionary *windowsInformation; NSString *frameString; windowsInformation = [preference objectForKey: @"WindowsInformation"]; information = [NSMutableArray arrayWithCapacity: 3]; frameString = [aWindow stringWithSavedFrame]; [information addObject: frameString]; [windowsInformation setObject: information forKey: windowName]; [self save]; } - (void) restoreInformation: (NSWindow *) aWindow forWindow: (NSString *) windowName { NSMutableDictionary *windowsInformation; NSString *frameString; NSArray *information; windowsInformation = [preference objectForKey: @"WindowsInformation"]; information = [windowsInformation objectForKey: windowName]; if (information) { frameString = [information objectAtIndex: 0]; [aWindow setFrameFromString: frameString]; } } // Preference protocol - (NSString *) preferenceTitle { return LOCALIZED (@"General"); } - (NSView *) preferenceSheet { NSView *aView; [NSBundle loadNibNamed: @"GeneralPreference" owner: self]; aView = [prefsWindow contentView]; [aView retain]; [aView removeFromSuperview]; [prefsWindow release]; [aView autorelease]; return aView; } - (void) _initializeSelector { int count, max; Class currentClass; [outputBundleSelector removeAllItems]; max = [playersList count]; if (max > 0) { for (count = 0; count < max; count++) { currentClass = [playersList objectAtIndex: count]; [outputBundleSelector addItemWithTitle: NSStringFromClass (currentClass)]; } } else [outputBundleSelector addItemWithTitle: LOCALIZED (@"None")]; [outputBundleSelector sizeToFit]; [outputBundleSelector centerViewHorizontally]; } - (void) awakeFromNib { NSString *outputBundle; NSString *playlistFormat; NSNumber *toggleBool; [self _initDefaults]; #ifdef __MACOSX__ [texturedWindowsToggle setTitle: LOCALIZED (@"Textured")]; #endif [stickyWinToggle setTitle: LOCALIZED (@"Sticky")]; [saveWindowsInformationToggle setTitle: LOCALIZED (@"Remember location")]; [windowsBox setTitle: LOCALIZED (@"Windows")]; [playlistsBox setTitle: LOCALIZED (@"Playlists")]; [playlistReferenceTypeToggle setTitle: LOCALIZED (@"Use absolute filenames")]; [outputModuleBox setTitle: LOCALIZED (@"Output module")]; [playlistsFormatLabel setStringValue: LOCALIZED (@"Format")]; [self _initializeSelector]; outputBundle = [preference objectForKey: @"OutputBundle"]; [outputBundleSelector selectItemWithTitle: outputBundle]; playlistFormat = [self preferredPlaylistFormat]; [playlistFormatSelector selectItemWithTitle: [playlistFormat uppercaseString]]; toggleBool = [preference objectForKey: @"AbsolutePlaylistReferences"]; [playlistReferenceTypeToggle setState: [toggleBool boolValue]]; #ifdef __MACOSX__ toggleBool = [preference objectForKey: @"TexturedWindows"]; [texturedWindowsToggle setState: [toggleBool boolValue]]; #endif toggleBool = [preference objectForKey: @"StickyWindows"]; [stickyWinToggle setState: [toggleBool boolValue]]; toggleBool = [preference objectForKey: @"SaveWindowsInformation"]; [saveWindowsInformationToggle setState: [toggleBool boolValue]]; } - (void) dealloc { [playersList release]; [preference release]; [super dealloc]; } /* as a target */ - (void) outputBundleChanged: (id) sender { NSString *newTitle; newTitle = [sender titleOfSelectedItem]; [sender setTitle: newTitle]; [sender synchronizeTitleAndSelectedItem]; [preference setObject: newTitle forKey: @"OutputBundle"]; } - (void) playlistFormatChanged: (id) sender { NSString *newTitle; newTitle = [sender titleOfSelectedItem]; [sender setTitle: newTitle]; [sender synchronizeTitleAndSelectedItem]; [preference setObject: [newTitle lowercaseString] forKey: @"PlaylistFormat"]; } - (void) playlistReferenceTypeChanged: (id) sender { [preference setObject: [NSNumber numberWithBool: [sender state]] forKey: @"AbsolutePlaylistReferences"]; } #ifdef __MACOSX__ - (void) texturedWindowsChanged: (id) sender { [preference setObject: [NSNumber numberWithBool: [sender state]] forKey: @"TexturedWindows"]; } #endif - (void) stickyWindowsChanged: (id) sender { [preference setObject: [NSNumber numberWithBool: [sender state]] forKey: @"StickyWindows"]; } - (void) saveWindowsInformationChanged: (id) sender { [preference setObject: [NSNumber numberWithBool: [sender state]] forKey: @"SaveWindowsInformation"]; } @end cynthiune.app-0.9.5/M3UArchiver.h0000644000175000017500000000264210314672146016123 0ustar gurkangurkan/* M3UArchiver.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef M3UARCHIVER_H #define M3UARCHIVER_H #import "PlaylistArchiver.h" @class NSArray; @class NSString; @interface M3UArchiver : PlaylistArchiver + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute; @end @interface M3UUnarchiver : PlaylistUnarchiver + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory; @end #endif /* M3UARCHIVER_H */ cynthiune.app-0.9.5/M3UArchiver.m0000644000175000017500000000626310355003216016122 0ustar gurkangurkan/* M3UArchiver.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import "DictionaryCoder.h" #import "M3UArchiver.h" @implementation M3UArchiver : PlaylistArchiver + (NSString *) fileContentFromDictionaries: (NSArray *) dictionaries inReferenceDirectory: (NSString *) directory withAbsoluteFilenameReferences: (BOOL) absolute { DictionaryCoder *coder; NSString *filename; NSMutableString *ctString; NSEnumerator *enumerator; ctString = [NSMutableString stringWithString: @"#EXTM3U\r\n"]; enumerator = [dictionaries objectEnumerator]; coder = [enumerator nextObject]; while (coder) { filename = [coder decodeObjectForKey: @"filename"]; if (!absolute) filename = [directory relativePathFromDirectoryToFile: filename]; [ctString appendFormat: @"#EXTINF:%@,%@\r\n%@\r\n", [coder decodeObjectForKey: @"duration"], [coder decodeObjectForKey: @"playlistRepresentation"], filename]; coder = [enumerator nextObject]; } return ctString; } @end @implementation M3UUnarchiver : PlaylistUnarchiver + (NSArray *) _fileListFromLines: (NSArray *) arrayOfLines inReferenceDirectory: (NSString *) directory { NSMutableArray *filelist; NSEnumerator *lines; NSString *currLine, *newString; filelist = [NSMutableArray new]; [filelist autorelease]; lines = [arrayOfLines objectEnumerator]; currLine = [lines nextObject]; while (currLine) { if (![currLine hasPrefix: @"#"] && [currLine length]) { newString = [NSString stringWithString: currLine]; if (![newString isAbsolutePath]) newString = [directory stringByAppendingPathComponent: newString]; newString = [newString stringByStandardizingPath]; [filelist addObject: newString]; } currLine = [lines nextObject]; } return filelist; } + (NSArray *) dictionariesFromFileContent: (NSString *) content inReferenceDirectory: (NSString *) directory { NSArray *files; files = [self _fileListFromLines: [content linesFromFileContent] inReferenceDirectory: directory]; return [self dictionariesFromFilenames: files]; } @end cynthiune.app-0.9.5/PlaylistViewController.m0000644000175000017500000004471010412162123020526 0ustar gurkangurkan/* PlaylistViewController.m - this file is part of Cynthiune * * Copyright (C) 2002-2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import #import "CynthiuneHeaderCell.h" #import "CynthiuneTextCell.h" #import "CynthiuneSongTitleCell.h" #import "Playlist.h" #import "PlaylistController.h" #import "PlaylistViewController.h" #import "PlaylistView.h" #import "Song.h" #import "FormatTester.h" #define LOCALIZED(X) NSLocalizedString (X, nil) static NSString *CynthiunePlaylistDragType = @"CynthiunePlaylistDragType"; @implementation PlaylistViewController : NSObject - (id) init { if ((self = [super init])) { currentPlayerSong = nil; sortColumn = @""; sortDirection = NSOrderedSame; } return self; } - (void) setCurrentPlayerSong: (Song *) newSong { currentPlayerSong = newSong; [self updateView]; } /* nib and gui init stuff... */ - (float) _timeColumnWidth { NSTableColumn *column; float labelWidth, zeroesWidth; column = [playlistView tableColumnWithIdentifier: @"time"]; labelWidth = [[column headerCell] widthOfText: LOCALIZED (@"Time")]; zeroesWidth = [[column dataCell] widthOfText: @"00:00"]; return ((labelWidth > zeroesWidth) ? labelWidth : zeroesWidth); } - (void) _deleteAllColumns { NSArray *columns; int count, max; columns = [playlistView tableColumns]; max = [playlistView numberOfColumns]; for (count = 0; count < max; count++) { #ifdef __MACOSX__ [playlistView removeTableColumn: [columns objectAtIndex: 0]]; #else [playlistView removeTableColumn: [columns objectAtIndex: count]]; #endif /* __MACOSX__ */ } } - (NSTableColumn *) _tableColumnWithIdentifier: (NSString *) identifier andTitle: (NSString *) title titleAlignment: (NSTextAlignment) alignment resizable: (BOOL) resizable { NSTableColumn *column; CynthiuneHeaderCell *headerCell; column = [[NSTableColumn alloc] initWithIdentifier: identifier]; [column retain]; headerCell = [CynthiuneHeaderCell new]; [column setHeaderCell: headerCell]; [column setEditable: NO]; [column setResizable: resizable]; [headerCell setStringValue: title]; [headerCell setAlignment: alignment]; if ([sortColumn isEqualToString: identifier]) [headerCell setComparisonResult: sortDirection]; [column sizeToFit]; return column; } - (void) _addNeededColumns { NSTableColumn *column; CynthiuneTextCell *songTimeCell; CynthiuneSongTitleCell *songTitleCell; NSColor *highlightColor; highlightColor = [NSColor rowsHighlightColor]; songTitleCell = [CynthiuneSongTitleCell new]; [songTitleCell setDrawsBackground: YES]; [songTitleCell setHighlightColor: highlightColor]; [songTitleCell setPointerImage: [NSImage imageNamed: @"song-pointer"]]; songTimeCell = [CynthiuneTextCell new]; [songTimeCell setDrawsBackground: YES]; [songTimeCell setHighlightColor: highlightColor]; [songTimeCell setAlignment: NSRightTextAlignment]; column = [self _tableColumnWithIdentifier: @"song" andTitle: LOCALIZED (@"Song") titleAlignment: NSCenterTextAlignment resizable: YES]; [column setDataCell: songTitleCell]; [playlistView addTableColumn: column]; column = [self _tableColumnWithIdentifier: @"time" andTitle: LOCALIZED (@"Time") titleAlignment: NSLeftTextAlignment resizable: NO]; [column setDataCell: songTimeCell]; [playlistView addTableColumn: column]; } - (void) _updateColumnHeaders { NSTableColumn *column; NSEnumerator *columnEnumerator; id headerCell; columnEnumerator = [[playlistView tableColumns] objectEnumerator]; column = [columnEnumerator nextObject]; while (column) { headerCell = [column headerCell]; if ([[column identifier] isEqualToString: sortColumn]) [headerCell setComparisonResult: sortDirection]; else [headerCell setComparisonResult: NSOrderedSame]; column = [columnEnumerator nextObject]; } [[playlistView headerView] setNeedsDisplay: YES]; } - (void) _restoreSortOrder { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; sortColumn = [defaults stringForKey: @"PlaylistSortColumn"]; [sortColumn retain]; sortDirection = [defaults integerForKey: @"PlaylistSortDirection"] - 1; } - (void) _saveSortOrder { NSUserDefaults *defaults; defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject: sortColumn forKey: @"PlaylistSortColumn"]; [defaults setInteger: (sortDirection + 1) forKey: @"PlaylistSortDirection"]; } - (void) invalidateSortedColumn { SET (sortColumn, @""); [self _saveSortOrder]; [self _updateColumnHeaders]; } - (void) awakeFromNib { [self _restoreSortOrder]; [self _deleteAllColumns]; [self _addNeededColumns]; [[playlistView window] setInitialFirstResponder: playlistView]; [playlistView setIntercellSpacing: NSMakeSize (0.0, 0.0)]; [playlistView setAllowsColumnResizing: NO]; [playlistView setAutoresizesAllColumnsToFit: NO]; [playlistView setAllowsEmptySelection: YES]; [playlistView setAllowsMultipleSelection: YES]; [playlistView setAllowsColumnSelection: NO]; [playlistView setVerticalMotionCanBeginDrag: YES]; [playlistView registerForDraggedTypes: [NSArray arrayWithObjects: NSFilenamesPboardType, CynthiunePlaylistDragType, nil]]; [playlistView setDataSource: self]; [playlistView setTarget: self]; [playlistView setDelegate: self]; [playlistView setDoubleAction: @selector(doubleClick:)]; [playlistView sizeToFit]; [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(scrollViewDidResize:) name: NSViewFrameDidChangeNotification object: [[playlistView superview] superview]]; } - (void) setPlaylistController: (PlaylistController *) controller { playlistController = controller; } - (void) doubleClick: (id) sender { int clickedRow; clickedRow = [playlistView clickedRow]; if (clickedRow > -1) [playlistController tableDoubleClick: clickedRow]; } /* FIXME: this method should be removed and the logic behind it rearranged so that we deal directly with the selection in the PlaylistView class */ - (void) selectSongsInArray: (NSArray *) array { unsigned int count, max; Song *currentSong; max = [array count]; for (count = 0; count < max; count++) { currentSong = [array objectAtIndex: count]; [playlistView selectRow: [playlist indexOfSong: currentSong] byExtendingSelection: YES]; } } - (void) _sortPlaylist { NSArray *selectedSongs; selectedSongs = [self getSelectedSongs]; [playlistView deselectAll: self]; if ([sortColumn isEqualToString: @"song"]) [playlist sortByPlaylistRepresentation: (sortDirection == NSOrderedDescending)]; else if ([sortColumn isEqualToString: @"time"]) [playlist sortByDuration: (sortDirection == NSOrderedDescending)]; [self selectSongsInArray: selectedSongs]; [self _saveSortOrder]; [self _updateColumnHeaders]; } - (void) tableView: (NSTableView *) tableView mouseDownInHeaderOfTableColumn: (NSTableColumn *) tableColumn; { NSString *colId; if ([playlist numberOfSongs] > 1) { colId = [tableColumn identifier]; if ([colId isEqualToString: sortColumn]) { if (sortDirection == NSOrderedAscending) sortDirection = NSOrderedDescending; else sortDirection = NSOrderedAscending; } else { SET (sortColumn, colId); sortDirection = NSOrderedAscending; } [self _sortPlaylist]; } } - (void) playlistViewActivateSelection: (PlaylistView *) view { [playlistController playlistViewActivateSelection: view]; } - (void) playlistViewDeleteSelection: (PlaylistView *) view { [playlistController removeSelectedSongs: view]; } /* datasource protocol */ - (int) numberOfRowsInTableView: (NSTableView *) tableView { return [playlist numberOfSongs]; } - (NSString *) _bestFit: (NSString *) string forColumn: (NSTableColumn *) column { NSMutableString *newString; NSCell *dataCell; float stringWidth, width; unsigned int length; newString = [NSMutableString stringWithString: string]; dataCell = [column dataCell]; width = [column width]; stringWidth = [dataCell widthOfText: newString]; length = [newString length]; while (length > 3 && (stringWidth > width || [newString hasSuffix: @" ..."])) { [newString replaceCharactersInRange: NSMakeRange (length - 4, 4) withString: @"..."]; stringWidth = [dataCell widthOfText: newString]; length = [newString length]; } return newString; } - (id) tableView: (NSTableView *) tableView objectValueForTableColumn: (NSTableColumn *) tableColumn row: (int) rowIndex { NSString *cellContent, *colId; Song *song; cellContent = @""; colId = [tableColumn identifier]; if (colId) { song = [playlist songAtIndex: rowIndex]; if (!song) NSLog (@"no song at index %d", rowIndex); if ([colId isEqualToString: @"song"]) cellContent = [self _bestFit: [song playlistRepresentation] forColumn: tableColumn]; else if ([colId isEqualToString: @"time"]) cellContent = [[song duration] timeStringValue]; else NSLog (@"unexpected column id: %@", colId); } return cellContent; } - (void) tableView: (NSTableView *) tableView willDisplayCell: (id) cell forTableColumn: (NSTableColumn *) tableColumn row: (int) rowIndex { Song *rowSong; rowSong = [playlist songAtIndex: rowIndex]; #ifdef GNUSTEP /* GNUSTEP is buggy so we work-around */ [cell setHighlighted: [tableView isRowSelected: rowIndex]]; #endif [cell setBackgroundColor: ((rowIndex % 2 == 0) ? [NSColor evenRowsBackgroundColor] : [NSColor oddRowsBackgroundColor])]; [cell setTextColor: (([rowSong status] == SongOK) ? [NSColor controlTextColor] : [NSColor disabledControlTextColor])]; if ([[tableColumn identifier] isEqualToString: @"song"]) [cell setShowImage: (currentPlayerSong && currentPlayerSong == rowSong)]; } - (BOOL) tableView: (NSTableView *) tableView writeRows: (NSArray *) rows toPasteboard: (NSPasteboard*) pboard { NSArray *types; BOOL accept; unsigned int count; count = [rows count]; if (count > 0) { accept = YES; types = [NSArray arrayWithObjects: CynthiunePlaylistDragType, NSFilenamesPboardType, nil]; [pboard declareTypes: types owner: self]; [pboard setPropertyList: rows forType: CynthiunePlaylistDragType]; } else accept = NO; return accept; } - (void) pasteboard: (NSPasteboard *) pboard provideDataForType: (NSString *) type { if ([type isEqualToString: NSFilenamesPboardType]) [pboard setPropertyList: [self getSelectedSongsAsFilenames] forType: NSFilenamesPboardType]; else NSLog (@"unexpected type: %@", type); } /* drag and drop */ - (BOOL) _acceptFilesInPasteboard: (NSPasteboard *) pboard { NSArray *filesList; NSString *filename; FormatTester *formatTester; BOOL accept; unsigned int count, max; filesList = [pboard propertyListForType: NSFilenamesPboardType]; accept = NO; count = 0; max = [filesList count]; formatTester = [FormatTester formatTester]; while (count < max && !accept) { filename = [filesList objectAtIndex: count]; accept = (!fileIsAReadableDirectory (filename) && [formatTester formatNumberForFile: filename] > -1); count++; } return accept; } - (NSDragOperation) tableView: (NSTableView *) tableView validateDrop: (id ) info proposedRow: (int) row proposedDropOperation: (NSTableViewDropOperation) dropOperation { NSString *availableType, *requiredType; NSPasteboard *pboard; NSDragOperation dragOperation; unsigned int mask; pboard = [info draggingPasteboard]; if ([info draggingSource] == playlistView) { requiredType = CynthiunePlaylistDragType; mask = [info draggingSourceOperationMask]; if ((mask & NSDragOperationMove) == NSDragOperationMove) dragOperation = NSDragOperationMove; else if ((mask & NSDragOperationGeneric) == NSDragOperationGeneric) dragOperation = NSDragOperationGeneric; else dragOperation = NSDragOperationNone; } else { requiredType = NSFilenamesPboardType; dragOperation = NSDragOperationCopy; } availableType = [pboard availableTypeFromArray: [NSArray arrayWithObject: requiredType]]; if (availableType && [availableType isEqualToString: requiredType]) [tableView setDropRow: row dropOperation: NSTableViewDropAbove]; else dragOperation = NSDragOperationNone; return dragOperation; } - (void) _acceptDroppedFiles: (NSArray *) filenames atRow: (int) row { [playlistController tableFilenamesDropped: filenames]; } - (void) _acceptDroppedRows: (NSArray *) aRowsList atRow: (int) row withMask: (unsigned int) mask { unsigned int firstRow, max, count; if (mask & NSDragOperationMove) { firstRow = [playlist moveSongsAtIndexes: aRowsList toIndex: row]; [playlistView selectRow: firstRow byExtendingSelection: NO]; max = [aRowsList count]; for (count = 1; count < max; count++) [playlistView selectRow: (firstRow + count) byExtendingSelection: YES]; } else if (mask & NSDragOperationGeneric) NSLog (@"operation %d not currently supported", mask); else NSLog (@"invalid operation '%d'!!", mask); } - (BOOL) tableView: (NSTableView *) tableView acceptDrop: (id ) info row: (int) row dropOperation: (NSTableViewDropOperation) op { NSPasteboard *pboard; NSArray *objectsList, *typeArray; NSString *availableType; BOOL accept; pboard = [info draggingPasteboard]; typeArray = ([info draggingSource] == playlistView) ? [NSArray arrayWithObject: CynthiunePlaylistDragType] : [NSArray arrayWithObject: NSFilenamesPboardType]; availableType = [pboard availableTypeFromArray: typeArray]; objectsList = [pboard propertyListForType: availableType]; if ([objectsList count]) { if ([availableType isEqualToString: CynthiunePlaylistDragType]) [self _acceptDroppedRows: objectsList atRow: row withMask: [info draggingSourceOperationMask]]; else [self _acceptDroppedFiles: objectsList atRow: row]; [self invalidateSortedColumn]; [playlistView reloadData]; accept = YES; } else accept = NO; return accept; } /* delegate */ - (void) tableViewSelectionIsChanging: (NSNotification *) notification { [playlistController updateStatusLabel]; } - (void) tableViewSelectionDidChange: (NSNotification *) notification { [playlistController updateSongInspector]; [playlistController updateStatusLabel]; } /* scrollView delegate */ - (void) scrollViewDidResize: (NSNotification *) notification { [playlistView sizeToFit]; } /* real methods */ - (int) getFirstSelectedRow { return ([playlist numberOfSongs] ? [playlistView selectedRow] : -1); } - (Song *) getFirstSelectedSong { int nbr; nbr = [self getFirstSelectedRow]; return ((nbr > -1) ? [playlist songAtIndex: nbr] : nil); } - (NSArray *) getSelectedSongs { NSMutableArray *selection; int count, max; selection = [NSMutableArray new]; [selection autorelease]; max = [playlistView numberOfRows]; for (count = 0; count < max; count++) if ([playlistView isRowSelected: count]) [selection addObject: [playlist songAtIndex: count]]; return selection; } - (NSArray *) getSelectedSongsAsFilenames { NSMutableArray *selection; Song *song; int count, max; if ([playlist numberOfSongs]) { max = [playlistView numberOfRows]; selection = [NSMutableArray arrayWithCapacity: max]; for (count = 0; count < max; count++) if ([playlistView isRowSelected: count]) { song = [playlist songAtIndex: count]; [selection addObject: [song filename]]; } } else selection = [NSMutableArray arrayWithObject: nil]; return selection; } - (NSNumber *) durationOfSelection { unsigned int count, max, intDuration; NSArray *selection; Song *currentSong; intDuration = 0; selection = [self getSelectedSongs]; max = [selection count]; for (count = 0; count < max; count++) { currentSong = [selection objectAtIndex: count]; intDuration += [[currentSong duration] unsignedIntValue]; } return [NSNumber numberWithUnsignedInt: intDuration]; } - (void) updateView { int currentSongNumber; if (currentPlayerSong) { currentSongNumber = [playlist indexOfSong: currentPlayerSong]; [playlistView scrollRowToVisible: currentSongNumber]; } [playlistView reloadData]; } - (void) setPlaylist: (Playlist *) aPlaylist { SET (playlist, aPlaylist); [self updateView]; } - (void) deselectAll { [playlistView deselectAll: self]; } @end cynthiune.app-0.9.5/CynthiuneWindow.h0000644000175000017500000000224110412073262017155 0ustar gurkangurkan/* CynthiuneWindow.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import @interface CynthiuneWindow : NSWindow { } #ifndef GNUSTEP - (id) initWithContentRect: (NSRect) contentRect styleMask: (unsigned int) styleMask backing: (NSBackingStoreType) bufferingType defer: (BOOL) flag; #endif @end cynthiune.app-0.9.5/ChangeLog0000644000175000017500000044336610413172616015445 0ustar gurkangurkan2006-03-31 Wolfgang Sourdeau * GNUmakefile: release 0.9.5. * Player.m ([Player -readNextChunk:bufferwithSize:bufferSize]): return 0 if the code returned was 0 or less. 2006-03-28 Wolfgang Sourdeau * PlaylistView.m ([PlaylistView -_selectionTopByExtendingIt:keep]) ([PlaylistView -_selectionBottomByExtendingIt:keep]): take selectionDir into account. * PlaylistController.m ([PlaylistController -updateStatusLabel]): made public. ([PlaylistController -toggleShuffle:sender]): shuffle also if currentPlayerSong is not set. Adapted to new (closer) relationship with PlaylistViewController. * PlaylistViewController.m: removed setDelegate:, replaced it with the more appropriate "setPlaylistController" since we know for sure there will be one. Removed all the custom notifications from this class and invoke directly some new methods from the playlistController. * CynthiuneController.m ([CynthiuneController -awakeFromNib]): set the playlistWindow as the next responder for the playerWindow. * PlaylistView.m ([PlaylistView -performKeyEquivalent:event]): overload this method instead of keyDown: which is "lower-level" and is not invoked when the key event occurs when the focus is on another widget. ([PlaylistView -_selectionUpByExtendingIt:keep]) ([PlaylistView -_selectionDownByExtendingIt:keep]) ([PlaylistView -_selectionTopByExtendingIt:keep]) ([PlaylistView -_selectionBottomByExtendingIt:keep]): invoke scrollRowToVisible: with the appropriate argument. * PlaylistController.m ([PlaylistController -playlistViewActivateSelection:view]): new method bound to the return key. ([PlaylistController -playlistViewDeleteSelection:view]): new method bound to the delete key. * PlaylistViewController.m ([PlaylistViewController -playlistViewActivateSelection:view]) ([PlaylistViewController -playlistViewDeleteSelection:view]): added proxy methods transferring the call to PlaylistController. * PlaylistView.m ([PlaylistView -keyDown:event]): moved the keyboard handling here, replacing the one previously in CynthiuneController. * PlaylistViewController.m ([PlaylistViewController -selectSongsInArray:array]): removed the "extend" parameter. 2006-03-24 Wolfgang Sourdeau * CynthiuneController.m ([CynthiuneController -keyPressed:event]): new method to fulfill the CynthiuneWindowDelegate protocol that handles known keypresses (the arrow keys + return + delete) before the responder API does it. * PlaylistController.m ([PlaylistController -selectPreviousSong:senderbyKeepingSelection:keep]) ([PlaylistController -selectNextSong:senderbyKeepingSelection:keep]): new method to manipulate the song selection in the playlist view externally. * PlaylistViewController.m ([PlaylistViewController -selectSongsInArray:arraybyExtendingSelection:extend]): added an "extend" parameter to this method to control whether the selection should be extended rather than implicitly doing it. * CynthiuneWindow.m ([CynthiuneWindow -keyDown:]): new subclass method to intercept keypresses before the API does. * SongInspectorController.m ([SongInspectorController -song]): new accessor method. * Song.m ([Song -_tagsClassesForProtocol:protocol]): method derived from its previous "_tagsClassForProtocol:" version. Now returning all the classes found as strings in an enumerator. ([Song -_refreshSongInfos]): walk all the classes returned by _tagsClassesForProtocol: until one is found and does not return NO on the reading operation. ([Song -setTitle:newTitleartist:newArtistalbum:newAlbumgenre:newGenretrackNumber:newTrackNumberyear:newYear]): same as above but for writing. * PlaylistController.m ([PlaylistController -cleanupPlaylist:sender]): if the song viewed in the song inspector is one of the invalid songs, stop viewing it. The repeat and shuffle buttons were removed from the toolbar and put on the player window instead, since those features really have to do with the player rather than with the playlist per se. 2006-03-22 Wolfgang Sourdeau * SongInspectorController.m ([SongInspectorController -lookupThread]): set the mb label to an empty string whenever an error occurs so the user doesn't keep waiting. * MBResultsPanel.m ([MBResultsPanel -_createTableView:contentView]): added a column for the track number. * SongInspectorController.m ([SongInspectorController -lookupThread]): add song metadata to the parameters of the mb query so that their server can maybe return a more accurate result. Also, ask mb to use UTF8. 2006-03-21 Wolfgang Sourdeau * Bundles/ID3Tag/ID3Tag.m: bundle now conform to the TagsWriting protocol. * Bundles/Musepack/CNSFileHandle.m (CNSFileHandleCanSeek) (CNSFileHandleSeek): those functions really should return an mpc_bool_t rather than a BOOL. * Bundles/Mod/Mod.m ([Mod -readNextChunk:bufferwithSize:bufferSize]): test the architecture endianness with cpp rather than at runtime. * Bundles/Musepack/Musepack.m ([Musepack -readNextChunk:bufferwithSize:bufferSize]): invoke invertBytesInBuffer on big endian architectures. * PlaylistView.[hm]: renamed module from PlaylistTableView. * Bundles/FLACTags/FLACTags.[hm]: new tags bundle for reading tags metadata from FLAC files. * Bundles/FLAC/FLAC.m: purge code that was there for tags reading, moved to FLACTags and modified. * PlaylistViewController.m ([PlaylistViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): don't do anything with the sort order if the number of songs in the list is < 1. * CynthiuneHeaderCell.m ([CynthiuneHeaderCell -widthOfText:text]): add the size of the arrow + its offset when computing this value. * CynthiuneSongTitleCell.m ([CynthiuneSongTitleCell -widthOfText:text]): add the size of the arrow + its offset when computing this value. * PlaylistViewController.[hm]: renamed module from TableViewController. 2006-03-20 Wolfgang Sourdeau * TableViewController.m ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): changed algorithm so that we would use the column identifier and the sort order rather than the previous "sortedInPlaylist" and "sortedInDuration" bools. * CynthiuneHeaderCell.m ([CynthiuneHeaderCell -cellSize]): added the size of the arrow to the regular cell size so that sizeToFit has a better reference on how much size to prepare. * Playlist.m ([-sortByPlaylistRepresentation:reverseOrder]) ([Playlist -sortByDuration:reverseOrder]): use the "reverseOrder" parameter... in correct order. 2006-03-19 Wolfgang Sourdeau * Frameworks/Cynthiune/NSStringExtensions.m ([-caseInsensitiveCompareContainingDirectory:aString]): removed method. Foundation's stringByDeletingLastPathComponent does the job for us. 2006-03-18 Wolfgang Sourdeau * Song.m ([Song -compareByPlaylistRepresentation:aSong]): modified the sort ordered so that two songs are first compared base on their parent directories. * Frameworks/Cynthiune/NSStringExtensions.m ([NSString -caseInsensitiveCompareContainingDirectory:aString]): new method to case-insensitively compare the dirname of two filenames. 2006-03-17 Wolfgang Sourdeau * Song.m ([Song -compareByPlaylistRepresentation:aSong]): modified the sort order so that the songs from the same album but from a different artist are still ordered by song number. * Bundles/aRts/aRts.m ([aRts -_launchServer]): new method to launch the artsd daemon if it's not running. * Bundles/OSS/OSSPreference.m ([OSSPreference -controlTextDidEndEditing:notification]): same as below. * Bundles/Esound/EsoundPreference.m ([EsoundPreference -controlTextDidEndEditing:notification]): this new delegate method replaces the old hostAction: and portAction: methods by modifying the value from the field that ended being modified. This replacement permits the user to no longer have to press return to validate its changes. * Bundles/Esound/Esound.m ([Esound -openDevice]): try five times to open the esound socket at 2/10th of seconds of interval to ensure the daemon is either started correctly or that it really failed. 2006-03-14 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -_oPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -_startOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -_ejectOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -_removeArrayOfSongs:array]) ([PlaylistController -removeAllSongs:sender]) ([PlaylistController -openSongFromNSApp:filename]): invoke invalidateSortedColumn on tableViewController. ([PlaylistController -cleanupPlaylist:sender]): do something only if the amount of invalid songs reported is > 0. * CynthiuneHeaderCell.m ([-drawInteriorWithFrame:cellFrameinView:controlView]): no longer use images to draw sort-order arrows, invoke the new _drawArrowOfSize:... (see below) instead. ([CynthiuneHeaderCell -_drawArrowOfSize:arrowSizeatReferencePoint:refPoint]): draws an arrow using NSBezierPath. * TableViewController.m ([TableViewController -invalidateSortedColumn]): made method public. Invoke "setNeedsDisplay:" on the [playlistView headerView] to make sure we don't see any sorting indicator while the list is unsorted. 2006-03-12 Wolfgang Sourdeau * TableViewController.m ([TableViewController -_saveSortOrderColumn:sortColumninDirection:sortDirection]) ([TableViewController -_restoreSortOrder]): added those two new methods to save the state of the sort order in the playlist and to restore it at launch time. ([TableViewController -awakeFromNib]): removed the "scrollView" ivar which was only used here anyway. ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): slightly optimized methods by reducing message calls and generalizing the variables. ([TableViewController -tableView:tableViewacceptDrop:inforow:rowdropOperation:op]): call _invalidateSortedColumn after a drop. ([TableViewController -_invalidateSortedColumn]): invalidate the ivars related to sorting as well as the header appearance and the state saved to the user defaults. 2006-03-11 Wolfgang Sourdeau * Frameworks/Cynthiune/NSColorExtensions.m ([NSColor +evenRowsBackgroundColor]), ([NSColor +evenRowsBackgroundColor]): inverted the values returned by those methods to permit our tableview to display the stripes by taking into account the ones displayed by the Nesedah Camaelon theme. * Bundles/VorbisTags/VorbisTags.m: updated copyright. ([VorbisTags +setTitle:titleartist:artistalbum:albumtrackNumber:trackNumbergenre:genreyear:yearofFilename:filename]): enabled writing to vorbis file through the code taken from Poe.app. 2006-03-02 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP -streamOpen:fileName]): call _resetIvars from here instead of init. ([-streamClose]): don't call _resetIvars from here. * PlaylistController.m ([PlaylistController -_initButtonImages]): added tooltips to the playlist toolbar buttons. * Player.m ([Player -setStream:newStream]): changed method definition to accept the stream to analyze as parameter instead of using the "stream" ivar. ([Player -setStream:newStream]): set the "stream" ivar to newStream only after the channels and and sample rate were defined for it. This to avoid a crash when using a threaded output plugin ([Player -stop]): if the output is threaded, send a stopThread message to the output plugin only if not paused, since this was putting us in an infinite loop (thread already stopped). * CynthiuneHeaderCell.[hm]: new class that displays an indicator of the state of the list sorting in the playlist table. 2006-02-28 Wolfgang Sourdeau * Frameworks/Cynthiune/NSColorExtensions.m ([NSColor +alternateSelectedControlTextColor]): the default selected text color modified to be visible under OSX with the orange/yellow background color we use in our NSTableView... 2006-02-25 Wolfgang Sourdeau * CynthiuneController.m ([CynthiuneController -awakeFromNib]): apply resize increment of (1, 16) to playlistWindow. 2006-02-21 Wolfgang Sourdeau * Bundles/aRts/aRts.m ([aRts -threadLoop]): adapted to the new definition of the Output protocol. * Player.m ([Player -init]): new "closingThread" ivar, indicating whether the Output thread is closing. ([Player -init]): new "streamsToClose" mutable array, containing streams to be closed when the Output thread is done using them. ([Player -_closePendingStreams]): new method to be commanded from the Output thread through the main thread to clean up the streamsToClose array. ([Player -readNextChunk:bufferwithSize:bufferSize]): if closingThread is set, stop waiting for "awaitingNewStream" to be set and do nothing else. 2006-02-19 Wolfgang Sourdeau * Bundles/WaveOut/WaveOut.m ([WaveOut -_loopIteration]): modified method to take the changes to the ParentPlayer informal protocol into account. Also, free the sound blocks with the new FreeBlock functions so as to also free the data chunk that was allocated with malloc. (FreeBlock): new method to correctly free the memory used by a WAVEHDR structure. 2006-02-17 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -init]): new "notifiedFirstSong" ivar designed to remember the first song given by the PlaylistChangedNotification. ([PlaylistController -playlistChanged:aNotification]): receive the first song given by the notification. If notifiedFirstSong is set, which means the process of feeding the playlist has not yet ceased, do nothing. Otherwise set it to the received song. ([PlaylistController -tableFilenamesDropped:aNotification]): receive the TableFilenamesDroppedNotification from the TableViewController. Feed the playlist with the songs passed through the userInfo dict. ([PlaylistController -_oPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -_startOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -_ejectOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]) ([PlaylistController -openSongFromNSApp:filename]): handle song filenames to _feedPlaylistWithTreeOfFilenames: and take notifiedFirstSong ivar into account if the Player is not running. * TableViewController.m ([TableViewController -setDelegate:anObject]): declare new TableFilenamesDroppedNotification notification. ([TableViewController -_bestFit:stringforColumn:column]): reduce the size of the string by 1 char if the string ends with a space. ([TableViewController -_acceptDroppedFiles:aFilesListatRow:row]): no longer handles the song insertion into the playlist anymore, instead post a notification with the array of filenames to the observer. * Song.m ([Song -encodeWithCoder:encoder]): encode date only if not nil. * CynthiuneController.m ([CynthiuneController -_initPlaylistWindowButtons]): new method to hide the buttons from the Playlist window title bar. ([CynthiuneController -_parseArguments]) ([CynthiuneController -application:applicationopenFile:filename]): pass the song filename as argument instead of a Song instance to PlaylistController's openSongFromNSApp: method. * GeneralPreference.m ([GeneralPreference -_initDefaults]): NSWindows are no longer textured by default. * CynthiuneSongTitleCell.m ([CynthiuneSongTitleCell -cellSize]): take the margins left and right to the image into account. ([CynthiuneSongTitleCell -drawWithFrame:cellFrameinView:controlView]): use aFrame instead of imageFrame as argument to NSRectFill(). * CynthiuneFadingTextField.m ([CynthiuneFadingTextField -awakeFromNib]): new method to add the fadeoutClone field to the parent view instead of in viewDidMoveToSuperview. ([-viewDidMoveToSuperview]): removed method. * Frameworks/Cynthiune/NSColorExtensions.m ([NSColor +evenRowsBackgroundColor]) ([NSColor +oddRowsBackgroundColor]): balance the values for red and green to obtain a pure shade of blue. ([NSColor +rowsHighlightColor]): use a softer orangish color. ([NSColor +alternateSelectedControlColor]): work-around a bug in MacOSX where the rows are highlighted with a different color than specified for a fraction of a second. * Playlist.m ([Playlist -postNotificationWithSongAsFirst:song]): new method that post the PlaylistChangedNotification notification withs the song given as argument in the userInfo dictionary. So that the PlaylistController can now which song to point to when a new batch of songs is added. ([Playlist -addSong:song], [Playlist -addSongsInArray:array]) ([Playlist -insertSong:songatIndex:index]): modified those methods to use the new method above. * Bundles/MacOSX/MacOSXPlayer.m (inputCallback): modified function to reflect to take the changes to the ParentPlayer informal protocol into account. * Frameworks/Cynthiune/Output.h: modified the ParentPlayer protocol to take account of the change below. * Player.m ([Player -readNextChunk:bufferwithSize:bufferSize]): new method derived from the obsolete readNextChunk that feeds the threaded player calling it with song data. 2006-02-16 Wolfgang Sourdeau * InfoDisplayController.m ([InfoDisplayController -hide]): compute "hideInterval" from the interval and numberOfIterations method of the title text field. 2005-12-29 Wolfgang Sourdeau * PlaylistArchiver.m ([PlaylistArchiver +_saveDictionaries:dictionariestoFile:filename]): standardize target directory name. * M3UArchiver.m ([M +fileContentFromDictionaries:dictionariesinReferenceDirectory:directorywithAbsoluteFilenameReferences:absolute]): use the playlist representation as metadata. * Song.m ([Song -setFilename:aFilename]): standardize path of filename given so that we are sure "filename" always point directly to the final file. ([Song -initWithCoder:decoder]): same as above. ([Song -encodeWithCoder:encoder]): encode the playlist representation for playlist file handlers which might make use of it. 2005-12-28 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP -_resetIVars]): new "lostSyncs" ivar, defaulting to 0, meant to count the number of successive losses of frame syncs. (decodeInputBuffer): when a MAD_ERROR_LOSTSYNC occurs, compute the size mad has to skip and increase the lostSyncs ivar. * PlaylistController.m ([PlaylistController -_filteredSubtree:filename]): sort the resulting array before returning it. 2005-12-18 Wolfgang Sourdeau * Song.m ([Song -songInfosCanBeModified]): test whether the song file is writable. * SongInspectorController.m ([SongInspectorController -_setFieldsEditable:editable]): show or hide "lock.tiff" depending on whether the song metadata can or cannot be changed. 2005-12-14 Wolfgang Sourdeau * Song.m ([Song -openStreamForSong]): set status to SongOK whenever the stream could be opened. 2005-12-07 Wolfgang Sourdeau * SongInspectorController.m ([SongInspectorController -lookupThread]): added code to check whether the TrmID is a the special "busy" one and if an error occured. 2005-11-30 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -_initProgressSlider]): the new cell should recover the action and target from the old cell since the nib handler has set them beforehand. 2005-11-18 Wolfgang Sourdeau * CynthiuneSliderCell.m ([CynthiuneSliderCell -init]): replaced knobImage with knobCell so that the drawing code is done within NSCell (more portable and easier way of doing things). ([CynthiuneSliderCell -drawBarInside:cellFrameflipped:flipped]): no longer draw the control background since the cell is declared as non-opaque. ([CynthiuneSliderCell -isOpaque]): declare the cell as non-opaque. * TableViewController.m ([TableViewController -tableView:tableViewobjectValueForTableColumn:tableColumnrow:rowIndex]): manage columns which have a non-nil identifier. * CynthiuneSlider.[hm]: removed module after it was found unnecessary to subclass NSSlider to obtain a custom look for the song slider. * CynthiuneController.m ([CynthiuneController -awakeFromNib]): request the PlaylistController instance to create an NSToolbar instance with itself as delegate. Also, made code related to window position clearer. * PlaylistController.m ([PlaylistController -toolbar:toolbaritemForItemIdentifier:itemIdentifierwillBeInsertedIntoToolbar:flag]) ([PlaylistController -toolbarAllowedItemIdentifiers:toolbar]) ([PlaylistController -toolbarDefaultItemIdentifiers:toolbar]): new NSToolbar delegate callback methods. ([PlaylistController -_initToolbarButtons]): new method to instantiate our NSToolbarItem's. ([PlaylistController -_toolbarButtonWithIdentifier:identifiercallbackToSelf:selectorandImageName:imageName]): new method containing common code for NSToolbarItem instantiation. ([PlaylistController -playlistToolbar]): new public method that returns the NSToolbar instance which CynthiuneController should put on the playlist window. This toolbar totally replaces the previous dropdown menu system. 2005-11-02 Wolfgang Sourdeau * CynthiuneSliderCell.m ([CynthiuneSliderCell -drawBarInside:cellFrameflipped:flipped]): use windowBackgroundColor instead of controlBackgroundColor to draw the background of the cell. This fixes a bug that would appear whenever the user colors were different than the regular system colors (at least on GNUstep). 2005-10-31 Wolfgang Sourdeau * SongInspectorController.m ([SongInspectorController -_setFieldsEditable:editable]): also controls the aspect of lookupButton, also depending whether threadRunning is set or not. * PlaylistController.m ([PlaylistController -playerSongEnded:aNotification]): udpate the info display only after the player has stopped to avoid displaying the first song. * Bundles/Taglib/Taglib.[hm]: made this class conform to the TagsWriting protocol too. * Song.m ([Song -init]): replaced tagsClass with readingTagsClass and writingTagsClass. ([Song -_tagsClassForProtocol:protocol]): renamed from _detectTagsClass. Modified to return a tags class conform to a specified protocol. ([Song -setTitle:newTitleartist:newArtistalbum:newAlbumgenre:newGenretrackNumber:newTrackNumberyear:newYear]): new method replacing the individual set{artist, album, ...} methods and invoking the "setTitle..." method of the writingTagsClass with the values that were modified. 2005-10-25 Wolfgang Sourdeau * Bundles/VorbisTags/VorbisTags.m ([VorbisTags +_setString:stringtoComment:commentfromOvFile:ovFile]): fixed a segfault occuring when parsing an invalid vorbis file. 2005-10-24 Wolfgang Sourdeau * Song.m ([Song -songInfosCanBeModified]): returns "YES" if the tags class is not 'nil' and conforms to the new "TagsReading" protocol. * Frameworks/Cynthiune/Tags.h: splitted the "Tags" protocol in 2 separate protocols: "TagsReading" and "TagsWriting". 2005-10-04 Wolfgang Sourdeau * Song.m ([Song -songInfosCanBeModified]): new dummy method always returning 'NO' (for the moment). * SongInspectorController.m ([SongInspectorController -_updateFields]): set fields editable and make the MB lookup button accessible only if [song songInfosCanBeModified] returns 'YES'. * CynthiuneController.m ([CynthiuneController -applicationWillTerminate:notification]): invoke savePlayerState on the playlist controller. * PlaylistController.m ([PlaylistController -savePlayerState]): new method that saves the status of the repeat and shuffle modes as well as the number of the current song. ([PlaylistController -awakeFromNib]): recover the state save in the preferences. * CynthiuneController.m ([CynthiuneController -init]): ensure the user's Cynthiune directory does exist so that the default playlist can be created and read. 2005-10-03 Wolfgang Sourdeau * Frameworks/Cynthiune/NSArrayExtensions.m ([NSMutableArray -addObjectRandomly:object]): modified to use srand() and rand() instead of srandom() and random(). 2005-09-30 Wolfgang Sourdeau * Frameworks/Cynthiune/NSArrayExtensions.m ([NSMutableArray -addObjectRandomly:object]): raise an exception when 'object' parameter is nil. ([NSMutableArray -rotateUpToObject:object]): method that rotates the array left until the object passed as parameter reaches the first position. * PlaylistController.m ([PlaylistController -tableDoubleClick:aNotification]): invoke "shuffleFromSong:" on playlist so that we make sure the shuffle list is rotated. ([PlaylistController -toggleShuffle:sender]): if 'currentPlayerSong' is set, place it at the first position in the shuffle list. * Playlist.m ([Playlist -shuffleFromSong:song]): new method called from PlaylistController when a song is double-clicked while the list is shuffled. ([-reShuffle]): removed obsolete method. 2005-09-29 Wolfgang Sourdeau * Frameworks/Cynthiune/NSArrayExtensions.m ([NSMutableArray -addObjectRandomly:object]): new method that adds given object in a random position in the array. 2005-09-26 Wolfgang Sourdeau * Bundles/ASFTags/ASFTags.[hm]: new tags module for reading tags in ASF files. * Song.m ([Song -encodeWithCoder:encoder]): encode only fields which we are sure are non-nil. ([Song -playlistRepresentation]): solved the case were the artist name could be nil and displayed as "(nil)". 2005-09-25 Wolfgang Sourdeau * Bundles/ID3Tag/ID3Tag.[hm]: new tags module for the id3tag tags library. * Frameworks/Cynthiune/Tags.h: new Tags protocol for tags module. * Bundles/Taglib/Taglib.[hm]: new tags module for the taglib tags library. * PlaylistController.m ([-toggleMute:sender]): removed method. ([PlaylistController -_initButtonImages]): removed messages on the muteButton and muteMenuItem ivars (removed). * Player.m ([Player -init]): removed "muted" ivar. ([Player -_playLoopIteration], [Player -readNextChunk]): no longer take the "muted" ivar into account since we removed the mute button. ([-setMuted:aBool]): removed method. ([-muted]): removed method. 2005-09-24 Wolfgang Sourdeau * Playlist.m ([Playlist -sortByDuration:reverseOrder]): reenabled method. ([Playlist -sortByPlaylistRepresentation:reverseOrder]): reenabled method. * Frameworks/Cynthiune/NSStringExtensions.m ([NSString -linesFromFileContent]): new method that returns an array of strings representing the lines of the file represented by the receiver. * Frameworks/Cynthiune/utils.m (linesOfFile): removed function, replaced with "linesFromFileContent" method in class NSStringExtensions. * PlaylistArchiver.m ([PlaylistUnarchiver +dictionariesFromFilenames:filenames]): common method for playlist unarchivers which build list of dictionarycoders only from an array of filenames. 2005-09-23 Wolfgang Sourdeau * M3UArchiver.m ([M +fileContentFromDictionaries:dictionariesinReferenceDirectory:directorywithAbsoluteFilenameReferences:absolute]): encode the filenames relatively if withAbsoluteFilenameReference: is set. ([M +dictionariesFromFileContent:contentinReferenceDirectory:directory]): implemented decoding method. * PLSArchiver.m ([PLSArchiver +fileContentFromDictionaries:dictionariesinReferenceDirectory:directorywithAbsoluteFilenameReferences:absolute]): encode the filenames relatively if withAbsoluteFilenameReference: is set. ([PLSUnarchiver +dictionariesFromFileContent:contentinReferenceDirectory:directory]): implemented decoding method. * PlaylistArchiver.m ([PlaylistArchiver +fileContentFromDictionaries:dictionariesinReferenceDirectory:directorywithAbsoluteFilenameReferences:absolute]): changed method signature to accept the additional "withAbsoluteFilenameReference:" boolean parameter. ([PlaylistArchiver +fileContentFromDictionaries:dictionariesinReferenceDirectory:directorywithAbsoluteFilenameReferences:absolute]): new temporary method that separates a string in different substrings representing the lines of a file. * GeneralPreference.m ([GeneralPreference -absolutePlaylistReferences]): added method that returns YES if the filenames should be absolute in the playlist files. * PlaylistFile.[hm]: removed module. Made obsolete by the new playlist archiving mechanism. 2005-09-22 Wolfgang Sourdeau * Frameworks/Cynthiune/NSStringExtensions.[hm] ([NSString -relativePathFromDirectoryToFile:filename]): new method that returns the relative path to file with the current string as a directory reference. 2005-09-19 Wolfgang Sourdeau * PlaylistArchiver.m ([PlaylistArchiver +fileContentFromDictionaries: inReferenceDirectory:]): changed method signature by adding a "directory" parameter which can serve as a reference for relative paths declared in playlist files. ([PlaylistUnarchiver +dictionariesFromFileContent: inReferenceDirectory:]): changed method signature by adding a "directory" parameter which can serve as a reference for relative paths declared in playlist files. 2005-09-17 Wolfgang Sourdeau * PlaylistArchiver.m: added a new class "PlaylistUnarchiver", implementing a subset of the NSKeyedUnarchiver API, requiring the method "dictionariesFromFileContent:" from subclasses. * PlaylistController.m ([-addSongsFolders:sender]): removed method. ([PlaylistController -addSong:sender]): removed "+ dir" entry in the playlist submenu. ([PlaylistController -_feedPlaylistWithTreeOfFilenames:filenames]): new method taking an array of filenames as parameter and which populate the playlist with song files, the content of subdirectories and the content of playlist files. * FormatTester.m ([FormatTester -extensionIsSupported:extension]): added "cPls" to the list of known extensions. ([FormatTester -fileIsPlaylist:filename]): new method returning YES if the filename passed as parameter a playlist in a known format. * Playlist.m ([Playlist -deleteAllSongsQuietly]): new method designed to remove all songs from the playlist without raising a notification. 2005-09-11 Wolfgang Sourdeau * Song.m ([Song -_readInfos]): set duration to 0 seconds when status is not SongOK. * PlaylistController.m ([PlaylistController +initialize]): new method, computing the value for the default playlist filename. ([PlaylistController -awakeFromNib]): invoke loadFromFile on the playlist with the default playlist filename given as parameter, in place of the obsolete loadFromDefaults method. ([PlaylistController -playlistChanged:aNotification]): save the list to the default playlist file. ([PlaylistController -songInspectorDidUpdateSong:aNotification]): save the list to the default playlist file. * Playlist.m ([Playlist -saveToFile:file]): compare file extension case-insensitively. ([Playlist -loadFromFile:file]): first implementation currently supporting NSKeyedUnarchiver only. This allows us to save and load default playlists again. 2005-09-09 Wolfgang Sourdeau * M3UArchiver.m ([M3UArchiver +fileContentFromDictionaries:dictionaries]): new method mostly taken from the old PlaylistFile's _M3UContent method. * PLSArchiver.m ([PLSArchiver +fileContentFromDictionaries:dictionaries]): new method mostly taken from the old PlaylistFile's _PLSContent method. * PlaylistArchiver.m: new class module implementing a subset of the NSKeyedArchiver API and most of the common code needed for its concrete subclasses. Currently, only the method "fileContentFromDictionaries:" is required. * M3UArchiver.m, PLSArchiver.m: subclassed from PlaylistArchiver because of common code. 2005-09-06 Wolfgang Sourdeau * DictionaryCoder.m ([DictionaryCoder -encodeObject:anObject:aKey]) ([DictionaryCoder -encodeBool:aBool:aKey]) ([DictionaryCoder -encodeInt:anInteger:aKey]) ([DictionaryCoder -encodeInt64:anInteger:aKey]): added encoding methods needed to save playlist state. ([DictionaryCoder -decodeObjectForKey:aKey]) ([DictionaryCoder -decodeBoolForKey:aKey]) ([DictionaryCoder -decodeIntForKey:aKey]): ([DictionaryCoder -decodeInt64ForKey:aKey]): added decoding methods needed to save playlist state. 2005-09-05 Wolfgang Sourdeau * DictionaryCoder.[hm]: new module that implements a minimal subclass of NSCoder to store song data in a dictionary. This, in order to use the NSCoding protocol of the Song class. 2005-09-04 Wolfgang Sourdeau * M3UArchiver.[hm]: new module to implement a subset of the NSKeyedArchiver API that ouputs the relevant object data into a M3U-formatted playlist file. * PLSArchiver.[hm]: new module to implement a subset of the NSKeyedArchiver API that ouputs the relevant object data into a PLS-formatted playlist file. * Playlist.m ([-saveToDefaults]): removed obsolete method. ([-loadFromDefaults]): removed obsolete method. ([Playlist -saveToFile:file]): reimplemented method by choosing an archiver Class depending on the file extension given as parameter. 2005-08-19 Wolfgang Sourdeau * Player.m ([Player -timer]): make sure rate and channels are not 0 before using them in the quotient. 2005-07-06 Wolfgang Sourdeau * Bundles/WaveOut/WaveOut.m ([WaveOut -_freeBlocks]): stop the loop when no blocks are left allocated. * Bundles/MP3/MP3.m ([MP -streamOpen:fileName]) ([MP +streamTestOpen:fileName]): open the file with "b" mode flag set so that we make sure Windows opens it in binary-mode. * Bundles/WaveOut/WaveOut.[hm]: new threaded output bundle for the standard Windows sound api. * Bundles/MP3/MP3.m (testMP3Header): u_int16_t type changed to unsigned short for portability. 2005-06-26 Wolfgang Sourdeau * Player.m ([Player -setStream:newStream]): release the previous stream after the new one is made current, so that player threads can't crash the application when reading a potentially closed stream. * CynthiuneSliderCell.m ([CynthiuneSliderCell -drawBarInside:cellFrameflipped:flipped]): use "controlShadowColor" instead of "shadowColor". 2005-06-24 Wolfgang Sourdeau * Player.m ([Player -init]): new outputIsThreaded ivar to modify our behaviour depending on whether the output bundle is declared as threaded or not. Removed the "requests" ivar, considered useless. ([Player -_handleEndOfSong]): new method that post a song-ended notification in the main thread from the new "readNextChunk" method. ([Player -readNextChunk]): new method designed to feed threaded output bundles with data on request. Manage the end of songs. ([Player -setPaused:aBool]): start or stop the thread of the threaded output bundles. * Bundles/aRts/aRts.[hm]: new threaded output bundle for the aRts sound daemon. 2005-06-21 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP -seek:aPos]): compute a float to use as the multiplaction factor to find the correct position in the file. This solves a problem occuring due to the lack of precision with integer divisions. 2005-06-19 Wolfgang Sourdeau * CynthiuneSliderCell.m ([CynthiuneSliderCell -init]): the new default image for the slider knob is named "slider-knob-disabled". ([CynthiuneSliderCell -setEnabled:enabled]): if enabled, set the image to "slider-knob-enabled". ([CynthiuneSliderCell -drawBarInside:cellFrameflipped:flipped]): slider trail is one line wider. * Frameworks/Cynthiune/NSTimerExtensions.[hm]: new extension module to the NSTimer class, providing a new method "explode", which registers the current timer in the current runloop both for the NSEventTrackingRunLoopMode and the NSDefaultRunLoopMode. * PlaylistController.m ([PlaylistController -_startTimeTimer]): execute first iteration of _updateTimeDisplay. Don't retain the timer. ([PlaylistController -_stopTimeTimer]): don't release the timer since it's no longer retained. ([PlaylistController -startPlayer:sender]): check if song != nil instead of currentPlayerSong prior to start the player. * InfoDisplayController.m ([InfoDisplayController -_reallyHide]): hide the timer when the splash is hidden. * GoomView.[hm]: new subclass of NSView with support for the goom animation library. 2005-06-15 Wolfgang Sourdeau * TableViewController.m ([TableViewController -_bestFit:stringforColumn:column]): check that the length of the string is not >3, otherwise the call to NSMakeRange will generate an exception. Besides, also computes the width of the string by invoking the new [NSCell -widthOfText:] method. * MBResultsPanel.m ([MBResultsPanel -_sizeOfText:inCell:]): moved into the NSCellExtensions module. ([MBResultsPanel -_updateColumnWidth:key]): updated following the above change. * Frameworks/Cynthiune/NSCellExtensions.m ([NSCell -widthOfText:text]): new method that returns the size the text passed as parameter would take in that NSCell. * Frameworks/Cynthiune/NSCellExtensions.[hm]: new extension module to the NSCell class. 2005-06-13 Wolfgang Sourdeau * SongInspectorController.m ([SongInspectorController -setDelegate:anObject]): declare the new SongInspectorDidUpdateSongNotification to the notification center. ([SongInspectorController -save:sender]): notifies the observer that the song metadata was modified. ([SongInspectorController -_updateInfoField:fieldwithString:string]): new method that returns true if the new string value of a text field has changed, or false otherwise. ([SongInspectorController -_updateFieldsWithTrackInfos:trackInfos]): new method that modifies the info fields with the data contained in the dictionary passed as parameter. ([SongInspectorController -_updateSongFields:allTrackInfos]): new method that updates the fields when one song track was returned or pops up a MBResultsPanel when it was more than one. ([SongInspectorController -readMB:mbtrack:track]): new method that transforms the data received from MusicBrainz into an NSDictionary. ([SongInspectorController -_parseMB:mb]): method redesigned to call the above. ([SongInspectorController -resultsPanelDidEndWithTrackInfos:trackInfo]): new delegate method for the MBResultsPanel that updates the info fields with the data from the song track that was selected. * PlaylistController.m ([PlaylistController -songInspectorDidUpdateSong:aNotification]): new delegate method to update the table view whenever the song inspector notifies us of a change in the song metadata. Optionnally update the infodisplay if the player is currently playing the song that was just modified. * TableViewController.m ([TableViewController -tableView:tableViewwillDisplayCell:cellforTableColumn:tableColumnrow:rowIndex]) ([TableViewController -_addNeededColumns]): use the standard colors defined in our new NSColorExtensions extension module. * Frameworks/Cynthiune/NSColorExtensions.m ([NSColor +evenRowsBackgroundColor]): new extension module for NSColor designed to provide methods for standard colors of rows in our NSTableViews. * Bundles/WindowsMedia/WindowsMedia.m (extractValueFromDescriptor): treat data of type "BYTE_ARRAY" as a cString rather than a unicode string. * MBResultsPanel.[hm]: new subclass of NSPanel, designed to be called by the SongInspectorController when MusicBrainz returns more than one result. Displays a list of all the song data that were returned, permitted the user to select the one that fits best with the one of which he's modifying the info. 2005-06-11 Wolfgang Sourdeau * Tests/Cynthiune_framework/TestNSNumberExtensions.m ([TestNSNumberExtensions -testTimeStringValue]): added test for the timeStringValue extension method to NSNumber. * InfoDisplayController.m ([-resetTimerField]) ([-setTimerFromTotalSeconds:totalSeconds]): removed those methods made useless by the new mechanism used to display the total time of the playlist in its own window. * TableViewController.m ([TableViewController -deselectAll]): new proxy method that calls "deselectAll:" on playlistView. ([TableViewController -durationOfSelection]): new method that returns the total duration of the selected songs as an NSNumber. ([TableViewController -selectSongsInArray:array]): new method to select the songs passed as parameters in the array. ([TableViewController -setCurrentPlayerSong:newSong]): new method to declare the song that is currently playing so that the song pointer can be positioned. ([TableViewController -init]): initializes evenRowsBgColor and oddRowsBgColor so that the rows are differenciated more easily. * Frameworks/CynthiuneTest/SuperMetaClass.[hm]: new super class for all meta objects used in the unit tests. This class implements neutral "meta" accessors for classes which wouldn't provide them or which would provide non-neutral accessors (i.e. accessors that perform actions different than just setting the related ivar). * BundleManager.m ([BundleManager _registerArrayOfClasses]): removed method. ([BundleManager -loadBundlesForPath:pathwithFileManager:fileManager]): replaced the mechanism that was invoking "bundleClasses" on the main bundle classes with one that loads the bundle after "self" is passed as observer for the "NSBundleDidLoadNotification", hence invoking the new "bundleDidLoad:" method. ([BundleManager -bundleDidLoad:notification]): new method that register the bundle classes by examining the "NSLoadedClasses" key of the userInfo dictionary of the notification, removing the need for a "bundleClasses" method in the "CynthiuneBundle" protocol. * Tests/Cynthiune_app/TestBundleManager.m ([TestBundleManager -testRegisterBundle]): removed test. ([TestBundleManager -testBundleManager]): removed test. * Frameworks/Cynthiune/NSArrayExtensions.m ([NSArray -numberOfValuesBelowValue:value]): new method that returns the amount of values contained in self (considered as an array of numbers) that are inferior to the value passed as parameter. * Tests/Cynthiune_framework/TestNSArrayExtensions.m ([TestNSArrayExtensions -testNumberOfValuesBelowValue]): test for the new "numberOfValuesBelowValue:" method. * Frameworks/Cynthiune/NSArrayExtensions.m ([NSMutableArray -moveObjectsAtIndexes:indexestoIndex:index]): renamed from "moveObjectsAtIndices:toIndex:". * Frameworks/Cynthiune/NSIndexSetExtensions.[hm]: removed extension module since only MacOSX 10.3 and above provide NSIndexSet. 2005-06-05 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP -streamOpen:fileName]): rewind the file handle after reading the metadata, so that the beginning is the sound won't be clipped. ([MP +bundleClasses], [MP +bundleDescription]) ([MP +bundleCopyrightStrings]): changes to the CynthiuneBundle protocol. * German.lproj/: added German translation, thanks to Julian Frede. * Frameworks/Cynthiune/CynthiuneBundle.h: removed the "bundleClasses" method, added bundleDescription and bundleCopyrightStrings. 2005-05-31 Wolfgang Sourdeau * BundleManager.[hm]: new class that will handle bundle loading, registration and general management. * Tests/Cynthiune_app/TestBundleManager.m ([TestBundleManager -testNew]): unit test for the new BundleManager class. 2005-05-22 Wolfgang Sourdeau * PlaylistTableView.m ([-draggingSourceOperationMaskForLocal:isLocal]): returns NSDragOperationMove | NSDragOperationGeneric explicitly when isLocal is YES. * Player.m ([Player -setStream:newStream]): no longer care for the validity of the stream given as parameter since the PlayerController should take care of that. * GeneralPreference.m ([GeneralPreference -_initializeSelector]): invoke "sizeToFit" and "centerViewHorizontally" on the bundle selector. * Playlist.m ([Playlist -arrayOfInvalidSongs]): new method that replaces delteInvalidSongs by letting the caller invoke deleteSongsInArray: with the resulting array. * Tests/Cynthiune_framework/TestNSStringExtensions.m ([TestNSStringExtensions -_createroDir]): new unit tests for our NSString extensions. * Bundles/WindowsMedia/WindowsMedia.m ([WindowsMedia -readYear]): new method required by the Format protocol. ([NSString +stringWithASFText:textlength:length]): new extension method to NSString that parses an UTF-16 field from the ASF headers. (convertGUID): convert a binary-stoded GUID to its ASCII representation. (objectIsOfType): test whether an ASF object matches a specific GUID. (asfstrndup): strndup for UTF-16 strings. (readMetaData): new function to parse ASF header for song metadata. * Bundles/Timidity/Timidity.m ([Timidity -readTrackNumber]): new method required by the Format protocol. * Bundles/Ogg/Ogg.m ([Ogg -readYear]): new method required by the Format protocol. * Bundles/Musepack/Musepack.m ([Musepack -readYear]): new method required by the Format protocol. [generic] modified to use the new libmpcdec API (rather than libmusepack 1.1, which was C++ only). * Bundles/Mod/Mod.m ([Mod -readYear]): new method required by the Format protocol. * Bundles/MP3/MP3.m ([MP -readYear]): new method required by the Format protocol. ([MP -_readStreamMetaData]): modified to take info from the Xing header if present and to compute the length of possible non-xing vbr files by doing an average for 10 frames. * Bundles/FLAC/FLAC.m ([FLAC -readYear]): new method required by the Format protocol. * Bundles/AudioFile/AudioFile.m ([AudioFile -readYear]): new method required by the Format protocol. * CynthiuneFadingTextField.[hm]: new subclass of NSTestField that gives a fading effect when the text value changes. * CynthiuneAnimatedImageView.[hm]: new subclass of NSImageView to display a small animation. * Frameworks/Cynthiune/utils.m (logRect): modified to use NSStringFromRect. (fileIsAcceptable): enhanced (fixed) to handle relative symlinks. * Frameworks/Cynthiune/Format.h: modified the Format protocol so that is requires a readYear method. * Frameworks/Cynthiune/NSViewExtensions.m ([NSView -arrangeViewRightTo:view]): new extension methods for the NSView class: arrangeViewRightTo:, arrangeViewLeftTo: and centerViewHorizontally. * Song.m ([Song -setTitle:string], [Song -setArtist:string]) ([Song -setAlbum:string], [Song -setGenre:string]) ([Song -setTrackNumber:string], [Song -setYear:string]): new setter methods for use by the new SongInspectorController. ([Song -_refreshSongInfosFromStream:stream]): when a song doesn't have a title, generate it from the new makeTitleFromFilename utility function. * Song.h: new year ivar that will contain the year of publication for the song. 2005-05-06 Wolfgang Sourdeau * Playlist.m ([Playlist -addSongsInArray:array]) ([Playlist -deleteSongsInArray:array]) ([Playlist -deleteInvalidSongs], [-lastValidSong]) ([-firstValidSong], [-duration]): replaced the method for accessing the songs in the list array with an enumerator. ([Playlist -_nextValidSongInEnumerator:songEnumerator]): new method with common code from firstValidSong and lastValidSong, taking an NSEnumerator as parameter, previously computed from their calling method as appropriate. 2005-05-05 Wolfgang Sourdeau * Playlist.m ([Playlist -replaceSongsWithArray:array]): new method that replaces the content of the playlist with the songs contained in the array passed as parameter. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testReplaceSongsWithArray]): added unit test for the new replaceSongsWithArray: method. 2005-04-17 Wolfgang Sourdeau * Playlist.m ([Playlist -firstValidSong]): new method that returns the first song marked as valid in the playlist. ([Playlist -lastValidSong]): new method that returns the last song marked as valid in the playlist. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testFirstValidSong]): added unit test for the new firstValidSong method. ([TestPlaylist -testLastValidSong]): added unit test for the new lastValidSong method. * Playlist.m ([Playlist -addSongsInArray:array]): new method that adds the songs contained in the NSArray passed as parameter. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testAddSongsInArray]) added unit test for the new addSongsInArray: method. 2005-04-05 Wolfgang Sourdeau * Tests/Cynthiune_app/Meta*.[hm]: generated meta objects automatically from a perl script. Those meta objects have the abilitity to query their ivars through "metaXX" methods which guarantee no influence on them. All of those classes are subclasses of SuperMetaClass. 2005-03-28 Wolfgang Sourdeau * Playlist.m ([Playlist -moveSongsAtIndices:indicestoIndex:index]): moved the core of the method to Frameworks/Cynthiune/NSArrayExtensions.m:moveObjectsAtIndices:toIndex:. We now call that method instead and only check whether the list has changed and if we should raise a notification. * Frameworks/Cynthiune/NSArrayExtensions.m ([NSMutableArray -moveObjectsAtIndices:indicestoIndex:index]): new method, moved from ../../Playlist.m:moveSongsAtIndices:toIndex:, that move objects indicated in the specified array indexes to the new index. * Tests/Cynthiune_framework/TestNSArrayExtensions.m ([TestNSMutableArrayExtensions -testMoveObjectsAtIndicesToIndex]): added unit test for the new moveObjectsAtIndices:toIndex: method. * Frameworks/Cynthiune/NSIndexSetExtensions.m ([NSIndexSet -adjustedIndexAfterMove:index]): new method, moved from ../../Playlist.m:_adjustedIndexAfterMove, that returns the offset an index should be shifted after the move of the specified indexes occurs. * Tests/Cynthiune_framework/TestNSIndexSetExtensions.m ([TestNSIndexSetExtensions -testAdjustedIndexAfterMove]): added unit test for the new adjustedIndexAfterMove: method. * Playlist.m ([Playlist -validSongBefore:song]): new method, similar to songBefore: but that will only return the first valid song that is found. ([Playlist -validSongAfter:song]): new method, similar to songAfter: but that will only return the first valid song that is found. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testValidSongAfter]): added unit test for the validSongAfter: method. ([TestPlaylist -testValidSongBefore]): added unit test for the validSongBefore: method. 2005-02-17 Wolfgang Sourdeau * Playlist.m ([Playlist -moveSongsAtIndices:indicestoIndex:index]): new method that moves a set of songs (contiguous or not) to the index passed as parameter. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testMoveSongsAtIndicesToIndex]): added unit test for the moveSongsAtIndices:toIndex: method. 2005-02-16 Wolfgang Sourdeau * Frameworks/Cynthiune/NSArrayExtensions.m ([NSArray -subarrayWithObjectsAtIndexes:indexSet]): new method that creates a subarray of the current array with the elements indexed in the indexset passed as parameter. * Tests/Cynthiune_framework/TestNSArrayExtensions.m ([TestNSArrayExtensions -testSubarrayWithObjectsAtIndexes]): added unit test for the subarrayWithObjectsAtIndexes method. * Tests/Cynthiune_framework/TestNSArrayExtensions.[hm]: new TestCase module for the NSArrayExtensions module in the Cynthiune framework. * Frameworks/Cynthiune/NSIndexSetExtensions.m ([NSMutableIndexSet -addIndexesInArray:array]): new method that add the indexes found in the NSNumber objects contained in the array passed as parameter. * Frameworks/Cynthiune/NSIndexSetExtensions.[hm]: new module containing extension methods to the NSIndexSet and NSMutableIndexSet classes. * Tests/Cynthiune_framework/TestNSIndexSetExtensions.m ([TestNSIndexSetExtensions -testAddIndexesInArray]): added unit test for the addIndexesInArray method. * Tests/Cynthiune_framework/TestNSIndexSetExtensions.[hm]: new TestCase module for the new NSIndexSetExtensions module in the Cynthiune framework. * SongInspectorController.m ([SongInspectorController -dealloc]): added this method to remove the observer from the NSNotificationCenter whenever the SongInspectorController instance is freed. Otherwise, the playlistChanged: notification can still be posted across different instances. * Player.m ([Player -dealloc]): added this method to remove the observer from the NSNotificationCenter whenever the Player instance is freed. Otherwise, the playlistChanged: notification can still be posted across different instances. * Playlist.m ([Playlist -dealloc]): added this method to remove the observer from the NSNotificationCenter whenever the Playlist instance is freed. Otherwise, the playlistChanged: notification can still be posted across different instances. ([Playlist -addSong:song]) ([Playlist -insertSong:songatIndex:index]) ([Playlist -deleteSong:song], [Playlist -deleteAllSongs]) ([Playlist -deleteSongsInArray:array]) ([Playlist -deleteInvalidSongs]): added code to post the playlistChanged: notification when the list has at least one song added or removed. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testAddSong]) ([TestPlaylist -testInsertSongAtIndex]) ([TestPlaylist -testDeleteSong]) ([TestPlaylist -testDeleteAllSongs]) ([TestPlaylist -testDeleteInvalidSongs]) ([TestPlaylist -testDeleteSongsInArray]): ensure the corresponding methods post a playlistChanged: notification when something has changed in the list. * Playlist.m ([Playlist -setDelegate:object]): new method to remember the object that will receive the playlistChanged: notification message. ([Playlist -insertSong:songatIndex:index]): new wrapper method around the insertObject:atIndex: method from NSMutableArray. ([Playlist -indexOfSong:song]): new wrapper method around the indexOfObject: method from NSArray. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testSetDelegate]): added unit test for the setDelegate method. ([TestPlaylist -testInsertSongAtIndex]): added unit test for the insertSongAtIndex method. ([TestPlaylist -testIndexOfSong]): added unit test for the indexOfSong method. 2005-02-15 Wolfgang Sourdeau * Playlist.m ([Playlist -deleteSongsInArray:array]): new method deleting the songs contained in an array passed as parameter. ([Playlist -deleteInvalidSongs]): new method that checks that all songs in the playlist have a status equal to "SongOK" and removes them otherwise. ([Playlist -songAtIndex:index]): returns the Song specified by the index passed as parameter. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testDeleteInvalidSongs]): added unit test for the deleteInvalidSongs method. ([TestPlaylist -testDeleteSongsInArray]): added unit test for the deleteSongsInArray: method. ([TestPlaylist -testSongAtIndex]): added unit test for the songAtIndex: method. 2005-02-14 Wolfgang Sourdeau * Tests/Cynthiune_app/MockSong.[hm]: new module containing a subclass of Song, designed to give access to ivars. * Tests/Cynthiune_app/MockPlaylist.[hm]: new module containing a subclass of Playlistm designed to give access to ivars. * Playlist.m ([Playlist -deleteAllSongs]): new method to remove all the songs from the array. ([Playlist -songAfter:song]): new method returning the song after the one passed as parameter. ([Playlist -songBefore:song]): new method returning the song before the one passed as parameter. ([Playlist -numberOfSongs]): returns the number of songs in the playlist. ([Playlist -duration]): return an NSNumber with the total duration of the playlist in seconds. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -setUp]): initialize 3 mock songs that can be used during the tests. ([TestPlaylist -testDeleteAllSongs]): added unit test for the deleteAllSongs method. ([TestPlaylist -testSongBefore]): added unit test for the songBefore: method. ([TestPlaylist -testSongAfter]): added unit test for the songAfter: method. ([TestPlaylist -testnumberOfSongs]): added unit test for the numberOfSongs method. ([TestPlaylist -testduration]): added unit test for the duration method. * Playlist.m ([Playlist -firstSong]): new firstSong method. ([Playlist -lastSong]): new lastSong method. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testFirstSong]): added unit test for the firstSong method. ([TestPlaylist -testLastSong]): added unit test for the lastSong method. * Playlist.m ([Playlist -addSong:song]): new addSong: method. ([Playlist -deleteSong:song]): new deleteSong: method. * Tests/Cynthiune_app/TestPlaylist.m ([TestPlaylist -testAddSong]): new unit test for the addSong method. ([TestPlaylist -testDeleteSong]): new unit test for the deleteSong method. * Tests/Cynthiune_app/TestPlaylist.[hm]: new unit testsuite for the Playlist object. * Tests/Cynthiune_app: new unit testsuite for the Cynthiune application files. 2005-02-12 Wolfgang Sourdeau * Tests/Cynthiune_framework/Testutils.m ([Testutils -init]): new init method, initializing the elements of the test that have only to be initialized once during the run of the testsuite. ([Testutils -dealloc]): new dealloc methods cleaning up the elements initialized in init. ([Testutils -testlogRect]): added unit test for the logRect function. ([Testutils -testinvertBytesInBuffer]): improved the test by checking the error messages output by NSLog during a wrong invocation of invertBytesInBuffer. ([Testutils -testconvert8to16]): added unit test for the convert8to16 function. ([Testutils -testmakeTitleFromFilename]): added unit test for the makeTitleFromFilename function. 2005-02-11 Wolfgang Sourdeau * CynthiuneController.h: the appWindow ivar was renamed to playerWindow. * CynthiuneController.m (initWMWindowTitleSize): new hacking function to determine the height of the title bar on X11. ([CynthiuneController -awakeFromNib]): set WindowsTitleSize and WindowsBorderSize here, depending on the value returned by GSHandlesWindowDecorations(). All of the above happens only on GNUstep. * SongInspectorController.m ([-awakeFromNib]): the level of the inspectorPanel is now set to "NSFloatingWindowLevel" instead of "NSModalPanelWindowLevel", since it looks more appropriate; * Frameworks/Cynthiune/utils.m (reverseComparisonResult): return NSOrderedSame if result == NSOrderedSame; * Tests/Cynthiune_framework/Testutils.m ([Testutils -testfileIsAReadableDirectory]): added unit test for the fileIsAReadableDirectory function. ([Testutils -testinvertBytesInBuffer]): added unit test for the invertBytesInBuffer function. ([Testutils -testreverseComparisonResult]): added unit test for the reverseComparisonResult function. 2005-02-10 Wolfgang Sourdeau * CynthiuneSongTitleCell.m: made subclass of CynthiuneTextCell. ([CynthiuneSongTitleCell -setPointerImage:pointerImage]): new accessor method to specify the pointer image. ([CynthiuneSongTitleCell -copyWithZone:theZone]): made conform to the NSCopying protocol. * Tests/Cynthiune_framework/Testutils.m: initial unit test module for the utils.m in the Cynthiune framework. * Frameworks/Cynthiune/NSArrayExtensions.[hm]: new module containing extension methods to the NSArray and NSMutableArray classes. * Frameworks/Cynthiune/utils.m (makeTitleFromFilename): new function to the determine the title of a song from its filename. * Bundles/Timidity/Timidity.m: new Timidity format bundle that accepts midi files and reads them through a piped timidity process. * CynthiuneTextCell.[hm]: new subclass of NSTextFieldCell that accepts a specific highlight color parameter. * PlaylistController.m ([PlaylistController -_updateStatusLabel]): new method that displays the amount of songs in the playlist, the total time of the playlist and the time of the selection if songs are selected. ([PlaylistController -_addSongsFromArray:songArraywithDir:aDirectory]) ([PlaylistController -removeSelectedSongs:sender]) ([PlaylistController -removeAllSongs:sender]) ([PlaylistController -cleanupPlaylist:sender]) ([PlaylistController -openSongFromNSApp:aSong]) ([PlaylistController -tableSelectionIsChanging:aNotification]): invoke [self _updateStatusLabel] whenever something has changed in the playlist. ([-_resetTimeDisplay:aTimer], [-_updateDisplayResetTimer]) ([-_updateSelectionTimeDisplay]): removed the methods which were part of the previous mechanism to display the time of the selection in the timerField. * PlaylistController.h: the "Player" protocol no longer exists. Removed references to it. Added a new "playlistStatusLabel" ivar. 2005-01-12 Wolfgang Sourdeau * CynthiunePauseButton.m ([-sendAction:action:object]): removed overriden method since the animation has to be started when the button state changes. * PlaylistController.h: removed the pauseAnimationTimer and animationStatus ivars. * PlaylistController.m ([-_animatePauseButton]) ([-_startPauseAnimation], [-_stopPauseAnimation]): removed methods since they were moved into the new CynthiunePauseButton class. ([PlaylistController -playerPlaying:aNotification]): no longer invoke "setImage:" on pauseButton. ([-playerPaused:aNotification]): no longer invoke _startPauseAnimation and set the state of pauseButton to YES. ([PlaylistController -playerResumed:aNotification]): no longer invoke _stopPauseAnimation and set the state of pauseButton to NO. ([PlaylistController -playerStopped:aNotification]): no longer invoke "setImage:" on pauseButton. * CynthiunePauseButton.[hm]: new subclass of NSButton that is acting like a toggle button but alternates between its image and alternateImage with a timer when activated. This gives a blinking effect to the active button. * CynthiuneSongTitleCell.[hm]: new class replacing CynthiuneSongPointerCell and with a different meaning in that it is a subclass of NSTextField. Large portions of this code taken or inspired from GNUMail by Ludovic Marcotte . * TableViewController.m ([TableViewController -init]): allocate and initialize the 4 NSColor * ivars. ([TableViewController -dealloc]): release them here. ([TableViewController -_addNeededColumns]): removed the previous CynthiuneSongPointerCell and replace the cell used for the song title with an instance of the new CynthiuneSongTitleCell class. ([TableViewController -_addNeededColumns]): changed the "playlist" and "duration" identifiers to "song" and "time" for consistency. ([TableViewController -awakeFromNib]): set the cell spacing to 0.0. ([-_postTableDoubleClickNotification]) ([-_postTableSelectionDidChangeNotification]) ([-_postTableSelectionIsChangingNotification]): removed those methods so avoid a useless method call. ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): use the column identifiers rather than their number to identify them. ([TableViewController -tableView:tableViewwillDisplayCell:cellforTableColumn:tableColumnrow:rowIndex]): take the class change into account with regard to the "song" column and choose an appropriate background color depending on the row number and its selection status. * TableViewController.h: added 4 new NSColor * ivars that will be used to draw the background color of the data cells: evenRowsBgColor, oddRowsBgColor, evenSelectedRowsBgColor, oddSelectedRowsBgColor. 2005-01-11 Wolfgang Sourdeau * SongInspectorController.m ([SongInspectorController -init]): load the SongInspector nib from here. * PreferencesController.m ([PreferencesController -setBundleView:bundlePrefsView]): tells bundleViewBox to refresh itself. * PlaylistController.m ([PlaylistController -_startTimeTimer]): release the timer after it's invalidated. ([PlaylistController -_startPauseAnimation]): new method that creates an animation timer and sets it to call _animatePauseButton. ([PlaylistController -_stopPauseAnimation]): new method that invalidates and releases the animation timer for the pause button. ([PlaylistController -_animatePauseButton]): new method to animate the pause button by changing its image alternatively. ([PlaylistController -playerPlaying:aNotification]): no longer calls setActiveSong on tableViewController but tells it to show the song pointer. ([PlaylistController -playerStopped:aNotification]): tells tableViewController to hide the song pointer. * PlaylistController.h: new pauseAnimationTimer and animationStatus ivars. * PlaylistController.m ([PlaylistController -awakeFromNib]): no longer load the SongInspector nib from here. * TableViewController.m ([-setActiveSong:song]): removed method. ([-songIsActive:aSong]): removed method. ([TableViewController -setShowSongPointer:show]): new setter method for the new displaySongPointer ivar. ([TableViewController -_addNeededColumns]): prepend a new column identified as "pointer", having a CynthiuneSongPointerCell as its data cell. ([TableViewController -tableView:aTableViewwillDisplayCell:cellforTableColumn:aTableColumnrow:rowIndex]): new delegate method that tells the pointer cell in the pointer column to display the image if the row parameter is equal to the number of the song being played and if the player is active. * TableViewController.h: new displaySongPointer BOOL ivar. * TableViewController.m ([TableViewController -setShowSongPointer:show]): setter for the new songPointer ivar. * TableViewController.h: added songPointer BOOL ivar. * CynthiuneInfo.plist: added file types handled by the WindowMedia and the Musepack format bundles. * CynthiuneController.m (GSHandlesWindowDecorations): new function which indicates, under GNUstep, whether GNUstep or the window manager handles the window decoration. This is needed to determine the correct position of the windows. ([CynthiuneController -init]): initialize WindowsTitleSize and WindowsBorderSize depending on the value returned by GSHandlesWindowDecorations. The values are valid for WindowMaker. ([CynthiuneController -_computeDeltaYOfFrame:mainFramewithFrame:aFrame]): compute the values by taking the WindowsTitleSize and WindowsBorderSize into account. ([CynthiuneController -windowWillClose:aNotification]) ([CynthiuneController -_initWindowsPosition]): the windows identifiers are changed to "PlayerWindow" and "PlaylistWindow" in the preferences. * Frameworks/Cynthiune/utils.m (logRect): print a label associated with the corresponding value. * Player.m ([Player -stop]): send a PlayerResumedNotification when paused to tell the observer we are no longer paused. * CynthiuneSongPointerCell.[mh]: new NSCell subclass to indicate the song being played. 2005-01-04 Wolfgang Sourdeau * PlaylistController.m ([-toggleSongInspector:sender]): new method replacing [-showSongInspector:]. ([PlaylistController -songInspectorWasShown:aNotification]): set state of songInspectorMenuItem to off. * SongInspectorController.m ([SongInspectorController -setDelegate:anObject]): added SongInspectorWasShownNotification and replaced SongInspectorWasClosedNotification with SongInspectorWasHiddenNotification. ([SongInspectorController -toggleDisplay]): new method replacing hide and show. ([SongInspectorController -_updateFields]): update filenameField with the full filename of the song being inspected. * SongInspectorController.h: added filenameField ivar. * Song.m ([Song -year]): new stub method that shall return the year of the song in the future. * SongInspectorController.m ([SongInspectorController -awakeFromNib]): set self as delegate for inspectorPanel. ([SongInspectorController -setDelegate:anObject]): new method. ([SongInspectorController -delegate]): new method. ([SongInspectorController -setSong:newSong]): update the song ivar and the inspector fields only if newSong != song. ([SongInspectorController -show]): new method to show the inspector panel. ([SongInspectorController -hide]): new method to hide the inspector panel. ([SongInspectorController -windowWillClose:aNotif]): delegate method that sends a notification to our delegate when the panel is closing. * PlaylistController.h: added songInspectorMenuItem ivar. * PlaylistController.m ([PlaylistController -init]): set self as delegate for songInspectorController. ([PlaylistController -awakeFromNib]): set state of songInspectorMenuItem to off. ([PlaylistController -showSongInspector:sender]): new action method requesting the songInspectorController to show the inspector window and where the state of songInspectorMenuItem is set to on. ([PlaylistController -songInspectorWasClosed:aNotification]): new delegate method received when the song inspector is closing, where we set the state of songInspectorMenuItem back to off. * SongInspectorController.[h,m]: new class implementing the controller API for the new Song inspector. It currently take cares of updating the different fields but: - it only supports one song at a time; - it can't save modifications yet. * Frameworks/Cynthiune/utils.m (findStringStart, findStringEnd) (trimmedString): removed functions since the NSString API has the stringByTrimmingSpaces method. * Frameworks/Cynthiune/Output.h: removed the outputBytes method from the Output protocol. * Bundles/Esound/OSS.h: removed the bytes ivar. * Bundles/Esound/OSS.m ([-outputBytes]): removed method since it's no longer required in the Output protocol. * Bundles/Esound/Esound.h: removed the bytes ivar. * Bundles/Esound/Esound.m ([-outputBytes]): removed method since it's no longer required in the Output protocol. 2005-01-01 Wolfgang Sourdeau * Bundles/OutputSkeleton/: new bundle directory containing the skeleton for an output bundle. 2004-12-31 Wolfgang Sourdeau * Song.m ([Song -compareByPlaylistRepresentation:aSong]): invokes numericallyCompare: on the trackNumber NSString rather than calling compareStringsNumerically(). * Frameworks/Cynthiune/NSStringExtensions.m ([NSString -numericallyCompare:aString]): new category method replacing compareStringsNumerically() in utils.m. ([NSString]): new class module containing extensions to NSString. * Frameworks/Cynthiune/utils.m (findStringEnd): end may not be less than the beginning of the string. (trimmedString): end being < start means the trimmed string will be of length 0. This solves a bug that was causing the new allocation to fail because of an excessive request of memory and hence a segfault during strncpy. (compareStringsNumerically): removed function. 2004-12-30 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -playerPlaying:aNotification]): invokes setActiveSong: instead of selectRow: on tableViewController. This initiates our change in the way we mark the song that is currently playing. * TableViewController.m ([TableViewController -setActiveSong:song]): new method replacing selectRow:, instead of an integer, it takes a Song argument. This name change refocusses on the correct purpose of this method, which is to mark the current song as being played in the playlist view. ([TableViewController -songIsActive:aSong]): new name for songIsSelected:. Renamed for the reason mentionned above. ([TableViewController -updateView]): invokes setActiveSong: instead of selectRow:. * Playlist.m ([Playlist -selectSong:aSong]): new method similar to selectSongNumber but with a Song parameter. ([Playlist -currentSong]): revived method. * Bundles/Mod/Mod.m ([Mod +initialize]): added MODPLUG_ENABLE_OVERSAMPLING to the modplug flags. 2004-12-28 Wolfgang Sourdeau * Bundles/MP3/MP3.m (returnTag): new macro that invokes the relevant taglib function. * utils.m (trimmedString): new utility function that returns a new string equal to the one passed as parameter but where we make sure any starting and ending spaces are removed. * Player.m ([Player -play]): invoke _playLoopIteration after sending the PlayerPlayingNotification so that we make sure the player is in a consistent state whenever something bad happens and triggers another notification. 2004-12-15 Wolfgang Sourdeau * Bundles/WindowsMedia/WindowsMedia.m ([WindowsMedia +canTestFileHeaders]): we now declare that we are able to test our file headers and content correctly. ([WindowsMedia +streamTestOpen:fileName]): invoke the functions in our avifile bindings to test the validity of the file passed as parameter. * Bundles/WindowsMedia/CWMFile.cpp (_testASFHeaders): new function to test if a file has a Microsoft ASF header. (WMFileOpen): now invoke _testASFHeaders and test its result before opening the file. (WMFileClose): now invoke delete on the passed WMFile parameter. (WMFileAudioStreamCount): new wrapper function around IReadFile::AudioStreamCount(). 2004-12-14 Wolfgang Sourdeau * Bundles/Musepack/Musepack.m (ShiftSigned): made inline. (CopyBuffer): idem. ([-readNextChunk:bufferwithSize:bufferSize]): copied code from the WindowsMedia format bundle to make sure the output buffer will never be overflood, through the use of an internal intermediary buffer. * Bundles/MP3/MP3.h: removed "opened" ivar. * Bundles/MP3/MP3.m ([MP -_resetIVars]): initialize all ivars here so that the same code is shared in init and streamClose. General: replaced dependency on libid3tag with one on taglib, which is much better and simpler. * Player.m ([Player -chunkFinishedPlaying]): invoke _playLoopIteration only when all requests are completed. * Bundles/Musepack/*.cpp: C++ binding code for the libmusepack library. * Bundles/Musepack/Musepack.[mh]: new format class bringing the ability for Cynthiune to read Musepack (MPC) files. 2004-12-13 Wolfgang Sourdeau * Bundles/WindowsMedia/CWMFile.[h,cpp]: new binding modules provided to glue the C++ AviFile API and the WindowsMedia ObjC code. * Bundles/WindowsMedia/WindowsMedia.[h,m]: new format class bringing the ability for Cynthiune to read ASF and WMA files. 2004-12-12 Wolfgang Sourdeau * Bundles/FormatSkeleton/: new bundle directory containing the skeleton for a format bundle. 2004-12-11 Wolfgang Sourdeau * Player.m ([Player -_playLoopIteration]): increment requests when a chunk is sent to the output bundle. ([Player -_playLoopIteration]): post a songended notification only when the amound of requests is 0. ([Player -chunkFinishedPlaying]): decrement the amount of requests. * Player.h: added a new "requests" ivar. * Bundles/Esound/Esound.h: removed unused "currentChunk" ivar. * Bundles/MP3/MP3.m (seekOffset): returns -1 if the end of file is found before any non-zero character could be found. ([MP +streamTestOpen:fileName]): returns NO if the result of seekOffset is -1. 2004-11-29 Wolfgang Sourdeau * PlaylistTableView.m ([PlaylistTableView -draggingSourceOperationMaskForLocal:isLocal]): new overriden method to permit DnD activity between Cynthiune and other applications. 2004-11-19 Wolfgang Sourdeau * GNUmakefile: release 0.9.4. * Song.m ([Song -_fileWasModified]): set status to SongFileNotFound if attributes is nil. * MailService.m ([MailService -composeBugReport]): instead of using the DO mechanism of OpenStep, use the NSURL API and the "mailto:" protocol. 2004-11-17 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -pausePlayer:sender]) ([PlaylistController -previousSong:sender], currentSongNumber) ([PlaylistController -changeTimeDisplay:sender]): player is always instantiated now and no longer can be "nil". * MailService.m ([MailService +instance]): mailService declared as static. Don't recreate if already exists. * MailService.[hm]: new class to deal with the local OS's mail application in order to compose a bug report about Cynthiune. * PlaylistController.m ([PlaylistController -init]): set self as a delegate of the playlist. ([PlaylistController -toggleMute:sender]): the state change is reflected on both the Player/Mode/Mute menu item as well as the mute toggle button. ([PlaylistController -toggleShuffle:sender]): the state change is reflected on both the Player/Mode/Shuffle menu item as well as the shuffle toggle button. ([PlaylistController -toggleRepeat:sender]): the state change is reflected on both the Player/Mode/Repeat menu item as well as the repeat toggle button. ([PlaylistController -addSongs:sender], [PlaylistController -addSongsFolders:sender]): new action methods, triggered by the application menu. ([PlaylistController -addSong:sender]): modified to call the above action methods. ([PlaylistController -removeSelectedSongs:sender], [PlaylistController -removeAllSongs:sender], [PlaylistController -cleanupPlaylist:sender]): new action methods, triggered by the application menu. ([PlaylistController -removeSong:sender]): modified to call the above action methods. ([PlaylistController -saveList:sender]) ([PlaylistController -saveListAs:sender]): new action methods, triggered by the application menu. ([PlaylistController -saveListFromPopupMenu:sender]): new method derived of the old "saveList" method, modified to call the above action methods. ([PlaylistController -playlistChanged:aNotification]): new delegate method that saves the playlist states and update the Player. * Playlist.m: added a new notification: "PlaylistChangedNotification". ([Playlist -setDelegate:anObject], [Playlist -delegate]): new methods. 2004-11-16 Wolfgang Sourdeau * PlayerPreference.[hm]: new "PlayerPreference" class, designed to handle preferences for the Player. * PlayerController.[hm]: new "PlayerController" class, designed to hold the controlling code specific to the Player initially put in PlaylistController. * CynthiuneController.m (localizeMenu): new static function implementing a new mechanism for translation menu labels. Instead of replacing them with static entries, they are scanned and replaced with their translation. This makes the code lighter and removes the constraint of keeping up with the different where to change the localized strings whenever it happens. ([-_initMenuLabels]), ([-_setStrings:stringsforSubmenu:menuwithOffset:offset]), ([-_setStrings:stringsforSubmenu:menu]), ([-_setStrings:stringsforMenu:menu]: removed methods. 2004-11-15 Wolfgang Sourdeau * TableViewController.m ([TableViewController -tableView:tvwriteRows:rowstoPasteboard:pboard]): removed #ifdef and only declare elements of type CynthiunePlaylistDragType to the pasteboard. The rest will be provided through pasteboard:ProvideDataForType:. ([TableViewController -pasteboard:pboardprovideDataForType:type]): implemented this delegate method from the NSPasteBoard API to provide elements of type NSFilenamesPboardType when requested. ([TableViewController -tableView:tvvalidateDrop:infoproposedRow:rowproposedDropOperation:dropOperation]): check the dragging source before requesting elements of a specific type to the pasteboard. This way, we make sure we control the right type of letting the underneath API to decide for us. This is the right way to do things and solves a couple of problems with our previous implementation. 2004-11-05 Wolfgang Sourdeau * Bundles/OSS/OSSPreference.m ([OSSPreference -_initDefaults]): use a BOOL "defaultsInitted" to check whether this method was executed. ([OSSPreference -_init]): the defaultsInited ivar was removed. ([OSSPreference -awakeFromNib]), ([OSSPreference -dspDevice]): call _initDefaults. * Bundles/Esound/EsoundPreference.m ([EsoundPreference -_initDefaults]): use a BOOL "defaultsInitted" to check whether this method was executed. ([EsoundPreference -_init]): the defaultsInited ivar was removed. ([EsoundPreference -awakeFromNib]), ([EsoundPreference -socketIsTCP]), ([EsoundPreference -tcpHostConnectString]): call _initDefaults. * Player.m ([Player -_ensureOutput]): when the output bundle has changed, we need to set rate an channels to 0 and call _reInitOutputIfNeeded so that we make sure the new output is initialized correctly. 2004-10-01 Wolfgang Sourdeau * Song.m ([Song -status]): call _readInfos, so that whenever this method is called, we make sure file operations occur that initialize the status correctly. * GeneralPreference.m ([GeneralPreference -init]): call _initDefaults to initialize the managed values with correct defaults so that they are accessible all the time. 2004-09-27 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -_initPlaylistPopups]): new "Cleanup" entry in the "Remove" menu. ([PlaylistController -removeSong:sender]): if the selected menu is "Cleanup", send "removeBadEntries" to the playlist. * Playlist.m ([Playlist -removeArrayOfSongs:anArray]): cast [_regularList count] to signed int so that currentSongNumber can be -1 and let the condition be computed correctly. ([Playlist -removeBadEntries]): new method to discover and remove songs from which the "status" message does not return SongOK. 2004-09-22 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -validRequestorForSendType:returnType:]): don't check the returnType. ([PlaylistController -writeSelectionToPasteboard:pboardtypes:types]): don't check that tableViewController has any selection since it's done within validRequestorForSendType:returnType:. ([-_extensionIsAcceptable:fileExtension]): removed method (see below). ([PlaylistController -panel:sendershouldShowFilename:fileName]): reduce the use of variables. ([PlaylistController -_oPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]): synchronize the defaults as soon as the key is set. ([PlaylistController -_dirOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]): synchronize the defaults as soon as the key is set. ([PlaylistController -_startOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]): synchronize the defaults as soon as the key is set. ([PlaylistController -_ejectOPanelDidEnd:oPanelreturnCode:resultcontextInfo:contextInfo]): synchronize the defaults as soon as the key is set. * FormatTester.m ([FormatTester -extensionIsSupported:extension]): new method derived from PlaylistController:-[_extensionIsAcceptable:] and designed to replace it. * CynthiuneController.m ([-_initServices]): removed method. ([CynthiuneController +initialize]): register NSFilenamesPboardType as a service menu sendtype. ([-validRequestorForSendType:sendTypereturnType:returnType]): forward the invocation to playlistController. * TableViewController.m ([TableViewController -getFirstSelectedRow]): new name for "getSelectedRow". Now returns an int instead of an unsigned int so that -1 can be given when no song is selected. Check that the playlist actually contain any song since -[NSTableView selectedRow] does not void its selection when the list is emptied... ([TableViewController -getFirstSelectedSong]): new name for "selectedSong". ([TableViewController -getSelectedSongs]): new name for "getSelection". Ensure that the playlist is populated, otherwise returns an empty array. ([TableViewController -getSelectedSongsAsFilenames]): new name for "getSelectionAsFilenames". Ensure that the playlist is populated, otherwise returns an empty array. ([TableViewController -songIsSelected:aSong]): new name for "isSongInSelection:". 2004-09-21 Wolfgang Sourdeau * Player.m ([Player -setStream:newStream]): when a new nil stream is set post the "PlayerSongEndedNotification" so that the PlaylistController knows the song will not be read. This is not very clean and needs to be rectified lated. * Song.m ([Song -encodeWithCoder:encoder]): call _readInfos to make sure we save initialized data. 2004-09-20 Wolfgang Sourdeau * Bundles/MP3/MP3.m (decodeInputBuffer): function semantics changed to manage only buffer decoding and returning a status code about the decoded stream chunk. (calcInputRemain): the third argument was a pointer to an int we had to modify from inside this function. Now we return that value instead. ([MP -_readStreamMetaData]): completed method to use decodeInputBuffer, the same way readNextChunk:withSize: does so that we can have a correct file parsing for metadata. 2004-09-16 Wolfgang Sourdeau * Bundles/Esound/Esound.m ([Esound -prepareDeviceWithChannels:numberOfChannelsandRate:sampleRate]): reinitialize the output socket if open. That is the only way to modify the stream settings with ESD... * TableViewController.m ([TableViewController -doubleClick:sender]): take the double-click into account only if a real row (> -1) was clicked, otherwise it might just be the column header and we don't want the player to start in that case. ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): take the column number into account instead of its identifier since, on OS X, this method is called before the id's are available and it generates a warning. ([TableViewController -awakeFromNib]): disallow column selection, hoping the GNUstep team will fix NSTableView one day... * Player.m ([Player -_reInitOutputIfNeeded]): if [ prepareDeviceWithChannels:andRate:] returns 'NO', the new values are not retained. 2004-09-15 Wolfgang Sourdeau * GNUmakefile: release 0.9.3a. * Bundles/MacOSX/MacOSXPlayer.m, Bundles/MacOSX/MacOSXPlayer.h: converted to the new Output protocol. This version is far cleaner than what used to be. * Player.m ([Player -stop]): when stopped, awaitingNewStream should be set to NO. 2004-09-13 Wolfgang Sourdeau * Bundles/OSS/OSS.m ([OSS -prepareDeviceWithChannels:numberOfChannelsandRate:sampleRate]): directly update the device if open. ([OSS -closeDevice]): set the "dsp" ivar to nil when released, so that we can know whether it is open or not. * Player.m ([Player -_ensureOutput]): set rate and channels to 0 when another Output bundle is instantiated to that we make sure its device gets correctly initialized. ([Player -play]): start the play loop only if calling "openDevice" on the output instance returns "YES", otherwise ignore the request. Something else should be done, like displaying an error message or something like that but we're not there yet. * TableViewController.m ([TableViewController -tableView:aTableViewobjectValueForTableColumn:aTableColumnrow:rowIndex]): typo. * Bundles/OSS/OSS.m: updated to conform the new Output protocol by mixing code from the ancien OSS and the new Esound bundle. 2004-09-11 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -playerStopped:aNotification]): set currentPlayerSong to nil. * Player.m ([Player -chunkFinishedPlaying]): call _playLoopIteration if not paused AND if not stopped. * PlaylistController.m ([PlaylistController -_updatePlayer:force]): send a "setStream" message instead of "setSong" to the Player object, by previously calling "openStreamForSong" on the relevant Song. Besides, since the "song" message is no longer available, we use the new "currentPlayerSong" variable to keep track of what is currently playing. * Song.m ([Song -_refreshSongInfosFromStream:stream]): channels and rate are no longer read from the streams. ([-channels]): removed method. ([-rate]): removed method. ([Song -initWithCoder:decoder]): "channels" and "rate" keys are no longer decoded from the NSKeyedArchive. * Player.m ([Player -_playLoopIteration]): new name for "_sendChunkToOutput". ([Player -play]): simplified a lot since we no longer play "Song" objects but objects conforming to the "Format" protocol (streams). ([Player -setStream:newStream]): simplified a lot the the same reason as mentionned above. Besides, restart the play loop if the new ivar "awaitingNewStream" is set. ([Player -_playLoopIteration]): set "awaitingNewStream" to yes when the song is finished playing so that setStream can restart the loop when a "SongFinishedPlayingNotification" was sent to the Player controller. * Bundles/Esound/Esound.m ([-_writeCompleteNotification:aNotification]): no longer emit a notification but directly sends the "chunkFinishedPlaying" message to the parent player (following the recent change in the "Output" protocol). * Output.h: "setDelegate:" and "delegate" removed. Added "setParentPlayer:" instead. Also, modified the OutputDelegate informal protocol to remove the NSNotification argument to the "chunkFinishedPlaying" method. * Bundles/XMMSInput/XMMSInput.m ([XMMSInput -readDuration]): return an unsigned int instead of a NSNumber. * Player.m ([Player -_ensureOutput]): separate the conditions in two level-1 blocks. Drop output if it's class is different than the one selected in the preferences and set it to nil. Afterward, output is tested against nil and generated if needed. Besides, the output bundle is initialized with the rate and channels if needed. ([Player -setSong:aSong]): send the "prepareDeviceWithChannels:andRate:" message only if output is non-nil and the current song's channels and rate values are not those accounted for output. 2004-09-10 Wolfgang Sourdeau * Player.m ([Player -setSong:aSong]): simplified a lot by removing the code used when playing the song since it's the role of the output bundles to determine whether the device has to be reopened or not. ([Player -play]): the "prepareDeviceWithChannels:andRate:" message is called from the "setSong:" method so we don't need to call it from here anymore. ([Player -_ensureOutput]): * PlaylistController.m ([PlaylistController -_setPlayerSong:]): removed method. ([PlaylistController -_updatePlayer:force]): instead of calling "_setPlayerSong", set the Song directly. If the player is paused, "unpause" it. Reinit the progress slider through the new "_initProgressSliderFromSong:" method. ([PlaylistController -_initProgressSliderFromSong:aSong]): new method to initialize the ProgressSlider depending on the Song length and "seekability". * FormatTester.m ([FormatTester +formatTester]), GeneralPreference.m ([GeneralPreference +instance]), PreferencesController.m ([PreferencesController +preferencesController]): initialize the singleton with the "new" message instead of "alloc" and "init". 2004-09-09 Wolfgang Sourdeau * Output.h: new interface describing the Output protocol, which must now be implemented by the Output bundles in place of the old Player protocol. * Bundles/Esound/Esound.m, Bundles/Esound/Esound.h: made conform the the "Output" protocol, described in Output.h. * Player.h: the "isRunning" method was renamed to "playing". * PlaylistController.m ([PlaylistController -init]): player is now instantiated here, since it is no longer a variable object. ([-_initializePlayer]): this method was removed. * Player.m, Player.h: Player is now a real object with a centralized handling of the streams and the output of their content through the output bundles. This refactoring cleans up the code and reduces the amount of code needed to write an output bundle, which now must conform to the "Output" protocol, instead of "Player". * Format.h: the argument to seek: is called "seconds" now. * Playlist.m ([Playlist -saveToDefaults]): use NSKeyedArchiver to save the playlist. ([Playlist -loadFromDefaults]): use NSKeyedUnarchiver to load the default playlist. This way their metadata no longer need to be read through the song format bundles. This speeds up the loading of Cynthiune for large playlists. * Song.m ([Song -encodeWithCoder:encoder]) ([Song -initWithCoder:decoder]): implementation of the NSCoding protocol for archiving song data. 2004-08-31 Wolfgang Sourdeau * GeneralPreference.m ([GeneralPreference -_initDefaults]): the playlistFormat variable was querying the OutputBundle preference value instead of PlaylistFormat. ([GeneralPreference -preferredOutputClass]): new name for preferredPlayerClass. 2004-08-19 Wolfgang Sourdeau * Song.m ([Song -_refreshSongInfosFromStream:stream]): the Format protocol was changed back. readDuration returns an unsigned int again instead of an NSNumber, so we convert the unsigned int explicitly here now. 2004-08-16 Wolfgang Sourdeau * Bundles/XMMSInput/XMMSInput.m: first attempt at providing an XMMS plugin wrapper bundle. 2004-08-14 Wolfgang Sourdeau * Bundles/FLAC/FLAC.m (writeCallback): moved code of _refillBufferWithData:withSize: here to avoid a useless method call. * Song.m ([Song -_fileWasModified]): test whether a file was modified between two invocations of this method, by checking its date and filesize. ([Song -_readInfos]): use the private method _fileWasModified instead of _infosRead to detect whether to update a Song's metainfos. ([Song -init]): initialize status ivar to SongFileNotFound. ([Song -status]): new accessor. ([Song -_refreshSongInfosFromStream:stream]): new method called when everything else is fine within _readInfos. ([-_readInfos]): only refreshed the Song's status. No error message is passed here. ([-setFilename:aFilename]): don't test the Song format here. ([Song -playlistRepresentation]): compose a correct playlist representation title, depending on the status. 2004-08-12 Wolfgang Sourdeau * Bundles/FLAC/FLAC.m: new output bundle for decoding Free Lossless Audio Codec encoded sound files. 2004-07-27 Wolfgang Sourdeau * CynthiuneController.[mh]: MainController class renamed to CynthiuneController. * CynthiunePopUpButton.m ([CynthiunePopUpButton -addItemWithTitle:aTitle]): removed _updateEnabled method to avoid useless code and a useless method call. * Bundles/Esound/Esound.h: BUF_SIZE set to 176400. * Bundles/OSS/OSS.h: BUF_SIZE set to 176400 (1 second @ 44kHz/16 b/stereo). * PlaylistFile.m ([PlaylistFile _M3UContentWithArray:]): the format string should contain "%@" instead of "%d" for the song durations since they are now NSNumber's. 2004-07-14 Wolfgang Sourdeau * Song.m ([Song -playlistRepresentation]): removed useless "format" variable. 2004-07-13 Wolfgang Sourdeau * Song.m ([Song -duration]): invoke _readInfos before returning the value. ([Song -openStreamForSong]): make stream autoreleased only if it opens correctly, otherwise release it directly. * Bundles/Ogg/Ogg.m ([Ogg +streamTestOpen:fileName]): don't report when the returned NSFileHandle is nil since it could happen with any missing file. * utils.m (strndup): made non-static (for MacOS X only). * Player.m ([-initWithSong:aSong]): removed useless method. ([+playerWithSong:aSong]): removed useless method. 2004-07-07 Wolfgang Sourdeau * utils.m (compareStringsNumerically): new function to compare numerical strings waiting for the GNUstep implementation of the NSNumericSearch option in NSString. * TableViewController.m ([TableViewController +initialize]): nc is now a static global variable instead of an ivar. It is initialized here. * Song.m ([Song -compareByPlaylistRepresentation:aSong]): trackNumber is an NSString, so we cannot really use compare: on it. Instead we use our new utils function "compareStringsNumerically". ([Song -reverseCompareByDuration:aSong]): directly calls the target method instead of passing through our ascending comparison method. * PlaylistController.m ([-stopPlayer:sender]): the player ivar is released in the playerStopped: notification method, which is invoked after "stop" was sent to the player, so there is no need to do it here. ([PlaylistController -playerSongEnded:aNotification]): same thing here. * Player.m ([Player +playerWithSong:aSong]): the "song" variable really should be named "player"... * Bundles/Esound/EsoundPreference.m: class EsoundPreference split from Esound.m. 2004-07-06 Wolfgang Sourdeau * TableViewController.m ([TableViewController -tableView:aTableViewobjectValueForTableColumn:aTableColumnrow:rowIndex]): we call the NSNumber method timeStringValue on duration instead of the old utility timeStringFromSeconds(). * Playlistcontroller.m ([PlaylistController -_updateSelectionTimeDisplay]), ([PlaylistController -playerPlaying:aNotification]): duration is now an NSNumber *, code modified accordingly. * Song.m ([Song -init]): the duration ivar is now a NSNumber. ([Song -compareByPlaylistRepresentation:aSong]): the tracknumber are compared directly using the compare: method provided by the NSNumber class. ([Song -reverseCompareByPlaylistRepresentation:aSong]) ([-reverseCompareByDuration:aSong]): we now use the new reverseComparisonResult() function from utils.h instead of providing our code. * InfoDisplayController.m ([-hideTextFields], [-hideTextFields]): code from this methods removed and directly included within the hide and show methods. ([InfoDisplayController -_setTimerFromUnsignedInt:timer]): new private method to update the timer field with the integer passed as parameter. * CynthiuneFileHandle.m: new child class of NSFileHandle for handling asynchronous I/O on file descriptors. * NSNumberExtensions.m: new module containing extension method to the NSNumber class. ([NSNumber -timeStringValue]): new implementation of old utils.m's timeStringFromSeconds. Removed test on (seconds != 0) since the result will be valid anyway. * utils.m (timeStringFromSeconds): moved to new NSNumberExtensions.m module. (reverseComparisonResult): new function for sorting methods. * Bundles/AudioFile/AudioFile.m ([AudioFile -readDuration]): returns an NSNumber * as expected by the modified Format protocol. * Bundles/Ogg/Ogg.m ([Ogg -readDuration]): returns an NSNumber * as expected by the modified Format protocol. * Bundles/Mod/Mod.m ([-readDuration]): returns an NSNumber * as expected by the modified Format protocol. * Bundles/MP3/MP3.m (seekOffset, testRiffHeader, testMP3Header) (calcInputRemain): changed methods with those names to static inline functions. iRemain passed as pointer so that we can modify it directly. (fillPCMBuffer): removed intermediary variables to make code shorter. ([-readDuration]): returns an NSNumber * as expected by the modified Format protocol. * Format.h: readDuration now returns an NSNumber *. 2004-07-04 Wolfgang Sourdeau * Bundles/MP3/MP3.m (_decodeInputBuffer): new function split from readNextChunk:withSize: to make code cleaner and shorter. Its exact purpose is to decode the data fed to it as parameter and return an the size of the decoded data or an appropriate return code if needed. 2004-06-29 Wolfgang Sourdeau * Bundles/MP3/MP3.m (_translateBufferToPCM, _fillPCMBuffer) (_audioLinearDither): new static functions that replace the methods with the same name, this makes the bundle use a bit less of CPU time since no message resolution is done. * Song.m ([Song -filename]): original purpose put in new method "shortFilename", now replaces "fullFilename". 2004-06-28 Wolfgang Sourdeau * Playlist.m ([Playlist -sortByPlaylistRepresentation:descending]): changed the signature of this method to accept a BOOL parameter indicating whether we want the resulting order to be descending or not. It selects the appropriate comparison method selector accordingly. ([Playlist -sortByDuration:descending]): same thing here. * Song.m ([Song -reverseCompareByPlaylistRepresentation:aSong]): new method that calls compareByPlaylistRepresentation: and reverse the result. ([Song -reverseCompareByDuration:aSong]): same thing here for compareByDuration:. * TableViewController.m ([TableViewController -init]): added two ivars, sortedInPlaylist and sortedInDuration so that we know when to sort the playlist in ascending or descending order. ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): take sortedInPlaylist and sortedInDuration into account when sorting. One should be reversed and the other should be set to NO. ([TableViewController -_acceptDroppedFiles:aFilesListatRow:row]): set both to NO when a song file was dropped. ([TableViewController -_acceptDroppedRows:aRowsListatRow:row]): set both to NO when a song was dragged from within the list and dropped. * Bundles/OSS/OSSPreference.m: class OSSPreference split from OSS.m. 2004-06-22 Wolfgang Sourdeau * Bundles/OSS/OSS.m: entirely rewritten (except for OSSPreferences) to use the asynchronous interface of NSFileHandle instead of threads. * PlaylistController.m ([PlaylistController -_startTimeTimer]): the timer should run in the NSEventTrackingRunLoop too. * Player.h: renamed "startPlayLoop" and "StopPlayLoop" to "play" and "stop" respectively. Made the Player protocol slightly lighter by removing the initWithSong: and audioInit: method prototypes. * Player.m ([Player +load]): initialize the global variable nc here. ([Player -initWithSong:aSong]): new initializer. ([Player +playerWithSong:aSong]): new constructor based on the above. * Bundles/MP3/MP3.m ([MP -readNextChunk:bufferwithSize:bufferSize]): returns -1 when an error occurs. * CynthiuneWindow.m: new subclass of NSWindow designed to let the user whether he wants textured windows or not on MacOS X. * FormatTester.m ([FormatTester -formatClassForFile:file]): Class values can't be "nil" but "NULL". ([FormatTester -formatClassAtIndex:formatNumber]): same thing. * GeneralPreference.m ([GeneralPreference -windowsAreTextured]): new method to test whether windows should be displayed as regular or textured windows. ([GeneralPreference -_initDefaults]): initialized the new toggle related to the textured windows. ([GeneralPreference -texturedWindowsChanged:sender]): new callback method. 2004-06-18 Wolfgang Sourdeau * GeneralPreference.m ([GeneralPreference -_noDefaultOutputModuleAlert]): new method to display an alert panel when no output module is configured. ([GeneralPreference -preferredPlayerClass]): calls the above when playerClass == nil. * PreferencesController.m ([PreferencesController -loadPreferencesWindowAndSelectMenuEntry:entry]): new method. * CynthiunePopUpButton.m ([CynthiunePopUpButton -_updateEnabled]): new class derived from NSPopUpButton, that just test whether there is more than one item in the menu to enable its popup button. 2004-06-17 Wolfgang Sourdeau * Song.m ([Song -isSeekable]): cache the result in an ivar by calling _readInfos. ([Song -_readInfos]): (new name for -readInfos), test if a stream is seekable to avoid multiple openings. ([Song -setFilename:aFilename]): cache the Format class from here to avoid multiple openings and testings, this slightly improves the opening of long playlists. * Player.m: class PlayerBase renamed to Player. * FormatTester.m: -fileType renamed to -formatNumberForFile, -classForFile: renamed to formatClassForFile:, and -classForFileType: renamed to formatClassAtIndex. ([FormatTester -formatClass:formatClassacceptsFileExtension:extension]): new method. ([FormatTester -formatClassForFileExtension:extension]): new method. * Format.h: added a new protocol method "canTestFileHeaders" returning YES if the format bundle has a way of testing the file type by checking its headers. Otherwise FormatTester determines the right bundle to use by looking at its extension. * Bundles/Mod/Mod.m ([Mod +streamTestOpen:fileName]): don't test file loading since the only way we can do this is by loading entire files in memory and by relying on the result returned by ModPlug_Load, which seems to not be always accurate. * Bundles/Mod/Mod.m ([Mod -init]): removed. ([Mod +load]): initialize the library settings just after the Mod bundle is loaded in memory. The "settings" ivar is replaced with a local variable. 2004-06-15 Wolfgang Sourdeau * InfoDisplayController.m ([InfoDisplayController -initializeWidgets]): new method that take cares of initializing the widgets before they get displayed; 2004-06-11 Wolfgang Sourdeau * Bundles/AudioFile/AudioFile.m ([AudioFile -_getAudioFileIDOfType:idTypewithMax:max]): new private method to retrieve meta data tags from the input file. ([-readTitle]): returns the title of the song if found. ([AudioFile -readArtist]): returns the name of the artist of the song if found. * PreferencesController.m ([PreferencesController -loadPreferencesWindow]): test whether the prefs window is visible before displaying it so that many invocations of loadPreferencesWindow will only display the window once. * utils.m (strndup): the algorithm was wrong since it was copying one more char than requested when len was < the length of the string. 2004-06-09 Wolfgang Sourdeau * Song.m ([Song -readInfos]): determine the title from the filename if not present. 2004-06-08 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -panel:sendershouldShowFilename:fileName]): new delegate method to test the filenames case-insensitively; * Song.m ([Song -playlistRepresentation]): use a NSMutableString instead of an NSString. 2004-06-07 Wolfgang Sourdeau * *.m Bundles/*/*.m: renamed _L macro to LOCALIZED since MacOS X already defines such a name in its system libraries. * utils.m (strndup): added our own version of strndup for MacOS X which seems to be lacking it. (NSStandardLibraryPaths): idem. 2004-06-06 Wolfgang Sourdeau * Bundles/AudioFile/AudioFile.m: new module to read uncompressed sound files. ([AudioFile +load]): disable error string output by setting the AF error handler to NULL. * utils.m (convert8to16): new function designed to convert 8 bit sample frames to 16 bit ones. 2004-06-01 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -startPlayer:sender]): startPlaying renamed. ([PlaylistController -stopPlayer:sender]): stopPlaying renamed. * TableViewController.m ([TableViewController -_acceptFilesInPasteboard:pboard]): test whether a dragged filename is a directory before accepting it. * utils.m (fileIsAcceptable): new function, taken from a method with the same name in PlaylistController.m; (fileIsAReadableDirectory): new function to test whether a filename is both readable and a directory; * Bundles/Ogg/Ogg.m ([Ogg -streamOpen:fileName]): if no error is caught, the NSFileHandle should be retained to avoid a crash in the close callback. 2004-05-13 Wolfgang Sourdeau * Bundles/Esound/Esound.m ([Esound -threadWillExit]): release lock only when no thread is active. * Bundles/OSS/OSS.m ([OSS -stopPlayLoop]): release the fileHandle to avoid leaks. ([OSS -threadWillExit]): release lock only when no thread is active. 2004-05-08 Wolfgang Sourdeau * Bundles/Esound/Esound.m ([Esound -threadWillExit]): * Bundles/OSS/OSS.m ([OSS -threadWillExit]): release the lock to avoid a leak. 2004-05-01 Wolfgang Sourdeau * MainController.m ([MainController -validRequestorForSendType:sendTypereturnType:returnType]): on GNUstep, execute the same method on the playlistController to make sure it declares as a valid requestor. MacOSX doesn't need this. * PlaylistController.m ([PlaylistController -writeSelectionToPasteboard:pboardtypes:types]): write selection to pasteboard only when the selection is not empty. ([PlaylistController -validRequestorForSendType:returnType:]): declare as valid requestor only when the selection is not empty. * TableViewController.m ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): invoke saveToDefaults on the playlist when sorted. * Bundles/MP3/MP3.m ([MP -readComment:comString]): when the string id is not found, return @"". * Song.m ([Song -compareByPlaylistRepresentation:aSong]): new comparison method for sorting by artist, album, track number, title and finally by filename. ([Song -compareByDuration:aSong]): new comparison method for sorting by duration. * Playlist.m ([Playlist -sortByDuration]) ([Playlist -sortByPlaylistRepresentation]): new method to sort the playlist. * TableViewController.m ([TableViewController -tableView:tableViewmouseDownInHeaderOfTableColumn:tableColumn]): new method to trigger the sorting of the playlist depending on the column header that was clicked. ([TableViewController -tableView:aTableViewobjectValueForTableColumn:aTableColumnrow:rowIndex]): the "time" column in now identified with "duration", for consistency. 2004-04-30 Wolfgang Sourdeau * Playlist.m ([-loadFromDefaults]): new method to migrate the default playlist in the NSUserDefaults database to the default in the user's Library/Cynthiune. ([-saveToDefaults]): save the playlist in the user's Library/Cynthiune/DefaultPlaylist.pls. * utils.m (invertBytesInBuffer): new function taken from Esound.m to swap bytes in an even-size buffer. (_linesFromContent): work on a copy of the line where the ending character (\n or \r) is replaced with a 0. * Bundles/Mod/Mod.m ([Mod -readNextChunk:bufferwithSize:bufferSize]): invert bytes in buffer on big-endian architectures. * PlaylistFile.m ([PlaylistFile -load]): check that fileLines is not nil, otherwise do not fill the playlist at all. * MainController.m ([MainController -loadBundlesInSystemDirectories:aFileManager]): use NSStandardLibraryPaths(). * utils.m (linesOfFile): return nil if the file could not be opened. * Bundles/Mod/Mod.m ([Mod +bundleClasses]): new libmodplug-based plugin bundle to read MODs, XMs, and many many more ..... 2004-04-29 Wolfgang Sourdeau * PlaylistFile.m ([PlaylistFile -_fillPlaylistWithArray:anArray]): don't release the returned song since it's autoreleased. * Bundles/Ogg/Ogg.m (oggReadFunc,oggSeekFunc, oggCloseFunc, oggTellFunc): new callback function for ov_read_callbacks(). ([Ogg -streamOpen:fileName]): use an NSFileHandle object instead of a FILE pointer, pass it as the datasource argument to ov_read_callbacks(). * Bundles/OSS/OSS.m ([OSSPlayerThread -playerThread:dict]): release the stream when the thread is ending. Same changes as in Esound bundle (see below). * PreferencesController.m ([PreferencesController -setBundleView:bundlePrefsView]): don't release the returned view since it's now autoreleased. * Bundles/Esound/Esound.m ([-dealloc]): host is never used. Release the lock. ([EsoundPlayerThread -setStream:aStream]): retain the stream if non-nil. ([EsoundPlayerThread -flushOutputBuffer:dict]): display an error message related to the esd socket only if it failed three times to reconnect. * Playlist.m ([Playlist -loadFromDefaults]): don't release the returned song since it's now autoreleased. * GeneralPreference.m ([GeneralPreference -preferenceSheet]): autorelease the returned view. * Bundles/MP3/MP3.m ([MP -readComment:comString]): return an UTF8 encoded strings. * Song.m ([Song -displayRepresentation]): renamed to playlistRepresentation. Uses our NSString ivars directly instead of their UTF8 or C representation. ([Song +songWithFilename:aFilename]): return an autoreleased object. ([Song -openStreamForSong]): stream should be autoreleased. * Bundles/OSS/OSS.m ([OSSPlayerThread -dealloc]): new method to make sure the stream is closed and released when the thread is deallocated. * Song.m ([Song -filename]): simplified method by using short conditions rather than an intermediary variable. ([-fullFilename]): idem. ([Song -displayRepresentation]): use UTF8String rather than cString on the string components. * Bundles/*/*.m (general): we define the NSLocalLocalizedString macro for the bundle so that the localized string can be found in the plugin directory structure rather than by finding it in the main bundle. * *.m */*/*.m (general): we now use _L as the localization macro all across the project. This macro calls UTF8String on GNUstep, as well as NSLocalizedString in the main bundle and NSLocalLocalizedString (see above) for the plugin bundles. * utils.m (UTF8String): new method to obtain string declared as UTF-8 for localized strings. This permit us to use UTF8 encoded Localizable.strings files when running in a non-utf8 environment. 2004-04-26 Wolfgang Sourdeau * InfoDisplayController.m ([InfoDisplayController -setReverseTimer:reversed]): accessor to reverseTimer. * PlaylistController.m ([PlaylistController -changeTimeDisplay:sender]): new method to reverse the time display when the timer field is clicked. Originally in InfoDisplayController.m. * MainController.m ([MainController -_parseArguments]): check that no argument beginning with "-" is taken into account. * GeneralPreference.m ([GeneralPreference -_initDefaults]): set the default output plugin to a reasonable default depending on the platform. * PlaylistController.m ([PlaylistController -_removeSelectedSongs]): new method extracted from removeSong: to make code cleaner. 2004-04-25 Wolfgang Sourdeau * TableViewController.m ([TableViewController -tableView:tvwriteRows:rowstoPasteboard:pboard]): MacOSX seems to only accept one type of dragged elements at a time... * Song.m (general): accessors return a copy of the attributes instead of their direct reference. * PlaylistController.m ([PlaylistController -removeSong:sender]): do not release the selection since it is autoreleased. ([PlaylistController -_updatePlayer:force]): do not initialized the player automatically, display a warning if it's equal to nil. 2004-04-24 Wolfgang Sourdeau * Bundles/Esound/Esound.m ([EsoundPlayerThread -_invertBufferBytes]): new method for big endian machines about which libesd does not give a damn. * InfoDisplayController.m ([InfoDisplayController -setTimerFromTotalSeconds:seconds]): new method to display the total given as parameter in the timer field in bold. ([InfoDisplayController -resetTimerField]): empties the timer field and reset its font back to normal. ([InfoDisplayController -timerIsReversed]): return the value of reverseTimer. * PlaylistController.m ([PlaylistController -_resetTimeDisplay:aTimer]), ([PlaylistController -_updateDisplayResetTimer]), ([PlaylistController -_updateSelectionTimeDisplay]): new methods meant to be used when the tableSelectionIsChanging notification is triggered so as to show the total time for the selected songs and to reset the timer field if needed (when the player is not running). * MainController.m ([MainController -_registerArrayOfClasses:classes]): takes the array of classes for each bundle as argument and test all of them with the different protocol managers. * CynthiuneBundle.h: Cynthiune bundle should now include this file to permit the MainController to know all of their classes. Ogg, MP3, Esound, OSS, MacOSXPlayer bundles updated. 2004-04-23 Wolfgang Sourdeau * Song.m ([Song -openStreamForSong], [Song -readInfos]): use "release" instead of "autorelease" to free the stream from memory. * PlaylistFile.m (general): redone the interface to act as a regular class rather than a method provider. * PlaylistController.m (general): removed loadDefaultList and saveDefaultList methods. ([PlaylistController -saveList:sender]): the callback data passed to the sheet is a struct containing the integer for the return code but also a saveDir NSString, so that we can directly save the result to the correct directory. * Playlist.m ([Playlist -dealloc]): new method. ([Playlist -getSongsAsFilenames]): new method to obtain the filenames of the songs listed in the playlist. ([Playlist -loadFromFile:aFilename]): new method that instantiates a PlaylistFile object to load itself from. ([Playlist -saveToFile:aFilename]): new method that instantiates a PlaylistFile object to save itself it. 2004-04-22 Wolfgang Sourdeau * MainController.m ([MainController -_appWindowDidMove]) ([MainController -_playlistWindowDidMove]): new methods extracted from windowDidMove: to make code cleaner. * InfoDisplayController.m ([InfoDisplayController -init]): new method to initialize the class attributes rather than in awakeFromNib. * MainController.m ([MainController -_initWindowsPosition]): new method extracted from awakeFromNib to make code cleaner. 2004-04-20 Wolfgang Sourdeau * TableViewController.h (NSObject): "songlist" attribute renamed to "playlist". * TableViewController.m ([TableViewController -doubleClick:sender]): the song selected in the playlist is set from here rather than in the notification signal in PlaylistController. * MainController.m ([MainController -setPlaylistWindowVisible:isVisible]): new method to replace showPlaylistWindow and hidePlaylistWindow for consistency with the standard *step APIs. * PlaylistController.m (general): references to the playlistWindow and the playlistSwitch moved to the MainController class as well as all associated method (WindowDidMove, WindowDidResize, togglePlaylist, showPlaylistWindow, hidePlaylistWindow, repositionWindow, mainHasNewFrame...). ([PlaylistController -playerSongEnded:aNotification]): we release the player whenever we get at the end of the playlist. ([PlaylistController -stopPlaying:sender]): we release the player when stop is pressed. ([PlaylistController -loadDefaultList]): we don't update the tableview anymore since this method is called only once and before the tableview is initialized. ([PlaylistController -_updatePlayer:force]): we are now the only method to initialize "player" when it does not exist. * Bundles/Esound/Esound.m ([EsoundPlayerThread -dealloc]): close the stream before releasing it. 2004-04-19 Wolfgang Sourdeau * FormatTester.m ([FormatTester +formatTester]): major cleanup, all class methods converted to instance methods. This new method returns a singleton. * TableViewController.m ([TableViewController -_songsInRows:rows]): returns an array of songs associated to the rows contained in the array passed as argument. ([TableViewController -tableView:tvwriteRows:rowstoPasteboard:pboard]): fille the pasteboard with NSFilenamesPboardType elements. ([TableViewController -_acceptFilesInPasteboard:pboard]): new method splitted from -tableView:validateDrop:proposedRow: to test whether the list of files that's being dragged are of a readable format. ([TableViewController -tableView:tvacceptDrop:inforow:rowdropOperation:op]): if the draggingSource is our table view, query the CynthiuneSongListDragType elements from the pasteboard, otherwise query the NSFilenamesPboardType. ([TableViewController -setPlaylist:aPlaylist]): retain and release the received playlist. * Playlist.m ([Playlist -songAtNSIndex:anIndex]): return the song associated to the specified index (passed as NSNumber). * GeneralPreference.m ([GeneralPreference -awakeFromNib]): * Bundles/Esound/Esound.m ([EsoundPreferences -awakeFromNib]): * Bundles/OSS/OSS.m ([OSSPreferences -awakeFromNib]): new method. Translate labelled widgets. * Bundles/MP3/MP3.m ([MP -readStreamMetaData]): test for XING VBR header and compute duration subsequently. 2004-04-18 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP -init]): added init method. 2004-04-16 Wolfgang Sourdeau * MainController.m ([MainController -_initMenuLabels]): the services menu is defined in Gorm. ([MainController -_setStrings:stringsforSubmenu:menuwithOffset:offset]): new method to translate the Windows menu properly at the correct offset after the windows list. * GeneralPreference.m ([GeneralPreference +windowsInformationAreSaved]): new method that returns whether windows location saving is set in the preferences. ([GeneralPreference +saveInformation:aWindowforWindow:windowName]): new method to store the window state in the NSUserDefaults database. ([GeneralPreference +restoreInformation:aWindowforWindow:windowName]): new method as above but to restore and apply that information. ([GeneralPreference -saveWindowsInformationChanged:sender]): new delegate method to set or unset the parameter deciding of the windows location saving mechanism. * PlaylistController.m ([PlaylistController -mainHasNewFrame:aFrame]): initialize the playlist window position from the preferences if required. ([PlaylistController -windowWillClose:aNotification]): save the playlist window position from the preferences if required. ([PlaylistController -_recheckIfIsStuck:aWindow]): new method to make windowDidMove: and windowDidResize: smaller. ([PlaylistController -writeSelectionToPasteboard:pboardtypes:types]): new delegate method to fill the pasteboard buffers with the selected song filenames when a service is invoked. * MainController.m ([MainController -_setStrings:stringsforMenu:menu]): ([MainController -_setStrings:stringsforSubmenu:menu]): new methods splitted from _initMenuLabels; ([MainController -_initServices]): new method to list the services which accept filenames as parameters. ([MainController -awakeFromNib]): restore the main window saved state if required in the preferences. ([MainController -windowWillClose:aNotification]): save the main window position, size and state if required in the preferences. ([MainController -validRequestorForSendType:returnType:]): delegate method to let NSApplication dispatch the services communication messages to the correct object. * TableViewController.m ([TableViewController -getSelectionAsFilenames]): new method to return the filename of the songs that are selected. * PlaylistTableView.m ([PlaylistTableView -dragImageForRows:dragRowsevent:dragEventdragImageOffset:dragImageOffset]): new subclass of NSTableView for providing the correct icon when one or more songs are being dragged... 2004-04-13 Wolfgang Sourdeau * TableViewController.m ([TableViewController -_timeColumnWidth]): new method to size the time column progammatically depending on the translation for "Time". ([TableViewController -addNeededColumns]): removed useless "aFrame" var. * PlaylistController.m ([PlaylistController -_initPlaylistPopups]): the NSPopupButton's are repositioned after their resizing. 2004-04-12 Wolfgang Sourdeau * MainController.m ([MainController -awakeFromNib]): the main window is now centered before being displayed. * GeneralPreference.m ([GeneralPreference -contentView]): * Bundles/Esound/Esound.m ([EsoundPreferences -contentView]): * Bundles/OSS/OSS.m ([OSSPreferences -contentView]): closing the bundle window is useless. * PreferencesController.m ([PreferencesController +loadPreferencesWindow]): make prefs a global variable so that we can control whether the prefs window is already displayed. 2004-04-11 Wolfgang Sourdeau * Bundles/MacOSX/MacOSXPlayer.m (manage_oggproblem): removed obsoleted method. ([MacOSXPlayer -init]): initialize timer, totalBytes and bytesPerSec(new) to 0. ([-streamRaiseOpenErrorException:errMsg]): removed obsoleted method. ([MacOSXPlayer -timer]): lastTickSeconds attribute renamed to "timer". * PlaylistController.m ([PlaylistController -_initPlaylistPopups]): call sizeToFit on our popups so that we make sure their widths is correct after localization. ([PlaylistController -_runDirOpenPanel:oPanel]), ([PlaylistController -_runOpenPanel:oPanel]): use beginSheetForDirectory:file:types:modalForWindow:modalDelegate:didEndSelector:contextInfo: on GNUstep and MacOSX. * MainController.m ([MainController -registerBundleClass:aBundle]): new method split from loadBundlesForPath:withFileManager: 2004-04-10 Wolfgang Sourdeau * PreferencesController.m ([-writeDictionaryForClass:aClass]): removed method. * Bundles/Ogg/Ogg.m ([Ogg -streamOpen:fileName]): replaced #include's with #import's. Import external files before Ogg.h. * Bundles/Ogg/Ogg.h: removed imports from file header. * PlaylistFile.m ([PlaylistFile +_parsePLSFile:fileLines]): use the C api to determine the beginning of the line instead of NSString's. * Bundles/MacOSX/MacOSXPlayer.m: updated to the NEW bundle and player protocols. * Bundles/MP3/MP3.m ([MP +_testMP3Header:buffer]): use BYTE_ORDER instead of __BYTE_ORDER. * GeneralPreference.m ([GeneralPreference -contentView]): * Bundles/OSS/OSS.m ([OSSPreferences -contentView]): * Bundles/Esound/Esound.m ([EsoundPreferences -contentView]): use "release" instead of "dealloc" to avoid crashing. * TableViewController.m ([NSTableView -dragImageForRows:event:dragImageOffset:]): override this method to display the "note(s)" drag icon. ([TableViewController -awakeFromNib]): add self as an observer for the NSViewDidFrameNotification of our parent's parent's, the scrollView. ([TableViewController -scrollViewDidResize:aNotif]): new method to resize our columns when needed. ([TableViewController -addNeededColumns]): add a title to identify our columns. 2004-04-05 Wolfgang Sourdeau * PreferencesController.m ([PreferencesController -setBundleView:bundlePrefsView]): different but better algorithm for displaying the prefs page. * GeneralPreference.m ([GeneralPreference -initializeSelector]): when no output bundle was found, display "None" and disable the widget. ([GeneralPreference -initializeWithDict:aDict]): initialize the defaults output bundle from the selector only *if* the bundle list is not empty. * MainController.m ([MainController -_initMenuLabels]): menus on MacOSX and GNUstep are different so we have to write a double-method. 2004-03-29 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP +streamTestOpen:fileName]): if the file can't be opened, returns 'NO'. * MainController.m ([MainController -loadBundlesInLocalDirectory:aFileManager]): computes the Bundle directory for the Application directory instead of hard-coding it. * Bundles/MP3/MP3.m ([MP +_testMP3Header:buffer]): added support for MPEG 2.5 files. 2004-03-28 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP +_seekOffset:_f]): new method to return the first-non zero character of a stream. ([MP +_testRIFFHeader:bufferinFile:_fwithOffset:offset]): new method that tests whether a RIFF file contains an MP3 stream. ([MP +_testMP3Header:buffer) new method split from +streamTestOpen: to test a basic MPEG audio header. 2004-03-22 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP +streamTestOpen:fileName]): we do now provide support for MP2 and MPEG 2 Layer 2/3 streams. "So many standards to choose from...". 2004-02-27 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP +streamTestOpen:fileName]): we do now provide support for RIFF-encapsulated MPEG and MPEG Layer 3 streams. 2004-02-18 Wolfgang Sourdeau * Bundles/Esound/Esound.m ([EsoundPreferences -selectTcpBtn:sender]): set the text fields visibily enabled. ([EsoundPreferences -selectUnixBtn:sender]): set the text fields visibily disabled. 2004-02-15 Wolfgang Sourdeau * MainController.m ([MainController -_initMenuLabels]): set submenu titles too. 2004-02-14 Wolfgang Sourdeau * utils.m (logRect): new function to display an NSRect's coordinates. * PlaylistController.m ([PlaylistController -saveDefaultList]): synchronize defaults when saving playlist. ([PlaylistController -_addSongsFromOPanel:oPanel]): update default playlist when new files are added. ([PlaylistController -_addDirSongsFromOPanel:oPanel]): idem. ([PlaylistController -removeSong:sender]): idem, when removing songs. * PreferencesController.m ([PreferencesController +loadPreferencesWindow]): initialize prefs window title for I18N; ([PreferencesController -setBundleView:bundlePrefsView]): new way of positioning preference subviews. * GeneralPreference.m ([GeneralPreference +registerPlayerClass:aClass]): display the warning regarding bundles only when it's real. * MainController.m ([MainController -_initMenuLabels]): new method to initalize i18nized menu labels. 2004-02-13 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -windowDidResize:aNotification]): new method to avoid positioning window disgracefully after it's resized (with isStuck is YES). 2004-02-05 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -_updatePlayer:force]): updatePlayer now takes a BOOL argument 'force'. Also, was renamed to "_updatePlayer:". ([PlaylistController -tableDoubleClick:aNotification]): force updatePlayer to restart the current song when double-clicked. ([PlaylistController -playerSongEnded:aNotification]): when repeat is on, do repeat the song even if it's the only one. Otherwise, reinitialize the playlist position and stop. 2004-01-20 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -removeSong:sender]): don't go to the next song when the song being played is not selected. ([PlaylistController -_initButtonImages]): new shuffle button; 2004-01-19 Wolfgang Sourdeau * MainController.m ([MainController -parseArguments]): new method to add song filenames given as command-line parameters to the playlist; * PlaylistController.m ([PlaylistController -removeSong:sender]): fixed a subtle bug that was preventing the shuffle mode from working properly. When deleting a song, the next song in the real list, rather than in the shuffle list, was selected. ([PlaylistController -_initButtonImages]): new repeatButton taken into ccount. 2004-01-16 Wolfgang Sourdeau * Bundles/Ogg/Ogg.m ([Ogg +streamTestOpen:fileName]): don't display error when the file tested is just not a vorbis stream. 2004-01-14 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -removeSong:sender]): test if playlist is non-empty before removing any element. * Bundles/dummy/dummy.m ([dummyPlayerThread -playerThread:dict]): don't crash when stopping player. * Bundles/MP3/MP3.m ([MP +streamTestOpen:fileName]): implement a real test on file headers for both little- and big-endian machines. 2004-01-12 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -_fileIsAcceptable:fileName]): new method to test whether a file exists, is a regular file or a symlink to a regular file. ([PlaylistController -_addSongsFromArray:songArraywithDir:aDirectory]): accepts an optional directory name to prepend to the filenames. * Bundles/dummy/dummy.m: new output bundle, outputting to no device for debugging purpose. * PlaylistController.m ([PlaylistController -_initButtonImages]): added "playlist-show" and "playlist-hide" as button images. 2004-01-11 Wolfgang Sourdeau * Bundles/MP3/MP3.m: copyright infos updated + portability #ifdef's. * MainController.m: General: portability "#ifdef NeXT_PDO"'s and related code. ([MainController -loadBundlesInLocalDirectory:aFileManager]): simplified local bundle loading for Openstep/Win32. * Bundles/Ogg/Ogg.m ([Ogg +errorText:error]): new class method to replace lastErrorText. Used in streamTestOpen:. General: portability "#ifdef NeXT_PDO"'s and related code. 2004-01-06 Wolfgang Sourdeau * Bundles/Ogg/Ogg.m ([Ogg -streamClose]): it seems ov_clear already calls free(). 2003-12-31 Wolfgang Sourdeau * Song.m ([Song -openStreamForSong]): uses NSFileManager's fileExistsAtPath: method instead of access(). 2003-12-30 Wolfgang Sourdeau * Player.h: togglePause and toggleMuted changed respectively to setPaused/paused and setMuted/muted. 2003-12-29 Wolfgang Sourdeau * CynthiuneInfo.plist: release 0.9. * GNUmakefile (APP_NAME): added VERSION variable and set it to 0.9. * Bundles/Esound/Esound.m ([EsoundPlayerThread -playerThread:dict]): check streamToRelease and close + release if non-nil. ([EsoundPlayerThread -setStream:aStream]): if streamToRelease is already allocated, we wait for the thread loop to release it. * Bundles/OSS/OSS.m: same as above. * PlaylistController.m ([PlaylistController -songCursorChange:sender]): update the timer depending on the chosen position so that the user see an indication of where (s)he is within the song. ([PlaylistController -toggleMute:sender]): initialize the player if it's not running so that we can mute it even when nothing has played yet. ([PlaylistController -songCursorChange:sender]): the time throttle is really active now. ([PlaylistController -updatePlayer]): display info for the actual player song so that we don't show invalid informations since we could be called twice if a stream is invalid. * Playlist.m ([Playlist -insertSong:newSong:aPos]): increase currentSongNumber when aPos <= to it. ([Playlist -moveSongsWithRows:aRowsListto:newPos]): save current song and restore currentSongNumber at the end. * Bundles/Esound/Esound.m ([EsoundPlayerThread -seek:aPos]): same as below. * Bundles/OSS/OSS.m ([OSSPlayerThread -seek:aPos]): new method: seek in the stream and update totalBytes. * Bundles/Ogg/Ogg.m ([Ogg -isSeekable]): we call ov_seekable and return its result. ([Ogg -seek:aPos]): Ogg's are seekable. * Bundles/MP3/MP3.m ([MP -isSeekable]): pseudo method always returning YES. ([MP -seek:aPos]): MP3's are seekable. * Player.h: impose a new "seek:" method to Player classes. * Format.h: impose new "- isSeekable" and "seek:" methods to Format classes. * Song.m ([Song -readInfos]): don't read infos of file that can't be opened. ([Song -isSeekable]): new method to verify that the position in the song can be changed. * MainController.m ([MainController -appWindow]): new method to return the player window. * GeneralPreference.m ([GeneralPreference -playlistFormatChanged:sender]): new method/callback to save the specified playlist format. 2003-12-28 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -updatePlayer]): update the progressSlider only at song change. * TableViewController.m ([TableViewController -_acceptDroppedRows:aRowsListatRow:row]): reselect all previously selected songs, not just the first and last ones. * PlaylistController.m ([PlaylistController -windowDidMove:aNotification]): fixed windows stickyness by testing the condition that applies for each axis. ([PlaylistController -removeSong:sender]): sets the currentSongNumber to the first selected song or, if the player is running, to the song that is being played. ([PlaylistController -playerStopped:aNotification]): don't select the first song when stopped playing. 2003-12-27 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -saveList:sender]): defaults entry for saving playlists is now "DefaultPlaylistDirectory" instead of "NSDefaultSaveDirectory" for exactness. * utils.m (linesOfFile): refactoring: previous method "+_linesFromContentL" from PlaylistFile.m. Added proper copyright notice. * PlaylistFile.m ([PlaylistFile +savePlaylist:anArraytoFile:aFile]): new method to convert and save the array of songs. ([PlaylistFile +_PLSContentWithArray:anArray]) and ([PlaylistFile +_M3UContentWithArray:anArray]): new methods to convert an array of songs, return an NSString with the playlist in the appropriate format. ([PlaylistFile +_linesFromContent:content]): manage DOS-formatted files. * GeneralPreference.m ([GeneralPreference +preferredPlaylistFormat]): new method to determine the user's preferred playlist format to use when saving the playlist. * PlaylistController.m ([PlaylistController -saveList:sender]): new method to save current playlist. ([PlaylistController -init]): new attribute "playlistFilename" set to nil. * Bundles/OSS/OSS.m: aligned code with recent changes in Esound bundle. * Bundles/Esound/Esound.m ([Esound -setSong:aSong]): "seconds" attribute no longer used, computed when getSeconds is called. * PlaylistController.m ([PlaylistController -awakeFromNib]): disable progressSlider by default. ([PlaylistController -updatePlayer]): en-/disable the progressSlider depending on the song "seekability". * Song.m ([Song -isSeekable]): new method to determine whether the cursor can be moved within the song. ([Song -seek:aPos]): new method to change the time cursor. * Bundles/OSS/OSS.m ([OSS -timer]): compute time when called. * Song.m ([Song +songWithFilename:aFilename]): new method to alloc and init a new song at the same time; 2003-12-20 Wolfgang Sourdeau * TableViewController.m ([TableViewController -tableView:aTableViewobjectValueForTableColumn:aTableColumnrow:rowIndex]): if title string is empty, only put the song's filename between brackets. * PlaylistController.m ([PlaylistController -showPlaylistWindow]): use [w orderFront] rather than [w orderBack]; ([PlaylistController -addSong:sender]) and ([PlaylistController -removeSong:sender]): compare to translated label titles. ([PlaylistController -awakeFromNib]): initalize progressSlider. ([PlaylistController -switchToSong:aSongplayerIsRunning:running]), ([PlaylistController -playerPlaying:aNotification]), ([PlaylistController -playerStopped:aNotification]), ([PlaylistController -playerSongEnded:aNotification]): set progressSlider's max value to relevant value depending on the case (new song or song stopped). ([PlaylistController -playerUpdateTimer:aNotification]): update progressSlider's value. * MainController.m ([MainController -openFile:anObject]): new method to add a new song to the playlist from the Document->open menu. * InfoDisplayController.m ([InfoDisplayController -show]): set translated image name (Localizable.strings). ([InfoDisplayController -updateInfoFieldsFromSong:aSong]): really set title from deduced value rather than directly from [aSong title]. 2003-12-19 Wolfgang Sourdeau * TableViewController.m ([TableViewController -addNeededColumns]): added a column for song duration time; * InfoDisplayController.m ([InfoDisplayController -changeTimeDisplay:sender]): activated switching of timer display (forward/backward). * utils.m: helper functions. (timeStringFromSeconds): code previously found in InfoDisplayController. * Format.h: changed typing for readChannels, readRate. Added readDuration method, to return the stream length; 2003-12-18 Wolfgang Sourdeau * Playlist.m ([Playlist +_linesFromContent:content]): new singleton class to read .pls and .m3u playlist files. * Bundles/Esound/Esound.m ([EsoundPlayerThread -flushOutputBuffer:dict]): reinit esdDsp from the dict at each iteration to avoid writing to a closed filedesc. * PlaylistController.m ([PlaylistController -togglePlaylist:sender]): display or hide the new playlist window; * TableViewController.m ([TableViewController -init]): as a child of playlistcontroller, tvc no longer has the playlist outlet and now forwards the TableView clicks to its delegate. * PlaylistController.h: new outlet: TableViewController, for which we act as a delegate. * PlaylistController.m ([PlaylistController -windowDidMove:aNotification]): implemented window magnetism. 2003-12-15 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -playerStopped:sender]): release player when stopped, so that we can choose another one. * Bundles/MP3/MP3.m ([MP -readNextChunk:bufferwithSize:bufferSize]): loop when steam.error == MAD_ERROR_LOSTSYNC. * PlaylistController.m ([PlaylistController -playerPaused:sender]): set button state only from delegate. functions. 2003-12-14 Wolfgang Sourdeau * Bundles/MP3/MP3.m ([MP +acceptedFileExtensions]): accepts .mpa, .mpga, .mpega files + uppercases. 2003-12-13 Wolfgang Sourdeau * OutputPreference.m ([OutputPreference +initializeList]): new preference module and handler for selecting the output bundle to use. * MainController.m ([MainController -loadBundlesForPath:aPathwithFileManager:aFileManager]): bundle conform to the "Player" protocol are registered with the OutputPreference class. * InfoDisplayController.m ([InfoDisplayController -show]): only use on NSImageView now for active and inactive splash images. ([InfoDisplayController -changeTimeDisplay:sender]): new stub action connected to songTimerField; * Bundles/OSS/OSS.m: added OSSPreferences class, copied from Esound. * Bundles/OSS/GNUmakefile: added OSSPreferences.gorm to the RESOURCE_LIST 2003-12-12 Wolfgang Sourdeau * MainController.m ([MainController -loadBundlesForPath:aPathwithFileManager:aFileManager]): scan for bundles. * PreferencesController.[hm]: new controller for Preferences.gorm. * Preference.h: new Preference protocol for classes implementing preference sheet handling. * NEWS: updated with the new nice features we've added recently. * Bundles/Esound/Esound.m: new Esound output class, based on OSS. With the same thread model and a controller class for its preference panel (EsoundPreferences.gorm). * Bundles/OSS/OSS.m: old GNUstepPlayer.[hm]. the OSS class is a childclass of PlayerBase and conforms to the Player and Preference protocol. * Bundles/Ogg/Ogg.[hm]: old OggStream.[hm] * Bundles/MP3/MP3.m ([MP -translateBufferToPCM:bufferwithSize:bufferSize]): compute the difference between buffer returned by libmad and the player buffer, to avoid a buffer overrun. * Bundles/MP3/MP3.[hm]: old MP3Stream.[hm] * InfoDisplayController.m ([InfoDisplayController -updateInfoFieldsFromSong:aSong]): field code simplified by the splitting of the album and artist fields. ([InfoDisplayController -awakeFromNib]): We use boldSystemFont for song name and systemFont for the rest. * InfoDisplayController.[h,m]: album and artist fields are not splitted from each other. We don't use a tabview anymore, just overlapped images. * GNUmakefile.preamble: link to libmcheck (malloc checks) when $(debug) is set to 'yes'. References to format libraries and headers moved out. * GNUmakefile: added new Bundles to the list of SUBPROJECTS. Added Images/eject.tiff to the list of RESOURCE_FILES. * FormatTester.m: is now feeded decoder classes (conform to the Format protocol) and their extensions by new PreferencesController class; * Format.h: Format protocol. For decoder modules. 2003-12-08 Wolfgang Sourdeau * Song.m ([Song -readInfos]): we retain returned NSStrings here now rather than in the formats readers. * GNUstepPlayer.m: GNUstepPlayer is a child class of PlayerBase and responds to "Player" protocol. Common methods moved into Player.m. * Player.m ([PlayerBase -init]): new. Implementation of PlayerBase class. * Player.h: definition of "Player" protocol and PlayerBase class. 2003-12-04 Wolfgang Sourdeau * Song.m ([Song -openStreamForSong]): test if the Song file is still accessible, return nil if not so that we don't crash. * PlaylistController.m ([PlaylistController -TableDoubleAction:sender]): we use switchToSong for coherence. * GNUstepPlayer.m ([PlayerThread -threadDidStart:aDict]): use NSDebugLog() instead of NSLog(). ([PlayerThread -threadWillExit:aDict]): ditto. ([PlayerThread -playerThread:dict]): if the thread exits with (stream == nil), it means the song ended (even if it didn't even start playing). * FormatTester.m ([FormatTester +classForFile:filePath]): fixed sizeof() to return the correct amount of elements in the format list. 2003-12-03 Wolfgang Sourdeau * GNUstepPlayer.m ([PlayerThread -flushOutputBuffer:dspFd]): reenabled this method for clarity. * PlaylistController.m ([PlaylistController -switchToSong:aSongTVCIs:tvcplayerIsRunning:running]): don't stop/restart the player when changing song. Also, we now update the display with the new song's informations. ([PlaylistController -playerSongEnded:sender]): stop playloop if no song is left in the list. This let the thread exit and reset the GUI. 2003-12-02 Wolfgang Sourdeau * PlaylistController.m ([PlaylistController -addSong:sender]): play with NSDefaultDirectory to remember last opened directory; 2003-11-28 Wolfgang Sourdeau * MP3Stream.m ([MP -audioLinearDither:samplewithDither:dither]): dithering method copied from madplay. ([MP -translateBufferToPCM:bufferwithSize:bufferSize]): method copied from madplay: audio_pcm_s16le. ([MP -calcInputRemain]): new method to clarify code. ([MP -readStreamMetaData]): read first valid frame and deduce channels and rate from it. ([MP -streamInit]): invoke readStreamMetaData. ([MP -translateBufferToPCM:bufferwithSize:bufferSize]): 'offset' renamed to 'start', 'max' to 'limit'. ([MP -fillPCMBuffer:bufferwithStart:startandLimit:limit]): new method extracted from -translateBufferToPCM:bufferwithSize:bufferSize to clarify code. * MacOSXPlayer.m (inputCallback): ref to OggStream removed. * GNUstepPlayer.m ([Player -handleReadProblem:bytesRead]): manageOggProblem renamed. 2003-11-26 Wolfgang Sourdeau * FormatTester.m ([FormatTester +fileTypeKnown:filePath]): changed to a class method. * PlaylistController.m ([PlaylistController -_addSongsFromOPanel:oPanel]): private method to make addSong lighter. ([PlaylistController -addSong:sender]): accept mp3 as filetype. 2003-01-06 Wolfgang Sourdeau * InfoDisplayController.m ([InfoDisplayController -updateInfoFieldsFromSong:aSong]): ditto. * TableViewController.m ([TableViewController -tableView:aTableViewobjectValueForTableColumn:aTableColumnrow:rowIndex]): enhanced display for incomplete song metadata. * InfoDisplayController.m ([InfoDisplayController -updateInfoFieldsFromSong:aSong]): do not display a dash whenever one of the album name or artist name is missing. 2003-01-02 Wolfgang Sourdeau * main.m: release 0.4 * MainController.m ([MainController -windowWillClose:aNotification]): using a static BOOL, test wether the close notification has been called to avoid infinite looping and a SIGSEGV (especially on GNUstep). * *.[hm]: updated copyright info with year 2003. * OggStream.m ([OggStream -readChannels]): new function. ([OggStream -readRate]): new function. * GNUstepPlayer.m ([Player -playIteration:sender]): fill the whole buffer first and write it in one shot to avoid too many write()'s. ([Player -setSong:aSong]): added code to make it able to read one channel songs. ([Player -audioInit]): tune the audio dsp. 2002-12-25 Wolfgang Sourdeau * Initial release. cynthiune.app-0.9.5/BundleManager.m0000644000175000017500000001251110257425336016543 0ustar gurkangurkan/* BundleManager.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import #import "FormatTester.h" #import "GeneralPreference.h" #import "PreferencesController.h" #import "BundleManager.h" static NSNotificationCenter *nc = nil; @implementation BundleManager : NSObject + (void) initialize { nc = [NSNotificationCenter defaultCenter]; } + (BundleManager *) bundleManager { static BundleManager *bundleManager = nil; if (!bundleManager) bundleManager = [BundleManager new]; return bundleManager; } // - (id) init // { // if ((self = [super init])) // { // bundles = [NSMutableArray new]; // } // return self; // } // - (void) dealloc // { // [bundles release]; // [super dealloc]; // } - (void) _registerClass: (Class) class { PreferencesController *preferencesController; FormatTester *formatTester; GeneralPreference *generalPreference; preferencesController = [PreferencesController preferencesController]; formatTester = [FormatTester formatTester]; generalPreference = [GeneralPreference instance]; if ([class conformsToProtocol: @protocol(Preference)]) [preferencesController registerPreferenceClass: class]; if ([class conformsToProtocol: @protocol(Format)]) [formatTester registerFormatClass: class]; if ([class conformsToProtocol: @protocol(Output)]) [generalPreference registerOutputClass: class]; // if ([class conformsToProtocol: @protocol(Metadata)]) // [self registerMetadataClass: class]; } - (void) loadBundlesForPath: (NSString *) path withFileManager: (NSFileManager *) fileManager { NSEnumerator *files; NSString *file, *bundlePath; NSBundle *bundle; files = [[fileManager directoryContentsAtPath: path] objectEnumerator]; file = [files nextObject]; while (file) { bundlePath = [path stringByAppendingPathComponent: file]; bundle = [NSBundle bundleWithPath: bundlePath]; if (bundle) { [nc addObserver: self selector: @selector (bundleDidLoad:) name: NSBundleDidLoadNotification object: bundle]; [bundle load]; } file = [files nextObject]; } } - (void) bundleDidLoad: (NSNotification *) notification { NSDictionary *dictionary; NSEnumerator *classNames; NSString *className; dictionary = [notification userInfo]; classNames = [[dictionary objectForKey: NSLoadedClasses] objectEnumerator]; className = [classNames nextObject]; while (className) { [self _registerClass: NSClassFromString (className)]; className = [classNames nextObject]; } [nc removeObserver: self name: NSBundleDidLoadNotification object: [notification object]]; } - (void) loadBundlesInSystemDirectories: (NSFileManager *) fileManager { NSEnumerator *paths; NSString *path; paths = [NSStandardLibraryPaths () objectEnumerator]; path = [paths nextObject]; while (path) { [self loadBundlesForPath: [path stringByAppendingPathComponent: @"Cynthiune"] withFileManager: fileManager]; path = [paths nextObject]; } } #if defined (GNUSTEP) && defined (LOCALBUILD) /* GNUstep */ - (void) loadBundlesInLocalDirectory: (NSFileManager *) fileManager { NSString *sourceDir, *extBundlesDir, *file; NSEnumerator *files; NSArray *allFiles; sourceDir = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent]; extBundlesDir = [sourceDir stringByAppendingPathComponent: @"Bundles"]; allFiles = [fileManager directoryContentsAtPath: extBundlesDir]; files = [allFiles objectEnumerator]; file = [files nextObject]; while (file) { [self loadBundlesForPath: [extBundlesDir stringByAppendingPathComponent: file] withFileManager: fileManager]; file = [files nextObject]; } } #endif /* GNUSTEP && LOCALBUILD */ - (void) loadBundles { NSFileManager *fileManager; fileManager = [NSFileManager defaultManager]; #ifdef GNUSTEP #ifdef LOCALBUILD [self loadBundlesInLocalDirectory: fileManager]; #endif /* LOCALBUILD */ #else [self loadBundlesForPath: [[NSBundle mainBundle] builtInPlugInsPath] withFileManager: fileManager]; #endif /* GNUSTEP */ [self loadBundlesInSystemDirectories: fileManager]; } @end cynthiune.app-0.9.5/CynthiuneWindow.m0000644000175000017500000000304410412073262017164 0ustar gurkangurkan/* CynthiuneWindow.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import "GeneralPreference.h" #import "CynthiuneWindow.h" @implementation CynthiuneWindow : NSWindow #ifndef GNUSTEP - (id) initWithContentRect: (NSRect) contentRect styleMask: (unsigned int) styleMask backing: (NSBackingStoreType) bufferingType defer: (BOOL) flag { if ([[GeneralPreference instance] windowsAreTextured]) styleMask |= NSTexturedBackgroundWindowMask; else styleMask &= ~NSTexturedBackgroundWindowMask; return [super initWithContentRect: contentRect styleMask: styleMask backing: bufferingType defer: flag]; } #endif @end cynthiune.app-0.9.5/CynthiunePauseButton.m0000644000175000017500000000520610255322242020170 0ustar gurkangurkan/* CynthiunePauseButton.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "CynthiunePauseButton.h" @implementation CynthiunePauseButton : NSButton - (id) init { if ((self == [super init])) { animationTimer = nil; primaryImage = nil; secondaryImage = nil; animate = NO; animationStatus = NO; } return self; } - (void) dealloc { if (primaryImage) [primaryImage release]; if (secondaryImage) [primaryImage release]; } - (void) _animate { if (animationStatus) { [super setImage: primaryImage]; animationStatus = NO; } else { [super setImage: secondaryImage]; animationStatus = YES; } } - (void) _startAnimation { [super setImage: secondaryImage]; animationStatus = YES; animationTimer = [NSTimer scheduledTimerWithTimeInterval: 0.65 target: self selector: @selector (_animate) userInfo: nil repeats: YES]; [animationTimer explode]; } - (void) _stopAnimation { [animationTimer invalidate]; animationTimer = nil; [super setImage: primaryImage]; } - (void) setImage: (NSImage *) image { [super setImage: image]; SET (primaryImage, image); } - (void) setAlternateImage: (NSImage *) image { SET (secondaryImage, image); } - (void) setState: (int) state { if ([self isEnabled]) { if (state) { if (!animate) { [self _startAnimation]; animate = YES; } } else { if (animate) { [self _stopAnimation]; animate = NO; } } } [super setState: state]; } @end cynthiune.app-0.9.5/README0000644000175000017500000001026310407757457014554 0ustar gurkangurkanCynthiune (march 2006) ========= What is Cynthiune? ------------------ Cynthiune is a free software and romantic music player for GNUstep and MacOSX. I wrote it originally as a christmas gift to a girl that I liked because she could not listen to music on her Mac with a free program. Since then, I decided to make it public and add even more features to make it a complete and useable media player. For the moment, it looks pretty much like XMMS, Winamp and similar software. Even though it has far less features than those, the essential components of a usable and user-friendly program are there in my opinion. From a programmatic point-of-view, I have decided to write a program that is released only when considered bug-free. The free software community lacks, IMnsHO, a sense of quality that makes its programs nearly useless to lambda users. Not only is it useless, but I think it also gives free software a bad reputation. The principle of freedom in "free software" is fundamental to me, but it has to be reachable not only by some sort of geeky elite. There is no point in telling users that since they have the freedom to enhance those programs, they must fix them if they want to use them. Releasing a program with too many bugs is of no use and is likely not to interest other fellow programmers in the community either. On the other hand, Apple has published an interesting program called "iTunes". Of course, it is not free software but it does implement interesting ideas that I would like to include in Cynthiune. For example: CD burning, complete playlist management, etc... Personally I find its user interface to be not as user-friendly as it could be. My plan is thus to take advantage of my own programming skills and sense of aesthetics (and ergonomy) to try to write something a little bit different, inspired both by XMMS/Winamp and iTunes. Cynthiune is thus currently very basic but its core design is starting to be extensible enough that it will not be too much trouble to enhance it. How to build it... ------------------ 1) on GNUstep: If all your library requirements are fulfilled (see below). Just type "make && make install". If you want to run Cynthiune from the source directory, you would have to type "make local-build=yes". This way, the linker will be forced against to link Cynthiune.app against the copy of the Cynthiune framework that was built under the source directory. Whenever you are missing a library or if a specific file-format does not interest you, you can disable the build of its bundle by typing "make disable-[bundle]=yes" (where [bundle] is the name of the bundle you wish to avoid). For the available values, have a look at the GNUmakefile of the top source directory. 2) on MacOS X: Simply open the Cynthiune.pbproj file and build it. You might want to disable certain bundles if you don't have the required libraries. Anyway a pre-compiled binary for MacOS X 10.2 and up is always available from the Cynthiune website. So you should not bother with that unless you are a programmer. Requirements ------------ The extra libraries needed for Cynthiune are: mp3 support: - libid3tag and libmad 0.15.0b (http://sourceforge.net/project/showfiles.php?group_id=12349) ogg support: - libvorbis 1.0.1 and libogg 1.1.0 (http://www.vorbis.com/download_unix_1.0.1.psp) musepack support: - libmpcdec 1.2 (http://www.musepack.net/index.php?pg=src) mod, xm and all the possible tracker formats out there: - libmodplug 2.04 (http://modplug-xmms.sourceforge.net) wav, au and many uncompressed sound formats: - libaudiofile (http://www.68k.org/~michael/audiofile/) flac support: - libflac (http://flac.sourceforge.net/) wma and asf support: - libavifile (http://avifile.sourceforge.net/) esound output support: - libesd (http://www.tux.org/~ricdude/download.html) taglib support (required for mp3 and musepack): - http://ktown.kde.org/~wheeler/taglib/ MusicBrainz support (required): - libmusicbrainz (http://www.musicbrainz.org) But if you are using Debian GNU/Linux, you are lucky already ;). Stay thiuned! Copyright --------- Cynthiune is copyright (C) 2002-2006 Wolfgang Sourdeau The application icon is copyright (C) 2004 Mivil Deschnes cynthiune.app-0.9.5/PlaylistView.h0000644000175000017500000000241210412142331016445 0ustar gurkangurkan/* PlaylistView.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PLAYLISTTABLEVIEW_H #define PLAYLISTTABLEVIEW_H #import #define CynthiuneEnterKey 0x000d @interface PlaylistView : NSTableView { NSComparisonResult selectionDir; } @end @interface NSObject (PlaylistViewDelegate) - (void) playlistViewActivateSelection: (PlaylistView *) view; - (void) playlistViewDeleteSelection: (PlaylistView *) view; @end #endif /* PLAYLISTTABLEVIEW_H */ cynthiune.app-0.9.5/English.lproj/0000755000175000017500000000000010413173130016361 5ustar gurkangurkancynthiune.app-0.9.5/English.lproj/Localizable.strings0000644000175000017500000001504410345621253022231 0ustar gurkangurkan/* Application menu */ "Info" = "Info"; "Playlist" = "Playlist"; "Songs" = "Songs"; "Player" = "Player"; "Windows" = "Windows"; "Window" = "Window"; "Tools" = "Tools"; "Services" = "Services"; "Hide" = "Hide"; "Hide Cynthiune" = "Hide Cynthiune"; "Hide Others" = "Hide Others"; "Show All" = "Show All"; "Quit" = "Quit"; "Quit Cynthiune" = "Quit Cynthiune"; /* Info submenu */ "Info Panel..." = "Info Panel..."; "About Cynthiune..." = "About Cynthiune..."; "Preferences..." = "Preferences..."; "Send A Bug Report..." = "Send A Bug Report..."; "Help..." = "Help..."; "Help" = "Help"; "Cynthiune Help" = "Cynthiune Help"; /* Playlist submenu */ "Open..." = "Open..."; "New" = "New"; "Save..." = "Save..."; "Save As..." = "Save As..."; "Save To..." = "Save To..."; "Revert To Saved" = "Revert To Saved"; "Close" = "Close"; /* Songs submenu */ "Add Songs..." = "Add Songs..."; "Remove Selection" = "Remove Selection"; "Remove All" = "Remove All"; "Cleanup" = "Cleanup"; /* Player submenu */ "Play" = "Play"; "Pause" = "Pause"; "Stop" = "Stop"; "Previous" = "Previous"; "Next" = "Next"; "Mode" = "Mode"; /* Player/Mode submenu */ "Repeat" = "Repeat"; "Shuffle" = "Shuffle"; /* Tools submenu */ "Song Inspector..." = "Song Inspector..."; /* Windows submenu */ "Arrange In Front" = "Arrange In Front"; "Miniaturize Window" = "Miniaturize Window"; "Minimize" = "Minimize"; "Close Window" = "Close Window"; /* Playlist status label */ "%d songs - total time: %@" = "%d songs - total time: %@"; " - selection: %@" = " - selection: %@"; /* Playlist table */ "Song" = "Song"; "Time" = "Time"; /* Song Inspector */ "Song Inspector" = "Song Inspector"; "Song Information" = "Song Information"; "Format Attributes" = "Format Attributes"; "No song selected" = "No song selected"; "Lookup through MusicBrainz..." = "Lookup through MusicBrainz..."; "Title" = "Title"; "Album" = "Album"; "Track" = "Track"; "Artist" = "Artist"; "Genre" = "Genre"; "Year" = "Year"; "Reset" = "Reset"; "Save" = "Save"; "Generating TRM..." = "Generating TRM..."; "Querying MusicBrainz server..." = "Querying MusicBrainz server..."; "The MusicBrainz server was too busy" = "The MusicBrainz server was too busy"; "Received %d result(s)" = "Received %d result(s)"; /* Dialog boxes */ "Add music files..." = "Add music files..."; "Add a music folder..." = "Add a music folder..."; "Save playlist as..." = "Save playlist as..."; /* Song names */ "[not found: %@]" = "[not found: %@]"; "[unknown format: %@]" = "[unknown format: %@]"; "[format error: %@]" = "[format error: %@]"; /* Preference dialog */ "None" = "None"; "Preferences" = "Preferences"; "General" = "General"; /* General preferences */ "Windows" = "Windows"; "Playlists" = "Playlists"; "Use absolute filenames" = "Use absolute filenames"; "Output module" = "Output module"; "Textured" = "Textured"; "Sticky" = "Sticky"; "Remember location" = "Remember location"; "Format" = "Format"; /* MB results panel */ "Please select the correct information..." = "Please select the correct information..."; "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." = "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate."; "Cancel" = "Cancel"; cynthiune.app-0.9.5/English.lproj/InfoPlist.strings0000644000175000017500000000160610375347723021730 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/CynthiuneFadingTextField.m.old0000644000175000017500000001021310375146707021504 0ustar gurkangurkan/* CynthiuneFadingTextField.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "CynthiuneFadingTextField.h" #define _colorWithFactor(X) \ [NSColor colorWithDeviceRed: (red * X) \ green: (green * X) \ blue: (blue * X) \ alpha: (alpha * X)] @implementation CynthiuneFadingTextField : NSTextField - (void) _createFadeoutClone { fadeoutClone = [[NSTextField alloc] initWithFrame: [super frame]]; [fadeoutClone setStringValue: @""]; [fadeoutClone setFont: [super font]]; [fadeoutClone setAlignment: [super alignment]]; [fadeoutClone setEnabled: NO]; [fadeoutClone setRefusesFirstResponder: YES]; [fadeoutClone setBezeled: NO]; [fadeoutClone setBordered: NO]; [fadeoutClone setSelectable: NO]; [fadeoutClone setDrawsBackground: NO]; [[super superview] addSubview: fadeoutClone]; } - (id) initWithFrame: (NSRect) frame { if ((self = [super initWithFrame: frame])) { iteration = 0; interval = 0.100; numberOfIterations = 8; fadingTimer = nil; fadeoutClone = nil; // [self _createFadeoutClone]; } return self; } // - (void) awakeFromNib // { // // [[super superview] addSubview: fadeoutClone]; // } - (void) dealloc { if (fadeoutClone) [fadeoutClone release]; [super dealloc]; } - (void) setTextColorWithFactor: (float) factor { [super setTextColor: _colorWithFactor (factor)]; [fadeoutClone setTextColor: _colorWithFactor (1.0 - factor)]; } - (void) _fadingIteration { float factor; iteration++; factor = (float) iteration / numberOfIterations; [self setTextColorWithFactor: factor]; if (iteration == numberOfIterations) { [fadeoutClone setStringValue: @""]; [fadingTimer invalidate]; fadingTimer = nil; } } - (void) _createFadingTimer { fadingTimer = [NSTimer timerWithTimeInterval: interval target: self selector: @selector (_fadingIteration) userInfo: nil repeats: YES]; [fadingTimer explode]; } - (void) setStringValue: (NSString *) string { NSString *oldString; oldString = [self stringValue]; if (![oldString isEqualToString: string]) { iteration = 0; [self setTextColorWithFactor: 0.0]; if (!fadeoutClone) [self _createFadeoutClone]; [fadeoutClone setStringValue: oldString]; [super setStringValue: string]; if (!fadingTimer) [self _createFadingTimer]; } } - (void) setFont: (NSFont *) font { [fadeoutClone setFont: font]; [super setFont: font]; } - (void) setAlignment: (NSTextAlignment) mode { [fadeoutClone setAlignment: mode]; [super setAlignment: mode]; } - (void) setTextColor: (NSColor *) color { [color getRed: &red green: &green blue: &blue alpha: &alpha]; if (!fadingTimer) [self setTextColorWithFactor: 1.0]; } - (NSColor *) textColor { return _colorWithFactor (1.0); } - (void) setInterval: (NSTimeInterval) timeInterval { interval = timeInterval; } - (NSTimeInterval) interval { return interval; } - (void) setNumberOfIterations: (unsigned int) integer { numberOfIterations = integer; } - (unsigned int) numberOfIterations { return numberOfIterations; } @end cynthiune.app-0.9.5/PlaylistView.m0000644000175000017500000001507710412333477016502 0ustar gurkangurkan/* PlaylistView.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import "PlaylistView.h" @implementation PlaylistView : NSTableView - (id) init { if ((self = [super init])) { selectionDir = NSOrderedSame; } return self; } - (id) initWithCoder: (NSCoder *) coder { if ((self = [super initWithCoder: coder])) { selectionDir = NSOrderedSame; } return self; } - (NSImage*) dragImageForRows: (NSArray*) dragRows event: (NSEvent*) dragEvent dragImageOffset: (NSPoint*) dragImageOffset { NSImage *dragImage; if ([dragRows count] > 1) { dragImage = [NSImage imageNamed: @"dragged-songs"]; dragImageOffset->x = -10.0; } else { dragImage = [NSImage imageNamed: @"dragged-song"]; dragImageOffset->x = -5.0; } dragImageOffset->y = 10.0; return dragImage; } - (unsigned int) draggingSourceOperationMaskForLocal: (BOOL) isLocal { return ((isLocal) ? (NSDragOperationMove | NSDragOperationGeneric) : NSDragOperationCopy); } - (int) _findFirstSelected { int row, count; row = -1; count = 0; while (row == -1 && count < [self numberOfRows]) if ([self isRowSelected: count]) row = count; else count++; return row; } - (int) _findLastSelected { int row, count; row = -1; count = [self numberOfRows] - 1; while (row == -1 && count > -1) if ([self isRowSelected: count]) row = count; else count--; return row; } - (void) _selectionUpByExtendingIt: (BOOL) keep { int max, row; BOOL selectSingleRow; max = [self numberOfRows]; if (max > 0) { selectSingleRow = NO; if (selectionDir == NSOrderedDescending) { row = [self _findLastSelected]; if (keep) [self deselectRow: row]; else selectSingleRow = YES; } else { if (selectionDir == NSOrderedSame) selectionDir = NSOrderedAscending; row = [self _findFirstSelected]; selectSingleRow = YES; } if (selectSingleRow && row > 0) { row--; [self selectRow: row byExtendingSelection: keep]; } [self scrollRowToVisible: row]; [self setNeedsDisplay: YES]; } } - (void) _selectionDownByExtendingIt: (BOOL) keep { int max, row; BOOL selectSingleRow; max = [self numberOfRows]; if (max > 0) { selectSingleRow = NO; if (selectionDir == NSOrderedAscending) { row = [self _findFirstSelected]; if (keep) [self deselectRow: row]; else selectSingleRow = YES; } else { if (selectionDir == NSOrderedSame) selectionDir = NSOrderedDescending; row = [self _findLastSelected]; selectSingleRow = YES; } if (selectSingleRow && row < (max - 1)) { row++; [self selectRow: row byExtendingSelection: keep]; } [self scrollRowToVisible: row]; [self setNeedsDisplay: YES]; } } - (void) _selectionTopByExtendingIt: (BOOL) keep { int row, count, max; max = [self numberOfRows]; if (max > 0) { if (keep) { if (selectionDir == NSOrderedDescending) row = [self _findFirstSelected] + 1; else row = [self _findLastSelected] + 1; [self deselectAll: self]; for (count = 0; count < row; count++) [self selectRow: count byExtendingSelection: YES]; } else [self selectRow: 0 byExtendingSelection: NO]; selectionDir = NSOrderedAscending; [self scrollRowToVisible: 0]; [self setNeedsDisplay: YES]; } } - (void) _selectionBottomByExtendingIt: (BOOL) keep { int row, count, max; max = [self numberOfRows]; if (max > 0) { if (keep) { if (selectionDir == NSOrderedAscending) row = [self _findLastSelected]; else row = [self _findFirstSelected]; [self deselectAll: self]; for (count = row; count < max; count++) [self selectRow: count byExtendingSelection: YES]; } else [self selectRow: (max - 1) byExtendingSelection: NO]; selectionDir = NSOrderedDescending; [self scrollRowToVisible: (max - 1)]; [self setNeedsDisplay: YES]; } } - (BOOL) performKeyEquivalent: (NSEvent *) event { BOOL shiftPressed, result; unichar character; id delegate; result = YES; shiftPressed = ([event modifierFlags] & (NSAlphaShiftKeyMask | NSShiftKeyMask)); character = [[event characters] characterAtIndex: 0]; switch (character) { case NSUpArrowFunctionKey: [self _selectionUpByExtendingIt: shiftPressed]; break; case NSDownArrowFunctionKey: [self _selectionDownByExtendingIt: shiftPressed]; break; case NSHomeFunctionKey: [self _selectionTopByExtendingIt: shiftPressed]; break; case NSEndFunctionKey: [self _selectionBottomByExtendingIt: shiftPressed]; break; case CynthiuneEnterKey: delegate = [self delegate]; if (delegate && [delegate respondsToSelector: @selector (playlistViewActivateSelection:)]) [delegate playlistViewActivateSelection: self]; break; case NSDeleteFunctionKey: delegate = [self delegate]; if (delegate && [delegate respondsToSelector: @selector (playlistViewDeleteSelection:)]) [delegate playlistViewDeleteSelection: self]; break; default: result = [super performKeyEquivalent: event]; } if ([self numberOfSelectedRows] < 2) selectionDir = NSOrderedSame; return result; } @end cynthiune.app-0.9.5/PlayerPreference.m0000644000175000017500000000155710146515077017301 0ustar gurkangurkan/* PlayerPreference.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ cynthiune.app-0.9.5/Cynthiune.gorm/0000755000175000017500000000000010413173130016554 5ustar gurkangurkancynthiune.app-0.9.5/Cynthiune.gorm/data.classes0000644000175000017500000000403510413133355021053 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CynthiuneController = { Actions = ( "openFile:", "preferencesWindow:", "togglePlaylistWindow:", "sendABugReport:" ); Outlets = ( playerWindow, bugReportMenuItem, playlistWindow, playlistController, playlistSwitch ); Super = NSObject; }; CynthiuneFadingTextField = { Actions = ( ); Outlets = ( ); Super = NSTextField; }; CynthiunePauseButton = { Actions = ( ); Outlets = ( ); Super = NSButton; }; CynthiuneWindow = { Actions = ( ); Outlets = ( ); Super = NSWindow; }; FirstResponder = { Actions = ( "sendABugReport:", "toggleSongInspector:" ); Super = NSObject; }; InfoDisplayController = { Actions = ( ); Outlets = ( splashImage, songArtistField, songAlbumField, songNumberField, songTimerField, songTitleField ); Super = NSObject; }; PlaylistController = { Actions = ( "previousSong:", "startPlayer:", "nextSong:", "pausePlayer:", "stopPlayer:", "eject:", "songCursorChange:", "changeTimeDisplay:", "addSong:", "addSongs:", "removeSong:", "removeSelectedSongs:", "removeAllSongs:", "cleanupPlaylist:", "saveListFromPopupMenu:", "saveList:", "saveListAs:", "toggleShuffle:", "toggleRepeat:", "toggleSongInspector:" ); Outlets = ( previousButton, playButton, pauseButton, stopButton, ejectButton, nextButton, repeatButton, shuffleButton, timerButton, repeatMenuItem, shuffleMenuItem, addPopup, removePopup, savePopup, progressSlider, infoDisplayController, playlistViewController, songInspectorMenuItem, playlistStatusLabel ); Super = NSObject; }; PlaylistView = { Actions = ( ); Outlets = ( ); Super = NSTableView; }; PlaylistViewController = { Actions = ( ); Outlets = ( playlistView ); Super = NSObject; }; }cynthiune.app-0.9.5/Cynthiune.gorm/objects.gorm0000644000175000017500000012306610413133355021110 0ustar gurkangurkanGNUstep archive00002b5e:00000034:000003a9:00000002:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&[01NSString& %  MenuItem22401 NSMenuItem0&%Services0&&&%01NSImage01NSMutableString&% common_2DCheckMark0 0 & %  common_2DDash2submenuAction:%0 1 NSMenu0 1 NSMutableArray1 NSArray&0 0& % Cynthiune0 &  00&%Info0&&&% %0 0 &00& % Info Panel...0&%a&&% %00&%Preferences...0&&&% %00&%Send A Bug Report...0&&&% %00&%Help...0 &%?&&% % 0!0"&%Playlist0#&&&% %0$ "0% &0&0'&%Open...0(&%o&&% %0)0*&%Close0+&%w&&% %0,0-&%Save...0.&%s&&% %0/00& % Save As...01&%S&&% % 0203&%Songs04&&&% %05 306 &0708& % Add Songs...09&%a&&% %0:0;& % Remove All0<&%D&&% %0=0>&%Remove Selection0?&%d&&% %0@0A&%Cleanup0B&&&% % 0C0D&%Player0E&&&% %0F D0G &0H0I&%Play0J&%p&&% %0K0L&%Pause0M&&&% %0N0O&%Stop0P&%s&&% %0Q0R&%Previous0S&%[&&% %0T0U&%Next0V&%]&&% %0W0X&%Mode0Y&&&% %0Z X0[ &0\0]&%Repeat0^&%R&&% %0_0`&%Shuffle0a&%H&&% %F 0b0c&%Tools0d&&&% %0e c0f &0g0h&%Song Inspector...0i&%i&&% % 0j0k&%Windows0l&&&% %0m k0n &0o0p&%Arrange In Front0q&&&% %0r0s&%Miniaturize Window0t&%m&&% %0u0v& % Close Window0w&%w&&% % 0x0y&%Hide0z&%h&&% %0{0|&%Quit0}&%q&&% %0~& %  MenuItem330& %  MenuItem225{0& %  MenuItem340& %  MenuItem226W0& %  MenuItem350& %  MenuItem227\0& %  MenuItem360& %  MenuItem228_0& %  MenuItem37!0&%NSServicesMenu 0& %  MenuItem11000&%Revert To Saved0&&&% %0& %  MenuItem229@0& %  MenuItem38&0& %  MenuItem111)0& %  MenuItem3900&%New0&%n&&% %0& %  MenuItem11220& %  MenuItem11370& %  MenuItem11400&%Add Folders...0&&&% %0& %  MenuItem115=0& %  MenuItem116:0& %  MenuItem117C0& %  MenuItem118H0& %  MenuItem119K0& %  GormNSMenu80e0& %  GormNSMenu81Z0& %  MenuItem2300& %  MenuItem40,0& %  MenuItem232b0& %  MenuItem41/0& %  MenuItem233g0& %  MenuItem4200& % Save To...0&&&% %0& %  MenuItem430& %  MenuItem44)0& %  MenuItem4520& %  MenuItem4670& %  MenuItem470& %  MenuItem120N0& %  MenuItem48=0& %  MenuItem121Q0& %  MenuItem49:0& %  MenuItem122T0& %  MenuItem123j0& %  MenuItem124o0& %  MenuItem125r0& %  MenuItem126u0& %  MenuItem1270& %  MenuItem128x0& %  MenuItem129{0& % NSWindowsMenum0&%InfoDisplayController01 GSNibItem  &0&%Button01 NSButton1 NSControl1NSView1 NSResponder% C A  A A  A A&0 &%01 NSButtonCell1 NSActionCell1NSCell0&%Button01NSFont%&&&&&&&&%0ñ&0ı&&&&0ű& %  MenuItem50C0Ʊ& %  MenuItem51H0DZ& %  MenuItem52N0ȱ& %  MenuItem53Q0ɱ& %  MenuItem54T0ʱ& %  MenuItem55j0˱& %  MenuItem56o0̱& %  MenuItem57r0ͱ& %  MenuItem1300α& %  MenuItem58u0ϱ& %  MenuItem1310б& %  MenuItem590ѱ& %  MenuItem132!0ұ& %  MenuItem133&0ӱ& %  MenuItem1340Ա& %  MenuItem135,0ձ& %  MenuItem136/0ֱ& %  MenuItem1370ױ& %  MenuItem1380ر& %  MenuItem139)0ٱ& %  GormNSMenu1$0ڱ& %  GormNSMenu2m0۱& %  MenuItem60x0ܱ& %  GormNSMenu3 0ݱ& %  MenuItem61{0ޱ& %  GormNSMenu450߱& %  MenuItem62,0&%GSCustomClassMap0&0& %  TextField40&% CynthiuneFadingTextField0& % TextField0&% CynthiuneFadingTextField0&% Button40&%CynthiunePauseButton0& % PlayerWindow0&% CynthiuneWindow0& %  TextField20&% CynthiuneFadingTextField0&%PlaylistWindow0&% CynthiuneWindow0&%GormNSTableView0& % PlaylistView0& %  TextField30&% CynthiuneFadingTextField0& %  GormNSMenu5F0& %  MenuItem63/0& %  GormNSMenu60& %  MenuItem640& %  GormNSMenu70& %  MenuItem650& %  GormNSMenu8$0& %  MenuItem66)0& %  GormNSMenu950& %  MenuItem6720& %  MenuItem14020& %  MenuItem6870& %  MenuItem14170& %  MenuItem69P& %  MenuItem142P& %  MenuItem143=P& %  MenuItem144:P& %  MenuItem145CP& %  MenuItem146HP& %  MenuItem147NP& %  MenuItem148jP& %  MenuItem149oP1GSControlTemplate1GSClassSwapper1 NSTableView%  C C!  C C!&P &%P P &&&&&&&&&P &P 1 NSTableColumnP&%column1 BP A GPP1NSTableHeaderCell1NSTextFieldCellP&% P% &&&&&&&&0%P1NSColorP&%NSNamedColorSpaceP&%SystemP&%controlShadowColorPP&%SystemP&%windowFrameTextColorPP&%huit&&&&&&&&0%PP&%SystemP&%textBackgroundColorPP& % textColorP P!&%column2 C A GPP"P#&% &&&&&&&&0%P$P%&%eight%&&&&&&&&0%P&P'& % gridColorP(P)&%SystemP*&%controlBackgroundColorP+1NSTableHeaderView%  C A  C A&P, &P-1GSTableCornerView% @ @ A A  A A&P. &%% A @ @@P/& %  MenuItem70=P0& %  MenuItem71:P1& %  MenuItem72CP2& %  MenuItem73HP3& %  MenuItem74NP4& %  MenuItem75QP5& %  MenuItem76TP6& %  MenuItem77jP7& %  MenuItem78oP8& %  MenuItem150rP9& %  MenuItem79rP:& %  MenuItem151uP;& %  MenuItem152P<& %  MenuItem153{P=& %  MenuItem154P>& %  MenuItem155P?& %  MenuItem156!P@& %  MenuItem157&PA& %  MenuItem158PB& %  MenuItem159,PC& % GormNSMenuPD& %  MenuItem80uPE& %  MenuItem81PF& %  MenuItem82xPG& %  MenuItem83{PH& %  MenuItem84,PI& %  GormNSMenu10FPJ& %  MenuItem85/PK& %  GormNSMenu11mPL& %  MenuItem86PM&% Button1PN % C A  A A  A A&PO &%PPPQ&%Button&&&&&&&&%PR&PS&&&&PT& %  GormNSMenu12PU& %  MenuItem87PV&% Button2PW % A A  B A  B A&PX &%PYPZ&%Button&&&&&&&&%P[&P\&&&&P]& %  GormNSMenu13$P^& %  MenuItem88)P_1GSWindowTemplate1NSWindow%  C C&% B CP`%  C C  C C&Pa &Pb1 NSImageView% A B\ C B  C B&Pc &%Pd1! NSImageCell&&&&&&&&%%% ? ?WPe % B@ A  A A  A A&Pf &%PgPh&%Button&&&&&&&&%Pi&Pj&&&&Pk % C A  A A  A A&Pl &%PmPn&%Button&&&&&&&&%Po&Pp&&&&Pq % B A  A A  A A&Pr &%PsPt&%Button&&&&&&&&%Pu&Pv&&&&Pw % B A  B A  B A&Px &%PyPz&%Button&&&&&&&&%P{&P|&&&&P} % CJ A  A A  A A&P~ &%PP&%Button&&&&&&&&%P&P&&&&P % C A  A A  A A&P &%PP&%Button&&&&&&&&%P&P&&&&P1"NSSlider% A B C A  C A&P &%P1# NSSliderCellP&% 0P1$NSNumber1%NSValued &&&&&&&&% ? %PP&&&&&&&&&0%PP&%SystemP&%textBackgroundColorPP&%controlTextColorPP&PP&%common_SliderHoriz&&&&&&&&%%P1& NSTextField% A B C A  C A&P &%PP&%TitleP% A`&&&&&&&&0%PP&%SystemP&%textBackgroundColorPP&%NSCalibratedRGBColorSpace ? ?* ? ? ?P&% C B Bd A  Bd A&P &%PP&%Title&&&&&&&&0%PP&%SystemP&%textBackgroundColorP ? ?* ? ? ?P&% A B C A  C A&P &%PP&%Title&&&&&&&&0%PP&%SystemP&%textBackgroundColorP ? ?* ? ? ?P&% A B A A  A A&P &%PP&%Title&&&&&&&&0%PP&%SystemP&%textBackgroundColorP ? ?* ? ? ?P&% B B C A  C A&P &%PP&%Title&&&&&&&&0%PP&%SystemP&%textBackgroundColorP± ? ?* ? ? ?Pñ % C B Bd A  Bd A&Pı &%PűPƱ&%Button&&&&&&&&%PDZ&Pȱ&&&&NPɱPʱ&%SystemP˱&%windowBackgroundColorP̱&%WindowPͱ& % Cynthiune C C F@ F@%Pα B@ B@PϱPб&%NSCalibratedWhiteColorSpace Pѱ &P1'NSBitmapImageRep1( NSImageRepPӱ&%NSDeviceRGBColorSpace B@ B@%%0%0P1) NSDataMalloc1* NSDataStatic1+NSData&$$II*$[=T8J2R-!k[=U:K3xB-H'R-!k[=S7J2xB-H'/ ?[=S7I2xB-H'/ ?[=S7H0xB-H'/ ?[=R7I2xB-H'/ ?[=S7I0xB-H'/ ?[=R7I2xB-H'/ ?[=R7H0xB-H'/ ?[>X/!j:)H'/ ?D49  ?hft{y<;D ?hft}<;D ?<;D ?43:""""43:zzzzͱ""""EEEEEEEEEEEE43:555222t43:0?55hhhiiiyyyVVV777?43:~=0rdxxxUUU444?/17?43:5?0\Mzz{]]]QQQmmm_bn:9@5?0I>e]xxwvtsqpo}66<5?2A3QFA4H:|zzywutrqpbao++05?2@2@2A3B3C4E6}}|zxxwutrqpn}VT_=,, 5@2@3A3A3JdbqihvFEOQ-)Y)!W)`/$k3'q6*n4)l3'i2'f0&c/$`-$Y*!)5C4C4D4E6F7H7Ʀkkk)))LJRkjxihvhgu::B\/&[-$Y-$c/&l3'o4)l3'j2'g2&d0$a/$^-#X*!)5@2D4E6F7H7I8{{{[[[322QPZ^]jjhwhguQP[K33\-&W)_/$j3'm3'm4)j3'h2&d0&b/$_-#],#X*!)P'~>>ddd>>?87?4$$E)&_-#`0'_0&]/&^/&`/&`/&c0&j2'n3'k3'h2&d0$a/$^-#\,!Z,!X*!U)T))ttttttzzz;;;rqyjhwPPZ43:C@?w9,c2)b2)^,#_0&d2'g2'h2'k3)l3)l3)l3'l3'i2'f0&c/$_-#],#Z,!X*!W)T)S))rrr```FFF000mmm\[a<;CA)'^3,I::76v8,_-$b2'g2'l4)r7*s7*s7*w8,t7,q6*n4)k3'g2&d0$`-$],#[,!X*!W)U)S'S')YYY777XWcKJS|||SSS\2,KDD4I:I;A?>~>0b2)f2'p6*x:-y:-{;-x:-v9,s7*o4)l3'i2&f0&c/$_-#\,#Y*!W)T)S'R'S')TR^|z@?Gↄ\Zg<;CJJJm4)D4E6J;UIPEvI@q:/l4)m4)x:,};/{:-y:-w9,t7*q6*m4)j3'h2&c0&a/$]-#[,!X*!V)T)R'R'R')0/5?_^kCBJ43:?QQQ ^-#I:O>SBP?H7?2p6*s7*0|;/y:-p6*f0&d0&c/&`/$_-$]-#\,#T)!T)!T)!T)!T)!T)!T)!)))) ?h3'z;/T)!T)!T)!`/$`/$))))) ? 00$$R&   D D@Pձ&% Button3ePֱ& %  MenuItem160/Pױ& %  GormNSMenu145Pر& %  MenuItem892kPٱ& %  MenuItem161Pڱ& %  GormNSMenu15FP۱%  C C7& % B CPܱ%  C C7  C C7&Pݱ &P1, NSScrollView% A A  C C  C C&P߱ &P1- NSClipView% A A C C  C C&P &PP&%controlBackgroundColorP1. NSScroller% @ A A C  A C&P &%P &&&&&&&&&2 _doScroll:v12@0:4@8P-% A @ C A  C A&P &+PP& % controlColor-% A A A A P&% A C' C AP  C AP& P &%PP&%LabelP% A &&&&&&&&0%PP&%SystemP&%highlightColorPP&%SystemP&%disabledControlTextColorP&%Playlist C C F@ F@%ΐ&   D D@P&% Button5qP& %  MenuItem162P& %  GormNSMenu16mP&% Button6wP& %  MenuItem163)P& %  GormNSMenu17P&% Button7}P& %  MenuItem1642P& %  GormNSMenu18$P& %  MenuItem1657P& %  GormNSMenu195P&% Button9P& %  MenuItem166P& %  MenuItem167=P& %  MenuItem168:P& %  MenuItem169CP& %  MenuItem907P& %  MenuItem91P &%NSOwnerP & % NSApplicationP & %  MenuItem92=P & %  MenuItem93:P & %  MenuItem94CP& %  MenuItem95HP& %  GormNSMenu20FP& %  MenuItem96KP& %  GormNSMenu21mP& %  MenuItem97NP& %  GormNSMenu22P& %  MenuItem98QP& %  MenuItem170HP& % ImageViewbP& %  GormNSMenu23$P& %  MenuItem99TP& %  MenuItem171NP& %  GormNSMenu245P& %  MenuItem172jP& %  GormNSMenu25FP& %  MenuItem173oP& %  GormNSMenu26mP& %  MenuItem174rP & %  GormNSMenu27P!& %  MenuItem175uP"& %  GormNSMenu28P#& %  MenuItem176P$& %  GormNSMenu29$P%& %  MenuItem177{P&& %  MenuItem178P'& %  MenuItem179P(&%NSMenu P)&%SliderP*&%PlaylistControllerP+ *  &P,&%PlaylistViewControllerP- P.&%PlaylistViewController  &P/& % TableColumn P0& %  GormNSMenu305P1& %  GormNSMenu31FP2& %  GormNSMenu32mP3& %  MenuItem180!P4& %  GormNSMenu33 P5& % ScrollViewP6& %  MenuItem181&P7& %  GormNSMenu34P8& %  MenuItem182P9& %  GormNSMenu35$P:& %  MenuItem183,P;& %  GormNSMenu36P<& %  MenuItem184/P=& %  GormNSMenu37$P>& %  MenuItem185P?& %  GormNSMenu385P@& %  MenuItem186PA& %  GormNSMenu39FPB& %  MenuItem187)PC& %  MenuItem1882PD& %  MenuItem1897PE&% Button10PF& %  GormNSMenu40mPG& %  GormNSMenu41 PH& %  GormNSMenu42PI& %  MenuItem190PJ&%CynthiuneControllerPK PL&%CynthiuneController  &PM& %  GormNSMenu43$PN& %  MenuItem191=PO& %  GormNSMenu445PP& %  MenuItem192:PQ& %  GormNSMenu45FPR& %  MenuItem193CPS& %  GormNSMenu46mPT& %  MenuItem194HPU& %  GormNSMenu47 PV& %  MenuItem195NPW& %  GormNSMenu48PX& %  MenuItem196jPY& %  GormNSMenu49$PZ& %  MenuItem197oP[& %  TextField1P\& %  MenuItem198rP]& %  MenuItem199uP^& %  TextField5P_& %  GormNSMenu505P`& %  GormNSMenu51FPa& %  GormNSMenu52mPb& %  GormNSMenu53 Pc& %  GormNSMenu54Pd& %  GormNSMenu55$Pe& %  GormNSMenu565Pf& %  GormNSMenu57FPg& %  GormNSMenu58mPh& %  MenuItem200Pi& %  MenuItem10Pj& %  GormNSMenu59 Pk& %  MenuItem201{Pl& %  MenuItem1{Pm& %  MenuItem11Pn& %  MenuItem202Po& %  MenuItem2Pp& %  MenuItem12,Pq& %  MenuItem203Pr& %  MenuItem3Ps& %  MenuItem13/Pt& %  MenuItem204!Pu& %  MenuItem4Pv& %  MenuItem14Pw& %  MenuItem205&Px& %  MenuItem5oPy& %  MenuItem15jPz& %  MenuItem206P{& %  MenuItem6!P|& %  MenuItem16oP}& %  MenuItem207,P~& %  MenuItem7&P& %  MenuItem17rP& %  MenuItem208/P& %  MenuItem8rP& %  MenuItem18uP& %  MenuItem209P& %  MenuItem9uP& %  MenuItem19P& %  GormNSMenu60ZP& %  GormNSMenu61ZP& %  GormNSMenu62ZP& %  GormNSMenu63ZP& %  GormNSMenu64ZP& %  GormNSMenu65ZP&%MenuItemxP& %  GormNSMenu66ZP& %  GormNSMenu67ZP& %  GormNSMenu68ZP& %  MenuItem210P& %  MenuItem202P& %  GormNSMenu69ZP& %  MenuItem211)P& %  MenuItem21P& %  MenuItem2122P& %  MenuItem22)P& %  MenuItem2137P& %  MenuItem237P& %  MenuItem214P& %  MenuItem215=P& %  MenuItem25=P& %  MenuItem216:P& %  MenuItem26:P& %  MenuItem217CP& %  MenuItem27CP& %  MenuItem218HP& %  MenuItem28HP& %  MenuItem100jP& %  MenuItem219NP& %  MenuItem29NP& %  MenuItem101oP& %  MenuItem102rP& %  MenuItem103uP& %  MenuItem104P& %  MenuItem105xP& %  MenuItem106{P& %  MenuItem107,P& %  MenuItem108/P& %  MenuItem109P& %  TableColumn1 P& %  GormNSMenu70ZP& %  GormNSMenu71ZP& %  GormNSMenu72ZP& %  GormNSMenu73ZP& %  GormNSMenu74ZP& %  GormNSMenu75ZP& %  GormNSMenu76ZP& %  GormNSMenu77ZP& %  GormNSMenu78eP& %  MenuItem220jP& %  GormNSMenu79ZP& %  MenuItem221oP& %  MenuItem30QP& %  MenuItem222rP& %  MenuItem31TP& %  MenuItem223uP& %  MenuItem32KP &P1/NSNibConnector P±/ Pñ/5Pı/Pű//PƱ/PDZ/Pȱ/VPɱ/ՐPʱ/搐P˱/P̱/Pͱ/Pα/Pϱ/)Pб/䐐Pѱ/[Pұ/ꐐPӱ/PԱ/␐Pձ/EPֱ/J Pױ/* Pر/ Pٱ/, P10NSNibOutletConnectorJP۱&%playlistWindowPܱ0J*Pݱ&%playlistControllerPޱ0JP߱&%playlistSwitchP11NSNibControlConnectorJP&%togglePlaylistWindow:P0*VP&%previousButtonP0*P& % playButtonP0*P& % pauseButtonP0*P& % stopButtonP0*P& % nextButtonP0*P& % ejectButtonP0*EP& % timerButtonP0*)P&%progressSliderP0*P&%infoDisplayControllerP0P& % splashImageP0P&%songAlbumFieldP0[P&%songTimerFieldP0P&%songTitleFieldP0P&%songNumberFieldP0P&%songArtistFieldP1E*P&%changeTimeDisplay:P1)*P&%songCursorChange:P1V*P& %  previousSong:P1*P& % startPlayer:P1*P & % pausePlayer:P 1*P & % stopPlayer:P 1*P & % nextSong:P1*P&%eject:P0,P& % playlistViewP/( P/(P1P&%NSFirstP&%hide:P/(P1P& % terminate:P/(P1(P&%submenuAction:P/gP/gP1P &%arrangeInFront:P!/gP"1P#&%performMiniaturize:P$/gP%1P&& % performClose:P'/(P(1(P)&%submenuAction:P*/jP+0 JP,&%delegateP-0JP.&%delegateP/0J.P0/o(P11o(P2&%submenuAction:P3/coP4/rcP51rP6&%orderFrontStandardInfoPanel:P7/ucP8/qcP91qP:&%orderFrontHelpPanel:P;1uJP<&%preferencesWindow:P=/{(P>1{(P?&%submenuAction:P@/d{PA/~dPB/dPC/dPD/dPE/(PF1(PG&%submenuAction:PH/ePI/ePJ/ePK/ePL/(PM1(PN&%submenuAction:PO/fPP/fPQ/fPR/fPS/fPT/fPU/fPV1fPW&%submenuAction:PX/PY/PZ/P[/eP\1*P]& % previousSong:P^1*P_& % startPlayer:P`1*Pa& % stopPlayer:Pb1*Pc& % nextSong:Pd1*Pe& % pausePlayer:Pf1*Pg& % toggleRepeat:Ph1*Pi&%toggleShuffle:Pj1*Pk&%removeSelectedSongs:Pl1*Pm&%removeAllSongs:Pn1*Po&%cleanupPlaylist:Pp1*Pq& % addSongs:Pr0*Ps&%repeatMenuItemPt0*Pu&%shuffleMenuItemPv1*Pw& % saveList:Px1*Py& % saveListAs:Pz/cP{1JP|&% sendABugReport:P}0JP~&%bugReportMenuItemP/(P1(P&%submenuAction:P/P/P0*P&%songInspectorMenuItemP1*P&% toggleSongInspector:P/^P0*^P&%playlistStatusLabelP0JP& %  playerWindowP0*,P&% playlistViewControllerP/P/MP0*P& %  repeatButtonP0*MP& %  shuffleButtonP1*P& %  toggleRepeat:P1M*P&% toggleShuffle:P0VP& %  nextKeyViewP0P0P0P0P0P0MP0MP0)P0)VP& %  nextKeyViewP0P&% initialFirstResponderP12 GSMutableSet13 NSMutableSet14NSSet&+-۰ _Kcynthiune.app-0.9.5/Cynthiune.gorm/data.info0000644000175000017500000000027010413133355020346 0ustar gurkangurkanGNUstep archive00002b5e:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/GoomView.h0000644000175000017500000000225410413173323015557 0ustar gurkangurkan/* GoomView.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef GOOMVIEW_H #define GOOMVIEW_H #import @class NSTimer; @class NSBitmapImageRep; @interface GoomView : NSView { NSTimer *timer; NSBitmapImageRep *bitmap; unsigned int fps; PluginInfo *goom; } - (void) setFPS: (unsigned int) newFPS; - (PluginInfo *) goom; @end #endif /* GOOMVIEW_H */ cynthiune.app-0.9.5/CynthiunePopUpButton.h0000644000175000017500000000216610257405634020164 0ustar gurkangurkan/* CynthiunePopUpButton.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEPOPUPBUTTON_H #define CYNTHIUNEPOPUPBUTTON_H #import @class NSString; @interface CynthiunePopUpButton : NSPopUpButton { } - (void) addItemWithTitle: (NSString *) aTitle; @end #endif /* CYNTHIUNEPOPUPBUTTON_H */ cynthiune.app-0.9.5/German.lproj/0000755000175000017500000000000010413173130016201 5ustar gurkangurkancynthiune.app-0.9.5/German.lproj/Localizable.strings0000644000175000017500000001142210345625476022060 0ustar gurkangurkan/* Julian Frede <julian.frede@cs.uni-dortmund.de> */ /* Application menu */ "Info" = "Info"; "Playlist" = "Playlist"; "Songs" = "Lieder"; "Player" = "Player"; "Windows" = "Fenster"; "Services" = "Dienste"; "Hide" = "Ausblenden"; "Hide Cynthiune" = "Cynthiune ausblenden"; "Hide Others" = "Andere ausblenden"; "Show All" = "Alle zeigen"; "Quit" = "Beenden"; "Quit Cynthiune" = "Beende Cynthiune"; /* Info submenu */ "Info Panel..." = "Info Panel..."; "About Cynthiune..." = "ber Cynthiune..."; "Preferences..." = "Einstellungen ..."; "Send A Bug Report..." = "Einen Bug Report senden..."; "Help..." = "Hilfe..."; "Help" = "Hilfe"; "Cynthiune Help" = "Cynthiune Hilfe"; /* Playlist submenu */ "Open..." = "ffnen..."; "New" = "Neu"; "Save..." = "Speichern..."; "Save As..." = "Speichern als..."; "Save To..." = "Speichern in..."; "Revert To Saved" = "Revert To Saved"; "Close" = "Schlieen"; /* Songs submenu */ "Add Songs..." = "Lied hinzufgen..."; "Remove Selection" = "Auswahl entfernen"; "Remove All" = "Alles entfernen"; "Cleanup" = "Reinigen"; /* Player submenu */ "Play" = "Play"; "Pause" = "Pause"; "Stop" = "Stop"; "Previous" = "Letztes"; "Next" = "Nchstes"; "Mode" = "Mode"; /* Player/Mode submenu */ "Repeat" = "Wiederholen"; "Shuffle" = "Mischen"; /* Windows submenu */ "Arrange In Front" = "Arrangiere im Fordergrund"; "Miniaturize Window" = "Minimiere Fenster"; "Minimize" = "Minimiere"; "Close Window" = "Schliee Fenster"; /* Dialog boxes */ "Add music files..." = "Musik Dateien hinzufgen..."; "Add a music folder..." = "Musik Verzeichnis hinzufen..."; "Save playlist as..." = "Playlist speichern als..."; /* Song names */ "[not found: %@]" = "[nicht gefunden: %@]"; "[unknown format: %@]" = "[unbekanntes Format: %@]"; "[format error: %@]" = "[Format Fehler: %@]"; /* Preference dialog */ "None" = "Nichts"; "Preferences" = "Einstellungen"; "General" = "Generell"; /* General preferences */ "Windows" = "Fenster"; "Playlists" = "Playlists"; /* "Use absolute filenames" = ""; */ "Output module" = "Ausgabe Modul"; "Textured" = "Textured"; "Sticky" = "Sticky"; "Remember location" = "Ort Merken"; "Format" = "Format"; /* MB results panel */ /* "Please select the correct information..." */ /* = ""; */ /* "The request to the MusicBrainz server returned more than one result.\nPlease select the line in the following table that is the most accurate." */ /* = ""; */ /* "Cancel" = ""; */ "Save" = "Speichern"; cynthiune.app-0.9.5/German.lproj/InfoPlist.strings0000644000175000017500000000160610375350154021540 0ustar gurkangurkan/* Localized versions of Info.plist keys */ CFBundleName = "Cynthiune"; CFBundleShortVersionString = "Cynthiune v. 0.9.5"; CFBundleGetInfoString = "Cynthiune version 0.9.5, Copyright 2002-2006 Wolfgang Sourdeau.\nThis program is distributed under the GNU General Public License version 2."; NSHumanReadableCopyright = "Copyright (C) 2002-2006 Wolfgang Sourdeau. See COPYING for more information about your rights."; NSApplicationIcon = "Cynthiune"; cynthiune.app-0.9.5/GeneralPreference.gorm/0000755000175000017500000000000010413173130020162 5ustar gurkangurkancynthiune.app-0.9.5/GeneralPreference.gorm/data.classes0000644000175000017500000000163410406705330022463 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CynthiunePopUpButton = { Actions = ( ); Outlets = ( ); Super = NSPopUpButton; }; FirstResponder = { Actions = ( "playlistReferenceTypeChanged:", "orderFrontFontPanel:", "outputBundleChanged:", "playlistFormatChanged:", "saveWindowsInformationChanged:", "stickyWindowsChanged:" ); Super = NSObject; }; GeneralPreference = { Actions = ( "outputBundleChanged:", "stickyWindowsChanged:", "playlistFormatChanged:", "saveWindowsInformationChanged:", "playlistReferenceTypeChanged:" ); Outlets = ( outputBundleSelector, prefsWindow, stickyWinToggle, playlistFormatSelector, saveWindowsInformationToggle, outputModuleBox, playlistsBox, windowsBox, playlistsFormatLabel, playlistReferenceTypeToggle ); Super = NSObject; }; }cynthiune.app-0.9.5/GeneralPreference.gorm/objects.gorm0000644000175000017500000001521510406705330022512 0ustar gurkangurkanGNUstep archive00002b5e:00000024:000000c2:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%GeneralPreference0&% Box301NSBox1NSView1 NSResponder% A A0 C B  C B&01 NSMutableArray1 NSArray&0% @ @ Cy B   Cy B &0 &0 1 GSControlTemplate1 GSClassSwapper0 &%CynthiunePopUpButton1 NSPopUpButton1NSButton1 NSControl% B @ B A  B A&0 &%0 1NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell1 NSActionCell1NSCell0&01NSFont%&&&&&&&&01NSMenu0&0 &01 NSMenuItem0&%Item 10&&&%01NSImage0& % common_Nibble%00&%Item 2&&%%00&%Item 3&&%%%0&0&&&&%%%%%01NSTextFieldCell0& % Output module&&&&&&&&0%0 1NSColor0!&%NSNamedColorSpace0"&%System0#&%windowBackgroundColor0$!0%&%System0&& % textColor @ @%%0'& %  MenuItem10(0)&%PLS0*&&&%%0+& % TextField0,1 NSTextField% B B B\ A  B\ A&0- &%0.0/&%Format&&&&&&&&0%00!01&%System02&%textBackgroundColor03!104& % textColor05& %  MenuItem20607&%M3U08&&&%%09& %  MenuItem30:0;&%PLS8&&%%0<&%Button0=% A A0 C. A  C. A&0> &%0?0@&%Remember location0A0B1NSMutableString&% common_SwitchOff&&&&&&&&%0C&0D&0E0F&% common_SwitchOn&&&0G& %  MenuItem40H& %  MenuItem50I& %  MenuItem60J&%MenuItem0K0L&%M3U*&&%%0M& % GormNSWindow0N1GSWindowTemplate0O&%NSWindow1NSWindow%  C C&% C D0P%  C C  C C&0Q &0R% A C- C B  C B&0S &0T% @ @ Cy Bh  Cy Bh&0U &=0V% A B C. A  C. A&0W &%0X0Y&%StickyA&&&&&&&&%0Z&0[&E&&&0\0]&%Windows&&&&&&&&0% 0^!0_&%System0`& % textColor @ @%%0a% A B C B  C B&0b &0c% @ @ Cy B  Cy B&0d &0e 0f&%CynthiunePopUpButton % C B B` A  B` A&0g &%0h0i&&&&&&&&&0j0k&0l &6:%0m&0n&&&&6j%%%%%,0o% A A0 C= A  C= A&0p &%0q0r&%Use absolute filenamesA&&&&&&&&%0s&0t&E&&&0u0v& % Playlists&&&&&&&&0% 0w!0x&%System0y& % textColor @ @%% 0z&%Window0{&%Window0|&%Window ? B F@ F@%0}0~&%NSApplicationIcon&   D D@0&%GSCustomClassMap0&0&% GormNSPopUpButton1 0&% GormNSPopUpButton2f0&%Box0% B A  C` B  C` B&0 &0% @ @ CR B<  CR B<&0 &00&%Box&&&&&&&&0% 0!0&%System0& % textColor @ @%% e0&% Button1V0&% Button2o0&% Box1R0&% Box2a0 &!!01NSNibConnectorM01 NSNibOutletConnectorM0& % prefsWindow000<000J0'00509000+0 0&%stickyWinToggle0 0&%playlistFormatSelector0 0&%outputBundleSelector01!NSNibControlConnector0&%stickyWindowsChanged:0!0&%outputBundleChanged:0!0&%playlistFormatChanged:0!<0&% saveWindowsInformationChanged:0 <0&%saveWindowsInformationToggle0G0H0I0 0& % windowsBox0 0& % playlistsBox0 0&%outputModuleBox0 +0&%playlistsFormatLabel00 0&% playlistReferenceTypeToggle0!0&% playlistReferenceTypeChanged:01" GSMutableSet1# NSMutableSet1$NSSet&Ncynthiune.app-0.9.5/GeneralPreference.gorm/data.info0000644000175000017500000000027010406705330021754 0ustar gurkangurkanGNUstep archive00002b5e:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/CynthiuneSliderCell.h0000644000175000017500000000216710337200626017741 0ustar gurkangurkan/* CynthiuneSliderCell.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNESLIDERCELL_H #define CYNTHIUNESLIDERCELL_H #import @class NSImage; @interface CynthiuneSliderCell : NSSliderCell { NSCell *knobCell; } - (void) setEnabled: (BOOL) enabled; @end #endif /* CYNTHIUNESLIDERCELL_H */ cynthiune.app-0.9.5/Makefile0000644000175000017500000000515210034207760015314 0ustar gurkangurkanPROJECT = Cynthiune SOURCES := FormatTester.m \ GeneralPreference.m \ InfoDisplayController.m \ MainController.m \ Player.m \ Playlist.m \ PlaylistController.m \ PlaylistFile.m \ PreferencesController.m \ Song.m \ TableViewController.m \ main.m \ utils.m RESOURCES := COPYING \ ChangeLog \ Cynthiune.nib \ Preferences.nib \ GeneralPreference.nib \ Images/Cynthiune.icns \ Images/cynthiune-splash-faded-fr.tiff \ Images/cynthiune-splash-fr.tiff \ Images/cynthiune-splash-faded.tiff \ Images/cynthiune-splash.tiff \ Images/eject-pushed.tiff \ Images/eject.tiff \ Images/nomute.tiff \ Images/mute.tiff \ Images/next-pushed.tiff \ Images/next.tiff \ Images/pause-pushed.tiff \ Images/pause.tiff \ Images/play-pushed.tiff \ Images/play.tiff \ Images/playlist-hide.tiff \ Images/playlist-show.tiff \ Images/previous-pushed.tiff \ Images/previous.tiff \ Images/repeat-off.tiff \ Images/repeat-on.tiff \ Images/shuffle-off.tiff \ Images/shuffle-on.tiff \ Images/stop-pushed.tiff \ Images/stop.tiff OBJECTS := $(SOURCES:.m=.o) VORBIS_LIBS := -lvorbis -lvorbisfile -logg MAD_LIBS := $(shell pkg-config mad --libs) ID3TAG_LIBS := $(shell pkg-config id3tag --libs) LIBS := -framework AppKit # -framework AudioUnit -framework AudioToolbox # \ # $(VORBIS_LIBS) \ # $(MAD_LIBS) \ # $(ID3TAG_LIBS) CC := gcc CFLAGS := -fconstant-string-class=NSConstantString ifeq ($(debug), yes) CFLAGS += -g -O0 endif MACOSXDIRSTRUCT := $(PROJECT).app MACOSXAPPDIRSTRUCT := $(MACOSXDIRSTRUCT)/Contents/MacOS MACOSXRESDIRSTRUCT := $(MACOSXDIRSTRUCT)/Contents/Resources all: $(MACOSXAPPDIRSTRUCT)/$(PROJECT) .m.o: @echo " Compiling $<..." @$(CC) $(CFLAGS) -c $< -o $@ $(MACOSXDIRSTRUCT): $(MACOSXAPPDIRSTRUCT) $(MACOSXRESDIRSTRUCT) $(MACOSXDIRSTRUCT)/Contents/PkgInfo $(MACOSXDIRSTRUCT)/Contents/Info.plist $(MACOSXDIRSTRUCT)/Contents/PkgInfo: PkgInfo @echo "Adding $<..." @cp PkgInfo $(MACOSXDIRSTRUCT)/Contents/ $(MACOSXDIRSTRUCT)/Contents/Info.plist: Info.plist @echo "Adding $<..." @cp Info.plist $(MACOSXDIRSTRUCT)/Contents/ $(MACOSXRESDIRSTRUCT): $(RESOURCES) @echo "Creating $(MACOSXAPPDIRSTRUCT)..." @-rm -rf $(MACOSXRESDIRSTRUCT)/ @mkdir -p $(MACOSXRESDIRSTRUCT)/ @echo "Copying resources..." @cp -R $(RESOURCES) $(MACOSXRESDIRSTRUCT)/ $(MACOSXAPPDIRSTRUCT): @echo "Creating $(MACOSXAPPDIRSTRUCT)..." @mkdir -p $(MACOSXAPPDIRSTRUCT)/ $(MACOSXAPPDIRSTRUCT)/$(PROJECT): $(OBJECTS) $(MACOSXDIRSTRUCT) @echo " Linking $(MACOSXDIRSTRUCT)" @$(CC) -o $(MACOSXAPPDIRSTRUCT)/$(PROJECT) $(OBJECTS) $(LIBS) clean: @echo "Cleaning object files and application directory..." @-rm -rf $(OBJECTS) *~ $(PROJECT).app *~.* cynthiune.app-0.9.5/Preferences.gorm/0000755000175000017500000000000010413173130017047 5ustar gurkangurkancynthiune.app-0.9.5/Preferences.gorm/data.classes0000644000175000017500000000070110253057505021346 0ustar gurkangurkan{ "## Comment" = "Do NOT change this file, Gorm maintains it"; CynthiunePopUpButton = { Actions = ( ); Outlets = ( ); Super = NSPopUpButton; }; FirstResponder = { Actions = ( "orderFrontFontPanel:", "bundleChanged:" ); Super = NSObject; }; PreferencesController = { Actions = ( "bundleChanged:" ); Outlets = ( prefsWindow, bundleViewBox, bundleSelector ); Super = NSObject; }; }cynthiune.app-0.9.5/Preferences.gorm/objects.gorm0000644000175000017500000000543410253057505021405 0ustar gurkangurkanGNUstep archive00002afb:00000022:00000049:00000000:01GSNibContainer1NSObject01NSMutableDictionary1 NSDictionary&01NSString&%NSOwner0&%PreferencesController0&%GSCustomClassMap0&0&%GormNSPopUpButton0&%CynthiunePopUpButton0 &%Box0 1NSBox1NSView1 NSResponder% A A  C C  C C&0 1 NSMutableArray1 NSArray&0 % @g @g C| C  C| C&0 &01 NSTextFieldCell1 NSActionCell1 NSCell0&%Box01NSFont%&&&&&&&&0%01NSColor0&%NSNamedColorSpace0&%System0&%windowBackgroundColor00&%System0& % textColor @g @g%%0& % GormNSPanel01NSPanel1NSWindow%  C C&% CE D0%  C C  C C&0 & 01GSControlTemplate1GSClassSwapper1 NSPopUpButton1NSButton1 NSControl% B C B A  B A&0 &%01NSPopUpButtonCell1NSMenuItemCell1 NSButtonCell0&&&&&&&&&0 1NSMenu0!&0" &0#1 NSMenuItem0$&%Item 10%&&&%0&1NSImage0'& % common_Nibble%0(0)&%Item 2%&&%%0*0+&%Item 3%&&%%%0,&0-&&&&# %%%%%0.% C C @  C @&(0/ &00% @ @ C   C &01 &02 03&%Box&&&&&&&& @ @%%04&%Window05& % Preferences5 C Cr F@ F@%0607&%NSApplicationIcon08&% Box1.09 &  0:1NSNibConnector0;&%NSOwner0<1NSNibOutletConnector;0=& % prefsWindow0> 0?; 0@& % bundleViewBox0A0B1NSNibControlConnector;0C&%bundleChanged:0D;0E&%bundleSelector0F;0G&%delegate0H80I1 GSMutableSet1! NSMutableSet1"NSSet&cynthiune.app-0.9.5/Preferences.gorm/data.info0000644000175000017500000000027010253057505020645 0ustar gurkangurkanGNUstep archive00002afb:00000003:00000003:00000000:01GormFilePrefsManager1NSObject%01NSString&%Latest Version0& % Typed Streamcynthiune.app-0.9.5/unittest.make0000644000175000017500000000160310224644002016362 0ustar gurkangurkanOTEST = otest UNITTEST_API_HEADER_FILES = $($(FRAMEWORK_NAME)_API_HEADER_FILES) UNITTEST_API_OBJC_FILES = $($(FRAMEWORK_NAME)_API_OBJC_FILES) UNITTEST_API_DIRECTORY = $($(FRAMEWORK_NAME)_API_DIRECTORY) $(FRAMEWORK_NAME)_HEADER_FILES += $(UNITTEST_API_HEADERS_FILES) $(FRAMEWORK_NAME)_OBJC_FILES += $(UNITTEST_API_OBJC_FILES) $(FRAMEWORK_NAME)_CFLAGS += -I$(UNITTEST_API_DIRECTORY)/.. -I$(UNITTEST_API_DIRECTORY) $(FRAMEWORK_NAME)_LDFLAGS += -lSenTestingKit -lgnustep-base -lgnustep-gui all:: before-all:: $(UNITTEST_API_HEADER_FILES) $(UNITTEST_API_OBJC_FILES) $(UNITTEST_API_HEADER_FILES) $(UNITTEST_API_OBJC_FILES): @echo Linking API file '$@'... @rm -f $@ @ln -s $(UNITTEST_API_DIRECTORY)/$@ ./ after-distclean after-clean:: @echo Cleaning API symlinks... @rm -f $(UNITTEST_API_HEADER_FILES) $(UNITTEST_API_OBJC_FILES) test:: all @$(OTEST) -SenTest All $(FRAMEWORK_NAME).framework cynthiune.app-0.9.5/PlayerController.m0000644000175000017500000000155710146515077017346 0ustar gurkangurkan/* PlayerController.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ cynthiune.app-0.9.5/COPYING0000644000175000017500000004311007761435035014716 0ustar gurkangurkan GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 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. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. cynthiune.app-0.9.5/PreferencesController.h0000644000175000017500000000324210203054704020324 0ustar gurkangurkan/* PreferencesController.h - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef PreferencesController_H #define PreferencesController_H @class NSBox; @class NSMutableDictionary; @class NSWindow; @class CynthiunePopUpButton; @interface PreferencesController : NSObject { BOOL windowIsVisible; NSMutableArray *preferenceList; Class currentBundleClass; NSWindow *prefsWindow; CynthiunePopUpButton *bundleSelector; NSBox *bundleViewBox; NSView *currentView; } + (PreferencesController *) preferencesController; - (PreferencesController *) init; - (void) registerPreferenceClass: (Class) aClass; - (void) loadPreferencesWindow; - (void) loadPreferencesWindowAndSelectMenuEntry: (NSString *) entry; - (void) setBundleView: (id) bundlePrefsView; - (void) setBundleClass: (Class) aClass; - (void) bundleChanged: (id)sender; @end #endif /* PreferencesController_H */ cynthiune.app-0.9.5/NEWS0000644000175000017500000002066210413165245014360 0ustar gurkangurkanversion 0.9.5: - some files were separated into a new Cynthiune framework, so that other developers can now start writing extension bundles and so that bundles do not have to rely on internal symbols either; - added support for WMA and ASF audio formats through the new WindowsMedia bundle; - added support for the MPC audio format through the new Musepack bundle; - added support for midi files through the Timidity bundle, which requires timidity to be installed; - added support for the aRts sound daemon through the new aRts output bundle; - added flags on GNUstep to ignore compilation of all or specific bundles: set disable-bundles or disable-{oss,esound,mod,mp3,ogg,flac,windowsmedia, musepack,timidity} to "yes" to do this; - song filenames can now be dragged from Cynthiune to other applications on MacOS X; - fixed a bug that could make the MP3 bundle hang forever when seeking the beginning of an empty file; - fixed a bug in the MP3 bundle where it would skip the first few frames of a tagged file; - the MP3 bundles returns a more accurate duration of buggy vbr files; - added a "Tools" menu; - added a Song inspector to display and edit song metadata; - added support for resolving song metadata through the MusicBrainz database; - we now use an image to indicate which song is currently playing instead of using the selection mechanism; - fixed a bug that would mess up the selection when the playlist was sorted; - added a playlist status label that displays the number of songs and the total time of the playlist, as well as the time taken by all the selected songs, if any; - fixed a bug that would crash Cynthiune and maybe screw the default playlist when a selection of songs was dragged to a position with a distance to the end of the playlist inferior to the amount of songs being dragged; - the playlist code has been totally rewritten to be modular. Meanwhile, playlists with relative filenames can now be saved and also read; - removed the "mute" button since considered useless; - the state of the player is saved in the preferences; - the playlist menus were replaced with a more convenient and standard toolbar; - added German translation, thanks to Julian Frede; - updated Italian translation; - added Hungarian translation, thanks to Andras; - added Traditional Chinese translation, thanks to Yen-Ju Chen; - added Spanish translation, thanks to Pablo Di Noto; - added Slovak translation, thanks to Saso Kiselkov; - added ability to manipulate the song selection with the keyboard in the playlist, the valid keys are the home, end and arrow keys (with or without shift) to alter the selection, delete and enter to remove songs and activate the selection in the player; - many GUI tweaking and enhancements. version 0.9.4: - made the Services menu and mechanism work again; - made the DnD of song filenames work properly on MacOSX, by complying with Apple's documentation; - added the ability to send a bug report from the Info menu; - activated the application menu; - fixed a bug that was recording the wrong date and size informations for songs in the stored playlist, reducing the speedup brought by the use of an NSKeyedArchive; - fixed a bug that was preventing the player to skip invalid songs; - fixed a bug that was requesting the player to start playing when the column headers were double-clicked on GNUstep; - fixed a bug in the Esound bundle that was preventing the socket to be reinitialized with the correct song rate and channels informations; - add a "Cleanup" entry in the "Remove" dropdown menu that performs the removal of all the songs that either were not recognized with their format or are missing in the filesystem. - fixed a bug that was preventing the OSS output bundle to start correctly when no dsp device was set in the preferences. version 0.9.3a: - this version now builds and runs on MacOS X again; version 0.9.3: - do not interpret command-line arguments starting with "-" as songs; - a bunch of new supported file formats were added: - added the Mod format module relying on libmodplug (thanks to Rob Burns), adding support for 23 types of tracker file formats (mod, s3m, ...); - added the AudioFile format module relying on libaudiofile, adding support for 7 types of uncompressed sound formats (wav, aiff, ...); - added the FLAC format module relying on libflac, adding support for the Free Lossless Audio Codec; - factory methods return autoreleased object by default, to comply with the coding standards; - reworked the player interface; - eradicated the memleaks (thanks to Ludovic Marcotte); - the column headers can now be used to sort the playlist in ascending and descending orders; - UTF16'd language dictionaries; - dropped embryonic support for OpenStep 4.2; - the timer is reversed directly when clicked; - when changing the selection in the playlist, the total time taken by the songs is displayed during one second; - the default playlist is saved in /Cynthiune/Playlist rather than in the defaults database (migration is transparent); - loading the default playlist is made faster by the use of NSKeyedArchiver/NSKeyedUnarchiver. - supported extensions appears case-insensitively in the open dialog; - fixed the display of UTF8-encoded song metadata; - added Italian translation (thanks to Roberto Pariset); - MacOSX users can select whether Cynthiune will display textured or regular windows; - the Esound and OSS drivers are no longer threaded, this makes the playing of songs faster to start since no lock has to be instantiated. - the output bundles and the output mechanism were redesigned and made simpler, cleaner; version 0.9.2: - fixed two buggy behaviours related to the playlist management, both when repeat is on and off; - unified interface files (nib/gorm); - fixed a bug related to the resizing of sticked playlist windows; - the preferences window won't crash the application any longer (thanks to Ludovic Marcotte); - the preference dialogs are now localized too; - the active playlist is synced to the defaults database so that we won't lose it anymore when Cynthiune crashes; - the MP3 bundle now has support for the RIFF encapsulation format as well as for the MPEG 1/2/2.5 Layer 1/2/3 formats; - Cynthiune can now be launched from its source directory without adapting the source code; - GNUstep and MacOSX releases are again on par with each other (thanks to my friend Cynthia for offering me her iMac); - the windows menu is enabled properly; - services that can manage filenames are made available in the "Services" menu, they will be given the list of selected song filenames as parameter; - the playlist can serve as a dragging source for music files to other applications and widget accepting NSFilenamePboardType objects; - major code cleanup (memleaks, coding conventions, refactoring); - the timer field can display the time remaining for the current song by clicking on it; - when the selection of songs is changing, the total time taken by those songs is displayed in the timer field; - dropped usage of that crappy Sodipodi piece of voodooware after losing an important file (see rant about free software in the README); - aesthetical details modified; version 0.9.1: - cosmetic changes (new buttons); - new pause button; - fixed crash in dummy output bundle; - new application icon, thanks to Mivil Deschnes ; version 0.9: - the sound stream is now handled by a different thread than the GUI (Esound/OSS); - French translation; - MP3 format is now supported through libmad; - Cynthiune keeps its playlist saved between sessions; - import/export playlists in .m3u and .pls; - we now accept input and output plugins as Bundles; - a bundle was added to support output to esd; - a basic implementation of a preferences system; - windows stickiness; - repeat and shuffle; - ability to change the current position in the song; - misc. interface enhancements; version 0.4: - bug fix version; version 0.3: - mute button works - "pause" implemented - file metadata (artist, song titles, ...) handled - timer displayed - new logo and better application icon - drag and drop: - list reorganization; - file dropping from workspace; - file dragged on the application's icon are opened; - correct window resizing; - quit when the window is closed; version 0.2: - make everything work as expected: don't crash unexpectedly, don't stop playing for strange reasons; version 0.1: - late Christmas release, very basic, full of bugs Local variables: mode: text End: cynthiune.app-0.9.5/Frameworks/0000755000175000017500000000000010413174046015772 5ustar gurkangurkancynthiune.app-0.9.5/Frameworks/Cynthiune/0000755000175000017500000000000010413256177017746 5ustar gurkangurkancynthiune.app-0.9.5/Frameworks/Cynthiune/NSTimerExtensions.h0000644000175000017500000000205510255320515023512 0ustar gurkangurkan/* NSTimerExtensions.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSTIMEREXTENSIONS_H #define NSTIMEREXTENSIONS_H #import @interface NSTimer (CynthiuneExtensions) - (void) explode; @end #endif /* NSTIMEREXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSTimerExtensions.m0000644000175000017500000000242210263121066023514 0ustar gurkangurkan/* NSTimerExtensions.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import "NSTimerExtensions.h" @implementation NSTimer (CynthiuneExtensions) - (void) explode { NSRunLoop *runLoop; runLoop = [NSRunLoop currentRunLoop]; [runLoop addTimer: self forMode: NSDefaultRunLoopMode]; [runLoop addTimer: self forMode: NSEventTrackingRunLoopMode]; [runLoop addTimer: self forMode: NSModalPanelRunLoopMode]; } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/Format.h0000644000175000017500000000274410315570505021351 0ustar gurkangurkan/* Format.h - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Format_H #define Format_H #import @class NSString; @protocol NSObject; @protocol Format + (BOOL) canTestFileHeaders; + (BOOL) streamTestOpen: (NSString *) fileName; + (NSArray *) acceptedFileExtensions; + (NSArray *) compatibleTagBundles; - (BOOL) streamOpen: (NSString *) fileName; - (void) streamClose; - (int) readNextChunk: (unsigned char *) buffer withSize: (unsigned int) bufferSize; - (BOOL) isSeekable; - (void) seek: (unsigned int) seconds; - (unsigned int) readChannels; - (unsigned long) readRate; - (unsigned int) readDuration; @end #endif /* Format_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/GNUmakefile.preamble0000644000175000017500000000175110263121066023601 0ustar gurkangurkan# GNUmakefile.preamble - this file is part of Cynthiune # # Copyright (C) 2004 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. ADDITIONAL_OBJCFLAGS += -Wall -Wno-import ifneq (mingw32, $(GNUSTEP_TARGET_OS)) ifeq ($(debug), yes) ADDITIONAL_LDFLAGS = -lmcheck endif endif cynthiune.app-0.9.5/Frameworks/Cynthiune/NSCellExtensions.m0000644000175000017500000000234610407716547023336 0ustar gurkangurkan/* NSCellExtensions.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import "NSCellExtensions.h" @implementation NSCell (CynthiuneExtensions) - (float) widthOfText: (NSString *) text { NSDictionary *attributes; attributes = [NSDictionary dictionaryWithObject: [self font] forKey: NSFontAttributeName]; return [text sizeWithAttributes: attributes].width + 5.0; } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/NSArrayExtensions.m0000644000175000017500000001212510407730777023532 0ustar gurkangurkan/* NSArrayExtensions.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE 1 #import #import #import #import #import #import "NSArrayExtensions.h" #import "utils.h" @implementation NSArray (CynthiuneExtension) // + (NSArray *) arrayFromPlaylistFile: (NSString *) filename // { // NSArray *array; // if (filename) // { // if (fileIsAcceptable (filename)) // { // } // else // raiseException (@"invalid filename", @"'filename' parameter should" // @" represent a valid and readable file"); // } // else // raiseException (@"'nil' filename", @"the 'filename' parameter cannot be nil"); // return array; // } // - (BOOL) containsAllSubarray: (NSArray *) subarray // { // NSEnumerator *enumerator; // id object; // BOOL result; // result = YES; // enumerator = [subarray objectEnumerator]; // object = [enumerator nextObject]; // while (object && result) // { // result = [self containsObject: object]; // object = [enumerator nextObject]; // } // return result; // } - (NSArray *) subarrayWithObjectsAtIndexes: (NSArray *) indexes { NSEnumerator *enumerator; NSMutableArray *subarray; id index; subarray = [NSMutableArray new]; [subarray autorelease]; enumerator = [indexes objectEnumerator]; index = [enumerator nextObject]; while (index) { [subarray addObject: [self objectAtIndex: [index intValue]]]; index = [enumerator nextObject]; } return subarray; } - (unsigned int) numberOfValuesBelowValue: (int) value { NSEnumerator *enumerator; NSNumber *object; unsigned int count; int currentValue; count = 0; enumerator = [self objectEnumerator]; object = [enumerator nextObject]; while (object) { currentValue = [object intValue]; if (currentValue < value) count++; object = [enumerator nextObject]; } return count; } @end @implementation NSMutableArray (CynthiuneExtension) - (void) addObjectsFromArray: (NSArray*) otherArray atIndex: (unsigned int) index { NSEnumerator *enumerator; unsigned int offset; id object; offset = 0; enumerator = [otherArray objectEnumerator]; object = [enumerator nextObject]; while (object) { [self insertObject: object atIndex: index + offset]; offset++; object = [enumerator nextObject]; } } - (unsigned int) moveObjectsAtIndexes: (NSArray *) indexes toIndex: (unsigned int) index { unsigned int newIndex; NSArray *objects; newIndex = 0; if (indexes) { if (index <= [self count]) { newIndex = (index - [indexes numberOfValuesBelowValue: index]); objects = [self subarrayWithObjectsAtIndexes: indexes]; [self removeObjectsInArray: objects]; if (newIndex == [self count] + 1) newIndex--; [self addObjectsFromArray: objects atIndex: newIndex]; } else indexOutOfBoundsException (index, [self count] + 1); } else raiseException (@"'nil' array", @"nil 'indexes' parameter"); return newIndex; } - (void) addObjectRandomly: (id) object { unsigned int randomPos; time_t now; static time_t seedModifier; if (object) { seedModifier++; time (&now); srand (now + seedModifier); randomPos = ((float) [self count] * rand ()) / RAND_MAX + .5; [self insertObject: object atIndex: randomPos]; } else raiseException (@"'nil' object", @"nil 'object' parameter"); } - (void) rotateUpToObject: (id) object { id currentObject; if (object) { if ([self containsObject: object]) { currentObject = [self objectAtIndex: 0]; while (currentObject != object) { [currentObject retain]; [self removeObjectAtIndex: 0]; [self addObject: currentObject]; [currentObject release]; currentObject = [self objectAtIndex: 0]; } } else raiseException (@"Object not in array", @"the given object was not found in the array"); } else raiseException (@"'nil' object", @"nil 'object' parameter"); } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/NSViewExtensions.h0000644000175000017500000000221510257406241023345 0ustar gurkangurkan/* NSViewExtensions.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSVIEWEXTENSIONS_H #define NSVIEWEXTENSIONS_H #import @interface NSView (CynthiuneExtension) - (void) arrangeViewRightTo: (NSView *) view; - (void) arrangeViewLeftTo: (NSView *) view; - (void) centerViewHorizontally; @end #endif /* NSVIEWEXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSColorExtensions.h0000644000175000017500000000241210404626626023515 0ustar gurkangurkan/* NSColorExtensions.h - this file is part of $PROJECT_NAME_HERE$ * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSCOLOREXTENSIONS_H #define NSCOLOREXTENSIONS_H #import @interface NSColor (CynthiuneExtensions) + (NSColor *) evenRowsBackgroundColor; + (NSColor *) oddRowsBackgroundColor; + (NSColor *) rowsHighlightColor; /* work-arounds for OSX */ + (NSColor *) alternateSelectedControlColor; + (NSColor *) alternateSelectedControlTextColor; @end #endif /* NSCOLOREXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSArrayExtensions.h0000644000175000017500000000320610317156631023514 0ustar gurkangurkan/* NSArrayExtensions.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSARRAYEXTENSIONS_H #define NSARRAYEXTENSIONS_H #import @class NSString; @interface NSArray (CynthiuneExtension) // + (NSArray *) arrayFromPlaylistFile: (NSString *) filename; // - (BOOL) containsAllSubarray: (NSArray *) subarray; - (NSArray *) subarrayWithObjectsAtIndexes: (NSArray *) indexes; - (unsigned int) numberOfValuesBelowValue: (int) index; @end @interface NSMutableArray (CynthiuneExtension) - (void) addObjectsFromArray: (NSArray*) otherArray atIndex: (unsigned int) index; - (unsigned int) moveObjectsAtIndexes: (NSArray *) indexes toIndex: (unsigned int) index; - (void) addObjectRandomly: (id) object; - (void) rotateUpToObject: (id) object; @end #endif /* NSARRAYEXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSNumberExtensions.m0000644000175000017500000000271410255321717023676 0ustar gurkangurkan/* NSNumberExtensions.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import "NSNumberExtensions.h" @implementation NSNumber (CynthiuneExtension) - (NSString *) timeStringValue { NSString *timeString; unsigned int hours, minutes, seconds; seconds = [self unsignedIntValue]; hours = seconds / 3600; if (hours) seconds = seconds % (hours * 3600); minutes = seconds / 60; if (minutes) seconds = seconds % (minutes * 60); timeString = (hours) ? [NSString stringWithFormat: @"%d:%.2d:%.2d", hours, minutes, seconds] : [NSString stringWithFormat: @"%d:%.2d", minutes, seconds]; return timeString; } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/NSStringExtensions.h0000644000175000017500000000231410407440532023677 0ustar gurkangurkan/* NSStringExtensions.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSSTRINGEXTENSIONS_H #define NSSTRINGEXTENSIONS_H #import @interface NSString (CynthiuneExtension) - (NSComparisonResult) numericallyCompare: (NSString *) aString; - (NSString *) relativePathFromDirectoryToFile: (NSString *) filename; - (NSArray *) linesFromFileContent; @end #endif /* NSSTRINGEXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSColorExtensions.m0000644000175000017500000000342210407724023023515 0ustar gurkangurkan/* NSColorExtensions.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import "NSColorExtensions.h" @implementation NSColor (CynthiuneExtensions) + (NSColor *) evenRowsBackgroundColor { return [NSColor colorWithDeviceRed: 0.88 green: 0.88 blue: 1.0 alpha: 1.0]; } + (NSColor *) oddRowsBackgroundColor { return [self colorWithDeviceRed: 0.98 green: 0.98 blue: 1.0 alpha: 1.0]; } + (NSColor *) rowsHighlightColor { return [NSColor colorWithDeviceRed: 0.92 green: 0.893 blue: 0.209 alpha: 1.00]; // return [NSColor alternateSelectedControlColor]; } /* work-around a bug in OSX where the table rows get highlighted with this color before our chosen color */ + (NSColor *) alternateSelectedControlColor { return [self rowsHighlightColor]; } + (NSColor *) alternateSelectedControlTextColor { return [self controlTextColor]; } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/Tags.h0000644000175000017500000000304410327263234021012 0ustar gurkangurkan/* Tags.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef TAGS_H #define TAGS_H @protocol TagsReading + (BOOL) readTitle: (NSString **) title artist: (NSString **) artist album: (NSString **) album trackNumber: (NSString **) trackNumber genre: (NSString **) genre year: (NSString **) year ofFilename: (NSString *) filename; @end @protocol TagsWriting + (BOOL) setTitle: (NSString *) title artist: (NSString *) artist album: (NSString *) album trackNumber: (NSString *) trackNumber genre: (NSString *) genre year: (NSString *) year ofFilename: (NSString *) filename; @end #endif /* TAGS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/GNUmakefile0000644000175000017500000000412010413256177022015 0ustar gurkangurkan# GNUmakefile - this file is part of Cynthiune # # Copyright (C) 2004, 2005 Wolfgang Sourdeau # # Author: Wolfgang Sourdeau # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This file 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. # # You should have received a copy of the GNU General Public License # along with this program; see the file COPYING. If not, write to # the Free Software Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # include $(GNUSTEP_MAKEFILES)/common.make PACKAGE_NAME = Cynthiune LIBRARY_VAR = CYNTHIUNE LIBRARY_NAME = Cynthiune FRAMEWORK_NAME = Cynthiune CYNTHIUNE_MAJOR_VERSION=0 CYNTHIUNE_MINOR_VERSION=0 CYNTHIUNE_SUBMINOR_VERSION=1 CYNTHIUNE_VERSION=${CYNTHIUNE_MAJOR_VERSION}.${CYNTHIUNE_MINOR_VERSION}.${CYNTHIUNE_SUBMINOR_VERSION} VERSION=${CYNTHIUNE_VERSION} Cynthiune_LANGUAGES= Cynthiune_LOCALIZED_RESOURCE_FILES= # # Resource files # Cynthiune_RESOURCE_FILES= # # Header files # Cynthiune_HEADER_FILES= \ CynthiuneBundle.h \ Format.h \ MailService.h \ NSArrayExtensions.h \ NSCellExtensions.h \ NSColorExtensions.h \ NSNumberExtensions.h \ NSStringExtensions.h \ NSTimerExtensions.h \ NSViewExtensions.h \ Output.h \ Preference.h \ utils.h # # Class files # Cynthiune_OBJC_FILES= \ MailService.m \ NSArrayExtensions.m \ NSCellExtensions.m \ NSColorExtensions.m \ NSNumberExtensions.m \ NSStringExtensions.m \ NSTimerExtensions.m \ NSViewExtensions.m \ utils.m Cynthiune_LIBRARIES_DEPEND_UPON += -lgnustep-gui -l$(FOUNDATION_LIBRARY_NAME) -include GNUmakefile.preamble -include GNUmakefile.local ifeq (mingw32, $(GNUSTEP_TARGET_OS)) include $(GNUSTEP_MAKEFILES)/library.make else include $(GNUSTEP_MAKEFILES)/framework.make endif -include GNUmakefile.postamble cynthiune.app-0.9.5/Frameworks/Cynthiune/utils.m0000644000175000017500000001041710407730714021264 0ustar gurkangurkan/* utils.m - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #define _GNU_SOURCE 1 #import #import #import #if defined (__MACOSX__) || defined (__WIN32__) char * strndup (const char *string, unsigned int len) { char *newString; if (strlen (string) > len) { newString = malloc (len + 1); strncpy (newString, string, len); *(newString + len) = 0; } else newString = strdup (string); return newString; } #endif void logRect (NSRect *rect) { NSLog (@"rect = %@;", NSStringFromRect (*rect)); } NSString * _b (Class bundleClass, NSString *string) { return [[NSBundle bundleForClass: bundleClass] localizedStringForKey: string value: @"" table: nil]; } BOOL fileIsAReadableDirectory (NSString *fileName) { BOOL isDir; NSFileManager *fileManager; fileManager = [NSFileManager defaultManager]; return ([fileManager fileExistsAtPath: fileName isDirectory: &isDir] && isDir && [fileManager isReadableFileAtPath: fileName]); } BOOL fileIsAcceptable (NSString *fileName) { BOOL answer; NSDictionary *fileAttributes; NSFileManager *fileManager; NSString *directory, *link; fileManager = [NSFileManager defaultManager]; fileAttributes = [fileManager fileAttributesAtPath: fileName traverseLink: NO]; while ([fileManager fileExistsAtPath: fileName] && [[fileAttributes fileType] isEqualToString: NSFileTypeSymbolicLink]) { link = [fileManager pathContentOfSymbolicLinkAtPath: fileName]; directory = [fileName stringByDeletingLastPathComponent]; if ([link isAbsolutePath]) fileName = link; else fileName = [directory stringByAppendingPathComponent: link]; fileAttributes = [fileManager fileAttributesAtPath: fileName traverseLink: NO]; } answer = ([fileManager fileExistsAtPath: fileName] && [[fileAttributes fileType] isEqualToString: NSFileTypeRegular]); return answer; } void invertBytesInBuffer (char *buffer, int length) { unsigned int count; char tmpChar; char *ptr; if (length < 0) NSLog (@"invertBytesInBuffer: negative length: %d", length); else { if (length % 2) NSLog (@"invertBytesInBuffer: odd length: %d", length); else { count = 0; while (count < length) { ptr = buffer + count; tmpChar = *ptr; *ptr = *(ptr + 1); *(ptr + 1) = tmpChar; count += 2; } } } } void convert8to16 (unsigned char *inBuffer, unsigned char *outBuffer, unsigned int size) { unsigned int count, outCount; unsigned char conversionValue; outCount = 0; for (count = 0; count < size; count++) { conversionValue = *(inBuffer + count); *(outBuffer + outCount) = conversionValue; *(outBuffer + outCount + 1) = conversionValue; outCount += 2; } } NSComparisonResult reverseComparisonResult (NSComparisonResult result) { NSComparisonResult newResult; if (result == NSOrderedSame) newResult = NSOrderedSame; else newResult = ((result == NSOrderedAscending) ? NSOrderedDescending : NSOrderedAscending); return newResult; } NSString * makeTitleFromFilename (NSString *fileName) { NSString *title; title = [[fileName lastPathComponent] stringByDeletingPathExtension]; return [title capitalizedString]; } cynthiune.app-0.9.5/Frameworks/Cynthiune/NSCellExtensions.h0000644000175000017500000000207310257413272023316 0ustar gurkangurkan/* NSCellExtensions.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSCELLEXTENSIONS_H #define NSCELLEXTENSIONS_H #import @interface NSCell (CynthiuneExtensions) - (float) widthOfText: (NSString *) text; @end #endif /* NSCELLEXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/Output.h0000644000175000017500000000340010376422147021414 0ustar gurkangurkan/* Output.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef OUTPUT_H #define OUTPUT_H #import #import #define DEFAULT_BUFFER_SIZE 8192 @class NSData; @protocol Output + (BOOL) isThreaded; - (void) setParentPlayer: (id) aPlayer; - (BOOL) openDevice; - (void) closeDevice; - (BOOL) prepareDeviceWithChannels: (unsigned int) numberOfChannels andRate: (unsigned long) sampleRate; @end /* an informal protocol for non-threaded output classes */ @interface NSObject (UnthreadedOutput) - (void) playChunk: (NSData *) chunk; @end /* an informal protocol for threaded output classes */ @interface NSObject (ThreadedOutput) - (BOOL) startThread; - (void) stopThread; @end @interface NSObject (ParentPlayer) - (int) readNextChunk: (const unsigned char *) buffer withSize: (const unsigned int) bufferSize; - (void) chunkFinishedPlaying; @end #endif /* OUTPUT_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSStringExtensions.m0000644000175000017500000000640310407440532023707 0ustar gurkangurkan/* NSStringExtensions.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import "NSStringExtensions.h" #import "utils.h" @implementation NSString (CynthiuneExtension) - (NSComparisonResult) numericallyCompare: (NSString *) aString { NSComparisonResult result; int firstValue, secondValue; firstValue = [self intValue]; secondValue = [aString intValue]; if (firstValue < secondValue) result = NSOrderedAscending; else if (firstValue > secondValue) result = NSOrderedDescending; else result = NSOrderedSame; return result; } - (NSString *) _relativePathFromDirectoryToFile: (NSString *) filename { NSArray *filePathComponents, *directoryPathComponents; unsigned int deltaPoint, count, max; NSString *path; path = @""; directoryPathComponents = [self pathComponents]; filePathComponents = [filename pathComponents]; max = [directoryPathComponents count]; count = 0; while (count < max && [[directoryPathComponents objectAtIndex: count] isEqualToString: [filePathComponents objectAtIndex: count]]) count++; deltaPoint = count; for (count = deltaPoint; count < max; count++) path = [path stringByAppendingPathComponent: @".."]; max = [filePathComponents count]; for (count = deltaPoint; count < max; count++) path = [path stringByAppendingPathComponent: [filePathComponents objectAtIndex: count]]; return path; } - (NSString *) relativePathFromDirectoryToFile: (NSString *) filename { NSString *path; path = @""; if (filename) { if ([self isAbsolutePath]) { if ([filename isAbsolutePath]) path = [self _relativePathFromDirectoryToFile: filename]; else raiseException (@"relative file reference", @"the reference file should be an" @" absolute filename"); } else raiseException (@"relative directory reference", @"the reference directory should be an" @" absolute filename"); } else raiseException (@"'nil' string", @"nil 'filename' parameter"); return path; } - (NSArray *) linesFromFileContent { NSArray *fileLines; fileLines = [self componentsSeparatedByString: @"\r\n"]; if ([self isEqualToString: [fileLines objectAtIndex: 0]]) fileLines = [self componentsSeparatedByString: @"\n"]; return fileLines; } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/utils.h0000644000175000017500000000625410315353377021267 0ustar gurkangurkan/* utils.h - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef UTILS_H #define UTILS_H #import #import @class NSArray; #define SET(X,Y) if (X) [X release]; X = Y; if (X) [X retain] #define RELEASEIFSET(X) if (X) [X release] #define RETURNSTRING(X) return ((X) ? [NSString stringWithString: X] : @"") #ifdef __MACOSX__ #define sel_get_name(X) sel_getName(X) #define NSStandardLibraryPaths() \ NSSearchPathForDirectoriesInDomains (NSAllLibrariesDirectory, \ NSAllDomainsMask, YES) #endif /* __MACOSX__ */ #if defined (__WIN32__) || defined (__MACOSX__) char *strndup (const char *string, unsigned int len); #endif /* __WIN32__ || __MACOSX__ */ #define obsoleteMethod() \ [[NSException exceptionWithName: @"Obsolete method" \ reason: ([NSString stringWithFormat: @"'%s'" \ @" (%s, %d) is an obsolete method.", \ sel_get_name (_cmd), __FILE__, __LINE__]) \ userInfo: nil] raise] #define unimplementedMethod() \ [[NSException exceptionWithName: @"Unimplemented method" \ reason: ([NSString stringWithFormat: @"'%s'" \ @" (%s, %d) unimplemented.", \ sel_get_name (_cmd), __FILE__, __LINE__]) \ userInfo: nil] raise] #define raiseException(t,r) \ [[NSException exceptionWithName: (t) \ reason: ([NSString stringWithFormat: @"%@ in '%s'" \ @" (%s:%d).", \ (r), sel_get_name (_cmd), __FILE__, __LINE__]) \ userInfo: nil] raise] #define indexOutOfBoundsException(i,m) \ raiseException (@"Index out of bounds", \ ([NSString stringWithFormat: \ @"index '%u' too high (max = %d)", i, m])) BOOL fileIsAReadableDirectory (NSString *fileName); BOOL fileIsAcceptable (NSString *fileName); void logRect (NSRect *rect); NSString *_b (Class bundleClass, NSString *string); void invertBytesInBuffer (char *buffer, int length); void convert8to16 (unsigned char *inBuffer, unsigned char *outBuffer, unsigned int size); NSComparisonResult reverseComparisonResult (NSComparisonResult result); NSString *makeTitleFromFilename (NSString *fileName); #endif /* UTILS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/CynthiuneBundle.h0000644000175000017500000000215610407750343023220 0ustar gurkangurkan/* CynthiuneBundle.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEBUNDLE_H #define CYNTHIUNEBUNDLE_H @class NSArray; @class NSString; @protocol NSObject; @protocol CynthiuneBundle + (NSString *) bundleDescription; + (NSArray *) bundleCopyrightStrings; @end #endif /* CYNTHIUNEBUNDLE_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSViewExtensions.m0000644000175000017500000000377410257417770023376 0ustar gurkangurkan/* NSViewExtensions.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import "NSViewExtensions.h" #define interviewSpacing 5.0 @implementation NSView (CynthiuneExtension) - (void) arrangeViewRightTo: (NSView *) view { NSRect selfFrame, viewFrame; selfFrame = [self frame]; viewFrame = [view frame]; selfFrame.origin.x = NSMaxX (viewFrame) + interviewSpacing; [self setFrame: selfFrame]; [self setNeedsDisplay: YES]; } - (void) arrangeViewLeftTo: (NSView *) view { NSRect selfFrame, viewFrame; selfFrame = [self frame]; viewFrame = [view frame]; selfFrame.origin.x = (NSMinX (viewFrame) - interviewSpacing - NSWidth (selfFrame)); [self setFrame: selfFrame]; [self setNeedsDisplay: YES]; } - (void) centerViewHorizontally { NSView *superView; NSRect superFrame, selfFrame; NSPoint newOrigin; superView = [self superview]; if (superView) { superFrame = [superView frame]; selfFrame = [self frame]; newOrigin = selfFrame.origin; newOrigin.x = (NSWidth (superFrame) - NSWidth (selfFrame)) / 2.0; [self setFrameOrigin: newOrigin]; } else NSLog (@"NSView '%@' has no superview", self); } @end cynthiune.app-0.9.5/Frameworks/Cynthiune/Preference.h0000644000175000017500000000224110257412256022172 0ustar gurkangurkan/* Preference.h - this file is part of Cynthiune * * Copyright (C) 2003 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef Preference_H #define Preference_H #import @class NSObject; @class NSString; @class NSView; @protocol NSObject; @protocol Preference + (id) instance; - (NSString *) preferenceTitle; - (NSView *) preferenceSheet; - (void) save; @end #endif /* Preference_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/NSNumberExtensions.h0000644000175000017500000000212110255321703023654 0ustar gurkangurkan/* NSNumberExtensions.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef NSNUMBEREXTENSIONS_H #define NSNUMBEREXTENSIONS_H #import @class NSString; @interface NSNumber (CynthiuneExtension) - (NSString *) timeStringValue; @end #endif /* NSNUMBEREXTENSIONS_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/MailService.h0000644000175000017500000000222110257405041022307 0ustar gurkangurkan/* MailService.h - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef MAILSERVICE_H #define MAILSERVICE_H #ifdef __MACOSX__ #define mailApplication @"Mail" #else #define mailApplication @"GNUMail" #endif #import @interface MailService : NSObject { } + (id) instance; - (void) composeBugReport; @end #endif /* MAILSERVICE_H */ cynthiune.app-0.9.5/Frameworks/Cynthiune/MailService.m0000644000175000017500000000343210257405127022326 0ustar gurkangurkan/* MailService.m - this file is part of Cynthiune * * Copyright (C) 2004 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import "MailService.h" @implementation MailService : NSObject + (id) instance { static MailService *mailService = nil; if (!mailService) mailService = [MailService new]; return mailService; } - (void) composeBugReport { NSURL *mailtoURL; NSString *urlString; urlString = @"mailto:Wolfgang%20Sourdeau%20%3CWolfgang@Contre.COM%3E" @"?subject=[Cynthiune]%20bug%20report" @"&body=" @"[replace%20this%20with%20a%20detailed%20description" @"%20of%20the%20problem,%20including%20the%20why's,%20the%20when's%20" @"and%20the%20how's.]" @"%0D%0D" @"[replace%20this%20with%20your%20system%20informations:%20operating" @"%20system%20version,%20windowing%20environment,%20CPU,%20RAM,%20...]"; mailtoURL = [NSURL URLWithString: urlString]; [[NSWorkspace sharedWorkspace] openURL: mailtoURL]; } @end cynthiune.app-0.9.5/Playlist.m0000644000175000017500000003553510407704171015645 0ustar gurkangurkan/* Playlist.m - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #import #import #import #import #import #import #import #import #import #import "M3UArchiver.h" #import "PLSArchiver.h" #import "Playlist.h" #import "Song.h" static NSNotificationCenter *nc = nil; static NSString *PlaylistChangedNotification = @"PlaylistChangedNotification"; @implementation Playlist : NSObject + (void) initialize { if (!nc) nc = [NSNotificationCenter defaultCenter]; } - (id) init { if ((self = [super init])) { list = [NSMutableArray new]; shuffleList = nil; delegate = nil; } return self; } /* untestable method */ - (void) dealloc { [list release]; if (shuffleList) [shuffleList release]; if (delegate) [nc removeObserver: delegate name: nil object: self]; [super dealloc]; } - (void) setDelegate: (id) object { if (delegate) [nc removeObserver: delegate name: nil object: self]; delegate = object; if ([object respondsToSelector: @selector(playlistChanged:)]) { [nc addObserver: object selector: @selector (playlistChanged:) name: PlaylistChangedNotification object: self]; } } - (id) delegate { return delegate; } - (void) postNotificationWithSongAsFirst: (Song *) song { [nc postNotificationName: PlaylistChangedNotification object: self userInfo: [NSDictionary dictionaryWithObject: song forKey: @"firstSong"]]; } - (void) addSong: (Song *) song { if ([list containsObject: song]) raiseException (@"Duplicate song", @"a given song can be added only" @" once to the same playlist"); else { [list addObject: song]; if (shuffleList) [shuffleList addObjectRandomly: song]; [self postNotificationWithSongAsFirst: song]; } } - (void) addSongsInArray: (NSArray *) array { NSEnumerator *songEnumerator; id song; unsigned int max; Song *firstSong; if (array) { firstSong = nil; max = [list count]; songEnumerator = [array objectEnumerator]; song = [songEnumerator nextObject]; while (song) { if ([song isKindOfClass: [Song class]]) { if ([list containsObject: song]) raiseException (@"Duplicate song", @"a given song can be added only once to" @" the same playlist"); else { if (!firstSong) firstSong = song; [list addObject: song]; if (shuffleList) [shuffleList addObjectRandomly: song]; } } else raiseException (@"bad object in array", @"'array' may only contain Song instances"); song = [songEnumerator nextObject]; } if ([list count] > max) [self postNotificationWithSongAsFirst: firstSong]; } else raiseException (@"'nil' array", @"nil 'array' parameter"); } - (void) insertSong: (Song *) song atIndex: (unsigned int) index { if ([list containsObject: song]) raiseException (@"Duplicate song", @"a given song can be added only" @" once to the same playlist"); else { [list insertObject: song atIndex: index]; if (shuffleList) [shuffleList addObjectRandomly: song]; [self postNotificationWithSongAsFirst: song]; } } - (void) deleteSong: (Song *) song { if (song) { if ([list containsObject: song]) { [list removeObject: song]; if (shuffleList) [shuffleList removeObject: song]; [nc postNotificationName: PlaylistChangedNotification object: self]; } else raiseException (@"Song not in list", @"the given song was not found" @" in the list"); } else raiseException (@"'nil' song", @"nil 'song' parameter"); } - (void) deleteAllSongs { if ([list count]) { [list removeAllObjects]; [shuffleList removeAllObjects]; [nc postNotificationName: PlaylistChangedNotification object: self]; } } - (void) deleteAllSongsQuietly { [list removeAllObjects]; [shuffleList removeAllObjects]; } - (void) deleteSongsInArray: (NSArray *) array { NSEnumerator *songEnumerator; id song; unsigned int max; if (array) { max = [list count]; songEnumerator = [array objectEnumerator]; song = [songEnumerator nextObject]; while (song) { if ([song isKindOfClass: [Song class]]) { if ([list containsObject: song]) { [list removeObject: song]; if (shuffleList) [shuffleList removeObject: song]; } else raiseException (@"Song not in list", @"the given song was not found in the list"); } else raiseException (@"bad object in array", @"'array' may only contain Song instances"); song = [songEnumerator nextObject]; } if ([list count] < max) [nc postNotificationName: PlaylistChangedNotification object: self]; } else raiseException (@"'nil' array", @"nil 'array' parameter"); } - (NSArray *) arrayOfInvalidSongs { NSEnumerator *songEnumerator; NSMutableArray *invalidSongs; Song *song; unsigned int max; invalidSongs = [NSMutableArray new]; max = [list count]; if (max) { songEnumerator = [list reverseObjectEnumerator]; song = [songEnumerator nextObject]; while (song) { if ([song status] != SongOK) [invalidSongs addObject: song]; song = [songEnumerator nextObject]; } if ([list count] < max) [nc postNotificationName: PlaylistChangedNotification object: self]; } [invalidSongs autorelease]; return invalidSongs; } - (void) replaceSongsWithArray: (NSArray *) array { NSEnumerator *songEnumerator; id object; BOOL arraysAreEqual; if (array) { arraysAreEqual = [list isEqualToArray: array]; [list removeAllObjects]; if (shuffleList) [shuffleList removeAllObjects]; songEnumerator = [array objectEnumerator]; object = [songEnumerator nextObject]; while (object) { if ([object isKindOfClass: [Song class]]) { [list addObject: object]; if (shuffleList) [shuffleList addObjectRandomly: object]; } else raiseException (@"bad object in array", @"'array' may only contain Song instances"); object = [songEnumerator nextObject]; } if (!arraysAreEqual) [nc postNotificationName: PlaylistChangedNotification object: self]; } else raiseException (@"'nil' array", @"nil 'array' parameter"); } - (Song *) songAtIndex: (unsigned int) index { Song *song; song = nil; if (index < [list count]) song = [list objectAtIndex: index]; else indexOutOfBoundsException (index, [list count]); return song; } - (unsigned int) indexOfSong: (Song *) song { unsigned int index; index = 0; if (song) { if ([list containsObject: song]) index = [list indexOfObject: song]; else raiseException (@"Song not in list", @"the given song was not found" @" in the list"); } else raiseException (@"'nil' song", @"nil 'song' parameter"); return index; } - (unsigned int) moveSongsAtIndexes: (NSArray *) indexes toIndex: (unsigned int) index { unsigned int firstIndex; NSArray *listCopy; listCopy = [list copy]; firstIndex = [list moveObjectsAtIndexes: indexes toIndex: index]; if (![list isEqualToArray: listCopy]) [nc postNotificationName: PlaylistChangedNotification object: self]; return firstIndex; } - (Song *) firstSong { return ([list count] ? [list objectAtIndex: 0] : nil); } - (Song *) lastSong { unsigned int count; count = [list count]; return (count ? [list objectAtIndex: count - 1] : nil); } - (Song *) _nextValidSongInEnumerator: (NSEnumerator *) songEnumerator { Song *song, *result; result = nil; song = [songEnumerator nextObject]; while (!result && song) if ([song status] == SongOK) result = song; else song = [songEnumerator nextObject]; return result; } - (Song *) firstValidSong { NSArray *realList; realList = ((shuffleList) ? shuffleList : list); return [self _nextValidSongInEnumerator: [realList objectEnumerator]]; } - (Song *) lastValidSong { NSArray *realList; realList = ((shuffleList) ? shuffleList : list); return [self _nextValidSongInEnumerator: [list reverseObjectEnumerator]]; } - (Song *) songAfter: (Song *) song { Song *foundSong; unsigned int songIndex; NSArray *realList; foundSong = nil; if (song) { realList = ((shuffleList) ? shuffleList : list); if ([realList containsObject: song]) { songIndex = [realList indexOfObject: song]; if (songIndex < [realList count] - 1) foundSong = [realList objectAtIndex: (songIndex + 1)]; } else raiseException (@"Song not in list", @"the given song was not found" @" in the list"); } else raiseException (@"'nil' song", @"nil 'song' parameter"); return foundSong; } - (Song *) songBefore: (Song *) song { Song *foundSong; unsigned int songIndex; NSArray *realList; foundSong = nil; if (song) { realList = ((shuffleList) ? shuffleList : list); if ([realList containsObject: song]) { songIndex = [realList indexOfObject: song]; if (songIndex > 0) foundSong = [realList objectAtIndex: (songIndex - 1)]; } else raiseException (@"Song not in list", @"the given song was not found" @" in the list"); } else raiseException (@"'nil' song", @"nil 'song' parameter"); return foundSong; } - (Song *) validSongAfter: (Song *) song { Song *currentSong; currentSong = [self songAfter: song]; while (currentSong && [currentSong status] != SongOK) currentSong = [self songAfter: currentSong]; return currentSong; } - (Song *) validSongBefore: (Song *) song { Song *currentSong; currentSong = [self songBefore: song]; while (currentSong && [currentSong status] != SongOK) currentSong = [self songBefore: currentSong]; return currentSong; } - (unsigned int) numberOfSongs { return [list count]; } - (NSNumber *) duration { unsigned int intDuration; NSEnumerator *songEnumerator; Song *song; intDuration = 0; songEnumerator = [list objectEnumerator]; song = [songEnumerator nextObject]; while (song) { intDuration += [[song duration] intValue]; song = [songEnumerator nextObject]; } return [NSNumber numberWithUnsignedInt: intDuration]; } /* unimplemented methods */ - (void) setShuffle: (BOOL) shuffle { NSEnumerator *songEnumerator; id song; if (shuffle && !shuffleList) { shuffleList = [NSMutableArray new]; songEnumerator = [list objectEnumerator]; song = [songEnumerator nextObject]; while (song) { [shuffleList addObjectRandomly: song]; song = [songEnumerator nextObject]; } } else if (!shuffle && shuffleList) { [shuffleList release]; shuffleList = nil; } } - (BOOL) shuffle { return (shuffleList != nil); } - (void) shuffleFromSong: (Song *) song { if (song) { if ([list containsObject: song]) [shuffleList rotateUpToObject: song]; else raiseException (@"Song not in list", @"the given song was not found" @" in the list"); } else raiseException (@"'nil' song", @"nil 'song' parameter"); } - (void) _sortListUsingSelector: (SEL) comparator { NSArray *newList; newList = [list sortedArrayUsingSelector: comparator]; if (![newList isEqualToArray: list]) { [list setArray: newList]; [nc postNotificationName: PlaylistChangedNotification object: self]; } } - (void) sortByPlaylistRepresentation: (BOOL) reverseOrder { [self _sortListUsingSelector: ((reverseOrder) ? @selector (reverseCompareByPlaylistRepresentation:) : @selector (compareByPlaylistRepresentation:))]; } - (void) sortByDuration: (BOOL) reverseOrder { [self _sortListUsingSelector: ((reverseOrder) ? @selector (reverseCompareByDuration:) : @selector (compareByDuration:))]; } - (void) loadFromFile: (NSString *) file { NSString *extension; NSArray *newList; Class archiver; extension = [file pathExtension]; if ([extension caseInsensitiveCompare: @"cPls"] == NSOrderedSame) archiver = [NSKeyedUnarchiver class]; else if ([extension caseInsensitiveCompare: @"m3u"] == NSOrderedSame) archiver = [M3UUnarchiver class]; else if ([extension caseInsensitiveCompare: @"pls"] == NSOrderedSame) archiver = [PLSUnarchiver class]; else archiver = Nil; if (archiver) { newList = [archiver unarchiveObjectWithFile: file]; if (newList) [self addSongsInArray: newList]; } } - (void) saveToFile: (NSString *) file { NSString *extension; Class archiver; extension = [file pathExtension]; if ([extension caseInsensitiveCompare: @"cPls"] == NSOrderedSame) archiver = [NSKeyedArchiver class]; else if ([extension caseInsensitiveCompare: @"m3u"] == NSOrderedSame) archiver = [M3UArchiver class]; else if ([extension caseInsensitiveCompare: @"pls"] == NSOrderedSame) archiver = [PLSArchiver class]; else archiver = Nil; if (archiver) [archiver archiveRootObject: list toFile: file]; } @end cynthiune.app-0.9.5/CynthiuneFadingTextField.h0000644000175000017500000000334310375142737020727 0ustar gurkangurkan/* CynthiuneFadingTextField.h - this file is part of Cynthiune * * Copyright (C) 2005 Wolfgang Sourdeau * * Author: Wolfgang Sourdeau * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This file 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. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ #ifndef CYNTHIUNEFADINGTEXTFIELD_H #define CYNTHIUNEFADINGTEXTFIELD_H #import @class NSFont; @class NSString; @class NSTimer; @interface CynthiuneFadingTextField : NSTextField { NSTextField *fadeoutClone; NSTimer *fadingTimer; NSTimeInterval interval; unsigned int numberOfIterations; unsigned int iteration; float red; float green; float blue; float alpha; } - (void) setStringValue: (NSString *) string; - (void) setFont: (NSFont *) font; - (void) setAlignment: (NSTextAlignment) mode; - (void) setTextColor: (NSColor *) color; - (NSColor *) textColor; - (void) setInterval: (NSTimeInterval) timeInterval; - (void) setNumberOfIterations: (unsigned int) integer; - (NSTimeInterval) interval; - (unsigned int) numberOfIterations; - (void) setTextColorWithFactor: (float) factor; @end #endif /* CYNTHIUNEFADINGTEXTFIELD_H */