📄 searchresultpage.h
字号:
/*
This file is part of KCeasy (http://www.kceasy.com)
Copyright (C) 2002-2004 Markus Kern <mkern@kceasy.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
//---------------------------------------------------------------------------
#ifndef SearchResultPageH
#define SearchResultPageH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp>
#include <ExtCtrls.hpp>
#include <Buttons.hpp>
#include <Graphics.hpp>
#include "VTHeaderPopup.hpp"
#include "VirtualTrees.hpp"
#include "Engine.h"
#include <set>
#include <math>
//---------------------------------------------------------------------------
// number of different states in availbility bitmap
#define AVAILABILITY_BMP_LEN 10
//---------------------------------------------------------------------------
using std::set;
class TResultNodeData
{
public:
TResultNodeData() : Result(NULL), ImageIndex(-1), NetworkImageIndex(-1),
Downloading(false), LocalFile(false), EffectiveAvail(0) /*,
IPCount(0), UniqueToTotal(0.0) */ {}
// Add ip of new result. Only call on parent node of each hash.
void AddIP(unsigned long IP)
{
#if 0
// skip private ips
if (((IP & 0x000000FF) == 0x0000007F) || // 127.0.0.0
((IP & 0x0000FFFF) == 0x0000A8C0) || // 192.168.0.0
((IP & 0x00000FFF) == 0x000010AC) || // 172.16-31.0.0
((IP & 0x000000FF) == 0x0000000A) || // 10.0.0.0
(IP == 0))
{
return;
}
IP &= 0xFFFF;
IPs.insert(IP);
IPCount++;
// calculate unique to total
UniqueToTotal = ((double)IPs.size()) / IPCount;
#endif
}
TSearchResult* Result;
int ImageIndex;
int NetworkImageIndex;
bool Downloading;
bool LocalFile;
int EffectiveAvail;
TDateTime TimeFound;
#if 0
set<unsigned long> IPs;
int IPCount; // number of valid IPs for this hash
double UniqueToTotal; // unique ips divided by total valid IPs per hash
#endif
};
class TSearchResultForm : public TForm
{
__published: // IDE-managed Components
TVirtualStringTree *ResultTree;
TPopupMenu *ResultPopup;
TMenuItem *DownloadMnu;
TMenuItem *N1;
TMenuItem *FindMoreFromUserMnu;
TMenuItem *N2;
TMenuItem *CopyMagnetMnu;
TPanel *CtrlPanel;
TStaticText *QueryStatic;
TVTHeaderPopupMenu *ResultTreeHeaderPopup;
TSpeedButton *CloseSearchBtn;
TSpeedButton *StopSearchBtn;
TSpeedButton *SearchAgainBtn;
TSpeedButton *DownloadBtn;
TLabel *ResultCountLbl;
TPanel *ResultPanel;
TPanel *VSpacePanel;
TPanel *TopPanel;
TPanel *FilterPanel;
TLabel *FilterLbl;
TComboBox *FilterKeyCombo;
TEdit *FilterEdit;
TBevel *FilterBevel;
TPanel *ButtonPanel;
TBevel *ButtonBevel;
TPanel *HitsPanel;
TBevel *HitsBevel;
TPanel *SearchInfoPanel;
TStaticText *RealmStatic;
TMenuItem *CopyTrackerMnu;
TSpeedButton *ChangeHeaderBtn;
TMenuItem *GotoBitziMnu;
TMenuItem *HideSingleSourcesMnu;
TMenuItem *FindFileInLibraryMnu;
TPanel *VSpacePanel1;
void __fastcall ResultTreeGetText(TBaseVirtualTree *Sender,
PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType,
WideString &CellText);
void __fastcall ResultTreeGetImageIndex(TBaseVirtualTree *Sender,
PVirtualNode Node, TVTImageKind Kind, TColumnIndex Column,
bool &Ghosted, int &ImageIndex);
void __fastcall ResultTreeCompareNodes(TBaseVirtualTree *Sender,
PVirtualNode Node1, PVirtualNode Node2, TColumnIndex Column,
int &Result);
void __fastcall ResultTreeHeaderClick(TVTHeader *Sender,
TColumnIndex Column, TMouseButton Button, TShiftState Shift,
int X, int Y);
void __fastcall ResultTreeHeaderDragged(TVTHeader *Sender,
TColumnIndex Column, int OldPosition);
void __fastcall ResultTreeDblClick(TObject *Sender);
void __fastcall DownloadMnuClick(TObject *Sender);
void __fastcall CopyMagnetMnuClick(TObject *Sender);
void __fastcall FindMoreFromUserMnuClick(TObject *Sender);
void __fastcall CloseSearchBtnClick(TObject *Sender);
void __fastcall StopSearchBtnClick(TObject *Sender);
void __fastcall ResultTreePaintText(TBaseVirtualTree *Sender,
const TCanvas *TargetCanvas, PVirtualNode Node,
TColumnIndex Column, TVSTTextType TextType);
void __fastcall SearchAgainBtnClick(TObject *Sender);
void __fastcall ResultTreeHeaderPopupPopup(TObject *Sender);
void __fastcall DownloadBtnClick(TObject *Sender);
void __fastcall ResultTreeScroll(TBaseVirtualTree *Sender, int DeltaX,
int DeltaY);
void __fastcall ResultTreeHeaderMouseUp(TVTHeader *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y);
void __fastcall ResultTreeHeaderPopupColumnChange(
const TBaseVirtualTree *Sender, const TColumnIndex Column,
bool Visible);
void __fastcall FilterEditChange(TObject *Sender);
void __fastcall ResultTreeKeyAction(TBaseVirtualTree *Sender,
WORD &CharCode, TShiftState &Shift, bool &DoDefault);
void __fastcall ResultTreeAfterCellPaint(TBaseVirtualTree *Sender,
TCanvas *TargetCanvas, PVirtualNode Node, TColumnIndex Column,
TRect &CellRect);
void __fastcall CopyTrackerMnuClick(TObject *Sender);
void __fastcall ResultTreeGetPopupMenu(TBaseVirtualTree *Sender,
PVirtualNode Node, TColumnIndex Column, const TPoint &P,
bool &AskParent, TPopupMenu *&PopupMenu);
void __fastcall ChangeHeaderBtnClick(TObject *Sender);
void __fastcall ResultTreeFreeNode(TBaseVirtualTree *Sender,
PVirtualNode Node);
void __fastcall ResultTreeChange(TBaseVirtualTree *Sender,
PVirtualNode Node);
void __fastcall ResultTreeGetHint(TBaseVirtualTree *Sender,
PVirtualNode Node, TColumnIndex Column,
TVTTooltipLineBreakStyle &LineBreakStyle, WideString &HintText);
void __fastcall GotoBitziMnuClick(TObject *Sender);
void __fastcall HideSingleSourcesMnuClick(TObject *Sender);
void __fastcall FindFileInLibraryMnuClick(TObject *Sender);
private: // User declarations
TSearch* Search;
AnsiString TabCaption;
int NoOfResults, NoOfUniqueResults, NoOfMultiSourceResults;
bool UseSystemIcons;
bool ShowRawUserNames;
bool MarkLocalFiles;
bool MarkDownloads;
bool ShowSingleSources;
bool SortByAlphaNum;
int SearchAgainCount;
Graphics::TBitmap* AvailBitmaps[AVAILABILITY_BMP_LEN];
bool BeFunny;
void DownloadNode(TVirtualNode* Node);
string GetTreeColumnKey(TSearchRealm Realm);
void SaveTreeColumns();
bool IsNodeFiltered(TVirtualNode* Node);
void ApplyFilter();
int __fastcall SortStrCmp(const char* a, const char* b); // depends on SortByAlphaNum
int __fastcall SortIntCmp(int a, int b);
public: // User declarations
__fastcall TSearchResultForm(TComponent* Owner, TSearch* NSearch,
AnsiString& NTabCaption);
__fastcall ~TSearchResultForm();
bool __fastcall EngineCallback(TCallbackInfo* CbInfo);
TSearch* GetSearch() { return Search; }
};
//---------------------------------------------------------------------------
//extern PACKAGE TSearchResultFrame *SearchResultFrame;
//---------------------------------------------------------------------------
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -