You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
234 lines
8.6 KiB
234 lines
8.6 KiB
/////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 1993-1996 Microsoft Corporation. All Rights Reserved.
|
|
//
|
|
// MODULE: GrpDlg.h
|
|
//
|
|
// PURPOSE: Defines the CGroupListDlg class.
|
|
//
|
|
|
|
#ifndef __GRPDLG_H__
|
|
#define __GRPDLG_H__
|
|
|
|
#define idtFindDelay 1
|
|
#define dtFindDelay 600
|
|
#define szDelimiters TEXT(" ,\t;")
|
|
|
|
// Forward references
|
|
class CNNTPServer;
|
|
class CGroupList;
|
|
class CSubList;
|
|
class CEmptyList;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Types
|
|
|
|
// SERVERINFO - One of these structs is kept for each news server currently
|
|
// configured. We keep all the information about the server,
|
|
// including the agent used to connect, the list of groups which
|
|
// groups are subscribed or new, etc. here.
|
|
typedef struct tagSERVERINFO
|
|
{
|
|
LPTSTR pszAcct;
|
|
CNNTPServer *pNNTPServer;
|
|
CGroupList *pGroupList;
|
|
CSubList *pSubList;
|
|
LPDWORD rgdwItems;
|
|
LPDWORD rgdwOrigSub;
|
|
DWORD cOrigSub;
|
|
DWORD cItems;
|
|
BOOL fNewViewed;
|
|
BOOL fDirty;
|
|
} SERVERINFO, *PSERVERINFO;
|
|
|
|
// #define SetSubscribed(_b, _f) (_b) = (_f ? ((_b) | GROUP_SUBSCRIBED) : ((_b) & ~GROUP_SUBSCRIBED))
|
|
// #define SetNew(_b, _f) (_b) = (_f ? ((_b) | GROUP_NEW) : ((_b) & ~GROUP_NEW))
|
|
|
|
// SIZETABLE - This struct is used to make the dialog resizable. We keep one
|
|
// of these for each control in the dialog. The rect's are updated
|
|
// in WM_SIZE. A table of these is built in WM_INITDIALOG.
|
|
typedef struct tagSIZETABLE
|
|
{
|
|
HWND hwndCtl;
|
|
UINT id;
|
|
RECT rc;
|
|
} SIZETABLE, *PSIZETABLE;
|
|
|
|
|
|
// COLUMNS - This struct is used to store the widths of the columns in the
|
|
// dialog box so the widths can be persisted from session to session.
|
|
// This guy is created in the WM_DESTROY handler and read in
|
|
// CGroupListDlg::InitListView().
|
|
|
|
#define COLUMNS_VERSION 0x1
|
|
#define NUM_COLUMNS 2 // Group name, Description
|
|
|
|
typedef struct tagCOLUMNS
|
|
{
|
|
DWORD dwVersion;
|
|
DWORD rgWidths[NUM_COLUMNS];
|
|
} COLUMNS, *PCOLUMNS;
|
|
|
|
|
|
// CGroupListDlg - This class manages the Newsgroups... Dialog. It used to have
|
|
// several subclasses so if it seems wierd to have all these
|
|
// functions as virtual that's why.
|
|
class CGroupListDlg
|
|
{
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Initialization
|
|
public:
|
|
CGroupListDlg();
|
|
~CGroupListDlg();
|
|
|
|
#ifdef DEAD
|
|
virtual BOOL FCreate(HWND hwndOwner, CNNTPServer *pNNTPServer,
|
|
CSubList *pSubList, LPTSTR* ppszNewGroup,
|
|
LPTSTR* ppszNewServer, UINT m_iTabSelect = 0,
|
|
BOOL fEnableGoto = TRUE, LPTSTR pszAcctSel = NULL);
|
|
#endif // DEAD
|
|
|
|
protected:
|
|
virtual BOOL FCreate(HWND hwndOwner, UINT idd);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Message Handlers
|
|
protected:
|
|
static BOOL CALLBACK GroupListDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam,
|
|
LPARAM lParam);
|
|
virtual BOOL OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
|
|
virtual void OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
|
|
virtual LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr);
|
|
virtual void OnTimer(HWND hwnd, UINT id);
|
|
virtual void OnPaint(HWND hwnd);
|
|
virtual void OnClose(HWND hwnd);
|
|
virtual void OnDestroy(HWND hwnd);
|
|
virtual void OnSize(HWND hwnd, UINT state, int cx, int cy);
|
|
virtual void OnGetMinMaxInfo(HWND hwnd, LPMINMAXINFO lpmmi);
|
|
virtual void OnChangeServers(HWND hwnd);
|
|
|
|
virtual BOOL IsGrpDialogMessage(HWND hwnd, LPMSG pMsg);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Group List manipulation
|
|
void QueryList(LPTSTR pszQuery);
|
|
void ResetList(void);
|
|
void FilterFavorites(void);
|
|
void FilterNew(void);
|
|
|
|
void SetSubscribed(PSERVERINFO psi, DWORD index, BOOL fSubscribe);
|
|
BOOL IsSubscribed(PSERVERINFO psi, DWORD index);
|
|
BOOL IsNew(PSERVERINFO psi, DWORD index);
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Utility functions
|
|
LPTSTR GetFindText(void);
|
|
virtual BOOL ChangeServers(LPTSTR pszAcct, BOOL fUseAgent,
|
|
BOOL fForce = FALSE);
|
|
BOOL FillServerList(HWND hwndList, LPTSTR pszSelectServer);
|
|
BOOL OnSwitchTabs(HWND hwnd, UINT iTab);
|
|
void UpdateStateInfo(PSERVERINFO psi);
|
|
virtual BOOL InitListView(HWND hwndList);
|
|
void SetLastServer(LPTSTR pszAcct);
|
|
void SetLastGroup(LPTSTR pszGroup);
|
|
PSERVERINFO FInitServer(LPTSTR pszAcct, CNNTPServer* pNNTPServer,
|
|
CSubList* pSubList);
|
|
void Sort(LPDWORD rgdw, DWORD c);
|
|
void ShowHideDescriptions(BOOL fShow);
|
|
HRESULT HandleResetButton(void);
|
|
HRESULT SaveCurrentSubscribed(PSERVERINFO psi, LPTSTR** prgszSubscribed, LPUINT pcSub);
|
|
HRESULT RestoreCurrentSubscribed(PSERVERINFO psi, LPTSTR* rgszSub, UINT cSub);
|
|
|
|
|
|
// Whenever we do something that might update the state of a button on
|
|
// the dialog, we call this to allow the subclasses to update their UI.
|
|
virtual void UpdateStateUI(void);
|
|
|
|
protected:
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// Class Data
|
|
|
|
// Array of server information objects. Each object contains all the
|
|
// objects and state arrays for the server it needs.
|
|
PSERVERINFO m_rgServerInfo;
|
|
DWORD m_cServers;
|
|
DWORD m_cMaxServers;
|
|
PSERVERINFO m_psiCur;
|
|
|
|
// Handy window handles to have available
|
|
HWND m_hwnd;
|
|
HWND m_hwndList;
|
|
HWND m_hwndFindText;
|
|
HWND m_hwndOwner;
|
|
|
|
// State variables
|
|
BOOL m_fAllowDesc; // TRUE if the user can search descriptions
|
|
LPTSTR m_pszPrevQuery; // The string that we last searched on
|
|
UINT m_cchPrevQuery; // The allocated length of m_pszPrevQuery
|
|
|
|
// Values used in resizing
|
|
UINT m_cxHorzSep;
|
|
UINT m_cyVertSep;
|
|
PSIZETABLE m_rgst; // st - SizeTable. I use this a lot so I wanted it short - SteveSer
|
|
SIZE m_sizeDlg;
|
|
POINT m_ptDragMin;
|
|
|
|
// Everything else
|
|
HIMAGELIST m_himlFolders; // The folder image list.
|
|
HIMAGELIST m_himlState;
|
|
CNNTPServer *m_pNNTPServer;
|
|
CSubList *m_pSubList;
|
|
BOOL m_fServerListInited;
|
|
DWORD m_dwCurrentAccount;
|
|
LPTSTR m_pszCurrentAccount;
|
|
LPTSTR m_pszLastAccount;
|
|
LPTSTR m_pszLastGroup;
|
|
BOOL m_fSaveWindowPos;
|
|
UINT m_iTabSelect;
|
|
BOOL m_fEnableGoto;
|
|
LPTSTR m_pszAcctSel;
|
|
HICON m_hIcon;
|
|
|
|
CEmptyList *m_pEmptyList;
|
|
};
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Dialog Control ID's
|
|
//
|
|
|
|
#define idcGroupList 2001 // Group list listview
|
|
#define idcFindText 2002 // Find query edit box
|
|
#define idcShowFavorites 2003 // Filter favorites toggle
|
|
#define idcUseDesc 2004 // Use Desc checkbox
|
|
#define idcServers 2005 // Server Listview
|
|
#define idcHelp 2006 // Help button
|
|
#define idcResetList 2007 // Rebuild the group list
|
|
|
|
#define idcUpdateNow 1001
|
|
#define idcFullWord 1004
|
|
#define idcPreview 1006
|
|
#define idcProgress 1007
|
|
#define idcApply 1008
|
|
#define idcFind 1010
|
|
#define idcDispText 1011
|
|
#define idcServerText 1012
|
|
#define idcPreviewBtn 1013
|
|
#define idcSubscribe 1014
|
|
#define idcUnsubscribe 1015
|
|
#define idcTabs 1016
|
|
#define idcStaticNewsServers 1017
|
|
#define idcStaticVertLine 1018
|
|
#define idcStaticHorzLine 1019
|
|
#define idcGoto 1020
|
|
|
|
enum { iTabAll = 0, iTabSubscribed, iTabNew, iTabMax };
|
|
enum { iCtlFindText = 0, iCtlUseDesc, iCtlGroupList, iCtlSubscribe, iCtlUnsubscribe,
|
|
iCtlResetList, iCtlGoto, iCtlOK, iCtlCancel, iCtlServers, iCtlStaticNewsServers, iCtlStaticVertLine,
|
|
iCtlStaticHorzLine, iCtlTabs, iCtlMax };
|
|
|
|
|
|
#endif
|
|
|