Вверх ↑
Этот топик читают: Гость
Ответов: 2125
Рейтинг: 159
#1: 2008-10-28 12:32:40 ЛС | профиль | цитата
Это опять я со своим ООП.
Мне кажется в HiAsm нехватает сабжа.
На данный момент, динамический мультик - это коллекция одинаковых объектов с одинаковым интерфейсом (набором точек). Идея в том, чтобы иметь коллекцию разных объектов с одинаковым интерфейсом. Этого можно достичь, если позволить мультиэлементу иметь несколько разных схем (sdk в терминах редактора схем), переключаться между которыми можно было бы при помощи дополнительного набора закладок (появляющегося при заходе внутрь такого мультика). Имена и количество закладок (схем) определять списком строк в свойстве самого мультика. Эти же строки использовать при создании конкретного экземпляра посредством ##add, который считывал бы строку из потока (или индекс закладки).
Таким образом мы бы имели одну общую коллекцию разных объектов.

Возьмём такую задачу: простенький граф.редактор, в котором есть десяток разных типов объектов на поле, каждый из которых умеет выполнять десяток операций. Сейчас есть два варианта: засунуть все объекты в один динамический мульт, или сделать 10 разных мультов, по одному на каждый тип объекта. В обоих случаях не обойтись без десятка IndexToChannel с десятью выходами. В первом случае имеем огромный мульт, во втором - сложности с организацией перебора всех объектов, чтобы выполнить одну операцию для всех.

Новая фича в редакторе схем могла бы пригодиться и для нормального TabControl-а, который бы являлся родителем находящихся на нём элементов.

карма: 1

1
Голосовали:Antonio DieS
Ответов: 3514
Рейтинг: 184
#2: 2008-10-28 13:26:18 ЛС | профиль | цитата
Я мало что понял..
посредством ##add, который считывал бы строку из потока (или индекс закладки).

МТ?
карма: 0
0
Ответов: 2125
Рейтинг: 159
#3: 2008-10-28 15:22:12 ЛС | профиль | цитата
Ну представь, что у тебя есть несколько динамических мультиков, которые имеют абсолютно одинаковый набор точек, и тебе нужно выбрать один из них, или несколько, или все сразу, и вызвать одну и ту же точку для них. Гораздо удобнее, если они все были бы в одном мультике, но внутренность мультика для разных типов была бы разная.
карма: 1

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#4: 2008-10-28 15:33:09 ЛС | профиль | цитата
tsdima писал(а):
Гораздо удобнее, если они все были бы в одном мультике, но внутренность мультика для разных типов была бы разная

Да, это было бы очень удобно, а то мне пришлось заморочку применять, как ты писал
tsdima писал(а):
В первом случае имеем огромный мульт

в котором ну никак мне не удалось обойтись без
tsdima писал(а):
IndexToChannel с десятью выходами

внутри мульта для активации нужного куска схемы
И получилось, что грузится в память десять одинаковых здоровых мультов, внутри которых, в каждый момент времени при переборе, работает свой маленький кусочек схемы


карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2008-10-28 15:46:14 ЛС | профиль | цитата
такие правки внешне не очень сложные ведут к тому, что придется менять как минимум две вещи
1) формат SHA
2) интерфейс среды
3) кодогенератор

переключение между внутренними схемами была идея сделать чуть иначе(на первое время во всяком случае): есть список строк, в котором, как уже было сказано тут, содержаться имена всех наследников. И есть одно дополнительное св-во, которое определяет текущую выбранную схему. В остальном процесс работы с таким контейнером не отличается от того, что было раньше
карма: 27
0
Разработчик
Ответов: 26148
Рейтинг: 2126
#6: 2008-10-28 15:50:58 ЛС | профиль | цитата
Dilma писал(а):
что придется менять как минимум две вещи

А получилось, аж три.

Dilma писал(а):
И есть одно дополнительное св-во, которое определяет текущую выбранную схему

Желательно индексом из списка наследников. И хорошо бы отдельным компонентом, чтобы не нарушать совместимость с уже сделанным
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2008-10-28 15:58:23 ЛС | профиль | цитата
nesco писал(а):
Желательно индексом

почему индексом? именем из выпадающего списка
карма: 27
0
Ответов: 2125
Рейтинг: 159
#8: 2008-10-28 15:59:06 ЛС | профиль | цитата
1. формат SHA менять не надо, надо лишь иметь ввиду, что секций begin_sdk/end_sdk может быть несколько подряд
2. это понятно
3. и это тоже понятно, но достаточно лишь ввести ещё один параметр у elGetSDK, индекс схемы, а вызовы пока (до появления новой фичи) сделать со этим параметром =0

Кодогенератор, в принципе, сильно менять не надо будет. Надо будет сделать лишь генерацию всех схем, а в функции Create_hiMultiElementEx_XXXXXX добавить параметр dt:TData, передаваемый из ##add
карма: 1

0
Разработчик
Ответов: 26148
Рейтинг: 2126
#9: 2008-10-28 16:07:49 ЛС | профиль | цитата
Dilma писал(а):
почему индексом? именем из выпадающего списка

Хорошо, а как это представляется при динамическом выборе


------------ Дoбавленo:


Вот, например, в таком случае


Add(MainForm,2953706,70,119)
{
link(onCreate,15499137:doFor,[])
}
Add(MultiElementEx,7608438,203,133)
{
Mode=1
}
BEGIN_SDK
Add(EditMultiEx,13090791,21,21)
{
WorkCount=#5:##add|8:##select|
Width=398
Height=284
Point(##add)
Point(##select)
link(##select,8064901:doEvent,[(45,34)(45,69)])
}
Add(IndexToChanel,8064901,70,63)
{
Count=6
link(onEvent1,2370440:Method,[(135,69)(135,51)])
link(onEvent2,3946676:Method,[(135,76)(135,93)])
link(onEvent3,15441975:Method,[(135,83)(135,135)])
link(onEvent4,5607688:Method,[(135,90)(135,177)])
link(onEvent5,13036916:Method,[(135,97)(135,219)])
link(onEvent6,4674864:Method,[(135,104)(135,261)])
}
Add(PointHint,2370440,168,35)
{
Info=#8:Scheme_1|
}
Add(PointHint,3946676,168,77)
{
Info=#8:Scheme_2|
}
Add(PointHint,15441975,168,119)
{
Info=#8:Scheme_3|
}
Add(PointHint,5607688,168,161)
{
Info=#8:Scheme_4|
}
Add(PointHint,13036916,168,203)
{
Info=#8:Scheme_5|
}
Add(PointHint,4674864,168,245)
{
Info=#8:Scheme_6|
}
END_SDK
Add(For,15499137,140,133)
{
End=5
link(onEvent,7608438:##add,[])
}
карма: 22

0
Ответов: 2125
Рейтинг: 159
#10: 2008-10-28 16:19:39 ЛС | профиль | цитата
Dilma писал(а):
есть одно дополнительное св-во, которое определяет текущую выбранную схему

Схема определяется в момент создания экземпляра из параметра #add (либо имя схемы, либо индекс схемы), и в дальнейшем уже не меняется. Это же объект определённого типа! А выбор экземпляра останется как и полагается у динамического мультика ##select/##hselect.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#11: 2008-10-28 16:22:54 ЛС | профиль | цитата
tsdima писал(а):
1. формат SHA менять не надо, надо лишь иметь ввиду, что секций begin_sdk/end_sdk может быть несколько подряд

ага, а это не изменение формата называется

tsdima писал(а):
и это тоже понятно, но достаточно лишь ввести ещё один параметр у elGetSDK, индекс схемы, а вызовы пока (до появления новой фичи) сделать со этим параметром =0

нет, мне думается, что это будет все же новый набор методов. А по стандартному elGetSDK среда вернет первый экземпляр

nesco писал(а):
Хорошо, а как это представляется при динамическом выборе

так tsdima, сказал уже
tsdima писал(а):
использовать при создании конкретного экземпляра посредством ##add, который считывал бы строку из потока (или индекс закладки)

------------ Дoбавленo:

tsdima писал(а):
Схема определяется в момент создания экземпляра из параметра #add (либо имя схемы, либо индекс схемы), и в дальнейшем уже не меняется. Это же объект определённого типа! А выбор экземпляра останется как и полагается у динамического мультика ##select/##hselect.

я имел ввиду интерфейс в среде. Как - то же разработчик должен редактировать все это хозяйство.
карма: 27
0
Ответов: 2125
Рейтинг: 159
#12: 2008-10-28 16:27:36 ЛС | профиль | цитата
tsdima писал(а):
Как - то же разработчик должен редактировать все это хозяйство

Тут, мне кажется, закладки удобнее. По крайней мере не надо ходить "наверх/вниз", чтобы переключиться на другую схему этого набора. А дополнительное свойство может ввести в заблуждение.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#13: 2008-10-28 16:29:59 ЛС | профиль | цитата
а можно интерфейсно это представить и так
code_10425.txt

сначало попадаем на уровень выбора экземпляра схемы, а потом уже в саму схему
плюсы тут такие: легко и понятно как копировать экземпляры из одного контейнера в другой(да и вообще это представление более наглядно, чем простой список выбора)
минусы: получаем разрыв соединений в промежуточном контейнере
------------ Дoбавленo:

tsdima писал(а):
Тут, мне кажется, закладки удобнее.

и как это должно выглядеть?
карма: 27
0
файлы: 1code_10425.txt [1.2KB] [975]
Ответов: 2125
Рейтинг: 159
#14: 2008-10-28 16:44:25 ЛС | профиль | цитата
Dilma писал(а):
и как это должно выглядеть?

Есть же закладки с именами открытых проектов, сделать под ними ещё одну строку с закладками, которая появляется после входа внутрь такого мультика.
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#15: 2008-10-28 17:10:39 ЛС | профиль | цитата
вот так?

только при большом количестве экземпляров не понятно, где это все умещать
карма: 27
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)