PageRenderTime 1418ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/jEdit/tags/jedit-4-2-pre4/org/gjt/sp/jedit/textarea/ExtensionManager.java

#
Java | 175 lines | 123 code | 20 blank | 32 comment | 9 complexity | 91e4e91c8f58f618496724da9816e2a4 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. /*
  2. * ExtensionManager.java - Handles 'layers'
  3. * :tabSize=8:indentSize=8:noTabs=false:
  4. * :folding=explicit:collapseFolds=1:
  5. *
  6. * Copyright (C) 2002, 2003 Slava Pestov
  7. *
  8. * This program is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. * as published by the Free Software Foundation; either version 2
  11. * of the License, or any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program; if not, write to the Free Software
  20. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  21. */
  22. package org.gjt.sp.jedit.textarea;
  23. import java.awt.Graphics2D;
  24. import java.util.*;
  25. import org.gjt.sp.util.Log;
  26. class ExtensionManager
  27. {
  28. //{{{ addExtension() method
  29. void addExtension(int layer, TextAreaExtension ext)
  30. {
  31. Entry entry = new Entry(layer,ext);
  32. int i = 0;
  33. Iterator iter = extensions.iterator();
  34. while(iter.hasNext())
  35. {
  36. int _layer = ((Entry)iter.next()).layer;
  37. if(layer < _layer)
  38. {
  39. extensions.add(i,entry);
  40. return;
  41. }
  42. i++;
  43. }
  44. extensions.add(entry);
  45. } //}}}
  46. //{{{ removeExtension() method
  47. void removeExtension(TextAreaExtension ext)
  48. {
  49. Iterator iter = extensions.iterator();
  50. while(iter.hasNext())
  51. {
  52. if(((Entry)iter.next()).ext == ext)
  53. {
  54. iter.remove();
  55. return;
  56. }
  57. }
  58. } //}}}
  59. //{{{ getExtensions() method
  60. TextAreaExtension[] getExtensions()
  61. {
  62. TextAreaExtension[] retVal = new TextAreaExtension[
  63. extensions.size()];
  64. Iterator iter = extensions.iterator();
  65. int i = 0;
  66. while(iter.hasNext())
  67. {
  68. retVal[i++] = ((Entry)iter.next()).ext;
  69. }
  70. return retVal;
  71. } //}}}
  72. //{{{ paintScreenLineRange() method
  73. void paintScreenLineRange(JEditTextArea textArea, Graphics2D gfx,
  74. int firstLine, int lastLine, int y, int lineHeight)
  75. {
  76. try
  77. {
  78. int[] physicalLines = new int[lastLine - firstLine + 1];
  79. int[] start = new int[physicalLines.length];
  80. int[] end = new int[physicalLines.length];
  81. for(int i = 0; i < physicalLines.length; i++)
  82. {
  83. int screenLine = i + firstLine;
  84. ChunkCache.LineInfo lineInfo = textArea
  85. .chunkCache.getLineInfo(screenLine);
  86. if(lineInfo.physicalLine == -1)
  87. physicalLines[i] = -1;
  88. else
  89. {
  90. physicalLines[i] = lineInfo.physicalLine;
  91. start[i] = textArea.getScreenLineStartOffset(screenLine);
  92. end[i] = textArea.getScreenLineEndOffset(screenLine);
  93. }
  94. }
  95. paintScreenLineRange(gfx,firstLine,lastLine,physicalLines,
  96. start,end,y,lineHeight);
  97. }
  98. catch(Exception e)
  99. {
  100. Log.log(Log.ERROR,this,"Error repainting line"
  101. + " range {" + firstLine + ","
  102. + lastLine + "}:");
  103. Log.log(Log.ERROR,this,e);
  104. }
  105. } //}}}
  106. //{{{ getToolTipText() method
  107. String getToolTipText(int x, int y)
  108. {
  109. for(int i = 0; i < extensions.size(); i++)
  110. {
  111. TextAreaExtension ext = ((Entry)extensions.get(i)).ext;
  112. String toolTip = ext.getToolTipText(x,y);
  113. if(toolTip != null)
  114. return toolTip;
  115. }
  116. return null;
  117. } //}}}
  118. //{{{ Private members
  119. private List extensions = new LinkedList();
  120. //{{{ paintScreenLineRange() method
  121. private void paintScreenLineRange(Graphics2D gfx, int firstLine,
  122. int lastLine, int[] physicalLines, int[] start, int[] end,
  123. int y, int lineHeight)
  124. {
  125. Iterator iter = extensions.iterator();
  126. while(iter.hasNext())
  127. {
  128. TextAreaExtension ext = ((Entry)iter.next()).ext;
  129. try
  130. {
  131. ext.paintScreenLineRange(gfx,firstLine,lastLine,
  132. physicalLines,start,end,y,lineHeight);
  133. }
  134. catch(Throwable t)
  135. {
  136. Log.log(Log.ERROR,this,t);
  137. // remove it so editor can continue
  138. // functioning
  139. iter.remove();
  140. }
  141. }
  142. } //}}}
  143. //}}}
  144. //{{{ Entry class
  145. static class Entry
  146. {
  147. int layer;
  148. TextAreaExtension ext;
  149. Entry(int layer, TextAreaExtension ext)
  150. {
  151. this.layer = layer;
  152. this.ext = ext;
  153. }
  154. } //}}}
  155. }