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")