Initial
This commit is contained in:
240
ftp/MAINWND.CPP
Normal file
240
ftp/MAINWND.CPP
Normal file
@@ -0,0 +1,240 @@
|
||||
#include <ftp/mainwnd.hpp>
|
||||
#include <ftp/ftpdata.hpp>
|
||||
#include <ftp/hostdlg.hpp>
|
||||
#include <ftp/logindlg.hpp>
|
||||
#include <thread/monitor.hpp>
|
||||
#include <display/editwnd.hpp>
|
||||
#include <common/openfile.hpp>
|
||||
#include <common/assert.hpp>
|
||||
|
||||
char MainWindow::szClassName[]="FTP Interpreter v2.01";
|
||||
char MainWindow::szMenuName[]="FTP";
|
||||
|
||||
MainWindow::MainWindow(HINSTANCE hInstance)
|
||||
: mhInstance(hInstance), mlpEditWindow(0)
|
||||
{
|
||||
mPaintHandler.setCallback(this,&MainWindow::paintHandler);
|
||||
mDestroyHandler.setCallback(this,&MainWindow::destroyHandler);
|
||||
mCommandHandler.setCallback(this,&MainWindow::commandHandler);
|
||||
mKeyDownHandler.setCallback(this,&MainWindow::keyDownHandler);
|
||||
mSizeHandler.setCallback(this,&MainWindow::sizeHandler);
|
||||
mCreateHandler.setCallback(this,&MainWindow::createHandler);
|
||||
mTimerHandler.setCallback(this,&MainWindow::timerHandler);
|
||||
mSetFocusHandler.setCallback(this,&MainWindow::setFocusHandler);
|
||||
mLineHandler.setCallback(this,&MainWindow::lineHandler);
|
||||
mCompletionHandler.setCallback(this,&MainWindow::completionHandler);
|
||||
mFTPThread.setCompletionHandler(&mCompletionHandler);
|
||||
insertHandlers();
|
||||
registerClass();
|
||||
::CreateWindow(szClassName,szClassName,
|
||||
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX|WS_MINIMIZEBOX|WS_MAXIMIZEBOX|WS_DLGFRAME|WS_CLIPCHILDREN,
|
||||
CW_USEDEFAULT,CW_USEDEFAULT,
|
||||
CW_USEDEFAULT,CW_USEDEFAULT,
|
||||
NULL,NULL,mhInstance,(LPSTR)this);
|
||||
show(SW_SHOW);
|
||||
update();
|
||||
Rect editRect;
|
||||
editRect.right(width());
|
||||
editRect.bottom(height());
|
||||
KeyControl keyControl;
|
||||
keyControl.canScroll(TRUE);
|
||||
mlpEditWindow=new EditWindow(*this,editRect);
|
||||
mEditMonitor=mlpEditWindow;
|
||||
mEditMonitor.enter();
|
||||
mlpEditWindow->setFont(Font("MS LineDraw",12,Font::PitchFixed|Font::WeightBold));
|
||||
mEditMonitor->setKeyControl(keyControl);
|
||||
mEditMonitor->setLineHandler(&mLineHandler);
|
||||
processCommandLine();
|
||||
mEditMonitor.leave();
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
mFTPThread.stop();
|
||||
if(mlpEditWindow){delete mlpEditWindow;mlpEditWindow=0;}
|
||||
destroy();
|
||||
}
|
||||
|
||||
void MainWindow::insertHandlers(void)
|
||||
{
|
||||
insertHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
insertHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
||||
insertHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
insertHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
||||
insertHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
||||
insertHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
insertHandler(VectorHandler::TimerHandler,&mTimerHandler);
|
||||
insertHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
|
||||
}
|
||||
|
||||
void MainWindow::removeHandlers(void)
|
||||
{
|
||||
removeHandler(VectorHandler::DestroyHandler,&mDestroyHandler);
|
||||
removeHandler(VectorHandler::PaintHandler,&mPaintHandler);
|
||||
removeHandler(VectorHandler::CommandHandler,&mCommandHandler);
|
||||
removeHandler(VectorHandler::SizeHandler,&mSizeHandler);
|
||||
removeHandler(VectorHandler::KeyDownHandler,&mKeyDownHandler);
|
||||
removeHandler(VectorHandler::CreateHandler,&mCreateHandler);
|
||||
removeHandler(VectorHandler::TimerHandler,&mTimerHandler);
|
||||
removeHandler(VectorHandler::SetFocusHandler,&mSetFocusHandler);
|
||||
}
|
||||
|
||||
void MainWindow::registerClass(void)const
|
||||
{
|
||||
WNDCLASS wndClass;
|
||||
|
||||
if(::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass))return;
|
||||
wndClass.style =CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS|CS_OWNDC;
|
||||
wndClass.lpfnWndProc =(WNDPROC)Window::WndProc;
|
||||
wndClass.cbClsExtra =0;
|
||||
wndClass.cbWndExtra =sizeof(MainWindow*);
|
||||
wndClass.hInstance =mhInstance;
|
||||
wndClass.hIcon =::LoadIcon(NULL,IDI_APPLICATION);
|
||||
wndClass.hCursor =::LoadCursor(NULL,IDC_ARROW);
|
||||
wndClass.hbrBackground =(HBRUSH)::GetStockObject(BLACK_BRUSH);
|
||||
wndClass.lpszMenuName =szMenuName;
|
||||
wndClass.lpszClassName =szClassName;
|
||||
::RegisterClass(&wndClass);
|
||||
assert(0!=::GetClassInfo(mhInstance,className(),(WNDCLASS FAR*)&wndClass));
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::destroyHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
removeHandlers();
|
||||
::PostQuitMessage(0);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::sizeHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
if(mlpEditWindow)
|
||||
{
|
||||
mEditMonitor.enter();
|
||||
::MoveWindow((HWND)*((EditWindow*)mEditMonitor),0,0,width(),height(),TRUE);
|
||||
mEditMonitor.leave();
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::commandHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
switch(someCallbackData.wParam())
|
||||
{
|
||||
case CM_EXIT :
|
||||
postMessage(*this,WM_CLOSE,0,0L);
|
||||
break;
|
||||
case CM_REMOTEHOST :
|
||||
handleRemoteHost();
|
||||
break;
|
||||
default :
|
||||
break;
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::keyDownHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::paintHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::createHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
setTimer(TimerID,250);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::timerHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
killTimer(TimerID);
|
||||
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->setFocus();
|
||||
mEditMonitor->setText(mWSASystem.description());
|
||||
mEditMonitor->setText(mWSASystem.systemStatus());
|
||||
mFTPThread.setDisplay(mEditMonitor);
|
||||
mEditMonitor->setFocus();
|
||||
mEditMonitor.leave();
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::lineHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
String lineString;
|
||||
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->getText(lineString,mlpEditWindow->currentLine()-1);
|
||||
mEditMonitor.leave();
|
||||
lineString.trimRight();
|
||||
if(lineString==String("quit"))postMessage(*this,WM_CLOSE,0,0L);
|
||||
mFTPThread.interpretLine(lineString);
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::setFocusHandler(CallbackData &/*someCallbackData*/)
|
||||
{
|
||||
if(mlpEditWindow)
|
||||
{
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->setFocus();
|
||||
mEditMonitor.leave();
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
CallbackData::ReturnType MainWindow::completionHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
switch((FTPThread::CompletionCode)someCallbackData.lParam())
|
||||
{
|
||||
case FTPThread::LineComplete :
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->setText(">>Ready.");
|
||||
mEditMonitor.leave();
|
||||
break;
|
||||
case FTPThread::FileComplete :
|
||||
postMessage(*this,WM_CLOSE,0,0L);
|
||||
break;
|
||||
}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
void MainWindow::processCommandLine(void)
|
||||
{
|
||||
String commandLine(::GetCommandLine());
|
||||
|
||||
commandLine=commandLine.betweenString(' ',0);
|
||||
if(commandLine.isNull())return;
|
||||
FileHandle cmdFile(commandLine,FileHandle::Read,FileHandle::ShareRead);
|
||||
if(!cmdFile.isOkay()){mFTPThread.interpretLine(commandLine);return;}
|
||||
cmdFile.close();
|
||||
mFTPThread.interpretFile(commandLine);
|
||||
}
|
||||
|
||||
void MainWindow::message(const String &messageString)
|
||||
{
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->setText(messageString);
|
||||
mEditMonitor.leave();
|
||||
}
|
||||
|
||||
void MainWindow::message(Block<String> &messageStrings)
|
||||
{
|
||||
for(short itemIndex=0;itemIndex<messageStrings.size();itemIndex++)
|
||||
{
|
||||
mEditMonitor.enter();
|
||||
mEditMonitor->setText(messageStrings[itemIndex]);
|
||||
mEditMonitor.leave();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::handleRemoteHost(void)
|
||||
{
|
||||
HostDialog hostDialog;
|
||||
|
||||
if(!hostDialog.performDialog())return;
|
||||
mFTPThread.interpretLine(String("open ")+hostDialog.remoteHost());
|
||||
}
|
||||
Reference in New Issue
Block a user