[ENH] Celeste status line + category overflow indication

Daniel Vainsencher danielv at netvision.net.il
Wed Apr 26 18:23:34 UTC 2000


Previous enhancement prevented Celeste from showing all messages in large 
categories, but did this silently. This version shows "showing [200/4115] 
messages in category." in a status line.

BTW, I'm working on getting Celeste to handle MIME attachments it receives.
Anyone here will use find this useful?
if so, any comment?

Any comments about the MIME functionality already in squeak? Lex? 
I noticed MIME in many places other than Mail, which was a surprise.

Daniel
-------------- next part --------------
'From Squeak2.8alpha of 12 February 2000 [latest update: #2040] on 26 April 2000 at 9:10:28 pm'!
Model subclass: #Celeste
	instanceVariableNames: 'mailDB currentCategory currentMessages currentTOC currentMsgID lastCategory subjectFilter fromFilter dateFilter customFilterBlock formatMessages lastCategoryList lastCategoryMenu messageTextView userPassword status '
	classVariableNames: 'CCList CustomFilters DeleteInboxAfterFetching FormatWhenFetching PopServer PopUserName SmtpServer SuppressWorthlessHeaderFields UserName '
	poolDictionaries: ''
	category: 'Network-Mail Reader'!

!Celeste methodsFor: 'categories pane' stamp: 'dvf 4/26/2000 21:06'!
messages: actuallyShown from: possible 
	status _ 'showing [' , actuallyShown printString , '/' , possible printString , '] messages in category.'.
	self changed: status! !

!Celeste methodsFor: 'categories pane' stamp: 'dvf 4/26/2000 21:08'!
setCategory: newCategory 
	"Change the currently selected category. We must also compute the table  
	               of contents and message list for the new category."
	| messageCount |
	currentCategory _ newCategory.
	newCategory isNil
		ifTrue: [status _ currentMessages _ currentTOC _ currentMsgID _ nil]
		ifFalse: 
			[currentMessages _ self filteredMessagesIn: newCategory.
			messageCount _ currentMessages size.
			messageCount > self maxMessageCount
				ifTrue: 
					[self messages: self maxMessageCount from: messageCount.
					currentMessages _ currentMessages copyLast: self maxMessageCount]
				ifFalse: [self messages: messageCount from: messageCount].
			self updateToc].
	self changed: #category.
	self changed: #tocEntryList.
	self changed: #tocEntry.
	self changed: #messageText.
	self changed: #status! !

!Celeste methodsFor: 'categories pane' stamp: 'dvf 4/26/2000 21:07'!
viewAllMessages
	currentMessages _ self filteredMessagesIn: self category.
	self messages: currentMessages size from:  currentMessages size .
	self updateToc.
	self changed: #tocEntryList.
	self changed: #tocEntry.
	self changed: #messageText.! !

!Celeste methodsFor: 'other' stamp: 'dvf 4/26/2000 20:58'!
status
	^ status! !


!Celeste class methodsFor: 'instance creation' stamp: 'dvf 4/26/2000 20:57'!
buildViewsFor: model 
	"Answer a collection of window panes for the Celeste user interface."
	| listViewClass textViewClass listFont views v |
	Smalltalk isMorphic
		ifTrue: 
			[listViewClass _ PluggableListMorphByItem.
			textViewClass _ PluggableTextMorph]
		ifFalse: 
			[listViewClass _ PluggableListViewByItem.
			textViewClass _ PluggableTextView].
	listFont _ StrikeFont allSubInstances
				detect: [:f | (f name beginsWith: 'CourierFixed')
						and: [f height = 11]]
				ifNone: [TextStyle defaultFont].
	views _ OrderedCollection new.
	v _ listViewClass
				on: model
				list: #categoryList
				selected: #category
				changeSelected: #setCategory:
				menu: #categoryMenu:
				keystroke: #categoriesKeystroke:.
	views add: v.
	v _ listViewClass
				on: model
				list: #tocEntryList
				selected: #tocEntry
				changeSelected: #setTOCEntry:
				menu: #tocMenu:
				keystroke: #tocKeystroke:.
	v font: listFont.
	views add: v.
	v _ textViewClass new
				on: model
				text: #messageText
				accept: #messageText:
				readSelection: nil
				menu: #messageMenu:shifted:.
	v borderWidth: 1.
	model messageTextView: v.
	views add: v.
	v _ textViewClass new
				on: model
				text: #status
				accept: nil
				readSelection: nil
				menu: nil.
	v borderWidth: 1.
	model messageTextView: v.
	views add: v.
	^ views! !

!Celeste class methodsFor: 'instance creation' stamp: 'dvf 4/26/2000 20:35'!
openOnDatabase: aMailDB 
	"Open a MailReader on the given mail database."
	| model views buttons topWindow |
	model _ self new openOnDatabase: aMailDB.
	views _ self buildViewsFor: model.
	buttons _ self buildButtonsFor: model.
	Smalltalk isMorphic
		ifTrue: 
			[topWindow _ (SystemWindow labelled: 'Celeste')
						model: model.
			topWindow addMorph: (buttons at: 1)
				frame: (0.0 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 2)
				frame: (0.125 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 3)
				frame: (0.25 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 4)
				frame: (0.375 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 5)
				frame: (0.5 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 6)
				frame: (0.625 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 7)
				frame: (0.75 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (buttons at: 8)
				frame: (0.875 @ 0.0 extent: 0.125 @ 0.05).
			topWindow addMorph: (views at: 1)
				frame: (0.0 @ 0.05 extent: 0.2 @ 0.25).
			topWindow addMorph: (views at: 2)
				frame: (0.2 @ 0.05 extent: 0.8 @ 0.25).
			topWindow addMorph: (views at: 3)
				frame: (0.0 @ 0.3 extent: 1.0 @ 0.65).
			topWindow addMorph: (views at: 4)
				frame: (0.0 @ 0.95 extent: 1.0 @ 0.05).
			buttons do: [:b | b onColor: Color lightGray offColor: Color white].
			topWindow openInWorld]
		ifFalse: 
			[topWindow _ StandardSystemView new model: model;
					 label: 'Celeste';
					 minimumSize: 400 @ 250.
			(views at: 1)
				window: (0 @ 0 extent: 20 @ 25).
			(views at: 2)
				window: (0 @ 0 extent: 80 @ 25).
			(views at: 3)
				window: (0 @ 0 extent: 100 @ 70).
			(buttons at: 1)
				window: (0 @ 0 extent: 12 @ 5).
			(buttons at: 2)
				window: (0 @ 0 extent: 12 @ 5).
			(buttons at: 3)
				window: (0 @ 0 extent: 12 @ 5).
			(buttons at: 4)
				window: (0 @ 0 extent: 10 @ 5).
			(buttons at: 5)
				window: (0 @ 0 extent: 13 @ 5).
			(buttons at: 6)
				window: (0 @ 0 extent: 13 @ 5).
			(buttons at: 7)
				window: (0 @ 0 extent: 15 @ 5).
			(buttons at: 8)
				window: (0 @ 0 extent: 13 @ 5).
			topWindow addSubView: (buttons at: 1);
			 addSubView: (buttons at: 2)
				toRightOf: (buttons at: 1);
			 addSubView: (buttons at: 3)
				toRightOf: (buttons at: 2);
			 addSubView: (buttons at: 4)
				toRightOf: (buttons at: 3);
			 addSubView: (buttons at: 5)
				toRightOf: (buttons at: 4);
			 addSubView: (buttons at: 6)
				toRightOf: (buttons at: 5);
			 addSubView: (buttons at: 7)
				toRightOf: (buttons at: 6);
			 addSubView: (buttons at: 8)
				toRightOf: (buttons at: 7);
			 addSubView: (views at: 1)
				below: (buttons at: 1);
			 addSubView: (views at: 2)
				toRightOf: (views at: 1);
			 addSubView: (views at: 3)
				below: (views at: 1).
			topWindow controller open]! !



More information about the Squeak-dev mailing list