From a2227a525f57cda21ddc9cdb0008c26900241c3e Mon Sep 17 00:00:00 2001 From: marcusjrc Date: Sat, 30 Jan 2016 21:44:36 +0000 Subject: [PATCH 1/2] save new files --- SimpleJavaTextEditor.jar | Bin 16787 -> 22220 bytes src/simplejavatexteditor/UI.java | 389 ++++++++++++++++++------------- 2 files changed, 233 insertions(+), 156 deletions(-) diff --git a/SimpleJavaTextEditor.jar b/SimpleJavaTextEditor.jar index ba1d8e6b3343bdf6db8082f21094f550949c658a..ad130fc92f5b83beb1ea743c4992d11db4614ae1 100644 GIT binary patch literal 22220 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 buYY#1x*8OOkO2UI2oFI*YzRMQaRdGj3-qhx literal 16787 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 diff --git a/src/simplejavatexteditor/UI.java b/src/simplejavatexteditor/UI.java index 053932e..08dbd8e 100644 --- a/src/simplejavatexteditor/UI.java +++ b/src/simplejavatexteditor/UI.java @@ -8,12 +8,11 @@ * @copyright Copyright Pierre-Henry SORIA, All Rights Reserved. * @license Apache (http://www.apache.org/licenses/LICENSE-2.0) * @create 2012-05-04 - * @update 2015-09-4 + * @update 2016-30-1 * * - * @modifiedby Achintha Gunasekara - * @modweb http://www.achinthagunasekara.com - * @modemail contact@achinthagunasekara.com + * @modifiedby Marcus Redgrave-Close + * @modemail marcusrc1@hotmail.co.uk */ package simplejavatexteditor; @@ -29,52 +28,62 @@ // Various import java.util.Scanner; import javax.swing.border.Border; +import javax.swing.text.DefaultEditorKit; public class UI extends JFrame implements ActionListener { - + private static final long serialVersionUID = 1L; private final Container container; private final JTextArea textArea; private final JMenuBar menuBar; private final JMenu menuFile, menuEdit, menuFind, menuAbout; - private final JMenuItem newFile, openFile, saveFile, close, clearFile, quickFind, aboutMe, aboutSoftware; + private final JMenuItem newFile, openFile, saveFile, close, cut, copy, paste, clearFile, selectAll, quickFind, + aboutMe, aboutSoftware; private final JToolBar mainToolbar; - JButton newButton, openButton, saveButton, clearButton, quickButton, aboutMeButton, aboutButton, closeButton, spaceButton1, spaceButton2; - - //setup icons - File Menu - private final ImageIcon newIcon = new ImageIcon("icons/new.png"); - private final ImageIcon openIcon = new ImageIcon("icons/open.png"); - private final ImageIcon saveIcon = new ImageIcon("icons/save.png"); - private final ImageIcon closeIcon = new ImageIcon("icons/close.png"); - - //setup icons - Search Menu - private final ImageIcon clearIcon = new ImageIcon("icons/clear.png"); - - //setup icons - Search Menu - private final ImageIcon searchIcon = new ImageIcon("icons/search.png"); - - //setup icons - Help Menu - private final ImageIcon aboutMeIcon = new ImageIcon("icons/about_me.png"); - private final ImageIcon aboutIcon = new ImageIcon("icons/about.png"); - - public UI() { + JButton newButton, openButton, saveButton, clearButton, quickButton, aboutMeButton, aboutButton, closeButton, + spaceButton1, spaceButton2; + private final Action selectAllAction; + + // setup icons - File Menu + private final ImageIcon newIcon = new ImageIcon("icons/new.png"); + private final ImageIcon openIcon = new ImageIcon("icons/open.png"); + private final ImageIcon saveIcon = new ImageIcon("icons/save.png"); + private final ImageIcon closeIcon = new ImageIcon("icons/close.png"); + + // setup icons - Edit Menu + private final ImageIcon clearIcon = new ImageIcon("icons/clear.png"); + private final ImageIcon cutIcon = new ImageIcon("icons/cut.png"); + private final ImageIcon copyIcon = new ImageIcon("icons/copy.png"); + private final ImageIcon pasteIcon = new ImageIcon("icons/paste.png"); + private final ImageIcon selectAllIcon = new ImageIcon("icons/selectall.png"); + + // setup icons - Search Menu + private final ImageIcon searchIcon = new ImageIcon("icons/search.png"); + + // setup icons - Help Menu + private final ImageIcon aboutMeIcon = new ImageIcon("icons/about_me.png"); + private final ImageIcon aboutIcon = new ImageIcon("icons/about.png"); + + public UI() { container = getContentPane(); - + // Set the initial size of the window - setSize(700, 500); - + setSize(700, 500); + // Set the title of the window - setTitle("Undefined | " + SimpleJavaTextEditor.NAME); - + setTitle("Untitled | " + SimpleJavaTextEditor.NAME); + // Set the default close operation (exit when it gets closed) - setDefaultCloseOperation(EXIT_ON_CLOSE); - + setDefaultCloseOperation(EXIT_ON_CLOSE); + // Set a default font for the TextArea - textArea = new JTextArea("", 0,0); - textArea.setFont(new Font("Century Gothic", Font.BOLD, 12)); - + textArea = new JTextArea("", 0, 0); + textArea.setFont(new Font("Century Gothic", Font.BOLD, 12)); + // This is why we didn't have to worry about the size of the TextArea! - getContentPane().setLayout(new BorderLayout()); // the BorderLayout bit makes it fill it automatically + getContentPane().setLayout(new BorderLayout()); // the BorderLayout bit + // makes it fill it + // automatically getContentPane().add(textArea); // Set the Menus @@ -82,161 +91,212 @@ public UI() { menuEdit = new JMenu("Edit"); menuFind = new JMenu("Search"); menuAbout = new JMenu("About"); - + // Set the Items Menu newFile = new JMenuItem("New", newIcon); openFile = new JMenuItem("Open", openIcon); saveFile = new JMenuItem("Save", saveIcon); - close = new JMenuItem("Close", closeIcon); + close = new JMenuItem("Quit", closeIcon); clearFile = new JMenuItem("Clear", clearIcon); quickFind = new JMenuItem("Quick", searchIcon); aboutMe = new JMenuItem("About Me", aboutMeIcon); aboutSoftware = new JMenuItem("About Software", aboutIcon); - + // Set the Menu Bar into the our GUI menuBar = new JMenuBar(); - menuBar.add(menuFile); + menuBar.add(menuFile); menuBar.add(menuEdit); menuBar.add(menuFind); - menuBar.add(menuAbout); + menuBar.add(menuAbout); + + this.setJMenuBar(menuBar); + + // Set Actions: + selectAllAction = new SelectAllAction("Select All", clearIcon, "Select all text", new Integer(KeyEvent.VK_A), + textArea); - this.setJMenuBar(menuBar); - // New File - newFile.addActionListener(this); // Adding an action listener (so we know when it's been clicked). - newFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); // Set a keyboard shortcut + newFile.addActionListener(this); // Adding an action listener (so we + // know when it's been clicked). + newFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK)); // Set + // a + // keyboard + // shortcut menuFile.add(newFile); // Adding the file menu - + // Open File openFile.addActionListener(this); - openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); - menuFile.add(openFile); - + openFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, InputEvent.CTRL_MASK)); + menuFile.add(openFile); + // Save File saveFile.addActionListener(this); saveFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuFile.add(saveFile); - + // Close File - + /* * Along with our "CTRL+F4" shortcut to close the window, we also have - * the default closer, as stated at the beginning of this tutorial. - * this means that we actually have TWO shortcuts to close: - * 1) the default close operation (example, Alt+F4 on Windows) - * 2) CTRL+F4, which we are about to define now: (this one will appear in the label). + * the default closer, as stated at the beginning of this tutorial. this + * means that we actually have TWO shortcuts to close: 1) the default + * close operation (example, Alt+F4 on Windows) 2) CTRL+F4, which we are + * about to define now: (this one will appear in the label). */ - close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.CTRL_MASK)); + close.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, InputEvent.CTRL_MASK)); close.addActionListener(this); menuFile.add(close); + + // Select All Text + selectAll = new JMenuItem(selectAllAction); + selectAll.setText("Select All"); + selectAll.setIcon(selectAllIcon); + selectAll.setToolTipText("Select All"); + selectAll.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK)); + menuEdit.add(selectAll); // Clear File (Code) clearFile.addActionListener(this); - clearFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK)); + clearFile.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK)); menuEdit.add(clearFile); - + + // Cut Text + cut = new JMenuItem(new DefaultEditorKit.CutAction()); + cut.setText("Cut"); + cut.setIcon(cutIcon); + cut.setToolTipText("Cut"); + cut.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); + menuEdit.add(cut); + + // Copy Text + copy = new JMenuItem(new DefaultEditorKit.CopyAction()); + copy.setText("Copy"); + copy.setIcon(copyIcon); + copy.setToolTipText("Copy"); + copy.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); + menuEdit.add(copy); + + // Paste Text + paste = new JMenuItem(new DefaultEditorKit.PasteAction()); + paste.setText("Paste"); + paste.setIcon(pasteIcon); + paste.setToolTipText("Paste"); + paste.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); + menuEdit.add(paste); + // Find Word quickFind.addActionListener(this); quickFind.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK)); menuFind.add(quickFind); - + // About Me aboutMe.addActionListener(this); aboutMe.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0)); menuAbout.add(aboutMe); - + // About Software aboutSoftware.addActionListener(this); aboutSoftware.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0)); menuAbout.add(aboutSoftware); - - mainToolbar = new JToolBar(); - this.add(mainToolbar, BorderLayout.NORTH); - //used to create space between button groups - Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 50); - - newButton = new JButton(newIcon); - newButton.setToolTipText("New"); - newButton.addActionListener(this); - mainToolbar.add(newButton); - mainToolbar.addSeparator(); - - openButton = new JButton(openIcon); - openButton.setToolTipText("Open"); - openButton.addActionListener(this); - mainToolbar.add(openButton); - mainToolbar.addSeparator(); - - saveButton = new JButton(saveIcon); - saveButton.setToolTipText("Save"); - saveButton.addActionListener(this); - mainToolbar.add(saveButton); - mainToolbar.addSeparator(); - - clearButton = new JButton(clearIcon); - clearButton.setToolTipText("Clear All"); - clearButton.addActionListener(this); - mainToolbar.add(clearButton); - mainToolbar.addSeparator(); - - quickButton = new JButton(searchIcon); - quickButton.setToolTipText("Quick Search"); - quickButton.addActionListener(this); - mainToolbar.add(quickButton); - - //create space between button groups - spaceButton1 = new JButton(); - spaceButton1.setBorder(emptyBorder); - mainToolbar.add(spaceButton1); - - aboutMeButton = new JButton(aboutMeIcon); - aboutMeButton.setToolTipText("About Me"); - aboutMeButton.addActionListener(this); - mainToolbar.add(aboutMeButton); - mainToolbar.addSeparator(); - - aboutButton = new JButton(aboutIcon); - aboutButton.setToolTipText("About NotePad PH"); - aboutButton.addActionListener(this); - mainToolbar.add(aboutButton); - - //create space between button groups - spaceButton2 = new JButton(); - spaceButton2.setBorder(emptyBorder); - mainToolbar.add(spaceButton2); - - closeButton = new JButton(closeIcon); - closeButton.setToolTipText("Close"); - closeButton.addActionListener(this); - mainToolbar.add(closeButton); + + mainToolbar = new JToolBar(); + this.add(mainToolbar, BorderLayout.NORTH); + // used to create space between button groups + Border emptyBorder = BorderFactory.createEmptyBorder(0, 0, 0, 50); + + newButton = new JButton(newIcon); + newButton.setToolTipText("New"); + newButton.addActionListener(this); + mainToolbar.add(newButton); + mainToolbar.addSeparator(); + + openButton = new JButton(openIcon); + openButton.setToolTipText("Open"); + openButton.addActionListener(this); + mainToolbar.add(openButton); + mainToolbar.addSeparator(); + + saveButton = new JButton(saveIcon); + saveButton.setToolTipText("Save"); + saveButton.addActionListener(this); + mainToolbar.add(saveButton); + mainToolbar.addSeparator(); + + clearButton = new JButton(clearIcon); + clearButton.setToolTipText("Clear All"); + clearButton.addActionListener(this); + mainToolbar.add(clearButton); + mainToolbar.addSeparator(); + + quickButton = new JButton(searchIcon); + quickButton.setToolTipText("Quick Search"); + quickButton.addActionListener(this); + mainToolbar.add(quickButton); + + // create space between button groups + spaceButton1 = new JButton(); + spaceButton1.setBorder(emptyBorder); + mainToolbar.add(spaceButton1); + + aboutMeButton = new JButton(aboutMeIcon); + aboutMeButton.setToolTipText("About Me"); + aboutMeButton.addActionListener(this); + mainToolbar.add(aboutMeButton); + mainToolbar.addSeparator(); + + aboutButton = new JButton(aboutIcon); + aboutButton.setToolTipText("About NotePad PH"); + aboutButton.addActionListener(this); + mainToolbar.add(aboutButton); + + // create space between button groups + spaceButton2 = new JButton(); + spaceButton2.setBorder(emptyBorder); + mainToolbar.add(spaceButton2); + + closeButton = new JButton(closeIcon); + closeButton.setToolTipText("Quit"); + closeButton.addActionListener(this); + mainToolbar.add(closeButton); } - - public void actionPerformed (ActionEvent e) { + + public void actionPerformed(ActionEvent e) { // If the source of the event was our "close" option - if(e.getSource() == close || e.getSource() == closeButton) + if (e.getSource() == close || e.getSource() == closeButton) this.dispose(); // dispose all resources and close the application - + // If the source was the "new" file option - else if(e.getSource() == newFile || e.getSource() == newButton) { + else if (e.getSource() == newFile || e.getSource() == newButton) { FEdit.clear(textArea); } // If the source was the "open" option - else if(e.getSource() == openFile || e.getSource() == openButton) { - JFileChooser open = new JFileChooser(); // open up a file chooser (a dialog for the user to browse files to open) - int option = open.showOpenDialog(this); // get the option that the user selected (approve or cancel) - + else if (e.getSource() == openFile || e.getSource() == openButton) { + JFileChooser open = new JFileChooser(); // open up a file chooser (a + // dialog for the user to + // browse files to open) + int option = open.showOpenDialog(this); // get the option that the + // user selected (approve or + // cancel) + /* - * NOTE: because we are OPENing a file, we call showOpenDialog~ - * if the user clicked OK, we have "APPROVE_OPTION" - * so we want to open the file + * NOTE: because we are OPENing a file, we call showOpenDialog~ if + * the user clicked OK, we have "APPROVE_OPTION" so we want to open + * the file */ - if(option == JFileChooser.APPROVE_OPTION) { - FEdit.clear(textArea); // clear the TextArea before applying the file contents + if (option == JFileChooser.APPROVE_OPTION) { + FEdit.clear(textArea); // clear the TextArea before applying the + // file contents try { - // create a scanner to read the file (getSelectedFile().getPath() will get the path to the file) + // create a scanner to read the file + // (getSelectedFile().getPath() will get the path to the + // file) Scanner scan = new Scanner(new FileReader(open.getSelectedFile().getPath())); - while (scan.hasNext()) // while there's still something to read - textArea.append(scan.nextLine() + "\n"); // append the line to the TextArea + while (scan.hasNext()) // while there's still something to + // read + textArea.append(scan.nextLine() + "\n"); // append the + // line to + // the + // TextArea } catch (Exception ex) { // catch any exceptions, and... // ...write to the debug console System.out.println(ex.getMessage()); @@ -244,17 +304,17 @@ else if(e.getSource() == openFile || e.getSource() == openButton) { } } // If the source of the event was the "save" option - else if(e.getSource() == saveFile || e.getSource() == saveButton) { + else if (e.getSource() == saveFile || e.getSource() == saveButton) { // Open a file chooser - JFileChooser fileChoose = new JFileChooser(); + JFileChooser fileChoose = new JFileChooser(); // Open the file, only this time we call - int option = fileChoose.showSaveDialog(this); - + int option = fileChoose.showSaveDialog(this); + /* - * ShowSaveDialog instead of showOpenDialog - * if the user clicked OK (and not cancel) + * ShowSaveDialog instead of showOpenDialog if the user clicked OK + * (and not cancel) */ - if(option == JFileChooser.APPROVE_OPTION) { + if (option == JFileChooser.APPROVE_OPTION) { try { File file = fileChoose.getSelectedFile(); // Set the new title of the window @@ -262,34 +322,51 @@ else if(e.getSource() == saveFile || e.getSource() == saveButton) { // Create a buffered writer to write to a file BufferedWriter out = new BufferedWriter(new FileWriter(file.getPath())); // Write the contents of the TextArea to the file - out.write(textArea.getText()); + out.write(textArea.getText()); // Close the file stream - out.close(); + out.close(); } catch (Exception ex) { // again, catch any exceptions and... // ...write to the debug console System.out.println(ex.getMessage()); } } } - + // Clear File (Code) - if(e.getSource() == clearFile || e.getSource() == clearButton) { + if (e.getSource() == clearFile || e.getSource() == clearButton) { FEdit.clear(textArea); } - // Find - if(e.getSource() == quickFind || e.getSource() == quickButton) { + // Find + if (e.getSource() == quickFind || e.getSource() == quickButton) { new Find(textArea); - } - + } + // About Me - else if(e.getSource() == aboutMe || e.getSource() == aboutMeButton) { + else if (e.getSource() == aboutMe || e.getSource() == aboutMeButton) { new About().me(); } // About Software - else if(e.getSource() == aboutSoftware || e.getSource() == aboutButton) { + else if (e.getSource() == aboutSoftware || e.getSource() == aboutButton) { new About().software(); } - + } - + + class SelectAllAction extends AbstractAction { + /** + * Used for Select All function + */ + private static final long serialVersionUID = 1L; + + public SelectAllAction(String text, ImageIcon icon, String desc, Integer mnemonic, final JTextArea textArea) { + super(text, icon); + putValue(SHORT_DESCRIPTION, desc); + putValue(MNEMONIC_KEY, mnemonic); + } + + public void actionPerformed(ActionEvent e) { + textArea.selectAll(); + } + } + } \ No newline at end of file From adf8d452879d49f7521b08f19cce8a5d08b9e22a Mon Sep 17 00:00:00 2001 From: marcusjrc Date: Sat, 30 Jan 2016 21:50:54 +0000 Subject: [PATCH 2/2] save new files --- .classpath | 7 +++++++ .project | 17 +++++++++++++++++ .../SimpleJavaTextEditor.jar | Bin icons/copy.png | Bin 0 -> 363 bytes icons/cut.png | Bin 0 -> 2208 bytes icons/paste.png | Bin 0 -> 468 bytes icons/selectall.png | Bin 0 -> 807 bytes 7 files changed, 24 insertions(+) create mode 100644 .classpath create mode 100644 .project rename SimpleJavaTextEditor.jar => icons/SimpleJavaTextEditor.jar (100%) create mode 100644 icons/copy.png create mode 100644 icons/cut.png create mode 100644 icons/paste.png create mode 100644 icons/selectall.png diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..42da157 --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..eaf4e31 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + notepad + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/SimpleJavaTextEditor.jar b/icons/SimpleJavaTextEditor.jar similarity index 100% rename from SimpleJavaTextEditor.jar rename to icons/SimpleJavaTextEditor.jar diff --git a/icons/copy.png b/icons/copy.png new file mode 100644 index 0000000000000000000000000000000000000000..97df8a94a2ef7a2bfb281cbfbd06b0e2ac4a5f07 GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIEX7WqAsj$Z!;#Vf4nJ zu)P6cM!8Z8Q;?1l*NBqf{Irtt#G+J&^73-M%)IR4odGNtobK0Z`s-7;WweVqAO>!hr*ATCE`|J{CNwNKROzo zEeWl6zA7zs`wNptgY`$&o~6H73*Y9h7CRth;U%@awOBzgw`)Pd?yv*vCO`fo)5yOr ziv4e#bOn1G#}bxZH`j>lXHtK#mUY&=V&0&8A!|=g6578x`gwTtZTnW6@V*~?eE)cI zKL1k4oT0WQM!YQi-!HWl%Ob`8aj!7{;c~NZ{sHd;|K9QKTb9F-v)pgq`@hGZrpBX$|{an^LB{Ts5 DsP2vE literal 0 HcmV?d00001 diff --git a/icons/cut.png b/icons/cut.png new file mode 100644 index 0000000000000000000000000000000000000000..d0631b1a60f55c6e180d5c8889f914cfbbaf2d4d GIT binary patch literal 2208 zcmaJ@dpwl+8lPRN$!$4giaNcfMH}X3+=dy(%n+J!4U<%Jd1Yee9WyV+xU8%s(d7uo zioz)sHn!Za*1+kXWF#qkK??b&-=c==lA)3zt8h~p6?&O1AZ(| zT`dzW1OlP!wV58E`ma&H$mObU%lJN?I)E9Wa3B-`$8#hgg35=uAmAnB>;?ls4nHBL z4Rk>uGyp+RC>+Y%LgGO}3`dQ@$b@1Q8-Z|fm5DjLC=dp?;BJA4jGnB&fd&M8GCIVL ziDQasV5DHPTmlBlSwTE`6wir|cBKF=GLlL_2*MmdCX5zINis6}lP*cMR&Qg`z$XYC zMMnQwR4CIApg|H4u*2YNcsP3;V2{V(ZHW#J4%PqxhsR-Y1T3ClgLfd=5=b~4@cBWj zvPt+6qyW0d=Ul3YjE;n1F$s%}kB`U1+hQQeZY}@r7>mc?)JIwbGMWD$DinS} zOW^?UuX_Kdurw$^3}OR7DHJQ=sRkFZL7hrWqDepw3`v3@D0;DrevuFiNh2XKKnt`3 zLIff{6fgaRW->`$A}P!f@jx#+8Li@D1Oh&ZNcF(ssB}jLgNnoB88|9|L3H#W5*!Is zD$U*9X^~5Zc(FoI1TS*=e{r3bJv*XBxGQ_l3=sJObbF|nC_ z@9E)-rZac9m0t>}&hshi&LFa1r2Y2(=G?>Ub7p?0W}Y?Xt}dQMkLsmD#359MC#IWu0;=bADh~ zStCWEu~(1TtMQAVJ$gRTfD)5($_3qWL4UIYx6Vtv|c<(EUkA}OIUS}Hya^)X1*_X}rtKjK9x;^VHFLd{Jhbi;V zg{|G8&wWBn3x7f$IvMr81R8X_OiH>h+9UxJhC&77AuFHM#w?%JuA7@sm;m7Vy@m0Q zPFF1mIuvUjqrU38Gj!$Fcw(y2yc47e!<*a56!yYY0pq)Zo3WkMd#6)t=7@~6=Wl4c zWTWO6^1eSXm3|sYz6SL|5z1X<0-fphTQjGefAgvQ-mQZD(bD`9vRi`y`&F9jpIFe- z8Fd*4t9Zftck5ixan-tBY2NDdXM#Xl#9vZD%SsHMt`-pK=TKt`sy> z&ycp53eKWREGi2V8ra`WukBY@MK`W8HrdB+X5BZQwKHUd>4alpMbEcq*G<3GOJk1x z_|8mz!kxqme_>wNbKH(Nb1y?#{V|ydM~x6?g#dZJ7(E; zD~+1>J{I*E{4PsY8r!#kp`=LAQ z(cnu|q;`n@@PP!EZb}v>CKS1kH?nXpC@IKmu=v+7EywaFA))cFt_e5huSRm8EgNjy zasF8FtGTI$m+kM$NTO7dB~!|3q#n`#m!@6S(Ky=k>I+vga}vc`8*a3T3SK=*UIC?a zbcOiErM@~eRAlM!Z}a+widt>k3FL>@zfXma^})FszGZF0<~_Danw}j7Ypl@WZgSLZ zPx|5WxzT&9x^=Vt^J}l}S2owDbl2+E_D0Byzkc|QroYyBQLq{OW9)tkC`0A!Tsh)H z4|;Q!x5vrqVr|`4`-efd76vZ)Ev(@1Z_-Ez;nUKsR>kbP`M#VcV7`^##AuyukQ&#= z|1D5)cI3qN^QR_JLHHG+=_iBV0N~62WVh86#qO`D*+uU37G1jjvluGpF8HK=g;<%L Vvm0mdT3>x<@M5s&Ke_Kp`vc1oqa*+T literal 0 HcmV?d00001 diff --git a/icons/paste.png b/icons/paste.png new file mode 100644 index 0000000000000000000000000000000000000000..7e897ef211dc483fcc2411c0edd3e49ea5167407 GIT binary patch literal 468 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%0wnVu_`U#AOiAAEE)4(M`_JqL@;D1TB8wRq zf>=SAQD$wS5J<4Bz%d<2gY`13;&yjpU|?kQba4!^IQ{mDy&qGc!10g#^*oN;Dl!L! zq=ki|Y+LU&R%aw8o#kEAp%&9Ht<9~&tSw`OCQqbdWSMSEBunFs&)#uH`zt@sJ+tT0 z#&v77^_|Y^ZJyb4R%_LY6&kxg=zUWB^eo2mqo62UZ6>1m=XKOC;@bq7?aNXo7zBV&e3f*I!S1f1w$touKLQ4JJiIP*mkOE7K(=4{FKbJO57Tb TPq$J7YGCkm^>bP0l+XkKq4%zD literal 0 HcmV?d00001 diff --git a/icons/selectall.png b/icons/selectall.png new file mode 100644 index 0000000000000000000000000000000000000000..6d217f2acb02b229372f9d79935222f9e45d1b1b GIT binary patch literal 807 zcmV+?1K9kDP)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO2XskIMF-ji1QZl3KdL>{0008UNkl7j)dq~-&K7Sn^c zDh;+YG|eX2%#4TF^(z{c)`KrB%&_eIc%FCWnH9zu!w#3^AC%k@a`x6ZJ0(ggtpO;P z9L|kB+7Xc4bQ=H&1mzWn^J9;<9V9)k34o!s@OtU(wu7V)g3lDc)=O{OTDLVX6bfWA z8K$PD*xcOg2(kQ;`1ZwCj~?DiA%yTBfQg9-%H=Y~7^2ZABO@b!zlF;y4(D$_#;to8 zV=%^0EEcI$Di~uBLQpIg|KOaoYk`2u>U*x=f7Y4`K{lI3YfU^J_pMu9UF{4p#`t!1 z_qIOn>K)+ey=y$VbCsJHkE684bzQRAEC8dUqr_q{0P^{Khr{@lgs$EJE~k#u-4~}^ za=4pbVxwAT@1EUAA(@+-Ln%dne?L7vJtPtd0OsfCf6uP&-Z5 zP)Y$XJv~i2on~@!64!M*_QjGyP^~o(0-|A?YOTRQ%;wVRgS=cSa^%1sqLyZHaS^2y z$z;-R_*SLUX==3^xm=E+p`jlk!C(M@NXSNM-P%R923i|#To@tNwVQnI1@(HJa5zjV zmHJ^3$8pH#^FM{iupK051qcKrRvH`}PtFTFlPQqLgBIc(|<{i9`Zp zT9&qp8PRMiBjuOKP)gHiDzw(@iiG^k@;ndQw*M+1#rM~*F$S-xumS<36x))*Z6SU# l@6;W?-GG1hBk|urJ^@*SVC9p!;OGDV002ovPDHLkV1l@x} literal 0 HcmV?d00001