merged 2.2 branch
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@7748 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
316
utils/Install/wxmain.cpp
Normal file
316
utils/Install/wxmain.cpp
Normal file
@@ -0,0 +1,316 @@
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
#pragma hdrstop
|
||||
#endif
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
#include "wx/wx.h"
|
||||
#endif
|
||||
|
||||
#include "wx/resource.h"
|
||||
#include "install.h"
|
||||
#include "instsup.h"
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#if !defined(__EMX__) && !defined(__OS2__) && !defined(WIN32) && !defined(WINNT)
|
||||
#define stricmp strcasecmp
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern char installdir[];
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
typedef struct _wxCommands {
|
||||
int id;
|
||||
char file[50];
|
||||
} wxCommands;
|
||||
|
||||
#define COMMANDMAX 20
|
||||
|
||||
wxCommands wxcommands[COMMANDMAX];
|
||||
char finishedscript[256] = "";
|
||||
char percentname[256] = "";
|
||||
|
||||
class MyApp: public wxApp
|
||||
{
|
||||
public:
|
||||
MyApp();
|
||||
|
||||
virtual bool OnInit();
|
||||
|
||||
virtual ~MyApp();
|
||||
};
|
||||
|
||||
class MyDialog : public wxDialog
|
||||
{
|
||||
public:
|
||||
void handle_button(wxCommandEvent& event);
|
||||
};
|
||||
|
||||
class MyThread : public wxThread
|
||||
{
|
||||
public:
|
||||
virtual void *Entry();
|
||||
};
|
||||
|
||||
void *MyThread::Entry()
|
||||
{
|
||||
install_thread(NULL);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MyDialog *dialog = NULL;
|
||||
|
||||
IMPLEMENT_APP(MyApp)
|
||||
|
||||
MyApp::MyApp()
|
||||
{
|
||||
}
|
||||
|
||||
wxCondition *InstCond = NULL;
|
||||
|
||||
void updatepercent(void)
|
||||
{
|
||||
wxGauge *tmp = (wxGauge *)wxFindWindowByName(percentname, dialog);
|
||||
|
||||
if(tmp)
|
||||
{
|
||||
unsigned long sliderpos;
|
||||
int pixels = 100;
|
||||
extern int current_file, files;
|
||||
|
||||
sliderpos = (unsigned long)(((float)(current_file)/(float)files)*pixels);
|
||||
tmp->SetValue(sliderpos);
|
||||
}
|
||||
}
|
||||
|
||||
int parse_ini(char *filename)
|
||||
{
|
||||
FILE *f;
|
||||
int b;
|
||||
|
||||
for(b=0;b<COMMANDMAX;b++)
|
||||
{
|
||||
wxcommands[b].id = 0;
|
||||
wxcommands[b].file[0] = 0;
|
||||
}
|
||||
|
||||
grabfile(filename);
|
||||
if((f=fopen(filename, "r")) != NULL)
|
||||
{
|
||||
int bytesread = 1;
|
||||
char raw[256], entry[256], entrydata[256], entrydata2[256];
|
||||
|
||||
/* figure out why we are not getting an EOF on windows...
|
||||
bytesread is a hack to make sure it doesn't loop forever. */
|
||||
while(!feof(f) && bytesread)
|
||||
{
|
||||
bytesread = getparseline(f, '#', ',', '\"', raw, entry, entrydata, entrydata2);
|
||||
if(stricmp(entry, "loadwxr") == 0)
|
||||
{
|
||||
grabfile(entrydata);
|
||||
if(!wxResourceParseFile(entrydata))
|
||||
{
|
||||
error("Error loading resources!");
|
||||
remove(entrydata);
|
||||
remove(filename);
|
||||
return FALSE;
|
||||
}
|
||||
remove(entrydata);
|
||||
|
||||
dialog = new MyDialog;
|
||||
|
||||
dialog->LoadFromResource(NULL, "dialog1");
|
||||
dialog->Show(TRUE);
|
||||
|
||||
/*MyApp::SetTopWindow(dialog);*/
|
||||
}
|
||||
else if(stricmp(entry, "closeold") == 0)
|
||||
{
|
||||
if(dialog)
|
||||
dialog->Destroy();
|
||||
dialog = NULL;
|
||||
}
|
||||
else if(stricmp(entry, "getcheck") == 0)
|
||||
{
|
||||
wxCheckBox *tmp = (wxCheckBox *)wxFindWindowByName(entrydata, dialog);
|
||||
|
||||
if(tmp)
|
||||
{
|
||||
if(!tmp->GetValue())
|
||||
{
|
||||
parse_ini(entrydata2);
|
||||
bytesread = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(stricmp(entry, "gettext") == 0)
|
||||
{
|
||||
wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
|
||||
wxString bleah;
|
||||
|
||||
if(tmp)
|
||||
{
|
||||
if((bleah = tmp->GetValue()))
|
||||
strcpy(installdir, bleah);
|
||||
}
|
||||
}
|
||||
else if(stricmp(entry, "settext") == 0)
|
||||
{
|
||||
wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
|
||||
|
||||
if(tmp)
|
||||
tmp->SetValue(installdir);
|
||||
}
|
||||
else if(stricmp(entry, "message") == 0)
|
||||
mesg(entrydata);
|
||||
else if(stricmp(entry, "disable") == 0)
|
||||
{
|
||||
wxButton *tmp = (wxButton *)wxFindWindowByName(entrydata, dialog);
|
||||
if(tmp)
|
||||
tmp->Disable();
|
||||
}
|
||||
else if(stricmp(entry, "grabfile") == 0)
|
||||
grabfile(entrydata);
|
||||
else if(stricmp(entry, "remove") == 0)
|
||||
remove(entrydata);
|
||||
else if(stricmp(entry, "system") == 0)
|
||||
wxExecute(entrydata);
|
||||
else if(stricmp(entry, "startinst") == 0)
|
||||
{
|
||||
strcpy(percentname, entrydata);
|
||||
strcpy(finishedscript, entrydata2);
|
||||
|
||||
/* I couldn't get it working with threads, even when
|
||||
using conditions it blocked the message loop making
|
||||
it unreadable, so I am going with wxYield for the
|
||||
moment. */
|
||||
#if 0
|
||||
MyThread *thread = new MyThread();
|
||||
|
||||
if ( thread->Create() != wxTHREAD_NO_ERROR )
|
||||
{
|
||||
error("Can't create thread!");
|
||||
}
|
||||
strcpy(finishedscript, entrydata);
|
||||
|
||||
InstCond = new wxCondition();
|
||||
|
||||
thread->Run();
|
||||
|
||||
wxMutex *test = new wxMutex();
|
||||
|
||||
InstCond->Wait(*test);
|
||||
#endif
|
||||
install_thread(NULL);
|
||||
create_wps_objects();
|
||||
parse_ini(finishedscript);
|
||||
}
|
||||
else if(stricmp(entry, "mleview") == 0)
|
||||
{
|
||||
FILE *f;
|
||||
unsigned long bytes;
|
||||
char buffer[1025];
|
||||
wxTextCtrl *tmp = (wxTextCtrl *)wxFindWindowByName(entrydata, dialog);
|
||||
|
||||
if(tmp)
|
||||
{
|
||||
grabfile(entrydata2);
|
||||
|
||||
if((f = fopen(entrydata2, "rb"))!= NULL)
|
||||
{
|
||||
while(!feof(f))
|
||||
{
|
||||
memset(buffer, 0, 1025);
|
||||
bytes = fread(buffer, 1, 1024, f);
|
||||
*tmp << buffer;
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
remove(entrydata2);
|
||||
tmp->ShowPosition(0);
|
||||
}
|
||||
|
||||
}
|
||||
else if(stricmp(entry, "setbutton") == 0)
|
||||
{
|
||||
for(b=0;b<COMMANDMAX;b++)
|
||||
{
|
||||
if(!wxcommands[b].id)
|
||||
{
|
||||
wxcommands[b].id = atoi(entrydata);
|
||||
strcpy(wxcommands[b].file, entrydata2);
|
||||
b = COMMANDMAX;
|
||||
}
|
||||
}
|
||||
dialog->Connect( atol(entrydata), -1, wxEVT_COMMAND_BUTTON_CLICKED,
|
||||
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
|
||||
&MyDialog::handle_button);
|
||||
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
remove(filename);
|
||||
return TRUE;
|
||||
}
|
||||
remove(filename);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void MyDialog::handle_button(wxCommandEvent& event )
|
||||
{
|
||||
int b;
|
||||
|
||||
for(b=0;b<COMMANDMAX;b++)
|
||||
{
|
||||
if(wxcommands[b].id &&
|
||||
wxcommands[b].id == event.GetId())
|
||||
{
|
||||
char tempbuf[50];
|
||||
|
||||
strcpy(tempbuf, wxcommands[b].file);
|
||||
if(stricmp(tempbuf, "exit") == 0)
|
||||
exit(0);
|
||||
grabfile(tempbuf);
|
||||
if(!parse_ini(tempbuf))
|
||||
{
|
||||
error("Error loading script \"%s\"", tempbuf);
|
||||
exit(1);
|
||||
}
|
||||
remove(tempbuf);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
bool MyApp::OnInit(void)
|
||||
{
|
||||
#if 1
|
||||
install_init(argv[0]);
|
||||
#else
|
||||
install_init("install.exe");
|
||||
#endif
|
||||
|
||||
if(!parse_ini("page1.ini"))
|
||||
{
|
||||
error("Could not load startup script!");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
MyApp::~MyApp()
|
||||
{
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user