#include #include #include #include #include #include #include #include CodeView::CodeView(void) : WinHookProc(WinHookProc::HookBefore) { mCreateHandler.setCallback(this,&CodeView::createHandler); mSizeHandler.setCallback(this,&CodeView::sizeHandler); mCloseHandler.setCallback(this,&CodeView::closeHandler); mDestroyHandler.setCallback(this,&CodeView::destroyHandler); mCommandHandler.setCallback(this,&CodeView::commandHandler); mKeyUpHandler.setCallback(this,&CodeView::keyUpHandler); mKeyDownHandler.setCallback(this,&CodeView::keyDownHandler); mLeftButtonDownHandler.setCallback(this,&CodeView::leftButtonDownHandler); mSetFocusHandler.setCallback(this,&CodeView::setFocusHandler); MDIWindow::insertHandler(MDIWindow::CreateHandler,&mCreateHandler); MDIWindow::insertHandler(MDIWindow::SizeHandler,&mSizeHandler); MDIWindow::insertHandler(MDIWindow::CloseHandler,&mCloseHandler); MDIWindow::insertHandler(MDIWindow::DestroyHandler,&mDestroyHandler); MDIWindow::insertHandler(MDIWindow::CommandHandler,&mCommandHandler); MDIWindow::insertHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); WinHookProc::insertHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); WinHookProc::insertHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); WinHookProc::insertHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); } CodeView::~CodeView() { MDIWindow::removeHandler(MDIWindow::CreateHandler,&mCreateHandler); MDIWindow::removeHandler(MDIWindow::SizeHandler,&mSizeHandler); MDIWindow::removeHandler(MDIWindow::CloseHandler,&mCloseHandler); MDIWindow::removeHandler(MDIWindow::DestroyHandler,&mDestroyHandler); MDIWindow::removeHandler(MDIWindow::CommandHandler,&mCommandHandler); MDIWindow::removeHandler(MDIWindow::SetFocusHandler,&mSetFocusHandler); WinHookProc::removeHandler(MDIWindow::KeyDownHandler,&mKeyDownHandler); WinHookProc::removeHandler(WinHookProc::KeyUpHandler,&mKeyUpHandler); WinHookProc::removeHandler(WinHookProc::LeftButtonDownHandler,&mLeftButtonDownHandler); } CallbackData::ReturnType CodeView::keyDownHandler(CallbackData &someCallbackData) { KeyData keyData(someCallbackData); if(keyData.isEscapeKey())return (CallbackData::ReturnType)TRUE; notifyCurrentLine(); return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType CodeView::keyUpHandler(CallbackData &someCallbackData) { notifyCurrentLine(); return FALSE; } CallbackData::ReturnType CodeView::leftButtonDownHandler(CallbackData &someCallbackData) { notifyCurrentLine(); return FALSE; } CallbackData::ReturnType CodeView::createHandler(CallbackData &someCallbackData) { Rect controlRect; getControlRect(controlRect); mRichEditControl.createControl(*this,controlRect,EditControlID,WS_VSCROLL|WS_HSCROLL); hookWin(mRichEditControl); mRichEditControl.wantReturn(TRUE); // mRichEditControl.setCharFormat("MS Sans Serif",FontMagic); // "Courier New" // mRichEditControl.setCharFormat("Courier",FontMagic); // "Courier New" // mRichEditControl.setCharFormat("Courier New",FontMagic); // "Courier New" // mRichEditControl.setCharFormat("Courier New",8); // "Courier New" Font font("Courier New",12); mRichEditControl.setFont(font); mRichEditControl.setTextColor(RGBColor(0,0,0)); mRichEditControl.setBkGndColor(RGBColor(255,255,255)); mRichEditControl.setReadOnly(FALSE); mRichEditControl.limitText(0); mRichEditControl.setFocus(); mClipboard=::new Clipboard(*this); mClipboard.disposition(PointerDisposition::Delete); setTitle(String()); return FALSE; } CallbackData::ReturnType CodeView::sizeHandler(CallbackData &someCallbackData) { Rect controlRect; if(SIZE_RESTORED==someCallbackData.wParam())mRichEditControl.show(SW_SHOWNORMAL); getControlRect(controlRect); mRichEditControl.moveWindow(controlRect,TRUE); return FALSE; } CallbackData::ReturnType CodeView::closeHandler(CallbackData &someCallbackData) { return FALSE; } CallbackData::ReturnType CodeView::destroyHandler(CallbackData &someCallbackData) { if(!mRichEditControl.isDirty())return FALSE; if(IDOK!=::MessageBox(*this,(LPSTR)"Do you want to save the changes?",(LPSTR)"The file has been changed",MB_YESNO))return FALSE; save(); unhookWin(); return FALSE; } CallbackData::ReturnType CodeView::commandHandler(CallbackData &/*someCallbackData*/) { return FALSE; } CallbackData::ReturnType CodeView::setFocusHandler(CallbackData &someCallbackData) { mRichEditControl.setFocus(); notifyCurrentLine(); return (CallbackData::ReturnType)FALSE; } void CodeView::setTitle(const String &strTitle) { String strCaption; String strBase; if(strTitle.isNull())mTitle=String(STRING_UNTITLED); else mTitle=strTitle; windowText(strCaption); strBase=strCaption.betweenString(0,'-'); strBase.trimRight(); strBase+=String(" - [")+mTitle+String("]"); setCaption(strBase); } BOOL CodeView::save(void) { Block lineStrings; mRichEditControl.getLines(lineStrings); mRichEditControl.isDirty(FALSE); return saveCode(lineStrings,getTitle()); } BOOL CodeView::save(const String &strPathFileName) { Block lineStrings; setTitle(strPathFileName); mRichEditControl.getLines(lineStrings); mRichEditControl.isDirty(FALSE); return saveCode(lineStrings,strPathFileName); } void CodeView::find(void) { mEditFind.perform(*this,mRichEditControl); } void CodeView::cut(void) { if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; String strText; if(mRichEditControl.getSelectedText(strText))mClipboard->setClipboard(strText); mRichEditControl.cutSelection(); } void CodeView::copy(void) { if(!mClipboard.isOkay()||!mRichEditControl.isValid())return; String strText; if(!mRichEditControl.getSelectedText(strText))return; mClipboard->setClipboard(strText); } void CodeView::paste(void) { if(!mClipboard.isOkay())return; mRichEditControl.pasteSpecial(CF_TEXT); } BOOL CodeView::saveCode(Block &codeLines,const String &strPathFileName) { FileIO outFile; CursorControl cursorControl; if(!codeLines.size())return FALSE; outFile.open(strPathFileName,FileIO::GenericWrite,FileIO::FileShareRead,FileIO::Open(FileIO::CreateAlways)); if(!outFile.isOkay())return FALSE; for(int lineIndex=0;lineIndex codeLines; Font textFont("Helv",36); if(!printManager.choosePrinter((GUIWindow&)*(getFrame()),strPrinter))return; printManager.openPrinter(strPrinter,(GUIWindow&)*(getFrame()),getTitle()); printManager.printLines(codeLines,textFont,Point(10,10)); printManager.endDoc(); } void CodeView::notifyCurrentLine(void) { CallbackData lineData(0,mRichEditControl.getCaretPosition()); mLineHandler.callback(lineData); } void CodeView::getControlRect(Rect &controlRect) { clientRect(controlRect); controlRect.left(BorderWidth); controlRect.top(BorderWidth); controlRect.right((controlRect.right()-BorderWidth)+1); controlRect.bottom((controlRect.bottom()-BorderWidth)+1); } // *** virtuals void CodeView::preRegister(WNDCLASS &wndClass) { wndClass.hbrBackground =(HBRUSH)COLOR_APPWORKSPACE; } void CodeView::preCreate(MDICREATESTRUCT &createStruct) { }