/[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 280 - (show annotations) (download) (as text)
Mon Oct 11 12:27:39 2004 UTC (19 years, 5 months ago) by capela
File MIME type: text/x-c++hdr
File size: 9197 byte(s)
* Fixed MIDI channel settings.

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) {
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 void qsamplerChannelStrip::channelSetup (void)
136 {
137 showChannelSetup(false);
138 }
139
140
141 // Channel setup dialog.
142 void qsamplerChannelStrip::showChannelSetup ( bool bNew )
143 {
144 qsamplerChannelForm *pChannelForm = new qsamplerChannelForm(this);
145 if (pChannelForm) {
146 pChannelForm->setup(m_pChannel, bNew);
147 if (pChannelForm->exec()) {
148 updateChannelInfo();
149 emit channelChanged(this);
150 }
151 delete pChannelForm;
152 }
153 }
154
155
156 // Update whole channel info state.
157 void qsamplerChannelStrip::updateChannelInfo (void)
158 {
159 if (m_pChannel == NULL)
160 return;
161
162 // Update strip caption.
163 QString sText = tr("Channel %1").arg(m_pChannel->channelID());
164 setCaption(sText);
165 ChannelSetupPushButton->setText(sText);
166
167 // Check if we're up and connected.
168 if (m_pChannel->client() == NULL)
169 return;
170
171 // Read actual channel information.
172 m_pChannel->updateChannelInfo();
173
174 // Set some proper display values.
175 const QString sIndent = " ";
176
177 // Engine name...
178 if (m_pChannel->engineName().isEmpty())
179 EngineNameTextLabel->setText(sIndent + tr("(No engine)"));
180 else
181 EngineNameTextLabel->setText(sIndent + m_pChannel->engineName());
182
183 // Instrument name...
184 if (m_pChannel->instrumentFile().isEmpty())
185 InstrumentNameTextLabel->setText(sIndent + tr("(No instrument)"));
186 else
187 InstrumentNameTextLabel->setText(sIndent + QString("%1 [%2]")
188 .arg(QFileInfo(m_pChannel->instrumentFile()).fileName()).arg(m_pChannel->instrumentNr()));
189
190 // Instrument status...
191 int iInstrumentStatus = m_pChannel->instrumentStatus();
192 if (iInstrumentStatus < 0) {
193 InstrumentStatusTextLabel->setPaletteForegroundColor(Qt::red);
194 InstrumentStatusTextLabel->setText(tr("ERR%1").arg(iInstrumentStatus));
195 } else {
196 InstrumentStatusTextLabel->setPaletteForegroundColor(iInstrumentStatus < 100 ? Qt::yellow : Qt::green);
197 InstrumentStatusTextLabel->setText(QString::number(iInstrumentStatus) + "%");
198 }
199
200 // MIDI Port/Channel...
201 if (m_pChannel->midiChannel() == LSCP_MIDI_CHANNEL_ALL)
202 MidiPortChannelTextLabel->setText(QString("%1 / *").arg(m_pChannel->midiPort()));
203 else
204 MidiPortChannelTextLabel->setText(QString("%1 / %2").arg(m_pChannel->midiPort()).arg(m_pChannel->midiChannel() + 1));
205
206 // And update the both GUI volume elements.
207 updateChannelVolume();
208 }
209
210
211 // Do the dirty volume change.
212 void qsamplerChannelStrip::updateChannelVolume (void)
213 {
214 if (m_pChannel == NULL)
215 return;
216
217 // Convert...
218 #ifdef CONFIG_ROUND
219 int iVolume = (int) ::round(100.0 * m_pChannel->volume());
220 #else
221 double fIPart = 0.0;
222 double fFPart = ::modf(100.0 * m_pChannel->volume(), &fIPart);
223 int iVolume = (int) fIPart;
224 if (fFPart >= +0.5)
225 iVolume++;
226 else
227 if (fFPart <= -0.5)
228 iVolume--;
229 #endif
230
231 // And clip...
232 if (iVolume < 0)
233 iVolume = 0;
234
235 // Flag it here, to avoid infinite recursion.
236 m_iDirtyChange++;
237 VolumeSlider->setValue(iVolume);
238 VolumeSpinBox->setValue(iVolume);
239 m_iDirtyChange--;
240 }
241
242
243 // Update whole channel usage state.
244 void qsamplerChannelStrip::updateChannelUsage (void)
245 {
246 if (m_pChannel == NULL)
247 return;
248 if (m_pChannel->client() == NULL)
249 return;
250
251 // Conditionally update whole channel status info.
252 if (m_pChannel->instrumentStatus() >= 0 && m_pChannel->instrumentStatus() < 100) {
253 updateChannelInfo();
254 // Once we get a complete instrument load, try a implied reset channel....
255 if (m_pChannel->instrumentStatus() == 100)
256 m_pChannel->resetChannel();
257 }
258 // Leave, if we still have an erroneus or incomplete instrument load.
259 if (m_pChannel->instrumentStatus() < 100)
260 return;
261
262 // Get current channel voice count.
263 int iVoiceCount = ::lscp_get_channel_voice_count(m_pChannel->client(), m_pChannel->channelID());
264 // Get current stream count.
265 int iStreamCount = ::lscp_get_channel_stream_count(m_pChannel->client(), m_pChannel->channelID());
266 // Get current channel buffer fill usage.
267 // As benno has suggested this is the percentage usage
268 // of the least filled buffer stream...
269 int iStreamUsage = ::lscp_get_channel_stream_usage(m_pChannel->client(), m_pChannel->channelID());;
270
271 // Update the GUI elements...
272 StreamUsageProgressBar->setProgress(iStreamUsage);
273 StreamVoiceCountTextLabel->setText(QString("%1 / %2").arg(iStreamCount).arg(iVoiceCount));
274 }
275
276
277 // Volume change slot.
278 void qsamplerChannelStrip::volumeChanged ( int iVolume )
279 {
280 if (m_pChannel == NULL)
281 return;
282
283 // Avoid recursion.
284 if (m_iDirtyChange > 0)
285 return;
286
287 // Convert and clip.
288 float fVolume = (float) iVolume / 100.0;
289 if (fVolume < 0.001)
290 fVolume = 0.0;
291
292 // Update the GUI elements.
293 if (m_pChannel->setVolume(fVolume)) {
294 updateChannelVolume();
295 emit channelChanged(this);
296 }
297 }
298
299
300 // Context menu event handler.
301 void qsamplerChannelStrip::contextMenuEvent( QContextMenuEvent *pEvent )
302 {
303 if (m_pMainForm == NULL)
304 return;
305
306 // We'll just show up the main form's edit menu.
307 m_pMainForm->contextMenuEvent(pEvent);
308 }
309
310
311 // Maximum volume slider accessors.
312 void qsamplerChannelStrip::setMaxVolume ( int iMaxVolume )
313 {
314 m_iDirtyChange++;
315 VolumeSlider->setRange(0, iMaxVolume);
316 VolumeSpinBox->setRange(0, iMaxVolume);
317 m_iDirtyChange--;
318 }
319
320
321 // end of qsamplerChannelStrip.ui.h

  ViewVC Help
Powered by ViewVC