SASGIS - SAS.Планета
View Issue Details
0000137SAS.Планета[All Projects] Хотелкаpublic05-10-2010 15:2324-04-2011 18:25
gpsMax 
vdemidov 
normalminorhave not tried
closedfixed 
100707 
101206101206 
0000137: Вложенные категории
А сильно сложно сделать категории многоуровневыми? Чтобы можно было вкладывать их одна в другую.

Окно "управление метками" чуть доработать для этого, добавить стандартные плюсики-минусики в левую часть. Постарался примерно набросать предполагаемый вид

По категориям еще есть хотелка http://sasgis.org/mantis/view.php?id=55 , но там чуть другое
категории
related to 0000055assigned vasketsov SACS.Планета Присвоение точкам нескольких категорий, атрибуты меток и категорий 
has duplicate 0000878closed gpsMax SAS.Планета Подкатегории меток 
has duplicate 0000948closed vdemidov SAS.Планета Изменение структуры "Управление метками" 
related to 0000304resolved zed SAS.Планета Импорт меток из файлов marks.sml и categorymarks.sml 
related to 0000917resolved vdemidov SAS.Планета Изменение видимости дочерних категорий 
png sas_multicategories.png (31,226) 05-10-2010 15:23
http://bugtracker.sasgis.org/file_download.php?file_id=32&type=bug
png
Issue History
05-10-2010 15:23gpsMaxNew Issue
05-10-2010 15:23gpsMaxFile Added: sas_multicategories.png
06-10-2010 06:42TikhNote Added: 0000262
06-10-2010 07:29vdemidovNote Added: 0000263
06-10-2010 18:25gpsMaxNote Added: 0000266
07-10-2010 04:44TikhNote Added: 0000268
07-10-2010 05:09TikhNote Edited: 0000268bug_revision_view_page.php?bugnote_id=268#r87
07-10-2010 05:25vdemidovNote Added: 0000272
07-10-2010 05:25vdemidovAssigned To => vdemidov
07-10-2010 05:25vdemidovStatusnew => feedback
07-10-2010 08:05gpsMaxNote Added: 0000278
07-10-2010 08:05gpsMaxStatusfeedback => assigned
07-10-2010 08:06gpsMaxNote Edited: 0000278bug_revision_view_page.php?bugnote_id=278#r89
07-10-2010 08:20vdemidovNote Added: 0000279
07-10-2010 08:20vdemidovAssigned Tovdemidov =>
07-10-2010 08:20vdemidovStatusassigned => acknowledged
07-10-2010 08:21vdemidovTarget Version => 26xxxx
12-10-2010 18:20gpsMaxNote Added: 0000313
13-10-2010 05:08vdemidovNote Added: 0000316
13-10-2010 11:10gpsMaxNote Added: 0000328
13-10-2010 11:10gpsMaxNote Edited: 0000328bug_revision_view_page.php?bugnote_id=328#r110
13-10-2010 11:30vdemidovNote Added: 0000330
07-11-2010 19:36gpsMaxTag Attached: категории
10-03-2011 09:29vdemidovStatusacknowledged => resolved
10-03-2011 09:29vdemidovFixed in Version => 101206
10-03-2011 09:29vdemidovResolutionopen => fixed
10-03-2011 09:29vdemidovAssigned To => vdemidov
10-03-2011 09:29vdemidovTarget Version26xxxx => 101206
06-04-2011 15:28gpsMaxRelationship addedrelated to 0000055
07-04-2011 02:53gpsMaxRelationship addedrelated to 0000304
24-04-2011 18:25TolikStatusresolved => closed
21-07-2011 15:54gpsMaxRelationship addedrelated to 0000878
21-07-2011 15:58gpsMaxRelationship replacedhas duplicate 0000878
18-08-2011 04:09gpsMaxRelationship addedrelated to 0000917
29-08-2011 03:59gpsMaxRelationship addedhas duplicate 0000948

Notes
(0000262)
Tikh   
06-10-2010 06:42   
Я предлагаю для этой цели переделать организацию хранения меток в программе.

Категории и подкатегории - это папки. Метки - это файлы, одна метка - один файл.

Структура категорий и меток в программе определяется структурой папок и файлов на диске в папке для хранения меток САС.Планеты.
(0000263)
vdemidov   
06-10-2010 07:29   
Где задавать видимость отдельных категорий и диапазон зумов для отображения?
(0000266)
gpsMax   
06-10-2010 18:25   
Наверное, там же, где он сейчас задаётся. В sml файле/файлах, думаю. В интерфейсе - теми же галками и кнопками. Единственно, что если в категории часть объектов видима, а часть нет, то при её сворачивании, отображении одной строкой, галку надо ставить полузатемненную. Всё как обычно, как в стандартных виндовых интерфейсах.

Или я не так понял вопрос?
(0000268)
Tikh   
07-10-2010 04:44   
(edited on: 07-10-2010 05:09)
>Где задавать видимость отдельных категорий и диапазон зумов для отображения?

Если вопрос был мне, про моё предложение реорганизовать хранение меток, то я предлагаю хранить видимость и диапазон зумов в файле, который лежит в папке категории. Пустой файл с именем вида: "visible-8-24", или "invisible-8-12".
Это позволит управлять изменением видмости категорий с помощью внешних утилит или даже .bat файлов - путём консольной команды переименования.

Также, организация хранения меток в отдельных файлах позволит сразу же решить две проблемы, добавить две важные возможности, которые сейчас в SAS.Планете не реализованы и затруднена внешняя реализация:
1) Совместная работа в локальной сети
2) Разграничение доступа пользователям к разным категориям меток

Поясню:

1) Сейчас - кто первый встал, того и тапки. Первый запустивший в локальной сети SAS.Планету, блокирует на запись .sml файлы с метками и остальные не могут что-либо отредактировать, у них для чтения, пока первый пользователь не выйдет.
Если одна метка - один файл, то тогда все метки не блокируются, свободны для изменения, файл с меткой блокируется только на время открытия окна редактирования и до нажатия на кнопку "сохранить", которая производит запись изменений в конкретный файл.
Это позволит сразу многим пользователям в сети работать с SAS.Планетой, свободно создавать и редактировать метки.

2) Разграничение доступа к меткам. Сейчас нет никакой возможности ограничить некоторым людям доступ к определённой категории меток, а очень нужно. В SAS.Планете реализовать такой функционал - это трудоёмкий процесс и дополнительная задача для разработчиков.
Если же метки будут храниться в отдельных файлах и папках, то проблема отпадает сама собой - доступ распределяется средствами сетевого администрирования, администрирования пользователей Windows, доменных политик ЛВС и т.д.
То есть задача полностью ложится на системного администратора локальной сети, а для него настроить доступ пользователей к папкам и файлам не составит проблем.
Т.е. относительно небольшими усилиями на изменение в программе добавляется значительный функционал.

(0000272)
vdemidov   
07-10-2010 05:25   
Ладно. Забудем на секунду о способе хранения меток и категорий. Опишите более подробно как должны влиять галочка видимости и диапазон зумов родительской категории на метки дочерних категорий.
(0000278)
gpsMax   
07-10-2010 08:05   
(edited on: 07-10-2010 08:06)
Тут есть два подхода. Можно считать (и реализовать в программе), что настройки категорий независимы друг от друга. А можно сделать стандартное виндовое поведение галок, которое можно "в природе" наблюдать многими способами, из которых в голову приходят, например, выбор вложенными галками компонентов программ в инсталляторах.

С первым подходом всё просто, изменение в любой категории ни на что более не влияет. А второй попробую описать поподробнее.

Для примера, возьмём, что есть категория с именем "1", являющаяся родительской, и есть категория "2", дочерняя, вложенная в родительскую.

1. Галочка видимости
Вначале, обе категории невидимы (надо же с чего-то начинать). Тыкаем в галку у двойки. У единицы появляется полупрозрачная галка, то есть какие-то члены категории видимы, а какие-то нет. Итого получается, что все члены категории 1 невидимы, за исключением входящих в 2.

Тыкаем в галку у двойки еще раз, снимая её. Поскольку у единицы сейчас все вложенные объекты стали невидимыми, то её галка исчезает. Смотрим на этот эффект и снова взводим двойку. Итого - то же самое, что было абзацем ранее.

Тыкаем теперь в единицу - это команда "снять/поставить галку и все дочерние". Получается либо обе галки стоят, либо обе сняты. Останавливаемся на стоящих.

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

2. Диапазон зумов
Тут всё несколько посложнее бинарной логики предыдущего пункта. Я предлагаю пойти проверенным путем и сделать логику майкрософтовской же модели, реализованной в файловой системе NTFS и в службе каталогов Active Directory. Всё очень просто:

1)Каждый нижележащий объект наследует настройки прав предыдущего, если установлена галка "наследовать". Если не установлена, то не наследует.
2)Каждый вышележащий объект может принудительно сбросить настройки прав нижележащих объектов, несмотря на галку из пункта 1, заменив их своими.

С этой моделью можно поиграться как на NTFS'ном разделе, создав папки и меняя у них права, так и на виндовом сервере с AD, случайно оказавшемся под рукой - всё точно так же, только чуть меняются имена галок.

Возвращаясь к нашим настройкам уровней видимости: каждой категории, помимо значений зума, потребуются две галки: что-нибудь типа "Наследовать родительские" и "Сбросить дочерние". Может показаться, что это майкрософтовское масштабирование здесь слишком сложно и громоздко, но на самом деле как раз без любой из этих галок будет немного неудобно.

Как работает: меняем уровни зума у категории с установленной галкой "Сбросить дочерние" - одновременно меняются и дочерние. Если же стоит галка "Наследовать родительские", то менять ничего не получится и для изменений надо лезть в родительскую папку.

(0000279)
vdemidov   
07-10-2010 08:20   
Ну что ж, учитывая, что второй подход требует изменения в структуре данных, чего я делать не хочу, то будет первый подход. Тоесть настройки категории влияют только на точки принадлежащие непосредственно самой категории и не влияют на видимость объектов во вложенных категориях.
(0000313)
gpsMax   
12-10-2010 18:20   
Настройки видимости изменений в структуре данных не потребуют. Тупо галки. Это с диапазоном зумов без изменений трудно обойтись, а галки видимости переделки sml не потребуют.
(0000316)
vdemidov   
13-10-2010 05:08   
Потребуют, в вашем предложении у галки должно быть три состояния Включена, Выключена и Унаследована, а в структуре забит булевский тип, у которого только 2 значения. Так что увы и ах, но не в ближайшие годы.
(0000328)
gpsMax   
13-10-2010 11:10   
Я предлагал немного не так. Типа два - включена/выключена. Но при включении/выключении галки одновременно с этим включаются/выключаются галки для всех вложенных категорий. Вложенность же определяется динамически, из структуры категорий, а не из файла данных в готовом виде, поэтому менять его не потребуется.

Тупо рекурсия: при включении/выключении галки пробегаем по вложенным категориям и применяем эту же операцию на них.

(0000330)
vdemidov   
13-10-2010 11:30   
Хорошая идея. Спасибо.