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())); }
//////////////////// // 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(); }
/* -------- End key: to end of line ------- */ static void End(WINDOW wnd) { while (*CurrChar && *CurrChar != '\n') ++wnd->CurrCol; if (WndCol >= ClientWidth(wnd)) { wnd->wleft = wnd->CurrCol - (ClientWidth(wnd)-1); SendMessage(wnd, PAINT, 0, 0); } }
/* ----------- HORIZSCROLLPAGE Message ---------- */ static int HorizPageMsg(WINDOW wnd, PARAM p1) { int rtn = BaseWndProc(EDITBOX, wnd, HORIZPAGE, p1, 0); if ((int) p1 == FALSE) { if (wnd->CurrCol > wnd->wleft+ClientWidth(wnd)-1) wnd->CurrCol = wnd->wleft+ClientWidth(wnd)-1; } else if (wnd->CurrCol < wnd->wleft) wnd->CurrCol = wnd->wleft; SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); return rtn; }
/* ----------- 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; }
/* ----- stick the moving cursor to the end of the line ---- */ static void StickEnd(WINDOW wnd) { char *cp = TextLine(wnd, wnd->CurrLine); char *cp1 = strchr(cp, '\n'); int len = cp1 ? (int) (cp1 - cp) : 0; wnd->CurrCol = min(len, wnd->CurrCol); if (wnd->wleft > wnd->CurrCol) { wnd->wleft = max(0, wnd->CurrCol - 4); SendMessage(wnd, PAINT, 0, 0); } else if (wnd->CurrCol-wnd->wleft >= ClientWidth(wnd)) { wnd->wleft = wnd->CurrCol - (ClientWidth(wnd)-1); SendMessage(wnd, PAINT, 0, 0); } }
/// <summary> /// The specified point is in 'paint' coordinates. In a vertical view it requires rotation /// reversing way that the drawing code rotates the actual pixels drawn to get 'destination' /// coordinates that the root box will interpret correctly. /// This basically converts a normal point to one where X is measured from the top of the client /// rectangle and Y from the right. /// </summary> /// <param name="pt"></param> POINT VerticalOrientationManager::RotatePointPaintToDst(POINT pt) { POINT result; result.x = pt.y; result.y = ClientWidth() - pt.x; return result; }
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 GraphicalSummaryWnd::DoLayout() { GG::Pt ul(GG::X0, SIDE_BOX_MARGIN); if(!m_options_bar) { m_options_bar = new OptionsBar(m_sizer); AttachChild(m_options_bar); GG::Connect( m_options_bar->ChangedSignal, &GraphicalSummaryWnd::DoLayout, this ); } m_options_bar->Resize( GG::Pt( ClientWidth(), OPTION_BAR_HEIGHT ) ); GG::Pt space_for_bars = ClientSize(); space_for_bars.y -= m_options_bar->Height(); m_sizer->SetAvailableSize(space_for_bars); m_options_bar->DoLayout(); for(std::vector<SideBar*>::iterator it = m_side_boxes.begin(); it != m_side_boxes.end(); ++it ) { SideBar* box = *it; box->MoveTo(ul); box->DoLayout(); ul.y += box->Height() + SIDE_BOX_MARGIN; } m_options_bar->MoveTo(GG::Pt(GG::X(10), ClientSize().y - m_options_bar->Height() )); }
//////////////////////////////////////////// // 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(); }
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; }
/// <summary> /// The specified rectangle is in 'destination' coordinates. In a vertical view it requires rotation /// in the same way that the drawing code rotates the actual pixels drawn. /// This basically means that the input is a rectangle whose top and bottom are distances from the /// right of the window and whose left and right are measured from the top of the window. /// We need to convert it to one measured from the top left. /// </summary> /// <param name="rect"></param> RECT VerticalOrientationManager::RotateRectDstToPaint(RECT rect) { int width = ClientWidth(); RECT result; result.left = width - rect.bottom; result.top = rect.left; result.right = result.left + (rect.bottom - rect.top); result.bottom = result.top + (rect.right - rect.left); return result; }
void ResourcePanel::DoLayout() { AccordionPanel::DoLayout(); for (auto& meter_stat : m_meter_stats) { DetachChild(meter_stat.second); } // detach / hide meter bars and large resource indicators DetachChild(m_multi_meter_status_bar); DetachChild(m_multi_icon_value_indicator); // update size of panel and position and visibility of widgets if (!s_expanded_map[m_rescenter_id]) { // position and reattach icons to be shown int n = 0; GG::X stride = MeterIconSize().x * 7/2; for (auto& meter_stat : m_meter_stats) { GG::X x = n * stride; auto& icon = meter_stat.second; GG::Pt icon_ul(x, GG::Y0); GG::Pt icon_lr = icon_ul + MeterIconSize(); icon->SizeMove(icon_ul, icon_lr); if (x + icon->MinUsableSize().x >= ClientWidth()) break; AttachChild(icon); icon->Show(); n++; } Resize(GG::Pt(Width(), std::max(MeterIconSize().y, m_expand_button->Height()))); } else { // attach and show meter bars and large resource indicators GG::Y top = Top(); AttachChild(m_multi_icon_value_indicator); m_multi_icon_value_indicator->MoveTo(GG::Pt(GG::X(EDGE_PAD), GG::Y(EDGE_PAD))); m_multi_icon_value_indicator->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_icon_value_indicator->Height())); AttachChild(m_multi_meter_status_bar); m_multi_meter_status_bar->MoveTo(GG::Pt(GG::X(EDGE_PAD), m_multi_icon_value_indicator->Bottom() + EDGE_PAD - top)); m_multi_meter_status_bar->Resize(GG::Pt(Width() - 2*EDGE_PAD, m_multi_meter_status_bar->Height())); MoveChildUp(m_expand_button); Resize(GG::Pt(Width(), m_multi_meter_status_bar->Bottom() + EDGE_PAD - top)); } SetCollapsed(!s_expanded_map[m_rescenter_id]); }
/* ----------- ADDTEXT Message ---------- */ static int AddTextMsg(WINDOW wnd, PARAM p1, PARAM p2) { int rtn = FALSE; if (strlen((char *)p1)+wnd->textlen <= wnd->MaxTextLength) { rtn = BaseWndProc(EDITBOX, wnd, ADDTEXT, p1, p2); if (rtn != FALSE) { if (!isMultiLine(wnd)) { wnd->CurrLine = 0; wnd->CurrCol = strlen((char *)p1); if (wnd->CurrCol >= ClientWidth(wnd)) { wnd->wleft = wnd->CurrCol-ClientWidth(wnd); wnd->CurrCol -= wnd->wleft; } wnd->BlkEndCol = wnd->CurrCol; SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); } } } return rtn; }
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)); }
/* ---- cursor right key: right one character position ---- */ static void Forward(WINDOW wnd) { char *cc = CurrChar+1; if (*cc == '\0') return; if (*CurrChar == '\n') { Home(wnd); Downward(wnd); } else { wnd->CurrCol++; if (WndCol == ClientWidth(wnd)) SendMessage(wnd, HORIZSCROLL, TRUE, 0); } }
/* ----------- HORIZSCROLL Message ---------- */ static int HorizScrollMsg(WINDOW wnd, PARAM p1) { int rtn = FALSE; char *currchar = CurrChar; if (!(p1 && wnd->CurrCol == wnd->wleft && *currchar == '\n')) { rtn = BaseWndProc(EDITBOX, wnd, HORIZSCROLL, p1, 0); if (rtn != FALSE) { if (wnd->CurrCol < wnd->wleft) wnd->CurrCol++; else if (WndCol == ClientWidth(wnd)) --wnd->CurrCol; SendMessage(wnd,KEYBOARD_CURSOR,WndCol,wnd->WndRow); } } return rtn; }
///////////////////// // 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(); }
/// ----------------------------------------------------------------------------------- /// <summary> /// Construct coord transformation rectangles. Height and width are dots per inch /// (swapped for rotation); /// src origin is 0, dest origin is controlled by scrolling. /// /// A change in the y value of rcDstRoot origin will move the view left or right. /// A zero position of the scroll bar puts the 'bottom' at the right of the window. /// We want instead to put the 'top' at the left of the window for offset zero, /// and move it to the left as the offset increases. /// Passing an actual offset of 0 puts the bottom of the view at the right of the /// window. Adding the rootbox height puts the top just out of sight beyond the right edge; /// subtracting the client rectangle puts it in the proper zero-offset position with the /// top just at the left of the window. Further subtracting the scroll offset moves it /// further right, or 'up'. /// </summary> /// <param name="rcSrcRoot"></param> /// <param name="rcDstRoot"></param> /// ----------------------------------------------------------------------------------- void VerticalOrientationManager::GetCoordRects(IVwGraphics * pvg, RECT * prcSrcRoot, RECT * prcDstRoot) { prcSrcRoot->left = prcSrcRoot->top = 0; int dxInch; int dyInch; pvg->get_XUnitsPerInch(&dxInch); pvg->get_YUnitsPerInch(&dyInch); prcSrcRoot->right = dyInch; prcSrcRoot->bottom = dxInch; int dxdScrollOffset, dydScrollOffset; m_pavswb->GetScrollOffsets(&dxdScrollOffset, &dydScrollOffset); int dypRootHeight; m_pavswb->m_qrootb->get_Height(&dypRootHeight); prcDstRoot->left = (-dydScrollOffset) + m_pavswb->GetHorizMargin(); prcDstRoot->top = ClientWidth() - dypRootHeight + dxdScrollOffset; prcDstRoot->right = prcDstRoot->left + dyInch; prcDstRoot->bottom = prcDstRoot->top + dxInch; }
CUIEditWnd::CUIEditWnd(GG::X w, const std::string& prompt_text, const std::string& edit_text, GG::Flags<GG::WndFlag> flags/* = Wnd::MODAL*/) : CUIWnd(prompt_text, GG::X0, GG::Y0, w, GG::Y1, flags) { m_edit = new CUIEdit(LeftBorder() + 3, TopBorder() + 3, ClientWidth() - 2 * BUTTON_WIDTH - 2 * CONTROL_MARGIN - 6 - LeftBorder() - RightBorder(), edit_text); m_ok_bn = new CUIButton(UserString("OK"), m_edit->Right() + CONTROL_MARGIN, TopBorder() + 3, BUTTON_WIDTH); m_cancel_bn = new CUIButton(UserString("CANCEL"), m_ok_bn->Right() + CONTROL_MARGIN, TopBorder() + 3, BUTTON_WIDTH); m_ok_bn->OffsetMove(GG::Pt(GG::X0, (m_edit->Height() - m_ok_bn->Height()) / 2)); m_cancel_bn->OffsetMove(GG::Pt(GG::X0, (m_edit->Height() - m_ok_bn->Height()) / 2)); Resize(GG::Pt(w, std::max(m_edit->Bottom(), m_cancel_bn->Bottom()) + BottomBorder() + 3)); MoveTo(GG::Pt((GG::GUI::GetGUI()->AppWidth() - w) / 2, (GG::GUI::GetGUI()->AppHeight() - Height()) / 2)); AttachChild(m_edit); AttachChild(m_ok_bn); AttachChild(m_cancel_bn); GG::Connect(m_ok_bn->LeftClickedSignal, &CUIEditWnd::OkClicked, this); GG::Connect(m_cancel_bn->LeftClickedSignal, &CUIWnd::CloseClicked, static_cast<CUIWnd*>(this)); m_edit->SelectAll(); }
void GraphicalSummaryWnd::DoLayout() { if (!m_sizer || !m_options_bar) return; GG::Pt ul(GG::X0, SIDE_BOX_MARGIN); m_options_bar->Resize( GG::Pt( ClientWidth(), OPTION_BAR_HEIGHT ) ); GG::Pt space_for_bars = ClientSize(); space_for_bars.y -= m_options_bar->Height(); m_sizer->SetAvailableSize(space_for_bars); m_options_bar->DoLayout(); for (std::vector<SideBar*>::iterator it = m_side_boxes.begin(); it != m_side_boxes.end(); ++it ) { SideBar* box = *it; box->MoveTo(ul); box->DoLayout(); ul.y += box->Height() + SIDE_BOX_MARGIN; } m_options_bar->MoveTo(GG::Pt(GG::X(4), ClientSize().y - m_options_bar->Height())); }
/* -- Ctrl+cursor left key: to beginning of previous word -- */ static void PrevWord(WINDOW wnd) { int savetop = wnd->wtop; int saveleft = wnd->wleft; ClearVisible(wnd); Backward(wnd); while (isWhite(*CurrChar)) { if (wnd->CurrLine == 0 && wnd->CurrCol == 0) break; Backward(wnd); } while (wnd->CurrCol != 0 && !isWhite(*CurrChar)) Backward(wnd); if (isWhite(*CurrChar)) Forward(wnd); SetVisible(wnd); if (wnd->wleft != saveleft) if (wnd->CurrCol >= saveleft) if (wnd->CurrCol - saveleft < ClientWidth(wnd)) wnd->wleft = saveleft; SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); if (wnd->wtop != savetop || wnd->wleft != saveleft) SendMessage(wnd, PAINT, 0, 0); }
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); }
/* --------- All displayable typed keys ------------- */ static void KeyTyped(WINDOW wnd, int c) { char *currchar = CurrChar; if ((c != '\n' && c < ' ') || (c & 0x1000)) /* ---- not recognized by editor --- */ return; if (!isMultiLine(wnd) && TextBlockMarked(wnd)) { SendMessage(wnd, CLEARTEXT, 0, 0); currchar = CurrChar; } /* ---- test typing at end of text ---- */ if (currchar == wnd->text+wnd->MaxTextLength) { /* ---- typing at the end of maximum buffer ---- */ beep(); return; } if (*currchar == '\0') { /* --- insert a newline at end of text --- */ *currchar = '\n'; *(currchar+1) = '\0'; BuildTextPointers(wnd); } /* --- displayable char or newline --- */ if (c == '\n' || wnd->InsertMode || *currchar == '\n') { /* ------ inserting the keyed character ------ */ if (wnd->text[wnd->textlen-1] != '\0') { /* --- the current text buffer is full --- */ if (wnd->textlen == wnd->MaxTextLength) { /* --- text buffer is at maximum size --- */ beep(); return; } /* ---- increase the text buffer size ---- */ wnd->textlen += GROWLENGTH; /* --- but not above maximum size --- */ if (wnd->textlen > wnd->MaxTextLength) wnd->textlen = wnd->MaxTextLength; wnd->text = DFrealloc(wnd->text, wnd->textlen+2); wnd->text[wnd->textlen-1] = '\0'; currchar = CurrChar; } memmove(currchar+1, currchar, strlen(currchar)+1); ModTextPointers(wnd, wnd->CurrLine+1, 1); if (isMultiLine(wnd) && wnd->wlines > 1) wnd->textwidth = max(wnd->textwidth, (int) (TextLine(wnd, wnd->CurrLine+1)- TextLine(wnd, wnd->CurrLine))); else wnd->textwidth = max(wnd->textwidth, strlen(wnd->text)); WriteTextLine(wnd, NULL, wnd->wtop+wnd->WndRow, FALSE); } /* ----- put the char in the buffer ----- */ *currchar = c; wnd->TextChanged = TRUE; if (c == '\n') { wnd->wleft = 0; BuildTextPointers(wnd); End(wnd); Forward(wnd); SendMessage(wnd, PAINT, 0, 0); return; } /* ---------- test end of window --------- */ if (WndCol == ClientWidth(wnd)-1) { if (!isMultiLine(wnd)) { if (!(currchar == wnd->text+wnd->MaxTextLength-2)) SendMessage(wnd, HORIZSCROLL, TRUE, 0); } else { char *cp = currchar; while (*cp != ' ' && cp != TextLine(wnd, wnd->CurrLine)) --cp; if (cp == TextLine(wnd, wnd->CurrLine) || !wnd->WordWrapMode) SendMessage(wnd, HORIZSCROLL, TRUE, 0); else { int dif = 0; if (c != ' ') { dif = (int) (currchar - cp); wnd->CurrCol -= dif; SendMessage(wnd, KEYBOARD, DEL, 0); --dif; } SendMessage(wnd, KEYBOARD, '\n', 0); currchar = CurrChar; wnd->CurrCol = dif; if (c == ' ') return; } } } /* ------ display the character ------ */ SetStandardColor(wnd); PutWindowChar(wnd, c, WndCol, wnd->WndRow); /* ----- advance the pointers ------ */ wnd->CurrCol++; }
/* ----------- ID_PARAGRAPH Command ---------- */ static void ParagraphCmd(WINDOW wnd) { int bc, fl; char *bl, *bbl, *bel, *bb; ClearTextBlock(wnd); /* ---- forming paragraph from cursor position --- */ fl = wnd->wtop + wnd->WndRow; bbl = bel = bl = TextLine(wnd, wnd->CurrLine); if ((bc = wnd->CurrCol) >= ClientWidth(wnd)) bc = 0; Home(wnd); /* ---- locate the end of the paragraph ---- */ while (*bel) { int blank = TRUE; char *bll = bel; /* --- blank line marks end of paragraph --- */ while (*bel && *bel != '\n') { if (*bel != ' ') blank = FALSE; bel++; } if (blank) { bel = bll; break; } if (*bel) bel++; } if (bel == bbl) { SendMessage(wnd, KEYBOARD, DN, 0); return; } if (*bel == '\0') --bel; if (*bel == '\n') --bel; /* --- change all newlines in block to spaces --- */ while (CurrChar < bel) { if (*CurrChar == '\n') { *CurrChar = ' '; wnd->CurrLine++; wnd->CurrCol = 0; } else wnd->CurrCol++; } /* ---- insert newlines at new margin boundaries ---- */ bb = bbl; while (bbl < bel) { bbl++; if ((int)(bbl - bb) == ClientWidth(wnd)-1) { while (*bbl != ' ' && bbl > bb) --bbl; if (*bbl != ' ') { bbl = strchr(bbl, ' '); if (bbl == NULL || bbl >= bel) break; } *bbl = '\n'; bb = bbl+1; } } BuildTextPointers(wnd); /* --- put cursor back at beginning --- */ wnd->CurrLine = TextLineNumber(wnd, bl); wnd->CurrCol = bc; if (fl < wnd->wtop) wnd->wtop = fl; wnd->WndRow = fl - wnd->wtop; SendMessage(wnd, PAINT, 0, 0); SendMessage(wnd, KEYBOARD_CURSOR, WndCol, wnd->WndRow); wnd->TextChanged = TRUE; BuildTextPointers(wnd); }
void FlagWatcher::CreateChildren(HWND hWnd){ m_flagWatcherDlg.Create(hWnd); SetSize(m_flagWatcherDlg.WindowWidth()+(WindowWidth()-ClientWidth()), m_flagWatcherDlg.WindowHeight()+(WindowHeight()-ClientHeight())); }
//////////////////////////////////////////////// // GalaxySetupWnd //////////////////////////////////////////////// GalaxySetupWnd::GalaxySetupWnd() : CUIWnd(UserString("GSETUP_WINDOW_TITLE"), (HumanClientApp::GetApp()->AppWidth() - GAL_SETUP_WND_WD) / 2, (HumanClientApp::GetApp()->AppHeight() - GAL_SETUP_WND_HT) / 2, GAL_SETUP_WND_WD, GAL_SETUP_WND_HT, GG::INTERACTIVE | GG::MODAL), m_ended_with_ok(false), m_galaxy_setup_panel(0), m_player_name_label(0), m_player_name_edit(0), m_empire_name_label(0), m_empire_name_edit(0), m_empire_color_label(0), m_empire_color_selector(0), m_starting_secies_selector(0), m_starting_species_label(0), m_number_ais_label(0), m_number_ais_spin(0), m_preview_image(0), m_ok(0), m_cancel(0) { Sound::TempUISoundDisabler sound_disabler; m_galaxy_setup_panel = new GalaxySetupPanel(GG::X0, GG::Y(4)); boost::shared_ptr<GG::Font> font = ClientUI::GetFont(); const GG::X LABELS_WIDTH = (GalaxySetupPanel::DEFAULT_WIDTH - 5) / 2; GG::Y ypos = m_galaxy_setup_panel->Bottom(); // player name m_player_name_label = new GG::TextControl(CONTROL_MARGIN, ypos, LABELS_WIDTH, CONTROL_HEIGHT, UserString("GSETUP_PLAYER_NAME"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT, GG::INTERACTIVE); m_player_name_label->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_player_name_label->SetBrowseText(UserString(GetOptionsDB().GetDescription("GameSetup.player-name"))); m_player_name_edit = new CUIEdit(LABELS_WIDTH + 2 * CONTROL_MARGIN, ypos, LABELS_WIDTH, GetOptionsDB().Get<std::string>("GameSetup.player-name")); m_player_name_label->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_player_name_label->Height()) / 2)); m_player_name_edit->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_player_name_edit->Height()) / 2)); ypos += PANEL_CONTROL_SPACING; // empire name m_empire_name_label = new GG::TextControl(CONTROL_MARGIN, ypos, LABELS_WIDTH, CONTROL_HEIGHT, UserString("GSETUP_EMPIRE_NAME"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT, GG::INTERACTIVE); m_empire_name_label->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_empire_name_label->SetBrowseText(UserString(GetOptionsDB().GetDescription("GameSetup.empire-name"))); m_empire_name_edit = new CUIEdit(LABELS_WIDTH + 2 * CONTROL_MARGIN, ypos, LABELS_WIDTH, GetOptionsDB().Get<std::string>("GameSetup.empire-name")); m_empire_name_label->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_empire_name_label->Height()) / 2)); m_empire_name_edit->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_empire_name_edit->Height()) / 2)); ypos += PANEL_CONTROL_SPACING; const GG::Y AUTO_CONTROL_HEIGHT = m_empire_name_edit->Height(); // empire color m_empire_color_label = new GG::TextControl(CONTROL_MARGIN, ypos, LABELS_WIDTH, CONTROL_HEIGHT, UserString("GSETUP_EMPIRE_COLOR"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT, GG::INTERACTIVE); m_empire_color_label->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_empire_color_label->SetBrowseText(UserString(GetOptionsDB().GetDescription("GameSetup.empire-color"))); m_empire_color_selector = new EmpireColorSelector(AUTO_CONTROL_HEIGHT); m_empire_color_selector->MoveTo(GG::Pt(LABELS_WIDTH + 2 * CONTROL_MARGIN, ypos + (PANEL_CONTROL_SPACING - m_empire_color_selector->Height()) / 2)); m_empire_color_selector->Select(GetOptionsDB().Get<int>("GameSetup.empire-color")); ypos += PANEL_CONTROL_SPACING; // starting species m_starting_species_label = new GG::TextControl(CONTROL_MARGIN, ypos, LABELS_WIDTH, CONTROL_HEIGHT, UserString("GSETUP_SPECIES"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT, GG::INTERACTIVE); m_starting_species_label->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_starting_species_label->SetBrowseText(UserString(GetOptionsDB().GetDescription("GameSetup.starting-species"))); m_starting_secies_selector = new SpeciesSelector(LABELS_WIDTH, AUTO_CONTROL_HEIGHT); m_starting_secies_selector->MoveTo(GG::Pt(LABELS_WIDTH + 2 * CONTROL_MARGIN, ypos + (PANEL_CONTROL_SPACING - m_starting_secies_selector->Height()) / 2)); std::string default_starting_species = GetOptionsDB().Get<std::string>("GameSetup.starting-species"); if (default_starting_species.empty() || default_starting_species == "1") { // kludge / bug workaround for bug with options storage and retreival. Empty-string options are stored, but read in as "true" boolean, and converted to string equal to "1" // if no previously-stored species selection, need to pick a default std::vector<std::string> selector_avail_species = m_starting_secies_selector->AvailableSpeciesNames(); if (!selector_avail_species.empty()) { for (std::vector<std::string>::const_iterator it = selector_avail_species.begin(); it != selector_avail_species.end(); ++it) { // special case: see if humans are available. if ("SP_HUMAN" == *it) { default_starting_species = "SP_HUMAN"; break; } } // if no humans, default to first listed species if (default_starting_species.empty()) default_starting_species = *selector_avail_species.begin(); } } m_starting_secies_selector->SelectSpecies(default_starting_species); ypos += PANEL_CONTROL_SPACING; // number of AIs m_number_ais_label = new GG::TextControl(CONTROL_MARGIN, ypos, LABELS_WIDTH, CONTROL_HEIGHT, UserString("GSETUP_NUMBER_AIS"), font, ClientUI::TextColor(), GG::FORMAT_RIGHT, GG::INTERACTIVE); m_number_ais_label->SetBrowseModeTime(GetOptionsDB().Get<int>("UI.tooltip-delay")); m_number_ais_label->SetBrowseText(UserString(GetOptionsDB().GetDescription("GameSetup.ai-players"))); m_number_ais_spin = new CUISpin<int>(LABELS_WIDTH + 2 * CONTROL_MARGIN, ypos, GG::X(75), GetOptionsDB().Get<int>("GameSetup.ai-players"), 1, 0, MAX_AI_PLAYERS, true); m_number_ais_label->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_number_ais_label->Height()) / 2)); m_number_ais_spin->OffsetMove(GG::Pt(GG::X0, (PANEL_CONTROL_SPACING - m_number_ais_spin->Height()) / 2)); ypos += PANEL_CONTROL_SPACING; m_preview_ul = GG::Pt(ClientWidth() - PREVIEW_SZ.x - 7, GG::Y(7)); // create a temporary texture and static graphic ypos += GG::Y(5); boost::shared_ptr<GG::Texture> temp_tex(new GG::Texture()); m_preview_image = new GG::StaticGraphic(m_preview_ul.x, m_preview_ul.y, PREVIEW_SZ.x, PREVIEW_SZ.y, temp_tex, GG::GRAPHIC_FITGRAPHIC); // create a blank graphic m_ok = new CUIButton(UserString("OK"), GG::X(10), ypos, GG::X(75)); m_cancel = new CUIButton(UserString("CANCEL"), 10 + m_ok->Size().x + 15, ypos, GG::X(75)); Init(); }
void PlayerListWnd::DoLayout() { m_player_list->SizeMove(GG::Pt(), GG::Pt(ClientWidth(), ClientHeight() - GG::Y(INNER_BORDER_ANGLE_OFFSET))); }
void DoLayout() { m_queue_lb->SizeMove(GG::Pt(GG::X0, GG::Y0), GG::Pt(ClientWidth(), ClientHeight() - GG::Y(CUIWnd::INNER_BORDER_ANGLE_OFFSET))); }