/[svn]/qsampler/trunk/src/qsamplerChannelStrip.ui.h
ViewVC logotype

Contents of /qsampler/trunk/src/qsamplerChannelStrip.ui.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 299 - (show annotations) (download) (as text)
Wed Nov 17 15:41:58 2004 UTC (19 years, 5 months ago) by capela
File MIME type: text/x-c++hdr
File size: 9175 byte(s)
* Instrument index selection now made via combo box widget;
  actual instrument names are now properly retrieved from
  the instrument file, provided if libgig is available.

1 // qsamplerChannelStrip.ui.h
2 //
3 // ui.h extension file, included from the uic-generated form implementation.
4 /****************************************************************************
5 Copyright (C) 2004, rncbc aka Rui Nuno Capela. All rights reserved.
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20
21 *****************************************************************************/
22
23 #include <qvalidator.h>
24 #include <qmessagebox.h>
25 #include <qfileinfo.h>
26 #include <qtooltip.h>
27 #include <qpopupmenu.h>
28 #include <qobjectlist.h>
29
30 #include <math.h>
31
32 #include "qsamplerMainForm.h"
33 #include "qsamplerChannelForm.h"
34
35 #include "config.h"
36
37
38 // Kind of constructor.
39 void qsamplerChannelStrip::init (void)
40 {
41 // Initialize locals.
42 m_pMainForm = NULL;
43 m_pChannel = NULL;
44 m_iDirtyChange = 0;
45
46 // Try to restore normal window positioning.
47 adjustSize();
48 }
49
50
51 // Kind of destructor.
52 void qsamplerChannelStrip::destroy (void)
53 {
54 // Destroy existing channel descriptor.
55 if (m_pChannel)
56 delete m_pChannel;
57 m_pChannel = NULL;
58 }
59
60
61 // Channel strip setup formal initializer.
62 void qsamplerChannelStrip::setup ( qsamplerMainForm *pMainForm, int iChannelID )
63 {
64 // Set main form reference.
65 m_pMainForm = pMainForm;
66
67 // Destroy any previous channel descriptor.
68 if (m_pChannel)
69 delete m_pChannel;
70
71 // Create a new one...
72 m_pChannel = new qsamplerChannel(pMainForm);
73 // And set appropriate settings.
74 if (m_pChannel && iChannelID >= 0) {
75 m_pChannel->setChannelID(iChannelID);
76 m_iDirtyChange = 0;
77 }
78
79 // Stabilize this around.
80 updateChannelInfo();
81 }
82
83 // Channel secriptor accessor.
84 qsamplerChannel *qsamplerChannelStrip::channel (void)
85 {
86 return m_pChannel;
87 }
88
89
90 // Messages view font accessors.
91 QFont qsamplerChannelStrip::displayFont (void)
92 {
93 return EngineNameTextLabel->font();
94 }
95
96 void qsamplerChannelStrip::setDisplayFont ( const QFont & font )
97 {
98 EngineNameTextLabel->setFont(font);
99 MidiPortChannelTextLabel->setFont(font);
100 InstrumentNameTextLabel->setFont(font);
101 InstrumentStatusTextLabel->setFont(font);
102 }
103
104
105 // Channel display background effect.
106 void qsamplerChannelStrip::setDisplayEffect ( bool bDisplayEffect )
107 {
108 QPixmap pm;
109 if (bDisplayEffect)
110 pm = QPixmap::fromMimeSource("displaybg1.png");
111 setDisplayBackground(pm);
112 }
113
114
115 // Update main display background pixmap.
116 void qsamplerChannelStrip::setDisplayBackground ( const QPixmap& pm )
117 {
118 // Set the main origin...
119 ChannelInfoFrame->setPaletteBackgroundPixmap(pm);
120
121 // Iterate for every child text label...
122 QObjectList *pList = ChannelInfoFrame->queryList("QLabel");
123 if (pList) {
124 for (QLabel *pLabel = (QLabel *) pList->first(); pLabel; pLabel = (QLabel *) pList->next())
125 pLabel->setPaletteBackgroundPixmap(pm);
126 delete pList;
127 }
128
129 // And this standalone too.
130 StreamVoiceCountTextLabel->setPaletteBackgroundPixmap(pm);
131 }
132
133
134 // Channel setup dialog slot.
135 bool qsamplerChannelStrip::channelSetup (void)
136 {
137 bool bResult = false;
138
139 qsamplerChannelForm *pChannelForm = new qsamplerChannelForm(this);
140 if (pChannelForm) {
141 pChannelForm->setup(m_pChannel);
142 bResult = pChannelForm->exec();
143 delete pChannelForm;
144 }
145
146 if (bResult)
147 emit channelChanged(this);
148
149 return bResult;
150 }
151
152
153 // Update whole channel info state.
154 bool qsamplerChannelStrip::updateChannelInfo (void)
155 {
156 if (m_pChannel == NULL)
157 return false;
158
159 // Update strip caption.
160 QString sText = m_pChannel->channelName();
161 setCaption(sText);
162 ChannelSetupPushButton->setText(sText);
163
164 // Check if we're up and connected.
165 if (m_pChannel->client() == NULL)
166 return false;
167
168 // Read actual channel information.
169 m_pChannel->updateChannelInfo();
170
171 // Set some proper display values.
172 const QString sIndent = " ";
173
174 // Engine name...
175 if (m_pChannel->engineName().isEmpty())
176 EngineNameTextLabel->setText(sIndent + tr("(No engine)"));
177 else
178 EngineNameTextLabel->setText(sIndent + m_pChannel->engineName());
179
180 // Instrument name...
181 if (m_pChannel->instrumentFile().isEmpty())
182 InstrumentNameTextLabel->setText(sIndent + tr("(No instrument)"));
183 else
184 InstrumentNameTextLabel->setText(sIndent + qsamplerChannel::getInstrumentName(m_pChannel->instrumentFile(), m_pChannel->instrumentNr()));
185
186 // Instrument status...
187 int iInstrumentStatus = m_pChannel->instrumentStatus();
188 if (iInstrumentStatus < 0) {
189 InstrumentStatusTextLabel->setPaletteForegroundColor(Qt::red);
190 InstrumentStatusTextLabel->setText(tr("ERR%1").arg(iInstrumentStatus));
191 } else {
192 InstrumentStatusTextLabel->setPaletteForegroundColor(iInstrumentStatus < 100 ? Qt::yellow : Qt::green);
193 InstrumentStatusTextLabel->setText(QString::number(iInstrumentStatus) + "%");
194 }
195
196 // MIDI Port/Channel...
197 if (m_pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
198 MidiPortChannelTextLabel->setText(QString("%1 / *").arg(m_pChannel->midiPort()));
199 else
200 MidiPortChannelTextLabel->setText(QString("%1 / %2").arg(m_pChannel->midiPort()).arg(m_pChannel->midiChannel() + 1));
201
202 // And update the both GUI volume elements.
203 return updateChannelVolume();
204 }
205
206
207 // Do the dirty volume change.
208 bool qsamplerChannelStrip::updateChannelVolume (void)
209 {
210 if (m_pChannel == NULL)
211 return false;
212
213 // Convert...
214 #ifdef CONFIG_ROUND
215 int iVolume = (int) ::round(100.0 * m_pChannel->volume());
216 #else
217 double fIPart = 0.0;
218 double fFPart = ::modf(100.0 * m_pChannel->volume(), &fIPart);
219 int iVolume = (int) fIPart;
220 if (fFPart >= +0.5)
221 iVolume++;
222 else
223 if (fFPart <= -0.5)
224 iVolume--;
225 #endif
226
227 // And clip...
228 if (iVolume < 0)
229 iVolume = 0;
230
231 // Flag it here, to avoid infinite recursion.
232 m_iDirtyChange++;
233 VolumeSlider->setValue(iVolume);
234 VolumeSpinBox->setValue(iVolume);
235 m_iDirtyChange--;
236
237 return true;
238 }
239
240
241 // Update whole channel usage state.
242 bool qsamplerChannelStrip::updateChannelUsage (void)
243 {
244 if (m_pChannel == NULL)
245 return false;
246 if (m_pChannel->client() == NULL)
247 return false;
248
249 // Conditionally update whole channel status info.
250 if (m_pChannel->instrumentStatus() >= 0 && m_pChannel->instrumentStatus() < 100) {
251 updateChannelInfo();
252 // Once we get a complete instrument load, try a implied reset channel....
253 if (m_pChannel->instrumentStatus() == 100)
254 m_pChannel->resetChannel();
255 }
256 // Leave, if we still have an erroneus or incomplete instrument load.
257 if (m_pChannel->instrumentStatus() < 100)
258 return false;
259
260 // Get current channel voice count.
261 int iVoiceCount = ::lscp_get_channel_voice_count(m_pChannel->client(), m_pChannel->channelID());
262 // Get current stream count.
263 int iStreamCount = ::lscp_get_channel_stream_count(m_pChannel->client(), m_pChannel->channelID());
264 // Get current channel buffer fill usage.
265 // As benno has suggested this is the percentage usage
266 // of the least filled buffer stream...
267 int iStreamUsage = ::lscp_get_channel_stream_usage(m_pChannel->client(), m_pChannel->channelID());;
268
269 // Update the GUI elements...
270 StreamUsageProgressBar->setProgress(iStreamUsage);
271 StreamVoiceCountTextLabel->setText(QString("%1 / %2").arg(iStreamCount).arg(iVoiceCount));
272
273 // We're clean.
274 return true;
275 }
276
277
278 // Volume change slot.
279 void qsamplerChannelStrip::volumeChanged ( int iVolume )
280 {
281 if (m_pChannel == NULL)
282 return;
283
284 // Avoid recursion.
285 if (m_iDirtyChange > 0)
286 return;
287
288 // Convert and clip.
289 float fVolume = (float) iVolume / 100.0;
290 if (fVolume < 0.001)
291 fVolume = 0.0;
292
293 // Update the GUI elements.
294 if (m_pChannel->setVolume(fVolume)) {
295 updateChannelVolume();
296 emit channelChanged(this);
297 }
298 }
299
300
301 // Context menu event handler.
302 void qsamplerChannelStrip::contextMenuEvent( QContextMenuEvent *pEvent )
303 {
304 if (m_pMainForm == NULL)
305 return;
306
307 // We'll just show up the main form's edit menu.
308 m_pMainForm->contextMenuEvent(pEvent);
309 }
310
311
312 // Maximum volume slider accessors.
313 void qsamplerChannelStrip::setMaxVolume ( int iMaxVolume )
314 {
315 m_iDirtyChange++;
316 VolumeSlider->setRange(0, iMaxVolume);
317 VolumeSpinBox->setRange(0, iMaxVolume);
318 m_iDirtyChange--;
319 }
320
321
322 // end of qsamplerChannelStrip.ui.h

  ViewVC Help
Powered by ViewVC