From 2d4747d8927c2db166f696ee47159e95001af169 Mon Sep 17 00:00:00 2001 From: Snowyfox Date: Fri, 27 May 2022 08:28:18 -0400 Subject: [PATCH] Added custom Ocean theme. Changed ComposeWindow to have tabs. --- ComposeWindow.java | 238 ++++++++++++++++++++------------ JKomasto.java | 66 +++++++++ graphics/Federated.xcf | Bin graphics/Flags.xcf | Bin graphics/Home.xcf | Bin graphics/Hourglass.xcf | Bin graphics/Kettle.xcf | Bin graphics/boostToggled.png | Bin graphics/boostUntoggled.png | Bin graphics/button.png | Bin graphics/disabledOverlay.png | Bin graphics/favouriteToggled.png | Bin graphics/favouriteUntoggled.png | Bin graphics/federated.png | Bin graphics/home.png | Bin graphics/kettle.png | Bin graphics/miscToggled.png | Bin graphics/miscUntoggled.png | Bin graphics/nextToggled.png | Bin 3644 -> 3704 bytes graphics/nextUntoggled.png | Bin 3645 -> 3703 bytes graphics/postWindow.png | Bin graphics/prevToggled.png | Bin 3762 -> 3700 bytes graphics/prevUntoggled.png | Bin 3762 -> 3700 bytes graphics/ref1.png | Bin graphics/replyToggled.png | Bin graphics/replyUntoggled.png | Bin graphics/selectedOverlay.png | Bin graphics/test1.png | Bin graphics/test2.png | Bin graphics/test3.png | Bin graphics/test4.png | Bin 31 files changed, 212 insertions(+), 92 deletions(-) mode change 100644 => 100755 graphics/Federated.xcf mode change 100644 => 100755 graphics/Flags.xcf mode change 100644 => 100755 graphics/Home.xcf mode change 100644 => 100755 graphics/Hourglass.xcf mode change 100644 => 100755 graphics/Kettle.xcf mode change 100644 => 100755 graphics/boostToggled.png mode change 100644 => 100755 graphics/boostUntoggled.png mode change 100644 => 100755 graphics/button.png mode change 100644 => 100755 graphics/disabledOverlay.png mode change 100644 => 100755 graphics/favouriteToggled.png mode change 100644 => 100755 graphics/favouriteUntoggled.png mode change 100644 => 100755 graphics/federated.png mode change 100644 => 100755 graphics/home.png mode change 100644 => 100755 graphics/kettle.png mode change 100644 => 100755 graphics/miscToggled.png mode change 100644 => 100755 graphics/miscUntoggled.png mode change 100644 => 100755 graphics/nextToggled.png mode change 100644 => 100755 graphics/nextUntoggled.png mode change 100644 => 100755 graphics/postWindow.png mode change 100644 => 100755 graphics/prevToggled.png mode change 100644 => 100755 graphics/prevUntoggled.png mode change 100644 => 100755 graphics/ref1.png mode change 100644 => 100755 graphics/replyToggled.png mode change 100644 => 100755 graphics/replyUntoggled.png mode change 100644 => 100755 graphics/selectedOverlay.png mode change 100644 => 100755 graphics/test1.png mode change 100644 => 100755 graphics/test2.png mode change 100644 => 100755 graphics/test3.png mode change 100644 => 100755 graphics/test4.png diff --git a/ComposeWindow.java b/ComposeWindow.java index a373b05..1fe6807 100644 --- a/ComposeWindow.java +++ b/ComposeWindow.java @@ -10,6 +10,11 @@ import javax.swing.JSeparator; import javax.swing.Box; import javax.swing.BorderFactory; import javax.swing.JOptionPane; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.UIManager; +import javax.swing.JToggleButton; +import javax.swing.ButtonGroup; import javax.swing.border.Border; import java.awt.GridLayout; import java.awt.BorderLayout; @@ -22,8 +27,13 @@ import java.awt.Cursor; import java.awt.Color; import java.awt.Font; import java.awt.Insets; +import java.awt.FlowLayout; +import java.awt.Component; +import java.awt.Container; import javax.swing.event.CaretListener; import javax.swing.event.CaretEvent; +import java.util.List; +import java.util.ArrayList; import cafe.biskuteri.hinoki.Tree; import java.io.IOException; @@ -48,6 +58,9 @@ ComposeWindow extends JFrame { private AttachmentsComponent attachmentsDisplay; + private JTabbedPane + tabs; + // ---%-@-%--- public synchronized void @@ -117,22 +130,6 @@ ComposeWindow extends JFrame { contentsDisplay.setSubmitting(false); } - public void - showContentsPage() - { - setContentPane(contentsDisplay); - revalidate(); - contentsDisplay.requestFocusInWindow(); - } - - public void - showAttachmentsPage() - { - setContentPane(attachmentsDisplay); - revalidate(); - attachmentsDisplay.requestFocusInWindow(); - } - // - -%- - private synchronized void @@ -173,17 +170,22 @@ ComposeWindow extends JFrame { this.primaire = primaire; this.api = primaire.getMastodonApi(); - final Dimension SZ = new Dimension(360, 270); + Dimension sz = new Dimension(360, 270); - getContentPane().setPreferredSize(SZ); - pack(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); contentsDisplay = new ComposeComponent(this); attachmentsDisplay = new AttachmentsComponent(this); newComposition(); - showContentsPage(); + tabs = new JTabbedPane(); + contentsDisplay.setPreferredSize(sz); + tabs.addTab("Text", contentsDisplay); + tabs.addTab("Media", attachmentsDisplay); + + setBackground((Color)UIManager.get("TabbedPane.tabAreaBackground")); + setContentPane(tabs); + pack(); setIconImage(primaire.getProgramIcon()); } @@ -331,7 +333,8 @@ implements ActionListener, CaretListener, KeyListener { actionPerformed(ActionEvent eA) { if (eA.getSource() == showAttachmentsPage) - primaire.showAttachmentsPage(); + //primaire.showAttachmentsPage(); + ; if (eA.getSource() == submit) primaire.submit(); @@ -343,8 +346,14 @@ implements ActionListener, CaretListener, KeyListener { public void keyPressed(KeyEvent eK) { - boolean esc = eK.getKeyCode() == KeyEvent.VK_ESCAPE; - if (esc) showAttachmentsPage.requestFocusInWindow(); + boolean esc = eK.getKeyCode() == KeyEvent.VK_ESCAPE; + if (esc) + { + Container fcr = getFocusCycleRootAncestor(); + fcr.getFocusTraversalPolicy() + .getComponentAfter(fcr, text) + .requestFocusInWindow(); + } else updateTextLength(); } @@ -420,11 +429,11 @@ implements ActionListener, CaretListener, KeyListener { submit = new JButton("Submit"); submit.addActionListener(this); - showAttachmentsPage = new JButton("Media"); + showAttachmentsPage = new JButton("Media"); showAttachmentsPage.addActionListener(this); Box bottom = Box.createHorizontalBox(); - bottom.add(showAttachmentsPage); + //bottom.add(showAttachmentsPage); bottom.add(Box.createGlue()); bottom.add(textLength); bottom.add(Box.createHorizontalStrut(12)); @@ -459,22 +468,22 @@ implements ActionListener { // - -%- - - private Attachment[] - working; + private List + working; - private JButton - attachment1, - attachment2, - attachment3, - attachment4; + private JPanel + selections; + + private ButtonGroup + selectionsGroup; + + private JButton + add; private JButton delete, revert; - private JButton - close; - private JLabel descriptionLabel; @@ -483,14 +492,54 @@ implements ActionListener { // ---%-@-%--- + private void + updateButtons() + { + selections.removeAll(); + + Dimension sz = add.getPreferredSize(); + + int i = 1; + for (Attachment attachment: working) + { + JToggleButton button = new JToggleButton(); + button.setPreferredSize(sz); + button.setMargin(add.getMargin()); + button.setText(Integer.toString(i++)); + selections.add(button); + } + if (working.size() < 4) selections.add(add); + + int bw = sz.width; + int hgap = 4; + int count = Math.min(1 + working.size(), 4); + int w = count * bw + (count - 1) * hgap; + int h = bw; + selections.setPreferredSize(new Dimension(w, h)); + selections.setMaximumSize(new Dimension(w, h)); + } + public void actionPerformed(ActionEvent eA) { Object src = eA.getSource(); - if (src == close) + if (false) + { + // Clicked on filled attachment button. + } + + if (src == add) + { + // Invoke file picker. Try to get file. + // Try to upload file. So on. + // Then add to working. + working.add(new Attachment()); + updateButtons(); + } + + if (src == delete) { - primaire.showContentsPage(); return; } @@ -498,11 +547,6 @@ implements ActionListener { { return; } - - if (src == delete) - { - return; - } } // ---%-@-%--- @@ -514,79 +558,89 @@ implements ActionListener { Border b1 = BorderFactory.createEmptyBorder(8, 8, 8, 8); Border b2 = BorderFactory.createEmptyBorder(4, 4, 4, 4); Border b3 = BorderFactory.createLineBorder(Color.GRAY); - Border bc = BorderFactory.createCompoundBorder(b3, b2); + Border b4 = BorderFactory.createEmptyBorder(4, 8, 8, 8); + Border b5 = BorderFactory.createEtchedBorder(); + Border bc1 = BorderFactory.createCompoundBorder(b3, b2); + Border bc2 = BorderFactory.createCompoundBorder(b4, b2); - attachment1 = new JButton("+"); - attachment2 = new JButton("+"); - attachment3 = new JButton("+"); - attachment4 = new JButton("+"); - attachment1.setMargin(new Insets(0, 0, 0, 0)); - attachment2.setMargin(new Insets(0, 0, 0, 0)); - attachment3.setMargin(new Insets(0, 0, 0, 0)); - attachment4.setMargin(new Insets(0, 0, 0, 0)); - attachment1.addActionListener(this); - attachment2.addActionListener(this); - attachment3.addActionListener(this); - attachment4.addActionListener(this); + add = new JButton("+"); + add.setPreferredSize(new Dimension(32, 32)); + add.setMargin(new Insets(0, 0, 0, 0)); + add.addActionListener(this); - JPanel leftleft = new JPanel(); - leftleft.setOpaque(false); - leftleft.setLayout(null); - // BoxLayout wasn't listening to my - // preferred nor minimum sizes. - attachment1.setSize(40, 40); - attachment2.setSize(40, 40); - attachment3.setSize(40, 40); - attachment4.setSize(40, 40); - attachment1.setLocation(0, 0); - attachment2.setLocation(0, 44); - attachment3.setLocation(0, 88); - attachment4.setLocation(0, 132); - leftleft.add(attachment1); - leftleft.add(attachment2); - leftleft.add(attachment3); - leftleft.add(attachment4); - leftleft.setPreferredSize(new Dimension(40, 172)); - JSeparator line = new JSeparator(JSeparator.VERTICAL); - JPanel left = new JPanel(); - left.setLayout(new BorderLayout(8, 0)); - left.add(leftleft, BorderLayout.CENTER); - left.add(line, BorderLayout.EAST); + selections = new JPanel(); + selections.setOpaque(false); + selections.setLayout(new GridLayout(1, 0, 4, 0)); + + working = new ArrayList(); + updateButtons(); + JButton del = new JButton("D"); + JButton rev = new JButton("R"); + JButton ml = new JButton("←"); + JButton mr = new JButton("→"); + del.setMargin(new Insets(0, 0, 0, 0)); + //ml.setMargin(new Insets(0, 0, 0, 0)); + //mr.setMargin(new Insets(0, 0, 0, 0)); + rev.setMargin(new Insets(0, 0, 0, 0)); + + JPanel actions = new JPanel(); + actions.setOpaque(false); + actions.setLayout(new GridLayout(1, 4, 4, 4)); + actions.add(del); + actions.add(rev); + actions.add(ml); + actions.add(mr); + actions.setPreferredSize(new Dimension(108, 24)); + actions.setMaximumSize(new Dimension(108, 24)); + delete = new JButton("Delete"); revert = new JButton("Revert"); - close = new JButton("Save all & close"); delete.addActionListener(this); revert.addActionListener(this); - close.addActionListener(this); + + Box top = Box.createHorizontalBox(); + top.add(selections); + top.add(Box.createGlue()); - Box bottom = Box.createHorizontalBox(); - bottom.add(close); - bottom.add(Box.createGlue()); - bottom.add(delete); - bottom.add(Box.createHorizontalStrut(16)); - bottom.add(revert); + Box bottom = Box.createHorizontalBox(); + bottom.add(ml); + bottom.add(mr); + bottom.add(Box.createHorizontalStrut(8)); + bottom.add(delete); + bottom.add(Box.createGlue()); + bottom.add(revert); description = new JTextArea(); description.setLineWrap(true); description.setWrapStyleWord(true); java.awt.Font f = description.getFont(); description.setFont(f.deriveFont(16f)); - description.setBorder(bc); + description.setBorder(bc1); descriptionLabel = new JLabel("Description"); descriptionLabel.setLabelFor(description); JPanel row1 = new JPanel(); row1.setOpaque(false); - row1.setLayout(new BorderLayout()); + row1.setLayout(new BorderLayout()); row1.add(descriptionLabel, BorderLayout.NORTH); row1.add(description, BorderLayout.CENTER); - Box right = Box.createVerticalBox(); - right.add(row1); + + /* + Box row2 = Box.createHorizontalBox(); + row2.add(Box.createGlue()); + row2.add(delete); + row2.add(Box.createHorizontalStrut(8)); + row2.add(revert); + */ + + Box centre = Box.createVerticalBox(); + centre.setBorder(b4); + centre.add(row1); setLayout(new BorderLayout(8, 8)); - add(right, BorderLayout.CENTER); - add(left, BorderLayout.WEST); + add(centre, BorderLayout.CENTER); + add(top, BorderLayout.NORTH); add(bottom, BorderLayout.SOUTH); setBorder(b1); diff --git a/JKomasto.java b/JKomasto.java index 114ccb8..b9dd9d8 100644 --- a/JKomasto.java +++ b/JKomasto.java @@ -17,6 +17,11 @@ import java.time.Period; import java.time.temporal.ChronoUnit; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.plaf.metal.DefaultMetalTheme; +import javax.swing.plaf.metal.OceanTheme; +import javax.swing.plaf.ColorUIResource; +import javax.swing.UIDefaults; import cafe.biskuteri.hinoki.Tree; @@ -86,11 +91,72 @@ JKomasto { public Image getProgramIcon() { return programIcon; } +// ---%-@-%--- + + private static class + MetalTheme extends OceanTheme { + + private ColorUIResource + lightPink = new ColorUIResource(246, 240, 240), + mildPink = new ColorUIResource(238, 233, 233), + white = new ColorUIResource(250, 250, 250), + darkPink = new ColorUIResource(242, 230, 230), + veryDarkPink = new ColorUIResource(164, 160, 160); + +// -=%=- + + public ColorUIResource + getPrimary2() { return darkPink; } + + public ColorUIResource + getSecondary2() { return white; } + + public ColorUIResource + getSecondary3() { return mildPink; } + + public ColorUIResource + getSecondary1() { return veryDarkPink; } + + public ColorUIResource + getPrimary1() { return veryDarkPink; } + + public void + addCustomEntriesToTable(UIDefaults table) + { + super.addCustomEntriesToTable(table); + table.put( + "TabbedPane.tabAreaBackground", + getPrimary1() + ); + table.put( + "TabbedPane.contentAreaColor", + getSecondary3() + ); + table.put( + "TabbedPane.selected", + getSecondary3() + ); + table.put( + "MenuBar.gradient", + java.util.Arrays.asList(new Object[] { + 1f, 0f, + getWhite(), + getSecondary3(), + getSecondary1() + }) + ); + } + + } + // ---%-@-%--- public static void main(String... args) { + //System.setProperty("swing.boldMetal", "false"); + MetalLookAndFeel.setCurrentTheme(new MetalTheme()); + new JKomasto().loginWindow.setVisible(true); } diff --git a/graphics/Federated.xcf b/graphics/Federated.xcf old mode 100644 new mode 100755 diff --git a/graphics/Flags.xcf b/graphics/Flags.xcf old mode 100644 new mode 100755 diff --git a/graphics/Home.xcf b/graphics/Home.xcf old mode 100644 new mode 100755 diff --git a/graphics/Hourglass.xcf b/graphics/Hourglass.xcf old mode 100644 new mode 100755 diff --git a/graphics/Kettle.xcf b/graphics/Kettle.xcf old mode 100644 new mode 100755 diff --git a/graphics/boostToggled.png b/graphics/boostToggled.png old mode 100644 new mode 100755 diff --git a/graphics/boostUntoggled.png b/graphics/boostUntoggled.png old mode 100644 new mode 100755 diff --git a/graphics/button.png b/graphics/button.png old mode 100644 new mode 100755 diff --git a/graphics/disabledOverlay.png b/graphics/disabledOverlay.png old mode 100644 new mode 100755 diff --git a/graphics/favouriteToggled.png b/graphics/favouriteToggled.png old mode 100644 new mode 100755 diff --git a/graphics/favouriteUntoggled.png b/graphics/favouriteUntoggled.png old mode 100644 new mode 100755 diff --git a/graphics/federated.png b/graphics/federated.png old mode 100644 new mode 100755 diff --git a/graphics/home.png b/graphics/home.png old mode 100644 new mode 100755 diff --git a/graphics/kettle.png b/graphics/kettle.png old mode 100644 new mode 100755 diff --git a/graphics/miscToggled.png b/graphics/miscToggled.png old mode 100644 new mode 100755 diff --git a/graphics/miscUntoggled.png b/graphics/miscUntoggled.png old mode 100644 new mode 100755 diff --git a/graphics/nextToggled.png b/graphics/nextToggled.png old mode 100644 new mode 100755 index 7677635470bfebc88cb0f2829d4f0f65e1a6e637..f288ec443972e56f0c4d1909a3fd233abbc2339e GIT binary patch delta 3614 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 kM513Zgb+dqA%u`s4xUYNg^rjPx# delta 3554 zcmV<84IT3M9K0NmBYzC-dQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U=NGawNG8 zhTnM#AAtl(kUS382;acR_XpO}QqOdc+U^HCVpO3@DT~Pkz`vl}{?|W``v*Tse03?8 zs!i4NlUi!h`J?*BPrvWMr~7_?wjeBZr45N<`T@$qlf=YRdpePO&j@6YEvo%{L2 zL~TDm7@t4r`rg4~f#?0#LNPoR@Xv`|e@+zTxpI2^KOV>O+G_cDg!vqQo}b?^@aya? z#Uh$Dl*BucD@7ZBSMjM3w`CiR<*xr;===ZOYpAd%*)c@Vd$k=#`<2+aX5K?=jA4R% z$KG>%9+_;3^M8fE+bga=|M}U@-D~U5lz&R;`>*hW`yVpxZa`lj#P2es@9Ur55Bb}D z_c5h6Zy#1xeXsoKKI6})GrzKCzvrxa&VHP(C*{ccJk;wb_bAIobbgZYNJa=`9~%|QA`4&RC^-b6TWFZhbi4fPyz$~kK;x#pI;Mm2<~7BxogC6-ij(Nan+t#nsoO*L1orPkVNZ_*-+ zn;Up+wYAnei*{!2Jlz@4`;ZYw8hPj_qmDNE6n{74OfyfNW!BkdU$Wu?$4ggPb+y%Z z*p$*vJ8#`(*WGqMl-h|WoqY6^Q%`fJzq9sC>mOdfkhSp4n%qp;!1B%-cT0Iq5sXf< z<&2C;3M9N(210ZqmNQ>NN@AI_ocSi8A`6?$mYfwVV`MPxAo+xM?!IL%yQse>Z;nLB z?|;agv($YdbAQa+pJi?JD|GQ@$Y5we^%3-)c6RMjyD8;QukNn~eD(VOI??Fqc>IqH ziYsg#Z~{Qh^C*maLLS5AN$IUPq_^y6A2p1e>n@~el)k*Ta>-@*au``possxUMhi&B zI;Vk_ zNYAd+v+VGjK-nP4{^T34;d5%|bV$3KLkl2u<-KD%VxFkX){3n_@@Y@`hQ>^ zV~Jsz*qOL41oup>Cx}fvYwC;vckzJZF?!Z!*it1Y1cg( zNod8yUlN3v%G{|#I#}Jf$7X|Nosmj8ZnikrJ=C5k(J_!V9epn-bekI4X9yFq@M#sc zb07TvIrn(5`nc8i8(RM#UEMD{V1Gs>EfZJRb`NOVcy$eENRI1et(_+^&ao&JI7?Hx zhCj|mbwXRxj^BqG+<`e--uV!|P7<3?ps?T$E*H+6P~bdg!`?=kgajVQ3@h{e_PtaB zBEV>@Sn?catVIREv-!kQI;ohh=DBxm%M2%d#_p5hWsr=_biLrFWcI#ihku^WB%P76 ziD%ha+kTgZ`&1jy^UalCA9Gb#iKA0rOkDF~D*`P=rwi^Xcm4d^*&jxSW83%D@lh|@ChM3 z60rJ&dP>HOvK#WiZX~bNQ0tZ{+0+p7M2iCGT39)q4R2cf7iG|1ymcZq0SvmLw4_h5 z#)&os_L`$)I-(I21TG-RVjAJeVOyTS*@}wND+at|PY331v{|h%=YNQ0Og~dM&~|t? zRbObQ_TnIwbcK|yH~aC`{nda^*UV0)D2k$O>}dLduA?VCIWXYOd}8!Laqb-Wo~w=; zN6YtI)F*iGCGQ!|fc&ilTf!fp0W)N1YrDE?r$%q(oN8R^Z@s`71Kl#Foy~ z!)rh{R%t<~)wAtyJb&b!Ur9SllCQpD-9yBYn^kQ`Gbx|7*-j2{S!*;Uqr-QT*P(F* z48+KXm6V+e)Q+9w+!YaO;7&IW`&(gh$#}6I4sd1=ONqg%_#j^me8Jrkv&A5i(JGqP zIsz7k(uGj82U!sAkU;Tc0%&A7El?7LwUUW4ebja%8U11iQ-8LKhUx+P5#Uf{05ST= zXc|(O0%>eI0S9j$8wlMgu5~cJI0!*2{w-BOkm%r$U+Q~JYa%yrIvvF|^sbHd3k#60 znns*pe&QNv*cclf&3v)tAi4@s3>b(*P?~j4oF*s*Bf!iUXbeR^>fXxERr4zXC=A-K zopni9RG#0np?`ZKt8Pucr%k(ANp_C6#&Mx3+iJuzP8voDZavF^+SJ9MmCNA zWA#|%tb#?Xt zZx38OJEgX|DaXJpn6`J^INILe8H?hs%cNar4y!hkSZH|hG*~0Y+AeZ5WHqxLa2_a`7?*U;hFImdW>b{?Hyo}r*{Z1@8Fe+ zhFj@vJ28&j3?>!DzK5hy-vg6W)j#SF$bYp?Q5IHikLn|4jquYH)A5_ZG76=9cnB+M z-SDE!=LPZmxh=$7SiLi0`UyqE6VVq7gP- z6NDD)+M+314G$lSw-UKR(+4TKm0`{>MY{s?1JOcSgQW;ZtJTG9hb?fIz#AAfTU z0lt~HM@BWjn0IHzPj6vI!V=P9wELwa2|*6f|6lFd+}C7n$bzua2K_OQz&$uf=6w%*U1=! zM1htF(i+8>RAQr*fMf=0-EiXQVYV32%S|#cDx329>M@7z+hZ2Y{iDU~&4eUxY=#Jg z;mwBve>#*ZfEHrdYQ4(!5!YfNWdb&02u&Ui%dAB7SDsMKe&q?>C$1iG0)H%SO@c{h zSfEG@2a-JBZKpolPHLDPU9PJ0_9FwcHKO$+B-6alb_4+r(Um@zh`huQrlPxE7;ReT zL3weo$zC2#BLVvms6?ow5vfLl?!xsMo^5IjNF{w@4lzQE%wrLN80`y=MBdPe+CEfM zcv>dZNL|ZlKK($;6i%r<$$tj;*U=?&?OE9l24Ug3Lj2Z60&Xg@_w(!`U0kA?0PuWv zk>aI5r6!cYgc8=gm^b9brSc8)#_s0{d2!JA!k}Kv<59d}9>!?rtKGo!>cTHR0JF4k zz1TyakQcKb;7rHnQqytjaH9@;pc*XZ~}eS8+lgDo1+A4VTp1{))$&=>zj@TO$yvb>Azk6WLd`)3cV zQP;Jns<%E^|K^#ETRaANtHIf~IEr{(jLw|vE^f6Nq&OFL5@XCmLw--ZB3Ha*2qA9QPcMBYzDjdQ@0+Qek%>aB^>EX>4U6ba`-PAZ2)IW&i+q+U=QZvSYUm zg#U9DSpvZ~m%|5Gl^taH`M@K|cWlR=i6=i&WvNEerH=Rj8r_XEPXG1K8*Y}!g^hQUfn^ycl$%B6f({$`ws&NpX%XU+bdv)eiPoNlDTk<05)@1xvLTsJLR_g95y?tSI z*yE0kG%w%~84aJk$X&MI<(4!S-qIZC5hjz1nZNLK-*eG9R!}0oePYGFg29npSms2W z7cL_sa$Z5rH^A@buOF7zNCxu_bK`)+Pn&`C&n&-yE8av$F3h|?btHAaCLl!YAhQ{X zWWX1RS$~T78iK1L1hSE!!PY}eVUiZfIczo=QjCSro&Lk`a{L`WiXEG|}Z z)8imnDP{0eQv*XI$DDG`CD+_?&!fa*6;?_u#;Bvlnrg14*4k>X!?oB_%dNE9TI+4} z&?AhSJN4LG?|lpw9n3uV_27arW|(oNnP-`Gwtv~@Si!Bh(#or>y4vb%?6Bjej(6F0 zx83(pQJ|zrvlgw|wCgxP?ZlH#KIPQYPIqT~vi3^rZ=OGpHF;$%+)UYp^^-M5Ykf~4 zMkm>FM#e%C5?(C>5?u(EGv6eoV41U=`5vf>9N1*GLb;6`q4H*8>WrvoV)DUuI&}wkx|Iy*7U` zjwa2WL!GIQ+RNTW`4WKjPC=EDm+Upbcuy|wxr0&4UktbVfghYv?I@*kq8@4=oO?HX z$&C>wl3a&Z3Q6;#9?qKB6tphG7A-8Vwc9Lb?%GdPLU>L{CuZU}{aF1@L^+0`lYg|_ z4EVJdA@z4{BqMn#L>Bg#7F5lAvyWx4Oz46DD_QV!y4prgt!KP)Ih|@Faz0Y5YDKRd z8Yz2}v=IxhyGt$V^^~~TsuoL2nMadDSXiSnB{hD)M8I~kw-_#9s+NPiT~q(B6m z^|O1>k#?f^vtcQuHKb`o*T6>S6zOQDj^GLczgj88-8N&{@=!qa*V!P` z&PBv3vX;U+r?fUAq}Oq`@ZWAu)MzRW(oQB5VXQ0m!RAKN!O*RD_7SO|P8pHYIlI*h zVWJWO=DkdHTBg``@!T>pMMv0U*{9<_(Q@K2h*GO7rGv~XWiM#79)B!d#bTeDM$=uK zPL#C)#!0s$6RVJ@+S^}^uGEXb_&>iyo_A3==mppYzpvwm+aJV^>=zK$`9^GGIAMD( zU<=rv-2h8XotFq)lwBE6XFPRGE8r+OldsRZRY%@em~aeGB#9HwuNiuq01inj(r1C) zW~Helc5eAoZMRDgwSTF8JmnoV;96ec%-QN2tb^a#31VjRpW1; zrcUjZV%!DOhD@}e`!aHbiVPZM7PL$@e8gT8r4B}syF>12`+s5!sT!k*QRy`2hUyrG z@KrQ%XaF3xaJHyzrK0JwX&YuiorI#X=z&C{t!FE}(4>)GHVYXxcS!7FK)sG_+k|!P zd?>)W-8(Xh%?v6qV(^WnI?P{&Vj5wmnHsc!k6Uby4hID(_zl>P!%+bt(~FF`R{>uU ztO4saGTT_{@qeQW=uL%A6Th#d4|WqyhzEy;R?B)5a+ASCnnw~$?&z|BtN6t+n}JEG zTn+#O#s@(+0;TK;zdZOsc{Ma2yURe))cn!bO``HmubG~!YBGjNZO8J;BU=zQ5qg;P zVtbV_9So)$ApsP`$A)DwxgR)WoK2W>E=2#0kcKgknSbyDFsrZABD7{b;>z_y#gMbG z`Ezja8uwndIlBLf8>ldoDFujBUv|DifqrA;Kunz;advXe!%Ls-NRK{$)cJc|kNXZ= zgq?%ZkVXUw>L8wFgJK{z#z&sqqfgU_t-vGnJ;0(3+LatnM}MHtK9I#t8E;X)Ge&T> zGZWQ&EPsN%7W)38P!ChlLV!1*+sy!j@=2N~RZOMIWaKo7X>Smun2i@7ESxczr_LP? zz>1eDFSL8ZJdjZ!BCfWdvi-c?Xcoi_iaVKFpwmg4O5N)MkRnufE&_9+-!lYKsg%$# zwcPL_bYukvCO2w{5s#)C$D|a2qR8;<>gmTaj(-iSJ54s|8ruPemRFc0KkhgDhKPlJKxY~qLFb#F!sbKP*lt{1XL|JfB?rhF(K ziokf72H3dCiVQ81OT$p46%#~77iy+ucGHwTsI|S(SMrFB*$tGWbHyO+1U-kBh(kdy z5r3E(2pA+faHJlUQL}z_2^~DW*t$H8qJPpK&oo{lCjGib6ESoS-a?hwq+ymxLT4u{ zKy0{87NLW#)XlcreJNmWOb>ds+da{4U6{K(H0_IIg@lbYtXJG=Ucg_8QLv`G;Aom8 zsdi|)?;%(Ua6sU-niIy4mYVFwA0C$<(0*}pEF`RmDa^sy#wm!DGw_96AkaA>d4J3u zUT9nrw0e6^@Wp)5mnu7$fKI!gjuKCHgOTF~h}>?dzpYoS|FeEgt}i6&M`$*o5JF$H z5#!>3CMlTJ?p8oyArRb#Od#KsaS$`k6=0Twe9PnPsDs?Evomwt%-NAOvv#LPuYQD(FLNx{Rx`4Iqh1R1b-Lm%{roy$*Auv9NTHAEa^65xL_6ghr(uFy&1hIrU8C_bYWeEyzE)#5xqfw*;(y@TaEi4} z7|51`c6MLXnxz}Qa2pKl0p33>z?RY&=28~z81_KS9-OpXKUda!%fo8wmN4G95EGnU zU<4Kq{w=o&w*&RQ+z6b*;n-4C2Nx#1;}EzoShNSi8RiKBpTyhjGX)61Bf%@Yz>&E< zftthObarXe74tr{^6_OwI)CvoX1KhZ@i(wO4iE-K_GvEA$z#~42|LK1>9>8wn7NE) zUo`2*z{AryymB9qi}ezeV62YL&DetxJM zaQ{tf{1;xSJ-pNSZxK3ZIBAVy|ppPtoDDSvjK>hjyEXh9_1 z5tanyOB@o{Bj_XWf{}yigCcT!Pg2trPk|lqsRlD5eq3upge+*WUTYGr(RLeSf^%ad zh;X0QozoizE=HHxNCJ4rdPGy--5AAGB5CL&ZW8&pKvw`sTSU#FASND0Gmv)2?MIql1AT4!x$bEU^>lH->CjJKT; z_s`&MXT<$8c-#G)`=WnO^!G%6PxL>Y2;$k@{Tt@#f7Pj+#F>*D4KfHD3Jd}a9i}If zRShwJK@NZ*3B+eQc>P{b2tW_CMBL=XaZZ(u3q z8mlTSgJ~rgDJ(?bAEb!-o2~yUu!?Bwubm@A%GZolF>U>g)}oyKN?@O{kvT?tA_S(d zZhdm@n?0~b-PfL~-uhtwo1+@HcnvbE!N^-UMOIvl%$)l!9<>^jI5&2ZbFM=}eM?qE jqF*wE5JCtcgpgGZo=tLvj+jTd00000NkvXXu0mjf@*DKL delta 3555 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 diff --git a/graphics/postWindow.png b/graphics/postWindow.png old mode 100644 new mode 100755 diff --git a/graphics/prevToggled.png b/graphics/prevToggled.png old mode 100644 new mode 100755 index cadac76c97b70b63ff5d4bda011da74044457d26..5d28c80e562a3972c83a2a3d0ee4a94b3086fc6d GIT binary patch delta 3581 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 DN@>j3 delta 3652 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