/[svn]/jsampler/trunk/src/org/jsampler/view/std/StdUtils.java
ViewVC logotype

Contents of /jsampler/trunk/src/org/jsampler/view/std/StdUtils.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1567 - (show annotations) (download)
Thu Dec 6 19:37:41 2007 UTC (16 years, 4 months ago) by iliev
File size: 6184 byte(s)
* added confirmation dialog on exit
* some minor gui enhancements
* preparations for release 0.8a

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 package org.jsampler.view.std;
23
24 import java.awt.Desktop;
25
26 import java.awt.event.ActionEvent;
27 import java.awt.event.ActionListener;
28 import java.awt.event.MouseAdapter;
29 import java.awt.event.MouseEvent;
30
31 import java.beans.PropertyChangeEvent;
32 import java.beans.PropertyChangeListener;
33
34 import java.net.URI;
35
36 import java.text.NumberFormat;
37
38 import java.util.Vector;
39
40 import javax.swing.JComboBox;
41 import javax.swing.JSlider;
42 import javax.swing.JToolTip;
43 import javax.swing.Popup;
44 import javax.swing.PopupFactory;
45
46 import javax.swing.event.ChangeEvent;
47 import javax.swing.event.ChangeListener;
48 import org.jsampler.CC;
49 import org.jsampler.HF;
50 import org.jsampler.JSPrefs;
51
52 import static org.jsampler.view.std.StdI18n.i18n;
53 import static org.jsampler.view.std.StdPrefs.*;
54
55
56 /**
57 *
58 * @author Grigor Iliev
59 */
60 public class StdUtils {
61
62 /** Forbids the instantiation of this class */
63 private
64 StdUtils() { }
65
66 private static JSPrefs
67 preferences() { return CC.getViewConfig().preferences(); }
68
69 public static JComboBox
70 createPathComboBox() {
71 final JComboBox cb = new JComboBox();
72 cb.setEditable(true);
73 cb.addActionListener(new ActionListener() {
74 public void
75 actionPerformed(ActionEvent e) {
76 if(cb.getSelectedItem() == null) {
77 cb.setToolTipText(null);
78 return;
79 }
80 String s = cb.getSelectedItem().toString();
81 if(s.length() < 15) cb.setToolTipText(null);
82 else cb.setToolTipText(s);
83 }
84 });
85
86 return cb;
87 }
88
89 /**
90 * Updates the specified string list property by adding the specified
91 * element on the top. Also restricts the maximum number of elements to 12.
92 */
93 public static void
94 updateRecentElements(String property, String newElement) {
95 String[] elements = preferences().getStringListProperty(property);
96 Vector<String> v = new Vector<String>();
97 v.add(newElement);
98 for(String s : elements) {
99 if(!newElement.equals(s)) v.add(s);
100 }
101 if(v.size() > 12) v.setSize(12);
102
103 elements = v.toArray(new String[v.size()]);
104 preferences().setStringListProperty(property, elements);
105 }
106
107 public static boolean
108 checkDesktopSupported() {
109 if(Desktop.isDesktopSupported()) return true;
110
111 String s = i18n.getError("StdUtils.DesktopApiNotSupported");
112 HF.showErrorMessage(s, CC.getMainFrame());
113
114 return false;
115 }
116
117 public static void
118 browse(String uri) {
119 if(!checkDesktopSupported()) return;
120
121 try { Desktop.getDesktop().browse(new URI(uri)); }
122 catch(Exception x) { x.printStackTrace(); }
123 }
124
125 public static void
126 mail(String uri) {
127 if(!StdUtils.checkDesktopSupported()) return;
128
129 Desktop desktop = Desktop.getDesktop();
130
131 try { Desktop.getDesktop().mail(new URI(uri)); }
132 catch(Exception x) { x.printStackTrace(); }
133 }
134
135 public static JSlider
136 createVolumeSlider() {
137 return new VolumeSlider();
138 }
139
140 private static class VolumeSlider extends JSlider {
141 private Popup popup = null;
142 private final JToolTip tip = new JToolTip();
143 private static NumberFormat numberFormat = NumberFormat.getInstance();
144
145 VolumeSlider() {
146 super(0, 100, 100);
147 numberFormat.setMaximumFractionDigits(1);
148 // Setting the tooltip size (workaround for preserving that size)
149 boolean b = CC.getViewConfig().isMeasurementUnitDecibel();
150 if(b) tip.setTipText(i18n.getLabel("StdUtils.volumeDecibels", "-30.0"));
151 else tip.setTipText(i18n.getLabel("StdUtils.volume", "100"));
152 tip.setPreferredSize(tip.getPreferredSize());
153 tip.setMinimumSize(tip.getPreferredSize());
154 ///////
155 tip.setComponent(this);
156 tip.setTipText(i18n.getLabel("StdUtils.volume", 0));
157
158 updateVolumeInfo();
159
160 addMouseListener(new MouseAdapter() {
161 public void
162 mousePressed(MouseEvent e) {
163 if(popup != null) {
164 popup.hide();
165 popup = null;
166 }
167
168 if(!VolumeSlider.this.isEnabled()) return;
169
170 java.awt.Point p = VolumeSlider.this.getLocationOnScreen();
171 PopupFactory pf = PopupFactory.getSharedInstance();
172 popup = pf.getPopup(VolumeSlider.this, tip, p.x, p.y - 22);
173 popup.show();
174 }
175
176 public void
177 mouseReleased(MouseEvent e) {
178 if(popup != null) {
179 popup.hide();
180 popup = null;
181 }
182 }
183 });
184
185 addChangeListener(new ChangeListener() {
186 public void
187 stateChanged(ChangeEvent e) { updateVolumeInfo(); }
188 });
189
190 String s = VOL_MEASUREMENT_UNIT_DECIBEL;
191 preferences().addPropertyChangeListener(s, new PropertyChangeListener() {
192 public void
193 propertyChange(PropertyChangeEvent e) {
194 // We use this to set the size of the lVolume
195 // to prevent the frequent resizing of lVolume component
196 boolean b = CC.getViewConfig().isMeasurementUnitDecibel();
197 tip.setPreferredSize(null);
198 String s;
199 if(b) s = i18n.getLabel("StdUtils.volumeDecibels", "-30.0");
200 else s = i18n.getLabel("StdUtils.volume", "100");
201 tip.setTipText(s);
202 tip.setPreferredSize(tip.getPreferredSize());
203 tip.setMinimumSize(tip.getPreferredSize());
204 ///////
205 updateVolumeInfo();
206 }
207 });
208 }
209
210 private void
211 updateVolumeInfo() {
212 String s;
213 if(CC.getViewConfig().isMeasurementUnitDecibel()) {
214 double d = HF.percentsToDecibels(getValue());
215 s = i18n.getLabel("StdUtils.volumeDecibels", numberFormat.format(d));
216 } else {
217 s = i18n.getLabel("StdUtils.volume", getValue());
218 }
219
220 setToolTipText(s);
221 tip.setTipText(s);
222 tip.repaint();
223 }
224 }
225 }

  ViewVC Help
Powered by ViewVC