* statusbar: show selected brushes/patches/entities counts, if anything is selected; total, if not
This commit is contained in:
parent
24c02facb2
commit
c0b6f2169a
|
|
@ -100,6 +100,7 @@ virtual EManipulatorMode ManipulatorMode() const = 0;
|
||||||
virtual SelectionChangeCallback getObserver( EMode mode ) = 0;
|
virtual SelectionChangeCallback getObserver( EMode mode ) = 0;
|
||||||
virtual std::size_t countSelected() const = 0;
|
virtual std::size_t countSelected() const = 0;
|
||||||
virtual std::size_t countSelectedComponents() const = 0;
|
virtual std::size_t countSelectedComponents() const = 0;
|
||||||
|
virtual void countSelectedStuff( std::size_t& brushes, std::size_t& patches, std::size_t& entities ) const = 0;
|
||||||
virtual void onSelectedChanged( scene::Instance& instance, const Selectable& selectable ) = 0;
|
virtual void onSelectedChanged( scene::Instance& instance, const Selectable& selectable ) = 0;
|
||||||
virtual void onComponentSelection( scene::Instance& instance, const Selectable& selectable ) = 0;
|
virtual void onComponentSelection( scene::Instance& instance, const Selectable& selectable ) = 0;
|
||||||
virtual scene::Instance& ultimateSelected() const = 0;
|
virtual scene::Instance& ultimateSelected() const = 0;
|
||||||
|
|
|
||||||
|
|
@ -3316,6 +3316,10 @@ void Sys_Status( const char* status ){
|
||||||
g_pParentWnd->SetStatusText( c_status_command, status );
|
g_pParentWnd->SetStatusText( c_status_command, status );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void brushCountChanged( const Selectable& selectable ){
|
||||||
|
QE_brushCountChanged();
|
||||||
|
}
|
||||||
|
|
||||||
//int getRotateIncrement(){
|
//int getRotateIncrement(){
|
||||||
// return static_cast<int>( g_si_globals.rotate );
|
// return static_cast<int>( g_si_globals.rotate );
|
||||||
//}
|
//}
|
||||||
|
|
@ -3645,6 +3649,7 @@ void MainFrame_Construct(){
|
||||||
g_patchCount.setCountChangedCallback( FreeCaller<QE_brushCountChanged>() );
|
g_patchCount.setCountChangedCallback( FreeCaller<QE_brushCountChanged>() );
|
||||||
g_entityCount.setCountChangedCallback( FreeCaller<QE_brushCountChanged>() );
|
g_entityCount.setCountChangedCallback( FreeCaller<QE_brushCountChanged>() );
|
||||||
GlobalEntityCreator().setCounter( &g_entityCount );
|
GlobalEntityCreator().setCounter( &g_entityCount );
|
||||||
|
GlobalSelectionSystem().addSelectionChangeCallback( FreeCaller1<const Selectable&, brushCountChanged>() );
|
||||||
|
|
||||||
GLWidget_sharedContextCreated = GlobalGL_sharedContextCreated;
|
GLWidget_sharedContextCreated = GlobalGL_sharedContextCreated;
|
||||||
GLWidget_sharedContextDestroyed = GlobalGL_sharedContextDestroyed;
|
GLWidget_sharedContextDestroyed = GlobalGL_sharedContextDestroyed;
|
||||||
|
|
|
||||||
|
|
@ -123,12 +123,23 @@ SimpleCounter g_brushCount;
|
||||||
SimpleCounter g_patchCount;
|
SimpleCounter g_patchCount;
|
||||||
SimpleCounter g_entityCount;
|
SimpleCounter g_entityCount;
|
||||||
|
|
||||||
void QE_brushCountChanged(){
|
void QE_brushCountChange(){
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
sprintf( buffer, "Brushes: %u Patches: %u Entities: %u", Unsigned( g_brushCount.get() ), Unsigned( g_patchCount.get() ), Unsigned( g_entityCount.get() ) );
|
if( GlobalSelectionSystem().countSelected() == 0 )
|
||||||
|
sprintf( buffer, "Brushes: %u Patches: %u Entities: %u", Unsigned( g_brushCount.get() ), Unsigned( g_patchCount.get() ), Unsigned( g_entityCount.get() ) );
|
||||||
|
else{
|
||||||
|
std::size_t brushes, patches, entities;
|
||||||
|
GlobalSelectionSystem().countSelectedStuff( brushes, patches, entities );
|
||||||
|
sprintf( buffer, "Brushes: %u Patches: %u Entities: %u", Unsigned( brushes ), Unsigned( patches ), Unsigned( entities ) );
|
||||||
|
}
|
||||||
g_pParentWnd->SetStatusText( c_status_brushcount, buffer );
|
g_pParentWnd->SetStatusText( c_status_brushcount, buffer );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IdleDraw g_idle_scene_counts_update = IdleDraw( FreeCaller<QE_brushCountChange>() );
|
||||||
|
void QE_brushCountChanged(){
|
||||||
|
g_idle_scene_counts_update.queueDraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool ConfirmModified( const char* title ){
|
bool ConfirmModified( const char* title ){
|
||||||
if ( !Map_Modified( g_map ) ) {
|
if ( !Map_Modified( g_map ) ) {
|
||||||
|
|
|
||||||
|
|
@ -2996,6 +2996,37 @@ std::size_t m_count;
|
||||||
SelectionChangeCallback m_onchanged;
|
SelectionChangeCallback m_onchanged;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class SelectedStuffCounter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::size_t m_brushcount;
|
||||||
|
std::size_t m_patchcount;
|
||||||
|
std::size_t m_entitycount;
|
||||||
|
SelectedStuffCounter() : m_brushcount( 0 ), m_patchcount( 0 ), m_entitycount( 0 ){
|
||||||
|
}
|
||||||
|
void increment( scene::Node& node ) {
|
||||||
|
if( Node_isBrush( node ) )
|
||||||
|
++m_brushcount;
|
||||||
|
else if( Node_isPatch( node ) )
|
||||||
|
++m_patchcount;
|
||||||
|
else if( Node_isEntity( node ) )
|
||||||
|
++m_entitycount;
|
||||||
|
}
|
||||||
|
void decrement( scene::Node& node ) {
|
||||||
|
if( Node_isBrush( node ) )
|
||||||
|
--m_brushcount;
|
||||||
|
else if( Node_isPatch( node ) )
|
||||||
|
--m_patchcount;
|
||||||
|
else if( Node_isEntity( node ) )
|
||||||
|
--m_entitycount;
|
||||||
|
}
|
||||||
|
void get( std::size_t& brushes, std::size_t& patches, std::size_t& entities ) const {
|
||||||
|
brushes = m_brushcount;
|
||||||
|
patches = m_patchcount;
|
||||||
|
entities = m_entitycount;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
inline void ConstructSelectionTest( View& view, const rect_t selection_box ){
|
inline void ConstructSelectionTest( View& view, const rect_t selection_box ){
|
||||||
view.EnableScissor( selection_box.min[0], selection_box.max[0], selection_box.min[1], selection_box.max[1] );
|
view.EnableScissor( selection_box.min[0], selection_box.max[0], selection_box.min[1], selection_box.max[1] );
|
||||||
}
|
}
|
||||||
|
|
@ -4156,6 +4187,7 @@ EComponentMode m_componentmode;
|
||||||
|
|
||||||
SelectionCounter m_count_primitive;
|
SelectionCounter m_count_primitive;
|
||||||
SelectionCounter m_count_component;
|
SelectionCounter m_count_component;
|
||||||
|
SelectedStuffCounter m_count_stuff;
|
||||||
|
|
||||||
TranslateManipulator m_translate_manipulator;
|
TranslateManipulator m_translate_manipulator;
|
||||||
RotateManipulator m_rotate_manipulator;
|
RotateManipulator m_rotate_manipulator;
|
||||||
|
|
@ -4286,13 +4318,18 @@ std::size_t countSelected() const {
|
||||||
std::size_t countSelectedComponents() const {
|
std::size_t countSelectedComponents() const {
|
||||||
return m_count_component.size();
|
return m_count_component.size();
|
||||||
}
|
}
|
||||||
|
void countSelectedStuff( std::size_t& brushes, std::size_t& patches, std::size_t& entities ) const {
|
||||||
|
m_count_stuff.get( brushes, patches, entities );
|
||||||
|
}
|
||||||
void onSelectedChanged( scene::Instance& instance, const Selectable& selectable ){
|
void onSelectedChanged( scene::Instance& instance, const Selectable& selectable ){
|
||||||
if ( selectable.isSelected() ) {
|
if ( selectable.isSelected() ) {
|
||||||
m_selection.append( instance );
|
m_selection.append( instance );
|
||||||
|
m_count_stuff.increment( instance.path().top() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_selection.erase( instance );
|
m_selection.erase( instance );
|
||||||
|
m_count_stuff.decrement( instance.path().top() );
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT_MESSAGE( m_selection.size() == m_count_primitive.size(), "selection-tracking error" );
|
ASSERT_MESSAGE( m_selection.size() == m_count_primitive.size(), "selection-tracking error" );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user