/* * File : MediaBagMultiEditorPanel.java * Created : 23-jan-2004 15:36 * By : fbusquets * * JClic - Authoring and playing system for educational activities * * Copyright (C) 2000 - 2005 Francesc Busquets & Departament * d'Educacio de la Generalitat de Catalunya * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details (see the LICENSE file). */ package edu.xtec.jclic.bags; import edu.xtec.jclic.boxes.ThumbsExplorerPanel; import edu.xtec.jclic.edit.Editor; import edu.xtec.jclic.edit.EditorPanel; import edu.xtec.jclic.fileSystem.FileSystem; import edu.xtec.jclic.misc.Utils; import edu.xtec.util.Messages; import edu.xtec.util.Options; import edu.xtec.util.SmallButton; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusEvent; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; /** * * @author Francesc Busquets (fbusquets@xtec.cat) * @version 13.09.17 */ public class MediaBagMultiEditorPanel extends EditorPanel { public static final int ICON_MAX_WIDTH=100; public static final int BUTTON_WIDTH=130; public static final int ICON_MAX_HEIGHT=70; public static final int BUTTON_HEIGHT=110; public static final String[] COMBO_ITEMS={"filefilter_all_media", "filefilter_all_images", "filefilter_all_sounds", "filefilter_midi", "filefilter_all_video", "filefilter_all_anim", "filefilter_skins", "filefilter_fonts"}; public static final int[] COMBO_FILTERS={Utils.ALL_FF, Utils.ALL_IMAGES_FF, Utils.ALL_SOUNDS_FF, Utils.MIDI_FF, Utils.ALL_VIDEO_FF, Utils.ALL_ANIM_FF, Utils.SKINS_FF, Utils.FONTS_FF}; private ThumbsExplorerPanel selectPanel; private MediaBagElementEditor current; int filters=-1; /** Creates new form MediaBagMultiEditorPanel */ public MediaBagMultiEditorPanel(Options options) { super(options); MediaBagEditor.createActions(options); MediaBagElementEditor.createActions(options); initComponents(); selectPanel=(ThumbsExplorerPanel)sPanel; scrollPanel.getVerticalScrollBar().setUnitIncrement(selectPanel.boxSize.height); selectPanel.addListSelectionListener(btSelListener); selectPanel.addActionListener(btActListener); filterCombo.setSelectedIndex(0); postInit(250, false, true); setEnabled(false); } @Override protected String getTitle(){ return options.getMsg("edit_media_title"); } protected List<String> getComboItems(){ List<String> result=new ArrayList<String>(); for(String item : COMBO_ITEMS) result.add(options.getMsg(item)); return result; } @Override public void focusGained(FocusEvent focusEvent) { ((MediaBagElementEditorPanel)elementEditPanel).focusGained(focusEvent); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { java.awt.GridBagConstraints gridBagConstraints; bGroup = new javax.swing.ButtonGroup(); mainPanel = new javax.swing.JPanel(); filterPanel = new javax.swing.JPanel(); filterLb = new javax.swing.JLabel(); filterCombo = new javax.swing.JComboBox(getComboItems().toArray()); scrollPanel = new javax.swing.JScrollPane(); sPanel = new ThumbsExplorerPanel(); statusLb = new javax.swing.JLabel(); elementEditPanel = new MediaBagElementEditorPanel(options); setLayout(new java.awt.BorderLayout()); mainPanel.setLayout(new java.awt.GridBagLayout()); filterPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT)); filterLb.setText(options.getMsg("edit_media_show_type")); filterPanel.add(filterLb); filterCombo.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { filterComboActionPerformed(evt); } }); filterPanel.add(filterCombo); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; mainPanel.add(filterPanel, gridBagConstraints); scrollPanel.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); scrollPanel.addComponentListener(new java.awt.event.ComponentAdapter() { public void componentResized(java.awt.event.ComponentEvent evt) { scrollPanelComponentResized(evt); } }); scrollPanel.setViewportView(sPanel); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; gridBagConstraints.weightx = 1.0; gridBagConstraints.weighty = 1.0; mainPanel.add(scrollPanel, gridBagConstraints); statusLb.setText("0 "+options.getMsg("edit_media_objects")); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; gridBagConstraints.insets = new java.awt.Insets(3, 3, 3, 3); mainPanel.add(statusLb, gridBagConstraints); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; mainPanel.add(elementEditPanel, gridBagConstraints); add(mainPanel, java.awt.BorderLayout.CENTER); }// </editor-fold>//GEN-END:initComponents private void filterComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_filterComboActionPerformed setFilters(COMBO_FILTERS[filterCombo.getSelectedIndex()]); }//GEN-LAST:event_filterComboActionPerformed private void scrollPanelComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_scrollPanelComponentResized selectPanel.resizeTo(scrollPanel.getViewport().getSize().width); }//GEN-LAST:event_scrollPanelComponentResized @Override public void editorDataChanged(Editor e){ if(e!=null){ if(e.equals(getEditor())) fillData(); else{ ThumbsExplorerPanel.ThumbElement th=selectPanel.getElementFor(e); if(th!=null){ MediaBagElementEditor mbed=(MediaBagElementEditor)e; Dimension d=selectPanel.maxThumbSize; th.setImage(mbed.getMediaBagElement().getThumbNail(d.width, d.height, getMediaBag().getProject().getFileSystem())); th.setText(mbed.getName()); // Free discardable objects from memory mbed.getMediaBagElement().clearData(); btSelListener.valueChanged(null); repaint(); } } } } public boolean checkIfEditorValid(Editor e) { return e instanceof MediaBagEditor; } protected MediaBagEditor getMediaBagEditor(){ return (MediaBagEditor)editor; } protected MediaBag getMediaBag(){ if(editor==null) return null; else return getMediaBagEditor().getMediaBag(); } public void setFilters(int filters){ this.filters=filters; for(int i=0; i<COMBO_FILTERS.length; i++){ if(COMBO_FILTERS[i]==filters){ filterCombo.setSelectedIndex(i); break; } } fillData(); } public int getFilters(){ return filters; } @Override public void setEnabled(boolean enabled){ super.setEnabled(enabled); selectPanel.setEnabled(enabled); filterCombo.setEnabled(enabled); elementEditPanel.setEnabled(enabled); } protected void fillData() { current=null; selectPanel.removeAllThumbElements(); ((MediaBagElementEditorPanel)elementEditPanel).attachEditor(null, true); MediaBagEditor mbe=getMediaBagEditor(); int n=0; if(mbe!=null){ Dimension d=selectPanel.maxThumbSize; List<MediaBagElementEditor> v=mbe.getChildrenList(filters); n=v.size(); FileSystem fs=getMediaBag().getProject().getFileSystem(); for(MediaBagElementEditor mbed : v){ // ATENCIO!!! // Provoca bucles i stack overflow //mbed.addEditorListener(this); selectPanel.addThumbElement( mbed, mbed.getMediaBagElement().getThumbNail(d.width, d.height, fs), mbed.getName()); // Free discardable objects from memory mbed.getMediaBagElement().clearData(); } } btSelListener.valueChanged(null); statusLb.setText(Integer.toString(n)+" "+options.getMsg(n==1 ? "edit_media_object" : "edit_media_objects")); scrollPanelComponentResized(null); } private ListSelectionListener btSelListener=new ListSelectionListener(){ public void valueChanged(ListSelectionEvent evt){ current=(MediaBagElementEditor)selectPanel.getCurrentObject(); ((MediaBagElementEditorPanel)elementEditPanel).attachEditor(current, true); SwingUtilities.invokeLater(new Runnable(){public void run(){ selectPanel.checkCurrentVisibility(); }}); } }; private ActionListener btActListener=new ActionListener(){ public void actionPerformed(ActionEvent evt){ MediaBagElementEditor.testMediaBagElementAction.actionPerformed(new ActionEvent(elementEditPanel, ActionEvent.ACTION_PERFORMED, "")); } }; protected void saveData() { } public MediaBagElementEditor getSelected(){ return current; } public void setSelected(MediaBagElementEditor value){ selectPanel.setCurrentObject(value); btSelListener.valueChanged(null); } private static Map<Options, MediaBagMultiEditorPanel> dlgPanels=new HashMap<Options, MediaBagMultiEditorPanel>(1); public static String getMediaName(String initialValue, Options options, Component parent, MediaBagEditor mbe, int filters){ String result=null; Messages msg=options.getMessages(); MediaBagMultiEditorPanel mbep=dlgPanels.get(options); if(mbep==null){ //mbep=(MediaBagMultiEditorPanel)mbe.createEditorPanel(options); mbep=new MediaBagMultiEditorPanel(options); mbep.setPreferredSize(new Dimension(500, 500)); dlgPanels.put(options, mbep); } mbep.attachEditor(mbe, true); mbep.setFilters(filters); if(filters>=0) mbep.filterCombo.setEnabled(false); mbep.setSelected( initialValue==null ? null : (MediaBagElementEditor)mbe.getChildByName(initialValue)); boolean b=msg.showInputDlg(parent, mbep, "edit_media_dlg_title"); if(b){ MediaBagElementEditor mbele=mbep.getSelected(); if(mbele!=null) result=mbele.getName(); } mbep.filterCombo.setEnabled(true); mbep.removeEditor(true); return result; } @Override protected void addActionsTo(Container cnt){ //cnt.add(new SmallButton(MediaBagElementEditor.newMediaBagElementAction)); cnt.add(new SmallButton(MediaBagEditor.newMediaBagElementAction)); cnt.add(new SmallButton(MediaBagElementEditor.testMediaBagElementAction)); cnt.add(new SmallButton(Editor.deleteAction)); cnt.add(new SmallButton(MediaBagEditor.updateAllMediaAction)); cnt.add(new SmallButton(MediaBagEditor.exportAllMediaAction)); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.ButtonGroup bGroup; private javax.swing.JPanel elementEditPanel; private javax.swing.JComboBox filterCombo; private javax.swing.JLabel filterLb; private javax.swing.JPanel filterPanel; private javax.swing.JPanel mainPanel; private javax.swing.JPanel sPanel; private javax.swing.JScrollPane scrollPanel; private javax.swing.JLabel statusLb; // End of variables declaration//GEN-END:variables }