Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Не получается показать свои метки в TreeView
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
kuu kuu вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.08.2004
По умолчанию Не получается показать свои метки в TreeView - 30.09.2004, 20:27

Я инициализирую свой TreeView так:

Код:
parser := XML.XMLParser new.    
parser validate: false.
doc := parser parse: 'c:tempcommon.xml' asFilename.

self structureView list
    root: (doc root)
    displayIt: true
    childrenBlock: [:cls | cls children select: [:el | el isElement]].
Таким образом, объектами "веток" дерева являются XML.Node.

Однако, в качестве меток мне хочется показывать один из атрибутов элементов xml-документа. Для его получения нужно выполнить блок команд.

TreeView позволяет сделать следующее:

self structureView displayStringSelector: #tag.

То есть, задать название сообщения, которое будет пересылаться каждому объекту дерева для получения его имени. Но мне нужно задать блок команд, который будет "выдирать" имя.

Как это сделать, не меняя XML.Node и не конвертируя XML-дерево объектов в дерево своих объектов?
Ответить с цитированием
  (#2 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Re: Не получается показать свои метки в TreeView [VW] - 01.10.2004, 16:04

Цитата:
Originally posted by kuu
[b]Таким образом, объектами "веток" дерева являются XML.Node.

Однако, в качестве меток мне хочется показывать один из атрибутов элементов xml-документа. Для его получения нужно выполнить блок команд.

TreeView позволяет сделать следующее:

self structureView displayStringSelector: #tag.

То есть, задать название сообщения, которое будет пересылаться каждому объекту дерева для получения его имени. Но мне нужно задать блок команд, который будет "выдирать" имя.

Как это сделать, не меняя XML.Node и не конвертируя XML-дерево объектов в дерево своих объектов?
Без патченья хоть чего-то не обойтись.
Если не хочешь просто добавить метод в XML.Node (что делается легко, просто, и не мешает основной системе, его можно держать в отдельном пакете, я например у себя завйл пакет для патчей), то прийдётся поменять метод на:
Код:
TreeNodeWrapper>>displayString: displayMethodSelector 
    "Return the displayString of the receiver's value"

    ^displayMethodSelector isNil
  ifTrue: [object displayString]
  ifFalse: [displayMethodSelector isSymbol 
                            ifTrue:[object perform: displayMethodSelector] 
                            ifFalse: [displayMethodSelector value: object]]
Ответить с цитированием
  (#3 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию Re: Не получается показать свои метки в TreeView [VW] - 01.10.2004, 19:10

Цитата:
Originally posted by Andrei N.Sobchuck
[b]Без патченья хоть чего-то не обойтись.
А может и обойтись. У TreeView можно задать visualBlock:. Только вот с тем, что он за аргументы принимает и что выдаёт тебе нужно самому разобраться.
Ответить с цитированием
  (#4 (permalink)) Старый
kuu kuu вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.08.2004
По умолчанию 02.10.2004, 01:46

Не дожидаясь ответов, я всё-таки пропатчил XML.Node, добавив в него свойство printBlock и модифицировав метод printString, который вызывает printBlock, если тот не пуст.

Через visualBlock было бы правильнее, но только, как я понял, там надо плюсики и минусики рисовать самому, а это мне лениво.

Как выясняется, всё правильно сделал.
Ответить с цитированием
  (#5 (permalink)) Старый
Anonymous
Guest
 
Сообщений: n/a
По умолчанию 04.10.2004, 15:35

Цитата:
Originally posted by kuu
[b]Как выясняется, всё правильно сделал.
Угу. Только переопределять нужно #displayString. Переопределять #printString не нужно никогда, но если всё таки нужно , то
тогда переопределять нужно #printOn:

Правило такое #printString (переопределяется через #printOn: ) используется для отладки. #displyString (переопределяется через #displayString) - на пользовательском уровне, для отображения объекта.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
kuu kuu вне форума
Member
 
Сообщений: 14
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.08.2004
По умолчанию 04.10.2004, 18:56

Окей, спасибо за комментарий. Я точно знаю, что переопределил тот метод, который вызывается TreeView для получения отображения объекта в строку. Уж не вызывает ли он #printString для этого?
Ответить с цитированием
  (#7 (permalink)) Старый
Alex Baran Alex Baran вне форума
Member
 
Сообщений: 44
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.05.2004
По умолчанию 08.10.2004, 13:59

Код:
Object>>displayString
    "Allows any Object to be used as the basis for a Label, although the 
    purpose of displayString is to provide something more suitable than 
    printString, primarily for use in SequenceViews."

    ^self printString
displayString Используют для отображения пользователю, а printString чтобы когда дебаг делаеш объект в удобном виде показывался.
Для переопеределения printString, как уже говорил Андрей, перекрывается метод printOn:.
Для того чтобы изменить displayString перекрываеш displayString
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
на графике показать точки уравнения Наталька Pascal 0 26.05.2011 10:37
Как записать Memo в TreeView что бы в TreeView был перенос строк zettambov C++ Builder 4 02.04.2007 09:44
TChart как получить нормальные метки по Х impressionist C++ Builder 6 12.03.2007 14:12
Метки как с ними работать Alter Pascal 5 26.12.2005 22:28
Как программно показать Hint Ex Delphi 5 06.12.2005 11:40
Есть файл Form.rtf в нем надо заменить метки на их значение Sniczar Visual C++ 0 23.06.2005 12:32
Как сделать метки в 51-ом на keil Regbist Assembler 0 30.05.2005 14:55
Показать JPG в TImage без файла Vlad2 C++ Builder 2 30.05.2005 10:18
Как показать русские буквы в приложении Виноград С/С++ 1 26.04.2005 13:13
Как доказать свои права yureckor Мысли вслух 8 04.09.2004 09:16
Как показать Contents Reticent Visual C++ 0 23.07.2004 12:11
Привязка процедуры изменения поля caption метки с помощью random Templar C++ Builder 2 13.10.2003 17:38



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов