📄 mainfrm.h
字号:
/*
* Copyright (C) 2001-2003 Jacek Sieka, j_s@telia.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.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#if !defined(AFX_MAINFRM_H__E73C3806_489F_4918_B986_23DCFBD603D5__INCLUDED_)
#define AFX_MAINFRM_H__E73C3806_489F_4918_B986_23DCFBD603D5__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
#include "../client/ConnectionManager.h"
#include "../client/DownloadManager.h"
#include "../client/UploadManager.h"
#include "../client/TimerManager.h"
#include "../client/CriticalSection.h"
#include "../client/HttpConnection.h"
#include "../client/HubManager.h"
#include "../client/QueueManagerListener.h"
#include "../client/Util.h"
#include "FlatTabCtrl.h"
#include "ExListViewCtrl.h"
#include "SingleInstance.h"
#define SERVER_SOCKET_MESSAGE (WM_APP + 1235)
class MainFrame : public CMDIFrameWindowImpl<MainFrame>, public CUpdateUI<MainFrame>,
public CMessageFilter, public CIdleHandler, public DownloadManagerListener, public CSplitterImpl<MainFrame, false>,
private TimerManagerListener, private UploadManagerListener, private HttpConnectionListener,
private ConnectionManagerListener, private QueueManagerListener
{
public:
MainFrame() : trayMessage(0), trayIcon(false), maximized(false), lastUpload(-1), lastUpdate(0),
oldshutdown(false), stopperThread(NULL), c(NULL), closing(false) {
c = new HttpConnection();
memset(statusSizes, 0, sizeof(statusSizes));
};
virtual ~MainFrame();
DECLARE_FRAME_WND_CLASS("DC++", IDR_MAINFRAME)
CMDICommandBarCtrl m_CmdBar;
enum {
ADD_UPLOAD_ITEM,
ADD_DOWNLOAD_ITEM,
REMOVE_ITEM,
SET_TEXT,
SET_TEXTS,
DOWNLOAD_LISTING,
STATS,
AUTO_CONNECT,
PARSE_COMMAND_LINE
};
enum {
IMAGE_DOWNLOAD = 0,
IMAGE_UPLOAD
};
virtual BOOL PreTranslateMessage(MSG* pMsg)
{
if(CMDIFrameWindowImpl<MainFrame>::PreTranslateMessage(pMsg))
return TRUE;
HWND hWnd = MDIGetActive();
if(hWnd != NULL)
return (BOOL)::SendMessage(hWnd, WM_FORWARDMSG, 0, (LPARAM)pMsg);
return FALSE;
}
virtual BOOL OnIdle()
{
UIUpdateToolBar();
return FALSE;
}
typedef CSplitterImpl<MainFrame, false> splitterBase;
BEGIN_MSG_MAP(MainFrame)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
MESSAGE_HANDLER(WM_CLOSE, OnClose)
MESSAGE_HANDLER(WM_SPEAKER, onSpeaker)
MESSAGE_HANDLER(FTN_SELECTED, onSelected)
MESSAGE_HANDLER(FTN_ROWS_CHANGED, onRowsChanged)
MESSAGE_HANDLER(WM_CONTEXTMENU, onContextMenu)
MESSAGE_HANDLER(WM_APP+242, onTrayIcon)
MESSAGE_HANDLER(WM_DESTROY, onDestroy)
MESSAGE_HANDLER(WM_SIZE, onSize)
MESSAGE_HANDLER(WM_ENDSESSION, onEndSession)
MESSAGE_HANDLER(trayMessage, onTray)
MESSAGE_HANDLER(WM_COPYDATA, onCopyData)
MESSAGE_HANDLER(WMU_WHERE_ARE_YOU, onWhereAreYou)
MESSAGE_HANDLER(SERVER_SOCKET_MESSAGE, onServerSocket)
COMMAND_ID_HANDLER(ID_APP_EXIT, OnFileExit)
COMMAND_ID_HANDLER(ID_FILE_CONNECT, OnFileConnect)
COMMAND_ID_HANDLER(ID_FILE_SETTINGS, OnFileSettings)
COMMAND_ID_HANDLER(ID_FILE_SEARCH, OnFileSearch)
COMMAND_ID_HANDLER(ID_VIEW_TOOLBAR, OnViewToolBar)
COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
COMMAND_ID_HANDLER(ID_WINDOW_CASCADE, OnWindowCascade)
COMMAND_ID_HANDLER(ID_WINDOW_TILE_HORZ, OnWindowTile)
COMMAND_ID_HANDLER(ID_WINDOW_ARRANGE, OnWindowArrangeIcons)
COMMAND_ID_HANDLER(IDC_FAVORITES, onFavorites)
COMMAND_ID_HANDLER(IDC_FAVUSERS, onFavoriteUsers)
COMMAND_ID_HANDLER(IDC_REMOVE, onRemove)
COMMAND_ID_HANDLER(IDC_NOTEPAD, onNotepad)
COMMAND_ID_HANDLER(IDC_QUEUE, onQueue)
COMMAND_ID_HANDLER(IDC_PRIVATEMESSAGE, onPrivateMessage)
COMMAND_ID_HANDLER(IDC_GETLIST, onGetList)
COMMAND_ID_HANDLER(IDC_FORCE, onForce)
COMMAND_ID_HANDLER(IDC_SEARCH_SPY, onSearchSpy)
COMMAND_ID_HANDLER(IDC_FILE_ADL_SEARCH, onFileADLSearch)
COMMAND_ID_HANDLER(IDC_HELP_HOMEPAGE, onLink)
COMMAND_ID_HANDLER(IDC_HELP_DONATE, onLink)
COMMAND_ID_HANDLER(IDC_HELP_DOWNLOADS, onLink)
COMMAND_ID_HANDLER(IDC_HELP_FAQ, onLink)
COMMAND_ID_HANDLER(IDC_HELP_HELP_FORUM, onLink)
COMMAND_ID_HANDLER(IDC_HELP_DISCUSS, onLink)
COMMAND_ID_HANDLER(IDC_HELP_REQUEST_FEATURE, onLink)
COMMAND_ID_HANDLER(IDC_HELP_REPORT_BUG, onLink)
COMMAND_ID_HANDLER(IDC_HELP_README, onLink)
COMMAND_ID_HANDLER(IDC_HELP_CHANGELOG, onLink)
COMMAND_ID_HANDLER(IDC_IMPORT_QUEUE, onImport)
COMMAND_ID_HANDLER(IDC_OPEN_FILE_LIST, onOpenFileList)
COMMAND_ID_HANDLER(ID_WINDOW_MINIMIZE_ALL, onWindowMinimizeAll)
COMMAND_ID_HANDLER(IDC_FINISHED, onFinished)
COMMAND_ID_HANDLER(IDC_FINISHED_UL, onFinishedUploads)
COMMAND_ID_HANDLER(IDC_REMOVEALL, onRemoveAll)
COMMAND_ID_HANDLER(IDC_GRANTSLOT, onGrantSlot)
COMMAND_ID_HANDLER(IDC_ADD_TO_FAVORITES, onAddToFavorites)
COMMAND_ID_HANDLER(IDC_CLOSE_DISCONNECTED, onCloseDisconnected)
NOTIFY_HANDLER(IDC_TRANSFERS, LVN_KEYDOWN, onKeyDownTransfers)
NOTIFY_HANDLER(IDC_TRANSFERS, LVN_COLUMNCLICK, onColumnClick)
NOTIFY_HANDLER(IDC_TRANSFERS, NM_CUSTOMDRAW, onCustomDraw)
NOTIFY_CODE_HANDLER(TTN_GETDISPINFO, onGetToolTip)
CHAIN_MDI_CHILD_COMMANDS()
CHAIN_MSG_MAP(CUpdateUI<MainFrame>)
CHAIN_MSG_MAP(CMDIFrameWindowImpl<MainFrame>)
CHAIN_MSG_MAP(splitterBase);
END_MSG_MAP()
BEGIN_UPDATE_UI_MAP(MainFrame)
UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
END_UPDATE_UI_MAP()
LRESULT onSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled);
LRESULT onSpeaker(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT onNotepad(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onQueue(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onFavorites(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onFavoriteUsers(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onGetList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onPrivateMessage(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onForce(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onContextMenu(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled);
LRESULT OnClose(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
LRESULT onEndSession(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/);
LRESULT OnFileConnect(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onSearchSpy(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onFileADLSearch(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnFileSettings(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnFileSearch(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onLink(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onImport(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onOpenFileList(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onTrayIcon(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/);
LRESULT OnViewToolBar(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onGetToolTip(int idCtrl, LPNMHDR pnmh, BOOL& /*bHandled*/);
LRESULT onFinished(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onFinishedUploads(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onRemoveAll(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onCopyData(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& /*bHandled*/);
LRESULT onCustomDraw(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/);
LRESULT onCloseDisconnected(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onGrantSlot(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT onAddToFavorites(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
static DWORD WINAPI stopper(void* p);
void UpdateLayout(BOOL bResizeBars = TRUE);
void parseCommandLine(const string& cmdLine);
LRESULT onWhereAreYou(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
return WMU_WHERE_ARE_YOU;
}
LRESULT onServerSocket(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
ConnectionManager::getInstance()->getServerSocket().incoming();
return 0;
}
LRESULT onTray(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) {
updateTray(true);
return 0;
};
static int sortSize(LPARAM a, LPARAM b);
static int sortStatus(LPARAM a, LPARAM b);
static int sortSpeed(LPARAM a, LPARAM b);
static int sortTimeLeft(LPARAM a, LPARAM b);
static int sortItem(LPARAM a, LPARAM b);
LRESULT onColumnClick(int /*idCtrl*/, LPNMHDR pnmh, BOOL& /*bHandled*/) {
NMLISTVIEW* l = (NMLISTVIEW*)pnmh;
if(l->iSubItem == ctrlTransfers.getSortColumn()) {
ctrlTransfers.setSortDirection(!ctrlTransfers.getSortDirection());
} else {
switch(l->iSubItem) {
case COLUMN_TIMELEFT:
ctrlTransfers.setSort(l->iSubItem, ExListViewCtrl::SORT_FUNC, true, &sortTimeLeft);
break;
case COLUMN_SPEED:
ctrlTransfers.setSort(l->iSubItem, ExListViewCtrl::SORT_FUNC, true, &sortSpeed);
break;
case COLUMN_SIZE:
ctrlTransfers.setSort(l->iSubItem, ExListViewCtrl::SORT_FUNC, true, &sortSize);
break;
case COLUMN_STATUS:
ctrlTransfers.setSort(l->iSubItem, ExListViewCtrl::SORT_FUNC, true, &sortStatus);
break;
default:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -