Files
Tools_CPP/lib/wxTools.h
2024-11-01 12:23:13 +05:00

232 lines
7.8 KiB
C++

//---------------------------------------------------------------------------
#ifndef wxToolsH
#define wxToolsH
//---------------------------------------------------------------------------
#include <wx/string.h>
#include <wx/stream.h>
#include <wx/ffile.h>
#include <wx/html/htmlwin.h>
#include <wx/mstream.h>
#include <wx/msw/msvcrt.h>
#include "structs.h"
//---------------------------------------------------------------------------
typedef unsigned int uint4;
typedef unsigned char uint1;
//---------------------------------------------------------------------------
//Êðîññ ïëàòôîðìåííûå ôóíêöèè
//#if defined( _WX )
//wxString getExecutablePath();
wxString getStringOnUrl(const wxString path); //Ïîëó÷èòü ñòðîêó ñ âåá ñåâåðà
bool getFileOnWebServer(const wxString url,const wxString path); //Ñîõðàíèòü ôàéë ñ âåá ñåðâåðà
unsigned char* getDataFromURL(const wxString url,unsigned int* size); //ïîëó÷èòü ìàññèâ áàéò ñ âåá ñåðâåðà (Åñëè!=NULL òî ïåðâûé uint4 êîë-âî áàéò)
wxString getBeforeFirst(wxString str,wxString separator);
wxString getBeforeLast(wxString str,wxChar separator);
wxString getAfterFirst(wxString str,wxString separator);
wxString getAfterLast(wxString str,wxChar separator);
wxString getSubString(wxString str, wxString bracket1,wxString bracket2);
wxString replaceStrings(wxString sors,wxString find,wxString repl); //çàìåíèòü âñå âõîæäåíèÿ ñòðîêè find â sors íà ñòðîêó repl
void replaseChars(wxString& str,wxChar oldCh,wxChar newCh); ///<Çàìåíèòü ñèìâîë íà íîâûé
wxString cutFirstSubStr(wxString &string,wxChar separator); //âûðåçàòü ïîä ñòðîêó
wxString cutFirstSubStr(wxString &string,char ch); //âûðåçàòü ïîä ñòðîêó
wxString getFloatString(wxString str); ///<Âûðåçàòü èç ñòðîêè âñ¸ êðîìå öèôð
wxString IntToStr(unsigned long i);
wxString FloatToStr(float f, int numdigits = -1);
wxString DoubleToStr(double d, int numdigits = -1);
int StrToInt(wxString str);
int StrFullToInt(wxString str); //Âûðåçàòü èç ñòðîêè òîëüêî öèôåðêè è ïðåîáðàçîâàòü
unsigned int StrFullToUInt(wxString str); //Âûðåçàòü èç ñòðîêè òîëüêî öèôåðêè è ïðåîáðàçîâàòü
double StrToDouble(wxString str);
wxString md5String(wxString val);
wxString loadUTF8String(wxInputStream *is);
wxString loadUTF8String(wxFFile *is);
void saveUTF8String(wxOutputStream *os, wxString str);
void saveUTF8String(wxFFile *os, wxString str);
void saveUTF8String2(wxOutputStream *os, wxString str); //2 áàéòè ïîä ðàçìåð ñòðîêè
//#endif
//------------------------------------------------------------------------------
class MyHtmlWindow : public wxHtmlWindow
{
public:
MyHtmlWindow(wxWindow *parent) : wxHtmlWindow( parent, -1, wxPoint(10,10), wxSize(200,200) ) { }
virtual wxHtmlOpeningStatus OnOpeningURL(wxHtmlURLType WXUNUSED(type),
const wxString& WXUNUSED(url),
wxString *WXUNUSED(redirect)) const;
virtual void OnLinkClicked(const wxHtmlLinkInfo& link);
private:
DECLARE_NO_COPY_CLASS(MyHtmlWindow)
};
//------------------------------------------------------------------------------
typedef float (*MyFuncPtrType)(unsigned int, unsigned char*, void*);
struct RClientData //ýëåìåíò çàäàíèÿ
{
wxString url; //Îòêóäà áóäóò âçÿòû äàííûå
int clientInt; //Êëèåíòñêèå äàííûå
wxString clientStr; //Êëèåíòñêèå äàííûå
void* clientData; //Êëèåíòñêèå äàííûå
MyFuncPtrType clientFun; //Ôóíêöèÿ äëÿ îáðàáîòêè äàííûûõ (â ðàìêàõ òåêóùåãî ïîòîêà)
//À âîò è ñàìîå ãëàâíîå
unsigned int size; //Ðàçìåð äàííûõ ñ ñåðâåðà
unsigned char* data; //Ñàìè äàííûå ñ ñåðâåðà
};
//------------------------------------------------------------------------------
//Êëàññ - ìåíåäæåð çàäàíèé
class TTask: public wxThread
{
protected:
wxCriticalSection* critsectA; //Äëÿ îòâåòà
wxCriticalSection* critsectR; //Äëÿ çàïðîñà
TSimpleList<RClientData*>* listAnswer; //Ñïèñîê îòâåòîâ
TSimpleList<RClientData*>* listRequest; //Ñïèñîê çàïðîñîâ
bool m_Cancel;
int m_delay; //Çàäåðæêà â ìèëèñåêóíäàï ïåðåä âûïîëíåíèåì ñëåäóþùåãî çàäàíèÿ
public:
TTask(int delay);
~TTask()
{
delete critsectA;
delete critsectR;
delete listAnswer;
delete listRequest;
};
void addTask(RClientData* task) //Äîáàâèòü çàäàíèå â ñïèñîê
{
critsectR->Enter();
listRequest->add(task);
critsectR->Leave();
};
RClientData* getTask() //Òîò æå îáúåêò ÷òî è äîáàâèëè òîëüêî ñ äàííûìè
{ RClientData* result=NULL;
critsectR->Enter();
if(listRequest->count()>0)
{
result=listRequest->get(0);
listRequest->del((unsigned int)0);
}
critsectR->Leave();
return result;
};
void addAnswer(RClientData* answer)
{
critsectA->Enter();
listAnswer->add(answer);
critsectA->Leave();
};
RClientData* getAnswer() //Òîò æå îáúåêò ÷òî è äîáàâèëè òîëüêî ñ äàííûìè
{ RClientData* result=NULL;
critsectA->Enter();
if(listAnswer->count()>0)
{
result=listAnswer->get(0);
listAnswer->del((unsigned int)0);
}
critsectA->Leave();
return result;
};
virtual void* Entry(); //Ôóíêöèÿ ïîòîêà äëÿ îáðàáîòêè çàäàíèé
void Cancel(){m_Cancel=true;};
};
//------------------------------------------------------------------------------
//òèïà àññîöèàòèâíûé ìàññèâ äëÿ ñòðîê
struct TAssoStruct
{
wxString ident;
wxString value;
};
class TAMas
{
public:
wxString getAt(wxString id);
void setAt(wxString id,wxString val);
//void del(wxString id);
void Copy(TAMas& res);
//wxString operator [](int i) { return m_val[i]; };
private:
wxString str;
wxArrayString m_id,m_val;
};
//------------------------------------------------------------------------------
struct TIniStruct
{
TIniStruct *next; //Ñëåä. çíà÷åíèå
wxString section; //Ñåêöèÿ
wxString ident; //Èäåíòèôèêàòîð
wxString value; //Çíà÷åíèå
};
class TIniFile
{
private:
wxString path;
TIniStruct *first; //Ïåðâûé èç ñïèñêà
TIniStruct *last;
public:
TIniFile(wxString path);
virtual ~TIniFile();
wxString ReadString(wxString Section,wxString Ident,wxString Default);
float ReadFloat(wxString Section,wxString Ident,float Default);
long ReadLong(wxString Section,wxString Ident,long Default);
unsigned long ReadULong(wxString Section,wxString Ident,unsigned long Default);
bool ReadBool(wxString Section,wxString Ident,bool Default);
void WriteString(wxString Section,wxString Ident,wxString Value);
void WriteFloat(wxString Section,wxString Ident,float Value);
void WriteLong(wxString Section,wxString Ident,long Value);
void WriteULong(wxString Section,wxString Ident,unsigned long Value);
void WriteBool(wxString Section,wxString Ident,bool Value);
void Save(); //Ñîõðàíèòü èç ïàìÿòè â ôàéë
};
//------------------------------------------------------------------------------
//äëÿ ìàññèâà ïîòîêîâ
struct LStream
{
wxMemoryInputStream *is;
wxString name; //íàçâàíèå ôàéëà
char *data; //èñïîëüçóåòüñÿ â wxMemoryInputStream äî åãî óäàëåíèÿ
unsigned int size; //íà âñÿê ñëó÷àé ðàçìåð áóôåðà
};
//------------------------------------------------------------------------------
//ñïèñîê èìåííîâàííûõ ïîòîêîâ
class TFileList
{
private:
LStream **List; //Ìàññèâ ïîòîêîâ
unsigned int count; //êîëè÷åñòâî çàïîëíåííûõ
unsigned int size; //ðàçìåð ìàññèâà List
public:
TFileList();
~TFileList();
void add(wxInputStream *is,wxString name);
wxInputStream* get(wxString name);
unsigned int getCount();
LStream* item(unsigned int i);
};
//------------------------------------------------------------------------------
extern const wxEventType wxID_DOWNLOAD_COMPLETE;
//Çàãðóçêà ôàéëà â îòäåëüíîì ïîòîêå ïî http
class THTTPDownload: public wxThread
{
private:
protected:
wxEvtHandler *m_Parent; //ñëóøàòåëü ñîáûòèÿ çàâåðøåíèÿ çàãðóçêè
RClientData* m_CD; //Çàäàíèå äëÿ ïîòîêà
bool m_Cancel;
public:
THTTPDownload(wxEvtHandler *parent,wxString url,int userInt,wxString userStr,void* userData,MyFuncPtrType userFun);
~THTTPDownload();
virtual void* Entry();
//void Cancel();
};
//------------------------------------------------------------------------------
#endif