Solved SetPercent() not working...

Hi,
I am using ProgressDialog() class to show the progress bar in my plugin. I got the example from here.
This example works fine and shows a good progress bar but when I customized it to use for my code it stopped showing the progress percentage which was set using SetPercent().
Here is my code :

void ProgressBarDialog::Timer(const BaseContainer &msg)
{	
	GePrint("ProgressBarDialog::Timer() is called.");
	GePrint("value of percentIncrease = " + String::FloatToString((percentIncrease)));

	percentIncrease += 2.0f;
	SetPercent(percentIncrease/100);

}

Also if I am using the SetPercent() in *void ProgressBarDialog::Main(C4DThread bt) function of ProgressDialog(), it is still not working.

Please help me with this as I am stuck with it for a long time.

Thanks In Advance.

@gogeta said in SetPercent() not working...:

percentIncrease/100

This results in being an Int. Because you divide a float by 100 and that results in an Int rounded to 0.
So simply cast it to float - right as the example you linked, does.

Hi,

I tried the same as suggested by you but it still didn't work :white_frowning_face: .
I even tried with hardcoded float values but still no progress.
I am not able to understand why is this happening :sweat_smile: .

Update: In Main() function of ProgressDialog class I am doing some task and also updating the progress bar with SetPercent(0.1F), SetPercent(0.2F) and so on.
Please guide me.

Thanks.

Would you mind to share the relevant portion of your code?

@mp5gosu Hi,

I can't provide you the exact code but I am providing some portion of code for understanding. Please have a look into this.

Bool ProgressBarDialog::CreateLayout()
{
	return ProgressDialog::CreateLayout();
}

Bool ProgressBarDialog::InitValues()
{
	GePrint("Initializing progress bar values.");
	//percentIncrease = 0.0F;

	//this->SetTimer(1000);
	return ProgressDialog::InitValues();
}

void ProgressBarDialog::Main(C4DThread *bt)
{
        percentIncrease = 0.0F;
	GePrint("In Main function.");
	Bool status = false;
	
	
	/*some variables*/
	...
	...
	...
	String str1;
	String str2;

	/*Set progress bar 10%*/
	SetPercent(0.1f);
	
	DWORD flag = doSomework();

	status = readStatus(arg1,arg2,arg3);
	if (!status)
	{
		MessageDialog("Please Try Again. Facing Issue !");
		isErrorOccurred = true;
		return ;
	}
	
	/*Set progress bar 20%*/
	SetPercent(0.2f);
	//StatusSetBar(10);


	/*some relevant tasks*/

	/*Set progress bar 30%*/
	SetPercent(0.3f);
	
	status = doSomeCommunication(buff1, buff2);
	
	/*Set progress bar 60%*/
	SetPercent(0.6f);
	if (!status)
	{
		/*Set progress bar 70%*/
		SetPercent(0.7f);
		
		/*Perform other tasks*/
		
		/*Set progress bar 80%*/
		SetPercent(0.8f);

	}
	else
	{
		/*Set progress bar 70%*/
		SetPercent(0.7f);
		
		status = doSomeParsing(Buff1, &var1);
		if (!status)
		{
			MessageDialog(buff[0]); //display error msg
			isErrorOccurred = true;
			return ;
		}

		/*Set progress bar 90%*/
		SetPercent(0.9f);
		
		/*do some other tasks*/

	}

	/*Set progress bar 100%*/
	SetPercent(1.f);
}

void ProgressBarDialog::Timer(const BaseContainer &msg)
{	
	GePrint("ProgressBarDialog::Timer() is called.");
	GePrint("value of percentIncrease = " + String::FloatToString((percentIncrease)));

	percentIncrease += 2.0f;
	SetPercent((Float)percentIncrease / 100);
}

Thanks!

Hi @gogeta sorry for the late reply.

Since ProgressDialog makes use of a Timer in order to refresh the UI, you must call the Super::Timer operator like so at the end of your Timer function.

return ProgressDialog::Timer(msg);

If you have any questions please let me know!
Cheers,
Maxime.

@m_adam Hi,

Thanks for your answer. I applied your changes and it worked like a charm :relaxed: .
Thanks again!!!