1 /*
2  * Copyright (C) 2002 - David W. Durham
3  *
4  * This file is part of ReZound, an audio editing application.
5  *
6  * ReZound is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published
8  * by the Free Software Foundation; either version 2 of the License,
9  * or (at your option) any later version.
10  *
11  * ReZound is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
19  */
20 
21 #include "CMp3Dialog.h"
22 
23 #include <stdlib.h>
24 
25 #include <istring>
26 
27 
28 FXDEFMAP(CMp3Dialog) CMp3DialogMap[]=
29 {
30 //	Message_Type			ID					Message_Handler
31 	FXMAPFUNC(SEL_COMMAND,		CMp3Dialog::ID_WHICH_BUTTON,		CMp3Dialog::onRadioButton),
32 };
33 
34 
FXIMPLEMENT(CMp3Dialog,FXModalDialogBox,CMp3DialogMap,ARRAYNUMBER (CMp3DialogMap))35 FXIMPLEMENT(CMp3Dialog,FXModalDialogBox,CMp3DialogMap,ARRAYNUMBER(CMp3DialogMap))
36 
37 
38 
39 // ----------------------------------------
40 
41 
42 static void fillBitRateComboBox(FXComboBox *c,bool t=false)
43 {
44 	c->appendItem("16000");
45 	c->appendItem("32000");
46 	c->appendItem("40000");
47 	c->appendItem("48000");
48 	c->appendItem("56000");
49 	c->appendItem("64000");
50 	c->appendItem("80000");
51 	c->appendItem("96000");
52 	c->appendItem("112000");
53 	c->appendItem("128000");
54 	c->appendItem("160000");
55 	c->appendItem("192000");
56 	c->appendItem("224000");
57 	c->appendItem("256000");
58 	if(!t)
59 		c->appendItem("320000");
60 	else
61 		c->appendItem("310000");
62 
63 	c->setCurrentItem(9);
64 	c->setNumVisible(c->getNumItems());
65 }
66 
CMp3Dialog(FXWindow * mainWindow)67 CMp3Dialog::CMp3Dialog(FXWindow *mainWindow) :
68 	FXModalDialogBox(mainWindow,N_("mp3 Compression Parameters"),0,0,FXModalDialogBox::ftVertical)//,
69 
70 	//notesFrame(new FXPacker(getFrame(),FRAME_SUNKEN|FRAME_THICK | LAYOUT_FILL_X|LAYOUT_FILL_Y, 0,0,0,0, 0,0,0,0, 0,0)),
71 		//notesTextBox(new FXText(notesFrame,NULL,0,TEXT_WORDWRAP | LAYOUT_FILL_X|LAYOUT_FILL_Y))
72 {
73 	FXComposite *main=new FXGroupBox(getFrame(),"",GROUPBOX_NORMAL|LAYOUT_FILL_X|LAYOUT_FILL_Y);
74 
75 	CBRButton=new FXRadioButton(main,_("Constant Bit Rate"),this,ID_WHICH_BUTTON);
76 		CBRFrame=new FXMatrix(main,2,MATRIX_BY_COLUMNS|FRAME_RAISED|LAYOUT_FILL_X);
77 			new FXLabel(CBRFrame,_("Bit Rate: "));
78 			bitRateComboBox=new FXComboBox(CBRFrame,10,NULL,0,COMBOBOX_NORMAL|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_STATIC);
79 			fillBitRateComboBox(bitRateComboBox);
80 
81 
82 	new FXFrame(main,LAYOUT_FIX_HEIGHT,0,0,1,10);
83 	ABRButton=new FXRadioButton(main,_("Average Bit Rate"),this,ID_WHICH_BUTTON);
84 		ABRFrame=new FXMatrix(main,2,MATRIX_BY_COLUMNS|FRAME_RAISED|LAYOUT_FILL_X);
85 			new FXLabel(ABRFrame,_("Minimum Bit Rate: "));
86 			minRateComboBox=new FXComboBox(ABRFrame,10,NULL,0,COMBOBOX_NORMAL|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_STATIC);
87 			fillBitRateComboBox(minRateComboBox);
88 			new FXLabel(ABRFrame,_("Average Bit Rate: "));
89 			normRateComboBox=new FXComboBox(ABRFrame,10,NULL,0,COMBOBOX_NORMAL|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_STATIC);
90 			fillBitRateComboBox(normRateComboBox,true);
91 			new FXLabel(ABRFrame,_("Maximum Bit Rate: "));
92 			maxRateComboBox=new FXComboBox(ABRFrame,10,NULL,0,COMBOBOX_NORMAL|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_STATIC);
93 			fillBitRateComboBox(maxRateComboBox);
94 
95 
96 	new FXFrame(main,LAYOUT_FIX_HEIGHT,0,0,1,10);
97 	qualityButton=new FXRadioButton(main,_("Variable Bit Rate Quality Setting"),this,ID_WHICH_BUTTON);
98 		qualityFrame=new FXMatrix(main,3,MATRIX_BY_COLUMNS|FRAME_RAISED|LAYOUT_FILL_X);
99 			new FXLabel(qualityFrame,_("Quality: "));
100 			qualityComboBox=new FXComboBox(qualityFrame,10,NULL,0,COMBOBOX_NORMAL|FRAME_SUNKEN|FRAME_THICK|COMBOBOX_STATIC);
101 			for(int t=0;t<10;t++)
102 				qualityComboBox->appendItem(istring(t).c_str());
103 			qualityComboBox->setNumVisible(qualityComboBox->getNumItems());
104 			qualityComboBox->setCurrentItem(4);
105 			new FXLabel(qualityFrame,_("0(Highest Quality -> 9(Lowest Quality)"));
106 
107 
108 	new FXFrame(main,LAYOUT_FIX_HEIGHT,0,0,1,10);
109 		flagsFrame=new FXMatrix(main,3,MATRIX_BY_COLUMNS|FRAME_RAISED|LAYOUT_FILL_X);
110 			useOnlyFlagsButton=new FXCheckButton(flagsFrame,_("Use Only These Flags"));
111 			new FXFrame(flagsFrame,FRAME_NONE); // place holder
112 			new FXFrame(flagsFrame,FRAME_NONE); // place holder
113 
114 			new FXLabel(flagsFrame,_("Additional Flags: "));
115 			additionalFlagsTextBox=new FXTextField(flagsFrame,25,NULL,0,TEXTFIELD_NORMAL);
116 			additionalFlagsTextBox->setText("");
117 			new FXLabel(flagsFrame,_("To lame"));
118 
119 
120 	onRadioButton(CBRButton,0,(void *)1); // to disable all but CBR
121 
122 
123 }
124 
~CMp3Dialog()125 CMp3Dialog::~CMp3Dialog()
126 {
127 }
128 
show(AFrontendHooks::Mp3CompressionParameters & parameters)129 bool CMp3Dialog::show(AFrontendHooks::Mp3CompressionParameters &parameters)
130 {
131 	if(execute(PLACEMENT_SCREEN))
132 	{
133 		if(CBRFrame->isEnabled())
134 		{
135 			parameters.method=AFrontendHooks::Mp3CompressionParameters::brCBR;
136 			parameters.constantBitRate=atoi(bitRateComboBox->getText().text());
137 		}
138 		else if(ABRFrame->isEnabled())
139 		{
140 			parameters.method=AFrontendHooks::Mp3CompressionParameters::brABR;
141 			parameters.minBitRate=atoi(minRateComboBox->getText().text());
142 			parameters.normBitRate=atoi(normRateComboBox->getText().text());
143 			parameters.maxBitRate=atoi(maxRateComboBox->getText().text());
144 		}
145 		else if(qualityFrame->isEnabled())
146 		{
147 			parameters.method=AFrontendHooks::Mp3CompressionParameters::brQuality;
148 			parameters.quality=atoi(qualityComboBox->getText().text());
149 		}
150 
151 		parameters.useFlagsOnly= useOnlyFlagsButton->getCheck()==TRUE;
152 
153 		parameters.additionalFlags= additionalFlagsTextBox->getText().text();
154 
155 		return(true);
156 	}
157 	return(false);
158 }
159 
setEnable(type * t,bool enabled)160 template <class type> void setEnable(type *t,bool enabled)
161 {
162 	if(enabled)
163 		t->enable();
164 	else
165 		t->disable();
166 
167 	for(FXint i=0;i<t->numChildren();i++)
168 		setEnable(t->childAtIndex(i),enabled);
169 }
170 
onRadioButton(FXObject * sender,FXSelector sel,void * ptr)171 long CMp3Dialog::onRadioButton(FXObject *sender,FXSelector sel,void *ptr)
172 {
173 	if(!ptr) // only act when ptr==1 when it's getting checked
174 		return 1;
175 
176 	// turn off all buttons
177 	CBRButton->setCheck(FALSE);
178 	setEnable((FXWindow *)CBRFrame,false);
179 
180 	ABRButton->setCheck(FALSE);
181 	setEnable((FXWindow *)ABRFrame,false);
182 
183 	qualityButton->setCheck(FALSE);
184 	setEnable((FXWindow *)qualityFrame,false);
185 
186 	if(sender==CBRButton)
187 	{
188 		CBRButton->setCheck(TRUE);
189 		setEnable((FXWindow *)CBRFrame,true);
190 	}
191 	else if(sender==ABRButton)
192 	{
193 		ABRButton->setCheck(TRUE);
194 		setEnable((FXWindow *)ABRFrame,true);
195 	}
196 	else if(sender==qualityButton)
197 	{
198 		qualityButton->setCheck(TRUE);
199 		setEnable((FXWindow *)qualityFrame,true);
200 	}
201 
202 	return 1;
203 }
204