summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuersat Akmaz2020-11-30 21:06:01 +0100
committerKuersat Akmaz2020-11-30 21:06:01 +0100
commitc71369bccd6bbd081e9d1e5daf54b249a1606274 (patch)
treeaa3671c6e8e0cad487f329910259fbffbd7fcb80
parent[client] added WYSIWYG button into image datailswindow (diff)
downloadtutor-module-c71369bccd6bbd081e9d1e5daf54b249a1606274.tar.gz
tutor-module-c71369bccd6bbd081e9d1e5daf54b249a1606274.tar.xz
tutor-module-c71369bccd6bbd081e9d1e5daf54b249a1606274.zip
[client] added fixed htmleditor to imagedetailswindow
Issue : #3732
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/ImageDetailsWindow.java138
-rw-r--r--dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/layout/ImageDetailsWindowLayout.java10
2 files changed, 93 insertions, 55 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 764cf7eb..fc68c708 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
@@ -7,10 +7,13 @@ import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.KeyEvent;
+import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
+import java.beans.Encoder;
+import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Collections;
import java.util.Comparator;
@@ -28,7 +31,12 @@ import javax.swing.JOptionPane;
import javax.swing.KeyStroke;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultEditorKit;
import javax.swing.text.StyledEditorKit;
+import javax.swing.text.html.HTML;
+import javax.swing.text.html.HTMLDocument;
+import javax.swing.text.html.HTMLEditorKit;
import org.apache.log4j.Logger;
import org.apache.thrift.TException;
@@ -266,8 +274,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
break;
}
- act.actionPerformed(new ActionEvent(act,ActionEvent.ACTION_PERFORMED,
- (String)act.getValue(Action.ACTION_COMMAND_KEY)));
+ act.actionPerformed(new ActionEvent(act,ActionEvent.ACTION_PERFORMED,
+ (String)act.getValue(Action.ACTION_COMMAND_KEY)));
}
});
@@ -275,18 +283,43 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
@Override
public void actionPerformed(ActionEvent e) {
String tmp = txtDescription.getText();
- if (txtDescription.getContentType().equals("text/html")){
- txtDescription.setContentType("text/plain");
+ if (txtDescription.getContentType().equals("text/html")) {
+ txtDescription.setContentType("text/plain");
txtDescription.setText(tmp);
btnWysiwyg.setText("Wysiwyg");
+ if(ImagePerms.canEdit(image) || ImagePerms.canAdmin(image)) {
+ btnSaveChanges.setEnabled(true);
+ }
} else {
- txtDescription.setContentType("text/html");
+ txtDescription.setContentType("text/html");
txtDescription.setText(tmp);
btnWysiwyg.setText("Html");
}
}
});
+ txtDescription.addKeyListener(new KeyListener() {
+ @Override
+ public void keyPressed(KeyEvent e) {
+ }
+
+ @Override
+ public void keyTyped(KeyEvent e) {
+ }
+
+ @Override
+ public void keyReleased(KeyEvent e) {
+ if (e.getKeyCode() == KeyEvent.VK_ENTER && txtDescription.getContentType().equals("text/html")) {
+ try {
+ kit.insertHTML((HTMLDocument) txtDescription.getDocument(), txtDescription.getCaretPosition(), "<br>", 0, 0,
+ HTML.Tag.BR);
+ txtDescription.setCaretPosition(txtDescription.getCaretPosition()); // This moves caret to next line
+ } catch (BadLocationException | IOException ex) {
+ ex.printStackTrace();
+ }
+ }
+ }
+ });
tblVersions.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
@@ -473,8 +506,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
@Override
public void run() {
if (machineDescription == null) {
- Gui.showMessageBox("Konnte VM-Konfiguration nicht abrufen.", MessageType.ERROR,
- LOGGER, null);
+ Gui.showMessageBox("Konnte VM-Konfiguration nicht abrufen.", MessageType.ERROR, LOGGER,
+ null);
return;
}
@@ -498,9 +531,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
*
********************************************************************************/
/**
- * Sets the image to the given imageBaseId. This will also trigger fill()
- * which will set the image details fields to the values represented by this
- * image.
+ * Sets the image to the given imageBaseId. This will also trigger fill() which
+ * will set the image details fields to the values represented by this image.
*
* @param imageBaseId the id of the image to be displayed
*/
@@ -510,8 +542,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
MetaDataCache.getVirtualizers();
final ImageMetaCallback callback = new ImageMetaCallback() {
@Override
- public void fetchedImageDetails(ImageDetailsRead imageDetails,
- Map<String, ImagePermissions> permissions) {
+ public void fetchedImageDetails(ImageDetailsRead imageDetails, Map<String, ImagePermissions> permissions) {
if (imageDetails == null) {
return;
}
@@ -540,8 +571,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
if (!actionHandler.setImageOwner(image.getImageBaseId(), user)) {
return;
}
- Gui.showMessageBox(me, "Besitzrechte übertragen an " + FormatHelper.userName(user), MessageType.INFO,
- null, null);
+ Gui.showMessageBox(me, "Besitzrechte übertragen an " + FormatHelper.userName(user), MessageType.INFO, null,
+ null);
makeEditable(false);
refresh(true);
}
@@ -568,8 +599,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
}
// let the user confirm or abort
- if (!Gui.showMessageBox("Wollen Sie diese VM wirklich landesweit veröffentlichen?",
- MessageType.QUESTION_YESNO, null, null))
+ if (!Gui.showMessageBox("Wollen Sie diese VM wirklich landesweit veröffentlichen?", MessageType.QUESTION_YESNO,
+ null, null))
return;
// start upload to masterserver
QuickTimer.scheduleOnce(new Task() {
@@ -580,11 +611,10 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
transferId = ThriftManager.getSatClient().publishImageVersion(Session.getSatelliteToken(),
image.latestVersionId);
} catch (TException e1) {
- ThriftError.showMessage(me, LOGGER, e1,
- "Upload der VM auf den Masterserver fehlgeschlagen."
- + " Prüfen Sie, ob Sie bei der Registrierung dem landesweiten VM-Austausch zugestimmt haben.\n"
- + " Sie können dies hier überprüfen:\n"
- + DesktopEnvironment.Link.REGISTER_BWIDM.uri.toString() + "\n\n");
+ ThriftError.showMessage(me, LOGGER, e1, "Upload der VM auf den Masterserver fehlgeschlagen."
+ + " Prüfen Sie, ob Sie bei der Registrierung dem landesweiten VM-Austausch zugestimmt haben.\n"
+ + " Sie können dies hier überprüfen:\n"
+ + DesktopEnvironment.Link.REGISTER_BWIDM.uri.toString() + "\n\n");
return;
}
Gui.asyncExec(new Runnable() {
@@ -593,9 +623,9 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
MainWindow.addPassiveTransfer(transferId, image.imageName, true);
// Inform user
Gui.showMessageBox(ImageDetailsWindow.this,
- "Die Übertragung läuft direkt zwischen Satellitenserver und"
- + " dem " + Branding.getServiceName() + " Zentral-Server.\n"
- + "Wenn Sie die " + Branding.getApplicationName() + " schließen, wird der Transfer trotzdem"
+ "Die Übertragung läuft direkt zwischen Satellitenserver und" + " dem "
+ + Branding.getServiceName() + " Zentral-Server.\n" + "Wenn Sie die "
+ + Branding.getApplicationName() + " schließen, wird der Transfer trotzdem"
+ "weiterlaufen.",
MessageType.INFO, null, null);
}
@@ -605,8 +635,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
/**
- * Called by the "Save" button, tries to save the changes internally and
- * then react based depending on the outcome of the save
+ * Called by the "Save" button, tries to save the changes internally and then
+ * react based depending on the outcome of the save
*/
private void saveChanges() {
boolean saved = saveChangesInternal();
@@ -622,15 +652,16 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
/**
- * Helper to only save the changes, nothing else. Updating GUI elements is
- * done by saveChanges()
+ * Helper to only save the changes, nothing else. Updating GUI elements is done
+ * by saveChanges()
*
* @return false if any try to save changes failed, true otherwise
*/
private boolean saveChangesInternal() {
// Special case: User has admin rights through default permissions
- // -> user removes default admin permissions
- // -> first save custom permissions, then the rest (including default permissions)
+ // -> user removes default admin permissions
+ // -> first save custom permissions, then the rest (including default
+ // permissions)
if (adminRightsFromDefaultPermissions && changeListenerPermissions.isCurrentlyChanged()) {
if (!saveCustomPermissions()) {
return false;
@@ -648,8 +679,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
actionHandler.updateImageBase(image.getImageBaseId(), ibw);
LOGGER.info("Successfully saved new metadata");
} catch (TException e) {
- ThriftError.showMessage(me, LOGGER, e,
- "Konnte aktualisierte Metadaten nicht an den Server übermitteln");
+ ThriftError.showMessage(me, LOGGER, e, "Konnte aktualisierte Metadaten nicht an den Server übermitteln");
return false;
}
@@ -674,8 +704,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
ctlImagePermissionConfigurator.getPermissions());
LOGGER.info("Successfully saved new custom permissions");
} catch (TException e) {
- ThriftError.showMessage(me, LOGGER, e,
- "Konnte geänderte Berechtigungen nicht an den Server übermitteln");
+ ThriftError.showMessage(me, LOGGER, e, "Konnte geänderte Berechtigungen nicht an den Server übermitteln");
return false;
}
return true;
@@ -691,10 +720,11 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
Gui.showMessageBox(this, "Ausgewählte Version ist ungültig", MessageType.ERROR, null, null);
return;
}
- // using actionHandler here is not needed, as this ThriftAction works for downloads
+ // using actionHandler here is not needed, as this ThriftAction works for
+ // downloads
// from either the master server or the satellite server
- ThriftActions.initDownload(JOptionPane.getFrameForComponent(this), selected.versionId,
- image.imageName, image.virtId, image.osId, selected.fileSize, null);
+ ThriftActions.initDownload(JOptionPane.getFrameForComponent(this), selected.versionId, image.imageName,
+ image.virtId, image.osId, selected.fileSize, null);
}
/**
@@ -727,15 +757,16 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
/**
- * Extends the expiration date for given image versions to current date
- * plus the user-supplied duration.
+ * Extends the expiration date for given image versions to current date plus the
+ * user-supplied duration.
*
* @param versions to extend the validity of
*/
private void extendVersionExpiry(List<ImageVersionDetails> versions) {
int daysToExtend = -1;
if (versions.size() > 1) {
- // more than one version given, ask the user once and use the value for all versions.
+ // more than one version given, ask the user once and use the value for all
+ // versions.
daysToExtend = ExpiryDateChooser.askFutureExpiryDuration(this, null);
if (daysToExtend == -1)
return;
@@ -749,7 +780,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
if (daysToExtend == -1)
return;
}
- currentExpiryTimeAsDate = DateTimeHelper.addDaysTo(currentExpiryTimeAsDate, daysToExtend);
+ currentExpiryTimeAsDate = DateTimeHelper.addDaysTo(currentExpiryTimeAsDate, daysToExtend);
try {
ThriftManager.getSatClient().setImageVersionExpiry(Session.getSatelliteToken(), img.versionId,
currentExpiryTimeAsDate.getTime() / 1000L);
@@ -760,8 +791,7 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
}
if (count > 0) {
- Gui.showMessageBox(this, "Erfolgreich verlängerte Abbilder: " + count, MessageType.INFO, null,
- null);
+ Gui.showMessageBox(this, "Erfolgreich verlängerte Abbilder: " + count, MessageType.INFO, null, null);
refresh(true);
}
}
@@ -836,7 +866,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
}
txtTags.setText(tagsString);
- // init permissions, remember if the user had admin rights through default permissions
+ // init permissions, remember if the user had admin rights through default
+ // permissions
adminRightsFromDefaultPermissions = image.defaultPermissions.admin;
ctlImagePermissionConfigurator.initPanel(customPermissions, image.defaultPermissions, image.ownerId);
chkDefaultPermAdmin.setSelected(image.defaultPermissions.admin);
@@ -908,11 +939,14 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
win.setVisible(true);
}
- /* *******************************************************************************
+ /*
+ * *****************************************************************************
+ * **
*
* Dialog class overrides
*
- * *******************************************************************************
+ * *****************************************************************************
+ * **
*/
@SuppressWarnings("deprecation")
@Override
@@ -924,11 +958,14 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
super.show();
}
- /* *******************************************************************************
+ /*
+ * *****************************************************************************
+ * **
*
* UIFeedback implementation
*
- * *******************************************************************************
+ * *****************************************************************************
+ * **
*/
@Override
public boolean wantConfirmQuit() {
@@ -945,9 +982,8 @@ public class ImageDetailsWindow extends ImageDetailsWindowLayout implements UiFe
* confirmation if so
*/
private boolean safeClose() {
- if (changeMonitor.isCurrentlyModified()
- && !Gui.showMessageBox(me, "Änderungen werden verworfen, wollen Sie wirklich schließen?",
- MessageType.QUESTION_YESNO, null, null))
+ if (changeMonitor.isCurrentlyModified() && !Gui.showMessageBox(me,
+ "Änderungen werden verworfen, wollen Sie wirklich schließen?", MessageType.QUESTION_YESNO, null, null))
return false;
dispose();
return true;
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 f2609e89..0d5cfd0f 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
@@ -24,7 +24,7 @@ import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.text.StyledEditorKit;
-import javax.swing.JEditorPane;
+import javax.swing.text.html.HTMLEditorKit;
import org.openslx.bwlp.thrift.iface.OperatingSystem;
import org.openslx.bwlp.thrift.iface.ShareMode;
@@ -83,10 +83,10 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
protected final JButton btnItalic;
protected final JButton btnUnderline;
protected final JButton btnWysiwyg;
-
+
protected final JComboBox cbTxtSize;
protected final JComboBox cbTxtColor;
-
+ protected final HTMLEditorKit kit;
protected JTabbedPane pnlTabs;
protected ImagePermissionConfigurator ctlImagePermissionConfigurator;
@@ -113,7 +113,6 @@ 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));
grid.add(txtTitle, 3).expand(true, false).fill(true, false);
grid.nextRow();
@@ -158,7 +157,10 @@ public abstract class ImageDetailsWindowLayout extends JDialog {
// description
txtDescription = new JEditorPane();
+ kit = new HTMLEditorKit();
+ txtDescription.setEditorKit(kit);
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);