markm 01/09/11 20:01:52
Modified: src Makefile
src/esrc/com/skyhunter/e/lang sourceRunnerAuthor.emaker
vatMakerAuthor.emaker
src/esrc/com/skyhunter/e/net vowToolsMaker.emaker
src/esrc/com/skyhunter/e/security
oldPowerboxControllerMakerAuthor.emaker
powerBoxControllerMakerAuthorTester.e
powerboxControllerMakerAuthor.emaker
src/esrc/com/skyhunter/e/util mapDomText.emaker timer.e
src/esrc/com/skyhunter/ex/swing capFrameMakerAuthor.emaker
dialogtest.e standardWindowMakerAuthor.emaker
uiToolsAuthor.emaker
src/esrc/com/skyhunter/installer
persistentInstallerAuthor.emaker
src/esrc/com/skyhunter/testCaplet
helloWorldCapletAuthor.emaker helloWorldTester.e
testCapletAuthor.emaker
src/esrc/scripts eBrowser.e
Added: src/esrc/com/skyhunter/e/lang
runConfinedSourceFuncAuthor.emaker
src/esrc/com/skyhunter/e/util domFromTextFunc.emaker
domTreeKit.emaker extractChildNodesFunc.emaker
mapDomTextFunc.emaker testDomFromTextFunc.updoc
testDomTreeKit.e
src/esrc/com/skyhunter/eDesk capLauncherAuthor.emaker
installedAppsManagerMaker.emaker
progressWindowMakerAuthor.emaker
quickEditMakerAuthor.emaker
src/esrc/com/skyhunter/eDesk/icons chile.gif goto.gif
home.gif refresh.gif stranger.gif super.gif up.gif
src/esrc/com/skyhunter/eDesk/strings about.txt
appsDescFile.txt help.txt installedAppsDir.txt
src/esrc/com/skyhunter/ex/swing
dialogPromiserAuthorOld.emaker
dialogVowMakerAuthor.emaker uiKitAuthor.emaker
src/esrc/com/skyhunter/installer
agreedCapVowMakerAuthorTest.e
agreedCapsPetsVowMakerAuthor.emaker
stringDataKit.emaker
src/esrc/com/skyhunter/testCaplet
helloWorldCapletAuthor.caplet
helloWorldCapletPlusAuthor.emaker
helloWorldPlusTester.e testLauncherOld.e
Removed: src/jsrc/org/erights/e/elib/base TextWriter.java
Log:
new skyhunter code and eBrowser
Revision Changes Path
1.117 +2 -2 e/src/Makefile
Index: Makefile
===================================================================
RCS file: /cvs/e/src/Makefile,v
retrieving revision 1.116
retrieving revision 1.117
diff -u -r1.116 -r1.117
--- Makefile 2001/09/09 07:57:02 1.116
+++ Makefile 2001/09/12 00:01:50 1.117
@@ -7,8 +7,8 @@
# Prefix tagging this release's attributes
PREFIX=tl-E
-DOTVER=0.8.9zp
-TAGVER=0_8_9zp
+DOTVER=0.8.9zq
+TAGVER=0_8_9zq
RELEASE=working
TOP=..
1.2 +30 -31 e/src/esrc/com/skyhunter/e/lang/sourceRunnerAuthor.emaker
Index: sourceRunnerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/lang/sourceRunnerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sourceRunnerAuthor.emaker 2001/08/08 06:00:20 1.1
+++ sourceRunnerAuthor.emaker 2001/09/12 00:01:50 1.2
@@ -1,34 +1,33 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
-def sourceRunnerAuthor(unsafe__uriGetter, interp, trace, stdout) :near {
- def traceln(text) {trace(text + "\n")}
- def runSource(sourceText) :near {
- def interpret() :any {
- traceln("starting run prep")
- def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>
- var scope := ScopeSetupMaker privileged(false, stdout, stdout, interp)
- def subInterp {
- to blockAtTop() {
- # ignored
- }
- to continueAtTop() {
- # ignored
- }
- delegate { interp }
- }
- scope := scope sprout() bindFinal("interp", subInterp)
- traceln("made scope 2")
- try {
- def tree := e__quasiParser(sourceText)
- def result := tree eval(scope newPov())
- traceln("\n# value: " + result)
- traceln("shown")
- result
- } catch problem {
- traceln("\n# problem: " + problem)
- traceln("problem shown")
- }
- }
- interpret()
- }
+def sourceRunnerAuthor(unsafe__uriGetter, interp, traceln, stdout) :near {
+ def runSource(sourceText) :near {
+ def interpret() :any {
+ traceln("starting run prep")
+ def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>
+ var scope := ScopeSetupMaker privileged(false, stdout, stdout, interp)
+ def subInterp {
+ to blockAtTop() {
+ # ignored
+ }
+ to continueAtTop() {
+ # ignored
+ }
+ delegate { interp }
+ }
+ scope := scope sprout() bindFinal("interp", subInterp)
+ traceln("made scope 2")
+ try {
+ def tree := e__quasiParser(sourceText)
+ def result := tree eval(scope newPov())
+ traceln("\n# value: " + result)
+ traceln("shown")
+ result
+ } catch problem {
+ traceln("\n# problem: " + problem)
+ traceln("problem shown")
+ }
+ }
+ interpret()
+ }
}
1.5 +7 -7 e/src/esrc/com/skyhunter/e/lang/vatMakerAuthor.emaker
Index: vatMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/lang/vatMakerAuthor.emaker,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- vatMakerAuthor.emaker 2001/09/08 22:59:20 1.4
+++ vatMakerAuthor.emaker 2001/09/12 00:01:50 1.5
@@ -15,14 +15,14 @@
# <p>
# This is a very early draft of the concept, and is expected to change
# radically in non-upwards compatible ways.
-#
+#
# @author Marc Stiegler
# @author Mark S. Miller
# @author Terry Stanley
def vatMakerAuthor(unsafe__uriGetter, introducer, traceln) :near {
- # XXX Kludge: The sourceCode expression must not print to stdout or
- # stderr when it's evaluated, although the objects it spawns may do
+ # XXX Kludge: The sourceCode expression must not print to stdout or
+ # stderr when it's evaluated, although the objects it spawns may do
# so later
class vatMaker(sourceCode, args, props, vatName) :near {
def io__uriGetter := <unsafe:java.io.*>
@@ -69,10 +69,10 @@
def primordialObjPromise := sr promiseRef()
def vat {
to promisePrimordialObj() :any {primordialObjPromise}
- to getInterp() :near {altInterp}
- to getRunner() :near {runner}
- to readStdout() :String {readBuffer(altoutBuffer)}
- to readStderr() :String {readBuffer(alterrBuffer)}
+ to getInterp() :near {altInterp}
+ to getRunner() :near {runner}
+ to readStdout() :String {readBuffer(altoutBuffer)}
+ to readStderr() :String {readBuffer(alterrBuffer)}
}
}
}
1.1 e/src/esrc/com/skyhunter/e/lang/runConfinedSourceFuncAuthor.emaker
Index: runConfinedSourceFuncAuthor.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def sourceRunnerAuthor(unsafe__uriGetter, interp, traceln, stdout) :near {
def runSource(sourceText) :near {
def interpret() :any {
traceln("starting run prep")
def ScopeSetupMaker := <unsafe:org.erights.e.elang.interp.ScopeSetup>
var scope := ScopeSetupMaker universal()
def subInterp {
to blockAtTop() {
# ignored
}
to continueAtTop() {
# ignored
}
delegate { interp }
}
scope := scope sprout() bindFinal("interp", subInterp)
traceln("made scope 2")
try {
def tree := e__quasiParser(sourceText)
def result := tree eval(scope newPov())
traceln("\n# value: " + result)
traceln("shown")
result
} catch problem {
traceln("\n# problem: " + problem)
traceln("problem shown")
}
}
interpret()
}
}
1.6 +94 -94 e/src/esrc/com/skyhunter/e/net/vowToolsMaker.emaker
Index: vowToolsMaker.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/net/vowToolsMaker.emaker,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- vowToolsMaker.emaker 2001/08/08 05:39:16 1.5
+++ vowToolsMaker.emaker 2001/09/12 00:01:50 1.6
@@ -1,97 +1,97 @@
class vowToolsMaker() :any {
- def vowTools {
- # Send a list of promises, this will return a
- # promise that will be fulfilled when all
- # the promises in the list have resolved one
- # way or the other. If any break, the allDone
- # promise is smashed, with a list of the error
- # messages, else it returns true.
- # Some day, this should return a list of all the
- # resolutions, with a smash if any of the promises
- # were broken on delivery.
- to promiseAllDone(thePromiseList) :any {
- # resolves after all in list resolved, returns true if all promises fulfilled
- def [resolutionPromise,resolver] := PromiseMaker()
- def promiseCount := thePromiseList size
- define breakMessages := ""
- if (promiseCount == 0) {resolver resolve(true)}
- for each in thePromiseList {
- each <- whenResolved(def obs(result) {
- if (E isBroken(result)) {breakMessages += " :" +result}
- promiseCount -= 1
- if (promiseCount == 0) {
- if (breakMessages size == 0) {
- resolver resolve(true)
- } else {
- resolver smash(breakMessages)
- }
- }
- })
- }
- resolutionPromise
- }
- # A vowsMonitor is an upscale promiseAllDone, collecting the
- # promise list, the promise of completion, and the finishing
- # process in a single object, making it convenient to pass
- # around to various objects that must add a promise to the
- # list and be informed when the list is finished.
- # Add the promises one at a time to the vowsMonitor,
- # get the promise of the finish when you want it
- # and initiate the monitoring for completion by requesting
- # a finishAll. Adding promises after the finishAll has been
- # requested is currently an undetected error.
- to makeVowsMonitor :any {
- def [bundlePromise,resolver] := PromiseMaker()
- def bundle := [] diverge
- def vowsMonitor {
- to add (thePromise) {bundle push(thePromise)}
- to finishAll {resolver resolve(netTools promiseAllDone(bundle))}
- to promiseFinish :any {bundlePromise}
- }
- }
- # Only More Recent Manager:
- # If you send out multiple requests over time,
- # resulting in receiving multiple promises also strewn over time,
- # and if you are only interested
- # in the answer if the answer is more recent
- # than the most recent of the already-fulfilled promises
- # (i.e., only if
- # the answer is newer than what you currently have),
- # and if you are not absolutely sure that all the
- # requests will move through a
- # guaranteed sequence on a single vat,
- # use an onlyMoreRecent object: add the promise
- # to the onlyMoreRecent when you receive it, and use the promise returned from that operation in
- # your when clause. If
- # a newer promise gets fulfilled before an older promise, the older promise is smashed with an "Obsolete Data"
- # error when it finally resolves.
- # If a newest promise returns smashed, the promise from onlyMostRecent also is returned smashed,
- # but with the error object it got from the
- # original promise.
- to makeOnlyMoreRecentAcceptor :any {
- def obsoleteError := "Obsolete Data"
- def mostRecentlyFulfilledIndex := 0
- def nextPromiseIndex := 1
- def onlyMoreRecent {
- to promiseMoreRecent(nextPromise) :any {
- def [onlyMoreRecentPromise,resolver] := PromiseMaker()
- def thisPromiseIndex := nextPromiseIndex
- nextPromiseIndex += 1
- when (nextPromise) -> done(resolution) {
- if (thisPromiseIndex > mostRecentlyFulfilledIndex) {
- resolver resolve(resolution)
- mostRecentlyFulfilledIndex := thisPromiseIndex
- } else { resolver smash(obsoleteError) }
- } catch e {
- if (thisPromiseIndex > mostRecentlyFulfilledIndex) {
- resolver smash(e)
- mostRecentlyFulfilledIndex := thisPromiseIndex
- } else { resolver smash(obsoleteError) }
- }
- onlyMoreRecentPromise
- }
- }
- }
- }
+ def vowTools {
+ # Send a list of promises, this will return a
+ # promise that will be fulfilled when all
+ # the promises in the list have resolved one
+ # way or the other. If any break, the allDone
+ # promise is smashed, with a list of the error
+ # messages, else it returns true.
+ # Some day, this should return a list of all the
+ # resolutions, with a smash if any of the promises
+ # were broken on delivery.
+ to promiseAllDone(thePromiseList) :any {
+ # resolves after all in list resolved, returns true if all promises fulfilled
+ def [resolutionPromise,resolver] := PromiseMaker()
+ def promiseCount := thePromiseList size
+ define breakMessages := ""
+ if (promiseCount == 0) {resolver resolve(true)}
+ for each in thePromiseList {
+ each <- whenResolved(def obs(result) {
+ if (E isBroken(result)) {breakMessages += " :" +result}
+ promiseCount -= 1
+ if (promiseCount == 0) {
+ if (breakMessages size == 0) {
+ resolver resolve(true)
+ } else {
+ resolver smash(breakMessages)
+ }
+ }
+ })
+ }
+ resolutionPromise
+ }
+ # A vowsMonitor is an upscale promiseAllDone, collecting the
+ # promise list, the promise of completion, and the finishing
+ # process in a single object, making it convenient to pass
+ # around to various objects that must add a promise to the
+ # list and be informed when the list is finished.
+ # Add the promises one at a time to the vowsMonitor,
+ # get the promise of the finish when you want it
+ # and initiate the monitoring for completion by requesting
+ # a finishAll. Adding promises after the finishAll has been
+ # requested is currently an undetected error.
+ to makeVowsMonitor :any {
+ def [bundlePromise,resolver] := PromiseMaker()
+ def bundle := [] diverge
+ def vowsMonitor {
+ to add (thePromise) {bundle push(thePromise)}
+ to finishAll {resolver resolve(netTools promiseAllDone(bundle))}
+ to promiseFinish :any {bundlePromise}
+ }
+ }
+ # Only More Recent Manager:
+ # If you send out multiple requests over time,
+ # resulting in receiving multiple promises also strewn over time,
+ # and if you are only interested
+ # in the answer if the answer is more recent
+ # than the most recent of the already-fulfilled promises
+ # (i.e., only if
+ # the answer is newer than what you currently have),
+ # and if you are not absolutely sure that all the
+ # requests will move through a
+ # guaranteed sequence on a single vat,
+ # use an onlyMoreRecent object: add the promise
+ # to the onlyMoreRecent when you receive it, and use the promise returned from that operation in
+ # your when clause. If
+ # a newer promise gets fulfilled before an older promise, the older promise is smashed with an "Obsolete Data"
+ # error when it finally resolves.
+ # If a newest promise returns smashed, the promise from onlyMostRecent also is returned smashed,
+ # but with the error object it got from the
+ # original promise.
+ to makeOnlyMoreRecentAcceptor :any {
+ def obsoleteError := "Obsolete Data"
+ def mostRecentlyFulfilledIndex := 0
+ def nextPromiseIndex := 1
+ def onlyMoreRecent {
+ to promiseMoreRecent(nextPromise) :any {
+ def [onlyMoreRecentPromise,resolver] := PromiseMaker()
+ def thisPromiseIndex := nextPromiseIndex
+ nextPromiseIndex += 1
+ when (nextPromise) -> done(resolution) {
+ if (thisPromiseIndex > mostRecentlyFulfilledIndex) {
+ resolver resolve(resolution)
+ mostRecentlyFulfilledIndex := thisPromiseIndex
+ } else { resolver smash(obsoleteError) }
+ } catch e {
+ if (thisPromiseIndex > mostRecentlyFulfilledIndex) {
+ resolver smash(e)
+ mostRecentlyFulfilledIndex := thisPromiseIndex
+ } else { resolver smash(obsoleteError) }
+ }
+ onlyMoreRecentPromise
+ }
+ }
+ }
+ }
}
1.2 +22 -21 e/src/esrc/com/skyhunter/e/security/oldPowerboxControllerMakerAuthor.emaker
Index: oldPowerboxControllerMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/security/oldPowerboxControllerMakerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- oldPowerboxControllerMakerAuthor.emaker 2001/08/08 06:00:20 1.1
+++ oldPowerboxControllerMakerAuthor.emaker 2001/09/12 00:01:50 1.2
@@ -2,9 +2,9 @@
def powerboxControllerMakerAuthor(unsafe__uriGetter, file__uriGetter, resource__uriGetter, JPanel__quasiParser) :near {
def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor>(
<unsafe:java.awt.*>, <unsafe:javax.swing.*>)
- var stdErr := ""
+ var stdErr := ""
def confinedRunner(sourceTwine) :any {
- stdErr := ""
+ stdErr := ""
def traceln(text) {stdErr := `$stdErr $text ${"<br>\n"}`}
traceln("in confined runner, about to interpret")
def interpret() :any {
@@ -24,7 +24,7 @@
} catch problem {
traceln(`Error: ${"\n"}$problem`)
result := stdErr
- throw
+ throw
}
result
}
@@ -46,11 +46,11 @@
to requestBaseCapabilityVow(capName,justification) :any {}
//general capability pops drag/drop dialog
to requestCapabilityVow(capName, justification) :any {}
- to getCapWT() :near {
- def makerAuthor := <import:com.skyhunter.e.security.capWTMakerAuthor>
- def maker := makerAuthor(<unsafe:java.awt.*>, <unsafe:javax.swing.*>, JPanel__quasiParser)
- maker new(appImage, appTitle, powerbox)
- }
+ to getCapWT() :near {
+ def makerAuthor := <import:com.skyhunter.e.security.capWTMakerAuthor>
+ def maker := makerAuthor(<unsafe:java.awt.*>, <unsafe:javax.swing.*>, JPanel__quasiParser)
+ maker new(appImage, appTitle, powerbox)
+ }
}
def powerboxController {
to getPowerbox() :near {powerbox}
@@ -75,19 +75,20 @@
}
}
def launchCaplet(source) :near {
- try {
- def maker := confinedRunner(source)
- maker new(powerbox)
- } catch err {
- powerbox getCapWT() getDialogPromiser() new(
- "Caplet failed",
- `<html>Program runner trace: <br>
- $stdErr <br>
- Caplet execution output: <br>
- $err`,
- null,
- ["OK"])
- }
+ try {
+ def maker := confinedRunner(source)
+ maker new(powerbox)
+ } catch err {
+ powerbox getCapWT() getDialogPromiser() new(
+ "Caplet failed",
+ `<html>Program runner trace: <br>
+ $stdErr <br>
+ Caplet execution output: <br>
+ $err`,
+ null,
+ ["OK"])
+ }
+
}
def bind caplet := launchCaplet(capletSource)
powerboxController
1.2 +25 -21 e/src/esrc/com/skyhunter/e/security/powerBoxControllerMakerAuthorTester.e
Index: powerBoxControllerMakerAuthorTester.e
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/security/powerBoxControllerMakerAuthorTester.e,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- powerBoxControllerMakerAuthorTester.e 2001/08/13 22:12:13 1.1
+++ powerBoxControllerMakerAuthorTester.e 2001/09/12 00:01:50 1.2
@@ -1,26 +1,30 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
+def traceln := println
def controllerMaker := <import:com.skyhunter.e.security.powerboxControllerMakerAuthor> run(
- unsafe__uriGetter, file__uriGetter, interp, stdout)
+ unsafe__uriGetter, file__uriGetter, interp, traceln, stdout)
+traceln("created controller")
def testCapletAuthor := <import:com.skyhunter.testCaplet.testCapletAuthor>
+traceln("created testcaplet author")
def testAuthor(powerbox,b,c) :any {
- def test {
- to start() {
- def trace := powerbox optCap(powerbox TRACE())
- trace("traced external caplet worked\n")
- }
- }
- test start()
- test
+ def test {
+ to start() {
+ def traceln := powerbox optCap(powerbox TRACELN())
+ traceln("traced external caplet worked")
+ }
+ }
+ test start()
+ test
}
+traceln("created testAuthor")
#test when caplet external
-def extController := controllerMaker new(null, "Test External Caplet",null, "")
+def extController := controllerMaker new(null, "Test External Caplet",null, "<caps></caps>")
println("starting external caplet")
-extController startExternalCaplet(testAuthor(extController getPowerbox(), null, null))
+extController startExternalCaplet(testAuthor(extController getPowerbox(), null, null))
println("external caplet started")
#test with caplet in emaker
@@ -31,17 +35,17 @@
# test when powerbox launches
def controller := controllerMaker new(
- `def testAuthor(powerbox,b,c) :any {
- def test {
- to start() {
- def trace := powerbox optCap(powerbox TRACE())
- trace("traced internal caplet with powerbox interpreting source, it worked\n")
- }
- }
- test start()
- test
+ `def testAuthor(powerbox,b,c) :any {
+ def test {
+ to start() {
+ def traceln := powerbox optCap(powerbox TRACELN())
+ traceln("traced internal caplet with powerbox interpreting source, it worked")
+ }
+ }
+ test start()
+ test
}`,
- "Test Caplet", null, "")
+ "Test Caplet", null, "")
println("internal caplet started")
def powerbox := controller getPowerbox()
#def files := powerbox requestFilesPromise(true, "test dialog", "Just Because!", "", null)
1.2 +123 -37 e/src/esrc/com/skyhunter/e/security/powerboxControllerMakerAuthor.emaker
Index: powerboxControllerMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/security/powerboxControllerMakerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- powerboxControllerMakerAuthor.emaker 2001/08/08 06:00:20 1.1
+++ powerboxControllerMakerAuthor.emaker 2001/09/12 00:01:50 1.2
@@ -1,44 +1,86 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
-def powerboxControllerMakerAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any {
+def powerboxControllerMakerAuthor(unsafe__uriGetter, file__uriGetter, interp, traceln, stdout) :any {
def swing__uriGetter := <unsafe:javax.swing.*>
def awt__uriGetter := <unsafe:java.awt.*>
- def traceOut := <unsafe:java.lang.System> out()
- def trace(text) {E call(traceOut, "print(String)", [text])}
- def traceln(text) {trace(text + "\n")}
- def runSource := <import:com.skyhunter.e.lang.sourceRunnerAuthor> run(unsafe__uriGetter, interp, trace, stdout)
+ def JPanel__quasiParser := <import:org.erights.ex.swing.JPanelQParserMaker> new(
+ awt__uriGetter, swing__uriGetter)
+ def uiKit := <import:com.skyhunter.ex.swing.uiKitAuthor> (awt__uriGetter,swing__uriGetter)
+ def runSource := <import:com.skyhunter.e.lang.runConfinedSourceFuncAuthor> run(unsafe__uriGetter, interp, traceln, stdout)
def validFrameVerbs := ["show",
- "pack", "addWindowListener",
- "dispose", "hide",
- "isShowing", "removeWindowListener",
- "setCursor", "toBack",
- "getMenuBar", "getTitle",
- "isResizable", "setMenuBar",
- "setResizable", "getState",
- "setState", "getJMenuBar",
- "update" ] asKeys()
+ "pack", "addWindowListener",
+ "dispose", "hide",
+ "isShowing", "removeWindowListener",
+ "setCursor", "toBack",
+ "getMenuBar", "getTitle",
+ "isResizable", "setMenuBar",
+ "setResizable", "getState",
+ "setState", "getJMenuBar",
+ "update", "setDefaultCloseOperation" ] asKeys()
//capletAuthorSource is optional so that the caplet can be manufactured either
// by the powerbox during normal operations, or externally to the powerbox
// when the caplet is better constructed externally, as in when debugging.
// There is a one-to-one correspondence between caplets and powerbox/powerboxController pairs
- class powerboxControllerMaker(optCapletAuthorSource, capletName, optCapletIconImage, authorizedCapsSml) :any {
+ class powerboxControllerMaker(capletName, optCapletIconImage, agreedCapsXml) :any {
def powerbox
def caplet
def powersMap := [] asKeys() diverge()
- class powerbarControllerMaker(powerPanel, eFrame) :near {
+ class powerbarControllerMaker(eFrame) :near {
+ def cutRunner() {
+ traceln("about to do cut reaction")
+ def clipboardObject := caplet reactToCut(eFrame)
+ }
+ def cutURL := <resource:com/skyhunter/e/icons/cut.gif>
+ def cutButton := uiKit newToolButton( <swing:ImageIcon> new(cutURL)getImage() , "Global Cut", cutRunner)
+ def copyRunner() {
+ traceln("about to do copy reaction")
+ def clipboardObject := caplet reactToCopy(eFrame)
+ }
+ def copyURL := <resource:com/skyhunter/e/icons/copy.gif>
+ def copyButton := uiKit newToolButton( <swing:ImageIcon> new(copyURL)getImage() , "Global Copy", copyRunner)
+ def pasteRunner() {
+ traceln("about to do paste reaction")
+ caplet reactToPaste(eFrame, "dummy from-clipboard")
+ }
+ def pasteURL := <resource:com/skyhunter/e/icons/paste.gif>
+ def pasteButton := uiKit newToolButton( <swing:ImageIcon> new(pasteURL)getImage() , "Global Paste", pasteRunner)
+ def spacer := <swing:JLabel> new(" ")
+ def powerPanel := JPanel`$cutButton $copyButton $pasteButton $spacer.X`
+ powerPanel setBorder(<swing:BorderFactory> createRaisedBevelBorder())
+ //XXX is a powerbar controller needed? why does anyone ever
+ //XXX need to talk to this, it just monitors the powerbar,
+ //XXX it initiates talk, not the other way around
def powerbarController {
- to reactToPaste() {caplet reactToPaste(eFrame,"dummyObject")}
+ #to reactToPaste() {caplet reactToPaste(eFrame,"dummyObject")}
+ to getPowerPanel() :near {powerPanel}
}
}
+ class urlMakerMaker(agreedUrlsMap) :near {
+ def urlMaker {
+ to new(urlString) :near {
+ def url := <unsafe:java.net.URL> new(urlString)
+ if (agreedUrlsMap maps(url getProtocol())) {
+ url
+ } else {null}
+ }
+ to get(urlString) :near {urlMaker new(urlString)}
+ to getAgreedProtocols() :near {agreedUrlsMap snapshot()}
+ }
+ }
+ def capletIconImage := if (optCapletIconImage != null) {
+ optCapletIconImage
+ } else {
+ <swing:ImageIcon> new(
+ <resource:com/skyhunter/eDesk/icons/stranger.gif>) getImage()
+ }
def frameMaker {
to new(title) :near {
def myJFrame := <swing:JFrame> new(`$capletName $title`)
- if (optCapletIconImage != null) {myJFrame setIconImage(optCapletIconImage)}
+ myJFrame setIconImage(capletIconImage)
def contentPane := <swing:JPanel> new()
- def powerbarPane := <swing:JPanel> new()
- myJFrame getContentPane() add(contentPane, "Center")
- myJFrame getContentPane() add(powerbarPane, "South")
+ contentPane setLayout(<awt:BorderLayout> new())
+ traceln("setting outer content pane")
def frame {
to setTitle(title) {myJFrame setTitle(`$capletName $title`)}
to getContentPane() :near {
@@ -51,29 +93,54 @@
}
}
}
- powerbarControllerMaker new(powerbarPane,frame)
+ def powerbarController := powerbarControllerMaker new(frame)
+ //XXX why do dialogs made with this have shrunken contentPane layouts?
+ def outerContentPane :=
+ JPanel`$contentPane.X.Y
+ ${powerbarController getPowerPanel()}`
+ myJFrame setContentPane(outerContentPane)
frame
}
to new() :near {
frameMaker new("")
}
}
- def launchCaplet() {
- if (optCapletAuthorSource != null) {
- def capletAuthor := runSource(optCapletAuthorSource)
- def bind caplet := capletAuthor(powerbox, awt__uriGetter, swing__uriGetter)
- }
- }
def processCapsSml() {
powersMap[powerbox FRAME_MAKER()] := frameMaker
- powersMap[powerbox TRACE()] := trace
+ powersMap[powerbox TRACELN()] := traceln
+ powersMap[powerbox INITIAL_DOC_RCVRS()] := []
+ powersMap[powerbox PET_NAME()] := capletName
+ powersMap[powerbox PET_ICON()] := optCapletIconImage
+ def mapDomText := <import:com.skyhunter.e.util.mapDomTextFunc>
+ def domFromText := <import:com.skyhunter.e.util.domFromTextFunc>
+ def extractChildNodes := <import:com.skyhunter.e.util.extractChildNodesFunc>
+ traceln("about to make dom tree")
+ def tree := domFromText(agreedCapsXml)
+ traceln("made dom tree: " + tree)
+ def agreedUrlProtocols := [] asKeys() diverge()
+ for each in tree {
+ def capsVisitor {
+ to visitUrlProtocols(subNodes) {
+ for each in subNodes {each welcome (capsVisitor)}
+ }
+ to visitProtocol(subNodes) {
+ traceln("getting Protocol in powerbox construction")
+ agreedUrlProtocols[subNodes[0] getData()] := null
+ }
+ to visitCaps(subNodes) {
+ for each in subNodes { each welcome(capsVisitor)}
+ }
+ match [verb, args] {traceln("capsVisitor unhandled: " + verb)}
+ }
+ each welcome(capsVisitor)
+ }
+ traceln("agreedUrlProtocols: " + agreedUrlProtocols)
+ powersMap[powerbox URL_MAKER()] := urlMakerMaker new(agreedUrlProtocols)
}
def bind powerbox {
to requestExit() {
- interp continueAtTop()
-
+ #interp continueAtTop()
}
- to getFrameMaker() :near {frameMaker }
to subsetPowers(restrictedMap) :near {}
to requestFilesPromise(editable, title, justification, startPathText, filter) :any {
def answer := [] diverge()
@@ -106,20 +173,39 @@
}
to requestUrlPromise(urlString, title, justification) :any {}
to requestCapPromise(title, justification) :any {}
- to optCap(capKey) :any {powersMap[capKey] }
+ to optCap(capKey) :any {
+ if (powersMap maps(capKey)) {
+ powersMap[capKey]
+ } else {null}
+ }
to runSource(sourceText) :any {runSource(sourceText)}
- to CAP_URLGETTER() :any {"capUrlGetter"}
+ to getGifImage(gifFile) :near {<swing:ImageIcon> new(gifFile) getImage()}
to CAP_TIMER() :any {"capTimerGetter"}
to FRAME_MAKER() :any {"frameMaker"}
- to TRACE() :any {"trace"}
-
+ to TRACELN() :any {"traceln"}
+ to URL_MAKER() :any {"urlMaker"}
+ to INITIAL_DOC_RCVRS() :any {"initialDocRcvrs"}
+ to LOCAL_RESOURCES() :any {"localResources"}
+ to DOC_SUFFIX() :any {"docSuffix"}
+ to PET_NAME() :any {"petName"}
+ to PET_ICON() :any {"petIcon"}
}
processCapsSml()
- launchCaplet()
def powerboxController {
to getPowerbox() :near {powerbox}
to forceExit() {interp continueAtTop()}
to getCaplet() :near {caplet}
+ to setCap(key, value) {powersMap[key] := value}
+ to launchSource(capletAuthorSource) {
+ def capletAuthor := runSource(capletAuthorSource)
+ def bind caplet := capletAuthor(powerbox, awt__uriGetter, swing__uriGetter)
+ }
+ to launchFile(capletFile) {
+ def capletAuthorSource := capletFile getText()
+ def localResources := capletFile getParentFile() transReadOnly()
+ powersMap[powerbox LOCAL_RESOURCES()] := localResources
+ powerboxController launchSource(capletAuthorSource)
+ }
to startExternalCaplet(theCaplet) {
def bind caplet := theCaplet
}
1.2 +23 -19 e/src/esrc/com/skyhunter/e/util/mapDomText.emaker
Index: mapDomText.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/util/mapDomText.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- mapDomText.emaker 2001/08/08 06:00:20 1.1
+++ mapDomText.emaker 2001/09/12 00:01:51 1.2
@@ -1,22 +1,26 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
+#returns a map with key=tag and value=textOfTheTag,
+# where the first character of the key is always capitalized
+# (so a tag "foo" would yield a key "Foo")
+
def mapDomText(domTextNodes) :any {
- def table := [] asKeys() diverge()
- def nodeText(list) :String {
- if (list size() == 1) {
- list[0] getData()
- } else if (list size() ==0 ) {
- ""
- } else {
- //badData, no way to inform
- }
- }
- def visitor {
- match [verb, args] {
- if (verb =~ `visit@{theKey}`) {
- table[theKey] := nodeText(args[0])
- }
- }
- }
- for each in domTextNodes {each welcome(visitor)}
- table snapshot()
+ def table := [] asKeys() diverge()
+ def nodeText(list) :String {
+ if (list size() == 1) {
+ list[0] getData()
+ } else if (list size() ==0 ) {
+ ""
+ } else {
+ //badData, no way to inform
+ }
+ }
+ def visitor {
+ match [verb, args] {
+ if (verb =~ `visit@{theKey}`) {
+ table[theKey] := nodeText(args[0])
+ }
+ }
+ }
+ for each in domTextNodes {each welcome(visitor)}
+ table snapshot()
}
1.6 +9 -9 e/src/esrc/com/skyhunter/e/util/timer.e
Index: timer.e
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/e/util/timer.e,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- timer.e 2001/08/08 05:39:16 1.5
+++ timer.e 2001/09/12 00:01:51 1.6
@@ -2,14 +2,14 @@
//The actionTrio must be a list [target,"verb",[args]]
def doAfter(seconds,actionTrio) :any {
- def actionWrapper {
- to run() {
- #traceln("stopwatch: performing action" + actionTrio)
- E call(actionTrio[0], actionTrio[1], actionTrio[2])
- #traceln("stopwatch: action performed")
- }
- }
- def timer := <import:org.erights.e.extern.timer.Timer> theTimer
- timer after(seconds * 1000, actionWrapper)
+ def actionWrapper {
+ to run() {
+ #traceln("stopwatch: performing action" + actionTrio)
+ E call(actionTrio[0], actionTrio[1], actionTrio[2])
+ #traceln("stopwatch: action performed")
+ }
+ }
+ def timer := <import:org.erights.e.extern.timer.Timer> theTimer
+ timer after(seconds * 1000, actionWrapper)
}
1.1 e/src/esrc/com/skyhunter/e/util/domFromTextFunc.emaker
Index: domFromTextFunc.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def domFromText(text) :near {
(sml__quasiParser valueMaker(text) substitute(ListMaker run()))
}
1.1 e/src/esrc/com/skyhunter/e/util/domTreeKit.emaker
Index: domTreeKit.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def domTreeKit {
to domFromText(text) :near {
(sml__quasiParser valueMaker(text) substitute(ListMaker run()))
}
to extractChildNodes(tag, node) :near {
def nodes := [] diverge()
for each in node {
if (each getNodeType() == 1 &&
each getTagName() == tag) {
nodes push(each)
}
}
nodes snapshot()
}
#returns a map with key=tag and value=textOfTheTag,
# where the first character of the key is always capitalized
# (so a tag "foo" would yield a key "Foo")
to mapDomText(domTextNodes) :any {
def table := [] asKeys() diverge()
def nodeText(list) :String {
if (list size() == 1) {
list[0] getData()
} else if (list size() ==0 ) {
""
} else {
//badData, no way to inform
}
}
def visitor {
match [verb, args] {
if (verb =~ `visit@{theKey}`) {
table[theKey] := nodeText(args[0])
}
}
}
for each in domTextNodes {each welcome(visitor)}
table snapshot()
}
to xmlFromMap(map) :String {
var xml := ""
for key => value in map {
xml := `$xml<$key>$value</$key>${"\n"}`
}
xml
}
}
1.1 e/src/esrc/com/skyhunter/e/util/extractChildNodesFunc.emaker
Index: extractChildNodesFunc.emaker
===================================================================
def extractChildNodes(tag, node) :near {
def nodes := [] diverge()
for each in node {
if (each getNodeType() == 1 &&
each getTagName() == tag) {
nodes push(each)
}
}
nodes snapshot()
}
#def tree := sml`<a> <b> <c>blah</c></b></a>`
# println("b of Tree: " + extractChildNodes("b", tree))
1.1 e/src/esrc/com/skyhunter/e/util/mapDomTextFunc.emaker
Index: mapDomTextFunc.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def mapDomText(domTextNodes) :any {
def table := [] asKeys() diverge()
def nodeText(list) :String {
if (list size() == 1) {
list[0] getData()
} else if (list size() ==0 ) {
""
} else {
//badData, no way to inform
}
}
def visitor {
match [verb, args] {
if (verb =~ `visit@{theKey}`) {
table[theKey] := nodeText(args[0])
}
}
}
for each in domTextNodes {each welcome(visitor)}
table snapshot()
}
1.1 e/src/esrc/com/skyhunter/e/util/testDomFromTextFunc.updoc
Index: testDomFromTextFunc.updoc
===================================================================
?def domFromText := <import:com.skyhunter.e.util.domFromTextFunc>
# value: <domFromText>
? domFromText("<b><a>blah</a></b>")
# value: sml`<b>
# <a>
# blah
# </a>
# </b>`
?
1.1 e/src/esrc/com/skyhunter/e/util/testDomTreeKit.e
Index: testDomTreeKit.e
===================================================================
println("started test")
def domTreeKit := <import:com.skyhunter.e.util.domTreeKit>
def kitTest() {
def tree := sml`<a> <b> <c>blah</c></b></a>`
println("b of Tree: " + domTreeKit extractChildNodes("b", tree))
println("xmlFromMap: " + domTreeKit xmlFromMap(["A" => "1", "b" => "2"]))
}
kitTest()
1.1 e/src/esrc/com/skyhunter/eDesk/capLauncherAuthor.emaker
Index: capLauncherAuthor.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def capletLauncherAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any {
def swing__uriGetter := <unsafe:javax.swing.*>
def awt__uriGetter := <unsafe:java.awt.*>
def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter)
def traceOut := <unsafe:java.lang.System> out()
def trace(text) {E call(traceOut, "print(Object)", [text])}
def traceln(text) {trace(text + "\n")}
def launchCaplet(capletSourceFile) :any {
#def sourcePath := capletSourceFile getCanonicalPath()
#def capletNameRoot := capletSourceFile nameRoot???
#def sourceDir := capletSourceFile getDir()
#if (!(<file:installedApps> exists())) {<unsafe:java.io.File> mkdir("installedApps")}
#def outFile := <file: (capletNameRoot + year + month + day + hour + min + ".run")>
#def capletAuthor := <import:com.skyhunter.RUNSOURCE> run(capletSourceFile getText())
#def agreedCapsPromiser := <import:com.skyhunter.installer.agreedCapsXMLPromiserAuthor> run(
# unsafe__uriGetter, file__uriGetter)
#def capsXMLVow := agreedCapsPromiser(capletAuthor getRequestedCaps())
#when (capsXMLVow) -> done(capsXML) {
# outFile setText(capsXML)
# mapInstalledRunFile(outFile)
#} catch prob {traceln("capsXML lost: " + prob)}
}
}
1.1 e/src/esrc/com/skyhunter/eDesk/installedAppsManagerMaker.emaker
Index: installedAppsManagerMaker.emaker
===================================================================
class installedAppsManagerMaker (appsXMLFile, traceln) :near {
def domTreeKit := <import:com.skyhunter.e.util.domTreeKit>
var appMapsBySourcePath := [] asKeys() diverge()
var appMapsByPetExtension := [] asKeys() diverge()
var appMapsByPetName := [] asKeys() diverge()
def addAppMap(map) {
appMapsBySourcePath[map["SourcePath"]] := map
if (map maps ("Suffix")) {appMapsByPetExtension[map["Suffix"]] := map}
if (map maps ("Name")) {appMapsByPetName[map["Name"]] := map}
}
def loadApps() {
appMapsBySourcePath := [] asKeys() diverge()
appMapsByPetExtension := [] asKeys() diverge()
appMapsByPetName := [] asKeys() diverge()
#traceln("about to get domm tree in appsManager loadapps: " + appsXMLFile getText())
def appsTree := domTreeKit domFromText(appsXMLFile getText())
#traceln("got dom tree in appsManager loadapps: " + appsTree)
#traceln("apps from tree: " + domTreeKit extractChildNodes("app", appsTree[0]))
for each in domTreeKit extractChildNodes("app", appsTree[0]) {
def nextAppMap := domTreeKit mapDomText(each)
addAppMap(nextAppMap)
}
traceln("got app map in apps manager: " + appMapsBySourcePath)
}
def saveApps() {
traceln("into saveApps in appsManager, appMaps: " + appMapsBySourcePath)
var xml := "<installed>\n"
for each in appMapsBySourcePath {
xml+= `<app>${"\n"}${domTreeKit xmlFromMap(each)}</app>`
}
xml += "</installed>"
appsXMLFile setText(xml)
traceln("just set appsxmlfile text: " + xml)
traceln("the appsxmlfile is: " + appsXMLFile getCanonicalPath())
}
loadApps()
def installedAppsManager {
to getAppBySourcePath(path) :near {
traceln("getAppBySource: " + path)
#traceln("from appMaps: " + appMapsBySourcePath)
#appMapsBySourcePath[path]
appMapsBySourcePath[path]
}
to optAppBySourcePath(path) :near {appMapsBySourcePath get(path, null)}
to getAppPetNames() :pbc {
def names := [] diverge()
for each => value in appMapsByPetName {
names push(each)
}
names snapshot()
}
to optAppByPetName(name) :near {
traceln("optAppByPetname name: " + name)
appMapsByPetName get(name, null)
}
to reload() {loadApps()}
to save() {saveApps()}
to addApp(appMap) {
addAppMap(appMap)
saveApps()
}
to removeAppBySourcePath(sourcePath) {}
}
}
1.1 e/src/esrc/com/skyhunter/eDesk/progressWindowMakerAuthor.emaker
Index: progressWindowMakerAuthor.emaker
===================================================================
def progressWindowMakerAuthor(swing__uriGetter, standardWindow) :near {
class progressWindowMaker(title) :near {
var fileSize := 1000000000
def progressWindow
def myFrame := standardWindow(title,progressWindow)
def myProgressPane := <swing:JProgressBar> new()
myProgressPane setStringPainted(true)
myFrame getContentPane() add(myProgressPane)
myFrame pack()
myFrame setSize(150,50)
myFrame show()
def bind progressWindow {
to setProgress(amountCopied) {
def percent := (amountCopied *100) _/ fileSize
myProgressPane setValue(percent)
myProgressPane setString(`$percent%`)
}
to setFileSize(size) {
fileSize := size
}
to windowClosing() {}
to closeWindow() {myFrame dispose()}
}
}
}
1.1 e/src/esrc/com/skyhunter/eDesk/quickEditMakerAuthor.emaker
Index: quickEditMakerAuthor.emaker
===================================================================
def quickEditMakerAuthor(traceln, awt__uriGetter,
swing__uriGetter, connectionWarning,
standardWindow, dialogPromiser) :near {
//QuickEdit
def uiTools := <import:com.skyhunter.ex.swing.uiToolsAuthor>(awt__uriGetter,swing__uriGetter)
class quickEditMaker(myFilePromise) :near {
def quickEdit
var myText := myFilePromise <- getText()
def canWrite := myFilePromise <- canWrite()
def myFileName := myFilePromise <- getName()
var closingInProcess := false
def mainFrame := standardWindow("",quickEdit)
def mainPane := mainFrame getContentPane()
mainFrame setDefaultCloseOperation(<swing:WindowConstants> DO_NOTHING_ON_CLOSE())
def border := <awt:BorderLayout> new()
mainPane setLayout(border)
def saveAction() {quickEdit save()}
def saveButton := uiTools newButton ("Save",saveAction)
def textPane := <swing:JTextArea> new()
textPane setLineWrap(true)
textPane setTabSize(4)
def scrollingTextPane := <swing:JScrollPane> new(
<swing:ScrollPaneConstants> VERTICAL_SCROLLBAR_ALWAYS(),
<swing:ScrollPaneConstants> HORIZONTAL_SCROLLBAR_NEVER())
scrollingTextPane getViewport() add(textPane)
mainPane add(saveButton,"North")
mainPane add(scrollingTextPane, "Center")
when (myFileName) -> done(name) {
mainFrame setTitle("Eedit - " + name)
saveButton setEnabled(canWrite)
textPane setText(myText)
mainFrame pack()
mainFrame setSize(600,400)
mainFrame show()
} catch err {connectionWarning("couldn't get filename")}
def bind quickEdit {
to save() {
myText := textPane getText()
def setPromised := myFilePromise <- setText(myText)
when (setPromised) -> done(textSet) {
#do nothing
} catch err {
connectionWarning("Save may have failed for: " + myFileName + " because: " + err)
}
}
to windowClosing() {
if (!closingInProcess) {
closingInProcess := true
def finalText:= textPane getText()
if (finalText == myText) {
mainFrame dispose()
} else {
def saveDecision := dialogPromiser new("Modified File " + myFileName, "Save Before Exiting?", null, ["Save", "Exit", "Cancel"])
when (saveDecision <- getClickedButton()) -> done(answer) {
closingInProcess := false
if (answer == null) {
answer := "Cancel"
}
if (answer =="Save") {
traceln("into save")
quickEdit save()
mainFrame dispose()
} else if (answer == "Exit") {
myText := finalText
mainFrame dispose()
}
} catch err{}
}
}
}
}
}
}
1.1 e/src/esrc/com/skyhunter/eDesk/icons/chile.gif
Index: chile.gif
===================================================================
GIF89a
(p
4
lpᐲABeDT gd@1
1.1 e/src/esrc/com/skyhunter/eDesk/icons/goto.gif
Index: goto.gif
===================================================================
GIF89a
CRRQcc?NN7DD&&'11
8 @
.
1.1 e/src/esrc/com/skyhunter/eDesk/icons/home.gif
Index: home.gif
===================================================================
GIF89a
1.1 e/src/esrc/com/skyhunter/eDesk/icons/refresh.gif
Index: refresh.gif
===================================================================
GIF89a
1.1 e/src/esrc/com/skyhunter/eDesk/icons/stranger.gif
Index: stranger.gif
===================================================================
GIF89a
edkdxd
dccbb|bbap`d`c`_}_I^I^]U\m\i\[ZtZY~XtTT{TdTS[SOQ
PGPOvOMLLKXJIH_H
CrBBA?A @`?_???>_>=!:`99
8@8#888716+54R443W2N2?1?1=0:/P.-I-:-/*B(I(A(3(*'&&%G$H$1#&#$"2"/!0!-!%E3&,!(*--2!<2=@(7-!3
9
/) 2#
7xc+ujN}zCłBRse̚7+\h!%NȪQC6 2ÍX kdE
3`uf$"M9cR<V,<p1bذ1C̛$ƀ
1.1 e/src/esrc/com/skyhunter/eDesk/icons/super.gif
Index: super.gif
===================================================================
GIF89a
1.1 e/src/esrc/com/skyhunter/eDesk/icons/up.gif
Index: up.gif
===================================================================
GIF89a
(P@
(P
1.1 e/src/esrc/com/skyhunter/eDesk/strings/about.txt
Index: about.txt
===================================================================
eDesk
Copyright 1999-2001 Marc Stiegler.
All rights reserved.
This software covered by the Mozilla license.
For details see
http://www.skyhunter.com/marcs/securit-Edesk-license.html
1.1 e/src/esrc/com/skyhunter/eDesk/strings/appsDescFile.txt
Index: appsDescFile.txt
===================================================================
installedApps.desc
1.1 e/src/esrc/com/skyhunter/eDesk/strings/help.txt
Index: help.txt
===================================================================
eDesk Help
Window Layout
The left pane contains the list of subfolders in the current folder;
the right pane contains the list of files in the current folder.
Right-clicking in either pane pops up a menu of operations
including New, Copy, and Paste.
1.1 e/src/esrc/com/skyhunter/eDesk/strings/installedAppsDir.txt
Index: installedAppsDir.txt
===================================================================
installedApps/
1.2 +2 -2 e/src/esrc/com/skyhunter/ex/swing/capFrameMakerAuthor.emaker
Index: capFrameMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/capFrameMakerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- capFrameMakerAuthor.emaker 2001/08/08 06:00:21 1.1
+++ capFrameMakerAuthor.emaker 2001/09/12 00:01:51 1.2
@@ -46,7 +46,7 @@
class capFrameMaker() :near {
def innerFrame := <swing:JFrame> new()
- if (appImage != null) {innerFrame setIconImage(appImage)}
+ if (appImage != null) {innerFrame setIconImage(appImage)}
innerFrame setTitle(appTitle)
def contentPane := <swing:JPanel> new()
def powerPane := <swing:JPanel> new()
@@ -71,6 +71,6 @@
}
#def powerbox {match [verb,arg] {}}
-#def maker := capFrameMakerAuthor(powerbox, <swing:JFrame>, null, "test")
+#def maker := capFrameMakerAuthor(powerbox, <swing:JFrame>, null, "test")
#def win := maker new()
#win show()
1.6 +2 -2 e/src/esrc/com/skyhunter/ex/swing/dialogtest.e
Index: dialogtest.e
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/dialogtest.e,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- dialogtest.e 2001/08/29 00:20:15 1.5
+++ dialogtest.e 2001/09/12 00:01:51 1.6
@@ -1,9 +1,9 @@
-def promiser := <import:com.skyhunter.ex.swing.dialogPromiserAuthor> new(
+def promiser := <import:com.skyhunter.ex.swing.dialogVowMakerAuthor> new(
awt__uriGetter,
swing__uriGetter,
JPanel__quasiParser,
<unsafe:javax.swing.JFrame>)
println(`promiser: $promiser`)
promiser new("title", "label",null, ["ok"])
-interp blockAtTop()
+interp blockAtTop()
\ No newline at end of file
1.3 +25 -20 e/src/esrc/com/skyhunter/ex/swing/standardWindowMakerAuthor.emaker
Index: standardWindowMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/standardWindowMakerAuthor.emaker,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- standardWindowMakerAuthor.emaker 2001/08/08 05:39:16 1.2
+++ standardWindowMakerAuthor.emaker 2001/09/12 00:01:51 1.3
@@ -1,24 +1,29 @@
def standardWindowMakerAuthor(interp, frameMaker) :near {
- //close whole app when windowset returns to zero size
- def windowSet := [] asKeys() diverge()
- def standardWindowMaker (title, windowClosingHandler) :near {
- def mainFrame := frameMaker new(title)
- windowSet[mainFrame] := mainFrame
- def windowListener {
- to windowClosing(event) {
- windowClosingHandler windowClosing()
- }
- to windowClosed(event) {
- windowSet removeKey(mainFrame)
- if (windowSet size() == 0) {
- interp continueAtTop()
- }
- }
- match _ {}
- }
- mainFrame addWindowListener(windowListener)
- mainFrame
- }
+ //close whole app when windowset returns to zero size
+ def windowSet := [] asKeys() diverge()
+ def standardWindowMaker (title, windowClosingHandler) :near {
+ var undisposed := true
+ def mainFrame := frameMaker new(title)
+ windowSet[mainFrame] := mainFrame
+ def windowListener {
+ to windowClosing(event) {
+ windowClosingHandler windowClosing()
+ }
+ to windowClosed(event) {
+ windowSet removeKey(mainFrame)
+ if (undisposed) {
+ mainFrame dispose()
+ undisposed := false
+ }
+ if (windowSet size() == 0) {
+ interp continueAtTop()
+ }
+ }
+ match _ {}
+ }
+ mainFrame addWindowListener(windowListener)
+ mainFrame
+ }
}
1.4 +1 -1 e/src/esrc/com/skyhunter/ex/swing/uiToolsAuthor.emaker
Index: uiToolsAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/uiToolsAuthor.emaker,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- uiToolsAuthor.emaker 2001/04/15 05:04:26 1.3
+++ uiToolsAuthor.emaker 2001/09/12 00:01:51 1.4
@@ -18,7 +18,7 @@
to attachAction(component,runnable) {
def listener {
to actionPerformed(event) {
- runnable()
+ runnable <- run()
}
}
component addActionListener(listener)
1.1 e/src/esrc/com/skyhunter/ex/swing/dialogPromiserAuthorOld.emaker
Index: dialogPromiserAuthorOld.emaker
===================================================================
//License Agreement:
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the License at
// http://www.skyhunter.com/marcs/uiTools-license.html
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
// ANY KIND, either express or implied. See the License for the specific language governing rights and
// limitations under the License.
//The Original Code is The E UI Toolkit.
//The Initial Developer of the Original Code is Marc Stiegler. Portions created by
// Marc Stiegler are Copyright (C) Marc Stiegler. All Rights Reserved.
//**********
def dialogPromiserAuthor (awt__uriGetter, swing__uriGetter, JPanel__quasiParser, frameMaker) :near {
def uiTools := <import:com.skyhunter.ex.swing.uiToolsAuthor> (awt__uriGetter, swing__uriGetter)
class dialogPromiser (title, label, textFieldDefaultValue, buttonNames) :any {
var myClickedButton := null
def [finishedDialogPromise, resolver] := PromiseMaker()
def eDialog := {
def myWin := frameMaker new(title)
def windowListener {
to windowClosing(event) {
resolver resolve(eDialog)
}
to windowClosed(event) {
myWin dispose()
}
match _ {}
}
myWin addWindowListener(windowListener)
#traceln("added window listener")
def mainPane := myWin getContentPane()
mainPane setPreferredSize( <awt:Dimension> new (400,200))
def labelPane := E call(<swing:JLabel>, "new(String)",[label])
#labelPane setEditable(false)
labelPane setBackground (<awt:SystemColor> control());
def labelScrollPane := <swing:JScrollPane> new(labelPane)
#mainPane add(labelScrollPane, "Center")
#make textfield an empty label, make editable if default is not null
var myTextField := E call(<swing:JLabel>, "new(String)",[" "])
#uiSet baseWidth(myTextField)
if (textFieldDefaultValue != null) {
myTextField := <swing:JTextField> new(textFieldDefaultValue)
#uiSet baseWidth(myTextField)
}
class clickActionMaker(buttonIndex) :near {
def clickAction() {
myClickedButton := buttonNames[buttonIndex]
resolver resolve(eDialog)
myWin dispose()
}
}
def buttons := [] diverge()
for index => name in buttonNames {
buttons push(uiTools newButton(name, clickActionMaker new(index)))
}
def buttonPane := uiTools makeGridRow(buttons)
def dialogPane :=
JPanel`$labelScrollPane.X.Y
$myTextField
$buttonPane `
#traceln("made buttons")
mainPane add(dialogPane,"Center")
myWin pack()
myWin show()
def eDialog {
to getEnteredText() :any {
var answer := null
if (myClickedButton != null && textFieldDefaultValue != null) {
answer := myTextField getText()
}
answer
}
to getClickedButton() :any {myClickedButton}
}
}
finishedDialogPromise
}
}
#def promiser := dialogPromiserAuthor (awt__uriGetter, swing__uriGetter, null, <swing:JFrame>)
#promiser new("test", "test text", null, ["OK"])
1.1 e/src/esrc/com/skyhunter/ex/swing/dialogVowMakerAuthor.emaker
Index: dialogVowMakerAuthor.emaker
===================================================================
//License Agreement:
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the License at
// http://www.skyhunter.com/marcs/uiTools-license.html
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
// ANY KIND, either express or implied. See the License for the specific language governing rights and
// limitations under the License.
//The Original Code is The E UI Toolkit.
//The Initial Developer of the Original Code is Marc Stiegler. Portions created by
// Marc Stiegler are Copyright (C) Marc Stiegler. All Rights Reserved.
//**********
//XXX fix this author to require only jframe when capwt is working
def dialogVowMakerAuthor (awt__uriGetter, swing__uriGetter, dummyJPanel, frameMaker) :near {
def JPanel__quasiParser := <import:org.erights.ex.swing.JPanelQParserMaker> new(
awt__uriGetter, swing__uriGetter)
def uiTools := <import:com.skyhunter.ex.swing.uiToolsAuthor> (awt__uriGetter, swing__uriGetter)
class dialogPromiser (title, label, textFieldDefaultValue, buttonNames) :any {
var myClickedButton := null
def [finishedDialogPromise, resolver] := PromiseMaker()
def eDialog := {
def myWin := frameMaker new(title)
var undisposed := true
def windowListener {
to windowClosing(event) {
resolver resolve(eDialog)
}
to windowClosed(event) {
if (undisposed) {
myWin dispose()
undisposed := false
}
}
match _ {}
}
myWin addWindowListener(windowListener)
#traceln("added window listener")
def mainPane := myWin getContentPane()
mainPane setPreferredSize( <awt:Dimension> new (400,200))
def labelPane := E call(<swing:JLabel>, "new(String)",[label])
#labelPane setEditable(false)
labelPane setBackground (<awt:SystemColor> control());
def labelScrollPane := <swing:JScrollPane> new(labelPane)
#mainPane add(labelScrollPane, "Center")
#make textfield an empty label, make editable if default is not null
var myTextField := E call(<swing:JLabel>, "new(String)",[" "])
#uiSet baseWidth(myTextField)
if (textFieldDefaultValue != null) {
myTextField := <swing:JTextField> new(textFieldDefaultValue)
#uiSet baseWidth(myTextField)
}
class clickActionMaker(buttonIndex) :near {
def clickAction() {
myClickedButton := buttonNames[buttonIndex]
resolver resolve(eDialog)
myWin dispose()
}
}
def buttons := [] diverge()
for index => name in buttonNames {
buttons push(uiTools newButton(name, clickActionMaker new(index)))
}
def buttonPane := uiTools makeGridRow(buttons)
def dialogPane :=
JPanel`$labelScrollPane.X.Y
$myTextField
$buttonPane `
#traceln("made buttons")
def border := <awt:BorderLayout> new()
mainPane setLayout(border)
mainPane add(dialogPane, "Center")
myWin pack()
myWin show()
def eDialog {
to getEnteredText() :any {
var answer := null
if (myClickedButton != null && textFieldDefaultValue != null) {
answer := myTextField getText()
}
answer
}
to getClickedButton() :any {myClickedButton}
}
}
finishedDialogPromise
}
}
#def promiser := dialogVowMakerAuthor (awt__uriGetter, swing__uriGetter, null, <swing:JFrame>)
#promiser new("test", "test text", null, ["OK"])
1.1 e/src/esrc/com/skyhunter/ex/swing/uiKitAuthor.emaker
Index: uiKitAuthor.emaker
===================================================================
//License Agreement:
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License");
// you may not use this file except in compliance with the License. You may obtain a copy of the License at
// http://www.skyhunter.com/marcs/uiTools-license.html
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
// ANY KIND, either express or implied. See the License for the specific language governing rights and
// limitations under the License.
//The Original Code is The E UI Toolkit.
//The Initial Developer of the Original Code is Marc Stiegler. Portions created by
// Marc Stiegler are Copyright (C) Marc Stiegler. All Rights Reserved.
//**********
def uiToolsAuthor(awt__uriGetter,swing__uriGetter) :any {
def uiTools {
to fontMetrics(component) :any {component getFontMetrics(component getFont())}
to attachAction(component,runnable) {
def listener {
to actionPerformed(event) {
runnable <- run()
}
}
component addActionListener(listener)
}
to newButton(labelText, runnable) : any {
def button := E call(<swing:JButton>, "new(String)", [labelText])
button setDefaultCapable(false)
button setBackground (<awt:SystemColor> control());
uiTools attachAction(button,runnable)
button
}
to newToolButton(iconImage, tipText, runnable) :any {
var edgesDrawn := false
def gray := <awt:Color> darkGray()
def white := <awt:Color> white()
def baseIcon := <swing:ImageIcon> new(iconImage)
def baseImage := baseIcon getImage()
def flatIcon := baseIcon
def width := baseImage getWidth()
def button := <swing:JButton> new(flatIcon)
button setDefaultCapable(false)
uiTools attachAction(button, runnable)
button setToolTipText(tipText)
button setBackground(<awt:SystemColor> control())
button setBorder (<swing:BorderFactory> createEmptyBorder(0,0,0,0))
#button setMaximumSize(<awt:Dimension> new(width,width))
def drawEdging() {
def edge(g, leftColor, rightColor) {
def farEdge := width - 1
g setColor(leftColor)
g drawLine(0,0, 0,farEdge)
g drawLine(0,0, farEdge,0)
g setColor(rightColor)
g drawLine(farEdge,farEdge, 0,farEdge)
g drawLine(farEdge, farEdge, farEdge, 0)
}
def raisedImage := button createImage(width, width)
def gRaised := raisedImage createGraphics()
gRaised setBackground(<awt:SystemColor> control())
gRaised drawImage(baseImage,0,0,button)
edge(gRaised, white, gray)
def raisedIcon := <swing:ImageIcon> new(raisedImage)
def loweredImage := button createImage(width, width)
def gLowered := loweredImage createGraphics()
gLowered drawImage(baseImage,1,1,button)
edge(gLowered, gray, white)
def loweredIcon := <swing:ImageIcon> new(loweredImage)
button setRolloverEnabled(true)
button setRolloverIcon(raisedIcon)
button setPressedIcon(loweredIcon)
edgesDrawn := true
}
def componentListener {
to componentShown(event) {
if (!edgesDrawn) {drawEdging()}
}
to componentResized(event) {
componentListener componentShown(event)
}
match [verb,args] {}
}
button addComponentListener(componentListener)
button
}
to labelIcon(iconUrl) :near {
def icon := <swing:ImageIcon> new(iconUrl)
<swing:JLabel> new(icon)
}
to makeGridRow(paneList) :any {
def grid := <swing:JPanel> new()
grid setLayout(<awt:GridLayout> new(1,paneList size()))
for i => each in paneList {
grid add(each)
}
grid
}
to makeGridColumn(paneList) :any {
def grid := <swing:JPanel> new()
grid setLayout(<awt:GridLayout> new(paneList size(),1))
for i => each in paneList {
grid add(each)
}
grid
}
}
}
1.2 +78 -23 e/src/esrc/com/skyhunter/installer/persistentInstallerAuthor.emaker
Index: persistentInstallerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/installer/persistentInstallerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- persistentInstallerAuthor.emaker 2001/08/08 06:00:21 1.1
+++ persistentInstallerAuthor.emaker 2001/09/12 00:01:52 1.2
@@ -1,27 +1,82 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
-def persistentInstallerAuthor(unsafe__uriGetter, file__uriGetter, interp, stdout) :any {
- def swing__uriGetter := <unsafe:javax.swing.*>
- def awt__uriGetter := <unsafe:java.awt.*>
- def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter)
- def traceOut := <unsafe:java.lang.System> out()
- def trace(text) {E call(traceOut, "print(Object)", [text])}
- def traceln(text) {trace(text + "\n")}
-
- def installPersistently(capletSourceFile) :any {
- #def sourcePath := capletSourceFile getCanonicalPath()
- #def capletNameRoot := capletSourceFile nameRoot???
- #def sourceDir := capletSourceFile getDir()
- #if (!(<file:installedApps> exists())) {<unsafe:java.io.File> mkdir("installedApps")}
- #def outFile := <file: (capletNameRoot + year + month + day + hour + min + ".run")>
- #def capletAuthor := <import:com.skyhunter.RUNSOURCE> run(capletSourceFile getText())
- #def agreedCapsPromiser := <import:com.skyhunter.installer.agreedCapsXMLPromiserAuthor> run(
- # unsafe__uriGetter, file__uriGetter)
- #def capsXMLVow := agreedCapsPromiser(capletAuthor getRequestedCaps())
- #when (capsXMLVow) -> done(capsXML) {
- # outFile setText(capsXML)
- # mapInstalledRunFile(outFile)
- #} catch prob {traceln("capsXML lost: " + prob)}
- }
+def persistentInstallerAuthor(unsafe__uriGetter, file__uriGetter, interp, introducer, eProps, traceln, stdout) :any {
+ def INSTALLED_APPS_DIR_NAME := "/installedApps/"
+ def swing__uriGetter := <unsafe:javax.swing.*>
+ def awt__uriGetter := <unsafe:java.awt.*>
+ def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter)
+
+ def frameMaker := <swing:JFrame>
+ def dialogVowMaker := <import:com.skyhunter.ex.swing.dialogVowMakerAuthor> (
+ awt__uriGetter, swing__uriGetter,
+ <import:org.erights.ex.swing.JPanelQParserMaker> new(awt__uriGetter, swing__uriGetter),
+ frameMaker)
+ #def vatMaker := <import:com.skyhunter.e.lang.vatMakerAuthor> run(unsafe__uriGetter, introducer, traceln)
+ #XXX run caplet in separate vat some day
+ def runConfinedSource := <import:com.skyhunter.e.lang.runConfinedSourceFuncAuthor> (unsafe__uriGetter, interp, traceln, stdout)
+ def ehome := eProps["e.home"]
+ def installedAppsDirPath := ehome + INSTALLED_APPS_DIR_NAME
+
+ def buildRunFileName(baseName) :String {
+ def moment := <unsafe:java.util.GregorianCalendar> new()
+ def Calendar := <unsafe:java.util.Calendar>
+ `$installedAppsDirPath$baseName${moment get(Calendar YEAR())}_${moment get(Calendar MONTH())}_${moment get(Calendar DATE())}_${moment get(Calendar HOUR())}_${moment get(Calendar MINUTE())}.run`
+ }
+
+//format for the InstalledApps.xml
+//This is probably out of date. For current version, see the xmlFormats
+// <installed>
+// <app>
+// <sourcePath>c:/abc.../name.caplet</sourcePath>
+// <runPath>c:/.../installedApps/name.run</runPath>
+// <petName>AppName</petName>
+// <petIconPath>c:/.../.../icon.gif</petIconPath>
+// <petExtension>html</petExtension>
+// </app>
+// <app>...duplicate...</app>
+// </installed>
+
+ def persistentInstaller {
+ to install(capletSourceFile, appsManager) {
+ def sourcePath := capletSourceFile getCanonicalPath()
+ def capletNameRoot := capletSourceFile getName()
+ def sourceDir := capletSourceFile getParent()
+ def outFile := <file: buildRunFileName(capletNameRoot)>
+ #def capletVat := vatMaker new(capletSourceFile getText(), "", interp getProps(), "install" + capletNameRoot )
+ #def farCapletAuthor := capletVat promisePrimordialObj()
+ def capletAuthorRcvr := runConfinedSource(capletSourceFile getText())
+ //XXX currently the Rcvr here is run immediately, but some day it will
+ //XXX be in a separate vat
+ //XXX emaker now named sourceRunnerAuthor should be renamed runSourceFuncAuthor
+ when (capletAuthorRcvr <- getRequestedCaps() ) -> done(requestsXML) {
+ //traceln("errors: " + capletVat readStderr())
+ //traceln("output: " + capletVat readStdout())
+ def agreedCapsVowMaker := <import:com.skyhunter.installer.agreedCapsPetsVowMakerAuthor> run(
+ unsafe__uriGetter, file__uriGetter)
+ def capsPetsVow := agreedCapsVowMaker new(requestsXML)
+ when (capsPetsVow) -> done(capsPets) {
+ traceln("outfile: " + outFile getCanonicalPath())
+ traceln("xml: " + capsPets getCapsXML())
+ outFile setText(capsPets getCapsXML() )
+ def appMap := capsPets getPetMap() diverge()
+ traceln("new appMap in persistentInstaller: " + appMap)
+ appMap["SourcePath"] := capletSourceFile getCanonicalPath()
+ appMap["RunPath"] := outFile getCanonicalPath()
+ appsManager addApp(appMap )
+ dialogVowMaker new("Installation Complete",
+ `<html><center>Installation of <p>$capletNameRoot <p> succeeded</center>`, null, ["OK"])
+ } catch prob {
+ traceln("capsPets lost: " + prob)
+ dialogVowMaker new("Installation Aborted",
+ "Caplet not installed", null, ["OK"])
+ }
+ } catch requestsProb {traceln("requests retrieval failed: " + requestsProb)}
+ }
+ to uninstall(capletSourceFile) {}
+ }
}
+
+
+
+
1.1 e/src/esrc/com/skyhunter/installer/agreedCapVowMakerAuthorTest.e
Index: agreedCapVowMakerAuthorTest.e
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def capsPetsMaker := <import:com.skyhunter.installer.agreedCapsPetsVowMakerAuthor> run(unsafe__uriGetter, file__uriGetter)
var capPetvow := capsPetsMaker new("
<requests>
<urlProtocols>
<protocol>
<name>http</name>
<why>Just Because</why>
</protocol>
<protocol>
<name>ftp</name>
<why>I need it!</why>
</protocol>
<protocol>
<name>file</name>
<why>I really need it!</why>
</protocol>
</urlProtocols>
<pet>
<name>TestName</name>
<suffix>txt</suffix>
<icon>data/test.gif</icon>
</pet>
</requests>")
#capPetvow := capsPetsMaker new("<requests></requests>")
println(`capPet promise: $capPetvow`)
when (capPetvow) -> done(capPet) {
println("got answer, xml: " + capPet getCapsXML())
println("appMap: " + capPet getPetMap())
} catch prob {println("prob: " + prob)}
interp blockAtTop()
1.1 e/src/esrc/com/skyhunter/installer/agreedCapsPetsVowMakerAuthor.emaker
Index: agreedCapsPetsVowMakerAuthor.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def agreedCapsPetsVowMakerAuthor(unsafe__uriGetter, file__uriGetter) :any {
def swing__uriGetter := <unsafe:javax.swing.*>
def awt__uriGetter := <unsafe:java.awt.*>
def stringDataKit := <import:com.skyhunter.installer.stringDataKit>
def JPanel__quasiParser := <import:org.erights.ex.swing.JPanelQParserMaker> new(awt__uriGetter, swing__uriGetter)
def uiKit := <import:com.skyhunter.ex.swing.uiToolsAuthor> run(awt__uriGetter, swing__uriGetter)
def traceOut := <unsafe:java.lang.System> out()
def trace(text) {E call(traceOut, "print(Object)", [text])}
def traceln(text) {trace(text + "\n")}
def mapDomText := <import:com.skyhunter.e.util.mapDomText>
class capsPetsMaker(capsXML,petMap) :near {
def capsPets {
to getCapsXML() :String {capsXML}
to getPetMap() :near {petMap}
}
}
def validUrlProtocols := ["http","https", "ftp","mailto"] asKeys()
class agreedCapsPetsPromiser(requestsXML) :any {
def [capsPromise, capsSolver] := PromiseMaker()
traceln("about to get requestsTree")
def requestsTree := (sml__quasiParser valueMaker(requestsXML) substitute(ListMaker run()))
traceln("got requestsTree")
def agreedUrlProtocols := [] asKeys() diverge()
def urlProtocolsListPanel := <swing:Box> new(1)
def petFieldsMap := [] asKeys() diverge()
def petListPanel := <swing:Box> new(1)
def capTabsPane := <swing:JTabbedPane> new()
def protocolsVisitor {
to visitProtocol(subnodes) {
def table := mapDomText(subnodes)
traceln("table: " + table)
if (validUrlProtocols maps(table["Name"])) {
def protocolCheck := <swing:JCheckBox> new(table["Name"])
def whyLabel := <swing:JLabel> new(table["Why"])
def protocolPane := JPanel`$protocolCheck $whyLabel.X`
def clickedRunner() {
traceln("into clickedRunner")
if (protocolCheck isEnabled()) {
agreedUrlProtocols[table["Name"]] := null
} else {
agreedUrlProtocols removeKey(table["Name"])
}
traceln("did clickedRunner: " + agreedUrlProtocols)
}
uiKit attachAction(protocolCheck, clickedRunner)
urlProtocolsListPanel add(protocolPane)
} else {traceln("invalid protocol: " + table["Name"])}
}
to viewText(text) {}
}
def requestsVisitor {
to visitUrlProtocols(subnodes) {
for each in subnodes {each welcome(protocolsVisitor)}
def helpLabel := <swing:JLabel> new(stringDataKit getUrlProtocolHelp())
def urlProtocolsMainPanel :=
JPanel`$urlProtocolsListPanel
$helpLabel.Y`
urlProtocolsMainPanel setName("Web")
capTabsPane add(urlProtocolsMainPanel)
}
to visitPet(subnodes) {
def panels := [] diverge()
def table := mapDomText(subnodes)
traceln("table: " + table)
def makeLabelField(label, defaultKey) :near {
def field := <swing:JTextField> new(table[defaultKey])
petFieldsMap[defaultKey] := field
JPanel`${<swing:JLabel> new(label)} $field`
}
if (table maps("Name")) {
panels push(makeLabelField("Pet Name:", "Name"))
}
if (table maps("Icon")) {
panels push(makeLabelField("Icon Path:", "Icon"))
}
if (table maps("Suffix")) {
panels push(makeLabelField("Default File Extension: ", "Suffix"))
}
if (panels size() > 0) {
def helpLabel := <swing:JLabel> new(stringDataKit getPetHelp())
for each in panels {
petListPanel add(each)
}
def petMainPanel :=
JPanel`$petListPanel
$helpLabel.Y`
petMainPanel setName("Pet Data")
capTabsPane add(petMainPanel)
}
}
to viewText(text) {}
}
def topVisitor {
to visitRequests(subnodes) {
for each in subnodes {each welcome (requestsVisitor)}
}
to visitPet(subnodes) {requestsVisitor visitPet(subnodes)}
to visitUrlProtocols(subnodes) { requestsVisitor visitUrlProtocols(subnodes)}
to viewText(blah) {}
}
for each in requestsTree {each welcome(topVisitor)}
def frame := <swing:JFrame> new()
def windowListener {
to windowClosing(event) {
capsSolver smash("Grants not made")
frame dispose()
}
match [verb, args] {}
}
frame addWindowListener(windowListener)
def grantRunner() {
traceln("into grantrunner: " )
frame dispose()
var xmlOut := "<caps>"
if (agreedUrlProtocols size() > 0) {
xmlOut += "<urlProtocols>"
for each => dummy in agreedUrlProtocols {
xmlOut += `<protocol>$each</protocol>`
}
xmlOut += "</urlProtocols>"
}
xmlOut += "</caps>"
def petData := [] asKeys() diverge()
for key => value in petFieldsMap {
petData[key] := value getText()
}
capsSolver resolve(capsPetsMaker new(xmlOut,petData snapshot() ) )
}
def grantButton := uiKit newButton("Grant All Checked Authorities", grantRunner)
def realPane :=
JPanel`$capTabsPane.Y
$grantButton `
frame getContentPane() add(realPane)
frame pack()
frame setSize(600,600)
frame show()
capsPromise
}
}
1.1 e/src/esrc/com/skyhunter/installer/stringDataKit.emaker
Index: stringDataKit.emaker
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def stringDataKit {
to getUrlProtocolHelp() :String {
"<html><b>Rating: </b>Medium-high power <br>
<b>Legitimate applications: </b> Web browsers, FTP servers, some chat programs
<br><b>Risks: </b>
A program granted URL protocols can transmit any data you supply the program to anyone on the network. So be careful about granting both read authority on your confidential files and URL protocols to the same program<br>
The program can also receive orders from others through these protocols.
<br>The program can be used in denial of service attacks on other people.
<br> URL protocols cannot be directly used to gain control of your computer. However, any attempt to gain control of your system is likely to include a request for these protocols so that the attacker can communicate with the suborned system.
</html>"
}
to getPetHelp() :String {
"<html>The Pet Name is your personal name for this program.
<p> The File Extension is the last part of the names of documents which will be opened with this caplet by default
<p> The Pet Icon is the image that will be placed in the top left corner of all windows opened by this caplet
</html>"
}
}
1.2 +11 -29 e/src/esrc/com/skyhunter/testCaplet/helloWorldCapletAuthor.emaker
Index: helloWorldCapletAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/testCaplet/helloWorldCapletAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- helloWorldCapletAuthor.emaker 2001/08/08 06:00:21 1.1
+++ helloWorldCapletAuthor.emaker 2001/09/12 00:01:52 1.2
@@ -1,32 +1,14 @@
def helloWorldCapletAuthor {
- to getRequestedCaps() :near {"<requests></requests>"}
- to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
- def trace := powerbox optCap(powerbox TRACE())
- def helloWorldCaplet {
- to reactToCut() :any {}
- to reactToCopy() :any {}
- to reactToPaste(object) {}
- to reactToSaveRequest(outStream) {}
- to reactToPrintRequest(printJob) {}
- to init() {
- trace("Hello World Running \n")
- def frameMaker := powerbox optCap(powerbox FRAME_MAKER())
- def frame := frameMaker new("Hello World")
- def label := <swing:JLabel> new(
- "<html><b>Hello World</b><p>has arrived</html>")
- frame getContentPane() add(label)
- def listener {
- to windowClosing(event) {
- powerbox requestExit()
- }
- match [verb, args] {}
- }
- frame addWindowListener(listener)
- frame show()
- }
- }
- helloWorldCaplet init()
- helloWorldCaplet
- }
+ to getRequestedCaps() :near {"<requests></requests>"}
+ to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
+ def traceln := powerbox optCap(powerbox TRACELN())
+ def helloWorldCaplet {
+ to init() {
+ traceln ("Hello World has run")
+ }
+ }
+ helloWorldCaplet init()
+ helloWorldCaplet
+ }
}
1.2 +1 -1 e/src/esrc/com/skyhunter/testCaplet/helloWorldTester.e
Index: helloWorldTester.e
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/testCaplet/helloWorldTester.e,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- helloWorldTester.e 2001/08/08 06:00:21 1.1
+++ helloWorldTester.e 2001/09/12 00:01:52 1.2
@@ -2,7 +2,7 @@
//Copyright (C) 2001 Combex. All Rights Reserved.
def controllerMaker := <import:com.skyhunter.e.security.powerboxControllerMakerAuthor> run(
- unsafe__uriGetter, file__uriGetter, interp, stdout)
+ unsafe__uriGetter, file__uriGetter, interp, println, stdout)
def helloWorldCapletAuthor := <import:com.skyhunter.testCaplet.helloWorldCapletAuthor>
1.2 +28 -28 e/src/esrc/com/skyhunter/testCaplet/testCapletAuthor.emaker
Index: testCapletAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/testCaplet/testCapletAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- testCapletAuthor.emaker 2001/08/08 06:00:21 1.1
+++ testCapletAuthor.emaker 2001/09/12 00:01:52 1.2
@@ -1,31 +1,31 @@
def testCapletAuthor {
- to getRequestedCaps() :near {"<requests></requests>"}
- to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
- def trace := powerbox optCap(powerbox TRACE())
- def testCaplet {
- to reactToFile(file) :boolean {}
- to reactToCut() :any {}
- to reactToCopy() :any {}
- to reactToPaste(object) {}
- to reactToSaveRequest(outStream) {}
- to reactToPrintRequest(printJob) {}
- to init() {
- trace("testCaplet in emaker running\n")
- def frameMaker := powerbox optCap(powerbox FRAME_MAKER())
- trace("frameMaker retrieved")
- def frame := frameMaker new("TestCaplet has arrived")
- def label := <swing:JLabel> new(
- "<html><b>Test Caplet</b><p>has arrived</html>")
- trace("created label\n")
- frame getContentPane() add(label)
- trace ("added label to content pane\n")
- frame show()
- trace("testCaplet about to requestExit")
- powerbox requestExit()
- }
- }
- testCaplet init()
- testCaplet
- }
+ to getRequestedCaps() :near {"<requests></requests>"}
+ to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
+ def traceln := powerbox optCap(powerbox TRACELN())
+ def testCaplet {
+ to reactToFile(file) :boolean {}
+ to reactToCut() :any {}
+ to reactToCopy() :any {}
+ to reactToPaste(object) {}
+ to reactToSaveRequest(outStream) {}
+ to reactToPrintRequest(printJob) {}
+ to init() {
+ traceln ("testCaplet in emaker running")
+ def frameMaker := powerbox optCap(powerbox FRAME_MAKER())
+ traceln("frameMaker retrieved")
+ def frame := frameMaker new("TestCaplet has arrived")
+ def label := <swing:JLabel> new(
+ "<html><b>Test Caplet</b><p>has arrived</html>")
+ traceln ("created label")
+ frame getContentPane() add(label)
+ traceln ("added label to content pane")
+ frame show()
+ traceln ("testCaplet about to requestExit")
+ powerbox requestExit()
+ }
+ }
+ testCaplet init()
+ testCaplet
+ }
}
1.1 e/src/esrc/com/skyhunter/testCaplet/helloWorldCapletAuthor.caplet
Index: helloWorldCapletAuthor.caplet
===================================================================
def helloWorldCapletAuthor {
to getRequestedCaps() :near {"<requests></requests>"}
to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
def traceln := powerbox optCap(powerbox TRACELN())
def helloWorldCaplet {
to init() {
traceln ("Hello World has run")
}
}
helloWorldCaplet init()
helloWorldCaplet
}
}
1.1 e/src/esrc/com/skyhunter/testCaplet/helloWorldCapletPlusAuthor.emaker
Index: helloWorldCapletPlusAuthor.emaker
===================================================================
def helloWorldCapletAuthor {
to getRequestedCaps() :near {"<requests></requests>"}
to run(powerbox, awt__uriGetter, swing__uriGetter) :near {
def traceln := powerbox optCap(powerbox TRACELN())
def helloWorldCaplet {
to reactToCut() :any {}
to reactToCopy() :any {}
to reactToPaste(object) {}
to reactToSaveRequest(outStream) {}
to reactToPrintRequest(printJob) {}
to init() {
traceln ("Hello World Running ")
def frameMaker := powerbox optCap(powerbox FRAME_MAKER())
def frame := frameMaker new("Hello World")
def label := <swing:JLabel> new(
"<html><b>Hello World</b><p>has arrived</html>")
frame getContentPane() add(label)
def listener {
to windowClosing(event) {
powerbox requestExit()
}
match [verb, args] {}
}
frame addWindowListener(listener)
frame pack()
frame show()
}
}
helloWorldCaplet init()
helloWorldCaplet
}
}
1.1 e/src/esrc/com/skyhunter/testCaplet/helloWorldPlusTester.e
Index: helloWorldPlusTester.e
===================================================================
//Copyright (C) 2001 Combex. All Rights Reserved.
def controllerMaker := <import:com.skyhunter.e.security.powerboxControllerMakerAuthor> run(
unsafe__uriGetter, file__uriGetter, interp, println, stdout)
def helloWorldCapletPlusAuthor := <import:com.skyhunter.testCaplet.helloWorldCapletPlusAuthor>
#test with caplet in emaker
def capletController := controllerMaker new(null, "Test Emaker Caplet:",null, "")
def powerbox := capletController getPowerbox()
capletController startExternalCaplet(helloWorldCapletPlusAuthor(powerbox, awt__uriGetter, swing__uriGetter))
interp blockAtTop()
1.1 e/src/esrc/com/skyhunter/testCaplet/testLauncherOld.e
Index: testLauncherOld.e
===================================================================
def sky__uriGetter := <import:com.skyhunter.*>
def capSource := <resource:com/skyhunter/testCaplet/testCaplet.emaker> getText()
def capRingControllerMaker := <sky:e.security.capRingControllerMakerAuthor>(
unsafe__uriGetter, file__uriGetter)
def capRingController := capRingControllerMaker new(null)
def powerboxControllerMaker := <sky:e.security.powerboxControllerMakerAuthor>(
unsafe__uriGetter, file__uriGetter, resource__uriGetter, JPanel__quasiParser)
def image := <swing:ImageIcon> new(<resource:com/skyhunter/e/icons/cut.gif>) getImage()
def powerboxController := powerboxControllerMaker new(image, "TestCaplet",
capSource, [], capRingController)
1.40 +25 -16 e/src/esrc/scripts/eBrowser.e
Index: eBrowser.e
===================================================================
RCS file: /cvs/e/src/esrc/scripts/eBrowser.e,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- eBrowser.e 2001/09/08 22:59:20 1.39
+++ eBrowser.e 2001/09/12 00:01:52 1.40
@@ -2,6 +2,7 @@
# License Agreement:
+
# The contents of this file are subject to the Mozilla Public License
# Version 1.1 (the "License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License
@@ -36,7 +37,7 @@
sturdyRef)
def uiTools := <import:com.skyhunter.ex.swing.uiToolsAuthor>(awt__uriGetter,
swing__uriGetter)
-def dialogPromiser := <import:com.skyhunter.ex.swing.dialogPromiserAuthor>(
+def dialogVowMaker := <import:com.skyhunter.ex.swing.dialogVowMakerAuthor>(
awt__uriGetter,
swing__uriGetter,
JPanel__quasiParser,
@@ -101,7 +102,7 @@
Java version: ${props["java.version"]} at ${props["java.home"] replaceAll("\\", "/")}<br>
E version: ${props["e.version"]} at ${props["e.home"]}<br>
for ${props["user.name"]} in ${props["user.region"]}</html>`
- dialogPromiser new("About eBrowser", text, null, ["OK"])
+ dialogVowMaker new("About eBrowser", text, null, ["OK"])
}
def buildScriptList(folder, suffix) :any {
@@ -139,7 +140,7 @@
} else {analysisNowInProgress := false}
} catch e {
println("dead sync: " + e)
- dialogPromiser new("Browse Server Lost",
+ dialogVowMaker new("Browse Server Lost",
`<html><b>Error:</b><br> $e</html>`,
null,
["OK"])
@@ -392,9 +393,9 @@
def tabActionRunner() {
def location := textPane getCaretPosition()
#traceln("position: " + location)
- textPane insert(tabValue, location)
+ textPane replaceRange(tabValue, location, location)
textPane setCaretPosition(location + tabValue size())
- # XXX textPane update(textPane getGraphics())
+ #textPane update(textPane getGraphics())
}
def tabAction := eActionMaker new()
tabAction setAction(tabActionRunner)
@@ -414,7 +415,7 @@
if (canUndent) {
textPane replaceRange("",caretPosition -tabSize, caretPosition)
textPane setCaretPosition (caretPosition - tabSize)
- # XXX textPane update(textPane getGraphics())
+ #textPane update(textPane getGraphics())
}
}
}
@@ -428,7 +429,7 @@
def insertIndented(indentation) {
textPane insert("\n" + indentation, caretPosition)
textPane setCaretPosition(caretPosition + 1 + indentation size())
- # XXX textPane update(textPane getGraphics())
+ #textPane update(textPane getGraphics())
}
def lineNum := textPane getLineOfOffset(caretPosition)
def lineIndex := textPane getLineStartOffset(lineNum)
@@ -457,19 +458,19 @@
class eBrowserMaker(textModel) :any {
def newButton(name, operation, target) :any {
def runner() {
- E call(target, operation, [])
+ E send(target, operation, [])
}
uiTools newButton(name,runner)
}
def newToolButton(uri, tipText, operation, target) :any {
def runner() {
- E call(target, operation, [])
+ E send(target, operation, [])
}
uiTools newToolButton(uri, tipText ,runner)
}
def addMenuItem(menu, name, operation, target) :any {
def runner() {
- E call(target, operation, [])
+ E send(target, operation, [])
}
uiTools addMenuItem(menu, name,runner)
}
@@ -696,7 +697,7 @@
def path := openFile getCanonicalPath()
#traceln(`current openFiles: $openFiles`)
if (openFiles maps(path)) {
- dialogPromiser new("File Already Open", "Cannot save as open file", null, ["OK"])
+ dialogVowMaker new("File Already Open", "Cannot save as open file", null, ["OK"])
} else {
textModel saveAs(path)
openFiles[path] := eBrowser
@@ -866,6 +867,15 @@
reader getTwine(`file:$path`)
}
+ var undisposed := true
+ def closeCleanly() {
+ textModel close()
+ if (undisposed) {
+ mainFrame dispose()
+ undisposed := false
+ }
+ }
+
def bind eBrowser {
to save() {
if (textModel saveFileIsSet()) {
@@ -994,10 +1004,12 @@
to reformat() {
textPane setEditable(false)
eBrowser setStatus("Reformatting...")
+ outputPane setText("Reformatting...")
try {
textPane setText(PrettyFeeder pretty(getTwine()))
textPane setEditable(true)
eBrowser setStatus("Reformat Done.")
+ outputPane setText("Reformat Done.")
textPane setEditable(true)
} catch problem {
textPane setEditable(true)
@@ -1038,17 +1050,13 @@
replaceSelectionHilite(cleancode)
}
to windowClosing() {
- def closeCleanly() {
- textModel close()
- mainFrame dispose()
- }
if (!closingInProcess) {
closingInProcess := true
# def finalText:= textPane getText()
if (textPane getText() == textModel getText()) {
closeCleanly()
} else {
- def saveDecision := dialogPromiser new(
+ def saveDecision := dialogVowMaker new(
"Modified File " + textModel getFileName(),
"Save Before Exiting?",
null,
@@ -1102,6 +1110,7 @@
unsafe__uriGetter, introducer, println)
def source := "<import:com.skyhunter.eBrowser.syncServerMakerAuthor> run(unsafe__uriGetter, stdout)"
def vat := vatMaker new(source, [], interp getProps(), "Sync Server Maker")
+ vat getRunner() setPriority(1)
def farSyncServerMaker := vat promisePrimordialObj()
farBrowseServerResolver resolve(farSyncServerMaker)
}