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 ¶meters)
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