void WriteLog(void) { char *buffer=""; char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; int fHandle=-1,linenumber=0,i=0,size=0; int file_size=0,file_status=0; GetProjectDir (dirName); MakePathname (dirName, "log.txt", pathName); file_status = GetFileSize (pathName, &file_size); if(-1==file_status) { fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII); WriteLogDateTime(fHandle); } if(0==file_status) { fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_APPEND, VAL_ASCII); WriteLogDateTime(fHandle); } buffer=(char*)malloc(1000); GetNumTextBoxLines (panelHandle, PANEL_TEXTBOX, &linenumber); for(i=0;i<linenumber;i++) { memset(buffer,0,1000); GetTextBoxLine (panelHandle, PANEL_TEXTBOX, i, buffer); strcat(buffer,"\n"); size=strlen(buffer); WriteFile (fHandle, buffer, size); } free(buffer); CloseFile(fHandle); }
static int ReadConfigFile( int item) { FILE *hFile; char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; char buffer[300]; ResetTextBox (configHandle, CONFIG_BOX, ""); GetProjectDir (dirName); switch(item) { case MENUBAR_CONFIG_CONFIGIP: MakePathname (dirName, "bbuip.txt", pathName); break; case BBUCOMMON_CONFIGCMD: MakePathname (dirName, "command.txt", pathName); break; } if (hFile = fopen(pathName, "r")) { while (fgets(buffer, (int)sizeof(buffer), hFile)) { SetCtrlVal (configHandle, CONFIG_BOX, buffer); } } else { return 0; } if(hFile) { fclose(hFile); } return 1; }
/* 辅助函数-Log信息台-右键菜单-回调函数 */ void CVICALLBACK logBoxRightClickMenuCallback(int menuBarHandle, int menuItemID, void *callbackData, int panelHandle){ switch(menuItemID){ case 3: SYSTEMTIME localTime; char dirName[MAX_PATHNAME_LEN]; char filePath[MAX_PATHNAME_LEN]; char fileName[200]; fileName[0]='\0'; GetProjectDir(dirName); strcat(dirName, "\\Logs"); GetLocalTime(&localTime); sprintf(fileName, "Log,%04d-%d-%d,%d_%02d_%02d.txt", localTime.wYear, localTime.wMonth, localTime.wDay, localTime.wHour, localTime.wMinute, localTime.wSecond); MakePathname(dirName, fileName, filePath); FILE *fp = fopen(filePath, "w"); int len=0; GetCtrlAttribute(panelHdl, MainPanel_MainLogBox, ATTR_STRING_TEXT_LENGTH, &len); char tempLog[10000]; GetCtrlVal(panelHdl, MainPanel_MainLogBox, tempLog); fwrite(tempLog, sizeof(char), len, fp); fclose(fp); ResetTextBox(panelHdl, MainPanel_MainLogBox, "Logs have been saved!"); break; case 4: ResetTextBox(panelHdl, MainPanel_MainLogBox, ""); break; } }
static int WriteOupputBox(int flag) { FILE *hFile; char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; char buffer[300]; ResetTextBox (outputHandle, OUTPUTVIEW_OUTPUTBOX, ""); GetProjectDir (dirName); if (0 == flag) // mean write output.txt to box { MakePathname (dirName, "output.txt", pathName); } if (1 == flag) // mean write help.txt to box { MakePathname (dirName, "help.txt", pathName); } if (hFile = fopen(pathName, "r")) { while (fgets(buffer, (int)sizeof(buffer), hFile)) { SetCtrlVal (outputHandle, OUTPUTVIEW_OUTPUTBOX, buffer); } } else { return 0; } if(hFile) { fclose(hFile); } return 1; }
void acquire_Init (void) { if (utilG.acq.status != ACQ_NONE) { util_ChangeInitMessage ("Acquisition Utilities..."); util_WriteLog("acquire_Init()\nStarting...\n"); acqG.p.setup = LoadPanel (utilG.p, "acquireu.uir", ACQSETUP); //SetPanelPos (acqG.p.setup, VAL_AUTO_CENTER, VAL_AUTO_CENTER); // Set default data dir and suffix int dirNameLen; if(FileExists(DFLT_DATA_DIR, &dirNameLen) ) { strcpy(dataFile.dataDir, DFLT_DATA_DIR); } else { char msg[MAX_PATHNAME_LEN*2]; sprintf(msg, "Default Data Does not exist:\n%s\nUsing application dir.", DFLT_DATA_DIR); MessagePopup ("Acquisition Setup", msg ); GetProjectDir (dataFile.dataDir); } SetCtrlVal (acqG.p.setup, ACQSETUP_DATADIR, dataFile.dataDir); strcpy(dataFile.fileSuffix, DFLT_FILE_SUFFIX); SetCtrlVal(acqG.p.setup, ACQSETUP_FILESUFFIX, dataFile.fileSuffix); // This control is a button on startup panel, "control. acquisition, and analysis" InstallCtrlCallback (utilG.p, BG_ACQSETUP, AcqSetupCallback, 0); } else SetCtrlAttribute (utilG.p, BG_ACQSETUP, ATTR_VISIBLE, FALSE); }
char *readfoldername(void) { char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; char *buffer=""; GetProjectDir (dirName); MakePathname (dirName, "config.ini", pathName); inihandle = Ini_New (0); Ini_ReadFromFile (inihandle, pathName); buffer=(char*)malloc(100); memset(buffer,0,100); Ini_GetStringIntoBuffer (inihandle, "system", "download_folder_name", buffer, 100); Ini_Dispose (inihandle); return buffer; }
/* 系统辅助函数-Init [Directory Sets] this System needs */ void initDirectorySets(void){ char dirName[MAX_PATHNAME_LEN]; char DataDirPath[MAX_PATHNAME_LEN]; char LogDirPath[MAX_PATHNAME_LEN]; GetProjectDir(dirName); sprintf(DataDirPath, "%s\\DataStorage", dirName); sprintf(LogDirPath, "%s\\Logs", dirName); int oldValue; oldValue = SetBreakOnLibraryErrors(0); int isDataDirExisted = MakeDir(DataDirPath); int isLogDirExisted = MakeDir(LogDirPath); SetBreakOnLibraryErrors (oldValue); if(isDataDirExisted == 0) addLog("Successfully create the Directory:\n\"DataStorage\" and \"Logs\"", 0, panelHdl); else if( isDataDirExisted == -9) addLog("\"DataStorage\" and \"Logs\" \nDirectory has already existed!", 0, panelHdl); }
void acquire_Init (void) { char *date, mon[10], day[10], yr[10]; if (utilG.acq.status != ACQ_NONE) { util_ChangeInitMessage ("Acquisition Utilities..."); acqG.p.setup = LoadPanel (utilG.p, "acquireu.uir", ACQSETUP); //SetPanelPos (acqG.p.setup, VAL_AUTO_CENTER, VAL_AUTO_CENTER); GetProjectDir (dataFile.dir); date = DateStr(); Scan (date, "%s>%s[xt45]%s[xt45]%s", mon, day, yr); Fmt (dataFile.name ,"%s<%s[i2]%s%s", yr, mon, day); dataFile.ext = 1; acquire_UpdateDataFileInfo(); InstallCtrlCallback (utilG.p, BG_ACQSETUP, AcqSetupCallback, 0); } else SetCtrlAttribute (utilG.p, BG_ACQSETUP, ATTR_VISIBLE, FALSE); }
int CVICALLBACK CheckUptime (int panel, int control, int event, void *callbackData, int eventData1, int eventData2) { switch (event) { case EVENT_COMMIT: char buffer[20000]; char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; FILE *hFile; char *p = ""; int i=0; int lenth=0; char temp[20]; //char value[50]; int flag =0; int row = 0; int column = 0; int insertcolumn = 0; int confirmresult = 0; typedef struct { int x; int y; } Point; confirmresult = ConfirmPopup ("Check uptime","Do you want to check uptime now?"); if ((outputHandle = LoadPanel (0, "Remotely.uir", OUTPUTVIEW)) < 0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "Load check uptime panel error,please try again!\r\n"); return -1; } SetPanelAttribute (outputHandle, ATTR_TITLE, "CheckUptimeRecord"); SetCtrlAttribute (outputHandle, OUTPUTVIEW_OUTPUTBOX, ATTR_VISIBLE, 0); SetCtrlAttribute (outputHandle, OUTPUTVIEW_TABLE, ATTR_VISIBLE, 1); GetProjectDir (dirName); MakePathname (dirName, "uptime.csv", pathName); WriteLog(); ResetTextBox (panelHandle, PANEL_TEXTBOX, ""); if (hFile = fopen(pathName, "r")) { while (fgets(buffer, (int)sizeof(buffer), hFile)) { row++; InsertTableRows (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING); column = 0; p = buffer; flag = 0; do { column++; if (insertcolumn == 0) { InsertTableColumns (outputHandle, OUTPUTVIEW_TABLE, -1, 1, VAL_CELL_STRING); } lenth = FindPattern (p, 0, -1, ",", 0, 0); // strip "," if (lenth >=0) { memset(temp,0,20); for (i=0;i<lenth;i++) { temp[i] = *p; p++; } p++; SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp); } else { lenth = FindPattern (p, 0, -1, "\n", 0, 0); // strip "\n" if (lenth >=0) // if find "\n" write last string to last column { memset(temp,0,20); for (i=0;i<lenth;i++) { temp[i] = *p; p++; } SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), temp); flag = -1; insertcolumn = 1; } else // if not find "\n", write all to last column { SetTableCellVal (outputHandle, OUTPUTVIEW_TABLE, MakePoint(column, row), p); flag = -1; insertcolumn = 1; } } }while( flag != -1); SetTableColumnAttribute (outputHandle, OUTPUTVIEW_TABLE, -1, ATTR_COLUMN_WIDTH, 80); memset(buffer,0,20000); } fclose(hFile); } if (confirmresult) // if user select yes to check uptime install popup { InstallPopup(outputHandle); } else // if user select no, discard panel due to load it at beginning of this function { if (outputHandle) { DiscardPanel (outputHandle); } } break; } return 0; }
static int Initial(int item, int flag) { char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; char *buffer=""; int value=0; int status=0; GetProjectDir (dirName); MakePathname (dirName, "config.ini", pathName); inihandle = Ini_New (0); status = Ini_ReadFromFile (inihandle, pathName); buffer=(char*)malloc(300); memset(buffer,0,300); if ((status)<0) { return status; } if (0 == item) // system operation { if(1 == flag) //write { GetCtrlVal (customizingHandle, CUSTOM_UPDATENAME, buffer); Ini_PutString (inihandle, "system", "update_vendor_name", buffer); Ini_WriteToFile (inihandle, pathName); } if(0 == flag) // read { Ini_GetStringIntoBuffer (inihandle, "system", "update_vendor_name", buffer, 100); SetCtrlVal (customizingHandle, CUSTOM_UPDATENAME, buffer); } } if (1 == item) // item operation { if(1 == flag) // write { status = GetCtrlVal (itemHandle, FILE_ITEM_VENDOR, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "vendor", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SCFC, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "scfc", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_CONFIG, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "config", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SWCONFIG, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "swconfig", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_HWF, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "hwf", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SYSINFO, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "sysinfo", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFI, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "item", "selfdefi", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIPATH, buffer); if ((status)<0) { return status; } status = Ini_PutString (inihandle, "item", "selfpath", buffer); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIFILE, buffer); if ((status)<0) { return status; } status = Ini_PutString (inihandle, "item", "selffile", buffer); if ((status)<0) { return status; } status = Ini_WriteToFile (inihandle, pathName); if ((status)<0) { return status; } } if(0 == flag) // read { status = Ini_GetInt (inihandle, "item", "vendor", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_VENDOR, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "scfc", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SCFC, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "config", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_CONFIG, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "swconfig", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SWCONFIG, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "hwf", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_HWF, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "sysinfo", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SYSINFO, value); if ((status)<0) { return status; } status = Ini_GetInt (inihandle, "item", "selfdefi", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFI, value); if ((status)<0) { return status; } status = Ini_GetStringIntoBuffer (inihandle, "item", "selfpath", buffer, 300); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIPATH, buffer); if ((status)<0) { return status; } status = Ini_GetStringIntoBuffer (inihandle, "item", "selffile", buffer, 300); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SELFDEFIFILE, buffer); if ((status)<0) { return status; } } } if (2 == item) // filter operation { if(1==flag) { status = GetCtrlVal (itemHandle, FILE_ITEM_TECHLOGS, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "filter", "techlogs", value); if ((status)<0) { return status; } status = GetCtrlVal (itemHandle, FILE_ITEM_FILTER, buffer); if ((status)<0) { return status; } status = Ini_PutString (inihandle, "filter", "filter", buffer); if ((status)<0) { return status; } status = Ini_WriteToFile (inihandle, pathName); if ((status)<0) { return status; } } if(0==flag) { status = Ini_GetInt (inihandle, "filter", "techlogs", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_TECHLOGS, value); if ((status)<0) { return status; } status = Ini_GetStringIntoBuffer (inihandle, "filter", "filter", buffer, 300); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_FILTER, buffer); if ((status)<0) { return status; } } } if (3 == item) // search operation { if(1==flag) { status = GetCtrlVal (itemHandle, FILE_ITEM_SEARCH, &value); if ((status)<0) { return status; } status = Ini_PutInt (inihandle, "search", "search", value); if ((status)<0) { return status; } memset(buffer,0,100); status = GetCtrlVal (itemHandle, FILE_ITEM_S_FILENAME, buffer); if ((status)<0) { return status; } status = Ini_PutString (inihandle, "search", "file_name", buffer); if ((status)<0) { return status; } memset(buffer,0,100); status = GetCtrlVal (itemHandle, FILE_ITEM_S_FILEPATH, buffer); if ((status)<0) { return status; } status = Ini_PutString (inihandle, "search", "file_path", buffer); if ((status)<0) { return status; } status = Ini_WriteToFile (inihandle, pathName); if ((status)<0) { return status; } } if(0==flag) { status = Ini_GetInt (inihandle, "search", "search", &value); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_SEARCH, value); if ((status)<0) { return status; } memset(buffer,0,100); status = Ini_GetStringIntoBuffer (inihandle, "search", "file_name", buffer, 300); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_S_FILENAME, buffer); if ((status)<0) { return status; } memset(buffer,0,100); status = Ini_GetStringIntoBuffer (inihandle, "search", "file_path", buffer, 300); if ((status)<0) { return status; } status = SetCtrlVal (itemHandle, FILE_ITEM_S_FILEPATH, buffer); if ((status)<0) { return status; } } } free(buffer); Ini_Dispose (inihandle); return 1; }
static int WriteConfig(int flag) { int fHandle=-1,linenumber=0,i=0,size=0,findflag=0; char *buffer=""; char pathName[MAX_PATHNAME_LEN]; char dirName[MAX_PATHNAME_LEN]; GetProjectDir (dirName); if(MENUBAR_CONFIG_CONFIGIP == flag) { MakePathname (dirName, "bbuip.txt", pathName); fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII); if(fHandle<0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "Open bbuip.txt file error,please check by yourself!\r\n"); return -1; } buffer=(char*)malloc(1000); GetNumTextBoxLines (configHandle, CONFIG_BOX, &linenumber); for(i=0;i<linenumber;i++) { memset(buffer,0,1000); GetTextBoxLine (configHandle, CONFIG_BOX, i, buffer); strcat(buffer,"\n"); size=strlen(buffer); if (size > 7) { WriteFile (fHandle, buffer, size); } } free(buffer); if(( CloseFile(fHandle))<0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "Close bbuip.txt file error,please try again!\r\n"); return -1; } GetFileSize (pathName, &size); if(size==0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "bbuip.txt size is zero,please check and try again!\r\n"); return -1; } } if(BBUCOMMON_CONFIGCMD == flag) { MakePathname (dirName, "command.txt", pathName); fHandle = OpenFile (pathName, VAL_WRITE_ONLY, VAL_TRUNCATE, VAL_ASCII); if(fHandle<0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "Open command.txt file error,please check by yourself!\r\n"); return -1; } buffer=(char*)malloc(1000); GetNumTextBoxLines (configHandle, CONFIG_BOX, &linenumber); for(i=0;i<linenumber;i++) { memset(buffer,0,1000); GetTextBoxLine (configHandle, CONFIG_BOX, i, buffer); strcat(buffer,"\n"); size=strlen(buffer); WriteFile (fHandle, buffer, size); } free(buffer); if(( CloseFile(fHandle))<0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "Close command.txt file error,please try again!\r\n"); return -1; } GetFileSize (pathName, &size); if(size==0) { SetCtrlVal (panelHandle, PANEL_TEXTBOX, "command.txt size is zero,please check and try again!\r\n"); } } return 1; }
/* In another thread, receives data and writes them into TSQ */ int CVICALLBACK receiveDataWriteToTSQ(void *functionData){ int storeFileFlag = 0; GetCtrlVal(panelHdl, MainPanel_StoreTheData_Switch, &storeFileFlag); if(0 == dataSrc){ //read data from [device port] if(OpenComConfig(comPort, "", baudRate, parity, dataBits, stopBits, inQueueSize, outQueueSize) <0) showError("Failed to open RS232 port!"); if(storeFileFlag > 0){ if( writeFPP >0){ writeFP = fopen(writeFilePath, "a"); if(writeFP == NULL) showError("Open WriteFile Failed"); fseek(writeFP, writeFPP, SEEK_SET); }else{ SYSTEMTIME localTime; char dirName[MAX_PATHNAME_LEN]; char fileName[200]; GetProjectDir(dirName); strcat(dirName, "\\DataStorage"); GetLocalTime(&localTime); sprintf(fileName, "%04d-%d-%d,%d_%02d_%02d.dat", localTime.wYear, localTime.wMonth, localTime.wDay, localTime.wHour, localTime.wMinute, localTime.wSecond); MakePathname(dirName, fileName, writeFilePath); writeFP = fopen(writeFilePath, "a"); if(writeFP == NULL) showError("Open WriteFile Failed"); } }//if(storeFileFlag) }else if(1 == dataSrc){ //read data from [file] loadFP = fopen(loadFilePath, "r"); if(loadFP == NULL){ showError("Load File Failed"); return -1; } fseek(loadFP, loadFPP, SEEK_SET); }else{ //[simulating data] } GetCtrlVal(panelHdl, MainPanel_StoreTheData_Switch, &storeFileFlag); while(receiveFlag){ writeTSQEndFlag = 1; switch(dataSrc){ case 0: bytesRead = ComRd(comPort, readData, READ_LENGTH); if(storeFileFlag > 0) fwrite(readData, sizeof(char), READ_LENGTH, writeFP); break; case 1: Delay(fileLoadSpeed); if(!feof(loadFP)){ bytesRead = fread(readData, sizeof(char), READ_LENGTH, loadFP); }else{ receiveFlag = 0; MessagePopup("Reach The End", "All data in this file has been read !"); } break; case 2: for(int i=0; i<READ_LENGTH; i++) readData[i] = 0x80; Delay(0.1); break; }//switch() CmtWriteTSQData(tsqHdl, &readData, READ_LENGTH, TSQ_INFINITE_TIMEOUT, NULL); writeTSQEndFlag = 0; }//while() switch(dataSrc){ case 0: //CloseCom(comPort); if(storeFileFlag >0){ if(!feof(writeFP)) writeFPP = ftell(writeFP); fclose(writeFP); writeFP = NULL; } break; case 1: if(!feof(loadFP)) loadFPP = ftell(loadFP); fclose(loadFP); loadFP = NULL; break; }//switch() addLog("End-Acq", 0, panelHdl); return 0; }
static void DoClickConfig( PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output, PF_EventExtra *event_extra, ArbitraryData *arb_data, SequenceData *seq_data) { void *hwndOwner = NULL; #ifdef WIN_ENV PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner); #endif ConfigVec configs; GetStdConfigs(configs); if(configs.size() == 0) configs.push_back("(nada)"); // menu makes a gray entry that says "No configs in $PATH" MenuVec menu_items; int selected = 0; menu_items.push_back("$OCIO"); // menu will gray this out if $OCIO is not defined menu_items.push_back("(-"); // this tells the menu to make a seperator for(ConfigVec::const_iterator i = configs.begin(); i != configs.end(); ++i) { menu_items.push_back( *i ); if(arb_data->source == OCIO_SOURCE_STANDARD && arb_data->path == *i) { selected = menu_items.size() - 1; } } menu_items.push_back("(-"); menu_items.push_back("Custom..."); int custom_choice = menu_items.size() - 1; if(arb_data->source == OCIO_SOURCE_CUSTOM) { selected = -1; } int choice = PopUpMenu(menu_items, selected, hwndOwner); if(choice == custom_choice) { // custom is the same as clicking the path DoClickPath(in_data, out_data, params, output, event_extra, arb_data, seq_data); } else if(choice != selected) { OpenColorIO_AE_Context *new_context = NULL; if(choice == 0) { // $OCIO char *file = std::getenv("OCIO"); if(file) { Path path(file, GetProjectDir(in_data)); new_context = new OpenColorIO_AE_Context(path.full_path(), OCIO_SOURCE_ENVIRONMENT); arb_data->source = seq_data->source = OCIO_SOURCE_ENVIRONMENT; strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN); strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN); } else throw OCIO::Exception("No $OCIO environment variable defined."); } else { // standard configs std::string config = configs[choice - 2]; std::string path = GetStdConfigPath(config); if( !path.empty() ) { new_context = new OpenColorIO_AE_Context(config, OCIO_SOURCE_STANDARD); arb_data->source = seq_data->source = OCIO_SOURCE_STANDARD; strncpy(arb_data->path, config.c_str(), ARB_PATH_LEN); strncpy(arb_data->relative_path, path.c_str(), ARB_PATH_LEN); } else throw OCIO::Exception("Problem loading OCIO configuration."); } if(new_context) { if(seq_data->context) { delete seq_data->context; } seq_data->context = new_context; strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN); strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN); // try to retain settings if it looks like the same situation, // possibly fixing a moved path if(OCIO_ACTION_NONE == arb_data->action || (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) || (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) || (OCIO_ACTION_LUT != new_context->getAction() && (-1 == FindInVec(new_context->getInputs(), arb_data->input) || -1 == FindInVec(new_context->getInputs(), arb_data->output) || -1 == FindInVec(new_context->getTransforms(), arb_data->transform) || -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) ) { // Configuration is different, so initialize defaults arb_data->action = seq_data->context->getAction(); if(arb_data->action == OCIO_ACTION_LUT) { arb_data->invert = FALSE; arb_data->interpolation = OCIO_INTERP_LINEAR; } else { strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN); strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN); strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN); strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN); } } else { // Configuration is the same, retain current settings if(arb_data->action == OCIO_ACTION_LUT) { seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation); } else if(arb_data->action == OCIO_ACTION_CONVERT) { seq_data->context->setupConvert(arb_data->input, arb_data->output); } else if(arb_data->action == OCIO_ACTION_DISPLAY) { seq_data->context->setupDisplay(arb_data->input, arb_data->device, arb_data->transform); // transform may have changed strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN); } } params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE; seq_data->status = STATUS_OK; } } }
static void DoClickPath( PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output, PF_EventExtra *event_extra, ArbitraryData *arb_data, SequenceData *seq_data) { ExtensionMap extensions; for(int i=0; i < OCIO::FileTransform::getNumFormats(); i++) { const char *extension = OCIO::FileTransform::getFormatExtensionByIndex(i); const char *format = OCIO::FileTransform::getFormatNameByIndex(i); if(extension != std::string("ccc")) // .ccc files require an ID parameter extensions[ extension ] = format; } extensions[ "ocio" ] = "OCIO Format"; void *hwndOwner = NULL; #ifdef WIN_ENV PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner); #endif char c_path[ARB_PATH_LEN + 1] = { '\0' }; bool result = OpenFile(c_path, ARB_PATH_LEN, extensions, hwndOwner); if(result) { Path path(c_path, GetProjectDir(in_data)); OpenColorIO_AE_Context *new_context = new OpenColorIO_AE_Context(path.full_path(), OCIO_SOURCE_CUSTOM); if(new_context == NULL) throw OCIO::Exception("WTF?"); if(seq_data->context) { delete seq_data->context; } seq_data->context = new_context; arb_data->source = seq_data->source = OCIO_SOURCE_CUSTOM; strncpy(arb_data->path, path.full_path().c_str(), ARB_PATH_LEN); strncpy(arb_data->relative_path, path.relative_path(false).c_str(), ARB_PATH_LEN); strncpy(seq_data->path, arb_data->path, ARB_PATH_LEN); strncpy(seq_data->relative_path, arb_data->relative_path, ARB_PATH_LEN); // try to retain settings if it looks like the same situation, // possibly fixing a moved path if(OCIO_ACTION_NONE == arb_data->action || (OCIO_ACTION_LUT == new_context->getAction() && OCIO_ACTION_LUT != arb_data->action) || (OCIO_ACTION_LUT != new_context->getAction() && OCIO_ACTION_LUT == arb_data->action) || (OCIO_ACTION_LUT != new_context->getAction() && (-1 == FindInVec(new_context->getInputs(), arb_data->input) || -1 == FindInVec(new_context->getInputs(), arb_data->output) || -1 == FindInVec(new_context->getTransforms(), arb_data->transform) || -1 == FindInVec(new_context->getDevices(), arb_data->device) ) ) ) { // Configuration is different, so initialize defaults arb_data->action = seq_data->context->getAction(); if(arb_data->action == OCIO_ACTION_LUT) { arb_data->invert = FALSE; arb_data->interpolation = OCIO_INTERP_LINEAR; } else { strncpy(arb_data->input, seq_data->context->getInput().c_str(), ARB_SPACE_LEN); strncpy(arb_data->output, seq_data->context->getOutput().c_str(), ARB_SPACE_LEN); strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN); strncpy(arb_data->device, seq_data->context->getDevice().c_str(), ARB_SPACE_LEN); } } else { // Configuration is the same, retain current settings if(arb_data->action == OCIO_ACTION_LUT) { seq_data->context->setupLUT(arb_data->invert, arb_data->interpolation); } else if(arb_data->action == OCIO_ACTION_CONVERT) { seq_data->context->setupConvert(arb_data->input, arb_data->output); } else if(arb_data->action == OCIO_ACTION_DISPLAY) { seq_data->context->setupDisplay(arb_data->input, arb_data->device, arb_data->transform); // transform may have changed strncpy(arb_data->transform, seq_data->context->getTransform().c_str(), ARB_SPACE_LEN); } } params[OCIO_DATA]->uu.change_flags = PF_ChangeFlag_CHANGED_VALUE; seq_data->status = STATUS_USING_ABSOLUTE; } }
static PF_Err DoClick( PF_InData *in_data, PF_OutData *out_data, PF_ParamDef *params[], PF_LayerDef *output, PF_EventExtra *event_extra ) { PF_Err err = PF_Err_NONE; ArbitraryData *arb_data = (ArbitraryData *)PF_LOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value); SequenceData *seq_data = (SequenceData *)PF_LOCK_HANDLE(in_data->sequence_data); if(event_extra->effect_win.area == PF_EA_CONTROL) { bool menus_visible = (arb_data->action != OCIO_ACTION_NONE); bool third_menu = (arb_data->action == OCIO_ACTION_DISPLAY); PF_Point local_point; local_point.h = event_extra->u.do_click.screen_point.h - event_extra->effect_win.current_frame.left; local_point.v = event_extra->u.do_click.screen_point.v - event_extra->effect_win.current_frame.top; UIRegion reg = WhichRegion(local_point, menus_visible, third_menu); if(reg != REGION_NONE) { try { if(reg == REGION_CONFIG_MENU) { DoClickConfig(in_data, out_data, params, output, event_extra, arb_data, seq_data); } else if(reg == REGION_PATH) { if(arb_data->source == OCIO_SOURCE_CUSTOM) { DoClickPath(in_data, out_data, params, output, event_extra, arb_data, seq_data); } } else if(arb_data->action != OCIO_ACTION_NONE && seq_data->status != STATUS_FILE_MISSING) { if(seq_data->context == NULL) { seq_data->context = new OpenColorIO_AE_Context(arb_data, GetProjectDir(in_data) ); } if(reg == REGION_CONVERT_BUTTON || reg == REGION_DISPLAY_BUTTON) { DoClickConvertDisplay(in_data, out_data, params, output, event_extra, arb_data, seq_data, reg); } else if(reg == REGION_EXPORT_BUTTON) { DoClickExport(in_data, out_data, params, output, event_extra, arb_data, seq_data, reg); } else // must be a menu then { DoClickMenus(in_data, out_data, params, output, event_extra, arb_data, seq_data, reg); } } } catch(std::exception &e) { if(in_data->appl_id == 'FXTC') { PF_SPRINTF(out_data->return_msg, e.what()); out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; } else { void *hwndOwner = NULL; #ifdef WIN_ENV PF_GET_PLATFORM_DATA(PF_PlatData_MAIN_WND, &hwndOwner); #endif ErrorMessage(e.what(), hwndOwner); } } catch(...) { PF_SPRINTF(out_data->return_msg, "Unknown error"); out_data->out_flags |= PF_OutFlag_DISPLAY_ERROR_MESSAGE; } } } PF_UNLOCK_HANDLE(params[OCIO_DATA]->u.arb_d.value); PF_UNLOCK_HANDLE(in_data->sequence_data); event_extra->evt_out_flags = PF_EO_HANDLED_EVENT; return err; }