Add status popup for meander placer.

This commit is contained in:
Jeff Young 2023-10-09 21:55:07 +01:00
parent 1afa6ddbd5
commit 642938455e
3 changed files with 63 additions and 11 deletions

View File

@ -31,8 +31,11 @@
#include <wx/debug.h>
#include <geometry/shape_circle.h>
#include <kiplatform/ui.h>
#include <dialogs/dialog_unit_entry.h>
#include <collectors.h>
#include <board_design_settings.h>
#include <drc/drc_engine.h>
#include <pcb_track.h>
#include <pcb_shape.h>
#include <pcb_group.h>
@ -52,6 +55,7 @@
#include <router/pns_segment.h>
#include <router/pns_arc.h>
#include <router/pns_topology.h>
#include <router/pns_tune_status_popup.h>
#include <dialogs/dialog_meander_properties.h>
@ -207,6 +211,38 @@ public:
bool baselineValid() { return m_baseLine && m_baseLine->PointCount() > 1; }
static PCB_GENERATOR_MEANDERS* CreateNew( PCB_BASE_EDIT_FRAME* aFrame, BOARD_ITEM* aStartItem )
{
BOARD* board = aStartItem->GetBoard();
PCB_LAYER_ID layer = aStartItem->GetLayer();
PCB_GENERATOR_MEANDERS* meander = new PCB_GENERATOR_MEANDERS( board, layer );
// TODO set mode to diff-pair if we find a matching net for aSourceItem
std::shared_ptr<DRC_ENGINE>& drcEngine = board->GetDesignSettings().m_DRCEngine;
DRC_CONSTRAINT constraint;
constraint = drcEngine->EvalRules( LENGTH_CONSTRAINT, aStartItem, nullptr,
ToLAYER_ID( layer ) );
if( constraint.IsNull() )
{
WX_UNIT_ENTRY_DIALOG dlg( aFrame, _( "Place Meander" ), _( "Target length:" ),
100 * PCB_IU_PER_MM );
if( dlg.ShowModal() != wxID_OK )
return nullptr;
meander->m_targetLength = dlg.GetValue();
}
else
{
meander->m_targetLength = constraint.GetValue().Opt();
}
return meander;
}
void EditStart( GENERATOR_TOOL* aTool, BOARD* aBoard, PCB_BASE_EDIT_FRAME* aFrame,
BOARD_COMMIT* aCommit ) override
{
@ -1083,8 +1119,7 @@ int DRAWING_TOOL::PlaceMeander( const TOOL_EVENT& aEvent )
generatorTool->HighlightNet( nullptr );
m_frame->SetActiveLayer( m_pickerItem->GetLayer() );
m_meander = new PCB_GENERATOR_MEANDERS( m_board, m_pickerItem->GetLayer() );
m_meander = PCB_GENERATOR_MEANDERS::CreateNew( m_frame, m_pickerItem );
int dummyDist;
int dummyClearance = std::numeric_limits<int>::max() / 2;
@ -1153,6 +1188,12 @@ int DRAWING_TOOL::PlaceMeander( const TOOL_EVENT& aEvent )
{
m_meander->EditStart( generatorTool, m_board, m_frame, nullptr );
m_meander->Update( generatorTool, m_board, m_frame, nullptr );
m_statusPopup->Popup();
canvas()->SetStatusPopup( m_statusPopup.get() );
m_statusPopup->UpdateStatus( generatorTool->Router() );
m_statusPopup->Move( KIPLATFORM::UI::GetMousePosition() + wxPoint( 20, 20 ) );
}
}
} );
@ -1176,6 +1217,9 @@ int DRAWING_TOOL::PlaceMeander( const TOOL_EVENT& aEvent )
{
GENERATOR_TOOL* generatorTool = m_toolMgr->GetTool<GENERATOR_TOOL>();
canvas()->SetStatusPopup( nullptr );
m_statusPopup->Hide();
generatorTool->HighlightNet( nullptr );
// Ensure the cursor gets changed & updated

View File

@ -40,6 +40,7 @@
#include <preview_items/two_point_geom_manager.h>
#include <ratsnest/ratsnest_data.h>
#include <router/router_tool.h>
#include <router/pns_tune_status_popup.h>
#include <tool/tool_manager.h>
#include <tools/pcb_actions.h>
#include <tools/pcb_grid_helper.h>
@ -163,15 +164,17 @@ protected:
DRAWING_TOOL::DRAWING_TOOL() :
PCB_TOOL_BASE( "pcbnew.InteractiveDrawing" ),
m_view( nullptr ),
m_controls( nullptr ),
m_board( nullptr ),
m_frame( nullptr ),
m_mode( MODE::NONE ),
m_inDrawingTool( false ),
m_layer( UNDEFINED_LAYER ),
m_stroke( 1, PLOT_DASH_TYPE::DEFAULT, COLOR4D::UNSPECIFIED )
PCB_TOOL_BASE( "pcbnew.InteractiveDrawing" ),
m_view( nullptr ),
m_controls( nullptr ),
m_board( nullptr ),
m_frame( nullptr ),
m_mode( MODE::NONE ),
m_inDrawingTool( false ),
m_layer( UNDEFINED_LAYER ),
m_stroke( 1, PLOT_DASH_TYPE::DEFAULT, COLOR4D::UNSPECIFIED ),
m_pickerItem( nullptr ),
m_meander( nullptr )
{
}
@ -287,6 +290,8 @@ void DRAWING_TOOL::Reset( RESET_REASON aReason )
m_textAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT;
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
m_statusPopup = std::make_unique<PNS_TUNE_STATUS_POPUP>( m_frame );
UpdateStatusBar();
}

View File

@ -44,6 +44,7 @@ class PCB_BASE_EDIT_FRAME;
class PCB_SHAPE;
class POLYGON_GEOM_MANAGER;
class PCB_GENERATOR_MEANDERS;
class PNS_TUNE_STATUS_POPUP;
/**
@ -355,6 +356,8 @@ private:
BOARD_CONNECTED_ITEM* m_pickerItem;
PCB_GENERATOR_MEANDERS* m_meander;
std::unique_ptr<PNS_TUNE_STATUS_POPUP> m_statusPopup;
static const unsigned int WIDTH_STEP; // Amount of width change for one -/+ key press
static const unsigned int COORDS_PADDING; // Padding from coordinates limits for this tool