Реализация табличных аттрибутов.

  • Автор темы Автор темы ssyabr
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

ssyabr

Участник
Топикстартер
Сообщения
48
Реакции
0
Возникло необходимость в реализации custom табличных аттрибутов. Около года назад мне удалось реализовать табличный аттрибут для колонки. У кого есть опыт работы с table attributes, знает, что единственное, что предоставляет Adobe для разработки, это ITableSuite и ITableCommands. Причем ITableCommands ориентирован только на работу с cell attributes, что подтверждается например отсутствием методов для очистки табличных, строковых и колоночных аттрибутов. Все комманды необходимо реализовывать самому... Ладно хрен с вами, нам не привыкать.
Как удалось выяснить, необходимо наследовать свои аттрибуты от kAttrBossReferencingBoss и реализовывать IID_ITABLEATTRREPORT. Идем дальше и находим kTableAttrBaseBoss. Вроде как все отлично, есть наследование и реализация IID_ITABLEATTRREPORT. Берем зверя за рога в качестве базового для наших аттрибутов. Получаем:

Код:
Class 
{
	kMyAttrBoss,
	kTableAttrBaseBoss,
	{
 	    IID_ITABLEATTRREALNUMBER, kTableAttrRowStrokeWeightImpl,
	},
}

Порядок, все работает даже, но при создании в DEBUGe получем неприятность в виде ASSERTa:
GenericTableAttrReport::GetDamageNotification() Unknown attribute
Фффак! Что можно сделать? Взять за базовый kAttrBossReferencingBoss и реализовывть самому IID_ITABLEATTRREPORT??? Вроде все ясно, методы все простые:
Код:
virtual void  AppendDescription (PMString &into, IDataBase *db) const =0 
virtual EAttributeType  GetType (void) const =0 
virtual int32  GetDamageNotification (void) const =0
Все затыкается в реализацию GetDamageNotification. Что возвращать? На что это влияет? Выбор в принуипе большой:
Код:
tan_geometry_first   
tan_geometry_last   
tan_bodyDraw   
tan_allDraw   
tan_bodyTopBottomInval   
tan_bodyTopBottomStroke   
tan_allTopBottomInval   
tan_allTopBottomStroke   
tan_allLeftRightInval   
tan_bodyStructure   
tan_allStructure   
tan_headerGeometry   
tan_footerGeometry   
tan_outerLeftDraw   
tan_outerLeftInval   
tan_outerLeftStroke   
tan_outerTopDraw   
tan_outerTopInval   
tan_outerTopStroke   
tan_outerRightDraw   
tan_outerRightInval   
tan_outerRightStroke   
tan_outerBottomDraw   
tan_outerBottomInval   
tan_outerBottomStroke   
tan_all

При реализации колоночного аттрибута, я возвращал просто can_structure. Какой смысл этой этого метода?

Вопрос Nr.2 : почему не получается сделать Process для kApplyColAttributesCmdBoss, а только Execute?

ЗЫ: читая programming :

kTableModelBoss aggregates ITableAttributes, which provides coarse-grained access to the
attribute list for a particular table. For instance, this allows client code to obtain a count of the
number of boss object in the attribute list, and to query for each boss object in the attribute list
by index. The implementation of this interface in the table model is really just a wrapper
around the AttributeBossList associated with a particular table model. It is not recommended
to use this interface to modify the attributes in the table model; use ITableSuite or ITableCommands
instead.

Рекомендуют настойчиво импользовать ITableCommands, как видно. Значит ли это, что возможно НОРМАЛЬНОЕ создание ТОЛЬКО custom cell attributes?
 
Первый вопрос закрыт

Остановился на варианте базового kAttrBossReferencingBoss и реализации IID_ITABLEATTRREPORT. GetDamageNotification возвращает просто 0. Жаль, что это не проходило в реализации cell аттрибута.
Также потребовалось дополнительно реализовать команду для очистки табличного аттрибута.
 
Статус
Закрыто для дальнейших ответов.