added: the program can check for an update at startup
git-svn-id: svn://ttmath.org/publicrep/ttcalc/trunk@236 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
parent
c0a0660482
commit
58069828e5
|
@ -2,6 +2,7 @@ Version 0.9.0 prerelease (2009.11.03):
|
|||
* fixed: when 'C' button was pressed, the cursor was not put in the edit window
|
||||
* added: Pad window - a multiline edit window
|
||||
* added: Checking for update dialog box
|
||||
the program can check automatically for an update at startup
|
||||
* added: there are some new buttons on the standard tab
|
||||
- (...) - the whole expression is surrounded by brackets (ctrl+0 short cut)
|
||||
- 1/(...)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
o = resource.o calculation.o convert.o download.o functions.o iniparser.o languages.o mainwindow.o pad.o parsermanager.o programresources.o tabs.o update.o variables.o winmain.o
|
||||
o = resource.o calculation.o convert.o download.o functions.o iniparser.o languages.o mainwindow.o pad.o parsermanager.o programresources.o tabs.o threadcontroller.o update.o variables.o winmain.o
|
||||
|
||||
calculation.o: calculation.cpp compileconfig.h parsermanager.h resource.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h tabs.h messages.h
|
||||
convert.o: convert.cpp convert.h compileconfig.h bigtypes.h
|
||||
|
@ -11,9 +11,10 @@ pad.o: pad.cpp programresources.h compileconfig.h iniparser.h languages.h big
|
|||
parsermanager.o: parsermanager.cpp compileconfig.h parsermanager.h resource.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h tabs.h messages.h
|
||||
programresources.o: programresources.cpp compileconfig.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
tabs.o: tabs.cpp compileconfig.h tabs.h resource.h messages.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
threadcontroller.o: threadcontroller.cpp threadcontroller.h stopcalculating.h compileconfig.h
|
||||
update.o: update.cpp compileconfig.h update.h download.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h messages.h resource.h winmain.h tabs.h pad.h
|
||||
variables.o: variables.cpp compileconfig.h tabs.h resource.h messages.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h
|
||||
winmain.o: winmain.cpp compileconfig.h winmain.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h resource.h messages.h tabs.h pad.h
|
||||
winmain.o: winmain.cpp compileconfig.h winmain.h programresources.h iniparser.h languages.h bigtypes.h threadcontroller.h stopcalculating.h convert.h resource.h messages.h tabs.h pad.h update.h download.h
|
||||
|
||||
.SUFFIXES: .cpp .o
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -42,7 +42,7 @@
|
|||
|
||||
Download::Download()
|
||||
{
|
||||
buffer_len = 512;
|
||||
buffer_len = 128;
|
||||
progress = 0;
|
||||
|
||||
buffer = new char[buffer_len];
|
||||
|
@ -122,7 +122,7 @@ bool res = true;
|
|||
|
||||
down_size = 0;
|
||||
|
||||
HINTERNET hint = InternetOpen("TTCalcDownload",INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0);
|
||||
HINTERNET hint = InternetOpen("TTCalcAutoUpdate",INTERNET_OPEN_TYPE_DIRECT, 0, 0, 0);
|
||||
if( !hint )
|
||||
return false;
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -656,7 +656,7 @@ void Languages::InitGuiMessagesTab()
|
|||
InsertGuiPair(menu_view_lang_spanish, "&Hiszpañski");
|
||||
InsertGuiPair(menu_view_lang_danish, "&Duñski");
|
||||
InsertGuiPair(menu_view_lang_chinese, "&Chiñski");
|
||||
InsertGuiPair(menu_view_lang_russian, "&Russian");
|
||||
InsertGuiPair(menu_view_lang_russian, "&Rosyjski");
|
||||
InsertGuiPair(menu_view_lang_swedish, "&Szwedzki");
|
||||
InsertGuiPair(menu_view_close_program, "&Zamknij");
|
||||
InsertGuiPair(menu_edit_undo, "&Cofnij");
|
||||
|
@ -734,9 +734,9 @@ void Languages::InitGuiMessagesTab()
|
|||
InsertGuiPair(update_downloaded_info1, "Nowa wersja programu TTCalc zosta³a œci¹gniêta");
|
||||
InsertGuiPair(update_downloaded_info2, "");
|
||||
#endif
|
||||
InsertGuiPair(update_download_error, "Wystąpiły problemy ze ściąganiem, proszę spróbować ponownie później");
|
||||
InsertGuiPair(update_download_error, "Wystąpiły problemy ze ściągnięciem, proszę spróbować ponownie później.");
|
||||
|
||||
InsertGuiPair(pad_title, "Padzzzzz");
|
||||
InsertGuiPair(pad_title, "Pad");
|
||||
InsertGuiPair(pad_menu_file, "&Plik");
|
||||
InsertGuiPair(pad_menu_edit, "&Edycja");
|
||||
InsertGuiPair(pad_menu_file_new, "&Nowy"); // temporarily not used
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -385,6 +385,8 @@ HMENU menu = GetMenu(hWnd);
|
|||
if( !menu )
|
||||
return;
|
||||
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
MENUITEMINFO mi;
|
||||
mi.cbSize = sizeof(mi);
|
||||
mi.fMask = MIIM_TYPE;
|
||||
|
@ -392,18 +394,26 @@ HMENU menu = GetMenu(hWnd);
|
|||
|
||||
// on popup menus we're using indexes because they don't want to work correctly
|
||||
// with the identifiers
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_view) );
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_view) );
|
||||
SetMenuItemInfo(menu, IDM_VIEW_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_edit) );
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_edit) );
|
||||
SetMenuItemInfo(menu, IDM_EDIT_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_help) );
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_help) );
|
||||
SetMenuItemInfo(menu, IDM_HELP_INDEX, true, &mi);
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_language) );
|
||||
if( GetPrgRes()->GetUpdateExists() )
|
||||
{
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_update_available) );
|
||||
SetMenuItemInfo(menu, IDM_UPDATE_AVAILABLE_INDEX, true, &mi);
|
||||
}
|
||||
|
||||
mi.dwTypeData = const_cast<char*>( pl->GuiMessage(Languages::menu_language) );
|
||||
SetMenuItemInfo(GetSubMenu(menu,IDM_VIEW_INDEX), IDM_LANGUAGE_INDEX, true, &mi);
|
||||
|
||||
|
||||
|
||||
SetMenuLanguageItem(menu, IDM_NEW_WINDOW, Languages::menu_view_new_window);
|
||||
SetMenuLanguageItem(menu, IDM_NORMAL_VIEW, Languages::menu_view_normal_view);
|
||||
SetMenuLanguageItem(menu, IDM_COMPACT_VIEW, Languages::menu_view_compact_view);
|
||||
|
@ -1001,6 +1011,12 @@ BOOL WmCommand_HelpCheckUpdate(HWND hWnd, UINT message, WPARAM wParam, LPARAM lP
|
|||
return true;
|
||||
}
|
||||
|
||||
BOOL WmCommand_UpdateAvailable(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
ShowUpdateDialogAfterCheck(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1359,6 +1375,27 @@ return true;
|
|||
}
|
||||
|
||||
|
||||
BOOL WmUpdateExists(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
MENUITEMINFO mi;
|
||||
|
||||
mi.cbSize = sizeof(mi);
|
||||
mi.fMask = MIIM_TYPE | MIIM_ID;
|
||||
mi.fType = MFT_STRING;
|
||||
mi.dwTypeData = const_cast<char*>(GetPrgRes()->GetLanguages()->GuiMessage(Languages::menu_update_available));
|
||||
mi.cch = 0;
|
||||
mi.wID = IDM_UPDATE_AVAILABLE;
|
||||
|
||||
HMENU menu = GetMenu(hWnd);
|
||||
InsertMenuItem(menu, IDM_UPDATE_AVAILABLE_INDEX, true, &mi);
|
||||
|
||||
GetPrgRes()->SetUpdateExists(true); // used for the dynamic menu (for changing languages)
|
||||
DrawMenuBar(hWnd);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
||||
{
|
||||
cmessages.Associate(IDM_ALWAYS_ON_TOP, WmCommand_AlwaysOnTop);
|
||||
|
@ -1367,6 +1404,7 @@ void CreateCommandMessagesTable(Messages<BOOL> & cmessages)
|
|||
cmessages.Associate(IDM_PAD, WmCommand_Pad);
|
||||
cmessages.Associate(IDM_HELP_ABOUT, WmCommand_HelpAbout);
|
||||
cmessages.Associate(IDM_HELP_CHECK_UPDATE, WmCommand_HelpCheckUpdate);
|
||||
cmessages.Associate(IDM_UPDATE_AVAILABLE, WmCommand_UpdateAvailable);
|
||||
cmessages.Associate(IDM_NEW_WINDOW, WmCommand_NewWindow);
|
||||
cmessages.Associate(IDM_CLOSE_PROGRAM, WmCommand_CloseProgram);
|
||||
cmessages.Associate(IDC_INPUT_EDIT, WmCommand_InputEditNotify);
|
||||
|
@ -1422,6 +1460,7 @@ void CreateMainMessagesTable(Messages<BOOL> & messages)
|
|||
messages.Associate(WM_SIZING, WmSizing);
|
||||
messages.Associate(WM_SET_LAST_ERROR, WmSetLastError);
|
||||
messages.Associate(WM_HELP, WmHelp);
|
||||
messages.Associate(WM_UPDATE_EXISTS, WmUpdateExists);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -574,6 +574,31 @@ int ProgramResources::GetParamSep()
|
|||
}
|
||||
|
||||
|
||||
void ProgramResources::SetCheckUpdateStartup(bool s)
|
||||
{
|
||||
check_update_startup = s;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::GetCheckUpdateStartup()
|
||||
{
|
||||
return check_update_startup;
|
||||
}
|
||||
|
||||
|
||||
void ProgramResources::SetUpdateExists(bool e)
|
||||
{
|
||||
update_exists = e;
|
||||
}
|
||||
|
||||
|
||||
bool ProgramResources::GetUpdateExists()
|
||||
{
|
||||
return update_exists;
|
||||
}
|
||||
|
||||
|
||||
|
||||
ProgramResources::ProgramResources()
|
||||
{
|
||||
// if you want to change the input buffer you have also to change
|
||||
|
@ -641,6 +666,8 @@ ProgramResources::ProgramResources()
|
|||
functions_id = 0;
|
||||
|
||||
show_pad = false;
|
||||
check_update_startup = true;
|
||||
update_exists = false; // for dynamic menu
|
||||
}
|
||||
|
||||
|
||||
|
@ -957,6 +984,7 @@ return err;
|
|||
|
||||
|
||||
|
||||
|
||||
IniParser::Error ProgramResources::ReadFromFile()
|
||||
{
|
||||
IniParser iparser;
|
||||
|
@ -996,6 +1024,7 @@ std::string ini_value[30];
|
|||
iparser.Associate( "global|disp.grouping", &ini_value[23] );
|
||||
iparser.Associate( "global|disp.input_comma", &ini_value[24] );
|
||||
iparser.Associate( "global|disp.param_sep", &ini_value[25] );
|
||||
iparser.Associate( "global|update_start", &ini_value[26] );
|
||||
|
||||
iparser.Associate( "variables", &temp_variables );
|
||||
iparser.Associate( "functions", &temp_functions );
|
||||
|
@ -1026,6 +1055,10 @@ std::string ini_value[30];
|
|||
SetDisplayAlwaysScientific( bool(atoi(ini_value[9].c_str())) );
|
||||
SetDisplayWhenScientific( atoi(ini_value[10].c_str()) );
|
||||
SetDisplayRounding( atoi(ini_value[11].c_str()) );
|
||||
|
||||
// remove zeroes - in there is not in the config then will be true by default
|
||||
// (from the constructor)
|
||||
if( !ini_value[15].empty() )
|
||||
SetRemovingZeroes( bool(atoi(ini_value[15].c_str())) );
|
||||
|
||||
if( ini_value[13] == "6" )
|
||||
|
@ -1066,6 +1099,11 @@ std::string ini_value[30];
|
|||
if( err != IniParser::err_ok )
|
||||
bad_line = iparser.GetBadLine();
|
||||
|
||||
// check update at startup - true by default (if there is not in the config)
|
||||
// (default from the constructor)
|
||||
if( !ini_value[26].empty() )
|
||||
check_update_startup = bool( atoi(ini_value[26].c_str()) );
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1090,6 +1128,7 @@ std::ofstream file( configuration_file.c_str() );
|
|||
file << "size.x = " << x_size << std::endl;
|
||||
file << "size.y = " << y_size << std::endl;
|
||||
file << "maximized = " << (int)maximized << std::endl;
|
||||
file << "update_start = " << (int)check_update_startup << std::endl;
|
||||
file << "pad = " << (int)show_pad << std::endl;
|
||||
file << "pad.x = " << pad_x_pos << std::endl;
|
||||
file << "pad.y = " << pad_y_pos << std::endl;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -56,6 +56,18 @@
|
|||
#include <windows.h>
|
||||
|
||||
|
||||
/*!
|
||||
some messages
|
||||
*/
|
||||
#define WM_INIT_TAB_VARIABLES WM_APP
|
||||
#define WM_INIT_TAB_FUNCTIONS WM_APP+1
|
||||
#define WM_INIT_TAB_PRECISION WM_APP+2
|
||||
#define WM_INIT_TAB_DISPLAY WM_APP+3
|
||||
#define WM_SET_LAST_ERROR WM_APP+4
|
||||
#define WM_INIT_TAB_CONVERT WM_APP+5
|
||||
#define WM_UPDATE_EXISTS WM_APP+6
|
||||
|
||||
|
||||
/*!
|
||||
you don't have to create an object of this class but instead of it you can
|
||||
get the pointer to the object by using 'GetPrgRes()'
|
||||
|
@ -421,6 +433,22 @@ public:
|
|||
int GetParamSep();
|
||||
|
||||
|
||||
/*!
|
||||
setting/getting the test which is made when the program starts
|
||||
(testing for an update)
|
||||
*/
|
||||
void SetCheckUpdateStartup(bool s);
|
||||
bool GetCheckUpdateStartup();
|
||||
|
||||
|
||||
/*!
|
||||
true if there is an update available
|
||||
(used only with the dynamic menu)
|
||||
*/
|
||||
void SetUpdateExists(bool e);
|
||||
bool GetUpdateExists();
|
||||
|
||||
|
||||
private:
|
||||
|
||||
bool IsWhiteCharacter(int c);
|
||||
|
@ -491,6 +519,8 @@ private:
|
|||
int bad_line;
|
||||
bool show_pad;
|
||||
|
||||
bool check_update_startup;
|
||||
bool update_exists;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -206,6 +206,8 @@
|
|||
#define IDM_VIEW_INDEX 0
|
||||
#define IDM_EDIT_INDEX 1
|
||||
#define IDM_HELP_INDEX 2
|
||||
#define IDM_UPDATE_AVAILABLE_INDEX 3
|
||||
|
||||
#define IDM_LANGUAGE_INDEX 8
|
||||
|
||||
#define IDM_NEW_WINDOW 40001
|
||||
|
@ -238,6 +240,7 @@
|
|||
#define IDM_HELP_CHECK_UPDATE 40052
|
||||
#define IDM_HELP_ABOUT 40053
|
||||
|
||||
#define IDM_UPDATE_AVAILABLE 40060
|
||||
|
||||
// pad menu
|
||||
#define MENUPAD_FILE_INDEX 0
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -49,12 +49,6 @@
|
|||
#include "programresources.h"
|
||||
|
||||
|
||||
#define WM_INIT_TAB_VARIABLES WM_APP
|
||||
#define WM_INIT_TAB_FUNCTIONS WM_APP+1
|
||||
#define WM_INIT_TAB_PRECISION WM_APP+2
|
||||
#define WM_INIT_TAB_DISPLAY WM_APP+3
|
||||
#define WM_SET_LAST_ERROR WM_APP+4
|
||||
#define WM_INIT_TAB_CONVERT WM_APP+5
|
||||
|
||||
namespace TabWindowFunctions
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -80,22 +80,13 @@ public:
|
|||
the default constructor
|
||||
(notice that there'll be only one object of this class)
|
||||
*/
|
||||
ThreadController()
|
||||
{
|
||||
calculations = 0;
|
||||
ready_for_stop = 0;
|
||||
exit_thread = false;
|
||||
}
|
||||
ThreadController();
|
||||
|
||||
|
||||
/*!
|
||||
the destructor
|
||||
*/
|
||||
~ThreadController()
|
||||
{
|
||||
if(calculations) CloseHandle(calculations);
|
||||
if(ready_for_stop) CloseHandle(ready_for_stop);
|
||||
}
|
||||
~ThreadController();
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -103,38 +94,7 @@ public:
|
|||
|
||||
we create two system event and initialize the 'stop_calculating' object
|
||||
*/
|
||||
bool Init() volatile
|
||||
{
|
||||
char * buffer = new char[300];
|
||||
|
||||
// with 'GetTickCount()' we're generating an unique identifier of our event
|
||||
// (there can be another window of ttcalc)
|
||||
sprintf((char*)buffer,"TTCalcEventForManagingThreads9928%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'calculations' will be for auto-reseting and initialized as non-signaled
|
||||
if( (calculations = CreateEvent(0,false,false,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
sprintf((char*)buffer,"TTCalcEventReadyForStop5567%u",
|
||||
(unsigned int)GetTickCount());
|
||||
|
||||
// 'ready_for_stop' will be for manual-reseting and initialized as signaled
|
||||
// 'manual-reset' means that we must call ResetEvent() function (from WinAPI)
|
||||
// to manually reset the state to nonsignaled
|
||||
if( (ready_for_stop = CreateEvent(0,true,true,(char*)buffer))==NULL)
|
||||
{
|
||||
delete [] buffer;
|
||||
return false;
|
||||
}
|
||||
|
||||
delete [] buffer;
|
||||
|
||||
return stop_calculating.Init();
|
||||
}
|
||||
bool Init() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -143,10 +103,7 @@ public:
|
|||
string, user-defined variables, functions etc.) and when the second thread
|
||||
will have finished that then it call ReadyForStop() method
|
||||
*/
|
||||
void ReadyForStop() volatile
|
||||
{
|
||||
SetEvent( ready_for_stop );
|
||||
}
|
||||
void ReadyForStop() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -154,14 +111,7 @@ public:
|
|||
close button we call StopCalculatingAndExitThread() from the first main thread (gui),
|
||||
it means that the second thread (calculations) will finish itself
|
||||
*/
|
||||
void StopCalculatingAndExitThread() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop,INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
exit_thread = true;
|
||||
SetEvent(calculations);
|
||||
}
|
||||
void StopCalculatingAndExitThread() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -172,12 +122,7 @@ public:
|
|||
of copying variables) then sets the 'stop object' for signaled and returns to
|
||||
the caller
|
||||
*/
|
||||
void StopCalculating() volatile
|
||||
{
|
||||
WaitForSingleObject(ready_for_stop, INFINITE);
|
||||
|
||||
stop_calculating.Stop();
|
||||
}
|
||||
void StopCalculating() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
|
@ -185,45 +130,28 @@ public:
|
|||
in other words it means that the calculations will start
|
||||
(maybe now, maybe at once if the second thread is still working)
|
||||
*/
|
||||
void StartCalculating() volatile
|
||||
{
|
||||
SetEvent(calculations);
|
||||
}
|
||||
void StartCalculating() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
this is the main method which is used by the second thread,
|
||||
if there's nothing to do this method (and the second thread as well) waits
|
||||
*/
|
||||
volatile bool WaitForCalculatingAndBlockForStop() volatile
|
||||
{
|
||||
WaitForSingleObject(calculations,INFINITE);
|
||||
ResetEvent(ready_for_stop);
|
||||
|
||||
stop_calculating.Start();
|
||||
|
||||
return !exit_thread;
|
||||
}
|
||||
volatile bool WaitForCalculatingAndBlockForStop() volatile;
|
||||
|
||||
|
||||
/*!
|
||||
this method returns the pointer to the 'stop object'
|
||||
it's used by the second thread during calculating
|
||||
*/
|
||||
const volatile ttmath::StopCalculating * GetStopObject() volatile const
|
||||
{
|
||||
return &stop_calculating;
|
||||
}
|
||||
const volatile ttmath::StopCalculating * GetStopObject() volatile const;
|
||||
|
||||
|
||||
/*!
|
||||
it returns 'true' if there was a stop signal during calculating
|
||||
the stop signal can be caused by the first thread (gui thread)
|
||||
*/
|
||||
bool WasStopSignal() volatile const
|
||||
{
|
||||
return stop_calculating.WasStopSignal();
|
||||
}
|
||||
bool WasStopSignal() volatile const;
|
||||
|
||||
|
||||
private:
|
||||
|
@ -243,9 +171,8 @@ NewStopCalculating stop_calculating;
|
|||
we make the copy-constructor private so that nobody will be able
|
||||
to make a copy of the one object of this class
|
||||
*/
|
||||
ThreadController(const ThreadController &)
|
||||
{
|
||||
}
|
||||
ThreadController(const ThreadController &);
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ version.revision = 1
|
|||
|
||||
[portable]
|
||||
url = http://downloads.sourceforge.net/project/ttcalc/ttcalc/ttcalc-0.8.7/ttcalc-portable-0.8.7-bin.tar.gz?use_mirror=dfn
|
||||
fillename = ttcalc-portable-0.8.7-bin.tar
|
||||
filename = ttcalc-portable-0.8.7-bin.tar
|
||||
version.major = 0
|
||||
version.minor = 9
|
||||
version.revision = 1
|
||||
|
|
171
src/update.cpp
171
src/update.cpp
|
@ -37,8 +37,11 @@
|
|||
|
||||
|
||||
#include "compileconfig.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include <shlobj.h>
|
||||
#include <process.h>
|
||||
|
||||
#include "update.h"
|
||||
#include "programresources.h"
|
||||
#include "messages.h"
|
||||
|
@ -49,7 +52,7 @@
|
|||
|
||||
namespace Update
|
||||
{
|
||||
bool continue_download;
|
||||
bool continue_down;
|
||||
int level;
|
||||
std::string url;
|
||||
std::string remote_file_name;
|
||||
|
@ -57,6 +60,17 @@ namespace Update
|
|||
int major;
|
||||
int minor;
|
||||
int revision;
|
||||
|
||||
|
||||
// this is set by another thread at the beginning
|
||||
namespace Background
|
||||
{
|
||||
std::string url_;
|
||||
std::string remote_file_name_;
|
||||
int major_;
|
||||
int minor_;
|
||||
int revision_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -70,6 +84,7 @@ DownloadIni::DownloadIni()
|
|||
file = 0;
|
||||
file_name = new char[MAX_PATH];
|
||||
file_name[0] = 0;
|
||||
continue_download = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -137,8 +152,6 @@ bool DownloadIni::Init()
|
|||
if( !CreateTmpFile() )
|
||||
return false;
|
||||
|
||||
Update::continue_download = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -152,9 +165,18 @@ bool DownloadIni::Read(char * buffer, size_t size)
|
|||
fwrite(buffer, size, 1, file);
|
||||
CheckMessages();
|
||||
|
||||
return Update::continue_download;
|
||||
if( continue_download && !(*continue_download) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DownloadIni::DownloadUrl(const char * url, bool * c)
|
||||
{
|
||||
continue_download = c;
|
||||
|
||||
return Download::DownloadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
void DownloadIni::Close()
|
||||
|
@ -176,6 +198,11 @@ void DownloadIni::Close()
|
|||
|
||||
*/
|
||||
|
||||
DownloadProgram::DownloadProgram()
|
||||
{
|
||||
continue_download = 0;
|
||||
}
|
||||
|
||||
|
||||
void DownloadProgram::GetLen(HINTERNET conn)
|
||||
{
|
||||
|
@ -193,7 +220,6 @@ DWORD index = 0;
|
|||
bool DownloadProgram::Init()
|
||||
{
|
||||
file.open(Update::local_file_name.c_str(), std::ios_base::out | std::ios_base::binary);
|
||||
Update::continue_download = true;
|
||||
|
||||
if( !file )
|
||||
return false;
|
||||
|
@ -208,10 +234,20 @@ bool DownloadProgram::Read(char * buffer, size_t size)
|
|||
file.write(buffer, size);
|
||||
CheckMessages();
|
||||
|
||||
return Update::continue_download;
|
||||
if( continue_download && !(*continue_download) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DownloadProgram::DownloadUrl(const char * url, bool * c)
|
||||
{
|
||||
continue_download = c;
|
||||
|
||||
return Download::DownloadUrl(url);
|
||||
}
|
||||
|
||||
|
||||
void DownloadProgram::Close()
|
||||
{
|
||||
|
@ -221,20 +257,20 @@ void DownloadProgram::Close()
|
|||
|
||||
|
||||
|
||||
namespace Update
|
||||
{
|
||||
|
||||
/*
|
||||
|
||||
|
||||
|
||||
this method is called from the other thread too
|
||||
make sure you don't write directly to any global variables (from Update namespace etc)
|
||||
*/
|
||||
|
||||
bool CheckUpdateFromIni(HWND hwnd)
|
||||
bool CheckUpdateFromIni(HWND hwnd, std::string & url_, std::string & remote_file_name_,
|
||||
int & major_, int & minor_, int & revision_, bool * continue_download_)
|
||||
{
|
||||
DownloadIni down_ini;
|
||||
|
||||
if( hwnd )
|
||||
down_ini.AttachProgress(GetDlgItem(hwnd, IDC_PROGRESS));
|
||||
if( down_ini.DownloadUrl("http://ttcalc.sourceforge.net/ttcalc_update.ini") )
|
||||
|
||||
if( down_ini.DownloadUrl("http://ttcalc.sourceforge.net/ttcalc_update.ini", continue_download_) )
|
||||
{
|
||||
IniParser iparser;
|
||||
std::string ini_value[3];
|
||||
|
@ -242,14 +278,14 @@ DownloadIni down_ini;
|
|||
iparser.SectionCaseSensitive(false);
|
||||
|
||||
#ifndef TTCALC_PORTABLE
|
||||
iparser.Associate("normal|url", &url );
|
||||
iparser.Associate("normal|filename", &remote_file_name );
|
||||
iparser.Associate("normal|url", &url_ );
|
||||
iparser.Associate("normal|filename", &remote_file_name_ );
|
||||
iparser.Associate("normal|version.major", &ini_value[0] );
|
||||
iparser.Associate("normal|version.minor", &ini_value[1] );
|
||||
iparser.Associate("normal|version.revision", &ini_value[2] );
|
||||
#else
|
||||
iparser.Associate("portable|url", &url );
|
||||
iparser.Associate("portable|filename", &remote_file_name );
|
||||
iparser.Associate("portable|url", &url_ );
|
||||
iparser.Associate("portable|filename", &remote_file_name_ );
|
||||
iparser.Associate("portable|version.major", &ini_value[0] );
|
||||
iparser.Associate("portable|version.minor", &ini_value[1] );
|
||||
iparser.Associate("portable|version.revision", &ini_value[2] );
|
||||
|
@ -259,17 +295,17 @@ DownloadIni down_ini;
|
|||
|
||||
if( err == IniParser::err_ok )
|
||||
{
|
||||
major = atoi(ini_value[0].c_str());
|
||||
minor = atoi(ini_value[1].c_str());
|
||||
revision = atoi(ini_value[2].c_str());
|
||||
major_ = atoi(ini_value[0].c_str());
|
||||
minor_ = atoi(ini_value[1].c_str());
|
||||
revision_ = atoi(ini_value[2].c_str());
|
||||
|
||||
if( major > TTCALC_MAJOR_VER )
|
||||
if( major_ > TTCALC_MAJOR_VER )
|
||||
return true;
|
||||
else
|
||||
if( major == TTCALC_MAJOR_VER && minor > TTCALC_MINOR_VER )
|
||||
if( major_ == TTCALC_MAJOR_VER && minor_ > TTCALC_MINOR_VER )
|
||||
return true;
|
||||
else
|
||||
if( major == TTCALC_MAJOR_VER && minor == TTCALC_MINOR_VER && revision > TTCALC_REVISION_VER )
|
||||
if( major_ == TTCALC_MAJOR_VER && minor_ == TTCALC_MINOR_VER && revision_ > TTCALC_REVISION_VER )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -277,18 +313,27 @@ DownloadIni down_ini;
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
namespace Update
|
||||
{
|
||||
|
||||
|
||||
|
||||
void CheckUpdate(HWND hwnd)
|
||||
{
|
||||
char buffer[200];
|
||||
|
||||
level = -1; // nothing to do when Next is pressed
|
||||
continue_down = true;
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), false);
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_UPDATE_INFO1), false);
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_SHOW);
|
||||
CheckMessages();
|
||||
|
||||
if( CheckUpdateFromIni(hwnd) )
|
||||
if( CheckUpdateFromIni(hwnd, url, remote_file_name, major, minor, revision, &continue_down) )
|
||||
{
|
||||
level = 1;
|
||||
sprintf(buffer, pl->GuiMessage(Languages::update_is_new_version), major, minor, revision);
|
||||
|
@ -367,6 +412,7 @@ bool DownloadUpdate(HWND hwnd)
|
|||
DownloadProgram down;
|
||||
|
||||
level = -1; // nothing to do when Next is pressed
|
||||
continue_down = true;
|
||||
EnableWindow(GetDlgItem(hwnd, IDC_BUTTON_NEXT), false);
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
|
@ -379,7 +425,7 @@ DownloadProgram down;
|
|||
down.AttachProgress(GetDlgItem(hwnd, IDC_PROGRESS));
|
||||
CheckMessages();
|
||||
|
||||
if( down.DownloadUrl( url.c_str()) )
|
||||
if( down.DownloadUrl(url.c_str(), &continue_down) )
|
||||
{
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_downloaded_info1));
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, pl->GuiMessage(Languages::update_downloaded_info2));
|
||||
|
@ -425,12 +471,28 @@ BOOL UpdateInit(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
Languages * pl = GetPrgRes()->GetLanguages();
|
||||
|
||||
if( level == 0 )
|
||||
{
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, pl->GuiMessage(Languages::update_check_for_info));
|
||||
}
|
||||
else
|
||||
if( level == 1 )
|
||||
{
|
||||
char buffer[200];
|
||||
|
||||
sprintf(buffer, pl->GuiMessage(Languages::update_is_new_version), major, minor, revision);
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO1, buffer);
|
||||
}
|
||||
|
||||
SetDlgItemText(hwnd, IDC_UPDATE_INFO2, "");
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_NEXT, pl->GuiMessage(Languages::update_button_next));
|
||||
SetDlgItemText(hwnd, IDC_BUTTON_CANCEL, pl->GuiMessage(Languages::update_button_cancel));
|
||||
SetWindowText(hwnd, pl->GuiMessage(Languages::update_title));
|
||||
SetDlgItemText(hwnd, IDC_CHECK_UPDATE_STURTUP, pl->GuiMessage(Languages::update_check_at_startup));
|
||||
|
||||
if( GetPrgRes()->GetCheckUpdateStartup() )
|
||||
CheckDlgButton(hwnd, IDC_CHECK_UPDATE_STURTUP, BST_CHECKED);
|
||||
|
||||
ShowWindow(GetDlgItem(hwnd, IDC_PROGRESS), SW_HIDE);
|
||||
|
||||
return true;
|
||||
|
@ -441,11 +503,16 @@ BOOL UpdateCommand(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
if( LOWORD(wParam)==IDCANCEL || LOWORD(wParam)==IDC_BUTTON_CANCEL )
|
||||
{
|
||||
continue_download = false;
|
||||
continue_down = false;
|
||||
EndDialog(hwnd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( LOWORD(wParam) == IDC_CHECK_UPDATE_STURTUP )
|
||||
{
|
||||
GetPrgRes()->SetCheckUpdateStartup( IsDlgButtonChecked(hwnd, IDC_CHECK_UPDATE_STURTUP)==BST_CHECKED );
|
||||
}
|
||||
else
|
||||
if( LOWORD(wParam) == IDC_BUTTON_NEXT )
|
||||
{
|
||||
switch(level)
|
||||
|
@ -494,10 +561,32 @@ return messages.Call(msg, hwnd, msg, wParam, lParam);
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
unsigned __stdcall UpdateBackgroundProc(void *)
|
||||
{
|
||||
using namespace Background;
|
||||
|
||||
if( CheckUpdateFromIni(0, url_, remote_file_name_, major_, minor_, revision_, 0) )
|
||||
{
|
||||
HWND main = GetPrgRes()->GetMainWindow();
|
||||
SendMessage(main, WM_UPDATE_EXISTS, 0, 0);
|
||||
}
|
||||
|
||||
_endthreadex(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
} // namespace
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ShowUpdateDialog(HWND hwnd)
|
||||
{
|
||||
using namespace Update;
|
||||
|
@ -511,5 +600,33 @@ using namespace Update;
|
|||
}
|
||||
|
||||
|
||||
void ShowUpdateDialogAfterCheck(HWND hwnd)
|
||||
{
|
||||
using namespace Update;
|
||||
|
||||
level = 1;
|
||||
local_file_name.clear();
|
||||
|
||||
// make sure that there is a memory barrier before reading next objects (those from Background::)
|
||||
// objects from Background:: are set by an another thread at the beginning
|
||||
// when we are here then the thread is not writing (it exited)
|
||||
remote_file_name = Background::remote_file_name_;
|
||||
url = Background::url_;
|
||||
major = Background::major_;
|
||||
minor = Background::minor_;
|
||||
revision = Background::revision_;
|
||||
|
||||
DialogBox(GetPrgRes()->GetInstance(), MAKEINTRESOURCE(IDD_UPDATE_DIALOG), hwnd, UpdateProc);
|
||||
}
|
||||
|
||||
|
||||
void CheckUpdateInBackground()
|
||||
{
|
||||
if( GetPrgRes()->GetCheckUpdateStartup() )
|
||||
{
|
||||
unsigned int thread_id;
|
||||
_beginthreadex(0, 0, Update::UpdateBackgroundProc, 0, 0, &thread_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
14
src/update.h
14
src/update.h
|
@ -45,6 +45,8 @@
|
|||
|
||||
|
||||
void ShowUpdateDialog(HWND hwnd);
|
||||
void ShowUpdateDialogAfterCheck(HWND hwnd);
|
||||
void CheckUpdateInBackground();
|
||||
|
||||
|
||||
|
||||
|
@ -55,6 +57,7 @@ public:
|
|||
~DownloadIni();
|
||||
void DeleteTmpFile();
|
||||
const char * GetFileName();
|
||||
bool DownloadUrl(const char * url, bool * continue_download = 0);
|
||||
|
||||
private:
|
||||
|
||||
|
@ -66,16 +69,27 @@ private:
|
|||
|
||||
char * file_name;
|
||||
FILE * file;
|
||||
bool * continue_download;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DownloadProgram : public Download
|
||||
{
|
||||
public:
|
||||
DownloadProgram();
|
||||
bool DownloadUrl(const char * url, bool * continue_download = 0);
|
||||
|
||||
private:
|
||||
virtual void GetLen(HINTERNET conn);
|
||||
virtual bool Init();
|
||||
virtual bool Read(char * buffer, size_t size);
|
||||
virtual void Close();
|
||||
|
||||
std::ofstream file;
|
||||
bool * continue_download;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -37,6 +37,7 @@
|
|||
|
||||
#include "compileconfig.h"
|
||||
#include "winmain.h"
|
||||
#include "update.h"
|
||||
|
||||
/*!
|
||||
\file mainwin.cpp
|
||||
|
@ -97,6 +98,9 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
|
|||
if( !CreatePadWindow() )
|
||||
return ShowError( Languages::cant_create_pad );
|
||||
|
||||
// checking for an update (in an another thread)
|
||||
CheckUpdateInBackground();
|
||||
|
||||
// the main loop of messages
|
||||
MainMessagesLoop();
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* This file is a part of TTCalc - a mathematical calculator
|
||||
* and is distributed under the (new) BSD licence.
|
||||
* Author: Tomasz Sowa <t.sowa@slimaczek.pl>
|
||||
* Author: Tomasz Sowa <t.sowa@ttmath.org>
|
||||
*/
|
||||
|
||||
/*
|
||||
|
@ -52,7 +52,6 @@
|
|||
#include <windows.h>
|
||||
#include <commctrl.h>
|
||||
#include <process.h>
|
||||
|
||||
#include <map>
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue