From: <ox-...@us...> - 2002-11-27 04:51:22
|
Update of /cvsroot/sheets/sheets In directory sc8-pr-cvs1:/tmp/cvs-serv14938 Modified Files: Sheets.sheets Added Files: todo.txt Log Message: Fixed a NullPointerException that would occur after garbage collection. Updated the database version to fix a syntax completion bug. Fixed the DocBook support. Can now edit documentation fragments and export them to files (the sheets documentation now gets put under the doc folder) --- NEW FILE: todo.txt --- Fixed in this snapshot so far: x release criteria: move graphics to org.browsecode.graphics fix docbook support new bugs: Tab key doesn't work on JDK1.4.1 Sheets still collapsed on show-in-context for nested fragments PoE error on close related to deleting a file header? Compile doesn't work when you Compile from the Dialog Error listing for javac does not include line position text * Project Compilation: export everything first, but compile files from each project separately use classpath from project settings, and compile in root sheet order Property Management: Add classpath property configuration to new project wizard Allow the user to reference any properties (not just classpath) by the variable syntax (${}) * Better File Management: Don't unnecessarily mark files as dirty on import Distinguish between dirty files and files that should be "touched" Prompt for deletion of files on disk Cache timestamp in export map and use for overwrite warnings Nice to have -- Capability to import modified files on disk (checked on startup, or by command) Capability to resolve diff between changes on disk and in sheets (checked on export, or import) * ByteCode Completion Function completions show wierd parameters (may only be constructors) Fix a few odd cases ("System.out.println") Middle-click doesn't always work for things which complete successfully Restrict completion to entities in classpath across projects (JavaSentinel.getClass) Tabbed UI Rather than caching full Views, simply cache the current sheet and fragment and recreate the view on demand. Add a home button to the toolbar to return to the project page. Get rid of the list of open sheets in the left pane. Introduce tabs to allow the user to have multiple open sheets at once. - control-click to open whatever was clicked on in a new tab - tabs have independent histories Introduce horizontal vertical split views to view multiple tabs at the same time. - split views must both show different tabs - tab selection is based on which view is currently active The window size, split orientation, and current tabs should be persisted between sessions. Hyperlink rollover Improve speed of roll-over link detection Different way of highlighting external hyperlinks (maybe a light-gray background?) Code Folding Refactor Arrow Drawing Routine * integrated boundary check Refactor Region Selection Algorithm Improve Region Selection Algorithm for Java Fix various boundary conditions * adding a line after the collapsed region * adjusting selection if after collapsed region * adjusting selection if in collapsed region Improve memorization of regions * lost during transition to edit * lost on double-click TreeWidget Turns Red? Installer Make sure File Open thread synchronizes with main sheets thread (or is thread safe) New icons for *.sdb, *.sheets, and *.java or other Config screen for file extensions Install a default .sheetsrc file clean-up .sheetsrc Improvements: Deprecate sheets properties (display sheet as a menu, etc.). Color sheets according to whether they are exported, and whether they contain subsheets. When importing, do not populate default project import location. After adding an item to the import list, select it. Automatically set selection to first field/button in wizard. Files No status bar when importing a single file Open up imported file * in a separate window * in a temp sheet * should add a button to temp sheets to allow the user to add it to a project * imported file should not be dirty until user edits it * imported file should export to an absolute path (warning if file on disk is modified) [90% done] improved new class wizard * improve load time of background picture * create java applet / java application wizards * add quick deletion previousButton action for file import * add confirmation to close if not on first slide * add absolute export capability (as a class property) * don't export until modified for absolute exports * remove obsolete sheet property for the same capability * fix summary creation * disable close button when importing quick fixes: Shorten "Java fragments referencing blah" to "References to blah" Fix compile regexp to pick up multiple lines (especially in the case of javac) good features to have: browseable history (per fragment/sheet be able to navigate and diff local history) refactoring shortcuts more intelligent context completion give user the option to delete the project when they delete the project fragment code folding templates (type something simple, and have it expand like a macro) not scheduled: Find alternative way to indicate "(temporary)" -- icon? commit/abort buttons should stay onscreen at all times (even when bottom of fragment is offscreen) sheet header should stay onscreen at all times (even when scrolling) support multiple windows find all modifying references (as a right-click menu query) remove extra get/set/clear methods from Slot interface and subclasses add drop-downs for back/forward history context help doesn't work on private member of same class, different instance line numbers for comments (based on export lists) 1.4 tasks play with indeterminate progress bars switch to 1.4 preference API make use of web start use 1.4 printing API Index: Sheets.sheets =================================================================== RCS file: /cvsroot/sheets/sheets/Sheets.sheets,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** Sheets.sheets 20 Nov 2002 20:57:43 -0000 1.19 --- Sheets.sheets 27 Nov 2002 04:50:47 -0000 1.20 *************** *** 32757,32762 **** section text nkramer:30628 DocParagraph (ObjectDatabase database, String bodyText, Vector /* of Fragment */ links) { ! super(bodyText, links); ! allocateArchivalReference(database); } object nkramer:30630 --- 32757,32761 ---- section text nkramer:30628 DocParagraph (ObjectDatabase database, String bodyText, Vector /* of Fragment */ links) { ! super(database, bodyText, links); } object nkramer:30630 *************** *** 35007,35012 **** section text nkramer:31098 DocPreformatted (ObjectDatabase database, String bodyText, Vector /* of Fragment */ links) { ! super(bodyText, links); ! allocateArchivalReference(database); } object nkramer:31099 --- 35006,35010 ---- section text nkramer:31098 DocPreformatted (ObjectDatabase database, String bodyText, Vector /* of Fragment */ links) { ! super(database, bodyText, links); } object nkramer:31099 *************** *** 35564,35571 **** // The vector is the value of the "links" attribute. It may be null, which // is equivalent to passing in an empty vector. ! public DocFlatFragment (String bodyText, Vector /* of Fragment */ links) { super(bodyText.trim()); DocHelper.addLinks(this, links); ! // subclasses responsible for calling allocateArchivalReference } object nkramer:31182 --- 35562,35570 ---- // The vector is the value of the "links" attribute. It may be null, which // is equivalent to passing in an empty vector. ! public DocFlatFragment (ObjectDatabase database, String bodyText, Vector /* of Fragment */ links) { super(bodyText.trim()); + allocateArchivalReference(database); DocHelper.addLinks(this, links); ! stateChanged(); } object nkramer:31182 *************** *** 36849,36852 **** --- 36848,36853 ---- if (elt.getTagName().equals("link")) { String slot = elt.getAttribute("slot"); + if (slot.length() == 0) + return; // no slot attibute to expand int index = -1; try { *************** *** 36858,36862 **** if (allLinks == null || allLinks.numFragments() <= index || index < 0) ! Console.error("Bad link: There is no slot " + index); else { elt.removeAttribute("slot"); --- 36859,36863 ---- if (allLinks == null || allLinks.numFragments() <= index || index < 0) ! Console.error("Couldn't find slot " + index + " while parsing " + elt); else { elt.removeAttribute("slot"); *************** *** 36877,36882 **** NodeList nodeList = elt.getChildNodes(); ! for (int i=0; i<nodeList.getLength(); i++) ! expandLinks((Element)nodeList.item(i), doc, context); } object nkramer:31539 --- 36878,36886 ---- NodeList nodeList = elt.getChildNodes(); ! for (int i=0; i<nodeList.getLength(); i++) { ! Node node = nodeList.item(i); ! if (node.getNodeType() == Node.ELEMENT_NODE) ! expandLinks((Element)node, doc, context); ! } } object nkramer:31539 *************** *** 37386,37390 **** } FragmentList links = comp.getLinks(); ! if (slot >= links.numFragments() || slot < 0) Console.status("Bad slot number: " + slot); else { --- 37390,37394 ---- } FragmentList links = comp.getLinks(); ! if (links == null || slot >= links.numFragments() || slot < 0) Console.status("Bad slot number: " + slot); else { *************** *** 37699,37703 **** return builder.parse(new StringBufferInputStream(text)); } catch (Exception e) { ! Console.internalError(e); } return null; --- 37703,37707 ---- return builder.parse(new StringBufferInputStream(text)); } catch (Exception e) { ! Console.internalError(new Exception("Error while trying to parse: " + text, e)); } return null; *************** *** 37763,37774 **** static String DocParser.xmlToText (Element elt) { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); - NodeList nodes = elt.getChildNodes(); try { ! for (int i = 0; i < nodes.getLength(); i++) ! transformer.transform(new DOMSource(nodes.item(i)), new StreamResult(byteStream)); } catch (TransformerException e) { Console.internalError(e); } ! return byteStream.toString(); } object nkramer:31729 --- 37767,37784 ---- static String DocParser.xmlToText (Element elt) { ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); try { ! transformer.transform(new DOMSource(elt), new StreamResult(byteStream)); } catch (TransformerException e) { Console.internalError(e); } ! String result = byteStream.toString(); ! String tagName = elt.getTagName(); ! int start = result.indexOf("<" + tagName + ">") + 2 + tagName.length(); ! int end = result.lastIndexOf("</" + tagName + ">"); ! if (start == -1 || end == -1) { ! Console.internalError("Unable to strip off dummy tag for element text: " + result); ! return result; ! } ! return result.substring(start, end); } object nkramer:31729 *************** *** 56323,56327 **** public boolean JavaClassFragment.canSee (JavaInterface target) { if (target.isPublic()) return true; ! JavaClassInterface targetClass = target.enclosingClass(); // Apparently members of an interface are effectively public, although I can't // find this in the manual. If this is wrong, feel free to change this code. --- 56333,56337 ---- public boolean JavaClassFragment.canSee (JavaInterface target) { if (target.isPublic()) return true; ! JavaClassInterface targetClass = target instanceof JavaClassInterface ? (JavaClassInterface)target : target.enclosingClass(); // Apparently members of an interface are effectively public, although I can't // find this in the manual. If this is wrong, feel free to change this code. *************** *** 71387,71390 **** --- 71397,71403 ---- is facilitated by the two methods <link slot="0">replaceLines</link> and <link slot="1">replaceMultiLines</link>. + section links rgs:13983 + schin:896 + schin:897 object rgs:13984 type=doc-para *************** *** 71840,71850 **** Serializable elements. It uses a linear hashing mechanism to keep the cost of rehashing down and uses large buckets to keep the number of disk ! accesses per lookup low. The operations are exactly those of Dictionary, ! with the addition of a <link slot="2">free</link> method to clean up the ! <link slot="3">DB</link> when the PTable is no longer needed. section links rgs:14048 wlott:347 rgs:14053 - wlott:689 object rgs:14049 type=doc-para --- 71853,71860 ---- Serializable elements. It uses a linear hashing mechanism to keep the cost of rehashing down and uses large buckets to keep the number of disk ! accesses per lookup low. section links rgs:14048 wlott:347 rgs:14053 object rgs:14049 type=doc-para *************** *** 83757,83762 **** for (Iterator i=repositories.iterator(); i.hasNext(); ) { Object obj = ((WeakReference)i.next()).get(); ! if (obj == null) i.remove(); if (((JavaRepositoryHelper)obj).getClassPath().equals(classpath)) return (JavaRepositoryHelper)obj; --- 83767,83774 ---- for (Iterator i=repositories.iterator(); i.hasNext(); ) { Object obj = ((WeakReference)i.next()).get(); ! if (obj == null) { i.remove(); + continue; + } if (((JavaRepositoryHelper)obj).getClassPath().equals(classpath)) return (JavaRepositoryHelper)obj; *************** *** 103360,103363 **** --- 103372,103376 ---- nkramer:28438 object ram:2144 + classpath=${classpath} filename=>menu project=Sheets *************** *** 103461,103464 **** --- 103474,103478 ---- ram:2490 object ram:2493 + filename=docs/reference.xml title=Reference Manual type=doc-section *************** *** 104615,104618 **** --- 104629,104633 ---- ram:2881 object ram:2895 + filename=docs/repository.xml title=Versioning and the Repository type=doc-section *************** *** 106700,106703 **** --- 106715,106719 ---- rgs:13568 object rgs:13583 + filename=docs/architecture.xml title=Architectural Overview type=doc-section *************** *** 107162,107169 **** rgs:13911 object rgs:13918 ! title=QueryDialog & QueryPanel type=doc-section section text rgs:13918 ! QueryDialog & QueryPanel section documentation-for rgs:13918 nkramer:586 --- 107178,107185 ---- rgs:13911 object rgs:13918 ! title=QueryDialog & QueryPanel type=doc-section section text rgs:13918 ! QueryDialog & QueryPanel section documentation-for rgs:13918 nkramer:586 *************** *** 107352,107359 **** rgs:14022 object rgs:13950 ! title=JavaSentinel & JavaPackageSentinel type=doc-section section text rgs:13950 ! JavaSentinel & JavaPackageSentinel section documentation-for rgs:13950 rgs:6414 --- 107368,107375 ---- rgs:14022 object rgs:13950 ! title=JavaSentinel & JavaPackageSentinel type=doc-section section text rgs:13950 ! JavaSentinel & JavaPackageSentinel section documentation-for rgs:13950 rgs:6414 *************** *** 107427,107434 **** rgs:14010 object rgs:14023 ! title=PObservable & PObserver type=doc-section section text rgs:14023 ! PObservable & PObserver section documentation-for rgs:14023 wlott:230 --- 107443,107450 ---- rgs:14010 object rgs:14023 ! title=PObservable & PObserver type=doc-section section text rgs:14023 ! PObservable & PObserver section documentation-for rgs:14023 wlott:230 *************** *** 107450,107457 **** ram:2262 object rgs:14029 ! title=FragmentReader & FragmentWriter type=doc-section section text rgs:14029 ! FragmentReader & FragmentWriter section documentation-for rgs:14029 wlott:1025 --- 107466,107473 ---- ram:2262 object rgs:14029 ! title=FragmentReader & FragmentWriter type=doc-section section text rgs:14029 ! FragmentReader & FragmentWriter section documentation-for rgs:14029 wlott:1025 *************** *** 107514,107521 **** rgs:14087 object rgs:14078 ! title=AscensionEvent & DescentEvent type=doc-section section text rgs:14078 ! AscensionEvent & DescentEvent section documentation-for rgs:14078 ram:504 --- 107530,107537 ---- rgs:14087 object rgs:14078 ! title=AscensionEvent & DescentEvent type=doc-section section text rgs:14078 ! AscensionEvent & DescentEvent section documentation-for rgs:14078 ram:504 |