itype_id vehicle_part::ammo_current() const { if( is_battery() ) { return "battery"; } if( is_tank() && !base.contents.empty() ) { return base.contents.front().typeId(); } if( is_fuel_store( false ) || is_turret() ) { return base.ammo_current(); } return "null"; }
void BatteryMonitor::scan_and_init(void) { if(con.connected()) return; E_RETURN_IF_FAIL(con.connect(EDBUS_SYSTEM)); /* get battery devices */ EdbusMessage msg, reply; msg.create_method_call(UPOWER_SERVICE, UPOWER_PATH, UPOWER_SERVICE, "EnumerateDevices"); E_RETURN_IF_FAIL(con.send_with_reply_and_block(msg, 1000, reply)); E_RETURN_IF_FAIL(reply.size() == 1); EdbusMessage::const_iterator it = reply.begin(); E_RETURN_IF_FAIL(it->is_array()); EdbusList arr = it->to_array(); it = arr.begin(); EdbusMessage::const_iterator ite = arr.end(); for(; it != ite; ++it) { if(!it->is_object_path()) continue; EdbusObjectPath p = it->to_object_path(); if(is_battery(con, p.path())) { /* filters so signal_cb() doesn't get clobbered with uninterested dbus signals */ con.add_signal_match(p.path(), UPOWER_INTERFACE, "Changed"); //con.add_signal_match(p.path(), UPOWER_SERVICE, "DeviceChanged"); batts.push_back(p); } } update_icon_and_tooltip(); /* ready to receive signals */ con.signal_callback(signal_cb, this); con.setup_listener_with_fltk(); }