From 90f96226cec258f5b24cc5ec7349aa9db9ad0944 Mon Sep 17 00:00:00 2001 From: Kuersat Akmaz Date: Sat, 17 Oct 2020 21:47:52 +0200 Subject: [client] Added Html editor into ImageCreationPage Issue : #3732 --- .../dozmod/gui/window/ImageDetailsWindow.java | 3 + .../window/layout/ImageDetailsWindowLayout.java | 75 ++++++++++++++++------ .../gui/wizard/layout/ImageMetaDataPageLayout.java | 45 ++++++++++--- 3 files changed, 97 insertions(+), 26 deletions(-) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java index 211ff1b7..c8d3b5a2 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java @@ -821,6 +821,9 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe editable = editable && (ImagePerms.canEdit(image) || ImagePerms.canAdmin(image)); txtTitle.setEditable(editable); txtDescription.setEditable(editable); + btnBold.setEnabled(editable); + btnItalic.setEnabled(editable); + btnUnderline.setEnabled(editable); txtTags.setEditable(editable); cboOperatingSystem.setEnabled(editable); // cboShareMode.setEnabled(editable); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java index 2792e9fd..040fffa5 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java @@ -6,6 +6,7 @@ import java.awt.Font; import java.awt.Frame; import java.awt.GridBagConstraints; import java.awt.Insets; +import java.awt.GridLayout; import javax.swing.BorderFactory; import javax.swing.Box; @@ -13,6 +14,7 @@ import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JDialog; +import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; @@ -20,6 +22,8 @@ import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTextArea; 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; @@ -40,7 +44,7 @@ public abstract class ImageDetailsWindowLayout extends JDialog { private static final int ICON_SIZE_Y = 24; protected final JTextField txtTitle; - protected final JTextArea txtDescription; + protected final JEditorPane txtDescription; protected QLabel lblError; protected final PersonLabel lblOwner; @@ -74,6 +78,10 @@ public abstract class ImageDetailsWindowLayout extends JDialog { protected final ImageVersionTable tblVersions; protected final QScrollPane scpVersions; + protected final JButton btnBold; + protected final JButton btnItalic; + protected final JButton btnUnderline; + protected JTabbedPane pnlTabs; protected ImagePermissionConfigurator ctlImagePermissionConfigurator; @@ -88,9 +96,11 @@ public abstract class ImageDetailsWindowLayout extends JDialog { setPreferredSize(Gui.getScaledDimension(630, 680)); ((JPanel) getContentPane()).setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); - /* ******************************************************************************* + /* + * ***************************************************************************** + * ** * - * Tab: Overview + * Tab: Overview * ********************************************************************************/ JPanel pnlTabOverview = new JPanel(); @@ -98,14 +108,34 @@ public abstract class ImageDetailsWindowLayout extends JDialog { // name txtTitle = new JTextField(); txtTitle.setFont(txtTitle.getFont().deriveFont(Font.BOLD, txtTitle.getFont().getSize2D() * 1.4f)); - //txtTitle.setMinimumSize(Gui.getScaledDimension(0, 24)); + // 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 GridLayout(1, 3)); + JPanel emptyPanel = new JPanel(); + grid.add(emptyPanel); + btnBold = new JButton(new StyledEditorKit.BoldAction()); + btnBold.setIcon(Gui.getScaledIconResource("/img/bold.png", "B", 24, this)); + btnBold.setText(""); + btnItalic = new JButton(new StyledEditorKit.ItalicAction()); + btnItalic.setIcon(Gui.getScaledIconResource("/img/italic.png", "B", 24, this)); + btnItalic.setText(""); + btnUnderline = new JButton(new StyledEditorKit.UnderlineAction()); + btnUnderline.setIcon(Gui.getScaledIconResource("/img/underline.png", "B", 24, this)); + btnUnderline.setText(""); + editingPanel.add(btnBold); + editingPanel.add(btnItalic); + editingPanel.add(btnUnderline); + grid.add(editingPanel); + grid.add(emptyPanel); + grid.nextRow(); + // description - txtDescription = new JTextArea(); - txtDescription.setLineWrap(true); - txtDescription.setWrapStyleWord(true); + 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); @@ -216,12 +246,14 @@ public abstract class ImageDetailsWindowLayout extends JDialog { buttonBar.add(btnUploadToMaster); grid.add(buttonBar, 3).fill(true, false).expand(true, false); grid.nextRow(); - + grid.finish(false); - /* ******************************************************************************* + /* + * ***************************************************************************** + * ** * - * Tab: VM versions + * Tab: VM versions * ********************************************************************************/ JPanel pnlTabVersions = new JPanel(); @@ -231,14 +263,17 @@ public abstract class ImageDetailsWindowLayout extends JDialog { grdVersions.add(scpVersions).fill(true, true).expand(true, true); grdVersions.finish(false); - /* ******************************************************************************* + /* + * ***************************************************************************** + * ** * - * Tab: Permissions + * Tab: Permissions * ********************************************************************************/ JPanel pnlTabPermissions = new JPanel(); ctlImagePermissionConfigurator = new ImagePermissionConfigurator(); - GridManager grdImagePermissionConfigurator = new GridManager(pnlTabPermissions, 1, false, new Insets(8, 2, 8, 2)); + 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(); @@ -268,9 +303,11 @@ public abstract class ImageDetailsWindowLayout extends JDialog { grdImagePermissionConfigurator.add(defaultPermissionPane).fill(true, false).expand(false, false); grdImagePermissionConfigurator.finish(false); - /* ******************************************************************************* + /* + * ***************************************************************************** + * ** * - * Bottom panel for buttons + * Bottom panel for buttons * ********************************************************************************/ JPanel pnlButtons = new JPanel(); @@ -286,16 +323,18 @@ public abstract class ImageDetailsWindowLayout extends JDialog { pnlButtons.add(btnClose); pnlButtons.add(btnSaveChanges); - /* ******************************************************************************* + /* + * ***************************************************************************** + * ** * - * Main panel containing the tabs + * 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); } diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java index 358fdd0d..a0104ade 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/wizard/layout/ImageMetaDataPageLayout.java @@ -2,9 +2,15 @@ package org.openslx.dozmod.gui.wizard.layout; import javax.swing.JCheckBox; import javax.swing.JComboBox; +import javax.swing.JEditorPane; +import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import javax.swing.JButton; +import javax.swing.text.StyledEditorKit; +import java.awt.Dimension; +import java.awt.GridLayout; import org.openslx.bwlp.thrift.iface.OperatingSystem; import org.openslx.dozmod.gui.Gui; import org.openslx.dozmod.gui.control.ComboBox; @@ -19,13 +25,17 @@ import org.openslx.thrifthelper.Comparators; public abstract class ImageMetaDataPageLayout extends WizardPage { protected final JComboBox cboOperatingSystem; - protected final JTextArea txtDescription; + protected final JEditorPane txtDescription; protected final JTextArea startCommand; protected final QLabel sCommandCaption; protected final JScrollPane startCommandPane; protected final JCheckBox chkLicenseRestricted; protected final JCheckBox chkIsTemplate; + protected final JButton btnBold; + protected final JButton btnItalic; + protected final JButton btnUnderline; + /** * wizard page for entering image data at creating or editing an image * @@ -62,16 +72,35 @@ public abstract class ImageMetaDataPageLayout extends WizardPage { grid.add(startCommandPane).fill(true, false).expand(true, false); grid.nextRow(); + // buttons for text editing + JPanel editingPanel = new JPanel(); + editingPanel.setLayout(new GridLayout(1, 3)); + JPanel emptyPanel = new JPanel(); + grid.add(emptyPanel); + btnBold = new JButton(new StyledEditorKit.BoldAction()); + btnBold.setIcon(Gui.getScaledIconResource("/img/bold.png", "B", 24, this)); + btnBold.setText(""); + btnItalic = new JButton(new StyledEditorKit.ItalicAction()); + btnItalic.setIcon(Gui.getScaledIconResource("/img/italic.png", "B", 24, this)); + btnItalic.setText(""); + btnUnderline = new JButton(new StyledEditorKit.UnderlineAction()); + btnUnderline.setIcon(Gui.getScaledIconResource("/img/underline.png", "B", 24, this)); + btnUnderline.setText(""); + editingPanel.add(btnBold); + editingPanel.add(btnItalic); + editingPanel.add(btnUnderline); + grid.add(editingPanel); + + grid.nextRow(); + + // description QLabel descriptionCaption = new QLabel("Beschreibung"); - txtDescription = new JTextArea(5, 50); - txtDescription.setMinimumSize(Gui.getScaledDimension(0, 70)); - txtDescription.setLineWrap(true); - txtDescription.setWrapStyleWord(true); - JScrollPane descPane = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, + txtDescription = new JEditorPane(); + txtDescription.setContentType("text/html"); + JScrollPane descPane = new JScrollPane(txtDescription, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - descPane.setMinimumSize(txtDescription.getMinimumSize()); grid.add(descriptionCaption); - grid.add(descPane).fill(true, false).expand(true, false); + grid.add(descPane).fill(true, true).expand(true, true); grid.nextRow(); chkLicenseRestricted = new JCheckBox("VM enthält lizenzpflichtige Software"); -- cgit v1.2.3-55-g7522