Exemplo n.º 1
0
void LunaMessageHandler::slot_func(LLMessageSystem* msg)
{
	if(!LLLuaEngine::instanceExists())
		mMessageConnection.disconnect();
	if(mFuncRef == LUA_NOREF) return; //shouldnt happen ever.

	lua_State* L = LLLuaEngine::getInstance()->getLuaState();
	//get all fields and make them a lua table.
	
	//get function pointer
	lua_rawgeti(L, LUA_REGISTRYINDEX, mFuncRef);

	//create table for arg
	LLLuaTable main_table(L); //magic util function.

	LLMessageTemplate::message_block_map_t::iterator blocks_end = mMessageTemplate->mMemberBlocks.end();
	for (LLMessageTemplate::message_block_map_t::iterator blocks_iter = mMessageTemplate->mMemberBlocks.begin();
			blocks_iter != blocks_end; ++blocks_iter)
	{
		LLMessageBlock* block = (*blocks_iter);
		if(block->mType != MBT_NULL)
		{
			const char* block_name = block->mName;
			S32 num_blocks = msg->getNumberOfBlocks(block_name);
			if(num_blocks) //only if we have the blocks.
			{
				main_table.pushkeystring(L, block_name);
				LLLuaTable block_table(L);
				for(S32 block_num = 0; block_num < num_blocks; block_num++)
				{
					LLLuaTable block_variable_table(L);

					LLMessageBlock::message_variable_map_t::iterator var_end = block->mMemberVariables.end();
					for (LLMessageBlock::message_variable_map_t::iterator var_iter = block->mMemberVariables.begin();
							var_iter != var_end; ++var_iter)
					{
						variable_table_push(L, msg, block_name, block_num, block_variable_table, (*var_iter));
					}
					block_table.push(L);
				}
				main_table.push(L);
			} //end block num check
		} //NULL check.
	} // blocks_iter
	dump_stack(L);

	//call lua function
	if(lua_pcall(L, 1, 0, 0))
	{
		LUA_ERRORED("LunaMessageHandler");
	}
	//LL_INFOS(LunaMessageHandler::className) << "called message handler bootstrap" << LL_ENDL;
}
Exemplo n.º 2
0
ActivityDialog::ActivityDialog(ActivitiesWindow *parent, Activity *activity)
  : parent(parent), activity(activity)
{
  set_icon_from_file("images/act100x80.gif");
  if(activity)
  {
    Gtk::Dialog(_("Edit activity"), parent);
    set_title(_("Edit activity"));
    std::stringstream ss;
    ss << activity->get_id();
    number_entry.set_text(ss.str());
    name_entry.set_text(activity->get_name());
    
    Glib::RefPtr<Gtk::TextBuffer> text_buffer = desc_area.get_buffer();
    text_buffer->set_text(activity->get_description());
    start_date_entry.set_text(activity->get_start_date_str_eu());
    end_date_entry.set_text(activity->get_end_date_str_eu());
    check_button_finished.set_active(activity->is_finished());
  }
  else
  {
    Gtk::Dialog(_("Edit activity"), parent);
    set_title(_("New activity"));
  }
  set_transient_for(*parent);

  add_button(Gtk::Stock::CANCEL, 2);
  if(activity)
    add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_OK);
  else
    add_button(_("Create activity"), Gtk::RESPONSE_OK);

  Gtk::Box *cont_area = get_vbox();
  Gtk::Table main_table(10, 3);
  main_table.set_row_spacings(10);
  cont_area->pack_start(main_table);

  Gtk::Label main_label;
  if(activity)
    main_label.set_text(_("Edit properties for activity:"));
  else
    main_label.set_text(_("Enter properties for new activity:"));
  main_table.attach(main_label, 0, 3, 0, 1);

  Gtk::Label no_label(_("Activity number:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
  main_table.attach(no_label, 0, 3, 1, 2);
  main_table.attach(number_entry, 0, 3, 2, 3);

  Gtk::Label name_label(_("Activity name:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
  main_table.attach(name_label, 0, 3, 3, 4);
  main_table.attach(name_entry, 0, 3, 4, 5);

  Gtk::Label desc_label(_("Description:"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
  main_table.attach(desc_label, 0, 3, 5, 6);
  Gtk::ScrolledWindow desc_scroll;
  desc_scroll.add(desc_area);
  desc_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
  main_table.attach(desc_scroll, 0, 3, 6, 7);

  Gtk::Label start_date_label(_("Start date:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER);
  start_date_entry.set_max_length(10);
  start_date_entry.set_width_chars(14);
  Gtk::Button start_cal_button(_("Calendar"));
  start_cal_button.signal_clicked().connect(sigc::mem_fun(*this, &ActivityDialog::on_click_start_calendar));
  main_table.attach(start_date_label, 0, 1, 7, 8);
  main_table.attach(start_date_entry, 1, 2, 7, 8);
  main_table.attach(start_cal_button, 2, 3, 7, 8, Gtk::SHRINK, Gtk::SHRINK);

  Gtk::Label end_date_label(_("End date:"), Gtk::ALIGN_RIGHT, Gtk::ALIGN_CENTER);
  end_date_entry.set_max_length(10);
  end_date_entry.set_width_chars(14);
  Gtk::Button end_cal_button(_("Calendar"));
  end_cal_button.signal_clicked().connect(sigc::mem_fun(*this, &ActivityDialog::on_click_end_calendar));
  main_table.attach(end_date_label, 0, 1, 8, 9);
  main_table.attach(end_date_entry, 1, 2, 8, 9);
  main_table.attach(end_cal_button, 2, 3, 8, 9, Gtk::SHRINK, Gtk::SHRINK);

  check_button_finished.set_label(_("Activity finished"));
  main_table.attach(check_button_finished, 1, 3, 9, 10);

  show_all_children();
  while(true)
  {
    int result = run();
    if(result == Gtk::RESPONSE_OK)
    {
      Glib::ustring error_msg;
      if(name_entry.get_text().size() == 0)
	error_msg = _("Activity must have a name.\n");
      if(start_date_entry.get_text().size() == 0)
	error_msg += _("Activity must have a start date.\n");
      if(end_date_entry.get_text().size() == 0)
	error_msg += _("Activity must have an end date.");
      if(error_msg.size() > 0)
      {
	  Gtk::MessageDialog message(error_msg, false, Gtk::MESSAGE_ERROR);
	  message.set_icon_from_file("images/HaPr_high_80x100_ver2.gif");
	  message.run();
      }
      else
      {
	Activity newa;
	newa.set_number(number_entry.get_text());
	newa.set_name(name_entry.get_text());
	Glib::RefPtr<Gtk::TextBuffer> desc_buffer = desc_area.get_buffer();
	newa.set_description(desc_buffer->get_text());
	newa.set_start_date(start_date_entry.get_text());
	newa.set_end_date(end_date_entry.get_text());
	newa.set_finished(check_button_finished.get_active());

	if(activity)
	  newa.set_id(activity->get_id());

	parent->add_edit_activity(&newa);
	break;
      }
    }
    else
      break;
  }
}