package org.jtheque.views.impl.windows;
import org.jtheque.errors.Error;
import org.jtheque.errors.Error.Level;
import org.jtheque.errors.ErrorListener;
import org.jtheque.errors.ErrorService;
import org.jtheque.i18n.LanguageService;
import org.jtheque.images.ImageService;
import org.jtheque.ui.Model;
import org.jtheque.ui.utils.builders.I18nPanelBuilder;
import org.jtheque.ui.utils.windows.frames.SwingFilthyBuildedFrameView;
import org.jtheque.views.impl.ViewsResources;
import org.jtheque.views.impl.components.renderers.ErrorListRenderer;
import org.jtheque.views.impl.models.ErrorsListModel;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JTextArea;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Insets;
import static org.jtheque.utils.ui.GridBagUtils.*;
/*
* Copyright JTheque (Baptiste Wicht)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* An error view implementation.
*
* @author Baptiste Wicht
*/
public final class ErrorView extends SwingFilthyBuildedFrameView<Model> implements ListSelectionListener,
org.jtheque.views.windows.ErrorView, ErrorListener {
private ImageIcon errorIcon;
private ImageIcon warningIcon;
private JList listEvents;
private JLabel labelTitle;
private JTextArea areaDetails;
private LanguageService languageService;
@Override
protected void initView() {
setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setTitleKey("error.view.title");
}
@Override
protected void buildView(I18nPanelBuilder builder) {
builder.setDefaultInsets(new Insets(4, 4, 4, 4));
languageService = getService(LanguageService.class);
listEvents = builder.addScrolledList(new ErrorsListModel(getService(ErrorService.class)),
new ErrorListRenderer(getService(ImageService.class), languageService),
builder.gbcSet(0, 1, BOTH, LINE_START, 2, 1, 1.0, 0.67));
listEvents.getSelectionModel().addListSelectionListener(this);
listEvents.setVisibleRowCount(8);
createInfosPanel(builder);
getService(ErrorService.class).addErrorListener(this);
errorIcon = getService(ImageService.class).getIcon(ViewsResources.ERROR_ICON);
warningIcon = getService(ImageService.class).getIcon(ViewsResources.WARNING_ICON);
}
/**
* Create the panel to display the informations of an event.
*
* @param parent The parent builder.
*/
private void createInfosPanel(I18nPanelBuilder parent) {
I18nPanelBuilder builder = parent.addPanel(parent.gbcSet(0, 2, BOTH, LINE_START, 2, 1, 1.0, 0.33));
builder.setI18nTitleBorder("error.view.details");
labelTitle = builder.addLabel(builder.gbcSet(0, 0, HORIZONTAL, BASELINE_LEADING));
areaDetails = new JTextArea();
areaDetails.setRows(3);
areaDetails.setWrapStyleWord(true);
areaDetails.setLineWrap(true);
builder.addScrolled(areaDetails, builder.gbcSet(0, 2, BOTH, LINE_START, 1.0, 1.0));
}
@Override
public void valueChanged(ListSelectionEvent e) {
if (listEvents.getSelectedValues().length > 0) {
org.jtheque.errors.Error error = (Error) listEvents.getSelectedValue();
labelTitle.setText(error.getTitle(languageService));
labelTitle.setToolTipText(error.getLevel().toString());
if (error.getLevel() == Level.WARNING) {
labelTitle.setIcon(warningIcon);
} else {
labelTitle.setIcon(errorIcon);
}
areaDetails.setText(error.getDetails(languageService));
}
}
@Override
public void display() {
super.display();
toFirstPlan();
}
@Override
public void errorOccurred(Error error) {
display();
}
@Override
public boolean isNotEmpty() {
return listEvents.getModel().getSize() > 0;
}
}