A few $Id$ references remained after commit
3f66f6a5b3 or appeared in newly added files.
Remove the lines containing svn keywords except when it concerns
third-party files. In that case keep the line as-is or collapse it to the
keyword if it had been expanded to contain wx commit information (only
occurs with src/zlib/ChangeLog).
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/osx/private/addremovectrl.h
 | 
						|
// Purpose:     OS X specific wxAddRemoveImpl implementation
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2015-02-05
 | 
						|
// Copyright:   (c) 2015 Vadim Zeitlin <vadim@wxwidgets.org>
 | 
						|
// Licence:     wxWindows licence
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_OSX_PRIVATE_ADDREMOVECTRL_H_
 | 
						|
#define _WX_OSX_PRIVATE_ADDREMOVECTRL_H_
 | 
						|
 | 
						|
#include "wx/artprov.h"
 | 
						|
#include "wx/bmpbuttn.h"
 | 
						|
#include "wx/panel.h"
 | 
						|
 | 
						|
#include "wx/osx/private.h"
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// wxAddRemoveImpl itself
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
class wxAddRemoveImpl : public wxAddRemoveImplWithButtons
 | 
						|
{
 | 
						|
public:
 | 
						|
    wxAddRemoveImpl(wxAddRemoveAdaptor* adaptor,
 | 
						|
                    wxAddRemoveCtrl* parent,
 | 
						|
                    wxWindow* ctrlItems)
 | 
						|
        : wxAddRemoveImplWithButtons(adaptor, parent, ctrlItems),
 | 
						|
          m_ctrlItems(ctrlItems)
 | 
						|
    {
 | 
						|
        // This size is hard coded for now as this is what the system dialogs
 | 
						|
        // themselves (e.g. the buttons under the lists in the "Users" or
 | 
						|
        // "Network" panes of the "System Preferences") use under OS X 10.8.
 | 
						|
        const wxSize sizeBtn(25, 23);
 | 
						|
 | 
						|
        m_btnAdd = new wxBitmapButton(parent, wxID_ADD,
 | 
						|
                                      wxArtProvider::GetBitmap("NSAddTemplate"),
 | 
						|
                                      wxDefaultPosition,
 | 
						|
                                      sizeBtn,
 | 
						|
                                      wxBORDER_SIMPLE);
 | 
						|
 | 
						|
        m_btnRemove = new wxBitmapButton(parent, wxID_REMOVE,
 | 
						|
                                      wxArtProvider::GetBitmap("NSRemoveTemplate"),
 | 
						|
                                      wxDefaultPosition,
 | 
						|
                                      sizeBtn,
 | 
						|
                                      wxBORDER_SIMPLE);
 | 
						|
 | 
						|
        // Under OS X the space to the right of the buttons is actually
 | 
						|
        // occupied by an inactive gradient button, so create one.
 | 
						|
        m_btnPlaceholder = new wxButton(parent, wxID_ANY, "",
 | 
						|
                                        wxDefaultPosition,
 | 
						|
                                        sizeBtn,
 | 
						|
                                        wxBORDER_SIMPLE);
 | 
						|
        m_btnPlaceholder->Disable();
 | 
						|
 | 
						|
 | 
						|
        // We need to lay out our windows manually under OS X as it is the only
 | 
						|
        // way to achieve the required, for the correct look, overlap between
 | 
						|
        // their borders -- sizers would never allow this.
 | 
						|
        parent->Bind(wxEVT_SIZE, &wxAddRemoveImpl::OnSize, this);
 | 
						|
 | 
						|
        // We also have to ensure that the window with the items doesn't have
 | 
						|
        // any border as it wouldn't look correctly if it did.
 | 
						|
        long style = ctrlItems->GetWindowStyle();
 | 
						|
        style &= ~wxBORDER_MASK;
 | 
						|
        style |= wxBORDER_SIMPLE;
 | 
						|
        ctrlItems->SetWindowStyle(style);
 | 
						|
 | 
						|
 | 
						|
        SetUpEvents();
 | 
						|
    }
 | 
						|
 | 
						|
    // As we don't use sizers, we also need to compute our best size ourselves.
 | 
						|
    virtual wxSize GetBestClientSize() const wxOVERRIDE
 | 
						|
    {
 | 
						|
        wxSize size = m_ctrlItems->GetBestSize();
 | 
						|
 | 
						|
        const wxSize sizeBtn = m_btnAdd->GetSize();
 | 
						|
 | 
						|
        size.y += sizeBtn.y;
 | 
						|
        size.IncTo(wxSize(3*sizeBtn.x, -1));
 | 
						|
 | 
						|
        return size;
 | 
						|
    }
 | 
						|
 | 
						|
private:
 | 
						|
    void OnSize(wxSizeEvent& event)
 | 
						|
    {
 | 
						|
        const wxSize size = event.GetSize();
 | 
						|
 | 
						|
        const wxSize sizeBtn = m_btnAdd->GetSize();
 | 
						|
 | 
						|
        const int yBtn = size.y - sizeBtn.y;
 | 
						|
 | 
						|
        // There is a vertical overlap which hides the items control bottom
 | 
						|
        // border.
 | 
						|
        m_ctrlItems->SetSize(0, 0, size.x, yBtn + 2);
 | 
						|
 | 
						|
        // And there is also a horizontal 1px overlap between the buttons
 | 
						|
        // themselves, so subtract 1 from the next button position.
 | 
						|
        int x = 0;
 | 
						|
        m_btnAdd->Move(x, yBtn);
 | 
						|
        x += sizeBtn.x - 1;
 | 
						|
 | 
						|
        m_btnRemove->Move(x, yBtn);
 | 
						|
        x += sizeBtn.x - 1;
 | 
						|
 | 
						|
        // The last one needs to be resized to take up all the remaining space.
 | 
						|
        m_btnPlaceholder->SetSize(x, yBtn, size.x - x, sizeBtn.y);
 | 
						|
    }
 | 
						|
 | 
						|
    wxWindow* m_ctrlItems;
 | 
						|
    wxButton* /* const */ m_btnPlaceholder;
 | 
						|
};
 | 
						|
 | 
						|
#endif // _WX_OSX_PRIVATE_ADDREMOVECTRL_H_
 |