private static void main2(String[] args) { Config.cmdline(args); try { javabughack(); } catch (InterruptedException e) { return; } setupres(); MainFrame f = new MainFrame(null); if (Utils.getprefb("fullscreen", false)) f.setfs(); f.mt.start(); try { f.mt.join(); } catch (InterruptedException e) { f.g.interrupt(); return; } dumplist(Resource.remote().loadwaited(), Config.loadwaited); dumplist(Resource.remote().cached(), Config.allused); if (ResCache.global != null) { try { Writer w = new OutputStreamWriter(ResCache.global.store("tmp/allused"), "UTF-8"); try { Resource.dumplist(Resource.remote().used(), w); } finally { w.close(); } } catch (IOException e) { } } System.exit(0); }
void addButton_actionPerformed(ActionEvent e) { GenericEditor editor = tableModel.getEditor(); editor.editNew(); MainFrame w = (MainFrame) this.getTopLevelAncestor(); w.addToDesktop(editor); editor.show(); }
private void editCurrent() { GenericEditor editor = tableModel.getEditor(); editor.edit(tableModel.getRowData(objectTable.getSelectedRow())); MainFrame w = (MainFrame) this.getTopLevelAncestor(); w.addToDesktop(editor); editor.show(); }
/** * Creates a call to the contact represented by the given string. * * @param contact the contact to call to */ public void createCall(String contact) { CallPanel callPanel = new CallPanel(this, contact); mainFrame.addCallPanel(callPanel); new CreateCallThread(contact, callPanel).start(); }
/** Save the settings of this panel */ private void saveSettings() { settings.setValue( SettingsClass.FCP2_DEFAULT_PRIO_MESSAGE_UPLOAD, uploadPrioTextField.getText()); settings.setValue( SettingsClass.FCP2_DEFAULT_PRIO_MESSAGE_DOWNLOAD, downloadPrioTextField.getText()); settings.setValue( SettingsClass.FCP2_USE_ONE_CONNECTION_FOR_MESSAGES, useOneConnectionForMessagesCheckBox.isSelected()); settings.setValue(SettingsClass.MAX_MESSAGE_DISPLAY, displayDaysTextField.getText()); settings.setValue(SettingsClass.MAX_MESSAGE_DOWNLOAD, downloadDaysTextField.getText()); settings.setValue( SettingsClass.MESSAGE_BASE, messageBaseTextField.getText().trim().toLowerCase()); settings.setValue( SettingsClass.ALWAYS_DOWNLOAD_MESSAGES_BACKLOAD, alwaysDownloadBackloadCheckBox.isSelected()); settings.setValue( SettingsClass.BOARD_AUTOUPDATE_CONCURRENT_UPDATES, concurrentUpdatesTextField.getText()); settings.setValue( SettingsClass.BOARD_AUTOUPDATE_MIN_INTERVAL, minimumIntervalTextField.getText()); // settings.setValue(SettingsClass.BOARD_AUTOUPDATE_ENABLED, // automaticBoardUpdateCheckBox.isSelected()); // we change setting in MainFrame, this is auto-saved during frostSettings.save() MainFrame.getInstance() .setAutomaticBoardUpdateEnabled(automaticBoardUpdateCheckBox.isSelected()); settings.setValue( SettingsClass.STORAGE_STORE_SENT_MESSAGES, storeSentMessagesCheckBox.isSelected()); settings.setValue(SettingsClass.SILENTLY_RETRY_MESSAGES, silentlyRetryCheckBox.isSelected()); settings.setValue(SettingsClass.ALTERNATE_EDITOR_ENABLED, altEditCheckBox.isSelected()); settings.setValue(SettingsClass.ALTERNATE_EDITOR_COMMAND, altEditTextField.getText()); }
/** Load the settings of this panel */ private void loadSettings() { uploadPrioTextField.setText(settings.getValue(SettingsClass.FCP2_DEFAULT_PRIO_MESSAGE_UPLOAD)); downloadPrioTextField.setText( settings.getValue(SettingsClass.FCP2_DEFAULT_PRIO_MESSAGE_DOWNLOAD)); useOneConnectionForMessagesCheckBox.setSelected( settings.getBoolValue(SettingsClass.FCP2_USE_ONE_CONNECTION_FOR_MESSAGES)); displayDaysTextField.setText(settings.getValue(SettingsClass.MAX_MESSAGE_DISPLAY)); downloadDaysTextField.setText(settings.getValue(SettingsClass.MAX_MESSAGE_DOWNLOAD)); messageBaseTextField.setText(settings.getValue(SettingsClass.MESSAGE_BASE)); alwaysDownloadBackloadCheckBox.setSelected( settings.getBoolValue(SettingsClass.ALWAYS_DOWNLOAD_MESSAGES_BACKLOAD)); minimumIntervalTextField.setText( settings.getValue(SettingsClass.BOARD_AUTOUPDATE_MIN_INTERVAL)); concurrentUpdatesTextField.setText( settings.getValue(SettingsClass.BOARD_AUTOUPDATE_CONCURRENT_UPDATES)); // this setting is in MainFrame automaticBoardUpdateCheckBox.setSelected( MainFrame.getInstance().isAutomaticBoardUpdateEnabled()); refreshUpdateState(); storeSentMessagesCheckBox.setSelected( settings.getBoolValue(SettingsClass.STORAGE_STORE_SENT_MESSAGES)); silentlyRetryCheckBox.setSelected(settings.getBoolValue(SettingsClass.SILENTLY_RETRY_MESSAGES)); altEditCheckBox.setSelected(settings.getBoolValue(SettingsClass.ALTERNATE_EDITOR_ENABLED)); altEditTextField.setEnabled(altEditCheckBox.isSelected()); altEditTextField.setText(settings.getValue(SettingsClass.ALTERNATE_EDITOR_COMMAND)); }
/** * Creates a call to the given list of contacts. * * @param contacts the list of contacts to call to */ public void createCall(Vector contacts) { CallPanel callPanel = new CallPanel(this, contacts); mainFrame.addCallPanel(callPanel); new CreateCallThread(contacts, callPanel).start(); }
/** Updates call and hangup buttons' states aa */ private void updateButtonsStateAccordingToSelectedPanel() { Component selectedPanel = mainFrame.getSelectedTab(); if (selectedPanel != null && selectedPanel instanceof CallPanel) { this.hangupButton.setEnabled(true); } else { this.hangupButton.setEnabled(false); } }
/** Ensure that all key events are disabled when the glass pane is up. */ public void testGlassPaneHidesKeyEvents() { SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument doc1 = model.newFile(); final OpenDefinitionsDocument doc2 = model.newFile(); // doc2 is now active Utilities.invokeAndWait( new Runnable() { public void run() { _pane1 = _frame._createDefScrollPane(doc1); _pane2 = _frame._createDefScrollPane(doc2); _defPane1 = (DefinitionsPane) _pane1.getViewport().getView(); _defPane2 = (DefinitionsPane) _pane2.getViewport().getView(); _frame.validate(); _frame.hourglassOn(); _defPane1.processKeyEvent(makeFindKeyEvent(_defPane1, 70)); _frame.validate(); } }); Utilities.clearEventQueue(); assertTrue( "the find replace dialog should not come up", !_frame.getFindReplaceDialog().isDisplayed()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame .getInteractionsPane() .processKeyEvent(makeFindKeyEvent(_frame.getInteractionsPane(), 0)); _frame.validate(); } }); Utilities.clearEventQueue(); assertTrue( "the find replace dialog should not come up", !_frame.getFindReplaceDialog().isDisplayed()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOff(); } }); _log.log("testGlassPaneHidesKeyEvents completed"); }
/** * Removes the given call panel tab. * * @param callPanel the CallPanel to remove */ private void removeCallPanel(CallPanel callPanel) { if (callPanel.getCall() != null && activeCalls.contains(callPanel.getCall())) { this.activeCalls.remove(callPanel.getCall()); } mainFrame.removeCallPanel(callPanel); updateButtonsStateAccordingToSelectedPanel(); }
/** * Tests that the current location of a document is equal to the caret Position after switching to * another document and back. */ public void testDocLocationAfterSwitch() throws BadLocationException { final DefinitionsPane pane = _frame.getCurrentDefPane(); final OpenDefinitionsDocument doc = pane.getOpenDefDocument(); setDocText(doc.getDocument(), "abcd"); Utilities.invokeAndWait( new Runnable() { public void run() { doc.setCurrentLocation(3); pane.setCaretPosition(3); // The caret is not affected by setCurrentLocation } }); assertEquals("Location of old doc before switch", 3, doc.getCurrentLocation()); assertEquals("Location of cursor in old document", 3, pane.getCaretPosition()); // Create a new file SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument oldDoc = doc; final DefinitionsPane oldPane = pane; final OpenDefinitionsDocument newDoc = model.newFile(); // Current pane should be new doc, pos 0 DefinitionsPane curPane; OpenDefinitionsDocument curDoc; curPane = _frame.getCurrentDefPane(); curDoc = curPane.getOpenDefDocument(); // .getDocument(); assertEquals("New curr DefPane's document", newDoc, curDoc); assertEquals("Location in new document", 0, newDoc.getCurrentLocation()); // Switch back to old document model.setActiveNextDocument(); Utilities.clearEventQueue(); assertEquals("Next active doc", oldDoc, model.getActiveDocument()); // Current pane should be old doc, pos 3 curPane = _frame.getCurrentDefPane(); curDoc = curPane.getOpenDefDocument(); // .getDocument(); assertEquals("Next active pane", oldPane, curPane); assertEquals("Current document is old document", oldDoc, curDoc); assertEquals("Location of caret in old document", 3, curPane.getCaretPosition()); _log.log("testDocLocationAfterSwitch completed"); }
private void loadWindowState() { // load size, location and state of window int lastHeight = Core.frostSettings.getIntValue("helpBrowser.lastFrameHeight"); int lastWidth = Core.frostSettings.getIntValue("helpBrowser.lastFrameWidth"); final int lastPosX = Core.frostSettings.getIntValue("helpBrowser.lastFramePosX"); final int lastPosY = Core.frostSettings.getIntValue("helpBrowser.lastFramePosY"); final boolean lastMaximized = Core.frostSettings.getBoolValue("helpBrowser.lastFrameMaximized"); if (lastHeight <= 0 || lastWidth <= 0) { // first call setSize(780, 550); setLocationRelativeTo(MainFrame.getInstance()); return; } final Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize(); if (lastWidth < 100) { lastWidth = 780; } if (lastHeight < 100) { lastHeight = 550; } if ((lastPosX + lastWidth) > scrSize.width) { setSize(780, 550); setLocationRelativeTo(MainFrame.getInstance()); return; } if ((lastPosY + lastHeight) > scrSize.height) { setSize(780, 550); setLocationRelativeTo(MainFrame.getInstance()); return; } setBounds(lastPosX, lastPosY, lastWidth, lastHeight); if (lastMaximized) { setExtendedState(getExtendedState() | Frame.MAXIMIZED_BOTH); } }
public void tearDown() throws Exception { // Utilities.invokeLater(new Runnable() { // public void run() { _frame.dispose(); _frame = null; /* try { */ MainFrameTest.super.tearDown(); /* } */ // catch(Exception e) { throw new UnexpectedException(e); } // } // }); super.tearDown(); }
/** * Implements CallListener.incomingCallReceived. When a call is received creates a call panel and * adds it to the main tabbed pane and plays the ring phone sound to the user. */ public void incomingCallReceived(CallEvent event) { Call sourceCall = event.getSourceCall(); CallPanel callPanel = new CallPanel(this, sourceCall, GuiCallParticipantRecord.INCOMING_CALL); mainFrame.addCallPanel(callPanel); if (mainFrame.getState() == JFrame.ICONIFIED) mainFrame.setState(JFrame.NORMAL); if (!mainFrame.isVisible()) mainFrame.setVisible(true); mainFrame.toFront(); this.callButton.setEnabled(true); this.hangupButton.setEnabled(true); NotificationManager.fireNotification( NotificationManager.INCOMING_CALL, null, "Incoming call recived from: " + sourceCall.getCallParticipants().next()); activeCalls.put(sourceCall, callPanel); this.setCallPanelVisible(true); }
/** * Tests that the clipboard is modified after a "cut line" action. NOTE: Commented out for commit * because of failures, despite proper behavior in GUI. This may not work unless ActionEvents are * dropped in the event queue */ public void testCutLine() throws BadLocationException { // First, copy some data out of the main document. final DefinitionsPane pane = _frame.getCurrentDefPane(); final OpenDefinitionsDocument doc = pane.getOpenDefDocument(); // _frame.setVisible(true); Utilities.invokeAndWait( new Runnable() { public void run() { try { doc.insertString(0, "abcdefg", null); pane.setCaretPosition(5); _frame.validate(); // _frame.paint(_frame.getGraphics()); // ActionMap actionMap = _pane.getActionMap(); // String selString = DefaultEditorKit.selectionEndLineAction; // actionMap.get(selString).actionPerformed(new ActionEvent(pane, 0, // "SelectionEndLine")); pane.setSelectionStart(2); pane.setSelectionEnd(7); _frame.validate(); pane.cut(); // _frame.cutAction.actionPerformed(new ActionEvent(pane, 0, "Cut")); // Get a copy of the current clipboard. // Trigger the Cut Line action from a new position. // _pane.setCaretPosition(2); _frame.validate(); // _frame.paint(_frame.getGraphics()); // _frame._cutLineAction.actionPerformed(new ActionEvent(this, 0, "Cut // Line")); // _frame.dispatchEvent(new ActionEvent(this, 0, "Cut Line")); // Verify that the clipboard contents are what we expect. Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard(); Transferable contents = clip.getContents(null); _data = (String) contents.getTransferData(DataFlavor.stringFlavor); } catch (Throwable t) { listenerFail(t.getMessage()); } } }); Utilities.clearEventQueue(); assertEquals("Clipboard contents should be changed after Cut Line.", "cdefg", _data); // Verify that the document text is what we expect. assertEquals("Current line of text should be truncated by Cut Line.", "ab", doc.getText()); _log.log("testCutLine completed"); }
/** Creates the text area. */ private void initTextArea() { textArea.setOpaque(false); textArea.setEditable(false); StyledDocument doc = textArea.getStyledDocument(); MutableAttributeSet standard = new SimpleAttributeSet(); StyleConstants.setAlignment(standard, StyleConstants.ALIGN_CENTER); StyleConstants.setFontFamily(standard, textArea.getFont().getFamily()); StyleConstants.setFontSize(standard, 12); doc.setParagraphAttributes(0, 0, standard, true); parentWindow.addSearchFieldListener(this); }
private void statusChanged() { Control.Status status = mControl.getCurrentStatus(); switch (status) { case CONNECTING: mStatusBarLabel.setText(Tr.tr("Connecting...")); break; case CONNECTED: mChatView.setColor(Color.WHITE); mStatusBarLabel.setText(Tr.tr("Connected")); NotificationManager.hideAllNotifications(); break; case DISCONNECTING: mStatusBarLabel.setText(Tr.tr("Disconnecting...")); break; case DISCONNECTED: mChatView.setColor(Color.LIGHT_GRAY); mStatusBarLabel.setText(Tr.tr("Not connected")); // if (mTrayIcon != null) // trayIcon.setImage(updatedImage); break; case SHUTTING_DOWN: mMainFrame.save(); mChatListView.save(); mTrayManager.removeTray(); mMainFrame.setVisible(false); mMainFrame.dispose(); break; case FAILED: mStatusBarLabel.setText(Tr.tr("Connecting failed")); break; case ERROR: mChatView.setColor(Color.lightGray); mStatusBarLabel.setText(Tr.tr("Connection error")); break; } mMainFrame.onStatusChanged(status); }
/** * Make sure that the InteractionsPane is displaying the correct InteractionsDocument. * (SourceForge bug #681547) Also make sure this document cannot be edited before the prompt. */ public void testCorrectInteractionsDocument() throws EditDocumentException { InteractionsPane pane = _frame.getInteractionsPane(); final SingleDisplayModel model = _frame.getModel(); InteractionsDJDocument doc = model.getSwingInteractionsDocument(); // Make the test silent Utilities.invokeAndWait( new Runnable() { public void run() { model.getInteractionsModel().getDocument().setBeep(new TestBeep()); } }); Utilities.clearEventQueue(); // Test for strict == equality assertTrue("UI's int. doc. should equals Model's int. doc.", pane.getDocument() == doc); int origLength = doc.getLength(); doc.insertText(1, "typed text", ConsoleDocument.DEFAULT_STYLE); Utilities.clearEventQueue(); assertEquals("Document should not have changed.", origLength, doc.getLength()); _log.log("testCorrectInteractionsDocument completed"); }
/** * Implements ChangeListener.stateChanged. Enables the hangup button if ones selects a tab in the * main tabbed pane that contains a call panel. */ public void stateChanged(ChangeEvent e) { this.updateButtonsStateAccordingToSelectedPanel(); Component selectedPanel = mainFrame.getSelectedTab(); if (selectedPanel == null || !(selectedPanel instanceof CallPanel)) { Iterator callPanels = activeCalls.values().iterator(); while (callPanels.hasNext()) { CallPanel callPanel = (CallPanel) callPanels.next(); callPanel.removeDialogs(); } } }
private View(ViewControl control) { mControl = control; WebLookAndFeel.install(); ToolTipManager.sharedInstance().setInitialDelay(200); mContactListView = new ContactListView(this, ContactList.getInstance()); ContactList.getInstance().addObserver(mContactListView); mChatListView = new ChatListView(this, ChatList.getInstance()); ChatList.getInstance().addObserver(mChatListView); // chat view mChatView = new ChatView(this); ChatList.getInstance().addObserver(mChatView); // content area mContent = new Content(this, mChatView); // search panel mSearchPanel = new SearchPanel(new Table[] {mContactListView, mChatListView}, mChatView); // status bar WebStatusBar statusBar = new WebStatusBar(); mStatusBarLabel = new WebStatusLabel(" "); statusBar.add(mStatusBarLabel); // main frame mMainFrame = new MainFrame(this, mContactListView, mChatListView, mContent, mSearchPanel, statusBar); mMainFrame.setVisible(true); // tray mTrayManager = new TrayManager(this, mMainFrame); ChatList.getInstance().addObserver(mTrayManager); // hotkeys this.setHotkeys(); // notifier mNotifier = new Notifier(this); this.statusChanged(); }
public void actionPerformed(ActionEvent e) { // Ask user to confirm exit. int reply = JOptionPane.showConfirmDialog( main, bundle.getString("Exit_application_?"), bundle.getString("Exit"), JOptionPane.YES_NO_OPTION); if (reply != JOptionPane.YES_OPTION) return; // Save MainFrame's bounds Rectangle r = main.getBounds(); Main.setProperty("window.bounds.width", Integer.toString(r.width)); Main.setProperty("window.bounds.height", Integer.toString(r.height)); Main.setProperty("window.bounds.x", Integer.toString(r.x)); Main.setProperty("window.bounds.y", Integer.toString(r.y)); // System Exit Main.saveProperties(); Main.exit(0); }
/** Initializes the call button. */ private void initSMSButton() { if (!parentWindow.hasOperationSet(OperationSetSmsMessaging.class)) return; smsButton = new JButton(GuiActivator.getResources().getI18NString("service.gui.SEND_SMS")); smsButton.setIcon(GuiActivator.getResources().getImage("service.gui.icons.SMS_BUTTON_ICON")); buttonPanel.add(smsButton); smsButton.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent e) { final String searchText = parentWindow.getCurrentSearchText(); if (searchText == null) return; SMSManager.sendSMS(smsButton, searchText); } }); }
/** * Creates the <tt>UnknownContactPanel</tt> by specifying the parent window. * * @param window the parent window */ public UnknownContactPanel(MainFrame window) { super(new BorderLayout()); this.parentWindow = window; TransparentPanel mainPanel = new TransparentPanel(new BorderLayout()); this.add(mainPanel, BorderLayout.NORTH); if (!ConfigurationUtils.isAddContactDisabled()) { initAddContactButton(); } initCallButton(); initSMSButton(); initTextArea(); mainPanel.add(textArea, BorderLayout.CENTER); if (callButton.getParent() != null) { textArea.setText( GuiActivator.getResources() .getI18NString( "service.gui.NO_CONTACTS_FOUND", new String[] {'"' + parentWindow.getCurrentSearchText() + '"'})); } else { textArea.setText( GuiActivator.getResources().getI18NString("service.gui.NO_CONTACTS_FOUND_SHORT")); } if (buttonPanel.getComponentCount() > 0) { TransparentPanel southPanel = new TransparentPanel(new FlowLayout(FlowLayout.CENTER)); southPanel.add(buttonPanel); mainPanel.add(southPanel, BorderLayout.SOUTH); } loadSkin(); }
/** * Implements ListSelectionListener.valueChanged. Enables or disables call and hangup buttons * depending on the selection in the contactlist. */ public void valueChanged(ListSelectionEvent e) { Object o = mainFrame.getContactListPanel().getContactList().getSelectedValue(); if ((e.getFirstIndex() != -1 || e.getLastIndex() != -1) && (o instanceof MetaContact)) { setCallMetaContact(true); // Switch automatically to the appropriate pps in account selector // box and enable callButton if telephony is supported. Contact contact = ((MetaContact) o).getDefaultContact(OperationSetBasicTelephony.class); if (contact != null) { callButton.setEnabled(true); if (contact.getProtocolProvider().isRegistered()) getAccountSelectorBox().setSelected(contact.getProtocolProvider()); } else { callButton.setEnabled(false); } } else if (phoneNumberCombo.isComboFieldEmpty()) { callButton.setEnabled(false); } }
/** Tests that the save button does not set itself as enabled immediately after opening a file. */ public void testSaveButtonEnabled() throws IOException { String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); File forceOpenClass1_file = new File(_tempDir, "ForceOpenClass1.java"); String forceOpenClass1_string = "public class ForceOpenClass1 {\n" + " ForceOpenClass2 class2;\n" + " ForceOpenClass3 class3;\n\n" + " public ForceOpenClass1() {\n" + " class2 = new ForceOpenClass2();\n" + " class3 = new ForceOpenClass3();\n" + " }\n" + "}"; IOUtil.writeStringToFile(forceOpenClass1_file, forceOpenClass1_string); forceOpenClass1_file.deleteOnExit(); // _frame.setVisible(true); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.pack(); _frame.open( new FileOpenSelector() { public File[] getFiles() { File[] return_me = new File[1]; return_me[0] = new File(_tempDir, "ForceOpenClass1.java"); return return_me; } }); } }); Utilities.clearEventQueue(); assertTrue( "the save button should not be enabled after opening a document", !_frame.isSaveEnabled()); _log.log("testSaveButtonEnabled completed"); }
/** Hides the panel containing call and hangup buttons. */ public void setCallPanelVisible(boolean isVisible) { if (isVisible) { this.add(comboPanel, BorderLayout.NORTH); this.add(buttonsPanel, BorderLayout.CENTER); this.minimizeButtonPanel.removeAll(); this.minimizeButtonPanel.add(minimizeButton); } else { this.remove(comboPanel); this.remove(buttonsPanel); this.minimizeButtonPanel.removeAll(); this.minimizeButtonPanel.add(restoreButton); if (mainFrame.isVisible()) this.mainFrame.getContactListPanel().getContactList().requestFocus(); } if (ConfigurationManager.isCallPanelShown() != isVisible) ConfigurationManager.setShowCallPanel(isVisible); this.mainFrame.validate(); }
private void removeCurrent() { LogicItem l = (LogicItem) tableModel.getRowData(objectTable.getSelectedRow()); tableModel.remove(objectTable.getSelectedRow()); MainFrame mf = (MainFrame) this.getTopLevelAncestor(); mf.refreshLists(l, transport.client.tablemodel.GenericTableModel.REFRESH_DELETE); }
/** * A Test to guarantee that the Dancing UI bug will not rear its ugly head again. Basically, add a * component listener to the leftComponent of _docSplitPane and make certain its size does not * change while compiling a class which depends on another class. */ public void testDancingUIFileOpened() throws IOException { // System.out.println("DEBUG: Entering messed up test"); /** * Maybe this sequence of calls should be incorporated into one function createTestDir(), which * would get the username and create the temporary directory. Only sticky part is deciding where * to put it, in FileOps maybe? */ _log.log("Starting testingDancingUIFileOpened"); final GlobalModel _model = _frame.getModel(); String user = System.getProperty("user.name"); _tempDir = IOUtil.createAndMarkTempDirectory("DrJava-test-" + user, ""); File forceOpenClass1_file = new File(_tempDir, "ForceOpenClass1.java"); String forceOpenClass1_string = "public class ForceOpenClass1 {\n" + " ForceOpenClass2 class2;\n" + " ForceOpenClass3 class3;\n\n" + " public ForceOpenClass1() {\n" + " class2 = new ForceOpenClass2();\n" + " class3 = new ForceOpenClass3();\n" + " }\n" + "}"; File forceOpenClass2_file = new File(_tempDir, "ForceOpenClass2.java"); String forceOpenClass2_string = "public class ForceOpenClass2 {\n" + " inx x = 4;\n" + "}"; File forceOpenClass3_file = new File(_tempDir, "ForceOpenClass3.java"); String forceOpenClass3_string = "public class ForceOpenClass3 {\n" + " String s = \"asf\";\n" + "}"; IOUtil.writeStringToFile(forceOpenClass1_file, forceOpenClass1_string); IOUtil.writeStringToFile(forceOpenClass2_file, forceOpenClass2_string); IOUtil.writeStringToFile(forceOpenClass3_file, forceOpenClass3_string); forceOpenClass1_file.deleteOnExit(); forceOpenClass2_file.deleteOnExit(); forceOpenClass3_file.deleteOnExit(); _log.log("DancingUIFileOpened Set Up"); // _frame.setVisible(true); // set up listeners and signal flags final ComponentAdapter listener = new ComponentAdapter() { public void componentResized(ComponentEvent event) { _testFailed = true; fail("testDancingUI: Open Documents List danced!"); } }; final SingleDisplayModelFileOpenedListener openListener = new SingleDisplayModelFileOpenedListener(); final SingleDisplayModelCompileListener compileListener = new SingleDisplayModelCompileListener(); _openDone = false; Utilities.invokeAndWait( new Runnable() { public void run() { // _frame.setVisible(true); _frame.pack(); _frame.addComponentListenerToOpenDocumentsList(listener); } }); Utilities.clearEventQueue(); _model.addListener(openListener); _log.log("opening file"); Utilities.invokeLater( new Runnable() { public void run() { _frame.open( new FileOpenSelector() { public File[] getFiles() { File[] return_me = new File[1]; return_me[0] = new File(_tempDir, "ForceOpenClass1.java"); return return_me; } }); } }); Utilities.clearEventQueue(); /* wait until file has been open and active document changed. */ synchronized (_openLock) { try { while (!_openDone) _openLock.wait(); } catch (InterruptedException e) { fail(e.toString()); } } _model.removeListener(openListener); _log.log("File opened"); _compileDone = false; _model.addListener(compileListener); // save and compile the new file asynchronously Utilities.invokeLater( new Runnable() { public void run() { _log.log("saving all files"); _frame._saveAll(); _log.log("invoking compileAll action"); _frame.getCompileAllButton().doClick(); } }); Utilities.clearEventQueue(); synchronized (_compileLock) { try { while (!_compileDone) _compileLock.wait(); } catch (InterruptedException e) { fail(e.toString()); } } _log.log("File saved and compiled"); if (!IOUtil.deleteRecursively(_tempDir)) System.err.println( "Couldn't fully delete directory " + _tempDir.getAbsolutePath() + "\nDo it by hand.\n"); _log.log("testDancingUIFileOpened completed"); }
/** * Ensure that a document's editable status is set appropriately throughout the compile process. * Since the behavior is interesting only when the model changes its active document, that's what * this test looks most like. */ public void testGlassPaneEditableState() { SingleDisplayModel model = _frame.getModel(); final OpenDefinitionsDocument doc1 = model.newFile(); final OpenDefinitionsDocument doc2 = model.newFile(); // doc2 is now active Utilities.invokeAndWait( new Runnable() { public void run() { _pane1 = _frame._createDefScrollPane(doc1); _pane2 = _frame._createDefScrollPane(doc2); _defPane1 = (DefinitionsPane) _pane1.getViewport().getView(); _defPane2 = (DefinitionsPane) _pane2.getViewport().getView(); _frame._switchDefScrollPane(); } }); Utilities.clearEventQueue(); // Execute all pending asynchronous tasks; assertTrue("Start: defPane1", _defPane1.isEditable()); assertTrue("Start: defPane2", _defPane2.isEditable()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOn(); } }); Utilities.clearEventQueue(); assertTrue("Glass on: defPane1", _defPane1.isEditable()); assertTrue("Glass on: defPane2", (!_defPane2.isEditable())); model.setActiveDocument(doc1); Utilities.invokeAndWait( new Runnable() { public void run() { _frame._switchDefScrollPane(); } }); Utilities.clearEventQueue(); assertTrue("Doc Switch: defPane1", (!_defPane1.isEditable())); assertTrue("Doc Switch: defPane2", _defPane2.isEditable()); Utilities.invokeAndWait( new Runnable() { public void run() { _frame.hourglassOff(); } }); Utilities.clearEventQueue(); assertTrue("End: defPane1", _defPane1.isEditable()); assertTrue("End: defPane2", _defPane2.isEditable()); _log.log("testGlassPaneEditableState completed"); }
/** Tests that undoing/redoing a multi-line indent will restore the caret position. */ public void testMultilineIndentAfterScroll() throws BadLocationException, InterruptedException { final String text = "public class stuff {\n" + "private int _int;\n" + "private Bar _bar;\n" + "public void foo() {\n" + "_bar.baz(_int);\n" + "}\n" + "}\n"; final String indented = "public class stuff {\n" + " private int _int;\n" + " private Bar _bar;\n" + " public void foo() {\n" + " _bar.baz(_int);\n" + " }\n" + "}\n"; final int newPos = 20; final DefinitionsPane pane = _frame.getCurrentDefPane(); final OpenDefinitionsDocument doc = pane.getOpenDefDocument(); setConfigSetting(OptionConstants.INDENT_INC, Integer.valueOf(2)); Utilities.invokeAndWait( new Runnable() { public void run() { doc.append(text, null); pane.setCaretPosition(0); pane.endCompoundEdit(); } }); Utilities.clearEventQueue(); assertEquals("Should have inserted correctly.", text, doc.getText()); Utilities.invokeAndWait( new Runnable() { public void run() { doc.indentLines(0, doc.getLength()); } }); assertEquals("Should have indented.", indented, doc.getText()); Utilities.invokeAndWait( new Runnable() { public void run() { doc.getUndoManager().undo(); // System.err.println("New position is: " + pane.getCaretPosition()); } }); assertEquals("Should have undone.", text, doc.getText()); // int rePos = doc.getCurrentLocation(); // System.err.println("Restored position is: " + rePos); // cursor will be located at beginning of first line that is changed // assertEquals("Undo should have restored cursor position.", oldPos, rePos); Utilities.invokeAndWait( new Runnable() { public void run() { pane.setCaretPosition(newPos); doc.getUndoManager().redo(); } }); Utilities.clearEventQueue(); assertEquals("redo", indented, doc.getText()); // assertEquals("redo restores caret position", oldPos, pane.getCaretPosition()); _log.log("testMultilineIndentAfterScroll completed"); }