|
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
|