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);
62 private void set_selected(AltosFrequency frequency) {
63 for (int i = 0; i < frequencies.length; i++) {
64 if (frequencies[i].frequency == frequency.frequency) {
66 String new_text = String.format("Frequency: %7.3f MHz (%s) ▾",
68 frequency.description);
74 private AltosFrequency get_selected() {
75 if (0 <= selected && selected < frequencies.length)
76 return frequencies[selected];
80 private void add(AltosFrequency add) {
83 for (insert = 0; insert < frequencies.length; insert++) {
84 if (frequencies[insert].frequency == add.frequency)
86 if (add.frequency < frequencies[insert].frequency)
90 AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length + 1];
92 for (int before = 0; before < insert; before++)
93 new_frequencies[before] = frequencies[before];
94 new_frequencies[insert] = add;
96 for (int after = insert; after < frequencies.length; after++)
97 new_frequencies[after+1] = frequencies[after];
99 frequencies = new_frequencies;
101 FreqEntry e = new FreqEntry(add);
103 e.addActionListener(this);
106 private void remove(AltosFrequency remove) {
108 for (delete = 0; delete < frequencies.length; delete++) {
109 if (frequencies[delete].frequency == remove.frequency)
111 if (remove.frequency < frequencies[delete].frequency)
117 AltosFrequency[] new_frequencies = new AltosFrequency[frequencies.length - 1];
119 for (int before = 0; before < delete; before++)
120 new_frequencies[before] = frequencies[before];
122 for (int after = delete + 1; after < frequencies.length; after++)
123 new_frequencies[after-1] = frequencies[after];
124 frequencies = new_frequencies;
127 public void set_frequency(double new_frequency) {
130 if (new_frequency < 0) {
135 for (i = 0; i < frequencies.length; i++) {
136 AltosFrequency f = frequencies[i];
138 if (f.close(new_frequency)) {
144 String description = String.format("%s serial %d", product, serial);
145 AltosFrequency frequency = new AltosFrequency(new_frequency, description);
146 AltosUIPreferences.add_common_frequency(frequency);
149 set_selected(frequency);
152 public void set_product(String new_product) {
153 product = new_product;
156 public void set_serial(int new_serial) {
160 public double frequency() {
161 AltosFrequency f = get_selected();
167 public AltosFreqList () {
169 for (AltosFrequency frequency: AltosUIPreferences.common_frequencies())
175 public AltosFreqList(double in_frequency) {
177 set_frequency(in_frequency);