diff --git a/uk/ac/sanger/artemis/components/ActMain.java b/uk/ac/sanger/artemis/components/ActMain.java index 24cc2a37a382d726dccb75919f1f9fd1735e73e3..711a2068920ba82a177b67d6f76f0f8ac8721fed 100644 --- a/uk/ac/sanger/artemis/components/ActMain.java +++ b/uk/ac/sanger/artemis/components/ActMain.java @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ActMain.java,v 1.10 2006-10-18 14:25:23 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ActMain.java,v 1.11 2006-10-23 13:34:12 tjc Exp $ */ package uk.ac.sanger.artemis.components; @@ -31,7 +31,7 @@ import uk.ac.sanger.artemis.*; import uk.ac.sanger.artemis.sequence.Bases; import uk.ac.sanger.artemis.sequence.NoSequenceException; import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; -import uk.ac.sanger.artemis.components.database.DatabaseJFrame; +import uk.ac.sanger.artemis.components.database.DatabaseJPanel; import uk.ac.sanger.artemis.components.database.DatabaseTreeNode; import uk.ac.sanger.artemis.util.*; @@ -41,14 +41,13 @@ import uk.ac.sanger.artemis.io.SimpleEntryInformation; import java.awt.event.*; import java.io.IOException; -import java.io.File; import javax.swing.JFrame; /** * The main window for the Artemis Comparison Tool. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: ActMain.java,v 1.10 2006-10-18 14:25:23 tjc Exp $ + * @version $Id: ActMain.java,v 1.11 2006-10-23 13:34:12 tjc Exp $ **/ public class ActMain extends Splash @@ -96,9 +95,13 @@ public class ActMain extends Splash new ComparatorDialog(ActMain.this).setVisible(true); } }; - makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); + + if(System.getProperty("chado") != null) + makeMenuItem(file_menu, "Open Database and SSH File Manager ...", menu_listener_ssh); + else + makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); - final boolean sanger_options = +/* final boolean sanger_options = Options.getOptions().getPropertyTruthValue("sanger_options"); if(sanger_options) @@ -114,7 +117,7 @@ public class ActMain extends Splash makeMenuItem(file_menu, "Database Entry ...", menu_listener); if(System.getProperty("chado") != null) launchDatabaseJFrame(false); - } + }*/ makeMenuItem(file_menu, "Quit", quit_listener); } @@ -340,9 +343,16 @@ public class ActMain extends Splash DatabaseEntrySource entry_source = new DatabaseEntrySource(); if(!entry_source.setLocation(prompt_user)) return null; - - final DatabaseJFrame frame = new DatabaseJFrame(entry_source, + + JFrame frame = new JFrame("Organism List"); + final DatabaseJPanel pane = new DatabaseJPanel(entry_source, ActMain.this); + frame.getContentPane().add(pane); + frame.pack(); + Utilities.rightJustifyFrame(frame); + frame.setVisible(true); + frame.setJMenuBar(pane.makeMenuBar(entry_source, ActMain.this)); + frame.setVisible(true); getStatusLabel().setText(""); return null; diff --git a/uk/ac/sanger/artemis/components/ArtemisMain.java b/uk/ac/sanger/artemis/components/ArtemisMain.java index de4d9054851efaa66c3fe8bc5924f445bc6a549a..edbb2e7020d492d007f59df69f8e151e1005ba27 100644 --- a/uk/ac/sanger/artemis/components/ArtemisMain.java +++ b/uk/ac/sanger/artemis/components/ArtemisMain.java @@ -20,13 +20,13 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ArtemisMain.java,v 1.21 2006-10-18 14:25:23 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/ArtemisMain.java,v 1.22 2006-10-23 13:34:12 tjc Exp $ */ package uk.ac.sanger.artemis.components; import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; -import uk.ac.sanger.artemis.components.database.DatabaseJFrame; +import uk.ac.sanger.artemis.components.database.DatabaseJPanel; import uk.ac.sanger.artemis.components.filetree.FileManager; import uk.ac.sanger.artemis.components.filetree.LocalAndRemoteFileManager; import uk.ac.sanger.artemis.*; @@ -45,12 +45,13 @@ import java.awt.event.*; import java.awt.Toolkit; import java.io.*; import java.awt.datatransfer.*; +import javax.swing.JFrame; /** * The main window for the Artemis sequence editor. * * @author Kim Rutherford <kmr@sanger.ac.uk> - * @version $Id: ArtemisMain.java,v 1.21 2006-10-18 14:25:23 tjc Exp $ + * @version $Id: ArtemisMain.java,v 1.22 2006-10-23 13:34:12 tjc Exp $ **/ public class ArtemisMain extends Splash @@ -62,6 +63,9 @@ public class ArtemisMain extends Splash private EntryEditVector entry_edit_objects = new EntryEditVector(); protected static FileManager filemanager = null; + + private LocalAndRemoteFileManager fm; + /** * The constructor creates all the components for the main Artemis * window and sets up all the menu callbacks. @@ -82,10 +86,8 @@ public class ArtemisMain extends Splash }; makeMenuItem(file_menu, "Open File Manager ...", menu_listener); - ActionListener menu_listener_ssh = new ActionListener() { - private LocalAndRemoteFileManager fm; public void actionPerformed(ActionEvent event) { if(fm == null) @@ -94,7 +96,11 @@ public class ArtemisMain extends Splash fm.setVisible(true); } }; - makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); + + if(System.getProperty("chado") != null) + makeMenuItem(file_menu, "Open Database and SSH File Manager ...", menu_listener_ssh); + else + makeMenuItem(file_menu, "Open SSH File Manager ...", menu_listener_ssh); final EntrySourceVector entry_sources = getEntrySources(this); @@ -134,12 +140,12 @@ public class ArtemisMain extends Splash final boolean sanger_options = Options.getOptions().getPropertyTruthValue("sanger_options"); - if(sanger_options) +/* if(sanger_options) { makeMenuItem(file_menu, "Database Entry ...", menu_listener); if(System.getProperty("chado") != null) - launchDatabaseJFrame(false); - } + fm = new LocalAndRemoteFileManager(ArtemisMain.this); + }*/ menu_listener = new ActionListener() { @@ -259,9 +265,14 @@ public class ArtemisMain extends Splash if(!entry_source.setLocation(prompt_user)) return null; - final DatabaseJFrame frame = new DatabaseJFrame(entry_source, + JFrame frame = new JFrame("Organism List"); + final DatabaseJPanel pane = new DatabaseJPanel(entry_source, ArtemisMain.this); + frame.getContentPane().add(pane); + frame.pack(); + Utilities.rightJustifyFrame(frame); frame.setVisible(true); + frame.setJMenuBar(pane.makeMenuBar(entry_source, ArtemisMain.this)); getStatusLabel().setText(""); return null; } diff --git a/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java b/uk/ac/sanger/artemis/components/database/DatabaseJPanel.java similarity index 81% rename from uk/ac/sanger/artemis/components/database/DatabaseJFrame.java rename to uk/ac/sanger/artemis/components/database/DatabaseJPanel.java index 52b50161cbb2d9644cb55f11bbb1c7b0224f5e01..b21599debb8eda334dc0b0d647350b7fa8f1c4de 100644 --- a/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java +++ b/uk/ac/sanger/artemis/components/database/DatabaseJPanel.java @@ -1,4 +1,4 @@ -/* DatabaseJFrame.java +/* DatabaseJPanel.java * * created: June 2005 * @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/database/DatabaseJFrame.java,v 1.1 2006-10-18 14:25:23 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/database/DatabaseJPanel.java,v 1.1 2006-10-23 13:34:12 tjc Exp $ */ package uk.ac.sanger.artemis.components.database; @@ -29,12 +29,12 @@ import uk.ac.sanger.artemis.components.*; import uk.ac.sanger.artemis.Entry; import uk.ac.sanger.artemis.sequence.*; +import uk.ac.sanger.artemis.util.InputStreamProgressEvent; import uk.ac.sanger.artemis.util.InputStreamProgressListener; import uk.ac.sanger.artemis.util.OutOfRangeException; import uk.ac.sanger.artemis.util.DatabaseDocument; import uk.ac.sanger.artemis.io.DatabaseDocumentEntry; -import javax.swing.JFrame; import javax.swing.JTree; import javax.swing.JScrollPane; import javax.swing.JSeparator; @@ -60,16 +60,17 @@ import java.awt.Cursor; import java.awt.FontMetrics; import java.io.*; -public class DatabaseJFrame extends JFrame +public class DatabaseJPanel extends JPanel { private JLabel status_line = new JLabel(""); private boolean splitGFFEntry = false; - - public DatabaseJFrame(final DatabaseEntrySource entry_source, - final Splash splash_main) + private JTree tree; + + public DatabaseJPanel(final DatabaseEntrySource entry_source, + final Splash splash_main) { - super("Organism List"); - final JTree tree = entry_source.getDatabaseTree(); + setLayout(new BorderLayout()); + tree = entry_source.getDatabaseTree(); // Listen for when the selection changes. MouseListener mouseListener = new MouseAdapter() @@ -89,10 +90,7 @@ public class DatabaseJFrame extends JFrame screen.height * 6 / 10); scroll.setPreferredSize(dim_frame); - setJMenuBar(makeMenuBar(entry_source, tree, splash_main)); - - JPanel pane = (JPanel)getContentPane(); - pane.add(scroll, BorderLayout.CENTER); + add(scroll, BorderLayout.CENTER); final FontMetrics fm = this.getFontMetrics(status_line.getFont()); @@ -105,16 +103,20 @@ public class DatabaseJFrame extends JFrame Border compound = BorderFactory.createCompoundBorder(raisedbevel, loweredbevel); status_line.setBorder(compound); - pane.add(status_line, BorderLayout.SOUTH); - - pack(); - Utilities.rightJustifyFrame(this); + add(status_line, BorderLayout.SOUTH); + + JLabel title_line = new JLabel("Database List"); + title_line.setMinimumSize(new Dimension(100, font_height)); + title_line.setPreferredSize(new Dimension(100, font_height)); + title_line.setBorder(compound); + add(title_line, BorderLayout.NORTH); } /** - * * Show the selected sequence in the tree - * + * @param entry_source + * @param tree + * @param splash_main */ private void showSelected(final DatabaseEntrySource entry_source, final JTree tree, final Splash splash_main) @@ -141,9 +143,13 @@ public class DatabaseJFrame extends JFrame } /** - * * Retrieve a database entry. - * + * @param id + * @param entry_source + * @param tree + * @param splash_main + * @param node_name + * @param schema */ private void getEntryEditFromDatabase(final String id, final DatabaseEntrySource entry_source, final JTree tree, @@ -161,13 +167,10 @@ public class DatabaseJFrame extends JFrame tree.setCursor(cbusy); try { - final InputStreamProgressListener progress_listener = - splash_main.getInputStreamProgressListener(); - entry_source.setSplitGFF(splitGFFEntry); final Entry entry = entry_source.getEntry(id, schema, - progress_listener); + stream_progress_listener); DatabaseDocumentEntry db_entry = @@ -228,8 +231,14 @@ public class DatabaseJFrame extends JFrame } - private JMenuBar makeMenuBar(final DatabaseEntrySource entry_source, - final JTree tree, final Splash splash_main) + /** + * Create a menu bar + * @param entry_source + * @param splash_main + * @return + */ + public JMenuBar makeMenuBar(final DatabaseEntrySource entry_source, + final Splash splash_main) { JMenuBar mBar = new JMenuBar(); JMenu fileMenu = new JMenu("File"); @@ -275,4 +284,26 @@ public class DatabaseJFrame extends JFrame return mBar; } + + /** + * An InputStreamProgressListener used to update the error label with the + * current number of chars read. + **/ + private final InputStreamProgressListener stream_progress_listener = + new InputStreamProgressListener() + { + public void progressMade(final InputStreamProgressEvent event) + { + final int char_count = event.getCharCount(); + if(char_count == -1) + status_line.setText(""); + else + status_line.setText("chars read so far: " + char_count); + } + + public void progressMade(String progress) + { + status_line.setText(progress); + } + }; } diff --git a/uk/ac/sanger/artemis/components/filetree/LocalAndRemoteFileManager.java b/uk/ac/sanger/artemis/components/filetree/LocalAndRemoteFileManager.java index 88309a378847b81099e740a652a059e8a93eb10e..731b8e41a35cfae1e7482d9768c59d0239e12260 100644 --- a/uk/ac/sanger/artemis/components/filetree/LocalAndRemoteFileManager.java +++ b/uk/ac/sanger/artemis/components/filetree/LocalAndRemoteFileManager.java @@ -21,6 +21,8 @@ package uk.ac.sanger.artemis.components.filetree; +import uk.ac.sanger.artemis.components.database.DatabaseEntrySource; +import uk.ac.sanger.artemis.components.database.DatabaseJPanel; import uk.ac.sanger.artemis.j2ssh.SshLogin; import uk.ac.sanger.artemis.j2ssh.SshFileManager; import uk.ac.sanger.artemis.util.StringVector; @@ -28,6 +30,7 @@ import uk.ac.sanger.artemis.Options; import javax.swing.table.TableColumn; import javax.swing.*; + import java.io.File; import java.io.FileFilter; import java.awt.event.*; @@ -59,7 +62,7 @@ public class LocalAndRemoteFileManager extends JFrame */ public LocalAndRemoteFileManager(JFrame frame, FileFilter filter) { - super("File Manager"); + super(); final JPanel localPanel = new JPanel(new BorderLayout()); @@ -78,7 +81,7 @@ public class LocalAndRemoteFileManager extends JFrame // final Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); final Dimension panelSize = new Dimension((int)(screen.getWidth()/3), - (int)(screen.getHeight()/3)); + (int)(screen.getHeight()/4)); String remote_name = ""; final JLabel remote_status_line = getStatusLabel(""); @@ -109,9 +112,11 @@ public class LocalAndRemoteFileManager extends JFrame }); bdown.add(connect); - int ypos = panelSize.height-connect.getPreferredSize().height; + /*int ypos = panelSize.height-connect.getPreferredSize().height; if(ypos>0) - bdown.add(Box.createVerticalStrut(ypos/2)); + bdown.add(Box.createVerticalStrut(ypos/2));*/ + bdown.add(Box.createVerticalGlue()); + remotePanel.add(bdown, BorderLayout.SOUTH); remotePanel.setPreferredSize(panelSize); } @@ -127,13 +132,41 @@ public class LocalAndRemoteFileManager extends JFrame treePane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, localPanel,remotePanel); - + treePane.setOneTouchExpandable(true); + JPanel pane = (JPanel)getContentPane(); pane.setLayout(new BorderLayout()); - pane.add(treePane, BorderLayout.CENTER); - - treePane.setDividerLocation((int)(screen.getHeight()/3)); - setJMenuBar(makeMenuBar(pane,ftree,sshtree,localPanel,remotePanel,treePane,panelSize)); + + if(System.getProperty("chado") != null) + { + setTitle("Database and File Manager"); + DatabaseEntrySource entry_source = new DatabaseEntrySource(); + if(!entry_source.setLocation(true)) + return; + + JLabel label = new JLabel(" Database Loading..."); + JScrollPane dbScroll = new JScrollPane(label); + + DbConnectionThread dbthread = + new DbConnectionThread(dbScroll, panelSize, entry_source); + dbthread.start(); + dbScroll.setPreferredSize(panelSize); + + JSplitPane mainSplit = new JSplitPane(JSplitPane.VERTICAL_SPLIT, + dbScroll, treePane); + treePane.setDividerLocation((int)(screen.getHeight()/4)); + mainSplit.setOneTouchExpandable(true); + mainSplit.setDividerLocation((int)(screen.getHeight()/4)); + pane.add(mainSplit, BorderLayout.CENTER); + } + else + { + setTitle("File Manager"); + pane.add(treePane, BorderLayout.CENTER); + treePane.setDividerLocation((int)(screen.getHeight()/4)); + } + setJMenuBar(makeMenuBar(pane,ftree,sshtree,localPanel, + remotePanel,treePane,panelSize)); localPanel.add(getFileFileterComboBox(ftree), BorderLayout.SOUTH); localTree.setPreferredSize(panelSize); @@ -534,61 +567,33 @@ public class LocalAndRemoteFileManager extends JFrame return path; } - - class UpButton extends JButton + + + public class DbConnectionThread extends Thread { - public void paintComponent(Graphics g) + private JScrollPane dbScroll; + private Dimension panelSize; + private DatabaseEntrySource entry_source; + + public DbConnectionThread(final JScrollPane dbScroll, + final Dimension panelSize, + final DatabaseEntrySource entry_source) { - super.paintComponent(g); - Graphics2D g2 = (Graphics2D)g; - - g2.setColor(new Color(0,128,0)); - float loc1[][] = { {11,18}, {7,18}, {7,14}, - {3,14}, {11,4} }; - - g2.fill(makeShape(loc1)); - g2.setColor(Color.green); - - float loc2[][] = { {11,18}, {15,18}, {15,14}, - {19,14}, {11,4} }; - g2.fill(makeShape(loc2)); - - setSize(22,24); + this.dbScroll = dbScroll; + this.panelSize = panelSize; + this.entry_source = entry_source; } - } - class TextButton extends JButton - { - private String s1; - private String s2; - private Color c; - - public TextButton(String text) + public void run() { - this(text, Color.black); + final DatabaseJPanel dbPane = new DatabaseJPanel(entry_source, + null); + dbPane.setPreferredSize(panelSize); + dbScroll.setViewportView(dbPane); } + } - public TextButton(String text, Color c) - { - super(); - this.s1 = text.substring(0); - this.s2 = text.substring(1); - } - public void paintComponent(Graphics g) - { - super.paintComponent(g); - Graphics2D g2 = (Graphics2D)g; - Font font = new Font("Monospaced", Font.BOLD, 14); - g2.setFont(font); - - g2.setColor(c); - g2.drawString(s1,4,18); - g2.setColor(Color.red); - g2.drawString(s2,10,15); - setSize(22,24); - } - } public static void main(String args[]) @@ -612,5 +617,6 @@ public class LocalAndRemoteFileManager extends JFrame frame.pack(); frame.setVisible(true); } + }