View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000275 | Double Commander | Graphical user interface | public | 2011-11-30 13:56 | 2011-12-03 06:48 |
Reporter | oji | Assigned To | Alexx2000 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Projection | none | ETA | none | ||
Product Version | 0.6.0 (trunk) | Product Build | 4122M | ||
Fixed in Version | 0.5.5 | ||||
Summary | 0000275: Настройки цвета файлов / папок | ||||
Description | В случае совпадения масок, приложение раскрашивает файлы / папки тем цветом, который находится в самом верху списка настроек. Поменять же порядок в этом списке можно только двумя способами — отредактировать файл конфигурации вручную или пересоздать его с нуля, с учётом нового порядка. Также, фон списка всегда отображается системным фоном окна, — например, в моей конфигурации DC используется тёмно-синий фон и все цвета, соответственно, светлые, — их видно только при выделении курсором элемента. | ||||
Tags | No tags attached. | ||||
Attached Files | color_options.patch (11,868 bytes)
Index: src/frames/foptionsfiletypescolors.lfm =================================================================== --- src/frames/foptionsfiletypescolors.lfm (revision 4122) +++ src/frames/foptionsfiletypescolors.lfm (working copy) @@ -17,16 +17,16 @@ BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'File types colors' - ClientHeight = 320 + ClientHeight = 324 ClientWidth = 739 TabOrder = 0 object lblCategoryName: TLabel AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 136 - Width = 105 + Height = 16 + Top = 140 + Width = 85 Caption = 'Category name:' ParentColor = False end @@ -34,9 +34,9 @@ AnchorSideTop.Control = edtCategoryMask AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 173 - Width = 103 + Height = 16 + Top = 171 + Width = 83 Caption = 'Category mask:' ParentColor = False end @@ -44,9 +44,9 @@ AnchorSideTop.Control = cbCategoryColor AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 244 - Width = 99 + Height = 16 + Top = 233 + Width = 82 Caption = 'Category color:' ParentColor = False end @@ -54,9 +54,9 @@ AnchorSideTop.Control = edtCategoryAttr AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 210 - Width = 132 + Height = 16 + Top = 202 + Width = 105 Caption = 'Category attributes:' ParentColor = False end @@ -66,25 +66,25 @@ AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom Left = 174 - Height = 29 - Top = 133 + Height = 23 + Top = 137 Width = 557 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 - TabOrder = 0 + TabOrder = 1 end object edtCategoryMask: TEdit AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSearchTemplate Left = 174 - Height = 29 - Top = 170 + Height = 23 + Top = 168 Width = 528 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 - TabOrder = 1 + TabOrder = 2 end object cbCategoryColor: TColorBox AnchorSideTop.Control = edtCategoryAttr @@ -92,14 +92,14 @@ AnchorSideRight.Control = btnCategoryColor Left = 174 Height = 22 - Top = 244 + Top = 230 Width = 523 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 ItemHeight = 16 - TabOrder = 2 + TabOrder = 5 end object btnAddCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -107,7 +107,7 @@ AnchorSideRight.Control = btnDeleteCategory Left = 389 Height = 32 - Top = 278 + Top = 264 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Left = 6 @@ -116,7 +116,7 @@ Caption = 'Add' NumGlyphs = 0 OnClick = btnAddCategoryClick - TabOrder = 3 + TabOrder = 7 end object btnDeleteCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -124,7 +124,7 @@ AnchorSideRight.Control = btnApplyCategory Left = 505 Height = 32 - Top = 278 + Top = 264 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Top = 12 @@ -132,7 +132,7 @@ Caption = 'Delete' NumGlyphs = 0 OnClick = btnDeleteCategoryClick - TabOrder = 4 + TabOrder = 8 end object btnCategoryColor: TButton AnchorSideLeft.Side = asrBottom @@ -143,30 +143,33 @@ AnchorSideBottom.Side = asrBottom Left = 703 Height = 22 - Top = 244 + Top = 230 Width = 28 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCategoryColorClick - TabOrder = 5 + TabOrder = 6 end object lbCategories: TListBox AnchorSideTop.Control = gbFileTypesColors AnchorSideRight.Control = gbFileTypesColors AnchorSideRight.Side = asrBottom Left = 12 - Height = 115 + Height = 119 Top = 6 Width = 719 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Right = 8 + DragMode = dmAutomatic ItemHeight = 0 OnClick = lbCategoriesClick + OnDragDrop = lbCategoriesDragDrop + OnDragOver = lbCategoriesDragOver OnDrawItem = lbCategoriesDrawItem Style = lbOwnerDrawFixed - TabOrder = 6 + TabOrder = 0 end object btnApplyCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -175,14 +178,14 @@ AnchorSideRight.Side = asrBottom Left = 621 Height = 32 - Top = 278 + Top = 264 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Caption = 'Apply' NumGlyphs = 0 OnClick = btnApplyCategoryClick - TabOrder = 7 + TabOrder = 9 end object edtCategoryAttr: TEdit AnchorSideTop.Control = edtCategoryMask @@ -190,12 +193,12 @@ AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom Left = 174 - Height = 29 - Top = 207 + Height = 23 + Top = 199 Width = 557 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 - TabOrder = 8 + TabOrder = 4 end object btnSearchTemplate: TBitBtn AnchorSideTop.Control = edtCategoryMask @@ -204,9 +207,9 @@ AnchorSideBottom.Control = edtCategoryMask AnchorSideBottom.Side = asrBottom Left = 708 - Height = 29 + Height = 23 Hint = 'Template...' - Top = 170 + Top = 168 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { @@ -249,7 +252,7 @@ OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True - TabOrder = 9 + TabOrder = 3 end end object optColorDialog: TColorDialog[1] Index: src/frames/foptionsfiletypescolors.pas =================================================================== --- src/frames/foptionsfiletypescolors.pas (revision 4122) +++ src/frames/foptionsfiletypescolors.pas (working copy) @@ -57,6 +57,9 @@ procedure btnApplyCategoryClick(Sender: TObject); procedure btnDeleteCategoryClick(Sender: TObject); procedure btnCategoryColorClick(Sender: TObject); + procedure lbCategoriesDragDrop(Sender, Source: TObject; X, Y: Integer); + procedure lbCategoriesDragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); procedure lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); protected @@ -136,12 +139,13 @@ btnDeleteCategory.Enabled := True; btnApplyCategory.Enabled := True; end; - iIndex := lbCategories.Items.AddObject('', nil); + iIndex := lbCategories.Items.AddObject('New', nil); lbCategories.ItemIndex := iIndex; - edtCategoryName.Text := ''; + edtCategoryName.Text := 'New'; edtCategoryMask.Text := '*'; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; + edtCategoryName.SetFocus; end; procedure TfrmOptionsFileTypesColors.btnApplyCategoryClick(Sender: TObject); @@ -149,47 +153,26 @@ MaskItem : TMaskItem; I, iCount : Integer; begin - if btnDeleteCategory.Tag = 0 then // if we add or change category - begin - lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; - MaskItem := TMaskItem.Create; - MaskItem.sName := edtCategoryName.Text; - MaskItem.cColor := cbCategoryColor.Selected; - if edtCategoryMask.Text = '' then - edtCategoryMask.Text := '*'; // because we load colors from ini by mask - MaskItem.sExt := edtCategoryMask.Text; - MaskItem.sModeStr := edtCategoryAttr.Text; - lbCategories.Items.Objects[lbCategories.ItemIndex] := MaskItem; - if lbCategories.ItemIndex >= gColorExt.MaskItemList.Count then - gColorExt.MaskItemList.Add(MaskItem) - else - begin - TMaskItem(gColorExt.MaskItemList.Items[lbCategories.ItemIndex]).Free; - gColorExt.MaskItemList.Items[lbCategories.ItemIndex] := MaskItem; - end; - - end - else // if we delete category - begin - iCount := gColorExt.MaskItemList.Count - 1; - for I := iCount downto 0 do // delete old categories - begin - gColorExt.MaskItemList.Delete(I); - end; - iCount := lbCategories.Count; - for I := 0 to iCount - 1 do //write new categories - begin - gColorExt.MaskItemList.Add(lbCategories.Items.Objects[I]); - end; - end; // delete category - - btnDeleteCategory.Tag := 0; + lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; + MaskItem := TMaskItem.Create; + try + MaskItem.sName := edtCategoryName.Text; + MaskItem.cColor := cbCategoryColor.Selected; + if edtCategoryMask.Text = '' then + edtCategoryMask.Text := '*'; // because we load colors from ini by mask + MaskItem.sExt := edtCategoryMask.Text; + MaskItem.sModeStr := edtCategoryAttr.Text; + lbCategories.Items.Objects[lbCategories.ItemIndex] := MaskItem; + except + FreeAndNil(MaskItem); + raise; + end; end; procedure TfrmOptionsFileTypesColors.btnDeleteCategoryClick(Sender: TObject); begin + lbCategories.Items.Objects[lbCategories.ItemIndex].Free; lbCategories.Items.Delete(lbCategories.ItemIndex); - btnDeleteCategory.Tag := 1; // show that we delete category if lbCategories.Count > 0 then lbCategories.ItemIndex := 0; lbCategoriesClick(lbCategories); @@ -202,6 +185,28 @@ SetColorInColorBox(cbCategoryColor, optColorDialog.Color); end; +procedure TfrmOptionsFileTypesColors.lbCategoriesDragDrop(Sender, + Source: TObject; X, Y: Integer); +var + SrcIndex, DestIndex: Integer; +begin + SrcIndex := lbCategories.ItemIndex; + if SrcIndex = -1 then + Exit; + DestIndex := lbCategories.GetIndexAtY(Y); + if (DestIndex < 0) or (DestIndex >= lbCategories.Count) then + DestIndex := lbCategories.Count - 1; + + lbCategories.Items.Move(SrcIndex, DestIndex); + lbCategories.ItemIndex := DestIndex; +end; + +procedure TfrmOptionsFileTypesColors.lbCategoriesDragOver(Sender, + Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); +begin + Accept := (Source = lbCategories) and (lbCategories.ItemIndex <> -1); +end; + procedure TfrmOptionsFileTypesColors.lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); begin @@ -263,8 +268,16 @@ end; function TfrmOptionsFileTypesColors.Save: TOptionsEditorSaveFlags; +var + i: Integer; begin Result := []; + for I := gColorExt.MaskItemList.Count - 1 downto 0 do // delete old categories + gColorExt.MaskItemList.Delete(I); + + for I := 0 to lbCategories.Count - 1 do //write new categories + if Assigned(lbCategories.Items.Objects[I]) then + gColorExt.MaskItemList.Add(lbCategories.Items.Objects[I]); end; end. color_options2.patch (17,631 bytes)
Index: src/frames/foptionsfiletypescolors.lfm =================================================================== --- src/frames/foptionsfiletypescolors.lfm (revision 4122) +++ src/frames/foptionsfiletypescolors.lfm (working copy) @@ -17,16 +17,16 @@ BorderSpacing.Right = 8 BorderSpacing.Bottom = 8 Caption = 'File types colors' - ClientHeight = 320 + ClientHeight = 324 ClientWidth = 739 TabOrder = 0 object lblCategoryName: TLabel AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 136 - Width = 105 + Height = 14 + Top = 140 + Width = 79 Caption = 'Category name:' ParentColor = False end @@ -34,9 +34,9 @@ AnchorSideTop.Control = edtCategoryMask AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 173 - Width = 103 + Height = 14 + Top = 169 + Width = 77 Caption = 'Category mask:' ParentColor = False end @@ -44,9 +44,9 @@ AnchorSideTop.Control = cbCategoryColor AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 244 - Width = 99 + Height = 14 + Top = 228 + Width = 76 Caption = 'Category color:' ParentColor = False end @@ -54,9 +54,9 @@ AnchorSideTop.Control = edtCategoryAttr AnchorSideTop.Side = asrCenter Left = 12 - Height = 22 - Top = 210 - Width = 132 + Height = 14 + Top = 198 + Width = 100 Caption = 'Category attributes:' ParentColor = False end @@ -66,25 +66,25 @@ AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom Left = 174 - Height = 29 - Top = 133 + Height = 21 + Top = 137 Width = 557 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 12 - TabOrder = 0 + TabOrder = 1 end object edtCategoryMask: TEdit AnchorSideTop.Control = edtCategoryName AnchorSideTop.Side = asrBottom AnchorSideRight.Control = btnSearchTemplate Left = 174 - Height = 29 - Top = 170 + Height = 21 + Top = 166 Width = 528 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 - TabOrder = 1 + TabOrder = 2 end object cbCategoryColor: TColorBox AnchorSideTop.Control = edtCategoryAttr @@ -92,14 +92,14 @@ AnchorSideRight.Control = btnCategoryColor Left = 174 Height = 22 - Top = 244 + Top = 224 Width = 523 Style = [cbStandardColors, cbExtendedColors, cbSystemColors, cbPrettyNames] Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 BorderSpacing.Right = 6 ItemHeight = 16 - TabOrder = 2 + TabOrder = 5 end object btnAddCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -107,7 +107,7 @@ AnchorSideRight.Control = btnDeleteCategory Left = 389 Height = 32 - Top = 278 + Top = 258 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Left = 6 @@ -116,7 +116,7 @@ Caption = 'Add' NumGlyphs = 0 OnClick = btnAddCategoryClick - TabOrder = 3 + TabOrder = 7 end object btnDeleteCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -124,7 +124,7 @@ AnchorSideRight.Control = btnApplyCategory Left = 505 Height = 32 - Top = 278 + Top = 258 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Top = 12 @@ -132,7 +132,7 @@ Caption = 'Delete' NumGlyphs = 0 OnClick = btnDeleteCategoryClick - TabOrder = 4 + TabOrder = 8 end object btnCategoryColor: TButton AnchorSideLeft.Side = asrBottom @@ -143,30 +143,33 @@ AnchorSideBottom.Side = asrBottom Left = 703 Height = 22 - Top = 244 + Top = 224 Width = 28 Anchors = [akTop, akRight, akBottom] BorderSpacing.InnerBorder = 4 Caption = '>>' OnClick = btnCategoryColorClick - TabOrder = 5 + TabOrder = 6 end object lbCategories: TListBox AnchorSideTop.Control = gbFileTypesColors AnchorSideRight.Control = gbFileTypesColors AnchorSideRight.Side = asrBottom Left = 12 - Height = 115 + Height = 119 Top = 6 Width = 719 Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Top = 6 BorderSpacing.Right = 8 + DragMode = dmAutomatic ItemHeight = 0 OnClick = lbCategoriesClick + OnDragDrop = lbCategoriesDragDrop + OnDragOver = lbCategoriesDragOver OnDrawItem = lbCategoriesDrawItem Style = lbOwnerDrawFixed - TabOrder = 6 + TabOrder = 0 end object btnApplyCategory: TBitBtn AnchorSideTop.Control = cbCategoryColor @@ -175,14 +178,14 @@ AnchorSideRight.Side = asrBottom Left = 621 Height = 32 - Top = 278 + Top = 258 Width = 110 Anchors = [akTop, akRight] BorderSpacing.Top = 12 Caption = 'Apply' NumGlyphs = 0 OnClick = btnApplyCategoryClick - TabOrder = 7 + TabOrder = 9 end object edtCategoryAttr: TEdit AnchorSideTop.Control = edtCategoryMask @@ -190,12 +193,12 @@ AnchorSideRight.Control = lbCategories AnchorSideRight.Side = asrBottom Left = 174 - Height = 29 - Top = 207 + Height = 21 + Top = 195 Width = 557 Anchors = [akTop, akLeft, akRight] BorderSpacing.Top = 8 - TabOrder = 8 + TabOrder = 4 end object btnSearchTemplate: TBitBtn AnchorSideTop.Control = edtCategoryMask @@ -204,9 +207,9 @@ AnchorSideBottom.Control = edtCategoryMask AnchorSideBottom.Side = asrBottom Left = 708 - Height = 29 + Height = 21 Hint = 'Template...' - Top = 170 + Top = 166 Width = 23 Anchors = [akTop, akRight, akBottom] Glyph.Data = { @@ -249,7 +252,7 @@ OnClick = btnSearchTemplateClick ParentShowHint = False ShowHint = True - TabOrder = 9 + TabOrder = 3 end end object optColorDialog: TColorDialog[1] Index: src/frames/foptionsfiletypescolors.pas =================================================================== --- src/frames/foptionsfiletypescolors.pas (revision 4122) +++ src/frames/foptionsfiletypescolors.pas (working copy) @@ -51,12 +51,16 @@ lblCategoryColor: TLabel; lblCategoryMask: TLabel; lblCategoryName: TLabel; + procedure lbCategoriesClick(Sender: TObject); procedure btnSearchTemplateClick(Sender: TObject); procedure btnAddCategoryClick(Sender: TObject); procedure btnApplyCategoryClick(Sender: TObject); procedure btnDeleteCategoryClick(Sender: TObject); procedure btnCategoryColorClick(Sender: TObject); + procedure lbCategoriesDragDrop(Sender, Source: TObject; X, Y: Integer); + procedure lbCategoriesDragOver(Sender, Source: TObject; X, Y: Integer; + State: TDragState; var Accept: Boolean); procedure lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); protected @@ -82,28 +86,24 @@ MaskItem : TMaskItem; bEnabled: Boolean; begin - if (lbCategories.Count > 0) and (Assigned(lbCategories.Items.Objects[lbCategories.ItemIndex])) then + if (lbCategories.ItemIndex <> -1) then begin - edtCategoryName.Text := lbCategories.Items[lbCategories.ItemIndex]; MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); + edtCategoryName.Text := MaskItem.sName; edtCategoryMask.Text := MaskItem.sExt; SetColorInColorBox(cbCategoryColor, MaskItem.cColor); - bEnabled:= Pos('>', MaskItem.sExt) <> 1; + bEnabled:= (MaskItem.sExt = '') or (MaskItem.sExt[1] <> '>'); edtCategoryMask.Enabled:= bEnabled; edtCategoryAttr.Enabled:= bEnabled; edtCategoryAttr.Text := MaskItem.sModeStr; end else begin - if lbCategories.Count = 0 then - edtCategoryName.Text := '' - else - edtCategoryName.Text := lbCategories.Items[lbCategories.ItemIndex]; - edtCategoryMask.Text := '*'; + edtCategoryName.Text := ''; + edtCategoryMask.Text := ''; edtCategoryAttr.Text := ''; cbCategoryColor.ItemIndex := -1; - cbCategoryColor.Selected := clWindow; end; end; @@ -125,6 +125,7 @@ procedure TfrmOptionsFileTypesColors.btnAddCategoryClick(Sender: TObject); var iIndex : Integer; + MaskItem: TMaskItem; begin if lbCategories.Count = 0 then begin @@ -136,12 +137,25 @@ btnDeleteCategory.Enabled := True; btnApplyCategory.Enabled := True; end; - iIndex := lbCategories.Items.AddObject('', nil); - lbCategories.ItemIndex := iIndex; - edtCategoryName.Text := ''; - edtCategoryMask.Text := '*'; - edtCategoryAttr.Text := ''; - cbCategoryColor.ItemIndex := -1; + + MaskItem := TMaskItem.Create; + try + edtCategoryName.Text := 'New'; + edtCategoryMask.Text := '*'; + edtCategoryAttr.Text := ''; + cbCategoryColor.ItemIndex := -1; + + MaskItem.sName:= edtCategoryName.Text; + MaskItem.sExt:= edtCategoryMask.Text; + MaskItem.sModeStr:= edtCategoryAttr.Text; + MaskItem.cColor:= clBlack; + iIndex := lbCategories.Items.AddObject(MaskItem.sName, MaskItem); + except + FreeAndNil(MaskItem); + raise; + end; + lbCategories.ItemIndex:= iIndex; + edtCategoryName.SetFocus; end; procedure TfrmOptionsFileTypesColors.btnApplyCategoryClick(Sender: TObject); @@ -149,50 +163,30 @@ MaskItem : TMaskItem; I, iCount : Integer; begin - if btnDeleteCategory.Tag = 0 then // if we add or change category - begin - lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; - MaskItem := TMaskItem.Create; - MaskItem.sName := edtCategoryName.Text; - MaskItem.cColor := cbCategoryColor.Selected; - if edtCategoryMask.Text = '' then - edtCategoryMask.Text := '*'; // because we load colors from ini by mask - MaskItem.sExt := edtCategoryMask.Text; - MaskItem.sModeStr := edtCategoryAttr.Text; - lbCategories.Items.Objects[lbCategories.ItemIndex] := MaskItem; - if lbCategories.ItemIndex >= gColorExt.MaskItemList.Count then - gColorExt.MaskItemList.Add(MaskItem) - else - begin - TMaskItem(gColorExt.MaskItemList.Items[lbCategories.ItemIndex]).Free; - gColorExt.MaskItemList.Items[lbCategories.ItemIndex] := MaskItem; - end; + if (lbCategories.ItemIndex <> -1) then + begin + lbCategories.Items[lbCategories.ItemIndex] := edtCategoryName.Text; + if edtCategoryMask.Text = '' then + edtCategoryMask.Text := '*'; // because we load colors from ini by mask + MaskItem := TMaskItem(lbCategories.Items.Objects[lbCategories.ItemIndex]); - end - else // if we delete category - begin - iCount := gColorExt.MaskItemList.Count - 1; - for I := iCount downto 0 do // delete old categories - begin - gColorExt.MaskItemList.Delete(I); - end; - iCount := lbCategories.Count; - for I := 0 to iCount - 1 do //write new categories - begin - gColorExt.MaskItemList.Add(lbCategories.Items.Objects[I]); - end; - end; // delete category - - btnDeleteCategory.Tag := 0; + MaskItem.sName := edtCategoryName.Text; + MaskItem.cColor := cbCategoryColor.Selected; + MaskItem.sExt := edtCategoryMask.Text; + MaskItem.sModeStr := edtCategoryAttr.Text; + end; end; procedure TfrmOptionsFileTypesColors.btnDeleteCategoryClick(Sender: TObject); begin - lbCategories.Items.Delete(lbCategories.ItemIndex); - btnDeleteCategory.Tag := 1; // show that we delete category - if lbCategories.Count > 0 then - lbCategories.ItemIndex := 0; - lbCategoriesClick(lbCategories); + if (lbCategories.ItemIndex <> -1) then + begin + lbCategories.Items.Objects[lbCategories.ItemIndex].Free; + lbCategories.Items.Delete(lbCategories.ItemIndex); + if lbCategories.Count > 0 then + lbCategories.ItemIndex := 0; + lbCategoriesClick(lbCategories); + end; end; procedure TfrmOptionsFileTypesColors.btnCategoryColorClick(Sender: TObject); @@ -202,6 +196,28 @@ SetColorInColorBox(cbCategoryColor, optColorDialog.Color); end; +procedure TfrmOptionsFileTypesColors.lbCategoriesDragDrop(Sender, + Source: TObject; X, Y: Integer); +var + SrcIndex, DestIndex: Integer; +begin + SrcIndex := lbCategories.ItemIndex; + if SrcIndex = -1 then + Exit; + DestIndex := lbCategories.GetIndexAtY(Y); + if (DestIndex < 0) or (DestIndex >= lbCategories.Count) then + DestIndex := lbCategories.Count - 1; + + lbCategories.Items.Move(SrcIndex, DestIndex); + lbCategories.ItemIndex := DestIndex; +end; + +procedure TfrmOptionsFileTypesColors.lbCategoriesDragOver(Sender, + Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); +begin + Accept := (Source = lbCategories) and (lbCategories.ItemIndex <> -1); +end; + procedure TfrmOptionsFileTypesColors.lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); begin @@ -235,16 +251,22 @@ procedure TfrmOptionsFileTypesColors.Load; var - sCategoryName : String; I : Integer; + MaskItem: TMaskItem; begin lbCategories.Clear; { File lbtypes category color } - for I := 0 to gColorExt.MaskItemList.Count - 1 do + for I := 0 to gColorExt.Count - 1 do begin - sCategoryName := TMaskItem(gColorExt.MaskItemList.Items[I]).sName; - lbCategories.Items.AddObject(sCategoryName,TMaskItem(gColorExt.MaskItemList.Items[I])); + MaskItem := TMaskItem.Create; + try + MaskItem.Assign(gColorExt[I]); + lbCategories.Items.AddObject(MaskItem.sName, MaskItem); + except + FreeAndNil(MaskItem); + raise; + end; end; // for if lbCategories.Count > 0 then @@ -263,8 +285,25 @@ end; function TfrmOptionsFileTypesColors.Save: TOptionsEditorSaveFlags; +var + i: Integer; + MaskItem: TMaskItem; begin Result := []; + gColorExt.Clear; + + for I := 0 to lbCategories.Count - 1 do //write new categories + if Assigned(lbCategories.Items.Objects[I]) then + begin + MaskItem := TMaskItem.Create; + try + MaskItem.Assign(TMaskItem(lbCategories.Items.Objects[I])); + gColorExt.Add(MaskItem); + except + FreeAndNil(MaskItem); + raise; + end; + end; end; end. Index: src/uColorExt.pas =================================================================== --- src/uColorExt.pas (revision 4122) +++ src/uColorExt.pas (working copy) @@ -35,10 +35,13 @@ { TMaskItem } TMaskItem = class + public sExt: String; sModeStr: String; cColor: TColor; sName: String; + + procedure Assign(ASource: TMaskItem); end; { TColorExt } @@ -46,12 +49,17 @@ TColorExt = class private fOldCount: Integer; - protected lslist: TList; + + function GetCount: Integer; + function GetItems(const Index: Integer): TMaskItem; public constructor Create; destructor Destroy; override; + procedure Clear; + procedure Add(AItem: TMaskItem); + function GetColorByExt(const sExt: String): TColor; function GetColorByAttr(const sModeStr: String): TColor; function GetColorBy(const AFile: TFile): TColor; @@ -59,7 +67,9 @@ procedure SaveIni; procedure Load(AConfig: TXmlConfig; ANode: TXmlNode); procedure Save(AConfig: TXmlConfig; ANode: TXmlNode); - property MaskItemList: TList read lslist; + + property Count: Integer read GetCount; + property Items[const Index: Integer]: TMaskItem read GetItems; default; end; implementation @@ -67,6 +77,27 @@ uses SysUtils, uDebug, uGlobs, uMasks, uFileProperty; +{ TMaskItem } + +procedure TMaskItem.Assign(ASource: TMaskItem); +begin + Assert(Assigned(ASource)); + sExt := ASource.sExt; + sModeStr := ASource.sModeStr; + cColor := ASource.cColor; + sName := ASource.sName; +end; + +function TColorExt.GetCount: Integer; +begin + Result := lslist.Count; +end; + +function TColorExt.GetItems(const Index: Integer): TMaskItem; +begin + Result := TMaskItem(lslist[Index]); +end; + constructor TColorExt.Create; begin inherited; @@ -75,11 +106,9 @@ destructor TColorExt.Destroy; begin - if assigned(lsList) then - begin - Clear; - FreeAndNil(lsList); - end; + Clear; + FreeAndNil(lsList); + inherited; end; procedure TColorExt.Clear; @@ -91,6 +120,11 @@ end; end; +procedure TColorExt.Add(AItem: TMaskItem); +begin + lslist.Add(AItem); +end; + function TColorExt.GetColorByExt(const sExt: String): TColor; var I:integer; begin @@ -316,4 +350,4 @@ end; end; -end. +end. color_options3.patch (1,430 bytes)
Index: src/frames/foptionsfiletypescolors.pas =================================================================== --- src/frames/foptionsfiletypescolors.pas (revision 4125) +++ src/frames/foptionsfiletypescolors.pas (working copy) @@ -63,11 +63,15 @@ State: TDragState; var Accept: Boolean); procedure lbCategoriesDrawItem(Control: TWinControl; Index: Integer; ARect: TRect; State: TOwnerDrawState); + + procedure Clear; protected procedure Init; override; procedure Load; override; function Save: TOptionsEditorSaveFlags; override; public + destructor Destroy; override; + class function GetIconIndex: Integer; override; class function GetTitle: String; override; end; @@ -233,6 +237,16 @@ end; end; +procedure TfrmOptionsFileTypesColors.Clear; +var + i: Integer; +begin + for i := lbCategories.Count - 1 downto 0 do + lbCategories.Items.Objects[i].Free; + + lbCategories.Clear; +end; + procedure TfrmOptionsFileTypesColors.Init; begin lbCategories.Canvas.Font := lbCategories.Font; @@ -254,7 +268,7 @@ I : Integer; MaskItem: TMaskItem; begin - lbCategories.Clear; + Clear; { File lbtypes category color } for I := 0 to gColorExt.Count - 1 do @@ -306,5 +320,11 @@ end; end; +destructor TfrmOptionsFileTypesColors.Destroy; +begin + Clear; + inherited; +end; + end. | ||||
Fixed in Revision | 4129 | ||||
Operating system | Windows | ||||
Widgetset | |||||
Architecture | 64-bit | ||||
|
Сделал поддержку Drag & Drop |
|
Исправил некоторые недоделки в первом патче Надо испольвовать токо второй патч |
|
Ок, только, по-моему, это неочевидно. Может, подсказка какая? При наведении курсора или обычным лейблом? |
|
Патч применил (revision: 4123) |
|
И еще один фикс надо залить поверх второго патча |
|
>И еще один фикс надо залить поверх второго патча Применил >Также, фон списка всегда отображается системным фоном окна Исправил, теперь используется тот же цвет, что и в панели (r4126) |
|
>Может, подсказка какая? При наведении курсора или обычным лейблом? Добавил подсказку в заголовок панели, пойдет? |
|
> Добавил подсказку в заголовок панели, пойдет? Да, отлично vitaliyg, Alexx2000, спасибо за оперативное решение проблемы. |
Date Modified | Username | Field | Change |
---|---|---|---|
2011-11-30 13:56 | oji | New Issue | |
2011-11-30 13:56 | oji | File Added: 2011-11-30_20-51-00.png | |
2011-11-30 18:49 | vitaliyg | File Added: color_options.patch | |
2011-11-30 18:50 | vitaliyg | Note Added: 0000232 | |
2011-12-01 00:42 | vitaliyg | File Added: color_options2.patch | |
2011-12-01 00:43 | vitaliyg | Note Added: 0000234 | |
2011-12-01 00:44 | vitaliyg | Status | new => feedback |
2011-12-01 03:13 | oji | Note Added: 0000236 | |
2011-12-01 03:13 | oji | Status | feedback => new |
2011-12-01 10:46 | Alexx2000 | Note Added: 0000242 | |
2011-12-01 14:08 | vitaliyg | File Added: color_options3.patch | |
2011-12-01 14:09 | vitaliyg | Note Added: 0000244 | |
2011-12-01 15:09 | Alexx2000 | Note Added: 0000246 | |
2011-12-02 21:48 | Alexx2000 | Assigned To | => Alexx2000 |
2011-12-02 21:48 | Alexx2000 | Status | new => assigned |
2011-12-02 21:49 | Alexx2000 | Fixed in Revision | => 4129 |
2011-12-02 21:49 | Alexx2000 | Note Added: 0000255 | |
2011-12-02 21:49 | Alexx2000 | Status | assigned => resolved |
2011-12-02 21:49 | Alexx2000 | Fixed in Version | => 0.5.5 |
2011-12-02 21:49 | Alexx2000 | Resolution | open => fixed |
2011-12-03 06:47 | oji | Note Added: 0000256 | |
2011-12-03 06:48 | oji | Status | resolved => closed |