/[svn]/jsampler/trunk/src/org/jsampler/view/fantasia/ChannelsBar.java
ViewVC logotype

Contents of /jsampler/trunk/src/org/jsampler/view/fantasia/ChannelsBar.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1357 - (show annotations) (download)
Sat Sep 22 17:27:06 2007 UTC (16 years, 6 months ago) by iliev
File size: 4630 byte(s)
* Added options for setting the maximum master and channel volume
  (choose Edit/Preferences)
* Fantasia: Edit instrument button is now shown on the channel
  screen only when there is loaded instrument on that channel
* Fantasia: Added options for showing additional device parameters in
  audio/MIDI device panes (Edit/Preferences, then click the `View' tab)
* Fantasia: Master volume is now fully implemented

1 /*
2 * JSampler - a java front-end for LinuxSampler
3 *
4 * Copyright (C) 2005-2007 Grigor Iliev <grigor@grigoriliev.com>
5 *
6 * This file is part of JSampler.
7 *
8 * JSampler is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2
10 * as published by the Free Software Foundation.
11 *
12 * JSampler 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 JSampler; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
20 * MA 02111-1307 USA
21 */
22
23 package org.jsampler.view.fantasia;
24
25 import java.awt.Dimension;
26 import java.awt.Insets;
27 import java.awt.Point;
28
29 import java.awt.event.MouseAdapter;
30 import java.awt.event.MouseEvent;
31
32 import java.beans.PropertyChangeEvent;
33 import java.beans.PropertyChangeListener;
34
35 import javax.swing.Box;
36 import javax.swing.BoxLayout;
37 import javax.swing.JLabel;
38 import javax.swing.JSlider;
39 import javax.swing.JToolTip;
40 import javax.swing.Popup;
41 import javax.swing.PopupFactory;
42
43 import javax.swing.event.ChangeEvent;
44 import javax.swing.event.ChangeListener;
45
46 import org.jsampler.CC;
47
48 import org.jsampler.event.SamplerAdapter;
49 import org.jsampler.event.SamplerEvent;
50
51 import static org.jsampler.view.fantasia.FantasiaI18n.i18n;
52 import static org.jsampler.view.fantasia.FantasiaPrefs.preferences;
53 import static org.jsampler.view.std.StdPrefs.*;
54
55 /**
56 *
57 * @author Grigor Iliev
58 */
59 public class ChannelsBar extends PixmapPane {
60 private final JSlider slVolume = new JSlider();
61 private Popup popup = null;
62 private final JToolTip tip = new JToolTip();
63
64 /** Creates a new instance of <code>ChannelsBar</code> */
65 public
66 ChannelsBar() {
67 super(Res.gfxCreateChannel);
68 setPixmapInsets(new Insets(1, 1, 1, 1));
69
70 setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
71
72 add(Box.createRigidArea(new Dimension(5, 0)));
73 JLabel l = new JLabel(Res.iconVolume22);
74 add(l);
75
76 slVolume.setOpaque(false);
77 slVolume.setFocusable(false);
78 Dimension d = new Dimension(150, 22);
79 slVolume.setPreferredSize(d);
80 slVolume.setMaximumSize(d);
81
82 add(slVolume);
83
84 add(Box.createGlue());
85
86 d = new Dimension(420, 29);
87 setMinimumSize(d);
88 setPreferredSize(d);
89 setMaximumSize(d);
90
91 // Setting the tooltip size
92 tip.setTipText(i18n.getLabel("ChannelsBar.volume", 1000));
93 tip.setMinimumSize(tip.getPreferredSize());
94 tip.setPreferredSize(tip.getPreferredSize()); // workaround for preserving that size
95 tip.setComponent(slVolume);
96 ///////
97
98 int i = preferences().getIntProperty(MAXIMUM_MASTER_VOLUME);
99 slVolume.setMaximum(i);
100 String s = MAXIMUM_MASTER_VOLUME;
101 preferences().addPropertyChangeListener(s, new PropertyChangeListener() {
102 public void
103 propertyChange(PropertyChangeEvent e) {
104 int j = preferences().getIntProperty(MAXIMUM_MASTER_VOLUME);
105 slVolume.setMaximum(j);
106 }
107 });
108
109 slVolume.addChangeListener(new ChangeListener() {
110 public void
111 stateChanged(ChangeEvent e) { setVolume(); }
112 });
113
114 CC.getSamplerModel().addSamplerListener(new SamplerAdapter() {
115 public void
116 volumeChanged(SamplerEvent e) { updateVolume(); }
117 });
118
119 updateVolume();
120
121 slVolume.addMouseListener(new MouseAdapter() {
122 public void
123 mousePressed(MouseEvent e) {
124 if(popup != null) {
125 popup.hide();
126 popup = null;
127 }
128
129 Point p = slVolume.getLocationOnScreen();
130 PopupFactory pf = PopupFactory.getSharedInstance();
131 popup = pf.getPopup(slVolume, tip, p.x, p.y - 22);
132 popup.show();
133 }
134
135 public void
136 mouseReleased(MouseEvent e) {
137 if(popup != null) {
138 popup.hide();
139 popup = null;
140 }
141 }
142 });
143 }
144
145 private void
146 setVolume() {
147 int volume = slVolume.getValue();
148 String s = i18n.getLabel("ChannelsBar.volume", volume);
149 slVolume.setToolTipText(s);
150 tip.setTipText(s);
151 tip.repaint();
152
153 if(slVolume.getValueIsAdjusting()) return;
154
155 int vol = (int)(CC.getSamplerModel().getVolume() * 100);
156
157 if(vol == slVolume.getValue()) return;
158
159 /*
160 * If the model's volume is not equal to the slider
161 * value we assume that the change is due to user input.
162 * So we must update the volume at the backend too.
163 */
164 float v = slVolume.getValue();
165 v /= 100;
166 CC.getSamplerModel().setBackendVolume(v);
167 }
168
169 private void
170 updateVolume() {
171 slVolume.setValue((int)(CC.getSamplerModel().getVolume() * 100));
172 }
173
174 }

  ViewVC Help
Powered by ViewVC