Возникло необходимость в реализации custom табличных аттрибутов. Около года назад мне удалось реализовать табличный аттрибут для колонки. У кого есть опыт работы с table attributes, знает, что единственное, что предоставляет Adobe для разработки, это ITableSuite и ITableCommands. Причем ITableCommands ориентирован только на работу с cell attributes, что подтверждается например отсутствием методов для очистки табличных, строковых и колоночных аттрибутов. Все комманды необходимо реализовывать самому... Ладно хрен с вами, нам не привыкать.
Как удалось выяснить, необходимо наследовать свои аттрибуты от kAttrBossReferencingBoss и реализовывать IID_ITABLEATTRREPORT. Идем дальше и находим kTableAttrBaseBoss. Вроде как все отлично, есть наследование и реализация IID_ITABLEATTRREPORT. Берем зверя за рога в качестве базового для наших аттрибутов. Получаем:
Порядок, все работает даже, но при создании в DEBUGe получем неприятность в виде ASSERTa:
GenericTableAttrReport::GetDamageNotification() Unknown attribute
Фффак! Что можно сделать? Взять за базовый kAttrBossReferencingBoss и реализовывть самому IID_ITABLEATTRREPORT??? Вроде все ясно, методы все простые:
Все затыкается в реализацию GetDamageNotification. Что возвращать? На что это влияет? Выбор в принуипе большой:
При реализации колоночного аттрибута, я возвращал просто 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. Идем дальше и находим 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
Код:
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?