void SampleApp::OnToggleSpaceClick() { if( m_scrolled_window_box->GetSpacing() > .0f ) { m_scrolled_window_box->SetSpacing( .0f ); } else { m_scrolled_window_box->SetSpacing( 40.f ); } }
void refreshPropertiesWindow() { clearPropertiesWindow(); propertiesBox = sfg::Box::Create(sfg::Box::Orientation::VERTICAL, 2.0f); windowProperties->Add(propertiesBox); //windowProperties->SetRequisition(sf::Vector2f(150.0f,400.0f)); for (unsigned int i = 0; i < properties.size(); i++) { sfg::Label::Ptr label = sfg::Label::Create(); sfg::Entry::Ptr textbox = sfg::Entry::Create(); sfg::Box::Ptr box = sfg::Box::Create(sfg::Box::Orientation::HORIZONTAL, 5.0f); box->SetRequisition(sf::Vector2f(300.0f, 28.0f)); textbox->SetRequisition(sf::Vector2f(200.0f,25.0f)); label->SetRequisition(sf::Vector2f(100.0f, 25.0f)); label->SetText(properties.at(i).Name); textbox->SetText(properties.at(i).Value); windowPropertiesBox.push_back(box); windowPropertiesLabel.push_back(label); windowPropertiesTextbox.push_back(textbox); box->Pack(label,false,false); box->Pack(textbox,false,false); propertiesBox->Pack(box,false,false); } }
void SampleApp::OnAddButtonVClick() { sfg::Button::Ptr button( sfg::Button::Create( L"<- New" ) ); Ouchy::Ptr ouchy( new Ouchy( button ) ); Ouchy::m_ouchies.push_back( ouchy ); button->OnClick.Connect( &Ouchy::DoOuch, ouchy.get() ); m_boxbuttonsv->Pack( button, false ); }
void SampleApp::OnAddButtonHClick() { sfg::Button::Ptr button( sfg::Button::Create( L"New ->" ) ); Ouchy::Ptr ouchy( new Ouchy( button ) ); Ouchy::m_ouchies.push_back( ouchy ); button->GetSignal( sfg::Widget::OnLeftClick ).Connect( &Ouchy::DoOuch, ouchy.get() ); m_boxbuttonsh->Pack( button, true ); }
void refreshToolsWindow() { clearToolsWindow(); toolsBox = sfg::Box::Create(sfg::Box::Orientation::VERTICAL, 5.0f); for (unsigned int i = 0; i < tools.size(); i++) { Tool tool = tools.at(i); bool loaded = false; if (!tool.Loaded) { if (tool.load()) { loaded = true; } } else { loaded = true; } sfg::ToggleButton::Ptr button = sfg::ToggleButton::Create(); button->SetLabel(""); if (loaded) { button->SetImage(tool.Image); } else { button->SetLabel(tool.Name); } button->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonTool, this)); if (i == 0) { button->SetActive(true); } toolButtons.push_back(button); toolsBox->Pack(button,false,false); } windowTool->Add(toolsBox); }
void ItemPageUI::OnAddListEntry(sfg::Box::Ptr target, int compID, vector<Field> entryFields) { sfg::Box::Ptr compListBox = sfg::Box::Create(sfg::Box::Orientation::HORIZONTAL); vector<std::pair<sfg::Label::Ptr, sfg::Widget::Ptr>> entry; for (int j = 0; j < entryFields.size(); ++j) { sfg::Label::Ptr listEntryFieldLbl = sfg::Label::Create(entryFields[j].name); compListBox->Pack(listEntryFieldLbl); auto listEntryFieldValue = UtilityFormFunctions::AddComponentWidgetToBox(entryFields[j].valueType, entryFields[j].value, compListBox); entry.push_back(std::pair<sfg::Label::Ptr, sfg::Widget::Ptr>(listEntryFieldLbl, listEntryFieldValue)); } int entryIndex = m_listEntryList[compID].rbegin()->first + 1; m_listEntryList[compID][entryIndex] = entry; auto deleteListEntryButton = sfg::Button::Create("Delete"); deleteListEntryButton->GetSignal(sfg::Widget::OnLeftClick).Connect(std::bind(&ItemPageUI::OnDeleteListEntry, this, compListBox, compID, entryIndex)); compListBox->Pack(deleteListEntryButton); m_children.push_back(compListBox); target->Pack(compListBox); }
void ScrolledWindowViewportExample::OnButtonClick() { m_scrolled_window_box->Pack( sfg::Button::Create( "A Button" ) ); }
/* Fonctions de construction de menu */ void Menu::addButton2MenuList(sfg::Box::Ptr box, sfg::Button::Ptr but) { box->Pack(but); boutons.insert(pair<string, Button::Ptr>(but->GetLabel(), but)); }
void SampleApp::Run() { sf::Event event; //m_window.SetFramerateLimit( 60 ); //m_window.EnableVerticalSync( true ); // Tune Renderer sfg::Renderer::Get().TuneDepthTest( sfg::Renderer::ALTERNATE_DEPTH ); sfg::Renderer::Get().TuneAlphaThreshold( .2f ); sfg::Renderer::Get().TunePrecomputeBlending( true ); sfg::Renderer::Get().TuneCull( true ); // Create widgets. m_wndmain = sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND | sfg::Window::RESIZE ); m_wndmain->SetTitle( L"Example application" ); sfg::Button::Ptr btnaddbuttonh( sfg::Button::Create( L"Add button horizontally" ) ); sfg::Button::Ptr btnaddbuttonv( sfg::Button::Create( L"Add button vertically" ) ); m_titlebar_toggle = sfg::ToggleButton::Create( "Toggle titlebar" ); m_titlebar_toggle->SetActive( true ); { sf::Image add_image; if( add_image.loadFromFile( "data/add.png" ) ) { sfg::Image::Ptr image( sfg::Image::Create( add_image ) ); btnaddbuttonh->SetImage( image ); image = sfg::Image::Create( add_image ); btnaddbuttonv->SetImage( image ); } } sfg::Button::Ptr btnhidewindow( sfg::Button::Create( L"Close window" ) ); btnhidewindow->SetId( "close" ); { sf::Image close_image; if( close_image.loadFromFile( "data/delete.png" ) ) { sfg::Image::Ptr image( sfg::Image::Create( close_image ) ); btnhidewindow->SetImage( image ); } } sfg::Button::Ptr btntogglespace( sfg::Button::Create( L"Box Spacing") ); sfg::Button::Ptr btnloadstyle( sfg::Button::Create( L"Load theme") ); m_entry = sfg::Entry::Create( L"Type" ); m_entry->SetRequisition( sf::Vector2f( 100.f, .0f ) ); m_entry->AppendText( L" something!" ); m_limit_check = sfg::CheckButton::Create( L"Limit to 4 chars" ); m_limit_check->SetId( "limit_check" ); sfg::Entry::Ptr password( sfg::Entry::Create() ); password->HideText( '*' ); // Layout. sfg::Box::Ptr boxtoolbar( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); boxtoolbar->SetSpacing( 5.f ); boxtoolbar->Pack( btnaddbuttonh, false ); boxtoolbar->Pack( btnaddbuttonv, false ); boxtoolbar->Pack( m_titlebar_toggle, false ); boxtoolbar->Pack( btnhidewindow, false ); boxtoolbar->Pack( m_entry, true ); boxtoolbar->Pack( m_limit_check, false ); sfg::Frame::Ptr frame1( sfg::Frame::Create( L"Toolbar 1" ) ); frame1->Add( boxtoolbar ); sfg::Box::Ptr boxtoolbar2( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); boxtoolbar2->SetSpacing( 5.f ); boxtoolbar2->Pack( btntogglespace, false ); boxtoolbar2->Pack( btnloadstyle, false ); m_boxbuttonsh = sfg::Box::Create( sfg::Box::HORIZONTAL ); m_boxbuttonsh->SetSpacing( 5.f ); m_boxbuttonsv = sfg::Box::Create( sfg::Box::VERTICAL ); m_boxbuttonsv->SetSpacing( 5.f ); sfg::Entry::Ptr username_entry( sfg::Entry::Create() ); username_entry->SetMaximumLength( 8 ); m_progress = sfg::ProgressBar::Create( sfg::ProgressBar::HORIZONTAL ); m_progress->SetRequisition( sf::Vector2f( 0.f, 20.f ) ); m_progress_vert = sfg::ProgressBar::Create( sfg::ProgressBar::VERTICAL ); m_progress_vert->SetRequisition( sf::Vector2f( 20.f, 0.f ) ); sfg::Separator::Ptr separatorv( sfg::Separator::Create( sfg::Separator::VERTICAL ) ); m_table = sfg::Table::Create(); m_table->Attach( sfg::Label::Create( L"Please login using your username and password (span example)." ), sf::Rect<sf::Uint32>( 0, 0, 2, 1 ), sfg::Table::FILL, sfg::Table::FILL | sfg::Table::EXPAND ); m_table->Attach( sfg::Label::Create( L"Username:"******"Password:"******"Login" ), sf::Rect<sf::Uint32>( 2, 1, 1, 2 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->Attach( separatorv, sf::Rect<sf::Uint32>( 3, 0, 1, 3 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->Attach( m_progress_vert, sf::Rect<sf::Uint32>( 4, 0, 1, 3 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->SetRowSpacings( 5.f ); m_table->SetColumnSpacings( 5.f ); m_scrolled_window_box = sfg::Box::Create( sfg::Box::VERTICAL ); for( int i = 0; i < 5; i++ ) { sfg::Box::Ptr box = sfg::Box::Create( sfg::Box::HORIZONTAL ); for( int j = 0; j < 20; j++ ) { box->Pack( sfg::Button::Create( L"One button among many" ), true ); } m_scrolled_window_box->Pack( box, false ); } m_scrolled_window = sfg::ScrolledWindow::Create(); m_scrolled_window->SetRequisition( sf::Vector2f( .0f, 150.f ) ); m_scrolled_window->SetScrollbarPolicy( sfg::ScrolledWindow::HORIZONTAL_AUTOMATIC | sfg::ScrolledWindow::VERTICAL_AUTOMATIC ); m_scrolled_window->SetPlacement( sfg::ScrolledWindow::TOP_LEFT ); m_scrolled_window->AddWithViewport( m_scrolled_window_box ); sfg::Scrollbar::Ptr scrollbar( sfg::Scrollbar::Create() ); scrollbar->SetRange( .0f, 100.f ); m_scale = sfg::Scale::Create(); m_scale->SetAdjustment( scrollbar->GetAdjustment() ); m_scale->SetRequisition( sf::Vector2f( 100.f, .0f ) ); boxtoolbar2->Pack( m_scale, false ); m_combo_box = sfg::ComboBox::Create(); m_combo_box->AppendItem( "Item 0" ); m_combo_box->AppendItem( "Item 1" ); m_combo_box->AppendItem( "Item 2" ); m_combo_box->AppendItem( "Item 3" ); boxtoolbar2->Pack( m_combo_box, true ); sfg::Frame::Ptr frame2( sfg::Frame::Create( L"Toolbar 2" ) ); frame2->Add( boxtoolbar2 ); frame2->SetAlignment( sf::Vector2f( .8f, .0f ) ); sfg::Separator::Ptr separatorh( sfg::Separator::Create( sfg::Separator::HORIZONTAL ) ); sfg::Box::Ptr box_image( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); box_image->SetSpacing( 5.f ); sfg::Fixed::Ptr fixed_container( sfg::Fixed::Create() ); sfg::Button::Ptr fixed_button( sfg::Button::Create( L"I'm at (34,61)" ) ); fixed_container->Put( fixed_button, sf::Vector2f( 34.f, 61.f ) ); box_image->Pack( fixed_container, false ); sf::Image sfgui_logo; sfg::Image::Ptr image = sfg::Image::Create(); if( sfgui_logo.loadFromFile("sfgui.png") ) { image->SetImage( sfgui_logo ); box_image->Pack( image, false ); } sfg::Box::Ptr spinner_box( sfg::Box::Create( sfg::Box::VERTICAL ) ); m_spinner = sfg::Spinner::Create(); m_spinner->SetRequisition( sf::Vector2f( 40.f, 40.f ) ); m_spinner->Start(); sfg::ToggleButton::Ptr spinner_toggle( sfg::ToggleButton::Create( L"Spin") ); spinner_toggle->SetActive( true ); spinner_box->SetSpacing( 5.f ); spinner_box->Pack( m_spinner, false ); spinner_box->Pack( spinner_toggle, false ); box_image->Pack( spinner_box, false ); sfg::ComboBox::Ptr aligned_combo_box( sfg::ComboBox::Create() ); aligned_combo_box->AppendItem( L"I'm way over here" ); aligned_combo_box->AppendItem( L"Me too" ); aligned_combo_box->AppendItem( L"Me three" ); aligned_combo_box->SelectItem( 0 ); sfg::Alignment::Ptr alignment( sfg::Alignment::Create() ); alignment->Add( aligned_combo_box ); box_image->Pack( alignment, true ); alignment->SetAlignment( sf::Vector2f( 1.f, .5f ) ); alignment->SetScale( sf::Vector2f( 0.f, .01f ) ); sfg::Box::Ptr boxmain( sfg::Box::Create( sfg::Box::VERTICAL ) ); boxmain->SetSpacing( 5.f ); boxmain->Pack( scrollbar, false ); boxmain->Pack( m_progress, false ); boxmain->Pack( frame1, false ); boxmain->Pack( frame2, false ); boxmain->Pack( m_boxbuttonsh, false ); boxmain->Pack( m_boxbuttonsv, false ); boxmain->Pack( box_image, true ); boxmain->Pack( separatorh, false ); boxmain->Pack( m_table, true ); boxmain->Pack( m_scrolled_window ); sfg::Notebook::Ptr notebook1( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook2( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook3( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook4( sfg::Notebook::Create() ); notebook1->SetTabPosition( sfg::Notebook::TOP ); notebook2->SetTabPosition( sfg::Notebook::RIGHT ); notebook3->SetTabPosition( sfg::Notebook::BOTTOM ); notebook4->SetTabPosition( sfg::Notebook::LEFT ); sfg::Box::Ptr vertigo_box( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); sfg::Button::Ptr vertigo_button( sfg::Button::Create( L"Vertigo" ) ); vertigo_box->Pack( vertigo_button, true, true ); notebook1->AppendPage( boxmain, sfg::Label::Create( "Page Name Here" ) ); notebook1->AppendPage( notebook2, sfg::Label::Create( "Another Page" ) ); notebook2->AppendPage( notebook3, sfg::Label::Create( "Yet Another Page" ) ); notebook2->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); notebook3->AppendPage( notebook4, sfg::Label::Create( "And Another Page" ) ); notebook3->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); notebook4->AppendPage( vertigo_box, sfg::Label::Create( "And The Last Page" ) ); notebook4->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); m_wndmain->Add( notebook1 ); // Signals. btnaddbuttonh->OnClick.Connect( &SampleApp::OnAddButtonHClick, this ); btnaddbuttonv->OnClick.Connect( &SampleApp::OnAddButtonVClick, this ); m_titlebar_toggle->OnClick.Connect( &SampleApp::OnToggleTitlebarClick, this ); btnhidewindow->OnClick.Connect( &SampleApp::OnHideWindowClicked, this ); btntogglespace->OnClick.Connect( &SampleApp::OnToggleSpaceClick, this ); m_limit_check->OnToggle.Connect( &SampleApp::OnLimitCharsToggle, this ); btnloadstyle->OnClick.Connect( &SampleApp::OnLoadThemeClick, this ); m_scale->GetAdjustment()->OnChange.Connect( &SampleApp::OnAdjustmentChange, this ); spinner_toggle->OnClick.Connect( &SampleApp::OnToggleSpinner, this ); m_wndmain->SetPosition( sf::Vector2f( 100.f, 100.f ) ); // Another window sfg::Window::Ptr second_window( sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND ) ); second_window->SetId( "second_window" ); second_window->SetTitle( "Another window" ); sfg::Box::Ptr box( sfg::Box::Create( sfg::Box::VERTICAL, 5.f ) ); box->Pack( sfg::Label::Create( "Aliquam sed pretium lacus." ), false ); box->Pack( sfg::Label::Create( "Nullam placerat mauris vel nulla sagittis pellentesque." ), false ); box->Pack( sfg::Label::Create( "Suspendisse in justo dui." ), false ); box->Pack( sfg::Label::Create( "Ut dolor massa, gravida eu facilisis convallis, convallis sed odio." ), false ); box->Pack( sfg::Label::Create( "Nunc placerat consequat vehicula." ), false ); second_window->Add( box ); second_window->SetPosition( sf::Vector2f( 10.f, 10.f ) ); second_window->SetId( "second_window" ); m_desktop.Add( second_window ); // Add window to desktop m_desktop.Add( m_wndmain ); // Play around with resource manager. sf::Font my_font; my_font.loadFromFile( "data/linden_hill.otf" ); m_desktop.GetEngine().GetResourceManager().AddFont( "custom_font", my_font, false ); // false -> do not manage! // Set properties. m_desktop.SetProperty( "Button#close:Normal", "Color", sf::Color::Yellow ); m_desktop.SetProperty( "Button#close", "FontName", "data/linden_hill.otf" ); m_desktop.SetProperty( "Button#close", "FontSize", 15.f ); m_desktop.SetProperty( "Window#second_window > Box > Label", "FontName", "custom_font" ); m_desktop.SetProperty( "Window#second_window > Box > Label", "FontSize", 18.f ); m_fps_counter = 0; m_fps_clock.restart(); sf::Clock clock; while( m_window.isOpen() ) { while( m_window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) { m_window.close(); } else if( event.type == sf::Event::Resized ) { m_desktop.UpdateViewRect( sf::FloatRect( 0.f, 0.f, static_cast<float>( event.size.width ), static_cast<float>( event.size.height ) ) ); } m_desktop.HandleEvent( event ); } m_window.draw( m_background_sprite ); sf::Uint64 microseconds = clock.getElapsedTime().asMicroseconds(); // Only update every 5ms if( microseconds > 5000 ) { m_desktop.Update( static_cast<float>( microseconds ) / 1000000.f ); clock.restart(); } sfg::Renderer::Get().Display( m_window ); m_window.display(); if( m_fps_clock.getElapsedTime().asMicroseconds() >= 1000000 ) { m_fps_clock.restart(); std::stringstream sstr; sstr << "SFGUI test -- FPS: " << m_fps_counter; m_window.setTitle( sstr.str() ); m_fps_counter = 0; } ++m_fps_counter; } }
void SampleApp::Run() { sf::Event event; //m_window.SetFramerateLimit( 60 ); //m_window.EnableVerticalSync( true ); // Tune Renderer m_sfgui.TuneUseFBO( true ); m_sfgui.TuneAlphaThreshold( .2f ); m_sfgui.TuneCull( true ); // Create widgets. m_wndmain = sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND | sfg::Window::RESIZE ); m_wndmain->SetTitle( L"Example application" ); sfg::Button::Ptr btnaddbuttonh( sfg::Button::Create( L"Add button horizontally" ) ); sfg::Button::Ptr btnaddbuttonv( sfg::Button::Create( L"Add button vertically" ) ); m_titlebar_toggle = sfg::ToggleButton::Create( "Toggle titlebar" ); m_titlebar_toggle->SetActive( true ); { sf::Image add_image; if( add_image.loadFromFile( "data/add.png" ) ) { sfg::Image::Ptr image( sfg::Image::Create( add_image ) ); btnaddbuttonh->SetImage( image ); image = sfg::Image::Create( add_image ); btnaddbuttonv->SetImage( image ); } } sfg::Button::Ptr btnhidewindow( sfg::Button::Create( L"Close window" ) ); btnhidewindow->SetId( "close" ); { sf::Image close_image; if( close_image.loadFromFile( "data/delete.png" ) ) { sfg::Image::Ptr image( sfg::Image::Create( close_image ) ); btnhidewindow->SetImage( image ); } } sfg::Button::Ptr btntogglespace( sfg::Button::Create( L"Box Spacing") ); sfg::Button::Ptr btnloadstyle( sfg::Button::Create( L"Load theme") ); m_entry = sfg::Entry::Create( L"Type" ); m_entry->SetRequisition( sf::Vector2f( 100.f, .0f ) ); m_entry->AppendText( L" something!" ); m_limit_check = sfg::CheckButton::Create( L"Limit to 4 chars" ); m_limit_check->SetId( "limit_check" ); sfg::Entry::Ptr password( sfg::Entry::Create() ); password->HideText( '*' ); // Layout. sfg::Box::Ptr boxtoolbar( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); boxtoolbar->SetSpacing( 5.f ); boxtoolbar->Pack( btnaddbuttonh, false ); boxtoolbar->Pack( btnaddbuttonv, false ); boxtoolbar->Pack( m_titlebar_toggle, false ); boxtoolbar->Pack( btnhidewindow, false ); boxtoolbar->Pack( m_entry, true ); boxtoolbar->Pack( m_limit_check, false ); sfg::Frame::Ptr frame1( sfg::Frame::Create( L"Toolbar 1" ) ); frame1->Add( boxtoolbar ); sfg::Box::Ptr boxtoolbar2( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); boxtoolbar2->SetSpacing( 5.f ); boxtoolbar2->Pack( btntogglespace, false ); boxtoolbar2->Pack( btnloadstyle, false ); m_boxbuttonsh = sfg::Box::Create( sfg::Box::HORIZONTAL ); m_boxbuttonsh->SetSpacing( 5.f ); m_boxbuttonsv = sfg::Box::Create( sfg::Box::VERTICAL ); m_boxbuttonsv->SetSpacing( 5.f ); sfg::Entry::Ptr username_entry( sfg::Entry::Create() ); username_entry->SetMaximumLength( 8 ); m_progress = sfg::ProgressBar::Create( sfg::ProgressBar::HORIZONTAL ); m_progress->SetRequisition( sf::Vector2f( 0.f, 20.f ) ); m_progress_vert = sfg::ProgressBar::Create( sfg::ProgressBar::VERTICAL ); m_progress_vert->SetRequisition( sf::Vector2f( 20.f, 0.f ) ); sfg::Separator::Ptr separatorv( sfg::Separator::Create( sfg::Separator::VERTICAL ) ); m_table = sfg::Table::Create(); m_table->Attach( sfg::Label::Create( L"Please login using your username and password (span example)." ), sf::Rect<sf::Uint32>( 0, 0, 2, 1 ), sfg::Table::FILL, sfg::Table::FILL | sfg::Table::EXPAND ); m_table->Attach( sfg::Label::Create( L"Username:"******"Password:"******"Login" ), sf::Rect<sf::Uint32>( 2, 1, 1, 2 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->Attach( separatorv, sf::Rect<sf::Uint32>( 3, 0, 1, 3 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->Attach( m_progress_vert, sf::Rect<sf::Uint32>( 4, 0, 1, 3 ), sfg::Table::FILL, sfg::Table::FILL ); m_table->SetRowSpacings( 5.f ); m_table->SetColumnSpacings( 5.f ); m_scrolled_window_box = sfg::Box::Create( sfg::Box::VERTICAL ); for( int i = 0; i < 5; i++ ) { sfg::Box::Ptr box = sfg::Box::Create( sfg::Box::HORIZONTAL ); for( int j = 0; j < 20; j++ ) { box->Pack( sfg::Button::Create( L"One button among many" ), true ); } m_scrolled_window_box->Pack( box, false ); } m_scrolled_window = sfg::ScrolledWindow::Create(); m_scrolled_window->SetRequisition( sf::Vector2f( .0f, 160.f ) ); m_scrolled_window->SetScrollbarPolicy( sfg::ScrolledWindow::HORIZONTAL_AUTOMATIC | sfg::ScrolledWindow::VERTICAL_AUTOMATIC ); m_scrolled_window->SetPlacement( sfg::ScrolledWindow::TOP_LEFT ); m_scrolled_window->AddWithViewport( m_scrolled_window_box ); sfg::Scrollbar::Ptr scrollbar( sfg::Scrollbar::Create() ); scrollbar->SetRange( .0f, 100.f ); m_scale = sfg::Scale::Create(); m_scale->SetAdjustment( scrollbar->GetAdjustment() ); m_scale->SetRequisition( sf::Vector2f( 100.f, .0f ) ); boxtoolbar2->Pack( m_scale, false ); m_combo_box = sfg::ComboBox::Create(); for( int index = 0; index < 30; ++index ) { std::stringstream sstr; sstr << "Item " << index; m_combo_box->AppendItem( sstr.str() ); } boxtoolbar2->Pack( m_combo_box, true ); sfg::Frame::Ptr frame2( sfg::Frame::Create( L"Toolbar 2" ) ); frame2->Add( boxtoolbar2 ); frame2->SetAlignment( sf::Vector2f( .8f, .0f ) ); sfg::Separator::Ptr separatorh( sfg::Separator::Create( sfg::Separator::HORIZONTAL ) ); sfg::Box::Ptr box_image( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); box_image->SetSpacing( 15.f ); sfg::Fixed::Ptr fixed_container( sfg::Fixed::Create() ); sfg::Button::Ptr fixed_button( sfg::Button::Create( L"I'm at (34,61)" ) ); fixed_container->Put( fixed_button, sf::Vector2f( 34.f, 61.f ) ); box_image->Pack( fixed_container, false ); sf::Image sfgui_logo; m_image = sfg::Image::Create(); if( sfgui_logo.loadFromFile( "data/sfgui.png" ) ) { m_image->SetImage( sfgui_logo ); box_image->Pack( m_image, false ); } sfg::Button::Ptr mirror_image( sfg::Button::Create( L"Mirror Image" ) ); box_image->Pack( mirror_image, false ); sfg::Box::Ptr spinner_box( sfg::Box::Create( sfg::Box::VERTICAL ) ); m_spinner = sfg::Spinner::Create(); m_spinner->SetRequisition( sf::Vector2f( 40.f, 40.f ) ); m_spinner->Start(); sfg::ToggleButton::Ptr spinner_toggle( sfg::ToggleButton::Create( L"Spin") ); spinner_toggle->SetActive( true ); spinner_box->SetSpacing( 5.f ); spinner_box->Pack( m_spinner, false ); spinner_box->Pack( spinner_toggle, false ); box_image->Pack( spinner_box, false ); sfg::Box::Ptr radio_box( sfg::Box::Create( sfg::Box::VERTICAL ) ); sfg::RadioButton::Ptr radio1( sfg::RadioButton::Create( "Radio 1" ) ); sfg::RadioButton::Ptr radio2( sfg::RadioButton::Create( "Radio 2", radio1->GetGroup() ) ); sfg::RadioButton::Ptr radio3( sfg::RadioButton::Create( "Radio 3", radio2->GetGroup() ) ); radio_box->Pack( radio1 ); radio_box->Pack( radio2 ); radio_box->Pack( radio3 ); box_image->Pack( radio_box, false ); sfg::SpinButton::Ptr spinbutton( sfg::SpinButton::Create( scrollbar->GetAdjustment() ) ); spinbutton->SetRequisition( sf::Vector2f( 80.f, 0.f ) ); spinbutton->SetDigits( 3 ); sfg::Box::Ptr spinbutton_box( sfg::Box::Create( sfg::Box::VERTICAL ) ); spinbutton_box->Pack( spinbutton, false, false ); box_image->Pack( spinbutton_box, false, false ); sfg::ComboBox::Ptr aligned_combo_box( sfg::ComboBox::Create() ); aligned_combo_box->AppendItem( L"I'm way over here" ); aligned_combo_box->AppendItem( L"Me too" ); aligned_combo_box->AppendItem( L"Me three" ); aligned_combo_box->SelectItem( 0 ); sfg::Alignment::Ptr alignment( sfg::Alignment::Create() ); alignment->Add( aligned_combo_box ); box_image->Pack( alignment, true ); alignment->SetAlignment( sf::Vector2f( 1.f, .5f ) ); alignment->SetScale( sf::Vector2f( 0.f, .01f ) ); sfg::Box::Ptr boxmain( sfg::Box::Create( sfg::Box::VERTICAL ) ); boxmain->SetSpacing( 5.f ); boxmain->Pack( scrollbar, false ); boxmain->Pack( m_progress, false ); boxmain->Pack( frame1, false ); boxmain->Pack( frame2, false ); boxmain->Pack( m_boxbuttonsh, false ); boxmain->Pack( m_boxbuttonsv, false ); boxmain->Pack( box_image, true ); boxmain->Pack( separatorh, false ); boxmain->Pack( m_table, true ); boxmain->Pack( m_scrolled_window ); sfg::Notebook::Ptr notebook1( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook2( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook3( sfg::Notebook::Create() ); sfg::Notebook::Ptr notebook4( sfg::Notebook::Create() ); notebook1->SetTabPosition( sfg::Notebook::TOP ); notebook2->SetTabPosition( sfg::Notebook::RIGHT ); notebook3->SetTabPosition( sfg::Notebook::BOTTOM ); notebook4->SetTabPosition( sfg::Notebook::LEFT ); sfg::Box::Ptr vertigo_box( sfg::Box::Create( sfg::Box::HORIZONTAL ) ); sfg::Button::Ptr vertigo_button( sfg::Button::Create( L"Vertigo" ) ); vertigo_box->Pack( vertigo_button, true, true ); notebook1->AppendPage( boxmain, sfg::Label::Create( "Page Name Here" ) ); notebook1->AppendPage( notebook2, sfg::Label::Create( "Another Page" ) ); notebook2->AppendPage( notebook3, sfg::Label::Create( "Yet Another Page" ) ); notebook2->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); notebook3->AppendPage( notebook4, sfg::Label::Create( "And Another Page" ) ); notebook3->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); notebook4->AppendPage( vertigo_box, sfg::Label::Create( "And The Last Page" ) ); notebook4->AppendPage( sfg::Label::Create( L"" ), sfg::Label::Create( "Dummy Page" ) ); m_wndmain->Add( notebook1 ); // Signals. btnaddbuttonh->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnAddButtonHClick, this ); btnaddbuttonv->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnAddButtonVClick, this ); m_titlebar_toggle->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnToggleTitlebarClick, this ); btnhidewindow->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnHideWindowClicked, this ); btntogglespace->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnToggleSpaceClick, this ); m_limit_check->GetSignal( sfg::ToggleButton::OnToggle ).Connect( &SampleApp::OnLimitCharsToggle, this ); btnloadstyle->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnLoadThemeClick, this ); m_scale->GetAdjustment()->GetSignal( sfg::Adjustment::OnChange ).Connect( &SampleApp::OnAdjustmentChange, this ); spinner_toggle->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnToggleSpinner, this ); mirror_image->GetSignal( sfg::Widget::OnLeftClick ).Connect( &SampleApp::OnMirrorImageClick, this ); spinbutton->SetValue( 20.f ); spinbutton->GetAdjustment()->SetMinorStep( .8f ); m_wndmain->SetPosition( sf::Vector2f( 100.f, 100.f ) ); // Another window sfg::Window::Ptr second_window( sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND | sfg::Window::RESIZE ) ); second_window->SetId( "second_window" ); second_window->SetTitle( "Resize this window to see ad-hoc wrapping." ); sfg::Box::Ptr box( sfg::Box::Create( sfg::Box::VERTICAL, 5.f ) ); sfg::Label::Ptr lipsum = sfg::Label::Create( "Nullam ut ante leo. Quisque consequat condimentum pulvinar. " "Duis a enim sapien, ut vestibulum est. Vestibulum commodo, orci non gravida. " "Aliquam sed pretium lacus. " "Nullam placerat mauris vel nulla sagittis pellentesque. " "Suspendisse in justo dui.\n" "Ut dolor massa, gravida eu facilisis convallis, convallis sed odio.\n" "Nunc placerat consequat vehicula." ); lipsum->SetRequisition( sf::Vector2f( 400.f, 0.f ) ); lipsum->SetLineWrap( true ); box->Pack( lipsum ); second_window->Add( box ); second_window->SetPosition( sf::Vector2f( 10.f, 10.f ) ); second_window->SetId( "second_window" ); m_desktop.Add( second_window ); sfg::Window::Ptr third_window( sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND | sfg::Window::RESIZE ) ); m_gl_canvas = sfg::Canvas::Create( true ); m_gl_canvas->SetRequisition( sf::Vector2f( 200.f, 150.f ) ); third_window->Add( m_gl_canvas ); third_window->SetId( "third_window" ); third_window->SetTitle( "Embedded OpenGL drawing" ); third_window->SetPosition( sf::Vector2f( 480.f, 20.f ) ); m_desktop.Add( third_window ); sf::Texture texture; texture.loadFromImage( sfgui_logo ); m_canvas_sprite.setTexture( texture ); sfg::Window::Ptr fourth_window( sfg::Window::Create( sfg::Window::TITLEBAR | sfg::Window::BACKGROUND | sfg::Window::RESIZE ) ); m_sfml_canvas = sfg::Canvas::Create(); m_sfml_canvas->SetRequisition( sf::Vector2f( static_cast<float>( texture.getSize().x ), static_cast<float>( texture.getSize().y ) ) ); fourth_window->Add( m_sfml_canvas ); fourth_window->SetId( "fourth_window" ); fourth_window->SetTitle( "Embedded SFML drawing" ); fourth_window->SetPosition( sf::Vector2f( 760.f, 20.f ) ); m_desktop.Add( fourth_window ); // Add window to desktop m_desktop.Add( m_wndmain ); // Play around with resource manager. sf::Font my_font; my_font.loadFromFile( "data/linden_hill.otf" ); m_desktop.GetEngine().GetResourceManager().AddFont( "custom_font", my_font, false ); // false -> do not manage! // Set properties. m_desktop.SetProperty( "Button#close:Normal", "Color", sf::Color::Yellow ); // #close is sufficient since there is only 1 widget with this id m_desktop.SetProperty( "#close", "FontName", "data/linden_hill.otf" ); m_desktop.SetProperty( "#close", "FontSize", 15.f ); // Multiple properties can be set at once to save calls. m_desktop.SetProperties( "Window#second_window > Box > Label {" " FontName: custom_font;" " FontSize: 18;" "}" ); m_fps_counter = 0; m_fps_clock.restart(); sf::Clock clock; sf::Clock frame_time_clock; sf::Int64 frame_times[5000]; std::size_t frame_times_index = 0; while( m_window.isOpen() ) { while( m_window.pollEvent( event ) ) { if( event.type == sf::Event::Closed ) { m_window.close(); } else if( event.type == sf::Event::Resized ) { m_desktop.UpdateViewRect( sf::FloatRect( 0.f, 0.f, static_cast<float>( event.size.width ), static_cast<float>( event.size.height ) ) ); } m_desktop.HandleEvent( event ); } m_window.draw( m_background_sprite ); sf::Uint64 microseconds = clock.getElapsedTime().asMicroseconds(); // Only update every 5ms if( microseconds > 5000 ) { m_desktop.Update( static_cast<float>( microseconds ) / 1000000.f ); clock.restart(); // Only refresh canvas contents every 5ms too m_gl_canvas->Bind(); m_gl_canvas->Clear( sf::Color( 0, 0, 0, 0 ), true ); RenderCustomGL(); m_gl_canvas->Display(); m_gl_canvas->Unbind(); m_sfml_canvas->Bind(); m_sfml_canvas->Clear( sf::Color( 0, 0, 0, 0 ) ); RenderCustomSFML(); m_sfml_canvas->Display(); m_sfml_canvas->Unbind(); m_window.setActive( true ); } m_sfgui.Display( m_window ); m_window.display(); sf::Int64 frame_time = frame_time_clock.getElapsedTime().asMicroseconds(); frame_time_clock.restart(); frame_times[ frame_times_index ] = frame_time; frame_times_index = ( frame_times_index + 1 ) % 5000; if( m_fps_clock.getElapsedTime().asMicroseconds() >= 1000000 ) { m_fps_clock.restart(); sf::Int64 total_time = 0; for( std::size_t index = 0; index < 5000; ++index ) { total_time += frame_times[index]; } std::stringstream sstr; sstr << "SFGUI test -- FPS: " << m_fps_counter << " -- Frame Time (microsecs): min: " << *std::min_element( frame_times, frame_times + 5000 ) << " max: " << *std::max_element( frame_times, frame_times + 5000 ) << " avg: " << static_cast<float>( total_time ) / 5000.f; m_window.setTitle( sstr.str() ); m_fps_counter = 0; } ++m_fps_counter; } glDeleteLists( m_custom_draw_display_list, 1 ); }
// Constructor InterfaceWorldEditor(Scene* s) :Interface() { tools.push_back({"Select","Resources\\gfx\\worldeditor\\tool_select.png"}); tools.push_back({ "Rotate", "Resources\\gfx\\worldeditor\\tool_rotate.png" }); tools.push_back({ "Scale", "Resources\\gfx\\worldeditor\\tool_scale.png" }); tools.push_back({ "Camera", "Resources\\gfx\\worldeditor\\tool_camera.png" }); // Import scene pointer scene = reinterpret_cast<SceneEditor*>(s); // Setup windows float propHeight = (scene->getGUIHeight() / 5) * 4; windowProperties = sfg::Window::Create(sfg::Window::Style::TITLEBAR | sfg::Window::Style::BACKGROUND); windowProperties->SetTitle("Properties"); windowProperties->SetPosition(sf::Vector2f(10.0f,10.0f)); windowProperties->SetRequisition(sf::Vector2f(300.0f,propHeight)); windowObjectBrowser = sfg::Window::Create(sfg::Window::Style::TITLEBAR | sfg::Window::Style::BACKGROUND); windowObjectBrowser->SetTitle("Object Browser"); windowObjectBrowser->SetPosition(sf::Vector2f(10.0f, propHeight + 10.0f + 5.0f)); windowObjectBrowser->SetRequisition(sf::Vector2f(scene->getGUIWidth() - 20.0f, scene->getGUIHeight() - propHeight - 20.0f - 10.0f)); windowLayer = sfg::Window::Create(sfg::Window::Style::TITLEBAR | sfg::Window::Style::BACKGROUND); windowLayer->SetTitle("Layers"); windowLayer->SetPosition(sf::Vector2f(350.0f,propHeight-90.0f)); windowLayer->SetRequisition(sf::Vector2f(400.0f,50.0f)); // Populate layer window boxLayer = sfg::Box::Create(sfg::Box::Orientation::HORIZONTAL, 5.0f); buttonLayerBackground = sfg::ToggleButton::Create(); //buttonLayerBackground->SetLabel("Background"); buttonLayerBackground->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerBackground, this)); buttonLayerTerrain = sfg::ToggleButton::Create(); //buttonLayerTerrain->SetLabel("Terrain"); buttonLayerTerrain->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerTerrain, this)); buttonLayerObject = sfg::ToggleButton::Create(); //buttonLayerObject->SetLabel("Object"); buttonLayerObject->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerObject, this)); buttonLayerForeground = sfg::ToggleButton::Create(); //buttonLayerForeground->SetLabel("Foreground"); buttonLayerForeground->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerForeground, this)); buttonLayerAudio = sfg::ToggleButton::Create(); //buttonLayerAudio->SetLabel("Audio"); buttonLayerAudio->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerAudio, this)); buttonLayerAll = sfg::ToggleButton::Create(); //buttonLayerAll->SetLabel("All"); buttonLayerAll->SetActive(true); buttonLayerAll->GetSignal(sfg::ToggleButton::OnLeftClick).Connect(std::bind(&InterfaceWorldEditor::onButtonLayerAll,this)); loadImageFor(buttonLayerBackground, "Resources\\gfx\\worldeditor\\layer_background.png"); loadImageFor(buttonLayerTerrain, "Resources\\gfx\\worldeditor\\layer_terrain.png"); loadImageFor(buttonLayerObject, "Resources\\gfx\\worldeditor\\layer_object.png"); loadImageFor(buttonLayerForeground, "Resources\\gfx\\worldeditor\\layer_foreground.png"); loadImageFor(buttonLayerAudio, "Resources\\gfx\\worldeditor\\layer_sound.png"); loadImageFor(buttonLayerAll, "Resources\\gfx\\worldeditor\\layer_all.png"); boxLayer->Pack(buttonLayerBackground); boxLayer->Pack(buttonLayerTerrain); boxLayer->Pack(buttonLayerObject); boxLayer->Pack(buttonLayerForeground); boxLayer->Pack(buttonLayerAudio); boxLayer->Pack(buttonLayerAll); windowLayer->Add(boxLayer); windowTool = sfg::Window::Create(sfg::Window::Style::TITLEBAR | sfg::Window::Style::BACKGROUND); windowTool->SetTitle("Tools"); windowTool->SetPosition(sf::Vector2f(scene->getGUIWidth()-100.0f,10.0f)); windowTool->SetRequisition(sf::Vector2f(80.0f,propHeight)); refreshPropertiesWindow(); refreshToolsWindow(); }