Example #1
0
void cMenu::handleButton( pClient ps, cClientPacket* pkg  )
{
	
	cPacketMenuSelection* p = (cPacketMenuSelection*)pkg;

	pChar pc = ps->currChar();
	if ( ! pc ) return;

	uint32_t button = p->buttonId.get();

	this->switchs = &p->switchs;
	this->textResp = &p->text_entries;
	
	uint32_t buttonReturnCode;
	if( button!=MENU_CLOSE ) { 

		buttonReturnCode = getButton( button );

		map< uint32_t, FUNCIDX >::iterator iter( buttonCallbacks.find( button ) );
		if( iter!=buttonCallbacks.end() ) {

			AmxFunction func( iter->second );
			func.Call( serial, pc->getSerial(), buttonReturnCode );
			return;

		}
	}
	else {
		buttonReturnCode = 0;
	}

	//set property if there are

	if( ( buttonReturnCode!=MENU_CLOSE ) && ( buttonReturnCode==buffer[3] ) ) { 
		map< uint32_t, int32_t >::iterator propIter( editProps.begin() ), lastProp( editProps.end() );
		for( ; propIter!=lastProp; ++propIter ) {

			int32_t props = propIter->first;
			int prop, prop2, prop3;
			getPropsFromInt( props, prop, prop2, prop3 );  

			if( getPropertyType( prop )!=T_BOOL ) {
				unistring* data = getText( propIter->second, true );
				if( data!=NULL )
					setPropertyField( buffer[0], buffer[1], prop, prop2, prop3, *data );
			}
			else {
				setPropertyField( buffer[0], buffer[1], prop, prop2, prop3, getCheckBox( propIter->second, true ) );
			}
		}
	}
	
	if( callback!=NULL )
		callback->Call( serial, pc->getSerial(), buttonReturnCode );
	else
		hard( this, ps, buttonReturnCode );
}
	template<int prp = -1> bool write(std::string file, std::string g_name = "grids" , file_type ft = file_type::ASCII)
	{
		// Header for the vtk
		std::string vtk_header;
		// Point list of the VTK
		std::string point_list;
		// Vertex list of the VTK
		std::string vertex_list;
		// Graph header
		std::string vtk_binary_or_ascii;
		// vertex properties header
		std::string point_prop_header;
		// edge properties header
		std::string vertex_prop_header;
		// Data point header
		std::string point_data_header;
		// Data point
		std::string point_data;

		// VTK header
		vtk_header = "# vtk DataFile Version 3.0\n"
				     + g_name + "\n";

		// Choose if binary or ASCII
		if (ft == file_type::ASCII)
		{vtk_header += "ASCII\n";}
		else
		{vtk_header += "BINARY\n";}

		// Data type for graph is DATASET POLYDATA
		vtk_header += "DATASET POLYDATA\n";

		// point properties header
		point_prop_header = get_point_properties_list();

		// Get point list
		point_list = get_point_list();

		// vertex properties header
		vertex_prop_header = get_vertex_properties_list();

		// Get vertex list
		vertex_list = get_vertex_list();

		// Get the point data header
		point_data_header = get_point_data_header();

		// Get the maximum number of fused grids
		size_t mf = getMaxFused();

		// For each property in the vertex type produce a point data
		for (size_t i = 0 ; i < mf ; i++)
			point_data += get_properties_output(i,g_name);

		lastProp();


		// write the file
		std::ofstream ofs(file);

		// Check if the file is open
		if (ofs.is_open() == false)
		{std::cerr << "Error cannot create the VTK file: " + file + "\n";}

		ofs << vtk_header << point_prop_header << point_list <<
				vertex_prop_header << vertex_list << point_data_header << point_data;

		// Close the file

		ofs.close();

		// Completed succefully
		return true;
	}