void MainWindow::OnLoadObject(wxCommandEvent& WXUNUSED(event)) { wxTreeItemId itemId = tree->GetSelection(); for(unsigned int i=0; i<listWorlds.size(); i++) { if(listWorlds[i]->getTreeItem()==itemId) { wxFileDialog openFile(this,wxT("Load object file"), wxEmptyString, wxEmptyString, wxT("MOF files (*.mof)|*.mof"),wxFD_OPEN|wxFD_FILE_MUST_EXIST); if(openFile.ShowModal() == wxID_OK) { wxString fileName = openFile.GetPath(); char c_file[100]; strcpy(c_file,(const char*)fileName.mb_str(wxConvUTF8)); StreamFile s_file(c_file,true); Object *obj = s_file.read(); PositionableEntity* p_obj = dynamic_cast<PositionableEntity *>(obj); if(obj) { (*listWorlds[i]->getWorld())+=p_obj; listWorlds[i]->getChild()->UpdateWorld(); tree->AddNode(p_obj, listWorlds[i]->getTreeItem(),listWorlds[i]); } } wxFileInputStream input(openFile.GetPath()); if(!input.IsOk()) { wxLogError(wxT("Cannot open file %s"),openFile.GetPath().c_str()); return; } } else wxLogMessage(wxT("Please, select a World.")); } }
void MainWindow::OnSaveObject(wxCommandEvent& WXUNUSED(event)) { wxTreeItemId itemId = tree->GetSelection(); NodeTree* itemData = itemId.IsOk() ? (NodeTree *) tree->GetItemData(itemId):NULL; if(itemData->menus.menu_positionable && m_root!=itemId) { wxFileDialog saveFile(this,wxT("Save Object file"), wxEmptyString, wxEmptyString, wxT("MOF files (*.mof)|*.mof"),wxFD_SAVE|wxFD_OVERWRITE_PROMPT); if(saveFile.ShowModal() == wxID_OK) { wxString fileName = saveFile.GetPath(); char c_file[100]; strcpy(c_file,(const char*)fileName.mb_str(wxConvUTF8)); StreamFile s_file(c_file,false); itemData->pointer.positionableentity->setRelativeT3D(0); s_file.write(itemData->pointer.positionableentity); wxLogMessage(wxT("Successfully save in %s"), saveFile.GetPath().c_str()); } } else wxLogMessage(wxT("Please select a Object.")); }
/* * Play audio, normally as a background process. */ int main(int argc, char **argv) { struct conf conf; char *cmdfile = NULL; sigset_t sigmask; int fd; int e; int c; conf.cmd.f = stdin; conf.cmd.i = 0; conf.cmd.conn = 1; conf.buffer = NULL; conf.songs = NULL; conf.dev = NULL; conf.flags = 0; while ((c = getopt(argc, argv, "c:d:f:hilrv")) != -1) switch (c) { case 'c': if (strcmp(optarg, "-") == 0) { cmdfile = NULL; conf.flags |= CFLAG; } else cmdfile = optarg; break; case 'd': conf.dev = optarg; break; case 'f': /* file-list */ s_file(&conf.songs, optarg); break; case 'h': usage(0); /* does not return */ case 'i': info(); return 0; case 'l': /* loop */ conf.flags |= LFLAG; break; case 'r': /* random shuffle */ conf.flags |= RFLAG; break; case 'v': /* verbose */ conf.flags |= VFLAG; break; case '?': usage(1); /* does not return */ } if (cmdfile != NULL) { if ((fd = open(cmdfile, O_RDONLY | O_NONBLOCK)) < 0) err(EX_NOINPUT, "open %s", cmdfile); if ((conf.cmd.f = fdopen(fd, "r")) == NULL) { close(fd); err(EX_NOINPUT, "open %s", cmdfile); } } while (optind < argc) s_add(&conf.songs, argv[optind++]); if (((cmdfile != NULL || !isatty(0)) && !(conf.flags & CFLAG)) && conf.songs == NULL) { s_file(&conf.songs, NULL); if (cmdfile == NULL) conf.cmd.f = NULL; } if (conf.songs == NULL) exit(EX_NOINPUT); if (signal(SIGINFO, sig_info) == SIG_ERR || signal(SIGINT, sig_int) == SIG_ERR || signal(SIGUSR1, sig_usr1) == SIG_ERR || signal(SIGUSR2, sig_usr2) == SIG_ERR || signal(SIGTERM, sig_term) == SIG_ERR || signal(SIGTTIN, SIG_IGN) == SIG_ERR) err(EX_OSERR, "signal"); if (sigemptyset(&sigmask) != 0 || sigaddset(&sigmask, SIGINFO) != 0 || sigaddset(&sigmask, SIGINT) != 0 || sigaddset(&sigmask, SIGUSR1) != 0 || sigaddset(&sigmask, SIGUSR2) != 0 || sigaddset(&sigmask, SIGTERM) != 0 || sigaddset(&sigmask, SIGTTIN) != 0) err(EX_OSERR, "sigaddset"); if (signal(SIGQUIT, sig_term) != SIG_ERR && sigaddset(&sigmask, SIGQUIT) != 0) err(EX_SOFTWARE, "SIGQUIT"); if (sigprocmask(SIG_UNBLOCK, &sigmask, NULL) != 0 || sigprocmask(0, NULL, &sigmask) != 0) err(EX_OSERR, "sigprocmask"); #ifndef OSS if ((conf.out = a_open(conf.dev)) == NULL) err(EX_SOFTWARE, "a_open"); #endif conf.songs->shuffle = NULL; if ((conf.flags & RFLAG) && (conf.songs->shuffle = malloc(conf.songs->cur * sizeof(uint16_t))) == NULL) err(EX_OSERR, "malloc"); if (conf.cmd.f != NULL) { if ((conf.kq = kqueue()) < 0) err(EX_OSERR, "kqueue"); EV_SET(&conf.ev, fileno(conf.cmd.f), EVFILT_READ, EV_ADD | EV_ENABLE | EV_CLEAR, 0, 0, NULL); if (kevent(conf.kq, &conf.ev, 1, NULL, 0, NULL) != 0) err(EX_OSERR, "kevent"); } if (conf.cmd.f == stdin) nonblock(0); if ((conf.buffer = malloc(BUFSIZE)) == NULL) err(EX_OSERR, "malloc"); #ifdef TAME tame(TAME_MALLOC | TAME_STDIO | TAME_RPATH, NULL); #else #ifdef __OpenBSD__ pledge("malloc stdio rpath", NULL); #endif #endif do c = play(&conf); while ((conf.flags & LFLAG) && c == CNULL); ex: if (conf.songs != NULL) { if (conf.songs->shuffle != NULL) free(conf.songs->shuffle); while (conf.songs->cur-- > 0) free(conf.songs->songs[conf.songs->cur]); free(conf.songs); } if (conf.buffer != NULL) free(conf.buffer); return EX_OK; }