//////////////////////////////////////////////////// // // CNewsBrowser::AddNewsTab // // // //////////////////////////////////////////////////// void CNewsBrowser::AddNewsTab(const SNewsItem& newsItem) { CGUI* pManager = g_pCore->GetGUI(); CGUITab* pTab = m_pTabPanel->CreateTab("News"); m_TabList.push_back(pTab); // Create everything under a scrollpane CGUIScrollPane* m_pScrollPane = reinterpret_cast<CGUIScrollPane*>(pManager->CreateScrollPane(pTab)); m_pScrollPane->SetProperty("ContentPaneAutoSized", "True"); m_pScrollPane->SetPosition(CVector2D(3, 3), 0); m_pScrollPane->SetSize(CVector2D(618.0f, 390.0f)); m_pScrollPane->SetVerticalScrollStepSize(0.15f); m_pScrollPane->SetVerticalScrollBar(true); // Switch cwd pManager->PushGuiWorkingDirectory(newsItem.strContentFullDir); // Load files CGUIWindow* pWindow = LoadLayoutAndImages(m_pScrollPane, newsItem); m_TabContentList.push_back(pWindow); // Set tab name from content window title if (pWindow) { SString strTitle = pWindow->GetText(); if (!strTitle.empty()) pTab->SetText(strTitle); } // Restore cwd pManager->PopGuiWorkingDirectory(newsItem.strContentFullDir); }
//! Adds a tab IGUITab* CGUITabControl::addTab(const wchar_t* caption, s32 id) { IGUISkin* skin = Environment->getSkin(); if (!skin) return 0; s32 tabheight = skin->getSize(gui::EGDS_BUTTON_HEIGHT) + 2; core::rect<s32> r(1,tabheight, AbsoluteRect.getWidth()-1, AbsoluteRect.getHeight()-1); CGUITab* tab = new CGUITab(Tabs.size(), Environment, this, r, id); tab->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT); tab->setText(caption); tab->setVisible(false); Tabs.push_back(tab); if (ActiveTab == -1) { ActiveTab = 0; tab->setVisible(true); } return tab; }
//! Adds a tab IGUITab* CGUITabControl::addTab(const wchar_t* caption, s32 id) { IGUISkin* skin = Environment->getSkin(); if (!skin) return 0; core::rect<s32> r; if ( VerticalAlignment == EGUIA_UPPERLEFT ) { r.UpperLeftCorner.X = 1; r.UpperLeftCorner.Y = TabHeight; r.LowerRightCorner.X = AbsoluteRect.getWidth()-1; r.LowerRightCorner.Y = AbsoluteRect.getHeight()-1; } else { r.UpperLeftCorner.X = 1; r.UpperLeftCorner.Y = 1; r.LowerRightCorner.X = AbsoluteRect.getWidth()-1; r.LowerRightCorner.Y = AbsoluteRect.getHeight()-TabHeight; } CGUITab* tab = new CGUITab(Tabs.size(), Environment, this, r, id); tab->setText(caption); tab->setAlignment(EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT, EGUIA_UPPERLEFT, EGUIA_LOWERRIGHT); tab->setVisible(false); Tabs.push_back(tab); if (ActiveTab == -1) { ActiveTab = 0; tab->setVisible(true); } recalculateScrollBar(); return tab; }
//! draws the element and its children void CGUITabControl::draw() { if (!IsVisible) return; IGUISkin* skin = Environment->getSkin(); if (!skin) return; IGUIFont* font = skin->getFont(); video::IVideoDriver* driver = Environment->getVideoDriver(); core::rect<s32> frameRect(AbsoluteRect); if (Tabs.empty()) driver->draw2DRectangle(skin->getColor(EGDC_3D_HIGH_LIGHT), frameRect, &AbsoluteClippingRect); if (!font) return; if ( VerticalAlignment == EGUIA_UPPERLEFT ) { frameRect.UpperLeftCorner.Y += 2; frameRect.LowerRightCorner.Y = frameRect.UpperLeftCorner.Y + TabHeight; } else { frameRect.UpperLeftCorner.Y = frameRect.LowerRightCorner.Y - TabHeight - 1; frameRect.LowerRightCorner.Y -= 2; } core::rect<s32> tr; s32 pos = frameRect.UpperLeftCorner.X + 2; // left and right pos of the active tab s32 left = 0; s32 right = 0; //const wchar_t* activetext = 0; CGUITab *activeTab = 0; for (u32 i=0; i<Tabs.size(); ++i) { // get Text const wchar_t* text = 0; if (Tabs[i]) text = Tabs[i]->getText(); // get text length s32 len = font->getDimension(text).Width + TabExtraWidth; frameRect.LowerRightCorner.X += len; frameRect.UpperLeftCorner.X = pos; frameRect.LowerRightCorner.X = frameRect.UpperLeftCorner.X + len; if ( ScrollControl && pos > frameRect.LowerRightCorner.X ) break; pos += len; if ((s32)i == ActiveTab) { left = frameRect.UpperLeftCorner.X; right = frameRect.LowerRightCorner.X; //activetext = text; activeTab = Tabs[i]; } else { skin->draw3DTabButton(this, false, frameRect, &AbsoluteClippingRect, VerticalAlignment); // draw text font->draw(text, frameRect, Tabs[i]->getTextColor(), true, true, &AbsoluteClippingRect); } } // draw active tab if (left != 0 && right != 0 && activeTab != 0) { // draw upper highlight frame if ( VerticalAlignment == EGUIA_UPPERLEFT ) { frameRect.UpperLeftCorner.X = left-2; frameRect.LowerRightCorner.X = right+2; frameRect.UpperLeftCorner.Y -= 2; skin->draw3DTabButton(this, true, frameRect, &AbsoluteClippingRect, VerticalAlignment); // draw text font->draw(activeTab->getText(), frameRect, activeTab->getTextColor(), true, true, &AbsoluteClippingRect); tr.UpperLeftCorner.X = AbsoluteRect.UpperLeftCorner.X; tr.LowerRightCorner.X = left - 1; tr.UpperLeftCorner.Y = frameRect.LowerRightCorner.Y - 1; tr.LowerRightCorner.Y = frameRect.LowerRightCorner.Y; driver->draw2DRectangle(skin->getColor(EGDC_3D_HIGH_LIGHT), tr, &AbsoluteClippingRect); tr.UpperLeftCorner.X = right; tr.LowerRightCorner.X = AbsoluteRect.LowerRightCorner.X; driver->draw2DRectangle(skin->getColor(EGDC_3D_HIGH_LIGHT), tr, &AbsoluteClippingRect); } else { frameRect.UpperLeftCorner.X = left-2; frameRect.LowerRightCorner.X = right+2; frameRect.LowerRightCorner.Y += 2; skin->draw3DTabButton(this, true, frameRect, &AbsoluteClippingRect, VerticalAlignment); // draw text font->draw(activeTab->getText(), frameRect, activeTab->getTextColor(), true, true, &AbsoluteClippingRect); tr.UpperLeftCorner.X = AbsoluteRect.UpperLeftCorner.X; tr.LowerRightCorner.X = left - 1; tr.UpperLeftCorner.Y = frameRect.UpperLeftCorner.Y - 1; tr.LowerRightCorner.Y = frameRect.UpperLeftCorner.Y; driver->draw2DRectangle(skin->getColor(EGDC_3D_DARK_SHADOW), tr, &AbsoluteClippingRect); tr.UpperLeftCorner.X = right; tr.LowerRightCorner.X = AbsoluteRect.LowerRightCorner.X; driver->draw2DRectangle(skin->getColor(EGDC_3D_DARK_SHADOW), tr, &AbsoluteClippingRect); } } else { if ( VerticalAlignment == EGUIA_UPPERLEFT ) { tr.UpperLeftCorner.X = AbsoluteRect.UpperLeftCorner.X; tr.LowerRightCorner.X = AbsoluteRect.LowerRightCorner.X; tr.UpperLeftCorner.Y = frameRect.LowerRightCorner.Y - 1; tr.LowerRightCorner.Y = frameRect.LowerRightCorner.Y; driver->draw2DRectangle(skin->getColor(EGDC_3D_HIGH_LIGHT), tr, &AbsoluteClippingRect); } else { tr.UpperLeftCorner.X = AbsoluteRect.UpperLeftCorner.X; tr.LowerRightCorner.X = 1000; tr.UpperLeftCorner.Y = frameRect.UpperLeftCorner.Y - 1; tr.LowerRightCorner.Y = frameRect.UpperLeftCorner.Y; driver->draw2DRectangle(skin->getColor(EGDC_3D_DARK_SHADOW), tr, &AbsoluteClippingRect); } } skin->draw3DTabBody(this, Border, FillBackground, AbsoluteRect, &AbsoluteClippingRect, TabHeight, VerticalAlignment); IGUIElement::draw(); }