summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2005-06-25 03:22:49 +0000
committerleo2005-06-25 03:22:49 +0000
commit511456b0716460eace01efe5861bf7381bd5612f (patch)
treeec472a85cdb2e21abbcb0be167c64976abb2e9ec
parenta9c67c1a2bfb96ed4abcf9bd68eed188546835ca (diff)
Added an option to check for newer versions on startup.
git-svn-id: http://svn.leocad.org/trunk@412 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--win/LeoCAD.rc46
-rw-r--r--win/Leocad.cpp130
-rw-r--r--win/Prefpage.cpp6
-rw-r--r--win/Prefpage.h1
-rw-r--r--win/resource.h3
5 files changed, 112 insertions, 74 deletions
diff --git a/win/LeoCAD.rc b/win/LeoCAD.rc
index 8014e2c..00e291a 100644
--- a/win/LeoCAD.rc
+++ b/win/LeoCAD.rc
@@ -963,39 +963,41 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,122,24,41,14
END
-IDD_PREFGENERAL DIALOG DISCARDABLE 0, 0, 240, 114
+IDD_PREFGENERAL DIALOG DISCARDABLE 0, 0, 245, 132
STYLE WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Sans Serif"
BEGIN
- GROUPBOX "Saving",IDC_STATIC,7,7,126,66
+ GROUPBOX "Saving",IDC_STATIC,7,7,130,70
CONTROL "Autosave every",IDC_GENDLG_AUTOSAVE,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,12,17,63,8
- EDITTEXT IDC_GENDLG_SAVETIME,77,16,20,12,ES_AUTOHSCROLL
- LTEXT "minutes",IDC_STATIC,101,17,24,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,12,19,63,8
+ EDITTEXT IDC_GENDLG_SAVETIME,77,18,20,12,ES_AUTOHSCROLL
+ LTEXT "minutes",IDC_STATIC,101,19,24,8
CONTROL "Create backups",IDC_GENDLG_BACKUP,"Button",
- BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,12,32,65,8
- LTEXT "Default projects folder:",IDC_STATIC,12,45,72,8
- EDITTEXT IDC_GENDLG_FOLDER,12,57,100,10,ES_AUTOHSCROLL
- PUSHBUTTON "...",IDC_GENDLG_FOLDERBTN,118,57,8,10
- LTEXT "Default user:",IDC_STATIC,11,77,44,8
- EDITTEXT IDC_GENDLG_USER,57,76,75,10,ES_AUTOHSCROLL
- LTEXT "Mouse sensitivity",IDC_STATIC,11,92,59,8
+ BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,12,35,65,8
+ LTEXT "Default projects folder:",IDC_STATIC,12,47,72,8
+ EDITTEXT IDC_GENDLG_FOLDER,12,59,105,12,ES_AUTOHSCROLL
+ PUSHBUTTON "...",IDC_GENDLG_FOLDERBTN,121,59,8,10
+ LTEXT "Default user:",IDC_STATIC,11,85,44,8
+ EDITTEXT IDC_GENDLG_USER,57,83,75,12,ES_AUTOHSCROLL
+ LTEXT "Mouse sensitivity",IDC_STATIC,11,100,59,8
CONTROL "Slider1",IDC_GENDLG_MOUSE,"msctls_trackbar32",TBS_BOTH |
- TBS_NOTICKS | WS_TABSTOP,76,91,31,10
- GROUPBOX "Pieces Toolbar",IDC_STATIC,141,7,92,93
+ TBS_NOTICKS | WS_TABSTOP,76,99,31,10
+ GROUPBOX "Pieces Toolbar",IDC_STATIC,146,7,92,93
CONTROL "Show subparts",IDC_GENDLG_SUBPARTS,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,19,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,19,81,8
CONTROL "Show piece numbers",IDC_GENDLG_NUMBERS,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,32,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,32,81,8
CONTROL "Enable preview",IDC_GENDLG_PREVIEW,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,45,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,45,81,8
CONTROL "Auto zoom preview",IDC_GENDLG_ZOOM,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,58,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,58,81,8
CONTROL "Sort pieces by group",IDC_GENDLG_GROUP,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,71,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,71,81,8
CONTROL "Show combobox",IDC_GENDLG_COMBO,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,146,84,81,8
+ BS_AUTOCHECKBOX | WS_TABSTOP,152,84,81,8
+ CONTROL "Check for updates on startup",IDC_GENDLG_UPDATES,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,11,113,119,8
END
IDD_PREFDRAWING DIALOG DISCARDABLE 0, 0, 240, 114
@@ -1545,9 +1547,9 @@ BEGIN
IDD_PREFGENERAL, DIALOG
BEGIN
LEFTMARGIN, 7
- RIGHTMARGIN, 233
+ RIGHTMARGIN, 238
TOPMARGIN, 7
- BOTTOMMARGIN, 106
+ BOTTOMMARGIN, 124
END
IDD_PREFDRAWING, DIALOG
diff --git a/win/Leocad.cpp b/win/Leocad.cpp
index 1d46d2b..8633e43 100644
--- a/win/Leocad.cpp
+++ b/win/Leocad.cpp
@@ -8,6 +8,7 @@
#include "CADDoc.h"
#include "CADView.h"
#include <wininet.h>
+#include <process.h>
#include "project.h"
#include "globals.h"
#include "system.h"
@@ -49,6 +50,81 @@ void wprintf(char *fmt, ...)
}
#endif
+// If Data is NULL this function won't display a message if there are no updates.
+static void CheckForUpdates(void* Data)
+{
+ HINTERNET session = InternetOpen("LeoCAD", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) ;
+
+ char szSizeBuffer[32];
+ DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
+ DWORD dwFileSize;
+ DWORD dwBytesRead;
+ CString Contents;
+
+ HINTERNET hHttpFile = InternetOpenUrl(session, "http://www.leocad.org/updates.txt", NULL, 0, 0, 0);
+
+ if (hHttpFile)
+ {
+ if(HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH, szSizeBuffer, &dwLengthSizeBuffer, NULL))
+ {
+ dwFileSize = atol(szSizeBuffer);
+ LPSTR szContents = Contents.GetBuffer(dwFileSize);
+
+ if (InternetReadFile(hHttpFile, szContents, dwFileSize, &dwBytesRead))
+ {
+ float ver;
+ int lib;
+
+ if (sscanf (szContents, "%f %d", &ver, &lib) == 2)
+ {
+ CString str;
+ bool Update = false;
+
+ if (ver > LC_VERSION_MAJOR + (float)LC_VERSION_MINOR/100 + (float)LC_VERSION_PATCH/1000)
+ {
+ str.Format("There's a newer version of LeoCAD available for download (%0.3f).\n", ver);
+ Update = true;
+ }
+ else
+ str = "You are using the latest version of LeoCAD.\n";
+
+ if (lib > project->GetPiecesLibrary ()->GetPieceCount ())
+ {
+ str += "There are new pieces available.\n\n";
+ Update = true;
+ }
+ else
+ str += "There are no new pieces available at this time.\n";
+
+ if (Data || Update)
+ {
+ if (Update)
+ {
+ str += "Would you like to visit the LeoCAD website now?\n";
+
+ if (AfxMessageBox(str, MB_YESNO | MB_ICONQUESTION) == IDYES)
+ {
+ ShellExecute(::GetDesktopWindow(), _T("open"), _T("http://www.leocad.org"), NULL, NULL, SW_NORMAL);
+ }
+ }
+ else
+ AfxMessageBox(str, MB_OK | MB_ICONINFORMATION);
+ }
+ }
+ else
+ AfxMessageBox("Unknown file information.");
+ }
+ InternetCloseHandle(hHttpFile);
+ }
+ else
+ AfxMessageBox("Could not connect.");
+ }
+ else
+ AfxMessageBox("Could not connect.");
+
+ InternetCloseHandle(session);
+}
+
/////////////////////////////////////////////////////////////////////////////
// CCADApp
@@ -253,6 +329,9 @@ BOOL CCADApp::InitInstance()
project->UpdateAllViews (NULL);
+ if (AfxGetApp()->GetProfileInt("Settings", "CheckUpdates", 1))
+ _beginthread(CheckForUpdates, 0, NULL);
+
return TRUE;
}
@@ -286,56 +365,7 @@ int CCADApp::ExitInstance()
void CCADApp::OnHelpUpdates()
{
- HINTERNET session = InternetOpen("LeoCAD", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0) ;
-
- char szSizeBuffer[32];
- DWORD dwLengthSizeBuffer = sizeof(szSizeBuffer);
- DWORD dwFileSize;
- DWORD dwBytesRead;
- CString Contents;
-
- HINTERNET hHttpFile = InternetOpenUrl(session, "http://www.leocad.org/updates.txt", NULL, 0, 0, 0);
-
- if (hHttpFile)
- {
- if(HttpQueryInfo(hHttpFile,HTTP_QUERY_CONTENT_LENGTH, szSizeBuffer, &dwLengthSizeBuffer, NULL))
- {
- dwFileSize = atol(szSizeBuffer);
- LPSTR szContents = Contents.GetBuffer(dwFileSize);
-
- if (InternetReadFile(hHttpFile, szContents, dwFileSize, &dwBytesRead))
- {
- float ver;
- int lib;
-
- if (sscanf (szContents, "%f %d", &ver, &lib) == 2)
- {
- CString str;
-
- if (ver > LC_VERSION_MAJOR + (float)LC_VERSION_MINOR/100 + (float)LC_VERSION_PATCH/1000)
- str.Format("There's a newer version of LeoCAD available for download (%0.3f).\n\n", ver);
- else
- str = "You are using the latest version of LeoCAD.\n\n";
-
- if (lib > project->GetPiecesLibrary ()->GetPieceCount ())
- str += "There are new pieces available.\n";
- else
- str += "There are no new pieces available at this time.\n";
-
- AfxMessageBox(str, MB_OK | MB_ICONINFORMATION);
- }
- else
- AfxMessageBox("Unknown file information.");
- }
- InternetCloseHandle(hHttpFile);
- }
- else
- AfxMessageBox("Could not connect.");
- }
- else
- AfxMessageBox("Could not connect.");
-
- InternetCloseHandle(session);
+ CheckForUpdates(this);
}
void CCADApp::OnHelpHomePage()
diff --git a/win/Prefpage.cpp b/win/Prefpage.cpp
index cfa2fcd..acea191 100644
--- a/win/Prefpage.cpp
+++ b/win/Prefpage.cpp
@@ -37,6 +37,7 @@ CPreferencesGeneral::CPreferencesGeneral() : CPropertyPage(CPreferencesGeneral::
m_bAutoSave = FALSE;
m_bCombo = FALSE;
m_strUser = _T("");
+ m_Updates = FALSE;
//}}AFX_DATA_INIT
}
@@ -61,6 +62,7 @@ void CPreferencesGeneral::DoDataExchange(CDataExchange* pDX)
DDX_Check(pDX, IDC_GENDLG_COMBO, m_bCombo);
DDX_Text(pDX, IDC_GENDLG_USER, m_strUser);
DDV_MaxChars(pDX, m_strUser, 100);
+ DDX_Check(pDX, IDC_GENDLG_UPDATES, m_Updates);
//}}AFX_DATA_MAP
}
@@ -90,8 +92,9 @@ void CPreferencesGeneral::SetOptions(int nSaveInterval, int nMouse, const char*
m_strFolder = strFolder;
m_strUser = strUser;
+ m_Updates = AfxGetApp()->GetProfileInt("Settings", "CheckUpdates", 1);
int i = AfxGetApp()->GetProfileInt("Settings", "Piecebar Options",
- PIECEBAR_PREVIEW|PIECEBAR_GROUP|PIECEBAR_COMBO|PIECEBAR_ZOOMPREVIEW);
+ PIECEBAR_PREVIEW|PIECEBAR_GROUP|PIECEBAR_COMBO|PIECEBAR_ZOOMPREVIEW);
m_bPreview = (i & PIECEBAR_PREVIEW) != 0;
m_bSubparts = (i & PIECEBAR_SUBPARTS) != 0;
m_bGroup = (i & PIECEBAR_GROUP) != 0;
@@ -117,6 +120,7 @@ void CPreferencesGeneral::GetOptions(int* nSaveTime, int* nMouse, char* strFolde
if (m_bZoom) i |= PIECEBAR_ZOOMPREVIEW;
AfxGetApp()->WriteProfileInt("Settings", "Piecebar Options", i);
+ AfxGetApp()->WriteProfileInt("Settings", "CheckUpdates", m_Updates);
}
BOOL CPreferencesGeneral::OnInitDialog()
diff --git a/win/Prefpage.h b/win/Prefpage.h
index a9a3657..a2534cc 100644
--- a/win/Prefpage.h
+++ b/win/Prefpage.h
@@ -35,6 +35,7 @@ public:
BOOL m_bCombo;
CString m_bUser;
CString m_strUser;
+ BOOL m_Updates;
//}}AFX_DATA
diff --git a/win/resource.h b/win/resource.h
index 9252bd8..9b2bff2 100644
--- a/win/resource.h
+++ b/win/resource.h
@@ -434,6 +434,7 @@
#define IDC_MF_LEGRSPIN 1243
#define IDC_ABTDLG_VERSION 1243
#define IDC_MF_SHOELSPIN 1244
+#define IDC_GENDLG_UPDATES 1244
#define IDC_MF_SHOERSPIN 1245
#define ID_EDIT_SELECTALL 32772
#define ID_EDIT_SELECTNONE 32773
@@ -670,7 +671,7 @@
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 235
#define _APS_NEXT_COMMAND_VALUE 33158
-#define _APS_NEXT_CONTROL_VALUE 1244
+#define _APS_NEXT_CONTROL_VALUE 1245
#define _APS_NEXT_SYMED_VALUE 121
#endif
#endif