[squeak-dev] The Inbox: Tools-fbs.488.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Jul 16 21:07:14 UTC 2013
A new version of Tools was added to project The Inbox:
http://source.squeak.org/inbox/Tools-fbs.488.mcz
==================== Summary ====================
Name: Tools-fbs.488
Author: fbs
Time: 16 July 2013, 10:06:56.902 pm
UUID: e1137155-1820-e948-b2b4-de2ae3dd0c4c
Ancestors: Tools-fbs.487
An initial stab at reimplementing ArchiveViewer's UI using ToolBuilder. It should all just work, but the lack of lining data up in columns is a serious UI concern.
The existing UI uses a monospaced font and spaces to achieve this. ToolBuilder doesn't allow for the setting of fonts (as far as I can tell). And really, what we want it a PluggableTableSpec.
=============== Diff against Tools-fbs.487 ===============
Item was added:
+ ----- Method: ArchiveViewer class>>morphicOpen (in category 'instance creation') -----
+ morphicOpen
+ ^(self new) createWindow; openInWorld.!
Item was added:
+ ----- Method: ArchiveViewer class>>morphicOpenOn: (in category 'instance creation') -----
+ morphicOpenOn: aFileName
+ | newMe |
+ newMe := self new.
+ newMe createWindow; fileName: aFileName; openInWorld.
+ ^newMe!
Item was changed:
----- Method: ArchiveViewer class>>open (in category 'instance creation') -----
open
+ ^ToolBuilder open: self new.!
- ^(self new) createWindow; openInWorld.!
Item was changed:
----- Method: ArchiveViewer class>>openOn: (in category 'instance creation') -----
openOn: aFileName
| newMe |
+ newMe := self new fileName: aFileName; yourself.
+ ^ ToolBuilder open: (newMe buildWith: ToolBuilder default) label: aFileName.!
- newMe := self new.
- newMe createWindow; fileName: aFileName; openInWorld.
- ^newMe!
Item was added:
+ ----- Method: ArchiveViewer>>buildButtonBar: (in category 'toolbuilder') -----
+ buildButtonBar: builder
+ | panelSpec |
+ panelSpec := builder pluggablePanelSpec new
+ layout: #horizontal;
+ children: OrderedCollection new;
+ frame: self buttonsFrame;
+ yourself.
+
+ #(('new' #canCreateNewArchive #createNewArchive 'Create a new, empty archive and discard this one')
+ ('load' #canOpenNewArchive #openNewArchive 'Open another archive and discard this one')
+ ('save' #canSaveArchive #saveArchive 'Save this archive under a new name')
+ ('extract' #canExtractAll #extractAll 'Extract all members into a directory')
+ ('add' #canAddMember #addMember 'Add a file')
+ ('add from clipboard' #canAddMember #addMemberFromClipboard 'Add the contents of the clipboard as a new file')
+ ('add dir' #canAddMember #addDirectory 'Add a directory full of files')
+ ('extract it' #canExtractMember #extractMember 'Extract selected member to a file')
+ ('delete it' #canDeleteMember #deleteMember 'Remove selected member from archive')
+ ('rename it' #canRenameMember #renameMember 'Rename selected member')
+ ('view all' #canViewAllContents #changeViewAllContents 'Toggle the view of all the selected member''s contents')) do: [:arr | | buttonSpec |
+ buttonSpec := builder pluggableButtonSpec new
+ model: self;
+ label: arr first;
+ state: arr second;
+ action: arr third;
+ help: arr fourth
+ yourself.
+ panelSpec children addLast: buttonSpec].
+ ^ panelSpec!
Item was added:
+ ----- Method: ArchiveViewer>>buildMemberTitle: (in category 'toolbuilder') -----
+ buildMemberTitle: builder
+ | textSpec |
+ textSpec := builder pluggableTextSpec new
+ model: self;
+ getText: #headerContents;
+ yourself.
+ ^ textSpec.!
Item was added:
+ ----- Method: ArchiveViewer>>buildMemberViewer: (in category 'toolbuilder') -----
+ buildMemberViewer: builder
+ | listSpec |
+ listSpec := builder pluggableListSpec new
+ model: self;
+ list: #memberList;
+ getIndex: #memberIndex;
+ setIndex: #memberIndex:;
+ menu: #memberMenu:shifted:;
+ yourself.
+ ^ listSpec!
Item was added:
+ ----- Method: ArchiveViewer>>buildPreviewer: (in category 'toolbuilder') -----
+ buildPreviewer: builder
+ | textSpec |
+ textSpec := builder pluggableCodePaneSpec new
+ model: self;
+ getText: #briefContents;
+ yourself.
+ ^ textSpec!
Item was added:
+ ----- Method: ArchiveViewer>>buildWindowWith: (in category 'toolbuilder') -----
+ buildWindowWith: builder
+ | windowSpec |
+ windowSpec := builder pluggableWindowSpec new.
+ windowSpec model: self.
+ windowSpec label: #labelString.
+ windowSpec children: OrderedCollection new.
+ ^windowSpec!
Item was added:
+ ----- Method: ArchiveViewer>>buildWindowWith:specs: (in category 'toolbuilder') -----
+ buildWindowWith: builder specs: specs
+ | windowSpec |
+ windowSpec := self buildWindowWith: builder.
+ specs do: [:assoc| | rect action widgetSpec |
+ rect := assoc key.
+ action := assoc value.
+ widgetSpec := action value.
+ widgetSpec ifNotNil: [
+ widgetSpec frame: rect.
+ windowSpec children add: widgetSpec]].
+ ^ windowSpec!
Item was added:
+ ----- Method: ArchiveViewer>>buildWith: (in category 'toolbuilder') -----
+ buildWith: builder
+ | windowSpec |
+ windowSpec := self buildWindowWith: builder specs: {
+ (0 at 0 corner: 1 at 0.1) -> [self buildButtonBar: builder].
+ (0 at 0.1 corner: 1 at 0.2) -> [self buildMemberTitle: builder].
+ (0 at 0.2 corner: 1 at 0.75) -> [self buildMemberViewer: builder].
+ (0 at 0.75 corner: 1 at 1) -> [self buildPreviewer: builder].
+ }.
+ ^ windowSpec.!
Item was added:
+ ----- Method: ArchiveViewer>>buttonHeight (in category 'toolbuilder') -----
+ buttonHeight
+ ^Preferences standardButtonFont height + 12!
Item was added:
+ ----- Method: ArchiveViewer>>buttonsFrame (in category 'toolbuilder') -----
+ buttonsFrame
+ ^LayoutFrame new
+ leftFraction: 0 offset: 0;
+ topFraction: 0 offset: 0;
+ rightFraction: 1 offset: 0;
+ bottomFraction: 0 offset: self buttonHeight!
Item was changed:
+ ----- Method: ArchiveViewer>>contents (in category 'accessing') -----
- ----- Method: ArchiveViewer>>contents (in category 'initialization') -----
contents
| contents errorMessage |
self selectedMember ifNil: [^ ''].
viewAllContents ifFalse: [^ self briefContents].
[ contents := self selectedMember contents ]
on: CRCError
do: [ :ex | errorMessage := String streamContents: [ :stream |
stream nextPutAll: '********** WARNING!! Member is corrupt!! [ ';
nextPutAll: (ex messageText copyUpToLast: $( );
nextPutAll: '] **********'; cr ].
ex proceed ].
^self selectedMember isCorrupt
ifFalse: [ contents ]
ifTrue: [ errorMessage, contents ]!
Item was changed:
+ ----- Method: ArchiveViewer>>contents: (in category 'accessing') -----
- ----- Method: ArchiveViewer>>contents: (in category 'initialization') -----
contents: aText
self shouldNotImplement.!
Item was changed:
+ ----- Method: ArchiveViewer>>createButtonBar (in category 'old morphic ui') -----
- ----- Method: ArchiveViewer>>createButtonBar (in category 'initialization') -----
createButtonBar
| bar narrowFont registeredFonts |
registeredFonts := OrderedCollection new.
TextStyle knownTextStylesWithoutDefault do:
[:st | (TextStyle named: st) fonts do: [:f | registeredFonts addLast: f]].
narrowFont := registeredFonts detectMin:
[:ea | ea widthOfString: 'Contents' from: 1 to: 8].
bar := AlignmentMorph newRow.
bar
color: self defaultBackgroundColor;
rubberBandCells: false;
vResizing: #shrinkWrap;
cellInset: 6 @ 0.
#(#('New\Archive' #canCreateNewArchive #createNewArchive 'Create a new, empty archive and discard this one') #('Load\Archive' #canOpenNewArchive #openNewArchive 'Open another archive and discard this one') #('Save\Archive As' #canSaveArchive #saveArchive 'Save this archive under a new name') #('Extract\All' #canExtractAll #extractAll 'Extract all this archive''s members into a directory') #('Add\File' #canAddMember #addMember 'Add a file to this archive') #('Add from\Clipboard' #canAddMember #addMemberFromClipboard 'Add the contents of the clipboard as a new file') #('Add\Directory' #canAddMember #addDirectory 'Add the entire contents of a directory, with all of its subdirectories') #('Extract\Member As' #canExtractMember #extractMember 'Extract the selected member to a file') #('Delete\Member' #canDeleteMember #deleteMember 'Remove the selected member from this archive') #('Rename\Member' #canRenameMember #renameMember 'Rename the selected member') #('View All\Contents' #canViewAllContents #changeViewAllContents 'Toggle the view of all the selected member''s contents'))
do:
[:arr |
| buttonLabel button |
buttonLabel := (TextMorph new)
string: arr first withCRs
fontName: narrowFont familyName
size: narrowFont pointSize
wrap: false;
hResizing: #shrinkWrap;
lock;
yourself.
(button := PluggableButtonMorph
on: self
getState: arr second
action: arr third)
vResizing: #shrinkWrap;
hResizing: #spaceFill;
onColor: self buttonOnColor offColor: self buttonOffColor;
label: buttonLabel;
setBalloonText: arr fourth.
bar addMorphBack: button.
buttonLabel composeToBounds].
^bar!
Item was changed:
+ ----- Method: ArchiveViewer>>createListHeadingUsingFont: (in category 'old morphic ui') -----
- ----- Method: ArchiveViewer>>createListHeadingUsingFont: (in category 'initialization') -----
createListHeadingUsingFont: font
| sm |
sm := StringMorph contents: ' order uncomp comp CRC-32 date time file name'.
font ifNotNil: [ sm font: font ].
^(AlignmentMorph newColumn)
color: self defaultBackgroundColor;
addMorph: sm;
yourself.!
Item was changed:
+ ----- Method: ArchiveViewer>>createWindow (in category 'old morphic ui') -----
- ----- Method: ArchiveViewer>>createWindow (in category 'initialization') -----
createWindow
| list heading font text buttonBar |
font := (TextStyle named: #DefaultFixedTextStyle)
ifNotNil: [ :ts | ts fontArray first].
buttonBar := self createButtonBar.
self addMorph: buttonBar
fullFrame: (LayoutFrame fractions: (0 at 0 corner: 1.0 at 0.0) offsets: (0 at 0 corner: 0 at 44)).
self minimumExtent: (buttonBar fullBounds width + 20) @ 230.
self extent: self minimumExtent.
heading := self createListHeadingUsingFont: font.
self addMorph: heading
fullFrame: (LayoutFrame fractions: (0 at 0 corner: 1.0 at 0.0) offsets: (0 at 44 corner: 0 at 60)).
(list := PluggableListMorph new)
on: self list: #memberList
selected: #memberIndex changeSelected: #memberIndex:
menu: #memberMenu:shifted: keystroke: nil.
list color: self defaultBackgroundColor.
font ifNotNil: [list font: font].
self addMorph: list
fullFrame: (LayoutFrame fractions: (0 at 0 corner: 1.0 at 0.8) offsets: (0 at 60 corner: 0 at 0)).
text := PluggableTextMorph on: self
text: #contents accept: nil
readSelection: nil menu: nil.
self addMorph: text
frame: (0 at 0.8 corner: 1.0 at 1.0).
text lock.
self setLabel: 'Ned''s Zip Viewer'!
Item was changed:
+ ----- Method: ArchiveViewer>>fileName: (in category 'accessing') -----
- ----- Method: ArchiveViewer>>fileName: (in category 'initialization') -----
fileName: aString
archive := ZipArchive new readFrom: aString.
+ self labelString: aString.
- self setLabel: aString.
self memberIndex: 0.
self changed: #memberList!
Item was added:
+ ----- Method: ArchiveViewer>>headerContents (in category 'private') -----
+ headerContents
+ ^ ' order uncomp comp CRC-32 date time file name'.!
Item was changed:
----- Method: ArchiveViewer>>initialize (in category 'initialization') -----
initialize
super initialize.
+ self labelString: 'New archive'.
memberIndex := 0.
viewAllContents := false.
!
Item was added:
+ ----- Method: ArchiveViewer>>labelString (in category 'accessing') -----
+ labelString
+ ^ labelString!
Item was added:
+ ----- Method: ArchiveViewer>>labelString: (in category 'private') -----
+ labelString: aString
+ labelString := aString.!
Item was changed:
----- Method: ArchiveViewer>>openNewArchive (in category 'archive operations') -----
openNewArchive
| result |
+ "result := FileList2 modalFileSelector ."
+ result := FileChooser new open.
- result := FileList2 modalFileSelector .
result ifNil: [ ^self ].
self fileName: (result directory fullNameFor: result name).
!
More information about the Squeak-dev
mailing list
|