Author: mir3x Date: Wed Jul 20 21:48:50 2016 New Revision: 33287 URL: http://svn.gna.org/viewcvs/freeciv?rev=33287&view=rev Log: Qt client - added quick airlift.
See patch #7472 Modified: branches/S2_6/client/gui-qt/mapctrl.cpp branches/S2_6/client/gui-qt/menu.cpp branches/S2_6/client/gui-qt/menu.h Modified: branches/S2_6/client/gui-qt/mapctrl.cpp URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/mapctrl.cpp?rev=33287&r1=33286&r2=33287&view=diff ============================================================================== --- branches/S2_6/client/gui-qt/mapctrl.cpp (original) +++ branches/S2_6/client/gui-qt/mapctrl.cpp Wed Jul 20 21:48:50 2016 @@ -308,6 +308,17 @@ if (event->button() == Qt::LeftButton && gui()->infotab->chat_maximized == true) { gui()->infotab->restore_chat(); + } + if (event->button() == Qt::LeftButton + && gui()->menu_bar->quick_airlifting == true) { + ptile = canvas_pos_to_tile(event->pos().x(), event->pos().y()); + if (tile_city(ptile)) { + multiairlift(tile_city(ptile), gui()->menu_bar->airlift_type_id); + } else { + output_window_append(ftc_client, "No city selected for airlift"); + } + gui()->menu_bar->quick_airlifting = false; + return; } if (event->button() == Qt::LeftButton && gui()->menu_bar->delayed_order == false) { Modified: branches/S2_6/client/gui-qt/menu.cpp URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/menu.cpp?rev=33287&r1=33286&r2=33287&view=diff ============================================================================== --- branches/S2_6/client/gui-qt/menu.cpp (original) +++ branches/S2_6/client/gui-qt/menu.cpp Wed Jul 20 21:48:50 2016 @@ -57,6 +57,7 @@ #include "menu.h" extern QApplication *qapp; +static bool has_player_unit_type(Unit_type_id utype); /************************************************************************** New turn callback @@ -533,6 +534,7 @@ if (C_S_RUNNING == client_state()) { gui()->menuBar()->setVisible(true); gui()->menu_bar->menus_sensitive(); + gui()->menu_bar->update_airlift_menu(); gov_menu::update_all(); } else { gui()->menuBar()->setVisible(false); @@ -916,6 +918,8 @@ QAction *act; QMenu *pr; delayed_order = false; + airlift_type_id = 0; + quick_airlifting = false; /* Game Menu */ menu = this->addMenu(_("Game")); @@ -972,7 +976,6 @@ SLOT(slot_minimap_view())); menu->addSeparator(); act = menu->addAction(_("City Outlines")); - act->setShortcut(QKeySequence(tr("Ctrl+y"))); act->setCheckable(true); act->setChecked(gui_options.draw_city_outlines); connect(act, SIGNAL(triggered()), this, SLOT(slot_city_outlines())); @@ -1299,6 +1302,11 @@ act = menu->addAction(_("Set/Unset rally point")); act->setShortcut(QKeySequence(tr("shift+s"))); connect(act, SIGNAL(triggered()), this, SLOT(slot_rally())); + act = menu->addAction(_("Quick Airlift")); + act->setShortcut(QKeySequence(tr("ctrl+y"))); + connect(act, SIGNAL(triggered()), this, SLOT(slot_quickairlift())); + airlift_type = new QActionGroup(this); + airlift_menu = menu->addMenu(_("Unit type for quickairlifting")); /* Civilization menu */ menu = this->addMenu(_("Civilization")); @@ -1481,6 +1489,36 @@ units_list.unit_list.at(units_list.unit_list.count() - i -1)->ptile = ptile; } } + +/**************************************************************************** + Updates airlift menu +****************************************************************************/ +void mr_menu::update_airlift_menu() +{ + Unit_type_id utype_id; + QAction *act; + + airlift_menu->clear(); + unit_type_iterate(utype) { + utype_id = utype_index(utype); + + if (!can_player_build_unit_now(client.conn.playing, utype) + || utype_move_type(utype) != UMT_LAND + || utype_has_flag(utype, UTYF_NOBUILD)) { + continue; + } + if (!can_player_build_unit_now(client.conn.playing, utype) + && !has_player_unit_type(utype_id)) { + continue; + } + act = airlift_menu->addAction(utype_name_translation(utype)); + act->setCheckable(true); + act->setData(utype_id); + connect(act, SIGNAL(triggered()), this, SLOT(slot_quickairlift_set())); + airlift_type->addAction(act); + } unit_type_iterate_end; +} + /**************************************************************************** @@ -2235,6 +2273,28 @@ } +/************************************************************************** + Slot for setting quick airlift +**************************************************************************/ +void mr_menu::slot_quickairlift_set() +{ + QVariant v; + QAction *act; + + act = qobject_cast<QAction *>(sender()); + v = act->data(); + airlift_type_id = v.toInt(); +} + +/************************************************************************** + Slot for quick airlifting +**************************************************************************/ +void mr_menu::slot_quickairlift() +{ + quick_airlifting = true; +} + + /*************************************************************************** Delayed goto ***************************************************************************/ @@ -2766,3 +2826,37 @@ disconnect_from_server(); } } + +/*************************************************************************** + Returns true if player has any unit of unit_type +***************************************************************************/ +bool has_player_unit_type(Unit_type_id utype) +{ + unit_list_iterate(client.conn.playing->units, punit) { + if (utype_number(punit->utype) == utype) { + return true; + } + } unit_list_iterate_end; + + return false; +} + + +/*************************************************************************** + Airlift unit type to city acity from each city +***************************************************************************/ +void multiairlift(struct city *acity, Unit_type_id ut) +{ + struct tile *ptile; + city_list_iterate(client.conn.playing->cities, pcity) { + if (get_city_bonus(pcity, EFT_AIRLIFT) > 0) { + ptile = city_tile(pcity); + unit_list_iterate(ptile->units, punit) { + if (punit->utype == utype_by_number(ut)) { + request_unit_airlift(punit, acity); + break; + } + } unit_list_iterate_end; + } + } city_list_iterate_end; +} Modified: branches/S2_6/client/gui-qt/menu.h URL: http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/gui-qt/menu.h?rev=33287&r1=33286&r2=33287&view=diff ============================================================================== --- branches/S2_6/client/gui-qt/menu.h (original) +++ branches/S2_6/client/gui-qt/menu.h Wed Jul 20 21:48:50 2016 @@ -111,6 +111,8 @@ struct city *rally_city; }; +void multiairlift(struct city *acity, Unit_type_id ut); + /************************************************************************** Class representing one unit for delayed goto **************************************************************************/ @@ -272,8 +274,10 @@ Q_OBJECT QMenu *menu; QMenu *filter_menu; + QMenu *airlift_menu; QActionGroup *filter_act; - QActionGroup *filter_any;; + QActionGroup *filter_any; + QActionGroup *airlift_type; QHash<munit, QAction*> menu_list; unit_filter u_filter; qfc_units_list units_list; @@ -281,11 +285,14 @@ mr_menu(); void setup_menus(); void menus_sensitive(); + void update_airlift_menu(); void set_tile_for_order(struct tile *ptile); QAction *minimap_status; QAction *chat_status; QAction *messages_status; bool delayed_order; + bool quick_airlifting; + Unit_type_id airlift_type_id; private slots: /* game menu */ void local_options(); @@ -374,6 +381,8 @@ void slot_calculate(); void slot_clear_trade(); void slot_rally(); + void slot_quickairlift_set(); + void slot_quickairlift(); /*used by civilization menu */ void slot_show_map(); _______________________________________________ Freeciv-commits mailing list Freeciv-commits@gna.org https://mail.gna.org/listinfo/freeciv-commits