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

Annotation of /jsampler/trunk/src/org/jsampler/view/fantasia/MainFrame.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1204 - (hide annotations) (download)
Thu May 24 21:43:45 2007 UTC (16 years, 11 months ago) by iliev
File size: 7753 byte(s)
upgrading to version 0.5a

1 iliev 912 /*
2     * JSampler - a java front-end for LinuxSampler
3     *
4 iliev 1143 * Copyright (C) 2005-2006 Grigor Iliev <grigor@grigoriliev.com>
5 iliev 912 *
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.BorderLayout;
26 iliev 1204 import java.awt.Dialog;
27 iliev 912 import java.awt.Dimension;
28 iliev 1204 import java.awt.Frame;
29 iliev 912 import java.awt.Point;
30    
31     import java.awt.event.ActionEvent;
32     import java.awt.event.ActionListener;
33     import java.awt.event.MouseAdapter;
34     import java.awt.event.MouseEvent;
35    
36     import java.util.logging.Level;
37    
38     import javax.swing.Box;
39     import javax.swing.BoxLayout;
40     import javax.swing.JCheckBoxMenuItem;
41     import javax.swing.JMenu;
42     import javax.swing.JMenuItem;
43     import javax.swing.JPanel;
44     import javax.swing.JPopupMenu;
45     import javax.swing.JToggleButton;
46     import javax.swing.UIManager;
47     import javax.swing.plaf.synth.SynthLookAndFeel;
48    
49     import net.sf.juife.TitleBar;
50    
51     import org.jsampler.CC;
52     import org.jsampler.HF;
53    
54     import org.jsampler.view.JSChannel;
55     import org.jsampler.view.JSChannelsPane;
56     import org.jsampler.view.JSMainFrame;
57    
58     import static org.jsampler.view.fantasia.FantasiaI18n.i18n;
59    
60    
61     /**
62     *
63     * @author Grigor Iliev
64     */
65     public class MainFrame extends JSMainFrame {
66     private final static int TITLE_BAR_WIDTH = 420;
67     private final static int TITLE_BAR_HEIGHT = 29;
68    
69     private final ChannelsPane channelsPane = new ChannelsPane("");
70    
71     /** Creates a new instance of <code>MainFrame</code> */
72     public
73     MainFrame() {
74     try {
75     SynthLookAndFeel synth = new SynthLookAndFeel();
76     synth.load(MainFrame.class.getResourceAsStream("gui.xml"), MainFrame.class);
77     UIManager.setLookAndFeel(synth);
78     } catch(Exception e) {
79     CC.getLogger().log(Level.INFO, HF.getErrorMessage(e), e);
80     }
81    
82     setTitle(i18n.getLabel("MainFrame.title"));
83     addChannelsPane(channelsPane);
84     add(channelsPane);
85     setUndecorated(true);
86    
87     JToggleButton btn = new PixmapToggleButton(Res.iconPowerOff, Res.iconPowerOn) {
88     public boolean
89     contains(int x, int y) {
90     return (x - 11)*(x - 11) + (y - 11)*(y - 11) < 71;
91     }
92     };
93    
94     btn.setSelected(true);
95     btn.setAlignmentX(JPanel.LEFT_ALIGNMENT);
96     btn.addActionListener(new ActionListener() {
97     public void
98     actionPerformed(ActionEvent e) { onWindowClose(); }
99     });
100    
101    
102     FantasiaTitleBar tb = new FantasiaTitleBar();
103     tb.setName("FantasiaTitleBar");
104     tb.setLayout(new BoxLayout(tb, BoxLayout.X_AXIS));
105     tb.setOpaque(true);
106     tb.add(Box.createRigidArea(new Dimension(4, 0)));
107     tb.add(btn);
108     tb.add(Box.createRigidArea(new Dimension(3, 0)));
109    
110    
111    
112     tb.add(createVSeparator());
113    
114     tb.add(Box.createRigidArea(new Dimension(275, 0)));
115    
116     tb.add(createVSeparator());
117    
118     tb.add(Box.createRigidArea(new Dimension(29, 0)));
119    
120     tb.add(createVSeparator());
121    
122     tb.add(Box.createRigidArea(new Dimension(40, 0)));
123    
124     tb.add(createVSeparator());
125    
126     tb.setPreferredSize(new Dimension(TITLE_BAR_WIDTH, TITLE_BAR_HEIGHT));
127     tb.setMinimumSize(tb.getPreferredSize());
128     tb.setMaximumSize(tb.getPreferredSize());
129     add(tb, BorderLayout.SOUTH);
130    
131     getContentPane().setBackground(new java.awt.Color(0x818181));
132     getRootPane().setOpaque(false);
133     getLayeredPane().setOpaque(false);
134     //getContentPane().setVisible(false);
135    
136     setAlwaysOnTop(FantasiaPrefs.isAlwaysOnTop());
137     pack();
138    
139     String s = FantasiaPrefs.getWindowLocation();
140    
141     try {
142     if(s == null) {
143     setDefaultLocation();
144     } else {
145     int i = s.indexOf(',');
146     int x = Integer.parseInt(s.substring(0, i));
147    
148     s = s.substring(i + 1);
149     int y = Integer.parseInt(s);
150    
151     setLocation(x, y);
152     }
153     } catch(Exception x) {
154     String msg = "Parsing of window size and location string failed";
155     CC.getLogger().log(Level.INFO, msg, x);
156     setDefaultLocation();
157     }
158     }
159    
160     private void
161     setDefaultLocation() {
162     Dimension d = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
163     setLocation((d.width - TITLE_BAR_WIDTH) / 2, (d.height - TITLE_BAR_HEIGHT) / 2);
164     }
165    
166    
167     /** Invoked when this window is about to close. */
168     protected void
169     onWindowClose() {
170     FantasiaPrefs.setAlwaysOnTop(isAlwaysOnTop());
171    
172     java.awt.Point p = getLocation();
173     Dimension d = getSize();
174     StringBuffer sb = new StringBuffer();
175     sb.append(p.x).append(',').append(p.y + getSize().height - TITLE_BAR_HEIGHT);
176     FantasiaPrefs.setWindowLocation(sb.toString());
177    
178     super.onWindowClose();
179     }
180    
181     private JPanel
182     createVSeparator() {
183     JPanel p = new JPanel();
184     p.setName("VSeparator");
185     p.setOpaque(false);
186     p.setPreferredSize(new Dimension(2, 29));
187     p.setMinimumSize(p.getPreferredSize());
188     p.setMaximumSize(p.getPreferredSize());
189     return p;
190     }
191    
192     /**
193     * This method does nothing, because <b>Fantasia</b> has exactly
194     * one pane containing sampler channels, which can not be changed.
195     */
196     public void
197     insertChannelsPane(JSChannelsPane pane, int idx) {
198     getChannelsPaneList().removeAllElements();
199     addChannelsPane(pane);
200     }
201    
202     /**
203     * This method always returns the <code>JSChannelsPane</code> at index 0,
204     * because the <b>Fantasia</b> view has exactly one pane containing sampler channels.
205     * @return The <code>JSChannelsPane</code> at index 0.
206     */
207     public JSChannelsPane
208     getSelectedChannelsPane() { return getChannelsPane(0); }
209    
210     /**
211     * This method does nothing because the <b>Fantasia</b> view has
212     * exactly one pane containing sampler channels which is always shown.
213     */
214     public void
215     setSelectedChannelsPane(JSChannelsPane pane) { }
216    
217     public static void
218     repack(JSMainFrame frame) {
219     int y = frame.getLocation().y;
220     int height = frame.getSize().height;
221     y += (height - frame.getPreferredSize().height);
222    
223     if((height - frame.getPreferredSize().height) > 0) {
224     frame.pack();
225     frame.setLocation(frame.getLocation().x, y);
226     } else {
227     frame.setLocation(frame.getLocation().x, y);
228     frame.pack();
229     }
230     }
231    
232 iliev 1143 public void
233     installJSamplerHome() { }
234 iliev 1204
235     public void
236     showDetailedErrorMessage(Frame owner, String err, String details) {
237     // TODO:
238     }
239    
240     public void
241     showDetailedErrorMessage(Dialog owner, String err, String details) {
242     // TODO:
243     }
244 iliev 912 }
245    
246     class FantasiaTitleBar extends TitleBar {
247     FantasiaTitleBar() { this.addMouseListener(new ContextMenu()); }
248    
249     class ContextMenu extends MouseAdapter {
250     private final JPopupMenu cmenu = new JPopupMenu();
251    
252     ContextMenu() {
253     JMenuItem mi;
254    
255     final JCheckBoxMenuItem cmi = new JCheckBoxMenuItem (
256     i18n.getMenuLabel("FantasiaTitleBar.AlwaysOnTop")
257     );
258     cmi.setIcon(null);
259     cmi.setSelected(FantasiaPrefs.isAlwaysOnTop());
260    
261     cmenu.add(cmi);
262    
263     cmi.addActionListener(new ActionListener() {
264     public void
265     actionPerformed(ActionEvent e) {
266     CC.getMainFrame().setAlwaysOnTop(cmi.isSelected());
267     }
268     });
269    
270     /*mi = new JMenuItem(A4n.moveChannelsUp);
271     mi.setIcon(null);
272     cmenu.add(mi);
273    
274     cmenu.addSeparator();
275    
276     mi = new JMenuItem(A4n.removeChannels);
277     mi.setIcon(null);
278     cmenu.add(mi);*/
279     }
280    
281     public void
282     mousePressed(MouseEvent e) {
283     if(e.isPopupTrigger()) show(e);
284     }
285    
286     public void
287     mouseReleased(MouseEvent e) {
288     if(e.isPopupTrigger()) show(e);
289     }
290    
291     void
292     show(MouseEvent e) {
293     cmenu.show(e.getComponent(), e.getX(), e.getY());
294     }
295     }
296     }

  ViewVC Help
Powered by ViewVC