📄 mainfrm.cpp
字号:
// FileZilla - a Windows ftp client
// Copyright (C) 2002 - Tim Kosse <tim.kosse@gmx.de>
// 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.
// MainFrm.cpp : Implementierung der Klasse CMainFrame
//
#include "stdafx.h"
#include "FileZilla.h"
#include "MainFrm.h"
#include "LocalView.h"
#include "LocalView2.h"
#include "StatusView.h"
#include "FtpView.h"
#include "StatusView.h"
#include "TextProgressCtrl.h"
#include "sitemanager.h"
#include "QueueView.h"
#include "queuectrl.h"
#include "misc\led.h"
#include "localfilelistctrl.h"
#include "FtpListCtrl.h"
#include "dirtreectrl.h"
#include "PathFunctions.h"
#include "Entersomething.h"
#include "fileexistsdlg.h"
#include "LocalComboCompletion.h"
#include "RemoteComboCompletion.h"
#include "FileZillaApi.h"
#include "commandqueue.h"
#include "misc/systemtray.h"
#include "ftptreeview.h"
#include "version.h"
#include "ManualTransferDlg.h"
#include "AsyncRequestQueue.h"
#include "misc\MinTrayBtn.h"
#include "misc\VisualStylesXP.h"
#include "ftptreectrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//Implementation in SiteManger.cpp
bool NewItem_Menu( LPVOID lpData, LPCTSTR lpszName, LPVOID lpParent, t_SiteManagerItem *site, bool isDefault, LPVOID lpDefault);
bool NewFolder_Menu( LPVOID lpData, LPCTSTR lpszName, LPVOID &lpParent);
bool After_Menu( LPVOID lpData, LPCTSTR lpszName, LPVOID lpItem);
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_COMMAND(ID_TRAY_EXIT, OnTrayExit)
ON_COMMAND(ID_TRAY_RESTORE, OnTrayRestore)
ON_REGISTERED_MESSAGE(WM_FILEZILLA_PROCESSCMDLINE, OnProcessCmdLine)
ON_COMMAND(ID_PROCESS_QUEUE, OnProcessQueue)
ON_WM_CREATE()
ON_BN_CLICKED(IDOK, OnQuickConnect)
ON_WM_SIZE()
ON_UPDATE_COMMAND_UI(ID_SHOWTREE, OnUpdateShowtree)
ON_COMMAND(ID_SHOWTREE, OnShowtree)
ON_COMMAND(ID_EDIT_SETTINGS, OnEditSettings)
ON_COMMAND(ID_SITEMANAGER, OnSitemanager)
ON_UPDATE_COMMAND_UI(ID_CANCELBUTTON, OnUpdateCancelbutton)
ON_COMMAND(ID_SHOWQUEUE, OnShowqueue)
ON_UPDATE_COMMAND_UI(ID_SHOWQUEUE, OnUpdateShowqueue)
ON_WM_CLOSE()
ON_UPDATE_COMMAND_UI(ID_PROCESS_QUEUE, OnUpdateProcessQueue)
ON_COMMAND(ID_TOOLBAR_DISCONNECT, OnToolbarDisconnect)
ON_UPDATE_COMMAND_UI(ID_TOOLBAR_DISCONNECT, OnUpdateToolbarDisconnect)
ON_COMMAND(ID_TOOLBAR_REFRESH, OnToolbarRefresh)
ON_COMMAND(ID_TOOLBAR_RECONNECT, OnToolbarReconnect)
ON_UPDATE_COMMAND_UI(ID_TOOLBAR_RECONNECT, OnUpdateToolbarReconnect)
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_COPYTOSITEMANAGER, OnCopytositemanager)
ON_UPDATE_COMMAND_UI(ID_COPYTOSITEMANAGER, OnUpdateCopytositemanager)
ON_COMMAND(ID_TYPEMENU_ASCII, OnTypemenuAscii)
ON_UPDATE_COMMAND_UI(ID_TYPEMENU_ASCII, OnUpdateTypemenuAscii)
ON_COMMAND(ID_TYPEMENU_BINARY, OnTypemenuBinary)
ON_UPDATE_COMMAND_UI(ID_TYPEMENU_BINARY, OnUpdateTypemenuBinary)
ON_COMMAND(ID_TYPEMENU_DETECT, OnTypemenuDetect)
ON_UPDATE_COMMAND_UI(ID_TYPEMENU_DETECT, OnUpdateTypemenuDetect)
ON_WM_DESTROY()
ON_COMMAND(ID_VIEW_QUICKCONNECT_BAR, OnViewQuickconnectBar)
ON_UPDATE_COMMAND_UI(ID_VIEW_QUICKCONNECT_BAR, OnUpdateViewQuickconnectBar)
ON_COMMAND(ID_VIEW_MESSAGELOG, OnViewMessagelog)
ON_UPDATE_COMMAND_UI(ID_VIEW_MESSAGELOG, OnUpdateViewMessagelog)
ON_COMMAND(ID_VIEW_STATUS_BAR, OnViewStatusBar)
ON_COMMAND(ID_VIEW_TOOLBAR, OnViewToolbar)
ON_COMMAND(ID_EDIT_EXPORTSETTINGS, OnEditExportsettings)
ON_COMMAND(ID_EDIT_IMPORTSETTINGS, OnEditImportsettings)
ON_COMMAND(ID_LOCALLISTSTYLE_ICON, OnLocalliststyleIcon)
ON_UPDATE_COMMAND_UI(ID_LOCALLISTSTYLE_ICON, OnUpdateLocalliststyleIcon)
ON_COMMAND(ID_LOCALLISTSTYLE_LIST, OnLocalliststyleList)
ON_UPDATE_COMMAND_UI(ID_LOCALLISTSTYLE_LIST, OnUpdateLocalliststyleList)
ON_COMMAND(ID_LOCALLISTSTYLE_REPORT, OnLocalliststyleReport)
ON_UPDATE_COMMAND_UI(ID_LOCALLISTSTYLE_REPORT, OnUpdateLocalliststyleReport)
ON_COMMAND(ID_LOCALLISTSTYLE_SMALLICON, OnLocalliststyleSmallicon)
ON_UPDATE_COMMAND_UI(ID_LOCALLISTSTYLE_SMALLICON, OnUpdateLocalliststyleSmallicon)
ON_COMMAND(ID_VIEW_LOCALLISTVIEW_FILESIZE, OnViewLocallistviewFilesize)
ON_UPDATE_COMMAND_UI(ID_VIEW_LOCALLISTVIEW_FILESIZE, OnUpdateViewLocallistviewFilesize)
ON_COMMAND(ID_VIEW_LOCALLISTVIEW_FILETYPE, OnViewLocallistviewFiletype)
ON_UPDATE_COMMAND_UI(ID_VIEW_LOCALLISTVIEW_FILETYPE, OnUpdateViewLocallistviewFiletype)
ON_COMMAND(ID_VIEW_LOCALLISTVIEW_LASTMODIFIEDTIME, OnViewLocallistviewLastmodifiedtime)
ON_UPDATE_COMMAND_UI(ID_VIEW_LOCALLISTVIEW_LASTMODIFIEDTIME, OnUpdateViewLocallistviewLastmodifiedtime)
ON_COMMAND(ID_REMOTELISTSTYLE_ICON, OnRemoteliststyleIcon)
ON_UPDATE_COMMAND_UI(ID_REMOTELISTSTYLE_ICON, OnUpdateRemoteliststyleIcon)
ON_COMMAND(ID_REMOTELISTSTYLE_LIST, OnRemoteliststyleList)
ON_UPDATE_COMMAND_UI(ID_REMOTELISTSTYLE_LIST, OnUpdateRemoteliststyleList)
ON_COMMAND(ID_REMOTELISTSTYLE_REPORT, OnRemoteliststyleReport)
ON_UPDATE_COMMAND_UI(ID_REMOTELISTSTYLE_REPORT, OnUpdateRemoteliststyleReport)
ON_COMMAND(ID_REMOTELISTSTYLE_SMALLICON, OnRemoteliststyleSmallicon)
ON_UPDATE_COMMAND_UI(ID_REMOTELISTSTYLE_SMALLICON, OnUpdateRemoteliststyleSmallicon)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_DATE, OnViewRemotelistviewDate)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_DATE, OnUpdateViewRemotelistviewDate)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_TIME, OnViewRemotelistviewTime)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_TIME, OnUpdateViewRemotelistviewTime)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_FILESIZE, OnViewRemotelistviewFilesize)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_FILESIZE, OnUpdateViewRemotelistviewFilesize)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_FILETYPE, OnViewRemotelistviewFiletype)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_FILETYPE, OnUpdateViewRemotelistviewFiletype)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_PERMISSIONS, OnViewRemotelistviewPermissions)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_PERMISSIONS, OnUpdateViewRemotelistviewPermissions)
ON_COMMAND(ID_FILE_CONNECTTODEFAULTSITE, OnFileConnecttodefaultsite)
ON_COMMAND(ID_HELPMENU_CONTENTS, OnHelpmenuContents)
ON_COMMAND(ID_HELPMENU_INDEX, OnHelpmenuIndex)
ON_COMMAND(ID_HELPMENU_SEARCH, OnHelpmenuSearch)
ON_UPDATE_COMMAND_UI(ID_FILE_CONNECTTODEFAULTSITE, OnUpdateFileConnecttodefaultsite)
ON_COMMAND(ID_OVERWRITEMENU_ASK, OnOverwritemenuAsk)
ON_COMMAND(ID_OVERWRITEMENU_OVERWRITE, OnOverwritemenuOverwrite)
ON_COMMAND(ID_OVERWRITEMENU_OVERWRITEIFNEWER, OnOverwritemenuOverwriteifnewer)
ON_COMMAND(ID_OVERWRITEMENU_RESUME, OnOverwritemenuResume)
ON_COMMAND(ID_OVERWRITEMENU_SKIP, OnOverwritemenuSkip)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_ASK, OnUpdateOverwritemenuAsk)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_OVERWRITE, OnUpdateOverwritemenuOverwrite)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_OVERWRITEIFNEWER, OnUpdateOverwritemenuOverwriteifnewer)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_RESUME, OnUpdateOverwritemenuResume)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_SKIP, OnUpdateOverwritemenuSkip)
ON_COMMAND(ID_OVERWRITEMENU_RENAME, OnOverwritemenuRename)
ON_UPDATE_COMMAND_UI(ID_OVERWRITEMENU_RENAME, OnUpdateOverwritemenuRename)
ON_COMMAND(ID_MENU_QUEUE_EXPORT, OnMenuQueueExport)
ON_UPDATE_COMMAND_UI(ID_MENU_QUEUE_EXPORT, OnUpdateMenuQueueExport)
ON_COMMAND(ID_MENU_QUEUE_IMPORT, OnMenuQueueImport)
ON_UPDATE_COMMAND_UI(ID_MENU_QUEUE_PROCESSNOW, OnUpdateMenuQueueProcessnow)
ON_COMMAND(ID_MENU_QUEUE_USEMULTIPLE, OnMenuQueueUseMultiple)
ON_UPDATE_COMMAND_UI(ID_MENU_QUEUE_USEMULTIPLE, OnUpdateMenuQueueUseMultiple)
ON_COMMAND(ID_MENU_QUEUE_PROCESSNOW, OnMenuQueueProcessnow)
ON_COMMAND(ID_MENU_TRANSFER_MANUALTRANSFER, OnMenuTransferManualtransfer)
ON_WM_SYSCOMMAND()
ON_WM_TIMER()
ON_COMMAND(ID_MENU_SERVER_CHANGEPASS, OnMenuSiteChangepass)
ON_UPDATE_COMMAND_UI(ID_MENU_SERVER_CHANGEPASS, OnUpdateMenuSiteChangepass)
ON_COMMAND(ID_MENU_VIEW_SHOWHIDDEN, OnMenuViewShowhidden)
ON_UPDATE_COMMAND_UI(ID_MENU_VIEW_SHOWHIDDEN, OnUpdateMenuViewShowhidden)
ON_COMMAND(ID_SHOWREMOTETREE, OnShowremotetree)
ON_UPDATE_COMMAND_UI(ID_SHOWREMOTETREE, OnUpdateShowremotetree)
ON_COMMAND(ID_MENU_DEBUG_DUMPDIRCACHE, OnMenuDebugDumpDirectoryCache)
ON_COMMAND(ID_MENU_DEBUG_CRASH, OnMenuDebugCrash)
ON_COMMAND(ID_MENU_SERVER_ENTERRAWCOMMAND, OnMenuServerEnterrawcommand)
ON_UPDATE_COMMAND_UI(ID_MENU_SERVER_ENTERRAWCOMMAND, OnUpdateMenuServerEnterrawcommand)
ON_COMMAND(ID_QUICKCONNECTBAR_MENU_CLEAR, OnQuickconnectBarMenuClear)
ON_COMMAND(ID_QUICKCONNECTBAR_MENU_BYPASS, OnQuickconnectBarMenuBypass)
ON_COMMAND(ID_MENU_SERVER_COPYURLTOCLIPBOARD, OnMenuServerCopyurltoclipboard)
ON_UPDATE_COMMAND_UI(ID_MENU_SERVER_COPYURLTOCLIPBOARD, OnUpdateMenuServerCopyurltoclipboard)
ON_NOTIFY(TBN_DROPDOWN, AFX_IDW_TOOLBAR, OnToolbarDropDown)
ON_COMMAND(ID_MENU_VIEW_REMOTELISTVIEW_STATUSBAR, OnMenuViewRemotelistviewStatusbar)
ON_COMMAND(ID_MENU_VIEW_LOCALLISTVIEW_STATUSBAR, OnMenuViewLocallistviewStatusbar)
ON_UPDATE_COMMAND_UI(ID_MENU_VIEW_REMOTELISTVIEW_STATUSBAR, OnUpdateMenuViewRemotelistviewStatusbar)
ON_UPDATE_COMMAND_UI(ID_MENU_VIEW_LOCALLISTVIEW_STATUSBAR, OnUpdateMenuViewLocallistviewStatusbar)
ON_COMMAND(ID_VIEW_REMOTELISTVIEW_OWNERGROUP, OnViewRemotelistviewOwnergroup)
ON_UPDATE_COMMAND_UI(ID_VIEW_REMOTELISTVIEW_OWNERGROUP, OnUpdateViewRemotelistviewOwnergroup)
ON_WM_GETMINMAXINFO()
ON_COMMAND(ID_CANCELBUTTON, OnCancel)
ON_WM_ACTIVATE()
ON_COMMAND_RANGE(ID_MENU_VIEW_LOCALLISTVIEW_SORTBY_FILENAME, ID_MENU_VIEW_LOCALLISTVIEW_SORTBY_DESCENDING, OnMenuViewLocalSortby)
ON_UPDATE_COMMAND_UI_RANGE(ID_MENU_VIEW_LOCALLISTVIEW_SORTBY_FILENAME, ID_MENU_VIEW_LOCALLISTVIEW_SORTBY_DESCENDING, OnUpdateMenuViewLocalSortby)
ON_COMMAND_RANGE(ID_MENU_VIEW_REMOTELISTVIEW_SORTBY_FILENAME, ID_MENU_VIEW_REMOTELISTVIEW_SORTBY_DESCENDING, OnMenuViewRemoteSortby)
ON_UPDATE_COMMAND_UI_RANGE(ID_MENU_VIEW_REMOTELISTVIEW_SORTBY_FILENAME, ID_MENU_VIEW_REMOTELISTVIEW_SORTBY_DESCENDING, OnUpdateMenuViewRemoteSortby)
//}}AFX_MSG_MAP
ON_COMMAND(ID_HELP, CFrameWnd::OnHelp)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR,
ID_INDICATOR_SECURESERVER,
ID_INDICATOR_ELAPSEDTIME,
ID_INDICATOR_TIMELEFT,
ID_INDICATOR_PROGRESS_PANE,// Statusleistenanzeige
ID_INDICATOR_BYTES,
ID_INDICATOR_QUEUESIZE,
ID_INDICATOR_RECVLED,
ID_INDICATOR_SENDLED
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame Konstruktion/Zerst鰎ung
CMainFrame::CMainFrame()
{
nTrayNotificationMsg_ = RegisterWindowMessage( _T("FileZilla Tray Notification Message") );
initialized = FALSE;
m_nTransferType = COptions::GetOptionVal(OPTION_TRANSFERMODE);
m_nLocalListViewStyle = m_nRemoteListViewStyle = 0;
m_nHideLocalColumns = m_nHideRemoteColumns = 0;
m_PosData.state = 0;
m_PosData.cx = 432;
m_pCommandQueue = 0;
m_pFileZillaApi = 0;
m_pSecureIconCtrl = new CStatic();
m_bShowHiddenFiles = FALSE;
m_nRecentQuickconnectCommandOffset = 0;
m_pLocalViewHeader = NULL;
m_pRemoteViewHeader = NULL;
m_pWndReBar = NULL;
m_pWndDlgBar = NULL;
m_pWndToolBar = NULL;
m_pMinTrayBtn = NULL;
m_nLocalTreeViewLocation = COptions::GetOptionVal(OPTION_LOCALTREEVIEWLOCATION);
m_nRemoteTreeViewLocation = COptions::GetOptionVal(OPTION_REMOTETREEVIEWLOCATION);
m_bShowQuickconnect = TRUE;
m_hLastFocus = NULL;
m_pDragImage = NULL;
m_pDragWnd = NULL;
m_DropTarget = _T("");
}
CMainFrame::~CMainFrame()
{
if (m_pCommandQueue)
delete m_pCommandQueue;
m_pCommandQueue=0;
if (m_pFileZillaApi)
delete m_pFileZillaApi;
m_pFileZillaApi=0;
delete m_pWndReBar;
delete m_pWndToolBar;
delete m_pWndDlgBar;
delete m_pMinTrayBtn;
delete m_pSecureIconCtrl;
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetupTrayIcon();
SetWindowText(GetVersionString());
if (!CreateToolbars())
return -1;
//Create quickconnect button
CWnd *pButton=m_pWndDlgBar->GetDlgItem(IDOK);
CRect rect;
pButton->GetWindowRect(rect);
m_pWndDlgBar->ScreenToClient(rect);
CString title;
pButton->GetWindowText(title);
m_wndQuickconnectButton.Create(title, WS_TABSTOP | WS_CHILD | WS_VISIBLE, rect, m_pWndDlgBar, IDOK);
VERIFY(m_wndQuickconnectButton.AddMenuItem(ID_QUICKCONNECTBAR_MENU_BYPASS, 0));
VERIFY(m_wndQuickconnectButton.AddMenuItem(ID_QUICKCONNECTBAR_MENU_CLEAR, 0));
//Load recent server list
CMarkupSTL *pXML;
if (COptions::LockXML(&pXML))
{
pXML->ResetPos();
if (pXML->FindChildElem( _T("RecentServers") ))
{
pXML->IntoElem();
t_server server;
while (COptions::LoadServer(pXML, server))
{
CString str=server.host;
CString tmp;
if (server.user.CollateNoCase(_T("anonymous")))
str=server.user + _T("@") + str;
if (server.nServerType&FZ_SERVERTYPE_LAYER_SSL_IMPLICIT)
{
if (server.port!=21)
tmp.Format(_T("%d"), server.port);
str=_T("ftps://")+str;
}
else if (server.nServerType&FZ_SERVERTYPE_SUB_FTP_SFTP)
{
if (server.port!=22)
tmp.Format(_T("%d"), server.port);
str=_T("sftp://")+str;
}
else if (server.port!=21)
tmp.Format(_T("%d"), server.port);
if (tmp!="")
str+=_T(":")+tmp;
if (!m_RecentQuickconnectServers.size())
m_wndQuickconnectButton.AddMenuItem(0, MF_SEPARATOR);
m_RecentQuickconnectServers.push_front(server);
m_wndQuickconnectButton.InsertMenuItem(3, ID_QUICKCONNECTBAR_MENU_HISTORY1+m_nRecentQuickconnectCommandOffset++, str, 0);
m_nRecentQuickconnectCommandOffset%=10;
if (m_RecentQuickconnectServers.size()>=10)
break;
}
pXML->OutOfElem();
}
COptions::UnlockXML();
}
else
{
for (int i=10; i>0; i--)
{
CString name;
name.Format(_T("Software\\FileZilla\\Recent Servers\\Server %d"), i);
HKEY key;
if (RegOpenKey(HKEY_CURRENT_USER, name ,&key)==ERROR_SUCCESS)
{
t_server server;
if (COptions::LoadServer(key, server))
{
CString str=server.host;
CString tmp;
if (server.user.CollateNoCase(_T("anonymous")))
str=server.user + _T("@") + str;
if (server.nServerType&FZ_SERVERTYPE_LAYER_SSL_IMPLICIT)
{
if (server.port!=21)
tmp.Format(_T("%d"), server.port);
str=_T("ftps://")+str;
}
else if (server.nServerType&FZ_SERVERTYPE_SUB_FTP_SFTP)
{
if (server.port!=22)
tmp.Format(_T("%d"), server.port);
str=_T("sftp://")+str;
}
else if (server.port!=21)
tmp.Format(_T("%d"), server.port);
if (tmp!="")
str+=_T(":")+tmp;
if (!m_RecentQuickconnectServers.size())
m_wndQuickconnectButton.AddMenuItem(0, MF_SEPARATOR);
m_RecentQuickconnectServers.push_front(server);
m_wndQuickconnectButton.InsertMenuItem(3, ID_QUICKCONNECTBAR_MENU_HISTORY1+m_nRecentQuickconnectCommandOffset++, str, 0);
m_nRecentQuickconnectCommandOffset%=10;
if (m_RecentQuickconnectServers.size()>=10)
{
RegCloseKey(key);
break;
}
}
RegCloseKey(key);
}
}
}
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -