void CFileListManager::OnOpenForEdit( KeyValues *pParams ) { int nFileCount = 0; int nSelected = GetSelectedItemsCount(); const char **ppFileNames = ( const char** )_alloca( nSelected * sizeof( char* ) ); for ( int i = 0; i < nSelected; ++i ) { int itemId = GetSelectedItem( i ); DmFileId_t fileid = ( DmFileId_t )GetItemUserData( itemId ); const char *pFilename = g_pDataModel->GetFileName( fileid ); Assert( pFilename ); if ( !pFilename ) continue; ++nFileCount; ppFileNames[ i ] = pFilename; } bool bSuccess = p4->OpenFilesForEdit( nFileCount, ppFileNames ); if ( !bSuccess ) { vgui::MessageBox *pError = new vgui::MessageBox( "Perforce Error!", p4->GetLastError(), GetParent() ); pError->SetSmallCaption( true ); pError->DoModal(); } Refresh(); }
void CtrlDataList::updateEnableElements() { //On désactive tous les itères et windows for(auto it: _menuItemsEnableOneItem) it->Enable(false); for(auto it: _windowsEnableOneItem) it->Enable(false); for(auto it: _menuItemsEnableItems) it->Enable(false); for(auto it: _windowsEnableItems) it->Enable(false); switch(GetSelectedItemsCount()) { //Rien n'est sélectionner. case 0: break; //Un seul item est sélectionner. case 1: for(auto it: _menuItemsEnableOneItem) it->Enable(); for(auto it: _windowsEnableOneItem) it->Enable(); //Plusieurs items son sélectionner. default: for(auto it: _menuItemsEnableItems) it->Enable(); for(auto it: _windowsEnableItems) it->Enable(); break; } }
void CFileListManager::OnSaveFileAs( KeyValues *pParams ) { int nSelected = GetSelectedItemsCount(); Assert( nSelected == 1 ); if ( nSelected != 1 ) return; KeyValues *pContextKeyValues = new KeyValues( "OnSaveAs" ); pContextKeyValues->SetInt( "itemId", GetSelectedItem( 0 ) ); DmFileId_t fileid = ( DmFileId_t )GetItemUserData( GetSelectedItem( 0 ) ); const char *pFileFormat = g_pDataModel->GetFileFormat( fileid ); vgui::FileOpenDialog *pFileOpenDialog = new vgui::FileOpenDialog( this, "Save .dmx File As", false, pContextKeyValues ); // if this control is moved to vgui_controls, change the default format to "dmx", the generic dmx format pFileOpenDialog->AddFilter( "*.dmx", "Generic MovieObjects File (*.dmx)", false, "movieobjects" ); if ( V_strcmp( pFileFormat, "movieobjects" ) != 0 ) { char description[ 256 ]; V_snprintf( description, sizeof( description ), "%s (*.dmx)", g_pDataModel->GetFormatDescription( pFileFormat ) ); pFileOpenDialog->AddFilter( "*.dmx", description, true, pFileFormat ); } pFileOpenDialog->AddActionSignalTarget( this ); pFileOpenDialog->SetDeleteSelfOnClose( true ); pFileOpenDialog->DoModal( false ); }
void CFileListManager::OnSaveFiles( KeyValues *pParams ) { int nSelected = GetSelectedItemsCount(); for ( int i = 0; i < nSelected; ++i ) { int itemId = GetSelectedItem( i ); DmFileId_t fileid = ( DmFileId_t )GetItemUserData( itemId ); if ( !g_pDataModel->IsFileLoaded( fileid ) ) continue; const char *pFilename = g_pDataModel->GetFileName( fileid ); Assert( pFilename ); if ( !pFilename ) continue; CDmElement *pRoot = GetElement< CDmElement >( g_pDataModel->GetFileRoot( fileid ) ); Assert( pRoot ); if ( !pRoot ) continue; const char *pFileFormat = g_pDataModel->GetFileFormat( fileid ); const char *pEncoding = g_pDataModel->GetDefaultEncoding( pFileFormat ); g_pDataModel->SaveToFile( pFilename, NULL, pEncoding, pFileFormat, pRoot ); } Refresh(); }
void CFileListManager::OnUnloadFiles( KeyValues *pParams ) { CNotifyScopeGuard notify( "CFileListManager::OnUnloadFiles", NOTIFY_SOURCE_FILE_LIST_MANAGER, NOTIFY_SETDIRTYFLAG ); int nSelected = GetSelectedItemsCount(); for ( int i = 0; i < nSelected; ++i ) { int itemId = GetSelectedItem( i ); DmFileId_t fileid = ( DmFileId_t )GetItemUserData( itemId ); if ( g_pDataModel->IsFileLoaded( fileid ) ) { SetLoaded( fileid, false ); } } Refresh(); }
void CFileListManager::OnOpenContextMenu( KeyValues *pParams ) { if ( m_hContextMenu.Get() ) { delete m_hContextMenu.Get(); m_hContextMenu = NULL; } m_hContextMenu = new vgui::Menu( this, "ContextMenu" ); int itemID = pParams->GetInt( "itemID", -1 ); if ( itemID < 0 ) { AddMenuItemHelper( m_hContextMenu, "Open File...", "open", this, true ); // Is this how we should load other files??? } else { bool bP4Connected = p4->IsConnectedToServer(); int nSelected = GetSelectedItemsCount(); int nLoaded = 0; int nChanged = 0; int nOnDisk = 0; int nInPerforce = 0; int nOpenForEdit = 0; for ( int i = 0; i < nSelected; ++i ) { int itemId = GetSelectedItem( i ); DmFileId_t fileid = ( DmFileId_t )GetItemUserData( itemId ); if ( g_pDataModel->IsFileLoaded( fileid ) ) { ++nLoaded; ++nChanged; // TODO - find out for real } const char *pFilename = g_pDataModel->GetFileName( fileid ); if ( g_pFullFileSystem->FileExists( pFilename ) ) { ++nOnDisk; } if ( bP4Connected ) { if ( p4->IsFileInPerforce( pFilename ) ) { ++nInPerforce; if ( p4->GetFileState( pFilename ) != P4FILE_UNOPENED ) { ++nOpenForEdit; } } } } AddMenuItemHelper( m_hContextMenu, "Load", "load", this, nLoaded < nSelected && nOnDisk > 0 ); AddMenuItemHelper( m_hContextMenu, "Unload", "unload", this, nLoaded > 0 ); AddMenuItemHelper( m_hContextMenu, "Save", "save", this, nChanged > 0 && nOnDisk == nSelected ); AddMenuItemHelper( m_hContextMenu, "Save As...", "saveas", this, nLoaded == 1 && nSelected == 1 ); AddMenuItemHelper( m_hContextMenu, "Add To Perforce", "p4add", this, nInPerforce < nSelected && nOnDisk > 0 ); AddMenuItemHelper( m_hContextMenu, "Open For Edit", "p4edit", this, nOpenForEdit < nSelected && nOnDisk > 0 ); } vgui::Menu::PlaceContextMenu( this, m_hContextMenu.Get() ); }
int main() { sfg::SFGUI sfgui; sf::RenderWindow window(sf::VideoMode(640, 480), "ListBox Example"); window.setVerticalSyncEnabled(true); window.setFramerateLimit(30); sfg::Desktop desktop; auto sfg_window = sfg::Window::Create(); sfg_window->SetTitle( "ListBoxExample" ); auto box_outer = sfg::Box::Create( sfg::Box::Orientation::HORIZONTAL, 15.0f ); auto box_inner1 = sfg::Box::Create( sfg::Box::Orientation::VERTICAL, 5.0f ); auto box_inner2 = sfg::Box::Create( sfg::Box::Orientation::VERTICAL, 5.0f ); auto label1 = sfg::Label::Create("I'm single-select list."); auto label2 = sfg::Label::Create("I'm multi-select list."); auto input1 = sfg::Entry::Create(""); auto input2 = sfg::Entry::Create(""); auto list1 = sfg::ListBox::Create(); list1->AppendItem( "Item1" ); list1->AppendItem( "Item2" ); list1->AppendItem( "Item3" ); list1->GetSignal( sfg::ListBox::OnSelect ).Connect( std::bind( [list1, input1](){ if(list1->GetSelectedItemsCount()) input1->SetText(list1->GetSelectedItemText()); else input1->SetText(""); } ) ); auto list2 = sfg::ListBox::Create(); list2->AppendItem( "Item1" ); list2->AppendItem( "Item2" ); list2->AppendItem( "Item3" ); list2->multiselect = true; list2->GetSignal( sfg::ListBox::OnSelect ).Connect( std::bind( [list2, input2](){ std::string str = ""; for(unsigned i=0; i<list2->GetSelectedItemsCount(); i++) { str += list2->GetSelectedItemText(i); str += ' '; } input2->SetText(str); } ) ); box_outer->Pack(box_inner1); box_outer->Pack(box_inner2); box_inner1->Pack(label1); box_inner1->Pack(list1); box_inner1->Pack(input1); box_inner2->Pack(label2); box_inner2->Pack(list2); box_inner2->Pack(input2); sfg_window->Add( box_outer ); desktop.Add( sfg_window ); sfg_window->SetPosition(sf::Vector2f(window.getSize().x/2-sfg_window->GetRequisition().x/2, window.getSize().y/2-sfg_window->GetRequisition().y/2)); sf::Event event; sf::Clock clock; window.resetGLStates(); while (window.isOpen()) { while (window.pollEvent(event)) { desktop.HandleEvent( event ); switch(event.type) { case sf::Event::Closed: window.close(); break; } } desktop.Update( clock.restart().asSeconds() ); window.clear(); sfgui.Display( window ); window.display(); } return 0; }