View Issue Details

IDProjectCategoryView StatusLast Update
0000917SAS.ПланетаХотелка / Feature requestpublic07-01-2013 10:04
Reportersheavy Assigned Tovdemidov  
PrioritynormalSeveritytweakReproducibilityalways
Status resolvedResolutionfixed 
PlatformWindowsOSXPOS VersionSP3
Product Version110427.Beta 
Target Version131111Fixed in Version131111 
Summary0000917: Изменение видимости дочерних категорий
DescriptionСм. Скриншот: если снять галочку видимости с главной категории, метка, принадлежащая вложеной подкатегории останеться видимой. Кажется, было бы логично и интуитивно понятно, что если убирается галочка на главной категории, что она должна сниматься и со всех подчиненных. Иначе приходиться пробегаться по всем вложенным категориям. Чекбокс "Все" здесь тоже не помогает, т.к. сбрасывает флаг Visible и в других категориях, которых достаточно много.
Steps To ReproduceСм. Скриншот:
Additional InformationАналогично сделано во многих программах, где требуется сканирование диска (антивирусы, восстановители удаленных файлов и т.п.)

Понятно, что на самом деле вложенности в Category.sml нет и нужно улучшать обработчих кнопки "ОК" и "Применить" или делать новый чекбокс рядом с чекбоксом "Все" (менее предпочтительно)
Tagssml, категории
Attached Files
2011-08-17_092532.jpg (28,459 bytes)   
2011-08-17_092532.jpg (28,459 bytes)   

Relationships

related to 0000137 closedvdemidov Вложенные категории 
related to 0000919 closedvdemidov Порядок создания главных и вложенных категорий влияет на их отображение в окне "Управление метками" 

Activities

gpsMax

18-08-2011 04:11

manager   ~0003513

Да, надо было давно это вынести отдельным тикетом, спасибо.

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

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

zOn

19-08-2011 07:18

reporter   ~0003547

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

Tolik

19-08-2011 07:51

manager   ~0003555

только если в этой категории нет других подкатегорий.

zOn

19-08-2011 07:54

reporter   ~0003556

да. забыл сказать.

Fed

02-01-2013 05:43

reporter   ~0010290

Last edited: 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;
----------------------

Garl

05-01-2013 10:28

manager   ~0010327

проверил, по логике и работе - всё ок!
добавлять вышеуказанный код в исходник?

vdemidov

05-01-2013 11:59

manager   ~0010329

>добавлять вышеуказанный код в исходник?
Ну я бы дал автору кода еще пару попыток сделать чистый пул реквест, который будет принят.

Fed

06-01-2013 20:36

reporter   ~0010347

>>добавлять вышеуказанный код в исходник?
>Ну я бы дал автору кода еще пару попыток сделать чистый пул реквест, который будет принят.
Подскажите, пожалуйста, что значит "*чистый пул реквест*"?
Спасибо, за помощь.

vdemidov

06-01-2013 21:07

manager   ~0010348

Ну претензии к прошлой попытке я в комментарии написал. С тех пор ветка уже ушла вперед, так что нужно сделать новый коммит и пул реквест.

Fed

07-01-2013 05:30

reporter   ~0010350

Создал новый pull request.
Сейчас правильно сделал?
Спасибо, за помощь.

vdemidov

07-01-2013 10:03

manager   ~0010351

Теперь лучше, но есть пару замечаний:
1. Оставлять неиспользуемые переменные на которые вылазят варнинги не стоит. Я это поправил на этот раз, но следующий раз просто не приму пул реквест.
2. Контролам нужно давать осмысленные имена, а не CheckBox2, Panel1, CheckBox3. То что один из этих контролов уже существовал с таким именем - не оправдание.

vdemidov

07-01-2013 10:04

manager   ~0010352

Спасибо за вклад в разработку.

Issue History

Date Modified Username Field Change
17-08-2011 05:46 sheavy New Issue
17-08-2011 05:46 sheavy File Added: 2011-08-17_092532.jpg
17-08-2011 07:42 Tolik File Added: Cat.GIF
17-08-2011 07:59 Tolik Status new => acknowledged
17-08-2011 09:26 vdemidov File Deleted: Cat.GIF
17-08-2011 09:28 sheavy Tag Attached: категории
17-08-2011 09:28 sheavy Tag Attached: sml
17-08-2011 09:29 vdemidov Target Version => 45xxxx
17-08-2011 09:29 vdemidov Summary Определение приоритета видимости категорий => Изменение видимости дочерних категорий
17-08-2011 09:29 vdemidov Status acknowledged => confirmed
17-08-2011 09:29 vdemidov Product Version => 110427.Beta
18-08-2011 04:09 gpsMax Relationship added related to 0000137
18-08-2011 04:11 gpsMax Note Added: 0003513
18-08-2011 04:15 gpsMax Relationship added related to 0000919
19-08-2011 07:18 zOn Note Added: 0003547
19-08-2011 07:51 Tolik Note Added: 0003555
19-08-2011 07:54 zOn Note Added: 0003556
02-01-2013 05:43 Fed Note Added: 0010290
02-01-2013 05:45 Fed Note Edited: 0010290
02-01-2013 05:45 Fed Note Edited: 0010290
02-01-2013 06:12 Fed Note Edited: 0010290
02-01-2013 10:45 Fed File Added: Bitbucket_Import.jpg
02-01-2013 10:56 Fetser File Added: 1.jpg
05-01-2013 10:28 Garl Note Added: 0010327
05-01-2013 11:59 vdemidov Note Added: 0010329
06-01-2013 20:36 Fed Note Added: 0010347
06-01-2013 21:07 vdemidov Note Added: 0010348
07-01-2013 05:30 Fed Note Added: 0010350
07-01-2013 09:27 Fed Note Edited: 0010290
07-01-2013 10:03 vdemidov Note Added: 0010351
07-01-2013 10:04 vdemidov Note Added: 0010352
07-01-2013 10:04 vdemidov Status confirmed => resolved
07-01-2013 10:04 vdemidov Fixed in Version => 131111
07-01-2013 10:04 vdemidov Resolution open => fixed
07-01-2013 10:04 vdemidov Assigned To => vdemidov
07-01-2013 10:04 vdemidov Target Version 45xxxx => 131111
07-01-2013 10:04 vdemidov File Deleted: 1.jpg
07-01-2013 10:04 vdemidov File Deleted: Bitbucket_Import.jpg
08-08-2025 13:24 zed Category Хотелка => Хотелка / Feature request