Author: mir3x Date: Wed Jul 20 21:49:03 2016 New Revision: 33288 URL: http://svn.gna.org/viewcvs/freeciv?rev=33288&view=rev Log: Qt client - added quick airlift.
See patch #7472 Modified: trunk/client/gui-qt/mapctrl.cpp trunk/client/gui-qt/menu.cpp trunk/client/gui-qt/menu.h Modified: trunk/client/gui-qt/mapctrl.cpp URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/mapctrl.cpp?rev=33288&r1=33287&r2=33288&view=diff ============================================================================== --- trunk/client/gui-qt/mapctrl.cpp (original) +++ trunk/client/gui-qt/mapctrl.cpp Wed Jul 20 21:49:03 2016 @@ -310,6 +310,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: trunk/client/gui-qt/menu.cpp URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/menu.cpp?rev=33288&r1=33287&r2=33288&view=diff ============================================================================== --- trunk/client/gui-qt/menu.cpp (original) +++ trunk/client/gui-qt/menu.cpp Wed Jul 20 21:49:03 2016 @@ -57,6 +57,7 @@ #include "menu.h" extern QApplication *qapp; +static bool has_player_unit_type(Unit_type_id utype); /************************************************************************** New turn callback @@ -536,6 +537,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(); go_act_menu::update_all(); } else { @@ -1091,6 +1093,8 @@ QAction *act; QMenu *pr; delayed_order = false; + airlift_type_id = 0; + quick_airlifting = false; /* Game Menu */ menu = this->addMenu(_("Game")); @@ -1147,7 +1151,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())); @@ -1482,6 +1485,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")); @@ -1664,6 +1672,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; +} + /**************************************************************************** @@ -2431,6 +2469,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 ***************************************************************************/ @@ -2962,3 +3022,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: trunk/client/gui-qt/menu.h URL: http://svn.gna.org/viewcvs/freeciv/trunk/client/gui-qt/menu.h?rev=33288&r1=33287&r2=33288&view=diff ============================================================================== --- trunk/client/gui-qt/menu.h (original) +++ trunk/client/gui-qt/menu.h Wed Jul 20 21:49:03 2016 @@ -112,6 +112,8 @@ struct city *rally_city; }; +void multiairlift(struct city *acity, Unit_type_id ut); + /************************************************************************** Class representing one unit for delayed goto **************************************************************************/ @@ -299,8 +301,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; @@ -308,11 +312,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(); @@ -402,6 +409,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