INT_PTR CALLBACK MainDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_INITDIALOG: MainInitDialog(hWnd); break; case WM_DROPFILES: MainDropFiles(hWnd, (HDROP) wParam); break; case WM_APP: FireCommand(CommandDelayBuffer); break; case WM_COMMAND: MainCommand(hWnd, LOWORD(wParam)); break; case WM_NOTIFY: return MainNotify(hWnd, (LPNMHDR) lParam); break; case WM_SIZE: MainSize(hWnd, LOWORD(lParam), HIWORD(lParam)); break; case WM_MENUSELECT: MainMenuSelect(hWnd, LOWORD(wParam), HIWORD(wParam)); break; case WM_TIMER: RtfWindowTimer();; break; case WM_CONTEXTMENU: { HWND hParam = (HWND) wParam; HWND hRtfChild = GetDlgItem(hWnd, ID_RTF); if (hParam == hWnd || hParam == hRtfChild) ShowContextMenu(LOWORD(lParam), HIWORD(lParam)); } break; case WM_HELP: MainCommand(hWnd, ID_HELPCONTENTS); break; case WM_CLOSE: RegistryWriteWindowPos(hWnd); if (Running) AbortExecution(); PostQuitMessage(0); break; } return FALSE; }
void MainOpenFile(HWND hWnd) { CHAR FileName[MAX_PATH]; CHAR Command[2048]; if (ShowOpenFileDialog(hWnd, FileName)) { wsprintf(Command, ":load %s", ExpandFileName((String)FileName)); FireCommand(Command); } }
void SButton::OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags ) { if(nChar==VK_SPACE || nChar==VK_RETURN) { ModifyState(0,WndState_PushDown,TRUE); FireCommand(); }else { SetMsgHandled(FALSE); } }
void SCheckBox::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { if(nChar==VK_SPACE) { if (IsChecked()) ModifyState(0, WndState_Check,TRUE); else ModifyState(WndState_Check, 0,TRUE); FireCommand(); } }
STDMETHODIMP CToolBarButton::put_Value (VARIANT_BOOL fClick) { if (!fClick) return E_INVALIDARG; BUTTONSTATE rgState; HRESULT hr = get_State (&rgState); if (FAILED(hr)) return hr; if (!(rgState & BUTTONSTATE_ENABLED)) return E_FAIL; return FireCommand (m_tb.idCommand, CN_COMMAND); }
void MainDropFiles(HWND hWnd, HDROP hDrop) { char Command[MAX_PATH], File[MAX_PATH]; DragQueryFile(hDrop, 0, File, MAX_PATH); DragFinish(hDrop); //Move the current directory //Happens automatically if they use the open dialog //If they directly invoke :load then not necessary SetWorkingDir(File); wsprintf(Command, ":load %s", ExpandFileName((String)File)); FireCommand(Command); }
VOID LoadFileExt(LPTSTR File, BOOL async) { TCHAR Command[2*MAX_PATH], fName[MAX_PATH], fExt[MAX_PATH], Buffer[MAX_PATH]; //Move the current directory SetWorkingDirToFileLoc(File,TRUE); AddMruFile(File); // get file name and extension _tsplitpath (File, NULL, NULL, fName, fExt); wsprintf(Buffer,TEXT("%s%s"),fName,fExt); wsprintf(Command, TEXT(":load %s"), ExpandFileName(Buffer)); if(async) FireAsyncCommand(Command); //may be called from DragAndDrop else FireCommand(Command); }
VOID AddFileFromFileDialog(HWND hWnd) { TCHAR FileName[MAX_PATH], RelPath[MAX_PATH], CurrentWorkingDir[MAX_PATH]; TCHAR Command[2*MAX_PATH]; GetCurrentDirectory(MAX_PATH,CurrentWorkingDir); if (ShowOpenFileDialog(hWnd, FileName)) { AddMruFile(FileName); PathRelativePathTo(RelPath, CurrentWorkingDir, FILE_ATTRIBUTE_DIRECTORY, FileName, FILE_ATTRIBUTE_NORMAL); wsprintf(Command, TEXT(":add %s"), ExpandFileName(RelPath)); FireCommand(Command); } SetCurrentDirectory(CurrentWorkingDir); }
bool SButton::OnAcceleratorPressed( const CAccelerator& accelerator ) { if(IsDisabled(TRUE)) return false; FireCommand(); return true; }
void MainCommand(HWND hWnd, int ID) { switch (ID) { case IDCANCEL: EndDialog(hWnd, 0); break; case ID_OPEN: MainOpenFile(hWnd); break; case ID_SCRIPTMAN: ShowScriptMan(); break; case ID_EXIT: FireCommand(":quit\n"); break; /* Load one of the last 10 open files */ case ID_MRU+0: case ID_MRU+1: case ID_MRU+2: case ID_MRU+3: case ID_MRU+4: case ID_MRU+5: case ID_MRU+6: case ID_MRU+7: case ID_MRU+8: case ID_MRU+9: { char Command[1000]; wsprintf(Command, ":load %s", ExpandFileName(MruGetItem(ID-ID_MRU))); FireCommand(Command); } break; // EDIT MENU case ID_CUT: RtfWindowClipboard(WM_CUT); break; case ID_COPY: RtfWindowClipboard(WM_COPY); break; case ID_PASTE: RtfWindowClipboard(WM_PASTE); break; case ID_CLEARSCREEN: RtfWindowClear(); break; case ID_DELETE: RtfWindowDelete(); break; case ID_SELECTALL: RtfWindowSelectAll(); break; case ID_GOPREVIOUS: RtfWindowHistory(-1); break; case ID_GONEXT: RtfWindowHistory(+1); break; // ACTIONS MENU // Reload script files case ID_COMPILE: case ID_MAKE: FireCommand(":reload"); break; case ID_CLEARALL: FireCommand(":load"); break; case ID_GOEDIT: FireCommand(":edit"); break; /* Stop program execution */ case ID_STOP: MessageBeep(0xFFFFFFFF); AbortExecution(); break; /* Evaluate main expression */ case ID_RUN: { char Buffer[1000]; RtfWindowGetCommand(Buffer); if (Buffer[0] == '\0') FireCommand(":main"); else FireCommand(Buffer); } break; /* Set interpreter options using dialog box */ case ID_SETOPTIONS: if (ShowOptionsDialog(hWnd)) RtfWindowUpdateFont(); break; // BROWSE MENU case ID_BROWSEHIERARCHY: DrawClassesHierarchy(); break; case ID_BROWSECLASSES: DoBrowseClasses(); break; case ID_BROWSENAMES: DoBrowseNames(); break; case ID_BROWSETYCONS: DoBrowseTycons(); break; // HELP MENU case ID_HELPCONTENTS: ExecuteFileDocs("hugs98.chm"); break; case ID_HELPCOMMANDS: FireCommand(":?\n"); break; case ID_LIBRARIES: ExecuteFile("http://www.haskell.org/ghc/docs/latest/html/libraries/index.html"); break; case ID_WWWHASKELL: ExecuteFile("http://haskell.org/"); break; case ID_WWWHUGS: ExecuteFile("http://haskell.org/hugs/"); break; case ID_ABOUT: ShowAboutDialog(hWnd); break; } }
DWORD WINAPI MainCommandThread(LPVOID lpParam) { HWND hWnd = hWndMain; INT ID = (INT) lpParam; switch (ID) { case IDCANCEL: EndDialog(hWnd, 0); break; case ID_FILE_LOAD: LoadFileFromFileDialog(hWnd); break; case ID_FILE_ADD: AddFileFromFileDialog(hWnd); break; case ID_EXIT: SendMessage(hWndMain, WM_CLOSE,0,0); break; /* Load one of the last 10 open files */ case ID_MRU+0: case ID_MRU+1: case ID_MRU+2: case ID_MRU+3: case ID_MRU+4: case ID_MRU+5: case ID_MRU+6: case ID_MRU+7: case ID_MRU+8: case ID_MRU+9: LoadFile(GetMruFile(ID-ID_MRU)); break; case ID_CUT: RtfWindowClipboard(WM_CUT); break; case ID_COPY: RtfWindowClipboard(WM_COPY); break; case ID_PASTE: RtfWindowClipboard(WM_PASTE); break; case ID_CLEARSCREEN: RtfWindowClear(); break; case ID_DELETE: RtfWindowDelete(); break; case ID_SELECTALL: RtfWindowSelectAll(); break; case ID_GOPREVIOUS: RtfWindowRelativeHistory(-1); break; case ID_GONEXT: RtfWindowRelativeHistory(+1); break; case ID_COMPILE: FireCommand(TEXT(":reload")); break; case ID_CLEARALL: FireCommand(TEXT(":load")); break; case ID_GOEDIT: FireCommand(TEXT(":edit")); break; /* Stop program execution */ case ID_STOP: AbortExecution(); break; case ID_TOOLS_TOOL1: case ID_TOOLS_TOOL2: case ID_TOOLS_TOOL3: case ID_TOOLS_TOOL4: case ID_TOOLS_TOOL5: case ID_TOOLS_TOOL6: case ID_TOOLS_TOOL7: case ID_TOOLS_TOOL8: case ID_TOOLS_TOOL9: case ID_TOOLS_TOOL10: ToolFireCommand(ID-ID_TOOLS_TOOL1); break; /* Evaluate main expression */ case ID_RUN: { #define BUFF_LEN 2048 TCHAR Buffer[BUFF_LEN]; RtfWindowGetCommand(Buffer,BUFF_LEN); if (StringIsEmpty(Buffer)) FireCommand(TEXT(":main")); else FireCommand(Buffer); } break; /* Set interpreter options using dialog box */ case ID_SETOPTIONS: ShowOptsDialog(); break; case ID_TOOLS_CONFIGURE: ShowToolsDialog(); break; // HELP MENU case ID_HELPCONTENTS: { ExecuteFileDocs(TEXT("index.html")); break; } case ID_HELPCOMMANDS: FireCommand(TEXT(":?")); break; case ID_LIBRARIES: ExecuteFileDocs(TEXT("libraries\\index.html")); break; case ID_WWWHASKELL: ExecuteFile(TEXT("http://haskell.org/")); break; case ID_WWWGHC: ExecuteFile(TEXT("http://haskell.org/ghc/")); break; case ID_ABOUT: ShowAboutDialog(); break; } return 0; }
VOID UpdateOptions(HWND hDlg) { FLAG *fs; TCHAR Buffer[3*MAX_PATH]; if(ComboHasChanged(hDlg,GHCi_Combo_Startup)) { INT resp = MessageBox( hDlg , TEXT("GHCi startup has changed. The interpreter must be initialized. Do you want to proceed?") , TEXT("WinGHCi"), MB_YESNO|MB_ICONQUESTION); if(resp==IDYES) { RtfWindowPutS(TEXT("\n")); ComboGetDlgText(hDlg, GHCi_Combo_Startup, Buffer, 3*MAX_PATH); SetEvent(hKillGHCi); //pause StdoutPrinterThread thread SignalObjectAndWait(hSigSuspendStdoutPrinterThread ,hSigStdoutPrinterThreadSuspended, INFINITE, FALSE); if (CreateGHCiProcess(Buffer)) { ComboUpdate(hDlg,GHCi_Combo_Startup); } else { TCHAR ErrorMsg[3*MAX_PATH]; wsprintf( ErrorMsg,TEXT("GHCi could not be initialized as follows:\n %s\n\nIt will be restarted using the previous configuration:\n %s") , Buffer, ComboGetValue(GHCi_Combo_Startup) ); MessageBox( hDlg , ErrorMsg , TEXT("WinGHCi"), MB_OK|MB_ICONSTOP); CreateGHCiProcess(ComboGetValue(GHCi_Combo_Startup)); } // resume StdoutPrinterThread Sleep(100); SetEvent(hSigResumeStdoutPrinterThread); } } //update flags for(fs = flags; fs->FlagState != NULL; fs++) { BOOL newState = GetDlgItemBool(hDlg, fs->CtrlID); BOOL hasChanged = newState != *(fs->FlagState); *(fs->FlagState) = newState; if(hasChanged) { MakeGHCiFlagCommand(fs,Buffer); FireCommand(Buffer); } } // update editor if(ComboHasChanged(hDlg,GHCi_Combo_Editor)) { ComboUpdate(hDlg,GHCi_Combo_Editor); MakeGHCiEditorCommand(ComboGetValue(GHCi_Combo_Editor), Buffer); FireCommand(Buffer); } //update prompt if(ComboHasChanged(hDlg,GHCi_Combo_Prompt)) { ComboUpdate(hDlg,GHCi_Combo_Prompt); MakeGHCiPromptCommand(ComboGetValue(GHCi_Combo_Prompt), Buffer, FALSE); FireCommand(Buffer); } }