Neue Icons hinzugefügt, Anleitung weiter geschrieben
This commit is contained in:
@@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.Border;
|
||||
import javax.swing.border.MatteBorder;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionListener;
|
||||
@@ -21,6 +22,11 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static de.srsoftware.belegscanner.Application.t;
|
||||
import static java.awt.Color.black;
|
||||
import static javax.swing.BorderFactory.createCompoundBorder;
|
||||
import static javax.swing.BorderFactory.createEmptyBorder;
|
||||
import static javax.swing.BorderFactory.createLineBorder;
|
||||
import static javax.swing.BorderFactory.createMatteBorder;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -29,13 +35,15 @@ import static de.srsoftware.belegscanner.Application.t;
|
||||
*
|
||||
*/
|
||||
public class DocTable extends JPanel{
|
||||
|
||||
private static final Border BOTTOM_LINE = createMatteBorder(0, 0, 1, 0, black);
|
||||
private static final Border IMAGE_BUTTON = createCompoundBorder(createLineBorder(black),createEmptyBorder(5,5,5,5));
|
||||
private static final Logger LOG = LoggerFactory.getLogger(DocTable.class);
|
||||
private static final int IMAGE_HEIGHT = 32;
|
||||
private static FilenameFilter PAGES = (dir,name) -> name.toLowerCase().endsWith("pdf") && name.toLowerCase().contains("page");
|
||||
private static int rowCounter = 0;
|
||||
private static Font btnFont = new Font("Arial", Font.PLAIN, 28);
|
||||
private final Worker worker;
|
||||
private Image openDir, joinFiles,preview;
|
||||
private Image openDir, joinFiles,preview,finish,trash;
|
||||
|
||||
private List<Project> projects = new ArrayList<>();
|
||||
|
||||
@@ -69,8 +77,8 @@ public class DocTable extends JPanel{
|
||||
buttons.add(button(openDir,t("open folder"),ev -> project.openDir()));
|
||||
buttons.add(joinButton = button(joinFiles,t("join PDFs"),ev -> worker.join(project)));
|
||||
buttons.add(button(preview,t("display preview"),ev -> worker.preview(project.lastPage())));
|
||||
buttons.add(button("✓",t("done"),ev -> drop(this)));
|
||||
buttons.add(button("❌",t("drop last page"),ev -> worker.preview(project.dropLastPage().lastPage())));
|
||||
buttons.add(button(trash,t("drop last page"),ev -> worker.preview(project.dropLastPage().lastPage())));
|
||||
buttons.add(button(finish,t("done"),ev -> drop(this)));
|
||||
|
||||
constraints.gridx = 2;
|
||||
add(buttons,constraints);
|
||||
@@ -122,51 +130,36 @@ public class DocTable extends JPanel{
|
||||
constraints.insets = new Insets(3, 10, 3, 10);
|
||||
constraints.gridy = 0;
|
||||
constraints.gridx = 0;
|
||||
MatteBorder border = BorderFactory.createMatteBorder(0, 0, 1, 0, Color.black);
|
||||
JLabel ordner = new JLabel(t("Directory"),SwingConstants.CENTER);
|
||||
ordner.setBorder(border);
|
||||
ordner.setBorder(BOTTOM_LINE);
|
||||
add(ordner,constraints);
|
||||
constraints.gridx = 1;
|
||||
JLabel status = new JLabel(t("State"),SwingConstants.CENTER);
|
||||
status.setBorder(border);
|
||||
status.setBorder(BOTTOM_LINE);
|
||||
add(status,constraints);
|
||||
constraints.gridx = 2;
|
||||
JLabel actions = new JLabel(t("Actions"),SwingConstants.CENTER);
|
||||
actions.setBorder(border);
|
||||
actions.setBorder(BOTTOM_LINE);
|
||||
add(actions,constraints);
|
||||
|
||||
|
||||
try {
|
||||
openDir = ImageIO.read(getClass().getResource("/img/open-dir.png")).getScaledInstance(41,32,Image.SCALE_SMOOTH);
|
||||
} catch (IOException e) {
|
||||
openDir = null;
|
||||
}
|
||||
try {
|
||||
joinFiles = ImageIO.read(getClass().getResource("/img/join.png")).getScaledInstance(32,32,Image.SCALE_SMOOTH);
|
||||
} catch (IOException e) {
|
||||
joinFiles = null;
|
||||
}
|
||||
try {
|
||||
preview = ImageIO.read(getClass().getResource("/img/preview.png")).getScaledInstance(32,32,Image.SCALE_SMOOTH);
|
||||
} catch (IOException e) {
|
||||
preview = null;
|
||||
}
|
||||
openDir = load("open-dir.png").orElse(null);
|
||||
joinFiles = load("join.png").orElse(null);
|
||||
preview = load("preview.png").orElse(null);
|
||||
finish = load("finish.png").orElse(null);
|
||||
trash = load("trash.png").orElse(null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* helper method to create a button with given label, tooltip and action listener
|
||||
* @param label
|
||||
* @param tooltip
|
||||
* @param listener
|
||||
* @return
|
||||
*/
|
||||
private static JButton button(String label, String tooltip, ActionListener listener) {
|
||||
JButton btn = new JButton(label);
|
||||
btn.setFont(btnFont);
|
||||
btn.setToolTipText(tooltip);
|
||||
btn.addActionListener(listener);
|
||||
return btn;
|
||||
private static Optional<Image> load(String name){
|
||||
try {
|
||||
var path = String.join("/","","img",name);
|
||||
BufferedImage large = ImageIO.read(DocTable.class.getResource(path));
|
||||
double height = large.getHeight();
|
||||
var width = large.getWidth();
|
||||
double factor = IMAGE_HEIGHT / height;
|
||||
return Optional.of(large.getScaledInstance((int)(width*factor),IMAGE_HEIGHT,Image.SCALE_SMOOTH));
|
||||
} catch (IOException e) {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
private static JButton button(Image image, String tooltip, ActionListener listener) {
|
||||
@@ -174,6 +167,7 @@ public class DocTable extends JPanel{
|
||||
if (image != null) btn.setIcon(new ImageIcon(image));
|
||||
btn.setToolTipText(tooltip);
|
||||
btn.addActionListener(listener);
|
||||
btn.setBorder(IMAGE_BUTTON);
|
||||
return btn;
|
||||
}
|
||||
|
||||
|
||||
374
src/main/resources/img/trash.dia
Normal file
374
src/main/resources/img/trash.dia
Normal file
@@ -0,0 +1,374 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<dia:diagram xmlns:dia="http://www.lysator.liu.se/~alla/dia/">
|
||||
<dia:diagramdata>
|
||||
<dia:attribute name="background">
|
||||
<dia:color val="#ffffffff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pagebreak">
|
||||
<dia:color val="#000099ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="paper">
|
||||
<dia:composite type="paper">
|
||||
<dia:attribute name="name">
|
||||
<dia:string>#A4#</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="tmargin">
|
||||
<dia:real val="2.8222000598907471"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="bmargin">
|
||||
<dia:real val="2.8222000598907471"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="lmargin">
|
||||
<dia:real val="2.8222000598907471"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="rmargin">
|
||||
<dia:real val="2.8222000598907471"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="is_portrait">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="scaling">
|
||||
<dia:real val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="fitto">
|
||||
<dia:boolean val="false"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="grid">
|
||||
<dia:composite type="grid">
|
||||
<dia:attribute name="dynamic">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="width_x">
|
||||
<dia:real val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="width_y">
|
||||
<dia:real val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="visible_x">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="visible_y">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:composite type="color"/>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#d8e5e5ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="guides">
|
||||
<dia:composite type="guides">
|
||||
<dia:attribute name="hguides"/>
|
||||
<dia:attribute name="vguides"/>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="display">
|
||||
<dia:composite type="display">
|
||||
<dia:attribute name="antialiased">
|
||||
<dia:boolean val="false"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="snap-to-grid">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="snap-to-object">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show-grid">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show-connection-points">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:diagramdata>
|
||||
<dia:layer name="Hintergrund" visible="true" connectable="true" active="true">
|
||||
<dia:object type="Flowchart - Ellipse" version="0" id="O0">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="15,26"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="14.9,25.9;25.1,30.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_corner">
|
||||
<dia:point val="15,26"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_width">
|
||||
<dia:real val="9.9999999999999982"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_height">
|
||||
<dia:real val="4"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="border_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="inner_color">
|
||||
<dia:color val="#e5e5e5ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="padding">
|
||||
<dia:real val="0.35355339059327379"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="text">
|
||||
<dia:composite type="text">
|
||||
<dia:attribute name="string">
|
||||
<dia:string>##</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="font">
|
||||
<dia:font family="sans" style="0" name="Helvetica"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="height">
|
||||
<dia:real val="0.80000000000000004"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pos">
|
||||
<dia:point val="20,28.1941"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#ff0000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="alignment">
|
||||
<dia:enum val="1"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
<dia:object type="Flowchart - Box" version="0" id="O1">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="15,23"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="14.9,22.9;25.1,28.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_corner">
|
||||
<dia:point val="15,23"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_width">
|
||||
<dia:real val="10"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_height">
|
||||
<dia:real val="5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="border_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="border_color">
|
||||
<dia:color val="#e5e5e5ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="inner_color">
|
||||
<dia:color val="#e5e5e5ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="padding">
|
||||
<dia:real val="0.5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="text">
|
||||
<dia:composite type="text">
|
||||
<dia:attribute name="string">
|
||||
<dia:string>##</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="font">
|
||||
<dia:font family="sans" style="0" name="Helvetica"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="height">
|
||||
<dia:real val="0.80000000000000004"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pos">
|
||||
<dia:point val="20,25.6941"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#000000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="alignment">
|
||||
<dia:enum val="1"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
<dia:object type="Flowchart - Ellipse" version="0" id="O2">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="15,21"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="14.9,20.9;25.1,25.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_corner">
|
||||
<dia:point val="15,21"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_width">
|
||||
<dia:real val="9.9999999999999982"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_height">
|
||||
<dia:real val="4"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="border_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="inner_color">
|
||||
<dia:color val="#cbd0deff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="padding">
|
||||
<dia:real val="0.35355339059327379"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="text">
|
||||
<dia:composite type="text">
|
||||
<dia:attribute name="string">
|
||||
<dia:string>##</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="font">
|
||||
<dia:font family="sans" style="0" name="Helvetica"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="height">
|
||||
<dia:real val="0.80000000000000004"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pos">
|
||||
<dia:point val="20,23.1941"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#ff0000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="alignment">
|
||||
<dia:enum val="1"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
<dia:object type="Flowchart - Parallelogram" version="0" id="O3">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="17,19"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="16.9,18.9;23.1,24.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_corner">
|
||||
<dia:point val="17,19"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_width">
|
||||
<dia:real val="6"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="elem_height">
|
||||
<dia:real val="5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="border_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="inner_color">
|
||||
<dia:color val="#800080ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="shear_angle">
|
||||
<dia:real val="70"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="padding">
|
||||
<dia:real val="0.5"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="text">
|
||||
<dia:composite type="text">
|
||||
<dia:attribute name="string">
|
||||
<dia:string>##</dia:string>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="font">
|
||||
<dia:font family="sans" style="0" name="Helvetica"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="height">
|
||||
<dia:real val="0.80000000000000004"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="pos">
|
||||
<dia:point val="20,21.6941"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="color">
|
||||
<dia:color val="#000000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="alignment">
|
||||
<dia:enum val="1"/>
|
||||
</dia:attribute>
|
||||
</dia:composite>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
<dia:object type="Standard - Line" version="0" id="O4">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="15,23"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="14.9,22.9;15.1,28.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="conn_endpoints">
|
||||
<dia:point val="15,23"/>
|
||||
<dia:point val="15,28"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="numcp">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="line_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:connections>
|
||||
<dia:connection handle="0" to="O1" connection="0"/>
|
||||
<dia:connection handle="1" to="O0" connection="8"/>
|
||||
</dia:connections>
|
||||
</dia:object>
|
||||
<dia:object type="Standard - Line" version="0" id="O5">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="25,23"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="24.9,22.9;25.1,28.1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="conn_endpoints">
|
||||
<dia:point val="25,23"/>
|
||||
<dia:point val="25,28"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="numcp">
|
||||
<dia:int val="1"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="line_width">
|
||||
<dia:real val="0.20000000298023224"/>
|
||||
</dia:attribute>
|
||||
<dia:connections>
|
||||
<dia:connection handle="0" to="O1" connection="4"/>
|
||||
<dia:connection handle="1" to="O0" connection="0"/>
|
||||
</dia:connections>
|
||||
</dia:object>
|
||||
<dia:object type="Standard - Polygon" version="0" id="O6">
|
||||
<dia:attribute name="obj_pos">
|
||||
<dia:point val="19,25.495"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="obj_bb">
|
||||
<dia:rectangle val="17.9293,25.4243;22.0707,29.5657"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="poly_points">
|
||||
<dia:point val="19,25.495"/>
|
||||
<dia:point val="20,26.495"/>
|
||||
<dia:point val="21,25.495"/>
|
||||
<dia:point val="22,26.495"/>
|
||||
<dia:point val="21,27.495"/>
|
||||
<dia:point val="22,28.495"/>
|
||||
<dia:point val="21,29.495"/>
|
||||
<dia:point val="20,28.495"/>
|
||||
<dia:point val="19,29.495"/>
|
||||
<dia:point val="18,28.495"/>
|
||||
<dia:point val="19,27.495"/>
|
||||
<dia:point val="18,26.495"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="line_color">
|
||||
<dia:color val="#ff0000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="inner_color">
|
||||
<dia:color val="#ff0000ff"/>
|
||||
</dia:attribute>
|
||||
<dia:attribute name="show_background">
|
||||
<dia:boolean val="true"/>
|
||||
</dia:attribute>
|
||||
</dia:object>
|
||||
</dia:layer>
|
||||
</dia:diagram>
|
||||
BIN
src/main/resources/img/trash.png
Normal file
BIN
src/main/resources/img/trash.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
@@ -15,6 +15,7 @@ Directory : Ordner
|
||||
display preview : Vorschau anzeigen
|
||||
drop file : Datei löschen
|
||||
done : fertig
|
||||
drop last page : letzte Seite verwerfen
|
||||
Error code\: {} for {} : Fehlercode: {} für {}
|
||||
February : Februar
|
||||
File "{}" does already exist and would be overwritten. Continue? : Die Datei „{}“ existiert bereits. Soll sie überschrieben werden?
|
||||
@@ -25,7 +26,7 @@ help : Hilfe
|
||||
Improve brightness : Helligkeit verbessern
|
||||
January : Januar
|
||||
Joining PDFs… : Verbinde PDFs…
|
||||
join PDFs : PDFs zusammenführen
|
||||
join PDFs : PDFs binden
|
||||
July : Juli
|
||||
Language support : Sprach-Unterstützung
|
||||
May : Mai
|
||||
|
||||
Reference in New Issue
Block a user