int console_generator_selection(ContextPtr env, char *cmd) { GeneratorLayerPtr tmp = MakeShared<GeneratorLayer>(); if(!tmp) return 0; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } const Geometry &geo = screen->getGeometry(); if(!tmp->init(geo.getSize().x(), geo.getSize().y(), geo.getBpp())) { error("can't initialize generator layer"); return 0; } // this is something specific to the generator layer // it needs this from the environment.. tmp->register_generators(&env->getGenerators()); if(!tmp->open(cmd)) { error("generator %s is not found", cmd); return 0; } screen->add_layer(tmp); notice("generator %s successfully created", tmp->getName().c_str()); return 1; }
int console_filter_selection(ContextPtr env, char *cmd) { if(!cmd) return 0; LinkList<Filter> &list = env->getFilters(); LinkList<Filter>::iterator it = std::find_if(list.begin(), list.end(), [&](FilterPtr filter) { return filter->getName() == cmd; }); if(it == list.end()) { ::error("filter not found: %s", cmd); return 0; } FilterPtr filt = *it; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer selected for effect %s", filt->getName().c_str()); return 0; } if(!filt->new_instance()->apply(lay)) { ::error("error applying filter %s on layer %s", filt->getName().c_str(), lay->getName().c_str()); return 0; } // select automatically the new filter // lay->filters.sel(0); // ff->sel(true); return 1; }
void CScreensLinks::removeScreen(HWND hwnd) { // remove screen from config (this also removes aliases) m_config->removeScreen(getSelectedScreen(hwnd)); // update dialog updateScreens(hwnd, ""); updateScreensControls(hwnd); updateLinks(hwnd); updateLinksControls(hwnd); }
int console_blit_completion(ContextPtr env, char *cmd) { if(!cmd) return 0; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } // Find completions BlitPtr exactBlit; LinkList<Blit> retList; LinkList<Blit> &list = screen->getBlitter()->getBlits(); std::string cmdString(cmd); std::transform(cmdString.begin(), cmdString.end(), cmdString.begin(), ::tolower); std::copy_if(list.begin(), list.end(), retList.begin(), [&] (BlitPtr blit) { std::string name = blit->getName(); std::transform(name.begin(), name.end(), name.begin(), ::tolower); if(name == cmdString) { exactBlit = blit; } return name.compare(cmdString) == 0; }); if(retList.empty()) return 0; if(exactBlit != NULL) { snprintf(cmd, MAX_CMDLINE, "%s = ", exactBlit->getName().c_str()); return 1; } if(cmdString.empty()) { notice("List available blits"); } else { notice("List available blits starting with \"%s\"", cmd); } int c = 0; char tmp[256]; std::for_each(retList.begin(), retList.end(), [&] (BlitPtr b) { if(c % 4 == 0) { if(c != 0) { ::act("%s", tmp); } tmp[0] = '\0'; } strncat(tmp, "\t", sizeof(tmp) - 1); strncat(tmp, b->getName().c_str(), sizeof(tmp) - 1); ++c; }); return c; }
int console_print_text_layer(ContextPtr env, char *cmd) { ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer currently selected"); return 0; } DynamicPointerCast<TextLayer>(lay)->write(cmd); return screen->getLayers().size(); }
int console_blit_param_selection(ContextPtr env, char *cmd) { if(!cmd) return 0; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer currently selected"); return 0; } BlitInstancePtr b = lay->getCurrentBlit(); if(!b) { ::error("no blit selected on layer %s", lay->getName().c_str()); return 0; } // find the values after the first blank space char *p; for(p = cmd; *p != '\0'; p++) if(*p == '=') { *p = '\0'; if(*(p - 1) == ' ') *(p - 1) = '\0'; p++; break; } while(*p == ' ') p++; // jump all spaces if(*p == '\0') return 0; // no value was given LinkList<ParameterInstance> &list = b->getParameters(); LinkList<ParameterInstance>::iterator it = std::find_if(list.begin(), list.end(), [&](ParameterInstancePtr p) { return p->getName() == cmd; }); if(it == list.end()) { error("parameter %s not found in blit %s", cmd, b->getName().c_str()); return 0; } ParameterInstancePtr param = *it; func("parameter %s found in blit %s", param->getName().c_str(), b->getName().c_str()); param->parse(p); return 1; }
// callbacks used by readline to handle input from console int console_blit_selection(ContextPtr env, char *cmd) { if(!cmd) return 0; if(!strlen(cmd)) return 0; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer currently selected"); return 0; } lay->set_blit(cmd); // now this takes a string! return 1; }
int console_open_layer(ContextPtr env, char *cmd) { struct stat filestatus; func("open_layer(%s)", cmd); // check that is a good file if(strncasecmp(cmd, "/dev/video", 10) != 0) { if(stat(cmd, &filestatus) < 0) { error("invalid file %s: %s", cmd, strerror(errno)); return 0; } else { // is it a directory? if(S_ISDIR(filestatus.st_mode)) { error("can't open a directory as a layer", cmd); return 0; } } } // ok the path in cmd should be good here LayerPtr l = env->open(cmd); if(l) { /* if(!l->init(env)) { error("can't initialize layer"); delete l; } else { */ // l->set_fps(env->fps_speed); // l->fps=env->fps_speed; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } screen->add_layer(l); int len = screen->getLayers().size(); notice("layer successfully created, now you have %i layers", len); return len; } error("layer creation aborted"); return 0; }
int console_open_text_layer(ContextPtr env, char *cmd) { ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } TextLayerPtr txt = MakeShared<TextLayer>(); if(!txt->init()) { error("can't initialize text layer"); return 0; } txt->write(cmd); screen->add_layer(txt); notice("layer successfully created with text: %s", cmd); return screen->getLayers().size(); }
void CScreensLinks::editScreen(HWND hwnd) { CString oldName = getSelectedScreen(hwnd); CAddScreen dialog(hwnd, m_config, oldName); if (dialog.doModal()) { CString newName = dialog.getName(); // rename screens in the edge list if (newName != oldName) { for (size_t i = 0; i < m_edgeLinks.size(); ++i) { m_edgeLinks[i].rename(oldName, newName); } m_editedLink.rename(oldName, newName); } updateScreens(hwnd, newName); updateScreensControls(hwnd); updateLinks(hwnd); updateLinksControls(hwnd); } }
int console_param_selection(ContextPtr env, char *cmd) { if(!cmd) return 0; if(!strlen(cmd)) return 0; ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer currently selected"); return 0; } FilterInstancePtr filt = getSelectedFilter(); // find the values after the first blank space char *p; for(p = cmd; *p != '\0'; p++) if(*p == '=') { *p = '\0'; if(*(p - 1) == ' ') *(p - 1) = '\0'; p++; break; } while(*p == ' ') p++; // jump all spaces if(*p == '\0') return 0; // no value was given if(filt) { ///////////////////////// parameters for filter LinkList<ParameterInstance> &list = filt->getParameters(); LinkList<ParameterInstance>::iterator it = std::find_if(list.begin(), list.end(), [&] (ParameterInstancePtr ¶m) { return param->getName() == cmd; }); if(it == list.end()) { error("parameter %s not found in filter %s", cmd, filt->getName().c_str()); return 0; } else { ParameterInstancePtr param = *it; func("parameter %s found in filter %s", param->getName().c_str(), filt->getName().c_str()); // parse from the string to the value param->parse(p); } } else { /////// parameters for layer LinkList<ParameterInstance> &list = lay->getParameters(); LinkList<ParameterInstance>::iterator it = std::find_if(list.begin(), list.end(), [&] (ParameterInstancePtr ¶m) { return param->getName() == cmd; }); if(it == list.end()) { error("parameter %s not found in layers %s", cmd, lay->getName().c_str()); return 0; } else { ParameterInstancePtr param = *it; func("parameter %s found in layer %s at position %u", param->getName().c_str(), lay->getName().c_str()); // parse from the string to the value param->parse(p); } } return 1; }
int console_blit_param_completion(ContextPtr env, char *cmd) { ViewPortPtr screen = getSelectedScreen(); if(!screen) { ::error("no screen currently selected"); return 0; } LayerPtr lay = getSelectedLayer(); if(!lay) { ::error("no layer currently selected"); return 0; } BlitInstancePtr b = lay->getCurrentBlit(); if(!b) { ::error("no blit selected on layer %s", lay->getName().c_str()); return 0; } // Find completions // Find completions ParameterInstancePtr exactParam; LinkList<ParameterInstance> retList; LinkList<ParameterInstance> &list = b->getParameters(); std::string cmdString(cmd); std::transform(cmdString.begin(), cmdString.end(), cmdString.begin(), ::tolower); std::copy_if(list.begin(), list.end(), retList.begin(), [&] (ParameterInstancePtr param) { std::string name = param->getName(); std::transform(name.begin(), name.end(), name.begin(), ::tolower); if(name == cmdString) { exactParam = param; } return name.compare(cmdString) == 0; }); if(retList.empty()) return 0; if(exactParam != NULL) { snprintf(cmd, MAX_CMDLINE, "%s = ", exactParam->getName().c_str()); return 1; } if(cmdString.empty()) { notice("List available blit parameters"); } else { notice("List available blit parameters starting with \"%s\"", cmd); } int c = 0; std::for_each(retList.begin(), retList.end(), [&] (ParameterInstancePtr p) { switch(p->getType()) { case Parameter::BOOL: ::act("(bool) %s = %s :: %s", p->getName().c_str(), (*(bool*)p->get() == true) ? "true" : "false", p->getDescription().c_str()); break; case Parameter::NUMBER: ::act("(number) %s = %.2f :: %s", p->getName().c_str(), *(float*)p->get(), p->getDescription().c_str()); break; case Parameter::STRING: ::act("(string) %s = %s :: %s", p->getName().c_str(), (char*)p->get(), p->getDescription().c_str()); break; case Parameter::POSITION: { float *val = (float*)p->get(); ::act("(position) %s = %.2f x %.2f :: %s", p->getName().c_str(), val[0], val[1], p->getDescription().c_str()); } break; case Parameter::COLOR: ::act("%s (color) %s", p->getName().c_str(), p->getDescription().c_str()); break; default: ::error("%s (unknown) %s", p->getName().c_str(), p->getDescription().c_str()); break; } ++c; }); return c; }