OSDN Git Service

スレ一覧のカラムのソートマークがおかしくなる不具合の修正
authorh677 <h677>
Tue, 20 Dec 2005 15:21:05 +0000 (15:21 +0000)
committerh677 <h677>
Tue, 20 Dec 2005 15:21:05 +0000 (15:21 +0000)
Giko.dfm
Giko.pas
GikoDataModule.pas
ListViewUtils.pas

index 306ad24..c81cb71 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
 object GikoForm: TGikoForm
-  Left = 153
-  Top = 68
+  Left = 363
+  Top = 92
   HorzScrollBar.Visible = False
   VertScrollBar.Visible = False
   AutoScroll = False
index c9d0aa9..87612a0 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -358,7 +358,7 @@ type
        N63: TMenuItem;
     N64: TMenuItem;
     dummy1: TMenuItem;
-    TreeSelectLogDeletePopupMenu: TMenuItem;
+       TreeSelectLogDeletePopupMenu: TMenuItem;
        N65: TMenuItem;
     BBSSelectPopupMenu: TPopupMenu;
                PlugInMenu: TMenuItem;
@@ -378,7 +378,7 @@ type
     ResRangeKokoPMenuItem: TMenuItem;
     ResRangeNewPMenuItem: TMenuItem;
     ResRangeAllPMenuItem: TMenuItem;
-    BrowsBoradHeadAction1: TMenuItem;
+       BrowsBoradHeadAction1: TMenuItem;
     ThreadRangePopupMenu: TPopupMenu;
     A15: TMenuItem;
     L8: TMenuItem;
@@ -398,7 +398,7 @@ type
     N73: TMenuItem;
     SelectComboBoxPanel: TPanel;
     SelectComboBoxSplitter: TImage;
-    ToolButton1: TToolButton;
+       ToolButton1: TToolButton;
     N74: TMenuItem;
     WikiFAQ: TMenuItem;
     GikoApplicationEvents: TApplicationEvents;
@@ -538,7 +538,7 @@ type
          Shift: TShiftState);
     procedure FavoriteTreeViewEditing(Sender: TObject; Node: TTreeNode;
       var AllowEdit: Boolean);
-    procedure CabinetCloseSpeedButtonClick(Sender: TObject);
+       procedure CabinetCloseSpeedButtonClick(Sender: TObject);
     procedure FavoriteArrangeToolButtonClick(Sender: TObject);
     procedure GikoApplicationEventsMessage(var Msg: tagMSG;
          var Handled: Boolean);
@@ -557,8 +557,6 @@ type
       Shift: TShiftState; X, Y: Integer);
        private
                { Private \90é\8c¾ }
-               FSortIndex: Integer;
-               FSortOrder: Boolean;
                FEnabledCloseButton: Boolean;
                FClickNode: TTreeNode;
                FHttpState: Boolean;
@@ -705,8 +703,6 @@ type
                property ToolBarSettingSender : TToolBarSettingSenderType
                                                 read FToolBarSettingSender write FToolBarSettingSender;
                property ScreenCursor : TCursor read GetScreenCursor write SetScreenCursor;
-               property SortIndex: Integer read FSortIndex write FSortIndex;
-               property SortOrder: Boolean read FSortOrder write FSortOrder;
                property ActiveBBS : TBBS read FActiveBBS write FActiveBBS;
                property WorkCount: Integer read FWorkCount write FWorkCount;
                procedure SetContent(inThread: TBrowserRecord);
@@ -2002,27 +1998,41 @@ procedure TGikoForm.ListViewColumnClick(Sender: TObject;
 var
        id, idx                 : Integer;
        orderList               : TList;
+       vSortIndex              : Integer;
+       vSortOrder              : Boolean;
 begin
        idx := TListViewUtils.ActiveListTrueColumn( Column ).Tag;
-
-       if TObject( FActiveList ) is TBBS then
-               orderList := GikoSys.Setting.BBSColumnOrder
-       else if TObject( FActiveList ) is TCategory then
-               orderList := GikoSys.Setting.CategoryColumnOrder
-       else if TObject( FActiveList ) is TBoard then
-               orderList := GikoSys.Setting.BoardColumnOrder
-       else
+       if TObject( FActiveList ) is TBBS then begin
+               orderList := GikoSys.Setting.BBSColumnOrder;
+               vSortIndex := GikoSys.Setting.BBSSortIndex;
+               vSortOrder := GikoSys.Setting.BBSSortOrder;
+       end else if TObject( FActiveList ) is TCategory then begin
+               orderList := GikoSys.Setting.CategoryColumnOrder;
+               vSortIndex := GikoSys.Setting.CategorySortIndex;
+               vSortOrder := GikoSys.Setting.CategorySortOrder;
+       end else if TObject( FActiveList ) is TBoard then begin
+               orderList := GikoSys.Setting.BoardColumnOrder;
+               vSortIndex := GikoSys.Setting.BoardSortIndex;
+               vSortOrder := GikoSys.Setting.BoardSortOrder;
+       end else
                Exit;
 
        id := Integer( orderList[ idx ] );
 
-       if FSortIndex = id then
-               FSortOrder := not FSortOrder
+
+       if vSortIndex = id then
+               vSortOrder := not vSortOrder
        else begin
-               FSortOrder := id = 0;
+               vSortOrder := True;
        end;
-
-       TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
+{$IFDEF DEBUG}
+       If vSortOrder then begin
+               Writeln('True  : id:' + IntToStr(id) + ' SI:' + IntToStr(vSortIndex));
+       end else begin
+        Writeln('False : id:' + IntToStr(id) + ' SI:' + IntToStr(vSortIndex));
+       end;
+{$ENDIF}
+       TListViewUtils.ListViewSort(Sender, ListView, Column, GikoDM.ListNumberVisibleAction.Checked, vSortOrder);
 end;
 
 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
@@ -2760,14 +2770,11 @@ begin
                Screen.Cursor := crHourGlass;
                try
                        if Obj is TBBS then begin
-                               TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
                        end else if Obj is TCategory then begin
-                               TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, GikoDM.ListNumberVisibleAction.Checked);
                        end else if Obj is TBoard then begin
-                               TListViewUtils.SetThreadListItem(TBoard(Obj), ListView,  GikoDM.ListNumberVisibleAction.Checked,
-                                                               FSortIndex, FSortOrder);
+                               TListViewUtils.SetThreadListItem(TBoard(Obj), ListView,  GikoDM.ListNumberVisibleAction.Checked);
                        end;
                finally
                        Screen.Cursor := crDefault;
index e876996..0f7dda4 100644 (file)
@@ -402,6 +402,7 @@ type
        procedure SetThreadAreaVertical(gls : TGikoListState);
        procedure SetThreadReadProperty(read: Boolean);
        procedure SelectThreadSaveToFile(dat: Boolean);
+       function GetSortProperties(List: TObject;var vSortOrder: Boolean): Boolean;
   public
        { Public \90é\8c¾ }
        procedure RepaintStatusBar;
@@ -3049,26 +3050,44 @@ begin
 
 end;
 // *************************************************************************
+//! \83X\83\8c\88ê\97\97\82Ì\95\\8e¦\82µ\82Ä\82¢\82é\93à\97e\82É\82µ\82½\82ª\82Á\82Ä\81A\83\\81[\83g\83J\83\89\83\80\82Ì\88Ê\92u\82Æ\95û\8cü\82ð\8eæ\93¾\82·\82é
+// *************************************************************************
+function TGikoDM.GetSortProperties(List: TObject;
+ var vSortOrder: Boolean): Boolean;
+begin
+       Result := True;
+       if (List <> nil) then begin
+               if (List is TBBS) then begin
+                       vSortOrder := GikoSys.Setting.BBSSortOrder;
+               end else if (List is TCategory) then begin
+                       vSortOrder := GikoSys.Setting.CategorySortOrder;
+               end else if (List is TBoard) then begin
+                       vSortOrder := GikoSys.Setting.BoardSortOrder;
+               end else begin
+                       Result := False;
+               end;
+       end else begin
+               Result := False;
+       end;
+end;
+// *************************************************************************
 //! \8c»\8dÝ\82Ì\83J\83\89\83\80\82ð\83\\81[\83g\82·\82é
 // *************************************************************************
 procedure TGikoDM.SortActiveColumnActionExecute(Sender: TObject);
 var
        i       : Integer;
        so : boolean;
-       si : Integer;
 begin
-       for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
-               if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
-                       (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
-                       GikoForm.SortOrder := not GikoForm.SortOrder;
-                       so := GikoForm.SortOrder;
-                       si := GikoForm.SortIndex;
-                       TListViewUtils.ListViewSort(nil, GikoForm.ListView,
-                                GikoForm.ListView.Column[ i ], ListNumberVisibleAction.Checked,
-                                so, si );
-                       GikoForm.SortIndex := si;
-                       GikoForm.SortOrder := so;
-                       break;
+       if GetSortProperties(GikoForm.GetActiveList, so) then begin
+               for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
+                       if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
+                               (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
+                               so := not so;
+                               TListViewUtils.ListViewSort(nil, GikoForm.ListView,
+                                        GikoForm.ListView.Column[ i ], ListNumberVisibleAction.Checked,
+                                        so);
+                               break;
+                       end;
                end;
        end;
 end;
@@ -3078,8 +3097,6 @@ end;
 procedure TGikoDM.SortNextColumnActionExecute(Sender: TObject);
 var
        i, id   : Integer;
-       so : boolean;
-       si : Integer;
 begin
        for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
                if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
@@ -3087,14 +3104,9 @@ begin
                        id := i + 1;
                        if id > GikoForm.ListView.Columns.Count - 1 then
                                id := 0;
-                       GikoForm.SortOrder := id = 0;
-                       so := GikoForm.SortOrder;
-                       si := GikoForm.SortIndex;
                        TListViewUtils.ListViewSort( nil, GikoForm.ListView,
                                GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
-                               so, si );
-                       GikoForm.SortIndex := si;
-                       GikoForm.SortOrder := so;
+                               True);
                        break;
                end;
        end;
@@ -3105,8 +3117,6 @@ end;
 procedure TGikoDM.SortPrevColumnActionExecute(Sender: TObject);
 var
        i, id   : Integer;
-       so : boolean;
-       si : Integer;
 begin
        for i := 0 to GikoForm.ListView.Columns.Count - 1 do begin
                if (GikoForm.ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
@@ -3114,14 +3124,9 @@ begin
                        id := i - 1;
                        if id < 0 then
                                id := GikoForm.ListView.Columns.Count - 1;
-                       GikoForm.SortOrder := id = 0;
-                       so := GikoForm.SortOrder;
-                       si := GikoForm.SortIndex;
                        TListViewUtils.ListViewSort( nil, GikoForm.ListView,
                                GikoForm.ListView.Column[ id ], ListNumberVisibleAction.Checked,
-                               so, si );
-                       GikoForm.SortIndex := si;
-                       GikoForm.SortOrder := so;
+                               True);
                        break;
                end;
        end;
index b5f14c5..f9e2a43 100644 (file)
@@ -19,14 +19,14 @@ type
                {Public \90é\8c¾}
                class procedure SetBoardTreeNode(inBBS : TBBS; treeView: TTreeView);
                class function SetCategoryListItem(ABBS2ch: TBBS; ListView: TListView;
-                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+                       NumberVisible: Boolean): Integer;
                class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
-                       NumberVisible: Boolean; var vSortOrder: Boolean;        var vSortIndex: Integer);
+                       NumberVisible: Boolean; vSortOrder: Boolean);
                class function  ActiveListTrueColumn( column : TListColumn ) : TListColumn;
                class function SetBoardListItem(Category: TCategory; ListView: TListView;
-                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+                       NumberVisible: Boolean): Integer;
                class function SetThreadListItem(Board: TBoard; ListView: TListView;
-                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+                       NumberVisible: Boolean): Integer;
                class procedure ListViewData(Sender: TObject; Item: TListItem);
        end;
 
@@ -141,9 +141,7 @@ end;
 class function TListViewUtils.SetCategoryListItem(
        ABBS2ch: TBBS;
        ListView: TListView;
-       NumberVisible: Boolean;
-       var vSortIndex: Integer;
-       var vSortOrder: Boolean
+       NumberVisible: Boolean
 ): Integer;
 var
        TitleColumn     : TListColumn;
@@ -183,12 +181,13 @@ begin
                GikoForm.FolderImage.Picture := nil;
                GikoForm.ItemIcon16.GetBitmap(1, GikoForm.FolderImage.Picture.Bitmap);
 
-               vSortIndex := GikoSys.Setting.BBSSortIndex;
-               vSortOrder := GikoSys.Setting.BBSSortOrder;
                for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if vSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+                       if (GikoSys.Setting.BBSSortIndex
+                                       = Integer(GikoSys.Setting.BBSColumnOrder[ ListView.Column[ i ].Tag ])) then begin
+                               ListViewSort( nil, ListView, ListView.Column[ i ],
+                                        NumberVisible, GikoSys.Setting.BBSSortOrder);
+                               Break;
+                       end;
                end;
 
                Result := ABBS2ch.Count;
@@ -202,11 +201,10 @@ class procedure TListViewUtils.ListViewSort(
        ListView: TListView;
        Column: TListColumn;
        NumberVisible: Boolean;
-       var vSortOrder: Boolean;
-       var vSortIndex: Integer
+       vSortOrder: Boolean
 );
 var
-       i, id, idx      : Integer;
+       i, idx  : Integer;
        orderList               : TList;
        wkBBS: TBBS;
        wkCategory: TCategory;
@@ -217,53 +215,41 @@ begin
        for i := 0 to ListView.Columns.Count - 1 do begin
                ListView.Column[i].ImageIndex := -1;
        end;
-
-       if SortOrder then
+       if vSortOrder then
                ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
        else
                ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
 
+
        Sort.SortNoFlag := NumberVisible;
 
-       //if TObject(TreeView.Selected.Data) is TBBS then begin
        if TObject( GikoForm.ActiveList ) is TBBS then begin
-               //wkBBS := TBBS(TreeView.Selected.Data);
                wkBBS := TBBS( GikoForm.ActiveList );
                orderList := GikoSys.Setting.BBSColumnOrder;
-               id := Integer( orderList[ idx ] );
                Sort.SortOrder := vSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.BBSSortIndex := id;
-               GikoSys.Setting.BBSSortOrder := vSortOrder;
+               Sort.SortIndex := Integer( orderList[ idx ] );
+               GikoSys.Setting.BBSSortIndex := Sort.SortIndex;
+               GikoSys.Setting.BBSSortOrder := Sort.SortOrder;
                wkBBS.Sort(Sort.CategorySortProc);
-       //end else if TObject(TreeView.Selected.Data) is TCategory then begin
        end else if TObject( GikoForm.ActiveList ) is TCategory then begin
-               //wkCategory := TCategory(TreeView.Selected.Data);
                wkCategory := TCategory( GikoForm.ActiveList );
                orderList := GikoSys.Setting.CategoryColumnOrder;
-               id := Integer( orderList[ idx ] );
                Sort.SortOrder := vSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.CategorySortIndex := id;
-               GikoSys.Setting.CategorySortOrder := vSortOrder;
+               Sort.SortIndex := Integer( orderList[ idx ] );
+               GikoSys.Setting.CategorySortIndex := Sort.SortIndex;
+               GikoSys.Setting.CategorySortOrder := Sort.SortOrder;
                wkCategory.CustomSort(BoardSortProc);
-       //end else if TObject(TreeView.Selected.Data) is TBoard then begin
        end else if TObject( GikoForm.ActiveList ) is TBoard then begin
-               //wkBoard := TBoard(TreeView.Selected.Data);
                wkBoard := TBoard( GikoForm.ActiveList );
                orderList := GikoSys.Setting.BoardColumnOrder;
-               id := Integer( orderList[ idx ] );
                Sort.SortOrder := vSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.BoardSortIndex := id;
-               GikoSys.Setting.BoardSortOrder := vSortOrder;
+               Sort.SortIndex := Integer( orderList[ idx ] );
+               GikoSys.Setting.BoardSortIndex := Sort.SortIndex;
+               GikoSys.Setting.BoardSortOrder := Sort.SortOrder;
                wkBoard.CustomSort(ThreadItemSortProc);
-       end else begin
-               id := 0;
        end;
 
        ListView.Refresh;
-       vSortIndex := id;
 end;
 
 {!
@@ -273,49 +259,16 @@ Delphi 6 Personal 
 \90³\82µ\82¢\83J\83\89\83\80\82ª\93n\82³\82ê\82È\82¢\82½\82ß\81A\90³\82µ\82¢\83J\83\89\83\80\82É\95Ï\8a·\82µ\82Ü\82·\81B
 }
 class function TListViewUtils.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
-{*
-var
-       i, idx          : Integer;
-       orderList       : TList;
-*}
 begin
-
        // \90³\82µ\82­\95Ï\8a·\82·\82é\95û\96@\82ª\95ª\82©\82ç\82È\82¢\82Ì\82Å\95Û\97¯
        Result := column;
        Exit;
-{*
-       Result := column;
-
-       if TObject( FActiveList ) is TBBS then
-               orderList := GikoSys.Setting.BBSColumnOrder
-       else if TObject( FActiveList ) is TCategory then
-               orderList := GikoSys.Setting.CategoryColumnOrder
-       else if TObject( FActiveList ) is TBoard then
-               orderList := GikoSys.Setting.BoardColumnOrder
-       else
-               Exit;
-
-       idx := column.Tag;
-
-       for i := 0 to ListView.Columns.Count - 1 do begin
-               if Integer( orderList[ ListView.Column[ i ].Tag ] ) = 0 then begin
-                       if idx = 0 then
-                               Result := ListView.Column[ i ]
-                       else if idx <= i then
-                               Result := ListView.Column[ idx - 1 ];
-                       Exit;
-               end;
-       end;
-*}
-
 end;
 //ListView\82ÉBoardItem\82ð\90Ý\92è\82·\82é
 class function TListViewUtils.SetBoardListItem(
        Category: TCategory;
        ListView: TListView;
-       NumberVisible: Boolean;
-       var vSortIndex: Integer;
-       var vSortOrder: Boolean
+       NumberVisible: Boolean
 ): Integer;
 var
        TitleColumn     : TListColumn;
@@ -370,12 +323,13 @@ begin
                GikoForm.FolderImage.Picture := nil;
                GikoForm.ItemIcon16.GetBitmap(3, GikoForm.FolderImage.Picture.Bitmap);
 
-               vSortIndex := GikoSys.Setting.CategorySortIndex;
-               vSortOrder := GikoSys.Setting.CategorySortOrder;
                for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if vSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+                       if (GikoSys.Setting.CategorySortIndex =
+                               Integer( GikoSys.Setting.CategoryColumnOrder[ ListView.Columns[i].Tag ] )) then begin
+                               ListViewSort( nil, ListView, ListView.Column[ i ],
+                                        NumberVisible, GikoSys.Setting.CategorySortOrder);
+                               Break;
+                       end;
                end;
 
                Result := Category.Count;
@@ -387,9 +341,7 @@ end;
 class function TListViewUtils.SetThreadListItem(
        Board: TBoard;
        ListView: TListView;
-       NumberVisible: Boolean;
-       var vSortIndex: Integer;
-       var vSortOrder: Boolean
+       NumberVisible: Boolean
 ): Integer;
 var
        TitleColumn     : TListColumn;
@@ -464,12 +416,13 @@ begin
                GikoForm.FolderImage.Picture := nil;
                GikoForm.ItemIcon16.GetBitmap(5, GikoForm.FolderImage.Picture.Bitmap);
 
-               vSortIndex := GikoSys.Setting.BoardSortIndex;
-               vSortOrder := GikoSys.Setting.BoardSortOrder;
                for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if vSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+                       if (GikoSys.Setting.BoardSortIndex
+                               = Integer( GikoSys.Setting.BoardColumnOrder[ ListView.Columns[ i ].Tag ] )) then begin
+                               ListViewSort( nil, ListView, ListView.Column[ i ],
+                                        NumberVisible, GikoSys.Setting.BoardSortOrder);
+                               Break;
+                       end;
                end;
 
                Result := Board.Count;