SASGIS - SAS.Планета
View Issue Details
0000917SAS.Планета[All Projects] Хотелкаpublic17-08-2011 05:4607-01-2013 10:04
sheavy 
vdemidov 
normaltweakalways
resolvedfixed 
WindowsXPSP3
110427.Beta 
131111131111 
0000917: Изменение видимости дочерних категорий
См. Скриншот: если снять галочку видимости с главной категории, метка, принадлежащая вложеной подкатегории останеться видимой. Кажется, было бы логично и интуитивно понятно, что если убирается галочка на главной категории, что она должна сниматься и со всех подчиненных. Иначе приходиться пробегаться по всем вложенным категориям. Чекбокс "Все" здесь тоже не помогает, т.к. сбрасывает флаг Visible и в других категориях, которых достаточно много.
См. Скриншот:
Аналогично сделано во многих программах, где требуется сканирование диска (антивирусы, восстановители удаленных файлов и т.п.)

Понятно, что на самом деле вложенности в Category.sml нет и нужно улучшать обработчих кнопки "ОК" и "Применить" или делать новый чекбокс рядом с чекбоксом "Все" (менее предпочтительно)
sml, категории
related to 0000137closed vdemidov Вложенные категории 
related to 0000919closed vdemidov Порядок создания главных и вложенных категорий влияет на их отображение в окне "Управление метками" 
jpg 2011-08-17_092532.jpg (28,459) 17-08-2011 05:46
http://www.sasgis.org/mantis/file_download.php?file_id=415&type=bug
jpg
Issue History
17-08-2011 05:46sheavyNew Issue
17-08-2011 05:46sheavyFile Added: 2011-08-17_092532.jpg
17-08-2011 06:29TolikNote Added: 0003478
17-08-2011 07:28sheavyNote Added: 0003484
17-08-2011 07:31sheavyNote Added: 0003485
17-08-2011 07:39sheavyNote Added: 0003487
17-08-2011 07:40sheavyNote Deleted: 0003484
17-08-2011 07:40sheavyNote Deleted: 0003485
17-08-2011 07:40sheavyNote Edited: 0003487bug_revision_view_page.php?rev_id=1747
17-08-2011 07:41sheavyNote Edited: 0003487bug_revision_view_page.php?rev_id=1748
17-08-2011 07:41sheavyNote Edited: 0003487bug_revision_view_page.php?rev_id=1749
17-08-2011 07:42TolikNote Added: 0003488
17-08-2011 07:42sheavyNote Edited: 0003487bug_revision_view_page.php?rev_id=1750
17-08-2011 07:42TolikFile Added: Cat.GIF
17-08-2011 07:44sheavyNote Added: 0003489
17-08-2011 07:44sheavyNote Deleted: 0003489
17-08-2011 07:46sheavyNote Added: 0003490
17-08-2011 07:51sheavyNote Edited: 0003490bug_revision_view_page.php?rev_id=1752
17-08-2011 07:52sheavyNote Edited: 0003490bug_revision_view_page.php?rev_id=1753
17-08-2011 07:52sheavyNote Edited: 0003490bug_revision_view_page.php?rev_id=1754
17-08-2011 07:53FetserNote Added: 0003491
17-08-2011 07:55TolikNote Added: 0003493
17-08-2011 07:59TolikStatusnew => acknowledged
17-08-2011 08:07vdemidovNote Added: 0003494
17-08-2011 09:26vdemidovFile Deleted: Cat.GIF
17-08-2011 09:26vdemidovNote Deleted: 0003494
17-08-2011 09:27vdemidovNote Deleted: 0003493
17-08-2011 09:27vdemidovNote Deleted: 0003491
17-08-2011 09:27vdemidovNote Deleted: 0003490
17-08-2011 09:27vdemidovNote Deleted: 0003488
17-08-2011 09:27vdemidovNote Deleted: 0003487
17-08-2011 09:27vdemidovNote Deleted: 0003478
17-08-2011 09:28sheavyTag Attached: категории
17-08-2011 09:28sheavyTag Attached: sml
17-08-2011 09:29vdemidovTarget Version => 40xxxx
17-08-2011 09:29vdemidovSummaryОпределение приоритета видимости категорий => Изменение видимости дочерних категорий
17-08-2011 09:29vdemidovStatusacknowledged => confirmed
17-08-2011 09:29vdemidovProduct Version => 110427.Beta
18-08-2011 04:09gpsMaxRelationship addedrelated to 0000137
18-08-2011 04:11gpsMaxNote Added: 0003513
18-08-2011 04:15gpsMaxRelationship addedrelated to 0000919
19-08-2011 07:18zOnNote Added: 0003547
19-08-2011 07:51TolikNote Added: 0003555
19-08-2011 07:54zOnNote Added: 0003556
02-01-2013 05:43FedNote Added: 0010290
02-01-2013 05:45FedNote Edited: 0010290bug_revision_view_page.php?bugnote_id=10290#r5043
02-01-2013 05:45FedNote Edited: 0010290bug_revision_view_page.php?bugnote_id=10290#r5044
02-01-2013 06:12FedNote Edited: 0010290bug_revision_view_page.php?bugnote_id=10290#r5045
02-01-2013 06:49vdemidovNote Added: 0010292
02-01-2013 06:58FedNote Added: 0010293
02-01-2013 07:19vdemidovNote Added: 0010294
02-01-2013 10:21FedNote Added: 0010295
02-01-2013 10:24FedNote Edited: 0010295bug_revision_view_page.php?rev_id=5047
02-01-2013 10:28vdemidovNote Added: 0010296
02-01-2013 10:34FedNote Edited: 0010295bug_revision_view_page.php?rev_id=5048
02-01-2013 10:45FedFile Added: Bitbucket_Import.jpg
02-01-2013 10:52FedNote Added: 0010297
02-01-2013 10:55FedNote Edited: 0010297bug_revision_view_page.php?rev_id=5050
02-01-2013 10:56FetserFile Added: 1.jpg
02-01-2013 10:57FetserNote Added: 0010298
02-01-2013 11:04FedNote Added: 0010299
02-01-2013 11:05FetserNote Added: 0010300
02-01-2013 11:07FetserNote Edited: 0010300bug_revision_view_page.php?rev_id=5052
02-01-2013 11:17FedNote Added: 0010301
02-01-2013 11:17vdemidovNote Added: 0010302
02-01-2013 11:21vdemidovNote Added: 0010303
02-01-2013 11:27FetserNote Deleted: 0010298
02-01-2013 11:28FetserNote Deleted: 0010300
02-01-2013 12:36FedNote Added: 0010304
02-01-2013 12:56FetserNote Added: 0010305
02-01-2013 13:02zedNote Added: 0010306
02-01-2013 18:04vdemidovNote Deleted: 0010305
02-01-2013 18:04vdemidovNote Deleted: 0010304
02-01-2013 18:04vdemidovNote Deleted: 0010303
02-01-2013 18:04vdemidovNote Deleted: 0010302
02-01-2013 18:04vdemidovNote Deleted: 0010301
02-01-2013 18:04vdemidovNote Deleted: 0010299
02-01-2013 18:05vdemidovNote Deleted: 0010297
02-01-2013 18:05vdemidovNote Deleted: 0010296
02-01-2013 18:05vdemidovNote Deleted: 0010295
02-01-2013 18:05vdemidovNote Deleted: 0010294
02-01-2013 18:05vdemidovNote Deleted: 0010293
02-01-2013 18:05vdemidovNote Deleted: 0010292
02-01-2013 18:06vdemidovNote Deleted: 0010306
05-01-2013 10:28GarlNote Added: 0010327
05-01-2013 11:59vdemidovNote Added: 0010329
06-01-2013 20:36FedNote Added: 0010347
06-01-2013 21:07vdemidovNote Added: 0010348
06-01-2013 22:38FedNote Added: 0010349
07-01-2013 04:10FedNote Edited: 0010349bug_revision_view_page.php?rev_id=5064
07-01-2013 05:19FedNote Deleted: 0010349
07-01-2013 05:30FedNote Added: 0010350
07-01-2013 09:27FedNote Edited: 0010290bug_revision_view_page.php?bugnote_id=10290#r5067
07-01-2013 10:03vdemidovNote Added: 0010351
07-01-2013 10:04vdemidovNote Added: 0010352
07-01-2013 10:04vdemidovStatusconfirmed => resolved
07-01-2013 10:04vdemidovFixed in Version => 131111
07-01-2013 10:04vdemidovResolutionopen => fixed
07-01-2013 10:04vdemidovAssigned To => vdemidov
07-01-2013 10:04vdemidovTarget Version40xxxx => 131111
07-01-2013 10:04vdemidovFile Deleted: 1.jpg
07-01-2013 10:04vdemidovFile Deleted: Bitbucket_Import.jpg

Notes
(0003513)
gpsMax   
18-08-2011 04:11   
Да, надо было давно это вынести отдельным тикетом, спасибо.

Из 137-й хотелки:
Типа [галки] два - включена/выключена. Но при включении/выключении галки одновременно с этим включаются/выключаются галки для всех вложенных категорий. Вложенность же определяется динамически, из структуры категорий, а не из файла данных в готовом виде, поэтому менять его не потребуется.

Тупо рекурсия: при включении/выключении галки пробегаем по вложенным категориям и применяем эту же операцию на них.
(0003547)
zOn   
19-08-2011 07:18   
Не стал создавать отдельный баг, т.к. это видимо взаимосвязано:
если поставить курсор на подкатегорию и нажать - удалить, то удалится и категория и подкатегория.
(0003555)
Tolik   
19-08-2011 07:51   
только если в этой категории нет других подкатегорий.
(0003556)
zOn   
19-08-2011 07:54   
да. забыл сказать.
(0010290)
Fed   
02-01-2013 05:43   
(edited on: 07-01-2013 09:27)
Решил эту задачу переделав в frm_MarksExplorer.pas 2 процедуры CategoryTreeViewKeyUp и CategoryTreeViewMouseUp и добавив новую CategoryTreeViewVisible:

----------------------
Процедура TfrmMarksExplorer.CategoryTreeViewVisible:
procedure TfrmMarksExplorer.CategoryTreeViewVisible(Node: TTreeNode);
var
  VCategoryOld: IMarkCategory;
  VCategoryNew: IMarkCategory;
  VTreeNode: TTreeNode;
  VVisible: Boolean;
  VIndex,VLevel,VNum: Integer;
begin
  VCategoryOld := IMarkCategory(Node.Data);
  if VCategoryOld <> nil then begin
    // VVisible, VIndex - для визуализации узлов.
    if Node.StateIndex=1 then begin
      VVisible := False;
      VIndex:=2;
    end else begin
      VVisible := True;
      VIndex:=1;
    end;
    // Изменение значения Visible текущего узла категории меток
    VCategoryNew := FMarkDBGUI.MarksDb.CategoryDB.Factory.ModifyVisible(VCategoryOld, VVisible);
    Node.StateIndex:=VIndex;
    if not VCategoryOld.IsEqual(VCategoryNew) then begin
      FMarkDBGUI.MarksDb.CategoryDB.UpdateCategory(VCategoryOld, VCategoryNew);
    end;
    // Изменение значения Visible дочерних узла категории меток
    // CheckBox3 включает/выклучает функцию каскадной визуализации.
    if CheckBox3.Checked then begin
      // VLevel - уровень глубины узла. VNum - номер узла изменения видимости.
      CategoryTreeView.Visible := False;
      VLevel:=Node.Level;
      // Цикл продолжается пока не перейдём на новую ветвь (пока уровень глубины узлов не станет как наша)
      // Или до конца ветвей
      for VNum:=Node.AbsoluteIndex+1 to CategoryTreeView.Items.Count - 1 do
        if CategoryTreeView.Items[VNum].Level>VLevel then begin
          VTreeNode := CategoryTreeView.Items[VNum];
          VCategoryOld := IMarkCategory(VTreeNode.Data);
          if VCategoryOld <> nil then begin
            VCategoryNew := FMarkDBGUI.MarksDb.CategoryDB.Factory.ModifyVisible(VCategoryOld, VVisible);
            VTreeNode.StateIndex:=VIndex;
            if not VCategoryOld.IsEqual(VCategoryNew) then begin
              FMarkDBGUI.MarksDb.CategoryDB.UpdateCategory(VCategoryOld, VCategoryNew);
            end;
          end;
        end else break; // Прерываем цикл так, как уровень глубины узлов стал как наш или выше.
      CategoryTreeView.Visible := True;
    end;
  end;
end;

----------------------
Процедура TfrmMarksExplorer.CategoryTreeViewKeyUp:
procedure TfrmMarksExplorer.CategoryTreeViewKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  VCategoryOld: IMarkCategory;
  VCategoryNew: IMarkCategory;
begin
  If key=VK_DELETE then begin
    VCategoryOld := GetSelectedCategory;
    if VCategoryOld <> nil then begin
      FMarkDBGUI.DeleteCategoryModal(VCategoryOld, Self.Handle);
    end;
  end;

  if Key=VK_SPACE then
    CategoryTreeViewVisible(CategoryTreeView.Selected);
end;

----------------------
Процедура TfrmMarksExplorer.CategoryTreeViewMouseUp:
procedure TfrmMarksExplorer.CategoryTreeViewMouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  VCategoryOld: IMarkCategory;
  VCategoryNew: IMarkCategory;
  VTreeNode: TTreeNode;
begin
  if htOnStateIcon in CategoryTreeView.GetHitTestInfoAt(X,Y) then
    CategoryTreeViewVisible(CategoryTreeView.GetNodeAt(X,Y));
 end;
----------------------

(0010327)
Garl   
05-01-2013 10:28   
проверил, по логике и работе - всё ок!
добавлять вышеуказанный код в исходник?
(0010329)
vdemidov   
05-01-2013 11:59   
>добавлять вышеуказанный код в исходник?
Ну я бы дал автору кода еще пару попыток сделать чистый пул реквест, который будет принят.
(0010347)
Fed   
06-01-2013 20:36   
>>добавлять вышеуказанный код в исходник?
>Ну я бы дал автору кода еще пару попыток сделать чистый пул реквест, который будет принят.
Подскажите, пожалуйста, что значит "*чистый пул реквест*"?
Спасибо, за помощь.
(0010348)
vdemidov   
06-01-2013 21:07   
Ну претензии к прошлой попытке я в комментарии написал. С тех пор ветка уже ушла вперед, так что нужно сделать новый коммит и пул реквест.
(0010350)
Fed   
07-01-2013 05:30   
Создал новый pull request.
Сейчас правильно сделал?
Спасибо, за помощь.
(0010351)
vdemidov   
07-01-2013 10:03   
Теперь лучше, но есть пару замечаний:
1. Оставлять неиспользуемые переменные на которые вылазят варнинги не стоит. Я это поправил на этот раз, но следующий раз просто не приму пул реквест.
2. Контролам нужно давать осмысленные имена, а не CheckBox2, Panel1, CheckBox3. То что один из этих контролов уже существовал с таким именем - не оправдание.
(0010352)
vdemidov   
07-01-2013 10:04   
Спасибо за вклад в разработку.