void ShaderParamsDialog::onGroupBoxContextMenuRequested(const QPoint&)
{
   QGroupBox *groupBox = NULL;
   QPointer<QAction> action;
   QList<QAction*> actions;
   QScopedPointer<QAction> resetPassAction;
   QScopedPointer<QAction> resetAllPassesAction;
   QVariant passVariant;
   int pass = 0;
   bool ok = false;

   groupBox = qobject_cast<QGroupBox*>(sender());

   if (!groupBox)
      return;

   passVariant = groupBox->property("pass");

   if (!passVariant.isValid())
      return;

   pass = passVariant.toInt(&ok);

   if (!ok)
      return;

   resetPassAction.reset(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET_PASS), 0));
   resetAllPassesAction.reset(new QAction(msg_hash_to_str(MENU_ENUM_LABEL_VALUE_QT_RESET_ALL_PASSES), 0));

   actions.append(resetPassAction.data());
   actions.append(resetAllPassesAction.data());

   action = QMenu::exec(actions, QCursor::pos(), NULL, groupBox);

   if (!action)
      return;

   if (action == resetPassAction.data())
   {
      onShaderResetPass(pass);
   }
   else if (action == resetAllPassesAction.data())
   {
      onShaderResetAllPasses();
   }
}