www.pudn.com > ecc-0.3.16-src.zip > eccRecentFiles.h
/* ========================================================================== ecc - Erik's Code Collection Copyright (C) 2003-2005 - Erik Dienske This file is part of ecc. ecc 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. ecc 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. You should have received a copy of the GNU General Public License along with ecc; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ===========================================================================*/ //--------------------------------------------------------------------------- #ifndef eccRecentFilesH #define eccRecentFilesH //--------------------------------------------------------------------------- #include//--------------------------------------------------------------------------- /* Usage: TRecentFiles* rf = new ecc::TRecentFiles(); if (rf) rf->OnSelect = OnSelectRecentFile; // Declared as: void OnSelectRecentFile(String fpath) rf->Add("C:\filename.ext"); rf->PopupAt(Form1->Left + 32, Form1->Top + 48); // Or: rf->ToMenuItem(recent_files); // [recent_files] is a TMenuItem, most likely part of a TMenu. delete rf; */ //=========================================================================== namespace ecc { //=========================================================================== class TRecentFiles { private: int FMaxVisibleItemsCount; int FMaxItemsCount; TPopupMenu* FPopMenu; TMenuItem* FDefaultMenuItem; TStringList* FItems; bool FShowHotKeys; bool _showPath; /* If true, the full paths of the recent files will be displayed. */ void __fastcall OnRecentFileClick(TObject *Sender); /* Internal callback, called when a menu item is selected. */ void ItemsToMenu(TMenuItem* menu_item); /* Populates menu_item with FMaxVisibleItemsCount FItems. */ void UpdateDefaultMenu(); typedef void CALLBACK_OnSelect(String fpath); CALLBACK_OnSelect* OnSelect; /* External callback, can be set using the constructor. */ public: TRecentFiles(TMenuItem* menu_item, CALLBACK_OnSelect* on_select); ~TRecentFiles(); void Add(String item); /* Adds [item] to the top of FItems. The [item] is assumed to be a path to some file. If [item] exists, it is moved to the top (duplicates are not allowed). Updates FDefaultMenuItem if it exists. */ void Clear(); /* Empties FItems, and sets FMaxVisibleItemsCount and FMaxItemsCount to their default values. Updates FDefaultMenuItem if it exists. */ bool IsEmpty() { return (FItems->Count == 0); } int GetCount() { return FItems->Count; } int SetMaxVisibleItemsCount(int count); /* Sets FMaxVisibleItemsCount to [count], but will not exceed FMaxItemsCount. Returns the value FMaxVisibleItemsCount is set to. Updates FDefaultMenuItem if it exists. */ int GetMaxVisibleItemsCount() { return FMaxVisibleItemsCount; } int GetVisibleItemsCount(); /* Returns the actual amount of visible items. This value is equal to or less than FMaxVisibleItemsCount. */ void setShowPath(bool show); /* Sets/unsets _showPath. */ bool getShowPath() { return _showPath; } void ToFile(String fpath); /* Saves list of files (as text) to file [fpath]. Note: Replaces original file. */ void FromFile(String fpath); /* Reads FItems from file. Note: Replaces existing FItems. Updates FDefaultMenuItem if it exists. */ bool ToIniFile(String ini_fpath, String section_name); /* Saves list of files to section [section_name] of ini-file [ini_fpath]. Saves the value of FMaxVisibleItemsCount as "MaxVisibleItemsCount=[FMaxVisibleItemsCount]". Saves the value of FShowPath as "ShowPath=[FShowPath]". The list will be stored as a name=value pair (ie. "Item.0=C:\filename.ext"). Note: Replaces existing section. Returns false if an error occurred. */ bool FromIniFile(String ini_fpath, String section_name); /* Retrieves data from section [section_name] of ini-file [ini_fpath]. Reads the values of FMaxVisibleItemsCount and FShowPath. Reads the name=value pairs for the items. Returns false if an error occurred. Updates FDefaultMenuItem if it exists. */ void PopupAt(int X, int Y); /* Displays a maximum of FMaxVisibleItemsCount items as a PopupMenu at screen coordinates X and Y. */ void ToMenuItem(TMenuItem* menu_item); /* Adds a maximum of FMaxVisibleItemsCount items to [menu_item]. Previously existing items are removed before adding any new items. */ }; //--------------------------------------------------------------------------- //=========================================================================== } // namespace ecc; //=========================================================================== #endif