コード例 #1
0
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();
}
コード例 #2
0
ファイル: ctrlDataList.cpp プロジェクト: antoine163/Talv
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;
	}
}
コード例 #3
0
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 );
}
コード例 #4
0
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();
}
コード例 #5
0
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();
}
コード例 #6
0
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() );
}
コード例 #7
0
ファイル: ListBox.cpp プロジェクト: Zax37/SFGUI
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;
}