2 * Copyright © 2011 Keith Packard <keithp@keithp.com>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 2 of the License.
8 * This program is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * General Public License for more details.
13 * You should have received a copy of the GNU General Public License along
14 * with this program; if not, write to the Free Software Foundation, Inc.,
15 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
18 package org.altusmetrum.altosuilib_2;
22 import java.awt.event.*;
23 import org.altusmetrum.altoslib_4.*;
25 class FreqEntry extends JMenuItem {
26 AltosFrequency frequency;
28 public FreqEntry(AltosFrequency frequency) {
29 super(frequency.toShortString());
30 this.frequency = frequency;
34 public class AltosFreqList extends JMenu implements ActionListener {
40 AltosFrequency[] frequencies = new AltosFrequency[0];
44 LinkedList<ActionListener> action_listeners = new LinkedList<ActionListener>();
46 public void addActionListener(ActionListener listener) {
47 action_listeners.add(listener);
50 public void removeActionListener(ActionListener listener) {
51 action_listeners.remove(listener);
54 public void actionPerformed(ActionEvent ev) {
55 FreqEntry e = (FreqEntry) ev.getSource();
56 set_selected(e.frequency);
57 ActionEvent event = new ActionEvent(e.frequency, 0, "selected");
58 for (ActionListener l : action_listeners)
59 l.actionPerformed(event);
64 public void set_label(boolean label) {
69 private void set_label() {
71 if (0 <= selected && selected < frequencies.length) {
72 AltosFrequency frequency = frequencies[selected];
73 new_text = String.format("%s%7.3f MHz (%s) ▾",
74 label ? "Frequency: " : "",
76 frequency.description);
81 private void set_selected(AltosFrequency frequency) {
82 for (int i = 0; i < frequencies.length; i++) {
83 if (frequencies[i].frequency == frequency.frequency) {
90 private AltosFrequency get_selected() {
91 if (0 <= selected && selected < frequencies.length)
92 return frequencies[selected];
96 private void add(AltosFrequency add) {
99 for (insert = 0; insert < frequencies.length; insert++) {
100 if (frequencies[insert].frequency == add.frequency)
102 if (add.frequency < frequencies[insert].frequency)
106 AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length + 1];
108 for (int before = 0; before < insert; before++)
109 new_frequencies[before] = frequencies[before];
110 new_frequencies[insert] = add;
112 for (int after = insert; after < frequencies.length; after++)
113 new_frequencies[after+1] = frequencies[after];
115 frequencies = new_frequencies;
117 FreqEntry e = new FreqEntry(add);
119 e.addActionListener(this);
122 private void remove(AltosFrequency remove) {
124 for (delete = 0; delete < frequencies.length; delete++) {
125 if (frequencies[delete].frequency == remove.frequency)
127 if (remove.frequency < frequencies[delete].frequency)
133 AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length - 1];
135 for (int before = 0; before < delete; before++)
136 new_frequencies[before] = frequencies[before];
138 for (int after = delete + 1; after < frequencies.length; after++)
139 new_frequencies[after-1] = frequencies[after];
140 frequencies = new_frequencies;
143 public void set_frequency(double new_frequency) {
146 if (new_frequency < 0) {
151 for (i = 0; i < frequencies.length; i++) {
152 AltosFrequency f = frequencies[i];
154 if (f.close(new_frequency)) {
160 String description = String.format("%s serial %d", product, serial);
161 AltosFrequency frequency = new AltosFrequency(new_frequency, description);
162 AltosUIPreferences.add_common_frequency(frequency);
165 set_selected(frequency);
168 public void set_product(String new_product) {
169 product = new_product;
172 public void set_serial(int new_serial) {
176 public double frequency() {
177 AltosFrequency f = get_selected();
183 public AltosFreqList(double in_frequency, boolean label) {
187 for (AltosFrequency frequency: AltosUIPreferences.common_frequencies())
192 if (in_frequency != 0)
193 set_frequency(in_frequency);
195 public AltosFreqList(double in_frequency) {
196 this(in_frequency, true);
199 public AltosFreqList (boolean label) {
203 public AltosFreqList () {