in src/main/java/org/apache/log4j/chainsaw/LogUI.java [527:952]
public void activateViewer() {
initGUI();
loadSettings();
if (m_receivers.size() == 0) {
noReceiversDefined = true;
}
getFilterableColumns().add(ChainsawConstants.LEVEL_COL_NAME);
getFilterableColumns().add(ChainsawConstants.LOGGER_COL_NAME);
getFilterableColumns().add(ChainsawConstants.THREAD_COL_NAME);
getFilterableColumns().add(ChainsawConstants.NDC_COL_NAME);
getFilterableColumns().add(ChainsawConstants.PROPERTIES_COL_NAME);
getFilterableColumns().add(ChainsawConstants.CLASS_COL_NAME);
getFilterableColumns().add(ChainsawConstants.METHOD_COL_NAME);
getFilterableColumns().add(ChainsawConstants.FILE_COL_NAME);
getFilterableColumns().add(ChainsawConstants.NONE_COL_NAME);
JPanel panePanel = new JPanel();
panePanel.setLayout(new BorderLayout(2, 2));
getContentPane().setLayout(new BorderLayout());
getTabbedPane().addChangeListener(getToolBarAndMenus());
getTabbedPane().addChangeListener(e -> {
LogPanel thisLogPanel = getCurrentLogPanel();
if (thisLogPanel != null) {
thisLogPanel.updateStatusBar();
}
});
KeyStroke ksRight =
KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
KeyStroke ksLeft =
KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
KeyStroke ksGotoLine =
KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask());
getTabbedPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
ksRight, "MoveRight");
getTabbedPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
ksLeft, "MoveLeft");
getTabbedPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
ksGotoLine, "GotoLine");
Action moveRight =
new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int temp = getTabbedPane().getSelectedIndex();
++temp;
if (temp != getTabbedPane().getTabCount()) {
getTabbedPane().setSelectedTab(temp);
}
}
};
Action moveLeft =
new AbstractAction() {
public void actionPerformed(ActionEvent e) {
int temp = getTabbedPane().getSelectedIndex();
--temp;
if (temp > -1) {
getTabbedPane().setSelectedTab(temp);
}
}
};
Action gotoLine =
new AbstractAction() {
public void actionPerformed(ActionEvent e) {
String inputLine = JOptionPane.showInputDialog(LogUI.this, "Enter the line number to go:", "Goto Line", JOptionPane.PLAIN_MESSAGE);
try {
int lineNumber = Integer.parseInt(inputLine);
int row = getCurrentLogPanel().setSelectedEvent(lineNumber);
if (row == -1) {
JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
}
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(LogUI.this, "You have entered an invalid line number", "Error", JOptionPane.ERROR_MESSAGE);
}
}
};
getTabbedPane().getActionMap().put("MoveRight", moveRight);
getTabbedPane().getActionMap().put("MoveLeft", moveLeft);
getTabbedPane().getActionMap().put("GotoLine", gotoLine);
/**
* We listen for double clicks, and auto-undock currently selected Tab if
* the mouse event location matches the currently selected tab
*/
getTabbedPane().addMouseListener(
new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
if (
(e.getClickCount() > 1)
&& ((e.getModifiers() & InputEvent.BUTTON1_MASK) > 0)) {
int tabIndex = getTabbedPane().getSelectedIndex();
if (
(tabIndex != -1)
&& (tabIndex == getTabbedPane().getSelectedIndex())) {
LogPanel logPanel = getCurrentLogPanel();
if (logPanel != null) {
logPanel.undock();
}
}
}
}
});
panePanel.add(getTabbedPane());
addWelcomePanel();
getContentPane().add(toolbar, BorderLayout.NORTH);
getContentPane().add(statusBar, BorderLayout.SOUTH);
mainReceiverSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, panePanel, receiversPanel);
dividerSize = mainReceiverSplitPane.getDividerSize();
mainReceiverSplitPane.setDividerLocation(-1);
getContentPane().add(mainReceiverSplitPane, BorderLayout.CENTER);
mainReceiverSplitPane.setResizeWeight(1.0);
addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent event) {
exit();
}
});
preferencesFrame.setTitle("'Application-wide Preferences");
preferencesFrame.setIconImage(
((ImageIcon) ChainsawIcons.ICON_PREFERENCES).getImage());
preferencesFrame.getContentPane().add(applicationPreferenceModelPanel);
preferencesFrame.setSize(750, 520);
Dimension screenDimension = Toolkit.getDefaultToolkit().getScreenSize();
preferencesFrame.setLocation(
new Point(
(screenDimension.width / 2) - (preferencesFrame.getSize().width / 2),
(screenDimension.height / 2) - (preferencesFrame.getSize().height / 2)));
pack();
final JPopupMenu tabPopup = new JPopupMenu();
final Action hideCurrentTabAction =
new AbstractAction("Hide") {
public void actionPerformed(ActionEvent e) {
Component selectedComp = getTabbedPane().getSelectedComponent();
if (selectedComp instanceof LogPanel) {
displayPanel(getCurrentLogPanel().getIdentifier(), false);
tbms.stateChange();
} else {
getTabbedPane().remove(selectedComp);
}
}
};
final Action hideOtherTabsAction =
new AbstractAction("Hide Others") {
public void actionPerformed(ActionEvent e) {
Component selectedComp = getTabbedPane().getSelectedComponent();
String currentName;
if (selectedComp instanceof LogPanel) {
currentName = getCurrentLogPanel().getIdentifier();
} else if (selectedComp instanceof WelcomePanel) {
currentName = ChainsawTabbedPane.WELCOME_TAB;
} else {
currentName = ChainsawTabbedPane.ZEROCONF;
}
int count = getTabbedPane().getTabCount();
int index = 0;
for (int i = 0; i < count; i++) {
String name = getTabbedPane().getTitleAt(index);
if (
getPanelMap().keySet().contains(name)
&& !name.equals(currentName)) {
displayPanel(name, false);
tbms.stateChange();
} else {
index++;
}
}
}
};
Action showHiddenTabsAction =
new AbstractAction("Show All Hidden") {
public void actionPerformed(ActionEvent e) {
for (Object o : getPanels().entrySet()) {
Map.Entry entry = (Map.Entry) o;
Boolean docked = (Boolean) entry.getValue();
if (docked) {
String identifier = (String) entry.getKey();
int count = getTabbedPane().getTabCount();
boolean found = false;
for (int i = 0; i < count; i++) {
String name = getTabbedPane().getTitleAt(i);
if (name.equals(identifier)) {
found = true;
break;
}
}
if (!found) {
displayPanel(identifier, true);
tbms.stateChange();
}
}
}
}
};
tabPopup.add(hideCurrentTabAction);
tabPopup.add(hideOtherTabsAction);
tabPopup.addSeparator();
tabPopup.add(showHiddenTabsAction);
final PopupListener tabPopupListener = new PopupListener(tabPopup);
getTabbedPane().addMouseListener(tabPopupListener);
initPrefModelListeners();
// this.handler.addPropertyChangeListener(
// "dataRate",
// evt -> {
// double dataRate = (Double) evt.getNewValue();
// statusBar.setDataRate(dataRate);
// });
// getSettingsManager().addSettingsListener(this);
// getSettingsManager().addSettingsListener(MRUFileListPreferenceSaver.getInstance());
// getSettingsManager().addSettingsListener(receiversPanel);
// try {
// //if an uncaught exception is thrown, allow the UI to continue to load
// getSettingsManager().loadSettings();
// } catch (Exception e) {
// e.printStackTrace();
// }
//app preferences have already been loaded (and configuration url possibly set to blank if being overridden)
//but we need a listener so the settings will be saved on exit (added after loadsettings was called)
// getSettingsManager().addSettingsListener(new ApplicationPreferenceModelSaver(applicationPreferenceModel));
setVisible(true);
if (sm.getGlobalConfiguration().getBoolean("showReceivers", false)) {
showReceiverPanel();
} else {
hideReceiverPanel();
}
removeSplash();
synchronized (initializationLock) {
isGUIFullyInitialized = true;
initializationLock.notifyAll();
}
if (
noReceiversDefined
&& sm.getGlobalConfiguration().getBoolean("showNoReceiverWarning", true)) {
SwingHelper.invokeOnEDT(this::showReceiverConfigurationPanel);
}
Container container = tutorialFrame.getContentPane();
final JEditorPane tutorialArea = new JEditorPane();
tutorialArea.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
tutorialArea.setEditable(false);
container.setLayout(new BorderLayout());
try {
tutorialArea.setPage(ChainsawConstants.TUTORIAL_URL);
JTextComponentFormatter.applySystemFontAndSize(tutorialArea);
container.add(new JScrollPane(tutorialArea), BorderLayout.CENTER);
} catch (Exception e) {
logger.error("Can't load tutorial", e);
statusBar.setMessage("Can't load tutorail");
}
tutorialFrame.setIconImage(new ImageIcon(ChainsawIcons.HELP).getImage());
tutorialFrame.setSize(new Dimension(640, 480));
final Action startTutorial =
new AbstractAction(
"Start Tutorial", new ImageIcon(ChainsawIcons.ICON_RESUME_RECEIVER)) {
public void actionPerformed(ActionEvent e) {
if (
JOptionPane.showConfirmDialog(
null,
"This will start 3 \"Generator\" receivers for use in the Tutorial. Is that ok?",
"Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
// Create and start generators
Generator[] generators = {
new Generator("Generator 1"),
new Generator("Generator 2"),
new Generator("Generator 3"),
};
for( Generator gen : generators ){
addReceiver(gen);
gen.start();
}
putValue("TutorialStarted", Boolean.TRUE);
} else {
putValue("TutorialStarted", Boolean.FALSE);
}
}
};
final Action stopTutorial =
new AbstractAction(
"Stop Tutorial", new ImageIcon(ChainsawIcons.ICON_STOP_RECEIVER)) {
public void actionPerformed(ActionEvent e) {
if (
JOptionPane.showConfirmDialog(
null,
"This will stop all of the \"Generator\" receivers used in the Tutorial, but leave any other Receiver untouched. Is that ok?",
"Confirm", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
new Thread(
() -> {
for( ChainsawReceiver rx : m_receivers ){
if( rx instanceof Generator ){
rx.shutdown();
}
}
}).start();
setEnabled(false);
startTutorial.putValue("TutorialStarted", Boolean.FALSE);
}
}
};
stopTutorial.putValue(
Action.SHORT_DESCRIPTION,
"Removes all of the Tutorials Generator Receivers, leaving all other Receivers untouched");
startTutorial.putValue(
Action.SHORT_DESCRIPTION,
"Begins the Tutorial, starting up some Generator Receivers so you can see Chainsaw in action");
stopTutorial.setEnabled(false);
final SmallToggleButton startButton = new SmallToggleButton(startTutorial);
PropertyChangeListener pcl =
evt -> {
stopTutorial.setEnabled(
startTutorial.getValue("TutorialStarted").equals(Boolean.TRUE));
startButton.setSelected(stopTutorial.isEnabled());
};
startTutorial.addPropertyChangeListener(pcl);
stopTutorial.addPropertyChangeListener(pcl);
addReceiverEventListener(new ReceiverEventListener() {
@Override
public void receiverAdded(ChainsawReceiver rx) {}
@Override
public void receiverRemoved(ChainsawReceiver rx1) {
int count = 0;
for( ChainsawReceiver rx : m_receivers ){
if( rx instanceof Generator ){
count++;
}
}
if (count == 0) {
startTutorial.putValue("TutorialStarted", Boolean.FALSE);
}
}
});
final SmallButton stopButton = new SmallButton(stopTutorial);
final JToolBar tutorialToolbar = new JToolBar();
tutorialToolbar.setFloatable(false);
tutorialToolbar.add(startButton);
tutorialToolbar.add(stopButton);
container.add(tutorialToolbar, BorderLayout.NORTH);
tutorialArea.addHyperlinkListener(
e -> {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (e.getDescription().equals("StartTutorial")) {
startTutorial.actionPerformed(null);
} else if (e.getDescription().equals("StopTutorial")) {
stopTutorial.actionPerformed(null);
} else {
try {
tutorialArea.setPage(e.getURL());
} catch (IOException e1) {
statusBar.setMessage("Failed to change URL for tutorial");
logger.error(
"Failed to change the URL for the Tutorial", e1);
}
}
}
});
/**
* loads the saved tab settings and if there are hidden tabs,
* hide those tabs out of currently loaded tabs..
*/
if (!sm.getGlobalConfiguration().getBoolean("displayWelcomeTab", true)) {
displayPanel(ChainsawTabbedPane.WELCOME_TAB, false);
}
if (!sm.getGlobalConfiguration().getBoolean("displayZeroconfTab", true)) {
displayPanel(ChainsawTabbedPane.ZEROCONF, false);
}
tbms.stateChange();
}