[Squirrel-sql-commits] sql12/app/src/net/sourceforge/squirrel_sql/client/session FileManager.java,1.
A Java SQL client for any JDBC compliant database
Brought to you by:
colbell,
gerdwagner
From: Rob M. <man...@us...> - 2006-01-23 02:50:14
|
Update of /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19414/sql12/app/src/net/sourceforge/squirrel_sql/client/session Modified Files: FileManager.java I18NStrings.properties SQLPanelAPI.java Log Message: 1370186: Prompt the user when closing a session if the SQL entry panel contains statements loaded from a file that were altered at some point, but not saved. Index: SQLPanelAPI.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/SQLPanelAPI.java,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** SQLPanelAPI.java 30 Oct 2005 11:38:39 -0000 1.21 --- SQLPanelAPI.java 23 Jan 2006 02:50:04 -0000 1.22 *************** *** 21,37 **** * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ! import javax.swing.*; import net.sourceforge.squirrel_sql.client.session.event.IResultTabListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLExecutionListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLPanelListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLResultExecuterTabListener; import net.sourceforge.squirrel_sql.client.session.mainpanel.ISQLResultExecuter; import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLHistoryItem; import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLPanel; ! import net.sourceforge.squirrel_sql.client.session.action.ViewObjectAtCursorInObjectTreeAction; ! import net.sourceforge.squirrel_sql.client.session.action.ToolsPopupAction; ! import net.sourceforge.squirrel_sql.client.gui.session.ToolsPopupController; ! import net.sourceforge.squirrel_sql.client.resources.SquirrelResources; /** * This class is the API through which plugins can work with the SQL Panel. --- 21,47 ---- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ ! import javax.swing.Action; ! import javax.swing.JFrame; ! import javax.swing.JMenu; ! import javax.swing.JMenuItem; ! import javax.swing.JOptionPane; ! import javax.swing.event.UndoableEditEvent; ! import javax.swing.event.UndoableEditListener; + import net.sourceforge.squirrel_sql.client.gui.session.ToolsPopupController; + import net.sourceforge.squirrel_sql.client.resources.SquirrelResources; + import net.sourceforge.squirrel_sql.client.session.action.ToolsPopupAction; + import net.sourceforge.squirrel_sql.client.session.action.ViewObjectAtCursorInObjectTreeAction; import net.sourceforge.squirrel_sql.client.session.event.IResultTabListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLExecutionListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLPanelListener; import net.sourceforge.squirrel_sql.client.session.event.ISQLResultExecuterTabListener; + import net.sourceforge.squirrel_sql.client.session.event.SessionAdapter; + import net.sourceforge.squirrel_sql.client.session.event.SessionEvent; import net.sourceforge.squirrel_sql.client.session.mainpanel.ISQLResultExecuter; import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLHistoryItem; import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLPanel; ! import net.sourceforge.squirrel_sql.fw.util.StringManager; ! import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory; /** * This class is the API through which plugins can work with the SQL Panel. *************** *** 42,47 **** { /** Internationalized strings for this class. */ ! // private static final StringManager s_stringMgr = ! // StringManagerFactory.getStringManager(SQLPanelAPI.class); /** The SQL Panel. */ --- 52,57 ---- { /** Internationalized strings for this class. */ ! private static final StringManager s_stringMgr = ! StringManagerFactory.getStringManager(SQLPanelAPI.class); /** The SQL Panel. */ *************** *** 51,54 **** --- 61,67 ---- private FileManager _fileManager = new FileManager(this); + private boolean fileOpened = false; + private boolean unsavedEdits = false; + /** * Ctor specifying the panel. *************** *** 67,71 **** --- 80,87 ---- } _panel = panel; + _panel.getSQLEntryPanel().addUndoableEditListener(new SQLEntryUndoListener()); _toolsPopupController = new ToolsPopupController(getSession().getApplication(), _panel, getSession()); + getSession().getApplication().getSessionManager().addSessionListener(new MySessionListener()); + createStandardEntryAreaMenuItems(); } *************** *** 99,113 **** public void fileSave() { ! _fileManager.save(); } public void fileSaveAs() { ! _fileManager.saveAs(); } public void fileOpen() { ! _fileManager.open(); } --- 115,138 ---- public void fileSave() { ! if (_fileManager.save()) { ! unsavedEdits = false; ! getSession().getActiveSessionWindow().setUnsavedEdits(false); ! } } public void fileSaveAs() { ! if (_fileManager.saveAs()) { ! unsavedEdits = false; ! getSession().getActiveSessionWindow().setUnsavedEdits(false); ! } } public void fileOpen() { ! if (_fileManager.open()) { ! fileOpened = true; ! unsavedEdits = false; ! } } *************** *** 567,569 **** --- 592,648 ---- } + /** + * A class to listen for events that indicate that the content in the + * SQLEntryPanel has changed and could be lost. + */ + private class SQLEntryUndoListener implements UndoableEditListener { + + /* (non-Javadoc) + * @see javax.swing.event.UndoableEditListener#undoableEditHappened(javax.swing.event.UndoableEditEvent) + */ + public void undoableEditHappened(UndoableEditEvent e) { + if (fileOpened) { + unsavedEdits = true; + getSession().getActiveSessionWindow().setUnsavedEdits(true); + } + } + + } + + /** + * A session listener that will detect unsaved edits and prompt the user to + * save them when the session is about to be closed. + */ + private class MySessionListener extends SessionAdapter { + + /* (non-Javadoc) + * @see net.sourceforge.squirrel_sql.client.session.event.SessionAdapter#sessionClosing(net.sourceforge.squirrel_sql.client.session.event.SessionEvent) + */ + public void sessionClosing(SessionEvent evt) { + if (evt.getSession().equals(_panel.getSession()) + && unsavedEdits) + { + String msg = s_stringMgr.getString("SQLPanelAPI.unsavedchanges"); + String title = + s_stringMgr.getString("SQLPanelAPI.unsavedchangestitle"); + showConfirmSaveDialog(msg, title); + } + } + + private void showConfirmSaveDialog(final String message, + final String title) + { + JFrame f = getSession().getApplication().getMainFrame(); + int option = + JOptionPane.showConfirmDialog(f, + message, + title, + JOptionPane.YES_NO_OPTION); + if (option == JOptionPane.YES_OPTION) { + fileSaveAs(); + } + } + + } + } Index: FileManager.java =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/FileManager.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** FileManager.java 29 Oct 2005 13:29:51 -0000 1.4 --- FileManager.java 23 Jan 2006 02:50:04 -0000 1.5 *************** *** 34,50 **** } ! public void save() { ! saveIntern(false); } ! public void saveAs() { ! saveIntern(true); } ! public void open() { JFileChooser chooser = new JFileChooser(); chooser.addChoosableFileFilter(new FileExtensionFilter("Text files", new String[]{".txt"})); --- 34,51 ---- } ! public boolean save() { ! return saveIntern(false); } ! public boolean saveAs() { ! return saveIntern(true); } ! public boolean open() { + boolean result = false; JFileChooser chooser = new JFileChooser(); chooser.addChoosableFileFilter(new FileExtensionFilter("Text files", new String[]{".txt"})); *************** *** 75,82 **** --- 76,85 ---- if (chooser.showOpenDialog(frame) == JFileChooser.APPROVE_OPTION) { + result = true; File selectedFile = chooser.getSelectedFile(); loadScript(selectedFile); prefs.setFilePreviousDir(selectedFile.getAbsolutePath()); } + return result; } *************** *** 127,132 **** ! public void saveIntern(boolean toNewFile) { if (toNewFile) { --- 130,136 ---- ! public boolean saveIntern(boolean toNewFile) { + boolean result = false; if (toNewFile) { *************** *** 176,180 **** if (null != _toSaveTo) { ! saveScript(frame, _toSaveTo, false); break; } --- 180,186 ---- if (null != _toSaveTo) { ! if (saveScript(frame, _toSaveTo, false)) { ! result = true; ! } break; } *************** *** 182,185 **** --- 188,192 ---- if (chooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) { + _toSaveTo = chooser.getSelectedFile(); *************** *** 194,197 **** --- 201,205 ---- if (saveScript(frame, _toSaveTo, true)) { + result = true; break; } *************** *** 202,205 **** --- 210,214 ---- } } + return result; } Index: I18NStrings.properties =================================================================== RCS file: /cvsroot/squirrel-sql/sql12/app/src/net/sourceforge/squirrel_sql/client/session/I18NStrings.properties,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** I18NStrings.properties 1 Nov 2005 13:13:13 -0000 1.8 --- I18NStrings.properties 23 Jan 2006 02:50:04 -0000 1.9 *************** *** 29,32 **** --- 29,34 ---- SQLPanelAPI.commit=Commit completed normally. SQLPanelAPI.rollback=Rollback completed normally. + SQLPanelAPI.unsavedchanges=There are unsaved changes. Save them now? + SQLPanelAPI.unsavedchangestitle=Unsaved Changes DataSetUpdateableTableModelImpl.confirmupdateallrows=The table has no columns that can be SELECTed on.\nAll rows will be updated.\nDo you wish to proceed? |