void MessageWnd::DoLayout() { const GG::Y PAD(3); m_display->SizeMove(GG::Pt(GG::X0, GG::Y0), GG::Pt(ClientWidth(), ClientHeight() - PAD - m_edit->MinUsableSize().y)); m_edit->SizeMove(GG::Pt(GG::X0, ClientHeight() - m_edit->MinUsableSize().y), GG::Pt(ClientWidth() - GG::X(CUIWnd::INNER_BORDER_ANGLE_OFFSET), ClientHeight())); }
/* ----------- SIZE Message ---------- */ int SizeMsg(WINDOW wnd, PARAM p1, PARAM p2) { int rtn = BaseWndProc(EDITBOX, wnd, SIZE, p1, p2); if (WndCol > ClientWidth(wnd)-1) wnd->CurrCol = ClientWidth(wnd)-1 + wnd->wleft; if (wnd->WndRow > ClientHeight(wnd)-1) { wnd->WndRow = ClientHeight(wnd)-1; SetLinePointer(wnd, wnd->WndRow+wnd->wtop); } SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return rtn; }
//////////////////////////////////////////// // About //////////////////////////////////////////// About::About(): CUIWnd(UserString("ABOUT_WINDOW_TITLE"), GG::X(80), GG::Y(130), GG::X(600), GG::Y(500), GG::INTERACTIVE | GG::DRAGABLE | GG::MODAL), m_end_with_done(false) { m_done_btn = new CUIButton(UserString("DONE"), GG::X(400), GG::Y(440), GG::X(75)); m_license = new CUIButton(UserString("LICENSE"), GG::X(310), GG::Y(440), GG::X(75)); m_vision = new CUIButton(UserString("VISION"), GG::X(220), GG::Y(440), GG::X(75)); m_info = new CUIMultiEdit(GG::X(20), GG::Y(20), GG::X(550), GG::Y(400), UserString("FREEORION_VISION"), GG::MULTI_WORDBREAK | GG::MULTI_READ_ONLY, ClientUI::GetFont(), ClientUI::CtrlBorderColor(), ClientUI::TextColor(), 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); layout->Add(m_info, 0, 0, 1, 6); layout->Add(m_vision, 1, 3); layout->Add(m_license, 1, 4); layout->Add(m_done_btn, 1, 5); AttachChild(layout); // Read in the copyright info from a file boost::filesystem::ifstream fin(GetRootDataDir() / "default" / "COPYING"); // this is not GetResourceDir() / "COPYING" because if a mod or scenario is loaded that changes the settings directory, the copyright notice should be unchanged if (!fin.is_open()) return; std::string temp_str; while (!fin.eof()) { std::getline(fin, temp_str, '\n'); m_license_str.append(temp_str); m_license_str.append("\n"); // To ensure new lines are read } fin.close(); Init(); }
/* ----------- SCROLL Message ---------- */ static int ScrollMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; if (isMultiLine(wnd)) { rtn = BaseWndProc(EDITBOX,wnd,SCROLL,p1,0); if (rtn != FALSE) { if (p1) { /* -------- scrolling up --------- */ if (wnd->WndRow == 0) { wnd->CurrLine++; StickEnd(wnd); } else --wnd->WndRow; } else { /* -------- scrolling down --------- */ if (wnd->WndRow == ClientHeight(wnd)-1) { if (wnd->CurrLine > 0) --wnd->CurrLine; StickEnd(wnd); } else wnd->WndRow++; } SendMessage(wnd,KEYBOARD_CURSOR,WndCol,wnd->WndRow); } } return rtn; }
//////////////////// // MessageWnd // //////////////////// MessageWnd::MessageWnd(GG::X x, GG::Y y, GG::X w, GG::Y h) : CUIWnd(UserString("MESSAGES_PANEL_TITLE"), x, y, w, h, GG::INTERACTIVE | GG::DRAGABLE | GG::ONTOP | GG::RESIZABLE | CLOSABLE), m_display(0), m_edit(0), m_display_show_time(0), m_history(), m_history_position() { m_display = new CUIMultiEdit( GG::X0, GG::Y0, ClientWidth(), ClientHeight(), "", GG::MULTI_WORDBREAK | GG::MULTI_READ_ONLY | GG::MULTI_TERMINAL_STYLE | GG::MULTI_INTEGRAL_HEIGHT); AttachChild(m_display); m_display->SetMaxLinesOfHistory(100); // executing this line seems to cause crashes in MultiEdit when adding more lines to the control than the history limit m_edit = new MessageWndEdit(GG::X0, GG::Y0, ClientWidth()); AttachChild(m_edit); GG::Connect(m_edit->TextEnteredSignal, &MessageWnd::MessageEntered, this); GG::Connect(m_edit->UpPressedSignal, &MessageWnd::MessageHistoryUpRequested, this); GG::Connect(m_edit->DownPressedSignal, &MessageWnd::MessageHistoryDownRequested, this); GG::Connect(m_edit->GainingFocusSignal, TypingSignal); GG::Connect(m_edit->LosingFocusSignal, DoneTypingSignal); m_history.push_front(""); DoLayout(); }
void DoLayout() { GG::Pt bar_size = m_sizer.GetSideBarSize(m_side_summary.empire); if( bar_size != Size() ) { Resize(bar_size); } GG::Pt alive_ll = GG::Pt(GG::X0, GG::Y0); alive_ll.y += ClientHeight(); GG::Pt dead_lr = ClientSize(); for(std::vector<ParticipantBar*>::const_iterator it = m_participant_bars.begin(); it != m_participant_bars.end(); ++it) { ParticipantBar* bar = *it; bar->DoLayout(); if(bar->Alive()) { bar->MoveBottomTo(alive_ll); alive_ll.x += bar->Width(); } else { dead_lr.x -= bar->Width(); bar->MoveBottomTo(dead_lr); } } m_x_axis_label->MoveTo(GG::Pt(GG::X0, Height() - m_x_axis_label->Height())); m_y_axis_label->MoveTo(GG::Pt(-m_y_axis_label->MinUsableSize().x / 2 - AXIS_WIDTH, Height()/2 - m_y_axis_label->Height()/2)); m_dead_label->MoveTo(GG::Pt(ClientWidth() - m_dead_label->Width(), Height() - m_dead_label->Height())); }
void HexGrid::SetGridDimensions(){ int w, h; w=ClientWidth(); h=ClientHeight(); float w_units=((w-m_itemWidth)/m_itemWidth); w_units/=3; m_hexColumns=w_units*2; m_ascColumns=w_units*2; m_rows=h/m_itemHeight; }
void Window::CenterVerticallyBetweenTwoWindows(Window topWnd, Window bottomWnd) { // assuming all windows are in the same parent // - find the yposition to place the window // - find the distance between the two windows // - compute the center based on the distance and // the height of the window to be centered. UINT distance = bottomWnd.TopWindow() - topWnd.BottomWindow(), y = midpoint<UINT>(distance, ClientHeight()); SetWindowPos(Wnd(), NULL, 5, y, 0, 0, SWP_NOSIZE); }
/* --------- cursor down key: down one line --------- */ static void Downward(WINDOW wnd) { if (isMultiLine(wnd) && wnd->WndRow+wnd->wtop+1 < wnd->wlines) { wnd->CurrLine++; if (wnd->WndRow == ClientHeight(wnd)-1) BaseWndProc(EDITBOX, wnd, SCROLL, TRUE, 0); else wnd->WndRow++; StickEnd(wnd); } }
///////////////////// // PlayerListWnd // ///////////////////// PlayerListWnd::PlayerListWnd(GG::X x, GG::Y y, GG::X w, GG::Y h) : CUIWnd(UserString("PLAYERS_LIST_PANEL_TITLE"), x, y, w, h, GG::INTERACTIVE | GG::DRAGABLE | GG::ONTOP | GG::RESIZABLE | CLOSABLE), m_player_list(0) { m_player_list = new PlayerListBox(GG::X0, GG::Y0, ClientWidth(), ClientHeight()); m_player_list->SetHiliteColor(GG::CLR_ZERO); m_player_list->SetStyle(GG::LIST_NOSORT); GG::Connect(m_player_list->SelChangedSignal, &PlayerListWnd::PlayerSelectionChanged, this); GG::Connect(m_player_list->DoubleClickedSignal, &PlayerListWnd::PlayerDoubleClicked, this); GG::Connect(m_player_list->RightClickedSignal, &PlayerListWnd::PlayerRightClicked, this); AttachChild(m_player_list); boost::function<void(int, int)> update_this = boost::bind(&PlayerListWnd::Update, this); GG::Connect(Empires().DiplomaticStatusChangedSignal, update_this); GG::Connect(Empires().DiplomaticMessageChangedSignal, update_this); DoLayout(); Refresh(); }
void SitRepPanel::DoLayout() { GG::X BUTTON_WIDTH(ClientUI::Pts()*4); GG::Y BUTTON_HEIGHT = m_last_turn_button->MinUsableSize().y; int PAD(3); GG::Pt button_ul(ClientWidth() - GG::X(INNER_BORDER_ANGLE_OFFSET) - BUTTON_WIDTH, ClientHeight() - BUTTON_HEIGHT); m_last_turn_button->SizeMove(button_ul, button_ul + GG::Pt(BUTTON_WIDTH, BUTTON_HEIGHT)); button_ul -= GG::Pt(BUTTON_WIDTH + GG::X(PAD), GG::Y0); m_next_turn_button->SizeMove(button_ul, button_ul + GG::Pt(BUTTON_WIDTH, BUTTON_HEIGHT)); button_ul -= GG::Pt(BUTTON_WIDTH + GG::X(PAD), GG::Y0); m_prev_turn_button->SizeMove(button_ul, button_ul + GG::Pt(BUTTON_WIDTH, BUTTON_HEIGHT)); button_ul -= GG::Pt(BUTTON_WIDTH + GG::X(PAD), GG::Y0); m_sitreps_lb->SizeMove(GG::Pt(GG::X0, GG::Y0), GG::Pt(ClientWidth() - 1, button_ul.y)); m_filter_button->SizeMove(GG::Pt(GG::X0, button_ul.y), GG::Pt(BUTTON_WIDTH*2, button_ul.y + BUTTON_HEIGHT)); SetMinSize(GG::Pt(6*BUTTON_WIDTH, 6*BUTTON_HEIGHT)); }
virtual void Render() { GG::Clr base_color = Alive() ? m_wound_color : m_dead_color; // Always draw the red background, health will cover it GG::FlatRectangle(ClientUpperLeft(), ClientLowerRight(), base_color, m_hovered ? GG::CLR_WHITE : GG::CLR_BLACK, 1); if( m_sizer.Get( TOGGLE_BAR_HEALTH_SMOOTH ) ) { // Use a smooth colour change based health display. if (Alive()) { double health_percentage = 1.0 * m_participant.current_health / m_participant.max_health; GG::Clr mixed_color(interpolate(health_percentage, m_health_color.r, m_wound_color.r), interpolate(health_percentage, m_health_color.g, m_wound_color.g), interpolate(health_percentage, m_health_color.b, m_wound_color.b), interpolate(health_percentage, m_health_color.a, m_wound_color.a)); GG::FlatRectangle(ClientUpperLeft(), ClientLowerRight(), mixed_color, GG::CLR_ZERO, 1); } } else { if(Alive()) { GG::Y health_height( (m_participant.current_health / m_participant.max_health) * Value(ClientHeight()) ); GG::FlatRectangle(GG::Pt(ClientUpperLeft().x, ClientLowerRight().y - health_height), ClientLowerRight(), m_health_color, GG::CLR_ZERO, 1); } } }
void DoLayout() { m_queue_lb->SizeMove(GG::Pt(GG::X0, GG::Y0), GG::Pt(ClientWidth(), ClientHeight() - GG::Y(CUIWnd::INNER_BORDER_ANGLE_OFFSET))); }
void FlagWatcher::CreateChildren(HWND hWnd){ m_flagWatcherDlg.Create(hWnd); SetSize(m_flagWatcherDlg.WindowWidth()+(WindowWidth()-ClientWidth()), m_flagWatcherDlg.WindowHeight()+(WindowHeight()-ClientHeight())); }
/* ---------- page/scroll keys ----------- */ static int DoScrolling(WINDOW wnd, int c, PARAM p2) { switch (c) { case PGUP: case PGDN: if (isMultiLine(wnd)) BaseWndProc(EDITBOX, wnd, KEYBOARD, c, p2); break; case CTRL_PGUP: case CTRL_PGDN: BaseWndProc(EDITBOX, wnd, KEYBOARD, c, p2); break; case HOME: Home(wnd); break; case END: End(wnd); break; case CTRL_FWD: NextWord(wnd); break; case CTRL_BS: PrevWord(wnd); break; case CTRL_HOME: if (isMultiLine(wnd)) { SendMessage(wnd, SCROLLDOC, TRUE, 0); wnd->CurrLine = 0; wnd->WndRow = 0; } Home(wnd); break; case CTRL_END: if (isMultiLine(wnd) && wnd->WndRow+wnd->wtop+1 < wnd->wlines && wnd->wlines > 0) { SendMessage(wnd, SCROLLDOC, FALSE, 0); SetLinePointer(wnd, wnd->wlines-1); wnd->WndRow = min(ClientHeight(wnd)-1, wnd->wlines-1); Home(wnd); } End(wnd); break; case UP: if (isMultiLine(wnd)) Upward(wnd); break; case DN: if (isMultiLine(wnd)) Downward(wnd); break; case FWD: Forward(wnd); break; case BS: Backward(wnd); break; default: return FALSE; } if (!KeyBoardMarking && TextBlockMarked(wnd)) { ClearTextBlock(wnd); SendMessage(wnd, PAINT, 0, 0); } SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return TRUE; }
void DiskChange::OnResized() { cmdCancel.Move(ClientWidth() - cmdCancel.Width() - 8, ClientHeight() - cmdCancel.Height() - 8); cmdOK.Move(cmdCancel.X() - cmdOK.Width() - 8, cmdCancel.Y()); grp.Resize(ClientWidth() - 16, cmdOK.Y() - 16); }
void PlayerListWnd::DoLayout() { m_player_list->SizeMove(GG::Pt(), GG::Pt(ClientWidth(), ClientHeight() - GG::Y(INNER_BORDER_ANGLE_OFFSET))); }