From ac497ec61d87bf88c495c9cbfc239badb0e8fe09 Mon Sep 17 00:00:00 2001 From: skylarmt Date: Sun, 15 Mar 2015 15:50:14 -0600 Subject: [PATCH] Integrate task lists with Ribbon open/save and single instance handler --- src/net/apocalypselabs/symat/Main.java | 63 +++++++++++++++--- .../symat/SingleInstanceServer.java | 12 +++- src/net/apocalypselabs/symat/Tasks.java | 2 +- src/net/apocalypselabs/symat/icons/jsicon.png | Bin 525 -> 620 bytes src/net/apocalypselabs/symat/icons/pyicon.png | Bin 587 -> 654 bytes .../apocalypselabs/symat/icons/taskicon.png | Bin 0 -> 477 bytes 6 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 src/net/apocalypselabs/symat/icons/taskicon.png diff --git a/src/net/apocalypselabs/symat/Main.java b/src/net/apocalypselabs/symat/Main.java index d518bb0..b6732cf 100644 --- a/src/net/apocalypselabs/symat/Main.java +++ b/src/net/apocalypselabs/symat/Main.java @@ -70,10 +70,13 @@ import java.util.GregorianCalendar; import java.util.List; import javafx.application.Platform; import javax.swing.ImageIcon; +import javax.swing.JFileChooser; import javax.swing.JInternalFrame; import javax.swing.JOptionPane; import javax.swing.ListModel; import javax.swing.UIManager; +import javax.swing.filechooser.FileFilter; +import javax.swing.filechooser.FileNameExtensionFilter; import org.pushingpixels.flamingo.api.ribbon.*; import org.pushingpixels.flamingo.api.ribbon.resize.*; import org.pushingpixels.flamingo.api.common.*; @@ -179,10 +182,16 @@ public class Main extends JRibbonFrame { // Open initial windows boolean loaded = false; if (!argfile.equals("")) { - Editor ed = new Editor(); - loadFrame(ed); - ed.openFileFromName(argfile); - argfile = ""; + if (argfile.endsWith(".sytt")) { + Tasks tt = new Tasks(new File(argfile)); + loadFrame(tt); + argfile = ""; + } else { + Editor ed = new Editor(); + loadFrame(ed); + ed.openFileFromName(argfile); + argfile = ""; + } loaded = true; } boolean licValid = false; @@ -381,9 +390,6 @@ public class Main extends JRibbonFrame { public static ResizableIcon getTinyRibbonIcon(String name) { int d = 32; - if (name.endsWith("icon")) { - d = 24; - } return ImageWrapperResizableIcon.getIcon( Main.class.getResource("icons/" + name + ".png"), new Dimension(d, d)); @@ -467,6 +473,17 @@ public class Main extends JRibbonFrame { } }, JCommandButton.CommandButtonKind.ACTION_ONLY); + RibbonApplicationMenuEntrySecondary newtaskbtn + = new RibbonApplicationMenuEntrySecondary( + getTinyRibbonIcon("taskicon"), + "Task List", + new ActionListener() { + @Override + public void actionPerformed(ActionEvent evt) { + loadFrame(new Tasks()); + } + }, + JCommandButton.CommandButtonKind.ACTION_ONLY); RibbonApplicationMenuEntryPrimary newbtn = new RibbonApplicationMenuEntryPrimary( getRibbonIcon("newfile"), @@ -479,7 +496,32 @@ public class Main extends JRibbonFrame { new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { - loadFrame(new Editor(1337)); + JFileChooser fc = new JFileChooser(); + FileFilter script + = new FileNameExtensionFilter("Script" + + "(syjs, sypy, js, py)", + "syjs", "sypy", "js", "py"); + FileFilter all + = new FileNameExtensionFilter("SyMAT File" + + "(syjs, sypy, js, py, sytt)", + "syjs", "sypy", "js", "py", "sytt"); + FileFilter tasklist = + new FileNameExtensionFilter("Task List (sytt)", + "sytt"); + fc.setFileFilter(all); + fc.addChoosableFileFilter(script); + fc.addChoosableFileFilter(tasklist); + int result = fc.showOpenDialog(maingui); + if (result == JFileChooser.APPROVE_OPTION) { + File f = fc.getSelectedFile(); + if (f.getName().endsWith(".sytt")) { + loadFrame(new Tasks(f)); + } else { + Editor ed = new Editor(); + ed.openFileFromName(f.getAbsolutePath()); + loadFrame(ed); + } + } } }, JCommandButton.CommandButtonKind.ACTION_AND_POPUP_MAIN_ACTION); @@ -494,7 +536,8 @@ public class Main extends JRibbonFrame { } else { openbtn.addSecondaryMenuGroup("Recent Files", recent); } - newbtn.addSecondaryMenuGroup("New Script", newjsbtn, newpybtn); + newbtn.addSecondaryMenuGroup("Code File", newjsbtn, newpybtn); + newbtn.addSecondaryMenuGroup("Other", newtaskbtn); RibbonApplicationMenuEntryFooter displaybtn = new RibbonApplicationMenuEntryFooter( @@ -532,7 +575,7 @@ public class Main extends JRibbonFrame { maingui.getRibbon().setApplicationMenuRichTooltip( new RichTooltip("SyMAT Menu", "Create files, open documents, " - + "get help, and change settings") + + "get help, and change settings") ); } diff --git a/src/net/apocalypselabs/symat/SingleInstanceServer.java b/src/net/apocalypselabs/symat/SingleInstanceServer.java index f61142d..83ecd00 100644 --- a/src/net/apocalypselabs/symat/SingleInstanceServer.java +++ b/src/net/apocalypselabs/symat/SingleInstanceServer.java @@ -46,6 +46,7 @@ package net.apocalypselabs.symat; import fi.iki.elonen.NanoHTTPD; +import java.io.File; import java.util.Map; /** @@ -64,9 +65,14 @@ public class SingleInstanceServer extends NanoHTTPD { String msg = "OK"; Map parms = session.getParms(); if (parms.get("arg") != null) { - Editor ed = new Editor(); - Main.loadFrame(ed); - ed.openFileFromName(parms.get("arg")); + if (parms.get("arg").endsWith(".sytt")) { + Tasks tt = new Tasks(new File(parms.get("arg"))); + Main.loadFrame(tt); + } else { + Editor ed = new Editor(); + Main.loadFrame(ed); + ed.openFileFromName(parms.get("arg")); + } java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { diff --git a/src/net/apocalypselabs/symat/Tasks.java b/src/net/apocalypselabs/symat/Tasks.java index 8484ecf..d0458fc 100644 --- a/src/net/apocalypselabs/symat/Tasks.java +++ b/src/net/apocalypselabs/symat/Tasks.java @@ -287,7 +287,7 @@ public class Tasks extends javax.swing.JInternalFrame { } if (result == JFileChooser.APPROVE_OPTION) { try { - saveTasks(fc.getSelectedFile()); + saveTasks(FileUtils.getFileWithExtension(fc)); } catch (IOException ex) { JOptionPane.showInternalMessageDialog(Main.mainPane, "Cannot save task list: " + ex.getMessage(), diff --git a/src/net/apocalypselabs/symat/icons/jsicon.png b/src/net/apocalypselabs/symat/icons/jsicon.png index ec9061e1b5420fef80ffa04d5f8fab3d927a2e0d..9fca9f6860ad9274995a6d738cf3bdc8aa59a162 100644 GIT binary patch delta 571 zcmV-B0>u4|1ndMMiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPN3kK`} z00!&<9(6c1kwz$g=}AOER9J=Wmp^C~K@f+(p9l$Jp*Zxhhb8r7lMO)917HpKAZaWcf$d5K`hg#RfD3(6$F7dn^+122r5wuT zfLZ{yzXQ*T<|gno7l3-n0!ib*C)=$(0Z2|H2{;3c65`|w@YeQb(y(r@0Ppw}gwq{k zmw-3Xc&Y2a?bN*cGwgf-m-ti~=Lk#xRn*nVGSoCDx>^n4sxmh@86g*wJL0A2u#9dq6+KxT^cY!1L7 z53d6=gtRL~z&+q@qW}d&+x9eY5|||%*QHD~3J|;4cFXpC;9>O2sZSa-bhYfaRVL!`UsI6-*VS-m1I=_&-wj|Z39RDR!unErEkvmT7_MGsqjE6+W8jn z80gEjd)w)fOwvK%EU*Er*luUrdAUZen($90>u=V7fPWI;C;xl=Lvm$EM*si-07*qo JM6N;tV1jO7|A+tp delta 475 zcmV<10VMwH1dRkCiBL{Q4GJ0x0000DNk~Le0000O0000O2nGNE0N{5$_>mzR3k5L% z00l7tx9uoWkwz$gib+I4R7i=n)K7?wVHC&l&(Wk&v#}sW*$jo<6bma$3uQ4Iv9(9Z zN?BP+>}@P%VPh#}qlQ_?ph;rEZX$mgslog#?mM}r_qu<&_qRFcecsdW`=0Z>&r`UL zMU&CtDJ&+rGYR*qvSkv+-TE(}sTBRbu{@wVEb|DxtzTE`2WL%5+IV*%hK4sBXn_jhFf zsNaZYy7ILqKESfh7k|eS%qMx&X3*L}b6R)cRI~I8E0E+uQ&VkM!$1I>#*MD$he_7E z3kET#_lWj)<;yrXh*_I@b#Mu{@da;_{2nVH$ts>Aj%vCYaI~tX`&N#oxj)T+c7VXH R%3A;c002ovPDHLkV1mP4;adOz diff --git a/src/net/apocalypselabs/symat/icons/pyicon.png b/src/net/apocalypselabs/symat/icons/pyicon.png index c1648f493cea8638c7051742d5a97729d84bea4c..04cd82431fc455cb96f144f2ba6217c2c96f4f81 100644 GIT binary patch delta 606 zcmV-k0-^oO1datEiBL{Q4GJ0x0000DNk~Le0000W0000W2nGNE0CReJ^pPPN3kK`} z00!&<9(6c1kwzzf0t-n*K~z|U?UuW1R6!KRe<#@#Ml6kmmPXU1P}C-Zx*#S+DlG)7 zvfp!{^y*n0rW=s9yt4@DhLRea{jv`Tiw|<0!?Q-vRVQcfxW;n;89d) zfAH^$V$Qo4X>UBV}l7A0K;4glYr?F4|N7BJ=Xb%%!>o|p6^E>OA+C4HiO zITP9G@HK~jcbQpVzz3cFZd%^ez5~k+?{Ihq_!_VQ!)CS#*yntvt02&HxH|!o8o(`Q z8>PMaT9`kV^s)*9+Z=u!*(M!63>JfYS=wk|$N{z+g2037nENTP8Sd2PS~z8}_h7juGGx&_}yH?@4-7 srZ|8lmDr^iBL{Q4GJ0x0000DNk~Le0000O0000O2nGNE0N{5$_>mzR3k5L% z00l7tx9uoWkwzzf0mw;2K~zYI)s?+VTtO7YfA_J1XrmZVvZ+#;A_NvpVIhh^u&_v# zg$UZ%huHWh*jQ<2lc=C#5L9pxA+eDVB!Q47f|J)$efk79;K1YD zd*;qLZ|2RsF<=N-qdcuC1*}P$Du=q65tTzYY`5Pa6((kXmI2yb2K~7RT@BmnMuHW$;aOm+9$5zK*z-kf$03>YybDq|iS-qrV zV9B{o$2P}*Wl5)@Mv`6hF^KOv7MAI;nKb|{o-dvsoW$UM5brt8lK;pNFbLEFClqIU zr9lK>X4Mpz;Rx6PkaPe{JKy7&lk_90!E-Zv4}7CI{nwICf|}8DV5}kvuK)O&D z)PM2*pFm}a{%q=^9{?-B2O#aHW0Lm50yB$%zn;Efk@TmOP@KWGq=8Z$X7&uI13G|5 zP7lZE#2Q@I`pEyU3T<4{=bJP*Ab*mN$ZyvdmldBekd(PfUDDI*yv^;uaQ@4U)@){# cWzx_518Bjw{9B}Kr~m)}07*qoM6N<$g3kH!od5s; diff --git a/src/net/apocalypselabs/symat/icons/taskicon.png b/src/net/apocalypselabs/symat/icons/taskicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c0da6b296329ee82432010666b311f7c6021952f GIT binary patch literal 477 zcmV<30V4j1P)__%np&Fl6ExM}>?R0; z-@`A^5J8&`y42|65J=FXV-%K?3Sx#RiKoGv_kXW1F899P!S}!!-UnWu=g&FkIVUpH zAY*8t?2Uj%0EWAPh?v469^rjvZbZa$yv0S2d_#DXnfupBW_Bb#B3rqOQA`(DFL{oM zlCPr#5%B;o3TPa!dwlh+(IFr+&#_fNKd@4#fEzu4d2Hjcs~$Luhy#4W-#+mDDS^26 zR$NsA5iy1*nfa~tJ%U$#;Jd_nX0}UNF@{U{g=2hZVYQ86H~BDjiXYA}Q>TD|_dvG~ zT;Lt{@Efa{xml-x$}zmlCTx75Y8^ktg0>ZZiHK)d)*maL%gn=Tq{0W*wa4Z=9=hXo z{IY;1G27#-Z;h&T{I!67Vy#XARl8ux)gAEvBs+