Leaked source code of windows server 2003
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

/////////////////////////////////////////////////////////////////////////////
// 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