From 35d45dc3f7802fff2ef78c053ad9cc315837ce00 Mon Sep 17 00:00:00 2001 From: lagnajeet Date: Mon, 5 Aug 2019 02:46:45 -0700 Subject: [PATCH] Initial Release Tool made with wxWiget for true platform independency. --- Icon.png | Bin 0 -> 2983 bytes MyThread.h | 24 + NewFrame.cpp | 1111 +++++++++++++++++++ NewFrame.h | 145 +++ PhotonNetworkTool.sln | 31 + PhotonNetworkTool.vcxproj | 156 +++ PhotonNetworkTool.vcxproj.user | 4 + PhotonNetworkToolLinux.cbp | 66 ++ PhotonNetworkToolLinux.mak | 90 ++ PhotonNetworkToolMac.mak | 90 ++ PhotonNetworkToolWindows.cbp | 67 ++ PhotonNetworkToolWindows.depend | 1755 +++++++++++++++++++++++++++++++ PhotonTool.xpm | 146 +++ Resources.rc | 1 + ppm.icns | Bin 0 -> 50092 bytes ppm.ico | Bin 0 -> 302722 bytes wxsmith/NewFrame.wxs | 119 +++ 17 files changed, 3805 insertions(+) create mode 100644 Icon.png create mode 100644 MyThread.h create mode 100644 NewFrame.cpp create mode 100644 NewFrame.h create mode 100644 PhotonNetworkTool.sln create mode 100644 PhotonNetworkTool.vcxproj create mode 100644 PhotonNetworkTool.vcxproj.user create mode 100644 PhotonNetworkToolLinux.cbp create mode 100644 PhotonNetworkToolLinux.mak create mode 100644 PhotonNetworkToolMac.mak create mode 100644 PhotonNetworkToolWindows.cbp create mode 100644 PhotonNetworkToolWindows.depend create mode 100644 PhotonTool.xpm create mode 100644 Resources.rc create mode 100644 ppm.icns create mode 100644 ppm.ico create mode 100644 wxsmith/NewFrame.wxs diff --git a/Icon.png b/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..340f888f9142dfa107d986043457998f3a13c87f GIT binary patch literal 2983 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 +#include +#include "wx/socket.h" + +BEGIN_DECLARE_EVENT_TYPES() +DECLARE_EVENT_TYPE(wxEVT_READTHREAD, -1) +END_DECLARE_EVENT_TYPES() + + + +class MyThread : public wxThread +{ +public: + MyThread(wxEvtHandler* pParent); +private: + int m_param; + void* Entry(); +protected: + wxEvtHandler * m_pParent; +}; +#endif diff --git a/NewFrame.cpp b/NewFrame.cpp new file mode 100644 index 0000000..03f8cf6 --- /dev/null +++ b/NewFrame.cpp @@ -0,0 +1,1111 @@ +#include "NewFrame.h" +#include +#include +#include +#include +#include +#include "MyThread.h" + +#define RECV_BUFFER_LENGTH 1290 +wxDatagramSocket *sock; +wxIPV4address *addrPeer; +uint8_t receivedBuf[RECV_BUFFER_LENGTH]; +wxUint32 numRead = -1; +bool isRunning = false; + + +DEFINE_EVENT_TYPE(wxEVT_READTHREAD) +MyThread::MyThread(wxEvtHandler* pParent) : wxThread(wxTHREAD_DETACHED), m_pParent(pParent) +{ + //pass parameters into the thread + //addrLocal1 + //m_param = param; + //sock.SetRefData(s); +} +void* MyThread::Entry() +{ + wxCommandEvent evt(wxEVT_READTHREAD, GetId()); + //can be used to set some identifier for the data + memset(&receivedBuf[0], 0, sizeof(receivedBuf)); + isRunning = true; + sock->RecvFrom(*addrPeer, receivedBuf, RECV_BUFFER_LENGTH); + numRead = sock->LastCount(); + evt.SetInt(0); + isRunning = false; + //whatever data your thread calculated, to be returned to GUI + //evt.SetClientData((void*)temp); + wxPostEvent(m_pParent, evt); + return 0; +} + +MyThread *sockThread; + +class GcodeCommandClass +{ +private: + wxString cmd; + wxString params; +public: + GcodeCommandClass(wxString Command = "", wxString Parameters = "") + { + cmd = Command; + params = Parameters; + } + wxString getCommand() + { + return cmd; + } + wxString getParameter() + { + return params; + } + void setCommand(wxString Command) + { + cmd = Command; + } + void setParameter(wxString Parameters) + { + params = Parameters; + } + wxString getGcodeCmd(wxString Delimater = " ") + { + return cmd + Delimater + params; + } + bool isCmd(wxString Command) + { + if (cmd.CmpNoCase(Command) == 0) + return true; + return false; + } +}; + +GcodeCommandClass gcodeCmd; + +// -------------------------------------------------------------------------- +// resources +// -------------------------------------------------------------------------- + +// the application icon +//#ifndef wxHAS_IMAGES_IN_RESOURCES +//#include "../sample.xpm" +//#endif + +//(*IdInit(NewFrame) +const long NewFrame::ID_STATICBOX1 = wxNewId(); +const long NewFrame::ID_TEXTCTRL1 = wxNewId(); +const long NewFrame::ID_STATICTEXT1 = wxNewId(); +const long NewFrame::ID_BUTTON1 = wxNewId(); +const long NewFrame::ID_STATICTEXT2 = wxNewId(); +const long NewFrame::ID_STATICBOX2 = wxNewId(); +const long NewFrame::ID_BUTTON2 = wxNewId(); +const long NewFrame::ID_BUTTON3 = wxNewId(); +const long NewFrame::ID_BUTTON4 = wxNewId(); +const long NewFrame::ID_GAUGE1 = wxNewId(); +const long NewFrame::ID_STATICTEXT3 = wxNewId(); +const long NewFrame::ID_STATICBOX3 = wxNewId(); +const long NewFrame::ID_BUTTON5 = wxNewId(); +const long NewFrame::ID_BUTTON6 = wxNewId(); +const long NewFrame::ID_BUTTON7 = wxNewId(); +const long NewFrame::ID_BUTTON8 = wxNewId(); +const long NewFrame::ID_GAUGE2 = wxNewId(); +const long NewFrame::ID_LISTCTRL1 = wxNewId(); +const long NewFrame::ID_PANEL1 = wxNewId(); +const long NewFrame::ID_TIMER1 = wxNewId(); +const long NewFrame::ID_STATUSBAR1 = wxNewId(); +const long NewFrame::ID_TIMER2 = wxNewId(); +//*) + + +// -------------------------------------------------------------------------- +// constants +// -------------------------------------------------------------------------- + +// IDs for the controls and the menu commands + + +// -------------------------------------------------------------------------- +// event tables and other macros for wxWidgets +// -------------------------------------------------------------------------- + +wxBEGIN_EVENT_TABLE(NewFrame, wxFrame) +//(*EventTable(NewFrame) +//*) +EVT_COMMAND(wxID_ANY, wxEVT_READTHREAD, NewFrame::OnMyThread) +wxEND_EVENT_TABLE() + +wxIMPLEMENT_APP(MyApp); + +// ========================================================================== +// implementation +// ========================================================================== + +// -------------------------------------------------------------------------- +// the application class +// -------------------------------------------------------------------------- + + +bool MyApp::OnInit() +{ + if (!wxApp::OnInit()) + return false; + + // Create the main application window + NewFrame *frame = new NewFrame((wxFrame *)NULL, wxID_ANY, _("Photon Network Controller"), wxDefaultPosition, wxSize(300, 200)); + +#if defined(__WINDOWS__) + frame->SetIcon(wxICON(aaaa)); +#else + char path[ PATH_MAX ]; + char dest[PATH_MAX]; + memset(dest,0,sizeof(dest)); + pid_t pid = getpid(); + sprintf(path, "/proc/%d/exe", pid); + ssize_t PathLen = readlink( path, dest, PATH_MAX ); + if(PathLen!=-1) + frame->SetIcon(wxIcon(wxString::Format(wxT("%s.xpm"), dest))); +#endif // defined + + // Show it + frame->Show(true); + + // success + + return true; +} + +// -------------------------------------------------------------------------- +// main frame +// -------------------------------------------------------------------------- + +// frame constructor +NewFrame::NewFrame(wxFrame* parent, wxWindowID id, wxString title, const wxPoint& pos, const wxSize& size) +{ + // HICON hIcon; + // hIcon = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(2)); + // SetClassLong(hWnd, GCL_HICON, (LONG) hIcon); // The new icon + // PostMessage (hWnd, WM_SETICON, ICON_BIG, (LPARAM) hIcon); + + //(*Initialize(NewFrame) + Create(parent, wxID_ANY, _("Photon Network Controller"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxMINIMIZE_BOX, _T("wxID_ANY")); + #if defined(__WXGTK__) + SetClientSize(wxSize(334, 470)); + #else + SetClientSize(wxSize(334,491)); + #endif + Panel1 = new wxPanel(this, ID_PANEL1, wxPoint(224,320), wxSize(334,488), wxTAB_TRAVERSAL, _T("ID_PANEL1")); + StaticBox1 = new wxStaticBox(Panel1, ID_STATICBOX1, _("Connection Settings"), wxPoint(8,8), wxSize(320,80), 0, _T("ID_STATICBOX1")); + txtIP = new wxTextCtrl(Panel1, ID_TEXTCTRL1, _("192.168.1.222"), wxPoint(208,24), wxSize(112,21), 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); + StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT1, _("IP Address"), wxPoint(16,28), wxDefaultSize, 0, _T("ID_STATICTEXT1")); + btnConnect = new wxButton(Panel1, ID_BUTTON1, _("Connect"), wxPoint(235,54), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON1")); + lblStatus = new wxStaticText(Panel1, ID_STATICTEXT2, _("Not Connected"), wxPoint(16,60), wxDefaultSize, 0, _T("ID_STATICTEXT2")); + StaticBox2 = new wxStaticBox(Panel1, ID_STATICBOX2, _("Print Status"), wxPoint(8,96), wxSize(320,112), 0, _T("ID_STATICBOX2")); + btnStart = new wxButton(Panel1, ID_BUTTON2, _("Start"), wxPoint(16,118), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON2")); + btnPause = new wxButton(Panel1, ID_BUTTON3, _("Pause"), wxPoint(127,118), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON3")); + btnStop = new wxButton(Panel1, ID_BUTTON4, _("Stop"), wxPoint(235,118), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON4")); + PrintProgress = new wxGauge(Panel1, ID_GAUGE1, 1000, wxPoint(16,170), wxSize(304,24), 0, wxDefaultValidator, _T("ID_GAUGE1")); + lblPercentDone = new wxStaticText(Panel1, ID_STATICTEXT3, _("Percent Done"), wxPoint(16,152), wxDefaultSize, 0, _T("ID_STATICTEXT3")); + StaticBox3 = new wxStaticBox(Panel1, ID_STATICBOX3, _("Files"), wxPoint(8,216), wxSize(320,251), 0, _T("ID_STATICBOX3")); + btnDelete = new wxButton(Panel1, ID_BUTTON5, _("Delete"), wxPoint(16,392), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON5")); + btnRefresh = new wxButton(Panel1, ID_BUTTON6, _("Refresh"), wxPoint(125,392), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON6")); + btnUpload = new wxButton(Panel1, ID_BUTTON7, _("Upload"), wxPoint(235,392), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON7")); + btnDownload = new wxButton(Panel1, ID_BUTTON8, _("Download"), wxPoint(235,432), wxSize(85,26), 0, wxDefaultValidator, _T("ID_BUTTON8")); + progressFile = new wxGauge(Panel1, ID_GAUGE2, 100, wxPoint(16,433), wxSize(212,24), 0, wxDefaultValidator, _T("ID_GAUGE2")); + ListCtrl1 = new wxListCtrl(Panel1, ID_LISTCTRL1, wxPoint(16,232), wxSize(304,152), wxLC_REPORT|wxLC_SINGLE_SEL|wxSUNKEN_BORDER, wxDefaultValidator, _T("ID_LISTCTRL1")); + PollTimer.SetOwner(this, ID_TIMER1); + StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1")); + int __wxStatusBarWidths_1[1] = { -10 }; + int __wxStatusBarStyles_1[1] = { wxSB_NORMAL }; + StatusBar1->SetFieldsCount(1,__wxStatusBarWidths_1); + StatusBar1->SetStatusStyles(1,__wxStatusBarStyles_1); + SetStatusBar(StatusBar1); + WatchDogTimer.SetOwner(this, ID_TIMER2); + + Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnConnectClick); + Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnStartClick); + Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnPauseClick); + Connect(ID_BUTTON4,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnStopClick); + Connect(ID_BUTTON5,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnDeleteClick); + Connect(ID_BUTTON6,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnRefreshClick); + Connect(ID_BUTTON7,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnUploadClick); + Connect(ID_BUTTON8,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&NewFrame::OnbtnDownloadClick); + Connect(ID_TIMER1,wxEVT_TIMER,(wxObjectEventFunction)&NewFrame::OnPollTimerTrigger); + Connect(ID_TIMER2,wxEVT_TIMER,(wxObjectEventFunction)&NewFrame::OnWatchDogTimerTrigger); + //*) + setStatusMessages(_("Not Connected"), "", ""); +} + +wxString convertSize(size_t size) +{ + const char *SIZES[] = { _("Bytes"), _("KB"), _("MB"), _("GB") }; + unsigned int div = 0; + size_t rem = 0; + + while (size >= 1024 && div < (sizeof SIZES / sizeof *SIZES)) + { + rem = (size % 1024); + div++; + size /= 1024; + } + + double size_d = (float)size + (float)rem / 1024.0; + wxString result; + unsigned int FileSize = round(size_d); + result.Printf("%d %s", FileSize, SIZES[div]); + return result; +} + + +double getValue(wxString str, wxString prefix, double default_val, wxString ahead) +{ + try + { + int startIndex = 0; + if (ahead != "") + { + startIndex = str.Find(ahead); + if (startIndex != -1) + { + startIndex += ahead.Length(); + } + } + int index = str.substr(startIndex).Find(prefix); + if (index != wxNOT_FOUND) + { + index += prefix.Length(); + int length = 0; + //char* chArray = str.ToCharArray(); + char* chArray = (char*)malloc(sizeof(char)*(str.Length())); + strcpy(chArray, (const char*)str.mb_str(wxConvUTF8)); + for (unsigned int i = index; i < str.Length(); i++) + { + char ch = chArray[i]; + if (((ch < '0') || (ch > '9')) && ((ch != '.') && (ch != '-'))) + { + break; + } + length++; + } + if (length > 0) + { + double value; + if (!str.substr(index, length).ToDouble(&value)) + return -1; + else + return value; + } + return default_val; + } + return default_val; + } + catch (const std::runtime_error) + { + return default_val; + } +} + +double getValue(wxString str, wxString prefix, double default_val) +{ + return getValue(str, prefix, default_val, ""); +} + +NewFrame::~NewFrame() +{ + //(*Destroy(NewFrame) + //*) +} +void NewFrame::connectToPrinter(wxString hostname) +{ + wxIPV4address addrLocal; + addrLocal.Hostname(); + sock = new wxDatagramSocket(addrLocal); + //wxDatagramSocket sock(addrLocal); + if (!sock->IsOk()) + { + wxLogMessage("ERROR: failed to create UDP socket"); + return; + } + + + //wxIPV4address addrPeer; + free(addrPeer); + addrPeer = nullptr; + addrPeer = new wxIPV4address; + addrPeer->Hostname(hostname); + addrPeer->Service(3000); + isconnected = false; + startList = false; + endList = false; + fileCount = 0; + photonFile = nullptr; + photonFileName = wxEmptyString; + photonFilePath = wxEmptyString; + beforeByte = 0; + frameNum = 0; + numDownloadRetries = 0; + downloadStarted = false; + downloadFileLength = -1; + downloadFileCurrentLength = -1; + PollTimer.Stop(); + WatchDogTimer.Stop(); +} +void NewFrame::disconnectFromPrinter() +{ + if (isRunning) + { + sockThread->Kill(); + //free(sockThread); + sockThread = nullptr; + isRunning = false; + } + sock->Close(); + free(addrPeer); + addrPeer = nullptr; + isconnected = false; + startList = false; + endList = false; + fileCount = 0; + photonFile = nullptr; + photonFileName = wxEmptyString; + photonFilePath = wxEmptyString; + beforeByte = 0; + frameNum = 0; + numDownloadRetries = 0; + downloadStarted = false; + downloadFileLength = -1; + downloadFileCurrentLength = -1; + PollTimer.Stop(); + WatchDogTimer.Stop(); + setStatusMessages(_("Not Connected"), "", ""); + btnConnect->SetLabel(_("Connect")); + lblStatus->SetLabel(_("Not Connected")); + clearListControl(); + progressFile->SetValue(0); + PrintProgress->SetValue(0); +} +void NewFrame::setStatusMessages(wxString message1, wxString message2, wxString message3) +{ + if (message1 != "prev") + msges[0] = message1; + if (message2 != "prev") + msges[1] = message2; + if (message3 != "prev") + msges[2] = message3; + SetStatusText(msges[0] + " " + msges[1] + " " + msges[2], 0); +} +void NewFrame::sendCmdToPrinter(wxString cmd) +{ + memset(&receivedBuf[0], 0, sizeof(receivedBuf)); + wxUint32 sendSize = cmd.Length(); + char* tempBuffer = (char*)malloc(sizeof(char)*(2 + sendSize)); + strcpy(tempBuffer, (const char*)cmd.mb_str(wxConvUTF8)); // buf will now contain the command + tempBuffer[sendSize] = '\0'; + tempBuffer[sendSize + 1] = '\0'; + WatchDogTimer.Start(2000, true); + if (sock->SendTo(*addrPeer, tempBuffer, sendSize).LastCount() != sendSize) + { + wxMessageBox("ERROR: failed to send data"); + return; + } + free(tempBuffer); +} + +void NewFrame::sendCmdToPrinter(uint8_t* cmd, unsigned int sendSize) +{ + memset(&receivedBuf[0], 0, sizeof(receivedBuf)); + WatchDogTimer.Start(2000, true); + if (sock->SendTo(*addrPeer, cmd, sendSize).LastCount() != sendSize) + { + wxMessageBox("ERROR: failed to send data"); + return; + } +} + +void NewFrame::getAsyncReply() +{ + sockThread = new MyThread(this); + //free(sockThread); + //sockThread = thread; + sockThread->Create(); + sockThread->Run(); +} + +void NewFrame::getBlockingReply() +{ + memset(&receivedBuf[0], 0, sizeof(receivedBuf)); + numRead = sock->RecvFrom(*addrPeer, receivedBuf, sizeof(receivedBuf)).LastCount(); + WatchDogTimer.Stop(); +} + +void NewFrame::clearListControl() +{ + ListCtrl1->ClearAll(); + ListCtrl1->DeleteAllColumns(); + //The two lines below is only needed for GCC under windows. It works fine without this in all other OSes + ListCtrl1->~wxListCtrl(); + ListCtrl1 = new wxListCtrl(Panel1, ID_LISTCTRL1, wxPoint(16, 232), wxSize(304, 152), wxLC_REPORT | wxLC_SINGLE_SEL | wxSUNKEN_BORDER, wxDefaultValidator, _T("ID_LISTCTRL1")); + //Under Windows GCC the list fails to redraw after deleting items in it. The above workaround is the easiest way to fix that issue + //comment them out for better performance under other platforms +} + +void NewFrame::handleResponse() +{ + WatchDogTimer.Stop(); + if (gcodeCmd.isCmd("M4002")) //Gcode to read version info from printer + { + wxString tempStr = receivedBuf; + lblStatus->SetLabel(_("Connected")); + btnConnect->SetLabel(_("Disconnect")); + isconnected = true; + setStatusMessages(tempStr.substr(3).Trim(), "", ""); + isConnected = true; + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + updatefileList(); + } + else if (gcodeCmd.isCmd("M20")) //Gcode to read the filelist + { + wxString receivedText = receivedBuf; + receivedText.Trim(); + if (!receivedText.Contains("Begin file list")) + { + if (!startList) //if the file listing has not started then read again + { + getAsyncReply(); + } + else + { + if (!receivedText.Contains("End file list")) //File listing has not ended + { + wxStringTokenizer temp(receivedText, " "); + wxString temp1 = ""; + while (temp.HasMoreTokens()) + { + wxString token = temp.GetNextToken(); + temp1 = temp1 + token + " "; + if (temp.CountTokens() == 1) + break; + } + wxString token = temp.GetNextToken(); + + long value; + if (token.ToLong(&value)) + { + if (value > 0) + { + ListCtrl1->InsertItem(fileCount, wxString((char)(fileCount + 49))); + ListCtrl1->SetItem(fileCount, 1, temp1); + ListCtrl1->SetItem(fileCount, 2, convertSize(value)); + fileCount++; + } + } + else + { + ListCtrl1->InsertItem(fileCount, wxString((char)(fileCount + 49))); + ListCtrl1->SetItem(fileCount, 1, temp1); + ListCtrl1->SetItem(fileCount, 2, _("Unknown")); + fileCount++; + } + + getAsyncReply(); + } + else + { + startList = false; //File list ended don't read any more lines + endList = true; + } + } + } + else + { + startList = true; //File Listing just Started + endList = false; + clearListControl(); + ListCtrl1->AppendColumn(_("Num"), wxLIST_FORMAT_LEFT, 50); + ListCtrl1->AppendColumn(_("File Name"), wxLIST_FORMAT_LEFT, 175); + ListCtrl1->AppendColumn(_("Size"), wxLIST_FORMAT_LEFT, 75); + fileCount = 0; + getAsyncReply(); + } + if (endList) //Received end of file list in the last command so now clean up rest of the receive buffer + { + getBlockingReply(); + } + //else if (endList>=1) + //{ + //get rid of extra messages from the sockets buffer as it will confuse the program + //} + } + else if (gcodeCmd.isCmd("M6030")) //Gcode to Start Printing + { + ispaused = false; + isPrinting = true; + btnPause->Enable(); + btnStart->Disable(); + btnStop->Enable(); + gcodeCmd.setCommand("M27"); + gcodeCmd.setParameter(""); + beforeByte = 0; + frameNum = 0; + PollTimer.Start(1000); + setStatusMessages("prev", _("Printing"), ""); + PrintProgress->SetValue(0); + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M6032")) //Gcode to Download File + { + if (!downloadStarted) //If the download has not started do the following check + { + wxString receivedText = receivedBuf; + receivedText.Trim(); + wxString errorIfAny = isError(receivedText); + if (errorIfAny.Length() <= 0) //No error so we can proceed to the actual file download + { + downloadFileLength = getValue(receivedText, "L:", -1); + if (downloadFileLength>0) //it is a valid file with a positive file length + { + downloadStarted = true; //Se this flag that way you know the download has started and we need to process the incoming data. + } + else + { + gcodeCmd.setCommand("M22"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + } + else + { + if (numDownloadRetries == 0) //retry only once by sending a M22 + { + numDownloadRetries++; + gcodeCmd.setCommand("M22"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + else //It errored out after one retry just give up and show the error message + { + wxMessageBox(errorIfAny, _("Error"), wxICON_ERROR); + } + } + } + if (downloadStarted) //Download has started. Issue the M3000 command to start the download process + { + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + if (downloadFileCurrentLengthSetValue(0); + downloadFileCurrentLength = 0; + gcodeCmd.setCommand("M3000"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + else + { + gcodeCmd.setCommand("M22"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + } + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M3000")) //Gcode to start downlading data from the printer or request resend of corrupted data + { + if (downloadFileCurrentLength < downloadFileLength) //there is still more data left to be read + { + if ((numRead >= 6) && ((uint8_t)(receivedBuf[numRead - 1]) == 0x83)) + { + unsigned int maxValue = 0; + maxValue = (maxValue << 8) + receivedBuf[numRead - 3]; + maxValue = (maxValue << 8) + receivedBuf[numRead - 4]; + maxValue = (maxValue << 8) + receivedBuf[numRead - 5]; + maxValue = (maxValue << 8) + receivedBuf[numRead - 6]; + if (maxValue == downloadFileCurrentLength) + { + uint8_t checkSum = 0; // This is the checksum + for (unsigned int i = 0; i < (numRead - 2); i++) + checkSum = (uint8_t)(checkSum ^ receivedBuf[i]); + if (checkSum == receivedBuf[numRead - 2]) // if the calculated checksum is the same as the one we received from the printer + { + //Write this data to file + photonFile->Write(receivedBuf, numRead - 6); + downloadFileCurrentLength += numRead - 6; + progressFile->SetValue((int)((100 * downloadFileCurrentLength) / downloadFileLength)); + progressFile->Update(); + gcodeCmd.setCommand("M3000"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + + } + else //request resend + { + gcodeCmd.setCommand("M3001"); + gcodeCmd.setParameter(wxString('I') + wxString::Format(wxT("%lld"), downloadFileCurrentLength)); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + } + else //request resend + { + gcodeCmd.setCommand("M3001"); + gcodeCmd.setParameter(wxString('I') + wxString::Format(wxT("%lld"), downloadFileCurrentLength)); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + + } + else + { + downloadStarted = false; + numDownloadRetries++; + gcodeCmd.setCommand("M22"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + } + else + { + numDownloadRetries = 0; //just to ensure that it closes the file and updates the flag; + gcodeCmd.setCommand("M22"); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M22")) //Gcode to Stop downloading file + { + if (numDownloadRetries == 1) //Request file re download if and only if it's retry number 1. In case of no retry i.e. 0 finish the process and in case of more than one i.e. >1 just give up and show an error message + { + gcodeCmd.setCommand("M6032"); // The gcode parameter should be same as before which is the file name + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + else + { + photonFile->Flush(); + photonFile->Close(); + if (downloadFileCurrentLength >= downloadFileLength) + wxMessageBox(_("Download finished."), _("Information"), wxOK | wxICON_INFORMATION | wxCENTER); + else + wxMessageBox(_("Failed to download file. Please retry"), _("Warning"), wxOK | wxICON_EXCLAMATION | wxCENTER); + downloadStarted = false; + downloadFileLength = -1; + downloadFileCurrentLength = -1; + + } + //do Nothing + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M25")) //Gcode to Pause Printing + { + ispaused = true; + isPrinting = false; + btnPause->SetLabel(_("Resume")); + btnPause->Update(); + PollTimer.Stop(); + setStatusMessages("prev", _("Paused"), ""); + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M27")) //Gcode for getting print status + { + wxString receivedText = receivedBuf; + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + wxString errorIfAny = isError(receivedText); + if (errorIfAny.Length() <= 0) + { + wxStringTokenizer temp(receivedText.Trim(), " "); + wxString token; + while (temp.HasMoreTokens()) //get to the last token that is the received message. it should have the format bytes_printed/total_bytes + token = temp.GetNextToken(); + wxStringTokenizer temp1(token.Trim(), "/"); + unsigned long bytesPrinted = 0; + unsigned long totalBytes = 0; + temp1.GetNextToken().ToCULong(&bytesPrinted); + temp1.GetNextToken().ToCULong(&totalBytes); + if (beforeByte= 1000) + { + PollTimer.Stop(); + btnStart->Enable(); + btnStop->Disable(); + btnPause->Disable(); + setStatusMessages("prev", _("Print"), _("finished.")); + lblPercentDone->SetLabel(wxString(_("Percent Done : 100"))); + PrintProgress->SetValue(1000); + PrintProgress->Update(); + } + else + { + lblPercentDone->SetLabel(wxString(_("Percent Done : ")) + wxString::Format(wxT("%d"), (int)round(percentDone / 10))); + PrintProgress->SetValue((int)round(percentDone)); + PrintProgress->Update(); + setStatusMessages("prev", _("Printing"), wxString(_("Layer ")) + wxString::Format(wxT("%u"), frameNum)); + } + } + else + { + PollTimer.Stop(); + setStatusMessages("prev", _("Not Printing"), ""); + } + + //wxMessageBox(wxString::Format(wxT("%s"), receivedText),"Information",wxOK|wxICON_INFORMATION|wxCENTER); + } + else if (gcodeCmd.isCmd("M24")) //Gcode to resume Printing + { + ispaused = false; + isPrinting = true; + btnPause->SetLabel("Pause"); + btnPause->Update(); + gcodeCmd.setCommand("M27"); + gcodeCmd.setParameter(""); + PollTimer.Start(1000); + setStatusMessages("prev", _("Printing"), ""); + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + } + else if (gcodeCmd.isCmd("M33")) //Stopping a print + { + wxString receivedText = receivedBuf; + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + wxString errorIfAny = isError(receivedText); + if (errorIfAny.Length() <= 0) + { + gcodeCmd.setCommand("M29"); + gcodeCmd.setParameter(""); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + else + { + wxMessageBox(errorIfAny, _("Error"), wxICON_ERROR); + } + + + + } + else if (gcodeCmd.isCmd("M29")) //Stopping a print or a file upload + { + //gcodeCmd.setCommand("G90, G0"); + //gcodeCmd.setParameter("Z 150 F300"); + //sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + wxString receivedText = receivedBuf; + if (receivedText.Length()>8) //Don't show the OK N:6 message that you get on stopping of a print + wxMessageBox(wxString::Format(wxT("%s"), receivedText), _("Information"), wxOK | wxICON_INFORMATION | wxCENTER); + else + { + setStatusMessages("prev", _("Stopped"), ""); + btnPause->Disable(); + btnStart->Enable(); + btnStop->Enable(); + ispaused = false; + isPrinting = false; + PollTimer.Stop(); + } + + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + updatefileList(); + + } + else if (gcodeCmd.isCmd("M30")) //Delete a file + { + //gcodeCmd.setCommand("G90, G0"); + //gcodeCmd.setParameter("Z 150 F300"); + //sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + wxString receivedText = receivedBuf; + wxMessageBox(wxString::Format(wxT("%s"), receivedText), _("Information"), wxOK | wxICON_INFORMATION | wxCENTER); + while (sock->IsData()) //get rid of extra messages from the sockets buffer as it will confuse the program + getBlockingReply(); + updatefileList(); + } + else if (gcodeCmd.isCmd("M28")) //Uploading a File + { + wxString receivedText = receivedBuf; + //wxMessageBox(wxString::Format(wxT("%s"), receivedText)); + int chunckSize = 0x500; + uint8_t *buffer = (uint8_t*)malloc((chunckSize + 6) * sizeof(uint8_t)); + ssize_t index = 0; + if (receivedText.Find("resend") != wxNOT_FOUND) + { + long resend_index = getValue(receivedText, "resend ", -1); + photonFile->Seek(resend_index, wxFromStart); + } + if (photonFile->Tell() < photonFile->Length()) + { + unsigned int position = photonFile->Tell(); + index = photonFile->Read(buffer, chunckSize); + if (index != wxInvalidOffset) + { + uint8_t num8 = 0; + buffer[index] = (uint8_t)position & 0xFF; + buffer[index + 1] = (uint8_t)((position >> 8) & 0xFF); + buffer[index + 2] = (uint8_t)((position >> 16) & 0xFF); + buffer[index + 3] = (uint8_t)((position >> 24) & 0xFF); + for (int i = 0; i < (index + 4); i++) + { + num8 = (uint8_t)(num8 ^ buffer[i]); + } + buffer[index + 4] = num8; + buffer[index + 5] = 0x83; + sendCmdToPrinter(buffer, index + 6); + free(buffer); + progressFile->SetValue((int)((100 * photonFile->Tell()) / photonFile->Length())); + getAsyncReply(); + } + } + else + { + photonFile->Close(); + gcodeCmd.setCommand("M29"); + gcodeCmd.setParameter(""); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + } + } +} +wxString NewFrame::isError(wxString response) +{ + if (response.Trim().substr(0, 6).Contains("Error:")) + { + wxStringTokenizer temp(response.Trim(), ":"); + wxString token; + while (temp.HasMoreTokens()) //get to the last token that is the error message + token = temp.GetNextToken(); + return token; + } + else + return ""; +} +void NewFrame::getVersion() +{ + gcodeCmd.setCommand("M4002"); + //receiver.Send(Encoding.ASCII.GetBytes(gcodeCmd), gcodeCmd.Length); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); + //wxString s = getBlockingReply(); + //return s.Trim().substr(3); +} +void NewFrame::updatefileList() +{ + gcodeCmd.setCommand("M20"); + fileCount = 0; + sendCmdToPrinter(gcodeCmd.getCommand()); + endList = false; + startList = false; + getAsyncReply(); +} +void NewFrame::OnbtnConnectClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Connect to Printer\n"), _("About Connect"), wxOK | wxICON_INFORMATION, this); + if (!isconnected) //Connect to the printer if it not connected + { + connectToPrinter(txtIP->GetValue()); + getVersion(); + } + else + { + disconnectFromPrinter(); + } + + //wxLogMessage("received %s",s); + //sendCmdToPrinter("M27"); + //getAsyncReply(); + +} + +void NewFrame::OnbtnStartClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Start a print\n"), _("About Start"), wxOK | wxICON_INFORMATION, this); + long lSelectedItem = ListCtrl1->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + //wxMessageBox(wxString::Format(wxT("Sel = %d"), lSelectedItem)); + if (lSelectedItem != wxNOT_FOUND) + { + //wxMessageBox(ListCtrl1->GetItemText(lSelectedItem,1)); + //sprintf(gcodeCmd,"M6030 ':%s'",ListCtrl1->GetItemText(lSelectedItem,1).mb_str().data()); + gcodeCmd.setCommand("M6030"); + gcodeCmd.setParameter(wxString("\':") + ListCtrl1->GetItemText(lSelectedItem, 1).Trim() + wxString("\'")); + //wxMessageBox(wxString::Format(wxT("%s"), gcodeCmd.getGcodeCmd())); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + else + { + wxMessageBox(_("Please select a file before starting a print."), _("Warning"), wxOK | wxICON_EXCLAMATION | wxCENTER); + } +} + +void NewFrame::OnbtnPauseClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Pause a print\n"), _("About Pause"), wxOK | wxICON_INFORMATION, this); + PollTimer.Stop(); + if (ispaused) + { + gcodeCmd.setCommand("M24"); + } + else + { + gcodeCmd.setCommand("M25"); + } + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); +} + +void NewFrame::OnbtnStopClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Stop a print\n"), _("About Stop"), wxOK | wxICON_INFORMATION, this); + int answer = wxMessageBox(_("Want to stop the current print?"), _("Confirm"), wxYES_NO | wxICON_QUESTION | wxCENTER, this); + if (answer == wxYES) + { + PollTimer.Stop(); + gcodeCmd.setCommand("M33"); + gcodeCmd.setParameter("I5"); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } +} + +void NewFrame::OnbtnDeleteClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Delete a file\n"), _("About Delete"), wxOK | wxICON_INFORMATION, this); + long lSelectedItem = ListCtrl1->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + //wxMessageBox(wxString::Format(wxT("Sel = %d"), lSelectedItem)); + if (lSelectedItem != wxNOT_FOUND) + { + int answer = wxMessageBox(wxString(_("Are you sure you want to permanently delete ")) + ListCtrl1->GetItemText(lSelectedItem, 1).Trim() + wxString(_('?')), _("Confirm"), wxYES_NO | wxICON_QUESTION | wxCENTER, this); + if (answer == wxYES) + { + gcodeCmd.setCommand("M30"); + gcodeCmd.setParameter(ListCtrl1->GetItemText(lSelectedItem, 1).Trim()); + //wxMessageBox(wxString::Format(wxT("%s"), gcodeCmd.getGcodeCmd())); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + } + else + { + wxMessageBox(_("Please select a file to delete."), _("Warning"), wxOK | wxICON_EXCLAMATION | wxCENTER); + } +} + +void NewFrame::OnbtnRefreshClick(wxCommandEvent& event) +{ + //wxMessageBox(_("Refresh file list\n"), _("About Refresh"), wxOK | wxICON_INFORMATION, this); + updatefileList(); + // gcodeCmd.setCommand("M27"); + // gcodeCmd.setParameter(""); + // sendCmdToPrinter(gcodeCmd.getCommand()); + // getAsyncReply(); +} + +void NewFrame::OnbtnUploadClick(wxCommandEvent& event) +{ + wxFileDialog *OpenDialog = new wxFileDialog(this, _("Choose a file to upload"), wxEmptyString, wxEmptyString, _("All files (*.*)|*.*"), wxFD_OPEN, wxDefaultPosition);//change the filter to .photon files + if (OpenDialog->ShowModal() == wxID_OK) // if the user click "Open" instead of "cancel" + { + photonFilePath = OpenDialog->GetPath(); + photonFileName = OpenDialog->GetFilename(); + photonFile = new wxFile(photonFilePath, wxFile::OpenMode::read); + gcodeCmd.setCommand("M28"); + gcodeCmd.setParameter(photonFileName); + progressFile->SetValue(0); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + + //wxMessageBox(CurrentDocPath); + } +} + +void NewFrame::OnbtnDownloadClick(wxCommandEvent& event) +{ + long lSelectedItem = ListCtrl1->GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); + if (lSelectedItem != wxNOT_FOUND) + { + wxFileDialog *SaveDialog = new wxFileDialog(this, _("Save downloaded file as . . ."), wxEmptyString, ListCtrl1->GetItemText(lSelectedItem, 1).Trim(), _("All files (*.*)|*.*"), wxFD_SAVE, wxDefaultPosition);//change the filter to .photon files + if (SaveDialog->ShowModal() == wxID_OK) // if the user click "Save" instead of "cancel" + { + downloadStarted = false; + downloadFileLength = -1; + downloadFileCurrentLength = -1; + progressFile->SetValue(0); + photonFilePath = SaveDialog->GetPath(); + photonFileName = SaveDialog->GetFilename(); + photonFile = new wxFile(photonFilePath, wxFile::OpenMode::write); + if (photonFile->IsOpened()) //if opening of the file succeded + { + gcodeCmd.setCommand("M6032"); + gcodeCmd.setParameter(wxString('\'') + ListCtrl1->GetItemText(lSelectedItem, 1).Trim() + wxString('\'')); + progressFile->SetValue(0); + sendCmdToPrinter(gcodeCmd.getGcodeCmd()); + getAsyncReply(); + } + else + { + wxMessageBox(_("Failed to write file. Make sure you have write access."), _("Error"), wxOK | wxICON_ERROR | wxCENTER); + } + } + } + else + { + wxMessageBox(_("Please select a file to download."), _("Warning"), wxOK | wxICON_EXCLAMATION | wxCENTER); + } + + +} + +void NewFrame::OnMyThread(wxCommandEvent& event) +{ + //wxLogMessage("Received %s, %d", receivedBuf, numRead); + handleResponse(); +} + +void NewFrame::OnPollTimerTrigger(wxTimerEvent& event) +{ + //wxMessageBox("Triggered"); + gcodeCmd.setCommand("M27"); + gcodeCmd.setParameter(""); + sendCmdToPrinter(gcodeCmd.getCommand()); + getAsyncReply(); +} + +void NewFrame::OnWatchDogTimerTrigger(wxTimerEvent& event) +{ + if (isRunning) + { + sockThread->Kill(); + //free(sockThread); + sockThread = nullptr; + isRunning = false; + sock->Close(); + free(addrPeer); + addrPeer = nullptr; + isconnected = false; + startList = false; + endList = false; + fileCount = 0; + photonFile = nullptr; + photonFileName = wxEmptyString; + photonFilePath = wxEmptyString; + beforeByte = 0; + frameNum = 0; + numDownloadRetries = 0; + downloadStarted = false; + downloadFileLength = -1; + downloadFileCurrentLength = -1; + PollTimer.Stop(); + WatchDogTimer.Stop(); + setStatusMessages(_("Not Connected"), "", ""); + btnConnect->SetLabel(_("Connect")); + lblStatus->SetLabel(_("Not Connected")); + clearListControl(); + progressFile->SetValue(0); + PrintProgress->SetValue(0); + wxMessageBox(_("Failed to receive any response from the printer in 2 Seconds.\nPlease try re-connecting"), _("Error"), wxOK | wxICON_ERROR | wxCENTER); + } +} diff --git a/NewFrame.h b/NewFrame.h new file mode 100644 index 0000000..31edfa3 --- /dev/null +++ b/NewFrame.h @@ -0,0 +1,145 @@ +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +# pragma hdrstop +#endif + +// for all others, include the necessary headers +#ifndef WX_PRECOMP +# include "wx/wx.h" +#endif +#include "wx/url.h" +#include "wx/sstream.h" +//(*Headers(NewFrame) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +//*) +#include +// Define a new application type +class MyApp : public wxApp +{ +public: + virtual bool OnInit() wxOVERRIDE; +}; + +// Define a new frame type: this is going to be our main frame +class NewFrame : public wxFrame +{ +public: + + NewFrame(wxFrame* parent, wxWindowID id = wxID_ANY, const wxString Title = "", const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize); + virtual ~NewFrame(); + + //(*Declarations(NewFrame) + wxButton* btnConnect; + wxButton* btnDelete; + wxButton* btnDownload; + wxButton* btnPause; + wxButton* btnRefresh; + wxButton* btnStart; + wxButton* btnStop; + wxButton* btnUpload; + wxGauge* PrintProgress; + wxGauge* progressFile; + wxListCtrl* ListCtrl1; + wxPanel* Panel1; + wxStaticBox* StaticBox1; + wxStaticBox* StaticBox2; + wxStaticBox* StaticBox3; + wxStaticText* StaticText1; + wxStaticText* lblPercentDone; + wxStaticText* lblStatus; + wxStatusBar* StatusBar1; + wxTextCtrl* txtIP; + wxTimer PollTimer; + wxTimer WatchDogTimer; + //*) + + //static wxString[5] SizeSuffixes = { "bytes", "KB", "MB", "GB", "TB"}; + bool ispaused = false; + bool isPrinting = false; + double progressBefore = -9999; + int framenumber = 0; + bool isConnected = false; + int tickCount = 0; + wxString msges[3]; +protected: + + //(*Identifiers(NewFrame) + static const long ID_STATICBOX1; + static const long ID_TEXTCTRL1; + static const long ID_STATICTEXT1; + static const long ID_BUTTON1; + static const long ID_STATICTEXT2; + static const long ID_STATICBOX2; + static const long ID_BUTTON2; + static const long ID_BUTTON3; + static const long ID_BUTTON4; + static const long ID_GAUGE1; + static const long ID_STATICTEXT3; + static const long ID_STATICBOX3; + static const long ID_BUTTON5; + static const long ID_BUTTON6; + static const long ID_BUTTON7; + static const long ID_BUTTON8; + static const long ID_GAUGE2; + static const long ID_LISTCTRL1; + static const long ID_PANEL1; + static const long ID_TIMER1; + static const long ID_STATUSBAR1; + static const long ID_TIMER2; + //*) + +private: + + //(*Handlers(NewFrame) + void OnbtnConnectClick(wxCommandEvent& event); + void OnbtnStartClick(wxCommandEvent& event); + void OnbtnPauseClick(wxCommandEvent& event); + void OnbtnStopClick(wxCommandEvent& event); + void OnbtnDeleteClick(wxCommandEvent& event); + void OnbtnRefreshClick(wxCommandEvent& event); + void OnbtnUploadClick(wxCommandEvent& event); + void OnbtnDownloadClick(wxCommandEvent& event); + void OnPollTimerTrigger(wxTimerEvent& event); + void OnWatchDogTimerTrigger(wxTimerEvent& event); + //*) + void getAsyncReply(); + void OnMyThread(wxCommandEvent& event); + void getVersion(); + void getBlockingReply(); + void handleResponse(); + void sendCmdToPrinter(wxString); + void sendCmdToPrinter(uint8_t*, unsigned int); + void updatefileList(); + void connectToPrinter(wxString); + void disconnectFromPrinter(); + //void setStatusMessages(std::array); + void setStatusMessages(wxString, wxString, wxString); + wxString isError(wxString); + void clearListControl(); + bool isconnected = false; + bool startList = false; + bool endList = false; + int fileCount = 0; + wxFile* photonFile; + wxString photonFileName; + wxString photonFilePath; + unsigned int beforeByte = 0; + unsigned int frameNum = 0; + unsigned int numDownloadRetries = 0; + bool downloadStarted = false; + ssize_t downloadFileLength = -1; + ssize_t downloadFileCurrentLength = -1; + DECLARE_EVENT_TABLE() +}; + diff --git a/PhotonNetworkTool.sln b/PhotonNetworkTool.sln new file mode 100644 index 0000000..29aba3f --- /dev/null +++ b/PhotonNetworkTool.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27428.2011 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PhotonNetworkTool", "PhotonNetworkTool.vcxproj", "{149DF993-556D-494C-B267-7D09EB73F1FF}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {149DF993-556D-494C-B267-7D09EB73F1FF}.Debug|x64.ActiveCfg = Debug|x64 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Debug|x64.Build.0 = Debug|x64 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Debug|x86.ActiveCfg = Debug|Win32 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Debug|x86.Build.0 = Debug|Win32 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Release|x64.ActiveCfg = Release|x64 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Release|x64.Build.0 = Release|x64 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Release|x86.ActiveCfg = Release|Win32 + {149DF993-556D-494C-B267-7D09EB73F1FF}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A28D70B8-9441-4C29-90E4-CE4083FC08A0} + EndGlobalSection +EndGlobal diff --git a/PhotonNetworkTool.vcxproj b/PhotonNetworkTool.vcxproj new file mode 100644 index 0000000..66fcd3c --- /dev/null +++ b/PhotonNetworkTool.vcxproj @@ -0,0 +1,156 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {149DF993-556D-494C-B267-7D09EB73F1FF} + PhotonNetworkTool + 10.0.16299.0 + PhotonTool + + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + Application + true + v141 + MultiByte + + + Application + false + v141 + true + MultiByte + + + + + + + + + + + + + + + + + + + + + $(SolutionDir)MSVC\$(Platform)\$(Configuration)\ + MSVC\Obj\$(Configuration)\ + + + $(SolutionDir)MSVC\$(Platform)\$(Configuration)\ + MSVC\Obj\$(Configuration)\ + + + + Level3 + Disabled + true + true + F:\dev\wxwigets3.1.2\include;%(AdditionalIncludeDirectories) + WXUSINGDLL;%(PreprocessorDefinitions) + + + F:\dev\wxwigets3.1.2\lib\vc_x64_dll;%(AdditionalLibraryDirectories) + + + + + Level3 + Disabled + true + true + F:\dev\wxwigets3.1.2\lib\vc_x64_dll\mswud;F:\dev\wxwigets3.1.2\include;%(AdditionalIncludeDirectories) + WXUSINGDLL;%(PreprocessorDefinitions) + + + F:\dev\wxwigets3.1.2\lib\vc_x64_dll;%(AdditionalLibraryDirectories) + wxbase31ud.lib;wxmsw31ud_core.lib;wxbase31ud_net.lib;%(AdditionalDependencies) + + + + + Level3 + MaxSpeed + true + true + true + true + F:\dev\wxwigets3.1.2\include;%(AdditionalIncludeDirectories) + WXUSINGDLL;%(PreprocessorDefinitions) + + + true + true + F:\dev\wxwigets3.1.2\lib\vc_x64_dll;%(AdditionalLibraryDirectories) + + + + + Level3 + MaxSpeed + true + true + true + true + F:\dev\wxwigets3.1.2\lib\vc_x64_dll\mswu;F:\dev\wxwigets3.1.2\include;%(AdditionalIncludeDirectories) + WXUSINGDLL;%(PreprocessorDefinitions) + + + true + true + F:\dev\wxwigets3.1.2\lib\vc_x64_dll;%(AdditionalLibraryDirectories) + wxbase31u.lib;wxmsw31u_core.lib;wxbase31u_net.lib;%(AdditionalDependencies) + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PhotonNetworkTool.vcxproj.user b/PhotonNetworkTool.vcxproj.user new file mode 100644 index 0000000..be25078 --- /dev/null +++ b/PhotonNetworkTool.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/PhotonNetworkToolLinux.cbp b/PhotonNetworkToolLinux.cbp new file mode 100644 index 0000000..c7dba49 --- /dev/null +++ b/PhotonNetworkToolLinux.cbp @@ -0,0 +1,66 @@ + + + + + + diff --git a/PhotonNetworkToolLinux.mak b/PhotonNetworkToolLinux.mak new file mode 100644 index 0000000..3a3ad27 --- /dev/null +++ b/PhotonNetworkToolLinux.mak @@ -0,0 +1,90 @@ +#------------------------------------------------------------------------------# +# This makefile was generated by 'cbp2make' tool rev.147 # +#------------------------------------------------------------------------------# + + +WORKDIR = `pwd` + +CC = gcc +CXX = g++ +AR = ar +LD = g++ +WINDRES = windres + +INC = -I/usr/local/lib/wx/include/gtk3-unicode-3.1 -I/usr/local/include/wx-3.1 +CFLAGS = -Wall +RESINC = +LIBDIR = -L/usr/local/lib +LIB = +LDFLAGS = + +INC_DEBUG = $(INC) +CFLAGS_DEBUG = $(CFLAGS) -g +RESINC_DEBUG = $(RESINC) +RCFLAGS_DEBUG = $(RCFLAGS) +LIBDIR_DEBUG = $(LIBDIR) +LIB_DEBUG = $(LIB) +LDFLAGS_DEBUG = $(LDFLAGS) +OBJDIR_DEBUG = Unix/obj/Debug +DEP_DEBUG = +OUT_DEBUG = Unix/x64/Debug/PhotonTool + +INC_RELEASE = $(INC) +CFLAGS_RELEASE = $(CFLAGS) -O2 -DWXUSINGDLL -D_FILE_OFFSET_BITS=64 -D__WXGTK__ +RESINC_RELEASE = $(RESINC) +RCFLAGS_RELEASE = $(RCFLAGS) +LIBDIR_RELEASE = $(LIBDIR) +LIB_RELEASE = $(LIB)-lwx_baseu_net-3.1 -lwx_baseu-3.1 -lwx_gtk3u_core-3.1 -lpthread -lwx_gtk3u_adv-3.1 +LDFLAGS_RELEASE = $(LDFLAGS) -s +OBJDIR_RELEASE = Unix/obj/Release +DEP_RELEASE = +OUT_RELEASE = Unix/x64/Release/PhotonTool + +OBJ_DEBUG = $(OBJDIR_DEBUG)/NewFrame.o + +OBJ_RELEASE = $(OBJDIR_RELEASE)/NewFrame.o + +all: debug release + +clean: clean_debug clean_release + +before_debug: + test -d Unix/x64/Debug || mkdir -p Unix/x64/Debug + test -d $(OBJDIR_DEBUG) || mkdir -p $(OBJDIR_DEBUG) + +after_debug: + +debug: before_debug out_debug after_debug + +out_debug: before_debug $(OBJ_DEBUG) $(DEP_DEBUG) + $(LD) $(LIBDIR_DEBUG) -o $(OUT_DEBUG) $(OBJ_DEBUG) $(LDFLAGS_DEBUG) $(LIB_DEBUG) + +$(OBJDIR_DEBUG)/NewFrame.o: NewFrame.cpp + $(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c NewFrame.cpp -o $(OBJDIR_DEBUG)/NewFrame.o + +clean_debug: + rm -f $(OBJ_DEBUG) $(OUT_DEBUG) + rm -rf Unix/x64/Debug + rm -rf $(OBJDIR_DEBUG) + +before_release: + test -d Unix/x64/Release || mkdir -p Unix/x64/Release + test -d $(OBJDIR_RELEASE) || mkdir -p $(OBJDIR_RELEASE) + +after_release: + +release: before_release out_release after_release + +out_release: before_release $(OBJ_RELEASE) $(DEP_RELEASE) + $(LD) $(LIBDIR_RELEASE) -o $(OUT_RELEASE) $(OBJ_RELEASE) $(LDFLAGS_RELEASE) $(LIB_RELEASE) + +$(OBJDIR_RELEASE)/NewFrame.o: NewFrame.cpp + $(CXX) $(CFLAGS_RELEASE) $(INC_RELEASE) -c NewFrame.cpp -o $(OBJDIR_RELEASE)/NewFrame.o + +clean_release: + rm -f $(OBJ_RELEASE) $(OUT_RELEASE) + rm -rf Unix/x64/Release + rm -rf $(OBJDIR_RELEASE) + +.PHONY: before_debug after_debug clean_debug before_release after_release clean_release + diff --git a/PhotonNetworkToolMac.mak b/PhotonNetworkToolMac.mak new file mode 100644 index 0000000..5dfd9d4 --- /dev/null +++ b/PhotonNetworkToolMac.mak @@ -0,0 +1,90 @@ +#------------------------------------------------------------------------------# +# This makefile was generated by 'cbp2make' tool rev.147 # +#------------------------------------------------------------------------------# + + +WORKDIR = `pwd` + +CC = gcc +CXX = g++ -mmacosx-version-min=10.10 +AR = ar +LD = g++ +WINDRES = + +INC = -I/usr/local/lib/wx/include/osx_cocoa-unicode-3.1 -I/usr/local/include/wx-3.1 +CFLAGS = -Wall +RESINC = +LIBDIR = -L/usr/local/lib +LIB = +LDFLAGS = + +INC_DEBUG = $(INC) +CFLAGS_DEBUG = $(CFLAGS) -g +RESINC_DEBUG = $(RESINC) +RCFLAGS_DEBUG = $(RCFLAGS) +LIBDIR_DEBUG = $(LIBDIR) +LIB_DEBUG = $(LIB) +LDFLAGS_DEBUG = $(LDFLAGS) +OBJDIR_DEBUG = obj/Debug +DEP_DEBUG = +OUT_DEBUG = Mac/x64/Debug/PhotonTool + +INC_RELEASE = $(INC) +CFLAGS_RELEASE = $(CFLAGS) -O2 -arch x86_64 -fno-common -fvisibility=hidden -fvisibility-inlines-hidden -DWXUSINGDLL -D_FILE_OFFSET_BITS=64 -D__WXMAC__ -D__WXOSX__ -D__WXOSX_COCOA__ +RESINC_RELEASE = $(RESINC) +RCFLAGS_RELEASE = $(RCFLAGS) +LIBDIR_RELEASE = $(LIBDIR) +LIB_RELEASE = $(LIB)-framework IOKit -framework Carbon -framework Cocoa -framework AudioToolbox -framework System -framework OpenGL -lwx_osx_cocoau_xrc-3.1 -lwx_osx_cocoau_html-3.1 -lwx_osx_cocoau_qa-3.1 -lwx_osx_cocoau_core-3.1 -lwx_baseu_xml-3.1 -lwx_baseu_net-3.1 -lwx_baseu-3.1 +LDFLAGS_RELEASE = $(LDFLAGS) +OBJDIR_RELEASE = obj/Release +DEP_RELEASE = +OUT_RELEASE = Mac/x64/Release/PhotonTool + +OBJ_DEBUG = $(OBJDIR_DEBUG)/NewFrame.o + +OBJ_RELEASE = $(OBJDIR_RELEASE)/NewFrame.o + +all: debug release + +clean: clean_debug clean_release + +before_debug: + test -d Mac/x64/Debug || mkdir -p Mac/x64/Debug + test -d $(OBJDIR_DEBUG) || mkdir -p $(OBJDIR_DEBUG) + +after_debug: + +debug: before_debug out_debug after_debug + +out_debug: before_debug $(OBJ_DEBUG) $(DEP_DEBUG) + $(LD) $(LIBDIR_DEBUG) -o $(OUT_DEBUG) $(OBJ_DEBUG) $(LDFLAGS_DEBUG) $(LIB_DEBUG) + +$(OBJDIR_DEBUG)/NewFrame.o: NewFrame.cpp + $(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c NewFrame.cpp -o $(OBJDIR_DEBUG)/NewFrame.o + +clean_debug: + rm -f $(OBJ_DEBUG) $(OUT_DEBUG) + rm -rf Mac/x64/Debug + rm -rf $(OBJDIR_DEBUG) + +before_release: + test -d Mac/x64/Release || mkdir -p Mac/x64/Release + test -d $(OBJDIR_RELEASE) || mkdir -p $(OBJDIR_RELEASE) + +after_release: + +release: before_release out_release after_release + +out_release: before_release $(OBJ_RELEASE) $(DEP_RELEASE) + $(LD) $(LIBDIR_RELEASE) -o $(OUT_RELEASE) $(OBJ_RELEASE) $(LDFLAGS_RELEASE) $(LIB_RELEASE) + +$(OBJDIR_RELEASE)/NewFrame.o: NewFrame.cpp + $(CXX) $(CFLAGS_RELEASE) $(INC_RELEASE) -c NewFrame.cpp -o $(OBJDIR_RELEASE)/NewFrame.o + +clean_release: + rm -f $(OBJ_RELEASE) $(OUT_RELEASE) + rm -rf Mac/x64/Release + rm -rf $(OBJDIR_RELEASE) + +.PHONY: before_debug after_debug clean_debug before_release after_release clean_release + diff --git a/PhotonNetworkToolWindows.cbp b/PhotonNetworkToolWindows.cbp new file mode 100644 index 0000000..bfc59ee --- /dev/null +++ b/PhotonNetworkToolWindows.cbp @@ -0,0 +1,67 @@ + + + + + + diff --git a/PhotonNetworkToolWindows.depend b/PhotonNetworkToolWindows.depend new file mode 100644 index 0000000..fa9cfbf --- /dev/null +++ b/PhotonNetworkToolWindows.depend @@ -0,0 +1,1755 @@ +# depslib dependency file v1.0 +1564556819 source:f:\dev\wxwigettest\photontool\photonnetworktool\resources.rc + +1564999093 source:f:\dev\wxwigettest\photontool\photonnetworktool\newframe.cpp + "NewFrame.h" + + + + + + "MyThread.h" + +1564990830 f:\dev\wxwigettest\photontool\photonnetworktool\newframe.h + "wx/wxprec.h" + "wx/wx.h" + "wx/url.h" + "wx/sstream.h" + + + + + + + + + + + + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\wxprec.h + "wx/defs.h" + "wx/chartype.h" + "wx/msw/wrapwin.h" + "wx/msw/private.h" + "wx/msw/wrapcctl.h" + "wx/msw/wrapcdlg.h" + "wx/msw/missing.h" + "wx/wx.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\defs.h + "wx/msw/winundef.h" + "wx/platform.h" + "wx/version.h" + "wx/dlimpexp.h" + + "wx/types.h" + "wx/debug.h" + "wx/windowid.h" + + "wx/qt/defs.h" + "wx/features.h" + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\winundef.h + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\platform.h + + + + "wx/android/config_android.h" + "wx/compiler.h" + "wx/setup.h" + "wx/msw/libraries.h" + "wx/msw/gccpriv.h" + + + "wx/chkconf.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\compiler.h + +1564351486 f:\dev\wxwigets3.1.2\wxinstall\lib\wx\include\msw-unicode-3.1\wx\setup.h + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\libraries.h + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\gccpriv.h + "wx/msw/winver.h" + <_mingw.h> + + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\winver.h + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\chkconf.h + "wx/msw/chkconf.h" + "wx/gtk/chkconf.h" + "wx/gtk/chkconf.h" + "wx/osx/chkconf.h" + "wx/dfb/chkconf.h" + "wx/motif/chkconf.h" + "wx/x11/chkconf.h" + "wx/android/chkconf.h" + "wx/unix/chkconf.h" + "wx/univ/chkconf.h" + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\chkconf.h + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\version.h + "wx/cpp.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\cpp.h + "wx/compiler.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dlimpexp.h + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\types.h + "wx/platform.h" + + + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\debug.h + + + "wx/chartype.h" + "wx/cpp.h" + "wx/dlimpexp.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\chartype.h + "wx/types.h" + + + + + + + + + + + + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\windowid.h + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\features.h + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\wrapwin.h + "wx/platform.h" + "wx/msw/winver.h" + + + "wx/msw/winundef.h" + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\private.h + "wx/msw/wrapwin.h" + "wx/log.h" + "wx/window.h" + "wx/gdicmn.h" + "wx/colour.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\log.h + "wx/defs.h" + "wx/cpp.h" + "wx/string.h" + "wx/strvararg.h" + "wx/arrstr.h" + + "wx/dynarray.h" + "wx/hashmap.h" + "wx/msgout.h" + "wx/thread.h" + "wx/iosfwrap.h" + "wx/generic/logg.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\string.h + "wx/defs.h" + + + + + + + "wx/wxcrtbase.h" + "wx/strvararg.h" + "wx/buffer.h" + "wx/strconv.h" + "wx/stringimpl.h" + "wx/stringops.h" + "wx/unichar.h" + "wx/tls.h" + + "wx/iosfwrap.h" + "wx/crt.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\wxcrtbase.h + "wx/chartype.h" + + + + + + + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\strvararg.h + "wx/platform.h" + "wx/cpp.h" + "wx/chartype.h" + "wx/strconv.h" + "wx/buffer.h" + "wx/unichar.h" + + + + "wx/stringimpl.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\strconv.h + "wx/defs.h" + "wx/chartype.h" + "wx/buffer.h" + + "wx/fontenc.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\buffer.h + "wx/defs.h" + "wx/wxcrtbase.h" + + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\fontenc.h + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\unichar.h + "wx/defs.h" + "wx/chartype.h" + "wx/stringimpl.h" + + + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stringimpl.h + "wx/defs.h" + "wx/chartype.h" + "wx/wxcrtbase.h" + + "wx/beforestd.h" + + "wx/afterstd.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\beforestd.h + +1564351486 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\afterstd.h + "wx/msw/winundef.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stringops.h + "wx/chartype.h" + "wx/stringimpl.h" + "wx/unichar.h" + "wx/buffer.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\tls.h + "wx/defs.h" + "wx/msw/tls.h" + "wx/unix/tls.h" + + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\iosfwrap.h + + + "wx/msw/winundef.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\crt.h + "wx/defs.h" + "wx/chartype.h" + "wx/wxcrt.h" + "wx/wxcrtvararg.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\wxcrt.h + "wx/wxcrtbase.h" + "wx/string.h" + + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\wxcrtvararg.h + "wx/wxcrt.h" + "wx/strvararg.h" + "wx/string.h" + + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\arrstr.h + "wx/defs.h" + "wx/string.h" + "wx/dynarray.h" + + "wx/beforestd.h" + + "wx/afterstd.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dynarray.h + "wx/defs.h" + "wx/vector.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\vector.h + "wx/defs.h" + + + "wx/scopeguard.h" + "wx/meta/movable.h" + "wx/meta/if.h" + "wx/beforestd.h" + + + "wx/afterstd.h" + +1564351511 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\scopeguard.h + "wx/defs.h" + "wx/except.h" + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\except.h + "wx/defs.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\movable.h + "wx/meta/pod.h" + "wx/string.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\pod.h + "wx/defs.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\if.h + "wx/defs.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\hashmap.h + "wx/string.h" + "wx/wxcrt.h" + + + + + + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msgout.h + "wx/defs.h" + "wx/chartype.h" + "wx/strvararg.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\thread.h + "wx/defs.h" + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\logg.h + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\window.h + "wx/event.h" + "wx/list.h" + "wx/cursor.h" + "wx/font.h" + "wx/colour.h" + "wx/region.h" + "wx/utils.h" + "wx/intl.h" + "wx/validate.h" + "wx/palette.h" + "wx/accel.h" + "wx/access.h" + "wx/msw/window.h" + "wx/motif/window.h" + "wx/gtk/window.h" + "wx/gtk1/window.h" + "wx/x11/window.h" + "wx/dfb/window.h" + "wx/osx/window.h" + "wx/qt/window.h" + "wx/univ/window.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\event.h + "wx/defs.h" + "wx/cpp.h" + "wx/object.h" + "wx/clntdata.h" + "wx/math.h" + "wx/gdicmn.h" + "wx/cursor.h" + "wx/mousestate.h" + "wx/dynarray.h" + "wx/thread.h" + "wx/tracker.h" + "wx/typeinfo.h" + "wx/any.h" + "wx/vector.h" + "wx/meta/convertible.h" + "wx/meta/removeref.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\object.h + "wx/memory.h" + "wx/xti.h" + "wx/rtti.h" + "wx/xti2.h" + "wx/msw/msvcrt.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\memory.h + "wx/defs.h" + "wx/string.h" + "wx/msgout.h" + + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xti.h + "wx/defs.h" + "wx/xtitypes.h" + "wx/xtihandler.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xtitypes.h + "wx/defs.h" + "wx/string.h" + "wx/hashmap.h" + "wx/arrstr.h" + "wx/flags.h" + "wx/intl.h" + "wx/log.h" + + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\flags.h + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\intl.h + "wx/defs.h" + "wx/string.h" + "wx/translation.h" + "wx/fontenc.h" + "wx/language.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\translation.h + "wx/defs.h" + "wx/string.h" + "wx/buffer.h" + "wx/language.h" + "wx/hashmap.h" + "wx/strconv.h" + "wx/scopedptr.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\language.h + "wx/defs.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\scopedptr.h + "wx/defs.h" + "wx/checkeddelete.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\checkeddelete.h + "wx/cpp.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xtihandler.h + "wx/defs.h" + "wx/xti.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\rtti.h + "wx/memory.h" + "wx/flags.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xti2.h + "wx/xtiprop.h" + "wx/xtictor.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xtiprop.h + "wx/defs.h" + "wx/xti.h" + "wx/any.h" + +1564351486 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\any.h + "wx/defs.h" + + "wx/string.h" + "wx/meta/if.h" + "wx/typeinfo.h" + "wx/list.h" + "wx/datetime.h" + "wx/variant.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\typeinfo.h + "wx/defs.h" + + + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\list.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/vector.h" + "wx/beforestd.h" + + + + "wx/afterstd.h" + + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\datetime.h + "wx/defs.h" + + + "wx/longlong.h" + "wx/anystr.h" + "wx/dynarray.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\longlong.h + "wx/defs.h" + "wx/string.h" + + "wx/iosfwrap.h" + + "wx/strvararg.h" + +1564351486 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\anystr.h + "wx/string.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\variant.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/arrstr.h" + "wx/list.h" + "wx/cpp.h" + "wx/longlong.h" + "wx/datetime.h" + "wx/iosfwrap.h" + "wx/any.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\xtictor.h + "wx/defs.h" + "wx/xti.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\msvcrt.h + + + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\clntdata.h + "wx/defs.h" + "wx/string.h" + "wx/hashmap.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\math.h + "wx/defs.h" + + + + + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\gdicmn.h + "wx/defs.h" + "wx/list.h" + "wx/string.h" + "wx/fontenc.h" + "wx/hashmap.h" + "wx/math.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\cursor.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/gdiimage.h" + "wx/msw/cursor.h" + "wx/motif/cursor.h" + "wx/gtk/cursor.h" + "wx/gtk1/cursor.h" + "wx/x11/cursor.h" + "wx/dfb/cursor.h" + "wx/osx/cursor.h" + "wx/qt/cursor.h" + "wx/utils.h" + +1564351508 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\gdiobj.h + "wx/object.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\gdiimage.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/list.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\cursor.h + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\utils.h + "wx/object.h" + "wx/list.h" + "wx/filefn.h" + "wx/hashmap.h" + "wx/versioninfo.h" + "wx/meta/implicitconversion.h" + "wx/gdicmn.h" + "wx/mousestate.h" + "wx/longlong.h" + "wx/platinfo.h" + + + + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\filefn.h + "wx/list.h" + "wx/arrstr.h" + + + + + + + + + + + + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\versioninfo.h + "wx/string.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\implicitconversion.h + "wx/defs.h" + "wx/meta/if.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\mousestate.h + "wx/gdicmn.h" + "wx/kbdstate.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\kbdstate.h + "wx/defs.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\platinfo.h + "wx/string.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\tracker.h + "wx/defs.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\convertible.h + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\removeref.h + +1564351508 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\font.h + "wx/defs.h" + "wx/fontenc.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/math.h" + "wx/msw/font.h" + "wx/motif/font.h" + "wx/gtk/font.h" + "wx/gtk1/font.h" + "wx/x11/font.h" + "wx/dfb/font.h" + "wx/osx/font.h" + "wx/qt/font.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\font.h + "wx/gdicmn.h" + +1564351507 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\colour.h + "wx/defs.h" + "wx/gdiobj.h" + "wx/variant.h" + "wx/msw/colour.h" + "wx/motif/colour.h" + "wx/gtk/colour.h" + "wx/gtk1/colour.h" + "wx/generic/colour.h" + "wx/x11/colour.h" + "wx/osx/colour.h" + "wx/qt/colour.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\colour.h + "wx/object.h" + +1564351511 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\region.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/region.h" + "wx/gtk/region.h" + "wx/gtk1/region.h" + "wx/x11/region.h" + "wx/dfb/region.h" + "wx/osx/region.h" + "wx/qt/region.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\region.h + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\validate.h + "wx/defs.h" + "wx/event.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\palette.h + "wx/defs.h" + "wx/object.h" + "wx/gdiobj.h" + "wx/msw/palette.h" + "wx/x11/palette.h" + "wx/generic/paletteg.h" + "wx/osx/palette.h" + "wx/qt/palette.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\palette.h + "wx/gdiobj.h" + +1564351506 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\accel.h + "wx/defs.h" + "wx/object.h" + "wx/generic/accel.h" + "wx/msw/accel.h" + "wx/motif/accel.h" + "wx/gtk/accel.h" + "wx/gtk1/accel.h" + "wx/osx/accel.h" + "wx/qt/accel.h" + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\accel.h + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\accel.h + +1564351506 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\access.h + "wx/defs.h" + "wx/variant.h" + "wx/msw/ole/access.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ole\access.h + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\window.h + "wx/settings.h" + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\settings.h + "wx/colour.h" + "wx/font.h" + +1564351497 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\wrapcctl.h + "wx/msw/wrapwin.h" + + "wx/msw/missing.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\missing.h + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\wrapcdlg.h + "wx/defs.h" + "wx/msw/wrapwin.h" + "wx/msw/private.h" + "wx/msw/missing.h" + + "wx/msw/winundef.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\wx.h + "wx/defs.h" + "wx/object.h" + "wx/dynarray.h" + "wx/list.h" + "wx/hash.h" + "wx/string.h" + "wx/hashmap.h" + "wx/arrstr.h" + "wx/intl.h" + "wx/log.h" + "wx/event.h" + "wx/app.h" + "wx/utils.h" + "wx/stream.h" + "wx/memory.h" + "wx/math.h" + "wx/stopwatch.h" + "wx/timer.h" + "wx/module.h" + "wx/wxcrt.h" + "wx/wxcrtvararg.h" + "wx/window.h" + "wx/containr.h" + "wx/panel.h" + "wx/toplevel.h" + "wx/frame.h" + "wx/gdicmn.h" + "wx/gdiobj.h" + "wx/region.h" + "wx/bitmap.h" + "wx/image.h" + "wx/colour.h" + "wx/font.h" + "wx/dc.h" + "wx/dcclient.h" + "wx/dcmemory.h" + "wx/dcprint.h" + "wx/dcscreen.h" + "wx/button.h" + "wx/menuitem.h" + "wx/menu.h" + "wx/pen.h" + "wx/brush.h" + "wx/palette.h" + "wx/icon.h" + "wx/cursor.h" + "wx/dialog.h" + "wx/settings.h" + "wx/msgdlg.h" + "wx/dataobj.h" + "wx/control.h" + "wx/ctrlsub.h" + "wx/bmpbuttn.h" + "wx/checkbox.h" + "wx/checklst.h" + "wx/choice.h" + "wx/scrolbar.h" + "wx/stattext.h" + "wx/statbmp.h" + "wx/statbox.h" + "wx/listbox.h" + "wx/radiobox.h" + "wx/radiobut.h" + "wx/textctrl.h" + "wx/slider.h" + "wx/gauge.h" + "wx/scrolwin.h" + "wx/dirdlg.h" + "wx/toolbar.h" + "wx/combobox.h" + "wx/layout.h" + "wx/sizer.h" + "wx/statusbr.h" + "wx/choicdlg.h" + "wx/textdlg.h" + "wx/filedlg.h" + "wx/mdi.h" + "wx/validate.h" + "wx/valtext.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\hash.h + "wx/defs.h" + "wx/string.h" + "wx/object.h" + +1564351486 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\app.h + "wx/event.h" + "wx/eventfilter.h" + "wx/build.h" + "wx/cmdargs.h" + "wx/init.h" + "wx/intl.h" + "wx/log.h" + "wx/unix/app.h" + "wx/msw/app.h" + "wx/motif/app.h" + "wx/dfb/app.h" + "wx/gtk/app.h" + "wx/gtk1/app.h" + "wx/x11/app.h" + "wx/osx/app.h" + "wx/qt/app.h" + "wx/univ/theme.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\eventfilter.h + "wx/defs.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\build.h + "wx/version.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\cmdargs.h + "wx/arrstr.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\init.h + "wx/defs.h" + "wx/chartype.h" + "wx/msw/init.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\init.h + "wx/msw/wrapwin.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\app.h + "wx/event.h" + "wx/icon.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\icon.h + "wx/iconloc.h" + "wx/msw/icon.h" + "wx/motif/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/generic/icon.h" + "wx/variant.h" + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\iconloc.h + "wx/string.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\icon.h + "wx/msw/gdiimage.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stream.h + "wx/defs.h" + + "wx/object.h" + "wx/string.h" + "wx/filefn.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stopwatch.h + "wx/defs.h" + "wx/longlong.h" + "wx/time.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\time.h + "wx/longlong.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\timer.h + "wx/defs.h" + "wx/object.h" + "wx/longlong.h" + "wx/event.h" + "wx/stopwatch.h" + "wx/utils.h" + +1564351491 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\module.h + "wx/object.h" + "wx/list.h" + "wx/arrstr.h" + "wx/dynarray.h" + +1564351488 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\containr.h + "wx/defs.h" + "wx/event.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\panel.h + "wx/window.h" + "wx/containr.h" + "wx/univ/panel.h" + "wx/msw/panel.h" + "wx/generic/panelg.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\panel.h + +1564351502 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\panelg.h + "wx/bitmap.h" + +1564351506 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\bitmap.h + "wx/string.h" + "wx/gdicmn.h" + "wx/colour.h" + "wx/image.h" + "wx/variant.h" + "wx/msw/bitmap.h" + "wx/x11/bitmap.h" + "wx/gtk/bitmap.h" + "wx/gtk1/bitmap.h" + "wx/x11/bitmap.h" + "wx/dfb/bitmap.h" + "wx/osx/bitmap.h" + "wx/qt/bitmap.h" + "wx/generic/mask.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\image.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/gdicmn.h" + "wx/hashmap.h" + "wx/arrstr.h" + "wx/stream.h" + "wx/variant.h" + "wx/imagbmp.h" + "wx/imagpng.h" + "wx/imaggif.h" + "wx/imagpcx.h" + "wx/imagjpeg.h" + "wx/imagtga.h" + "wx/imagtiff.h" + "wx/imagpnm.h" + "wx/imagxpm.h" + "wx/imagiff.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagbmp.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagpng.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imaggif.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagpcx.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagjpeg.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagtga.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagtiff.h + "wx/defs.h" + "wx/image.h" + "wx/versioninfo.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagpnm.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagxpm.h + "wx/image.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imagiff.h + "wx/image.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\bitmap.h + "wx/msw/gdiimage.h" + "wx/math.h" + "wx/palette.h" + +1564351512 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\toplevel.h + "wx/nonownedwnd.h" + "wx/iconbndl.h" + "wx/weakref.h" + "wx/msw/toplevel.h" + "wx/gtk/toplevel.h" + "wx/gtk1/toplevel.h" + "wx/x11/toplevel.h" + "wx/dfb/toplevel.h" + "wx/osx/toplevel.h" + "wx/motif/toplevel.h" + "wx/qt/toplevel.h" + "wx/univ/toplevel.h" + +1564351510 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\nonownedwnd.h + "wx/window.h" + "wx/dfb/nonownedwnd.h" + "wx/gtk/nonownedwnd.h" + "wx/osx/nonownedwnd.h" + "wx/msw/nonownedwnd.h" + "wx/qt/nonownedwnd.h" + +1564351517 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\nonownedwnd.h + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\iconbndl.h + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/icon.h" + "wx/dynarray.h" + +1564351495 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\weakref.h + "wx/tracker.h" + "wx/meta/convertible.h" + "wx/meta/int2type.h" + +1564351496 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\meta\int2type.h + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\toplevel.h + "wx/weakref.h" + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\frame.h + "wx/toplevel.h" + "wx/statusbr.h" + "wx/univ/frame.h" + "wx/msw/frame.h" + "wx/gtk/frame.h" + "wx/gtk1/frame.h" + "wx/motif/frame.h" + "wx/osx/frame.h" + "wx/qt/frame.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\statusbr.h + "wx/defs.h" + "wx/control.h" + "wx/list.h" + "wx/dynarray.h" + "wx/univ/statusbr.h" + "wx/msw/statusbar.h" + "wx/generic/statusbr.h" + "wx/osx/statusbr.h" + "wx/qt/statusbar.h" + "wx/generic/statusbr.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\control.h + "wx/defs.h" + "wx/window.h" + "wx/gdicmn.h" + "wx/univ/control.h" + "wx/msw/control.h" + "wx/motif/control.h" + "wx/gtk/control.h" + "wx/gtk1/control.h" + "wx/osx/control.h" + "wx/qt/control.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\control.h + "wx/dynarray.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\statusbar.h + "wx/vector.h" + "wx/tooltip.h" + +1564351512 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\tooltip.h + "wx/defs.h" + "wx/msw/tooltip.h" + "wx/gtk/tooltip.h" + "wx/gtk1/tooltip.h" + "wx/osx/tooltip.h" + "wx/qt/tooltip.h" + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\tooltip.h + "wx/object.h" + "wx/gdicmn.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\frame.h + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dc.h + "wx/object.h" + "wx/intl.h" + "wx/colour.h" + "wx/font.h" + "wx/bitmap.h" + "wx/brush.h" + "wx/pen.h" + "wx/palette.h" + "wx/dynarray.h" + "wx/math.h" + "wx/image.h" + "wx/region.h" + "wx/affinematrix2d.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\brush.h + "wx/defs.h" + "wx/object.h" + "wx/gdiobj.h" + "wx/gdicmn.h" + "wx/msw/brush.h" + "wx/x11/brush.h" + "wx/gtk/brush.h" + "wx/gtk1/brush.h" + "wx/dfb/brush.h" + "wx/osx/brush.h" + "wx/qt/brush.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\brush.h + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\pen.h + "wx/gdiobj.h" + "wx/peninfobase.h" + "wx/msw/pen.h" + "wx/x11/pen.h" + "wx/gtk/pen.h" + "wx/gtk1/pen.h" + "wx/dfb/pen.h" + "wx/osx/pen.h" + "wx/qt/pen.h" + +1564351513 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\peninfobase.h + "wx/bitmap.h" + "wx/colour.h" + "wx/gdicmn.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\pen.h + "wx/gdiobj.h" + "wx/gdicmn.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\affinematrix2d.h + "wx/defs.h" + "wx/affinematrix2dbase.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\affinematrix2dbase.h + "wx/defs.h" + "wx/geometry.h" + +1564351508 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\geometry.h + "wx/defs.h" + "wx/utils.h" + "wx/gdicmn.h" + "wx/math.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dcclient.h + "wx/dc.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dcmemory.h + "wx/dc.h" + "wx/bitmap.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dcprint.h + "wx/defs.h" + "wx/dc.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dcscreen.h + "wx/defs.h" + "wx/dc.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\button.h + "wx/defs.h" + "wx/anybutton.h" + "wx/univ/button.h" + "wx/msw/button.h" + "wx/motif/button.h" + "wx/gtk/button.h" + "wx/gtk1/button.h" + "wx/osx/button.h" + "wx/qt/button.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\anybutton.h + "wx/defs.h" + "wx/bitmap.h" + "wx/control.h" + "wx/univ/anybutton.h" + "wx/msw/anybutton.h" + "wx/gtk/anybutton.h" + "wx/osx/anybutton.h" + "wx/qt/anybutton.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\anybutton.h + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\button.h + +1564351510 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\menuitem.h + "wx/defs.h" + "wx/object.h" + "wx/univ/menuitem.h" + "wx/msw/menuitem.h" + "wx/motif/menuitem.h" + "wx/gtk/menuitem.h" + "wx/gtk1/menuitem.h" + "wx/osx/menuitem.h" + "wx/qt/menuitem.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\menuitem.h + "wx/bitmap.h" + "wx/ownerdrw.h" + +1564351510 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\ownerdrw.h + "wx/defs.h" + "wx/font.h" + "wx/colour.h" + "wx/msw/ownerdrw.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ownerdrw.h + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\menu.h + "wx/defs.h" + "wx/list.h" + "wx/window.h" + "wx/menuitem.h" + "wx/univ/menu.h" + "wx/msw/menu.h" + "wx/motif/menu.h" + "wx/gtk/menu.h" + "wx/gtk1/menu.h" + "wx/osx/menu.h" + "wx/qt/menu.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\menu.h + "wx/accel.h" + "wx/dynarray.h" + "wx/arrstr.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dialog.h + "wx/toplevel.h" + "wx/containr.h" + "wx/sharedptr.h" + "wx/univ/dialog.h" + "wx/msw/dialog.h" + "wx/motif/dialog.h" + "wx/gtk/dialog.h" + "wx/gtk1/dialog.h" + "wx/osx/dialog.h" + "wx/qt/dialog.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\sharedptr.h + "wx/defs.h" + "wx/atomic.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\atomic.h + "wx/defs.h" + "wx/msw/wrapwin.h" + "libkern/OSAtomic.h" + + "wx/thread.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\dialog.h + "wx/panel.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msgdlg.h + "wx/defs.h" + "wx/dialog.h" + "wx/stockitem.h" + "wx/generic/msgdlgg.h" + "wx/msw/msgdlg.h" + "wx/motif/msgdlg.h" + "wx/gtk/msgdlg.h" + "wx/osx/msgdlg.h" + "wx/qt/msgdlg.h" + +1564351493 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stockitem.h + "wx/defs.h" + "wx/chartype.h" + "wx/string.h" + "wx/accel.h" + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\msgdlgg.h + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\msgdlg.h + +1564351507 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dataobj.h + "wx/defs.h" + "wx/string.h" + "wx/bitmap.h" + "wx/list.h" + "wx/arrstr.h" + "wx/msw/ole/dataform.h" + "wx/motif/dataform.h" + "wx/gtk/dataform.h" + "wx/gtk1/dataform.h" + "wx/x11/dataform.h" + "wx/osx/dataform.h" + "wx/qt/dataform.h" + "wx/msw/ole/dataobj.h" + "wx/motif/dataobj.h" + "wx/x11/dataobj.h" + "wx/gtk/dataobj.h" + "wx/gtk1/dataobj.h" + "wx/osx/dataobj.h" + "wx/qt/dataobj.h" + "wx/msw/ole/dataobj2.h" + "wx/gtk/dataobj2.h" + "wx/gtk1/dataobj2.h" + "wx/x11/dataobj2.h" + "wx/motif/dataobj2.h" + "wx/osx/dataobj2.h" + "wx/qt/dataobj2.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ole\dataform.h + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ole\dataobj.h + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ole\dataobj2.h + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\ctrlsub.h + "wx/defs.h" + "wx/arrstr.h" + "wx/control.h" + + "wx/msw/ctrlsub.h" + "wx/motif/ctrlsub.h" + "wx/qt/ctrlsub.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ctrlsub.h + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\bmpbuttn.h + "wx/defs.h" + "wx/button.h" + "wx/univ/bmpbuttn.h" + "wx/msw/bmpbuttn.h" + "wx/motif/bmpbuttn.h" + "wx/gtk/bmpbuttn.h" + "wx/gtk1/bmpbuttn.h" + "wx/osx/bmpbuttn.h" + "wx/qt/bmpbuttn.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\bmpbuttn.h + "wx/button.h" + "wx/bitmap.h" + "wx/brush.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\checkbox.h + "wx/defs.h" + "wx/control.h" + "wx/univ/checkbox.h" + "wx/msw/checkbox.h" + "wx/motif/checkbox.h" + "wx/gtk/checkbox.h" + "wx/gtk1/checkbox.h" + "wx/osx/checkbox.h" + "wx/qt/checkbox.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\checkbox.h + "wx/msw/ownerdrawnbutton.h" + +1564351521 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\ownerdrawnbutton.h + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\checklst.h + "wx/defs.h" + "wx/listbox.h" + "wx/univ/checklst.h" + "wx/msw/checklst.h" + "wx/motif/checklst.h" + "wx/gtk/checklst.h" + "wx/gtk1/checklst.h" + "wx/osx/checklst.h" + "wx/qt/checklst.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\listbox.h + "wx/defs.h" + "wx/ctrlsub.h" + "wx/univ/listbox.h" + "wx/msw/listbox.h" + "wx/motif/listbox.h" + "wx/gtk/listbox.h" + "wx/gtk1/listbox.h" + "wx/osx/listbox.h" + "wx/qt/listbox.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\listbox.h + "wx/dynarray.h" + +1564351524 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\checklst.h + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\choice.h + "wx/defs.h" + "wx/ctrlsub.h" + "wx/univ/choice.h" + "wx/msw/choice.h" + "wx/motif/choice.h" + "wx/gtk/choice.h" + "wx/gtk1/choice.h" + "wx/osx/choice.h" + "wx/qt/choice.h" + +1564351518 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\choice.h + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\scrolbar.h + "wx/defs.h" + "wx/control.h" + "wx/univ/scrolbar.h" + "wx/msw/scrolbar.h" + "wx/motif/scrolbar.h" + "wx/gtk/scrolbar.h" + "wx/gtk1/scrolbar.h" + "wx/osx/scrolbar.h" + "wx/qt/scrolbar.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\scrolbar.h + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\stattext.h + "wx/defs.h" + "wx/control.h" + "wx/univ/stattext.h" + "wx/msw/stattext.h" + "wx/motif/stattext.h" + "wx/gtk/stattext.h" + "wx/gtk1/stattext.h" + "wx/osx/stattext.h" + "wx/qt/stattext.h" + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\stattext.h + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\statbmp.h + "wx/defs.h" + "wx/control.h" + "wx/bitmap.h" + "wx/icon.h" + "wx/univ/statbmp.h" + "wx/msw/statbmp.h" + "wx/motif/statbmp.h" + "wx/gtk/statbmp.h" + "wx/gtk1/statbmp.h" + "wx/osx/statbmp.h" + "wx/qt/statbmp.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\statbmp.h + "wx/control.h" + "wx/icon.h" + "wx/bitmap.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\statbox.h + "wx/defs.h" + "wx/control.h" + "wx/containr.h" + "wx/univ/statbox.h" + "wx/msw/statbox.h" + "wx/motif/statbox.h" + "wx/gtk/statbox.h" + "wx/gtk1/statbox.h" + "wx/osx/statbox.h" + "wx/qt/statbox.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\statbox.h + "wx/compositewin.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\compositewin.h + "wx/window.h" + "wx/containr.h" + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\radiobox.h + "wx/defs.h" + "wx/ctrlsub.h" + "wx/dynarray.h" + "wx/univ/radiobox.h" + "wx/msw/radiobox.h" + "wx/motif/radiobox.h" + "wx/gtk/radiobox.h" + "wx/gtk1/radiobox.h" + "wx/osx/radiobox.h" + "wx/qt/radiobox.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\radiobox.h + "wx/statbox.h" + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\radiobut.h + "wx/defs.h" + "wx/control.h" + "wx/univ/radiobut.h" + "wx/msw/radiobut.h" + "wx/motif/radiobut.h" + "wx/gtk/radiobut.h" + "wx/gtk1/radiobut.h" + "wx/osx/radiobut.h" + "wx/qt/radiobut.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\radiobut.h + "wx/msw/ownerdrawnbutton.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\textctrl.h + "wx/defs.h" + "wx/control.h" + "wx/textentry.h" + "wx/dynarray.h" + "wx/gdicmn.h" + "wx/ioswrap.h" + "wx/x11/textctrl.h" + "wx/univ/textctrl.h" + "wx/msw/textctrl.h" + "wx/motif/textctrl.h" + "wx/gtk/textctrl.h" + "wx/gtk1/textctrl.h" + "wx/osx/textctrl.h" + "wx/qt/textctrl.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\textentry.h + "wx/filefn.h" + "wx/gdicmn.h" + "wx/gtk/textentry.h" + "wx/osx/textentry.h" + "wx/msw/textentry.h" + "wx/motif/textentry.h" + "wx/qt/textentry.h" + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\textentry.h + +1564351490 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\ioswrap.h + "wx/beforestd.h" + + + "wx/afterstd.h" + "wx/msw/winundef.h" + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\textctrl.h + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\slider.h + "wx/defs.h" + "wx/control.h" + "wx/univ/slider.h" + "wx/msw/slider.h" + "wx/motif/slider.h" + "wx/gtk/slider.h" + "wx/gtk1/slider.h" + "wx/osx/slider.h" + "wx/qt/slider.h" + +1564351522 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\slider.h + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\gauge.h + "wx/defs.h" + "wx/control.h" + "wx/univ/gauge.h" + "wx/msw/gauge.h" + "wx/motif/gauge.h" + "wx/gtk/gauge.h" + "wx/gtk1/gauge.h" + "wx/osx/gauge.h" + "wx/qt/gauge.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\gauge.h + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\scrolwin.h + "wx/panel.h" + "wx/gtk/scrolwin.h" + "wx/gtk1/scrolwin.h" + "wx/generic/scrolwin.h" + +1564351502 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\scrolwin.h + "wx/recguard.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\recguard.h + "wx/defs.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\dirdlg.h + "wx/defs.h" + "wx/dialog.h" + "wx/generic/dirdlgg.h" + "wx/generic/dirdlgg.h" + "wx/msw/dirdlg.h" + "wx/gtk/dirdlg.h" + "wx/generic/dirdlgg.h" + "wx/osx/dirdlg.h" + "wx/generic/dirdlgg.h" + "wx/qt/dirdlg.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\dirdlg.h + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\toolbar.h + "wx/defs.h" + "wx/tbarbase.h" + "wx/univ/toolbar.h" + "wx/msw/toolbar.h" + "wx/motif/toolbar.h" + "wx/gtk/toolbar.h" + "wx/gtk1/toolbar.h" + "wx/osx/toolbar.h" + "wx/qt/toolbar.h" + +1564351512 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\tbarbase.h + "wx/defs.h" + "wx/bitmap.h" + "wx/list.h" + "wx/control.h" + +1564351523 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\toolbar.h + "wx/dynarray.h" + "wx/imaglist.h" + +1564351509 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\imaglist.h + "wx/defs.h" + "wx/msw/imaglist.h" + "wx/generic/imaglist.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\imaglist.h + "wx/bitmap.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\combobox.h + "wx/defs.h" + "wx/textctrl.h" + "wx/ctrlsub.h" + "wx/textentry.h" + "wx/univ/combobox.h" + "wx/msw/combobox.h" + "wx/motif/combobox.h" + "wx/gtk/combobox.h" + "wx/gtk1/combobox.h" + "wx/osx/combobox.h" + "wx/qt/combobox.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\combobox.h + "wx/choice.h" + "wx/textentry.h" + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\layout.h + "wx/object.h" + +1564351504 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\sizer.h + "wx/defs.h" + "wx/window.h" + +1564351499 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\choicdlg.h + "wx/defs.h" + "wx/generic/choicdgg.h" + +1564351501 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\choicdgg.h + "wx/dynarray.h" + "wx/dialog.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\textdlg.h + "wx/generic/textdlgg.h" + +1564351502 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\generic\textdlgg.h + "wx/defs.h" + "wx/dialog.h" + "wx/valtext.h" + "wx/textctrl.h" + +1564351505 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\valtext.h + "wx/defs.h" + "wx/validate.h" + +1564351500 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\filedlg.h + "wx/defs.h" + "wx/dialog.h" + "wx/arrstr.h" + "wx/generic/filedlgg.h" + "wx/msw/filedlg.h" + "wx/motif/filedlg.h" + "wx/gtk/filedlg.h" + "wx/gtk1/filedlg.h" + "wx/osx/filedlg.h" + "wx/qt/filedlg.h" + +1564351519 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\filedlg.h + +1564351503 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\mdi.h + "wx/defs.h" + "wx/frame.h" + "wx/menu.h" + "wx/generic/mdig.h" + "wx/msw/mdi.h" + "wx/gtk/mdi.h" + "wx/gtk1/mdi.h" + "wx/osx/mdi.h" + "wx/qt/mdi.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\mdi.h + "wx/frame.h" + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\url.h + "wx/defs.h" + "wx/uri.h" + "wx/protocol/protocol.h" + "wx/protocol/http.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\uri.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/arrstr.h" + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\protocol\protocol.h + "wx/defs.h" + "wx/object.h" + "wx/string.h" + "wx/stream.h" + "wx/socket.h" + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\socket.h + "wx/defs.h" + "wx/event.h" + "wx/sckaddr.h" + "wx/list.h" + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\sckaddr.h + "wx/defs.h" + "wx/string.h" + +1564351498 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\protocol\http.h + "wx/defs.h" + "wx/hashmap.h" + "wx/protocol/protocol.h" + "wx/buffer.h" + +1564351492 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\sstream.h + "wx/stream.h" + +1564351510 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\listctrl.h + "wx/defs.h" + "wx/listbase.h" + "wx/msw/listctrl.h" + "wx/qt/listctrl.h" + "wx/generic/listctrl.h" + +1564351510 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\listbase.h + "wx/colour.h" + "wx/font.h" + "wx/gdicmn.h" + "wx/event.h" + "wx/control.h" + "wx/itemattr.h" + "wx/systhemectrl.h" + +1564351513 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\itemattr.h + +1564351513 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\systhemectrl.h + "wx/defs.h" + +1564351520 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\msw\listctrl.h + "wx/textctrl.h" + "wx/dynarray.h" + "wx/vector.h" + +1564351489 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\file.h + "wx/defs.h" + "wx/string.h" + "wx/filefn.h" + "wx/convauto.h" + +1564351487 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\convauto.h + "wx/strconv.h" + "wx/fontenc.h" + +1564351494 f:\dev\wxwigets3.1.2\wxinstall\include\wx-3.1\wx\tokenzr.h + "wx/object.h" + "wx/string.h" + "wx/arrstr.h" + +1564858400 f:\dev\wxwigettest\photontool\photonnetworktool\mythread.h + + + "wx/socket.h" + diff --git a/PhotonTool.xpm b/PhotonTool.xpm new file mode 100644 index 0000000..30d2ba2 --- /dev/null +++ b/PhotonTool.xpm @@ -0,0 +1,146 @@ +/* XPM */ +static char *cb4rb_ajgn6[] = { +/* columns rows colors chars-per-pixel */ +"119 138 2 1 ", +" c None", +". c #6A6A6A", +/* pixels */ +" ", +" .... ", +" ....... ", +" .......... ", +" .............. ", +" .................. ", +" ..................... ", +" ........................ ", +" ............................ ", +" ................................ ", +" .................................. ", +" ...................................... ", +" .......................................... ", +" ............................................. ", +" ................................................ ", +" .................................................... ", +" ........................................................ ", +" ........................................................... ", +" .............................................................. ", +" .................................................................. ", +" ...................................................................... ", +" ......................................................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" .................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... .................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... ..................................... ", +" ..................................... .....................................", +" ................................... ...................................", +" ................................. ..................................", +" ................................ ................................", +" .............................. ..............................", +" ............................ ............................", +" ........................... ...........................", +" ......................... .........................", +" ....................... .......................", +" ..................... ......................", +" .................... ....................", +" .................. .... ...................", +" .................. ........ ..................", +" .................. ........... ..................", +" .................. .............. ..................", +" .................. .................. ..................", +" .................. ...................... ..................", +" .................. ......................... ..................", +" .................. ............................ ..................", +" .................. ................................ ..................", +" .................. .................................... ..................", +" .................. ....................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. .......................................... ..................", +" .................. ......................................... ..................", +" .................. ........................................ ..................", +" .................. ...................................... ..................", +" .................. .................................... ..................", +" .................. .................................. ..................", +" .................. ................................. ..................", +" .................. ............................... ..................", +" .................. ............................. ..................", +" .................. ............................ ..................", +" .................. .......................... ..................", +" .................. ........................ ..................", +" .................. ........................ ...................", +" .................. ........................ ....................", +" .................. ........................ ......................", +" .................. ........................ ........................", +" .................. ........................ ..........................", +" .................. ........................ ...........................", +" .................. ........................ .............................", +" .................. ........................ ...............................", +" .................. ........................ .................................", +" .................. ........................ ..................................", +" .................. ........................ ....................................", +" .................. ........................ ......................................", +" .................. ........................ ........................................", +" .................. ........................ .........................................", +" .................. ........................ ...........................................", +" .................. ........................ .............................................", +" .................. ........................ ............................................. ", +" ................ ........................ .............................................. ", +" .............. ........................ .............................................. ", +" ............. ........................ .............................................. ", +" ........... ........................ .............................................. ", +" ......... ........................ .............................................. ", +" ....... ..................................................................... ", +" ...... ................................................................... ", +" .... .................................................................. ", +" .. ................................................................ ", +" .............................................................. ", +" ............................................................ ", +" ........................................................... ", +" ......................................................... ", +" ....................................................... ", +" ...................................................... ", +" .................................................... ", +" .................................................. ", +" ................................................ ", +" ............................................... ", +" ............................................. ", +" ........................................... ", +" ......................................... ", +" ...................................... ", +" .................................. ", +" .............................. ", +" ........................... ", +" ........................ ", +" .................... ", +" ................ ", +" .............. ", +" .......... ", +" ...... ", +" ... ", +" " +}; diff --git a/Resources.rc b/Resources.rc new file mode 100644 index 0000000..03f0551 --- /dev/null +++ b/Resources.rc @@ -0,0 +1 @@ +aaaa ICON ppm.ico \ No newline at end of file diff --git a/ppm.icns b/ppm.icns new file mode 100644 index 0000000000000000000000000000000000000000..ffb0b4582e731e512f2d86e3c0a1d12ff991d3b0 GIT binary patch literal 50092 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 literal 0 HcmV?d00001 diff --git a/wxsmith/NewFrame.wxs b/wxsmith/NewFrame.wxs new file mode 100644 index 0000000..af2c596 --- /dev/null +++ b/wxsmith/NewFrame.wxs @@ -0,0 +1,119 @@ + + + + Photon Network Controller + 334,491 + 0 + + + 224,320 + 334,488 + + + 8,8 + 320,80 + + + 192.168.1.222 + 208,24 + 112,21 + + + + 16,28 + + + + 235,54 + 85,26 + + + + + 16,60 + + + + 8,96 + 320,112 + + + + 16,118 + 85,26 + + + + + 127,118 + 85,26 + + + + + 235,118 + 85,26 + + + + 1000 + 16,170 + 304,24 + + + + 16,152 + + + + 8,216 + 320,251 + + + + 16,392 + 85,26 + + + + + 125,392 + 85,26 + + + + + 235,392 + 85,26 + + + + + 235,432 + 85,26 + + + + 16,433 + 212,24 + + + 16,232 + 304,152 + + + + + + + + 1 + -10 + wxSB_NORMAL + + + 1 + + + +