build a customgui for LONG

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/09/2004 at 07:20, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   8.207 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
I want to make a customgui for LONG values, kind of progress bar I can just set by the LONG value. I sucessfully designed a customgui together with a custom data type before, but here I have problems.
First of all: Is it possible to make a customgui without custom data type? The data would only be a LONG value, so it would be nice to use LONG.
Take a look at this code ( just displaying a number for testing, only the cpp part ). My problem: iCustomGui::SetData is never called.
 
class grProgressBarGui : public iCustomGui
grProgressBarGui::grProgressBarGui( const BaseContainer &settings, CUSTOMGUIPLUGIN *plugin ) :
        iCustomGui( settings, plugin ) {
 
}
LONG grProgressBarGui::GetCustomGuiWidth( ){
 return 100;
}
LONG grProgressBarGui::GetCustomGuiHeight( ) {
 return 100;
}
void grProgressBarGui::CustomGuiRedraw( ) {

}
Bool grProgressBarGui::SetDefaultForResEdit( ) {
 return TRUE;
}
Bool grProgressBarGui::SetData( const TriState<GeData>& tristate ) {
 m_progress = tristate.GetValue().GetLong();
 return InitValues();
}
void grProgressBarGui::LayoutModeChanged( ) {
}
   
Bool grProgressBarGui::SupportLayoutSwitch( ) {
 return TRUE;
}
Bool grProgressBarGui::CreateLayout( )
{
 AddEditNumber( 25000, 0 );
 
 return TRUE;
}
Bool grProgressBarGui::Command( LONG id, const BaseContainer &msg )
{
 
 return TRUE;
}
Bool grProgressBarGui::InitValues( void ) {

SetLong( 25000, m_progress );
 return TRUE;
}
TriState<GeData> grProgressBarGui::GetData( ) {
 return GeData( m_progress );
}
 
class grProgressBarDialog : public CustomGuiData
#include "grProgressBarDialog.h"
#include "grProgressBarGui.h"
#define D_symbol "PROGRESSBAR"
static LONG restypetable[] = { DA_LONG };
grProgressBarDialog::grProgressBarDialog( ) {
 m_properties.type = CUSTOMTYPE_END;
 m_properties.id = 0;
 m_properties.ident = NULL;
}
grProgressBarDialog::~grProgressBarDialog( ) {

}
LONG grProgressBarDialog::GetId( ) {
 return 1000009;
}
CDialog* grProgressBarDialog::Alloc( const BaseContainer& settings ) {

grProgressBarGui* dlg = gNew grProgressBarGui( settings, GetPlugin() );
   
 if ( !dlg ) return NULL;
 
    CDialog *cdlg = dlg->Get();
    if ( !cdlg ) return NULL;
   
    return cdlg;
 
}
void grProgressBarDialog::Free( CDialog* dlg, void* userdata ) {
 if ( !dlg || !userdata ) return;
    grProgressBarGui* sub = static_cast<grProgressBarGui*>( userdata );
    gDelete( sub );
}
CHAR* grProgressBarDialog::GetResourceSym() {
 return D_symbol;
}
CustomProperty* grProgressBarDialog::GetProperties( ) {
 return &m_properties;
}
LONG grProgressBarDialog::GetResourceDataType( LONG*& table ) {
 table = restypetable;
 return sizeof( restypetable ) / sizeof( LONG );
}

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/09/2004 at 07:22, xxxxxxxx wrote:

ah, and I include it in my dialog by
PROGRESSBAR IDC_PROGRESS_WIZARD { }
and call
SetLong( IDC_PROGRESS_WIZARD, 50 );
to set the value...but this call never reaches SetData

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 21/09/2004 at 12:41, xxxxxxxx wrote:

Most of your code looks right. I think the problem is that the dialog cannot use SetLong() with custom gui elements, only with built-in edit boxes and sliders. In a description you would be able to use your gui with a long. A workaround is to use FindCustomGui() and BaseCustomGui::SetData().