From: <geo...@us...> - 2009-03-15 19:26:48
|
Revision: 2920 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2920&view=rev Author: geoffthemedio Date: 2009-03-15 19:26:29 +0000 (Sun, 15 Mar 2009) Log Message: ----------- Moved around some FleetButton-related code to prepare for adding selection indication Modified Paths: -------------- trunk/FreeOrion/UI/FleetButton.cpp trunk/FreeOrion/UI/FleetButton.h trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/FleetButton.cpp =================================================================== --- trunk/FreeOrion/UI/FleetButton.cpp 2009-03-15 03:34:21 UTC (rev 2919) +++ trunk/FreeOrion/UI/FleetButton.cpp 2009-03-15 19:26:29 UTC (rev 2920) @@ -18,9 +18,6 @@ namespace { - void PlayFleetButtonOpenSound() {Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.fleet-button-click"), true);} - void PlayFleetButtonRolloverSound() {Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.fleet-button-rollover"), true);} - /* returns number of fleet icon size texture to use to represent fleet(s) with the passed number of ships */ int FleetSizeIconNumber(int number_ships) { // one ship (or zero?) has no marker. more marker levels are used for each doubling in the number of ships @@ -127,7 +124,9 @@ m_fleets(), m_head_icon(), m_size_icon(), - m_vertex_components() + m_selection_texture(), + m_vertex_components(), + m_selected(false) { Init(fleet_IDs, size_type); } @@ -137,7 +136,9 @@ m_fleets(), m_head_icon(), m_size_icon(), - m_vertex_components() + m_selection_texture(), + m_vertex_components(), + m_selected(false) { std::vector<int> fleet_IDs; fleet_IDs.push_back(fleet_id); @@ -260,6 +261,9 @@ // size icon according to texture size (average two dimensions) double diameter = (Value(texture_width) + Value(texture_height))/2.0; Resize(GG::Pt(GG::X(diameter), GG::Y(diameter))); + + // get selection indicator texture + m_selection_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "icons" / "fleet" / "fleet_selection.png", true); } bool FleetButton::InWindow(const GG::Pt& pt) const { @@ -289,12 +293,10 @@ } } -void FleetButton::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) + +void FleetButton::SetSelected(bool selected) { - MapWnd* map_wnd = ClientUI::GetClientUI()->GetMapWnd(); - if (!Disabled() && (!map_wnd || !map_wnd->InProductionViewMode())) - PlayFleetButtonOpenSound(); - GG::Button::LClick(pt, mod_keys); + m_selected = selected; } void FleetButton::RenderUnpressed() { @@ -323,6 +325,12 @@ RenderTexturedQuad(vertsXY, m_head_icon); RenderTexturedQuad(vertsXY, m_size_icon); + + if (m_selected && m_selection_texture) { + GG::Pt selector_ul = GG::Pt(ul.x - Width()/2, ul.y - Height()/2); + GG::Pt selector_lr = GG::Pt(lr.x + Width()/2, lr.y + Height()/2); + m_selection_texture->OrthoBlit(selector_ul, selector_lr); + } } void FleetButton::RenderPressed() { @@ -345,6 +353,16 @@ RenderUnpressed(); // TODO: do something else } +void FleetButton::PlayFleetButtonRolloverSound() { + Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.fleet-button-rollover"), true); +} + +void FleetButton::PlayFleetButtonOpenSound() { + Sound::GetSound().PlaySound(ClientUI::SoundDir() / GetOptionsDB().Get<std::string>("UI.sound.fleet-button-click"), true); +} + + + ///////////////////// // Free Functions ///////////////////// Modified: trunk/FreeOrion/UI/FleetButton.h =================================================================== --- trunk/FreeOrion/UI/FleetButton.h 2009-03-15 03:34:21 UTC (rev 2919) +++ trunk/FreeOrion/UI/FleetButton.h 2009-03-15 19:26:29 UTC (rev 2920) @@ -26,16 +26,21 @@ //@} /** \name Accessors */ //@{ - virtual bool InWindow(const GG::Pt& pt) const; ///< returns true if \a pt is within or over the button + virtual bool InWindow(const GG::Pt& pt) const; ///< returns true if \a pt is within or over the button - const std::vector<Fleet*>& Fleets() const {return m_fleets;} ///< returns the fleets represented by this control + const std::vector<Fleet*>& Fleets() const {return m_fleets;} ///< returns the fleets represented by this control + + bool Selected() const {return m_selected;} ///< returns whether this button has been marked selected //@} /** \name Mutators */ //@{ virtual void MouseHere(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); - virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); + void SetSelected(bool selected = true); ///< sets selection status of button. if selected = true, marks button as selected. otherwise marks button as not selected //@} + static void PlayFleetButtonOpenSound(); + static void PlayFleetButtonRolloverSound(); + protected: /** \name Mutators */ //@{ virtual void RenderUnpressed(); @@ -49,7 +54,9 @@ std::vector<Fleet*> m_fleets; ///< the fleets represented by this button boost::shared_ptr<GG::Texture> m_head_icon; ///< icon texture representing type of fleet boost::shared_ptr<GG::Texture> m_size_icon; ///< icon texture representing number of ships in fleet + boost::shared_ptr<GG::Texture> m_selection_texture; ///< texture shown to indicate button is selected std::vector<double> m_vertex_components; ///< x and y componentes of vertices to use to render this fleet button, relative to centre of the button + bool m_selected; ///< should this button render itself specially to show that it is selected? }; /* returns head icon for passed fleet at passed icon size */ Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-15 03:34:21 UTC (rev 2919) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-15 19:26:29 UTC (rev 2920) @@ -2337,6 +2337,9 @@ { if (m_in_production_view_mode) return; + FleetButton::PlayFleetButtonOpenSound(); + + const std::vector<Fleet*>& btn_fleets = fleet_btn.Fleets(); if (btn_fleets.empty()) throw std::runtime_error("caught clicked signal for empty fleet button"); |
From: <geo...@us...> - 2009-03-25 14:42:39
|
Revision: 2938 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2938&view=rev Author: geoffthemedio Date: 2009-03-25 14:42:28 +0000 (Wed, 25 Mar 2009) Log Message: ----------- -Rearranged FleetWnd creation and fleet selection code in MapWnd in preparation for future indication of selected fleets' button(s) on map -Added some signals and functions to handle them for when the selected fleets in the active FleetWnd are changed -Added more and hooked up existing tracking of the active FleetWnd -Created bug where clicking the stationary fleet button for a system while the selected fleet is departing doesn't cycle through stationary fleets like it used to Modified Paths: -------------- trunk/FreeOrion/UI/FleetButton.cpp trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/FleetButton.cpp =================================================================== --- trunk/FreeOrion/UI/FleetButton.cpp 2009-03-25 06:58:31 UTC (rev 2937) +++ trunk/FreeOrion/UI/FleetButton.cpp 2009-03-25 14:42:28 UTC (rev 2938) @@ -293,10 +293,10 @@ } } - void FleetButton::SetSelected(bool selected) { m_selected = selected; + std::cout << "FleetButton " << this << " selected: " << m_selected << std::endl; } void FleetButton::RenderUnpressed() { @@ -326,6 +326,7 @@ RenderTexturedQuad(vertsXY, m_head_icon); RenderTexturedQuad(vertsXY, m_size_icon); + std::cout << "FleetButton " << this << " Render selected: " << m_selected << " texture: " << m_selection_texture << std::endl; if (m_selected && m_selection_texture) { GG::Pt selector_ul = GG::Pt(ul.x - Width()/2, ul.y - Height()/2); GG::Pt selector_lr = GG::Pt(lr.x + Width()/2, lr.y + Height()/2); Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-25 06:58:31 UTC (rev 2937) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-25 14:42:28 UTC (rev 2938) @@ -105,7 +105,8 @@ CloseAll(); FleetWnd* retval = new FleetWnd(fleets, selected_fleet, read_only, flags); m_fleet_wnds.insert(retval); - GG::Connect(retval->ClosingSignal, &FleetUIManager::FleetWndClosing, this); + GG::Connect(retval->ClosingSignal, &FleetUIManager::FleetWndClosing, this); + GG::Connect(retval->ClickedSignal, &FleetUIManager::FleetWndClicked, this); GG::GUI::GetGUI()->Register(retval); return retval; } @@ -143,24 +144,38 @@ for (std::set<FleetDetailWnd*>::iterator it2 = m_fleet_and_detail_wnds[*temp_it].begin(); it2 != m_fleet_and_detail_wnds[*temp_it].end(); ) { std::set<FleetDetailWnd*>::iterator temp_it2 = it2++; Fleet* fleet = 0; - if (!(fleet = (*temp_it2)->GetFleet()) || !fleet->NumShips()) { + if (!(fleet = (*temp_it2)->GetFleet()) || !fleet->NumShips()) delete *temp_it2; - } } } } } void FleetUIManager::SetActiveFleetWnd(FleetWnd* fleet_wnd) -{ m_active_fleet_wnd = fleet_wnd; } +{ + if (fleet_wnd != m_active_fleet_wnd) { + // disconnect old active FleetWnd signal + if (m_active_fleet_wnd) + m_ative_fleet_wnd_signal.disconnect(); + // set new active FleetWnd + m_active_fleet_wnd = fleet_wnd; + + // connect new active FleetWnd selection changed signal + m_ative_fleet_wnd_signal = GG::Connect(m_active_fleet_wnd->SelectedFleetsChangedSignal, ActiveFleetWndSelectedFleetsChangedSignal); + + ActiveFleetWndChangedSignal(); + } +} + bool FleetUIManager::CloseAll() { bool retval = !m_fleet_wnds.empty(); std::vector<FleetWnd*> vec(m_fleet_wnds.begin(), m_fleet_wnds.end()); - for (std::size_t i = 0; i < vec.size(); ++i) { + + for (std::size_t i = 0; i < vec.size(); ++i) delete vec[i]; - } + m_active_fleet_wnd = 0; return retval; } @@ -186,7 +201,14 @@ void FleetUIManager::FleetDetailWndClosing(FleetWnd* fleet_wnd, FleetDetailWnd* fleet_detail_wnd) { m_fleet_and_detail_wnds[fleet_wnd].erase(fleet_detail_wnd); } +void FleetUIManager::FleetWndClicked(FleetWnd* fleet_wnd) +{ + if (fleet_wnd == m_active_fleet_wnd) + return; + SetActiveFleetWnd(fleet_wnd); +} + /** Represents a single fleet. This class is used as the drop-target in FleetWnd (if the ctor parameter \a fleet is zero), and also as the sole Control in each FleetRow (if the ctor parameter \a fleet is nonzero). */ @@ -1239,6 +1261,12 @@ delete this; } +void FleetWnd::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) +{ + MapWndPopup::LClick(pt, mod_keys); + ClickedSignal(this); +} + void FleetWnd::Init(const std::vector<Fleet*>& fleets, int selected_fleet) { if (m_read_only) { @@ -1264,12 +1292,12 @@ } GetLayout()->SetBorderMargin(7); - GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this); - GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this); - GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this); - GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this); + GG::Connect(m_fleets_lb->SelChangedSignal, &FleetWnd::FleetSelectionChanged, this); + GG::Connect(m_fleets_lb->RightClickedSignal, &FleetWnd::FleetRightClicked, this); + GG::Connect(m_fleets_lb->DoubleClickedSignal, &FleetWnd::FleetDoubleClicked, this); + GG::Connect(m_fleets_lb->ErasedSignal, &FleetWnd::FleetDeleted, this); if (!m_read_only) - GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this); + GG::Connect(m_new_fleet_drop_target->NewFleetFromShipsSignal, &FleetWnd::CreateNewFleetFromDrops, this); SetName(TitleText()); @@ -1351,6 +1379,8 @@ FleetDataPanel* fleet_panel = boost::polymorphic_downcast<FleetDataPanel*>((**it)[0]); fleet_panel->Select(rows.find(it) != rows.end()); } + + SelectedFleetsChangedSignal(); } void FleetWnd::FleetRightClicked(GG::ListBox::iterator it, const GG::Pt& pt) Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2009-03-25 06:58:31 UTC (rev 2937) +++ trunk/FreeOrion/UI/FleetWnd.h 2009-03-25 14:42:28 UTC (rev 2938) @@ -54,6 +54,9 @@ bool CloseAll(); //@} + mutable boost::signal<void ()> ActiveFleetWndChangedSignal; //!< emitted when the selected FleetWnd changes + mutable boost::signal<void ()> ActiveFleetWndSelectedFleetsChangedSignal; //!< emitted when the selected fleets in the active FleetWnd change + static FleetUIManager& GetFleetUIManager(); private: @@ -62,11 +65,15 @@ void FleetWndClosing(FleetWnd* fleet_wnd); void FleetDetailWndClosing(FleetWnd* fleet_wnd, FleetDetailWnd* fleet_detail_wnd); + void FleetWndClicked(FleetWnd* fleet_wnd); //!< sets active FleetWnd + + typedef std::map<FleetWnd*, std::set<FleetDetailWnd*> > FleetWndMap; - std::set<FleetWnd*> m_fleet_wnds; - FleetWndMap m_fleet_and_detail_wnds; - FleetWnd* m_active_fleet_wnd; + std::set<FleetWnd*> m_fleet_wnds; + FleetWndMap m_fleet_and_detail_wnds; + FleetWnd* m_active_fleet_wnd; + boost::signals::connection m_ative_fleet_wnd_signal; }; /** This is the top level Fleet UI element. It shows a list of fleets, a @@ -80,54 +87,58 @@ //@} //! \name Accessors //@{ - int SystemID() const; - bool ContainsFleet(int fleet_id) const; - std::set<Fleet*> Fleets() const; - std::set<Fleet*> SelectedFleets() const; + int SystemID() const; + bool ContainsFleet(int fleet_id) const; + std::set<Fleet*> Fleets() const; + std::set<Fleet*> SelectedFleets() const; //@} //! \name Mutators //@{ - void AddFleet(Fleet* fleet); ///< adds a new fleet to a currently-open FletWnd - void SelectFleet(Fleet* fleet); ///< selects the indicated fleet, bringing it into the fleet detail window + void AddFleet(Fleet* fleet); ///< adds a new fleet to a currently-open FletWnd + void SelectFleet(Fleet* fleet); ///< selects the indicated fleet, bringing it into the fleet detail window //@} - static GG::Pt LastPosition(); ///< returns the last position of the last FleetWnd that was closed + static GG::Pt LastPosition(); ///< returns the last position of the last FleetWnd that was closed + mutable boost::signal<void ()> SelectedFleetsChangedSignal; + mutable boost::signal<void (FleetWnd*)> ClickedSignal; + protected: //! \name Mutators //@{ - virtual void CloseClicked(); + virtual void CloseClicked(); + virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); //@} private: /** Basic ctor. */ FleetWnd(std::vector<Fleet*> fleets, int selected_fleet, bool read_only, GG::Flags<GG::WndFlag> flags = GG::CLICKABLE | GG::DRAGABLE | GG::ONTOP | CLOSABLE); - void Init(const std::vector<Fleet*>& fleets, int selected_fleet); - void FleetSelectionChanged(const GG::ListBox::SelectionSet& rows); - void FleetRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); - void FleetDoubleClicked(GG::ListBox::iterator it); - void FleetDeleted(GG::ListBox::iterator it); - Fleet* FleetInRow(GG::ListBox::iterator it) const; - std::string TitleText() const; - void CreateNewFleetFromDrops(Ship* first_ship, const std::vector<int>& ship_ids); - void UniverseObjectDeleted(const UniverseObject *obj); - void SystemChangedSlot(); + void Init(const std::vector<Fleet*>& fleets, int selected_fleet); + void FleetSelectionChanged(const GG::ListBox::SelectionSet& rows); + void FleetRightClicked(GG::ListBox::iterator it, const GG::Pt& pt); + void FleetDoubleClicked(GG::ListBox::iterator it); + void FleetDeleted(GG::ListBox::iterator it); + Fleet* FleetInRow(GG::ListBox::iterator it) const; + std::string TitleText() const; + void CreateNewFleetFromDrops(Ship* first_ship, const std::vector<int>& ship_ids); + void UniverseObjectDeleted(const UniverseObject *obj); + void SystemChangedSlot(); mutable boost::signal<void (FleetWnd*)> ClosingSignal; - const int m_empire_id; - int m_system_id; - const bool m_read_only; - bool m_moving_fleets; - GG::ListBox::iterator m_current_fleet; + const int m_empire_id; + int m_system_id; + const bool m_read_only; + bool m_moving_fleets; + GG::ListBox::iterator m_current_fleet; - std::set<boost::signals::connection> m_misc_connections; + std::set<boost::signals::connection> m_misc_connections; - FleetsListBox* m_fleets_lb; - FleetDataPanel* m_new_fleet_drop_target; - FleetDetailPanel* m_fleet_detail_panel; + FleetsListBox* m_fleets_lb; + FleetDataPanel* m_new_fleet_drop_target; + FleetDetailPanel* m_fleet_detail_panel; - static GG::Pt s_last_position; ///< the latest position to which any FleetWnd has been moved. This is used to keep the place of the fleet window in single-fleetwindow mode. + static GG::Pt s_last_position; ///< the latest position to which any FleetWnd has been moved. This is used to keep the place of the fleet window in single-fleetwindow mode. friend class FleetUIManager; }; Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-25 06:58:31 UTC (rev 2937) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-25 14:42:28 UTC (rev 2938) @@ -385,7 +385,7 @@ m_backgrounds(), m_bg_scroll_rate(), m_selected_system(UniverseObject::INVALID_OBJECT_ID), - m_selected_fleet(UniverseObject::INVALID_OBJECT_ID), + m_selected_fleets(), m_zoom_steps_in(0.0), m_side_panel(NULL), m_system_icons(), @@ -573,7 +573,9 @@ GG::Wnd::SetDefaultBrowseInfoWnd(browser_wnd); #endif - Connect(ClientApp::GetApp()->EmpireEliminatedSignal, &MapWnd::HandleEmpireElimination, this); + Connect(ClientApp::GetApp()->EmpireEliminatedSignal, &MapWnd::HandleEmpireElimination, this); + Connect(FleetUIManager::GetFleetUIManager().ActiveFleetWndChangedSignal, &MapWnd::SelectedFleetsChanged, this); + Connect(FleetUIManager::GetFleetUIManager().ActiveFleetWndSelectedFleetsChangedSignal, &MapWnd::SelectedFleetsChanged, this); } MapWnd::~MapWnd() @@ -1516,7 +1518,10 @@ void MapWnd::ReselectLastFleet() { - SelectFleet(m_selected_fleet); + if (m_selected_fleets.empty()) + SelectFleet(NULL); + else + SelectFleet(*(m_selected_fleets.begin())); } void MapWnd::SelectFleet(int fleet_id) @@ -1526,38 +1531,78 @@ void MapWnd::SelectFleet(Fleet* fleet) { - // abort early if don't need to do anything (the passed fleet is already selected) - if ((!fleet && m_selected_fleet == UniverseObject::INVALID_OBJECT_ID) || - (fleet && fleet->ID() == m_selected_fleet)) - { + if (!fleet) return; - } + if (m_selected_fleets.find(fleet) != m_selected_fleets.end()) + return; + // find if there is a FleetWnd for this fleet already open. + FleetWnd* fleet_wnd = FleetUIManager::GetFleetUIManager().WndForFleet(fleet); - // remove selection indicator from previously selected fleet - if (const Fleet* old_selected_fleet = GetUniverse().Object<Fleet>(m_selected_fleet)) { - std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(old_selected_fleet); - if (it != m_fleet_buttons.end()) { - FleetButton* button = it->second; - button->SetSelected(false); + // if there isn't a FleetWnd for this fleen open, need to open one + if (!fleet_wnd) { + // to open a new FleetWnd, need to know what fleets to put in the Wnd. Search + // for a FleetButton for this fleet + std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(fleet); + + // sanity check + if (it == m_fleet_buttons.end()) { + Logger().errorStream() << "Couldn't find a FleetButton for fleet in MapWnd::SelectFleet"; + return; } - } - m_selected_fleet = NULL; - // put indicator on fleet button for selected fleet - System* new_system = fleet->GetSystem(); // may be NULL + // determine whether this fleet's FleetWnd can be manipulated by this player: can't manipulate + // other empires' FleetWnds, and can't give orders to own fleets while they're en-route. + const System* system = fleet->GetSystem(); + const std::set<int>& owners = fleet->Owners(); + bool read_only = false; + if (owners.empty() || owners.find(HumanClientApp::GetApp()->EmpireID()) == owners.end() || !system) + read_only = true; - // get button for fleet to be selected - std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); - if (button_it != m_fleet_buttons.end()) { - FleetButton* button = button_it->second; - button->SetSelected(true); + // get FleetButton for fleet to be selected, and the fleets it represents + const FleetButton* button = it->second; + const std::vector<Fleet*>& btn_fleets = button->Fleets(); + if (btn_fleets.empty()) { + Logger().errorStream() << "FleetButton contained no fleets! in MapWnd::SelectFleet"; + return; + } + + + // create new FleetWnd + fleet_wnd = FleetUIManager::GetFleetUIManager().NewFleetWnd(btn_fleets, 0, read_only); + + // opening a new FleetWnd, so play sound + FleetButton::PlayFleetButtonOpenSound(); + + + // position new FleetWnd. default to last user-set position... + GG::Pt wnd_position = FleetWnd::LastPosition(); + // unless the user hasn't opened and closed a FleetWnd yet, in which case use the lower-left + if (wnd_position == GG::Pt()) + wnd_position = GG::Pt(GG::X(5), GG::GUI::GetGUI()->AppHeight() - fleet_wnd->Height() - 5); + + fleet_wnd->MoveTo(wnd_position); + + + // safety check to ensure window is on screen... may be redundant + if (GG::GUI::GetGUI()->AppWidth() - 5 < fleet_wnd->LowerRight().x) + fleet_wnd->OffsetMove(GG::Pt(GG::GUI::GetGUI()->AppWidth() - 5 - fleet_wnd->LowerRight().x, GG::Y0)); + if (GG::GUI::GetGUI()->AppHeight() - 5 < fleet_wnd->LowerRight().y) + fleet_wnd->OffsetMove(GG::Pt(GG::X0, GG::GUI::GetGUI()->AppHeight() - 5 - fleet_wnd->LowerRight().y)); } - m_selected_fleet = fleet->ID(); // bookkeeping + // make sure selected fleet's FleetWnd is active + FleetUIManager::GetFleetUIManager().SetActiveFleetWnd(fleet_wnd); + + + // Select fleet in FleetWnd + fleet_wnd->SelectFleet(fleet); + + + std::cout << "MapWnd::SelectFleet " << fleet->ID() << std::endl; } void MapWnd::SetFleetMovementLine(const FleetButton* fleet_button) @@ -2545,157 +2590,140 @@ void MapWnd::FleetButtonClicked(FleetButton& fleet_btn) { + std::cout << "MapWnd::FleetButtonClicked" << std::endl; + + // ignore clicks when in production mode if (m_in_production_view_mode) return; - FleetButton::PlayFleetButtonOpenSound(); - - // get fleets represented by button + // get possible fleets to select from, and a pointer to one of those fleets const std::vector<Fleet*>& btn_fleets = fleet_btn.Fleets(); - if (btn_fleets.empty()) - throw std::runtime_error("caught clicked signal for empty fleet button"); + if (btn_fleets.empty()) { + Logger().errorStream() << "Clicked FleetButton contained no fleets!"; + return; + } + Fleet* first_fleet = btn_fleets[0]; - // get representative fleet and info about it - Fleet* fleet = btn_fleets[0]; - System* system = fleet->GetSystem(); - int owner = *(fleet->Owners().begin()); + //// determine if the clicked FleetButton was for departing fleets, statinary fleets, or moving fleets. + //// determine this by looking at the representative fleet from the button. if that fleet is departing, + //// then the button is a departing FleetButton, and similalry for stationary or moving fleets + //// get fleets represented by button + //bool fleet_departing = false, fleet_moving = false, fleet_stationary = false; - bool fleet_departing = false; - if (fleet->FinalDestinationID() != UniverseObject::INVALID_OBJECT_ID && - fleet->FinalDestinationID() != fleet->SystemID() && - fleet->SystemID() != UniverseObject::INVALID_OBJECT_ID) - { - fleet_departing = true; + //if (fleet->SystemID() == UniverseObject::INVALID_OBJECT_ID) { // fleet is not in a system + // fleet_moving = true; + //} else if ( // fleet is in a system + // fleet->FinalDestinationID() != UniverseObject::INVALID_OBJECT_ID && // and has a destination + // fleet->FinalDestinationID() != fleet->SystemID() // destination is not system where fleet is + // ) { + // fleet_departing = true; + //} else { // otherwise... + // fleet_stationary = true; + //} + + + // find if a FleetWnd for this FleetButton's fleet(s) is already open, and if so, if there + // is a single selected fleet in the window, and if so, what fleet that is + FleetWnd* wnd_for_button = FleetUIManager::GetFleetUIManager().WndForFleet(first_fleet); + Fleet* already_selected_fleet = NULL; + if (wnd_for_button) { + // there is already FleetWnd for this button open. + + // check which fleet(s) is/are selected in the button's FleetWnd + std::set<Fleet*> selected_fleets = wnd_for_button->SelectedFleets(); + + // record selected fleet if just one fleet is selected. otherwise, keep default NULL + // to indicate that no one fleet is selected + if (selected_fleets.size() == 1) + already_selected_fleet = *(selected_fleets.begin()); } - // find if a FleetWnd for this FleetButton's fleet(s) is already open - FleetWnd* wnd_for_button = FleetUIManager::GetFleetUIManager().WndForFleet(fleet); + // pick fleet to select from fleets represented by the clicked FleetButton. + Fleet* fleet_to_select = NULL; - if (!wnd_for_button) { - // get all fleets at this location. may be in a system, in which case fleets are separated into - // departing or stationary; or may be away from any system, moving - std::vector<Fleet*> fleets; - if (system) { - const System::ObjectVec owned_fleets = system->FindObjects(OwnedVisitor<Fleet>(owner)); - for (System::ObjectVec::const_iterator it = owned_fleets.begin(); it != owned_fleets.end(); ++it) { - Fleet* owned_fleet = universe_object_cast<Fleet*>(*it); - if (owned_fleet) - fleets.push_back(owned_fleet); - } - } else { - std::copy(btn_fleets.begin(), btn_fleets.end(), std::back_inserter(fleets)); - } + //if (fleet_moving) { + // all fleets in button are valid selection targets. - // determine whether this FleetWnd can't be manipulated by the users: can't manipulate other - // empires FleetWnds, and can't give orders to your fleets while they're en-route. - bool read_only = false; - if (owner != HumanClientApp::GetApp()->EmpireID() || !system) - read_only = true; - wnd_for_button = FleetUIManager::GetFleetUIManager().NewFleetWnd(fleets, 0, read_only); + if (!already_selected_fleet || btn_fleets.size() == 1) { + // no (single) fleet is already selected, or there is only one selectable fleet, + // so select first fleet in button + fleet_to_select = (*btn_fleets.begin()); - // position new FleetWnd. default to last user-set position... - GG::Pt wnd_position = FleetWnd::LastPosition(); - // unless the user hasn't opened and closed a FleetWnd yet, in which case use the lower-right - if (wnd_position == GG::Pt()) - wnd_position = GG::Pt(GG::X(5), GG::GUI::GetGUI()->AppHeight() - wnd_for_button->Height() - 5); + } else { + // select next fleet after already-selected fleet, or first fleet if already-selected + // fleet is the last fleet in the button. - wnd_for_button->MoveTo(wnd_position); + // to do this, scan through button's fleets to find already_selected_fleet + for (std::vector<Fleet*>::const_iterator it = btn_fleets.begin(); it != btn_fleets.end(); ++it) { + if (*it == already_selected_fleet) { + // found already selected fleet. get NEXT fleet + ++it; + // if next fleet iterator is past end of fleets, loop around to first fleet + if (it == btn_fleets.end()) + it = btn_fleets.begin(); + // get fleet to select out of iterator + fleet_to_select = *it; + break; + } + } + } - // safety check to ensure window is on screen... may be redundant - if (GG::GUI::GetGUI()->AppWidth() - 5 < wnd_for_button->LowerRight().x) - wnd_for_button->OffsetMove(GG::Pt(GG::GUI::GetGUI()->AppWidth() - 5 - wnd_for_button->LowerRight().x, GG::Y0)); - if (GG::GUI::GetGUI()->AppHeight() - 5 < wnd_for_button->LowerRight().y) - wnd_for_button->OffsetMove(GG::Pt(GG::X0, GG::GUI::GetGUI()->AppHeight() - 5 - wnd_for_button->LowerRight().y)); - } + /*} else if (fleet_stationary) { + } else { - // if active fleet wnd hasn't changed, cycle through fleets - if (FleetUIManager::GetFleetUIManager().ActiveFleetWnd() == wnd_for_button) { - std::set<Fleet*> selected_fleets = FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectedFleets(); + }*/ - const UniverseObject* selected_fleet = 0; - if (selected_fleets.empty()) { - // do nothing - } else if (selected_fleets.size() > 1) { - return; // don't mess up user's carefully selected fleets - } else { - selected_fleet = universe_object_cast<UniverseObject*>(*(selected_fleets.begin())); - } + // select chosen fleet + if (fleet_to_select) + SelectFleet(fleet_to_select); +} - if (system) { - System::ObjectVec departing_fleets = system->FindObjects(OrderedMovingFleetVisitor(owner)); - System::ObjectVec stationary_fleets = system->FindObjects(StationaryFleetVisitor(owner)); +void MapWnd::SelectedFleetsChanged() +{ + // get selected fleets + std::set<Fleet*> selected_fleets; + if (const FleetWnd* fleet_wnd = FleetUIManager::GetFleetUIManager().ActiveFleetWnd()) + selected_fleets = fleet_wnd->SelectedFleets(); - if (departing_fleets.empty() && stationary_fleets.empty()) return; - if ((fleet_departing && !departing_fleets.empty()) || stationary_fleets.empty()) { - // are assured there is at least one departing fleet + // if old and new sets of selected fleets are the same, don't need to change anything + if (selected_fleets == m_selected_fleets) + return; - // attempt to find already-selected fleet in departing fleets - System::ObjectVec::iterator it; - if (selected_fleet) - it = std::find(departing_fleets.begin(), departing_fleets.end(), selected_fleet); - else - it = departing_fleets.end(); - if (it == departing_fleets.end() || it == departing_fleets.end() - 1) { - // selected fleet wasn't found, or it was found at the end, so select the first departing fleet + // clear old selection indicators + for (std::set<Fleet*>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { + const Fleet* fleet = *it; + std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); + if (button_it != m_fleet_buttons.end()) + (button_it->second)->SetSelected(false); + } - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(departing_fleets.front())); - } else { - // it was found, and wasn't at the end, so select the next fleet after it - ++it; - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(*it)); - } - } else { - // are assured there is at least one stationary fleet - // attempt to find already-selected fleet in departing fleets - System::ObjectVec::iterator it; - if (selected_fleet) - it = std::find(stationary_fleets.begin(), stationary_fleets.end(), selected_fleet); - else - it = stationary_fleets.end(); + // remove old move lines / ETA indicators - if (it == stationary_fleets.end() || it == stationary_fleets.end() - 1) { - // it wasn't found, or it was found at the end, so select the first stationary fleet - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(stationary_fleets.front())); - } else { - // it was found, and wasn't at the end, so select the next fleet after it - ++it; - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(*it)); - } - } - } else { - if (btn_fleets.empty()) return; - // are assured there is at least one moving fleet - // attempt to find already-selected fleet in moving fleets - std::vector<Fleet*>::const_iterator it; - if (selected_fleet) - it = std::find(btn_fleets.begin(), btn_fleets.end(), selected_fleet); - else - it == btn_fleets.end(); + // set new selected fleets + m_selected_fleets = selected_fleets; - if (it == btn_fleets.end() || it == btn_fleets.end() - 1) { - // it wasn't found, or it was found at the end, so select the first moving fleet - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(btn_fleets.front())); - } else { - // it was found, and wasn't at the end, so select the next fleet after it - ++it; - FleetUIManager::GetFleetUIManager().ActiveFleetWnd()->SelectFleet(universe_object_cast<Fleet*>(*it)); - } - } - } else { - FleetUIManager::GetFleetUIManager().SetActiveFleetWnd(wnd_for_button); + + // add new selection indicators + for (std::set<Fleet*>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { + const Fleet* fleet = *it; + std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); + if (button_it != m_fleet_buttons.end()) + (button_it->second)->SetSelected(true); } + + // add new move lines / ETA indicators } void MapWnd::HandleEmpireElimination(int empire_id) @@ -2773,8 +2801,53 @@ m_research_wnd->Sanitize(); m_production_wnd->Sanitize(); m_design_wnd->Sanitize(); + m_selected_system = UniverseObject::INVALID_OBJECT_ID; - m_selected_fleet = UniverseObject::INVALID_OBJECT_ID; + m_selected_fleets.clear(); + + m_starlane_endpoints.clear(); + m_stationary_fleet_buttons.clear(); + m_departing_fleet_buttons.clear(); + m_moving_fleet_buttons.clear(); + for(std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.begin(); it != m_fleet_buttons.end(); ++it) + delete it->second; + m_fleet_buttons.clear(); + + for (std::map<int, boost::signals::connection>::iterator it = m_fleet_state_change_signals.begin(); it != m_fleet_state_change_signals.end(); ++it) + it->second.disconnect(); + m_fleet_state_change_signals.clear(); + + for (std::map<int, std::vector<boost::signals::connection> >::iterator it = m_system_fleet_insert_remove_signals.begin(); it != m_system_fleet_insert_remove_signals.end(); ++it) { + std::vector<boost::signals::connection>& vec = it->second; + for (std::vector<boost::signals::connection>::iterator vec_it = vec.begin(); vec_it != vec.end(); ++vec_it) + vec_it->disconnect(); + vec.clear(); + } + m_system_fleet_insert_remove_signals.clear(); + + for (std::set<boost::signals::connection>::iterator it = m_keyboard_accelerator_signals.begin(); it != m_keyboard_accelerator_signals.end(); ++it) + it->disconnect(); + m_keyboard_accelerator_signals.clear(); + + m_fleet_lines.clear(); + + for (std::map<const Fleet*, std::vector<FleetETAMapIndicator*> >::iterator it = m_fleet_eta_map_indicators.begin(); it != m_fleet_eta_map_indicators.end(); ++it) { + std::vector<FleetETAMapIndicator*>& vec = it->second; + for (std::vector<FleetETAMapIndicator*>::iterator vec_it = vec.begin(); vec_it != vec.end(); ++vec_it) + delete *vec_it; + vec.clear(); + } + m_fleet_eta_map_indicators.clear(); + + m_projected_fleet_lines.clear(); + + for (std::map<const Fleet*, std::vector<FleetETAMapIndicator*> >::iterator it = m_projected_fleet_eta_map_indicators.begin(); it != m_projected_fleet_eta_map_indicators.end(); ++it) { + std::vector<FleetETAMapIndicator*>& vec = it->second; + for (std::vector<FleetETAMapIndicator*>::iterator vec_it = vec.begin(); vec_it != vec.end(); ++vec_it) + delete *vec_it; + vec.clear(); + } + m_projected_fleet_eta_map_indicators.clear(); } bool MapWnd::ReturnToMap() Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-03-25 06:58:31 UTC (rev 2937) +++ trunk/FreeOrion/UI/MapWnd.h 2009-03-25 14:42:28 UTC (rev 2938) @@ -203,16 +203,22 @@ void RenderMovementLine(const MapWnd::MovementLineData& move_line); //!< renders a single fleet movement line void CorrectMapPosition(GG::Pt &move_to_pt); //!< ensures that the map data are positioned sensibly + void SystemDoubleClicked(int system_id); void SystemLeftClicked(int system_id); void SystemRightClicked(int system_id); void MouseEnteringSystem(int system_id); void MouseLeavingSystem(int system_id); + void PlotFleetMovement(int system_id, bool execute_move); //!< issues fleet move orders to appropriate fleets in active FleetWnd + void FleetButtonClicked(FleetButton& fleet_btn); + void UniverseObjectDeleted(const UniverseObject *obj); + bool ReturnToMap(); bool OpenChatWindow(); + bool EndTurn(); bool ToggleSitRep(); @@ -232,9 +238,12 @@ void HideDesign(); bool ShowMenu(); + bool CloseSystemView(); //!< closes off the current system view + bool KeyboardZoomIn(); bool KeyboardZoomOut(); + bool ZoomToHomeSystem(); bool ZoomToPrevOwnedSystem(); bool ZoomToNextOwnedSystem(); @@ -260,7 +269,8 @@ void HideAllPopups(); void ShowAllPopups(); - void FleetWndClosing(FleetWnd* fleet_wnd); + void SelectedFleetsChanged(); + void HandleEmpireElimination(int empire_id); //!< cleans up internal storage of now-invalidated empire ID std::set<GG::Key> m_disabled_accels_list; //!< the list of Accelerators disabled by \a DisableAlphaNumAccels @@ -269,7 +279,7 @@ std::vector<double> m_bg_scroll_rate; //!< array, the rates at which each background scrolls int m_selected_system; - int m_selected_fleet; + std::set<Fleet*> m_selected_fleets; double m_zoom_steps_in; //!< number of zoom steps in. each 1.0 step increases display scaling by the same zoom step factor SidePanel* m_side_panel; //!< planet view panel on the side of the main map |
From: <geo...@us...> - 2009-03-28 04:09:27
|
Revision: 2943 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2943&view=rev Author: geoffthemedio Date: 2009-03-28 04:09:24 +0000 (Sat, 28 Mar 2009) Log Message: ----------- Fixed issue where clicking on fleet button wouldn't cycle through fleets properly Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-28 02:31:14 UTC (rev 2942) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-28 04:09:24 UTC (rev 2943) @@ -1325,6 +1325,7 @@ m_current_fleet = it; m_fleet_detail_panel->SetFleet(fleet); m_fleets_lb->BringRowIntoView(it); + SelectedFleetsChangedSignal(); break; } } Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-28 02:31:14 UTC (rev 2942) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-28 04:09:24 UTC (rev 2943) @@ -1531,9 +1531,14 @@ void MapWnd::SelectFleet(Fleet* fleet) { + // can't select no fleet... even if one or more FleetWnd are open... wouldn't know which to alter if (!fleet) return; - if (m_selected_fleets.find(fleet) != m_selected_fleets.end()) + + std::cout << "MapWnd::SelectFleet " << fleet->ID() << std::endl; + + // if indicated fleet is already the only selected fleet in the active FleetWnd, don't need to do anything + if (m_selected_fleets.size() == 1 && m_selected_fleets.find(fleet) != m_selected_fleets.end()) return; // find if there is a FleetWnd for this fleet already open. @@ -1598,11 +1603,10 @@ FleetUIManager::GetFleetUIManager().SetActiveFleetWnd(fleet_wnd); - // Select fleet in FleetWnd + // select fleet in FleetWnd. this deselects all other fleets in the FleetWnd. + // this->m_selected_fleets will be updated by ActiveFleetWndSelectedFleetsChanged or ActiveFleetWndChanged + // signals being emitted and connected to MapWnd::SelectedFleetsChanged fleet_wnd->SelectFleet(fleet); - - - std::cout << "MapWnd::SelectFleet " << fleet->ID() << std::endl; } void MapWnd::SetFleetMovementLine(const FleetButton* fleet_button) @@ -2606,25 +2610,6 @@ Fleet* first_fleet = btn_fleets[0]; - - //// determine if the clicked FleetButton was for departing fleets, statinary fleets, or moving fleets. - //// determine this by looking at the representative fleet from the button. if that fleet is departing, - //// then the button is a departing FleetButton, and similalry for stationary or moving fleets - //// get fleets represented by button - //bool fleet_departing = false, fleet_moving = false, fleet_stationary = false; - - //if (fleet->SystemID() == UniverseObject::INVALID_OBJECT_ID) { // fleet is not in a system - // fleet_moving = true; - //} else if ( // fleet is in a system - // fleet->FinalDestinationID() != UniverseObject::INVALID_OBJECT_ID && // and has a destination - // fleet->FinalDestinationID() != fleet->SystemID() // destination is not system where fleet is - // ) { - // fleet_departing = true; - //} else { // otherwise... - // fleet_stationary = true; - //} - - // find if a FleetWnd for this FleetButton's fleet(s) is already open, and if so, if there // is a single selected fleet in the window, and if so, what fleet that is FleetWnd* wnd_for_button = FleetUIManager::GetFleetUIManager().WndForFleet(first_fleet); @@ -2645,41 +2630,43 @@ // pick fleet to select from fleets represented by the clicked FleetButton. Fleet* fleet_to_select = NULL; - //if (fleet_moving) { - // all fleets in button are valid selection targets. - if (!already_selected_fleet || btn_fleets.size() == 1) { - // no (single) fleet is already selected, or there is only one selectable fleet, + // no (single) fleet is already selected, or there is only one selectable fleet, // so select first fleet in button - fleet_to_select = (*btn_fleets.begin()); + fleet_to_select = *btn_fleets.begin(); } else { // select next fleet after already-selected fleet, or first fleet if already-selected // fleet is the last fleet in the button. // to do this, scan through button's fleets to find already_selected_fleet + bool found_already_selected_fleet = false; for (std::vector<Fleet*>::const_iterator it = btn_fleets.begin(); it != btn_fleets.end(); ++it) { if (*it == already_selected_fleet) { - // found already selected fleet. get NEXT fleet + // found already selected fleet. get NEXT fleet. don't need to worry about + // there not being enough fleets to do this because if above checks for case + // of there being only one fleet in this button ++it; // if next fleet iterator is past end of fleets, loop around to first fleet if (it == btn_fleets.end()) it = btn_fleets.begin(); // get fleet to select out of iterator fleet_to_select = *it; + found_already_selected_fleet = true; break; } } + + if (!found_already_selected_fleet) { + // didn't find already-selected fleet. the selected fleet might have been moving when the + // click button was for stationary fleets, or vice versa. regardless, just default back + // to selecting the first fleet for this button + fleet_to_select = *btn_fleets.begin(); + } } - /*} else if (fleet_stationary) { - } else { - - }*/ - - // select chosen fleet if (fleet_to_select) SelectFleet(fleet_to_select); @@ -2698,6 +2685,9 @@ return; + std::cout << "MapWnd::SelectedFleetsChanged()" << std::endl; + + // clear old selection indicators for (std::set<Fleet*>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { const Fleet* fleet = *it; @@ -2719,7 +2709,7 @@ const Fleet* fleet = *it; std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); if (button_it != m_fleet_buttons.end()) - (button_it->second)->SetSelected(true); + button_it->second->SetSelected(true); } |
From: <geo...@us...> - 2009-03-28 21:36:44
|
Revision: 2947 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2947&view=rev Author: geoffthemedio Date: 2009-03-28 21:36:35 +0000 (Sat, 28 Mar 2009) Log Message: ----------- Got fleet selection indicators seemingly working Modified Paths: -------------- trunk/FreeOrion/UI/FleetButton.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/FleetButton.cpp =================================================================== --- trunk/FreeOrion/UI/FleetButton.cpp 2009-03-28 12:17:31 UTC (rev 2946) +++ trunk/FreeOrion/UI/FleetButton.cpp 2009-03-28 21:36:35 UTC (rev 2947) @@ -296,11 +296,9 @@ void FleetButton::SetSelected(bool selected) { m_selected = selected; - std::cout << "FleetButton " << this << " SetSelected(" << m_selected << ")" << std::endl; } void FleetButton::RenderUnpressed() { - std::cout << "FleetButton " << this << " RenderUnpressed. Selected: " << m_selected << std::endl; glColor(Color()); GG::Pt ul = UpperLeft(), lr = LowerRight(); if (m_vertex_components.empty()) { Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-28 12:17:31 UTC (rev 2946) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-28 21:36:35 UTC (rev 2947) @@ -2050,6 +2050,10 @@ DoFleetButtonsLayout(); + // add selection indicators to fleetbuttons + RefreshFleetButtonSelectionIndicators(); + + // create movement lines (after positioning buttons, so lines will originate from button location) for (std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.begin(); it != m_fleet_buttons.end(); ++it) SetFleetMovementLine(it->second); @@ -2679,29 +2683,40 @@ if (const FleetWnd* fleet_wnd = FleetUIManager::GetFleetUIManager().ActiveFleetWnd()) selected_fleets = fleet_wnd->SelectedFleets(); - // if old and new sets of selected fleets are the same, don't need to change anything if (selected_fleets == m_selected_fleets) return; + // set new selected fleets + m_selected_fleets = selected_fleets; - std::cout << "MapWnd::SelectedFleetsChanged()" << std::endl; + // update fleetbutton selection indicators + RefreshFleetButtonSelectionIndicators(); +} +void MapWnd::RefreshFleetButtonSelectionIndicators() +{ + std::cout << "MapWnd::RefreshFleetButtonSelectionIndicators()" << std::endl; // clear old selection indicators - for (std::set<Fleet*>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { - const Fleet* fleet = *it; - std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); - if (button_it != m_fleet_buttons.end()) - (button_it->second)->SetSelected(false); + for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { + std::set<FleetButton*>& set = it->second; + for (std::set<FleetButton*>::iterator button_it = set.begin(); button_it != set.end(); ++button_it) + (*button_it)->SetSelected(false); } + for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { + std::set<FleetButton*>& set = it->second; + for (std::set<FleetButton*>::iterator button_it = set.begin(); button_it != set.end(); ++button_it) + (*button_it)->SetSelected(false); + } - // remove old move lines / ETA indicators + for (std::set<FleetButton*>::iterator it = m_moving_fleet_buttons.begin(); it != m_moving_fleet_buttons.end(); ++it) { + (*it)->SetSelected(false); + } - // set new selected fleets - m_selected_fleets = selected_fleets; + // TODO: remove old move lines / ETA indicators // add new selection indicators @@ -2713,7 +2728,7 @@ } - // add new move lines / ETA indicators + // TODO: add new move lines / ETA indicators } void MapWnd::HandleEmpireElimination(int empire_id) Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-03-28 12:17:31 UTC (rev 2946) +++ trunk/FreeOrion/UI/MapWnd.h 2009-03-28 21:36:35 UTC (rev 2947) @@ -181,6 +181,7 @@ void SetZoom(double steps_in); //!< sets zoom level of the main map to zoom step size to the power of \a steps_in void RefreshFleetButtons(); //!< removes old / existing and creates new fleet buttons + void RefreshFleetButtonSelectionIndicators(); //!< marks (only) selected fleets' buttons as selected void FleetAddedOrRemoved(Fleet& fleet); void DoFleetButtonsLayout(); //!< does layout of fleet buttons void DoSystemIconsLayout(); //!< does layout of system icons |
From: <geo...@us...> - 2009-03-29 01:24:13
|
Revision: 2950 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2950&view=rev Author: geoffthemedio Date: 2009-03-29 01:23:59 +0000 (Sun, 29 Mar 2009) Log Message: ----------- -Fixed issue where closed FleetWnd wouldn't show up after clicking FleetButtons again until next turn -Fixed issue where FleetWnds weren't being populated with all the fleets they should have been Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/FleetWnd.h trunk/FreeOrion/UI/MapWnd.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-28 23:17:58 UTC (rev 2949) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-03-29 01:23:59 UTC (rev 2950) @@ -76,7 +76,7 @@ FleetWnd* FleetUIManager::ActiveFleetWnd() const { return m_active_fleet_wnd; } -FleetWnd* FleetUIManager::WndForFleet(Fleet* fleet) const +FleetWnd* FleetUIManager::WndForFleet(const Fleet* fleet) const { assert(fleet); FleetWnd* retval = 0; @@ -177,6 +177,9 @@ delete vec[i]; m_active_fleet_wnd = 0; + + ActiveFleetWndChangedSignal(); + return retval; } Modified: trunk/FreeOrion/UI/FleetWnd.h =================================================================== --- trunk/FreeOrion/UI/FleetWnd.h 2009-03-28 23:17:58 UTC (rev 2949) +++ trunk/FreeOrion/UI/FleetWnd.h 2009-03-29 01:23:59 UTC (rev 2950) @@ -37,7 +37,7 @@ iterator begin() const; iterator end() const; FleetWnd* ActiveFleetWnd() const; - FleetWnd* WndForFleet(Fleet* fleet) const; + FleetWnd* WndForFleet(const Fleet* fleet) const; std::size_t OpenDetailWnds(FleetWnd* fleet_wnd) const; //@} Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-03-28 23:17:58 UTC (rev 2949) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-03-29 01:23:59 UTC (rev 2950) @@ -1535,7 +1535,7 @@ if (!fleet) return; - std::cout << "MapWnd::SelectFleet " << fleet->ID() << std::endl; + //std::cout << "MapWnd::SelectFleet " << fleet->ID() << std::endl; // if indicated fleet is already the only selected fleet in the active FleetWnd, don't need to do anything if (m_selected_fleets.size() == 1 && m_selected_fleets.find(fleet) != m_selected_fleets.end()) @@ -1546,37 +1546,37 @@ // if there isn't a FleetWnd for this fleen open, need to open one if (!fleet_wnd) { - // to open a new FleetWnd, need to know what fleets to put in the Wnd. Search - // for a FleetButton for this fleet - std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(fleet); + //std::cout << "SelectFleet couldn't find fleetwnd for fleet " << std::endl; - // sanity check - if (it == m_fleet_buttons.end()) { - Logger().errorStream() << "Couldn't find a FleetButton for fleet in MapWnd::SelectFleet"; - return; - } - - // determine whether this fleet's FleetWnd can be manipulated by this player: can't manipulate // other empires' FleetWnds, and can't give orders to own fleets while they're en-route. - const System* system = fleet->GetSystem(); + System* system = fleet->GetSystem(); const std::set<int>& owners = fleet->Owners(); bool read_only = false; - if (owners.empty() || owners.find(HumanClientApp::GetApp()->EmpireID()) == owners.end() || !system) + if (!system || owners.empty() || owners.find(HumanClientApp::GetApp()->EmpireID()) == owners.end()) read_only = true; - // get FleetButton for fleet to be selected, and the fleets it represents - const FleetButton* button = it->second; - const std::vector<Fleet*>& btn_fleets = button->Fleets(); - if (btn_fleets.empty()) { - Logger().errorStream() << "FleetButton contained no fleets! in MapWnd::SelectFleet"; - return; + // need to know what fleets to put in the Wnd. All fleets at the location of the fleet being + // selected should be in the FleetWnd. This is either all fleets at the same System, or all + // fleets at the same universe location + std::vector<Fleet*> wnd_fleets; + if (system) { + // get all fleets in system + wnd_fleets = system->FindObjects<Fleet>(); + } else { + // get all (moving) fleets represented by fleet button for this fleet + std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(fleet); + if (it == m_fleet_buttons.end()) { + Logger().errorStream() << "Couldn't find a FleetButton for fleet in MapWnd::SelectFleet"; + return; + } + wnd_fleets = it->second->Fleets(); } // create new FleetWnd - fleet_wnd = FleetUIManager::GetFleetUIManager().NewFleetWnd(btn_fleets, 0, read_only); + fleet_wnd = FleetUIManager::GetFleetUIManager().NewFleetWnd(wnd_fleets, 0, read_only); // opening a new FleetWnd, so play sound FleetButton::PlayFleetButtonOpenSound(); @@ -2598,7 +2598,7 @@ void MapWnd::FleetButtonClicked(FleetButton& fleet_btn) { - std::cout << "MapWnd::FleetButtonClicked" << std::endl; + //std::cout << "MapWnd::FleetButtonClicked" << std::endl; // ignore clicks when in production mode if (m_in_production_view_mode) @@ -2619,6 +2619,7 @@ FleetWnd* wnd_for_button = FleetUIManager::GetFleetUIManager().WndForFleet(first_fleet); Fleet* already_selected_fleet = NULL; if (wnd_for_button) { + //std::cout << "FleetButtonClicked found open fleetwnd for fleet" << std::endl; // there is already FleetWnd for this button open. // check which fleet(s) is/are selected in the button's FleetWnd @@ -2628,6 +2629,8 @@ // to indicate that no one fleet is selected if (selected_fleets.size() == 1) already_selected_fleet = *(selected_fleets.begin()); + } else { + //std::cout << "FleetButtonClicked did not find open fleetwnd for fleet" << std::endl; } @@ -2696,7 +2699,7 @@ void MapWnd::RefreshFleetButtonSelectionIndicators() { - std::cout << "MapWnd::RefreshFleetButtonSelectionIndicators()" << std::endl; + //std::cout << "MapWnd::RefreshFleetButtonSelectionIndicators()" << std::endl; // clear old selection indicators for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { |
From: <geo...@us...> - 2009-04-07 19:08:39
|
Revision: 2970 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2970&view=rev Author: geoffthemedio Date: 2009-04-07 19:08:38 +0000 (Tue, 07 Apr 2009) Log Message: ----------- Cached intermediate move line rendering data to avoid recalculating it each frame, and so it can be used for placement of ETA indicators Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-07 15:39:57 UTC (rev 2969) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-07 19:08:38 UTC (rev 2970) @@ -328,20 +328,6 @@ { CloseClicked(); } -//////////////////////////////////////////////// -// MapWnd::MovementLineData -//////////////////////////////////////////////// -MapWnd::MovementLineData::MovementLineData() : - colour(GG::CLR_ZERO), - path() -{} - -MapWnd::MovementLineData::MovementLineData(const std::list<MovePathNode>& path_, GG::Clr colour_/* = GG::CLR_WHITE*/) : - colour(colour_), - path(path_) -{} - - ////////////////////////////////// //LaneEndpoints ////////////////////////////////// @@ -353,6 +339,113 @@ {} +//////////////////////////////////////////////// +// MapWnd::MovementLineData::Vertex +//////////////////////////////////////////////// +struct MapWnd::MovementLineData::Vertex { + Vertex(double x_, double y_, int eta_) : + x(x_), y(y_), eta(eta_) + {} + double x, y; + int eta; +}; + +//////////////////////////////////////////////// +// MapWnd::MovementLineData +//////////////////////////////////////////////// +MapWnd::MovementLineData::MovementLineData() : + path(), + colour(GG::CLR_ZERO) +{} + +MapWnd::MovementLineData::MovementLineData(const std::list<MovePathNode>& path_, + const std::map<std::pair<int, int>, LaneEndpoints>& lane_end_points_map, + GG::Clr colour_/*= GG::CLR_WHITE*/) : + path(path_), + colour(colour_) +{ + // generate screen position vertices + + if (path.empty() || path.size() == 1) + return; // nothing to draw. need at least two nodes at different locations to draw a line + + //std::cout << "move_line path: "; + //for (std::list<MovePathNode>::const_iterator it = path.begin(); it != path.end(); ++it) + // std::cout << it->object_id << " (" << it->x << ", " << it->y << "), "; + //std::cout << std::endl; + + // draw lines connecting points of interest along path. only draw a line if the previous and + // current positions of the ends of the line are known. + const MovePathNode& first_node = *(path.begin()); + double prev_node_x = first_node.x; + double prev_node_y = first_node.y; + int prev_sys_id = first_node.object_id; + int next_sys_id = UniverseObject::INVALID_OBJECT_ID; + + for (std::list<MovePathNode>::const_iterator path_it = path.begin(); path_it != path.end(); ++path_it) { + // stop rendering if end of path is indicated + if (path_it->eta == Fleet::ETA_NEVER || path_it->eta == Fleet::ETA_NEVER || path_it->eta == Fleet::ETA_OUT_OF_RANGE) + break; + + const MovePathNode& node = *path_it; + + + // 1) Get systems at ends of lane on which current node is located. + + if (node.object_id == UniverseObject::INVALID_OBJECT_ID) { + // node is in open space. + // node should have valid prev_sys_id and node.lane_end_id to get info about starlane this node is on + prev_sys_id = node.lane_start_id; + next_sys_id = node.lane_end_id; + + } else { + // node is at a system. + // node should / may not have a valid lane_end_id, but this system's id is the end of a lane approaching it + next_sys_id = node.object_id; + // if this is the first node of the path, prev_sys_id should be set to node.object_id from pre-loop initialization. + // if this node is later in the path, prev_sys_id should have been set in previous loop iteration + } + + + // skip invalid line segments + if (prev_sys_id == next_sys_id || next_sys_id == UniverseObject::INVALID_OBJECT_ID || prev_sys_id == UniverseObject::INVALID_OBJECT_ID) + continue; + + + // 2) Get on-screen positions of nodes, which depend on endpoints of lane + + // get unordered pair with which to lookup lane endpoints + std::pair<int, int> lane_ids = UnorderedIntPair(prev_sys_id, next_sys_id); + + // get lane end points + std::map<std::pair<int, int>, LaneEndpoints>::const_iterator ends_it = lane_end_points_map.find(lane_ids); + if (ends_it == lane_end_points_map.end()) { + Logger().errorStream() << "couldn't get endpoints of lane for move line"; + break; + } + const LaneEndpoints& lane_endpoints = ends_it->second; + + // get on-screen positions of nodes shifted to fit on starlane + std::pair<double, double> start_xy = ScreenPosOnStarane(prev_node_x, prev_node_y, prev_sys_id, next_sys_id, lane_endpoints); + std::pair<double, double> end_xy = ScreenPosOnStarane(node.x, node.y, prev_sys_id, next_sys_id, lane_endpoints); + + + // 3) Add points for line segment to list of Vertices + vertices.push_back(Vertex(start_xy.first, start_xy.second, node.eta)); + vertices.push_back(Vertex(end_xy.first, end_xy.second, node.eta)); + + + // 4) prep for next iteration + prev_node_x = node.x; + prev_node_y = node.y; + if (node.object_id != UniverseObject::INVALID_OBJECT_ID) { + prev_sys_id = node.object_id; // to be used in next iteration + next_sys_id = UniverseObject::INVALID_OBJECT_ID; // to be set in next iteration + } + } +} + + ////////////////////////////////// // MapWnd::FleetETAMapIndicator ////////////////////////////////// @@ -1679,7 +1772,7 @@ line_colour = empire->Color(); // create and store line - m_fleet_lines[fleet] = MovementLineData(fleet->MovePath(), line_colour); + m_fleet_lines[fleet] = MovementLineData(fleet->MovePath(), m_starlane_endpoints, line_colour); } void MapWnd::SetProjectedFleetMovementLine(const Fleet* fleet, const std::list<System*>& travel_route) @@ -1710,7 +1803,7 @@ line_colour = empire->Color(); // create and store line - m_projected_fleet_lines[fleet] = MovementLineData(path, line_colour); + m_projected_fleet_lines[fleet] = MovementLineData(path, m_starlane_endpoints, line_colour); } void MapWnd::SetProjectedFleetMovementLines(const std::vector<const Fleet*>& fleets, const std::list<System*>& travel_route) @@ -2485,77 +2578,20 @@ void MapWnd::RenderMovementLine(const MapWnd::MovementLineData& move_line) { - const std::list<MovePathNode>& path = move_line.path; - if (path.empty() || path.size() == 1) + const std::vector<MovementLineData::Vertex>& vertices = move_line.vertices; + if (vertices.empty()) return; // nothing to draw. need at least two nodes at different locations to draw a line + if (vertices.size() % 2 == 1) { + Logger().errorStream() << "RenderMovementLine given an odd number of vertices to render?!"; + return; + } - const Universe& universe = GetUniverse(); - //std::cout << "move_line path: "; - //for (std::list<MovePathNode>::const_iterator it = path.begin(); it != path.end(); ++it) - // std::cout << it->object_id << " (" << it->x << ", " << it->y << "), "; - //std::cout << std::endl; - // draw lines connecting points of interest along path. only draw a line if the previous and // current positions of the ends of the line are known. bool gl_open = false; - const MovePathNode& first_node = *(path.begin()); - double prev_node_x = first_node.x; - double prev_node_y = first_node.y; - int prev_sys_id = first_node.object_id; - int next_sys_id = UniverseObject::INVALID_OBJECT_ID; - for (std::list<MovePathNode>::const_iterator path_it = path.begin(); path_it != path.end(); ++path_it) { - // stop rendering if end of path is indicated - if (path_it->eta == Fleet::ETA_NEVER || path_it->eta == Fleet::ETA_NEVER || path_it->eta == Fleet::ETA_OUT_OF_RANGE) - break; - - const MovePathNode& node = *path_it; - - - // 1) Get systems at ends of lane on which current node is located. - - if (node.object_id == UniverseObject::INVALID_OBJECT_ID) { - // node is in open space. - // node should have valid prev_sys_id and node.lane_end_id to get info about starlane this node is on - prev_sys_id = node.lane_start_id; - next_sys_id = node.lane_end_id; - - } else { - // node is at a system. - // node should / may not have a valid lane_end_id, but this system's id is the end of a lane approaching it - next_sys_id = node.object_id; - // if this is the first node of the path, prev_sys_id should be set to node.object_id from pre-loop initialization. - // if this node is later in the path, prev_sys_id should have been set in previous loop iteration - } - - - // skip invalid line segments - if (prev_sys_id == next_sys_id || next_sys_id == UniverseObject::INVALID_OBJECT_ID || prev_sys_id == UniverseObject::INVALID_OBJECT_ID) - continue; - - - // 2) Get on-screen positions of nodes, which depend on endpoints of lane - - // get unordered pair with which to lookup lane endpoints - std::pair<int, int> lane_ids = UnorderedIntPair(prev_sys_id, next_sys_id); - - // get lane end points - std::map<std::pair<int, int>, LaneEndpoints>::const_iterator ends_it = m_starlane_endpoints.find(lane_ids); - if (ends_it == m_starlane_endpoints.end()) { - std::cout << "couldn't get endpoints of lane for move line" << std::endl; - break; - } - const LaneEndpoints& lane_endpoints = ends_it->second; - - // get on-screen positions of nodes shifted to fit on starlane - std::pair<double, double> start_xy = ScreenPosOnStarane(prev_node_x, prev_node_y, prev_sys_id, next_sys_id, lane_endpoints); - std::pair<double, double> end_xy = ScreenPosOnStarane(node.x, node.y, prev_sys_id, next_sys_id, lane_endpoints); - - - - // 3) Draw lane line segment TODO: Replace with placement of series of dots - + for (std::vector<MovementLineData::Vertex>::const_iterator verts_it = vertices.begin(); verts_it != vertices.end(); ++verts_it) { // does glBegin need to be called for this line? if (!gl_open) { // this is obviously less efficient than using GL_LINE_STRIP, but GL_LINE_STRIP sometimes @@ -2565,19 +2601,14 @@ gl_open = true; } + // get next two vertices + const MovementLineData::Vertex& vert1 = *verts_it; + verts_it++; + const MovementLineData::Vertex& vert2 = *verts_it; + // add gl vertices for this line segment - glVertex2d(start_xy.first, start_xy.second); - glVertex2d(end_xy.first, end_xy.second); - - - - // 4) prep for next iteration - prev_node_x = node.x; - prev_node_y = node.y; - if (node.object_id != UniverseObject::INVALID_OBJECT_ID) { - prev_sys_id = node.object_id; // to be used in next iteration - next_sys_id = UniverseObject::INVALID_OBJECT_ID; // to be set in next iteration - } + glVertex2d(vert1.x, vert1.y); + glVertex2d(vert2.x, vert2.y); } if (gl_open) Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-04-07 15:39:57 UTC (rev 2969) +++ trunk/FreeOrion/UI/MapWnd.h 2009-04-07 19:08:38 UTC (rev 2970) @@ -157,13 +157,18 @@ void UpdateMeterEstimates(const std::vector<int>& objects_vec); ///< re-estimates meter values of specified objects void UpdateEmpireResourcePools(); ///< recalculates production and predicted changes of player's empire's resource and population pools - /** contains information necessary to render a single fleet movement line on the main map */ - struct MovementLineData - { + /** contains information necessary to render a single fleet movement line on the main map. also + * contains cached infromation */ + struct MovementLineData { + struct Vertex; // cached pre-transformed line rendering and ETA marker placement information MovementLineData(); - MovementLineData(const std::list<MovePathNode>& path_, GG::Clr colour_ = GG::CLR_WHITE); - GG::Clr colour; - std::list<MovePathNode> path; + MovementLineData(const std::list<MovePathNode>& path_, + const std::map<std::pair<int, int>, LaneEndpoints>& lane_end_points_map, + GG::Clr colour_ = GG::CLR_WHITE); + + std::list<MovePathNode> path; // raw path data from which line rendering is determined + GG::Clr colour; // colour of line + std::vector<Vertex> vertices; }; |
From: <geo...@us...> - 2009-04-09 08:06:05
|
Revision: 2971 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2971&view=rev Author: geoffthemedio Date: 2009-04-09 08:06:03 +0000 (Thu, 09 Apr 2009) Log Message: ----------- -Added ETA-less fleet move ETA indicators. That is, the circles are drawn at the positions fleets will be in future turns, and at edges of systems they pass through, but the ETA numbers that are supposed to be drawn in those circles aren't drawn yet. -Moved FleetButtonClickedFunctor implementation into MapWnd.cpp from MapWnd.h Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-07 19:08:38 UTC (rev 2970) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) @@ -346,8 +346,8 @@ Vertex(double x_, double y_, int eta_) : x(x_), y(y_), eta(eta_) {} - double x, y; - int eta; + double x, y; // apparent in-universe position of a point on move line. not actual universe positions, but rather where the move line vertices are drawn + int eta; // turns taken to reach point by object travelling along move line }; //////////////////////////////////////////////// @@ -412,7 +412,7 @@ continue; - // 2) Get on-screen positions of nodes, which depend on endpoints of lane + // 2) Get apparent universe positions of nodes, which depend on endpoints of lane and actual universe position of nodes // get unordered pair with which to lookup lane endpoints std::pair<int, int> lane_ids = UnorderedIntPair(prev_sys_id, next_sys_id); @@ -446,6 +446,22 @@ } +///////////////////////////////////////// +// MapWnd::FleetButtonClickedFunctor +///////////////////////////////////////// +struct MapWnd::FleetButtonClickedFunctor { + FleetButtonClickedFunctor(FleetButton& fleet_btn, MapWnd& map_wnd) : + m_fleet_btn(fleet_btn), + m_map_wnd(map_wnd) + {} + void operator()() { + m_map_wnd.FleetButtonClicked(m_fleet_btn); + } + FleetButton& m_fleet_btn; + MapWnd& m_map_wnd; +}; + + ////////////////////////////////// // MapWnd::FleetETAMapIndicator ////////////////////////////////// @@ -2570,10 +2586,14 @@ const unsigned int PROJECTED_PATH_STIPPLE = (PATTERN << PROJECTED_PATH_SHIFT) | (PATTERN >> (GLUSHORT_BIT_LENGTH - PROJECTED_PATH_SHIFT)); - //// render projected move liens + // render projected move lines glLineStipple(static_cast<int>(GetOptionsDB().Get<double>("UI.starlane-thickness")), PROJECTED_PATH_STIPPLE); for (std::map<const Fleet*, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) RenderMovementLine(it->second); + + // render project move line ETA indicators + for (std::map<const Fleet*, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) + RenderMovementLineETAIndicators(it->second); } void MapWnd::RenderMovementLine(const MapWnd::MovementLineData& move_line) @@ -2589,7 +2609,7 @@ // draw lines connecting points of interest along path. only draw a line if the previous and // current positions of the ends of the line are known. - bool gl_open = false; + bool gl_open = false; for (std::vector<MovementLineData::Vertex>::const_iterator verts_it = vertices.begin(); verts_it != vertices.end(); ++verts_it) { // does glBegin need to be called for this line? @@ -2615,6 +2635,48 @@ glEnd(); } +void MapWnd::RenderMovementLineETAIndicators(const MapWnd::MovementLineData& move_line) +{ + const std::vector<MovementLineData::Vertex>& vertices = move_line.vertices; + if (vertices.empty()) + return; // nothing to draw. need at least two nodes at different locations to draw a line + + + const double MARKER_HALF_SIZE = 9; + const double MARKER_INNER_INSET = 2; + const int MARKER_PTS = ClientUI::Pts(); + boost::shared_ptr<GG::Font> font = ClientUI::GetBoldFont(MARKER_PTS); + const double TWO_PI = 2.0*3.1415926536; + + for (std::vector<MovementLineData::Vertex>::const_iterator verts_it = vertices.begin(); verts_it != vertices.end(); ++verts_it) { + const MovementLineData::Vertex& vert = *verts_it; + + glDisable(GL_TEXTURE_2D); + glPushMatrix(); + glLoadIdentity(); + + GG::Pt marker_centre = ScreenCoordsFromUniversePosition(vert.x, vert.y); + + // draw white background disc + glColor(GG::CLR_WHITE); + GG::Pt ul = marker_centre - GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); + GG::Pt lr = marker_centre + GG::Pt(GG::X(MARKER_HALF_SIZE), GG::Y(MARKER_HALF_SIZE)); + CircleArc(ul, lr, 0.0, TWO_PI, true); + + // draw empire-colour main disc + glColor(move_line.colour); + ul += GG::Pt(GG::X(MARKER_INNER_INSET), GG::Y(MARKER_INNER_INSET)); + lr -= GG::Pt(GG::X(MARKER_INNER_INSET), GG::Y(MARKER_INNER_INSET)); + CircleArc(ul, lr, 0.0, TWO_PI, true); + + glEnable(GL_TEXTURE_2D); + glPopMatrix(); + + // render black ETA number + //glColor(GG::CLR_BLACK); + } +} + void MapWnd::CorrectMapPosition(GG::Pt &move_to_pt) { GG::X contents_width(static_cast<int>(ZoomFactor() * Universe::UniverseWidth())); @@ -3877,13 +3939,3 @@ } } -MapWnd::FleetButtonClickedFunctor::FleetButtonClickedFunctor(FleetButton& fleet_btn, MapWnd& map_wnd) : - m_fleet_btn(fleet_btn), - m_map_wnd(map_wnd) -{} - -void MapWnd::FleetButtonClickedFunctor::operator()() -{ - m_map_wnd.FleetButtonClicked(m_fleet_btn); -} - Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-04-07 19:08:38 UTC (rev 2970) +++ trunk/FreeOrion/UI/MapWnd.h 2009-04-09 08:06:03 UTC (rev 2971) @@ -160,7 +160,7 @@ /** contains information necessary to render a single fleet movement line on the main map. also * contains cached infromation */ struct MovementLineData { - struct Vertex; // cached pre-transformed line rendering and ETA marker placement information + struct Vertex; // apparent universe positions of move line points, derived from actual universe positions contained in MovePathNodes MovementLineData(); MovementLineData(const std::list<MovePathNode>& path_, const std::map<std::pair<int, int>, LaneEndpoints>& lane_end_points_map, @@ -168,10 +168,10 @@ std::list<MovePathNode> path; // raw path data from which line rendering is determined GG::Clr colour; // colour of line - std::vector<Vertex> vertices; + std::vector<Vertex> vertices; // cached apparent universe positions of starts and ends of line segments drawn to represent move path }; - + struct FleetButtonClickedFunctor; class FleetETAMapIndicator; class MapScaleLine; @@ -203,7 +203,8 @@ void RenderSystems(); //!< renders stars and halos void RenderStarlanes(); //!< renders the starlanes between the systems void RenderFleetMovementLines(); //!< renders the dashed lines indicating where each fleet is going - void RenderMovementLine(const MapWnd::MovementLineData& move_line); //!< renders a single fleet movement line + void RenderMovementLine(const MapWnd::MovementLineData& move_line); //!< renders a single fleet movement line + void RenderMovementLineETAIndicators(const MapWnd::MovementLineData& move_line); //!< renders ETA indicators at end-of-turn positions for a single fleet movement line void CorrectMapPosition(GG::Pt &move_to_pt); //!< ensures that the map data are positioned sensibly @@ -337,22 +338,13 @@ int m_current_fleet; bool m_in_production_view_mode; - CUIToolBar *m_toolbar; + CUIToolBar* m_toolbar; StatisticIcon *m_food, *m_mineral, *m_trade, *m_population, *m_research, *m_industry; - CUIButton *m_btn_siterep, *m_btn_research, *m_btn_production, *m_btn_design, *m_btn_menu; - FPSIndicator* m_FPS; - GG::Slider* m_zoom_slider; - MapScaleLine* m_scale_line; - - struct FleetButtonClickedFunctor { - FleetButtonClickedFunctor(FleetButton& fleet_btn, MapWnd& map_wnd); - void operator()(); - FleetButton& m_fleet_btn; - MapWnd& m_map_wnd; - }; + GG::Slider* m_zoom_slider; //!< allows user to set zoom level + MapScaleLine* m_scale_line; //!< indicates the on-screen distance that reprensents an in-universe distance }; |
From: <tz...@us...> - 2009-04-11 03:14:18
|
Revision: 2972 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2972&view=rev Author: tzlaine Date: 2009-04-11 03:14:16 +0000 (Sat, 11 Apr 2009) Log Message: ----------- Changes required for recent change in GG's signal emission semantics. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/GalaxySetupWnd.cpp trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/MarkupBox.cpp trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp trunk/FreeOrion/UI/MultiplayerLobbyWnd.h trunk/FreeOrion/UI/OptionsWnd.cpp trunk/FreeOrion/UI/ServerConnectWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -28,7 +28,11 @@ BuildableItemsListBox(GG::X x, GG::Y y, GG::X w, GG::Y h) : CUIListBox(x, y, w, h) {} - virtual void GainingFocus() {DeselectAll();} + virtual void GainingFocus() + { + DeselectAll(); + SelChangedSignal(Selections()); + } }; struct ToggleBuildTypeFunctor @@ -540,8 +544,10 @@ } Logger().debugStream() << "Selecting Row"; - if (row_to_select != m_buildable_items->end()) + if (row_to_select != m_buildable_items->end()) { m_buildable_items->SelectRow(row_to_select); + BuildItemSelected(m_buildable_items->Selections()); + } Logger().debugStream() << "Done"; } Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -1313,6 +1313,7 @@ if (GetOptionsDB().Get<bool>("UI.fleet-autoselect") && !fleets.empty()) { GG::ListBox::iterator it = boost::next(m_fleets_lb->begin(), selected_fleet); m_fleets_lb->SelectRow(it); + FleetSelectionChanged(m_fleets_lb->Selections()); m_current_fleet = it; m_fleet_detail_panel->SetFleet(FleetInRow(it)); m_fleets_lb->BringRowIntoView(it); @@ -1331,6 +1332,7 @@ if (row && row->m_fleet == fleet) { m_fleets_lb->DeselectAll(); m_fleets_lb->SelectRow(it); + FleetSelectionChanged(m_fleets_lb->Selections()); m_current_fleet = it; m_fleet_detail_panel->SetFleet(fleet); m_fleets_lb->BringRowIntoView(it); Modified: trunk/FreeOrion/UI/GalaxySetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/GalaxySetupWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -173,6 +173,7 @@ { m_stars_spin->SetValue(setup_data.m_size); m_galaxy_shapes_list->Select(setup_data.m_shape); + ShapeChanged(m_galaxy_shapes_list->CurrentItem()); m_galaxy_ages_list->Select(setup_data.m_age); m_starlane_freq_list->Select(setup_data.m_starlane_freq - (ALLOW_NO_STARLANES ? 0 : 1)); m_planet_density_list->Select(setup_data.m_planet_density); @@ -245,10 +246,12 @@ // default settings m_stars_spin->SetValue(GetOptionsDB().Get<int>("GameSetup.stars")); m_galaxy_shapes_list->Select(GetOptionsDB().Get<Shape>("GameSetup.galaxy-shape")); + ShapeChanged(m_galaxy_shapes_list->CurrentItem()); m_galaxy_ages_list->Select(GetOptionsDB().Get<Age>("GameSetup.galaxy-age")); m_starlane_freq_list->Select(GetOptionsDB().Get<StarlaneFrequency>("GameSetup.starlane-frequency") - (ALLOW_NO_STARLANES ? 0 : 1)); m_planet_density_list->Select(GetOptionsDB().Get<PlanetDensity>("GameSetup.planet-density")); m_specials_freq_list->Select(GetOptionsDB().Get<SpecialsFrequency>("GameSetup.specials-frequency")); + SettingsChangedSignal(); } void GalaxySetupPanel::AttachSignalChildren() Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -1074,7 +1074,6 @@ } // focus droplists - m_drop_changed_connections[m_primary_focus_drop].block(); // prevent cyclic signalling std::string text; switch (res->PrimaryFocus()) { case FOCUS_BALANCED: @@ -1106,10 +1105,8 @@ text = boost::io::str(FlexibleFormat(UserString("RP_PRIMARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } - m_drop_changed_connections[m_primary_focus_drop].unblock(); m_primary_focus_drop->SetBrowseText(text); - m_drop_changed_connections[m_secondary_focus_drop].block(); switch (res->SecondaryFocus()) { case FOCUS_BALANCED: m_secondary_focus_drop->Select(0); @@ -1140,7 +1137,6 @@ text = boost::io::str(FlexibleFormat(UserString("RP_SECONDARY_FOCUS_TOOLTIP")) % UserString("FOCUS_UNKNOWN")); break; } - m_drop_changed_connections[m_secondary_focus_drop].unblock(); m_secondary_focus_drop->SetBrowseText(text); } Modified: trunk/FreeOrion/UI/MarkupBox.cpp =================================================================== --- trunk/FreeOrion/UI/MarkupBox.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/MarkupBox.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -526,10 +526,14 @@ void MarkupBox::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { std::cout << "MarkupBox::MouseWheel move: " << move << std::endl; if (!Disabled() && m_vscroll) { - for (int i = 0; i < move; ++i) + for (int i = 0; i < move; ++i) { m_vscroll->ScrollLineDecr(); - for (int i = 0; i < -move; ++i) + GG::SignalScroll(*m_vscroll, i == move -1); + } + for (int i = 0; i < -move; ++i) { m_vscroll->ScrollLineIncr(); + GG::SignalScroll(*m_vscroll, i == -move -1); + } } } @@ -547,22 +551,28 @@ switch (key) { case GG::GGK_UP: m_vscroll->ScrollLineDecr(); + GG::SignalScroll(*m_vscroll, true); break; case GG::GGK_DOWN: m_vscroll->ScrollLineIncr(); + GG::SignalScroll(*m_vscroll, true); break; case GG::GGK_HOME: m_vscroll->ScrollTo(0); + GG::SignalScroll(*m_vscroll, true); break; case GG::GGK_END: bottom = Value(m_surface->Height() - Height()); // find top position so that bottom of surface is at bottom of this box m_vscroll->ScrollTo(std::max(0, bottom)); // but don't allow negative scroll positions, in case this height is larger than surface height + GG::SignalScroll(*m_vscroll, true); break; case GG::GGK_PAGEUP: m_vscroll->ScrollPageDecr(); + GG::SignalScroll(*m_vscroll, true); break; case GG::GGK_PAGEDOWN: m_vscroll->ScrollPageIncr(); + GG::SignalScroll(*m_vscroll, true); break; } } Modified: trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -150,13 +150,13 @@ } -MultiplayerLobbyWnd::MultiplayerLobbyWnd(bool host, - const CUIButton::ClickedSlotType& start_game_callback, - const CUIButton::ClickedSlotType& cancel_callback) : +MultiplayerLobbyWnd::MultiplayerLobbyWnd( + bool host, + const CUIButton::ClickedSignalType::slot_type& start_game_callback, + const CUIButton::ClickedSignalType::slot_type& cancel_callback) : CUIWnd(UserString("MPLOBBY_WINDOW_TITLE"), (GG::GUI::GetGUI()->AppWidth() - LOBBY_WND_WIDTH) / 2, (GG::GUI::GetGUI()->AppHeight() - LOBBY_WND_HEIGHT) / 2, LOBBY_WND_WIDTH, LOBBY_WND_HEIGHT, GG::ONTOP | GG::CLICKABLE), - m_handling_lobby_update(false), m_host(host), m_chat_box(0), m_chat_input_edit(0), @@ -286,8 +286,6 @@ void MultiplayerLobbyWnd::LobbyUpdate(const MultiplayerLobbyData& lobby_data) { - m_handling_lobby_update = true; - m_new_load_game_buttons->SetCheck(!lobby_data.m_new_game); m_galaxy_setup_panel->SetFromSetupData(lobby_data); @@ -302,8 +300,6 @@ bool send_update_back = PopulatePlayerList(); - m_handling_lobby_update = false; - if (m_host && send_update_back) SendUpdate(); } @@ -425,11 +421,9 @@ void MultiplayerLobbyWnd::SendUpdate() { - if (!m_handling_lobby_update) { - int player_id = HumanClientApp::GetApp()->PlayerID(); - if (player_id != -1) - HumanClientApp::GetApp()->Networking().SendMessage(LobbyUpdateMessage(player_id, m_lobby_data)); - } + int player_id = HumanClientApp::GetApp()->PlayerID(); + if (player_id != -1) + HumanClientApp::GetApp()->Networking().SendMessage(LobbyUpdateMessage(player_id, m_lobby_data)); } bool MultiplayerLobbyWnd::PlayerDataAcceptable() const Modified: trunk/FreeOrion/UI/MultiplayerLobbyWnd.h =================================================================== --- trunk/FreeOrion/UI/MultiplayerLobbyWnd.h 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/MultiplayerLobbyWnd.h 2009-04-11 03:14:16 UTC (rev 2972) @@ -31,8 +31,8 @@ public: /** \name Structors */ //@{ MultiplayerLobbyWnd(bool host, - const CUIButton::ClickedSlotType& start_game_callback, - const CUIButton::ClickedSlotType& cancel_callback); + const CUIButton::ClickedSignalType::slot_type& start_game_callback, + const CUIButton::ClickedSignalType::slot_type& cancel_callback); //@} /** \name Accessors */ //@{ @@ -61,7 +61,6 @@ bool CanStart() const; MultiplayerLobbyData m_lobby_data; // a copy of the most recently received lobby update - bool m_handling_lobby_update; bool m_host; Modified: trunk/FreeOrion/UI/OptionsWnd.cpp =================================================================== --- trunk/FreeOrion/UI/OptionsWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/OptionsWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -621,6 +621,7 @@ CUISpin<double>* max_fps_spin = DoubleOption("max-fps", UserString("OPTIONS_MAX_FPS")); GG::Connect(limit_FPS_button->CheckedSignal, LimitFPSSetOptionFunctor(max_fps_spin)); limit_FPS_button->SetCheck(GetOptionsDB().Get<bool>("limit-fps")); + limit_FPS_button->CheckedSignal(limit_FPS_button->Checked()); GG::Connect(drop_list->SelChangedSignal, ResolutionDropListIndexSetOptionFunctor(drop_list, width_spin, height_spin, color_depth_spin, fullscreen_button)); Modified: trunk/FreeOrion/UI/ServerConnectWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ServerConnectWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/ServerConnectWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -128,7 +128,9 @@ if (m_servers_lb->NumRows()) { m_host_or_join_radio_group->SetCheck(1); m_servers_lb->SelectRow(m_servers_lb->begin()); + ServerSelected(m_servers_lb->Selections()); } + HostOrJoinClicked(m_host_or_join_radio_group->CheckedButton()); } void ServerConnectWnd::PopulateServerList() @@ -161,8 +163,10 @@ void ServerConnectWnd::IPAddressEdited(const std::string& str) { - if (str != "") + if (str != "") { m_servers_lb->DeselectAll(); + ServerSelected(m_servers_lb->Selections()); + } EnableDisableControls(); } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -1135,8 +1135,13 @@ void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { - if (m_vscroll) - move < 0 ? m_vscroll->ScrollLineIncr() : m_vscroll->ScrollLineDecr(); + if (m_vscroll) { + if (move < 0) + m_vscroll->ScrollLineIncr(); + else + m_vscroll->ScrollLineDecr(); + GG::SignalScroll(*m_vscroll, true); + } } void SidePanel::PlanetPanelContainer::Clear() @@ -1480,6 +1485,7 @@ for (GG::ListBox::iterator it = m_system_name->begin(); it != m_system_name->end(); ++it) { if (select_row == *it) { m_system_name->Select(it); + SystemSelectionChanged(m_system_name->CurrentItem()); break; } } @@ -1573,6 +1579,7 @@ if (selected == m_system_name->begin()) selected = m_system_name->end(); m_system_name->Select(--selected); + SystemSelectionChanged(m_system_name->CurrentItem()); } void SidePanel::NextButtonClicked() @@ -1582,6 +1589,7 @@ if (++selected == m_system_name->end()) selected = m_system_name->begin(); m_system_name->Select(selected); + SystemSelectionChanged(m_system_name->CurrentItem()); } void SidePanel::PlanetSelected(int planet_id) Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2009-04-09 08:06:03 UTC (rev 2971) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2009-04-11 03:14:16 UTC (rev 2972) @@ -1486,6 +1486,8 @@ m_hscroll->ScrollTo(0); m_vscroll->SizeScroll(0, 1, 1, 1); m_hscroll->SizeScroll(0, 1, 1, 1); + GG::SignalScroll(*m_vscroll, true); + GG::SignalScroll(*m_hscroll, true); // delete all panels for (std::map<const Tech*, TechPanel*>::const_iterator it = m_techs.begin(); it != m_techs.end(); ++it) @@ -1594,7 +1596,9 @@ GG::Pt center_point = tech_panel->RelativeUpperLeft() + GG::Pt(tech_panel->Width() / 2, tech_panel->Height() / 2); GG::Pt client_size = ClientSize(); m_hscroll->ScrollTo(Value(center_point.x - client_size.x / 2)); + GG::SignalScroll(*m_hscroll, true); m_vscroll->ScrollTo(Value(center_point.y - client_size.y / 2)); + GG::SignalScroll(*m_vscroll, true); } else { Logger().debugStream() << "TechTreeWnd::LayoutPanel::CenterOnTech couldn't centre on " << (tech ? tech->Name() : "Null tech pointer") << " due to lack of such a tech panel"; } @@ -1734,7 +1738,9 @@ if (keep_position) { m_vscroll->ScrollTo(Value(final_position.y)); + GG::SignalScroll(*m_vscroll, true); m_hscroll->ScrollTo(Value(final_position.x)); + GG::SignalScroll(*m_hscroll, true); } else { // find a tech to centre view on for (TechManager::iterator it = manager.begin(); it != manager.end(); ++it) { @@ -1834,7 +1840,9 @@ void TechTreeWnd::LayoutPanel::TreeDraggedSlot(const GG::Pt& move) { m_vscroll->ScrollTo(Value(m_vscroll->PosnRange().first - move.y)); + GG::SignalScroll(*m_vscroll, true); m_hscroll->ScrollTo(Value(m_hscroll->PosnRange().first - move.x)); + GG::SignalScroll(*m_hscroll, true); } void TechTreeWnd::LayoutPanel::TreeZoomedSlot(int move) |
From: <geo...@us...> - 2009-04-30 03:23:18
|
Revision: 3008 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3008&view=rev Author: geoffthemedio Date: 2009-04-30 03:23:17 +0000 (Thu, 30 Apr 2009) Log Message: ----------- -Smoothed system circles -Formatting / grooming Modified Paths: -------------- trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/DesignWnd.cpp trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2009-04-26 18:13:14 UTC (rev 3007) +++ trunk/FreeOrion/UI/CUIControls.cpp 2009-04-30 03:23:17 UTC (rev 3008) @@ -58,25 +58,6 @@ const double TAB_BRIGHTENING_SCALE_FACTOR = 1.25; } -#if 0 -// TODO: finish implementing these sounds, as recommended by the sound team (the ones commented out are done): -//1) Button Click - includes clicks on regular buttons, check boxes, radio buttons -//2) Button Rollover - includes moving the mouse over regular buttons only -//3) Item Select - selecting/deselecting an item in a drop-down list or listbox -//4) Item Drop - dropping a drag-and-drop item into a listbox -//5) Alert - when a warning or error message box pops up -//6) Minimize window -//7) Maximize window -//8) Close window -//9) Turn Button Click (specialization of Button Click) -//9) Fleet Rollover (specialization of Button Rollover) -//10) Fleet Click (specialization of Button Click) -//11) Planet Click (specialization of Button Click) -//12) Text Typing -13) Planet Background Music (music, instead of sound effect, for the planet detail view) -14) Fleet-Type Sound (plays sound specific to the type of fleet in the fleet detail view) -15) Turn Progressing -#endif /////////////////////////////////////// // class CUIButton @@ -958,13 +939,13 @@ m_icon = new GG::StaticGraphic(GG::X0, GG::Y0, GG::X(Value(h)), h, texture, GG::GRAPHIC_FITGRAPHIC); m_text = new GG::TextControl(GG::X(Value(h)), GG::Y0, w - Value(h), GG::Y(std::max(font_space, Value(h))), "", ClientUI::GetFont(), ClientUI::TextColor(), GG::FORMAT_LEFT | GG::FORMAT_VCENTER); } else { - // need vertical space for text, but don't want icon to be larger than available horizintal space + // need vertical space for text, but don't want icon to be larger than available horizontal space int icon_height = std::min(Value(w), std::max(Value(h - font_space), 1)); int icon_left = Value(w - icon_height)/2; m_icon = new GG::StaticGraphic(GG::X(icon_left), GG::Y0, GG::X(icon_height), GG::Y(icon_height), texture, GG::GRAPHIC_FITGRAPHIC); m_text = new GG::TextControl(GG::X0, GG::Y(icon_height), w, GG::Y(font_space), "", ClientUI::GetFont(), ClientUI::TextColor(), GG::FORMAT_CENTER | GG::FORMAT_TOP); } - + AttachChild(m_icon); AttachChild(m_text); Refresh(); Modified: trunk/FreeOrion/UI/DesignWnd.cpp =================================================================== --- trunk/FreeOrion/UI/DesignWnd.cpp 2009-04-26 18:13:14 UTC (rev 3007) +++ trunk/FreeOrion/UI/DesignWnd.cpp 2009-04-30 03:23:17 UTC (rev 3008) @@ -24,17 +24,16 @@ namespace { - static const std::string PART_CONTROL_DROP_TYPE_STRING = "Part Control"; - static const std::string EMPTY_STRING = ""; - static const GG::Y BASES_LIST_BOX_ROW_HEIGHT(100); + const std::string PART_CONTROL_DROP_TYPE_STRING = "Part Control"; + const std::string EMPTY_STRING = ""; + const GG::Y BASES_LIST_BOX_ROW_HEIGHT(100); } ////////////////////////////////////////////////// // PartControl // ////////////////////////////////////////////////// /** UI representation of a ship part. Displayed in the PartPalette, and can be dragged onto SlotControls to - * add parts to the design. - */ + * add parts to the design. */ class PartControl : public GG::Control { public: /** \name Structors */ //@{ @@ -98,8 +97,7 @@ ////////////////////////////////////////////////// // PartsListBox // ////////////////////////////////////////////////// -/** Arrangement of PartControls that can be dragged onto SlotControls - */ +/** Arrangement of PartControls that can be dragged onto SlotControls */ class PartsListBox : public CUIListBox { public: class PartsListBoxRow : public CUIListBox::Row { @@ -376,8 +374,8 @@ ////////////////////////////////////////////////// // DesignWnd::PartPalette // ////////////////////////////////////////////////// -/** Contains graphical list of PartControl which can be dragged and dropped onto slots to assign parts to those slots - */ +/** Contains graphical list of PartControl which can be dragged and dropped onto slots + * to assign parts to those slots */ class DesignWnd::PartPalette : public CUIWnd { public: /** \name Structors */ //@{ @@ -673,9 +671,8 @@ ////////////////////////////////////////////////// // BasesListBox // ////////////////////////////////////////////////// -/** List of starting points for designs, such as empty hulls, existing designs kept by this empire or seen - * elsewhere in the universe, design template scripts or saved (on disk) designs from previous games. - */ +/** List of starting points for designs, such as empty hulls, existing designs kept by this empire or seen + * elsewhere in the universe, design template scripts or saved (on disk) designs from previous games. */ class BasesListBox : public CUIListBox { public: /** \name Structors */ //@{ @@ -701,13 +698,13 @@ //@} mutable boost::signal<void (int)> - DesignSelectedSignal; //!< an existing complete design that is known to this empire was selected (double-clicked) + DesignSelectedSignal; //!< an existing complete design that is known to this empire was selected (double-clicked) mutable boost::signal<void (const std::string&, const std::vector<std::string>&)> - DesignComponentsSelectedSignal; //!< a hull and a set of parts (which may be empty) was selected (double-clicked) + DesignComponentsSelectedSignal; //!< a hull and a set of parts (which may be empty) was selected (double-clicked) mutable boost::signal<void (const ShipDesign*)> - DesignBrowsedSignal; //!< a completed design was browsed (clicked once) + DesignBrowsedSignal; //!< a completed design was browsed (clicked once) mutable boost::signal<void (const HullType*)> - HullBrowsedSignal; //!< a hull was browsed (clicked once) + HullBrowsedSignal; //!< a hull was browsed (clicked once) private: void PropagateDoubleClickSignal(GG::ListBox::iterator it); @@ -850,9 +847,8 @@ CUIListBox::SizeMove(ul, lr); if (old_size != Size()) { const GG::Pt row_size = ListRowSize(); - for (GG::ListBox::iterator it = begin(); it != end(); ++it) { + for (GG::ListBox::iterator it = begin(); it != end(); ++it) (*it)->Resize(row_size); - } } } @@ -1288,8 +1284,7 @@ // SlotControl // ////////////////////////////////////////////////// /** UI representation and drop-target for slots of a design. PartControl may be dropped into slots to add - * the corresponding parts to the ShipDesign, or the part may be set programmatically with SetPart(). - */ + * the corresponding parts to the ShipDesign, or the part may be set programmatically with SetPart(). */ class SlotControl : public GG::Control { public: /** \name Structors */ //@{ @@ -1298,9 +1293,7 @@ //@} /** \name Accessors */ //@{ - virtual void DropsAcceptable(DropsAcceptableIter first, - DropsAcceptableIter last, - const GG::Pt& pt) const; + virtual void DropsAcceptable(DropsAcceptableIter first, DropsAcceptableIter last, const GG::Pt& pt) const; ShipSlotType SlotType() const; double XPositionFraction() const; @@ -1357,10 +1350,7 @@ SetDragDropDataType(""); } -void SlotControl::DropsAcceptable(DropsAcceptableIter first, - DropsAcceptableIter last, - const GG::Pt& pt) const -{ +void SlotControl::DropsAcceptable(DropsAcceptableIter first, DropsAcceptableIter last, const GG::Pt& pt) const { bool acceptable_part_found = false; for (DropsAcceptableIter it = first; it != last; ++it) { if (!acceptable_part_found && it->first->DragDropDataType() == PART_CONTROL_DROP_TYPE_STRING) { Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-04-26 18:13:14 UTC (rev 3007) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-04-30 03:23:17 UTC (rev 3008) @@ -2278,8 +2278,7 @@ m_graphic(0), m_name(0) { - const ShipDesign* design = GetShipDesign(m_design_id); - if (design) { + if (const ShipDesign* design = GetShipDesign(m_design_id)) { m_graphic = new GG::StaticGraphic(GG::X0, GG::Y0, w, h, ClientUI::HullTexture(design->Hull()), GG::GRAPHIC_PROPSCALE | GG::GRAPHIC_FITGRAPHIC); AttachChild(m_graphic); m_name = new GG::TextControl(GG::X0, GG::Y0, design->Name(), ClientUI::GetFont(), GG::CLR_WHITE); Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-04-26 18:13:14 UTC (rev 3007) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-04-30 03:23:17 UTC (rev 3008) @@ -2450,6 +2450,7 @@ glLoadIdentity(); const double TWO_PI = 2.0*3.14159; glDisable(GL_TEXTURE_2D); + glEnable(GL_LINE_SMOOTH); glLineWidth(1.5); glColor(GetOptionsDB().Get<StreamableColor>("UI.unowned-starlane-colour").ToClr()); @@ -2486,6 +2487,7 @@ } } + glDisable(GL_LINE_SMOOTH); glEnable(GL_TEXTURE_2D); glPopMatrix(); } Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-04-26 18:13:14 UTC (rev 3007) +++ trunk/FreeOrion/UI/MapWnd.h 2009-04-30 03:23:17 UTC (rev 3008) @@ -1,5 +1,4 @@ // -*- C++ -*- -//MapWnd.h #ifndef _MapWnd_h_ #define _MapWnd_h_ @@ -357,8 +356,8 @@ public: MapWndPopup(const std::string& t, GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Flags<GG::WndFlag> flags); virtual ~MapWndPopup(); - void CloseClicked(); - void Close(); + void CloseClicked(); + void Close(); }; #endif // _MapWnd_h_ |
From: <tz...@us...> - 2009-05-01 21:54:15
|
Revision: 3009 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3009&view=rev Author: tzlaine Date: 2009-05-01 21:54:14 +0000 (Fri, 01 May 2009) Log Message: ----------- Re-enabled auto-scrolling when doing drag-drops in FleetWnd and QueueListBox. Modified Paths: -------------- trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/QueueListBox.cpp Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-04-30 03:23:17 UTC (rev 3008) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-05-01 21:54:14 UTC (rev 3009) @@ -830,6 +830,8 @@ virtual void DragDropHere(const GG::Pt& pt, const std::map<Wnd*, GG::Pt>& drag_drop_wnds, GG::Flags<GG::ModKey> mod_keys) { + CUIListBox::DragDropHere(pt, drag_drop_wnds, mod_keys); + iterator row = RowUnderPt(pt); if (m_selected_fleet != row) Modified: trunk/FreeOrion/UI/QueueListBox.cpp =================================================================== --- trunk/FreeOrion/UI/QueueListBox.cpp 2009-04-30 03:23:17 UTC (rev 3008) +++ trunk/FreeOrion/UI/QueueListBox.cpp 2009-05-01 21:54:14 UTC (rev 3009) @@ -58,6 +58,7 @@ void QueueListBox::DragDropHere(const GG::Pt& pt, const std::map<GG::Wnd*, GG::Pt>& drag_drop_wnds, GG::Flags<GG::ModKey> mod_keys) { + CUIListBox::DragDropHere(pt, drag_drop_wnds, mod_keys); if (drag_drop_wnds.size() == 1 && AllowedDropTypes().find(drag_drop_wnds.begin()->first->DragDropDataType()) != AllowedDropTypes().end()) { |
From: <tz...@us...> - 2009-05-12 04:21:48
|
Revision: 3035 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3035&view=rev Author: tzlaine Date: 2009-05-12 04:21:32 +0000 (Tue, 12 May 2009) Log Message: ----------- Updated the UI code to reflect recent GG API changes. Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-05-12 03:50:51 UTC (rev 3034) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-05-12 04:21:32 UTC (rev 3035) @@ -292,7 +292,7 @@ } void PopulationPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void PopulationPanel::Render() { @@ -659,7 +659,7 @@ } void ResourcePanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void ResourcePanel::Render() { @@ -1110,7 +1110,7 @@ } void MilitaryPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void MilitaryPanel::Update() { @@ -1340,7 +1340,7 @@ } void MultiIconValueIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void MultiIconValueIndicator::Update() { @@ -1486,7 +1486,7 @@ } void MultiMeterStatusBar::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void MultiMeterStatusBar::Update() { @@ -1616,7 +1616,7 @@ } void BuildingsPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void BuildingsPanel::Update() { @@ -1889,7 +1889,7 @@ } void BuildingIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } ///////////////////////////////////// // SpecialsPanel // @@ -1919,7 +1919,7 @@ {} void SpecialsPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void SpecialsPanel::Update() { @@ -2015,7 +2015,7 @@ void ShipDesignPanel::Render() {} void ShipDesignPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } void ShipDesignPanel::Update() { } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-05-12 03:50:51 UTC (rev 3034) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-05-12 04:21:32 UTC (rev 3035) @@ -1001,7 +1001,7 @@ } void SidePanel::PlanetPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) -{ ForwardEventToParent(GG::WndEvent(GG::WndEvent::MouseWheel, pt, move, mod_keys)); } +{ ForwardEventToParent(); } bool SidePanel::PlanetPanel::InWindow(const GG::Pt& pt) const { |
From: <geo...@us...> - 2009-05-19 10:03:22
|
Revision: 3057 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3057&view=rev Author: geoffthemedio Date: 2009-05-19 10:03:10 +0000 (Tue, 19 May 2009) Log Message: ----------- Added MouseWheel event forwarding to several classes in InfoPanels.cpp, so that mouse wheeling over stuff on the sidepanel scrolls the planet panels again, after recent GG changes re-added the need for functions to do this explicitly Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-05-19 09:21:03 UTC (rev 3056) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-05-19 10:03:10 UTC (rev 3057) @@ -236,6 +236,9 @@ // don't need to manually delete m_expand_button, as it is attached as a child so will be deleted by ~Wnd } +void PopulationPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void PopulationPanel::ExpandCollapseButtonPressed() { ExpandCollapse(!s_expanded_map[m_popcenter_id]); @@ -713,6 +716,9 @@ } +void ResourcePanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void ResourcePanel::Update() { const ResourceCenter* res = GetResourceCenter(); @@ -1103,6 +1109,9 @@ glEnable(GL_TEXTURE_2D); } +void MilitaryPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void MilitaryPanel::Update() { const Planet* plt = GetPlanet(); @@ -1330,6 +1339,9 @@ GG::FlatRectangle(ul, lr, ClientUI::WndColor(), ClientUI::WndOuterBorderColor(), 1); } +void MultiIconValueIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void MultiIconValueIndicator::Update() { assert(m_icons.size() == m_meter_types.size()); @@ -1473,6 +1485,9 @@ } } +void MultiMeterStatusBar::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void MultiMeterStatusBar::Update() { std::vector<const Meter*> meters; @@ -1600,8 +1615,13 @@ glEnable(GL_TEXTURE_2D); } +void BuildingsPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void BuildingsPanel::Update() { + //std::cout << "BuildingsPanel::Update" << std::endl; + // remove old indicators for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) { DetachChild(*it); @@ -1636,7 +1656,7 @@ const Empire* empire = Empires().Lookup(*own_it); if (!empire) continue; // shouldn't be a problem... maybe put check for it later const ProductionQueue& queue = empire->GetProductionQueue(); - + int queue_index = 0; for (ProductionQueue::const_iterator queue_it = queue.begin(); queue_it != queue.end(); ++queue_it, ++queue_index) { const ProductionQueue::Element elem = *queue_it; @@ -1647,11 +1667,11 @@ if (location != plt->ID()) continue; // don't show buildings located elsewhere const BuildingType* building_type = GetBuildingType(elem.item.name); - + double turn_cost; int turns; boost::tie(turn_cost, turns) = empire->ProductionCostAndTime(type, elem.item.name); - + double progress = empire->ProductionStatus(queue_index); if (progress == -1.0) progress = 0.0; @@ -1666,6 +1686,7 @@ void BuildingsPanel::Refresh() { + //std::cout << "BuildingsPanel::Refresh" << std::endl; Update(); DoExpandCollapseLayout(); } @@ -1679,7 +1700,7 @@ { int row = 0; int column = 0; - const GG::X w = Width(); // horizontal space in which to place indicators + const GG::X w = Width(); // horizontal space in which to place indicators const int padding = 5; // space around and between adjacent indicators const GG::X effective_width = w - padding * (m_columns + 1); // padding on either side and between const int indicator_size = static_cast<int>(Value(effective_width * 1.0 / m_columns)); @@ -1692,7 +1713,7 @@ int n = 0; for (std::vector<BuildingIndicator*>::iterator it = m_building_indicators.begin(); it != m_building_indicators.end(); ++it) { BuildingIndicator* ind = *it; - + GG::X x = icon_width * n; if (x < (w - m_expand_button->Width() - icon_width)) { @@ -1713,9 +1734,9 @@ GG::X x(padding * (column + 1) + indicator_size * column); GG::Y y(padding * (row + 1) + indicator_size * row); ind->MoveTo(GG::Pt(x, y)); - + ind->Resize(GG::Pt(GG::X(indicator_size), GG::Y(indicator_size))); - + AttachChild(ind); ind->Show(); @@ -1744,14 +1765,11 @@ Resize(GG::Pt(Width(), height)); // update appearance of expand/collapse button - if (s_expanded_map[m_planet_id]) - { + if (s_expanded_map[m_planet_id]) { m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrownormal.png" ), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrowclicked.png" ), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "uparrowmouseover.png"), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); - } - else - { + } else { m_expand_button->SetUnpressedGraphic(GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrownormal.png" ), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); m_expand_button->SetPressedGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowclicked.png" ), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); m_expand_button->SetRolloverGraphic (GG::SubTexture(ClientUI::GetTexture( ClientUI::ArtDir() / "icons" / "downarrowmouseover.png"), GG::X0, GG::Y0, GG::X(32), GG::Y(32))); @@ -1870,6 +1888,10 @@ m_progress_bar->SizeMove(GG::Pt(GG::X0, bar_top), child_lr); } +void BuildingIndicator::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + + ///////////////////////////////////// // SpecialsPanel // ///////////////////////////////////// @@ -1897,8 +1919,12 @@ void SpecialsPanel::Render() {} +void SpecialsPanel::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void SpecialsPanel::Update() { + //std::cout << "SpecialsPanel::Update" << std::endl; for (std::vector<GG::StaticGraphic*>::iterator it = m_icons.begin(); it != m_icons.end(); ++it) DeleteChild(*it); m_icons.clear(); Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2009-05-19 09:21:03 UTC (rev 3056) +++ trunk/FreeOrion/UI/InfoPanels.h 2009-05-19 10:03:10 UTC (rev 3057) @@ -47,6 +47,7 @@ void ExpandCollapse(bool expanded); ///< expands or collapses panel to show details or just summary info virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); ///< updates indicators with values of associated object. Does not do layout and resizing. void Refresh(); ///< updates, redoes layout, resizes indicator @@ -93,6 +94,7 @@ void ExpandCollapse(bool expanded); ///< expands or collapses panel to show details or just summary info virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); ///< updates indicators with values of associated object. Does not do layout and resizing. void Refresh(); ///< updates, redoes layout, resizes indicator @@ -150,6 +152,7 @@ void ExpandCollapse(bool expanded); ///< expands or collapses panel to show details or just summary info virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); ///< updates indicators with values of associated object. Does not do layout and resizing. void Refresh(); ///< updates, redoes layout, resizes indicator @@ -197,6 +200,7 @@ void ExpandCollapse(bool expanded); ///< expands or collapses panel to show details or just summary info virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Refresh(); ///< recreates indicators, redoes layout, resizes @@ -232,6 +236,7 @@ virtual void Render(); virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); private: const BuildingType& m_type; @@ -254,6 +259,7 @@ /** \name Mutators */ //@{ virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); ///< regenerates indicators according to buildings on planets and on queue on planet and redoes layout //@} @@ -311,6 +317,7 @@ bool Empty(); virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); void Update(); @@ -335,9 +342,10 @@ public: MultiMeterStatusBar(GG::X w, const UniverseObject& obj, const std::vector<MeterType>& meter_types); - virtual void Render(); + virtual void Render(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); - void Update(); + void Update(); private: boost::shared_ptr<GG::Texture> m_bar_shading_texture; @@ -367,15 +375,15 @@ virtual void Render(); private: - GG::StaticGraphic* m_icon; - GG::TextControl* m_title_text; - GG::TextControl* m_main_text; + GG::StaticGraphic* m_icon; + GG::TextControl* m_title_text; + GG::TextControl* m_main_text; - static const GG::X TEXT_WIDTH; - static const GG::X TEXT_PAD; - static const GG::X ICON_WIDTH; - static const GG::Y ICON_HEIGHT; - const GG::Y ROW_HEIGHT; + static const GG::X TEXT_WIDTH; + static const GG::X TEXT_PAD; + static const GG::X ICON_WIDTH; + static const GG::Y ICON_HEIGHT; + const GG::Y ROW_HEIGHT; }; /** Gives information about inporting and exporting of resources to and from this system when mousing |
From: <geo...@us...> - 2009-05-19 10:19:23
|
Revision: 3059 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3059&view=rev Author: geoffthemedio Date: 2009-05-19 10:19:10 +0000 (Tue, 19 May 2009) Log Message: ----------- MouseWheel and ?ButtonDown forwarding for StatisticIcon, so that fleet and ship panels can be selected by clicking on the icon. Modified Paths: -------------- trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/CUIControls.h Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2009-05-19 10:15:35 UTC (rev 3058) +++ trunk/FreeOrion/UI/CUIControls.cpp 2009-05-19 10:19:10 UTC (rev 3059) @@ -998,6 +998,15 @@ Refresh(); } +void StatisticIcon::LButtonDown(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + +void StatisticIcon::RButtonDown(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + +void StatisticIcon::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ ForwardEventToParent(); } + void StatisticIcon::Refresh() { std::string text = ""; Modified: trunk/FreeOrion/UI/CUIControls.h =================================================================== --- trunk/FreeOrion/UI/CUIControls.h 2009-05-19 10:15:35 UTC (rev 3058) +++ trunk/FreeOrion/UI/CUIControls.h 2009-05-19 10:19:10 UTC (rev 3059) @@ -369,6 +369,11 @@ /** \name Mutators */ //@{ virtual void Render() {} + + virtual void LButtonDown(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); + virtual void RButtonDown(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); + void SetValue(double value, int index = 0); ///< sets displayed \a value with \a index //@} |
From: <geo...@us...> - 2009-05-21 08:49:42
|
Revision: 3072 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3072&view=rev Author: geoffthemedio Date: 2009-05-21 08:49:29 +0000 (Thu, 21 May 2009) Log Message: ----------- -Fixed issue where mapwnd sidepanel wouldn't restore properly after opening production screen and switching directly to design or research, or some other indirect series steps other than opening and closing the production screen. -Commented out some debug output Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-05-20 20:13:08 UTC (rev 3071) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-05-21 08:49:29 UTC (rev 3072) @@ -516,7 +516,7 @@ m_current_owned_system(UniverseObject::INVALID_OBJECT_ID), m_current_fleet(UniverseObject::INVALID_OBJECT_ID), m_in_production_view_mode(false), - m_sidepanel_open_before_showing_production(false), + m_sidepanel_open_before_showing_other(false), m_toolbar(0), m_food(0), m_mineral(0), @@ -1626,8 +1626,9 @@ void MapWnd::ReselectLastSystem() { - std::cout << "MapWnd::ReselectLastSystem() m_selected_system: " << m_selected_system << std::endl; - SelectSystem(m_selected_system); + if (m_selected_system != UniverseObject::INVALID_OBJECT_ID) + SelectSystem(m_selected_system); + SelectSystem(SidePanel::SystemID()); // perhaps this might be set to something else? } void MapWnd::SelectSystem(int system_id) @@ -1690,15 +1691,15 @@ void MapWnd::ReselectLastFleet() { - // DEBUG - std::cout << "MapWnd::ReselectLastFleet m_selected_fleets: " << std::endl; - for (std::set<int>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { - const UniverseObject* obj = GetUniverse().Object(*it); - if (obj) - std::cout << " " << obj->Name() << "(" << *it << ")" << std::endl; - else - std::cout << " [missing object] (" << *it << ")" << std::endl; - } + //// DEBUG + //std::cout << "MapWnd::ReselectLastFleet m_selected_fleets: " << std::endl; + //for (std::set<int>::const_iterator it = m_selected_fleets.begin(); it != m_selected_fleets.end(); ++it) { + // const UniverseObject* obj = GetUniverse().Object(*it); + // if (obj) + // std::cout << " " << obj->Name() << "(" << *it << ")" << std::endl; + // else + // std::cout << " [missing object] (" << *it << ")" << std::endl; + //} // search through stored selected fleets' ids and remove ids of missing fleets @@ -3247,6 +3248,19 @@ return true; } +void MapWnd::HideSidePanel() +{ + m_sidepanel_open_before_showing_other = m_side_panel->Visible(); // a kludge, so the sidepanel will reappear after opening and closing a full screen wnd + m_side_panel->Hide(); + DetachChild(m_side_panel); +} + +void MapWnd::RestoreSidePanel() +{ + if (m_sidepanel_open_before_showing_other) + ReselectLastSystem(); +} + void MapWnd::ShowResearch() { ClearProjectedFleetMovementLines(); @@ -3255,6 +3269,7 @@ HideSitRep(); HideProduction(); HideDesign(); + HideSidePanel(); // show the research window m_research_wnd->Show(); @@ -3269,6 +3284,7 @@ m_research_wnd->Hide(); m_btn_research->MarkNotSelected(); ShowAllPopups(); + RestoreSidePanel(); } bool MapWnd::ToggleResearch() @@ -3288,9 +3304,7 @@ HideSitRep(); HideResearch(); HideDesign(); - m_sidepanel_open_before_showing_production = m_side_panel->Visible(); // a kludge, so the sidepanel will reappear after opening and closing the production screen - m_side_panel->Hide(); - DetachChild(m_side_panel); + HideSidePanel(); // show the production window m_production_wnd->Show(); @@ -3320,10 +3334,7 @@ m_in_production_view_mode = false; m_btn_production->MarkNotSelected(); ShowAllPopups(); - if (m_sidepanel_open_before_showing_production) - SelectSystem(SidePanel::SystemID()); // shows sidepanel - else - SelectSystem(UniverseObject::INVALID_OBJECT_ID); // hides sidepanel (redundant since it was hidden while in production mode) and removes map system selection indicator that was showing while in produciton mode + RestoreSidePanel(); } bool MapWnd::ToggleProduction() @@ -3343,6 +3354,7 @@ HideSitRep(); HideResearch(); HideProduction(); + HideSidePanel(); // show the design window m_design_wnd->Show(); @@ -3360,6 +3372,7 @@ m_design_wnd->Hide(); m_btn_design->MarkNotSelected(); EnableAlphaNumAccels(); + RestoreSidePanel(); } bool MapWnd::ToggleDesign() Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-05-20 20:13:08 UTC (rev 3071) +++ trunk/FreeOrion/UI/MapWnd.h 2009-05-21 08:49:29 UTC (rev 3072) @@ -236,6 +236,9 @@ void ShowSitRep(); void HideSitRep(); + void HideSidePanel(); + void RestoreSidePanel(); + bool ToggleResearch(); void ShowResearch(); void HideResearch(); @@ -340,8 +343,10 @@ bool m_menu_showing; //!< set during ShowMenu() to prevent reentrency int m_current_owned_system; int m_current_fleet; - bool m_in_production_view_mode, m_sidepanel_open_before_showing_production; + bool m_in_production_view_mode; + bool m_sidepanel_open_before_showing_other; //!< was the sidepanel open before switching to production, research or design screens? If so, it should be restored when leaving them. + CUIToolBar* m_toolbar; StatisticIcon *m_food, *m_mineral, *m_trade, *m_population, *m_research, *m_industry; CUIButton *m_btn_siterep, *m_btn_research, *m_btn_production, *m_btn_design, *m_btn_menu; Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2009-05-20 20:13:08 UTC (rev 3071) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2009-05-21 08:49:29 UTC (rev 3072) @@ -320,12 +320,10 @@ void ProductionWnd::Update() { - std::cout << "ProductionWnd::Update() this: " << this << std::endl; + //std::cout << "ProductionWnd::Update()" << this << std::endl; UpdateInfoPanel(); UpdateQueue(); - std::cout << "ProductionWnd::Update m_build_designator_wnd: " << m_build_designator_wnd << std::endl; - m_build_designator_wnd->Update(); } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-05-20 20:13:08 UTC (rev 3071) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-05-21 08:49:29 UTC (rev 3072) @@ -1158,7 +1158,7 @@ void SidePanel::PlanetPanelContainer::SetPlanets(const std::vector<const Planet*> &plt_vec, StarType star_type) { - std::cout << "SidePanel::PlanetPanelContainer::SetPlanets( size: " << plt_vec.size() << " )" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::SetPlanets( size: " << plt_vec.size() << " )" << std::endl; // remove old panels Clear(); @@ -1238,7 +1238,7 @@ void SidePanel::PlanetPanelContainer::SelectPlanet(int planet_id) { - std::cout << "SidePanel::PlanetPanelContainer::SelectPlanet(" << planet_id << ")" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::SelectPlanet(" << planet_id << ")" << std::endl; if (planet_id != m_selected_planet_id && m_candidate_ids.find(planet_id) != m_candidate_ids.end()) { m_selected_planet_id = planet_id; bool planet_id_match_found = false; @@ -1250,7 +1250,7 @@ if (panel->PlanetID() == m_selected_planet_id) { panel->Select(true); planet_id_match_found = true; - std::cout << " ... selecting planet with id " << panel->PlanetID() << std::endl; + //std::cout << " ... selecting planet with id " << panel->PlanetID() << std::endl; } else { panel->Select(false); } @@ -1259,20 +1259,20 @@ // if a panel was marked, signal this fact if (!planet_id_match_found) { m_selected_planet_id = UniverseObject::INVALID_OBJECT_ID; - std::cout << " ... no planet with requested ID found" << std::endl; + //std::cout << " ... no planet with requested ID found" << std::endl; } } } void SidePanel::PlanetPanelContainer::SetValidSelectionPredicate(const boost::shared_ptr<UniverseObjectVisitor>& visitor) { - std::cout << "SidePanel::PlanetPanelContainer::SetValidSelectionPredicate" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::SetValidSelectionPredicate" << std::endl; m_valid_selection_predicate = visitor; } void SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates() { - std::cout << "SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::DisableNonSelectionCandidates" << std::endl; m_candidate_ids.clear(); std::set<PlanetPanel*> disabled_panels; @@ -1288,7 +1288,7 @@ if (planet->Accept(*m_valid_selection_predicate)) { m_candidate_ids.insert(planet_id); - std::cout << " ... planet " << planet->ID() << " is a selection candidate" << std::endl; + //std::cout << " ... planet " << planet->ID() << " is a selection candidate" << std::endl; } else { disabled_panels.insert(panel); } @@ -1300,7 +1300,7 @@ PlanetPanel* panel = *it; if (disabled_panels.find(panel) != disabled_panels.end()) { panel->Disable(true); - std::cout << " ... DISABLING PlanetPanel for planet " << panel->PlanetID() << std::endl; + //std::cout << " ... DISABLING PlanetPanel for planet " << panel->PlanetID() << std::endl; } else { panel->Disable(false); } @@ -1556,7 +1556,7 @@ // update planet panel container contents (applying just-set selection predicate) - std::cout << " ... setting planet panel container planets" << std::endl; + //std::cout << " ... setting planet panel container planets" << std::endl; std::vector<const Planet*> plt_vec = system->FindObjects<Planet>(); m_planet_panel_container->SetPlanets(plt_vec, system->Star()); @@ -1600,7 +1600,6 @@ } - std::cout << " END of SidePanel::RefreshImpl" << std::endl; } void SidePanel::DoLayout() |
From: <geo...@us...> - 2009-05-21 09:22:00
|
Revision: 3073 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3073&view=rev Author: geoffthemedio Date: 2009-05-21 09:21:52 +0000 (Thu, 21 May 2009) Log Message: ----------- -Removed redundant tracking of selected system in MapWnd, in favour of just calling SidePanel::SystemID. -Made MapWnd::InitTurnRendering mark new SystemIcons as selected if their system is selected in the SidePanel, fixing a problem where systems selected on the previous turn would be shown in the SidePanel, but not highlighted on the map at the start of a new turn. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-05-21 08:49:29 UTC (rev 3072) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-05-21 09:21:52 UTC (rev 3073) @@ -481,7 +481,6 @@ GG::INTERACTIVE | GG::DRAGABLE), m_backgrounds(), m_bg_scroll_rate(), - m_selected_system(UniverseObject::INVALID_OBJECT_ID), m_selected_fleets(), m_zoom_steps_in(0.0), m_side_panel(0), @@ -1046,6 +1045,8 @@ SystemIcon* icon = new SystemIcon(this, GG::X0, GG::Y0, GG::X(10), start_system->ID()); m_system_icons[start_system->ID()] = icon; icon->InstallEventFilter(this); + if (SidePanel::SystemID() == systems[i]->ID()) + icon->SetSelected(true); AttachChild(icon); // connect UI response signals. TODO: Make these configurable in GUI? @@ -1626,46 +1627,35 @@ void MapWnd::ReselectLastSystem() { - if (m_selected_system != UniverseObject::INVALID_OBJECT_ID) - SelectSystem(m_selected_system); - SelectSystem(SidePanel::SystemID()); // perhaps this might be set to something else? + if (SidePanel::SystemID() != UniverseObject::INVALID_OBJECT_ID) + SelectSystem(SidePanel::SystemID()); } void MapWnd::SelectSystem(int system_id) { std::cout << "MapWnd::SelectSystem(" << system_id << ")" << std::endl; - // consistency check - if (m_selected_system != SidePanel::SystemID()) - Logger().errorStream() << "MapWnd already selected system inconsistent with MapWnd's SidePanel's (selected) system id)"; + if (SidePanel::SystemID() != system_id) { + // remove map selection indicator from previously selected system + if (SidePanel::SystemID() != UniverseObject::INVALID_OBJECT_ID) + m_system_icons[SidePanel::SystemID()]->SetSelected(false); - if (m_selected_system != system_id) { - // remove selection indicator from previously selected system - if (m_selected_system != UniverseObject::INVALID_OBJECT_ID) - m_system_icons[m_selected_system]->SetSelected(false); - - // update internal selected system record - m_selected_system = system_id; - - // place indicator on newly selected system - if (m_selected_system != UniverseObject::INVALID_OBJECT_ID) - m_system_icons[m_selected_system]->SetSelected(true); - // set selected system on sidepanel and production screen, as appropriate if (m_in_production_view_mode) m_production_wnd->SelectSystem(system_id); // calls SidePanel::SetSystem else SidePanel::SetSystem(system_id); + + // place map selection indicator on newly selected system + if (SidePanel::SystemID() != UniverseObject::INVALID_OBJECT_ID) + m_system_icons[SidePanel::SystemID()]->SetSelected(true); } if (m_in_production_view_mode) { // don't need to do anything to ensure this->m_side_panel is visible, - // since it should be hidden if in production view mode. if that's - // not actually the case, uncomment the following lines... - //m_side_panel->Hide(); - //DetachChild(m_side_panel); + // since it should be hidden if in production view mode. return; } @@ -1673,7 +1663,8 @@ // even if selected system hasn't changed, it may be nessary to show or // hide this mapwnd's sidepanel, in case it was hidden at some point and // should be visible, or is visible and should be hidden. - if (system_id == UniverseObject::INVALID_OBJECT_ID) { + + if (SidePanel::SystemID() == UniverseObject::INVALID_OBJECT_ID) { // no selected system. hide sidepanel. m_side_panel->Hide(); DetachChild(m_side_panel); @@ -1685,8 +1676,6 @@ MoveChildUp(m_sitrep_panel); m_side_panel->Show(); } - - std::cout << "MapWnd::SelectSystem() end m_selected_system: " << m_selected_system << std::endl; } void MapWnd::ReselectLastFleet() @@ -3131,7 +3120,6 @@ m_production_wnd->Sanitize(); m_design_wnd->Sanitize(); - m_selected_system = UniverseObject::INVALID_OBJECT_ID; m_selected_fleets.clear(); m_starlane_endpoints.clear(); Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-05-21 08:49:29 UTC (rev 3072) +++ trunk/FreeOrion/UI/MapWnd.h 2009-05-21 09:21:52 UTC (rev 3073) @@ -292,7 +292,6 @@ std::vector<boost::shared_ptr<GG::Texture> > m_backgrounds; //!< starfield backgrounds std::vector<double> m_bg_scroll_rate; //!< array, the rates at which each background scrolls - int m_selected_system; std::set<int> m_selected_fleets; double m_zoom_steps_in; //!< number of zoom steps in. each 1.0 step increases display scaling by the same zoom step factor |
From: <geo...@us...> - 2009-05-21 09:53:15
|
Revision: 3074 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3074&view=rev Author: geoffthemedio Date: 2009-05-21 09:53:07 +0000 (Thu, 21 May 2009) Log Message: ----------- Commented out (hopefully) all the remaining debug console output Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-05-21 09:21:52 UTC (rev 3073) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-05-21 09:53:07 UTC (rev 3074) @@ -313,7 +313,7 @@ void BuildDesignatorWnd::BuildSelector::SetBuildLocation(int location_id, bool refresh_list) { - std::cout << "BuildDesignatorWnd::BuildSelector::SetBuildLocation(" << location_id << ")" << std::endl; + //std::cout << "BuildDesignatorWnd::BuildSelector::SetBuildLocation(" << location_id << ")" << std::endl; int old_location = m_build_location; if (m_build_location != location_id) { m_build_location = location_id; @@ -618,7 +618,7 @@ void BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked(GG::ListBox::iterator it) { - std::cout << "BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked" << std::endl; + //std::cout << "BuildDesignatorWnd::BuildSelector::BuildItemDoubleClicked" << std::endl; if ((*it)->Disabled()) return; BuildType build_type = m_build_types[it]; @@ -751,7 +751,7 @@ void BuildDesignatorWnd::SelectSystem(int system_id) { - std::cout << "BuildDesignatorWnd::SelectSystem(" << system_id << ")" << std::endl; + //std::cout << "BuildDesignatorWnd::SelectSystem(" << system_id << ")" << std::endl; if (system_id == SidePanel::SystemID()) { // don't need to do anything. already showing the requested system. @@ -767,7 +767,7 @@ void BuildDesignatorWnd::SelectPlanet(int planet_id) { - std::cout << "BuildDesignatorWnd::SelectPlanet(" << planet_id << ")" << std::endl; + //std::cout << "BuildDesignatorWnd::SelectPlanet(" << planet_id << ")" << std::endl; SidePanel::SelectPlanet(planet_id); if (planet_id != UniverseObject::INVALID_OBJECT_ID) m_system_default_planets[SidePanel::SystemID()] = planet_id; @@ -776,7 +776,7 @@ void BuildDesignatorWnd::Update() { - std::cout << "BuildDesignatorWnd::Update()" << std::endl; + //std::cout << "BuildDesignatorWnd::Update()" << std::endl; SidePanel::Update(); m_build_selector->Refresh(); m_enc_detail_panel->Refresh(); @@ -784,7 +784,7 @@ void BuildDesignatorWnd::Reset() { - std::cout << "BuildDesignatorWnd::Reset()" << std::endl; + //std::cout << "BuildDesignatorWnd::Reset()" << std::endl; SelectSystem(UniverseObject::INVALID_OBJECT_ID); ShowAllTypes(false); // show all types without populating the list HideAvailability(false, false); // hide unavailable items without populating the list @@ -795,7 +795,7 @@ void BuildDesignatorWnd::Clear() { - std::cout << "BuildDesignatorWnd::Clear()" << std::endl; + //std::cout << "BuildDesignatorWnd::Clear()" << std::endl; SidePanel::SetSystem(UniverseObject::INVALID_OBJECT_ID); Reset(); m_system_default_planets.clear(); @@ -900,7 +900,7 @@ void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, const std::string& item, int num_to_build) { - std::cout << "BuildDesignatorWnd::BuildItemRequested item name: " << item << std::endl; + //std::cout << "BuildDesignatorWnd::BuildItemRequested item name: " << item << std::endl; Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); if (empire && empire->BuildableItem(build_type, item, BuildLocation())) AddNamedBuildToQueueSignal(build_type, item, num_to_build, BuildLocation()); @@ -908,7 +908,7 @@ void BuildDesignatorWnd::BuildItemRequested(BuildType build_type, int design_id, int num_to_build) { - std::cout << "BuildDesignatorWnd::BuildItemRequested design id: " << design_id << std::endl; + //std::cout << "BuildDesignatorWnd::BuildItemRequested design id: " << design_id << std::endl; Empire* empire = Empires().Lookup(HumanClientApp::GetApp()->EmpireID()); if (empire && empire->BuildableItem(build_type, design_id, BuildLocation())) AddIDedBuildToQueueSignal(build_type, design_id, num_to_build, BuildLocation()); Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-05-21 09:21:52 UTC (rev 3073) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-05-21 09:53:07 UTC (rev 3074) @@ -1633,9 +1633,8 @@ void MapWnd::SelectSystem(int system_id) { - std::cout << "MapWnd::SelectSystem(" << system_id << ")" << std::endl; + //std::cout << "MapWnd::SelectSystem(" << system_id << ")" << std::endl; - if (SidePanel::SystemID() != system_id) { // remove map selection indicator from previously selected system if (SidePanel::SystemID() != UniverseObject::INVALID_OBJECT_ID) @@ -1712,7 +1711,7 @@ void MapWnd::SelectPlanet(int planetID) { - std::cout << "MapWnd::SelectPlanet(" << planetID << ")" << std::endl; + //std::cout << "MapWnd::SelectPlanet(" << planetID << ")" << std::endl; m_production_wnd->SelectPlanet(planetID); // calls SidePanel::SelectPlanet() } @@ -1726,7 +1725,7 @@ FleetUIManager& manager = FleetUIManager::GetFleetUIManager(); if (!fleet) { - std::cout << "MapWnd::SelectFleet selecting no fleet: deselecting all selected fleets." << std::endl; + //std::cout << "MapWnd::SelectFleet selecting no fleet: deselecting all selected fleets." << std::endl; // first deselect any selected fleets in non-active fleet wnd. this should // not emit any signals about the active fleet wnd's fleets changing @@ -3101,7 +3100,7 @@ void MapWnd::Sanitize() { - std::cout << "MapWnd::Sanitize()" << std::endl; + //std::cout << "MapWnd::Sanitize()" << std::endl; Cleanup(); const GG::X SIDEPANEL_WIDTH = GG::X(GetOptionsDB().Get<int>("UI.sidepanel-width")); @@ -3713,7 +3712,7 @@ void MapWnd::UpdateEmpireResourcePools() { - std::cout << "MapWnd::UpdateEmpireResourcePools" << std::endl; + //std::cout << "MapWnd::UpdateEmpireResourcePools" << std::endl; Empire *empire = HumanClientApp::GetApp()->Empires().Lookup( HumanClientApp::GetApp()->EmpireID() ); /* Recalculate stockpile, available, production, predicted change of resources. When resourcepools update, they emit ChangeSignal, which is connected to MapWnd::RefreshFoodResourceIndicator, which Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2009-05-21 09:21:52 UTC (rev 3073) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2009-05-21 09:53:07 UTC (rev 3074) @@ -311,7 +311,7 @@ void ProductionWnd::Reset() { - std::cout << "ProductionWnd::Reset()" << std::endl; + //std::cout << "ProductionWnd::Reset()" << std::endl; UpdateInfoPanel(); UpdateQueue(); m_queue_lb->BringRowIntoView(m_queue_lb->begin()); @@ -334,7 +334,7 @@ void ProductionWnd::SelectPlanet(int planet_id) { - std::cout << "ProductionWnd::SelectPlanet(" << planet_id << ")" << std::endl; + //std::cout << "ProductionWnd::SelectPlanet(" << planet_id << ")" << std::endl; m_build_designator_wnd->SelectPlanet(planet_id); } @@ -420,7 +420,7 @@ void ProductionWnd::QueueItemDeletedSlot(GG::ListBox::iterator it) { - std::cout << "ProductionWnd::QueueItemDeletedSlot" << std::endl; + //std::cout << "ProductionWnd::QueueItemDeletedSlot" << std::endl; HumanClientApp::GetApp()->Orders().IssueOrder( OrderPtr(new ProductionQueueOrder(HumanClientApp::GetApp()->EmpireID(), std::distance(m_queue_lb->begin(), it)))); @@ -428,12 +428,12 @@ void ProductionWnd::QueueItemClickedSlot(GG::ListBox::iterator it, const GG::Pt& pt) { - std::cout << "ProductionWnd::QueueItemClickedSlot" << std::endl; + //std::cout << "ProductionWnd::QueueItemClickedSlot" << std::endl; m_build_designator_wnd->CenterOnBuild(std::distance(m_queue_lb->begin(), it)); } void ProductionWnd::QueueItemDoubleClickedSlot(GG::ListBox::iterator it) { - std::cout << "ProductionWnd::QueueItemDoubleClickedSlot" << std::endl; + //std::cout << "ProductionWnd::QueueItemDoubleClickedSlot" << std::endl; m_queue_lb->ErasedSignal(it); } Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-05-21 09:21:52 UTC (rev 3073) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-05-21 09:53:07 UTC (rev 3074) @@ -965,7 +965,7 @@ void SidePanel::PlanetPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { - std::cout << "SidePanel::PlanetPanel::LClick m_planet_id: " << m_planet_id << std::endl; + //std::cout << "SidePanel::PlanetPanel::LClick m_planet_id: " << m_planet_id << std::endl; if (!Disabled()) LClickedSignal(m_planet_id); } @@ -1320,7 +1320,7 @@ void SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels() { - std::cout << "SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels" << std::endl; + //std::cout << "SidePanel::PlanetPanelContainer::RefreshAllPlanetPanels" << std::endl; for (std::vector<PlanetPanel*>::iterator it = m_planet_panels.begin(); it != m_planet_panels.end(); ++it) (*it)->Refresh(); } @@ -1426,14 +1426,14 @@ void SidePanel::Update() { - std::cout << "SidePanel::Update" << std::endl; + //std::cout << "SidePanel::Update" << std::endl; for (std::set<SidePanel*>::iterator it = s_side_panels.begin(); it != s_side_panels.end(); ++it) (*it)->UpdateImpl(); } void SidePanel::UpdateImpl() { - std::cout << "SidePanel::UpdateImpl" << std::endl; + //std::cout << "SidePanel::UpdateImpl" << std::endl; if (m_system_resource_summary) m_system_resource_summary->Update(); // update individual PlanetPanels in PlanetPanelContainer, then redo layout of panel container @@ -1442,7 +1442,7 @@ void SidePanel::Refresh() { - std::cout << "SidePanel::Refresh" << std::endl; + //std::cout << "SidePanel::Refresh" << std::endl; // disconnect any existing system and fleet signals for (std::set<boost::signals::connection>::iterator it = s_system_connections.begin(); it != s_system_connections.end(); ++it) @@ -1481,7 +1481,7 @@ void SidePanel::RefreshImpl() { - std::cout << "SidePanel::RefreshImpl" << std::endl; + //std::cout << "SidePanel::RefreshImpl" << std::endl; Sound::TempUISoundDisabler sound_disabler; m_planet_panel_container->Clear(); @@ -1673,14 +1673,14 @@ void SidePanel::PlanetSelected(int planet_id) { - std::cout << "SidePanel::PlanetSelected(" << planet_id << ")" << std::endl; + //std::cout << "SidePanel::PlanetSelected(" << planet_id << ")" << std::endl; if (SelectedPlanetID() != planet_id) PlanetSelectedSignal(planet_id); } void SidePanel::FleetInserted(Fleet& fleet) { - std::cout << "SidePanel::FleetInserted" << std::endl; + //std::cout << "SidePanel::FleetInserted" << std::endl; s_fleet_state_change_signals[fleet.ID()].disconnect(); // in case already present s_fleet_state_change_signals[fleet.ID()] = GG::Connect(fleet.StateChangedSignal, &SidePanel::FleetStateChanged); SidePanel::Update(); @@ -1688,7 +1688,7 @@ void SidePanel::FleetRemoved(Fleet& fleet) { - std::cout << "SidePanel::FleetRemoved" << std::endl; + //std::cout << "SidePanel::FleetRemoved" << std::endl; std::map<int, boost::signals::connection>::iterator it = s_fleet_state_change_signals.find(fleet.ID()); if (it != s_fleet_state_change_signals.end()) { it->second.disconnect(); @@ -1699,7 +1699,7 @@ void SidePanel::FleetStateChanged() { - std::cout << "SidePanel::FleetStateChanged" << std::endl; + //std::cout << "SidePanel::FleetStateChanged" << std::endl; SidePanel::Update(); } @@ -1732,7 +1732,7 @@ void SidePanel::SelectPlanetImpl(int planet_id) { - std::cout << "SidePanel::SelectPlanetImpl(" << planet_id << ")" << std::endl; + //std::cout << "SidePanel::SelectPlanetImpl(" << planet_id << ")" << std::endl; m_planet_panel_container->SelectPlanet(planet_id); } @@ -1752,6 +1752,6 @@ void SidePanel::EnableSelection(bool enable) { - std::cout << "EnableSelection(" << enable << ")" << std::endl; + //std::cout << "SidePanel::EnableSelection(" << enable << ")" << std::endl; m_selection_enabled = enable; } |
From: <geo...@us...> - 2009-05-23 22:05:53
|
Revision: 3091 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3091&view=rev Author: geoffthemedio Date: 2009-05-23 22:05:48 +0000 (Sat, 23 May 2009) Log Message: ----------- -Made system names scale with zoom, within limits. -Added MouseWheel forwarding to SystemIcon, so map zoom scrolls over systems function. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h trunk/FreeOrion/UI/SystemIcon.cpp trunk/FreeOrion/UI/SystemIcon.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-05-23 20:25:13 UTC (rev 3090) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-05-23 22:05:48 UTC (rev 3091) @@ -2306,6 +2306,15 @@ return static_cast<int>(ClientUI::SystemIconSize() * ZoomFactor()); } +int MapWnd::SystemNamePts() const +{ + const int SYSTEM_NAME_MINIMUM_PTS = 6; // limit to absolute minimum point size + const double MAX_NAME_ZOOM_FACTOR = 1.5; // limit to relative max above standard UI font size + const double NAME_ZOOM_FACTOR = std::min(MAX_NAME_ZOOM_FACTOR, ZoomFactor()); + const int ZOOMED_PTS = static_cast<int>(ClientUI::Pts() * NAME_ZOOM_FACTOR); + return std::max(ZOOMED_PTS, SYSTEM_NAME_MINIMUM_PTS); +} + double MapWnd::SystemHaloScaleFactor() const { return 1.0 + log10(ZoomFactor()); Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-05-23 20:25:13 UTC (rev 3090) +++ trunk/FreeOrion/UI/MapWnd.h 2009-05-23 22:05:48 UTC (rev 3091) @@ -72,16 +72,29 @@ double ZoomFactor() const; int SystemIconSize() const; + int SystemNamePts() const; double SystemHaloScaleFactor() const; - FleetButton::SizeType FleetButtonSizeType() const; //!< returns what size type (tiny, small, large) fleet buttons on this map are shown at + /** returns what size type (tiny, small, large) fleet buttons on this map + * are shown at */ + FleetButton::SizeType FleetButtonSizeType() const; + SidePanel* GetSidePanel() const; - void GetSaveGameUIData(SaveGameUIData& data) const; //!< populates the relevant UI state that should be restored after a save-and-load cycle - bool InProductionViewMode() const; //!< returns true iff this MapWnd is visible and usable for interaction, but the allowed interactions are restricted to those appropriate to the production screen - /* returns the position on the screen that corresponds to the specified universe X and Y coordinates. */ + /** populates the relevant UI state that should be restored after a + * save-and-load cycle */ + void GetSaveGameUIData(SaveGameUIData& data) const; + + /** returns true iff this MapWnd is visible and usable for interaction, but + * the allowed interactions are restricted to those appropriate to the + * production screen */ + bool InProductionViewMode() const; + + /** returns the position on the screen that corresponds to the specified + * universe X and Y coordinates. */ GG::Pt ScreenCoordsFromUniversePosition(double universe_x, double universe_y) const; - /* returns the universe position (X and Y in pair) that corresponds to the specified screen coordinates. */ + /** returns the universe position (X and Y in pair) that corresponds to + * the specified screen coordinates. */ std::pair<double, double> UniversePositionFromScreenCoords(GG::Pt screen_coords) const; //!@} Modified: trunk/FreeOrion/UI/SystemIcon.cpp =================================================================== --- trunk/FreeOrion/UI/SystemIcon.cpp 2009-05-23 20:25:13 UTC (rev 3090) +++ trunk/FreeOrion/UI/SystemIcon.cpp 2009-05-23 22:05:48 UTC (rev 3091) @@ -171,8 +171,6 @@ // state change signals for system itself and fleets in it Connect(m_system.StateChangedSignal, &SystemIcon::Refresh, this); - SetName(m_system.Name()); - // everything is resized by SizeMove const int DEFAULT_SIZE = 10; @@ -197,6 +195,7 @@ delete m_selection_indicator; delete m_mouseover_indicator; delete m_tiny_graphic; + delete m_colored_name; } const System& SystemIcon::GetSystem() const @@ -346,7 +345,7 @@ if (m_mouseover_indicator) m_mouseover_indicator->SizeMove(ind_ul, ind_lr); - PositionSystemName(); + Refresh(); } void SystemIcon::Render() @@ -403,9 +402,11 @@ AttachChild(m_mouseover_indicator); MoveChildUp(m_mouseover_indicator); } - if (m_colored_name) - m_colored_name->Show(); + // show system name if not by default + if (!m_showing_name) + AttachChild(m_colored_name); + PlaySystemIconRolloverSound(); MouseEnteringSignal(m_system.ID()); @@ -417,12 +418,19 @@ if (m_mouseover_indicator) { DetachChild(m_mouseover_indicator); } - if (!m_showing_name && m_colored_name) - m_colored_name->Hide(); + // hide name if not showing by default + if (!m_showing_name) + DetachChild(m_colored_name); + MouseLeavingSignal(m_system.ID()); } +void SystemIcon::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) +{ + ForwardEventToParent(); +} + void SystemIcon::SetSelected(bool selected) { m_selected = selected; @@ -441,30 +449,42 @@ void SystemIcon::Refresh() { - SetName(m_system.Name()); + SetName(m_system.Name()); // sets GG::Control name. doesn't affect displayed system name - // set up the name text controls + // remove existing system name control + delete m_colored_name; m_colored_name = 0; + + // create new system name control if (!m_system.Name().empty()) { - delete m_colored_name; - m_colored_name = new OwnerColoredSystemName(m_system, ClientUI::Pts() + 3); - AttachChild(m_colored_name); - m_showing_name = true; + // get font size + int name_pts = ClientUI::Pts(); + if (const MapWnd* map_wnd = ClientUI::GetClientUI()->GetMapWnd()) { + name_pts = map_wnd->SystemNamePts(); + } + + // create and position + m_colored_name = new OwnerColoredSystemName(m_system, name_pts); PositionSystemName(); + + // attach if appropriate, to display + if (m_showing_name) + AttachChild(m_colored_name); } } void SystemIcon::ShowName() { - if (m_colored_name) - m_colored_name->Show(); m_showing_name = true; + if (!m_colored_name) + Refresh(); + else + AttachChild(m_colored_name); } void SystemIcon::HideName() { - if (m_colored_name) - m_colored_name->Hide(); m_showing_name = false; + DetachChild(m_colored_name); } void SystemIcon::PositionSystemName() Modified: trunk/FreeOrion/UI/SystemIcon.h =================================================================== --- trunk/FreeOrion/UI/SystemIcon.h 2009-05-23 20:25:13 UTC (rev 3090) +++ trunk/FreeOrion/UI/SystemIcon.h 2009-05-23 22:05:48 UTC (rev 3091) @@ -63,14 +63,18 @@ //! \name Mutators //!@{ virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); + virtual void Render(); void ManualRender(double halo_scale_factor); //!< Draw disc and halo textures + virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void LDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void RDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void MouseEnter(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void MouseLeave(); + virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); + void SetSelected(bool selected = true); //!< shows/hides the system selection indicator over this system void Refresh(); //!< Resets system name text and calls RefreshFleetButtons(). Should be called after an icon is attached to the map |
From: <tz...@us...> - 2009-08-22 04:07:06
|
Revision: 3127 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3127&view=rev Author: tzlaine Date: 2009-08-22 04:06:51 +0000 (Sat, 22 Aug 2009) Log Message: ----------- Removed Durgha-specific Z-scaling cruft. Modified Paths: -------------- trunk/FreeOrion/UI/CombatSetupWnd.cpp trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatSetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-08-22 04:05:59 UTC (rev 3126) +++ trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-08-22 04:06:51 UTC (rev 3127) @@ -348,10 +348,6 @@ entity->setMaterialName("ship_being_placed"); } m_placeable_ship_node->attachObject(entity); - - // TODO: This is only here because the Durgha model is upside - // down. Remove it when this is fixed. - m_placeable_ship_node->yaw(Ogre::Radian(Ogre::Math::PI)); } } } Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-08-22 04:05:59 UTC (rev 3126) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-08-22 04:06:51 UTC (rev 3127) @@ -1918,10 +1918,6 @@ node->attachObject(entity); node->setUserAny(Ogre::Any(combat_ship)); - // TODO: This is only here because the Durgha model is upside down. Remove - // it when this is fixed. - node->yaw(Ogre::Radian(Ogre::Math::PI)); - node->setPosition(ToOgre(combat_ship->position())); node->setOrientation(Ogre::Quaternion(ToOgre(combat_ship->side()), ToOgre(combat_ship->forward()), @@ -1937,9 +1933,12 @@ m_collision_objects.insert(collision_object); btMatrix3x3 identity; identity.setIdentity(); - // TODO: Remove z-flip scaling when models are right. +#if 0 + // TODO: Remove this when it's removal can be verified as correct + // (i.e. after placement of ships is implemented). btMatrix3x3 scaled = identity.scaled(btVector3(1.0, 1.0, -1.0)); collision_object->getWorldTransform().setBasis(scaled); +#endif collision_object->getWorldTransform().setOrigin(ToCollision(node->getPosition())); collision_object->setCollisionShape(collision_shape); m_collision_world->addCollisionObject(collision_object); |
From: <geo...@us...> - 2009-09-11 06:08:54
|
Revision: 3158 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3158&view=rev Author: geoffthemedio Date: 2009-09-11 06:08:45 +0000 (Fri, 11 Sep 2009) Log Message: ----------- Modified DoubleToString to not have an integerize parameter, and to never show values with SI prefixes for powers less than 0. Numbers less than 1 now get shown as 0.XXX instead of XXXm. Modified Paths: -------------- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/CUIControls.h trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/ClientUI.h trunk/FreeOrion/UI/CombatSetupWnd.cpp trunk/FreeOrion/UI/FleetWnd.cpp trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/ProductionWnd.cpp Modified: trunk/FreeOrion/UI/BuildDesignatorWnd.cpp =================================================================== --- trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/BuildDesignatorWnd.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -493,7 +493,7 @@ // cost / turn, and minimum production turns const std::pair<double, int> cost_time = empire->ProductionCostAndTime(BT_BUILDING, name); - std::string cost_text = DoubleToString(cost_time.first, 3, false, false); + std::string cost_text = DoubleToString(cost_time.first, 3, false); row->push_back(cost_text, default_font, ClientUI::TextColor()); std::string time_text = boost::lexical_cast<std::string>(cost_time.second); row->push_back(time_text, default_font, ClientUI::TextColor()); @@ -548,7 +548,7 @@ // cost / turn, and minimum production turns const std::pair<double, int> cost_time = empire->ProductionCostAndTime(BT_SHIP, ship_design_id); - std::string cost_text = DoubleToString(cost_time.first, 3, false, false); + std::string cost_text = DoubleToString(cost_time.first, 3, false); row->push_back(cost_text, default_font, ClientUI::TextColor()); std::string time_text = boost::lexical_cast<std::string>(cost_time.second); row->push_back(time_text, default_font, ClientUI::TextColor()); Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/CUIControls.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -923,12 +923,12 @@ // class StatisticIcon /////////////////////////////////////// StatisticIcon::StatisticIcon(GG::X x, GG::Y y, GG::X w, GG::Y h, const boost::shared_ptr<GG::Texture> texture, - double value, int digits, bool integerize, bool showsign, + double value, int digits, bool showsign, GG::Flags<GG::WndFlag> flags/* = GG::INTERACTIVE*/) : GG::Control(x, y, w, h, flags), m_num_values(1), m_values(std::vector<double>(1, value)), m_digits(std::vector<int>(1, digits)), - m_integerize(std::vector<bool>(1, integerize)), m_show_signs(std::vector<bool>(1, showsign)), + m_show_signs(std::vector<bool>(1, showsign)), m_icon(0), m_text(0) { int font_space = ClientUI::Pts()*3/2; @@ -951,12 +951,12 @@ StatisticIcon::StatisticIcon(GG::X x, GG::Y y, GG::X w, GG::Y h, const boost::shared_ptr<GG::Texture> texture, double value0, double value1, int digits0, int digits1, - bool integerize0, bool integerize1, bool showsign0, bool showsign1, + bool showsign0, bool showsign1, GG::Flags<GG::WndFlag> flags/* = GG::INTERACTIVE*/) : GG::Control(x, y, w, h, flags), m_num_values(2), m_values(std::vector<double>(2, 0.0)), m_digits(std::vector<int>(2, 2)), - m_integerize(std::vector<bool>(2, false)), m_show_signs(std::vector<bool>(2, false)), + m_show_signs(std::vector<bool>(2, false)), m_icon(0), m_text(0) { // arrange child controls horizontally if icon is wider than it is high, or vertically otherwise @@ -972,8 +972,6 @@ m_values[1] = value1; m_digits[0] = digits0; m_digits[1] = digits1; - m_integerize[0] = integerize0; - m_integerize[1] = integerize1; m_show_signs[0] = showsign0; m_show_signs[1] = showsign1; AttachChild(m_icon); @@ -989,7 +987,6 @@ m_num_values = index + 1; m_values.resize(m_num_values, 0.0); m_show_signs.resize(m_num_values, m_show_signs[0]); - m_integerize.resize(m_num_values, m_integerize[0]); m_digits.resize(m_num_values, m_digits[0]); } m_values[index] = value; @@ -1011,13 +1008,12 @@ // first value: always present std::string clr_tag = GG::RgbaTag(ValueColor(0)); - text += clr_tag + DoubleToString(m_values[0], m_digits[0], m_integerize[0], m_show_signs[0]) + "</rgba>"; - + text += clr_tag + DoubleToString(m_values[0], m_digits[0], m_show_signs[0]) + "</rgba>"; + // second value: may or may not be present - if (m_num_values > 1) - { + if (m_num_values > 1) { clr_tag = GG::RgbaTag(ValueColor(1)); - text += " (" + clr_tag + DoubleToString(m_values[1], m_digits[1], m_integerize[1], m_show_signs[1]) + "</rgba>)"; + text += " (" + clr_tag + DoubleToString(m_values[1], m_digits[1], m_show_signs[1]) + "</rgba>)"; } m_text->SetText(text); @@ -1025,7 +1021,7 @@ GG::Clr StatisticIcon::ValueColor(int index) const { - int effectiveSign = EffectiveSign(m_values.at(index), m_integerize.at(index)); + int effectiveSign = EffectiveSign(m_values.at(index)); if (index == 0) return ClientUI::TextColor(); Modified: trunk/FreeOrion/UI/CUIControls.h =================================================================== --- trunk/FreeOrion/UI/CUIControls.h 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/CUIControls.h 2009-09-11 06:08:45 UTC (rev 3158) @@ -358,12 +358,12 @@ public: /** \name Structors */ //@{ StatisticIcon(GG::X x, GG::Y y, GG::X w, GG::Y h, const boost::shared_ptr<GG::Texture> texture, - double value, int digits, bool integerize, bool showsign, + double value, int digits, bool showsign, GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< initializes with one value StatisticIcon(GG::X x, GG::Y y, GG::X w, GG::Y h, const boost::shared_ptr<GG::Texture> texture, double value0, double value1, int digits0, int digits1, - bool integerize0, bool integerize1, bool showsign0, bool showsign1, + bool showsign0, bool showsign1, GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< initializes with two values //@} @@ -385,7 +385,6 @@ std::vector<double> m_values; std::vector<int> m_digits; - std::vector<bool> m_integerize; std::vector<bool> m_show_signs; GG::StaticGraphic* m_icon; Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/ClientUI.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -683,14 +683,11 @@ const double LARGE_UI_DISPLAY_VALUE = 9.99999999e+9; const double UNKNOWN_UI_DISPLAY_VALUE = std::numeric_limits<double>::infinity(); -int EffectiveSign(double val, bool integerize) +int EffectiveSign(double val) { if (val == UNKNOWN_UI_DISPLAY_VALUE) return 0; - if (integerize) - val = floor(val); - if (std::abs(val) >= SMALL_UI_DISPLAY_VALUE) { if (val >= 0) return 1; @@ -701,11 +698,12 @@ return 0; } -std::string DoubleToString(double val, int digits, bool integerize, bool showsign) +std::string DoubleToString(double val, int digits, bool always_show_sign) { std::string text = ""; - // minimum digits is 2. Less can't always be displayed with powers of 1000 base + // minimum digits is 2. If digits was 1, then 30 couldn't be displayed, + // as 0.1k is too much and 9 is too small and just 30 is 2 digits digits = std::max(digits, 2); // default result for sentinel value @@ -714,12 +712,6 @@ double mag = std::abs(val); - // integerize? - if (integerize) { - mag = floor(mag + 0.499); // round magnitude to nearest integer (with slight down bias) - if (mag == 0.0) return "0"; - } - // early termination if magnitude is 0 if (mag == 0.0) { std::string format; @@ -729,37 +721,28 @@ } // prepend signs if neccessary - int effectiveSign = EffectiveSign(val, integerize); + int effectiveSign = EffectiveSign(val); if (effectiveSign == -1) { text += "-"; } else { - if (showsign) text += "+"; + if (always_show_sign) text += "+"; } if (mag > LARGE_UI_DISPLAY_VALUE) mag = LARGE_UI_DISPLAY_VALUE; - // if digits 0 or negative, return full precision value - if (digits < 1) { - text += boost::lexical_cast<std::string>(mag); - return text; - } - // if value is effectively 0, avoid unnecessary later processing if (effectiveSign == 0) { - if (integerize) { - text = "0"; - } else { - text = "0.0"; - for (int n = 2; n < digits; ++n) text += "0"; // fill in 0's to required number of digits - } + text = "0.0"; + for (int n = 2; n < digits; ++n) + text += "0"; // fill in 0's to required number of digits return text; } // power of 10 of highest valued digit in number - int pow10 = static_cast<int>(floor(log10(mag))); // = 2 for 234.4 (100's), = 4 for 45324 (10000's) + int pow10 = static_cast<int>(floor(log10(mag))); // = 2 (100's) for 234.4, = 4 (10000's) for 45324 - // power of 10 of lowest digit to be included in number (limited by digits) - int LDPow10 = pow10 - digits + 1; // = 1 for 234.4 and digits = 2 (10's) + // power of 10 of lowest digit to be included in number + int LDPow10 = std::max(pow10 - digits + 1, -digits + 1); // = 1 (10's) for 234.4 and digits = 2, = -1 (0.1's) for anything smaller than 1.0 // Lowest Digit's (number of) Digits Above Next Lowest Power of 1000. Can be 0, 1 or 2 int LDDANLP1000; @@ -785,11 +768,10 @@ else unitPow10 = LDNHP1000; - if (integerize && unitPow10 < 0) unitPow10 = 0; if (pow10 < unitPow10) digitCor = -1; // if value is less than the base unit, there will be a leading 0 using up one digit /* round number down at lowest digit to be displayed, to prevent lexical_cast from rounding up - in cases like 0.998k with 2 digits -> 1.00k */ + in cases like 0.998k with 2 digits -> 1.00k instead of 0.99k (as it should be) */ double roundingFactor = pow(10.0, static_cast<double>(pow10 - digits + 1)); mag /= roundingFactor; mag = floor(mag); @@ -801,8 +783,7 @@ // total digits int totalDigits = digits + digitCor; // fraction digits: - int fractionDigits = 0; - if (!integerize) fractionDigits = unitPow10 - LDPow10; + int fractionDigits = unitPow10 - LDPow10; std::string format; format += "%" + boost::lexical_cast<std::string>(totalDigits) + "." + Modified: trunk/FreeOrion/UI/ClientUI.h =================================================================== --- trunk/FreeOrion/UI/ClientUI.h 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/ClientUI.h 2009-09-11 06:08:45 UTC (rev 3158) @@ -207,10 +207,10 @@ * positive values and -1 for negative values if their absolute value is * larger than SMALL VALUE, and returns 0 for zero values or values with * absolute value less than SMALL_UI_DISPLAY_VALUE */ -int EffectiveSign(double val, bool integerize); +int EffectiveSign(double val); -/** Converts double to string with \a digits significant figures. Represents - * large or small numbers with SI prefixes. */ -std::string DoubleToString(double val, int digits, bool integerize, bool showsign); +/** Converts double to string with \a digits digits. Represents large numbers + * with SI prefixes. */ +std::string DoubleToString(double val, int digits, bool always_show_sign); #endif // _ClientUI_h_ Modified: trunk/FreeOrion/UI/CombatSetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -90,7 +90,7 @@ for (std::vector<MeterType>::const_iterator it = meters.begin(); it != meters.end(); ++it) { StatisticIcon* icon = new StatisticIcon(GG::X0, GG::Y0, StatIconWidth(), StatIconHeight(), - ClientUI::MeterIcon(*it), 0, 0, true, false); + ClientUI::MeterIcon(*it), 0, 0, false); m_stat_icons.push_back(std::make_pair(*it, icon)); AttachChild(icon); Modified: trunk/FreeOrion/UI/FleetWnd.cpp =================================================================== --- trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/FleetWnd.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -462,7 +462,7 @@ for (std::vector<MeterType>::const_iterator it = meters.begin(); it != meters.end(); ++it) { StatisticIcon* icon = new StatisticIcon(GG::X0, GG::Y0, StatIconWidth(), StatIconHeight(), - ClientUI::MeterIcon(*it), 0, 0, true, false); + ClientUI::MeterIcon(*it), 0, 0, false); m_stat_icons.push_back(std::make_pair(MeterStatString(*it), icon)); AttachChild(icon); @@ -475,7 +475,7 @@ // speed stat icon tooltip StatisticIcon* icon = new StatisticIcon(GG::X0, GG::Y0, StatIconWidth(), StatIconHeight(), - SpeedIcon(), 0, 0, true, false); + SpeedIcon(), 0, 0, false); m_stat_icons.push_back(std::make_pair(SPEED_STAT_STRING, icon)); AttachChild(icon); @@ -777,7 +777,7 @@ // stat icon for fleet fuel StatisticIcon* icon = new StatisticIcon(GG::X0, GG::Y0, StatIconWidth(), StatIconHeight(), - ClientUI::MeterIcon(METER_FUEL), 0, 0, true, false); + ClientUI::MeterIcon(METER_FUEL), 0, 0, false); m_stat_icons.push_back(std::make_pair(MeterStatString(METER_FUEL), icon)); icon->SetBrowseModeTime(tooltip_delay); icon->SetBrowseText(StatTooltip(MeterStatString(METER_FUEL))); @@ -785,7 +785,7 @@ // stat icon for fleet speed icon = new StatisticIcon(GG::X0, GG::Y0, StatIconWidth(), StatIconHeight(), - SpeedIcon(), 0, 0, true, false); + SpeedIcon(), 0, 0, false); m_stat_icons.push_back(std::make_pair(SPEED_STAT_STRING, icon)); icon->SetBrowseModeTime(tooltip_delay); icon->SetBrowseText(StatTooltip(SPEED_STAT_STRING)); Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -42,7 +42,7 @@ clr = ClientUI::StatIncrColor(); else if (number < 0.0) clr = ClientUI::StatDecrColor(); - return ColourWrappedtext(DoubleToString(number, 3, false, true), clr); + return ColourWrappedtext(DoubleToString(number, 3, true), clr); } /** Returns GG::Clr with which to display programatically coloured things @@ -206,11 +206,11 @@ GG::Y icon_height(ClientUI::Pts()*4/3); m_pop_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_POPULATION), - 0, 3, false, false); + 0, 3, false); AttachChild(m_pop_stat); m_health_stat = new StatisticIcon(w/2, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_HEALTH), - 0, 3, false, false); + 0, 3, false); AttachChild(m_health_stat); @@ -496,23 +496,23 @@ // small resource indicators - for use when panel is collapsed m_farming_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_FARMING), - 0, 3, false, false); + 0, 3, false); AttachChild(m_farming_stat); m_mining_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_MINING), - 0, 3, false, false); + 0, 3, false); AttachChild(m_mining_stat); m_industry_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_INDUSTRY), - 0, 3, false, false); + 0, 3, false); AttachChild(m_industry_stat); m_research_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_RESEARCH), - 0, 3, false, false); + 0, 3, false); AttachChild(m_research_stat); m_trade_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_TRADE), - 0, 3, false, false); + 0, 3, false); AttachChild(m_trade_stat); @@ -981,23 +981,23 @@ // small meter indicators - for use when panel is collapsed m_fleet_supply_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_SUPPLY), - 0, 3, false, false); + 0, 3, false); AttachChild(m_fleet_supply_stat); m_shield_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_SHIELD), - 0, 3, false, false); + 0, 3, false); AttachChild(m_shield_stat); m_defense_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_DEFENSE), - 0, 3, false, false); + 0, 3, false); AttachChild(m_defense_stat); m_detection_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_DETECTION), - 0, 3, false, false); + 0, 3, false); AttachChild(m_detection_stat); m_stealth_stat = new StatisticIcon(GG::X0, GG::Y0, icon_width, icon_height, ClientUI::MeterIcon(METER_STEALTH), - 0, 3, false, false); + 0, 3, false); AttachChild(m_stealth_stat); @@ -1243,7 +1243,7 @@ for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { boost::shared_ptr<GG::Texture> texture = ClientUI::MeterIcon(*it); m_icons.push_back(new StatisticIcon(x, GG::Y(EDGE_PAD), MULTI_INDICATOR_ICON_WIDTH, MULTI_INDICATOR_ICON_HEIGHT + ClientUI::Pts()*3/2, texture, - 0.0, 3, false, false)); + 0.0, 3, false)); AttachChild(m_icons.back()); m_icons.back()->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); x += MULTI_INDICATOR_ICON_WIDTH + MULTI_INDICATOR_ICON_SPACING; @@ -1265,7 +1265,7 @@ for (std::vector<MeterType>::const_iterator it = m_meter_types.begin(); it != m_meter_types.end(); ++it) { boost::shared_ptr<GG::Texture> texture = ClientUI::MeterIcon(*it); m_icons.push_back(new StatisticIcon(x, GG::Y(EDGE_PAD), MULTI_INDICATOR_ICON_WIDTH, MULTI_INDICATOR_ICON_HEIGHT + ClientUI::Pts()*3/2, texture, - 0.0, 3, false, false)); + 0.0, 3, false)); AttachChild(m_icons.back()); m_icons.back()->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); x += MULTI_INDICATOR_ICON_WIDTH + MULTI_INDICATOR_ICON_SPACING; @@ -2124,7 +2124,7 @@ double production = rc->ProjectedMeterPoints(ResourceToMeter(m_resource_type)); m_production += production; - std::string amount_text = DoubleToString(production, 3, false, false); + std::string amount_text = DoubleToString(production, 3, false); GG::TextControl* label = new GG::TextControl(GG::X0, top, LABEL_WIDTH, row_height, @@ -2181,7 +2181,7 @@ m_production_label->SetText(boost::io::str(FlexibleFormat(UserString("RESOURCE_PRODUCTION_TOOLTIP")) % resource_text % - DoubleToString(m_production, 3, false, false))); + DoubleToString(m_production, 3, false))); // height of label already added to top outside this function } @@ -2238,7 +2238,7 @@ m_allocation += allocation; - std::string amount_text = DoubleToString(allocation, 3, false, false); + std::string amount_text = DoubleToString(allocation, 3, false); // TODO: for food only, colour allocation text depending on need of PopCenter: // - if allocation < need to avoid starvation: colour stat decr colour (red) @@ -2305,7 +2305,7 @@ resource_text = UserString("UNKNOWN_VALUE_SYMBOL"); break; } - std::string system_allocation_text = DoubleToString(m_allocation, 3, false, false); + std::string system_allocation_text = DoubleToString(m_allocation, 3, false); // for research only, local allocation makes no sense if (m_resource_type == RE_RESEARCH && m_allocation == 0.0) @@ -2351,11 +2351,11 @@ if (difference > 0.0) { // show surplus label_text = UserString("RESOURCE_EXPORT"); - amount_text = DoubleToString(difference, 3, false, false); + amount_text = DoubleToString(difference, 3, false); } else if (difference < 0.0) { // show amount being imported label_text = UserString("RESOURCE_IMPORT"); - amount_text = DoubleToString(std::abs(difference), 3, false, false); + amount_text = DoubleToString(std::abs(difference), 3, false); } else { // show self-sufficiency label_text = UserString("RESOURCE_SELF_SUFFICIENT"); @@ -2512,12 +2512,12 @@ double meter_cur = meter->Current(); double meter_max = meter->Max(); - m_current_value->SetText(DoubleToString(current, 3, false, false)); - m_next_turn_value->SetText(DoubleToString(next, 3, false, false)); + m_current_value->SetText(DoubleToString(current, 3, false)); + m_next_turn_value->SetText(DoubleToString(next, 3, false)); m_change_value->SetText(ColouredNumber(change)); m_meter_title->SetText(boost::io::str(FlexibleFormat(UserString("TT_METER")) % - DoubleToString(meter_cur, 3, false, false) % - DoubleToString(meter_max, 3, false, false))); + DoubleToString(meter_cur, 3, false) % + DoubleToString(meter_max, 3, false))); switch (m_meter_type) { case METER_POPULATION: Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -25,12 +25,13 @@ #include "../universe/Fleet.h" #include "../universe/Planet.h" #include "../universe/Predicates.h" -#include "../network/Message.h" -#include "../client/human/HumanClientApp.h" #include "../universe/System.h" #include "../universe/Universe.h" #include "../universe/UniverseObject.h" +#include "../universe/Building.h" // TEMP: For GetTypeName #include "../Empire/Empire.h" +#include "../network/Message.h" +#include "../client/human/HumanClientApp.h" #include <GG/DrawUtil.h> #include <GG/MultiEdit.h> @@ -131,7 +132,7 @@ iss >> version_number; version_number += 0.05f; // ensures proper rounding of 1.1 digit number - Logger().debugStream() << "...extracted version number: " << DoubleToString(version_number, 2, false, false); // combination of floating point precision and DoubleToString preferring to round down means the +0.05 is needed to round properly + Logger().debugStream() << "...extracted version number: " << DoubleToString(version_number, 2, false); // combination of floating point precision and DoubleToString preferring to round down means the +0.05 is needed to round properly if (version_number < 2.0) Logger().debugStream() << "OpenGL version number less than 2.0. FreeOrion requires OpenGL version 2.0 or greater, so you may have problems on this system."; @@ -212,6 +213,21 @@ /* Updated each frame to shift rendered posistion of dots that are drawn to * show fleet move lines. */ double move_line_animation_shift = 0.0; // in pixels + + /* temp */ + std::string GetTypeName(const UniverseObject* obj) { + if (const Fleet* fleet = universe_object_cast<const Fleet*>(obj)) + return "Fleet"; + if (const Ship* fleet = universe_object_cast<const Ship*>(obj)) + return "Ship"; + if (const Planet* fleet = universe_object_cast<const Planet*>(obj)) + return "Planet"; + if (const System* fleet = universe_object_cast<const System*>(obj)) + return "System"; + if (const Building* fleet = universe_object_cast<const Building*>(obj)) + return "Building"; + return "UniverseObject"; + } } @@ -662,32 +678,32 @@ const GG::X ICON_WIDTH(ICON_DUAL_WIDTH - 30); m_population = new StatisticIcon(m_btn_siterep->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_DUAL_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_POPULATION), - 0,0,3,3,true,true,false,true); + 0,0,3,3,false,true); m_toolbar->AttachChild(m_population); m_industry = new StatisticIcon(m_population->UpperLeft().x-LAYOUT_MARGIN-ICON_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_INDUSTRY), - 0,3,true,false); + 0,3,false); m_toolbar->AttachChild(m_industry); m_research = new StatisticIcon(m_industry->UpperLeft().x-LAYOUT_MARGIN-ICON_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_RESEARCH), - 0,3,true,false); + 0,3,false); m_toolbar->AttachChild(m_research); m_trade = new StatisticIcon(m_research->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_DUAL_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_TRADE), - 0,0,3,3,true,true,false,true); + 0,0,3,3,false,true); m_toolbar->AttachChild(m_trade); m_mineral = new StatisticIcon(m_trade->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_DUAL_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_MINING), - 0,0,3,3,true,true,false,true); + 0,0,3,3,false,true); m_toolbar->AttachChild(m_mineral); m_food = new StatisticIcon(m_mineral->UpperLeft().x-LAYOUT_MARGIN-ICON_DUAL_WIDTH,GG::Y(LAYOUT_MARGIN),ICON_DUAL_WIDTH,m_turn_update->Height(), ClientUI::MeterIcon(METER_FARMING), - 0,0,3,3,true,true,false,true); + 0,0,3,3,false,true); m_toolbar->AttachChild(m_food); m_menu_showing = false; @@ -881,8 +897,27 @@ // else // std::cout << " [missing object] (" << *it << ")" << std::endl; //} + //// DEBUG + //std::cout << "UniverseObjects: " << std::endl; + //for (Universe::const_iterator it = universe.begin(); it != universe.end(); ++it) { + // const UniverseObject* obj = it->second; + // std::cout << GetTypeName(obj) << " " << obj->Name(); + // if (const System* system = obj->GetSystem()) + // std::cout << " at: " << system->Name(); + // const std::set<int>& owners = obj->Owners(); + // if (!owners.empty()) { + // std::cout << " owners:"; + // for (std::set<int>::const_iterator own_it = owners.begin(); own_it != owners.end(); ++own_it) + // std::cout << " " << *own_it; + // } + + // std::cout << std::endl; + //} + //std::cout << std::endl; + + EmpireManager& manager = HumanClientApp::GetApp()->Empires(); Empire* empire = manager.Lookup(HumanClientApp::GetApp()->EmpireID()); if (!empire) { Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2009-09-11 04:39:13 UTC (rev 3157) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2009-09-11 06:08:45 UTC (rev 3158) @@ -168,7 +168,7 @@ top += m_progress_bar->Height() + MARGIN; - std::string turn_spending_text = str(FlexibleFormat(UserString("PRODUCTION_TURN_COST_STR")) % DoubleToString(turn_spending, 3, false, false)); + std::string turn_spending_text = str(FlexibleFormat(UserString("PRODUCTION_TURN_COST_STR")) % DoubleToString(turn_spending, 3, false)); m_PPs_and_turns_text = new GG::TextControl(left, top, TURNS_AND_COST_WIDTH, GG::Y(FONT_PTS + MARGIN), turn_spending_text, font, clr, GG::FORMAT_LEFT); |
From: <geo...@us...> - 2009-09-22 20:06:34
|
Revision: 3182 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3182&view=rev Author: geoffthemedio Date: 2009-09-22 20:06:24 +0000 (Tue, 22 Sep 2009) Log Message: ----------- -Made FleetButton store and return its fleets by ID instead of Fleet pointer -Made MapWnd store fleet move lines and FleetButton indexed by fleet ID instead of Fleet pointer Modified Paths: -------------- trunk/FreeOrion/UI/FleetButton.cpp trunk/FreeOrion/UI/FleetButton.h trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/FleetButton.cpp =================================================================== --- trunk/FreeOrion/UI/FleetButton.cpp 2009-09-22 08:32:55 UTC (rev 3181) +++ trunk/FreeOrion/UI/FleetButton.cpp 2009-09-22 20:06:24 UTC (rev 3182) @@ -153,20 +153,23 @@ void FleetButton::Init(const std::vector<int>& fleet_IDs, SizeType size_type) { // get fleets Universe& universe = GetUniverse(); + std::vector<const Fleet*> fleets; + for (std::vector<int>::const_iterator it = fleet_IDs.begin(); it != fleet_IDs.end(); ++it) { - Fleet* fleet = universe.Object<Fleet>(*it); + const Fleet* fleet = universe.Object<Fleet>(*it); if (!fleet) { Logger().errorStream() << "FleetButton::FleetButton couldn't get fleet with id " << *it; continue; } - m_fleets.push_back(fleet); + m_fleets.push_back(*it); + fleets.push_back(fleet); } // determine owner(s) of fleet(s). Only care whether or not there is more than one owner, as owner // is used to determine colouration int owner_id = ALL_EMPIRES; - for (std::vector<Fleet*>::const_iterator it = m_fleets.begin(); it != m_fleets.end(); ++it) { + for (std::vector<const Fleet*>::const_iterator it = fleets.begin(); it != fleets.end(); ++it) { const Fleet* fleet = *it; const std::set<int>& fleet_owners = fleet->Owners(); @@ -203,15 +206,16 @@ // select icon(s) for fleet(s), and get a fleet for use later const Fleet* first_fleet = 0; if (m_fleets.size() != 1) { - first_fleet = *(m_fleets.begin()); + first_fleet = *(fleets.begin()); m_head_icon = FleetHeadIcon(0, size_type); int num_ships = 0; - for (std::vector<Fleet*>::const_iterator it = m_fleets.begin(); it != m_fleets.end(); ++it) + for (std::vector<const Fleet*>::const_iterator it = fleets.begin(); it != fleets.end(); ++it) num_ships += (*it)->NumShips(); m_size_icon = FleetSizeIcon(num_ships, size_type); + } else if (!m_fleets.empty()) { - first_fleet = *m_fleets.begin(); + first_fleet = *fleets.begin(); m_head_icon = FleetHeadIcon(first_fleet, size_type); m_size_icon = FleetSizeIcon(first_fleet, size_type); } Modified: trunk/FreeOrion/UI/FleetButton.h =================================================================== --- trunk/FreeOrion/UI/FleetButton.h 2009-09-22 08:32:55 UTC (rev 3181) +++ trunk/FreeOrion/UI/FleetButton.h 2009-09-22 20:06:24 UTC (rev 3182) @@ -28,7 +28,7 @@ /** \name Accessors */ //@{ virtual bool InWindow(const GG::Pt& pt) const; ///< returns true if \a pt is within or over the button - const std::vector<Fleet*>& Fleets() const {return m_fleets;} ///< returns the fleets represented by this control + const std::vector<int>& Fleets() const {return m_fleets;} ///< returns the fleets represented by this control bool Selected() const {return m_selected;} ///< returns whether this button has been marked selected //@} @@ -51,7 +51,7 @@ private: void Init(const std::vector<int>& fleet_IDs, SizeType size_type); - std::vector<Fleet*> m_fleets; ///< the fleets represented by this button + std::vector<int> m_fleets; ///< the fleets represented by this button boost::shared_ptr<GG::Texture> m_head_icon; ///< icon texture representing type of fleet boost::shared_ptr<GG::Texture> m_size_icon; ///< icon texture representing number of ships in fleet boost::shared_ptr<GG::Texture> m_selection_texture; ///< texture shown to indicate button is selected Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-09-22 08:32:55 UTC (rev 3181) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-09-22 20:06:24 UTC (rev 3182) @@ -759,11 +759,6 @@ return std::pair<double, double>(x, y); } -SidePanel* MapWnd::GetSidePanel() const -{ - return m_side_panel; -} - void MapWnd::GetSaveGameUIData(SaveGameUIData& data) const { data.map_left = Value(UpperLeft().x); @@ -1890,15 +1885,12 @@ } else { // get all (moving) fleets represented by fleet button for this fleet - std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.find(fleet); + std::map<int, FleetButton*>::iterator it = m_fleet_buttons.find(fleet->ID()); if (it == m_fleet_buttons.end()) { Logger().errorStream() << "Couldn't find a FleetButton for fleet in MapWnd::SelectFleet"; return; } - const std::vector<Fleet*>& wnd_fleets = it->second->Fleets(); - std::vector<int> wnd_fleet_ids; - for (std::vector<Fleet*>::const_iterator fleet_it = wnd_fleets.begin(); fleet_it != wnd_fleets.end(); ++fleet_it) - wnd_fleet_ids.push_back((*fleet_it)->ID()); + const std::vector<int>& wnd_fleet_ids = it->second->Fleets(); // create new fleetwnd in which to show selected fleet fleet_wnd = manager.NewFleetWnd(wnd_fleet_ids, true); @@ -1940,14 +1932,18 @@ { assert(fleet_button); // each fleet represented by button could have different move path - for (std::vector<Fleet*>::const_iterator it = fleet_button->Fleets().begin(); it != fleet_button->Fleets().end(); ++it) + for (std::vector<int>::const_iterator it = fleet_button->Fleets().begin(); it != fleet_button->Fleets().end(); ++it) SetFleetMovementLine(*it); } -void MapWnd::SetFleetMovementLine(const Fleet* fleet) +void MapWnd::SetFleetMovementLine(int fleet_id) { + if (fleet_id == UniverseObject::INVALID_OBJECT_ID) + return; + + const Fleet* fleet = GetUniverse().Object<Fleet>(fleet_id); if (!fleet) { - Logger().errorStream() << "MapWnd::SetFleetMovementLine was passed a null fleet pointer"; + Logger().errorStream() << "MapWnd::SetFleetMovementLine was passed invalid fleet id " << fleet_id; return; } //std::cout << "creating fleet movement line for fleet at (" << fleet->X() << ", " << fleet->Y() << ")" << std::endl; @@ -1960,18 +1956,24 @@ line_colour = empire->Color(); // create and store line - m_fleet_lines[fleet] = MovementLineData(fleet->MovePath(), m_starlane_endpoints, line_colour); + m_fleet_lines[fleet_id] = MovementLineData(fleet->MovePath(), m_starlane_endpoints, line_colour); } -void MapWnd::SetProjectedFleetMovementLine(const Fleet* fleet, const std::list<int>& travel_route) +void MapWnd::SetProjectedFleetMovementLine(int fleet_id, const std::list<int>& travel_route) { + if (fleet_id == UniverseObject::INVALID_OBJECT_ID) + return; + // ensure passed fleet exists - if (!fleet) + const Fleet* fleet = GetUniverse().Object<Fleet>(fleet_id); + if (!fleet) { + Logger().errorStream() << "MapWnd::SetProjectedFleetMovementLine was passed invalid fleet id " << fleet_id; return; + } // if route is empty, no projected line to show if (travel_route.empty()) { - RemoveProjectedFleetMovementLine(fleet); + RemoveProjectedFleetMovementLine(fleet_id); return; } @@ -1979,7 +1981,7 @@ std::list<MovePathNode> path = fleet->MovePath(travel_route); if (path.empty()) { // no route to display - RemoveProjectedFleetMovementLine(fleet); + RemoveProjectedFleetMovementLine(fleet_id); return; } @@ -1991,18 +1993,18 @@ line_colour = empire->Color(); // create and store line - m_projected_fleet_lines[fleet] = MovementLineData(path, m_starlane_endpoints, line_colour); + m_projected_fleet_lines[fleet_id] = MovementLineData(path, m_starlane_endpoints, line_colour); } -void MapWnd::SetProjectedFleetMovementLines(const std::vector<const Fleet*>& fleets, const std::list<int>& travel_route) +void MapWnd::SetProjectedFleetMovementLines(const std::vector<int>& fleet_ids, const std::list<int>& travel_route) { - for (std::vector<const Fleet*>::const_iterator it = fleets.begin(); it != fleets.end(); ++it) + for (std::vector<int>::const_iterator it = fleet_ids.begin(); it != fleet_ids.end(); ++it) SetProjectedFleetMovementLine(*it, travel_route); } -void MapWnd::RemoveProjectedFleetMovementLine(const Fleet* fleet) +void MapWnd::RemoveProjectedFleetMovementLine(int fleet_id) { - std::map<const Fleet*, MovementLineData>::iterator it = m_projected_fleet_lines.find(fleet); + std::map<int, MovementLineData>::iterator it = m_projected_fleet_lines.find(fleet_id); if (it != m_projected_fleet_lines.end()) m_projected_fleet_lines.erase(it); } @@ -2047,9 +2049,14 @@ const int SYSTEM_ICON_SIZE = SystemIconSize(); // position departing fleet buttons - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { // calculate system icon position - const System* system = it->first; + const System* system = GetUniverse().Object<System>(it->first); + if (!system) { + Logger().errorStream() << "MapWnd::DoFleetButtonsLayout couldn't find system with id " << it->first; + continue; + } + GG::Pt icon_ul(GG::X(static_cast<int>(system->X()*ZoomFactor() - SYSTEM_ICON_SIZE / 2.0)), GG::Y(static_cast<int>(system->Y()*ZoomFactor() - SYSTEM_ICON_SIZE / 2.0))); @@ -2072,9 +2079,14 @@ } // position stationary fleet buttons - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { // calculate system icon position - const System* system = it->first; + const System* system = GetUniverse().Object<System>(it->first); + if (!system) { + Logger().errorStream() << "MapWnd::DoFleetButtonsLayout couldn't find system with id " << it->first; + continue; + } + GG::Pt icon_ul(GG::X(static_cast<int>(system->X()*ZoomFactor() - SYSTEM_ICON_SIZE / 2.0)), GG::Y(static_cast<int>(system->Y()*ZoomFactor() - SYSTEM_ICON_SIZE / 2.0))); @@ -2104,7 +2116,7 @@ const Fleet* fleet = 0; // skip button if it has no fleets (somehow...?) or if the first fleet in the button is 0 - if (fb->Fleets().empty() || !(fleet = *(fb->Fleets().begin()))) { + if (fb->Fleets().empty() || !(fleet = GetUniverse().Object<Fleet>(*fb->Fleets().begin()))) { Logger().errorStream() << "DoFleetButtonsLayout couldn't get first fleet for button"; continue; } @@ -2248,12 +2260,12 @@ // clear old fleet buttons m_fleet_buttons.clear(); // duplicates pointers in following containers - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) + for (std::map<int, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) for (std::set<FleetButton*>::iterator set_it = it->second.begin(); set_it != it->second.end(); ++set_it) delete *set_it; m_stationary_fleet_buttons.clear(); - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) + for (std::map<int, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) for (std::set<FleetButton*>::iterator set_it = it->second.begin(); set_it != it->second.end(); ++set_it) delete *set_it; m_departing_fleet_buttons.clear(); @@ -2270,6 +2282,7 @@ // departing fleets for (std::map<const System*, std::map<int, std::vector<const Fleet*> > >::iterator departing_fleets_it = departing_fleets.begin(); departing_fleets_it != departing_fleets.end(); ++departing_fleets_it) { const System* system = departing_fleets_it->first; + int system_id = system->ID(); const std::map<int, std::vector<const Fleet*> >& empires_map = departing_fleets_it->second; // create button for each empire's fleets @@ -2288,10 +2301,10 @@ FleetButton* fb = new FleetButton(fleet_IDs, FLEETBUTTON_SIZE); // store - m_departing_fleet_buttons[system].insert(fb); + m_departing_fleet_buttons[system_id].insert(fb); for (std::vector<const Fleet*>::const_iterator fleet_it = fleets.begin(); fleet_it != fleets.end(); ++fleet_it) - m_fleet_buttons[*fleet_it] = fb; + m_fleet_buttons[(*fleet_it)->ID()] = fb; AttachChild(fb); MoveChildDown(fb); // so fleet buttons won't show over sidepanel or sitrep window @@ -2303,6 +2316,7 @@ // stationary fleets for (std::map<const System*, std::map<int, std::vector<const Fleet*> > >::iterator stationary_fleets_it = stationary_fleets.begin(); stationary_fleets_it != stationary_fleets.end(); ++stationary_fleets_it) { const System* system = stationary_fleets_it->first; + int system_id = system->ID(); const std::map<int, std::vector<const Fleet*> >& empires_map = stationary_fleets_it->second; // create button for each empire's fleets @@ -2321,10 +2335,10 @@ FleetButton* fb = new FleetButton(fleet_IDs, FLEETBUTTON_SIZE); // store - m_stationary_fleet_buttons[system].insert(fb); + m_stationary_fleet_buttons[system_id].insert(fb); for (std::vector<const Fleet*>::const_iterator fleet_it = fleets.begin(); fleet_it != fleets.end(); ++fleet_it) - m_fleet_buttons[*fleet_it] = fb; + m_fleet_buttons[(*fleet_it)->ID()] = fb; AttachChild(fb); MoveChildDown(fb); // so fleet buttons won't show over sidepanel or sitrep window @@ -2359,7 +2373,7 @@ m_moving_fleet_buttons.insert(fb); for (std::vector<const Fleet*>::const_iterator fleet_it = fleets.begin(); fleet_it != fleets.end(); ++fleet_it) - m_fleet_buttons[*fleet_it] = fb; + m_fleet_buttons[(*fleet_it)->ID()] = fb; AttachChild(fb); MoveChildDown(fb); // so fleet buttons won't show over sidepanel or sitrep window @@ -2377,7 +2391,7 @@ // create movement lines (after positioning buttons, so lines will originate from button location) - for (std::map<const Fleet*, FleetButton*>::iterator it = m_fleet_buttons.begin(); it != m_fleet_buttons.end(); ++it) + for (std::map<int, FleetButton*>::iterator it = m_fleet_buttons.begin(); it != m_fleet_buttons.end(); ++it) SetFleetMovementLine(it->second); } @@ -2779,31 +2793,33 @@ // render movement lines for all fleets - for (std::map<const Fleet*, MovementLineData>::const_iterator it = m_fleet_lines.begin(); it != m_fleet_lines.end(); ++it) + for (std::map<int, MovementLineData>::const_iterator it = m_fleet_lines.begin(); it != m_fleet_lines.end(); ++it) RenderMovementLine(it->second); const Universe& universe = GetUniverse(); // re-render selected fleets' movement lines in white for (std::set<int>::const_iterator it = m_selected_fleet_ids.begin(); it != m_selected_fleet_ids.end(); ++it) { - std::map<const Fleet*, MovementLineData>::const_iterator line_it = m_fleet_lines.find(universe.Object<Fleet>(*it)); + int fleet_id = *it; + std::map<int, MovementLineData>::const_iterator line_it = m_fleet_lines.find(fleet_id); if (line_it != m_fleet_lines.end()) RenderMovementLine(line_it->second, GG::CLR_WHITE); } // render move line ETA indicators for selected fleets for (std::set<int>::const_iterator it = m_selected_fleet_ids.begin(); it != m_selected_fleet_ids.end(); ++it) { - std::map<const Fleet*, MovementLineData>::const_iterator line_it = m_fleet_lines.find(universe.Object<Fleet>(*it)); + int fleet_id = *it; + std::map<int, MovementLineData>::const_iterator line_it = m_fleet_lines.find(fleet_id); if (line_it != m_fleet_lines.end()) RenderMovementLineETAIndicators(line_it->second); } // render projected move lines - for (std::map<const Fleet*, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) + for (std::map<int, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) RenderMovementLine(it->second, GG::CLR_WHITE); // render projected move line ETA indicators - for (std::map<const Fleet*, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) + for (std::map<int, MovementLineData>::const_iterator it = m_projected_fleet_lines.begin(); it != m_projected_fleet_lines.end(); ++it) RenderMovementLineETAIndicators(it->second, GG::CLR_WHITE); } @@ -3013,7 +3029,9 @@ // apply to all this-player-owned fleets in currently-active FleetWnd for (std::set<int>::iterator it = fleet_ids.begin(); it != fleet_ids.end(); ++it) { - Fleet* fleet = GetUniverse().Object<Fleet>(*it); + int fleet_id = *it; + + Fleet* fleet = GetUniverse().Object<Fleet>(fleet_id); if (!fleet) { Logger().errorStream() << "MapWnd::PlotFleetMovementLine couldn't get fleet with id " << *it; continue; @@ -3025,7 +3043,7 @@ // plot empty move pathes if destination is not a known system if (system_id == UniverseObject::INVALID_OBJECT_ID) { - RemoveProjectedFleetMovementLine(fleet); + RemoveProjectedFleetMovementLine(fleet_id); continue; } @@ -3054,10 +3072,10 @@ // if actually ordering fleet movement, not just prospectively previewing, ... do so if (execute_move && !route.empty()) - HumanClientApp::GetApp()->Orders().IssueOrder(OrderPtr(new FleetMoveOrder(empire_id, fleet->ID(), start_system, system_id))); + HumanClientApp::GetApp()->Orders().IssueOrder(OrderPtr(new FleetMoveOrder(empire_id, fleet_id, start_system, system_id))); // show route on map - SetProjectedFleetMovementLine(fleet, route); + SetProjectedFleetMovementLine(fleet_id, route); } } @@ -3071,18 +3089,18 @@ // get possible fleets to select from, and a pointer to one of those fleets - const std::vector<Fleet*>& btn_fleets = fleet_btn.Fleets(); + const std::vector<int>& btn_fleets = fleet_btn.Fleets(); if (btn_fleets.empty()) { Logger().errorStream() << "Clicked FleetButton contained no fleets!"; return; } - Fleet* first_fleet = btn_fleets[0]; + const Fleet* first_fleet = GetUniverse().Object<Fleet>(btn_fleets[0]); // find if a FleetWnd for this FleetButton's fleet(s) is already open, and if so, if there // is a single selected fleet in the window, and if so, what fleet that is FleetWnd* wnd_for_button = FleetUIManager::GetFleetUIManager().WndForFleet(first_fleet); - Fleet* already_selected_fleet = 0; + int already_selected_fleet_id = UniverseObject::INVALID_OBJECT_ID; if (wnd_for_button) { //std::cout << "FleetButtonClicked found open fleetwnd for fleet" << std::endl; // there is already FleetWnd for this button open. @@ -3090,23 +3108,23 @@ // check which fleet(s) is/are selected in the button's FleetWnd std::set<int> selected_fleet_ids = wnd_for_button->SelectedFleetIDs(); - // record selected fleet if just one fleet is selected. otherwise, keep default 0 - // to indicate that no one fleet is selected + // record selected fleet if just one fleet is selected. otherwise, keep default + // INVALID_OBJECT_ID to indicate that no single fleet is selected if (selected_fleet_ids.size() == 1) - already_selected_fleet = GetUniverse().Object<Fleet>(*(selected_fleet_ids.begin())); + already_selected_fleet_id = *(selected_fleet_ids.begin()); } else { //std::cout << "FleetButtonClicked did not find open fleetwnd for fleet" << std::endl; } // pick fleet to select from fleets represented by the clicked FleetButton. - Fleet* fleet_to_select = 0; + int fleet_to_select_id = UniverseObject::INVALID_OBJECT_ID; - if (!already_selected_fleet || btn_fleets.size() == 1) { + if (already_selected_fleet_id == UniverseObject::INVALID_OBJECT_ID || btn_fleets.size() == 1) { // no (single) fleet is already selected, or there is only one selectable fleet, // so select first fleet in button - fleet_to_select = *btn_fleets.begin(); + fleet_to_select_id = *btn_fleets.begin(); } else { // select next fleet after already-selected fleet, or first fleet if already-selected @@ -3114,8 +3132,8 @@ // to do this, scan through button's fleets to find already_selected_fleet bool found_already_selected_fleet = false; - for (std::vector<Fleet*>::const_iterator it = btn_fleets.begin(); it != btn_fleets.end(); ++it) { - if (*it == already_selected_fleet) { + for (std::vector<int>::const_iterator it = btn_fleets.begin(); it != btn_fleets.end(); ++it) { + if (*it == already_selected_fleet_id) { // found already selected fleet. get NEXT fleet. don't need to worry about // there not being enough fleets to do this because if above checks for case // of there being only one fleet in this button @@ -3124,7 +3142,7 @@ if (it == btn_fleets.end()) it = btn_fleets.begin(); // get fleet to select out of iterator - fleet_to_select = *it; + fleet_to_select_id = *it; found_already_selected_fleet = true; break; } @@ -3134,14 +3152,14 @@ // didn't find already-selected fleet. the selected fleet might have been moving when the // click button was for stationary fleets, or vice versa. regardless, just default back // to selecting the first fleet for this button - fleet_to_select = *btn_fleets.begin(); + fleet_to_select_id = *btn_fleets.begin(); } } // select chosen fleet - if (fleet_to_select) - SelectFleet(fleet_to_select); + if (fleet_to_select_id) + SelectFleet(fleet_to_select_id); } void MapWnd::SelectedFleetsChanged() @@ -3169,13 +3187,13 @@ const Universe& universe = GetUniverse(); // clear old selection indicators - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { std::set<FleetButton*>& set = it->second; for (std::set<FleetButton*>::iterator button_it = set.begin(); button_it != set.end(); ++button_it) (*button_it)->SetSelected(false); } - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { std::set<FleetButton*>& set = it->second; for (std::set<FleetButton*>::iterator button_it = set.begin(); button_it != set.end(); ++button_it) (*button_it)->SetSelected(false); @@ -3188,8 +3206,8 @@ // add new selection indicators for (std::set<int>::const_iterator it = m_selected_fleet_ids.begin(); it != m_selected_fleet_ids.end(); ++it) { - const Fleet* fleet = universe.Object<Fleet>(*it); - std::map<const Fleet*, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet); + int fleet_id = *it; + std::map<int, FleetButton*>::iterator button_it = m_fleet_buttons.find(fleet_id); if (button_it != m_fleet_buttons.end()) button_it->second->SetSelected(true); } @@ -3200,15 +3218,14 @@ void MapWnd::UniverseObjectDeleted(const UniverseObject *obj) { - const Fleet* fleet = universe_object_cast<const Fleet*>(obj); - if (fleet) { - std::map<const Fleet*, MovementLineData>::iterator it1 = m_fleet_lines.find(fleet); + if (const Fleet* fleet = universe_object_cast<const Fleet*>(obj)) { + std::map<int, MovementLineData>::iterator it1 = m_fleet_lines.find(fleet->ID()); if (it1 != m_fleet_lines.end()) m_fleet_lines.erase(it1); - std::map<const Fleet*, MovementLineData>::iterator it3 = m_projected_fleet_lines.find(fleet); - if (it3 != m_projected_fleet_lines.end()) - m_projected_fleet_lines.erase(it3); + std::map<int, MovementLineData>::iterator it2 = m_projected_fleet_lines.find(fleet->ID()); + if (it2 != m_projected_fleet_lines.end()) + m_projected_fleet_lines.erase(it2); } } @@ -3264,7 +3281,7 @@ m_starlane_endpoints.clear(); - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_stationary_fleet_buttons.begin(); it != m_stationary_fleet_buttons.end(); ++it) { std::set<FleetButton*>& set = it->second; for (std::set<FleetButton*>::iterator set_it = set.begin(); set_it != set.end(); ++set_it) delete *set_it; @@ -3272,7 +3289,7 @@ } m_stationary_fleet_buttons.clear(); - for (std::map<const System*, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { + for (std::map<int, std::set<FleetButton*> >::iterator it = m_departing_fleet_buttons.begin(); it != m_departing_fleet_buttons.end(); ++it) { std::set<FleetButton*>& set = it->second; for (std::set<FleetButton*>::iterator set_it = set.begin(); set_it != set.end(); ++set_it) delete *set_it; Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-09-22 08:32:55 UTC (rev 3181) +++ trunk/FreeOrion/UI/MapWnd.h 2009-09-22 20:06:24 UTC (rev 3182) @@ -79,8 +79,6 @@ * are shown at */ FleetButton::SizeType FleetButtonSizeType() const; - SidePanel* GetSidePanel() const; - /** populates the relevant UI state that should be restored after a * save-and-load cycle */ void GetSaveGameUIData(SaveGameUIData& data) const; @@ -129,19 +127,19 @@ void SelectFleet(Fleet* fleet); //!< programatically selects fleets void ReselectLastFleet(); //!< re-selects the most recent selected fleet, if a valid one exists - void SetFleetMovementLine(const FleetButton* fleet_button); //!< creates fleet movement lines for all fleets in the given FleetButton to indicate where (and whether) they are moving. Move lines originate from the FleetButton. - void SetFleetMovementLine(const Fleet* fleet); //!< creates fleet movement line for a single fleet. Move lines originate from the fleet's button location. + void SetFleetMovementLine(const FleetButton* fleet_button); //!< creates fleet movement lines for all fleets in the given FleetButton to indicate where (and whether) they are moving. Move lines originate from the FleetButton. + void SetFleetMovementLine(int fleet_id); //!< creates fleet movement line for a single fleet. Move lines originate from the fleet's button location. /* creates specially-coloured projected fleet movement line for specified * fleet following the specified route. Move line originates from the * fleet's button location. */ - void SetProjectedFleetMovementLine(const Fleet* fleet, const std::list<int>& travel_route); + void SetProjectedFleetMovementLine(int fleet_id, const std::list<int>& travel_route); /* creates specially-coloured projected fleet movement lines for specified * fleets following the specified route. Move lines originates from the * fleets' button locations. */ - void SetProjectedFleetMovementLines(const std::vector<const Fleet*>& fleets, const std::list<int>& travel_route); - void RemoveProjectedFleetMovementLine(const Fleet* fleet); //!< removes projected fleet movement line for specified fleet. - void ClearProjectedFleetMovementLines(); //!< removes all projected fleet movement lines + void SetProjectedFleetMovementLines(const std::vector<int>& fleet_ids, const std::list<int>& travel_route); + void RemoveProjectedFleetMovementLine(int fleet_id); //!< removes projected fleet movement line for specified fleet. + void ClearProjectedFleetMovementLines(); //!< removes all projected fleet movement lines void RegisterPopup(MapWndPopup* popup); //!< registers a MapWndPopup, which can be cleaned up with a call to DeleteAllPopups( ) void RemovePopup(MapWndPopup* popup); //!< removes a MapWndPopup from the list cleaned up on a call to DeleteAllPopups( ) @@ -318,18 +316,18 @@ std::map<std::pair<int, int>, LaneEndpoints> m_starlane_endpoints; //!< map from starlane start and end system IDs (stored in pair in increasing order) to the universe coordiates at which to draw the starlane ends - std::map<const System*,std::set<FleetButton*> > m_stationary_fleet_buttons; //!< icons representing fleets at a system that are not departing, indexed by system - std::map<const System*,std::set<FleetButton*> > m_departing_fleet_buttons; //!< icons representing fleets at a system that are departing, indexed by system + std::map<int, std::set<FleetButton*> > m_stationary_fleet_buttons; //!< icons representing fleets at a system that are not departing, indexed by system + std::map<int, std::set<FleetButton*> > m_departing_fleet_buttons; //!< icons representing fleets at a system that are departing, indexed by system std::set<FleetButton*> m_moving_fleet_buttons; //!< icons representing fleets not at a system - std::map<const Fleet*, FleetButton*> m_fleet_buttons; //!< fleet icons, index by fleet + std::map<int, FleetButton*> m_fleet_buttons; //!< fleet icons, index by fleet std::map<int, boost::signals::connection> m_fleet_state_change_signals; std::map<int, std::vector<boost::signals::connection> > m_system_fleet_insert_remove_signals; std::set<boost::signals::connection> m_keyboard_accelerator_signals; //!< signals connecting keyboard accelerators to GUI responses - std::map<const Fleet*, MovementLineData> m_fleet_lines; //!< lines used for moving fleets in the main map - std::map<const Fleet*, MovementLineData> m_projected_fleet_lines; //!< lines that show the projected path of the active fleet in the FleetWnd + std::map<int, MovementLineData> m_fleet_lines; //!< lines used for moving fleets in the main map + std::map<int, MovementLineData> m_projected_fleet_lines; //!< lines that show the projected path of the active fleet in the FleetWnd /* OpenGL buffers objects containing vertices, texture coordinates, etc. */ struct GLBuffer { |
From: <geo...@us...> - 2009-10-07 04:04:29
|
Revision: 3196 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3196&view=rev Author: geoffthemedio Date: 2009-10-07 04:04:20 +0000 (Wed, 07 Oct 2009) Log Message: ----------- Added red X to indicate scrapping a building has been ordered Modified Paths: -------------- trunk/FreeOrion/UI/InfoPanels.cpp trunk/FreeOrion/UI/InfoPanels.h Modified: trunk/FreeOrion/UI/InfoPanels.cpp =================================================================== --- trunk/FreeOrion/UI/InfoPanels.cpp 2009-10-06 03:50:55 UTC (rev 3195) +++ trunk/FreeOrion/UI/InfoPanels.cpp 2009-10-07 04:04:20 UTC (rev 3196) @@ -1661,7 +1661,7 @@ double partial_turn = std::fmod(progress, turn_cost) / turn_cost; int turns_completed = static_cast<int>(progress / turn_cost); - + BuildingIndicator* ind = new BuildingIndicator(GG::X(indicator_size), *building_type, turns, turns_completed, partial_turn); m_building_indicators.push_back(ind); } @@ -1771,26 +1771,23 @@ BuildingIndicator::BuildingIndicator(GG::X w, int building_id) : Wnd(GG::X0, GG::Y0, w, GG::Y(Value(w)), GG::INTERACTIVE), m_graphic(0), + m_scrap_indicator(0), m_progress_bar(0), m_building_id(building_id) { - if (const Building* building = GetUniverse().Object<Building>(m_building_id)) { - if (const BuildingType* type = building->GetBuildingType()) { - boost::shared_ptr<GG::Texture> texture = ClientUI::BuildingTexture(type->Name()); + SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); - SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(texture, UserString(type->Name()), UserString(type->Description())))); + if (const Building* building = GetUniverse().Object<Building>(m_building_id)) + GG::Connect(building->StateChangedSignal, &BuildingIndicator::Refresh, this); - m_graphic = new GG::StaticGraphic(GG::X0, GG::Y0, w, GG::Y(Value(w)), texture, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); - AttachChild(m_graphic); - } - } + Refresh(); } BuildingIndicator::BuildingIndicator(GG::X w, const BuildingType &type, int turns, int turns_completed, double partial_turn) : Wnd(GG::X0, GG::Y0, w, GG::Y(Value(w)), GG::INTERACTIVE), m_graphic(0), + m_scrap_indicator(0), m_progress_bar(0), m_building_id(UniverseObject::INVALID_OBJECT_ID) { @@ -1850,6 +1847,36 @@ glEnable(GL_TEXTURE_2D); } +void BuildingIndicator::Refresh() +{ + if (const Building* building = GetUniverse().Object<Building>(m_building_id)) { + ClearBrowseInfoWnd(); + + if (m_graphic) { + delete m_graphic; + m_graphic = 0; + } + if (m_scrap_indicator) { + delete m_scrap_indicator; + m_scrap_indicator = 0; + } + + if (const BuildingType* type = building->GetBuildingType()) { + boost::shared_ptr<GG::Texture> texture = ClientUI::BuildingTexture(type->Name()); + m_graphic = new GG::StaticGraphic(GG::X0, GG::Y0, Width(), GG::Y(Value(Width())), texture, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + AttachChild(m_graphic); + + SetBrowseInfoWnd(boost::shared_ptr<GG::BrowseInfoWnd>(new IconTextBrowseWnd(texture, UserString(type->Name()), UserString(type->Description())))); + + if (building->OrderedScrapped()) { + boost::shared_ptr<GG::Texture> scrap_texture = ClientUI::GetTexture(ClientUI::ArtDir() / "misc" / "missing.png", true); + m_scrap_indicator = new GG::StaticGraphic(GG::X0, GG::Y0, Width(), GG::Y(Value(Width())), scrap_texture, GG::GRAPHIC_FITGRAPHIC | GG::GRAPHIC_PROPSCALE); + AttachChild(m_scrap_indicator); + } + } + } +} + void BuildingIndicator::SizeMove(const GG::Pt& ul, const GG::Pt& lr) { Wnd::SizeMove(ul, lr); @@ -1859,6 +1886,9 @@ if (m_graphic) m_graphic->SizeMove(GG::Pt(GG::X0, GG::Y0), child_lr); + if (m_scrap_indicator) + m_scrap_indicator->SizeMove(GG::Pt(GG::X0, GG::Y0), child_lr); + GG::Y bar_top = Height() * 4 / 5; if (m_progress_bar) m_progress_bar->SizeMove(GG::Pt(GG::X0, bar_top), child_lr); Modified: trunk/FreeOrion/UI/InfoPanels.h =================================================================== --- trunk/FreeOrion/UI/InfoPanels.h 2009-10-06 03:50:55 UTC (rev 3195) +++ trunk/FreeOrion/UI/InfoPanels.h 2009-10-07 04:04:20 UTC (rev 3196) @@ -218,15 +218,17 @@ double partial_turn); ///< constructor for use when building is partially complete, to show progress bar virtual void Render(); + void Refresh(); virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); virtual void RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); private: - GG::StaticGraphic* m_graphic; - MultiTurnProgressBar* m_progress_bar; - int m_building_id; + GG::StaticGraphic* m_graphic; + GG::StaticGraphic* m_scrap_indicator; ///< shown to indicate building was ordered scrapped + MultiTurnProgressBar* m_progress_bar; + int m_building_id; }; /** Displays a set of specials attached to an UniverseObject */ |
From: <geo...@us...> - 2009-10-13 00:42:18
|
Revision: 3204 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3204&view=rev Author: geoffthemedio Date: 2009-10-13 00:42:07 +0000 (Tue, 13 Oct 2009) Log Message: ----------- -Reworked rendering of planetpanels, to match suggestions in forums, so that box is drawn around planet render that doesn't extend to full height of the panel -Reworked which colours are used in various places, so that controls use the control colours rather than the generic window background more consistently -Adjusted default colours for backgrounds, again to match forum suggestions -Simplified tech panel rendering code -Moved rendering of researchwnd background into the techtreewnd Modified Paths: -------------- trunk/FreeOrion/UI/About.cpp trunk/FreeOrion/UI/CUIControls.cpp trunk/FreeOrion/UI/CUIControls.h trunk/FreeOrion/UI/ChatWnd.cpp trunk/FreeOrion/UI/ClientUI.cpp trunk/FreeOrion/UI/DesignWnd.cpp trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp trunk/FreeOrion/UI/ResearchWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp trunk/FreeOrion/UI/TechTreeWnd.cpp Modified: trunk/FreeOrion/UI/About.cpp =================================================================== --- trunk/FreeOrion/UI/About.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/About.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -31,7 +31,7 @@ GG::MULTI_WORDBREAK | GG::MULTI_READ_ONLY, ClientUI::GetFont(), ClientUI::CtrlBorderColor(), ClientUI::TextColor(), - ClientUI::WndColor(), GG::INTERACTIVE); + ClientUI::CtrlColor(), GG::INTERACTIVE); GG::Layout* layout = new GG::Layout(GG::X0, GG::Y0, ClientWidth(), ClientHeight(), 2, 6, 5); layout->SetMinimumRowHeight(1, m_license->Height() + 5); layout->SetRowStretch(0, 1); Modified: trunk/FreeOrion/UI/CUIControls.cpp =================================================================== --- trunk/FreeOrion/UI/CUIControls.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/CUIControls.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -574,17 +574,17 @@ /////////////////////////////////////// // class CUIScroll /////////////////////////////////////// -CUIScroll::CUIScroll(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Orientation orientation, GG::Clr color/* = GG::CLR_ZERO*/, - GG::Clr border/* = ClientUI::CtrlBorderColor()*/, GG::Clr interior/* = GG::CLR_ZERO*/, +CUIScroll::CUIScroll(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Orientation orientation, + GG::Clr border_color/* = ClientUI::CtrlBorderColor()*/, GG::Clr interior_color/* = ClientUI::CtrlColor()*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE | REPEAT_BUTTON_DOWN*/) : - Scroll(x, y, w, h, orientation, color, interior, flags), - m_border_color(border) + Scroll(x, y, w, h, orientation, interior_color, interior_color, flags), + m_border_color(border_color) {} void CUIScroll::Render() { - GG::Clr color_to_use = Disabled() ? DisabledColor(Color()) : Color(); - GG::Clr border_color_to_use = Disabled() ? DisabledColor(m_border_color) : m_border_color; + GG::Clr color_to_use = Disabled() ? DisabledColor(Color()) : Color(); + GG::Clr border_color_to_use = Disabled() ? DisabledColor(m_border_color) : m_border_color; GG::Pt ul = UpperLeft(); GG::Pt lr = LowerRight(); FlatRectangle(ul, lr, color_to_use, border_color_to_use, 1); @@ -604,13 +604,13 @@ /////////////////////////////////////// // class CUIListBox /////////////////////////////////////// -CUIListBox::CUIListBox(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, - GG::Clr interior/* = GG::CLR_ZERO*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : - ListBox(x, y, w, h, color, interior, flags) +CUIListBox::CUIListBox(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Clr border_color/* = ClientUI::CtrlBorderColor()*/, + GG::Clr interior_color/* = GG::CLR_ZERO*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : + ListBox(x, y, w, h, border_color, interior_color, flags) { RecreateScrolls(); - GG::Connect(SelChangedSignal, &PlayListSelectSound, -1); - GG::Connect(DroppedSignal, &PlayItemDropSound, -1); + GG::Connect(SelChangedSignal, &PlayListSelectSound, -1); + GG::Connect(DroppedSignal, &PlayItemDropSound, -1); } void CUIListBox::Render() @@ -632,9 +632,9 @@ const int CUIDROPDOWNLIST_ANGLE_OFFSET = 5; } -CUIDropDownList::CUIDropDownList(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Y drop_ht, GG::Clr color/* = ClientUI::CtrlBorderColor()*/, +CUIDropDownList::CUIDropDownList(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Y drop_ht, GG::Clr border_color/* = ClientUI::CtrlBorderColor()*/, GG::Clr interior/* = ClientUI::WndColor()*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : - DropDownList(x, y, w, h, drop_ht, color), + DropDownList(x, y, w, h, drop_ht, border_color), m_render_drop_arrow(true), m_mouse_here(false) { @@ -708,10 +708,10 @@ // class CUIEdit /////////////////////////////////////// CUIEdit::CUIEdit(GG::X x, GG::Y y, GG::X w, const std::string& str, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, - GG::Clr color/* = ClientUI::CtrlBorderColor()*/, - GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Clr interior/* = ClientUI::WndColor()*/, + GG::Clr border_color/* = ClientUI::CtrlBorderColor()*/, + GG::Clr text_color/* = ClientUI::TextColor()*/, GG::Clr interior/* = ClientUI::CtrlColor()*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : - Edit(x, y, w, str, FontOrDefaultFont(font), color, text_color, interior, flags) + Edit(x, y, w, str, FontOrDefaultFont(font), border_color, text_color, interior, flags) { GG::Connect(EditedSignal, &PlayTextTypingSound, -1); SetHiliteColor(ClientUI::EditHiliteColor()); @@ -720,13 +720,13 @@ void CUIEdit::Render() { GG::Clr color = Color(); - GG::Clr color_to_use = Disabled() ? DisabledColor(color) : color; + GG::Clr border_color = Disabled() ? DisabledColor(color) : color; GG::Clr int_color_to_use = Disabled() ? DisabledColor(InteriorColor()) : InteriorColor(); GG::Pt ul = UpperLeft(), lr = LowerRight(); GG::Pt client_ul = ClientUpperLeft(), client_lr = ClientLowerRight(); - FlatRectangle(ul, lr, int_color_to_use, color_to_use, 1); + FlatRectangle(ul, lr, int_color_to_use, border_color, 1); SetColor(GG::CLR_ZERO); Edit::Render(); @@ -736,11 +736,11 @@ /////////////////////////////////////// // class CUIMultiEdit /////////////////////////////////////// -CUIMultiEdit::CUIMultiEdit(GG::X x, GG::Y y, GG::X w, GG::Y h, const std::string& str, GG::Flags<GG::MultiEditStyle> style/* = MULTI_LINEWRAP*/, +CUIMultiEdit::CUIMultiEdit(GG::X x, GG::Y y, GG::X w, GG::Y h, const std::string& str, GG::Flags<GG::MultiEditStyle> style/* = MULTI_LINEWRAP*/, const boost::shared_ptr<GG::Font>& font/* = boost::shared_ptr<GG::Font>()*/, - GG::Clr color/* = ClientUI::CtrlBorderColor()*/, GG::Clr text_color/* = ClientUI::TextColor()*/, - GG::Clr interior/* = ClientUI::WndColor()*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : - MultiEdit(x, y, w, h, str, FontOrDefaultFont(font), color, style, text_color, interior, flags) + GG::Clr border_color/* = ClientUI::CtrlBorderColor()*/, GG::Clr text_color/* = ClientUI::TextColor()*/, + GG::Clr interior/* = ClientUI::CtrlColor()*/, GG::Flags<GG::WndFlag> flags/* = INTERACTIVE*/) : + MultiEdit(x, y, w, h, str, FontOrDefaultFont(font), border_color, style, text_color, interior, flags) { RecreateScrolls(); SetHiliteColor(ClientUI::EditHiliteColor()); @@ -749,12 +749,12 @@ void CUIMultiEdit::Render() { GG::Clr color = Color(); - GG::Clr color_to_use = Disabled() ? DisabledColor(color) : color; - GG::Clr int_color_to_use = Disabled() ? DisabledColor(InteriorColor()) : InteriorColor(); + GG::Clr border_color = Disabled() ? DisabledColor(color) : color; + GG::Clr int_color_to_use = Disabled() ? DisabledColor(InteriorColor()) : InteriorColor(); GG::Pt ul = UpperLeft(), lr = LowerRight(); - FlatRectangle(ul, lr, int_color_to_use, color_to_use, 1); + FlatRectangle(ul, lr, int_color_to_use, border_color, 1); SetColor(GG::CLR_ZERO); MultiEdit::Render(); @@ -766,9 +766,9 @@ /////////////////////////////////////// CUILinkTextMultiEdit::CUILinkTextMultiEdit(GG::X x, GG::Y y, GG::X w, GG::Y h, const std::string& str, GG::Flags<GG::MultiEditStyle> style, const boost::shared_ptr<GG::Font>& font, - GG::Clr color, GG::Clr text_color, + GG::Clr border_color, GG::Clr text_color, GG::Clr interior, GG::Flags<GG::WndFlag> flags) : - CUIMultiEdit(x, y, w, h, str, style, font, color, text_color, interior, flags), + CUIMultiEdit(x, y, w, h, str, style, font, border_color, text_color, interior, flags), TextLinker(), m_already_setting_text_so_dont_link(false) {} Modified: trunk/FreeOrion/UI/CUIControls.h =================================================================== --- trunk/FreeOrion/UI/CUIControls.h 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/CUIControls.h 2009-10-13 00:42:07 UTC (rev 3204) @@ -31,7 +31,7 @@ public: /** \name Structors */ //@{ CUIButton(GG::X x, GG::Y y, GG::X w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), - GG::Clr color = ClientUI::WndColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, + GG::Clr color = ClientUI::CtrlColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, GG::Clr text_color = ClientUI::TextColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} @@ -71,7 +71,7 @@ public: /** \name Structors */ //@{ CUITurnButton(GG::X x, GG::Y y, GG::X w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), - GG::Clr color = ClientUI::WndColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, + GG::Clr color = ClientUI::CtrlColor(), GG::Clr border = ClientUI::CtrlBorderColor(), int thick = 1, GG::Clr text_color = ClientUI::TextColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} }; @@ -178,21 +178,17 @@ }; /** \name Structors */ //@{ - CUIScroll(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Orientation orientation, GG::Clr color = GG::CLR_ZERO, - GG::Clr border = ClientUI::CtrlBorderColor(), GG::Clr interior = GG::CLR_ZERO, + CUIScroll(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Orientation orientation, + GG::Clr border_color = ClientUI::CtrlBorderColor(), GG::Clr interior_color = ClientUI::CtrlColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE | GG::REPEAT_BUTTON_DOWN); ///< basic ctor //@} - /** \name Accessors */ //@{ - GG::Clr BorderColor() const {return m_border_color;} ///< returns the color used to render the border of the control - //@} - /** \name Mutators */ //@{ virtual void Render(); virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); //@} -private: +protected: GG::Clr m_border_color; }; @@ -202,7 +198,7 @@ { public: /** \name Structors */ //@{ - CUIListBox(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr interior = GG::CLR_ZERO, + CUIListBox(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Clr border_color = ClientUI::CtrlBorderColor(), GG::Clr interior_color = GG::CLR_ZERO, GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} @@ -238,8 +234,8 @@ { public: /** \name Structors */ //@{ - CUIDropDownList(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Y drop_ht, GG::Clr color = ClientUI::CtrlBorderColor(), - GG::Clr interior = ClientUI::WndColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor + CUIDropDownList(GG::X x, GG::Y y, GG::X w, GG::Y h, GG::Y drop_ht, GG::Clr border_color = ClientUI::CtrlBorderColor(), + GG::Clr interior = ClientUI::CtrlColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -264,8 +260,8 @@ public: /** \name Structors */ //@{ CUIEdit(GG::X x, GG::Y y, GG::X w, const std::string& str, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), - GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), - GG::Clr interior = ClientUI::WndColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor + GG::Clr border_color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), + GG::Clr interior = ClientUI::CtrlColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -281,8 +277,8 @@ /** \name Structors */ //@{ CUIMultiEdit(GG::X x, GG::Y y, GG::X w, GG::Y h, const std::string& str, GG::Flags<GG::MultiEditStyle> style = GG::MULTI_LINEWRAP, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), - GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), - GG::Clr interior = ClientUI::WndColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor + GG::Clr border_color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), + GG::Clr interior = ClientUI::CtrlColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} /** \name Mutators */ //@{ @@ -297,8 +293,8 @@ /** \name Structors */ //@{ CUILinkTextMultiEdit(GG::X x, GG::Y y, GG::X w, GG::Y h, const std::string& str, GG::Flags<GG::MultiEditStyle> style = GG::MULTI_LINEWRAP, const boost::shared_ptr<GG::Font>& font = boost::shared_ptr<GG::Font>(), - GG::Clr color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), - GG::Clr interior = ClientUI::WndColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor + GG::Clr border_color = ClientUI::CtrlBorderColor(), GG::Clr text_color = ClientUI::TextColor(), + GG::Clr interior = ClientUI::CtrlColor(), GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE); ///< basic ctor //@} /** \name Accessors */ //@{ virtual const std::vector<GG::Font::LineData>& GetLineData() const; Modified: trunk/FreeOrion/UI/ChatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ChatWnd.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/ChatWnd.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -33,7 +33,7 @@ Wnd(GG::X0, GG::Y0, GG::GUI::GetGUI()->AppWidth(), GG::GUI::GetGUI()->AppHeight(), GG::ONTOP), m_display(0), m_edit(new CUIEdit(GG::X(LAYOUT_MARGIN), GG::GUI::GetGUI()->AppHeight() - CHAT_EDIT_HEIGHT - LAYOUT_MARGIN, CHAT_WIDTH, "", - ClientUI::GetFont(), ClientUI::CtrlBorderColor(), ClientUI::TextColor(), GG::CLR_ZERO)), + ClientUI::GetFont(), ClientUI::CtrlBorderColor(), ClientUI::TextColor(), ClientUI::CtrlColor())), m_display_show_time(0), m_history(), m_history_position() Modified: trunk/FreeOrion/UI/ClientUI.cpp =================================================================== --- trunk/FreeOrion/UI/ClientUI.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/ClientUI.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -387,11 +387,11 @@ db.Add("UI.title-font-size", "OPTIONS_DB_UI_TITLE_FONT_SIZE", 12, RangedValidator<int>(4, 40)); // colors - db.Add("UI.wnd-color", "OPTIONS_DB_UI_WND_COLOR", StreamableColor(GG::Clr(0, 0, 0, 220)), Validator<StreamableColor>()); + db.Add("UI.wnd-color", "OPTIONS_DB_UI_WND_COLOR", StreamableColor(GG::Clr(35, 35, 35, 240)), Validator<StreamableColor>()); db.Add("UI.wnd-outer-border-color", "OPTIONS_DB_UI_WND_OUTER_BORDER_COLOR", StreamableColor(GG::Clr(64, 64, 64, 255)), Validator<StreamableColor>()); - db.Add("UI.wnd-inner-border-color", "OPTIONS_DB_UI_WND_INNER_BORDER_COLOR", StreamableColor(GG::Clr(255, 255, 255, 255)), Validator<StreamableColor>()); + db.Add("UI.wnd-inner-border-color", "OPTIONS_DB_UI_WND_INNER_BORDER_COLOR", StreamableColor(GG::Clr(192, 192, 192, 255)), Validator<StreamableColor>()); - db.Add("UI.ctrl-color", "OPTIONS_DB_UI_CTRL_COLOR", StreamableColor(GG::Clr(30, 30, 30, 255)), Validator<StreamableColor>()); + db.Add("UI.ctrl-color", "OPTIONS_DB_UI_CTRL_COLOR", StreamableColor(GG::Clr(15, 15, 15, 255)), Validator<StreamableColor>()); db.Add("UI.ctrl-border-color", "OPTIONS_DB_UI_CTRL_BORDER_COLOR", StreamableColor(GG::Clr(124, 124, 124, 255)), Validator<StreamableColor>()); db.Add("UI.dropdownlist-arrow-color", "OPTIONS_DB_UI_DROPDOWNLIST_ARROW_COLOR", StreamableColor(GG::Clr(130, 130, 0, 255)), Validator<StreamableColor>()); Modified: trunk/FreeOrion/UI/DesignWnd.cpp =================================================================== --- trunk/FreeOrion/UI/DesignWnd.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/DesignWnd.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -1635,31 +1635,31 @@ boost::shared_ptr<GG::Font> font = ClientUI::GetFont(); - m_design_name_label = new GG::TextControl(GG::X0, GG::Y0, GG::X(10), GG::Y(10), UserString("DESIGN_WND_DESIGN_NAME"), font, + m_design_name_label = new GG::TextControl(GG::X0, GG::Y0, GG::X(10), GG::Y(10), UserString("DESIGN_WND_DESIGN_NAME"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT | GG::FORMAT_VCENTER, GG::INTERACTIVE | GG::ONTOP); AttachChild(m_design_name_label); m_design_name = new CUIEdit(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_NAME_DEFAULT"), font, ClientUI::CtrlBorderColor(), - ClientUI::TextColor(), ClientUI::WndColor(), GG::INTERACTIVE | GG::ONTOP); + ClientUI::TextColor(), ClientUI::CtrlColor(), GG::INTERACTIVE | GG::ONTOP); AttachChild(m_design_name); - m_design_description_label = new GG::TextControl(GG::X0, GG::Y0, GG::X(10), GG::Y(10), UserString("DESIGN_WND_DESIGN_DESCRIPTION"), font, + m_design_description_label = new GG::TextControl(GG::X0, GG::Y0, GG::X(10), GG::Y(10), UserString("DESIGN_WND_DESIGN_DESCRIPTION"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT | GG::FORMAT_VCENTER, GG::INTERACTIVE | GG::ONTOP); AttachChild(m_design_description_label); m_design_description = new CUIEdit(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_DESCRIPTION_DEFAULT"), font, ClientUI::CtrlBorderColor(), - ClientUI::TextColor(), ClientUI::WndColor(), GG::INTERACTIVE | GG::ONTOP); + ClientUI::TextColor(), ClientUI::CtrlColor(), GG::INTERACTIVE | GG::ONTOP); AttachChild(m_design_description); - m_confirm_button = new CUIButton(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_WND_CONFIRM"), font, ClientUI::WndColor(), + m_confirm_button = new CUIButton(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_WND_CONFIRM"), font, ClientUI::CtrlColor(), ClientUI::CtrlBorderColor(), 1, ClientUI::TextColor(), GG::INTERACTIVE | GG::ONTOP); AttachChild(m_confirm_button); GG::Connect(m_confirm_button->ClickedSignal, DesignConfirmedSignal); m_confirm_button->Disable(true); - m_clear_button = new CUIButton(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_WND_CLEAR"), font, ClientUI::WndColor(), + m_clear_button = new CUIButton(GG::X0, GG::Y0, GG::X(10), UserString("DESIGN_WND_CLEAR"), font, ClientUI::CtrlColor(), ClientUI::CtrlBorderColor(), 1, ClientUI::TextColor(), GG::INTERACTIVE | GG::ONTOP); AttachChild(m_clear_button); GG::Connect(m_clear_button->ClickedSignal, &DesignWnd::MainPanel::ClearParts, this); Modified: trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/MultiplayerLobbyWnd.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -173,7 +173,7 @@ GG::X x(CONTROL_MARGIN); m_chat_input_edit = new CUIEdit(x, ClientHeight() - (ClientUI::Pts() + 10) - 2 * CONTROL_MARGIN, CHAT_WIDTH - x, ""); - m_chat_box = new CUIMultiEdit(x, GG::Y(CONTROL_MARGIN), CHAT_WIDTH - x, m_chat_input_edit->UpperLeft().y - 2 * CONTROL_MARGIN, "", + m_chat_box = new CUIMultiEdit(x, GG::Y(CONTROL_MARGIN), CHAT_WIDTH - x, m_chat_input_edit->UpperLeft().y - 2 * CONTROL_MARGIN, "", GG::MULTI_LINEWRAP | GG::MULTI_READ_ONLY | GG::MULTI_TERMINAL_STYLE); m_chat_box->SetMaxLinesOfHistory(250); @@ -190,7 +190,7 @@ m_new_load_game_buttons->AddButton( new CUIStateButton(GG::X0, GG::Y0, GG::X(100), RADIO_BN_HT, UserString("LOAD_GAME_BN"), GG::FORMAT_LEFT, GG::SBSTYLE_3D_RADIO)); - m_saved_games_list = new CUIDropDownList(CHAT_WIDTH + 2 * CONTROL_MARGIN, m_new_load_game_buttons->LowerRight().y + CONTROL_MARGIN, + m_saved_games_list = new CUIDropDownList(CHAT_WIDTH + 2 * CONTROL_MARGIN, m_new_load_game_buttons->LowerRight().y + CONTROL_MARGIN, GALAXY_SETUP_PANEL_WIDTH, SAVED_GAMES_LIST_ROW_HEIGHT, SAVED_GAMES_LIST_DROP_HEIGHT); m_saved_games_list->SetStyle(GG::LIST_NOSORT); Modified: trunk/FreeOrion/UI/ResearchWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ResearchWnd.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/ResearchWnd.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -255,31 +255,8 @@ } void ResearchWnd::Render() -{ - GG::Pt ul = UpperLeft(); - GG::Pt lr = LowerRight(); +{} - // use GL to draw the lines - glDisable(GL_TEXTURE_2D); - GLint initial_modes[2]; - glGetIntegerv(GL_POLYGON_MODE, initial_modes); - - // draw background - glPolygonMode(GL_BACK, GL_FILL); - glBegin(GL_POLYGON); - glColor(ClientUI::WndColor()); - glVertex(ul.x, ul.y); - glVertex(lr.x, ul.y); - glVertex(lr.x, lr.y); - glVertex(ul.x, lr.y); - glVertex(ul.x, ul.y); - glEnd(); - - // reset this to whatever it was initially - glPolygonMode(GL_BACK, initial_modes[1]); - glEnable(GL_TEXTURE_2D); -} - void ResearchWnd::ResearchQueueChangedSlot() { UpdateQueue(); Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -7,17 +7,17 @@ #include "FleetWnd.h" #include "InfoPanels.h" #include "MapWnd.h" -#include "../client/human/HumanClientApp.h" -#include "../util/MultiplayerCommon.h" #include "../universe/Predicates.h" #include "../universe/ShipDesign.h" #include "../universe/Fleet.h" #include "../universe/Ship.h" #include "../universe/Building.h" +#include "../Empire/Empire.h" +#include "../util/MultiplayerCommon.h" #include "../util/Random.h" #include "../util/XMLDoc.h" -#include "../Empire/Empire.h" #include "../util/OptionsDB.h" +#include "../client/human/HumanClientApp.h" #include <GG/DrawUtil.h> #include <GG/StaticGraphic.h> @@ -435,6 +435,7 @@ GG::DynamicGraphic* m_planet_graphic; ///< image of the planet (can be a frameset); this is now used only for asteroids RotatingPlanetControl* m_rotating_planet_graphic; ///< a realtime-rendered planet that rotates, with a textured surface mapped onto it bool m_selected; ///< is this planet panel selected + GG::Clr m_empire_colour; ///< colour to use for empire-specific highlighting. set based on ownership of planet. PopulationPanel* m_population_panel; ///< contains info about population and health ResourcePanel* m_resource_panel; ///< contains info about resources production and focus selection UI MilitaryPanel* m_military_panel; ///< contains icons representing military-related meters @@ -677,6 +678,7 @@ m_planet_graphic(0), m_rotating_planet_graphic(0), m_selected(false), + m_empire_colour(GG::CLR_ZERO), m_population_panel(0), m_resource_panel(0), m_military_panel(0), @@ -811,7 +813,7 @@ m_button_colonize = new CUIButton(GG::X(MAX_PLANET_DIAMETER), GG::Y0, GG::X(ClientUI::Pts()*8), UserString("PL_COLONIZE"), ClientUI::GetFont(), - ClientUI::WndColor(), ClientUI::CtrlBorderColor(), 1, + ClientUI::CtrlColor(), ClientUI::CtrlBorderColor(), 1, ClientUI::TextColor(), GG::INTERACTIVE); GG::Connect(m_button_colonize->ClickedSignal, &SidePanel::PlanetPanel::ClickColonize, this); @@ -906,7 +908,7 @@ void SidePanel::PlanetPanel::Refresh() { //std::cout << "SidePanel::PlanetPanel::Refresh" << std::endl; - const Planet *planet = GetPlanet(); + const Planet* planet = GetPlanet(); if (!planet) { Logger().debugStream() << "PlanetPanel::Refresh couldn't get planet!"; // clear / hide everything... @@ -933,9 +935,14 @@ // colour planet name with owner's empire colour + m_empire_colour = GG::CLR_ZERO; if (!planet->Owners().empty()) { - Empire* planet_empire = Empires().Lookup(*(planet->Owners().begin())); - m_planet_name->SetTextColor(planet_empire ? planet_empire->Color() : ClientUI::TextColor()); + if (Empire* planet_empire = Empires().Lookup(*(planet->Owners().begin()))) { + m_empire_colour = planet_empire->Color(); + m_planet_name->SetTextColor(planet_empire->Color()); + } else { + m_planet_name->SetTextColor(ClientUI::TextColor()); + } } @@ -1041,28 +1048,90 @@ void SidePanel::PlanetPanel::Render() { - // main background position and colour - const GG::Clr& background_colour = ClientUI::WndColor(); GG::Pt ul = UpperLeft(), lr = LowerRight(); + GG::Pt name_ul = m_planet_name->UpperLeft() - GG::Pt(GG::X(EDGE_PAD), GG::Y0); + GG::Pt name_lr = GG::Pt(lr.x, m_planet_name->LowerRight().y); + const int MAX_PLANET_DIAMETER = GetOptionsDB().Get<int>("UI.sidepanel-planet-max-diameter"); + GG::Pt planet_box_lr = ul + GG::Pt(GG::X(MAX_PLANET_DIAMETER), GG::Y(MAX_PLANET_DIAMETER)); + bool show_planet_box = true; - // title background colour and position - const GG::Clr& unselected_colour = ClientUI::WndOuterBorderColor(); - const GG::Clr& selected_colour = ClientUI::WndInnerBorderColor(); + if (m_rotating_planet_graphic) { + // default OK + } else if (m_planet_graphic) { + planet_box_lr = m_planet_graphic->LowerRight(); + } else { + show_planet_box = false; // no planet render to put box behind + } - GG::Clr border_colour = m_selected ? selected_colour : unselected_colour; - int border_thick = m_selected ? 2 : 1; - GG::Pt name_ul = m_planet_name->UpperLeft() - GG::Pt(GG::X(EDGE_PAD), GG::Y0); - GG::Pt name_lr = GG::Pt(lr.x, m_planet_name->LowerRight().y); + GG::Clr background_colour = ClientUI::CtrlColor(); + GG::Clr title_background_colour = ClientUI::WndOuterBorderColor(); + GG::Clr border_colour = (m_selected ? m_empire_colour : ClientUI::WndOuterBorderColor()); - // render - GG::FlatRectangle(ul, lr, background_colour, border_colour, border_thick); // background and border - GG::FlatRectangle(name_ul, name_lr, border_colour, GG::CLR_ZERO, 0); // title background box + const int OFFSET = 15; // size of corners cut off sticky-out bit of background around planet render + glDisable(GL_TEXTURE_2D); + + // standard WndColor background for whole panel + glColor(background_colour); + glBegin(GL_TRIANGLE_FAN); + glVertex(lr.x, ul.y); // top right corner + if (show_planet_box) { + glVertex(ul.x + OFFSET, ul.y); // top left, offset right to cut off corner + glVertex(ul.x, ul.y + OFFSET); // top left, offset down to cut off corner + glVertex(ul.x, planet_box_lr.y - OFFSET); // bottom left, offset up to cut off corner + glVertex(ul.x + OFFSET, planet_box_lr.y); // bottom left, offset right to cut off corner + glVertex(planet_box_lr.x, planet_box_lr.y); // inner corner between planet box and rest of panel + } else { + glVertex(planet_box_lr.x, ul.y); // top left of main panel, excluding planet box + } + glVertex(planet_box_lr.x, lr.y); // bottom left of main panel + glVertex(lr.x, lr.y); // bottom right + glEnd(); + + // border + glColor(border_colour); + glLineWidth(1.5); + glBegin(GL_LINE_LOOP); + glVertex(lr.x, ul.y); // top right corner + if (show_planet_box) { + glVertex(ul.x + OFFSET, ul.y); // top left, offset right to cut off corner + glVertex(ul.x, ul.y + OFFSET); // top left, offset down to cut off corner + glVertex(ul.x, planet_box_lr.y - OFFSET); // bottom left, offset up to cut off corner + glVertex(ul.x + OFFSET, planet_box_lr.y); // bottom left, offset right to cut off corner + glVertex(planet_box_lr.x, planet_box_lr.y); // inner corner between planet box and rest of panel + } else { + glVertex(planet_box_lr.x, ul.y); // top left of main panel, excluding planet box + } + glVertex(planet_box_lr.x, lr.y); // bottom left of main panel + glVertex(lr.x, lr.y); // bottom right + glEnd(); + glLineWidth(1.0); + + // title background box + GG::FlatRectangle(name_ul, name_lr, title_background_colour, GG::CLR_ZERO, 0); + // disable greyover const GG::Clr HALF_GREY(128, 128, 128, 128); - if (Disabled()) - GG::FlatRectangle(ul, lr, HALF_GREY, HALF_GREY, 0); + if (Disabled()) { + glColor(HALF_GREY); + glBegin(GL_TRIANGLE_FAN); + glVertex(lr.x, ul.y); // top right corner + if (show_planet_box) { + glVertex(ul.x + OFFSET, ul.y); // top left, offset right to cut off corner + glVertex(ul.x, ul.y + OFFSET); // top left, offset down to cut off corner + glVertex(ul.x, planet_box_lr.y - OFFSET); // bottom left, offset up to cut off corner + glVertex(ul.x + OFFSET, planet_box_lr.y); // bottom left, offset right to cut off corner + glVertex(planet_box_lr.x, planet_box_lr.y); // inner corner between planet box and rest of panel + } else { + glVertex(planet_box_lr.x, ul.y); // top left of main panel, excluding planet box + } + glVertex(planet_box_lr.x, lr.y); // bottom left of main panel + glVertex(lr.x, lr.y); // bottom right + glEnd(); + } + + glEnable(GL_TEXTURE_2D); } void SidePanel::PlanetPanel::Select(bool selected) @@ -1160,7 +1229,7 @@ void SidePanel::PlanetPanelContainer::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { - if (m_vscroll) { + if (m_vscroll && m_vscroll->Parent() == this) { if (move < 0) m_vscroll->ScrollLineIncr(); else @@ -1245,7 +1314,7 @@ GG::Y available_height = Height(); if (GG::Wnd* parent = Parent()) { GG::Y containing_height = parent->Height(); - const GG::Y BIG_PAD_TO_BE_SAFE = GG::Y(300); + const GG::Y BIG_PAD_TO_BE_SAFE = GG::Y(50); available_height = containing_height - BIG_PAD_TO_BE_SAFE; // height of visible "page" of panels } Modified: trunk/FreeOrion/UI/TechTreeWnd.cpp =================================================================== --- trunk/FreeOrion/UI/TechTreeWnd.cpp 2009-10-12 00:38:18 UTC (rev 3203) +++ trunk/FreeOrion/UI/TechTreeWnd.cpp 2009-10-13 00:42:07 UTC (rev 3204) @@ -83,7 +83,7 @@ const GG::X TECH_PANEL_LAYOUT_WIDTH = THEORY_TECH_PANEL_LAYOUT_WIDTH; const GG::Y TECH_PANEL_LAYOUT_HEIGHT = THEORY_TECH_PANEL_LAYOUT_HEIGHT - PROGRESS_PANEL_BOTTOM_EXTRUSION; - const double OUTER_LINE_THICKNESS = 2.0; + const double OUTER_LINE_THICKNESS = 1.5; const double ARC_THICKNESS = 3.0; const double TECH_NAVIGATOR_ROLLOVER_BRIGHTENING_FACTOR = 1.5; @@ -128,88 +128,59 @@ return retval; } - void FillTheoryPanel(const GG::Rect& panel, int corner_radius) + void RenderTechPanel(TechType tech_type, const GG::Rect& main_panel, const GG::Rect& progress_panel, + GG::Clr interior_color, GG::Clr border_color, bool show_progress, double progress) { - PartlyRoundedRect(panel.ul, panel.lr, corner_radius, true, true, true, true, true); - } + glDisable(GL_TEXTURE_2D); - void FillApplicationPanel(const GG::Rect& panel, int corner_radius) - { - PartlyRoundedRect(panel.ul, panel.lr, corner_radius, true, true, false, false, true); - } + // main panel background + glColor(interior_color); + if (tech_type == TT_THEORY) { + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, true, true, true); + } else if (tech_type == TT_APPLICATION) { + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, false, false, true); + } else { // tech_type == TT_REFINEMENT + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, false, false, false, false, true); + } - void FillRefinementPanel(const GG::Rect& panel) - { - glBegin(GL_QUADS); - glVertex(panel.ul.x, panel.ul.y); - glVertex(panel.ul.x, panel.lr.y); - glVertex(panel.lr.x, panel.lr.y); - glVertex(panel.lr.x, panel.ul.y); - glEnd(); - } - - void FillTechPanelInterior(TechType tech_type, const GG::Rect& main_panel, const GG::Rect& progress_panel, GG::Clr color, bool show_progress, double progress) - { - GG::Clr progress_background_color = ClientUI::TechWndProgressBarBackground(); - GG::Clr progress_color = ClientUI::TechWndProgressBar(); - glColor(color); - GG::X progress_extent((0.0 < progress && progress < 1.0) ? (progress_panel.ul.x + progress * PROGRESS_PANEL_WIDTH + 0.5) : GG::X_d(0)); + // main panel border + glColor(border_color); + glEnable(GL_LINE_SMOOTH); + glLineWidth(OUTER_LINE_THICKNESS); if (tech_type == TT_THEORY) { - FillTheoryPanel(main_panel, MAIN_PANEL_CORNER_RADIUS); - if (show_progress) { - if (progress_extent) { - glColor(progress_background_color); - FillTheoryPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - glColor(progress_color); - GG::BeginScissorClipping(progress_panel.ul, GG::Pt(progress_extent, progress_panel.lr.y)); - FillTheoryPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - GG::EndScissorClipping(); - } else { - FillTheoryPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - } - } + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, true, true, false); } else if (tech_type == TT_APPLICATION) { - FillApplicationPanel(main_panel, MAIN_PANEL_CORNER_RADIUS); - if (show_progress) { - if (progress_extent) { - glColor(progress_background_color); - FillApplicationPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - glColor(progress_color); - GG::BeginScissorClipping(progress_panel.ul, GG::Pt(progress_extent, progress_panel.lr.y)); - FillApplicationPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - GG::EndScissorClipping(); - } else { - FillApplicationPanel(progress_panel, PROGRESS_PANEL_CORNER_RADIUS); - } - } + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, false, false, false); } else { // tech_type == TT_REFINEMENT - FillRefinementPanel(main_panel); - if (show_progress) { - if (progress_extent) { - glColor(progress_background_color); - FillRefinementPanel(progress_panel); - glColor(progress_color); - GG::BeginScissorClipping(progress_panel.ul, GG::Pt(progress_extent, progress_panel.lr.y)); - FillRefinementPanel(progress_panel); - GG::EndScissorClipping(); - } else { - FillRefinementPanel(progress_panel); - } - } + PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, false, false, false, false, false); } - } + glLineWidth(1.0); + glDisable(GL_LINE_SMOOTH); - void TraceTechPanelOutline(TechType tech_type, const GG::Rect& main_panel, const GG::Rect& progress_panel, bool show_progress) - { - if (tech_type == TT_THEORY) - PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, true, true, false); - else if (tech_type == TT_APPLICATION) - PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, true, true, false, false, false); - else - PartlyRoundedRect(main_panel.ul, main_panel.lr, MAIN_PANEL_CORNER_RADIUS, false, false, false, false, false); + if (show_progress) { + // progress panel background + glColor(ClientUI::TechWndProgressBarBackground()); + PartlyRoundedRect(progress_panel.ul, progress_panel.lr, PROGRESS_PANEL_CORNER_RADIUS, true, true, true, true, true); - if (show_progress) + GG::X progress_extent((0.0 < progress && progress < 1.0) ? (progress_panel.ul.x + progress * progress_panel.Width() + 0.5) : GG::X_d(0)); + if (progress_extent) { + // progress bar + glColor(ClientUI::TechWndProgressBar()); + GG::BeginScissorClipping(progress_panel.ul, GG::Pt(progress_extent, progress_panel.lr.y)); + PartlyRoundedRect(progress_panel.ul, progress_panel.lr, PROGRESS_PANEL_CORNER_RADIUS, true, true, true, true, true); + GG::EndScissorClipping(); + } + + // progress panel border + glColor(border_color); + glEnable(GL_LINE_SMOOTH); + glLineWidth(OUTER_LINE_THICKNESS); PartlyRoundedRect(progress_panel.ul, progress_panel.lr, PROGRESS_PANEL_CORNER_RADIUS, true, true, true, true, false); + glLineWidth(1.0); + glDisable(GL_LINE_SMOOTH); + } + + glEnable(GL_TEXTURE_2D); } struct ToggleCategoryFunctor @@ -528,8 +499,9 @@ ////////////////////////////////////////////////// // TechTreeWnd::TechNavigator // ////////////////////////////////////////////////// -/** A window with a single lisbox in it. The listbox represents the techs that are required for and are - unlocked by some tech. Clicking on a prereq or unlocked tech will bring up that tech. */ +/** A window with a single lisbox in it. The listbox represents the techs that + * are required for and are unlocked by some tech. Clicking on a prereq or + * unlocked tech will bring up that tech. */ class TechTreeWnd::TechNavigator : public CUIWnd { public: @@ -545,8 +517,9 @@ virtual void LDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys); private: - /** A control with a label \a str on it, and that is rendered partially onto the next row. - The "Requires" and "Unlocks" rows are in of this class. */ + /** A control with a label \a str on it, and that is rendered partially + * onto the next row. The "Requires" and "Unlocks" rows are in of this + * class. */ class SectionHeaderControl : public GG::Control { public: @@ -561,35 +534,35 @@ { public: TechControl(const Tech* tech); - virtual GG::Pt ClientUpperLeft() const {return UpperLeft() + GG::Pt(GG::X(3), GG::Y(2));} - virtual GG::Pt ClientLowerRight() const {return LowerRight() - GG::Pt(GG::X(2), GG::Y(2));} - virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); - virtual void Render(); - virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {ClickedSignal(m_tech);} - virtual void MouseEnter(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {m_selected = true;} - virtual void MouseLeave() {m_selected = false;} + virtual GG::Pt ClientUpperLeft() const {return UpperLeft() + GG::Pt(GG::X(3), GG::Y(2));} + virtual GG::Pt ClientLowerRight() const {return LowerRight() - GG::Pt(GG::X(2), GG::Y(2));} + virtual void SizeMove(const GG::Pt& ul, const GG::Pt& lr); + virtual void Render(); + virtual void LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {ClickedSignal(m_tech);} + virtual void MouseEnter(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) {m_selected = true;} + virtual void MouseLeave() {m_selected = false;} mutable boost::signal<void (const Tech*)> ClickedSignal; private: - const Tech * const m_tech; - GG::Clr m_border_color; - GG::TextControl* m_name_text; - bool m_selected; + const Tech * const m_tech; + GG::Clr m_border_color; + GG::TextControl* m_name_text; + bool m_selected; }; - static const GG::X TECH_ROW_INDENTATION; - static const GG::X LB_MARGIN_X; - static const GG::Y LB_MARGIN_Y; - - GG::ListBox::Row* NewSectionHeaderRow(const std::string& str); - GG::ListBox::Row* NewTechRow(const Tech* tech); - void Reset(); + static const GG::X TECH_ROW_INDENTATION; + static const GG::X LB_MARGIN_X; + static const GG::Y LB_MARGIN_Y; - void DoLayout(); + GG::ListBox::Row* NewSectionHeaderRow(const std::string& str); + GG::ListBox::Row* NewTechRow(const Tech* tech); + void Reset(); - const Tech* m_current_tech; - GG::ListBox* m_lb; + void DoLayout(); + + const Tech* m_current_tech; + GG::ListBox* m_lb; }; const GG::X TechTreeWnd::TechNavigator::TECH_ROW_INDENTATION(8); const GG::X TechTreeWnd::TechNavigator::LB_MARGIN_X(5); @@ -764,17 +737,7 @@ AdjustBrightness(color_to_use, TECH_NAVIGATOR_ROLLOVER_BRIGHTENING_FACTOR); AdjustBrightness(border_color_to_use, TECH_NAVIGATOR_ROLLOVER_BRIGHTENING_FACTOR); } - glDisable(GL_TEXTURE_2D); - FillTechPanelInterior(tech_type, rect, GG::Rect(), color_to_use, false, 0.0); - glEnable(GL_LINE_SMOOTH); - glLineWidth(OUTER_LINE_THICKNESS); - glColor4ub(border_color_to_use.r, border_color_to_use.g, border_color_to_use.b, 127); - TraceTechPanelOutline(tech_type, rect, GG::Rect(), false); - glLineWidth(1.0); - glDisable(GL_LINE_SMOOTH); - glColor(border_color_to_use); - TraceTechPanelOutline(tech_type, rect, GG::Rect(), false); - glEnable(GL_TEXTURE_2D); + RenderTechPanel(tech_type, rect, GG::Rect(), color_to_use, border_color_to_use, false, 0.0); } void TechTreeWnd::TechNavigator::TechControl::SizeMove(const GG::Pt& ul, const GG::Pt& lr) @@ -1007,24 +970,18 @@ void TechTreeWnd::LayoutPanel::TechPanel::Render() { - GG::Pt ul = UpperLeft(), lr = LowerRight() - GG::Pt(static_cast<GG::X>(PROGRESS_PANEL_LEFT_EXTRUSION * m_scale), static_cast<GG::Y>(PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale)); - GG::Clr interior_color_to_use = m_selected ? GG::LightColor(m_fill_color) : m_fill_color; - GG::Clr border_color_to_use = m_selected ? GG::LightColor(m_text_and_border_color) : m_text_and_border_color; + GG::Pt ul = UpperLeft(); + GG::Pt lr = LowerRight() - GG::Pt(static_cast<GG::X>(PROGRESS_PANEL_LEFT_EXTRUSION * m_scale), + static_cast<GG::Y>(PROGRESS_PANEL_BOTTOM_EXTRUSION * m_scale)); + GG::Clr interior_color_to_use = m_selected ? GG::LightColor(m_fill_color) : m_fill_color; + GG::Clr border_color_to_use = m_selected ? GG::LightColor(m_text_and_border_color) : m_text_and_border_color; - GG::Rect main_panel(ul, lr); - GG::Rect progress_panel = ProgressPanelRect(ul, lr); - TechType tech_type = m_tech->Type(); - glDisable(GL_TEXTURE_2D); - FillTechPanelInterior(tech_type, main_panel, progress_panel, interior_color_to_use, !m_progress_text->Empty(), m_progress); - glEnable(GL_LINE_SMOOTH); - glLineWidth(OUTER_LINE_THICKNESS * m_scale); - glColor4ub(border_color_to_use.r, border_color_to_use.g, border_color_to_use.b, 127); - TraceTechPanelOutline(tech_type, main_panel, progress_panel, !m_progress_text->Empty()); - glLineWidth(1.0); - glDisable(GL_LINE_SMOOTH); - glColor(border_color_to_use); - TraceTechPanelOutline(tech_type, main_panel, progress_panel, !m_progress_text->Empty()); - glEnable(GL_TEXTURE_2D); + GG::Rect main_panel(ul, lr); + GG::Rect progress_panel = ProgressPanelRect(ul, lr); + TechType tech_type = m_tech->Type(); + bool show_progress = !m_progress_text->Empty(); + + RenderTechPanel(tech_type, main_panel, progress_panel, interior_color_to_use, border_color_to_use, show_progress, m_progress); } void TechTreeWnd::LayoutPanel::TechPanel::LClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) @@ -1225,11 +1182,32 @@ void TechTreeWnd::LayoutPanel::Render() { + GG::Pt ul = UpperLeft(); GG::Pt lr = LowerRight(); + glDisable(GL_TEXTURE_2D); + GLint initial_modes[2]; + glGetIntegerv(GL_POLYGON_MODE, initial_modes); + + // draw background + glPolygonMode(GL_BACK, GL_FILL); + glBegin(GL_POLYGON); + glColor(ClientUI::CtrlColor()); + glVertex(ul.x, ul.y); + glVertex(lr.x, ul.y); + glVertex(lr.x, lr.y); + glVertex(ul.x, lr.y); + glVertex(ul.x, ul.y); + glEnd(); + + // reset this to whatever it was initially + glPolygonMode(GL_BACK, initial_modes[1]); + + + BeginClipping(); // render dependency arcs - glDisable(GL_TEXTURE_2D); + glPushMatrix(); glTranslated(-Value(m_scroll_position.x), -Value(m_scroll_position.y), 0); |
From: <geo...@us...> - 2009-10-16 07:41:56
|
Revision: 3212 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3212&view=rev Author: geoffthemedio Date: 2009-10-16 07:41:41 +0000 (Fri, 16 Oct 2009) Log Message: ----------- -Tweaked planet panel rendering order -Tweaked research and production screen layout Modified Paths: -------------- trunk/FreeOrion/UI/ProductionWnd.cpp trunk/FreeOrion/UI/ResearchWnd.cpp trunk/FreeOrion/UI/SidePanel.cpp Modified: trunk/FreeOrion/UI/ProductionWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ProductionWnd.cpp 2009-10-16 06:15:49 UTC (rev 3211) +++ trunk/FreeOrion/UI/ProductionWnd.cpp 2009-10-16 07:41:41 UTC (rev 3212) @@ -228,7 +228,7 @@ m_queue_lb = new QueueListBox(GG::X(2), m_production_info_panel->LowerRight().y, m_production_info_panel->Width() - 4, ClientSize().y - 4 - m_production_info_panel->Height(), "PRODUCTION_QUEUE_ROW"); m_queue_lb->SetStyle(GG::LIST_NOSORT | GG::LIST_NOSEL | GG::LIST_USERDELETE); - GG::Pt buid_designator_wnd_size = ClientSize() - GG::Pt(m_production_info_panel->Width(), GG::Y(6)); + GG::Pt buid_designator_wnd_size = ClientSize() - GG::Pt(m_production_info_panel->Width(), GG::Y0); m_build_designator_wnd = new BuildDesignatorWnd(buid_designator_wnd_size.x, buid_designator_wnd_size.y); m_build_designator_wnd->MoveTo(GG::Pt(m_production_info_panel->Width(), GG::Y0)); Modified: trunk/FreeOrion/UI/ResearchWnd.cpp =================================================================== --- trunk/FreeOrion/UI/ResearchWnd.cpp 2009-10-16 06:15:49 UTC (rev 3211) +++ trunk/FreeOrion/UI/ResearchWnd.cpp 2009-10-16 07:41:41 UTC (rev 3212) @@ -183,12 +183,16 @@ { m_research_info_panel = new ProductionInfoPanel(RESEARCH_INFO_AND_QUEUE_WIDTH, GG::Y(200), UserString("RESEARCH_INFO_PANEL_TITLE"), UserString("RESEARCH_INFO_RP"), OUTER_LINE_THICKNESS, ClientUI::KnownTechFillColor(), ClientUI::KnownTechTextAndBorderColor()); - m_queue_lb = new QueueListBox(GG::X(2), m_research_info_panel->LowerRight().y, m_research_info_panel->Width() - 4, ClientSize().y - 4 - m_research_info_panel->Height(), "RESEARCH_QUEUE_ROW"); + + m_queue_lb = new QueueListBox(GG::X(2), m_research_info_panel->LowerRight().y, + m_research_info_panel->Width() - 4, ClientSize().y - 4 - m_research_info_panel->Height(), + "RESEARCH_QUEUE_ROW"); GG::Connect(m_queue_lb->QueueItemMoved, &ResearchWnd::QueueItemMoved, this); m_queue_lb->SetStyle(GG::LIST_NOSORT | GG::LIST_NOSEL | GG::LIST_USERDELETE); - GG::Pt tech_tree_wnd_size = ClientSize() - GG::Pt(m_research_info_panel->Width() + 6, GG::Y(6)); + + GG::Pt tech_tree_wnd_size = ClientSize() - GG::Pt(m_research_info_panel->Width(), GG::Y0); m_tech_tree_wnd = new TechTreeWnd(tech_tree_wnd_size.x, tech_tree_wnd_size.y); - m_tech_tree_wnd->MoveTo(GG::Pt(m_research_info_panel->Width() + 3, GG::Y(3))); + m_tech_tree_wnd->MoveTo(GG::Pt(m_research_info_panel->Width(), GG::Y0)); GG::Connect(m_tech_tree_wnd->AddTechToQueueSignal, &ResearchWnd::AddTechToQueueSlot, this); GG::Connect(m_tech_tree_wnd->AddMultipleTechsToQueueSignal, &ResearchWnd::AddMultipleTechsToQueueSlot, this); Modified: trunk/FreeOrion/UI/SidePanel.cpp =================================================================== --- trunk/FreeOrion/UI/SidePanel.cpp 2009-10-16 06:15:49 UTC (rev 3211) +++ trunk/FreeOrion/UI/SidePanel.cpp 2009-10-16 07:41:41 UTC (rev 3212) @@ -1089,6 +1089,15 @@ glVertex(lr.x, lr.y); // bottom right glEnd(); + // title background box + glColor(title_background_colour); + glBegin(GL_QUAD_STRIP); + glVertex(name_lr.x, name_ul.y); + glVertex(name_ul.x, name_ul.y); + glVertex(name_lr.x, name_lr.y); + glVertex(name_ul.x, name_lr.y); + glEnd(); + // border glColor(border_colour); glLineWidth(1.5); @@ -1108,9 +1117,6 @@ glEnd(); glLineWidth(1.0); - // title background box - GG::FlatRectangle(name_ul, name_lr, title_background_colour, GG::CLR_ZERO, 0); - // disable greyover const GG::Clr HALF_GREY(128, 128, 128, 128); if (Disabled()) { |
From: <tz...@us...> - 2009-10-24 06:18:26
|
Revision: 3242 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3242&view=rev Author: tzlaine Date: 2009-10-24 06:18:20 +0000 (Sat, 24 Oct 2009) Log Message: ----------- Refactored the mouse handling code that was effectively shared between CombatWnd and CombatSetupWnd. It now all goes in CombatSetupWnd, since it is only relevant to setup. Modified Paths: -------------- trunk/FreeOrion/UI/CombatSetupWnd.cpp trunk/FreeOrion/UI/CombatSetupWnd.h trunk/FreeOrion/UI/CombatWnd.cpp trunk/FreeOrion/UI/CombatWnd.h Modified: trunk/FreeOrion/UI/CombatSetupWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-10-24 06:04:47 UTC (rev 3241) +++ trunk/FreeOrion/UI/CombatSetupWnd.cpp 2009-10-24 06:18:20 UTC (rev 3242) @@ -1,5 +1,6 @@ #include "CombatSetupWnd.h" +#include "CombatWnd.h" #include "InfoPanels.h" #include "../universe/Fleet.h" #include "../universe/Ship.h" @@ -260,14 +261,18 @@ } CombatSetupWnd::CombatSetupWnd(std::vector<Fleet*> fleets, + CombatWnd* combat_wnd, Ogre::SceneManager* scene_manager, + boost::function<std::pair<bool, Ogre::Vector3> (const GG::Pt& pt)> + intersect_mouse_with_ecliptic, GG::Flags<GG::WndFlag> flags/* = GG::INTERACTIVE | GG::DRAGABLE*/) : CUIWnd("Ships", GG::X(PAD), GG::GUI::GetGUI()->AppHeight() - SETUP_WND_HEIGHT - GG::Y(PAD), GG::X(300), SETUP_WND_HEIGHT, flags), m_listbox(new CUIListBox(GG::X0, GG::Y0, GG::X1, GG::Y1)), m_selected_placeable_ship(0), m_placeable_ship_node(0), - m_scene_manager(scene_manager) + m_scene_manager(scene_manager), + m_intersect_mouse_with_ecliptic(intersect_mouse_with_ecliptic) { AttachChild(m_listbox); GridLayout(); @@ -284,23 +289,54 @@ } GG::Connect(m_listbox->SelChangedSignal, &CombatSetupWnd::PlaceableShipSelected_, this); + + combat_wnd->InstallEventFilter(this); } GG::Pt CombatSetupWnd::ListRowSize() const { return GG::Pt(m_listbox->Width() - ClientUI::ScrollWidth() - 5, ListRowHeight()); } -Ship* CombatSetupWnd::PlaceableShip() const -{ return m_selected_placeable_ship; } +bool CombatSetupWnd::EventFilter(GG::Wnd* w, const GG::WndEvent& event) +{ + if (event.Type() == GG::WndEvent::LClick) { + Ogre::SceneNode* placement_node = 0; + if ((placement_node = PlaceableShipNode()) && isVisible(*placement_node)) { +#if 0 + CombatShipPtr combat_ship(new CombatShip(m_combat_setup_wnd->PlaceableShip(), + ToOgre(placement_node->getPosition()), + ToOgre(placement_node->direction()), + m_pathing_engine)); + ShipPlaced(combat_ship); +#endif + EndCurrentShipPlacement(); + } + } else if (event.Type() == GG::WndEvent::RClick) { + EndCurrentShipPlacement(); + } else if (event.Type() == GG::WndEvent::MouseEnter) { + HandleMouseMoves(event.Point()); + } else if (event.Type() == GG::WndEvent::MouseHere) { + HandleMouseMoves(event.Point()); + } else if (event.Type() == GG::WndEvent::MouseLeave) { + if (Ogre::SceneNode* placement_node = PlaceableShipNode()) + placement_node->setVisible(false); + } + return false; +} Ogre::SceneNode* CombatSetupWnd::PlaceableShipNode() const { return m_selected_placeable_ship ? m_placeable_ship_node : 0; } -void CombatSetupWnd::EndShipPlacement() +void CombatSetupWnd::HandleMouseMoves(const GG::Pt& pt) { - m_selected_placeable_ship = 0; - if (m_placeable_ship_node) - m_placeable_ship_node->setVisible(false); - m_listbox->DeselectAll(); + if (Ogre::SceneNode* node = PlaceableShipNode()) { + std::pair<bool, Ogre::Vector3> intersection = m_intersect_mouse_with_ecliptic(pt); + if (intersection.first) { + node->setVisible(true); + node->setPosition(intersection.second); + } else { + node->setVisible(false); + } + } } void CombatSetupWnd::PlaceableShipSelected_(const GG::ListBox::SelectionSet& sels) @@ -349,3 +385,11 @@ } } } + +void CombatSetupWnd::EndCurrentShipPlacement() +{ + m_selected_placeable_ship = 0; + if (m_placeable_ship_node) + m_placeable_ship_node->setVisible(false); + m_listbox->DeselectAll(); +} Modified: trunk/FreeOrion/UI/CombatSetupWnd.h =================================================================== --- trunk/FreeOrion/UI/CombatSetupWnd.h 2009-10-24 06:04:47 UTC (rev 3241) +++ trunk/FreeOrion/UI/CombatSetupWnd.h 2009-10-24 06:18:20 UTC (rev 3242) @@ -10,34 +10,44 @@ class SceneManager; class Entity; class SceneNode; + class Vector3; } class Fleet; class Ship; +class CombatWnd; class CombatSetupWnd : public CUIWnd { public: CombatSetupWnd(std::vector<Fleet*> fleets, + CombatWnd* combat_wnd, Ogre::SceneManager* scene_manager, + boost::function<std::pair<bool, Ogre::Vector3> (const GG::Pt& pt)> + intersect_mouse_with_ecliptic, GG::Flags<GG::WndFlag> flags = GG::INTERACTIVE | GG::DRAGABLE); GG::Pt ListRowSize() const; - Ship* PlaceableShip() const; - Ogre::SceneNode* PlaceableShipNode() const; - void EndShipPlacement(); +protected: + virtual bool EventFilter(GG::Wnd* w, const GG::WndEvent& event); private: + Ogre::SceneNode* PlaceableShipNode() const; + void HandleMouseMoves(const GG::Pt& pt); + void PlaceableShipSelected_(const GG::ListBox::SelectionSet& sels); void PlaceableShipSelected(Ship* ship); + void EndCurrentShipPlacement(); CUIListBox* m_listbox; Ship* m_selected_placeable_ship; Ogre::SceneNode* m_placeable_ship_node; std::map<std::string, Ogre::Entity*> m_placeable_ship_entities; Ogre::SceneManager* m_scene_manager; + boost::function<std::pair<bool, Ogre::Vector3> (const GG::Pt& pt)> + m_intersect_mouse_with_ecliptic; }; #endif // _CombatSetupWnd_h_ Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-10-24 06:04:47 UTC (rev 3241) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-10-24 06:18:20 UTC (rev 3242) @@ -438,16 +438,6 @@ } } - bool isVisible(const Ogre::SceneNode& node) - { - bool retval = true; - Ogre::SceneNode::ConstObjectIterator iterator = node.getAttachedObjectIterator(); - while (retval && iterator.hasMoreElements()) { - retval &= iterator.getNext()->isVisible(); - } - return retval; - } - void AddOptions(OptionsDB& db) { db.AddFlag("tech-demo", "OPTIONS_DB_TECH_DEMO", false); @@ -1187,7 +1177,9 @@ fleets.push_back(fleet); } } - m_combat_setup_wnd = new CombatSetupWnd(fleets, m_scene_manager); + m_combat_setup_wnd = + new CombatSetupWnd(fleets, this, m_scene_manager, + boost::bind(&CombatWnd::IntersectMouseWithEcliptic, this, _1)); AttachChild(m_combat_setup_wnd); } @@ -1382,19 +1374,7 @@ SelectObjectsInVolume(mod_keys & GG::MOD_KEY_CTRL); EndSelectionDrag(); } else if (!m_mouse_dragged) { - Ogre::SceneNode* placement_node = 0; - if (m_combat_setup_wnd && - (placement_node = m_combat_setup_wnd->PlaceableShipNode()) && - isVisible(*placement_node)) { -#if 0 - CombatShipPtr combat_ship(new CombatShip(m_combat_setup_wnd->PlaceableShip(), - ToOgre(placement_node->getPosition()), - ToOgre(placement_node->direction()), - m_pathing_engine)); - ShipPlaced(combat_ship); -#endif - m_combat_setup_wnd->EndShipPlacement(); - } else if (Ogre::MovableObject* movable_object = GetObjectUnderPt(pt)) { + if (Ogre::MovableObject* movable_object = GetObjectUnderPt(pt)) { assert(movable_object->getParentSceneNode()); std::map<Ogre::MovableObject*, SelectedObject>::iterator it = m_current_selections.find(movable_object); @@ -1470,40 +1450,10 @@ { } -void CombatWnd::RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) -{ - if (m_combat_setup_wnd) - m_combat_setup_wnd->EndShipPlacement(); -} - void CombatWnd::RDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { } -void CombatWnd::MouseEnter(const GG::Pt& pt,GG::Flags<GG::ModKey> mod_keys) -{ MouseHere(pt, mod_keys); } - -void CombatWnd::MouseHere(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) -{ - Ogre::SceneNode* node = 0; - if (m_combat_setup_wnd && (node = m_combat_setup_wnd->PlaceableShipNode())) { - std::pair<bool, Ogre::Vector3> intersection = IntersectMouseWithEcliptic(pt); - if (intersection.first) { - node->setVisible(true); - node->setPosition(intersection.second); - } else { - node->setVisible(false); - } - } -} - -void CombatWnd::MouseLeave() -{ - Ogre::SceneNode* placement_node = 0; - if (m_combat_setup_wnd && (placement_node = m_combat_setup_wnd->PlaceableShipNode())) - placement_node->setVisible(false); -} - void CombatWnd::MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys) { if (move) @@ -1664,7 +1614,7 @@ void CombatWnd::UpdateStarFromCameraPosition() { // Determine occlusion of the horizontal midline across the star by objects - // in the scene. This is only enabled if glow in in play, since the effect + // in the scene. This is only enabled if glow is in play, since the effect // doesn't look right when glow is not used. if (GetOptionsDB().Get<bool>("combat.enable-glow")) { const Ogre::Vector3 RIGHT = m_camera->getRealRight(); @@ -2154,3 +2104,16 @@ GG::GUI::GetGUI()->SetFocusWnd(this); } } + +//////////////////////////////////////// +// Free function(s) +//////////////////////////////////////// +bool isVisible(const Ogre::SceneNode& node) +{ + bool retval = true; + Ogre::SceneNode::ConstObjectIterator iterator = node.getAttachedObjectIterator(); + while (retval && iterator.hasMoreElements()) { + retval &= iterator.getNext()->isVisible(); + } + return retval; +} Modified: trunk/FreeOrion/UI/CombatWnd.h =================================================================== --- trunk/FreeOrion/UI/CombatWnd.h 2009-10-24 06:04:47 UTC (rev 3241) +++ trunk/FreeOrion/UI/CombatWnd.h 2009-10-24 06:18:20 UTC (rev 3242) @@ -77,11 +77,7 @@ virtual void RButtonDown(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void RDrag(const GG::Pt& pt, const GG::Pt& move, GG::Flags<GG::ModKey> mod_keys); virtual void RButtonUp(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); - virtual void RClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); virtual void RDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); - virtual void MouseEnter(const GG::Pt& pt,GG::Flags<GG::ModKey> mod_keys); - virtual void MouseHere(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys); - virtual void MouseLeave(); virtual void MouseWheel(const GG::Pt& pt, int move, GG::Flags<GG::ModKey> mod_keys); virtual void KeyPress(GG::Key key, boost::uint32_t key_code_point, GG::Flags<GG::ModKey> mod_keys); @@ -241,4 +237,6 @@ bool m_exit; // TODO: Remove this; it is only here for prototyping. }; +bool isVisible(const Ogre::SceneNode& node); + #endif |
From: <geo...@us...> - 2009-12-30 07:09:15
|
Revision: 3304 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3304&view=rev Author: geoffthemedio Date: 2009-12-30 07:09:09 +0000 (Wed, 30 Dec 2009) Log Message: ----------- Improved MapWnd::Sanitize so that hopefully old Universe's map won't appear briefly when loading or starting a new game and hopefully to avoid the hard-to-reproduce bug where the map appears over the splash intro screen. Modified Paths: -------------- trunk/FreeOrion/UI/MapWnd.cpp trunk/FreeOrion/UI/MapWnd.h Modified: trunk/FreeOrion/UI/MapWnd.cpp =================================================================== --- trunk/FreeOrion/UI/MapWnd.cpp 2009-12-30 06:44:29 UTC (rev 3303) +++ trunk/FreeOrion/UI/MapWnd.cpp 2009-12-30 07:09:09 UTC (rev 3304) @@ -1290,35 +1290,9 @@ } } - // clear out all the old buffers - for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_core_quad_vertices.begin(); - it != m_star_core_quad_vertices.end(); ++it) - { - glDeleteBuffers(1, &it->second.m_name); - } - m_star_core_quad_vertices.clear(); + ClearSystemRenderingBuffers(); - for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_halo_quad_vertices.begin(); - it != m_star_halo_quad_vertices.end(); ++it) - { - glDeleteBuffers(1, &it->second.m_name); - } - m_star_halo_quad_vertices.clear(); - - for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_galaxy_gas_quad_vertices.begin(); - it != m_galaxy_gas_quad_vertices.end(); ++it) - { - glDeleteBuffers(1, &it->second.m_name); - } - m_galaxy_gas_quad_vertices.clear(); - - if (m_star_texture_coords.m_name) { - glDeleteBuffers(1, &m_star_texture_coords.m_name); - m_star_texture_coords.m_name = 0; - } - - // create new buffers // star cores @@ -1382,6 +1356,37 @@ Logger().debugStream() << "MapWnd::InitSystemRenderingBuffers time: " << (timer.elapsed() * 1000.0); } +void MapWnd::ClearSystemRenderingBuffers() +{ + for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_core_quad_vertices.begin(); + it != m_star_core_quad_vertices.end(); ++it) + { + glDeleteBuffers(1, &it->second.m_name); + } + m_star_core_quad_vertices.clear(); + + for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_star_halo_quad_vertices.begin(); + it != m_star_halo_quad_vertices.end(); ++it) + { + glDeleteBuffers(1, &it->second.m_name); + } + m_star_halo_quad_vertices.clear(); + + for (std::map<boost::shared_ptr<GG::Texture>, GLBuffer>::const_iterator it = m_galaxy_gas_quad_vertices.begin(); + it != m_galaxy_gas_quad_vertices.end(); ++it) + { + glDeleteBuffers(1, &it->second.m_name); + } + m_galaxy_gas_quad_vertices.clear(); + + if (m_star_texture_coords.m_name) { + glDeleteBuffers(1, &m_star_texture_coords.m_name); + m_star_texture_coords.m_name = 0; + } + + +} + void MapWnd::InitStarlaneRenderingBuffers() { Logger().debugStream() << "MapWnd::InitStarlaneRenderingBuffers"; @@ -1557,31 +1562,9 @@ } } - // clear old buffers - if (m_starlane_vertices.m_name) { - glDeleteBuffers(1, &m_starlane_vertices.m_name); - m_starlane_vertices.m_name = 0; - } + ClearStarlaneRenderingBuffers(); - if (m_starlane_colors.m_name) { - glDeleteBuffers(1, &m_starlane_colors.m_name); - m_starlane_colors.m_name = 0; - } - - if (m_starlane_fleet_supply_vertices.m_name) { - glDeleteBuffers(1, &m_starlane_fleet_supply_vertices.m_name); - m_starlane_fleet_supply_vertices.m_name = 0; - } - - if (m_starlane_fleet_supply_colors.m_name) { - glDeleteBuffers(1, &m_starlane_fleet_supply_colors.m_name); - m_starlane_fleet_supply_colors.m_name = 0; - } - - - - // fill new buffers if (!raw_starlane_vertices.empty()) { glGenBuffers(1, &m_starlane_vertices.m_name); @@ -1629,6 +1612,33 @@ Logger().debugStream() << "MapWnd::InitStarlaneRenderingBuffers time: " << (timer.elapsed() * 1000.0); } +void MapWnd::ClearStarlaneRenderingBuffers() +{ + if (m_starlane_vertices.m_name) { + glDeleteBuffers(1, &m_starlane_vertices.m_name); + m_starlane_vertices.m_name = 0; + } + + if (m_starlane_colors.m_name) { + glDeleteBuffers(1, &m_starlane_colors.m_name); + m_starlane_colors.m_name = 0; + } + + if (m_starlane_fleet_supply_vertices.m_name) { + glDeleteBuffers(1, &m_starlane_fleet_supply_vertices.m_name); + m_starlane_fleet_supply_vertices.m_name = 0; + } + + if (m_starlane_fleet_supply_colors.m_name) { + glDeleteBuffers(1, &m_starlane_fleet_supply_colors.m_name); + m_starlane_fleet_supply_colors.m_name = 0; + } + + + + +} + LaneEndpoints MapWnd::StarlaneEndPointsFromSystemPositions(double X1, double Y1, double X2, double Y2) { LaneEndpoints retval; @@ -1753,7 +1763,7 @@ const System* system = GetObject<System>(system_id); if (!system) system = GetEmpireKnownObject<System>(system_id, HumanClientApp::GetApp()->EmpireID()); - if (!system) { + if (!system && system_id != UniverseObject::INVALID_OBJECT_ID) { Logger().errorStream() << "MapWnd::SelectSystem couldn't find system with id " << system_id << " so is selected no system instead"; system_id = UniverseObject::INVALID_OBJECT_ID; } @@ -3399,6 +3409,11 @@ //std::cout << "MapWnd::Sanitize()" << std::endl; Cleanup(); + SelectSystem(UniverseObject::INVALID_OBJECT_ID); + + ClearSystemRenderingBuffers(); + ClearStarlaneRenderingBuffers(); + const GG::X SIDEPANEL_WIDTH = GG::X(GetOptionsDB().Get<int>("UI.sidepanel-width")); const GG::X APP_WIDTH = GG::GUI::GetGUI()->AppWidth(); const GG::Y APP_HEIGHT = GG::GUI::GetGUI()->AppHeight(); @@ -3460,6 +3475,10 @@ m_fleet_lines.clear(); m_projected_fleet_lines.clear(); + + for (std::map<int, SystemIcon*>::iterator it = m_system_icons.begin(); it != m_system_icons.end(); ++it) + delete it->second; + m_system_icons.clear(); } bool MapWnd::ReturnToMap() Modified: trunk/FreeOrion/UI/MapWnd.h =================================================================== --- trunk/FreeOrion/UI/MapWnd.h 2009-12-30 06:44:29 UTC (rev 3303) +++ trunk/FreeOrion/UI/MapWnd.h 2009-12-30 07:09:09 UTC (rev 3304) @@ -201,7 +201,10 @@ void InitTurnRendering(); //!< sets up rendering of system icons, galaxy gas, starlanes at start of turn void InitSystemRenderingBuffers(); //!< initializes or refreshes buffers for rendering of system icons and galaxy gas + void ClearSystemRenderingBuffers(); void InitStarlaneRenderingBuffers(); //!< initializes or refreshes buffers for rendering of starlanes + void ClearStarlaneRenderingBuffers(); + /* Takes X and Y coordinates of a pair of systems and moves these points inwards along the vector * between them by the radius of a system on screen (at zoom 1.0) and return result */ LaneEndpoints StarlaneEndPointsFromSystemPositions(double X1, double Y1, double X2, double Y2); |