| |
| |
| #include "casmsubmitpage.h" |
| #include "tfilepath.h" |
| #include "tconvert.h" |
| #include "tsystem.h" |
| |
| #include "tw/mainshell.h" |
| #include "tw/textfield.h" |
| #include "tw/label.h" |
| #include "tw/optionmenu.h" |
| #include "tw/button.h" |
| #include "tw/checkbox.h" |
| |
| #include "filebrowserpopup.h" |
| #include "casmconfigpanel.h" |
| #include "casmfileinfo.h" |
| #include "tfarmcontroller.h" |
| #include "application.h" |
| #include "util.h" |
| |
| #include "tw/message.h" |
| |
| |
| |
| class CasmSubmitPage::Data |
| { |
| public: |
| Data(CasmSubmitPage *cspage); |
| ~Data() |
| { |
| delete m_casmTask; |
| } |
| |
| void configureNotify(const TDimension &size); |
| |
| void browseCasmFiles(); |
| void submit(); |
| void loadCasm(const TFilePath &fp); |
| |
| CasmSubmitPage *m_cspage; |
| |
| TLabel *m_taskNameLabel; |
| TTextField *m_taskNameTextField; |
| TCheckBox *m_submitAsSuspended; |
| TButton *m_submit; |
| |
| TLabel *m_filepathLabel; |
| TTextField *m_filepathTextField; |
| |
| TButton *m_casmBrowseBtn; |
| |
| CasmConfigPanel *m_configPanel; |
| |
| CasmTask *m_casmTask; |
| }; |
| |
| |
| |
| CasmSubmitPage::Data::Data(CasmSubmitPage *cspage) |
| : m_cspage(cspage), m_casmTask(0) |
| { |
| m_taskNameLabel = new TLabel(cspage); |
| m_taskNameLabel->setText("Task Name:"); |
| |
| m_submitAsSuspended = new TCheckBox(cspage, "Submit as Suspended"); |
| |
| m_taskNameTextField = new TTextField(cspage); |
| |
| m_filepathLabel = new TLabel(cspage); |
| m_filepathLabel->setText("File Path:"); |
| |
| m_filepathTextField = new TTextField(cspage); |
| m_casmBrowseBtn = new TButton(cspage); |
| m_casmBrowseBtn->setTitle("..."); |
| tconnect(*m_casmBrowseBtn, this, &CasmSubmitPage::Data::browseCasmFiles); |
| |
| m_submit = new TButton(cspage); |
| m_submit->setTitle("Submit"); |
| tconnect(*m_submit, this, &CasmSubmitPage::Data::submit); |
| |
| m_configPanel = new CasmConfigPanel(cspage); |
| } |
| |
| |
| |
| void CasmSubmitPage::Data::configureNotify(const TDimension &size) |
| { |
| int x0 = 20; |
| int y = size.ly - 1 - 10; |
| int x = x0; |
| |
| m_taskNameLabel->setGeometry(x, y - 15, x + 100, y); |
| m_taskNameTextField->setGeometry(x + 104, y - 15, x + 250, y); |
| x += 280; |
| m_submitAsSuspended->setGeometry(x, y - 15, x + 120, y); |
| x += 150; |
| m_submit->setGeometry(x, y - 15, x + 80, y); |
| x = x0; |
| y -= 40; |
| |
| m_filepathLabel->setGeometry(x, y - 15, x + 100, y); |
| m_filepathTextField->setGeometry(x + 104, y - 15, x + 650, y); |
| m_casmBrowseBtn->setGeometry(x + 660, y - 15, x + 680, y); |
| x = x0; |
| y -= 40; |
| |
| m_configPanel->setGeometry(0, 0, size.lx - 1, y); |
| } |
| |
| |
| |
| void CasmSubmitPage::Data::browseCasmFiles() |
| { |
| static FileBrowserPopup *popup = 0; |
| |
| if (!popup) { |
| vector<string> fileTypes; |
| fileTypes.push_back("casm"); |
| popup = new FileBrowserPopup(m_cspage, fileTypes); |
| |
| popup->setOkAction( |
| new TFileBrowserPopupAction<CasmSubmitPage::Data>(this, &CasmSubmitPage::Data::loadCasm)); |
| } |
| |
| if (!popup) |
| return; |
| |
| TFilePath fp = Application::instance()->getCurrentFolder(); |
| if (fp != TFilePath()) |
| popup->setCurrentDir(fp); |
| |
| TDimension d = TMainshell::getMainshell()->getSize(); |
| #ifdef WIN32 |
| HDC hdc = GetDC(0); |
| d.lx = GetDeviceCaps(hdc, HORZRES); |
| d.ly = GetDeviceCaps(hdc, VERTRES); |
| ReleaseDC(0, hdc); |
| #endif |
| |
| d -= popup->getSize(); |
| |
| popup->popup(TPoint(d.lx / 2, d.ly / 2)); |
| popup->setCaption("Load Casm"); |
| } |
| |
| |
| |
| void CasmSubmitPage::Data::submit() |
| { |
| if (m_filepathTextField->getText() == toWideString("")) { |
| TMessage::error("You must load a file"); |
| return; |
| } |
| |
| CasmTask *casm = m_configPanel->getTask(); |
| |
| TFarmController *controller = Application::instance()->getController(); |
| |
| string nativeCmdLine("runcasm "); |
| nativeCmdLine += casm->m_casmFile; |
| nativeCmdLine += " "; |
| |
| if (casm->m_setupFile != "") { |
| nativeCmdLine += "-setup "; |
| nativeCmdLine += casm->m_setupFile; |
| nativeCmdLine += " "; |
| } |
| |
| nativeCmdLine += casm->getCommandLine(); |
| |
| string casmName = TFilePath(casm->m_casmFile).getName(); |
| |
| int stepCount = casm->m_end - casm->m_start + 1; |
| |
| TFarmTaskGroup task( |
| casmName, nativeCmdLine, TSystem::getUserName(), |
| TSystem::getHostName(), stepCount); |
| |
| int ra = casm->m_start; |
| |
| for (;;) { |
| CasmTask subcasm(*casm); |
| |
| string cmdLine("runcasm "); |
| int rb = tmin(ra + casm->m_taskChunksize - 1, casm->m_end); |
| |
| subcasm.m_start = ra; |
| subcasm.m_end = rb; |
| |
| cmdLine += subcasm.m_casmFile; |
| cmdLine += " "; |
| |
| if (subcasm.m_setupFile != "") { |
| cmdLine += "-setup "; |
| cmdLine += subcasm.m_setupFile; |
| cmdLine += " "; |
| } |
| |
| cmdLine += subcasm.getCommandLine(); |
| cmdLine += " -nowait "; |
| |
| try { |
| string name = casmName + " " + toString(ra) + "-" + toString(rb); |
| stepCount = rb - ra + 1; |
| |
| task.addTask(new TFarmTask( |
| name, cmdLine, TSystem::getUserName(), TSystem::getHostName(), stepCount)); |
| } catch (TException &e) { |
| TMessage::error(toString(e.getMessage())); |
| } |
| |
| if (rb == casm->m_end) |
| break; |
| ra = rb + 1; |
| } |
| |
| try { |
| controller->addTask(task, m_submitAsSuspended->isSelected()); |
| } catch (TException &e) { |
| TMessage::error(toString(e.getMessage())); |
| } |
| } |
| |
| |
| |
| #ifdef WIN32 |
| |
| void DisplayStruct(LPNETRESOURCE lpnr) |
| { |
| string info; |
| if (lpnr->lpLocalName) { |
| info += lpnr->lpLocalName; |
| info += " = "; |
| } |
| info += lpnr->lpRemoteName; |
| |
| MessageBox(NULL, info.c_str(), "Connection info", 0); |
| } |
| |
| BOOL WINAPI EnumerateFunc(LPNETRESOURCE lpnr) |
| { |
| DWORD dwResult, dwResultEnum; |
| HANDLE hEnum; |
| DWORD cbBuffer = 16384; |
| DWORD cEntries = -1; |
| LPNETRESOURCE lpnrLocal; |
| DWORD i; |
| |
| |
| |
| dwResult = WNetOpenEnum(RESOURCE_CONNECTED , |
| RESOURCETYPE_ANY, |
| 0, |
| lpnr, |
| &hEnum); |
| |
| if (dwResult != NO_ERROR) { |
| |
| |
| |
| |
| return FALSE; |
| } |
| |
| |
| |
| lpnrLocal = (LPNETRESOURCE)GlobalAlloc(GPTR, cbBuffer); |
| |
| do { |
| |
| |
| |
| ZeroMemory(lpnrLocal, cbBuffer); |
| |
| |
| |
| |
| dwResultEnum = WNetEnumResource(hEnum, |
| &cEntries, |
| lpnrLocal, |
| &cbBuffer); |
| |
| |
| |
| if (dwResultEnum == NO_ERROR) { |
| for (i = 0; i < cEntries; i++) { |
| |
| |
| |
| DisplayStruct(&lpnrLocal[i]); |
| |
| |
| |
| |
| if (RESOURCEUSAGE_CONTAINER == (lpnrLocal[i].dwUsage & RESOURCEUSAGE_CONTAINER)) |
| if (!EnumerateFunc(&lpnrLocal[i])) |
| return FALSE; |
| |
| } |
| } |
| |
| |
| else if (dwResultEnum != ERROR_NO_MORE_ITEMS) { |
| |
| break; |
| } |
| } |
| |
| |
| |
| while (dwResultEnum != ERROR_NO_MORE_ITEMS); |
| |
| |
| |
| GlobalFree((HGLOBAL)lpnrLocal); |
| |
| |
| |
| dwResult = WNetCloseEnum(hEnum); |
| |
| if (dwResult != NO_ERROR) { |
| |
| |
| |
| |
| return FALSE; |
| } |
| |
| return TRUE; |
| } |
| |
| #endif |
| |
| |
| |
| void CasmSubmitPage::Data::loadCasm(const TFilePath &fp) |
| { |
| if (!TFileStatus(fp).doesExist()) { |
| string msg = toString(fp.getWideString()) + "\n"; |
| msg += "File not found\n"; |
| msg += "Please verify that the path and file name are correct"; |
| m_filepathTextField->setText(""); |
| TMessage::error(msg); |
| return; |
| } |
| |
| Application::instance()->setCurrentFolder(fp.getParentDir()); |
| |
| string uncString = convertToUncString(fp); |
| |
| m_filepathTextField->setText(uncString); |
| m_taskNameTextField->setText(TFilePath(uncString).getName()); |
| |
| #ifdef WIN32 |
| int x = uncString.find("\\", 2); |
| while (x != string::npos) { |
| uncString.replace(x, 1, "/", 0, 1); |
| x = uncString.find("\\", x + 1); |
| } |
| #endif |
| |
| TFilePath uncFilePath = TFilePath(uncString); |
| CasmFileInfo casmFileInfo(uncFilePath); |
| int start, end; |
| bool interlaced; |
| casmFileInfo.getFrameRange(start, end, interlaced); |
| |
| if (m_casmTask) |
| delete m_casmTask; |
| m_casmTask = new CasmTask; |
| |
| m_casmTask->m_casmFile = uncString; |
| m_casmTask->m_start = start; |
| m_casmTask->m_end = end; |
| m_casmTask->m_step = 1; |
| |
| m_configPanel->setTask(m_casmTask); |
| } |
| |
| |
| |
| CasmSubmitPage::CasmSubmitPage(TWidget *parent) |
| : TabPage(parent, "SubmitCasm") |
| { |
| m_data = new CasmSubmitPage::Data(this); |
| } |
| |
| |
| |
| CasmSubmitPage::~CasmSubmitPage() |
| { |
| } |
| |
| |
| |
| void CasmSubmitPage::configureNotify(const TDimension &size) |
| { |
| m_data->configureNotify(size); |
| } |
| |
| |
| |
| void CasmSubmitPage::onActivate() |
| { |
| } |
| |
| |
| |
| void CasmSubmitPage::onDeactivate() |
| { |
| } |
| |