Properties: implement ellipsization for name column

This commit is contained in:
Jon Evans 2022-11-25 12:37:18 -05:00
parent 396db7794d
commit 5061f0556f
6 changed files with 95 additions and 1 deletions

View File

@ -459,6 +459,7 @@ set( COMMON_SRCS
project/project_local_settings.cpp project/project_local_settings.cpp
properties/eda_angle_variant.cpp properties/eda_angle_variant.cpp
properties/pg_cell_renderer.cpp
properties/pg_editors.cpp properties/pg_editors.cpp
properties/pg_properties.cpp properties/pg_properties.cpp
properties/property_mgr.cpp properties/property_mgr.cpp

View File

@ -0,0 +1,53 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <wx/control.h>
#include <wx/propgrid/propgrid.h>
#include <properties/pg_cell_renderer.h>
PG_CELL_RENDERER::PG_CELL_RENDERER() :
wxPGDefaultRenderer()
{}
bool PG_CELL_RENDERER::Render( wxDC &aDC, const wxRect &aRect, const wxPropertyGrid *aGrid,
wxPGProperty *aProperty, int aColumn, int aItem, int aFlags ) const
{
// Default behavior for value column
if( aColumn > 0 )
return wxPGDefaultRenderer::Render( aDC, aRect, aGrid, aProperty, aColumn, aItem, aFlags );
wxPGCell cell = aGrid->GetUnspecifiedValueAppearance();
wxString text;
int preDrawFlags = aFlags;
aProperty->GetDisplayInfo( aColumn, aItem, aFlags, &text, &cell );
text = wxControl::Ellipsize( text, aDC, wxELLIPSIZE_MIDDLE, aRect.GetWidth() );
int imageWidth = PreDrawCell( aDC, aRect, aGrid, cell, preDrawFlags );
int imageOffset = aProperty->GetImageOffset( imageWidth );
DrawEditorValue( aDC, aRect, imageOffset, text, aProperty, nullptr );
PostDrawCell( aDC, aGrid, cell, preDrawFlags );
return !text.IsEmpty();
}

View File

@ -23,6 +23,7 @@
#include <eda_base_frame.h> #include <eda_base_frame.h>
#include <eda_item.h> #include <eda_item.h>
#include <import_export.h> #include <import_export.h>
#include <properties/pg_cell_renderer.h>
#include <algorithm> #include <algorithm>
#include <set> #include <set>
@ -45,6 +46,9 @@ PROPERTIES_PANEL::PROPERTIES_PANEL( wxWindow* aParent, EDA_BASE_FRAME* aFrame )
if( !wxPGGlobalVars ) if( !wxPGGlobalVars )
wxPGInitResourceModule(); wxPGInitResourceModule();
delete wxPGGlobalVars->m_defaultRenderer;
wxPGGlobalVars->m_defaultRenderer = new PG_CELL_RENDERER();
m_caption = new wxStaticText( this, wxID_ANY, _( "No objects selected" ), wxDefaultPosition, m_caption = new wxStaticText( this, wxID_ANY, _( "No objects selected" ), wxDefaultPosition,
wxDefaultSize, 0 ); wxDefaultSize, 0 );
mainSizer->Add( m_caption, 0, wxALL | wxEXPAND, 5 ); mainSizer->Add( m_caption, 0, wxALL | wxEXPAND, 5 );

View File

@ -110,7 +110,7 @@ public:
void SetShape( SHAPE_T aShape ) { m_shape = aShape; } void SetShape( SHAPE_T aShape ) { m_shape = aShape; }
SHAPE_T GetShape() const { return m_shape; } SHAPE_T GetShape() const { return m_shape; }
wxString GetFriendlyName() const override; wxString GetFriendlyName() const;
/** /**
* Return the starting point of the graphic. * Return the starting point of the graphic.

View File

@ -0,0 +1,34 @@
/*
* This program source code file is part of KiCad, a free EDA CAD application.
*
* Copyright (C) 2022 KiCad Developers, see AUTHORS.txt for contributors.
*
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <wx/propgrid/property.h>
/**
* Enhanced renderer to work around some limitations in wxWidgets 3.0 capabilities
*/
class PG_CELL_RENDERER : public wxPGDefaultRenderer
{
public:
PG_CELL_RENDERER();
virtual ~PG_CELL_RENDERER() = default;
bool Render( wxDC &aDC, const wxRect &aRect, const wxPropertyGrid *aGrid,
wxPGProperty *aProperty, int aColumn, int aItem, int aFlags ) const override;
};

View File

@ -57,6 +57,8 @@ public:
return wxT( "PCB_SHAPE" ); return wxT( "PCB_SHAPE" );
} }
wxString GetFriendlyName() const override { return EDA_SHAPE::GetFriendlyName(); }
bool IsType( const std::vector<KICAD_T>& aScanTypes ) const override; bool IsType( const std::vector<KICAD_T>& aScanTypes ) const override;
void SetPosition( const VECTOR2I& aPos ) override { setPosition( aPos ); } void SetPosition( const VECTOR2I& aPos ) override { setPosition( aPos ); }