package Schmortopf.Main.MainUIComponents;
/**
* The dialog for language selection.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.swing.plaf.metal.*;
import java.util.*;
import java.io.*;
import Schmortopf.Utility.*;
import Schmortopf.Utility.gui.*;
import Schmortopf.Main.IDE_MainFrameProvider;
import Schmortopf.Utility.IniFile.IniFile;
import Language.Language;
import Language.Editor.*;
public class LanguageSelectionDialog extends JDialog
{
// Inifile key :
public static final String SelectedLanguageKey = "Selected Language";
private String selectedLanguage;
//private String[] availableLanguages, availableInternalLanguages;
final Vector availableLanguagesVector = new Vector();
private ButtonGroup languageGroup;
private JRadioButton[] languageButtons;
public LanguageSelectionDialog( final JFrame parentFrame,
final IDE_MainFrameProvider mainFrameProvider )
{
super(parentFrame);
this.setTitle("Schmortopf Language Selection ");
this.setModal( true );
this.getContentPane().setLayout( new BorderLayout() );
final int spaceUnit = UIManager.getFont("Label.font").getSize();
this.selectedLanguage = Language.GetInstance().GetActualTranslation();
boolean fromJarFile = Language.GetInstance().GetActualTranslationWasReadFromJarFile();
String[] availableInternalLanguages = Language.GetInstance().GetAvailableInternalLanguages();
String[] availableExternalLanguages = Language.GetInstance().GetAvailableLanguages();
for(int i=0; i<availableInternalLanguages.length; i++)
{
AvailableLanguage al = new AvailableLanguage(availableInternalLanguages[i], true);
availableLanguagesVector.addElement(al);
}
for(int i=0; i<availableExternalLanguages.length; i++)
{
AvailableLanguage al = new AvailableLanguage(availableExternalLanguages[i], false);
availableLanguagesVector.addElement(al);
}
// Put all into a mainPanel with some border space :
final JPanel mainPanel = new JPanel( new BorderLayout(0,0) );
int bsp = UIManager.getFont("TextField.font").getSize()/2;
mainPanel.setBorder( BorderFactory.createEmptyBorder(bsp,bsp,bsp,bsp));
this.getContentPane().add( mainPanel, BorderLayout.CENTER );
JPanel radioPanel = new JPanel();
final BoxLayout radioLayout = new BoxLayout( radioPanel, BoxLayout.Y_AXIS );
radioPanel.setLayout(radioLayout);
Border ob = BorderFactory.createEtchedBorder();
Border ib = BorderFactory.createEmptyBorder(0,spaceUnit,0,spaceUnit);
radioPanel.setBorder( BorderFactory.createCompoundBorder(ob,ib) );
this.languageGroup = new ButtonGroup();
this.languageButtons = new JRadioButton[ availableLanguagesVector.size() ];
for( int i=0; i < availableLanguagesVector.size(); i++ )
{
AvailableLanguage al = (AvailableLanguage) availableLanguagesVector.elementAt(i);
this.languageButtons[i] = new JRadioButton( al.uiText );
this.languageGroup.add(this.languageButtons[i]);
radioPanel.add( this.languageButtons[i] );
// Autoselect the active language :
if( al.name.equals( this.selectedLanguage )
&& al.isEmbeddedInJarfile == fromJarFile )
{
this.languageButtons[i].setSelected(true);
}
}
JContrastLabel titleLabel = new JContrastLabel(Language.Translate("Available Languages"));
JContrastLabel bottomLabel = new JContrastLabel(Language.Translate("Changes need a restart of the IDE."));
mainPanel.add( titleLabel, BorderLayout.NORTH );
mainPanel.add( radioPanel, BorderLayout.CENTER );
mainPanel.add( bottomLabel, BorderLayout.SOUTH );
// editor
JPanel editorPanel = new EFCNGradientPanel( new BorderLayout(0,0),
EFCNGradientPanel.ApplyUpperLeftCornerHighLight,
EFCNGradientPanel.StrongGradientStrength,
EFCNGradientPanel.ActiveTitleBackground );
JPanel wrapPanel = new JPanel(new BorderLayout());
wrapPanel.add(editorPanel, BorderLayout.CENTER);
this.getContentPane().add(wrapPanel, BorderLayout.NORTH);
//Border innerBorder = BorderFactory.createEmptyBorder(0, spaceUnit/2, spaceUnit/2, spaceUnit/2);
Border outerBorder = new CustomEtchedBorder(false,false,true,false);
wrapPanel.setBorder( outerBorder );
JTextArea explainEditorTA = new JTextArea(
Language.Translate("The language editor allows you to create\nnew language packs or edit existing\nlanguage packs."));
explainEditorTA.setEditable(false);
explainEditorTA.setOpaque(false);
explainEditorTA.setBorder(BorderFactory.createEmptyBorder(spaceUnit, spaceUnit, spaceUnit, spaceUnit));
editorPanel.add( explainEditorTA, BorderLayout.CENTER );
JSenseButton editButton = new JSenseButton(" "+Language.Translate("Language Editor")+" ",
mainFrameProvider.loadImageIcon("pics/menupics/edit.gif"), true, mainFrameProvider);
JPanel wr2 = new JPanel(new FlowLayout());
wr2.add(editButton);
wr2.setOpaque(false);
editorPanel.add( wr2, BorderLayout.EAST );
editButton.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
saveChoice();
// stop this modal dialog
setVisible(false);
TranslationEditor te = new TranslationEditor();
}
});
// Make a buttonpanel in the south with an OK and a cancel button,
// which closes this dialog :
final JPanel buttonPanel = new EFCNGradientPanel( new FlowLayout(),
EFCNGradientPanel.ApplyVerticalHighLight,
EFCNGradientPanel.StrongGradientStrength,
EFCNGradientPanel.ActiveTitleBackground );
buttonPanel.setBorder( BorderFactory.createEtchedBorder() );
this.getContentPane().add( buttonPanel, BorderLayout.SOUTH );
final ImageIcon okIcon = mainFrameProvider.loadImageIcon("pics/menupics/ok.gif");
JSenseButton okButton = new JSenseButton(" "+Language.Translate("Save and Close")+" ",
okIcon, true, mainFrameProvider);
buttonPanel.add( okButton );
okButton.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
saveChoice();
// Then close it :
setVisible(false);
}
});
final ImageIcon cancelIcon = mainFrameProvider.loadImageIcon("pics/menupics/cancel.gif");
JSenseButton cancelButton = new JSenseButton(" Cancel ",cancelIcon,true,mainFrameProvider);
buttonPanel.add( cancelButton );
cancelButton.addActionListener( new ActionListener()
{
public void actionPerformed( ActionEvent e )
{
setVisible(false);
}
});
// set location and size :
this.pack();
ActionListener escapeActionListener = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
setVisible(false);
}
};
this.getRootPane().registerKeyboardAction( escapeActionListener,
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,0, true),
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
} // Constructor
private void saveChoice()
{
// Save the selected language :
AvailableLanguage selectedLanguage = null;
for( int i=0; i < languageButtons.length; i++ )
{
if( languageButtons[i].isSelected() )
{
selectedLanguage = (AvailableLanguage) availableLanguagesVector.elementAt(i);
break;
}
}
// this also saves the settings
if(selectedLanguage!=null)
{
Language.GetInstance().setActualTranslation( selectedLanguage.name, selectedLanguage.isEmbeddedInJarfile );
}
}
class AvailableLanguage
{
public AvailableLanguage(String name, boolean isEmbeddedInJarfile)
{
this.name = name;
this.isEmbeddedInJarfile = isEmbeddedInJarfile;
this.uiText = name;
if(name.equalsIgnoreCase("English") || isEmbeddedInJarfile)
{
uiText += " [ "+Language.Translate("embedded in the jar file")+" ]";
}
}
String uiText;
String name;
boolean isEmbeddedInJarfile;
}
public void showAt( int xp, int yp )
{
this.setLocation(xp,yp);
this.show();
}
} // LanguageSelectionDialog
|