package org.openslx.dozmod.gui.window.layout;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
import org.openslx.dozmod.gui.Gui;
import org.openslx.dozmod.gui.configurator.ImagePermissionConfigurator;
import org.openslx.dozmod.gui.control.ComboBox;
import org.openslx.dozmod.gui.control.ComboBox.ComboBoxRenderer;
import org.openslx.dozmod.gui.control.PersonLabel;
import org.openslx.dozmod.gui.control.QLabel;
import org.openslx.dozmod.gui.control.table.ImageVersionTable;
import org.openslx.dozmod.gui.control.table.QScrollPane;
import org.openslx.dozmod.gui.helper.GridManager;
import org.openslx.thrifthelper.Comparators;
@SuppressWarnings("serial")
public abstract class ImageDetailsWindowLayout extends JDialog {
private static final int ICON_SIZE_Y = 24;
protected final JTextField txtTitle;
protected final JTextArea txtDescription;
protected QLabel lblError;
protected final PersonLabel lblOwner;
protected final JButton btnChangeOwner;
protected final QLabel lblCreateTime;
protected final PersonLabel lblUpdater;
protected final QLabel lblUpdateTime;
protected final ComboBox<OperatingSystem> cboOperatingSystem;
protected final QLabel lblVirtualizer;
protected final JTextField txtTags;
protected final JCheckBox chkIsTemplate;
protected final ComboBox<ShareMode> cboShareMode;
protected final JTextField txtId;
protected final JTextField txtVersion;
protected final JButton btnSaveChanges;
protected final JButton btnUpdateImage;
protected final JButton btnUploadToMaster;
protected final JButton btnClose;
protected final JCheckBox chkDefaultPermAdmin;
protected final JCheckBox chkDefaultPermEdit;
protected final JCheckBox chkDefaultPermDownload;
protected final JCheckBox chkDefaultPermLink;
protected final JButton btnShowLinkingLectures;
protected final QLabel lblLinkedLectureCount;
protected final ImageVersionTable tblVersions;
protected final QScrollPane scpVersions;
protected JTabbedPane pnlTabs;
protected ImagePermissionConfigurator ctlImagePermissionConfigurator;
private static String infoTextDefPerms = "<html><body style='width:100%'>"
+ "Hier können Sie Rechte für nicht in der Liste angegebene Nutzer festlegen:" + "</body></html>";
public ImageDetailsWindowLayout(Frame modalParent) {
super(modalParent, "<init>", ModalityType.APPLICATION_MODAL);
setResizable(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setPreferredSize(Gui.getScaledDimension(630, 680));
((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
/* *******************************************************************************
*
* Tab: Overview
*
********************************************************************************/
JPanel pnlTabOverview = new JPanel();
GridManager grid = new GridManager(pnlTabOverview, 3, true, new Insets(2, 2, 2, 2));
// name
txtTitle = new JTextField();
txtTitle.setFont(txtTitle.getFont().deriveFont(Font.BOLD, txtTitle.getFont().getSize2D() * 1.4f));
//txtTitle.setMinimumSize(Gui.getScaledDimension(0, 24));
grid.add(txtTitle, 3).expand(true, false).fill(true, false);
grid.nextRow();
// description
txtDescription = new JTextArea();
txtDescription.setLineWrap(true);
txtDescription.setWrapStyleWord(true);
grid.add(new QLabel("Beschreibung")).anchor = GridBagConstraints.FIRST_LINE_START;
JScrollPane jsp = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.setMinimumSize(Gui.getScaledDimension(0, 110));
jsp.setPreferredSize(Gui.getScaledDimension(0, 110));
grid.add(jsp, 2).expand(true, true).fill(true, true);
grid.nextRow();
// owner
lblOwner = new PersonLabel();
btnChangeOwner = new JButton("Ändern");
grid.add(new QLabel("Besitzer"));
grid.add(lblOwner).expand(true, false);
grid.add(btnChangeOwner).fill(true, false);
grid.nextRow();
// creation time
lblCreateTime = new QLabel();
grid.add(new QLabel("Erstellt am"));
grid.add(lblCreateTime, 2);
grid.nextRow();
// last updater
lblUpdater = new PersonLabel();
grid.add(new QLabel("Geändert durch"));
grid.add(lblUpdater, 2);
grid.nextRow();
// last updated
lblUpdateTime = new QLabel();
grid.add(new QLabel("Geändert am"));
grid.add(lblUpdateTime, 2);
grid.nextRow();
cboOperatingSystem = new ComboBox<OperatingSystem>(Comparators.operatingSystem,
new ComboBoxRenderer<OperatingSystem>() {
@Override
public String renderItem(OperatingSystem item) {
if (item == null)
return null;
return item.getOsName();
}
});
cboOperatingSystem.setEditable(false);
grid.add(new QLabel("Betriebssystem"));
grid.add(cboOperatingSystem, 2).expand(true, false).fill(true, false);
grid.nextRow();
// tags
txtTags = new JTextField();
// share mode
cboShareMode = new ComboBox<ShareMode>(new ComboBoxRenderer<ShareMode>() {
@Override
public String renderItem(ShareMode item) {
if (item == null)
return "null";
return item.name();
}
});
grid.add(new QLabel("Freigabemodus"));
grid.add(cboShareMode, 2).expand(true, false).fill(true, false);
grid.nextRow();
// template
chkIsTemplate = new JCheckBox("Vorlage");
grid.add(Box.createGlue());
grid.add(chkIsTemplate, 2);
grid.nextRow();
// version
txtVersion = new JTextField();
grid.add(new QLabel("Versions-ID"));
grid.add(txtVersion, 2).expand(true, false).fill(true, false);
grid.nextRow();
// id
txtId = new JTextField();
txtId.setEditable(false);
grid.add(new QLabel("VM-ID"));
grid.add(txtId, 2).expand(true, false).fill(true, false);
grid.nextRow();
// virtualizer
lblVirtualizer = new QLabel();
grid.add(new QLabel("Virtualisierer"));
grid.add(lblVirtualizer, 2).expand(true, false).fill(true, false);
grid.nextRow();
grid.add(new QLabel("Veranstaltungen"));
lblLinkedLectureCount = new QLabel();
grid.add(lblLinkedLectureCount).expand(true, false);
btnShowLinkingLectures = new JButton("Anzeigen");
grid.add(btnShowLinkingLectures).fill(true, false);
grid.nextRow();
grid.add(Box.createVerticalGlue(), 3).expand(true, true).fill(true, true);
grid.nextRow();
JPanel buttonBar = new JPanel();
BoxLayout buttons = new BoxLayout(buttonBar, BoxLayout.LINE_AXIS);
buttonBar.setLayout(buttons);
btnUpdateImage = new JButton("Neue VM-Version hochladen",
Gui.getScaledIconResource("/img/upload-icon.png", "New VM", ICON_SIZE_Y, buttonBar));
buttonBar.add(btnUpdateImage);
btnUploadToMaster = new JButton("Landesweit veröffentlichen",
Gui.getScaledIconResource("/img/publish-icon.png", "Publish VM", ICON_SIZE_Y, buttonBar));
buttonBar.add(btnUploadToMaster);
grid.add(buttonBar, 3).fill(true, false).expand(true, false);
grid.nextRow();
grid.finish(false);
/* *******************************************************************************
*
* Tab: VM versions
*
********************************************************************************/
JPanel pnlTabVersions = new JPanel();
tblVersions = new ImageVersionTable();
scpVersions = new QScrollPane(tblVersions);
GridManager grdVersions = new GridManager(pnlTabVersions, 1, false, new Insets(8, 2, 8, 2));
grdVersions.add(scpVersions).fill(true, true).expand(true, true);
grdVersions.finish(false);
/* *******************************************************************************
*
* Tab: Permissions
*
********************************************************************************/
JPanel pnlTabPermissions = new JPanel();
ctlImagePermissionConfigurator = new ImagePermissionConfigurator();
GridManager grdImagePermissionConfigurator = new GridManager(pnlTabPermissions, 1, false, new Insets(8, 2, 8, 2));
grdImagePermissionConfigurator.add(ctlImagePermissionConfigurator).fill(true, true).expand(true, true);
// Panel with the permissions for other users
JPanel defaultPermissionPane = new JPanel();
defaultPermissionPane.setBorder(BorderFactory.createTitledBorder("Andere Nutzer"));
defaultPermissionPane.setLayout(new BoxLayout(defaultPermissionPane, BoxLayout.PAGE_AXIS));
JLabel txtDefaultPerms = new JLabel(infoTextDefPerms);
JPanel txtDefaultPermsPanel = new JPanel();
// Panel + BoxLayout + Label = wordwrap
txtDefaultPermsPanel.setLayout(new BoxLayout(txtDefaultPermsPanel, BoxLayout.LINE_AXIS));
txtDefaultPermsPanel.add(txtDefaultPerms);
JPanel defaultPermsSubPanel = new JPanel();
defaultPermsSubPanel.setLayout(new BoxLayout(defaultPermsSubPanel, BoxLayout.LINE_AXIS));
chkDefaultPermAdmin = new JCheckBox("Admin");
chkDefaultPermDownload = new JCheckBox("Download");
chkDefaultPermEdit = new JCheckBox("Bearbeiten");
chkDefaultPermLink = new JCheckBox("Verlinken");
defaultPermsSubPanel.add(chkDefaultPermLink);
defaultPermsSubPanel.add(chkDefaultPermDownload);
defaultPermsSubPanel.add(chkDefaultPermEdit);
defaultPermsSubPanel.add(chkDefaultPermAdmin);
defaultPermissionPane.add(txtDefaultPermsPanel);
defaultPermissionPane.add(Box.createVerticalStrut(10));
defaultPermissionPane.add(defaultPermsSubPanel);
grdImagePermissionConfigurator.add(defaultPermissionPane).fill(true, false).expand(false, false);
grdImagePermissionConfigurator.finish(false);
/* *******************************************************************************
*
* Bottom panel for buttons
*
********************************************************************************/
JPanel pnlButtons = new JPanel();
pnlButtons.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
pnlButtons.setLayout(new BoxLayout(pnlButtons, BoxLayout.LINE_AXIS));
btnSaveChanges = new JButton("Speichern");
btnClose = new JButton("Schließen");
// user feedback slot
lblError = new QLabel("");
lblError.setForeground(Color.RED);
pnlButtons.add(lblError);
pnlButtons.add(Box.createGlue());
pnlButtons.add(btnClose);
pnlButtons.add(btnSaveChanges);
/* *******************************************************************************
*
* Main panel containing the tabs
*
********************************************************************************/
pnlTabs = new JTabbedPane();
pnlTabs.addTab("Übersicht", pnlTabOverview);
pnlTabs.addTab("VM-Versionen", pnlTabVersions);
pnlTabs.addTab("Berechtigungen", pnlTabPermissions);
add(pnlTabs, BorderLayout.CENTER);
add(pnlButtons, BorderLayout.PAGE_END);
}
}