Subversion Repository Public Repository

litesoft

Diff Revisions 949 vs 950 for /trunk/Java/KeyHole/src/org/litesoft/aokeyhole/swing/ObjectListAndSavePanel.java

Diff revisions: vs.
  @@ -1,154 +1,154 @@
1 - // This Source Code is in the Public Domain per: http://unlicense.org
2 - package org.litesoft.aokeyhole.swing;
3 -
4 - import org.litesoft.aokeyhole.objects.*;
5 - import org.litesoft.aokeyhole.objects.support.*;
6 - import org.litesoft.aokeyhole.toolkit.*;
7 -
8 - import javax.swing.*;
9 - import javax.swing.event.*;
10 - import java.awt.*;
11 - import java.awt.event.*;
12 -
13 - public class ObjectListAndSavePanel extends JPanel implements ObjectListUpdater,
14 - ActionListener,
15 - ListSelectionListener,
16 - ChangeCallback {
17 - private static final int PREFERRED_CHAR_WIDTH = 32;
18 - private static final String CHAR_SAMPLE = "The quick brown fox jumped over the lazy moon.";
19 - private static final JLabel CHAR_SIZER = new JLabel( CHAR_SAMPLE );
20 -
21 - private static final String ATION_REFRESH = "Refresh";
22 - private static final String ATION_NEW = "New Object";
23 - private static final String ATION_SAVE = "Save All";
24 -
25 - private ObjectListClickListener mObjectListClickListener;
26 - private int mPreferredPixelWidth;
27 - private JList mList;
28 - private JButton mSaveButton;
29 -
30 - private ObjectMetaData mLastSelectedObject = null;
31 -
32 - public ObjectListAndSavePanel( ObjectListClickListener pObjectListClickListener ) {
33 - mObjectListClickListener = pObjectListClickListener;
34 -
35 - mPreferredPixelWidth = CHAR_SIZER.getPreferredSize().width * PREFERRED_CHAR_WIDTH / CHAR_SAMPLE.length();
36 -
37 - setLayout( new BorderLayout() );
38 -
39 - mList = new JList( new ObjectListModel() );
40 - mList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
41 - mList.addListSelectionListener( this );
42 -
43 - JScrollPane scrollpane = new JScrollPane( mList );
44 - scrollpane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
45 - scrollpane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
46 -
47 - add( createButton( mObjectListClickListener.createNewAllowed() ? ATION_NEW : ATION_REFRESH ), BorderLayout.NORTH );
48 - add( scrollpane );
49 - if ( mObjectListClickListener.requestSaveAllowed() ) {
50 - add( mSaveButton = createButton( ATION_SAVE ), BorderLayout.SOUTH );
51 - mSaveButton.setEnabled( false );
52 - }
53 - }
54 -
55 - private JButton createButton( String pAction ) {
56 - JButton button = new JButton( pAction );
57 - button.addActionListener( this );
58 - return button;
59 - }
60 -
61 - private ObjectMetaData getSelection() {
62 - return (ObjectMetaData) mList.getSelectedValue();
63 - }
64 -
65 - @Override
66 - public void changeStateUpdated( Changeable pChangeable ) {
67 - mSaveButton.setEnabled( pChangeable.isChanged() );
68 - mList.repaint();
69 - }
70 -
71 - @Override
72 - public void updateObjectList( ObjectMetaData[] pObjectMetaDatas ) {
73 - mList.clearSelection();
74 - ((ObjectListModel) mList.getModel()).setMembers( pObjectMetaDatas );
75 - mList.repaint();
76 - if ( mLastSelectedObject != null ) {
77 - for ( ObjectMetaData zObjectMetaData : pObjectMetaDatas ) {
78 - if ( mLastSelectedObject.equals( zObjectMetaData ) ) {
79 - mList.setSelectedValue( zObjectMetaData, true );
80 - return;
81 - }
82 - }
83 - mLastSelectedObject = null;
84 - }
85 - }
86 -
87 - @Override
88 - public void setSelectedObject( ObjectMetaData pObjectMetaData ) {
89 - if ( pObjectMetaData == null ) {
90 - clearSelectedObject();
91 - } else {
92 - mLastSelectedObject = pObjectMetaData;
93 - mList.setSelectedValue( pObjectMetaData, true );
94 - }
95 - }
96 -
97 - @Override
98 - public void clearSelectedObject() {
99 - mLastSelectedObject = null;
100 - mList.clearSelection();
101 - }
102 -
103 - @Override
104 - public void actionPerformed( ActionEvent e ) {
105 - if ( ATION_REFRESH.equals( e.getActionCommand() ) ) {
106 - mObjectListClickListener.refreshRequested();
107 - } else if ( ATION_NEW.equals( e.getActionCommand() ) ) {
108 - mObjectListClickListener.createNewRequested();
109 - } else if ( ATION_SAVE.equals( e.getActionCommand() ) ) {
110 - mObjectListClickListener.requestSave();
111 - }
112 - }
113 -
114 - @Override
115 - public void valueChanged( ListSelectionEvent e ) {
116 - ObjectMetaData selection = getSelection();
117 - if ( (selection != null) && !selection.equals( mLastSelectedObject ) ) {
118 - mLastSelectedObject = selection;
119 - mObjectListClickListener.selected( selection );
120 - }
121 - }
122 -
123 - @Override
124 - public Dimension getPreferredSize() {
125 - return new Dimension( mPreferredPixelWidth, super.getPreferredSize().height );
126 - }
127 -
128 - private static class ObjectListModel extends AbstractListModel {
129 - private ObjectMetaData[] mMembers = ObjectMetaData.EMPTY_ARRAY;
130 -
131 - public void setMembers( ObjectMetaData[] pMembers ) {
132 - int oldLength = mMembers.length;
133 - mMembers = ObjectMetaData.EMPTY_ARRAY;
134 - if ( oldLength != 0 ) {
135 - fireIntervalRemoved( this, 0, oldLength - 1 );
136 - }
137 - int newLength = (pMembers == null) ? 0 : pMembers.length;
138 - if ( newLength != 0 ) {
139 - mMembers = pMembers;
140 - fireIntervalAdded( this, 0, newLength - 1 );
141 - }
142 - }
143 -
144 - @Override
145 - public int getSize() {
146 - return mMembers.length;
147 - }
148 -
149 - @Override
150 - public Object getElementAt( int index ) {
151 - return mMembers[index];
152 - }
153 - }
154 - }
1 + // This Source Code is in the Public Domain per: http://unlicense.org
2 + package org.litesoft.aokeyhole.swing;
3 +
4 + import org.litesoft.aokeyhole.objects.*;
5 + import org.litesoft.aokeyhole.objects.support.*;
6 + import org.litesoft.aokeyhole.toolkit.*;
7 +
8 + import javax.swing.*;
9 + import javax.swing.event.*;
10 + import java.awt.*;
11 + import java.awt.event.*;
12 +
13 + public class ObjectListAndSavePanel extends JPanel implements ObjectListUpdater,
14 + ActionListener,
15 + ListSelectionListener,
16 + ChangeCallback {
17 + private static final int PREFERRED_CHAR_WIDTH = 32;
18 + private static final String CHAR_SAMPLE = "The quick brown fox jumped over the lazy moon.";
19 + private static final JLabel CHAR_SIZER = new JLabel( CHAR_SAMPLE );
20 +
21 + private static final String ATION_REFRESH = "Refresh";
22 + private static final String ATION_NEW = "New Object";
23 + private static final String ATION_SAVE = "Save All";
24 +
25 + private ObjectListClickListener mObjectListClickListener;
26 + private int mPreferredPixelWidth;
27 + private JList mList;
28 + private JButton mSaveButton;
29 +
30 + private ObjectMetaData mLastSelectedObject = null;
31 +
32 + public ObjectListAndSavePanel( ObjectListClickListener pObjectListClickListener ) {
33 + mObjectListClickListener = pObjectListClickListener;
34 +
35 + mPreferredPixelWidth = CHAR_SIZER.getPreferredSize().width * PREFERRED_CHAR_WIDTH / CHAR_SAMPLE.length();
36 +
37 + setLayout( new BorderLayout() );
38 +
39 + mList = new JList( new ObjectListModel() );
40 + mList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION );
41 + mList.addListSelectionListener( this );
42 +
43 + JScrollPane scrollpane = new JScrollPane( mList );
44 + scrollpane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED );
45 + scrollpane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
46 +
47 + add( createButton( mObjectListClickListener.createNewAllowed() ? ATION_NEW : ATION_REFRESH ), BorderLayout.NORTH );
48 + add( scrollpane );
49 + if ( mObjectListClickListener.requestSaveAllowed() ) {
50 + add( mSaveButton = createButton( ATION_SAVE ), BorderLayout.SOUTH );
51 + mSaveButton.setEnabled( false );
52 + }
53 + }
54 +
55 + private JButton createButton( String pAction ) {
56 + JButton button = new JButton( pAction );
57 + button.addActionListener( this );
58 + return button;
59 + }
60 +
61 + private ObjectMetaData getSelection() {
62 + return (ObjectMetaData) mList.getSelectedValue();
63 + }
64 +
65 + @Override
66 + public void changeStateUpdated( Changeable pChangeable ) {
67 + mSaveButton.setEnabled( pChangeable.isChanged() );
68 + mList.repaint();
69 + }
70 +
71 + @Override
72 + public void updateObjectList( ObjectMetaData[] pObjectMetaDatas ) {
73 + mList.clearSelection();
74 + ((ObjectListModel) mList.getModel()).setMembers( pObjectMetaDatas );
75 + mList.repaint();
76 + if ( mLastSelectedObject != null ) {
77 + for ( ObjectMetaData zObjectMetaData : pObjectMetaDatas ) {
78 + if ( mLastSelectedObject.equals( zObjectMetaData ) ) {
79 + mList.setSelectedValue( zObjectMetaData, true );
80 + return;
81 + }
82 + }
83 + mLastSelectedObject = null;
84 + }
85 + }
86 +
87 + @Override
88 + public void setSelectedObject( ObjectMetaData pObjectMetaData ) {
89 + if ( pObjectMetaData == null ) {
90 + clearSelectedObject();
91 + } else {
92 + mLastSelectedObject = pObjectMetaData;
93 + mList.setSelectedValue( pObjectMetaData, true );
94 + }
95 + }
96 +
97 + @Override
98 + public void clearSelectedObject() {
99 + mLastSelectedObject = null;
100 + mList.clearSelection();
101 + }
102 +
103 + @Override
104 + public void actionPerformed( ActionEvent e ) {
105 + if ( ATION_REFRESH.equals( e.getActionCommand() ) ) {
106 + mObjectListClickListener.refreshRequested();
107 + } else if ( ATION_NEW.equals( e.getActionCommand() ) ) {
108 + mObjectListClickListener.createNewRequested();
109 + } else if ( ATION_SAVE.equals( e.getActionCommand() ) ) {
110 + mObjectListClickListener.requestSave();
111 + }
112 + }
113 +
114 + @Override
115 + public void valueChanged( ListSelectionEvent e ) {
116 + ObjectMetaData selection = getSelection();
117 + if ( (selection != null) && !selection.equals( mLastSelectedObject ) ) {
118 + mLastSelectedObject = selection;
119 + mObjectListClickListener.selected( selection );
120 + }
121 + }
122 +
123 + @Override
124 + public Dimension getPreferredSize() {
125 + return new Dimension( mPreferredPixelWidth, super.getPreferredSize().height );
126 + }
127 +
128 + private static class ObjectListModel extends AbstractListModel {
129 + private ObjectMetaData[] mMembers = ObjectMetaData.EMPTY_ARRAY;
130 +
131 + public void setMembers( ObjectMetaData[] pMembers ) {
132 + int oldLength = mMembers.length;
133 + mMembers = ObjectMetaData.EMPTY_ARRAY;
134 + if ( oldLength != 0 ) {
135 + fireIntervalRemoved( this, 0, oldLength - 1 );
136 + }
137 + int newLength = (pMembers == null) ? 0 : pMembers.length;
138 + if ( newLength != 0 ) {
139 + mMembers = pMembers;
140 + fireIntervalAdded( this, 0, newLength - 1 );
141 + }
142 + }
143 +
144 + @Override
145 + public int getSize() {
146 + return mMembers.length;
147 + }
148 +
149 + @Override
150 + public Object getElementAt( int index ) {
151 + return mMembers[index];
152 + }
153 + }
154 + }