package org.openslx.dozmod.gui.window.layout; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.Insets; import java.awt.FlowLayout; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JDialog; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.text.StyledEditorKit; import javax.swing.JEditorPane; 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 JEditorPane 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 cboOperatingSystem; protected final QLabel lblVirtualizer; protected final JTextField txtTags; protected final JCheckBox chkIsTemplate; protected final ComboBox 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 final JButton btnBold; protected final JButton btnItalic; protected final JButton btnUnderline; protected final JComboBox cbTxtSize; protected final JComboBox cbTxtColor; protected JTabbedPane pnlTabs; protected ImagePermissionConfigurator ctlImagePermissionConfigurator; private static String infoTextDefPerms = "" + "Hier können Sie Rechte für nicht in der Liste angegebene Nutzer festlegen:" + ""; public ImageDetailsWindowLayout(Frame modalParent) { super(modalParent, "", 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(); // buttons for text editing JPanel editingPanel = new JPanel(); editingPanel.setLayout(new FlowLayout(FlowLayout.LEADING)); JPanel emptyPanel = new JPanel(); grid.add(emptyPanel); btnBold = new JButton(new StyledEditorKit.BoldAction()); btnBold.setIcon(Gui.getScaledIconResource("/img/bold.png", "B", 15, this)); btnBold.setText(""); btnItalic = new JButton(new StyledEditorKit.ItalicAction()); btnItalic.setIcon(Gui.getScaledIconResource("/img/italic.png", "B", 15, this)); btnItalic.setText(""); btnUnderline = new JButton(new StyledEditorKit.UnderlineAction()); btnUnderline.setIcon(Gui.getScaledIconResource("/img/underline.png", "B", 15, this)); btnUnderline.setText(""); editingPanel.add(btnBold); editingPanel.add(btnItalic); editingPanel.add(btnUnderline); String[] textsizes = {"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29"}; cbTxtSize = new JComboBox<>(textsizes); cbTxtSize.setPreferredSize(new Dimension(65,25)); editingPanel.add(cbTxtSize); Object[] colors = {"Black", "Blue", "Red", "Yellow", "Green"}; cbTxtColor = new JComboBox<>(colors); cbTxtColor.setPreferredSize(new Dimension(100,25)); editingPanel.add(cbTxtColor); grid.add(editingPanel).expand(false, true); grid.add(emptyPanel); grid.nextRow(); // description txtDescription = new JEditorPane(); txtDescription.setContentType("text/html"); 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(Comparators.operatingSystem, new ComboBoxRenderer() { @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(new ComboBoxRenderer() { @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); } }