diff --git a/Help/WinFBE/Visual Designer/Controls/ListView.html b/Help/WinFBE/Visual Designer/Controls/ListView.html index 347e0e47..ec92b64f 100644 --- a/Help/WinFBE/Visual Designer/Controls/ListView.html +++ b/Help/WinFBE/Visual Designer/Controls/ListView.html @@ -347,6 +347,10 @@

Items Collection (wfxList SelectedCount Returns the total number of selected items in the listview. + +SortByColumn +Sort by the specified SubItem column index. ListView.Items.SortByColumn( nSortColumn, bSortAscend ) +

Item (wfxListViewItem)

diff --git a/Help/WinFBE/Visual Designer/Controls/ListView.md b/Help/WinFBE/Visual Designer/Controls/ListView.md index 1c9ac718..a3b29a20 100644 --- a/Help/WinFBE/Visual Designer/Controls/ListView.md +++ b/Help/WinFBE/Visual Designer/Controls/ListView.md @@ -87,6 +87,7 @@ | Insert | Add a new item (and optional 32bit value) to the listview at a specific position. ListView.Items.Insert( Index, Text, 32bitValue)| | Remove | Remove/delete the item identified by the index value.| | SelectedCount | Returns the total number of selected items in the listview.| +| SortByColumn | Sort by the specified SubItem column index. ListView.Items.SortByColumn( nSortColumn, bSortAscend ) | ### Item (wfxListViewItem) | Name | Description | diff --git a/Languages/english.lang b/Languages/english.lang index 9fd65ca6..6ecac409 100644 Binary files a/Languages/english.lang and b/Languages/english.lang differ diff --git a/WinFBE.wfbe b/WinFBE.wfbe index 6ce8196e..1bad92a4 100644 Binary files a/WinFBE.wfbe and b/WinFBE.wfbe differ diff --git a/WinFBE32.exe b/WinFBE32.exe index c06dd5ea..8641195f 100644 Binary files a/WinFBE32.exe and b/WinFBE32.exe differ diff --git a/WinFBE64.exe b/WinFBE64.exe index 666d4676..f9f7e485 100644 Binary files a/WinFBE64.exe and b/WinFBE64.exe differ diff --git a/changes.txt b/changes.txt index 974750ac..373a957d 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,11 @@ +Version 2.0.0 (November 21, 2019) +- Added: New Project template options: None; Blank Document; Visual Designer; Console; Windows DLL; Static Library. +- Added: ListView sort (ascending or descending) by a specified SubItem column index. ListView.Items.SortByColumn( nSortColumn, bSortAscend ). +- Added: ListView Click event now sets e.KeyChar = 13, e.KeyCode = VK_RETURN, whenever ENTER is pressed on a selected row. +- Fixed: ListView would "automatically" select the row under the cursor even if you don't click on it. Fix required removing the ListView MouseHover event. +- Fixed: "Open Templates" menu option was disabled if no file/project was already opened. +- Fixed: Removed extra separator bar between the "Replace" and "Goto Line" top menu items. + Version 1.9.9 (November 17, 2019) - Added: New method Form.ShowChild allows displaying a Form as a child (WS_CHILD). This allows forms to act like child panel controls. - Added: ListView DoubleClick, RightClick events. diff --git a/src/WinFBE.bas b/src/WinFBE.bas index 0c1517c7..2733704a 100644 --- a/src/WinFBE.bas +++ b/src/WinFBE.bas @@ -44,7 +44,7 @@ Using Afx #Define APPNAME WStr("WinFBE - FreeBASIC Editor") #Define APPNAMESHORT WStr("WinFBE") -#Define APPVERSION WStr("1.9.9") +#Define APPVERSION WStr("2.0.0") #Define APPCOPYRIGHT WStr("Paul Squires, PlanetSquires Software, Copyright (C) 2016-2019") diff --git a/src/WinFBE.rc b/src/WinFBE.rc index ef7589df..582da478 100644 --- a/src/WinFBE.rc +++ b/src/WinFBE.rc @@ -69,6 +69,7 @@ IMAGE_RICHEDIT BITMAP "IMAGES\\TOOLBOX\\N_RICHEDIT.BMP" IMAGE_PROGRESSBAR BITMAP "IMAGES\\TOOLBOX\\N_PROGRESS.BMP" IMAGE_LISTVIEW BITMAP "IMAGES\\TOOLBOX\\N_LISTVIEW.BMP" IMAGE_TREEVIEW BITMAP "IMAGES\\TOOLBOX\\N_TREEVIEW.BMP" +IMAGE_MONTHCALENDAR BITMAP "IMAGES\\TOOLBOX\\N_MONTHCALENDAR.BMP" //IMAGE_IMGBUTTON BITMAP "IMAGES\\TOOLBOX\\N_BUTTON_PICTURE.BMP" //IMAGE_HSCROLL BITMAP "IMAGES\\TOOLBOX\\N_SCROLL_H.BMP" //IMAGE_VSCROLL BITMAP "IMAGES\\TOOLBOX\\N_SCROLL_V.BMP" @@ -77,7 +78,6 @@ IMAGE_TREEVIEW BITMAP "IMAGES\\TOOLBOX\\N_TREEVIEW.BMP" //IMAGE_UPDOWN BITMAP "IMAGES\\TOOLBOX\\N_UP_DOWN.BMP" //IMAGE_SLIDER BITMAP "IMAGES\\TOOLBOX\\N_SLIDER.BMP" //IMAGE_DATETIMEPICKER BITMAP "IMAGES\\TOOLBOX\\N_TIMEPICKER.BMP" -//IMAGE_MONTHCALENDAR BITMAP "IMAGES\\TOOLBOX\\N_MONTH_CALENDAR.BMP" //IMAGE_WEBBROWSER BITMAP "IMAGES\\TOOLBOX\\N_BROWSER.BMP" //IMAGE_CUSTOM BITMAP "IMAGES\\TOOLBOX\\N_CUSTOM.BMP" //IMAGE_OCX BITMAP "IMAGES\\TOOLBOX\\N_ACTIVE_X.BMP" @@ -97,6 +97,7 @@ IMAGE_CURSOR_RICHEDIT CURSOR "IMAGES\\TOOLBOX\\C_RICHEDIT.CUR" IMAGE_CURSOR_PROGRESSBAR CURSOR "IMAGES\\TOOLBOX\\C_PROGRESS.CUR" IMAGE_CURSOR_LISTVIEW CURSOR "IMAGES\\TOOLBOX\\C_LISTVIEW.CUR" IMAGE_CURSOR_TREEVIEW CURSOR "IMAGES\\TOOLBOX\\C_TREEVIEW.CUR" +IMAGE_CURSOR_MONTHCALENDAR CURSOR "IMAGES\\TOOLBOX\\C_MONTHCALENDAR.CUR" //IMAGE_CURSOR_IMGBUTTON CURSOR "IMAGES\\TOOLBOX\\C_BUTTON_PICTURE.CUR" //IMAGE_CURSOR_HSCROLL CURSOR "IMAGES\\TOOLBOX\\C_HORIZONTAL_SCROLL.CUR" //IMAGE_CURSOR_VSCROLL CURSOR "IMAGES\\TOOLBOX\\C_VERTICAL_SCROLL.CUR" @@ -105,7 +106,6 @@ IMAGE_CURSOR_TREEVIEW CURSOR "IMAGES\\TOOLBOX\\C_TREEVIEW.CUR" //IMAGE_CURSOR_UPDOWN CURSOR "IMAGES\\TOOLBOX\\C_UP_DOWN.CUR" //IMAGE_CURSOR_SLIDER CURSOR "IMAGES\\TOOLBOX\\C_SLIDER.CUR" //IMAGE_CURSOR_DATETIMEPICKER CURSOR "IMAGES\\TOOLBOX\\C_DATE_PICKER.CUR" -//IMAGE_CURSOR_MONTHCALENDAR CURSOR "IMAGES\\TOOLBOX\\C_MONTH_CALENDAR.CUR" //IMAGE_CURSOR_WEBBROWSER CURSOR "IMAGES\\TOOLBOX\\C_BROWSER.CUR" //IMAGE_CURSOR_CUSTOM CURSOR "IMAGES\\TOOLBOX\\C_CUSTOM_CONTROL.CUR" //IMAGE_CURSOR_OCX CURSOR "IMAGES\\TOOLBOX\\C_ACTIVEX.CUR" diff --git a/src/clsApp.bi b/src/clsApp.bi index 9b958532..ce5f4856 100644 --- a/src/clsApp.bi +++ b/src/clsApp.bi @@ -38,6 +38,7 @@ Type clsApp wszPanelText as CWSTR ' Current file loading or being compiled (for statusbar updating) hIconPanel as HANDLE ' Success/failure of most previous compile (for Statusbar updating) FileLoadingCount as long ' Track count of files loading for statusbar display + NewProjectTemplateType as long ' IDC of the new project type to create. IsNewProjectFlag As BOOLEAN IsProjectLoading as Boolean ' Project loading. Disable some screen updating. IsFileLoading as Boolean ' File loading. Disable some screen updating. diff --git a/src/clsConfig.inc b/src/clsConfig.inc index b3054b34..57b9389c 100644 --- a/src/clsConfig.inc +++ b/src/clsConfig.inc @@ -431,6 +431,14 @@ Function clsConfig.InitializeToolBox() as Long gToolBox(n).wszCursor = "IMAGE_CURSOR_TEXTBOX" gToolBox(n).wszClassName = "TEXTBOX" +' n = n + 1 +' gToolBox(n).nToolType = CTRL_MONTHCALENDAR +' gToolBox(n).wszToolBoxName = "TextBox" +' gToolBox(n).wszControlName = "MonthCalendar" +' gToolBox(n).wszImage = "IMAGE_MONTHCALENDAR" +' gToolBox(n).wszCursor = "IMAGE_CURSOR_MONTHCALENDAR" +' gToolBox(n).wszClassName = "MONTHCALENDAR" + ' n = n + 1 ' gToolBox(n).nToolType = CTRL_TREEVIEW ' gToolBox(n).wszToolBoxName = "TreeView" @@ -485,12 +493,6 @@ Function clsConfig.InitializeToolBox() as Long ' gToolBox(21).wszCursor = "IMAGE_CURSOR_DATETIMEPICKER" ' gToolBox(21).wszClassName = "DATETIMEPICKER" -' gToolBox(22).nToolType = CTRL_MONTHCALENDAR -' gToolBox(22).wszName = "MonthCalendar" -' gToolBox(22).wszImage = "IMAGE_MONTHCALENDAR" -' gToolBox(22).wszCursor = "IMAGE_CURSOR_MONTHCALENDAR" -' gToolBox(22).wszClassName = "MONTHCALENDAR" - ' gToolBox(23).nToolType = CTRL_WEBBROWSER ' gToolBox(23).wszName = "WebBrowser" ' gToolBox(23).wszImage = "IMAGE_WEBBROWSER" diff --git a/src/frmMainOnCommand.inc b/src/frmMainOnCommand.inc index 7be905bb..a148827f 100644 --- a/src/frmMainOnCommand.inc +++ b/src/frmMainOnCommand.inc @@ -100,9 +100,270 @@ End Function ' ======================================================================================== private Function OnCommand_ProjectNew( ByVal HWnd As HWnd ) As LRESULT + ' Ensure that the Project Manager window has been created (show it now as well) frmProjectOptions_Show( HWnd, true ) + if gApp.IsNewProjectFlag then + ' Need to remove resource file (if created) from the document list otherwise it + ' will be loaded again and it will display twice in the Explorer. + gApp.RemoveAllDocuments() + + ' Open the new project so it displays in the Explorer treeview. Pass the + ' variable wText because passing gApp.ProjectFilename will cause that variable + ' to get reset because the parameter is byref and eventually that variable + ' gets assigned a null. + dim as CWSTR wszText = gApp.ProjectFilename + frmMain_OpenProjectSafely(HWND_FRMMAIN, wszText) + + + dim pDoc as clsDocument ptr + dim pCtrl as clsControl ptr + dim as string szText + dim as string DQ = chr(34) + + + select case gApp.NewProjectTemplateType + + case IDC_FRMPROJECTOPTIONS_OPTNONE + ' Do nothing + + case IDC_FRMPROJECTOPTIONS_OPTBLANK + ' Add a new blank file to the project and set it as the Main by default + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) + end if + + + case IDC_FRMPROJECTOPTIONS_OPTVD + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + szText = _ + "#Define UNICODE" & vbcrlf & _ + "#Define _WIN32_WINNT &h0602" & vbcrlf & _ + vbcrlf & _ + vbcrlf & _ + "#Include Once " & DQ & "windows.bi" & DQ & vbcrlf & _ + "#Include Once " & DQ & "Afx\CWindow.inc" & DQ & vbcrlf & _ + vbcrlf & _ + "Using Afx" & vbcrlf & _ + vbcrlf & _ + "#Include Once " & DQ & "frmMain.inc" & DQ & vbcrlf & _ + vbcrlf & _ + vbcrlf & _ + "Application.Run(frmMain)" & vbcrlf + + pDoc->SetText( szText ) + dim as any ptr pSci = pDoc->GetActiveScintillaPtr() + SciMsg( pSci, SCI_GOTOLINE, 12, 0) + + ' Make this the Main file + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) + + ' Save the main file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + AfxStrPathname( "NAME", gApp.ProjectFilename ) & _ + ".bas" + pDoc->SaveFile + end if + + ' Give a breather for the tab control and explorer node to update + AfxDoEvents() + + ' Create the frmMain + OnCommand_DesignerNewForm(HWND_FRMMAIN) + + pDoc = gTTabCtl.GetActiveDocumentPtr + if pDoc then + ' Set the Name property of the new form to frmMain + pCtrl = GetFormCtrlPtr(pDoc) + if pCtrl then SetControlProperty( pCtrl, "NAME", "frmMain" ) + + ' Add something to the code editor so that it does not automatically + ' generate the Application.Run code for the form. + szText = "' Auto generated frmMain form file" & vbcrlf + pDoc->SetText( szText ) + + ' Save the form file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + "frmMain.inc" + pDoc->SaveFile + end if + + + ' Change the Build Configuration to match the first "GUI" (non-debug) type of entry. + for i as long = lbound(gConfig.Builds) to ubound(gConfig.Builds) + if instr( " " & ucase(gConfig.Builds(i).wszOptions), " -S GUI") then + gApp.ProjectBuild = gConfig.Builds(i).id + exit for + end if + NEXT + + + case IDC_FRMPROJECTOPTIONS_OPTCONSOLE + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + szText = _ + "'#CONSOLE ON" & vbcrlf & _ + "#Define UNICODE" & vbcrlf & _ + "#Include Once " & DQ & "windows.bi" & DQ & vbcrlf & _ + vbcrlf & _ + vbcrlf & _ + "Print" & vbcrlf & _ + "Print " & DQ & "Press any key..." & DQ & vbcrlf & _ + "Sleep" & vbcrlf + + pDoc->SetText( szText ) + dim as any ptr pSci = pDoc->GetActiveScintillaPtr() + SciMsg( pSci, SCI_GOTOLINE, 4, 0) + + ' Make this the Main file + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) + + ' Save the main file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + AfxStrPathname( "NAME", gApp.ProjectFilename ) & _ + ".bas" + pDoc->SaveFile + end if + ' Change the Build Configuration to match the first "Console" (non-debug) type of entry. + for i as long = lbound(gConfig.Builds) to ubound(gConfig.Builds) + if instr( " " & ucase(gConfig.Builds(i).wszOptions), " -S CONSOLE") then + gApp.ProjectBuild = gConfig.Builds(i).id + exit for + end if + NEXT + + + + case IDC_FRMPROJECTOPTIONS_OPTDLL + ' Change the Build Configuration to match the first "DLL" type of entry. + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + szText = _ + vbcrlf & _ + "Extern " & DQ & "windows" & DQ & vbcrlf & _ + vbcrlf & _ + "'' Windows DLL template code" & vbcrlf & _ + vbcrlf & _ + "'' Add two numbers together and return the result" & vbcrlf & _ + "Public Function Add2 alias " & DQ & "Add2" & DQ & "( ByVal x As Integer, ByVal y As Integer ) As Integer Export" & vbcrlf & _ + " Return( x + y )" & vbcrlf & _ + "End Function" & vbcrlf & _ + vbcrlf & _ + "End Extern" & vbcrlf + + pDoc->SetText( szText ) + dim as any ptr pSci = pDoc->GetActiveScintillaPtr() + SciMsg( pSci, SCI_GOTOLINE, 9, 0) + + ' Make this the Main file + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) + + ' Save the main file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + AfxStrPathname( "NAME", gApp.ProjectFilename ) & _ + ".bas" + pDoc->SaveFile + + end if + + ' Change the Build Configuration to match the first "DLL" type of entry. + for i as long = lbound(gConfig.Builds) to ubound(gConfig.Builds) + if instr( " " & ucase(gConfig.Builds(i).wszOptions), " -DLL") then + gApp.ProjectBuild = gConfig.Builds(i).id + exit for + end if + NEXT + + + case IDC_FRMPROJECTOPTIONS_OPTSTATIC + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + szText = _ + vbcrlf & _ + "Extern " & DQ & "windows" & DQ & vbcrlf & _ + vbcrlf & _ + "'' Static Library template code" & vbcrlf & _ + vbcrlf & _ + "'' Add two numbers together and return the result" & vbcrlf & _ + "Public Function Add2( ByVal x As Integer, ByVal y As Integer ) As Integer" & vbcrlf & _ + " Return( x + y )" & vbcrlf & _ + "End Function" & vbcrlf & _ + vbcrlf & _ + "End Extern" & vbcrlf + + pDoc->SetText( szText ) + dim as any ptr pSci = pDoc->GetActiveScintillaPtr() + SciMsg( pSci, SCI_GOTOLINE, 6, 0) + + ' Make this the Main file + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) + + ' Save the main file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + AfxStrPathname( "NAME", gApp.ProjectFilename ) & _ + ".bas" + pDoc->SaveFile + end if + + ' Change the Build Configuration to match the first "LIB" type of entry. + for i as long = lbound(gConfig.Builds) to ubound(gConfig.Builds) + if instr( " " & ucase(gConfig.Builds(i).wszOptions), " -LIB") then + gApp.ProjectBuild = gConfig.Builds(i).id + exit for + end if + NEXT + + end select + + + select case gApp.NewProjectTemplateType + case IDC_FRMPROJECTOPTIONS_OPTDLL, IDC_FRMPROJECTOPTIONS_OPTSTATIC + ' Give a breather for the tab control and explorer node to update + AfxDoEvents() + pDoc = OnCommand_FileNew(HWND_FRMMAIN) + if pDoc then + szText = _ + "#inclib " & DQ & AfxStrPathname( "NAME", gApp.ProjectFilename ) & DQ & vbcrlf & _ + "Declare Function Add2( ByVal x As Integer, ByVal y As Integer ) As Integer" & vbcrlf + + pDoc->SetText( szText ) + dim as any ptr pSci = pDoc->GetActiveScintillaPtr() + SciMsg( pSci, SCI_GOTOLINE, 3, 0) + + ' Make this the Main file + SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEHEADER, 0), 0) + + ' Save the main file using the Project name and path + pDoc->IsNewFlag = false + pDoc->Diskfilename = AfxStrPathname( "PATH", gApp.ProjectFilename ) & _ + AfxStrPathname( "NAME", gApp.ProjectFilename ) & _ + ".bi" + pDoc->SaveFile + end if + end select + + + ' Ensure that the main form files combo shows the correct list of files + frmMain_LoadComboFiles + + ' Make sure that the Explorer root node is expanded + dim as HWND hTree = GetDlgItem(HWND_FRMEXPLORER, IDC_FRMEXPLORER_TREE) + TreeView_Expand( hTree, gApp.hExplorerRootNode, TVE_EXPAND) + + end if + + gApp.IsNewProjectFlag = false + gApp.IsProjectLoading = FALSE + + frmBuildConfig_LoadBuildComboBox frmExplorer_PositionWindows frmMain_PositionWindows diff --git a/src/frmProjectOptions.bi b/src/frmProjectOptions.bi index cfa57003..05d2a5be 100644 --- a/src/frmProjectOptions.bi +++ b/src/frmProjectOptions.bi @@ -18,10 +18,18 @@ #Define IDC_FRMPROJECTOPTIONS_LABEL3 1002 #Define IDC_FRMPROJECTOPTIONS_LABEL4 1003 #Define IDC_FRMPROJECTOPTIONS_LABEL5 1004 -#Define IDC_FRMPROJECTOPTIONS_TXTPROJECTPATH 1005 -#Define IDC_FRMPROJECTOPTIONS_CMDSELECT 1006 -#Define IDC_FRMPROJECTOPTIONS_TXTOPTIONS32 1007 -#Define IDC_FRMPROJECTOPTIONS_TXTOPTIONS64 1008 -#Define IDC_FRMPROJECTOPTIONS_CHKMANIFEST 1009 +#Define IDC_FRMPROJECTOPTIONS_LABEL6 1005 +#Define IDC_FRMPROJECTOPTIONS_LABEL7 1006 +#Define IDC_FRMPROJECTOPTIONS_TXTPROJECTPATH 1007 +#Define IDC_FRMPROJECTOPTIONS_CMDSELECT 1008 +#Define IDC_FRMPROJECTOPTIONS_TXTOPTIONS32 1009 +#Define IDC_FRMPROJECTOPTIONS_TXTOPTIONS64 1010 +#Define IDC_FRMPROJECTOPTIONS_CHKMANIFEST 1011 +#Define IDC_FRMPROJECTOPTIONS_OPTNONE 1012 +#Define IDC_FRMPROJECTOPTIONS_OPTBLANK 1013 +#Define IDC_FRMPROJECTOPTIONS_OPTVD 1014 +#Define IDC_FRMPROJECTOPTIONS_OPTCONSOLE 1015 +#Define IDC_FRMPROJECTOPTIONS_OPTDLL 1016 +#Define IDC_FRMPROJECTOPTIONS_OPTSTATIC 1017 declare Function frmProjectOptions_Show( ByVal hWndParent As HWnd, byval IsNewProject as boolean ) As LRESULT diff --git a/src/frmProjectOptions.inc b/src/frmProjectOptions.inc index 07f08d91..8b1ceffe 100644 --- a/src/frmProjectOptions.inc +++ b/src/frmProjectOptions.inc @@ -95,26 +95,20 @@ private Function frmProjectOptions_SaveProjectOptions( ByVal HWnd As HWnd ) As B ' Save the actual Project data to disk. gConfig.ProjectSaveToFile() - if gApp.IsNewProjectFlag then - ' Need to remove resource file (if created) from the document list otherwise it - ' will be loaded again and it will display twice in the Explorer. - gApp.RemoveAllDocuments() - - ' Open the new project so it displays in the Explorer treeview. Pass the - ' variable wText because passing gApp.ProjectFilename will cause that variable - ' to get reset because the parameter is byref and eventually that variable - ' gets assigned a null. - frmMain_OpenProjectSafely(HWND_FRMMAIN, wText) - - ' Add a new blank file to the project and set it as the Main by default - dim pDoc as clsDocument ptr = OnCommand_FileNew(HWND_FRMMAIN) - if pDoc then - SendMessage( HWND_FRMMAIN, WM_COMMAND, MAKELONG(IDM_SETFILEMAIN, 0), 0) - end if - ' Ensure that the main form files combo shows the correct list of files - frmMain_LoadComboFiles + if Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTNONE) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTNONE + elseif Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTBLANK) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTBLANK + elseif Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTVD) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTVD + elseif Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTCONSOLE) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTCONSOLE + elseif Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTDLL) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTDLL + elseif Button_GetCheck( GetDlgItem(Hwnd, IDC_FRMPROJECTOPTIONS_OPTSTATIC) ) THEN + gApp.NewProjectTemplateType = IDC_FRMPROJECTOPTIONS_OPTSTATIC end if - + function = true End Function @@ -151,9 +145,11 @@ private Function frmProjectOptions_OnCommand( ByVal HWnd As HWnd, _ Case IDCANCEL If codeNotify = BN_CLICKED Then + gApp.IsNewProjectFlag = false SendMessage HWnd, WM_CLOSE, 0, 0 exit function End If + End Select Function = 0 @@ -193,8 +189,6 @@ End Function ' Process WM_DESTROY message for window/dialog: frmProjectOptions ' ======================================================================================== private Function frmProjectOptions_OnDestroy( byval HWnd As HWnd ) As LRESULT - gApp.IsProjectLoading = FALSE - gApp.IsNewProjectFlag = false PostQuitMessage(0) Function = 0 End Function @@ -228,6 +222,7 @@ public Function frmProjectOptions_Show( ByVal hWndParent As HWnd, _ ) As LRESULT Dim wszTitle As WString * MAX_PATH + dim as long nLeft, nTop, nWidth, nHeight, nMidPoint ' Create the main window and child controls Dim pWindow As CWindow Ptr = New CWindow @@ -240,8 +235,12 @@ public Function frmProjectOptions_Show( ByVal hWndParent As HWnd, _ pWindow->SetClientSize(600, 320) pWindow->Center(pWindow->hWindow, hWndParent) + dim as RECT rcClient + GetClientRect( hForm, @rcClient ) + nMidPoint = pWindow->UnScaleX((rcClient.Right / 2)) + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL1, L(240,"Project Path"), 26, 15, 235, 18, _ - WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT Or SS_NOTIFY, _ + WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT, _ WS_EX_LEFT Or WS_EX_LTRREADING) Dim As HWnd hProjectPath = _ pWindow->AddControl("TEXTBOX", , IDC_FRMPROJECTOPTIONS_TXTPROJECTPATH, "", 26, 35, 508, 20, _ @@ -251,38 +250,86 @@ public Function frmProjectOptions_Show( ByVal hWndParent As HWnd, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or BS_TEXT Or BS_PUSHBUTTON Or BS_NOTIFY Or BS_CENTER Or BS_VCENTER, _ WS_EX_LEFT Or WS_EX_LTRREADING) - pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL5, L(283,"Specify compiler options in addition to the selected build configuration"), 26, 95, 500, 18, _ - WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT Or SS_NOTIFY, _ + nTop = iIf(IsNewProject, 75, 95) + nWidth = iIf(IsNewProject, 260, 555) + nHeight = iIf(IsNewProject, 40, 20) + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL5, L(283,"Specify compiler options in addition to the selected build configuration") & ":", 26, nTop, nWidth, nHeight, _ + WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT, _ WS_EX_LEFT Or WS_EX_LTRREADING) - pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL2, L(241,"Other Options (32-bit compiler)"), 26, 121, 235, 18, _ - WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT Or SS_NOTIFY, _ + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL2, L(241,"Other Options (32-bit compiler)"), 26, 121, nWidth, 18, _ + WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT, _ WS_EX_LEFT Or WS_EX_LTRREADING) + nWidth = iIf(IsNewProject, 260, 555) Dim As HWnd hProjectOther32 = _ - pWindow->AddControl("TEXTBOX", , IDC_FRMPROJECTOPTIONS_TXTOPTIONS32, "", 26, 141, 555, 20, _ + pWindow->AddControl("TEXTBOX", , IDC_FRMPROJECTOPTIONS_TXTOPTIONS32, "", 26, 141, nWidth, 20, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or ES_LEFT Or ES_AUTOHSCROLL, _ WS_EX_CLIENTEDGE Or WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) - pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL4, L(242,"Other Options (64-bit compiler)"), 26, 170, 235, 18, _ - WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT Or SS_NOTIFY, _ + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL4, L(242,"Other Options (64-bit compiler)"), 26, 170, nWidth, 18, _ + WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT, _ WS_EX_LEFT Or WS_EX_LTRREADING) + nWidth = iIf(IsNewProject, 260, 555) Dim As HWnd hProjectOther64 = _ - pWindow->AddControl("TEXTBOX", , IDC_FRMPROJECTOPTIONS_TXTOPTIONS64, "", 26, 190, 555, 20, _ + pWindow->AddControl("TEXTBOX", , IDC_FRMPROJECTOPTIONS_TXTOPTIONS64, "", 26, 190, nWidth, 20, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or ES_LEFT Or ES_AUTOHSCROLL, _ WS_EX_CLIENTEDGE Or WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nWidth = iIf(IsNewProject, 260, 555) dim as hwnd hManifest = _ - pWindow->AddControl("CHECKBOX", , IDC_FRMPROJECTOPTIONS_CHKMANIFEST, L(308,"Create resource file and manifest"), 26, 222, 400, 20, _ + pWindow->AddControl("CHECKBOX", , IDC_FRMPROJECTOPTIONS_CHKMANIFEST, L(308,"Create resource file and manifest"), 26, 222, nWidth, 20, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or BS_TEXT Or BS_NOTIFY Or BS_AUTOCHECKBOX Or BS_LEFT Or BS_VCENTER, _ WS_EX_LEFT Or WS_EX_LTRREADING) - pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL3, "", 10, 250, 572, 2, _ + If IsNewProject Then + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL6, "", nMidPoint, 75, 3, 175, _ + WS_CHILD Or WS_VISIBLE Or SS_LEFT Or SS_SUNKEN, _ + WS_EX_LEFT Or WS_EX_LTRREADING) + nLeft = nMidPoint + 20 + nTop = 75 + nWidth = 270 + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL7, L(176,"Templates") & ":", nLeft, nTop, nWidth, 20, _ + WS_CHILD Or WS_VISIBLE Or WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or SS_LEFT, _ + WS_EX_LEFT Or WS_EX_LTRREADING) + nLeft = nLeft + 20 + nTop = nTop + 22 + nWidth = 260 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTNONE, L(388,"None"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER or WS_GROUP, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nTop = nTop + 22 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTBLANK, L(389,"Blank Document"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nTop = nTop + 22 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTVD, L(390,"Visual Designer"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nTop = nTop + 22 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTCONSOLE, L(391,"Console"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nTop = nTop + 22 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTDLL, L(392,"Windows DLL"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + nTop = nTop + 22 + pWindow->AddControl("RADIOBUTTON", , IDC_FRMPROJECTOPTIONS_OPTSTATIC, L(393,"Static Library"), nLeft, nTop, nWidth, 20, _ + WS_VISIBLE OR WS_TABSTOP OR BS_AUTORADIOBUTTON OR BS_LEFT OR BS_VCENTER, _ + WS_EX_LEFT Or WS_EX_LTRREADING Or WS_EX_RIGHTSCROLLBAR) + CheckRadioButton( hForm, IDC_FRMPROJECTOPTIONS_OPTNONE, _ + IDC_FRMPROJECTOPTIONS_OPTSTATIC, _ + IDC_FRMPROJECTOPTIONS_OPTNONE ) + end if + + + pWindow->AddControl("LABEL", , IDC_FRMPROJECTOPTIONS_LABEL3, "", 10, 260, 572, 2, _ WS_CHILD Or WS_VISIBLE Or SS_LEFT Or SS_NOTIFY Or SS_SUNKEN, _ WS_EX_LEFT Or WS_EX_LTRREADING) - pWindow->AddControl("BUTTON", , IDOK, L(0,"&OK"), 423, 265, 74, 28, _ + pWindow->AddControl("BUTTON", , IDOK, L(0,"&OK"), 423, 275, 74, 28, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or BS_TEXT Or BS_DEFPUSHBUTTON Or BS_NOTIFY Or BS_CENTER Or BS_VCENTER, _ WS_EX_LEFT Or WS_EX_LTRREADING) - pWindow->AddControl("BUTTON", , IDCANCEL, L(1,"&Cancel"), 508, 265, 74, 28, _ + pWindow->AddControl("BUTTON", , IDCANCEL, L(1,"&Cancel"), 508, 275, 74, 28, _ WS_CHILD Or WS_VISIBLE Or WS_TABSTOP Or BS_TEXT Or BS_PUSHBUTTON Or BS_NOTIFY Or BS_CENTER Or BS_VCENTER, _ WS_EX_LEFT Or WS_EX_LTRREADING) diff --git a/src/modCompile.inc b/src/modCompile.inc index 3480f381..cd7ccddc 100644 --- a/src/modCompile.inc +++ b/src/modCompile.inc @@ -1054,13 +1054,13 @@ public Function code_Compile( ByVal wID As Long ) As BOOLEAN ' Need to determine the output filename in order to search for any existing ' running process. gCompile.OutputFilename = gCompile.MainFolder & gCompile.MainName & wstr(".exe") - If Instr(Ucase(gCompile.CompileFlags), wstr(" -DLL")) Then + If Instr(" " & Ucase(gCompile.CompileFlags), wstr(" -DLL")) Then gCompile.OutputFilename = gCompile.MainFolder & gCompile.MainName & wstr(".dll") End If - If Instr(Ucase(gCompile.CompileFlags), wstr(" -DYLIB")) Then + If Instr(" " & Ucase(gCompile.CompileFlags), wstr(" -DYLIB")) Then gCompile.OutputFilename = gCompile.MainFolder & gCompile.MainName & wstr(".dll") End If - If Instr(Ucase(gCompile.CompileFlags), wstr(" -LIB")) Then + If Instr(" " & Ucase(gCompile.CompileFlags), wstr(" -LIB")) Then gCompile.OutputFilename = gCompile.MainFolder & wstr("lib") & gCompile.MainName & wstr(".a") End If diff --git a/src/modMenus.inc b/src/modMenus.inc index 73d40be1..8363d5ed 100644 --- a/src/modMenus.inc +++ b/src/modMenus.inc @@ -95,7 +95,6 @@ public Function frmMain_BuildMenu( ByVal pWindow As CWindow Ptr ) As HMENU AppendMenu hPopUpMenu, MF_ENABLED, IDM_FINDINFILES, L(257,"Find In Files...") & Chr(9) & "Ctrl+Shift+F" AppendMenu hPopUpMenu, MF_ENABLED, IDM_REPLACE, L(46,"Replace") & "..." & Chr(9) & "Ctrl+R" AppendMenu hPopUpMenu, MF_SEPARATOR, 0, "" - AppendMenu hPopUpMenu, MF_SEPARATOR, 0, "" AppendMenu hPopUpMenu, MF_ENABLED, IDM_GOTO, L(49,"Goto Line") & "..." & Chr(9) & "Ctrl+G" AppendMenu hPopUpMenu, MF_SEPARATOR, 0, "" hPopUpSubMenu = CreatePopupMenu @@ -345,6 +344,7 @@ public Function frmMain_ChangeTopMenuStates() As Long ' Items that will always be enabled. EnableMenuItem hMenu, IDM_FILENEW, MF_BYCOMMAND Or MF_ENABLED EnableMenuItem hMenu, IDM_FILEOPEN, MF_BYCOMMAND Or MF_ENABLED + EnableMenuItem hMenu, IDM_FILEOPENTEMPLATES, MF_BYCOMMAND Or MF_ENABLED EnableMenuItem hMenu, IDM_COMMAND, MF_BYCOMMAND Or MF_ENABLED EnableMenuItem hMenu, IDM_EXIT, MF_BYCOMMAND Or MF_ENABLED EnableMenuItem hMenu, IDM_VIEWEXPLORER, MF_BYCOMMAND Or MF_ENABLED diff --git a/src/modVDControls.inc b/src/modVDControls.inc index 57a3fdc6..f9c52211 100644 --- a/src/modVDControls.inc +++ b/src/modVDControls.inc @@ -604,7 +604,9 @@ private function AttachDefaultControlEvents( byval pCtrl as clsControl ptr ) as AddControlEvent(pCtrl, "MouseUp") AddControlEvent(pCtrl, "MouseDoubleClick") AddControlEvent(pCtrl, "MouseEnter") - AddControlEvent(pCtrl, "MouseHover") + ' Do not add a MouseHover event for the ListView as it + ' seems to invoke hot tracking and automatic row selection. + 'AddControlEvent(pCtrl, "MouseHover") AddControlEvent(pCtrl, "MouseLeave") AddControlEvent(pCtrl, "KeyDown") AddControlEvent(pCtrl, "KeyPress")