예제 #1
0
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."));
	}
}
예제 #2
0
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."));
}
예제 #3
0
파일: main.c 프로젝트: kdhp/play
/*
 * 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;
}