OSDN Git Service

・板一覧更新の処理メッセージを追加
[gikonavigoeson/gikonavi.git] / FavoriteArrange.pas
index 114a7e8..456148a 100644 (file)
@@ -5,7 +5,7 @@ interface
 uses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, ComCtrls, StdCtrls, ExtCtrls, Favorite, ImgList, NewFavoriteFolder,
-       GikoSystem, GikoUtil;
+       GikoSystem, GikoUtil, Menus;
 
 type
   TFavoriteArrangeDialog = class(TForm)
@@ -19,6 +19,16 @@ type
     FolderTreeView: TTreeView;
     Panel4: TPanel;
     CloseButton: TButton;
+    SortPopupMenu: TPopupMenu;
+    SortAscName: TMenuItem;
+    SortDscName: TMenuItem;
+    N1: TMenuItem;
+    SortURL: TMenuItem;
+    SortAscURL: TMenuItem;
+    SortDscURL: TMenuItem;
+    SortTitle: TMenuItem;
+    SortAscTitle: TMenuItem;
+    SortDscTitle: TMenuItem;
     procedure CloseButtonClick(Sender: TObject);
     procedure FormCreate(Sender: TObject);
     procedure NewFolderButtonClick(Sender: TObject);
@@ -31,11 +41,15 @@ type
                procedure FolderTreeViewDragDrop(Sender, Source: TObject; X,
                        Y: Integer);
                procedure FormDestroy(Sender: TObject);
+    procedure SortDscNameClick(Sender: TObject);
+    procedure SortAscNameClick(Sender: TObject);
+    procedure SortDscURLClick(Sender: TObject);
+    procedure SortAscURLClick(Sender: TObject);
+    procedure SortDscTitleClick(Sender: TObject);
+    procedure SortAscTitleClick(Sender: TObject);
        private
                { Private \90é\8c¾ }
-//             FDragNode: TTreeNode;
                FDeleteList: TList;
-//             procedure PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
                procedure SetDeleteItemList(Node: TTreeNode);
        public
                { Public \90é\8c¾ }
@@ -44,10 +58,19 @@ type
 var
        FavoriteArrangeDialog: TFavoriteArrangeDialog;
 
+function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer; stdcall;
+
 implementation
 
 uses Giko;
 
+const
+    SORT_ASC    = 0;
+    SORT_DSC    = 1;
+    SORT_NAME   = 8;
+    SORT_URL    = 16;
+    SORT_TITLE  = 32;
+
 {$R *.dfm}
 
 procedure TFavoriteArrangeDialog.CloseButtonClick(Sender: TObject);
@@ -56,7 +79,18 @@ begin
 end;
 
 procedure TFavoriteArrangeDialog.FormCreate(Sender: TObject);
+var
+    CenterForm: TCustomForm;
 begin
+    CenterForm := TCustomForm(Owner);
+    if Assigned(CenterForm) then begin
+        Left := ((CenterForm.Width - Width) div 2) + CenterForm.Left;
+        Top := ((CenterForm.Height - Height) div 2) + CenterForm.Top;
+    end else begin
+        Left := (Screen.Width - Width) div 2;
+        Top := (Screen.Height - Height) div 2;
+    end;
+
        FDeleteList := TList.Create;
        FolderTreeView.Items := FavoriteDM.TreeView.Items;
 
@@ -64,45 +98,8 @@ begin
                FolderTreeView.Items.GetFirstNode.Expanded := True;
                FolderTreeView.Items.GetFirstNode.Selected := True;
        end;
-
-
-{      Node := FolderTreeView.Items.AddChild(nil, GikoForm.Favorite.Root.Title);
-       Node.ImageIndex := 0;
-       Node.Data := GikoForm.Favorite.Root;
-       PrepareFavoriteTree(GikoForm.Favorite.Root, Node);
-       Node.Expanded := True;
-       Node.Selected := True;}
 end;
 
-{procedure TFavoriteArrangeDialog.PrepareFavoriteTree(Favo: TFavoriteItem; Node: TTreeNode);
-var
-       i: Integer;
-       ChildFavo: TFavoriteItem;
-       ChildNode: TTreeNode;
-begin
-{      for i := 0 to TFavoriteFolder(Favo).Count - 1 do begin
-
-               ChildFavo := TFavoriteFolder(Favo).Items[i];
-               if ChildFavo is TFavoriteFolder then begin
-                       ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
-                       ChildNode.ImageIndex := 0;
-                       ChildNode.SelectedIndex := 0;
-                       ChildNode.Data := ChildFavo;
-                       PrepareFavoriteTree(ChildFavo, ChildNode);
-               end else if ChildFavo is TFavoriteBoardItem then begin
-                       ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
-                       ChildNode.ImageIndex := 1;
-                       ChildNode.SelectedIndex := 1;
-                       ChildNode.Data := ChildFavo;
-               end else if ChildFavo is TFavoriteThreadItem then begin
-                       ChildNode := FolderTreeView.Items.AddChild(Node, ChildFavo.Title);
-                       ChildNode.ImageIndex := 2;
-                       ChildNode.SelectedIndex := 2;
-                       ChildNode.Data := ChildFavo;
-               end;
-       end;
-end;  }
-
 procedure TFavoriteArrangeDialog.NewFolderButtonClick(Sender: TObject);
 var
        Dlg: TNewFavoriteFolderDialog;
@@ -229,5 +226,128 @@ begin
                        SetDeleteItemList(Node.item[i]);
        end;
 end;
+{
+\brief  \83c\83\8a\81[\82Ì\83\\81[\83g\8f\88\97\9d
+\pram   Node1   \83m\81[\83h
+\param  Node2   \83m\81[\83h
+\param  Data    \83\\81[\83g\83I\83v\83V\83\87\83\93
+\return Node1(>0) Node1=Node2(=0)  Node2(<0)
+}
+function SortProc(Node1, Node2: TTreeNode; Data: Longint): Integer;
+stdcall;
+var
+    folder1, folder2 : TFavoriteFolder;
+    item1, item2 : TFavoriteItem;
+begin
+    if (TObject(Node1.Data) is TFavoriteItem) then begin
+        item1 := TFavoriteItem(Node1.Data);
+        folder1 := nil;
+    end else begin
+        item1 := nil;
+        folder1 := TFavoriteFolder(Node1.Data);
+    end;
+    if (TObject(Node2.Data) is TFavoriteItem) then begin
+        item2 := TFavoriteItem(Node2.Data);
+        folder2 := nil;
+    end else begin
+        item2 := nil;
+        folder2 := TFavoriteFolder(Node2.Data);
+    end;
+
+    if (folder1 <> nil) and (folder2 = nil) then begin
+        Result := 1;
+    end else
+    if (folder1 = nil) and (folder2 <> nil) then begin
+        Result := -1;
+    end else begin
+        Result := 0;
+        if (folder1 <> nil) and (folder2 <> nil) then begin
+            Result := CompareStr(Node1.Text, Node2.Text);
+        end else
+        if (folder1 = nil) and (folder2 = nil) then begin
+            if ((Data and SORT_NAME) > 0) then begin
+                Result := CompareStr(Node1.Text, Node2.Text);
+            end else
+            if ((Data and SORT_URL) > 0) then begin
+                Result := CompareStr(item1.URL, item2.URL);
+            end else
+            if ((Data and SORT_TITLE) > 0) then begin
+                Result := CompareStr(item1.Title, item2.Title);
+            end;
+        end;
+        if ((Data and SORT_DSC) > 0) then begin
+            Result := -1 * Result;
+        end;
+    end;
+end;
+
+{
+\brief  \96¼\91O\82Ì\8d~\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortDscNameClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_NAME or SORT_DSC, False);
+    end;
+end;
+
+{
+\brief  \96¼\91O\82Ì\8f¸\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortAscNameClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_NAME or SORT_ASC, False);
+    end;
+end;
+{
+\brief  URL\82Ì\8d~\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortDscURLClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_URL or SORT_DSC, False);
+    end;
+end;
+{
+\brief  URL\82Ì\8f¸\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortAscURLClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_URL or SORT_ASC, False);
+    end;
+end;
+{
+\brief  \83^\83C\83g\83\8b\82Ì\8d~\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortDscTitleClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_TITLE or SORT_DSC, False);
+    end;
+end;
+{
+\brief  \83^\83C\83g\83\8b\82Ì\8f¸\8f\87\83\\81[\83g
+}
+procedure TFavoriteArrangeDialog.SortAscTitleClick(Sender: TObject);
+begin
+       if (FolderTreeView.Selected <> nil) and
+        (TObject(FolderTreeView.Selected.Data) is TFavoriteFolder) then begin
+        FolderTreeView.Selected
+            .CustomSort(@SortProc, SORT_TITLE or SORT_ASC, False);
+    end;
+end;
 
 end.
+