package gui; import gui.dialog.AboutDialog; import gui.dialog.CustomizeEntryDialog; import gui.dialog.HelpDialog; import gui.dialog.IncludeDialog; import gui.dialog.NewEntryDialog; import gui.dialog.OpenFileDialog; import gui.dialog.PlainTextDialog; import gui.dialog.PreferencesDialog; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBoxMenuItem; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButtonMenuItem; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.JToolBar; import javax.swing.ListSelectionModel; import java.awt.BorderLayout; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Image; import java.awt.Toolkit; import java.awt.ComponentOrientation; import java.awt.Point; import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.io.File; import java.util.Vector; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import parser.FileConnector; import parser.Parser; import parser.ParserException; import container.ContainerObject; import ctex.Entity; import ctex.Main; public class Frame extends JFrame { private static final long serialVersionUID = 1L; private final Frame thisFrame; private JPanel jContentPane = null; private JToolBar toolBar = new JToolBar(); // ToolBar private JPanel toolBarPanel = new JPanel(); private Statusbar statusBar = new Statusbar(4); private JLabel logo = new JLabel(new ImageIcon("images/logo.jpeg")); // Logo // Instance of CTex_NewEntryDialog, so the JFramacsac.xtxe knows which // Button was pressed there private NewEntryDialog entryDialog; private boolean itemOff = true; // Undo Redo Manager private Undomanager myUndoManager = new Undomanager(); private TabPanel tableTabPanel; //Variables for the menuBar private JMenuBar menuBar = new JMenuBar(); private JMenu fileMenu, editMenu, viewMenu, extraMenu, helpMenu; //This Item of File //This Item of Edit private JMenuItem editInclude, viewRefresh; //This Item of View private ButtonGroup viewItemGroup; private JRadioButtonMenuItem viewItem1, viewItem2; private JCheckBoxMenuItem togglePreviewItem; //This Item of Extra //private JMenuItem preferencesItem; //This Item of Help private JMenuItem aboutItem, importFile; //This Item with Shortcuts private ShortcutB myShortcut; // Variables for the toolBar private JButton newEntryButton, newDatabaseButton, openButton, saveButton, saveAsButton, pdfButton, howToButton, searchButton, nextSearchButton, prevSearchButton; private JTextField searchField; // Contains the resulting indices from the performed search private Vector<Integer> searchResults = new Vector<Integer>(); private JLabel searchResultsLabel; /** * * @param indexFrame * @param frameName */ public Frame(int indexFrame, String frameName, final boolean mainwindow) { super(frameName); thisFrame = this; tableTabPanel = new TabPanel(myUndoManager, thisFrame); myShortcut = new ShortcutB(myUndoManager); Image icon = Toolkit.getDefaultToolkit().getImage("images/icon.gif"); setIconImage(icon); setPreferredSize(new Dimension(800, 600)); setSize(new Dimension(800, 600)); // Clicking on X will call closeFrame(boolean isMainWindow) method addWindowListener(new WindowListener() { public void windowClosing(WindowEvent arg0) { closeFrame(mainwindow); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }); setExtendedState(JFrame.MAXIMIZED_BOTH); // Frame opens maximize // Menu begins here initMenuItems(); menuBar.setPreferredSize(new Dimension(600, 20)); menuBar.add(getFileMenu()); menuBar.add(getEditMenu()); menuBar.add(getViewMenu()); menuBar.add(getExtraMenu()); menuBar.add(getHelpMenu()); // Exit option on File -> Exit myShortcut.keys.get(7).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { closeFrame(mainwindow); } }); // Frame settings setJMenuBar(menuBar); setContentPane(getContenPane()); // Turn off items that can't be used without a database setIconsEnabled(false); pack(); setVisible(true); } /** * * @param indexFrame * @param frameName * @param name * @param tableScrollPane */ public Frame(int indexFrame, String frameName, String name, String compTitle, JSplitPane model){ super (frameName + " - " + (indexFrame + 1)); thisFrame = this; tableTabPanel = new TabPanel(myUndoManager, thisFrame); myShortcut = new ShortcutB(myUndoManager); // Clicking on X will call closeFrame(boolean isMainWindow) method addWindowListener(new WindowListener() { public void windowClosing(WindowEvent arg0) { closeFrame(false); } public void windowActivated(WindowEvent e) {} public void windowClosed(WindowEvent e) {} public void windowDeactivated(WindowEvent e) {} public void windowDeiconified(WindowEvent e) {} public void windowIconified(WindowEvent e) {} public void windowOpened(WindowEvent e) {} }); setPreferredSize(new Dimension(800, 600)); setSize(new Dimension(800, 600)); // Menu begins here initMenuItems(); menuBar.add(getFileMenu()); menuBar.add(getEditMenu()); menuBar.add(getViewMenu()); menuBar.add(getExtraMenu()); menuBar.add(getHelpMenu()); // Frame settings setJMenuBar(menuBar); setContentPane(getContenPane()); pack(); setVisible(true); //add new TabelTab in new Frame addTableTab(name, ((ScrollPane) model.getTopComponent()).getModel()); if (model.getBottomComponent() != null){ if (model.getBottomComponent().getClass().getName() == "gui.CTex_EditorPanel"){ // That is a new Editor // object hollen ContainerObject obj = (((EditorPanel) model.getBottomComponent()).getDb().getObject( ((EditorPanel) model.getBottomComponent()).getObject().getKey())); tableTabPanel.setBottomComponentofSplitPane(new EditorPanel(((EditorPanel) model.getBottomComponent()).getDb(), tableTabPanel, myUndoManager, obj)); } else if (model.getBottomComponent().getClass().getName() == "gui.CTex_EntryPanel") { // That is a new Text Area Tab if (((EntryPanel) model.getBottomComponent()) != null) { // object hollen ContainerObject obj; try { obj = getSelectedEntity().getDb().getObject( ((EntryPanel) model.getBottomComponent()).getObject().getKey()); tableTabPanel.setBottomComponentofSplitPane(new EntryPanel(getSelectedEntity().getDb(), tableTabPanel, myUndoManager, obj, thisFrame)); } catch (entityIsNull e1) { // TODO Auto-generated catch block e1.printStackTrace(); } ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).requestFocusInWindow(); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).setFocus(); } } } } private void initMenuItems(){ fileMenu = new JMenu(Main.myLang.getString("menu.file")); fileMenu.setMnemonic(Main.myLang.getString("menu.file").charAt(0)); editMenu = new JMenu(Main.myLang.getString("menu.edit")); editMenu.setMnemonic(Main.myLang.getString("menu.edit").charAt(0)); viewMenu = new JMenu(Main.myLang.getString("menu.view")); viewMenu.setMnemonic(Main.myLang.getString("menu.view").charAt(0)); extraMenu = new JMenu(Main.myLang.getString("menu.extra")); extraMenu.setMnemonic(Main.myLang.getString("menu.extra").charAt(0)); helpMenu = new JMenu(Main.myLang.getString("menu.help")); helpMenu.setMnemonic(Main.myLang.getString("menu.help").charAt(0)); editInclude = new JMenuItem(Main.myLang.getString("menu.edit.editinclude")); //preferencesItem = new JMenuItem(CTex_Main.myLang.getString("menu.extra.preferences")); aboutItem = new JMenuItem(Main.myLang.getString("menu.help.about")); importFile = new JMenuItem(Main.myLang.getString("menu.file.import")); } /** * This method initializes File Menue * @return javax.swing.JToolBar */ private JMenu getFileMenu () { fileMenu.setLocation(new Point(0, 0)); fileMenu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); myShortcut.keys.get(0).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { Main.addFrame(); } }); myShortcut.keys.get(1).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } new OpenFileDialog(thisFrame, 1); } }); myShortcut.keys.get(2).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } new OpenFileDialog(thisFrame, 2); } }); myShortcut.keys.get(3).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } new OpenFileDialog(thisFrame, 3); } }); myShortcut.keys.get(4).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { save(); } }); myShortcut.keys.get(5).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveAs(); } }); myShortcut.keys.get(7).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { dispose(); } }); importFile.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setCursorWait(); Entity entity; try { entity = getSelectedEntity(); File f; JFileChooser openFile = new JFileChooser(); openFile.setFileFilter(new FilenameFilter("CrossTeX (*.xtx) and BibTeX (*.bib) files", new String[] {"xtx", "bib"})); openFile.setAcceptAllFileFilterUsed(false); int returnVal = openFile.showOpenDialog(importFile); if (returnVal == JFileChooser.APPROVE_OPTION) { f = openFile.getSelectedFile(); String filePath = f.getPath(); FileConnector theFile = new FileConnector(filePath); theFile.readFileContent(); Parser theParser = new Parser(theFile.getFileContent()); try { theParser.setFrame(thisFrame); theParser.proof(entity.getDb(), false); theParser.finalize(); } catch (ParserException exc){ JOptionPane.showMessageDialog(thisFrame, e.toString(), "Parser", JOptionPane.OK_OPTION); } // Model u. Table update entity.getTableModel().setChanged(true); //tableTab.setTabTitleMarked(); entity.getTableModel().refreshModel(); entity.getTableModel().fireTableStructureChanged(); entity.getTableModel().fireTableDataChanged(); } } catch (entityIsNull e1) { } setCursorNormal(); } }); fileMenu.add(myShortcut.keys.get(0)); fileMenu.add(myShortcut.keys.get(14)); fileMenu.add(myShortcut.keys.get(1)); fileMenu.add(myShortcut.keys.get(2)); fileMenu.add(myShortcut.keys.get(3)); fileMenu.addSeparator(); fileMenu.add(myShortcut.keys.get(4)); fileMenu.add(myShortcut.keys.get(5)); fileMenu.add(importFile); fileMenu.addSeparator(); fileMenu.add(myShortcut.keys.get(7)); return fileMenu; } private JMenu getEditMenu() { editMenu.setLocation(new Point(0, 0)); editMenu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); editMenu.add(myShortcut.getButtons().get(8)); editMenu.add(myShortcut.getButtons().get(9)); editMenu.addSeparator(); // Opens JDialog called CTex_NewEntryDialog myShortcut.keys.get(10).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { newEntry(); } }); editMenu.add(myShortcut.keys.get(10)); editMenu.add(myShortcut.keys.get(6)); editMenu.addSeparator(); myShortcut.keys.get(6).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { entryDialog = new NewEntryDialog(getSelectedEntity().getDb()); } catch (entityIsNull e1) { } if (entryDialog.getPressedButton() != null) { try { int obj = -1; PlainTextDialog plainEditor = new PlainTextDialog(entryDialog.getPressedButton(), getSelectedEntity().getDb()); obj = plainEditor.getObj(); if(obj >= 0){ getSelectedEntity().getTableModel().setChanged(true); getSelectedEntity().getTableModel().refreshModel(getSelectedEntity().getDb().getObject(obj)); getSelectedEntity().getTableModel().fireTableStructureChanged(); getSelectedEntity().getTableModel().fireTableDataChanged(); /* * Bottom Component init */ // TabOffnen tableTabPanel.setBottomComponentofSplitPane(new EntryPanel(getSelectedEntity().getDb(), tableTabPanel, myUndoManager, getSelectedEntity().getDb().getObject(obj), thisFrame)); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).requestFocusInWindow(); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).setFocus(); } } catch (entityIsNull e1) { } } } }); // editEntryItem is number 11 myShortcut.keys.get(11).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { if (tableTabPanel.getTable().getSelectedRow() != -1) { int index = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); tableTabPanel.setBottomComponentofSplitPane(new EntryPanel( getSelectedEntity().getDb(), tableTabPanel.getTab(), myUndoManager, getSelectedEntity().getTableModel().getTableContent().get(index), thisFrame ) ); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).requestFocusInWindow(); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).setFocus(); } } catch (entityIsNull e1) { } } }); editMenu.add(myShortcut.keys.get(11)); // editWithEditorItem is number 12 myShortcut.keys.get(12).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (tableTabPanel.getTable().getSelectedRow() != -1) { int index = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); try { ContainerObject selectedObject = getSelectedEntity().getTableModel().getTableContent().get(index); tableTabPanel.setBottomComponentofSplitPane(new EditorPanel(getSelectedEntity().getDb(), tableTabPanel.getTab(), myUndoManager, selectedObject)); ((EditorPanel) tableTabPanel.getBottomComponentofSplitPane()).requestFocusInWindow(); ((EditorPanel) tableTabPanel.getBottomComponentofSplitPane()).setFocus(); } catch (entityIsNull e1) { } } } }); editMenu.add(myShortcut.keys.get(12)); editMenu.addSeparator(); // ActionListener to cite a selected key myShortcut.keys.get(14).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { if (getSelectedEntity() != null) { if (tableTabPanel.getTable().getSelectedRow() != -1) { int index = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); String key = getSelectedEntity().getTableModel().getTableContent().get(index).getKey(); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection("\\cite{" + key + "}"), null); } } } catch (entityIsNull e1){ } } }); // cite key is number 14 editMenu.add(myShortcut.keys.get(14)); // ActionListener just to copy a selected key // Info: Same as above, but just copies the key to clipboard (without \cite{}) myShortcut.keys.get(15).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { if (getSelectedEntity() != null) { if (tableTabPanel.getTable().getSelectedRow() != -1) { int index = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); String key = getSelectedEntity().getTableModel().getTableContent().get(index).getKey(); Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(key), null); } } } catch (entityIsNull e1){ } } }); // copy key is number 15 editMenu.add(myShortcut.keys.get(15)); editMenu.addSeparator(); // Opens JDialog called CTex_CustomizeEntryDialog // customizeEntryItem is number 13 myShortcut.keys.get(13).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { new CustomizeEntryDialog(getSelectedEntity().getDb()); getSelectedEntity().getTableModel().refreshTypes(); } catch (entityIsNull e1) { } } }); editMenu.add(myShortcut.keys.get(13)); editInclude.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { new IncludeDialog(thisFrame, getSelectedEntity().getDb()); } catch (entityIsNull e1) { } } }); editMenu.add(editInclude); return editMenu; } /* Menu to t between different views of the JTable */ private JMenu getViewMenu() { viewMenu.setLocation(new Point(0, 0)); viewMenu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); // Opens JDialog called CTex_NewEntryDialog viewRefresh = new JMenuItem(Main.myLang.getString("menu.view.refresh")); viewRefresh.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { //TODO: try { getSelectedEntity().getDb().getTablePrifix(); } catch (entityIsNull e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { getSelectedEntity().getTableModel().refreshModel(); } catch (entityIsNull e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }); viewMenu.add(viewRefresh); viewItemGroup = new ButtonGroup(); viewItem1 = new JRadioButtonMenuItem(Main.myLang.getString("menu.view.viewitem1"), true); viewItem1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { getSelectedEntity().getTableModel().setView(true); } catch (entityIsNull e1) { } } }); viewMenu.add(viewItem1); viewItemGroup.add(viewItem1); viewItem2 = new JRadioButtonMenuItem(Main.myLang.getString("menu.view.viewitem2")); viewItem2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { getSelectedEntity().getTableModel().setView(false); } catch (entityIsNull e1) { } } }); viewMenu.add(viewItem2); viewItemGroup.add(viewItem2); viewMenu.addSeparator(); togglePreviewItem = new JCheckBoxMenuItem(Main.myLang.getString("menu.view.togglepreview")); togglePreviewItem.setSelected(true); togglePreviewItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { boolean isShowPreview = getSelectedEntity().getTableModel().getShowPreview(); togglePreviewItem.setSelected(!isShowPreview); getSelectedEntity().getTableModel().setShowPreview(!isShowPreview); } catch (entityIsNull e1) { e1.printStackTrace(); } } }); viewMenu.add(togglePreviewItem); return viewMenu; } /** * This method initializes Extra Menu * @return javax.swing.JToolBar * @author SamyStyle */ private JMenu getExtraMenu() { extraMenu.setLocation(new Point(0, 0)); extraMenu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); extraMenu.add(myShortcut.keys.get(18)); extraMenu.add(myShortcut.keys.get(19)); // searchItem is number 18 myShortcut.keys.get(18).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { searchField.requestFocus(); searchField.selectAll(); } }); // preferenceItem is number 19 myShortcut.keys.get(19).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new PreferencesDialog(myShortcut, tableTabPanel); } }); return extraMenu; } /** * This method initializes Help Menu * @return javax.swing.JToolBar */ private JMenu getHelpMenu() { helpMenu.setLocation(new Point(0, 0)); helpMenu.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); //helpItem is number 16 myShortcut.keys.get(16).addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new HelpDialog(); } }); helpMenu.add(myShortcut.keys.get(16)); aboutItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new AboutDialog(); } }); helpMenu.add(aboutItem); return helpMenu; } /** * * @return javax.swing.JToolBar */ private JToolBar getToolBar() { newEntryButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/report_add.png"))); pdfButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/page_white_acrobat.png"))); newDatabaseButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/page_white_add.png"))); openButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/folder.png"))); saveButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/disk.png"))); saveAsButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/disk_multiple.png"))); searchButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/find.png"))); howToButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/help.png"))); searchField = new JTextField(""); searchResultsLabel = new JLabel(Main.myLang.getString("menu.bar.searchresults") + "0"); prevSearchButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/resultset_previous.png"))); nextSearchButton = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/resultset_next.png"))); newEntryButton.setToolTipText(Main.myLang.getString("menu.edit.newentry") + " [" + myShortcut.keys.get(1).getAccelerator().toString().replaceAll("pressed", "+") + "]"); pdfButton.setToolTipText(Main.myLang.getString("menu.edit.importfrompdf") + " [" + myShortcut.keys.get(6).getAccelerator().toString().replaceAll("pressed", "+") + "]"); newDatabaseButton.setToolTipText(Main.myLang.getString("menu.file.newdb") + " [" + myShortcut.keys.get(1).getAccelerator().toString().replaceAll("pressed", "+") + "]"); openButton.setToolTipText(Main.myLang.getString("menu.file.open") + " [" + myShortcut.keys.get(2).getAccelerator().toString().replaceAll("pressed", "+") + "]"); saveButton.setToolTipText(Main.myLang.getString("menu.file.savedb") + " [" + myShortcut.keys.get(4).getAccelerator().toString().replaceAll("pressed", "+") + "]"); saveAsButton.setToolTipText(Main.myLang.getString("menu.file.savedbas") + " [" + myShortcut.keys.get(5).getAccelerator().toString().replaceAll("pressed", "+") + "]"); searchButton.setToolTipText(Main.myLang.getString("menu.extra.search") + " [" + myShortcut.keys.get(18).getAccelerator().toString().replaceAll("pressed", "+") + "]"); howToButton.setToolTipText(Main.myLang.getString("menu.help.howto") + " [" + myShortcut.keys.get(16).getAccelerator().toString().replaceAll("pressed", "+") + "]"); newEntryButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (!itemOff) { newEntry(); } } }); pdfButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ActionListener[] actions = myShortcut.keys.get(6).getActionListeners(); if (actions[0] != null) { actions[0].actionPerformed(e); } } }); newDatabaseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } new OpenFileDialog(thisFrame, 1); } }); openButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFileChooser openFile = new JFileChooser(); openFile.setFileFilter(new FilenameFilter("CrossTeX (*.xtx) and BibTeX (*.bib) files", new String[] {"xtx", "bib"})); int returnVal = openFile.showOpenDialog(myShortcut.getButtons().get(1)); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = openFile.getSelectedFile(); Main.addEntityFileStandart(file.getPath(), thisFrame, "UTF-8"); try { // Setting the path of the opened file if (file.getPath().endsWith(".xtx")) { getSelectedEntity().getTableModel().setSavePath(file.getPath()); } } catch (entityIsNull e1) { } // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } } } }); saveButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { save(); } }); saveAsButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { saveAs(); } }); howToButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { new HelpDialog(); } }); searchField.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { searchResults.clear(); searchResultsLabel.setText(Main.myLang.getString("menu.bar.searchresults") + "0"); try { getSelectedEntity().getTableModel().search(searchField.getText()); // Getting the search results searchResults = getSelectedEntity().getTableModel().getSearchResults(); searchResultsLabel.setText(Main.myLang.getString("menu.bar.searchresults") + searchResults.size()); if (searchResults.size() > 0) { int newIndex = tableTabPanel.getTable().getRowSorter().convertRowIndexToView(searchResults.get(0)); ListSelectionModel selection = tableTabPanel.getTable().getSelectionModel(); selection.setSelectionInterval(newIndex, newIndex); tableTabPanel.getTable().setSelectionModel(selection); tableTabPanel.getTable().scrollRectToVisible(tableTabPanel.getTable().getCellRect(newIndex, 0, false)); } } catch (entityIsNull e1) { } } }); // Exact copy of searchField searchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { searchResults.clear(); searchResultsLabel.setText(Main.myLang.getString("menu.bar.searchresults") + "0"); try { getSelectedEntity().getTableModel().search(searchField.getText()); // Getting the search results searchResults = getSelectedEntity().getTableModel().getSearchResults(); searchResultsLabel.setText(Main.myLang.getString("menu.bar.searchresults") + searchResults.size()); if (searchResults.size() > 0) { int newIndex = tableTabPanel.getTable().getRowSorter().convertRowIndexToView(searchResults.get(0)); ListSelectionModel selection = tableTabPanel.getTable().getSelectionModel(); selection.setSelectionInterval(newIndex, newIndex); tableTabPanel.getTable().setSelectionModel(selection); tableTabPanel.getTable().scrollRectToVisible(tableTabPanel.getTable().getCellRect(newIndex, 0, false)); } } catch (entityIsNull e1) { } } }); prevSearchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int selectedRow = -1; searchResults = getSelectedEntity().getTableModel().getSearchResults(); if (tableTabPanel.getTable().getSelectedRow() != -1) { selectedRow = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); if (searchResults.size() > 0) { if (selectedRow > searchResults.firstElement()) { int newIndex = tableTabPanel.getTable().getRowSorter().convertRowIndexToView(getSelectedEntity().getTableModel().getPreviousIndex(selectedRow)); if (newIndex != -1) { ListSelectionModel selection = tableTabPanel.getTable().getSelectionModel(); selection.setSelectionInterval(newIndex, newIndex); tableTabPanel.getTable().setSelectionModel(selection); tableTabPanel.getTable().scrollRectToVisible(tableTabPanel.getTable().getCellRect(newIndex, 0, false)); } } } } } catch (entityIsNull e1) { } } }); nextSearchButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int selectedRow = -1; searchResults = getSelectedEntity().getTableModel().getSearchResults(); if (tableTabPanel.getTable().getSelectedRow() != -1) { selectedRow = tableTabPanel.getTable().getRowSorter().convertRowIndexToModel(tableTabPanel.getTable().getSelectedRow()); if (searchResults.size() > 0) { if (selectedRow < searchResults.lastElement()) { int newIndex = tableTabPanel.getTable().getRowSorter().convertRowIndexToView(getSelectedEntity().getTableModel().getNextIndex(selectedRow)); if (newIndex != -1) { ListSelectionModel selection = tableTabPanel.getTable().getSelectionModel(); selection.setSelectionInterval(newIndex, newIndex); tableTabPanel.getTable().setSelectionModel(selection); tableTabPanel.getTable().scrollRectToVisible(tableTabPanel.getTable().getCellRect(newIndex, 0, false)); } } } } } catch (entityIsNull e1) { } } }); toolBar.add(newEntryButton); toolBar.add(pdfButton); toolBar.add(newDatabaseButton); toolBar.add(openButton); toolBar.add(saveButton); toolBar.add(saveAsButton); toolBar.add(myUndoManager.getUndoButton()); toolBar.add(myUndoManager.getRedoButton()); toolBar.add(howToButton); toolBar.add(searchField); toolBar.add(searchButton); toolBar.add(prevSearchButton); toolBar.add(nextSearchButton); toolBar.add(searchResultsLabel); toolBar.setFloatable(false); return toolBar; } /** * This method initializes jContentPane * @return javax.swing.JPanel */ private JPanel getContenPane() { if (jContentPane == null) { jContentPane = new JPanel(); jContentPane.setLayout(new BorderLayout()); jContentPane.add(getToolbarPane(), BorderLayout.NORTH); jContentPane.add(tableTabPanel, BorderLayout.CENTER); jContentPane.add(getStatusBar(), BorderLayout.SOUTH); } return jContentPane; } private JPanel getStatusBar(){ statusBar.setText(0, "Status Bar"); return statusBar; } /** * * @return javax.swing.JPanel */ private JPanel getToolbarPane(){ toolBarPanel.setPreferredSize(new Dimension(790, 30)); toolBarPanel.setLayout(new BorderLayout()); toolBarPanel.add(getToolBar(), BorderLayout.CENTER); toolBarPanel.add(logo, BorderLayout.EAST); return toolBarPanel; } /** * * @param name * @param model */ public void addTableTab(String name, Model model) { tableTabPanel.addTable(name, model); tableTabPanel.setVisible(true); tableTabPanel.setSelectedIndex(tableTabPanel.getTabCount() - 1); } // Method is called by saveButton and by Shortcut #4 private void save() { try { String savePath = getSelectedEntity().getTableModel().getSavePath(); if (savePath.compareTo("") == 0) { saveAs(); } else { getSelectedEntity().exportToFile("xtx", savePath); getSelectedEntity().getTableModel().setChanged(false); tableTabPanel.setTabTitleUnmarked(); } } catch (entityIsNull e) { } // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } } // Method is called by saveAsButton and by Shortcut #5 private void saveAs() { JFileChooser fc = new JFileChooser(); fc.setFileFilter(new FilenameFilter("BibTeX (*.bib)", "bib")); fc.setFileFilter(new FilenameFilter("CrossTeX (*.xtx)", "xtx")); fc.setAcceptAllFileFilterUsed(false); int returnVal = fc.showSaveDialog(Frame.this); if (returnVal == JFileChooser.APPROVE_OPTION) { try { String extensions = ((FilenameFilter)fc.getFileFilter()).getExtensions(); getSelectedEntity().exportToFile(extensions, fc.getSelectedFile().getAbsolutePath()); getSelectedEntity().getTableModel().setSavePath(fc.getSelectedFile().getAbsolutePath()); getSelectedEntity().getTableModel().setChanged(false); if (tableTabPanel.getSelectedIndex() != -1) { String fileName = fc.getSelectedFile().getAbsolutePath(); fileName = fileName.substring(fileName.lastIndexOf(System.getProperty("file.separator")) + 1); if (!fileName.endsWith(extensions)) { fileName = fileName + "." + extensions; } System.out.print(fileName); tableTabPanel.setTitleAt(tableTabPanel.getSelectedIndex(), fileName); } tableTabPanel.setTabTitleUnmarked(); } catch (entityIsNull e1) { } } // Item aktivieren if (itemOff){ setIconsEnabled(true); itemOff = false; } } // Method is called by addEntryButton and by Shortcut #10 private void newEntry() { try { entryDialog = new NewEntryDialog(getSelectedEntity().getDb()); } catch (entityIsNull e1) { } if (entryDialog.getPressedButton() != null) { try { tableTabPanel.setBottomComponentofSplitPane( new EntryPanel( getSelectedEntity().getDb(), tableTabPanel, entryDialog.getPressedButton(), myUndoManager, thisFrame ) ); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).requestFocusInWindow(); ((EntryPanel) tableTabPanel.getBottomComponentofSplitPane()).setFocus(); } catch (entityIsNull e1) { } } } /* * Enables or disables all needed icons/menu entries */ public void setIconsEnabled(boolean enabled){ saveButton.setEnabled(enabled); myShortcut.keys.get(4).setEnabled(enabled); saveAsButton.setEnabled(enabled); myShortcut.keys.get(5).setEnabled(enabled); pdfButton.setEnabled(enabled); myShortcut.keys.get(6).setEnabled(enabled); myShortcut.keys.get(10).setEnabled(enabled); newEntryButton.setEnabled(enabled); myShortcut.keys.get(11).setEnabled(enabled); myShortcut.keys.get(12).setEnabled(enabled); myShortcut.keys.get(14).setEnabled(enabled); myShortcut.keys.get(15).setEnabled(enabled); myShortcut.keys.get(13).setEnabled(enabled); editInclude.setEnabled(enabled); viewRefresh.setEnabled(enabled); viewItem1.setEnabled(enabled); viewItem2.setEnabled(enabled); importFile.setEnabled(enabled); togglePreviewItem.setEnabled(enabled); } /** * Destruktor */ @Override protected void finalize() throws Throwable { System.out.print("test"); super.finalize(); //not necessary if extending Object. } // Method to prevent the frame from closing when there are unsaved changes public void closeFrame(final boolean isMainWindow) { setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); if (isMainWindow) { System.exit(0); } else { dispose(); } } /** * @author SamyStyle */ public void setCursorWait() { this.setCursor(new Cursor(Cursor.WAIT_CURSOR)); } public void setCursorNormal() { this.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } private Entity getSelectedEntity() throws entityIsNull { if (((Model)tableTabPanel.getTheModel()) != null) { Entity theEntity = ((Model)tableTabPanel.getTheModel()).getEntity(); if (theEntity == null){ throw new entityIsNull(); } return theEntity; } else { throw new entityIsNull(); } } public void setItemOff (){ itemOff = true; } public boolean ItemOff(){ return itemOff; } // Exception for getSelectedEntity() method private class entityIsNull extends Exception{ private static final long serialVersionUID = 1L; public entityIsNull(){ super(); } } public void setBarText(int num, String text) { this.statusBar.setText(num, text); } }