[Chandler-dev] (Solved) Multiline text field not correctly
displayed
Ernesto Rivera
rivera.ernesto at gmail.com
Thu Aug 10 09:21:48 PDT 2006
stretchFactor=1.0 worked
=o)
detail.makeArea(
parcel, "RawVCardArea",
baseClass=RawVCardAreaBlock, # this makes the area
conditionally visible
childrenBlocks=[
detail.makeEditor(
parcel, 'RawVCard',
viewAttribute=u'rawVCard',
presentationStyle={
'lineStyleEnum': 'MultiLine',
'format': 'contactRawVCardField'
},
)
],
stretchFactor = 1.0, # prevents multiline text area
from being squeezed
position=0.951
).install(parcel),
Le 10 août 06 à 17:43, Bryan Stearns a écrit :
> Ernesto,
>
> Ah, I think I see what's happening. Thanks for the explanation
> about your attribute editor - that part sounds like everything's
> right.
>
> I think the problem has to do with the extra block layer between
> the root of the detail view and your raw text area's block: you've
> got:
>
> DetailRoot # the root of the detail view
> RawVCardArea # DetailSynchronizedContentItemDetail subclass
> that controls visibility
> RawVCard # DetailSynchronizedAttributeEditorBlock that ends
> up hosting your custom AE.
>
> It might work better if it's:
>
> DetailRoot # the root of the detail view
> RawVCardAEBlock # DetailSynchronizedAttributeEditorBlock that
> controls visibility _and_ hosts your custom AE
>
> As an example, in Detail.py, the Appears In field's block is
> subclassed this way to control its visibility without an extra layer.
>
> (I don't know why it's not working the way you have it - there
> ought to be a way to lay it out with the extra level, but I don't
> have time right now to dig into that - sizing can be a time sink! -
> and since I don't think you're getting extra benefit from the extra
> layer anyway, I'm suggesting you remove it.)
>
> The height=200 in your makeEditor call might work if you do this,
> or might not; if it doesn't, try it without it or with
> stretchFactor=1.0 instead (which should mean that your text area
> and the Notes body split any left-over space).
>
> ...Bryan
>
>
> Ernesto Rivera wrote:
>>
>>
>>
>>> The makeEditor function makes an AEBlock, a block that hosts an
>>> attribute editor. Attribute editors are picked at runtime based
>>> on the type of the value in the configured attribute; in your
>>> case, you're telling it to edit the 'rawVCard' attribute. I don't
>>> know what the declared type of the 'rawVCard' attribute is, but
>>> I'm guessing it's schema.Text, like ContentItem's 'body'.
>>
>> Yes, it's a schema.Text
>>
>>>
>>> The picking mechanism also uses the presentationStyle.format
>>> attribute, if present, to influence the picking process. You're
>>> saying that the format is 'contactRawVCardField', so it's going
>>> to look first for an attribute editor registered to handle 'Text
>>> +contactRawVCardField'. I'm assuming that you didn't write a
>>> custom attribute editor, so it's not going to find one - it will
>>> fall back and look for one for just 'Text', and will find
>>> StringAttributeEditor (which is what gets used for the Note body
>>> as well).
>>
>> I actually wrote. I needed my own attribute editor to ensure sync
>> of the raw vCard field with the other "user friendly" contact
>> fields. For this I wrote:
>>
>> class ContactRawVCardAE(StringAttributeEditor):
>>
>> def GetAttributeValue(self, item, attributeName):
>> ...
>>
>> def SetAttributeValue(self, item, attributeName, valueString):
>> ...
>>
>> and I registered the custom editor with:
>>
>> def registerAttributeEditors(parcel, oldVersion=None):
>>
>> aeDict = {
>> 'Text+contactRawVCardField': 'ContactRawVCardAE'
>> }
>> AttributeEditorMapping.register(parcel, aeDict, __name__)
>>
>> And this works nicely. The custom AE is a subclass of the string
>> editor, so I think for many calls the string editor's methods will
>> be used.
>>
>> Note: I had this "squeeze" problem even before creating a custom
>> editor.
>>
>>
>>>
>>> StringAttributeEditor should do the right thing and build a
>>> multiline text area since you've given it that lineStyleEnum
>>> 'MultiLine' value. I'm not sure why it's not, or what you mean by
>>> "it works if the block is moved outside childrenBlocks" - where
>>> are you moving it to that it's still appearing?
>>
>> Yes, if I have the makeEditor block a root component of the blocks
>> three it displays correctly. If I move it inside a makeArea
>> Sublock it then gets squeezed.
>>
>> block three -> makeEditor: works displaying multilines
>>
>> block three-> makeArea-> makeEditor: the editor gets squeezed to a
>> single line with a very little scroll bar.
>>
>> The note's item content is not enclosed in a block area, thus
>> displays correctly...
>>
>>>
>>> (If you did write a custom attribute editor that you've
>>> registered to handle Text+contactRawVCardField, it'd need the
>>> same logic in its createControl method as StringAttributeEditor
>>> has - you can see that it's a matter of passing a different style
>>> value to the control being created. I'm not saying you _should_
>>> create a custom attribute editor, especially right before your
>>> demo -- I'm just trying to explain what happens if you have.)
>>>
>>> I wouldn't be surprised if specifying the height didn't work at
>>> all, no matter where you say "height=...". Our only use case for
>>> the multiline editor is for the note body, to have it take up
>>> "the rest of the space" (that is, they stretch to take up the
>>> rest of the detail view after all the smaller fields are laid
>>> out. I think the certificate detail view shows more than one
>>> multiline text field, and they all share that space - you might
>>> ask Heikki about that.
>>>
>>> ...Bryan
>>
>>
>> Thanks,
>>
>>
>> Ernesto
>>
>>
>>
>>
>>>
>>> Ernesto Rivera wrote:
>>>>
>>>> Hi,
>>>>
>>>> I am doing some last changes to contacts' code before tomorrow's
>>>> presentations.
>>>>
>>>> I have this annoying issue with this 'RawVCard' that is
>>>> displayed "squeezed" as text field instead of a text area
>>>> (multiline text):
>>>>
>>>> contactPersonRootBlocks = [...
>>>>
>>>> detail.makeArea(
>>>> parcel, "RawVCardArea",
>>>> baseClass=RawVCardAreaBlock, # this makes the area
>>>> conditionally visible
>>>> height = 200, # <-- didn't expanded the detail
>>>> area either
>>>> childrenBlocks=[
>>>> detail.makeEditor( # displays as a text field
>>>> instead of as a text area
>>>> parcel, 'RawVCard',
>>>> viewAttribute=u'rawVCard',
>>>> presentationStyle={
>>>> 'lineStyleEnum': 'MultiLine', #<-- this
>>>> works the block is moved outside childrenBlocks
>>>> 'format': 'contactRawVCardField'
>>>> },
>>>> height = 200 # doesn't seem to work
>>>> )
>>>> ],
>>>> position=0.951
>>>> ).install(parcel),
>>>>
>>>>
>>>> The problem occurs on both alpha2 and 3. Also the the field
>>>> displays correctly when outside the detail.makeArea, so the
>>>> issue is only for text areas declared as childrenBlocks.
>>>>
>>>> Any ideas?
>>>>
>>>> Thanks,
>>>>
>>>>
>>>> Ernesto
>>>>
>>>>
>>>>
>>>>
>>>> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>>>>
>>>> Open Source Applications Foundation "chandler-dev" mailing list
>>>> http://lists.osafoundation.org/mailman/listinfo/chandler-dev
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osafoundation.org/pipermail/chandler-dev/attachments/20060810/5b5909dd/attachment.htm
More information about the chandler-dev
mailing list