[e-cvs] cvs commit: e/src/jsrc/org/erights/e/ui/jed JedMain.java

markm@eros.cs.jhu.edu markm@eros.cs.jhu.edu
Wed, 8 Aug 2001 01:39:17 -0400


markm       01/08/08 01:39:17

  Modified:    src      Makefile
               src/esrc/com/skyhunter/e/net vowToolsMaker.emaker
               src/esrc/com/skyhunter/e/util timer.e
               src/esrc/com/skyhunter/eBrowser/ebScripts countLines.emaker
                        indentTabs.emaker
               src/esrc/com/skyhunter/eDeskPlus
                        progressWindowMakerAuthor.emaker
                        quickEditMakerAuthor.emaker
               src/esrc/com/skyhunter/eDeskPlus/strings help.txt
               src/esrc/com/skyhunter/ex/swing dialogPromiserAuthor.emaker
                        dialogtest.e standardWindowMakerAuthor.emaker
               src/esrc/org/erights/e/elang/interp E.emaker
                        PerlMatchMakerMaker.emaker
               src/esrc/scripts eBrowser.e eDeskPlus.e
               src/jsrc/org/erights/e/elang/interp Interp.java
               src/jsrc/org/erights/e/ui/jed JedMain.java
  Log:
  new syncing eBrowser.  vatMakerAuthor

Revision  Changes    Path
1.102     +2 -2      e/src/Makefile

Index: Makefile
===================================================================
RCS file: /cvs/e/src/Makefile,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- Makefile	2001/08/06 17:21:19	1.101
+++ Makefile	2001/08/08 05:39:16	1.102
@@ -7,8 +7,8 @@
 
 # Prefix tagging this release's attributes
 PREFIX=tl-E
-DOTVER=0.8.9x
-TAGVER=0_8_9x
+DOTVER=0.8.9y
+TAGVER=0_8_9y
 RELEASE=working
 
 TOP=..



1.5       +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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- vowToolsMaker.emaker	2001/04/28 10:00:05	1.4
+++ vowToolsMaker.emaker	2001/08/08 05:39:16	1.5
@@ -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 {
-				Ref whenResolved(each, 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.5       +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.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- timer.e	2001/07/31 13:09:13	1.4
+++ timer.e	2001/08/08 05:39:16	1.5
@@ -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 whenAlarm(timer now() + 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.2       +5 -5      e/src/esrc/com/skyhunter/eBrowser/ebScripts/countLines.emaker

Index: countLines.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/eBrowser/ebScripts/countLines.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- countLines.emaker	2001/04/05 01:37:12	1.1
+++ countLines.emaker	2001/08/08 05:39:16	1.2
@@ -1,9 +1,9 @@
 def countLines {
-	to run(text) :pbc {
-		def count := text split("\n") size() - 1
-		"" + `The number of lines in the selection is: $count`
-	}
-	to requestsSubstitution() :pbc {false}
+    to run(text) :pbc {
+        def count := text split("\n") size() - 1
+        "" + `The number of lines in the selection is: $count`
+    }
+    to requestsSubstitution() :pbc {false}
 }
 
 #1



1.2       +1 -1      e/src/esrc/com/skyhunter/eBrowser/ebScripts/indentTabs.emaker

Index: indentTabs.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/eBrowser/ebScripts/indentTabs.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- indentTabs.emaker	2001/04/05 01:37:12	1.1
+++ indentTabs.emaker	2001/08/08 05:39:16	1.2
@@ -2,7 +2,7 @@
     to run(text) :pbc {
         var result := ""
         var lines := (text split("\n")) diverge()
-		if ((lines [lines size() - 1]) size() == 0) {lines pop()} 
+        if ((lines [lines size() - 1]) size() == 0) {lines pop()}
         for each in lines {
             if (each trim() size() > 0) {
                 result := `$result${"\t"}$each${"\n"}`



1.2       +23 -23    e/src/esrc/com/skyhunter/eDeskPlus/progressWindowMakerAuthor.emaker

Index: progressWindowMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/eDeskPlus/progressWindowMakerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- progressWindowMakerAuthor.emaker	2001/04/16 08:46:30	1.1
+++ progressWindowMakerAuthor.emaker	2001/08/08 05:39:16	1.2
@@ -1,25 +1,25 @@
 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()}
-		}
-	}
+    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.2       +71 -71    e/src/esrc/com/skyhunter/eDeskPlus/quickEditMakerAuthor.emaker

Index: quickEditMakerAuthor.emaker
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/eDeskPlus/quickEditMakerAuthor.emaker,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- quickEditMakerAuthor.emaker	2001/04/16 08:46:30	1.1
+++ quickEditMakerAuthor.emaker	2001/08/08 05:39:16	1.2
@@ -1,73 +1,73 @@
 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 - " + myFileName)
-			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{}
-					}
-				}
-			}
-		}
-	}
+    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.2       +5 -5      e/src/esrc/com/skyhunter/eDeskPlus/strings/help.txt

Index: help.txt
===================================================================
RCS file: /cvs/e/src/esrc/com/skyhunter/eDeskPlus/strings/help.txt,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- help.txt	2001/04/16 08:46:30	1.1
+++ help.txt	2001/08/08 05:39:16	1.2
@@ -1,9 +1,9 @@
 
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 folder. -Right-clicking in either pane pops up a menu of operations including -New, Copy, and Paste. +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. - + \ No newline at end of file 1.2 +5 -2 e/src/esrc/com/skyhunter/ex/swing/dialogPromiserAuthor.emaker Index: dialogPromiserAuthor.emaker =================================================================== RCS file: /cvs/e/src/esrc/com/skyhunter/ex/swing/dialogPromiserAuthor.emaker,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- dialogPromiserAuthor.emaker 2001/03/31 06:47:32 1.1 +++ dialogPromiserAuthor.emaker 2001/08/08 05:39:16 1.2 @@ -37,7 +37,7 @@ def labelScrollPane := new(labelPane) #mainPane add(labelScrollPane, "Center") #make textfield an empty label, make editable if default is not null - def myTextField := E call(, "new(String)",[" "]) + var myTextField := E call(, "new(String)",[" "]) #uiSet baseWidth(myTextField) if (textFieldDefaultValue != null) { myTextField := new(textFieldDefaultValue) @@ -66,7 +66,7 @@ myWin show() def eDialog { to getEnteredText() :any { - def answer := null + var answer := null if (myClickedButton != null && textFieldDefaultValue != null) { answer := myTextField getText() } @@ -78,3 +78,6 @@ finishedDialogPromise } } + +#def promiser := dialogPromiserAuthor (awt__uriGetter, swing__uriGetter, null, ) +#promiser new("test", "test text", null, ["OK"]) 1.4 +1 -1 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.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- dialogtest.e 2001/04/15 05:04:26 1.3 +++ dialogtest.e 2001/08/08 05:39:16 1.4 @@ -1,5 +1,5 @@ -def promiser := new( +def promiser := new( awt__uriGetter, swing__uriGetter, JPanel__quasiParser, 1.2 +20 -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.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- standardWindowMakerAuthor.emaker 2001/04/16 08:46:30 1.1 +++ standardWindowMakerAuthor.emaker 2001/08/08 05:39:16 1.2 @@ -1,24 +1,24 @@ 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 { + 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 + } } 1.18 +1 -1 e/src/esrc/org/erights/e/elang/interp/E.emaker Index: E.emaker =================================================================== RCS file: /cvs/e/src/esrc/org/erights/e/elang/interp/E.emaker,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- E.emaker 2001/07/08 02:13:04 1.17 +++ E.emaker 2001/08/08 05:39:17 1.18 @@ -21,7 +21,7 @@ ## A value as it's printed by the command-line interpreter to toQuote(value) :any { - ELib toQuote(value) + ELib toQuote(value) } ## Assuming the two references eventually designate the *same* 1.22 +1 -1 e/src/esrc/org/erights/e/elang/interp/PerlMatchMakerMaker.emaker Index: PerlMatchMakerMaker.emaker =================================================================== RCS file: /cvs/e/src/esrc/org/erights/e/elang/interp/PerlMatchMakerMaker.emaker,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- PerlMatchMakerMaker.emaker 2001/07/09 01:36:36 1.21 +++ PerlMatchMakerMaker.emaker 2001/08/08 05:39:17 1.22 @@ -120,7 +120,7 @@ qmargs push(`(?:${qmarg})`) } def noDollars := - ""+(interpolator substitute(qmargs snapshot())) + ""+(interpolator substitute(qmargs snapshot())) E call(compiler, "compile(String)", [noDollars]) } 1.28 +93 -162 e/src/esrc/scripts/eBrowser.e Index: eBrowser.e =================================================================== RCS file: /cvs/e/src/esrc/scripts/eBrowser.e,v retrieving revision 1.27 retrieving revision 1.28 diff -u -r1.27 -r1.28 --- eBrowser.e 2001/08/04 06:56:52 1.27 +++ eBrowser.e 2001/08/08 05:39:17 1.28 @@ -15,8 +15,6 @@ # Stiegler are Copyright (C) Marc Stiegler. All Rights Reserved. # ********** -# TODO: where is real sturdyref? -def sturdyRef def ee__uriGetter := def elex := @@ -24,12 +22,12 @@ def eLogoURL := def eLogoImage := new(eLogoURL) getImage() def JFrameMaker { - to new(title) :any { - def result := new(title) - result setIconImage(eLogoImage) - result - } - to new() :any {JFrameMaker new("")} + to new(title) :any { + def result := new(title) + result setIconImage(eLogoImage) + result + } + to new() :any {JFrameMaker new("")} } def promiseAllResolved := @@ -105,14 +103,16 @@ def myNumber := syncerCounter syncerCounter += 1 def syncer() { - traceln("syncer started for: " + myNumber) + #traceln("syncer started for: " + myNumber) def vowFuncs := farBrowseServer <- refreshFuncs(textPane getText()) analysisNowInProgress := true when (vowFuncs) -> done(funcs) { if (funcs != null) { - traceln("syncer got change" + myNumber) + #traceln("syncer got change" + myNumber) textModel setLines(funcs[0], funcs[1], funcs[2], funcs[3]) - } else {traceln("syncer got NO change" + myNumber)} + } else { + #traceln("syncer got NO change" + myNumber) + } if (changeMadeSinceLastAnalysisStart) { changeMadeSinceLastAnalysisStart := false syncer() @@ -148,12 +148,12 @@ if (strippedLine size() == 0) { buf push('\n') continuationIndent := "" - } else if (strippedLine startsWith("//") || - strippedLine startsWith("#")) { - buf append(continuationIndent) - buf append(tab * flowIndentLevel) - buf append(strippedLine) - buf push('\n') + } else if (strippedLine startsWith("//") || + strippedLine startsWith("#")) { + buf append(continuationIndent) + buf append(tab * flowIndentLevel) + buf append(strippedLine) + buf push('\n') } else { if (strippedLine startsWith("}")) { flowIndentLevel := (flowIndentLevel - 1) max(0) @@ -381,8 +381,8 @@ # see if there is a sensible match, return -1 if no match found, # return index of the match in the list to the listpane selection # if there is a sensible match -def determineBestMatch(listPane,list) :pbc { - def extractElement(line) :pbc { +def determineBestMatch(listPane,list) :any { + def extractElement(line) :any { if (line =~ `* @{body}`) { body trim() } else { @@ -432,13 +432,13 @@ def runner() { E call(target, operation, []) } - uiTools newToolButton(uri, tipText, runner) + uiTools newToolButton(uri, tipText ,runner) } def addMenuItem(menu, name, operation, target) :any { def runner() { E call(target, operation, []) } - uiTools addMenuItem(menu, name, runner) + uiTools addMenuItem(menu, name,runner) } def icons__uriGetter { to get(name) :any { @@ -471,9 +471,9 @@ def reformatButton := newToolButton( , "Reformat","reformat",eBrowser) - def refreshFuncsButton := newToolButton( - , - "Sync Outline","refreshFuncs",eBrowser) + #def refreshFuncsButton := newToolButton( + # , + # "Sync Outline","refreshFuncs",eBrowser) def elmerButton := newToolButton( , "Scratchpad","scratchpad",eBrowser) @@ -600,7 +600,7 @@ # real pane def buttonPane := - JPanel`$saveButton $refreshFuncsButton $reformatButton $s1 $pasteUpdocButton $elmerButton $s2 $runHiLiteButton $runButton $s3 $gotoButton $findButton $searchField.X` + JPanel`$saveButton $reformatButton $s1 $pasteUpdocButton $elmerButton $s2 $runHiLiteButton $runButton $s3 $gotoButton $findButton $searchField.X` def realPane := JPanel`$buttonPane $outLineSplitter.X.Y @@ -658,21 +658,21 @@ } } - def makeFontLarger() { - def oldFont := textPane getFont() + def makeFontLarger() { + def oldFont := textPane getFont() def newFont := oldFont deriveFont(0.0 + oldFont getSize() + 2.0) - textPane setFont(newFont) - funcListPane setFont(newFont) - varListPane setFont(newFont) - } + textPane setFont(newFont) + funcListPane setFont(newFont) + varListPane setFont(newFont) + } - def makeFontSmaller() { - def oldFont := textPane getFont() + def makeFontSmaller() { + def oldFont := textPane getFont() def newFont := oldFont deriveFont(0.0 + oldFont getSize() - 2.0) - textPane setFont(newFont) - funcListPane setFont(newFont) - varListPane setFont(newFont) - } + textPane setFont(newFont) + funcListPane setFont(newFont) + varListPane setFont(newFont) + } # Option menu var capScriptsMaySubstitute := false @@ -729,48 +729,48 @@ #def confiner(source) :any {confinedRunner(source, outputPane)}) #E call(menubar, "add(JMenu)", [capScriptMenu]) - def indentGroup := new() - var defaultIndentItem := null + def indentGroup := new() + var defaultIndentItem := null - def menuReactor { - to doNew(){newFileFunc()} - to doOpen() {openFunc()} - to doSave() {saveFunc()} - to doSaveAs() {saveAsFunc()} - to doUseTabs() {tabValue := "\t"} - to doUseSpaces() {tabValue := " "} - to doSmallerFont() {makeFontSmaller()} - to doLargerFont() {makeFontLarger()} - to doAbout() {eBrowser about()} - match [verb,args] {traceln("menu hit for " + verb)} - } - - #make the menus - def mm := ( - swing__uriGetter, - , - menuReactor) - def menuBar := mm menuBar([ - mm menu("&File", [ - mm action("&New", "Ctrl+N"), - mm action("&Open...", "Ctrl+O"), - mm action("&Save", "Ctrl+S"), - mm action("Save &As...") - ]), - mm menu("For&mat", [ - defaultIndentItem := - mm radio(indentGroup, mm action("Use Spaces")), - mm radio(indentGroup, mm action("Use Tabs")), - "--", + def menuReactor { + to doNew(){newFileFunc()} + to doOpen() {openFunc()} + to doSave() {saveFunc()} + to doSaveAs() {saveAsFunc()} + to doUseTabs() {tabValue := "\t"} + to doUseSpaces() {tabValue := " "} + to doSmallerFont() {makeFontSmaller()} + to doLargerFont() {makeFontLarger()} + to doAbout() {eBrowser about()} + match [verb,args] {traceln("menu hit for " + verb)} + } + + #make the menus + def mm := ( + swing__uriGetter, + , + menuReactor) + def menuBar := mm menuBar([ + mm menu("&File", [ + mm action("&New", "Ctrl+N"), + mm action("&Open...", "Ctrl+O"), + mm action("&Save", "Ctrl+S"), + mm action("Save &As...") + ]), + mm menu("For&mat", [ + defaultIndentItem := + mm radio(indentGroup, mm action("Use Spaces")), + mm radio(indentGroup, mm action("Use Tabs")), + "--", mm action("Smaller Font", "Ctrl+OPEN_BRACKET"), mm action("Larger Font", "Ctrl+CLOSE_BRACKET") - ]), - mm menu("&Help", [ - mm action("&About...") - ]) - ]) - defaultIndentItem setSelected(true) - mainFrame setJMenuBar(menuBar) + ]), + mm menu("&Help", [ + mm action("&About...") + ]) + ]) + defaultIndentItem setSelected(true) + mainFrame setJMenuBar(menuBar) # configure and show window mainPane add(realPane) @@ -804,7 +804,7 @@ } match _ {} } - mainFrame addWindowListener(windowActiveListener) + mainFrame addWindowListener(windowActiveListener) startOutlineSyncer(farBrowseServerMaker <- new(), textModel, textPane) @@ -949,90 +949,6 @@ textPane setEditable(true) eBrowser setStatus("Reformat Done.") } - to refreshFuncs() { - eBrowser setStatus("Refreshing Outline...") - def computeIndent(leadString) :any { - var spaceCount := 0 - var indentCount := 0 - for each in leadString { - if (each == '\t') { - indentCount += 1 - } else if (each == ' ') { - spaceCount += 1 - } - } - indentCount := indentCount + (spaceCount _/ 4) - " " * (indentCount) - } - def newFuncList := [] diverge() - def funcLineIndices := [] diverge() - def newVarList := []diverge() - def varLineIndices := [] diverge() - var declarationType := "" - var leader := "" - var postDeclaration := "" - for eachIndex => each in textPane getText() split("\n") { - # first ascertain if this line has "def " or "class " - # in front - postDeclaration := "" - if (each =~ `@{defLeader}def @postDef`) { - leader := defLeader - postDeclaration := postDef trim() - declarationType := "def" - } else if (each =~ `@{classLeader}class @postClass`) { - leader := classLeader - postDeclaration := postClass trim() - declarationType := "class" - } else if (each =~ `@{toLeader}to @postTo`) { - leader := toLeader - postDeclaration := postTo trim() - declarationType := "to" - } else if (each =~ `@{varLeader}var @postVar`) { - leader := varLeader - postDeclaration := postVar trim() - declarationType := "var" - } - # if it looks like a class or def, using an open - # brace, process it as such - if (postDeclaration size() != 0 && leader trim() size() == 0) { - # if this is a def/class, is it an object - # definition with a "{"? - try { - # if this uses a brace in the declaration, it - # is a func - if (postDeclaration =~ `@nameArea{@theEnd` && - (elex isIdentifierStart(nameArea[0])) - ) { - def indent := computeIndent(leader) - def entry := `$indent $declarationType $nameArea` - newFuncList push(entry) - funcLineIndices push(eachIndex) - # otherwise, is this a define of a variable? - } else if (postDeclaration =~ `@nameArea:=@theEnd` && - (elex isIdentifierStart(nameArea[0]) || - nameArea[0] == '[') - ) { - def indent := computeIndent(leader) - newVarList push(`$indent $nameArea`) - varLineIndices push(eachIndex) - } else if (elex isIdentifierStart(postDeclaration[0])){ - # this is probably a def blah promise declaration - def indent := computeIndent(leader) - newFuncList push(`$indent $declarationType $postDeclaration`) - funcLineIndices push(eachIndex) - } - } catch innerDefE { - println("caught inner def e " + - innerDefE + "\nOn: " + each) - } - } - } - textModel setLines(newFuncList, - funcLineIndices, - newVarList, - varLineIndices) - eBrowser setStatus("Outline refreshed") - } to linesChanged() { configureUpdatedListPane(funcListPane, textModel getOutlineList()) configureUpdatedListPane(varListPane, textModel getVarLineList()) @@ -1108,7 +1024,9 @@ introducer onTheAir() def tryAgain(e) { traceln("trying to acquire server") - timer whenAlarm(10_000 + timer now(), acquireBrowseServerMaker) + # theTimer() after(10000, + # acquireBrowseServerMaker) + timer whenAlarm(10_000 + timer now(), acquireBrowseServerMaker) } try { def serverPromise := @@ -1122,6 +1040,18 @@ # stub browse server for nonComm version # acquireBrowseServerMaker() +# newest version put sync server in separate vat, same jvm +def makeFarSyncServer() { + introducer onTheAir() + def vatMaker := run( + unsafe__uriGetter, introducer, println) + def source := " run(unsafe__uriGetter, stdout)" + def vat := vatMaker new(source, [], interp getProps(), "Sync Server Maker") + def farSyncServerMaker := vat promisePrimorialObj() + farBrowseServerResolver resolve(farSyncServerMaker) +} +makeFarSyncServer() + var optBrowseFile := null def commandArgs := interp getArgs() if (commandArgs size() > 0) { @@ -1131,3 +1061,4 @@ def browser := eBrowserMaker new(textModelMaker new(optBrowseFile)) if (optBrowseFile != null) {openFiles[optBrowseFile getCanonicalPath()] := browser} interp blockAtTop() + 1.2 +993 -993 e/src/esrc/scripts/eDeskPlus.e Index: eDeskPlus.e =================================================================== RCS file: /cvs/e/src/esrc/scripts/eDeskPlus.e,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- eDeskPlus.e 2001/04/16 08:46:30 1.1 +++ eDeskPlus.e 2001/08/08 05:39:17 1.2 @@ -26,787 +26,787 @@ def eLogoURL := def eLogoImage := new(eLogoURL) getImage() class JFrameMaker(title) :any { - def result := new(title) - result setIconImage(eLogoImage) - result + def result := new(title) + result setIconImage(eLogoImage) + result } traceln("got logo") def promiseAllResolved := def uriTools := (introducer, - sturdyRef) + sturdyRef) def uiTools := (awt__uriGetter, - swing__uriGetter) + swing__uriGetter) def dialogPromiser := ( - awt__uriGetter, - swing__uriGetter, - JPanel__quasiParser, - JFrameMaker) + awt__uriGetter, + swing__uriGetter, + JPanel__quasiParser, + JFrameMaker) def sendValveMaker := def standardWindow := (interp, JFrameMaker) traceln("got standardWindow") def progressWindowMaker := ( - swing__uriGetter, standardWindow) + swing__uriGetter, standardWindow) class vowsMonitorMaker(): any { - def [bundlePromise,resolver] := PromiseMaker() - def bundle := [] diverge() - def vowsMonitor { - to add (thePromise) {bundle push(thePromise)} - to finishAll() {resolver resolve(promiseAllResolved(bundle))} - to promiseFinish() : any {bundlePromise} - } + def [bundlePromise,resolver] := PromiseMaker() + def bundle := [] diverge() + def vowsMonitor { + to add (thePromise) {bundle push(thePromise)} + to finishAll() {resolver resolve(promiseAllResolved(bundle))} + to promiseFinish() : any {bundlePromise} + } } def connectionWarning(description) { - showMessageDialog(null, - description, - "Connection apparently lost", - WARNING_MESSAGE()) + showMessageDialog(null, + description, + "Connection apparently lost", + WARNING_MESSAGE()) } class forwarderMaker(target) : any { - def forwarder { - match [verb,args] {E send(target,verb,args)} - } + def forwarder { + match [verb,args] {E send(target,verb,args)} + } } def makeWriteFile { - to run(fileName) : any {} - to label() : any {""} + to run(fileName) : any {} + to label() : any {""} } def makeReadFile { - to run(fileName) : any { () transReadOnly()} - to label(): any {"(Read Only)"} + to run(fileName) : any { () transReadOnly()} + to label(): any {"(Read Only)"} } def fileHash(file, numBytesToHash) : any { - def MDMaker := - var blockSize := 100000 - var hashedBytes := 0 - def openFile(file) : any { - E call(, "new(File)", [file]) - } - def sha := MDMaker getInstance("SHA") - def inStream := openFile(file) - var result := [] - if (numBytesToHash <= file length()) { - while (hashedBytes < numBytesToHash) { - if (numBytesToHash - hashedBytes < blockSize) {blockSize := numBytesToHash - hashedBytes} - def buf := byte[blockSize] - def count := inStream read(buf) - sha update(buf, 0, count) - hashedBytes := hashedBytes + blockSize - } - result := sha digest() - } - inStream close() - traceln("hashed: " + result) - result + def MDMaker := + var blockSize := 100000 + var hashedBytes := 0 + def openFile(file) : any { + E call(, "new(File)", [file]) + } + def sha := MDMaker getInstance("SHA") + def inStream := openFile(file) + var result := [] + if (numBytesToHash <= file length()) { + while (hashedBytes < numBytesToHash) { + if (numBytesToHash - hashedBytes < blockSize) {blockSize := numBytesToHash - hashedBytes} + def buf := byte[blockSize] + def count := inStream read(buf) + sha update(buf, 0, count) + hashedBytes := hashedBytes + blockSize + } + result := sha digest() + } + inStream close() + traceln("hashed: " + result) + result } class readOnlyToFileCopierMaker(myFile) : any { - def fileCopier { - to copyEventually(a,farProgressObserver,c,d) : any { - farProgressObserver <- copyFailed() - def [dead,resolver] := PromiseMaker() - resolver smash(makeErr("readOnlyFile")) - dead - } - match _ { } - } + def fileCopier { + to copyEventually(a,farProgressObserver,c,d) : any { + farProgressObserver <- copyFailed() + def [dead,resolver] := PromiseMaker() + resolver smash(makeErr("readOnlyFile")) + dead + } + match _ { } + } } class writeableToFileCopierMaker(myFile) : any { - var myOutputStream := null - var myTempFile := null - var myRemoteProgressObserver := null - def [copyPromise,resolver] := PromiseMaker() - def fileCopier { - to copyEventually(farFile, farProgressObserver, - farLastResortForwarderToSelf, farLastResortForwarderToFarFile) : any { - traceln("into copy eventually" + farProgressObserver) - myTempFile := - traceln("did temp file creation") - def sendBytesRequest(fromCopier,toCopier) : any { - var fileVow := null - if (myTempFile exists()) { - traceln("temp file exists") - def hash := fileHash(myTempFile, myTempFile length()) - fileVow := fromCopier <- sendToPartialFile(toCopier, myTempFile length(), hash) - } else if (myFile exists()) { - traceln("about to hash in file copier") - def hash := fileHash(myFile, myFile length()) - fileVow := fromCopier <- sendToExistingFile(toCopier, myFile length(), hash) - } else { - fileVow := fromCopier <- sendByteBlocks(toCopier) - } - fileVow - } - def fp := sendBytesRequest(farFile, fileCopier) - //TODO what is this doing?? - when (fp) -> done(connection) { - Ref whenBroken(farFile, def breaker(err){ - resolver smash(makeErr ("lost file copy connection: " + err)) - farProgressObserver copyFailed() - }) - } catch err { - sendBytesRequest (farLastResortForwarderToFarFile, farLastResortForwarderToSelf) - traceln("using forwarders to copy file") - Ref whenBroken(farLastResortForwarderToFarFile, def breaker(p2) { - resolver smash(makeErr ("lost forwarded file copy connection" + p2)) - farProgressObserver copyFailed() - }) - } - myRemoteProgressObserver := farProgressObserver - copyPromise - } - to amountBeingSent(amount) {myRemoteProgressObserver <-setFileSize(amount)} - to receiveByteBlock(count,bytes) { - if (myOutputStream == null) { - myOutputStream := E call(, "new(String)", [(myTempFile getAbsolutePath())]) - traceln("receiveBytes made stream") - } - traceln("receiving bytes") - myOutputStream write(bytes,0,count) - try {myOutputStream flush()} catch e{} - myRemoteProgressObserver <- updateCount(count) - } - to existingFileIsFine() { - myRemoteProgressObserver <- completed() - resolver resolve(true) - } - to partialFileIsFine() { - traceln("in partialIsFine") - myOutputStream := E call(, "new(File, String)",[myTempFile,"rw"]) - myOutputStream skipBytes(myTempFile length()) - traceln("should have skipped by now") - } - to allBytesSent() { - #if output stream does not exist, file transferred was 0 length - if (myOutputStream != null) { - myOutputStream close() - } else if (!(myTempFile exists())) {myTempFile setText("")} - if (myFile exists()) {myFile delete()} - myTempFile renameTo(myFile) - myRemoteProgressObserver <- completed() - resolver resolve(true) - } - } + var myOutputStream := null + var myTempFile := null + var myRemoteProgressObserver := null + def [copyPromise,resolver] := PromiseMaker() + def fileCopier { + to copyEventually(farFile, farProgressObserver, + farLastResortForwarderToSelf, farLastResortForwarderToFarFile) : any { + traceln("into copy eventually" + farProgressObserver) + myTempFile := + traceln("did temp file creation") + def sendBytesRequest(fromCopier,toCopier) : any { + var fileVow := null + if (myTempFile exists()) { + traceln("temp file exists") + def hash := fileHash(myTempFile, myTempFile length()) + fileVow := fromCopier <- sendToPartialFile(toCopier, myTempFile length(), hash) + } else if (myFile exists()) { + traceln("about to hash in file copier") + def hash := fileHash(myFile, myFile length()) + fileVow := fromCopier <- sendToExistingFile(toCopier, myFile length(), hash) + } else { + fileVow := fromCopier <- sendByteBlocks(toCopier) + } + fileVow + } + def fp := sendBytesRequest(farFile, fileCopier) + //TODO what is this doing?? + when (fp) -> done(connection) { + Ref whenBroken(farFile, def breaker(err){ + resolver smash(makeErr ("lost file copy connection: " + err)) + farProgressObserver copyFailed() + }) + } catch err { + sendBytesRequest (farLastResortForwarderToFarFile, farLastResortForwarderToSelf) + traceln("using forwarders to copy file") + Ref whenBroken(farLastResortForwarderToFarFile, def breaker(p2) { + resolver smash(makeErr ("lost forwarded file copy connection" + p2)) + farProgressObserver copyFailed() + }) + } + myRemoteProgressObserver := farProgressObserver + copyPromise + } + to amountBeingSent(amount) {myRemoteProgressObserver <-setFileSize(amount)} + to receiveByteBlock(count,bytes) { + if (myOutputStream == null) { + myOutputStream := E call(, "new(String)", [(myTempFile getAbsolutePath())]) + traceln("receiveBytes made stream") + } + traceln("receiving bytes") + myOutputStream write(bytes,0,count) + try {myOutputStream flush()} catch e{} + myRemoteProgressObserver <- updateCount(count) + } + to existingFileIsFine() { + myRemoteProgressObserver <- completed() + resolver resolve(true) + } + to partialFileIsFine() { + traceln("in partialIsFine") + myOutputStream := E call(, "new(File, String)",[myTempFile,"rw"]) + myOutputStream skipBytes(myTempFile length()) + traceln("should have skipped by now") + } + to allBytesSent() { + #if output stream does not exist, file transferred was 0 length + if (myOutputStream != null) { + myOutputStream close() + } else if (!(myTempFile exists())) {myTempFile setText("")} + if (myFile exists()) {myFile delete()} + myTempFile renameTo(myFile) + myRemoteProgressObserver <- completed() + resolver resolve(true) + } + } } traceln ("about to compile toFileCopierMaker") var toFileCopierMaker := writeableToFileCopierMaker class fromFileCopierMaker (myFile) : any { - def fileCopier { - to sendByteBlocks(farRecipient, startIndex) { - traceln("send bytes recipient:" + farRecipient) - farRecipient <- amountBeingSent(myFile length() - startIndex) - def inStream := E call(, "new(String)", [(myFile getAbsolutePath())]) - inStream skip (startIndex) - var blockSize := 50000 - var bytes := byte[blockSize] - def sendRemainingBlocks() { - def bytesAvailable := inStream available() - if (bytesAvailable > 0) { - if (bytesAvailable < blockSize) { - blockSize := bytesAvailable - bytes := byte[blockSize] - } - //def bytes := byte[blockSize] - def count := inStream read(bytes) - traceln("about to send receiveByteBlock for" + (myFile getAbsolutePath())) - def sentPromise := farRecipient <- receiveByteBlock(count,bytes) - when (sentPromise) -> done(sent) { - sendRemainingBlocks() - } catch err {traceln("lost connection transferrring file: " + err)} - } else { - inStream close() - farRecipient <- allBytesSent() - } - } - sendRemainingBlocks () - } - to sendByteBlocks(farRecipient) {fileCopier sendByteBlocks(farRecipient, 0)} - to sendToExistingFile(farRecipient, farSize, farHash) { - if (myFile length() == farSize && fileHash(myFile, myFile length()) == farHash ) { - traceln("copy file is duplicate") - farRecipient <- existingFileIsFine() - } else { - traceln("copy file is not duplicate") - fileCopier sendByteBlocks(farRecipient) - } - } - to sendToPartialFile(farRecipient, farSize, farHash) { - if (myFile length() >= farSize && fileHash(myFile, farSize) == farHash ) { - traceln("partial file is good:" + farSize + "my size" +myFile length()) - farRecipient <- partialFileIsFine() - fileCopier sendByteBlocks(farRecipient, farSize) - } else { - traceln("partial file is not duplicate") - fileCopier sendByteBlocks(farRecipient) - } - } - } + def fileCopier { + to sendByteBlocks(farRecipient, startIndex) { + traceln("send bytes recipient:" + farRecipient) + farRecipient <- amountBeingSent(myFile length() - startIndex) + def inStream := E call(, "new(String)", [(myFile getAbsolutePath())]) + inStream skip (startIndex) + var blockSize := 50000 + var bytes := byte[blockSize] + def sendRemainingBlocks() { + def bytesAvailable := inStream available() + if (bytesAvailable > 0) { + if (bytesAvailable < blockSize) { + blockSize := bytesAvailable + bytes := byte[blockSize] + } + //def bytes := byte[blockSize] + def count := inStream read(bytes) + traceln("about to send receiveByteBlock for" + (myFile getAbsolutePath())) + def sentPromise := farRecipient <- receiveByteBlock(count,bytes) + when (sentPromise) -> done(sent) { + sendRemainingBlocks() + } catch err {traceln("lost connection transferrring file: " + err)} + } else { + inStream close() + farRecipient <- allBytesSent() + } + } + sendRemainingBlocks () + } + to sendByteBlocks(farRecipient) {fileCopier sendByteBlocks(farRecipient, 0)} + to sendToExistingFile(farRecipient, farSize, farHash) { + if (myFile length() == farSize && fileHash(myFile, myFile length()) == farHash ) { + traceln("copy file is duplicate") + farRecipient <- existingFileIsFine() + } else { + traceln("copy file is not duplicate") + fileCopier sendByteBlocks(farRecipient) + } + } + to sendToPartialFile(farRecipient, farSize, farHash) { + if (myFile length() >= farSize && fileHash(myFile, farSize) == farHash ) { + traceln("partial file is good:" + farSize + "my size" +myFile length()) + farRecipient <- partialFileIsFine() + fileCopier sendByteBlocks(farRecipient, farSize) + } else { + traceln("partial file is not duplicate") + fileCopier sendByteBlocks(farRecipient) + } + } + } } //FileModel class fileModelMaker(myFile) :any { - def fileModel { - to getFromCopier() : any {fromFileCopierMaker new(myFile) } - to getToCopier() : any {toFileCopierMaker new(myFile)} - delegate {myFile} - } + def fileModel { + to getFromCopier() : any {fromFileCopierMaker new(myFile) } + to getToCopier() : any {toFileCopierMaker new(myFile)} + delegate {myFile} + } } def buildFilePopup(invokingNavWindow) :near { - class actionMaker(actionString) :near { - def action(){E call(invokingNavWindow, actionString, [])} - } - def popup := new("File Ops") - uiTools addMenuItem(popup,"New File", actionMaker new("newFile")) - uiTools addMenuItem(popup,"Edit", actionMaker new("editFile")) - uiTools addMenuItem(popup,"Open Edesk", actionMaker new("openEdesk")) - uiTools addMenuItem(popup,"Copy", actionMaker new("copy")) - uiTools addMenuItem(popup,"Paste", actionMaker new("paste")) - uiTools addMenuItem(popup, "Delete", actionMaker new("delete")) - uiTools addMenuItem(popup, "Rename", actionMaker new("rename")) - uiTools addMenuItem(popup,"Properties", actionMaker new("properties")) - popup + class actionMaker(actionString) :near { + def action(){E call(invokingNavWindow, actionString, [])} + } + def popup := new("File Ops") + uiTools addMenuItem(popup,"New File", actionMaker new("newFile")) + uiTools addMenuItem(popup,"Edit", actionMaker new("editFile")) + uiTools addMenuItem(popup,"Open Edesk", actionMaker new("openEdesk")) + uiTools addMenuItem(popup,"Copy", actionMaker new("copy")) + uiTools addMenuItem(popup,"Paste", actionMaker new("paste")) + uiTools addMenuItem(popup, "Delete", actionMaker new("delete")) + uiTools addMenuItem(popup, "Rename", actionMaker new("rename")) + uiTools addMenuItem(popup,"Properties", actionMaker new("properties")) + popup } def buildDirPopup(invokingNavWindow) :near { - class actionMaker(actionString) :near { - def action(){E call(invokingNavWindow, actionString, [])} - } - def popup := new("Dir Ops") - uiTools addMenuItem(popup,"New Folder", actionMaker new("makeDir")) - uiTools addMenuItem(popup,"Copy", actionMaker new("copyDir")) - uiTools addMenuItem(popup,"Paste", actionMaker new("paste")) - uiTools addMenuItem(popup, "Delete", actionMaker new("deleteDir")) - uiTools addMenuItem(popup, "Rename", actionMaker new("renameDir")) - traceln("added menuitm") - popup + class actionMaker(actionString) :near { + def action(){E call(invokingNavWindow, actionString, [])} + } + def popup := new("Dir Ops") + uiTools addMenuItem(popup,"New Folder", actionMaker new("makeDir")) + uiTools addMenuItem(popup,"Copy", actionMaker new("copyDir")) + uiTools addMenuItem(popup,"Paste", actionMaker new("paste")) + uiTools addMenuItem(popup, "Delete", actionMaker new("deleteDir")) + uiTools addMenuItem(popup, "Rename", actionMaker new("renameDir")) + traceln("added menuitm") + popup } class fileProgressObserverMaker(title, farFile) : any { - def myWindow := progressWindowMaker new(title) - var bytesSent := 0 - def localFailed() {myWindow closeWindow()} - Ref whenBroken(farFile, def breaker(p) { - localFailed() - }) - def fileProgressObserver { - to completed() { - traceln("completed file transfer!") - myWindow closeWindow() - } - to setFileSize(theSize) {myWindow setFileSize(theSize)} - to updateCount(countIncrement) { - bytesSent := bytesSent + countIncrement - myWindow setProgress(bytesSent) - } - to copyFailed() { - localFailed() - } - } + def myWindow := progressWindowMaker new(title) + var bytesSent := 0 + def localFailed() {myWindow closeWindow()} + Ref whenBroken(farFile, def breaker(p) { + localFailed() + }) + def fileProgressObserver { + to completed() { + traceln("completed file transfer!") + myWindow closeWindow() + } + to setFileSize(theSize) {myWindow setFileSize(theSize)} + to updateCount(countIncrement) { + bytesSent := bytesSent + countIncrement + myWindow setProgress(bytesSent) + } + to copyFailed() { + localFailed() + } + } } def fileProgressObserverStub { - match _ {} + match _ {} } def popAboutBox() { - def text := " - Securit-Edesk

- For Help with Securit-Edesk, see
- http://www.skyhunter.com/marcs/securit-Edesk-help.html -

- 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 - " - dialogPromiser new("About Securit-Edesk", text, null, ["OK"]) + def text := " + Securit-Edesk

+ For Help with Securit-Edesk, see
+ http://www.skyhunter.com/marcs/securit-Edesk-help.html +

+ 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 + " + dialogPromiser new("About Securit-Edesk", text, null, ["OK"]) } def quickEditMaker := (traceln, awt__uriGetter, - swing__uriGetter, connectionWarning, - standardWindow, dialogPromiser) + swing__uriGetter, connectionWarning, + standardWindow, dialogPromiser) traceln("about to compile navigatorWindowMaker") //NavigatorWindow class navigatorWindowMaker(myFtController, myDiskNavigator) : any { - def navigatorWindow - def myStorageName := myDiskNavigator <- getStorageName() - def navFrame := standardWindow("", navigatorWindow) - when (myStorageName) -> done(name) { - navFrame setTitle(myStorageName) - } catch err{} - def mainPane := navFrame getContentPane() - - #make the menus - def menuReactor { - to doNewWindow(){navigatorWindow dupWindow() } - to doOpenRemote() {navigatorWindow openRemote() } - match [verb,args] {traceln("menu hit for " + verb)} - } - def mm := ( - swing__uriGetter, - , - menuReactor) - def menuBar := mm menuBar([ - mm menu("&Windows", [ - mm action("&New Window", "Ctrl+N"), - mm action("Open Remote...", "Ctrl+O"), - "--" - ]) - ]) - navFrame setJMenuBar(menuBar) - - traceln("about to make listpane") - def noScrollDirPane := new() - def dirPane := new(noScrollDirPane) - def dirPopup := buildDirPopup(navigatorWindow ) - def dirPaneListener{ - to mouseClicked(theEvent) { - if (theEvent getClickCount() > 1) { - navigatorWindow openDir() - } else if (theEvent isPopupTrigger() || + def navigatorWindow + def myStorageName := myDiskNavigator <- getStorageName() + def navFrame := standardWindow("", navigatorWindow) + when (myStorageName) -> done(name) { + navFrame setTitle(myStorageName) + } catch err{} + def mainPane := navFrame getContentPane() + + #make the menus + def menuReactor { + to doNewWindow(){navigatorWindow dupWindow() } + to doOpenRemote() {navigatorWindow openRemote() } + match [verb,args] {traceln("menu hit for " + verb)} + } + def mm := ( + swing__uriGetter, + , + menuReactor) + def menuBar := mm menuBar([ + mm menu("&Windows", [ + mm action("&New Window", "Ctrl+N"), + mm action("Open Remote...", "Ctrl+O"), + "--" + ]) + ]) + navFrame setJMenuBar(menuBar) + + traceln("about to make listpane") + def noScrollDirPane := new() + def dirPane := new(noScrollDirPane) + def dirPopup := buildDirPopup(navigatorWindow ) + def dirPaneListener{ + to mouseClicked(theEvent) { + if (theEvent getClickCount() > 1) { + navigatorWindow openDir() + } else if (theEvent isPopupTrigger() || isRightMouseButton(theEvent)) { def clickLocation := new(theEvent getX(), theEvent getY()) def selectionIndex := noScrollDirPane locationToIndex(clickLocation) - if (!(noScrollDirPane isSelectedIndex(selectionIndex))) { - noScrollDirPane setSelectedIndex(selectionIndex) - } + if (!(noScrollDirPane isSelectedIndex(selectionIndex))) { + noScrollDirPane setSelectedIndex(selectionIndex) + } dirPopup show(noScrollDirPane, theEvent getX(), theEvent getY()) } - } - match _ {} - } - noScrollDirPane addMouseListener(dirPaneListener) - def noScrollFilePane := new() - def filePane := new(noScrollFilePane) - def filePopup := buildFilePopup(navigatorWindow ) - def filePaneListener{ - to mouseClicked(theEvent) { - if (theEvent getClickCount() > 1) { - dialogPromiser("DoubleClick TBD", "Double click default open not yet available", null, ["OK"]) - } else if (theEvent isPopupTrigger() || + } + match _ {} + } + noScrollDirPane addMouseListener(dirPaneListener) + def noScrollFilePane := new() + def filePane := new(noScrollFilePane) + def filePopup := buildFilePopup(navigatorWindow ) + def filePaneListener{ + to mouseClicked(theEvent) { + if (theEvent getClickCount() > 1) { + dialogPromiser("DoubleClick TBD", "Double click default open not yet available", null, ["OK"]) + } else if (theEvent isPopupTrigger() || isRightMouseButton(theEvent)) { def clickLocation := new(theEvent getX(), theEvent getY()) def selectionIndex := noScrollFilePane locationToIndex(clickLocation) - if (!(noScrollFilePane isSelectedIndex(selectionIndex))) { - noScrollFilePane setSelectedIndex(selectionIndex) - } + if (!(noScrollFilePane isSelectedIndex(selectionIndex))) { + noScrollFilePane setSelectedIndex(selectionIndex) + } filePopup show(noScrollFilePane, theEvent getX(), theEvent getY()) } - } - match _ {} - } - noScrollFilePane addMouseListener(filePaneListener) - class navActionMaker(actionName) :near { - def action() {E call(navigatorWindow, actionName, [])} - } - def popButton := uiTools newButton("File Ops", navActionMaker new("popupFileMenu")) - def openRemoteButton := uiTools newButton("Remote Edesk", navActionMaker new("openRemote")) - def gotoButton := uiTools newToolButton( - , - "Goto", navActionMaker new("gotoFieldName")) - def dupWinButton := uiTools newButton("New Window", navActionMaker new("dupWindow")) - def refreshButton := uiTools newToolButton( - , - "Refresh", navActionMaker new("refresh")) - def aboutButton := uiTools newButton("About/Help", navActionMaker new("aboutBox")) - def upButton := uiTools newToolButton( - , - "Up", navActionMaker new("goUp")) - def homeButton := uiTools newToolButton( - , - "Home", navActionMaker new("goHome")) - def popDirButton := uiTools newButton("Folder Ops", navActionMaker new("popupDirMenu")) - def statusPanel := new() - traceln("made buttons") - def fullPathTextField := new() - def enterKeyListener{ - to keyPressed(theEvent) { - if (theEvent getKeyCode() == VK_ENTER()) { - navigatorWindow gotoFieldName() - } - } - match _ {} - } - fullPathTextField addKeyListener(enterKeyListener) - def setStatus(status) {statusPanel setText(status)} - def refreshLocal() { - traceln("about to refreshLocal" + myDiskNavigator) - setStatus("Refreshing Window") - def currentPath := myDiskNavigator <- getCurrentPath() - def dirsPromise := myDiskNavigator <- listCurrentSubdirectoriesAndFiles() - when (dirsPromise) -> done(dirsFilesTuple) { - E call(noScrollDirPane, "setListData(Object[])", [dirsFilesTuple[0]]); - E call(noScrollFilePane,"setListData(Object[])", [dirsFilesTuple[1]]); - fullPathTextField setText(currentPath) - navFrame repaint() - setStatus("Refresh done.") - } catch err { - connectionWarning("Screen Refresh Failed\n" + err) - setStatus("Refresh failed") - } - } - def propertiesList(theList) { - if (theList != null) { - setStatus("Showing files properties") - for each in theList { - def farFile := myDiskNavigator <- getFileNamed(each) - def path := farFile <- getPath() - def canonical := farFile <- getCanonicalPath() - def fileSize := farFile <- length() - when (farFile <- lastModified()) -> done(lastModified) { - def modDate := E call(, "new(long)",[lastModified]) - def display := - ` - - - - - - - -
Full Path:$path
Canonical Path:$canonical
Size:$fileSize
Last Modified:$modDate
` - dialogPromiser new("Properties For " + each, display, null, ["OK"]) - } catch e { connectionWarning(e)} - } - setStatus("") - } - } - def renameList(theList) { - if (theList != null && theList size() > 0) { - setStatus("Renaming files") - for each in theList { - def newName := showInputDialog (null, "New Name for: " + each , "Rename" , QUESTION_MESSAGE(), null, null, each) - if (newName != null && newName size() >0) { - myDiskNavigator <- rename(each, newName) - } - } - navigatorWindow refresh() - } - } - def deleteList(theList){ - if (theList != null && theList size() > 0) { - setStatus("Deleting files") - for each in theList { - myDiskNavigator <- deleteFileObject(each) - } - navigatorWindow refresh() - } - } - def copyList(theList) { - if (theList != null && theList size() > 0) { - def localNavigator := myDiskNavigator <- dupNavigator() - var files := [] - traceln("copyfile: " + theList) - for each in theList { - files := files + [localNavigator <-getFileNamed (each)] - } - myFtController copyFrom (files, localNavigator) - } - } - def filesDirsSplitPane := new() - filesDirsSplitPane setLeftComponent(dirPane) - filesDirsSplitPane setRightComponent(filePane) - def toolbarPane := - JPanel`$refreshButton $upButton $homeButton $gotoButton $fullPathTextField.X ` - def realPane := - JPanel`$toolbarPane - $filesDirsSplitPane.Y - $statusPanel` - mainPane add(realPane) - traceln("about to call refreshLocal") - refreshLocal() - navFrame pack() - navFrame show() - def bind navigatorWindow { - to getDiskNavigator(): any {myDiskNavigator} - to dupWindow() { - def diskNavigatorPromise := myDiskNavigator <- dupNavigator() - when (diskNavigatorPromise) -> done(diskNavigator) { - navigatorWindowMaker new(myFtController, diskNavigator) - } catch err { - connectionWarning(err) - } - } - to aboutBox() {popAboutBox()} - to popupFileMenu() { - buildFilePopup(popButton, navigatorWindow) - } - to popupDirMenu() { - buildDirPopup(popDirButton, navigatorWindow) - } - to gotoFieldName() { - myDiskNavigator <-changeToDirectory(fullPathTextField getText()) - navigatorWindow refresh() - } - to makeDir() { - def newName := showInputDialog(navFrame, "Name for New Folder: ", "New Folder", QUESTION_MESSAGE()) - traceln("Dir Name: " + newName) - if (newName != null && newName size() >0) { - myDiskNavigator <- makeDir(newName) - } - navigatorWindow refresh() - } - to copy () { - def copyFileNames := noScrollFilePane getSelectedValues() - copyList(copyFileNames) - } - to copyDir() { - def names := noScrollDirPane getSelectedValues() - copyList(names) - } - to paste() { - setStatus("Paste/Copying files") - myFtController paste(navigatorWindow) - } - to getStorageName(): any {myStorageName} - to refresh() {refreshLocal()} - to windowClosing() {navFrame dispose()} - to newFile() { - def newName := showInputDialog(navFrame, "Name for New File: ", "New File", QUESTION_MESSAGE()) - if (newName != null && newName size() >0) { - myDiskNavigator <- newFile(newName) - } - navigatorWindow refresh() - } - to editFile() { - traceln("into editFile") - def fileNames := noScrollFilePane getSelectedValues() - if (fileNames != null && fileNames size() > 0) { - for each in fileNames { - quickEditMaker new(myDiskNavigator<-getFileNamed(each)) - } - } - } - to rename() { - def fileNames := noScrollFilePane getSelectedValues() - renameList(fileNames) - } - to renameDir() { - def names := noScrollDirPane getSelectedValues() - renameList(names) - } - to properties() { - def fileNames := noScrollFilePane getSelectedValues() - propertiesList(fileNames) - } - to delete() { - def fileNames := noScrollFilePane getSelectedValues() - deleteList(fileNames) - } - to deleteDir() { - def names := noScrollDirPane getSelectedValues() - deleteList(names) - } - to openDir() { - def newDir := noScrollDirPane getSelectedValue() - if (newDir != null && newDir size() > 0) { - noScrollDirPane clearSelection() - myDiskNavigator <- changeToSubdirectory(newDir) - navigatorWindow refresh() - } - } - to goUp() { - myDiskNavigator <- goUp() - navigatorWindow refresh() - } - to goHome() { - myDiskNavigator <- gotoHome() - navigatorWindow refresh() - } - to openRemote() {myFtController openRemote()} - to openEdesk() { - def fileNames := noScrollFilePane getSelectedValues() - if (fileNames != null && fileNames size() >0) { - for each in fileNames { - myFtController openEdesk(myDiskNavigator <- getFileNamed(each)) - } - } - } - } + } + match _ {} + } + noScrollFilePane addMouseListener(filePaneListener) + class navActionMaker(actionName) :near { + def action() {E call(navigatorWindow, actionName, [])} + } + def popButton := uiTools newButton("File Ops", navActionMaker new("popupFileMenu")) + def openRemoteButton := uiTools newButton("Remote Edesk", navActionMaker new("openRemote")) + def gotoButton := uiTools newToolButton( + , + "Goto", navActionMaker new("gotoFieldName")) + def dupWinButton := uiTools newButton("New Window", navActionMaker new("dupWindow")) + def refreshButton := uiTools newToolButton( + , + "Refresh", navActionMaker new("refresh")) + def aboutButton := uiTools newButton("About/Help", navActionMaker new("aboutBox")) + def upButton := uiTools newToolButton( + , + "Up", navActionMaker new("goUp")) + def homeButton := uiTools newToolButton( + , + "Home", navActionMaker new("goHome")) + def popDirButton := uiTools newButton("Folder Ops", navActionMaker new("popupDirMenu")) + def statusPanel := new() + traceln("made buttons") + def fullPathTextField := new() + def enterKeyListener{ + to keyPressed(theEvent) { + if (theEvent getKeyCode() == VK_ENTER()) { + navigatorWindow gotoFieldName() + } + } + match _ {} + } + fullPathTextField addKeyListener(enterKeyListener) + def setStatus(status) {statusPanel setText(status)} + def refreshLocal() { + traceln("about to refreshLocal" + myDiskNavigator) + setStatus("Refreshing Window") + def currentPath := myDiskNavigator <- getCurrentPath() + def dirsPromise := myDiskNavigator <- listCurrentSubdirectoriesAndFiles() + when (dirsPromise) -> done(dirsFilesTuple) { + E call(noScrollDirPane, "setListData(Object[])", [dirsFilesTuple[0]]); + E call(noScrollFilePane,"setListData(Object[])", [dirsFilesTuple[1]]); + fullPathTextField setText(currentPath) + navFrame repaint() + setStatus("Refresh done.") + } catch err { + connectionWarning("Screen Refresh Failed\n" + err) + setStatus("Refresh failed") + } + } + def propertiesList(theList) { + if (theList != null) { + setStatus("Showing files properties") + for each in theList { + def farFile := myDiskNavigator <- getFileNamed(each) + def path := farFile <- getPath() + def canonical := farFile <- getCanonicalPath() + def fileSize := farFile <- length() + when (farFile <- lastModified()) -> done(lastModified) { + def modDate := E call(, "new(long)",[lastModified]) + def display := + ` + + + + + + + +
Full Path:$path
Canonical Path:$canonical
Size:$fileSize
Last Modified:$modDate
` + dialogPromiser new("Properties For " + each, display, null, ["OK"]) + } catch e { connectionWarning(e)} + } + setStatus("") + } + } + def renameList(theList) { + if (theList != null && theList size() > 0) { + setStatus("Renaming files") + for each in theList { + def newName := showInputDialog (null, "New Name for: " + each , "Rename" , QUESTION_MESSAGE(), null, null, each) + if (newName != null && newName size() >0) { + myDiskNavigator <- rename(each, newName) + } + } + navigatorWindow refresh() + } + } + def deleteList(theList){ + if (theList != null && theList size() > 0) { + setStatus("Deleting files") + for each in theList { + myDiskNavigator <- deleteFileObject(each) + } + navigatorWindow refresh() + } + } + def copyList(theList) { + if (theList != null && theList size() > 0) { + def localNavigator := myDiskNavigator <- dupNavigator() + var files := [] + traceln("copyfile: " + theList) + for each in theList { + files := files + [localNavigator <-getFileNamed (each)] + } + myFtController copyFrom (files, localNavigator) + } + } + def filesDirsSplitPane := new() + filesDirsSplitPane setLeftComponent(dirPane) + filesDirsSplitPane setRightComponent(filePane) + def toolbarPane := + JPanel`$refreshButton $upButton $homeButton $gotoButton $fullPathTextField.X ` + def realPane := + JPanel`$toolbarPane + $filesDirsSplitPane.Y + $statusPanel` + mainPane add(realPane) + traceln("about to call refreshLocal") + refreshLocal() + navFrame pack() + navFrame show() + def bind navigatorWindow { + to getDiskNavigator(): any {myDiskNavigator} + to dupWindow() { + def diskNavigatorPromise := myDiskNavigator <- dupNavigator() + when (diskNavigatorPromise) -> done(diskNavigator) { + navigatorWindowMaker new(myFtController, diskNavigator) + } catch err { + connectionWarning(err) + } + } + to aboutBox() {popAboutBox()} + to popupFileMenu() { + buildFilePopup(popButton, navigatorWindow) + } + to popupDirMenu() { + buildDirPopup(popDirButton, navigatorWindow) + } + to gotoFieldName() { + myDiskNavigator <-changeToDirectory(fullPathTextField getText()) + navigatorWindow refresh() + } + to makeDir() { + def newName := showInputDialog(navFrame, "Name for New Folder: ", "New Folder", QUESTION_MESSAGE()) + traceln("Dir Name: " + newName) + if (newName != null && newName size() >0) { + myDiskNavigator <- makeDir(newName) + } + navigatorWindow refresh() + } + to copy () { + def copyFileNames := noScrollFilePane getSelectedValues() + copyList(copyFileNames) + } + to copyDir() { + def names := noScrollDirPane getSelectedValues() + copyList(names) + } + to paste() { + setStatus("Paste/Copying files") + myFtController paste(navigatorWindow) + } + to getStorageName(): any {myStorageName} + to refresh() {refreshLocal()} + to windowClosing() {navFrame dispose()} + to newFile() { + def newName := showInputDialog(navFrame, "Name for New File: ", "New File", QUESTION_MESSAGE()) + if (newName != null && newName size() >0) { + myDiskNavigator <- newFile(newName) + } + navigatorWindow refresh() + } + to editFile() { + traceln("into editFile") + def fileNames := noScrollFilePane getSelectedValues() + if (fileNames != null && fileNames size() > 0) { + for each in fileNames { + quickEditMaker new(myDiskNavigator<-getFileNamed(each)) + } + } + } + to rename() { + def fileNames := noScrollFilePane getSelectedValues() + renameList(fileNames) + } + to renameDir() { + def names := noScrollDirPane getSelectedValues() + renameList(names) + } + to properties() { + def fileNames := noScrollFilePane getSelectedValues() + propertiesList(fileNames) + } + to delete() { + def fileNames := noScrollFilePane getSelectedValues() + deleteList(fileNames) + } + to deleteDir() { + def names := noScrollDirPane getSelectedValues() + deleteList(names) + } + to openDir() { + def newDir := noScrollDirPane getSelectedValue() + if (newDir != null && newDir size() > 0) { + noScrollDirPane clearSelection() + myDiskNavigator <- changeToSubdirectory(newDir) + navigatorWindow refresh() + } + } + to goUp() { + myDiskNavigator <- goUp() + navigatorWindow refresh() + } + to goHome() { + myDiskNavigator <- gotoHome() + navigatorWindow refresh() + } + to openRemote() {myFtController openRemote()} + to openEdesk() { + def fileNames := noScrollFilePane getSelectedValues() + if (fileNames != null && fileNames size() >0) { + for each in fileNames { + myFtController openEdesk(myDiskNavigator <- getFileNamed(each)) + } + } + } + } } //DiskNavigator class diskNavigatorMaker (var myHomeDirectoryPath, myStorageName, var myRootDirPath, makeFileFunction) : any { - traceln("into making disk navigator") - var myCurrentDir := makeFileFunction(myHomeDirectoryPath) - //file: myHomeDirectoryPath - def dirPathString (path) : any { - //makes sure a dir separator is at end - def sep := separator() - var answerPath := path - if (path(path size() - 1, path size() ) == sep) { - answerPath := path - } else { - answerPath := path + sep - } - answerPath - } - def dirPath (theDir) : any { dirPathString(theDir getPath())} - def isInRootTree(theDir) : any { - var answer := true - if (myRootDirPath != null) { - answer := dirPathString(theDir getCanonicalPath()) startsWith(myRootDirPath) - } - answer - } - def setCurrentDir(theDir) { - if (theDir exists() && isInRootTree(theDir)) {myCurrentDir := theDir} - } - if (myRootDirPath != null) { - myRootDirPath := dirPathString((makeFileFunction(myRootDirPath)) getCanonicalPath()) - if (isInRootTree(myCurrentDir)) { - traceln("home is part of the root tree") - } else { - println("Home path not part of root tree! Changing") - myCurrentDir := makeFileFunction( myRootDirPath) - myHomeDirectoryPath := myRootDirPath - } - } - traceln("making navigator") - def diskNavigator { - //offers MakeAnotherNavigator(homeDirname) returns the navigator uri - to dupNavigator(): any { - traceln("into dupnavigator") - def newNav := diskNavigatorMaker new(myHomeDirectoryPath, myStorageName, myRootDirPath, makeFileFunction) - newNav changeToDirectory (myCurrentDir getAbsolutePath()) - newNav - } - to getStorageName(): any {myStorageName + makeFileFunction label()} - to versionNumber(): any {versionNumber} - to getCurrentPath (): any { - if (! (myCurrentDir exists())) {diskNavigator gotoHome()} - myCurrentDir getAbsolutePath() - } - to getParentPath(): any {myCurrentDir getParent()} - to newFile(name) { - def theFile := makeFileFunction( (dirPath(myCurrentDir) + name)) - if (! (theFile exists())) { - theFile setText("") - } - } - to makeDir(dirName) { - def fullName := dirPath(myCurrentDir) + dirName - (makeFileFunction( fullName)) mkdir() - } - to gotoHome() { - myCurrentDir := makeFileFunction( myHomeDirectoryPath) - } - to changeToDirectory(fullPathName) { - traceln("change to directory: " + fullPathName) - setCurrentDir(makeFileFunction( fullPathName)) - } - to changeToSubdirectory(name) { - setCurrentDir(makeFileFunction( (dirPath(myCurrentDir) + name))) - traceln(dirPath(myCurrentDir)) - } - to goUp() {setCurrentDir(makeFileFunction( (myCurrentDir getParent())))} - to listCurrentSubdirectoriesAndFiles(): any { - if (! (myCurrentDir exists())) {diskNavigator gotoHome()} - def fileobjNames := myCurrentDir list() - def dirTuple := [] diverge() - def fileTuple := [] diverge() - traceln("into list subs, count:" + fileobjNames size()) - for next in fileobjNames { - if ((makeFileFunction( (dirPath(myCurrentDir) + next))) isDirectory()) { - dirTuple push(next) - } else { - fileTuple push(next) - } - } - [dirTuple sort() snapshot(), fileTuple sort() snapshot()] - } - to getFileNamed(name) : any { - fileModelMaker new(makeFileFunction( (dirPath(myCurrentDir) + name))) - } - to rename(fileName,newName) { - (makeFileFunction (dirPath(myCurrentDir) + fileName)) renameTo(makeFileFunction (dirPath(myCurrentDir) + newName)) - } - to deleteFileObject(fileName) { - def fileObj := diskNavigator getFileNamed(fileName) - try {fileObj delete()} catch e1 {} - if (fileObj exists() && fileObj isDirectory()) { - traceln("found undeleted dir") - for each in fileObj { - if (each isFile()) { - try {each delete()} catch e2{traceln("no file delete" + e2)} - } else { - def subNavigator := diskNavigator dupNavigator() - traceln("got sub navigator for delete") - subNavigator changeToSubdirectory (fileName) - traceln("about to del dir "+ each getName()) - subNavigator deleteFileObject(each getName()) - } - } - try {fileObj delete()} catch e3 { traceln("delete folder try 2 failed" + e3)} - } - } - } + traceln("into making disk navigator") + var myCurrentDir := makeFileFunction(myHomeDirectoryPath) + //file: myHomeDirectoryPath + def dirPathString (path) : any { + //makes sure a dir separator is at end + def sep := separator() + var answerPath := path + if (path(path size() - 1, path size() ) == sep) { + answerPath := path + } else { + answerPath := path + sep + } + answerPath + } + def dirPath (theDir) : any { dirPathString(theDir getPath())} + def isInRootTree(theDir) : any { + var answer := true + if (myRootDirPath != null) { + answer := dirPathString(theDir getCanonicalPath()) startsWith(myRootDirPath) + } + answer + } + def setCurrentDir(theDir) { + if (theDir exists() && isInRootTree(theDir)) {myCurrentDir := theDir} + } + if (myRootDirPath != null) { + myRootDirPath := dirPathString((makeFileFunction(myRootDirPath)) getCanonicalPath()) + if (isInRootTree(myCurrentDir)) { + traceln("home is part of the root tree") + } else { + println("Home path not part of root tree! Changing") + myCurrentDir := makeFileFunction( myRootDirPath) + myHomeDirectoryPath := myRootDirPath + } + } + traceln("making navigator") + def diskNavigator { + //offers MakeAnotherNavigator(homeDirname) returns the navigator uri + to dupNavigator(): any { + traceln("into dupnavigator") + def newNav := diskNavigatorMaker new(myHomeDirectoryPath, myStorageName, myRootDirPath, makeFileFunction) + newNav changeToDirectory (myCurrentDir getAbsolutePath()) + newNav + } + to getStorageName(): any {myStorageName + makeFileFunction label()} + to versionNumber(): any {versionNumber} + to getCurrentPath (): any { + if (! (myCurrentDir exists())) {diskNavigator gotoHome()} + myCurrentDir getAbsolutePath() + } + to getParentPath(): any {myCurrentDir getParent()} + to newFile(name) { + def theFile := makeFileFunction( (dirPath(myCurrentDir) + name)) + if (! (theFile exists())) { + theFile setText("") + } + } + to makeDir(dirName) { + def fullName := dirPath(myCurrentDir) + dirName + (makeFileFunction( fullName)) mkdir() + } + to gotoHome() { + myCurrentDir := makeFileFunction( myHomeDirectoryPath) + } + to changeToDirectory(fullPathName) { + traceln("change to directory: " + fullPathName) + setCurrentDir(makeFileFunction( fullPathName)) + } + to changeToSubdirectory(name) { + setCurrentDir(makeFileFunction( (dirPath(myCurrentDir) + name))) + traceln(dirPath(myCurrentDir)) + } + to goUp() {setCurrentDir(makeFileFunction( (myCurrentDir getParent())))} + to listCurrentSubdirectoriesAndFiles(): any { + if (! (myCurrentDir exists())) {diskNavigator gotoHome()} + def fileobjNames := myCurrentDir list() + def dirTuple := [] diverge() + def fileTuple := [] diverge() + traceln("into list subs, count:" + fileobjNames size()) + for next in fileobjNames { + if ((makeFileFunction( (dirPath(myCurrentDir) + next))) isDirectory()) { + dirTuple push(next) + } else { + fileTuple push(next) + } + } + [dirTuple sort() snapshot(), fileTuple sort() snapshot()] + } + to getFileNamed(name) : any { + fileModelMaker new(makeFileFunction( (dirPath(myCurrentDir) + name))) + } + to rename(fileName,newName) { + (makeFileFunction (dirPath(myCurrentDir) + fileName)) renameTo(makeFileFunction (dirPath(myCurrentDir) + newName)) + } + to deleteFileObject(fileName) { + def fileObj := diskNavigator getFileNamed(fileName) + try {fileObj delete()} catch e1 {} + if (fileObj exists() && fileObj isDirectory()) { + traceln("found undeleted dir") + for each in fileObj { + if (each isFile()) { + try {each delete()} catch e2{traceln("no file delete" + e2)} + } else { + def subNavigator := diskNavigator dupNavigator() + traceln("got sub navigator for delete") + subNavigator changeToSubdirectory (fileName) + traceln("about to del dir "+ each getName()) + subNavigator deleteFileObject(each getName()) + } + } + try {fileObj delete()} catch e3 { traceln("delete folder try 2 failed" + e3)} + } + } + } } class revokableConnectionMaker (myFtController) : any { - def revokableConnection { - to getANavigator(): any { - myFtController getANavigator() - } - to versionNumber(): any {versionNumber} - } + def revokableConnection { + to getANavigator(): any { + myFtController getANavigator() + } + to versionNumber(): any {versionNumber} + } } // farOverwriteAnswerer uses state pattern // with different functions for different behaviors // it select the right function with lazy evaluation: // if there's never a preexisting file to consider overwriting, - // no overwriting policy request ever goes to the user + // no overwriting policy request ever goes to the user class overwriteAnswererMaker (): any { - def alwaysOverwrite(fileName) : any {true} - def neverOverwrite(fileName) : any {false} - def askOverwrite(fileName) : any { - def [answerPromise, resolver] := PromiseMaker() - def answerDialog := dialogPromiser new("Overwrite?", "Overwrite file " + fileName + "?", null, ["Yes","No"]) - when (answerDialog) -> done(answer) { - resolver resolve (answerDialog getClickedButton() == "Yes") - } catch err {} - answerPromise - } - var answerFunctionSelectionAlreadyStarted := false - def [answerFunction,functionResolver] := PromiseMaker() - def determineOverwritePlan() { - answerFunctionSelectionAlreadyStarted := true - def planDialogPromise := dialogPromiser new("OverwritePolicy", "When should files be overwritten?", null, ["Always","Never","After Confirmation"]) - when (planDialogPromise) -> done(planDialog) { - def button := planDialog getClickedButton() - if (button == "Always") { - functionResolver resolve(alwaysOverwrite) - }else if (button == "Never") { - functionResolver resolve(neverOverwrite) - }else {functionResolver resolve(askOverwrite)} - } catch err {} - } - def overwriteAnswerer { - to promiseOverwriteAnswer(fileName) :any { - if (!answerFunctionSelectionAlreadyStarted) {determineOverwritePlan()} - answerFunction <- run(fileName) - } - } - overwriteAnswerer + def alwaysOverwrite(fileName) : any {true} + def neverOverwrite(fileName) : any {false} + def askOverwrite(fileName) : any { + def [answerPromise, resolver] := PromiseMaker() + def answerDialog := dialogPromiser new("Overwrite?", "Overwrite file " + fileName + "?", null, ["Yes","No"]) + when (answerDialog) -> done(answer) { + resolver resolve (answerDialog getClickedButton() == "Yes") + } catch err {} + answerPromise + } + var answerFunctionSelectionAlreadyStarted := false + def [answerFunction,functionResolver] := PromiseMaker() + def determineOverwritePlan() { + answerFunctionSelectionAlreadyStarted := true + def planDialogPromise := dialogPromiser new("OverwritePolicy", "When should files be overwritten?", null, ["Always","Never","After Confirmation"]) + when (planDialogPromise) -> done(planDialog) { + def button := planDialog getClickedButton() + if (button == "Always") { + functionResolver resolve(alwaysOverwrite) + }else if (button == "Never") { + functionResolver resolve(neverOverwrite) + }else {functionResolver resolve(askOverwrite)} + } catch err {} + } + def overwriteAnswerer { + to promiseOverwriteAnswer(fileName) :any { + if (!answerFunctionSelectionAlreadyStarted) {determineOverwritePlan()} + answerFunction <- run(fileName) + } + } + overwriteAnswerer } traceln("about to compile copyAction") def copyAction(farFromFile,farToFile,fileName ) : any { - farToFile <- getToCopier() <- copyEventually(farFromFile <- getFromCopier(), - fileProgressObserverMaker new("Copying " + fileName, farToFile), - forwarderMaker new(farToFile), forwarderMaker new(farFromFile)) + farToFile <- getToCopier() <- copyEventually(farFromFile <- getFromCopier(), + fileProgressObserverMaker new("Copying " + fileName, farToFile), + forwarderMaker new(farToFile), forwarderMaker new(farFromFile)) } //Sequencer of file copies to limit the number of progress windows and the number @@ -814,339 +814,339 @@ def copySequencer := sendValveMaker new(5) def copyFiles(fromNavigator, toNavigator, overwriteAnswerer) : any { - traceln("into copyFiles" + fromNavigator+toNavigator + overwriteAnswerer) - def copyVows := vowsMonitorMaker new() - def copyBase(farFromFile, farToFile, fileName) { - copyVows add(copySequencer promiseAction([copyAction, "run", [farFromFile, farToFile, fileName]])) - } - def filesDirsPromise := fromNavigator <- listCurrentSubdirectoriesAndFiles() - when (filesDirsPromise) -> done(filesDirs) { - def fileNames := filesDirs[1] - for each in fileNames { - def nextFromFile := fromNavigator <- getFileNamed(each) - def nextToFile := toNavigator <- getFileNamed(each) - when (nextToFile <- exists()) -> doneNext(doesExist) { - if ( doesExist) { - def shouldCopy := overwriteAnswerer promiseOverwriteAnswer(each) - when (shouldCopy) -> doneCopy(copyFulfilled) { - if (shouldCopy) { - copyBase(nextFromFile, nextToFile, each) - } - } catch err {} - } else { - copyBase(nextFromFile, nextToFile, each) - } - } catch err{} - } - copyVows finishAll() - } catch err {traceln("error not caught in old version getting filesDirs: " + err)} - copyVows promiseFinish() + traceln("into copyFiles" + fromNavigator+toNavigator + overwriteAnswerer) + def copyVows := vowsMonitorMaker new() + def copyBase(farFromFile, farToFile, fileName) { + copyVows add(copySequencer promiseAction([copyAction, "run", [farFromFile, farToFile, fileName]])) + } + def filesDirsPromise := fromNavigator <- listCurrentSubdirectoriesAndFiles() + when (filesDirsPromise) -> done(filesDirs) { + def fileNames := filesDirs[1] + for each in fileNames { + def nextFromFile := fromNavigator <- getFileNamed(each) + def nextToFile := toNavigator <- getFileNamed(each) + when (nextToFile <- exists()) -> doneNext(doesExist) { + if ( doesExist) { + def shouldCopy := overwriteAnswerer promiseOverwriteAnswer(each) + when (shouldCopy) -> doneCopy(copyFulfilled) { + if (shouldCopy) { + copyBase(nextFromFile, nextToFile, each) + } + } catch err {} + } else { + copyBase(nextFromFile, nextToFile, each) + } + } catch err{} + } + copyVows finishAll() + } catch err {traceln("error not caught in old version getting filesDirs: " + err)} + copyVows promiseFinish() } class marshalledDirPromiser(farOuterNavigator, farDir) : any { - traceln("make marshall" + farOuterNavigator + farDir) - def [marshalledDirPromise, resolver] := PromiseMaker() - var farDirNavigator := null - var dirExists := farDir <- exists() - def dirName := farDir <- getName() - def dirCanonicalPath := farDir <- getCanonicalPath() - def dirPath := farDir <- getPath() - def fillWhenDirExists() { - farDirNavigator := farOuterNavigator <- dupNavigator() - farDirNavigator <- changeToSubdirectory (dirName) - dirExists := true - } - def marshalledDir := { - when (dirPath) -> done(dirPathR) { - if (dirExists) {fillWhenDirExists()} - resolver resolve(marshalledDir) - traceln("dir paths: " + dirCanonicalPath + " :" + dirPath) - } catch err { - resolver smash(makeErr ("dead dir: "+ err)) - } - def marshalledDir { - to getDir() : any {farDir} - to getOuterNavigator() :any {farOuterNavigator} - to getDirNavigator() :any {farDirNavigator} - to exists() : any {dirExists} - to getName() : any {dirName} - to promiseMarshalledSubDir(subName) : any { - def farSubdir := farDirNavigator <- getFileNamed(subName) - marshalledDirPromiser new(farDirNavigator,farSubdir) - } - to makeSelf() : any { - var makePromise := null - if (!dirExists) { - makePromise := farDir <-mkdir() - fillWhenDirExists() - } - makePromise - } - to isProperSubDir() : any {dirCanonicalPath toLowerCase() == dirPath toLowerCase()} - to getCanonicalPath() :any {dirCanonicalPath} - to getPath() : any {dirPath} - } - } - marshalledDirPromise + traceln("make marshall" + farOuterNavigator + farDir) + def [marshalledDirPromise, resolver] := PromiseMaker() + var farDirNavigator := null + var dirExists := farDir <- exists() + def dirName := farDir <- getName() + def dirCanonicalPath := farDir <- getCanonicalPath() + def dirPath := farDir <- getPath() + def fillWhenDirExists() { + farDirNavigator := farOuterNavigator <- dupNavigator() + farDirNavigator <- changeToSubdirectory (dirName) + dirExists := true + } + def marshalledDir := { + when (dirPath) -> done(dirPathR) { + if (dirExists) {fillWhenDirExists()} + resolver resolve(marshalledDir) + traceln("dir paths: " + dirCanonicalPath + " :" + dirPath) + } catch err { + resolver smash(makeErr ("dead dir: "+ err)) + } + def marshalledDir { + to getDir() : any {farDir} + to getOuterNavigator() :any {farOuterNavigator} + to getDirNavigator() :any {farDirNavigator} + to exists() : any {dirExists} + to getName() : any {dirName} + to promiseMarshalledSubDir(subName) : any { + def farSubdir := farDirNavigator <- getFileNamed(subName) + marshalledDirPromiser new(farDirNavigator,farSubdir) + } + to makeSelf() : any { + var makePromise := null + if (!dirExists) { + makePromise := farDir <-mkdir() + fillWhenDirExists() + } + makePromise + } + to isProperSubDir() : any {dirCanonicalPath toLowerCase() == dirPath toLowerCase()} + to getCanonicalPath() :any {dirCanonicalPath} + to getPath() : any {dirPath} + } + } + marshalledDirPromise } traceln("got up to paster") //paster def paster { - to paste(farFromFiles, fromDiskNavigator, toNavigatorWindow) { - traceln("into paster paste:" + farFromFiles + fromDiskNavigator + toNavigatorWindow) - def toDiskNavigator := toNavigatorWindow getDiskNavigator() <- dupNavigator() - def allDone := vowsMonitorMaker new() - def myOverwriter := overwriteAnswererMaker new() - for each in farFromFiles { - traceln("got each file" + each) - def isDir := each <- isDirectory() - def [nextCopyPromise, nextResolver] := PromiseMaker() - allDone add(nextCopyPromise) - when (isDir) -> done(isDirR) { - if (isDir) { - def nextPromise := paster copyDirBegin(each, - fromDiskNavigator, toDiskNavigator, myOverwriter) - nextResolver resolve(nextPromise) - }else{ - def nextPromise := paster pasteFile(each, - toDiskNavigator, toNavigatorWindow) - nextResolver resolve(nextPromise) - } - } catch err {} - } - allDone finishAll() - when (allDone promiseFinish()) -> done(p) { - traceln("about to refresh after pasting files") - toNavigatorWindow refresh() - } catch err { - toNavigatorWindow refresh() - connectionWarning("Some files may not have been copy/pasted.\n" + err) - } - } - to pasteFile(fromFilePromise, toDiskNavigator, toNavigatorWindow) : any { - traceln("into pasteFile") - def [finishPromise,resolver] := PromiseMaker() - def startCopyTo(target,fromName) { - traceln("about to copy in pastefile") - def finalPromise := copySequencer promiseAction([copyAction, "run", [fromFilePromise, target, fromName]]) - traceln("about to start resolver in pastefile") - when (finalPromise) -> done(p) { - traceln("about to resolve in pastefile: " + p) - resolver resolve(p) - } catch err{} - } - def fromNamePromise := fromFilePromise <- getName() - when (fromNamePromise) -> done(fromName) { - traceln("paste is getting target " + fromName) - var target := toDiskNavigator <- getFileNamed(fromName) - when (target <- exists()) -> done2(fileExists) { - if (fileExists) { - traceln("file exists: " + fromName) - def result := showInputDialog (null, - "Confirm or change name, or cancel", - "File " + fromName + " already exists", - QUESTION_MESSAGE(), null, null, fromName + "") - if (result != null) { - if (result != fromName) { - target := toDiskNavigator <- getFileNamed(result) - } - startCopyTo(target,fromName) - } else { - resolver resolve("user canceled") - } - } else { - traceln("about to copyeventually") - startCopyTo(target,fromName) - } - } catch err2 {} - } catch err {connectionWarning(err)} - finishPromise - } - to copyDirCautiously(marshalledFromDir, marshalledToDir, createdDirPaths, overwriteAnswerer) : any { - traceln("in copyDirCautiously" + marshalledFromDir + " :" +marshalledToDir) - //only continue copying if the fromDir is not something we just - // created as a todir(indicating we are copying a dir into its own subdir) - //and if the fromdir is not a symlink running off to someplace odd) - traceln("is proper subdir " + (marshalledFromDir isProperSubDir())) - def copyVows := vowsMonitorMaker new() - if ((! (createdDirPaths contains(marshalledFromDir getCanonicalPath()))) && marshalledFromDir isProperSubDir()) { - traceln("continuing copying in cautiously") - if (! (marshalledToDir exists())) { - marshalledToDir makeSelf() - traceln("made dir") - createdDirPaths push(marshalledToDir getCanonicalPath()) - } - copyVows add(copyFiles(marshalledFromDir getDirNavigator(), marshalledToDir getDirNavigator(),overwriteAnswerer)) - def filesDirsPromise := marshalledFromDir getDirNavigator() <- listCurrentSubdirectoriesAndFiles() - when (filesDirsPromise) -> done(filesDirs) { - def dirs := filesDirs[0] - for each in dirs { - traceln("copying dir: " + each) - def [subDirPromise,subDirResolver] := PromiseMaker() - copyVows add(subDirPromise) - def fromSubNavigator := marshalledFromDir getDirNavigator() - def marshalledFromSubDir := marshalledDirPromiser new(fromSubNavigator, fromSubNavigator <- getFileNamed(each)) - def toSubNavigator := marshalledToDir getDirNavigator() - def marshalledToSubDir := marshalledDirPromiser new(toSubNavigator, toSubNavigator <- getFileNamed(each)) - def dirsReadyVow := promiseAllResolved([marshalledToSubDir, marshalledFromSubDir]) - when (dirsReadyVow) -> done2(dirsReady) { - subDirResolver resolve(paster copyDirCautiously (marshalledFromSubDir, marshalledToSubDir, createdDirPaths, overwriteAnswerer)) - } catch e { - connectionWarning(e) - subDirResolver smash(makeErr ("Couldn't connect to directory: " + e)) - } - } - copyVows finishAll() - } catch err {} - } else {copyVows finishAll()} - copyVows promiseFinish() - } - to copyDirBegin(farFromDir, farFromDisk, toDiskNavigator, overwriteAnswerer) : any { - def farToDisk := toDiskNavigator <- dupNavigator() - def fromDir := marshalledDirPromiser new(farFromDisk,farFromDir) - def createdDirPaths := [] diverge() - def [dirCopyCompletePromise, dirCopyCompleteResolver] := PromiseMaker() - when (fromDir) -> done(fromDirR) { - def farToDir := farToDisk <- getFileNamed(fromDir getName()) - def toDir := marshalledDirPromiser new(farToDisk, farToDir) - when (toDir) -> done2(toDirR) { - def copyPromise := paster copyDirCautiously (fromDir, toDir, createdDirPaths, overwriteAnswerer) - dirCopyCompleteResolver resolve(copyPromise) - }catch err2 { - dirCopyCompleteResolver smash(makeErr ("Lost connection: " +err2)) - connectionWarning(err2) - } - } catch err {} - dirCopyCompletePromise - } + to paste(farFromFiles, fromDiskNavigator, toNavigatorWindow) { + traceln("into paster paste:" + farFromFiles + fromDiskNavigator + toNavigatorWindow) + def toDiskNavigator := toNavigatorWindow getDiskNavigator() <- dupNavigator() + def allDone := vowsMonitorMaker new() + def myOverwriter := overwriteAnswererMaker new() + for each in farFromFiles { + traceln("got each file" + each) + def isDir := each <- isDirectory() + def [nextCopyPromise, nextResolver] := PromiseMaker() + allDone add(nextCopyPromise) + when (isDir) -> done(isDirR) { + if (isDir) { + def nextPromise := paster copyDirBegin(each, + fromDiskNavigator, toDiskNavigator, myOverwriter) + nextResolver resolve(nextPromise) + }else{ + def nextPromise := paster pasteFile(each, + toDiskNavigator, toNavigatorWindow) + nextResolver resolve(nextPromise) + } + } catch err {} + } + allDone finishAll() + when (allDone promiseFinish()) -> done(p) { + traceln("about to refresh after pasting files") + toNavigatorWindow refresh() + } catch err { + toNavigatorWindow refresh() + connectionWarning("Some files may not have been copy/pasted.\n" + err) + } + } + to pasteFile(fromFilePromise, toDiskNavigator, toNavigatorWindow) : any { + traceln("into pasteFile") + def [finishPromise,resolver] := PromiseMaker() + def startCopyTo(target,fromName) { + traceln("about to copy in pastefile") + def finalPromise := copySequencer promiseAction([copyAction, "run", [fromFilePromise, target, fromName]]) + traceln("about to start resolver in pastefile") + when (finalPromise) -> done(p) { + traceln("about to resolve in pastefile: " + p) + resolver resolve(p) + } catch err{} + } + def fromNamePromise := fromFilePromise <- getName() + when (fromNamePromise) -> done(fromName) { + traceln("paste is getting target " + fromName) + var target := toDiskNavigator <- getFileNamed(fromName) + when (target <- exists()) -> done2(fileExists) { + if (fileExists) { + traceln("file exists: " + fromName) + def result := showInputDialog (null, + "Confirm or change name, or cancel", + "File " + fromName + " already exists", + QUESTION_MESSAGE(), null, null, fromName + "") + if (result != null) { + if (result != fromName) { + target := toDiskNavigator <- getFileNamed(result) + } + startCopyTo(target,fromName) + } else { + resolver resolve("user canceled") + } + } else { + traceln("about to copyeventually") + startCopyTo(target,fromName) + } + } catch err2 {} + } catch err {connectionWarning(err)} + finishPromise + } + to copyDirCautiously(marshalledFromDir, marshalledToDir, createdDirPaths, overwriteAnswerer) : any { + traceln("in copyDirCautiously" + marshalledFromDir + " :" +marshalledToDir) + //only continue copying if the fromDir is not something we just + // created as a todir(indicating we are copying a dir into its own subdir) + //and if the fromdir is not a symlink running off to someplace odd) + traceln("is proper subdir " + (marshalledFromDir isProperSubDir())) + def copyVows := vowsMonitorMaker new() + if ((! (createdDirPaths contains(marshalledFromDir getCanonicalPath()))) && marshalledFromDir isProperSubDir()) { + traceln("continuing copying in cautiously") + if (! (marshalledToDir exists())) { + marshalledToDir makeSelf() + traceln("made dir") + createdDirPaths push(marshalledToDir getCanonicalPath()) + } + copyVows add(copyFiles(marshalledFromDir getDirNavigator(), marshalledToDir getDirNavigator(),overwriteAnswerer)) + def filesDirsPromise := marshalledFromDir getDirNavigator() <- listCurrentSubdirectoriesAndFiles() + when (filesDirsPromise) -> done(filesDirs) { + def dirs := filesDirs[0] + for each in dirs { + traceln("copying dir: " + each) + def [subDirPromise,subDirResolver] := PromiseMaker() + copyVows add(subDirPromise) + def fromSubNavigator := marshalledFromDir getDirNavigator() + def marshalledFromSubDir := marshalledDirPromiser new(fromSubNavigator, fromSubNavigator <- getFileNamed(each)) + def toSubNavigator := marshalledToDir getDirNavigator() + def marshalledToSubDir := marshalledDirPromiser new(toSubNavigator, toSubNavigator <- getFileNamed(each)) + def dirsReadyVow := promiseAllResolved([marshalledToSubDir, marshalledFromSubDir]) + when (dirsReadyVow) -> done2(dirsReady) { + subDirResolver resolve(paster copyDirCautiously (marshalledFromSubDir, marshalledToSubDir, createdDirPaths, overwriteAnswerer)) + } catch e { + connectionWarning(e) + subDirResolver smash(makeErr ("Couldn't connect to directory: " + e)) + } + } + copyVows finishAll() + } catch err {} + } else {copyVows finishAll()} + copyVows promiseFinish() + } + to copyDirBegin(farFromDir, farFromDisk, toDiskNavigator, overwriteAnswerer) : any { + def farToDisk := toDiskNavigator <- dupNavigator() + def fromDir := marshalledDirPromiser new(farFromDisk,farFromDir) + def createdDirPaths := [] diverge() + def [dirCopyCompletePromise, dirCopyCompleteResolver] := PromiseMaker() + when (fromDir) -> done(fromDirR) { + def farToDir := farToDisk <- getFileNamed(fromDir getName()) + def toDir := marshalledDirPromiser new(farToDisk, farToDir) + when (toDir) -> done2(toDirR) { + def copyPromise := paster copyDirCautiously (fromDir, toDir, createdDirPaths, overwriteAnswerer) + dirCopyCompleteResolver resolve(copyPromise) + }catch err2 { + dirCopyCompleteResolver smash(makeErr ("Lost connection: " +err2)) + connectionWarning(err2) + } + } catch err {} + dirCopyCompletePromise + } } def makeDefaultConfigMap() :near { - def map := [] asKeys() diverge() - map["windowTitle"] := "My eDesk" - map["home"] := "c:\\windows\\desktop" - map["serverOnly"] := false - map["capabilityFile"] := null - map["makeFileFunction"] := makeWriteFile - map["virtualRoot"] := null - map + def map := [] asKeys() diverge() + map["windowTitle"] := "My eDesk" + map["home"] := "c:\\windows\\desktop" + map["serverOnly"] := false + map["capabilityFile"] := null + map["makeFileFunction"] := makeWriteFile + map["virtualRoot"] := null + map } #assumes it is getting a default config, modifying from there def setConfigFromCommandLine(configMap) { - def commandArgs := interp getArgs() - configMap["windowTitle"] := commandArgs[0] - configMap["serverOnly"] := commandArgs[1] != "gui" - configMap["home"] := commandArgs[2] - if (commandArgs size() > 3) {configMap["capabilityFile"] := commandArgs[3]} - if (commandArgs size() >4) {configMap["virtualRoot"] := commandArgs[4]} - if (commandArgs size() > 5 && commandArgs[5] != "write") { - traceln("Read Only File System") - configMap["makeFileFunction"] := makeReadFile - #diddling rather global variable - toFileCopierMaker := readOnlyToFileCopierMaker - } + def commandArgs := interp getArgs() + configMap["windowTitle"] := commandArgs[0] + configMap["serverOnly"] := commandArgs[1] != "gui" + configMap["home"] := commandArgs[2] + if (commandArgs size() > 3) {configMap["capabilityFile"] := commandArgs[3]} + if (commandArgs size() >4) {configMap["virtualRoot"] := commandArgs[4]} + if (commandArgs size() > 5 && commandArgs[5] != "write") { + traceln("Read Only File System") + configMap["makeFileFunction"] := makeReadFile + #diddling rather global variable + toFileCopierMaker := readOnlyToFileCopierMaker + } } traceln("about to compile setconfig from file") #assumes it is getting a default config, modifying from there def setConfigFromFile(configFile,configMap) { - if (configFile exists()) { - for each in configFile { - if (each =~ `@keyword=@value${"\n"}`) { - if (keyword == "isReadOnly" && value=="true") { - configMap["makeFileFunction"]:=makeReadFile - } else if (keyword == "serverOnly") { - configMap[keyword] := value == "true" - } else {configMap[keyword] := value } - } - } - } + if (configFile exists()) { + for each in configFile { + if (each =~ `@keyword=@value${"\n"}`) { + if (keyword == "isReadOnly" && value=="true") { + configMap["makeFileFunction"]:=makeReadFile + } else if (keyword == "serverOnly") { + configMap[keyword] := value == "true" + } else {configMap[keyword] := value } + } + } + } } traceln("about to compile ftControllerMaker") //ftController class ftControllerMaker(): any { - def ftController - var copyBuffer := null - var copyBufferDiskNavigator := null - var configMap := makeDefaultConfigMap() - def commandArgs := interp getArgs() - traceln("command arguments" + commandArgs) - if (commandArgs size() > 1) {setConfigFromCommandLine(configMap)} - if (commandArgs size() < 1) {setConfigFromFile(, configMap)} - if (commandArgs size() == 1) {setConfigFromFile(, configMap)} - def myHomeNavigator := diskNavigatorMaker new(configMap["home"], - configMap["windowTitle"], configMap["virtualRoot"], configMap["makeFileFunction"]) - if (configMap["serverOnly"]) { - def capFile := - capFile setText(uriTools makeURI(revokableConnectionMaker new(ftController))) - println("Disk Navigator Operational") - } else { - navigatorWindowMaker new(ftController, myHomeNavigator) - } - - def getRemoteConnectionURI(): any { - var uri := null - def blah := JFrameMaker new("") - def dialog := new(blah, "Select an Edesk erights file") - dialog show() - var path := dialog getFile() - if (path != null) { - path := dialog getDirectory() + path - uri := () getText() - traceln("connection is:" + uri) - } - uri - } - def buildNavWindow(uri) { - traceln("in buildnavwin, uri:" + uri) - def connector:= uriTools promiseObject(uri) - traceln("connector is" + connector) - def navigator := connector <- getANavigator() - def versionPromise := connector <-versionNumber() - when (versionPromise) -> done(version) { - traceln("ha! resolved promise") - if (version == versionNumber) { - navigatorWindowMaker new(ftController, navigator) - } else { - connectionWarning("Wrong Version") - } - } catch err { - connectionWarning("Remote Navigator Not Acquired\n" + err) - traceln("connection failure" + err) - } - } - def bind ftController { - to copyFrom(fromFilePromises,fromDiskNavigator) { - copyBuffer := fromFilePromises - copyBufferDiskNavigator := fromDiskNavigator <- dupNavigator() - } - to paste(navigatorWindow) { - paster paste(copyBuffer, copyBufferDiskNavigator, navigatorWindow) - } - to getANavigator(): any { - diskNavigatorMaker new(configMap["home"], configMap["windowTitle"], - configMap["virtualRoot"], configMap["makeFileFunction"]) - } - to openRemote() { - def uri := getRemoteConnectionURI() - if (uri != null) { - buildNavWindow(uri) - } - } - to openEdesk(filePromise) { - def uri := filePromise <- getText() - when (uri) -> done(uriR) { - buildNavWindow(uri) - } catch err { - connectionWarning("No Edesk server") - } - } - } + def ftController + var copyBuffer := null + var copyBufferDiskNavigator := null + var configMap := makeDefaultConfigMap() + def commandArgs := interp getArgs() + traceln("command arguments" + commandArgs) + if (commandArgs size() > 1) {setConfigFromCommandLine(configMap)} + if (commandArgs size() < 1) {setConfigFromFile(, configMap)} + if (commandArgs size() == 1) {setConfigFromFile(, configMap)} + def myHomeNavigator := diskNavigatorMaker new(configMap["home"], + configMap["windowTitle"], configMap["virtualRoot"], configMap["makeFileFunction"]) + if (configMap["serverOnly"]) { + def capFile := + capFile setText(uriTools makeURI(revokableConnectionMaker new(ftController))) + println("Disk Navigator Operational") + } else { + navigatorWindowMaker new(ftController, myHomeNavigator) + } + + def getRemoteConnectionURI(): any { + var uri := null + def blah := JFrameMaker new("") + def dialog := new(blah, "Select an Edesk erights file") + dialog show() + var path := dialog getFile() + if (path != null) { + path := dialog getDirectory() + path + uri := () getText() + traceln("connection is:" + uri) + } + uri + } + def buildNavWindow(uri) { + traceln("in buildnavwin, uri:" + uri) + def connector:= uriTools promiseObject(uri) + traceln("connector is" + connector) + def navigator := connector <- getANavigator() + def versionPromise := connector <-versionNumber() + when (versionPromise) -> done(version) { + traceln("ha! resolved promise") + if (version == versionNumber) { + navigatorWindowMaker new(ftController, navigator) + } else { + connectionWarning("Wrong Version") + } + } catch err { + connectionWarning("Remote Navigator Not Acquired\n" + err) + traceln("connection failure" + err) + } + } + def bind ftController { + to copyFrom(fromFilePromises,fromDiskNavigator) { + copyBuffer := fromFilePromises + copyBufferDiskNavigator := fromDiskNavigator <- dupNavigator() + } + to paste(navigatorWindow) { + paster paste(copyBuffer, copyBufferDiskNavigator, navigatorWindow) + } + to getANavigator(): any { + diskNavigatorMaker new(configMap["home"], configMap["windowTitle"], + configMap["virtualRoot"], configMap["makeFileFunction"]) + } + to openRemote() { + def uri := getRemoteConnectionURI() + if (uri != null) { + buildNavWindow(uri) + } + } + to openEdesk(filePromise) { + def uri := filePromise <- getText() + when (uri) -> done(uriR) { + buildNavWindow(uri) + } catch err { + connectionWarning("No Edesk server") + } + } + } } introducer onTheAir() 1.60 +4 -3 e/src/jsrc/org/erights/e/elang/interp/Interp.java Index: Interp.java =================================================================== RCS file: /cvs/e/src/jsrc/org/erights/e/elang/interp/Interp.java,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- Interp.java 2001/08/05 07:01:24 1.59 +++ Interp.java 2001/08/08 05:39:17 1.60 @@ -477,10 +477,11 @@ } /** - * I can't believe they didn't make platform l&f the default. It's - * stupid to put this here, but I can't think of a better place. Ugh. + * I can't believe they didn't make platform l&f the default. *

- * + * It's stupid to put this here, but I can't think of a better + * place. Ugh. + *

* Changed to call through ELib (ie, by reflection) so that E without ui * won't be statically importing swing. */ 1.34 +4 -4 e/src/jsrc/org/erights/e/ui/jed/JedMain.java Index: JedMain.java =================================================================== RCS file: /cvs/e/src/jsrc/org/erights/e/ui/jed/JedMain.java,v retrieving revision 1.33 retrieving revision 1.34 diff -u -r1.33 -r1.34 --- JedMain.java 2001/07/25 01:34:38 1.33 +++ JedMain.java 2001/08/08 05:39:17 1.34 @@ -468,8 +468,8 @@ * */ public boolean menuSmallerFont() { - Font oldFont = myTextArea.getFont(); - Font newFont = oldFont.deriveFont((float)(oldFont.getSize() -2.0)); + Font oldFont = myTextArea.getFont(); + Font newFont = oldFont.deriveFont((float)(oldFont.getSize() -2.0)); myTextArea.setFont(newFont); return true; } @@ -478,8 +478,8 @@ * */ public boolean menuLargerFont() { - Font oldFont = myTextArea.getFont(); - Font newFont = oldFont.deriveFont((float)(oldFont.getSize() +2.0)); + Font oldFont = myTextArea.getFont(); + Font newFont = oldFont.deriveFont((float)(oldFont.getSize() +2.0)); myTextArea.setFont(newFont); return true; }