void rvGEWorkspace::AddModifiers ( EModifierType type, ... ) { va_list args; // Nothing to move if there is no selection if ( !mSelections.Num ( ) ) { return; } // More than one selection requires a modifier group else if ( mSelections.Num ( ) > 1 ) { rvGEModifierGroup* group = new rvGEModifierGroup; int i; for ( i = 0; i < mSelections.Num(); i ++ ) { va_start(args,type); group->Append ( CreateModifier ( type, mSelections[i], args ) ); va_end (args); } mModifiers.Append ( group ); } // Single modifier else { va_start(args,type) ; mModifiers.Append ( CreateModifier ( type, mSelections[0], args ) ); va_end (args) ; } SetModified ( true ); }
/// [+ - obiekt /// [% - modyfikator IObject* ObjectFactory::Construct(std::istream & str) { char lb; char mod; std::string name; IObject* object (NULL); str >> lb; if (lb != '[') throw MakeParserException("Expected '['"); str >> mod; try { switch (mod) { case '+':// add object str >> name; toLowercase(name); object = CreateObject(name, str); break; case '%':// add modifier str >> name; toLowercase(name); object = CreateModifier(name, str); break; default: throw MakeParserException("Expected '%' or '+'"); }; } catch (ParserException& ex) { throw ex; } return object; }
/* ================ rvGEWorkspace::AddModifiers Add the specific modifier for the given window ================ */ void rvGEWorkspace::AddModifiers ( idWindow* window, EModifierType type, ... ) { va_list args; va_start(args,type) ; mModifiers.Append ( CreateModifier ( type, window, args ) ); va_end (args) ; SetModified ( true ); }