WikiFAQWebPageAction: TAction;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
- procedure CabinetPanelHide(Sender: TObject);
- procedure ListViewData(Sender: TObject; Item: TListItem);
- procedure ListViewDataFind(Sender: TObject; Find: TItemFind;
- const FindString: String; const FindPosition: TPoint;
- FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection;
- Wrap: Boolean; var Index: Integer);
- procedure ListViewDataHint(Sender: TObject; StartIndex,
- EndIndex: Integer);
- procedure ListViewDataStateChange(Sender: TObject; StartIndex,
- EndIndex: Integer; OldState, NewState: TItemStates);
procedure BrowserStatusTextChange(Sender: TObject;
const Text: WideString);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ListViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
- procedure ListViewSort(Sender: TObject; Column: TListColumn);
procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
Button: TToolButton; State: TCustomDrawState;
var DefaultDraw: Boolean);
procedure FavoriteTreeViewDeleteActionExecute(Sender: TObject);
procedure FavoriteTreeViewRenameActionExecute(Sender: TObject);
procedure FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
- procedure ToolButton19Click(Sender: TObject);
procedure FavoriteTreeViewBrowseFolderActionExecute(Sender: TObject);
procedure FavoriteTreeViewDblClick(Sender: TObject);
procedure FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
FIsHandledWheel : Boolean; ///< \8aù\82É\8eó\82¯\8eæ\82Á\82½ WM_MOUSEWHEEL \82©\82Ç\82¤\82©
DiffComp: Boolean; //Add by Genyakun \83X\83\8c\82ª\8dX\90V\82³\82ê\82½\82Æ\82«\82ÉTrue\82É\82È\82é
FOrigenCaption: String; //\82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83A\83C\83e\83\80\95Ò\8fW\8e\9e\82Ì\95Ò\8fW\91O\82Ì\95¶\8e\9a\97ñ
- procedure SetBoardTreeNode( inBBS : TBBS );
- function SetCategoryListItem(ABBS2ch: TBBS): Integer;
- function SetBoardListItem(Category: TCategory): Integer;
- function SetThreadListItem(Board: TBoard): Integer;
-// function GetRoundName(index: integer): string;
-
procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
uses
About, Option, Round, Splash, Sort, ListSelect, Imm,
NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
- HTMLCreate;
+ HTMLCreate, ListViewUtils;
const
CAPTION_NAME: string = '\83M\83R\83i\83r';
//D&D臒l
DandD_THRESHOLD = 5; //D&D\82Ìè\87\92l\81ipixcel)
//\83c\83\8a\81[\81E\83\8a\83X\83g\83A\83C\83R\83\93
- ITEM_ICON_2CH1 = 0; //2ch\83A\83C\83R\83\93
- ITEM_ICON_2CH2 = 1; //2ch\83A\83C\83R\83\93
+ //ITEM_ICON_2CH1 = 0; //2ch\83A\83C\83R\83\93
+ //ITEM_ICON_2CH2 = 1; //2ch\83A\83C\83R\83\93
ITEM_ICON_CATEGORY1 = 2; //\83J\83e\83S\83\8a\83A\83C\83R\83\93
ITEM_ICON_CATEGORY2 = 3; //\83J\83e\83S\83\8a\83A\83C\83R\83\93
ITEM_ICON_BOARD_NOSUBJECT = 3; //\93Ç\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82È\82¢\94Â\83A\83C\83R\83\93
//ResHint
FHint := TResPopup.Create(Self);
+ ListView.OnData := TListViewUtils.ListViewData;
+
// \8dÅ\8cã\82É\91I\91ð\82³\82ê\82½\83L\83\83\83r\83l\83b\83g\82Ì\95\9c\8c³
CabinetVisible( False );
if GikoSys.Setting.CabinetVisible then begin
end;
end;
-
-//
-//
//
procedure TGikoForm.FormShow(Sender: TObject);
begin
LockWindowUpdate(0);
end;
-//\83L\83\83\83r\83l\83b\83g\81~\83{\83^\83\93\83N\83\8a\83b\83N
-procedure TGikoForm.CabinetPanelHide(Sender: TObject);
-begin
- CabinetVisibleAction.Execute;
-// CabinetPanelVisible(false);
-end;
-
// \8ae\8f\8a\82É\82 \82é\83L\83\83\83r\83l\83b\83g\81E BBS \83\81\83j\83\85\81[\82ð\83Z\83b\83g\81^\8dX\90V
procedure TGikoForm.SetBBSMenu;
var
TabsOpenAction.Execute;
end;
-//\83{\81[\83h\83c\83\8a\81[\90Ý\92è
-procedure TGikoForm.SetBoardTreeNode(
- inBBS : TBBS
-);
-var
- i, j, k: integer;
- Root: TTreeNode;
- CategoryNode: TTreeNode;
- BoardNode: TTreeNode;
- Category: TCategory;
- Board: TBoard;
-begin
- // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
- FActiveBBS := inBBS;
- TreeView.Items.BeginUpdate;
- TreeView.Items.Clear;
- try
- if not inBBS.IsBoardFileRead then
- GikoSys.ReadBoardFile( inBBS );
- try
- //if SplashWindow <> nil then
- //SplashWindow.ProgressBar.Max := inBBS.Count;
- // SplashWindow.ProgressBar.Max := inBBS.Count + Length(BBSs) * 20;
- except
- end;
-
- // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
- if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
- Sort.SortOrder := true;
- Sort.SortIndex := 0;
- Sort.SortNoFlag := true;
- inBBS.Sort(CategorySortProc);
- end;
-
- Root := TreeView.Items.Add( nil, inBBS.Title );
- Root.ImageIndex := ITEM_ICON_2CH1;
- Root.SelectedIndex := ITEM_ICON_2CH2;
- Root.Data := inBBS;
- for i := inBBS.Count - 1 downto 0 do begin
- Category := TCategory(inBBS.Items[i]);
- CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
- CategoryNode.Data := Category;
- CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
- CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
-
- // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
- if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
- Sort.SortOrder := true;
- Sort.SortIndex := 0;
- Sort.SortNoFlag := true;
- Category.CustomSort(BoardSortProc);
- end;
-
- for j := Category.Count - 1 downto 0 do begin
- Board := TBoard(Category.Items[j]);
- Board.BeginUpdate;
- BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
- BoardNode.Data := Board;
- //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
- if not Board.IsLogFile then begin
- BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
- BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
- end else begin
- BoardNode.ImageIndex := ITEM_ICON_BOARD1;
- BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
- for k := 0 to Board.Count - 1 do begin
- if Board.Items[ k ].IsLogFile then begin
- BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
- BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
-
- Break;
- end;
- end;
- end;
- Board.EndUpdate;
- end;
-
- CategoryNode.Expanded := Category.NodeExpand;
-
- //if SplashWindow <> nil then begin
- // SplashWindow.ProgressBar.StepIt;
- //Application.ProcessMessages;
- // SplashWindow.Update;
- //end;
- end;
- finally
- TreeView.Items.EndUpdate;
- end;
-end;
-
-function TGikoForm.SetCategoryListItem(ABBS2ch: TBBS): Integer;
-var
- TitleColumn : TListColumn;
- ListColumn : TListColumn;
- i, id, idx : Integer;
-begin
- ListView.Items.BeginUpdate;
- try
- Screen.Cursor := crHourGlass;
-
- ListView.Columns.Clear;
- TitleColumn := ListView.Columns.Add;
- TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
- TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
- idx := 0;
- for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
- if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
- TitleColumn.Tag := i;
- idx := i;
- end else begin
- id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
- if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
- (id <= Integer( High( TGikoBBSColumnID ) )) then begin
- ListColumn := ListView.Columns.Add;
- // ListColumn.Tag := id;
- ListColumn.Tag := i;
- ListColumn.Caption := GikoBBSColumnCaption[ id ];
- ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
- end;
- end;
- end;
- TitleColumn.Index := idx;
-
- ListView.Items.Count := 0;
- ListView.Items.Clear;
- ListView.Items.Count := ABBS2ch.Count;
-
-// UpFolderAction.Enabled := False;
-// AllItemAction.Enabled := False;
-// LogItemAction.Enabled := False;
-// NewItemAction.Enabled := False;
-// SelectItemAction.Enabled := False;
-// ListDownloadToolButton.Enabled := False;
-// BoardReservToolButton.Enabled := False;
-// ListThreadDownloadToolButton.Enabled := False;
-
- ListNameLabel.Caption := ABBS2ch.Title;
- FolderImage.Picture := nil;
- ItemIcon16.GetBitmap(1, FolderImage.Picture.Bitmap);
-
- FSortIndex := GikoSys.Setting.BBSSortIndex;
- FSortOrder := GikoSys.Setting.BBSSortOrder;
- for i := ListView.Columns.Count - 1 downto 0 do begin
- idx := ListView.Column[ i ].Tag;
- if FSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
- ListViewSort( nil, ListView.Column[ i ] );
- end;
-
- Result := ABBS2ch.Count;
- finally
- Screen.Cursor := crDefault;
- ListView.Items.EndUpdate;
- end;
-end;
-
-function TGikoForm.SetBoardListItem(Category: TCategory): Integer;
-var
- TitleColumn : TListColumn;
- ListColumn : TListColumn;
- i, id, idx : Integer;
-begin
- ListView.Items.BeginUpdate;
- try
- Screen.Cursor := crHourGlass;
-
- ListView.Columns.Clear;
- TitleColumn := ListView.Columns.Add;
- TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
- TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
- idx := 0;
- for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
- if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
- TitleColumn.Tag := i;
- idx := i;
- end else begin
- id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
- if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
- (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
- ListColumn := ListView.Columns.Add;
-// ListColumn.Tag := id;
- ListColumn.Tag := i;
- ListColumn.Caption := GikoCategoryColumnCaption[ id ];
- ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
- end;
- end;
- end;
- TitleColumn.Index := idx;
-
- ListView.Items.Count := 0;
- ListView.Items.Clear;
- ListView.Items.Count := Category.Count;
-
- for i := Category.Count - 1 downto 0 do begin
- if( Category.Items[i].ParentCategory <> Category ) then begin
- Category.Items[i].ParentCategory := Category;
- Category.Items[i].No := i + 1;
- end;
- end;
-// UpFolderAction.Enabled := True;
-// AllItemAction.Enabled := False;
-// LogItemAction.Enabled := False;
-// NewItemAction.Enabled := False;
-// SelectItemAction.Enabled := False;
-// ListDownloadToolButton.Enabled := False;
-// BoardReservToolButton.Enabled := False;
-// ListThreadDownloadToolButton.Enabled := False;
-
- ListNameLabel.Caption := Category.Title;
- FolderImage.Picture := nil;
- ItemIcon16.GetBitmap(3, FolderImage.Picture.Bitmap);
-
- FSortIndex := GikoSys.Setting.CategorySortIndex;
- FSortOrder := GikoSys.Setting.CategorySortOrder;
- for i := ListView.Columns.Count - 1 downto 0 do begin
- idx := ListView.Column[ i ].Tag;
- if FSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
- ListViewSort( nil, ListView.Column[ i ] );
- end;
-
- Result := Category.Count;
- finally
- Screen.Cursor := crDefault;
- ListView.Items.EndUpdate;
- end;
-end;
-
-function TGikoForm.SetThreadListItem(Board: TBoard): Integer;
-var
- TitleColumn : TListColumn;
- ListColumn : TListColumn;
- i, id, idx : Integer;
-begin
- ListView.Items.BeginUpdate;
- try
- Screen.Cursor := crHourGlass;
-
-{*
- // \83`\83\89\82Â\82«\96h\8e~\82Ì\82½\82ß\81A\95Ï\8dX\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Ì\82Ý
- // \81¦\96¼\8fÌ\82Í\88á\82¤\82ª\83J\83\89\83\80\90\94\82ª\93¯\82¶\81A\82Æ\82¢\82Á\82½\8fê\8d\87\82É\91Î\8f\88\82Å\82«\82È\82¢\82Ì\82Å\92\8d\88Ó
- if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
-*}
- begin
- ListView.Columns.Clear;
- TitleColumn := ListView.Columns.Add;
- TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
- TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
- idx := 0;
- for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
- if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
- TitleColumn.Tag := i;
- idx := i;
- end else begin
- id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
- if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
- (id <= Integer( High( TGikoBoardColumnID ) )) then begin
- ListColumn := ListView.Columns.Add;
- ListColumn.Caption := GikoBoardColumnCaption[ id ];
- // ListColumn.Tag := id;
- ListColumn.Tag := i;
- ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
- ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
- end;
- end;
- end;
- TitleColumn.Index := idx;
- end;
-
- ListView.Items.Count := 0;
- ListView.Items.Clear;
-
- {case GikoForm.ViewType of
- gvtAll: ListView.Items.Count := Board.Count;
- gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
- gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
- gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
- end;
- }
- case GikoForm.ViewType of
- gvtAll: ListView.Items.Count := Board.Count;
- gvtLog:
- begin
- Board.LogThreadCount := Board.GetLogThreadCount;
- ListView.Items.Count := Board.LogThreadCount;
- end;
- gvtNew:
- begin
- Board.NewThreadCount := Board.GetNewThreadCount;
- ListView.Items.Count := Board.NewThreadCount;
- end;
- gvtUser:
- begin
- Board.UserThreadCount:= Board.GetUserThreadCount;
- ListView.Items.Count := Board.UserThreadCount;
- end;
- end;
-
- ListNameLabel.Caption := Board.Title;
- FolderImage.Picture := nil;
- ItemIcon16.GetBitmap(5, FolderImage.Picture.Bitmap);
-
- FSortIndex := GikoSys.Setting.BoardSortIndex;
- FSortOrder := GikoSys.Setting.BoardSortOrder;
- for i := ListView.Columns.Count - 1 downto 0 do begin
- idx := ListView.Column[ i ].Tag;
- if FSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
- ListViewSort( nil, ListView.Column[ i ] );
- end;
-
- Result := Board.Count;
- finally
- Screen.Cursor := crDefault;
- ListView.Items.EndUpdate;
- end;
-end;
-
-procedure TGikoForm.ListViewData(Sender: TObject; Item: TListItem);
-var
-// FileName: string;
-// DateTime: TDateTime;
- BoardCnt: Integer;
- BBS: TBBS;
- Category: TCategory;
- Board: TBoard;
- ThreadItem: TThreadItem;
- RepStr: string;
- ActivListObj : TObject;
- i, idx : Integer;
-begin
- ActivListObj := ActiveList;
- if ActivListObj is TBBS then begin
- //===== \83J\83e\83S\83\8a\83\8a\83X\83g =====
- BBS := TBBS(ActivListObj);
-
- ListView.StateImages := nil;
-
- if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
- or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
- or (not (BBS.Items[Item.index] is TCategory)) then Exit;
- //if BBS.Count <= 0 then Exit;
- //if Item = nil then Exit;
- //if Item.Index >= BBS.Count then Exit;
- //if ListView.Items.Count = 0 then Exit;
-
- //if not (BBS.Items[Item.index] is TCategory) then Exit;
- Category := TCategory(BBS.Items[Item.index]);
-
- if Category = nil then Exit;
-
- if ListNumberVisibleAction.Checked then
- Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
- else
- Item.Caption := Category.Title;
-
- Item.ImageIndex := ITEM_ICON_CATEGORY1;
- Item.Data := Category;
-
- end else if ActivListObj is TCategory then begin
-
- //===== \94Â\83\8a\83X\83g =====
- Category := TCategory(ActivListObj);
-
- ListView.StateImages := nil;
-
- if (Category = nil) or (Category.Count <= 0) or (Item = nil)
- or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
- or (not (Category.Items[Item.Index] is TBoard)) then Exit;
- //if Category.Count <= 0 then Exit;
- //if Item = nil then Exit;
- //if Item.Index >= Category.Count then Exit;
- //if ListView.Items.Count = 0 then Exit;
-
- //if not (Category.Items[Item.Index] is TBoard) then Exit;
- Board := TBoard(Category.Items[Item.Index]);
-
- if Board = nil then Exit;
-
- if ListNumberVisibleAction.Checked then
- Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
- //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
- else
- Item.Caption := Board.Title;
-
- if Item.SubItems.Count <> ListView.Columns.Count then begin
- Item.SubItems.Clear;
- Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
- for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
- Item.SubItems.Add('');
- end;
-
- Item.ImageIndex := ITEM_ICON_BOARD1;
- idx := 0;
- for i := 0 to ListView.Columns.Count - 1 do begin
- if GikoSys.Setting.CategoryColumnOrder.Count <= i then
- Break;
-// case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
- case GikoSys.Setting.CategoryColumnOrder[ i ] of
- gccTitle:
- // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
- Dec( idx );
-
- gccRoundName:
- if Board.Round then
- Item.SubItems[ idx ] := Board.RoundName // '\97\\96ñ'
- else
- Item.SubItems[ idx ] := '';
-
- gccLastModified:
- if Board.RoundDate = ZERO_DATE then begin
- Item.SubItems[ idx ] := '';
- end else
- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
- end;
- Inc( idx );
- end;
-
- Item.Data := Board;
-
- end else if ActivListObj is TBoard then begin
-
- //===== \83X\83\8c\83\8a\83X\83g =====
- Board := TBoard(ActivListObj);
-
- if GikoSys.Setting.ListIconVisible then
- ListView.StateImages := StateIconImageList
- else
- ListView.StateImages := nil;
-
-
- case GikoForm.ViewType of
- gvtAll: BoardCnt := Board.Count;
- gvtLog: BoardCnt := Board.LogThreadCount;
- gvtNew: BoardCnt := Board.NewThreadCount;
- gvtUser: BoardCnt := Board.UserThreadCount;
- else
- BoardCnt := 0;
- end;
- {
- case GikoForm.ViewType of
- gvtAll: BoardCnt := Board.Count;
- gvtLog: BoardCnt := Board.GetLogThreadCount;
- gvtNew: BoardCnt := Board.GetNewThreadCount;
- gvtUser: BoardCnt := Board.GetUserThreadCount;
- else
- BoardCnt := 0;
- end;
- }
-// if Board = nil then Exit;
- if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
- or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
-
- //\89ü\91P\82·\82×\82«\83u\83\8d\83b\83N/////////////////////////////////////////////////////
- ThreadItem := nil;
- case GikoForm.ViewType of
- gvtAll: if Item.Index >= Board.Count then Exit else
- ThreadItem := TThreadItem(Board.Items[Item.Index]);
- gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
- gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
- gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
- end;
- //////////////////////////////////////////////////////////////////////////
-
- if ThreadItem = nil then Exit;
-
- RepStr := CustomStringReplace(ThreadItem.Title, '<', '<' );
- RepStr := CustomStringReplace(RepStr, '>', '>' );
- RepStr := CustomStringReplace(RepStr, '"', '"' );
- RepStr := CustomStringReplace(RepStr, '&', '&' );
- //RepStr := StringReplace(RepStr, '\81\97\81M', ',', [rfReplaceAll]);
- if Item.SubItems.Count <> ListView.Columns.Count then begin
- Item.SubItems.Clear;
- Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
- for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
- Item.SubItems.Add('');
- end;
-
- if ListNumberVisibleAction.Checked then
- Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
- else
- Item.Caption := RepStr;
-
- case ThreadItem.AgeSage of
- gasNone: Item.StateIndex := -1;
- gasNew: Item.StateIndex := 0;
- gasAge: Item.StateIndex := 1;
- gasSage: Item.StateIndex := 2;
- end;
-
- if ThreadItem.IsLogFile then begin
- idx := 0;
- for i := 0 to ListView.Columns.Count - 1 do begin
- if GikoSys.Setting.BoardColumnOrder.Count <= i then
- Break;
-// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
- case GikoSys.Setting.BoardColumnOrder[ i ] of
- gbcTitle:
- // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
- Dec( idx );
-
- gbcAllCount:
- Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
-
- gbcLocalCount:
- Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
-
- gbcNonAcqCount:
- Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
-
- gbcNewCount:
- if ThreadItem.NewResCount = 0 then
- Item.SubItems[ idx ] := ''
- else
- Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
-
- gbcUnReadCount:
- Item.SubItems[ idx ] := '';
-
- gbcRoundName:
- if ThreadItem.Round then
- Item.SubItems[ idx ] := ThreadItem.RoundName
- else
- Item.SubItems[ idx ] := '';
-
- gbcRoundDate://gbcLastModified:
- if (ThreadItem.RoundDate = ZERO_DATE) then begin
- Item.SubItems[ idx ] := '';
- end else
- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
-
- gbcCreated:
- if ThreadItem.CreateDate = ZERO_DATE then begin
- Item.SubItems[ idx ] := '';
- end else
- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
-
- gbcLastModified:
- if (ThreadItem.LastModified = ZERO_DATE) then begin
- Item.SubItems[ idx ] := '';
- end else
- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
-
-
- end;
- Inc( idx );
- end;
-
- if ThreadItem.NewArrival then
- Item.ImageIndex := ITEM_ICON_THREADNEW1
- else
- Item.ImageIndex := ITEM_ICON_THREADLOG1;
-
-
- end else begin
- idx := 0;
- for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
-// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
- case GikoSys.Setting.BoardColumnOrder[ i ] of
- gbcTitle:
- // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
- Dec( idx );
-
- gbcAllCount:
- Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
-
- gbcRoundDate://gbcLastModified:
- Item.SubItems[ idx ] := '';
-
- gbcCreated:
- if ThreadItem.CreateDate = ZERO_DATE then begin
- Item.SubItems[ idx ] := '';
- end else
- Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
-
- gbcLastModified:
- Item.SubItems[ idx ] := '';
-
- else
- Item.SubItems[ idx ] := '';
- end;
- Inc( idx );
- end;
- if ThreadItem.NewArrival then
- Item.ImageIndex := ITEM_ICON_THREADNEW1
- else
- Item.ImageIndex := ITEM_ICON_THREAD1;
- end;
-
- Item.Data := ThreadItem;
-
- end;
-end;
-
-procedure TGikoForm.ListViewDataFind(Sender: TObject; Find: TItemFind;
- const FindString: String; const FindPosition: TPoint; FindData: Pointer;
- StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
- var Index: Integer);
-begin
-
-//
-end;
-
-procedure TGikoForm.ListViewDataHint(Sender: TObject; StartIndex,
- EndIndex: Integer);
-begin
-//
-end;
-
-procedure TGikoForm.ListViewDataStateChange(Sender: TObject; StartIndex,
- EndIndex: Integer; OldState, NewState: TItemStates);
-begin
-//
-end;
procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
var
FSortOrder := id = 0;
end;
- ListViewSort(Sender, Column);
-end;
-
-procedure TGikoForm.ListViewSort(Sender: TObject; Column: TListColumn);
-var
- i, id, idx : Integer;
- orderList : TList;
- wkBBS: TBBS;
- wkCategory: TCategory;
- wkBoard: TBoard;
-begin
- idx := ActiveListTrueColumn( Column ).Tag;
-
- for i := 0 to ListView.Columns.Count - 1 do begin
- ListView.Column[i].ImageIndex := -1;
- end;
-
- if FSortOrder then
- ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
- else
- ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
-
- Sort.SortNoFlag := ListNumberVisibleAction.Checked;
-
- //if TObject(TreeView.Selected.Data) is TBBS then begin
- if TObject( FActiveList ) is TBBS then begin
- //wkBBS := TBBS(TreeView.Selected.Data);
- wkBBS := TBBS( FActiveList );
- orderList := GikoSys.Setting.BBSColumnOrder;
- id := Integer( orderList[ idx ] );
- Sort.SortOrder := FSortOrder;
- Sort.SortIndex := id;
- GikoSys.Setting.BBSSortIndex := id;
- GikoSys.Setting.BBSSortOrder := FSortOrder;
- wkBBS.Sort(CategorySortProc);
- //end else if TObject(TreeView.Selected.Data) is TCategory then begin
- end else if TObject( FActiveList ) is TCategory then begin
- //wkCategory := TCategory(TreeView.Selected.Data);
- wkCategory := TCategory( FActiveList );
- orderList := GikoSys.Setting.CategoryColumnOrder;
- id := Integer( orderList[ idx ] );
- Sort.SortOrder := FSortOrder;
- Sort.SortIndex := id;
- GikoSys.Setting.CategorySortIndex := id;
- GikoSys.Setting.CategorySortOrder := FSortOrder;
- wkCategory.CustomSort(BoardSortProc);
- //end else if TObject(TreeView.Selected.Data) is TBoard then begin
- end else if TObject( FActiveList ) is TBoard then begin
- //wkBoard := TBoard(TreeView.Selected.Data);
- wkBoard := TBoard( FActiveList );
- orderList := GikoSys.Setting.BoardColumnOrder;
- id := Integer( orderList[ idx ] );
- Sort.SortOrder := FSortOrder;
- Sort.SortIndex := id;
- GikoSys.Setting.BoardSortIndex := id;
- GikoSys.Setting.BoardSortOrder := FSortOrder;
- wkBoard.CustomSort(ThreadItemSortProc);
- end else begin
- id := 0;
- end;
-
- ListView.Refresh;
- FSortIndex := id;
+ TListViewUtils.ListViewSort(Sender, ListView, Column, ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
end;
procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
// ActiveListColumnSave;
- if Obj is TBBS then begin
- SetCategoryListItem(TBBS(Obj));
- end else if Obj is TCategory then begin
- SetBoardListItem(TCategory(Obj));
- end else if Obj is TBoard then begin
- SetThreadListItem(TBoard(Obj));
+ Screen.Cursor := crHourGlass;
+ try
+ if Obj is TBBS then begin
+ TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, ListNumberVisibleAction.Checked,
+ FSortIndex, FSortOrder);
+ end else if Obj is TCategory then begin
+ TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, ListNumberVisibleAction.Checked,
+ FSortIndex, FSortOrder);
+ end else if Obj is TBoard then begin
+ TListViewUtils.SetThreadListItem(TBoard(Obj), ListView, ListNumberVisibleAction.Checked,
+ FSortIndex, FSortOrder);
+ end;
+ finally
+ Screen.Cursor := crDefault;
end;
if idx >= 0 then begin
end;
SetActiveList(Board);
- //
- //SetThreadListItem(Board); //SetActiveList\93à\82Å\8cÄ\82Î\82ê\82é\82©\82ç2\8fd\82É\8cÄ\82Ñ\8fo\82·\95K\97v\82È\82µ
end;
end;
if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
FTreeType := gtt2ch;
HistoryToolBar.Hide;
- SetBoardTreeNode( inBBS );
+ TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
TreeView.Items.GetFirstNode.Expanded := True; //?c???[?g?b?v???????J??
//?c???[??g?b?v?????I????
if GetActiveList = nil then
if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
FTreeType := gtt2ch;
HistoryToolBar.Hide;
- SetBoardTreeNode( inBBS );
+ TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
TreeView.Items.GetFirstNode.Expanded := True; //\83c\83\8a\81[\83g\83b\83v\8d\80\96Ú\82¾\82¯\82ð\8aJ\82
//\83c\83\8a\81[\82Ì\83g\83b\83v\8d\80\96Ú\82ð\91I\91ð\82·\82é
if GetActiveList = nil then begin
end;
-procedure TGikoForm.ToolButton19Click(Sender: TObject);
-begin
-
- FavoriteArrangeActionExecute( nil );
-
-end;
-
procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
var
i: Integer;
if (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
(ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
FSortOrder := not FSortOrder;
- ListViewSort( nil, ListView.Column[ i ] );
+ TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ i ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
break;
end;
end;
if id > ListView.Columns.Count - 1 then
id := 0;
FSortOrder := id = 0;
- ListViewSort( nil, ListView.Column[ id ] );
+ TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ id ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
break;
end;
end;
if id < 0 then
id := ListView.Columns.Count - 1;
FSortOrder := id = 0;
- ListViewSort( nil, ListView.Column[ id ] );
+ TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ id ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
break;
end;
end;
--- /dev/null
+unit ListViewUtils;
+
+interface
+
+uses
+ Windows, Messages, SysUtils, Classes, Graphics, Controls,
+ BoardGroup, StdCtrls, ComCtrls;
+
+type
+ TListViewUtils = class(TObject)
+ private
+ {Private \90é\8c¾}
+ public
+ {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;
+ class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
+ NumberVisible: Boolean; var vSortOrder: Boolean; var vSortIndex: Integer);
+ class function ActiveListTrueColumn( column : TListColumn ) : TListColumn;
+ class function SetBoardListItem(Category: TCategory; ListView: TListView;
+ NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+ class function SetThreadListItem(Board: TBoard; ListView: TListView;
+ NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+ class procedure ListViewData(Sender: TObject; Item: TListItem);
+
+ end;
+
+
+implementation
+
+uses
+ GikoSystem, Sort, Setting, Giko, MojuUtils;
+
+const
+ //\83c\83\8a\81[\81E\83\8a\83X\83g\83A\83C\83R\83\93
+ ITEM_ICON_2CH1 = 0; //2ch\83A\83C\83R\83\93
+ ITEM_ICON_2CH2 = 1; //2ch\83A\83C\83R\83\93
+ ITEM_ICON_CATEGORY1 = 2; //\83J\83e\83S\83\8a\83A\83C\83R\83\93
+ ITEM_ICON_CATEGORY2 = 3; //\83J\83e\83S\83\8a\83A\83C\83R\83\93
+ ITEM_ICON_BOARD_NOSUBJECT = 3; //\93Ç\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82È\82¢\94Â\83A\83C\83R\83\93
+ ITEM_ICON_BOARD1 = 4; //\94Â\83A\83C\83R\83\93
+ ITEM_ICON_BOARD2 = 5; //\94Â\83A\83C\83R\83\93
+ ITEM_ICON_THREADLOG1 = 6; //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
+ ITEM_ICON_THREADLOG2 = 7; //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
+ ITEM_ICON_THREAD1 = 8; //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
+ ITEM_ICON_THREAD2 = 9; //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
+ ITEM_ICON_THREADNEW1 = 10; //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
+ ITEM_ICON_THREADNEW2 = 11; //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
+ ITEM_ICON_SORT1 = 12; //\83\\81[\83g\83A\83C\83R\83\93
+ ITEM_ICON_SORT2 = 13; //\83\\81[\83g\83A\83C\83R\83\93
+ ITEM_ICON_BOARD_LOG = 17; //\83X\83\8c\83\8d\83O\82 \82è\94Â\83A\83C\83R\83\93
+ ITEM_ICON_BOARD_NEW = 18; //\83X\83\8c\90V\92\85\94Â\83A\83C\83R\83\93
+
+
+//\83{\81[\83h\83c\83\8a\81[\90Ý\92è
+class procedure TListViewUtils.SetBoardTreeNode(
+ inBBS : TBBS;
+ treeView : TTreeView
+);
+var
+ i, j, k: integer;
+ Root: TTreeNode;
+ CategoryNode: TTreeNode;
+ BoardNode: TTreeNode;
+ Category: TCategory;
+ Board: TBoard;
+begin
+ // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
+ //FActiveBBS := inBBS;
+ TreeView.Items.BeginUpdate;
+ TreeView.Items.Clear;
+ try
+ if not inBBS.IsBoardFileRead then
+ GikoSys.ReadBoardFile( inBBS );
+
+ // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
+ if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
+ Sort.SortOrder := true;
+ Sort.SortIndex := 0;
+ Sort.SortNoFlag := true;
+ inBBS.Sort(CategorySortProc);
+ end;
+
+ Root := TreeView.Items.Add( nil, inBBS.Title );
+ Root.ImageIndex := ITEM_ICON_2CH1;
+ Root.SelectedIndex := ITEM_ICON_2CH2;
+ Root.Data := inBBS;
+ for i := inBBS.Count - 1 downto 0 do begin
+ Category := TCategory(inBBS.Items[i]);
+ CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
+ CategoryNode.Data := Category;
+ CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
+ CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
+
+ // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
+ if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
+ Sort.SortOrder := true;
+ Sort.SortIndex := 0;
+ Sort.SortNoFlag := true;
+ Category.CustomSort(BoardSortProc);
+ end;
+
+ for j := Category.Count - 1 downto 0 do begin
+ Board := TBoard(Category.Items[j]);
+ Board.BeginUpdate;
+ BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
+ BoardNode.Data := Board;
+ //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
+ if not Board.IsLogFile then begin
+ BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
+ BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
+ end else begin
+ BoardNode.ImageIndex := ITEM_ICON_BOARD1;
+ BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
+ for k := 0 to Board.Count - 1 do begin
+ if Board.Items[ k ].IsLogFile then begin
+ BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
+ BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
+
+ Break;
+ end;
+ end;
+ end;
+ Board.EndUpdate;
+ end;
+
+ CategoryNode.Expanded := Category.NodeExpand;
+
+ end;
+ finally
+ TreeView.Items.EndUpdate;
+ end;
+end;
+
+//ListView\82É\83J\83e\83S\83\8a\82ð\90Ý\92è\82·\82é
+class function TListViewUtils.SetCategoryListItem(
+ ABBS2ch: TBBS;
+ ListView: TListView;
+ NumberVisible: Boolean;
+ var vSortIndex: Integer;
+ var vSortOrder: Boolean
+): Integer;
+var
+ TitleColumn : TListColumn;
+ ListColumn : TListColumn;
+ i, id, idx : Integer;
+begin
+ ListView.Items.BeginUpdate;
+ try
+ ListView.Columns.Clear;
+ TitleColumn := ListView.Columns.Add;
+ TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
+ TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
+ idx := 0;
+ for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
+ if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
+ TitleColumn.Tag := i;
+ idx := i;
+ end else begin
+ id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
+ if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
+ (id <= Integer( High( TGikoBBSColumnID ) )) then begin
+ ListColumn := ListView.Columns.Add;
+ // ListColumn.Tag := id;
+ ListColumn.Tag := i;
+ ListColumn.Caption := GikoBBSColumnCaption[ id ];
+ ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
+ end;
+ end;
+ end;
+ TitleColumn.Index := idx;
+
+ ListView.Items.Count := 0;
+ ListView.Items.Clear;
+ ListView.Items.Count := ABBS2ch.Count;
+
+ GikoForm.ListNameLabel.Caption := ABBS2ch.Title;
+ 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 );
+ end;
+
+ Result := ABBS2ch.Count;
+ finally
+ ListView.Items.EndUpdate;
+ end;
+end;
+
+class procedure TListViewUtils.ListViewSort(
+ Sender: TObject;
+ ListView: TListView;
+ Column: TListColumn;
+ NumberVisible: Boolean;
+ var vSortOrder: Boolean;
+ var vSortIndex: Integer
+);
+var
+ i, id, idx : Integer;
+ orderList : TList;
+ wkBBS: TBBS;
+ wkCategory: TCategory;
+ wkBoard: TBoard;
+begin
+ idx := ActiveListTrueColumn( Column ).Tag;
+
+ for i := 0 to ListView.Columns.Count - 1 do begin
+ ListView.Column[i].ImageIndex := -1;
+ end;
+
+ if SortOrder 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;
+ 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;
+ 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;
+ wkBoard.CustomSort(ThreadItemSortProc);
+ end else begin
+ id := 0;
+ end;
+
+ ListView.Refresh;
+ vSortIndex := id;
+end;
+
+{!
+\brief ListView \82Ì Column \82ð\90^\82Ì\83J\83\89\83\80\82É\95Ï\8a·
+
+Delphi 6 Personal \82Å\82Ì ListView \82Å\82Í ListViewColumnClick \83C\83x\83\93\83g\82Å
+\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
+): Integer;
+var
+ TitleColumn : TListColumn;
+ ListColumn : TListColumn;
+ i, id, idx : Integer;
+begin
+ ListView.Items.BeginUpdate;
+ try
+ ListView.Columns.Clear;
+ TitleColumn := ListView.Columns.Add;
+ TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
+ TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
+ idx := 0;
+ for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
+ if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
+ TitleColumn.Tag := i;
+ idx := i;
+ end else begin
+ id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
+ if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
+ (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
+ ListColumn := ListView.Columns.Add;
+// ListColumn.Tag := id;
+ ListColumn.Tag := i;
+ ListColumn.Caption := GikoCategoryColumnCaption[ id ];
+ ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
+ end;
+ end;
+ end;
+ TitleColumn.Index := idx;
+
+ ListView.Items.Count := 0;
+ ListView.Items.Clear;
+ ListView.Items.Count := Category.Count;
+
+ for i := Category.Count - 1 downto 0 do begin
+ if( Category.Items[i].ParentCategory <> Category ) then begin
+ Category.Items[i].ParentCategory := Category;
+ Category.Items[i].No := i + 1;
+ end;
+ end;
+// UpFolderAction.Enabled := True;
+// AllItemAction.Enabled := False;
+// LogItemAction.Enabled := False;
+// NewItemAction.Enabled := False;
+// SelectItemAction.Enabled := False;
+// ListDownloadToolButton.Enabled := False;
+// BoardReservToolButton.Enabled := False;
+// ListThreadDownloadToolButton.Enabled := False;
+
+ GikoForm.ListNameLabel.Caption := Category.Title;
+ 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 );
+ end;
+
+ Result := Category.Count;
+ finally
+ ListView.Items.EndUpdate;
+ end;
+end;
+//ListView\82ÉThreadItem\82ð\90Ý\92è\82·\82é
+class function TListViewUtils.SetThreadListItem(
+ Board: TBoard;
+ ListView: TListView;
+ NumberVisible: Boolean;
+ var vSortIndex: Integer;
+ var vSortOrder: Boolean
+): Integer;
+var
+ TitleColumn : TListColumn;
+ ListColumn : TListColumn;
+ i, id, idx : Integer;
+begin
+ ListView.Items.BeginUpdate;
+ try
+ //Screen.Cursor := crHourGlass;
+
+{*
+ // \83`\83\89\82Â\82«\96h\8e~\82Ì\82½\82ß\81A\95Ï\8dX\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Ì\82Ý
+ // \81¦\96¼\8fÌ\82Í\88á\82¤\82ª\83J\83\89\83\80\90\94\82ª\93¯\82¶\81A\82Æ\82¢\82Á\82½\8fê\8d\87\82É\91Î\8f\88\82Å\82«\82È\82¢\82Ì\82Å\92\8d\88Ó
+ if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
+*}
+ begin
+ ListView.Columns.Clear;
+ TitleColumn := ListView.Columns.Add;
+ TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
+ TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
+ idx := 0;
+ for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
+ if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
+ TitleColumn.Tag := i;
+ idx := i;
+ end else begin
+ id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
+ if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
+ (id <= Integer( High( TGikoBoardColumnID ) )) then begin
+ ListColumn := ListView.Columns.Add;
+ ListColumn.Caption := GikoBoardColumnCaption[ id ];
+ // ListColumn.Tag := id;
+ ListColumn.Tag := i;
+ ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
+ ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
+ end;
+ end;
+ end;
+ TitleColumn.Index := idx;
+ end;
+
+ ListView.Items.Count := 0;
+ ListView.Items.Clear;
+
+ {case GikoForm.ViewType of
+ gvtAll: ListView.Items.Count := Board.Count;
+ gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
+ gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
+ gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
+ end;
+ }
+ case GikoForm.ViewType of
+ gvtAll: ListView.Items.Count := Board.Count;
+ gvtLog:
+ begin
+ Board.LogThreadCount := Board.GetLogThreadCount;
+ ListView.Items.Count := Board.LogThreadCount;
+ end;
+ gvtNew:
+ begin
+ Board.NewThreadCount := Board.GetNewThreadCount;
+ ListView.Items.Count := Board.NewThreadCount;
+ end;
+ gvtUser:
+ begin
+ Board.UserThreadCount:= Board.GetUserThreadCount;
+ ListView.Items.Count := Board.UserThreadCount;
+ end;
+ end;
+
+ GikoForm.ListNameLabel.Caption := Board.Title;
+ 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 );
+ end;
+
+ Result := Board.Count;
+ finally
+ ListView.Items.EndUpdate;
+ end;
+end;
+
+class procedure TListViewUtils.ListViewData(Sender: TObject; Item: TListItem);
+var
+// FileName: string;
+// DateTime: TDateTime;
+ BoardCnt: Integer;
+ BBS: TBBS;
+ Category: TCategory;
+ Board: TBoard;
+ ThreadItem: TThreadItem;
+ RepStr: string;
+ ActivListObj : TObject;
+ i, idx : Integer;
+ ListView : TListView;
+begin
+ if (Sender <> nil) and (Sender is TListView) then begin
+ ListView := TListView(Sender)
+ end else begin
+ Exit;
+ end;
+
+ ActivListObj := GikoForm.ActiveList;
+ if ActivListObj is TBBS then begin
+ //===== \83J\83e\83S\83\8a\83\8a\83X\83g =====
+ BBS := TBBS(ActivListObj);
+
+ GikoForm.ListView.StateImages := nil;
+
+ if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
+ or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
+ or (not (BBS.Items[Item.index] is TCategory)) then Exit;
+ //if BBS.Count <= 0 then Exit;
+ //if Item = nil then Exit;
+ //if Item.Index >= BBS.Count then Exit;
+ //if ListView.Items.Count = 0 then Exit;
+
+ //if not (BBS.Items[Item.index] is TCategory) then Exit;
+ Category := TCategory(BBS.Items[Item.index]);
+
+ if Category = nil then Exit;
+
+ if GikoForm.ListNumberVisibleAction.Checked then
+ Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
+ else
+ Item.Caption := Category.Title;
+
+ Item.ImageIndex := ITEM_ICON_CATEGORY1;
+ Item.Data := Category;
+
+ end else if ActivListObj is TCategory then begin
+
+ //===== \94Â\83\8a\83X\83g =====
+ Category := TCategory(ActivListObj);
+
+ ListView.StateImages := nil;
+
+ if (Category = nil) or (Category.Count <= 0) or (Item = nil)
+ or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
+ or (not (Category.Items[Item.Index] is TBoard)) then Exit;
+ //if Category.Count <= 0 then Exit;
+ //if Item = nil then Exit;
+ //if Item.Index >= Category.Count then Exit;
+ //if ListView.Items.Count = 0 then Exit;
+
+ //if not (Category.Items[Item.Index] is TBoard) then Exit;
+ Board := TBoard(Category.Items[Item.Index]);
+
+ if Board = nil then Exit;
+
+ if GikoForm.ListNumberVisibleAction.Checked then
+ Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
+ //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
+ else
+ Item.Caption := Board.Title;
+
+ if Item.SubItems.Count <> ListView.Columns.Count then begin
+ Item.SubItems.Clear;
+ Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
+ for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
+ Item.SubItems.Add('');
+ end;
+
+ Item.ImageIndex := ITEM_ICON_BOARD1;
+ idx := 0;
+ for i := 0 to ListView.Columns.Count - 1 do begin
+ if GikoSys.Setting.CategoryColumnOrder.Count <= i then
+ Break;
+// case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
+ case GikoSys.Setting.CategoryColumnOrder[ i ] of
+ gccTitle:
+ // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+ Dec( idx );
+
+ gccRoundName:
+ if Board.Round then
+ Item.SubItems[ idx ] := Board.RoundName // '\97\\96ñ'
+ else
+ Item.SubItems[ idx ] := '';
+
+ gccLastModified:
+ if Board.RoundDate = ZERO_DATE then begin
+ Item.SubItems[ idx ] := '';
+ end else
+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
+ end;
+ Inc( idx );
+ end;
+
+ Item.Data := Board;
+
+ end else if ActivListObj is TBoard then begin
+
+ //===== \83X\83\8c\83\8a\83X\83g =====
+ Board := TBoard(ActivListObj);
+
+ if GikoSys.Setting.ListIconVisible then
+ ListView.StateImages := GikoForm.StateIconImageList
+ else
+ ListView.StateImages := nil;
+
+
+ case GikoForm.ViewType of
+ gvtAll: BoardCnt := Board.Count;
+ gvtLog: BoardCnt := Board.LogThreadCount;
+ gvtNew: BoardCnt := Board.NewThreadCount;
+ gvtUser: BoardCnt := Board.UserThreadCount;
+ else
+ BoardCnt := 0;
+ end;
+ {
+ case GikoForm.ViewType of
+ gvtAll: BoardCnt := Board.Count;
+ gvtLog: BoardCnt := Board.GetLogThreadCount;
+ gvtNew: BoardCnt := Board.GetNewThreadCount;
+ gvtUser: BoardCnt := Board.GetUserThreadCount;
+ else
+ BoardCnt := 0;
+ end;
+ }
+// if Board = nil then Exit;
+ if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
+ or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
+
+ //\89ü\91P\82·\82×\82«\83u\83\8d\83b\83N/////////////////////////////////////////////////////
+ ThreadItem := nil;
+ case GikoForm.ViewType of
+ gvtAll: if Item.Index >= Board.Count then Exit else
+ ThreadItem := TThreadItem(Board.Items[Item.Index]);
+ gvtLog: ThreadItem := Board.GetLogThread(Item.Index);
+ gvtNew: ThreadItem := Board.GetNewThread(Item.Index);
+ gvtUser: ThreadItem := Board.GetUserThread(Item.Index);
+ end;
+ //////////////////////////////////////////////////////////////////////////
+
+ if ThreadItem = nil then Exit;
+
+ RepStr := CustomStringReplace(ThreadItem.Title, '<', '<' );
+ RepStr := CustomStringReplace(RepStr, '>', '>' );
+ RepStr := CustomStringReplace(RepStr, '"', '"' );
+ RepStr := CustomStringReplace(RepStr, '&', '&' );
+ //RepStr := StringReplace(RepStr, '\81\97\81M', ',', [rfReplaceAll]);
+ if Item.SubItems.Count <> ListView.Columns.Count then begin
+ Item.SubItems.Clear;
+ Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
+ for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
+ Item.SubItems.Add('');
+ end;
+
+ if GikoForm.ListNumberVisibleAction.Checked then
+ Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
+ else
+ Item.Caption := RepStr;
+
+ case ThreadItem.AgeSage of
+ gasNone: Item.StateIndex := -1;
+ gasNew: Item.StateIndex := 0;
+ gasAge: Item.StateIndex := 1;
+ gasSage: Item.StateIndex := 2;
+ end;
+
+ if ThreadItem.IsLogFile then begin
+ idx := 0;
+ for i := 0 to ListView.Columns.Count - 1 do begin
+ if GikoSys.Setting.BoardColumnOrder.Count <= i then
+ Break;
+// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
+ case GikoSys.Setting.BoardColumnOrder[ i ] of
+ gbcTitle:
+ // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+ Dec( idx );
+
+ gbcAllCount:
+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
+
+ gbcLocalCount:
+ Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
+
+ gbcNonAcqCount:
+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
+
+ gbcNewCount:
+ if ThreadItem.NewResCount = 0 then
+ Item.SubItems[ idx ] := ''
+ else
+ Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
+
+ gbcUnReadCount:
+ Item.SubItems[ idx ] := '';
+
+ gbcRoundName:
+ if ThreadItem.Round then
+ Item.SubItems[ idx ] := ThreadItem.RoundName
+ else
+ Item.SubItems[ idx ] := '';
+
+ gbcRoundDate://gbcLastModified:
+ if (ThreadItem.RoundDate = ZERO_DATE) then begin
+ Item.SubItems[ idx ] := '';
+ end else
+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
+
+ gbcCreated:
+ if ThreadItem.CreateDate = ZERO_DATE then begin
+ Item.SubItems[ idx ] := '';
+ end else
+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
+
+ gbcLastModified:
+ if (ThreadItem.LastModified = ZERO_DATE) then begin
+ Item.SubItems[ idx ] := '';
+ end else
+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
+
+
+ end;
+ Inc( idx );
+ end;
+
+ if ThreadItem.NewArrival then
+ Item.ImageIndex := ITEM_ICON_THREADNEW1
+ else
+ Item.ImageIndex := ITEM_ICON_THREADLOG1;
+
+
+ end else begin
+ idx := 0;
+ for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
+// case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
+ case GikoSys.Setting.BoardColumnOrder[ i ] of
+ gbcTitle:
+ // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+ Dec( idx );
+
+ gbcAllCount:
+ Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
+
+ gbcRoundDate://gbcLastModified:
+ Item.SubItems[ idx ] := '';
+
+ gbcCreated:
+ if ThreadItem.CreateDate = ZERO_DATE then begin
+ Item.SubItems[ idx ] := '';
+ end else
+ Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
+
+ gbcLastModified:
+ Item.SubItems[ idx ] := '';
+
+ else
+ Item.SubItems[ idx ] := '';
+ end;
+ Inc( idx );
+ end;
+ if ThreadItem.NewArrival then
+ Item.ImageIndex := ITEM_ICON_THREADNEW1
+ else
+ Item.ImageIndex := ITEM_ICON_THREAD1;
+ end;
+
+ Item.Data := ThreadItem;
+
+ end;
+end;
+
+end.