PageRenderTime 45ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/bundles/plugins-trunk/InfoViewer/infoviewer/HelpInfoViewer.java

#
Java | 216 lines | 166 code | 31 blank | 19 comment | 18 complexity | ddc9a831651b14e3b4ee0fe0e9df9137 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. package infoviewer;
  2. // import infoviewer.lucene.SearchPanel;
  3. import java.awt.BorderLayout;
  4. import java.awt.Component;
  5. import java.awt.Dimension;
  6. import java.awt.event.ActionEvent;
  7. import java.awt.event.ActionListener;
  8. import java.io.File;
  9. import java.net.MalformedURLException;
  10. import java.net.URI;
  11. import java.net.URL;
  12. import javax.swing.JSplitPane;
  13. import javax.swing.JTabbedPane;
  14. import javax.swing.SwingUtilities;
  15. import org.gjt.sp.jedit.MiscUtilities;
  16. import org.gjt.sp.jedit.View;
  17. import org.gjt.sp.jedit.jEdit;
  18. import org.gjt.sp.jedit.help.HelpSearchPanel;
  19. import org.gjt.sp.jedit.help.HelpTOCPanel;
  20. import org.gjt.sp.jedit.help.HelpViewerInterface;
  21. import org.gjt.sp.util.Log;
  22. /**
  23. * An infoviewer with a helpful side-bar. Reuses the same sidebar from the
  24. * original HelpViewer but is intended to be extended with other kinds of views
  25. * later.
  26. *
  27. * @author ezust
  28. * @version $Id: HelpInfoViewer.java 20753 2012-01-12 04:14:36Z ezust $
  29. */
  30. public class HelpInfoViewer extends InfoViewer implements HelpViewerInterface {
  31. public void toggleSideBar() {
  32. showSideBar = aToggleSidebar.isSelected();
  33. remove(centralComponent);
  34. innerPanel.remove(centralComponent);
  35. if (showSideBar)
  36. {
  37. splitter.setLeftComponent(tabs);
  38. splitter.setRightComponent(scrViewer);
  39. centralComponent = splitter;
  40. splitter.setDividerLocation(jEdit.getIntegerProperty("helpviewer.splitter", 250));
  41. } else
  42. {
  43. int dl = splitter.getDividerLocation();
  44. if (dl > 0) jEdit.setIntegerProperty("helpviewer.splitter", dl);
  45. centralComponent = scrViewer;
  46. }
  47. innerPanel.add(BorderLayout.CENTER, centralComponent);
  48. scrViewer.repaint();
  49. repaint();
  50. }
  51. public HelpInfoViewer()
  52. {
  53. this(null, null, true);
  54. }
  55. public HelpInfoViewer(View view, String position)
  56. {
  57. this(view, position, true);
  58. }
  59. public HelpInfoViewer(View view, String position, boolean sidebar)
  60. {
  61. super(view, position);
  62. if (sidebar) setName("helpviewer");
  63. showSideBar = sidebar;
  64. // Log.log(Log.WARNING, this.getClass(), "HelpInfoViewer!");
  65. tabs = new JTabbedPane();
  66. toc = new HelpTOCPanel(this);
  67. tabs.addTab(jEdit.getProperty("helpviewer.toc.label"), toc);
  68. searchPanel = new HelpSearchPanel(this);
  69. tabs.addTab(jEdit.getProperty("helpviewer.search.label"), searchPanel);
  70. // tabs.addTab("Lucene", new SearchPanel(this));
  71. tabs.setMinimumSize(new Dimension(0, 20));
  72. scrViewer.setMinimumSize(new Dimension(0, 20));
  73. splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tabs, scrViewer);
  74. splitter.setBorder(null);
  75. if (showSideBar) {
  76. centralComponent = splitter;
  77. splitter.setDividerLocation(jEdit.getIntegerProperty("helpviewer.splitter", 250));
  78. }
  79. else
  80. {
  81. centralComponent = scrViewer;
  82. }
  83. innerPanel.add(BorderLayout.CENTER, centralComponent);
  84. queueTOCReload();
  85. setVisible(true);
  86. SwingUtilities.invokeLater(new Runnable()
  87. {
  88. public void run()
  89. {
  90. splitter.setDividerLocation(jEdit.getIntegerProperty(
  91. "helpviewer.splitter", 250));
  92. requestFocus();
  93. }
  94. });
  95. }
  96. // {{{ dispose
  97. public void dispose() {
  98. int dl = splitter.getDividerLocation();
  99. if (dl > 0) jEdit.setIntegerProperty("helpviewer.splitter", dl);
  100. } // }}}
  101. // {{{ queueTOCReload() method
  102. public void queueTOCReload()
  103. {
  104. SwingUtilities.invokeLater(new Runnable()
  105. {
  106. public void run() {
  107. queuedTOCReload = false;
  108. toc.load();
  109. }
  110. });
  111. } // }}}
  112. // {{{ ActionHandler class
  113. class ActionHandler implements ActionListener {
  114. // {{{ actionPerformed() class
  115. public void actionPerformed(ActionEvent evt) {
  116. Object source = evt.getSource();
  117. String url = evt.getActionCommand();
  118. if (!url.equals("")) {
  119. gotoURL(url, false, -1);
  120. return;
  121. }
  122. } // }}}
  123. } // }}}
  124. public void setTitle(String newTitle) {
  125. firePropertyChange("title", null, newTitle);
  126. }
  127. public Component getComponent() {
  128. return this;
  129. }
  130. public void gotoURL(String url, boolean addToHistory, int scrollPos) {
  131. if (baseURL == null) try {
  132. URI baseURI = new File(MiscUtilities.constructPath(
  133. jEdit.getJEditHome(), "doc")).toURI();
  134. baseURL = baseURI.toURL().toString();
  135. } catch (MalformedURLException mu) {
  136. Log.log(Log.ERROR, this, mu);
  137. // what to do?
  138. }
  139. if (url == null)
  140. return;
  141. url = url.trim();
  142. if (url.length() == 0)
  143. return;
  144. String shortURL;
  145. if(MiscUtilities.isURL(url))
  146. {
  147. if(url.startsWith(baseURL))
  148. {
  149. shortURL = url.substring(baseURL.length());
  150. if(shortURL.startsWith("/"))
  151. shortURL = shortURL.substring(1);
  152. }
  153. else
  154. {
  155. shortURL = url;
  156. }
  157. }
  158. else
  159. {
  160. shortURL = url;
  161. if(baseURL.endsWith("/"))
  162. url = baseURL + url;
  163. else
  164. url = baseURL + '/' + url;
  165. }
  166. try {
  167. URL u = new URL(url);
  168. gotoURL(u, addToHistory, scrollPos);
  169. } catch (MalformedURLException mu) {
  170. urlField.setText(url);
  171. showError(jEdit.getProperty("infoviewer.error.badurl.message",
  172. new Object[] { mu }));
  173. }
  174. }
  175. // {{{ Private members
  176. // {{{ Instance members
  177. private JSplitPane splitter;
  178. private JTabbedPane tabs;
  179. private HelpSearchPanel searchPanel;
  180. private HelpTOCPanel toc;
  181. private boolean queuedTOCReload;
  182. private boolean showSideBar = true;
  183. private Component centralComponent;
  184. // }}}
  185. }