Squeak Class Documentation category index | class index  
 
Project
  category: System-Support
  superclass: Model
  subclasses:

A Project stores the state of a complete Squeak desktop, including the windows, and the currently active changeSet. A project knows who its parent project is. When you change projects, whether by entering or exiting, the screen state of the project being exited is saved in that project.

A project is retained by its view in the parent world. It is effectively named by the name of its changeSet, which can be changed either by renaming in a changeSorter, or by editing the label of its view from the parent project.

As the site of major context switch, Projects are the locus of swapping between the old MVC and the new Morphic worlds. The distinction is based on whether the variable 'world' contains a WorldMorph or a ControlManager.

Saving and Loading
Projects may be stored on the disk in external format. (Project named: 'xxx') exportSegment, or choose 'store project on file...'.
Projects may be loaded from a server and stored back. Storing on a server never overwrites; it always makes a new version. A project remembers the url of where it lives in urlList. The list is length one, for now. The url may point to a local disk instead of a server. All projects that the user looks at, are cached in the Squeaklet folder. Sorted by server. The cache holds the most recent version only.

Isolation
When you accept a method, the entire system feels the change, except projects that are "isolated". In an isolated project, all new global variables (including new classes) are stored in the project-local environment, and all changes to preexisting classes are revoked when you leave the project. When you enter another project, that project's changes are invoked. Invocation and revocation are handled efficiently by swapping pointers. To make a project be isolated, choose 'isolate changes of this project' from the 'changes...' section of the screen menu. You can use an isolated project for making dangerous change to a system, and you can get out if it crashes. A foreign application can have the separate environment it wants. Also, you can freeze part of the system for a demo that you don't want to disturb. An isolated project shares methods with all subprojects inside it, unless they are isolated themselves. Each isolated project is the head of a tree of projects with which it shares all methods.

You may 'assert' all changes ever made in the current project to take effect above this project. This amounts to exporting all the globals in the current environment, and zapping the revocation lists to that the current state of the world will remain in force upon exit from this project.

[Later: A project may be 'frozen'. Asserts do not apply to it after that. (Great for demos.) You should be informed when an assert was blocked in a frozen project.]

Class definitions are layered by the isolation mechanism. You are only allowed to change the shape of a class in projects that lie within its isolation scope. All versions of the methods are recompiled, in all projects. If you remove an inst var that is in use in an isolated project, it will become an Undeclared global. It is best not to remove an inst var when it is being used in another isolated project. [If we recompile them all, why can't we diagnose the problem before allowing the change??]

Senders and Implementors do not see versions of a method in isolated projects. [again, we might want to make this possible at a cost]. When you ask for versions of a method, you will not get the history in other isolated projects.

Moving methods and classes between changeSets, and merging changeSets has no effect on which methods are in force. But, when you look at a changeSet from a different isolated project, the methods will contain code that is not in force. A changeSet is just a list of method names, and does not keep separate copies of any code.

When finer grained assertion is needed, use the method (aProject assertClass: aClass from: thisProject warn: warnConflicts).

How isolated changes work: The first time a class changes, store its MethodDictionary object. Keep parallel arrays of associations to Classes and MethodDictionaries. Traverse these and install them when you enter an "ioslated project". When you leave, store this project's own MethodDictionaries there.
To do an assert, we must discover which methods changed here, and which changed only in the project we are asserting into. There is one copy of the 'virgin' method dictionaries in the system. It is always being temporarily stored by the currently inForce isolated project.

isolatedHead - true for the top project, and for each isolated project. false or nil for any subproject that shares all methods with its parent project.

inForce - true if my methods are installed now. false if I am dormant. [is this equivalent to self == Project Current?]

classArray - list of associations to classes

methodDictArray - the method dictionaries of those classes before we started changing methods. They hang onto the original compiledMethods. (If this project is dormant, it contains the method dictionaries of those classes as they will be here, in this project).

orgArray - the class organizations of the classes in classArray.

UsingIsolation (class variable) - No longer used.

When you want to save a project in export format from within that very project, it gets tricky. We set two flags in parentProject, exit to it, and let parentProject write the project. ProjectViewMorph in parentProject checks in its step method, does the store, clears the flags, and reenters the subProject.

instance methods
  OBSOLETE
  obsolete

  SuperSwiki
  tellAFriend
tellAFriend:

  accessing
  addGuard:
addSubProjectNamesTo:indentation:
changeSet
currentStack:
displayDepth:
environment
findProjectView:
forgetExistingURL
isCurrentProject
isMorphic
isTopProject
labelString
lastDirectory:
lastSavedAtSeconds
name
nextProject
parent
previousProject
projectChangeSet
renameTo:
setParent:
setThumbnail:
setViewSize:
storeNewPrimaryURL:
thumbnail
urlList
viewSize
world

  displaying
  createViewIfAppropriate
displayZoom:
imageForm
imageFormOfSize:depth:
showZoom

  file in/out
  armsLengthCommand:withDescription:
assureIntegerVersion
beep
bumpVersion:
compressFilesIn:to:in:resources:
couldBeSwappedOut
currentVersionNumber
decideAboutCreatingBlank:
doArmsLengthCommand:
downloadUrl
ensureChangeSetNameUnique
exportSegmentFileName:directory:
exportSegmentWithCatagories:classes:fileName:directory:
exportSegmentWithChangeSet:fileName:directory:
findAFolderToLoadProjectFrom
findAFolderToStoreProjectIn
fromMyServerLoad:
hasBadNameForStoring
htmlPagePrototype
loadFromServer
loadFromServer:
objectForDataStream:
primaryServer
primaryServerIfNil:
projectExtension
restoreReferences
revert
saveAs
saveForRevert
serverList
squeakletDirectory
storeDataOn:
storeHtmlPageIn:
storeOnServer
storeOnServerAssumingNameValid
storeOnServerInnards
storeOnServerShowProgressOn:forgetURL:
storeOnServerWithProgressInfo
storeOnServerWithProgressInfoOn:
storeSegment
storeSegmentNoFile
storeSomeSegment
storeToMakeRoom
tryToFindAServerWithMe
url
urlForLoading
versionForFileName
versionFrom:
versionedFileName
writeFileNamed:fromDirectory:toServer:
writeStackText:in:registerIn:

  flaps support
  assureFlapIntegrity
cleanseDisabledGlobalFlapIDsList
enableDisableGlobalFlap:
flapsSuppressed
flapsSuppressed:
globalFlapEnabledString:
globalFlapWithIDEnabledString:
isFlapEnabled:
isFlapIDEnabled:
showSharedFlaps

  initialization
  backgroundColorForMorphicProject
backgroundColorForMvcProject
defaultBackgroundColor
initMorphic
initialExtent
initialProject
initialize
installNewDisplay:depth:
installPasteUpAsWorld:
setChangeSet:
setProjectHolder:
setServer
windowActiveOnFirstClick
windowReqNewLabel:

  isolated changes
 

  isolation layers
  beIsolated
compileAll:from:
compileAllIsolated:from:
invoke
invokeFrom:
isIsolated
isolationHead
isolationSet
layersToTop
propagateChanges
revoke

  language
  chooseNaturalLanguage
naturalLanguage
setNaturalLanguageTo:
stringForLanguageNameIs:

  menu messages
  assureNavigatorPresenceMatchesPreference
doWeWantToRename
enter
enter:
enter:revert:saveForRevert:
enterAsActiveSubprojectWithin:
enterForEmergencyRecovery
exit
fileOut
finalEnterActions
finalExitActions
installProjectPreferences
makeThumbnail
navigatorFlapVisible
saveProjectPreferences
saveState
validateProjectNameIfOK:
viewLocFor:

  object fileIn
  convertToCurrentVersion:refStream:

  printing
  printOn:

  project parameters
  currentStack
initializeProjectParameters
initializeProjectPreferences
noteThatParameter:justChangedTo:
parameterAt:
parameterAt:ifAbsent:
projectParameterAt:
projectParameterAt:ifAbsent:
projectParameterAt:ifAbsentPut:
projectParameterAt:put:
projectParameters
projectPreferenceAt:
projectPreferenceAt:ifAbsent:
projectPreferenceFlagDictionary
rawParameters
removeParameter:

  release
  addDependent:
canDiscardEdits
deletingProject:
okToChange
release
removeChangeSetIfPossible
subProjects

  resources
  abortResourceLoading
resourceDirectoryName
resourceManager
resourceManager:
resourceUrl
startResourceLoading
storeResourceList:in:

class methods
  as yet unclassified
  rebuildAllProjects

  class initialization
  initialize

  constants
  current

  instance creation
  new
newMorphic
newMorphicOn:
uiProcess

  squeaklet on server
  enterIfThereOrFind:
fromUrl:
isBadNameForStoring:
loaderUrl
mostRecent:onServer:
namedUrl:
openBlankProjectNamed:
parseProjectFileName:
projectExtension
serverDirectoryFromURL:
serverFileFromURL:
spawnNewProcessIfThisIsUI:
squeakletDirectory
sweep:

  utilities
  addItem:toMenu:selection:
addItem:toMenu:selection:project:
addingProject:
advanceToNextProject
allMorphicProjects
allNames
allNamesAndProjects
allProjects
buildJumpToMenu:
canWeLoadAProjectNow
chooseNaturalLanguage
deletingProject:
enter:
forget:
interruptName:
jumpToProject
jumpToSelection:
maybeForkInterrupt
named:
named:in:
ofWorld:
projectHierarchy
resumeProcess:
returnToPreviousProject
showProjectHierarchyInWindow
spawnNewProcess
spawnNewProcessAndTerminateOld:
storeAllInSegments
topProject
versionForFileName:

instance methods
  OBSOLETE top  
 

obsolete


  SuperSwiki top  
 

tellAFriend


 

tellAFriend:


Project current tellAFriend


  accessing top  
 

addGuard:

Add the given object to the list of objects receiving #okayToEnterProject on Project entry


 

addSubProjectNamesTo:indentation:

Add the names of the receiver and all its subprojects, and all *their* subprojects recursively, to aStream, indenting by the specified number of tab stops


 

changeSet


 

currentStack:

Set the current stack as indicated; if the parameter supplied is nil, delete any prior memory of the CurrentStack


 

displayDepth:


 

environment


 

findProjectView:

In this world, find the morph that holds onto the project described by projectDescription. projectDescription can be a project, or the name of a project. The project may be represented by a DiskProxy. The holder morph may be at any depth in the world.
Need to fix this if Projects have subclasses, or if a class other than ProjectViewMorph can officially hold onto a project. (Buttons, links, etc)
If parent is an MVC world, return the ProjectController.


 

forgetExistingURL


 

isCurrentProject


 

isMorphic

Complexity is because #isMVC is lazily installed


 

isTopProject

Return true only if this is the top project (its own parent).
Also include the test here for malformed project hierarchy.


 

labelString


 

lastDirectory:


 

lastSavedAtSeconds


 

name

Answer a name for the receiver. This is used generically in the title of certain inspectors, such as the referred-to inspector, and specificially by various subsystems. By default, we let the object just print itself out..


 

nextProject


 

parent


 

previousProject


 

projectChangeSet


 

renameTo:


 

setParent:


 

setThumbnail:


 

setViewSize:


 

storeNewPrimaryURL:


 

thumbnail


 

urlList


 

viewSize


 

world


  displaying top  
 

createViewIfAppropriate


 

displayZoom:

Show the project transition when entering a new project


 

imageForm


 

imageFormOfSize:depth:


 

showZoom

Decide if user wants a zoom transition, and if there is enough memory to do it.


  file in/out top  
 

armsLengthCommand:withDescription:

Set things up so that this aCommand is sent to self as a message
after jumping to the parentProject. For things that can't be executed
while in this project, such as saveAs, loadFromServer, storeOnServer. See
ProjectViewMorph step.


 

assureIntegerVersion

For converting the project versions


 

beep

Make a beep sound. Every object would like to be able to speak. 6/10/96 sw


 

bumpVersion:

Make a new version after the previous version number


 

compressFilesIn:to:in:resources:

Compress all the files in tempDir making up a zip file in localDirectory named localName


 

couldBeSwappedOut


 

currentVersionNumber


 

decideAboutCreatingBlank:

20 Oct - just do it


 

doArmsLengthCommand:

We are no longer the active project, so do it


 

downloadUrl

^(self primaryServerIfNil: [^'']) downloadUrl


 

ensureChangeSetNameUnique


 

exportSegmentFileName:directory:

An experimental version to fileout a changeSet first so that a project can contain its own classes


 

exportSegmentWithCatagories:classes:fileName:directory:

Store my project out on the disk as an *exported* ImageSegment. All outPointers will be in a form that can be resolved in the target image. Name it <project name>.extSeg. What do we do about subProjects, especially if they are out as local image segments? Force them to come in?
Player classes are included automatically.


 

exportSegmentWithChangeSet:fileName:directory:

Store my project out on the disk as an *exported* ImageSegment. All outPointers will be in a form that can be resolved in the target image. Name it <project name>.extSeg. What do we do about subProjects, especially if they are out as local image segments? Force them to come in?
Player classes are included automatically.


 

findAFolderToLoadProjectFrom


 

findAFolderToStoreProjectIn

Alan wants something prettier with a default


 

fromMyServerLoad:

If a newer version of me is on the server, load it.


 

hasBadNameForStoring


 

htmlPagePrototype

Return the HTML page prototype


 

loadFromServer


 

loadFromServer:

If a newer version of me is on the server, load it.


 

objectForDataStream:

I am about to be written on an object file. Write a path to me in the other system instead.


 

primaryServer

Return my primary server, that is the one I was downloaded from or are about to be stored on.


 

primaryServerIfNil:

Return my primary server, that is the one I was downloaded from or are about to be stored on. If none is set execute the exception block


 

projectExtension


 

restoreReferences

I just came in from an exported segment. Take all my players that were in References, and reinstall them.


 

revert

Exit this project and do not save it. Warn user unless in dangerous projectRevertNoAsk mode. Exit to the parent project. Do a revert on a clone of the segment, to allow later reverts.


 

saveAs

Forget where stored before, and store. Will ask user where.


 

saveForRevert

Exit to the parent project. Do a GC. Save the project in a segment. Record the ImageSegment object as the revertToMe in Project parameters


 

serverList

Take my list of server URLs and return a list of ServerDirectories to write on.


 

squeakletDirectory


 

storeDataOn:

Write me out. All references to other projects are weak references. They only go out if they are written for another reason.


 

storeHtmlPageIn:

Prepare the HTML wrapper for the current project


 

storeOnServer

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeOnServerAssumingNameValid

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeOnServerInnards

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeOnServerShowProgressOn:forgetURL:

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeOnServerWithProgressInfo

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeOnServerWithProgressInfoOn:

Save to disk as an Export Segment. Then put that file on the server I came from, as a new version. Version is literal piece of file name. Mime encoded and http encoded.


 

storeSegment

Store my project out on the disk as an ImageSegment. Keep the outPointers in memory. Name it <project name>.seg. *** Caller must be holding (Project alInstances) to keep subprojects from going out. ***


 

storeSegmentNoFile

For testing. Make an ImageSegment. Keep the outPointers in memory. Also useful if you want to enumerate the objects in the segment afterwards (allObjectsDo:)


 

storeSomeSegment

Try all projects to see if any is ready to go out. Send at most three of them.
Previous one has to wait for a garbage collection before it can go out.


 

storeToMakeRoom

Write out enough projects to fulfill the space goals.
Include the size of the project about to come in.


 

tryToFindAServerWithMe


 

url

compose my url on the server


 

urlForLoading

compose a url that will load me in someone's browser


 

versionForFileName

Project current versionForFileName


 

versionFrom:

Store the version of the file I actually came from. My stored version was recorded before I knew the latest version number on the server!


 

versionedFileName

Project current versionedFileName


 

writeFileNamed:fromDirectory:toServer:


 

writeStackText:in:registerIn:

The user's text is very valuable. Write an extra file with just the text. It can be read in case the Project can't be opened.


  flaps support top  
 

assureFlapIntegrity

Make certain that the items on the disabled-global-flap list are actually global flaps, and if not, get rid of them. Also, old (and damaging) parameters that held references to actual disabled flaps are cleansed


 

cleanseDisabledGlobalFlapIDsList

Make certain that the items on the disabled-global-flap list are actually global flaps, and if not, get rid of them


 

enableDisableGlobalFlap:

For the benefit of pre-existing which-global-flap buttons from a design now left behind.


 

flapsSuppressed

Answer whether flaps are suppressed in this project


 

flapsSuppressed:

Make the setting of the flag that governs whether global flaps are suppressed in the project be as indicated and add or remove the actual flaps


 

globalFlapEnabledString:

Answer the string to be shown in a menu to represent the status of the givne flap regarding whether it it should be shown in this project.


 

globalFlapWithIDEnabledString:

Answer the string to be shown in a menu to represent the status of the given flap regarding whether it it should be shown in this project.


 

isFlapEnabled:

Answer whether the given flap tab is enabled in this project


 

isFlapIDEnabled:

Answer whether a flap of the given ID is enabled in this project


 

showSharedFlaps

Answer whether shared flaps are shown or suppressed in this project


  initialization top  
 

backgroundColorForMorphicProject


 

backgroundColorForMvcProject


 

defaultBackgroundColor

Answer the color to be used as the base window color for a window whose model is an object of the receiver's class


 

initMorphic

Written so that Morphic can still be removed. Note that #initialize is never actually called for a morphic project -- see the senders of this method.


 

initialExtent

Answer the desired extent for the receiver when a view on it is first opened on the screen.
5/22/96 sw: in the absence of any override, obtain from RealEstateAgent


 

initialProject


 

initialize

Initialize the project, seting the CurrentProject as my parentProject and initializing my project preferences from those of the CurrentProject


 

installNewDisplay:depth:

When entering a new project, install a new Display if necessary.


 

installPasteUpAsWorld:

(ProjectViewMorph newMorphicProjectOn: aPasteUpMorph) openInWorld.


 

setChangeSet:


 

setProjectHolder:


 

setServer

Mark me as a new project. See if a server is known, remember it.


 

windowActiveOnFirstClick

Return true if my window should be active on first click.


 

windowReqNewLabel:

My window's title has been edited.
Return true if this is OK, and override for further behavior.


  isolated changes top  

  isolation layers top  
 

beIsolated

Establish an isolation layer at this project.
This requires clearing the current changeSet or installing a new one.


 

compileAll:from:

Make sure that shadowed methods in isolation layers get recompiled.
Traversal is done elsewhere. This simply handles the current project.


 

compileAllIsolated:from:

Whenever a recompile is needed in a class, look in other isolated projects for saved methods and recompile them also.
At the time this method is called, the recompilation has already been done for the project now in force.


 

invoke

Install all methods changed here into method dictionaries.
Make my versions be the ones that will be called.


 

invokeFrom:

Revoke the changes in force for this project, and then invoke those in force for otherProject. This method shortens the process to the shortest path up then down through the isolation layers.


 

isIsolated


 

isolationHead

Go up the parent chain and find the nearest isolated project.


 

isolationSet

Return the changeSet for this isolation layer or nil


 

layersToTop

Return an OrderedCollection of all the projects that are isolation layers from this one up to the top of the project hierarchy, inclusive.


 

propagateChanges

Assert these changes in the next higher isolation layer of the system.


 

revoke

Take back all methods changed here.
Install the original method dictionaries and organizations.
The orignal method versions will now be the ones used.


  language top  
 

chooseNaturalLanguage

Put up a menu allowing the user to choose the natural language for the project


 

naturalLanguage

Answer the natural language for the project


 

setNaturalLanguageTo:

Set the project's natural language as indicated


 

stringForLanguageNameIs:

Answer a string for a menu determining whether the given symbol is the project's natural language


  menu messages top  
 

assureNavigatorPresenceMatchesPreference

Make sure that the current project conforms to the presence/absence of the navigator


 

doWeWantToRename


 

enter

Enter the new project


 

enter:


 

enter:revert:saveForRevert:

Install my ChangeSet, Transcript, and scheduled views as current globals. If returningFlag is true, we will return to the project from whence the current project was entered; don't change its previousProject link in this case.
If saveForRevert is true, save the ImageSegment of the project being left.
If revertFlag is true, make stubs for the world of the project being left.
If revertWithoutAsking is true in the project being left, then always revert.


 

enterAsActiveSubprojectWithin:

Install my ChangeSet, Transcript, and scheduled views as current globals.

If returningFlag is true, we will return to the project from whence the current project was entered; don't change its previousProject link in this case.
If saveForRevert is true, save the ImageSegment of the project being left.
If revertFlag is true, make stubs for the world of the project being left.
If revertWithoutAsking is true in the project being left, then always revert.


 

enterForEmergencyRecovery

This version of enter invokes an absolute minimum of mechanism.
An unrecoverable error has been detected in an isolated project.
It is assumed that the old changeSet has already been revoked.
No new process gets spawned here. This will happen in the debugger.


 

exit

Leave the current project and return to the project in which this one was created.


 

fileOut


 

finalEnterActions

Perform the final actions necessary as the receiver project is entered


 

finalExitActions


 

installProjectPreferences

Install the settings of all preferences presently held individually by projects in the receiver's projectPreferenceFlagDictionary


 

makeThumbnail

Make a thumbnail image of this project from the Display.


 

navigatorFlapVisible

Answer whether a Navigator flap is visible


 

saveProjectPreferences

Preserve the settings of all preferences presently held individually by projects in the receiver's projectPreferenceFlagDictionary


 

saveState

Save the current state in me prior to leaving this project


 

validateProjectNameIfOK:


 

viewLocFor:

Look for a view of the exitedProject, and return its center


  object fileIn top  
 

convertToCurrentVersion:refStream:

subclasses should implement if they wish to convert old instances to modern ones


  printing top  
 

printOn:

Append to the argument, aStream, a sequence of characters that
identifies the receiver.


  project parameters top  
 

currentStack

Answer the current stack of the current project. Called basically as a bail-out when we can't find the stack in the owner chain of a morph, probably because it is on a background that is not currently installed. This method will always return a stack that is in the world, or nil if no stack is found in the world. Of course it would be nice to have multiple stacks concurrently open in the same world, but at the moment that is problematical.


 

initializeProjectParameters

Initialize the project parameters.


 

initializeProjectPreferences

Initialize the project's preferences from currently-prevailing preferences that are currently being held in projects in this system


 

noteThatParameter:justChangedTo:

Provides a hook so that a user's toggling of a project parameter might precipitate some immediate action


 

parameterAt:


 

parameterAt:ifAbsent:


 

projectParameterAt:

Answer the project parameter stored at the given symbol, or nil if none


 

projectParameterAt:ifAbsent:

Answer the project parameter stored at the given symbol, or the result of evaluating the block


 

projectParameterAt:ifAbsentPut:

Return the project parameter setting at the given key. If there is no entry for this key in the Parameters dictionary, create one with the value of defaultValueBlock as its value


 

projectParameterAt:put:

Set the given project parameter to the given value


 

projectParameters


 

projectPreferenceAt:

Answer the project preference stored at the given symbol. If there is none in the local preference dictionary, it must be because it was only latterly declared to be a project-local preference, so obtain its initial value instead from the last-known global or default setting


 

projectPreferenceAt:ifAbsent:

Answer the project preference stored at the given symbol, or the result of evaluating the block


 

projectPreferenceFlagDictionary

Answer the dictionary that holds the project preferences, creating it if necessary


 

rawParameters


 

removeParameter:


  release top  
 

addDependent:

Projects do not keep track of their dependents, lest they point into other projects and thus foul up the tree structure for image segmentation.


 

canDiscardEdits

Don't regard a window of mine as one to be discarded as part of a 'closeUnchangedWindows' sweep


 

deletingProject:

Clear my previousProject link if it points at the given Project, which is being deleted.


 

okToChange

Answer whether the window in which the project is housed can be dismissed -- which is destructive. We never clobber a project without confirmation


 

release

Remove references to objects that may refer to the receiver. This message
should be overridden by subclasses with any cycles, in which case the
subclass should also include the expression super release.


 

removeChangeSetIfPossible


 

subProjects

Answer a list of all the subprojects of the receiver. This is nastily idiosyncratic.


  resources top  
 

abortResourceLoading

Abort loading resources


 

resourceDirectoryName

Project current resourceDirectoryName


 

resourceManager


 

resourceManager:


 

resourceUrl

compose my base url for resources on the server


 

startResourceLoading

Abort loading resources


 

storeResourceList:in:

Store a list of all used resources in the given directory. Used for maintenance.


class methods
  as yet unclassified top  
 

rebuildAllProjects

Project rebuildAllProjects


  class initialization top  
 

initialize

This is the Top Project.


  constants top  
 

current

Answer the project that is currently being used.


  instance creation top  
 

new

Answer a new instance of the receiver (which is a class) with no indexable variables. Fail if the class is indexable.


 

newMorphic

ProjectView open: Project newMorphic


 

newMorphicOn:


 

uiProcess


  squeaklet on server top  
 

enterIfThereOrFind:


 

fromUrl:

Load the project, and make a thumbnail to it in the current project. Replace the old one if necessary.
Project fromUrl: 'http://www.squeak.org/Squeak2.0/2.7segments/Squeak_Easy.pr.gz'.


 

isBadNameForStoring:

will the name of this project cause problems when stored on an arbitrary file system?


 

loaderUrl

Return a url that will allow to launch a project in a browser by composing a url like
<loaderURL>?<projectURL>


 

mostRecent:onServer:

Find the exact fileName of the most recent version of project with the stem name of projName. Names are of the form 'projName|mm.pr' where mm is a mime-encoded integer version number.
File names may or may not be HTTP escaped, %20 on the server.


 

namedUrl:

Return project if in, else nil


 

openBlankProjectNamed:


 

parseProjectFileName:

It was formerly possible to have periods in projct names and this messed up some parsing methods. Try to handle that more gracefully and allow for a change in scheme at a later time.
ar 10/11/2000: Switch to a different version encoding scheme. The new scheme is
baseName.NNN.ext
where NNN is at least three digits wide and encodes the version in a human readable form.
Examples:
Project parseProjectFileName: 'My Project.007.pr'.
Project parseProjectFileName: 'My.First.Project.042.prj'.
Project parseProjectFileName: 'My Project.123456.p r o j e c t'.
The 'dot' is determined on FileDirectory>>dot to compensate for platforms wishing to use something different from a period. Also allows parsing the former encoding of file using Base64 encoded versions of the form
Project parseProjectFileName: 'aa.bb.cc|AQ.ss'


 

projectExtension


 

serverDirectoryFromURL:


 

serverFileFromURL:


 

spawnNewProcessIfThisIsUI:


 

squeakletDirectory


 

sweep:

On the server, move all but the three most recent versions of each Squeaklet to a folder called 'older'


  utilities top  
 

addItem:toMenu:selection:


 

addItem:toMenu:selection:project:


 

addingProject:


 

advanceToNextProject


 

allMorphicProjects


 

allNames


 

allNamesAndProjects


 

allProjects


 

buildJumpToMenu:

Make the supplied menu offer a list of potential projects, consisting of:
* The previous-project chain
* The next project, if any
* The parent project, if any
* All projects, alphabetically


 

canWeLoadAProjectNow


 

chooseNaturalLanguage

Have the current project choose a new natural language


 

deletingProject:


 

enter:

Enter the project with the given name


 

forget:


 

interruptName:

Create a Notifier on the active scheduling process with the given label.


 

jumpToProject

Project jumpToProject


 

jumpToSelection:

Enter the project corresponding to this menu selection.


 

maybeForkInterrupt


 

named:

Answer the project with the given name, or nil if there is no project of that given name.


 

named:in:

Answer the project with the given name, or nil if there is no project of that given name.


 

ofWorld:

Find the project of a world.


 

projectHierarchy

Answer a string representing all the projects in the system in hierarchical order


 

resumeProcess:

Adopt aProcess as the project process -- probably because of proceeding from a debugger


 

returnToPreviousProject

Return to the project from which this project was entered. Do nothing if the current project has no link to its previous project.


 

showProjectHierarchyInWindow

Open a window that displays the project hierarchy


 

spawnNewProcess


 

spawnNewProcessAndTerminateOld:


 

storeAllInSegments

Write out all Projects in this Image.
Project storeAllInSegments.


 

topProject

Answer the top project. There is only one


 

versionForFileName:

Project versionForFileName: 7