From 4f7aa90b087efbbbefdbfb355efb3fe2d36be506 Mon Sep 17 00:00:00 2001 From: skylarmt Date: Fri, 27 Feb 2015 11:06:54 -0700 Subject: [PATCH] Add clear recent items button --- src/net/apocalypselabs/symat/Main.java | 9 +- src/net/apocalypselabs/symat/Settings.form | 156 +++++++++++++++---- src/net/apocalypselabs/symat/Settings.java | 170 +++++++++++++++------ 3 files changed, 253 insertions(+), 82 deletions(-) diff --git a/src/net/apocalypselabs/symat/Main.java b/src/net/apocalypselabs/symat/Main.java index 5348cdf..7b6fa0f 100644 --- a/src/net/apocalypselabs/symat/Main.java +++ b/src/net/apocalypselabs/symat/Main.java @@ -456,7 +456,12 @@ public class Main extends JRibbonFrame { JCommandButton.CommandButtonKind.ACTION_AND_POPUP_MAIN_ACTION); if (recent == null) { - openbtn.addSecondaryMenuGroup("Recent Files"); + RibbonApplicationMenuEntrySecondary blanksubbtn + = new RibbonApplicationMenuEntrySecondary( + null, "No recent files", null, + JCommandButton.CommandButtonKind.ACTION_ONLY); + blanksubbtn.setEnabled(false); + openbtn.addSecondaryMenuGroup("Recent Files", blanksubbtn); } else { openbtn.addSecondaryMenuGroup("Recent Files", recent); } @@ -500,6 +505,8 @@ public class Main extends JRibbonFrame { public static void loadRecentFiles() { String files = PrefStorage.getSetting("recentfiles"); if (files.equals("")) { + loadRibbonMenu(null); + recentFileList.setListData(new String[0]); return; } String[] fileList = files.split("\n"); diff --git a/src/net/apocalypselabs/symat/Settings.form b/src/net/apocalypselabs/symat/Settings.form index 6a94674..c8825c7 100644 --- a/src/net/apocalypselabs/symat/Settings.form +++ b/src/net/apocalypselabs/symat/Settings.form @@ -13,13 +13,13 @@ - + - + - + @@ -44,37 +44,44 @@ + - - - - - - - - - - - - - - + + - + + + + + + + + + + - - - - - - - - + + + + + + + + + + + + + + + + + @@ -99,7 +106,7 @@ - + @@ -143,15 +150,98 @@ - + - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/net/apocalypselabs/symat/Settings.java b/src/net/apocalypselabs/symat/Settings.java index d6b8f43..1d5642f 100644 --- a/src/net/apocalypselabs/symat/Settings.java +++ b/src/net/apocalypselabs/symat/Settings.java @@ -1,41 +1,41 @@ -/* +/* * CODE LICENSE ===================== * Copyright (c) 2015, Apocalypse Laboratories * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this + * + * 1. Redistributions of source code must retain the above copyright notice, this * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, + * + * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. - * - * 3. Neither the name of the copyright holder nor the names of its contributors - * may be used to endorse or promote products derived from this software without + * + * 3. Neither the name of the copyright holder nor the names of its contributors + * may be used to endorse or promote products derived from this software without * specific prior written permission. - * + * * 4. You adhere to the Media License detailed below. If you do not, this license * is automatically revoked and you must purge all copies of the software you * possess, in source or binary form. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * MEDIA LICENSE ==================== * All images and other graphical files (the "graphics") included with this * software are copyright (c) 2015 Apocalypse Laboratories. You may not distribute - * the graphics or any program, source code repository, or other digital storage + * the graphics or any program, source code repository, or other digital storage * media containing them without written permission from Apocalypse Laboratories. * This ban on distribution only applies to publicly available systems. * A password-protected network file share, USB drive, or other storage scheme that @@ -73,16 +73,20 @@ public class Settings extends javax.swing.JInternalFrame { themeLight = new javax.swing.JRadioButton(); themeDark = new javax.swing.JRadioButton(); saveBtn = new javax.swing.JButton(); + jPanel2 = new javax.swing.JPanel(); showRecent = new javax.swing.JCheckBox(); + clrRecentBtn = new javax.swing.JButton(); + jPanel3 = new javax.swing.JPanel(); miniRibbon = new javax.swing.JCheckBox(); + applyBtn = new javax.swing.JButton(); setClosable(true); setIconifiable(true); setTitle("Settings"); setFrameIcon(new javax.swing.ImageIcon(getClass().getResource("/net/apocalypselabs/symat/icons/settings.png"))); // NOI18N - setMaximumSize(new java.awt.Dimension(145, 237)); - setMinimumSize(new java.awt.Dimension(145, 237)); - setPreferredSize(new java.awt.Dimension(145, 237)); + setMaximumSize(new java.awt.Dimension(375, 220)); + setMinimumSize(new java.awt.Dimension(375, 220)); + setPreferredSize(new java.awt.Dimension(375, 220)); addComponentListener(new java.awt.event.ComponentAdapter() { public void componentShown(java.awt.event.ComponentEvent evt) { formComponentShown(evt); @@ -108,7 +112,7 @@ public class Settings extends javax.swing.JInternalFrame { .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(themeLight) .addComponent(themeDark)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap(52, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -127,40 +131,97 @@ public class Settings extends javax.swing.JInternalFrame { } }); + jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("Recent Items")); + showRecent.setSelected(true); - showRecent.setText("Show recent items"); + showRecent.setText("Show recent items sidebar"); + + clrRecentBtn.setText("Clear recent items"); + clrRecentBtn.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + clrRecentBtnActionPerformed(evt); + } + }); + + javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); + jPanel2.setLayout(jPanel2Layout); + jPanel2Layout.setHorizontalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addComponent(showRecent) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(clrRecentBtn, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + jPanel2Layout.setVerticalGroup( + jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel2Layout.createSequentialGroup() + .addContainerGap() + .addComponent(showRecent) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(clrRecentBtn) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("View")); miniRibbon.setText("Minimize ribbon"); + javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); + jPanel3.setLayout(jPanel3Layout); + jPanel3Layout.setHorizontalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(miniRibbon) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + jPanel3Layout.setVerticalGroup( + jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel3Layout.createSequentialGroup() + .addContainerGap() + .addComponent(miniRibbon) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + + applyBtn.setText("Apply"); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(saveBtn, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(showRecent)))) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(miniRibbon))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(0, 0, 0) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(applyBtn) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(saveBtn)) + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(65, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(showRecent) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(miniRibbon) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE) - .addComponent(saveBtn) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(saveBtn) + .addComponent(applyBtn)))) + .addContainerGap(36, Short.MAX_VALUE)) ); pack(); @@ -178,7 +239,7 @@ public class Settings extends javax.swing.JInternalFrame { themeDark.setSelected(false); } } - + if (!PrefStorage.getSetting("showrecent", "").equals("")) { showRecent.setSelected(false); } @@ -188,16 +249,29 @@ public class Settings extends javax.swing.JInternalFrame { }//GEN-LAST:event_formComponentShown private void saveBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveBtnActionPerformed + doSave(); + dispose(); + }//GEN-LAST:event_saveBtnActionPerformed + + private void doSave() { Theme.setTheme(themeDark.isSelected() ? "dark" : "light"); PrefStorage.saveSetting("showrecent", showRecent.isSelected() ? "" : "no"); PrefStorage.saveSetting("miniribbon", miniRibbon.isSelected() ? "yes" : ""); PrefStorage.save(); Main.updateDisplay(); - dispose(); - }//GEN-LAST:event_saveBtnActionPerformed + } + + private void clrRecentBtnActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clrRecentBtnActionPerformed + PrefStorage.saveSetting("recentfiles", ""); + Main.loadRecentFiles(); + }//GEN-LAST:event_clrRecentBtnActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton applyBtn; + private javax.swing.JButton clrRecentBtn; private javax.swing.JPanel jPanel1; + private javax.swing.JPanel jPanel2; + private javax.swing.JPanel jPanel3; private javax.swing.JCheckBox miniRibbon; private javax.swing.JButton saveBtn; private javax.swing.JCheckBox showRecent;